From e1f589d4ddfbc5cd6fd7d5f564c9c9d83297d302 Mon Sep 17 00:00:00 2001 From: Felipe Coutinho Date: Mon, 13 Oct 2025 21:49:52 -0300 Subject: [PATCH 1/2] Fix NPM package.json missing dependency. --- src/frontend/package-lock.json | 13 + src/frontend/packages/nowvis/package.json | 7 +- src/noworkflow/now/vis/static/dist/bundle.js | 189983 ++++++++------- .../now/vis/static/dist/bundle.js.map | 2 +- 4 files changed, 95012 insertions(+), 94993 deletions(-) diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json index a2e34384..074f4a88 100644 --- a/src/frontend/package-lock.json +++ b/src/frontend/package-lock.json @@ -4624,6 +4624,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/ace-builds": { + "version": "1.43.3", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.3.tgz", + "integrity": "sha512-MCl9rALmXwIty/4Qboijo/yNysx1r6hBTzG+6n/TiOm5LFhZpEvEIcIITPFiEOEFDfgBOEmxu+a4f54LEFM6Sg==", + "license": "BSD-3-Clause" + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -15811,6 +15817,7 @@ "@noworkflow/trial": "0.0.8", "@noworkflow/utils": "0.0.9", "@viz-js/viz": "^3.8.0", + "ace-builds": "^1.43.3", "buffer": "^6.0.3", "child_process": "^1.0.2", "crypto-browserify": "^3.12.0", @@ -18247,6 +18254,7 @@ "@types/d3": "^7.4.3", "@types/file-saver": "^2.0.1", "@viz-js/viz": "^3.8.0", + "ace-builds": "^1.43.3", "babel-loader": "^9.1.3", "buffer": "^6.0.3", "child_process": "^1.0.2", @@ -19941,6 +19949,11 @@ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true }, + "ace-builds": { + "version": "1.43.3", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.3.tgz", + "integrity": "sha512-MCl9rALmXwIty/4Qboijo/yNysx1r6hBTzG+6n/TiOm5LFhZpEvEIcIITPFiEOEFDfgBOEmxu+a4f54LEFM6Sg==" + }, "acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", diff --git a/src/frontend/packages/nowvis/package.json b/src/frontend/packages/nowvis/package.json index c923859f..21864d36 100644 --- a/src/frontend/packages/nowvis/package.json +++ b/src/frontend/packages/nowvis/package.json @@ -14,6 +14,8 @@ "@noworkflow/history": "0.0.11", "@noworkflow/trial": "0.0.8", "@noworkflow/utils": "0.0.9", + "@viz-js/viz": "^3.8.0", + "ace-builds": "^1.43.3", "buffer": "^6.0.3", "child_process": "^1.0.2", "crypto-browserify": "^3.12.0", @@ -21,9 +23,8 @@ "file-saver": "^2.0.5", "fs": "^0.0.1-security", "stream-browserify": "^3.0.0", - "@viz-js/viz": "^3.8.0", - "tau-prolog": "^0.3.4", - "svg-pan-zoom": "^3.6.1" + "svg-pan-zoom": "^3.6.1", + "tau-prolog": "^0.3.4" }, "devDependencies": { "@babel/core": "^7.12.10", diff --git a/src/noworkflow/now/vis/static/dist/bundle.js b/src/noworkflow/now/vis/static/dist/bundle.js index 8ba6d67f..e97971e7 100644 --- a/src/noworkflow/now/vis/static/dist/bundle.js +++ b/src/noworkflow/now/vis/static/dist/bundle.js @@ -24942,96859 +24942,96864 @@ var Private; /***/ }), -/***/ "../../node_modules/asn1.js/lib/asn1.js": -/*!**********************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var asn1 = exports; - -asn1.bignum = __webpack_require__(/*! bn.js */ "../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js"); +/***/ "../../node_modules/ace-builds/src-noconflict/ace.js": +/*!***********************************************************!*\ + !*** ../../node_modules/ace-builds/src-noconflict/ace.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -asn1.define = (__webpack_require__(/*! ./asn1/api */ "../../node_modules/asn1.js/lib/asn1/api.js").define); -asn1.base = __webpack_require__(/*! ./asn1/base */ "../../node_modules/asn1.js/lib/asn1/base/index.js"); -asn1.constants = __webpack_require__(/*! ./asn1/constants */ "../../node_modules/asn1.js/lib/asn1/constants/index.js"); -asn1.decoders = __webpack_require__(/*! ./asn1/decoders */ "../../node_modules/asn1.js/lib/asn1/decoders/index.js"); -asn1.encoders = __webpack_require__(/*! ./asn1/encoders */ "../../node_modules/asn1.js/lib/asn1/encoders/index.js"); +/* module decorator */ module = __webpack_require__.nmd(module); +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Ajax.org B.V. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** */ +/** + * Define a module along with a payload + * @param module a name for the payload + * @param payload a function to call with (require, exports, module) params + */ -/***/ }), +(function() { -/***/ "../../node_modules/asn1.js/lib/asn1/api.js": -/*!**************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/api.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +var ACE_NAMESPACE = "ace"; -var asn1 = __webpack_require__(/*! ../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var global = (function() { return this; })(); +if (!global && typeof window != "undefined") global = window; // strict mode -var api = exports; -api.define = function define(name, body) { - return new Entity(name, body); -}; +if (!ACE_NAMESPACE && typeof requirejs !== "undefined") + return; -function Entity(name, body) { - this.name = name; - this.body = body; - this.decoders = {}; - this.encoders = {}; +var define = function(module, deps, payload) { + if (typeof module !== "string") { + if (define.original) + define.original.apply(this, arguments); + else { + console.error("dropping module because define wasn\'t a string."); + console.trace(); + } + return; + } + if (arguments.length == 2) + payload = deps; + if (!define.modules[module]) { + define.payloads[module] = payload; + define.modules[module] = null; + } }; -Entity.prototype._createNamed = function createNamed(base) { - var named; - try { - named = (__webpack_require__(/*! vm */ "../../node_modules/vm-browserify/index.js").runInThisContext)( - '(function ' + this.name + '(entity) {\n' + - ' this._initNamed(entity);\n' + - '})' - ); - } catch (e) { - named = function (entity) { - this._initNamed(entity); - }; - } - inherits(named, base); - named.prototype._initNamed = function initnamed(entity) { - base.call(this, entity); - }; - - return new named(this); -}; +define.modules = {}; +define.payloads = {}; -Entity.prototype._getDecoder = function _getDecoder(enc) { - enc = enc || 'der'; - // Lazily create decoder - if (!this.decoders.hasOwnProperty(enc)) - this.decoders[enc] = this._createNamed(asn1.decoders[enc]); - return this.decoders[enc]; +/** + * Get at functionality define()ed using the function above + */ +var _require = function(parentId, module, callback) { + if (typeof module === "string") { + var payload = lookup(parentId, module); + if (payload != undefined) { + callback && callback(); + return payload; + } + } else if (Object.prototype.toString.call(module) === "[object Array]") { + var params = []; + for (var i = 0, l = module.length; i < l; ++i) { + var dep = lookup(parentId, module[i]); + if (dep == undefined && require.original) + return; + params.push(dep); + } + return callback && callback.apply(null, params) || true; + } }; -Entity.prototype.decode = function decode(data, enc, options) { - return this._getDecoder(enc).decode(data, options); +var require = function(module, callback) { + var packagedModule = _require("", module, callback); + if (packagedModule == undefined && require.original) + return require.original.apply(this, arguments); + return packagedModule; }; -Entity.prototype._getEncoder = function _getEncoder(enc) { - enc = enc || 'der'; - // Lazily create encoder - if (!this.encoders.hasOwnProperty(enc)) - this.encoders[enc] = this._createNamed(asn1.encoders[enc]); - return this.encoders[enc]; -}; +var normalizeModule = function(parentId, moduleName) { + // normalize plugin requires + if (moduleName.indexOf("!") !== -1) { + var chunks = moduleName.split("!"); + return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); + } + // normalize relative requires + if (moduleName.charAt(0) == ".") { + var base = parentId.split("/").slice(0, -1).join("/"); + moduleName = base + "/" + moduleName; -Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { - return this._getEncoder(enc).encode(data, reporter); + while(moduleName.indexOf(".") !== -1 && previous != moduleName) { + var previous = moduleName; + moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); + } + } + return moduleName; }; +/** + * Internal function to lookup moduleNames and resolve them by calling the + * definition function if needed. + */ +var lookup = function(parentId, moduleName) { + moduleName = normalizeModule(parentId, moduleName); -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/base/buffer.js": -/*!**********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/base/buffer.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var Reporter = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").Reporter); -var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); - -function DecoderBuffer(base, options) { - Reporter.call(this, options); - if (!Buffer.isBuffer(base)) { - this.error('Input not Buffer'); - return; - } + var module = define.modules[moduleName]; + if (!module) { + module = define.payloads[moduleName]; + if (typeof module === 'function') { + var exports = {}; + var mod = { + id: moduleName, + uri: '', + exports: exports, + packaged: true + }; - this.base = base; - this.offset = 0; - this.length = base.length; -} -inherits(DecoderBuffer, Reporter); -exports.DecoderBuffer = DecoderBuffer; + var req = function(module, callback) { + return _require(moduleName, module, callback); + }; -DecoderBuffer.prototype.save = function save() { - return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; + var returnValue = module(req, exports, mod); + exports = returnValue || mod.exports; + define.modules[moduleName] = exports; + delete define.payloads[moduleName]; + } + module = define.modules[moduleName] = exports || module; + } + return module; }; -DecoderBuffer.prototype.restore = function restore(save) { - // Return skipped data - var res = new DecoderBuffer(this.base); - res.offset = save.offset; - res.length = this.offset; - - this.offset = save.offset; - Reporter.prototype.restore.call(this, save.reporter); - - return res; -}; +function exportAce(ns) { + var root = global; + if (ns) { + if (!global[ns]) + global[ns] = {}; + root = global[ns]; + } -DecoderBuffer.prototype.isEmpty = function isEmpty() { - return this.offset === this.length; -}; + if (!root.define || !root.define.packaged) { + define.original = root.define; + root.define = define; + root.define.packaged = true; + } -DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { - if (this.offset + 1 <= this.length) - return this.base.readUInt8(this.offset++, true); - else - return this.error(fail || 'DecoderBuffer overrun'); + if (!root.require || !root.require.packaged) { + require.original = root.require; + root.require = require; + root.require.packaged = true; + } } -DecoderBuffer.prototype.skip = function skip(bytes, fail) { - if (!(this.offset + bytes <= this.length)) - return this.error(fail || 'DecoderBuffer overrun'); - - var res = new DecoderBuffer(this.base); +exportAce(ACE_NAMESPACE); - // Share reporter state - res._reporterState = this._reporterState; +})(); - res.offset = this.offset; - res.length = this.offset + bytes; - this.offset += bytes; - return res; +ace.define("ace/lib/es6-shim",["require","exports","module"], function(require, exports, module){function defineProp(obj, name, val) { + Object.defineProperty(obj, name, { + value: val, + enumerable: false, + writable: true, + configurable: true + }); } - -DecoderBuffer.prototype.raw = function raw(save) { - return this.base.slice(save ? save.offset : this.offset, this.length); +if (!String.prototype.startsWith) { + defineProp(String.prototype, "startsWith", function (searchString, position) { + position = position || 0; + return this.lastIndexOf(searchString, position) === position; + }); } - -function EncoderBuffer(value, reporter) { - if (Array.isArray(value)) { - this.length = 0; - this.value = value.map(function(item) { - if (!(item instanceof EncoderBuffer)) - item = new EncoderBuffer(item, reporter); - this.length += item.length; - return item; - }, this); - } else if (typeof value === 'number') { - if (!(0 <= value && value <= 0xff)) - return reporter.error('non-byte EncoderBuffer value'); - this.value = value; - this.length = 1; - } else if (typeof value === 'string') { - this.value = value; - this.length = Buffer.byteLength(value); - } else if (Buffer.isBuffer(value)) { - this.value = value; - this.length = value.length; - } else { - return reporter.error('Unsupported type: ' + typeof value); - } +if (!String.prototype.endsWith) { + defineProp(String.prototype, "endsWith", function (searchString, position) { + var subjectString = this; + if (position === undefined || position > subjectString.length) { + position = subjectString.length; + } + position -= searchString.length; + var lastIndex = subjectString.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; + }); } -exports.EncoderBuffer = EncoderBuffer; - -EncoderBuffer.prototype.join = function join(out, offset) { - if (!out) - out = new Buffer(this.length); - if (!offset) - offset = 0; - - if (this.length === 0) - return out; - - if (Array.isArray(this.value)) { - this.value.forEach(function(item) { - item.join(out, offset); - offset += item.length; +if (!String.prototype.repeat) { + defineProp(String.prototype, "repeat", function (count) { + var result = ""; + var string = this; + while (count > 0) { + if (count & 1) + result += string; + if ((count >>= 1)) + string += string; + } + return result; }); - } else { - if (typeof this.value === 'number') - out[offset] = this.value; - else if (typeof this.value === 'string') - out.write(this.value, offset); - else if (Buffer.isBuffer(this.value)) - this.value.copy(out, offset); - offset += this.length; - } - - return out; -}; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/base/index.js": -/*!*********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/base/index.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var base = exports; - -base.Reporter = (__webpack_require__(/*! ./reporter */ "../../node_modules/asn1.js/lib/asn1/base/reporter.js").Reporter); -base.DecoderBuffer = (__webpack_require__(/*! ./buffer */ "../../node_modules/asn1.js/lib/asn1/base/buffer.js").DecoderBuffer); -base.EncoderBuffer = (__webpack_require__(/*! ./buffer */ "../../node_modules/asn1.js/lib/asn1/base/buffer.js").EncoderBuffer); -base.Node = __webpack_require__(/*! ./node */ "../../node_modules/asn1.js/lib/asn1/base/node.js"); - +} +if (!String.prototype.includes) { + defineProp(String.prototype, "includes", function (str, position) { + return this.indexOf(str, position) != -1; + }); +} +if (!Object.assign) { + Object.assign = function (target) { + if (target === undefined || target === null) { + throw new TypeError("Cannot convert undefined or null to object"); + } + var output = Object(target); + for (var index = 1; index < arguments.length; index++) { + var source = arguments[index]; + if (source !== undefined && source !== null) { + Object.keys(source).forEach(function (key) { + output[key] = source[key]; + }); + } + } + return output; + }; +} +if (!Object.values) { + Object.values = function (o) { + return Object.keys(o).map(function (k) { + return o[k]; + }); + }; +} +if (!Array.prototype.find) { + defineProp(Array.prototype, "find", function (predicate) { + var len = this.length; + var thisArg = arguments[1]; + for (var k = 0; k < len; k++) { + var kValue = this[k]; + if (predicate.call(thisArg, kValue, k, this)) { + return kValue; + } + } + }); +} +if (!Array.prototype.findIndex) { + defineProp(Array.prototype, "findIndex", function (predicate) { + var len = this.length; + var thisArg = arguments[1]; + for (var k = 0; k < len; k++) { + var kValue = this[k]; + if (predicate.call(thisArg, kValue, k, this)) { + return k; + } + } + }); +} +if (!Array.prototype.includes) { + defineProp(Array.prototype, "includes", function (item, position) { + return this.indexOf(item, position) != -1; + }); +} +if (!Array.prototype.fill) { + defineProp(Array.prototype, "fill", function (value) { + var O = this; + var len = O.length >>> 0; + var start = arguments[1]; + var relativeStart = start >> 0; + var k = relativeStart < 0 + ? Math.max(len + relativeStart, 0) + : Math.min(relativeStart, len); + var end = arguments[2]; + var relativeEnd = end === undefined ? len : end >> 0; + var final = relativeEnd < 0 + ? Math.max(len + relativeEnd, 0) + : Math.min(relativeEnd, len); + while (k < final) { + O[k] = value; + k++; + } + return O; + }); +} +if (!Array.of) { + defineProp(Array, "of", function () { + return Array.prototype.slice.call(arguments); + }); +} -/***/ }), +}); -/***/ "../../node_modules/asn1.js/lib/asn1/base/node.js": -/*!********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/base/node.js ***! - \********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/es6-shim"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st: +"use strict"; +require("./es6-shim"); -var Reporter = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").Reporter); -var EncoderBuffer = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").EncoderBuffer); -var DecoderBuffer = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").DecoderBuffer); -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); +}); -// Supported tags -var tags = [ - 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', - 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', - 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', - 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' -]; +ace.define("ace/lib/deep_copy",["require","exports","module"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) { + if (typeof obj !== "object" || !obj) + return obj; + var copy; + if (Array.isArray(obj)) { + copy = []; + for (var key = 0; key < obj.length; key++) { + copy[key] = deepCopy(obj[key]); + } + return copy; + } + if (Object.prototype.toString.call(obj) !== "[object Object]") + return obj; + copy = {}; + for (var key in obj) + copy[key] = deepCopy(obj[key]); + return copy; +}; -// Public methods list -var methods = [ - 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', - 'any', 'contains' -].concat(tags); +}); -// Overrided methods list -var overrided = [ - '_peekTag', '_decodeTag', '_use', - '_decodeStr', '_decodeObjid', '_decodeTime', - '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', - - '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', - '_encodeNull', '_encodeInt', '_encodeBool' -]; - -function Node(enc, parent) { - var state = {}; - this._baseState = state; - - state.enc = enc; - - state.parent = parent || null; - state.children = null; - - // State - state.tag = null; - state.args = null; - state.reverseArgs = null; - state.choice = null; - state.optional = false; - state.any = false; - state.obj = false; - state.use = null; - state.useDecoder = null; - state.key = null; - state['default'] = null; - state.explicit = null; - state.implicit = null; - state.contains = null; - - // Should create new instance on each method - if (!state.parent) { - state.children = []; - this._wrap(); - } -} -module.exports = Node; - -var stateProps = [ - 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', - 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', - 'implicit', 'contains' -]; - -Node.prototype.clone = function clone() { - var state = this._baseState; - var cstate = {}; - stateProps.forEach(function(prop) { - cstate[prop] = state[prop]; - }); - var res = new this.constructor(cstate.parent); - res._baseState = cstate; - return res; +ace.define("ace/lib/lang",["require","exports","module","ace/lib/deep_copy"], function(require, exports, module){"use strict"; +exports.last = function (a) { + return a[a.length - 1]; }; - -Node.prototype._wrap = function wrap() { - var state = this._baseState; - methods.forEach(function(method) { - this[method] = function _wrappedMethod() { - var clone = new this.constructor(this); - state.children.push(clone); - return clone[method].apply(clone, arguments); - }; - }, this); +exports.stringReverse = function (string) { + return string.split("").reverse().join(""); }; - -Node.prototype._init = function init(body) { - var state = this._baseState; - - assert(state.parent === null); - body.call(this); - - // Filter children - state.children = state.children.filter(function(child) { - return child._baseState.parent === this; - }, this); - assert.equal(state.children.length, 1, 'Root node can have only one child'); +exports.stringRepeat = function (string, count) { + var result = ''; + while (count > 0) { + if (count & 1) + result += string; + if (count >>= 1) + string += string; + } + return result; }; - -Node.prototype._useArgs = function useArgs(args) { - var state = this._baseState; - - // Filter children and args - var children = args.filter(function(arg) { - return arg instanceof this.constructor; - }, this); - args = args.filter(function(arg) { - return !(arg instanceof this.constructor); - }, this); - - if (children.length !== 0) { - assert(state.children === null); - state.children = children; - - // Replace parent to maintain backward link - children.forEach(function(child) { - child._baseState.parent = this; - }, this); - } - if (args.length !== 0) { - assert(state.args === null); - state.args = args; - state.reverseArgs = args.map(function(arg) { - if (typeof arg !== 'object' || arg.constructor !== Object) - return arg; - - var res = {}; - Object.keys(arg).forEach(function(key) { - if (key == (key | 0)) - key |= 0; - var value = arg[key]; - res[value] = key; - }); - return res; - }); - } +var trimBeginRegexp = /^\s\s*/; +var trimEndRegexp = /\s\s*$/; +exports.stringTrimLeft = function (string) { + return string.replace(trimBeginRegexp, ''); }; - -// -// Overrided methods -// - -overrided.forEach(function(method) { - Node.prototype[method] = function _overrided() { - var state = this._baseState; - throw new Error(method + ' not implemented for encoding: ' + state.enc); - }; -}); - -// -// Public methods -// - -tags.forEach(function(tag) { - Node.prototype[tag] = function _tagMethod() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); - - assert(state.tag === null); - state.tag = tag; - - this._useArgs(args); - - return this; - }; -}); - -Node.prototype.use = function use(item) { - assert(item); - var state = this._baseState; - - assert(state.use === null); - state.use = item; - - return this; +exports.stringTrimRight = function (string) { + return string.replace(trimEndRegexp, ''); }; - -Node.prototype.optional = function optional() { - var state = this._baseState; - - state.optional = true; - - return this; +exports.copyObject = function (obj) { + var copy = {}; + for (var key in obj) { + copy[key] = obj[key]; + } + return copy; }; - -Node.prototype.def = function def(val) { - var state = this._baseState; - - assert(state['default'] === null); - state['default'] = val; - state.optional = true; - - return this; +exports.copyArray = function (array) { + var copy = []; + for (var i = 0, l = array.length; i < l; i++) { + if (array[i] && typeof array[i] == "object") + copy[i] = this.copyObject(array[i]); + else + copy[i] = array[i]; + } + return copy; }; - -Node.prototype.explicit = function explicit(num) { - var state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.explicit = num; - - return this; +exports.deepCopy = require("./deep_copy").deepCopy; +exports.arrayToMap = function (arr) { + var map = {}; + for (var i = 0; i < arr.length; i++) { + map[arr[i]] = 1; + } + return map; }; - -Node.prototype.implicit = function implicit(num) { - var state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.implicit = num; - - return this; +exports.createMap = function (props) { + var map = Object.create(null); + for (var i in props) { + map[i] = props[i]; + } + return map; }; - -Node.prototype.obj = function obj() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); - - state.obj = true; - - if (args.length !== 0) - this._useArgs(args); - - return this; +exports.arrayRemove = function (array, value) { + for (var i = 0; i <= array.length; i++) { + if (value === array[i]) { + array.splice(i, 1); + } + } }; - -Node.prototype.key = function key(newKey) { - var state = this._baseState; - - assert(state.key === null); - state.key = newKey; - - return this; +exports.escapeRegExp = function (str) { + return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1'); }; - -Node.prototype.any = function any() { - var state = this._baseState; - - state.any = true; - - return this; +exports.escapeHTML = function (str) { + return ("" + str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/ 0xffff ? 2 : 1; +}; - var start = input.offset; - - // Unwrap implicit and normal values - if (state.use === null && state.choice === null) { - if (state.any) - var save = input.save(); - var body = this._decodeTag( - input, - state.implicit !== null ? state.implicit : state.tag, - state.any - ); - if (input.isError(body)) - return body; +}); - if (state.any) - result = input.raw(save); - else - input = body; +ace.define("ace/lib/useragent",["require","exports","module"], function(require, exports, module){"use strict"; +exports.OS = { + LINUX: "LINUX", + MAC: "MAC", + WINDOWS: "WINDOWS" +}; +exports.getOS = function () { + if (exports.isMac) { + return exports.OS.MAC; } - - if (options && options.track && state.tag !== null) - options.track(input.path(), start, input.length, 'tagged'); - - if (options && options.track && state.tag !== null) - options.track(input.path(), input.offset, input.length, 'content'); - - // Select proper method for tag - if (state.any) - result = result; - else if (state.choice === null) - result = this._decodeGeneric(state.tag, input, options); - else - result = this._decodeChoice(input, options); - - if (input.isError(result)) - return result; - - // Decode children - if (!state.any && state.choice === null && state.children !== null) { - state.children.forEach(function decodeChildren(child) { - // NOTE: We are ignoring errors here, to let parser continue with other - // parts of encoded data - child._decode(input, options); - }); + else if (exports.isLinux) { + return exports.OS.LINUX; } - - // Decode contained/encoded by schema, only in bit or octet strings - if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { - var data = new DecoderBuffer(result); - result = this._getUse(state.contains, input._reporterState.obj) - ._decode(data, options); + else { + return exports.OS.WINDOWS; } - } - - // Pop object - if (state.obj && present) - result = input.leaveObject(prevObj); - - // Set key - if (state.key !== null && (result !== null || present === true)) - input.leaveKey(prevKey, state.key, result); - else if (prevKey !== null) - input.exitKey(prevKey); - - return result; }; +var _navigator = typeof navigator == "object" ? navigator : {}; +var os = (/mac|win|linux/i.exec(_navigator.platform) || ["other"])[0].toLowerCase(); +var ua = _navigator.userAgent || ""; +var appName = _navigator.appName || ""; +exports.isWin = (os == "win"); +exports.isMac = (os == "mac"); +exports.isLinux = (os == "linux"); +exports.isIE = + (appName == "Microsoft Internet Explorer" || appName.indexOf("MSAppHost") >= 0) + ? parseFloat((ua.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/) || [])[1]) + : parseFloat((ua.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/) || [])[1]); // for ie +exports.isOldIE = exports.isIE && exports.isIE < 9; +exports.isGecko = exports.isMozilla = ua.match(/ Gecko\/\d+/); +exports.isOpera = typeof opera == "object" && Object.prototype.toString.call(window["opera"]) == "[object Opera]"; +exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; +exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; +exports.isSafari = parseFloat(ua.split(" Safari/")[1]) && !exports.isChrome || undefined; +exports.isEdge = parseFloat(ua.split(" Edge/")[1]) || undefined; +exports.isAIR = ua.indexOf("AdobeAIR") >= 0; +exports.isAndroid = ua.indexOf("Android") >= 0; +exports.isChromeOS = ua.indexOf(" CrOS ") >= 0; +exports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window["MSStream"]; +if (exports.isIOS) + exports.isMac = true; +exports.isMobile = exports.isIOS || exports.isAndroid; -Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { - var state = this._baseState; - - if (tag === 'seq' || tag === 'set') - return null; - if (tag === 'seqof' || tag === 'setof') - return this._decodeList(input, tag, state.args[0], options); - else if (/str$/.test(tag)) - return this._decodeStr(input, tag, options); - else if (tag === 'objid' && state.args) - return this._decodeObjid(input, state.args[0], state.args[1], options); - else if (tag === 'objid') - return this._decodeObjid(input, null, null, options); - else if (tag === 'gentime' || tag === 'utctime') - return this._decodeTime(input, tag, options); - else if (tag === 'null_') - return this._decodeNull(input, options); - else if (tag === 'bool') - return this._decodeBool(input, options); - else if (tag === 'objDesc') - return this._decodeStr(input, tag, options); - else if (tag === 'int' || tag === 'enum') - return this._decodeInt(input, state.args && state.args[0], options); - - if (state.use !== null) { - return this._getUse(state.use, input._reporterState.obj) - ._decode(input, options); - } else { - return input.error('unknown tag: ' + tag); - } -}; - -Node.prototype._getUse = function _getUse(entity, obj) { - - var state = this._baseState; - // Create altered use decoder if implicit is set - state.useDecoder = this._use(entity, obj); - assert(state.useDecoder._baseState.parent === null); - state.useDecoder = state.useDecoder._baseState.children[0]; - if (state.implicit !== state.useDecoder._baseState.implicit) { - state.useDecoder = state.useDecoder.clone(); - state.useDecoder._baseState.implicit = state.implicit; - } - return state.useDecoder; -}; - -Node.prototype._decodeChoice = function decodeChoice(input, options) { - var state = this._baseState; - var result = null; - var match = false; - - Object.keys(state.choice).some(function(key) { - var save = input.save(); - var node = state.choice[key]; - try { - var value = node._decode(input, options); - if (input.isError(value)) - return false; +}); - result = { type: key, value: value }; - match = true; - } catch (e) { - input.restore(save); - return false; +ace.define("ace/lib/dom",["require","exports","module","ace/lib/useragent"], function(require, exports, module){"use strict"; +var useragent = require("./useragent"); +var XHTML_NS = "http://www.w3.org/1999/xhtml"; +exports.buildDom = function buildDom(arr, parent, refs) { + if (typeof arr == "string" && arr) { + var txt = document.createTextNode(arr); + if (parent) + parent.appendChild(txt); + return txt; } - return true; - }, this); - - if (!match) - return input.error('Choice not matched'); - - return result; -}; - -// -// Encoding -// - -Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { - return new EncoderBuffer(data, this.reporter); -}; - -Node.prototype._encode = function encode(data, reporter, parent) { - var state = this._baseState; - if (state['default'] !== null && state['default'] === data) - return; - - var result = this._encodeValue(data, reporter, parent); - if (result === undefined) - return; - - if (this._skipDefault(result, reporter, parent)) - return; - - return result; -}; - -Node.prototype._encodeValue = function encode(data, reporter, parent) { - var state = this._baseState; - - // Decode root node - if (state.parent === null) - return state.children[0]._encode(data, reporter || new Reporter()); - - var result = null; - - // Set reporter to share it with a child class - this.reporter = reporter; - - // Check if data is there - if (state.optional && data === undefined) { - if (state['default'] !== null) - data = state['default'] - else - return; - } - - // Encode children first - var content = null; - var primitive = false; - if (state.any) { - // Anything that was given is translated to buffer - result = this._createEncoderBuffer(data); - } else if (state.choice) { - result = this._encodeChoice(data, reporter); - } else if (state.contains) { - content = this._getUse(state.contains, parent)._encode(data, reporter); - primitive = true; - } else if (state.children) { - content = state.children.map(function(child) { - if (child._baseState.tag === 'null_') - return child._encode(null, reporter, data); - - if (child._baseState.key === null) - return reporter.error('Child should have a key'); - var prevKey = reporter.enterKey(child._baseState.key); - - if (typeof data !== 'object') - return reporter.error('Child expected, but input is not object'); - - var res = child._encode(data[child._baseState.key], reporter, data); - reporter.leaveKey(prevKey); - - return res; - }, this).filter(function(child) { - return child; - }); - content = this._createEncoderBuffer(content); - } else { - if (state.tag === 'seqof' || state.tag === 'setof') { - // TODO(indutny): this should be thrown on DSL level - if (!(state.args && state.args.length === 1)) - return reporter.error('Too many args for : ' + state.tag); - - if (!Array.isArray(data)) - return reporter.error('seqof/setof, but data is not Array'); - - var child = this.clone(); - child._baseState.implicit = null; - content = this._createEncoderBuffer(data.map(function(item) { - var state = this._baseState; - - return this._getUse(state.args[0], data)._encode(item, reporter); - }, child)); - } else if (state.use !== null) { - result = this._getUse(state.use, parent)._encode(data, reporter); - } else { - content = this._encodePrimitive(state.tag, data); - primitive = true; + if (!Array.isArray(arr)) { + if (arr && arr.appendChild && parent) + parent.appendChild(arr); + return arr; } - } - - // Encode data itself - var result; - if (!state.any && state.choice === null) { - var tag = state.implicit !== null ? state.implicit : state.tag; - var cls = state.implicit === null ? 'universal' : 'context'; - - if (tag === null) { - if (state.use === null) - reporter.error('Tag could be omitted only for .use()'); - } else { - if (state.use === null) - result = this._encodeComposite(tag, primitive, cls, content); + if (typeof arr[0] != "string" || !arr[0]) { + var els = []; + for (var i = 0; i < arr.length; i++) { + var ch = buildDom(arr[i], parent, refs); + ch && els.push(ch); + } + return els; } - } - - // Wrap in explicit - if (state.explicit !== null) - result = this._encodeComposite(state.explicit, false, 'context', result); - - return result; -}; - -Node.prototype._encodeChoice = function encodeChoice(data, reporter) { - var state = this._baseState; - - var node = state.choice[data.type]; - if (!node) { - assert( - false, - data.type + ' not found in ' + - JSON.stringify(Object.keys(state.choice))); - } - return node._encode(data.value, reporter); -}; - -Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { - var state = this._baseState; - - if (/str$/.test(tag)) - return this._encodeStr(data, tag); - else if (tag === 'objid' && state.args) - return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); - else if (tag === 'objid') - return this._encodeObjid(data, null, null); - else if (tag === 'gentime' || tag === 'utctime') - return this._encodeTime(data, tag); - else if (tag === 'null_') - return this._encodeNull(); - else if (tag === 'int' || tag === 'enum') - return this._encodeInt(data, state.args && state.reverseArgs[0]); - else if (tag === 'bool') - return this._encodeBool(data); - else if (tag === 'objDesc') - return this._encodeStr(data, tag); - else - throw new Error('Unsupported tag: ' + tag); -}; - -Node.prototype._isNumstr = function isNumstr(str) { - return /^[0-9 ]*$/.test(str); -}; - -Node.prototype._isPrintstr = function isPrintstr(str) { - return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); -}; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/base/reporter.js": -/*!************************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/base/reporter.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -function Reporter(options) { - this._reporterState = { - obj: null, - path: [], - options: options || {}, - errors: [] - }; -} -exports.Reporter = Reporter; - -Reporter.prototype.isError = function isError(obj) { - return obj instanceof ReporterError; + var el = document.createElement(arr[0]); + var options = arr[1]; + var childIndex = 1; + if (options && typeof options == "object" && !Array.isArray(options)) + childIndex = 2; + for (var i = childIndex; i < arr.length; i++) + buildDom(arr[i], el, refs); + if (childIndex == 2) { + Object.keys(options).forEach(function (n) { + var val = options[n]; + if (n === "class") { + el.className = Array.isArray(val) ? val.join(" ") : val; + } + else if (typeof val == "function" || n == "value" || n[0] == "$") { + el[n] = val; + } + else if (n === "ref") { + if (refs) + refs[val] = el; + } + else if (n === "style") { + if (typeof val == "string") + el.style.cssText = val; + } + else if (val != null) { + el.setAttribute(n, val); + } + }); + } + if (parent) + parent.appendChild(el); + return el; }; - -Reporter.prototype.save = function save() { - var state = this._reporterState; - - return { obj: state.obj, pathLen: state.path.length }; +exports.getDocumentHead = function (doc) { + if (!doc) + doc = document; + return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; }; - -Reporter.prototype.restore = function restore(data) { - var state = this._reporterState; - - state.obj = data.obj; - state.path = state.path.slice(0, data.pathLen); +exports.createElement = function (tag, ns) { + return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag); }; - -Reporter.prototype.enterKey = function enterKey(key) { - return this._reporterState.path.push(key); +exports.removeChildren = function (element) { + element.innerHTML = ""; }; - -Reporter.prototype.exitKey = function exitKey(index) { - var state = this._reporterState; - - state.path = state.path.slice(0, index - 1); +exports.createTextNode = function (textContent, element) { + var doc = element ? element.ownerDocument : document; + return doc.createTextNode(textContent); }; - -Reporter.prototype.leaveKey = function leaveKey(index, key, value) { - var state = this._reporterState; - - this.exitKey(index); - if (state.obj !== null) - state.obj[key] = value; +exports.createFragment = function (element) { + var doc = element ? element.ownerDocument : document; + return doc.createDocumentFragment(); }; - -Reporter.prototype.path = function path() { - return this._reporterState.path.join('/'); +exports.hasCssClass = function (el, name) { + var classes = (el.className + "").split(/\s+/g); + return classes.indexOf(name) !== -1; }; - -Reporter.prototype.enterObject = function enterObject() { - var state = this._reporterState; - - var prev = state.obj; - state.obj = {}; - return prev; +exports.addCssClass = function (el, name) { + if (!exports.hasCssClass(el, name)) { + el.className += " " + name; + } }; - -Reporter.prototype.leaveObject = function leaveObject(prev) { - var state = this._reporterState; - - var now = state.obj; - state.obj = prev; - return now; +exports.removeCssClass = function (el, name) { + var classes = el.className.split(/\s+/g); + while (true) { + var index = classes.indexOf(name); + if (index == -1) { + break; + } + classes.splice(index, 1); + } + el.className = classes.join(" "); }; - -Reporter.prototype.error = function error(msg) { - var err; - var state = this._reporterState; - - var inherited = msg instanceof ReporterError; - if (inherited) { - err = msg; - } else { - err = new ReporterError(state.path.map(function(elem) { - return '[' + JSON.stringify(elem) + ']'; - }).join(''), msg.message || msg, msg.stack); - } - - if (!state.options.partial) - throw err; - - if (!inherited) - state.errors.push(err); - - return err; +exports.toggleCssClass = function (el, name) { + var classes = el.className.split(/\s+/g), add = true; + while (true) { + var index = classes.indexOf(name); + if (index == -1) { + break; + } + add = false; + classes.splice(index, 1); + } + if (add) + classes.push(name); + el.className = classes.join(" "); + return add; }; - -Reporter.prototype.wrapResult = function wrapResult(result) { - var state = this._reporterState; - if (!state.options.partial) - return result; - - return { - result: this.isError(result) ? null : result, - errors: state.errors - }; +exports.setCssClass = function (node, className, include) { + if (include) { + exports.addCssClass(node, className); + } + else { + exports.removeCssClass(node, className); + } }; - -function ReporterError(path, msg) { - this.path = path; - this.rethrow(msg); +exports.hasCssString = function (id, doc) { + var index = 0, sheets; + doc = doc || document; + if ((sheets = doc.querySelectorAll("style"))) { + while (index < sheets.length) { + if (sheets[index++].id === id) { + return true; + } + } + } }; -inherits(ReporterError, Error); - -ReporterError.prototype.rethrow = function rethrow(msg) { - this.message = msg + ' at: ' + (this.path || '(shallow)'); - if (Error.captureStackTrace) - Error.captureStackTrace(this, ReporterError); - - if (!this.stack) { - try { - // IE only adds stack when thrown - throw new Error(this.message); - } catch (e) { - this.stack = e.stack; +exports.removeElementById = function (id, doc) { + doc = doc || document; + if (doc.getElementById(id)) { + doc.getElementById(id).remove(); } - } - return this; }; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/constants/der.js": -/*!************************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/constants/der.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var constants = __webpack_require__(/*! ../constants */ "../../node_modules/asn1.js/lib/asn1/constants/index.js"); - -exports.tagClass = { - 0: 'universal', - 1: 'application', - 2: 'context', - 3: 'private' +var strictCSP; +var cssCache = []; +exports.useStrictCSP = function (value) { + strictCSP = value; + if (value == false) + insertPendingStyles(); + else if (!cssCache) + cssCache = []; }; -exports.tagClassByName = constants._reverse(exports.tagClass); - -exports.tag = { - 0x00: 'end', - 0x01: 'bool', - 0x02: 'int', - 0x03: 'bitstr', - 0x04: 'octstr', - 0x05: 'null_', - 0x06: 'objid', - 0x07: 'objDesc', - 0x08: 'external', - 0x09: 'real', - 0x0a: 'enum', - 0x0b: 'embed', - 0x0c: 'utf8str', - 0x0d: 'relativeOid', - 0x10: 'seq', - 0x11: 'set', - 0x12: 'numstr', - 0x13: 'printstr', - 0x14: 't61str', - 0x15: 'videostr', - 0x16: 'ia5str', - 0x17: 'utctime', - 0x18: 'gentime', - 0x19: 'graphstr', - 0x1a: 'iso646str', - 0x1b: 'genstr', - 0x1c: 'unistr', - 0x1d: 'charstr', - 0x1e: 'bmpstr' +function insertPendingStyles() { + var cache = cssCache; + cssCache = null; + cache && cache.forEach(function (item) { + importCssString(item[0], item[1]); + }); +} +function importCssString(cssText, id, target) { + if (typeof document == "undefined") + return; + if (cssCache) { + if (target) { + insertPendingStyles(); + } + else if (target === false) { + return cssCache.push([cssText, id]); + } + } + if (strictCSP) + return; + var container = target; + if (!target || !target.getRootNode) { + container = document; + } + else { + container = target.getRootNode(); + if (!container || container == target) + container = document; + } + var doc = container.ownerDocument || container; + if (id && exports.hasCssString(id, container)) + return null; + if (id) + cssText += "\n/*# sourceURL=ace/css/" + id + " */"; + var style = exports.createElement("style"); + style.appendChild(doc.createTextNode(cssText)); + if (id) + style.id = id; + if (container == doc) + container = exports.getDocumentHead(doc); + container.insertBefore(style, container.firstChild); +} +exports.importCssString = importCssString; +exports.importCssStylsheet = function (uri, doc) { + exports.buildDom(["link", { rel: "stylesheet", href: uri }], exports.getDocumentHead(doc)); }; -exports.tagByName = constants._reverse(exports.tag); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/constants/index.js": -/*!**************************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/constants/index.js ***! - \**************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var constants = exports; - -// Helper -constants._reverse = function reverse(map) { - var res = {}; - - Object.keys(map).forEach(function(key) { - // Convert key to integer if it is stringified - if ((key | 0) == key) - key = key | 0; - - var value = map[key]; - res[value] = key; - }); - - return res; +exports.scrollbarWidth = function (doc) { + var inner = exports.createElement("ace_inner"); + inner.style.width = "100%"; + inner.style.minWidth = "0px"; + inner.style.height = "200px"; + inner.style.display = "block"; + var outer = exports.createElement("ace_outer"); + var style = outer.style; + style.position = "absolute"; + style.left = "-10000px"; + style.overflow = "hidden"; + style.width = "200px"; + style.minWidth = "0px"; + style.height = "150px"; + style.display = "block"; + outer.appendChild(inner); + var body = (doc && doc.documentElement) || (document && document.documentElement); + if (!body) + return 0; + body.appendChild(outer); + var noScrollbar = inner.offsetWidth; + style.overflow = "scroll"; + var withScrollbar = inner.offsetWidth; + if (noScrollbar === withScrollbar) { + withScrollbar = outer.clientWidth; + } + body.removeChild(outer); + return noScrollbar - withScrollbar; }; - -constants.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/constants/der.js"); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/decoders/der.js": -/*!***********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/decoders/der.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -var asn1 = __webpack_require__(/*! ../../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); -var base = asn1.base; -var bignum = asn1.bignum; - -// Import DER constants -var der = asn1.constants.der; - -function DERDecoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); +exports.computedStyle = function (element, style) { + return window.getComputedStyle(element, "") || {}; }; -module.exports = DERDecoder; - -DERDecoder.prototype.decode = function decode(data, options) { - if (!(data instanceof base.DecoderBuffer)) - data = new base.DecoderBuffer(data, options); - - return this.tree._decode(data, options); +exports.setStyle = function (styles, property, value) { + if (styles[property] !== value) { + styles[property] = value; + } }; - -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); +exports.HAS_CSS_ANIMATION = false; +exports.HAS_CSS_TRANSFORMS = false; +exports.HI_DPI = useragent.isWin + ? typeof window !== "undefined" && window.devicePixelRatio >= 1.5 + : true; +if (useragent.isChromeOS) + exports.HI_DPI = false; +if (typeof document !== "undefined") { + var div = document.createElement("div"); + if (exports.HI_DPI && div.style.transform !== undefined) + exports.HAS_CSS_TRANSFORMS = true; + if (!useragent.isEdge && typeof div.style.animationName !== "undefined") + exports.HAS_CSS_ANIMATION = true; + div = null; +} +if (exports.HAS_CSS_TRANSFORMS) { + exports.translate = function (element, tx, ty) { + element.style.transform = "translate(" + Math.round(tx) + "px, " + Math.round(ty) + "px)"; + }; +} +else { + exports.translate = function (element, tx, ty) { + element.style.top = Math.round(ty) + "px"; + element.style.left = Math.round(tx) + "px"; + }; } -inherits(DERNode, base.Node); - -DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { - if (buffer.isEmpty()) - return false; - - var state = buffer.save(); - var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - buffer.restore(state); +}); - return decodedTag.tag === tag || decodedTag.tagStr === tag || - (decodedTag.tagStr + 'of') === tag || any; +ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(require, exports, module){/* + * based on code from: + * + * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/requirejs for details + */ +"use strict"; +var dom = require("./dom"); +exports.get = function (url, callback) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + callback(xhr.responseText); + } + }; + xhr.send(null); }; - -DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { - var decodedTag = derDecodeTag(buffer, - 'Failed to decode tag of "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - - var len = derDecodeLen(buffer, - decodedTag.primitive, - 'Failed to get length of "' + tag + '"'); - - // Failure - if (buffer.isError(len)) - return len; - - if (!any && - decodedTag.tag !== tag && - decodedTag.tagStr !== tag && - decodedTag.tagStr + 'of' !== tag) { - return buffer.error('Failed to match tag: "' + tag + '"'); - } - - if (decodedTag.primitive || len !== null) - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); - - // Indefinite length... find END tag - var state = buffer.save(); - var res = this._skipUntilEnd( - buffer, - 'Failed to skip indefinite length body: "' + this.tag + '"'); - if (buffer.isError(res)) - return res; - - len = buffer.offset - state.offset; - buffer.restore(state); - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +exports.loadScript = function (path, callback) { + var head = dom.getDocumentHead(); + var s = document.createElement('script'); + s.src = path; + head.appendChild(s); + s.onload = s.onreadystatechange = function (_, isAbort) { + if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") { + s = s.onload = s.onreadystatechange = null; + if (!isAbort) + callback(); + } + }; }; - -DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { - while (true) { - var tag = derDecodeTag(buffer, fail); - if (buffer.isError(tag)) - return tag; - var len = derDecodeLen(buffer, tag.primitive, fail); - if (buffer.isError(len)) - return len; - - var res; - if (tag.primitive || len !== null) - res = buffer.skip(len) - else - res = this._skipUntilEnd(buffer, fail); - - // Failure - if (buffer.isError(res)) - return res; - - if (tag.tagStr === 'end') - break; - } +exports.qualifyURL = function (url) { + var a = document.createElement('a'); + a.href = url; + return a.href; }; -DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, - options) { - var result = []; - while (!buffer.isEmpty()) { - var possibleEnd = this._peekTag(buffer, 'end'); - if (buffer.isError(possibleEnd)) - return possibleEnd; +}); - var res = decoder.decode(buffer, 'der', options); - if (buffer.isError(res) && possibleEnd) - break; - result.push(res); - } - return result; +ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module){"use strict"; +exports.inherits = function (ctor, superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); +}; +exports.mixin = function (obj, mixin) { + for (var key in mixin) { + obj[key] = mixin[key]; + } + return obj; +}; +exports.implement = function (proto, mixin) { + exports.mixin(proto, mixin); }; -DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { - if (tag === 'bitstr') { - var unused = buffer.readUInt8(); - if (buffer.isError(unused)) - return unused; - return { unused: unused, data: buffer.raw() }; - } else if (tag === 'bmpstr') { - var raw = buffer.raw(); - if (raw.length % 2 === 1) - return buffer.error('Decoding of string type: bmpstr length mismatch'); +}); - var str = ''; - for (var i = 0; i < raw.length / 2; i++) { - str += String.fromCharCode(raw.readUInt16BE(i * 2)); +ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module){"use strict"; +var EventEmitter = {}; +var stopPropagation = function () { this.propagationStopped = true; }; +var preventDefault = function () { this.defaultPrevented = true; }; +EventEmitter._emit = + EventEmitter._dispatchEvent = function (eventName, e) { + this._eventRegistry || (this._eventRegistry = {}); + this._defaultHandlers || (this._defaultHandlers = {}); + var listeners = this._eventRegistry[eventName] || []; + var defaultHandler = this._defaultHandlers[eventName]; + if (!listeners.length && !defaultHandler) + return; + if (typeof e != "object" || !e) + e = {}; + if (!e.type) + e.type = eventName; + if (!e.stopPropagation) + e.stopPropagation = stopPropagation; + if (!e.preventDefault) + e.preventDefault = preventDefault; + listeners = listeners.slice(); + for (var i = 0; i < listeners.length; i++) { + listeners[i](e, this); + if (e.propagationStopped) + break; + } + if (defaultHandler && !e.defaultPrevented) + return defaultHandler(e, this); + }; +EventEmitter._signal = function (eventName, e) { + var listeners = (this._eventRegistry || {})[eventName]; + if (!listeners) + return; + listeners = listeners.slice(); + for (var i = 0; i < listeners.length; i++) + listeners[i](e, this); +}; +EventEmitter.once = function (eventName, callback) { + var _self = this; + this.on(eventName, function newCallback() { + _self.off(eventName, newCallback); + callback.apply(null, arguments); + }); + if (!callback) { + return new Promise(function (resolve) { + callback = resolve; + }); } - return str; - } else if (tag === 'numstr') { - var numstr = buffer.raw().toString('ascii'); - if (!this._isNumstr(numstr)) { - return buffer.error('Decoding of string type: ' + - 'numstr unsupported characters'); +}; +EventEmitter.setDefaultHandler = function (eventName, callback) { + var handlers = this._defaultHandlers; + if (!handlers) + handlers = this._defaultHandlers = { _disabled_: {} }; + if (handlers[eventName]) { + var old = handlers[eventName]; + var disabled = handlers._disabled_[eventName]; + if (!disabled) + handlers._disabled_[eventName] = disabled = []; + disabled.push(old); + var i = disabled.indexOf(callback); + if (i != -1) + disabled.splice(i, 1); } - return numstr; - } else if (tag === 'octstr') { - return buffer.raw(); - } else if (tag === 'objDesc') { - return buffer.raw(); - } else if (tag === 'printstr') { - var printstr = buffer.raw().toString('ascii'); - if (!this._isPrintstr(printstr)) { - return buffer.error('Decoding of string type: ' + - 'printstr unsupported characters'); + handlers[eventName] = callback; +}; +EventEmitter.removeDefaultHandler = function (eventName, callback) { + var handlers = this._defaultHandlers; + if (!handlers) + return; + var disabled = handlers._disabled_[eventName]; + if (handlers[eventName] == callback) { + if (disabled) + this.setDefaultHandler(eventName, disabled.pop()); } - return printstr; - } else if (/str$/.test(tag)) { - return buffer.raw().toString(); - } else { - return buffer.error('Decoding of string type: ' + tag + ' unsupported'); - } + else if (disabled) { + var i = disabled.indexOf(callback); + if (i != -1) + disabled.splice(i, 1); + } +}; +EventEmitter.on = + EventEmitter.addEventListener = function (eventName, callback, capturing) { + this._eventRegistry = this._eventRegistry || {}; + var listeners = this._eventRegistry[eventName]; + if (!listeners) + listeners = this._eventRegistry[eventName] = []; + if (listeners.indexOf(callback) == -1) + listeners[capturing ? "unshift" : "push"](callback); + return callback; + }; +EventEmitter.off = + EventEmitter.removeListener = + EventEmitter.removeEventListener = function (eventName, callback) { + this._eventRegistry = this._eventRegistry || {}; + var listeners = this._eventRegistry[eventName]; + if (!listeners) + return; + var index = listeners.indexOf(callback); + if (index !== -1) + listeners.splice(index, 1); + }; +EventEmitter.removeAllListeners = function (eventName) { + if (!eventName) + this._eventRegistry = this._defaultHandlers = undefined; + if (this._eventRegistry) + this._eventRegistry[eventName] = undefined; + if (this._defaultHandlers) + this._defaultHandlers[eventName] = undefined; }; +exports.EventEmitter = EventEmitter; -DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { - var result; - var identifiers = []; - var ident = 0; - while (!buffer.isEmpty()) { - var subident = buffer.readUInt8(); - ident <<= 7; - ident |= subident & 0x7f; - if ((subident & 0x80) === 0) { - identifiers.push(ident); - ident = 0; - } - } - if (subident & 0x80) - identifiers.push(ident); +}); - var first = (identifiers[0] / 40) | 0; - var second = identifiers[0] % 40; +ace.define("ace/lib/report_error",["require","exports","module"], function(require, exports, module){exports.reportError = function reportError(msg, data) { + var e = new Error(msg); + e["data"] = data; + if (typeof console == "object" && console.error) + console.error(e); + setTimeout(function () { throw e; }); +}; - if (relative) - result = identifiers; - else - result = [first, second].concat(identifiers.slice(1)); +}); - if (values) { - var tmp = values[result.join(' ')]; - if (tmp === undefined) - tmp = values[result.join('.')]; - if (tmp !== undefined) - result = tmp; - } - - return result; +ace.define("ace/lib/default_english_messages",["require","exports","module"], function(require, exports, module){var defaultEnglishMessages = { + "autocomplete.popup.aria-roledescription": "Autocomplete suggestions", + "autocomplete.popup.aria-label": "Autocomplete suggestions", + "autocomplete.popup.item.aria-roledescription": "item", + "autocomplete.loading": "Loading...", + "editor.scroller.aria-roledescription": "editor", + "editor.scroller.aria-label": "Editor content, press Enter to start editing, press Escape to exit", + "editor.gutter.aria-roledescription": "editor gutter", + "editor.gutter.aria-label": "Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit", + "error-marker.good-state": "Looks good!", + "prompt.recently-used": "Recently used", + "prompt.other-commands": "Other commands", + "prompt.no-matching-commands": "No matching commands", + "search-box.find.placeholder": "Search for", + "search-box.find-all.text": "All", + "search-box.replace.placeholder": "Replace with", + "search-box.replace-next.text": "Replace", + "search-box.replace-all.text": "All", + "search-box.toggle-replace.title": "Toggle Replace mode", + "search-box.toggle-regexp.title": "RegExp Search", + "search-box.toggle-case.title": "CaseSensitive Search", + "search-box.toggle-whole-word.title": "Whole Word Search", + "search-box.toggle-in-selection.title": "Search In Selection", + "search-box.search-counter": "$0 of $1", + "text-input.aria-roledescription": "editor", + "text-input.aria-label": "Cursor at row $0", + "gutter.code-folding.range.aria-label": "Toggle code folding, rows $0 through $1", + "gutter.code-folding.closed.aria-label": "Toggle code folding, rows $0 through $1", + "gutter.code-folding.open.aria-label": "Toggle code folding, row $0", + "gutter.code-folding.closed.title": "Unfold code", + "gutter.code-folding.open.title": "Fold code", + "gutter.annotation.aria-label.error": "Error, read annotations row $0", + "gutter.annotation.aria-label.warning": "Warning, read annotations row $0", + "gutter.annotation.aria-label.info": "Info, read annotations row $0", + "inline-fold.closed.title": "Unfold code", + "gutter-tooltip.aria-label.error.singular": "error", + "gutter-tooltip.aria-label.error.plural": "errors", + "gutter-tooltip.aria-label.warning.singular": "warning", + "gutter-tooltip.aria-label.warning.plural": "warnings", + "gutter-tooltip.aria-label.info.singular": "information message", + "gutter-tooltip.aria-label.info.plural": "information messages", + "gutter.annotation.aria-label.security": "Security finding, read annotations row $0", + "gutter.annotation.aria-label.hint": "Suggestion, read annotations row $0", + "gutter-tooltip.aria-label.security.singular": "security finding", + "gutter-tooltip.aria-label.security.plural": "security findings", + "gutter-tooltip.aria-label.hint.singular": "suggestion", + "gutter-tooltip.aria-label.hint.plural": "suggestions", + "editor.tooltip.disable-editing": "Editing is disabled" }; +exports.defaultEnglishMessages = defaultEnglishMessages; -DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { - var str = buffer.raw().toString(); - if (tag === 'gentime') { - var year = str.slice(0, 4) | 0; - var mon = str.slice(4, 6) | 0; - var day = str.slice(6, 8) | 0; - var hour = str.slice(8, 10) | 0; - var min = str.slice(10, 12) | 0; - var sec = str.slice(12, 14) | 0; - } else if (tag === 'utctime') { - var year = str.slice(0, 2) | 0; - var mon = str.slice(2, 4) | 0; - var day = str.slice(4, 6) | 0; - var hour = str.slice(6, 8) | 0; - var min = str.slice(8, 10) | 0; - var sec = str.slice(10, 12) | 0; - if (year < 70) - year = 2000 + year; - else - year = 1900 + year; - } else { - return buffer.error('Decoding ' + tag + ' time is not supported yet'); - } +}); - return Date.UTC(year, mon - 1, day, hour, min, sec, 0); +ace.define("ace/lib/app_config",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/report_error","ace/lib/default_english_messages"], function(require, exports, module){"no use strict"; +var oop = require("./oop"); +var EventEmitter = require("./event_emitter").EventEmitter; +var reportError = require("./report_error").reportError; +var defaultEnglishMessages = require("./default_english_messages").defaultEnglishMessages; +var optionsProvider = { + setOptions: function (optList) { + Object.keys(optList).forEach(function (key) { + this.setOption(key, optList[key]); + }, this); + }, + getOptions: function (optionNames) { + var result = {}; + if (!optionNames) { + var options = this.$options; + optionNames = Object.keys(options).filter(function (key) { + return !options[key].hidden; + }); + } + else if (!Array.isArray(optionNames)) { + optionNames = Object.keys(optionNames); + } + optionNames.forEach(function (key) { + result[key] = this.getOption(key); + }, this); + return result; + }, + setOption: function (name, value) { + if (this["$" + name] === value) + return; + var opt = this.$options[name]; + if (!opt) { + return warn('misspelled option "' + name + '"'); + } + if (opt.forwardTo) + return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value); + if (!opt.handlesSet) + this["$" + name] = value; + if (opt && opt.set) + opt.set.call(this, value); + }, + getOption: function (name) { + var opt = this.$options[name]; + if (!opt) { + return warn('misspelled option "' + name + '"'); + } + if (opt.forwardTo) + return this[opt.forwardTo] && this[opt.forwardTo].getOption(name); + return opt && opt.get ? opt.get.call(this) : this["$" + name]; + } }; +function warn(message) { + if (typeof console != "undefined" && console.warn) + console.warn.apply(console, arguments); +} +var messages; +var nlsPlaceholders; +var AppConfig = /** @class */ (function () { + function AppConfig() { + this.$defaultOptions = {}; + messages = defaultEnglishMessages; + nlsPlaceholders = "dollarSigns"; + } + AppConfig.prototype.defineOptions = function (obj, path, options) { + if (!obj.$options) + this.$defaultOptions[path] = obj.$options = {}; + Object.keys(options).forEach(function (key) { + var opt = options[key]; + if (typeof opt == "string") + opt = { forwardTo: opt }; + opt.name || (opt.name = key); + obj.$options[opt.name] = opt; + if ("initialValue" in opt) + obj["$" + opt.name] = opt.initialValue; + }); + oop.implement(obj, optionsProvider); + return this; + }; + AppConfig.prototype.resetOptions = function (obj) { + Object.keys(obj.$options).forEach(function (key) { + var opt = obj.$options[key]; + if ("value" in opt) + obj.setOption(key, opt.value); + }); + }; + AppConfig.prototype.setDefaultValue = function (path, name, value) { + if (!path) { + for (path in this.$defaultOptions) + if (this.$defaultOptions[path][name]) + break; + if (!this.$defaultOptions[path][name]) + return false; + } + var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {}); + if (opts[name]) { + if (opts.forwardTo) + this.setDefaultValue(opts.forwardTo, name, value); + else + opts[name].value = value; + } + }; + AppConfig.prototype.setDefaultValues = function (path, optionHash) { + Object.keys(optionHash).forEach(function (key) { + this.setDefaultValue(path, key, optionHash[key]); + }, this); + }; + AppConfig.prototype.setMessages = function (value, options) { + messages = value; + if (options && options.placeholders) { + nlsPlaceholders = options.placeholders; + } + }; + AppConfig.prototype.nls = function (key, defaultString, params) { + if (!messages[key]) { + warn("No message found for the key '" + key + "' in messages with id " + messages.$id + ", trying to find a translation for the default string '" + defaultString + "'."); + if (!messages[defaultString]) { + warn("No message found for the default string '" + defaultString + "' in the provided messages. Falling back to the default English message."); + } + } + var translated = messages[key] || messages[defaultString] || defaultString; + if (params) { + if (nlsPlaceholders === "dollarSigns") { + translated = translated.replace(/\$(\$|[\d]+)/g, function (_, dollarMatch) { + if (dollarMatch == "$") + return "$"; + return params[dollarMatch]; + }); + } + if (nlsPlaceholders === "curlyBrackets") { + translated = translated.replace(/\{([^\}]+)\}/g, function (_, curlyBracketMatch) { + return params[curlyBracketMatch]; + }); + } + } + return translated; + }; + return AppConfig; +}()); +AppConfig.prototype.warn = warn; +AppConfig.prototype.reportError = reportError; +oop.implement(AppConfig.prototype, EventEmitter); +exports.AppConfig = AppConfig; -DERNode.prototype._decodeNull = function decodeNull(buffer) { - return null; -}; +}); -DERNode.prototype._decodeBool = function decodeBool(buffer) { - var res = buffer.readUInt8(); - if (buffer.isError(res)) - return res; - else - return res !== 0; -}; +ace.define("ace/theme/textmate-css",["require","exports","module"], function(require, exports, module){module.exports = ".ace-tm .ace_gutter {\n background: #f0f0f0;\n color: #333;\n}\n\n.ace-tm .ace_print-margin {\n width: 1px;\n background: #e8e8e8;\n}\n\n.ace-tm .ace_fold {\n background-color: #6B72E6;\n}\n\n.ace-tm {\n background-color: #FFFFFF;\n color: black;\n}\n\n.ace-tm .ace_cursor {\n color: black;\n}\n \n.ace-tm .ace_invisible {\n color: rgb(191, 191, 191);\n}\n\n.ace-tm .ace_storage,\n.ace-tm .ace_keyword {\n color: blue;\n}\n\n.ace-tm .ace_constant {\n color: rgb(197, 6, 11);\n}\n\n.ace-tm .ace_constant.ace_buildin {\n color: rgb(88, 72, 246);\n}\n\n.ace-tm .ace_constant.ace_language {\n color: rgb(88, 92, 246);\n}\n\n.ace-tm .ace_constant.ace_library {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_invalid {\n background-color: rgba(255, 0, 0, 0.1);\n color: red;\n}\n\n.ace-tm .ace_support.ace_function {\n color: rgb(60, 76, 114);\n}\n\n.ace-tm .ace_support.ace_constant {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_support.ace_type,\n.ace-tm .ace_support.ace_class {\n color: rgb(109, 121, 222);\n}\n\n.ace-tm .ace_keyword.ace_operator {\n color: rgb(104, 118, 135);\n}\n\n.ace-tm .ace_string {\n color: rgb(3, 106, 7);\n}\n\n.ace-tm .ace_comment {\n color: rgb(76, 136, 107);\n}\n\n.ace-tm .ace_comment.ace_doc {\n color: rgb(0, 102, 255);\n}\n\n.ace-tm .ace_comment.ace_doc.ace_tag {\n color: rgb(128, 159, 191);\n}\n\n.ace-tm .ace_constant.ace_numeric {\n color: rgb(0, 0, 205);\n}\n\n.ace-tm .ace_variable {\n color: rgb(49, 132, 149);\n}\n\n.ace-tm .ace_xml-pe {\n color: rgb(104, 104, 91);\n}\n\n.ace-tm .ace_entity.ace_name.ace_function {\n color: #0000A2;\n}\n\n\n.ace-tm .ace_heading {\n color: rgb(12, 7, 255);\n}\n\n.ace-tm .ace_list {\n color:rgb(185, 6, 144);\n}\n\n.ace-tm .ace_meta.ace_tag {\n color:rgb(0, 22, 142);\n}\n\n.ace-tm .ace_string.ace_regex {\n color: rgb(255, 0, 0)\n}\n\n.ace-tm .ace_marker-layer .ace_selection {\n background: rgb(181, 213, 255);\n}\n.ace-tm.ace_multiselect .ace_selection.ace_start {\n box-shadow: 0 0 3px 0px white;\n}\n.ace-tm .ace_marker-layer .ace_step {\n background: rgb(252, 255, 0);\n}\n\n.ace-tm .ace_marker-layer .ace_stack {\n background: rgb(164, 229, 101);\n}\n\n.ace-tm .ace_marker-layer .ace_bracket {\n margin: -1px 0 0 -1px;\n border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-tm .ace_marker-layer .ace_active-line {\n background: rgba(0, 0, 0, 0.07);\n}\n\n.ace-tm .ace_gutter-active-line {\n background-color : #dcdcdc;\n}\n\n.ace-tm .ace_marker-layer .ace_selected-word {\n background: rgb(250, 250, 255);\n border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-tm .ace_indent-guide {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}\n\n.ace-tm .ace_indent-guide-active {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\") right repeat-y;\n}\n"; -DERNode.prototype._decodeInt = function decodeInt(buffer, values) { - // Bigint, return as it is (assume big endian) - var raw = buffer.raw(); - var res = new bignum(raw); +}); - if (values) - res = values[res.toString(10)] || res; +ace.define("ace/theme/textmate",["require","exports","module","ace/theme/textmate-css","ace/lib/dom"], function(require, exports, module){"use strict"; +exports.isDark = false; +exports.cssClass = "ace-tm"; +exports.cssText = require("./textmate-css"); +exports.$id = "ace/theme/textmate"; +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass, false); - return res; -}; +}); -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getDecoder('der').tree; +ace.define("ace/config",["require","exports","module","ace/lib/lang","ace/lib/net","ace/lib/dom","ace/lib/app_config","ace/theme/textmate"], function(require, exports, module){"no use strict"; +var lang = require("./lib/lang"); +var net = require("./lib/net"); +var dom = require("./lib/dom"); +var AppConfig = require("./lib/app_config").AppConfig; +module.exports = exports = new AppConfig(); +var options = { + packaged: false, + workerPath: null, + modePath: null, + themePath: null, + basePath: "", + suffix: ".js", + $moduleUrls: {}, + loadWorkerFromBlob: true, + sharedPopups: false, + useStrictCSP: null }; +exports.get = function (key) { + if (!options.hasOwnProperty(key)) + throw new Error("Unknown config key: " + key); + return options[key]; +}; +exports.set = function (key, value) { + if (options.hasOwnProperty(key)) + options[key] = value; + else if (this.setDefaultValue("", key, value) == false) + throw new Error("Unknown config key: " + key); + if (key == "useStrictCSP") + dom.useStrictCSP(value); +}; +exports.all = function () { + return lang.copyObject(options); +}; +exports.$modes = {}; +exports.moduleUrl = function (name, component) { + if (options.$moduleUrls[name]) + return options.$moduleUrls[name]; + var parts = name.split("/"); + component = component || parts[parts.length - 2] || ""; + var sep = component == "snippets" ? "/" : "-"; + var base = parts[parts.length - 1]; + if (component == "worker" && sep == "-") { + var re = new RegExp("^" + component + "[\\-_]|[\\-_]" + component + "$", "g"); + base = base.replace(re, ""); + } + if ((!base || base == component) && parts.length > 1) + base = parts[parts.length - 2]; + var path = options[component + "Path"]; + if (path == null) { + path = options.basePath; + } + else if (sep == "/") { + component = sep = ""; + } + if (path && path.slice(-1) != "/") + path += "/"; + return path + component + sep + base + this.get("suffix"); +}; +exports.setModuleUrl = function (name, subst) { + return options.$moduleUrls[name] = subst; +}; +var loader = function (moduleName, cb) { + if (moduleName === "ace/theme/textmate" || moduleName === "./theme/textmate") + return cb(null, require("./theme/textmate")); + if (customLoader) + return customLoader(moduleName, cb); + console.error("loader is not configured"); +}; +var customLoader; +exports.setLoader = function (cb) { + customLoader = cb; +}; +exports.dynamicModules = Object.create(null); +exports.$loading = {}; +exports.$loaded = {}; +exports.loadModule = function (moduleId, onLoad) { + var loadedModule; + if (Array.isArray(moduleId)) { + var moduleType = moduleId[0]; + var moduleName = moduleId[1]; + } + else if (typeof moduleId == "string") { + var moduleName = moduleId; + } + var load = function (module) { + if (module && !exports.$loading[moduleName]) + return onLoad && onLoad(module); + if (!exports.$loading[moduleName]) + exports.$loading[moduleName] = []; + exports.$loading[moduleName].push(onLoad); + if (exports.$loading[moduleName].length > 1) + return; + var afterLoad = function () { + loader(moduleName, function (err, module) { + if (module) + exports.$loaded[moduleName] = module; + exports._emit("load.module", { name: moduleName, module: module }); + var listeners = exports.$loading[moduleName]; + exports.$loading[moduleName] = null; + listeners.forEach(function (onLoad) { + onLoad && onLoad(module); + }); + }); + }; + if (!exports.get("packaged")) + return afterLoad(); + net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); + reportErrorIfPathIsNotConfigured(); + }; + if (exports.dynamicModules[moduleName]) { + exports.dynamicModules[moduleName]().then(function (module) { + if (module.default) { + load(module.default); + } + else { + load(module); + } + }); + } + else { + try { + loadedModule = this.$require(moduleName); + } + catch (e) { } + load(loadedModule || exports.$loaded[moduleName]); + } +}; +exports.$require = function (moduleName) { + if (typeof module["require"] == "function") { + var req = "require"; + return module[req](moduleName); + } +}; +exports.setModuleLoader = function (moduleName, onLoad) { + exports.dynamicModules[moduleName] = onLoad; +}; +var reportErrorIfPathIsNotConfigured = function () { + if (!options.basePath && !options.workerPath + && !options.modePath && !options.themePath + && !Object.keys(options.$moduleUrls).length) { + console.error("Unable to infer path to ace from script src,", "use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes", "or with webpack use ace/webpack-resolver"); + reportErrorIfPathIsNotConfigured = function () { }; + } +}; +exports.version = "1.43.3"; -// Utility methods - -function derDecodeTag(buf, fail) { - var tag = buf.readUInt8(fail); - if (buf.isError(tag)) - return tag; - - var cls = der.tagClass[tag >> 6]; - var primitive = (tag & 0x20) === 0; +}); - // Multi-octet tag - load - if ((tag & 0x1f) === 0x1f) { - var oct = tag; - tag = 0; - while ((oct & 0x80) === 0x80) { - oct = buf.readUInt8(fail); - if (buf.isError(oct)) - return oct; +ace.define("ace/loader_build",["require","exports","module","ace/lib/fixoldbrowsers","ace/config"], function(require, exports, module) { +"use strict"; - tag <<= 7; - tag |= oct & 0x7f; - } - } else { - tag &= 0x1f; - } - var tagStr = der.tag[tag]; +require("./lib/fixoldbrowsers"); +var config = require("./config"); +config.setLoader(function(moduleName, cb) { + require([moduleName], function(module) { + cb(null, module); + }); +}); - return { - cls: cls, - primitive: primitive, - tag: tag, - tagStr: tagStr - }; -} +var global = (function() { + return this || typeof window != "undefined" && window; +})(); -function derDecodeLen(buf, primitive, fail) { - var len = buf.readUInt8(fail); - if (buf.isError(len)) - return len; +module.exports = function(ace) { + config.init = init; + config.$require = require; + ace.require = require; - // Indefinite form - if (!primitive && len === 0x80) - return null; + if (true) + ace.define = __webpack_require__.amdD; +}; +init(true);function init(packaged) { - // Definite form - if ((len & 0x80) === 0) { - // Short form - return len; - } + if (!global || !global.document) + return; + + config.set("packaged", packaged || require.packaged || module.packaged || (global.define && __webpack_require__.amdD.packaged)); - // Long form - var num = len & 0x7f; - if (num > 4) - return buf.error('length octect is too long'); + var scriptOptions = {}; + var scriptUrl = ""; + var currentScript = (document.currentScript || document._currentScript ); // native or polyfill + var currentDocument = currentScript && currentScript.ownerDocument || document; + + if (currentScript && currentScript.src) { + scriptUrl = currentScript.src.split(/[?#]/)[0].split("/").slice(0, -1).join("/") || ""; + } + + var scripts = currentDocument.getElementsByTagName("script"); + for (var i=0; i { - -var decoders = exports; - -decoders.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/decoders/der.js"); -decoders.pem = __webpack_require__(/*! ./pem */ "../../node_modules/asn1.js/lib/asn1/decoders/pem.js"); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/decoders/pem.js": -/*!***********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/decoders/pem.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + scriptOptions.basePath = scriptOptions.base; + scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base; + scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base; + scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base; + delete scriptOptions.base; -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); + for (var key in scriptOptions) + if (typeof scriptOptions[key] !== "undefined") + config.set(key, scriptOptions[key]); +} -var DERDecoder = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/decoders/der.js"); +function deHyphenate(str) { + return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); }); +} +}); -function PEMDecoder(entity) { - DERDecoder.call(this, entity); - this.enc = 'pem'; +ace.define("ace/range",["require","exports","module"], function(require, exports, module){"use strict"; +var Range = /** @class */ (function () { + function Range(startRow, startColumn, endRow, endColumn) { + this.start = { + row: startRow, + column: startColumn + }; + this.end = { + row: endRow, + column: endColumn + }; + } + Range.prototype.isEqual = function (range) { + return this.start.row === range.start.row && + this.end.row === range.end.row && + this.start.column === range.start.column && + this.end.column === range.end.column; + }; + Range.prototype.toString = function () { + return ("Range: [" + this.start.row + "/" + this.start.column + + "] -> [" + this.end.row + "/" + this.end.column + "]"); + }; + Range.prototype.contains = function (row, column) { + return this.compare(row, column) == 0; + }; + Range.prototype.compareRange = function (range) { + var cmp, end = range.end, start = range.start; + cmp = this.compare(end.row, end.column); + if (cmp == 1) { + cmp = this.compare(start.row, start.column); + if (cmp == 1) { + return 2; + } + else if (cmp == 0) { + return 1; + } + else { + return 0; + } + } + else if (cmp == -1) { + return -2; + } + else { + cmp = this.compare(start.row, start.column); + if (cmp == -1) { + return -1; + } + else if (cmp == 1) { + return 42; + } + else { + return 0; + } + } + }; + Range.prototype.comparePoint = function (p) { + return this.compare(p.row, p.column); + }; + Range.prototype.containsRange = function (range) { + return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; + }; + Range.prototype.intersects = function (range) { + var cmp = this.compareRange(range); + return (cmp == -1 || cmp == 0 || cmp == 1); + }; + Range.prototype.isEnd = function (row, column) { + return this.end.row == row && this.end.column == column; + }; + Range.prototype.isStart = function (row, column) { + return this.start.row == row && this.start.column == column; + }; + Range.prototype.setStart = function (row, column) { + if (typeof row == "object") { + this.start.column = row.column; + this.start.row = row.row; + } + else { + this.start.row = row; + this.start.column = column; + } + }; + Range.prototype.setEnd = function (row, column) { + if (typeof row == "object") { + this.end.column = row.column; + this.end.row = row.row; + } + else { + this.end.row = row; + this.end.column = column; + } + }; + Range.prototype.inside = function (row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column) || this.isStart(row, column)) { + return false; + } + else { + return true; + } + } + return false; + }; + Range.prototype.insideStart = function (row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column)) { + return false; + } + else { + return true; + } + } + return false; + }; + Range.prototype.insideEnd = function (row, column) { + if (this.compare(row, column) == 0) { + if (this.isStart(row, column)) { + return false; + } + else { + return true; + } + } + return false; + }; + Range.prototype.compare = function (row, column) { + if (!this.isMultiLine()) { + if (row === this.start.row) { + return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); + } + } + if (row < this.start.row) + return -1; + if (row > this.end.row) + return 1; + if (this.start.row === row) + return column >= this.start.column ? 0 : -1; + if (this.end.row === row) + return column <= this.end.column ? 0 : 1; + return 0; + }; + Range.prototype.compareStart = function (row, column) { + if (this.start.row == row && this.start.column == column) { + return -1; + } + else { + return this.compare(row, column); + } + }; + Range.prototype.compareEnd = function (row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } + else { + return this.compare(row, column); + } + }; + Range.prototype.compareInside = function (row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } + else if (this.start.row == row && this.start.column == column) { + return -1; + } + else { + return this.compare(row, column); + } + }; + Range.prototype.clipRows = function (firstRow, lastRow) { + if (this.end.row > lastRow) + var end = { row: lastRow + 1, column: 0 }; + else if (this.end.row < firstRow) + var end = { row: firstRow, column: 0 }; + if (this.start.row > lastRow) + var start = { row: lastRow + 1, column: 0 }; + else if (this.start.row < firstRow) + var start = { row: firstRow, column: 0 }; + return Range.fromPoints(start || this.start, end || this.end); + }; + Range.prototype.extend = function (row, column) { + var cmp = this.compare(row, column); + if (cmp == 0) + return this; + else if (cmp == -1) + var start = { row: row, column: column }; + else + var end = { row: row, column: column }; + return Range.fromPoints(start || this.start, end || this.end); + }; + Range.prototype.isEmpty = function () { + return (this.start.row === this.end.row && this.start.column === this.end.column); + }; + Range.prototype.isMultiLine = function () { + return (this.start.row !== this.end.row); + }; + Range.prototype.clone = function () { + return Range.fromPoints(this.start, this.end); + }; + Range.prototype.collapseRows = function () { + if (this.end.column == 0) + return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0); + else + return new Range(this.start.row, 0, this.end.row, 0); + }; + Range.prototype.toScreenRange = function (session) { + var screenPosStart = session.documentToScreenPosition(this.start); + var screenPosEnd = session.documentToScreenPosition(this.end); + return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column); + }; + Range.prototype.moveBy = function (row, column) { + this.start.row += row; + this.start.column += column; + this.end.row += row; + this.end.column += column; + }; + return Range; +}()); +Range.fromPoints = function (start, end) { + return new Range(start.row, start.column, end.row, end.column); }; -inherits(PEMDecoder, DERDecoder); -module.exports = PEMDecoder; - -PEMDecoder.prototype.decode = function decode(data, options) { - var lines = data.toString().split(/[\r\n]+/g); - - var label = options.label.toUpperCase(); - - var re = /^-----(BEGIN|END) ([^-]+)-----$/; - var start = -1; - var end = -1; - for (var i = 0; i < lines.length; i++) { - var match = lines[i].match(re); - if (match === null) - continue; +Range.comparePoints = function (p1, p2) { + return p1.row - p2.row || p1.column - p2.column; +}; +exports.Range = Range; - if (match[2] !== label) - continue; +}); - if (start === -1) { - if (match[1] !== 'BEGIN') - break; - start = i; - } else { - if (match[1] !== 'END') - break; - end = i; - break; +ace.define("ace/lib/keys",["require","exports","module","ace/lib/oop"], function(require, exports, module){"use strict"; +var oop = require("./oop"); +var Keys = { + MODIFIER_KEYS: { + 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta', + 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu' + }, + KEY_MODS: { + "ctrl": 1, "alt": 2, "option": 2, "shift": 4, + "super": 8, "meta": 8, "command": 8, "cmd": 8, + "control": 1 + }, + FUNCTION_KEYS: { + 8: "Backspace", + 9: "Tab", + 13: "Return", + 19: "Pause", + 27: "Esc", + 32: "Space", + 33: "PageUp", + 34: "PageDown", + 35: "End", + 36: "Home", + 37: "Left", + 38: "Up", + 39: "Right", + 40: "Down", + 44: "Print", + 45: "Insert", + 46: "Delete", + '-13': "NumpadEnter", + 144: "Numlock", + 145: "Scrolllock" + }, + PRINTABLE_KEYS: { + 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.', + 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', + 219: '[', 220: '\\', 221: ']', 222: "'", 111: '/', 106: '*' } - } - if (start === -1 || end === -1) - throw new Error('PEM section not found for: ' + label); - - var base64 = lines.slice(start + 1, end).join(''); - // Remove excessive symbols - base64.replace(/[^a-z0-9\+\/=]+/gi, ''); - - var input = new Buffer(base64, 'base64'); - return DERDecoder.prototype.decode.call(this, input, options); }; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/encoders/der.js": -/*!***********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/encoders/der.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); - -var asn1 = __webpack_require__(/*! ../../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); -var base = asn1.base; - -// Import DER constants -var der = asn1.constants.der; - -function DEREncoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); +var codeToKeyCode = { + Command: 224, + Backspace: 8, + Tab: 9, + Return: 13, + Enter: 13, + Pause: 19, + Escape: 27, + PageUp: 33, + PageDown: 34, + End: 35, + Home: 36, + Insert: 45, + Delete: 46, + ArrowLeft: 37, + ArrowUp: 38, + ArrowRight: 39, + ArrowDown: 40, + Backquote: 192, + Minus: 189, + Equal: 187, + BracketLeft: 219, + Backslash: 220, + BracketRight: 221, + Semicolon: 186, + Quote: 222, + Comma: 188, + Period: 190, + Slash: 191, + Space: 32, + NumpadAdd: 107, + NumpadDecimal: 110, + NumpadSubtract: 109, + NumpadDivide: 111, + NumpadMultiply: 106 }; -module.exports = DEREncoder; - -DEREncoder.prototype.encode = function encode(data, reporter) { - return this.tree._encode(data, reporter).join(); +for (var i = 0; i < 10; i++) { + codeToKeyCode["Digit" + i] = 48 + i; + codeToKeyCode["Numpad" + i] = 96 + i; + Keys.PRINTABLE_KEYS[48 + i] = "" + i; + Keys.FUNCTION_KEYS[96 + i] = "Numpad" + i; +} +for (var i = 65; i < 91; i++) { + var chr = String.fromCharCode(i + 32); + codeToKeyCode["Key" + chr.toUpperCase()] = i; + Keys.PRINTABLE_KEYS[i] = chr; +} +for (var i = 1; i < 13; i++) { + codeToKeyCode["F" + i] = 111 + i; + Keys.FUNCTION_KEYS[111 + i] = "F" + i; +} +var modifiers = { + Shift: 16, + Control: 17, + Alt: 18, + Meta: 224 }; - -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); +for (var mod in modifiers) { + codeToKeyCode[mod] = codeToKeyCode[mod + "Left"] + = codeToKeyCode[mod + "Right"] = modifiers[mod]; } -inherits(DERNode, base.Node); - -DERNode.prototype._encodeComposite = function encodeComposite(tag, - primitive, - cls, - content) { - var encodedTag = encodeTag(tag, primitive, cls, this.reporter); - - // Short form - if (content.length < 0x80) { - var header = new Buffer(2); - header[0] = encodedTag; - header[1] = content.length; - return this._createEncoderBuffer([ header, content ]); - } - - // Long form - // Count octets required to store length - var lenOctets = 1; - for (var i = content.length; i >= 0x100; i >>= 8) - lenOctets++; - - var header = new Buffer(1 + 1 + lenOctets); - header[0] = encodedTag; - header[1] = 0x80 | lenOctets; - - for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) - header[i] = j & 0xff; - - return this._createEncoderBuffer([ header, content ]); +exports.$codeToKeyCode = codeToKeyCode; +Keys.PRINTABLE_KEYS[173] = '-'; +for (var j in Keys.FUNCTION_KEYS) { + var name = Keys.FUNCTION_KEYS[j].toLowerCase(); + Keys[name] = parseInt(j, 10); +} +for (var j in Keys.PRINTABLE_KEYS) { + var name = Keys.PRINTABLE_KEYS[j].toLowerCase(); + Keys[name] = parseInt(j, 10); +} +oop.mixin(Keys, Keys.MODIFIER_KEYS); +oop.mixin(Keys, Keys.PRINTABLE_KEYS); +oop.mixin(Keys, Keys.FUNCTION_KEYS); +Keys.enter = Keys["return"]; +Keys.escape = Keys.esc; +Keys.del = Keys["delete"]; +(function () { + var mods = ["cmd", "ctrl", "alt", "shift"]; + for (var i = Math.pow(2, mods.length); i--;) { + Keys.KEY_MODS[i] = mods.filter(function (x) { + return i & Keys.KEY_MODS[x]; + }).join("-") + "-"; + } +})(); +Keys.KEY_MODS[0] = ""; +Keys.KEY_MODS[-1] = "input-"; +oop.mixin(exports, Keys); +exports.default = exports; +exports.keyCodeToString = function (keyCode) { + var keyString = Keys[keyCode]; + if (typeof keyString != "string") + keyString = String.fromCharCode(keyCode); + return keyString.toLowerCase(); }; -DERNode.prototype._encodeStr = function encodeStr(str, tag) { - if (tag === 'bitstr') { - return this._createEncoderBuffer([ str.unused | 0, str.data ]); - } else if (tag === 'bmpstr') { - var buf = new Buffer(str.length * 2); - for (var i = 0; i < str.length; i++) { - buf.writeUInt16BE(str.charCodeAt(i), i * 2); - } - return this._createEncoderBuffer(buf); - } else if (tag === 'numstr') { - if (!this._isNumstr(str)) { - return this.reporter.error('Encoding of string type: numstr supports ' + - 'only digits and space'); - } - return this._createEncoderBuffer(str); - } else if (tag === 'printstr') { - if (!this._isPrintstr(str)) { - return this.reporter.error('Encoding of string type: printstr supports ' + - 'only latin upper and lower case letters, ' + - 'digits, space, apostrophe, left and rigth ' + - 'parenthesis, plus sign, comma, hyphen, ' + - 'dot, slash, colon, equal sign, ' + - 'question mark'); +}); + +ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module){"use strict"; var keys = require("./keys"); +var useragent = require("./useragent"); +var pressedKeys = null; +var ts = 0; +var activeListenerOptions; +function detectListenerOptionsSupport() { + activeListenerOptions = false; + try { + document.createComment("").addEventListener("test", function () { }, { + get passive() { + activeListenerOptions = { passive: false }; + return true; + } + }); } - return this._createEncoderBuffer(str); - } else if (/str$/.test(tag)) { - return this._createEncoderBuffer(str); - } else if (tag === 'objDesc') { - return this._createEncoderBuffer(str); - } else { - return this.reporter.error('Encoding of string type: ' + tag + - ' unsupported'); - } + catch (e) { } +} +function getListenerOptions() { + if (activeListenerOptions == undefined) + detectListenerOptionsSupport(); + return activeListenerOptions; +} +function EventListener(elem, type, callback) { + this.elem = elem; + this.type = type; + this.callback = callback; +} +EventListener.prototype.destroy = function () { + removeListener(this.elem, this.type, this.callback); + this.elem = this.type = this.callback = undefined; }; - -DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { - if (typeof id === 'string') { - if (!values) - return this.reporter.error('string objid given, but no values map found'); - if (!values.hasOwnProperty(id)) - return this.reporter.error('objid not found in values map'); - id = values[id].split(/[\s\.]+/g); - for (var i = 0; i < id.length; i++) - id[i] |= 0; - } else if (Array.isArray(id)) { - id = id.slice(); - for (var i = 0; i < id.length; i++) - id[i] |= 0; - } - - if (!Array.isArray(id)) { - return this.reporter.error('objid() should be either array or string, ' + - 'got: ' + JSON.stringify(id)); - } - - if (!relative) { - if (id[1] >= 40) - return this.reporter.error('Second objid identifier OOB'); - id.splice(0, 2, id[0] * 40 + id[1]); - } - - // Count number of octets - var size = 0; - for (var i = 0; i < id.length; i++) { - var ident = id[i]; - for (size++; ident >= 0x80; ident >>= 7) - size++; - } - - var objid = new Buffer(size); - var offset = objid.length - 1; - for (var i = id.length - 1; i >= 0; i--) { - var ident = id[i]; - objid[offset--] = ident & 0x7f; - while ((ident >>= 7) > 0) - objid[offset--] = 0x80 | (ident & 0x7f); - } - - return this._createEncoderBuffer(objid); +var addListener = exports.addListener = function (elem, type, callback, destroyer) { + elem.addEventListener(type, callback, getListenerOptions()); + if (destroyer) + destroyer.$toDestroy.push(new EventListener(elem, type, callback)); }; - -function two(num) { - if (num < 10) - return '0' + num; - else - return num; -} - -DERNode.prototype._encodeTime = function encodeTime(time, tag) { - var str; - var date = new Date(time); - - if (tag === 'gentime') { - str = [ - two(date.getFullYear()), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else if (tag === 'utctime') { - str = [ - two(date.getFullYear() % 100), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else { - this.reporter.error('Encoding ' + tag + ' time is not supported yet'); - } - - return this._encodeStr(str, 'octstr'); +var removeListener = exports.removeListener = function (elem, type, callback) { + elem.removeEventListener(type, callback, getListenerOptions()); }; - -DERNode.prototype._encodeNull = function encodeNull() { - return this._createEncoderBuffer(''); +exports.stopEvent = function (e) { + exports.stopPropagation(e); + exports.preventDefault(e); + return false; }; - -DERNode.prototype._encodeInt = function encodeInt(num, values) { - if (typeof num === 'string') { - if (!values) - return this.reporter.error('String int or enum given, but no values map'); - if (!values.hasOwnProperty(num)) { - return this.reporter.error('Values map doesn\'t contain: ' + - JSON.stringify(num)); - } - num = values[num]; - } - - // Bignum, assume big endian - if (typeof num !== 'number' && !Buffer.isBuffer(num)) { - var numArray = num.toArray(); - if (!num.sign && numArray[0] & 0x80) { - numArray.unshift(0); +exports.stopPropagation = function (e) { + if (e.stopPropagation) + e.stopPropagation(); +}; +exports.preventDefault = function (e) { + if (e.preventDefault) + e.preventDefault(); +}; +exports.getButton = function (e) { + if (e.type == "dblclick") + return 0; + if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey))) + return 2; + return e.button; +}; +exports.capture = function (el, eventHandler, releaseCaptureHandler) { + var ownerDocument = el && el.ownerDocument || document; + function onMouseUp(e) { + eventHandler && eventHandler(e); + releaseCaptureHandler && releaseCaptureHandler(e); + removeListener(ownerDocument, "mousemove", eventHandler); + removeListener(ownerDocument, "mouseup", onMouseUp); + removeListener(ownerDocument, "dragstart", onMouseUp); } - num = new Buffer(numArray); - } - - if (Buffer.isBuffer(num)) { - var size = num.length; - if (num.length === 0) - size++; - - var out = new Buffer(size); - num.copy(out); - if (num.length === 0) - out[0] = 0 - return this._createEncoderBuffer(out); - } - - if (num < 0x80) - return this._createEncoderBuffer(num); - - if (num < 0x100) - return this._createEncoderBuffer([0, num]); - - var size = 1; - for (var i = num; i >= 0x100; i >>= 8) - size++; - - var out = new Array(size); - for (var i = out.length - 1; i >= 0; i--) { - out[i] = num & 0xff; - num >>= 8; - } - if(out[0] & 0x80) { - out.unshift(0); - } - - return this._createEncoderBuffer(new Buffer(out)); + addListener(ownerDocument, "mousemove", eventHandler); + addListener(ownerDocument, "mouseup", onMouseUp); + addListener(ownerDocument, "dragstart", onMouseUp); + return onMouseUp; }; - -DERNode.prototype._encodeBool = function encodeBool(value) { - return this._createEncoderBuffer(value ? 0xff : 0); +exports.addMouseWheelListener = function (el, callback, destroyer) { + addListener(el, "wheel", function (e) { + var factor = 0.15; + var deltaX = e.deltaX || 0; + var deltaY = e.deltaY || 0; + switch (e.deltaMode) { + case e.DOM_DELTA_PIXEL: + e.wheelX = deltaX * factor; + e.wheelY = deltaY * factor; + break; + case e.DOM_DELTA_LINE: + var linePixels = 15; + e.wheelX = deltaX * linePixels; + e.wheelY = deltaY * linePixels; + break; + case e.DOM_DELTA_PAGE: + var pagePixels = 150; + e.wheelX = deltaX * pagePixels; + e.wheelY = deltaY * pagePixels; + break; + } + callback(e); + }, destroyer); }; - -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getEncoder('der').tree; +exports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) { + var clicks = 0; + var startX, startY, timer; + var eventNames = { + 2: "dblclick", + 3: "tripleclick", + 4: "quadclick" + }; + function onMousedown(e) { + if (exports.getButton(e) !== 0) { + clicks = 0; + } + else if (e.detail > 1) { + clicks++; + if (clicks > 4) + clicks = 1; + } + else { + clicks = 1; + } + if (useragent.isIE) { + var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; + if (!timer || isNewClick) + clicks = 1; + if (timer) + clearTimeout(timer); + timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600); + if (clicks == 1) { + startX = e.clientX; + startY = e.clientY; + } + } + e._clicks = clicks; + eventHandler[callbackName]("mousedown", e); + if (clicks > 4) + clicks = 0; + else if (clicks > 1) + return eventHandler[callbackName](eventNames[clicks], e); + } + if (!Array.isArray(elements)) + elements = [elements]; + elements.forEach(function (el) { + addListener(el, "mousedown", onMousedown, destroyer); + }); }; - -DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { - var state = this._baseState; - var i; - if (state['default'] === null) - return false; - - var data = dataBuffer.join(); - if (state.defaultBuffer === undefined) - state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); - - if (data.length !== state.defaultBuffer.length) - return false; - - for (i=0; i < data.length; i++) - if (data[i] !== state.defaultBuffer[i]) - return false; - - return true; +function getModifierHash(e) { + return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); +} +exports.getModifierString = function (e) { + return keys.KEY_MODS[getModifierHash(e)]; }; - -// Utility methods - -function encodeTag(tag, primitive, cls, reporter) { - var res; - - if (tag === 'seqof') - tag = 'seq'; - else if (tag === 'setof') - tag = 'set'; - - if (der.tagByName.hasOwnProperty(tag)) - res = der.tagByName[tag]; - else if (typeof tag === 'number' && (tag | 0) === tag) - res = tag; - else - return reporter.error('Unknown tag: ' + tag); - - if (res >= 0x1f) - return reporter.error('Multi-octet tag encoding unsupported'); - - if (!primitive) - res |= 0x20; - - res |= (der.tagClassByName[cls || 'universal'] << 6); - - return res; +function normalizeCommandKeys(callback, e, keyCode) { + var hashId = getModifierHash(e); + if (!keyCode && e.code) { + keyCode = keys.$codeToKeyCode[e.code] || keyCode; + } + if (!useragent.isMac && pressedKeys) { + if (e.getModifierState && (e.getModifierState("OS") || e.getModifierState("Win"))) + hashId |= 8; + if (pressedKeys.altGr) { + if ((3 & hashId) != 3) + pressedKeys.altGr = 0; + else + return; + } + if (keyCode === 18 || keyCode === 17) { + var location = e.location; + if (keyCode === 17 && location === 1) { + if (pressedKeys[keyCode] == 1) + ts = e.timeStamp; + } + else if (keyCode === 18 && hashId === 3 && location === 2) { + var dt = e.timeStamp - ts; + if (dt < 50) + pressedKeys.altGr = true; + } + } + } + if (keyCode in keys.MODIFIER_KEYS) { + keyCode = -1; + } + if (!hashId && keyCode === 13) { + if (e.location === 3) { + callback(e, hashId, -keyCode); + if (e.defaultPrevented) + return; + } + } + if (useragent.isChromeOS && hashId & 8) { + callback(e, hashId, keyCode); + if (e.defaultPrevented) + return; + else + hashId &= ~8; + } + if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { + return false; + } + return callback(e, hashId, keyCode); } +exports.addCommandKeyListener = function (el, callback, destroyer) { + var lastDefaultPrevented = null; + addListener(el, "keydown", function (e) { + pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1; + var result = normalizeCommandKeys(callback, e, e.keyCode); + lastDefaultPrevented = e.defaultPrevented; + return result; + }, destroyer); + addListener(el, "keypress", function (e) { + if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { + exports.stopEvent(e); + lastDefaultPrevented = null; + } + }, destroyer); + addListener(el, "keyup", function (e) { + pressedKeys[e.keyCode] = null; + }, destroyer); + if (!pressedKeys) { + resetPressedKeys(); + addListener(window, "focus", resetPressedKeys); + } +}; +function resetPressedKeys() { + pressedKeys = Object.create(null); +} +if (typeof window == "object" && window.postMessage && !useragent.isOldIE) { + var postMessageId = 1; + exports.nextTick = function (callback, win) { + win = win || window; + var messageName = "zero-timeout-message-" + (postMessageId++); + var listener = function (e) { + if (e.data == messageName) { + exports.stopPropagation(e); + removeListener(win, "message", listener); + callback(); + } + }; + addListener(win, "message", listener); + win.postMessage(messageName, "*"); + }; +} +exports.$idleBlocked = false; +exports.onIdle = function (cb, timeout) { + return setTimeout(function handler() { + if (!exports.$idleBlocked) { + cb(); + } + else { + setTimeout(handler, 100); + } + }, timeout); +}; +exports.$idleBlockId = null; +exports.blockIdle = function (delay) { + if (exports.$idleBlockId) + clearTimeout(exports.$idleBlockId); + exports.$idleBlocked = true; + exports.$idleBlockId = setTimeout(function () { + exports.$idleBlocked = false; + }, delay || 100); +}; +exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame + || window["mozRequestAnimationFrame"] + || window["webkitRequestAnimationFrame"] + || window["msRequestAnimationFrame"] + || window["oRequestAnimationFrame"]); +if (exports.nextFrame) + exports.nextFrame = exports.nextFrame.bind(window); +else + exports.nextFrame = function (callback) { + setTimeout(callback, 17); + }; +}); -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/encoders/index.js": -/*!*************************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/encoders/index.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var encoders = exports; - -encoders.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/encoders/der.js"); -encoders.pem = __webpack_require__(/*! ./pem */ "../../node_modules/asn1.js/lib/asn1/encoders/pem.js"); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/encoders/pem.js": -/*!***********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/encoders/pem.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -var DEREncoder = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/encoders/der.js"); - -function PEMEncoder(entity) { - DEREncoder.call(this, entity); - this.enc = 'pem'; +ace.define("ace/clipboard",["require","exports","module"], function(require, exports, module){"use strict"; +var $cancelT; +module.exports = { + lineMode: false, + pasteCancelled: function () { + if ($cancelT && $cancelT > Date.now() - 50) + return true; + return $cancelT = false; + }, + cancel: function () { + $cancelT = Date.now(); + } }; -inherits(PEMEncoder, DEREncoder); -module.exports = PEMEncoder; -PEMEncoder.prototype.encode = function encode(data, options) { - var buf = DEREncoder.prototype.encode.call(this, data); +}); - var p = buf.toString('base64'); - var out = [ '-----BEGIN ' + options.label + '-----' ]; - for (var i = 0; i < p.length; i += 64) - out.push(p.slice(i, i + 64)); - out.push('-----END ' + options.label + '-----'); - return out.join('\n'); -}; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js": -/*!***************************************************************!*\ - !*** ../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js ***! - \***************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* module decorator */ module = __webpack_require__.nmd(module); -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { - Buffer = window.Buffer; - } else { - Buffer = (__webpack_require__(/*! buffer */ "?98fd").Buffer); - } - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - this.negative = 1; - } - - if (start < number.length) { - if (base === 16) { - this._parseHex(number, start, endian); - } else { - this._parseBase(number, base, start); - if (endian === 'le') { - this._initArray(this.toArray(), base, endian); +ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/config","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/clipboard","ace/lib/keys"], function(require, exports, module){"use strict"; +var event = require("../lib/event"); +var nls = require("../config").nls; +var useragent = require("../lib/useragent"); +var dom = require("../lib/dom"); +var lang = require("../lib/lang"); +var clipboard = require("../clipboard"); +var BROKEN_SETDATA = useragent.isChrome < 18; +var USE_IE_MIME_TYPE = useragent.isIE; +var HAS_FOCUS_ARGS = useragent.isChrome > 63; +var MAX_LINE_LENGTH = 400; +var KEYS = require("../lib/keys"); +var MODS = KEYS.KEY_MODS; +var isIOS = useragent.isIOS; +var valueResetRegex = isIOS ? /\s/ : /\n/; +var isMobile = useragent.isMobile; +var TextInput = /** @class */ (function () { + function TextInput(parentNode, host) { + var _this = this; + this.host = host; + this.text = dom.createElement("textarea"); + this.text.className = "ace_text-input"; + this.text.setAttribute("wrap", "off"); + this.text.setAttribute("autocomplete", "off"); + this.text.setAttribute("autocorrect", "off"); + this.text.setAttribute("autocapitalize", "off"); + this.text.setAttribute("spellcheck", "false"); + this.text.style.opacity = "0"; + parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false; + this.pasted = false; + this.inComposition = false; + this.sendingText = false; + this.tempStyle = ''; + if (!isMobile) + this.text.style.fontSize = "1px"; + this.commandMode = false; + this.ignoreFocusEvents = false; + this.lastValue = ""; + this.lastSelectionStart = 0; + this.lastSelectionEnd = 0; + this.lastRestoreEnd = 0; + this.rowStart = Number.MAX_SAFE_INTEGER; + this.rowEnd = Number.MIN_SAFE_INTEGER; + this.numberOfExtraLines = 0; + try { + this.$isFocused = document.activeElement === this.text; } - } - } - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; + catch (e) { } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; + this.cancelComposition = this.cancelComposition.bind(this); + this.setAriaOptions({ role: "textbox" }); + event.addListener(this.text, "blur", function (e) { + if (_this.ignoreFocusEvents) + return; + host.onBlur(e); + _this.$isFocused = false; + }, host); + event.addListener(this.text, "focus", function (e) { + if (_this.ignoreFocusEvents) + return; + _this.$isFocused = true; + if (useragent.isEdge) { + try { + if (!document.hasFocus()) + return; + } + catch (e) { + } + } + host.onFocus(e); + if (useragent.isEdge) + setTimeout(_this.resetSelection.bind(_this)); + else + _this.resetSelection(); + }, host); this.$focusScroll = false; + host.on("beforeEndOperation", function () { + var curOp = host.curOp; + var commandName = curOp && curOp.command && curOp.command.name; + if (commandName == "insertstring") + return; + var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged); + if (_this.inComposition && isUserAction) { + _this.lastValue = _this.text.value = ""; + _this.onCompositionEnd(); + } + _this.resetSelection(); + }); + host.on("changeSelection", this.setAriaLabel.bind(this)); + this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection; + if (this.$isFocused) + host.onFocus(); + this.inputHandler = null; + this.afterContextMenu = false; + event.addCommandKeyListener(this.text, function (e, hashId, keyCode) { + if (_this.inComposition) + return; + return host.onCommandKey(e, hashId, keyCode); + }, host); + event.addListener(this.text, "select", this.onSelect.bind(this), host); + event.addListener(this.text, "input", this.onInput.bind(this), host); + event.addListener(this.text, "cut", this.onCut.bind(this), host); + event.addListener(this.text, "copy", this.onCopy.bind(this), host); + event.addListener(this.text, "paste", this.onPaste.bind(this), host); + if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) { + event.addListener(parentNode, "keydown", function (e) { + if ((useragent.isMac && !e.metaKey) || !e.ctrlKey) + return; + switch (e.keyCode) { + case 67: + _this.onCopy(e); + break; + case 86: + _this.onPaste(e); + break; + case 88: + _this.onCut(e); + break; + } + }, host); } - } - } - return this.strip(); - }; - - function parseHex4Bits (string, index) { - var c = string.charCodeAt(index); - // 'A' - 'F' - if (c >= 65 && c <= 70) { - return c - 55; - // 'a' - 'f' - } else if (c >= 97 && c <= 102) { - return c - 87; - // '0' - '9' - } else { - return (c - 48) & 0xf; - } - } - - function parseHexByte (string, lowerBound, index) { - var r = parseHex4Bits(string, index); - if (index - 1 >= lowerBound) { - r |= parseHex4Bits(string, index - 1) << 4; - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start, endian) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; + this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this + event.addListener(this.text, "compositionstart", this.onCompositionStart.bind(this), host); + event.addListener(this.text, "compositionupdate", this.onCompositionUpdate.bind(this), host); + event.addListener(this.text, "keyup", this.onKeyup.bind(this), host); + event.addListener(this.text, "keydown", this.syncComposition.bind(this), host); + event.addListener(this.text, "compositionend", this.onCompositionEnd.bind(this), host); + this.closeTimeout; + event.addListener(this.text, "mouseup", this.$onContextMenu.bind(this), host); + event.addListener(this.text, "mousedown", function (e) { + e.preventDefault(); + _this.onContextMenuClose(); + }, host); + event.addListener(host.renderer.scroller, "contextmenu", this.$onContextMenu.bind(this), host); + event.addListener(this.text, "contextmenu", this.$onContextMenu.bind(this), host); + if (isIOS) + this.addIosSelectionHandler(parentNode, host, this.text); } - - // 24-bits chunks - var off = 0; - var j = 0; - - var w; - if (endian === 'be') { - for (i = number.length - 1; i >= start; i -= 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; + TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) { + var _this = this; + var typingResetTimeout = null; + var typing = false; + text.addEventListener("keydown", function (e) { + if (typingResetTimeout) + clearTimeout(typingResetTimeout); + typing = true; + }, true); + text.addEventListener("keyup", function (e) { + typingResetTimeout = setTimeout(function () { + typing = false; + }, 100); + }, true); + var detectArrowKeys = function (e) { + if (document.activeElement !== text) + return; + if (typing || _this.inComposition || host.$mouseHandler.isMousePressed) + return; + if (_this.copied) { + return; + } + var selectionStart = text.selectionStart; + var selectionEnd = text.selectionEnd; + var key = null; + var modifier = 0; + if (selectionStart == 0) { + key = KEYS.up; + } + else if (selectionStart == 1) { + key = KEYS.home; + } + else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == "\n") { + key = KEYS.end; + } + else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == " ") { + key = KEYS.left; + modifier = MODS.option; + } + else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart + && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) { + key = KEYS.left; + } + else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split("\n").length > 2) { + key = KEYS.down; + } + else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == " ") { + key = KEYS.right; + modifier = MODS.option; + } + else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd + && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) { + key = KEYS.right; + } + if (selectionStart !== selectionEnd) + modifier |= MODS.shift; + if (key) { + var result = host.onCommandKey({}, modifier, key); + if (!result && host.commands) { + key = KEYS.keyCodeToString(key); + var command = host.commands.findKeyCommand(modifier, key); + if (command) + host.execCommand(command); + } + _this.lastSelectionStart = selectionStart; + _this.lastSelectionEnd = selectionEnd; + _this.resetSelection(""); + } + }; + document.addEventListener("selectionchange", detectArrowKeys); + host.on("destroy", function () { + document.removeEventListener("selectionchange", detectArrowKeys); + }); + }; + TextInput.prototype.onContextMenuClose = function () { + var _this = this; + clearTimeout(this.closeTimeout); + this.closeTimeout = setTimeout(function () { + if (_this.tempStyle) { + _this.text.style.cssText = _this.tempStyle; + _this.tempStyle = ''; + } + _this.host.renderer.$isMousePressed = false; + if (_this.host.renderer.$keepTextAreaAtCursor) + _this.host.renderer.$moveTextAreaToCursor(); + }, 0); + }; + TextInput.prototype.$onContextMenu = function (e) { + this.host.textInput.onContextMenu(e); + this.onContextMenuClose(); + }; + TextInput.prototype.onKeyup = function (e) { + if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) { + if (!this.inComposition) + this.lastValue = this.text.value; + this.lastSelectionStart = this.lastSelectionEnd = -1; + this.resetSelection(); } - } - } else { - var parseLength = number.length - start; - for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; + this.syncComposition(); + }; + TextInput.prototype.cancelComposition = function () { + this.ignoreFocusEvents = true; + this.text.blur(); + this.text.focus(); + this.ignoreFocusEvents = false; + }; + TextInput.prototype.onCompositionStart = function (e) { + if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly) + return; + this.inComposition = {}; + if (this.commandMode) + return; + if (e.data) + this.inComposition.useTextareaForIME = false; + setTimeout(this.onCompositionUpdate.bind(this), 0); + this.host._signal("compositionStart"); + this.host.on("mousedown", this.cancelComposition); //TODO: + var range = this.host.getSelectionRange(); + range.end.row = range.start.row; + range.end.column = range.start.column; + this.inComposition.markerRange = range; + this.inComposition.selectionStart = this.lastSelectionStart; + this.host.onCompositionStart(this.inComposition); + if (this.inComposition.useTextareaForIME) { + this.lastValue = this.text.value = ""; + this.lastSelectionStart = 0; + this.lastSelectionEnd = 0; } - } - } - - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - this.strip(); - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; + else { + if (this.text.msGetInputContext) + this.inComposition.context = this.text.msGetInputContext(); + if (this.text.getInputContext) + this.inComposition.context = this.text.getInputContext(); } - off += 2; - if (off >= 26) { - off -= 26; - i--; + }; + TextInput.prototype.onCompositionUpdate = function () { + if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly) + return; + if (this.commandMode) + return this.cancelComposition(); + if (this.inComposition.useTextareaForIME) { + this.host.onCompositionUpdate(this.text.value); } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; + else { + var data = this.text.value; + this.sendText(data); + if (this.inComposition.markerRange) { + if (this.inComposition.context) { + this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset; + } + this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column + + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd; + } } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; + TextInput.prototype.onCompositionEnd = function (e) { + if (!this.host.onCompositionEnd || this.host.$readOnly) + return; + this.inComposition = false; + this.host.onCompositionEnd(); + this.host.off("mousedown", this.cancelComposition); + if (e) + this.onInput(); }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } + TextInput.prototype.onCut = function (e) { + this.doCopy(e, true); + }; + TextInput.prototype.onCopy = function (e) { + this.doCopy(e, false); + }; + TextInput.prototype.onPaste = function (e) { + var data = this.handleClipboardData(e); + if (clipboard.pasteCancelled()) + return; + if (typeof data == "string") { + if (data) + this.host.onPaste(data, e); + if (useragent.isIE) + setTimeout(this.resetSelection); + event.preventDefault(e); + } + else { + this.text.value = ""; + this.pasted = true; + } + }; + TextInput.prototype.doCopy = function (e, isCut) { + var _this = this; + var data = this.host.getCopyText(); + if (!data) + return event.preventDefault(e); + if (this.handleClipboardData(e, data)) { + if (isIOS) { + this.resetSelection(data); + this.copied = data; + setTimeout(function () { + _this.copied = false; + }, 10); + } + isCut ? this.host.onCut() : this.host.onCopy(); + event.preventDefault(e); + } + else { + this.copied = true; + this.text.value = data; + this.text.select(); + setTimeout(function () { + _this.copied = false; + _this.resetSelection(); + isCut ? _this.host.onCut() : _this.host.onCopy(); + }); + } + }; + TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) { + var clipboardData = e.clipboardData || window["clipboardData"]; + if (!clipboardData || BROKEN_SETDATA) + return; + var mime = USE_IE_MIME_TYPE || forceIEMime ? "Text" : "text/plain"; + try { + if (data) { + return clipboardData.setData(mime, data) !== false; + } + else { + return clipboardData.getData(mime); + } + } + catch (e) { + if (!forceIEMime) + return this.handleClipboardData(e, data, true); + } + }; + TextInput.prototype.onInput = function (e) { + if (this.inComposition) + return this.onCompositionUpdate(); + if (e && e.inputType) { + if (e.inputType == "historyUndo") + return this.host.execCommand("undo"); + if (e.inputType == "historyRedo") + return this.host.execCommand("redo"); + } + var data = this.text.value; + var inserted = this.sendText(data, true); + if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart + < 1 && this.lastSelectionStart == this.lastSelectionEnd) { + this.resetSelection(); + } + }; + TextInput.prototype.sendText = function (value, fromInput) { + if (this.afterContextMenu) + this.afterContextMenu = false; + if (this.pasted) { + this.resetSelection(); + if (value) + this.host.onPaste(value); + this.pasted = false; + return ""; + } + else { + var selectionStart = this.text.selectionStart; + var selectionEnd = this.text.selectionEnd; + var extendLeft = this.lastSelectionStart; + var extendRight = this.lastValue.length - this.lastSelectionEnd; + var inserted = value; + var restoreStart = value.length - selectionStart; + var restoreEnd = value.length - selectionEnd; + var i = 0; + while (extendLeft > 0 && this.lastValue[i] == value[i]) { + i++; + extendLeft--; + } + inserted = inserted.slice(i); + i = 1; + while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1 + && this.lastValue[this.lastValue.length - i] == value[value.length - i]) { + i++; + extendRight--; + } + restoreStart -= i - 1; + restoreEnd -= i - 1; + var endIndex = inserted.length - i + 1; + if (endIndex < 0) { + extendLeft = -endIndex; + endIndex = 0; + } + inserted = inserted.slice(0, endIndex); + if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd) + return ""; + this.sendingText = true; + var shouldReset = false; + if (useragent.isAndroid && inserted == ". ") { + inserted = " "; + shouldReset = true; + } + if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) { + this.host.onTextInput(inserted); + } + else { + this.host.onTextInput(inserted, { + extendLeft: extendLeft, + extendRight: extendRight, + restoreStart: restoreStart, + restoreEnd: restoreEnd + }); + } + this.sendingText = false; + this.lastValue = value; + this.lastSelectionStart = selectionStart; + this.lastSelectionEnd = selectionEnd; + this.lastRestoreEnd = restoreEnd; + return shouldReset ? "\n" : inserted; + } + }; + TextInput.prototype.onSelect = function (e) { + var _this = this; + if (this.inComposition) + return; + var isAllSelected = function (text) { + return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value + === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd; + }; + if (this.copied) { + this.copied = false; + } + else if (isAllSelected(this.text)) { + this.host.selectAll(); + this.resetSelection(); + } + else if (isMobile && this.text.selectionStart != this.lastSelectionStart) { + this.resetSelection(); + } + }; + TextInput.prototype.$resetSelectionIOS = function (value) { + if (!this.$isFocused || (this.copied && !value) || this.sendingText) + return; + if (!value) + value = ""; + var newValue = "\n ab" + value + "cde fg\n"; + if (newValue != this.text.value) + this.text.value = this.lastValue = newValue; + var selectionStart = 4; + var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1)); + if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) { + this.text.setSelectionRange(selectionStart, selectionEnd); + } + this.lastSelectionStart = selectionStart; + this.lastSelectionEnd = selectionEnd; + }; + TextInput.prototype.$resetSelection = function () { + var _this = this; + if (this.inComposition || this.sendingText) + return; + if (!this.$isFocused && !this.afterContextMenu) + return; + this.inComposition = true; + var selectionStart = 0; + var selectionEnd = 0; + var line = ""; + var positionToSelection = function (row, column) { + var selection = column; + for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) { + selection += _this.host.session.getLine(row - i).length + 1; + } + return selection; + }; + if (this.host.session) { + var selection = this.host.selection; + var range = selection.getRange(); + var row = selection.cursor.row; + if (row === this.rowEnd + 1) { + this.rowStart = this.rowEnd + 1; + this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines; + } + else if (row === this.rowStart - 1) { + this.rowEnd = this.rowStart - 1; + this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines; + } + else if (row < this.rowStart - 1 || row > this.rowEnd + 1) { + this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0; + this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2 + * this.numberOfExtraLines; + } + var lines = []; + for (var i = this.rowStart; i <= this.rowEnd; i++) { + lines.push(this.host.session.getLine(i)); + } + line = lines.join('\n'); + selectionStart = positionToSelection(range.start.row, range.start.column); + selectionEnd = positionToSelection(range.end.row, range.end.column); + if (range.start.row < this.rowStart) { + var prevLine = this.host.session.getLine(this.rowStart - 1); + selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart; + selectionEnd += prevLine.length + 1; + line = prevLine + "\n" + line; + } + else if (range.end.row > this.rowEnd) { + var nextLine = this.host.session.getLine(this.rowEnd + 1); + selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column; + selectionEnd += line.length + 1; + line = line + "\n" + nextLine; + } + else if (isMobile && row > 0) { + line = "\n" + line; + selectionEnd += 1; + selectionStart += 1; + } + if (line.length > MAX_LINE_LENGTH) { + if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) { + line = line.slice(0, MAX_LINE_LENGTH); + } + else { + line = "\n"; + if (selectionStart == selectionEnd) { + selectionStart = selectionEnd = 0; + } + else { + selectionStart = 0; + selectionEnd = 1; + } + } + } + var newValue = line + "\n\n"; + if (newValue != this.lastValue) { + this.text.value = this.lastValue = newValue; + this.lastSelectionStart = this.lastSelectionEnd = newValue.length; + } + } + if (this.afterContextMenu) { + this.lastSelectionStart = this.text.selectionStart; + this.lastSelectionEnd = this.text.selectionEnd; + } + if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd + != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization + ) { + try { + this.text.setSelectionRange(selectionStart, selectionEnd); + this.lastSelectionStart = selectionStart; + this.lastSelectionEnd = selectionEnd; + } + catch (e) { + } + } + this.inComposition = false; + }; + TextInput.prototype.setHost = function (newHost) { + this.host = newHost; + }; + TextInput.prototype.setNumberOfExtraLines = function (number) { + this.rowStart = Number.MAX_SAFE_INTEGER; + this.rowEnd = Number.MIN_SAFE_INTEGER; + if (number < 0) { + this.numberOfExtraLines = 0; + return; + } + this.numberOfExtraLines = number; + }; + TextInput.prototype.setAriaLabel = function () { + var ariaLabel = ""; + if (this.host.$textInputAriaLabel) { + ariaLabel += "".concat(this.host.$textInputAriaLabel, ", "); + } + if (this.host.session) { + var row = this.host.session.selection.cursor.row; + ariaLabel += nls("text-input.aria-label", "Cursor at row $0", [row + 1]); + } + this.text.setAttribute("aria-label", ariaLabel); + }; + TextInput.prototype.setAriaOptions = function (options) { + if (options.activeDescendant) { + this.text.setAttribute("aria-haspopup", "true"); + this.text.setAttribute("aria-autocomplete", options.inline ? "both" : "list"); + this.text.setAttribute("aria-activedescendant", options.activeDescendant); + } + else { + this.text.setAttribute("aria-haspopup", "false"); + this.text.setAttribute("aria-autocomplete", "both"); + this.text.removeAttribute("aria-activedescendant"); + } + if (options.role) { + this.text.setAttribute("role", options.role); + } + if (options.setLabel) { + this.text.setAttribute("aria-roledescription", nls("text-input.aria-roledescription", "editor")); + this.setAriaLabel(); + } + }; + TextInput.prototype.focus = function () { + var _this = this; + this.setAriaOptions({ + setLabel: this.host.renderer.enableKeyboardAccessibility + }); + if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == "browser") + return this.text.focus({ preventScroll: true }); + var top = this.text.style.top; + this.text.style.position = "fixed"; + this.text.style.top = "0px"; + try { + var isTransformed = this.text.getBoundingClientRect().top != 0; + } + catch (e) { + return; + } + var ancestors = []; + if (isTransformed) { + var t = this.text.parentElement; + while (t && t.nodeType == 1) { + ancestors.push(t); + t.setAttribute("ace_nocontext", "true"); + if (!t.parentElement && t.getRootNode) + t = t.getRootNode()["host"]; + else + t = t.parentElement; + } + } + this.text.focus({ preventScroll: true }); + if (isTransformed) { + ancestors.forEach(function (p) { + p.removeAttribute("ace_nocontext"); + }); + } + setTimeout(function () { + _this.text.style.position = ""; + if (_this.text.style.top == "0px") + _this.text.style.top = top; + }, 0); + }; + TextInput.prototype.blur = function () { + this.text.blur(); + }; + TextInput.prototype.isFocused = function () { + return this.$isFocused; + }; + TextInput.prototype.setInputHandler = function (cb) { + this.inputHandler = cb; + }; + TextInput.prototype.getInputHandler = function () { + return this.inputHandler; + }; + TextInput.prototype.getElement = function () { + return this.text; + }; + TextInput.prototype.setCommandMode = function (value) { + this.commandMode = value; + this.text.readOnly = false; + }; + TextInput.prototype.setReadOnly = function (readOnly) { + if (!this.commandMode) + this.text.readOnly = readOnly; + }; + TextInput.prototype.setCopyWithEmptySelection = function (value) { + }; + TextInput.prototype.onContextMenu = function (e) { + this.afterContextMenu = true; + this.resetSelection(); + this.host._emit("nativecontextmenu", { + target: this.host, + domEvent: e + }); + this.moveToMouse(e, true); + }; + TextInput.prototype.moveToMouse = function (e, bringToFront) { + var _this = this; + if (!this.tempStyle) + this.tempStyle = this.text.style.cssText; + this.text.style.cssText = (bringToFront ? "z-index:100000;" : "") + (useragent.isIE ? "opacity:0.1;" : "") + + "text-indent: -" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth + * 0.5 + "px;"; + var rect = this.host.container.getBoundingClientRect(); + var style = dom.computedStyle(this.host.container); + var top = rect.top + (parseInt(style.borderTopWidth) || 0); + var left = rect.left + (parseInt(style.borderLeftWidth) || 0); + var maxTop = rect.bottom - top - this.text.clientHeight - 2; + var move = function (e) { + dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop)); + }; + move(e); + if (e.type != "mousedown") + return; + this.host.renderer.$isMousePressed = true; + clearTimeout(this.closeTimeout); + if (useragent.isWin) + event.capture(this.host.container, move, this.onContextMenuClose.bind(this)); + }; + TextInput.prototype.destroy = function () { + if (this.text.parentElement) + this.text.parentElement.removeChild(this.text); + }; + return TextInput; +}()); +exports.TextInput = TextInput; +exports.$setUserAgentForTests = function (_isMobile, _isIOS) { + isMobile = _isMobile; + isIOS = _isIOS; +}; - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } +}); - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } +ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"], function(require, exports, module){"use strict"; +var useragent = require("../lib/useragent"); +var DRAG_OFFSET = 0; // pixels +var SCROLL_COOLDOWN_T = 550; // milliseconds +var DefaultHandlers = /** @class */ (function () { + function DefaultHandlers(mouseHandler) { + mouseHandler.$clickSelection = null; + var editor = mouseHandler.editor; + editor.setDefaultHandler("mousedown", this.onMouseDown.bind(mouseHandler)); + editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(mouseHandler)); + editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler)); + editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler)); + editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler)); + var exports = ["select", "startSelect", "selectEnd", "selectAllEnd", "selectByWordsEnd", + "selectByLinesEnd", "dragWait", "dragWaitEnd", "focusWait"]; + exports.forEach(function (x) { + mouseHandler[x] = this[x]; + }, this); + mouseHandler["selectByLines"] = this.extendSelectionBy.bind(mouseHandler, "getLineRange"); + mouseHandler["selectByWords"] = this.extendSelectionBy.bind(mouseHandler, "getWordRange"); } + DefaultHandlers.prototype.onMouseDown = function (ev) { + var inSelection = ev.inSelection(); + var pos = ev.getDocumentPosition(); + this.mousedownEvent = ev; + var editor = this.editor; + var button = ev.getButton(); + if (button !== 0) { + var selectionRange = editor.getSelectionRange(); + var selectionEmpty = selectionRange.isEmpty(); + if (selectionEmpty || button == 1) + editor.selection.moveToPosition(pos); + if (button == 2) { + editor.textInput.onContextMenu(ev.domEvent); + if (!useragent.isMozilla) + ev.preventDefault(); + } + return; + } + this.mousedownEvent.time = Date.now(); + if (inSelection && !editor.isFocused()) { + editor.focus(); + if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) { + this.setState("focusWait"); + this.captureMouse(ev); + return; + } + } + this.captureMouse(ev); + this.startSelect(pos, ev.domEvent._clicks > 1); + return ev.preventDefault(); + }; + DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) { + pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); + var editor = this.editor; + if (!this.mousedownEvent) + return; + if (this.mousedownEvent.getShiftKey()) + editor.selection.selectToPosition(pos); + else if (!waitForClickSelection) + editor.selection.moveToPosition(pos); + if (!waitForClickSelection) + this.select(); + editor.setStyle("ace_selecting"); + this.setState("select"); + }; + DefaultHandlers.prototype.select = function () { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + if (this.$clickSelection) { + var cmp = this.$clickSelection.comparePoint(cursor); + if (cmp == -1) { + anchor = this.$clickSelection.end; + } + else if (cmp == 1) { + anchor = this.$clickSelection.start; + } + else { + var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); + cursor = orientedRange.cursor; + anchor = orientedRange.anchor; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + editor.renderer.scrollCursorIntoView(); + }; + DefaultHandlers.prototype.extendSelectionBy = function (unitName) { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + var range = editor.selection[unitName](cursor.row, cursor.column); + if (this.$clickSelection) { + var cmpStart = this.$clickSelection.comparePoint(range.start); + var cmpEnd = this.$clickSelection.comparePoint(range.end); + if (cmpStart == -1 && cmpEnd <= 0) { + anchor = this.$clickSelection.end; + if (range.end.row != cursor.row || range.end.column != cursor.column) + cursor = range.start; + } + else if (cmpEnd == 1 && cmpStart >= 0) { + anchor = this.$clickSelection.start; + if (range.start.row != cursor.row || range.start.column != cursor.column) + cursor = range.end; + } + else if (cmpStart == -1 && cmpEnd == 1) { + cursor = range.end; + anchor = range.start; + } + else { + var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); + cursor = orientedRange.cursor; + anchor = orientedRange.anchor; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + editor.renderer.scrollCursorIntoView(); + }; + DefaultHandlers.prototype.selectByLinesEnd = function () { + this.$clickSelection = null; + this.editor.unsetStyle("ace_selecting"); + }; + DefaultHandlers.prototype.focusWait = function () { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + var time = Date.now(); + if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout) + this.startSelect(this.mousedownEvent.getDocumentPosition()); + }; + DefaultHandlers.prototype.onDoubleClick = function (ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + var session = editor.session; + var range = session.getBracketRange(pos); + if (range) { + if (range.isEmpty()) { + range.start.column--; + range.end.column++; + } + this.setState("select"); + } + else { + range = editor.selection.getWordRange(pos.row, pos.column); + this.setState("selectByWords"); + } + this.$clickSelection = range; + this.select(); + }; + DefaultHandlers.prototype.onTripleClick = function (ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + this.setState("selectByLines"); + var range = editor.getSelectionRange(); + if (range.isMultiLine() && range.contains(pos.row, pos.column)) { + this.$clickSelection = editor.selection.getLineRange(range.start.row); + this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end; + } + else { + this.$clickSelection = editor.selection.getLineRange(pos.row); + } + this.select(); + }; + DefaultHandlers.prototype.onQuadClick = function (ev) { + var editor = this.editor; + editor.selectAll(); + this.$clickSelection = editor.getSelectionRange(); + this.setState("selectAll"); + }; + DefaultHandlers.prototype.onMouseWheel = function (ev) { + if (ev.getAccelKey()) + return; + if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) { + ev.wheelX = ev.wheelY; + ev.wheelY = 0; + } + var editor = this.editor; + if (!this.$lastScroll) + this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 }; + var prevScroll = this.$lastScroll; + var t = ev.domEvent.timeStamp; + var dt = t - prevScroll.t; + var vx = dt ? ev.wheelX / dt : prevScroll.vx; + var vy = dt ? ev.wheelY / dt : prevScroll.vy; + if (dt < SCROLL_COOLDOWN_T) { + vx = (vx + prevScroll.vx) / 2; + vy = (vy + prevScroll.vy) / 2; + } + var direction = Math.abs(vx / vy); + var canScroll = false; + if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0)) + canScroll = true; + if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed)) + canScroll = true; + if (canScroll) { + prevScroll.allowed = t; + } + else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) { + var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx) + && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy); + if (isSlower) { + canScroll = true; + prevScroll.allowed = t; + } + else { + prevScroll.allowed = 0; + } + } + prevScroll.t = t; + prevScroll.vx = vx; + prevScroll.vy = vy; + if (canScroll) { + editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + return ev.stop(); + } + }; + return DefaultHandlers; +}()); +DefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd; +DefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd; +DefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd; +exports.DefaultHandlers = DefaultHandlers; +function calcDistance(ax, ay, bx, by) { + return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); +} +function calcRangeOrientation(range, cursor) { + if (range.start.row == range.end.row) + var cmp = 2 * cursor.column - range.start.column - range.end.column; + else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) + var cmp = cursor.column - 4; + else + var cmp = 2 * cursor.row - range.start.row - range.end.row; + if (cmp < 0) + return { cursor: range.start, anchor: range.end }; + else + return { cursor: range.end, anchor: range.start }; +} - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); +}); - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); +ace.define("ace/lib/scroll",["require","exports","module"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) { + event.stopPropagation(); + var target = event.currentTarget; + var contentOverflows = target.scrollHeight > target.clientHeight; + if (!contentOverflows) { + event.preventDefault(); } +}; - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } +}); - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; +ace.define("ace/tooltip",["require","exports","module","ace/lib/dom","ace/lib/event","ace/range","ace/lib/scroll"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var Range = require("./range").Range; +var preventParentScroll = require("./lib/scroll").preventParentScroll; +var CLASSNAME = "ace_tooltip"; +var Tooltip = /** @class */ (function () { + function Tooltip(parentNode) { + this.isOpen = false; + this.$element = null; + this.$parentNode = parentNode; } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; + Tooltip.prototype.$init = function () { + this.$element = dom.createElement("div"); + this.$element.className = CLASSNAME; + this.$element.style.display = "none"; + this.$parentNode.appendChild(this.$element); + return this.$element; + }; + Tooltip.prototype.getElement = function () { + return this.$element || this.$init(); + }; + Tooltip.prototype.setText = function (text) { + this.getElement().textContent = text; + }; + Tooltip.prototype.setHtml = function (html) { + this.getElement().innerHTML = html; + }; + Tooltip.prototype.setPosition = function (x, y) { + var el = this.getElement(); + var rootRect = el.offsetParent && el.offsetParent.getBoundingClientRect(); + el.style.left = x - (rootRect ? rootRect.left : 0) + "px"; + el.style.top = y - (rootRect ? rootRect.top : 0) + "px"; + }; + Tooltip.prototype.setClassName = function (className) { + dom.addCssClass(this.getElement(), className); + }; + Tooltip.prototype.setTheme = function (theme) { + this.$element.className = CLASSNAME + " " + + (theme.isDark ? "ace_dark " : "") + (theme.cssClass || ""); + }; + Tooltip.prototype.show = function (text, x, y) { + if (text != null) + this.setText(text); + if (x != null && y != null) + this.setPosition(x, y); + if (!this.isOpen) { + this.getElement().style.display = "block"; + this.isOpen = true; + } + }; + Tooltip.prototype.hide = function (e) { + if (this.isOpen) { + this.getElement().style.display = "none"; + this.getElement().className = CLASSNAME; + this.isOpen = false; + } + }; + Tooltip.prototype.getHeight = function () { + return this.getElement().offsetHeight; + }; + Tooltip.prototype.getWidth = function () { + return this.getElement().offsetWidth; + }; + Tooltip.prototype.destroy = function () { + this.isOpen = false; + if (this.$element && this.$element.parentNode) { + this.$element.parentNode.removeChild(this.$element); + } + }; + return Tooltip; +}()); +var PopupManager = /** @class */ (function () { + function PopupManager() { + this.popups = []; } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; + PopupManager.prototype.addPopup = function (popup) { + this.popups.push(popup); + this.updatePopups(); + }; + PopupManager.prototype.removePopup = function (popup) { + var index = this.popups.indexOf(popup); + if (index !== -1) { + this.popups.splice(index, 1); + this.updatePopups(); + } + }; + PopupManager.prototype.updatePopups = function () { + var e_1, _a, e_2, _b; + this.popups.sort(function (a, b) { return b.priority - a.priority; }); + var visiblepopups = []; + try { + for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) { + var popup = _d.value; + var shouldDisplay = true; + try { + for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) { + var visiblePopup = visiblepopups_1_1.value; + if (this.doPopupsOverlap(visiblePopup, popup)) { + shouldDisplay = false; + break; + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1); + } + finally { if (e_2) throw e_2.error; } + } + if (shouldDisplay) { + visiblepopups.push(popup); + } + else { + popup.hide(); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + }; + PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) { + var rectA = popupA.getElement().getBoundingClientRect(); + var rectB = popupB.getElement().getBoundingClientRect(); + return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom + > rectB.top); + }; + return PopupManager; +}()); +var popupManager = new PopupManager(); +exports.popupManager = popupManager; +exports.Tooltip = Tooltip; +var HoverTooltip = /** @class */ (function (_super) { + __extends(HoverTooltip, _super); + function HoverTooltip(parentNode) { + if (parentNode === void 0) { parentNode = document.body; } + var _this = _super.call(this, parentNode) || this; + _this.timeout = undefined; + _this.lastT = 0; + _this.idleTime = 350; + _this.lastEvent = undefined; + _this.onMouseOut = _this.onMouseOut.bind(_this); + _this.onMouseMove = _this.onMouseMove.bind(_this); + _this.waitForHover = _this.waitForHover.bind(_this); + _this.hide = _this.hide.bind(_this); + var el = _this.getElement(); + el.style.whiteSpace = "pre-wrap"; + el.style.pointerEvents = "auto"; + el.addEventListener("mouseout", _this.onMouseOut); + el.tabIndex = -1; + el.addEventListener("blur", function () { + if (!el.contains(document.activeElement)) + this.hide(); + }.bind(_this)); + el.addEventListener("wheel", preventParentScroll); + return _this; } + HoverTooltip.prototype.addToEditor = function (editor) { + editor.on("mousemove", this.onMouseMove); + editor.on("mousedown", this.hide); + editor.renderer.getMouseEventTarget().addEventListener("mouseout", this.onMouseOut, true); + }; + HoverTooltip.prototype.removeFromEditor = function (editor) { + editor.off("mousemove", this.onMouseMove); + editor.off("mousedown", this.hide); + editor.renderer.getMouseEventTarget().removeEventListener("mouseout", this.onMouseOut, true); + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + }; + HoverTooltip.prototype.onMouseMove = function (e, editor) { + this.lastEvent = e; + this.lastT = Date.now(); + var isMousePressed = editor.$mouseHandler.isMousePressed; + if (this.isOpen) { + var pos = this.lastEvent && this.lastEvent.getDocumentPosition(); + if (!this.range + || !this.range.contains(pos.row, pos.column) + || isMousePressed + || this.isOutsideOfText(this.lastEvent)) { + this.hide(); + } + } + if (this.timeout || isMousePressed) + return; + this.lastEvent = e; + this.timeout = setTimeout(this.waitForHover, this.idleTime); + }; + HoverTooltip.prototype.waitForHover = function () { + if (this.timeout) + clearTimeout(this.timeout); + var dt = Date.now() - this.lastT; + if (this.idleTime - dt > 10) { + this.timeout = setTimeout(this.waitForHover, this.idleTime - dt); + return; + } + this.timeout = null; + if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) { + this.$gatherData(this.lastEvent, this.lastEvent.editor); + } + }; + HoverTooltip.prototype.isOutsideOfText = function (e) { + var editor = e.editor; + var docPos = e.getDocumentPosition(); + var line = editor.session.getLine(docPos.row); + if (docPos.column == line.length) { + var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY); + var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column); + if (clippedPos.column != screenPos.column + || clippedPos.row != screenPos.row) { + return true; + } + } + return false; + }; + HoverTooltip.prototype.setDataProvider = function (value) { + this.$gatherData = value; + }; + HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) { + var MARGIN = 10; + if (startingEvent && startingEvent != this.lastEvent) + return; + if (this.isOpen && document.activeElement == this.getElement()) + return; + var renderer = editor.renderer; + if (!this.isOpen) { + popupManager.addPopup(this); + this.$registerCloseEvents(); + this.setTheme(renderer.theme); + } + this.isOpen = true; + this.addMarker(range, editor.session); + this.range = Range.fromPoints(range.start, range.end); + var position = renderer.textToScreenCoordinates(range.start.row, range.start.column); + var rect = renderer.scroller.getBoundingClientRect(); + if (position.pageX < rect.left) + position.pageX = rect.left; + var element = this.getElement(); + element.innerHTML = ""; + element.appendChild(domNode); + element.style.maxHeight = ""; + element.style.display = "block"; + var labelHeight = element.clientHeight; + var labelWidth = element.clientWidth; + var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight; + var isAbove = true; + if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) { + isAbove = false; + } + element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + "px"; + element.style.top = isAbove ? "" : position.pageY + renderer.lineHeight + "px"; + element.style.bottom = isAbove ? window.innerHeight - position.pageY + "px" : ""; + element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + "px"; + }; + HoverTooltip.prototype.addMarker = function (range, session) { + if (this.marker) { + this.$markerSession.removeMarker(this.marker); + } + this.$markerSession = session; + this.marker = session && session.addMarker(range, "ace_highlight-marker", "text"); + }; + HoverTooltip.prototype.hide = function (e) { + if (!e && document.activeElement == this.getElement()) + return; + if (e && e.target && (e.type != "keydown" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target)) + return; + this.lastEvent = null; + if (this.timeout) + clearTimeout(this.timeout); + this.timeout = null; + this.addMarker(null); + if (this.isOpen) { + this.$removeCloseEvents(); + this.getElement().style.display = "none"; + this.isOpen = false; + popupManager.removePopup(this); + } + }; + HoverTooltip.prototype.$registerCloseEvents = function () { + window.addEventListener("keydown", this.hide, true); + window.addEventListener("wheel", this.hide, true); + window.addEventListener("mousedown", this.hide, true); + }; + HoverTooltip.prototype.$removeCloseEvents = function () { + window.removeEventListener("keydown", this.hide, true); + window.removeEventListener("wheel", this.hide, true); + window.removeEventListener("mousedown", this.hide, true); + }; + HoverTooltip.prototype.onMouseOut = function (e) { + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + this.lastEvent = null; + if (!this.isOpen) + return; + if (!e.relatedTarget || this.getElement().contains(e.relatedTarget)) + return; + if (e && e.currentTarget.contains(e.relatedTarget)) + return; + if (!e.relatedTarget.classList.contains("ace_content")) + this.hide(); + }; + return HoverTooltip; +}(Tooltip)); +exports.HoverTooltip = HoverTooltip; - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } +}); - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } +ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/tooltip","ace/config"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var dom = require("../lib/dom"); +var event = require("../lib/event"); +var Tooltip = require("../tooltip").Tooltip; +var nls = require("../config").nls; +var GUTTER_TOOLTIP_LEFT_OFFSET = 5; +var GUTTER_TOOLTIP_TOP_OFFSET = 3; +exports.GUTTER_TOOLTIP_LEFT_OFFSET = GUTTER_TOOLTIP_LEFT_OFFSET; +exports.GUTTER_TOOLTIP_TOP_OFFSET = GUTTER_TOOLTIP_TOP_OFFSET; +function GutterHandler(mouseHandler) { + var editor = mouseHandler.editor; + var gutter = editor.renderer.$gutterLayer; + var tooltip = new GutterTooltip(editor, true); + mouseHandler.editor.setDefaultHandler("guttermousedown", function (e) { + if (!editor.isFocused() || e.getButton() != 0) + return; + var gutterRegion = gutter.getRegion(e); + if (gutterRegion == "foldWidgets") + return; + var row = e.getDocumentPosition().row; + var selection = editor.session.selection; + if (e.getShiftKey()) + selection.selectTo(row, 0); + else { + if (e.domEvent.detail == 2) { + editor.selectAll(); + return e.preventDefault(); + } + mouseHandler.$clickSelection = editor.selection.getLineRange(row); + } + mouseHandler.setState("selectByLines"); + mouseHandler.captureMouse(e); + return e.preventDefault(); + }); + var tooltipTimeout, mouseEvent; + function showTooltip() { + var row = mouseEvent.getDocumentPosition().row; + var maxRow = editor.session.getLength(); + if (row == maxRow) { + var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; + var pos = mouseEvent.$pos; + if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) + return hideTooltip(); + } + tooltip.showTooltip(row); + if (!tooltip.isOpen) + return; + editor.on("mousewheel", hideTooltip); + editor.on("changeSession", hideTooltip); + window.addEventListener("keydown", hideTooltip, true); + if (mouseHandler.$tooltipFollowsMouse) { + moveTooltip(mouseEvent); + } + else { + var gutterRow = mouseEvent.getGutterRow(); + var gutterCell = gutter.$lines.get(gutterRow); + if (gutterCell) { + var gutterElement = gutterCell.element.querySelector(".ace_gutter_annotation"); + var rect = gutterElement.getBoundingClientRect(); + var style = tooltip.getElement().style; + style.left = (rect.right - GUTTER_TOOLTIP_LEFT_OFFSET) + "px"; + style.top = (rect.bottom - GUTTER_TOOLTIP_TOP_OFFSET) + "px"; + } + else { + moveTooltip(mouseEvent); + } + } } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; + function hideTooltip(e) { + if (e && e.type === "keydown" && (e.ctrlKey || e.metaKey)) + return; + if (e && e.type === "mouseout" && (!e.relatedTarget || tooltip.getElement().contains(e.relatedTarget))) + return; + if (tooltipTimeout) + tooltipTimeout = clearTimeout(tooltipTimeout); + if (tooltip.isOpen) { + tooltip.hideTooltip(); + editor.off("mousewheel", hideTooltip); + editor.off("changeSession", hideTooltip); + window.removeEventListener("keydown", hideTooltip, true); + } } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; + function moveTooltip(e) { + tooltip.setPosition(e.x, e.y); } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; + mouseHandler.editor.setDefaultHandler("guttermousemove", function (e) { + var target = e.domEvent.target || e.domEvent.srcElement; + if (dom.hasCssClass(target, "ace_fold-widget") || dom.hasCssClass(target, "ace_custom-widget")) + return hideTooltip(); + if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse) + moveTooltip(e); + mouseEvent = e; + if (tooltipTimeout) + return; + tooltipTimeout = setTimeout(function () { + tooltipTimeout = null; + if (mouseEvent && !mouseHandler.isMousePressed) + showTooltip(); + }, 50); + }); + event.addListener(editor.renderer.$gutter, "mouseout", function (e) { + mouseEvent = null; + if (!tooltip.isOpen) + return; + tooltipTimeout = setTimeout(function () { + tooltipTimeout = null; + hideTooltip(e); + }, 50); + }, editor); +} +exports.GutterHandler = GutterHandler; +var GutterTooltip = /** @class */ (function (_super) { + __extends(GutterTooltip, _super); + function GutterTooltip(editor, isHover) { + if (isHover === void 0) { isHover = false; } + var _this = _super.call(this, editor.container) || this; + _this.id = "gt" + (++GutterTooltip.$uid); + _this.editor = editor; + _this.visibleTooltipRow; + var el = _this.getElement(); + el.setAttribute("role", "tooltip"); + el.setAttribute("id", _this.id); + el.style.pointerEvents = "auto"; + if (isHover) { + _this.onMouseOut = _this.onMouseOut.bind(_this); + el.addEventListener("mouseout", _this.onMouseOut); + } + return _this; } + GutterTooltip.prototype.onMouseOut = function (e) { + if (!this.isOpen) + return; + if (!e.relatedTarget || this.getElement().contains(e.relatedTarget)) + return; + if (e && e.currentTarget.contains(e.relatedTarget)) + return; + this.hideTooltip(); + }; + GutterTooltip.prototype.setPosition = function (x, y) { + var windowWidth = window.innerWidth || document.documentElement.clientWidth; + var windowHeight = window.innerHeight || document.documentElement.clientHeight; + var width = this.getWidth(); + var height = this.getHeight(); + x += 15; + y += 15; + if (x + width > windowWidth) { + x -= (x + width) - windowWidth; + } + if (y + height > windowHeight) { + y -= 20 + height; + } + Tooltip.prototype.setPosition.call(this, x, y); + }; + Object.defineProperty(GutterTooltip, "annotationLabels", { + get: function () { + return { + error: { + singular: nls("gutter-tooltip.aria-label.error.singular", "error"), + plural: nls("gutter-tooltip.aria-label.error.plural", "errors") + }, + security: { + singular: nls("gutter-tooltip.aria-label.security.singular", "security finding"), + plural: nls("gutter-tooltip.aria-label.security.plural", "security findings") + }, + warning: { + singular: nls("gutter-tooltip.aria-label.warning.singular", "warning"), + plural: nls("gutter-tooltip.aria-label.warning.plural", "warnings") + }, + info: { + singular: nls("gutter-tooltip.aria-label.info.singular", "information message"), + plural: nls("gutter-tooltip.aria-label.info.plural", "information messages") + }, + hint: { + singular: nls("gutter-tooltip.aria-label.hint.singular", "suggestion"), + plural: nls("gutter-tooltip.aria-label.hint.plural", "suggestions") + } + }; + }, + enumerable: false, + configurable: true + }); + GutterTooltip.prototype.showTooltip = function (row) { + var _a; + var gutter = this.editor.renderer.$gutterLayer; + var annotationsInRow = gutter.$annotations[row]; + var annotation; + if (annotationsInRow) + annotation = { + displayText: Array.from(annotationsInRow.displayText), + type: Array.from(annotationsInRow.type) + }; + else + annotation = { displayText: [], type: [] }; + var fold = gutter.session.getFoldLine(row); + if (fold && gutter.$showFoldedAnnotations) { + var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] }; + var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 }; + var mostSevereAnnotationTypeInFold; + for (var i = row + 1; i <= fold.end.row; i++) { + if (!gutter.$annotations[i]) + continue; + for (var j = 0; j < gutter.$annotations[i].text.length; j++) { + var annotationType = gutter.$annotations[i].type[j]; + annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]); + if (!mostSevereAnnotationTypeInFold || + severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) { + mostSevereAnnotationTypeInFold = annotationType; + } + } + } + if (["error", "security", "warning"].includes(mostSevereAnnotationTypeInFold)) { + var summaryFoldedAnnotations = "".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), " in folded code."); + annotation.displayText.push(summaryFoldedAnnotations); + annotation.type.push(mostSevereAnnotationTypeInFold + "_fold"); + } + } + if (annotation.displayText.length === 0) + return this.hideTooltip(); + var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] }; + var iconClassName = gutter.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; + for (var i = 0; i < annotation.displayText.length; i++) { + var lineElement = dom.createElement("span"); + var iconElement = dom.createElement("span"); + (_a = iconElement.classList).add.apply(_a, ["ace_".concat(annotation.type[i]), iconClassName]); + iconElement.setAttribute("aria-label", "".concat(GutterTooltip.annotationLabels[annotation.type[i].replace("_fold", "")].singular)); + iconElement.setAttribute("role", "img"); + iconElement.appendChild(dom.createTextNode(" ")); + lineElement.appendChild(iconElement); + lineElement.appendChild(dom.createTextNode(annotation.displayText[i])); + lineElement.appendChild(dom.createElement("br")); + annotationMessages[annotation.type[i].replace("_fold", "")].push(lineElement); + } + var tooltipElement = this.getElement(); + dom.removeChildren(tooltipElement); + annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); }); + annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); }); + annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); }); + annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); }); + annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); }); + tooltipElement.setAttribute("aria-live", "polite"); + if (!this.isOpen) { + this.setTheme(this.editor.renderer.theme); + this.setClassName("ace_gutter-tooltip"); + } + var annotationNode = this.$findLinkedAnnotationNode(row); + if (annotationNode) { + annotationNode.setAttribute("aria-describedby", this.id); + } + this.show(); + this.visibleTooltipRow = row; + this.editor._signal("showGutterTooltip", this); + }; + GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) { + var cell = this.$findCellByRow(row); + if (cell) { + var element = cell.element; + if (element.childNodes.length > 2) { + return element.childNodes[2]; + } + } + }; + GutterTooltip.prototype.$findCellByRow = function (row) { + return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; }); + }; + GutterTooltip.prototype.hideTooltip = function () { + if (!this.isOpen) { + return; + } + this.$element.removeAttribute("aria-live"); + this.hide(); + if (this.visibleTooltipRow != undefined) { + var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow); + if (annotationNode) { + annotationNode.removeAttribute("aria-describedby"); + } + } + this.visibleTooltipRow = undefined; + this.editor._signal("hideGutterTooltip", this); + }; + GutterTooltip.annotationsToSummaryString = function (annotations) { + var e_1, _a; + var summary = []; + var annotationTypes = ["error", "security", "warning", "info", "hint"]; + try { + for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) { + var annotationType = annotationTypes_1_1.value; + if (!annotations[annotationType].length) + continue; + var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural; + summary.push("".concat(annotations[annotationType].length, " ").concat(label)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1); + } + finally { if (e_1) throw e_1.error; } + } + return summary.join(", "); + }; + return GutterTooltip; +}(Tooltip)); +GutterTooltip.$uid = 0; +exports.GutterTooltip = GutterTooltip; - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - if (r.strip !== undefined) { - // r is BN v4 instance - r.strip(); - } else { - // r is BN v5 instance - r._strip(); - } - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})( false || module, this); - - -/***/ }), - -/***/ "./src/annotation_widget.ts": -/*!**********************************!*\ - !*** ./src/annotation_widget.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ AnnontationWidget: () => (/* binding */ AnnontationWidget) -/* harmony export */ }); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var _style_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../style/bootstrap.min.css */ "./style/bootstrap.min.css"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } -function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } -function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - -var AnnontationWidget = /*#__PURE__*/function (_Widget) { - function AnnontationWidget(expId) { - var _this; - _classCallCheck(this, AnnontationWidget); - _this = _callSuper(this, AnnontationWidget, [{ - node: AnnontationWidget.createNode() - }]); - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); - _this.expId = expId; - _this.addClass('content'); - _this.title.label = "Annotation"; - _this.title.closable = false; - _this.title.caption = "Annontation"; - _this.setNode(); - _this.setAnnotationLevelToExperiment(); - return _this; - } - _inherits(AnnontationWidget, _Widget); - return _createClass(AnnontationWidget, [{ - key: "onBeforeHide", - value: function onBeforeHide(msg) { - this.setAnnotationLevelToExperiment(); - } - }, { - key: "setAnnotationLevelToExperiment", - value: function setAnnotationLevelToExperiment() { - this.trialId = ""; - this.fetchUrl = "/experiments/" + this.expId + "/extendedAnnotation"; - this.annotationLevel = "Experiment"; - this.anntTitle.text("Annotations for Experiment: " + this.expId); - this.setAnnotations(); - } - }, { - key: "setAnnotationLevelToTrial", - value: function setAnnotationLevelToTrial(trialId) { - this.trialId = trialId; - this.anntTitle.text("Annotations for Trial: " + this.trialId); - this.fetchUrl = "/trials/" + this.trialId + "/extendedAnnotation"; - this.annotationLevel = "Trial"; - this.setAnnotations(); - } - }, { - key: "activeAnnotation", - value: function activeAnnotation(trialId) { - var parentDock = this.parent; - parentDock.activateWidget(this); - this.setAnnotationLevelToTrial(trialId); - } - }, { - key: "fillAnnotations", - value: function () { - var _fillAnnotations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { - var _thiss, response, obj; - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - this.annotations = new Array(); - _thiss = this; - _context.next = 4; - return fetch(this.fetchUrl, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }); - case 4: - response = _context.sent; - if (!(response.status == 200)) { - _context.next = 13; - break; - } - _thiss.annotations = new Array(); - _context.next = 9; - return response.json(); - case 9: - obj = _context.sent; - obj.forEach(function (item) { - var annt = { - id: item.id, - provenanceType: item.provenanceType, - annotationFormat: item.annotationFormat, - description: item.description, - annotationLevel: item.annotationLevel, - relatedTrial: item.relatedTrial, - relatedExperiment: item.relatedExperiment - }; - _thiss.annotations.push(annt); - }); - _context.next = 14; - break; - case 13: - if (response.status != 404) { - this.showNode(_thiss.errorFeedback); - } - case 14: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function fillAnnotations() { - return _fillAnnotations.apply(this, arguments); - } - return fillAnnotations; - }() - }, { - key: "addAnntRow", - value: function addAnntRow(annt, tBody) { - var item = tBody.append("tr"); - item.append("th").attr("scope", "row").text(annt.id); - item.append("td").text(annt.description); - item.append("td").text(annt.annotationFormat); - item.append("td").text(annt.provenanceType); - var actions = item.append("td"); - var addMemberButton = actions.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Download Content"); - addMemberButton.on("click", function () { - window.open("/extendedAnnotation/" + annt.id + "/annotation"); - }); - } - }, { - key: "setAnnotations", - value: function () { - var _setAnnotations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { - var _thiss, header, tBody; - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - _thiss = this; - this.table.html(""); - header = this.table.append("thead").append("tr"); - header.append("th").attr("scope", "col").text("id"); - header.append("th").attr("scope", "col").text("description"); - header.append("th").attr("scope", "col").text("annotation Format"); - header.append("th").attr("scope", "col").text("provenance Type"); - header.append("th").attr("scope", "col").text("Actions"); - tBody = this.table.append("tbody"); - _context2.next = 11; - return this.fillAnnotations(); - case 11: - this.annotations.forEach(function (obj) { - _thiss.addAnntRow(obj, tBody); - }); - case 12: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function setAnnotations() { - return _setAnnotations.apply(this, arguments); - } - return setAnnotations; - }() - }, { - key: "addFormInput", - value: function addFormInput(form, fieldId, fieldLabel, fieldType) { - var grp = form.append("div").classed("form-group row", true); - grp.append("label").classed("col-sm-2 col-form-label", true).attr("for", fieldId).text(fieldLabel + ": "); - var divIn = grp.append("div").classed("col-sm-10", true); - var inp = divIn.append(fieldType); - inp.classed("form-control", true).attr("id", fieldId); - return inp; - } - }, { - key: "addFeedBackinfo", - value: function addFeedBackinfo(baseNode, cls, txt, desc) { - var _thiss = this; - var feedbackNode = baseNode.append("div").classed("alert", true).classed(cls, true).classed("alert-dismissible", true).classed("fade", true).classed("show", true); - feedbackNode.append("strong").text(txt); - feedbackNode.append("span").text(" " + desc).append("button").attr("type", "button").classed("close", true).attr("data-dismiss", "alert").text("x").on("click", function () { - _thiss.hideNode(feedbackNode); - }); - return feedbackNode; - } - }, { - key: "hideNode", - value: function hideNode(node) { - node.classed("d-none", true); - } - }, { - key: "showNode", - value: function showNode(node) { - node.classed("d-none", false); - } - }, { - key: "getValueFromSelect", - value: function getValueFromSelect(node, defaultVale) { - var option = defaultVale; - var select = node.node(); - if (select != null) { - option = select.options[select.selectedIndex].value; - } - return option; - ; - } - }, { - key: "createAddGroupForm", - value: function createAddGroupForm(projectsDiv) { - var _thiss = this; - var inputsDiv = projectsDiv.append("div"); - var descIn = this.addFormInput(inputsDiv, "descriptionAnntInput", "Description", "textarea"); - var annotationIn = this.addFormInput(inputsDiv, "annotationNameInput", "Annotation", "textarea"); - var annotationFormatIn = this.addFormInput(inputsDiv, "annotationFormatInput", "Annotation Format", "select"); - var provenanceTypeIn = this.addFormInput(inputsDiv, "provenanceTypeInput", "Provenance Type", "select"); - provenanceTypeIn.append("option").attr("value", "Data").text("Data"); - provenanceTypeIn.append("option").attr("value", "Interaction").text("Interaction"); - provenanceTypeIn.append("option").attr("value", "Insight").text("Insight"); - provenanceTypeIn.append("option").attr("value", "Other").text("Other"); - provenanceTypeIn.append("option").attr("value", "Rationale").text("Rationale"); - provenanceTypeIn.append("option").attr("value", "Visualization").text("Visualization"); - annotationFormatIn.append("option").attr("value", "plainText").text("plain text"); - annotationFormatIn.append("option").attr("value", "base64").text("base64"); - annotationFormatIn.append("option").attr("value", "JSON").text("JSON"); - annotationFormatIn.append("option").attr("value", "XML").text("XML"); - var confimButton = inputsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Confirm"); - var addAnntButton = projectsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Add Annotation"); - inputsDiv.classed("d-none", true); - confimButton.on("click", function () { - var annotationFormat = _thiss.getValueFromSelect(annotationFormatIn, "plainText"); - var provenanceType = _thiss.getValueFromSelect(provenanceTypeIn, "Other"); - _thiss.hideNode(_thiss.errorFeedback); - _thiss.hideNode(_thiss.successFeedback); - var newAnnotation = { - annotation: annotationIn.property("value"), - description: descIn.property("value"), - annotationFormat: annotationFormat, - annotationLevel: _thiss.annotationLevel, - provenanceType: provenanceType - }; - fetch(_thiss.fetchUrl, { - method: 'POST', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(newAnnotation) // body data type must match "Content-Type" header - }).then(function (response) { - if (response.status == 201) { - response.json().then(function (obj) { - _thiss.showNode(_thiss.successFeedback); - _thiss.hideNode(inputsDiv); - _thiss.showNode(addAnntButton); - _thiss.setAnnotations(); - }); - } else { - _thiss.showNode(_thiss.errorFeedback); - } - }); - }); - addAnntButton.on("click", function () { - _thiss.showNode(inputsDiv); - _thiss.hideNode(addAnntButton); - }); - } - }, { - key: "setNode", - value: function setNode() { - var content = this.d3node.append('div').classed('config-content', true); - var projectsDiv = content.append("div"); - this.anntTitle = projectsDiv.append("h2"); - this.errorFeedback = this.addFeedBackinfo(projectsDiv, "alert-danger", "Error!", "A problem has been occurred while submitting your data."); - this.successFeedback = this.addFeedBackinfo(projectsDiv, "alert-success", "Success!", ""); - this.hideNode(this.errorFeedback); - this.hideNode(this.successFeedback); - this.createAddGroupForm(projectsDiv); - this.table = projectsDiv.append("table").classed("table", true); - } - }], [{ - key: "createNode", - value: function createNode() { - var node = document.createElement('div'); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/config_widget.ts": -/*!******************************!*\ - !*** ./src/config_widget.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ ConfigWidget: () => (/* binding */ ConfigWidget) -/* harmony export */ }); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _graph_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./graph/base_activation_graph */ "./src/graph/base_activation_graph.ts"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - -var ConfigWidget = /*#__PURE__*/function (_Widget) { - function ConfigWidget() { - var _this; - _classCallCheck(this, ConfigWidget); - _this = _callSuper(this, ConfigWidget, [{ - node: ConfigWidget.createNode() - }]); - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); - //this.setFlag(Widget.Flag.DisallowLayout); - _this.addClass('content'); - _this.title.label = "Config"; - _this.title.closable = false; - _this.title.caption = "Configuration"; - return _this; - } - _inherits(ConfigWidget, _Widget); - return _createClass(ConfigWidget, [{ - key: "showTrial", - value: function showTrial() { - return this.d3node.select(".show-graph").property("checked"); - } - }, { - key: "showInfo", - value: function showInfo() { - return this.d3node.select(".show-info").property("checked"); - } - }, { - key: "graphType", - value: function graphType() { - return this.d3node.select(".graph-type").property("value"); - } - }, { - key: "useCache", - value: function useCache() { - return this.d3node.select(".use-cache").property("checked"); - } - }], [{ - key: "createNode", - value: function createNode() { - var node = document.createElement('div'); - var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(node); - var content = d3node.append('div').classed('config-content', true); - var historydiv = content.append("div"); - historydiv.append("h2").text("History Graph"); - var showGraph = historydiv.append("div").classed("graph-attr", true); - showGraph.append("input").attr("type", "checkbox").attr("name", "show_graph").attr("value", "on").attr("checked", true).classed("show-graph", true).attr("id", "config-show-graph"); - showGraph.append("label").attr("for", "config-show-graph").attr("title", "Open trial graph").text("Show trial graph on selection"); - var showInfo = historydiv.append("div").classed("graph-attr", true); - showInfo.append("input").attr("type", "checkbox").attr("name", "show_info").attr("value", "on").attr("checked", true).classed("show-info", true).attr("id", "config-show-info"); - showInfo.append("label").attr("for", "config-show-info").attr("title", "Open trial info").text("Show trial information on selection"); - var trialdiv = content.append("div"); - trialdiv.append("h2").text("Trial Graph"); - _graph_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget.graphTypeForm("config", trialdiv); - _graph_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget.useCacheForm("config", trialdiv); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/database_widget.ts": -/*!********************************!*\ - !*** ./src/database_widget.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ DatabaseTabWidget: () => (/* binding */ DatabaseTabWidget), -/* harmony export */ DatabaseWidget: () => (/* binding */ DatabaseWidget), -/* harmony export */ TableInfoWidget: () => (/* binding */ TableInfoWidget) -/* harmony export */ }); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/simulation.js"); -/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/link.js"); -/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/manyBody.js"); -/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/center.js"); -/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/collide.js"); -/* harmony import */ var d3_scale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-scale */ "../../node_modules/d3-scale/src/ordinal.js"); -/* harmony import */ var d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-scale-chromatic */ "../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js"); -/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-drag */ "../../node_modules/d3-drag/src/drag.js"); -/* harmony import */ var _query_widget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./query_widget */ "./src/query_widget.ts"); -function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } -function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } -function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } -function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } -function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } -function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - - - - - -var DatabaseTabWidget = /*#__PURE__*/function (_Widget) { - function DatabaseTabWidget() { - _classCallCheck(this, DatabaseTabWidget); - return _callSuper(this, DatabaseTabWidget, arguments); - } - _inherits(DatabaseTabWidget, _Widget); - return _createClass(DatabaseTabWidget); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); -var TableInfoWidget = /*#__PURE__*/function (_DatabaseTabWidget) { - function TableInfoWidget(tableName, details) { - var _this; - _classCallCheck(this, TableInfoWidget); - _this = _callSuper(this, TableInfoWidget, [{ - node: TableInfoWidget.createNode(tableName, details) - }]); - _this.title.label = tableName; - _this.title.caption = "Table: ".concat(tableName); - _this.title.closable = true; - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); - return _this; - } - _inherits(TableInfoWidget, _DatabaseTabWidget); - return _createClass(TableInfoWidget, null, [{ - key: "createNode", - value: function createNode(tableName, details) { - var node = document.createElement('div'); - node.style.display = 'flex'; - node.style.flexDirection = 'column'; - node.style.height = '100%'; - node.style.overflow = 'hidden'; - var header = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(node).append('div').style('flex-shrink', '0').style('padding', '1rem').style('border-bottom', '1px solid #eee').style('background', '#f8f9fa'); - header.append('h4').text(tableName).style('margin', '0').style('color', '#333'); - var contentContainer = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(node).append('div').style('flex', '1').style('overflow-y', 'auto').style('overflow-x', 'hidden').style('padding', '1rem'); - if (details.error) { - contentContainer.append('div').style('color', 'red').text('Failed to load table details.'); - } else { - contentContainer.append('h5').text('Columns').style('margin-top', '0').style('margin-bottom', '1rem').style('color', '#495057'); - var columnsTable = contentContainer.append('table').attr('class', 'table table-sm table-bordered').style('width', '100%').style('margin-bottom', '2rem'); - var columnsThead = columnsTable.append('thead').append('tr'); - for (var _i = 0, _arr = ['Name', 'Type', 'NOT NULL', 'Default', 'PK']; _i < _arr.length; _i++) { - var h = _arr[_i]; - columnsThead.append('th').text(h).style('font-size', '0.875rem'); - } - ; - var columnsTbody = columnsTable.append('tbody'); - details.columns.forEach(function (col) { - var row = columnsTbody.append('tr'); - row.append('td').text(col.name).style('font-size', '0.875rem'); - row.append('td').text(col.type).style('font-size', '0.875rem'); - row.append('td').text(col.notnull ? 'Yes' : '').style('font-size', '0.875rem'); - row.append('td').text(col["default"] === null ? '' : col["default"]).style('font-size', '0.875rem'); - row.append('td').text(col.pk ? 'Yes' : '').style('font-size', '0.875rem'); - }); - if (details.foreign_keys && details.foreign_keys.length > 0) { - contentContainer.append('h5').text('Foreign Keys').style('margin-top', '0').style('margin-bottom', '1rem').style('color', '#495057'); - var fkTable = contentContainer.append('table').attr('class', 'table table-sm table-bordered').style('width', '100%').style('margin-bottom', '2rem'); - var fkThead = fkTable.append('thead').append('tr'); - for (var _i2 = 0, _arr2 = ['Column', 'References Table', 'References Column']; _i2 < _arr2.length; _i2++) { - var _h = _arr2[_i2]; - fkThead.append('th').text(_h).style('font-size', '0.875rem'); - } - ; - var fkTbody = fkTable.append('tbody'); - var _iterator = _createForOfIteratorHelper(details.foreign_keys), - _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var fk = _step.value; - var row = fkTbody.append('tr'); - row.append('td').text(fk.from).style('font-size', '0.875rem'); - row.append('td').text(fk.table).style('font-size', '0.875rem'); - row.append('td').text(fk.to).style('font-size', '0.875rem'); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - ; - } - if (details.referenced_by && details.referenced_by.length > 0) { - contentContainer.append('h5').text('Referenced By').style('margin-top', '0').style('margin-bottom', '1rem').style('color', '#495057'); - var columnReferences = {}; - details.referenced_by.forEach(function (ref) { - if (!columnReferences[ref.referenced_column]) { - columnReferences[ref.referenced_column] = []; - } - columnReferences[ref.referenced_column].push(ref); - }); - var refTable = contentContainer.append('table').attr('class', 'table table-sm table-bordered').style('width', '100%').style('margin-bottom', '2rem'); - var refThead = refTable.append('thead').append('tr'); - for (var _i3 = 0, _arr3 = ['Table', 'Column', 'References Column']; _i3 < _arr3.length; _i3++) { - var _h2 = _arr3[_i3]; - refThead.append('th').text(_h2).style('font-size', '0.875rem'); - } - ; - var refTbody = refTable.append('tbody'); - var _iterator2 = _createForOfIteratorHelper(details.referenced_by), - _step2; - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var ref = _step2.value; - var _row = refTbody.append('tr'); - _row.append('td').text(ref.referencing_table).style('font-size', '0.875rem'); - _row.append('td').text(ref.referencing_column).style('font-size', '0.875rem'); - _row.append('td').text(ref.referenced_column).style('font-size', '0.875rem'); - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - ; - } - } - return node; - } - }]); -}(DatabaseTabWidget); -var DatabaseWidget = /*#__PURE__*/function (_Widget2) { - function DatabaseWidget(panel) { - var _this2; - _classCallCheck(this, DatabaseWidget); - _this2 = _callSuper(this, DatabaseWidget); - _defineProperty(_this2, "graphData", { - nodes: [], - links: [] - }); - _defineProperty(_this2, "dataLoaded", false); - _defineProperty(_this2, "selectedNodes", new Set()); - _this2.panel = panel; - _this2.title.label = 'Database'; - _this2.title.caption = 'Database'; - var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this2.node); - var container = d3node.append('div').style('display', 'flex').style('flex-direction', 'column').style('height', '100%').style('padding', '1rem'); - var headerContainer = container.append('div').style('display', 'flex').style('justify-content', 'space-between').style('align-items', 'center').style('margin-bottom', '1rem'); - headerContainer.append('h4').text('Database').style('margin', '0').style('color', '#333'); - var controlsContainer = headerContainer.append('div').style('display', 'flex').style('gap', '0.5rem').style('align-items', 'center'); - var tablesDropdown = controlsContainer.append('div').style('position', 'relative').style('display', 'inline-block'); - var dropdownButton = tablesDropdown.append('button').classed('btn btn-outline-primary dropdown-toggle', true).attr('type', 'button').attr('data-toggle', 'dropdown').attr('aria-haspopup', 'true').attr('aria-expanded', 'false').html('Tables ').style('min-width', '120px'); - tablesDropdown.append('div').attr('id', 'tables-dropdown').classed('dropdown-menu', true).style('position', 'absolute').style('top', '100%').style('left', '0').style('z-index', '1000').style('display', 'none').style('min-width', '250px').style('max-height', '300px').style('overflow-y', 'auto').style('background', '#fff').style('border', '1px solid #ccc').style('border-radius', '4px').style('box-shadow', '0 2px 10px rgba(0,0,0,0.1)').style('padding', '0.5rem'); - controlsContainer.append('button').attr('id', 'new-query-btn').classed('btn btn-primary', true).on('click', function () { - return _this2.openNewQueryTab(); - }).html(' New Query'); - controlsContainer.append('button').attr('id', 'clear-selection-btn').classed('btn btn-outline-secondary', true).style('display', 'none').on('click', function () { - return _this2.clearSelection(); - }).html(' Clear Selection'); - container.append('div').attr('id', 'graph-container').style('flex', '1').style('border', '1px solid #ddd').style('border-radius', '4px').style('background', '#f9f9f9').style('position', 'relative'); - _this2.color = (0,d3_scale__WEBPACK_IMPORTED_MODULE_3__["default"])(d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_4__["default"]); - dropdownButton.on('click', function () { - var dropdown = document.getElementById('tables-dropdown'); - if (dropdown) { - var isVisible = dropdown.style.display === 'block'; - dropdown.style.display = isVisible ? 'none' : 'block'; - dropdownButton.attr('aria-expanded', !isVisible); - } - }); - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(document).on('click', function (event) { - var dropdown = document.getElementById('tables-dropdown'); - var button = dropdownButton.node(); - if (dropdown && button && !button.contains(event.target) && !dropdown.contains(event.target)) { - dropdown.style.display = 'none'; - dropdownButton.attr('aria-expanded', 'false'); - } - }); - _this2.showLoadingMessage(); - return _this2; - } - _inherits(DatabaseWidget, _Widget2); - return _createClass(DatabaseWidget, [{ - key: "onAfterShow", - value: function onAfterShow(msg) { - this.fetchAndRenderTables(); - } - }, { - key: "showLoadingMessage", - value: function showLoadingMessage() { - var container = this.node.querySelector('#graph-container'); - if (!container) return; - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).selectAll('*').remove(); - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).append('div').style('display', 'flex').style('justify-content', 'center').style('align-items', 'center').style('height', '100%').style('flex-direction', 'column').style('color', '#666').style('font-size', '16px').html("\n \n
Click on the Database tab to load database structure
\n "); - } - }, { - key: "fetchAndRenderTables", - value: function () { - var _fetchAndRenderTables = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { - var dropdownMenu, response, data; - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - dropdownMenu = this.node.querySelector('#tables-dropdown'); - if (dropdownMenu) { - _context.next = 4; - break; - } - console.error('Tables dropdown element not found'); - return _context.abrupt("return"); - case 4: - this.showLoadingState(); - this.clearSelection(); - _context.prev = 6; - _context.next = 9; - return fetch('/db/tables'); - case 9: - response = _context.sent; - if (response.ok) { - _context.next = 12; - break; - } - throw new Error('Failed to fetch table list'); - case 12: - _context.next = 14; - return response.json(); - case 14: - data = _context.sent; - this.renderTableList(data.tables); - this.buildGraphDataFromTablesResponse(data); - this.initializeGraph(); - this.renderGraph(); - this.dataLoaded = true; - _context.next = 26; - break; - case 22: - _context.prev = 22; - _context.t0 = _context["catch"](6); - console.error('Error fetching tables:', _context.t0); - this.showErrorMessage('Failed to load database structure'); - case 26: - case "end": - return _context.stop(); - } - }, _callee, this, [[6, 22]]); - })); - function fetchAndRenderTables() { - return _fetchAndRenderTables.apply(this, arguments); - } - return fetchAndRenderTables; - }() - }, { - key: "showLoadingState", - value: function showLoadingState() { - var container = this.node.querySelector('#graph-container'); - if (!container) return; - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).selectAll('*').remove(); - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).append('div').style('display', 'flex').style('justify-content', 'center').style('align-items', 'center').style('height', '100%').style('flex-direction', 'column').style('color', '#666').style('font-size', '16px').html("\n \n
Loading database structure...
\n "); - } - }, { - key: "showErrorMessage", - value: function showErrorMessage(message) { - var container = this.node.querySelector('#graph-container'); - if (!container) return; - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).selectAll('*').remove(); - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).append('div').style('display', 'flex').style('justify-content', 'center').style('align-items', 'center').style('height', '100%').style('flex-direction', 'column').style('color', '#dc3545').style('font-size', '16px').html("\n \n
".concat(message, "
\n ")); - } - }, { - key: "buildGraphDataFromTablesResponse", - value: function buildGraphDataFromTablesResponse(data) { - var _this3 = this; - var tables = data.tables, - foreign_keys = data.foreign_keys; - this.graphData.nodes = tables.map(function (tableName) { - return { - id: tableName, - name: tableName - }; - }); - this.graphData.links = []; - if (foreign_keys) { - Object.keys(foreign_keys).forEach(function (sourceTable) { - var tableForeignKeys = foreign_keys[sourceTable]; - tableForeignKeys.forEach(function (fk) { - var existingLink = _this3.graphData.links.find(function (link) { - return link.source === sourceTable && link.target === fk.table; - }); - if (!existingLink) { - _this3.graphData.links.push({ - source: sourceTable, - target: fk.table, - sourceColumn: fk.from, - targetColumn: fk.to - }); - } - }); - }); - } - } - }, { - key: "createArrowMarker", - value: function createArrowMarker() { - this.svg.append('defs').append('marker').attr('id', 'arrowhead').attr('viewBox', '-0 -3 6 6').attr('refX', 25).attr('refY', 0).attr('orient', 'auto').attr('markerWidth', 5).attr('markerHeight', 5).attr('xoverflow', 'visible').append('svg:path').attr('d', 'M 0,-3 L 6 ,0 L 0,3').attr('fill', '#999').style('stroke', 'none'); - } - }, { - key: "createSimulation", - value: function createSimulation(width, height) { - var isInitial = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - if (this.simulation) { - this.simulation.stop(); - } - var linkDistance = isInitial ? 200 : 250; - var chargeStrength = isInitial ? -200 : -400; - var chargeDistanceMax = isInitial ? 800 : 400; - var collisionRadius = isInitial ? 120 : 70; - this.simulation = (0,d3_force__WEBPACK_IMPORTED_MODULE_5__["default"])(this.graphData.nodes).force('link', (0,d3_force__WEBPACK_IMPORTED_MODULE_6__["default"])(this.graphData.links).id(function (d) { - return d.id; - }).distance(linkDistance)).force('charge', (0,d3_force__WEBPACK_IMPORTED_MODULE_7__["default"])().strength(chargeStrength).distanceMax(chargeDistanceMax)).force('center', (0,d3_force__WEBPACK_IMPORTED_MODULE_8__["default"])(width / 2, height / 2)).force('collision', (0,d3_force__WEBPACK_IMPORTED_MODULE_9__["default"])().radius(collisionRadius)); - if (!isInitial) { - this.simulation.alphaDecay(0.1).velocityDecay(0.4); - } - } - }, { - key: "initializeGraph", - value: function initializeGraph() { - var container = this.node.querySelector('#graph-container'); - if (!container) return; - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).selectAll('*').remove(); - var rect = container.getBoundingClientRect(); - var width = Math.max(400, rect.width || 800); - var height = Math.max(300, rect.height || 600); - this.svg = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).append('svg').attr('width', width).attr('height', height).style('background', '#f9f9f9'); - this.createArrowMarker(); - if (this.graphData.nodes.length > 0) { - this.createSimulation(width, height, true); - } - } - }, { - key: "renderGraph", - value: function renderGraph() { - var _this4 = this; - if (!this.svg) return; - this.svg.selectAll('*').remove(); - this.createArrowMarker(); - if (this.graphData.nodes.length === 0) { - this.svg.append('text').attr('x', '50%').attr('y', '50%').attr('text-anchor', 'middle').attr('dominant-baseline', 'middle').style('font-size', '16px').style('fill', '#666').text('No database relationships found'); - return; - } - var svgNode = this.svg.node(); - var width = svgNode ? svgNode.getBoundingClientRect().width : 800; - var height = svgNode ? svgNode.getBoundingClientRect().height : 600; - var centerX = width / 2; - var centerY = height / 2; - var nodesCount = this.graphData.nodes.length; - var radius = Math.min(width, height) / 2 - 50; - this.graphData.nodes.forEach(function (node, index) { - var angle = 2 * Math.PI * index / nodesCount; - node.x = centerX + radius * Math.sin(angle); - node.y = centerY + radius * Math.cos(angle); - }); - var link = this.svg.append('g').selectAll('line').data(this.graphData.links).enter().append('line').attr('stroke', '#999').attr('stroke-opacity', 0.6).attr('stroke-width', 2).attr('marker-end', 'url(#arrowhead)'); - var node = this.svg.append('g').selectAll('g').data(this.graphData.nodes).enter().append('g').attr('class', 'node').call(function (selection) { - selection.on('click', function (event, d) { - return _this4.handleNodeClick(event, d); - }); - }); - node.append('circle').attr('r', 35).attr('fill', function (d) { - return _this4.color(d.id); - }).attr('stroke', '#fff').attr('stroke-width', 3); - node.append('text').text(function (d) { - return d.name; - }).attr('text-anchor', 'middle').attr('dy', '.35em').style('font-size', '12px').style('font-weight', 'bold').style('fill', '#fff').style('text-shadow', '1px 1px 2px rgba(0,0,0,0.8), -1px -1px 2px rgba(0,0,0,0.8), 1px -1px 2px rgba(0,0,0,0.8), -1px 1px 2px rgba(0,0,0,0.8)').style('pointer-events', 'none'); - node.append('title').text(function (d) { - return "Table: ".concat(d.name, "\nClick to view details\nCtrl+Click to select (orange margin)"); - }); - this.svg.on('click', function (event) { - if (event.target === _this4.svg.node()) { - _this4.clearSelection(); - } - }); - this.createSimulation(width, height, false); - this.simulation.on('tick', function () { - link.attr('x1', function (d) { - var x = d.source.x; - return _this4.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0; - }).attr('y1', function (d) { - var y = d.source.y; - return _this4.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0; - }).attr('x2', function (d) { - var x = d.target.x; - return _this4.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0; - }).attr('y2', function (d) { - var y = d.target.y; - return _this4.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0; - }); - node.attr('transform', function (d) { - var x = d.x; - var y = d.y; - if (!_this4.isValidNumber(x) || !_this4.isValidNumber(y)) { - d.x = width / 2; - d.y = height / 2; - return "translate(".concat(width / 2, ",").concat(height / 2, ")"); - } - var boundedX = Math.max(50, Math.min(width - 50, x)); - var boundedY = Math.max(50, Math.min(height - 50, y)); - if (boundedX !== x) { - d.x = boundedX; - } - if (boundedY !== y) { - d.y = boundedY; - } - return "translate(".concat(boundedX, ",").concat(boundedY, ")"); - }); - }); - node.call(function (selection) { - var widget = _this4; - selection.on('mouseover', function (event, d) { - var isSelected = widget.selectedNodes.has(d.id); - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(this).select('circle').attr('stroke-width', isSelected ? 6 : 4).attr('stroke', isSelected ? '#ff8c00' : '#333'); - link.attr('stroke-opacity', function (linkData) { - var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; - var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; - return sourceId === d.id || targetId === d.id ? 1 : 0.1; - }).attr('stroke-width', function (linkData) { - var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; - var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; - return sourceId === d.id || targetId === d.id ? 3 : 2; - }).attr('stroke', function (linkData) { - var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; - var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; - return sourceId === d.id || targetId === d.id ? '#87CEEB' : '#999'; - }); - node.select('circle').attr('stroke-width', function (nodeData) { - var isConnected = link.data().some(function (linkData) { - var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; - var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; - return sourceId === d.id && targetId === nodeData.id || targetId === d.id && sourceId === nodeData.id; - }); - var isNodeSelected = widget.selectedNodes.has(nodeData.id); - return isNodeSelected ? 6 : isConnected ? 4 : 3; - }).attr('stroke', function (nodeData) { - var isConnected = link.data().some(function (linkData) { - var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; - var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; - return sourceId === d.id && targetId === nodeData.id || targetId === d.id && sourceId === nodeData.id; - }); - var isNodeSelected = widget.selectedNodes.has(nodeData.id); - return isConnected ? '#87CEEB' : isNodeSelected ? '#ff8c00' : '#fff'; - }); - }).on('mouseout', function () { - widget.updateSelection(); - link.attr('stroke-opacity', 0.6).attr('stroke-width', 2).attr('stroke', '#999'); - }); - }); - node.call((0,d3_drag__WEBPACK_IMPORTED_MODULE_10__["default"])().on('start', function (event, d) { - if (!event.active) _this4.simulation.alphaTarget(0.3).restart(); - d.fx = _this4.isValidNumber(d.x) ? d.x : width / 2; - d.fy = _this4.isValidNumber(d.y) ? d.y : height / 2; - }).on('drag', function (event, d) { - var boundedX = Math.max(50, Math.min(width - 50, event.x)); - var boundedY = Math.max(50, Math.min(height - 50, event.y)); - d.fx = boundedX; - d.fy = boundedY; - }).on('end', function (event, d) { - if (!event.active) _this4.simulation.alphaTarget(0); - d.fx = null; - d.fy = null; - })); - } - }, { - key: "isValidNumber", - value: function isValidNumber(value) { - return typeof value === 'number' && !isNaN(value) && isFinite(value); - } - }, { - key: "toggleSelection", - value: function toggleSelection(nodeId) { - if (this.selectedNodes.has(nodeId)) { - this.selectedNodes["delete"](nodeId); - } else { - this.selectedNodes.add(nodeId); - } - this.updateSelection(); - } - }, { - key: "clearSelection", - value: function clearSelection() { - this.selectedNodes.clear(); - this.updateSelection(); - } - }, { - key: "updateSelection", - value: function updateSelection() { - if (!this.svg) return; - var widget = this; - this.svg.selectAll('.node').each(function (d) { - var nodeElement = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(this); - var isSelected = widget.selectedNodes.has(d.id); - nodeElement.select('circle').attr('stroke', isSelected ? '#ff8c00' : '#fff').attr('stroke-width', isSelected ? 6 : 3).attr('stroke-dasharray', 'none'); - }); - var newQueryBtn = this.node.querySelector('#new-query-btn'); - var clearBtn = this.node.querySelector('#clear-selection-btn'); - if (!newQueryBtn || !clearBtn) return; - if (this.selectedNodes.size > 0) { - newQueryBtn.innerHTML = " New Query ".concat(this.selectedNodes.size, ""); - clearBtn.style.display = 'inline-block'; - } else { - newQueryBtn.innerHTML = ' New Query'; - clearBtn.style.display = 'none'; - } - } - }, { - key: "handleNodeClick", - value: function handleNodeClick(event, d) { - if (event.ctrlKey || event.metaKey) { - event.preventDefault(); - event.stopPropagation(); - this.toggleSelection(d.id); - } else { - this.openTableInfoTab(d.name); - } - } - }, { - key: "getSelectedTables", - value: function getSelectedTables() { - return Array.from(this.selectedNodes); - } - }, { - key: "selectTables", - value: function selectTables(tableNames) { - var _this5 = this; - tableNames.forEach(function (name) { - _this5.selectedNodes.add(name); - }); - this.updateSelection(); - } - }, { - key: "renderTableList", - value: function renderTableList(tables) { - var _this6 = this; - var dropdownMenu = this.node.querySelector('#tables-dropdown'); - if (!dropdownMenu) { - console.error('Tables dropdown element not found in renderTableList'); - return; - } - var d3menu = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(dropdownMenu); - d3menu.html(''); - if (!tables || tables.length === 0) { - d3menu.append('div').text('No tables found.').style('padding', '0.5rem').style('color', '#666').style('font-style', 'italic'); - return; - } - d3menu.append('div').text("Tables (".concat(tables.length, ")")).style('font-weight', 'bold').style('padding', '0.5rem').style('border-bottom', '1px solid #eee').style('margin-bottom', '0.5rem'); - tables.forEach(function (tableName) { - var item = d3menu.append('div').style('padding', '0.5rem').style('cursor', 'pointer').style('border-radius', '3px').style('margin-bottom', '0.25rem').style('transition', 'background-color 0.2s').on('mouseover', function () { - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(this).style('background-color', '#f8f9fa'); - }).on('mouseout', function () { - (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(this).style('background-color', 'transparent'); - }).on('click', function () { - _this6.openTableInfoTab(tableName); - dropdownMenu.style.display = 'none'; - var dropdownButton = _this6.node.querySelector('[data-toggle="dropdown"]'); - if (dropdownButton) { - dropdownButton.setAttribute('aria-expanded', 'false'); - } - }); - item.append('i').classed('fa fa-table', true).style('margin-right', '0.5rem').style('color', '#007bff'); - item.append('span').text(tableName).style('font-size', '14px'); - }); - } - }, { - key: "openTableInfoTab", - value: function () { - var _openTableInfoTab = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(tableName) { - var widget, response, details, refWidget, _iterator3, _step3, w; - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - widget = null; - _context2.prev = 1; - _context2.next = 4; - return fetch("/db/table/".concat(encodeURIComponent(tableName))); - case 4: - response = _context2.sent; - if (response.ok) { - _context2.next = 7; - break; - } - throw new Error('Failed to fetch table details'); - case 7: - _context2.next = 9; - return response.json(); - case 9: - details = _context2.sent; - widget = new TableInfoWidget(tableName, details); - _context2.next = 18; - break; - case 13: - _context2.prev = 13; - _context2.t0 = _context2["catch"](1); - widget = new DatabaseTabWidget(); - widget.title.label = tableName; - widget.node.innerHTML = "
Error loading table info: ".concat(_context2.t0.message, "
"); - case 18: - refWidget = null; - if (this.panel.widgets) { - _iterator3 = _createForOfIteratorHelper(this.panel.widgets()); - try { - for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { - w = _step3.value; - if (w instanceof TableInfoWidget || w instanceof _query_widget__WEBPACK_IMPORTED_MODULE_1__.QueryResultWidget) { - refWidget = w; - } - } - } catch (err) { - _iterator3.e(err); - } finally { - _iterator3.f(); - } - } - if (refWidget) { - this.panel.addInfoWidget(widget, { - ref: refWidget, - mode: 'tab-after' - }); - } else { - this.panel.addInfoWidget(widget, { - ref: this, - mode: 'split-bottom' - }); - } - this.panel.activateWidget(widget); - case 22: - case "end": - return _context2.stop(); - } - }, _callee2, this, [[1, 13]]); - })); - function openTableInfoTab(_x) { - return _openTableInfoTab.apply(this, arguments); - } - return openTableInfoTab; - }() - }, { - key: "onResize", - value: function onResize(msg) { - if (this.graphData.nodes.length > 0) { - this.initializeGraph(); - this.renderGraph(); - } - } - }, { - key: "getInitialQuery", - value: function getInitialQuery(selectedTables) { - if (selectedTables.length === 0) return ''; - if (selectedTables.length === 1) { - return "SELECT * FROM \"".concat(selectedTables[0], "\" LIMIT 100;"); - } - var initialQuery = "SELECT *\nFROM \"".concat(selectedTables[0], "\"\n"); - var usedTables = new Set([selectedTables[0]]); - var joins = []; - for (var i = 1; i < selectedTables.length; i++) { - var currentTable = selectedTables[i]; - var joinFound = false; - var _iterator4 = _createForOfIteratorHelper(this.graphData.links), - _step4; - try { - for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { - var link = _step4.value; - console.log(link.source, link.target); - var sourceTable = link.source.id; - var targetTable = link.target.id; - if (sourceTable === currentTable && usedTables.has(targetTable)) { - joins.push("JOIN \"".concat(currentTable, "\" ON \"").concat(targetTable, "\".").concat(link.targetColumn, " = \"").concat(currentTable, "\".").concat(link.sourceColumn)); - usedTables.add(currentTable); - joinFound = true; - break; - } - if (targetTable === currentTable && usedTables.has(sourceTable)) { - joins.push("JOIN \"".concat(currentTable, "\" ON \"").concat(sourceTable, "\".").concat(link.sourceColumn, " = \"").concat(currentTable, "\".").concat(link.targetColumn)); - usedTables.add(currentTable); - joinFound = true; - break; - } - } - } catch (err) { - _iterator4.e(err); - } finally { - _iterator4.f(); - } - if (!joinFound) { - joins.push("CROSS JOIN \"".concat(currentTable, "\"")); - usedTables.add(currentTable); - } - } - return initialQuery + joins.join('\n') + '\nLIMIT 100;'; - } - }, { - key: "openNewQueryTab", - value: function () { - var _openNewQueryTab = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() { - var selectedTables, tableNames, initialQuery, columnNames, _ref2, columnPromises, columnArrays, queryWidget; - return _regeneratorRuntime().wrap(function _callee4$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - selectedTables = this.getSelectedTables(); - tableNames = this.graphData.nodes.map(function (n) { - return n.name; - }); - initialQuery = this.getInitialQuery(selectedTables); - columnNames = []; - if (!(selectedTables.length > 0)) { - _context4.next = 16; - break; - } - _context4.prev = 5; - columnPromises = selectedTables.map(/*#__PURE__*/function () { - var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(tableName) { - var response, details; - return _regeneratorRuntime().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - _context3.next = 2; - return fetch("/db/table/".concat(encodeURIComponent(tableName))); - case 2: - response = _context3.sent; - if (!response.ok) { - _context3.next = 8; - break; - } - _context3.next = 6; - return response.json(); - case 6: - details = _context3.sent; - return _context3.abrupt("return", details.columns ? details.columns.map(function (col) { - return col.name; - }) : []); - case 8: - return _context3.abrupt("return", []); - case 9: - case "end": - return _context3.stop(); - } - }, _callee3); - })); - return function (_x2) { - return _ref.apply(this, arguments); - }; - }()); - _context4.next = 9; - return Promise.all(columnPromises); - case 9: - columnArrays = _context4.sent; - columnNames = (_ref2 = []).concat.apply(_ref2, _toConsumableArray(columnArrays)); - _context4.next = 16; - break; - case 13: - _context4.prev = 13; - _context4.t0 = _context4["catch"](5); - console.warn('Failed to fetch column names:', _context4.t0); - case 16: - queryWidget = new _query_widget__WEBPACK_IMPORTED_MODULE_1__.QueryWidget(this.panel, tableNames, columnNames, initialQuery); - this.panel.addInfoWidget(queryWidget, { - ref: this, - mode: 'tab-after' - }); - this.panel.activateWidget(queryWidget); - this.clearSelection(); - case 20: - case "end": - return _context4.stop(); - } - }, _callee4, this, [[5, 13]]); - })); - function openNewQueryTab() { - return _openNewQueryTab.apply(this, arguments); - } - return openNewQueryTab; - }() - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/graph/base_activation_graph.ts": -/*!********************************************!*\ - !*** ./src/graph/base_activation_graph.ts ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ BaseActivationGraphWidget: () => (/* binding */ BaseActivationGraphWidget) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var _noworkflow_trial__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noworkflow/trial */ "../trial/lib/index.js"); -/* harmony import */ var _noworkflow_trial__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_trial__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - - -var BaseActivationGraphWidget = /*#__PURE__*/function (_Widget) { - function BaseActivationGraphWidget() { - _classCallCheck(this, BaseActivationGraphWidget); - return _callSuper(this, BaseActivationGraphWidget, arguments); - } - _inherits(BaseActivationGraphWidget, _Widget); - return _createClass(BaseActivationGraphWidget, [{ - key: "setGraph", - value: function setGraph(data) { - var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var showDiffFunction = arguments.length > 2 ? arguments[2] : undefined; - var nowVisPanel = arguments.length > 3 ? arguments[3] : undefined; - var sub = this.node.getElementsByClassName("sub-content")[0]; - sub.innerHTML = ""; - this.graph = new _noworkflow_trial__WEBPACK_IMPORTED_MODULE_1__.TrialGraph(this.cls, sub, config, showDiffFunction, nowVisPanel); - this.graph.load(data, this.t1, this.t2); - } - }, { - key: "graphDefinition", - value: function graphDefinition() { - var _this = this; - var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; - var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var genDataflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var data = arguments.length > 3 ? arguments[3] : undefined; - return { - width: this.node.getBoundingClientRect().width - 24, - height: this.node.getBoundingClientRect().height - 24, - customForm: function customForm(graph, form) { - // Toggle Tooltips - var selectorDiv = _this.d3node.select(".trial-content .graphselector"); - var typeOptions = selectorDiv.select(".graph-type"); - typeOptions.property("value", selectedGraph); - var useCacheDiv = selectorDiv.select(".use-cache"); - useCacheDiv.property("checked", useCache); - var selectorToggle = form.append("input").attr("id", "trial-" + graph.graphId + "-toolbar-selector-check").attr("type", "checkbox").attr("name", "trial-toolbar-selector-check").attr("value", "show").property("checked", selectorDiv.classed('visible')).on("change", function () { - var visible = selectorToggle.property("checked"); - selectorToggleI.classed('fa-circle-o', visible).classed('fa-circle', !visible); - selectorDiv.classed('visible', visible).classed('show-toolbar', visible).classed('hide-toolbar', !visible); - }); - var selectorLabel = form.append("label").attr("for", "trial-" + graph.graphId + "-toolbar-selector-check"); - var optionsNode = typeOptions.node(); - selectorLabel.append("span").classed("toggle-label", true).text(optionsNode.options[optionsNode.selectedIndex].text); - var selectorToggleI = selectorLabel.append("i").classed('fa', true).classed("fa-circle", !selectorDiv.classed('visible')).classed("fa-circle-o", selectorDiv.classed('visible')); - }, - customLoadTooltip: function customLoadTooltip(g, div, text, trialid, aid) { - var url = "/trials/" + trialid + "/activations/" + aid + ".json"; - function createResponse(activationId, div2) { - return function (data) { - g.activationStorage[activationId] = data; - g.updateTooltipDiv(activationId, div2); - }; - } - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__.json)(text, div, url, createResponse(aid, div)); - }, - genDataflow: genDataflow, - queryTooltip: true - }; - } - }, { - key: "configureGraph", - value: function configureGraph() { - var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; - var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var genDataflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var data = arguments.length > 3 ? arguments[3] : undefined; - var showDiffFunction = arguments.length > 4 ? arguments[4] : undefined; - var nowVisPanel = arguments.length > 5 ? arguments[5] : undefined; - this.setGraph(data, this.graphDefinition(selectedGraph, useCache, genDataflow, data), showDiffFunction, nowVisPanel); - } - }, { - key: "onResize", - value: function onResize(msg) { - if (this.graph) { - this.graph.config.width = this.node.getBoundingClientRect().width - 24; - this.graph.config.height = this.node.getBoundingClientRect().height - 24; - this.graph.updateWindow(); - } - } - }], [{ - key: "graphTypeForm", - value: function graphTypeForm(name, selectorDiv) { - var graphType = selectorDiv.append("div").classed("graph-attr", true); - graphType.append("label").attr("for", name + "-graphtype").attr("title", "Select the graph type").text("Graph Type:"); - var typeOptions = graphType.append("select").attr("id", name + "-graphtype").classed("graph-type", true).classed("select-style", true); - typeOptions.append("option").attr("value", "tree").attr("data-description", "Activation tree. Edges represent order of execution").text("Activation Tree"); - typeOptions.append("option").attr("value", "no_match").attr("data-description", "Activation tree presented as a Graph").text("Activation No Match"); - typeOptions.append("option").attr("value", "exact_match").attr("data-description", "Calls have counting independent from caller activations").text("Activation Exact Match"); - typeOptions.append("option").attr("value", "namespace_match").attr("data-description", "Calls are combined and a function may have more than one call workflow").text("Activation Namespace Match"); - typeOptions.append("option").attr("value", "definition_tree").attr("data-description", "Definition tree. Edges represent order of script definition").text("Definition Tree"); - typeOptions.property("value", "namespace_match"); - } - }, { - key: "useCacheForm", - value: function useCacheForm(name, selectorDiv) { - var useCache = selectorDiv.append("div").classed("graph-attr", true); - useCache.append("input").attr("type", "checkbox").attr("name", "use_cache").attr("value", "on").attr("checked", true).classed("use-cache", true).attr("id", name + "-use-cache"); - useCache.append("label").attr("for", name + "-use-cache").attr("title", "Select the graph type").text("Use Cache"); - } - }, { - key: "createNode", - value: function createNode(name) { - var fn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (parent) { - return null; - }; - var node = document.createElement('div'); - var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__["default"])(node); - var content = d3node.append('div').classed('trial-content', true); - var selectorDiv = content.append("div").classed("graphselector", true).classed("hide-toolbar", true); - BaseActivationGraphWidget.graphTypeForm(name, selectorDiv); - fn(name, selectorDiv); - BaseActivationGraphWidget.useCacheForm(name, selectorDiv); - var selectorReload = selectorDiv.append("a").attr("href", "#").classed("link-button reload-button", true); - selectorReload.append('i').classed("fa fa-refresh", true); - selectorReload.append('span').text('Reload'); - content.append('div').classed('sub-content', true); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/graph/diff_graph.ts": -/*!*********************************!*\ - !*** ./src/graph/diff_graph.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ DiffGraphWidget: () => (/* binding */ DiffGraphWidget) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _base_activation_graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base_activation_graph */ "./src/graph/base_activation_graph.ts"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - -var DiffGraphWidget = /*#__PURE__*/function (_BaseActivationGraphW) { - function DiffGraphWidget(name, cls, t1, t2, showDiffFunction, nowVisPanel) { - var _this; - _classCallCheck(this, DiffGraphWidget); - _this = _callSuper(this, DiffGraphWidget, [{ - node: _base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget.createNode(cls, DiffGraphWidget.createForm) - }]); - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); - _this.d3node.select('.reload-button').on("click", function () { - _this.load(_this.d3node.select(".graph-type").property("value"), _this.d3node.select(".use-cache").property("checked")); - }); - _this.addClass('content'); - _this.addClass('diff-widget'); - _this.title.label = name; - _this.title.closable = true; - _this.title.caption = "".concat(name, " Graph"); - _this.name = name; - _this.cls = cls; - _this.t1 = t1; - _this.t2 = t2; - _this.showDiffFunction = showDiffFunction; - _this.nowVisPanel = nowVisPanel; - return _this; - } - _inherits(DiffGraphWidget, _BaseActivationGraphW); - return _createClass(DiffGraphWidget, [{ - key: "load", - value: function load() { - var _this2 = this; - var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; - var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var sub = this.node.getElementsByClassName("sub-content")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__.json)("Diff", sub, DiffGraphWidget.url(this.t1, this.t2, selectedGraph, useCache), function (data) { - var selectorDiv = _this2.d3node.select(".trial-content .graphselector"); - var useCacheDiv = selectorDiv.select(".use-cache"); - useCacheDiv.property("checked", useCache); - _this2.configureGraph(selectedGraph, useCache, false, data, _this2.showDiffFunction, _this2.nowVisPanel); - }); - } - }], [{ - key: "url", - value: function url(trial1, trial2, selectedGraph, useCache) { - var cache = useCache ? "1" : "0"; - return "diff/" + trial1 + "/" + trial2 + "/" + selectedGraph + "-" + cache + ".json"; - } - }, { - key: "createForm", - value: function createForm(name, parent) {} - }]); -}(_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget); - -/***/ }), - -/***/ "./src/graph/function_diff.ts": -/*!************************************!*\ - !*** ./src/graph/function_diff.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ functionDiffWindow: () => (/* binding */ functionDiffWindow) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -var _templateObject; -function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); } - - -function functionDiffWindow(functionDiffJson, windowIdAndTitle, parentDock) { - if (document.getElementById(windowIdAndTitle)) { - alert("This function diff is already open!"); - return; - } - var functionDiffWidget = new _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget(); - functionDiffWidget.title.label = windowIdAndTitle; - functionDiffWidget.id = windowIdAndTitle; - functionDiffWidget.title.closable = true; - parentDock.addGraphWidget(functionDiffWidget); - parentDock.activateWidget(functionDiffWidget); - var functionDiffWindow = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(document.getElementById(windowIdAndTitle)); - functionDiffWindow.style("overflow-y", "auto").style("padding", "2em 2em 2em 1em"); - function addHideShowButton(elementToAppendTo, buttonId, spanId) { - buttonId += "-" + crypto.randomUUID(); - return elementToAppendTo.append("span").append("i").attr("id", buttonId).classed("fa fa-compress", true).on("click", function () { - var spanToHideOrShow = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(document.getElementById(spanId)); - var thisButton = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(document.getElementById(buttonId)); - if (spanToHideOrShow.classed("d-none")) { - spanToHideOrShow.classed("d-none", false); - thisButton.classed("fa fa-expand", false); - thisButton.classed("fa fa-compress", true); - } else { - spanToHideOrShow.classed("d-none", true); - thisButton.classed("fa fa-compress", false); - thisButton.classed("fa fa-expand", true); - } - }); - } - function filterVariablesArray(array, opVariables) { - var defaultVariables = ["name", "attribute", "access"]; - if (opVariables) defaultVariables = defaultVariables.concat(["add", "sub", "mult", "div", "mod", "pow", "floordiv", - // arithmetic operators - "add_assign", "sub_assign", "mult_assign", "div_assign", - // assignment operators 1 - "mod_assign", "pow_assign", "floordiv_assign", - // assignment operators 2 - "bitand_assign", "bitor_assign", "bitxor_assign", - // assignment operators 3 - "rshift_assign", "lshift_assign", - // assignment operators 4 - "eq", "noteq", "gt", "lt", "gte", "lte", - // comparison operators - "and", "or", "not", - // logical operators - "is", "isnot", - // identity operators - "in", "notin", - // membership operators - "bitand", "bitor", "bitxor", "invert", "rshift", "lshift"]); // bitwise operators] - - var filteredArray = array.filter(function (arrayElement) { - for (var i = 0; i < defaultVariables.length; i++) { - if (arrayElement.includes("'type': '" + defaultVariables[i] + "',")) return true; - } - return false; - }); - return filteredArray; - } - function writeHTMLDiffVariables(spanVariables, trial1VariablesThatChanged, trial2VariablesAdded, trial1VariablesRemoved) { - if (trial1VariablesThatChanged.length > 0) { - var variablesChangedTitle = spanVariables.append("p").attr("style", "font-weight:bold;").text("The variables changed:"); - var spanVariablesChanged = spanVariables.append("spand").attr("id", "diff-function-variables-changed-span-" + crypto.randomUUID()); - addHideShowButton(variablesChangedTitle, "hide-and-show-button-variables-changed", spanVariablesChanged.attr("id")); - trial1VariablesThatChanged.forEach(function (diffVar) { - var variablesLines = diffVar.match(/\{[^}]*\}/g); - var differentAttributes = findDifferenceBetweenVariables(variablesLines[0], variablesLines[1]); - spanVariablesChanged.append("span").html(colorJsonAttributesHTML(variablesLines[0], differentAttributes, "red")); - spanVariablesChanged.append("br"); - spanVariablesChanged.append("span").html(colorJsonAttributesHTML(variablesLines[1], differentAttributes, "green")); - spanVariablesChanged.append("br"); - spanVariablesChanged.append("br"); - }); - } - if (trial2VariablesAdded.length > 0) { - var variablesAddedTitle = spanVariables.append("p").attr("style", "font-weight:bold;").text("The variables added:"); - var spanVariablesAdded = spanVariables.append("spand").attr("id", "diff-function-variables-added-span-" + crypto.randomUUID()); - addHideShowButton(variablesAddedTitle, "hide-and-show-button-variables-added", spanVariablesAdded.attr("id")); - trial2VariablesAdded.forEach(function (varAdded) { - spanVariablesAdded.append("span").style("color", "green").text(varAdded); - spanVariablesAdded.append("br"); - }); - } - if (trial1VariablesRemoved.length > 0) { - var variablesRemovedTitle = spanVariables.append("p").attr("style", "font-weight:bold;").text("The variables removed:"); - var spanVariablesRemoved = spanVariables.append("spand").attr("id", "diff-function-variables-removed-span" + crypto.randomUUID()); - addHideShowButton(variablesRemovedTitle, "hide-and-show-button-removed-added", spanVariablesRemoved.attr("id")); - trial1VariablesRemoved.forEach(function (varRemoved) { - spanVariablesRemoved.append("span").style("color", "red").text(varRemoved); - spanVariablesRemoved.append("br"); - }); - } - } - function findDifferenceBetweenVariables(variable1, variable2) { - var jsonVariable1 = JSON.parse(variable1.replace(/"'/g, "\"").replace(/'"/g, "\"").replace(/'/g, "\"")); - var jsonVariable2 = JSON.parse(variable2.replace(/"'/g, "\"").replace(/'"/g, "\"").replace(/'/g, "\"")); - var differentAttributes = []; - for (var attr in jsonVariable1) { - if (jsonVariable1[attr] != jsonVariable2[attr]) differentAttributes.push(attr.toString()); - } - return differentAttributes; - } - function colorJsonAttributesHTML(jsonAsString, attributesArray, color) { - var coloredJsonAsString = jsonAsString.replace(/'<([^>]+)>'/g, "'$1'"); - attributesArray.forEach(function (attr) { - // Annotated code = color only the attribute - //attr = "'"+attr+"':"; - //coloredJsonAsString = coloredJsonAsString.replace(attr, "" + attr + ""); - var regex = "'" + attr + "':" + "(.*?),"; - var regexMatches = coloredJsonAsString.match(new RegExp(String.raw(_templateObject || (_templateObject = _taggedTemplateLiteral(["s", "s"], ["\\s", "\\s"])), regex))); - coloredJsonAsString = coloredJsonAsString.replace(regexMatches[1], "" + regexMatches[1] + ""); - }); - return coloredJsonAsString; - } - function colorArrayElementsHTML(array, symDifference, color) { - var coloredArray = array; - symDifference.forEach(function (argument) { - if (coloredArray.includes(argument)) coloredArray[coloredArray.indexOf(argument)] = "" + argument.toString() + ""; - }); - return coloredArray.toString(); - } - function writeFileAccess(fileAccessArray, window, color) { - fileAccessArray.forEach(function (file) { - window.append("span").style("color", color).text("Name: " + file.name); - window.append("br"); - window.append("span").style("color", color).text("Mode: " + file.mode); - window.append("br"); - window.append("span").style("color", color).text(" Buffering: " + file.buffering); - window.append("br"); - window.append("span").style("color", color).text("Content hash before: " + file.content_hash_before).on("click", function () { - downloadFileContent(file.content_hash_before, file.name); - }); - window.append("br"); - window.append("span").style("color", color).text("Content hash after: " + file.content_hash_after).on("click", function () { - downloadFileContent(file.content_hash_after, file.name); - }); - window.append("br"); - window.append("span").style("color", color).text("Timestamp: " + file.timestamp); - window.append("br"); - window.append("span").style("color", color).text("Function: " + file.stack); - window.append("br"); - window.append("br"); - }); - } - ["output", "arguments", "duration", "variables"].forEach(function (property) { - var didntChange = JSON.stringify(functionDiffJson[property + "_function_trial1"]) == JSON.stringify(functionDiffJson[property + "_function_trial2"]); - var changeText = didntChange ? "The " + property + " didn't change" : "The " + property + " changed:"; - var textChangeTitle; - if (property != "variables") textChangeTitle = functionDiffWindow.append("p").attr("style", "font-weight:bold;").text(changeText); - if (changeText.includes("changed")) { - if (property == "duration") { - functionDiffJson[property + "_function_trial1"] = functionDiffJson[property + "_function_trial1"].toString() + " miliseconds"; - functionDiffJson[property + "_function_trial2"] = functionDiffJson[property + "_function_trial2"].toString() + " miliseconds"; - } - var spanProperty = functionDiffWindow.append("span").attr("id", "diff-function-" + property + "-span-" + crypto.randomUUID()); - if (property != "variables") addHideShowButton(textChangeTitle, "hide-and-show-button-" + property, spanProperty.attr("id")); - if (property == "variables") { - var buttonDiv = functionDiffWindow.append("div").attr("id", "div-diff-function-variables-filter").lower(); - buttonDiv.append("span").classed("toollink", true).attr("id", "filter-" + windowIdAndTitle + "-variables-default").attr("href", "#").attr("title", "Show only name, attribute, and access variables").on("click", function () { - var trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson["trial1_variables_that_changed"], false); - var trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson["trial2_variables_added"], false); - var trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson["trial1_variables_removed"], false); - spanProperty.html(""); - writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered); - }).append("i").classed("fa fa-asterisk", true).append("span").style("margin-right", "10px").text("Show only name, attribute, and access variables"); - buttonDiv.append("span").classed("toollink", true).attr("id", "filter-" + windowIdAndTitle + "-variables-operation").attr("href", "#").attr("title", "Show all operation variables").on("click", function () { - var trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson["trial1_variables_that_changed"], true); - var trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson["trial2_variables_added"], true); - var trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson["trial1_variables_removed"], true); - spanProperty.html(""); - writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered); - }).append("i").classed("fa fa-plus-square", true).append("span").style("margin-right", "10px").text("Show all operation variables"); - ; - buttonDiv.append("span").classed("toollink", true).attr("id", "filter-" + windowIdAndTitle + "-variables-all").attr("href", "#").attr("title", "Show all variables").on("click", function () { - spanProperty.html(""); - writeHTMLDiffVariables(spanProperty, functionDiffJson["trial1_variables_that_changed"], functionDiffJson["trial2_variables_added"], functionDiffJson["trial1_variables_removed"]); - }).append("i").classed("fa fa-code", true).append("span").style("margin-right", "10px").text("Show all variables"); - writeHTMLDiffVariables(spanProperty, functionDiffJson["trial1_variables_that_changed"], functionDiffJson["trial2_variables_added"], functionDiffJson["trial1_variables_removed"]); - } else if (property == "arguments") { - var symDifference = functionDiffJson[property + "_function_trial1"].filter(function (x) { - return !functionDiffJson[property + "_function_trial2"].includes(x); - }).concat(functionDiffJson[property + "_function_trial2"].filter(function (x) { - return !functionDiffJson[property + "_function_trial1"].includes(x); - })); - spanProperty.append("span").html(colorArrayElementsHTML(functionDiffJson[property + "_function_trial1"], symDifference, "red")); - spanProperty.append("br"); - spanProperty.append("span").html(colorArrayElementsHTML(functionDiffJson[property + "_function_trial2"], symDifference, "green")); - } else { - spanProperty.append("span").style("color", "red").text(functionDiffJson[property + "_function_trial1"].toString()); - spanProperty.append("br"); - spanProperty.append("span").style("color", "green").text(functionDiffJson[property + "_function_trial2"].toString()); - } - } - }); - var fileAccessAddedTitle = functionDiffWindow.append("p").style("font-weight", "bold").text(functionDiffJson["file_accesses_added"].length + " file accesses added:"); - var spanFileAccessAdded = functionDiffWindow.append("span").attr("id", "diff-function-file-access-added-span-" + crypto.randomUUID()); - addHideShowButton(fileAccessAddedTitle, "hide-and-show-button-file-access-added", spanFileAccessAdded.attr("id")); - writeFileAccess(functionDiffJson["file_accesses_added"], spanFileAccessAdded, "green"); - var fileAccessRemovedTitle = functionDiffWindow.append("p").style("font-weight", "bold").text(functionDiffJson["file_accesses_removed"].length + " file accesses removed:"); - var spanFileAccessRemoved = functionDiffWindow.append("span").attr("id", "diff-function-file-access-removed-span-" + crypto.randomUUID()); - addHideShowButton(fileAccessRemovedTitle, "hide-and-show-button-file-access-removed", spanFileAccessRemoved.attr("id")); - writeFileAccess(functionDiffJson["file_accesses_removed"], spanFileAccessRemoved, "red"); - var fileAccessReplacedTitle = functionDiffWindow.append("p").style("font-weight", "bold").text(functionDiffJson["file_accesses_replaced"].length + " file accesses replaced:"); - var spanFileAccessReplaced = functionDiffWindow.append("span").attr("id", "diff-function-file-access-replaced-span-" + crypto.randomUUID()); - addHideShowButton(fileAccessReplacedTitle, "hide-and-show-button-file-access-replaced", spanFileAccessReplaced.attr("id")); - functionDiffJson["file_accesses_replaced"].forEach(function (file) { - spanFileAccessReplaced.append("span").text("Name: " + file.name); - spanFileAccessReplaced.append("br"); - //spanFileAccessReplaced.append("span").style("color", color).text("Mode: " + file.mode); - //spanFileAccessReplaced.append("br"); - //spanFileAccessReplaced.append("span").style("color", color).text(" Buffering: " + file.buffering); - //spanFileAccessReplaced.append("br"); - spanFileAccessReplaced.append("span").text("Content hash before changed from ").append("span").style("color", "red").text(file.content_hash_before_first_trial).on("click", function () { - downloadFileContent(file.content_hash_before_first_trial, file.name); - }); - spanFileAccessReplaced.append("span").text(" to ").append("span").style("color", "green").text(file.content_hash_before_second_trial).on("click", function () { - downloadFileContent(file.content_hash_before_second_trial, file.name); - }); - spanFileAccessReplaced.append("br"); - spanFileAccessReplaced.append("span").text("Content hash after changed from ").append("span").style("color", "red").text(file.content_hash_after_first_trial).on("click", function () { - downloadFileContent(file.content_hash_after_first_trial, file.name); - }); - spanFileAccessReplaced.append("span").text(" to ").append("span").style("color", "green").text(file.content_hash_after_second_trial).on("click", function () { - downloadFileContent(file.content_hash_after_second_trial, file.name); - }); - spanFileAccessReplaced.append("br"); - spanFileAccessReplaced.append("span").text("Timestamp changed from ").append("span").style("color", "red").text(file.timestamp_first_trial); - spanFileAccessReplaced.append("span").text(" to ").append("span").style("color", "green").text(file.timestamp_second_trial); - spanFileAccessReplaced.append("br"); - spanFileAccessReplaced.append("span").text("Checkpoint changed from ").append("span").style("color", "red").text(file.checkpoint_first_trial); - spanFileAccessReplaced.append("span").text(" to ").append("span").style("color", "green").text(file.checkpoint_second_trial); - //spanFileAccessReplaced.append("span").style("color", color).text("Function: " + file.stack); - spanFileAccessReplaced.append("br"); - spanFileAccessReplaced.append("br"); - }); - function downloadFileContent(fileHash, fileName) { - var link = document.createElement("a"); - link.download = fileName; - link.href = window.location.origin + "/downloadFile/" + fileHash; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - link.remove(); - } - - /* function showFileContent(fileHash: any, fileName : any) { - fetch("getFileContent/" + fileHash, { - method: 'GET', // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - }, - }).then((response) => { - response.json().then((json) => { - if(fileName.length > 50) fileName = fileName.substring(40); - let modal = d3_select(document.getElementById("main")) - .append("div").classed("modal fade show", true) - .attr("id", "fileContentModal") - .attr("tabindex", "-1") - .attr("role", "dialog") - .attr("aria-labelledby", "fileContentModal") - .style("display", "none") - .attr("aria-hidden", "false") - .style("display", "block"); - - let modalDialog = modal.append("div").classed("modal-dialog", true).attr("role","document").style("overflow-y","initial").style("max-height", "85%"); - let modalContent = modalDialog.append("div").classed("modal-content", true); - - let modalHeader = modalContent.append("div").classed("modal-header", true); - modalHeader.append("h5").classed("modal-title", true).attr("id", "fileContentModalLabel").text("File "+fileName+"'s content:"); - modalHeader.append("button").classed("close", true).attr("data-dismiss", "modal").attr("aria-label", "Close") - .append("span").attr("aria-hidden", "true").html("×").on("click", () => modal.remove()); - let modalBody = modalContent.append("div").classed("modal-body", true).style("overflow-y", "auto").style("height", "80vh"); - modalBody.append("p").html(json.file_content.replace("\r\n", "
").replace("\n", "
")); - }); - }); - } */ -} - -/***/ }), - -/***/ "./src/graph/history_graph.ts": -/*!************************************!*\ - !*** ./src/graph/history_graph.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ HistoryWidget: () => (/* binding */ HistoryWidget) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var _noworkflow_history__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noworkflow/history */ "../history/lib/index.js"); -/* harmony import */ var _noworkflow_history__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_history__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _trial_graph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./trial_graph */ "./src/graph/trial_graph.ts"); -/* harmony import */ var _diff_graph__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./diff_graph */ "./src/graph/diff_graph.ts"); -/* harmony import */ var _info_trial_info__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../info/trial_info */ "./src/info/trial_info.ts"); -/* harmony import */ var _info_diff_info__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../info/diff_info */ "./src/info/diff_info.ts"); -/* harmony import */ var _function_diff__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./function_diff */ "./src/graph/function_diff.ts"); -/* harmony import */ var file_saver__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! file-saver */ "../../node_modules/file-saver/dist/FileSaver.min.js"); -/* harmony import */ var file_saver__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(file_saver__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var _viz_js_viz__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @viz-js/viz */ "../../node_modules/@viz-js/viz/lib/viz-standalone.mjs"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } -function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } -function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } -function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } - - - - - - - - - - - -var pl = __webpack_require__(/*! tau-prolog */ "../../node_modules/tau-prolog/modules/core.js"); -var svgPanZoom = __webpack_require__(/*! svg-pan-zoom */ "../../node_modules/svg-pan-zoom/src/browserify.js"); -"svg-pan-zoom"; -var HistoryWidget = /*#__PURE__*/function (_Widget) { - function HistoryWidget(config, name, cls, expId, annontationWidget) { - var _this; - _classCallCheck(this, HistoryWidget); - _this = _callSuper(this, HistoryWidget, [{ - node: HistoryWidget.createNode() - }]); - _defineProperty(_this, "functionDiffWindow", _function_diff__WEBPACK_IMPORTED_MODULE_7__.functionDiffWindow); - _this.expId = expId; - _this.config = config; - _this.annontationWidget = annontationWidget; - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(_this.node); - _this.d3node.select('.reload-button').on("click", function () { - _this.load(_this.d3node.select(".script-options").property("value"), _this.d3node.select(".exec-selection").property("value"), _this.d3node.select(".summarize").property("checked")); - }); - _this.rightClickMenu = _this.d3node.append("div").classed("dropdown-menu dropdown-menu-sm", true).attr("id", "context-menu").attr("selected-trial", "").style("display", "block"); - _this.buildModal(_this.node); - _this.buildRightClickMenu(); - - //this.setFlag(Widget.Flag.DisallowLayout); - _this.addClass('content'); - _this.addClass('trial-widget'); - _this.title.label = name; - _this.title.closable = false; - _this.title.caption = "".concat(name, " Graph"); - _this.name = name; - _this.cls = cls; - return _this; - } - _inherits(HistoryWidget, _Widget); - return _createClass(HistoryWidget, [{ - key: "setGraph", - value: function setGraph(data) { - var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var sub = this.node.getElementsByClassName("sub-content")[0]; - sub.innerHTML = ""; - this.graph = new _noworkflow_history__WEBPACK_IMPORTED_MODULE_1__.HistoryGraph(this.cls, sub, config); - this.graph.load(data); - } - }, { - key: "load", - value: function load() { - var _this2 = this; - var script = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "*"; - var execution = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "*"; - var summarize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var sub = this.node.getElementsByClassName("sub-content")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__.json)("History", sub, HistoryWidget.url(script, execution, summarize), function (data) { - _this2.setGraph(data, { - width: _this2.node.getBoundingClientRect().width - 24, - height: _this2.node.getBoundingClientRect().height - 24, - customCtrlClick: function customCtrlClick(g, d) { - var redTrial = g.state.selectedNode; - if (redTrial == null) { - return true; - } - var greenTrial = d; - var diffGraphWidget = new _diff_graph__WEBPACK_IMPORTED_MODULE_4__.DiffGraphWidget("Diff " + redTrial.display + "-" + greenTrial.display, "diff-" + redTrial.title + "-" + greenTrial.title + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__.makeid)(), redTrial.title, greenTrial.title, _this2.functionDiffWindow, _this2.parent); - diffGraphWidget.d3node.append("span").text("Ctrl+(left click) on a function overlap to see the functions' diff").style('font-family', 'sans-serif').style('font-size', '12px').style('pointer-events', 'none').lower(); - var parentDock = _this2.parent; - if (_this2.config.showInfo()) { - var diffInfoWidget = new _info_diff_info__WEBPACK_IMPORTED_MODULE_6__.DiffInfoWidget(redTrial.display, greenTrial.display, redTrial.title, greenTrial.title); - parentDock.addInfoWidget(diffInfoWidget); - parentDock.activateWidget(diffInfoWidget); - } - if (_this2.config.showTrial()) { - parentDock.addGraphWidget(diffGraphWidget); - parentDock.activateWidget(diffGraphWidget); - diffGraphWidget.load(_this2.config.graphType(), _this2.config.useCache()); - } - return true; - }, - customWindowTabCommand: function customWindowTabCommand(trialIdSimplified, windowId, command) { - var trialExportWidget = new _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget(); - trialExportWidget.title.label = command + " trial " + trialIdSimplified; - trialExportWidget.title.closable = true; - trialExportWidget.id = windowId; - var parentDock = _this2.parent; - parentDock.addGraphWidget(trialExportWidget); - parentDock.activateWidget(trialExportWidget); - return true; - }, - customSelectNode: function customSelectNode(g, d) { - var trialGraphWidget = new _trial_graph__WEBPACK_IMPORTED_MODULE_3__.TrialGraphWidget("Trial " + d.display, "trial-" + d.title + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__.makeid)(), d.title, d.title); - var parentDock = _this2.parent; - if (_this2.config.showInfo()) { - var trialInfoWidget = new _info_trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget(d, _this2.annontationWidget); - parentDock.addInfoWidget(trialInfoWidget); - parentDock.activateWidget(trialInfoWidget); - } - if (_this2.config.showTrial()) { - parentDock.addGraphWidget(trialGraphWidget); - parentDock.activateWidget(trialGraphWidget); - trialGraphWidget.load(_this2.config.graphType(), _this2.config.useCache()); - } - return true; - }, - customForm: function customForm(graph, form) { - // Toggle Tooltips - var filterDiv = _this2.d3node.select(".history-content .filter"); - var scriptOptions = filterDiv.select(".script-options"); - var currentScript = scriptOptions.property("value"); - scriptOptions.html(""); - scriptOptions.append("option").attr("value", "*").text("All Scripts"); - var _iterator = _createForOfIteratorHelper(data.scripts), - _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var _script = _step.value; - scriptOptions.append("option").attr("value", _script).text(_script); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - scriptOptions.property("value", currentScript); - var filterToggle = form.append("input").attr("id", "history-" + graph.graphId + "-toolbar-filter-check").attr("type", "checkbox").attr("name", "history-toolbar-filter-check").attr("value", "show").property("checked", filterDiv.classed('visible')).on("change", function () { - var visible = filterToggle.property("checked"); - filterToggleI.classed('fa-circle-o', visible).classed('fa-circle', !visible); - filterDiv.classed('visible', visible).classed('show-toolbar', visible).classed('hide-toolbar', !visible); - }); - var filterLabel = form.append("label").attr("for", "history-" + graph.graphId + "-toolbar-filter-check"); - var filterToggleI = filterLabel.append("i").classed('fa', true).classed("fa-circle", !filterDiv.classed('visible')).classed("fa-circle-o", filterDiv.classed('visible')); - - // Push trial - form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-push-trial").attr("href", "#").attr("title", "Push trial").on("click", function () { - return _this2.buildPushCommand(_this2.modal, _this2.modalBody); - }).append("i").classed("fa fa-cloud-upload", true); - - // Pull trial - form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-pull-trial").attr("href", "#").attr("title", "Pull trial").on("click", function () { - return _this2.buildPullCommand(_this2.modal, _this2.modalBody); - }).append("i").classed("fa fa-cloud-download", true); - - // Add remote - form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-add-remote").attr("href", "#").attr("title", "Add remote").on("click", function () { - return _this2.buildAddRemote(_this2.modal, _this2.modalBody); - }).append("i").classed("fa fa-plus-circle", true); - - // Edit remote - form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-edit-remote").attr("href", "#").attr("title", "Edit remote").on("click", function () { - return _this2.buildEditRemote(_this2.modal, _this2.modalBody); - }).append("i").classed("fa fa-pencil-square", true); - - // Delete remote - form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-delete-remote").attr("href", "#").attr("title", "Delete remote").on("click", function () { - return _this2.buildDeleteRemote(_this2.modal, _this2.modalBody); - }).append("i").classed("fa fa-trash", true); - } - }); - }); - } - }, { - key: "onResize", - value: function onResize(msg) { - if (!this.graph) { - return; - } - this.graph.config.width = this.node.getBoundingClientRect().width - 24; - this.graph.config.height = this.node.getBoundingClientRect().height - 24; - this.graph.updateWindow(); - } - }, { - key: "buildModal", - value: function buildModal(div) { - var _this3 = this; - this.modal = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(div).append("div").classed("modal fade", true).attr("id", "commandsModal").attr("tabindex", "-1").attr("role", "dialog").attr("aria-labelledby", "commandsModalTitle").style("display", "none").attr("aria-hidden", "true"); - var modalContent = this.modal.append("div").classed("modal-dialog", true).attr("role", "document").append("div").classed("modal-content", true); //modal content - - var modalHeader = modalContent.append("div").classed("modal-header", true); //modal header - modalHeader.append("h5").classed("modal-title", true).attr("id", "exampleModalTitle").text("Change Temporary Title"); //modal title - - this.modalBody = modalContent.append("div").classed("modal-body", true); - modalHeader.append("button").classed("close", true).attr("type", "button").text("x").style("float", "right").on("click", function () { - return cleanModalBodyAndClose(_this3.modal, _this3.modalBody); - }); //close modal - } - }, { - key: "buildRightClickMenu", - value: function buildRightClickMenu() { - //let modal = document.getElementById("commandsModal"); - this.buildRestoreTrialCommand(this.modal, this.modalBody); - this.buildRestoreFileCommand(this.modal, this.modalBody); - this.buildProvCommand(); - this.buildExportPrologCommand(this.modal, this.modalBody); - this.buildDataflowCommand(this.modal, this.modalBody); - this.buildTrialFunctionDiffCommand(this.modal, this.modalBody, this.functionDiffWindow); - } - }, { - key: "buildTrialFunctionDiffCommand", - value: function buildTrialFunctionDiffCommand(modal, modalBody, functionDiffWindow) { - var self = this; - this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "trial-function-diff-option").text("function activation diff").on("click", function () { - var _parent$getAttribute; - var parent = this.parentNode; - var trialId = (_parent$getAttribute = parent.getAttribute("selected-trial")) !== null && _parent$getAttribute !== void 0 ? _parent$getAttribute : ""; - buildTrialFunctionDiffModal(modal, modalBody, parent, trialId, functionDiffWindow, self); - }); - } - }, { - key: "buildDataflowCommand", - value: function buildDataflowCommand(modal, modalBody) { - var self = this; - this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "dataflow-option").text("export dataflow").on("click", function () { - var _parent$getAttribute2; - var parent = this.parentNode; - var trialId = (_parent$getAttribute2 = parent.getAttribute("selected-trial")) !== null && _parent$getAttribute2 !== void 0 ? _parent$getAttribute2 : ""; - buildDataflowModal(modal, modalBody, parent, self.graph.config, trialId); - }); - } - }, { - key: "buildExportPrologCommand", - value: function buildExportPrologCommand(modal, modalBody) { - var self = this; - this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "export-option").text("export prolog").on("click", function () { - var parent = this.parentNode; - var trialId = parent.getAttribute("selected-trial"); - var exportUrl = "/commands/export/" + trialId; - var exportWindowId = "Export window " + trialId; - buildExportPrologModal(modal, modalBody, exportUrl, self.graph.config, parent, exportWindowId, trialId); - }); - } - }, { - key: "buildProvCommand", - value: function buildProvCommand() { - var self = this; - this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "prov-option").text("export prov").on("click", function () { - var parent = this.parentNode; - var trialId = parent.getAttribute("selected-trial"); - var provWindowId = "Prov window " + trialId; - if (document.getElementById(provWindowId)) return; - var provUrl = "/commands/prov/" + trialId; - fetch(provUrl, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - self.graph.config.customWindowTabCommand(parent.getAttribute("selected-trial-simplified"), provWindowId, "Prov"); - var provWindow = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(provWindowId)); - if (response.status == 200) { - provWindow.style("overflow-y", "auto"); - var prov_lines = json.prov.split("\n"); - for (var line in prov_lines) provWindow.append("p").text(prov_lines[line]); - } else { - window.alert("No prov to export"); - } - }); - }); - }); - } - }, { - key: "buildRestoreFileCommand", - value: function buildRestoreFileCommand(modal, modalBody) { - this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "restore-file-option").text("restore file").on("click", function () { - var parent = this.parentNode; - var trialId = parent.getAttribute("selected-trial"); - var trialFiles; - fetch("/files/" + trialId, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - var _submitButton; - trialFiles = json.files; - changeTitle(parent, "Restore file trial "); - var submitButton; - var form; - showModal(modal); - if (modalBody) { - form = modalBody.append("form").attr("onsubmit", "return false;"); - //createFormTextInput(form, "restoreFile", "Restore file", "restoreFileHelp", "Write the name of the file you want to restore"); - createFormSelectInput(form, "restoreFile", "Restore file", 0, trialFiles.length - 1, 0, "", "", trialFiles); - createFormTextInput(form, "restoreFileID", "File identifier", "restoreIDHelp", "(optional) Identifies the file to be restored. It can be either the timestamp, the number of access, or the code hash"); - createFormTextInput(form, "restoreFileTarget", "Target file path", "restoreTargetHelp", "(optional) specifies the target path of the restored file"); - submitButton = form.append("button").classed("btn btn-primary mb-2", true).attr("type", "submit").text("restore trial"); - } - (_submitButton = submitButton) === null || _submitButton === void 0 || _submitButton.on("click", function () { - //let fileToRestore : string | boolean = getTextInputFormByID("restoreFile", true); - var fileToRestore = document.getElementById("restoreFile").selectedOptions[0].value; - var fileIdentifier = getTextInputFormByID("restoreFileID", true); - var targetPath = getTextInputFormByID("restoreFileTarget", false); - var restoreUrl = "/commands/restore/file/" + trialId + "/" + fileToRestore + "/" + fileIdentifier + "/" + targetPath; - if (fileToRestore) getRestoreOrCollabCommand(restoreUrl, form, modalBody);else addAlert(modalBody, "alert-danger", "Error!", "The file's name is empty"); - }); - }); - }); - }); - } - }, { - key: "buildRestoreTrialCommand", - value: function buildRestoreTrialCommand(modal, modalBody) { - this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "restore-trial-option").text("restore trial").on("click", function () { - var _submitButton2; - var parent = this.parentNode; - var trialId = parent.getAttribute("selected-trial"); - changeTitle(parent, "Restore trial "); - var submitButton; - var form; - showModal(modal); - if (modalBody) { - form = modalBody.append("form").attr("onsubmit", "return false;"); - createFormCheckInput(form, "restoreSkipScript", "Skip Script"); - createFormCheckInput(form, "restoreSkipLocalModules", "Skip Local Modules"); - createFormCheckInput(form, "restoreSkipFileAccess", "Skip File Access"); - submitButton = form.append("button").classed("btn btn-primary mb-2", true).attr("type", "submit").text("restore trial"); - } - (_submitButton2 = submitButton) === null || _submitButton2 === void 0 || _submitButton2.on("click", function () { - var skipScript = document.getElementById("restoreSkipScript").checked; - var skipModules = document.getElementById("restoreSkipLocalModules").checked; - var skipFileAccess = document.getElementById("restoreSkipFileAccess").checked; - var restoreUrl = "/commands/restore/trial/" + trialId + "/" + skipScript + "/" + skipModules + "/" + skipFileAccess; - getRestoreOrCollabCommand(restoreUrl, form, modalBody); - }); - }); - } - }, { - key: "buildAddRemote", - value: function buildAddRemote(modal, modalBody) { - var _submitButton3; - document.getElementById("exampleModalTitle").textContent = "Add new remote"; - var submitButton; - var form; - showModal(modal); - if (modalBody) { - form = modalBody.append("form").attr("onsubmit", "return false;"); - createFormTextInput(form, "inputAddRemoteUrl", "Remote URL: "); - createFormTextInput(form, "inputAddRemoteName", "Remote name: "); - submitButton = form.append("button").classed("btn btn-primary mb-2", true).text("Add remote"); - } - (_submitButton3 = submitButton) === null || _submitButton3 === void 0 || _submitButton3.on("click", function () { - var remoteURL = document.getElementById("inputAddRemoteUrl").value; - var remoteName = document.getElementById("inputAddRemoteName").value; - var addRemoteURL = "/collab/remotes/add/" + remoteName + "/" + remoteURL; - fetch(addRemoteURL, { - method: 'POST', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - form.remove(); - if (response.status == 200) { - addAlert(modalBody, "alert-success", "Success!", json.terminal_text); - } else { - addAlert(modalBody, "alert-danger", "Error!", ""); - } - }); - }); - }); - } - }, { - key: "buildDeleteRemote", - value: function buildDeleteRemote(modal, modalBody) { - var _this4 = this; - fetch("/collab/remotes/getall", { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(/*#__PURE__*/function () { - var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(json) { - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - if (response.status == 200) { - _this4.executeCollabCommand(modal, modalBody, "editDeleteServerUrlId", "Delete remote", "delete", json.remotes); - } else { - console.log("Failed to get remotes"); - } - case 1: - case "end": - return _context.stop(); - } - }, _callee); - })); - return function (_x) { - return _ref.apply(this, arguments); - }; - }()); - }); - } - }, { - key: "buildEditRemote", - value: function buildEditRemote(modal, modalBody) { - var _this5 = this; - fetch("/collab/remotes/getall", { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(/*#__PURE__*/function () { - var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(json) { - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - if (response.status == 200) { - _this5.executeCollabCommand(modal, modalBody, "editRemoteServerUrlId", "Edit remote", "edit", json.remotes); - } else { - console.log("Failed to get remotes"); - } - case 1: - case "end": - return _context2.stop(); - } - }, _callee2); - })); - return function (_x2) { - return _ref2.apply(this, arguments); - }; - }()); - }); - } - }, { - key: "buildPushCommand", - value: function buildPushCommand(modal, modalBody) { - var _this6 = this; - fetch("/collab/remotes/getall", { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(/*#__PURE__*/function () { - var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(json) { - return _regeneratorRuntime().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - if (response.status == 200) { - _this6.executeCollabCommand(modal, modalBody, "pushServerUrlId", "Push experiment", "push", json.remotes); - } else { - console.log("Failed to get remotes"); - } - case 1: - case "end": - return _context3.stop(); - } - }, _callee3); - })); - return function (_x3) { - return _ref3.apply(this, arguments); - }; - }()); - }); - } - }, { - key: "buildPullCommand", - value: function buildPullCommand(modal, modalBody) { - var _this7 = this; - fetch("/collab/remotes/getall", { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(/*#__PURE__*/function () { - var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(json) { - return _regeneratorRuntime().wrap(function _callee4$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - if (response.status == 200) { - _this7.executeCollabCommand(modal, modalBody, "pullServerUrlId", "Pull experiment", "pull", json.remotes); - } else { - console.log("Failed to get remotes"); - } - case 1: - case "end": - return _context4.stop(); - } - }, _callee4); - })); - return function (_x4) { - return _ref4.apply(this, arguments); - }; - }()); - }); - } - }, { - key: "executeCollabCommand", - value: function executeCollabCommand(modal, modalBody, serverUrlId, title, command, remotes) { - var _submitButton4; - document.getElementById("exampleModalTitle").textContent = title; - var submitButton; - var form; - showModal(modal); - var select; - if (modalBody) { - form = modalBody.append("form").attr("onsubmit", "return false;"); - form.append("label").attr("for", "remotes").text("Remote: "); - select = form.append("select").attr("name", "remotes").attr("id", "remotes"); - for (var i = 0; i < remotes.length; i++) { - select.append("option").attr("value", remotes[i].server_url).text(remotes[i].name); - } - form.append("br"); - form.append("span").text("Remote URL: "); - var remoteURLText = form.append("span").attr("id", serverUrlId + "Remote").text(remotes[0].server_url); - select.on("change", function () { - remoteURLText.text(select.node().value); - }); - form.append("br"); - if (command == "edit") { - createFormTextInput(form, "inputEditRemoteName", "Remote new name: "); - } - submitButton = form.append("button").classed("btn btn-primary mb-2", true).text(title); - } - (_submitButton4 = submitButton) === null || _submitButton4 === void 0 || _submitButton4.on("click", function () { - var serverUrl = select.node().value; - var collabCommandUrl = "/commands/" + command + "/" + serverUrl; - if (command == "edit") collabCommandUrl = "/collab/remotes/edit/" + document.getElementById("inputEditRemoteName").value + "/" + serverUrl; - if (command == "delete") collabCommandUrl = "/collab/remotes/delete/" + serverUrl; - getRestoreOrCollabCommand(collabCommandUrl, form, modalBody); - }); - } - }], [{ - key: "url", - value: function url() { - var script = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "*"; - var execution = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "*"; - var summarize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - return "trials.json" + "?script=" + encodeURIComponent(script) + "&execution=" + encodeURIComponent(execution) + "&summarize=" + (summarize ? "1" : "0"); - } - }, { - key: "createNode", - value: function createNode() { - var node = document.createElement('div'); - var content = document.createElement('div'); - node.appendChild(content); - var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(content); - var d3content = d3node.append('div').classed('history-content', true); - var filterDiv = d3content.append("div") - //let filterDiv = form.insert("div", ":first-child") - .classed("filter", true).classed("hide-toolbar", true); - var filterInternal = filterDiv.append("div").classed("internal", true); - var scriptOptions = filterInternal.append("select").attr("name", "script").classed("select-style script-options", true); - scriptOptions.append("option").attr("value", "*").text("All Scripts"); - var executionOptions = filterInternal.append("select").attr("name", "execution").classed("select-style exec-selection", true); - executionOptions.append("option").attr("value", "*").text("All Statuses"); - executionOptions.append("option").attr("value", "finished").text("Finished Trials"); - executionOptions.append("option").attr("value", "unfinished").text("Unfinished Trials"); - executionOptions.append("option").attr("value", "backup").text("Backup Trials"); - var summarize = filterInternal.append("div").classed("graph-attr", true); - summarize.append("input").attr("type", "checkbox").attr("name", "summarize").attr("value", "").attr("checked", false).classed("summarize", true).attr("id", "history-summarize"); - summarize.append("label").attr("for", "history-summarize").attr("title", "Summarize History").text("Summarize"); - var filterReload = filterInternal.append("a").attr("href", "#").classed("link-button reload-button", true); - filterReload.append('i').classed("fa fa-refresh", true); - filterReload.append('span').text('Reload'); - d3content.append('div').classed('sub-content', true); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); -function buildTrialFunctionDiffModal(modal, modalBody, parent, trialId, functionDiffWindow, self) { - var secondTrialId; - changeTitle(parent, "Function activation diff trial"); - //document.getElementById("exampleModalTitle")!.textContent = "Function activation diff trial " + trialId; - - fetch("/getFunctionActivations/" + trialId, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - showModal(modal); - if (modalBody) { - //scrollableModal(modalBody); - - modalBody.append("span").text("Select this trial's activation: "); - var firstTrialSelectActivation = modalBody.append("select").classed("form-select", true).attr("arial-label", "firstTrialFunctionActivations").attr("id", "firstTrialFunctionActivations").style("max-width", "480px"); - for (var activation in json["function_activations"]) { - firstTrialSelectActivation.append("option").attr("value", json["function_activations"][activation].id).text(JSON.stringify(json["function_activations"][activation]).replace(/{|}/g, "").substring(0, 70)); - } - modalBody.append("br"); - modalBody.append("span").text("Select the other trial: "); - var secondTrialSelect = modalBody.append("select").classed("form-select", true).attr("arial-label", "secondTrialSelect").attr("id", "secondTrialSelect"); - fetch("/getAllTrialsIdsAndTags", { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - for (var trial in json) { - secondTrialSelect.append("option").attr("value", json[trial].id).text(json[trial].tag); - } - modalBody.append("br"); - modalBody.append("span").text("Select the other trial's activation: "); - var secondTrialSelectActivation = modalBody.append("select").classed("form-select", true).attr("arial-label", "secondTrialFunctionActivations").attr("id", "secondTrialFunctionActivations").style("max-width", "480px"); - getSecondTrialFunctionActivations(secondTrialSelectActivation); - secondTrialSelect.on("change", function () { - getSecondTrialFunctionActivations(secondTrialSelectActivation); - }); - modalBody.append("br"); - var submitButton = modalBody.append("button").classed("btn btn-primary mb-2", true).style("margin-top", "10px").text("Confirm"); - submitButton.on("click", function () { - var firstTrialFunctionId = document.getElementById("firstTrialFunctionActivations").selectedOptions[0].value; - var secondTrialFunctionId = document.getElementById("secondTrialFunctionActivations").selectedOptions[0].value; - var url = "/commands/diff/" + trialId + "/" + firstTrialFunctionId + "/" + secondTrialId + "/" + secondTrialFunctionId; - fetch(url, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - functionDiffWindow(json, "Diff trial " + trialId + " activation_id " + firstTrialFunctionId + " trial " + secondTrialId + " activation_id " + secondTrialFunctionId, self.parent); - }); - }); - cleanModalBodyAndClose(modal, modalBody); - }); - }); - }); - } - }); - }); - function getSecondTrialFunctionActivations(secondTrialSelectActivation) { - secondTrialId = document.getElementById("secondTrialSelect").selectedOptions[0].value; - fetch("/getFunctionActivations/" + secondTrialId, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - secondTrialSelectActivation.html(""); - for (var activation in json["function_activations"]) { - secondTrialSelectActivation.append("option").attr("value", json["function_activations"][activation].id).text(JSON.stringify(json["function_activations"][activation]).replace(/{|}/g, "").substring(0, 70)); - } - }); - }); - } -} -function buildExportPrologModal(modal, modalBody, exportUrl, config, parent, exportWindowId, trialId) { - var _submitButton5; - var submitButton; - var form; - document.getElementById("exampleModalTitle").textContent = "Prolog"; - showModal(modal); - if (modalBody) { - form = modalBody.append("form").attr("onsubmit", "return false;"); - createFormCheckInput(form, "exportProvRules", "Also exports inference rules"); - createFormCheckInput(form, "exportProvHideTimestamps", "Hide timestamps"); - submitButton = form.append("button").classed("btn btn-primary mb-2", true).text("Generate prolog"); - } - (_submitButton5 = submitButton) === null || _submitButton5 === void 0 || _submitButton5.on("click", function () { - var inferenceRules = document.getElementById("exportProvRules").checked; - var hideTimestamps = document.getElementById("exportProvHideTimestamps").checked; - exportUrl += "/" + inferenceRules + "/" + hideTimestamps; - buildExportPrologTab(exportUrl, config, parent, exportWindowId, trialId); - cleanModalBodyAndClose(modal, modalBody); - }); -} -function buildExportPrologTab(exportUrl, config, parent, exportWindowId, trialId) { - if (document.getElementById(exportWindowId)) { - window.alert("Close trial " + trialId + " prolog tab before generating a new prolog"); - return; - } - fetch(exportUrl, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - if (response.status == 200) { - config.customWindowTabCommand(parent.getAttribute("selected-trial-simplified"), exportWindowId, "Prolog"); - var exportWindow = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(exportWindowId)); - var form = exportWindow.append("form").attr("onsubmit", "return false;").append("div").classed("form-row", true); - createFormTextInput(form, "exportPrologProgram" + trialId, "Prolog").classed("col-7", true); - createFormTextInput(form, "exportPrologQuery" + trialId, "Query").classed("col", true); - var submitButton = form.append("div").classed("col-auto", true).style("padding-top", "5vh").append("button").classed("btn btn-primary mb-2", true).text("Execute Query"); - document.getElementById("exportPrologProgram" + trialId).value = json["export"]; - var prologSession = pl.create(1000); - var _answerCallback = function answerCallback(answer, answerString) { - if (answer == false) { - var answerCardTextId = "Answers prolog card text " + trialId; - var answerCardText = document.getElementById(answerCardTextId) ? (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(answerCardTextId)) : null; - if (answerCardText == null) { - var answerWindow = exportWindow.append("div"); - answerWindow.classed("card", true).append("div").classed("card-header", true).text("Answers"); - answerCardText = answerWindow.append("div").classed("card-body", true).append("p").classed("card-text", true).attr("id", answerCardTextId).style("overflow-y", "auto").style("max-height", "35vh"); - } - answerCardText.html(answerString); - return; - } - answerString += prologSession.format_answer(answer).toString() + "
"; - prologSession.answer(function (answer) { - return _answerCallback(answer, answerString); - }); - }; - submitButton.on("click", function () { - var prologProgram = getTextInputFormByID("exportPrologProgram" + trialId); - var userQuery = getTextInputFormByID("exportPrologQuery" + trialId); - if (prologProgram && userQuery) { - prologSession.consult(prologProgram, { - success: function success() { - console.log("Prolog consult success"); - prologSession.query(userQuery, { - success: function success() { - prologSession.answer(function (answer) { - return _answerCallback(answer, ""); - }); - }, - error: function error() { - console.log("Erro query"); - } - }); - }, - error: function error() { - console.log("Prolog consult error"); - } - }); - } - }); - } else { - console.log("Export error"); - } - }); - }); -} -function scrollableModal(modalBody) { - var modalDialog = document.getElementsByClassName("modal-dialog")[0]; - modalDialog.style.overflowY = "initial"; - modalDialog.style.maxHeight = "85%"; - modalBody.style("overflow-y", "auto").style("height", "80vh"); -} -function getDataflow(response, config, parent, dataflowWindowId, dataflowUrl) { - response.json().then(function (json) { - if (response.status == 200) { - var trialIdSimplified = parent.getAttribute("selected-trial-simplified"); - config.customWindowTabCommand(trialIdSimplified, dataflowWindowId, "Dataflow"); - console.log(json.dataflow); - (0,_viz_js_viz__WEBPACK_IMPORTED_MODULE_9__.instance)().then(function (viz) { - var dataflowWindow = document.getElementById(dataflowWindowId); - - // Download SVG Button, excluding hint, and excluding checkbox - dataflowButtons(dataflowWindow, dataflowWindowId, "Click on a function call, then (Ctrl or Shift)+click on another one to exclude prior provenience", json.dataflow); - var selectedNode; - var selectedEdge; - - //dataflowWindow!.style.overflowY = dataflowWindow!.style.overflowX = "auto"; - var svgElement = viz.renderSVGElement(json.dataflow); - dataflowWindow.appendChild(svgElement); - svgPanZoom(svgElement, { - preventMouseEventsDefault: false, - dblClickZoomEnabled: false - }); - var _loop = function _loop(nodeIndex) { - var presentNode = svgElement.children[0].children[0].children[nodeIndex]; - if (presentNode.getAttribute("class") == "node" && presentNode.children[1].tagName.toLowerCase() == "polygon") { - var presentNodeSelection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(presentNode); - presentNodeSelection.style("cursor", "pointer"); - presentNodeSelection.on("click", function (event) { - if (selectedNode) { - selectedNode.children[1].setAttribute("stroke", "black"); - } - if (selectedNode && (event.ctrlKey || event.shiftKey)) { - deletePriorNodes(selectedNode, presentNode, viz, dataflowUrl, config, trialIdSimplified, dataflowWindowId); - } else { - selectedNode = svgElement.children[0].children[0].children[nodeIndex]; - selectedNode.children[1].setAttribute("stroke", "red"); - } - }); - } else if (presentNode.getAttribute("class") == "edge" && presentNode.children[1].tagName.toLowerCase() == "path") { - var _presentNodeSelection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(presentNode); - _presentNodeSelection.style("cursor", "pointer"); - _presentNodeSelection.on("click", function () { - if (selectedEdge) { - selectedEdge.children[1].setAttribute("stroke", "black"); - } - selectedEdge = svgElement.children[0].children[0].children[nodeIndex]; - selectedEdge.children[1].setAttribute("stroke", "red"); - }); - } - }; - for (var nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) { - _loop(nodeIndex); - } - }); - } else { - console.log("Dataflow error"); - } - }); -} -function checkboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow) { - var dataflowWindowD3Select = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(dataflowWindow); - var checkboxID = dataflowWindow.getAttribute("id") + "OpenNewWindowOption"; - dataflowWindowD3Select.append("input").attr("id", checkboxID).attr("type", "checkbox"); - dataflowWindowD3Select.append("label").attr("for", checkboxID).text("Don't open dataflow with excluded provenance in a new tab").style('font-family', 'sans-serif').style('font-size', '12px').style('pointer-events', 'none'); -} -function excludePriorProvenanceHint(dataflowWindow, text) { - (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(dataflowWindow).append("div").append("div").text(text).style('font-family', 'sans-serif').style('font-size', '12px').style('pointer-events', 'none'); -} -function chooseDataflowExcludedProvenanceWindowId(presentWindowId, newWindowId) { - if (document.getElementById(presentWindowId + "OpenNewWindowOption").checked) return presentWindowId; - return newWindowId; -} -function deletePriorNodes(selectedNode, presentNode, viz, dataflowUrl, config, trialIdSimplified, presentWindowId) { - dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf("/")); - dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf("/")) + "/true/"; - var selectedNodeEvaluationTitle = selectedNode.children[0].innerHTML; - var presentNodeOrderEvaluationTitle = presentNode.children[0].innerHTML; - var firstEvaluationOrder = Number(selectedNodeEvaluationTitle.replace("e_", "")); - var lastEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace("e_", "")); - if (firstEvaluationOrder > lastEvaluationOrder) { - lastEvaluationOrder = firstEvaluationOrder; - firstEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace("e_", "")); - } - var dataflowUrlLastEvaluation = dataflowUrl + lastEvaluationOrder; - var dataflowUrlFirstEvaluation = dataflowUrl + firstEvaluationOrder; - var excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(presentWindowId, "Dataflow excluding prior " + presentNodeOrderEvaluationTitle + " " + selectedNodeEvaluationTitle + " window " + trialIdSimplified, trialIdSimplified, config); - excludingProvenanceWindow.textContent = "Loading..."; - fetch(dataflowUrlLastEvaluation, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (responseLastEvaluation) { - responseLastEvaluation.json().then(function (jsonLastEvaluation) { - var dataflowLastEvaluation = jsonLastEvaluation.dataflow; - fetch(dataflowUrlFirstEvaluation, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (responseFirstEvaluation) { - responseFirstEvaluation.json().then(function (jsonFirstEvaluation) { - var dataflowFirstEvaluation = jsonFirstEvaluation.dataflow; - dataflowAMinusDataflowB(dataflowLastEvaluation, dataflowFirstEvaluation, firstEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationOrder); - }); - }); - }); - }); -} -function getDataflowWindowExcludeSomeProvenance(presentWindowId, newWindowId, trialIdSimplified, config) { - var excludingProvenanceWindowId = chooseDataflowExcludedProvenanceWindowId(presentWindowId, newWindowId); - var excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId); - if (!excludingProvenanceWindow) { - config.customWindowTabCommand(trialIdSimplified, excludingProvenanceWindowId, "Dataflow excluding some provenance"); - excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId); - } - return excludingProvenanceWindow; -} -function dataflowAMinusDataflowB(dataflowA, dataflowB, selectedEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationId) { - //SET MINUS OPERATION A-B "The set A−B consists of elements that are in A but not in B. For example if A={1,2,3} and B={3,5}, then A−B={1,2}." - var linesDataflowA = dataflowA.split("\n"); - var linesDataflowB = dataflowB.split("\n"); - var newDataflow = linesDataflowA.slice(0); - removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB, newDataflow, selectedEvaluationOrder); - var dataflowIsAligned = addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow, selectedEvaluationOrder, linesDataflowA); - removesDeletedEvaluationsFromAligment(dataflowIsAligned, newDataflow); - console.log("------"); - var newDataflowString = newDataflow.join("\n"); - console.log(newDataflowString); - console.log("------"); - excludingProvenanceWindow.textContent = ""; - dataflowButtons(excludingProvenanceWindow, excludingProvenanceWindow.getAttribute("id"), "(Ctrl or Shift)+click on a function call to exclude prior provenience", newDataflowString); - var svgElement = viz.renderSVGElement(newDataflowString); - excludingProvenanceWindow.appendChild(svgElement); - svgPanZoom(svgElement, { - preventMouseEventsDefault: false, - dblClickZoomEnabled: false - }); - addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId); -} -function addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId) { - var selectedEdge; - var _loop2 = function _loop2(nodeIndex) { - var selectedNode = svgElement.children[0].children[0].children[nodeIndex]; - if (selectedNode.getAttribute("class") == "node" && selectedNode.children[1].tagName.toLowerCase() == "polygon") { - var selectedNodeSelection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(selectedNode); - selectedNodeSelection.style("cursor", "pointer"); - selectedNodeSelection.on("click", function (event) { - if (event.ctrlKey || event.shiftKey) deletePriorNodesAfterDeletingPriorNodes(selectedNode, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId); - }); - } else if (selectedNode.getAttribute("class") == "edge" && selectedNode.children[1].tagName.toLowerCase() == "path") { - var _selectedNodeSelection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(selectedNode); - _selectedNodeSelection.style("cursor", "pointer"); - _selectedNodeSelection.on("click", function () { - if (selectedEdge) { - selectedEdge.children[1].setAttribute("stroke", "black"); - } - selectedEdge = svgElement.children[0].children[0].children[nodeIndex]; - selectedEdge.children[1].setAttribute("stroke", "red"); - }); - } - }; - for (var nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) { - _loop2(nodeIndex); - } -} -function deletePriorNodesAfterDeletingPriorNodes(selectedNode, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId) { - var _excludingProvenanceW; - var selectedNodeOrderEvaluationTitle = selectedNode.children[0].innerHTML; - var selectedEvaluationOrder = Number(selectedNodeOrderEvaluationTitle.replace("e_", "")); - if (lastEvaluationId == selectedEvaluationOrder) { - window.alert("You can't remove everything."); - return undefined; - } - dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf("/")); - dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf("/")) + "/true/"; - var dataflowUrlPresentEvaluation = dataflowUrl + selectedEvaluationOrder; - var excludingProvenanceWindowId = (_excludingProvenanceW = excludingProvenanceWindow) === null || _excludingProvenanceW === void 0 ? void 0 : _excludingProvenanceW.getAttribute("id"); - excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(excludingProvenanceWindowId, excludingProvenanceWindowId + "OneMore", "", config); //TODO get simplifiedtrialid from wxcludingprovenancewindow - - excludingProvenanceWindow.textContent = "Loading..."; - fetch(dataflowUrlPresentEvaluation, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (responseLastEvaluation) { - responseLastEvaluation.json().then(function (json) { - var selectedEvaluationDataflow = json.dataflow; - dataflowAMinusDataflowB(newDataflowString, selectedEvaluationDataflow, selectedEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationId); - }); - }); -} -function removesDeletedEvaluationsFromAligment(dataflowIsAligned, newDataflow) { - if (dataflowIsAligned) { - var evaluations = []; - for (var lineIndex = 3; lineIndex < newDataflow.length; lineIndex++) { - var line = newDataflow[lineIndex]; - if (line.includes("label")) evaluations.push(line.replace(/\[[^\]]*?\];/, "").split(" ")[4].trim());else if (line.includes("{rank=")) { - var alignedEvaluations = line.split(" "); - for (var alignedEvalIndex = 5; alignedEvalIndex < alignedEvaluations.length; alignedEvalIndex++) { - var alignedEval = alignedEvaluations[alignedEvalIndex].replace("}\r", "").trim(); - if (!evaluations.includes(alignedEval)) newDataflow[lineIndex] = newDataflow[lineIndex].replace(alignedEval, ""); - } - } else if (line.includes("->")) break; - } - } -} -function removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB, newDataflow, selectedEvaluationOrder) { - var _loop3 = function _loop3() { - var indexOfDataflowLineToRemove; - if (linesDataflowB[i].includes("->") && linesDataflowB[i].includes("[")) { - var lineToRemove = linesDataflowB[i].replace(/\[[^\]]*\]/, ""); - indexOfDataflowLineToRemove = newDataflow.findIndex(function (dataflowLine) { - return dataflowLine.replace(/\[[^\]]*\]/, "") == lineToRemove; - }); - } else indexOfDataflowLineToRemove = newDataflow.indexOf(linesDataflowB[i]); - if (indexOfDataflowLineToRemove > -1 && !linesDataflowB[i].includes("_" + selectedEvaluationOrder + " [")) newDataflow.splice(indexOfDataflowLineToRemove, 1); - }; - for (var i = 3; i < linesDataflowB.length - 2; i++) { - _loop3(); - } -} -function addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow, selectedEvaluationOrder, linesDataflowA) { - var tempArray = []; - var isAligned = false; - newDataflow.forEach(function (line) { - if (!isAligned && line.includes("{rank")) isAligned = true; - if (line.includes("->")) { - var evaluationWithoutSettings = line.split(" ")[6]; - if (Number(evaluationWithoutSettings.replace("e_", "").replace("a_", "")) < selectedEvaluationOrder) { - // TODO revise if firstEvaluationOrder is right - var lineToAdd = linesDataflowA.find(function (string) { - return string.includes(evaluationWithoutSettings + " ["); - }); - if (newDataflow.indexOf(lineToAdd) < 0) tempArray.push(lineToAdd); - } - } - }); - tempArray.forEach(function (item) { - return newDataflow.splice(3, 0, item); - }); - return isAligned; -} -function buildDataflowModal(modal, modalBody, parent, config, trialId) { - var submitButton; - var evaluationList; - var form; - document.getElementById("exampleModalTitle").textContent = "Dataflow"; - fetch("/dataflow/evaluations/" + trialId, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - evaluationList = json.evaluations; - var selectedEvaluation; - var dataflowTextInputEvaluation; - showModal(modal); - if (modalBody) { - scrollableModal(modalBody); - form = modalBody.append("form").attr("onsubmit", "return false;"); - createFormCheckInput(form, "dataFlowShowType", "Show type nodes"); - createFormCheckInput(form, "dataFlowHideTimestamps", "Hide timestamps"); - createFormCheckInput(form, "dataFlowHideInternals", "Show variables and functions which name starts with a leading underscore"); - createFormCheckInput(form, "dataFlowHideNotCode", "Hide evaluations that aren't from the code"); - createFormCheckInput(form, "dataFlowActivationNames", "Display nodes with their activation names instead"); - createFormCheckInput(form, "dataFlowHideFunc", "Hide func type evaluations"); - createFormSelectInput(form, "dataflowShowAccesses", "Show file accesses", 0, 4, 1, "dataflowShowAccessesHelp", "(default: Shows each file once (hide external accesses))", ["Hides file accesses", "Shows each file once (hide external accesses)", "Shows each file once (show external accesses)", "Shows all accesses (except external accesses)", "Shows all accesses (including external accesses)"]); - createFormSelectInput(form, "dataflowEvaluation", "Combine evaluation nodes", 0, 2, 1, "dataflowEvaluationHelp", "(default: Combines evaluation nodes by assignment)", ["Not combine evaluation nodes", "Combines evaluation nodes by assignment", "Combines evaluation nodes by value"]); - createFormSelectInput(form, "dataflowGroup", "Align evalutions in the same column", 0, 2, 0, "dataflowGroupHelp", "(default: Does no align). With this option, all variables in a loop appear grouped, reducing the width of the graph. It may affect the graph legibility. The alignment is independent for each activation.", ["Does no align", "Aligns by line", "Aligns by line and column"]); - createFormSelectInput(form, "dataflowMode", "Graph mode", 0, 4, 1, "dataflowModeHelp", "(default: coarseGrain). 'activation' presents only function activations and file accesses. Dependencies on the dataflow are clustered by depth(-d). 'coarseGrain' is the same as the activation dataflow, but with the addition of parameters and variable assignment of function activations. 'looplessCoarseGrain' is the same as the coarseGrain dataflow, but it doesn't repeat function activations when they're in the same line in a loop. 'fineGrain' is the same as the coarseGrain dataflow with the addition of variables, all user defined evaluations and data values. 'all' presents a dataflow with all evaluations and function activations. Dependencies on the dataflow are not clustered.", ["activation", "coarseGrain", "looplessCoarseGrain", "fineGrain", "all"]); - createFormNumberInput(form, "dataflowDepth", "Visualization depth", 0, 0, "dataflowDepthHelp", "(default: 0) 0 represents infinity. This parameter is ignored when the mode is \"all\""); - createFormNumberInput(form, "dataflowValueLength", "Maximum length of values", 0, 0, "dataflowValueLengthHelp", "(default: 0). 0 indicates that values should be hidden.The values appear on the second line of node lables. E.g. if it is set to '10', it will show 'data.dat', but it will transform 'data2.dat' in to 'da...dat' to respect the length restriction (note that '' is part of the value). Minimum displayable value: 5. Suggested: 55."); - createFormNumberInput(form, "dataflowName", "Maximum length of names", 0, 55, "dataflowNameHelp", "(default: 55). 0 indicates that values should be hidden. Minimum displayable value: 5. Suggested: 55."); - var dataflowEvaluationInput = createFormTextInput(form, "dataflowTextInputEvaluation", "Evaluation was derived from: ", "dataflowSelectEvaluationHelp", "Filter that shows only one evaluation and the ones that derived it"); - form.append("div").attr("id", "autocompleteSuggestionsResults"); - dataflowTextInputEvaluation = document.getElementById("dataflowTextInputEvaluation"); - addsAutocompleteToDataflowWDF(dataflowEvaluationInput, dataflowTextInputEvaluation, evaluationList); - submitButton = form.append("button").classed("btn btn-primary mb-2", true).text("Generate dataflow"); - } - submitButton.on("click", function () { - var dataFlowShowType = document.getElementById("dataFlowShowType").checked; - var dataFlowHideTimestamps = document.getElementById("dataflowMode").checked; - var dataFlowHideInternals = document.getElementById("dataFlowHideInternals").checked; - var dataFlowHideNotCode = document.getElementById("dataFlowHideNotCode").checked; - var dataFlowActivationNames = document.getElementById("dataFlowActivationNames").checked; - var dataFlowHideFunc = document.getElementById("dataFlowHideFunc").checked; - var dataflowFileAccesses = document.getElementById("dataflowShowAccesses").selectedOptions[0].index; - var dataflowEvaluation = document.getElementById("dataflowEvaluation").selectedOptions[0].index; - var dataflowGroup = document.getElementById("dataflowGroup").selectedOptions[0].index; - var dataflowMode = document.getElementById("dataflowMode").selectedOptions[0].value; - var dataflowDepth = document.getElementById("dataflowDepth").value; - var dataflowValueLength = document.getElementById("dataflowValueLength").value; - var dataflowName = document.getElementById("dataflowName").value; - var trialId = parent.getAttribute("selected-trial"); - selectedEvaluation = dataflowTextInputEvaluation.getAttribute("selectedEvaluationID"); - var dataflowUrl = "/commands/dataflow/" + trialId + "/" + dataFlowShowType + "/" + dataFlowHideTimestamps + "/" + dataFlowHideInternals + "/" + dataFlowHideNotCode + "/" + dataFlowActivationNames + "/" + dataFlowHideFunc + "/" + dataflowFileAccesses + "/" + dataflowEvaluation + "/" + dataflowGroup + "/" + dataflowDepth + "/" + dataflowValueLength + "/" + dataflowName + "/" + dataflowMode; - dataflowUrl += selectedEvaluation && !selectedEvaluation.includes("undefined") ? "/true/" + selectedEvaluation : "/false/0"; - var dataflowWindowId = "Dataflow window " + trialId; - - /* if (document.getElementById(dataflowWindowId)) { - window.alert("Close trial " + trialId + " dataflow tab before generating a new dataflow"); - return; - } */ - - if (document.getElementById(dataflowWindowId)) dataflowWindowId += crypto.randomUUID(); - fetch(dataflowUrl, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - console.log(dataflowMode); - cleanModalBodyAndClose(modal, modalBody); - getDataflow(response, config, parent, dataflowWindowId, dataflowUrl); - }); - }); - }); - }); -} -function addsAutocompleteToDataflowWDF(dataflowEvaluationInput, dataflowTextInputEvaluation, evaluationList) { - dataflowEvaluationInput.on("keyup", function () { - var input = dataflowTextInputEvaluation.value; - var autocompleteSuggestionsResults = document.getElementById("autocompleteSuggestionsResults"); - var evaluationInputHint = document.getElementById("dataflowSelectEvaluationHelp"); - autocompleteSuggestionsResults.innerHTML = ""; - var suggestions; - if (input == "") { - autocompleteSuggestionsResults.setAttribute("style", ""); - evaluationInputHint.style.opacity = "1"; - suggestions = []; - dataflowTextInputEvaluation.setAttribute("selectedEvaluationID", "undefined"); - } else { - autocompleteSuggestionsResults.style.border = "1px solid #ccc"; - autocompleteSuggestionsResults.style.padding = "3px"; - autocompleteSuggestionsResults.style.marginTop = "-3rem"; - evaluationInputHint.style.opacity = "0"; - suggestions = evaluationList.filter(function (evaluation) { - if (evaluation.name.includes(input)) return evaluation; - }); - autocompleteSuggestionsResults.innerHTML = "
    "; - var _loop4 = function _loop4(i) { - var evaluationSuggestionId = suggestions[i].evaluation_id + " " + "evaluationSuggestionItem"; - (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById("dataflowEvaluationSuggestionsBoxId")).append("li").attr("id", evaluationSuggestionId).style("padding", "5px 0").style("z-index", 1).text("Evaluation: " + suggestions[i].name + " " + "Code_line: " + suggestions[i].first_char_line).on("click", function () { - dataflowTextInputEvaluation.value = suggestions[i].name; - input = suggestions[i].name; - dataflowTextInputEvaluation.setAttribute("selectedEvaluationID", suggestions[i].evaluation_id); - }).on("mouseover", function () { - (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(evaluationSuggestionId)).style("background-color", "#eee"); - }).on("mouseout", function () { - (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(evaluationSuggestionId)).style("background-color", ""); - }); - }; - for (var i = 0; i < suggestions.length; i++) { - _loop4(i); - } - } - }); -} -function downloadDataflowAsSVG(dataflowWindow, dataflowWindowId, dataflowDOT, appendDiv) { - var div = appendDiv ? (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(dataflowWindow).append("div").attr("id", dataflowWindowId + "-downloadDiv") : (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(dataflowWindowId + "-downloadDiv")); - div.append("a").classed("toollink", true).attr("id", dataflowWindowId + "-downloadSVG").attr("href", "#").style("color", "black").style("margin-right", "10px").attr("title", "Download dataflow SVG").on("click", function () { - (0,_viz_js_viz__WEBPACK_IMPORTED_MODULE_9__.instance)().then(function (viz) { - var svgElement = viz.renderSVGElement(dataflowDOT); - file_saver__WEBPACK_IMPORTED_MODULE_8__.saveAs(new Blob([svgElement.outerHTML], { - type: "image/svg+xml" - }), "dataflow.svg"); - }); - //fs.saveAs(new Blob([dataflowWindow!.getElementsByTagName("svg")[0].outerHTML], { type: "image/svg+xml" }), "dataflow.svg"); - }).append("i").classed("fa fa-download", true); -} -function downloadDataflowAsDOT(dataflowWindow, dataflowWindowId, dataflowDOT, appendDiv) { - var div = appendDiv ? (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(dataflowWindow).append("div").attr("id", dataflowWindowId + "-downloadDiv") : (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(dataflowWindowId + "-downloadDiv")); - div.append("a").classed("toollink", true).attr("id", dataflowWindowId + "-downloadDOT").attr("href", "#").style("color", "black").attr("title", "Download dataflow DOT").on("click", function () { - file_saver__WEBPACK_IMPORTED_MODULE_8__.saveAs(new Blob([dataflowDOT.trim()], { - type: "text/plain;charset=utf-8" - }), "dataflow.dot"); - }).append("i").classed("fa fa-file-text", true); -} -function dataflowButtons(dataflowWindow, dataflowWindowId, excludeProvenanceHint, dataflowDOT) { - downloadDataflowAsSVG(dataflowWindow, dataflowWindowId, dataflowDOT, true); - downloadDataflowAsDOT(dataflowWindow, dataflowWindowId, dataflowDOT, false); - excludePriorProvenanceHint(dataflowWindow, excludeProvenanceHint); - checkboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow); -} -function getRestoreOrCollabCommand(serverUrl, form, modalBody) { - fetch(serverUrl, { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }).then(function (response) { - response.json().then(function (json) { - form.remove(); - if (response.status == 200 && (!json.terminal_text.includes("not") || serverUrl.includes("edit"))) { - addAlert(modalBody, "alert-success", "Success!", json.terminal_text); - } else { - addAlert(modalBody, "alert-danger", "Error!", json.terminal_text); - } - }); - }); -} -function changeTitle(parent, commandTitle) { - var trialIdTitle = parent.getAttribute("selected-trial-simplified"); - document.getElementById("exampleModalTitle").textContent = commandTitle + trialIdTitle; -} -function cleanModalBodyAndClose(modal, modalBody) { - document.getElementsByClassName("modal-body")[0].textContent = ""; - modalBody.style("height", null); - hideModal(modal); -} -function addAlert(div, alertType, title, text) { - var feedbackAlert = div.append("div").classed("alert " + alertType, true).attr("role", "alert"); - feedbackAlert.append("h4").text(title).append("button").classed("close", true).attr("type", "button").text("x").on("click", function () { - feedbackAlert.remove(); - }); - feedbackAlert.append("p").text(text); -} -function createFormCheckInput(form, checkInputId, text) { - var checkDiv = form.append("div").classed("form-check", true); - checkDiv.append("input").classed("form-check-input", true).attr("value", "").attr("id", checkInputId).attr("type", "checkbox"); - checkDiv.append("label").classed("form-check-label", true).attr("for", checkInputId).text(text); -} -function createFormTextInput(form, textInputId, text, helpId, helpText) { - var textDiv = form.append("div").classed("form-group", true); - textDiv.append("label").attr("for", textInputId).text(text); - var textInput = textDiv.append("textarea").classed("form-control", true).attr("id", textInputId); - if (helpId && helpText) { - textInput.attr("aria-describedby", helpId); - textDiv.append("small").classed("form-text text-muted", true).attr("id", helpId).text(helpText); - } - return textDiv; -} -function createFormSelectInput(form, selectId, selectText, minOptionNumber, maxOptionNumber, defaultOption, helpId, helpText, optionsLabels) { - var selectDiv = form.append("div").classed("form-group", true); - var selectInput = selectDiv.append("label").attr("for", selectId).text(selectText).append("select").classed("form-control", true).attr("id", selectId); - if (helpId && helpText) { - selectInput.attr("aria-describedby", helpId); - selectDiv.append("small").classed("form-text text-muted", true).attr("id", helpId).text(helpText); - } - for (var optionNumber = minOptionNumber; optionNumber <= maxOptionNumber; optionNumber++) { - var inputLabel = optionsLabels ? optionsLabels[optionNumber] : optionNumber; - var input = selectInput.append("option").text(inputLabel); - if (defaultOption && optionNumber == defaultOption) input.attr("selected", "selected"); - } -} -function createFormNumberInput(form, id, text, minValue, defaultValue, helpId, helpText) { - var numberDiv = form.append("div").classed("form-group", true); - numberDiv.append("label").classed("form-check-label", true).attr("for", id).text(text); - numberDiv.append("input").attr("type", "number").attr("id", id).attr("min", minValue).attr("value", defaultValue).attr("oninput", "validity.valid||(value='');").attr("aria-describedby", "dataflowDepthHelp"); - if (helpId && helpText) { - numberDiv.attr("aria-describedby", helpId); - numberDiv.append("small").classed("form-text text-muted", true).attr("id", helpId).text(helpText); - } -} -function getTextInputFormByID(id, replace) { - var formTextInput = document.getElementById(id).value; - if (replace) formTextInput.replace("/", "%2F").replace("\\", "%5C"); - if (!formTextInput) formTextInput = false; - return formTextInput; -} -function hideModal(modal) { - if (modal) modal.style("display", "none").style("padding-right", "").classed("show", false).attr("aria-hidden", "true"); -} -function showModal(modal) { - if (modal) modal.style("display", "block").style("padding-right", "17px").classed("show", true).attr("aria-hidden", "false"); -} - -/***/ }), - -/***/ "./src/graph/trial_graph.ts": -/*!**********************************!*\ - !*** ./src/graph/trial_graph.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ TrialGraphWidget: () => (/* binding */ TrialGraphWidget) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _base_activation_graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base_activation_graph */ "./src/graph/base_activation_graph.ts"); -/* harmony import */ var _noworkflow_trial__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @noworkflow/trial */ "../trial/lib/index.js"); -/* harmony import */ var _noworkflow_trial__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_trial__WEBPACK_IMPORTED_MODULE_2__); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _superPropGet(t, e, o, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; } -function _get() { return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); } -function _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - - -var TrialGraphWidget = /*#__PURE__*/function (_BaseActivationGraphW) { - function TrialGraphWidget(name, cls, t1, t2) { - var _this; - _classCallCheck(this, TrialGraphWidget); - _this = _callSuper(this, TrialGraphWidget, [{ - node: _base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget.createNode(cls) - }]); - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__["default"])(_this.node); - _this.d3node.select('.reload-button').on("click", function () { - _this.load(_this.d3node.select(".graph-type").property("value"), _this.d3node.select(".use-cache").property("checked")); - }); - _this.addClass('content'); - _this.addClass('trial-widget'); - _this.title.label = name; - _this.title.closable = true; - _this.title.caption = "".concat(name, " Graph"); - _this.name = name; - _this.cls = cls; - _this.t1 = t1; - _this.t2 = t2; - return _this; - } - _inherits(TrialGraphWidget, _BaseActivationGraphW); - return _createClass(TrialGraphWidget, [{ - key: "setGraph", - value: function setGraph(data) { - var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var sub = this.node.getElementsByClassName("sub-content")[0]; - sub.innerHTML = ""; - this.graph = new _noworkflow_trial__WEBPACK_IMPORTED_MODULE_2__.TrialGraph(this.cls, sub, config); - this.graph.load(data, this.t1, this.t2); - } - }, { - key: "graphDefinition", - value: function graphDefinition() { - var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; - var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var genDataflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var data = arguments.length > 3 ? arguments[3] : undefined; - var result = _superPropGet(TrialGraphWidget, "graphDefinition", this, 3)([selectedGraph, useCache, genDataflow, data]); - return Object.assign({}, result, { - queryTooltip: selectedGraph != "definition_tree" - }); - } - }, { - key: "load", - value: function load() { - var _this2 = this; - var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; - var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - var sub = this.node.getElementsByClassName("sub-content")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__.json)("Trial", sub, TrialGraphWidget.url(this.t1, selectedGraph, useCache), function (data) { - _this2.configureGraph(selectedGraph, useCache, true, data); - }); - } - }, { - key: "onResize", - value: function onResize(msg) { - if (this.graph) { - this.graph.config.width = this.node.getBoundingClientRect().width - 24; - this.graph.config.height = this.node.getBoundingClientRect().height - 24; - this.graph.updateWindow(); - } - } - }], [{ - key: "url", - value: function url(trialId, selectedGraph, useCache) { - var cache = useCache ? "1" : "0"; - return "trials/" + trialId + "/" + selectedGraph + "/" + cache + ".json"; - } - }]); -}(_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget); - -/***/ }), - -/***/ "./src/group_widget.ts": -/*!*****************************!*\ - !*** ./src/group_widget.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ GroupWidget: () => (/* binding */ GroupWidget) -/* harmony export */ }); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var _style_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../style/bootstrap.min.css */ "./style/bootstrap.min.css"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } -function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } -function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - -var GroupWidget = /*#__PURE__*/function (_Widget) { - function GroupWidget() { - var _this; - _classCallCheck(this, GroupWidget); - _this = _callSuper(this, GroupWidget, [{ - node: GroupWidget.createNode() - }]); - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); - _this.addClass('content'); - _this.title.label = "Group Information"; - _this.title.closable = false; - _this.title.caption = "Group"; - _this.setNode(); - return _this; - } - _inherits(GroupWidget, _Widget); - return _createClass(GroupWidget, [{ - key: "onBeforeShow", - value: function onBeforeShow(msg) { - if (!this.groups) { - this.setGroups(); - this.setUsers(); - } - } - }, { - key: "setUsers", - value: function () { - var _setUsers = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { - var _thiss, response, obj; - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - _thiss = this; - _thiss.userIn.html(""); - _context.next = 4; - return fetch("users", { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }); - case 4: - response = _context.sent; - if (!(response.status == 200)) { - _context.next = 13; - break; - } - _thiss.users = new Array(); - _context.next = 9; - return response.json(); - case 9: - obj = _context.sent; - obj.forEach(function (item) { - _thiss.users.push({ - id: item.id, - login: item.userLogin - }); - }); - _context.next = 14; - break; - case 13: - this.showNode(_thiss.errorFeedback); - case 14: - _thiss.users.forEach(function (obj) { - _thiss.userIn.append("option").attr("value", obj.id).text(obj.login); - }); - case 15: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function setUsers() { - return _setUsers.apply(this, arguments); - } - return setUsers; - }() - }, { - key: "resfreshGroups", - value: function resfreshGroups() { - this.tBody.html(""); - this.setGroups(); - } - }, { - key: "setGroups", - value: function () { - var _setGroups = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { - var _thiss, response, obj; - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - _thiss = this; - _context2.next = 3; - return fetch("groups", { - method: 'GET', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }); - case 3: - response = _context2.sent; - if (!(response.status == 200)) { - _context2.next = 12; - break; - } - _thiss.groups = new Array(); - _context2.next = 8; - return response.json(); - case 8: - obj = _context2.sent; - obj.forEach(function (item) { - var group = { - id: item.id, - name: item.name, - members: new Array() - }; - item.members.forEach(function (user) { - group.members.push({ - id: user.id, - login: user.userLogin - }); - }); - _thiss.groups.push(group); - }); - _context2.next = 13; - break; - case 12: - this.showNode(_thiss.errorFeedback); - case 13: - this.groups.forEach(function (obj) { - _thiss.addGrpRow(obj); - }); - case 14: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function setGroups() { - return _setGroups.apply(this, arguments); - } - return setGroups; - }() - }, { - key: "deleteGrp", - value: function () { - var _deleteGrp = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(grpId) { - var response; - return _regeneratorRuntime().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - _context3.next = 2; - return fetch("/groups/" + grpId, { - method: 'DELETE', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - } - }); - case 2: - response = _context3.sent; - if (response.status == 200) { - this.showNode(this.successFeedback); - this.resfreshGroups(); - } else { - this.showNode(this.errorFeedback); - } - case 4: - case "end": - return _context3.stop(); - } - }, _callee3, this); - })); - function deleteGrp(_x) { - return _deleteGrp.apply(this, arguments); - } - return deleteGrp; - }() - }, { - key: "addGrpRow", - value: function addGrpRow(grp) { - var _thiss = this; - var item = this.tBody.append("tr"); - item.append("th").attr("scope", "row").text(grp.id); - item.append("td").text(grp.name); - var membersText = ""; - grp.members.forEach(function (user) { - membersText += user.login + " "; - }); - item.append("td").text(membersText); - var actions = item.append("td"); - var addMemberButton = actions.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Add User"); - addMemberButton.on("click", function () { - _thiss.showNode(_thiss.addMemberForm); - _thiss.currentGroup = grp.id; - }); - var deleteGroupButton = actions.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Delete Group"); - deleteGroupButton.on("click", function () { - if (confirm("Are you sure you want to delete group: " + grp.name + " ?")) { - _thiss.deleteGrp(grp.id); - } - }); - deleteGroupButton.style("margin-left", 4); - } - }, { - key: "addFormInput", - value: function addFormInput(form, fieldId, fieldLabel, fieldType) { - var grp = form.append("div").classed("form-group row", true); - grp.append("label").classed("col-sm-2 col-form-label", true).attr("for", fieldId).text(fieldLabel + ": "); - var divIn = grp.append("div").classed("col-sm-10", true); - var inp = divIn.append(fieldType); - inp.classed("form-control", true).attr("id", fieldId); - return inp; - } - }, { - key: "addFeedBackinfo", - value: function addFeedBackinfo(baseNode, cls, txt, desc) { - var _thiss = this; - var feedbackNode = baseNode.append("div").classed("alert", true).classed(cls, true).classed("alert-dismissible", true).classed("fade", true).classed("show", true); - feedbackNode.append("strong").text(txt); - feedbackNode.append("span").text(" " + desc).append("button").attr("type", "button").classed("close", true).attr("data-dismiss", "alert").text("x").on("click", function () { - _thiss.hideNode(feedbackNode); - }); - return feedbackNode; - } - }, { - key: "hideNode", - value: function hideNode(node) { - node.classed("d-none", true); - } - }, { - key: "showNode", - value: function showNode(node) { - node.classed("d-none", false); - } - }, { - key: "createAddGroupForm", - value: function createAddGroupForm(projectsDiv) { - var _thiss = this; - var inputsDiv = projectsDiv.append("div"); - var nameIn = this.addFormInput(inputsDiv, "groupNameInput", "Name: ", "input"); - var confimButton = inputsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Confirm"); - var addGrpButton = projectsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Add Group"); - inputsDiv.classed("d-none", true); - confimButton.on("click", function () { - _thiss.hideNode(_thiss.errorFeedback); - _thiss.hideNode(_thiss.successFeedback); - var newGrp = { - name: nameIn.property("value"), - members: new Array() - }; - fetch("groups", { - method: 'POST', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(newGrp) // body data type must match "Content-Type" header - }).then(function (response) { - if (response.status == 201) { - response.json().then(function (obj) { - newGrp.id = obj.id; - _thiss.addGrpRow(newGrp); - _thiss.hideNode(inputsDiv); - _thiss.showNode(addGrpButton); - _thiss.showNode(_thiss.successFeedback); - }); - } else { - _thiss.showNode(_thiss.errorFeedback); - } - }); - }); - addGrpButton.on("click", function () { - _thiss.showNode(inputsDiv); - _thiss.hideNode(addGrpButton); - }); - } - }, { - key: "createAddMemberForm", - value: function createAddMemberForm(projectsDiv) { - var _thiss = this; - _thiss.addMemberForm = projectsDiv.append("div"); - var inputsDiv = _thiss.addMemberForm; - this.userIn = this.addFormInput(inputsDiv, "groupUsersInput", "User", "select"); - var confimButton = inputsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Confirm"); - confimButton.on("click", function () { - _thiss.hideNode(_thiss.errorFeedback); - _thiss.hideNode(_thiss.successFeedback); - var select = _thiss.userIn.node(); - if (select != null) { - var option = select.options[select.selectedIndex]; - var newGrp = { - userId: option.value - }; - fetch("groups/" + _thiss.currentGroup + "/users", { - method: 'POST', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(newGrp) // body data type must match "Content-Type" header - }).then(function (response) { - if (response.status == 201) { - response.json().then(function (obj) { - _thiss.hideNode(_thiss.addMemberForm); - _thiss.showNode(_thiss.successFeedback); - _thiss.resfreshGroups(); - }); - } else { - _thiss.showNode(_thiss.errorFeedback); - } - }); - } - }); - _thiss.hideNode(_thiss.addMemberForm); - } - }, { - key: "setNode", - value: function setNode() { - var content = this.d3node.append('div').classed('config-content', true); - var projectsDiv = content.append("div"); - projectsDiv.append("h2").text("Groups:"); - this.errorFeedback = this.addFeedBackinfo(projectsDiv, "alert-danger", "Error!", "A problem has been occurred while submitting your data."); - this.successFeedback = this.addFeedBackinfo(projectsDiv, "alert-success", "Success!", ""); - this.hideNode(this.errorFeedback); - this.hideNode(this.successFeedback); - this.createAddMemberForm(projectsDiv); - projectsDiv.append("br"); - this.createAddGroupForm(projectsDiv); - var table = projectsDiv.append("table").classed("table", true); - var header = table.append("thead").append("tr"); - header.append("th").attr("scope", "col").text("id"); - header.append("th").attr("scope", "col").text("name"); - header.append("th").attr("scope", "col").text("Members"); - header.append("th").attr("scope", "col").text("Actions"); - this.tBody = table.append("tbody"); - } - }], [{ - key: "createNode", - value: function createNode() { - var node = document.createElement('div'); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/info/diff_info.ts": -/*!*******************************!*\ - !*** ./src/info/diff_info.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ DiffInfoWidget: () => (/* binding */ DiffInfoWidget) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _modules_info__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules_info */ "./src/info/modules_info.ts"); -/* harmony import */ var _environment_info__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./environment_info */ "./src/info/environment_info.ts"); -/* harmony import */ var _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./file_accesses_info */ "./src/info/file_accesses_info.ts"); -/* harmony import */ var _trial_info__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./trial_info */ "./src/info/trial_info.ts"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - - - - - -var DiffInfoWidget = /*#__PURE__*/function (_Widget) { - function DiffInfoWidget(display1, display2, trial1, trial2) { - var _this; - _classCallCheck(this, DiffInfoWidget); - _this = _callSuper(this, DiffInfoWidget, [{ - node: DiffInfoWidget.createNode() - }]); - _this.display1 = display1; - _this.display2 = display2; - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__["default"])(_this.node); - _this.addClass('content'); - _this.addClass('trial-info'); - _this.title.label = display1 + "<->" + display2 + " - Diff Info"; - _this.title.closable = true; - _this.title.caption = "Diff ".concat(display1, "-").concat(display2, " Information"); - _this.load(trial1, trial2); - return _this; - } - _inherits(DiffInfoWidget, _Widget); - return _createClass(DiffInfoWidget, [{ - key: "load", - value: function load(trial1, trial2) { - var _this2 = this; - var sub = this.node.getElementsByClassName("trial-info")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Info", sub, DiffInfoWidget.url(trial1, trial2), function (data) { - _this2.createMain(data); - _this2.loadModules(trial1, trial2); - _this2.loadEnvironment(trial1, trial2); - _this2.loadFileAccess(trial1, trial2); - }); - } - }, { - key: "createMain", - value: function createMain(data) { - var trial = data.trial; - var trial1 = data.trial1; - var trial2 = data.trial2; - var content = this.d3node.select('.trial-info').html("").append('div').classed('side-info', true); - var main = content.append('div').classed('main', true); - var h1 = main.append("h1"); - - // Title - h1.append("span").classed("dbefore", true).text("Trial " + this.display1); - h1.append("span").text(" <-> "); - h1.append("span").classed("dafter", true).text("Trial " + this.display2); - - // Code hash - if (trial.code_hash == undefined) { - main.append("h3").classed("hash", true).text(trial1.code_hash || ""); - } else { - main.append("h3").classed("hash dbefore", true).text(trial.code_hash[0] || ""); - main.append("h3").classed("hash dafter", true).text(trial.code_hash[1] || ""); - } - this.info(main, "id", "Id", trial1.id, trial2.id); - this.info(main, "script", "Script", trial1.script, trial2.script); - this.info(main, "start", "Start", trial1.start, trial2.start); - this.info(main, "finish", "Finish", trial1.finish, trial2.finish); - this.info(main, "duration", "Duration", trial1.duration_text, trial2.duration_text); - if (trial.arguments == undefined) { - if (trial1.arguments) { - var attr = main.append("span").classed("attr", true); - attr.append("span").classed("desc", true).text("Arguments: "); - attr.append("span").classed("arguments", true).text(trial1.arguments); - } - } else { - if (trial1.arguments) { - var _attr = main.append("span").classed("attr", true); - _attr.append("span").classed("desc dbefore", true).text("Arguments: "); - _attr.append("span").classed("arguments", true).text(trial1.arguments); - } - if (trial2.arguments) { - var _attr2 = main.append("span").classed("attr", true); - _attr2.append("span").classed("desc dafter", true).text("Arguments: "); - _attr2.append("span").classed("arguments", true).text(trial2.arguments); - } - } - content.append("div").classed("modules", true); - content.append("div").classed("environment", true); - content.append("div").classed("file-accesses", true); - } - }, { - key: "filter_trial", - value: function filter_trial(filter, filterfn) { - var select_trial = filter.filterdiv.append("select"); - select_trial.append("option").attr("value", "3").text("Do not filter Trial"); - select_trial.append("option").attr("value", "1").text("First Trial Only"); - select_trial.append("option").attr("value", "5").text("Exists in First Trial"); - select_trial.append("option").attr("value", "2").text("Second Trial Only"); - select_trial.append("option").attr("value", "6").text("Exists in Second Trial"); - select_trial.append("option").attr("value", "4").text("Both Trials Only"); - select_trial.property("value", "3"); - var newfilter = function newfilter() { - filterfn(Number(select_trial.property("value"))); - }; - select_trial.on("change", newfilter); - filter.on_change(newfilter); - } - }, { - key: "loadModules", - value: function loadModules(trial1, trial2) { - var _this3 = this; - var sub = this.node.getElementsByClassName("modules")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Modules", sub, DiffInfoWidget.modules_url(trial1, trial2), function (data) { - var modules = _this3.d3node.select(".modules").html(""); - if (data.modules_added.length > 0 || data.modules_removed.length > 0 || data.modules_replaced.length > 0) { - var fold = _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFold(modules, "Modules"); - var foldable = modules.append("div").classed("foldable show-toolbar", true); - var filter = _modules_info__WEBPACK_IMPORTED_MODULE_2__.ModulesInfoWidget.createFilter(foldable); - var ul = foldable.append("ul").classed("mod-list", true); - _this3.filter_trial(filter, function (strial) { - ul.html(""); - if ((strial & 1) == 1) { - var _iterator = _createForOfIteratorHelper(data.modules_removed), - _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var element = _step.value; - if (!filter.valid(data.t1_path, element)) { - continue; - } - _this3.mod_li(ul, 'libefore', element); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - } - if ((strial & 2) == 2) { - var _iterator2 = _createForOfIteratorHelper(data.modules_added), - _step2; - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var element = _step2.value; - if (!filter.valid(data.t2_path, element)) { - continue; - } - _this3.mod_li(ul, 'liafter', element); - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - } - if (strial >= 3) { - var _iterator3 = _createForOfIteratorHelper(data.modules_replaced), - _step3; - try { - for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { - var elements = _step3.value; - var rem = elements[0], - add = elements[1]; - if (!filter.valid(data.t1_path, rem) || !filter.valid(data.t2_path, add)) { - continue; - } - var li = ul.append("li"); - li.append("div").classed("name", true).text(rem.name); - var version = li.append("div").classed("version", true); - version.append("div").classed("dbefore", true).text(rem.version); - version.append("div").classed("dafter", true).text(add.version); - li.append("div").classed("clear", true); - li.append("div").classed("hash dbefore", true).attr("title", rem.path).text(rem.code_hash); - li.append("div").classed("hash dafter", true).attr("title", add.path).text(add.code_hash); - } - } catch (err) { - _iterator3.e(err); - } finally { - _iterator3.f(); - } - } - }); - _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFilterFold(fold, filter); - } - }); - } - }, { - key: "loadEnvironment", - value: function loadEnvironment(trial1, trial2) { - var _this4 = this; - var sub = this.node.getElementsByClassName("environment")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Environment", sub, DiffInfoWidget.environment_url(trial1, trial2), function (data) { - var environment = _this4.d3node.select(".environment").html(""); - if (data.env_added.length > 0 || data.env_removed.length > 0 || data.env_replaced.length > 0) { - var fold = _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFold(environment, "Environment"); - var foldable = environment.append("div").classed("foldable show-toolbar", true); - var filter = _environment_info__WEBPACK_IMPORTED_MODULE_3__.EnvironmentInfoWidget.createFilter(foldable); - var ul = foldable.append("ul").classed("env-list", true); - _this4.filter_trial(filter, function (strial) { - ul.html(""); - if ((strial & 1) == 1) { - var _iterator4 = _createForOfIteratorHelper(data.env_removed), - _step4; - try { - for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { - var element = _step4.value; - if (!filter.valid(element)) { - continue; - } - _this4.env_li(ul, 'dbefore', element); - } - } catch (err) { - _iterator4.e(err); - } finally { - _iterator4.f(); - } - } - if ((strial & 2) == 2) { - var _iterator5 = _createForOfIteratorHelper(data.env_added), - _step5; - try { - for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { - var element = _step5.value; - if (!filter.valid(element)) { - continue; - } - _this4.env_li(ul, 'dafter', element); - } - } catch (err) { - _iterator5.e(err); - } finally { - _iterator5.f(); - } - } - if (strial >= 3) { - var _iterator6 = _createForOfIteratorHelper(data.env_replaced), - _step6; - try { - for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { - var elements = _step6.value; - var rem = elements[0], - add = elements[1]; - if (!filter.valid(rem) || !filter.valid(add)) { - continue; - } - _this4.env_cli(ul, rem, add); - } - } catch (err) { - _iterator6.e(err); - } finally { - _iterator6.f(); - } - } - }); - _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFilterFold(fold, filter); - } - }); - } - }, { - key: "loadFileAccess", - value: function loadFileAccess(trial1, trial2) { - var _this5 = this; - var sub = this.node.getElementsByClassName("file-accesses")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("File Accesses", sub, DiffInfoWidget.accesses_url(trial1, trial2), function (data) { - var accesses = _this5.d3node.select(".file-accesses").html(""); - if (data.fa_added.length > 0 || data.fa_removed.length > 0 || data.fa_replaced.length > 0) { - var fold = _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFold(accesses, "File Accesses"); - var foldable = accesses.append("div").classed("foldable show-toolbar", true); - var filter = _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__.FileAccessesInfoWidget.createFilter(foldable); - var ul = foldable.append("ul").classed("fac-list", true); - _this5.filter_trial(filter, function (strial) { - ul.html(""); - if ((strial & 1) == 1) { - var _iterator7 = _createForOfIteratorHelper(data.fa_removed), - _step7; - try { - for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { - var element = _step7.value; - if (!filter.valid(data.t1_path, element)) { - continue; - } - _this5.fa_li(ul, 'libefore', element); - } - } catch (err) { - _iterator7.e(err); - } finally { - _iterator7.f(); - } - } - if ((strial & 2) == 2) { - var _iterator8 = _createForOfIteratorHelper(data.fa_added), - _step8; - try { - for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { - var element = _step8.value; - if (!filter.valid(data.t2_path, element)) { - continue; - } - _this5.fa_li(ul, 'liafter', element); - } - } catch (err) { - _iterator8.e(err); - } finally { - _iterator8.f(); - } - } - if (strial >= 3) { - var _iterator9 = _createForOfIteratorHelper(data.fa_replaced), - _step9; - try { - for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { - var elements = _step9.value; - var rem = elements[0], - add = elements[1]; - if (!filter.valid(data.t1_path, rem) || !filter.valid(data.t2_path, add)) { - continue; - } - var li = ul.append("li"); - _this5.fa_cfield(li, 'name', 'Name', rem.name, add.name); - _this5.fa_cfield(li, 'mode', 'Mode', rem.mode, add.mode); - _this5.fa_cfield(li, 'buffering', 'Buffering', rem.buffering, add.buffering); - li.append("div").classed("clear", true); - _this5.fa_cfield(li, 'timestamp', 'Time', rem.timestamp, add.timestamp); - _this5.fa_cfield(li, 'content_hash_before hash', 'Content hash before', rem.content_hash_before, add.content_hash_before); - _this5.fa_cfield(li, 'content_hash_after hash', 'Content hash after', rem.content_hash_after, add.content_hash_after); - _this5.fa_cfield(li, 'stack', 'Stack', rem.stack, add.stack); - } - } catch (err) { - _iterator9.e(err); - } finally { - _iterator9.f(); - } - } - }); - _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFilterFold(fold, filter); - } - }); - } - }, { - key: "info", - value: function info(main, cls, label, value1, value2) { - if (value1 == value2) { - var attr = main.append("span").classed("attr", true); - attr.append("span").classed("desc", true).text(label + ": "); - attr.append("span").classed(cls, true).text(value1); - } else { - var attr1 = main.append("span").classed("attr dbefore", true); - attr1.append("span").classed("desc", true).text(label + ": "); - attr1.append("span").classed(cls, true).text(value1); - var attr2 = main.append("span").classed("attr dafter", true); - attr2.append("span").classed("desc", true).text(label + ": "); - attr2.append("span").classed(cls, true).text(value2); - } - } - }, { - key: "mod_li", - value: function mod_li(element, cls, mod) { - var li = element.append("li").classed(cls, true); - li.append("div").classed("name", true).text(mod.name); - li.append("div").classed("version", true).text(mod.version); - li.append("div").classed("clear", true); - li.append("div").classed("hash", true).attr("title", mod.path).text(mod.code_hash); - } - }, { - key: "env_field", - value: function env_field(element, env) { - element.append("span").classed("key", true).text(env.name); - element.append("span").classed("equal", true).text(" = "); - element.append("span").classed("value", true).text(env.value); - } - }, { - key: "env_li", - value: function env_li(element, cls, env) { - this.env_field(element.append("li").classed(cls, true), env); - } - }, { - key: "env_cli", - value: function env_cli(element, rem, add) { - var li = element.append("li"); - this.env_field(li.append("div").classed("dbefore", true), rem); - this.env_field(li.append("div").classed("dafter", true), add); - } - }, { - key: "fa_field", - value: function fa_field(element, cls, title, value) { - element.append("div").classed(cls, true).attr("title", title).text(value); - } - }, { - key: "fa_li", - value: function fa_li(element, cls, fa) { - var li = element.append("li").classed(cls, true); - this.fa_field(li, 'name', 'Name', fa.name); - this.fa_field(li, 'mode', 'Mode', fa.mode); - this.fa_field(li, 'buffering', 'Buffering', fa.buffering); - li.append("div").classed("clear", true); - this.fa_field(li, 'timestamp', 'Time', fa.timestamp); - this.fa_field(li, 'content_hash_before hash', 'Content hash before', fa.content_hash_before); - this.fa_field(li, 'content_hash_after hash', 'Content hash after', fa.content_hash_after); - this.fa_field(li, 'stack', 'Stack', fa.stack); - } - }, { - key: "fa_cfield", - value: function fa_cfield(element, cls, title, v1, v2) { - if (v1 == v2) { - this.fa_field(element, cls, title, v1); - } else { - this.fa_field(element, cls + " dbefore", title, v1); - this.fa_field(element, cls + " dafter", title, v2); - } - } - }], [{ - key: "url", - value: function url(trial1, trial2) { - return "diff/" + trial1 + "/" + trial2 + "/info.json"; - } - }, { - key: "modules_url", - value: function modules_url(trial1, trial2) { - return "diff/" + trial1 + "/" + trial2 + "/dependencies.json"; - } - }, { - key: "environment_url", - value: function environment_url(trial1, trial2) { - return "diff/" + trial1 + "/" + trial2 + "/environment.json"; - } - }, { - key: "accesses_url", - value: function accesses_url(trial1, trial2) { - return "diff/" + trial1 + "/" + trial2 + "/file_accesses.json"; - } - }, { - key: "createNode", - value: function createNode() { - var node = document.createElement('div'); - var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__["default"])(node); - d3node.append('div').classed('trial-info', true); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/info/environment_info.ts": -/*!**************************************!*\ - !*** ./src/info/environment_info.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ EnvironmentInfoWidget: () => (/* binding */ EnvironmentInfoWidget) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - -var EnvironmentInfoWidget = /*#__PURE__*/function (_Widget) { - function EnvironmentInfoWidget(trialDisplay, data) { - var _this; - var default_local = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "0"; - _classCallCheck(this, EnvironmentInfoWidget); - _this = _callSuper(this, EnvironmentInfoWidget, [{ - node: EnvironmentInfoWidget.createNode(trialDisplay, data, default_local) - }]); - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(_this.node); - _this.addClass('content'); - _this.addClass('trial-info-list'); - _this.title.label = trialDisplay + "- Environment"; - _this.title.closable = true; - _this.title.caption = "Trial ".concat(trialDisplay, " Environment"); - return _this; - } - _inherits(EnvironmentInfoWidget, _Widget); - return _createClass(EnvironmentInfoWidget, null, [{ - key: "url", - value: function url(trialId) { - return "trials/" + trialId + "/environment.json"; - } - }, { - key: "createItem", - value: function createItem(parent, key, value) { - if (value) { - var li = parent.append("li"); - li.append("span").classed("key", true).text(key); - li.append("span").classed("equal", true).text(" = "); - li.append("span").classed("value", true).text(value); - } - } - }, { - key: "createFilterDiv", - value: function createFilterDiv(parent) { - return parent.append("div"); - } - }, { - key: "createFilter", - value: function createFilter(parent) { - var default_local = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "0"; - var filterdiv = this.createFilterDiv(parent); - var text_filter = filterdiv.append("input").attr("type", "search"); - var select_local = filterdiv.append("select"); - select_local.append("option").attr("value", "0").text("Do not filter Main"); - select_local.append("option").attr("value", "1").text("Main Environment Only"); - select_local.append("option").attr("value", "2").text("Non-Main Environment Only"); - select_local.property("value", default_local); - return { - filterdiv: filterdiv, - valid: function valid(element) { - var stext = text_filter.property("value").toLowerCase(); - var slocal = Number(select_local.property("value")); - var check_text = function check_text() { - return element.name.toLowerCase().indexOf(stext) >= 0 || element.value.toLowerCase().indexOf(stext) >= 0; - }; - var check_local = function check_local() { - if (slocal == 0) return true; - switch (element.name) { - case 'PYTHON_IMPLEMENTATION': - case 'PYTHON_VERSION': - case 'OS_NAME': - case 'OS_RELEASE': - case 'OS_USER': - case 'PWD': - case 'PID': - case 'HOSTNAME': - case 'ARCH': - case 'PROCESSOR': - return slocal == 1; - default: - return slocal != 1; - } - }; - return check_text() && check_local(); - }, - on_change: function on_change(filterfn) { - text_filter.on("keyup", filterfn); - select_local.on("change", filterfn); - filterfn(); - } - }; - } - }, { - key: "createList", - value: function createList(parent, data) { - var default_local = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "0"; - var filter = EnvironmentInfoWidget.createFilter(parent, default_local); - var list = parent.append("ul").classed("env-list", true); - filter.on_change(function () { - list.html(""); - var _iterator = _createForOfIteratorHelper(data), - _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var element = _step.value; - if (!filter.valid(element)) { - continue; - } - EnvironmentInfoWidget.createItem(list, element.name, element.value); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - }); - return filter; - } - }, { - key: "createNode", - value: function createNode(trialDisplay, data) { - var default_local = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "0"; - var node = document.createElement('div'); - var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(node); - var content = d3node.append('div').classed('list', true).append('div').classed('side-info', true); - content.append("div").classed("main", true).append("h1").text("Environment (" + trialDisplay + ")"); - EnvironmentInfoWidget.createList(content, data, default_local); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/info/file_accesses_info.ts": -/*!****************************************!*\ - !*** ./src/info/file_accesses_info.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ FileAccessesInfoWidget: () => (/* binding */ FileAccessesInfoWidget) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - -var FileAccessesInfoWidget = /*#__PURE__*/function (_Widget) { - function FileAccessesInfoWidget(trialDisplay, data, trial_path) { - var _this; - var default_local = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "0"; - _classCallCheck(this, FileAccessesInfoWidget); - _this = _callSuper(this, FileAccessesInfoWidget, [{ - node: FileAccessesInfoWidget.createNode(trialDisplay, data, trial_path, default_local) - }]); - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(_this.node); - _this.addClass('content'); - _this.addClass('trial-info-list'); - _this.title.label = trialDisplay + "- Accesses"; - _this.title.closable = true; - _this.title.caption = "Trial ".concat(trialDisplay, " Accesses"); - return _this; - } - _inherits(FileAccessesInfoWidget, _Widget); - return _createClass(FileAccessesInfoWidget, null, [{ - key: "url", - value: function url(trialId) { - return "trials/" + trialId + "/file_accesses.json"; - } - }, { - key: "createFilterDiv", - value: function createFilterDiv(parent) { - return parent.append("div"); - } - }, { - key: "createFilter", - value: function createFilter(parent) { - var default_local = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "0"; - var filterdiv = this.createFilterDiv(parent); - var text_filter = filterdiv.append("input").attr("placeholder", "Name").attr("type", "search"); - var mode_filter = filterdiv.append("input").attr("placeholder", "Mode").attr("type", "search"); - var select_hash = filterdiv.append("select"); - select_hash.append("option").attr("value", "0").text("Do not filter Existence"); - select_hash.append("option").attr("value", "1").text("Exists only before trial"); - select_hash.append("option").attr("value", "2").text("Exists only after trial"); - select_hash.append("option").attr("value", "3").text("Changes during trial"); - select_hash.append("option").attr("value", "7").text("Does not change during trial"); - select_hash.property("value", "0"); - var select_local = filterdiv.append("select"); - select_local.append("option").attr("value", "0").text("Do not filter Locality"); - select_local.append("option").attr("value", "1").text("Local files only"); - select_local.append("option").attr("value", "2").text("Non-local files only"); - select_local.property("value", default_local); - return { - filterdiv: filterdiv, - valid: function valid(local, element) { - var stext = text_filter.property("value").toLowerCase(); - var smode = mode_filter.property("value").toLowerCase(); - var shash = Number(select_hash.property("value")); - var slocal = Number(select_local.property("value")); - var check_text = function check_text() { - return element.name.toLowerCase().indexOf(stext) >= 0; - }; - var check_mode = function check_mode() { - return element.mode.toLowerCase().indexOf(smode) >= 0; - }; - var check_hash = function check_hash() { - if ((shash & 1) == 1 && element.content_hash_before == null) return false; - if ((shash & 2) == 2 && element.content_hash_after == null) return false; - if (shash == 1) return element.content_hash_after == null; - if (shash == 2) return element.content_hash_before == null; - if (shash == 3) return element.content_hash_before != element.content_hash_after; - if (shash == 4) return element.content_hash_before == element.content_hash_after; - return true; - }; - var check_local = function check_local() { - if (slocal == 0) return true; - if (!/^((\/)|(\w+:\\))/.test(element.name)) return slocal == 1; // not absolute path - if (element.name.startsWith(local)) return slocal == 1; - return slocal != 1; - }; - return check_text() && check_mode() && check_hash() && check_local(); - }, - on_change: function on_change(filterfn) { - text_filter.on("keyup", filterfn); - mode_filter.on("keyup", filterfn); - select_hash.on("change", filterfn); - select_local.on("change", filterfn); - filterfn(); - } - }; - } - }, { - key: "createList", - value: function createList(parent, data, trial_path) { - var default_local = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "0"; - var filter = FileAccessesInfoWidget.createFilter(parent, default_local); - var list = parent.append("ul").classed("fac-list", true); - filter.on_change(function () { - list.html(""); - var _iterator = _createForOfIteratorHelper(data), - _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var element = _step.value; - if (!filter.valid(trial_path, element)) { - continue; - } - var li = list.append("li"); - - //name of file for request - var name = element.name.split("/"); - var pos = name.length - 1; - var fileName = name[pos]; - li.append("a").classed("name", true).attr("title", "Name").text(element.name).attr("href", "/trials/files/" + element.content_hash_after + "/" + fileName); //file after execution - li.append("div").classed("mode", true).attr("title", "Mode").text(element.mode); - li.append("div").classed("buffering", true).attr("title", "Buffering").text(element.buffering); - li.append("div").classed("clear", true); - li.append("div").classed("timestamp", true).attr("title", "Time").text(element.timestamp); - li.append("a").classed("content_hash_before hash", true).attr("title", "Content hash before").text(element.content_hash_before).attr("href", "/trials/files/" + element.content_hash_before + "/" + fileName); - li.append("div"); //spacing - li.append("a").classed("content_hash_after hash", true).attr("title", "Content hash after").text(element.content_hash_after).attr("href", "/trials/files/" + element.content_hash_after + "/" + fileName); - li.append("div").classed("stack", true).attr("title", "Stack").text(element.stack); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - }); - return filter; - } - }, { - key: "createNode", - value: function createNode(trialDisplay, data, trial_path) { - var default_local = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "0"; - var node = document.createElement('div'); - var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(node); - var content = d3node.append('div').classed('list', true).append('div').classed('side-info', true); - content.append("div").classed("main", true).append("h1").text("File Accesses (" + trialDisplay + ")"); - FileAccessesInfoWidget.createList(content, data, trial_path, default_local); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/info/modules_info.ts": -/*!**********************************!*\ - !*** ./src/info/modules_info.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ ModulesInfoWidget: () => (/* binding */ ModulesInfoWidget) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - -var ModulesInfoWidget = /*#__PURE__*/function (_Widget) { - function ModulesInfoWidget(trialDisplay, data, trial_path) { - var _this; - _classCallCheck(this, ModulesInfoWidget); - _this = _callSuper(this, ModulesInfoWidget, [{ - node: ModulesInfoWidget.createNode(trialDisplay, data, trial_path) - }]); - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(_this.node); - _this.addClass('content'); - _this.addClass('trial-info-list'); - _this.title.label = trialDisplay + "- Modules"; - _this.title.closable = true; - _this.title.caption = "Trial ".concat(trialDisplay, " Modules"); - return _this; - } - _inherits(ModulesInfoWidget, _Widget); - return _createClass(ModulesInfoWidget, null, [{ - key: "url", - value: function url(trialId) { - return "trials/" + trialId + "/dependencies.json"; - } - }, { - key: "createFilterDiv", - value: function createFilterDiv(parent) { - return parent.append("div"); - } - }, { - key: "createFilter", - value: function createFilter(parent) { - var default_local = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "0"; - var filterdiv = this.createFilterDiv(parent); - var text_filter = filterdiv.append("input").attr("type", "search"); - var select_version = filterdiv.append("select"); - select_version.append("option").attr("value", "both").text("Do not filter Version"); - select_version.append("option").attr("value", "1").text("Filter In Version"); - select_version.append("option").attr("value", "0").text("Filter Out Version"); - select_version.property("value", "both"); - var select_local = filterdiv.append("select"); - select_local.append("option").attr("value", "0").text("Do not filter Locality"); - select_local.append("option").attr("value", "1").text("Local Modules Only"); - select_local.append("option").attr("value", "2").text("Non-Local Modules Only"); - select_local.property("value", default_local); - return { - filterdiv: filterdiv, - valid: function valid(local, element) { - var stext = text_filter.property("value").toLowerCase(); - var sversion = select_version.property("value"); - var slocal = Number(select_local.property("value")); - var check_text = function check_text() { - return element.name.toLowerCase().indexOf(stext) >= 0; - }; - var check_version = function check_version() { - if (sversion == "both") return true; - if (sversion == "1") return element.version != null; - if (sversion == "0") return element.version == null; - return false; - }; - var check_local = function check_local() { - if (slocal == 0) return true; - if (element.path == null) return slocal != 1; - if (!/^((\/)|(\w+:\\))/.test(element.path)) return slocal == 1; // not absolute path - if (element.path.startsWith(local)) return slocal == 1; - return slocal != 1; - }; - return check_text() && check_version() && check_local(); - }, - on_change: function on_change(filterfn) { - text_filter.on("keyup", filterfn); - select_version.on("change", filterfn); - select_local.on("change", filterfn); - filterfn(); - } - }; - } - }, { - key: "createList", - value: function createList(parent, data, trial_path) { - var default_local = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "0"; - var filter = ModulesInfoWidget.createFilter(parent, default_local); - var list = parent.append("ul").classed("mod-list", true); - filter.on_change(function () { - list.html(""); - var _iterator = _createForOfIteratorHelper(data), - _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var element = _step.value; - if (!filter.valid(trial_path, element)) { - continue; - } - var li = list.append("li"); - li.append("div").classed("name", true).text(element.name); - li.append("div").classed("version", true).text(element.version === null ? "" : element.version); - li.append("div").classed("clear", true); - li.append("div").classed("hash", true).attr("title", element.path).text(element.code_hash); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - }); - return filter; - } - }, { - key: "createNode", - value: function createNode(trialDisplay, data, trial_path) { - var node = document.createElement('div'); - var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(node); - var content = d3node.append('div').classed('list', true).append('div').classed('side-info', true); - content.append("div").classed("main", true).append("h1").text("Modules (" + trialDisplay + ")"); - ModulesInfoWidget.createList(content, data, trial_path); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/info/trial_info.ts": -/*!********************************!*\ - !*** ./src/info/trial_info.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ TrialInfoWidget: () => (/* binding */ TrialInfoWidget) -/* harmony export */ }); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); -/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _modules_info__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules_info */ "./src/info/modules_info.ts"); -/* harmony import */ var _environment_info__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./environment_info */ "./src/info/environment_info.ts"); -/* harmony import */ var _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./file_accesses_info */ "./src/info/file_accesses_info.ts"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - - - - -var TrialInfoWidget = /*#__PURE__*/function (_Widget) { - function TrialInfoWidget(trial, annontationWidget) { - var _this; - _classCallCheck(this, TrialInfoWidget); - _this = _callSuper(this, TrialInfoWidget, [{ - node: TrialInfoWidget.createNode(trial, annontationWidget) - }]); - _this.trial = trial; - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__["default"])(_this.node); - _this.addClass('content'); - _this.addClass('trial-info'); - _this.title.label = trial.display + "- Information"; - _this.title.closable = true; - _this.title.caption = "Trial ".concat(trial.display, " Information"); - _this.loadModules(); - _this.loadEnvironment(); - _this.loadFileAccess(); - _this.annontationWidget = annontationWidget; - return _this; - } - _inherits(TrialInfoWidget, _Widget); - return _createClass(TrialInfoWidget, [{ - key: "loadModules", - value: function loadModules() { - var _this2 = this; - var sub = this.node.getElementsByClassName("modules")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Modules", sub, _modules_info__WEBPACK_IMPORTED_MODULE_2__.ModulesInfoWidget.url(this.trial.title), function (data) { - var modules = _this2.d3node.select(".modules").html(""); - if (data.all.length > 0) { - var fold = TrialInfoWidget.createFold(modules, "Modules"); - var filter = _modules_info__WEBPACK_IMPORTED_MODULE_2__.ModulesInfoWidget.createList(modules.append("div").classed("foldable show-toolbar", true), data.all, data.trial_path, "1"); - TrialInfoWidget.createFilterFold(fold, filter); - } - }); - } - }, { - key: "loadEnvironment", - value: function loadEnvironment() { - var _this3 = this; - var sub = this.node.getElementsByClassName("environment")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Environment", sub, _environment_info__WEBPACK_IMPORTED_MODULE_3__.EnvironmentInfoWidget.url(this.trial.title), function (data) { - var environment = _this3.d3node.select(".environment").html(""); - var fold = TrialInfoWidget.createFold(environment, "Environment"); - var filter = _environment_info__WEBPACK_IMPORTED_MODULE_3__.EnvironmentInfoWidget.createList(environment.append("div").classed("foldable show-toolbar", true), data.all, "1"); - TrialInfoWidget.createFilterFold(fold, filter); - }); - } - }, { - key: "loadFileAccess", - value: function loadFileAccess() { - var _this4 = this; - var sub = this.node.getElementsByClassName("file-accesses")[0]; - (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("File Accesses", sub, _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__.FileAccessesInfoWidget.url(this.trial.title), function (data) { - var accesses = _this4.d3node.select(".file-accesses").html(""); - if (data.file_accesses.length > 0) { - var fold = TrialInfoWidget.createFold(accesses, "File Accesses"); - var filter = _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__.FileAccessesInfoWidget.createList(accesses.append("div").classed("foldable show-toolbar", true), data.file_accesses, data.trial_path); - TrialInfoWidget.createFilterFold(fold, filter); - } - }); - } - }], [{ - key: "createNode", - value: function createNode(trial, annontationWidget) { - var node = document.createElement('div'); - var info = trial.info; - var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__["default"])(node); - var content = d3node.append('div').classed('trial-info', true).append('div').classed('side-info', true); - var main = content.append('div').classed('main', true); - main.append("h1").text("Trial " + trial.display); - main.append("a").classed("hash", true).text(info.code_hash || "").attr('href', 'trials/' + trial.id + '/' + info.code_hash + '/' + info.script); // href for script - - var idAttr = main.append("span").classed("attr", true); - idAttr.append("span").classed("desc", true).text("Id: "); - idAttr.append("span").classed("id", true).text(trial.title); - var scriptAttr = main.append("span").classed("attr", true); - scriptAttr.append("span").classed("desc", true).text("Script: "); - scriptAttr.append("a").classed("script", true).text(info.script).attr('href', 'trials/' + trial.id + '/' + info.code_hash + '/' + info.script); // href for script - - var startAttr = main.append("span").classed("attr", true); - startAttr.append("span").classed("desc", true).text("Start: "); - startAttr.append("span").classed("start", true).text(info.str_start || ""); - var finishAttr = main.append("span").classed("attr", true); - finishAttr.append("span").classed("desc", true).text("Finish: "); - finishAttr.append("span").classed("finish", true).text(info.str_finish || ""); - var durationAttr = main.append("span").classed("attr", true); - durationAttr.append("span").classed("desc", true).text("Duration: "); - durationAttr.append("span").classed("duration", true).text(info.duration_text || ""); - if (info.command) { - var argumentsAttr = main.append("span").classed("attr", true); - argumentsAttr.append("span").classed("desc", true).text("Arguments: "); - argumentsAttr.append("span").classed("arguments", true).text(info.command); - } - content.append("div").classed("modules", true); - content.append("div").classed("environment", true); - content.append("div").classed("file-accesses", true); - var anntButton = content.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Manage Annotations"); - anntButton.on("click", function () { - annontationWidget.activeAnnotation(trial.title); - }); - return node; - } - }, { - key: "createFold", - value: function createFold(parent, title) { - var fold = parent.append("div").classed("fold", true); - var foldI = fold.append("i").classed("fa fa-minus", true); - var spanI = fold.append("span").text(title); - var click = function click() { - var visible = foldI.classed("fa-plus"); - foldI.classed("fa-plus", !visible); - foldI.classed("fa-minus", visible); - parent.select(".foldable").classed("show-toolbar", visible).classed("hide-toolbar", !visible); - return false; - }; - foldI.on("click", click); - spanI.on("click", click); - return fold; - } - }, { - key: "createFilterFold", - value: function createFilterFold(fold, filter) { - filter.filterdiv.classed("info-filter", true).classed("show-toolbar", false).classed("hide-toolbar", true); - var foldA = fold.append("a").attr("href", "#").attr("title", "Search").classed("show-all", true); - var foldAI = foldA.append("i").classed("fa fa-search-plus", true); - foldA.on("click", function () { - var visible = foldAI.classed("fa-search-plus"); - foldAI.classed("fa-search-plus", !visible); - foldAI.classed("fa-search-minus", visible); - filter.filterdiv.classed("show-toolbar", visible).classed("hide-toolbar", !visible); - return false; - }); - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/nowpanel.ts": -/*!*************************!*\ - !*** ./src/nowpanel.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ NowVisPanel: () => (/* binding */ NowVisPanel), -/* harmony export */ findInLayout: () => (/* binding */ findInLayout) -/* harmony export */ }); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } - -function findInLayout(area, widget) { - if (area == null || area.type == 'tab-area') { - return null; - } - var splitconfig = area; - var result = null; - splitconfig.children.every(function (child, index) { - if (child.type == 'tab-area') { - var tabconfig = child; - var _iterator = _createForOfIteratorHelper(tabconfig.widgets), - _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var tabwidget = _step.value; - if (tabwidget == widget) { - result = { - area: area, - index: index - }; - return false; - } - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - } else { - var temp = findInLayout(child, widget); - if (temp) { - result = temp; - return false; - } - } - return true; - }); - return result; -} -var NowVisPanel = /*#__PURE__*/function (_DockPanel) { - function NowVisPanel() { - _classCallCheck(this, NowVisPanel); - return _callSuper(this, NowVisPanel, arguments); - } - _inherits(NowVisPanel, _DockPanel); - return _createClass(NowVisPanel, [{ - key: "addMainWidget", - value: function addMainWidget(widget) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - if (options.ref) { - if (options.ref.nowVis != "main") { - console.log("Warning: options.ref is not 'main'"); - } - } else { - var _iterator2 = _createForOfIteratorHelper(this.widgets()), - _step2; - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var w = _step2.value; - var wnow = w; - if (wnow.nowVis == "main") { - options.ref = w; - } - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - } - widget.nowVis = "main"; - this.addWidget(widget, options); - } - }, { - key: "addGraphWidget", - value: function addGraphWidget(widget) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var operation = "none"; - if (options.ref) { - if (options.ref.nowVis != "graph") { - console.log("Warning: options.ref is not 'graph'"); - } - } else { - var _iterator3 = _createForOfIteratorHelper(this.widgets()), - _step3; - try { - for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { - var w = _step3.value; - var wnow = w; - if (wnow.nowVis == "main" && !options.ref) { - options.ref = w; - options.mode = "split-bottom"; - operation = "main"; - } else if (wnow.nowVis == "info" && operation != "graph") { - options.ref = w; - options.mode = "split-left"; - operation = "info"; - } else if (wnow.nowVis == "graph") { - options.ref = w; - options.mode = "tab-after"; - operation = "graph"; - } - } - } catch (err) { - _iterator3.e(err); - } finally { - _iterator3.f(); - } - ; - } - widget.nowVis = "graph"; - this.addWidget(widget, options); - if (operation == "main") { - var layout = this.saveLayout(); - var sublayout = findInLayout(layout.main, widget); - if (sublayout) { - var sizes = sublayout.area.sizes; - sizes[0] = 0.20; - sizes[1] = 0.80; - this.restoreLayout(layout); - } - } - if (operation == "info") { - var layout = this.saveLayout(); - var sublayout = findInLayout(layout.main, widget); - if (sublayout) { - var sizes = sublayout.area.sizes; - sizes[0] = 0.80; - sizes[1] = 0.20; - this.restoreLayout(layout); - } - } - } - }, { - key: "addInfoWidget", - value: function addInfoWidget(widget) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var operation = "none"; - if (options.ref) { - if (options.ref.nowVis != "info") { - console.log("Warning: options.ref is not 'info'"); - } - } else { - var _iterator4 = _createForOfIteratorHelper(this.widgets()), - _step4; - try { - for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { - var w = _step4.value; - var wnow = w; - if (wnow.nowVis == "main" && !options.ref) { - options.ref = w; - options.mode = "split-bottom"; - operation = "main"; - } else if (wnow.nowVis == "graph" && operation != "info") { - options.ref = w; - options.mode = "split-right"; - operation = "graph"; - } else if (wnow.nowVis == "info") { - options.ref = w; - options.mode = "tab-after"; - operation = "info"; - } - } - } catch (err) { - _iterator4.e(err); - } finally { - _iterator4.f(); - } - ; - } - widget.nowVis = "info"; - this.addWidget(widget, options); - if (operation == "main") { - var layout = this.saveLayout(); - var sublayout = findInLayout(layout.main, widget); - if (sublayout) { - var sizes = sublayout.area.sizes; - sizes[0] = 0.20; - sizes[1] = 0.80; - this.restoreLayout(layout); - } - } - if (operation == "graph") { - var layout = this.saveLayout(); - var sublayout = findInLayout(layout.main, widget); - if (sublayout) { - var sizes = sublayout.area.sizes; - sizes[0] = 0.80; - sizes[1] = 0.20; - this.restoreLayout(layout); - } - } - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.DockPanel); - -/***/ }), - -/***/ "./src/project_widget.ts": -/*!*******************************!*\ - !*** ./src/project_widget.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ ProjectWidget: () => (/* binding */ ProjectWidget) -/* harmony export */ }); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var _style_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../style/bootstrap.min.css */ "./style/bootstrap.min.css"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - -var ProjectWidget = /*#__PURE__*/function (_Widget) { - function ProjectWidget(experiments) { - var _this; - _classCallCheck(this, ProjectWidget); - _this = _callSuper(this, ProjectWidget, [{ - node: ProjectWidget.createNode() - }]); - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); - _this.experiments = experiments; - _this.setNode(); - _this.addClass('content'); - _this.title.label = "Experiment Selection"; - _this.title.closable = false; - _this.title.caption = "Experiment"; - return _this; - } - _inherits(ProjectWidget, _Widget); - return _createClass(ProjectWidget, [{ - key: "addExpRow", - value: function addExpRow(exp) { - var link = window.location.href + "experiments/" + exp.id; - var item = this.expTBody.append("tr"); - item.append("th").attr("scope", "row").text(exp.id); - item.append("td").text(exp.name); - item.append("td").text(exp.description); - item.append("td").append("a").attr("href", link).text(link); - var cloneCommandText = "now pull --url " + link; - item.append("td").text(cloneCommandText + " ").append("i").classed("fa fa-clone", true).attr("aria-hidden", "true").attr("id", exp.id + "CopyIcon").on("click", function () { - navigator.clipboard.writeText(cloneCommandText).then(function () { - var divCopied = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(document.getElementById(exp.id + "CopyIcon")).append("small").classed("alert alert-secondary p-0", true).text("Copied!"); - setTimeout(function () { - divCopied.remove(); - }, 3000); - }); - }); - } - }, { - key: "addFormInput", - value: function addFormInput(form, fieldId, fieldLabel, fieldType) { - var grp = form.append("div").classed("form-group row", true); - grp.append("label").classed("col-sm-2 col-form-label", true).attr("for", fieldId).text(fieldLabel + ": "); - var divIn = grp.append("div").classed("col-sm-10", true); - var inp = divIn.append(fieldType); - inp.classed("form-control", true).attr("id", fieldId); - return inp; - } - }, { - key: "addFeedBackinfo", - value: function addFeedBackinfo(baseNode, cls, txt, desc) { - var _thiss = this; - var feedbackNode = baseNode.append("div").classed("alert", true).classed(cls, true).classed("alert-dismissible", true).classed("fade", true).classed("show", true); - feedbackNode.append("strong").text(txt); - feedbackNode.append("span").text(" " + desc).append("button").attr("type", "button").classed("close", true).attr("data-dismiss", "alert").text("x").on("click", function () { - _thiss.hideNode(feedbackNode); - }); - return feedbackNode; - } - }, { - key: "hideNode", - value: function hideNode(node) { - node.classed("d-none", true); - } - }, { - key: "showNode", - value: function showNode(node) { - node.classed("d-none", false); - } - }, { - key: "setNode", - value: function setNode() { - var content = this.d3node.append('div').classed('config-content', true); - var projectsDiv = content.append("div"); - projectsDiv.append("h2").text("Experiments:"); - this.errorFeedback = this.addFeedBackinfo(projectsDiv, "alert-danger", "Error!", "A problem has been occurred while submitting your data."); - this.successFeedback = this.addFeedBackinfo(projectsDiv, "alert-success", "Success!", "Experiment created successfully"); - this.hideNode(this.errorFeedback); - this.hideNode(this.successFeedback); - var inputsDiv = projectsDiv.append("div"); - var nameIn = this.addFormInput(inputsDiv, "experimentNameInput", "Name", "input"); - var descIn = this.addFormInput(inputsDiv, "experimentDescInput", "Description", "textarea"); - var confimButton = inputsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Confirm"); - var addExpButton = projectsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Add Experiment"); - var table = projectsDiv.append("table").classed("table", true); - var header = table.append("thead").append("tr"); - header.append("th").attr("scope", "col").text("id"); - header.append("th").attr("scope", "col").text("name"); - header.append("th").attr("scope", "col").text("description"); - header.append("th").attr("scope", "col").text("url"); - header.append("th").attr("scope", "col").html(" clone ").append("i").classed("fa fa-question-circle-o", true).attr("aria-hidden", "true").attr("title", "Run this command on the command line, in the desired folder, to clone the experiment."); - this.expTBody = table.append("tbody"); - inputsDiv.classed("d-none", true); - confimButton.on("click", function () { - _thiss.hideNode(_thiss.errorFeedback); - _thiss.hideNode(_thiss.successFeedback); - var newExp = { - name: nameIn.property("value"), - description: descIn.property("value") - }; - fetch("experiments", { - method: 'POST', - // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(newExp) // body data type must match "Content-Type" header - }).then(function (response) { - if (response.status == 201) { - response.json().then(function (obj) { - newExp.id = obj.id; - _thiss.addExpRow(newExp); - _thiss.hideNode(inputsDiv); - _thiss.showNode(addExpButton); - _thiss.showNode(_thiss.successFeedback); - }); - } else { - _thiss.showNode(_thiss.errorFeedback); - } - }); - }); - var _thiss = this; - addExpButton.on("click", function () { - _thiss.showNode(inputsDiv); - _thiss.hideNode(addExpButton); - }); - this.experiments.forEach(function (obj) { - _thiss.addExpRow(obj); - }); - } - }], [{ - key: "createNode", - value: function createNode() { - var node = document.createElement('div'); - return node; - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); - -/***/ }), - -/***/ "./src/query_widget.ts": -/*!*****************************!*\ - !*** ./src/query_widget.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ DatabaseTabWidget: () => (/* binding */ DatabaseTabWidget), -/* harmony export */ QueryResultWidget: () => (/* binding */ QueryResultWidget), -/* harmony export */ QueryWidget: () => (/* binding */ QueryWidget) -/* harmony export */ }); -/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); -/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); -/* harmony import */ var _database_widget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./database_widget */ "./src/database_widget.ts"); -/* harmony import */ var ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ace-builds/src-noconflict/ace */ "../../../../../../../../node_modules/ace-builds/src-noconflict/ace.js"); -/* harmony import */ var ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ace-builds/src-noconflict/theme-textmate */ "../../../../../../../../node_modules/ace-builds/src-noconflict/theme-textmate.js"); -/* harmony import */ var ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ace-builds/src-noconflict/mode-sql */ "../../../../../../../../node_modules/ace-builds/src-noconflict/mode-sql.js"); -/* harmony import */ var ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ace-builds/src-noconflict/ext-language_tools */ "../../../../../../../../node_modules/ace-builds/src-noconflict/ext-language_tools.js"); -/* harmony import */ var ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5__); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } -function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } -function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } -function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } -function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } -function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } -function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } -function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } -function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } -function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } -function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } -function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } -function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } -function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } -function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } -function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } - - - - - - - -var DatabaseTabWidget = /*#__PURE__*/function (_Widget) { - function DatabaseTabWidget() { - _classCallCheck(this, DatabaseTabWidget); - return _callSuper(this, DatabaseTabWidget, arguments); - } - _inherits(DatabaseTabWidget, _Widget); - return _createClass(DatabaseTabWidget); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); -var QueryResultWidget = /*#__PURE__*/function (_DatabaseTabWidget) { - function QueryResultWidget(query, columns, rows, count) { - var _this; - _classCallCheck(this, QueryResultWidget); - _this = _callSuper(this, QueryResultWidget, [{ - node: QueryResultWidget.createNode() - }]); - _defineProperty(_this, "currentPage", 1); - _this.title.label = "Query Result (".concat(count, ")"); - _this.title.caption = "Query Result (".concat(count, ")"); - _this.title.closable = true; - _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__["default"])(_this.node); - _this.query = query; - _this.columns = columns; - _this.rows = rows; - _this.renderTable(); - return _this; - } - _inherits(QueryResultWidget, _DatabaseTabWidget); - return _createClass(QueryResultWidget, [{ - key: "renderTable", - value: function renderTable() { - var _this2 = this; - this.d3node.selectAll('*').remove(); - this.d3node.append('a').classed("toollink", true).attr('class', 'btn btn-secondary-outline').attr('title', 'Download CSV').style('margin-bottom', '1em').on('click', function () { - var csv = ''; - csv += _this2.columns.map(function (col) { - return "\"".concat(col.replace(/"/g, '""'), "\""); - }).join(',') + '\n'; - var _iterator = _createForOfIteratorHelper(_this2.rows), - _step; - try { - var _loop = function _loop() { - var row = _step.value; - csv += _this2.columns.map(function (col) { - return "\"".concat(String(row[col] !== undefined ? row[col] : '').replace(/"/g, '""'), "\""); - }).join(',') + '\n'; - }; - for (_iterator.s(); !(_step = _iterator.n()).done;) { - _loop(); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - var blob = new Blob([csv], { - type: 'text/csv' - }); - var url = URL.createObjectURL(blob); - var a = document.createElement('a'); - a.href = url; - a.download = 'query_result.csv'; - document.body.appendChild(a); - a.click(); - setTimeout(function () { - document.body.removeChild(a); - URL.revokeObjectURL(url); - }, 100); - }).append("i").classed("fa fa-download", true); - if (!this.columns.length || !this.rows.length) { - this.d3node.append('div').text('No results.'); - return; - } - var paginationContainer = this.d3node.append('div').style('display', 'flex').style('justify-content', 'space-between').style('align-items', 'center').style('margin-bottom', '1rem').style('padding', '0.5rem').style('background-color', '#f8f9fa').style('border-radius', '4px'); - var startIndex = (this.currentPage - 1) * 50 + 1; - var endIndex = Math.min(this.currentPage * 50, this.rows.length); - paginationContainer.append('div').style('font-size', '0.9em').style('color', '#666').text("Showing ".concat(startIndex, "-").concat(endIndex, " of ").concat(this.rows.length, " rows")); - var paginationButtons = paginationContainer.append('div').style('display', 'flex').style('gap', '0.25rem'); - var totalPages = Math.ceil(this.rows.length / 50); - if (totalPages > 1) { - paginationButtons.append('button').attr('class', 'btn btn-sm btn-outline-secondary').on('click', function () { - _this2.currentPage = 1; - _this2.renderTable(); - }).text('<<'); - paginationButtons.append('button').attr('class', 'btn btn-sm btn-outline-secondary').on('click', function () { - _this2.currentPage--; - _this2.renderTable(); - }).text('<'); - paginationButtons.append('button').attr('class', 'btn btn-sm btn-primary').text(this.currentPage.toString()); - paginationButtons.append('button').attr('class', 'btn btn-sm btn-outline-secondary').on('click', function () { - _this2.currentPage++; - _this2.renderTable(); - }).text('>'); - paginationButtons.append('button').attr('class', 'btn btn-sm btn-outline-secondary').on('click', function () { - _this2.currentPage = totalPages; - _this2.renderTable(); - }).text('>>'); - } - var tableContainer = this.d3node.append('div').style('max-height', '400px').style('overflow-y', 'auto').style('border', '1px solid #dee2e6').style('border-radius', '4px'); - var table = tableContainer.append('table').attr('class', 'table table-bordered table-sm'); - table.style('border-collapse', 'separate').style('border-spacing', '0'); - var thead = table.append('thead').append('tr'); - thead.style('position', 'sticky').style('top', '0').style('background-color', 'white').style('z-index', '1'); - this.columns.forEach(function (col) { - return thead.append('th').text(col); - }); - var tbody = table.append('tbody'); - var startRow = (this.currentPage - 1) * 50; - var endRow = Math.min(startRow + 50, this.rows.length); - var currentPageRows = this.rows.slice(startRow, endRow); - currentPageRows.forEach(function (row) { - var tr = tbody.append('tr'); - _this2.columns.forEach(function (col) { - return tr.append('td').text(row[col] !== undefined ? row[col] : ''); - }); - }); - this.d3node.append('div').attr('class', 'text-muted').style('margin-top', '1rem').style('margin-bottom', '0.5em').html("Query: ".concat(this.query, "")); - } - }], [{ - key: "createNode", - value: function createNode() { - var node = document.createElement('div'); - node.style.padding = '1rem'; - node.style.height = '100%'; - node.style.overflowY = 'auto'; - return node; - } - }]); -}(DatabaseTabWidget); -var QueryWidget = /*#__PURE__*/function (_Widget2) { - function QueryWidget(panel, tableNames, columnNames, initialQuery) { - var _this3; - _classCallCheck(this, QueryWidget); - _this3 = _callSuper(this, QueryWidget); - // Ace editor instance - _defineProperty(_this3, "tableNames", []); - _defineProperty(_this3, "columnNames", []); - _this3.panel = panel; - _this3.title.label = 'SQL Query'; - _this3.title.caption = 'SQL Query Interface'; - _this3.title.closable = true; - _this3.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__["default"])(_this3.node); - _this3.tableNames = tableNames || []; - _this3.columnNames = columnNames || []; - _this3.editorId = "query-input-".concat(++QueryWidget.count); - _this3.initialQuery = initialQuery || ''; - _this3.createQueryInterface(); - return _this3; - } - _inherits(QueryWidget, _Widget2); - return _createClass(QueryWidget, [{ - key: "createQueryInterface", - value: function () { - var _createQueryInterface = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { - var _this4 = this; - var container, headerRow, queryContainer; - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - container = this.d3node.append('div').style('display', 'flex').style('flex-direction', 'column').style('height', '100%').style('padding', '1rem').style('gap', '1rem').style('overflow-y', 'auto').style('overflow-x', 'hidden'); - headerRow = container.append('div').style('display', 'flex').style('justify-content', 'space-between').style('align-items', 'center').style('margin-bottom', '1rem').style('flex-shrink', '0'); - headerRow.append('h4').text('SQL Query Interface').style('margin', '0').style('color', '#333'); - headerRow.append('button').attr('id', 'execute-query-btn').attr("title", "Execute query. Use Ctrl+Enter for quick execution.").classed('btn btn-primary', true).on('click', function () { - return _this4.executeQuery(); - }).html(' Execute Query'); - queryContainer = container.append('div').style('display', 'flex').style('flex-direction', 'column').style('min-height', '50%').style('flex', '1 1 0'); - queryContainer.append('label').attr('for', this.editorId).text('Enter your SQL query:').style('font-weight', 'bold').style('margin-bottom', '0.5rem'); - queryContainer.append('div').attr('id', this.editorId).style('width', '100%').style('min-height', '140px').style('max-height', '30vh').style('border', '1px solid #ccc').style('border-radius', '4px').style('font-size', '1em').style('flex', '1'); - setTimeout(function () { - // @ts-ignore - _this4.aceEditor = window.ace.edit(_this4.editorId); - _this4.aceEditor.setTheme('ace/theme/textmate'); - _this4.aceEditor.session.setMode('ace/mode/sql'); - _this4.aceEditor.setOptions({ - fontSize: '1em', - minLines: 6, - showPrintMargin: false, - enableBasicAutocompletion: true, - enableLiveAutocompletion: true - }); - _this4.aceEditor.commands.addCommand({ - name: 'executeQuery', - bindKey: { - win: 'Ctrl-Enter', - mac: 'Command-Enter' - }, - exec: function exec() { - return _this4.executeQuery(); - } - }); - if (window.ace && window.ace.require) { - var langTools = window.ace.require('ace/ext/language_tools'); - var tableCompleter = { - getCompletions: function getCompletions(editor, session, pos, prefix, callback) { - if (!prefix) { - callback(null, []); - return; - } - var completions = _this4.tableNames.map(function (name) { - return { - caption: name, - value: name, - meta: 'table' - }; - }); - _this4.columnNames.forEach(function (name) { - completions.push({ - caption: name, - value: name, - meta: 'column' - }); - }); - callback(null, completions); - } - }; - langTools.addCompleter(tableCompleter); - } - if (_this4.initialQuery) { - _this4.aceEditor.setValue(_this4.initialQuery); - _this4.aceEditor.clearSelection(); - _this4.aceEditor.focus(); - } - }, 0); - queryContainer.append('div').attr('id', "query-status-".concat(this.editorId)).style('min-height', '60px').style('padding', '0.5rem').style('border', '1px solid #e0e0e0').style('border-radius', '4px').style('background-color', '#f9f9f9').style('font-family', 'monospace').style('font-size', '0.9em').style('overflow-y', 'auto').style('flex-shrink', '0').style('margin-top', '1rem').text('Ready to execute queries. Use Ctrl+Enter for quick execution.'); - case 9: - case "end": - return _context.stop(); - } - }, _callee, this); - })); - function createQueryInterface() { - return _createQueryInterface.apply(this, arguments); - } - return createQueryInterface; - }() - }, { - key: "executeQuery", - value: function () { - var _executeQuery = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { - var statusArea, sql, response, data; - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - // const queryInput = this.node.querySelector('#query-input') as HTMLTextAreaElement; - statusArea = this.node.querySelector("#query-status-".concat(this.editorId)); - sql = this.aceEditor ? this.aceEditor.getValue().trim() : ''; - if (statusArea) { - _context2.next = 4; - break; - } - return _context2.abrupt("return"); - case 4: - statusArea.innerHTML = ''; - statusArea.style.color = '#333'; - if (sql) { - _context2.next = 10; - break; - } - statusArea.textContent = 'Please enter a SQL query.'; - statusArea.style.color = '#d32f2f'; - return _context2.abrupt("return"); - case 10: - statusArea.textContent = 'Executing query...'; - statusArea.style.color = '#1976d2'; - _context2.prev = 12; - _context2.next = 15; - return fetch('/db/query', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - query: sql - }) - }); - case 15: - response = _context2.sent; - _context2.next = 18; - return response.json(); - case 18: - data = _context2.sent; - if (!data.error) { - _context2.next = 24; - break; - } - statusArea.textContent = "Error: ".concat(data.error); - statusArea.style.color = '#d32f2f'; - _context2.next = 33; - break; - case 24: - if (!(data.rows && data.columns)) { - _context2.next = 31; - break; - } - statusArea.textContent = "Query executed successfully! Found ".concat(data.rows.length, " rows with ").concat(data.columns.length, " columns."); - statusArea.style.color = '#388e3c'; - _context2.next = 29; - return this.displayQueryResults(sql, data.columns, data.rows); - case 29: - _context2.next = 33; - break; - case 31: - statusArea.textContent = 'Query executed successfully. No results returned.'; - statusArea.style.color = '#388e3c'; - case 33: - _context2.next = 39; - break; - case 35: - _context2.prev = 35; - _context2.t0 = _context2["catch"](12); - statusArea.textContent = "Error executing query: ".concat(_context2.t0.message); - statusArea.style.color = '#d32f2f'; - case 39: - case "end": - return _context2.stop(); - } - }, _callee2, this, [[12, 35]]); - })); - function executeQuery() { - return _executeQuery.apply(this, arguments); - } - return executeQuery; - }() - }, { - key: "displayQueryResults", - value: function () { - var _displayQueryResults = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(sql, columns, rows) { - var resultWidget, refWidget, _iterator2, _step2, w; - return _regeneratorRuntime().wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - resultWidget = new QueryResultWidget(sql, columns, rows, ++QueryWidget.count); - refWidget = null; - if (this.panel.widgets) { - _iterator2 = _createForOfIteratorHelper(this.panel.widgets()); - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - w = _step2.value; - if (w instanceof _database_widget__WEBPACK_IMPORTED_MODULE_1__.TableInfoWidget || w instanceof QueryResultWidget) { - refWidget = w; - } - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - } - if (refWidget) { - this.panel.addInfoWidget(resultWidget, { - ref: refWidget, - mode: 'tab-after' - }); - } else { - this.panel.addInfoWidget(resultWidget, { - ref: this, - mode: 'split-bottom' - }); - } - this.panel.activateWidget(resultWidget); - case 5: - case "end": - return _context3.stop(); - } - }, _callee3, this); - })); - function displayQueryResults(_x, _x2, _x3) { - return _displayQueryResults.apply(this, arguments); - } - return displayQueryResults; - }() - }, { - key: "onResize", - value: function onResize(msg) { - var editorElement = this.node.querySelector("#".concat(this.editorId)); - if (!editorElement) return; - var rect = this.node.getBoundingClientRect(); - var availableHeight = rect.height - 200; - var minHeight = 250; - var maxHeight = Math.max(minHeight, availableHeight * 0.6); - editorElement.style.height = "".concat(maxHeight, "px"); - if (this.aceEditor) { - this.aceEditor.resize(); - } - } - }]); -}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); -_defineProperty(QueryWidget, "count", 0); - -/***/ }), - -/***/ "../../node_modules/base64-js/index.js": -/*!*********************************************!*\ - !*** ../../node_modules/base64-js/index.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray - -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} - -// Support decoding URL-safe base64 strings, as Node.js does. -// See: https://en.wikipedia.org/wiki/Base64#URL_applications -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 - -function getLens (b64) { - var len = b64.length - - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('=') - if (validLen === -1) validLen = len - - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4) - - return [validLen, placeHoldersLen] -} - -// base64 is 4/3 + up to two characters of the original data -function byteLength (b64) { - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function toByteArray (b64) { - var tmp - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) - - var curByte = 0 - - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen - - var i - for (i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)] - arr[curByte++] = (tmp >> 16) & 0xFF - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ) - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1] - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ) - } - - return parts.join('') -} - - -/***/ }), - -/***/ "../../node_modules/bn.js/lib/bn.js": -/*!******************************************!*\ - !*** ../../node_modules/bn.js/lib/bn.js ***! - \******************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* module decorator */ module = __webpack_require__.nmd(module); -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { - Buffer = window.Buffer; - } else { - Buffer = (__webpack_require__(/*! buffer */ "?2e65").Buffer); - } - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - this.negative = 1; - } - - if (start < number.length) { - if (base === 16) { - this._parseHex(number, start, endian); - } else { - this._parseBase(number, base, start); - if (endian === 'le') { - this._initArray(this.toArray(), base, endian); - } - } - } - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [number & 0x3ffffff]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [0]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this._strip(); - }; - - function parseHex4Bits (string, index) { - var c = string.charCodeAt(index); - // '0' - '9' - if (c >= 48 && c <= 57) { - return c - 48; - // 'A' - 'F' - } else if (c >= 65 && c <= 70) { - return c - 55; - // 'a' - 'f' - } else if (c >= 97 && c <= 102) { - return c - 87; - } else { - assert(false, 'Invalid character in ' + string); - } - } - - function parseHexByte (string, lowerBound, index) { - var r = parseHex4Bits(string, index); - if (index - 1 >= lowerBound) { - r |= parseHex4Bits(string, index - 1) << 4; - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start, endian) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - // 24-bits chunks - var off = 0; - var j = 0; - - var w; - if (endian === 'be') { - for (i = number.length - 1; i >= start; i -= 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } else { - var parseLength = number.length - start; - for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } - - this._strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var b = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - b = c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - b = c - 17 + 0xa; - - // '0' - '9' - } else { - b = c; - } - assert(c >= 0 && b < mul, 'Invalid character'); - r += b; - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [0]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - this._strip(); - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - function move (dest, src) { - dest.words = src.words; - dest.length = src.length; - dest.negative = src.negative; - dest.red = src.red; - } - - BN.prototype._move = function _move (dest) { - move(dest, this); - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype._strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - // Check Symbol.for because not everywhere where Symbol defined - // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility - if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') { - try { - BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect; - } catch (e) { - BN.prototype.inspect = inspect; - } - } else { - BN.prototype.inspect = inspect; - } - - function inspect () { - return (this.red ? ''; - } - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modrn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16, 2); - }; - - if (Buffer) { - BN.prototype.toBuffer = function toBuffer (endian, length) { - return this.toArrayLike(Buffer, endian, length); - }; - } - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - var allocate = function allocate (ArrayType, size) { - if (ArrayType.allocUnsafe) { - return ArrayType.allocUnsafe(size); - } - return new ArrayType(size); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - this._strip(); - - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - var res = allocate(ArrayType, reqLength); - var postfix = endian === 'le' ? 'LE' : 'BE'; - this['_toArrayLike' + postfix](res, byteLength); - return res; - }; - - BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) { - var position = 0; - var carry = 0; - - for (var i = 0, shift = 0; i < this.length; i++) { - var word = (this.words[i] << shift) | carry; - - res[position++] = word & 0xff; - if (position < res.length) { - res[position++] = (word >> 8) & 0xff; - } - if (position < res.length) { - res[position++] = (word >> 16) & 0xff; - } - - if (shift === 6) { - if (position < res.length) { - res[position++] = (word >> 24) & 0xff; - } - carry = 0; - shift = 0; - } else { - carry = word >>> 24; - shift += 2; - } - } - - if (position < res.length) { - res[position++] = carry; - - while (position < res.length) { - res[position++] = 0; - } - } - }; - - BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) { - var position = res.length - 1; - var carry = 0; - - for (var i = 0, shift = 0; i < this.length; i++) { - var word = (this.words[i] << shift) | carry; - - res[position--] = word & 0xff; - if (position >= 0) { - res[position--] = (word >> 8) & 0xff; - } - if (position >= 0) { - res[position--] = (word >> 16) & 0xff; - } - - if (shift === 6) { - if (position >= 0) { - res[position--] = (word >> 24) & 0xff; - } - carry = 0; - shift = 0; - } else { - carry = word >>> 24; - shift += 2; - } - } - - if (position >= 0) { - res[position--] = carry; - - while (position >= 0) { - res[position--] = 0; - } - } - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] >>> wbit) & 0x01; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this._strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this._strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this._strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this._strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this._strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this._strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out._strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out._strip(); - } - - function jumboMulTo (self, num, out) { - // Temporary disable, see https://github.com/indutny/bn.js/issues/211 - // var fftm = new FFTM(); - // return fftm.mulp(self, num, out); - return bigMulTo(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out._strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - var isNegNum = num < 0; - if (isNegNum) num = -num; - - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return isNegNum ? this.ineg() : this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this._strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this._strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this._strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) <= num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this._strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this._strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this._strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q._strip(); - } - a._strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modrn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modrn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modrn = function modrn (num) { - var isNegNum = num < 0; - if (isNegNum) num = -num; - - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return isNegNum ? -acc : acc; - }; - - // WARNING: DEPRECATED - BN.prototype.modn = function modn (num) { - return this.modrn(num); - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - var isNegNum = num < 0; - if (isNegNum) num = -num; - - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - this._strip(); - return isNegNum ? this.ineg() : this; - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this._strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - if (r.strip !== undefined) { - // r is a BN v4 instance - r.strip(); - } else { - // r is a BN v5 instance - r._strip(); - } - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - - move(a, a.umod(this.m)._forceRed(this)); - return a; - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})( false || module, this); - - -/***/ }), - -/***/ "../../node_modules/brorand/index.js": -/*!*******************************************!*\ - !*** ../../node_modules/brorand/index.js ***! - \*******************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var r; - -module.exports = function rand(len) { - if (!r) - r = new Rand(null); - - return r.generate(len); -}; - -function Rand(rand) { - this.rand = rand; -} -module.exports.Rand = Rand; - -Rand.prototype.generate = function generate(len) { - return this._rand(len); -}; - -// Emulate crypto API using randy -Rand.prototype._rand = function _rand(n) { - if (this.rand.getBytes) - return this.rand.getBytes(n); - - var res = new Uint8Array(n); - for (var i = 0; i < res.length; i++) - res[i] = this.rand.getByte(); - return res; -}; - -if (typeof self === 'object') { - if (self.crypto && self.crypto.getRandomValues) { - // Modern browsers - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - self.crypto.getRandomValues(arr); - return arr; - }; - } else if (self.msCrypto && self.msCrypto.getRandomValues) { - // IE - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - self.msCrypto.getRandomValues(arr); - return arr; - }; - - // Safari's WebWorkers do not have `crypto` - } else if (typeof window === 'object') { - // Old junk - Rand.prototype._rand = function() { - throw new Error('Not implemented yet'); - }; - } -} else { - // Node.js or Web worker with no crypto support - try { - var crypto = __webpack_require__(/*! crypto */ "?0749"); - if (typeof crypto.randomBytes !== 'function') - throw new Error('Not supported'); - - Rand.prototype._rand = function _rand(n) { - return crypto.randomBytes(n); - }; - } catch (e) { - } -} - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/aes.js": -/*!************************************************!*\ - !*** ../../node_modules/browserify-aes/aes.js ***! - \************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -// based on the aes implimentation in triple sec -// https://github.com/keybase/triplesec -// which is in turn based on the one from crypto-js -// https://code.google.com/p/crypto-js/ - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -function asUInt32Array (buf) { - if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) - - var len = (buf.length / 4) | 0 - var out = new Array(len) - - for (var i = 0; i < len; i++) { - out[i] = buf.readUInt32BE(i * 4) - } - - return out -} - -function scrubVec (v) { - for (var i = 0; i < v.length; v++) { - v[i] = 0 - } -} - -function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { - var SUB_MIX0 = SUB_MIX[0] - var SUB_MIX1 = SUB_MIX[1] - var SUB_MIX2 = SUB_MIX[2] - var SUB_MIX3 = SUB_MIX[3] - - var s0 = M[0] ^ keySchedule[0] - var s1 = M[1] ^ keySchedule[1] - var s2 = M[2] ^ keySchedule[2] - var s3 = M[3] ^ keySchedule[3] - var t0, t1, t2, t3 - var ksRow = 4 - - for (var round = 1; round < nRounds; round++) { - t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] - t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] - t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] - t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] - s0 = t0 - s1 = t1 - s2 = t2 - s3 = t3 - } - - t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] - t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] - t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] - t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] - t0 = t0 >>> 0 - t1 = t1 >>> 0 - t2 = t2 >>> 0 - t3 = t3 >>> 0 - - return [t0, t1, t2, t3] -} - -// AES constants -var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] -var G = (function () { - // Compute double table - var d = new Array(256) - for (var j = 0; j < 256; j++) { - if (j < 128) { - d[j] = j << 1 - } else { - d[j] = (j << 1) ^ 0x11b - } - } - - var SBOX = [] - var INV_SBOX = [] - var SUB_MIX = [[], [], [], []] - var INV_SUB_MIX = [[], [], [], []] - - // Walk GF(2^8) - var x = 0 - var xi = 0 - for (var i = 0; i < 256; ++i) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 - SBOX[x] = sx - INV_SBOX[sx] = x - - // Compute multiplication - var x2 = d[x] - var x4 = d[x2] - var x8 = d[x4] - - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100) - SUB_MIX[0][x] = (t << 24) | (t >>> 8) - SUB_MIX[1][x] = (t << 16) | (t >>> 16) - SUB_MIX[2][x] = (t << 8) | (t >>> 24) - SUB_MIX[3][x] = t - - // Compute inv sub bytes, inv mix columns tables - t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) - INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) - INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) - INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) - INV_SUB_MIX[3][sx] = t - - if (x === 0) { - x = xi = 1 - } else { - x = x2 ^ d[d[d[x8 ^ x2]]] - xi ^= d[d[xi]] - } - } - - return { - SBOX: SBOX, - INV_SBOX: INV_SBOX, - SUB_MIX: SUB_MIX, - INV_SUB_MIX: INV_SUB_MIX - } -})() - -function AES (key) { - this._key = asUInt32Array(key) - this._reset() -} - -AES.blockSize = 4 * 4 -AES.keySize = 256 / 8 -AES.prototype.blockSize = AES.blockSize -AES.prototype.keySize = AES.keySize -AES.prototype._reset = function () { - var keyWords = this._key - var keySize = keyWords.length - var nRounds = keySize + 6 - var ksRows = (nRounds + 1) * 4 - - var keySchedule = [] - for (var k = 0; k < keySize; k++) { - keySchedule[k] = keyWords[k] - } - - for (k = keySize; k < ksRows; k++) { - var t = keySchedule[k - 1] - - if (k % keySize === 0) { - t = (t << 8) | (t >>> 24) - t = - (G.SBOX[t >>> 24] << 24) | - (G.SBOX[(t >>> 16) & 0xff] << 16) | - (G.SBOX[(t >>> 8) & 0xff] << 8) | - (G.SBOX[t & 0xff]) - - t ^= RCON[(k / keySize) | 0] << 24 - } else if (keySize > 6 && k % keySize === 4) { - t = - (G.SBOX[t >>> 24] << 24) | - (G.SBOX[(t >>> 16) & 0xff] << 16) | - (G.SBOX[(t >>> 8) & 0xff] << 8) | - (G.SBOX[t & 0xff]) - } - - keySchedule[k] = keySchedule[k - keySize] ^ t - } - - var invKeySchedule = [] - for (var ik = 0; ik < ksRows; ik++) { - var ksR = ksRows - ik - var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] - - if (ik < 4 || ksR <= 4) { - invKeySchedule[ik] = tt - } else { - invKeySchedule[ik] = - G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ - G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ - G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ - G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] - } - } - - this._nRounds = nRounds - this._keySchedule = keySchedule - this._invKeySchedule = invKeySchedule -} - -AES.prototype.encryptBlockRaw = function (M) { - M = asUInt32Array(M) - return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) -} - -AES.prototype.encryptBlock = function (M) { - var out = this.encryptBlockRaw(M) - var buf = Buffer.allocUnsafe(16) - buf.writeUInt32BE(out[0], 0) - buf.writeUInt32BE(out[1], 4) - buf.writeUInt32BE(out[2], 8) - buf.writeUInt32BE(out[3], 12) - return buf -} - -AES.prototype.decryptBlock = function (M) { - M = asUInt32Array(M) - - // swap - var m1 = M[1] - M[1] = M[3] - M[3] = m1 - - var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) - var buf = Buffer.allocUnsafe(16) - buf.writeUInt32BE(out[0], 0) - buf.writeUInt32BE(out[3], 4) - buf.writeUInt32BE(out[2], 8) - buf.writeUInt32BE(out[1], 12) - return buf -} - -AES.prototype.scrub = function () { - scrubVec(this._keySchedule) - scrubVec(this._invKeySchedule) - scrubVec(this._key) -} - -module.exports.AES = AES - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/authCipher.js": -/*!*******************************************************!*\ - !*** ../../node_modules/browserify-aes/authCipher.js ***! - \*******************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var aes = __webpack_require__(/*! ./aes */ "../../node_modules/browserify-aes/aes.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var Transform = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var GHASH = __webpack_require__(/*! ./ghash */ "../../node_modules/browserify-aes/ghash.js") -var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") -var incr32 = __webpack_require__(/*! ./incr32 */ "../../node_modules/browserify-aes/incr32.js") - -function xorTest (a, b) { - var out = 0 - if (a.length !== b.length) out++ - - var len = Math.min(a.length, b.length) - for (var i = 0; i < len; ++i) { - out += (a[i] ^ b[i]) - } - - return out -} - -function calcIv (self, iv, ck) { - if (iv.length === 12) { - self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) - return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) - } - var ghash = new GHASH(ck) - var len = iv.length - var toPad = len % 16 - ghash.update(iv) - if (toPad) { - toPad = 16 - toPad - ghash.update(Buffer.alloc(toPad, 0)) - } - ghash.update(Buffer.alloc(8, 0)) - var ivBits = len * 8 - var tail = Buffer.alloc(8) - tail.writeUIntBE(ivBits, 0, 8) - ghash.update(tail) - self._finID = ghash.state - var out = Buffer.from(self._finID) - incr32(out) - return out -} -function StreamCipher (mode, key, iv, decrypt) { - Transform.call(this) - - var h = Buffer.alloc(4, 0) - - this._cipher = new aes.AES(key) - var ck = this._cipher.encryptBlock(h) - this._ghash = new GHASH(ck) - iv = calcIv(this, iv, ck) - - this._prev = Buffer.from(iv) - this._cache = Buffer.allocUnsafe(0) - this._secCache = Buffer.allocUnsafe(0) - this._decrypt = decrypt - this._alen = 0 - this._len = 0 - this._mode = mode - - this._authTag = null - this._called = false -} - -inherits(StreamCipher, Transform) - -StreamCipher.prototype._update = function (chunk) { - if (!this._called && this._alen) { - var rump = 16 - (this._alen % 16) - if (rump < 16) { - rump = Buffer.alloc(rump, 0) - this._ghash.update(rump) - } - } - - this._called = true - var out = this._mode.encrypt(this, chunk) - if (this._decrypt) { - this._ghash.update(chunk) - } else { - this._ghash.update(out) - } - this._len += chunk.length - return out -} - -StreamCipher.prototype._final = function () { - if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') - - var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) - if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') - - this._authTag = tag - this._cipher.scrub() -} - -StreamCipher.prototype.getAuthTag = function getAuthTag () { - if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') - - return this._authTag -} - -StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { - if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') - - this._authTag = tag -} - -StreamCipher.prototype.setAAD = function setAAD (buf) { - if (this._called) throw new Error('Attempting to set AAD in unsupported state') - - this._ghash.update(buf) - this._alen += buf.length -} - -module.exports = StreamCipher - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/browser.js": -/*!****************************************************!*\ - !*** ../../node_modules/browserify-aes/browser.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var ciphers = __webpack_require__(/*! ./encrypter */ "../../node_modules/browserify-aes/encrypter.js") -var deciphers = __webpack_require__(/*! ./decrypter */ "../../node_modules/browserify-aes/decrypter.js") -var modes = __webpack_require__(/*! ./modes/list.json */ "../../node_modules/browserify-aes/modes/list.json") - -function getCiphers () { - return Object.keys(modes) -} - -exports.createCipher = exports.Cipher = ciphers.createCipher -exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv -exports.createDecipher = exports.Decipher = deciphers.createDecipher -exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv -exports.listCiphers = exports.getCiphers = getCiphers - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/decrypter.js": -/*!******************************************************!*\ - !*** ../../node_modules/browserify-aes/decrypter.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var AuthCipher = __webpack_require__(/*! ./authCipher */ "../../node_modules/browserify-aes/authCipher.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var MODES = __webpack_require__(/*! ./modes */ "../../node_modules/browserify-aes/modes/index.js") -var StreamCipher = __webpack_require__(/*! ./streamCipher */ "../../node_modules/browserify-aes/streamCipher.js") -var Transform = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") -var aes = __webpack_require__(/*! ./aes */ "../../node_modules/browserify-aes/aes.js") -var ebtk = __webpack_require__(/*! evp_bytestokey */ "../../node_modules/evp_bytestokey/index.js") -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") - -function Decipher (mode, key, iv) { - Transform.call(this) - - this._cache = new Splitter() - this._last = void 0 - this._cipher = new aes.AES(key) - this._prev = Buffer.from(iv) - this._mode = mode - this._autopadding = true -} - -inherits(Decipher, Transform) - -Decipher.prototype._update = function (data) { - this._cache.add(data) - var chunk - var thing - var out = [] - while ((chunk = this._cache.get(this._autopadding))) { - thing = this._mode.decrypt(this, chunk) - out.push(thing) - } - return Buffer.concat(out) -} - -Decipher.prototype._final = function () { - var chunk = this._cache.flush() - if (this._autopadding) { - return unpad(this._mode.decrypt(this, chunk)) - } else if (chunk) { - throw new Error('data not multiple of block length') - } -} - -Decipher.prototype.setAutoPadding = function (setTo) { - this._autopadding = !!setTo - return this -} - -function Splitter () { - this.cache = Buffer.allocUnsafe(0) -} - -Splitter.prototype.add = function (data) { - this.cache = Buffer.concat([this.cache, data]) -} - -Splitter.prototype.get = function (autoPadding) { - var out - if (autoPadding) { - if (this.cache.length > 16) { - out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - } else { - if (this.cache.length >= 16) { - out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - } - - return null -} - -Splitter.prototype.flush = function () { - if (this.cache.length) return this.cache -} - -function unpad (last) { - var padded = last[15] - if (padded < 1 || padded > 16) { - throw new Error('unable to decrypt data') - } - var i = -1 - while (++i < padded) { - if (last[(i + (16 - padded))] !== padded) { - throw new Error('unable to decrypt data') - } - } - if (padded === 16) return - - return last.slice(0, 16 - padded) -} - -function createDecipheriv (suite, password, iv) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - if (typeof iv === 'string') iv = Buffer.from(iv) - if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) - - if (typeof password === 'string') password = Buffer.from(password) - if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) - - if (config.type === 'stream') { - return new StreamCipher(config.module, password, iv, true) - } else if (config.type === 'auth') { - return new AuthCipher(config.module, password, iv, true) - } - - return new Decipher(config.module, password, iv) -} - -function createDecipher (suite, password) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - var keys = ebtk(password, false, config.key, config.iv) - return createDecipheriv(suite, keys.key, keys.iv) -} - -exports.createDecipher = createDecipher -exports.createDecipheriv = createDecipheriv - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/encrypter.js": -/*!******************************************************!*\ - !*** ../../node_modules/browserify-aes/encrypter.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var MODES = __webpack_require__(/*! ./modes */ "../../node_modules/browserify-aes/modes/index.js") -var AuthCipher = __webpack_require__(/*! ./authCipher */ "../../node_modules/browserify-aes/authCipher.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var StreamCipher = __webpack_require__(/*! ./streamCipher */ "../../node_modules/browserify-aes/streamCipher.js") -var Transform = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") -var aes = __webpack_require__(/*! ./aes */ "../../node_modules/browserify-aes/aes.js") -var ebtk = __webpack_require__(/*! evp_bytestokey */ "../../node_modules/evp_bytestokey/index.js") -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") - -function Cipher (mode, key, iv) { - Transform.call(this) - - this._cache = new Splitter() - this._cipher = new aes.AES(key) - this._prev = Buffer.from(iv) - this._mode = mode - this._autopadding = true -} - -inherits(Cipher, Transform) - -Cipher.prototype._update = function (data) { - this._cache.add(data) - var chunk - var thing - var out = [] - - while ((chunk = this._cache.get())) { - thing = this._mode.encrypt(this, chunk) - out.push(thing) - } - - return Buffer.concat(out) -} - -var PADDING = Buffer.alloc(16, 0x10) - -Cipher.prototype._final = function () { - var chunk = this._cache.flush() - if (this._autopadding) { - chunk = this._mode.encrypt(this, chunk) - this._cipher.scrub() - return chunk - } - - if (!chunk.equals(PADDING)) { - this._cipher.scrub() - throw new Error('data not multiple of block length') - } -} - -Cipher.prototype.setAutoPadding = function (setTo) { - this._autopadding = !!setTo - return this -} - -function Splitter () { - this.cache = Buffer.allocUnsafe(0) -} - -Splitter.prototype.add = function (data) { - this.cache = Buffer.concat([this.cache, data]) -} - -Splitter.prototype.get = function () { - if (this.cache.length > 15) { - var out = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - return out - } - return null -} - -Splitter.prototype.flush = function () { - var len = 16 - this.cache.length - var padBuff = Buffer.allocUnsafe(len) - - var i = -1 - while (++i < len) { - padBuff.writeUInt8(len, i) - } - - return Buffer.concat([this.cache, padBuff]) -} - -function createCipheriv (suite, password, iv) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - if (typeof password === 'string') password = Buffer.from(password) - if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) - - if (typeof iv === 'string') iv = Buffer.from(iv) - if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) - - if (config.type === 'stream') { - return new StreamCipher(config.module, password, iv) - } else if (config.type === 'auth') { - return new AuthCipher(config.module, password, iv) - } - - return new Cipher(config.module, password, iv) -} - -function createCipher (suite, password) { - var config = MODES[suite.toLowerCase()] - if (!config) throw new TypeError('invalid suite type') - - var keys = ebtk(password, false, config.key, config.iv) - return createCipheriv(suite, keys.key, keys.iv) -} - -exports.createCipheriv = createCipheriv -exports.createCipher = createCipher - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/ghash.js": -/*!**************************************************!*\ - !*** ../../node_modules/browserify-aes/ghash.js ***! - \**************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var ZEROES = Buffer.alloc(16, 0) - -function toArray (buf) { - return [ - buf.readUInt32BE(0), - buf.readUInt32BE(4), - buf.readUInt32BE(8), - buf.readUInt32BE(12) - ] -} - -function fromArray (out) { - var buf = Buffer.allocUnsafe(16) - buf.writeUInt32BE(out[0] >>> 0, 0) - buf.writeUInt32BE(out[1] >>> 0, 4) - buf.writeUInt32BE(out[2] >>> 0, 8) - buf.writeUInt32BE(out[3] >>> 0, 12) - return buf -} - -function GHASH (key) { - this.h = key - this.state = Buffer.alloc(16, 0) - this.cache = Buffer.allocUnsafe(0) -} - -// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html -// by Juho Vähä-Herttua -GHASH.prototype.ghash = function (block) { - var i = -1 - while (++i < block.length) { - this.state[i] ^= block[i] - } - this._multiply() -} - -GHASH.prototype._multiply = function () { - var Vi = toArray(this.h) - var Zi = [0, 0, 0, 0] - var j, xi, lsbVi - var i = -1 - while (++i < 128) { - xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 - if (xi) { - // Z_i+1 = Z_i ^ V_i - Zi[0] ^= Vi[0] - Zi[1] ^= Vi[1] - Zi[2] ^= Vi[2] - Zi[3] ^= Vi[3] - } - - // Store the value of LSB(V_i) - lsbVi = (Vi[3] & 1) !== 0 - - // V_i+1 = V_i >> 1 - for (j = 3; j > 0; j--) { - Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) - } - Vi[0] = Vi[0] >>> 1 - - // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R - if (lsbVi) { - Vi[0] = Vi[0] ^ (0xe1 << 24) - } - } - this.state = fromArray(Zi) -} - -GHASH.prototype.update = function (buf) { - this.cache = Buffer.concat([this.cache, buf]) - var chunk - while (this.cache.length >= 16) { - chunk = this.cache.slice(0, 16) - this.cache = this.cache.slice(16) - this.ghash(chunk) - } -} - -GHASH.prototype.final = function (abl, bl) { - if (this.cache.length) { - this.ghash(Buffer.concat([this.cache, ZEROES], 16)) - } - - this.ghash(fromArray([0, abl, 0, bl])) - return this.state -} - -module.exports = GHASH - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/incr32.js": -/*!***************************************************!*\ - !*** ../../node_modules/browserify-aes/incr32.js ***! - \***************************************************/ -/***/ ((module) => { - -function incr32 (iv) { - var len = iv.length - var item - while (len--) { - item = iv.readUInt8(len) - if (item === 255) { - iv.writeUInt8(0, len) - } else { - item++ - iv.writeUInt8(item, len) - break - } - } -} -module.exports = incr32 - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/modes/cbc.js": -/*!******************************************************!*\ - !*** ../../node_modules/browserify-aes/modes/cbc.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") - -exports.encrypt = function (self, block) { - var data = xor(block, self._prev) - - self._prev = self._cipher.encryptBlock(data) - return self._prev -} - -exports.decrypt = function (self, block) { - var pad = self._prev - - self._prev = block - var out = self._cipher.decryptBlock(block) - - return xor(out, pad) -} - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/modes/cfb.js": -/*!******************************************************!*\ - !*** ../../node_modules/browserify-aes/modes/cfb.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") - -function encryptStart (self, data, decrypt) { - var len = data.length - var out = xor(data, self._cache) - self._cache = self._cache.slice(len) - self._prev = Buffer.concat([self._prev, decrypt ? data : out]) - return out -} - -exports.encrypt = function (self, data, decrypt) { - var out = Buffer.allocUnsafe(0) - var len - - while (data.length) { - if (self._cache.length === 0) { - self._cache = self._cipher.encryptBlock(self._prev) - self._prev = Buffer.allocUnsafe(0) - } - - if (self._cache.length <= data.length) { - len = self._cache.length - out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) - data = data.slice(len) - } else { - out = Buffer.concat([out, encryptStart(self, data, decrypt)]) - break - } - } - - return out -} - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/modes/cfb1.js": -/*!*******************************************************!*\ - !*** ../../node_modules/browserify-aes/modes/cfb1.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -function encryptByte (self, byteParam, decrypt) { - var pad - var i = -1 - var len = 8 - var out = 0 - var bit, value - while (++i < len) { - pad = self._cipher.encryptBlock(self._prev) - bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 - value = pad[0] ^ bit - out += ((value & 0x80) >> (i % 8)) - self._prev = shiftIn(self._prev, decrypt ? bit : value) - } - return out -} - -function shiftIn (buffer, value) { - var len = buffer.length - var i = -1 - var out = Buffer.allocUnsafe(buffer.length) - buffer = Buffer.concat([buffer, Buffer.from([value])]) - - while (++i < len) { - out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) - } - - return out -} - -exports.encrypt = function (self, chunk, decrypt) { - var len = chunk.length - var out = Buffer.allocUnsafe(len) - var i = -1 - - while (++i < len) { - out[i] = encryptByte(self, chunk[i], decrypt) - } - - return out -} - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/modes/cfb8.js": -/*!*******************************************************!*\ - !*** ../../node_modules/browserify-aes/modes/cfb8.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -function encryptByte (self, byteParam, decrypt) { - var pad = self._cipher.encryptBlock(self._prev) - var out = pad[0] ^ byteParam - - self._prev = Buffer.concat([ - self._prev.slice(1), - Buffer.from([decrypt ? byteParam : out]) - ]) - - return out -} - -exports.encrypt = function (self, chunk, decrypt) { - var len = chunk.length - var out = Buffer.allocUnsafe(len) - var i = -1 - - while (++i < len) { - out[i] = encryptByte(self, chunk[i], decrypt) - } - - return out -} - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/modes/ctr.js": -/*!******************************************************!*\ - !*** ../../node_modules/browserify-aes/modes/ctr.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var incr32 = __webpack_require__(/*! ../incr32 */ "../../node_modules/browserify-aes/incr32.js") - -function getBlock (self) { - var out = self._cipher.encryptBlockRaw(self._prev) - incr32(self._prev) - return out -} - -var blockSize = 16 -exports.encrypt = function (self, chunk) { - var chunkNum = Math.ceil(chunk.length / blockSize) - var start = self._cache.length - self._cache = Buffer.concat([ - self._cache, - Buffer.allocUnsafe(chunkNum * blockSize) - ]) - for (var i = 0; i < chunkNum; i++) { - var out = getBlock(self) - var offset = start + i * blockSize - self._cache.writeUInt32BE(out[0], offset + 0) - self._cache.writeUInt32BE(out[1], offset + 4) - self._cache.writeUInt32BE(out[2], offset + 8) - self._cache.writeUInt32BE(out[3], offset + 12) - } - var pad = self._cache.slice(0, chunk.length) - self._cache = self._cache.slice(chunk.length) - return xor(chunk, pad) -} - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/modes/ecb.js": -/*!******************************************************!*\ - !*** ../../node_modules/browserify-aes/modes/ecb.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, exports) => { - -exports.encrypt = function (self, block) { - return self._cipher.encryptBlock(block) -} - -exports.decrypt = function (self, block) { - return self._cipher.decryptBlock(block) -} - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/modes/index.js": -/*!********************************************************!*\ - !*** ../../node_modules/browserify-aes/modes/index.js ***! - \********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var modeModules = { - ECB: __webpack_require__(/*! ./ecb */ "../../node_modules/browserify-aes/modes/ecb.js"), - CBC: __webpack_require__(/*! ./cbc */ "../../node_modules/browserify-aes/modes/cbc.js"), - CFB: __webpack_require__(/*! ./cfb */ "../../node_modules/browserify-aes/modes/cfb.js"), - CFB8: __webpack_require__(/*! ./cfb8 */ "../../node_modules/browserify-aes/modes/cfb8.js"), - CFB1: __webpack_require__(/*! ./cfb1 */ "../../node_modules/browserify-aes/modes/cfb1.js"), - OFB: __webpack_require__(/*! ./ofb */ "../../node_modules/browserify-aes/modes/ofb.js"), - CTR: __webpack_require__(/*! ./ctr */ "../../node_modules/browserify-aes/modes/ctr.js"), - GCM: __webpack_require__(/*! ./ctr */ "../../node_modules/browserify-aes/modes/ctr.js") -} - -var modes = __webpack_require__(/*! ./list.json */ "../../node_modules/browserify-aes/modes/list.json") - -for (var key in modes) { - modes[key].module = modeModules[modes[key].mode] -} - -module.exports = modes - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/modes/ofb.js": -/*!******************************************************!*\ - !*** ../../node_modules/browserify-aes/modes/ofb.js ***! - \******************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") - -function getBlock (self) { - self._prev = self._cipher.encryptBlock(self._prev) - return self._prev -} - -exports.encrypt = function (self, chunk) { - while (self._cache.length < chunk.length) { - self._cache = Buffer.concat([self._cache, getBlock(self)]) - } - - var pad = self._cache.slice(0, chunk.length) - self._cache = self._cache.slice(chunk.length) - return xor(chunk, pad) -} - - -/***/ }), - -/***/ "../../node_modules/browserify-aes/streamCipher.js": -/*!*********************************************************!*\ - !*** ../../node_modules/browserify-aes/streamCipher.js ***! - \*********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var aes = __webpack_require__(/*! ./aes */ "../../node_modules/browserify-aes/aes.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var Transform = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") - -function StreamCipher (mode, key, iv, decrypt) { - Transform.call(this) - - this._cipher = new aes.AES(key) - this._prev = Buffer.from(iv) - this._cache = Buffer.allocUnsafe(0) - this._secCache = Buffer.allocUnsafe(0) - this._decrypt = decrypt - this._mode = mode -} - -inherits(StreamCipher, Transform) - -StreamCipher.prototype._update = function (chunk) { - return this._mode.encrypt(this, chunk, this._decrypt) -} - -StreamCipher.prototype._final = function () { - this._cipher.scrub() -} - -module.exports = StreamCipher - - -/***/ }), - -/***/ "../../node_modules/browserify-cipher/browser.js": -/*!*******************************************************!*\ - !*** ../../node_modules/browserify-cipher/browser.js ***! - \*******************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var DES = __webpack_require__(/*! browserify-des */ "../../node_modules/browserify-des/index.js") -var aes = __webpack_require__(/*! browserify-aes/browser */ "../../node_modules/browserify-aes/browser.js") -var aesModes = __webpack_require__(/*! browserify-aes/modes */ "../../node_modules/browserify-aes/modes/index.js") -var desModes = __webpack_require__(/*! browserify-des/modes */ "../../node_modules/browserify-des/modes.js") -var ebtk = __webpack_require__(/*! evp_bytestokey */ "../../node_modules/evp_bytestokey/index.js") - -function createCipher (suite, password) { - suite = suite.toLowerCase() - - var keyLen, ivLen - if (aesModes[suite]) { - keyLen = aesModes[suite].key - ivLen = aesModes[suite].iv - } else if (desModes[suite]) { - keyLen = desModes[suite].key * 8 - ivLen = desModes[suite].iv - } else { - throw new TypeError('invalid suite type') - } - - var keys = ebtk(password, false, keyLen, ivLen) - return createCipheriv(suite, keys.key, keys.iv) -} - -function createDecipher (suite, password) { - suite = suite.toLowerCase() - - var keyLen, ivLen - if (aesModes[suite]) { - keyLen = aesModes[suite].key - ivLen = aesModes[suite].iv - } else if (desModes[suite]) { - keyLen = desModes[suite].key * 8 - ivLen = desModes[suite].iv - } else { - throw new TypeError('invalid suite type') - } - - var keys = ebtk(password, false, keyLen, ivLen) - return createDecipheriv(suite, keys.key, keys.iv) -} - -function createCipheriv (suite, key, iv) { - suite = suite.toLowerCase() - if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) - if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) - - throw new TypeError('invalid suite type') -} - -function createDecipheriv (suite, key, iv) { - suite = suite.toLowerCase() - if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) - if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) - - throw new TypeError('invalid suite type') -} - -function getCiphers () { - return Object.keys(desModes).concat(aes.getCiphers()) -} - -exports.createCipher = exports.Cipher = createCipher -exports.createCipheriv = exports.Cipheriv = createCipheriv -exports.createDecipher = exports.Decipher = createDecipher -exports.createDecipheriv = exports.Decipheriv = createDecipheriv -exports.listCiphers = exports.getCiphers = getCiphers - - -/***/ }), - -/***/ "../../node_modules/browserify-des/index.js": -/*!**************************************************!*\ - !*** ../../node_modules/browserify-des/index.js ***! - \**************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var CipherBase = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") -var des = __webpack_require__(/*! des.js */ "../../node_modules/des.js/lib/des.js") -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var modes = { - 'des-ede3-cbc': des.CBC.instantiate(des.EDE), - 'des-ede3': des.EDE, - 'des-ede-cbc': des.CBC.instantiate(des.EDE), - 'des-ede': des.EDE, - 'des-cbc': des.CBC.instantiate(des.DES), - 'des-ecb': des.DES -} -modes.des = modes['des-cbc'] -modes.des3 = modes['des-ede3-cbc'] -module.exports = DES -inherits(DES, CipherBase) -function DES (opts) { - CipherBase.call(this) - var modeName = opts.mode.toLowerCase() - var mode = modes[modeName] - var type - if (opts.decrypt) { - type = 'decrypt' - } else { - type = 'encrypt' - } - var key = opts.key - if (!Buffer.isBuffer(key)) { - key = Buffer.from(key) - } - if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { - key = Buffer.concat([key, key.slice(0, 8)]) - } - var iv = opts.iv - if (!Buffer.isBuffer(iv)) { - iv = Buffer.from(iv) - } - this._des = mode.create({ - key: key, - iv: iv, - type: type - }) -} -DES.prototype._update = function (data) { - return Buffer.from(this._des.update(data)) -} -DES.prototype._final = function () { - return Buffer.from(this._des.final()) -} - - -/***/ }), - -/***/ "../../node_modules/browserify-des/modes.js": -/*!**************************************************!*\ - !*** ../../node_modules/browserify-des/modes.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, exports) => { - -exports["des-ecb"] = { - key: 8, - iv: 0 -} -exports["des-cbc"] = exports.des = { - key: 8, - iv: 8 -} -exports["des-ede3-cbc"] = exports.des3 = { - key: 24, - iv: 8 -} -exports["des-ede3"] = { - key: 24, - iv: 0 -} -exports["des-ede-cbc"] = { - key: 16, - iv: 8 -} -exports["des-ede"] = { - key: 16, - iv: 0 -} - - -/***/ }), - -/***/ "../../node_modules/browserify-rsa/index.js": -/*!**************************************************!*\ - !*** ../../node_modules/browserify-rsa/index.js ***! - \**************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/bn.js/lib/bn.js") -var randomBytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js") - -function blind (priv) { - var r = getr(priv) - var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed() - return { blinder: blinder, unblinder: r.invm(priv.modulus) } -} - -function getr (priv) { - var len = priv.modulus.byteLength() - var r - do { - r = new BN(randomBytes(len)) - } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) - return r -} - -function crt (msg, priv) { - var blinds = blind(priv) - var len = priv.modulus.byteLength() - var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus) - var c1 = blinded.toRed(BN.mont(priv.prime1)) - var c2 = blinded.toRed(BN.mont(priv.prime2)) - var qinv = priv.coefficient - var p = priv.prime1 - var q = priv.prime2 - var m1 = c1.redPow(priv.exponent1).fromRed() - var m2 = c2.redPow(priv.exponent2).fromRed() - var h = m1.isub(m2).imul(qinv).umod(p).imul(q) - return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len) -} -crt.getr = getr - -module.exports = crt - - -/***/ }), - -/***/ "../../node_modules/browserify-sign/algos.js": -/*!***************************************************!*\ - !*** ../../node_modules/browserify-sign/algos.js ***! - \***************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -module.exports = __webpack_require__(/*! ./browser/algorithms.json */ "../../node_modules/browserify-sign/browser/algorithms.json"); - - -/***/ }), - -/***/ "../../node_modules/browserify-sign/browser/index.js": -/*!***********************************************************!*\ - !*** ../../node_modules/browserify-sign/browser/index.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); -var createHash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js"); -var stream = __webpack_require__(/*! readable-stream */ "../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var sign = __webpack_require__(/*! ./sign */ "../../node_modules/browserify-sign/browser/sign.js"); -var verify = __webpack_require__(/*! ./verify */ "../../node_modules/browserify-sign/browser/verify.js"); - -var algorithms = __webpack_require__(/*! ./algorithms.json */ "../../node_modules/browserify-sign/browser/algorithms.json"); -Object.keys(algorithms).forEach(function (key) { - algorithms[key].id = Buffer.from(algorithms[key].id, 'hex'); - algorithms[key.toLowerCase()] = algorithms[key]; -}); - -function Sign(algorithm) { - stream.Writable.call(this); - - var data = algorithms[algorithm]; - if (!data) { throw new Error('Unknown message digest'); } - - this._hashType = data.hash; - this._hash = createHash(data.hash); - this._tag = data.id; - this._signType = data.sign; -} -inherits(Sign, stream.Writable); - -Sign.prototype._write = function _write(data, _, done) { - this._hash.update(data); - done(); -}; - -Sign.prototype.update = function update(data, enc) { - this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data); - - return this; -}; - -Sign.prototype.sign = function signMethod(key, enc) { - this.end(); - var hash = this._hash.digest(); - var sig = sign(hash, key, this._hashType, this._signType, this._tag); - - return enc ? sig.toString(enc) : sig; -}; - -function Verify(algorithm) { - stream.Writable.call(this); - - var data = algorithms[algorithm]; - if (!data) { throw new Error('Unknown message digest'); } - - this._hash = createHash(data.hash); - this._tag = data.id; - this._signType = data.sign; -} -inherits(Verify, stream.Writable); - -Verify.prototype._write = function _write(data, _, done) { - this._hash.update(data); - done(); -}; - -Verify.prototype.update = function update(data, enc) { - this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data); - - return this; -}; - -Verify.prototype.verify = function verifyMethod(key, sig, enc) { - var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig; - - this.end(); - var hash = this._hash.digest(); - return verify(sigBuffer, hash, key, this._signType, this._tag); -}; - -function createSign(algorithm) { - return new Sign(algorithm); -} - -function createVerify(algorithm) { - return new Verify(algorithm); -} - -module.exports = { - Sign: createSign, - Verify: createVerify, - createSign: createSign, - createVerify: createVerify -}; - - -/***/ }), - -/***/ "../../node_modules/browserify-sign/browser/sign.js": -/*!**********************************************************!*\ - !*** ../../node_modules/browserify-sign/browser/sign.js ***! - \**********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); -var createHmac = __webpack_require__(/*! create-hmac */ "../../node_modules/create-hmac/browser.js"); -var crt = __webpack_require__(/*! browserify-rsa */ "../../node_modules/browserify-rsa/index.js"); -var EC = (__webpack_require__(/*! elliptic */ "../../node_modules/elliptic/lib/elliptic.js").ec); -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/bn.js/lib/bn.js"); -var parseKeys = __webpack_require__(/*! parse-asn1 */ "../../node_modules/parse-asn1/index.js"); -var curves = __webpack_require__(/*! ./curves.json */ "../../node_modules/browserify-sign/browser/curves.json"); - -var RSA_PKCS1_PADDING = 1; - -function sign(hash, key, hashType, signType, tag) { - var priv = parseKeys(key); - if (priv.curve) { - // rsa keys can be interpreted as ecdsa ones in openssl - if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); } - return ecSign(hash, priv); - } else if (priv.type === 'dsa') { - if (signType !== 'dsa') { throw new Error('wrong private key type'); } - return dsaSign(hash, priv, hashType); - } - if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); } - if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); } - - hash = Buffer.concat([tag, hash]); - var len = priv.modulus.byteLength(); - var pad = [0, 1]; - while (hash.length + pad.length + 1 < len) { pad.push(0xff); } - pad.push(0x00); - var i = -1; - while (++i < hash.length) { pad.push(hash[i]); } - - var out = crt(pad, priv); - return out; -} - -function ecSign(hash, priv) { - var curveId = curves[priv.curve.join('.')]; - if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); } - - var curve = new EC(curveId); - var key = curve.keyFromPrivate(priv.privateKey); - var out = key.sign(hash); - - return Buffer.from(out.toDER()); -} - -function dsaSign(hash, priv, algo) { - var x = priv.params.priv_key; - var p = priv.params.p; - var q = priv.params.q; - var g = priv.params.g; - var r = new BN(0); - var k; - var H = bits2int(hash, q).mod(q); - var s = false; - var kv = getKey(x, q, hash, algo); - while (s === false) { - k = makeKey(q, kv, algo); - r = makeR(g, k, p, q); - s = k.invm(q).imul(H.add(x.mul(r))).mod(q); - if (s.cmpn(0) === 0) { - s = false; - r = new BN(0); - } - } - return toDER(r, s); -} - -function toDER(r, s) { - r = r.toArray(); - s = s.toArray(); - - // Pad values - if (r[0] & 0x80) { r = [0].concat(r); } - if (s[0] & 0x80) { s = [0].concat(s); } - - var total = r.length + s.length + 4; - var res = [ - 0x30, total, 0x02, r.length - ]; - res = res.concat(r, [0x02, s.length], s); - return Buffer.from(res); -} - -function getKey(x, q, hash, algo) { - x = Buffer.from(x.toArray()); - if (x.length < q.byteLength()) { - var zeros = Buffer.alloc(q.byteLength() - x.length); - x = Buffer.concat([zeros, x]); - } - var hlen = hash.length; - var hbits = bits2octets(hash, q); - var v = Buffer.alloc(hlen); - v.fill(1); - var k = Buffer.alloc(hlen); - k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest(); - v = createHmac(algo, k).update(v).digest(); - k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest(); - v = createHmac(algo, k).update(v).digest(); - return { k: k, v: v }; -} - -function bits2int(obits, q) { - var bits = new BN(obits); - var shift = (obits.length << 3) - q.bitLength(); - if (shift > 0) { bits.ishrn(shift); } - return bits; -} - -function bits2octets(bits, q) { - bits = bits2int(bits, q); - bits = bits.mod(q); - var out = Buffer.from(bits.toArray()); - if (out.length < q.byteLength()) { - var zeros = Buffer.alloc(q.byteLength() - out.length); - out = Buffer.concat([zeros, out]); - } - return out; -} - -function makeKey(q, kv, algo) { - var t; - var k; - - do { - t = Buffer.alloc(0); - - while (t.length * 8 < q.bitLength()) { - kv.v = createHmac(algo, kv.k).update(kv.v).digest(); - t = Buffer.concat([t, kv.v]); - } - - k = bits2int(t, q); - kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest(); - kv.v = createHmac(algo, kv.k).update(kv.v).digest(); - } while (k.cmp(q) !== -1); - - return k; -} - -function makeR(g, k, p, q) { - return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); -} - -module.exports = sign; -module.exports.getKey = getKey; -module.exports.makeKey = makeKey; - - -/***/ }), - -/***/ "../../node_modules/browserify-sign/browser/verify.js": -/*!************************************************************!*\ - !*** ../../node_modules/browserify-sign/browser/verify.js ***! - \************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/bn.js/lib/bn.js"); -var EC = (__webpack_require__(/*! elliptic */ "../../node_modules/elliptic/lib/elliptic.js").ec); -var parseKeys = __webpack_require__(/*! parse-asn1 */ "../../node_modules/parse-asn1/index.js"); -var curves = __webpack_require__(/*! ./curves.json */ "../../node_modules/browserify-sign/browser/curves.json"); - -function verify(sig, hash, key, signType, tag) { - var pub = parseKeys(key); - if (pub.type === 'ec') { - // rsa keys can be interpreted as ecdsa ones in openssl - if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); } - return ecVerify(sig, hash, pub); - } else if (pub.type === 'dsa') { - if (signType !== 'dsa') { throw new Error('wrong public key type'); } - return dsaVerify(sig, hash, pub); - } - if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); } - - hash = Buffer.concat([tag, hash]); - var len = pub.modulus.byteLength(); - var pad = [1]; - var padNum = 0; - while (hash.length + pad.length + 2 < len) { - pad.push(0xff); - padNum += 1; - } - pad.push(0x00); - var i = -1; - while (++i < hash.length) { - pad.push(hash[i]); - } - pad = Buffer.from(pad); - var red = BN.mont(pub.modulus); - sig = new BN(sig).toRed(red); - - sig = sig.redPow(new BN(pub.publicExponent)); - sig = Buffer.from(sig.fromRed().toArray()); - var out = padNum < 8 ? 1 : 0; - len = Math.min(sig.length, pad.length); - if (sig.length !== pad.length) { out = 1; } - - i = -1; - while (++i < len) { out |= sig[i] ^ pad[i]; } - return out === 0; -} - -function ecVerify(sig, hash, pub) { - var curveId = curves[pub.data.algorithm.curve.join('.')]; - if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); } - - var curve = new EC(curveId); - var pubkey = pub.data.subjectPrivateKey.data; - - return curve.verify(hash, sig, pubkey); -} - -function dsaVerify(sig, hash, pub) { - var p = pub.data.p; - var q = pub.data.q; - var g = pub.data.g; - var y = pub.data.pub_key; - var unpacked = parseKeys.signature.decode(sig, 'der'); - var s = unpacked.s; - var r = unpacked.r; - checkValue(s, q); - checkValue(r, q); - var montp = BN.mont(p); - var w = s.invm(q); - var v = g.toRed(montp) - .redPow(new BN(hash).mul(w).mod(q)) - .fromRed() - .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()) - .mod(p) - .mod(q); - return v.cmp(r) === 0; -} - -function checkValue(b, q) { - if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); } - if (b.cmp(q) >= 0) { throw new Error('invalid sig'); } -} - -module.exports = verify; - - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/isarray/index.js": -/*!************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/isarray/index.js ***! - \************************************************************************/ -/***/ ((module) => { - -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; - - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js": -/*!*********************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js ***! - \*********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - - - -/**/ - -var pna = __webpack_require__(/*! process-nextick-args */ "../../node_modules/process-nextick-args/index.js"); -/**/ - -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - keys.push(key); - }return keys; -}; -/**/ - -module.exports = Duplex; - -/**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); -util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -/**/ - -var Readable = __webpack_require__(/*! ./_stream_readable */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js"); -var Writable = __webpack_require__(/*! ./_stream_writable */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js"); - -util.inherits(Duplex, Readable); - -{ - // avoid scope creep, the keys array can then be collected - var keys = objectKeys(Writable.prototype); - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; - } -} - -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) this.readable = false; - - if (options && options.writable === false) this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; - - this.once('end', onend); -} - -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; - } -}); - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) return; - - // no more data can be written. - // But allow more writes to happen in this tick. - pna.nextTick(onEndNT, this); -} - -function onEndNT(self) { - self.end(); -} - -Object.defineProperty(Duplex.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); - -Duplex.prototype._destroy = function (err, cb) { - this.push(null); - this.end(); - - pna.nextTick(cb, err); -}; - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js": -/*!**************************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js ***! - \**************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - - - -module.exports = PassThrough; - -var Transform = __webpack_require__(/*! ./_stream_transform */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js"); - -/**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); -util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js": -/*!***********************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js ***! - \***********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -/**/ - -var pna = __webpack_require__(/*! process-nextick-args */ "../../node_modules/process-nextick-args/index.js"); -/**/ - -module.exports = Readable; - -/**/ -var isArray = __webpack_require__(/*! isarray */ "../../node_modules/browserify-sign/node_modules/isarray/index.js"); -/**/ - -/**/ -var Duplex; -/**/ - -Readable.ReadableState = ReadableState; - -/**/ -var EE = (__webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter); - -var EElistenerCount = function (emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ -var Stream = __webpack_require__(/*! ./internal/streams/stream */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js"); -/**/ - -/**/ - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js").Buffer); -var OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ - -/**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); -util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -/**/ - -/**/ -var debugUtil = __webpack_require__(/*! util */ "?ec48"); -var debug = void 0; -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ - -var BufferList = __webpack_require__(/*! ./internal/streams/BufferList */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js"); -var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js"); -var StringDecoder; - -util.inherits(Readable, Stream); - -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; - -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); - - // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; -} - -function ReadableState(options, stream) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); - - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var readableHwm = options.readableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; - - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); - - // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - - // has it been destroyed - this.destroyed = false; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) StringDecoder = (__webpack_require__(/*! string_decoder/ */ "../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js").StringDecoder); - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); - - if (!(this instanceof Readable)) return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - if (options) { - if (typeof options.read === 'function') this._read = options.read; - - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } - - Stream.call(this); -} - -Object.defineProperty(Readable.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined) { - return false; - } - return this._readableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - } -}); - -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; -Readable.prototype._destroy = function (err, cb) { - this.push(null); - cb(err); -}; - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; - -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - var state = stream._readableState; - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (addToFront) { - if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); - } else if (state.ended) { - stream.emit('error', new Error('stream.push() after EOF')); - } else { - state.reading = false; - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - } - } - - return needMoreData(state); -} - -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - - if (state.needReadable) emitReadable(stream); - } - maybeReadMore(stream, state); -} - -function chunkInvalid(state, chunk) { - var er; - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); -} - -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; - -// backwards compatibility. -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = (__webpack_require__(/*! string_decoder/ */ "../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js").StringDecoder); - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; - -// Don't raise the hwm > 8MB -var MAX_HWM = 0x800000; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; -} - -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } - // If we're asking for more than the current hwm, then raise the hwm. - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; - // Don't have enough - if (!state.ended) { - state.needReadable = true; - return 0; - } - return state.length; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - - if (n !== 0) state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (!state.reading) n = howMuchToRead(nOrig, state); - } - - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - - if (ret === null) { - state.needReadable = true; - n = 0; - } else { - state.length -= n; - } - - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended) endReadable(this); - } - - if (ret !== null) this.emit('data', ret); - - return ret; -}; - -function onEofChunk(stream, state) { - if (state.ended) return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - pna.nextTick(maybeReadMore_, stream, state); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break;else len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function (n) { - this.emit('error', new Error('_read() is not implemented')); -}; - -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - var cleanedUp = false; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - - cleanedUp = true; - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - - // If the user pushes more data while we're writing to dest then we'll end up - // in ondata again. However, we only want to increase awaitDrain once because - // dest will only emit one 'drain' event for the multiple writes. - // => Introduce a guard on increasing awaitDrain. - var increasedAwaitDrain = false; - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - increasedAwaitDrain = false; - var ret = dest.write(chunk); - if (false === ret && !increasedAwaitDrain) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', state.awaitDrain); - state.awaitDrain++; - increasedAwaitDrain = true; - } - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); - } - - // Make sure our error handler is attached before userland ones. - prependListener(dest, 'error', onerror); - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function () { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { hasUnpiped: false }; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - - if (!dest) dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, { hasUnpiped: false }); - }return this; - } - - // try to find the right one. - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - - dest.emit('unpipe', this, unpipeInfo); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - if (ev === 'data') { - // Start flowing on next tick if stream isn't explicitly paused - if (this._readableState.flowing !== false) this.resume(); - } else if (ev === 'readable') { - var state = this._readableState; - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.emittedReadable = false; - if (!state.reading) { - pna.nextTick(nReadingNextTick, this); - } else if (state.length) { - emitReadable(this); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function () { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - resume(this, state); - } - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - pna.nextTick(resume_, stream, state); - } -} - -function resume_(stream, state) { - if (!state.reading) { - debug('resume read 0'); - stream.read(0); - } - - state.resumeScheduled = false; - state.awaitDrain = 0; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} - -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - while (state.flowing && stream.read() !== null) {} -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function (stream) { - var _this = this; - - var state = this._readableState; - var paused = false; - - stream.on('end', function () { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } - - _this.push(null); - }); - - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = _this.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function (method) { - return function () { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } - - // proxy certain important events. - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - this._read = function (n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - - return this; -}; - -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._readableState.highWaterMark; - } -}); - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = fromListPartial(n, state.buffer, state.decoder); - } - - return ret; -} - -// Extracts only enough buffered data to satisfy the amount requested. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromListPartial(n, list, hasStrings) { - var ret; - if (n < list.head.data.length) { - // slice is the same for buffers and strings - ret = list.head.data.slice(0, n); - list.head.data = list.head.data.slice(n); - } else if (n === list.head.data.length) { - // first chunk is a perfect match - ret = list.shift(); - } else { - // result spans more than one buffer - ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); - } - return ret; -} - -// Copies a specified amount of characters from the list of buffered data -// chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBufferString(n, list) { - var p = list.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = str.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -// Copies a specified amount of bytes from the list of buffered data chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBuffer(n, list) { - var ret = Buffer.allocUnsafe(n); - var p = list.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = buf.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); - - if (!state.endEmitted) { - state.ended = true; - pna.nextTick(endReadableNT, state, stream); - } -} - -function endReadableNT(state, stream) { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } -} - -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js": -/*!************************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js ***! - \************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - - - -module.exports = Transform; - -var Duplex = __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); - -/**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); -util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -/**/ - -util.inherits(Transform, Duplex); - -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) { - return this.emit('error', new Error('write callback called multiple times')); - } - - ts.writechunk = null; - ts.writecb = null; - - if (data != null) // single equals check for both `null` and `undefined` - this.push(data); - - cb(er); - - var rs = this._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} - -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - - Duplex.call(this, options); - - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - - if (typeof options.flush === 'function') this._flush = options.flush; - } - - // When the writable side finishes, then flush out anything remaining. - this.on('prefinish', prefinish); -} - -function prefinish() { - var _this = this; - - if (typeof this._flush === 'function') { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} - -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function (chunk, encoding, cb) { - throw new Error('_transform() is not implemented'); -}; - -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function (n) { - var ts = this._transformState; - - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - -Transform.prototype._destroy = function (err, cb) { - var _this2 = this; - - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - _this2.emit('close'); - }); -}; - -function done(stream, er, data) { - if (er) return stream.emit('error', er); - - if (data != null) // single equals check for both `null` and `undefined` - stream.push(data); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); - - if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); - - return stream.push(null); -} - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js": -/*!***********************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js ***! - \***********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. - - - -/**/ - -var pna = __webpack_require__(/*! process-nextick-args */ "../../node_modules/process-nextick-args/index.js"); -/**/ - -module.exports = Writable; - -/* */ -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} - -// It seems a linked list but it is not -// there will be only 2 of these for each stream -function CorkedRequest(state) { - var _this = this; - - this.next = null; - this.entry = null; - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ - -/**/ -var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; -/**/ - -/**/ -var Duplex; -/**/ - -Writable.WritableState = WritableState; - -/**/ -var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); -util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -/**/ - -/**/ -var internalUtil = { - deprecate: __webpack_require__(/*! util-deprecate */ "../../node_modules/util-deprecate/browser.js") -}; -/**/ - -/**/ -var Stream = __webpack_require__(/*! ./internal/streams/stream */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js"); -/**/ - -/**/ - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js").Buffer); -var OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ - -var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js"); - -util.inherits(Writable, Stream); - -function nop() {} - -function WritableState(options, stream) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); - - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var writableHwm = options.writableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; - - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); - - // if _final has been called - this.finalCalled = false; - - // drain event flag. - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // has it been destroyed - this.destroyed = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function (er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.bufferedRequest = null; - this.lastBufferedRequest = null; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; - - // count buffered requests - this.bufferedRequestCount = 0; - - // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - this.corkedRequestsFree = new CorkedRequest(this); -} - -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - while (current) { - out.push(current); - current = current.next; - } - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function () { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); - -// Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. -var realHasInstance; -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function (object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function (object) { - return object instanceof this; - }; -} - -function Writable(options) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); - - // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { - return new Writable(options); - } - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - - if (typeof options.writev === 'function') this._writev = options.writev; - - if (typeof options.destroy === 'function') this._destroy = options.destroy; - - if (typeof options.final === 'function') this._final = options.final; - } - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function () { - this.emit('error', new Error('Cannot pipe, not readable')); -}; - -function writeAfterEnd(stream, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - pna.nextTick(cb, er); -} - -// Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. -function validChunk(stream, state, chunk, cb) { - var valid = true; - var er = false; - - if (chunk === null) { - er = new TypeError('May not write null values to stream'); - } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - if (er) { - stream.emit('error', er); - pna.nextTick(cb, er); - valid = false; - } - return valid; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - var isBuf = !state.objectMode && _isUint8Array(chunk); - - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - - if (typeof cb !== 'function') cb = nop; - - if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - - return ret; -}; - -Writable.prototype.cork = function () { - var state = this._writableState; - - state.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - - if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); - } - return chunk; -} - -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; - } -}); - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) state.needDrain = true; - - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - pna.nextTick(cb, er); - // this can emit finish, and it will always happen - // after error - pna.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - // this can emit finish, but finish must - // always follow error - finishMaybe(stream, state); - } -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state); - - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - - if (sync) { - /**/ - asyncWrite(afterWrite, stream, state, finished, cb); - /**/ - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - - var count = 0; - var allBuffers = true; - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } - buffer.allBuffers = allBuffers; - - doWrite(stream, state, true, state.length, buffer, '', holder.finish); - - // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - state.pendingcb++; - state.lastBufferedRequest = null; - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - break; - } - } - - if (entry === null) state.lastBufferedRequest = null; - } - - state.bufferedRequest = entry; - state.bufferProcessing = false; -} - -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new Error('_write() is not implemented')); -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending) endWritable(this, state, cb); -}; - -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; - if (err) { - stream.emit('error', err); - } - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function') { - state.pendingcb++; - state.finalCalled = true; - pna.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - prefinish(stream, state); - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - } - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); - } - state.ended = true; - stream.writable = false; -} - -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } - - // reuse the free corkReq. - state.corkedRequestsFree.next = corkReq; -} - -Object.defineProperty(Writable.prototype, 'destroyed', { - get: function () { - if (this._writableState === undefined) { - return false; - } - return this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._writableState.destroyed = value; - } -}); - -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; -Writable.prototype._destroy = function (err, cb) { - this.end(); - cb(err); -}; - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js": -/*!**********************************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js ***! - \**********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js").Buffer); -var util = __webpack_require__(/*! util */ "?ff61"); - -function copyBuffer(src, target, offset) { - src.copy(target, offset); -} - -module.exports = function () { - function BufferList() { - _classCallCheck(this, BufferList); - - this.head = null; - this.tail = null; - this.length = 0; - } - - BufferList.prototype.push = function push(v) { - var entry = { data: v, next: null }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - }; - - BufferList.prototype.unshift = function unshift(v) { - var entry = { data: v, next: this.head }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - }; - - BufferList.prototype.shift = function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - }; - - BufferList.prototype.clear = function clear() { - this.head = this.tail = null; - this.length = 0; - }; - - BufferList.prototype.join = function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - while (p = p.next) { - ret += s + p.data; - }return ret; - }; - - BufferList.prototype.concat = function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - return ret; - }; - - return BufferList; -}(); - -if (util && util.inspect && util.inspect.custom) { - module.exports.prototype[util.inspect.custom] = function () { - var obj = util.inspect({ length: this.length }); - return this.constructor.name + ' ' + obj; - }; -} - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js": -/*!*******************************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js ***! - \*******************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -/**/ - -var pna = __webpack_require__(/*! process-nextick-args */ "../../node_modules/process-nextick-args/index.js"); -/**/ - -// undocumented cb() API, needed for core, not for public API -function destroy(err, cb) { - var _this = this; - - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err) { - if (!this._writableState) { - pna.nextTick(emitErrorNT, this, err); - } else if (!this._writableState.errorEmitted) { - this._writableState.errorEmitted = true; - pna.nextTick(emitErrorNT, this, err); - } - } - - return this; - } - - // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks - - if (this._readableState) { - this._readableState.destroyed = true; - } - - // if this is a duplex stream mark the writable part as destroyed as well - if (this._writableState) { - this._writableState.destroyed = true; - } - - this._destroy(err || null, function (err) { - if (!cb && err) { - if (!_this._writableState) { - pna.nextTick(emitErrorNT, _this, err); - } else if (!_this._writableState.errorEmitted) { - _this._writableState.errorEmitted = true; - pna.nextTick(emitErrorNT, _this, err); - } - } else if (cb) { - cb(err); - } - }); - - return this; -} - -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finalCalled = false; - this._writableState.prefinished = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } -} - -function emitErrorNT(self, err) { - self.emit('error', err); -} - -module.exports = { - destroy: destroy, - undestroy: undestroy -}; - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js": -/*!**************************************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js ***! - \**************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -module.exports = __webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter; - - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js": -/*!*********************************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js ***! - \*********************************************************************************************************/ -/***/ ((module, exports, __webpack_require__) => { - -/* eslint-disable node/no-deprecated-api */ -var buffer = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js") -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} - - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js": -/*!*******************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js ***! - \*******************************************************************************************/ -/***/ ((module, exports, __webpack_require__) => { - -exports = module.exports = __webpack_require__(/*! ./lib/_stream_readable.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js"); -exports.Stream = exports; -exports.Readable = exports; -exports.Writable = __webpack_require__(/*! ./lib/_stream_writable.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js"); -exports.Duplex = __webpack_require__(/*! ./lib/_stream_duplex.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); -exports.Transform = __webpack_require__(/*! ./lib/_stream_transform.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js"); -exports.PassThrough = __webpack_require__(/*! ./lib/_stream_passthrough.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js"); - - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js": -/*!********************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js ***! - \********************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -/**/ - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js").Buffer); -/**/ - -var isEncoding = Buffer.isEncoding || function (encoding) { - encoding = '' + encoding; - switch (encoding && encoding.toLowerCase()) { - case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': - return true; - default: - return false; - } -}; - -function _normalizeEncoding(enc) { - if (!enc) return 'utf8'; - var retried; - while (true) { - switch (enc) { - case 'utf8': - case 'utf-8': - return 'utf8'; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return 'utf16le'; - case 'latin1': - case 'binary': - return 'latin1'; - case 'base64': - case 'ascii': - case 'hex': - return enc; - default: - if (retried) return; // undefined - enc = ('' + enc).toLowerCase(); - retried = true; - } - } -}; - -// Do not cache `Buffer.isEncoding` when checking encoding names as some -// modules monkey-patch it to support additional encodings -function normalizeEncoding(enc) { - var nenc = _normalizeEncoding(enc); - if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); - return nenc || enc; -} - -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. -exports.StringDecoder = StringDecoder; -function StringDecoder(encoding) { - this.encoding = normalizeEncoding(encoding); - var nb; - switch (this.encoding) { - case 'utf16le': - this.text = utf16Text; - this.end = utf16End; - nb = 4; - break; - case 'utf8': - this.fillLast = utf8FillLast; - nb = 4; - break; - case 'base64': - this.text = base64Text; - this.end = base64End; - nb = 3; - break; - default: - this.write = simpleWrite; - this.end = simpleEnd; - return; - } - this.lastNeed = 0; - this.lastTotal = 0; - this.lastChar = Buffer.allocUnsafe(nb); -} - -StringDecoder.prototype.write = function (buf) { - if (buf.length === 0) return ''; - var r; - var i; - if (this.lastNeed) { - r = this.fillLast(buf); - if (r === undefined) return ''; - i = this.lastNeed; - this.lastNeed = 0; - } else { - i = 0; - } - if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); - return r || ''; -}; - -StringDecoder.prototype.end = utf8End; - -// Returns only complete characters in a Buffer -StringDecoder.prototype.text = utf8Text; - -// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer -StringDecoder.prototype.fillLast = function (buf) { - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); - this.lastNeed -= buf.length; -}; - -// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a -// continuation byte. If an invalid byte is detected, -2 is returned. -function utf8CheckByte(byte) { - if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; - return byte >> 6 === 0x02 ? -1 : -2; -} - -// Checks at most 3 bytes at the end of a Buffer in order to detect an -// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) -// needed to complete the UTF-8 character (if applicable) are returned. -function utf8CheckIncomplete(self, buf, i) { - var j = buf.length - 1; - if (j < i) return 0; - var nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 1; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 2; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) { - if (nb === 2) nb = 0;else self.lastNeed = nb - 3; - } - return nb; - } - return 0; -} - -// Validates as many continuation bytes for a multi-byte UTF-8 character as -// needed or are available. If we see a non-continuation byte where we expect -// one, we "replace" the validated continuation bytes we've seen so far with -// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding -// behavior. The continuation byte check is included three times in the case -// where all of the continuation bytes for a character exist in the same buffer. -// It is also done this way as a slight performance increase instead of using a -// loop. -function utf8CheckExtraBytes(self, buf, p) { - if ((buf[0] & 0xC0) !== 0x80) { - self.lastNeed = 0; - return '\ufffd'; - } - if (self.lastNeed > 1 && buf.length > 1) { - if ((buf[1] & 0xC0) !== 0x80) { - self.lastNeed = 1; - return '\ufffd'; - } - if (self.lastNeed > 2 && buf.length > 2) { - if ((buf[2] & 0xC0) !== 0x80) { - self.lastNeed = 2; - return '\ufffd'; - } - } - } -} - -// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. -function utf8FillLast(buf) { - var p = this.lastTotal - this.lastNeed; - var r = utf8CheckExtraBytes(this, buf, p); - if (r !== undefined) return r; - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, p, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, p, 0, buf.length); - this.lastNeed -= buf.length; -} - -// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a -// partial character, the character's bytes are buffered until the required -// number of bytes are available. -function utf8Text(buf, i) { - var total = utf8CheckIncomplete(this, buf, i); - if (!this.lastNeed) return buf.toString('utf8', i); - this.lastTotal = total; - var end = buf.length - (total - this.lastNeed); - buf.copy(this.lastChar, 0, end); - return buf.toString('utf8', i, end); -} - -// For UTF-8, a replacement character is added when ending on a partial -// character. -function utf8End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + '\ufffd'; - return r; -} - -// UTF-16LE typically needs two bytes per character, but even if we have an even -// number of bytes available, we need to check if we end on a leading/high -// surrogate. In that case, we need to wait for the next two bytes in order to -// decode the last character properly. -function utf16Text(buf, i) { - if ((buf.length - i) % 2 === 0) { - var r = buf.toString('utf16le', i); - if (r) { - var c = r.charCodeAt(r.length - 1); - if (c >= 0xD800 && c <= 0xDBFF) { - this.lastNeed = 2; - this.lastTotal = 4; - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - return r.slice(0, -1); - } - } - return r; - } - this.lastNeed = 1; - this.lastTotal = 2; - this.lastChar[0] = buf[buf.length - 1]; - return buf.toString('utf16le', i, buf.length - 1); -} - -// For UTF-16LE we do not explicitly append special replacement characters if we -// end on a partial character, we simply let v8 handle that. -function utf16End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) { - var end = this.lastTotal - this.lastNeed; - return r + this.lastChar.toString('utf16le', 0, end); - } - return r; -} - -function base64Text(buf, i) { - var n = (buf.length - i) % 3; - if (n === 0) return buf.toString('base64', i); - this.lastNeed = 3 - n; - this.lastTotal = 3; - if (n === 1) { - this.lastChar[0] = buf[buf.length - 1]; - } else { - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - } - return buf.toString('base64', i, buf.length - n); -} - -function base64End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); - return r; -} - -// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) -function simpleWrite(buf) { - return buf.toString(this.encoding); -} - -function simpleEnd(buf) { - return buf && buf.length ? this.write(buf) : ''; -} - -/***/ }), - -/***/ "../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js": -/*!********************************************************************************************************!*\ - !*** ../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js ***! - \********************************************************************************************************/ -/***/ ((module, exports, __webpack_require__) => { - -/* eslint-disable node/no-deprecated-api */ -var buffer = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js") -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} - - -/***/ }), - -/***/ "../../node_modules/buffer-xor/index.js": -/*!**********************************************!*\ - !*** ../../node_modules/buffer-xor/index.js ***! - \**********************************************/ -/***/ ((module) => { - -module.exports = function xor (a, b) { - var length = Math.min(a.length, b.length) - var buffer = new Buffer(length) - - for (var i = 0; i < length; ++i) { - buffer[i] = a[i] ^ b[i] - } - - return buffer -} - - -/***/ }), - -/***/ "../../node_modules/buffer/index.js": -/*!******************************************!*\ - !*** ../../node_modules/buffer/index.js ***! - \******************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ - - - -const base64 = __webpack_require__(/*! base64-js */ "../../node_modules/base64-js/index.js") -const ieee754 = __webpack_require__(/*! ieee754 */ "../../node_modules/ieee754/index.js") -const customInspectSymbol = - (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation - ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation - : null - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 - -const K_MAX_LENGTH = 0x7fffffff -exports.kMaxLength = K_MAX_LENGTH - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Print warning and recommend using `buffer` v4.x which has an Object - * implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * We report that the browser does not support typed arrays if the are not subclassable - * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` - * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support - * for __proto__ and has a buggy typed array implementation. - */ -Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() - -if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && - typeof console.error === 'function') { - console.error( - 'This browser lacks typed array (Uint8Array) support which is required by ' + - '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' - ) -} - -function typedArraySupport () { - // Can typed array instances can be augmented? - try { - const arr = new Uint8Array(1) - const proto = { foo: function () { return 42 } } - Object.setPrototypeOf(proto, Uint8Array.prototype) - Object.setPrototypeOf(arr, proto) - return arr.foo() === 42 - } catch (e) { - return false - } -} - -Object.defineProperty(Buffer.prototype, 'parent', { - enumerable: true, - get: function () { - if (!Buffer.isBuffer(this)) return undefined - return this.buffer - } -}) - -Object.defineProperty(Buffer.prototype, 'offset', { - enumerable: true, - get: function () { - if (!Buffer.isBuffer(this)) return undefined - return this.byteOffset - } -}) - -function createBuffer (length) { - if (length > K_MAX_LENGTH) { - throw new RangeError('The value "' + length + '" is invalid for option "size"') - } - // Return an augmented `Uint8Array` instance - const buf = new Uint8Array(length) - Object.setPrototypeOf(buf, Buffer.prototype) - return buf -} - -/** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ - -function Buffer (arg, encodingOrOffset, length) { - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new TypeError( - 'The "string" argument must be of type string. Received type number' - ) - } - return allocUnsafe(arg) - } - return from(arg, encodingOrOffset, length) -} - -Buffer.poolSize = 8192 // not used by this implementation - -function from (value, encodingOrOffset, length) { - if (typeof value === 'string') { - return fromString(value, encodingOrOffset) - } - - if (ArrayBuffer.isView(value)) { - return fromArrayView(value) - } - - if (value == null) { - throw new TypeError( - 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + - 'or Array-like Object. Received type ' + (typeof value) - ) - } - - if (isInstance(value, ArrayBuffer) || - (value && isInstance(value.buffer, ArrayBuffer))) { - return fromArrayBuffer(value, encodingOrOffset, length) - } - - if (typeof SharedArrayBuffer !== 'undefined' && - (isInstance(value, SharedArrayBuffer) || - (value && isInstance(value.buffer, SharedArrayBuffer)))) { - return fromArrayBuffer(value, encodingOrOffset, length) - } - - if (typeof value === 'number') { - throw new TypeError( - 'The "value" argument must not be of type number. Received type number' - ) - } - - const valueOf = value.valueOf && value.valueOf() - if (valueOf != null && valueOf !== value) { - return Buffer.from(valueOf, encodingOrOffset, length) - } - - const b = fromObject(value) - if (b) return b - - if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && - typeof value[Symbol.toPrimitive] === 'function') { - return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length) - } - - throw new TypeError( - 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + - 'or Array-like Object. Received type ' + (typeof value) - ) -} - -/** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ -Buffer.from = function (value, encodingOrOffset, length) { - return from(value, encodingOrOffset, length) -} - -// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: -// https://github.com/feross/buffer/pull/148 -Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) -Object.setPrototypeOf(Buffer, Uint8Array) - -function assertSize (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be of type number') - } else if (size < 0) { - throw new RangeError('The value "' + size + '" is invalid for option "size"') - } -} - -function alloc (size, fill, encoding) { - assertSize(size) - if (size <= 0) { - return createBuffer(size) - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpreted as a start offset. - return typeof encoding === 'string' - ? createBuffer(size).fill(fill, encoding) - : createBuffer(size).fill(fill) - } - return createBuffer(size) -} - -/** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ -Buffer.alloc = function (size, fill, encoding) { - return alloc(size, fill, encoding) -} - -function allocUnsafe (size) { - assertSize(size) - return createBuffer(size < 0 ? 0 : checked(size) | 0) -} - -/** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ -Buffer.allocUnsafe = function (size) { - return allocUnsafe(size) -} -/** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(size) -} - -function fromString (string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } - - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - - const length = byteLength(string, encoding) | 0 - let buf = createBuffer(length) - - const actual = buf.write(string, encoding) - - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - buf = buf.slice(0, actual) - } - - return buf -} - -function fromArrayLike (array) { - const length = array.length < 0 ? 0 : checked(array.length) | 0 - const buf = createBuffer(length) - for (let i = 0; i < length; i += 1) { - buf[i] = array[i] & 255 - } - return buf -} - -function fromArrayView (arrayView) { - if (isInstance(arrayView, Uint8Array)) { - const copy = new Uint8Array(arrayView) - return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength) - } - return fromArrayLike(arrayView) -} - -function fromArrayBuffer (array, byteOffset, length) { - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('"offset" is outside of buffer bounds') - } - - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('"length" is outside of buffer bounds') - } - - let buf - if (byteOffset === undefined && length === undefined) { - buf = new Uint8Array(array) - } else if (length === undefined) { - buf = new Uint8Array(array, byteOffset) - } else { - buf = new Uint8Array(array, byteOffset, length) - } - - // Return an augmented `Uint8Array` instance - Object.setPrototypeOf(buf, Buffer.prototype) - - return buf -} - -function fromObject (obj) { - if (Buffer.isBuffer(obj)) { - const len = checked(obj.length) | 0 - const buf = createBuffer(len) - - if (buf.length === 0) { - return buf - } - - obj.copy(buf, 0, 0, len) - return buf - } - - if (obj.length !== undefined) { - if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { - return createBuffer(0) - } - return fromArrayLike(obj) - } - - if (obj.type === 'Buffer' && Array.isArray(obj.data)) { - return fromArrayLike(obj.data) - } -} - -function checked (length) { - // Note: cannot use `length < K_MAX_LENGTH` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= K_MAX_LENGTH) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} - -Buffer.isBuffer = function isBuffer (b) { - return b != null && b._isBuffer === true && - b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false -} - -Buffer.compare = function compare (a, b) { - if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) - if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError( - 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' - ) - } - - if (a === b) return 0 - - let x = a.length - let y = b.length - - for (let i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!Array.isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - - if (list.length === 0) { - return Buffer.alloc(0) - } - - let i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } - - const buffer = Buffer.allocUnsafe(length) - let pos = 0 - for (i = 0; i < list.length; ++i) { - let buf = list[i] - if (isInstance(buf, Uint8Array)) { - if (pos + buf.length > buffer.length) { - if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) - buf.copy(buffer, pos) - } else { - Uint8Array.prototype.set.call( - buffer, - buf, - pos - ) - } - } else if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } else { - buf.copy(buffer, pos) - } - pos += buf.length - } - return buffer -} - -function byteLength (string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length - } - if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { - return string.byteLength - } - if (typeof string !== 'string') { - throw new TypeError( - 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + - 'Received type ' + typeof string - ) - } - - const len = string.length - const mustMatch = (arguments.length > 2 && arguments[2] === true) - if (!mustMatch && len === 0) return 0 - - // Use a for loop to avoid recursion - let loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len - case 'utf8': - case 'utf-8': - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) { - return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 - } - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -function slowToString (encoding, start, end) { - let loweredCase = false - - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. - - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0 - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return '' - } - - if (end === undefined || end > this.length) { - end = this.length - } - - if (end <= 0) { - return '' - } - - // Force coercion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 - - if (end <= start) { - return '' - } - - if (!encoding) encoding = 'utf8' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) -// to detect a Buffer instance. It's not possible to use `instanceof Buffer` -// reliably in a browserify context because there could be multiple different -// copies of the 'buffer' package in use. This method works even for Buffer -// instances that were created from another copy of the `buffer` package. -// See: https://github.com/feross/buffer/issues/154 -Buffer.prototype._isBuffer = true - -function swap (b, n, m) { - const i = b[n] - b[n] = b[m] - b[m] = i -} - -Buffer.prototype.swap16 = function swap16 () { - const len = this.length - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits') - } - for (let i = 0; i < len; i += 2) { - swap(this, i, i + 1) - } - return this -} - -Buffer.prototype.swap32 = function swap32 () { - const len = this.length - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits') - } - for (let i = 0; i < len; i += 4) { - swap(this, i, i + 3) - swap(this, i + 1, i + 2) - } - return this -} - -Buffer.prototype.swap64 = function swap64 () { - const len = this.length - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits') - } - for (let i = 0; i < len; i += 8) { - swap(this, i, i + 7) - swap(this, i + 1, i + 6) - swap(this, i + 2, i + 5) - swap(this, i + 3, i + 4) - } - return this -} - -Buffer.prototype.toString = function toString () { - const length = this.length - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.toLocaleString = Buffer.prototype.toString - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - let str = '' - const max = exports.INSPECT_MAX_BYTES - str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() - if (this.length > max) str += ' ... ' - return '' -} -if (customInspectSymbol) { - Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect -} - -Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { - if (isInstance(target, Uint8Array)) { - target = Buffer.from(target, target.offset, target.byteLength) - } - if (!Buffer.isBuffer(target)) { - throw new TypeError( - 'The "target" argument must be one of type Buffer or Uint8Array. ' + - 'Received type ' + (typeof target) - ) - } - - if (start === undefined) { - start = 0 - } - if (end === undefined) { - end = target ? target.length : 0 - } - if (thisStart === undefined) { - thisStart = 0 - } - if (thisEnd === undefined) { - thisEnd = this.length - } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index') - } - - if (thisStart >= thisEnd && start >= end) { - return 0 - } - if (thisStart >= thisEnd) { - return -1 - } - if (start >= end) { - return 1 - } - - start >>>= 0 - end >>>= 0 - thisStart >>>= 0 - thisEnd >>>= 0 - - if (this === target) return 0 - - let x = thisEnd - thisStart - let y = end - start - const len = Math.min(x, y) - - const thisCopy = this.slice(thisStart, thisEnd) - const targetCopy = target.slice(start, end) - - for (let i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, -// OR the last index of `val` in `buffer` at offset <= `byteOffset`. -// -// Arguments: -// - buffer - a Buffer to search -// - val - a string, Buffer, or number -// - byteOffset - an index into `buffer`; will be clamped to an int32 -// - encoding - an optional encoding, relevant is val is a string -// - dir - true for indexOf, false for lastIndexOf -function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1 - - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset - byteOffset = 0 - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000 - } - byteOffset = +byteOffset // Coerce to Number. - if (numberIsNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : (buffer.length - 1) - } - - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset - if (byteOffset >= buffer.length) { - if (dir) return -1 - else byteOffset = buffer.length - 1 - } else if (byteOffset < 0) { - if (dir) byteOffset = 0 - else return -1 - } - - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } - - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1 - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir) - } else if (typeof val === 'number') { - val = val & 0xFF // Search for a byte value [0-255] - if (typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) - } - } - return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) - } - - throw new TypeError('val must be string, number or Buffer') -} - -function arrayIndexOf (arr, val, byteOffset, encoding, dir) { - let indexSize = 1 - let arrLength = arr.length - let valLength = val.length - - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase() - if (encoding === 'ucs2' || encoding === 'ucs-2' || - encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1 - } - indexSize = 2 - arrLength /= 2 - valLength /= 2 - byteOffset /= 2 - } - } - - function read (buf, i) { - if (indexSize === 1) { - return buf[i] - } else { - return buf.readUInt16BE(i * indexSize) - } - } - - let i - if (dir) { - let foundIndex = -1 - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize - } else { - if (foundIndex !== -1) i -= i - foundIndex - foundIndex = -1 - } - } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength - for (i = byteOffset; i >= 0; i--) { - let found = true - for (let j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false - break - } - } - if (found) return i - } - } - - return -1 -} - -Buffer.prototype.includes = function includes (val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1 -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true) -} - -Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - const remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - const strLen = string.length - - if (length > strLen / 2) { - length = strLen / 2 - } - let i - for (i = 0; i < length; ++i) { - const parsed = parseInt(string.substr(i * 2, 2), 16) - if (numberIsNaN(parsed)) return i - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset >>> 0 - if (isFinite(length)) { - length = length >>> 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - } else { - throw new Error( - 'Buffer.write(string, encoding, offset[, length]) is no longer supported' - ) - } - - const remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - let loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - case 'latin1': - case 'binary': - return asciiWrite(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - const res = [] - - let i = start - while (i < end) { - const firstByte = buf[i] - let codePoint = null - let bytesPerSequence = (firstByte > 0xEF) - ? 4 - : (firstByte > 0xDF) - ? 3 - : (firstByte > 0xBF) - ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - let secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -const MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - const len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - let res = '' - let i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - let ret = '' - end = Math.min(buf.length, end) - - for (let i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function latin1Slice (buf, start, end) { - let ret = '' - end = Math.min(buf.length, end) - - for (let i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - const len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - let out = '' - for (let i = start; i < end; ++i) { - out += hexSliceLookupTable[buf[i]] - } - return out -} - -function utf16leSlice (buf, start, end) { - const bytes = buf.slice(start, end) - let res = '' - // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) - for (let i = 0; i < bytes.length - 1; i += 2) { - res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - const len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - const newBuf = this.subarray(start, end) - // Return an augmented `Uint8Array` instance - Object.setPrototypeOf(newBuf, Buffer.prototype) - - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUintLE = -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - let val = this[offset] - let mul = 1 - let i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUintBE = -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - let val = this[offset + --byteLength] - let mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUint8 = -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUint16LE = -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUint16BE = -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUint32LE = -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUint32BE = -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) { - offset = offset >>> 0 - validateNumber(offset, 'offset') - const first = this[offset] - const last = this[offset + 7] - if (first === undefined || last === undefined) { - boundsError(offset, this.length - 8) - } - - const lo = first + - this[++offset] * 2 ** 8 + - this[++offset] * 2 ** 16 + - this[++offset] * 2 ** 24 - - const hi = this[++offset] + - this[++offset] * 2 ** 8 + - this[++offset] * 2 ** 16 + - last * 2 ** 24 - - return BigInt(lo) + (BigInt(hi) << BigInt(32)) -}) - -Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) { - offset = offset >>> 0 - validateNumber(offset, 'offset') - const first = this[offset] - const last = this[offset + 7] - if (first === undefined || last === undefined) { - boundsError(offset, this.length - 8) - } - - const hi = first * 2 ** 24 + - this[++offset] * 2 ** 16 + - this[++offset] * 2 ** 8 + - this[++offset] - - const lo = this[++offset] * 2 ** 24 + - this[++offset] * 2 ** 16 + - this[++offset] * 2 ** 8 + - last - - return (BigInt(hi) << BigInt(32)) + BigInt(lo) -}) - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - let val = this[offset] - let mul = 1 - let i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - let i = byteLength - let mul = 1 - let val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - const val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - const val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) { - offset = offset >>> 0 - validateNumber(offset, 'offset') - const first = this[offset] - const last = this[offset + 7] - if (first === undefined || last === undefined) { - boundsError(offset, this.length - 8) - } - - const val = this[offset + 4] + - this[offset + 5] * 2 ** 8 + - this[offset + 6] * 2 ** 16 + - (last << 24) // Overflow - - return (BigInt(val) << BigInt(32)) + - BigInt(first + - this[++offset] * 2 ** 8 + - this[++offset] * 2 ** 16 + - this[++offset] * 2 ** 24) -}) - -Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) { - offset = offset >>> 0 - validateNumber(offset, 'offset') - const first = this[offset] - const last = this[offset + 7] - if (first === undefined || last === undefined) { - boundsError(offset, this.length - 8) - } - - const val = (first << 24) + // Overflow - this[++offset] * 2 ** 16 + - this[++offset] * 2 ** 8 + - this[++offset] - - return (BigInt(val) << BigInt(32)) + - BigInt(this[++offset] * 2 ** 24 + - this[++offset] * 2 ** 16 + - this[++offset] * 2 ** 8 + - last) -}) - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') - if (offset + ext > buf.length) throw new RangeError('Index out of range') -} - -Buffer.prototype.writeUintLE = -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - const maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - let mul = 1 - let i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUintBE = -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - const maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - let i = byteLength - 1 - let mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUint8 = -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeUint16LE = -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeUint16BE = -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeUint32LE = -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeUint32BE = -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -function wrtBigUInt64LE (buf, value, offset, min, max) { - checkIntBI(value, min, max, buf, offset, 7) - - let lo = Number(value & BigInt(0xffffffff)) - buf[offset++] = lo - lo = lo >> 8 - buf[offset++] = lo - lo = lo >> 8 - buf[offset++] = lo - lo = lo >> 8 - buf[offset++] = lo - let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) - buf[offset++] = hi - hi = hi >> 8 - buf[offset++] = hi - hi = hi >> 8 - buf[offset++] = hi - hi = hi >> 8 - buf[offset++] = hi - return offset -} - -function wrtBigUInt64BE (buf, value, offset, min, max) { - checkIntBI(value, min, max, buf, offset, 7) - - let lo = Number(value & BigInt(0xffffffff)) - buf[offset + 7] = lo - lo = lo >> 8 - buf[offset + 6] = lo - lo = lo >> 8 - buf[offset + 5] = lo - lo = lo >> 8 - buf[offset + 4] = lo - let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) - buf[offset + 3] = hi - hi = hi >> 8 - buf[offset + 2] = hi - hi = hi >> 8 - buf[offset + 1] = hi - hi = hi >> 8 - buf[offset] = hi - return offset + 8 -} - -Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) { - return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) -}) - -Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) { - return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) -}) - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - const limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - let i = 0 - let mul = 1 - let sub = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - const limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - let i = byteLength - 1 - let mul = 1 - let sub = 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) { - return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) -}) - -Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) { - return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) -}) - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range') - if (offset < 0) throw new RangeError('Index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('Index out of range') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - const len = end - start - - if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { - // Use built-in when available, missing from IE11 - this.copyWithin(targetStart, start, end) - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, end), - targetStart - ) - } - - return len -} - -// Usage: -// buffer.fill(number[, offset[, end]]) -// buffer.fill(buffer[, offset[, end]]) -// buffer.fill(string[, offset[, end]][, encoding]) -Buffer.prototype.fill = function fill (val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = this.length - } else if (typeof end === 'string') { - encoding = end - end = this.length - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - if (val.length === 1) { - const code = val.charCodeAt(0) - if ((encoding === 'utf8' && code < 128) || - encoding === 'latin1') { - // Fast path: If `val` fits into a single byte, use that numeric value. - val = code - } - } - } else if (typeof val === 'number') { - val = val & 255 - } else if (typeof val === 'boolean') { - val = Number(val) - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index') - } - - if (end <= start) { - return this - } - - start = start >>> 0 - end = end === undefined ? this.length : end >>> 0 - - if (!val) val = 0 - - let i - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val - } - } else { - const bytes = Buffer.isBuffer(val) - ? val - : Buffer.from(val, encoding) - const len = bytes.length - if (len === 0) { - throw new TypeError('The value "' + val + - '" is invalid for argument "value"') - } - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len] - } - } - - return this -} - -// CUSTOM ERRORS -// ============= - -// Simplified versions from Node, changed for Buffer-only usage -const errors = {} -function E (sym, getMessage, Base) { - errors[sym] = class NodeError extends Base { - constructor () { - super() - - Object.defineProperty(this, 'message', { - value: getMessage.apply(this, arguments), - writable: true, - configurable: true - }) - - // Add the error code to the name to include it in the stack trace. - this.name = `${this.name} [${sym}]` - // Access the stack to generate the error message including the error code - // from the name. - this.stack // eslint-disable-line no-unused-expressions - // Reset the name to the actual name. - delete this.name - } - - get code () { - return sym - } - - set code (value) { - Object.defineProperty(this, 'code', { - configurable: true, - enumerable: true, - value, - writable: true - }) - } - - toString () { - return `${this.name} [${sym}]: ${this.message}` - } - } -} - -E('ERR_BUFFER_OUT_OF_BOUNDS', - function (name) { - if (name) { - return `${name} is outside of buffer bounds` - } - - return 'Attempt to access memory outside buffer bounds' - }, RangeError) -E('ERR_INVALID_ARG_TYPE', - function (name, actual) { - return `The "${name}" argument must be of type number. Received type ${typeof actual}` - }, TypeError) -E('ERR_OUT_OF_RANGE', - function (str, range, input) { - let msg = `The value of "${str}" is out of range.` - let received = input - if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { - received = addNumericalSeparator(String(input)) - } else if (typeof input === 'bigint') { - received = String(input) - if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { - received = addNumericalSeparator(received) - } - received += 'n' - } - msg += ` It must be ${range}. Received ${received}` - return msg - }, RangeError) - -function addNumericalSeparator (val) { - let res = '' - let i = val.length - const start = val[0] === '-' ? 1 : 0 - for (; i >= start + 4; i -= 3) { - res = `_${val.slice(i - 3, i)}${res}` - } - return `${val.slice(0, i)}${res}` -} - -// CHECK FUNCTIONS -// =============== - -function checkBounds (buf, offset, byteLength) { - validateNumber(offset, 'offset') - if (buf[offset] === undefined || buf[offset + byteLength] === undefined) { - boundsError(offset, buf.length - (byteLength + 1)) - } -} - -function checkIntBI (value, min, max, buf, offset, byteLength) { - if (value > max || value < min) { - const n = typeof min === 'bigint' ? 'n' : '' - let range - if (byteLength > 3) { - if (min === 0 || min === BigInt(0)) { - range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}` - } else { - range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + - `${(byteLength + 1) * 8 - 1}${n}` - } - } else { - range = `>= ${min}${n} and <= ${max}${n}` - } - throw new errors.ERR_OUT_OF_RANGE('value', range, value) - } - checkBounds(buf, offset, byteLength) -} - -function validateNumber (value, name) { - if (typeof value !== 'number') { - throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value) - } -} - -function boundsError (value, length, type) { - if (Math.floor(value) !== value) { - validateNumber(value, type) - throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value) - } - - if (length < 0) { - throw new errors.ERR_BUFFER_OUT_OF_BOUNDS() - } - - throw new errors.ERR_OUT_OF_RANGE(type || 'offset', - `>= ${type ? 1 : 0} and <= ${length}`, - value) -} - -// HELPER FUNCTIONS -// ================ - -const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node takes equal signs as end of the Base64 encoding - str = str.split('=')[0] - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = str.trim().replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function utf8ToBytes (string, units) { - units = units || Infinity - let codePoint - const length = string.length - let leadSurrogate = null - const bytes = [] - - for (let i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - const byteArray = [] - for (let i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - let c, hi, lo - const byteArray = [] - for (let i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - let i - for (i = 0; i < length; ++i) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} - -// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass -// the `instanceof` check but they should be treated as of that type. -// See: https://github.com/feross/buffer/issues/166 -function isInstance (obj, type) { - return obj instanceof type || - (obj != null && obj.constructor != null && obj.constructor.name != null && - obj.constructor.name === type.name) -} -function numberIsNaN (obj) { - // For IE11 support - return obj !== obj // eslint-disable-line no-self-compare -} - -// Create lookup table for `toString('hex')` -// See: https://github.com/feross/buffer/issues/219 -const hexSliceLookupTable = (function () { - const alphabet = '0123456789abcdef' - const table = new Array(256) - for (let i = 0; i < 16; ++i) { - const i16 = i * 16 - for (let j = 0; j < 16; ++j) { - table[i16 + j] = alphabet[i] + alphabet[j] - } - } - return table -})() - -// Return not function with Error if BigInt not supported -function defineBigIntMethod (fn) { - return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn -} - -function BufferBigIntNotDefined () { - throw new Error('BigInt not supported') -} - - -/***/ }), - -/***/ "../../node_modules/cipher-base/index.js": -/*!***********************************************!*\ - !*** ../../node_modules/cipher-base/index.js ***! - \***********************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var Transform = (__webpack_require__(/*! stream */ "../../node_modules/stream-browserify/index.js").Transform) -var StringDecoder = (__webpack_require__(/*! string_decoder */ "../../node_modules/string_decoder/lib/string_decoder.js").StringDecoder) -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") - -function CipherBase (hashMode) { - Transform.call(this) - this.hashMode = typeof hashMode === 'string' - if (this.hashMode) { - this[hashMode] = this._finalOrDigest - } else { - this.final = this._finalOrDigest - } - if (this._final) { - this.__final = this._final - this._final = null - } - this._decoder = null - this._encoding = null -} -inherits(CipherBase, Transform) - -CipherBase.prototype.update = function (data, inputEnc, outputEnc) { - if (typeof data === 'string') { - data = Buffer.from(data, inputEnc) - } - - var outData = this._update(data) - if (this.hashMode) return this - - if (outputEnc) { - outData = this._toString(outData, outputEnc) - } - - return outData -} - -CipherBase.prototype.setAutoPadding = function () {} -CipherBase.prototype.getAuthTag = function () { - throw new Error('trying to get auth tag in unsupported state') -} - -CipherBase.prototype.setAuthTag = function () { - throw new Error('trying to set auth tag in unsupported state') -} - -CipherBase.prototype.setAAD = function () { - throw new Error('trying to set aad in unsupported state') -} - -CipherBase.prototype._transform = function (data, _, next) { - var err - try { - if (this.hashMode) { - this._update(data) - } else { - this.push(this._update(data)) - } - } catch (e) { - err = e - } finally { - next(err) - } -} -CipherBase.prototype._flush = function (done) { - var err - try { - this.push(this.__final()) - } catch (e) { - err = e - } - - done(err) -} -CipherBase.prototype._finalOrDigest = function (outputEnc) { - var outData = this.__final() || Buffer.alloc(0) - if (outputEnc) { - outData = this._toString(outData, outputEnc, true) - } - return outData -} - -CipherBase.prototype._toString = function (value, enc, fin) { - if (!this._decoder) { - this._decoder = new StringDecoder(enc) - this._encoding = enc - } - - if (this._encoding !== enc) throw new Error('can\'t switch encodings') - - var out = this._decoder.write(value) - if (fin) { - out += this._decoder.end() - } - - return out -} - -module.exports = CipherBase - - -/***/ }), - -/***/ "../../node_modules/core-util-is/lib/util.js": -/*!***************************************************!*\ - !*** ../../node_modules/core-util-is/lib/util.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. - -function isArray(arg) { - if (Array.isArray) { - return Array.isArray(arg); - } - return objectToString(arg) === '[object Array]'; -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer.isBuffer; - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -/***/ }), - -/***/ "../../node_modules/create-ecdh/browser.js": -/*!*************************************************!*\ - !*** ../../node_modules/create-ecdh/browser.js ***! - \*************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var elliptic = __webpack_require__(/*! elliptic */ "../../node_modules/elliptic/lib/elliptic.js") -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js") - -module.exports = function createECDH (curve) { - return new ECDH(curve) -} - -var aliases = { - secp256k1: { - name: 'secp256k1', - byteLength: 32 - }, - secp224r1: { - name: 'p224', - byteLength: 28 - }, - prime256v1: { - name: 'p256', - byteLength: 32 - }, - prime192v1: { - name: 'p192', - byteLength: 24 - }, - ed25519: { - name: 'ed25519', - byteLength: 32 - }, - secp384r1: { - name: 'p384', - byteLength: 48 - }, - secp521r1: { - name: 'p521', - byteLength: 66 - } -} - -aliases.p224 = aliases.secp224r1 -aliases.p256 = aliases.secp256r1 = aliases.prime256v1 -aliases.p192 = aliases.secp192r1 = aliases.prime192v1 -aliases.p384 = aliases.secp384r1 -aliases.p521 = aliases.secp521r1 - -function ECDH (curve) { - this.curveType = aliases[curve] - if (!this.curveType) { - this.curveType = { - name: curve - } - } - this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap - this.keys = void 0 -} - -ECDH.prototype.generateKeys = function (enc, format) { - this.keys = this.curve.genKeyPair() - return this.getPublicKey(enc, format) -} - -ECDH.prototype.computeSecret = function (other, inenc, enc) { - inenc = inenc || 'utf8' - if (!Buffer.isBuffer(other)) { - other = new Buffer(other, inenc) - } - var otherPub = this.curve.keyFromPublic(other).getPublic() - var out = otherPub.mul(this.keys.getPrivate()).getX() - return formatReturnValue(out, enc, this.curveType.byteLength) -} - -ECDH.prototype.getPublicKey = function (enc, format) { - var key = this.keys.getPublic(format === 'compressed', true) - if (format === 'hybrid') { - if (key[key.length - 1] % 2) { - key[0] = 7 - } else { - key[0] = 6 - } - } - return formatReturnValue(key, enc) -} - -ECDH.prototype.getPrivateKey = function (enc) { - return formatReturnValue(this.keys.getPrivate(), enc) -} - -ECDH.prototype.setPublicKey = function (pub, enc) { - enc = enc || 'utf8' - if (!Buffer.isBuffer(pub)) { - pub = new Buffer(pub, enc) - } - this.keys._importPublic(pub) - return this -} - -ECDH.prototype.setPrivateKey = function (priv, enc) { - enc = enc || 'utf8' - if (!Buffer.isBuffer(priv)) { - priv = new Buffer(priv, enc) - } - - var _priv = new BN(priv) - _priv = _priv.toString(16) - this.keys = this.curve.genKeyPair() - this.keys._importPrivate(_priv) - return this -} - -function formatReturnValue (bn, enc, len) { - if (!Array.isArray(bn)) { - bn = bn.toArray() - } - var buf = new Buffer(bn) - if (len && buf.length < len) { - var zeros = new Buffer(len - buf.length) - zeros.fill(0) - buf = Buffer.concat([zeros, buf]) - } - if (!enc) { - return buf - } else { - return buf.toString(enc) - } -} - - -/***/ }), - -/***/ "../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js": -/*!*******************************************************************!*\ - !*** ../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js ***! - \*******************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* module decorator */ module = __webpack_require__.nmd(module); -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { - Buffer = window.Buffer; - } else { - Buffer = (__webpack_require__(/*! buffer */ "?e376").Buffer); - } - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - this.negative = 1; - } - - if (start < number.length) { - if (base === 16) { - this._parseHex(number, start, endian); - } else { - this._parseBase(number, base, start); - if (endian === 'le') { - this._initArray(this.toArray(), base, endian); - } - } - } - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex4Bits (string, index) { - var c = string.charCodeAt(index); - // 'A' - 'F' - if (c >= 65 && c <= 70) { - return c - 55; - // 'a' - 'f' - } else if (c >= 97 && c <= 102) { - return c - 87; - // '0' - '9' - } else { - return (c - 48) & 0xf; - } - } - - function parseHexByte (string, lowerBound, index) { - var r = parseHex4Bits(string, index); - if (index - 1 >= lowerBound) { - r |= parseHex4Bits(string, index - 1) << 4; - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start, endian) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - // 24-bits chunks - var off = 0; - var j = 0; - - var w; - if (endian === 'be') { - for (i = number.length - 1; i >= start; i -= 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } else { - var parseLength = number.length - start; - for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } - - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - this.strip(); - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - if (r.strip !== undefined) { - // r is BN v4 instance - r.strip(); - } else { - // r is BN v5 instance - r._strip(); - } - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})( false || module, this); - - -/***/ }), - -/***/ "../../node_modules/create-hash/browser.js": -/*!*************************************************!*\ - !*** ../../node_modules/create-hash/browser.js ***! - \*************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var MD5 = __webpack_require__(/*! md5.js */ "../../node_modules/md5.js/index.js") -var RIPEMD160 = __webpack_require__(/*! ripemd160 */ "../../node_modules/ripemd160/index.js") -var sha = __webpack_require__(/*! sha.js */ "../../node_modules/sha.js/index.js") -var Base = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") - -function Hash (hash) { - Base.call(this, 'digest') - - this._hash = hash -} - -inherits(Hash, Base) - -Hash.prototype._update = function (data) { - this._hash.update(data) -} - -Hash.prototype._final = function () { - return this._hash.digest() -} - -module.exports = function createHash (alg) { - alg = alg.toLowerCase() - if (alg === 'md5') return new MD5() - if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() - - return new Hash(sha(alg)) -} - - -/***/ }), - -/***/ "../../node_modules/create-hash/md5.js": -/*!*********************************************!*\ - !*** ../../node_modules/create-hash/md5.js ***! - \*********************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var MD5 = __webpack_require__(/*! md5.js */ "../../node_modules/md5.js/index.js") - -module.exports = function (buffer) { - return new MD5().update(buffer).digest() -} - - -/***/ }), - -/***/ "../../node_modules/create-hmac/browser.js": -/*!*************************************************!*\ - !*** ../../node_modules/create-hmac/browser.js ***! - \*************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var Legacy = __webpack_require__(/*! ./legacy */ "../../node_modules/create-hmac/legacy.js") -var Base = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var md5 = __webpack_require__(/*! create-hash/md5 */ "../../node_modules/create-hash/md5.js") -var RIPEMD160 = __webpack_require__(/*! ripemd160 */ "../../node_modules/ripemd160/index.js") - -var sha = __webpack_require__(/*! sha.js */ "../../node_modules/sha.js/index.js") - -var ZEROS = Buffer.alloc(128) - -function Hmac (alg, key) { - Base.call(this, 'digest') - if (typeof key === 'string') { - key = Buffer.from(key) - } - - var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 - - this._alg = alg - this._key = key - if (key.length > blocksize) { - var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) - key = hash.update(key).digest() - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize) - } - - var ipad = this._ipad = Buffer.allocUnsafe(blocksize) - var opad = this._opad = Buffer.allocUnsafe(blocksize) - - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36 - opad[i] = key[i] ^ 0x5C - } - this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) - this._hash.update(ipad) -} - -inherits(Hmac, Base) - -Hmac.prototype._update = function (data) { - this._hash.update(data) -} - -Hmac.prototype._final = function () { - var h = this._hash.digest() - var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) - return hash.update(this._opad).update(h).digest() -} - -module.exports = function createHmac (alg, key) { - alg = alg.toLowerCase() - if (alg === 'rmd160' || alg === 'ripemd160') { - return new Hmac('rmd160', key) - } - if (alg === 'md5') { - return new Legacy(md5, key) - } - return new Hmac(alg, key) -} - - -/***/ }), - -/***/ "../../node_modules/create-hmac/legacy.js": -/*!************************************************!*\ - !*** ../../node_modules/create-hmac/legacy.js ***! - \************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var Base = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") - -var ZEROS = Buffer.alloc(128) -var blocksize = 64 - -function Hmac (alg, key) { - Base.call(this, 'digest') - if (typeof key === 'string') { - key = Buffer.from(key) - } - - this._alg = alg - this._key = key - - if (key.length > blocksize) { - key = alg(key) - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize) - } - - var ipad = this._ipad = Buffer.allocUnsafe(blocksize) - var opad = this._opad = Buffer.allocUnsafe(blocksize) - - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36 - opad[i] = key[i] ^ 0x5C - } - - this._hash = [ipad] -} - -inherits(Hmac, Base) - -Hmac.prototype._update = function (data) { - this._hash.push(data) -} - -Hmac.prototype._final = function () { - var h = this._alg(Buffer.concat(this._hash)) - return this._alg(Buffer.concat([this._opad, h])) -} -module.exports = Hmac - - -/***/ }), - -/***/ "../../node_modules/crypto-browserify/index.js": -/*!*****************************************************!*\ - !*** ../../node_modules/crypto-browserify/index.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js") -exports.createHash = exports.Hash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js") -exports.createHmac = exports.Hmac = __webpack_require__(/*! create-hmac */ "../../node_modules/create-hmac/browser.js") - -var algos = __webpack_require__(/*! browserify-sign/algos */ "../../node_modules/browserify-sign/algos.js") -var algoKeys = Object.keys(algos) -var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) -exports.getHashes = function () { - return hashes -} - -var p = __webpack_require__(/*! pbkdf2 */ "../../node_modules/pbkdf2/browser.js") -exports.pbkdf2 = p.pbkdf2 -exports.pbkdf2Sync = p.pbkdf2Sync - -var aes = __webpack_require__(/*! browserify-cipher */ "../../node_modules/browserify-cipher/browser.js") - -exports.Cipher = aes.Cipher -exports.createCipher = aes.createCipher -exports.Cipheriv = aes.Cipheriv -exports.createCipheriv = aes.createCipheriv -exports.Decipher = aes.Decipher -exports.createDecipher = aes.createDecipher -exports.Decipheriv = aes.Decipheriv -exports.createDecipheriv = aes.createDecipheriv -exports.getCiphers = aes.getCiphers -exports.listCiphers = aes.listCiphers - -var dh = __webpack_require__(/*! diffie-hellman */ "../../node_modules/diffie-hellman/browser.js") - -exports.DiffieHellmanGroup = dh.DiffieHellmanGroup -exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup -exports.getDiffieHellman = dh.getDiffieHellman -exports.createDiffieHellman = dh.createDiffieHellman -exports.DiffieHellman = dh.DiffieHellman - -var sign = __webpack_require__(/*! browserify-sign */ "../../node_modules/browserify-sign/browser/index.js") - -exports.createSign = sign.createSign -exports.Sign = sign.Sign -exports.createVerify = sign.createVerify -exports.Verify = sign.Verify - -exports.createECDH = __webpack_require__(/*! create-ecdh */ "../../node_modules/create-ecdh/browser.js") - -var publicEncrypt = __webpack_require__(/*! public-encrypt */ "../../node_modules/public-encrypt/browser.js") - -exports.publicEncrypt = publicEncrypt.publicEncrypt -exports.privateEncrypt = publicEncrypt.privateEncrypt -exports.publicDecrypt = publicEncrypt.publicDecrypt -exports.privateDecrypt = publicEncrypt.privateDecrypt - -// the least I can do is make error messages for the rest of the node.js/crypto api. -// ;[ -// 'createCredentials' -// ].forEach(function (name) { -// exports[name] = function () { -// throw new Error([ -// 'sorry, ' + name + ' is not implemented yet', -// 'we accept pull requests', -// 'https://github.com/crypto-browserify/crypto-browserify' -// ].join('\n')) -// } -// }) - -var rf = __webpack_require__(/*! randomfill */ "../../node_modules/randomfill/browser.js") - -exports.randomFill = rf.randomFill -exports.randomFillSync = rf.randomFillSync - -exports.createCredentials = function () { - throw new Error([ - 'sorry, createCredentials is not implemented yet', - 'we accept pull requests', - 'https://github.com/crypto-browserify/crypto-browserify' - ].join('\n')) -} - -exports.constants = { - 'DH_CHECK_P_NOT_SAFE_PRIME': 2, - 'DH_CHECK_P_NOT_PRIME': 1, - 'DH_UNABLE_TO_CHECK_GENERATOR': 4, - 'DH_NOT_SUITABLE_GENERATOR': 8, - 'NPN_ENABLED': 1, - 'ALPN_ENABLED': 1, - 'RSA_PKCS1_PADDING': 1, - 'RSA_SSLV23_PADDING': 2, - 'RSA_NO_PADDING': 3, - 'RSA_PKCS1_OAEP_PADDING': 4, - 'RSA_X931_PADDING': 5, - 'RSA_PKCS1_PSS_PADDING': 6, - 'POINT_CONVERSION_COMPRESSED': 2, - 'POINT_CONVERSION_UNCOMPRESSED': 4, - 'POINT_CONVERSION_HYBRID': 6 -} - - -/***/ }), - -/***/ "../../node_modules/des.js/lib/des.js": -/*!********************************************!*\ - !*** ../../node_modules/des.js/lib/des.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -exports.utils = __webpack_require__(/*! ./des/utils */ "../../node_modules/des.js/lib/des/utils.js"); -exports.Cipher = __webpack_require__(/*! ./des/cipher */ "../../node_modules/des.js/lib/des/cipher.js"); -exports.DES = __webpack_require__(/*! ./des/des */ "../../node_modules/des.js/lib/des/des.js"); -exports.CBC = __webpack_require__(/*! ./des/cbc */ "../../node_modules/des.js/lib/des/cbc.js"); -exports.EDE = __webpack_require__(/*! ./des/ede */ "../../node_modules/des.js/lib/des/ede.js"); - - -/***/ }), - -/***/ "../../node_modules/des.js/lib/des/cbc.js": -/*!************************************************!*\ - !*** ../../node_modules/des.js/lib/des/cbc.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -var proto = {}; - -function CBCState(iv) { - assert.equal(iv.length, 8, 'Invalid IV length'); - - this.iv = new Array(8); - for (var i = 0; i < this.iv.length; i++) - this.iv[i] = iv[i]; -} - -function instantiate(Base) { - function CBC(options) { - Base.call(this, options); - this._cbcInit(); - } - inherits(CBC, Base); - - var keys = Object.keys(proto); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - CBC.prototype[key] = proto[key]; - } - - CBC.create = function create(options) { - return new CBC(options); - }; - - return CBC; -} - -exports.instantiate = instantiate; - -proto._cbcInit = function _cbcInit() { - var state = new CBCState(this.options.iv); - this._cbcState = state; -}; - -proto._update = function _update(inp, inOff, out, outOff) { - var state = this._cbcState; - var superProto = this.constructor.super_.prototype; - - var iv = state.iv; - if (this.type === 'encrypt') { - for (var i = 0; i < this.blockSize; i++) - iv[i] ^= inp[inOff + i]; - - superProto._update.call(this, iv, 0, out, outOff); - - for (var i = 0; i < this.blockSize; i++) - iv[i] = out[outOff + i]; - } else { - superProto._update.call(this, inp, inOff, out, outOff); - - for (var i = 0; i < this.blockSize; i++) - out[outOff + i] ^= iv[i]; - - for (var i = 0; i < this.blockSize; i++) - iv[i] = inp[inOff + i]; - } -}; - - -/***/ }), - -/***/ "../../node_modules/des.js/lib/des/cipher.js": -/*!***************************************************!*\ - !*** ../../node_modules/des.js/lib/des/cipher.js ***! - \***************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); - -function Cipher(options) { - this.options = options; - - this.type = this.options.type; - this.blockSize = 8; - this._init(); - - this.buffer = new Array(this.blockSize); - this.bufferOff = 0; - this.padding = options.padding !== false -} -module.exports = Cipher; - -Cipher.prototype._init = function _init() { - // Might be overrided -}; - -Cipher.prototype.update = function update(data) { - if (data.length === 0) - return []; - - if (this.type === 'decrypt') - return this._updateDecrypt(data); - else - return this._updateEncrypt(data); -}; - -Cipher.prototype._buffer = function _buffer(data, off) { - // Append data to buffer - var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); - for (var i = 0; i < min; i++) - this.buffer[this.bufferOff + i] = data[off + i]; - this.bufferOff += min; - - // Shift next - return min; -}; - -Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { - this._update(this.buffer, 0, out, off); - this.bufferOff = 0; - return this.blockSize; -}; - -Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { - var inputOff = 0; - var outputOff = 0; - - var count = ((this.bufferOff + data.length) / this.blockSize) | 0; - var out = new Array(count * this.blockSize); - - if (this.bufferOff !== 0) { - inputOff += this._buffer(data, inputOff); - - if (this.bufferOff === this.buffer.length) - outputOff += this._flushBuffer(out, outputOff); - } - - // Write blocks - var max = data.length - ((data.length - inputOff) % this.blockSize); - for (; inputOff < max; inputOff += this.blockSize) { - this._update(data, inputOff, out, outputOff); - outputOff += this.blockSize; - } - - // Queue rest - for (; inputOff < data.length; inputOff++, this.bufferOff++) - this.buffer[this.bufferOff] = data[inputOff]; - - return out; -}; - -Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { - var inputOff = 0; - var outputOff = 0; - - var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; - var out = new Array(count * this.blockSize); - - // TODO(indutny): optimize it, this is far from optimal - for (; count > 0; count--) { - inputOff += this._buffer(data, inputOff); - outputOff += this._flushBuffer(out, outputOff); - } - - // Buffer rest of the input - inputOff += this._buffer(data, inputOff); - - return out; -}; - -Cipher.prototype.final = function final(buffer) { - var first; - if (buffer) - first = this.update(buffer); - - var last; - if (this.type === 'encrypt') - last = this._finalEncrypt(); - else - last = this._finalDecrypt(); - - if (first) - return first.concat(last); - else - return last; -}; - -Cipher.prototype._pad = function _pad(buffer, off) { - if (off === 0) - return false; - - while (off < buffer.length) - buffer[off++] = 0; - - return true; -}; - -Cipher.prototype._finalEncrypt = function _finalEncrypt() { - if (!this._pad(this.buffer, this.bufferOff)) - return []; - - var out = new Array(this.blockSize); - this._update(this.buffer, 0, out, 0); - return out; -}; - -Cipher.prototype._unpad = function _unpad(buffer) { - return buffer; -}; - -Cipher.prototype._finalDecrypt = function _finalDecrypt() { - assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); - var out = new Array(this.blockSize); - this._flushBuffer(out, 0); - - return this._unpad(out); -}; - - -/***/ }), - -/***/ "../../node_modules/des.js/lib/des/des.js": -/*!************************************************!*\ - !*** ../../node_modules/des.js/lib/des/des.js ***! - \************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -var utils = __webpack_require__(/*! ./utils */ "../../node_modules/des.js/lib/des/utils.js"); -var Cipher = __webpack_require__(/*! ./cipher */ "../../node_modules/des.js/lib/des/cipher.js"); - -function DESState() { - this.tmp = new Array(2); - this.keys = null; -} - -function DES(options) { - Cipher.call(this, options); - - var state = new DESState(); - this._desState = state; - - this.deriveKeys(state, options.key); -} -inherits(DES, Cipher); -module.exports = DES; - -DES.create = function create(options) { - return new DES(options); -}; - -var shiftTable = [ - 1, 1, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 1 -]; - -DES.prototype.deriveKeys = function deriveKeys(state, key) { - state.keys = new Array(16 * 2); - - assert.equal(key.length, this.blockSize, 'Invalid key length'); - - var kL = utils.readUInt32BE(key, 0); - var kR = utils.readUInt32BE(key, 4); - - utils.pc1(kL, kR, state.tmp, 0); - kL = state.tmp[0]; - kR = state.tmp[1]; - for (var i = 0; i < state.keys.length; i += 2) { - var shift = shiftTable[i >>> 1]; - kL = utils.r28shl(kL, shift); - kR = utils.r28shl(kR, shift); - utils.pc2(kL, kR, state.keys, i); - } -}; - -DES.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._desState; - - var l = utils.readUInt32BE(inp, inOff); - var r = utils.readUInt32BE(inp, inOff + 4); - - // Initial Permutation - utils.ip(l, r, state.tmp, 0); - l = state.tmp[0]; - r = state.tmp[1]; - - if (this.type === 'encrypt') - this._encrypt(state, l, r, state.tmp, 0); - else - this._decrypt(state, l, r, state.tmp, 0); - - l = state.tmp[0]; - r = state.tmp[1]; - - utils.writeUInt32BE(out, l, outOff); - utils.writeUInt32BE(out, r, outOff + 4); -}; - -DES.prototype._pad = function _pad(buffer, off) { - if (this.padding === false) { - return false; - } - - var value = buffer.length - off; - for (var i = off; i < buffer.length; i++) - buffer[i] = value; - - return true; -}; - -DES.prototype._unpad = function _unpad(buffer) { - if (this.padding === false) { - return buffer; - } - - var pad = buffer[buffer.length - 1]; - for (var i = buffer.length - pad; i < buffer.length; i++) - assert.equal(buffer[i], pad); - - return buffer.slice(0, buffer.length - pad); -}; - -DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { - var l = lStart; - var r = rStart; - - // Apply f() x16 times - for (var i = 0; i < state.keys.length; i += 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; - - // f(r, k) - utils.expand(r, state.tmp, 0); - - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils.substitute(keyL, keyR); - var f = utils.permute(s); - - var t = r; - r = (l ^ f) >>> 0; - l = t; - } - - // Reverse Initial Permutation - utils.rip(r, l, out, off); -}; - -DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { - var l = rStart; - var r = lStart; - - // Apply f() x16 times - for (var i = state.keys.length - 2; i >= 0; i -= 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; - - // f(r, k) - utils.expand(l, state.tmp, 0); - - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils.substitute(keyL, keyR); - var f = utils.permute(s); - - var t = l; - l = (r ^ f) >>> 0; - r = t; - } - - // Reverse Initial Permutation - utils.rip(l, r, out, off); -}; - - -/***/ }), - -/***/ "../../node_modules/des.js/lib/des/ede.js": -/*!************************************************!*\ - !*** ../../node_modules/des.js/lib/des/ede.js ***! - \************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -var Cipher = __webpack_require__(/*! ./cipher */ "../../node_modules/des.js/lib/des/cipher.js"); -var DES = __webpack_require__(/*! ./des */ "../../node_modules/des.js/lib/des/des.js"); - -function EDEState(type, key) { - assert.equal(key.length, 24, 'Invalid key length'); - - var k1 = key.slice(0, 8); - var k2 = key.slice(8, 16); - var k3 = key.slice(16, 24); - - if (type === 'encrypt') { - this.ciphers = [ - DES.create({ type: 'encrypt', key: k1 }), - DES.create({ type: 'decrypt', key: k2 }), - DES.create({ type: 'encrypt', key: k3 }) - ]; - } else { - this.ciphers = [ - DES.create({ type: 'decrypt', key: k3 }), - DES.create({ type: 'encrypt', key: k2 }), - DES.create({ type: 'decrypt', key: k1 }) - ]; - } -} - -function EDE(options) { - Cipher.call(this, options); - - var state = new EDEState(this.type, this.options.key); - this._edeState = state; -} -inherits(EDE, Cipher); - -module.exports = EDE; - -EDE.create = function create(options) { - return new EDE(options); -}; - -EDE.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._edeState; - - state.ciphers[0]._update(inp, inOff, out, outOff); - state.ciphers[1]._update(out, outOff, out, outOff); - state.ciphers[2]._update(out, outOff, out, outOff); -}; - -EDE.prototype._pad = DES.prototype._pad; -EDE.prototype._unpad = DES.prototype._unpad; - - -/***/ }), - -/***/ "../../node_modules/des.js/lib/des/utils.js": -/*!**************************************************!*\ - !*** ../../node_modules/des.js/lib/des/utils.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -exports.readUInt32BE = function readUInt32BE(bytes, off) { - var res = (bytes[0 + off] << 24) | - (bytes[1 + off] << 16) | - (bytes[2 + off] << 8) | - bytes[3 + off]; - return res >>> 0; -}; - -exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { - bytes[0 + off] = value >>> 24; - bytes[1 + off] = (value >>> 16) & 0xff; - bytes[2 + off] = (value >>> 8) & 0xff; - bytes[3 + off] = value & 0xff; -}; - -exports.ip = function ip(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - for (var i = 6; i >= 0; i -= 2) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >>> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inL >>> (j + i)) & 1; - } - } - - for (var i = 6; i >= 0; i -= 2) { - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= (inR >>> (j + i)) & 1; - } - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= (inL >>> (j + i)) & 1; - } - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.rip = function rip(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - for (var i = 0; i < 4; i++) { - for (var j = 24; j >= 0; j -= 8) { - outL <<= 1; - outL |= (inR >>> (j + i)) & 1; - outL <<= 1; - outL |= (inL >>> (j + i)) & 1; - } - } - for (var i = 4; i < 8; i++) { - for (var j = 24; j >= 0; j -= 8) { - outR <<= 1; - outR |= (inR >>> (j + i)) & 1; - outR <<= 1; - outR |= (inL >>> (j + i)) & 1; - } - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.pc1 = function pc1(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - // 7, 15, 23, 31, 39, 47, 55, 63 - // 6, 14, 22, 30, 39, 47, 55, 63 - // 5, 13, 21, 29, 39, 47, 55, 63 - // 4, 12, 20, 28 - for (var i = 7; i >= 5; i--) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inL >> (j + i)) & 1; - } - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >> (j + i)) & 1; - } - - // 1, 9, 17, 25, 33, 41, 49, 57 - // 2, 10, 18, 26, 34, 42, 50, 58 - // 3, 11, 19, 27, 35, 43, 51, 59 - // 36, 44, 52, 60 - for (var i = 1; i <= 3; i++) { - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inR >> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inL >> (j + i)) & 1; - } - } - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inL >> (j + i)) & 1; - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.r28shl = function r28shl(num, shift) { - return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); -}; - -var pc2table = [ - // inL => outL - 14, 11, 17, 4, 27, 23, 25, 0, - 13, 22, 7, 18, 5, 9, 16, 24, - 2, 20, 12, 21, 1, 8, 15, 26, - - // inR => outR - 15, 4, 25, 19, 9, 1, 26, 16, - 5, 11, 23, 8, 12, 7, 17, 0, - 22, 3, 10, 14, 6, 20, 27, 24 -]; - -exports.pc2 = function pc2(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - var len = pc2table.length >>> 1; - for (var i = 0; i < len; i++) { - outL <<= 1; - outL |= (inL >>> pc2table[i]) & 0x1; - } - for (var i = len; i < pc2table.length; i++) { - outR <<= 1; - outR |= (inR >>> pc2table[i]) & 0x1; - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -exports.expand = function expand(r, out, off) { - var outL = 0; - var outR = 0; - - outL = ((r & 1) << 5) | (r >>> 27); - for (var i = 23; i >= 15; i -= 4) { - outL <<= 6; - outL |= (r >>> i) & 0x3f; - } - for (var i = 11; i >= 3; i -= 4) { - outR |= (r >>> i) & 0x3f; - outR <<= 6; - } - outR |= ((r & 0x1f) << 1) | (r >>> 31); - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; - -var sTable = [ - 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, - 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, - 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, - 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, - - 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, - 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, - 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, - 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, - - 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, - 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, - 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, - 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, - - 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, - 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, - 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, - 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, - - 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, - 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, - 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, - 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, - - 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, - 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, - 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, - 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, - - 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, - 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, - 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, - 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, - - 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, - 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, - 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, - 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 -]; - -exports.substitute = function substitute(inL, inR) { - var out = 0; - for (var i = 0; i < 4; i++) { - var b = (inL >>> (18 - i * 6)) & 0x3f; - var sb = sTable[i * 0x40 + b]; - - out <<= 4; - out |= sb; - } - for (var i = 0; i < 4; i++) { - var b = (inR >>> (18 - i * 6)) & 0x3f; - var sb = sTable[4 * 0x40 + i * 0x40 + b]; - - out <<= 4; - out |= sb; - } - return out >>> 0; -}; - -var permuteTable = [ - 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, - 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 -]; - -exports.permute = function permute(num) { - var out = 0; - for (var i = 0; i < permuteTable.length; i++) { - out <<= 1; - out |= (num >>> permuteTable[i]) & 0x1; - } - return out >>> 0; -}; - -exports.padSplit = function padSplit(num, size, group) { - var str = num.toString(2); - while (str.length < size) - str = '0' + str; - - var out = []; - for (var i = 0; i < size; i += group) - out.push(str.slice(i, i + group)); - return out.join(' '); -}; - - -/***/ }), - -/***/ "../../node_modules/diffie-hellman/browser.js": -/*!****************************************************!*\ - !*** ../../node_modules/diffie-hellman/browser.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var generatePrime = __webpack_require__(/*! ./lib/generatePrime */ "../../node_modules/diffie-hellman/lib/generatePrime.js") -var primes = __webpack_require__(/*! ./lib/primes.json */ "../../node_modules/diffie-hellman/lib/primes.json") - -var DH = __webpack_require__(/*! ./lib/dh */ "../../node_modules/diffie-hellman/lib/dh.js") - -function getDiffieHellman (mod) { - var prime = new Buffer(primes[mod].prime, 'hex') - var gen = new Buffer(primes[mod].gen, 'hex') - - return new DH(prime, gen) -} - -var ENCODINGS = { - 'binary': true, 'hex': true, 'base64': true -} - -function createDiffieHellman (prime, enc, generator, genc) { - if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { - return createDiffieHellman(prime, 'binary', enc, generator) - } - - enc = enc || 'binary' - genc = genc || 'binary' - generator = generator || new Buffer([2]) - - if (!Buffer.isBuffer(generator)) { - generator = new Buffer(generator, genc) - } - - if (typeof prime === 'number') { - return new DH(generatePrime(prime, generator), generator, true) - } - - if (!Buffer.isBuffer(prime)) { - prime = new Buffer(prime, enc) - } - - return new DH(prime, generator, true) -} - -exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman -exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman - - -/***/ }), - -/***/ "../../node_modules/diffie-hellman/lib/dh.js": -/*!***************************************************!*\ - !*** ../../node_modules/diffie-hellman/lib/dh.js ***! - \***************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js"); -var MillerRabin = __webpack_require__(/*! miller-rabin */ "../../node_modules/miller-rabin/lib/mr.js"); -var millerRabin = new MillerRabin(); -var TWENTYFOUR = new BN(24); -var ELEVEN = new BN(11); -var TEN = new BN(10); -var THREE = new BN(3); -var SEVEN = new BN(7); -var primes = __webpack_require__(/*! ./generatePrime */ "../../node_modules/diffie-hellman/lib/generatePrime.js"); -var randomBytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js"); -module.exports = DH; - -function setPublicKey(pub, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(pub)) { - pub = new Buffer(pub, enc); - } - this._pub = new BN(pub); - return this; -} - -function setPrivateKey(priv, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(priv)) { - priv = new Buffer(priv, enc); - } - this._priv = new BN(priv); - return this; -} - -var primeCache = {}; -function checkPrime(prime, generator) { - var gen = generator.toString('hex'); - var hex = [gen, prime.toString(16)].join('_'); - if (hex in primeCache) { - return primeCache[hex]; - } - var error = 0; - - if (prime.isEven() || - !primes.simpleSieve || - !primes.fermatTest(prime) || - !millerRabin.test(prime)) { - //not a prime so +1 - error += 1; - - if (gen === '02' || gen === '05') { - // we'd be able to check the generator - // it would fail so +8 - error += 8; - } else { - //we wouldn't be able to test the generator - // so +4 - error += 4; - } - primeCache[hex] = error; - return error; - } - if (!millerRabin.test(prime.shrn(1))) { - //not a safe prime - error += 2; - } - var rem; - switch (gen) { - case '02': - if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { - // unsuidable generator - error += 8; - } - break; - case '05': - rem = prime.mod(TEN); - if (rem.cmp(THREE) && rem.cmp(SEVEN)) { - // prime mod 10 needs to equal 3 or 7 - error += 8; - } - break; - default: - error += 4; - } - primeCache[hex] = error; - return error; -} - -function DH(prime, generator, malleable) { - this.setGenerator(generator); - this.__prime = new BN(prime); - this._prime = BN.mont(this.__prime); - this._primeLen = prime.length; - this._pub = undefined; - this._priv = undefined; - this._primeCode = undefined; - if (malleable) { - this.setPublicKey = setPublicKey; - this.setPrivateKey = setPrivateKey; - } else { - this._primeCode = 8; - } -} -Object.defineProperty(DH.prototype, 'verifyError', { - enumerable: true, - get: function () { - if (typeof this._primeCode !== 'number') { - this._primeCode = checkPrime(this.__prime, this.__gen); - } - return this._primeCode; - } -}); -DH.prototype.generateKeys = function () { - if (!this._priv) { - this._priv = new BN(randomBytes(this._primeLen)); - } - this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); - return this.getPublicKey(); -}; - -DH.prototype.computeSecret = function (other) { - other = new BN(other); - other = other.toRed(this._prime); - var secret = other.redPow(this._priv).fromRed(); - var out = new Buffer(secret.toArray()); - var prime = this.getPrime(); - if (out.length < prime.length) { - var front = new Buffer(prime.length - out.length); - front.fill(0); - out = Buffer.concat([front, out]); - } - return out; -}; - -DH.prototype.getPublicKey = function getPublicKey(enc) { - return formatReturnValue(this._pub, enc); -}; - -DH.prototype.getPrivateKey = function getPrivateKey(enc) { - return formatReturnValue(this._priv, enc); -}; - -DH.prototype.getPrime = function (enc) { - return formatReturnValue(this.__prime, enc); -}; - -DH.prototype.getGenerator = function (enc) { - return formatReturnValue(this._gen, enc); -}; - -DH.prototype.setGenerator = function (gen, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(gen)) { - gen = new Buffer(gen, enc); - } - this.__gen = gen; - this._gen = new BN(gen); - return this; -}; - -function formatReturnValue(bn, enc) { - var buf = new Buffer(bn.toArray()); - if (!enc) { - return buf; - } else { - return buf.toString(enc); - } -} - - -/***/ }), - -/***/ "../../node_modules/diffie-hellman/lib/generatePrime.js": -/*!**************************************************************!*\ - !*** ../../node_modules/diffie-hellman/lib/generatePrime.js ***! - \**************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var randomBytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js"); -module.exports = findPrime; -findPrime.simpleSieve = simpleSieve; -findPrime.fermatTest = fermatTest; -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js"); -var TWENTYFOUR = new BN(24); -var MillerRabin = __webpack_require__(/*! miller-rabin */ "../../node_modules/miller-rabin/lib/mr.js"); -var millerRabin = new MillerRabin(); -var ONE = new BN(1); -var TWO = new BN(2); -var FIVE = new BN(5); -var SIXTEEN = new BN(16); -var EIGHT = new BN(8); -var TEN = new BN(10); -var THREE = new BN(3); -var SEVEN = new BN(7); -var ELEVEN = new BN(11); -var FOUR = new BN(4); -var TWELVE = new BN(12); -var primes = null; - -function _getPrimes() { - if (primes !== null) - return primes; - - var limit = 0x100000; - var res = []; - res[0] = 2; - for (var i = 1, k = 3; k < limit; k += 2) { - var sqrt = Math.ceil(Math.sqrt(k)); - for (var j = 0; j < i && res[j] <= sqrt; j++) - if (k % res[j] === 0) - break; - - if (i !== j && res[j] <= sqrt) - continue; - - res[i++] = k; - } - primes = res; - return res; -} - -function simpleSieve(p) { - var primes = _getPrimes(); - - for (var i = 0; i < primes.length; i++) - if (p.modn(primes[i]) === 0) { - if (p.cmpn(primes[i]) === 0) { - return true; - } else { - return false; - } - } - - return true; -} - -function fermatTest(p) { - var red = BN.mont(p); - return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; -} - -function findPrime(bits, gen) { - if (bits < 16) { - // this is what openssl does - if (gen === 2 || gen === 5) { - return new BN([0x8c, 0x7b]); - } else { - return new BN([0x8c, 0x27]); - } - } - gen = new BN(gen); - - var num, n2; - - while (true) { - num = new BN(randomBytes(Math.ceil(bits / 8))); - while (num.bitLength() > bits) { - num.ishrn(1); - } - if (num.isEven()) { - num.iadd(ONE); - } - if (!num.testn(1)) { - num.iadd(TWO); - } - if (!gen.cmp(TWO)) { - while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { - num.iadd(FOUR); - } - } else if (!gen.cmp(FIVE)) { - while (num.mod(TEN).cmp(THREE)) { - num.iadd(FOUR); - } - } - n2 = num.shrn(1); - if (simpleSieve(n2) && simpleSieve(num) && - fermatTest(n2) && fermatTest(num) && - millerRabin.test(n2) && millerRabin.test(num)) { - return num; - } - } - -} - - -/***/ }), - -/***/ "../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js": -/*!**********************************************************************!*\ - !*** ../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js ***! - \**********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* module decorator */ module = __webpack_require__.nmd(module); -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { - Buffer = window.Buffer; - } else { - Buffer = (__webpack_require__(/*! buffer */ "?7dc1").Buffer); - } - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - this.negative = 1; - } - - if (start < number.length) { - if (base === 16) { - this._parseHex(number, start, endian); - } else { - this._parseBase(number, base, start); - if (endian === 'le') { - this._initArray(this.toArray(), base, endian); - } - } - } - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex4Bits (string, index) { - var c = string.charCodeAt(index); - // 'A' - 'F' - if (c >= 65 && c <= 70) { - return c - 55; - // 'a' - 'f' - } else if (c >= 97 && c <= 102) { - return c - 87; - // '0' - '9' - } else { - return (c - 48) & 0xf; - } - } - - function parseHexByte (string, lowerBound, index) { - var r = parseHex4Bits(string, index); - if (index - 1 >= lowerBound) { - r |= parseHex4Bits(string, index - 1) << 4; - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start, endian) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - // 24-bits chunks - var off = 0; - var j = 0; - - var w; - if (endian === 'be') { - for (i = number.length - 1; i >= start; i -= 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } else { - var parseLength = number.length - start; - for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } - - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - this.strip(); - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - if (r.strip !== undefined) { - // r is BN v4 instance - r.strip(); - } else { - // r is BN v5 instance - r._strip(); - } - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})( false || module, this); - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic.js": -/*!***************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic.js ***! - \***************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -var elliptic = exports; - -elliptic.version = (__webpack_require__(/*! ../package.json */ "../../node_modules/elliptic/package.json").version); -elliptic.utils = __webpack_require__(/*! ./elliptic/utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -elliptic.rand = __webpack_require__(/*! brorand */ "../../node_modules/brorand/index.js"); -elliptic.curve = __webpack_require__(/*! ./elliptic/curve */ "../../node_modules/elliptic/lib/elliptic/curve/index.js"); -elliptic.curves = __webpack_require__(/*! ./elliptic/curves */ "../../node_modules/elliptic/lib/elliptic/curves.js"); - -// Protocols -elliptic.ec = __webpack_require__(/*! ./elliptic/ec */ "../../node_modules/elliptic/lib/elliptic/ec/index.js"); -elliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ "../../node_modules/elliptic/lib/elliptic/eddsa/index.js"); - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/curve/base.js": -/*!**************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/curve/base.js ***! - \**************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -var getNAF = utils.getNAF; -var getJSF = utils.getJSF; -var assert = utils.assert; - -function BaseCurve(type, conf) { - this.type = type; - this.p = new BN(conf.p, 16); - - // Use Montgomery, when there is no fast reduction for the prime - this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); - - // Useful for many curves - this.zero = new BN(0).toRed(this.red); - this.one = new BN(1).toRed(this.red); - this.two = new BN(2).toRed(this.red); - - // Curve configuration, optional - this.n = conf.n && new BN(conf.n, 16); - this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); - - // Temporary arrays - this._wnafT1 = new Array(4); - this._wnafT2 = new Array(4); - this._wnafT3 = new Array(4); - this._wnafT4 = new Array(4); - - this._bitLength = this.n ? this.n.bitLength() : 0; - - // Generalized Greg Maxwell's trick - var adjustCount = this.n && this.p.div(this.n); - if (!adjustCount || adjustCount.cmpn(100) > 0) { - this.redN = null; - } else { - this._maxwellTrick = true; - this.redN = this.n.toRed(this.red); - } -} -module.exports = BaseCurve; - -BaseCurve.prototype.point = function point() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype.validate = function validate() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { - assert(p.precomputed); - var doubles = p._getDoubles(); - - var naf = getNAF(k, 1, this._bitLength); - var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); - I /= 3; - - // Translate into more windowed form - var repr = []; - var j; - var nafW; - for (j = 0; j < naf.length; j += doubles.step) { - nafW = 0; - for (var l = j + doubles.step - 1; l >= j; l--) - nafW = (nafW << 1) + naf[l]; - repr.push(nafW); - } - - var a = this.jpoint(null, null, null); - var b = this.jpoint(null, null, null); - for (var i = I; i > 0; i--) { - for (j = 0; j < repr.length; j++) { - nafW = repr[j]; - if (nafW === i) - b = b.mixedAdd(doubles.points[j]); - else if (nafW === -i) - b = b.mixedAdd(doubles.points[j].neg()); - } - a = a.add(b); - } - return a.toP(); -}; - -BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { - var w = 4; - - // Precompute window - var nafPoints = p._getNAFPoints(w); - w = nafPoints.wnd; - var wnd = nafPoints.points; - - // Get NAF form - var naf = getNAF(k, w, this._bitLength); - - // Add `this`*(N+1) for every w-NAF index - var acc = this.jpoint(null, null, null); - for (var i = naf.length - 1; i >= 0; i--) { - // Count zeroes - for (var l = 0; i >= 0 && naf[i] === 0; i--) - l++; - if (i >= 0) - l++; - acc = acc.dblp(l); - - if (i < 0) - break; - var z = naf[i]; - assert(z !== 0); - if (p.type === 'affine') { - // J +- P - if (z > 0) - acc = acc.mixedAdd(wnd[(z - 1) >> 1]); - else - acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); - } else { - // J +- J - if (z > 0) - acc = acc.add(wnd[(z - 1) >> 1]); - else - acc = acc.add(wnd[(-z - 1) >> 1].neg()); - } - } - return p.type === 'affine' ? acc.toP() : acc; -}; - -BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, - points, - coeffs, - len, - jacobianResult) { - var wndWidth = this._wnafT1; - var wnd = this._wnafT2; - var naf = this._wnafT3; - - // Fill all arrays - var max = 0; - var i; - var j; - var p; - for (i = 0; i < len; i++) { - p = points[i]; - var nafPoints = p._getNAFPoints(defW); - wndWidth[i] = nafPoints.wnd; - wnd[i] = nafPoints.points; - } - - // Comb small window NAFs - for (i = len - 1; i >= 1; i -= 2) { - var a = i - 1; - var b = i; - if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { - naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength); - naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength); - max = Math.max(naf[a].length, max); - max = Math.max(naf[b].length, max); - continue; - } - - var comb = [ - points[a], /* 1 */ - null, /* 3 */ - null, /* 5 */ - points[b], /* 7 */ - ]; - - // Try to avoid Projective points, if possible - if (points[a].y.cmp(points[b].y) === 0) { - comb[1] = points[a].add(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].add(points[b].neg()); - } else { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } - - var index = [ - -3, /* -1 -1 */ - -1, /* -1 0 */ - -5, /* -1 1 */ - -7, /* 0 -1 */ - 0, /* 0 0 */ - 7, /* 0 1 */ - 5, /* 1 -1 */ - 1, /* 1 0 */ - 3, /* 1 1 */ - ]; - - var jsf = getJSF(coeffs[a], coeffs[b]); - max = Math.max(jsf[0].length, max); - naf[a] = new Array(max); - naf[b] = new Array(max); - for (j = 0; j < max; j++) { - var ja = jsf[0][j] | 0; - var jb = jsf[1][j] | 0; - - naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; - naf[b][j] = 0; - wnd[a] = comb; - } - } - - var acc = this.jpoint(null, null, null); - var tmp = this._wnafT4; - for (i = max; i >= 0; i--) { - var k = 0; - - while (i >= 0) { - var zero = true; - for (j = 0; j < len; j++) { - tmp[j] = naf[j][i] | 0; - if (tmp[j] !== 0) - zero = false; - } - if (!zero) - break; - k++; - i--; - } - if (i >= 0) - k++; - acc = acc.dblp(k); - if (i < 0) - break; - - for (j = 0; j < len; j++) { - var z = tmp[j]; - p; - if (z === 0) - continue; - else if (z > 0) - p = wnd[j][(z - 1) >> 1]; - else if (z < 0) - p = wnd[j][(-z - 1) >> 1].neg(); - - if (p.type === 'affine') - acc = acc.mixedAdd(p); - else - acc = acc.add(p); - } - } - // Zeroify references - for (i = 0; i < len; i++) - wnd[i] = null; - - if (jacobianResult) - return acc; - else - return acc.toP(); -}; - -function BasePoint(curve, type) { - this.curve = curve; - this.type = type; - this.precomputed = null; -} -BaseCurve.BasePoint = BasePoint; - -BasePoint.prototype.eq = function eq(/*other*/) { - throw new Error('Not implemented'); -}; - -BasePoint.prototype.validate = function validate() { - return this.curve.validate(this); -}; - -BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - bytes = utils.toArray(bytes, enc); - - var len = this.p.byteLength(); - - // uncompressed, hybrid-odd, hybrid-even - if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && - bytes.length - 1 === 2 * len) { - if (bytes[0] === 0x06) - assert(bytes[bytes.length - 1] % 2 === 0); - else if (bytes[0] === 0x07) - assert(bytes[bytes.length - 1] % 2 === 1); - - var res = this.point(bytes.slice(1, 1 + len), - bytes.slice(1 + len, 1 + 2 * len)); - - return res; - } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && - bytes.length - 1 === len) { - return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); - } - throw new Error('Unknown point format'); -}; - -BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { - return this.encode(enc, true); -}; - -BasePoint.prototype._encode = function _encode(compact) { - var len = this.curve.p.byteLength(); - var x = this.getX().toArray('be', len); - - if (compact) - return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); - - return [ 0x04 ].concat(x, this.getY().toArray('be', len)); -}; - -BasePoint.prototype.encode = function encode(enc, compact) { - return utils.encode(this._encode(compact), enc); -}; - -BasePoint.prototype.precompute = function precompute(power) { - if (this.precomputed) - return this; - - var precomputed = { - doubles: null, - naf: null, - beta: null, - }; - precomputed.naf = this._getNAFPoints(8); - precomputed.doubles = this._getDoubles(4, power); - precomputed.beta = this._getBeta(); - this.precomputed = precomputed; - - return this; -}; - -BasePoint.prototype._hasDoubles = function _hasDoubles(k) { - if (!this.precomputed) - return false; - - var doubles = this.precomputed.doubles; - if (!doubles) - return false; - - return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); -}; - -BasePoint.prototype._getDoubles = function _getDoubles(step, power) { - if (this.precomputed && this.precomputed.doubles) - return this.precomputed.doubles; - - var doubles = [ this ]; - var acc = this; - for (var i = 0; i < power; i += step) { - for (var j = 0; j < step; j++) - acc = acc.dbl(); - doubles.push(acc); - } - return { - step: step, - points: doubles, - }; -}; - -BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { - if (this.precomputed && this.precomputed.naf) - return this.precomputed.naf; - - var res = [ this ]; - var max = (1 << wnd) - 1; - var dbl = max === 1 ? null : this.dbl(); - for (var i = 1; i < max; i++) - res[i] = res[i - 1].add(dbl); - return { - wnd: wnd, - points: res, - }; -}; - -BasePoint.prototype._getBeta = function _getBeta() { - return null; -}; - -BasePoint.prototype.dblp = function dblp(k) { - var r = this; - for (var i = 0; i < k; i++) - r = r.dbl(); - return r; -}; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/curve/edwards.js": -/*!*****************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/curve/edwards.js ***! - \*****************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var Base = __webpack_require__(/*! ./base */ "../../node_modules/elliptic/lib/elliptic/curve/base.js"); - -var assert = utils.assert; - -function EdwardsCurve(conf) { - // NOTE: Important as we are creating point in Base.call() - this.twisted = (conf.a | 0) !== 1; - this.mOneA = this.twisted && (conf.a | 0) === -1; - this.extended = this.mOneA; - - Base.call(this, 'edwards', conf); - - this.a = new BN(conf.a, 16).umod(this.red.m); - this.a = this.a.toRed(this.red); - this.c = new BN(conf.c, 16).toRed(this.red); - this.c2 = this.c.redSqr(); - this.d = new BN(conf.d, 16).toRed(this.red); - this.dd = this.d.redAdd(this.d); - - assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); - this.oneC = (conf.c | 0) === 1; -} -inherits(EdwardsCurve, Base); -module.exports = EdwardsCurve; - -EdwardsCurve.prototype._mulA = function _mulA(num) { - if (this.mOneA) - return num.redNeg(); - else - return this.a.redMul(num); -}; - -EdwardsCurve.prototype._mulC = function _mulC(num) { - if (this.oneC) - return num; - else - return this.c.redMul(num); -}; - -// Just for compatibility with Short curve -EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { - return this.point(x, y, z, t); -}; - -EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var x2 = x.redSqr(); - var rhs = this.c2.redSub(this.a.redMul(x2)); - var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); - - var y2 = rhs.redMul(lhs.redInvm()); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); - - return this.point(x, y); -}; - -EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { - y = new BN(y, 16); - if (!y.red) - y = y.toRed(this.red); - - // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) - var y2 = y.redSqr(); - var lhs = y2.redSub(this.c2); - var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); - var x2 = lhs.redMul(rhs.redInvm()); - - if (x2.cmp(this.zero) === 0) { - if (odd) - throw new Error('invalid point'); - else - return this.point(this.zero, y); - } - - var x = x2.redSqrt(); - if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - if (x.fromRed().isOdd() !== odd) - x = x.redNeg(); - - return this.point(x, y); -}; - -EdwardsCurve.prototype.validate = function validate(point) { - if (point.isInfinity()) - return true; - - // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) - point.normalize(); - - var x2 = point.x.redSqr(); - var y2 = point.y.redSqr(); - var lhs = x2.redMul(this.a).redAdd(y2); - var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); - - return lhs.cmp(rhs) === 0; -}; - -function Point(curve, x, y, z, t) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && y === null && z === null) { - this.x = this.curve.zero; - this.y = this.curve.one; - this.z = this.curve.one; - this.t = this.curve.zero; - this.zOne = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = z ? new BN(z, 16) : this.curve.one; - this.t = t && new BN(t, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - if (this.t && !this.t.red) - this.t = this.t.toRed(this.curve.red); - this.zOne = this.z === this.curve.one; - - // Use extended coordinates - if (this.curve.extended && !this.t) { - this.t = this.x.redMul(this.y); - if (!this.zOne) - this.t = this.t.redMul(this.z.redInvm()); - } - } -} -inherits(Point, Base.BasePoint); - -EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; - -EdwardsCurve.prototype.point = function point(x, y, z, t) { - return new Point(this, x, y, z, t); -}; - -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1], obj[2]); -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.x.cmpn(0) === 0 && - (this.y.cmp(this.z) === 0 || - (this.zOne && this.y.cmp(this.curve.c) === 0)); -}; - -Point.prototype._extDbl = function _extDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #doubling-dbl-2008-hwcd - // 4M + 4S - - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = 2 * Z1^2 - var c = this.z.redSqr(); - c = c.redIAdd(c); - // D = a * A - var d = this.curve._mulA(a); - // E = (X1 + Y1)^2 - A - B - var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); - // G = D + B - var g = d.redAdd(b); - // F = G - C - var f = g.redSub(c); - // H = D - B - var h = d.redSub(b); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; - -Point.prototype._projDbl = function _projDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #doubling-dbl-2008-bbjlp - // #doubling-dbl-2007-bl - // and others - // Generally 3M + 4S or 2M + 4S - - // B = (X1 + Y1)^2 - var b = this.x.redAdd(this.y).redSqr(); - // C = X1^2 - var c = this.x.redSqr(); - // D = Y1^2 - var d = this.y.redSqr(); - - var nx; - var ny; - var nz; - var e; - var h; - var j; - if (this.curve.twisted) { - // E = a * C - e = this.curve._mulA(c); - // F = E + D - var f = e.redAdd(d); - if (this.zOne) { - // X3 = (B - C - D) * (F - 2) - nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F^2 - 2 * F - nz = f.redSqr().redSub(f).redSub(f); - } else { - // H = Z1^2 - h = this.z.redSqr(); - // J = F - 2 * H - j = f.redSub(h).redISub(h); - // X3 = (B-C-D)*J - nx = b.redSub(c).redISub(d).redMul(j); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F * J - nz = f.redMul(j); - } - } else { - // E = C + D - e = c.redAdd(d); - // H = (c * Z1)^2 - h = this.curve._mulC(this.z).redSqr(); - // J = E - 2 * H - j = e.redSub(h).redSub(h); - // X3 = c * (B - E) * J - nx = this.curve._mulC(b.redISub(e)).redMul(j); - // Y3 = c * E * (C - D) - ny = this.curve._mulC(e).redMul(c.redISub(d)); - // Z3 = E * J - nz = e.redMul(j); - } - return this.curve.point(nx, ny, nz); -}; - -Point.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; - - // Double in extended coordinates - if (this.curve.extended) - return this._extDbl(); - else - return this._projDbl(); -}; - -Point.prototype._extAdd = function _extAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #addition-add-2008-hwcd-3 - // 8M - - // A = (Y1 - X1) * (Y2 - X2) - var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); - // B = (Y1 + X1) * (Y2 + X2) - var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); - // C = T1 * k * T2 - var c = this.t.redMul(this.curve.dd).redMul(p.t); - // D = Z1 * 2 * Z2 - var d = this.z.redMul(p.z.redAdd(p.z)); - // E = B - A - var e = b.redSub(a); - // F = D - C - var f = d.redSub(c); - // G = D + C - var g = d.redAdd(c); - // H = B + A - var h = b.redAdd(a); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; - -Point.prototype._projAdd = function _projAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #addition-add-2008-bbjlp - // #addition-add-2007-bl - // 10M + 1S - - // A = Z1 * Z2 - var a = this.z.redMul(p.z); - // B = A^2 - var b = a.redSqr(); - // C = X1 * X2 - var c = this.x.redMul(p.x); - // D = Y1 * Y2 - var d = this.y.redMul(p.y); - // E = d * C * D - var e = this.curve.d.redMul(c).redMul(d); - // F = B - E - var f = b.redSub(e); - // G = B + E - var g = b.redAdd(e); - // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) - var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); - var nx = a.redMul(f).redMul(tmp); - var ny; - var nz; - if (this.curve.twisted) { - // Y3 = A * G * (D - a * C) - ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); - // Z3 = F * G - nz = f.redMul(g); - } else { - // Y3 = A * G * (D - C) - ny = a.redMul(g).redMul(d.redSub(c)); - // Z3 = c * F * G - nz = this.curve._mulC(f).redMul(g); - } - return this.curve.point(nx, ny, nz); -}; - -Point.prototype.add = function add(p) { - if (this.isInfinity()) - return p; - if (p.isInfinity()) - return this; - - if (this.curve.extended) - return this._extAdd(p); - else - return this._projAdd(p); -}; - -Point.prototype.mul = function mul(k) { - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else - return this.curve._wnafMul(this, k); -}; - -Point.prototype.mulAdd = function mulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); -}; - -Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); -}; - -Point.prototype.normalize = function normalize() { - if (this.zOne) - return this; - - // Normalize coordinates - var zi = this.z.redInvm(); - this.x = this.x.redMul(zi); - this.y = this.y.redMul(zi); - if (this.t) - this.t = this.t.redMul(zi); - this.z = this.curve.one; - this.zOne = true; - return this; -}; - -Point.prototype.neg = function neg() { - return this.curve.point(this.x.redNeg(), - this.y, - this.z, - this.t && this.t.redNeg()); -}; - -Point.prototype.getX = function getX() { - this.normalize(); - return this.x.fromRed(); -}; - -Point.prototype.getY = function getY() { - this.normalize(); - return this.y.fromRed(); -}; - -Point.prototype.eq = function eq(other) { - return this === other || - this.getX().cmp(other.getX()) === 0 && - this.getY().cmp(other.getY()) === 0; -}; - -Point.prototype.eqXToP = function eqXToP(x) { - var rx = x.toRed(this.curve.red).redMul(this.z); - if (this.x.cmp(rx) === 0) - return true; - - var xc = x.clone(); - var t = this.curve.redN.redMul(this.z); - for (;;) { - xc.iadd(this.curve.n); - if (xc.cmp(this.curve.p) >= 0) - return false; - - rx.redIAdd(t); - if (this.x.cmp(rx) === 0) - return true; - } -}; - -// Compatibility with BaseCurve -Point.prototype.toP = Point.prototype.normalize; -Point.prototype.mixedAdd = Point.prototype.add; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/curve/index.js": -/*!***************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/curve/index.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -var curve = exports; - -curve.base = __webpack_require__(/*! ./base */ "../../node_modules/elliptic/lib/elliptic/curve/base.js"); -curve.short = __webpack_require__(/*! ./short */ "../../node_modules/elliptic/lib/elliptic/curve/short.js"); -curve.mont = __webpack_require__(/*! ./mont */ "../../node_modules/elliptic/lib/elliptic/curve/mont.js"); -curve.edwards = __webpack_require__(/*! ./edwards */ "../../node_modules/elliptic/lib/elliptic/curve/edwards.js"); - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/curve/mont.js": -/*!**************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/curve/mont.js ***! - \**************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var Base = __webpack_require__(/*! ./base */ "../../node_modules/elliptic/lib/elliptic/curve/base.js"); - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); - -function MontCurve(conf) { - Base.call(this, 'mont', conf); - - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.i4 = new BN(4).toRed(this.red).redInvm(); - this.two = new BN(2).toRed(this.red); - this.a24 = this.i4.redMul(this.a.redAdd(this.two)); -} -inherits(MontCurve, Base); -module.exports = MontCurve; - -MontCurve.prototype.validate = function validate(point) { - var x = point.normalize().x; - var x2 = x.redSqr(); - var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); - var y = rhs.redSqrt(); - - return y.redSqr().cmp(rhs) === 0; -}; - -function Point(curve, x, z) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && z === null) { - this.x = this.curve.one; - this.z = this.curve.zero; - } else { - this.x = new BN(x, 16); - this.z = new BN(z, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - } -} -inherits(Point, Base.BasePoint); - -MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - return this.point(utils.toArray(bytes, enc), 1); -}; - -MontCurve.prototype.point = function point(x, z) { - return new Point(this, x, z); -}; - -MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; - -Point.prototype.precompute = function precompute() { - // No-op -}; - -Point.prototype._encode = function _encode() { - return this.getX().toArray('be', this.curve.p.byteLength()); -}; - -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1] || curve.one); -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; - -Point.prototype.dbl = function dbl() { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 - // 2M + 2S + 4A - - // A = X1 + Z1 - var a = this.x.redAdd(this.z); - // AA = A^2 - var aa = a.redSqr(); - // B = X1 - Z1 - var b = this.x.redSub(this.z); - // BB = B^2 - var bb = b.redSqr(); - // C = AA - BB - var c = aa.redSub(bb); - // X3 = AA * BB - var nx = aa.redMul(bb); - // Z3 = C * (BB + A24 * C) - var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); - return this.curve.point(nx, nz); -}; - -Point.prototype.add = function add() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.diffAdd = function diffAdd(p, diff) { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 - // 4M + 2S + 6A - - // A = X2 + Z2 - var a = this.x.redAdd(this.z); - // B = X2 - Z2 - var b = this.x.redSub(this.z); - // C = X3 + Z3 - var c = p.x.redAdd(p.z); - // D = X3 - Z3 - var d = p.x.redSub(p.z); - // DA = D * A - var da = d.redMul(a); - // CB = C * B - var cb = c.redMul(b); - // X5 = Z1 * (DA + CB)^2 - var nx = diff.z.redMul(da.redAdd(cb).redSqr()); - // Z5 = X1 * (DA - CB)^2 - var nz = diff.x.redMul(da.redISub(cb).redSqr()); - return this.curve.point(nx, nz); -}; - -Point.prototype.mul = function mul(k) { - var t = k.clone(); - var a = this; // (N / 2) * Q + Q - var b = this.curve.point(null, null); // (N / 2) * Q - var c = this; // Q - - for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) - bits.push(t.andln(1)); - - for (var i = bits.length - 1; i >= 0; i--) { - if (bits[i] === 0) { - // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q - a = a.diffAdd(b, c); - // N * Q = 2 * ((N / 2) * Q + Q)) - b = b.dbl(); - } else { - // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) - b = a.diffAdd(b, c); - // N * Q + Q = 2 * ((N / 2) * Q + Q) - a = a.dbl(); - } - } - return b; -}; - -Point.prototype.mulAdd = function mulAdd() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.jumlAdd = function jumlAdd() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.eq = function eq(other) { - return this.getX().cmp(other.getX()) === 0; -}; - -Point.prototype.normalize = function normalize() { - this.x = this.x.redMul(this.z.redInvm()); - this.z = this.curve.one; - return this; -}; - -Point.prototype.getX = function getX() { - // Normalize coordinates - this.normalize(); - - return this.x.fromRed(); -}; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/curve/short.js": -/*!***************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/curve/short.js ***! - \***************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var Base = __webpack_require__(/*! ./base */ "../../node_modules/elliptic/lib/elliptic/curve/base.js"); - -var assert = utils.assert; - -function ShortCurve(conf) { - Base.call(this, 'short', conf); - - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.tinv = this.two.redInvm(); - - this.zeroA = this.a.fromRed().cmpn(0) === 0; - this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; - - // If the curve is endomorphic, precalculate beta and lambda - this.endo = this._getEndomorphism(conf); - this._endoWnafT1 = new Array(4); - this._endoWnafT2 = new Array(4); -} -inherits(ShortCurve, Base); -module.exports = ShortCurve; - -ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { - // No efficient endomorphism - if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) - return; - - // Compute beta and lambda, that lambda * P = (beta * Px; Py) - var beta; - var lambda; - if (conf.beta) { - beta = new BN(conf.beta, 16).toRed(this.red); - } else { - var betas = this._getEndoRoots(this.p); - // Choose the smallest beta - beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; - beta = beta.toRed(this.red); - } - if (conf.lambda) { - lambda = new BN(conf.lambda, 16); - } else { - // Choose the lambda that is matching selected beta - var lambdas = this._getEndoRoots(this.n); - if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { - lambda = lambdas[0]; - } else { - lambda = lambdas[1]; - assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); - } - } - - // Get basis vectors, used for balanced length-two representation - var basis; - if (conf.basis) { - basis = conf.basis.map(function(vec) { - return { - a: new BN(vec.a, 16), - b: new BN(vec.b, 16), - }; - }); - } else { - basis = this._getEndoBasis(lambda); - } - - return { - beta: beta, - lambda: lambda, - basis: basis, - }; -}; - -ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { - // Find roots of for x^2 + x + 1 in F - // Root = (-1 +- Sqrt(-3)) / 2 - // - var red = num === this.p ? this.red : BN.mont(num); - var tinv = new BN(2).toRed(red).redInvm(); - var ntinv = tinv.redNeg(); - - var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); - - var l1 = ntinv.redAdd(s).fromRed(); - var l2 = ntinv.redSub(s).fromRed(); - return [ l1, l2 ]; -}; - -ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { - // aprxSqrt >= sqrt(this.n) - var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); - - // 3.74 - // Run EGCD, until r(L + 1) < aprxSqrt - var u = lambda; - var v = this.n.clone(); - var x1 = new BN(1); - var y1 = new BN(0); - var x2 = new BN(0); - var y2 = new BN(1); - - // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) - var a0; - var b0; - // First vector - var a1; - var b1; - // Second vector - var a2; - var b2; - - var prevR; - var i = 0; - var r; - var x; - while (u.cmpn(0) !== 0) { - var q = v.div(u); - r = v.sub(q.mul(u)); - x = x2.sub(q.mul(x1)); - var y = y2.sub(q.mul(y1)); - - if (!a1 && r.cmp(aprxSqrt) < 0) { - a0 = prevR.neg(); - b0 = x1; - a1 = r.neg(); - b1 = x; - } else if (a1 && ++i === 2) { - break; - } - prevR = r; - - v = u; - u = r; - x2 = x1; - x1 = x; - y2 = y1; - y1 = y; - } - a2 = r.neg(); - b2 = x; - - var len1 = a1.sqr().add(b1.sqr()); - var len2 = a2.sqr().add(b2.sqr()); - if (len2.cmp(len1) >= 0) { - a2 = a0; - b2 = b0; - } - - // Normalize signs - if (a1.negative) { - a1 = a1.neg(); - b1 = b1.neg(); - } - if (a2.negative) { - a2 = a2.neg(); - b2 = b2.neg(); - } - - return [ - { a: a1, b: b1 }, - { a: a2, b: b2 }, - ]; -}; - -ShortCurve.prototype._endoSplit = function _endoSplit(k) { - var basis = this.endo.basis; - var v1 = basis[0]; - var v2 = basis[1]; - - var c1 = v2.b.mul(k).divRound(this.n); - var c2 = v1.b.neg().mul(k).divRound(this.n); - - var p1 = c1.mul(v1.a); - var p2 = c2.mul(v2.a); - var q1 = c1.mul(v1.b); - var q2 = c2.mul(v2.b); - - // Calculate answer - var k1 = k.sub(p1).sub(p2); - var k2 = q1.add(q2).neg(); - return { k1: k1, k2: k2 }; -}; - -ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - // XXX Is there any way to tell if the number is odd without converting it - // to non-red form? - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); - - return this.point(x, y); -}; - -ShortCurve.prototype.validate = function validate(point) { - if (point.inf) - return true; - - var x = point.x; - var y = point.y; - - var ax = this.a.redMul(x); - var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); - return y.redSqr().redISub(rhs).cmpn(0) === 0; -}; - -ShortCurve.prototype._endoWnafMulAdd = - function _endoWnafMulAdd(points, coeffs, jacobianResult) { - var npoints = this._endoWnafT1; - var ncoeffs = this._endoWnafT2; - for (var i = 0; i < points.length; i++) { - var split = this._endoSplit(coeffs[i]); - var p = points[i]; - var beta = p._getBeta(); - - if (split.k1.negative) { - split.k1.ineg(); - p = p.neg(true); - } - if (split.k2.negative) { - split.k2.ineg(); - beta = beta.neg(true); - } - - npoints[i * 2] = p; - npoints[i * 2 + 1] = beta; - ncoeffs[i * 2] = split.k1; - ncoeffs[i * 2 + 1] = split.k2; - } - var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); - - // Clean-up references to points and coefficients - for (var j = 0; j < i * 2; j++) { - npoints[j] = null; - ncoeffs[j] = null; - } - return res; - }; - -function Point(curve, x, y, isRed) { - Base.BasePoint.call(this, curve, 'affine'); - if (x === null && y === null) { - this.x = null; - this.y = null; - this.inf = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - // Force redgomery representation when loading from JSON - if (isRed) { - this.x.forceRed(this.curve.red); - this.y.forceRed(this.curve.red); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - this.inf = false; - } -} -inherits(Point, Base.BasePoint); - -ShortCurve.prototype.point = function point(x, y, isRed) { - return new Point(this, x, y, isRed); -}; - -ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { - return Point.fromJSON(this, obj, red); -}; - -Point.prototype._getBeta = function _getBeta() { - if (!this.curve.endo) - return; - - var pre = this.precomputed; - if (pre && pre.beta) - return pre.beta; - - var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); - if (pre) { - var curve = this.curve; - var endoMul = function(p) { - return curve.point(p.x.redMul(curve.endo.beta), p.y); - }; - pre.beta = beta; - beta.precomputed = { - beta: null, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(endoMul), - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(endoMul), - }, - }; - } - return beta; -}; - -Point.prototype.toJSON = function toJSON() { - if (!this.precomputed) - return [ this.x, this.y ]; - - return [ this.x, this.y, this.precomputed && { - doubles: this.precomputed.doubles && { - step: this.precomputed.doubles.step, - points: this.precomputed.doubles.points.slice(1), - }, - naf: this.precomputed.naf && { - wnd: this.precomputed.naf.wnd, - points: this.precomputed.naf.points.slice(1), - }, - } ]; -}; - -Point.fromJSON = function fromJSON(curve, obj, red) { - if (typeof obj === 'string') - obj = JSON.parse(obj); - var res = curve.point(obj[0], obj[1], red); - if (!obj[2]) - return res; - - function obj2point(obj) { - return curve.point(obj[0], obj[1], red); - } - - var pre = obj[2]; - res.precomputed = { - beta: null, - doubles: pre.doubles && { - step: pre.doubles.step, - points: [ res ].concat(pre.doubles.points.map(obj2point)), - }, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: [ res ].concat(pre.naf.points.map(obj2point)), - }, - }; - return res; -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - return this.inf; -}; - -Point.prototype.add = function add(p) { - // O + P = P - if (this.inf) - return p; - - // P + O = P - if (p.inf) - return this; - - // P + P = 2P - if (this.eq(p)) - return this.dbl(); - - // P + (-P) = O - if (this.neg().eq(p)) - return this.curve.point(null, null); - - // P + Q = O - if (this.x.cmp(p.x) === 0) - return this.curve.point(null, null); - - var c = this.y.redSub(p.y); - if (c.cmpn(0) !== 0) - c = c.redMul(this.x.redSub(p.x).redInvm()); - var nx = c.redSqr().redISub(this.x).redISub(p.x); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.dbl = function dbl() { - if (this.inf) - return this; - - // 2P = O - var ys1 = this.y.redAdd(this.y); - if (ys1.cmpn(0) === 0) - return this.curve.point(null, null); - - var a = this.curve.a; - - var x2 = this.x.redSqr(); - var dyinv = ys1.redInvm(); - var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); - - var nx = c.redSqr().redISub(this.x.redAdd(this.x)); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.getX = function getX() { - return this.x.fromRed(); -}; - -Point.prototype.getY = function getY() { - return this.y.fromRed(); -}; - -Point.prototype.mul = function mul(k) { - k = new BN(k, 16); - if (this.isInfinity()) - return this; - else if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else if (this.curve.endo) - return this.curve._endoWnafMulAdd([ this ], [ k ]); - else - return this.curve._wnafMul(this, k); -}; - -Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2); -}; - -Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs, true); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2, true); -}; - -Point.prototype.eq = function eq(p) { - return this === p || - this.inf === p.inf && - (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); -}; - -Point.prototype.neg = function neg(_precompute) { - if (this.inf) - return this; - - var res = this.curve.point(this.x, this.y.redNeg()); - if (_precompute && this.precomputed) { - var pre = this.precomputed; - var negate = function(p) { - return p.neg(); - }; - res.precomputed = { - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(negate), - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(negate), - }, - }; - } - return res; -}; - -Point.prototype.toJ = function toJ() { - if (this.inf) - return this.curve.jpoint(null, null, null); - - var res = this.curve.jpoint(this.x, this.y, this.curve.one); - return res; -}; - -function JPoint(curve, x, y, z) { - Base.BasePoint.call(this, curve, 'jacobian'); - if (x === null && y === null && z === null) { - this.x = this.curve.one; - this.y = this.curve.one; - this.z = new BN(0); - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = new BN(z, 16); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - - this.zOne = this.z === this.curve.one; -} -inherits(JPoint, Base.BasePoint); - -ShortCurve.prototype.jpoint = function jpoint(x, y, z) { - return new JPoint(this, x, y, z); -}; - -JPoint.prototype.toP = function toP() { - if (this.isInfinity()) - return this.curve.point(null, null); - - var zinv = this.z.redInvm(); - var zinv2 = zinv.redSqr(); - var ax = this.x.redMul(zinv2); - var ay = this.y.redMul(zinv2).redMul(zinv); - - return this.curve.point(ax, ay); -}; - -JPoint.prototype.neg = function neg() { - return this.curve.jpoint(this.x, this.y.redNeg(), this.z); -}; - -JPoint.prototype.add = function add(p) { - // O + P = P - if (this.isInfinity()) - return p; - - // P + O = P - if (p.isInfinity()) - return this; - - // 12M + 4S + 7A - var pz2 = p.z.redSqr(); - var z2 = this.z.redSqr(); - var u1 = this.x.redMul(pz2); - var u2 = p.x.redMul(z2); - var s1 = this.y.redMul(pz2.redMul(p.z)); - var s2 = p.y.redMul(z2.redMul(this.z)); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(p.z).redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mixedAdd = function mixedAdd(p) { - // O + P = P - if (this.isInfinity()) - return p.toJ(); - - // P + O = P - if (p.isInfinity()) - return this; - - // 8M + 3S + 7A - var z2 = this.z.redSqr(); - var u1 = this.x; - var u2 = p.x.redMul(z2); - var s1 = this.y; - var s2 = p.y.redMul(z2).redMul(this.z); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.dblp = function dblp(pow) { - if (pow === 0) - return this; - if (this.isInfinity()) - return this; - if (!pow) - return this.dbl(); - - var i; - if (this.curve.zeroA || this.curve.threeA) { - var r = this; - for (i = 0; i < pow; i++) - r = r.dbl(); - return r; - } - - // 1M + 2S + 1A + N * (4S + 5M + 8A) - // N = 1 => 6M + 6S + 9A - var a = this.curve.a; - var tinv = this.curve.tinv; - - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - // Reuse results - var jyd = jy.redAdd(jy); - for (i = 0; i < pow; i++) { - var jx2 = jx.redSqr(); - var jyd2 = jyd.redSqr(); - var jyd4 = jyd2.redSqr(); - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var t1 = jx.redMul(jyd2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - var dny = c.redMul(t2); - dny = dny.redIAdd(dny).redISub(jyd4); - var nz = jyd.redMul(jz); - if (i + 1 < pow) - jz4 = jz4.redMul(jyd4); - - jx = nx; - jz = nz; - jyd = dny; - } - - return this.curve.jpoint(jx, jyd.redMul(tinv), jz); -}; - -JPoint.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; - - if (this.curve.zeroA) - return this._zeroDbl(); - else if (this.curve.threeA) - return this._threeDbl(); - else - return this._dbl(); -}; - -JPoint.prototype._zeroDbl = function _zeroDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 14A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // T = M ^ 2 - 2*S - var t = m.redSqr().redISub(s).redISub(s); - - // 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2*Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-dbl-2009-l - // 2M + 5S + 13A - - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = B^2 - var c = b.redSqr(); - // D = 2 * ((X1 + B)^2 - A - C) - var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); - d = d.redIAdd(d); - // E = 3 * A - var e = a.redAdd(a).redIAdd(a); - // F = E^2 - var f = e.redSqr(); - - // 8 * C - var c8 = c.redIAdd(c); - c8 = c8.redIAdd(c8); - c8 = c8.redIAdd(c8); - - // X3 = F - 2 * D - nx = f.redISub(d).redISub(d); - // Y3 = E * (D - X3) - 8 * C - ny = e.redMul(d.redISub(nx)).redISub(c8); - // Z3 = 2 * Y1 * Z1 - nz = this.y.redMul(this.z); - nz = nz.redIAdd(nz); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._threeDbl = function _threeDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 15A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a - var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); - // T = M^2 - 2 * S - var t = m.redSqr().redISub(s).redISub(s); - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2 * Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b - // 3M + 5S - - // delta = Z1^2 - var delta = this.z.redSqr(); - // gamma = Y1^2 - var gamma = this.y.redSqr(); - // beta = X1 * gamma - var beta = this.x.redMul(gamma); - // alpha = 3 * (X1 - delta) * (X1 + delta) - var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); - alpha = alpha.redAdd(alpha).redIAdd(alpha); - // X3 = alpha^2 - 8 * beta - var beta4 = beta.redIAdd(beta); - beta4 = beta4.redIAdd(beta4); - var beta8 = beta4.redAdd(beta4); - nx = alpha.redSqr().redISub(beta8); - // Z3 = (Y1 + Z1)^2 - gamma - delta - nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); - // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 - var ggamma8 = gamma.redSqr(); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._dbl = function _dbl() { - var a = this.curve.a; - - // 4M + 6S + 10A - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - var jx2 = jx.redSqr(); - var jy2 = jy.redSqr(); - - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var jxd4 = jx.redAdd(jx); - jxd4 = jxd4.redIAdd(jxd4); - var t1 = jxd4.redMul(jy2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - - var jyd8 = jy2.redSqr(); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - var ny = c.redMul(t2).redISub(jyd8); - var nz = jy.redAdd(jy).redMul(jz); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.trpl = function trpl() { - if (!this.curve.zeroA) - return this.dbl().add(this); - - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl - // 5M + 10S + ... - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // ZZ = Z1^2 - var zz = this.z.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // M = 3 * XX + a * ZZ2; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // MM = M^2 - var mm = m.redSqr(); - // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM - var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - e = e.redIAdd(e); - e = e.redAdd(e).redIAdd(e); - e = e.redISub(mm); - // EE = E^2 - var ee = e.redSqr(); - // T = 16*YYYY - var t = yyyy.redIAdd(yyyy); - t = t.redIAdd(t); - t = t.redIAdd(t); - t = t.redIAdd(t); - // U = (M + E)^2 - MM - EE - T - var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); - // X3 = 4 * (X1 * EE - 4 * YY * U) - var yyu4 = yy.redMul(u); - yyu4 = yyu4.redIAdd(yyu4); - yyu4 = yyu4.redIAdd(yyu4); - var nx = this.x.redMul(ee).redISub(yyu4); - nx = nx.redIAdd(nx); - nx = nx.redIAdd(nx); - // Y3 = 8 * Y1 * (U * (T - U) - E * EE) - var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - // Z3 = (Z1 + E)^2 - ZZ - EE - var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mul = function mul(k, kbase) { - k = new BN(k, kbase); - - return this.curve._wnafMul(this, k); -}; - -JPoint.prototype.eq = function eq(p) { - if (p.type === 'affine') - return this.eq(p.toJ()); - - if (this === p) - return true; - - // x1 * z2^2 == x2 * z1^2 - var z2 = this.z.redSqr(); - var pz2 = p.z.redSqr(); - if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) - return false; - - // y1 * z2^3 == y2 * z1^3 - var z3 = z2.redMul(this.z); - var pz3 = pz2.redMul(p.z); - return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; -}; - -JPoint.prototype.eqXToP = function eqXToP(x) { - var zs = this.z.redSqr(); - var rx = x.toRed(this.curve.red).redMul(zs); - if (this.x.cmp(rx) === 0) - return true; - - var xc = x.clone(); - var t = this.curve.redN.redMul(zs); - for (;;) { - xc.iadd(this.curve.n); - if (xc.cmp(this.curve.p) >= 0) - return false; - - rx.redIAdd(t); - if (this.x.cmp(rx) === 0) - return true; - } -}; - -JPoint.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -JPoint.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/curves.js": -/*!**********************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/curves.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -var curves = exports; - -var hash = __webpack_require__(/*! hash.js */ "../../node_modules/hash.js/lib/hash.js"); -var curve = __webpack_require__(/*! ./curve */ "../../node_modules/elliptic/lib/elliptic/curve/index.js"); -var utils = __webpack_require__(/*! ./utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); - -var assert = utils.assert; - -function PresetCurve(options) { - if (options.type === 'short') - this.curve = new curve.short(options); - else if (options.type === 'edwards') - this.curve = new curve.edwards(options); - else - this.curve = new curve.mont(options); - this.g = this.curve.g; - this.n = this.curve.n; - this.hash = options.hash; - - assert(this.g.validate(), 'Invalid curve'); - assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); -} -curves.PresetCurve = PresetCurve; - -function defineCurve(name, options) { - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - get: function() { - var curve = new PresetCurve(options); - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - value: curve, - }); - return curve; - }, - }); -} - -defineCurve('p192', { - type: 'short', - prime: 'p192', - p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', - b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', - n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', - hash: hash.sha256, - gRed: false, - g: [ - '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', - '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811', - ], -}); - -defineCurve('p224', { - type: 'short', - prime: 'p224', - p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', - b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', - n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', - hash: hash.sha256, - gRed: false, - g: [ - 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', - 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34', - ], -}); - -defineCurve('p256', { - type: 'short', - prime: null, - p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', - a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', - b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', - n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', - hash: hash.sha256, - gRed: false, - g: [ - '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', - '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5', - ], -}); - -defineCurve('p384', { - type: 'short', - prime: null, - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 ffffffff', - a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 fffffffc', - b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + - '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', - n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + - 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', - hash: hash.sha384, - gRed: false, - g: [ - 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + - '5502f25d bf55296c 3a545e38 72760ab7', - '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + - '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f', - ], -}); - -defineCurve('p521', { - type: 'short', - prime: null, - p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff', - a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff fffffffc', - b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + - '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + - '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', - n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + - 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', - hash: hash.sha512, - gRed: false, - g: [ - '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + - '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + - 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', - '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + - '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + - '3fad0761 353c7086 a272c240 88be9476 9fd16650', - ], -}); - -defineCurve('curve25519', { - type: 'mont', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '76d06', - b: '1', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '9', - ], -}); - -defineCurve('ed25519', { - type: 'edwards', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '-1', - c: '1', - // -121665 * (121666^(-1)) (mod P) - d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', - - // 4/5 - '6666666666666666666666666666666666666666666666666666666666666658', - ], -}); - -var pre; -try { - pre = __webpack_require__(/*! ./precomputed/secp256k1 */ "../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js"); -} catch (e) { - pre = undefined; -} - -defineCurve('secp256k1', { - type: 'short', - prime: 'k256', - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', - a: '0', - b: '7', - n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', - h: '1', - hash: hash.sha256, - - // Precomputed endomorphism - beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', - lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', - basis: [ - { - a: '3086d221a7d46bcde86c90e49284eb15', - b: '-e4437ed6010e88286f547fa90abfe4c3', - }, - { - a: '114ca50f7a8e2f3f657c1108d9d44cfd8', - b: '3086d221a7d46bcde86c90e49284eb15', - }, - ], - - gRed: false, - g: [ - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', - pre, - ], -}); - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/ec/index.js": -/*!************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/ec/index.js ***! - \************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); -var HmacDRBG = __webpack_require__(/*! hmac-drbg */ "../../node_modules/hmac-drbg/lib/hmac-drbg.js"); -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -var curves = __webpack_require__(/*! ../curves */ "../../node_modules/elliptic/lib/elliptic/curves.js"); -var rand = __webpack_require__(/*! brorand */ "../../node_modules/brorand/index.js"); -var assert = utils.assert; - -var KeyPair = __webpack_require__(/*! ./key */ "../../node_modules/elliptic/lib/elliptic/ec/key.js"); -var Signature = __webpack_require__(/*! ./signature */ "../../node_modules/elliptic/lib/elliptic/ec/signature.js"); - -function EC(options) { - if (!(this instanceof EC)) - return new EC(options); - - // Shortcut `elliptic.ec(curve-name)` - if (typeof options === 'string') { - assert(Object.prototype.hasOwnProperty.call(curves, options), - 'Unknown curve ' + options); - - options = curves[options]; - } - - // Shortcut for `elliptic.ec(elliptic.curves.curveName)` - if (options instanceof curves.PresetCurve) - options = { curve: options }; - - this.curve = options.curve.curve; - this.n = this.curve.n; - this.nh = this.n.ushrn(1); - this.g = this.curve.g; - - // Point on curve - this.g = options.curve.g; - this.g.precompute(options.curve.n.bitLength() + 1); - - // Hash for function for DRBG - this.hash = options.hash || options.curve.hash; -} -module.exports = EC; - -EC.prototype.keyPair = function keyPair(options) { - return new KeyPair(this, options); -}; - -EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { - return KeyPair.fromPrivate(this, priv, enc); -}; - -EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { - return KeyPair.fromPublic(this, pub, enc); -}; - -EC.prototype.genKeyPair = function genKeyPair(options) { - if (!options) - options = {}; - - // Instantiate Hmac_DRBG - var drbg = new HmacDRBG({ - hash: this.hash, - pers: options.pers, - persEnc: options.persEnc || 'utf8', - entropy: options.entropy || rand(this.hash.hmacStrength), - entropyEnc: options.entropy && options.entropyEnc || 'utf8', - nonce: this.n.toArray(), - }); - - var bytes = this.n.byteLength(); - var ns2 = this.n.sub(new BN(2)); - for (;;) { - var priv = new BN(drbg.generate(bytes)); - if (priv.cmp(ns2) > 0) - continue; - - priv.iaddn(1); - return this.keyFromPrivate(priv); - } -}; - -EC.prototype._truncateToN = function _truncateToN(msg, truncOnly) { - var delta = msg.byteLength() * 8 - this.n.bitLength(); - if (delta > 0) - msg = msg.ushrn(delta); - if (!truncOnly && msg.cmp(this.n) >= 0) - return msg.sub(this.n); - else - return msg; -}; - -EC.prototype.sign = function sign(msg, key, enc, options) { - if (typeof enc === 'object') { - options = enc; - enc = null; - } - if (!options) - options = {}; - - key = this.keyFromPrivate(key, enc); - msg = this._truncateToN(new BN(msg, 16)); - - // Zero-extend key to provide enough entropy - var bytes = this.n.byteLength(); - var bkey = key.getPrivate().toArray('be', bytes); - - // Zero-extend nonce to have the same byte size as N - var nonce = msg.toArray('be', bytes); - - // Instantiate Hmac_DRBG - var drbg = new HmacDRBG({ - hash: this.hash, - entropy: bkey, - nonce: nonce, - pers: options.pers, - persEnc: options.persEnc || 'utf8', - }); - - // Number of bytes to generate - var ns1 = this.n.sub(new BN(1)); - - for (var iter = 0; ; iter++) { - var k = options.k ? - options.k(iter) : - new BN(drbg.generate(this.n.byteLength())); - k = this._truncateToN(k, true); - if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) - continue; - - var kp = this.g.mul(k); - if (kp.isInfinity()) - continue; - - var kpX = kp.getX(); - var r = kpX.umod(this.n); - if (r.cmpn(0) === 0) - continue; - - var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); - s = s.umod(this.n); - if (s.cmpn(0) === 0) - continue; - - var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | - (kpX.cmp(r) !== 0 ? 2 : 0); - - // Use complement of `s`, if it is > `n / 2` - if (options.canonical && s.cmp(this.nh) > 0) { - s = this.n.sub(s); - recoveryParam ^= 1; - } - - return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); - } -}; - -EC.prototype.verify = function verify(msg, signature, key, enc) { - msg = this._truncateToN(new BN(msg, 16)); - key = this.keyFromPublic(key, enc); - signature = new Signature(signature, 'hex'); - - // Perform primitive values validation - var r = signature.r; - var s = signature.s; - if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) - return false; - if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) - return false; - - // Validate signature - var sinv = s.invm(this.n); - var u1 = sinv.mul(msg).umod(this.n); - var u2 = sinv.mul(r).umod(this.n); - var p; - - if (!this.curve._maxwellTrick) { - p = this.g.mulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - return p.getX().umod(this.n).cmp(r) === 0; - } - - // NOTE: Greg Maxwell's trick, inspired by: - // https://git.io/vad3K - - p = this.g.jmulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - // Compare `p.x` of Jacobian point with `r`, - // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the - // inverse of `p.z^2` - return p.eqXToP(r); -}; - -EC.prototype.recoverPubKey = function(msg, signature, j, enc) { - assert((3 & j) === j, 'The recovery param is more than two bits'); - signature = new Signature(signature, enc); - - var n = this.n; - var e = new BN(msg); - var r = signature.r; - var s = signature.s; - - // A set LSB signifies that the y-coordinate is odd - var isYOdd = j & 1; - var isSecondKey = j >> 1; - if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) - throw new Error('Unable to find sencond key candinate'); - - // 1.1. Let x = r + jn. - if (isSecondKey) - r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); - else - r = this.curve.pointFromX(r, isYOdd); - - var rInv = signature.r.invm(n); - var s1 = n.sub(e).mul(rInv).umod(n); - var s2 = s.mul(rInv).umod(n); - - // 1.6.1 Compute Q = r^-1 (sR - eG) - // Q = r^-1 (sR + -eG) - return this.g.mulAdd(s1, r, s2); -}; - -EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { - signature = new Signature(signature, enc); - if (signature.recoveryParam !== null) - return signature.recoveryParam; - - for (var i = 0; i < 4; i++) { - var Qprime; - try { - Qprime = this.recoverPubKey(e, signature, i); - } catch (e) { - continue; - } - - if (Qprime.eq(Q)) - return i; - } - throw new Error('Unable to find valid recovery factor'); -}; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/ec/key.js": -/*!**********************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/ec/key.js ***! - \**********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -var assert = utils.assert; - -function KeyPair(ec, options) { - this.ec = ec; - this.priv = null; - this.pub = null; - - // KeyPair(ec, { priv: ..., pub: ... }) - if (options.priv) - this._importPrivate(options.priv, options.privEnc); - if (options.pub) - this._importPublic(options.pub, options.pubEnc); -} -module.exports = KeyPair; - -KeyPair.fromPublic = function fromPublic(ec, pub, enc) { - if (pub instanceof KeyPair) - return pub; - - return new KeyPair(ec, { - pub: pub, - pubEnc: enc, - }); -}; - -KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { - if (priv instanceof KeyPair) - return priv; - - return new KeyPair(ec, { - priv: priv, - privEnc: enc, - }); -}; - -KeyPair.prototype.validate = function validate() { - var pub = this.getPublic(); - - if (pub.isInfinity()) - return { result: false, reason: 'Invalid public key' }; - if (!pub.validate()) - return { result: false, reason: 'Public key is not a point' }; - if (!pub.mul(this.ec.curve.n).isInfinity()) - return { result: false, reason: 'Public key * N != O' }; - - return { result: true, reason: null }; -}; - -KeyPair.prototype.getPublic = function getPublic(compact, enc) { - // compact is optional argument - if (typeof compact === 'string') { - enc = compact; - compact = null; - } - - if (!this.pub) - this.pub = this.ec.g.mul(this.priv); - - if (!enc) - return this.pub; - - return this.pub.encode(enc, compact); -}; - -KeyPair.prototype.getPrivate = function getPrivate(enc) { - if (enc === 'hex') - return this.priv.toString(16, 2); - else - return this.priv; -}; - -KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { - this.priv = new BN(key, enc || 16); - - // Ensure that the priv won't be bigger than n, otherwise we may fail - // in fixed multiplication method - this.priv = this.priv.umod(this.ec.curve.n); -}; - -KeyPair.prototype._importPublic = function _importPublic(key, enc) { - if (key.x || key.y) { - // Montgomery points only have an `x` coordinate. - // Weierstrass/Edwards points on the other hand have both `x` and - // `y` coordinates. - if (this.ec.curve.type === 'mont') { - assert(key.x, 'Need x coordinate'); - } else if (this.ec.curve.type === 'short' || - this.ec.curve.type === 'edwards') { - assert(key.x && key.y, 'Need both x and y coordinate'); - } - this.pub = this.ec.curve.point(key.x, key.y); - return; - } - this.pub = this.ec.curve.decodePoint(key, enc); -}; - -// ECDH -KeyPair.prototype.derive = function derive(pub) { - if(!pub.validate()) { - assert(pub.validate(), 'public point not validated'); - } - return pub.mul(this.priv).getX(); -}; - -// ECDSA -KeyPair.prototype.sign = function sign(msg, enc, options) { - return this.ec.sign(msg, this, enc, options); -}; - -KeyPair.prototype.verify = function verify(msg, signature) { - return this.ec.verify(msg, signature, this); -}; - -KeyPair.prototype.inspect = function inspect() { - return ''; -}; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/ec/signature.js": -/*!****************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/ec/signature.js ***! - \****************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -var assert = utils.assert; - -function Signature(options, enc) { - if (options instanceof Signature) - return options; - - if (this._importDER(options, enc)) - return; - - assert(options.r && options.s, 'Signature without r or s'); - this.r = new BN(options.r, 16); - this.s = new BN(options.s, 16); - if (options.recoveryParam === undefined) - this.recoveryParam = null; - else - this.recoveryParam = options.recoveryParam; -} -module.exports = Signature; - -function Position() { - this.place = 0; -} - -function getLength(buf, p) { - var initial = buf[p.place++]; - if (!(initial & 0x80)) { - return initial; - } - var octetLen = initial & 0xf; - - // Indefinite length or overflow - if (octetLen === 0 || octetLen > 4) { - return false; - } - - if(buf[p.place] === 0x00) { - return false; - } - - var val = 0; - for (var i = 0, off = p.place; i < octetLen; i++, off++) { - val <<= 8; - val |= buf[off]; - val >>>= 0; - } - - // Leading zeroes - if (val <= 0x7f) { - return false; - } - - p.place = off; - return val; -} - -function rmPadding(buf) { - var i = 0; - var len = buf.length - 1; - while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { - i++; - } - if (i === 0) { - return buf; - } - return buf.slice(i); -} - -Signature.prototype._importDER = function _importDER(data, enc) { - data = utils.toArray(data, enc); - var p = new Position(); - if (data[p.place++] !== 0x30) { - return false; - } - var len = getLength(data, p); - if (len === false) { - return false; - } - if ((len + p.place) !== data.length) { - return false; - } - if (data[p.place++] !== 0x02) { - return false; - } - var rlen = getLength(data, p); - if (rlen === false) { - return false; - } - if ((data[p.place] & 128) !== 0) { - return false; - } - var r = data.slice(p.place, rlen + p.place); - p.place += rlen; - if (data[p.place++] !== 0x02) { - return false; - } - var slen = getLength(data, p); - if (slen === false) { - return false; - } - if (data.length !== slen + p.place) { - return false; - } - if ((data[p.place] & 128) !== 0) { - return false; - } - var s = data.slice(p.place, slen + p.place); - if (r[0] === 0) { - if (r[1] & 0x80) { - r = r.slice(1); - } else { - // Leading zeroes - return false; - } - } - if (s[0] === 0) { - if (s[1] & 0x80) { - s = s.slice(1); - } else { - // Leading zeroes - return false; - } - } - - this.r = new BN(r); - this.s = new BN(s); - this.recoveryParam = null; - - return true; -}; - -function constructLength(arr, len) { - if (len < 0x80) { - arr.push(len); - return; - } - var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); - arr.push(octets | 0x80); - while (--octets) { - arr.push((len >>> (octets << 3)) & 0xff); - } - arr.push(len); -} - -Signature.prototype.toDER = function toDER(enc) { - var r = this.r.toArray(); - var s = this.s.toArray(); - - // Pad values - if (r[0] & 0x80) - r = [ 0 ].concat(r); - // Pad values - if (s[0] & 0x80) - s = [ 0 ].concat(s); - - r = rmPadding(r); - s = rmPadding(s); - - while (!s[0] && !(s[1] & 0x80)) { - s = s.slice(1); - } - var arr = [ 0x02 ]; - constructLength(arr, r.length); - arr = arr.concat(r); - arr.push(0x02); - constructLength(arr, s.length); - var backHalf = arr.concat(s); - var res = [ 0x30 ]; - constructLength(res, backHalf.length); - res = res.concat(backHalf); - return utils.encode(res, enc); -}; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/eddsa/index.js": -/*!***************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/eddsa/index.js ***! - \***************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var hash = __webpack_require__(/*! hash.js */ "../../node_modules/hash.js/lib/hash.js"); -var curves = __webpack_require__(/*! ../curves */ "../../node_modules/elliptic/lib/elliptic/curves.js"); -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var KeyPair = __webpack_require__(/*! ./key */ "../../node_modules/elliptic/lib/elliptic/eddsa/key.js"); -var Signature = __webpack_require__(/*! ./signature */ "../../node_modules/elliptic/lib/elliptic/eddsa/signature.js"); - -function EDDSA(curve) { - assert(curve === 'ed25519', 'only tested with ed25519 so far'); - - if (!(this instanceof EDDSA)) - return new EDDSA(curve); - - curve = curves[curve].curve; - this.curve = curve; - this.g = curve.g; - this.g.precompute(curve.n.bitLength() + 1); - - this.pointClass = curve.point().constructor; - this.encodingLength = Math.ceil(curve.n.bitLength() / 8); - this.hash = hash.sha512; -} - -module.exports = EDDSA; - -/** -* @param {Array|String} message - message bytes -* @param {Array|String|KeyPair} secret - secret bytes or a keypair -* @returns {Signature} - signature -*/ -EDDSA.prototype.sign = function sign(message, secret) { - message = parseBytes(message); - var key = this.keyFromSecret(secret); - var r = this.hashInt(key.messagePrefix(), message); - var R = this.g.mul(r); - var Rencoded = this.encodePoint(R); - var s_ = this.hashInt(Rencoded, key.pubBytes(), message) - .mul(key.priv()); - var S = r.add(s_).umod(this.curve.n); - return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); -}; - -/** -* @param {Array} message - message bytes -* @param {Array|String|Signature} sig - sig bytes -* @param {Array|String|Point|KeyPair} pub - public key -* @returns {Boolean} - true if public key matches sig of message -*/ -EDDSA.prototype.verify = function verify(message, sig, pub) { - message = parseBytes(message); - sig = this.makeSignature(sig); - if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) { - return false; - } - var key = this.keyFromPublic(pub); - var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); - var SG = this.g.mul(sig.S()); - var RplusAh = sig.R().add(key.pub().mul(h)); - return RplusAh.eq(SG); -}; - -EDDSA.prototype.hashInt = function hashInt() { - var hash = this.hash(); - for (var i = 0; i < arguments.length; i++) - hash.update(arguments[i]); - return utils.intFromLE(hash.digest()).umod(this.curve.n); -}; - -EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { - return KeyPair.fromPublic(this, pub); -}; - -EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { - return KeyPair.fromSecret(this, secret); -}; - -EDDSA.prototype.makeSignature = function makeSignature(sig) { - if (sig instanceof Signature) - return sig; - return new Signature(this, sig); -}; - -/** -* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 -* -* EDDSA defines methods for encoding and decoding points and integers. These are -* helper convenience methods, that pass along to utility functions implied -* parameters. -* -*/ -EDDSA.prototype.encodePoint = function encodePoint(point) { - var enc = point.getY().toArray('le', this.encodingLength); - enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; - return enc; -}; - -EDDSA.prototype.decodePoint = function decodePoint(bytes) { - bytes = utils.parseBytes(bytes); - - var lastIx = bytes.length - 1; - var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); - var xIsOdd = (bytes[lastIx] & 0x80) !== 0; - - var y = utils.intFromLE(normed); - return this.curve.pointFromY(y, xIsOdd); -}; - -EDDSA.prototype.encodeInt = function encodeInt(num) { - return num.toArray('le', this.encodingLength); -}; - -EDDSA.prototype.decodeInt = function decodeInt(bytes) { - return utils.intFromLE(bytes); -}; - -EDDSA.prototype.isPoint = function isPoint(val) { - return val instanceof this.pointClass; -}; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/eddsa/key.js": -/*!*************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/eddsa/key.js ***! - \*************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var cachedProperty = utils.cachedProperty; - -/** -* @param {EDDSA} eddsa - instance -* @param {Object} params - public/private key parameters -* -* @param {Array} [params.secret] - secret seed bytes -* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) -* @param {Array} [params.pub] - public key point encoded as bytes -* -*/ -function KeyPair(eddsa, params) { - this.eddsa = eddsa; - this._secret = parseBytes(params.secret); - if (eddsa.isPoint(params.pub)) - this._pub = params.pub; - else - this._pubBytes = parseBytes(params.pub); -} - -KeyPair.fromPublic = function fromPublic(eddsa, pub) { - if (pub instanceof KeyPair) - return pub; - return new KeyPair(eddsa, { pub: pub }); -}; - -KeyPair.fromSecret = function fromSecret(eddsa, secret) { - if (secret instanceof KeyPair) - return secret; - return new KeyPair(eddsa, { secret: secret }); -}; - -KeyPair.prototype.secret = function secret() { - return this._secret; -}; - -cachedProperty(KeyPair, 'pubBytes', function pubBytes() { - return this.eddsa.encodePoint(this.pub()); -}); - -cachedProperty(KeyPair, 'pub', function pub() { - if (this._pubBytes) - return this.eddsa.decodePoint(this._pubBytes); - return this.eddsa.g.mul(this.priv()); -}); - -cachedProperty(KeyPair, 'privBytes', function privBytes() { - var eddsa = this.eddsa; - var hash = this.hash(); - var lastIx = eddsa.encodingLength - 1; - - var a = hash.slice(0, eddsa.encodingLength); - a[0] &= 248; - a[lastIx] &= 127; - a[lastIx] |= 64; - - return a; -}); - -cachedProperty(KeyPair, 'priv', function priv() { - return this.eddsa.decodeInt(this.privBytes()); -}); - -cachedProperty(KeyPair, 'hash', function hash() { - return this.eddsa.hash().update(this.secret()).digest(); -}); - -cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { - return this.hash().slice(this.eddsa.encodingLength); -}); - -KeyPair.prototype.sign = function sign(message) { - assert(this._secret, 'KeyPair can only verify'); - return this.eddsa.sign(message, this); -}; - -KeyPair.prototype.verify = function verify(message, sig) { - return this.eddsa.verify(message, sig, this); -}; - -KeyPair.prototype.getSecret = function getSecret(enc) { - assert(this._secret, 'KeyPair is public only'); - return utils.encode(this.secret(), enc); -}; - -KeyPair.prototype.getPublic = function getPublic(enc) { - return utils.encode(this.pubBytes(), enc); -}; - -module.exports = KeyPair; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/eddsa/signature.js": -/*!*******************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/eddsa/signature.js ***! - \*******************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); -var assert = utils.assert; -var cachedProperty = utils.cachedProperty; -var parseBytes = utils.parseBytes; - -/** -* @param {EDDSA} eddsa - eddsa instance -* @param {Array|Object} sig - -* @param {Array|Point} [sig.R] - R point as Point or bytes -* @param {Array|bn} [sig.S] - S scalar as bn or bytes -* @param {Array} [sig.Rencoded] - R point encoded -* @param {Array} [sig.Sencoded] - S scalar encoded -*/ -function Signature(eddsa, sig) { - this.eddsa = eddsa; - - if (typeof sig !== 'object') - sig = parseBytes(sig); - - if (Array.isArray(sig)) { - assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size'); - sig = { - R: sig.slice(0, eddsa.encodingLength), - S: sig.slice(eddsa.encodingLength), - }; - } - - assert(sig.R && sig.S, 'Signature without R or S'); - - if (eddsa.isPoint(sig.R)) - this._R = sig.R; - if (sig.S instanceof BN) - this._S = sig.S; - - this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; - this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; -} - -cachedProperty(Signature, 'S', function S() { - return this.eddsa.decodeInt(this.Sencoded()); -}); - -cachedProperty(Signature, 'R', function R() { - return this.eddsa.decodePoint(this.Rencoded()); -}); - -cachedProperty(Signature, 'Rencoded', function Rencoded() { - return this.eddsa.encodePoint(this.R()); -}); - -cachedProperty(Signature, 'Sencoded', function Sencoded() { - return this.eddsa.encodeInt(this.S()); -}); - -Signature.prototype.toBytes = function toBytes() { - return this.Rencoded().concat(this.Sencoded()); -}; - -Signature.prototype.toHex = function toHex() { - return utils.encode(this.toBytes(), 'hex').toUpperCase(); -}; - -module.exports = Signature; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js": -/*!*************************************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js ***! - \*************************************************************************/ -/***/ ((module) => { - -module.exports = { - doubles: { - step: 4, - points: [ - [ - 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', - 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821', - ], - [ - '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', - '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf', - ], - [ - '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', - 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695', - ], - [ - '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', - '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9', - ], - [ - '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', - '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36', - ], - [ - '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', - '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f', - ], - [ - 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', - '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999', - ], - [ - '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', - 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09', - ], - [ - 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', - '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d', - ], - [ - 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', - 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088', - ], - [ - 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', - '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d', - ], - [ - '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', - '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8', - ], - [ - '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', - '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a', - ], - [ - '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', - '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453', - ], - [ - '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', - '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160', - ], - [ - '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', - '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0', - ], - [ - '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', - '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6', - ], - [ - '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', - '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589', - ], - [ - '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', - 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17', - ], - [ - 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', - '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda', - ], - [ - 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', - '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd', - ], - [ - '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', - '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2', - ], - [ - '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', - '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6', - ], - [ - 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', - '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f', - ], - [ - '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', - 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01', - ], - [ - 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', - '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3', - ], - [ - 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', - 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f', - ], - [ - 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', - '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7', - ], - [ - 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', - 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78', - ], - [ - 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', - '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1', - ], - [ - '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', - 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150', - ], - [ - '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', - '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82', - ], - [ - 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', - '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc', - ], - [ - '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', - 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b', - ], - [ - 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', - '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51', - ], - [ - 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', - '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45', - ], - [ - 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', - 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120', - ], - [ - '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', - '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84', - ], - [ - '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', - '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d', - ], - [ - '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', - 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d', - ], - [ - '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', - '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8', - ], - [ - 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', - '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8', - ], - [ - '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', - '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac', - ], - [ - '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', - 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f', - ], - [ - '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', - '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962', - ], - [ - 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', - '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907', - ], - [ - '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', - 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec', - ], - [ - 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', - 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d', - ], - [ - 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', - '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414', - ], - [ - '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', - 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd', - ], - [ - '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', - 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0', - ], - [ - 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', - '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811', - ], - [ - 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', - '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1', - ], - [ - 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', - '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c', - ], - [ - '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', - 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73', - ], - [ - '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', - '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd', - ], - [ - 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', - 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405', - ], - [ - '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', - 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589', - ], - [ - '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', - '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e', - ], - [ - '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', - '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27', - ], - [ - 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', - 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1', - ], - [ - '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', - '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482', - ], - [ - '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', - '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945', - ], - [ - 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', - '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573', - ], - [ - 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', - 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82', - ], - ], - }, - naf: { - wnd: 7, - points: [ - [ - 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', - '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672', - ], - [ - '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', - 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6', - ], - [ - '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', - '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da', - ], - [ - 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', - 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37', - ], - [ - '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', - 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b', - ], - [ - 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', - 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81', - ], - [ - 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', - '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58', - ], - [ - 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', - '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77', - ], - [ - '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', - '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a', - ], - [ - '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', - '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c', - ], - [ - '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', - '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67', - ], - [ - '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', - '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402', - ], - [ - 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', - 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55', - ], - [ - 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', - '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482', - ], - [ - '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', - 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82', - ], - [ - '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', - 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396', - ], - [ - '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', - '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49', - ], - [ - '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', - '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf', - ], - [ - '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', - '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a', - ], - [ - '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', - 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7', - ], - [ - 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', - 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933', - ], - [ - '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', - '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a', - ], - [ - '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', - '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6', - ], - [ - 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', - 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37', - ], - [ - '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', - '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e', - ], - [ - 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', - 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6', - ], - [ - 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', - 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476', - ], - [ - '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', - '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40', - ], - [ - '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', - '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61', - ], - [ - '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', - '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683', - ], - [ - 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', - '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5', - ], - [ - '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', - '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b', - ], - [ - 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', - '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417', - ], - [ - '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', - 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868', - ], - [ - '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', - 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a', - ], - [ - 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', - 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6', - ], - [ - '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', - '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996', - ], - [ - '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', - 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e', - ], - [ - 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', - 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d', - ], - [ - '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', - '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2', - ], - [ - '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', - 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e', - ], - [ - '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', - '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437', - ], - [ - '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', - 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311', - ], - [ - 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', - '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4', - ], - [ - '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', - '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575', - ], - [ - '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', - 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d', - ], - [ - '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', - 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d', - ], - [ - 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', - 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629', - ], - [ - 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', - 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06', - ], - [ - '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', - '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374', - ], - [ - '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', - '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee', - ], - [ - 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', - '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1', - ], - [ - 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', - 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b', - ], - [ - '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', - '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661', - ], - [ - '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', - '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6', - ], - [ - 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', - '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e', - ], - [ - '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', - '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d', - ], - [ - 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', - 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc', - ], - [ - '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', - 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4', - ], - [ - '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', - '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c', - ], - [ - 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', - '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b', - ], - [ - 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', - '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913', - ], - [ - '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', - '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154', - ], - [ - '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', - '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865', - ], - [ - '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', - 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc', - ], - [ - '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', - 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224', - ], - [ - '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', - '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e', - ], - [ - '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', - '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6', - ], - [ - '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', - '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511', - ], - [ - '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', - 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b', - ], - [ - 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', - 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2', - ], - [ - '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', - 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c', - ], - [ - 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', - '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3', - ], - [ - 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', - '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d', - ], - [ - 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', - '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700', - ], - [ - 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', - '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4', - ], - [ - '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', - 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196', - ], - [ - '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', - '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4', - ], - [ - '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', - 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257', - ], - [ - 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', - 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13', - ], - [ - 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', - '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096', - ], - [ - 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', - 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38', - ], - [ - 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', - '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f', - ], - [ - '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', - '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448', - ], - [ - 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', - '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a', - ], - [ - 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', - '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4', - ], - [ - '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', - '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437', - ], - [ - '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', - 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7', - ], - [ - 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', - '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d', - ], - [ - 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', - '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a', - ], - [ - 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', - '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54', - ], - [ - '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', - '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77', - ], - [ - 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', - 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517', - ], - [ - '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', - 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10', - ], - [ - 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', - 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125', - ], - [ - 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', - '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e', - ], - [ - '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', - 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1', - ], - [ - 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', - '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2', - ], - [ - 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', - '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423', - ], - [ - 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', - '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8', - ], - [ - '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', - 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758', - ], - [ - '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', - 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375', - ], - [ - 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', - '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d', - ], - [ - '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', - 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec', - ], - [ - '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', - '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0', - ], - [ - '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', - 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c', - ], - [ - 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', - 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4', - ], - [ - '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', - 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f', - ], - [ - '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', - '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649', - ], - [ - '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', - 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826', - ], - [ - '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', - '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5', - ], - [ - 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', - 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87', - ], - [ - '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', - '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b', - ], - [ - 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', - '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc', - ], - [ - '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', - '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c', - ], - [ - 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', - 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f', - ], - [ - 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', - '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a', - ], - [ - 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', - 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46', - ], - [ - '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', - 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f', - ], - [ - '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', - '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03', - ], - [ - '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', - 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08', - ], - [ - '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', - '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8', - ], - [ - '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', - '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373', - ], - [ - '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', - 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3', - ], - [ - '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', - '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8', - ], - [ - '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', - '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1', - ], - [ - '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', - '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9', - ], - ], - }, -}; - - -/***/ }), - -/***/ "../../node_modules/elliptic/lib/elliptic/utils.js": -/*!*********************************************************!*\ - !*** ../../node_modules/elliptic/lib/elliptic/utils.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -var utils = exports; -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); -var minAssert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); -var minUtils = __webpack_require__(/*! minimalistic-crypto-utils */ "../../node_modules/minimalistic-crypto-utils/lib/utils.js"); - -utils.assert = minAssert; -utils.toArray = minUtils.toArray; -utils.zero2 = minUtils.zero2; -utils.toHex = minUtils.toHex; -utils.encode = minUtils.encode; - -// Represent num in a w-NAF form -function getNAF(num, w, bits) { - var naf = new Array(Math.max(num.bitLength(), bits) + 1); - var i; - for (i = 0; i < naf.length; i += 1) { - naf[i] = 0; - } - - var ws = 1 << (w + 1); - var k = num.clone(); - - for (i = 0; i < naf.length; i++) { - var z; - var mod = k.andln(ws - 1); - if (k.isOdd()) { - if (mod > (ws >> 1) - 1) - z = (ws >> 1) - mod; - else - z = mod; - k.isubn(z); - } else { - z = 0; - } - - naf[i] = z; - k.iushrn(1); - } - - return naf; -} -utils.getNAF = getNAF; - -// Represent k1, k2 in a Joint Sparse Form -function getJSF(k1, k2) { - var jsf = [ - [], - [], - ]; - - k1 = k1.clone(); - k2 = k2.clone(); - var d1 = 0; - var d2 = 0; - var m8; - while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { - // First phase - var m14 = (k1.andln(3) + d1) & 3; - var m24 = (k2.andln(3) + d2) & 3; - if (m14 === 3) - m14 = -1; - if (m24 === 3) - m24 = -1; - var u1; - if ((m14 & 1) === 0) { - u1 = 0; - } else { - m8 = (k1.andln(7) + d1) & 7; - if ((m8 === 3 || m8 === 5) && m24 === 2) - u1 = -m14; - else - u1 = m14; - } - jsf[0].push(u1); - - var u2; - if ((m24 & 1) === 0) { - u2 = 0; - } else { - m8 = (k2.andln(7) + d2) & 7; - if ((m8 === 3 || m8 === 5) && m14 === 2) - u2 = -m24; - else - u2 = m24; - } - jsf[1].push(u2); - - // Second phase - if (2 * d1 === u1 + 1) - d1 = 1 - d1; - if (2 * d2 === u2 + 1) - d2 = 1 - d2; - k1.iushrn(1); - k2.iushrn(1); - } - - return jsf; -} -utils.getJSF = getJSF; - -function cachedProperty(obj, name, computer) { - var key = '_' + name; - obj.prototype[name] = function cachedProperty() { - return this[key] !== undefined ? this[key] : - this[key] = computer.call(this); - }; -} -utils.cachedProperty = cachedProperty; - -function parseBytes(bytes) { - return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : - bytes; -} -utils.parseBytes = parseBytes; - -function intFromLE(bytes) { - return new BN(bytes, 'hex', 'le'); -} -utils.intFromLE = intFromLE; - - - -/***/ }), - -/***/ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js": -/*!****************************************************************!*\ - !*** ../../node_modules/elliptic/node_modules/bn.js/lib/bn.js ***! - \****************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* module decorator */ module = __webpack_require__.nmd(module); -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { - Buffer = window.Buffer; - } else { - Buffer = (__webpack_require__(/*! buffer */ "?f84f").Buffer); - } - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - this.negative = 1; - } - - if (start < number.length) { - if (base === 16) { - this._parseHex(number, start, endian); - } else { - this._parseBase(number, base, start); - if (endian === 'le') { - this._initArray(this.toArray(), base, endian); - } - } - } - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex4Bits (string, index) { - var c = string.charCodeAt(index); - // 'A' - 'F' - if (c >= 65 && c <= 70) { - return c - 55; - // 'a' - 'f' - } else if (c >= 97 && c <= 102) { - return c - 87; - // '0' - '9' - } else { - return (c - 48) & 0xf; - } - } - - function parseHexByte (string, lowerBound, index) { - var r = parseHex4Bits(string, index); - if (index - 1 >= lowerBound) { - r |= parseHex4Bits(string, index - 1) << 4; - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start, endian) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - // 24-bits chunks - var off = 0; - var j = 0; - - var w; - if (endian === 'be') { - for (i = number.length - 1; i >= start; i -= 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } else { - var parseLength = number.length - start; - for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } - - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - this.strip(); - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - if (r.strip !== undefined) { - // r is BN v4 instance - r.strip(); - } else { - // r is BN v5 instance - r._strip(); - } - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})( false || module, this); - - -/***/ }), - -/***/ "../../node_modules/events/events.js": -/*!*******************************************!*\ - !*** ../../node_modules/events/events.js ***! - \*******************************************/ -/***/ ((module) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -var R = typeof Reflect === 'object' ? Reflect : null -var ReflectApply = R && typeof R.apply === 'function' - ? R.apply - : function ReflectApply(target, receiver, args) { - return Function.prototype.apply.call(target, receiver, args); - } - -var ReflectOwnKeys -if (R && typeof R.ownKeys === 'function') { - ReflectOwnKeys = R.ownKeys -} else if (Object.getOwnPropertySymbols) { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target) - .concat(Object.getOwnPropertySymbols(target)); - }; -} else { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target); - }; -} - -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); -} - -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; -} - -function EventEmitter() { - EventEmitter.init.call(this); -} -module.exports = EventEmitter; -module.exports.once = once; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._eventsCount = 0; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -var defaultMaxListeners = 10; - -function checkListener(listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } -} - -Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function() { - return defaultMaxListeners; - }, - set: function(arg) { - if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { - throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); - } - defaultMaxListeners = arg; - } -}); - -EventEmitter.init = function() { - - if (this._events === undefined || - this._events === Object.getPrototypeOf(this)._events) { - this._events = Object.create(null); - this._eventsCount = 0; - } - - this._maxListeners = this._maxListeners || undefined; -}; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { - if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { - throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); - } - this._maxListeners = n; - return this; -}; - -function _getMaxListeners(that) { - if (that._maxListeners === undefined) - return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} - -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return _getMaxListeners(this); -}; - -EventEmitter.prototype.emit = function emit(type) { - var args = []; - for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); - var doError = (type === 'error'); - - var events = this._events; - if (events !== undefined) - doError = (doError && events.error === undefined); - else if (!doError) - return false; - - // If there is no 'error' event listener then throw. - if (doError) { - var er; - if (args.length > 0) - er = args[0]; - if (er instanceof Error) { - // Note: The comments on the `throw` lines are intentional, they show - // up in Node's output if this results in an unhandled exception. - throw er; // Unhandled 'error' event - } - // At least give some kind of context to the user - var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); - err.context = er; - throw err; // Unhandled 'error' event - } - - var handler = events[type]; - - if (handler === undefined) - return false; - - if (typeof handler === 'function') { - ReflectApply(handler, this, args); - } else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - ReflectApply(listeners[i], this, args); - } - - return true; -}; - -function _addListener(target, type, listener, prepend) { - var m; - var events; - var existing; - - checkListener(listener); - - events = target._events; - if (events === undefined) { - events = target._events = Object.create(null); - target._eventsCount = 0; - } else { - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (events.newListener !== undefined) { - target.emit('newListener', type, - listener.listener ? listener.listener : listener); - - // Re-assign `events` because a newListener handler could have caused the - // this._events to be assigned to a new object - events = target._events; - } - existing = events[type]; - } - - if (existing === undefined) { - // Optimize the case of one listener. Don't need the extra array object. - existing = events[type] = listener; - ++target._eventsCount; - } else { - if (typeof existing === 'function') { - // Adding the second element, need to change to array. - existing = events[type] = - prepend ? [listener, existing] : [existing, listener]; - // If we've already got an array, just append. - } else if (prepend) { - existing.unshift(listener); - } else { - existing.push(listener); - } - - // Check for listener leak - m = _getMaxListeners(target); - if (m > 0 && existing.length > m && !existing.warned) { - existing.warned = true; - // No error code for this since it is a Warning - // eslint-disable-next-line no-restricted-syntax - var w = new Error('Possible EventEmitter memory leak detected. ' + - existing.length + ' ' + String(type) + ' listeners ' + - 'added. Use emitter.setMaxListeners() to ' + - 'increase limit'); - w.name = 'MaxListenersExceededWarning'; - w.emitter = target; - w.type = type; - w.count = existing.length; - ProcessEmitWarning(w); - } - } - - return target; -} - -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.prependListener = - function prependListener(type, listener) { - return _addListener(this, type, listener, true); - }; - -function onceWrapper() { - if (!this.fired) { - this.target.removeListener(this.type, this.wrapFn); - this.fired = true; - if (arguments.length === 0) - return this.listener.call(this.target); - return this.listener.apply(this.target, arguments); - } -} - -function _onceWrap(target, type, listener) { - var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; - var wrapped = onceWrapper.bind(state); - wrapped.listener = listener; - state.wrapFn = wrapped; - return wrapped; -} - -EventEmitter.prototype.once = function once(type, listener) { - checkListener(listener); - this.on(type, _onceWrap(this, type, listener)); - return this; -}; - -EventEmitter.prototype.prependOnceListener = - function prependOnceListener(type, listener) { - checkListener(listener); - this.prependListener(type, _onceWrap(this, type, listener)); - return this; - }; - -// Emits a 'removeListener' event if and only if the listener was removed. -EventEmitter.prototype.removeListener = - function removeListener(type, listener) { - var list, events, position, i, originalListener; - - checkListener(listener); - - events = this._events; - if (events === undefined) - return this; - - list = events[type]; - if (list === undefined) - return this; - - if (list === listener || list.listener === listener) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else { - delete events[type]; - if (events.removeListener) - this.emit('removeListener', type, list.listener || listener); - } - } else if (typeof list !== 'function') { - position = -1; - - for (i = list.length - 1; i >= 0; i--) { - if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; - position = i; - break; - } - } - - if (position < 0) - return this; - - if (position === 0) - list.shift(); - else { - spliceOne(list, position); - } - - if (list.length === 1) - events[type] = list[0]; - - if (events.removeListener !== undefined) - this.emit('removeListener', type, originalListener || listener); - } - - return this; - }; - -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; - -EventEmitter.prototype.removeAllListeners = - function removeAllListeners(type) { - var listeners, events, i; - - events = this._events; - if (events === undefined) - return this; - - // not listening for removeListener, no need to emit - if (events.removeListener === undefined) { - if (arguments.length === 0) { - this._events = Object.create(null); - this._eventsCount = 0; - } else if (events[type] !== undefined) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else - delete events[type]; - } - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - var keys = Object.keys(events); - var key; - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = Object.create(null); - this._eventsCount = 0; - return this; - } - - listeners = events[type]; - - if (typeof listeners === 'function') { - this.removeListener(type, listeners); - } else if (listeners !== undefined) { - // LIFO order - for (i = listeners.length - 1; i >= 0; i--) { - this.removeListener(type, listeners[i]); - } - } - - return this; - }; - -function _listeners(target, type, unwrap) { - var events = target._events; - - if (events === undefined) - return []; - - var evlistener = events[type]; - if (evlistener === undefined) - return []; - - if (typeof evlistener === 'function') - return unwrap ? [evlistener.listener || evlistener] : [evlistener]; - - return unwrap ? - unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} - -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; - -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; - -EventEmitter.listenerCount = function(emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; - -EventEmitter.prototype.listenerCount = listenerCount; -function listenerCount(type) { - var events = this._events; - - if (events !== undefined) { - var evlistener = events[type]; - - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener !== undefined) { - return evlistener.length; - } - } - - return 0; -} - -EventEmitter.prototype.eventNames = function eventNames() { - return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; -}; - -function arrayClone(arr, n) { - var copy = new Array(n); - for (var i = 0; i < n; ++i) - copy[i] = arr[i]; - return copy; -} - -function spliceOne(list, index) { - for (; index + 1 < list.length; index++) - list[index] = list[index + 1]; - list.pop(); -} - -function unwrapListeners(arr) { - var ret = new Array(arr.length); - for (var i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; - } - return ret; -} - -function once(emitter, name) { - return new Promise(function (resolve, reject) { - function errorListener(err) { - emitter.removeListener(name, resolver); - reject(err); - } - - function resolver() { - if (typeof emitter.removeListener === 'function') { - emitter.removeListener('error', errorListener); - } - resolve([].slice.call(arguments)); - }; - - eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); - if (name !== 'error') { - addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); - } - }); -} - -function addErrorHandlerIfEventEmitter(emitter, handler, flags) { - if (typeof emitter.on === 'function') { - eventTargetAgnosticAddListener(emitter, 'error', handler, flags); - } -} - -function eventTargetAgnosticAddListener(emitter, name, listener, flags) { - if (typeof emitter.on === 'function') { - if (flags.once) { - emitter.once(name, listener); - } else { - emitter.on(name, listener); - } - } else if (typeof emitter.addEventListener === 'function') { - // EventTarget does not have `error` event semantics like Node - // EventEmitters, we do not listen for `error` events here. - emitter.addEventListener(name, function wrapListener(arg) { - // IE does not have builtin `{ once: true }` support so we - // have to do it manually. - if (flags.once) { - emitter.removeEventListener(name, wrapListener); - } - listener(arg); - }); - } else { - throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); - } -} - - -/***/ }), - -/***/ "../../node_modules/evp_bytestokey/index.js": -/*!**************************************************!*\ - !*** ../../node_modules/evp_bytestokey/index.js ***! - \**************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var MD5 = __webpack_require__(/*! md5.js */ "../../node_modules/md5.js/index.js") - -/* eslint-disable camelcase */ -function EVP_BytesToKey (password, salt, keyBits, ivLen) { - if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary') - if (salt) { - if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary') - if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length') - } - - var keyLen = keyBits / 8 - var key = Buffer.alloc(keyLen) - var iv = Buffer.alloc(ivLen || 0) - var tmp = Buffer.alloc(0) - - while (keyLen > 0 || ivLen > 0) { - var hash = new MD5() - hash.update(tmp) - hash.update(password) - if (salt) hash.update(salt) - tmp = hash.digest() - - var used = 0 - - if (keyLen > 0) { - var keyStart = key.length - keyLen - used = Math.min(keyLen, tmp.length) - tmp.copy(key, keyStart, 0, used) - keyLen -= used - } - - if (used < tmp.length && ivLen > 0) { - var ivStart = iv.length - ivLen - var length = Math.min(ivLen, tmp.length - used) - tmp.copy(iv, ivStart, used, used + length) - ivLen -= length - } - } - - tmp.fill(0) - return { key: key, iv: iv } -} - -module.exports = EVP_BytesToKey - - -/***/ }), - -/***/ "../../node_modules/file-saver/dist/FileSaver.min.js": -/*!***********************************************************!*\ - !*** ../../node_modules/file-saver/dist/FileSaver.min.js ***! - \***********************************************************/ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (b), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open("GET",a),d.responseType="blob",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error("could not download file")},d.send()}function d(a){var b=new XMLHttpRequest;b.open("HEAD",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof __webpack_require__.g&&__webpack_require__.g.global===__webpack_require__.g?__webpack_require__.g:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||("object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open("","_blank"),g&&(g.document.title=g.document.body.innerText="downloading..."),"string"==typeof b)return c(b,d,e);var h="application/octet-stream"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\/[\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&"undefined"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g, true&&(module.exports=g)}); - -//# sourceMappingURL=FileSaver.min.js.map - -/***/ }), - -/***/ "../../node_modules/hash-base/index.js": -/*!*********************************************!*\ - !*** ../../node_modules/hash-base/index.js ***! - \*********************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var Transform = (__webpack_require__(/*! stream */ "../../node_modules/stream-browserify/index.js").Transform) -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") - -function throwIfNotStringOrBuffer (val, prefix) { - if (!Buffer.isBuffer(val) && typeof val !== 'string') { - throw new TypeError(prefix + ' must be a string or a buffer') - } -} - -function HashBase (blockSize) { - Transform.call(this) - - this._block = Buffer.allocUnsafe(blockSize) - this._blockSize = blockSize - this._blockOffset = 0 - this._length = [0, 0, 0, 0] - - this._finalized = false -} - -inherits(HashBase, Transform) - -HashBase.prototype._transform = function (chunk, encoding, callback) { - var error = null - try { - this.update(chunk, encoding) - } catch (err) { - error = err - } - - callback(error) -} - -HashBase.prototype._flush = function (callback) { - var error = null - try { - this.push(this.digest()) - } catch (err) { - error = err - } - - callback(error) -} - -HashBase.prototype.update = function (data, encoding) { - throwIfNotStringOrBuffer(data, 'Data') - if (this._finalized) throw new Error('Digest already called') - if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding) - - // consume data - var block = this._block - var offset = 0 - while (this._blockOffset + data.length - offset >= this._blockSize) { - for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++] - this._update() - this._blockOffset = 0 - } - while (offset < data.length) block[this._blockOffset++] = data[offset++] - - // update length - for (var j = 0, carry = data.length * 8; carry > 0; ++j) { - this._length[j] += carry - carry = (this._length[j] / 0x0100000000) | 0 - if (carry > 0) this._length[j] -= 0x0100000000 * carry - } - - return this -} - -HashBase.prototype._update = function () { - throw new Error('_update is not implemented') -} - -HashBase.prototype.digest = function (encoding) { - if (this._finalized) throw new Error('Digest already called') - this._finalized = true - - var digest = this._digest() - if (encoding !== undefined) digest = digest.toString(encoding) - - // reset state - this._block.fill(0) - this._blockOffset = 0 - for (var i = 0; i < 4; ++i) this._length[i] = 0 - - return digest -} - -HashBase.prototype._digest = function () { - throw new Error('_digest is not implemented') -} - -module.exports = HashBase - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash.js": -/*!**********************************************!*\ - !*** ../../node_modules/hash.js/lib/hash.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var hash = exports; - -hash.utils = __webpack_require__(/*! ./hash/utils */ "../../node_modules/hash.js/lib/hash/utils.js"); -hash.common = __webpack_require__(/*! ./hash/common */ "../../node_modules/hash.js/lib/hash/common.js"); -hash.sha = __webpack_require__(/*! ./hash/sha */ "../../node_modules/hash.js/lib/hash/sha.js"); -hash.ripemd = __webpack_require__(/*! ./hash/ripemd */ "../../node_modules/hash.js/lib/hash/ripemd.js"); -hash.hmac = __webpack_require__(/*! ./hash/hmac */ "../../node_modules/hash.js/lib/hash/hmac.js"); - -// Proxy hash functions to the main object -hash.sha1 = hash.sha.sha1; -hash.sha256 = hash.sha.sha256; -hash.sha224 = hash.sha.sha224; -hash.sha384 = hash.sha.sha384; -hash.sha512 = hash.sha.sha512; -hash.ripemd160 = hash.ripemd.ripemd160; - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/common.js": -/*!*****************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/common.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ./utils */ "../../node_modules/hash.js/lib/hash/utils.js"); -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); - -function BlockHash() { - this.pending = null; - this.pendingTotal = 0; - this.blockSize = this.constructor.blockSize; - this.outSize = this.constructor.outSize; - this.hmacStrength = this.constructor.hmacStrength; - this.padLength = this.constructor.padLength / 8; - this.endian = 'big'; - - this._delta8 = this.blockSize / 8; - this._delta32 = this.blockSize / 32; -} -exports.BlockHash = BlockHash; - -BlockHash.prototype.update = function update(msg, enc) { - // Convert message to array, pad it, and join into 32bit blocks - msg = utils.toArray(msg, enc); - if (!this.pending) - this.pending = msg; - else - this.pending = this.pending.concat(msg); - this.pendingTotal += msg.length; - - // Enough data, try updating - if (this.pending.length >= this._delta8) { - msg = this.pending; - - // Process pending data in blocks - var r = msg.length % this._delta8; - this.pending = msg.slice(msg.length - r, msg.length); - if (this.pending.length === 0) - this.pending = null; - - msg = utils.join32(msg, 0, msg.length - r, this.endian); - for (var i = 0; i < msg.length; i += this._delta32) - this._update(msg, i, i + this._delta32); - } - - return this; -}; - -BlockHash.prototype.digest = function digest(enc) { - this.update(this._pad()); - assert(this.pending === null); - - return this._digest(enc); -}; - -BlockHash.prototype._pad = function pad() { - var len = this.pendingTotal; - var bytes = this._delta8; - var k = bytes - ((len + this.padLength) % bytes); - var res = new Array(k + this.padLength); - res[0] = 0x80; - for (var i = 1; i < k; i++) - res[i] = 0; - - // Append length - len <<= 3; - if (this.endian === 'big') { - for (var t = 8; t < this.padLength; t++) - res[i++] = 0; - - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = (len >>> 24) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = len & 0xff; - } else { - res[i++] = len & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 24) & 0xff; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - - for (t = 8; t < this.padLength; t++) - res[i++] = 0; - } - - return res; -}; - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/hmac.js": -/*!***************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/hmac.js ***! - \***************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ./utils */ "../../node_modules/hash.js/lib/hash/utils.js"); -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); - -function Hmac(hash, key, enc) { - if (!(this instanceof Hmac)) - return new Hmac(hash, key, enc); - this.Hash = hash; - this.blockSize = hash.blockSize / 8; - this.outSize = hash.outSize / 8; - this.inner = null; - this.outer = null; - - this._init(utils.toArray(key, enc)); -} -module.exports = Hmac; - -Hmac.prototype._init = function init(key) { - // Shorten key, if needed - if (key.length > this.blockSize) - key = new this.Hash().update(key).digest(); - assert(key.length <= this.blockSize); - - // Add padding to key - for (var i = key.length; i < this.blockSize; i++) - key.push(0); - - for (i = 0; i < key.length; i++) - key[i] ^= 0x36; - this.inner = new this.Hash().update(key); - - // 0x36 ^ 0x5c = 0x6a - for (i = 0; i < key.length; i++) - key[i] ^= 0x6a; - this.outer = new this.Hash().update(key); -}; - -Hmac.prototype.update = function update(msg, enc) { - this.inner.update(msg, enc); - return this; -}; - -Hmac.prototype.digest = function digest(enc) { - this.outer.update(this.inner.digest()); - return this.outer.digest(enc); -}; - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/ripemd.js": -/*!*****************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/ripemd.js ***! - \*****************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ./utils */ "../../node_modules/hash.js/lib/hash/utils.js"); -var common = __webpack_require__(/*! ./common */ "../../node_modules/hash.js/lib/hash/common.js"); - -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_3 = utils.sum32_3; -var sum32_4 = utils.sum32_4; -var BlockHash = common.BlockHash; - -function RIPEMD160() { - if (!(this instanceof RIPEMD160)) - return new RIPEMD160(); - - BlockHash.call(this); - - this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; - this.endian = 'little'; -} -utils.inherits(RIPEMD160, BlockHash); -exports.ripemd160 = RIPEMD160; - -RIPEMD160.blockSize = 512; -RIPEMD160.outSize = 160; -RIPEMD160.hmacStrength = 192; -RIPEMD160.padLength = 64; - -RIPEMD160.prototype._update = function update(msg, start) { - var A = this.h[0]; - var B = this.h[1]; - var C = this.h[2]; - var D = this.h[3]; - var E = this.h[4]; - var Ah = A; - var Bh = B; - var Ch = C; - var Dh = D; - var Eh = E; - for (var j = 0; j < 80; j++) { - var T = sum32( - rotl32( - sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), - s[j]), - E); - A = E; - E = D; - D = rotl32(C, 10); - C = B; - B = T; - T = sum32( - rotl32( - sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), - sh[j]), - Eh); - Ah = Eh; - Eh = Dh; - Dh = rotl32(Ch, 10); - Ch = Bh; - Bh = T; - } - T = sum32_3(this.h[1], C, Dh); - this.h[1] = sum32_3(this.h[2], D, Eh); - this.h[2] = sum32_3(this.h[3], E, Ah); - this.h[3] = sum32_3(this.h[4], A, Bh); - this.h[4] = sum32_3(this.h[0], B, Ch); - this.h[0] = T; -}; - -RIPEMD160.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'little'); - else - return utils.split32(this.h, 'little'); -}; - -function f(j, x, y, z) { - if (j <= 15) - return x ^ y ^ z; - else if (j <= 31) - return (x & y) | ((~x) & z); - else if (j <= 47) - return (x | (~y)) ^ z; - else if (j <= 63) - return (x & z) | (y & (~z)); - else - return x ^ (y | (~z)); -} - -function K(j) { - if (j <= 15) - return 0x00000000; - else if (j <= 31) - return 0x5a827999; - else if (j <= 47) - return 0x6ed9eba1; - else if (j <= 63) - return 0x8f1bbcdc; - else - return 0xa953fd4e; -} - -function Kh(j) { - if (j <= 15) - return 0x50a28be6; - else if (j <= 31) - return 0x5c4dd124; - else if (j <= 47) - return 0x6d703ef3; - else if (j <= 63) - return 0x7a6d76e9; - else - return 0x00000000; -} - -var r = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -]; - -var rh = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -]; - -var s = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -]; - -var sh = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -]; - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/sha.js": -/*!**************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/sha.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -exports.sha1 = __webpack_require__(/*! ./sha/1 */ "../../node_modules/hash.js/lib/hash/sha/1.js"); -exports.sha224 = __webpack_require__(/*! ./sha/224 */ "../../node_modules/hash.js/lib/hash/sha/224.js"); -exports.sha256 = __webpack_require__(/*! ./sha/256 */ "../../node_modules/hash.js/lib/hash/sha/256.js"); -exports.sha384 = __webpack_require__(/*! ./sha/384 */ "../../node_modules/hash.js/lib/hash/sha/384.js"); -exports.sha512 = __webpack_require__(/*! ./sha/512 */ "../../node_modules/hash.js/lib/hash/sha/512.js"); - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/sha/1.js": -/*!****************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/sha/1.js ***! - \****************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); -var common = __webpack_require__(/*! ../common */ "../../node_modules/hash.js/lib/hash/common.js"); -var shaCommon = __webpack_require__(/*! ./common */ "../../node_modules/hash.js/lib/hash/sha/common.js"); - -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_5 = utils.sum32_5; -var ft_1 = shaCommon.ft_1; -var BlockHash = common.BlockHash; - -var sha1_K = [ - 0x5A827999, 0x6ED9EBA1, - 0x8F1BBCDC, 0xCA62C1D6 -]; - -function SHA1() { - if (!(this instanceof SHA1)) - return new SHA1(); - - BlockHash.call(this); - this.h = [ - 0x67452301, 0xefcdab89, 0x98badcfe, - 0x10325476, 0xc3d2e1f0 ]; - this.W = new Array(80); -} - -utils.inherits(SHA1, BlockHash); -module.exports = SHA1; - -SHA1.blockSize = 512; -SHA1.outSize = 160; -SHA1.hmacStrength = 80; -SHA1.padLength = 64; - -SHA1.prototype._update = function _update(msg, start) { - var W = this.W; - - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - - for(; i < W.length; i++) - W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); - - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - - for (i = 0; i < W.length; i++) { - var s = ~~(i / 20); - var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); - e = d; - d = c; - c = rotl32(b, 30); - b = a; - a = t; - } - - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); -}; - -SHA1.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/sha/224.js": -/*!******************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/sha/224.js ***! - \******************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); -var SHA256 = __webpack_require__(/*! ./256 */ "../../node_modules/hash.js/lib/hash/sha/256.js"); - -function SHA224() { - if (!(this instanceof SHA224)) - return new SHA224(); - - SHA256.call(this); - this.h = [ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; -} -utils.inherits(SHA224, SHA256); -module.exports = SHA224; - -SHA224.blockSize = 512; -SHA224.outSize = 224; -SHA224.hmacStrength = 192; -SHA224.padLength = 64; - -SHA224.prototype._digest = function digest(enc) { - // Just truncate output - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 7), 'big'); - else - return utils.split32(this.h.slice(0, 7), 'big'); -}; - - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/sha/256.js": -/*!******************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/sha/256.js ***! - \******************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); -var common = __webpack_require__(/*! ../common */ "../../node_modules/hash.js/lib/hash/common.js"); -var shaCommon = __webpack_require__(/*! ./common */ "../../node_modules/hash.js/lib/hash/sha/common.js"); -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); - -var sum32 = utils.sum32; -var sum32_4 = utils.sum32_4; -var sum32_5 = utils.sum32_5; -var ch32 = shaCommon.ch32; -var maj32 = shaCommon.maj32; -var s0_256 = shaCommon.s0_256; -var s1_256 = shaCommon.s1_256; -var g0_256 = shaCommon.g0_256; -var g1_256 = shaCommon.g1_256; - -var BlockHash = common.BlockHash; - -var sha256_K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -]; - -function SHA256() { - if (!(this instanceof SHA256)) - return new SHA256(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - ]; - this.k = sha256_K; - this.W = new Array(64); -} -utils.inherits(SHA256, BlockHash); -module.exports = SHA256; - -SHA256.blockSize = 512; -SHA256.outSize = 256; -SHA256.hmacStrength = 192; -SHA256.padLength = 64; - -SHA256.prototype._update = function _update(msg, start) { - var W = this.W; - - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - for (; i < W.length; i++) - W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); - - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - var f = this.h[5]; - var g = this.h[6]; - var h = this.h[7]; - - assert(this.k.length === W.length); - for (i = 0; i < W.length; i++) { - var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); - var T2 = sum32(s0_256(a), maj32(a, b, c)); - h = g; - g = f; - f = e; - e = sum32(d, T1); - d = c; - c = b; - b = a; - a = sum32(T1, T2); - } - - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); - this.h[5] = sum32(this.h[5], f); - this.h[6] = sum32(this.h[6], g); - this.h[7] = sum32(this.h[7], h); -}; - -SHA256.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/sha/384.js": -/*!******************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/sha/384.js ***! - \******************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); - -var SHA512 = __webpack_require__(/*! ./512 */ "../../node_modules/hash.js/lib/hash/sha/512.js"); - -function SHA384() { - if (!(this instanceof SHA384)) - return new SHA384(); - - SHA512.call(this); - this.h = [ - 0xcbbb9d5d, 0xc1059ed8, - 0x629a292a, 0x367cd507, - 0x9159015a, 0x3070dd17, - 0x152fecd8, 0xf70e5939, - 0x67332667, 0xffc00b31, - 0x8eb44a87, 0x68581511, - 0xdb0c2e0d, 0x64f98fa7, - 0x47b5481d, 0xbefa4fa4 ]; -} -utils.inherits(SHA384, SHA512); -module.exports = SHA384; - -SHA384.blockSize = 1024; -SHA384.outSize = 384; -SHA384.hmacStrength = 192; -SHA384.padLength = 128; - -SHA384.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 12), 'big'); - else - return utils.split32(this.h.slice(0, 12), 'big'); -}; - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/sha/512.js": -/*!******************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/sha/512.js ***! - \******************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); -var common = __webpack_require__(/*! ../common */ "../../node_modules/hash.js/lib/hash/common.js"); -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); - -var rotr64_hi = utils.rotr64_hi; -var rotr64_lo = utils.rotr64_lo; -var shr64_hi = utils.shr64_hi; -var shr64_lo = utils.shr64_lo; -var sum64 = utils.sum64; -var sum64_hi = utils.sum64_hi; -var sum64_lo = utils.sum64_lo; -var sum64_4_hi = utils.sum64_4_hi; -var sum64_4_lo = utils.sum64_4_lo; -var sum64_5_hi = utils.sum64_5_hi; -var sum64_5_lo = utils.sum64_5_lo; - -var BlockHash = common.BlockHash; - -var sha512_K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; - -function SHA512() { - if (!(this instanceof SHA512)) - return new SHA512(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xf3bcc908, - 0xbb67ae85, 0x84caa73b, - 0x3c6ef372, 0xfe94f82b, - 0xa54ff53a, 0x5f1d36f1, - 0x510e527f, 0xade682d1, - 0x9b05688c, 0x2b3e6c1f, - 0x1f83d9ab, 0xfb41bd6b, - 0x5be0cd19, 0x137e2179 ]; - this.k = sha512_K; - this.W = new Array(160); -} -utils.inherits(SHA512, BlockHash); -module.exports = SHA512; - -SHA512.blockSize = 1024; -SHA512.outSize = 512; -SHA512.hmacStrength = 192; -SHA512.padLength = 128; - -SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { - var W = this.W; - - // 32 x 32bit words - for (var i = 0; i < 32; i++) - W[i] = msg[start + i]; - for (; i < W.length; i += 2) { - var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 - var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); - var c1_hi = W[i - 14]; // i - 7 - var c1_lo = W[i - 13]; - var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 - var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); - var c3_hi = W[i - 32]; // i - 16 - var c3_lo = W[i - 31]; - - W[i] = sum64_4_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - W[i + 1] = sum64_4_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - } -}; - -SHA512.prototype._update = function _update(msg, start) { - this._prepareBlock(msg, start); - - var W = this.W; - - var ah = this.h[0]; - var al = this.h[1]; - var bh = this.h[2]; - var bl = this.h[3]; - var ch = this.h[4]; - var cl = this.h[5]; - var dh = this.h[6]; - var dl = this.h[7]; - var eh = this.h[8]; - var el = this.h[9]; - var fh = this.h[10]; - var fl = this.h[11]; - var gh = this.h[12]; - var gl = this.h[13]; - var hh = this.h[14]; - var hl = this.h[15]; - - assert(this.k.length === W.length); - for (var i = 0; i < W.length; i += 2) { - var c0_hi = hh; - var c0_lo = hl; - var c1_hi = s1_512_hi(eh, el); - var c1_lo = s1_512_lo(eh, el); - var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); - var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); - var c3_hi = this.k[i]; - var c3_lo = this.k[i + 1]; - var c4_hi = W[i]; - var c4_lo = W[i + 1]; - - var T1_hi = sum64_5_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - var T1_lo = sum64_5_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - - c0_hi = s0_512_hi(ah, al); - c0_lo = s0_512_lo(ah, al); - c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); - c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); - - var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); - var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); - - hh = gh; - hl = gl; - - gh = fh; - gl = fl; - - fh = eh; - fl = el; - - eh = sum64_hi(dh, dl, T1_hi, T1_lo); - el = sum64_lo(dl, dl, T1_hi, T1_lo); - - dh = ch; - dl = cl; - - ch = bh; - cl = bl; - - bh = ah; - bl = al; - - ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); - al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); - } - - sum64(this.h, 0, ah, al); - sum64(this.h, 2, bh, bl); - sum64(this.h, 4, ch, cl); - sum64(this.h, 6, dh, dl); - sum64(this.h, 8, eh, el); - sum64(this.h, 10, fh, fl); - sum64(this.h, 12, gh, gl); - sum64(this.h, 14, hh, hl); -}; - -SHA512.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -function ch64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ ((~xh) & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function ch64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ ((~xl) & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 28); - var c1_hi = rotr64_hi(xl, xh, 2); // 34 - var c2_hi = rotr64_hi(xl, xh, 7); // 39 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 28); - var c1_lo = rotr64_lo(xl, xh, 2); // 34 - var c2_lo = rotr64_lo(xl, xh, 7); // 39 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 14); - var c1_hi = rotr64_hi(xh, xl, 18); - var c2_hi = rotr64_hi(xl, xh, 9); // 41 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 14); - var c1_lo = rotr64_lo(xh, xl, 18); - var c2_lo = rotr64_lo(xl, xh, 9); // 41 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 1); - var c1_hi = rotr64_hi(xh, xl, 8); - var c2_hi = shr64_hi(xh, xl, 7); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 1); - var c1_lo = rotr64_lo(xh, xl, 8); - var c2_lo = shr64_lo(xh, xl, 7); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 19); - var c1_hi = rotr64_hi(xl, xh, 29); // 61 - var c2_hi = shr64_hi(xh, xl, 6); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 19); - var c1_lo = rotr64_lo(xl, xh, 29); // 61 - var c2_lo = shr64_lo(xh, xl, 6); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/sha/common.js": -/*!*********************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/sha/common.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); -var rotr32 = utils.rotr32; - -function ft_1(s, x, y, z) { - if (s === 0) - return ch32(x, y, z); - if (s === 1 || s === 3) - return p32(x, y, z); - if (s === 2) - return maj32(x, y, z); -} -exports.ft_1 = ft_1; - -function ch32(x, y, z) { - return (x & y) ^ ((~x) & z); -} -exports.ch32 = ch32; - -function maj32(x, y, z) { - return (x & y) ^ (x & z) ^ (y & z); -} -exports.maj32 = maj32; - -function p32(x, y, z) { - return x ^ y ^ z; -} -exports.p32 = p32; - -function s0_256(x) { - return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); -} -exports.s0_256 = s0_256; - -function s1_256(x) { - return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); -} -exports.s1_256 = s1_256; - -function g0_256(x) { - return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); -} -exports.g0_256 = g0_256; - -function g1_256(x) { - return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); -} -exports.g1_256 = g1_256; - - -/***/ }), - -/***/ "../../node_modules/hash.js/lib/hash/utils.js": -/*!****************************************************!*\ - !*** ../../node_modules/hash.js/lib/hash/utils.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -exports.inherits = inherits; - -function isSurrogatePair(msg, i) { - if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { - return false; - } - if (i < 0 || i + 1 >= msg.length) { - return false; - } - return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; -} - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg === 'string') { - if (!enc) { - // Inspired by stringToUtf8ByteArray() in closure-library by Google - // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 - // Apache License 2.0 - // https://github.com/google/closure-library/blob/master/LICENSE - var p = 0; - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - if (c < 128) { - res[p++] = c; - } else if (c < 2048) { - res[p++] = (c >> 6) | 192; - res[p++] = (c & 63) | 128; - } else if (isSurrogatePair(msg, i)) { - c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); - res[p++] = (c >> 18) | 240; - res[p++] = ((c >> 12) & 63) | 128; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } else { - res[p++] = (c >> 12) | 224; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } - } - } else if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } - } else { - for (i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - } - return res; -} -exports.toArray = toArray; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -exports.toHex = toHex; - -function htonl(w) { - var res = (w >>> 24) | - ((w >>> 8) & 0xff00) | - ((w << 8) & 0xff0000) | - ((w & 0xff) << 24); - return res >>> 0; -} -exports.htonl = htonl; - -function toHex32(msg, endian) { - var res = ''; - for (var i = 0; i < msg.length; i++) { - var w = msg[i]; - if (endian === 'little') - w = htonl(w); - res += zero8(w.toString(16)); - } - return res; -} -exports.toHex32 = toHex32; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -exports.zero2 = zero2; - -function zero8(word) { - if (word.length === 7) - return '0' + word; - else if (word.length === 6) - return '00' + word; - else if (word.length === 5) - return '000' + word; - else if (word.length === 4) - return '0000' + word; - else if (word.length === 3) - return '00000' + word; - else if (word.length === 2) - return '000000' + word; - else if (word.length === 1) - return '0000000' + word; - else - return word; -} -exports.zero8 = zero8; - -function join32(msg, start, end, endian) { - var len = end - start; - assert(len % 4 === 0); - var res = new Array(len / 4); - for (var i = 0, k = start; i < res.length; i++, k += 4) { - var w; - if (endian === 'big') - w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; - else - w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; - res[i] = w >>> 0; - } - return res; -} -exports.join32 = join32; - -function split32(msg, endian) { - var res = new Array(msg.length * 4); - for (var i = 0, k = 0; i < msg.length; i++, k += 4) { - var m = msg[i]; - if (endian === 'big') { - res[k] = m >>> 24; - res[k + 1] = (m >>> 16) & 0xff; - res[k + 2] = (m >>> 8) & 0xff; - res[k + 3] = m & 0xff; - } else { - res[k + 3] = m >>> 24; - res[k + 2] = (m >>> 16) & 0xff; - res[k + 1] = (m >>> 8) & 0xff; - res[k] = m & 0xff; - } - } - return res; -} -exports.split32 = split32; - -function rotr32(w, b) { - return (w >>> b) | (w << (32 - b)); -} -exports.rotr32 = rotr32; - -function rotl32(w, b) { - return (w << b) | (w >>> (32 - b)); -} -exports.rotl32 = rotl32; - -function sum32(a, b) { - return (a + b) >>> 0; -} -exports.sum32 = sum32; - -function sum32_3(a, b, c) { - return (a + b + c) >>> 0; -} -exports.sum32_3 = sum32_3; - -function sum32_4(a, b, c, d) { - return (a + b + c + d) >>> 0; -} -exports.sum32_4 = sum32_4; - -function sum32_5(a, b, c, d, e) { - return (a + b + c + d + e) >>> 0; -} -exports.sum32_5 = sum32_5; - -function sum64(buf, pos, ah, al) { - var bh = buf[pos]; - var bl = buf[pos + 1]; - - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - buf[pos] = hi >>> 0; - buf[pos + 1] = lo; -} -exports.sum64 = sum64; - -function sum64_hi(ah, al, bh, bl) { - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - return hi >>> 0; -} -exports.sum64_hi = sum64_hi; - -function sum64_lo(ah, al, bh, bl) { - var lo = al + bl; - return lo >>> 0; -} -exports.sum64_lo = sum64_lo; - -function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - - var hi = ah + bh + ch + dh + carry; - return hi >>> 0; -} -exports.sum64_4_hi = sum64_4_hi; - -function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { - var lo = al + bl + cl + dl; - return lo >>> 0; -} -exports.sum64_4_lo = sum64_4_lo; - -function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - lo = (lo + el) >>> 0; - carry += lo < el ? 1 : 0; - - var hi = ah + bh + ch + dh + eh + carry; - return hi >>> 0; -} -exports.sum64_5_hi = sum64_5_hi; - -function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var lo = al + bl + cl + dl + el; - - return lo >>> 0; -} -exports.sum64_5_lo = sum64_5_lo; - -function rotr64_hi(ah, al, num) { - var r = (al << (32 - num)) | (ah >>> num); - return r >>> 0; -} -exports.rotr64_hi = rotr64_hi; - -function rotr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.rotr64_lo = rotr64_lo; - -function shr64_hi(ah, al, num) { - return ah >>> num; -} -exports.shr64_hi = shr64_hi; - -function shr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.shr64_lo = shr64_lo; - - -/***/ }), - -/***/ "../../node_modules/hmac-drbg/lib/hmac-drbg.js": -/*!*****************************************************!*\ - !*** ../../node_modules/hmac-drbg/lib/hmac-drbg.js ***! - \*****************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var hash = __webpack_require__(/*! hash.js */ "../../node_modules/hash.js/lib/hash.js"); -var utils = __webpack_require__(/*! minimalistic-crypto-utils */ "../../node_modules/minimalistic-crypto-utils/lib/utils.js"); -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); - -function HmacDRBG(options) { - if (!(this instanceof HmacDRBG)) - return new HmacDRBG(options); - this.hash = options.hash; - this.predResist = !!options.predResist; - - this.outLen = this.hash.outSize; - this.minEntropy = options.minEntropy || this.hash.hmacStrength; - - this._reseed = null; - this.reseedInterval = null; - this.K = null; - this.V = null; - - var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); - var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); - var pers = utils.toArray(options.pers, options.persEnc || 'hex'); - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - this._init(entropy, nonce, pers); -} -module.exports = HmacDRBG; - -HmacDRBG.prototype._init = function init(entropy, nonce, pers) { - var seed = entropy.concat(nonce).concat(pers); - - this.K = new Array(this.outLen / 8); - this.V = new Array(this.outLen / 8); - for (var i = 0; i < this.V.length; i++) { - this.K[i] = 0x00; - this.V[i] = 0x01; - } - - this._update(seed); - this._reseed = 1; - this.reseedInterval = 0x1000000000000; // 2^48 -}; - -HmacDRBG.prototype._hmac = function hmac() { - return new hash.hmac(this.hash, this.K); -}; - -HmacDRBG.prototype._update = function update(seed) { - var kmac = this._hmac() - .update(this.V) - .update([ 0x00 ]); - if (seed) - kmac = kmac.update(seed); - this.K = kmac.digest(); - this.V = this._hmac().update(this.V).digest(); - if (!seed) - return; - - this.K = this._hmac() - .update(this.V) - .update([ 0x01 ]) - .update(seed) - .digest(); - this.V = this._hmac().update(this.V).digest(); -}; - -HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { - // Optional entropy enc - if (typeof entropyEnc !== 'string') { - addEnc = add; - add = entropyEnc; - entropyEnc = null; - } - - entropy = utils.toArray(entropy, entropyEnc); - add = utils.toArray(add, addEnc); - - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - - this._update(entropy.concat(add || [])); - this._reseed = 1; -}; - -HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { - if (this._reseed > this.reseedInterval) - throw new Error('Reseed is required'); - - // Optional encoding - if (typeof enc !== 'string') { - addEnc = add; - add = enc; - enc = null; - } - - // Optional additional data - if (add) { - add = utils.toArray(add, addEnc || 'hex'); - this._update(add); - } - - var temp = []; - while (temp.length < len) { - this.V = this._hmac().update(this.V).digest(); - temp = temp.concat(this.V); - } - - var res = temp.slice(0, len); - this._update(add); - this._reseed++; - return utils.encode(res, enc); -}; - - -/***/ }), - -/***/ "../../node_modules/ieee754/index.js": -/*!*******************************************!*\ - !*** ../../node_modules/ieee754/index.js ***! - \*******************************************/ -/***/ ((__unused_webpack_module, exports) => { - -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = ((value * c) - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - - -/***/ }), - -/***/ "../../node_modules/inherits/inherits_browser.js": -/*!*******************************************************!*\ - !*** ../../node_modules/inherits/inherits_browser.js ***! - \*******************************************************/ -/***/ ((module) => { - -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }) - } - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } - } -} - - -/***/ }), - -/***/ "../../node_modules/md5.js/index.js": -/*!******************************************!*\ - !*** ../../node_modules/md5.js/index.js ***! - \******************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var HashBase = __webpack_require__(/*! hash-base */ "../../node_modules/hash-base/index.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var ARRAY16 = new Array(16) - -function MD5 () { - HashBase.call(this, 64) - - // state - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 -} - -inherits(MD5, HashBase) - -MD5.prototype._update = function () { - var M = ARRAY16 - for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4) - - var a = this._a - var b = this._b - var c = this._c - var d = this._d - - a = fnF(a, b, c, d, M[0], 0xd76aa478, 7) - d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12) - c = fnF(c, d, a, b, M[2], 0x242070db, 17) - b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22) - a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7) - d = fnF(d, a, b, c, M[5], 0x4787c62a, 12) - c = fnF(c, d, a, b, M[6], 0xa8304613, 17) - b = fnF(b, c, d, a, M[7], 0xfd469501, 22) - a = fnF(a, b, c, d, M[8], 0x698098d8, 7) - d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12) - c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17) - b = fnF(b, c, d, a, M[11], 0x895cd7be, 22) - a = fnF(a, b, c, d, M[12], 0x6b901122, 7) - d = fnF(d, a, b, c, M[13], 0xfd987193, 12) - c = fnF(c, d, a, b, M[14], 0xa679438e, 17) - b = fnF(b, c, d, a, M[15], 0x49b40821, 22) - - a = fnG(a, b, c, d, M[1], 0xf61e2562, 5) - d = fnG(d, a, b, c, M[6], 0xc040b340, 9) - c = fnG(c, d, a, b, M[11], 0x265e5a51, 14) - b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20) - a = fnG(a, b, c, d, M[5], 0xd62f105d, 5) - d = fnG(d, a, b, c, M[10], 0x02441453, 9) - c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14) - b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20) - a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5) - d = fnG(d, a, b, c, M[14], 0xc33707d6, 9) - c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14) - b = fnG(b, c, d, a, M[8], 0x455a14ed, 20) - a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5) - d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9) - c = fnG(c, d, a, b, M[7], 0x676f02d9, 14) - b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20) - - a = fnH(a, b, c, d, M[5], 0xfffa3942, 4) - d = fnH(d, a, b, c, M[8], 0x8771f681, 11) - c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16) - b = fnH(b, c, d, a, M[14], 0xfde5380c, 23) - a = fnH(a, b, c, d, M[1], 0xa4beea44, 4) - d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11) - c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16) - b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23) - a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4) - d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11) - c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16) - b = fnH(b, c, d, a, M[6], 0x04881d05, 23) - a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4) - d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11) - c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16) - b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23) - - a = fnI(a, b, c, d, M[0], 0xf4292244, 6) - d = fnI(d, a, b, c, M[7], 0x432aff97, 10) - c = fnI(c, d, a, b, M[14], 0xab9423a7, 15) - b = fnI(b, c, d, a, M[5], 0xfc93a039, 21) - a = fnI(a, b, c, d, M[12], 0x655b59c3, 6) - d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10) - c = fnI(c, d, a, b, M[10], 0xffeff47d, 15) - b = fnI(b, c, d, a, M[1], 0x85845dd1, 21) - a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6) - d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10) - c = fnI(c, d, a, b, M[6], 0xa3014314, 15) - b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21) - a = fnI(a, b, c, d, M[4], 0xf7537e82, 6) - d = fnI(d, a, b, c, M[11], 0xbd3af235, 10) - c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15) - b = fnI(b, c, d, a, M[9], 0xeb86d391, 21) - - this._a = (this._a + a) | 0 - this._b = (this._b + b) | 0 - this._c = (this._c + c) | 0 - this._d = (this._d + d) | 0 -} - -MD5.prototype._digest = function () { - // create padding and handle blocks - this._block[this._blockOffset++] = 0x80 - if (this._blockOffset > 56) { - this._block.fill(0, this._blockOffset, 64) - this._update() - this._blockOffset = 0 - } - - this._block.fill(0, this._blockOffset, 56) - this._block.writeUInt32LE(this._length[0], 56) - this._block.writeUInt32LE(this._length[1], 60) - this._update() - - // produce result - var buffer = Buffer.allocUnsafe(16) - buffer.writeInt32LE(this._a, 0) - buffer.writeInt32LE(this._b, 4) - buffer.writeInt32LE(this._c, 8) - buffer.writeInt32LE(this._d, 12) - return buffer -} - -function rotl (x, n) { - return (x << n) | (x >>> (32 - n)) -} - -function fnF (a, b, c, d, m, k, s) { - return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0 -} - -function fnG (a, b, c, d, m, k, s) { - return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0 -} - -function fnH (a, b, c, d, m, k, s) { - return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0 -} - -function fnI (a, b, c, d, m, k, s) { - return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0 -} - -module.exports = MD5 - - -/***/ }), - -/***/ "../../node_modules/miller-rabin/lib/mr.js": -/*!*************************************************!*\ - !*** ../../node_modules/miller-rabin/lib/mr.js ***! - \*************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var bn = __webpack_require__(/*! bn.js */ "../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js"); -var brorand = __webpack_require__(/*! brorand */ "../../node_modules/brorand/index.js"); - -function MillerRabin(rand) { - this.rand = rand || new brorand.Rand(); -} -module.exports = MillerRabin; - -MillerRabin.create = function create(rand) { - return new MillerRabin(rand); -}; - -MillerRabin.prototype._randbelow = function _randbelow(n) { - var len = n.bitLength(); - var min_bytes = Math.ceil(len / 8); - - // Generage random bytes until a number less than n is found. - // This ensures that 0..n-1 have an equal probability of being selected. - do - var a = new bn(this.rand.generate(min_bytes)); - while (a.cmp(n) >= 0); - - return a; -}; - -MillerRabin.prototype._randrange = function _randrange(start, stop) { - // Generate a random number greater than or equal to start and less than stop. - var size = stop.sub(start); - return start.add(this._randbelow(size)); -}; - -MillerRabin.prototype.test = function test(n, k, cb) { - var len = n.bitLength(); - var red = bn.mont(n); - var rone = new bn(1).toRed(red); - - if (!k) - k = Math.max(1, (len / 48) | 0); - - // Find d and s, (n - 1) = (2 ^ s) * d; - var n1 = n.subn(1); - for (var s = 0; !n1.testn(s); s++) {} - var d = n.shrn(s); - - var rn1 = n1.toRed(red); - - var prime = true; - for (; k > 0; k--) { - var a = this._randrange(new bn(2), n1); - if (cb) - cb(a); - - var x = a.toRed(red).redPow(d); - if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) - continue; - - for (var i = 1; i < s; i++) { - x = x.redSqr(); - - if (x.cmp(rone) === 0) - return false; - if (x.cmp(rn1) === 0) - break; - } - - if (i === s) - return false; - } - - return prime; -}; - -MillerRabin.prototype.getDivisor = function getDivisor(n, k) { - var len = n.bitLength(); - var red = bn.mont(n); - var rone = new bn(1).toRed(red); - - if (!k) - k = Math.max(1, (len / 48) | 0); - - // Find d and s, (n - 1) = (2 ^ s) * d; - var n1 = n.subn(1); - for (var s = 0; !n1.testn(s); s++) {} - var d = n.shrn(s); - - var rn1 = n1.toRed(red); - - for (; k > 0; k--) { - var a = this._randrange(new bn(2), n1); - - var g = n.gcd(a); - if (g.cmpn(1) !== 0) - return g; - - var x = a.toRed(red).redPow(d); - if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) - continue; - - for (var i = 1; i < s; i++) { - x = x.redSqr(); - - if (x.cmp(rone) === 0) - return x.fromRed().subn(1).gcd(n); - if (x.cmp(rn1) === 0) - break; - } - - if (i === s) { - x = x.redSqr(); - return x.fromRed().subn(1).gcd(n); - } - } - - return false; -}; - - -/***/ }), - -/***/ "../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js": -/*!********************************************************************!*\ - !*** ../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js ***! - \********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* module decorator */ module = __webpack_require__.nmd(module); -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { - Buffer = window.Buffer; - } else { - Buffer = (__webpack_require__(/*! buffer */ "?4c42").Buffer); - } - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - this.negative = 1; - } - - if (start < number.length) { - if (base === 16) { - this._parseHex(number, start, endian); - } else { - this._parseBase(number, base, start); - if (endian === 'le') { - this._initArray(this.toArray(), base, endian); - } - } - } - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex4Bits (string, index) { - var c = string.charCodeAt(index); - // 'A' - 'F' - if (c >= 65 && c <= 70) { - return c - 55; - // 'a' - 'f' - } else if (c >= 97 && c <= 102) { - return c - 87; - // '0' - '9' - } else { - return (c - 48) & 0xf; - } - } - - function parseHexByte (string, lowerBound, index) { - var r = parseHex4Bits(string, index); - if (index - 1 >= lowerBound) { - r |= parseHex4Bits(string, index - 1) << 4; - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start, endian) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - // 24-bits chunks - var off = 0; - var j = 0; - - var w; - if (endian === 'be') { - for (i = number.length - 1; i >= start; i -= 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } else { - var parseLength = number.length - start; - for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } - - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - this.strip(); - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - if (r.strip !== undefined) { - // r is BN v4 instance - r.strip(); - } else { - // r is BN v5 instance - r._strip(); - } - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})( false || module, this); - - -/***/ }), - -/***/ "../../node_modules/minimalistic-assert/index.js": -/*!*******************************************************!*\ - !*** ../../node_modules/minimalistic-assert/index.js ***! - \*******************************************************/ -/***/ ((module) => { - -module.exports = assert; - -function assert(val, msg) { - if (!val) - throw new Error(msg || 'Assertion failed'); -} - -assert.equal = function assertEqual(l, r, msg) { - if (l != r) - throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); -}; - - -/***/ }), - -/***/ "../../node_modules/minimalistic-crypto-utils/lib/utils.js": -/*!*****************************************************************!*\ - !*** ../../node_modules/minimalistic-crypto-utils/lib/utils.js ***! - \*****************************************************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - - -var utils = exports; - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg !== 'string') { - for (var i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - return res; - } - if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (var i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } else { - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - var hi = c >> 8; - var lo = c & 0xff; - if (hi) - res.push(hi, lo); - else - res.push(lo); - } - } - return res; -} -utils.toArray = toArray; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -utils.zero2 = zero2; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -utils.toHex = toHex; - -utils.encode = function encode(arr, enc) { - if (enc === 'hex') - return toHex(arr); - else - return arr; -}; - - -/***/ }), - -/***/ "../../node_modules/os/index.js": -/*!**************************************!*\ - !*** ../../node_modules/os/index.js ***! - \**************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -module.exports = __webpack_require__(/*! os */ "../../node_modules/os/index.js") - - -/***/ }), - -/***/ "../../node_modules/parse-asn1/asn1.js": -/*!*********************************************!*\ - !*** ../../node_modules/parse-asn1/asn1.js ***! - \*********************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js -// Fedor, you are amazing. - - - -var asn1 = __webpack_require__(/*! asn1.js */ "../../node_modules/asn1.js/lib/asn1.js"); - -exports.certificate = __webpack_require__(/*! ./certificate */ "../../node_modules/parse-asn1/certificate.js"); - -var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { - this.seq().obj( - this.key('version')['int'](), - this.key('modulus')['int'](), - this.key('publicExponent')['int'](), - this.key('privateExponent')['int'](), - this.key('prime1')['int'](), - this.key('prime2')['int'](), - this.key('exponent1')['int'](), - this.key('exponent2')['int'](), - this.key('coefficient')['int']() - ); -}); -exports.RSAPrivateKey = RSAPrivateKey; - -var RSAPublicKey = asn1.define('RSAPublicKey', function () { - this.seq().obj( - this.key('modulus')['int'](), - this.key('publicExponent')['int']() - ); -}); -exports.RSAPublicKey = RSAPublicKey; - -var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { - this.seq().obj( - this.key('algorithm').objid(), - this.key('none').null_().optional(), - this.key('curve').objid().optional(), - this.key('params').seq().obj( - this.key('p')['int'](), - this.key('q')['int'](), - this.key('g')['int']() - ).optional() - ); -}); - -var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { - this.seq().obj( - this.key('algorithm').use(AlgorithmIdentifier), - this.key('subjectPublicKey').bitstr() - ); -}); -exports.PublicKey = PublicKey; - -var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { - this.seq().obj( - this.key('version')['int'](), - this.key('algorithm').use(AlgorithmIdentifier), - this.key('subjectPrivateKey').octstr() - ); -}); -exports.PrivateKey = PrivateKeyInfo; -var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { - this.seq().obj( - this.key('algorithm').seq().obj( - this.key('id').objid(), - this.key('decrypt').seq().obj( - this.key('kde').seq().obj( - this.key('id').objid(), - this.key('kdeparams').seq().obj( - this.key('salt').octstr(), - this.key('iters')['int']() - ) - ), - this.key('cipher').seq().obj( - this.key('algo').objid(), - this.key('iv').octstr() - ) - ) - ), - this.key('subjectPrivateKey').octstr() - ); -}); - -exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo; - -var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { - this.seq().obj( - this.key('version')['int'](), - this.key('p')['int'](), - this.key('q')['int'](), - this.key('g')['int'](), - this.key('pub_key')['int'](), - this.key('priv_key')['int']() - ); -}); -exports.DSAPrivateKey = DSAPrivateKey; - -exports.DSAparam = asn1.define('DSAparam', function () { - this['int'](); -}); - -var ECParameters = asn1.define('ECParameters', function () { - this.choice({ - namedCurve: this.objid() - }); -}); - -var ECPrivateKey = asn1.define('ECPrivateKey', function () { - this.seq().obj( - this.key('version')['int'](), - this.key('privateKey').octstr(), - this.key('parameters').optional().explicit(0).use(ECParameters), - this.key('publicKey').optional().explicit(1).bitstr() - ); -}); -exports.ECPrivateKey = ECPrivateKey; - -exports.signature = asn1.define('signature', function () { - this.seq().obj( - this.key('r')['int'](), - this.key('s')['int']() - ); -}); - - -/***/ }), - -/***/ "../../node_modules/parse-asn1/certificate.js": -/*!****************************************************!*\ - !*** ../../node_modules/parse-asn1/certificate.js ***! - \****************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js -// thanks to @Rantanen - - - -var asn = __webpack_require__(/*! asn1.js */ "../../node_modules/asn1.js/lib/asn1.js"); - -var Time = asn.define('Time', function () { - this.choice({ - utcTime: this.utctime(), - generalTime: this.gentime() - }); -}); - -var AttributeTypeValue = asn.define('AttributeTypeValue', function () { - this.seq().obj( - this.key('type').objid(), - this.key('value').any() - ); -}); - -var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { - this.seq().obj( - this.key('algorithm').objid(), - this.key('parameters').optional(), - this.key('curve').objid().optional() - ); -}); - -var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { - this.seq().obj( - this.key('algorithm').use(AlgorithmIdentifier), - this.key('subjectPublicKey').bitstr() - ); -}); - -var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { - this.setof(AttributeTypeValue); -}); - -var RDNSequence = asn.define('RDNSequence', function () { - this.seqof(RelativeDistinguishedName); -}); - -var Name = asn.define('Name', function () { - this.choice({ - rdnSequence: this.use(RDNSequence) - }); -}); - -var Validity = asn.define('Validity', function () { - this.seq().obj( - this.key('notBefore').use(Time), - this.key('notAfter').use(Time) - ); -}); - -var Extension = asn.define('Extension', function () { - this.seq().obj( - this.key('extnID').objid(), - this.key('critical').bool().def(false), - this.key('extnValue').octstr() - ); -}); - -var TBSCertificate = asn.define('TBSCertificate', function () { - this.seq().obj( - this.key('version').explicit(0)['int']().optional(), - this.key('serialNumber')['int'](), - this.key('signature').use(AlgorithmIdentifier), - this.key('issuer').use(Name), - this.key('validity').use(Validity), - this.key('subject').use(Name), - this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), - this.key('issuerUniqueID').implicit(1).bitstr().optional(), - this.key('subjectUniqueID').implicit(2).bitstr().optional(), - this.key('extensions').explicit(3).seqof(Extension).optional() - ); -}); - -var X509Certificate = asn.define('X509Certificate', function () { - this.seq().obj( - this.key('tbsCertificate').use(TBSCertificate), - this.key('signatureAlgorithm').use(AlgorithmIdentifier), - this.key('signatureValue').bitstr() - ); -}); - -module.exports = X509Certificate; - - -/***/ }), - -/***/ "../../node_modules/parse-asn1/fixProc.js": -/*!************************************************!*\ - !*** ../../node_modules/parse-asn1/fixProc.js ***! - \************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -// adapted from https://github.com/apatil/pemstrip -var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m; -var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m; -var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m; -var evp = __webpack_require__(/*! evp_bytestokey */ "../../node_modules/evp_bytestokey/index.js"); -var ciphers = __webpack_require__(/*! browserify-aes */ "../../node_modules/browserify-aes/browser.js"); -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); -module.exports = function (okey, password) { - var key = okey.toString(); - var match = key.match(findProc); - var decrypted; - if (!match) { - var match2 = key.match(fullRegex); - decrypted = Buffer.from(match2[2].replace(/[\r\n]/g, ''), 'base64'); - } else { - var suite = 'aes' + match[1]; - var iv = Buffer.from(match[2], 'hex'); - var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64'); - var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key; - var out = []; - var cipher = ciphers.createDecipheriv(suite, cipherKey, iv); - out.push(cipher.update(cipherText)); - out.push(cipher['final']()); - decrypted = Buffer.concat(out); - } - var tag = key.match(startRegex)[1]; - return { - tag: tag, - data: decrypted - }; -}; - - -/***/ }), - -/***/ "../../node_modules/parse-asn1/index.js": -/*!**********************************************!*\ - !*** ../../node_modules/parse-asn1/index.js ***! - \**********************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var asn1 = __webpack_require__(/*! ./asn1 */ "../../node_modules/parse-asn1/asn1.js"); -var aesid = __webpack_require__(/*! ./aesid.json */ "../../node_modules/parse-asn1/aesid.json"); -var fixProc = __webpack_require__(/*! ./fixProc */ "../../node_modules/parse-asn1/fixProc.js"); -var ciphers = __webpack_require__(/*! browserify-aes */ "../../node_modules/browserify-aes/browser.js"); -var compat = __webpack_require__(/*! pbkdf2 */ "../../node_modules/pbkdf2/browser.js"); -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); - -function decrypt(data, password) { - var salt = data.algorithm.decrypt.kde.kdeparams.salt; - var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10); - var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]; - var iv = data.algorithm.decrypt.cipher.iv; - var cipherText = data.subjectPrivateKey; - var keylen = parseInt(algo.split('-')[1], 10) / 8; - var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1'); - var cipher = ciphers.createDecipheriv(algo, key, iv); - var out = []; - out.push(cipher.update(cipherText)); - out.push(cipher['final']()); - return Buffer.concat(out); -} - -function parseKeys(buffer) { - var password; - if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { - password = buffer.passphrase; - buffer = buffer.key; - } - if (typeof buffer === 'string') { - buffer = Buffer.from(buffer); - } - - var stripped = fixProc(buffer, password); - - var type = stripped.tag; - var data = stripped.data; - var subtype, ndata; - switch (type) { - case 'CERTIFICATE': - ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo; - // falls through - case 'PUBLIC KEY': - if (!ndata) { - ndata = asn1.PublicKey.decode(data, 'der'); - } - subtype = ndata.algorithm.algorithm.join('.'); - switch (subtype) { - case '1.2.840.113549.1.1.1': - return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der'); - case '1.2.840.10045.2.1': - ndata.subjectPrivateKey = ndata.subjectPublicKey; - return { - type: 'ec', - data: ndata - }; - case '1.2.840.10040.4.1': - ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der'); - return { - type: 'dsa', - data: ndata.algorithm.params - }; - default: throw new Error('unknown key id ' + subtype); - } - // throw new Error('unknown key type ' + type) - case 'ENCRYPTED PRIVATE KEY': - data = asn1.EncryptedPrivateKey.decode(data, 'der'); - data = decrypt(data, password); - // falls through - case 'PRIVATE KEY': - ndata = asn1.PrivateKey.decode(data, 'der'); - subtype = ndata.algorithm.algorithm.join('.'); - switch (subtype) { - case '1.2.840.113549.1.1.1': - return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der'); - case '1.2.840.10045.2.1': - return { - curve: ndata.algorithm.curve, - privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey - }; - case '1.2.840.10040.4.1': - ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der'); - return { - type: 'dsa', - params: ndata.algorithm.params - }; - default: throw new Error('unknown key id ' + subtype); - } - // throw new Error('unknown key type ' + type) - case 'RSA PUBLIC KEY': - return asn1.RSAPublicKey.decode(data, 'der'); - case 'RSA PRIVATE KEY': - return asn1.RSAPrivateKey.decode(data, 'der'); - case 'DSA PRIVATE KEY': - return { - type: 'dsa', - params: asn1.DSAPrivateKey.decode(data, 'der') - }; - case 'EC PRIVATE KEY': - data = asn1.ECPrivateKey.decode(data, 'der'); - return { - curve: data.parameters.value, - privateKey: data.privateKey - }; - default: throw new Error('unknown key type ' + type); - } -} -parseKeys.signature = asn1.signature; - -module.exports = parseKeys; - - -/***/ }), - -/***/ "../../node_modules/path/path.js": -/*!***************************************!*\ - !*** ../../node_modules/path/path.js ***! - \***************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - - -var isWindows = process.platform === 'win32'; -var util = __webpack_require__(/*! util */ "../../node_modules/util/util.js"); - - -// resolves . and .. elements in a path array with directory names there -// must be no slashes or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - var res = []; - for (var i = 0; i < parts.length; i++) { - var p = parts[i]; - - // ignore empty parts - if (!p || p === '.') - continue; - - if (p === '..') { - if (res.length && res[res.length - 1] !== '..') { - res.pop(); - } else if (allowAboveRoot) { - res.push('..'); - } - } else { - res.push(p); - } - } - - return res; -} - -// returns an array with empty elements removed from either end of the input -// array or the original array if no elements need to be removed -function trimArray(arr) { - var lastIndex = arr.length - 1; - var start = 0; - for (; start <= lastIndex; start++) { - if (arr[start]) - break; - } - - var end = lastIndex; - for (; end >= 0; end--) { - if (arr[end]) - break; - } - - if (start === 0 && end === lastIndex) - return arr; - if (start > end) - return []; - return arr.slice(start, end + 1); -} - -// Regex to split a windows path into three parts: [*, device, slash, -// tail] windows-only -var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - -// Regex to split the tail part of the above into [*, dir, basename, ext] -var splitTailRe = - /^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/; - -var win32 = {}; - -// Function to split a filename into [root, dir, basename, ext] -function win32SplitPath(filename) { - // Separate device+slash from tail - var result = splitDeviceRe.exec(filename), - device = (result[1] || '') + (result[2] || ''), - tail = result[3] || ''; - // Split the tail into dir, basename and extension - var result2 = splitTailRe.exec(tail), - dir = result2[1], - basename = result2[2], - ext = result2[3]; - return [device, dir, basename, ext]; -} - -function win32StatPath(path) { - var result = splitDeviceRe.exec(path), - device = result[1] || '', - isUnc = !!device && device[1] !== ':'; - return { - device: device, - isUnc: isUnc, - isAbsolute: isUnc || !!result[2], // UNC paths are always absolute - tail: result[3] - }; -} - -function normalizeUNCRoot(device) { - return '\\\\' + device.replace(/^[\\\/]+/, '').replace(/[\\\/]+/g, '\\'); -} - -// path.resolve([from ...], to) -win32.resolve = function() { - var resolvedDevice = '', - resolvedTail = '', - resolvedAbsolute = false; - - for (var i = arguments.length - 1; i >= -1; i--) { - var path; - if (i >= 0) { - path = arguments[i]; - } else if (!resolvedDevice) { - path = process.cwd(); - } else { - // Windows has the concept of drive-specific current working - // directories. If we've resolved a drive letter but not yet an - // absolute path, get cwd for that drive. We're sure the device is not - // an unc path at this points, because unc paths are always absolute. - path = process.env['=' + resolvedDevice]; - // Verify that a drive-local cwd was found and that it actually points - // to our drive. If not, default to the drive's root. - if (!path || path.substr(0, 3).toLowerCase() !== - resolvedDevice.toLowerCase() + '\\') { - path = resolvedDevice + '\\'; - } - } - - // Skip empty and invalid entries - if (!util.isString(path)) { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - - var result = win32StatPath(path), - device = result.device, - isUnc = result.isUnc, - isAbsolute = result.isAbsolute, - tail = result.tail; - - if (device && - resolvedDevice && - device.toLowerCase() !== resolvedDevice.toLowerCase()) { - // This path points to another device so it is not applicable - continue; - } - - if (!resolvedDevice) { - resolvedDevice = device; - } - if (!resolvedAbsolute) { - resolvedTail = tail + '\\' + resolvedTail; - resolvedAbsolute = isAbsolute; - } - - if (resolvedDevice && resolvedAbsolute) { - break; - } - } - - // Convert slashes to backslashes when `resolvedDevice` points to an UNC - // root. Also squash multiple slashes into a single one where appropriate. - if (isUnc) { - resolvedDevice = normalizeUNCRoot(resolvedDevice); - } - - // At this point the path should be resolved to a full absolute path, - // but handle relative paths to be safe (might happen when process.cwd() - // fails) - - // Normalize the tail path - resolvedTail = normalizeArray(resolvedTail.split(/[\\\/]+/), - !resolvedAbsolute).join('\\'); - - return (resolvedDevice + (resolvedAbsolute ? '\\' : '') + resolvedTail) || - '.'; -}; - - -win32.normalize = function(path) { - var result = win32StatPath(path), - device = result.device, - isUnc = result.isUnc, - isAbsolute = result.isAbsolute, - tail = result.tail, - trailingSlash = /[\\\/]$/.test(tail); - - // Normalize the tail path - tail = normalizeArray(tail.split(/[\\\/]+/), !isAbsolute).join('\\'); - - if (!tail && !isAbsolute) { - tail = '.'; - } - if (tail && trailingSlash) { - tail += '\\'; - } - - // Convert slashes to backslashes when `device` points to an UNC root. - // Also squash multiple slashes into a single one where appropriate. - if (isUnc) { - device = normalizeUNCRoot(device); - } - - return device + (isAbsolute ? '\\' : '') + tail; -}; - - -win32.isAbsolute = function(path) { - return win32StatPath(path).isAbsolute; -}; - -win32.join = function() { - var paths = []; - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (!util.isString(arg)) { - throw new TypeError('Arguments to path.join must be strings'); - } - if (arg) { - paths.push(arg); - } - } - - var joined = paths.join('\\'); - - // Make sure that the joined path doesn't start with two slashes, because - // normalize() will mistake it for an UNC path then. - // - // This step is skipped when it is very clear that the user actually - // intended to point at an UNC path. This is assumed when the first - // non-empty string arguments starts with exactly two slashes followed by - // at least one more non-slash character. - // - // Note that for normalize() to treat a path as an UNC path it needs to - // have at least 2 components, so we don't filter for that here. - // This means that the user can use join to construct UNC paths from - // a server name and a share name; for example: - // path.join('//server', 'share') -> '\\\\server\\share\') - if (!/^[\\\/]{2}[^\\\/]/.test(paths[0])) { - joined = joined.replace(/^[\\\/]{2,}/, '\\'); - } - - return win32.normalize(joined); -}; - - -// path.relative(from, to) -// it will solve the relative path from 'from' to 'to', for instance: -// from = 'C:\\orandea\\test\\aaa' -// to = 'C:\\orandea\\impl\\bbb' -// The output of the function should be: '..\\..\\impl\\bbb' -win32.relative = function(from, to) { - from = win32.resolve(from); - to = win32.resolve(to); - - // windows is not case sensitive - var lowerFrom = from.toLowerCase(); - var lowerTo = to.toLowerCase(); - - var toParts = trimArray(to.split('\\')); - - var lowerFromParts = trimArray(lowerFrom.split('\\')); - var lowerToParts = trimArray(lowerTo.split('\\')); - - var length = Math.min(lowerFromParts.length, lowerToParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (lowerFromParts[i] !== lowerToParts[i]) { - samePartsLength = i; - break; - } - } - - if (samePartsLength == 0) { - return to; - } - - var outputParts = []; - for (var i = samePartsLength; i < lowerFromParts.length; i++) { - outputParts.push('..'); - } - - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('\\'); -}; - - -win32._makeLong = function(path) { - // Note: this will *probably* throw somewhere. - if (!util.isString(path)) - return path; - - if (!path) { - return ''; - } - - var resolvedPath = win32.resolve(path); - - if (/^[a-zA-Z]\:\\/.test(resolvedPath)) { - // path is local filesystem path, which needs to be converted - // to long UNC path. - return '\\\\?\\' + resolvedPath; - } else if (/^\\\\[^?.]/.test(resolvedPath)) { - // path is network UNC path, which needs to be converted - // to long UNC path. - return '\\\\?\\UNC\\' + resolvedPath.substring(2); - } - - return path; -}; - - -win32.dirname = function(path) { - var result = win32SplitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; - - -win32.basename = function(path, ext) { - var f = win32SplitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -win32.extname = function(path) { - return win32SplitPath(path)[3]; -}; - - -win32.format = function(pathObject) { - if (!util.isObject(pathObject)) { - throw new TypeError( - "Parameter 'pathObject' must be an object, not " + typeof pathObject - ); - } - - var root = pathObject.root || ''; - - if (!util.isString(root)) { - throw new TypeError( - "'pathObject.root' must be a string or undefined, not " + - typeof pathObject.root - ); - } - - var dir = pathObject.dir; - var base = pathObject.base || ''; - if (!dir) { - return base; - } - if (dir[dir.length - 1] === win32.sep) { - return dir + base; - } - return dir + win32.sep + base; -}; - - -win32.parse = function(pathString) { - if (!util.isString(pathString)) { - throw new TypeError( - "Parameter 'pathString' must be a string, not " + typeof pathString - ); - } - var allParts = win32SplitPath(pathString); - if (!allParts || allParts.length !== 4) { - throw new TypeError("Invalid path '" + pathString + "'"); - } - return { - root: allParts[0], - dir: allParts[0] + allParts[1].slice(0, -1), - base: allParts[2], - ext: allParts[3], - name: allParts[2].slice(0, allParts[2].length - allParts[3].length) - }; -}; - - -win32.sep = '\\'; -win32.delimiter = ';'; - - -// Split a filename into [root, dir, basename, ext], unix version -// 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var posix = {}; - - -function posixSplitPath(filename) { - return splitPathRe.exec(filename).slice(1); -} - - -// path.resolve([from ...], to) -// posix version -posix.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; - - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); - - // Skip empty and invalid entries - if (!util.isString(path)) { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path[0] === '/'; - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeArray(resolvedPath.split('/'), - !resolvedAbsolute).join('/'); - - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; - -// path.normalize(path) -// posix version -posix.normalize = function(path) { - var isAbsolute = posix.isAbsolute(path), - trailingSlash = path && path[path.length - 1] === '/'; - - // Normalize the path - path = normalizeArray(path.split('/'), !isAbsolute).join('/'); - - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - - return (isAbsolute ? '/' : '') + path; -}; - -// posix version -posix.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; - -// posix version -posix.join = function() { - var path = ''; - for (var i = 0; i < arguments.length; i++) { - var segment = arguments[i]; - if (!util.isString(segment)) { - throw new TypeError('Arguments to path.join must be strings'); - } - if (segment) { - if (!path) { - path += segment; - } else { - path += '/' + segment; - } - } - } - return posix.normalize(path); -}; - - -// path.relative(from, to) -// posix version -posix.relative = function(from, to) { - from = posix.resolve(from).substr(1); - to = posix.resolve(to).substr(1); - - var fromParts = trimArray(from.split('/')); - var toParts = trimArray(to.split('/')); - - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('/'); -}; - - -posix._makeLong = function(path) { - return path; -}; - - -posix.dirname = function(path) { - var result = posixSplitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; - - -posix.basename = function(path, ext) { - var f = posixSplitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -posix.extname = function(path) { - return posixSplitPath(path)[3]; -}; - - -posix.format = function(pathObject) { - if (!util.isObject(pathObject)) { - throw new TypeError( - "Parameter 'pathObject' must be an object, not " + typeof pathObject - ); - } - - var root = pathObject.root || ''; - - if (!util.isString(root)) { - throw new TypeError( - "'pathObject.root' must be a string or undefined, not " + - typeof pathObject.root - ); - } - - var dir = pathObject.dir ? pathObject.dir + posix.sep : ''; - var base = pathObject.base || ''; - return dir + base; -}; - - -posix.parse = function(pathString) { - if (!util.isString(pathString)) { - throw new TypeError( - "Parameter 'pathString' must be a string, not " + typeof pathString - ); - } - var allParts = posixSplitPath(pathString); - if (!allParts || allParts.length !== 4) { - throw new TypeError("Invalid path '" + pathString + "'"); - } - allParts[1] = allParts[1] || ''; - allParts[2] = allParts[2] || ''; - allParts[3] = allParts[3] || ''; - - return { - root: allParts[0], - dir: allParts[0] + allParts[1].slice(0, -1), - base: allParts[2], - ext: allParts[3], - name: allParts[2].slice(0, allParts[2].length - allParts[3].length) - }; -}; - - -posix.sep = '/'; -posix.delimiter = ':'; - - -if (isWindows) - module.exports = win32; -else /* posix */ - module.exports = posix; - -module.exports.posix = posix; -module.exports.win32 = win32; - - -/***/ }), - -/***/ "../../node_modules/pbkdf2/browser.js": -/*!********************************************!*\ - !*** ../../node_modules/pbkdf2/browser.js ***! - \********************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -exports.pbkdf2 = __webpack_require__(/*! ./lib/async */ "../../node_modules/pbkdf2/lib/async.js") -exports.pbkdf2Sync = __webpack_require__(/*! ./lib/sync */ "../../node_modules/pbkdf2/lib/sync-browser.js") - - -/***/ }), - -/***/ "../../node_modules/pbkdf2/lib/async.js": -/*!**********************************************!*\ - !*** ../../node_modules/pbkdf2/lib/async.js ***! - \**********************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var checkParameters = __webpack_require__(/*! ./precondition */ "../../node_modules/pbkdf2/lib/precondition.js") -var defaultEncoding = __webpack_require__(/*! ./default-encoding */ "../../node_modules/pbkdf2/lib/default-encoding.js") -var sync = __webpack_require__(/*! ./sync */ "../../node_modules/pbkdf2/lib/sync-browser.js") -var toBuffer = __webpack_require__(/*! ./to-buffer */ "../../node_modules/pbkdf2/lib/to-buffer.js") - -var ZERO_BUF -var subtle = __webpack_require__.g.crypto && __webpack_require__.g.crypto.subtle -var toBrowser = { - sha: 'SHA-1', - 'sha-1': 'SHA-1', - sha1: 'SHA-1', - sha256: 'SHA-256', - 'sha-256': 'SHA-256', - sha384: 'SHA-384', - 'sha-384': 'SHA-384', - 'sha-512': 'SHA-512', - sha512: 'SHA-512' -} -var checks = [] -function checkNative (algo) { - if (__webpack_require__.g.process && !__webpack_require__.g.process.browser) { - return Promise.resolve(false) - } - if (!subtle || !subtle.importKey || !subtle.deriveBits) { - return Promise.resolve(false) - } - if (checks[algo] !== undefined) { - return checks[algo] - } - ZERO_BUF = ZERO_BUF || Buffer.alloc(8) - var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo) - .then(function () { - return true - }).catch(function () { - return false - }) - checks[algo] = prom - return prom -} -var nextTick -function getNextTick () { - if (nextTick) { - return nextTick - } - if (__webpack_require__.g.process && __webpack_require__.g.process.nextTick) { - nextTick = __webpack_require__.g.process.nextTick - } else if (__webpack_require__.g.queueMicrotask) { - nextTick = __webpack_require__.g.queueMicrotask - } else if (__webpack_require__.g.setImmediate) { - nextTick = __webpack_require__.g.setImmediate - } else { - nextTick = __webpack_require__.g.setTimeout - } - return nextTick -} -function browserPbkdf2 (password, salt, iterations, length, algo) { - return subtle.importKey( - 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits'] - ).then(function (key) { - return subtle.deriveBits({ - name: 'PBKDF2', - salt: salt, - iterations: iterations, - hash: { - name: algo - } - }, key, length << 3) - }).then(function (res) { - return Buffer.from(res) - }) -} - -function resolvePromise (promise, callback) { - promise.then(function (out) { - getNextTick()(function () { - callback(null, out) - }) - }, function (e) { - getNextTick()(function () { - callback(e) - }) - }) -} -module.exports = function (password, salt, iterations, keylen, digest, callback) { - if (typeof digest === 'function') { - callback = digest - digest = undefined - } - - digest = digest || 'sha1' - var algo = toBrowser[digest.toLowerCase()] - - if (!algo || typeof __webpack_require__.g.Promise !== 'function') { - getNextTick()(function () { - var out - try { - out = sync(password, salt, iterations, keylen, digest) - } catch (e) { - return callback(e) - } - callback(null, out) - }) - return - } - - checkParameters(iterations, keylen) - password = toBuffer(password, defaultEncoding, 'Password') - salt = toBuffer(salt, defaultEncoding, 'Salt') - if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2') - - resolvePromise(checkNative(algo).then(function (resp) { - if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo) - - return sync(password, salt, iterations, keylen, digest) - }), callback) -} - - -/***/ }), - -/***/ "../../node_modules/pbkdf2/lib/default-encoding.js": -/*!*********************************************************!*\ - !*** ../../node_modules/pbkdf2/lib/default-encoding.js ***! - \*********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var defaultEncoding -/* istanbul ignore next */ -if (__webpack_require__.g.process && __webpack_require__.g.process.browser) { - defaultEncoding = 'utf-8' -} else if (__webpack_require__.g.process && __webpack_require__.g.process.version) { - var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10) - - defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary' -} else { - defaultEncoding = 'utf-8' -} -module.exports = defaultEncoding - - -/***/ }), - -/***/ "../../node_modules/pbkdf2/lib/precondition.js": -/*!*****************************************************!*\ - !*** ../../node_modules/pbkdf2/lib/precondition.js ***! - \*****************************************************/ -/***/ ((module) => { - -var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs - -module.exports = function (iterations, keylen) { - if (typeof iterations !== 'number') { - throw new TypeError('Iterations not a number') - } - - if (iterations < 0) { - throw new TypeError('Bad iterations') - } - - if (typeof keylen !== 'number') { - throw new TypeError('Key length not a number') - } - - if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */ - throw new TypeError('Bad key length') - } -} - - -/***/ }), - -/***/ "../../node_modules/pbkdf2/lib/sync-browser.js": -/*!*****************************************************!*\ - !*** ../../node_modules/pbkdf2/lib/sync-browser.js ***! - \*****************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var md5 = __webpack_require__(/*! create-hash/md5 */ "../../node_modules/create-hash/md5.js") -var RIPEMD160 = __webpack_require__(/*! ripemd160 */ "../../node_modules/ripemd160/index.js") -var sha = __webpack_require__(/*! sha.js */ "../../node_modules/sha.js/index.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var checkParameters = __webpack_require__(/*! ./precondition */ "../../node_modules/pbkdf2/lib/precondition.js") -var defaultEncoding = __webpack_require__(/*! ./default-encoding */ "../../node_modules/pbkdf2/lib/default-encoding.js") -var toBuffer = __webpack_require__(/*! ./to-buffer */ "../../node_modules/pbkdf2/lib/to-buffer.js") - -var ZEROS = Buffer.alloc(128) -var sizes = { - md5: 16, - sha1: 20, - sha224: 28, - sha256: 32, - sha384: 48, - sha512: 64, - rmd160: 20, - ripemd160: 20 -} - -function Hmac (alg, key, saltLen) { - var hash = getDigest(alg) - var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 - - if (key.length > blocksize) { - key = hash(key) - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize) - } - - var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]) - var opad = Buffer.allocUnsafe(blocksize + sizes[alg]) - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36 - opad[i] = key[i] ^ 0x5C - } - - var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4) - ipad.copy(ipad1, 0, 0, blocksize) - this.ipad1 = ipad1 - this.ipad2 = ipad - this.opad = opad - this.alg = alg - this.blocksize = blocksize - this.hash = hash - this.size = sizes[alg] -} - -Hmac.prototype.run = function (data, ipad) { - data.copy(ipad, this.blocksize) - var h = this.hash(ipad) - h.copy(this.opad, this.blocksize) - return this.hash(this.opad) -} - -function getDigest (alg) { - function shaFunc (data) { - return sha(alg).update(data).digest() - } - function rmd160Func (data) { - return new RIPEMD160().update(data).digest() - } - - if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func - if (alg === 'md5') return md5 - return shaFunc -} - -function pbkdf2 (password, salt, iterations, keylen, digest) { - checkParameters(iterations, keylen) - password = toBuffer(password, defaultEncoding, 'Password') - salt = toBuffer(salt, defaultEncoding, 'Salt') - - digest = digest || 'sha1' - - var hmac = new Hmac(digest, password, salt.length) - - var DK = Buffer.allocUnsafe(keylen) - var block1 = Buffer.allocUnsafe(salt.length + 4) - salt.copy(block1, 0, 0, salt.length) - - var destPos = 0 - var hLen = sizes[digest] - var l = Math.ceil(keylen / hLen) - - for (var i = 1; i <= l; i++) { - block1.writeUInt32BE(i, salt.length) - - var T = hmac.run(block1, hmac.ipad1) - var U = T - - for (var j = 1; j < iterations; j++) { - U = hmac.run(U, hmac.ipad2) - for (var k = 0; k < hLen; k++) T[k] ^= U[k] - } - - T.copy(DK, destPos) - destPos += hLen - } - - return DK -} - -module.exports = pbkdf2 - - -/***/ }), - -/***/ "../../node_modules/pbkdf2/lib/to-buffer.js": -/*!**************************************************!*\ - !*** ../../node_modules/pbkdf2/lib/to-buffer.js ***! - \**************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -module.exports = function (thing, encoding, name) { - if (Buffer.isBuffer(thing)) { - return thing - } else if (typeof thing === 'string') { - return Buffer.from(thing, encoding) - } else if (ArrayBuffer.isView(thing)) { - return Buffer.from(thing.buffer) - } else { - throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView') - } -} - - -/***/ }), - -/***/ "../../node_modules/process-nextick-args/index.js": -/*!********************************************************!*\ - !*** ../../node_modules/process-nextick-args/index.js ***! - \********************************************************/ -/***/ ((module) => { - -"use strict"; - - -if (typeof process === 'undefined' || - !process.version || - process.version.indexOf('v0.') === 0 || - process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { - module.exports = { nextTick: nextTick }; -} else { - module.exports = process -} - -function nextTick(fn, arg1, arg2, arg3) { - if (typeof fn !== 'function') { - throw new TypeError('"callback" argument must be a function'); - } - var len = arguments.length; - var args, i; - switch (len) { - case 0: - case 1: - return process.nextTick(fn); - case 2: - return process.nextTick(function afterTickOne() { - fn.call(null, arg1); - }); - case 3: - return process.nextTick(function afterTickTwo() { - fn.call(null, arg1, arg2); - }); - case 4: - return process.nextTick(function afterTickThree() { - fn.call(null, arg1, arg2, arg3); - }); - default: - args = new Array(len - 1); - i = 0; - while (i < args.length) { - args[i++] = arguments[i]; - } - return process.nextTick(function afterTick() { - fn.apply(null, args); - }); - } -} - - - -/***/ }), - -/***/ "../../node_modules/public-encrypt/browser.js": -/*!****************************************************!*\ - !*** ../../node_modules/public-encrypt/browser.js ***! - \****************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -exports.publicEncrypt = __webpack_require__(/*! ./publicEncrypt */ "../../node_modules/public-encrypt/publicEncrypt.js") -exports.privateDecrypt = __webpack_require__(/*! ./privateDecrypt */ "../../node_modules/public-encrypt/privateDecrypt.js") - -exports.privateEncrypt = function privateEncrypt (key, buf) { - return exports.publicEncrypt(key, buf, true) -} - -exports.publicDecrypt = function publicDecrypt (key, buf) { - return exports.privateDecrypt(key, buf, true) -} - - -/***/ }), - -/***/ "../../node_modules/public-encrypt/mgf.js": -/*!************************************************!*\ - !*** ../../node_modules/public-encrypt/mgf.js ***! - \************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var createHash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -module.exports = function (seed, len) { - var t = Buffer.alloc(0) - var i = 0 - var c - while (t.length < len) { - c = i2ops(i++) - t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]) - } - return t.slice(0, len) -} - -function i2ops (c) { - var out = Buffer.allocUnsafe(4) - out.writeUInt32BE(c, 0) - return out -} - - -/***/ }), - -/***/ "../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js": -/*!**********************************************************************!*\ - !*** ../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js ***! - \**********************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* module decorator */ module = __webpack_require__.nmd(module); -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { - Buffer = window.Buffer; - } else { - Buffer = (__webpack_require__(/*! buffer */ "?c86f").Buffer); - } - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - this.negative = 1; - } - - if (start < number.length) { - if (base === 16) { - this._parseHex(number, start, endian); - } else { - this._parseBase(number, base, start); - if (endian === 'le') { - this._initArray(this.toArray(), base, endian); - } - } - } - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex4Bits (string, index) { - var c = string.charCodeAt(index); - // 'A' - 'F' - if (c >= 65 && c <= 70) { - return c - 55; - // 'a' - 'f' - } else if (c >= 97 && c <= 102) { - return c - 87; - // '0' - '9' - } else { - return (c - 48) & 0xf; - } - } - - function parseHexByte (string, lowerBound, index) { - var r = parseHex4Bits(string, index); - if (index - 1 >= lowerBound) { - r |= parseHex4Bits(string, index - 1) << 4; - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start, endian) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - // 24-bits chunks - var off = 0; - var j = 0; - - var w; - if (endian === 'be') { - for (i = number.length - 1; i >= start; i -= 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } else { - var parseLength = number.length - start; - for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } - - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - this.strip(); - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - if (r.strip !== undefined) { - // r is BN v4 instance - r.strip(); - } else { - // r is BN v5 instance - r._strip(); - } - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})( false || module, this); - - -/***/ }), - -/***/ "../../node_modules/public-encrypt/privateDecrypt.js": -/*!***********************************************************!*\ - !*** ../../node_modules/public-encrypt/privateDecrypt.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var parseKeys = __webpack_require__(/*! parse-asn1 */ "../../node_modules/parse-asn1/index.js") -var mgf = __webpack_require__(/*! ./mgf */ "../../node_modules/public-encrypt/mgf.js") -var xor = __webpack_require__(/*! ./xor */ "../../node_modules/public-encrypt/xor.js") -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js") -var crt = __webpack_require__(/*! browserify-rsa */ "../../node_modules/browserify-rsa/index.js") -var createHash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js") -var withPublic = __webpack_require__(/*! ./withPublic */ "../../node_modules/public-encrypt/withPublic.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -module.exports = function privateDecrypt (privateKey, enc, reverse) { - var padding - if (privateKey.padding) { - padding = privateKey.padding - } else if (reverse) { - padding = 1 - } else { - padding = 4 - } - - var key = parseKeys(privateKey) - var k = key.modulus.byteLength() - if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { - throw new Error('decryption error') - } - var msg - if (reverse) { - msg = withPublic(new BN(enc), key) - } else { - msg = crt(enc, key) - } - var zBuffer = Buffer.alloc(k - msg.length) - msg = Buffer.concat([zBuffer, msg], k) - if (padding === 4) { - return oaep(key, msg) - } else if (padding === 1) { - return pkcs1(key, msg, reverse) - } else if (padding === 3) { - return msg - } else { - throw new Error('unknown padding') - } -} - -function oaep (key, msg) { - var k = key.modulus.byteLength() - var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() - var hLen = iHash.length - if (msg[0] !== 0) { - throw new Error('decryption error') - } - var maskedSeed = msg.slice(1, hLen + 1) - var maskedDb = msg.slice(hLen + 1) - var seed = xor(maskedSeed, mgf(maskedDb, hLen)) - var db = xor(maskedDb, mgf(seed, k - hLen - 1)) - if (compare(iHash, db.slice(0, hLen))) { - throw new Error('decryption error') - } - var i = hLen - while (db[i] === 0) { - i++ - } - if (db[i++] !== 1) { - throw new Error('decryption error') - } - return db.slice(i) -} - -function pkcs1 (key, msg, reverse) { - var p1 = msg.slice(0, 2) - var i = 2 - var status = 0 - while (msg[i++] !== 0) { - if (i >= msg.length) { - status++ - break - } - } - var ps = msg.slice(2, i - 1) - - if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) { - status++ - } - if (ps.length < 8) { - status++ - } - if (status) { - throw new Error('decryption error') - } - return msg.slice(i) -} -function compare (a, b) { - a = Buffer.from(a) - b = Buffer.from(b) - var dif = 0 - var len = a.length - if (a.length !== b.length) { - dif++ - len = Math.min(a.length, b.length) - } - var i = -1 - while (++i < len) { - dif += (a[i] ^ b[i]) - } - return dif -} - - -/***/ }), - -/***/ "../../node_modules/public-encrypt/publicEncrypt.js": -/*!**********************************************************!*\ - !*** ../../node_modules/public-encrypt/publicEncrypt.js ***! - \**********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var parseKeys = __webpack_require__(/*! parse-asn1 */ "../../node_modules/parse-asn1/index.js") -var randomBytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js") -var createHash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js") -var mgf = __webpack_require__(/*! ./mgf */ "../../node_modules/public-encrypt/mgf.js") -var xor = __webpack_require__(/*! ./xor */ "../../node_modules/public-encrypt/xor.js") -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js") -var withPublic = __webpack_require__(/*! ./withPublic */ "../../node_modules/public-encrypt/withPublic.js") -var crt = __webpack_require__(/*! browserify-rsa */ "../../node_modules/browserify-rsa/index.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -module.exports = function publicEncrypt (publicKey, msg, reverse) { - var padding - if (publicKey.padding) { - padding = publicKey.padding - } else if (reverse) { - padding = 1 - } else { - padding = 4 - } - var key = parseKeys(publicKey) - var paddedMsg - if (padding === 4) { - paddedMsg = oaep(key, msg) - } else if (padding === 1) { - paddedMsg = pkcs1(key, msg, reverse) - } else if (padding === 3) { - paddedMsg = new BN(msg) - if (paddedMsg.cmp(key.modulus) >= 0) { - throw new Error('data too long for modulus') - } - } else { - throw new Error('unknown padding') - } - if (reverse) { - return crt(paddedMsg, key) - } else { - return withPublic(paddedMsg, key) - } -} - -function oaep (key, msg) { - var k = key.modulus.byteLength() - var mLen = msg.length - var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() - var hLen = iHash.length - var hLen2 = 2 * hLen - if (mLen > k - hLen2 - 2) { - throw new Error('message too long') - } - var ps = Buffer.alloc(k - mLen - hLen2 - 2) - var dblen = k - hLen - 1 - var seed = randomBytes(hLen) - var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)) - var maskedSeed = xor(seed, mgf(maskedDb, hLen)) - return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)) -} -function pkcs1 (key, msg, reverse) { - var mLen = msg.length - var k = key.modulus.byteLength() - if (mLen > k - 11) { - throw new Error('message too long') - } - var ps - if (reverse) { - ps = Buffer.alloc(k - mLen - 3, 0xff) - } else { - ps = nonZero(k - mLen - 3) - } - return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)) -} -function nonZero (len) { - var out = Buffer.allocUnsafe(len) - var i = 0 - var cache = randomBytes(len * 2) - var cur = 0 - var num - while (i < len) { - if (cur === cache.length) { - cache = randomBytes(len * 2) - cur = 0 - } - num = cache[cur++] - if (num) { - out[i++] = num - } - } - return out -} - - -/***/ }), - -/***/ "../../node_modules/public-encrypt/withPublic.js": -/*!*******************************************************!*\ - !*** ../../node_modules/public-encrypt/withPublic.js ***! - \*******************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var BN = __webpack_require__(/*! bn.js */ "../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -function withPublic (paddedMsg, key) { - return Buffer.from(paddedMsg - .toRed(BN.mont(key.modulus)) - .redPow(new BN(key.publicExponent)) - .fromRed() - .toArray()) -} - -module.exports = withPublic - - -/***/ }), - -/***/ "../../node_modules/public-encrypt/xor.js": -/*!************************************************!*\ - !*** ../../node_modules/public-encrypt/xor.js ***! - \************************************************/ -/***/ ((module) => { - -module.exports = function xor (a, b) { - var len = a.length - var i = -1 - while (++i < len) { - a[i] ^= b[i] - } - return a -} - - -/***/ }), - -/***/ "../../node_modules/randombytes/browser.js": -/*!*************************************************!*\ - !*** ../../node_modules/randombytes/browser.js ***! - \*************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -// limit of Crypto.getRandomValues() -// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues -var MAX_BYTES = 65536 - -// Node supports requesting up to this number of bytes -// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 -var MAX_UINT32 = 4294967295 - -function oldBrowser () { - throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11') -} - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) -var crypto = __webpack_require__.g.crypto || __webpack_require__.g.msCrypto - -if (crypto && crypto.getRandomValues) { - module.exports = randomBytes -} else { - module.exports = oldBrowser -} - -function randomBytes (size, cb) { - // phantomjs needs to throw - if (size > MAX_UINT32) throw new RangeError('requested too many random bytes') - - var bytes = Buffer.allocUnsafe(size) - - if (size > 0) { // getRandomValues fails on IE if size == 0 - if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues - // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues - for (var generated = 0; generated < size; generated += MAX_BYTES) { - // buffer.slice automatically checks if the end is past the end of - // the buffer so we don't have to here - crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)) - } - } else { - crypto.getRandomValues(bytes) - } - } - - if (typeof cb === 'function') { - return process.nextTick(function () { - cb(null, bytes) - }) - } - - return bytes -} - - -/***/ }), - -/***/ "../../node_modules/randomfill/browser.js": -/*!************************************************!*\ - !*** ../../node_modules/randomfill/browser.js ***! - \************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - - -function oldBrowser () { - throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') -} -var safeBuffer = __webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js") -var randombytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js") -var Buffer = safeBuffer.Buffer -var kBufferMaxLength = safeBuffer.kMaxLength -var crypto = __webpack_require__.g.crypto || __webpack_require__.g.msCrypto -var kMaxUint32 = Math.pow(2, 32) - 1 -function assertOffset (offset, length) { - if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare - throw new TypeError('offset must be a number') - } - - if (offset > kMaxUint32 || offset < 0) { - throw new TypeError('offset must be a uint32') - } - - if (offset > kBufferMaxLength || offset > length) { - throw new RangeError('offset out of range') - } -} - -function assertSize (size, offset, length) { - if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare - throw new TypeError('size must be a number') - } - - if (size > kMaxUint32 || size < 0) { - throw new TypeError('size must be a uint32') - } - - if (size + offset > length || size > kBufferMaxLength) { - throw new RangeError('buffer too small') - } -} -if ((crypto && crypto.getRandomValues) || !process.browser) { - exports.randomFill = randomFill - exports.randomFillSync = randomFillSync -} else { - exports.randomFill = oldBrowser - exports.randomFillSync = oldBrowser -} -function randomFill (buf, offset, size, cb) { - if (!Buffer.isBuffer(buf) && !(buf instanceof __webpack_require__.g.Uint8Array)) { - throw new TypeError('"buf" argument must be a Buffer or Uint8Array') - } - - if (typeof offset === 'function') { - cb = offset - offset = 0 - size = buf.length - } else if (typeof size === 'function') { - cb = size - size = buf.length - offset - } else if (typeof cb !== 'function') { - throw new TypeError('"cb" argument must be a function') - } - assertOffset(offset, buf.length) - assertSize(size, offset, buf.length) - return actualFill(buf, offset, size, cb) -} - -function actualFill (buf, offset, size, cb) { - if (process.browser) { - var ourBuf = buf.buffer - var uint = new Uint8Array(ourBuf, offset, size) - crypto.getRandomValues(uint) - if (cb) { - process.nextTick(function () { - cb(null, buf) - }) - return - } - return buf - } - if (cb) { - randombytes(size, function (err, bytes) { - if (err) { - return cb(err) - } - bytes.copy(buf, offset) - cb(null, buf) - }) - return - } - var bytes = randombytes(size) - bytes.copy(buf, offset) - return buf -} -function randomFillSync (buf, offset, size) { - if (typeof offset === 'undefined') { - offset = 0 - } - if (!Buffer.isBuffer(buf) && !(buf instanceof __webpack_require__.g.Uint8Array)) { - throw new TypeError('"buf" argument must be a Buffer or Uint8Array') - } - - assertOffset(offset, buf.length) - - if (size === undefined) size = buf.length - offset - - assertSize(size, offset, buf.length) - - return actualFill(buf, offset, size) -} - - -/***/ }), - -/***/ "../../node_modules/readable-stream/errors-browser.js": -/*!************************************************************!*\ - !*** ../../node_modules/readable-stream/errors-browser.js ***! - \************************************************************/ -/***/ ((module) => { - -"use strict"; - - -function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } - -var codes = {}; - -function createErrorType(code, message, Base) { - if (!Base) { - Base = Error; - } - - function getMessage(arg1, arg2, arg3) { - if (typeof message === 'string') { - return message; - } else { - return message(arg1, arg2, arg3); - } - } - - var NodeError = - /*#__PURE__*/ - function (_Base) { - _inheritsLoose(NodeError, _Base); - - function NodeError(arg1, arg2, arg3) { - return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; - } - - return NodeError; - }(Base); - - NodeError.prototype.name = Base.name; - NodeError.prototype.code = code; - codes[code] = NodeError; -} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js - - -function oneOf(expected, thing) { - if (Array.isArray(expected)) { - var len = expected.length; - expected = expected.map(function (i) { - return String(i); - }); - - if (len > 2) { - return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; - } else if (len === 2) { - return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); - } else { - return "of ".concat(thing, " ").concat(expected[0]); - } - } else { - return "of ".concat(thing, " ").concat(String(expected)); - } -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith - - -function startsWith(str, search, pos) { - return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith - - -function endsWith(str, search, this_len) { - if (this_len === undefined || this_len > str.length) { - this_len = str.length; - } - - return str.substring(this_len - search.length, this_len) === search; -} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes - - -function includes(str, search, start) { - if (typeof start !== 'number') { - start = 0; - } - - if (start + search.length > str.length) { - return false; - } else { - return str.indexOf(search, start) !== -1; - } -} - -createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { - return 'The value "' + value + '" is invalid for option "' + name + '"'; -}, TypeError); -createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { - // determiner: 'must be' or 'must not be' - var determiner; - - if (typeof expected === 'string' && startsWith(expected, 'not ')) { - determiner = 'must not be'; - expected = expected.replace(/^not /, ''); - } else { - determiner = 'must be'; - } - - var msg; - - if (endsWith(name, ' argument')) { - // For cases like 'first argument' - msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } else { - var type = includes(name, '.') ? 'property' : 'argument'; - msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); - } - - msg += ". Received type ".concat(typeof actual); - return msg; -}, TypeError); -createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); -createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { - return 'The ' + name + ' method is not implemented'; -}); -createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); -createErrorType('ERR_STREAM_DESTROYED', function (name) { - return 'Cannot call ' + name + ' after a stream was destroyed'; -}); -createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); -createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); -createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); -createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); -createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { - return 'Unknown encoding: ' + arg; -}, TypeError); -createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); -module.exports.codes = codes; - - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/_stream_duplex.js": -/*!****************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/_stream_duplex.js ***! - \****************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - - - -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -}; -/**/ - -module.exports = Duplex; -var Readable = __webpack_require__(/*! ./_stream_readable */ "../../node_modules/readable-stream/lib/_stream_readable.js"); -var Writable = __webpack_require__(/*! ./_stream_writable */ "../../node_modules/readable-stream/lib/_stream_writable.js"); -__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(Duplex, Readable); -{ - // Allow the keys array to be GC'ed. - var keys = objectKeys(Writable.prototype); - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; - } -} -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - Readable.call(this, options); - Writable.call(this, options); - this.allowHalfOpen = true; - if (options) { - if (options.readable === false) this.readable = false; - if (options.writable === false) this.writable = false; - if (options.allowHalfOpen === false) { - this.allowHalfOpen = false; - this.once('end', onend); - } - } -} -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); -Object.defineProperty(Duplex.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); -Object.defineProperty(Duplex.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); - -// the no-half-open enforcer -function onend() { - // If the writable side ended, then we're ok. - if (this._writableState.ended) return; - - // no more data can be written. - // But allow more writes to happen in this tick. - process.nextTick(onEndNT, this); -} -function onEndNT(self) { - self.end(); -} -Object.defineProperty(Duplex.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/_stream_passthrough.js": -/*!*********************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/_stream_passthrough.js ***! - \*********************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - - - -module.exports = PassThrough; -var Transform = __webpack_require__(/*! ./_stream_transform */ "../../node_modules/readable-stream/lib/_stream_transform.js"); -__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(PassThrough, Transform); -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - Transform.call(this, options); -} -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/_stream_readable.js": -/*!******************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/_stream_readable.js ***! - \******************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -module.exports = Readable; - -/**/ -var Duplex; -/**/ - -Readable.ReadableState = ReadableState; - -/**/ -var EE = (__webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter); -var EElistenerCount = function EElistenerCount(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ -var Stream = __webpack_require__(/*! ./internal/streams/stream */ "../../node_modules/readable-stream/lib/internal/streams/stream-browser.js"); -/**/ - -var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); -var OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ -var debugUtil = __webpack_require__(/*! util */ "?983a"); -var debug; -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function debug() {}; -} -/**/ - -var BufferList = __webpack_require__(/*! ./internal/streams/buffer_list */ "../../node_modules/readable-stream/lib/internal/streams/buffer_list.js"); -var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "../../node_modules/readable-stream/lib/internal/streams/destroy.js"); -var _require = __webpack_require__(/*! ./internal/streams/state */ "../../node_modules/readable-stream/lib/internal/streams/state.js"), - getHighWaterMark = _require.getHighWaterMark; -var _require$codes = (__webpack_require__(/*! ../errors */ "../../node_modules/readable-stream/errors-browser.js").codes), - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; - -// Lazy loaded to improve the startup performance. -var StringDecoder; -var createReadableStreamAsyncIterator; -var from; -__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(Readable, Stream); -var errorOrDestroy = destroyImpl.errorOrDestroy; -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); - - // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; -} -function ReadableState(options, stream, isDuplex) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); - - // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - this.paused = true; - - // Should close be emitted on destroy. Defaults to true. - this.emitClose = options.emitClose !== false; - - // Should .destroy() be called after 'end' (and potentially 'finish') - this.autoDestroy = !!options.autoDestroy; - - // has it been destroyed - this.destroyed = false; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) StringDecoder = (__webpack_require__(/*! string_decoder/ */ "../../node_modules/string_decoder/lib/string_decoder.js").StringDecoder); - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} -function Readable(options) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); - if (!(this instanceof Readable)) return new Readable(options); - - // Checking for a Stream.Duplex instance is faster here instead of inside - // the ReadableState constructor, at least with V8 6.5 - var isDuplex = this instanceof Duplex; - this._readableState = new ReadableState(options, this, isDuplex); - - // legacy - this.readable = true; - if (options) { - if (typeof options.read === 'function') this._read = options.read; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } - Stream.call(this); -} -Object.defineProperty(Readable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._readableState === undefined) { - return false; - } - return this._readableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - } -}); -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; -Readable.prototype._destroy = function (err, cb) { - cb(err); -}; - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - debug('readableAddChunk', chunk); - var state = stream._readableState; - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - if (er) { - errorOrDestroy(stream, er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - if (addToFront) { - if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); - } else if (state.ended) { - errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); - } else if (state.destroyed) { - return false; - } else { - state.reading = false; - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - maybeReadMore(stream, state); - } - } - - // We can push more data if we are below the highWaterMark. - // Also, if we have no data yet, we can stand some more bytes. - // This is to work around cases where hwm=0, such as the repl. - return !state.ended && (state.length < state.highWaterMark || state.length === 0); -} -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - state.awaitDrain = 0; - stream.emit('data', chunk); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - if (state.needReadable) emitReadable(stream); - } - maybeReadMore(stream, state); -} -function chunkInvalid(state, chunk) { - var er; - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); - } - return er; -} -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; - -// backwards compatibility. -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = (__webpack_require__(/*! string_decoder/ */ "../../node_modules/string_decoder/lib/string_decoder.js").StringDecoder); - var decoder = new StringDecoder(enc); - this._readableState.decoder = decoder; - // If setEncoding(null), decoder.encoding equals utf8 - this._readableState.encoding = this._readableState.decoder.encoding; - - // Iterate over current buffer to convert already stored Buffers: - var p = this._readableState.buffer.head; - var content = ''; - while (p !== null) { - content += decoder.write(p.data); - p = p.next; - } - this._readableState.buffer.clear(); - if (content !== '') this._readableState.buffer.push(content); - this._readableState.length = content.length; - return this; -}; - -// Don't raise the hwm > 1GB -var MAX_HWM = 0x40000000; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; -} - -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } - // If we're asking for more than the current hwm, then raise the hwm. - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; - // Don't have enough - if (!state.ended) { - state.needReadable = true; - return 0; - } - return state.length; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - if (n !== 0) state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (!state.reading) n = howMuchToRead(nOrig, state); - } - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - if (ret === null) { - state.needReadable = state.length <= state.highWaterMark; - n = 0; - } else { - state.length -= n; - state.awaitDrain = 0; - } - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended) endReadable(this); - } - if (ret !== null) this.emit('data', ret); - return ret; -}; -function onEofChunk(stream, state) { - debug('onEofChunk'); - if (state.ended) return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - if (state.sync) { - // if we are sync, wait until next tick to emit the data. - // Otherwise we risk emitting data in the flow() - // the readable code triggers during a read() call - emitReadable(stream); - } else { - // emit 'readable' now to make sure it gets picked up. - state.needReadable = false; - if (!state.emittedReadable) { - state.emittedReadable = true; - emitReadable_(stream); - } - } -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - debug('emitReadable', state.needReadable, state.emittedReadable); - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - process.nextTick(emitReadable_, stream); - } -} -function emitReadable_(stream) { - var state = stream._readableState; - debug('emitReadable_', state.destroyed, state.length, state.ended); - if (!state.destroyed && (state.length || state.ended)) { - stream.emit('readable'); - state.emittedReadable = false; - } - - // The stream needs another readable event if - // 1. It is not flowing, as the flow mechanism will take - // care of it. - // 2. It is not ended. - // 3. It is below the highWaterMark, so we can schedule - // another readable later. - state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; - flow(stream); -} - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(maybeReadMore_, stream, state); - } -} -function maybeReadMore_(stream, state) { - // Attempt to read more data if we should. - // - // The conditions for reading more data are (one of): - // - Not enough data buffered (state.length < state.highWaterMark). The loop - // is responsible for filling the buffer with enough data if such data - // is available. If highWaterMark is 0 and we are not in the flowing mode - // we should _not_ attempt to buffer any extra data. We'll get more data - // when the stream consumer calls read() instead. - // - No data in the buffer, and the stream is in flowing mode. In this mode - // the loop below is responsible for ensuring read() is called. Failing to - // call read here would abort the flow and there's no other mechanism for - // continuing the flow if the stream consumer has just subscribed to the - // 'data' event. - // - // In addition to the above conditions to keep reading data, the following - // conditions prevent the data from being read: - // - The stream has ended (state.ended). - // - There is already a pending 'read' operation (state.reading). This is a - // case where the the stream has called the implementation defined _read() - // method, but they are processing the call asynchronously and have _not_ - // called push() with new data. In this case we skip performing more - // read()s. The execution ends in this method again after the _read() ends - // up calling push() with more data. - while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { - var len = state.length; - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function (n) { - errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); -}; -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); - dest.on('unpipe', onunpipe); - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - var cleanedUp = false; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - cleanedUp = true; - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - debug('dest.write', ret); - if (ret === false) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', state.awaitDrain); - state.awaitDrain++; - } - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); - } - - // Make sure our error handler is attached before userland ones. - prependListener(dest, 'error', onerror); - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - return dest; -}; -function pipeOnDrain(src) { - return function pipeOnDrainFunctionResult() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { - hasUnpiped: false - }; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - if (!dest) dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, { - hasUnpiped: false - }); - return this; - } - - // try to find the right one. - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - dest.emit('unpipe', this, unpipeInfo); - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - var state = this._readableState; - if (ev === 'data') { - // update readableListening so that resume() may be a no-op - // a few lines down. This is needed to support once('readable'). - state.readableListening = this.listenerCount('readable') > 0; - - // Try start flowing on next tick if stream isn't explicitly paused - if (state.flowing !== false) this.resume(); - } else if (ev === 'readable') { - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.flowing = false; - state.emittedReadable = false; - debug('on readable', state.length, state.reading); - if (state.length) { - emitReadable(this); - } else if (!state.reading) { - process.nextTick(nReadingNextTick, this); - } - } - } - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; -Readable.prototype.removeListener = function (ev, fn) { - var res = Stream.prototype.removeListener.call(this, ev, fn); - if (ev === 'readable') { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - return res; -}; -Readable.prototype.removeAllListeners = function (ev) { - var res = Stream.prototype.removeAllListeners.apply(this, arguments); - if (ev === 'readable' || ev === undefined) { - // We need to check if there is someone still listening to - // readable and reset the state. However this needs to happen - // after readable has been emitted but before I/O (nextTick) to - // support once('readable', fn) cycles. This means that calling - // resume within the same tick will have no - // effect. - process.nextTick(updateReadableListening, this); - } - return res; -}; -function updateReadableListening(self) { - var state = self._readableState; - state.readableListening = self.listenerCount('readable') > 0; - if (state.resumeScheduled && !state.paused) { - // flowing needs to be set to true now, otherwise - // the upcoming resume will not flow. - state.flowing = true; - - // crude way to check if we should resume - } else if (self.listenerCount('data') > 0) { - self.resume(); - } -} -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function () { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - // we flow only if there is no one listening - // for readable, but we still have to call - // resume() - state.flowing = !state.readableListening; - resume(this, state); - } - state.paused = false; - return this; -}; -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(resume_, stream, state); - } -} -function resume_(stream, state) { - debug('resume', state.reading); - if (!state.reading) { - stream.read(0); - } - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - if (this._readableState.flowing !== false) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - this._readableState.paused = true; - return this; -}; -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - while (state.flowing && stream.read() !== null); -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function (stream) { - var _this = this; - var state = this._readableState; - var paused = false; - stream.on('end', function () { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } - _this.push(null); - }); - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - var ret = _this.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function methodWrap(method) { - return function methodWrapReturnFunction() { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } - - // proxy certain important events. - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - this._read = function (n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - return this; -}; -if (typeof Symbol === 'function') { - Readable.prototype[Symbol.asyncIterator] = function () { - if (createReadableStreamAsyncIterator === undefined) { - createReadableStreamAsyncIterator = __webpack_require__(/*! ./internal/streams/async_iterator */ "../../node_modules/readable-stream/lib/internal/streams/async_iterator.js"); - } - return createReadableStreamAsyncIterator(this); - }; -} -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.highWaterMark; - } -}); -Object.defineProperty(Readable.prototype, 'readableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState && this._readableState.buffer; - } -}); -Object.defineProperty(Readable.prototype, 'readableFlowing', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.flowing; - }, - set: function set(state) { - if (this._readableState) { - this._readableState.flowing = state; - } - } -}); - -// exposed for testing purposes only. -Readable._fromList = fromList; -Object.defineProperty(Readable.prototype, 'readableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._readableState.length; - } -}); - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = state.buffer.consume(n, state.decoder); - } - return ret; -} -function endReadable(stream) { - var state = stream._readableState; - debug('endReadable', state.endEmitted); - if (!state.endEmitted) { - state.ended = true; - process.nextTick(endReadableNT, state, stream); - } -} -function endReadableNT(state, stream) { - debug('endReadableNT', state.endEmitted, state.length); - - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the writable side is ready for autoDestroy as well - var wState = stream._writableState; - if (!wState || wState.autoDestroy && wState.finished) { - stream.destroy(); - } - } - } -} -if (typeof Symbol === 'function') { - Readable.from = function (iterable, opts) { - if (from === undefined) { - from = __webpack_require__(/*! ./internal/streams/from */ "../../node_modules/readable-stream/lib/internal/streams/from-browser.js"); - } - return from(Readable, iterable, opts); - }; -} -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/_stream_transform.js": -/*!*******************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/_stream_transform.js ***! - \*******************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - - - -module.exports = Transform; -var _require$codes = (__webpack_require__(/*! ../errors */ "../../node_modules/readable-stream/errors-browser.js").codes), - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, - ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; -var Duplex = __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); -__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(Transform, Duplex); -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - var cb = ts.writecb; - if (cb === null) { - return this.emit('error', new ERR_MULTIPLE_CALLBACK()); - } - ts.writechunk = null; - ts.writecb = null; - if (data != null) - // single equals check for both `null` and `undefined` - this.push(data); - cb(er); - var rs = this._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - Duplex.call(this, options); - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - if (typeof options.flush === 'function') this._flush = options.flush; - } - - // When the writable side finishes, then flush out anything remaining. - this.on('prefinish', prefinish); -} -function prefinish() { - var _this = this; - if (typeof this._flush === 'function' && !this._readableState.destroyed) { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); -}; -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function (n) { - var ts = this._transformState; - if (ts.writechunk !== null && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; -Transform.prototype._destroy = function (err, cb) { - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - }); -}; -function done(stream, er, data) { - if (er) return stream.emit('error', er); - if (data != null) - // single equals check for both `null` and `undefined` - stream.push(data); - - // TODO(BridgeAR): Write a test for these two error cases - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); - if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); - return stream.push(null); -} - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/_stream_writable.js": -/*!******************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/_stream_writable.js ***! - \******************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. - - - -module.exports = Writable; - -/* */ -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} - -// It seems a linked list but it is not -// there will be only 2 of these for each stream -function CorkedRequest(state) { - var _this = this; - this.next = null; - this.entry = null; - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ - -/**/ -var Duplex; -/**/ - -Writable.WritableState = WritableState; - -/**/ -var internalUtil = { - deprecate: __webpack_require__(/*! util-deprecate */ "../../node_modules/util-deprecate/browser.js") -}; -/**/ - -/**/ -var Stream = __webpack_require__(/*! ./internal/streams/stream */ "../../node_modules/readable-stream/lib/internal/streams/stream-browser.js"); -/**/ - -var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); -var OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} -var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "../../node_modules/readable-stream/lib/internal/streams/destroy.js"); -var _require = __webpack_require__(/*! ./internal/streams/state */ "../../node_modules/readable-stream/lib/internal/streams/state.js"), - getHighWaterMark = _require.getHighWaterMark; -var _require$codes = (__webpack_require__(/*! ../errors */ "../../node_modules/readable-stream/errors-browser.js").codes), - ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, - ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, - ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, - ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, - ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, - ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, - ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; -var errorOrDestroy = destroyImpl.errorOrDestroy; -__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(Writable, Stream); -function nop() {} -function WritableState(options, stream, isDuplex) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream, - // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. - if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); - - // if _final has been called - this.finalCalled = false; - - // drain event flag. - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // has it been destroyed - this.destroyed = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function (er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - this.bufferedRequest = null; - this.lastBufferedRequest = null; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; - - // Should close be emitted on destroy. Defaults to true. - this.emitClose = options.emitClose !== false; - - // Should .destroy() be called after 'finish' (and potentially 'end') - this.autoDestroy = !!options.autoDestroy; - - // count buffered requests - this.bufferedRequestCount = 0; - - // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - this.corkedRequestsFree = new CorkedRequest(this); -} -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - while (current) { - out.push(current); - current = current.next; - } - return out; -}; -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function writableStateBufferGetter() { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); - -// Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. -var realHasInstance; -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function value(object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function realHasInstance(object) { - return object instanceof this; - }; -} -function Writable(options) { - Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); - - // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - - // Checking for a Stream.Duplex instance is faster here instead of inside - // the WritableState constructor, at least with V8 6.5 - var isDuplex = this instanceof Duplex; - if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); - this._writableState = new WritableState(options, this, isDuplex); - - // legacy. - this.writable = true; - if (options) { - if (typeof options.write === 'function') this._write = options.write; - if (typeof options.writev === 'function') this._writev = options.writev; - if (typeof options.destroy === 'function') this._destroy = options.destroy; - if (typeof options.final === 'function') this._final = options.final; - } - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function () { - errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); -}; -function writeAfterEnd(stream, cb) { - var er = new ERR_STREAM_WRITE_AFTER_END(); - // TODO: defer error events consistently everywhere, not just the cb - errorOrDestroy(stream, er); - process.nextTick(cb, er); -} - -// Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. -function validChunk(stream, state, chunk, cb) { - var er; - if (chunk === null) { - er = new ERR_STREAM_NULL_VALUES(); - } else if (typeof chunk !== 'string' && !state.objectMode) { - er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); - } - if (er) { - errorOrDestroy(stream, er); - process.nextTick(cb, er); - return false; - } - return true; -} -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - var isBuf = !state.objectMode && _isUint8Array(chunk); - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - if (typeof cb !== 'function') cb = nop; - if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - return ret; -}; -Writable.prototype.cork = function () { - this._writableState.corked++; -}; -Writable.prototype.uncork = function () { - var state = this._writableState; - if (state.corked) { - state.corked--; - if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; -Object.defineProperty(Writable.prototype, 'writableBuffer', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState && this._writableState.getBuffer(); - } -}); -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); - } - return chunk; -} -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.highWaterMark; - } -}); - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } - var len = state.objectMode ? 1 : chunk.length; - state.length += len; - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) state.needDrain = true; - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - return ret; -} -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - process.nextTick(cb, er); - // this can emit finish, and it will always happen - // after error - process.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - errorOrDestroy(stream, er); - // this can emit finish, but finish must - // always follow error - finishMaybe(stream, state); - } -} -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); - onwriteStateUpdate(state); - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state) || stream.destroyed; - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - if (sync) { - process.nextTick(afterWrite, stream, state, finished, cb); - } else { - afterWrite(stream, state, finished, cb); - } - } -} -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - var count = 0; - var allBuffers = true; - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } - buffer.allBuffers = allBuffers; - doWrite(stream, state, true, state.length, buffer, '', holder.finish); - - // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - state.pendingcb++; - state.lastBufferedRequest = null; - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - break; - } - } - if (entry === null) state.lastBufferedRequest = null; - } - state.bufferedRequest = entry; - state.bufferProcessing = false; -} -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); -}; -Writable.prototype._writev = null; -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending) endWritable(this, state, cb); - return this; -}; -Object.defineProperty(Writable.prototype, 'writableLength', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - return this._writableState.length; - } -}); -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; - if (err) { - errorOrDestroy(stream, err); - } - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function' && !state.destroyed) { - state.pendingcb++; - state.finalCalled = true; - process.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } -} -function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - prefinish(stream, state); - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - if (state.autoDestroy) { - // In case of duplex streams we need a way to detect - // if the readable side is ready for autoDestroy as well - var rState = stream._readableState; - if (!rState || rState.autoDestroy && rState.endEmitted) { - stream.destroy(); - } - } - } - } - return need; -} -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) process.nextTick(cb);else stream.once('finish', cb); - } - state.ended = true; - stream.writable = false; -} -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } - - // reuse the free corkReq. - state.corkedRequestsFree.next = corkReq; -} -Object.defineProperty(Writable.prototype, 'destroyed', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function get() { - if (this._writableState === undefined) { - return false; - } - return this._writableState.destroyed; - }, - set: function set(value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._writableState.destroyed = value; - } -}); -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; -Writable.prototype._destroy = function (err, cb) { - cb(err); -}; - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/internal/streams/async_iterator.js": -/*!*********************************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/internal/streams/async_iterator.js ***! - \*********************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var _Object$setPrototypeO; -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -var finished = __webpack_require__(/*! ./end-of-stream */ "../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js"); -var kLastResolve = Symbol('lastResolve'); -var kLastReject = Symbol('lastReject'); -var kError = Symbol('error'); -var kEnded = Symbol('ended'); -var kLastPromise = Symbol('lastPromise'); -var kHandlePromise = Symbol('handlePromise'); -var kStream = Symbol('stream'); -function createIterResult(value, done) { - return { - value: value, - done: done - }; -} -function readAndResolve(iter) { - var resolve = iter[kLastResolve]; - if (resolve !== null) { - var data = iter[kStream].read(); - // we defer if data is null - // we can be expecting either 'end' or - // 'error' - if (data !== null) { - iter[kLastPromise] = null; - iter[kLastResolve] = null; - iter[kLastReject] = null; - resolve(createIterResult(data, false)); - } - } -} -function onReadable(iter) { - // we wait for the next tick, because it might - // emit an error with process.nextTick - process.nextTick(readAndResolve, iter); -} -function wrapForNext(lastPromise, iter) { - return function (resolve, reject) { - lastPromise.then(function () { - if (iter[kEnded]) { - resolve(createIterResult(undefined, true)); - return; - } - iter[kHandlePromise](resolve, reject); - }, reject); - }; -} -var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); -var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { - get stream() { - return this[kStream]; - }, - next: function next() { - var _this = this; - // if we have detected an error in the meanwhile - // reject straight away - var error = this[kError]; - if (error !== null) { - return Promise.reject(error); - } - if (this[kEnded]) { - return Promise.resolve(createIterResult(undefined, true)); - } - if (this[kStream].destroyed) { - // We need to defer via nextTick because if .destroy(err) is - // called, the error will be emitted via nextTick, and - // we cannot guarantee that there is no error lingering around - // waiting to be emitted. - return new Promise(function (resolve, reject) { - process.nextTick(function () { - if (_this[kError]) { - reject(_this[kError]); - } else { - resolve(createIterResult(undefined, true)); - } - }); - }); - } - - // if we have multiple next() calls - // we will wait for the previous Promise to finish - // this logic is optimized to support for await loops, - // where next() is only called once at a time - var lastPromise = this[kLastPromise]; - var promise; - if (lastPromise) { - promise = new Promise(wrapForNext(lastPromise, this)); - } else { - // fast path needed to support multiple this.push() - // without triggering the next() queue - var data = this[kStream].read(); - if (data !== null) { - return Promise.resolve(createIterResult(data, false)); - } - promise = new Promise(this[kHandlePromise]); - } - this[kLastPromise] = promise; - return promise; - } -}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { - return this; -}), _defineProperty(_Object$setPrototypeO, "return", function _return() { - var _this2 = this; - // destroy(err, cb) is a private API - // we can guarantee we have that here, because we control the - // Readable class this is attached to - return new Promise(function (resolve, reject) { - _this2[kStream].destroy(null, function (err) { - if (err) { - reject(err); - return; - } - resolve(createIterResult(undefined, true)); - }); - }); -}), _Object$setPrototypeO), AsyncIteratorPrototype); -var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { - var _Object$create; - var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { - value: stream, - writable: true - }), _defineProperty(_Object$create, kLastResolve, { - value: null, - writable: true - }), _defineProperty(_Object$create, kLastReject, { - value: null, - writable: true - }), _defineProperty(_Object$create, kError, { - value: null, - writable: true - }), _defineProperty(_Object$create, kEnded, { - value: stream._readableState.endEmitted, - writable: true - }), _defineProperty(_Object$create, kHandlePromise, { - value: function value(resolve, reject) { - var data = iterator[kStream].read(); - if (data) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(data, false)); - } else { - iterator[kLastResolve] = resolve; - iterator[kLastReject] = reject; - } - }, - writable: true - }), _Object$create)); - iterator[kLastPromise] = null; - finished(stream, function (err) { - if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { - var reject = iterator[kLastReject]; - // reject if we are waiting for data in the Promise - // returned by next() and store the error - if (reject !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - reject(err); - } - iterator[kError] = err; - return; - } - var resolve = iterator[kLastResolve]; - if (resolve !== null) { - iterator[kLastPromise] = null; - iterator[kLastResolve] = null; - iterator[kLastReject] = null; - resolve(createIterResult(undefined, true)); - } - iterator[kEnded] = true; - }); - stream.on('readable', onReadable.bind(null, iterator)); - return iterator; -}; -module.exports = createReadableStreamAsyncIterator; - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/internal/streams/buffer_list.js": -/*!******************************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/internal/streams/buffer_list.js ***! - \******************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -var _require = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js"), - Buffer = _require.Buffer; -var _require2 = __webpack_require__(/*! util */ "?1dff"), - inspect = _require2.inspect; -var custom = inspect && inspect.custom || 'inspect'; -function copyBuffer(src, target, offset) { - Buffer.prototype.copy.call(src, target, offset); -} -module.exports = /*#__PURE__*/function () { - function BufferList() { - _classCallCheck(this, BufferList); - this.head = null; - this.tail = null; - this.length = 0; - } - _createClass(BufferList, [{ - key: "push", - value: function push(v) { - var entry = { - data: v, - next: null - }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - } - }, { - key: "unshift", - value: function unshift(v) { - var entry = { - data: v, - next: this.head - }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - } - }, { - key: "shift", - value: function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - } - }, { - key: "clear", - value: function clear() { - this.head = this.tail = null; - this.length = 0; - } - }, { - key: "join", - value: function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - while (p = p.next) ret += s + p.data; - return ret; - } - }, { - key: "concat", - value: function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - return ret; - } - - // Consumes a specified amount of bytes or characters from the buffered data. - }, { - key: "consume", - value: function consume(n, hasStrings) { - var ret; - if (n < this.head.data.length) { - // `slice` is the same for buffers and strings. - ret = this.head.data.slice(0, n); - this.head.data = this.head.data.slice(n); - } else if (n === this.head.data.length) { - // First chunk is a perfect match. - ret = this.shift(); - } else { - // Result spans more than one buffer. - ret = hasStrings ? this._getString(n) : this._getBuffer(n); - } - return ret; - } - }, { - key: "first", - value: function first() { - return this.head.data; - } - - // Consumes a specified amount of characters from the buffered data. - }, { - key: "_getString", - value: function _getString(n) { - var p = this.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = str.slice(nb); - } - break; - } - ++c; - } - this.length -= c; - return ret; - } - - // Consumes a specified amount of bytes from the buffered data. - }, { - key: "_getBuffer", - value: function _getBuffer(n) { - var ret = Buffer.allocUnsafe(n); - var p = this.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) this.head = p.next;else this.head = this.tail = null; - } else { - this.head = p; - p.data = buf.slice(nb); - } - break; - } - ++c; - } - this.length -= c; - return ret; - } - - // Make sure the linked list only shows the minimal necessary information. - }, { - key: custom, - value: function value(_, options) { - return inspect(this, _objectSpread(_objectSpread({}, options), {}, { - // Only inspect one level. - depth: 0, - // It should not recurse. - customInspect: false - })); - } - }]); - return BufferList; -}(); - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/internal/streams/destroy.js": -/*!**************************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/internal/streams/destroy.js ***! - \**************************************************************************/ -/***/ ((module) => { - -"use strict"; - - -// undocumented cb() API, needed for core, not for public API -function destroy(err, cb) { - var _this = this; - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err) { - if (!this._writableState) { - process.nextTick(emitErrorNT, this, err); - } else if (!this._writableState.errorEmitted) { - this._writableState.errorEmitted = true; - process.nextTick(emitErrorNT, this, err); - } - } - return this; - } - - // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks - - if (this._readableState) { - this._readableState.destroyed = true; - } - - // if this is a duplex stream mark the writable part as destroyed as well - if (this._writableState) { - this._writableState.destroyed = true; - } - this._destroy(err || null, function (err) { - if (!cb && err) { - if (!_this._writableState) { - process.nextTick(emitErrorAndCloseNT, _this, err); - } else if (!_this._writableState.errorEmitted) { - _this._writableState.errorEmitted = true; - process.nextTick(emitErrorAndCloseNT, _this, err); - } else { - process.nextTick(emitCloseNT, _this); - } - } else if (cb) { - process.nextTick(emitCloseNT, _this); - cb(err); - } else { - process.nextTick(emitCloseNT, _this); - } - }); - return this; -} -function emitErrorAndCloseNT(self, err) { - emitErrorNT(self, err); - emitCloseNT(self); -} -function emitCloseNT(self) { - if (self._writableState && !self._writableState.emitClose) return; - if (self._readableState && !self._readableState.emitClose) return; - self.emit('close'); -} -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finalCalled = false; - this._writableState.prefinished = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } -} -function emitErrorNT(self, err) { - self.emit('error', err); -} -function errorOrDestroy(stream, err) { - // We have tests that rely on errors being emitted - // in the same tick, so changing this is semver major. - // For now when you opt-in to autoDestroy we allow - // the error to be emitted nextTick. In a future - // semver major update we should change the default to this. - - var rState = stream._readableState; - var wState = stream._writableState; - if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); -} -module.exports = { - destroy: destroy, - undestroy: undestroy, - errorOrDestroy: errorOrDestroy -}; - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js": -/*!********************************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js ***! - \********************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Ported from https://github.com/mafintosh/end-of-stream with -// permission from the author, Mathias Buus (@mafintosh). - - - -var ERR_STREAM_PREMATURE_CLOSE = (__webpack_require__(/*! ../../../errors */ "../../node_modules/readable-stream/errors-browser.js").codes).ERR_STREAM_PREMATURE_CLOSE; -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - callback.apply(this, args); - }; -} -function noop() {} -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} -function eos(stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; - callback = once(callback || noop); - var readable = opts.readable || opts.readable !== false && stream.readable; - var writable = opts.writable || opts.writable !== false && stream.writable; - var onlegacyfinish = function onlegacyfinish() { - if (!stream.writable) onfinish(); - }; - var writableEnded = stream._writableState && stream._writableState.finished; - var onfinish = function onfinish() { - writable = false; - writableEnded = true; - if (!readable) callback.call(stream); - }; - var readableEnded = stream._readableState && stream._readableState.endEmitted; - var onend = function onend() { - readable = false; - readableEnded = true; - if (!writable) callback.call(stream); - }; - var onerror = function onerror(err) { - callback.call(stream, err); - }; - var onclose = function onclose() { - var err; - if (readable && !readableEnded) { - if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - if (writable && !writableEnded) { - if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); - return callback.call(stream, err); - } - }; - var onrequest = function onrequest() { - stream.req.on('finish', onfinish); - }; - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest();else stream.on('request', onrequest); - } else if (writable && !stream._writableState) { - // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); - return function () { - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -} -module.exports = eos; - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/internal/streams/from-browser.js": -/*!*******************************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/internal/streams/from-browser.js ***! - \*******************************************************************************/ -/***/ ((module) => { - -module.exports = function () { - throw new Error('Readable.from is not available in the browser') -}; - - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/internal/streams/pipeline.js": -/*!***************************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/internal/streams/pipeline.js ***! - \***************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; -// Ported from https://github.com/mafintosh/pump with -// permission from the author, Mathias Buus (@mafintosh). - - - -var eos; -function once(callback) { - var called = false; - return function () { - if (called) return; - called = true; - callback.apply(void 0, arguments); - }; -} -var _require$codes = (__webpack_require__(/*! ../../../errors */ "../../node_modules/readable-stream/errors-browser.js").codes), - ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, - ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; -function noop(err) { - // Rethrow the error if it exists to avoid swallowing it - if (err) throw err; -} -function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -} -function destroyer(stream, reading, writing, callback) { - callback = once(callback); - var closed = false; - stream.on('close', function () { - closed = true; - }); - if (eos === undefined) eos = __webpack_require__(/*! ./end-of-stream */ "../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js"); - eos(stream, { - readable: reading, - writable: writing - }, function (err) { - if (err) return callback(err); - closed = true; - callback(); - }); - var destroyed = false; - return function (err) { - if (closed) return; - if (destroyed) return; - destroyed = true; - - // request.destroy just do .end - .abort is what we want - if (isRequest(stream)) return stream.abort(); - if (typeof stream.destroy === 'function') return stream.destroy(); - callback(err || new ERR_STREAM_DESTROYED('pipe')); - }; -} -function call(fn) { - fn(); -} -function pipe(from, to) { - return from.pipe(to); -} -function popCallback(streams) { - if (!streams.length) return noop; - if (typeof streams[streams.length - 1] !== 'function') return noop; - return streams.pop(); -} -function pipeline() { - for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { - streams[_key] = arguments[_key]; - } - var callback = popCallback(streams); - if (Array.isArray(streams[0])) streams = streams[0]; - if (streams.length < 2) { - throw new ERR_MISSING_ARGS('streams'); - } - var error; - var destroys = streams.map(function (stream, i) { - var reading = i < streams.length - 1; - var writing = i > 0; - return destroyer(stream, reading, writing, function (err) { - if (!error) error = err; - if (err) destroys.forEach(call); - if (reading) return; - destroys.forEach(call); - callback(error); - }); - }); - return streams.reduce(pipe); -} -module.exports = pipeline; - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/internal/streams/state.js": -/*!************************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/internal/streams/state.js ***! - \************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -var ERR_INVALID_OPT_VALUE = (__webpack_require__(/*! ../../../errors */ "../../node_modules/readable-stream/errors-browser.js").codes).ERR_INVALID_OPT_VALUE; -function highWaterMarkFrom(options, isDuplex, duplexKey) { - return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; -} -function getHighWaterMark(state, options, duplexKey, isDuplex) { - var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); - if (hwm != null) { - if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { - var name = isDuplex ? duplexKey : 'highWaterMark'; - throw new ERR_INVALID_OPT_VALUE(name, hwm); - } - return Math.floor(hwm); - } - - // Default value - return state.objectMode ? 16 : 16 * 1024; -} -module.exports = { - getHighWaterMark: getHighWaterMark -}; - -/***/ }), - -/***/ "../../node_modules/readable-stream/lib/internal/streams/stream-browser.js": -/*!*********************************************************************************!*\ - !*** ../../node_modules/readable-stream/lib/internal/streams/stream-browser.js ***! - \*********************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -module.exports = __webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter; - - -/***/ }), - -/***/ "../../node_modules/readline-sync/lib/readline-sync.js": -/*!*************************************************************!*\ - !*** ../../node_modules/readline-sync/lib/readline-sync.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __dirname = "/"; -/* - * readlineSync - * https://github.com/anseki/readline-sync - * - * Copyright (c) 2018 anseki - * Licensed under the MIT license. - */ - - - -var - IS_WIN = process.platform === 'win32', - - ALGORITHM_CIPHER = 'aes-256-cbc', - ALGORITHM_HASH = 'sha256', - DEFAULT_ERR_MSG = 'The current environment doesn\'t support interactive reading from TTY.', - - fs = __webpack_require__(/*! fs */ "?cf74"), - TTY = process.binding('tty_wrap').TTY, - childProc = __webpack_require__(/*! child_process */ "?e4ab"), - pathUtil = __webpack_require__(/*! path */ "../../node_modules/path/path.js"), - - defaultOptions = { - /* eslint-disable key-spacing */ - prompt: '> ', - hideEchoBack: false, - mask: '*', - limit: [], - limitMessage: 'Input another, please.$<( [)limit(])>', - defaultInput: '', - trueValue: [], - falseValue: [], - caseSensitive: false, - keepWhitespace: false, - encoding: 'utf8', - bufferSize: 1024, - print: void 0, - history: true, - cd: false, - phContent: void 0, - preCheck: void 0 - /* eslint-enable key-spacing */ - }, - - fdR = 'none', fdW, ttyR, isRawMode = false, - extHostPath, extHostArgs, tempdir, salt = 0, - lastInput = '', inputHistory = [], rawInput, - _DBG_useExt = false, _DBG_checkOptions = false, _DBG_checkMethod = false; - -function getHostArgs(options) { - // Send any text to crazy Windows shell safely. - function encodeArg(arg) { - return arg.replace(/[^\w\u0080-\uFFFF]/g, function(chr) { - return '#' + chr.charCodeAt(0) + ';'; - }); - } - - return extHostArgs.concat((function(conf) { - var args = []; - Object.keys(conf).forEach(function(optionName) { - if (conf[optionName] === 'boolean') { - if (options[optionName]) { args.push('--' + optionName); } - } else if (conf[optionName] === 'string') { - if (options[optionName]) { - args.push('--' + optionName, encodeArg(options[optionName])); - } - } - }); - return args; - })({ - /* eslint-disable key-spacing */ - display: 'string', - displayOnly: 'boolean', - keyIn: 'boolean', - hideEchoBack: 'boolean', - mask: 'string', - limit: 'string', - caseSensitive: 'boolean' - /* eslint-enable key-spacing */ - })); -} - -// piping via files (for Node.js v0.10-) -function _execFileSync(options, execOptions) { - - function getTempfile(name) { - var filepath, suffix = '', fd; - tempdir = tempdir || (__webpack_require__(/*! os */ "../../node_modules/os/index.js").tmpdir)(); - - while (true) { - filepath = pathUtil.join(tempdir, name + suffix); - try { - fd = fs.openSync(filepath, 'wx'); - } catch (e) { - if (e.code === 'EEXIST') { - suffix++; - continue; - } else { - throw e; - } - } - fs.closeSync(fd); - break; - } - return filepath; - } - - var hostArgs, shellPath, shellArgs, res = {}, exitCode, extMessage, - pathStdout = getTempfile('readline-sync.stdout'), - pathStderr = getTempfile('readline-sync.stderr'), - pathExit = getTempfile('readline-sync.exit'), - pathDone = getTempfile('readline-sync.done'), - crypto = __webpack_require__(/*! crypto */ "../../node_modules/crypto-browserify/index.js"), shasum, decipher, password; - - shasum = crypto.createHash(ALGORITHM_HASH); - shasum.update('' + process.pid + (salt++) + Math.random()); - password = shasum.digest('hex'); - decipher = crypto.createDecipher(ALGORITHM_CIPHER, password); - - hostArgs = getHostArgs(options); - if (IS_WIN) { - shellPath = process.env.ComSpec || 'cmd.exe'; - process.env.Q = '"'; // The quote (") that isn't escaped. - // `()` for ignore space by echo - shellArgs = ['/V:ON', '/S', '/C', - '(%Q%' + shellPath + '%Q% /V:ON /S /C %Q%' + /* ESLint bug? */ // eslint-disable-line no-path-concat - '%Q%' + extHostPath + '%Q%' + - hostArgs.map(function(arg) { return ' %Q%' + arg + '%Q%'; }).join('') + - ' & (echo !ERRORLEVEL!)>%Q%' + pathExit + '%Q%%Q%) 2>%Q%' + pathStderr + '%Q%' + - ' |%Q%' + process.execPath + '%Q% %Q%' + __dirname + '\\encrypt.js%Q%' + - ' %Q%' + ALGORITHM_CIPHER + '%Q% %Q%' + password + '%Q%' + - ' >%Q%' + pathStdout + '%Q%' + - ' & (echo 1)>%Q%' + pathDone + '%Q%']; - } else { - shellPath = '/bin/sh'; - shellArgs = ['-c', - // Use `()`, not `{}` for `-c` (text param) - '("' + extHostPath + '"' + /* ESLint bug? */ // eslint-disable-line no-path-concat - hostArgs.map(function(arg) { return " '" + arg.replace(/'/g, "'\\''") + "'"; }).join('') + - '; echo $?>"' + pathExit + '") 2>"' + pathStderr + '"' + - ' |"' + process.execPath + '" "' + __dirname + '/encrypt.js"' + - ' "' + ALGORITHM_CIPHER + '" "' + password + '"' + - ' >"' + pathStdout + '"' + - '; echo 1 >"' + pathDone + '"']; - } - if (_DBG_checkMethod) { _DBG_checkMethod('_execFileSync', hostArgs); } - try { - childProc.spawn(shellPath, shellArgs, execOptions); - } catch (e) { - res.error = new Error(e.message); - res.error.method = '_execFileSync - spawn'; - res.error.program = shellPath; - res.error.args = shellArgs; - } - - while (fs.readFileSync(pathDone, {encoding: options.encoding}).trim() !== '1') {} // eslint-disable-line no-empty - if ((exitCode = - fs.readFileSync(pathExit, {encoding: options.encoding}).trim()) === '0') { - res.input = - decipher.update(fs.readFileSync(pathStdout, {encoding: 'binary'}), - 'hex', options.encoding) + - decipher.final(options.encoding); - } else { - extMessage = fs.readFileSync(pathStderr, {encoding: options.encoding}).trim(); - res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\n' + extMessage : '')); - res.error.method = '_execFileSync'; - res.error.program = shellPath; - res.error.args = shellArgs; - res.error.extMessage = extMessage; - res.error.exitCode = +exitCode; - } - - fs.unlinkSync(pathStdout); - fs.unlinkSync(pathStderr); - fs.unlinkSync(pathExit); - fs.unlinkSync(pathDone); - - return res; -} - -function readlineExt(options) { - var hostArgs, res = {}, extMessage, - execOptions = {env: process.env, encoding: options.encoding}; - - if (!extHostPath) { - if (IS_WIN) { - if (process.env.PSModulePath) { // Windows PowerShell - extHostPath = 'powershell.exe'; - extHostArgs = ['-ExecutionPolicy', 'Bypass', '-File', __dirname + '\\read.ps1']; // eslint-disable-line no-path-concat - } else { // Windows Script Host - extHostPath = 'cscript.exe'; - extHostArgs = ['//nologo', __dirname + '\\read.cs.js']; // eslint-disable-line no-path-concat - } - } else { - extHostPath = '/bin/sh'; - extHostArgs = [__dirname + '/read.sh']; // eslint-disable-line no-path-concat - } - } - if (IS_WIN && !process.env.PSModulePath) { // Windows Script Host - // ScriptPW (Win XP and Server2003) needs TTY stream as STDIN. - // In this case, If STDIN isn't TTY, an error is thrown. - execOptions.stdio = [process.stdin]; - } - - if (childProc.execFileSync) { - hostArgs = getHostArgs(options); - if (_DBG_checkMethod) { _DBG_checkMethod('execFileSync', hostArgs); } - try { - res.input = childProc.execFileSync(extHostPath, hostArgs, execOptions); - } catch (e) { // non-zero exit code - extMessage = e.stderr ? (e.stderr + '').trim() : ''; - res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\n' + extMessage : '')); - res.error.method = 'execFileSync'; - res.error.program = extHostPath; - res.error.args = hostArgs; - res.error.extMessage = extMessage; - res.error.exitCode = e.status; - res.error.code = e.code; - res.error.signal = e.signal; - } - } else { - res = _execFileSync(options, execOptions); - } - if (!res.error) { - res.input = res.input.replace(/^\s*'|'\s*$/g, ''); - options.display = ''; - } - - return res; -} - -/* - display: string - displayOnly: boolean - keyIn: boolean - hideEchoBack: boolean - mask: string - limit: string (pattern) - caseSensitive: boolean - keepWhitespace: boolean - encoding, bufferSize, print -*/ -function _readlineSync(options) { - var input = '', displaySave = options.display, - silent = !options.display && - options.keyIn && options.hideEchoBack && !options.mask; - - function tryExt() { - var res = readlineExt(options); - if (res.error) { throw res.error; } - return res.input; - } - - if (_DBG_checkOptions) { _DBG_checkOptions(options); } - - (function() { // open TTY - var fsB, constants, verNum; - - function getFsB() { - if (!fsB) { - fsB = process.binding('fs'); // For raw device path - constants = process.binding('constants'); - } - return fsB; - } - - if (typeof fdR !== 'string') { return; } - fdR = null; - - if (IS_WIN) { - // iojs-v2.3.2+ input stream can't read first line. (#18) - // ** Don't get process.stdin before check! ** - // Fixed v5.1.0 - // Fixed v4.2.4 - // It regressed again in v5.6.0, it is fixed in v6.2.0. - verNum = (function(ver) { // getVerNum - var nums = ver.replace(/^\D+/, '').split('.'); - var verNum = 0; - if ((nums[0] = +nums[0])) { verNum += nums[0] * 10000; } - if ((nums[1] = +nums[1])) { verNum += nums[1] * 100; } - if ((nums[2] = +nums[2])) { verNum += nums[2]; } - return verNum; - })(process.version); - if (!(verNum >= 20302 && verNum < 40204 || verNum >= 50000 && verNum < 50100 || verNum >= 50600 && verNum < 60200) && - process.stdin.isTTY) { - process.stdin.pause(); - fdR = process.stdin.fd; - ttyR = process.stdin._handle; - } else { - try { - // The stream by fs.openSync('\\\\.\\CON', 'r') can't switch to raw mode. - // 'CONIN$' might fail on XP, 2000, 7 (x86). - fdR = getFsB().open('CONIN$', constants.O_RDWR, parseInt('0666', 8)); - ttyR = new TTY(fdR, true); - } catch (e) { /* ignore */ } - } - - if (process.stdout.isTTY) { - fdW = process.stdout.fd; - } else { - try { - fdW = fs.openSync('\\\\.\\CON', 'w'); - } catch (e) { /* ignore */ } - if (typeof fdW !== 'number') { // Retry - try { - fdW = getFsB().open('CONOUT$', constants.O_RDWR, parseInt('0666', 8)); - } catch (e) { /* ignore */ } - } - } - - } else { - if (process.stdin.isTTY) { - process.stdin.pause(); - try { - fdR = fs.openSync('/dev/tty', 'r'); // device file, not process.stdin - ttyR = process.stdin._handle; - } catch (e) { /* ignore */ } - } else { - // Node.js v0.12 read() fails. - try { - fdR = fs.openSync('/dev/tty', 'r'); - ttyR = new TTY(fdR, false); - } catch (e) { /* ignore */ } - } - - if (process.stdout.isTTY) { - fdW = process.stdout.fd; - } else { - try { - fdW = fs.openSync('/dev/tty', 'w'); - } catch (e) { /* ignore */ } - } - } - })(); - - (function() { // try read - var atEol, limit, - isCooked = !options.hideEchoBack && !options.keyIn, - buffer, reqSize, readSize, chunk, line; - rawInput = ''; - - // Node.js v0.10- returns an error if same mode is set. - function setRawMode(mode) { - if (mode === isRawMode) { return true; } - if (ttyR.setRawMode(mode) !== 0) { return false; } - isRawMode = mode; - return true; - } - - if (_DBG_useExt || !ttyR || - typeof fdW !== 'number' && (options.display || !isCooked)) { - input = tryExt(); - return; - } - - if (options.display) { - fs.writeSync(fdW, options.display); - options.display = ''; - } - if (options.displayOnly) { return; } - - if (!setRawMode(!isCooked)) { - input = tryExt(); - return; - } - - reqSize = options.keyIn ? 1 : options.bufferSize; - // Check `allocUnsafe` to make sure of the new API. - buffer = Buffer.allocUnsafe && Buffer.alloc ? Buffer.alloc(reqSize) : new Buffer(reqSize); - - if (options.keyIn && options.limit) { - limit = new RegExp('[^' + options.limit + ']', - 'g' + (options.caseSensitive ? '' : 'i')); - } - - while (true) { - readSize = 0; - try { - readSize = fs.readSync(fdR, buffer, 0, reqSize); - } catch (e) { - if (e.code !== 'EOF') { - setRawMode(false); - input += tryExt(); - return; - } - } - if (readSize > 0) { - chunk = buffer.toString(options.encoding, 0, readSize); - rawInput += chunk; - } else { - chunk = '\n'; - rawInput += String.fromCharCode(0); - } - - if (chunk && typeof (line = (chunk.match(/^(.*?)[\r\n]/) || [])[1]) === 'string') { - chunk = line; - atEol = true; - } - - // other ctrl-chars - // eslint-disable-next-line no-control-regex - if (chunk) { chunk = chunk.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ''); } - if (chunk && limit) { chunk = chunk.replace(limit, ''); } - - if (chunk) { - if (!isCooked) { - if (!options.hideEchoBack) { - fs.writeSync(fdW, chunk); - } else if (options.mask) { - fs.writeSync(fdW, (new Array(chunk.length + 1)).join(options.mask)); - } - } - input += chunk; - } - - if (!options.keyIn && atEol || - options.keyIn && input.length >= reqSize) { break; } - } - - if (!isCooked && !silent) { fs.writeSync(fdW, '\n'); } - setRawMode(false); - })(); - - if (options.print && !silent) { - options.print(displaySave + (options.displayOnly ? '' : - (options.hideEchoBack ? (new Array(input.length + 1)).join(options.mask) - : input) + '\n'), // must at least write '\n' - options.encoding); - } - - return options.displayOnly ? '' : - (lastInput = options.keepWhitespace || options.keyIn ? input : input.trim()); -} - -function flattenArray(array, validator) { - var flatArray = []; - function _flattenArray(array) { - if (array == null) { - return; - } else if (Array.isArray(array)) { - array.forEach(_flattenArray); - } else if (!validator || validator(array)) { - flatArray.push(array); - } - } - _flattenArray(array); - return flatArray; -} - -function escapePattern(pattern) { - return pattern.replace(/[\x00-\x7f]/g, // eslint-disable-line no-control-regex - function(s) { return '\\x' + ('00' + s.charCodeAt().toString(16)).substr(-2); }); -} - -// margeOptions(options1, options2 ... ) -// margeOptions(true, options1, options2 ... ) -// arg1=true : Start from defaultOptions and pick elements of that. -function margeOptions() { - var optionsList = Array.prototype.slice.call(arguments), - optionNames, fromDefault; - - if (optionsList.length && typeof optionsList[0] === 'boolean') { - fromDefault = optionsList.shift(); - if (fromDefault) { - optionNames = Object.keys(defaultOptions); - optionsList.unshift(defaultOptions); - } - } - - return optionsList.reduce(function(options, optionsPart) { - if (optionsPart == null) { return options; } - - // ======== DEPRECATED ======== - if (optionsPart.hasOwnProperty('noEchoBack') && - !optionsPart.hasOwnProperty('hideEchoBack')) { - optionsPart.hideEchoBack = optionsPart.noEchoBack; - delete optionsPart.noEchoBack; - } - if (optionsPart.hasOwnProperty('noTrim') && - !optionsPart.hasOwnProperty('keepWhitespace')) { - optionsPart.keepWhitespace = optionsPart.noTrim; - delete optionsPart.noTrim; - } - // ======== /DEPRECATED ======== - - if (!fromDefault) { optionNames = Object.keys(optionsPart); } - optionNames.forEach(function(optionName) { - var value; - if (!optionsPart.hasOwnProperty(optionName)) { return; } - value = optionsPart[optionName]; - switch (optionName) { - // _readlineSync <- * * -> defaultOptions - // ================ string - case 'mask': // * * - case 'limitMessage': // * - case 'defaultInput': // * - case 'encoding': // * * - value = value != null ? value + '' : ''; - if (value && optionName !== 'limitMessage') { value = value.replace(/[\r\n]/g, ''); } - options[optionName] = value; - break; - // ================ number(int) - case 'bufferSize': // * * - if (!isNaN(value = parseInt(value, 10)) && typeof value === 'number') { - options[optionName] = value; // limited updating (number is needed) - } - break; - // ================ boolean - case 'displayOnly': // * - case 'keyIn': // * - case 'hideEchoBack': // * * - case 'caseSensitive': // * * - case 'keepWhitespace': // * * - case 'history': // * - case 'cd': // * - options[optionName] = !!value; - break; - // ================ array - case 'limit': // * * to string for readlineExt - case 'trueValue': // * - case 'falseValue': // * - options[optionName] = flattenArray(value, function(value) { - var type = typeof value; - return type === 'string' || type === 'number' || - type === 'function' || value instanceof RegExp; - }).map(function(value) { - return typeof value === 'string' ? value.replace(/[\r\n]/g, '') : value; - }); - break; - // ================ function - case 'print': // * * - case 'phContent': // * - case 'preCheck': // * - options[optionName] = typeof value === 'function' ? value : void 0; - break; - // ================ other - case 'prompt': // * - case 'display': // * - options[optionName] = value != null ? value : ''; - break; - // no default - } - }); - return options; - }, {}); -} - -function isMatched(res, comps, caseSensitive) { - return comps.some(function(comp) { - var type = typeof comp; - return type === 'string' ? - (caseSensitive ? res === comp : res.toLowerCase() === comp.toLowerCase()) : - type === 'number' ? parseFloat(res) === comp : - type === 'function' ? comp(res) : - comp instanceof RegExp ? comp.test(res) : false; - }); -} - -function replaceHomePath(path, expand) { - var homePath = pathUtil.normalize( - IS_WIN ? (process.env.HOMEDRIVE || '') + (process.env.HOMEPATH || '') : - process.env.HOME || '').replace(/[\/\\]+$/, ''); - path = pathUtil.normalize(path); - return expand ? path.replace(/^~(?=\/|\\|$)/, homePath) : - path.replace(new RegExp('^' + escapePattern(homePath) + - '(?=\\/|\\\\|$)', IS_WIN ? 'i' : ''), '~'); -} - -function replacePlaceholder(text, generator) { - var PTN_INNER = '(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?', - rePlaceholder = new RegExp('(\\$)?(\\$<' + PTN_INNER + '>)', 'g'), - rePlaceholderCompat = new RegExp('(\\$)?(\\$\\{' + PTN_INNER + '\\})', 'g'); - - function getPlaceholderText(s, escape, placeholder, pre, param, post) { - var text; - return escape || typeof (text = generator(param)) !== 'string' ? placeholder : - text ? (pre || '') + text + (post || '') : ''; - } - - return text.replace(rePlaceholder, getPlaceholderText) - .replace(rePlaceholderCompat, getPlaceholderText); -} - -function array2charlist(array, caseSensitive, collectSymbols) { - var values, group = [], groupClass = -1, charCode = 0, symbols = '', suppressed; - function addGroup(groups, group) { - if (group.length > 3) { // ellipsis - groups.push(group[0] + '...' + group[group.length - 1]); - suppressed = true; - } else if (group.length) { - groups = groups.concat(group); - } - return groups; - } - - values = array.reduce( - function(chars, value) { return chars.concat((value + '').split('')); }, []) - .reduce(function(groups, curChar) { - var curGroupClass, curCharCode; - if (!caseSensitive) { curChar = curChar.toLowerCase(); } - curGroupClass = /^\d$/.test(curChar) ? 1 : - /^[A-Z]$/.test(curChar) ? 2 : /^[a-z]$/.test(curChar) ? 3 : 0; - if (collectSymbols && curGroupClass === 0) { - symbols += curChar; - } else { - curCharCode = curChar.charCodeAt(0); - if (curGroupClass && curGroupClass === groupClass && - curCharCode === charCode + 1) { - group.push(curChar); - } else { - groups = addGroup(groups, group); - group = [curChar]; - groupClass = curGroupClass; - } - charCode = curCharCode; - } - return groups; - }, []); - values = addGroup(values, group); // last group - if (symbols) { values.push(symbols); suppressed = true; } - return {values: values, suppressed: suppressed}; -} - -function joinChunks(chunks, suppressed) { - return chunks.join(chunks.length > 2 ? ', ' : suppressed ? ' / ' : '/'); -} - -function getPhContent(param, options) { - var text, values, resCharlist = {}, arg; - if (options.phContent) { - text = options.phContent(param, options); - } - if (typeof text !== 'string') { - switch (param) { - case 'hideEchoBack': - case 'mask': - case 'defaultInput': - case 'caseSensitive': - case 'keepWhitespace': - case 'encoding': - case 'bufferSize': - case 'history': - case 'cd': - text = !options.hasOwnProperty(param) ? '' : - typeof options[param] === 'boolean' ? (options[param] ? 'on' : 'off') : - options[param] + ''; - break; - // case 'prompt': - // case 'query': - // case 'display': - // text = options.hasOwnProperty('displaySrc') ? options.displaySrc + '' : ''; - // break; - case 'limit': - case 'trueValue': - case 'falseValue': - values = options[options.hasOwnProperty(param + 'Src') ? param + 'Src' : param]; - if (options.keyIn) { // suppress - resCharlist = array2charlist(values, options.caseSensitive); - values = resCharlist.values; - } else { - values = values.filter(function(value) { - var type = typeof value; - return type === 'string' || type === 'number'; - }); - } - text = joinChunks(values, resCharlist.suppressed); - break; - case 'limitCount': - case 'limitCountNotZero': - text = options[options.hasOwnProperty('limitSrc') ? - 'limitSrc' : 'limit'].length; - text = text || param !== 'limitCountNotZero' ? text + '' : ''; - break; - case 'lastInput': - text = lastInput; - break; - case 'cwd': - case 'CWD': - case 'cwdHome': - text = process.cwd(); - if (param === 'CWD') { - text = pathUtil.basename(text); - } else if (param === 'cwdHome') { - text = replaceHomePath(text); - } - break; - case 'date': - case 'time': - case 'localeDate': - case 'localeTime': - text = (new Date())['to' + - param.replace(/^./, function(str) { return str.toUpperCase(); }) + - 'String'](); - break; - default: // with arg - if (typeof (arg = (param.match(/^history_m(\d+)$/) || [])[1]) === 'string') { - text = inputHistory[inputHistory.length - arg] || ''; - } - } - } - return text; -} - -function getPhCharlist(param) { - var matches = /^(.)-(.)$/.exec(param), text = '', from, to, code, step; - if (!matches) { return null; } - from = matches[1].charCodeAt(0); - to = matches[2].charCodeAt(0); - step = from < to ? 1 : -1; - for (code = from; code !== to + step; code += step) { text += String.fromCharCode(code); } - return text; -} - -// cmd "arg" " a r g " "" 'a"r"g' "a""rg" "arg -function parseCl(cl) { - var reToken = new RegExp(/(\s*)(?:("|')(.*?)(?:\2|$)|(\S+))/g), matches, - taken = '', args = [], part; - cl = cl.trim(); - while ((matches = reToken.exec(cl))) { - part = matches[3] || matches[4] || ''; - if (matches[1]) { - args.push(taken); - taken = ''; - } - taken += part; - } - if (taken) { args.push(taken); } - return args; -} - -function toBool(res, options) { - return ( - (options.trueValue.length && - isMatched(res, options.trueValue, options.caseSensitive)) ? true : - (options.falseValue.length && - isMatched(res, options.falseValue, options.caseSensitive)) ? false : res); -} - -function getValidLine(options) { - var res, forceNext, limitMessage, - matches, histInput, args, resCheck; - - function _getPhContent(param) { return getPhContent(param, options); } - function addDisplay(text) { options.display += (/[^\r\n]$/.test(options.display) ? '\n' : '') + text; } - - options.limitSrc = options.limit; - options.displaySrc = options.display; - options.limit = ''; // for readlineExt - options.display = replacePlaceholder(options.display + '', _getPhContent); - - while (true) { - res = _readlineSync(options); - forceNext = false; - limitMessage = ''; - - if (options.defaultInput && !res) { res = options.defaultInput; } - - if (options.history) { - if ((matches = /^\s*\!(?:\!|-1)(:p)?\s*$/.exec(res))) { // `!!` `!-1` +`:p` - histInput = inputHistory[0] || ''; - if (matches[1]) { // only display - forceNext = true; - } else { // replace input - res = histInput; - } - // Show it even if it is empty (NL only). - addDisplay(histInput + '\n'); - if (!forceNext) { // Loop may break - options.displayOnly = true; - _readlineSync(options); - options.displayOnly = false; - } - } else if (res && res !== inputHistory[inputHistory.length - 1]) { - inputHistory = [res]; - } - } - - if (!forceNext && options.cd && res) { - args = parseCl(res); - switch (args[0].toLowerCase()) { - case 'cd': - if (args[1]) { - try { - process.chdir(replaceHomePath(args[1], true)); - } catch (e) { - addDisplay(e + ''); - } - } - forceNext = true; - break; - case 'pwd': - addDisplay(process.cwd()); - forceNext = true; - break; - // no default - } - } - - if (!forceNext && options.preCheck) { - resCheck = options.preCheck(res, options); - res = resCheck.res; - if (resCheck.forceNext) { forceNext = true; } // Don't switch to false. - } - - if (!forceNext) { - if (!options.limitSrc.length || - isMatched(res, options.limitSrc, options.caseSensitive)) { break; } - if (options.limitMessage) { - limitMessage = replacePlaceholder(options.limitMessage, _getPhContent); - } - } - - addDisplay((limitMessage ? limitMessage + '\n' : '') + - replacePlaceholder(options.displaySrc + '', _getPhContent)); - } - return toBool(res, options); -} - -// for dev -exports._DBG_set_useExt = function(val) { _DBG_useExt = val; }; -exports._DBG_set_checkOptions = function(val) { _DBG_checkOptions = val; }; -exports._DBG_set_checkMethod = function(val) { _DBG_checkMethod = val; }; -exports._DBG_clearHistory = function() { lastInput = ''; inputHistory = []; }; - -// ------------------------------------ - -exports.setDefaultOptions = function(options) { - defaultOptions = margeOptions(true, options); - return margeOptions(true); // copy -}; - -exports.question = function(query, options) { - /* eslint-disable key-spacing */ - return getValidLine(margeOptions(margeOptions(true, options), { - display: query - })); - /* eslint-enable key-spacing */ -}; - -exports.prompt = function(options) { - var readOptions = margeOptions(true, options); - readOptions.display = readOptions.prompt; - return getValidLine(readOptions); -}; - -exports.keyIn = function(query, options) { - /* eslint-disable key-spacing */ - var readOptions = margeOptions(margeOptions(true, options), { - display: query, - keyIn: true, - keepWhitespace: true - }); - /* eslint-enable key-spacing */ - - // char list - readOptions.limitSrc = readOptions.limit.filter(function(value) { - var type = typeof value; - return type === 'string' || type === 'number'; - }) - .map(function(text) { return replacePlaceholder(text + '', getPhCharlist); }); - // pattern - readOptions.limit = escapePattern(readOptions.limitSrc.join('')); - - ['trueValue', 'falseValue'].forEach(function(optionName) { - readOptions[optionName] = readOptions[optionName].reduce(function(comps, comp) { - var type = typeof comp; - if (type === 'string' || type === 'number') { - comps = comps.concat((comp + '').split('')); - } else { comps.push(comp); } - return comps; - }, []); - }); - - readOptions.display = replacePlaceholder(readOptions.display + '', - function(param) { return getPhContent(param, readOptions); }); - - return toBool(_readlineSync(readOptions), readOptions); -}; - -// ------------------------------------ - -exports.questionEMail = function(query, options) { - if (query == null) { query = 'Input e-mail address: '; } - /* eslint-disable key-spacing */ - return exports.question(query, margeOptions({ - // -------- default - hideEchoBack: false, - // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address - limit: /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, - limitMessage: 'Input valid e-mail address, please.', - trueValue: null, - falseValue: null - }, options, { - // -------- forced - keepWhitespace: false, - cd: false - })); - /* eslint-enable key-spacing */ -}; - -exports.questionNewPassword = function(query, options) { - /* eslint-disable key-spacing */ - var resCharlist, min, max, - readOptions = margeOptions({ - // -------- default - hideEchoBack: true, - mask: '*', - limitMessage: 'It can include: $\n' + - 'And the length must be: $', - trueValue: null, - falseValue: null, - caseSensitive: true - }, options, { - // -------- forced - history: false, - cd: false, - // limit (by charlist etc.), - phContent: function(param) { - return param === 'charlist' ? resCharlist.text : - param === 'length' ? min + '...' + max : null; - } - }), - // added: charlist, min, max, confirmMessage, unmatchMessage - charlist, confirmMessage, unmatchMessage, - limit, limitMessage, res1, res2; - /* eslint-enable key-spacing */ - options = options || {}; - - charlist = replacePlaceholder( - options.charlist ? options.charlist + '' : '$', getPhCharlist); - if (isNaN(min = parseInt(options.min, 10)) || typeof min !== 'number') { min = 12; } - if (isNaN(max = parseInt(options.max, 10)) || typeof max !== 'number') { max = 24; } - limit = new RegExp('^[' + escapePattern(charlist) + - ']{' + min + ',' + max + '}$'); - resCharlist = array2charlist([charlist], readOptions.caseSensitive, true); - resCharlist.text = joinChunks(resCharlist.values, resCharlist.suppressed); - - confirmMessage = options.confirmMessage != null ? options.confirmMessage : - 'Reinput a same one to confirm it: '; - unmatchMessage = options.unmatchMessage != null ? options.unmatchMessage : - 'It differs from first one.' + - ' Hit only the Enter key if you want to retry from first one.'; - - if (query == null) { query = 'Input new password: '; } - - limitMessage = readOptions.limitMessage; - while (!res2) { - readOptions.limit = limit; - readOptions.limitMessage = limitMessage; - res1 = exports.question(query, readOptions); - - readOptions.limit = [res1, '']; - readOptions.limitMessage = unmatchMessage; - res2 = exports.question(confirmMessage, readOptions); - } - - return res1; -}; - -function _questionNum(query, options, parser) { - var validValue; - function getValidValue(value) { - validValue = parser(value); - return !isNaN(validValue) && typeof validValue === 'number'; - } - /* eslint-disable key-spacing */ - exports.question(query, margeOptions({ - // -------- default - limitMessage: 'Input valid number, please.' - }, options, { - // -------- forced - limit: getValidValue, - cd: false - // trueValue, falseValue, caseSensitive, keepWhitespace don't work. - })); - /* eslint-enable key-spacing */ - return validValue; -} -exports.questionInt = function(query, options) { - return _questionNum(query, options, function(value) { return parseInt(value, 10); }); -}; -exports.questionFloat = function(query, options) { - return _questionNum(query, options, parseFloat); -}; - -exports.questionPath = function(query, options) { - /* eslint-disable key-spacing */ - var validPath, error = '', - readOptions = margeOptions({ - // -------- default - hideEchoBack: false, - limitMessage: '$Input valid path, please.' + - '$<( Min:)min>$<( Max:)max>', - history: true, - cd: true - }, options, { - // -------- forced - keepWhitespace: false, - limit: function(value) { - var exists, stat, res; - value = replaceHomePath(value, true); - error = ''; // for validate - // mkdir -p - function mkdirParents(dirPath) { - dirPath.split(/\/|\\/).reduce(function(parents, dir) { - var path = pathUtil.resolve((parents += dir + pathUtil.sep)); - if (!fs.existsSync(path)) { - fs.mkdirSync(path); - } else if (!fs.statSync(path).isDirectory()) { - throw new Error('Non directory already exists: ' + path); - } - return parents; - }, ''); - } - - try { - exists = fs.existsSync(value); - validPath = exists ? fs.realpathSync(value) : pathUtil.resolve(value); - // options.exists default: true, not-bool: no-check - if (!options.hasOwnProperty('exists') && !exists || - typeof options.exists === 'boolean' && options.exists !== exists) { - error = (exists ? 'Already exists' : 'No such file or directory') + - ': ' + validPath; - return false; - } - if (!exists && options.create) { - if (options.isDirectory) { - mkdirParents(validPath); - } else { - mkdirParents(pathUtil.dirname(validPath)); - fs.closeSync(fs.openSync(validPath, 'w')); // touch - } - validPath = fs.realpathSync(validPath); - } - if (exists && (options.min || options.max || - options.isFile || options.isDirectory)) { - stat = fs.statSync(validPath); - // type check first (directory has zero size) - if (options.isFile && !stat.isFile()) { - error = 'Not file: ' + validPath; - return false; - } else if (options.isDirectory && !stat.isDirectory()) { - error = 'Not directory: ' + validPath; - return false; - } else if (options.min && stat.size < +options.min || - options.max && stat.size > +options.max) { - error = 'Size ' + stat.size + ' is out of range: ' + validPath; - return false; - } - } - if (typeof options.validate === 'function' && - (res = options.validate(validPath)) !== true) { - if (typeof res === 'string') { error = res; } - return false; - } - } catch (e) { - error = e + ''; - return false; - } - return true; - }, - // trueValue, falseValue, caseSensitive don't work. - phContent: function(param) { - return param === 'error' ? error : - param !== 'min' && param !== 'max' ? null : - options.hasOwnProperty(param) ? options[param] + '' : ''; - } - }); - // added: exists, create, min, max, isFile, isDirectory, validate - /* eslint-enable key-spacing */ - options = options || {}; - - if (query == null) { query = 'Input path (you can "cd" and "pwd"): '; } - - exports.question(query, readOptions); - return validPath; -}; - -// props: preCheck, args, hRes, limit -function getClHandler(commandHandler, options) { - var clHandler = {}, hIndex = {}; - if (typeof commandHandler === 'object') { - Object.keys(commandHandler).forEach(function(cmd) { - if (typeof commandHandler[cmd] === 'function') { - hIndex[options.caseSensitive ? cmd : cmd.toLowerCase()] = commandHandler[cmd]; - } - }); - clHandler.preCheck = function(res) { - var cmdKey; - clHandler.args = parseCl(res); - cmdKey = clHandler.args[0] || ''; - if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); } - clHandler.hRes = - cmdKey !== '_' && hIndex.hasOwnProperty(cmdKey) ? - hIndex[cmdKey].apply(res, clHandler.args.slice(1)) : - hIndex.hasOwnProperty('_') ? hIndex._.apply(res, clHandler.args) : null; - return {res: res, forceNext: false}; - }; - if (!hIndex.hasOwnProperty('_')) { - clHandler.limit = function() { // It's called after preCheck. - var cmdKey = clHandler.args[0] || ''; - if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); } - return hIndex.hasOwnProperty(cmdKey); - }; - } - } else { - clHandler.preCheck = function(res) { - clHandler.args = parseCl(res); - clHandler.hRes = typeof commandHandler === 'function' ? - commandHandler.apply(res, clHandler.args) : true; // true for break loop - return {res: res, forceNext: false}; - }; - } - return clHandler; -} - -exports.promptCL = function(commandHandler, options) { - /* eslint-disable key-spacing */ - var readOptions = margeOptions({ - // -------- default - hideEchoBack: false, - limitMessage: 'Requested command is not available.', - caseSensitive: false, - history: true - }, options), - // -------- forced - // trueValue, falseValue, keepWhitespace don't work. - // preCheck, limit (by clHandler) - clHandler = getClHandler(commandHandler, readOptions); - /* eslint-enable key-spacing */ - readOptions.limit = clHandler.limit; - readOptions.preCheck = clHandler.preCheck; - exports.prompt(readOptions); - return clHandler.args; -}; - -exports.promptLoop = function(inputHandler, options) { - /* eslint-disable key-spacing */ - var readOptions = margeOptions({ - // -------- default - hideEchoBack: false, - trueValue: null, - falseValue: null, - caseSensitive: false, - history: true - }, options); - /* eslint-enable key-spacing */ - while (true) { if (inputHandler(exports.prompt(readOptions))) { break; } } - return; -}; - -exports.promptCLLoop = function(commandHandler, options) { - /* eslint-disable key-spacing */ - var readOptions = margeOptions({ - // -------- default - hideEchoBack: false, - limitMessage: 'Requested command is not available.', - caseSensitive: false, - history: true - }, options), - // -------- forced - // trueValue, falseValue, keepWhitespace don't work. - // preCheck, limit (by clHandler) - clHandler = getClHandler(commandHandler, readOptions); - /* eslint-enable key-spacing */ - readOptions.limit = clHandler.limit; - readOptions.preCheck = clHandler.preCheck; - while (true) { - exports.prompt(readOptions); - if (clHandler.hRes) { break; } - } - return; -}; - -exports.promptSimShell = function(options) { - /* eslint-disable key-spacing */ - return exports.prompt(margeOptions({ - // -------- default - hideEchoBack: false, - history: true - }, options, { - // -------- forced - prompt: (function() { - return IS_WIN ? - '$>' : - // 'user@host:cwd$ ' - (process.env.USER || '') + - (process.env.HOSTNAME ? - '@' + process.env.HOSTNAME.replace(/\..*$/, '') : '') + - ':$$ '; - })() - })); - /* eslint-enable key-spacing */ -}; - -function _keyInYN(query, options, limit) { - var res; - if (query == null) { query = 'Are you sure? '; } - if ((!options || options.guide !== false) && (query += '')) { - query = query.replace(/\s*:?\s*$/, '') + ' [y/n]: '; - } - /* eslint-disable key-spacing */ - res = exports.keyIn(query, margeOptions(options, { - // -------- forced - hideEchoBack: false, - limit: limit, - trueValue: 'y', - falseValue: 'n', - caseSensitive: false - // mask doesn't work. - })); - // added: guide - /* eslint-enable key-spacing */ - return typeof res === 'boolean' ? res : ''; -} -exports.keyInYN = function(query, options) { return _keyInYN(query, options); }; -exports.keyInYNStrict = function(query, options) { return _keyInYN(query, options, 'yn'); }; - -exports.keyInPause = function(query, options) { - if (query == null) { query = 'Continue...'; } - if ((!options || options.guide !== false) && (query += '')) { - query = query.replace(/\s+$/, '') + ' (Hit any key)'; - } - /* eslint-disable key-spacing */ - exports.keyIn(query, margeOptions({ - // -------- default - limit: null - }, options, { - // -------- forced - hideEchoBack: true, - mask: '' - })); - // added: guide - /* eslint-enable key-spacing */ - return; -}; - -exports.keyInSelect = function(items, query, options) { - /* eslint-disable key-spacing */ - var readOptions = margeOptions({ - // -------- default - hideEchoBack: false - }, options, { - // -------- forced - trueValue: null, - falseValue: null, - caseSensitive: false, - // limit (by items), - phContent: function(param) { - return param === 'itemsCount' ? items.length + '' : - param === 'firstItem' ? (items[0] + '').trim() : - param === 'lastItem' ? (items[items.length - 1] + '').trim() : null; - } - }), - // added: guide, cancel - keylist = '', key2i = {}, charCode = 49 /* '1' */, display = '\n'; - /* eslint-enable key-spacing */ - if (!Array.isArray(items) || !items.length || items.length > 35) { - throw '`items` must be Array (max length: 35).'; - } - - items.forEach(function(item, i) { - var key = String.fromCharCode(charCode); - keylist += key; - key2i[key] = i; - display += '[' + key + '] ' + (item + '').trim() + '\n'; - charCode = charCode === 57 /* '9' */ ? 97 /* 'a' */ : charCode + 1; - }); - if (!options || options.cancel !== false) { - keylist += '0'; - key2i['0'] = -1; - display += '[0] ' + - (options && options.cancel != null && typeof options.cancel !== 'boolean' ? - (options.cancel + '').trim() : 'CANCEL') + '\n'; - } - readOptions.limit = keylist; - display += '\n'; - - if (query == null) { query = 'Choose one from list: '; } - if ((query += '')) { - if (!options || options.guide !== false) { - query = query.replace(/\s*:?\s*$/, '') + ' [$]: '; - } - display += query; - } - - return key2i[exports.keyIn(display, readOptions).toLowerCase()]; -}; - -exports.getRawInput = function() { return rawInput; }; - -// ======== DEPRECATED ======== -function _setOption(optionName, args) { - var options; - if (args.length) { options = {}; options[optionName] = args[0]; } - return exports.setDefaultOptions(options)[optionName]; -} -exports.setPrint = function() { return _setOption('print', arguments); }; -exports.setPrompt = function() { return _setOption('prompt', arguments); }; -exports.setEncoding = function() { return _setOption('encoding', arguments); }; -exports.setMask = function() { return _setOption('mask', arguments); }; -exports.setBufferSize = function() { return _setOption('bufferSize', arguments); }; - - -/***/ }), - -/***/ "../../node_modules/ripemd160/index.js": -/*!*********************************************!*\ - !*** ../../node_modules/ripemd160/index.js ***! - \*********************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - -var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer) -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var HashBase = __webpack_require__(/*! hash-base */ "../../node_modules/hash-base/index.js") - -var ARRAY16 = new Array(16) - -var zl = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -] - -var zr = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -] - -var sl = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -] - -var sr = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -] - -var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e] -var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000] - -function RIPEMD160 () { - HashBase.call(this, 64) - - // state - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 - this._e = 0xc3d2e1f0 -} - -inherits(RIPEMD160, HashBase) - -RIPEMD160.prototype._update = function () { - var words = ARRAY16 - for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4) - - var al = this._a | 0 - var bl = this._b | 0 - var cl = this._c | 0 - var dl = this._d | 0 - var el = this._e | 0 - - var ar = this._a | 0 - var br = this._b | 0 - var cr = this._c | 0 - var dr = this._d | 0 - var er = this._e | 0 - - // computation - for (var i = 0; i < 80; i += 1) { - var tl - var tr - if (i < 16) { - tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]) - tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]) - } else if (i < 32) { - tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]) - tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]) - } else if (i < 48) { - tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]) - tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]) - } else if (i < 64) { - tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]) - tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]) - } else { // if (i<80) { - tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]) - tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]) - } - - al = el - el = dl - dl = rotl(cl, 10) - cl = bl - bl = tl - - ar = er - er = dr - dr = rotl(cr, 10) - cr = br - br = tr - } - - // update state - var t = (this._b + cl + dr) | 0 - this._b = (this._c + dl + er) | 0 - this._c = (this._d + el + ar) | 0 - this._d = (this._e + al + br) | 0 - this._e = (this._a + bl + cr) | 0 - this._a = t -} - -RIPEMD160.prototype._digest = function () { - // create padding and handle blocks - this._block[this._blockOffset++] = 0x80 - if (this._blockOffset > 56) { - this._block.fill(0, this._blockOffset, 64) - this._update() - this._blockOffset = 0 - } - - this._block.fill(0, this._blockOffset, 56) - this._block.writeUInt32LE(this._length[0], 56) - this._block.writeUInt32LE(this._length[1], 60) - this._update() - - // produce result - var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20) - buffer.writeInt32LE(this._a, 0) - buffer.writeInt32LE(this._b, 4) - buffer.writeInt32LE(this._c, 8) - buffer.writeInt32LE(this._d, 12) - buffer.writeInt32LE(this._e, 16) - return buffer -} - -function rotl (x, n) { - return (x << n) | (x >>> (32 - n)) -} - -function fn1 (a, b, c, d, e, m, k, s) { - return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0 -} - -function fn2 (a, b, c, d, e, m, k, s) { - return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0 -} - -function fn3 (a, b, c, d, e, m, k, s) { - return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0 -} - -function fn4 (a, b, c, d, e, m, k, s) { - return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0 -} - -function fn5 (a, b, c, d, e, m, k, s) { - return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0 -} - -module.exports = RIPEMD160 - - -/***/ }), - -/***/ "../../node_modules/safe-buffer/index.js": -/*!***********************************************!*\ - !*** ../../node_modules/safe-buffer/index.js ***! - \***********************************************/ -/***/ ((module, exports, __webpack_require__) => { - -/*! safe-buffer. MIT License. Feross Aboukhadijeh */ -/* eslint-disable node/no-deprecated-api */ -var buffer = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js") -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.prototype = Object.create(Buffer.prototype) - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} - - -/***/ }), - -/***/ "../../node_modules/sha.js/hash.js": -/*!*****************************************!*\ - !*** ../../node_modules/sha.js/hash.js ***! - \*****************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -// prototype class for hash functions -function Hash (blockSize, finalSize) { - this._block = Buffer.alloc(blockSize) - this._finalSize = finalSize - this._blockSize = blockSize - this._len = 0 -} - -Hash.prototype.update = function (data, enc) { - if (typeof data === 'string') { - enc = enc || 'utf8' - data = Buffer.from(data, enc) - } - - var block = this._block - var blockSize = this._blockSize - var length = data.length - var accum = this._len - - for (var offset = 0; offset < length;) { - var assigned = accum % blockSize - var remainder = Math.min(length - offset, blockSize - assigned) - - for (var i = 0; i < remainder; i++) { - block[assigned + i] = data[offset + i] - } - - accum += remainder - offset += remainder - - if ((accum % blockSize) === 0) { - this._update(block) - } - } - - this._len += length - return this -} - -Hash.prototype.digest = function (enc) { - var rem = this._len % this._blockSize - - this._block[rem] = 0x80 - - // zero (rem + 1) trailing bits, where (rem + 1) is the smallest - // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize - this._block.fill(0, rem + 1) - - if (rem >= this._finalSize) { - this._update(this._block) - this._block.fill(0) - } - - var bits = this._len * 8 - - // uint32 - if (bits <= 0xffffffff) { - this._block.writeUInt32BE(bits, this._blockSize - 4) - - // uint64 - } else { - var lowBits = (bits & 0xffffffff) >>> 0 - var highBits = (bits - lowBits) / 0x100000000 - - this._block.writeUInt32BE(highBits, this._blockSize - 8) - this._block.writeUInt32BE(lowBits, this._blockSize - 4) - } - - this._update(this._block) - var hash = this._hash() - - return enc ? hash.toString(enc) : hash -} - -Hash.prototype._update = function () { - throw new Error('_update must be implemented by subclass') -} - -module.exports = Hash - - -/***/ }), - -/***/ "../../node_modules/sha.js/index.js": -/*!******************************************!*\ - !*** ../../node_modules/sha.js/index.js ***! - \******************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var exports = module.exports = function SHA (algorithm) { - algorithm = algorithm.toLowerCase() - - var Algorithm = exports[algorithm] - if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') - - return new Algorithm() -} - -exports.sha = __webpack_require__(/*! ./sha */ "../../node_modules/sha.js/sha.js") -exports.sha1 = __webpack_require__(/*! ./sha1 */ "../../node_modules/sha.js/sha1.js") -exports.sha224 = __webpack_require__(/*! ./sha224 */ "../../node_modules/sha.js/sha224.js") -exports.sha256 = __webpack_require__(/*! ./sha256 */ "../../node_modules/sha.js/sha256.js") -exports.sha384 = __webpack_require__(/*! ./sha384 */ "../../node_modules/sha.js/sha384.js") -exports.sha512 = __webpack_require__(/*! ./sha512 */ "../../node_modules/sha.js/sha512.js") - - -/***/ }), - -/***/ "../../node_modules/sha.js/sha.js": -/*!****************************************!*\ - !*** ../../node_modules/sha.js/sha.js ***! - \****************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined - * in FIPS PUB 180-1 - * This source code is derived from sha1.js of the same repository. - * The difference between SHA-0 and SHA-1 is just a bitwise rotate left - * operation was added. - */ - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var K = [ - 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 -] - -var W = new Array(80) - -function Sha () { - this.init() - this._w = W - - Hash.call(this, 64, 56) -} - -inherits(Sha, Hash) - -Sha.prototype.init = function () { - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 - this._e = 0xc3d2e1f0 - - return this -} - -function rotl5 (num) { - return (num << 5) | (num >>> 27) -} - -function rotl30 (num) { - return (num << 30) | (num >>> 2) -} - -function ft (s, b, c, d) { - if (s === 0) return (b & c) | ((~b) & d) - if (s === 2) return (b & c) | (b & d) | (c & d) - return b ^ c ^ d -} - -Sha.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - - for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) - for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16] - - for (var j = 0; j < 80; ++j) { - var s = ~~(j / 20) - var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 - - e = d - d = c - c = rotl30(b) - b = a - a = t - } - - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 -} - -Sha.prototype._hash = function () { - var H = Buffer.allocUnsafe(20) - - H.writeInt32BE(this._a | 0, 0) - H.writeInt32BE(this._b | 0, 4) - H.writeInt32BE(this._c | 0, 8) - H.writeInt32BE(this._d | 0, 12) - H.writeInt32BE(this._e | 0, 16) - - return H -} - -module.exports = Sha - - -/***/ }), - -/***/ "../../node_modules/sha.js/sha1.js": -/*!*****************************************!*\ - !*** ../../node_modules/sha.js/sha1.js ***! - \*****************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined - * in FIPS PUB 180-1 - * Version 2.1a Copyright Paul Johnston 2000 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for details. - */ - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var K = [ - 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 -] - -var W = new Array(80) - -function Sha1 () { - this.init() - this._w = W - - Hash.call(this, 64, 56) -} - -inherits(Sha1, Hash) - -Sha1.prototype.init = function () { - this._a = 0x67452301 - this._b = 0xefcdab89 - this._c = 0x98badcfe - this._d = 0x10325476 - this._e = 0xc3d2e1f0 - - return this -} - -function rotl1 (num) { - return (num << 1) | (num >>> 31) -} - -function rotl5 (num) { - return (num << 5) | (num >>> 27) -} - -function rotl30 (num) { - return (num << 30) | (num >>> 2) -} - -function ft (s, b, c, d) { - if (s === 0) return (b & c) | ((~b) & d) - if (s === 2) return (b & c) | (b & d) | (c & d) - return b ^ c ^ d -} - -Sha1.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - - for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) - for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) - - for (var j = 0; j < 80; ++j) { - var s = ~~(j / 20) - var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 - - e = d - d = c - c = rotl30(b) - b = a - a = t - } - - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 -} - -Sha1.prototype._hash = function () { - var H = Buffer.allocUnsafe(20) - - H.writeInt32BE(this._a | 0, 0) - H.writeInt32BE(this._b | 0, 4) - H.writeInt32BE(this._c | 0, 8) - H.writeInt32BE(this._d | 0, 12) - H.writeInt32BE(this._e | 0, 16) - - return H -} - -module.exports = Sha1 - - -/***/ }), - -/***/ "../../node_modules/sha.js/sha224.js": -/*!*******************************************!*\ - !*** ../../node_modules/sha.js/sha224.js ***! - \*******************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -/** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * - */ - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var Sha256 = __webpack_require__(/*! ./sha256 */ "../../node_modules/sha.js/sha256.js") -var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var W = new Array(64) - -function Sha224 () { - this.init() - - this._w = W // new Array(64) - - Hash.call(this, 64, 56) -} - -inherits(Sha224, Sha256) - -Sha224.prototype.init = function () { - this._a = 0xc1059ed8 - this._b = 0x367cd507 - this._c = 0x3070dd17 - this._d = 0xf70e5939 - this._e = 0xffc00b31 - this._f = 0x68581511 - this._g = 0x64f98fa7 - this._h = 0xbefa4fa4 - - return this -} - -Sha224.prototype._hash = function () { - var H = Buffer.allocUnsafe(28) - - H.writeInt32BE(this._a, 0) - H.writeInt32BE(this._b, 4) - H.writeInt32BE(this._c, 8) - H.writeInt32BE(this._d, 12) - H.writeInt32BE(this._e, 16) - H.writeInt32BE(this._f, 20) - H.writeInt32BE(this._g, 24) - - return H -} - -module.exports = Sha224 - - -/***/ }), - -/***/ "../../node_modules/sha.js/sha256.js": -/*!*******************************************!*\ - !*** ../../node_modules/sha.js/sha256.js ***! - \*******************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -/** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * - */ - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var K = [ - 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, - 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, - 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, - 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, - 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, - 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, - 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, - 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, - 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, - 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, - 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, - 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, - 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, - 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, - 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, - 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 -] - -var W = new Array(64) - -function Sha256 () { - this.init() - - this._w = W // new Array(64) - - Hash.call(this, 64, 56) -} - -inherits(Sha256, Hash) - -Sha256.prototype.init = function () { - this._a = 0x6a09e667 - this._b = 0xbb67ae85 - this._c = 0x3c6ef372 - this._d = 0xa54ff53a - this._e = 0x510e527f - this._f = 0x9b05688c - this._g = 0x1f83d9ab - this._h = 0x5be0cd19 - - return this -} - -function ch (x, y, z) { - return z ^ (x & (y ^ z)) -} - -function maj (x, y, z) { - return (x & y) | (z & (x | y)) -} - -function sigma0 (x) { - return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) -} - -function sigma1 (x) { - return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) -} - -function gamma0 (x) { - return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) -} - -function gamma1 (x) { - return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) -} - -Sha256.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - var f = this._f | 0 - var g = this._g | 0 - var h = this._h | 0 - - for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) - for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0 - - for (var j = 0; j < 64; ++j) { - var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0 - var T2 = (sigma0(a) + maj(a, b, c)) | 0 - - h = g - g = f - f = e - e = (d + T1) | 0 - d = c - c = b - b = a - a = (T1 + T2) | 0 - } - - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 - this._f = (f + this._f) | 0 - this._g = (g + this._g) | 0 - this._h = (h + this._h) | 0 -} - -Sha256.prototype._hash = function () { - var H = Buffer.allocUnsafe(32) - - H.writeInt32BE(this._a, 0) - H.writeInt32BE(this._b, 4) - H.writeInt32BE(this._c, 8) - H.writeInt32BE(this._d, 12) - H.writeInt32BE(this._e, 16) - H.writeInt32BE(this._f, 20) - H.writeInt32BE(this._g, 24) - H.writeInt32BE(this._h, 28) - - return H -} - -module.exports = Sha256 - - -/***/ }), - -/***/ "../../node_modules/sha.js/sha384.js": -/*!*******************************************!*\ - !*** ../../node_modules/sha.js/sha384.js ***! - \*******************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var SHA512 = __webpack_require__(/*! ./sha512 */ "../../node_modules/sha.js/sha512.js") -var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var W = new Array(160) - -function Sha384 () { - this.init() - this._w = W - - Hash.call(this, 128, 112) -} - -inherits(Sha384, SHA512) - -Sha384.prototype.init = function () { - this._ah = 0xcbbb9d5d - this._bh = 0x629a292a - this._ch = 0x9159015a - this._dh = 0x152fecd8 - this._eh = 0x67332667 - this._fh = 0x8eb44a87 - this._gh = 0xdb0c2e0d - this._hh = 0x47b5481d - - this._al = 0xc1059ed8 - this._bl = 0x367cd507 - this._cl = 0x3070dd17 - this._dl = 0xf70e5939 - this._el = 0xffc00b31 - this._fl = 0x68581511 - this._gl = 0x64f98fa7 - this._hl = 0xbefa4fa4 - - return this -} - -Sha384.prototype._hash = function () { - var H = Buffer.allocUnsafe(48) - - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) - } - - writeInt64BE(this._ah, this._al, 0) - writeInt64BE(this._bh, this._bl, 8) - writeInt64BE(this._ch, this._cl, 16) - writeInt64BE(this._dh, this._dl, 24) - writeInt64BE(this._eh, this._el, 32) - writeInt64BE(this._fh, this._fl, 40) - - return H -} - -module.exports = Sha384 - - -/***/ }), - -/***/ "../../node_modules/sha.js/sha512.js": -/*!*******************************************!*\ - !*** ../../node_modules/sha.js/sha512.js ***! - \*******************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") -var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) - -var K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -] - -var W = new Array(160) - -function Sha512 () { - this.init() - this._w = W - - Hash.call(this, 128, 112) -} - -inherits(Sha512, Hash) - -Sha512.prototype.init = function () { - this._ah = 0x6a09e667 - this._bh = 0xbb67ae85 - this._ch = 0x3c6ef372 - this._dh = 0xa54ff53a - this._eh = 0x510e527f - this._fh = 0x9b05688c - this._gh = 0x1f83d9ab - this._hh = 0x5be0cd19 - - this._al = 0xf3bcc908 - this._bl = 0x84caa73b - this._cl = 0xfe94f82b - this._dl = 0x5f1d36f1 - this._el = 0xade682d1 - this._fl = 0x2b3e6c1f - this._gl = 0xfb41bd6b - this._hl = 0x137e2179 - - return this -} - -function Ch (x, y, z) { - return z ^ (x & (y ^ z)) -} - -function maj (x, y, z) { - return (x & y) | (z & (x | y)) -} - -function sigma0 (x, xl) { - return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) -} - -function sigma1 (x, xl) { - return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) -} - -function Gamma0 (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) -} - -function Gamma0l (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) -} - -function Gamma1 (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) -} - -function Gamma1l (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) -} - -function getCarry (a, b) { - return (a >>> 0) < (b >>> 0) ? 1 : 0 -} - -Sha512.prototype._update = function (M) { - var W = this._w - - var ah = this._ah | 0 - var bh = this._bh | 0 - var ch = this._ch | 0 - var dh = this._dh | 0 - var eh = this._eh | 0 - var fh = this._fh | 0 - var gh = this._gh | 0 - var hh = this._hh | 0 - - var al = this._al | 0 - var bl = this._bl | 0 - var cl = this._cl | 0 - var dl = this._dl | 0 - var el = this._el | 0 - var fl = this._fl | 0 - var gl = this._gl | 0 - var hl = this._hl | 0 - - for (var i = 0; i < 32; i += 2) { - W[i] = M.readInt32BE(i * 4) - W[i + 1] = M.readInt32BE(i * 4 + 4) - } - for (; i < 160; i += 2) { - var xh = W[i - 15 * 2] - var xl = W[i - 15 * 2 + 1] - var gamma0 = Gamma0(xh, xl) - var gamma0l = Gamma0l(xl, xh) - - xh = W[i - 2 * 2] - xl = W[i - 2 * 2 + 1] - var gamma1 = Gamma1(xh, xl) - var gamma1l = Gamma1l(xl, xh) - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7h = W[i - 7 * 2] - var Wi7l = W[i - 7 * 2 + 1] - - var Wi16h = W[i - 16 * 2] - var Wi16l = W[i - 16 * 2 + 1] - - var Wil = (gamma0l + Wi7l) | 0 - var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0 - Wil = (Wil + gamma1l) | 0 - Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0 - Wil = (Wil + Wi16l) | 0 - Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0 - - W[i] = Wih - W[i + 1] = Wil - } - - for (var j = 0; j < 160; j += 2) { - Wih = W[j] - Wil = W[j + 1] - - var majh = maj(ah, bh, ch) - var majl = maj(al, bl, cl) - - var sigma0h = sigma0(ah, al) - var sigma0l = sigma0(al, ah) - var sigma1h = sigma1(eh, el) - var sigma1l = sigma1(el, eh) - - // t1 = h + sigma1 + ch + K[j] + W[j] - var Kih = K[j] - var Kil = K[j + 1] - - var chh = Ch(eh, fh, gh) - var chl = Ch(el, fl, gl) - - var t1l = (hl + sigma1l) | 0 - var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0 - t1l = (t1l + chl) | 0 - t1h = (t1h + chh + getCarry(t1l, chl)) | 0 - t1l = (t1l + Kil) | 0 - t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0 - t1l = (t1l + Wil) | 0 - t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0 - - // t2 = sigma0 + maj - var t2l = (sigma0l + majl) | 0 - var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0 - - hh = gh - hl = gl - gh = fh - gl = fl - fh = eh - fl = el - el = (dl + t1l) | 0 - eh = (dh + t1h + getCarry(el, dl)) | 0 - dh = ch - dl = cl - ch = bh - cl = bl - bh = ah - bl = al - al = (t1l + t2l) | 0 - ah = (t1h + t2h + getCarry(al, t1l)) | 0 - } - - this._al = (this._al + al) | 0 - this._bl = (this._bl + bl) | 0 - this._cl = (this._cl + cl) | 0 - this._dl = (this._dl + dl) | 0 - this._el = (this._el + el) | 0 - this._fl = (this._fl + fl) | 0 - this._gl = (this._gl + gl) | 0 - this._hl = (this._hl + hl) | 0 - - this._ah = (this._ah + ah + getCarry(this._al, al)) | 0 - this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0 - this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0 - this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0 - this._eh = (this._eh + eh + getCarry(this._el, el)) | 0 - this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0 - this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0 - this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0 -} - -Sha512.prototype._hash = function () { - var H = Buffer.allocUnsafe(64) - - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) - } - - writeInt64BE(this._ah, this._al, 0) - writeInt64BE(this._bh, this._bl, 8) - writeInt64BE(this._ch, this._cl, 16) - writeInt64BE(this._dh, this._dl, 24) - writeInt64BE(this._eh, this._el, 32) - writeInt64BE(this._fh, this._fl, 40) - writeInt64BE(this._gh, this._gl, 48) - writeInt64BE(this._hh, this._hl, 56) - - return H -} - -module.exports = Sha512 - - -/***/ }), - -/***/ "../../node_modules/stream-browserify/index.js": -/*!*****************************************************!*\ - !*** ../../node_modules/stream-browserify/index.js ***! - \*****************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -module.exports = Stream; - -var EE = (__webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -inherits(Stream, EE); -Stream.Readable = __webpack_require__(/*! readable-stream/lib/_stream_readable.js */ "../../node_modules/readable-stream/lib/_stream_readable.js"); -Stream.Writable = __webpack_require__(/*! readable-stream/lib/_stream_writable.js */ "../../node_modules/readable-stream/lib/_stream_writable.js"); -Stream.Duplex = __webpack_require__(/*! readable-stream/lib/_stream_duplex.js */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); -Stream.Transform = __webpack_require__(/*! readable-stream/lib/_stream_transform.js */ "../../node_modules/readable-stream/lib/_stream_transform.js"); -Stream.PassThrough = __webpack_require__(/*! readable-stream/lib/_stream_passthrough.js */ "../../node_modules/readable-stream/lib/_stream_passthrough.js"); -Stream.finished = __webpack_require__(/*! readable-stream/lib/internal/streams/end-of-stream.js */ "../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js") -Stream.pipeline = __webpack_require__(/*! readable-stream/lib/internal/streams/pipeline.js */ "../../node_modules/readable-stream/lib/internal/streams/pipeline.js") - -// Backwards-compat with node 0.4.x -Stream.Stream = Stream; - - - -// old-style streams. Note that the pipe method (the only relevant -// part of this class) is overridden in the Readable class. - -function Stream() { - EE.call(this); -} - -Stream.prototype.pipe = function(dest, options) { - var source = this; - - function ondata(chunk) { - if (dest.writable) { - if (false === dest.write(chunk) && source.pause) { - source.pause(); - } - } - } - - source.on('data', ondata); - - function ondrain() { - if (source.readable && source.resume) { - source.resume(); - } - } - - dest.on('drain', ondrain); - - // If the 'end' option is not supplied, dest.end() will be called when - // source gets the 'end' or 'close' events. Only dest.end() once. - if (!dest._isStdio && (!options || options.end !== false)) { - source.on('end', onend); - source.on('close', onclose); - } - - var didOnEnd = false; - function onend() { - if (didOnEnd) return; - didOnEnd = true; - - dest.end(); - } - - - function onclose() { - if (didOnEnd) return; - didOnEnd = true; - - if (typeof dest.destroy === 'function') dest.destroy(); - } - - // don't leave dangling pipes when there are errors. - function onerror(er) { - cleanup(); - if (EE.listenerCount(this, 'error') === 0) { - throw er; // Unhandled stream error in pipe. - } - } - - source.on('error', onerror); - dest.on('error', onerror); - - // remove all the event listeners that were added. - function cleanup() { - source.removeListener('data', ondata); - dest.removeListener('drain', ondrain); - - source.removeListener('end', onend); - source.removeListener('close', onclose); - - source.removeListener('error', onerror); - dest.removeListener('error', onerror); - - source.removeListener('end', cleanup); - source.removeListener('close', cleanup); - - dest.removeListener('close', cleanup); - } - - source.on('end', cleanup); - source.on('close', cleanup); - - dest.on('close', cleanup); - - dest.emit('pipe', source); - - // Allow for unix-like usage: A.pipe(B).pipe(C) - return dest; -}; - - -/***/ }), - -/***/ "../../node_modules/string_decoder/lib/string_decoder.js": -/*!***************************************************************!*\ - !*** ../../node_modules/string_decoder/lib/string_decoder.js ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -/**/ - -var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); -/**/ - -var isEncoding = Buffer.isEncoding || function (encoding) { - encoding = '' + encoding; - switch (encoding && encoding.toLowerCase()) { - case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': - return true; - default: - return false; - } -}; - -function _normalizeEncoding(enc) { - if (!enc) return 'utf8'; - var retried; - while (true) { - switch (enc) { - case 'utf8': - case 'utf-8': - return 'utf8'; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return 'utf16le'; - case 'latin1': - case 'binary': - return 'latin1'; - case 'base64': - case 'ascii': - case 'hex': - return enc; - default: - if (retried) return; // undefined - enc = ('' + enc).toLowerCase(); - retried = true; - } - } -}; - -// Do not cache `Buffer.isEncoding` when checking encoding names as some -// modules monkey-patch it to support additional encodings -function normalizeEncoding(enc) { - var nenc = _normalizeEncoding(enc); - if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); - return nenc || enc; -} - -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. -exports.StringDecoder = StringDecoder; -function StringDecoder(encoding) { - this.encoding = normalizeEncoding(encoding); - var nb; - switch (this.encoding) { - case 'utf16le': - this.text = utf16Text; - this.end = utf16End; - nb = 4; - break; - case 'utf8': - this.fillLast = utf8FillLast; - nb = 4; - break; - case 'base64': - this.text = base64Text; - this.end = base64End; - nb = 3; - break; - default: - this.write = simpleWrite; - this.end = simpleEnd; - return; - } - this.lastNeed = 0; - this.lastTotal = 0; - this.lastChar = Buffer.allocUnsafe(nb); -} - -StringDecoder.prototype.write = function (buf) { - if (buf.length === 0) return ''; - var r; - var i; - if (this.lastNeed) { - r = this.fillLast(buf); - if (r === undefined) return ''; - i = this.lastNeed; - this.lastNeed = 0; - } else { - i = 0; - } - if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); - return r || ''; -}; - -StringDecoder.prototype.end = utf8End; - -// Returns only complete characters in a Buffer -StringDecoder.prototype.text = utf8Text; - -// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer -StringDecoder.prototype.fillLast = function (buf) { - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); - this.lastNeed -= buf.length; -}; - -// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a -// continuation byte. If an invalid byte is detected, -2 is returned. -function utf8CheckByte(byte) { - if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; - return byte >> 6 === 0x02 ? -1 : -2; -} - -// Checks at most 3 bytes at the end of a Buffer in order to detect an -// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) -// needed to complete the UTF-8 character (if applicable) are returned. -function utf8CheckIncomplete(self, buf, i) { - var j = buf.length - 1; - if (j < i) return 0; - var nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 1; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 2; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) { - if (nb === 2) nb = 0;else self.lastNeed = nb - 3; - } - return nb; - } - return 0; -} - -// Validates as many continuation bytes for a multi-byte UTF-8 character as -// needed or are available. If we see a non-continuation byte where we expect -// one, we "replace" the validated continuation bytes we've seen so far with -// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding -// behavior. The continuation byte check is included three times in the case -// where all of the continuation bytes for a character exist in the same buffer. -// It is also done this way as a slight performance increase instead of using a -// loop. -function utf8CheckExtraBytes(self, buf, p) { - if ((buf[0] & 0xC0) !== 0x80) { - self.lastNeed = 0; - return '\ufffd'; - } - if (self.lastNeed > 1 && buf.length > 1) { - if ((buf[1] & 0xC0) !== 0x80) { - self.lastNeed = 1; - return '\ufffd'; - } - if (self.lastNeed > 2 && buf.length > 2) { - if ((buf[2] & 0xC0) !== 0x80) { - self.lastNeed = 2; - return '\ufffd'; - } - } - } -} - -// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. -function utf8FillLast(buf) { - var p = this.lastTotal - this.lastNeed; - var r = utf8CheckExtraBytes(this, buf, p); - if (r !== undefined) return r; - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, p, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, p, 0, buf.length); - this.lastNeed -= buf.length; -} - -// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a -// partial character, the character's bytes are buffered until the required -// number of bytes are available. -function utf8Text(buf, i) { - var total = utf8CheckIncomplete(this, buf, i); - if (!this.lastNeed) return buf.toString('utf8', i); - this.lastTotal = total; - var end = buf.length - (total - this.lastNeed); - buf.copy(this.lastChar, 0, end); - return buf.toString('utf8', i, end); -} - -// For UTF-8, a replacement character is added when ending on a partial -// character. -function utf8End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + '\ufffd'; - return r; -} - -// UTF-16LE typically needs two bytes per character, but even if we have an even -// number of bytes available, we need to check if we end on a leading/high -// surrogate. In that case, we need to wait for the next two bytes in order to -// decode the last character properly. -function utf16Text(buf, i) { - if ((buf.length - i) % 2 === 0) { - var r = buf.toString('utf16le', i); - if (r) { - var c = r.charCodeAt(r.length - 1); - if (c >= 0xD800 && c <= 0xDBFF) { - this.lastNeed = 2; - this.lastTotal = 4; - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - return r.slice(0, -1); - } - } - return r; - } - this.lastNeed = 1; - this.lastTotal = 2; - this.lastChar[0] = buf[buf.length - 1]; - return buf.toString('utf16le', i, buf.length - 1); -} - -// For UTF-16LE we do not explicitly append special replacement characters if we -// end on a partial character, we simply let v8 handle that. -function utf16End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) { - var end = this.lastTotal - this.lastNeed; - return r + this.lastChar.toString('utf16le', 0, end); - } - return r; -} - -function base64Text(buf, i) { - var n = (buf.length - i) % 3; - if (n === 0) return buf.toString('base64', i); - this.lastNeed = 3 - n; - this.lastTotal = 3; - if (n === 1) { - this.lastChar[0] = buf[buf.length - 1]; - } else { - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - } - return buf.toString('base64', i, buf.length - n); -} - -function base64End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); - return r; -} - -// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) -function simpleWrite(buf) { - return buf.toString(this.encoding); -} - -function simpleEnd(buf) { - return buf && buf.length ? this.write(buf) : ''; -} - -/***/ }), - -/***/ "../../node_modules/svg-pan-zoom/src/browserify.js": -/*!*********************************************************!*\ - !*** ../../node_modules/svg-pan-zoom/src/browserify.js ***! - \*********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var SvgPanZoom = __webpack_require__(/*! ./svg-pan-zoom.js */ "../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js"); - -module.exports = SvgPanZoom; - - -/***/ }), - -/***/ "../../node_modules/svg-pan-zoom/src/control-icons.js": -/*!************************************************************!*\ - !*** ../../node_modules/svg-pan-zoom/src/control-icons.js ***! - \************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var SvgUtils = __webpack_require__(/*! ./svg-utilities */ "../../node_modules/svg-pan-zoom/src/svg-utilities.js"); - -module.exports = { - enable: function(instance) { - // Select (and create if necessary) defs - var defs = instance.svg.querySelector("defs"); - if (!defs) { - defs = document.createElementNS(SvgUtils.svgNS, "defs"); - instance.svg.appendChild(defs); - } - - // Check for style element, and create it if it doesn't exist - var styleEl = defs.querySelector("style#svg-pan-zoom-controls-styles"); - if (!styleEl) { - var style = document.createElementNS(SvgUtils.svgNS, "style"); - style.setAttribute("id", "svg-pan-zoom-controls-styles"); - style.setAttribute("type", "text/css"); - style.textContent = - ".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }"; - defs.appendChild(style); - } - - // Zoom Group - var zoomGroup = document.createElementNS(SvgUtils.svgNS, "g"); - zoomGroup.setAttribute("id", "svg-pan-zoom-controls"); - zoomGroup.setAttribute( - "transform", - "translate(" + - (instance.width - 70) + - " " + - (instance.height - 76) + - ") scale(0.75)" - ); - zoomGroup.setAttribute("class", "svg-pan-zoom-control"); - - // Control elements - zoomGroup.appendChild(this._createZoomIn(instance)); - zoomGroup.appendChild(this._createZoomReset(instance)); - zoomGroup.appendChild(this._createZoomOut(instance)); - - // Finally append created element - instance.svg.appendChild(zoomGroup); - - // Cache control instance - instance.controlIcons = zoomGroup; - }, - - _createZoomIn: function(instance) { - var zoomIn = document.createElementNS(SvgUtils.svgNS, "g"); - zoomIn.setAttribute("id", "svg-pan-zoom-zoom-in"); - zoomIn.setAttribute("transform", "translate(30.5 5) scale(0.015)"); - zoomIn.setAttribute("class", "svg-pan-zoom-control"); - zoomIn.addEventListener( - "click", - function() { - instance.getPublicInstance().zoomIn(); - }, - false - ); - zoomIn.addEventListener( - "touchstart", - function() { - instance.getPublicInstance().zoomIn(); - }, - false - ); - - var zoomInBackground = document.createElementNS(SvgUtils.svgNS, "rect"); // TODO change these background space fillers to rounded rectangles so they look prettier - zoomInBackground.setAttribute("x", "0"); - zoomInBackground.setAttribute("y", "0"); - zoomInBackground.setAttribute("width", "1500"); // larger than expected because the whole group is transformed to scale down - zoomInBackground.setAttribute("height", "1400"); - zoomInBackground.setAttribute("class", "svg-pan-zoom-control-background"); - zoomIn.appendChild(zoomInBackground); - - var zoomInShape = document.createElementNS(SvgUtils.svgNS, "path"); - zoomInShape.setAttribute( - "d", - "M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" - ); - zoomInShape.setAttribute("class", "svg-pan-zoom-control-element"); - zoomIn.appendChild(zoomInShape); - - return zoomIn; - }, - - _createZoomReset: function(instance) { - // reset - var resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, "g"); - resetPanZoomControl.setAttribute("id", "svg-pan-zoom-reset-pan-zoom"); - resetPanZoomControl.setAttribute("transform", "translate(5 35) scale(0.4)"); - resetPanZoomControl.setAttribute("class", "svg-pan-zoom-control"); - resetPanZoomControl.addEventListener( - "click", - function() { - instance.getPublicInstance().reset(); - }, - false - ); - resetPanZoomControl.addEventListener( - "touchstart", - function() { - instance.getPublicInstance().reset(); - }, - false - ); - - var resetPanZoomControlBackground = document.createElementNS( - SvgUtils.svgNS, - "rect" - ); // TODO change these background space fillers to rounded rectangles so they look prettier - resetPanZoomControlBackground.setAttribute("x", "2"); - resetPanZoomControlBackground.setAttribute("y", "2"); - resetPanZoomControlBackground.setAttribute("width", "182"); // larger than expected because the whole group is transformed to scale down - resetPanZoomControlBackground.setAttribute("height", "58"); - resetPanZoomControlBackground.setAttribute( - "class", - "svg-pan-zoom-control-background" - ); - resetPanZoomControl.appendChild(resetPanZoomControlBackground); - - var resetPanZoomControlShape1 = document.createElementNS( - SvgUtils.svgNS, - "path" - ); - resetPanZoomControlShape1.setAttribute( - "d", - "M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z" - ); - resetPanZoomControlShape1.setAttribute( - "class", - "svg-pan-zoom-control-element" - ); - resetPanZoomControl.appendChild(resetPanZoomControlShape1); - - var resetPanZoomControlShape2 = document.createElementNS( - SvgUtils.svgNS, - "path" - ); - resetPanZoomControlShape2.setAttribute( - "d", - "M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z" - ); - resetPanZoomControlShape2.setAttribute( - "class", - "svg-pan-zoom-control-element" - ); - resetPanZoomControl.appendChild(resetPanZoomControlShape2); - - return resetPanZoomControl; - }, - - _createZoomOut: function(instance) { - // zoom out - var zoomOut = document.createElementNS(SvgUtils.svgNS, "g"); - zoomOut.setAttribute("id", "svg-pan-zoom-zoom-out"); - zoomOut.setAttribute("transform", "translate(30.5 70) scale(0.015)"); - zoomOut.setAttribute("class", "svg-pan-zoom-control"); - zoomOut.addEventListener( - "click", - function() { - instance.getPublicInstance().zoomOut(); - }, - false - ); - zoomOut.addEventListener( - "touchstart", - function() { - instance.getPublicInstance().zoomOut(); - }, - false - ); - - var zoomOutBackground = document.createElementNS(SvgUtils.svgNS, "rect"); // TODO change these background space fillers to rounded rectangles so they look prettier - zoomOutBackground.setAttribute("x", "0"); - zoomOutBackground.setAttribute("y", "0"); - zoomOutBackground.setAttribute("width", "1500"); // larger than expected because the whole group is transformed to scale down - zoomOutBackground.setAttribute("height", "1400"); - zoomOutBackground.setAttribute("class", "svg-pan-zoom-control-background"); - zoomOut.appendChild(zoomOutBackground); - - var zoomOutShape = document.createElementNS(SvgUtils.svgNS, "path"); - zoomOutShape.setAttribute( - "d", - "M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" - ); - zoomOutShape.setAttribute("class", "svg-pan-zoom-control-element"); - zoomOut.appendChild(zoomOutShape); - - return zoomOut; - }, - - disable: function(instance) { - if (instance.controlIcons) { - instance.controlIcons.parentNode.removeChild(instance.controlIcons); - instance.controlIcons = null; - } - } -}; - - -/***/ }), - -/***/ "../../node_modules/svg-pan-zoom/src/shadow-viewport.js": -/*!**************************************************************!*\ - !*** ../../node_modules/svg-pan-zoom/src/shadow-viewport.js ***! - \**************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var SvgUtils = __webpack_require__(/*! ./svg-utilities */ "../../node_modules/svg-pan-zoom/src/svg-utilities.js"), - Utils = __webpack_require__(/*! ./utilities */ "../../node_modules/svg-pan-zoom/src/utilities.js"); - -var ShadowViewport = function(viewport, options) { - this.init(viewport, options); -}; - -/** - * Initialization - * - * @param {SVGElement} viewport - * @param {Object} options - */ -ShadowViewport.prototype.init = function(viewport, options) { - // DOM Elements - this.viewport = viewport; - this.options = options; - - // State cache - this.originalState = { zoom: 1, x: 0, y: 0 }; - this.activeState = { zoom: 1, x: 0, y: 0 }; - - this.updateCTMCached = Utils.proxy(this.updateCTM, this); - - // Create a custom requestAnimationFrame taking in account refreshRate - this.requestAnimationFrame = Utils.createRequestAnimationFrame( - this.options.refreshRate - ); - - // ViewBox - this.viewBox = { x: 0, y: 0, width: 0, height: 0 }; - this.cacheViewBox(); - - // Process CTM - var newCTM = this.processCTM(); - - // Update viewport CTM and cache zoom and pan - this.setCTM(newCTM); - - // Update CTM in this frame - this.updateCTM(); -}; - -/** - * Cache initial viewBox value - * If no viewBox is defined, then use viewport size/position instead for viewBox values - */ -ShadowViewport.prototype.cacheViewBox = function() { - var svgViewBox = this.options.svg.getAttribute("viewBox"); - - if (svgViewBox) { - var viewBoxValues = svgViewBox - .split(/[\s\,]/) - .filter(function(v) { - return v; - }) - .map(parseFloat); - - // Cache viewbox x and y offset - this.viewBox.x = viewBoxValues[0]; - this.viewBox.y = viewBoxValues[1]; - this.viewBox.width = viewBoxValues[2]; - this.viewBox.height = viewBoxValues[3]; - - var zoom = Math.min( - this.options.width / this.viewBox.width, - this.options.height / this.viewBox.height - ); - - // Update active state - this.activeState.zoom = zoom; - this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2; - this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2; - - // Force updating CTM - this.updateCTMOnNextFrame(); - - this.options.svg.removeAttribute("viewBox"); - } else { - this.simpleViewBoxCache(); - } -}; - -/** - * Recalculate viewport sizes and update viewBox cache - */ -ShadowViewport.prototype.simpleViewBoxCache = function() { - var bBox = this.viewport.getBBox(); - - this.viewBox.x = bBox.x; - this.viewBox.y = bBox.y; - this.viewBox.width = bBox.width; - this.viewBox.height = bBox.height; -}; - -/** - * Returns a viewbox object. Safe to alter - * - * @return {Object} viewbox object - */ -ShadowViewport.prototype.getViewBox = function() { - return Utils.extend({}, this.viewBox); -}; - -/** - * Get initial zoom and pan values. Save them into originalState - * Parses viewBox attribute to alter initial sizes - * - * @return {CTM} CTM object based on options - */ -ShadowViewport.prototype.processCTM = function() { - var newCTM = this.getCTM(); - - if (this.options.fit || this.options.contain) { - var newScale; - if (this.options.fit) { - newScale = Math.min( - this.options.width / this.viewBox.width, - this.options.height / this.viewBox.height - ); - } else { - newScale = Math.max( - this.options.width / this.viewBox.width, - this.options.height / this.viewBox.height - ); - } - - newCTM.a = newScale; //x-scale - newCTM.d = newScale; //y-scale - newCTM.e = -this.viewBox.x * newScale; //x-transform - newCTM.f = -this.viewBox.y * newScale; //y-transform - } - - if (this.options.center) { - var offsetX = - (this.options.width - - (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) * - 0.5, - offsetY = - (this.options.height - - (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) * - 0.5; - - newCTM.e = offsetX; - newCTM.f = offsetY; - } - - // Cache initial values. Based on activeState and fix+center opitons - this.originalState.zoom = newCTM.a; - this.originalState.x = newCTM.e; - this.originalState.y = newCTM.f; - - return newCTM; -}; - -/** - * Return originalState object. Safe to alter - * - * @return {Object} - */ -ShadowViewport.prototype.getOriginalState = function() { - return Utils.extend({}, this.originalState); -}; - -/** - * Return actualState object. Safe to alter - * - * @return {Object} - */ -ShadowViewport.prototype.getState = function() { - return Utils.extend({}, this.activeState); -}; - -/** - * Get zoom scale - * - * @return {Float} zoom scale - */ -ShadowViewport.prototype.getZoom = function() { - return this.activeState.zoom; -}; - -/** - * Get zoom scale for pubilc usage - * - * @return {Float} zoom scale - */ -ShadowViewport.prototype.getRelativeZoom = function() { - return this.activeState.zoom / this.originalState.zoom; -}; - -/** - * Compute zoom scale for pubilc usage - * - * @return {Float} zoom scale - */ -ShadowViewport.prototype.computeRelativeZoom = function(scale) { - return scale / this.originalState.zoom; -}; - -/** - * Get pan - * - * @return {Object} - */ -ShadowViewport.prototype.getPan = function() { - return { x: this.activeState.x, y: this.activeState.y }; -}; - -/** - * Return cached viewport CTM value that can be safely modified - * - * @return {SVGMatrix} - */ -ShadowViewport.prototype.getCTM = function() { - var safeCTM = this.options.svg.createSVGMatrix(); - - // Copy values manually as in FF they are not itterable - safeCTM.a = this.activeState.zoom; - safeCTM.b = 0; - safeCTM.c = 0; - safeCTM.d = this.activeState.zoom; - safeCTM.e = this.activeState.x; - safeCTM.f = this.activeState.y; - - return safeCTM; -}; - -/** - * Set a new CTM - * - * @param {SVGMatrix} newCTM - */ -ShadowViewport.prototype.setCTM = function(newCTM) { - var willZoom = this.isZoomDifferent(newCTM), - willPan = this.isPanDifferent(newCTM); - - if (willZoom || willPan) { - // Before zoom - if (willZoom) { - // If returns false then cancel zooming - if ( - this.options.beforeZoom( - this.getRelativeZoom(), - this.computeRelativeZoom(newCTM.a) - ) === false - ) { - newCTM.a = newCTM.d = this.activeState.zoom; - willZoom = false; - } else { - this.updateCache(newCTM); - this.options.onZoom(this.getRelativeZoom()); - } - } - - // Before pan - if (willPan) { - var preventPan = this.options.beforePan(this.getPan(), { - x: newCTM.e, - y: newCTM.f - }), - // If prevent pan is an object - preventPanX = false, - preventPanY = false; - - // If prevent pan is Boolean false - if (preventPan === false) { - // Set x and y same as before - newCTM.e = this.getPan().x; - newCTM.f = this.getPan().y; - - preventPanX = preventPanY = true; - } else if (Utils.isObject(preventPan)) { - // Check for X axes attribute - if (preventPan.x === false) { - // Prevent panning on x axes - newCTM.e = this.getPan().x; - preventPanX = true; - } else if (Utils.isNumber(preventPan.x)) { - // Set a custom pan value - newCTM.e = preventPan.x; - } - - // Check for Y axes attribute - if (preventPan.y === false) { - // Prevent panning on x axes - newCTM.f = this.getPan().y; - preventPanY = true; - } else if (Utils.isNumber(preventPan.y)) { - // Set a custom pan value - newCTM.f = preventPan.y; - } - } - - // Update willPan flag - // Check if newCTM is still different - if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) { - willPan = false; - } else { - this.updateCache(newCTM); - this.options.onPan(this.getPan()); - } - } - - // Check again if should zoom or pan - if (willZoom || willPan) { - this.updateCTMOnNextFrame(); - } - } -}; - -ShadowViewport.prototype.isZoomDifferent = function(newCTM) { - return this.activeState.zoom !== newCTM.a; -}; - -ShadowViewport.prototype.isPanDifferent = function(newCTM) { - return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f; -}; - -/** - * Update cached CTM and active state - * - * @param {SVGMatrix} newCTM - */ -ShadowViewport.prototype.updateCache = function(newCTM) { - this.activeState.zoom = newCTM.a; - this.activeState.x = newCTM.e; - this.activeState.y = newCTM.f; -}; - -ShadowViewport.prototype.pendingUpdate = false; - -/** - * Place a request to update CTM on next Frame - */ -ShadowViewport.prototype.updateCTMOnNextFrame = function() { - if (!this.pendingUpdate) { - // Lock - this.pendingUpdate = true; - - // Throttle next update - this.requestAnimationFrame.call(window, this.updateCTMCached); - } -}; - -/** - * Update viewport CTM with cached CTM - */ -ShadowViewport.prototype.updateCTM = function() { - var ctm = this.getCTM(); - - // Updates SVG element - SvgUtils.setCTM(this.viewport, ctm, this.defs); - - // Free the lock - this.pendingUpdate = false; - - // Notify about the update - if (this.options.onUpdatedCTM) { - this.options.onUpdatedCTM(ctm); - } -}; - -module.exports = function(viewport, options) { - return new ShadowViewport(viewport, options); -}; - - -/***/ }), - -/***/ "../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js": -/*!***********************************************************!*\ - !*** ../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Wheel = __webpack_require__(/*! ./uniwheel */ "../../node_modules/svg-pan-zoom/src/uniwheel.js"), - ControlIcons = __webpack_require__(/*! ./control-icons */ "../../node_modules/svg-pan-zoom/src/control-icons.js"), - Utils = __webpack_require__(/*! ./utilities */ "../../node_modules/svg-pan-zoom/src/utilities.js"), - SvgUtils = __webpack_require__(/*! ./svg-utilities */ "../../node_modules/svg-pan-zoom/src/svg-utilities.js"), - ShadowViewport = __webpack_require__(/*! ./shadow-viewport */ "../../node_modules/svg-pan-zoom/src/shadow-viewport.js"); - -var SvgPanZoom = function(svg, options) { - this.init(svg, options); -}; - -var optionsDefaults = { - viewportSelector: ".svg-pan-zoom_viewport", // Viewport selector. Can be querySelector string or SVGElement - panEnabled: true, // enable or disable panning (default enabled) - controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled) - zoomEnabled: true, // enable or disable zooming (default enabled) - dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled) - mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled) - preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events - zoomScaleSensitivity: 0.1, // Zoom sensitivity - minZoom: 0.5, // Minimum Zoom level - maxZoom: 10, // Maximum Zoom level - fit: true, // enable or disable viewport fit in SVG (default true) - contain: false, // enable or disable viewport contain the svg (default false) - center: true, // enable or disable viewport centering in SVG (default true) - refreshRate: "auto", // Maximum number of frames per second (altering SVG's viewport) - beforeZoom: null, - onZoom: null, - beforePan: null, - onPan: null, - customEventsHandler: null, - eventsListenerElement: null, - onUpdatedCTM: null -}; - -var passiveListenerOption = { passive: true }; - -SvgPanZoom.prototype.init = function(svg, options) { - var that = this; - - this.svg = svg; - this.defs = svg.querySelector("defs"); - - // Add default attributes to SVG - SvgUtils.setupSvgAttributes(this.svg); - - // Set options - this.options = Utils.extend(Utils.extend({}, optionsDefaults), options); - - // Set default state - this.state = "none"; - - // Get dimensions - var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized( - svg - ); - this.width = boundingClientRectNormalized.width; - this.height = boundingClientRectNormalized.height; - - // Init shadow viewport - this.viewport = ShadowViewport( - SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector), - { - svg: this.svg, - width: this.width, - height: this.height, - fit: this.options.fit, - contain: this.options.contain, - center: this.options.center, - refreshRate: this.options.refreshRate, - // Put callbacks into functions as they can change through time - beforeZoom: function(oldScale, newScale) { - if (that.viewport && that.options.beforeZoom) { - return that.options.beforeZoom(oldScale, newScale); - } - }, - onZoom: function(scale) { - if (that.viewport && that.options.onZoom) { - return that.options.onZoom(scale); - } - }, - beforePan: function(oldPoint, newPoint) { - if (that.viewport && that.options.beforePan) { - return that.options.beforePan(oldPoint, newPoint); - } - }, - onPan: function(point) { - if (that.viewport && that.options.onPan) { - return that.options.onPan(point); - } - }, - onUpdatedCTM: function(ctm) { - if (that.viewport && that.options.onUpdatedCTM) { - return that.options.onUpdatedCTM(ctm); - } - } - } - ); - - // Wrap callbacks into public API context - var publicInstance = this.getPublicInstance(); - publicInstance.setBeforeZoom(this.options.beforeZoom); - publicInstance.setOnZoom(this.options.onZoom); - publicInstance.setBeforePan(this.options.beforePan); - publicInstance.setOnPan(this.options.onPan); - publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM); - - if (this.options.controlIconsEnabled) { - ControlIcons.enable(this); - } - - // Init events handlers - this.lastMouseWheelEventTime = Date.now(); - this.setupHandlers(); -}; - -/** - * Register event handlers - */ -SvgPanZoom.prototype.setupHandlers = function() { - var that = this, - prevEvt = null; // use for touchstart event to detect double tap - - this.eventListeners = { - // Mouse down group - mousedown: function(evt) { - var result = that.handleMouseDown(evt, prevEvt); - prevEvt = evt; - return result; - }, - touchstart: function(evt) { - var result = that.handleMouseDown(evt, prevEvt); - prevEvt = evt; - return result; - }, - - // Mouse up group - mouseup: function(evt) { - return that.handleMouseUp(evt); - }, - touchend: function(evt) { - return that.handleMouseUp(evt); - }, - - // Mouse move group - mousemove: function(evt) { - return that.handleMouseMove(evt); - }, - touchmove: function(evt) { - return that.handleMouseMove(evt); - }, - - // Mouse leave group - mouseleave: function(evt) { - return that.handleMouseUp(evt); - }, - touchleave: function(evt) { - return that.handleMouseUp(evt); - }, - touchcancel: function(evt) { - return that.handleMouseUp(evt); - } - }; - - // Init custom events handler if available - // eslint-disable-next-line eqeqeq - if (this.options.customEventsHandler != null) { - this.options.customEventsHandler.init({ - svgElement: this.svg, - eventsListenerElement: this.options.eventsListenerElement, - instance: this.getPublicInstance() - }); - - // Custom event handler may halt builtin listeners - var haltEventListeners = this.options.customEventsHandler - .haltEventListeners; - if (haltEventListeners && haltEventListeners.length) { - for (var i = haltEventListeners.length - 1; i >= 0; i--) { - if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) { - delete this.eventListeners[haltEventListeners[i]]; - } - } - } - } - - // Bind eventListeners - for (var event in this.eventListeners) { - // Attach event to eventsListenerElement or SVG if not available - (this.options.eventsListenerElement || this.svg).addEventListener( - event, - this.eventListeners[event], - !this.options.preventMouseEventsDefault ? passiveListenerOption : false - ); - } - - // Zoom using mouse wheel - if (this.options.mouseWheelZoomEnabled) { - this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true - this.enableMouseWheelZoom(); - } -}; - -/** - * Enable ability to zoom using mouse wheel - */ -SvgPanZoom.prototype.enableMouseWheelZoom = function() { - if (!this.options.mouseWheelZoomEnabled) { - var that = this; - - // Mouse wheel listener - this.wheelListener = function(evt) { - return that.handleMouseWheel(evt); - }; - - // Bind wheelListener - var isPassiveListener = !this.options.preventMouseEventsDefault; - Wheel.on( - this.options.eventsListenerElement || this.svg, - this.wheelListener, - isPassiveListener - ); - - this.options.mouseWheelZoomEnabled = true; - } -}; - -/** - * Disable ability to zoom using mouse wheel - */ -SvgPanZoom.prototype.disableMouseWheelZoom = function() { - if (this.options.mouseWheelZoomEnabled) { - var isPassiveListener = !this.options.preventMouseEventsDefault; - Wheel.off( - this.options.eventsListenerElement || this.svg, - this.wheelListener, - isPassiveListener - ); - this.options.mouseWheelZoomEnabled = false; - } -}; - -/** - * Handle mouse wheel event - * - * @param {Event} evt - */ -SvgPanZoom.prototype.handleMouseWheel = function(evt) { - if (!this.options.zoomEnabled || this.state !== "none") { - return; - } - - if (this.options.preventMouseEventsDefault) { - if (evt.preventDefault) { - evt.preventDefault(); - } else { - evt.returnValue = false; - } - } - - // Default delta in case that deltaY is not available - var delta = evt.deltaY || 1, - timeDelta = Date.now() - this.lastMouseWheelEventTime, - divider = 3 + Math.max(0, 30 - timeDelta); - - // Update cache - this.lastMouseWheelEventTime = Date.now(); - - // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0) - if ("deltaMode" in evt && evt.deltaMode === 0 && evt.wheelDelta) { - delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY; - } - - delta = - -0.3 < delta && delta < 0.3 - ? delta - : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider; - - var inversedScreenCTM = this.svg.getScreenCTM().inverse(), - relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform( - inversedScreenCTM - ), - zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior - - this.zoomAtPoint(zoom, relativeMousePoint); -}; - -/** - * Zoom in at a SVG point - * - * @param {SVGPoint} point - * @param {Float} zoomScale Number representing how much to zoom - * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value. - * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%) - */ -SvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) { - var originalState = this.viewport.getOriginalState(); - - if (!zoomAbsolute) { - // Fit zoomScale in set bounds - if ( - this.getZoom() * zoomScale < - this.options.minZoom * originalState.zoom - ) { - zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom(); - } else if ( - this.getZoom() * zoomScale > - this.options.maxZoom * originalState.zoom - ) { - zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom(); - } - } else { - // Fit zoomScale in set bounds - zoomScale = Math.max( - this.options.minZoom * originalState.zoom, - Math.min(this.options.maxZoom * originalState.zoom, zoomScale) - ); - // Find relative scale to achieve desired scale - zoomScale = zoomScale / this.getZoom(); - } - - var oldCTM = this.viewport.getCTM(), - relativePoint = point.matrixTransform(oldCTM.inverse()), - modifier = this.svg - .createSVGMatrix() - .translate(relativePoint.x, relativePoint.y) - .scale(zoomScale) - .translate(-relativePoint.x, -relativePoint.y), - newCTM = oldCTM.multiply(modifier); - - if (newCTM.a !== oldCTM.a) { - this.viewport.setCTM(newCTM); - } -}; - -/** - * Zoom at center point - * - * @param {Float} scale - * @param {Boolean} absolute Marks zoom scale as relative or absolute - */ -SvgPanZoom.prototype.zoom = function(scale, absolute) { - this.zoomAtPoint( - scale, - SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height), - absolute - ); -}; - -/** - * Zoom used by public instance - * - * @param {Float} scale - * @param {Boolean} absolute Marks zoom scale as relative or absolute - */ -SvgPanZoom.prototype.publicZoom = function(scale, absolute) { - if (absolute) { - scale = this.computeFromRelativeZoom(scale); - } - - this.zoom(scale, absolute); -}; - -/** - * Zoom at point used by public instance - * - * @param {Float} scale - * @param {SVGPoint|Object} point An object that has x and y attributes - * @param {Boolean} absolute Marks zoom scale as relative or absolute - */ -SvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) { - if (absolute) { - // Transform zoom into a relative value - scale = this.computeFromRelativeZoom(scale); - } - - // If not a SVGPoint but has x and y then create a SVGPoint - if (Utils.getType(point) !== "SVGPoint") { - if ("x" in point && "y" in point) { - point = SvgUtils.createSVGPoint(this.svg, point.x, point.y); - } else { - throw new Error("Given point is invalid"); - } - } - - this.zoomAtPoint(scale, point, absolute); -}; - -/** - * Get zoom scale - * - * @return {Float} zoom scale - */ -SvgPanZoom.prototype.getZoom = function() { - return this.viewport.getZoom(); -}; - -/** - * Get zoom scale for public usage - * - * @return {Float} zoom scale - */ -SvgPanZoom.prototype.getRelativeZoom = function() { - return this.viewport.getRelativeZoom(); -}; - -/** - * Compute actual zoom from public zoom - * - * @param {Float} zoom - * @return {Float} zoom scale - */ -SvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) { - return zoom * this.viewport.getOriginalState().zoom; -}; - -/** - * Set zoom to initial state - */ -SvgPanZoom.prototype.resetZoom = function() { - var originalState = this.viewport.getOriginalState(); - - this.zoom(originalState.zoom, true); -}; - -/** - * Set pan to initial state - */ -SvgPanZoom.prototype.resetPan = function() { - this.pan(this.viewport.getOriginalState()); -}; - -/** - * Set pan and zoom to initial state - */ -SvgPanZoom.prototype.reset = function() { - this.resetZoom(); - this.resetPan(); -}; - -/** - * Handle double click event - * See handleMouseDown() for alternate detection method - * - * @param {Event} evt - */ -SvgPanZoom.prototype.handleDblClick = function(evt) { - if (this.options.preventMouseEventsDefault) { - if (evt.preventDefault) { - evt.preventDefault(); - } else { - evt.returnValue = false; - } - } - - // Check if target was a control button - if (this.options.controlIconsEnabled) { - var targetClass = evt.target.getAttribute("class") || ""; - if (targetClass.indexOf("svg-pan-zoom-control") > -1) { - return false; - } - } - - var zoomFactor; - - if (evt.shiftKey) { - zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed - } else { - zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2; - } - - var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform( - this.svg.getScreenCTM().inverse() - ); - this.zoomAtPoint(zoomFactor, point); -}; - -/** - * Handle click event - * - * @param {Event} evt - */ -SvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) { - if (this.options.preventMouseEventsDefault) { - if (evt.preventDefault) { - evt.preventDefault(); - } else { - evt.returnValue = false; - } - } - - Utils.mouseAndTouchNormalize(evt, this.svg); - - // Double click detection; more consistent than ondblclick - if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) { - this.handleDblClick(evt); - } else { - // Pan mode - this.state = "pan"; - this.firstEventCTM = this.viewport.getCTM(); - this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform( - this.firstEventCTM.inverse() - ); - } -}; - -/** - * Handle mouse move event - * - * @param {Event} evt - */ -SvgPanZoom.prototype.handleMouseMove = function(evt) { - if (this.options.preventMouseEventsDefault) { - if (evt.preventDefault) { - evt.preventDefault(); - } else { - evt.returnValue = false; - } - } - - if (this.state === "pan" && this.options.panEnabled) { - // Pan mode - var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform( - this.firstEventCTM.inverse() - ), - viewportCTM = this.firstEventCTM.translate( - point.x - this.stateOrigin.x, - point.y - this.stateOrigin.y - ); - - this.viewport.setCTM(viewportCTM); - } -}; - -/** - * Handle mouse button release event - * - * @param {Event} evt - */ -SvgPanZoom.prototype.handleMouseUp = function(evt) { - if (this.options.preventMouseEventsDefault) { - if (evt.preventDefault) { - evt.preventDefault(); - } else { - evt.returnValue = false; - } - } - - if (this.state === "pan") { - // Quit pan mode - this.state = "none"; - } -}; - -/** - * Adjust viewport size (only) so it will fit in SVG - * Does not center image - */ -SvgPanZoom.prototype.fit = function() { - var viewBox = this.viewport.getViewBox(), - newScale = Math.min( - this.width / viewBox.width, - this.height / viewBox.height - ); - - this.zoom(newScale, true); -}; - -/** - * Adjust viewport size (only) so it will contain the SVG - * Does not center image - */ -SvgPanZoom.prototype.contain = function() { - var viewBox = this.viewport.getViewBox(), - newScale = Math.max( - this.width / viewBox.width, - this.height / viewBox.height - ); - - this.zoom(newScale, true); -}; - -/** - * Adjust viewport pan (only) so it will be centered in SVG - * Does not zoom/fit/contain image - */ -SvgPanZoom.prototype.center = function() { - var viewBox = this.viewport.getViewBox(), - offsetX = - (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5, - offsetY = - (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5; - - this.getPublicInstance().pan({ x: offsetX, y: offsetY }); -}; - -/** - * Update content cached BorderBox - * Use when viewport contents change - */ -SvgPanZoom.prototype.updateBBox = function() { - this.viewport.simpleViewBoxCache(); -}; - -/** - * Pan to a rendered position - * - * @param {Object} point {x: 0, y: 0} - */ -SvgPanZoom.prototype.pan = function(point) { - var viewportCTM = this.viewport.getCTM(); - viewportCTM.e = point.x; - viewportCTM.f = point.y; - this.viewport.setCTM(viewportCTM); -}; - -/** - * Relatively pan the graph by a specified rendered position vector - * - * @param {Object} point {x: 0, y: 0} - */ -SvgPanZoom.prototype.panBy = function(point) { - var viewportCTM = this.viewport.getCTM(); - viewportCTM.e += point.x; - viewportCTM.f += point.y; - this.viewport.setCTM(viewportCTM); -}; - -/** - * Get pan vector - * - * @return {Object} {x: 0, y: 0} - */ -SvgPanZoom.prototype.getPan = function() { - var state = this.viewport.getState(); - - return { x: state.x, y: state.y }; -}; - -/** - * Recalculates cached svg dimensions and controls position - */ -SvgPanZoom.prototype.resize = function() { - // Get dimensions - var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized( - this.svg - ); - this.width = boundingClientRectNormalized.width; - this.height = boundingClientRectNormalized.height; - - // Recalculate original state - var viewport = this.viewport; - viewport.options.width = this.width; - viewport.options.height = this.height; - viewport.processCTM(); - - // Reposition control icons by re-enabling them - if (this.options.controlIconsEnabled) { - this.getPublicInstance().disableControlIcons(); - this.getPublicInstance().enableControlIcons(); - } -}; - -/** - * Unbind mouse events, free callbacks and destroy public instance - */ -SvgPanZoom.prototype.destroy = function() { - var that = this; - - // Free callbacks - this.beforeZoom = null; - this.onZoom = null; - this.beforePan = null; - this.onPan = null; - this.onUpdatedCTM = null; - - // Destroy custom event handlers - // eslint-disable-next-line eqeqeq - if (this.options.customEventsHandler != null) { - this.options.customEventsHandler.destroy({ - svgElement: this.svg, - eventsListenerElement: this.options.eventsListenerElement, - instance: this.getPublicInstance() - }); - } - - // Unbind eventListeners - for (var event in this.eventListeners) { - (this.options.eventsListenerElement || this.svg).removeEventListener( - event, - this.eventListeners[event], - !this.options.preventMouseEventsDefault ? passiveListenerOption : false - ); - } - - // Unbind wheelListener - this.disableMouseWheelZoom(); - - // Remove control icons - this.getPublicInstance().disableControlIcons(); - - // Reset zoom and pan - this.reset(); - - // Remove instance from instancesStore - instancesStore = instancesStore.filter(function(instance) { - return instance.svg !== that.svg; - }); - - // Delete options and its contents - delete this.options; - - // Delete viewport to make public shadow viewport functions uncallable - delete this.viewport; - - // Destroy public instance and rewrite getPublicInstance - delete this.publicInstance; - delete this.pi; - this.getPublicInstance = function() { - return null; - }; -}; - -/** - * Returns a public instance object - * - * @return {Object} Public instance object - */ -SvgPanZoom.prototype.getPublicInstance = function() { - var that = this; - - // Create cache - if (!this.publicInstance) { - this.publicInstance = this.pi = { - // Pan - enablePan: function() { - that.options.panEnabled = true; - return that.pi; - }, - disablePan: function() { - that.options.panEnabled = false; - return that.pi; - }, - isPanEnabled: function() { - return !!that.options.panEnabled; - }, - pan: function(point) { - that.pan(point); - return that.pi; - }, - panBy: function(point) { - that.panBy(point); - return that.pi; - }, - getPan: function() { - return that.getPan(); - }, - // Pan event - setBeforePan: function(fn) { - that.options.beforePan = - fn === null ? null : Utils.proxy(fn, that.publicInstance); - return that.pi; - }, - setOnPan: function(fn) { - that.options.onPan = - fn === null ? null : Utils.proxy(fn, that.publicInstance); - return that.pi; - }, - // Zoom and Control Icons - enableZoom: function() { - that.options.zoomEnabled = true; - return that.pi; - }, - disableZoom: function() { - that.options.zoomEnabled = false; - return that.pi; - }, - isZoomEnabled: function() { - return !!that.options.zoomEnabled; - }, - enableControlIcons: function() { - if (!that.options.controlIconsEnabled) { - that.options.controlIconsEnabled = true; - ControlIcons.enable(that); - } - return that.pi; - }, - disableControlIcons: function() { - if (that.options.controlIconsEnabled) { - that.options.controlIconsEnabled = false; - ControlIcons.disable(that); - } - return that.pi; - }, - isControlIconsEnabled: function() { - return !!that.options.controlIconsEnabled; - }, - // Double click zoom - enableDblClickZoom: function() { - that.options.dblClickZoomEnabled = true; - return that.pi; - }, - disableDblClickZoom: function() { - that.options.dblClickZoomEnabled = false; - return that.pi; - }, - isDblClickZoomEnabled: function() { - return !!that.options.dblClickZoomEnabled; - }, - // Mouse wheel zoom - enableMouseWheelZoom: function() { - that.enableMouseWheelZoom(); - return that.pi; - }, - disableMouseWheelZoom: function() { - that.disableMouseWheelZoom(); - return that.pi; - }, - isMouseWheelZoomEnabled: function() { - return !!that.options.mouseWheelZoomEnabled; - }, - // Zoom scale and bounds - setZoomScaleSensitivity: function(scale) { - that.options.zoomScaleSensitivity = scale; - return that.pi; - }, - setMinZoom: function(zoom) { - that.options.minZoom = zoom; - return that.pi; - }, - setMaxZoom: function(zoom) { - that.options.maxZoom = zoom; - return that.pi; - }, - // Zoom event - setBeforeZoom: function(fn) { - that.options.beforeZoom = - fn === null ? null : Utils.proxy(fn, that.publicInstance); - return that.pi; - }, - setOnZoom: function(fn) { - that.options.onZoom = - fn === null ? null : Utils.proxy(fn, that.publicInstance); - return that.pi; - }, - // Zooming - zoom: function(scale) { - that.publicZoom(scale, true); - return that.pi; - }, - zoomBy: function(scale) { - that.publicZoom(scale, false); - return that.pi; - }, - zoomAtPoint: function(scale, point) { - that.publicZoomAtPoint(scale, point, true); - return that.pi; - }, - zoomAtPointBy: function(scale, point) { - that.publicZoomAtPoint(scale, point, false); - return that.pi; - }, - zoomIn: function() { - this.zoomBy(1 + that.options.zoomScaleSensitivity); - return that.pi; - }, - zoomOut: function() { - this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity)); - return that.pi; - }, - getZoom: function() { - return that.getRelativeZoom(); - }, - // CTM update - setOnUpdatedCTM: function(fn) { - that.options.onUpdatedCTM = - fn === null ? null : Utils.proxy(fn, that.publicInstance); - return that.pi; - }, - // Reset - resetZoom: function() { - that.resetZoom(); - return that.pi; - }, - resetPan: function() { - that.resetPan(); - return that.pi; - }, - reset: function() { - that.reset(); - return that.pi; - }, - // Fit, Contain and Center - fit: function() { - that.fit(); - return that.pi; - }, - contain: function() { - that.contain(); - return that.pi; - }, - center: function() { - that.center(); - return that.pi; - }, - // Size and Resize - updateBBox: function() { - that.updateBBox(); - return that.pi; - }, - resize: function() { - that.resize(); - return that.pi; - }, - getSizes: function() { - return { - width: that.width, - height: that.height, - realZoom: that.getZoom(), - viewBox: that.viewport.getViewBox() - }; - }, - // Destroy - destroy: function() { - that.destroy(); - return that.pi; - } - }; - } - - return this.publicInstance; -}; - -/** - * Stores pairs of instances of SvgPanZoom and SVG - * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom} - * - * @type {Array} - */ -var instancesStore = []; - -var svgPanZoom = function(elementOrSelector, options) { - var svg = Utils.getSvg(elementOrSelector); - - if (svg === null) { - return null; - } else { - // Look for existent instance - for (var i = instancesStore.length - 1; i >= 0; i--) { - if (instancesStore[i].svg === svg) { - return instancesStore[i].instance.getPublicInstance(); - } - } - - // If instance not found - create one - instancesStore.push({ - svg: svg, - instance: new SvgPanZoom(svg, options) - }); - - // Return just pushed instance - return instancesStore[ - instancesStore.length - 1 - ].instance.getPublicInstance(); - } -}; - -module.exports = svgPanZoom; - - -/***/ }), - -/***/ "../../node_modules/svg-pan-zoom/src/svg-utilities.js": -/*!************************************************************!*\ - !*** ../../node_modules/svg-pan-zoom/src/svg-utilities.js ***! - \************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -var Utils = __webpack_require__(/*! ./utilities */ "../../node_modules/svg-pan-zoom/src/utilities.js"), - _browser = "unknown"; - -// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser -if (/*@cc_on!@*/ false || !!document.documentMode) { - // internet explorer - _browser = "ie"; -} - -module.exports = { - svgNS: "http://www.w3.org/2000/svg", - xmlNS: "http://www.w3.org/XML/1998/namespace", - xmlnsNS: "http://www.w3.org/2000/xmlns/", - xlinkNS: "http://www.w3.org/1999/xlink", - evNS: "http://www.w3.org/2001/xml-events", - - /** - * Get svg dimensions: width and height - * - * @param {SVGSVGElement} svg - * @return {Object} {width: 0, height: 0} - */ - getBoundingClientRectNormalized: function(svg) { - if (svg.clientWidth && svg.clientHeight) { - return { width: svg.clientWidth, height: svg.clientHeight }; - } else if (!!svg.getBoundingClientRect()) { - return svg.getBoundingClientRect(); - } else { - throw new Error("Cannot get BoundingClientRect for SVG."); - } - }, - - /** - * Gets g element with class of "viewport" or creates it if it doesn't exist - * - * @param {SVGSVGElement} svg - * @return {SVGElement} g (group) element - */ - getOrCreateViewport: function(svg, selector) { - var viewport = null; - - if (Utils.isElement(selector)) { - viewport = selector; - } else { - viewport = svg.querySelector(selector); - } - - // Check if there is just one main group in SVG - if (!viewport) { - var childNodes = Array.prototype.slice - .call(svg.childNodes || svg.children) - .filter(function(el) { - return el.nodeName !== "defs" && el.nodeName !== "#text"; - }); - - // Node name should be SVGGElement and should have no transform attribute - // Groups with transform are not used as viewport because it involves parsing of all transform possibilities - if ( - childNodes.length === 1 && - childNodes[0].nodeName === "g" && - childNodes[0].getAttribute("transform") === null - ) { - viewport = childNodes[0]; - } - } - - // If no favorable group element exists then create one - if (!viewport) { - var viewportId = - "viewport-" + new Date().toISOString().replace(/\D/g, ""); - viewport = document.createElementNS(this.svgNS, "g"); - viewport.setAttribute("id", viewportId); - - // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes - var svgChildren = svg.childNodes || svg.children; - if (!!svgChildren && svgChildren.length > 0) { - for (var i = svgChildren.length; i > 0; i--) { - // Move everything into viewport except defs - if (svgChildren[svgChildren.length - i].nodeName !== "defs") { - viewport.appendChild(svgChildren[svgChildren.length - i]); - } - } - } - svg.appendChild(viewport); - } - - // Parse class names - var classNames = []; - if (viewport.getAttribute("class")) { - classNames = viewport.getAttribute("class").split(" "); - } - - // Set class (if not set already) - if (!~classNames.indexOf("svg-pan-zoom_viewport")) { - classNames.push("svg-pan-zoom_viewport"); - viewport.setAttribute("class", classNames.join(" ")); - } - - return viewport; - }, - - /** - * Set SVG attributes - * - * @param {SVGSVGElement} svg - */ - setupSvgAttributes: function(svg) { - // Setting default attributes - svg.setAttribute("xmlns", this.svgNS); - svg.setAttributeNS(this.xmlnsNS, "xmlns:xlink", this.xlinkNS); - svg.setAttributeNS(this.xmlnsNS, "xmlns:ev", this.evNS); - - // Needed for Internet Explorer, otherwise the viewport overflows - if (svg.parentNode !== null) { - var style = svg.getAttribute("style") || ""; - if (style.toLowerCase().indexOf("overflow") === -1) { - svg.setAttribute("style", "overflow: hidden; " + style); - } - } - }, - - /** - * How long Internet Explorer takes to finish updating its display (ms). - */ - internetExplorerRedisplayInterval: 300, - - /** - * Forces the browser to redisplay all SVG elements that rely on an - * element defined in a 'defs' section. It works globally, for every - * available defs element on the page. - * The throttling is intentionally global. - * - * This is only needed for IE. It is as a hack to make markers (and 'use' elements?) - * visible after pan/zoom when there are multiple SVGs on the page. - * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/ - * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62 - */ - refreshDefsGlobal: Utils.throttle( - function() { - var allDefs = document.querySelectorAll("defs"); - var allDefsCount = allDefs.length; - for (var i = 0; i < allDefsCount; i++) { - var thisDefs = allDefs[i]; - thisDefs.parentNode.insertBefore(thisDefs, thisDefs); - } - }, - this ? this.internetExplorerRedisplayInterval : null - ), - - /** - * Sets the current transform matrix of an element - * - * @param {SVGElement} element - * @param {SVGMatrix} matrix CTM - * @param {SVGElement} defs - */ - setCTM: function(element, matrix, defs) { - var that = this, - s = - "matrix(" + - matrix.a + - "," + - matrix.b + - "," + - matrix.c + - "," + - matrix.d + - "," + - matrix.e + - "," + - matrix.f + - ")"; - - element.setAttributeNS(null, "transform", s); - if ("transform" in element.style) { - element.style.transform = s; - } else if ("-ms-transform" in element.style) { - element.style["-ms-transform"] = s; - } else if ("-webkit-transform" in element.style) { - element.style["-webkit-transform"] = s; - } - - // IE has a bug that makes markers disappear on zoom (when the matrix "a" and/or "d" elements change) - // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10 - // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/ - if (_browser === "ie" && !!defs) { - // this refresh is intended for redisplaying the SVG during zooming - defs.parentNode.insertBefore(defs, defs); - // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG - // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that - // are located under any other element(s). - window.setTimeout(function() { - that.refreshDefsGlobal(); - }, that.internetExplorerRedisplayInterval); - } - }, - - /** - * Instantiate an SVGPoint object with given event coordinates - * - * @param {Event} evt - * @param {SVGSVGElement} svg - * @return {SVGPoint} point - */ - getEventPoint: function(evt, svg) { - var point = svg.createSVGPoint(); - - Utils.mouseAndTouchNormalize(evt, svg); - - point.x = evt.clientX; - point.y = evt.clientY; - - return point; - }, - - /** - * Get SVG center point - * - * @param {SVGSVGElement} svg - * @return {SVGPoint} - */ - getSvgCenterPoint: function(svg, width, height) { - return this.createSVGPoint(svg, width / 2, height / 2); - }, - - /** - * Create a SVGPoint with given x and y - * - * @param {SVGSVGElement} svg - * @param {Number} x - * @param {Number} y - * @return {SVGPoint} - */ - createSVGPoint: function(svg, x, y) { - var point = svg.createSVGPoint(); - point.x = x; - point.y = y; - - return point; - } -}; - - -/***/ }), - -/***/ "../../node_modules/svg-pan-zoom/src/uniwheel.js": -/*!*******************************************************!*\ - !*** ../../node_modules/svg-pan-zoom/src/uniwheel.js ***! - \*******************************************************/ -/***/ ((module) => { - -// uniwheel 0.1.2 (customized) -// A unified cross browser mouse wheel event handler -// https://github.com/teemualap/uniwheel - -module.exports = (function(){ - - //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel - - var prefix = "", _addEventListener, _removeEventListener, support, fns = []; - var passiveOption = {passive: true}; - - // detect event model - if ( window.addEventListener ) { - _addEventListener = "addEventListener"; - _removeEventListener = "removeEventListener"; - } else { - _addEventListener = "attachEvent"; - _removeEventListener = "detachEvent"; - prefix = "on"; - } - - // detect available wheel event - support = "onwheel" in document.createElement("div") ? "wheel" : // Modern browsers support "wheel" - document.onmousewheel !== undefined ? "mousewheel" : // Webkit and IE support at least "mousewheel" - "DOMMouseScroll"; // let's assume that remaining browsers are older Firefox - - - function createCallback(element,callback) { - - var fn = function(originalEvent) { - - !originalEvent && ( originalEvent = window.event ); - - // create a normalized event object - var event = { - // keep a ref to the original event object - originalEvent: originalEvent, - target: originalEvent.target || originalEvent.srcElement, - type: "wheel", - deltaMode: originalEvent.type == "MozMousePixelScroll" ? 0 : 1, - deltaX: 0, - delatZ: 0, - preventDefault: function() { - originalEvent.preventDefault ? - originalEvent.preventDefault() : - originalEvent.returnValue = false; - } - }; - - // calculate deltaY (and deltaX) according to the event - if ( support == "mousewheel" ) { - event.deltaY = - 1/40 * originalEvent.wheelDelta; - // Webkit also support wheelDeltaX - originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX ); - } else { - event.deltaY = originalEvent.detail; - } - - // it's time to fire the callback - return callback( event ); - - }; - - fns.push({ - element: element, - fn: fn, - }); - - return fn; - } - - function getCallback(element) { - for (var i = 0; i < fns.length; i++) { - if (fns[i].element === element) { - return fns[i].fn; - } - } - return function(){}; - } - - function removeCallback(element) { - for (var i = 0; i < fns.length; i++) { - if (fns[i].element === element) { - return fns.splice(i,1); - } - } - } - - function _addWheelListener(elem, eventName, callback, isPassiveListener ) { - var cb; - - if (support === "wheel") { - cb = callback; - } else { - cb = createCallback(elem, callback); - } - - elem[_addEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false); - } - - function _removeWheelListener(elem, eventName, callback, isPassiveListener ) { - - var cb; - - if (support === "wheel") { - cb = callback; - } else { - cb = getCallback(elem); - } - - elem[_removeEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false); - - removeCallback(elem); - } - - function addWheelListener( elem, callback, isPassiveListener ) { - _addWheelListener(elem, support, callback, isPassiveListener ); - - // handle MozMousePixelScroll in older Firefox - if( support == "DOMMouseScroll" ) { - _addWheelListener(elem, "MozMousePixelScroll", callback, isPassiveListener ); - } - } - - function removeWheelListener(elem, callback, isPassiveListener){ - _removeWheelListener(elem, support, callback, isPassiveListener); - - // handle MozMousePixelScroll in older Firefox - if( support == "DOMMouseScroll" ) { - _removeWheelListener(elem, "MozMousePixelScroll", callback, isPassiveListener); - } - } - - return { - on: addWheelListener, - off: removeWheelListener - }; - -})(); - - -/***/ }), - -/***/ "../../node_modules/svg-pan-zoom/src/utilities.js": -/*!********************************************************!*\ - !*** ../../node_modules/svg-pan-zoom/src/utilities.js ***! - \********************************************************/ -/***/ ((module) => { - -module.exports = { - /** - * Extends an object - * - * @param {Object} target object to extend - * @param {Object} source object to take properties from - * @return {Object} extended object - */ - extend: function(target, source) { - target = target || {}; - for (var prop in source) { - // Go recursively - if (this.isObject(source[prop])) { - target[prop] = this.extend(target[prop], source[prop]); - } else { - target[prop] = source[prop]; - } - } - return target; - }, - - /** - * Checks if an object is a DOM element - * - * @param {Object} o HTML element or String - * @return {Boolean} returns true if object is a DOM element - */ - isElement: function(o) { - return ( - o instanceof HTMLElement || - o instanceof SVGElement || - o instanceof SVGSVGElement || //DOM2 - (o && - typeof o === "object" && - o !== null && - o.nodeType === 1 && - typeof o.nodeName === "string") - ); - }, - - /** - * Checks if an object is an Object - * - * @param {Object} o Object - * @return {Boolean} returns true if object is an Object - */ - isObject: function(o) { - return Object.prototype.toString.call(o) === "[object Object]"; - }, - - /** - * Checks if variable is Number - * - * @param {Integer|Float} n - * @return {Boolean} returns true if variable is Number - */ - isNumber: function(n) { - return !isNaN(parseFloat(n)) && isFinite(n); - }, - - /** - * Search for an SVG element - * - * @param {Object|String} elementOrSelector DOM Element or selector String - * @return {Object|Null} SVG or null - */ - getSvg: function(elementOrSelector) { - var element, svg; - - if (!this.isElement(elementOrSelector)) { - // If selector provided - if ( - typeof elementOrSelector === "string" || - elementOrSelector instanceof String - ) { - // Try to find the element - element = document.querySelector(elementOrSelector); - - if (!element) { - throw new Error( - "Provided selector did not find any elements. Selector: " + - elementOrSelector - ); - return null; - } - } else { - throw new Error("Provided selector is not an HTML object nor String"); - return null; - } - } else { - element = elementOrSelector; - } - - if (element.tagName.toLowerCase() === "svg") { - svg = element; - } else { - if (element.tagName.toLowerCase() === "object") { - svg = element.contentDocument.documentElement; - } else { - if (element.tagName.toLowerCase() === "embed") { - svg = element.getSVGDocument().documentElement; - } else { - if (element.tagName.toLowerCase() === "img") { - throw new Error( - 'Cannot script an SVG in an "img" element. Please use an "object" element or an in-line SVG.' - ); - } else { - throw new Error("Cannot get SVG."); - } - return null; - } - } - } - - return svg; - }, - - /** - * Attach a given context to a function - * @param {Function} fn Function - * @param {Object} context Context - * @return {Function} Function with certain context - */ - proxy: function(fn, context) { - return function() { - return fn.apply(context, arguments); - }; - }, - - /** - * Returns object type - * Uses toString that returns [object SVGPoint] - * And than parses object type from string - * - * @param {Object} o Any object - * @return {String} Object type - */ - getType: function(o) { - return Object.prototype.toString - .apply(o) - .replace(/^\[object\s/, "") - .replace(/\]$/, ""); - }, - - /** - * If it is a touch event than add clientX and clientY to event object - * - * @param {Event} evt - * @param {SVGSVGElement} svg - */ - mouseAndTouchNormalize: function(evt, svg) { - // If no clientX then fallback - if (evt.clientX === void 0 || evt.clientX === null) { - // Fallback - evt.clientX = 0; - evt.clientY = 0; - - // If it is a touch event - if (evt.touches !== void 0 && evt.touches.length) { - if (evt.touches[0].clientX !== void 0) { - evt.clientX = evt.touches[0].clientX; - evt.clientY = evt.touches[0].clientY; - } else if (evt.touches[0].pageX !== void 0) { - var rect = svg.getBoundingClientRect(); - - evt.clientX = evt.touches[0].pageX - rect.left; - evt.clientY = evt.touches[0].pageY - rect.top; - } - // If it is a custom event - } else if (evt.originalEvent !== void 0) { - if (evt.originalEvent.clientX !== void 0) { - evt.clientX = evt.originalEvent.clientX; - evt.clientY = evt.originalEvent.clientY; - } - } - } - }, - - /** - * Check if an event is a double click/tap - * TODO: For touch gestures use a library (hammer.js) that takes in account other events - * (touchmove and touchend). It should take in account tap duration and traveled distance - * - * @param {Event} evt - * @param {Event} prevEvt Previous Event - * @return {Boolean} - */ - isDblClick: function(evt, prevEvt) { - // Double click detected by browser - if (evt.detail === 2) { - return true; - } - // Try to compare events - else if (prevEvt !== void 0 && prevEvt !== null) { - var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms - touchesDistance = Math.sqrt( - Math.pow(evt.clientX - prevEvt.clientX, 2) + - Math.pow(evt.clientY - prevEvt.clientY, 2) - ); - - return timeStampDiff < 250 && touchesDistance < 10; - } - - // Nothing found - return false; - }, - - /** - * Returns current timestamp as an integer - * - * @return {Number} - */ - now: - Date.now || - function() { - return new Date().getTime(); - }, - - // From underscore. - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. Normally, the throttled function will run - // as much as it can, without ever going more than once per `wait` duration; - // but if you'd like to disable the execution on the leading edge, pass - // `{leading: false}`. To disable execution on the trailing edge, ditto. - throttle: function(func, wait, options) { - var that = this; - var context, args, result; - var timeout = null; - var previous = 0; - if (!options) { - options = {}; - } - var later = function() { - previous = options.leading === false ? 0 : that.now(); - timeout = null; - result = func.apply(context, args); - if (!timeout) { - context = args = null; - } - }; - return function() { - var now = that.now(); - if (!previous && options.leading === false) { - previous = now; - } - var remaining = wait - (now - previous); - context = this; // eslint-disable-line consistent-this - args = arguments; - if (remaining <= 0 || remaining > wait) { - clearTimeout(timeout); - timeout = null; - previous = now; - result = func.apply(context, args); - if (!timeout) { - context = args = null; - } - } else if (!timeout && options.trailing !== false) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }, - - /** - * Create a requestAnimationFrame simulation - * - * @param {Number|String} refreshRate - * @return {Function} - */ - createRequestAnimationFrame: function(refreshRate) { - var timeout = null; - - // Convert refreshRate to timeout - if (refreshRate !== "auto" && refreshRate < 60 && refreshRate > 1) { - timeout = Math.floor(1000 / refreshRate); - } - - if (timeout === null) { - return window.requestAnimationFrame || requestTimeout(33); - } else { - return requestTimeout(timeout); - } - } -}; - -/** - * Create a callback that will execute after a given timeout - * - * @param {Function} timeout - * @return {Function} - */ -function requestTimeout(timeout) { - return function(callback) { - window.setTimeout(callback, timeout); - }; -} - - -/***/ }), - -/***/ "../../node_modules/tau-prolog/modules/core.js": -/*!*****************************************************!*\ - !*** ../../node_modules/tau-prolog/modules/core.js ***! - \*****************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -(function() { - - // VERSION - var version = { major: 0, minor: 3, patch: 4, status: "beta" }; - - - - // IO FILE SYSTEM - - // Virtual file - function TauFile(name, type, parent, text) { - text = text === undefined ? "" : text; - this.name = name; - this.type = type; - this.parent = parent; - this.text = text; - this.created = Date.now() / 1000; - this.modified = this.created; - } - - TauFile.prototype.get = function(length, position) { - if(position === this.text.length) { - return "end_of_stream"; - } else if(position > this.text.length) { - return "end_of_stream"; - } else { - return this.text.substring(position, position+length); - } - }; - - TauFile.prototype.eof = function(position) { - return position === this.text.length; - }; - - TauFile.prototype.put = function(text, position) { - if(position === "end_of_stream") { - this.text += text; - return true; - } else if(position === "past_end_of_stream") { - return null; - } else { - this.text = this.text.substring(0, position) + text + this.text.substring(position+text.length); - return true; - } - }; - - TauFile.prototype.get_byte = function(position) { - if(position === "end_of_stream") - return -1; - var index = Math.floor(position/2); - if(this.text.length <= index) - return -1; - var code = codePointAt(this.text[Math.floor(position/2)], 0); - if(position % 2 === 0) - return code & 0xff; - else - return code / 256 >>> 0; - }; - - TauFile.prototype.put_byte = function(byte, position) { - var index = position === "end_of_stream" ? this.text.length : Math.floor(position/2); - if(this.text.length < index) - return null; - var code = this.text.length === index ? -1 : codePointAt(this.text[Math.floor(position/2)], 0); - if(position % 2 === 0) { - code = code / 256 >>> 0; - code = ((code & 0xff) << 8) | (byte & 0xff); - } else { - code = code & 0xff; - code = ((byte & 0xff) << 8) | (code & 0xff); - } - if(this.text.length === index) - this.text += fromCodePoint(code); - else - this.text = this.text.substring(0, index) + fromCodePoint(code) + this.text.substring(index+1); - return true; - }; - - TauFile.prototype.flush = function() { - return true; - }; - - TauFile.prototype.close = function() { - this.modified = Date.now() / 1000; - return true; - }; - - TauFile.prototype.size = function() { - return this.text.length; - }; - - // Virtual directory - function TauDirectory(name, parent) { - this.name = name; - this.parent = parent; - this.files = {}; - this.length = 0; - this.created = Date.now() / 1000; - this.modified = this.created; - } - - TauDirectory.prototype.lookup = function(file) { - if(this.files.hasOwnProperty(file)) - return this.files[file]; - return null; - }; - - TauDirectory.prototype.push = function(name, file) { - if(!this.files.hasOwnProperty(name)) - this.length++; - this.files[name] = file; - this.modified = Date.now() / 1000; - }; - - TauDirectory.prototype.remove = function(name) { - if(this.files.hasOwnProperty(name)) { - this.length--; - delete this.files[name]; - this.modified = Date.now() / 1000; - } - }; - - TauDirectory.prototype.empty = function() { - return this.length === 0; - }; - - TauDirectory.prototype.size = function() { - return 4096; - }; - - // Virtual file system for browser - tau_file_system = { - // Current files - files: new TauDirectory("/", "/", null), - // Open file - open: function(path, type, mode) { - var dirs = path.replace(/\/$/, "").split("/"); - var dir = tau_file_system.files; - var name = dirs[dirs.length-1]; - for(var i = 1; i < dirs.length-1; i++) { - dir = dir.lookup(dirs[i]); - if(!pl.type.is_directory(dir)) - return null; - } - var file = dir.lookup(name); - if(file === null) { - if(mode === "read") - return null; - file = new TauFile(name, type, dir); - dir.push(name, file); - } else if(!pl.type.is_file(file)) { - return null; - } - if(mode === "write") - file.text = ""; - return file; - }, - // Get item - get: function(path) { - var dirs = path.replace(/\/$/, "").split("/"); - var file = tau_file_system.files; - for(var i = 1; i < dirs.length; i++) - if(pl.type.is_directory(file)) - file = file.lookup(dirs[i]); - else - return null; - return file; - } - }; - - // User input for browser - tau_user_input = { - buffer: "", - get: function( length, _ ) { - var text; - while( tau_user_input.buffer.length < length ) { - text = window.prompt(); - if( text.length === 0 ) - return "end_of_stream"; - if( text ) { - tau_user_input.buffer += text; - } - } - text = tau_user_input.buffer.substr( 0, length ); - tau_user_input.buffer = tau_user_input.buffer.substr( length ); - return text; - }, - eof: function(_) { - return false; - } - }; - - // User output for browser - tau_user_output = { - put: function( text, _ ) { - console.log( text ); - return true; - }, - flush: function() { - return true; - } - }; - - // User error for browser - tau_user_error = { - put: function( text, _ ) { - (console.error || console.log)( text ); - return true; - }, - flush: function() { - return true; - } - }; - - // Virtual file system for Node.js - nodejs_file_system = { - // Open file - open: function( path, type, mode ) { - var fd, fs = __webpack_require__(/*! fs */ "?1914"); - if( mode === "read" && !fs.existsSync( path ) ) - return null; - try { - fd = fs.openSync( path, mode[0] ); - } catch(ex) { - return false; - } - return { - get: function( length, position ) { - var buffer = new Buffer( length ); - fs.readSync( fd, buffer, 0, length, position ); - var end_of_file = true; - var text = buffer.toString(); - for(var i = 0; i < length && end_of_file; i++) - end_of_file = text[i] === "\u0000"; - return end_of_file ? "end_of_stream" : buffer.toString(); - }, - eof: function(position) { - var stats = fs.statSync(path) - return position === stats["size"]; - }, - put: function( text, position ) { - var buffer = Buffer.from( text ); - if( position === "end_of_stream" ) - fs.writeSync( fd, buffer ); - else if( position === "past_end_of_stream" ) - return null; - else - fs.writeSync( fd, buffer, 0, buffer.length, position ); - return true; - }, - get_byte: function( position ) { - try { - var buffer = Buffer.alloc(1); - var bytesRead = fs.readSync(fd, buffer, 0, 1, position); - //var _text = buffer.toString("utf8", 0, bytesRead); - var end_of_file = bytesRead < 1; - return end_of_file ? "end_of_stream" : buffer.readUInt8(0); - } catch(ex) { - return "end_of_stream"; - } - }, - put_byte: function(byte, position) { - var buffer = Buffer.from([byte]); - if(position === "end_of_stream") - fs.writeSync(fd, buffer); - else if(position === "past_end_of_stream") - return null; - else - fs.writeSync(fd, buffer, 0, buffer.length, position); - return true; - }, - flush: function() { - return true; - }, - close: function() { - fs.closeSync( fd ); - return true; - } - }; - } - }; - - // User input for Node.js - nodejs_user_input = { - buffer: "", - get: function( length, _ ) { - var text; - var readlineSync = __webpack_require__(/*! readline-sync */ "../../node_modules/readline-sync/lib/readline-sync.js"); - while( nodejs_user_input.buffer.length < length ) - nodejs_user_input.buffer += readlineSync.question("", {keepWhitespace: true}) + "\n"; - text = nodejs_user_input.buffer.substr( 0, length ); - nodejs_user_input.buffer = nodejs_user_input.buffer.substr( length ); - return text; - }, - eof: function(length) { - return false; - } - }; - - // User output for Node.js - nodejs_user_output = { - put: function( text, _ ) { - process.stdout.write( text ); - return true; - }, - flush: function() { - return true; - } - }; - - // User error for Node.js - nodejs_user_error = { - put: function( text, _ ) { - process.stderr.write( text ); - return true; - }, - flush: function() { - return true; - } - }; - - - - // COMPATITBILITY - - var indexOf; - if(!Array.prototype.indexOf) { - indexOf = function(array, elem) { - var len = array.length; - for(var i = 0; i < len; i++) { - if(elem === array[i]) return i; - } - return -1; - }; - } else { - indexOf = function(array, elem) { - return array.indexOf(elem); - }; - } - - var reduce = function(array, fn) { - if(array.length === 0) return undefined; - var elem = array[0]; - var len = array.length; - for(var i = 1; i < len; i++) { - elem = fn(elem, array[i]); - } - return elem; - }; - - var map; - if(!Array.prototype.map) { - map = function(array, fn) { - var a = []; - var len = array.length; - for(var i = 0; i < len; i++) { - a.push( fn(array[i]) ); - } - return a; - }; - } else { - map = function(array, fn) { - return array.map(fn); - }; - } - - var filter; - if(!Array.prototype.filter) { - filter = function(array, fn) { - var a = []; - var len = array.length; - for(var i = 0; i < len; i++) { - if(fn(array[i])) - a.push( array[i] ); - } - return a; - }; - } else { - filter = function(array, fn) { - return array.filter(fn); - }; - } - - var codePointAt; - if(!String.prototype.codePointAt) { - codePointAt = function(str, i) { - return str.charCodeAt(i); - }; - } else { - codePointAt = function(str, i) { - return str.codePointAt(i); - }; - } - - var fromCodePoint; - if(!String.fromCodePoint) { - fromCodePoint = function() { - return String.fromCharCode.apply(null, arguments); - }; - } else { - fromCodePoint = function() { - return String.fromCodePoint.apply(null, arguments); - }; - } - - var stringLength; - var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; - if(Array.from) - stringLength = function(str) { - return Array.from(str).length; - }; - else - stringLength = function(str) { - return str.replace(regexAstralSymbols, '_').length; - }; - - - - // PARSER - - var ERROR = 0; - var SUCCESS = 1; - - var regex_escape = /(\\a)|(\\b)|(\\d)|(\\e)|(\\f)|(\\n)|(\\r)|(\\s)|(\\t)|(\\v)|\\x([0-9a-fA-F]+)\\|\\([0-7]+)\\|(\\\\)|(\\')|('')|(\\")|(\\`)|(\\.)|(.)/g; - var escape_map = {"\\a": 7, "\\b": 8, "\\d": 127, "\\e": 27, "\\f": 12, "\\n": 10, "\\r": 13, "\\s": 32, "\\t": 9, "\\v": 11}; - function escape(str) { - var stack = []; - var _error = false; - str.replace(regex_escape, function(match, a, b, d, e, f, n, r, s, t, v, hex, octal, back, single, dsingle, double, backquote, error, char) { - switch(true) { - case hex !== undefined: - stack.push( parseInt(hex, 16) ); - return ""; - case octal !== undefined: - stack.push( parseInt(octal, 8) ); - return ""; - case back !== undefined: - case single !== undefined: - case dsingle !== undefined: - case double !== undefined: - case backquote !== undefined: - stack.push( codePointAt(match.substr(1),0) ); - return ""; - case char !== undefined: - stack.push( codePointAt(char,0) ); - return ""; - case error !== undefined: - _error = true; - default: - stack.push(escape_map[match]); - return ""; - } - }); - if(_error) - return null; - return stack; - } - - // Escape atoms - function escapeAtom(str, quote) { - var atom = ''; - if( str === "\\" ) return null; - if( str.length < 2 ) return str; - try { - str = str.replace(/((?:\\\\)+)|\\([0-7]+)\\/g, function(match, g1, g2) { - return g1 || fromCodePoint(parseInt(g2, 8)); - }); - str = str.replace(/((?:\\\\)+)|\\x([0-9a-fA-F]+)\\/g, function(match, g1, g2) { - return g1 || fromCodePoint(parseInt(g2, 16)); - }); - str = str.replace(/((?:\\\\)+)|\\u([0-9a-fA-F]{4})/g, function(match, g1, g2) { - return g1 || fromCodePoint(parseInt(g2, 16)); - }); - } catch(error) { - return null; - } - for( var i = 0; i < str.length; i++) { - var a = str.charAt(i); - var b = str.charAt(i+1); - if( a === quote && b === quote ) { - i++; - atom += quote; - } else if( a === '\\' ) { - if( ['a','b','f','n','r','t','v',"'",'"','\\','\a','\b','\f','\n','\r','\t','\v'].indexOf(b) !== -1 ) { - i += 1; - switch( b ) { - case 'a': atom += '\a'; break; - case 'b': atom += '\b'; break; - case 'f': atom += '\f'; break; - case 'n': atom += '\n'; break; - case 'r': atom += '\r'; break; - case 't': atom += '\t'; break; - case 'v': atom += '\v'; break; - case "'": atom += "'"; break; - case '"': atom += '"'; break; - case '\\': atom += '\\'; break; - } - } else { - return null; - } - } else { - atom += a; - } - } - return atom; - } - - // Redo escape - function redoEscape(str) { - var atom = ''; - for( var i = 0; i < str.length; i++) { - switch( str.charAt(i) ) { - case "'": atom += "\\'"; break; - case '\\': atom += '\\\\'; break; - //case '\a': atom += '\\a'; break; - case '\b': atom += '\\b'; break; - case '\f': atom += '\\f'; break; - case '\n': atom += '\\n'; break; - case '\r': atom += '\\r'; break; - case '\t': atom += '\\t'; break; - case '\v': atom += '\\v'; break; - default: atom += str.charAt(i); break; - } - } - return atom; - } - - // String to num - function convertNum(num) { - var n = num.substr(2); - switch(num.substr(0,2).toLowerCase()) { - case "0x": - return parseInt(n, 16); - case "0b": - return parseInt(n, 2); - case "0o": - return parseInt(n, 8); - case "0'": - return escape(n)[0]; - default: - return parseFloat(num); - } - } - - // Is graphic token - function is_graphic_token(string) { - return /^[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+/.test(string); - } - - // Regular expressions for tokens - var rules = { - whitespace: /^\s*(?:(?:%.*)|(?:\/\*(?:\n|\r|.)*?(?:\*\/|$))|(?:\s+))\s*/, - variable: /^(?:[A-Z_][a-zA-Z0-9_]*)/, - atom: /^(\!|,|;|[a-z][0-9a-zA-Z_]*|[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+|'(?:(?:'')|(?:\\\\)|(?:\\')|[^'])*')/, - number: /^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abdefnrstv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/, - string: /^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/, - l_brace: /^(?:\[)/, - r_brace: /^(?:\])/, - l_bracket: /^(?:\{)/, - r_bracket: /^(?:\})/, - bar: /^(?:\|)/, - l_paren: /^(?:\()/, - r_paren: /^(?:\))/ - }; - - // Replace chars of char_conversion session - function replace( thread, text ) { - if( thread.get_flag( "char_conversion" ).id === "on" ) { - return text.replace(/./g, function(char) { - return thread.get_char_conversion( char ); - }); - } - return text; - } - - // Tokenize strings - function Tokenizer(thread) { - this.thread = thread; - this.text = ""; // Current text to be analized - this.tokens = []; // Consumed tokens - } - - Tokenizer.prototype.set_last_tokens = function(tokens) { - return this.tokens = tokens; - }; - - Tokenizer.prototype.new_text = function(text) { - this.text = text; - this.tokens = []; - }; - - Tokenizer.prototype.get_tokens = function(init) { - var text; - var len = 0; // Total length respect to text - var line = 0; - var start = 0; - var tokens = []; - var last_is_blank; - - if(init) { - var token = this.tokens[init-1]; - len = token.len; - text = replace( this.thread, this.text.substr(token.len) ); - line = token.line; - start = token.start; - } - else - text = this.text; - - - // If there is nothing to be analized, return null - if(/^\s*$/.test(text)) - return null; - - while(text !== "") { - var matches = []; - last_is_blank = false; - - if(/^\n/.exec(text) !== null) { - line++; - start = 0; - len++; - text = text.replace(/\n/, ""); - last_is_blank = true; - continue; - } - - for(var rule in rules) { - if(rules.hasOwnProperty(rule)) { - var matchs = rules[rule].exec( text ); - if(matchs) { - matches.push({ - value: matchs[0], - name: rule, - matches: matchs - }); - } - } - } - - // Lexical error - if(!matches.length) - return this.set_last_tokens( [{ value: text, matches: [], name: "lexical", line: line, start: start }] ); - - var token = reduce( matches, function(a, b) { - return a.value.length >= b.value.length ? a : b; - } ); - - token.start = start; - token.line = line; - - text = text.replace(token.value, ""); - start += token.value.length; - len += token.value.length; - - var nl = (token.value.match(/\n/g) || []).length; - line += nl; - if(nl > 0) - start = token.value.length - token.value.lastIndexOf("\n") - 1; - token.line_count = line; - token.line_position = start; - - switch(token.name) { - case "atom": - token.raw = token.value; - if(token.value.charAt(0) === "'") { - token.value = escapeAtom( token.value.substring(1, token.value.length - 1), "'" ); - if( token.value === null ) { - token.name = "lexical"; - token.value = token.raw; - token.error = "unknown_escape_sequence"; - } - } - break; - case "number": - var substr = token.value.substring(0,2); - token.raw = token.value; - token.float = substr !== "0x" && substr !== "0'" && token.value.match(/[.eE]/) !== null; - token.value = convertNum( token.value ); - token.blank = last_is_blank; - if(!token.float && pl.flag.bounded.value.indicator === "true/0" && token.value > pl.flag.max_integer.value.value) { - token.name = "lexical"; - token.value = token.raw; - token.error = "int_overflow"; - } - break; - case "string": - var del = token.value.charAt(0); - token.raw = token.value; - token.value = escapeAtom( token.value.substring(1, token.value.length - 1), del ); - if( token.value === null ) { - token.name = "lexical"; - token.value = token.raw; - token.error = "unknown_escape_sequence" - } - break; - case "whitespace": - var last = tokens[tokens.length-1]; - if(last) last.space = true; - last_is_blank = true; - continue; - case "r_bracket": - if( tokens.length > 0 && tokens[tokens.length-1].name === "l_bracket" ) { - token = tokens.pop(); - token.name = "atom"; - token.value = "{}"; - token.raw = "{}"; - token.space = false; - } - break; - case "r_brace": - if( tokens.length > 0 && tokens[tokens.length-1].name === "l_brace" ) { - token = tokens.pop(); - token.name = "atom"; - token.value = "[]"; - token.raw = "[]"; - token.space = false; - } - break; - } - token.len = len; - tokens.push( token ); - last_is_blank = false; - } - - var t = this.set_last_tokens( tokens ); - return t.length === 0 ? null : t; - }; - - // Parse an expression - function parseExpr(thread, tokens, start, priority, toplevel) { - if(!tokens[start]) return {type: ERROR, value: pl.error.syntax(tokens[start-1], "expression expected", true)}; - var error; - - if(priority === "0") { - var token = tokens[start]; - switch(token.name) { - case "number": - return {type: SUCCESS, len: start+1, value: new pl.type.Num(token.value, token.float)}; - case "variable": - return {type: SUCCESS, len: start+1, value: new pl.type.Var(token.value)}; - case "string": - var str; - switch( thread.get_flag( "double_quotes" ).id ) { - case "atom":; - str = new Term( token.value, [] ); - break; - case "codes": - str = new Term( "[]", [] ); - for(var i = token.value.length-1; i >= 0; i-- ) - str = new Term( ".", [new pl.type.Num( codePointAt(token.value,i), false ), str] ); - break; - case "chars": - str = new Term( "[]", [] ); - for(var i = token.value.length-1; i >= 0; i-- ) - str = new Term( ".", [new pl.type.Term( token.value.charAt(i), [] ), str] ); - break; - } - return {type: SUCCESS, len: start+1, value: str}; - case "l_paren": - var expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true); - if(expr.type !== SUCCESS) return expr; - if(tokens[expr.len] && tokens[expr.len].name === "r_paren") { - expr.len++; - return expr; - } - return {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], ") or operator expected", !tokens[expr.len])} - case "l_bracket": - var expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true); - if(expr.type !== SUCCESS) return expr; - if(tokens[expr.len] && tokens[expr.len].name === "r_bracket") { - expr.len++; - expr.value = new Term( "{}", [expr.value] ); - return expr; - } - return {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], "} or operator expected", !tokens[expr.len])} - } - // Compound term - var result = parseTerm(thread, tokens, start, toplevel); - if(result.type === SUCCESS || result.derived) - return result; - // List - result = parseList(thread, tokens, start); - if(result.type === SUCCESS || result.derived) - return result; - // Unexpected - return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], token.error || "unexpected token")}; - } - - var max_priority = thread.__get_max_priority(); - var next_priority = thread.__get_next_priority(priority); - var aux_start = start; - - // Prefix operators - if(tokens[start].name === "atom" && tokens[start+1] && (tokens[start].space || tokens[start+1].name !== "l_paren")) { - var token = tokens[start++]; - var classes = thread.__lookup_operator_classes(priority, token.value); - - // Associative prefix operator - if(classes && classes.indexOf("fy") > -1) { - var expr = parseExpr(thread, tokens, start, priority, toplevel); - if(expr.type !== ERROR) { - if( token.value === "-" && !token.space && pl.type.is_number( expr.value ) ) { - return { - value: new pl.type.Num(-expr.value.value, expr.value.is_float), - len: expr.len, - type: SUCCESS - }; - } else { - return { - value: new pl.type.Term(token.value, [expr.value]), - len: expr.len, - type: SUCCESS - }; - } - } else { - error = expr; - } - // Non-associative prefix operator - } else if(classes && classes.indexOf("fx") > -1) { - var expr = parseExpr(thread, tokens, start, next_priority, toplevel); - if(expr.type !== ERROR) { - return { - value: new pl.type.Term(token.value, [expr.value]), - len: expr.len, - type: SUCCESS - }; - } else { - error = expr; - } - } - } - - start = aux_start; - var expr = parseExpr(thread, tokens, start, next_priority, toplevel); - if(expr.type === SUCCESS) { - start = expr.len; - var token = tokens[start]; - if(tokens[start] && ( - tokens[start].name === "atom" && thread.__lookup_operator_classes(priority, token.value) || - tokens[start].name === "bar" && thread.__lookup_operator_classes(priority, "|") - ) ) { - var next_priority_lt = next_priority; - var next_priority_eq = priority; - var classes = thread.__lookup_operator_classes(priority, token.value); - - if(classes.indexOf("xf") > -1) { - return { - value: new pl.type.Term(token.value, [expr.value]), - len: ++expr.len, - type: SUCCESS - }; - } else if(classes.indexOf("xfx") > -1) { - var expr2 = parseExpr(thread, tokens, start + 1, next_priority_lt, toplevel); - if(expr2.type === SUCCESS) { - return { - value: new pl.type.Term(token.value, [expr.value, expr2.value]), - len: expr2.len, - type: SUCCESS - }; - } else { - expr2.derived = true; - return expr2; - } - } else if(classes.indexOf("xfy") > -1) { - var expr2 = parseExpr(thread, tokens, start + 1, next_priority_eq, toplevel); - if(expr2.type === SUCCESS) { - return { - value: new pl.type.Term(token.value, [expr.value, expr2.value]), - len: expr2.len, - type: SUCCESS - }; - } else { - expr2.derived = true; - return expr2; - } - } else if(expr.type !== ERROR) { - while(true) { - start = expr.len; - var token = tokens[start]; - if(token && token.name === "atom" && thread.__lookup_operator_classes(priority, token.value)) { - var classes = thread.__lookup_operator_classes(priority, token.value); - if( classes.indexOf("yf") > -1 ) { - expr = { - value: new pl.type.Term(token.value, [expr.value]), - len: ++start, - type: SUCCESS - }; - } else if( classes.indexOf("yfx") > -1 ) { - var expr2 = parseExpr(thread, tokens, ++start, next_priority_lt, toplevel); - if(expr2.type === ERROR) { - expr2.derived = true; - return expr2; - } - start = expr2.len; - expr = { - value: new pl.type.Term(token.value, [expr.value, expr2.value]), - len: start, - type: SUCCESS - }; - } else { break; } - } else { break; } - } - } - } else { - error = {type: ERROR, value: pl.error.syntax(tokens[expr.len-1], "operator expected")}; - } - return expr; - } - return expr; - } - - // Parse a compound term - function parseTerm(thread, tokens, start, toplevel) { - if(!tokens[start] || (tokens[start].name === "atom" && tokens[start].raw === "." && !toplevel && (tokens[start].space || !tokens[start+1] || tokens[start+1].name !== "l_paren"))) - return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], "unfounded token")}; - var atom = tokens[start]; - var exprs = []; - if(tokens[start].name === "atom" && tokens[start].raw !== ",") { - start++; - if(tokens[start-1].space) return {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)}; - if(tokens[start] && tokens[start].name === "l_paren") { - if(tokens[start+1] && tokens[start+1].name === "r_paren") - return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1], "argument expected")}; - var expr = parseExpr(thread, tokens, ++start, "999", true); - if(expr.type === ERROR) { - if( expr.derived ) - return expr; - else - return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], "argument expected", !tokens[start])}; - } - exprs.push(expr.value); - start = expr.len; - while(tokens[start] && tokens[start].name === "atom" && tokens[start].value === ",") { - expr = parseExpr(thread, tokens, start+1, "999", true); - if(expr.type === ERROR) { - if( expr.derived ) - return expr; - else - return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], "argument expected", !tokens[start+1])}; - } - exprs.push(expr.value); - start = expr.len; - } - if(tokens[start] && tokens[start].name === "r_paren") start++; - else return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], ", or ) expected", !tokens[start])}; - } - return {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)}; - } - return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], "term expected")}; - } - - // Parse a list - function parseList(thread, tokens, start) { - if(!tokens[start]) - return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], "[ expected")}; - if(tokens[start] && tokens[start].name === "l_brace") { - var expr = parseExpr(thread, tokens, ++start, "999", true); - var exprs = [expr.value]; - var cons = undefined; - - if(expr.type === ERROR) { - if(tokens[start] && tokens[start].name === "r_brace") { - return {type: SUCCESS, len: start+1, value: new pl.type.Term("[]", [])}; - } - return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start], "] expected")}; - } - - start = expr.len; - - while(tokens[start] && tokens[start].name === "atom" && tokens[start].value === ",") { - expr = parseExpr(thread, tokens, start+1, "999", true); - if(expr.type === ERROR) { - if( expr.derived ) - return expr; - else - return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], "argument expected", !tokens[start+1])}; - } - exprs.push(expr.value); - start = expr.len; - } - var bar = false - if(tokens[start] && tokens[start].name === "bar") { - bar = true; - expr = parseExpr(thread, tokens, start+1, "999", true); - if(expr.type === ERROR) { - if( expr.derived ) - return expr; - else - return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], "argument expected", !tokens[start+1])}; - } - cons = expr.value; - start = expr.len; - } - if(tokens[start] && tokens[start].name === "r_brace") - return {type: SUCCESS, len: start+1, value: arrayToList(exprs, cons) }; - else - return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], bar ? "] expected" : ", or | or ] expected", !tokens[start])}; - } - return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], "list expected")}; - } - - // Parse a rule - function parseRule(thread, tokens, start) { - var line = tokens[start].line; - var expr = parseExpr(thread, tokens, start, thread.__get_max_priority(), false); - var rule = null; - var obj; - if(expr.type !== ERROR) { - start = expr.len; - if(tokens[start] && tokens[start].name === "atom" && tokens[start].raw === ".") { - start++; - if( pl.type.is_term(expr.value) ) { - if(expr.value.indicator === ":-/2") { - rule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1])); - obj = { - value: rule, - len: start, - type: SUCCESS - }; - } else if(expr.value.indicator === "-->/2") { - rule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1])); - rule = rule_to_dcg(rule, thread); - rule.body = body_conversion(rule.body); - if(!pl.type.is_rule(rule)) - return { - value: rule, - len: start, - type: ERROR - }; - obj = { - value: rule, - len: start, - type: pl.type.is_rule( rule ) ? SUCCESS : ERROR - }; - } else { - rule = new pl.type.Rule(expr.value, null); - obj = { - value: rule, - len: start, - type: SUCCESS - }; - } - if( rule ) { - var singleton = rule.singleton_variables(); - if( singleton.length > 0 ) - thread.throw_warning( pl.warning.singleton( singleton, rule.head.indicator, line ) ); - } - return obj; - } else { - return { type: ERROR, value: pl.error.syntax(tokens[start], "callable expected") }; - } - } else { - return { type: ERROR, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], ". or operator expected") }; - } - } - return expr; - } - - // Parse a program - function parseProgram(thread, string, options) { - var opts = {}; - options = options ? options : {}; - opts.success = options.success ? options.success : function(){}; - opts.error = options.error ? options.error : function(){}; - opts.from = options.from ? options.from : "$tau-js"; - opts.reconsult = options.reconsult !== undefined ? options.reconsult : true; - opts.reconsulted = options.reconsulted === undefined ? {} : options.reconsulted; - opts.context_module = options.context_module === undefined ? "user" : options.context_module; - opts.initialization = options.initialization === undefined ? [] : options.initialization; - opts.current_token = options.current_token === undefined ? 0 : options.current_token; - opts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer; - opts.tokens = options.tokens === undefined ? null : options.tokens; - opts.string = string; - opts.term_expansion = false; - var reconsulted = opts.reconsulted; - var tokenizer = opts.tokenizer; - var tokens = opts.tokens; - if(tokenizer === null) { - tokenizer = new Tokenizer(thread); - tokenizer.new_text(string); - opts.tokenizer = tokenizer; - tokens = tokenizer.get_tokens(0); - opts.tokens = tokens; - } - var n = opts.current_token; - while(tokens !== null && tokens[n]) { - var expr = parseRule(thread, tokens, n); - opts.current_token = expr.len; - if(expr.type === ERROR) { - if(opts.error !== undefined) - opts.error(new Term("throw", [expr.value])); - return; - } else { - // Term expansion - var context_module = opts.context_module; - var term_expansion = thread.session.modules[context_module].rules["term_expansion/2"]; - if(term_expansion && term_expansion.length > 0) { - opts.term_expansion = true; - var n_thread = new Thread(thread.session); - var term = expr.value.body ? new Term(":-", [expr.value.head, expr.value.body]) : expr.value.head; - thread.session.renamed_variables = {}; - term = term.rename(thread.session); - n_thread.query(context_module + ":term_expansion(" + term.toString({quoted: true}) + ", X)."); - n_thread.answer((function(thread, opts, reconsulted, expr) { - return function(answer) { - if(answer && !pl.type.is_error(answer) && pl.type.is_term(answer.links['X'])) { - var term = answer.links['X']; - var rule = term.indicator === ":-/2" ? new Rule(term.args[0], term.args[1]) : new Rule(term, null); - parseProgramExpansion(thread, opts, reconsulted, {value: rule, len: expr.len, type: expr.type}); - } else { - parseProgramExpansion(thread, opts, reconsulted, expr); - } - } - })(thread, opts, reconsulted, expr)); - return; - } else { - opts.term_expansion = false; - var async = parseProgramExpansion(thread, opts, reconsulted, expr); - if(async) - return; - n = expr.len; - } - } - } - // run goals from initialization/1 directive - var callback = opts.success; - var nthread = new Thread(thread.session); - for(var i = opts.initialization.length-1; i > 0; i--) { - var next_callback = (function(init, callback) { - return function(answer) { - if(answer === null) { - nthread.answer(); - } else if(pl.type.is_error(answer)) { - opts.error(answer); - } else { - nthread.add_goal(init); - nthread.answer(callback); - } - }; - })(opts.initialization[i], callback); - callback = next_callback; - } - if(opts.initialization.length > 0) { - nthread.add_goal(opts.initialization[0]); - nthread.answer(callback); - } else { - callback(); - } - } - - function parseGoalExpansion(thread, options, expr) { - var n_thread = new Thread( thread.session ); - n_thread.__goal_expansion = true; - var varterm = thread.next_free_variable(); - var varhead = thread.next_free_variable(); - var goal = varhead + " = " + expr.value.head + ", goal_expansion(" + expr.value.body.toString({ - quoted: true - }) + ", " + varterm.toString({ - quoted: true - }) + ")."; - n_thread.query(goal); - n_thread.answer(function(answer) { - if(answer && !pl.type.is_error(answer) && answer.links[varterm]) { - expr.value.head = answer.links[varhead]; - expr.value.body = body_conversion(answer.links[varterm]); - parseGoalExpansion(thread, options, expr); - } else { - thread.add_rule(expr.value, options); - parseProgram(thread, options.string, options); - } - }); - } - - function parseQueryExpansion(thread, term, options) { - var n_thread = new Thread(thread.session); - n_thread.__goal_expansion = true; - var varterm = thread.next_free_variable(); - var goal = "goal_expansion(" + term.toString({ - quoted: true - }) + ", " + varterm.toString({ - quoted: true - }) + ")."; - n_thread.query(goal); - var variables = n_thread.head_point().substitution.domain(); - n_thread.answer(function(answer) { - if(answer && !pl.type.is_error(answer) && answer.links[varterm]) { - for(var i = 0; i < variables.length; i++) { - if(variables[i] !== varterm.id && answer.links[variables[i]]) { - var subs = new Substitution(); - subs.links[answer.links[variables[i]]] = variables[i]; - answer.links[varterm] = answer.links[varterm].apply( subs ); - } - } - parseQueryExpansion(thread, body_conversion(answer.links[varterm]), options); - } else { - thread.add_goal(term); - options.success(term); - parseQuery(thread, options.string, options); - } - }); - } - - function parseProgramExpansion(thread, options, reconsulted, expr) { - var async = options.term_expansion === true; - if(expr.value.body === null && expr.value.head.indicator === "?-/1") { - async = true; - var n_thread = new Thread(thread.session); - n_thread.add_goal(expr.value.head.args[0]); - n_thread.answer(function(answer) { - if(pl.type.is_error(answer)) { - thread.throw_warning(answer.args[0]); - } else if(answer === false || answer === null) { - thread.throw_warning(pl.warning.failed_goal(expr.value.head.args[0], expr.len)); - } - parseProgram(thread, options.string, options); - }); - } else if(expr.value.body === null && expr.value.head.indicator === ":-/1") { - var result = thread.run_directive(expr.value.head.args[0], options); - async = async || (result === true); - if(async) - parseProgram(thread, options.string, options); - } else { - var context_module = options.context_module; - var indicator = expr.value.head.indicator; - if(expr.value.head.indicator === ":/2") { - context_module = expr.value.head.args[0].id; - indicator = expr.value.head.args[1].indicator; - } - if(!reconsulted.hasOwnProperty(context_module)) - reconsulted[context_module] = {}; - if(options.reconsult !== false && reconsulted[context_module][indicator] !== true && !thread.is_multifile_predicate(indicator)) { - var get_module = thread.session.modules[context_module]; - if(context_module !== "system" && get_module && get_module.rules[indicator]) { - get_module.rules[indicator] = filter(get_module.rules[indicator], function(rule) { - return rule.dynamic; - }); - get_module.update_indices_predicate(indicator); - } - reconsulted[context_module][indicator] = true; - } - var goal_expansion = thread.session.modules.user.rules["goal_expansion/2"]; - if(expr.value.body !== null && goal_expansion && goal_expansion.length > 0) { - async = true; - thread.session.renamed_variables = {}; - var origin = { - head: function() { return expr.value.head; }, - term: function() { return expr.value.body; }, - set: function(h, p){ - expr.value.head = h; - expr.value.body = p; - } - }; - parseGoalExpansion(thread, options, expr, body_conversion(expr.value.body), origin.set, origin); - } else { - thread.add_rule(expr.value, options); - if(async) - parseProgram(thread, options.string, options); - } - } - return async; - } - - // Parse a query - function parseQuery(thread, string, options) { - var opts = {}; - var callback = typeof options === "function" ? options : function(){}; - options = options === undefined || typeof options === "function" ? {} : options; - opts.success = options.success === undefined ? callback : options.success; - opts.error = options.error === undefined ? callback : options.error; - opts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer; - opts.current_token = options.current_token === undefined ? 0 : options.current_token; - opts.string = string; - var tokenizer = opts.tokenizer; - var n = opts.current_token; - if(tokenizer === null) { - tokenizer = new Tokenizer(thread); - opts.tokenizer = tokenizer; - tokenizer.new_text(string); - } - do { - var tokens = tokenizer.get_tokens(n); - if(tokens === null) - break; - var expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false); - if(expr.type !== ERROR) { - var expr_position = expr.len; - n = expr.len + 1; - opts.current_token = n; - if(tokens[expr_position] && tokens[expr_position].name === "atom" && tokens[expr_position].raw === ".") { - expr.value = body_conversion(expr.value); - // Goal expansion - var goal_expansion = thread.session.modules.user.rules["goal_expansion/2"]; - if(!thread.__goal_expansion && goal_expansion && goal_expansion.length > 0) { - parseQueryExpansion(thread, expr.value, opts); - return; - } else { - thread.add_goal(expr.value); - opts.success(expr.value); - } - } else { - var token = tokens[expr_position]; - opts.error( - new Term("throw", [ - pl.error.syntax( - token ? token : tokens[expr_position-1], - token && token.error ? token.error : ". or operator expected", - !token - ) - ]) - ); - return; - } - } else { - opts.error(new Term("throw", [expr.value])); - return; - } - } while(true); - } - - - - // UTILS - - // Rule to DCG - function rule_to_dcg(rule, thread) { - thread.session.renamed_variables = {}; - rule = rule.rename(thread); - var begin = thread.next_free_variable(); - var dcg = body_to_dcg( rule.body, begin, thread ); - if( dcg.error ) - return dcg.value; - rule.body = dcg.value; - // push-back lists - if(rule.head.indicator === ",/2") { - var terminals = rule.head.args[1]; - rule.head = rule.head.args[0]; - var last = thread.next_free_variable(); - var pointer = terminals; - if(!pl.type.is_list(pointer)) { - return pl.error.type("list", pointer, "DCG/0"); - } - if(pointer.indicator === "[]/0") { - terminals = dcg.variable; - } else { - while(pointer.indicator === "./2" && pl.type.is_list(pointer) && pointer.args[1].indicator !== "[]/0") { - pointer = pointer.args[1]; - } - if(pl.type.is_variable(pointer)) - return pl.error.instantiation("DCG/0"); - else if(!pl.type.is_list(pointer)) - return pl.error.type("list", terminals, "DCG/0"); - pointer.args[1] = dcg.variable; - } - rule.body = new Term(",", [rule.body, new Term("=", [last, terminals])]); - rule.head = new Term(rule.head.id, rule.head.args.concat([begin, last])); - } else { - // replace first assignment - var first_assign = rule.body; - if(pl.type.is_term(first_assign) && first_assign.indicator === ",/2") - first_assign = first_assign.args[0]; - if(pl.type.is_term(first_assign) && first_assign.indicator === "=/2" && - pl.type.is_variable(first_assign.args[0]) && first_assign.args[0] === begin) { - begin = first_assign.args[1]; - rule.body = rule.body.replace(null); - } - // add first and last variables to the head - if(rule.head.indicator === ":/2") - rule.head = new Term(":", [ - new Term(rule.head.args[0].id, []), - new Term(rule.head.args[1].id, rule.head.args[1].args.concat([begin, dcg.variable])) - ]); - else - rule.head = new Term(rule.head.id, rule.head.args.concat([begin, dcg.variable])); - } - return rule; - } - - // Body to DCG - function body_to_dcg(expr, last, thread) { - var free; - if( pl.type.is_term( expr ) && expr.indicator === "!/0" ) { - free = thread.next_free_variable(); - return { - value: new Term(",", [expr, new Term("=", [last, free])]), - variable: free, - error: false - }; - } else if( pl.type.is_term( expr ) && expr.indicator === ":/2" ) { - var right = body_to_dcg(expr.args[1], last, thread); - if( right.error ) return right; - return { - value: new Term(":", [expr.args[0], right.value]), - variable: right.variable, - error: false - }; - } else if( pl.type.is_term( expr ) && expr.indicator === "\\+/1" ) { - var left = body_to_dcg(expr.args[0], last, thread); - if( left.error ) return left; - free = thread.next_free_variable(); - return { - value: new Term(",", [new Term(expr.id, [left.value]), new Term("=", [last, free])]), - variable: free, - error: false - }; - } else if( pl.type.is_term( expr ) && (expr.indicator === ",/2" || expr.indicator === "->/2") ) { - var left = body_to_dcg(expr.args[0], last, thread); - if( left.error ) return left; - var right = body_to_dcg(expr.args[1], left.variable, thread); - if( right.error ) return right; - return { - value: new Term(expr.id, [left.value, right.value]), - variable: right.variable, - error: false - }; - } else if( pl.type.is_term( expr ) && expr.indicator === ";/2" ) { - var left = body_to_dcg(expr.args[0], last, thread); - if( left.error ) return left; - var right = body_to_dcg(expr.args[1], last, thread); - if( right.error ) return right; - return { - value: new Term(",", [new Term(";", [left.value, right.value]), new Term("=", [left.variable, right.variable])]), - variable: right.variable, - error: false - }; - } else if( pl.type.is_term( expr ) && expr.indicator === "{}/1" ) { - free = thread.next_free_variable(); - return { - value: new Term(",", [expr.args[0], new Term("=", [last, free])]), - variable: free, - error: false - }; - } else if( pl.type.is_empty_list( expr ) ) { - return { - value: new Term("true", []), - variable: last, - error: false - }; - } else if( pl.type.is_list( expr ) ) { - free = thread.next_free_variable(); - var pointer = expr; - var prev; - while( pointer.indicator === "./2" ) { - prev = pointer; - pointer = pointer.args[1]; - } - if( pl.type.is_variable( pointer ) ) { - return { - value: pl.error.instantiation("DCG/0"), - variable: last, - error: true - }; - } else if( !pl.type.is_empty_list( pointer ) ) { - return { - value: pl.error.type("list", expr, "DCG/0"), - variable: last, - error: true - }; - } else { - prev.args[1] = free; - return { - value: new Term("=", [last, expr]), - variable: free, - error: false - }; - } - } else if( pl.type.is_callable( expr ) ) { - free = thread.next_free_variable(); - expr = new Term( expr.id, expr.args.concat([last,free]) ); - return { - value: expr, - variable: free, - error: false - }; - } else { - return { - value: pl.error.type( "callable", expr, "DCG/0" ), - variable: last, - error: true - }; - } - } - - // Body conversion - function body_conversion( expr ) { - if( pl.type.is_variable( expr ) ) - return new Term( "call", [expr] ); - else if( pl.type.is_term( expr ) && [",/2", ";/2", "->/2"].indexOf(expr.indicator) !== -1 ) - return new Term( expr.id, [body_conversion( expr.args[0] ), body_conversion( expr.args[1] )] ); - else if( pl.type.is_term(expr) && expr.indicator === ":/2" ) { - var body = body_conversion(expr.args[1]); - return new Term(":", [expr.args[0], body]); - } - return expr; - } - - // List to Prolog list - function arrayToList( array, cons ) { - var list = cons ? cons : new Term( "[]", [] ); - for(var i = array.length-1; i >= 0; i-- ) - list = new Term( ".", [array[i], list] ); - return list; - } - - // Array difference - function difference(xs, ys) { - var zs = []; - for(var i = 0; i < xs.length; i++) { - if(indexOf(zs, xs[i]) === -1 && indexOf(ys, xs[i]) === -1) - zs.push(xs[i]); - } - return zs; - } - - // Remove element from array - function remove( array, element ) { - for( var i = array.length - 1; i >= 0; i-- ) { - if( array[i] === element ) { - array.splice(i, 1); - } - } - } - - // Remove duplicate elements - function nub( array ) { - var seen = {}; - var unique = []; - for( var i = 0; i < array.length; i++ ) { - if( !(array[i] in seen) ) { - unique.push( array[i] ); - seen[array[i]] = true; - } - } - return unique; - } - - // Retract a rule - function retract(thread, point, indicator, rule, get_module) { - if(get_module.rules[indicator]) { - for(var i = 0; i < get_module.rules[indicator].length; i++) { - if(get_module.rules[indicator][i] === rule) { - get_module.rules[indicator].splice(i, 1); - get_module.update_indices_predicate(indicator); - thread.success( point ); - break; - } - } - } - } - - // call/n - function callN(n) { - return function(thread, point, atom) { - var closure = atom.args[0], args = atom.args.slice(1, n); - var module_atom; - if(pl.type.is_term(closure) && closure.indicator === ":/2") { - if(!pl.type.is_atom(closure.args[0])) { - thread.throw_error(pl.error.type("module", closure.args[0], atom.indicator)); - return; - } - module_atom = closure.args[0]; - closure = closure.args[1]; - } - if(pl.type.is_variable(closure)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(closure)) { - thread.throw_error(pl.error.type("callable", closure, atom.indicator)); - } else { - var goal = body_conversion(new Term(closure.id, closure.args.concat(args))); - if(!pl.type.is_callable(goal)) { - thread.throw_error(pl.error.type("callable", goal, atom.indicator)); - return; - } - if(module_atom) - goal = new Term(":", [module_atom, goal]); - thread.prepend([new State(point.goal.replace(goal), point.substitution, point)]); - } - }; - } - - // String to indicator - function str_indicator( str ) { - for( var i = str.length - 1; i >= 0; i-- ) - if( str.charAt(i) === "/" ) - return new Term( "/", [new Term( str.substring(0, i) ), new Num( parseInt(str.substring(i+1)), false )] ); - } - - // Greatest common divisor - function gcd(a, b) { - if(b === 0) - return a; - return Math.abs(gcd(b, a % b)); - } - - - - // PROLOG OBJECTS - - // Variables - function Var( id ) { - this.id = id; - this.ground = false; - } - - // Numbers - function Num( value, is_float ) { - this.is_float = is_float !== undefined ? is_float : Math.trunc(value) !== value; - this.value = this.is_float ? value : Math.trunc(value); - this.index = this.value; - this.ground = true; - } - - // Terms - var term_ref = 0; - function Term( id, args, ref ) { - term_ref++; - this.ref = ref || term_ref; - this.id = id; - this.args = args || []; - this.indicator = id + "/" + this.args.length; - this.index = this.indicator; - this.ground = true; - for(var i = 0; i < this.args.length; i++) { - if(this.args[i].hasOwnProperty("ground") && this.args[i].ground === false) { - this.ground = false; - break; - } - } - } - - // Streams - var stream_ref = 0; - function Stream( stream, mode, alias, type, reposition, eof_action ) { - this.id = stream_ref++; - this.stream = stream; - this.mode = mode; // "read" or "write" or "append" - this.alias = alias; - this.type = type !== undefined ? type : "text"; // "text" or "binary" - this.reposition = reposition !== undefined ? reposition : true; // true or false - this.eof_action = eof_action !== undefined ? eof_action : "eof_code"; // "error" or "eof_code" or "reset" - this.position = this.mode === "append" ? "end_of_stream" : 0; - this.output = this.mode === "write" || this.mode === "append"; - this.input = this.mode === "read"; - this.line_position = 0; - this.line_count = 1; - this.char_count = 0; - } - - // Substitutions - function Substitution( links, attrs ) { - links = links || {}; - attrs = attrs || {}; - this.links = links; - this.attrs = attrs; - } - - // States - function State( goal, subs, parent ) { - subs = subs || new Substitution(); - parent = parent || null; - this.goal = goal; - this.substitution = subs; - this.parent = parent; - } - - // Rules - function Rule( head, body, dynamic ) { - this.head = head; - this.body = body; - this.dynamic = dynamic ? dynamic : false; - } - - // Session - function Session( limit ) { - limit = typeof limit === "number" && limit > 0 ? limit : null; - this.rename = 0; - this.modules = {}; - this.modules.user = new Module("user", {}, "all", { - session: this, - dependencies: ["system"] - }); - this.modules.system = pl.modules.system; - this.rules = this.modules.user.rules; - this.total_threads = 0; - this.renamed_variables = {}; - this.public_predicates = this.modules.user.public_predicates; - this.multifile_predicates = this.modules.user.multifile_predicates; - this.limit = limit; - this.streams = { - "user_input": new Stream( - nodejs_flag ? nodejs_user_input : tau_user_input, - "read", "user_input", "text", false, "reset" ), - "user_output": new Stream( - nodejs_flag ? nodejs_user_output : tau_user_output, - "append", "user_output", "text", false, "reset" ), - "user_error": new Stream( - nodejs_flag ? nodejs_user_error : tau_user_error, - "append", "user_error", "text", false, "reset" ), - }; - this.file_system = nodejs_flag ? nodejs_file_system : tau_file_system; - this.standard_input = this.streams["user_input"]; - this.standard_output = this.streams["user_output"]; - this.standard_error = this.streams["user_error"]; - this.current_input = this.streams["user_input"]; - this.current_output = this.streams["user_output"]; - this.working_directory = "/"; // only for browser - this.format_success = function( state ) { return state.substitution; }; - this.format_error = function( state ) { return state.goal; }; - this.flag = { - bounded: pl.flag.bounded.value, - max_integer: pl.flag.max_integer.value, - min_integer: pl.flag.min_integer.value, - integer_rounding_function: pl.flag.integer_rounding_function.value, - char_conversion: pl.flag.char_conversion.value, - debug: pl.flag.debug.value, - max_arity: pl.flag.max_arity.value, - unknown: pl.flag.unknown.value, - double_quotes: pl.flag.double_quotes.value, - occurs_check: pl.flag.occurs_check.value, - dialect: pl.flag.dialect.value, - version_data: pl.flag.version_data.value, - nodejs: pl.flag.nodejs.value, - argv: pl.flag.argv.value - }; - this.__loaded_modules = []; - this.__char_conversion = {}; - this.__operators = { - 1200: { ":-": ["fx", "xfx"], "-->": ["xfx"], "?-": ["fx"] }, - 1150: { "meta_predicate": ["fx"] }, - 1100: { ";": ["xfy"] }, - 1050: { "->": ["xfy"], "*->": ["xfy"] }, - 1000: { ",": ["xfy"] }, - 900: { "\\+": ["fy"] }, - 700: { - "=": ["xfx"], "\\=": ["xfx"], "==": ["xfx"], "\\==": ["xfx"], - "@<": ["xfx"], "@=<": ["xfx"], "@>": ["xfx"], "@>=": ["xfx"], - "=..": ["xfx"], "is": ["xfx"], "=:=": ["xfx"], "=\\=": ["xfx"], - "<": ["xfx"], "=<": ["xfx"], ">": ["xfx"], ">=": ["xfx"] - }, - 600: { ":": ["xfy"] }, - 500: { "+": ["yfx"], "-": ["yfx"], "/\\": ["yfx"], "\\/": ["yfx"] }, - 400: { - "*": ["yfx"], "/": ["yfx"], "//": ["yfx"], "rem": ["yfx"], - "mod": ["yfx"], "<<": ["yfx"], ">>": ["yfx"], "div": ["yfx"] - }, - 200: { "**": ["xfx"], "^": ["xfy"], "-": ["fy"], "+": ["fy"], "\\": ["fy"] } - }; - this.thread = new Thread( this ); - } - - // Threads - function Thread( session ) { - this.epoch = Date.now(); - this.session = session; - this.session.total_threads++; - this.format_success = session.format_success; - this.format_error = session.format_error; - this.total_steps = 0; - this.cpu_time = 0; - this.points = []; - this.debugger = false; - this.debugger_states = []; - this.level = new Term("top_level"); - this.current_limit = this.session.limit; - this.has_limit = this.session.limit !== null; - this.warnings = []; - this.__calls = []; - this.__goal_expansion = false; - this.__stacks = {}; - } - - // Modules - function Module(id, rules, exports, options) { - options = options === undefined ? {} : options; - options.public_predicates = options.public_predicates === undefined ? {} : options.public_predicates; - options.multifile_predicates = options.multifile_predicates === undefined ? {} : options.multifile_predicates; - options.meta_predicates = options.meta_predicates === undefined ? {} : options.meta_predicates; - options.session = options.session === undefined ? null : options.session; - options.dependencies = options.dependencies === undefined ? [] : options.dependencies; - this.id = id; - this.rules = rules; - this.indexed_clauses = {}; - this.non_indexable_clauses = {}; - this.public_predicates = options.public_predicates; - this.multifile_predicates = options.multifile_predicates; - this.meta_predicates = options.meta_predicates; - this.src_predicates = {}; - this.dependencies = options.dependencies; - this.exports = exports; - this.is_library = options.session === null; - this.modules = {}; - if(options.session) { - options.session.modules[id] = this; - for(var i = 0; i < options.dependencies.length; i++) { - var lib = options.dependencies[i]; - if(!options.session.modules.hasOwnProperty(lib)) - options.session.modules[lib] = pl.modules[lib]; - } - } else { - pl.modules[id] = this; - } - if(exports !== "all") { - for(var i = 0; i < exports.length; i++) { - this.public_predicates[exports[i]] = - options.public_predicates.hasOwnProperty(exports[i]) && - options.public_predicates[exports[i]] === true; - } - } - this.update_indices_clauses(); - } - - // Check if a predicate is exported - Module.prototype.exports_predicate = function(indicator) { - return this.exports === "all" || indexOf(this.exports, indicator) !== -1; - }; - - // Check if a predicate is public - Module.prototype.is_public_predicate = function(indicator) { - return !this.public_predicates.hasOwnProperty(indicator) || this.public_predicates[indicator] === true; - }; - - // Check if a predicate is multifile - Module.prototype.is_multifile_predicate = function( indicator ) { - return this.multifile_predicates.hasOwnProperty(indicator) && this.multifile_predicates[indicator] === true; - }; - - // Check if a predicate is a meta-predicate - Module.prototype.is_meta_predicate = function( indicator ) { - if(this.meta_predicates.hasOwnProperty(indicator)) - return this.meta_predicates[indicator]; - return null; - }; - - // Update indices of all predicates - Module.prototype.update_indices_clauses = function() { - this.indexed_clauses = {}; - this.non_indexable_clauses = {}; - for(var indicator in this.rules) - this.update_indices_predicate(indicator); - }; - - // Update indices of a predicate - Module.prototype.update_indices_predicate = function(indicator) { - this.indexed_clauses[indicator] = {}; - this.non_indexable_clauses[indicator] = []; - if(!Array.isArray(this.rules[indicator])) - return; - for(var i = 0; i < this.rules[indicator].length; i++) { - var clause = this.rules[indicator][i]; - this.add_index_predicate(clause); - } - }; - - // Add indexed cluuse to a predicate - Module.prototype.add_index_predicate = function(clause) { - var indicator = clause.head.indicator; - var index = clause.head.args.length > 0 ? clause.head.args[0].index : undefined; - if(index) { - if(!this.indexed_clauses.hasOwnProperty(indicator)) - this.indexed_clauses[indicator] = {}; - if(!this.indexed_clauses[indicator].hasOwnProperty(index)) { - this.indexed_clauses[indicator][index] = []; - if(this.non_indexable_clauses.hasOwnProperty(indicator)) - for(var j = 0; j < this.non_indexable_clauses[indicator].length; j++) - this.indexed_clauses[indicator][index].push(this.non_indexable_clauses[indicator][j]); - } - this.indexed_clauses[indicator][index].push(clause); - } else { - if(!this.non_indexable_clauses.hasOwnProperty(indicator)) - this.non_indexable_clauses[indicator] = []; - this.non_indexable_clauses[indicator].push(clause); - for(var index in this.indexed_clauses[indicator]) - this.indexed_clauses[indicator][index].push(clause); - } - }; - - - - // UNIFY PROLOG OBJECTS - - // Variables - Var.prototype.unify = function(obj, occurs_check) { - if(occurs_check && indexOf(obj.variables(), this.id) !== -1 && !pl.type.is_variable(obj)) - return null; - var links = {}; - links[this.id] = obj; - return new Substitution(links); - }; - - // Numbers - Num.prototype.unify = function(obj, occurs_check) { - if(pl.type.is_number(obj) && this.value === obj.value && this.is_float === obj.is_float) - return new Substitution(); - return null; - }; - - // Terms - Term.prototype.unify = function(obj, occurs_check) { - if(!pl.type.is_term(obj) && obj.unify !== undefined) { - return obj.unify(this, occurs_check); - } else if(pl.type.is_term(obj) && this.indicator === obj.indicator) { - var subs = new Substitution(); - for(var i = 0; i < this.args.length; i++) { - var mgu = pl.unify(this.args[i].apply(subs), obj.args[i].apply(subs), occurs_check); - if(mgu === null) - return null; - for(var x in mgu.links) - subs.links[x] = mgu.links[x]; - subs = subs.apply(mgu); - } - return subs; - } - return null; - }; - - // Streams - Stream.prototype.unify = function(obj, _occurs_check) { - if(pl.type.is_stream(obj) && this.id === obj.id) - return new Substitution(); - return null; - }; - - Stream.prototype.compare = function(obj) { - if(this.id < obj.id) - return -1; - else if(this.id === obj.id) - return 0; - else - return 1; - }; - - - - // PROLOG OBJECTS TO STRING - - // Variables - Var.prototype.toString = function( options ) { - options = options === undefined ? {} : options; - if(options.variable_names) { - var pointer = options.variable_names; - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - var head = pointer.args[0]; - if(pl.type.is_term(head) && head.indicator === "=/2" - && pl.type.is_variable(head.args[1]) && head.args[1].id === this.id - && pl.type.is_atom(head.args[0])) - return head.args[0].id; - pointer = pointer.args[1]; - } - } - return this.id; - }; - - // Numbers - Num.prototype.toString = function( _ ) { - var str = this.value.toString(); - var e = str.indexOf("e"); - if(e !== -1) { - if(str.indexOf(".") !== -1) - return str; - else - return str.replace("e", ".0e"); - } - return this.is_float && indexOf(str, ".") === -1 ? this.value + ".0" : str; - }; - - // Terms - Term.prototype.toString = function( options, priority, from ) { - options = !options ? {} : options; - options.quoted = options.quoted === undefined ? false: options.quoted; - options.ignore_ops = options.ignore_ops === undefined ? false : options.ignore_ops; - options.numbervars = options.numbervars === undefined ? false : options.numbervars; - options.variable_names = options.variable_names === undefined ? false : options.variable_names; - priority = priority === undefined ? {priority: 1200, class: "", indicator: ""} : priority; - from = from === undefined ? "" : from; - var arg_priority = {priority: 999, class: "", indicator: ""}; - if( options.numbervars && this.indicator === "$VAR/1" && pl.type.is_integer( this.args[0] ) && this.args[0].value >= 0 ) { - var i = this.args[0].value; - var number = Math.floor( i/26 ); - var letter = i % 26; - return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[letter] + (number !== 0 ? number : ""); - } - switch( this.indicator ){ - case "[]/0": - case "{}/0": - case "!/0": - return this.id; - case "{}/1": - if( options.ignore_ops === false ) { - return "{" + this.args[0].toString( options ) + "}"; - } else { - return "{}(" + this.args[0].toString( options ) + ")"; - } - case "./2": - if( options.ignore_ops === false ) { - var list = "[" + this.args[0].toString( options, arg_priority ); - var pointer = this.args[1]; - while( pointer.indicator === "./2" ) { - list += "," + pointer.args[0].toString( options, arg_priority ); - pointer = pointer.args[1]; - } - if( pointer.indicator !== "[]/0" ) { - list += "|" + pointer.toString( options, arg_priority ); - } - list += "]"; - return list; - } - default: - var id = this.id; - var operator = options.session ? options.session.lookup_operator( this.id, this.args.length ) : null; - if( options.session === undefined || options.ignore_ops || operator === null ) { - if( options.quoted && (! /^(!|[a-z][0-9a-zA-Z_]*|[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+)$/.test( id ) && id !== "{}" && id !== "[]" || indexOf([".",",",";"], id) !== -1 || id.substring(0,2) === "/*") ) - id = "'" + redoEscape(id) + "'"; - if( this.args.length === 0 && is_graphic_token(this.id) && priority.indicator !== "") - return "(" + id + ")"; - return id + (this.args.length > 0 ? "(" + map( this.args, - function(x) { return x.toString(options, arg_priority); } - ).join(",") + ")" : ""); - } else { - var priority_op = parseInt(operator.priority); - var priority_arg = parseInt(priority.priority); - var cond = priority_op > priority_arg || priority_op === priority_arg && ( - operator.class === "xfx" || - operator.class === "xfy" && this.indicator !== priority.indicator || - operator.class === "yfx" && this.indicator !== priority.indicator || - this.indicator === priority.indicator && operator.class === "yfx" && from === "right" || - this.indicator === priority.indicator && operator.class === "xfy" && from === "left" || - this.indicator === priority.indicator && operator.class === "xf" && from === "left" || - this.indicator === priority.indicator && operator.class === "fx" && from === "right"); - operator.indicator = this.indicator; - var lpar = cond ? "(" : ""; - var rpar = cond ? ")" : ""; - var space = !(is_graphic_token(this.id) || this.id === "," || this.id === ";") - || operator.class.length === 2 - || operator.class.length === 3 && pl.type.is_number(this.args[1]) && this.args[1].value < 0 ? " " : ""; - if( this.args.length === 0 ) { - return lpar + this.id + rpar; - } else if( ["fy","fx"].indexOf( operator.class) !== -1 ) { - return lpar + id + space + this.args[0].toString( options, operator, "right" ) + rpar; - } else if( ["yf","xf"].indexOf( operator.class) !== -1 ) { - return lpar + this.args[0].toString( options, operator, "left" ) + space + id + rpar; - } else { - return lpar + this.args[0].toString( options, operator, "left" ) + space + this.id + space + this.args[1].toString( options, operator, "right" ) + rpar; - } - } - } - }; - - // Streams - Stream.prototype.toString = function( _ ) { - return "(" + this.id + ")"; - }; - - // Substitutions - Substitution.prototype.toString = function( options ) { - var str = "{"; - for( var link in this.links ) { - if(!this.links.hasOwnProperty(link)) continue; - if( str !== "{" ) { - str += ", "; - } - str += link + "/" + this.links[link].toString( options ); - } - str += "}"; - return str; - }; - - // States - State.prototype.toString = function( options ) { - if( this.goal === null ) { - return "<" + this.substitution.toString( options ) + ">"; - } else { - return "<" + this.goal.toString( options ) + ", " + this.substitution.toString( options ) + ">"; - } - }; - - // Rules - Rule.prototype.toString = function( options ) { - if( !this.body ) { - return this.head.toString( options ) + "."; - } else { - return this.head.toString( options, 1200, "left" ) + " :- " + this.body.toString( options, 1200, "right" ) + "."; - } - }; - - // Session - Session.prototype.toString = function( options ) { - var str = ""; - for(var prop in this.modules) { - if(this.modules.hasOwnProperty(prop) && this.modules[prop].is_library) - str += ":- use_module(library(" + this.modules[prop] + ")).\n"; - } - str += "\n"; - for(var key in this.modules.user.rules) { - if(!this.modules.user.rules.hasOwnProperty(key)) continue; - for(i = 0; i < this.modules.user.rules[key].length; i++) { - str += this.modules.user.rules[key][i].toString(options); - str += "\n"; - } - } - return str; - }; - - - - // CLONE PROLOG OBJECTS - - // Variables - Var.prototype.clone = function() { - return new Var( this.id ); - }; - - // Numbers - Num.prototype.clone = function() { - return new Num( this.value, this.is_float ); - }; - - // Terms - Term.prototype.clone = function() { - var term = new Term( this.id, map( this.args, function( arg ) { - return arg.clone(); - } ) ); - if(this.definition_module) - term.definition_module = this.definition_module; - return term; - }; - - // Streams - Stream.prototype.clone = function() { - return new Stream( this.stream, this.mode, this.alias, this.type, this.reposition, this.eof_action ); - }; - - // Substitutions - Substitution.prototype.clone = function() { - var links = {}; - var attrs = {}; - for( var link in this.links ) { - if(!this.links.hasOwnProperty(link)) continue; - links[link] = this.links[link].clone(); - } - for( var attr in this.attrs ) { - if(!this.attrs.hasOwnProperty(attrs)) continue; - attrs[attr] = {}; - for( var m in this.attrs[attr] ) { - if(!this.attrs[attr].hasOwnProperty(m)) continue; - attrs[attr][m] = this.attrs[attr][m].clone(); - } - } - return new Substitution( links, attrs ); - }; - - // States - State.prototype.clone = function() { - return new State( this.goal.clone(), this.substitution.clone(), this.parent ); - }; - - // Rules - Rule.prototype.clone = function() { - return new Rule( this.head.clone(), this.body !== null ? this.body.clone() : null ); - }; - - - - // COMPARE PROLOG OBJECTS - - // Variables - Var.prototype.equals = function( obj ) { - return pl.type.is_variable( obj ) && this.id === obj.id; - }; - - // Numbers - Num.prototype.equals = function( obj ) { - return pl.type.is_number( obj ) && this.value === obj.value && this.is_float === obj.is_float; - }; - - // Terms - Term.prototype.equals = function( obj ) { - if( !pl.type.is_term( obj ) || this.indicator !== obj.indicator ) { - return false; - } - for( var i = 0; i < this.args.length; i++ ) { - if( !this.args[i].equals( obj.args[i] ) ) { - return false; - } - } - return true; - }; - - // Streams - Stream.prototype.equals = function( obj ) { - return pl.type.is_stream( obj ) && this.id === obj.id; - }; - - // Substitutions - Substitution.prototype.equals = function( obj ) { - var link; - if( !pl.type.is_substitution( obj ) ) { - return false; - } - for( link in this.links ) { - if(!this.links.hasOwnProperty(link)) continue; - if( !obj.links[link] || !this.links[link].equals( obj.links[link] ) ) { - return false; - } - } - for( link in obj.links ) { - if(!obj.links.hasOwnProperty(link)) continue; - if( !this.links[link] ) { - return false; - } - } - return true; - }; - - // States - State.prototype.equals = function( obj ) { - return pl.type.is_state( obj ) && this.goal.equals( obj.goal ) && this.substitution.equals( obj.substitution ) && this.parent === obj.parent; - }; - - // Rules - Rule.prototype.equals = function( obj ) { - return pl.type.is_rule( obj ) && this.head.equals( obj.head ) && (this.body === null && obj.body === null || this.body !== null && this.body.equals( obj.body )); - }; - - - - // RENAME VARIABLES OF PROLOG OBJECTS - - // Variables - Var.prototype.rename = function( thread ) { - return thread.get_free_variable( this ); - }; - - // Numbers - Num.prototype.rename = function( _ ) { - return this; - }; - - // Terms - Term.prototype.rename = function( thread ) { - // ground - if(this.ground) - return new Term(this.id, this.args); - // list - if(this.indicator === "./2") { - var arr = []; - var pointer = this; - while(pointer.indicator === "./2" && !pointer.ground) { - var app = pointer.args[0].rename(thread); - arr.push(app); - pointer = pointer.args[1]; - } - var list = pointer.rename(thread); - for(var i = arr.length-1; i >= 0; i--) - list = new Term(".", [arr[i], list]); - return list; - } - // compound term - var args = []; - for(var i = 0; i < this.args.length; i++) { - var app = this.args[i].rename(thread); - args.push(app); - } - return new Term(this.id, args); - }; - - // Streams - Stream.prototype.rename = function( thread ) { - return this; - }; - - // Rules - Rule.prototype.rename = function( thread ) { - return new Rule( this.head.rename( thread ), this.body !== null ? this.body.rename( thread ) : null ); - }; - - - - // CHECK IF RENAME - - // Variables - Var.prototype.is_rename = function(obj, links) { - links = links || {}; - if(!pl.type.is_variable(obj) - || links.hasOwnProperty(this.id) && links[this.id] !== obj.id - || links.hasOwnProperty(obj.id) && links[obj.id] !== this.id) - return false; - links[this.id] = obj.id; - links[obj.id] = this.id; - return true; - }; - - // Numbers - Num.prototype.is_rename = function(obj, _links) { - return this.equals(obj); - }; - - // Terms - Term.prototype.is_rename = function(obj, links) { - links = links || {}; - if(!pl.type.is_term(obj) || this.indicator !== obj.indicator) - return false; - for(var i = 0; i < this.args.length; i++) { - if(!pl.is_rename(this.args[i], obj.args[i], links)) - return false; - } - return true; - }; - - // Streams - Stream.prototype.is_rename = function(obj, _links) { - return this.equals(obj); - }; - - - - // GET ID OF VARIABLES FROM PROLOG OBJECTS - - // Variables - Var.prototype.variables = function() { - return [this.id]; - }; - - // Numbers - Num.prototype.variables = function() { - return []; - }; - - // Terms - Term.prototype.variables = function() { - if(this.ground) - return []; - return [].concat.apply( [], map( this.args, function( arg ) { - return arg.variables(); - } ) ); - }; - - // Streams - Stream.prototype.variables = function() { - return []; - }; - - // Rules - Rule.prototype.variables = function() { - if( this.body === null ) { - return this.head.variables(); - } else { - return this.head.variables().concat( this.body.variables() ); - } - }; - - - - // APPLY SUBSTITUTIONS TO PROLOG OBJECTS - - // Variables - Var.prototype.apply = function( subs ) { - if( subs.lookup( this.id ) ) { - return subs.lookup( this.id ); - } - return this; - }; - - // Numbers - Num.prototype.apply = function( _ ) { - return this; - }; - - // Terms - Term.prototype.apply = function( subs ) { - // ground atom - if(this.ground) - return this; - // list - if(this.indicator === "./2") { - var arr = []; - var pointer = this; - while(pointer.indicator === "./2" && !pointer.ground) { - var app = pointer.args[0].apply(subs); - arr.push(app); - pointer = pointer.args[1]; - } - var list = pointer.apply(subs); - for(var i = arr.length-1; i >= 0; i--) - list = new Term(".", [arr[i], list]); - return list; - } - // compound term - var args = []; - for(var i = 0; i < this.args.length; i++) { - var app = this.args[i].apply(subs); - args.push(app); - } - return new Term(this.id, args, this.ref); - }; - - // Streams - Stream.prototype.apply = function( _ ) { - return this; - }; - - // Rules - Rule.prototype.apply = function( subs ) { - return new Rule( this.head.apply( subs ), this.body !== null ? this.body.apply( subs ) : null ); - }; - - // Substitutions - Substitution.prototype.apply = function( subs ) { - var link, links = {}, attr, attrs = {}, m; - for( link in this.links ) { - if(!this.links.hasOwnProperty(link)) continue; - links[link] = this.links[link].apply(subs); - } - for( attr in this.attrs ) { - if(!this.attrs.hasOwnProperty(attr)) continue; - attrs[attr] = {}; - for( m in this.attrs[attr] ) { - if(!this.attrs[attr].hasOwnProperty(m)) continue; - attrs[attr][m] = this.attrs[attr][m].apply(subs); - } - } - return new Substitution( links, attrs ); - }; - - - - // SELECTION FUNCTION - - // Select term - Term.prototype.select = function() { - var pointer = this; - while(pl.type.is_term(pointer) && pointer.indicator === ",/2") - pointer = pointer.args[0]; - return pointer; - }; - - // Replace term - Term.prototype.replace = function( expr ) { - if( this.indicator === ",/2" ) { - if( this.args[0].indicator === ",/2" ) { - return new Term( ",", [this.args[0].replace( expr ), this.args[1]] ); - } else { - return expr === null ? this.args[1] : new Term( ",", [expr, this.args[1]] ); - } - } else { - return expr; - } - }; - - // Search term - Term.prototype.search = function( expr ) { - if(this == expr || this.ref === expr.ref) - return true; - for( var i = 0; i < this.args.length; i++ ) - if( pl.type.is_term( this.args[i] ) && this.args[i].search( expr ) ) - return true; - return false; - }; - - - - // PROLOG SESSIONS AND THREADS - - // Push to a global stack - Session.prototype.push_global_stack = function(stack, value) { - return this.thread.push_global_stack(stack, value); - }; - Thread.prototype.push_global_stack = function(stack, value) { - if(!this.__stacks.hasOwnProperty(stack)) - this.__stacks[stack] = []; - this.__stacks[stack].push(value); - }; - - // Pop all from a global stack - Session.prototype.flush_global_stack = function(stack, tail) { - return this.thread.push_global_stack(stack, tail); - }; - Thread.prototype.flush_global_stack = function(stack, tail) { - var list = tail || new Term("[]", []); - if(this.__stacks.hasOwnProperty(stack)) { - while(this.__stacks[stack].length > 0) - list = new Term(".", [this.__stacks[stack].pop(), list]); - delete this.__stacks[stack]; - } - return list; - }; - - // Set max inferences - Session.prototype.setMaxInferences = function(max) { - this.limit = typeof max === "number" && max > 0 ? max : null; - }; - Thread.prototype.setMaxInferences = function(max) { - this.session.setMaxInferences(max); - this.current_limit = this.session.limit; - this.has_limit = this.session.limit !== null; - }; - - // Format answer - Session.prototype.format_answer = function(answer, options) { - return this.thread.format_answer(answer, options); - }; - Thread.prototype.format_answer = function(answer, options) { - return pl.format_answer(answer, this, options); - }; - - // Get current input - Session.prototype.get_current_input = function() { - return this.current_input; - }; - Thread.prototype.get_current_input = function() { - return this.session.get_current_input(); - }; - - // Get current output - Session.prototype.get_current_output = function() { - return this.current_output; - }; - Thread.prototype.get_current_output = function() { - return this.session.get_current_output(); - }; - - // Set current input - Session.prototype.set_current_input = function( input ) { - this.current_input = input; - }; - Thread.prototype.set_current_input = function( input ) { - return this.session.set_current_input( input ); - }; - - // Set current output - Session.prototype.set_current_output = function( output ) { - this.current_output = output; - }; - Thread.prototype.set_current_output = function( output ) { - return this.session.set_current_output( output); - }; - - // Get stream by alias - Session.prototype.get_stream_by_alias = function( alias ) { - return this.streams[alias]; - }; - Thread.prototype.get_stream_by_alias = function( alias ) { - return this.session.get_stream_by_alias( alias ); - }; - - // Open file - Session.prototype.file_system_open = function( path, type, mode ) { - if(this.get_flag("nodejs").indicator === "false/0") - path = this.absolute_file_name(path); - return this.file_system.open( path, type, mode ); - }; - Thread.prototype.file_system_open = function( path, type, mode ) { - return this.session.file_system_open( path, type, mode ); - }; - - // Absolute file name - Session.prototype.absolute_file_name = function(filename) { - var absolute; - // node.js - if(this.get_flag("nodejs").indicator === "true/0") { - var path = __webpack_require__(/*! path */ "../../node_modules/path/path.js"); - absolute = filename; - for(var prop in process.env) { - if(!process.env.hasOwnProperty(prop)) - continue; - absolute = absolute.replace(new RegExp("\\$" + prop, "g"), process.env[prop]); - } - return path.resolve(absolute); - // browser - } else { - var cwd = this.working_directory; - if(filename[0] === "/") - absolute = filename; - else - absolute = cwd + (cwd[cwd.length-1] === "/" ? filename : "/" + filename); - absolute = absolute.replace(/\/\.\//g, "/"); - var dirs = absolute.split("/"); - var dirs2 = []; - for(var i = 0; i < dirs.length; i++) { - if(dirs[i] !== "..") { - dirs2.push(dirs[i]); - } else { - if(dirs2.length !== 0) - dirs2.pop(); - } - } - absolute = dirs2.join("/").replace(/\/\.$/, "/"); - } - return absolute; - }; - Thread.prototype.absolute_file_name = function(path, cwd) { - return this.session.absolute_file_name(path, cwd); - }; - - // Get conversion of the char - Session.prototype.get_char_conversion = function( char ) { - return this.__char_conversion[char] || char; - }; - Thread.prototype.get_char_conversion = function( char ) { - return this.session.get_char_conversion( char ); - }; - - // Parse an expression - Session.prototype.parse = function( string ) { - return this.thread.parse( string ); - }; - Thread.prototype.parse = function( string ) { - var tokenizer = new Tokenizer( this ); - tokenizer.new_text( string ); - var tokens = tokenizer.get_tokens(); - if( tokens === null ) - return false; - var expr = parseExpr(this, tokens, 0, this.__get_max_priority(), false); - if( expr.len !== tokens.length ) - return false; - return { value: expr.value, expr: expr, tokens: tokens }; - }; - - // Get flag value - Session.prototype.get_flag = function( flag ) { - return this.flag[flag]; - }; - Thread.prototype.get_flag = function( flag ) { - return this.session.get_flag( flag ); - }; - - // Add a rule - Session.prototype.add_rule = function(rule, options) { - return this.thread.add_rule(rule, options); - }; - Thread.prototype.add_rule = function(rule, options) { - options = options ? options : {}; - options.from = options.from ? options.from : "$tau-js"; - var module_id, get_module; - if(pl.type.is_term(rule.head) && rule.head.indicator === ":/2") { - if(!pl.type.is_atom(rule.head.args[0])) { - this.throw_warning(pl.error.type("module", rule.head.args[0], "top_level/0")); - return; - } - module_id = rule.head.args[0].id; - rule.head = rule.head.args[1]; - } - if(module_id) { - get_module = this.session.modules[module_id]; - if(!pl.type.is_module(get_module)) { - get_module = new Module(module_id, {}, "all", {session: this.session}); - this.session.modules[module_id] = get_module; - } - } else { - get_module = this.session.modules[options.context_module]; - } - get_module.src_predicates[rule.head.indicator] = options.from; - if(!get_module.rules.hasOwnProperty(rule.head.indicator)) { - get_module.rules[rule.head.indicator] = []; - } - get_module.rules[rule.head.indicator].push(rule); - if(!get_module.public_predicates.hasOwnProperty(rule.head.indicator)) - get_module.public_predicates[rule.head.indicator] = false; - // update term indexing - get_module.add_index_predicate(rule); - return true; - }; - - // Run a directive - Session.prototype.run_directive = function(directive, options) { - return this.thread.run_directive(directive, options); - }; - Thread.prototype.run_directive = function(directive, options) { - if(pl.type.is_directive(directive)) { - if(pl.directive[directive.indicator]) - return pl.directive[directive.indicator](this, directive, options); - else - return pl.directive[directive.id + "/*"](this, directive, options); - } - return false; - }; - - // Get maximum priority of the operators - Session.prototype.__get_max_priority = function() { - return "1200"; - }; - Thread.prototype.__get_max_priority = function() { - return this.session.__get_max_priority(); - }; - - // Get next priority of the operators - Session.prototype.__get_next_priority = function( priority ) { - var max = 0; - priority = parseInt( priority ); - for( var key in this.__operators ) { - if( !this.__operators.hasOwnProperty(key) ) continue; - var n = parseInt(key); - if( n > max && n < priority ) max = n; - } - return max.toString(); - }; - Thread.prototype.__get_next_priority = function( priority ) { - return this.session.__get_next_priority( priority ); - }; - - // Get classes of an operator - Session.prototype.__lookup_operator_classes = function( priority, operator ) { - if( this.__operators.hasOwnProperty( priority ) && this.__operators[priority][operator] instanceof Array ) { - return this.__operators[priority][operator] || false; - } - return false; - }; - Thread.prototype.__lookup_operator_classes = function( priority, operator ) { - return this.session.__lookup_operator_classes( priority, operator ); - }; - - // Get operator - Session.prototype.lookup_operator = function( name, arity ) { - for(var p in this.__operators) - if(this.__operators[p][name]) - for(var i = 0; i < this.__operators[p][name].length; i++) - if( this.__operators[p][name][i].length === arity+1 ) - return {priority: p, class: this.__operators[p][name][i]}; - return null; - }; - Thread.prototype.lookup_operator = function( name, arity ) { - return this.session.lookup_operator( name, arity ); - }; - - // Throw a warning - Session.prototype.throw_warning = function( warning ) { - this.thread.throw_warning( warning ); - }; - Thread.prototype.throw_warning = function( warning ) { - this.warnings.push( warning ); - }; - - // Get warnings - Session.prototype.get_warnings = function() { - return this.thread.get_warnings(); - }; - Thread.prototype.get_warnings = function() { - return this.warnings; - }; - - // Add a goal - Session.prototype.add_goal = function( goal, unique ) { - this.thread.add_goal( goal, unique ); - }; - Thread.prototype.add_goal = function( goal, unique, parent ) { - parent = parent ? parent : null; - if( unique === true ) - this.points = []; - var vars = goal.variables(); - var links = {}; - for( var i = 0; i < vars.length; i++ ) - links[vars[i]] = new Var(vars[i]); - this.points.push( new State( goal, new Substitution(links), parent ) ); - }; - - // Consult a program from a string - Session.prototype.consult = function(program, options) { - return this.thread.consult(program, options); - }; - Thread.prototype.consult = function(program, options) { - var string = "", success = false; - var opts = {}; - var callback = typeof options === "function" ? options : function(){}; - options = options === undefined || typeof options === "function" ? {} : options; - opts.context_module = options.context_module === undefined ? "user" : options.context_module; - opts.text = options.text === undefined ? true : options.text; - opts.html = options.html === undefined ? true : options.html; - opts.url = options.url === undefined ? true : options.url; - opts.file = options.file === undefined ? true : options.file; - opts.script = options.script === undefined ? true : options.script; - opts.success = options.success === undefined ? callback : options.success; - opts.error = options.error === undefined ? callback : options.error; - // string - if(typeof program === "string") { - string = program; - // script id - if(opts.script && this.get_flag("nodejs").indicator === "false/0" && program != "" && document.getElementById(string)) { - var script = document.getElementById(string); - var type = script.getAttribute("type"); - if(type !== null && type.replace(/ /g, "").toLowerCase() === "text/prolog") { - string = script.text; - success = true; - } - } - // file (node.js) - if(!success && opts.file && this.get_flag("nodejs").indicator === "true/0") { - var fs = __webpack_require__(/*! fs */ "?1914"); - var thread = this; - fs.readFile(program, function(error, data) { - if(error) { - opts.file = false; - thread.consult(program, opts); - } else { - parseProgram(thread, data.toString(), opts); - } - }); - return; - } - // http request - if(!success && this.get_flag("nodejs").indicator === "false/0" && opts.url && program !== "" && !(/\s/.test(program))) { - try { - var xhttp = new XMLHttpRequest(); - var thread = this; - xhttp.onreadystatechange = function() { - if(this.readyState == 4) { - if(this.status == 200) { - string = xhttp.responseText; - success = true; - parseProgram(thread, string, opts); - } else { - opts.url = false; - thread.consult(program, opts); - } - } - } - xhttp.open("GET", program, true); - xhttp.send(); - return; - } catch(ex) { - opts.error(ex); - return; - } - } - // text - if(!success && opts.text) { - success = true; - } - // html - } else if(opts.html && program.nodeName) { - switch(program.nodeName.toLowerCase()) { - case "input": - case "textarea": - string = program.value; - success = true; - break; - default: - string = program.innerHTML; - success = true; - break; - } - } else { - opts.error(pl.error.existence("source_sink", new Term(string), "top_level/0")); - } - this.warnings = []; - parseProgram(this, string, opts); - }; - - // Query goal from a string (without ?-) - Session.prototype.query = function(string, options) { - return this.thread.query(string, options); - }; - Thread.prototype.query = function(string, options) { - this.points = []; - this.debugger_states = []; - this.level = new Term("top_level"); - return parseQuery(this, string, options); - }; - - // Get first choice point - Session.prototype.head_point = function() { - return this.thread.head_point(); - }; - Thread.prototype.head_point = function() { - return this.points[this.points.length-1]; - }; - - // Get free variable - Session.prototype.get_free_variable = function( variable ) { - return this.thread.get_free_variable( variable ); - }; - Thread.prototype.get_free_variable = function( variable ) { - var variables = []; - if( variable.id === "_" || this.session.renamed_variables[variable.id] === undefined ) { - this.session.rename++; - if( this.current_point ) - variables = this.current_point.substitution.domain(); - while( indexOf( variables, pl.format_variable( this.session.rename, variable.id ) ) !== -1 ) { - this.session.rename++; - } - if( variable.id === "_" ) { - return new Var( pl.format_variable( this.session.rename, variable.id ) ); - } else { - this.session.renamed_variables[variable.id] = pl.format_variable( this.session.rename, variable.id ); - } - } - return new Var( this.session.renamed_variables[variable.id] ); - }; - - // Get next free variable - Session.prototype.next_free_variable = function() { - return this.thread.next_free_variable(); - }; - Thread.prototype.next_free_variable = function() { - this.session.rename++; - var variables = []; - if( this.current_point ) - variables = this.current_point.substitution.domain(); - while( indexOf( variables, pl.format_variable( this.session.rename ) ) !== -1 ) { - this.session.rename++; - } - return new Var( pl.format_variable( this.session.rename ) ); - }; - - // Check if a predicate is public - Session.prototype.is_public_predicate = function(indicator, module_id) { - module_id = module_id === undefined ? "user" : module_id; - return pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_public_predicate(indicator); - }; - Thread.prototype.is_public_predicate = function(indicator, module_id) { - return this.session.is_public_predicate(indicator, module_id); - }; - - // Check if a predicate is multifile - Session.prototype.is_multifile_predicate = function(indicator, module_id) { - module_id = module_id === undefined ? "user" : module_id; - return pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_multifile_predicate(indicator); - }; - Thread.prototype.is_multifile_predicate = function(indicator, module_id) { - return this.session.is_multifile_predicate(indicator, module_id); - }; - - // Check if a predicate is a meta-predicate - Session.prototype.is_meta_predicate = function(indicator, module_id) { - module_id = module_id === undefined ? "user" : module_id; - if(pl.type.is_module(this.modules[module_id])) - return this.modules[module_id].is_meta_predicate(indicator); - return null; - }; - Thread.prototype.is_meta_predicate = function(indicator, module_id) { - return this.session.is_meta_predicate(indicator, module_id); - }; - - // Insert states at the beginning - Session.prototype.prepend = function( states ) { - return this.thread.prepend( states ); - }; - Thread.prototype.prepend = function( states ) { - for(var i = states.length-1; i >= 0; i--) - this.points.push( states[i] ); - }; - - // Remove the selected term and prepend the current state - Session.prototype.success = function( point, parent ) { - return this.thread.success( point, parent ); - } - Thread.prototype.success = function( point, parent ) { - var parent = typeof parent === "undefined" ? point : parent; - this.prepend( [new State( point.goal.replace( null ), point.substitution, parent ) ] ); - }; - - // Throw error - Session.prototype.throw_error = function(error) { - return this.thread.throw_error(error); - }; - Thread.prototype.throw_error = function(error) { - if(pl.type.is_variable(error)) - error = pl.error.instantiation(this.level.indicator); - var state = new State( - new Term("throw", [error]), - new Substitution(), - null - ); - state.error = true; - this.prepend([state]); - }; - - // Get the module of a predicate - Session.prototype.lookup_module = function(atom, context_module) { - return this.thread.lookup_module(atom, context_module); - } - Thread.prototype.lookup_module = function(atom, context_module) { - var get_module = this.session.modules[context_module]; - if(!pl.type.is_module(get_module)) - get_module = this.session.modules.user; - if(get_module.rules.hasOwnProperty(atom.indicator) && ( - get_module.exports_predicate(atom.indicator) || - get_module.rules.hasOwnProperty(this.level.indicator) || - context_module === get_module.id)) - return get_module; - get_module.modules.system = pl.modules.system; - get_module.modules.user = this.session.modules.user; - for(var prop in get_module.modules) { - if(!this.session.modules.hasOwnProperty(prop)) - continue; - var get_module = this.session.modules[prop]; - if(get_module.rules.hasOwnProperty(atom.indicator) && ( - get_module.exports_predicate(atom.indicator) || - get_module.rules.hasOwnProperty(this.level.indicator) || - context_module === get_module.id)) - return get_module; - } - return null; - }; - - // Expand a meta-predicate - Session.prototype.expand_meta_predicate = function(atom, definition_module, context_module) { - return this.thread.expand_meta_predicate(atom, definition_module, context_module); - }; - Thread.prototype.expand_meta_predicate = function(atom, definition_module, context_module) { - var get_module = this.session.modules[definition_module]; - if(!get_module) - return; - var meta = get_module.is_meta_predicate(atom.indicator); - if(!meta) - return; - for(var i = 0; i < meta.args.length; i++) { - if(pl.type.is_integer(meta.args[i]) || pl.type.is_atom(meta.args[i]) && indexOf([":"], meta.args[i].id) !== -1) { - if(!pl.type.is_term(atom.args[i]) || atom.args[i].indicator !== ":/2") { - atom.args[i] = new Term(":", [new Term(context_module), atom.args[i]]); - } - } else if(pl.type.is_atom(meta.args[i]) && meta.args[i].id === "^") { - var pointer_last = atom; - var pointer_index = i; - var pointer = atom.args[i]; - while(pl.type.is_term(pointer) && pointer.indicator === "^/2") { - pointer_last = pointer; - pointer_index = 1; - pointer = pointer.args[1]; - } - if(!pl.type.is_term(pointer) || pointer.indicator !== ":/2") { - pointer_last.args[pointer_index] = new Term(":", [new Term(context_module), pointer]); - } - } - } - }; - - // Resolution step - Session.prototype.step = function() { - return this.thread.step(); - } - Thread.prototype.step = function() { - if(this.points.length === 0) { - return; - } - var asyn = false; - var point = this.points.pop(); - this.current_point = point; - if(this.debugger) - this.debugger_states.push(point); - var atom = pl.type.is_term(point.goal) ? point.goal.select() : point.goal; - if(pl.type.is_term(atom) && (atom.indicator !== ":/2" || pl.type.is_term(atom.args[1]))) { - var context_module = null; - var states = []; - if(atom !== null) { - this.total_steps++; - var level = point; - while(level.parent !== null && level.parent.goal.search(atom)) - level = level.parent; - if(level.parent === null) { - this.level = new Term("top_level"); - } else { - this.level = level.parent.goal.select(); - if(this.level.indicator === ":/2") - this.level = this.level.args[1]; - } - if(pl.type.is_term(atom) && atom.indicator === ":/2") { - context_module = atom.args[0]; - atom = atom.args[1]; - if(!pl.type.is_atom(context_module)) { - this.throw_error(pl.error.type("module", context_module, this.level.indicator)); - return; - } - context_module = context_module.id; - } else { - if(this.level.definition_module) { - context_module = this.level.definition_module; - } else { - context_module = "user"; - } - } - atom.context_module = context_module; - if(atom.indicator === ",/2") { - this.prepend([new State( - point.goal.replace(new Term(",", [ - new Term(":", [new Term(context_module), atom.args[0]]), - new Term(":", [new Term(context_module), atom.args[1]])])), - point.substitution, - point - )]); - return; - } - this.__call_indicator = atom.indicator; - var get_module = this.lookup_module(atom, context_module); - atom.definition_module = pl.type.is_module(get_module) ? get_module.id : "user"; - this.expand_meta_predicate(atom, atom.definition_module, context_module); - var clauses = null; - if(get_module && atom.args.length > 0 && atom.args[0].index && get_module.indexed_clauses.hasOwnProperty(atom.indicator) && get_module.indexed_clauses[atom.indicator].hasOwnProperty(atom.args[0].index)) - clauses = get_module.indexed_clauses[atom.indicator][atom.args[0].index]; - else - clauses = get_module === null ? null : get_module.rules[atom.indicator]; - if(clauses === null) { - if(!this.session.modules.user.rules.hasOwnProperty(atom.indicator)) { - if(this.get_flag("unknown").id === "error") { - this.throw_error( pl.error.existence( "procedure", atom.indicator, this.level.indicator)); - } else if(this.get_flag("unknown").id === "warning") { - this.throw_warning("unknown procedure " + atom.indicator + " (from " + this.level.indicator + ")"); - } - } - } else if(clauses instanceof Function) { - asyn = clauses(this, point, atom); - } else { - // Goal expansion - if(this.__goal_expansion && atom.indicator === "goal_expansion/2") - clauses = clauses.concat(pl.builtin.rules["goal_expansion/2"]); - for(var i = 0; i < clauses.length; i++) { - this.session.renamed_variables = {}; - var clause = clauses[i].rename(this); - var occurs_check = this.get_flag("occurs_check").indicator === "true/0"; - var mgu = pl.unify(atom, clause.head, occurs_check); - if(mgu !== null) { - var state = new State(); - state.goal = point.goal.replace(clause.body); - if(state.goal !== null) - state.goal = state.goal.apply(mgu); - state.substitution = point.substitution.apply(mgu); - state.parent = point; - states.push(state); - } - } - this.prepend(states); - } - } - } else { - var term = pl.type.is_term(atom) && atom.indicator === ":/2" ? atom.args[1] : atom; - if(pl.type.is_variable(term)) - this.throw_error(pl.error.instantiation(this.level.indicator)); - else - this.throw_error(pl.error.type("callable", term, this.level.indicator)); - } - return asyn; - }; - - // Find next computed answer - Session.prototype.answer = function(options) { - return this.thread.answer(options); - }; - Thread.prototype.answer = function(options) { - var opts = {}; - options = options || function() {}; - if(typeof options === "function") { - opts = { - success: options, - error: options, - fail: options, - limit: options - }; - } else { - opts.success = options.success === undefined ? function() {} : options.success; - opts.error = options.error === undefined ? function() {} : options.error; - opts.fail = options.fail === undefined ? function() {} : options.fail; - opts.limit = options.limit === undefined ? function() {} : options.limit; - } - this.__calls.push(opts); - if( this.__calls.length > 1 ) { - return; - } - this.again(); - }; - - // Find all computed answers - Session.prototype.answers = function( callback, max, after ) { - return this.thread.answers( callback, max, after ); - } - Thread.prototype.answers = function( callback, max, after ) { - var answers = max === undefined ? 1000 : max; - var thread = this; - if( answers <= 0 ) { - if(after) - after(); - return; - } - this.answer( function( answer ) { - callback( answer ); - if( answer !== false ) { - setTimeout( function() { - thread.answers( callback, answers-1, after ); - }, 0 ); - } else if(after) { - after(); - } - } ); - }; - - // Again finding next computed answer - Session.prototype.again = function(reset_limit) { - return this.thread.again(reset_limit); - }; - Thread.prototype.again = function(reset_limit) { - while(this.__calls.length > 0) { - this.warnings = []; - if(reset_limit !== false) - this.current_limit = this.session.limit; - while((!this.has_limit || this.current_limit > 0) && this.points.length > 0 && this.head_point().goal !== null && !pl.type.is_error_state(this.head_point())) { - if(this.has_limit) - this.current_limit--; - var t0 = Date.now(); - var asyn = this.step(); - var t1 = Date.now(); - this.cpu_time += t1-t0; - if(asyn === true) - return; - } - var call = this.__calls.shift(); - // limit of inferences - if(this.has_limit && this.current_limit <= 0) { - (function(call) { - return setTimeout(function() { - call.limit(null); - }, 0); - })(call); - // no answer - } else if(this.points.length === 0) { - (function(call) { - return setTimeout(function() { - call.fail(false); - }, 0); - })(call); - // error - } else if(pl.type.is_error(this.head_point().goal)) { - var error = this.format_error(this.points.pop()); - this.points = []; - (function(error, call) { - return setTimeout(function() { - call.error(error); - }, 0); - })(error, call); - // computed answer - } else { - if(this.debugger) - this.debugger_states.push(this.head_point()); - var answer = this.format_success(this.points.pop()); - (function(answer, call) { - return setTimeout(function() { - call.success(answer); - }, 0); - })(answer, call); - } - } - }; - - // Unfolding transformation - Session.prototype.unfold = function( rule ) { - if(rule.body === null) - return false; - var head = rule.head; - var body = rule.body; - var atom = body.select(); - var thread = new Thread( this ); - var unfolded = []; - thread.add_goal( atom ); - thread.step(); - for( var i = thread.points.length-1; i >= 0; i-- ) { - var point = thread.points[i]; - var head2 = head.apply( point.substitution ); - var body2 = body.replace( point.goal ); - if( body2 !== null ) - body2 = body2.apply( point.substitution ); - unfolded.push( new Rule( head2, body2 ) ); - } - var rules = this.modules.user.rules[head.indicator]; - var index = indexOf( rules, rule ); - if( unfolded.length > 0 && index !== -1 ) { - rules.splice.apply( rules, [index, 1].concat(unfolded) ); - return true; - } - return false; - }; - Thread.prototype.unfold = function(rule) { - return this.session.unfold(rule); - }; - - - - // INTERPRET EXPRESSIONS - - // Variables - Var.prototype.interpret = function( thread ) { - return pl.error.instantiation( thread.level.indicator ); - }; - - // Numbers - Num.prototype.interpret = function( thread ) { - return this; - }; - - // Terms - Term.prototype.interpret = function( thread ) { - if( pl.type.is_unitary_list( this ) ) { - return this.args[0].interpret( thread ); - } else { - return pl.operate( thread, this ); - } - }; - - - - // COMPARE PROLOG OBJECTS - - // Variables - Var.prototype.compare = function( obj ) { - if( this.id < obj.id ) { - return -1; - } else if( this.id > obj.id ) { - return 1; - } else { - return 0; - } - }; - - // Numbers - Num.prototype.compare = function( obj ) { - if( this.value === obj.value && this.is_float === obj.is_float ) { - return 0; - } else if( this.value < obj.value || this.value === obj.value && this.is_float && !obj.is_float ) { - return -1; - } else if( this.value > obj.value ) { - return 1; - } - }; - - // Terms - Term.prototype.compare = function( obj ) { - if( this.args.length < obj.args.length || this.args.length === obj.args.length && this.id < obj.id ) { - return -1; - } else if( this.args.length > obj.args.length || this.args.length === obj.args.length && this.id > obj.id ) { - return 1; - } else { - for( var i = 0; i < this.args.length; i++ ) { - var arg = pl.compare( this.args[i], obj.args[i] ); - if( arg !== 0 ) { - return arg; - } - } - return 0; - } - }; - - - - // SUBSTITUTIONS - - // Lookup variable - Substitution.prototype.lookup = function( variable ) { - if( this.links[variable] ) { - return this.links[variable]; - } else { - return null; - } - }; - - // Filter variables - Substitution.prototype.filter = function( predicate ) { - var links = {}; - for( var id in this.links ) { - if(!this.links.hasOwnProperty(id)) continue; - var value = this.links[id]; - if( predicate( id, value ) ) { - links[id] = value; - } - } - return new Substitution( links, this.attrs ); - }; - - // Exclude variables - Substitution.prototype.exclude = function( variables ) { - var links = {}; - for( var variable in this.links ) { - if(!this.links.hasOwnProperty(variable)) continue; - if( indexOf( variables, variable ) === -1 ) { - links[variable] = this.links[variable]; - } - } - return new Substitution( links, this.attrs ); - }; - - // Add link - Substitution.prototype.add = function( variable, value ) { - this.links[variable] = value; - }; - - // Get domain - Substitution.prototype.domain = function( plain ) { - var f = plain === true ? function(x){return x;} : function(x){return new Var(x);}; - var vars = []; - for( var x in this.links ) - vars.push( f(x) ); - return vars; - }; - - // Get an attribute - Substitution.prototype.get_attribute = function( variable, module ) { - if( this.attrs[variable] ) - return this.attrs[variable][module]; - } - - // Set an attribute (in a new substitution) - Substitution.prototype.set_attribute = function( variable, module, value ) { - var subs = new Substitution( this.links ); - for( var v in this.attrs ) { - if( v === variable ) { - subs.attrs[v] = {}; - for( var m in this.attrs[v] ) { - subs.attrs[v][m] = this.attrs[v][m]; - } - } else { - subs.attrs[v] = this.attrs[v]; - } - } - if( !subs.attrs[variable] ) { - subs.attrs[variable] = {}; - } - subs.attrs[variable][module] = value; - return subs; - } - - // Check if a variables has attributes - Substitution.prototype.has_attributes = function( variable ) { - return this.attrs[variable] && this.attrs[variable] !== {}; - } - - - - // GENERATE JAVASCRIPT CODE FROM PROLOG OBJECTS - - // Variables - Var.prototype.compile = function() { - return 'new pl.type.Var("' + this.id.toString() + '")'; - }; - - // Numbers - Num.prototype.compile = function() { - return 'new pl.type.Num(' + this.value.toString() + ', ' + this.is_float.toString() + ')'; - }; - - // Terms - Term.prototype.compile = function() { - return 'new pl.type.Term("' + this.id.replace(/"/g, '\\"') + '", [' + map( this.args, function( arg ) { - return arg.compile(); - } ) + '])'; - }; - - // Rules - Rule.prototype.compile = function() { - return 'new pl.type.Rule(' + this.head.compile() + ', ' + (this.body === null ? 'null' : this.body.compile()) + ')'; - }; - - // Sessions - Session.prototype.compile = function() { - var str, obj = [], rules; - for( var _indicator in this.modules.user.rules ) { - if(!this.modules.user.rules.hasOwnProperty(_indicator)) continue; - var indicator = this.modules.user.rules[_indicator]; - rules = []; - str = "\"" + _indicator + "\": ["; - for(var i = 0; i < indicator.length; i++) { - rules.push(indicator[i].compile()); - } - str += rules.join(); - str += "]"; - obj.push( str ); - } - return "{" + obj.join() + "};"; - }; - - // Module - Module.prototype.compile = function() { - var length = 0; - var dependencies = 0; - var str = "var pl;\n"; - str += "(function(pl) {\n"; - // name - str += "\tvar name = \"" + this.id + "\";\n"; - // predicates - str += "\tvar predicates = function() {\n"; - str += "\t\treturn {\n"; - for(var prop in this.rules) { - if(length > 0) - str += ",\n"; - str += "\t\t\t\"" + prop + "\": "; - if(typeof this.rules[prop] === "function") { - str += this.rules[prop]; - } else { - str += "[\n"; - for(var i = 0; i < this.rules[prop].length; i++) { - str += "\t\t\t\t" + this.rules[prop][i].compile(); - if(i < this.rules[prop].length-1) - str += ","; - str += "\n"; - } - str += "\t\t\t]"; - } - length++; - } - str += "\n\t\t};\n"; - str += "\t};\n"; - // exports - str += "\tvar exports = ["; - for(var i = 0; i < this.exports.length; i++) { - if(i > 0) - str += ", "; - str += "\"" + this.exports[i] + "\""; - } - str += "];\n"; - // options - str += "\tvar options = function() {\n"; - str += "\t\treturn {\n"; - // dependencies - str += "\t\t\tdependencies: ["; - for(var prop in this.modules) { - if(dependencies > 0) - str += ", "; - str += "\"" + prop + "\""; - dependencies++; - } - str += "]\n"; - str += "\t\t};\n"; - str += "};\n"; - // fixed code - str += "\tif(typeof module !== 'undefined') {\n"; - str += "\t\tmodule.exports = function(p) {\n"; - str += "\t\t\tpl = p;\n"; - str += "\t\t\tnew pl.type.Module(name, predicates(), exports, options());\n"; - str += "\t\t};\n"; - str += "\t} else {\n"; - str += "\t\tnew pl.type.Module(name, predicates(), exports, options());\n"; - str += "\t}\n"; - str += "})(pl);\n"; - return str; - }; - - - - // PROLOG TO JAVASCRIPT - Var.prototype.toJavaScript = function() { - return this.toString(); - }; - - // Numbers - Num.prototype.toJavaScript = function() { - return this.value; - }; - - // Terms - Term.prototype.toJavaScript = function(options) { - // Atom => String - if( this.args.length === 0 && this.indicator !== "[]/0" ) { - return this.toString(options); - } else if( pl.type.is_list( this ) ) { - // List => Array - var all_obj = true; - var arr = []; - var obj = {}; - var pointer = this; - var value; - while( pointer.indicator === "./2" ) { - value = pointer.args[0].toJavaScript(options); - arr.push( value ); - all_obj = all_obj && pl.type.is_term(pointer.args[0]) && pointer.args[0].indicator === "-/2" && pl.type.is_atom(pointer.args[0].args[0]); - if(all_obj) - obj[pointer.args[0].args[0].id] = pointer.args[0].args[1].toJavaScript(options); - pointer = pointer.args[1]; - } - if( pointer.indicator === "[]/0" ) - return all_obj && arr.length > 0 ? obj : arr; - - } - return this.toString(options); - }; - - - - // RULES - - // Return singleton variables in the session - Rule.prototype.singleton_variables = function(include_named) { - include_named = include_named || false; - var variables = this.head.variables(); - var count = {}; - var singleton = []; - if(this.body !== null) - variables = variables.concat(this.body.variables()); - for(var i = 0; i < variables.length; i++) { - if(count[variables[i]] === undefined) - count[variables[i]] = 0; - count[variables[i]]++; - } - for(var key in count) { - if(!count.hasOwnProperty(key)) - continue; - if(count[key] === 1) { - var charcode = codePointAt(key, 1); - if(!include_named || key === "_") - if(key === "_" || key[0] === "_" && (charcode === 95 || charcode >= 65 && charcode <= 90)) - continue; - singleton.push(key); - } - } - return singleton; - }; - - - - // NODEJS - - var nodejs_flag = typeof process !== 'undefined' && !process.browser - - var nodejs_arguments = nodejs_flag ? - arrayToList( map(process.argv.slice(1), function(arg) { return new Term( arg ); })) : - new Term("[]", []); - - - - // PROLOG - - var pl = { - - // Environment - __env: nodejs_flag ? __webpack_require__.g : window, - - // Modules - modules: {}, - - // Version - version: version, - - // Parser - parser: { - tokenizer: Tokenizer, - expression: parseExpr - }, - - // Utils - utils: { - - // String to indicator - str_indicator: str_indicator, - // Code point at - codePointAt: codePointAt, - // From code point - fromCodePoint: fromCodePoint, - // Length of string - stringLength: stringLength - - }, - - // Statistics - statistics: { - - // Number of created terms - getCountTerms: function() { - return term_ref; - } - - }, - - // JavaScript to Prolog - fromJavaScript: { - - // Type testing - test: { - - // Boolean - boolean: function( obj, tobj ) { - return obj === true || obj === false; - }, - - // Number - number: function( obj, tobj ) { - return typeof obj === "number"; - }, - - // String - string: function( obj, tobj ) { - return typeof obj === "string"; - }, - - // List - list: function( obj, tobj ) { - return obj instanceof Array; - }, - - // Variable - variable: function( obj, tobj ) { - return obj === undefined; - }, - - // Object - object: function( obj, tobj ) { - tobj = tobj === undefined ? false : tobj; - return tobj && !(obj instanceof Array) && typeof obj === "object"; - }, - - // Any - any: function( _, tobj ) { - return true; - } - - }, - - // Function conversion - conversion: { - - // Bolean - boolean: function( obj, tobj ) { - return new Term( obj ? "true" : "false", [] ); - }, - - // Number - number: function( obj, tobj ) { - return new Num( obj, obj % 1 !== 0 ); - }, - - // String - string: function( obj, tobj ) { - return new Term( obj, [] ); - }, - - // List - list: function( obj, tobj ) { - tobj = tobj === undefined ? false : tobj; - var arr = []; - var elem; - for( var i = 0; i < obj.length; i++ ) { - elem = pl.fromJavaScript.apply( obj[i], tobj ); - if( elem === undefined ) - return undefined; - arr.push( elem ); - } - return arrayToList( arr ); - }, - - // Variable - variable: function( obj, tobj ) { - return new Var( "_" ); - }, - - // Object - object: function( obj, tobj ) { - tobj = tobj === undefined ? false : tobj; - var list = new Term("[]", []); - var arr = []; - for(var prop in obj) { - if(!obj.hasOwnProperty(prop)) continue; - arr.push(new Term("-", [ - pl.fromJavaScript.apply(prop, tobj), - pl.fromJavaScript.apply(obj[prop], tobj) - ])); - } - return arrayToList(arr); - }, - - // Any - any: function( obj, tobj ) { - return undefined; - } - - }, - - // Transform object - apply: function( obj, tobj ) { - tobj = tobj === undefined ? false : tobj; - for( var i in pl.fromJavaScript.test ) - if( i !== "any" && pl.fromJavaScript.test[i]( obj, tobj ) ) - return pl.fromJavaScript.conversion[i]( obj, tobj ); - return pl.fromJavaScript.conversion.any( obj, tobj ); - } - }, - - // Types - type: { - - // Objects - Var: Var, - Num: Num, - Term: Term, - Rule: Rule, - State: State, - Stream: Stream, - Module: Module, - Thread: Thread, - Session: Session, - Substitution: Substitution, - File: TauFile, - Directory: TauDirectory, - - // Order - order: [Var, Num, Term, Stream], - - // Compare types - compare: function( x, y ) { - var ord_x = indexOf( pl.type.order, x.constructor ); - var ord_y = indexOf( pl.type.order, y.constructor ); - if( ord_x < ord_y ) { - return -1; - } else if( ord_x > ord_y ) { - return 1; - } else { - if( x.constructor === Num ) - if( x.is_float && y.is_float ) - return 0; - else if( x.is_float ) - return -1; - else if( y.is_float ) - return 1; - return 0; - } - }, - - // Is a substitution - is_substitution: function( obj ) { - return obj instanceof Substitution; - }, - - // Is a state - is_state: function( obj ) { - return obj instanceof State; - }, - - // Is a rule - is_rule: function( obj ) { - return obj instanceof Rule; - }, - - // Is a variable - is_variable: function( obj ) { - return obj instanceof Var; - }, - - // Is a stream - is_stream: function( obj ) { - return obj instanceof Stream; - }, - - // Is an anonymous variable - is_anonymous_var: function( obj ) { - return obj instanceof Var && obj.id === "_"; - }, - - // Is a callable term - is_callable: function( obj ) { - return obj instanceof Term - && (indexOf([",/2",";/2","->/2"], obj.indicator) === -1 - || pl.type.is_callable(obj.args[0]) && pl.type.is_callable(obj.args[1])) - || obj instanceof Var; - }, - - // Is a number - is_number: function( obj ) { - return obj instanceof Num; - }, - - // Is an integer - is_integer: function( obj ) { - return obj instanceof Num && !obj.is_float; - }, - - // Is a float - is_float: function( obj ) { - return obj instanceof Num && obj.is_float; - }, - - // Is a term - is_term: function( obj ) { - return obj instanceof Term; - }, - - // Is an atom - is_atom: function( obj ) { - return obj instanceof Term && obj.args.length === 0; - }, - - // Is a ground term - is_ground: function( obj ) { - if( obj instanceof Var ) return false; - if( obj instanceof Term ) - for( var i = 0; i < obj.args.length; i++ ) - if( !pl.type.is_ground( obj.args[i] ) ) - return false; - return true; - }, - - // Is atomic - is_atomic: function( obj ) { - return obj instanceof Term && obj.args.length === 0 || obj instanceof Num; - }, - - // Is compound - is_compound: function( obj ) { - return obj instanceof Term && obj.args.length > 0; - }, - - // Is a list - is_list: function( obj ) { - return obj instanceof Term && (obj.indicator === "[]/0" || obj.indicator === "./2"); - }, - - // Is an empty list - is_empty_list: function( obj ) { - return obj instanceof Term && obj.indicator === "[]/0"; - }, - - // Is a non empty list - is_non_empty_list: function( obj ) { - return obj instanceof Term && obj.indicator === "./2"; - }, - - // Is a fully list - is_fully_list: function( obj ) { - while( obj instanceof Term && obj.indicator === "./2" ) { - obj = obj.args[1]; - } - return obj instanceof Var || obj instanceof Term && obj.indicator === "[]/0"; - }, - - // Is a instantiated list - is_instantiated_list: function( obj ) { - while( obj instanceof Term && obj.indicator === "./2" ) { - obj = obj.args[1]; - } - return obj instanceof Term && obj.indicator === "[]/0"; - }, - - // Is an unitary list - is_unitary_list: function( obj ) { - return obj instanceof Term && obj.indicator === "./2" && obj.args[1] instanceof Term && obj.args[1].indicator === "[]/0"; - }, - - // Is a character - is_character: function( obj ) { - return obj instanceof Term && obj.args.length === 0 && (obj.id.length === 1 || obj.id.length > 0 && obj.id.length <= 2 && codePointAt( obj.id, 0 ) >= 65536); - }, - - // Is a in_character - is_in_character: function( obj ) { - return obj instanceof Term && (obj.indicator === "end_of_file/0" - || obj.id.length === 1 - || obj.id.length > 0 && obj.id.length <= 2 && codePointAt(obj.id, 0) >= 65536); - }, - - // Is a character_code - is_character_code: function( obj ) { - return obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 1114111; - }, - - // Is a in_character_code - is_in_character_code: function( obj ) { - return obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 1114111; - }, - - // Is a byte - is_byte: function( obj ) { - return obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 255; - }, - - // Is a in_byte - is_in_byte: function( obj ) { - return obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 255; - }, - - // Is an operator - is_operator: function( obj ) { - return obj instanceof Term && pl.arithmetic.evaluation[obj.indicator]; - }, - - // Is a directive - is_directive: function( obj ) { - return obj instanceof Term && (pl.directive[obj.indicator] !== undefined || pl.directive[obj.id + "/*"] !== undefined); - }, - - // Is a built-in predicate - is_builtin: function( obj ) { - return obj instanceof Term && pl.builtin.rules.hasOwnProperty(obj.indicator) && obj.indicator !== "goal_expansion/2"; - }, - - // Is an error - is_error: function( obj ) { - return obj instanceof Term && obj.indicator === "throw/1"; - }, - - // Is an error state - is_error_state: function( obj ) { - return pl.type.is_state( obj ) && obj.error && obj.error === true; - }, - - // Is a predicate indicator - is_predicate_indicator: function( obj ) { - return obj instanceof Term && obj.indicator === "//2" && obj.args[0] instanceof Term && obj.args[0].args.length === 0 && obj.args[1] instanceof Num && obj.args[1].is_float === false; - }, - - // Is a flag - is_flag: function( obj ) { - return obj instanceof Term && obj.args.length === 0 && pl.flag[obj.id] !== undefined; - }, - - // Is a valid value for a flag - is_value_flag: function( flag, obj ) { - if( !pl.type.is_flag( flag ) ) return false; - for( var value in pl.flag[flag.id].allowed ) { - if(!pl.flag[flag.id].allowed.hasOwnProperty(value)) continue; - if( pl.flag[flag.id].allowed[value].equals( obj ) ) return true; - } - return false; - }, - - // Is a io mode - is_io_mode: function( obj ) { - return pl.type.is_atom( obj ) && ["read","write","append"].indexOf( obj.id ) !== -1; - }, - - // Is a stream option - is_stream_option: function( obj ) { - return pl.type.is_term( obj ) && ( - obj.indicator === "alias/1" && pl.type.is_atom(obj.args[0]) || - obj.indicator === "reposition/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || - obj.indicator === "type/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "text" || obj.args[0].id === "binary") || - obj.indicator === "eof_action/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "error" || obj.args[0].id === "eof_code" || obj.args[0].id === "reset") - ); - }, - - // Is a stream position - is_stream_position: function( obj ) { - return pl.type.is_term(obj) && ( - obj.indicator === "end_of_stream/0" || - obj.indicator === "past_end_of_stream/0" || - obj.indicator === "position/3" - && pl.type.is_integer(obj.args[0]) - && pl.type.is_integer(obj.args[1]) - && pl.type.is_integer(obj.args[2]) - ) - }, - - // Is a stream property - is_stream_property: function( obj ) { - return pl.type.is_term( obj ) && ( - obj.indicator === "input/0" || - obj.indicator === "output/0" || - obj.indicator === "alias/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) || - obj.indicator === "file_name/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) || - obj.indicator === "reposition/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false")) || - obj.indicator === "type/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "text" || obj.args[0].id === "binary")) || - obj.indicator === "mode/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "read" || obj.args[0].id === "write" || obj.args[0].id === "append")) || - obj.indicator === "eof_action/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "error" || obj.args[0].id === "eof_code" || obj.args[0].id === "reset")) || - obj.indicator === "end_of_stream/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "at" || obj.args[0].id === "past" || obj.args[0].id === "not")) || - obj.indicator === "position/1" - && (pl.type.is_variable(obj.args[0]) || pl.type.is_term(obj.args[0]) && obj.args[0].indicator === "position/3" - && (pl.type.is_variable(obj.args[0].args[0]) || pl.type.is_integer(obj.args[0].args[0])) - && (pl.type.is_variable(obj.args[0].args[1]) || pl.type.is_integer(obj.args[0].args[1])) - && (pl.type.is_variable(obj.args[0].args[2]) || pl.type.is_integer(obj.args[0].args[2]))) - ); - }, - - // Is a streamable term - is_streamable: function( obj ) { - return obj.__proto__.stream !== undefined; - }, - - // Is a read option - is_read_option: function( obj ) { - return pl.type.is_term( obj ) && ["variables/1","variable_names/1","singletons/1"].indexOf( obj.indicator ) !== -1; - }, - - // Is a write option - is_write_option: function( obj ) { - return pl.type.is_term( obj ) && ( - obj.indicator === "quoted/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || - obj.indicator === "ignore_ops/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || - obj.indicator === "numbervars/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || - obj.indicator === "variable_names/1" && pl.type.is_fully_list(obj.args[0]) - ); - }, - - // Is a close option - is_close_option: function( obj ) { - return pl.type.is_term( obj ) && - obj.indicator === "force/1" && - pl.type.is_atom(obj.args[0]) && - (obj.args[0].id === "true" || obj.args[0].id === "false"); - }, - - // Is a modifiable flag - is_modifiable_flag: function( obj ) { - return pl.type.is_flag( obj ) && pl.flag[obj.id].changeable; - }, - - // Is a module - is_module: function( obj ) { - return obj instanceof Module; - }, - - // Is a virtual file - is_file: function( obj ) { - return obj instanceof TauFile; - }, - - // Is a virtual directory - is_directory: function( obj ) { - return obj instanceof TauDirectory; - }, - - // Is a predicate property - is_predicate_property: function(obj) { - return pl.type.is_term(obj) && ( - obj.indicator === "built_in/0" || - obj.indicator === "static/0" || - obj.indicator === "dynamic/0" || - obj.indicator === "native_code/0" || - obj.indicator === "multifile/0" || - obj.indicator === "meta_predicate/1" - ); - }, - - // Is a meta-argument specifier - is_meta_argument_specifier: function(obj) { - return pl.type.is_integer(obj) && obj.value >= 0 || - pl.type.is_atom(obj) && indexOf(["+", "-", "?", "*", "^", ":", "//"], obj.id) !== -1; - }, - - // Is a time property - is_time_property: function( obj ) { - return pl.type.is_term(obj) && obj.args.length === 1 - && (pl.type.is_variable(obj.args[0]) || pl.type.is_integer(obj.args[0])) - && indexOf(["year", "month", "day", "hours", "minutes", "seconds", "milliseconds", "weekday"], obj.id) !== -1; - }, - - }, - - // Arithmetic functions - arithmetic: { - - // Evaluation - evaluation: { - "e/0": { - type_args: null, - type_result: true, - fn: function( _ ) { return Math.E; } - }, - "pi/0": { - type_args: null, - type_result: true, - fn: function( _ ) { return Math.PI; } - }, - "tau/0": { - type_args: null, - type_result: true, - fn: function( _ ) { return 2*Math.PI; } - }, - "epsilon/0": { - type_args: null, - type_result: true, - fn: function( _ ) { return Number.EPSILON; } - }, - "+/1": { - type_args: null, - type_result: null, - fn: function( x, _ ) { return x; } - }, - "-/1": { - type_args: null, - type_result: null, - fn: function( x, _ ) { return -x; } - }, - "\\/1": { - type_args: false, - type_result: false, - fn: function( x, _ ) { return ~x; } - }, - "abs/1": { - type_args: null, - type_result: null, - fn: function( x, _ ) { return Math.abs( x ); } - }, - "sign/1": { - type_args: null, - type_result: null, - fn: function( x, _ ) { return Math.sign( x ); } - }, - "float_integer_part/1": { - type_args: true, - type_result: false, - fn: function( x, _ ) { return parseInt( x ); } - }, - "float_fractional_part/1": { - type_args: true, - type_result: true, - fn: function( x, _ ) { return x - parseInt( x ); } - }, - "float/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return parseFloat( x ); } - }, - "floor/1": { - type_args: true, - type_result: false, - fn: function( x, _ ) { return Math.floor( x ); } - }, - "truncate/1": { - type_args: true, - type_result: false, - fn: function( x, _ ) { return parseInt( x ); } - }, - "round/1": { - type_args: true, - type_result: false, - fn: function( x, _ ) { return Math.round( x ); } - }, - "ceiling/1": { - type_args: true, - type_result: false, - fn: function( x, _ ) { return Math.ceil( x ); } - }, - "sin/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return Math.sin( x ); } - }, - "cos/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return Math.cos( x ); } - }, - "tan/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return Math.tan( x ); } - }, - "asin/1": { - type_args: null, - type_result: true, - fn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.asin(x) : pl.error.evaluation("undefined", thread.__call_indicator); } - }, - "acos/1": { - type_args: null, - type_result: true, - fn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.acos(x) : pl.error.evaluation("undefined", thread.__call_indicator); } - }, - "atan/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return Math.atan( x ); } - }, - "atan2/2": { - type_args: null, - type_result: true, - fn: function( x, y, thread ) { return x === 0 && y === 0 ? pl.error.evaluation("undefined", thread.__call_indicator) : Math.atan2(x, y); } - }, - "acosh/1": { - type_args: null, - type_result: true, - fn: function( x, thread ) { return x >= 1 ? Math.acosh(x) : pl.error.evaluation("undefined", thread.__call_indicator); } - }, - "asinh/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return Math.asinh( x ); } - }, - "atanh/1": { - type_args: null, - type_result: true, - fn: function( x, thread ) { return Math.abs(x) < 1 ? Math.atanh(x) : pl.error.evaluation("undefined", thread.__call_indicator); } - }, - "cosh/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return Math.cosh( x ); } - }, - "sinh/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return Math.sinh( x ); } - }, - "tanh/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return Math.tanh( x ); } - }, - "exp/1": { - type_args: null, - type_result: true, - fn: function( x, _ ) { return Math.exp( x ); } - }, - "sqrt/1": { - type_args: null, - type_result: true, - fn: function( x, thread ) { return x >= 0 ? Math.sqrt( x ) : pl.error.evaluation( "undefined", thread.__call_indicator ); } - }, - "log/1": { - type_args: null, - type_result: true, - fn: function( x, thread ) { return x > 0 ? Math.log( x ) : pl.error.evaluation( "undefined", thread.__call_indicator ); } - }, - "log/2": { - type_args: null, - type_result: true, - fn: function( x, y, thread ) { return x > 0 && y > 0 ? Math.log(y)/Math.log(x) : pl.error.evaluation( "undefined", thread.__call_indicator ); } - }, - "log10/1": { - type_args: null, - type_result: true, - fn: function( x, thread ) { return x > 0 ? Math.log(x)/Math.log(10) : pl.error.evaluation( "undefined", thread.__call_indicator ); } - }, - "+/2": { - type_args: null, - type_result: null, - fn: function( x, y, _ ) { return x + y; } - }, - "-/2": { - type_args: null, - type_result: null, - fn: function( x, y, _ ) { return x - y; } - }, - "*/2": { - type_args: null, - type_result: null, - fn: function( x, y, _ ) { return x * y; } - }, - "//2": { - type_args: null, - type_result: true, - fn: function( x, y, thread ) { return y ? x / y : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } - }, - "///2": { - type_args: false, - type_result: false, - fn: function( x, y, thread ) { return y ? Math.trunc( x / y ) : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } - }, - "div/2": { - type_args: false, - type_result: false, - fn: function( x, y, thread ) { return y ? Math.floor( x / y ) : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } - }, - "**/2": { - type_args: null, - type_result: true, - fn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation("zero_divisor", thread.__call_indicator) : Math.pow(x, y); } - }, - "^/2": { - type_args: null, - type_result: null, - fn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation("zero_divisor", thread.__call_indicator) : Math.pow(x, y); } - }, - "<>/2": { - type_args: false, - type_result: false, - fn: function( x, y, _ ) { return x >> y; } - }, - "/\\/2": { - type_args: false, - type_result: false, - fn: function( x, y, _ ) { return x & y; } - }, - "\\//2": { - type_args: false, - type_result: false, - fn: function( x, y, _ ) { return x | y; } - }, - "xor/2": { - type_args: false, - type_result: false, - fn: function( x, y, _ ) { return x ^ y; } - }, - "rem/2": { - type_args: false, - type_result: false, - fn: function( x, y, thread ) { return y ? x % y : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } - }, - "mod/2": { - type_args: false, - type_result: false, - fn: function( x, y, thread ) { return y ? x - Math.floor( x / y ) * y : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } - }, - "max/2": { - type_args: null, - type_result: null, - fn: function( x, y, _ ) { return Math.max( x, y ); } - }, - "min/2": { - type_args: null, - type_result: null, - fn: function( x, y, _ ) { return Math.min( x, y ); } - }, - "gcd/2": { - type_args: false, - type_result: false, - fn: function( x, y, _ ) { return gcd(x, y); } - } - - } - - }, - - // Directives - directive: { - - // dynamic/1 - "dynamic/1": function( thread, atom, options ) { - var indicators = atom.args[0]; - if(!pl.type.is_list(indicators)) - indicators = arrayToList([indicators]); - var pointer = indicators; - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - indicator = pointer.args[0]; - if( pl.type.is_variable( indicator ) ) { - thread.throw_warning( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_compound( indicator ) || indicator.indicator !== "//2" ) { - thread.throw_warning( pl.error.type( "predicate_indicator", indicator, atom.indicator ) ); - } else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) { - thread.throw_warning( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atom( indicator.args[0] ) ) { - thread.throw_warning( pl.error.type( "atom", indicator.args[0], atom.indicator ) ); - } else if( !pl.type.is_integer( indicator.args[1] ) ) { - thread.throw_warning( pl.error.type( "integer", indicator.args[1], atom.indicator ) ); - } else { - var key = indicator.args[0].id + "/" + indicator.args[1].value; - var get_module = thread.session.modules[options.context_module]; - get_module.public_predicates[key] = true; - if( !get_module.rules[key] ) - get_module.rules[key] = []; - } - pointer = pointer.args[1]; - } - if(pl.type.is_variable(pointer)) { - thread.throw_warning( pl.error.instantiation( atom.indicator ) ); - } else if(!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { - thread.throw_warning( pl.error.type( "predicate_indicator", indicator, atom.indicator ) ); - } - }, - - // dynamic/[2..] - "dynamic/*": function( thread, atom ) { - for(var i = 0; i < atom.args.length; i++) { - pl.directive["dynamic/1"](thread, new Term("dynamic", [atom.args[i]])); - } - }, - - // multifile/1 - "multifile/1": function( thread, atom, options ) { - var indicator = atom.args[0]; - if( pl.type.is_variable( indicator ) ) { - thread.throw_warning( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_compound( indicator ) || indicator.indicator !== "//2" ) { - thread.throw_warning( pl.error.type( "predicate_indicator", indicator, atom.indicator ) ); - } else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) { - thread.throw_warning( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atom( indicator.args[0] ) ) { - thread.throw_warning( pl.error.type( "atom", indicator.args[0], atom.indicator ) ); - } else if( !pl.type.is_integer( indicator.args[1] ) ) { - thread.throw_warning( pl.error.type( "integer", indicator.args[1], atom.indicator ) ); - } else { - var predicate_indicator = atom.args[0].args[0].id + "/" + atom.args[0].args[1].value; - var get_module = thread.session.modules[options.context_module]; - get_module.multifile_predicates[predicate_indicator] = true; - if(!get_module.rules.hasOwnProperty(predicate_indicator)) { - get_module.rules[predicate_indicator] = []; - get_module.public_predicates[predicate_indicator] = false; - } - } - }, - - // meta_predicate/1 - "meta_predicate/1": function(thread, atom, options) { - var options = options === undefined ? {} : options; - var head = atom.args[0]; - if( pl.type.is_variable(head) ) { - thread.throw_warning(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(head)) { - thread.throw_warning(pl.error.type("callable", head, atom.indicator)); - } else { - for(var i = 0; i < head.args.length; i++) { - var arg = head.args[i]; - if(!pl.type.is_meta_argument_specifier(arg)) { - thread.throw_warning(pl.error.type("meta_argument_specifier", arg, atom.indicator)); - return; - } - } - thread.session.modules[options.context_module].meta_predicates[head.indicator] = head; - } - }, - - // set_prolog_flag - "set_prolog_flag/2": function( thread, atom ) { - var flag = atom.args[0], value = atom.args[1]; - if( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) { - thread.throw_warning( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atom( flag ) ) { - thread.throw_warning( pl.error.type( "atom", flag, atom.indicator ) ); - } else if( !pl.type.is_flag( flag ) ) { - thread.throw_warning( pl.error.domain( "prolog_flag", flag, atom.indicator ) ); - } else if( !pl.type.is_modifiable_flag( flag ) ) { - thread.throw_warning( pl.error.permission( "modify", "flag", flag, atom.indicator ) ); - } else if( !pl.type.is_value_flag( flag, value ) ) { - thread.throw_warning( pl.error.domain( "flag_value", new Term( "+", [flag, value] ), atom.indicator ) ); - } else { - thread.session.flag[flag.id] = value; - } - }, - - // module/2 - "module/2": function(thread, atom, options) { - var options = options === undefined ? {} : options; - options.context_module = options.context_module === undefined ? "user" : options.context_module; - var module_id = atom.args[0], exports = atom.args[1]; - if(pl.type.is_variable(module_id) || pl.type.is_variable(exports)) { - thread.throw_warning(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_atom(module_id)) { - thread.throw_warning(pl.error.type("atom", module_id, atom.indicator)); - } else if(!pl.type.is_list(exports)) { - thread.throw_warning(pl.error.type("list", exports, atom.indicator)); - } else { - if(!pl.type.is_module(thread.session.modules[module_id.indicator])) { - var pointer = exports; - var indicators = []; - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - var predicate = pointer.args[0]; - if(!pl.type.is_predicate_indicator(predicate)) { - thread.throw_warning(pl.error.type("predicate_indicator", predicate, atom.indicator)); - } else { - indicators.push(predicate.args[0].id + "/" + predicate.args[1].value); - } - pointer = pointer.args[1]; - } - if(pl.type.is_variable(pointer)) { - thread.throw_warning(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_empty_list(pointer)) { - thread.throw_warning(pl.error.type("list", exports, atom.indicator)); - } - var new_module = new Module(module_id.id, {}, indicators, { - session: thread.session - }); - thread.session.modules[module_id.id] = new_module; - thread.session.modules[options.context_module].modules[module_id.id] = new_module; - options.context_module = module_id.id; - } else { - thread.throw_warning(pl.error.permission("create", "module", module_id, atom.indicator)); - } - } - }, - - // use_module/1 - "use_module/1": function(thread, atom, options) { - var options = options === undefined ? {} : options; - options.context_module = options.context_module === undefined ? "user" : options.context_module; - var module_id = atom.args[0]; - if(pl.type.is_variable(module_id)) { - thread.throw_warning(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_term(module_id)) { - thread.throw_warning(pl.error.type("term", module_id, atom.indicator)); - } else { - if(module_id.indicator === "library/1") { - var name = module_id.args[0].id; - var get_module = pl.modules[name]; - if(pl.type.is_module(get_module)) { - if(!thread.session.modules[options.context_module].modules.hasOwnProperty(name)) { - thread.session.modules[name] = get_module; - thread.session.modules[options.context_module].modules[name] = get_module; - for(var i = 0; i < get_module.dependencies.length; i++) { - var term = new Term("use_module", [new Term("library", [new Term(get_module.dependencies[i])])]); - pl.directive["use_module/1"](thread, term, { - context_module: name - }); - } - } - } else { - thread.throw_warning(pl.error.existence("module", module_id, atom.indicator)); - } - } else { - var name = module_id.id; - thread.consult(name, { - context_module: options.context_module, - text: false, - success: function() { - parseProgram(thread, options.string, options); - }, - error: function() { - options.error(pl.error.existence("module", module_id, atom.indicator)); - } - }); - return true; - } - } - }, - - // char_conversion/2 - "char_conversion/2": function(thread, atom, options) { - var inchar = atom.args[0], outchar = atom.args[1]; - if(pl.type.is_variable(inchar) || pl.type.is_variable(outchar)) { - thread.throw_warning(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_character(inchar)) { - thread.throw_warning(pl.error.type("character", inchar, atom.indicator)); - } else if(!pl.type.is_character(outchar)) { - thread.throw_warning(pl.error.type("character", outchar, atom.indicator)); - } else { - if(inchar.id === outchar.id) { - delete thread.session.__char_conversion[inchar.id]; - } else { - thread.session.__char_conversion[inchar.id] = outchar.id; - } - options.tokens = options.tokenizer.get_tokens(options.current_token); - options.current_token = 0; - return true; - } - }, - - // op/3 - "op/3": function( thread, atom ) { - var priority = atom.args[0], type = atom.args[1], operators = atom.args[2]; - if(pl.type.is_atom(operators)) - operators = new Term(".", [operators, new Term("[]")]); - if( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) { - thread.throw_warning( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_integer( priority ) ) { - thread.throw_warning( pl.error.type( "integer", priority, atom.indicator ) ); - } else if( !pl.type.is_atom( type ) ) { - thread.throw_warning( pl.error.type( "atom", type, atom.indicator ) ); - } else if( !pl.type.is_list( operators ) ) { - thread.throw_warning( pl.error.type( "list", operators, atom.indicator ) ); - } else if( pl.type.is_empty_list( operators ) ) { - thread.throw_warning( pl.error.permission( "create", "operator", operators, atom.indicator ) ); - } else { - var pointer = operators; - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - var operator = pointer.args[0]; - pointer = pointer.args[1]; - if( pl.type.is_variable( operator ) ) { - thread.throw_warning( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atom( operator ) ) { - thread.throw_warning( pl.error.type( "atom", operator, atom.indicator ) ); - } else if( priority.value < 0 || priority.value > 1200 ) { - thread.throw_warning( pl.error.domain( "operator_priority", priority, atom.indicator ) ); - } else if( operator.id === "," ) { - thread.throw_error( pl.error.permission( "modify", "operator", operator, atom.indicator ) ); - } else if( operator.id === "{}" ) { - thread.throw_warning( pl.error.permission( "create", "operator", operator, atom.indicator ) ); - } else if( operator.id === "[]" ) { - thread.throw_warning( pl.error.permission( "create", "operator", operator, atom.indicator ) ); - } else if( operator.id === "|" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) { - thread.throw_warning( pl.error.permission( "create", "operator", operator, atom.indicator ) ); - } else if( ["fy", "fx", "yf", "xf", "xfx", "yfx", "xfy"].indexOf( type.id ) === -1 ) { - thread.throw_warning( pl.error.domain( "operator_specifier", type, atom.indicator ) ); - } else { - var fix = { prefix: null, infix: null, postfix: null }; - for( var p in thread.session.__operators ) { - if(!thread.session.__operators.hasOwnProperty(p)) continue; - var classes = thread.session.__operators[p][operator.id]; - if( classes ) { - if( indexOf( classes, "fx" ) !== -1 ) { fix.prefix = { priority: p, type: "fx" }; } - if( indexOf( classes, "fy" ) !== -1 ) { fix.prefix = { priority: p, type: "fy" }; } - if( indexOf( classes, "xf" ) !== -1 ) { fix.postfix = { priority: p, type: "xf" }; } - if( indexOf( classes, "yf" ) !== -1 ) { fix.postfix = { priority: p, type: "yf" }; } - if( indexOf( classes, "xfx" ) !== -1 ) { fix.infix = { priority: p, type: "xfx" }; } - if( indexOf( classes, "xfy" ) !== -1 ) { fix.infix = { priority: p, type: "xfy" }; } - if( indexOf( classes, "yfx" ) !== -1 ) { fix.infix = { priority: p, type: "yfx" }; } - } - } - var current_class; - switch( type.id ) { - case "fy": case "fx": current_class = "prefix"; break; - case "yf": case "xf": current_class = "postfix"; break; - default: current_class = "infix"; break; - } - if(fix.infix && current_class === "postfix" || fix.postfix && current_class === "infix") { - thread.throw_warning( pl.error.permission( "create", "operator", operator, atom.indicator ) ); - } else { - if( fix[current_class] ) { - remove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type ); - if( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) { - delete thread.session.__operators[fix[current_class].priority][operator.id]; - } - } - if( priority.value > 0 ) { - if( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {}; - if( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = []; - thread.session.__operators[priority.value][operator.id].push( type.id ); - } - } - } - } - if(pl.type.is_variable(pointer)) { - thread.throw_warning( pl.error.instantiation( atom.indicator ) ); - return; - } else if(!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { - thread.throw_warning( pl.error.type( "list", operators, atom.indicator ) ); - return; - } - } - }, - - // initialization/1 - "initialization/1": function(thread, atom, options) { - var goal = atom.args[0]; - options.initialization.push(goal); - } - - }, - - // Flags - flag: { - - // Bounded numbers - bounded: { - allowed: [new Term( "true" ), new Term( "false" )], - value: new Term( "true" ), - changeable: false - }, - - // Maximum integer - max_integer: { - allowed: [new Num( Number.MAX_SAFE_INTEGER )], - value: new Num( Number.MAX_SAFE_INTEGER ), - changeable: false - }, - - // Minimum integer - min_integer: { - allowed: [new Num( Number.MIN_SAFE_INTEGER )], - value: new Num( Number.MIN_SAFE_INTEGER ), - changeable: false - }, - - // Rounding function - integer_rounding_function: { - allowed: [new Term( "down" ), new Term( "toward_zero" )], - value: new Term( "toward_zero" ), - changeable: false - }, - - // Character conversion - char_conversion: { - allowed: [new Term( "on" ), new Term( "off" )], - value: new Term( "on" ), - changeable: true - }, - - // Debugger - debug: { - allowed: [new Term( "on" ), new Term( "off" )], - value: new Term( "off" ), - changeable: true - }, - - // Maximum arity of predicates - max_arity: { - allowed: [new Term( "unbounded" )], - value: new Term( "unbounded" ), - changeable: false - }, - - // Unkwnow predicates behavior - unknown: { - allowed: [new Term( "error" ), new Term( "fail" ), new Term( "warning" )], - value: new Term( "error" ), - changeable: true - }, - - // Double quotes behavior - double_quotes: { - allowed: [new Term( "chars" ), new Term( "codes" ), new Term( "atom" )], - value: new Term( "chars" ), - changeable: true - }, - - // Occurs check behavior - occurs_check: { - allowed: [new Term( "false" ), new Term( "true" )], - value: new Term( "false" ), - changeable: true - }, - - // Dialect - dialect: { - allowed: [new Term( "tau" )], - value: new Term( "tau" ), - changeable: false - }, - - // Version - version_data: { - allowed: [new Term( "tau", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] )], - value: new Term( "tau", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] ), - changeable: false - }, - - // NodeJS - nodejs: { - allowed: [new Term( "true" ), new Term( "false" )], - value: new Term( nodejs_flag ? "true" : "false" ), - changeable: false - }, - - // Arguments - argv: { - allowed: [nodejs_arguments], - value: nodejs_arguments, - changeble: false - } - - }, - - // Unify - unify: function(t1, t2, occurs_check) { - occurs_check = occurs_check === undefined ? false : occurs_check; - var left = Array.isArray(t1) ? t1 : [t1]; - var right = Array.isArray(t2) ? t2 : [t2]; - if(left.length !== right.length) - return null; - var subs = new Substitution(); - while(left.length > 0) { - var s = left.pop(); - var t = right.pop(); - if(pl.type.is_variable(s)) - s = s.apply(subs); - if(pl.type.is_variable(t)) - t = t.apply(subs); - // same object - if(s == t) - continue; - // compound terms - if(pl.type.is_term(s) && pl.type.is_term(t)) { - if(s.indicator !== t.indicator) - return null; - for(var i = s.args.length-1; i >= 0; i--) { - left.push(s.args[i]); - right.push(t.args[i]); - } - // numbers - } else if(pl.type.is_number(s) && pl.type.is_number(t)) { - if(s.value !== t.value || s.is_float !== t.is_float) - return null; - // variable - term - } else if(pl.type.is_variable(s)) { - t = t.apply(subs); - // x = x - if(pl.type.is_variable(t) && s.id === t.id) - continue; - // occurs check - if(occurs_check === true && indexOf(t.variables(), s.id) !== -1) - return null; - // anonymous variable - if(s.id !== "_") - subs.add(s.id, t); - // term - variable - } else if(pl.type.is_variable(t)) { - left.push(t); - right.push(s); - // user-defined terms - } else if(s.unify !== undefined) { - var user_subs = s.apply(subs).unify(t.apply(subs), occurs_check); - if(user_subs == null) - return null; - for(var i in user_subs.links) - subs.add(i, user_subs.links[i]); - } else { - return null; - } - } - return subs.apply(subs); - }, - - // Is rename - is_rename: function(obj1, obj2, links) { - links = links || {}; - if(obj1.is_rename && obj2.is_rename) - return obj1.is_rename(obj2, links); - else if(obj1.equals && obj2.equals) - return obj1.equals(obj2); - else - return false; - }, - - // Compare - compare: function( obj1, obj2 ) { - var type = pl.type.compare( obj1, obj2 ); - return type !== 0 ? type : obj1.compare( obj2 ); - }, - - // Arithmetic comparison - arithmetic_compare: function( thread, obj1, obj2 ) { - var expr1 = obj1.interpret( thread ); - if( !pl.type.is_number( expr1 ) ) { - return expr1; - } else { - var expr2 = obj2.interpret( thread ); - if( !pl.type.is_number( expr2 ) ) { - return expr2; - } else { - return expr1.value < expr2.value ? -1 : (expr1.value > expr2.value ? 1 : 0); - } - } - }, - - // Operate - operate: function( thread, obj ) { - if( pl.type.is_operator( obj ) ) { - var op = pl.type.is_operator( obj ); - var args = [], value; - var type = false; - for( var i = 0; i < obj.args.length; i++ ) { - value = obj.args[i].interpret( thread ); - if( !pl.type.is_number( value ) ) { - return value; - } else if( op.type_args !== null && value.is_float !== op.type_args ) { - return pl.error.type( op.type_args ? "float" : "integer", value, thread.__call_indicator ); - } else { - args.push( value.value ); - } - type = type || value.is_float; - } - args.push( thread ); - value = pl.arithmetic.evaluation[obj.indicator].fn.apply( this, args ); - if(obj.indicator === "^/2" && !type && value !== parseInt(value, 10)) - return pl.error.type( "float", new Num(args[0],false), thread.__call_indicator ); - type = op.type_result === null ? type : op.type_result; - if( pl.type.is_term( value ) ) { - return value; - } else if( value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY ) { - return pl.error.evaluation( "float_overflow", thread.__call_indicator ); - } else if( type === false && thread.get_flag( "bounded" ).id === "true" && (value > thread.get_flag( "max_integer" ).value || value < thread.get_flag( "min_integer" ).value) ) { - return pl.error.evaluation( "int_overflow", thread.__call_indicator ); - } else { - return new Num( value, type ); - } - } else { - return pl.error.type( "evaluable", str_indicator(obj.indicator), thread.__call_indicator ); - } - }, - - // Errors - error: { - - // Existence error - existence: function( type, object, indicator ) { - if( typeof object === "string" ) - object = str_indicator( object ); - return new Term( "error", [new Term( "existence_error", [new Term( type ), object] ), str_indicator( indicator )] ); - }, - - // Type error - type: function( expected, found, indicator ) { - return new Term( "error", [new Term( "type_error", [new Term( expected ), found] ), str_indicator( indicator )] ); - }, - - // Instantation error - instantiation: function( indicator ) { - return new Term( "error", [new Term( "instantiation_error" ), str_indicator( indicator )] ); - }, - - // Uninstantation error - uninstantiation: function( found, indicator ) { - return new Term( "error", [new Term( "uninstantiation_error", [new Term( found )] ), str_indicator( indicator )] ); - }, - - // Domain error - domain: function( expected, found, indicator ) { - return new Term( "error", [new Term( "domain_error", [new Term( expected ), found]), str_indicator( indicator )] ); - }, - - // Representation error - representation: function( flag, indicator ) { - return new Term( "error", [new Term( "representation_error", [new Term( flag )] ), str_indicator( indicator )] ); - }, - - // Permission error - permission: function( operation, type, found, indicator ) { - return new Term( "error", [new Term( "permission_error", [new Term( operation ), new Term( type ), found] ), str_indicator( indicator )] ); - }, - - // Evaluation error - evaluation: function( error, indicator ) { - return new Term( "error", [new Term( "evaluation_error", [new Term( error )] ), str_indicator( indicator )] ); - }, - - // Syntax error - syntax: function( token, expected, last ) { - token = token || {value: "", line: 0, column: 0, matches: [""], start: 0}; - var position = last && token.matches.length > 0 ? token.start + token.matches[0].length : token.start; - var found = last ? new Term("token_not_found") : new Term("found", [new Term(token.value.toString())]); - var info = new Term( ".", [new Term( "line", [new Num(token.line+1)] ), new Term( ".", [new Term( "column", [new Num(position)] ), new Term( ".", [found, new Term( "[]", [] )] )] )] ); - return new Term( "error", [new Term( "syntax_error", [new Term( expected )] ), info] ); - }, - - // Syntax error by predicate - syntax_by_predicate: function( expected, indicator ) { - return new Term( "error", [new Term( "syntax_error", [new Term( expected ) ] ), str_indicator( indicator )] ); - } - - }, - - // Warnings - warning: { - - // Singleton variables - singleton: function( variables, rule, line ) { - var list = new Term( "[]" ); - for( var i = variables.length-1; i >= 0; i-- ) - list = new Term( ".", [new Var(variables[i]), list] ); - return new Term( "warning", [new Term( "singleton_variables", [list, str_indicator(rule)]), new Term(".",[new Term( "line", [ new Num( line, false ) ]), new Term("[]")])] ); - }, - - // Failed goal - failed_goal: function( goal, line ) { - return new Term( "warning", [new Term( "failed_goal", [goal]), new Term(".",[new Term( "line", [ new Num( line, false ) ]), new Term("[]")])] ); - } - - }, - - // Format of renamed variables - format_variable: function( id, variable ) { - var charcode = variable && variable.length > 0 ? codePointAt(variable, 1) : 0; - if(variable === "_" || variable && variable[0] === "_" && (charcode === 95 || charcode >= 65 && charcode <= 90)) - return "__" + id; - return "_" + id; - }, - - // Format of computed answers - format_answer: function( answer, thread, options ) { - if( thread instanceof Session ) - thread = thread.thread; - var options = options ? options : {}; - options.session = thread ? thread.session : undefined; - if( pl.type.is_error( answer ) ) { - return "uncaught exception: " + answer.args[0].toString(options); - } else if( answer === false ) { - return "false"; - } else if( answer === null ) { - return "limit exceeded"; - } else { - var i = 0; - var str = ""; - if( pl.type.is_substitution( answer ) ) { - var dom = answer.domain( true ); - for( var link in answer.links ){ - if( !answer.links.hasOwnProperty(link) ) continue; - if( pl.type.is_variable(answer.links[link]) ) { - var links = {}; - links[answer.links[link].id] = new Var(link); - answer = answer.apply( new Substitution(links) ); - } - } - answer = answer.filter( function( id, value ) { - return !pl.type.is_variable( value ) || - pl.type.is_variable( value ) && answer.has_attributes( id ) || - indexOf( dom, value.id ) !== -1 && id !== value.id; - } ); - } - for( var link in answer.links ) { - if(!answer.links.hasOwnProperty(link)) - continue; - if( pl.type.is_variable( answer.links[link] ) && link === answer.links[link].id ) { - var attrs = answer.attrs[link]; - for( var module in attrs ) { - if(!attrs.hasOwnProperty(module)) - continue; - i++; - if( str !== "" ) - str += ", "; - str += "put_attr(" + link + ", " + module + ", " + attrs[module].toString(options) + ")"; - } - } else { - i++; - if( str !== "" ) - str += ", "; - str += link.toString( options ) + " = " + - answer.links[link].toString( options, {priority: "700", class: "xfx", indicator: "=/2"}, "right" ); - } - } - if( i === 0 ) { - return "true"; - } else { - return str; - } - } - }, - - // Flatten default errors - flatten_error: function( error ) { - if( !pl.type.is_error( error ) ) return null; - error = error.args[0]; - var obj = {}; - obj.type = error.args[0].id; - obj.thrown = obj.type === "syntax_error" ? null : error.args[1].id; - obj.expected = null; - obj.found = null; - obj.representation = null; - obj.existence = null; - obj.existence_type = null; - obj.line = null; - obj.column = null; - obj.permission_operation = null; - obj.permission_type = null; - obj.evaluation_type = null; - if( obj.type === "type_error" || obj.type === "domain_error" ) { - obj.expected = error.args[0].args[0].id; - obj.found = error.args[0].args[1].toString(); - } else if( obj.type === "syntax_error" ) { - if( error.args[1].indicator === "./2" ) { - obj.expected = error.args[0].args[0].id; - obj.found = error.args[1].args[1].args[1].args[0]; - obj.found = obj.found.id === "token_not_found" ? obj.found.id : obj.found.args[0].id; - obj.line = error.args[1].args[0].args[0].value; - obj.column = error.args[1].args[1].args[0].args[0].value; - } else { - obj.thrown = error.args[1].id; - } - } else if( obj.type === "permission_error" ) { - obj.found = error.args[0].args[2].toString(); - obj.permission_operation = error.args[0].args[0].id; - obj.permission_type = error.args[0].args[1].id; - } else if( obj.type === "evaluation_error" ) { - obj.evaluation_type = error.args[0].args[0].id; - } else if( obj.type === "representation_error" ) { - obj.representation = error.args[0].args[0].id; - } else if( obj.type === "existence_error" ) { - obj.existence = error.args[0].args[1].toString(); - obj.existence_type = error.args[0].args[0].id; - } - return obj; - }, - - // Create new session - create: function( limit ) { - return new pl.type.Session( limit ); - } - - }; - - // Built-in predicates - pl.builtin = new Module("system", { - - // TERM AND GOAL EXPANSION - - // goal_expansion/2 - "goal_expansion/2": [ - new Rule(new Term("goal_expansion", [new Term(",", [new Var("X"),new Var("Y")]),new Term(",", [new Var("X_"),new Var("Y_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"),new Var("X_")]),new Term(";", [new Term("goal_expansion", [new Var("Y"),new Var("Y_")]),new Term("=", [new Var("Y_"),new Var("Y")])])]),new Term(",", [new Term("=", [new Var("X"),new Var("X_")]),new Term("goal_expansion", [new Var("Y"),new Var("Y_")])])])), - new Rule(new Term("goal_expansion", [new Term(";", [new Var("X"),new Var("Y")]),new Term(";", [new Var("X_"),new Var("Y_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"),new Var("X_")]),new Term(";", [new Term("goal_expansion", [new Var("Y"),new Var("Y_")]),new Term("=", [new Var("Y_"),new Var("Y")])])]),new Term(",", [new Term("=", [new Var("X"),new Var("X_")]),new Term("goal_expansion", [new Var("Y"),new Var("Y_")])])])), - new Rule(new Term("goal_expansion", [new Term("->", [new Var("X"),new Var("Y")]),new Term("->", [new Var("X_"),new Var("Y_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"),new Var("X_")]),new Term(";", [new Term("goal_expansion", [new Var("Y"),new Var("Y_")]),new Term("=", [new Var("Y_"),new Var("Y")])])]),new Term(",", [new Term("=", [new Var("X"),new Var("X_")]),new Term("goal_expansion", [new Var("Y"),new Var("Y_")])])])), - new Rule(new Term("goal_expansion", [new Term("catch", [new Var("X"),new Var("Y"),new Var("Z")]),new Term("catch", [new Var("X_"),new Var("Y"),new Var("Z_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"),new Var("X_")]),new Term(";", [new Term("goal_expansion", [new Var("Z"),new Var("Z_")]),new Term("=", [new Var("Z_"),new Var("Z")])])]),new Term(",", [new Term("=", [new Var("X_"),new Var("X")]),new Term("goal_expansion", [new Var("Z"),new Var("Z_")])])])), - new Rule(new Term("goal_expansion", [new Term("\\+", [new Var("X")]),new Term("\\+", [new Var("X_")])]), new Term(",", [new Term("nonvar", [new Var("X")]),new Term("goal_expansion", [new Var("X"),new Var("X_")])])), - new Rule(new Term("goal_expansion", [new Term("once", [new Var("X")]),new Term("once", [new Var("X_")])]), new Term(",", [new Term("nonvar", [new Var("X")]),new Term("goal_expansion", [new Var("X"),new Var("X_")])])), - new Rule(new Term("goal_expansion", [new Term("findall", [new Var("X"),new Var("Y"),new Var("Z")]),new Term("findall", [new Var("X"),new Var("Y_"),new Var("Z")])]), new Term("goal_expansion", [new Var("Y"),new Var("Y_")])), - new Rule(new Term("goal_expansion", [new Term("setof", [new Var("X"),new Var("Y"),new Var("Z")]),new Term("findall", [new Var("X"),new Var("Y_"),new Var("Z")])]), new Term("goal_expansion", [new Var("Y"),new Var("Y_")])), - new Rule(new Term("goal_expansion", [new Term("bagof", [new Var("X"),new Var("Y"),new Var("Z")]),new Term("findall", [new Var("X"),new Var("Y_"),new Var("Z")])]), new Term("goal_expansion", [new Var("Y"),new Var("Y_")])), - new Rule(new Term("goal_expansion", [new Term("call", [new Var("X")]),new Term("call", [new Var("X_")])]), new Term(",", [new Term("nonvar", [new Var("X")]),new Term("goal_expansion", [new Var("X"),new Var("X_")])])), - new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term("[]", [])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), - new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term("[]", [])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), - new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term("[]", [])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), - new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term(".", [new Var("A4"),new Term("[]", [])])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), - new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4"),new Var("A5")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term(".", [new Var("A4"),new Term(".", [new Var("A5"),new Term("[]", [])])])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), - new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4"),new Var("A5"),new Var("A6")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term(".", [new Var("A4"),new Term(".", [new Var("A5"),new Term(".", [new Var("A6"),new Term("[]", [])])])])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), - new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4"),new Var("A5"),new Var("A6"),new Var("A7")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term(".", [new Var("A4"),new Term(".", [new Var("A5"),new Term(".", [new Var("A6"),new Term(".", [new Var("A7"),new Term("[]", [])])])])])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])) - ], - - - - // SYSTEM PREDICATES ($) - - // '$push_global_stack'/2 - "$push_global_stack/2": function(thread, point, atom) { - var stack = atom.args[0], value = atom.args[1]; - if(!pl.type.is_variable(stack)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else { - thread.push_global_stack(stack.id, value); - thread.success(point); - } - }, - - // '$flush_global_stack'/3 - "$flush_global_stack/3": function(thread, point, atom) { - var stack = atom.args[0], list = atom.args[1], tail = atom.args[2]; - if(!pl.type.is_variable(stack)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else { - var values = thread.flush_global_stack(stack.id, tail); - thread.prepend([new State( - point.goal.replace(new Term("=", [list, values])), - point.substitution, - point - )]); - } - }, - - // '$free_variable_set'/3 - "$free_variable_set/3": function(thread, point, atom) { - var goal_in = atom.args[0], goal_out = atom.args[1], vars = atom.args[2]; - var bv = []; - var pointer = goal_in; - while(pl.type.is_term(pointer) && pointer.indicator === "^/2") { - bv = bv.concat(pointer.args[0].variables()); - pointer = pointer.args[1]; - } - var gv = pointer.variables(); - var fv = arrayToList(map(difference(gv, bv), function(v) { - return new Var(v); - })); - thread.prepend([ - new State( - point.goal.replace(new Term(",", [ - new Term("=", [goal_out, pointer]), - new Term("=", [vars, fv]) - ])), - point.substitution, - point - ) - ]); - }, - - // '$member'/2 - "$member/2": [ - new pl.type.Rule(new pl.type.Term("$member", [new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("X"),new pl.type.Var("_")])]), null), - new pl.type.Rule(new pl.type.Term("$member", [new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("_"),new pl.type.Var("Xs")])]), new pl.type.Term("$member", [new pl.type.Var("X"),new pl.type.Var("Xs")])) - ], - - // '$bind_bagof_keys/2'/2 - "$bind_bagof_keys/2": [ - new pl.type.Rule(new pl.type.Term("$bind_bagof_keys", [new pl.type.Term("[]", []),new pl.type.Var("_")]), null), - new pl.type.Rule(new pl.type.Term("$bind_bagof_keys", [new pl.type.Term(".", [new pl.type.Term("-", [new pl.type.Var("Key"),new pl.type.Var("_")]),new pl.type.Var("Bag")]),new pl.type.Var("Vars")]), new pl.type.Term(",", [new pl.type.Term("term_variables", [new pl.type.Var("Key"),new pl.type.Var("Vars"),new pl.type.Var("_")]),new pl.type.Term("$bind_bagof_keys", [new pl.type.Var("Bag"),new pl.type.Var("Vars")])])) - ], - - // '$findall'/4 - "$findall/4": [ - new pl.type.Rule(new pl.type.Term("$findall", [new pl.type.Var("Template0"),new pl.type.Var("Goal0"),new pl.type.Var("Instances"),new pl.type.Var("Tail")]), new pl.type.Term(";", [new pl.type.Term(",", [new pl.type.Term("copy_term", [new pl.type.Term("-", [new pl.type.Var("Template0"),new pl.type.Var("Goal0")]),new pl.type.Term("-", [new pl.type.Var("Template1"),new pl.type.Var("Goal1")])]),new pl.type.Term(",", [new pl.type.Term("call", [new pl.type.Var("Goal1")]),new pl.type.Term(",", [new pl.type.Term("copy_term", [new pl.type.Var("Template1"),new pl.type.Var("Template2")]),new pl.type.Term(",", [new pl.type.Term("$push_global_stack", [new pl.type.Var("Var"),new pl.type.Var("Template2")]),new pl.type.Term("false", [])])])])]),new pl.type.Term("$flush_global_stack", [new pl.type.Var("Var"),new pl.type.Var("Instances"),new pl.type.Var("Tail")])])) - ], - - // '$bagof'/3 - "$bagof/3": [ - new pl.type.Rule(new pl.type.Term("$bagof", [new pl.type.Var("Template"),new pl.type.Var("Goal0"),new pl.type.Var("Answer")]), new pl.type.Term(",", [new pl.type.Term("$free_variable_set", [new pl.type.Term("^", [new pl.type.Var("Template"),new pl.type.Var("Goal0")]),new pl.type.Var("Goal1"),new pl.type.Var("FV")]),new pl.type.Term(",", [new pl.type.Term("findall", [new pl.type.Term("-", [new pl.type.Var("FV"),new pl.type.Var("Template")]),new pl.type.Var("Goal1"),new pl.type.Var("Answers"),new pl.type.Term("[]", [])]),new pl.type.Term(",", [new pl.type.Term("$bind_bagof_keys", [new pl.type.Var("Answers"),new pl.type.Var("_")]),new pl.type.Term(",", [new pl.type.Term("keygroup", [new pl.type.Var("Answers"),new pl.type.Var("KeyGroups")]),new pl.type.Term(",", [new pl.type.Term("keysort", [new pl.type.Var("KeyGroups"),new pl.type.Var("KeySorted")]),new pl.type.Term("$member", [new pl.type.Term("-", [new pl.type.Var("FV"),new pl.type.Var("Answer")]),new pl.type.Var("KeySorted")])])])])])])) - ], - - // '$setof'/3 - "$setof/3": [ - new pl.type.Rule(new pl.type.Term("$setof", [new pl.type.Var("Template"),new pl.type.Var("Goal0"),new pl.type.Var("Answer")]), new pl.type.Term(",", [new pl.type.Term("$free_variable_set", [new pl.type.Term("^", [new pl.type.Var("Template"),new pl.type.Var("Goal0")]),new pl.type.Var("Goal1"),new pl.type.Var("FV")]),new pl.type.Term(",", [new pl.type.Term("findall", [new pl.type.Term("-", [new pl.type.Var("FV"),new pl.type.Var("Template")]),new pl.type.Var("Goal1"),new pl.type.Var("Answers"),new pl.type.Term("[]", [])]),new pl.type.Term(",", [new pl.type.Term("$bind_bagof_keys", [new pl.type.Var("Answers"),new pl.type.Var("_")]),new pl.type.Term(",", [new pl.type.Term("keygroup", [new pl.type.Var("Answers"),new pl.type.Var("KeyGroups")]),new pl.type.Term(",", [new pl.type.Term("keysort", [new pl.type.Var("KeyGroups"),new pl.type.Var("KeySorted")]),new pl.type.Term(",", [new pl.type.Term("$member", [new pl.type.Term("-", [new pl.type.Var("FV"),new pl.type.Var("Unsorted")]),new pl.type.Var("KeySorted")]),new pl.type.Term("sort", [new pl.type.Var("Unsorted"),new pl.type.Var("Answer")])])])])])])])) - ], - - // '$if/3' - "$if/3": [ - new pl.type.Rule(new pl.type.Term("$if", [new pl.type.Var("If"),new pl.type.Var("Then"),new pl.type.Var("Else")]), new pl.type.Term(";", [new pl.type.Term(",", [new pl.type.Term("call", [new pl.type.Var("If")]),new pl.type.Term(",", [new pl.type.Term("$push_global_stack", [new pl.type.Var("Stack"),new pl.type.Var("_")]),new pl.type.Term("call", [new pl.type.Var("Then")])])]),new pl.type.Term(",", [new pl.type.Term("$flush_global_stack", [new pl.type.Var("Stack"),new pl.type.Term("[]", []),new pl.type.Term("[]", [])]),new pl.type.Term("call", [new pl.type.Var("Else")])])])) - ], - - - // ATTRIBUTED VARIABLES - - //put_attr/3 - "put_attr/3": function( thread, point, atom ) { - var variable = atom.args[0], module = atom.args[1], value = atom.args[2]; - if( !pl.type.is_variable(variable) ) { - thread.throw_error( pl.error.type( "variable", variable, atom.indicator ) ); - } else if( !pl.type.is_atom(module) ) { - thread.throw_error( pl.error.type( "atom", module, atom.indicator ) ); - } else { - var subs = point.substitution.set_attribute( variable.id, module, value ); - thread.prepend( [new State( point.goal.replace(null), subs, point )] ); - } - }, - - // get_attr/3 - "get_attr/3": function( thread, point, atom ) { - var variable = atom.args[0], module = atom.args[1], value = atom.args[2]; - if( !pl.type.is_variable(variable) ) { - thread.throw_error( pl.error.type( "variable", variable, atom.indicator ) ); - } else if( !pl.type.is_atom(module) ) { - thread.throw_error( pl.error.type( "atom", module, atom.indicator ) ); - } else { - var attr = point.substitution.get_attribute( variable.id, module ); - if( attr ) { - thread.prepend( [new State( - point.goal.replace( new Term("=", [value, attr]) ), - point.substitution, - point - )] ); - } - } - }, - - - - // INPUT AND OUTPUT - - // op/3 - "op/3": function( thread, point, atom ) { - var priority = atom.args[0], type = atom.args[1], operators = atom.args[2]; - if(pl.type.is_atom(operators)) - operators = new Term(".", [operators, new Term("[]")]); - if( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_integer( priority ) ) { - thread.throw_error( pl.error.type( "integer", priority, atom.indicator ) ); - } else if( !pl.type.is_atom( type ) ) { - thread.throw_error( pl.error.type( "atom", type, atom.indicator ) ); - } else if( !pl.type.is_list( operators ) ) { - thread.throw_error( pl.error.type( "list", operators, atom.indicator ) ); - } else if( pl.type.is_empty_list( operators ) ) { - thread.throw_error( pl.error.permission( "create", "operator", operators, atom.indicator ) ); - } else { - var pointer = operators; - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - var operator = pointer.args[0]; - pointer = pointer.args[1]; - if( pl.type.is_variable( operator ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( !pl.type.is_atom( operator ) ) { - thread.throw_error( pl.error.type( "atom", operator, atom.indicator ) ); - return; - } else if( priority.value < 0 || priority.value > 1200 ) { - thread.throw_error( pl.error.domain( "operator_priority", priority, atom.indicator ) ); - return; - } else if( operator.id === "," ) { - thread.throw_error( pl.error.permission( "modify", "operator", operator, atom.indicator ) ); - return; - } else if( operator.id === "{}" ) { - thread.throw_error( pl.error.permission( "create", "operator", operator, atom.indicator ) ); - return; - } else if( operator.id === "[]" ) { - thread.throw_error( pl.error.permission( "create", "operator", operator, atom.indicator ) ); - return; - } else if( operator.id === "|" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) { - thread.throw_error( pl.error.permission( "create", "operator", operator, atom.indicator ) ); - return; - } else if( ["fy", "fx", "yf", "xf", "xfx", "yfx", "xfy"].indexOf( type.id ) === -1 ) { - thread.throw_error( pl.error.domain( "operator_specifier", type, atom.indicator ) ); - return; - } else { - var fix = { prefix: null, infix: null, postfix: null }; - for( var p in thread.session.__operators ) { - if(!thread.session.__operators.hasOwnProperty(p)) continue; - var classes = thread.session.__operators[p][operator.id]; - if( classes ) { - if( indexOf( classes, "fx" ) !== -1 ) { fix.prefix = { priority: p, type: "fx" }; } - if( indexOf( classes, "fy" ) !== -1 ) { fix.prefix = { priority: p, type: "fy" }; } - if( indexOf( classes, "xf" ) !== -1 ) { fix.postfix = { priority: p, type: "xf" }; } - if( indexOf( classes, "yf" ) !== -1 ) { fix.postfix = { priority: p, type: "yf" }; } - if( indexOf( classes, "xfx" ) !== -1 ) { fix.infix = { priority: p, type: "xfx" }; } - if( indexOf( classes, "xfy" ) !== -1 ) { fix.infix = { priority: p, type: "xfy" }; } - if( indexOf( classes, "yfx" ) !== -1 ) { fix.infix = { priority: p, type: "yfx" }; } - } - } - var current_class; - switch( type.id ) { - case "fy": case "fx": current_class = "prefix"; break; - case "yf": case "xf": current_class = "postfix"; break; - default: current_class = "infix"; break; - } - if(fix.infix && current_class === "postfix" || fix.postfix && current_class === "infix") { - thread.throw_error( pl.error.permission( "create", "operator", operator, atom.indicator ) ); - return; - } else { - if( fix[current_class] ) { - remove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type ); - if( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) { - delete thread.session.__operators[fix[current_class].priority][operator.id]; - } - } - if( priority.value > 0 ) { - if( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {}; - if( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = []; - thread.session.__operators[priority.value][operator.id].push( type.id ); - } - } - } - } - if(pl.type.is_variable(pointer)) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if(!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { - thread.throw_error( pl.error.type( "list", operators, atom.indicator ) ); - return; - } else { - thread.success(point); - } - } - }, - - // current_op/3 - "current_op/3": function( thread, point, atom ) { - var priority = atom.args[0], specifier = atom.args[1], operator = atom.args[2]; - var points = []; - if( !pl.type.is_variable( priority ) && !pl.type.is_integer( priority ) ) { - thread.throw_error( pl.error.type( "integer", priority, atom.indicator ) ); - } else if( pl.type.is_integer( priority ) && ( priority.value < 0 || priority.value > 1200 ) ) { - thread.throw_error( pl.error.domain( "operator_priority", priority, atom.indicator ) ); - } else if( !pl.type.is_variable( specifier ) && !pl.type.is_atom( specifier ) ) { - thread.throw_error( pl.error.type( "atom", specifier, atom.indicator ) ); - } else if( pl.type.is_atom( specifier ) && indexOf( ["fy", "fx", "yf", "xf", "xfx", "yfx", "xfy"], specifier.id ) === -1 ) { - thread.throw_error( pl.error.domain( "operator_specifier", specifier, atom.indicator ) ); - } else if( !pl.type.is_variable( operator ) && !pl.type.is_atom( operator ) ) { - thread.throw_error( pl.error.type( "atom", operator, atom.indicator ) ); - } else { - for( var p in thread.session.__operators ) - for( var o in thread.session.__operators[p] ) - for( var i = 0; i < thread.session.__operators[p][o].length; i++ ) - points.push( new State( - point.goal.replace( - new Term( ",", [ - new Term( "=", [new Num( p, false ), priority] ), - new Term( ",", [ - new Term( "=", [new Term( thread.session.__operators[p][o][i], [] ), specifier] ), - new Term( "=", [new Term( o, [] ), operator] ) - ] ) - ] ) - ), - point.substitution, - point - ) ); - thread.prepend( points ); - } - }, - - - - // LOGIC AND CONTROL STRUCTURES - - // ;/2 (disjunction) - ";/2": function(thread, point, atom) { - var left = atom.args[0], right = atom.args[1]; - var context_left = left.args[0]; - var free_left = left.indicator === ":/2" ? left.args[1] : left; - // if then else - if(pl.type.is_term(free_left) && free_left.indicator === "->/2") { - var cond = left.indicator === ":/2" ? new Term(":", [context_left, new Term("call", [free_left.args[0]])]) : free_left.args[0]; - var then = left.indicator === ":/2" ? new Term(":", [context_left, free_left.args[1]]) : free_left.args[1]; - var otherwise = right; - var goal_fst = point.goal.replace(new Term( ",", [cond, new Term(",", [new Term("!"), then])] ) ); - var goal_snd = point.goal.replace(new Term( ",", [new Term("!"), otherwise])); - thread.prepend([ - new State(goal_fst, point.substitution, point), - new State(goal_snd, point.substitution, point) - ]); - // soft-cut - } else if(pl.type.is_term(free_left) && free_left.indicator === "*->/2") { - var cond = left.indicator === ":/2" ? new Term(":", [context_left, free_left.args[0]]) : free_left.args[0]; - var then = left.indicator === ":/2" ? new Term(":", [context_left, free_left.args[1]]) : free_left.args[1]; - var otherwise = right; - thread.prepend([new State( - point.goal.replace(new Term("$if", [cond, then, otherwise])), - point.substitution, - point - )]); - // otherwise - } else { - thread.prepend([ - new State(point.goal.replace(left), point.substitution, point), - new State(point.goal.replace(right), point.substitution, point) - ]); - } - }, - - // !/0 (cut) - "!/0": function( thread, point, atom ) { - var parent_cut, last_cut, states = []; - parent_cut = point; - last_cut = null; - while( parent_cut.parent !== null && parent_cut.parent.goal.search( atom ) ) { - last_cut = parent_cut; - parent_cut = parent_cut.parent; - if(parent_cut.goal !== null) { - var selected = parent_cut.goal.select(); - if(selected && selected.indicator === ":/2") - selected = selected.args[1]; - if( selected && selected.id === "call" && selected.search(atom) ) { - parent_cut = last_cut; - break; - } - } - } - var setup_call_cleanup = null; - for( var i = thread.points.length-1; i >= 0; i-- ) { - var state = thread.points[i]; - var node = state.parent; - while( node !== null && node !== parent_cut.parent ) { - node = node.parent; - } - if( node === null && node !== parent_cut.parent ) - states.push( state ); - else if(state.setup_call_cleanup_goal) - setup_call_cleanup = state.setup_call_cleanup_goal - } - thread.points = states.reverse(); - thread.prepend([new State( - point.goal.replace(setup_call_cleanup), - point.substitution, - point - )]); - }, - - // \+ (negation) - "\\+/1": function( thread, point, atom ) { - var goal = atom.args[0]; - if( pl.type.is_variable( goal ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_callable( goal ) ) { - thread.throw_error( pl.error.type( "callable", goal, atom.indicator ) ); - } else { - // TRANSPARENT VERSION OF THE NEGATION - /*var neg_thread; - if(point.negation_thread) { - neg_thread = point.negation_thread; - } else { - neg_thread = new Thread( thread.session ); - neg_thread.add_goal( goal ); - point.negation_thread = neg_thread; - } - neg_thread.answer( function( answer ) { - if(answer === false) { - thread.success( point ); - } else if(pl.type.is_error( answer )) { - thread.throw_error( answer.args[0] ); - } else if(answer === null) { - thread.prepend( [point] ); - thread.current_limit = 0; - } - thread.again( answer !== null ); - } ); - return true;*/ - - // '\+'(X) :- call(X), !, fail. - // '\+'(_). - thread.prepend( [ - new State( point.goal.replace( new Term( ",", [new Term( ",", [ new Term( "call", [goal] ), new Term( "!", [] ) ] ), new Term( "fail", [] ) ] ) ), point.substitution, point ), - new State( point.goal.replace( null ), point.substitution, point ) - ] ); - } - }, - - // ->/2 (implication) - "->/2": function( thread, point, atom ) { - var cond = atom.args[0], then = atom.args[1]; - var goal = point.goal.replace(new Term(",", [ - new Term("call", [cond]), - new Term(",", [new Term("!"), then]) - ])); - thread.prepend( [new State( goal, point.substitution, point )] ); - }, - - // *->/2 (soft-cut) - "*->/2": function(thread, point, atom) { - var cond = atom.args[0], then = atom.args[1]; - var goal = point.goal.replace(new Term(",", [ - new Term("call", [cond]), then])); - thread.prepend([new State(goal, point.substitution, point)]); - }, - - // fail/0 - "fail/0": function( _1, _2, _3 ) {}, - - // false/0 - "false/0": function( _1, _2, _3 ) {}, - - // true/0 - "true/0": function( thread, point, _ ) { - thread.success( point ); - }, - - // call/1..8 - "call/1": callN(1), - "call/2": callN(2), - "call/3": callN(3), - "call/4": callN(4), - "call/5": callN(5), - "call/6": callN(6), - "call/7": callN(7), - "call/8": callN(8), - - // once/1 - "once/1": function( thread, point, atom ) { - var goal = atom.args[0]; - thread.prepend( [new State( point.goal.replace( new Term( ",", [new Term( "call", [goal] ), new Term( "!", [] )] ) ), point.substitution, point )] ); - }, - - // forall/2 - "forall/2": function( thread, point, atom ) { - var generate = atom.args[0], test = atom.args[1]; - thread.prepend( [new State( point.goal.replace( new Term( "\\+", [new Term( ",", [new Term( "call", [generate] ), new Term( "\\+", [new Term( "call", [test] )] )] )] ) ), point.substitution, point )] ); - }, - - // repeat/0 - "repeat/0": function( thread, point, _ ) { - thread.prepend( [new State( point.goal.replace( null ), point.substitution, point ), point] ); - }, - - // EXCEPTIONS - - // throw/1 - "throw/1": function( thread, point, atom ) { - var error = atom.args[0]; - if(pl.type.is_variable(error)) { - thread.throw_error(pl.error.instantiation(thread.level.indicator)); - } else { - for(var i = 0; i < thread.points.length; i++) { - var state = thread.points[i]; - if(state.setup_call_cleanup_catch) { - thread.points = [new State( - new Term(",", [ - new Term("catch", [ - state.setup_call_cleanup_catch, - new Var("_"), - new Term("throw", [error]) - ]), - new Term("throw", [error]) - ]), - point.substitution, - point - )]; - return; - } - - } - thread.throw_error(error); - } - }, - - // catch/3 - "catch/3": function(thread, point, atom) { - var goal = atom.args[0], catcher = atom.args[1], recover = atom.args[2]; - var nthread; - if(!point.catch) { - nthread = new Thread(thread.session); - nthread.debugger = thread.debugger; - nthread.format_success = function(state) { return state.substitution; }; - nthread.format_error = function(state) { return state.goal; }; - nthread.add_goal(goal, true, point); - point.catch = nthread; - } else { - nthread = point.catch; - } - var callback = function(answer) { - if(pl.type.is_error(answer)) { - var occurs_check = thread.get_flag("occurs_check").indicator === "true/0"; - var state = new State(); - var mgu = pl.unify(answer.args[0], catcher, occurs_check); - if(mgu !== null) { - state.substitution = point.substitution.apply(mgu); - state.goal = point.goal.replace(recover).apply(mgu); - state.parent = point; - thread.prepend([state]); - } else { - thread.throw_error(answer.args[0]); - } - } else if(answer !== false && answer !== null) { - var state = answer === null ? [] : new State( - point.goal.apply(answer).replace(null), - point.substitution.apply(answer), - point - ); - thread.prepend([state, point]); - } else if(answer === null) { - thread.prepend([point]); - if(thread.has_limit) - thread.current_limit = 0; - } - thread.again(answer !== null); - }; - nthread.answer(callback); - return true; - }, - - // call_cleanup/2 - "call_cleanup/2": function(thread, point, atom) { - var call = atom.args[0], cleanup = atom.args[1]; - if(pl.type.is_variable(call) || pl.type.is_variable(cleanup)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(call)) { - thread.throw_error(pl.error.type("callable", call, atom.indicator)); - } else if(!pl.type.is_callable(cleanup)) { - thread.throw_error(pl.error.type("callable", cleanup, atom.indicator)); - } else { - var nthread, callback; - if(point.hasOwnProperty("setup_call_cleanup_thread")) { - nthread = point.setup_call_cleanup_thread; - callback = point.setup_call_cleanup_callback; - } else { - var goal = new Term("call", [call]); - nthread = new Thread(thread.session); - nthread.add_goal(goal, true, point); - callback = function(answer) { - if(answer === null) { - var state = new State( - point.goal, - point.substitution, - point - ); - state.setup_call_cleanup_thread = nthread; - state.setup_call_cleanup_callback = callback; - thread.prepend([state]); - } else if(answer === false) { - var cleanup_and_fail = new Term(",", [ - new Term("call", [cleanup]), - new Term("fail") - ]); - var state = new State( - point.goal.replace(cleanup_and_fail), - point.substitution, - point - ); - thread.prepend([state]); - } else if(pl.type.is_error(answer)) { - var cleanup_and_throw = new Term(",", [ - new Term("call", [cleanup]), - answer - ]); - var state = new State( - point.goal.replace(cleanup_and_throw), - point.substitution, - point - ); - thread.prepend([state]); - } else { - if(nthread.points.length === 0) { - var state = new State( - point.goal.replace( - new Term("call", [cleanup]) - ).apply(answer), - point.substitution.apply(answer), - point - ); - thread.prepend([state]); - } else { - var state1 = new State( - point.goal.apply(answer).replace(null), - point.substitution.apply(answer), - point - ); - var state2 = new State( - point.goal, - point.substitution, - point - ); - state2.setup_call_cleanup_thread = nthread; - state2.setup_call_cleanup_callback = callback; - state2.setup_call_cleanup_goal = cleanup.apply(answer); - state2.setup_call_cleanup_catch = cleanup; - thread.prepend([state1, state2]); - } - } - thread.again(); - } - } - nthread.answer(callback); - return true; - } - }, - - // setup_call_cleanup/3 - "setup_call_cleanup/3": function(thread, point, atom) { - var setup = atom.args[0], call = atom.args[1], cleanup = atom.args[2]; - if(pl.type.is_variable(setup) || pl.type.is_variable(call) || pl.type.is_variable(cleanup)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(setup)) { - thread.throw_error(pl.error.type("callable", setup, atom.indicator)); - } else if(!pl.type.is_callable(call)) { - thread.throw_error(pl.error.type("callable", call, atom.indicator)); - } else if(!pl.type.is_callable(cleanup)) { - thread.throw_error(pl.error.type("callable", cleanup, atom.indicator)); - } else { - thread.prepend([new State( - point.goal.replace(new Term(",", [ - new Term("once", [setup]), - new Term("call_cleanup", [call, cleanup]) - ])), - point.substitution, - point - )]); - } - }, - - // UNIFICATION - - // =/2 (unification) - "=/2": function( thread, point, atom ) { - var occurs_check = thread.get_flag( "occurs_check" ).indicator === "true/0"; - var state = new State(); - var mgu = pl.unify( atom.args[0], atom.args[1], occurs_check ); - if( mgu !== null ) { - state.goal = point.goal.apply( mgu ).replace( null ); - state.substitution = point.substitution.apply( mgu ); - state.parent = point; - thread.prepend( [state] ); - } - }, - - // unify_with_occurs_check/2 - "unify_with_occurs_check/2": function( thread, point, atom ) { - var state = new State(); - var mgu = pl.unify( atom.args[0], atom.args[1], true ); - if( mgu !== null ) { - state.goal = point.goal.apply( mgu ).replace( null ); - state.substitution = point.substitution.apply( mgu ); - state.parent = point; - thread.prepend( [state] ); - } - }, - - // \=/2 - "\\=/2": function( thread, point, atom ) { - var occurs_check = thread.get_flag( "occurs_check" ).indicator === "true/0"; - var mgu = pl.unify( atom.args[0], atom.args[1], occurs_check ); - if( mgu === null ) { - thread.success( point ); - } - }, - - // subsumes_term/2 - /* - subsumes_term(General, Specific) :- - \+ \+ ( - term_variables(Specific, Vars1), - unify_with_occurs_check(General, Specific), - term_variables(Vars1, Vars2), - Vars1 == Vars2 - ). - */ - "subsumes_term/2": function( thread, point, atom ) { - var general = atom.args[0], specific = atom.args[1]; - var vars1 = thread.next_free_variable(); - var vars2 = thread.next_free_variable(); - thread.prepend([new State( - point.goal.replace(new Term("\\+", [ - new Term("\\+", [ - new Term(",", [ - new Term("term_variables", [specific, vars1]), - new Term(",", [ - new Term("unify_with_occurs_check", [general, specific]), - new Term(",", [ - new Term("term_variables", [vars1, vars2]), - new Term("==", [vars1, vars2]) - ]) - ]) - ]) - ]) - ])), - point.substitution, - point - )]); - }, - - // ALL SOLUTIONS - - // findall/3 - "findall/3": function(thread, point, atom) { - var template = atom.args[0], goal = atom.args[1], instances = atom.args[2]; - var tail = new Term("[]", []); - thread.prepend([new State( - point.goal.replace(new Term("findall", [template, goal, instances, tail])), - point.substitution, - point - )]); - }, - - // findall/4 - "findall/4": function(thread, point, atom) { - var template = atom.args[0], goal = atom.args[1], instances = atom.args[2], tail = atom.args[3]; - var proper_goal = goal; - if(pl.type.is_term(goal) && goal.indicator === ":/2") - proper_goal = goal.args[1]; - if(pl.type.is_variable(proper_goal)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(proper_goal)) { - thread.throw_error(pl.error.type("callable", goal, atom.indicator)); - } else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) { - thread.throw_error(pl.error.type("list", instances, atom.indicator)); - } else if(!pl.type.is_variable(tail) && !pl.type.is_list(tail)) { - thread.throw_error(pl.error.type("list", tail, atom.indicator)); - } else { - thread.prepend([new State( - point.goal.replace(new Term("$findall", [template, goal, instances, tail])), - point.substitution, - point - )]); - } - }, - - // bagof/3 - "bagof/3": function(thread, point, atom) { - var template = atom.args[0], goal = atom.args[1], instances = atom.args[2]; - if(pl.type.is_variable(goal)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(goal)) { - thread.throw_error(pl.error.type("callable", goal, atom.indicator)); - } else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) { - thread.throw_error( pl.error.type("list", instances, atom.indicator)); - } else { - thread.prepend([new State( - point.goal.replace(new Term("$bagof", [template, goal, instances])), - point.substitution, - point - )]); - } - }, - - // setof/3 - "setof/3": function(thread, point, atom) { - var template = atom.args[0], goal = atom.args[1], instances = atom.args[2]; - if(pl.type.is_variable(goal)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(goal)) { - thread.throw_error(pl.error.type("callable", goal, atom.indicator)); - } else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) { - thread.throw_error( pl.error.type("list", instances, atom.indicator)); - } else { - thread.prepend([new State( - point.goal.replace(new Term("$setof", [template, goal, instances])), - point.substitution, - point - )]); - } - }, - - // TERM CREATION AND DECOMPOSITION - - // functor/3 - "functor/3": function( thread, point, atom ) { - var subs; - var term = atom.args[0], name = atom.args[1], arity = atom.args[2]; - if( pl.type.is_variable( term ) && (pl.type.is_variable( name ) || pl.type.is_variable( arity )) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( arity ) && !pl.type.is_integer( arity ) ) { - thread.throw_error( pl.error.type( "integer", atom.args[2], atom.indicator ) ); - } else if( !pl.type.is_variable( name ) && !pl.type.is_atomic( name ) ) { - thread.throw_error( pl.error.type( "atomic", atom.args[1], atom.indicator ) ); - } else if( pl.type.is_variable( term ) && !pl.type.is_atom( name ) && pl.type.is_integer( arity ) && arity.value > 0 ) { - thread.throw_error( pl.error.type( "atom", atom.args[1], atom.indicator ) ); - } else if( pl.type.is_variable( term ) && pl.type.is_integer( arity ) && arity.value < 0 ) { - thread.throw_error( pl.error.domain( "not_less_than_zero", atom.args[2], atom.indicator ) ); - } else if( pl.type.is_variable( term ) ) { - if( atom.args[2].value >= 0 ) { - var args = []; - for( var i = 0; i < arity.value; i++ ) - args.push( thread.next_free_variable() ); - var functor = pl.type.is_number( name ) ? name : new Term( name.id, args ); - thread.prepend( [new State( point.goal.replace( new Term( "=", [term, functor] ) ), point.substitution, point )] ); - } - } else { - var id = pl.type.is_number( term ) ? term : new Term( term.id, [] ); - var length = pl.type.is_number( term ) ? new Num( 0, false ) : new Num( term.args.length, false ); - var goal = new Term( ",", [new Term( "=", [id, name] ), new Term( "=", [length, arity] )] ); - thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); - } - }, - - // arg/3 - "arg/3": function( thread, point, atom ) { - if( pl.type.is_variable( atom.args[0] ) || pl.type.is_variable( atom.args[1] ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_integer( atom.args[0] ) ) { - thread.throw_error( pl.error.type( "integer", atom.args[0], atom.indicator ) ); - } else if( atom.args[0].value < 0 ) { - thread.throw_error( pl.error.domain( "not_less_than_zero", atom.args[0], atom.indicator ) ); - } else if( !pl.type.is_compound( atom.args[1] ) ) { - thread.throw_error( pl.error.type( "compound", atom.args[1], atom.indicator ) ); - } else { - var n = atom.args[0].value; - if( n > 0 && n <= atom.args[1].args.length ) { - var goal = new Term( "=", [atom.args[1].args[n-1], atom.args[2]] ); - thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); - } - } - }, - - // =../2 (univ) - "=../2": function( thread, point, atom ) { - var list; - if( pl.type.is_variable( atom.args[0] ) && (pl.type.is_variable( atom.args[1] ) - || pl.type.is_non_empty_list( atom.args[1] ) && pl.type.is_variable( atom.args[1].args[0] )) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_fully_list( atom.args[1] ) ) { - thread.throw_error( pl.error.type( "list", atom.args[1], atom.indicator ) ); - } else if( pl.type.is_variable( atom.args[0] ) && pl.type.is_empty_list( atom.args[1] ) ) { - thread.throw_error( pl.error.domain( "non_empty_list", atom.args[1], atom.indicator ) ); - } else if( !pl.type.is_variable( atom.args[0] ) ) { - if( pl.type.is_term( atom.args[0] ) && atom.args[0].args.length > 0 ) { - list = new Term( "[]" ); - for( var i = atom.args[0].args.length - 1; i >= 0; i-- ) { - list = new Term( ".", [atom.args[0].args[i], list] ); - } - list = new Term( ".", [new Term( atom.args[0].id ), list] ); - } else { - list = new Term( ".", [atom.args[0], new Term( "[]" )] ); - } - thread.prepend( [new State( point.goal.replace( new Term( "=", [list, atom.args[1]] ) ), point.substitution, point )] ); - } else if( !pl.type.is_variable( atom.args[1] ) ) { - var args = []; - list = atom.args[1].args[1]; - while( list.indicator === "./2" ) { - args.push( list.args[0] ); - list = list.args[1]; - } - if( pl.type.is_variable( atom.args[0] ) && pl.type.is_variable( list ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( args.length === 0 && pl.type.is_compound( atom.args[1].args[0] ) ) { - thread.throw_error( pl.error.type( "atomic", atom.args[1].args[0], atom.indicator ) ); - } else if( args.length > 0 && (pl.type.is_compound( atom.args[1].args[0] ) || pl.type.is_number( atom.args[1].args[0] )) ) { - thread.throw_error( pl.error.type( "atom", atom.args[1].args[0], atom.indicator ) ); - } else { - if( args.length === 0 ) { - thread.prepend( [new State( point.goal.replace( new Term( "=", [atom.args[1].args[0], atom.args[0]], point ) ), point.substitution, point )] ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [new Term( atom.args[1].args[0].id, args ), atom.args[0]] ) ), point.substitution, point )] ); - } - } - } - }, - - // copy_term/2 - "copy_term/2": function(thread, point, atom) { - var original_term = atom.args[0], renamed_term = atom.args[1]; - thread.session.renamed_variables = {}; - var new_term = original_term.rename(thread); - thread.session.renamed_variables = {}; - thread.prepend([ - new State( - point.goal.replace(new Term("=", [renamed_term, new_term])), - point.substitution, - point) - ] - ); - }, - - // term_variables/2 - "term_variables/2": [ - new pl.type.Rule(new pl.type.Term("term_variables", [new pl.type.Var("Term"),new pl.type.Var("Vars")]), new pl.type.Term("term_variables", [new pl.type.Var("Term"),new pl.type.Var("Vars"),new pl.type.Term("[]", [])])) - ], - - // term_variables/3 - "term_variables/3": function(thread, point, atom) { - var term = atom.args[0], vars = atom.args[1], tail = atom.args[2]; - if( !pl.type.is_fully_list( vars ) ) { - thread.throw_error( pl.error.type( "list", vars, atom.indicator ) ); - } else { - var list = arrayToList(map(nub(term.variables()), function(v) { - return new Var(v); - }), tail); - thread.prepend([new State( - point.goal.replace(new Term("=", [vars, list])), - point.substitution, - point - )]); - } - }, - - // numbervars/3 - "numbervars/3": function(thread, point, atom) { - var term = atom.args[0], start = atom.args[1], end = atom.args[2]; - if(pl.type.is_variable(start)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_integer(start)) { - thread.throw_error(pl.error.type("integer", start, atom.indicator)); - } else if(!pl.type.is_variable(end) && !pl.type.is_integer(end)) { - thread.throw_error(pl.error.type("integer", end, atom.indicator)); - } else { - var variables = nub(term.variables()); - var value = start.value; - var unif_body = new Term("true"); - for(var i = 0; i < variables.length; i++) { - unif_body = new Term(",", [ - new Term("=", [ - new Var(variables[i]), - new Term("$VAR", [new Num(value, false)])]), - unif_body]); - value++; - } - var unif_end = new Term("=", [end, new Num(value, false)]); - if(pl.type.is_variable(end) || end.value === value) { - thread.prepend([new State( - point.goal.replace(new Term(",", [unif_body, unif_end])), - point.substitution, - point - )]); - } - } - }, - - // CLAUSE RETRIEVAL AND INFORMATION - - // clause/2 - "clause/2": function(thread, point, atom) { - var head = atom.args[0], body = atom.args[1]; - var module_id = "user"; - if(pl.type.is_term(head) && head.indicator === ":/2") { - if(!pl.type.is_atom(head.args[0])) { - thread.throw_error(pl.error.type("module", head.args[0], atom.indicator)); - return; - } - module_id = head.args[0].id; - head = head.args[1]; - } - var get_module = thread.session.modules[module_id]; - if(pl.type.is_variable(head)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(head)) { - thread.throw_error(pl.error.type("callable", head, atom.indicator)); - } else if(!pl.type.is_variable(body) && !pl.type.is_callable(body)) { - thread.throw_error(pl.error.type("callable", body, atom.indicator)); - } else if(head.indicator === ",/2" || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { - thread.throw_error(pl.error.permission("access", "private_procedure", str_indicator(head.indicator), atom.indicator)); - } else if(pl.type.is_module(get_module) && get_module.rules[head.indicator]) { - if(get_module.is_public_predicate(head.indicator)) { - var states = []; - if(typeof get_module.rules[head.indicator] === "function") { - thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); - return; - } - for(var i = 0; i < get_module.rules[head.indicator].length; i++) { - var rule = get_module.rules[head.indicator][i]; - thread.session.renamed_variables = {}; - rule = rule.rename(thread); - if(rule.body === null) - rule.body = new Term("true"); - var goal = new Term(",", [ - new Term("=", [rule.head, head]), - new Term("=", [rule.body, body]) - ]); - states.push(new State(point.goal.replace(goal), point.substitution, point)); - } - thread.prepend(states); - } else { - thread.throw_error(pl.error.permission("access", "private_procedure", str_indicator(head.indicator), atom.indicator)); - } - } - }, - - // current_predicate/1 - "current_predicate/1": function(thread, point, atom) { - var indicator = atom.args[0]; - var module_id; - if(pl.type.is_term(indicator) && indicator.indicator === ":/2") { - if(!pl.type.is_atom(indicator.args[0])) { - thread.throw_error(pl.error.type("module", indicator.args[0], atom.indicator)); - return; - } - module_id = indicator.args[0].id; - indicator = indicator.args[1]; - } else { - module_id = "user"; - } - if(!pl.type.is_variable(indicator) && (!pl.type.is_compound(indicator) || indicator.indicator !== "//2")) { - thread.throw_error(pl.error.type( "predicate_indicator", indicator, atom.indicator)); - } else if(!pl.type.is_variable( indicator ) && !pl.type.is_variable(indicator.args[0]) && !pl.type.is_atom(indicator.args[0])) { - thread.throw_error(pl.error.type( "atom", indicator.args[0], atom.indicator)); - } else if(!pl.type.is_variable(indicator) && !pl.type.is_variable(indicator.args[1]) && !pl.type.is_integer(indicator.args[1])) { - thread.throw_error(pl.error.type("integer", indicator.args[1], atom.indicator)); - } else if(!pl.type.is_variable(indicator) && pl.type.is_integer(indicator.args[1]) && indicator.args[1].value < 0) { - thread.throw_error(pl.error.domain("not_less_than_zero", indicator.args[1], atom.indicator)); - } else { - var states = []; - var get_module = thread.session.modules[module_id]; - if(pl.type.is_module(get_module)) { - for(var prop in get_module.rules) { - if(!get_module.rules.hasOwnProperty(prop)) - continue; - var predicate = str_indicator(prop); - var goal = new Term("=", [predicate, indicator]); - states.push(new State(point.goal.replace(goal), point.substitution, point)); - } - thread.prepend(states); - } - } - }, - - // current_module/1 - "current_module/1": function(thread, point, atom) { - var module_id = atom.args[0]; - if(!pl.type.is_variable(module_id) && !pl.type.is_atom(module_id)) { - thread.throw_error(pl.error.type("atom", module_id, atom.indicator)); - } else { - if(pl.type.is_variable(module_id)) { - var states = []; - for(var prop in thread.session.modules) { - if(!thread.session.modules.hasOwnProperty(prop)) - continue; - states.push(new State( - point.goal.replace(new Term("=", [module_id, new Term(prop)])), - point.substitution, - point - )); - } - thread.prepend(states); - } else { - if(thread.session.modules.hasOwnProperty(module_id.id)) - thread.success(point); - } - } - }, - - // predicate_property/2 - "predicate_property/2": function(thread, point, atom) { - var head = atom.args[0], property = atom.args[1]; - var module_id; - if(pl.type.is_term(head) && head.indicator === ":/2") { - if(!pl.type.is_atom(head.args[0])) { - thread.throw_error(pl.error.type("module", head.args[0], atom.indicator)); - return; - } - module_id = head.args[0].id; - head = head.args[1]; - } - if(!pl.type.is_variable(head) && !pl.type.is_callable(head)) { - thread.throw_error(pl.error.type("callable", head, atom.indicator)); - } else if(!pl.type.is_variable(property) && !pl.type.is_predicate_property(property)) { - thread.throw_error(pl.error.domain("predicate_property", property, atom.indicator)); - } else { - var get_module = module_id ? thread.session.modules[module_id] : thread.session.modules.user; - var points = []; - // all predicates - if(pl.type.is_variable(head)) { - // built-in predicates (built_in + static + native_code + meta_predicate?) - if(!module_id) { - for(var prop in pl.builtin.rules) { - if(!pl.builtin.rules.hasOwnProperty(prop)) - continue; - var indicator = str_indicator(prop); - var args = []; - for(var i = 0; i < indicator.args[1].value; i++) - args.push(thread.next_free_variable()); - var unif_head = new Term(indicator.args[0].id, args); - var current_properties = [ - new Term("static"), - new Term("built_in"), - new Term("native_code") - ]; - if(pl.builtin.meta_predicates.hasOwnProperty(prop)) - current_properties.push(new Term("meta_predicate", [ - pl.builtin.meta_predicates[prop] - ])); - // all predicates, one property / all properties - for(var i = 0; i < current_properties.length; i++) { - if(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) { - points.push(new State( - point.goal.replace(new Term(",", [ - new Term("=", [head, unif_head]), - new Term("=", [property, current_properties[i]]) - ])), - point.substitution, - point - )); - } - } - } - } - // user-defined predicates - if(pl.type.is_module(get_module)) { - for(var prop in get_module.rules) { - if(!get_module.rules.hasOwnProperty(prop)) - continue; - var indicator = str_indicator(prop); - var args = []; - for(var i = 0; i < indicator.args[1].value; i++) - args.push(thread.next_free_variable()); - var unif_head = new Term(indicator.args[0].id, args); - var current_properties = []; - if(thread.is_public_predicate(prop, module_id)) - current_properties.push(new Term("dynamic")); - else - current_properties.push(new Term("static")); - if(get_module.rules[prop] instanceof Function) - current_properties.push(new Term("native_code")); - if(thread.is_multifile_predicate(prop, module_id)) - current_properties.push(new Term("multifile")); - if(get_module.meta_predicates.hasOwnProperty(prop)) - current_properties.push(new Term("meta_predicate", [ - get_module.meta_predicates[prop] - ])); - // all predicates, one property / all properties - for(var i = 0; i < current_properties.length; i++) { - if(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) { - points.push(new State( - point.goal.replace(new Term(",", [ - new Term("=", [head, unif_head]), - new Term("=", [property, current_properties[i]]) - ])), - point.substitution, - point - )); - } - } - } - } - // one predicate - } else { - var builtin = !module_id && pl.type.is_builtin(head); - var predicate = builtin ? pl.builtin.rules[head.indicator] : get_module.rules[head.indicator]; - get_module = builtin ? pl.builtin : get_module; - if(predicate) { - var current_properties; - if(builtin) { - current_properties = [ - new Term("static"), - new Term("built_in"), - new Term("native_code") - ]; - } else { - current_properties = []; - if(thread.is_public_predicate(head.indicator, module_id)) - current_properties.push(new Term("dynamic")); - else - current_properties.push(new Term("static")); - if(predicate instanceof Function) - current_properties.push(new Term("native_code")); - if(thread.is_multifile_predicate(head.indicator, module_id)) - current_properties.push(new Term("multifile")); - } - if(get_module.meta_predicates.hasOwnProperty(head.indicator)) - current_properties.push(new Term("meta_predicate", [ - get_module.meta_predicates[head.indicator] - ])); - var args = []; - for(var i = 0; i < head.args.length; i++) - args.push(thread.next_free_variable()); - var unif_head = new Term(head.id, args); - // one predicate, one property / all properties - for(var i = 0; i < current_properties.length; i++) { - if(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) { - points.push(new State( - point.goal.replace(new Term(",", [ - new Term("=", [head, unif_head]), - new Term("=", [property, current_properties[i]]) - ])), - point.substitution, - point - )); - } - } - } - } - thread.prepend(points); - } - }, - - // listing/0 - "listing/0": function( thread, point, atom ) { - var context_module = atom.context_module ? atom.context_module : "user"; - var rules = {}; - if(pl.type.is_module(thread.session.modules[context_module])) { - rules = thread.session.modules[context_module].rules; - } - var str = ""; - for(var indicator in rules) { - if(!rules.hasOwnProperty(indicator)) continue; - var predicate = rules[indicator]; - str += "% " + indicator + "\n"; - if(predicate instanceof Array) { - for(var i = 0; i < predicate.length; i++) - str += predicate[i].toString( {session: thread.session} ) + "\n"; - } else { - str += "/*\n" + predicate.toString() + "\n*/"; - } - str += "\n"; - } - thread.prepend( [new State( - point.goal.replace(new Term("write", [new Term(str, [])])), - point.substitution, - point - )] ); - }, - - // listing/1 - "listing/1": function( thread, point, atom ) { - var indicator = atom.args[0]; - var context_module = "user"; - if(indicator.indicator === ":/2") { - context_module = indicator.args[0].id; - indicator = indicator.args[1]; - } - if(pl.type.is_variable(indicator)) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if(!pl.type.is_predicate_indicator(indicator)) { - thread.throw_error( pl.error.type( "predicate_indicator", indicator, atom.indicator ) ); - } else { - var rules = {}; - if(pl.type.is_module(thread.session.modules[context_module])) { - rules = thread.session.modules[context_module].rules; - } - var str = ""; - var str_indicator = indicator.args[0].id + "/" + indicator.args[1].value; - if(rules.hasOwnProperty(str_indicator)) { - var predicate = rules[str_indicator]; - if(predicate instanceof Array) { - for(var i = 0; i < predicate.length; i++) - str += predicate[i].toString( {session: thread.session} ) + "\n"; - } else { - str += "/*\n" + predicate.toString() + "\n*/"; - } - str += "\n"; - } - thread.prepend( [new State( - point.goal.replace(new Term("write", [new Term(str, [])])), - point.substitution, - point - )] ); - } - }, - - // LIST OPERATIONS - - // sort/2 - "sort/2": function( thread, point, atom ) { - var list = atom.args[0], expected = atom.args[1]; - if( pl.type.is_variable( list ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) { - thread.throw_error( pl.error.type( "list", expected, atom.indicator ) ); - } else { - var arr = []; - var pointer = list; - while( pointer.indicator === "./2" ) { - arr.push( pointer.args[0] ); - pointer = pointer.args[1]; - } - if( pl.type.is_variable( pointer ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_empty_list( pointer ) ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - } else { - var sorted_arr = arr.sort( pl.compare ); - for( var i = sorted_arr.length-1; i > 0; i-- ) { - if( sorted_arr[i].equals(sorted_arr[i-1]) ) - sorted_arr.splice(i,1); - } - var sorted_list = new Term( "[]" ); - for( var i = sorted_arr.length-1; i >= 0; i-- ) { - sorted_list = new Term( ".", [sorted_arr[i], sorted_list] ); - } - thread.prepend( [new State( point.goal.replace( new Term( "=", [sorted_list, expected] ) ), point.substitution, point )] ); - } - } - }, - - // keysort/2 - "keysort/2": function( thread, point, atom ) { - var list = atom.args[0], expected = atom.args[1]; - if( pl.type.is_variable( list ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) { - thread.throw_error( pl.error.type( "list", expected, atom.indicator ) ); - } else { - var arr = []; - var elem; - var pointer = list; - while( pointer.indicator === "./2" ) { - elem = pointer.args[0]; - if( pl.type.is_variable( elem ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( !pl.type.is_term( elem ) || elem.indicator !== "-/2" ) { - thread.throw_error( pl.error.type( "pair", elem, atom.indicator ) ); - return; - } - elem.args[0].pair = elem.args[1]; - arr.push( elem.args[0] ); - pointer = pointer.args[1]; - } - if( pl.type.is_variable( pointer ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_empty_list( pointer ) ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - } else { - if(!pl.type.is_variable(expected)) { - var pointer = expected; - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - var head = pointer.args[0]; - if(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== "-/2")) { - thread.throw_error( pl.error.type( "pair", head, atom.indicator ) ); - return; - } - pointer = pointer.args[1]; - } - if(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) { - thread.throw_error( pl.error.type( "list", expected, atom.indicator ) ); - return; - } - } - var sorted_arr = arr.sort( pl.compare ); - var sorted_list = new pl.type.Term( "[]" ); - for( var i = sorted_arr.length - 1; i >= 0; i-- ) { - sorted_list = new pl.type.Term( ".", [new pl.type.Term( "-", [sorted_arr[i], sorted_arr[i].pair] ), sorted_list] ); - delete sorted_arr[i].pair; - } - thread.prepend( [new pl.type.State( point.goal.replace( new pl.type.Term( "=", [sorted_list, expected] ) ), point.substitution, point )] ); - } - } - }, - - // keygroup - "keygroup/2": function(thread, point, atom) { - var list = atom.args[0], expected = atom.args[1]; - if(pl.type.is_variable(list)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_variable(expected) && !pl.type.is_fully_list(expected)) { - thread.throw_error(pl.error.type("list", expected, atom.indicator)); - } else { - var keys = []; - var values = []; - var pointer = list - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - var elem = pointer.args[0]; - if(pl.type.is_variable(elem)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - return; - } else if(!pl.type.is_term(elem) || elem.indicator !== "-/2") { - thread.throw_error(pl.error.type("pair", elem, atom.indicator)); - return; - } - var key = elem.args[0], value = elem.args[1]; - var index = -1; - for(var i = 0; i < keys.length; i++) { - if(pl.compare(key, keys[i]) === 0) { - index = i; - break; - } - } - if(index === -1) { - index = keys.length; - keys.push(key); - values.push([]); - } - values[index].push(value); - pointer = pointer.args[1]; - } - if(pl.type.is_variable(pointer)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_empty_list(pointer)) { - thread.throw_error(pl.error.type("list", list, atom.indicator)); - } else { - if(!pl.type.is_variable(expected)) { - var pointer = expected; - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - var head = pointer.args[0]; - if(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== "-/2")) { - thread.throw_error(pl.error.type("pair", head, atom.indicator)); - return; - } - pointer = pointer.args[1]; - } - if(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) { - thread.throw_error(pl.error.type("list", expected, atom.indicator)); - return; - } - } - group = new Term("[]", []); - for(var i = keys.length-1; i >= 0; i--) - group = new Term(".", [new Term("-", [keys[i], arrayToList(values[i])]), group]); - thread.prepend([ - new State( - point.goal.replace(new pl.type.Term("=", [expected, group])), - point.substitution, - point - ) - ]); - } - } - }, - - // CLAUSE CREATION AND DESTRUCTION - - // asserta/1 - "asserta/1": function(thread, point, atom) { - var clause = atom.args[0]; - var module_id = "user"; - if(pl.type.is_term(clause) && clause.indicator === ":/2") { - module_id = clause.args[0].id; - clause = clause.args[1]; - } - if(pl.type.is_variable(clause)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(clause)) { - thread.throw_error(pl.error.type("callable", clause, atom.indicator)); - } else { - var head, body, get_module; - if(clause.indicator === ":-/2") { - head = clause.args[0]; - body = body_conversion(clause.args[1]); - } else { - head = clause; - body = null; - } - if(pl.type.is_variable(head)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(head)) { - thread.throw_error(pl.error.type("callable", head, atom.indicator)); - } else if(body !== null && !pl.type.is_callable(body)) { - thread.throw_error( pl.error.type("callable", body, atom.indicator)); - } else if((!pl.type.is_module(thread.session.modules[module_id]) - || thread.is_public_predicate(head.indicator, module_id)) - && head.indicator !== ",/2" - && !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { - if(!pl.type.is_module(thread.session.modules[module_id])) { - get_module = new Module(module_id, {}, "all", {session: thread.session}); - thread.session.modules[module_id] = get_module; - } else { - get_module = thread.session.modules[module_id]; - } - if(get_module.rules[head.indicator] === undefined) - get_module.rules[head.indicator] = []; - get_module.public_predicates[head.indicator] = true; - get_module.rules[head.indicator] = [new Rule(head, body, true)].concat(get_module.rules[head.indicator]); - get_module.update_indices_predicate(head.indicator); - thread.success(point); - } else { - thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); - } - } - }, - - // assertz/1 - "assertz/1": function(thread, point, atom) { - var clause = atom.args[0]; - var module_id = "user"; - if(pl.type.is_term(clause) && clause.indicator === ":/2") { - module_id = clause.args[0].id; - clause = clause.args[1]; - } - if(pl.type.is_variable(clause)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(clause)) { - thread.throw_error(pl.error.type("callable", clause, atom.indicator)); - } else { - var head, body, get_module; - if(clause.indicator === ":-/2") { - head = clause.args[0]; - body = body_conversion(clause.args[1]); - } else { - head = clause; - body = null; - } - if(pl.type.is_variable(head)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(head)) { - thread.throw_error(pl.error.type("callable", head, atom.indicator)); - } else if(body !== null && !pl.type.is_callable(body)) { - thread.throw_error( pl.error.type("callable", body, atom.indicator)); - } else if((!pl.type.is_module(thread.session.modules[module_id]) - || thread.is_public_predicate(head.indicator, module_id)) - && head.indicator !== ",/2" - && !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { - if(!pl.type.is_module(thread.session.modules[module_id])) { - get_module = new Module(module_id, {}, "all", {session: thread.session}); - thread.session.modules[module_id] = get_module; - } else { - get_module = thread.session.modules[module_id]; - } - if(get_module.rules[head.indicator] === undefined) - get_module.rules[head.indicator] = []; - get_module.public_predicates[head.indicator] = true; - get_module.rules[head.indicator].push(new Rule(head, body, true)); - get_module.update_indices_predicate(head.indicator); - thread.success(point); - } else { - thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); - } - } - }, - - // retract/1 - "retract/1": function(thread, point, atom) { - var clause = atom.args[0]; - if(pl.type.is_variable(clause)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(clause)) { - thread.throw_error(pl.error.type("callable", clause, atom.indicator)); - } else { - var head, body, module_atom, module_id; - if(clause.indicator === ":/2") { - module_atom = clause.args[0]; - clause = clause.args[1]; - if(!pl.type.is_atom(module_atom)) { - thread.throw_error(pl.error.type("module", module_atom, atom.indicator)); - return; - } - } else { - module_atom = new Term("user"); - } - if(clause.indicator === ":-/2") { - head = clause.args[0]; - body = clause.args[1]; - } else { - head = clause; - body = new Term("true"); - } - if(pl.type.is_variable(head)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - return; - } else if(!pl.type.is_callable(head)) { - thread.throw_error(pl.error.type("callable", head, atom.indicator)); - return; - } - module_id = module_atom.id; - var get_module = thread.session.modules[module_id]; - if(!pl.type.is_module(get_module)) - return; - if(!point.retract) { - if(thread.is_public_predicate(head.indicator, module_id) - && head.indicator !== ",/2" - && !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { - if(get_module.rules[head.indicator] !== undefined) { - var states = []; - if(typeof get_module.rules[head.indicator] === "function") { - thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); - return; - } - for(var i = 0; i < get_module.rules[head.indicator].length; i++) { - thread.session.renamed_variables = {}; - var orule = get_module.rules[head.indicator][i]; - var rule = orule.rename(thread); - if(rule.body === null) - rule.body = new Term("true", []); - var occurs_check = thread.get_flag("occurs_check").indicator === "true/0"; - var mgu = pl.unify(new Term(",", [head, body]), new Term(",", [rule.head, rule.body]), occurs_check); - if(mgu !== null) { - var state = new State( - point.goal.replace(new Term(",", [ - new Term(":", [ - module_atom, - new Term("retract", [new Term(":-", [head, body])]), - ]), - new Term(",", [ - new Term("=", [head, rule.head]), - new Term("=", [body, rule.body]) - ]) - ])), point.substitution, point); - state.retract = orule; - states.push(state); - } - } - thread.prepend(states); - } - } else { - thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); - } - } else { - retract(thread, point, head.indicator, point.retract, get_module); - } - } - }, - - // retractall/1 - "retractall/1": function(thread, point, atom) { - var head = atom.args[0]; - var context_module = "user"; - if(pl.type.is_term(head) && head.indicator === ":/2") { - context_module = head.args[0].id; - head = head.args[1]; - } - if(pl.type.is_variable(head)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_callable(head)) { - thread.throw_error(pl.error.type("callable", head, atom.indicator)); - } else if(!thread.is_public_predicate(head.indicator, context_module) - || head.indicator === ",/2" - || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { - thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); - } else { - thread.prepend([ - new State(point.goal.replace(new Term(",", [ - new Term(":", [ - new Term(context_module), - new Term("retract", [new pl.type.Term(":-", [head, new Var("_")])]) - ]), - new Term("fail", []) - ])), point.substitution, point), - new State(point.goal.replace(null), point.substitution, point) - ]); - } - }, - - // abolish/1 - "abolish/1": function(thread, point, atom) { - var predicate = atom.args[0]; - var module_id; - if(pl.type.is_term(predicate) && predicate.indicator === ":/2") { - if(!pl.type.is_atom(predicate.args[0])) { - thread.throw_error(pl.error.type("module", predicate.args[0], atom.indicator)); - return; - } - module_id = predicate.args[0].id; - predicate = predicate.args[1]; - } else { - module_id = "user"; - } - if(pl.type.is_variable(predicate) || pl.type.is_term(predicate) && predicate.indicator === "//2" - && (pl.type.is_variable(predicate.args[0]) || pl.type.is_variable(predicate.args[1]))) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_term(predicate) || predicate.indicator !== "//2") { - thread.throw_error(pl.error.type("predicate_indicator", predicate, atom.indicator)); - } else if(!pl.type.is_atom(predicate.args[0])) { - thread.throw_error(pl.error.type("atom", predicate.args[0], atom.indicator)); - } else if(!pl.type.is_integer(predicate.args[1])) { - thread.throw_error(pl.error.type("integer", predicate.args[1], atom.indicator)); - } else if(predicate.args[1].value < 0) { - thread.throw_error(pl.error.domain("not_less_than_zero", predicate.args[1], atom.indicator)); - } else if(pl.type.is_number(thread.get_flag("max_arity")) && predicate.args[1].value > thread.get_flag("max_arity").value) { - thread.throw_error(pl.error.representation("max_arity", atom.indicator)); - } else { - var get_module = thread.session.modules[module_id]; - if(pl.type.is_module(get_module)) { - var indicator = predicate.args[0].id + "/" + predicate.args[1].value; - if(thread.is_public_predicate(indicator, module_id) - && indicator !== ",/2" - && !thread.session.modules.system.rules.hasOwnProperty(indicator)) { - delete get_module.rules[indicator]; - delete get_module.indexed_clauses[indicator]; - delete get_module.non_indexable_clauses[indicator]; - delete get_module.public_predicates[indicator]; - delete get_module.multifile_predicates[indicator]; - thread.success(point); - } else { - thread.throw_error(pl.error.permission("modify", "static_procedure", atom.args[0], atom.indicator)); - } - } else { - thread.success(point); - } - } - }, - - // ATOM PROCESSING - - // atom_length/2 - "atom_length/2": function( thread, point, atom ) { - if( pl.type.is_variable( atom.args[0] ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atom( atom.args[0] ) ) { - thread.throw_error( pl.error.type( "atom", atom.args[0], atom.indicator ) ); - } else if( !pl.type.is_variable( atom.args[1] ) && !pl.type.is_integer( atom.args[1] ) ) { - thread.throw_error( pl.error.type( "integer", atom.args[1], atom.indicator ) ); - } else if( pl.type.is_integer( atom.args[1] ) && atom.args[1].value < 0 ) { - thread.throw_error( pl.error.domain( "not_less_than_zero", atom.args[1], atom.indicator ) ); - } else { - var length = new Num( stringLength(atom.args[0].id), false ); - thread.prepend( [new State( point.goal.replace( new Term( "=", [length, atom.args[1]] ) ), point.substitution, point )] ); - } - }, - - // atom_concat/3 - "atom_concat/3": function( thread, point, atom ) { - var str, goal, start = atom.args[0], end = atom.args[1], whole = atom.args[2]; - if( pl.type.is_variable( whole ) && (pl.type.is_variable( start ) || pl.type.is_variable( end )) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( start ) && !pl.type.is_atom( start ) ) { - thread.throw_error( pl.error.type( "atom", start, atom.indicator ) ); - } else if( !pl.type.is_variable( end ) && !pl.type.is_atom( end ) ) { - thread.throw_error( pl.error.type( "atom", end, atom.indicator ) ); - } else if( !pl.type.is_variable( whole ) && !pl.type.is_atom( whole ) ) { - thread.throw_error( pl.error.type( "atom", whole, atom.indicator ) ); - } else { - var v1 = pl.type.is_variable( start ); - var v2 = pl.type.is_variable( end ); - //var v3 = pl.type.is_variable( whole ); - if( !v1 && !v2 ) { - goal = new Term( "=", [whole, new Term( start.id + end.id )] ); - thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); - } else if( v1 && !v2 ) { - str = whole.id.substr( 0, whole.id.length - end.id.length ); - if( str + end.id === whole.id ) { - goal = new Term( "=", [start, new Term( str )] ); - thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); - } - } else if( v2 && !v1 ) { - str = whole.id.substr( start.id.length ); - if( start.id + str === whole.id ) { - goal = new Term( "=", [end, new Term( str )] ); - thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); - } - } else { - var states = []; - for( var i = 0; i <= whole.id.length; i++ ) { - var atom1 = new Term( whole.id.substr( 0, i ) ); - var atom2 = new Term( whole.id.substr( i ) ); - goal = new Term( ",", [new Term( "=", [atom1, start] ), new Term( "=", [atom2, end] )] ); - states.push( new State( point.goal.replace( goal ), point.substitution, point ) ); - } - thread.prepend( states ); - } - } - }, - - // sub_atom/5 - "sub_atom/5": function( thread, point, atom ) { - var i, atom1 = atom.args[0], before = atom.args[1], length = atom.args[2], after = atom.args[3], subatom = atom.args[4]; - if( pl.type.is_variable( atom1 ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atom( atom1 ) ) { - thread.throw_error( pl.error.type( "atom", atom1, atom.indicator ) ); - } else if( !pl.type.is_variable( before ) && !pl.type.is_integer( before ) ) { - thread.throw_error( pl.error.type( "integer", before, atom.indicator ) ); - } else if( !pl.type.is_variable( length ) && !pl.type.is_integer( length ) ) { - thread.throw_error( pl.error.type( "integer", length, atom.indicator ) ); - } else if( !pl.type.is_variable( after ) && !pl.type.is_integer( after ) ) { - thread.throw_error( pl.error.type( "integer", after, atom.indicator ) ); - } else if( pl.type.is_integer( before ) && before.value < 0 ) { - thread.throw_error( pl.error.domain( "not_less_than_zero", before, atom.indicator ) ); - } else if( pl.type.is_integer( length ) && length.value < 0 ) { - thread.throw_error( pl.error.domain( "not_less_than_zero", length, atom.indicator ) ); - } else if( pl.type.is_integer( after ) && after.value < 0 ) { - thread.throw_error( pl.error.domain( "not_less_than_zero", after, atom.indicator ) ); - } else if( !pl.type.is_variable( subatom ) && !pl.type.is_atom( subatom ) ) { - thread.throw_error( pl.error.type( "atom", subatom, atom.indicator ) ); - } else { - var bs = [], ls = [], as = []; - if( pl.type.is_variable( before ) ) { - for( i = 0; i <= atom1.id.length; i++ ) { - bs.push( i ); - } - } else { - bs.push( before.value ); - } - if( pl.type.is_variable( length ) ) { - for( i = 0; i <= atom1.id.length; i++ ) { - ls.push( i ); - } - } else { - ls.push( length.value ); - } - if( pl.type.is_variable( after ) ) { - for( i = 0; i <= atom1.id.length; i++ ) { - as.push( i ); - } - } else { - as.push( after.value ); - } - var states = []; - for( var _i in bs ) { - if(!bs.hasOwnProperty(_i)) continue; - i = bs[_i]; - for( var _j in ls ) { - if(!ls.hasOwnProperty(_j)) continue; - var j = ls[_j]; - var k = atom1.id.length - i - j; - if( indexOf( as, k ) !== -1 ) { - if( i+j+k === atom1.id.length ) { - var str = atom1.id.substr( i, j ); - if( atom1.id === atom1.id.substr( 0, i ) + str + atom1.id.substr( i+j, k ) ) { - var pl1 = new Term( "=", [new Term( str ), subatom] ); - var pl2 = new Term( "=", [before, new Num( i )] ); - var pl3 = new Term( "=", [length, new Num( j )] ); - var pl4 = new Term( "=", [after, new Num( k )] ); - var goal = new Term( ",", [ new Term( ",", [ new Term( ",", [pl2, pl3] ), pl4] ), pl1] ); - states.push( new State( point.goal.replace( goal ), point.substitution, point ) ); - } - } - } - } - } - thread.prepend( states ); - } - }, - - // atom_chars/2 - "atom_chars/2": function( thread, point, atom ) { - var atom1 = atom.args[0], list = atom.args[1]; - if( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) { - thread.throw_error( pl.error.type( "atom", atom1, atom.indicator ) ); - } else { - if( !pl.type.is_variable( atom1 ) ) { - if(!pl.type.is_variable(list)) { - var pointer = list; - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - if(!pl.type.is_character(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) { - thread.throw_error(pl.error.type("character", pointer.args[0], atom.indicator)); - return; - } - pointer = pointer.args[1]; - } - } - var list1 = new Term( "[]" ); - var unilen = stringLength(atom1.id); - for( var i = unilen-1; i >= 0; i-- ) { - list1 = new Term( ".", [new Term( atom1.id.charAt( i ) ), list1] ); - } - thread.prepend( [new State( point.goal.replace( new Term( "=", [list, list1] ) ), point.substitution, point )] ); - } else { - var pointer = list; - var v = pl.type.is_variable( atom1 ); - var str = ""; - while( pointer.indicator === "./2" ) { - if( !pl.type.is_character( pointer.args[0] ) ) { - if( pl.type.is_variable( pointer.args[0] ) && v ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( !pl.type.is_variable( pointer.args[0] ) ) { - thread.throw_error( pl.error.type( "character", pointer.args[0], atom.indicator ) ); - return; - } - } else { - str += pointer.args[0].id; - } - pointer = pointer.args[1]; - } - if( pl.type.is_variable( pointer ) && v ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [new Term( str ), atom1] ) ), point.substitution, point )] ); - } - } - } - }, - - // atom_codes/2 - "atom_codes/2": function( thread, point, atom ) { - var atom1 = atom.args[0], list = atom.args[1]; - if( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) { - thread.throw_error( pl.error.type( "atom", atom1, atom.indicator ) ); - } else { - if( !pl.type.is_variable( atom1 ) ) { - if(!pl.type.is_variable(list)) { - var pointer = list; - while(pl.type.is_term(pointer) && pointer.indicator === "./2") { - if(!pl.type.is_character_code(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) { - thread.throw_error(pl.error.type("integer", pointer.args[0], atom.indicator)); - return; - } - pointer = pointer.args[1]; - } - } - var list1 = new Term( "[]" ); - var unilen = stringLength(atom1.id); - for( var i = unilen-1; i >= 0; i-- ) { - list1 = new Term( ".", [new Num( codePointAt(atom1.id,i), false ), list1] ); - } - thread.prepend( [new State( point.goal.replace( new Term( "=", [list, list1] ) ), point.substitution, point )] ); - } else { - var pointer = list; - var v = pl.type.is_variable( atom1 ); - var str = ""; - while( pointer.indicator === "./2" ) { - if( !pl.type.is_character_code( pointer.args[0] ) ) { - if( pl.type.is_variable( pointer.args[0] ) && v ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( !pl.type.is_variable( pointer.args[0] ) ) { - thread.throw_error( pl.error.representation( "character_code", atom.indicator ) ); - return; - } - } else { - str += fromCodePoint( pointer.args[0].value ); - } - pointer = pointer.args[1]; - } - if( pl.type.is_variable( pointer ) && v ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [new Term( str ), atom1] ) ), point.substitution, point )] ); - } - } - } - }, - - // char_code/2 - "char_code/2": function( thread, point, atom ) { - var char = atom.args[0], code = atom.args[1]; - if( pl.type.is_variable( char ) && pl.type.is_variable( code ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( char ) && !pl.type.is_character( char ) ) { - thread.throw_error( pl.error.type( "character", char, atom.indicator ) ); - } else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) { - thread.throw_error( pl.error.type( "integer", code, atom.indicator ) ); - } else if( !pl.type.is_variable( code ) && !pl.type.is_character_code( code ) ) { - thread.throw_error( pl.error.representation( "character_code", atom.indicator ) ); - } else { - if( pl.type.is_variable( code ) ) { - var code1 = new Num( codePointAt(char.id,0 ), false ); - thread.prepend( [new State( point.goal.replace( new Term( "=", [code1, code] ) ), point.substitution, point )] ); - } else { - var char1 = new Term( fromCodePoint( code.value ) ); - thread.prepend( [new State( point.goal.replace( new Term( "=", [char1, char] ) ), point.substitution, point )] ); - } - } - }, - - // number_chars/2 - "number_chars/2": function( thread, point, atom ) { - var str, num = atom.args[0], list = atom.args[1]; - if( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) { - thread.throw_error( pl.error.type( "number", num, atom.indicator ) ); - } else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - } else { - var isvar = pl.type.is_variable( num ); - if( !pl.type.is_variable( list ) ) { - var pointer = list; - var total = true; - str = ""; - while( pointer.indicator === "./2" ) { - if( !pl.type.is_character( pointer.args[0] ) ) { - if( pl.type.is_variable( pointer.args[0] ) ) { - total = false; - } else if( !pl.type.is_variable( pointer.args[0] ) ) { - thread.throw_error( pl.error.type( "character", pointer.args[0], atom.indicator ) ); - return; - } - } else { - str += pointer.args[0].id; - } - pointer = pointer.args[1]; - } - total = total && pl.type.is_empty_list( pointer ); - if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - return; - } - if( !total && isvar ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( total ) { - if( pl.type.is_variable( pointer ) && isvar ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else { - var expr = thread.parse( str ); - var num2 = expr.value; - if( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) { - thread.throw_error( pl.error.syntax_by_predicate( "parseable_number", atom.indicator ) ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [num, num2] ) ), point.substitution, point )] ); - } - return; - } - } - } - if( !isvar ) { - str = num.toString(); - var list2 = new Term( "[]" ); - for( var i = str.length - 1; i >= 0; i-- ) { - list2 = new Term( ".", [ new Term( str.charAt( i ) ), list2 ] ); - } - thread.prepend( [new State( point.goal.replace( new Term( "=", [list, list2] ) ), point.substitution, point )] ); - } - } - }, - - // number_codes/2 - "number_codes/2": function( thread, point, atom ) { - var str, num = atom.args[0], list = atom.args[1]; - if( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) { - thread.throw_error( pl.error.type( "number", num, atom.indicator ) ); - } else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - } else { - var isvar = pl.type.is_variable( num ); - if( !pl.type.is_variable( list ) ) { - var pointer = list; - var total = true; - str = ""; - while( pointer.indicator === "./2" ) { - if( !pl.type.is_character_code( pointer.args[0] ) ) { - if( pl.type.is_variable( pointer.args[0] ) ) { - total = false; - } else if( !pl.type.is_variable( pointer.args[0] ) ) { - thread.throw_error( pl.error.representation( "character_code", atom.indicator ) ); - return; - } - } else { - str += fromCodePoint( pointer.args[0].value ); - } - pointer = pointer.args[1]; - } - total = total && pl.type.is_empty_list( pointer ); - if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - return; - } - if( !total && isvar ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( total ) { - if( pl.type.is_variable( pointer ) && isvar ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else { - var expr = thread.parse( str ); - var num2 = expr.value; - if( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) { - thread.throw_error( pl.error.syntax_by_predicate( "parseable_number", atom.indicator ) ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [num, num2] ) ), point.substitution, point )] ); - } - return; - } - } - } - if( !isvar ) { - str = num.toString(); - var list2 = new Term( "[]" ); - for( var i = str.length - 1; i >= 0; i-- ) { - list2 = new Term( ".", [ new Num( codePointAt(str,i), false ), list2 ] ); - } - thread.prepend( [new State( point.goal.replace( new Term( "=", [list, list2] ) ), point.substitution, point )] ); - } - } - }, - - // upcase_atom/2 - "upcase_atom/2": function( thread, point, atom ) { - var original = atom.args[0], upcase = atom.args[1]; - if( pl.type.is_variable( original ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atom( original ) ) { - thread.throw_error( pl.error.type( "atom", original, atom.indicator ) ); - } else if( !pl.type.is_variable( upcase ) && !pl.type.is_atom( upcase ) ) { - thread.throw_error( pl.error.type( "atom", upcase, atom.indicator ) ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [upcase, new Term( original.id.toUpperCase(), [] )] ) ), point.substitution, point )] ); - } - }, - - // downcase_atom/2 - "downcase_atom/2": function( thread, point, atom ) { - var original = atom.args[0], downcase = atom.args[1]; - if( pl.type.is_variable( original ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atom( original ) ) { - thread.throw_error( pl.error.type( "atom", original, atom.indicator ) ); - } else if( !pl.type.is_variable( downcase ) && !pl.type.is_atom( downcase ) ) { - thread.throw_error( pl.error.type( "atom", downcase, atom.indicator ) ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [downcase, new Term( original.id.toLowerCase(), [] )] ) ), point.substitution, point )] ); - } - }, - - // atomic_concat/3 - "atomic_concat/3": function( thread, point, atom ) { - var atomic1 = atom.args[0], atomic2 = atom.args[1], concat = atom.args[2]; - if( pl.type.is_variable( atomic1 ) || pl.type.is_variable( atomic2 ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atomic( atomic1 ) ) { - thread.throw_error( pl.error.type( "atomic", atomic1, atom.indicator ) ); - } else if( !pl.type.is_atomic( atomic2 ) ) { - thread.throw_error( pl.error.type( "atomic", atomic2, atom.indicator ) ); - } else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) { - thread.throw_error( pl.error.type( "atom", concat, atom.indicator ) ); - } else { - var id = ""; - if( pl.type.is_atom( atomic1 ) ) { - id += atomic1.id; - } else { - id += "" + atomic1.value; - } - if( pl.type.is_atom( atomic2 ) ) { - id += atomic2.id; - } else { - id += "" + atomic2.value; - } - var atom = new Term(id, []); - thread.prepend( [new State( point.goal.replace( new Term( "=", [atom, concat] ) ), point.substitution, point )] ); - } - }, - - // atomic_list_concat/2 - "atomic_list_concat/2": function( thread, point, atom ) { - var list = atom.args[0], concat = atom.args[1]; - thread.prepend( [new State( point.goal.replace( new Term( "atomic_list_concat", [list, new Term( "", [] ), concat] ) ), point.substitution, point )] ); - }, - - // atomic_list_concat/3 - "atomic_list_concat/3": function( thread, point, atom ) { - var list = atom.args[0], separator = atom.args[1], concat = atom.args[2]; - if( pl.type.is_variable( separator ) || pl.type.is_variable( list ) && pl.type.is_variable( concat ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - } else if( !pl.type.is_atom( separator ) && !pl.type.is_number( separator ) ) { - thread.throw_error( pl.error.type( "atomic", separator, atom.indicator ) ); - } else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) { - thread.throw_error( pl.error.type( "atom", concat, atom.indicator ) ); - } else { - var id = ""; - var pointer = list; - while( pl.type.is_term( pointer ) && pointer.indicator === "./2" ) { - if( pl.type.is_variable( pointer.args[0] ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( !pl.type.is_atom( pointer.args[0] ) && !pl.type.is_number( pointer.args[0] ) ) { - thread.throw_error( pl.error.type( "atomic", pointer.args[0], atom.indicator ) ); - return; - } - if( id !== "" ) - id += separator.id; - if( pl.type.is_atom( pointer.args[0] ) ) - id += pointer.args[0].id; - else - id += "" + pointer.args[0].value; - pointer = pointer.args[1]; - } - id = new Term( id, [] ); - if( pl.type.is_variable( pointer ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_term( pointer ) || pointer.indicator !== "[]/0" ) { - thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [id, concat] ) ), point.substitution, point )] ); - } - } - }, - - // TERM COMPARISON - - "@=/2": function( thread, point, atom ) { - if( pl.compare( atom.args[0], atom.args[1] ) > 0 ) { - thread.success( point ); - } - }, - - "@>=/2": function( thread, point, atom ) { - if( pl.compare( atom.args[0], atom.args[1] ) >= 0 ) { - thread.success( point ); - } - }, - - "compare/3": function( thread, point, atom ) { - var order = atom.args[0], left = atom.args[1], right = atom.args[2]; - if( !pl.type.is_variable( order ) && !pl.type.is_atom( order ) ) { - thread.throw_error( pl.error.type( "atom", order, atom.indicator ) ); - } else if( pl.type.is_atom( order ) && ["<", ">", "="].indexOf( order.id ) === -1 ) { - thread.throw_error( pl.error.domain( "order", order, atom.indicator ) ); - } else { - var compare = pl.compare( left, right ); - compare = compare === 0 ? "=" : (compare === -1 ? "<" : ">"); - thread.prepend( [new State( point.goal.replace( new Term( "=", [order, new Term( compare, [] )] ) ), point.substitution, point )] ); - } - }, - - // EVALUATION - - // is/2 - "is/2": function( thread, point, atom ) { - var op = atom.args[1].interpret( thread ); - if( !pl.type.is_number( op ) ) { - thread.throw_error( op ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [atom.args[0], op], atom.indicator ) ), point.substitution, point )] ); - } - }, - - // between/3 - "between/3": function( thread, point, atom ) { - var lower = atom.args[0], upper = atom.args[1], bet = atom.args[2]; - if( pl.type.is_variable( lower ) || pl.type.is_variable( upper ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_integer( lower ) ) { - thread.throw_error( pl.error.type( "integer", lower, atom.indicator ) ); - } else if( !pl.type.is_integer( upper ) ) { - thread.throw_error( pl.error.type( "integer", upper, atom.indicator ) ); - } else if( !pl.type.is_variable( bet ) && !pl.type.is_integer( bet ) ) { - thread.throw_error( pl.error.type( "integer", bet, atom.indicator ) ); - } else { - if( pl.type.is_variable( bet ) ) { - if( lower.value <= upper.value ) { - var states = [new State( point.goal.replace( new Term( "=", [bet, lower] ) ), point.substitution, point )]; - states.push( new State( point.goal.replace( new Term( "between", [new Num( lower.value+1, false ), upper, bet] ) ), point.substitution, point ) ); - thread.prepend( states ); - } - } else if( lower.value <= bet.value && upper.value >= bet.value ) { - thread.success( point ); - } - } - }, - - // succ/2 - "succ/2": function( thread, point, atom ) { - var n = atom.args[0], m = atom.args[1]; - if( pl.type.is_variable( n ) && pl.type.is_variable( m ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( n ) && !pl.type.is_integer( n ) ) { - thread.throw_error( pl.error.type( "integer", n, atom.indicator ) ); - } else if( !pl.type.is_variable( m ) && !pl.type.is_integer( m ) ) { - thread.throw_error( pl.error.type( "integer", m, atom.indicator ) ); - } else if( !pl.type.is_variable( n ) && n.value < 0 ) { - thread.throw_error( pl.error.domain( "not_less_than_zero", n, atom.indicator ) ); - } else if( !pl.type.is_variable( m ) && m.value < 0 ) { - thread.throw_error( pl.error.domain( "not_less_than_zero", m, atom.indicator ) ); - } else { - if( pl.type.is_variable( m ) || m.value > 0 ) { - if( pl.type.is_variable( n ) ) { - thread.prepend( [new State( point.goal.replace( new Term( "=", [n, new Num( m.value-1, false )] ) ), point.substitution, point )] ); - } else { - thread.prepend( [new State( point.goal.replace( new Term( "=", [m, new Num( n.value+1, false )] ) ), point.substitution, point )] ); - } - } - } - }, - - // =:=/2 - "=:=/2": function( thread, point, atom ) { - var cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] ); - if( pl.type.is_term( cmp ) ) { - thread.throw_error( cmp ); - } else if( cmp === 0 ) { - thread.success( point ); - } - }, - - // =\=/2 - "=\\=/2": function( thread, point, atom ) { - var cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] ); - if( pl.type.is_term( cmp ) ) { - thread.throw_error( cmp ); - } else if( cmp !== 0 ) { - thread.success( point ); - } - }, - - // /2 - ">/2": function( thread, point, atom ) { - var cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] ); - if( pl.type.is_term( cmp ) ) { - thread.throw_error( cmp ); - } else if( cmp > 0 ) { - thread.success( point ); - } - }, - - // >=/2 - ">=/2": function( thread, point, atom ) { - var cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] ); - if( pl.type.is_term( cmp ) ) { - thread.throw_error( cmp ); - } else if( cmp >= 0 ) { - thread.success( point ); - } - }, - - // TYPE TEST - - // var/1 - "var/1": function( thread, point, atom ) { - if( pl.type.is_variable( atom.args[0] ) ) { - thread.success( point ); - } - }, - - // atom/1 - "atom/1": function( thread, point, atom ) { - if( pl.type.is_atom( atom.args[0] ) ) { - thread.success( point ); - } - }, - - // atomic/1 - "atomic/1": function( thread, point, atom ) { - if( pl.type.is_atomic( atom.args[0] ) ) { - thread.success( point ); - } - }, - - // compound/1 - "compound/1": function( thread, point, atom ) { - if( pl.type.is_compound( atom.args[0] ) ) { - thread.success( point ); - } - }, - - // integer/1 - "integer/1": function( thread, point, atom ) { - if( pl.type.is_integer( atom.args[0] ) ) { - thread.success( point ); - } - }, - - // float/1 - "float/1": function( thread, point, atom ) { - if( pl.type.is_float( atom.args[0] ) ) { - thread.success( point ); - } - }, - - // number/1 - "number/1": function( thread, point, atom ) { - if( pl.type.is_number( atom.args[0] ) ) { - thread.success( point ); - } - }, - - // nonvar/1 - "nonvar/1": function( thread, point, atom ) { - if( !pl.type.is_variable( atom.args[0] ) ) { - thread.success( point ); - } - }, - - // ground/1 - "ground/1": function( thread, point, atom ) { - if( atom.variables().length === 0 ) { - thread.success( point ); - } - }, - - // acyclic_term/1 - "acyclic_term/1": function( thread, point, atom ) { - var test = point.substitution.apply( point.substitution ); - var variables = atom.args[0].variables(); - for( var i = 0; i < variables.length; i++ ) - if( point.substitution.links[variables[i]] !== undefined && !point.substitution.links[variables[i]].equals( test.links[variables[i]] ) ) - return; - thread.success( point ); - }, - - // callable/1 - "callable/1": function( thread, point, atom ) { - var callable = atom.args[0]; - if(pl.type.is_term(callable)) { - thread.success( point ); - } - }, - - // is_list/1 - "is_list/1": function( thread, point, atom ) { - var list = atom.args[0]; - while( pl.type.is_term( list ) && list.indicator === "./2" ) - list = list.args[1]; - if( pl.type.is_term( list ) && list.indicator === "[]/0" ) - thread.success( point ); - }, - - - - // STREAM SELECTION AND CONTROL - - // current_input/1 - "current_input/1": function( thread, point, atom ) { - var stream = atom.args[0]; - if(!pl.type.is_variable(stream) - && (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias) - && !thread.get_stream_by_alias(stream.id)) - && (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) { - thread.throw_error( pl.error.domain("stream", stream, atom.indicator) ); - } else { - if(pl.type.is_atom(stream)) - stream = thread.get_stream_by_alias(stream.id); - thread.prepend( [new State( - point.goal.replace(new Term("=", [stream, thread.get_current_input()])), - point.substitution, - point) - ] ); - } - }, - - // current_output/1 - "current_output/1": function( thread, point, atom ) { - var stream = atom.args[0]; - if(!pl.type.is_variable(stream) - && (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias) - && !thread.get_stream_by_alias(stream.id)) - && (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) { - thread.throw_error( pl.error.domain("stream", stream, atom.indicator) ); - } else { - if(pl.type.is_atom(stream)) - stream = thread.get_stream_by_alias( stream.id ); - thread.prepend( [new State( - point.goal.replace(new Term("=", [stream, thread.get_current_output()])), - point.substitution, - point) - ] ); - } - }, - - // set_input/1 - "set_input/1": function( thread, point, atom ) { - var input = atom.args[0]; - var stream = pl.type.is_stream( input ) ? input : thread.get_stream_by_alias( input.id ); - if( pl.type.is_variable( input ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_stream( input ) && !pl.type.is_atom( input ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", input, atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(input.alias) - && !thread.get_stream_by_alias(input.id) ) { - thread.throw_error( pl.error.existence( "stream", input, atom.indicator ) ); - } else if( stream.output === true ) { - thread.throw_error( pl.error.permission( "input", "stream", input, atom.indicator ) ); - } else { - thread.set_current_input( stream ); - thread.success( point ); - } - }, - - // set_output/1 - "set_output/1": function( thread, point, atom ) { - var output = atom.args[0]; - var stream = pl.type.is_stream( output ) ? output : thread.get_stream_by_alias( output.id ); - if( pl.type.is_variable( output ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_stream( output ) && !pl.type.is_atom( output ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", output, atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(output.alias) - && !thread.get_stream_by_alias(output.id) ) { - thread.throw_error( pl.error.existence( "stream", output, atom.indicator ) ); - } else if( stream.input === true ) { - thread.throw_error( pl.error.permission( "output", "stream", output, atom.indicator ) ); - } else { - thread.set_current_output( stream ); - thread.success( point ); - } - }, - - // open/3 - "open/3": function( thread, point, atom ) { - var dest = atom.args[0], mode = atom.args[1], stream = atom.args[2]; - thread.prepend( [new State( - point.goal.replace(new Term("open", [dest, mode, stream, new Term("[]", [])])), - point.substitution, - point - )] ); - }, - - // open/4 - "open/4": function( thread, point, atom ) { - var dest = atom.args[0], mode = atom.args[1], stream = atom.args[2], options = atom.args[3]; - if( pl.type.is_variable( dest ) || pl.type.is_variable( mode ) || pl.type.is_variable( options ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( mode ) && !pl.type.is_atom( mode ) ) { - thread.throw_error( pl.error.type( "atom", mode, atom.indicator ) ); - } else if( !pl.type.is_list( options ) ) { - thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); - } else if( !pl.type.is_variable( stream ) ) { - thread.throw_error( pl.error.uninstantiation( stream, atom.indicator ) ); - } else if( !pl.type.is_atom( dest ) && !pl.type.is_streamable( dest ) ) { - thread.throw_error( pl.error.domain( "source_sink", dest, atom.indicator ) ); - } else if( !pl.type.is_io_mode( mode ) ) { - thread.throw_error( pl.error.domain( "io_mode", mode, atom.indicator ) ); - } else { - var obj_options = {}; - var pointer = options; - var property; - while( pl.type.is_term(pointer) && pointer.indicator === "./2" ) { - property = pointer.args[0]; - if( pl.type.is_variable( property ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( !pl.type.is_stream_option( property ) ) { - thread.throw_error( pl.error.domain( "stream_option", property, atom.indicator ) ); - return; - } - obj_options[property.id] = property.args[0].id; - pointer = pointer.args[1]; - } - if( pointer.indicator !== "[]/0" ) { - if( pl.type.is_variable( pointer ) ) - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - else - thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); - return; - } else { - var alias = obj_options["alias"]; - if( alias && thread.get_stream_by_alias(alias) ) { - thread.throw_error( pl.error.permission( "open", "source_sink", new Term("alias", [new Term(alias, [])]), atom.indicator ) ); - return; - } - if( !obj_options["type"] ) - obj_options["type"] = "text"; - var file; - if( pl.type.is_atom( dest ) ) - file = thread.file_system_open( dest.id, obj_options["type"], mode.id ); - else - file = dest.stream( obj_options["type"], mode.id ); - if( file === false ) { - thread.throw_error( pl.error.permission( "open", "source_sink", dest, atom.indicator ) ); - return; - } else if( file === null ) { - thread.throw_error( pl.error.existence( "source_sink", dest, atom.indicator ) ); - return; - } - var newstream = new Stream( - file, mode.id, - obj_options["alias"], - obj_options["type"], - obj_options["reposition"] === "true", - obj_options["eof_action"] ); - if( alias ) - thread.session.streams[alias] = newstream; - else - thread.session.streams[newstream.id] = newstream; - thread.prepend( [new State( - point.goal.replace( new Term( "=", [stream, newstream] ) ), - point.substitution, - point - )] ); - } - } - }, - - // close/1 - "close/1": function( thread, point, atom ) { - var stream = atom.args[0]; - thread.prepend( [new State( - point.goal.replace(new Term("close", [stream, new Term("[]", [])])), - point.substitution, - point - )] ); - }, - - // close/2 - "close/2": function( thread, point, atom ) { - var stream = atom.args[0], options = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_list( options ) ) { - thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else { - // Get options - var obj_options = {}; - var pointer = options; - var property; - while( pl.type.is_term(pointer) && pointer.indicator === "./2" ) { - property = pointer.args[0]; - if( pl.type.is_variable( property ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( !pl.type.is_close_option( property ) ) { - thread.throw_error( pl.error.domain( "close_option", property, atom.indicator ) ); - return; - } - obj_options[property.id] = property.args[0].id === "true"; - pointer = pointer.args[1]; - } - if( pointer.indicator !== "[]/0" ) { - if( pl.type.is_variable( pointer ) ) - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - else - thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); - return; - } else { - if(stream2 === thread.session.standard_input || stream2 === thread.session.standard_output || stream2 === thread.session.standard_error) { - thread.success( point ); - return; - } else if( stream2 === thread.session.current_input ) { - thread.session.current_input = thread.session.standard_input; - } else if( stream2 === thread.session.current_output ) { - thread.session.current_output = thread.session.standard_output; - } - if( stream2.alias !== null && stream2.alias !== undefined ) - delete thread.session.streams[stream2.alias]; - else - delete thread.session.streams[stream2.id]; - if( stream2.output ) - stream2.stream.flush(); - var closed = stream2.stream.close(); - stream2.stream = null; - if( obj_options.force === true || closed === true ) { - thread.success( point ); - } - } - } - }, - - // flush_output/0 - "flush_output/0": [ - new Rule(new Term("flush_output", []), new Term(",", [new Term("current_output", [new Var("S")]),new Term("flush_output", [new Var("S")])])) - ], - - // flush_output/1 - "flush_output/1": function( thread, point, atom ) { - var stream = atom.args[0]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.input === true ) { - thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); - } else { - stream2.stream.flush(); - thread.success( point ); - } - }, - - // stream_property/2 - "stream_property/2": function( thread, point, atom ) { - var stream = atom.args[0], property = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) ) { - thread.throw_error( pl.error.domain( "stream", stream, atom.indicator ) ); - } else if( !pl.type.is_variable( stream ) && (!pl.type.is_stream( stream2 ) || stream2.stream === null) ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( !pl.type.is_variable( property ) && !pl.type.is_stream_property( property ) ) { - thread.throw_error( pl.error.domain( "stream_property", property, atom.indicator ) ); - } else { - var streams = []; - var states = []; - var propvar = pl.type.is_variable(property); - if( !pl.type.is_variable( stream ) ) - streams.push( stream2 ); - else - for( var key in thread.session.streams ) - streams.push( thread.session.streams[key] ); - for( var i = 0; i < streams.length; i++ ) { - var properties = []; - // file_name/1 - if( (propvar || property.indicator === "file_name/1") && streams[i].filename ) - properties.push( new Term( "file_name", [new Term(streams[i].file_name, [])] ) ); - // mode/1 - if(propvar || property.indicator === "mode/1") - properties.push( new Term( "mode", [new Term(streams[i].mode, [])] ) ); - // input/0 or output/0 - if(propvar || property.indicator === "input/0" || property.indicator === "output/0") - properties.push( new Term( streams[i].input ? "input" : "output", [] ) ); - // alias/1 - if( (propvar || property.indicator === "alias/1") && streams[i].alias ) - properties.push( new Term( "alias", [new Term(streams[i].alias, [])] ) ); - // position/1 - if(propvar || property.indicator === "position/1") - properties.push( new Term( "position", [ - new Term("position", [ - new Num(streams[i].char_count, false), - new Num(streams[i].line_count, false), - new Num(streams[i].line_position, false) - ]) - ] ) ); - // end_of_stream/1 - if(propvar || property.indicator === "end_of_stream/1") - properties.push( new Term( "end_of_stream", [new Term( - streams[i].position === "end_of_stream" || streams[i].stream.eof && streams[i].stream.eof(streams[i].position) ? "at" : - streams[i].position === "past_end_of_stream" ? "past" : - "not", [])] ) ); - // eof_action/1 - if(propvar || property.indicator === "eof_action/1") - properties.push( new Term( "eof_action", [new Term(streams[i].eof_action, [])] ) ); - // reposition/1 - if(propvar || property.indicator === "reposition/1") - properties.push( new Term( "reposition", [new Term(streams[i].reposition ? "true" : "false", [])] ) ); - // type/1 - if(propvar || property.indicator === "type/1") - properties.push( new Term( "type", [new Term(streams[i].type, [])] ) ); - for( var j = 0; j < properties.length; j++ ) { - states.push( new State( - point.goal.replace( new Term( ",", [ - new Term("=", [pl.type.is_variable( stream ) ? stream : stream2, streams[i]]), - new Term("=", [property, properties[j]])]) ), - point.substitution, - point - ) ); - } - } - thread.prepend( states ); - } - }, - - // stream_position_data - "stream_position_data/3": function(thread, point, atom) { - var field = atom.args[0], position = atom.args[1], value = atom.args[2]; - if(pl.type.is_variable(position)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_term(position) || position.indicator !== "position/3") { - thread.throw_error(pl.error.domain("stream_position", position, atom.indicator)); - } else if(!pl.type.is_variable(field) && !pl.type.is_atom(field)) { - thread.throw_error(pl.error.type("atom", field, atom.indicator)); - } else if(!pl.type.is_variable(value) && !pl.type.is_integer(value)) { - thread.throw_error(pl.error.type("integer", value, atom.indicator)); - } else { - var fields = ["char_count", "line_count", "line_position"]; - var states = []; - var data_pos = {char_count: 0, line_count: 1, line_position: 2}; - if(pl.type.is_variable(field)) { - for(var i = 0; i < fields.length; i++) { - states.push(new State(point.goal.replace( - new Term(",", [ - new Term("=", [new Term(fields[i]), field]), - new Term("=", [value, position.args[data_pos[fields[i]]]]) - ]) - ), point.substitution, point)); - } - } else if(data_pos.hasOwnProperty(field.id)) { - states.push(new State(point.goal.replace( - new Term("=", [value, position.args[data_pos[field.id]]]) - ), point.substitution, point)); - } - thread.prepend(states); - } - }, - - // at_end_of_stream/0 - "at_end_of_stream/0": [ - new Rule(new Term("at_end_of_stream", []), new pl.type.Term(",", [new Term("current_input", [new Var("S")]),new Term(",", [new Term("stream_property", [new Var("S"),new Term("end_of_stream", [new Var("E")])]),new Term(",", [new Term("!", []),new Term(";", [new Term("=", [new Var("E"),new Term("at", [])]),new Term("=", [new Var("E"),new Term("past", [])])])])])])) - ], - - // at_end_of_stream/1 - "at_end_of_stream/1": function( thread, point, atom ) { - var stream = atom.args[0]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else { - var e = thread.next_free_variable(); - thread.prepend( [new State( - point.goal.replace( - new Term(",", [new Term("stream_property", [stream2,new Term("end_of_stream", [e])]), - new Term(",", [new Term("!", []),new Term(";", [new Term("=", [e,new Term("at", [])]), - new Term("=", [e,new Term("past", [])])])])]) - ), - point.substitution, - point - )] ); - } - }, - - // set_stream_position/2 - "set_stream_position/2": function( thread, point, atom ) { - var stream = atom.args[0], position = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) || pl.type.is_variable( position ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( !pl.type.is_stream_position( position ) ) { - thread.throw_error( pl.error.domain( "stream_position", position, atom.indicator ) ); - } else if( stream2.reposition === false ) { - thread.throw_error( pl.error.permission( "reposition", "stream", stream, atom.indicator ) ); - } else { - if( position.indicator === "position/3" ) { - stream2.position = position.args[0].value; - stream2.char_count = position.args[0].value; - stream2.line_count = position.args[1].value; - stream2.line_position = position.args[2].value; - } else { - stream2.position = position.id; - } - thread.success( point ); - } - }, - - - - // CHARACTER INPUT OUTPUT - - // get_char/1 - "get_char/1": [ - new Rule(new Term("get_char", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("get_char", [new Var("S"),new Var("C")])])) - ], - - // get_char/2 - "get_char/2": function( thread, point, atom ) { - var stream = atom.args[0], char = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) { - thread.throw_error( pl.error.type( "in_character", char, atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.output ) { - thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "binary" ) { - thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); - } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { - thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); - } else { - var stream_char; - if( stream2.position === "end_of_stream" ) { - stream_char = "end_of_file"; - stream2.position = "past_end_of_stream"; - } else if( stream2.position === "past_end_of_stream" ) { - stream_char = "end_of_file"; - stream2.position = "past_end_of_stream"; - } else { - stream_char = stream2.stream.get( 1, stream2.position ); - if( stream_char === null ) { - thread.throw_error( pl.error.representation( "character", atom.indicator ) ); - return; - } else if(stream_char === "end_of_stream") { - stream_char = "end_of_file"; - stream2.position = "past_end_of_stream"; - } else { - stream2.position++; - stream2.char_count++; - stream2.line_position++; - if(stream_char === "\n") { - stream2.line_count++; - stream2.line_position = 0; - } - } - } - thread.prepend( [new State( - point.goal.replace( new Term( "=", [new Term(stream_char,[]), char] ) ), - point.substitution, - point - )] ); - } - }, - - // get_code/1 - "get_code/1": [ - new Rule(new Term("get_code", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("get_code", [new Var("S"),new Var("C")])])) - ], - - // get_code/2 - "get_code/2": function( thread, point, atom ) { - var stream = atom.args[0], code = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) { - thread.throw_error( pl.error.type( "integer", code, atom.indicator ) ); - } else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) { - thread.throw_error( pl.error.representation( "in_character_code", atom.indicator ) ); - } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.output ) { - thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "binary" ) { - thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); - } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { - thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); - } else { - var stream_code; - if( stream2.position === "end_of_stream" ) { - stream_code = -1; - stream2.position = "past_end_of_stream"; - } else if( stream2.position === "past_end_of_stream" ) { - stream_code = -1; - stream2.position = "past_end_of_stream"; - } else { - stream_code = stream2.stream.get( 1, stream2.position ); - if( stream_code === null ) { - thread.throw_error( pl.error.representation( "character", atom.indicator ) ); - return; - } else if(stream_code === "end_of_stream") { - stream_code = -1; - stream2.position = "past_end_of_stream"; - } else { - stream_code = codePointAt( stream_code, 0 ); - stream2.position++; - stream2.char_count++; - stream2.line_position++; - if(stream_code === 10) { - stream2.line_count++; - stream2.line_position = 0; - } - } - } - thread.prepend( [new State( - point.goal.replace( new Term( "=", [new Num(stream_code, false), code] ) ), - point.substitution, - point - )] ); - } - }, - - // peek_char/1 - "peek_char/1": [ - new Rule(new Term("peek_char", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("peek_char", [new Var("S"),new Var("C")])])) - ], - - // peek_char/2 - "peek_char/2": function( thread, point, atom ) { - var stream = atom.args[0], char = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) { - thread.throw_error( pl.error.type( "in_character", char, atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.output ) { - thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "binary" ) { - thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); - } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { - thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); - } else { - var stream_char; - if( stream2.position === "end_of_stream" ) { - stream_char = "end_of_file"; - stream2.position = "past_end_of_stream"; - } else if( stream2.position === "past_end_of_stream" ) { - stream_char = "end_of_file"; - stream2.position = "past_end_of_stream"; - } else { - stream_char = stream2.stream.get( 1, stream2.position ); - if( stream_char === null ) { - thread.throw_error( pl.error.representation( "character", atom.indicator ) ); - return; - } else if(stream_char === "end_of_stream") { - stream_char = "end_of_file"; - } - } - thread.prepend( [new State( - point.goal.replace( new Term( "=", [new Term(stream_char,[]), char] ) ), - point.substitution, - point - )] ); - } - }, - - // peek_code/1 - "peek_code/1": [ - new Rule(new Term("peek_code", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("peek_code", [new Var("S"),new Var("C")])])) - ], - - // peek_code/2 - "peek_code/2": function( thread, point, atom ) { - var stream = atom.args[0], code = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) { - thread.throw_error( pl.error.type( "integer", code, atom.indicator ) ); - } else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) { - thread.throw_error( pl.error.representation( "in_character_code", atom.indicator ) ); - } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.output ) { - thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "binary" ) { - thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); - } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { - thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); - } else { - var stream_code; - if( stream2.position === "end_of_stream" ) { - stream_code = -1; - stream2.position = "past_end_of_stream"; - } else { - stream_code = stream2.stream.get( 1, stream2.position ); - if( stream_code === null ) { - thread.throw_error( pl.error.representation( "character", atom.indicator ) ); - return; - } else if(stream_code === "end_of_stream") { - stream_code = -1; - } else { - stream_code = codePointAt( stream_code, 0 ); - } - } - thread.prepend( [new State( - point.goal.replace( new Term( "=", [new Num(stream_code, false), code] ) ), - point.substitution, - point - )] ); - } - }, - - // put_char/1 - "put_char/1": [ - new Rule(new Term("put_char", [new Var("C")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("put_char", [new Var("S"),new Var("C")])])) - ], - - // put_char/2 - "put_char/2": function( thread, point, atom ) { - var stream = atom.args[0], char = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) || pl.type.is_variable( char ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_character( char ) ) { - thread.throw_error( pl.error.type( "character", char, atom.indicator ) ); - } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.input ) { - thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "binary" ) { - thread.throw_error( pl.error.permission( "output", "binary_stream", stream, atom.indicator ) ); - } else { - if( stream2.stream.put( char.id, stream2.position ) ) { - if(typeof stream2.position === "number") - stream2.position++; - stream2.char_count++; - stream2.line_position++; - if(char.id === "\n") { - stream2.line_count++; - stream2.line_position = 0; - } - thread.success( point ); - } - } - }, - - // put_code/1 - "put_code/1": [ - new Rule(new Term("put_code", [new Var("C")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("put_code", [new Var("S"),new Var("C")])])) - ], - - // put_code/2 - "put_code/2": function( thread, point, atom ) { - var stream = atom.args[0], code = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) || pl.type.is_variable( code ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_integer( code ) ) { - thread.throw_error( pl.error.type( "integer", code, atom.indicator ) ); - } else if( !pl.type.is_character_code( code ) ) { - thread.throw_error( pl.error.representation( "character_code", atom.indicator ) ); - } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.input ) { - thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "binary" ) { - thread.throw_error( pl.error.permission( "output", "binary_stream", stream, atom.indicator ) ); - } else { - if( stream2.stream.put( fromCodePoint( code.value ), stream2.position ) ) { - if(typeof stream2.position === "number") - stream2.position++; - stream2.char_count++; - stream2.line_position++; - if(code.value === 10) { - stream2.line_count++; - stream2.line_position = 0; - } - thread.success( point ); - } - } - }, - - // nl/0 - "nl/0": [ - new Rule(new Term("nl"), new Term(",", [new Term("current_output", [new Var("S")]),new Term("put_char", [new Var("S"),new Term("\n")])])) - ], - - // nl/1 - "nl/1": function( thread, point, atom ) { - var stream = atom.args[0]; - thread.prepend( [new State( - point.goal.replace( new Term("put_char", [stream, new Term("\n", [])]) ), - point.substitution, - point - )] ); - }, - - - - // BYTE INPUT/OUTPUT - - // get_byte/1 - "get_byte/1": [ - new Rule(new Term("get_byte", [new Var("B")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("get_byte", [new Var("S"),new Var("B")])])) - ], - - // get_byte/2 - "get_byte/2": function( thread, point, atom ) { - var stream = atom.args[0], byte = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) { - thread.throw_error( pl.error.type( "in_byte", byte, atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.output ) { - thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "text" ) { - thread.throw_error( pl.error.permission( "input", "text_stream", stream, atom.indicator ) ); - } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { - thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); - } else { - var stream_byte; - if( stream2.position === "end_of_stream" ) { - stream_byte = -1; - stream2.position = "past_end_of_stream"; - } else { - stream_byte = stream2.stream.get_byte( stream2.position ); - if( stream_byte === null ) { - thread.throw_error( pl.error.representation( "byte", atom.indicator ) ); - return; - } else if(stream_byte === "end_of_stream") { - stream_byte = -1; - stream2.position = "past_end_of_stream"; - } else { - stream2.position++; - stream2.char_count++; - stream2.line_position++; - } - } - thread.prepend( [new State( - point.goal.replace( new Term( "=", [new Num(stream_byte,false), byte] ) ), - point.substitution, - point - )] ); - } - }, - - // peek_byte/1 - "peek_byte/1": [ - new Rule(new Term("peek_byte", [new Var("B")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("peek_byte", [new Var("S"),new Var("B")])])) - ], - - // peek_byte/2 - "peek_byte/2": function( thread, point, atom ) { - var stream = atom.args[0], byte = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) { - thread.throw_error( pl.error.type( "in_byte", byte, atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.output ) { - thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "text" ) { - thread.throw_error( pl.error.permission( "input", "text_stream", stream, atom.indicator ) ); - } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { - thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); - } else { - var stream_byte; - if( stream2.position === "end_of_stream" ) { - stream_byte = -1; - stream2.position = "past_end_of_stream"; - } else { - stream_byte = stream2.stream.get_byte( stream2.position ); - if( stream_byte === null ) { - thread.throw_error( pl.error.representation( "byte", atom.indicator ) ); - return; - } else if(stream_byte === "end_of_stream") { - stream_byte = -1; - } - } - thread.prepend( [new State( - point.goal.replace( new Term( "=", [new Num(stream_byte,false), byte] ) ), - point.substitution, - point - )] ); - } - }, - - // put_byte/1 - "put_byte/1": [ - new Rule(new Term("put_byte", [new Var("B")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("put_byte", [new Var("S"),new Var("B")])])) - ], - - // put_byte/2 - "put_byte/2": function( thread, point, atom ) { - var stream = atom.args[0], byte = atom.args[1]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) || pl.type.is_variable( byte ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_byte( byte ) ) { - thread.throw_error( pl.error.type( "byte", byte, atom.indicator ) ); - } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.input ) { - thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "text" ) { - thread.throw_error( pl.error.permission( "output", "text_stream", stream, atom.indicator ) ); - } else { - if( stream2.stream.put_byte( byte.value, stream2.position ) ) { - if(typeof stream2.position === "number") - stream2.position++; - stream2.char_count++; - stream2.line_position++; - thread.success( point ); - } - } - }, - - - - // TERM INPUT/OUTPUT - - // read/1 - "read/1": [ - new Rule(new Term("read", [new Var("T")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("read_term", [new Var("S"),new Var("T"),new Term("[]")])])) - ], - - // read/2 - "read/2": [ - new Rule(new Term("read", [new Var("S"), new Var("T")]), new Term("read_term", [new Var("S"),new Var("T"),new Term("[]")])) - ], - - // read_term/2 - "read_term/2": [ - new Rule(new Term("read_term", [new Var("T"),new Var("O")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("read_term", [new Var("S"),new Var("T"),new Var("O")])])) - ], - - // read_term/3 - "read_term/3": function( thread, point, atom ) { - var stream = atom.args[0], term = atom.args[1], options = atom.args[2]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_list( options ) ) { - thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.output ) { - thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "binary" ) { - thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); - } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { - thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); - } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "eof_code" ) { - expr = { - value: new Term("end_of_file", []), - type: SUCCESS, - len: -1 - }; - } else { - // Get options - var obj_options = {}; - var pointer = options; - var property; - while( pl.type.is_term(pointer) && pointer.indicator === "./2" ) { - property = pointer.args[0]; - if( pl.type.is_variable( property ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( !pl.type.is_read_option( property ) ) { - thread.throw_error( pl.error.domain( "read_option", property, atom.indicator ) ); - return; - } - obj_options[property.id] = property.args[0]; - pointer = pointer.args[1]; - } - if( pointer.indicator !== "[]/0" ) { - if( pl.type.is_variable( pointer ) ) - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - else - thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); - return; - } else { - var char, tokenizer, expr; - var text = ""; - var tokens = []; - var last_token = null; - var lexical_error = false; - // Get term - while( last_token === null || lexical_error || last_token.name !== "atom" || last_token.value !== "." || tokens.length > 0 && expr.type === ERROR ) { - char = stream2.stream.get( 1, stream2.position ); - while(char !== null && char !== "." && char !== "end_of_stream" && char !== "past_end_of_stream") { - stream2.position++; - text += char; - char = stream2.stream.get( 1, stream2.position ); - } - if( char === null ) { - thread.throw_error( pl.error.representation( "character", atom.indicator ) ); - return; - } else if( char === "end_of_stream" || char === "past_end_of_stream" ) { - if(tokens === null || tokens.length === 0) { - stream2.position = "past_end_of_stream"; - expr = { - value: new Term("end_of_file", []), - type: SUCCESS, - len: -1 - }; - break; - } else if(expr) { - thread.throw_error( pl.error.syntax( last_token, "unexpected end of file", false ) ); - return; - } else { - thread.throw_error( pl.error.syntax( last_token, "token not found", true ) ); - return; - } - } else if(char === ".") { - stream2.position++; - text += char; - } - tokenizer = new Tokenizer( thread ); - tokenizer.new_text( text ); - tokens = tokenizer.get_tokens(); - num_token = tokens !== null && tokens.length > 1 ? tokens[tokens.length-2] : null; - last_token = tokens !== null && tokens.length > 0 ? tokens[tokens.length-1] : null; - if(tokens === null) - continue; - lexical_error = false; - for(var i = 0; i < tokens.length && !lexical_error; i++) - lexical_error = tokens[i].name === "lexical"; - if(lexical_error) - continue; - expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false); - if(num_token && num_token.name === "number" && !num_token.float && !num_token.blank && last_token.value === ".") { - var next_char = stream2.stream.get(1, stream2.position); - if(next_char >= '0' && next_char <= '9') { - stream2.position++; - text += next_char; - last_token = null; - continue; - } - } - } - if(last_token) { - if(last_token.line_position === last_token.len) - stream2.line_position += last_token.line_position; - else - stream2.line_position = last_token.line_position; - stream2.line_count += last_token.line_count; - stream2.char_count += last_token.len; - } - // Succeed analyzing term - if( expr.type === SUCCESS && (expr.len === -1 || expr.len === tokens.length-1 && last_token.value === "." )) { - thread.session.renamed_variables = {}; - expr = expr.value.rename( thread ); - var eq = new Term( "=", [term, expr] ); - // Variables - if( obj_options.variables ) { - var vars = arrayToList( map( nub( expr.variables() ), function(v) { return new Var(v); } ) ); - eq = new Term( ",", [eq, new Term( "=", [obj_options.variables, vars] )] ) - } - // Variable names - if( obj_options.variable_names ) { - var vars = nub(expr.variables()); - var plvars = []; - for(var i = 0; i < vars.length; i++) { - var v = vars[i]; - for( var prop in thread.session.renamed_variables ) { - if( thread.session.renamed_variables.hasOwnProperty( prop ) ) { - if( thread.session.renamed_variables[ prop ] === v ) { - plvars.push(new Term( "=", [new Term( prop, []), new Var(v)] )); - break; - } - } - } - } - plvars = arrayToList(plvars); - eq = new Term( ",", [eq, new Term( "=", [obj_options.variable_names, plvars] )] ); - } - // Singletons - if( obj_options.singletons ) { - var vars = nub(new Rule(expr, null).singleton_variables(true)); - var plvars = []; - for(var i = 0; i < vars.length; i++) { - var v = vars[i]; - for( var prop in thread.session.renamed_variables ) { - if( thread.session.renamed_variables.hasOwnProperty( prop ) ) { - if( thread.session.renamed_variables[ prop ] === v ) { - plvars.push(new Term( "=", [new Term( prop, []), new Var(v)] )); - break; - } - } - } - } - plvars = arrayToList(plvars); - eq = new Term( ",", [eq, new Term( "=", [obj_options.singletons, plvars] )] ); - } - thread.prepend( [new State( point.goal.replace( eq ), point.substitution, point )] ); - // Failed analyzing term - } else { - if( expr.type === SUCCESS ) - thread.throw_error( pl.error.syntax( tokens[expr.len], "unexpected token", false ) ); - else - thread.throw_error( expr.value ); - } - } - } - }, - - // write/1 - "write/1": [ - new Rule(new Term("write", [new Var("T")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("write", [new Var("S"),new Var("T")])])) - ], - - // write/2 - "write/2": function( thread, point, atom ) { - var stream = atom.args[0], term = atom.args[1]; - thread.prepend( [new State( - point.goal.replace( new Term("write_term", [stream, term, - new Term(".", [new Term("quoted", [new Term("false", [])]), - new Term(".", [new Term("ignore_ops", [new Term("false")]), - new Term(".", [new Term("numbervars", [new Term("true")]), new Term("[]",[])])])])]) ), - point.substitution, - point - )] ); - }, - - // writeq/1 - "writeq/1": [ - new Rule(new Term("writeq", [new Var("T")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("writeq", [new Var("S"),new Var("T")])])) - ], - - // writeq/2 - "writeq/2": function( thread, point, atom ) { - var stream = atom.args[0], term = atom.args[1]; - thread.prepend( [new State( - point.goal.replace( new Term("write_term", [stream, term, - new Term(".", [new Term("quoted", [new Term("true", [])]), - new Term(".", [new Term("ignore_ops", [new Term("false")]), - new Term(".", [new Term("numbervars", [new Term("true")]), new Term("[]",[])])])])]) ), - point.substitution, - point - )] ); - }, - - // write_canonical/1 - "write_canonical/1": [ - new Rule(new Term("write_canonical", [new Var("T")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("write_canonical", [new Var("S"),new Var("T")])])) - ], - - // write_canonical/2 - "write_canonical/2": function( thread, point, atom ) { - var stream = atom.args[0], term = atom.args[1]; - thread.prepend( [new State( - point.goal.replace( new Term("write_term", [stream, term, - new Term(".", [new Term("quoted", [new Term("true", [])]), - new Term(".", [new Term("ignore_ops", [new Term("true")]), - new Term(".", [new Term("numbervars", [new Term("false")]), new Term("[]",[])])])])]) ), - point.substitution, - point - )] ); - }, - - // write_term/2 - "write_term/2": [ - new Rule(new Term("write_term", [new Var("T"),new Var("O")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("write_term", [new Var("S"),new Var("T"),new Var("O")])])) - ], - - // write_term/3 - "write_term/3": function( thread, point, atom ) { - var stream = atom.args[0], term = atom.args[1], options = atom.args[2]; - var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); - if( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_list( options ) ) { - thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); - } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { - thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); - } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { - thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); - } else if( stream2.input ) { - thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); - } else if( stream2.type === "binary" ) { - thread.throw_error( pl.error.permission( "output", "binary_stream", stream, atom.indicator ) ); - } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { - thread.throw_error( pl.error.permission( "output", "past_end_of_stream", stream, atom.indicator ) ); - } else { - // Get options - var obj_options = {}; - var pointer = options; - var property; - while( pl.type.is_term(pointer) && pointer.indicator === "./2" ) { - property = pointer.args[0]; - if( pl.type.is_variable( property ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - return; - } else if( !pl.type.is_write_option( property ) ) { - thread.throw_error( pl.error.domain( "write_option", property, atom.indicator ) ); - return; - } - if(property.indicator === "variable_names/1") - obj_options[property.id] = property.args[0]; - else - obj_options[property.id] = property.args[0].id === "true"; - pointer = pointer.args[1]; - } - if( pointer.indicator !== "[]/0" ) { - if( pl.type.is_variable( pointer ) ) - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - else - thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); - return; - } else { - obj_options.session = thread.session; - var text = term.toString( obj_options ); - stream2.stream.put( text, stream2.position ); - if( typeof stream2.position === "number" ) - stream2.position += text.length; - var nl = (text.match(/\n/g) || []).length; - stream2.line_count += nl; - if(nl > 0) - stream2.line_position = text.length - text.lastIndexOf("\n") - 1; - else - stream2.line_position += text.length; - stream2.char_count += text.length; - thread.success( point ); - } - } - }, - - // IMPLEMENTATION DEFINED HOOKS - - // halt/0 - "halt/0": function( thread, point, _ ) { - if( thread.get_flag("nodejs").indicator === "true/0" ) - process.exit(); - thread.points = []; - }, - - // halt/1 - "halt/1": function( thread, point, atom ) { - var int = atom.args[0]; - if( pl.type.is_variable( int ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_integer( int ) ) { - thread.throw_error( pl.error.type( "integer", int, atom.indicator ) ); - } else { - if( thread.get_flag("nodejs").indicator === "true/0" ) - process.exit(int.value); - thread.points = []; - } - }, - - // current_prolog_flag/2 - "current_prolog_flag/2": function( thread, point, atom ) { - var flag = atom.args[0], value = atom.args[1]; - if( !pl.type.is_variable( flag ) && !pl.type.is_atom( flag ) ) { - thread.throw_error( pl.error.type( "atom", flag, atom.indicator ) ); - } else if( !pl.type.is_variable( flag ) && !pl.type.is_flag( flag ) ) { - thread.throw_error( pl.error.domain( "prolog_flag", flag, atom.indicator ) ); - } else { - var states = []; - for( var name in pl.flag ) { - if(!pl.flag.hasOwnProperty(name)) continue; - var goal = new Term( ",", [new Term( "=", [new Term( name ), flag] ), new Term( "=", [thread.get_flag(name), value] )] ); - states.push( new State( point.goal.replace( goal ), point.substitution, point ) ); - } - thread.prepend( states ); - } - }, - - // set_prolog_flag/2 - "set_prolog_flag/2": function( thread, point, atom ) { - var flag = atom.args[0], value = atom.args[1]; - if( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_atom( flag ) ) { - thread.throw_error( pl.error.type( "atom", flag, atom.indicator ) ); - } else if( !pl.type.is_flag( flag ) ) { - thread.throw_error( pl.error.domain( "prolog_flag", flag, atom.indicator ) ); - } else if( !pl.type.is_modifiable_flag( flag ) ) { - thread.throw_error( pl.error.permission( "modify", "flag", flag, atom.indicator ) ); - } else if( !pl.type.is_value_flag( flag, value ) ) { - thread.throw_error( pl.error.domain( "flag_value", new Term( "+", [flag, value] ), atom.indicator ) ); - } else { - thread.session.flag[flag.id] = value; - thread.success( point ); - } - }, - - - - // LOAD PROLOG SOURCE FILES - - // consult/1 - "consult/1": function(thread, point, atom) { - var src = atom.args[0]; - var context_module = "user"; - if(src.indicator === ":/2") { - context_module = src.args[0].id; - src = src.args[1]; - } - if(pl.type.is_variable(src)) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if(!pl.type.is_atom(src)) { - thread.throw_error( pl.error.type( "atom", src, atom.indicator ) ); - } else { - if(thread.consult(src.id, { - context_module: context_module, - text: false, - html: false, - success: function() { - thread.success(point); - thread.again(); - }, - error: function(err) { - thread.throw_error(err); - thread.again(); - } - })); - return true; - } - }, - - - - // TIME AND DATES - - // get_time/1 - "get_time/1": function( thread, point, atom ) { - var time = atom.args[0]; - if(!pl.type.is_variable(time) && !pl.type.is_number(time)) { - thread.throw_error( pl.error.type( "number", time, atom.indicator ) ); - } else { - var current = new Num(Date.now(), true); - thread.prepend( [new State( - point.goal.replace( new Term( "=", [time, current] ) ), - point.substitution, - point - )] ); - } - }, - - // time_property - "time_property/2": function(thread, point, atom) { - var time = atom.args[0], property = atom.args[1]; - if(pl.type.is_variable(time)) { - thread.throw_error(pl.error.instantiation(atom.indicator)); - } else if(!pl.type.is_variable(time) && !pl.type.is_number(time)) { - thread.throw_error(pl.error.type("number", time, atom.indicator)); - } else if(!pl.type.is_variable(property) && !pl.type.is_time_property(property)) { - thread.throw_error(pl.error.domain("time_property", property, atom.indicator)); - } else { - var props; - if(pl.type.is_variable(property)) { - props = ["year", "month", "day", "hours", "minutes", "seconds", "milliseconds", "weekday"]; - } else { - props = [property.id]; - } - var date = new Date(time.value); - var value; - var states = []; - for(var i = 0; i < props.length; i++) { - switch(props[i]) { - case "year": - value = new Term("year", [new Num(date.getFullYear(), false)]); - break; - case "month": - value = new Term("month", [new Num(date.getMonth(), false)]); - break; - case "day": - value = new Term("day", [new Num(date.getDate(), false)]); - break; - case "hours": - value = new Term("hours", [new Num(date.getHours(), false)]); - break; - case "minutes": - value = new Term("minutes", [new Num(date.getMinutes(), false)]); - break; - case "seconds": - value = new Term("seconds", [new Num(date.getSeconds(), false)]); - break; - case "milliseconds": - value = new Term("milliseconds", [new Num(date.getMilliseconds(), false)]); - break; - case "weekday": - value = new Term("weekday", [new Num(date.getDay(), false)]); - break; - } - states.push(new State( - point.goal.replace( new Term( "=", [property, value] ) ), - point.substitution, - point - )); - } - thread.prepend(states); - } - }, - - // time_year/2 - "time_year/2": function( thread, point, atom ) { - var time = atom.args[0], year = atom.args[1]; - if(pl.type.is_variable(time)) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if(!pl.type.is_number(time)) { - thread.throw_error( pl.error.type( "number", time, atom.indicator ) ); - } else if(!pl.type.is_variable(year) && !pl.type.is_integer(year)) { - thread.throw_error( pl.error.type( "integer", year, atom.indicator ) ); - } else { - var value = new Num(new Date(time.value).getFullYear(), false); - thread.prepend( [new State( - point.goal.replace( new Term( "=", [year, value] ) ), - point.substitution, - point - )] ); - } - }, - - // time_month/2 - "time_month/2": function( thread, point, atom ) { - var time = atom.args[0], month = atom.args[1]; - if(pl.type.is_variable(time)) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if(!pl.type.is_number(time)) { - thread.throw_error( pl.error.type( "number", time, atom.indicator ) ); - } else if(!pl.type.is_variable(month) && !pl.type.is_integer(month)) { - thread.throw_error( pl.error.type( "integer", month, atom.indicator ) ); - } else { - var value = new Num(new Date(time.value).getMonth(), false); - thread.prepend( [new State( - point.goal.replace( new Term( "=", [month, value] ) ), - point.substitution, - point - )] ); - } - }, - - - - // GRAMMARS - - // phrase/3 - "phrase/3": function( thread, point, atom ) { - var grbody = atom.args[0], s0 = atom.args[1], s = atom.args[2]; - var context_module = "user"; - if(grbody.indicator === ":/2") { - context_module = grbody.args[0].id; - grbody = grbody.args[1]; - } - if( pl.type.is_variable( grbody ) ) { - thread.throw_error( pl.error.instantiation( atom.indicator ) ); - } else if( !pl.type.is_callable( grbody ) ) { - thread.throw_error( pl.error.type( "callable", grbody, atom.indicator ) ); - } else { - var goal = body_to_dcg( grbody.clone(), s0, thread ); - goal.value = new Term(":", [new Term(context_module), new Term("call", [goal.value])]); - if(goal !== null) { - thread.prepend( [new State( - point.goal.replace( new Term( ",", [goal.value, new Term("=", [goal.variable, s])] ) ), - point.substitution, - point - )] ); - } - } - }, - - // phrase/2 - "phrase/2": function( thread, point, atom ) { - var grbody = atom.args[0], s0 = atom.args[1]; - thread.prepend( [new State( - point.goal.replace( new Term( "phrase", [grbody, s0, new Term("[]", [])] ) ), - point.substitution, - point - )] ); - }, - - - - // TAU PROLOG INFORMATION - - // version/0 - "version/0": function( thread, point, atom ) { - var msg = "Welcome to Tau Prolog version " + version.major + "." + version.minor + "." + version.patch + "\n"; - msg += "Tau Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.\n"; - msg += "Please run ?- license. for legal details.\n"; - msg += "For online help and background, visit http:/tau-prolog.org"; - thread.prepend( [new State( - point.goal.replace( new Term( "write", [new Term( msg, [] )] ) ), - point.substitution, - point - )] ); - }, - - // license/0 - "license/0": function( thread, point, atom ) { - var msg = "Tau Prolog. A Prolog interpreter in JavaScript.\n"; - msg += "Copyright (C) 2017 - 2022 José Antonio Riaza Valverde\n\n"; - msg += "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n"; - msg += "1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n"; - msg += "2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n"; - msg += "3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\n"; - msg += "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n"; - msg += "You should have received a copy of the BSD 3-Clause License along with this program. If not, see https://opensource.org/licenses/BSD-3-Clause"; - thread.prepend( [new State( - point.goal.replace( new Term( "write", [new Term( msg, [] )] ) ), - point.substitution, - point - )] ); - } - - }, "all", { - meta_predicates: { - // '$findall'(?, 0, -, ?) - "$findall/4": new Term("$findall", [new Term("?"), new Num(0, false), new Term("-"), new Term("?")]), - // '$bagof'(?, ^, -) - "$bagof/3": new Term("$bagof", [new Term("?"), new Term("^"), new Term("-")]), - // '$setof'(?, ^, -) - "$setof/3": new Term("$setof", [new Term("?"), new Term("^"), new Term("-")]), - // '$if'(0, 0, 0) - "$if/3": new Term("$if", [new Num(0, false), new Num(0, false), new Num(0, false)]), - // (0;0) - ";/2": new Term(";", [new Num(0, false), new Num(0, false)]), - // (0->0) - "->/2": new Term("->", [new Num(0, false), new Num(0, false)]), - // (0->0) - "*->/2": new Term("*->", [new Num(0, false), new Num(0, false)]), - // (\+0) - "\\+/1": new Term("\\+", [new Num(0, false)]), - // abolish(:) - "abolish/1": new Term("abolish", [new Term(":")]), - // asserta(:) - "asserta/1": new Term("asserta", [new Term(":")]), - // assertz(:) - "assertz/1": new Term("assertz", [new Term(":")]), - // bagof(?, ^, -) - "bagof/3": new Term("bagof", [new Term("?"), new Term("^"), new Term("-")]), - // call(0) - "call/1": new Term("call", [new Num(0, false)]), - // call(1, ?) - "call/2": new Term("call", [new Num(1, false), new Term("?")]), - // call(2, ?, ?) - "call/3": new Term("call", [new Num(2, false), new Term("?"), new Term("?")]), - // call(3, ?, ?, ?) - "call/4": new Term("call", [new Num(3, false), new Term("?"), new Term("?"), new Term("?")]), - // call(4, ?, ?, ?, ?) - "call/5": new Term("call", [new Num(4, false), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), - // call(5, ?, ?, ?, ?, ?) - "call/6": new Term("call", [new Num(5, false), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), - // call(6, ?, ?, ?, ?, ?, ?) - "call/7": new Term("call", [new Num(6, false), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), - // call(7, ?, ?, ?, ?, ?, ?, ?) - "call/8": new Term("call", [new Num(6, false), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), - // call_cleanup(0, 0) - "call_cleanup/2": new Term("call_cleanup", [new Num(0, false), new Num(0, false)]), - // catch(0, ?, 0) - "catch/3": new Term("catch", [new Num(0, false), new Term("?"), new Num(0, false)]), - // consult(:) - "consult/1": new Term("consult", [new Term(":")]), - // clause(:, ?) - "clause/2": new Term("clause", [new Term(":"), new Term("?")]), - // current_predicate(?, :) - "current_predicate/2": new Term("current_predicate", [new Term("?"), new Term(":")]), - // findall(?, 0, -) - "findall/3": new Term("findall", [new Term("?"), new Num(0, false), new Term("-")]), - // findall(?, 0, -, ?) - "findall/4": new Term("findall", [new Term("?"), new Num(0, false), new Term("-"), new Term("?")]), - // forall(0, 0) - "forall/2": new Term("forall", [new Num(0, false), new Num(0, false)]), - // listing(:) - "listing/1": new Term("listing", [new Term(":")]), - // once(0) - "once/1": new Term("once", [new Num(0, false)]), - // phrase(:, ?) - "phrase/2": new Term("phrase", [new Term(":"),new Term("?")]), - // phrase(:, ?, ?) - "phrase/3": new Term("phrase", [new Term(":"),new Term("?"), new Term("?")]), - // retract(:) - "retract/1": new Term("retract", [new Term(":")]), - // retractall(:) - "retractall/1": new Term("retractall", [new Term(":")]), - // setup_call_cleanup(0, 0, 0) - "setup_call_cleanup/3": new Term("setup_call_cleanup", [new Num(0, false), new Num(0, false), new Num(0, false)]), - // setof(?, ^, -) - "setof/3": new Term("setof", [new Term("?"), new Term("^"), new Term("-")]) - } - }); - - if( true ) { - module.exports = pl; - } else {} - -})(); - - -/***/ }), - -/***/ "../../node_modules/util-deprecate/browser.js": -/*!****************************************************!*\ - !*** ../../node_modules/util-deprecate/browser.js ***! - \****************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - - -/** - * Module exports. - */ - -module.exports = deprecate; - -/** - * Mark that a method should not be used. - * Returns a modified function which warns once by default. - * - * If `localStorage.noDeprecation = true` is set, then it is a no-op. - * - * If `localStorage.throwDeprecation = true` is set, then deprecated functions - * will throw an Error when invoked. - * - * If `localStorage.traceDeprecation = true` is set, then deprecated functions - * will invoke `console.trace()` instead of `console.error()`. - * - * @param {Function} fn - the function to deprecate - * @param {String} msg - the string to print to the console when `fn` is invoked - * @returns {Function} a new "deprecated" version of `fn` - * @api public - */ - -function deprecate (fn, msg) { - if (config('noDeprecation')) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (config('throwDeprecation')) { - throw new Error(msg); - } else if (config('traceDeprecation')) { - console.trace(msg); - } else { - console.warn(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -} - -/** - * Checks `localStorage` for boolean values for the given `name`. - * - * @param {String} name - * @returns {Boolean} - * @api private - */ - -function config (name) { - // accessing global.localStorage can trigger a DOMException in sandboxed iframes - try { - if (!__webpack_require__.g.localStorage) return false; - } catch (_) { - return false; - } - var val = __webpack_require__.g.localStorage[name]; - if (null == val) return false; - return String(val).toLowerCase() === 'true'; -} - - -/***/ }), - -/***/ "../../node_modules/util/node_modules/inherits/inherits_browser.js": -/*!*************************************************************************!*\ - !*** ../../node_modules/util/node_modules/inherits/inherits_browser.js ***! - \*************************************************************************/ -/***/ ((module) => { - -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - - -/***/ }), - -/***/ "../../node_modules/util/support/isBufferBrowser.js": -/*!**********************************************************!*\ - !*** ../../node_modules/util/support/isBufferBrowser.js ***! - \**********************************************************/ -/***/ ((module) => { - -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} - -/***/ }), - -/***/ "../../node_modules/util/util.js": -/*!***************************************!*\ - !*** ../../node_modules/util/util.js ***! - \***************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; - - -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(__webpack_require__.g.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } - - if (process.noDeprecation === true) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -}; - - -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; - - -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); -} -exports.inspect = inspect; - - -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; - -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; - - -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} - - -function stylizeNoColor(str, styleType) { - return str; -} - - -function arrayToHash(array) { - var hash = {}; - - array.forEach(function(val, idx) { - hash[val] = true; - }); - - return hash; -} - - -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } - - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } - - var base = '', array = false, braces = ['{', '}']; - - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - - return reduceToSingleString(output, base, braces); -} - - -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} - - -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} - - -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} - - -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; -} - - -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} - - -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; - -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; - -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; - -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; - -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; - -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; - -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; - -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; - -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; - -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; - -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; - -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; - -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; - -exports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ "../../node_modules/util/support/isBufferBrowser.js"); - -function objectToString(o) { - return Object.prototype.toString.call(o); -} - - -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} - - -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; - -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} - - -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; - - -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = __webpack_require__(/*! inherits */ "../../node_modules/util/node_modules/inherits/inherits_browser.js"); - -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; - - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; - -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} - - -/***/ }), - -/***/ "../../node_modules/vm-browserify/index.js": -/*!*************************************************!*\ - !*** ../../node_modules/vm-browserify/index.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, exports) => { - -var indexOf = function (xs, item) { - if (xs.indexOf) return xs.indexOf(item); - else for (var i = 0; i < xs.length; i++) { - if (xs[i] === item) return i; - } - return -1; -}; -var Object_keys = function (obj) { - if (Object.keys) return Object.keys(obj) - else { - var res = []; - for (var key in obj) res.push(key) - return res; - } -}; - -var forEach = function (xs, fn) { - if (xs.forEach) return xs.forEach(fn) - else for (var i = 0; i < xs.length; i++) { - fn(xs[i], i, xs); - } -}; - -var defineProp = (function() { - try { - Object.defineProperty({}, '_', {}); - return function(obj, name, value) { - Object.defineProperty(obj, name, { - writable: true, - enumerable: false, - configurable: true, - value: value - }) - }; - } catch(e) { - return function(obj, name, value) { - obj[name] = value; - }; - } -}()); - -var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', -'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', -'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', -'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', -'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; - -function Context() {} -Context.prototype = {}; - -var Script = exports.Script = function NodeScript (code) { - if (!(this instanceof Script)) return new Script(code); - this.code = code; -}; - -Script.prototype.runInContext = function (context) { - if (!(context instanceof Context)) { - throw new TypeError("needs a 'context' argument."); - } - - var iframe = document.createElement('iframe'); - if (!iframe.style) iframe.style = {}; - iframe.style.display = 'none'; - - document.body.appendChild(iframe); - - var win = iframe.contentWindow; - var wEval = win.eval, wExecScript = win.execScript; - - if (!wEval && wExecScript) { - // win.eval() magically appears when this is called in IE: - wExecScript.call(win, 'null'); - wEval = win.eval; - } - - forEach(Object_keys(context), function (key) { - win[key] = context[key]; - }); - forEach(globals, function (key) { - if (context[key]) { - win[key] = context[key]; - } - }); - - var winKeys = Object_keys(win); - - var res = wEval.call(win, this.code); - - forEach(Object_keys(win), function (key) { - // Avoid copying circular objects like `top` and `window` by only - // updating existing context properties or new properties in the `win` - // that was only introduced after the eval. - if (key in context || indexOf(winKeys, key) === -1) { - context[key] = win[key]; - } - }); - - forEach(globals, function (key) { - if (!(key in context)) { - defineProp(context, key, win[key]); - } - }); - - document.body.removeChild(iframe); - - return res; -}; - -Script.prototype.runInThisContext = function () { - return eval(this.code); // maybe... -}; - -Script.prototype.runInNewContext = function (context) { - var ctx = Script.createContext(context); - var res = this.runInContext(ctx); - - if (context) { - forEach(Object_keys(ctx), function (key) { - context[key] = ctx[key]; - }); - } - - return res; -}; - -forEach(Object_keys(Script.prototype), function (name) { - exports[name] = Script[name] = function (code) { - var s = Script(code); - return s[name].apply(s, [].slice.call(arguments, 1)); - }; -}); - -exports.isContext = function (context) { - return context instanceof Context; -}; - -exports.createScript = function (code) { - return exports.Script(code); -}; - -exports.createContext = Script.createContext = function (context) { - var copy = new Context(); - if(typeof context === 'object') { - forEach(Object_keys(context), function (key) { - copy[key] = context[key]; - }); - } - return copy; -}; - - -/***/ }), - -/***/ "../history/lib/config.js": -/*!********************************!*\ - !*** ../history/lib/config.js ***! - \********************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); - - -/***/ }), - -/***/ "../history/lib/graph.js": -/*!*******************************!*\ - !*** ../history/lib/graph.js ***! - \*******************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HistoryGraph = void 0; -__webpack_require__(/*! d3-transition */ "../../node_modules/d3-transition/src/index.js"); -const d3_color_1 = __webpack_require__(/*! d3-color */ "../../node_modules/d3-color/src/index.js"); -const d3_scale_1 = __webpack_require__(/*! d3-scale */ "../../node_modules/d3-scale/src/index.js"); -const d3_scale_chromatic_1 = __webpack_require__(/*! d3-scale-chromatic */ "../../node_modules/d3-scale-chromatic/src/index.js"); -const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); -const d3_zoom_1 = __webpack_require__(/*! d3-zoom */ "../../node_modules/d3-zoom/src/index.js"); -const fs = __webpack_require__(/*! file-saver */ "../../node_modules/file-saver/dist/FileSaver.min.js"); -class HistoryGraph { - constructor(graphId, div, config = {}) { - this.nodes = []; - this.versionNodes = []; - this.edges = []; - this.maxX = 0; - this.maxY = 0; - this.maxId = 0; - this.i = 0; - var defaultConfig = { - customSelectNode: (g, d) => false, - customCtrlClick: (g, d) => false, - customForm: (g, form) => null, - customSize: (g) => [g.config.width, g.config.height], - customWindowTabCommand: (trialIdSimplified, trialId, command) => false, - hintMessage: "Ctrl+Shift click or ⌘+Shift click to diff trials", - width: 200, - height: 100, - radius: 20, - moveX: 20, - moveY: 25, - moveY2: 10, - spacing: 17, - margin: 50, - fontSize: 10, - useTooltip: false, - }; - this.config = Object.assign({}, defaultConfig, config); - this.graphId = graphId; - this.zoom = (0, d3_zoom_1.zoom)() - .on("zoom", (event) => { - return this.zoomFunction(event); - }) - .on("start", () => (0, d3_selection_1.select)('body').style("cursor", "move")) - .on("end", () => (0, d3_selection_1.select)('body').style("cursor", "auto")) - .wheelDelta(function () { - const e = event; - return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000; - }); - this.div = (0, d3_selection_1.select)(div); - let form = (0, d3_selection_1.select)(div) - .append("form") - .classed("history-toolbar", true); - this.svg = (0, d3_selection_1.select)(div) - .append("div") - .append("svg") - .attr("width", this.config.width) - .attr("height", this.config.height) - .call(this.zoom) - .on("mouseup", () => this.svgMouseUp()); - this.state = { - selectedNode: null, - mouseDownNode: null, - justScale: false - }; - // Tooltip - this.tooltipDiv = (0, d3_selection_1.select)("body").append("div") - .classed("now-tooltip now-history-tooltip", true) - .style("opacity", 0) - .style("max-width", "250px") - .on("mouseout", () => { - this.closeTooltip(); - }); - this.createToolbar(form); - this.createMarker('end-arrow', 'endarrow', '#000'); - this.g = this.svg.append("g") - .attr("id", this._graphId()) - .attr("transform", "translate(0,0)") - .classed('HistoryGraph', true); - } - createToolbar(form) { - let formdiv = form.append("div") - .classed("buttons", true); - this.config.customForm(this, formdiv); - // Reset zoom - formdiv.append("a") - .classed("toollink", true) - .attr("id", "history-" + this.graphId + "-history-zoom") - .attr("href", "#") - .attr("title", "Restore zoom") - .on("click", () => this.restorePosition()) - .append("i") - .classed("fa fa-eye", true); - // Toggle Tooltips - let tooltipsToggle = formdiv.append("input") - .attr("id", "history-" + this.graphId + "-toolbar-tooltips") - .attr("type", "checkbox") - .attr("name", "history-toolbar-tooltips") - .attr("value", "show") - .property("checked", this.config.useTooltip) - .on("change", () => { - this.closeTooltip(); - this.config.useTooltip = tooltipsToggle.property("checked"); - }); - formdiv.append("label") - .attr("for", "history-" + this.graphId + "-toolbar-tooltips") - .attr("title", "Show tooltips on mouse hover") - .append("i") - .classed("fa fa-comment", true); - // Download SVG - formdiv.append("a") - .classed("toollink", true) - .attr("id", "history-" + this.graphId + "-download") - .attr("href", "#") - .attr("title", "Download graph SVG") - .on("click", () => { - this.download(); - }) - .append("i") - .classed("fa fa-download", true); - // Set Font Size - let fontToggle = formdiv.append("input") - .attr("id", "history-" + this.graphId + "-toolbar-fonts") - .attr("type", "checkbox") - .attr("name", "history-toolbar-fonts") - .attr("value", "show") - .property("checked", false) - .on("change", () => { - let display = fontToggle.property("checked") ? "inline-block" : "none"; - fontSize.style("display", display); - }); - formdiv.append("label") - .attr("for", "history-" + this.graphId + "-toolbar-fonts") - .attr("title", "Set font size") - .append("i") - .classed("fa fa-font", true); - let fontSize = formdiv.append("input") - .attr("type", "number") - .attr("value", this.config.fontSize) - .style("width", "50px") - .style("display", "none") - .attr("title", "Node font size") - .on("change", () => { - this.config.fontSize = fontSize.property("value"); - this.svg.selectAll("text.trial-id") - .attr("font-size", this.config.fontSize); - }); - // Submit - formdiv.append("input") - .attr("type", "submit") - .attr("name", "prevent-enter") - .attr("onclick", "return false;") - .style("display", "none"); - formdiv.append("div"); - formdiv.append("div") - .text(this.config.hintMessage) - .style('font-family', 'sans-serif') - .style('font-size', '12px') - .style('pointer-events', 'none'); - } - load(data) { - let nodes = [], otherNodes = [], edges = [], spacing = this.config.spacing, margin = this.config.margin; - let spacing2 = 2 * spacing, spacing4 = 4 * spacing, start = margin, max = 0, id = 0, last = data.nodes.length - 1, tid = 0, useVersion = false; - let levels = []; - for (var i = 0; i <= last; i++) { - let node = data.nodes[i]; - var previous = levels[node.level]; - if (previous == undefined) { - previous = -1; - } - var trials = node.trials; - if (trials == undefined) { - trials = []; - } - levels[node.level] = Math.max(previous, trials.length); - } - let levelsy = []; - var current = margin; - for (var i = 0; i <= levels.length; i++) { - levelsy[i] = current; - current += spacing2 + levels[i] * spacing2; - } - for (var i = 0; i <= last; i++) { - let node = data.nodes[i]; - let x = start + spacing4 * id; - let y = levelsy[node.level]; - var new_node = { - id: id, - display: node.display, - x: x, - y: y, - title: node.id.toString(), - info: node, - radius: this.config.radius, - gradient: false, - status: node.status - }; - nodes.push(new_node); - if (typeof (node.trials) != "undefined") { - useVersion = true; - for (var j = 0; j < node.trials.length; j++) { - let trialNode = node.trials[j]; - let ny = y + (j + 1) * spacing2 + spacing; - otherNodes.push({ - id: tid, - display: trialNode.display, - x: x + this.config.radius / 2, - y: ny, - title: trialNode.id.toString(), - info: trialNode, - tooltip: trialNode.tooltip, - radius: this.config.radius / 2, - gradient: true, - status: trialNode.status - }); - tid += 1; - max = Math.max(max, y); - } - } - else { - new_node.tooltip = node.tooltip; - } - max = Math.max(max, y); - this.maxX = x; - id += 1; - } - max += spacing2; - this.maxY = max; - this.maxId = Math.max(tid, id); - for (var i = 0; i < data.edges.length; i++) { - let edge = Object.assign({}, data.edges[i]); - edge.id = edge.source + "-" + edge.target; - edge.source = nodes[edge.source]; - edge.target = nodes[edge.target]; - if (edge.source != edge.target) { - edges.push(edge); - } - } - if (useVersion) { - this.nodes = otherNodes; - this.versionNodes = nodes; - } - else { - this.nodes = nodes; - this.versionNodes = []; - } - this.edges = edges; - this.updateWindow(); - this.restorePosition(); - this.update(); - this.menuOnRightClick(); - return nodes; - } - updateWindow() { - let size = this.config.customSize(this); - this.config.width = size[0]; - this.config.height = size[1]; - this.svg - .attr("width", size[0]) - .attr("height", size[1]); - } - update() { - var nodes = this.g.selectAll('g.node') - .data(this.nodes, (d) => d.id); - var edges = this.g.selectAll('g.link') - .data(this.edges, (d) => d.id); - var version = this.g.selectAll('g.version') - .data(this.versionNodes, (d) => d.id); - this.updateNodes(nodes); - this.updateVersionNodes(version); - this.updateLinks(edges); - } - restorePosition() { - let scale = this.config.height / this.maxY; - if (scale <= 1.0) { - this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity - .translate(this.config.width - - this.maxX * scale - - this.config.margin, 0) - .scale(scale)); - } - else { - this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity - .scale(1) - .translate(this.config.width - - this.maxX - - this.config.margin, 0)); - } - this.state.justScale = false; - } - selectNode(node) { - this.state.selectedNode = node; - this.config.customSelectNode(this, node); - this.svg.selectAll('.node[attr-trial="' + node.title + '"] > rect') - .attr('stroke', 'rgb(200, 238, 241)') - .classed('selected', true); - } - selectTrial(trialId) { - for (var node of this.nodes) { - if (node.title == trialId) { - this.selectNode(node); - return; - } - } - } - download(name) { - var isFileSaverSupported = false; - try { - isFileSaverSupported = !!new Blob(); - } - catch (e) { - alert("blob not supported"); - } - name = (name === undefined) ? "history.svg" : name; - let gnode = this.g.node(); - var bbox = gnode.getBBox(); - var width = this.svg.attr("width"), height = this.svg.attr("height"); - this.g.attr("transform", "translate(" + (-bbox.x + 5) + ", " + (-bbox.y + 5) + ")"); - let svgNode = this.svg - .attr("title", "Trial") - .attr("version", 1.1) - .attr("width", bbox.width + 10) - .attr("height", bbox.height + 10) - .attr("xmlns", "http://www.w3.org/2000/svg") - .node(); - var html = svgNode.parentNode.innerHTML; - html = ' { - if (this.state.selectedNode == null) { - return false; - } - return cd.id === this.state.selectedNode.id; - }).select('rect') - .classed('selected', false) - .attr("stroke", "#000"); - this.state.selectedNode = null; - } - nodeMouseDown(event, d3node, d) { - event.stopPropagation(); - this.state.mouseDownNode = d; - this.closeTooltip(); - } - nodeMouseUp(event, d3node, d) { - event.stopPropagation(); - if (!this.state.mouseDownNode) { - return; - } - if (this.state.justScale) { - this.state.justScale = false; - } - else { - if (event.ctrlKey || event.shiftKey || event.altKey) { - this.config.customCtrlClick(this, d); - return; - } - if (this.state.selectedNode) { - this.unselectNode(); - } - d3node - .attr('stroke', 'rgb(200, 238, 241)') - .classed('selected', true); - this.state.selectedNode = d; - this.config.customSelectNode(this, d); - } - this.state.mouseDownNode = null; - } - svgMouseUp() { - if (this.state.justScale) { - this.state.justScale = false; - } - } - updateVersionNodes(nodes) { - var nodeEnter = nodes.enter().append("g") - .classed("version", true) - .attr("attr-trialid", (d) => d.title) - .attr("transform", (d) => { - return "translate(" + 0 + "," + 0 + ")"; - }); - // Circle for new nodes - nodeEnter.append('rect') - .attr("transform", (d) => { - return "translate(" + d.x + "," + d.y + ")"; - }) - .attr('width', (d) => 2 * d.radius) - .attr('height', (d) => 2 * d.radius) - .attr('rx', 0) - .attr('ry', 0) - //.attr('r', ) - .attr("stroke", "#000") - .attr("stroke-width", "2.5px") - .attr("fill", "#F6FBFF") - .attr("stroke", "#000") - .attr("stroke-width", "2.5px"); - nodeEnter.append('text') - .classed('trial-id', true) - .attr('font-family', 'sans-serif') - .attr('font-size', this.config.fontSize + 'px') - .attr('pointer-events', 'none') - .attr('x', (d) => d.radius) - .attr('y', (d) => d.radius + 4) - .attr('stroke', '#000') - .attr('text-anchor', 'middle') - //.attr('font-weight', 'bold') - .attr("transform", (d) => { - return "translate(" + d.x + "," + d.y + ")"; - }).text((d) => d.display); - nodeEnter.merge(nodes); // nodeUpdate - nodes.exit().remove(); // nodeExit - } - updateNodes(nodes) { - let self = this; - var nodeEnter = nodes.enter().append("g") - .classed("node", true) - .attr("attr-trialid", (d) => d.title) - .attr("cursor", "pointer") - .attr("transform", (d) => { - return "translate(" + 0 + "," + 0 + ")"; - }); - // Circle for new nodes - nodeEnter.append('rect') - .attr("transform", (d) => { - return "translate(" + d.x + "," + d.y + ")"; - }) - .attr('cursor', 'pointer') - .attr('title', (d) => d.info.display) - .attr('width', (d) => 2 * d.radius) - .attr('height', (d) => 2 * d.radius) - .attr('rx', (d) => 2 * d.radius) - .attr('ry', (d) => 2 * d.radius) - //.attr('r', ) - .attr("stroke", "#000") - .attr("stroke-width", "2.5px") - .attr("fill", function (d) { - var proportion = Math.round(200 * (1.0 - (parseInt(d.title) / self.maxId)) + 50); - if (d.status === 'unfinished') { - return d.gradient ? (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString() : "rgb(238, 200, 241)"; - } - if (d.status === 'finished') { - return d.gradient ? (0, d3_color_1.rgb)(proportion, proportion, proportion, 255).toString() : "#F6FBFF"; - } - if (d.status === 'backup') { - return d.gradient ? (0, d3_color_1.rgb)(255, 255, proportion, 255).toString() : "rgb(241, 238, 200)"; - } - return '#666'; - }) - .attr("stroke", function (d) { - return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : "#000"; - }) - .attr("stroke-width", "2.5px") - .on('mousedown', function (event, d) { - self.nodeMouseDown(event, (0, d3_selection_1.select)(this), d); - }).on('click', function (event, d) { - self.nodeMouseUp(event, (0, d3_selection_1.select)(this), d); - }).on('mouseover', function (event, d) { - if (!self.state.mouseDownNode && self.config.useTooltip) { - self.closeTooltip(); - self.showTooltip(event, d); - } - (0, d3_selection_1.select)(this) - .attr('stroke', 'rgb(200, 238, 241)'); - }).on('mouseout', function (event, d) { - (0, d3_selection_1.select)(this) - .attr("stroke", (d) => { - return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : "#000"; - }); - }) - .classed("custom-menu", true); - nodeEnter.append('text') - .classed('trial-id', true) - .attr('font-family', 'sans-serif') - .attr('font-size', this.config.fontSize + 'px') - .attr('pointer-events', 'none') - .attr('x', (d) => d.radius) - .attr('y', (d) => d.radius + 4) - .attr('stroke', '#000') - .attr('text-anchor', 'middle') - //.attr('font-weight', 'bold') - .attr("transform", (d) => { - return "translate(" + d.x + "," + d.y + ")"; - }).text((d) => d.gradient ? "" : d.display); - nodeEnter.merge(nodes); // nodeUpdate - nodes.exit().remove(); // nodeExit - } - updateLinks(link) { - // Enter any new links - let colors = (0, d3_scale_1.scaleOrdinal)(d3_scale_chromatic_1.schemeCategory10); - var linkEnter = link.enter().insert('path', 'g') - .classed('link', true) - .attr('cursor', 'crosshair') - .attr('fill', 'none') - .attr('stroke', '#000') - .attr('stroke-width', '4px'); - linkEnter - .attr("d", (d) => { - var deltaX = d.target.x - d.source.x, deltaY = d.target.y - d.source.y, dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY), normX = deltaX / dist, normY = deltaY / dist, sourcePadding = this.config.radius - 5, targetPadding = this.config.radius + (d.right ? 3 : -5), sourceX = d.source.x + this.config.radius + (sourcePadding * normX), sourceY = d.source.y + this.config.radius + (sourcePadding * normY), targetX = d.target.x + this.config.radius - (targetPadding * normX), targetY = d.target.y + this.config.radius - (targetPadding * normY); - var step = 0; - if (d.level > 0) { - step += this.config.moveY; - step += (d.level - 1) * this.config.moveY2; - } - return `M ${sourceX}, ${sourceY} - C ${(sourceX - this.config.moveX / 2)} ${sourceY} - ${(sourceX - this.config.moveX / 2)} ${(sourceY + 3 * step / 4)} - ${(sourceX - this.config.moveX)} ${(sourceY + step)} - L ${(sourceX - this.config.moveX)} ${(sourceY + step)} - ${(targetX + this.config.moveX)} ${(sourceY + step)} - C ${(targetX + this.config.moveX / 2)} ${(sourceY + 3 * step / 4)} - ${(targetX + this.config.moveX / 2)} ${sourceY} - ${targetX}, ${targetY}`; - }) - .attr('marker-end', (d) => { - return d.right ? 'url(#end-arrow)' : ''; - }) - .attr('stroke', (d) => { - return (0, d3_color_1.rgb)(colors(d.level.toString())).darker().toString(); - }); - // Update - linkEnter.merge(link); // linkUpdate - // Remove any exiting links - link.exit().remove(); // linkExit - } - zoomFunction(event) { - this.state.justScale = true; - this.closeTooltip(); - this.transform = event.transform; - this.g.attr("transform", event.transform); - } - _graphId() { - return "history-graph-" + this.graphId; - } - menuOnRightClick() { - let rightClickMenu = document.getElementById("context-menu"); - // Set up an event handler for the documnt right click - document.addEventListener("contextmenu", function (event) { - var _a; - //open right click menu - let target = event.target; - if (target && target.classList.contains("custom-menu")) { - event.preventDefault(); - if (rightClickMenu) { - rightClickMenu.setAttribute("selected-trial", (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("attr-trialid")); - rightClickMenu.setAttribute("selected-trial-simplified", target.getAttribute("title")); - rightClickMenu.style.top = (event.pageY - 10).toString(); - rightClickMenu.style.left = (event.pageX - 90).toString(); - rightClickMenu.style.display = "block"; - rightClickMenu.classList.add("show"); - } - } - }); - // close the menu - document.addEventListener("click", function (event) { - if (rightClickMenu) { - rightClickMenu.style.display = "none"; - rightClickMenu.classList.remove("show"); - } - }); - } -} -exports.HistoryGraph = HistoryGraph; - - -/***/ }), - -/***/ "../history/lib/index.js": -/*!*******************************!*\ - !*** ../history/lib/index.js ***! - \*******************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(/*! ./config */ "../history/lib/config.js"), exports); -__exportStar(__webpack_require__(/*! ./structures */ "../history/lib/structures.js"), exports); -__exportStar(__webpack_require__(/*! ./graph */ "../history/lib/graph.js"), exports); - - -/***/ }), - -/***/ "../history/lib/structures.js": -/*!************************************!*\ - !*** ../history/lib/structures.js ***! - \************************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css": -/*!***************************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css ***! - \***************************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -.lm-AccordionPanel .lm-AccordionPanel-title { - box-sizing: border-box; - padding: 0px 10px; - background: #e5e5e5; - border: 1px solid #c0c0c0; - border-bottom: none; - font: - 12px Helvetica, - Arial, - sans-serif; - min-height: 22px; - max-height: 22px; - min-width: 35px; - line-height: 20px; - margin: 0px; -} - -.lm-AccordionPanel .lm-AccordionPanel-title:focus, -.lm-AccordionPanel .lm-AccordionPanel-title:hover { - background: #dbdbdb; -} - -.lm-AccordionPanel .lm-AccordionPanel-title:focus, -.lm-AccordionPanel - .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) { - border: 1px solid lightskyblue; -} - -.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) { - border-bottom: 1px solid #c0c0c0; -} - -.lm-AccordionPanel - .lm-AccordionPanel-title.lm-mod-expanded - .lm-AccordionPanel-titleCollapser:before { - content: '\\f0d8'; - font-family: FontAwesome; -} - -.lm-AccordionPanel - .lm-AccordionPanel-title - .lm-AccordionPanel-titleCollapser:before { - content: '\\f0d7'; - font-family: FontAwesome; - position: absolute; - right: 10px; -} - -.lm-AccordionPanel .lm-AccordionPanel-titleLabel { - padding: 0px 5px; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/accordionpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,sBAAsB;EACtB,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,WAAW;AACb;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;;;EAGE,8BAA8B;AAChC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel .lm-AccordionPanel-title {\n box-sizing: border-box;\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n min-height: 22px;\n max-height: 22px;\n min-width: 35px;\n line-height: 20px;\n margin: 0px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\n background: #dbdbdb;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\n border: 1px solid lightskyblue;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title.lm-mod-expanded\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\f0d8';\n font-family: FontAwesome;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\f0d7';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\n padding: 0px 5px;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css": -/*!***************************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css ***! - \***************************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-CommandPalette { - font-family: sans-serif; - background: #f5f5f5; -} - -.lm-CommandPalette-search { - padding: 8px; -} - -.lm-CommandPalette-wrapper { - padding: 4px 6px; - background: white; - border: 1px solid #e0e0e0; - position: relative; -} - -.lm-CommandPalette-input { - width: 92%; - border: none; - outline: none; - font-size: 16px; -} - -.lm-CommandPalette-header { - padding: 4px; - color: #757575; - font-size: 12px; - font-weight: 600; - background: #e1e1e1; - cursor: pointer; -} - -.lm-CommandPalette-header:hover::before { - content: '\\2026'; /* ellipsis */ - float: right; - margin-right: 4px; -} - -.lm-CommandPalette-header > mark { - background-color: transparent; - font-weight: bold; -} - -.lm-CommandPalette-item { - padding: 4px 8px; - color: #757575; - font-size: 13px; - font-weight: 500; -} - -.lm-CommandPalette-emptyMessage { - padding: 4px; - color: #757575; - font-size: 12px; - font-weight: 600; - text-align: center; -} - -.lm-CommandPalette-item.lm-mod-disabled { - color: rgba(0, 0, 0, 0.25); -} - -.lm-CommandPalette-item.lm-mod-active { - background: #7fdbff; -} - -.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) { - background: #e5e5e5; -} - -.lm-CommandPalette-itemIcon { - display: none; -} - -.lm-CommandPalette-itemLabel > mark { - background-color: transparent; - font-weight: bold; -} - -.lm-CommandPalette-item.lm-mod-disabled mark { - color: rgba(0, 0, 0, 0.4); -} - -.lm-CommandPalette-itemCaption { - color: #9e9e9e; - font-size: 11px; - font-weight: 400; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/commandpalette.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,gBAAgB,EAAE,aAAa;EAC/B,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n font-family: sans-serif;\n background: #f5f5f5;\n}\n\n.lm-CommandPalette-search {\n padding: 8px;\n}\n\n.lm-CommandPalette-wrapper {\n padding: 4px 6px;\n background: white;\n border: 1px solid #e0e0e0;\n position: relative;\n}\n\n.lm-CommandPalette-input {\n width: 92%;\n border: none;\n outline: none;\n font-size: 16px;\n}\n\n.lm-CommandPalette-header {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n background: #e1e1e1;\n cursor: pointer;\n}\n\n.lm-CommandPalette-header:hover::before {\n content: '\\2026'; /* ellipsis */\n float: right;\n margin-right: 4px;\n}\n\n.lm-CommandPalette-header > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item {\n padding: 4px 8px;\n color: #757575;\n font-size: 13px;\n font-weight: 500;\n}\n\n.lm-CommandPalette-emptyMessage {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n text-align: center;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-CommandPalette-item.lm-mod-active {\n background: #7fdbff;\n}\n\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\n background: #e5e5e5;\n}\n\n.lm-CommandPalette-itemIcon {\n display: none;\n}\n\n.lm-CommandPalette-itemLabel > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled mark {\n color: rgba(0, 0, 0, 0.4);\n}\n\n.lm-CommandPalette-itemCaption {\n color: #9e9e9e;\n font-size: 11px;\n font-weight: 400;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css": -/*!*********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css ***! - \*********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) 2014-2018, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-DataGrid { - min-width: 64px; - min-height: 64px; - border: 1px solid #a0a0a0; -} - -.lm-DataGrid-scrollCorner { - background-color: #f0f0f0; -} - -.lm-DataGrid-scrollCorner::after { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 1px; - height: 1px; - background-color: #a0a0a0; -} - -.lm-DataGrid-cellEditorOccluder { - pointer-events: none; - position: absolute; - overflow: hidden; -} - -.lm-DataGrid-cellEditorContainer { - pointer-events: auto; - position: absolute; - background-color: #ffffff; - box-sizing: border-box; - box-shadow: 0px 0px 6px #006bf7; - border: 2px solid #006bf7; -} - -.lm-DataGrid-cellEditorContainer.lm-mod-invalid { - box-shadow: 0px 0px 6px red; - border: 2px solid red; -} - -.lm-DataGrid-cellEditorContainer > form { - width: 100%; - height: 100%; - overflow: hidden; -} - -.lm-DataGrid-cellEditorWidget { - width: 100%; - height: 100%; - outline: none; - box-sizing: border-box; -} - -.lm-DataGrid-cellEditorInput { - background-color: #ffffff; - border: 0; -} - -.lm-DataGrid-cellEditorCheckbox { - margin: 0; -} - -.lm-DataGrid-notification { - position: absolute; - display: flex; - overflow: visible; - animation: fade-in 300ms ease-out; -} - -.lm-DataGrid-notificationContainer { - box-shadow: 0px 2px 5px #999999; - border-radius: 3px; - background-color: white; - color: black; - border: 1px solid black; - font-family: sans-serif; - font-size: 13px; - padding: 4px; -} - -@keyframes fade-in { - 0% { - opacity: 0; - } - 50% { - opacity: 0.7; - } - 100% { - opacity: 1; - } -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/datagrid.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E;;AAE9E;EACE,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,yBAAyB;EACzB,sBAAsB;EACtB,+BAA+B;EAC/B,yBAAyB;AAC3B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,yBAAyB;EACzB,SAAS;AACX;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,iCAAiC;AACnC;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,uBAAuB;EACvB,YAAY;EACZ,uBAAuB;EACvB,uBAAuB;EACvB,eAAe;EACf,YAAY;AACd;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,YAAY;EACd;EACA;IACE,UAAU;EACZ;AACF","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DataGrid {\n min-width: 64px;\n min-height: 64px;\n border: 1px solid #a0a0a0;\n}\n\n.lm-DataGrid-scrollCorner {\n background-color: #f0f0f0;\n}\n\n.lm-DataGrid-scrollCorner::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n background-color: #a0a0a0;\n}\n\n.lm-DataGrid-cellEditorOccluder {\n pointer-events: none;\n position: absolute;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorContainer {\n pointer-events: auto;\n position: absolute;\n background-color: #ffffff;\n box-sizing: border-box;\n box-shadow: 0px 0px 6px #006bf7;\n border: 2px solid #006bf7;\n}\n\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\n box-shadow: 0px 0px 6px red;\n border: 2px solid red;\n}\n\n.lm-DataGrid-cellEditorContainer > form {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorWidget {\n width: 100%;\n height: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n.lm-DataGrid-cellEditorInput {\n background-color: #ffffff;\n border: 0;\n}\n\n.lm-DataGrid-cellEditorCheckbox {\n margin: 0;\n}\n\n.lm-DataGrid-notification {\n position: absolute;\n display: flex;\n overflow: visible;\n animation: fade-in 300ms ease-out;\n}\n\n.lm-DataGrid-notificationContainer {\n box-shadow: 0px 2px 5px #999999;\n border-radius: 3px;\n background-color: white;\n color: black;\n border: 1px solid black;\n font-family: sans-serif;\n font-size: 13px;\n padding: 4px;\n}\n\n@keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n opacity: 1;\n }\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css": -/*!**********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css ***! - \**********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-DockPanel-overlay { - background: rgba(255, 255, 255, 0.6); - border: 1px dashed black; - transition-property: top, left, right, bottom; - transition-duration: 150ms; - transition-timing-function: ease; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/dockpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css": -/*!******************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css ***! - \******************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dragdrop_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../dragdrop/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_widgets_style_index_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../widgets/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_datagrid_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./datagrid.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css"); -// Imports - - - - - - - - - - - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dragdrop_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_widgets_style_index_css__WEBPACK_IMPORTED_MODULE_3__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_4__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_5__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_datagrid_css__WEBPACK_IMPORTED_MODULE_6__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_7__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_8__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_9__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_10__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_11__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) 2014-2018, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n@import '@lumino/dragdrop/style/index.css';\n@import '@lumino/widgets/style/index.css';\n@import './accordionpanel.css';\n@import './commandpalette.css';\n@import './datagrid.css';\n@import './dockpanel.css';\n@import './menu.css';\n@import './menubar.css';\n@import './scrollbar.css';\n@import './tabbar.css';\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css": -/*!*****************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css ***! - \*****************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-Menu { - padding: 3px 0px; - background: white; - color: rgba(0, 0, 0, 0.87); - border: 1px solid #c0c0c0; - font: - 12px Helvetica, - Arial, - sans-serif; - box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2); -} - -.lm-Menu-item.lm-mod-active { - background: #e5e5e5; -} - -.lm-Menu-item.lm-mod-disabled { - color: rgba(0, 0, 0, 0.25); -} - -.lm-Menu-itemIcon { - width: 21px; - padding: 4px 2px; -} - -.lm-Menu-itemLabel { - padding: 4px 35px 4px 2px; -} - -.lm-Menu-itemMnemonic { - text-decoration: underline; -} - -.lm-Menu-itemShortcut { - padding: 4px 0px; -} - -.lm-Menu-itemSubmenuIcon { - width: 16px; - padding: 4px 0px; -} - -.lm-Menu-item[data-type='separator'] > div { - padding: 0; - height: 9px; -} - -.lm-Menu-item[data-type='separator'] > div::after { - content: ''; - display: block; - position: relative; - top: 4px; - border-top: 1px solid #dddddd; -} - -.lm-Menu-itemIcon::before, -.lm-Menu-itemSubmenuIcon::before { - font-family: FontAwesome; -} - -.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before { - content: '\\f00c'; -} - -.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before { - content: '\\f0da'; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/menu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;EAC1B,yBAAyB;EACzB;;;cAGY;EACZ,0CAA0C;AAC5C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,WAAW;AACb;;AAEA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,6BAA6B;AAC/B;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n padding: 3px 0px;\n background: white;\n color: rgba(0, 0, 0, 0.87);\n border: 1px solid #c0c0c0;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-Menu-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-Menu-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-Menu-itemIcon {\n width: 21px;\n padding: 4px 2px;\n}\n\n.lm-Menu-itemLabel {\n padding: 4px 35px 4px 2px;\n}\n\n.lm-Menu-itemMnemonic {\n text-decoration: underline;\n}\n\n.lm-Menu-itemShortcut {\n padding: 4px 0px;\n}\n\n.lm-Menu-itemSubmenuIcon {\n width: 16px;\n padding: 4px 0px;\n}\n\n.lm-Menu-item[data-type='separator'] > div {\n padding: 0;\n height: 9px;\n}\n\n.lm-Menu-item[data-type='separator'] > div::after {\n content: '';\n display: block;\n position: relative;\n top: 4px;\n border-top: 1px solid #dddddd;\n}\n\n.lm-Menu-itemIcon::before,\n.lm-Menu-itemSubmenuIcon::before {\n font-family: FontAwesome;\n}\n\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\n content: '\\f00c';\n}\n\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\n content: '\\f0da';\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css": -/*!********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css ***! - \********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-MenuBar { - padding-left: 5px; - background: #fafafa; - color: rgba(0, 0, 0, 0.87); - border-bottom: 1px solid #dddddd; - font: - 13px Helvetica, - Arial, - sans-serif; -} - -.lm-MenuBar-menu { - transform: translateY(-1px); -} - -.lm-MenuBar-item { - padding: 4px 8px; - border-left: 1px solid transparent; - border-right: 1px solid transparent; -} - -.lm-MenuBar-item.lm-mod-active { - background: #e5e5e5; -} - -.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active { - z-index: 10001; - background: white; - border-left: 1px solid #c0c0c0; - border-right: 1px solid #c0c0c0; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); -} - -.lm-MenuBar-item:focus-visible { - outline: 2px solid #333; - outline-offset: -2px; -} - -.lm-MenuBar-item[aria-disabled='true'] { - color: rgba(0, 0, 0, 0.37); -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/menubar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,iBAAiB;EACjB,mBAAmB;EACnB,0BAA0B;EAC1B,gCAAgC;EAChC;;;cAGY;AACd;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,kCAAkC;EAClC,mCAAmC;AACrC;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,iBAAiB;EACjB,8BAA8B;EAC9B,+BAA+B;EAC/B,0CAA0C;AAC5C;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,0BAA0B;AAC5B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n padding-left: 5px;\n background: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n border-bottom: 1px solid #dddddd;\n font:\n 13px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-MenuBar-menu {\n transform: translateY(-1px);\n}\n\n.lm-MenuBar-item {\n padding: 4px 8px;\n border-left: 1px solid transparent;\n border-right: 1px solid transparent;\n}\n\n.lm-MenuBar-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\n z-index: 10001;\n background: white;\n border-left: 1px solid #c0c0c0;\n border-right: 1px solid #c0c0c0;\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-MenuBar-item:focus-visible {\n outline: 2px solid #333;\n outline-offset: -2px;\n}\n\n.lm-MenuBar-item[aria-disabled='true'] {\n color: rgba(0, 0, 0, 0.37);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css": -/*!**********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css ***! - \**********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); -// Imports - - - -var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretleft.png */ "../../node_modules/@lumino/default-theme/images/caretleft.png"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretright.png */ "../../node_modules/@lumino/default-theme/images/caretright.png"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretup.png */ "../../node_modules/@lumino/default-theme/images/caretup.png"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretdown.png */ "../../node_modules/@lumino/default-theme/images/caretdown.png"), __webpack_require__.b); -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -var ___CSS_LOADER_URL_REPLACEMENT_0___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); -var ___CSS_LOADER_URL_REPLACEMENT_1___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); -var ___CSS_LOADER_URL_REPLACEMENT_2___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); -var ___CSS_LOADER_URL_REPLACEMENT_3___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-ScrollBar[data-orientation='horizontal'] { - min-height: 16px; - max-height: 16px; - min-width: 45px; - border-top: 1px solid #a0a0a0; -} - -.lm-ScrollBar[data-orientation='vertical'] { - min-width: 16px; - max-width: 16px; - min-height: 45px; - border-left: 1px solid #a0a0a0; -} - -.lm-ScrollBar-button { - background-color: #f0f0f0; - background-position: center center; - min-height: 15px; - max-height: 15px; - min-width: 15px; - max-width: 15px; -} - -.lm-ScrollBar-button:hover { - background-color: #dadada; -} - -.lm-ScrollBar-button.lm-mod-active { - background-color: #cdcdcd; -} - -.lm-ScrollBar-track { - background: #f0f0f0; -} - -.lm-ScrollBar-thumb { - background: #cdcdcd; -} - -.lm-ScrollBar-thumb:hover { - background: #bababa; -} - -.lm-ScrollBar-thumb.lm-mod-active { - background: #a0a0a0; -} - -.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb { - height: 100%; - min-width: 15px; - border-left: 1px solid #a0a0a0; - border-right: 1px solid #a0a0a0; -} - -.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb { - width: 100%; - min-height: 15px; - border-top: 1px solid #a0a0a0; - border-bottom: 1px solid #a0a0a0; -} - -.lm-ScrollBar[data-orientation='horizontal'] - .lm-ScrollBar-button[data-action='decrement'] { - background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___}); -} - -.lm-ScrollBar[data-orientation='horizontal'] - .lm-ScrollBar-button[data-action='increment'] { - background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___}); -} - -.lm-ScrollBar[data-orientation='vertical'] - .lm-ScrollBar-button[data-action='decrement'] { - background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___}); -} - -.lm-ScrollBar[data-orientation='vertical'] - .lm-ScrollBar-button[data-action='increment'] { - background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___}); -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/scrollbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,8BAA8B;AAChC;;AAEA;EACE,yBAAyB;EACzB,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,gCAAgC;AAClC;;AAEA;;EAEE,yDAA8C;AAChD;;AAEA;;EAEE,yDAA+C;AACjD;;AAEA;;EAEE,yDAA4C;AAC9C;;AAEA;;EAEE,yDAA8C;AAChD","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n min-height: 16px;\n max-height: 16px;\n min-width: 45px;\n border-top: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n min-width: 16px;\n max-width: 16px;\n min-height: 45px;\n border-left: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar-button {\n background-color: #f0f0f0;\n background-position: center center;\n min-height: 15px;\n max-height: 15px;\n min-width: 15px;\n max-width: 15px;\n}\n\n.lm-ScrollBar-button:hover {\n background-color: #dadada;\n}\n\n.lm-ScrollBar-button.lm-mod-active {\n background-color: #cdcdcd;\n}\n\n.lm-ScrollBar-track {\n background: #f0f0f0;\n}\n\n.lm-ScrollBar-thumb {\n background: #cdcdcd;\n}\n\n.lm-ScrollBar-thumb:hover {\n background: #bababa;\n}\n\n.lm-ScrollBar-thumb.lm-mod-active {\n background: #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\n height: 100%;\n min-width: 15px;\n border-left: 1px solid #a0a0a0;\n border-right: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\n width: 100%;\n min-height: 15px;\n border-top: 1px solid #a0a0a0;\n border-bottom: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(../images/caretleft.png);\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(../images/caretright.png);\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(../images/caretup.png);\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(../images/caretdown.png);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css": -/*!*******************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css ***! - \*******************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-TabBar { - min-height: 24px; - max-height: 24px; -} - -.lm-TabBar-content { - min-width: 0; - min-height: 0; - align-items: flex-end; - border-bottom: 1px solid #c0c0c0; -} - -.lm-TabBar-tab { - padding: 0px 10px; - background: #e5e5e5; - border: 1px solid #c0c0c0; - border-bottom: none; - font: - 12px Helvetica, - Arial, - sans-serif; - flex: 0 1 125px; - min-height: 20px; - max-height: 20px; - min-width: 35px; - margin-left: -1px; - line-height: 20px; -} - -.lm-TabBar-tabLabel .lm-TabBar-tabInput { - padding: 0px; - border: 0px; - font: - 12px Helvetica, - Arial, - sans-serif; -} - -.lm-TabBar-tab.lm-mod-current { - background: white; -} - -.lm-TabBar-tab:hover:not(.lm-mod-current) { - background: #f0f0f0; -} - -.lm-TabBar-tab:first-child { - margin-left: 0; -} - -.lm-TabBar-tab.lm-mod-current { - min-height: 23px; - max-height: 23px; - transform: translateY(1px); -} - -.lm-TabBar-tabIcon, -.lm-TabBar-tabLabel, -.lm-TabBar-tabCloseIcon { - display: inline-block; -} - -.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon { - margin-left: 4px; -} - -.lm-TabBar .lm-TabBar-addButton { - padding: 0px 6px; - border-bottom: 1px solid #c0c0c0; -} - -.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before { - content: '\\f00d'; - font-family: FontAwesome; -} - -.lm-TabBar .lm-TabBar-addButton:before { - content: '\\f067'; - font-family: FontAwesome; -} - -.lm-TabBar-tab.lm-mod-drag-image { - min-height: 23px; - max-height: 23px; - min-width: 125px; - border: none; - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/tabbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX;;;cAGY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;AAEA;;;EAGE,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;AAC5C","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.lm-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab {\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n flex: 0 1 125px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n padding: 0px;\n border: 0px;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n background: white;\n}\n\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\n background: #f0f0f0;\n}\n\n.lm-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabLabel,\n.lm-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n.lm-TabBar .lm-TabBar-addButton {\n padding: 0px 6px;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\n content: '\\f00d';\n font-family: FontAwesome;\n}\n\n.lm-TabBar .lm-TabBar-addButton:before {\n content: '\\f067';\n font-family: FontAwesome;\n}\n\n.lm-TabBar-tab.lm-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css": -/*!*************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css ***! - \*************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-cursor-backdrop { - top: 0px; - left: 0px; - position: fixed; - width: 200px; - height: 200px; - margin-top: -100px; - margin-left: -100px; - will-change: transform; - z-index: 100; - scrollbar-width: none; - -ms-overflow-style: none; - overflow: scroll; -} - -.lm-cursor-backdrop::after { - content: ''; - height: 1200px; - width: 1200px; - display: block; -} - -.lm-cursor-backdrop::-webkit-scrollbar { - display: none; -} - -.lm-mod-drag-image { - top: 0px; - left: 0px; - will-change: transform; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/dragdrop/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,QAAQ;EACR,SAAS;EACT,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,wBAAwB;EACxB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,SAAS;EACT,sBAAsB;AACxB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-cursor-backdrop {\n top: 0px;\n left: 0px;\n position: fixed;\n width: 200px;\n height: 200px;\n margin-top: -100px;\n margin-left: -100px;\n will-change: transform;\n z-index: 100;\n scrollbar-width: none;\n -ms-overflow-style: none;\n overflow: scroll;\n}\n\n.lm-cursor-backdrop::after {\n content: '';\n height: 1200px;\n width: 1200px;\n display: block;\n}\n\n.lm-cursor-backdrop::-webkit-scrollbar {\n display: none;\n}\n\n.lm-mod-drag-image {\n top: 0px;\n left: 0px;\n will-change: transform;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css": -/*!*********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css ***! - \*********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title { - /* Title is rotated for horizontal accordion panel using CSS */ - display: block; - transform-origin: top left; - transform: rotate(-90deg) translate(-100%); -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/accordionpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\n /* Title is rotated for horizontal accordion panel using CSS */\n display: block;\n transform-origin: top left;\n transform: rotate(-90deg) translate(-100%);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css": -/*!*********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css ***! - \*********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-CommandPalette { - display: flex; - flex-direction: column; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.lm-CommandPalette-search { - flex: 0 0 auto; -} - -.lm-CommandPalette-content { - flex: 1 1 auto; - margin: 0; - padding: 0; - min-height: 0; - overflow: auto; - list-style-type: none; -} - -.lm-CommandPalette-header { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.lm-CommandPalette-item { - display: flex; - flex-direction: row; -} - -.lm-CommandPalette-itemIcon { - flex: 0 0 auto; -} - -.lm-CommandPalette-itemContent { - flex: 1 1 auto; - overflow: hidden; -} - -.lm-CommandPalette-itemShortcut { - flex: 0 0 auto; -} - -.lm-CommandPalette-itemLabel { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -.lm-close-icon { - border: 1px solid transparent; - background-color: transparent; - position: absolute; - z-index: 1; - right: 3%; - top: 0; - bottom: 0; - margin: auto; - padding: 7px 0; - display: none; - vertical-align: middle; - outline: 0; - cursor: pointer; -} -.lm-close-icon:after { - content: 'X'; - display: block; - width: 15px; - height: 15px; - text-align: center; - color: #000; - font-weight: normal; - font-size: 12px; - cursor: pointer; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/commandpalette.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;EAC7B,6BAA6B;EAC7B,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACZ,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,eAAe;AACjB;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,eAAe;AACjB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n display: flex;\n flex-direction: column;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-CommandPalette-search {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-content {\n flex: 1 1 auto;\n margin: 0;\n padding: 0;\n min-height: 0;\n overflow: auto;\n list-style-type: none;\n}\n\n.lm-CommandPalette-header {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-CommandPalette-item {\n display: flex;\n flex-direction: row;\n}\n\n.lm-CommandPalette-itemIcon {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemContent {\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.lm-CommandPalette-itemShortcut {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemLabel {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-close-icon {\n border: 1px solid transparent;\n background-color: transparent;\n position: absolute;\n z-index: 1;\n right: 3%;\n top: 0;\n bottom: 0;\n margin: auto;\n padding: 7px 0;\n display: none;\n vertical-align: middle;\n outline: 0;\n cursor: pointer;\n}\n.lm-close-icon:after {\n content: 'X';\n display: block;\n width: 15px;\n height: 15px;\n text-align: center;\n color: #000;\n font-weight: normal;\n font-size: 12px;\n cursor: pointer;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css": -/*!****************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css ***! - \****************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-DockPanel { - z-index: 0; -} - -.lm-DockPanel-widget { - z-index: 0; -} - -.lm-DockPanel-tabBar { - z-index: 1; -} - -.lm-DockPanel-handle { - z-index: 2; -} - -.lm-DockPanel-handle.lm-mod-hidden { - display: none !important; -} - -.lm-DockPanel-handle:after { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - content: ''; -} - -.lm-DockPanel-handle[data-orientation='horizontal'] { - cursor: ew-resize; -} - -.lm-DockPanel-handle[data-orientation='vertical'] { - cursor: ns-resize; -} - -.lm-DockPanel-handle[data-orientation='horizontal']:after { - left: 50%; - min-width: 8px; - transform: translateX(-50%); -} - -.lm-DockPanel-handle[data-orientation='vertical']:after { - top: 50%; - min-height: 8px; - transform: translateY(-50%); -} - -.lm-DockPanel-overlay { - z-index: 3; - box-sizing: border-box; - pointer-events: none; -} - -.lm-DockPanel-overlay.lm-mod-hidden { - display: none !important; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/dockpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B;;AAEA;EACE,UAAU;EACV,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel {\n z-index: 0;\n}\n\n.lm-DockPanel-widget {\n z-index: 0;\n}\n\n.lm-DockPanel-tabBar {\n z-index: 1;\n}\n\n.lm-DockPanel-handle {\n z-index: 2;\n}\n\n.lm-DockPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-DockPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal'] {\n cursor: ew-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='vertical'] {\n cursor: ns-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-DockPanel-handle[data-orientation='vertical']:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n\n.lm-DockPanel-overlay {\n z-index: 3;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n.lm-DockPanel-overlay.lm-mod-hidden {\n display: none !important;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css": -/*!************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css ***! - \************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_widget_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./widget.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_splitpanel_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./splitpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabpanel_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css"); -// Imports - - - - - - - - - - - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_widget_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_3__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_4__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_5__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_6__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_7__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_8__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_splitpanel_css__WEBPACK_IMPORTED_MODULE_9__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_10__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabpanel_css__WEBPACK_IMPORTED_MODULE_11__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n@import './widget.css';\n@import './accordionpanel.css';\n@import './commandpalette.css';\n@import './dockpanel.css';\n@import './menu.css';\n@import './menubar.css';\n@import './scrollbar.css';\n@import './splitpanel.css';\n@import './tabbar.css';\n@import './tabpanel.css';\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css": -/*!***********************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css ***! - \***********************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-Menu { - z-index: 10000; - position: absolute; - white-space: nowrap; - overflow-x: hidden; - overflow-y: auto; - outline: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.lm-Menu-content { - margin: 0; - padding: 0; - display: table; - list-style-type: none; -} - -.lm-Menu-item { - display: table-row; -} - -.lm-Menu-item.lm-mod-hidden, -.lm-Menu-item.lm-mod-collapsed { - display: none !important; -} - -.lm-Menu-itemIcon, -.lm-Menu-itemSubmenuIcon { - display: table-cell; - text-align: center; -} - -.lm-Menu-itemLabel { - display: table-cell; - text-align: left; -} - -.lm-Menu-itemShortcut { - display: table-cell; - text-align: right; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/menu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;;EAEE,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n z-index: 10000;\n position: absolute;\n white-space: nowrap;\n overflow-x: hidden;\n overflow-y: auto;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-Menu-content {\n margin: 0;\n padding: 0;\n display: table;\n list-style-type: none;\n}\n\n.lm-Menu-item {\n display: table-row;\n}\n\n.lm-Menu-item.lm-mod-hidden,\n.lm-Menu-item.lm-mod-collapsed {\n display: none !important;\n}\n\n.lm-Menu-itemIcon,\n.lm-Menu-itemSubmenuIcon {\n display: table-cell;\n text-align: center;\n}\n\n.lm-Menu-itemLabel {\n display: table-cell;\n text-align: left;\n}\n\n.lm-Menu-itemShortcut {\n display: table-cell;\n text-align: right;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css": -/*!**************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css ***! - \**************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-MenuBar { - outline: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.lm-MenuBar-content { - margin: 0; - padding: 0; - display: flex; - flex-direction: row; - list-style-type: none; -} - -.lm-MenuBar-item { - box-sizing: border-box; -} - -.lm-MenuBar-itemIcon, -.lm-MenuBar-itemLabel { - display: inline-block; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/menubar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,qBAAqB;AACvB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-MenuBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n list-style-type: none;\n}\n\n.lm-MenuBar-item {\n box-sizing: border-box;\n}\n\n.lm-MenuBar-itemIcon,\n.lm-MenuBar-itemLabel {\n display: inline-block;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css": -/*!****************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css ***! - \****************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-ScrollBar { - display: flex; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.lm-ScrollBar[data-orientation='horizontal'] { - flex-direction: row; -} - -.lm-ScrollBar[data-orientation='vertical'] { - flex-direction: column; -} - -.lm-ScrollBar-button { - box-sizing: border-box; - flex: 0 0 auto; -} - -.lm-ScrollBar-track { - box-sizing: border-box; - position: relative; - overflow: hidden; - flex: 1 1 auto; -} - -.lm-ScrollBar-thumb { - box-sizing: border-box; - position: absolute; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/scrollbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;AACpB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n flex-direction: row;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n flex-direction: column;\n}\n\n.lm-ScrollBar-button {\n box-sizing: border-box;\n flex: 0 0 auto;\n}\n\n.lm-ScrollBar-track {\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.lm-ScrollBar-thumb {\n box-sizing: border-box;\n position: absolute;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css": -/*!*****************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css ***! - \*****************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-SplitPanel-child { - z-index: 0; -} - -.lm-SplitPanel-handle { - z-index: 1; -} - -.lm-SplitPanel-handle.lm-mod-hidden { - display: none !important; -} - -.lm-SplitPanel-handle:after { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - content: ''; -} - -.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle { - cursor: ew-resize; -} - -.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle { - cursor: ns-resize; -} - -.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after { - left: 50%; - min-width: 8px; - transform: translateX(-50%); -} - -.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after { - top: 50%; - min-height: 8px; - transform: translateY(-50%); -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/splitpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-SplitPanel-child {\n z-index: 0;\n}\n\n.lm-SplitPanel-handle {\n z-index: 1;\n}\n\n.lm-SplitPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-SplitPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\n cursor: ew-resize;\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\n cursor: ns-resize;\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css": -/*!*************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css ***! - \*************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-TabBar { - display: flex; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.lm-TabBar[data-orientation='horizontal'] { - flex-direction: row; - align-items: flex-end; -} - -.lm-TabBar[data-orientation='vertical'] { - flex-direction: column; - align-items: flex-end; -} - -.lm-TabBar-content { - margin: 0; - padding: 0; - display: flex; - flex: 1 1 auto; - list-style-type: none; -} - -.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content { - flex-direction: row; -} - -.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content { - flex-direction: column; -} - -.lm-TabBar-tab { - display: flex; - flex-direction: row; - box-sizing: border-box; - overflow: hidden; - touch-action: none; /* Disable native Drag/Drop */ -} - -.lm-TabBar-tabIcon, -.lm-TabBar-tabCloseIcon { - flex: 0 0 auto; -} - -.lm-TabBar-tabLabel { - flex: 1 1 auto; - overflow: hidden; - white-space: nowrap; -} - -.lm-TabBar-tabInput { - user-select: all; - width: 100%; - box-sizing: border-box; -} - -.lm-TabBar-tab.lm-mod-hidden { - display: none !important; -} - -.lm-TabBar-addButton.lm-mod-hidden { - display: none !important; -} - -.lm-TabBar.lm-mod-dragging .lm-TabBar-tab { - position: relative; -} - -.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab { - left: 0; - transition: left 150ms ease; -} - -.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab { - top: 0; - transition: top 150ms ease; -} - -.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging { - transition: none; -} - -.lm-TabBar-tabLabel .lm-TabBar-tabInput { - user-select: all; - width: 100%; - box-sizing: border-box; - background: inherit; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/tabbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB,EAAE,6BAA6B;AACnD;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,OAAO;EACP,2BAA2B;AAC7B;;AAEA;EACE,MAAM;EACN,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;EACtB,mBAAmB;AACrB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] {\n flex-direction: row;\n align-items: flex-end;\n}\n\n.lm-TabBar[data-orientation='vertical'] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n.lm-TabBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex: 1 1 auto;\n list-style-type: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\n flex-direction: row;\n}\n\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\n flex-direction: column;\n}\n\n.lm-TabBar-tab {\n display: flex;\n flex-direction: row;\n box-sizing: border-box;\n overflow: hidden;\n touch-action: none; /* Disable native Drag/Drop */\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabCloseIcon {\n flex: 0 0 auto;\n}\n\n.lm-TabBar-tabLabel {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n}\n\n.lm-TabBar-tab.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar-addButton.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\n position: relative;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\n left: 0;\n transition: left 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\n top: 0;\n transition: top 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\n transition: none;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n background: inherit;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css": -/*!***************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css ***! - \***************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-TabPanel-tabBar { - z-index: 1; -} - -.lm-TabPanel-stackedPanel { - z-index: 0; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/tabpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabPanel-tabBar {\n z-index: 1;\n}\n\n.lm-TabPanel-stackedPanel {\n z-index: 0;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css": -/*!*************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css ***! - \*************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-Widget { - box-sizing: border-box; - position: relative; -} - -.lm-Widget.lm-mod-hidden { - display: none !important; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/widget.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,wBAAwB;AAC1B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Widget {\n box-sizing: border-box;\n position: relative;\n}\n\n.lm-Widget.lm-mod-hidden {\n display: none !important;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css": -/*!************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../history/style/index.css ***! - \************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `.history-toolbar { - float: left; - overflow: none; - z-index: 3; - position: absolute; -} - -.history-toolbar .buttons { - height: 30px; - display: inline-block; - margin-left: 8px; -} - -.history-toolbar .buttons > input { - height: 30px; -} - -.history-toolbar .buttons > input[type=checkbox] { - display: none -} - -.history-toolbar .buttons > label, .history-toolbar > div > a { - margin: 8px 8px 8px 0; -} - -.history-toolbar .buttons > input[type=checkbox] + label { - display:inline-block; - color: black; - cursor: pointer; -} - -.history-toolbar .buttons > input[type=checkbox]:checked + label { - color: blue; -} - -.history-toolbar .buttons > a.toollink, -.history-toolbar .buttons > a.toollink:link, -.history-toolbar .buttons > a.toollink:visited { - color: black; -} - -.history-toolbar .buttons > a.toollink:active { - color: blue; -} -`, "",{"version":3,"sources":["webpack://./../history/style/index.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,cAAc;IACd,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;IAGI,YAAY;AAChB;;AAEA;IACI,WAAW;AACf","sourcesContent":[".history-toolbar {\n float: left;\n overflow: none;\n z-index: 3;\n position: absolute;\n}\n\n.history-toolbar .buttons {\n height: 30px;\n display: inline-block;\n margin-left: 8px;\n}\n\n.history-toolbar .buttons > input {\n height: 30px;\n}\n\n.history-toolbar .buttons > input[type=checkbox] {\n display: none\n}\n\n.history-toolbar .buttons > label, .history-toolbar > div > a {\n margin: 8px 8px 8px 0;\n}\n\n.history-toolbar .buttons > input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.history-toolbar .buttons > a.toollink,\n.history-toolbar .buttons > a.toollink:link,\n.history-toolbar .buttons > a.toollink:visited {\n color: black;\n}\n\n.history-toolbar .buttons > a.toollink:active {\n color: blue;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css": -/*!***********************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css ***! - \***********************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); -// Imports - - - -var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_4___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_5___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_6___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_7___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); -var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); -var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); -var ___CSS_LOADER_URL_REPLACEMENT_3___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); -var ___CSS_LOADER_URL_REPLACEMENT_4___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_4___); -var ___CSS_LOADER_URL_REPLACEMENT_5___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_5___); -var ___CSS_LOADER_URL_REPLACEMENT_6___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_6___); -var ___CSS_LOADER_URL_REPLACEMENT_7___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_7___); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/*! - * Bootstrap v4.0.0 (https://getbootstrap.com) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\\2014 \\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___})}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_2___})}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(${___CSS_LOADER_URL_REPLACEMENT_3___}) no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_4___})}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_5___})}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_6___})}.carousel-control-next-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_7___})}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}} -/*# sourceMappingURL=bootstrap.min.css.map */`, "",{"version":3,"sources":["webpack://./style/bootstrap.min.css"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.0.0 (https://getbootstrap.com)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\2014 \\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\"\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\n/*# sourceMappingURL=bootstrap.min.css.map */"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!./style/history.css": -/*!*****************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/history.css ***! - \*****************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css"); -// Imports - - - -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `.history-content, -.history-content .sub-content, -.history-content .sub-content > div { - overflow: hidden !important; -} - -.history-content .filter .internal { - margin: 4px 8px; -} - -.history-content .filter { -} - -.history-content .filter input, .history-content .filter label { - vertical-align: top; - display: inline-block; -} - - -.history-content .graph-attr { - display: inline-block; - margin-right: 5px; -} - -.history-content .graph-attr input, .history-content .graph-attr label { - vertical-align: middle; - display: inline-block; -} - -.history-content .select-style { - width: 170px; - margin-right: 5px; -} - -`, "",{"version":3,"sources":["webpack://./style/history.css"],"names":[],"mappings":"AAEA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,eAAe;AACnB;;AAEA;AACA;;AAEA;IACI,mBAAmB;IACnB,qBAAqB;AACzB;;;AAGA;CACC,qBAAqB;CACrB,iBAAiB;AAClB;;AAEA;IACI,sBAAsB;IACtB,qBAAqB;AACzB;;AAEA;IACI,YAAY;IACZ,iBAAiB;AACrB","sourcesContent":["@import '~@noworkflow/history/style/index.css';\n\n.history-content,\n.history-content .sub-content,\n.history-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.history-content .filter .internal {\n margin: 4px 8px;\n}\n\n.history-content .filter {\n}\n\n.history-content .filter input, .history-content .filter label {\n vertical-align: top;\n display: inline-block;\n}\n\n\n.history-content .graph-attr {\n\tdisplay: inline-block;\n\tmargin-right: 5px;\n}\n\n.history-content .graph-attr input, .history-content .graph-attr label {\n vertical-align: middle;\n display: inline-block;\n}\n\n.history-content .select-style {\n width: 170px;\n margin-right: 5px;\n}\n\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!./style/index.css": -/*!***************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/index.css ***! - \***************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_utils_style_shared_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../utils/style/shared.css */ "./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_trial_style_index_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../trial/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../trial/style/index.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./panel.css */ "./node_modules/css-loader/dist/cjs.js!./style/panel.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./history.css */ "./node_modules/css-loader/dist/cjs.js!./style/history.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_trial_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./trial.css */ "./node_modules/css-loader/dist/cjs.js!./style/trial.css"); -// Imports - - - - - - - - -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_utils_style_shared_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_3__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_trial_style_index_css__WEBPACK_IMPORTED_MODULE_4__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_5__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_css__WEBPACK_IMPORTED_MODULE_6__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_trial_css__WEBPACK_IMPORTED_MODULE_7__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `body { - font-family: "Verdana", "Geneva", "sans-serif"; -} - -.loading { - font-size: 40px; -} - -/* Link Button */ +}); -a.link-button { - text-decoration: none; - display:inline-block; - padding: 4px 0; - /*padding: 4px 12px;*/ - margin-bottom: 0; - font-size: 14px; - width: 100px; - line-height: 15px; - color: #333; - text-align: center; - text-shadow: 0 1px 1px rgba(255,255,255,0.75); - vertical-align: middle; - cursor: pointer; - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top,#fff,#e6e6e6); - background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6)); - background-image: -webkit-linear-gradient(top,#fff,#e6e6e6); - background-image: -o-linear-gradient(top,#fff,#e6e6e6); - background-image: linear-gradient(to bottom,#fff,#e6e6e6); - background-repeat: repeat-x; - border: 1px solid #ccc; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25); - border-bottom-color: #b3b3b3; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); -} +ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module){"use strict"; +var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +var MouseEvent = /** @class */ (function () { + function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY; + this.domEvent = domEvent; + this.editor = editor; + this.x = this.clientX = domEvent.clientX; + this.y = this.clientY = domEvent.clientY; + this.$pos = null; + this.$inSelection = null; + this.propagationStopped = false; + this.defaultPrevented = false; + } + MouseEvent.prototype.stopPropagation = function () { + event.stopPropagation(this.domEvent); + this.propagationStopped = true; + }; + MouseEvent.prototype.preventDefault = function () { + event.preventDefault(this.domEvent); + this.defaultPrevented = true; + }; + MouseEvent.prototype.stop = function () { + this.stopPropagation(); + this.preventDefault(); + }; + MouseEvent.prototype.getDocumentPosition = function () { + if (this.$pos) + return this.$pos; + this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); + return this.$pos; + }; + MouseEvent.prototype.getGutterRow = function () { + var documentRow = this.getDocumentPosition().row; + var screenRow = this.editor.session.documentToScreenRow(documentRow, 0); + var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0); + return screenRow - screenTopRow; + }; + MouseEvent.prototype.inSelection = function () { + if (this.$inSelection !== null) + return this.$inSelection; + var editor = this.editor; + var selectionRange = editor.getSelectionRange(); + if (selectionRange.isEmpty()) + this.$inSelection = false; + else { + var pos = this.getDocumentPosition(); + this.$inSelection = selectionRange.contains(pos.row, pos.column); + } + return this.$inSelection; + }; + MouseEvent.prototype.getButton = function () { + return event.getButton(this.domEvent); + }; + MouseEvent.prototype.getShiftKey = function () { + return this.domEvent.shiftKey; + }; + MouseEvent.prototype.getAccelKey = function () { + return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey; + }; + return MouseEvent; +}()); +exports.MouseEvent = MouseEvent; -a.link-button:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); - background-color:#e0e0e0; -} +}); -.hide-toolbar { - overflow: hidden; - max-height: 0; - padding-top: 0; - padding-bottom: 0; - margin-top: 0; - margin-bottom: 0; - -moz-transition-duration: 0.3s; - -webkit-transition-duration: 0.3s; - -o-transition-duration: 0.3s; - transition-duration: 0.3s; - -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); - -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); - -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); - transition-timing-function: cubic-bezier(0, 1, 0.5, 1); +ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +var AUTOSCROLL_DELAY = 200; +var SCROLL_CURSOR_DELAY = 200; +var SCROLL_CURSOR_HYSTERESIS = 5; +function DragdropHandler(mouseHandler) { + var editor = mouseHandler.editor; + var dragImage = dom.createElement("div"); + dragImage.style.cssText = "top:-100px;position:absolute;z-index:2147483647;opacity:0.5"; + dragImage.textContent = "\xa0"; + var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; + exports.forEach(function (x) { + mouseHandler[x] = this[x]; + }, this); + editor.on("mousedown", this.onMouseDown.bind(mouseHandler)); + var mouseTarget = editor.container; + var dragSelectionMarker, x, y; + var timerId, range; + var dragCursor, counter = 0; + var dragOperation; + var isInternal; + var autoScrollStartTime; + var cursorMovedTime; + var cursorPointOnCaretMoved; + this.onDragStart = function (e) { + if (this.cancelDrag || !mouseTarget.draggable) { + var self = this; + setTimeout(function () { + self.startSelect(); + self.captureMouse(e); + }, 0); + return e.preventDefault(); + } + range = editor.getSelectionRange(); + var dataTransfer = e.dataTransfer; + dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; + editor.container.appendChild(dragImage); + dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0); + setTimeout(function () { + editor.container.removeChild(dragImage); + }); + dataTransfer.clearData(); + dataTransfer.setData("Text", editor.session.getTextRange()); + isInternal = true; + this.setState("drag"); + }; + this.onDragEnd = function (e) { + mouseTarget.draggable = false; + isInternal = false; + this.setState(null); + if (!editor.getReadOnly()) { + var dropEffect = e.dataTransfer.dropEffect; + if (!dragOperation && dropEffect == "move") + editor.session.remove(editor.getSelectionRange()); + editor.$resetCursorStyle(); + } + this.editor.unsetStyle("ace_dragging"); + this.editor.renderer.setCursorStyle(""); + }; + this.onDragEnter = function (e) { + if (editor.getReadOnly() || !canAccept(e.dataTransfer)) + return; + x = e.clientX; + y = e.clientY; + if (!dragSelectionMarker) + addDragMarker(); + counter++; + e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); + return event.preventDefault(e); + }; + this.onDragOver = function (e) { + if (editor.getReadOnly() || !canAccept(e.dataTransfer)) + return; + x = e.clientX; + y = e.clientY; + if (!dragSelectionMarker) { + addDragMarker(); + counter++; + } + if (onMouseMoveTimer !== null) + onMouseMoveTimer = null; + e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); + return event.preventDefault(e); + }; + this.onDragLeave = function (e) { + counter--; + if (counter <= 0 && dragSelectionMarker) { + clearDragMarker(); + dragOperation = null; + return event.preventDefault(e); + } + }; + this.onDrop = function (e) { + if (!dragCursor) + return; + var dataTransfer = e.dataTransfer; + if (isInternal) { + switch (dragOperation) { + case "move": + if (range.contains(dragCursor.row, dragCursor.column)) { + range = { + start: dragCursor, + end: dragCursor + }; + } + else { + range = editor.moveText(range, dragCursor); + } + break; + case "copy": + range = editor.moveText(range, dragCursor, true); + break; + } + } + else { + var dropData = dataTransfer.getData('Text'); + range = { + start: dragCursor, + end: editor.session.insert(dragCursor, dropData) + }; + editor.focus(); + dragOperation = null; + } + clearDragMarker(); + return event.preventDefault(e); + }; + event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler), editor); + event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler), editor); + event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler), editor); + event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler), editor); + event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler), editor); + event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler), editor); + function scrollCursorIntoView(cursor, prevCursor) { + var now = Date.now(); + var vMovement = !prevCursor || cursor.row != prevCursor.row; + var hMovement = !prevCursor || cursor.column != prevCursor.column; + if (!cursorMovedTime || vMovement || hMovement) { + editor.moveCursorToPosition(cursor); + cursorMovedTime = now; + cursorPointOnCaretMoved = { x: x, y: y }; + } + else { + var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); + if (distance > SCROLL_CURSOR_HYSTERESIS) { + cursorMovedTime = null; + } + else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { + editor.renderer.scrollCursorIntoView(); + cursorMovedTime = null; + } + } + } + function autoScroll(cursor, prevCursor) { + var now = Date.now(); + var lineHeight = editor.renderer.layerConfig.lineHeight; + var characterWidth = editor.renderer.layerConfig.characterWidth; + var editorRect = editor.renderer.scroller.getBoundingClientRect(); + var offsets = { + x: { + left: x - editorRect.left, + right: editorRect.right - x + }, + y: { + top: y - editorRect.top, + bottom: editorRect.bottom - y + } + }; + var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); + var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); + var scrollCursor = { row: cursor.row, column: cursor.column }; + if (nearestXOffset / characterWidth <= 2) { + scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); + } + if (nearestYOffset / lineHeight <= 1) { + scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); + } + var vScroll = cursor.row != scrollCursor.row; + var hScroll = cursor.column != scrollCursor.column; + var vMovement = !prevCursor || cursor.row != prevCursor.row; + if (vScroll || (hScroll && !vMovement)) { + if (!autoScrollStartTime) + autoScrollStartTime = now; + else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) + editor.renderer.scrollCursorIntoView(scrollCursor); + } + else { + autoScrollStartTime = null; + } + } + function onDragInterval() { + var prevCursor = dragCursor; + dragCursor = editor.renderer.screenToTextCoordinates(x, y); + scrollCursorIntoView(dragCursor, prevCursor); + autoScroll(dragCursor, prevCursor); + } + function addDragMarker() { + range = editor.selection.toOrientedRange(); + dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); + editor.clearSelection(); + if (editor.isFocused()) + editor.renderer.$cursorLayer.setBlinking(false); + clearInterval(timerId); + onDragInterval(); + timerId = setInterval(onDragInterval, 20); + counter = 0; + event.addListener(document, "mousemove", onMouseMove); + } + function clearDragMarker() { + clearInterval(timerId); + editor.session.removeMarker(dragSelectionMarker); + dragSelectionMarker = null; + editor.selection.fromOrientedRange(range); + if (editor.isFocused() && !isInternal) + editor.$resetCursorStyle(); + range = null; + dragCursor = null; + counter = 0; + autoScrollStartTime = null; + cursorMovedTime = null; + event.removeListener(document, "mousemove", onMouseMove); + } + var onMouseMoveTimer = null; + function onMouseMove() { + if (onMouseMoveTimer == null) { + onMouseMoveTimer = setTimeout(function () { + if (onMouseMoveTimer != null && dragSelectionMarker) + clearDragMarker(); + }, 20); + } + } + function canAccept(dataTransfer) { + var types = dataTransfer.types; + return !types || Array.prototype.some.call(types, function (type) { + return type == 'text/plain' || type == 'Text'; + }); + } + function getDropEffect(e) { + var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; + var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; + var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; + var effectAllowed = "uninitialized"; + try { + effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); + } + catch (e) { } + var dropEffect = "none"; + if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) + dropEffect = "copy"; + else if (moveAllowed.indexOf(effectAllowed) >= 0) + dropEffect = "move"; + else if (copyAllowed.indexOf(effectAllowed) >= 0) + dropEffect = "copy"; + return dropEffect; + } } - -.show-toolbar { - -moz-transition-duration: 0.3s; - -webkit-transition-duration: 0.3s; - -o-transition-duration: 0.3s; - transition-duration: 0.3s; - -moz-transition-timing-function: ease-in; - -webkit-transition-timing-function: ease-in; - -o-transition-timing-function: ease-in; - transition-timing-function: ease-in; - /*max-height: 1000px; - overflow: hidden;*/ +(function () { + this.dragWait = function () { + var interval = Date.now() - this.mousedownEvent.time; + if (interval > this.editor.getDragDelay()) + this.startDrag(); + }; + this.dragWaitEnd = function () { + var target = this.editor.container; + target.draggable = false; + this.startSelect(this.mousedownEvent.getDocumentPosition()); + this.selectEnd(); + }; + this.dragReadyEnd = function (e) { + this.editor.$resetCursorStyle(); + this.editor.unsetStyle("ace_dragging"); + this.editor.renderer.setCursorStyle(""); + this.dragWaitEnd(); + }; + this.startDrag = function () { + this.cancelDrag = false; + var editor = this.editor; + var target = editor.container; + target.draggable = true; + editor.renderer.$cursorLayer.setBlinking(false); + editor.setStyle("ace_dragging"); + var cursorStyle = useragent.isWin ? "default" : "move"; + editor.renderer.setCursorStyle(cursorStyle); + this.setState("dragReady"); + }; + this.onMouseDrag = function (e) { + var target = this.editor.container; + if (useragent.isIE && this.state == "dragReady") { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + if (distance > 3) + target.dragDrop(); + } + if (this.state === "dragWait") { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + if (distance > 0) { + target.draggable = false; + this.startSelect(this.mousedownEvent.getDocumentPosition()); + } + } + }; + this.onMouseDown = function (e) { + if (!this.$dragEnabled) + return; + this.mousedownEvent = e; + var editor = this.editor; + var inSelection = e.inSelection(); + var button = e.getButton(); + var clickCount = e.domEvent.detail || 1; + if (clickCount === 1 && button === 0 && inSelection) { + if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) + return; + this.mousedownEvent.time = Date.now(); + var eventTarget = e.domEvent.target || e.domEvent.srcElement; + if ("unselectable" in eventTarget) + eventTarget.unselectable = "on"; + if (editor.getDragDelay()) { + if (useragent.isWebKit) { + this.cancelDrag = true; + var mouseTarget = editor.container; + mouseTarget.draggable = true; + } + this.setState("dragWait"); + } + else { + this.startDrag(); + } + this.captureMouse(e, this.onMouseDrag.bind(this)); + e.defaultPrevented = true; + } + }; +}).call(DragdropHandler.prototype); +function calcDistance(ax, ay, bx, by) { + return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } +exports.DragdropHandler = DragdropHandler; -.visible { - border-bottom: 1px solid black; -} +}); -.info-filter input, .info-filter select { - display: block; - width: 250px; - margin: 7px 0; -}`, "",{"version":3,"sources":["webpack://./style/index.css"],"names":[],"mappings":"AAQA;EACE,8CAA8C;AAChD;;AAEA;EACE,eAAe;AACjB;;AAEA,gBAAgB;;AAEhB;EACE,qBAAqB;EACrB,oBAAoB;EACpB,cAAc;CACf,qBAAqB;EACpB,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,kBAAkB;EAClB,6CAA6C;EAC7C,sBAAsB;EACtB,eAAe;EACf,yBAAyB;EACzB,wDAAwD;EACxD,4EAA4E;EAC5E,2DAA2D;EAC3D,sDAAsD;EACtD,yDAAyD;EACzD,2BAA2B;EAC3B,sBAAsB;EACtB,qCAAqC;EACrC,8DAA8D;EAC9D,4BAA4B;EAC5B,oHAAoH;EACpH,iEAAiE;EACjE,kFAAkF;EAClF,+EAA+E;EAC/E,0EAA0E;AAC5E;;AAEA;EACE,sBAAsB;EACtB,UAAU;EACV,+EAA+E;EAC/E,4EAA4E;EAC5E,uEAAuE;EACvE,wBAAwB;AAC1B;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,2DAA2D;IAC3D,8DAA8D;IAC9D,yDAAyD;IACzD,sDAAsD;AAC1D;;AAEA;IACI,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,wCAAwC;IACxC,2CAA2C;IAC3C,sCAAsC;IACtC,mCAAmC;IACnC;sBACkB;AACtB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;AACf","sourcesContent":["@import '~@noworkflow/utils/style/shared.css';\n@import '~@noworkflow/history/style/index.css';\n@import '~@noworkflow/trial/style/index.css';\n@import './panel.css';\n@import './history.css';\n@import './trial.css';\n\n\nbody {\n font-family: \"Verdana\", \"Geneva\", \"sans-serif\";\n}\n\n.loading {\n font-size: 40px;\n}\n\n/* Link Button */\n\na.link-button {\n text-decoration: none;\n display:inline-block;\n padding: 4px 0;\n /*padding: 4px 12px;*/\n margin-bottom: 0;\n font-size: 14px;\n width: 100px;\n line-height: 15px;\n color: #333;\n text-align: center;\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\n vertical-align: middle;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\n background-repeat: repeat-x;\n border: 1px solid #ccc;\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\n border-bottom-color: #b3b3b3;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n}\n\na.link-button:active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n background-color:#e0e0e0;\n}\n\n.hide-toolbar {\n overflow: hidden;\n max-height: 0;\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 0;\n margin-bottom: 0;\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.show-toolbar {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n /*max-height: 1000px;\n overflow: hidden;*/\n}\n\n.visible {\n border-bottom: 1px solid black;\n}\n\n.info-filter input, .info-filter select {\n display: block;\n width: 250px;\n margin: 7px 0;\n}"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); +ace.define("ace/mouse/touch_handler",["require","exports","module","ace/mouse/mouse_event","ace/lib/event","ace/lib/dom"], function(require, exports, module){"use strict"; +var MouseEvent = require("./mouse_event").MouseEvent; +var event = require("../lib/event"); +var dom = require("../lib/dom"); +exports.addTouchListeners = function (el, editor) { + var mode = "scroll"; + var startX; + var startY; + var touchStartT; + var lastT; + var longTouchTimer; + var animationTimer; + var animationSteps = 0; + var pos; + var clickCount = 0; + var vX = 0; + var vY = 0; + var pressed; + var contextMenu; + function createContextMenu() { + var clipboard = window.navigator && window.navigator.clipboard; + var isOpen = false; + var updateMenu = function () { + var selected = editor.getCopyText(); + var hasUndo = editor.session.getUndoManager().hasUndo(); + contextMenu.replaceChild(dom.buildDom(isOpen ? ["span", + !selected && canExecuteCommand("selectall") && ["span", { class: "ace_mobile-button", action: "selectall" }, "Select All"], + selected && canExecuteCommand("copy") && ["span", { class: "ace_mobile-button", action: "copy" }, "Copy"], + selected && canExecuteCommand("cut") && ["span", { class: "ace_mobile-button", action: "cut" }, "Cut"], + clipboard && canExecuteCommand("paste") && ["span", { class: "ace_mobile-button", action: "paste" }, "Paste"], + hasUndo && canExecuteCommand("undo") && ["span", { class: "ace_mobile-button", action: "undo" }, "Undo"], + canExecuteCommand("find") && ["span", { class: "ace_mobile-button", action: "find" }, "Find"], + canExecuteCommand("openCommandPalette") && ["span", { class: "ace_mobile-button", action: "openCommandPalette" }, "Palette"] + ] : ["span"]), contextMenu.firstChild); + }; + var canExecuteCommand = function (/** @type {string} */ cmd) { + return editor.commands.canExecute(cmd, editor); + }; + var handleClick = function (e) { + var action = e.target.getAttribute("action"); + if (action == "more" || !isOpen) { + isOpen = !isOpen; + return updateMenu(); + } + if (action == "paste") { + clipboard.readText().then(function (text) { + editor.execCommand(action, text); + }); + } + else if (action) { + if (action == "cut" || action == "copy") { + if (clipboard) + clipboard.writeText(editor.getCopyText()); + else + document.execCommand("copy"); + } + editor.execCommand(action); + } + contextMenu.firstChild.style.display = "none"; + isOpen = false; + if (action != "openCommandPalette") + editor.focus(); + }; + contextMenu = dom.buildDom(["div", + { + class: "ace_mobile-menu", + ontouchstart: function (e) { + mode = "menu"; + e.stopPropagation(); + e.preventDefault(); + editor.textInput.focus(); + }, + ontouchend: function (e) { + e.stopPropagation(); + e.preventDefault(); + handleClick(e); + }, + onclick: handleClick + }, + ["span"], + ["span", { class: "ace_mobile-button", action: "more" }, "..."] + ], editor.container); + } + function showContextMenu() { + if (!editor.getOption("enableMobileMenu")) { + if (contextMenu) { + hideContextMenu(); + } + return; + } + if (!contextMenu) + createContextMenu(); + var cursor = editor.selection.cursor; + var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column); + var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX; + var scrollLeft = editor.renderer.scrollLeft; + var rect = editor.container.getBoundingClientRect(); + contextMenu.style.top = pagePos.pageY - rect.top - 3 + "px"; + if (pagePos.pageX - rect.left < rect.width - 70) { + contextMenu.style.left = ""; + contextMenu.style.right = "10px"; + } + else { + contextMenu.style.right = ""; + contextMenu.style.left = leftOffset + scrollLeft - rect.left + "px"; + } + contextMenu.style.display = ""; + contextMenu.firstChild.style.display = "none"; + editor.on("input", hideContextMenu); + } + function hideContextMenu(e) { + if (contextMenu) + contextMenu.style.display = "none"; + editor.off("input", hideContextMenu); + } + function handleLongTap() { + longTouchTimer = null; + clearTimeout(longTouchTimer); + var range = editor.selection.getRange(); + var inSelection = range.contains(pos.row, pos.column); + if (range.isEmpty() || !inSelection) { + editor.selection.moveToPosition(pos); + editor.selection.selectWord(); + } + mode = "wait"; + showContextMenu(); + } + function switchToSelectionMode() { + longTouchTimer = null; + clearTimeout(longTouchTimer); + editor.selection.moveToPosition(pos); + var range = clickCount >= 2 + ? editor.selection.getLineRange(pos.row) + : editor.session.getBracketRange(pos); + if (range && !range.isEmpty()) { + editor.selection.setRange(range); + } + else { + editor.selection.selectWord(); + } + mode = "wait"; + } + event.addListener(el, "contextmenu", function (e) { + if (!pressed) + return; + var textarea = editor.textInput.getElement(); + textarea.focus(); + }, editor); + event.addListener(el, "touchstart", function (e) { + var touches = e.touches; + if (longTouchTimer || touches.length > 1) { + clearTimeout(longTouchTimer); + longTouchTimer = null; + touchStartT = -1; + mode = "zoom"; + return; + } + pressed = editor.$mouseHandler.isMousePressed = true; + var h = editor.renderer.layerConfig.lineHeight; + var w = editor.renderer.layerConfig.lineHeight; + var t = e.timeStamp; + lastT = t; + var touchObj = touches[0]; + var x = touchObj.clientX; + var y = touchObj.clientY; + if (Math.abs(startX - x) + Math.abs(startY - y) > h) + touchStartT = -1; + startX = e.clientX = x; + startY = e.clientY = y; + vX = vY = 0; + var ev = new MouseEvent(e, editor); + pos = ev.getDocumentPosition(); + if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) { + clickCount++; + e.preventDefault(); + e.button = 0; + switchToSelectionMode(); + } + else { + clickCount = 0; + var cursor = editor.selection.cursor; + var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor; + var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true); + var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true); + var rect = editor.renderer.scroller.getBoundingClientRect(); + var offsetTop = editor.renderer.layerConfig.offset; + var offsetLeft = editor.renderer.scrollLeft; + var weightedDistance = function (x, y) { + x = x / w; + y = y / h - 0.75; + return x * x + y * y; + }; + if (e.clientX < rect.left) { + mode = "zoom"; + return; + } + var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop); + var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop); + if (diff1 < 3.5 && diff2 < 3.5) + mode = diff1 > diff2 ? "cursor" : "anchor"; + if (diff2 < 3.5) + mode = "anchor"; + else if (diff1 < 3.5) + mode = "cursor"; + else + mode = "scroll"; + longTouchTimer = setTimeout(handleLongTap, 450); + } + touchStartT = t; + }, editor); + event.addListener(el, "touchend", function (e) { + pressed = editor.$mouseHandler.isMousePressed = false; + if (animationTimer) + clearInterval(animationTimer); + if (mode == "zoom") { + mode = ""; + animationSteps = 0; + } + else if (longTouchTimer) { + editor.selection.moveToPosition(pos); + animationSteps = 0; + showContextMenu(); + } + else if (mode == "scroll") { + animate(); + hideContextMenu(); + } + else { + showContextMenu(); + } + clearTimeout(longTouchTimer); + longTouchTimer = null; + }, editor); + event.addListener(el, "touchmove", function (e) { + if (longTouchTimer) { + clearTimeout(longTouchTimer); + longTouchTimer = null; + } + var touches = e.touches; + if (touches.length > 1 || mode == "zoom") + return; + var touchObj = touches[0]; + var wheelX = startX - touchObj.clientX; + var wheelY = startY - touchObj.clientY; + if (mode == "wait") { + if (wheelX * wheelX + wheelY * wheelY > 4) + mode = "cursor"; + else + return e.preventDefault(); + } + startX = touchObj.clientX; + startY = touchObj.clientY; + e.clientX = touchObj.clientX; + e.clientY = touchObj.clientY; + var t = e.timeStamp; + var dt = t - lastT; + lastT = t; + if (mode == "scroll") { + var mouseEvent = new MouseEvent(e, editor); + mouseEvent.speed = 1; + mouseEvent.wheelX = wheelX; + mouseEvent.wheelY = wheelY; + if (10 * Math.abs(wheelX) < Math.abs(wheelY)) + wheelX = 0; + if (10 * Math.abs(wheelY) < Math.abs(wheelX)) + wheelY = 0; + if (dt != 0) { + vX = wheelX / dt; + vY = wheelY / dt; + } + editor._emit("mousewheel", mouseEvent); + if (!mouseEvent.propagationStopped) { + vX = vY = 0; + } + } + else { + var ev = new MouseEvent(e, editor); + var pos = ev.getDocumentPosition(); + if (mode == "cursor") + editor.selection.moveCursorToPosition(pos); + else if (mode == "anchor") + editor.selection.setSelectionAnchor(pos.row, pos.column); + editor.renderer.scrollCursorIntoView(pos); + e.preventDefault(); + } + }, editor); + function animate() { + animationSteps += 60; + animationTimer = setInterval(function () { + if (animationSteps-- <= 0) { + clearInterval(animationTimer); + animationTimer = null; + } + if (Math.abs(vX) < 0.01) + vX = 0; + if (Math.abs(vY) < 0.01) + vY = 0; + if (animationSteps < 20) + vX = 0.9 * vX; + if (animationSteps < 20) + vY = 0.9 * vY; + var oldScrollTop = editor.session.getScrollTop(); + editor.renderer.scrollBy(10 * vX, 10 * vY); + if (oldScrollTop == editor.session.getScrollTop()) + animationSteps = 0; + }, 10); + } +}; +}); -/***/ }), +ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/mouse/touch_handler","ace/config"], function(require, exports, module){"use strict"; +var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +var DefaultHandlers = require("./default_handlers").DefaultHandlers; +var DefaultGutterHandler = require("./default_gutter_handler").GutterHandler; +var MouseEvent = require("./mouse_event").MouseEvent; +var DragdropHandler = require("./dragdrop_handler").DragdropHandler; +var addTouchListeners = require("./touch_handler").addTouchListeners; +var config = require("../config"); +var MouseHandler = /** @class */ (function () { + function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout; + var _self = this; + this.editor = editor; + new DefaultHandlers(this); + new DefaultGutterHandler(this); + new DragdropHandler(this); + var focusEditor = function (e) { + var windowBlurred = !document.hasFocus || !document.hasFocus() + || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement()); + if (windowBlurred) + window.focus(); + editor.focus(); + setTimeout(function () { + if (!editor.isFocused()) + editor.focus(); + }); + }; + var mouseTarget = editor.renderer.getMouseEventTarget(); + event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"), editor); + event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"), editor); + event.addMultiMouseDownListener([ + mouseTarget, + editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner, + editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner, + editor.textInput && editor.textInput.getElement() + ].filter(Boolean), [400, 300, 250], this, "onMouseEvent", editor); + event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"), editor); + addTouchListeners(editor.container, editor); + var gutterEl = editor.renderer.$gutter; + event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown"), editor); + event.addListener(gutterEl, "click", this.onMouseEvent.bind(this, "gutterclick"), editor); + event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick"), editor); + event.addListener(gutterEl, "mousemove", this.onMouseEvent.bind(this, "guttermousemove"), editor); + event.addListener(mouseTarget, "mousedown", focusEditor, editor); + event.addListener(gutterEl, "mousedown", focusEditor, editor); + if (useragent.isIE && editor.renderer.scrollBarV) { + event.addListener(editor.renderer.scrollBarV.element, "mousedown", focusEditor, editor); + event.addListener(editor.renderer.scrollBarH.element, "mousedown", focusEditor, editor); + } + editor.on("mousemove", function (e) { + if (_self.state || _self.$dragDelay || !_self.$dragEnabled) + return; + var character = editor.renderer.screenToTextCoordinates(e.x, e.y); + var range = editor.session.selection.getRange(); + var renderer = editor.renderer; + if (!range.isEmpty() && range.insideStart(character.row, character.column)) { + renderer.setCursorStyle("default"); + } + else { + renderer.setCursorStyle(""); + } + }, //@ts-expect-error TODO: seems mistyping - should be boolean + editor); + } + MouseHandler.prototype.onMouseEvent = function (name, e) { + if (!this.editor.session) + return; + this.editor._emit(name, new MouseEvent(e, this.editor)); + }; + MouseHandler.prototype.onMouseMove = function (name, e) { + var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove; + if (!listeners || !listeners.length) + return; + this.editor._emit(name, new MouseEvent(e, this.editor)); + }; + MouseHandler.prototype.onMouseWheel = function (name, e) { + var mouseEvent = new MouseEvent(e, this.editor); + mouseEvent.speed = this.$scrollSpeed * 2; + mouseEvent.wheelX = e.wheelX; + mouseEvent.wheelY = e.wheelY; + this.editor._emit(name, mouseEvent); + }; + MouseHandler.prototype.setState = function (state) { + this.state = state; + }; + MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) { + this.x = ev.x; + this.y = ev.y; + this.isMousePressed = true; + var editor = this.editor; + var renderer = this.editor.renderer; + renderer.$isMousePressed = true; + var self = this; + var continueCapture = true; + var onMouseMove = function (e) { + if (!e) + return; + if (useragent.isWebKit && !e.which && self.releaseMouse) + return self.releaseMouse(); + self.x = e.clientX; + self.y = e.clientY; + mouseMoveHandler && mouseMoveHandler(e); + self.mouseEvent = new MouseEvent(e, self.editor); + self.$mouseMoved = true; + }; + var onCaptureEnd = function (e) { + editor.off("beforeEndOperation", onOperationEnd); + continueCapture = false; + if (editor.session) + onCaptureUpdate(); + self[self.state + "End"] && self[self.state + "End"](e); + self.state = ""; + self.isMousePressed = renderer.$isMousePressed = false; + if (renderer.$keepTextAreaAtCursor) + renderer.$moveTextAreaToCursor(); + self.$onCaptureMouseMove = self.releaseMouse = null; + e && self.onMouseEvent("mouseup", e); + editor.endOperation(); + }; + var onCaptureUpdate = function () { + self[self.state] && self[self.state](); + self.$mouseMoved = false; + }; + var onCaptureInterval = function () { + if (continueCapture) { + onCaptureUpdate(); + event.nextFrame(onCaptureInterval); + } + }; + if (useragent.isOldIE && ev.domEvent.type == "dblclick") { + return setTimeout(function () { onCaptureEnd(ev); }); + } + var onOperationEnd = function (e) { + if (!self.releaseMouse) + return; + if (editor.curOp.command.name && editor.curOp.selectionChanged) { + self[self.state + "End"] && self[self.state + "End"](); + self.state = ""; + self.releaseMouse(); + } + }; + editor.on("beforeEndOperation", onOperationEnd); + editor.startOperation({ command: { name: "mouse" } }); + self.$onCaptureMouseMove = onMouseMove; + self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd); + onCaptureInterval(); + }; + MouseHandler.prototype.cancelContextMenu = function () { + var stop = function (e) { + if (e && e.domEvent && e.domEvent.type != "contextmenu") + return; + this.editor.off("nativecontextmenu", stop); + if (e && e.domEvent) + event.stopEvent(e.domEvent); + }.bind(this); + setTimeout(stop, 10); + this.editor.on("nativecontextmenu", stop); + }; + MouseHandler.prototype.destroy = function () { + if (this.releaseMouse) + this.releaseMouse(); + }; + return MouseHandler; +}()); +MouseHandler.prototype.releaseMouse = null; +config.defineOptions(MouseHandler.prototype, "mouseHandler", { + scrollSpeed: { initialValue: 2 }, + dragDelay: { initialValue: (useragent.isMac ? 150 : 0) }, + dragEnabled: { initialValue: true }, + focusTimeout: { initialValue: 0 }, + tooltipFollowsMouse: { initialValue: true } +}); +exports.MouseHandler = MouseHandler; -/***/ "./node_modules/css-loader/dist/cjs.js!./style/panel.css": -/*!***************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/panel.css ***! - \***************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +}); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_lumino_default_theme_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../../node_modules/@lumino/default-theme/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css"); -// Imports +ace.define("ace/mouse/fold_handler",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var FoldHandler = /** @class */ (function () { + function FoldHandler(editor) { + editor.on("click", function (e) { + var position = e.getDocumentPosition(); + var session = editor.session; + var fold = session.getFoldAt(position.row, position.column, 1); + if (fold) { + if (e.getAccelKey()) + session.removeFold(fold); + else + session.expandFold(fold); + e.stop(); + } + var target = e.domEvent && e.domEvent.target; + if (target && dom.hasCssClass(target, "ace_inline_button")) { + if (dom.hasCssClass(target, "ace_toggle_wrap")) { + session.setOption("wrap", !session.getUseWrapMode()); + editor.renderer.scrollCursorIntoView(); + } + } + }); + editor.on("gutterclick", function (e) { + var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); + if (gutterRegion == "foldWidgets") { + var row = e.getDocumentPosition().row; + var session = editor.session; + if (session.foldWidgets && session.foldWidgets[row]) + editor.session.onFoldWidgetClick(row, e); + if (!editor.isFocused()) + editor.focus(); + e.stop(); + } + }); + editor.on("gutterdblclick", function (e) { + var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); + if (gutterRegion == "foldWidgets") { + var row = e.getDocumentPosition().row; + var session = editor.session; + var data = session.getParentFoldRangeData(row, true); + var range = data.range || data.firstRange; + if (range) { + row = range.start.row; + var fold = session.getFoldAt(row, session.getLine(row).length, 1); + if (fold) { + session.removeFold(fold); + } + else { + session.addFold("...", range); + editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 }); + } + } + e.stop(); + } + }); + } + return FoldHandler; +}()); +exports.FoldHandler = FoldHandler; +}); +ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"], function(require, exports, module){"use strict"; +var keyUtil = require("../lib/keys"); +var event = require("../lib/event"); +var KeyBinding = /** @class */ (function () { + function KeyBinding(editor) { + this.$editor = editor; + this.$data = { editor: editor }; + this.$handlers = []; + this.setDefaultHandler(editor.commands); + } + KeyBinding.prototype.setDefaultHandler = function (kb) { + this.removeKeyboardHandler(this.$defaultHandler); + this.$defaultHandler = kb; + this.addKeyboardHandler(kb, 0); + }; + KeyBinding.prototype.setKeyboardHandler = function (kb) { + var h = this.$handlers; + if (h[h.length - 1] == kb) + return; + while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) + this.removeKeyboardHandler(h[h.length - 1]); + this.addKeyboardHandler(kb, 1); + }; + KeyBinding.prototype.addKeyboardHandler = function (kb, pos) { + if (!kb) + return; + if (typeof kb == "function" && !kb.handleKeyboard) + kb.handleKeyboard = kb; + var i = this.$handlers.indexOf(kb); + if (i != -1) + this.$handlers.splice(i, 1); + if (pos == undefined) + this.$handlers.push(kb); + else + this.$handlers.splice(pos, 0, kb); + if (i == -1 && kb.attach) + kb.attach(this.$editor); + }; + KeyBinding.prototype.removeKeyboardHandler = function (kb) { + var i = this.$handlers.indexOf(kb); + if (i == -1) + return false; + this.$handlers.splice(i, 1); + kb.detach && kb.detach(this.$editor); + return true; + }; + KeyBinding.prototype.getKeyboardHandler = function () { + return this.$handlers[this.$handlers.length - 1]; + }; + KeyBinding.prototype.getStatusText = function () { + var data = this.$data; + var editor = data.editor; + return this.$handlers.map(function (h) { + return h.getStatusText && h.getStatusText(editor, data) || ""; + }).filter(Boolean).join(" "); + }; + KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) { + var toExecute; + var success = false; + var commands = this.$editor.commands; + for (var i = this.$handlers.length; i--;) { + toExecute = this.$handlers[i].handleKeyboard( + this.$data, hashId, keyString, keyCode, e); + if (!toExecute || !toExecute.command) + continue; + if (toExecute.command == "null") { + success = true; + } + else { + success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); + } + if (success && e && hashId != -1 && + toExecute["passEvent"] != true && toExecute.command["passEvent"] != true) { + event.stopEvent(e); + } + if (success) + break; + } + if (!success && hashId == -1) { + toExecute = { command: "insertstring" }; + success = commands.exec("insertstring", this.$editor, keyString); + } + if (success && this.$editor._signal) + this.$editor._signal("keyboardActivity", toExecute); + return success; + }; + KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) { + var keyString = keyUtil.keyCodeToString(keyCode); + return this.$callKeyboardHandlers(hashId, keyString, keyCode, e); + }; + KeyBinding.prototype.onTextInput = function (text) { + return this.$callKeyboardHandlers(-1, text); + }; + return KeyBinding; +}()); +exports.KeyBinding = KeyBinding; -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_node_modules_lumino_default_theme_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, ` -.p-TabBar { - min-height: 24px; - max-height: 24px; -} +}); -.p-TabBar-content { - min-width: 0; - min-height: 0; - align-items: flex-end; - border-bottom: 1px solid #C0C0C0; +ace.define("ace/lib/bidiutil",["require","exports","module"], function(require, exports, module){"use strict"; +var ArabicAlefBetIntervalsBegine = ['\u0621', '\u0641']; +var ArabicAlefBetIntervalsEnd = ['\u063A', '\u064a']; +var dir = 0, hiLevel = 0; +var lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false; +var impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0] +]; +var impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1] +]; +var LTR = 0, RTL = 1; +var L = 0; +var R = 1; +var EN = 2; +var AN = 3; +var ON = 4; +var B = 5; +var S = 6; +var AL = 7; +var WS = 8; +var CS = 9; +var ES = 10; +var ET = 11; +var NSM = 12; +var LRE = 13; +var RLE = 14; +var PDF = 15; +var LRO = 16; +var RLO = 17; +var BN = 18; +var UnicodeTBL00 = [ + BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN, + BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S, + WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS, + EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON, + ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, + L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, + ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, + L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN, + BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, + BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, + CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON, + ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON +]; +var UnicodeTBL20 = [ + WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R, + ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, + ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS, + ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, + ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, + ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS +]; +function _computeLevels(chars, levels, len, charTypes) { + var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = []; + if (!charTypes) { + for (i = 0, charTypes = []; i < len; i++) { + charTypes[i] = _getCharacterType(chars[i]); + } + } + hiLevel = dir; + lastArabic = false; + hasUBAT_AL = false; + hasUBAT_B = false; + hasUBAT_S = false; + for (ix = 0; ix < len; ix++) { + prevState = newState; + classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix); + newState = impTab[prevState][newClass]; + action = newState & 0xF0; + newState &= 0x0F; + levels[ix] = newLevel = impTab[newState][5]; + if (action > 0) { + if (action == 0x10) { + for (i = condPos; i < ix; i++) { + levels[i] = 1; + } + condPos = -1; + } + else { + condPos = -1; + } + } + cond = impTab[newState][6]; + if (cond) { + if (condPos == -1) { + condPos = ix; + } + } + else { + if (condPos > -1) { + for (i = condPos; i < ix; i++) { + levels[i] = newLevel; + } + condPos = -1; + } + } + if (charTypes[ix] == B) { + levels[ix] = 0; + } + hiLevel |= newLevel; + } + if (hasUBAT_S) { + for (i = 0; i < len; i++) { + if (charTypes[i] == S) { + levels[i] = dir; + for (var j = i - 1; j >= 0; j--) { + if (charTypes[j] == WS) { + levels[j] = dir; + } + else { + break; + } + } + } + } + } } - - -.p-TabBar-tab { - padding: 0px 10px; - background: #E5E5E5; - border: 1px solid #C0C0C0; - border-bottom: none; - font: 12px Helvetica, Arial, sans-serif; - flex: 0 1 180px; - min-height: 20px; - max-height: 20px; - min-width: 35px; - margin-left: -1px; - line-height: 20px; +function _invertLevel(lev, levels, _array) { + if (hiLevel < lev) { + return; + } + if (lev == 1 && dir == RTL && !hasUBAT_B) { + _array.reverse(); + return; + } + var len = _array.length, start = 0, end, lo, hi, tmp; + while (start < len) { + if (levels[start] >= lev) { + end = start + 1; + while (end < len && levels[end] >= lev) { + end++; + } + for (lo = start, hi = end - 1; lo < hi; lo++, hi--) { + tmp = _array[lo]; + _array[lo] = _array[hi]; + _array[hi] = tmp; + } + start = end; + } + start++; + } } - - -.p-TabBar-tab.p-mod-current { - background: white; +function _getCharClass(chars, types, classes, ix) { + var cType = types[ix], wType, nType, len, i; + switch (cType) { + case L: + case R: + lastArabic = false; + case ON: + case AN: + return cType; + case EN: + return lastArabic ? AN : EN; + case AL: + lastArabic = true; + hasUBAT_AL = true; + return R; + case WS: + return ON; + case CS: + if (ix < 1 || (ix + 1) >= types.length || + ((wType = classes[ix - 1]) != EN && wType != AN) || + ((nType = types[ix + 1]) != EN && nType != AN)) { + return ON; + } + if (lastArabic) { + nType = AN; + } + return nType == wType ? nType : ON; + case ES: + wType = ix > 0 ? classes[ix - 1] : B; + if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) { + return EN; + } + return ON; + case ET: + if (ix > 0 && classes[ix - 1] == EN) { + return EN; + } + if (lastArabic) { + return ON; + } + i = ix + 1; + len = types.length; + while (i < len && types[i] == ET) { + i++; + } + if (i < len && types[i] == EN) { + return EN; + } + return ON; + case NSM: + len = types.length; + i = ix + 1; + while (i < len && types[i] == NSM) { + i++; + } + if (i < len) { + var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E; + wType = types[i]; + if (rtlCandidate && (wType == R || wType == AL)) { + return R; + } + } + if (ix < 1 || (wType = types[ix - 1]) == B) { + return ON; + } + return classes[ix - 1]; + case B: + lastArabic = false; + hasUBAT_B = true; + return dir; + case S: + hasUBAT_S = true; + return ON; + case LRE: + case RLE: + case LRO: + case RLO: + case PDF: + lastArabic = false; + case BN: + return ON; + } } - - -.p-TabBar-tab:hover:not(.p-mod-current) { - background: #F0F0F0; +function _getCharacterType(ch) { + var uc = ch.charCodeAt(0), hi = uc >> 8; + if (hi == 0) { + return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]); + } + else if (hi == 5) { + return (/[\u0591-\u05f4]/.test(ch) ? R : L); + } + else if (hi == 6) { + if (/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(ch)) + return NSM; + else if (/[\u0660-\u0669\u066b-\u066c]/.test(ch)) + return AN; + else if (uc == 0x066A) + return ET; + else if (/[\u06f0-\u06f9]/.test(ch)) + return EN; + else + return AL; + } + else if (hi == 0x20 && uc <= 0x205F) { + return UnicodeTBL20[uc & 0xFF]; + } + else if (hi == 0xFE) { + return (uc >= 0xFE70 ? AL : ON); + } + return ON; } - - -.p-TabBar-tab:first-child { - margin-left: 0; +function _isArabicDiacritics(ch) { + return (ch >= '\u064b' && ch <= '\u0655'); } +exports.L = L; +exports.R = R; +exports.EN = EN; +exports.ON_R = 3; +exports.AN = 4; +exports.R_H = 5; +exports.B = 6; +exports.RLE = 7; +exports.DOT = "\xB7"; +exports.doBidiReorder = function (text, textCharTypes, isRtl) { + if (text.length < 2) + return {}; + var chars = text.split(""), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = []; + dir = isRtl ? RTL : LTR; + _computeLevels(chars, levels, chars.length, textCharTypes); + for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++) + ; + _invertLevel(2, levels, logicalFromVisual); + _invertLevel(1, levels, logicalFromVisual); + for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width + if (textCharTypes[i] === AN) { + levels[i] = exports.AN; + } + else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) + || textCharTypes[i] === ON || textCharTypes[i] === BN)) { + levels[i] = exports.ON_R; + } + else if ((i > 0 && chars[i - 1] === '\u0644') && /\u0622|\u0623|\u0625|\u0627/.test(chars[i])) { + levels[i - 1] = levels[i] = exports.R_H; + i++; + } + } + if (chars[chars.length - 1] === exports.DOT) + levels[chars.length - 1] = exports.B; + if (chars[0] === '\u202B') + levels[0] = exports.RLE; + for (var i = 0; i < logicalFromVisual.length; i++) { + bidiLevels[i] = levels[logicalFromVisual[i]]; + } + return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels }; +}; +exports.hasBidiCharacters = function (text, textCharTypes) { + var ret = false; + for (var i = 0; i < text.length; i++) { + textCharTypes[i] = _getCharacterType(text.charAt(i)); + if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN)) + ret = true; + } + return ret; +}; +exports.getVisualFromLogicalIdx = function (logIdx, rowMap) { + for (var i = 0; i < rowMap.logicalFromVisual.length; i++) { + if (rowMap.logicalFromVisual[i] == logIdx) + return i; + } + return 0; +}; +}); -.p-TabBar-tab.p-mod-current { - min-height: 23px; - max-height: 23px; - transform: translateY(1px); -} +ace.define("ace/bidihandler",["require","exports","module","ace/lib/bidiutil","ace/lib/lang"], function(require, exports, module){"use strict"; +var bidiUtil = require("./lib/bidiutil"); +var lang = require("./lib/lang"); +var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac\u202B]/; +var BidiHandler = /** @class */ (function () { + function BidiHandler(session) { + this.session = session; + this.bidiMap = {}; + this.currentRow = null; + this.bidiUtil = bidiUtil; + this.charWidths = []; + this.EOL = "\xAC"; + this.showInvisibles = true; + this.isRtlDir = false; + this.$isRtl = false; + this.line = ""; + this.wrapIndent = 0; + this.EOF = "\xB6"; + this.RLE = "\u202B"; + this.contentWidth = 0; + this.fontMetrics = null; + this.rtlLineOffset = 0; + this.wrapOffset = 0; + this.isMoveLeftOperation = false; + this.seenBidi = bidiRE.test(session.getValue()); + } + BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) { + if (!this.seenBidi) + return false; + if (screenRow !== this.currentRow) { + this.currentRow = screenRow; + this.updateRowLine(docRow, splitIndex); + this.updateBidiMap(); + } + return this.bidiMap.bidiLevels; + }; + BidiHandler.prototype.onChange = function (delta) { + if (!this.seenBidi) { + if (delta.action == "insert" && bidiRE.test(delta.lines.join("\n"))) { + this.seenBidi = true; + this.currentRow = null; + } + } + else { + this.currentRow = null; + } + }; + BidiHandler.prototype.getDocumentRow = function () { + var docRow = 0; + var rowCache = this.session.$screenRowCache; + if (rowCache.length) { + var index = this.session.$getRowCacheIndex(rowCache, this.currentRow); + if (index >= 0) + docRow = this.session.$docRowCache[index]; + } + return docRow; + }; + BidiHandler.prototype.getSplitIndex = function () { + var splitIndex = 0; + var rowCache = this.session.$screenRowCache; + if (rowCache.length) { + var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow); + while (this.currentRow - splitIndex > 0) { + currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1); + if (currentIndex !== prevIndex) + break; + prevIndex = currentIndex; + splitIndex++; + } + } + else { + splitIndex = this.currentRow; + } + return splitIndex; + }; + BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) { + if (docRow === undefined) + docRow = this.getDocumentRow(); + var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL; + this.wrapIndent = 0; + this.line = this.session.getLine(docRow); + this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE; + if (this.session.$useWrapMode) { + var splits = this.session.$wrapData[docRow]; + if (splits) { + if (splitIndex === undefined) + splitIndex = this.getSplitIndex(); + if (splitIndex > 0 && splits.length) { + this.wrapIndent = splits.indent; + this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L]; + this.line = (splitIndex < splits.length) ? + this.line.substring(splits[splitIndex - 1], splits[splitIndex]) : + this.line.substring(splits[splits.length - 1]); + } + else { + this.line = this.line.substring(0, splits[splitIndex]); + } + if (splitIndex == splits.length) { + this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT; + } + } + } + else { + this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT; + } + var session = this.session, shift = 0, size; + this.line = this.line.replace(/\t|[\u1100-\u2029, \u202F-\uFFE6]/g, function (ch, i) { + if (ch === '\t' || session.isFullWidth(ch.charCodeAt(0))) { + size = (ch === '\t') ? session.getScreenTabSize(i + shift) : 2; + shift += size - 1; + return lang.stringRepeat(bidiUtil.DOT, size); + } + return ch; + }); + if (this.isRtlDir) { + this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line; + this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width; + } + }; + BidiHandler.prototype.updateBidiMap = function () { + var textCharTypes = []; + if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) { + this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir); + } + else { + this.bidiMap = {}; + } + }; + BidiHandler.prototype.markAsDirty = function () { + this.currentRow = null; + }; + BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) { + if (this.characterWidth === fontMetrics.$characterSize.width) + return; + this.fontMetrics = fontMetrics; + var characterWidth = this.characterWidth = fontMetrics.$characterSize.width; + var bidiCharWidth = fontMetrics.$measureCharWidth("\u05d4"); + this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth; + this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth; + this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45; + this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0; + this.currentRow = null; + }; + BidiHandler.prototype.setShowInvisibles = function (showInvisibles) { + this.showInvisibles = showInvisibles; + this.currentRow = null; + }; + BidiHandler.prototype.setEolChar = function (eolChar) { + this.EOL = eolChar; + }; + BidiHandler.prototype.setContentWidth = function (width) { + this.contentWidth = width; + }; + BidiHandler.prototype.isRtlLine = function (row) { + if (this.$isRtl) + return true; + if (row != undefined) + return (this.session.getLine(row).charAt(0) == this.RLE); + else + return this.isRtlDir; + }; + BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) { + var cursor = editor.getCursorPosition(); + for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) { + if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE) + editor.session.doc.removeInLine(row, 0, 1); + else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE) + editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE); + } + }; + BidiHandler.prototype.getPosLeft = function (col) { + col -= this.wrapIndent; + var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0; + var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary; + var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0; + if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0) + visualIdx++; + for (var i = 0; i < visualIdx; i++) { + left += this.charWidths[levels[i]]; + } + if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0)) + left += this.charWidths[levels[visualIdx]]; + if (this.wrapIndent) + left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; + if (this.isRtlDir) + left += this.rtlLineOffset; + return left; + }; + BidiHandler.prototype.getSelections = function (startCol, endCol) { + var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0; + if (this.wrapIndent) + offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; + for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) { + logIdx = map.logicalFromVisual[visIdx]; + level = levels[visIdx]; + isSelected = (logIdx >= selColMin) && (logIdx < selColMax); + if (isSelected && !isSelectedPrev) { + selectionStart = offset; + } + else if (!isSelected && isSelectedPrev) { + selections.push({ left: selectionStart, width: offset - selectionStart }); + } + offset += this.charWidths[level]; + isSelectedPrev = isSelected; + } + if (isSelected && (visIdx === levels.length)) { + selections.push({ left: selectionStart, width: offset - selectionStart }); + } + if (this.isRtlDir) { + for (var i = 0; i < selections.length; i++) { + selections[i].left += this.rtlLineOffset; + } + } + return selections; + }; + BidiHandler.prototype.offsetToCol = function (posX) { + if (this.isRtlDir) + posX -= this.rtlLineOffset; + var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]]; + if (this.wrapIndent) + posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; + while (posX > offset + charWidth / 2) { + offset += charWidth; + if (visualIdx === levels.length - 1) { + charWidth = 0; + break; + } + charWidth = this.charWidths[levels[++visualIdx]]; + } + if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) { + if (posX < offset) + visualIdx--; + logicalIdx = this.bidiMap.logicalFromVisual[visualIdx]; + } + else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) { + logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx] + : this.bidiMap.logicalFromVisual[visualIdx - 1]); + } + else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0)) + || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) { + logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx]; + } + else { + if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0) + visualIdx--; + logicalIdx = this.bidiMap.logicalFromVisual[visualIdx]; + } + if (logicalIdx === 0 && this.isRtlDir) + logicalIdx++; + return (logicalIdx + this.wrapIndent); + }; + return BidiHandler; +}()); +exports.BidiHandler = BidiHandler; +}); -.p-TabBar-tabIcon, -.p-TabBar-tabLabel, -.p-TabBar-tabCloseIcon { - display: inline-block; -} +ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var lang = require("./lib/lang"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Range = require("./range").Range; +var Selection = /** @class */ (function () { + function Selection(session) { + this.session = session; + this.doc = session.getDocument(); + this.clearSelection(); + this.cursor = this.lead = this.doc.createAnchor(0, 0); + this.anchor = this.doc.createAnchor(0, 0); + this.$silent = false; + var self = this; + this.cursor.on("change", function (e) { + self.$cursorChanged = true; + if (!self.$silent) + self._emit("changeCursor"); + if (!self.$isEmpty && !self.$silent) + self._emit("changeSelection"); + if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) + self.$desiredColumn = null; + }); + this.anchor.on("change", function () { + self.$anchorChanged = true; + if (!self.$isEmpty && !self.$silent) + self._emit("changeSelection"); + }); + } + Selection.prototype.isEmpty = function () { + return this.$isEmpty || (this.anchor.row == this.lead.row && + this.anchor.column == this.lead.column); + }; + Selection.prototype.isMultiLine = function () { + return !this.$isEmpty && this.anchor.row != this.cursor.row; + }; + Selection.prototype.getCursor = function () { + return this.lead.getPosition(); + }; + Selection.prototype.setAnchor = function (row, column) { + this.$isEmpty = false; + this.anchor.setPosition(row, column); + }; + Selection.prototype.getAnchor = function () { + if (this.$isEmpty) + return this.getSelectionLead(); + return this.anchor.getPosition(); + }; + Selection.prototype.getSelectionLead = function () { + return this.lead.getPosition(); + }; + Selection.prototype.isBackwards = function () { + var anchor = this.anchor; + var lead = this.lead; + return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); + }; + Selection.prototype.getRange = function () { + var anchor = this.anchor; + var lead = this.lead; + if (this.$isEmpty) + return Range.fromPoints(lead, lead); + return this.isBackwards() + ? Range.fromPoints(lead, anchor) + : Range.fromPoints(anchor, lead); + }; + Selection.prototype.clearSelection = function () { + if (!this.$isEmpty) { + this.$isEmpty = true; + this._emit("changeSelection"); + } + }; + Selection.prototype.selectAll = function () { + this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE); + }; + Selection.prototype.setRange = function (range, reverse) { + var start = reverse ? range.end : range.start; + var end = reverse ? range.start : range.end; + this.$setSelection(start.row, start.column, end.row, end.column); + }; + Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) { + if (this.$silent) + return; + var wasEmpty = this.$isEmpty; + var wasMultiselect = this.inMultiSelectMode; + this.$silent = true; + this.$cursorChanged = this.$anchorChanged = false; + this.anchor.setPosition(anchorRow, anchorColumn); + this.cursor.setPosition(cursorRow, cursorColumn); + this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor); + this.$silent = false; + if (this.$cursorChanged) + this._emit("changeCursor"); + if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect) + this._emit("changeSelection"); + }; + Selection.prototype.$moveSelection = function (mover) { + var lead = this.lead; + if (this.$isEmpty) + this.setSelectionAnchor(lead.row, lead.column); + mover.call(this); + }; + Selection.prototype.selectTo = function (row, column) { + this.$moveSelection(function () { + this.moveCursorTo(row, column); + }); + }; + Selection.prototype.selectToPosition = function (pos) { + this.$moveSelection(function () { + this.moveCursorToPosition(pos); + }); + }; + Selection.prototype.moveTo = function (row, column) { + this.clearSelection(); + this.moveCursorTo(row, column); + }; + Selection.prototype.moveToPosition = function (pos) { + this.clearSelection(); + this.moveCursorToPosition(pos); + }; + Selection.prototype.selectUp = function () { + this.$moveSelection(this.moveCursorUp); + }; + Selection.prototype.selectDown = function () { + this.$moveSelection(this.moveCursorDown); + }; + Selection.prototype.selectRight = function () { + this.$moveSelection(this.moveCursorRight); + }; + Selection.prototype.selectLeft = function () { + this.$moveSelection(this.moveCursorLeft); + }; + Selection.prototype.selectLineStart = function () { + this.$moveSelection(this.moveCursorLineStart); + }; + Selection.prototype.selectLineEnd = function () { + this.$moveSelection(this.moveCursorLineEnd); + }; + Selection.prototype.selectFileEnd = function () { + this.$moveSelection(this.moveCursorFileEnd); + }; + Selection.prototype.selectFileStart = function () { + this.$moveSelection(this.moveCursorFileStart); + }; + Selection.prototype.selectWordRight = function () { + this.$moveSelection(this.moveCursorWordRight); + }; + Selection.prototype.selectWordLeft = function () { + this.$moveSelection(this.moveCursorWordLeft); + }; + Selection.prototype.getWordRange = function (row, column) { + if (typeof column == "undefined") { + var cursor = row || this.lead; + row = cursor.row; + column = cursor.column; + } + return this.session.getWordRange(row, column); + }; + Selection.prototype.selectWord = function () { + this.setSelectionRange(this.getWordRange()); + }; + Selection.prototype.selectAWord = function () { + var cursor = this.getCursor(); + var range = this.session.getAWordRange(cursor.row, cursor.column); + this.setSelectionRange(range); + }; + Selection.prototype.getLineRange = function (row, excludeLastChar) { + var rowStart = typeof row == "number" ? row : this.lead.row; + var rowEnd; + var foldLine = this.session.getFoldLine(rowStart); + if (foldLine) { + rowStart = foldLine.start.row; + rowEnd = foldLine.end.row; + } + else { + rowEnd = rowStart; + } + if (excludeLastChar === true) + return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); + else + return new Range(rowStart, 0, rowEnd + 1, 0); + }; + Selection.prototype.selectLine = function () { + this.setSelectionRange(this.getLineRange()); + }; + Selection.prototype.moveCursorUp = function () { + this.moveCursorBy(-1, 0); + }; + Selection.prototype.moveCursorDown = function () { + this.moveCursorBy(1, 0); + }; + Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) { + var start = cursor.column; + var end = cursor.column + tabSize; + if (direction < 0) { + start = cursor.column - tabSize; + end = cursor.column; + } + return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(" ").length - 1 == tabSize; + }; + Selection.prototype.moveCursorLeft = function () { + var cursor = this.lead.getPosition(), fold; + if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + } + else if (cursor.column === 0) { + if (cursor.row > 0) { + this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); + } + } + else { + var tabSize = this.session.getTabSize(); + if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) { + this.moveCursorBy(0, -tabSize); + } + else { + this.moveCursorBy(0, -1); + } + } + }; + Selection.prototype.moveCursorRight = function () { + var cursor = this.lead.getPosition(), fold; + if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { + this.moveCursorTo(fold.end.row, fold.end.column); + } + else if (this.lead.column == this.doc.getLine(this.lead.row).length) { + if (this.lead.row < this.doc.getLength() - 1) { + this.moveCursorTo(this.lead.row + 1, 0); + } + } + else { + var tabSize = this.session.getTabSize(); + var cursor = this.lead; + if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) { + this.moveCursorBy(0, tabSize); + } + else { + this.moveCursorBy(0, 1); + } + } + }; + Selection.prototype.moveCursorLineStart = function () { + var row = this.lead.row; + var column = this.lead.column; + var screenRow = this.session.documentToScreenRow(row, column); + var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); + var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column); + var leadingSpace = beforeCursor.match(/^\s*/); + if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) + firstColumnPosition.column += leadingSpace[0].length; + this.moveCursorToPosition(firstColumnPosition); + }; + Selection.prototype.moveCursorLineEnd = function () { + var lead = this.lead; + var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); + if (this.lead.column == lineEnd.column) { + var line = this.session.getLine(lineEnd.row); + if (lineEnd.column == line.length) { + var textEnd = line.search(/\s+$/); + if (textEnd > 0) + lineEnd.column = textEnd; + } + } + this.moveCursorTo(lineEnd.row, lineEnd.column); + }; + Selection.prototype.moveCursorFileEnd = function () { + var row = this.doc.getLength() - 1; + var column = this.doc.getLine(row).length; + this.moveCursorTo(row, column); + }; + Selection.prototype.moveCursorFileStart = function () { + this.moveCursorTo(0, 0); + }; + Selection.prototype.moveCursorLongWordRight = function () { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + this.session.nonTokenRe.lastIndex = 0; + this.session.tokenRe.lastIndex = 0; + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + this.moveCursorTo(fold.end.row, fold.end.column); + return; + } + if (this.session.nonTokenRe.exec(rightOfCursor)) { + column += this.session.nonTokenRe.lastIndex; + this.session.nonTokenRe.lastIndex = 0; + rightOfCursor = line.substring(column); + } + if (column >= line.length) { + this.moveCursorTo(row, line.length); + this.moveCursorRight(); + if (row < this.doc.getLength() - 1) + this.moveCursorWordRight(); + return; + } + if (this.session.tokenRe.exec(rightOfCursor)) { + column += this.session.tokenRe.lastIndex; + this.session.tokenRe.lastIndex = 0; + } + this.moveCursorTo(row, column); + }; + Selection.prototype.moveCursorLongWordLeft = function () { + var row = this.lead.row; + var column = this.lead.column; + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + return; + } + var str = this.session.getFoldStringAt(row, column, -1); + if (str == null) { + str = this.doc.getLine(row).substring(0, column); + } + var leftOfCursor = lang.stringReverse(str); + this.session.nonTokenRe.lastIndex = 0; + this.session.tokenRe.lastIndex = 0; + if (this.session.nonTokenRe.exec(leftOfCursor)) { + column -= this.session.nonTokenRe.lastIndex; + leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); + this.session.nonTokenRe.lastIndex = 0; + } + if (column <= 0) { + this.moveCursorTo(row, 0); + this.moveCursorLeft(); + if (row > 0) + this.moveCursorWordLeft(); + return; + } + if (this.session.tokenRe.exec(leftOfCursor)) { + column -= this.session.tokenRe.lastIndex; + this.session.tokenRe.lastIndex = 0; + } + this.moveCursorTo(row, column); + }; + Selection.prototype.$shortWordEndIndex = function (rightOfCursor) { + var index = 0, ch; + var whitespaceRe = /\s/; + var tokenRe = this.session.tokenRe; + tokenRe.lastIndex = 0; + if (this.session.tokenRe.exec(rightOfCursor)) { + index = this.session.tokenRe.lastIndex; + } + else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index++; + if (index < 1) { + tokenRe.lastIndex = 0; + while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { + tokenRe.lastIndex = 0; + index++; + if (whitespaceRe.test(ch)) { + if (index > 2) { + index--; + break; + } + else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index++; + if (index > 2) + break; + } + } + } + } + } + tokenRe.lastIndex = 0; + return index; + }; + Selection.prototype.moveCursorShortWordRight = function () { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + var fold = this.session.getFoldAt(row, column, 1); + if (fold) + return this.moveCursorTo(fold.end.row, fold.end.column); + if (column == line.length) { + var l = this.doc.getLength(); + do { + row++; + rightOfCursor = this.doc.getLine(row); + } while (row < l && /^\s*$/.test(rightOfCursor)); + if (!/^\s+/.test(rightOfCursor)) + rightOfCursor = ""; + column = 0; + } + var index = this.$shortWordEndIndex(rightOfCursor); + this.moveCursorTo(row, column + index); + }; + Selection.prototype.moveCursorShortWordLeft = function () { + var row = this.lead.row; + var column = this.lead.column; + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) + return this.moveCursorTo(fold.start.row, fold.start.column); + var line = this.session.getLine(row).substring(0, column); + if (column === 0) { + do { + row--; + line = this.doc.getLine(row); + } while (row > 0 && /^\s*$/.test(line)); + column = line.length; + if (!/\s+$/.test(line)) + line = ""; + } + var leftOfCursor = lang.stringReverse(line); + var index = this.$shortWordEndIndex(leftOfCursor); + return this.moveCursorTo(row, column - index); + }; + Selection.prototype.moveCursorWordRight = function () { + if (this.session.$selectLongWords) + this.moveCursorLongWordRight(); + else + this.moveCursorShortWordRight(); + }; + Selection.prototype.moveCursorWordLeft = function () { + if (this.session.$selectLongWords) + this.moveCursorLongWordLeft(); + else + this.moveCursorShortWordLeft(); + }; + Selection.prototype.moveCursorBy = function (rows, chars) { + var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column); + var offsetX; + if (chars === 0) { + if (rows !== 0) { + if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) { + offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column); + screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]); + } + else { + offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0]; + } + } + if (this.$desiredColumn) + screenPos.column = this.$desiredColumn; + else + this.$desiredColumn = screenPos.column; + } + if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) { + var widget = this.session.lineWidgets[this.lead.row]; + if (rows < 0) + rows -= widget.rowsAbove || 0; + else if (rows > 0) + rows += widget.rowCount - (widget.rowsAbove || 0); + } + var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX); + if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { + } + this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); + }; + Selection.prototype.moveCursorToPosition = function (position) { + this.moveCursorTo(position.row, position.column); + }; + Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) { + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + row = fold.start.row; + column = fold.start.column; + } + this.$keepDesiredColumnOnChange = true; + var line = this.session.getLine(row); + if (/[\uDC00-\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) { + if (this.lead.row == row && this.lead.column == column + 1) + column = column - 1; + else + column = column + 1; + } + this.lead.setPosition(row, column); + this.$keepDesiredColumnOnChange = false; + if (!keepDesiredColumn) + this.$desiredColumn = null; + }; + Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) { + var pos = this.session.screenToDocumentPosition(row, column); + this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); + }; + Selection.prototype.detach = function () { + this.lead.detach(); + this.anchor.detach(); + }; + Selection.prototype.fromOrientedRange = function (range) { + this.setSelectionRange(range, range.cursor == range.start); + this.$desiredColumn = range.desiredColumn || this.$desiredColumn; + }; + Selection.prototype.toOrientedRange = function (range) { + var r = this.getRange(); + if (range) { + range.start.column = r.start.column; + range.start.row = r.start.row; + range.end.column = r.end.column; + range.end.row = r.end.row; + } + else { + range = r; + } + range.cursor = this.isBackwards() ? range.start : range.end; + range.desiredColumn = this.$desiredColumn; + return range; + }; + Selection.prototype.getRangeOfMovements = function (func) { + var start = this.getCursor(); + try { + func(this); + var end = this.getCursor(); + return Range.fromPoints(start, end); + } + catch (e) { + return Range.fromPoints(start, start); + } + finally { + this.moveCursorToPosition(start); + } + }; + Selection.prototype.toJSON = function () { + if (this.rangeCount) { var data = this.ranges.map(function (r) { + var r1 = r.clone(); + r1.isBackwards = r.cursor == r.start; + return r1; + }); + } + else { var data = this.getRange(); + data.isBackwards = this.isBackwards(); + } + return data; + }; + Selection.prototype.fromJSON = function (data) { + if (data.start == undefined) { + if (this.rangeList && data.length > 1) { + this.toSingleRange(data[0]); + for (var i = data.length; i--;) { + var r = Range.fromPoints(data[i].start, data[i].end); + if (data[i].isBackwards) + r.cursor = r.start; + this.addRange(r, true); + } + return; + } + else { + data = data[0]; + } + } + if (this.rangeList) + this.toSingleRange(data); + this.setSelectionRange(data, data.isBackwards); + }; + Selection.prototype.isEqual = function (data) { + if ((data.length || this.rangeCount) && data.length != this.rangeCount) + return false; + if (!data.length || !this.ranges) + return this.getRange().isEqual(data); + for (var i = this.ranges.length; i--;) { + if (!this.ranges[i].isEqual(data[i])) + return false; + } + return true; + }; + return Selection; +}()); +Selection.prototype.setSelectionAnchor = Selection.prototype.setAnchor; +Selection.prototype.getSelectionAnchor = Selection.prototype.getAnchor; +Selection.prototype.setSelectionRange = Selection.prototype.setRange; +oop.implement(Selection.prototype, EventEmitter); +exports.Selection = Selection; +}); -.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon { - margin-left: 4px; -} +ace.define("ace/tokenizer",["require","exports","module","ace/lib/report_error"], function(require, exports, module){"use strict"; +var reportError = require("./lib/report_error").reportError; +var MAX_TOKEN_COUNT = 2000; +var Tokenizer = /** @class */ (function () { + function Tokenizer(rules) { + this.splitRegex; + this.states = rules; + this.regExps = {}; + this.matchMappings = {}; + for (var key in this.states) { + var state = this.states[key]; + var ruleRegExps = []; + var matchTotal = 0; + var mapping = this.matchMappings[key] = { defaultToken: "text" }; + var flag = "g"; + var splitterRurles = []; + for (var i = 0; i < state.length; i++) { + var rule = state[i]; + if (rule.defaultToken) + mapping.defaultToken = rule.defaultToken; + if (rule.caseInsensitive && flag.indexOf("i") === -1) + flag += "i"; + if (rule.unicode && flag.indexOf("u") === -1) + flag += "u"; + if (rule.regex == null) + continue; + if (rule.regex instanceof RegExp) + rule.regex = rule.regex.toString().slice(1, -1); + var adjustedregex = rule.regex; + var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; + if (Array.isArray(rule.token)) { + if (rule.token.length == 1 || matchcount == 1) { + rule.token = rule.token[0]; + } + else if (matchcount - 1 != rule.token.length) { + this.reportError("number of classes and regexp groups doesn't match", { + rule: rule, + groupCount: matchcount - 1 + }); + rule.token = rule.token[0]; + } + else { + rule.tokenArray = rule.token; + rule.token = null; + rule.onMatch = this.$arrayTokens; + } + } + else if (typeof rule.token == "function" && !rule.onMatch) { + if (matchcount > 1) + rule.onMatch = this.$applyToken; + else + rule.onMatch = rule.token; + } + if (matchcount > 1) { + if (/\\\d/.test(rule.regex)) { + adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function (match, digit) { + return "\\" + (parseInt(digit, 10) + matchTotal + 1); + }); + } + else { + matchcount = 1; + adjustedregex = this.removeCapturingGroups(rule.regex); + } + if (!rule.splitRegex && typeof rule.token != "string") + splitterRurles.push(rule); // flag will be known only at the very end + } + mapping[matchTotal] = i; + matchTotal += matchcount; + ruleRegExps.push(adjustedregex); + if (!rule.onMatch) + rule.onMatch = null; + } + if (!ruleRegExps.length) { + mapping[0] = 0; + ruleRegExps.push("$"); + } + splitterRurles.forEach(function (rule) { + rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); + }, this); + this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); + } + } + Tokenizer.prototype.$setMaxTokenCount = function (m) { + MAX_TOKEN_COUNT = m | 0; + }; + Tokenizer.prototype.$applyToken = function (str) { + var values = this.splitRegex.exec(str).slice(1); + var types = this.token.apply(this, values); + if (typeof types === "string") + return [{ type: types, value: str }]; + var tokens = []; + for (var i = 0, l = types.length; i < l; i++) { + if (values[i]) + tokens[tokens.length] = { + type: types[i], + value: values[i] + }; + } + return tokens; + }; + Tokenizer.prototype.$arrayTokens = function (str) { + if (!str) + return []; + var values = this.splitRegex.exec(str); + if (!values) + return "text"; + var tokens = []; + var types = this.tokenArray; + for (var i = 0, l = types.length; i < l; i++) { + if (values[i + 1]) + tokens[tokens.length] = { + type: types[i], + value: values[i + 1] + }; + } + return tokens; + }; + Tokenizer.prototype.removeCapturingGroups = function (src) { + var r = src.replace(/\\.|\[(?:\\.|[^\\\]])*|\(\?[:=!<]|(\()/g, function (x, y) { return y ? "(?:" : x; }); + return r; + }; + Tokenizer.prototype.createSplitterRegexp = function (src, flag) { + if (src.indexOf("(?=") != -1) { + var stack = 0; + var inChClass = false; + var lastCapture = {}; + src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function (m, esc, parenOpen, parenClose, square, index) { + if (inChClass) { + inChClass = square != "]"; + } + else if (square) { + inChClass = true; + } + else if (parenClose) { + if (stack == lastCapture.stack) { + lastCapture.end = index + 1; + lastCapture.stack = -1; + } + stack--; + } + else if (parenOpen) { + stack++; + if (parenOpen.length != 1) { + lastCapture.stack = stack; + lastCapture.start = index; + } + } + return m; + }); + if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) + src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); + } + if (src.charAt(0) != "^") + src = "^" + src; + if (src.charAt(src.length - 1) != "$") + src += "$"; + return new RegExp(src, (flag || "").replace("g", "")); + }; + Tokenizer.prototype.getLineTokens = function (line, startState) { + if (startState && typeof startState != "string") { + var stack = startState.slice(0); + startState = stack[0]; + if (startState === "#tmp") { + stack.shift(); + startState = stack.shift(); + } + } + else + var stack = []; + var currentState = /**@type{string}*/ (startState) || "start"; + var state = this.states[currentState]; + if (!state) { + currentState = "start"; + state = this.states[currentState]; + } + var mapping = this.matchMappings[currentState]; + var re = this.regExps[currentState]; + re.lastIndex = 0; + var match, tokens = []; + var lastIndex = 0; + var matchAttempts = 0; + var token = { type: null, value: "" }; + while (match = re.exec(line)) { + var type = mapping.defaultToken; + var rule = null; + var value = match[0]; + var index = re.lastIndex; + if (index - value.length > lastIndex) { + var skipped = line.substring(lastIndex, index - value.length); + if (token.type == type) { + token.value += skipped; + } + else { + if (token.type) + tokens.push(token); + token = { type: type, value: skipped }; + } + } + for (var i = 0; i < match.length - 2; i++) { + if (match[i + 1] === undefined) + continue; + rule = state[mapping[i]]; + if (rule.onMatch) + type = rule.onMatch(value, currentState, stack, line); + else + type = rule.token; + if (rule.next) { + if (typeof rule.next == "string") { + currentState = rule.next; + } + else { + currentState = rule.next(currentState, stack); + } + state = this.states[currentState]; + if (!state) { + this.reportError("state doesn't exist", currentState); + currentState = "start"; + state = this.states[currentState]; + } + mapping = this.matchMappings[currentState]; + lastIndex = index; + re = this.regExps[currentState]; + re.lastIndex = index; + } + if (rule.consumeLineEnd) + lastIndex = index; + break; + } + if (value) { + if (typeof type === "string") { + if ((!rule || rule.merge !== false) && token.type === type) { + token.value += value; + } + else { + if (token.type) + tokens.push(token); + token = { type: type, value: value }; + } + } + else if (type) { + if (token.type) + tokens.push(token); + token = { type: null, value: "" }; + for (var i = 0; i < type.length; i++) + tokens.push(type[i]); + } + } + if (lastIndex == line.length) + break; + lastIndex = index; + if (matchAttempts++ > MAX_TOKEN_COUNT) { + if (matchAttempts > 2 * line.length) { + this.reportError("infinite loop with in ace tokenizer", { + startState: startState, + line: line + }); + } + while (lastIndex < line.length) { + if (token.type) + tokens.push(token); + token = { + value: line.substring(lastIndex, lastIndex += 500), + type: "overflow" + }; + } + currentState = "start"; + stack = []; + break; + } + } + if (token.type) + tokens.push(token); + if (stack.length > 1) { + if (stack[0] !== currentState) + stack.unshift("#tmp", currentState); + } + return { + tokens: tokens, + state: stack.length ? stack : currentState + }; + }; + return Tokenizer; +}()); +Tokenizer.prototype.reportError = reportError; +exports.Tokenizer = Tokenizer; +}); -.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before { - content: '\\f00d'; - font-family: FontAwesome; -} +ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/deep_copy"], function(require, exports, module){"use strict"; +var deepCopy = require("../lib/deep_copy").deepCopy; +var TextHighlightRules; +TextHighlightRules = function () { + this.$rules = { + "start": [{ + token: "empty_line", + regex: '^$' + }, { + defaultToken: "text" + }] + }; +}; +(function () { + this.addRules = function (rules, prefix) { + if (!prefix) { + for (var key in rules) + this.$rules[key] = rules[key]; + return; + } + for (var key in rules) { + var state = rules[key]; + for (var i = 0; i < state.length; i++) { + var rule = state[i]; + if (rule.next || rule.onMatch) { + if (typeof rule.next == "string") { + if (rule.next.indexOf(prefix) !== 0) + rule.next = prefix + rule.next; + } + if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) + rule.nextState = prefix + rule.nextState; + } + } + this.$rules[prefix + key] = state; + } + }; + this.getRules = function () { + return this.$rules; + }; + this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { + var embedRules = typeof HighlightRules == "function" + ? new HighlightRules().getRules() + : HighlightRules; + if (states) { + for (var i = 0; i < states.length; i++) + states[i] = prefix + states[i]; + } + else { + states = []; + for (var key in embedRules) + states.push(prefix + key); + } + this.addRules(embedRules, prefix); + if (escapeRules) { + var addRules = Array.prototype[append ? "push" : "unshift"]; + for (var i = 0; i < states.length; i++) + addRules.apply(this.$rules[states[i]], deepCopy(escapeRules)); + } + if (!this.$embeds) + this.$embeds = []; + this.$embeds.push(prefix); + }; + this.getEmbeds = function () { + return this.$embeds; + }; + var pushState = function (currentState, stack) { + if (currentState != "start" || stack.length) + stack.unshift(this.nextState, currentState); + return this.nextState; + }; + var popState = function (currentState, stack) { + stack.shift(); + return stack.shift() || "start"; + }; + this.normalizeRules = function () { + var id = 0; + var rules = this.$rules; + function processState(key) { + var state = rules[key]; + state["processed"] = true; + for (var i = 0; i < state.length; i++) { + var rule = state[i]; + var toInsert = null; + if (Array.isArray(rule)) { + toInsert = rule; + rule = {}; + } + if (!rule.regex && rule.start) { + rule.regex = rule.start; + if (!rule.next) + rule.next = []; + rule.next.push({ + defaultToken: rule.token + }, { + token: rule.token + ".end", + regex: rule.end || rule.start, + next: "pop" + }); + rule.token = rule.token + ".start"; + rule.push = true; + } + var next = rule.next || rule.push; + if (next && Array.isArray(next)) { + var stateName = rule.stateName; + if (!stateName) { + stateName = rule.token; + if (typeof stateName != "string") + stateName = stateName[0] || ""; + if (rules[stateName]) + stateName += id++; + } + rules[stateName] = next; + rule.next = stateName; + processState(stateName); + } + else if (next == "pop") { + rule.next = popState; + } + if (rule.push) { + rule.nextState = rule.next || rule.push; + rule.next = pushState; + delete rule.push; + } + if (rule.rules) { + for (var r in rule.rules) { + if (rules[r]) { + if (rules[r].push) + rules[r].push.apply(rules[r], rule.rules[r]); + } + else { + rules[r] = rule.rules[r]; + } + } + } + var includeName = typeof rule == "string" ? rule : rule.include; + if (includeName) { + if (includeName === "$self") + includeName = "start"; + if (Array.isArray(includeName)) + toInsert = includeName.map(function (x) { return rules[x]; }); + else + toInsert = rules[includeName]; + } + if (toInsert) { + var args = [i, 1].concat(toInsert); + if (rule.noEscape) + args = args.filter(function (x) { return !x.next; }); + state.splice.apply(state, args); + i--; + } + if (rule.keywordMap) { + rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive); + delete rule.defaultToken; + } + } + } + Object.keys(rules).forEach(processState, this); + }; + this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) { + var keywords = Object.create(null); + this.$keywordList = []; + Object.keys(map).forEach(function (className) { + var a = map[className]; + var list = a.split(splitChar || "|"); + for (var i = list.length; i--;) { + var word = list[i]; + this.$keywordList.push(word); + if (ignoreCase) + word = word.toLowerCase(); + keywords[word] = className; + } + }, this); + map = null; + return ignoreCase + ? function (value) { return keywords[value.toLowerCase()] || defaultToken; } + : function (value) { return keywords[value] || defaultToken; }; + }; + this.getKeywords = function () { + return this.$keywords; + }; +}).call(TextHighlightRules.prototype); +exports.TextHighlightRules = TextHighlightRules; +}); -.p-TabBar-tab.p-mod-drag-image { - min-height: 23px; - max-height: 23px; - min-width: 125px; - border: none; - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); - transform: translateX(-40%) translateY(-58%); -} +ace.define("ace/mode/behaviour",["require","exports","module"], function(require, exports, module){"use strict"; +var Behaviour; +Behaviour = function () { + this.$behaviours = {}; +}; +(function () { + this.add = function (name, action, callback) { + switch (undefined) { + case this.$behaviours: + this.$behaviours = {}; + case this.$behaviours[name]: + this.$behaviours[name] = {}; + } + this.$behaviours[name][action] = callback; + }; + this.addBehaviours = function (behaviours) { + for (var key in behaviours) { + for (var action in behaviours[key]) { + this.add(key, action, behaviours[key][action]); + } + } + }; + this.remove = function (name) { + if (this.$behaviours && this.$behaviours[name]) { + delete this.$behaviours[name]; + } + }; + this.inherit = function (mode, filter) { + if (typeof mode === "function") { + var behaviours = new mode().getBehaviours(filter); + } + else { + var behaviours = mode.getBehaviours(filter); + } + this.addBehaviours(behaviours); + }; + this.getBehaviours = function (filter) { + if (!filter) { + return this.$behaviours; + } + else { + var ret = {}; + for (var i = 0; i < filter.length; i++) { + if (this.$behaviours[filter[i]]) { + ret[filter[i]] = this.$behaviours[filter[i]]; + } + } + return ret; + } + }; +}).call(Behaviour.prototype); +exports.Behaviour = Behaviour; -.p-DockPanel-overlay { - background: rgba(255, 255, 255, 0.6); - border: 1px dashed black; - transition-property: top, left, right, bottom; - transition-duration: 150ms; - transition-timing-function: ease; -} +}); -.content { - min-width: 50px; - min-height: 50px; - display: flex; - flex-direction: column; - padding: 8px; - border: 1px solid #C0C0C0; - border-top: none; - background: white; - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); -} +ace.define("ace/token_iterator",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var Range = require("./range").Range; +var TokenIterator = /** @class */ (function () { + function TokenIterator(session, initialRow, initialColumn) { + this.$session = session; + this.$row = initialRow; + this.$rowTokens = session.getTokens(initialRow); + var token = session.getTokenAt(initialRow, initialColumn); + this.$tokenIndex = token ? token.index : -1; + } + TokenIterator.prototype.stepBackward = function () { + this.$tokenIndex -= 1; + while (this.$tokenIndex < 0) { + this.$row -= 1; + if (this.$row < 0) { + this.$row = 0; + return null; + } + this.$rowTokens = this.$session.getTokens(this.$row); + this.$tokenIndex = this.$rowTokens.length - 1; + } + return this.$rowTokens[this.$tokenIndex]; + }; + TokenIterator.prototype.stepForward = function () { + this.$tokenIndex += 1; + var rowCount; + while (this.$tokenIndex >= this.$rowTokens.length) { + this.$row += 1; + if (!rowCount) + rowCount = this.$session.getLength(); + if (this.$row >= rowCount) { + this.$row = rowCount - 1; + return null; + } + this.$rowTokens = this.$session.getTokens(this.$row); + this.$tokenIndex = 0; + } + return this.$rowTokens[this.$tokenIndex]; + }; + TokenIterator.prototype.getCurrentToken = function () { + return this.$rowTokens[this.$tokenIndex]; + }; + TokenIterator.prototype.getCurrentTokenRow = function () { + return this.$row; + }; + TokenIterator.prototype.getCurrentTokenColumn = function () { + var rowTokens = this.$rowTokens; + var tokenIndex = this.$tokenIndex; + var column = rowTokens[tokenIndex].start; + if (column !== undefined) + return column; + column = 0; + while (tokenIndex > 0) { + tokenIndex -= 1; + column += rowTokens[tokenIndex].value.length; + } + return column; + }; + TokenIterator.prototype.getCurrentTokenPosition = function () { + return { row: this.$row, column: this.getCurrentTokenColumn() }; + }; + TokenIterator.prototype.getCurrentTokenRange = function () { + var token = this.$rowTokens[this.$tokenIndex]; + var column = this.getCurrentTokenColumn(); + return new Range(this.$row, column, this.$row, column + token.value.length); + }; + return TokenIterator; +}()); +exports.TokenIterator = TokenIterator; -.content > div { - flex: 1 1 auto; - overflow: auto; -} +}); -body { - display: flex; - flex-direction: column; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - margin: 0; - padding: 0; - overflow: hidden; +ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module){"use strict"; +var oop = require("../../lib/oop"); +var Behaviour = require("../behaviour").Behaviour; +var TokenIterator = require("../../token_iterator").TokenIterator; +var lang = require("../../lib/lang"); +var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "rparen", "paren", "punctuation.operator"]; +var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "rparen", "paren", "punctuation.operator", "comment"]; +var context; +var contextCache = {}; +var defaultQuotes = { '"': '"', "'": "'" }; +var initContext = function (editor) { + var id = -1; + if (editor.multiSelect) { + id = editor.selection.index; + if (contextCache.rangeCount != editor.multiSelect.rangeCount) + contextCache = { rangeCount: editor.multiSelect.rangeCount }; + } + if (contextCache[id]) + return context = contextCache[id]; + context = contextCache[id] = { + autoInsertedBrackets: 0, + autoInsertedRow: -1, + autoInsertedLineEnd: "", + maybeInsertedBrackets: 0, + maybeInsertedRow: -1, + maybeInsertedLineStart: "", + maybeInsertedLineEnd: "" + }; +}; +var getWrapped = function (selection, selected, opening, closing) { + var rowDiff = selection.end.row - selection.start.row; + return { + text: opening + selected + closing, + selection: [ + 0, + selection.start.column + 1, + rowDiff, + selection.end.column + (rowDiff ? 0 : 1) + ] + }; +}; +var CstyleBehaviour; +CstyleBehaviour = function (options) { + options = options || {}; + this.add("braces", "insertion", function (state, action, editor, session, text) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (text == '{') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + var token = session.getTokenAt(cursor.row, cursor.column); + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '{', '}'); + } + else if (token && /(?:string)\.quasi|\.xml/.test(token.type)) { + var excludeTokens = [ + /tag\-(?:open|name)/, /attribute\-name/ + ]; + if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\.quasi/.test(token.type) + && token.value[cursor.column - token.start - 1] !== '$') + return; + CstyleBehaviour.recordAutoInsert(editor, session, "}"); + return { + text: '{}', + selection: [1, 1] + }; + } + else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) { + CstyleBehaviour.recordAutoInsert(editor, session, "}"); + return { + text: '{}', + selection: [1, 1] + }; + } + else { + CstyleBehaviour.recordMaybeInsert(editor, session, "{"); + return { + text: '{', + selection: [1, 1] + }; + } + } + } + else if (text == '}') { + initContext(editor); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == '}') { + var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row }); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + else if (text == "\n" || text == "\r\n") { + initContext(editor); + var closing = ""; + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { + closing = lang.stringRepeat("}", context.maybeInsertedBrackets); + CstyleBehaviour.clearMaybeInsertedClosing(); + } + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar === '}') { + var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}'); + if (!openBracePos) + return null; + var next_indent = this.$getIndent(session.getLine(openBracePos.row)); + } + else if (closing) { + var next_indent = this.$getIndent(line); + } + else { + CstyleBehaviour.clearMaybeInsertedClosing(); + return; + } + var indent = next_indent + session.getTabString(); + return { + text: '\n' + indent + '\n' + next_indent + closing, + selection: [1, indent.length, 1, indent.length] + }; + } + else { + CstyleBehaviour.clearMaybeInsertedClosing(); + } + }); + this.add("braces", "deletion", function (state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '{') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.end.column, range.end.column + 1); + if (rightChar == '}') { + range.end.column++; + return range; + } + else { + context.maybeInsertedBrackets--; + } + } + }); + this.add("parens", "insertion", function (state, action, editor, session, text) { + if (text == '(') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '(', ')'); + } + else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, ")"); + return { + text: '()', + selection: [1, 1] + }; + } + } + else if (text == ')') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ')') { + var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row }); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + this.add("parens", "deletion", function (state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '(') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ')') { + range.end.column++; + return range; + } + } + }); + this.add("brackets", "insertion", function (state, action, editor, session, text) { + if (text == '[') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '[', ']'); + } + else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, "]"); + return { + text: '[]', + selection: [1, 1] + }; + } + } + else if (text == ']') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ']') { + var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row }); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + this.add("brackets", "deletion", function (state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '[') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ']') { + range.end.column++; + return range; + } + } + }); + this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { + var quotes = session.$mode.$quotes || defaultQuotes; + if (text.length == 1 && quotes[text]) { + if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) + return; + initContext(editor); + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, quote, quote); + } + else if (!selected) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var leftChar = line.substring(cursor.column - 1, cursor.column); + var rightChar = line.substring(cursor.column, cursor.column + 1); + var token = session.getTokenAt(cursor.row, cursor.column); + var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); + if (leftChar == "\\" && token && /escape/.test(token.type)) + return null; + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); + var pair; + if (rightChar == quote) { + pair = stringBefore !== stringAfter; + if (pair && /string\.end/.test(rightToken.type)) + pair = false; + } + else { + if (stringBefore && !stringAfter) + return null; // wrap string with different quote + if (stringBefore && stringAfter) + return null; // do not pair quotes inside strings + var wordRe = session.$mode.tokenRe; + wordRe.lastIndex = 0; + var isWordBefore = wordRe.test(leftChar); + wordRe.lastIndex = 0; + var isWordAfter = wordRe.test(rightChar); + var pairQuotesAfter = session.$mode.$pairQuotesAfter; + var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar); + if ((!shouldPairQuotes && isWordBefore) || isWordAfter) + return null; // before or after alphanumeric + if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) + return null; // there is rightChar and it isn't closing + var charBefore = line[cursor.column - 2]; + if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore))) + return null; + pair = true; + } + return { + text: pair ? quote + quote : "", + selection: [1, 1] + }; + } + } + }); + this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { + var quotes = session.$mode.$quotes || defaultQuotes; + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == selected) { + range.end.column++; + return range; + } + } + }); + if (options.closeDocComment !== false) { + this.add("doc comment end", "insertion", function (state, action, editor, session, text) { + if (state === "doc-start" && (text === "\n" || text === "\r\n") && editor.selection.isEmpty()) { + var cursor = editor.getCursorPosition(); + if (cursor.column === 0) { + return; + } + var line = session.doc.getLine(cursor.row); + var nextLine = session.doc.getLine(cursor.row + 1); + var tokens = session.getTokens(cursor.row); + var index = 0; + for (var i = 0; i < tokens.length; i++) { + index += tokens[i].value.length; + var currentToken = tokens[i]; + if (index >= cursor.column) { + if (index === cursor.column) { + if (!/\.doc/.test(currentToken.type)) { + return; + } + if (/\*\//.test(currentToken.value)) { + var nextToken = tokens[i + 1]; + if (!nextToken || !/\.doc/.test(nextToken.type)) { + return; + } + } + } + var cursorPosInToken = cursor.column - (index - currentToken.value.length); + var closeDocPos = currentToken.value.indexOf("*/"); + var openDocPos = currentToken.value.indexOf("/**", closeDocPos > -1 ? closeDocPos + 2 : 0); + if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) { + return; + } + if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos + && cursorPosInToken <= openDocPos || !/\.doc/.test(currentToken.type)) { + return; + } + break; + } + } + var indent = this.$getIndent(line); + if (/\s*\*/.test(nextLine)) { + if (/^\s*\*/.test(line)) { + return { + text: text + indent + "* ", + selection: [1, 2 + indent.length, 1, 2 + indent.length] + }; + } + else { + return { + text: text + indent + " * ", + selection: [1, 3 + indent.length, 1, 3 + indent.length] + }; + } + } + if (/\/\*\*/.test(line.substring(0, cursor.column))) { + return { + text: text + indent + " * " + text + " " + indent + "*/", + selection: [1, 4 + indent.length, 1, 4 + indent.length] + }; + } + } + }); + } +}; +CstyleBehaviour.isSaneInsertion = function (editor, session) { + var cursor = editor.getCursorPosition(); + var iterator = new TokenIterator(session, cursor.row, cursor.column); + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { + if (/[)}\]]/.test(editor.session.getLine(cursor.row)[cursor.column])) + return true; + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) + return false; + } + iterator.stepForward(); + return iterator.getCurrentTokenRow() !== cursor.row || + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); +}; +CstyleBehaviour["$matchTokenType"] = function (token, types) { + return types.indexOf(token.type || token) > -1; +}; +CstyleBehaviour["recordAutoInsert"] = function (editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this["isAutoInsertedClosing"](cursor, line, context.autoInsertedLineEnd[0])) + context.autoInsertedBrackets = 0; + context.autoInsertedRow = cursor.row; + context.autoInsertedLineEnd = bracket + line.substr(cursor.column); + context.autoInsertedBrackets++; +}; +CstyleBehaviour["recordMaybeInsert"] = function (editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this["isMaybeInsertedClosing"](cursor, line)) + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = cursor.row; + context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; + context.maybeInsertedLineEnd = line.substr(cursor.column); + context.maybeInsertedBrackets++; +}; +CstyleBehaviour["isAutoInsertedClosing"] = function (cursor, line, bracket) { + return context.autoInsertedBrackets > 0 && + cursor.row === context.autoInsertedRow && + bracket === context.autoInsertedLineEnd[0] && + line.substr(cursor.column) === context.autoInsertedLineEnd; +}; +CstyleBehaviour["isMaybeInsertedClosing"] = function (cursor, line) { + return context.maybeInsertedBrackets > 0 && + cursor.row === context.maybeInsertedRow && + line.substr(cursor.column) === context.maybeInsertedLineEnd && + line.substr(0, cursor.column) == context.maybeInsertedLineStart; +}; +CstyleBehaviour["popAutoInsertedClosing"] = function () { + context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); + context.autoInsertedBrackets--; +}; +CstyleBehaviour["clearMaybeInsertedClosing"] = function () { + if (context) { + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = -1; + } +}; +oop.inherits(CstyleBehaviour, Behaviour); +exports.CstyleBehaviour = CstyleBehaviour; -} +}); -#main { - flex: 1 1 auto; +ace.define("ace/unicode",["require","exports","module"], function(require, exports, module){"use strict"; +var wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2]; +var code = 0; +var str = []; +for (var i = 0; i < wordChars.length; i += 2) { + str.push(code += wordChars[i]); + if (wordChars[i + 1]) + str.push(45, code += wordChars[i + 1]); } +exports.wordChars = String.fromCharCode.apply(null, str); +}); -.side-info { - margin: 5px; - font-size: 14px; -} - -.side-info .main h1 { - margin: 0; -} +ace.define("ace/mode/text",["require","exports","module","ace/config","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"], function(require, exports, module){"use strict"; +var config = require("../config"); +var Tokenizer = require("../tokenizer").Tokenizer; +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; +var unicode = require("../unicode"); +var lang = require("../lib/lang"); +var TokenIterator = require("../token_iterator").TokenIterator; +var Range = require("../range").Range; +var Mode; +Mode = function () { + this.HighlightRules = TextHighlightRules; +}; +(function () { + this.$defaultBehaviour = new CstyleBehaviour(); + this.tokenRe = new RegExp("^[" + unicode.wordChars + "\\$_]+", "g"); + this.nonTokenRe = new RegExp("^(?:[^" + unicode.wordChars + "\\$_]|\\s])+", "g"); + this.getTokenizer = function () { + if (!this.$tokenizer) { + this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig); + this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); + } + return this.$tokenizer; + }; + this.lineCommentStart = ""; + this.blockComment = ""; + this.toggleCommentLines = function (state, session, startRow, endRow) { + var doc = session.doc; + var ignoreBlankLines = true; + var shouldRemove = true; + var minIndent = Infinity; + var tabSize = session.getTabSize(); + var insertAtTabStop = false; + if (!this.lineCommentStart) { + if (!this.blockComment) + return false; + var lineCommentStart = this.blockComment.start; + var lineCommentEnd = this.blockComment.end; + var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); + var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); + var comment = function (line, i) { + if (testRemove(line, i)) + return; + if (!ignoreBlankLines || /\S/.test(line)) { + doc.insertInLine({ row: i, column: line.length }, lineCommentEnd); + doc.insertInLine({ row: i, column: minIndent }, lineCommentStart); + } + }; + var uncomment = function (line, i) { + var m; + if (m = line.match(regexpEnd)) + doc.removeInLine(i, line.length - m[0].length, line.length); + if (m = line.match(regexpStart)) + doc.removeInLine(i, m[1].length, m[0].length); + }; + var testRemove = function (line, row) { + if (regexpStart.test(line)) + return true; + var tokens = session.getTokens(row); + for (var i = 0; i < tokens.length; i++) { + if (tokens[i].type === "comment") + return true; + } + }; + } + else { + if (Array.isArray(this.lineCommentStart)) { + var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); + var lineCommentStart = this.lineCommentStart[0]; + } + else { + var regexpStart = lang.escapeRegExp(this.lineCommentStart); + var lineCommentStart = this.lineCommentStart; + } + regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); + insertAtTabStop = session.getUseSoftTabs(); + var uncomment = function (line, i) { + var m = line.match(regexpStart); + if (!m) + return; + var start = m[1].length, end = m[0].length; + if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") + end--; + doc.removeInLine(i, start, end); + }; + var commentWithSpace = lineCommentStart + " "; + var comment = function (line, i) { + if (!ignoreBlankLines || /\S/.test(line)) { + if (shouldInsertSpace(line, minIndent, minIndent)) + doc.insertInLine({ row: i, column: minIndent }, commentWithSpace); + else + doc.insertInLine({ row: i, column: minIndent }, lineCommentStart); + } + }; + var testRemove = function (line, i) { + return regexpStart.test(line); + }; + var shouldInsertSpace = function (line, before, after) { + var spaces = 0; + while (before-- && line.charAt(before) == " ") + spaces++; + if (spaces % tabSize != 0) + return false; + var spaces = 0; + while (line.charAt(after++) == " ") + spaces++; + if (tabSize > 2) + return spaces % tabSize != tabSize - 1; + else + return spaces % tabSize == 0; + }; + } + function iter(fun) { + for (var i = startRow; i <= endRow; i++) + fun(doc.getLine(i), i); + } + var minEmptyLength = Infinity; + iter(function (line, i) { + var indent = line.search(/\S/); + if (indent !== -1) { + if (indent < minIndent) + minIndent = indent; + if (shouldRemove && !testRemove(line, i)) + shouldRemove = false; + } + else if (minEmptyLength > line.length) { + minEmptyLength = line.length; + } + }); + if (minIndent == Infinity) { + minIndent = minEmptyLength; + ignoreBlankLines = false; + shouldRemove = false; + } + if (insertAtTabStop && minIndent % tabSize != 0) + minIndent = Math.floor(minIndent / tabSize) * tabSize; + iter(shouldRemove ? uncomment : comment); + }; + this.toggleBlockComment = function (state, session, range, cursor) { + var comment = this.blockComment; + if (!comment) + return; + if (!comment.start && comment[0]) + comment = comment[0]; + var iterator = new TokenIterator(session, cursor.row, cursor.column); + var token = iterator.getCurrentToken(); + var sel = session.selection; + var initialRange = session.selection.toOrientedRange(); + var startRow, colDiff; + if (token && /comment/.test(token.type)) { + var startRange, endRange; + while (token && /comment/.test(token.type)) { + var i = token.value.indexOf(comment.start); + if (i != -1) { + var row = iterator.getCurrentTokenRow(); + var column = iterator.getCurrentTokenColumn() + i; + startRange = new Range(row, column, row, column + comment.start.length); + break; + } + token = iterator.stepBackward(); + } + var iterator = new TokenIterator(session, cursor.row, cursor.column); + var token = iterator.getCurrentToken(); + while (token && /comment/.test(token.type)) { + var i = token.value.indexOf(comment.end); + if (i != -1) { + var row = iterator.getCurrentTokenRow(); + var column = iterator.getCurrentTokenColumn() + i; + endRange = new Range(row, column, row, column + comment.end.length); + break; + } + token = iterator.stepForward(); + } + if (endRange) + session.remove(endRange); + if (startRange) { + session.remove(startRange); + startRow = startRange.start.row; + colDiff = -comment.start.length; + } + } + else { + colDiff = comment.start.length; + startRow = range.start.row; + session.insert(range.end, comment.end); + session.insert(range.start, comment.start); + } + if (initialRange.start.row == startRow) + initialRange.start.column += colDiff; + if (initialRange.end.row == startRow) + initialRange.end.column += colDiff; + session.selection.fromOrientedRange(initialRange); + }; + this.getNextLineIndent = function (state, line, tab) { + return this.$getIndent(line); + }; + this.checkOutdent = function (state, line, input) { + return false; + }; + this.autoOutdent = function (state, doc, row) { + }; + this.$getIndent = function (line) { + return line.match(/^\s*/)[0]; + }; + this.createWorker = function (session) { + return null; + }; + this.createModeDelegates = function (mapping) { + this.$embeds = []; + this.$modes = {}; + for (var i in mapping) { + if (mapping[i]) { + var Mode = mapping[i]; + var id = Mode.prototype.$id; + var mode = config.$modes[id]; + if (!mode) + config.$modes[id] = mode = new Mode(); + if (!config.$modes[i]) + config.$modes[i] = mode; + this.$embeds.push(i); + this.$modes[i] = mode; + } + } + var delegations = ["toggleBlockComment", "toggleCommentLines", "getNextLineIndent", + "checkOutdent", "autoOutdent", "transformAction", "getCompletions"]; + var _loop_1 = function (i) { + (function (scope) { + var functionName = delegations[i]; + var defaultHandler = scope[functionName]; + scope[delegations[i]] = + function () { + return this.$delegator(functionName, arguments, defaultHandler); + }; + }(this_1)); + }; + var this_1 = this; + for (var i = 0; i < delegations.length; i++) { + _loop_1(i); + } + }; + this.$delegator = function (method, args, defaultHandler) { + var state = args[0] || "start"; + if (typeof state != "string") { + if (Array.isArray(state[2])) { + var language = state[2][state[2].length - 1]; + var mode = this.$modes[language]; + if (mode) + return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1))); + } + state = state[0] || "start"; + } + for (var i = 0; i < this.$embeds.length; i++) { + if (!this.$modes[this.$embeds[i]]) + continue; + var split = state.split(this.$embeds[i]); + if (!split[0] && split[1]) { + args[0] = split[1]; + var mode = this.$modes[this.$embeds[i]]; + return mode[method].apply(mode, args); + } + } + var ret = defaultHandler.apply(this, args); + return defaultHandler ? ret : undefined; + }; + this.transformAction = function (state, action, editor, session, param) { + if (this.$behaviour) { + var behaviours = this.$behaviour.getBehaviours(); + for (var key in behaviours) { + if (behaviours[key][action]) { + var ret = behaviours[key][action].apply(this, arguments); + if (ret) { + return ret; + } + } + } + } + }; + this.getKeywords = function (append) { + if (!this.completionKeywords) { + var rules = this.$tokenizer["rules"]; + var completionKeywords = []; + for (var rule in rules) { + var ruleItr = rules[rule]; + for (var r = 0, l = ruleItr.length; r < l; r++) { + if (typeof ruleItr[r].token === "string") { + if (/keyword|support|storage/.test(ruleItr[r].token)) + completionKeywords.push(ruleItr[r].regex); + } + else if (typeof ruleItr[r].token === "object") { + for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { + if (/keyword|support|storage/.test(ruleItr[r].token[a])) { + var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; + completionKeywords.push(rule.substr(1, rule.length - 2)); + } + } + } + } + } + this.completionKeywords = completionKeywords; + } + if (!append) + return this.$keywordList; + return completionKeywords.concat(this.$keywordList || []); + }; + this.$createKeywordList = function () { + if (!this.$highlightRules) + this.getTokenizer(); + return this.$keywordList = this.$highlightRules.$keywordList || []; + }; + this.getCompletions = function (state, session, pos, prefix) { + var keywords = this.$keywordList || this.$createKeywordList(); + return keywords.map(function (word) { + return { + name: word, + value: word, + score: 0, + meta: "keyword" + }; + }); + }; + this.$id = "ace/mode/text"; +}).call(Mode.prototype); +exports.Mode = Mode; -.side-info .main h3 { - margin: 0 0 8px 0; -} +}); -.side-info .attr { - display: block; - margin: 3px 0; -} +ace.define("ace/line_widgets",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; +var dom = require("./lib/dom"); +var LineWidgets = /** @class */ (function () { + function LineWidgets(session) { + this.session = session; + this.session.widgetManager = this; + this.session.getRowLength = this.getRowLength; + this.session.$getWidgetScreenLength = this.$getWidgetScreenLength; + this.updateOnChange = this.updateOnChange.bind(this); + this.renderWidgets = this.renderWidgets.bind(this); + this.measureWidgets = this.measureWidgets.bind(this); + this.session._changedWidgets = []; + this.$onChangeEditor = this.$onChangeEditor.bind(this); + this.session.on("change", this.updateOnChange); + this.session.on("changeFold", this.updateOnFold); + this.session.on("changeEditor", this.$onChangeEditor); + } + LineWidgets.prototype.getRowLength = function (row) { + var h; + if (this.lineWidgets) + h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; + else + h = 0; + if (!this["$useWrapMode"] || !this["$wrapData"][row]) { + return 1 + h; + } + else { + return this["$wrapData"][row].length + 1 + h; + } + }; + LineWidgets.prototype.$getWidgetScreenLength = function () { + var screenRows = 0; + this.lineWidgets.forEach(function (w) { + if (w && w.rowCount && !w.hidden) + screenRows += w.rowCount; + }); + return screenRows; + }; + LineWidgets.prototype.$onChangeEditor = function (e) { + this.attach(e.editor); + }; + LineWidgets.prototype.attach = function (editor) { + if (editor && editor.widgetManager && editor.widgetManager != this) + editor.widgetManager.detach(); + if (this.editor == editor) + return; + this.detach(); + this.editor = editor; + if (editor) { + editor.widgetManager = this; + editor.renderer.on("beforeRender", this.measureWidgets); + editor.renderer.on("afterRender", this.renderWidgets); + } + }; + LineWidgets.prototype.detach = function (e) { + var editor = this.editor; + if (!editor) + return; + this.editor = null; + editor.widgetManager = null; + editor.renderer.off("beforeRender", this.measureWidgets); + editor.renderer.off("afterRender", this.renderWidgets); + var lineWidgets = this.session.lineWidgets; + lineWidgets && lineWidgets.forEach(function (w) { + if (w && w.el && w.el.parentNode) { + w._inDocument = false; + w.el.parentNode.removeChild(w.el); + } + }); + }; + LineWidgets.prototype.updateOnFold = function (e, session) { + var lineWidgets = session.lineWidgets; + if (!lineWidgets || !e.action) + return; + var fold = e.data; + var start = fold.start.row; + var end = fold.end.row; + var hide = e.action == "add"; + for (var i = start + 1; i < end; i++) { + if (lineWidgets[i]) + lineWidgets[i].hidden = hide; + } + if (lineWidgets[end]) { + if (hide) { + if (!lineWidgets[start]) + lineWidgets[start] = lineWidgets[end]; + else + lineWidgets[end].hidden = hide; + } + else { + if (lineWidgets[start] == lineWidgets[end]) + lineWidgets[start] = undefined; + lineWidgets[end].hidden = hide; + } + } + }; + LineWidgets.prototype.updateOnChange = function (delta) { + var lineWidgets = this.session.lineWidgets; + if (!lineWidgets) + return; + var startRow = delta.start.row; + var len = delta.end.row - startRow; + if (len === 0) { + } + else if (delta.action == "remove") { + var removed = lineWidgets.splice(startRow + 1, len); + if (!lineWidgets[startRow] && removed[removed.length - 1]) { + lineWidgets[startRow] = removed.pop(); + } + removed.forEach(function (w) { + w && this.removeLineWidget(w); + }, this); + this.$updateRows(); + } + else { + var args = new Array(len); + if (lineWidgets[startRow] && lineWidgets[startRow].column != null) { + if (delta.start.column > lineWidgets[startRow].column) + startRow++; + } + args.unshift(startRow, 0); + lineWidgets.splice.apply(lineWidgets, args); + this.$updateRows(); + } + }; + LineWidgets.prototype.$updateRows = function () { + var lineWidgets = this.session.lineWidgets; + if (!lineWidgets) + return; + var noWidgets = true; + lineWidgets.forEach(function (w, i) { + if (w) { + noWidgets = false; + w.row = i; + while (w.$oldWidget) { + w.$oldWidget.row = i; + w = w.$oldWidget; + } + } + }); + if (noWidgets) + this.session.lineWidgets = null; + }; + LineWidgets.prototype.$registerLineWidget = function (w) { + if (!this.session.lineWidgets) + this.session.lineWidgets = new Array(this.session.getLength()); + var old = this.session.lineWidgets[w.row]; + if (old) { + w.$oldWidget = old; + if (old.el && old.el.parentNode) { + old.el.parentNode.removeChild(old.el); + old._inDocument = false; + } + } + this.session.lineWidgets[w.row] = w; + return w; + }; + LineWidgets.prototype.addLineWidget = function (w) { + this.$registerLineWidget(w); + w.session = this.session; + if (!this.editor) + return w; + var renderer = this.editor.renderer; + if (w.html && !w.el) { + w.el = dom.createElement("div"); + w.el.innerHTML = w.html; + } + if (w.text && !w.el) { + w.el = dom.createElement("div"); + w.el.textContent = w.text; + } + if (w.el) { + dom.addCssClass(w.el, "ace_lineWidgetContainer"); + if (w.className) { + dom.addCssClass(w.el, w.className); + } + w.el.style.position = "absolute"; + w.el.style.zIndex = "5"; + renderer.container.appendChild(w.el); + w._inDocument = true; + if (!w.coverGutter) { + w.el.style.zIndex = "3"; + } + if (w.pixelHeight == null) { + w.pixelHeight = w.el.offsetHeight; + } + } + if (w.rowCount == null) { + w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; + } + var fold = this.session.getFoldAt(w.row, 0); + w.$fold = fold; + if (fold) { + var lineWidgets = this.session.lineWidgets; + if (w.row == fold.end.row && !lineWidgets[fold.start.row]) + lineWidgets[fold.start.row] = w; + else + w.hidden = true; + } + this.session._emit("changeFold", { data: { start: { row: w.row } } }); + this.$updateRows(); + this.renderWidgets(null, renderer); + this.onWidgetChanged(w); + return w; + }; + LineWidgets.prototype.removeLineWidget = function (w) { + w._inDocument = false; + w.session = null; + if (w.el && w.el.parentNode) + w.el.parentNode.removeChild(w.el); + if (w.editor && w.editor.destroy) + try { + w.editor.destroy(); + } + catch (e) { } + if (this.session.lineWidgets) { + var w1 = this.session.lineWidgets[w.row]; + if (w1 == w) { + this.session.lineWidgets[w.row] = w.$oldWidget; + if (w.$oldWidget) + this.onWidgetChanged(w.$oldWidget); + } + else { + while (w1) { + if (w1.$oldWidget == w) { + w1.$oldWidget = w.$oldWidget; + break; + } + w1 = w1.$oldWidget; + } + } + } + this.session._emit("changeFold", { data: { start: { row: w.row } } }); + this.$updateRows(); + }; + LineWidgets.prototype.getWidgetsAtRow = function (row) { + var lineWidgets = this.session.lineWidgets; + var w = lineWidgets && lineWidgets[row]; + var list = []; + while (w) { + list.push(w); + w = w.$oldWidget; + } + return list; + }; + LineWidgets.prototype.onWidgetChanged = function (w) { + this.session._changedWidgets.push(w); + this.editor && this.editor.renderer.updateFull(); + }; + LineWidgets.prototype.measureWidgets = function (e, renderer) { + var changedWidgets = this.session._changedWidgets; + var config = renderer.layerConfig; + if (!changedWidgets || !changedWidgets.length) + return; + var min = Infinity; + for (var i = 0; i < changedWidgets.length; i++) { + var w = changedWidgets[i]; + if (!w || !w.el) + continue; + if (w.session != this.session) + continue; + if (!w._inDocument) { + if (this.session.lineWidgets[w.row] != w) + continue; + w._inDocument = true; + renderer.container.appendChild(w.el); + } + w.h = w.el.offsetHeight; + if (!w.fixedWidth) { + w.w = w.el.offsetWidth; + w.screenWidth = Math.ceil(w.w / config.characterWidth); + } + var rowCount = w.h / config.lineHeight; + if (w.coverLine) { + rowCount -= this.session.getRowLineCount(w.row); + if (rowCount < 0) + rowCount = 0; + } + if (w.rowCount != rowCount) { + w.rowCount = rowCount; + if (w.row < min) + min = w.row; + } + } + if (min != Infinity) { + this.session._emit("changeFold", { data: { start: { row: min } } }); + this.session.lineWidgetWidth = null; + } + this.session._changedWidgets = []; + }; + LineWidgets.prototype.renderWidgets = function (e, renderer) { + var config = renderer.layerConfig; + var lineWidgets = this.session.lineWidgets; + if (!lineWidgets) + return; + var first = Math.min(this.firstRow, config.firstRow); + var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length); + while (first > 0 && !lineWidgets[first]) + first--; + this.firstRow = config.firstRow; + this.lastRow = config.lastRow; + renderer.$cursorLayer.config = config; + for (var i = first; i <= last; i++) { + var w = lineWidgets[i]; + if (!w || !w.el) + continue; + if (w.hidden) { + w.el.style.top = -100 - (w.pixelHeight || 0) + "px"; + continue; + } + if (!w._inDocument) { + w._inDocument = true; + renderer.container.appendChild(w.el); + } + var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top; + if (!w.coverLine) + top += config.lineHeight * this.session.getRowLineCount(w.row); + w.el.style.top = top - config.offset + "px"; + var left = w.coverGutter ? 0 : renderer.gutterWidth; + if (!w.fixedWidth) + left -= renderer.scrollLeft; + w.el.style.left = left + "px"; + if (w.fullWidth && w.screenWidth) { + w.el.style.minWidth = config.width + 2 * config.padding + "px"; + } + if (w.fixedWidth) { + w.el.style.right = renderer.scrollBar.getWidth() + "px"; + } + else { + w.el.style.right = ""; + } + } + }; + return LineWidgets; +}()); +exports.LineWidgets = LineWidgets; -.side-info .desc { - font-weight: bold; -} +}); -.side-info .fold { - margin-top: 15px; - font-size: 2em; +ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module){"use strict"; +function throwDeltaError(delta, errorText) { + console.log("Invalid Delta:", delta); + throw "Invalid Delta: " + errorText; } - -.side-info .fold:hover { - cursor: pointer; +function positionInDocument(docLines, position) { + return position.row >= 0 && position.row < docLines.length && + position.column >= 0 && position.column <= docLines[position.row].length; } - -.side-info .fold span { - padding-left: 7px; +function validateDelta(docLines, delta) { + if (delta.action != "insert" && delta.action != "remove") + throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); + if (!(delta.lines instanceof Array)) + throwDeltaError(delta, "delta.lines must be an Array"); + if (!delta.start || !delta.end) + throwDeltaError(delta, "delta.start/end must be an present"); + var start = delta.start; + if (!positionInDocument(docLines, delta.start)) + throwDeltaError(delta, "delta.start must be contained in document"); + var end = delta.end; + if (delta.action == "remove" && !positionInDocument(docLines, end)) + throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); + var numRangeRows = end.row - start.row; + var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); + if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) + throwDeltaError(delta, "delta.range must match delta lines"); } +exports.applyDelta = function (docLines, delta, doNotValidate) { + var row = delta.start.row; + var startColumn = delta.start.column; + var line = docLines[row] || ""; + switch (delta.action) { + case "insert": + var lines = delta.lines; + if (lines.length === 1) { + docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); + } + else { + var args = [row, 1].concat(delta.lines); + docLines.splice.apply(docLines, args); + docLines[row] = line.substring(0, startColumn) + docLines[row]; + docLines[row + delta.lines.length - 1] += line.substring(startColumn); + } + break; + case "remove": + var endColumn = delta.end.column; + var endRow = delta.end.row; + if (row === endRow) { + docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); + } + else { + docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn)); + } + break; + } +}; -.side-info .show-all { - color: rgb(50, 38, 41); - float: right; - margin-right: 10px; -} +}); -.side-info ul.mod-list, -.side-info ul.env-list, -.side-info ul.fac-list { - padding: 0; - margin: 0; - list-style-type: none; +ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Anchor = /** @class */ (function () { + function Anchor(doc, row, column) { + this.$onChange = this.onChange.bind(this); + this.attach(doc); + if (typeof row != "number") + this.setPosition(row.row, row.column); + else + this.setPosition(row, column); + } + Anchor.prototype.getPosition = function () { + return this.$clipPositionToDocument(this.row, this.column); + }; + Anchor.prototype.getDocument = function () { + return this.document; + }; + Anchor.prototype.onChange = function (delta) { + if (delta.start.row == delta.end.row && delta.start.row != this.row) + return; + if (delta.start.row > this.row) + return; + var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight); + this.setPosition(point.row, point.column, true); + }; + Anchor.prototype.setPosition = function (row, column, noClip) { + var pos; + if (noClip) { + pos = { + row: row, + column: column + }; + } + else { + pos = this.$clipPositionToDocument(row, column); + } + if (this.row == pos.row && this.column == pos.column) + return; + var old = { + row: this.row, + column: this.column + }; + this.row = pos.row; + this.column = pos.column; + this._signal("change", { + old: old, + value: pos + }); + }; + Anchor.prototype.detach = function () { + this.document.off("change", this.$onChange); + }; + Anchor.prototype.attach = function (doc) { + this.document = doc || this.document; + this.document.on("change", this.$onChange); + }; + Anchor.prototype.$clipPositionToDocument = function (row, column) { + var pos = {}; + if (row >= this.document.getLength()) { + pos.row = Math.max(0, this.document.getLength() - 1); + pos.column = this.document.getLine(pos.row).length; + } + else if (row < 0) { + pos.row = 0; + pos.column = 0; + } + else { + pos.row = row; + pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); + } + if (column < 0) + pos.column = 0; + return pos; + }; + return Anchor; +}()); +Anchor.prototype.$insertRight = false; +oop.implement(Anchor.prototype, EventEmitter); +function $pointsInOrder(point1, point2, equalPointsInOrder) { + var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; + return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); } - -.side-info ul.mod-list li, -.side-info ul.fac-list li { - border-left: 3px solid black; - margin: 6px 4px; - padding: 1px 3px; +function $getTransformedPoint(delta, point, moveIfEqual) { + var deltaIsInsert = delta.action == "insert"; + var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); + var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); + var deltaStart = delta.start; + var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. + if ($pointsInOrder(point, deltaStart, moveIfEqual)) { + return { + row: point.row, + column: point.column + }; + } + if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { + return { + row: point.row + deltaRowShift, + column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) + }; + } + return { + row: deltaStart.row, + column: deltaStart.column + }; } +exports.Anchor = Anchor; -.side-info ul.env-list li { - margin: 3px; - font-size: 0.8em; -} +}); -.side-info ul.env-list li .key { - font-weight: bold; -} +ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var applyDelta = require("./apply_delta").applyDelta; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Range = require("./range").Range; +var Anchor = require("./anchor").Anchor; +var Document = /** @class */ (function () { + function Document(textOrLines) { + this.$lines = [""]; + if (textOrLines.length === 0) { + this.$lines = [""]; + } + else if (Array.isArray(textOrLines)) { + this.insertMergedLines({ row: 0, column: 0 }, textOrLines); + } + else { + this.insert({ row: 0, column: 0 }, textOrLines); + } + } + Document.prototype.setValue = function (text) { + var len = this.getLength() - 1; + this.remove(new Range(0, 0, len, this.getLine(len).length)); + this.insert({ row: 0, column: 0 }, text || ""); + }; + Document.prototype.getValue = function () { + return this.getAllLines().join(this.getNewLineCharacter()); + }; + Document.prototype.createAnchor = function (row, column) { + return new Anchor(this, row, column); + }; + Document.prototype.$detectNewLine = function (text) { + var match = text.match(/^.*?(\r\n|\r|\n)/m); + this.$autoNewLine = match ? match[1] : "\n"; + this._signal("changeNewLineMode"); + }; + Document.prototype.getNewLineCharacter = function () { + switch (this.$newLineMode) { + case "windows": + return "\r\n"; + case "unix": + return "\n"; + default: + return this.$autoNewLine || "\n"; + } + }; + Document.prototype.setNewLineMode = function (newLineMode) { + if (this.$newLineMode === newLineMode) + return; + this.$newLineMode = newLineMode; + this._signal("changeNewLineMode"); + }; + Document.prototype.getNewLineMode = function () { + return this.$newLineMode; + }; + Document.prototype.isNewLine = function (text) { + return (text == "\r\n" || text == "\r" || text == "\n"); + }; + Document.prototype.getLine = function (row) { + return this.$lines[row] || ""; + }; + Document.prototype.getLines = function (firstRow, lastRow) { + return this.$lines.slice(firstRow, lastRow + 1); + }; + Document.prototype.getAllLines = function () { + return this.getLines(0, this.getLength()); + }; + Document.prototype.getLength = function () { + return this.$lines.length; + }; + Document.prototype.getTextRange = function (range) { + return this.getLinesForRange(range).join(this.getNewLineCharacter()); + }; + Document.prototype.getLinesForRange = function (range) { + var lines; + if (range.start.row === range.end.row) { + lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; + } + else { + lines = this.getLines(range.start.row, range.end.row); + lines[0] = (lines[0] || "").substring(range.start.column); + var l = lines.length - 1; + if (range.end.row - range.start.row == l) + lines[l] = lines[l].substring(0, range.end.column); + } + return lines; + }; + Document.prototype.insertLines = function (row, lines) { + console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); + return this.insertFullLines(row, lines); + }; + Document.prototype.removeLines = function (firstRow, lastRow) { + console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); + return this.removeFullLines(firstRow, lastRow); + }; + Document.prototype.insertNewLine = function (position) { + console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."); + return this.insertMergedLines(position, ["", ""]); + }; + Document.prototype.insert = function (position, text) { + if (this.getLength() <= 1) + this.$detectNewLine(text); + return this.insertMergedLines(position, this.$split(text)); + }; + Document.prototype.insertInLine = function (position, text) { + var start = this.clippedPos(position.row, position.column); + var end = this.pos(position.row, position.column + text.length); + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: [text] + }, true); + return this.clonePos(end); + }; + Document.prototype.clippedPos = function (row, column) { + var length = this.getLength(); + if (row === undefined) { + row = length; + } + else if (row < 0) { + row = 0; + } + else if (row >= length) { + row = length - 1; + column = undefined; + } + var line = this.getLine(row); + if (column == undefined) + column = line.length; + column = Math.min(Math.max(column, 0), line.length); + return { row: row, column: column }; + }; + Document.prototype.clonePos = function (pos) { + return { row: pos.row, column: pos.column }; + }; + Document.prototype.pos = function (row, column) { + return { row: row, column: column }; + }; + Document.prototype.$clipPosition = function (position) { + var length = this.getLength(); + if (position.row >= length) { + position.row = Math.max(0, length - 1); + position.column = this.getLine(length - 1).length; + } + else { + position.row = Math.max(0, position.row); + position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); + } + return position; + }; + Document.prototype.insertFullLines = function (row, lines) { + row = Math.min(Math.max(row, 0), this.getLength()); + var column = 0; + if (row < this.getLength()) { + lines = lines.concat([""]); + column = 0; + } + else { + lines = [""].concat(lines); + row--; + column = this.$lines[row].length; + } + this.insertMergedLines({ row: row, column: column }, lines); + }; + Document.prototype.insertMergedLines = function (position, lines) { + var start = this.clippedPos(position.row, position.column); + var end = { + row: start.row + lines.length - 1, + column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length + }; + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: lines + }); + return this.clonePos(end); + }; + Document.prototype.remove = function (range) { + var start = this.clippedPos(range.start.row, range.start.column); + var end = this.clippedPos(range.end.row, range.end.column); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({ start: start, end: end }) + }); + return this.clonePos(start); + }; + Document.prototype.removeInLine = function (row, startColumn, endColumn) { + var start = this.clippedPos(row, startColumn); + var end = this.clippedPos(row, endColumn); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({ start: start, end: end }) + }, true); + return this.clonePos(start); + }; + Document.prototype.removeFullLines = function (firstRow, lastRow) { + firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); + lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1); + var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; + var deleteLastNewLine = lastRow < this.getLength() - 1; + var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow); + var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0); + var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow); + var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length); + var range = new Range(startRow, startCol, endRow, endCol); + var deletedLines = this.$lines.slice(firstRow, lastRow + 1); + this.applyDelta({ + start: range.start, + end: range.end, + action: "remove", + lines: this.getLinesForRange(range) + }); + return deletedLines; + }; + Document.prototype.removeNewLine = function (row) { + if (row < this.getLength() - 1 && row >= 0) { + this.applyDelta({ + start: this.pos(row, this.getLine(row).length), + end: this.pos(row + 1, 0), + action: "remove", + lines: ["", ""] + }); + } + }; + Document.prototype.replace = function (range, text) { + if (!(range instanceof Range)) + range = Range.fromPoints(range.start, range.end); + if (text.length === 0 && range.isEmpty()) + return range.start; + if (text == this.getTextRange(range)) + return range.end; + this.remove(range); + var end; + if (text) { + end = this.insert(range.start, text); + } + else { + end = range.start; + } + return end; + }; + Document.prototype.applyDeltas = function (deltas) { + for (var i = 0; i < deltas.length; i++) { + this.applyDelta(deltas[i]); + } + }; + Document.prototype.revertDeltas = function (deltas) { + for (var i = deltas.length - 1; i >= 0; i--) { + this.revertDelta(deltas[i]); + } + }; + Document.prototype.applyDelta = function (delta, doNotValidate) { + var isInsert = delta.action == "insert"; + if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] + : !Range.comparePoints(delta.start, delta.end)) { + return; + } + if (isInsert && delta.lines.length > 20000) { + this.$splitAndapplyLargeDelta(delta, 20000); + } + else { + applyDelta(this.$lines, delta, doNotValidate); + this._signal("change", delta); + } + }; + Document.prototype.$safeApplyDelta = function (delta) { + var docLength = this.$lines.length; + if (delta.action == "remove" && delta.start.row < docLength && delta.end.row < docLength + || delta.action == "insert" && delta.start.row <= docLength) { + this.applyDelta(delta); + } + }; + Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) { + var lines = delta.lines; + var l = lines.length - MAX + 1; + var row = delta.start.row; + var column = delta.start.column; + for (var from = 0, to = 0; from < l; from = to) { + to += MAX - 1; + var chunk = lines.slice(from, to); + chunk.push(""); + this.applyDelta({ + start: this.pos(row + from, column), + end: this.pos(row + to, column = 0), + action: delta.action, + lines: chunk + }, true); + } + delta.lines = lines.slice(from); + delta.start.row = row + from; + delta.start.column = column; + this.applyDelta(delta, true); + }; + Document.prototype.revertDelta = function (delta) { + this.$safeApplyDelta({ + start: this.clonePos(delta.start), + end: this.clonePos(delta.end), + action: (delta.action == "insert" ? "remove" : "insert"), + lines: delta.lines.slice() + }); + }; + Document.prototype.indexToPosition = function (index, startRow) { + var lines = this.$lines || this.getAllLines(); + var newlineLength = this.getNewLineCharacter().length; + for (var i = startRow || 0, l = lines.length; i < l; i++) { + index -= lines[i].length + newlineLength; + if (index < 0) + return { row: i, column: index + lines[i].length + newlineLength }; + } + return { row: l - 1, column: index + lines[l - 1].length + newlineLength }; + }; + Document.prototype.positionToIndex = function (pos, startRow) { + var lines = this.$lines || this.getAllLines(); + var newlineLength = this.getNewLineCharacter().length; + var index = 0; + var row = Math.min(pos.row, lines.length); + for (var i = startRow || 0; i < row; ++i) + index += lines[i].length + newlineLength; + return index + pos.column; + }; + Document.prototype.$split = function (text) { + return text.split(/\r\n|\r|\n/); + }; + return Document; +}()); +Document.prototype.$autoNewLine = ""; +Document.prototype.$newLineMode = "auto"; +oop.implement(Document.prototype, EventEmitter); +exports.Document = Document; -.side-info ul.mod-list li .version, -.side-info ul.fac-list li .mode, -.side-info ul.fac-list li .buffering { - float: right; - margin-left: 20px; -} +}); -.side-info .clear { - clear: both; -} +ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var BackgroundTokenizer = /** @class */ (function () { + function BackgroundTokenizer(tokenizer, session) { + this.running = false; + this.lines = []; + this.states = []; + this.currentLine = 0; + this.tokenizer = tokenizer; + var self = this; + this.$worker = function () { + if (!self.running) { + return; + } + var workerStart = new Date(); + var currentLine = self.currentLine; + var endLine = -1; + var doc = self.doc; + var startLine = currentLine; + while (self.lines[currentLine]) + currentLine++; + var len = doc.getLength(); + var processedLines = 0; + self.running = false; + while (currentLine < len) { + self.$tokenizeRow(currentLine); + endLine = currentLine; + do { + currentLine++; + } while (self.lines[currentLine]); + processedLines++; + if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { + self.running = setTimeout(self.$worker, 20); + break; + } + } + self.currentLine = currentLine; + if (endLine == -1) + endLine = currentLine; + if (startLine <= endLine) + self.fireUpdateEvent(startLine, endLine); + }; + } + BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) { + this.tokenizer = tokenizer; + this.lines = []; + this.states = []; + this.start(0); + }; + BackgroundTokenizer.prototype.setDocument = function (doc) { + this.doc = doc; + this.lines = []; + this.states = []; + this.stop(); + }; + BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) { + var data = { + first: firstRow, + last: lastRow + }; + this._signal("update", { data: data }); + }; + BackgroundTokenizer.prototype.start = function (startRow) { + this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); + this.lines.splice(this.currentLine, this.lines.length); + this.states.splice(this.currentLine, this.states.length); + this.stop(); + this.running = setTimeout(this.$worker, 700); + }; + BackgroundTokenizer.prototype.scheduleStart = function () { + if (!this.running) + this.running = setTimeout(this.$worker, 700); + }; + BackgroundTokenizer.prototype.$updateOnChange = function (delta) { + var startRow = delta.start.row; + var len = delta.end.row - startRow; + if (len === 0) { + this.lines[startRow] = null; + } + else if (delta.action == "remove") { + this.lines.splice(startRow, len + 1, null); + this.states.splice(startRow, len + 1, null); + } + else { + var args = Array(len + 1); + args.unshift(startRow, 1); + this.lines.splice.apply(this.lines, args); + this.states.splice.apply(this.states, args); + } + this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); + this.stop(); + }; + BackgroundTokenizer.prototype.stop = function () { + if (this.running) + clearTimeout(this.running); + this.running = false; + }; + BackgroundTokenizer.prototype.getTokens = function (row) { + return this.lines[row] || this.$tokenizeRow(row); + }; + BackgroundTokenizer.prototype.getState = function (row) { + if (this.currentLine == row) + this.$tokenizeRow(row); + return this.states[row] || "start"; + }; + BackgroundTokenizer.prototype.$tokenizeRow = function (row) { + var line = this.doc.getLine(row); + var state = this.states[row - 1]; + var data = this.tokenizer.getLineTokens(line, state, row); + if (this.states[row] + "" !== data.state + "") { + this.states[row] = data.state; + this.lines[row + 1] = null; + if (this.currentLine > row + 1) + this.currentLine = row + 1; + } + else if (this.currentLine == row) { + this.currentLine = row + 1; + } + return this.lines[row] = data.tokens; + }; + BackgroundTokenizer.prototype.cleanup = function () { + this.running = false; + this.lines = []; + this.states = []; + this.currentLine = 0; + this.removeAllListeners(); + }; + return BackgroundTokenizer; +}()); +oop.implement(BackgroundTokenizer.prototype, EventEmitter); +exports.BackgroundTokenizer = BackgroundTokenizer; + +}); + +ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/range"], function(require, exports, module){"use strict"; +var lang = require("./lib/lang"); +var Range = require("./range").Range; +var SearchHighlight = /** @class */ (function () { + function SearchHighlight(regExp, clazz, type) { + if (type === void 0) { type = "text"; } + this.setRegexp(regExp); + this.clazz = clazz; + this.type = type; + this.docLen = 0; + } + SearchHighlight.prototype.setRegexp = function (regExp) { + if (this.regExp + "" == regExp + "") + return; + this.regExp = regExp; + this.cache = []; + }; + SearchHighlight.prototype.update = function (html, markerLayer, session, config) { + if (!this.regExp) + return; + var start = config.firstRow; + var end = config.lastRow; + var renderedMarkerRanges = {}; + var _search = session.$editor && session.$editor.$search; + var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions()); + for (var i = start; i <= end; i++) { + var ranges = this.cache[i]; + if (ranges == null || session.getValue().length != this.docLen) { + if (mtSearch) { + ranges = []; + var match = _search.$multiLineForward(session, this.regExp, i, end); + if (match) { + var end_row = match.endRow <= end ? match.endRow - 1 : end; + if (end_row > i) + i = end_row; + ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol)); + } + if (ranges.length > this.MAX_RANGES) + ranges = ranges.slice(0, this.MAX_RANGES); + } + else { + ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); + if (ranges.length > this.MAX_RANGES) + ranges = ranges.slice(0, this.MAX_RANGES); + ranges = ranges.map(function (match) { + return new Range(i, match.offset, i, match.offset + match.length); + }); + } + this.cache[i] = ranges.length ? ranges : ""; + } + if (ranges.length === 0) + continue; + for (var j = ranges.length; j--;) { + var rangeToAddMarkerTo = ranges[j].toScreenRange(session); + var rangeAsString = rangeToAddMarkerTo.toString(); + if (renderedMarkerRanges[rangeAsString]) + continue; + renderedMarkerRanges[rangeAsString] = true; + markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config); + } + } + this.docLen = session.getValue().length; + }; + return SearchHighlight; +}()); +SearchHighlight.prototype.MAX_RANGES = 500; +exports.SearchHighlight = SearchHighlight; -.hash { - font-size: 12px; - color: #666; -} +}); -.dbefore { - color: red !important; +ace.define("ace/undomanager",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var UndoManager = /** @class */ (function () { + function UndoManager() { + this.$keepRedoStack; + this.$maxRev = 0; + this.$fromUndo = false; + this.$undoDepth = Infinity; + this.reset(); + } + UndoManager.prototype.addSession = function (session) { + this.$session = session; + }; + UndoManager.prototype.add = function (delta, allowMerge, session) { + if (this.$fromUndo) + return; + if (delta == this.$lastDelta) + return; + if (!this.$keepRedoStack) + this.$redoStack.length = 0; + if (allowMerge === false || !this.lastDeltas) { + this.lastDeltas = []; + var undoStackLength = this.$undoStack.length; + if (undoStackLength > this.$undoDepth - 1) { + this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1); + } + this.$undoStack.push(this.lastDeltas); + delta.id = this.$rev = ++this.$maxRev; + } + if (delta.action == "remove" || delta.action == "insert") + this.$lastDelta = delta; + this.lastDeltas.push(delta); + }; + UndoManager.prototype.addSelection = function (selection, rev) { + this.selections.push({ + value: selection, + rev: rev || this.$rev + }); + }; + UndoManager.prototype.startNewGroup = function () { + this.lastDeltas = null; + return this.$rev; + }; + UndoManager.prototype.markIgnored = function (from, to) { + if (to == null) + to = this.$rev + 1; + var stack = this.$undoStack; + for (var i = stack.length; i--;) { + var delta = stack[i][0]; + if (delta.id <= from) + break; + if (delta.id < to) + delta.ignore = true; + } + this.lastDeltas = null; + }; + UndoManager.prototype.getSelection = function (rev, after) { + var stack = this.selections; + for (var i = stack.length; i--;) { + var selection = stack[i]; + if (selection.rev < rev) { + if (after) + selection = stack[i + 1]; + return selection; + } + } + }; + UndoManager.prototype.getRevision = function () { + return this.$rev; + }; + UndoManager.prototype.getDeltas = function (from, to) { + if (to == null) + to = this.$rev + 1; + var stack = this.$undoStack; + var end = null, start = 0; + for (var i = stack.length; i--;) { + var delta = stack[i][0]; + if (delta.id < to && !end) + end = i + 1; + if (delta.id <= from) { + start = i + 1; + break; + } + } + return stack.slice(start, end); + }; + UndoManager.prototype.getChangedRanges = function (from, to) { + if (to == null) + to = this.$rev + 1; + }; + UndoManager.prototype.getChangedLines = function (from, to) { + if (to == null) + to = this.$rev + 1; + }; + UndoManager.prototype.undo = function (session, dontSelect) { + this.lastDeltas = null; + var stack = this.$undoStack; + if (!rearrangeUndoStack(stack, stack.length)) + return; + if (!session) + session = this.$session; + if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length) + this.$redoStack = []; + this.$fromUndo = true; + var deltaSet = stack.pop(); + var undoSelectionRange = null; + if (deltaSet) { + undoSelectionRange = session.undoChanges(deltaSet, dontSelect); + this.$redoStack.push(deltaSet); + this.$syncRev(); + } + this.$fromUndo = false; + return undoSelectionRange; + }; + UndoManager.prototype.redo = function (session, dontSelect) { + this.lastDeltas = null; + if (!session) + session = this.$session; + this.$fromUndo = true; + if (this.$redoStackBaseRev != this.$rev) { + var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1); + rebaseRedoStack(this.$redoStack, diff); + this.$redoStackBaseRev = this.$rev; + this.$redoStack.forEach(function (x) { + x[0].id = ++this.$maxRev; + }, this); + } + var deltaSet = this.$redoStack.pop(); + var redoSelectionRange = null; + if (deltaSet) { + redoSelectionRange = session.redoChanges(deltaSet, dontSelect); + this.$undoStack.push(deltaSet); + this.$syncRev(); + } + this.$fromUndo = false; + return redoSelectionRange; + }; + UndoManager.prototype.$syncRev = function () { + var stack = this.$undoStack; + var nextDelta = stack[stack.length - 1]; + var id = nextDelta && nextDelta[0].id || 0; + this.$redoStackBaseRev = id; + this.$rev = id; + }; + UndoManager.prototype.reset = function () { + this.lastDeltas = null; + this.$lastDelta = null; + this.$undoStack = []; + this.$redoStack = []; + this.$rev = 0; + this.mark = 0; + this.$redoStackBaseRev = this.$rev; + this.selections = []; + }; + UndoManager.prototype.canUndo = function () { + return this.$undoStack.length > 0; + }; + UndoManager.prototype.canRedo = function () { + return this.$redoStack.length > 0; + }; + UndoManager.prototype.bookmark = function (rev) { + if (rev == undefined) + rev = this.$rev; + this.mark = rev; + }; + UndoManager.prototype.isAtBookmark = function () { + return this.$rev === this.mark; + }; + UndoManager.prototype.toJSON = function () { + return { + $redoStack: this.$redoStack, + $undoStack: this.$undoStack + }; + }; + UndoManager.prototype.fromJSON = function (json) { + this.reset(); + this.$undoStack = json.$undoStack; + this.$redoStack = json.$redoStack; + }; + UndoManager.prototype.$prettyPrint = function (delta) { + if (delta) + return stringifyDelta(delta); + return stringifyDelta(this.$undoStack) + "\n---\n" + stringifyDelta(this.$redoStack); + }; + return UndoManager; +}()); +UndoManager.prototype.hasUndo = UndoManager.prototype.canUndo; +UndoManager.prototype.hasRedo = UndoManager.prototype.canRedo; +UndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark; +UndoManager.prototype.markClean = UndoManager.prototype.bookmark; +function rearrangeUndoStack(stack, pos) { + for (var i = pos; i--;) { + var deltaSet = stack[i]; + if (deltaSet && !deltaSet[0].ignore) { + while (i < pos - 1) { + var swapped = swapGroups(stack[i], stack[i + 1]); + stack[i] = swapped[0]; + stack[i + 1] = swapped[1]; + i++; + } + return true; + } + } } - -.dafter { - color: green !important; +var Range = require("./range").Range; +var cmp = Range.comparePoints; +var comparePoints = Range.comparePoints; +function $updateMarkers(delta) { + var isInsert = delta.action == "insert"; + var start = delta.start; + var end = delta.end; + var rowShift = (end.row - start.row) * (isInsert ? 1 : -1); + var colShift = (end.column - start.column) * (isInsert ? 1 : -1); + if (isInsert) + end = start; + for (var i in this.marks) { + var point = this.marks[i]; + var cmp = comparePoints(point, start); + if (cmp < 0) { + continue; // delta starts after the range + } + if (cmp === 0) { + if (isInsert) { + if (point.bias == 1) { + cmp = 1; + } + else { + point.bias == -1; + continue; + } + } + } + var cmp2 = isInsert ? cmp : comparePoints(point, end); + if (cmp2 > 0) { + point.row += rowShift; + point.column += point.row == end.row ? colShift : 0; + continue; + } + if (!isInsert && cmp2 <= 0) { + point.row = start.row; + point.column = start.column; + if (cmp2 === 0) + point.bias = 1; + } + } } - -.dbefore::before { - color: red !important; - content: ' - '; - font-family: "Courier New", Courier, monospace; +function clonePos(pos) { + return { row: pos.row, column: pos.column }; } - -.dafter::before { - color: green !important; - content: ' + '; - font-family: "Courier New", Courier, monospace; +function cloneDelta(d) { + return { + start: clonePos(d.start), + end: clonePos(d.end), + action: d.action, + lines: d.lines.slice() + }; } - -.libefore { - border-left: 3px solid red !important; - color: red !important; +function stringifyDelta(d) { + d = d || this; + if (Array.isArray(d)) { + return d.map(stringifyDelta).join("\n"); + } + var type = ""; + if (d.action) { + type = d.action == "insert" ? "+" : "-"; + type += "[" + d.lines + "]"; + } + else if (d.value) { + if (Array.isArray(d.value)) { + type = d.value.map(stringifyRange).join("\n"); + } + else { + type = stringifyRange(d.value); + } + } + if (d.start) { + type += stringifyRange(d); + } + if (d.id || d.rev) { + type += "\t(" + (d.id || d.rev) + ")"; + } + return type; } - -.liafter { - border-left: 3px solid green !important; - color: green !important; +function stringifyRange(r) { + return r.start.row + ":" + r.start.column + + "=>" + r.end.row + ":" + r.end.column; } - -.connection-error:hover { - cursor: pointer; +function swap(d1, d2) { + var i1 = d1.action == "insert"; + var i2 = d2.action == "insert"; + if (i1 && i2) { + if (cmp(d2.start, d1.end) >= 0) { + shift(d2, d1, -1); + } + else if (cmp(d2.start, d1.start) <= 0) { + shift(d1, d2, +1); + } + else { + return null; + } + } + else if (i1 && !i2) { + if (cmp(d2.start, d1.end) >= 0) { + shift(d2, d1, -1); + } + else if (cmp(d2.end, d1.start) <= 0) { + shift(d1, d2, -1); + } + else { + return null; + } + } + else if (!i1 && i2) { + if (cmp(d2.start, d1.start) >= 0) { + shift(d2, d1, +1); + } + else if (cmp(d2.start, d1.start) <= 0) { + shift(d1, d2, +1); + } + else { + return null; + } + } + else if (!i1 && !i2) { + if (cmp(d2.start, d1.start) >= 0) { + shift(d2, d1, +1); + } + else if (cmp(d2.end, d1.start) <= 0) { + shift(d1, d2, -1); + } + else { + return null; + } + } + return [d2, d1]; } - -.error-text { - font-size: 15px; - margin-left: 3px; - vertical-align: middle; -}`, "",{"version":3,"sources":["webpack://./style/panel.css"],"names":[],"mappings":";AAIA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;;AAGA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,uCAAuC;EACvC,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;;AAGA;EACE,iBAAiB;AACnB;;;AAGA;EACE,mBAAmB;AACrB;;;AAGA;EACE,cAAc;AAChB;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;;AAGA;;;EAGE,qBAAqB;AACvB;;;AAGA;EACE,gBAAgB;AAClB;;;AAGA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;EAC1C,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,0CAA0C;AAC5C;;AAEA;EACE,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,SAAS;EACT,UAAU;EACV,gBAAgB;;AAElB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;AACpB;;AAEA;;;EAGE,UAAU;EACV,SAAS;EACT,qBAAqB;AACvB;;AAEA;;EAEE,4BAA4B;EAC5B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;EAGE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,WAAW;AACb;;AAEA;IACI,eAAe;IACf,WAAW;AACf;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,uBAAuB;EACvB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,qCAAqC;EACrC,qBAAqB;AACvB;;AAEA;EACE,uCAAuC;EACvC,uBAAuB;AACzB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,sBAAsB;AACxB","sourcesContent":["\n@import '~@lumino/default-theme/style/index.css';\n\n\n.p-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.p-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #C0C0C0;\n}\n\n\n.p-TabBar-tab {\n padding: 0px 10px;\n background: #E5E5E5;\n border: 1px solid #C0C0C0;\n border-bottom: none;\n font: 12px Helvetica, Arial, sans-serif;\n flex: 0 1 180px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n background: white;\n}\n\n\n.p-TabBar-tab:hover:not(.p-mod-current) {\n background: #F0F0F0;\n}\n\n\n.p-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n\n.p-TabBar-tabIcon,\n.p-TabBar-tabLabel,\n.p-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\n content: '\\f00d';\n font-family: FontAwesome;\n}\n\n\n.p-TabBar-tab.p-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n transform: translateX(-40%) translateY(-58%);\n}\n\n.p-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n\n.content {\n min-width: 50px;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n padding: 8px;\n border: 1px solid #C0C0C0;\n border-top: none;\n background: white;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.content > div {\n flex: 1 1 auto;\n overflow: auto;\n}\n\nbody {\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n}\n\n#main {\n flex: 1 1 auto;\n}\n\n\n.side-info {\n margin: 5px;\n font-size: 14px;\n}\n\n.side-info .main h1 {\n margin: 0;\n}\n\n.side-info .main h3 {\n margin: 0 0 8px 0;\n}\n\n.side-info .attr {\n display: block;\n margin: 3px 0;\n}\n\n.side-info .desc {\n font-weight: bold;\n}\n\n.side-info .fold {\n margin-top: 15px;\n font-size: 2em;\n}\n\n.side-info .fold:hover {\n cursor: pointer;\n}\n\n.side-info .fold span {\n padding-left: 7px;\n}\n\n.side-info .show-all {\n color: rgb(50, 38, 41);\n float: right;\n margin-right: 10px;\n}\n\n.side-info ul.mod-list,\n.side-info ul.env-list,\n.side-info ul.fac-list {\n padding: 0;\n margin: 0;\n list-style-type: none;\n}\n\n.side-info ul.mod-list li,\n.side-info ul.fac-list li {\n border-left: 3px solid black;\n margin: 6px 4px;\n padding: 1px 3px;\n}\n\n.side-info ul.env-list li {\n margin: 3px;\n font-size: 0.8em;\n}\n\n.side-info ul.env-list li .key {\n font-weight: bold;\n}\n\n.side-info ul.mod-list li .version,\n.side-info ul.fac-list li .mode,\n.side-info ul.fac-list li .buffering {\n float: right;\n margin-left: 20px;\n}\n\n.side-info .clear {\n clear: both;\n}\n\n.hash {\n font-size: 12px;\n color: #666;\n}\n\n.dbefore {\n color: red !important;\n}\n\n.dafter {\n color: green !important;\n}\n\n.dbefore::before {\n color: red !important;\n content: ' - ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.dafter::before {\n color: green !important;\n content: ' + ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.libefore {\n border-left: 3px solid red !important;\n color: red !important;\n}\n\n.liafter {\n border-left: 3px solid green !important;\n color: green !important;\n}\n\n.connection-error:hover {\n cursor: pointer;\n}\n\n.error-text {\n font-size: 15px;\n margin-left: 3px;\n vertical-align: middle;\n}"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!./style/trial.css": -/*!***************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/trial.css ***! - \***************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `.trial-content, -.trial-content .sub-content, -.trial-content .sub-content > div { - overflow: hidden !important; +function swapGroups(ds1, ds2) { + for (var i = ds1.length; i--;) { + for (var j = 0; j < ds2.length; j++) { + if (!swap(ds1[i], ds2[j])) { + while (i < ds1.length) { + while (j--) { + swap(ds2[j], ds1[i]); + } + j = ds2.length; + i++; + } + return [ds1, ds2]; + } + } + } + ds1.selectionBefore = ds2.selectionBefore = + ds1.selectionAfter = ds2.selectionAfter = null; + return [ds2, ds1]; } - -.trial-content .graphselector .graph-attr:first-child label { - margin-right: 17px; +function xform(d1, c1) { + var i1 = d1.action == "insert"; + var i2 = c1.action == "insert"; + if (i1 && i2) { + if (cmp(d1.start, c1.start) < 0) { + shift(c1, d1, 1); + } + else { + shift(d1, c1, 1); + } + } + else if (i1 && !i2) { + if (cmp(d1.start, c1.end) >= 0) { + shift(d1, c1, -1); + } + else if (cmp(d1.start, c1.start) <= 0) { + shift(c1, d1, +1); + } + else { + shift(d1, Range.fromPoints(c1.start, d1.start), -1); + shift(c1, d1, +1); + } + } + else if (!i1 && i2) { + if (cmp(c1.start, d1.end) >= 0) { + shift(c1, d1, -1); + } + else if (cmp(c1.start, d1.start) <= 0) { + shift(d1, c1, +1); + } + else { + shift(c1, Range.fromPoints(d1.start, c1.start), -1); + shift(d1, c1, +1); + } + } + else if (!i1 && !i2) { + if (cmp(c1.start, d1.end) >= 0) { + shift(c1, d1, -1); + } + else if (cmp(c1.end, d1.start) <= 0) { + shift(d1, c1, -1); + } + else { + var before, after; + if (cmp(d1.start, c1.start) < 0) { + before = d1; + d1 = splitDelta(d1, c1.start); + } + if (cmp(d1.end, c1.end) > 0) { + after = splitDelta(d1, c1.end); + } + shiftPos(c1.end, d1.start, d1.end, -1); + if (after && !before) { + d1.lines = after.lines; + d1.start = after.start; + d1.end = after.end; + after = d1; + } + return [c1, before, after].filter(Boolean); + } + } + return [c1, d1]; } - -.trial-content .graphselector { - width: 100%; - padding-left: 8px; +function shift(d1, d2, dir) { + shiftPos(d1.start, d2.start, d2.end, dir); + shiftPos(d1.end, d2.start, d2.end, dir); } - -.trial-content .graphselector .use-cache { - margin-top: 10px; - margin-left: 0px; +function shiftPos(pos, start, end, dir) { + if (pos.row == (dir == 1 ? start : end).row) { + pos.column += dir * (end.column - start.column); + } + pos.row += dir * (end.row - start.row); } - -.trial-content .graphselector a.link-button { - margin-top: 10px; - width: 273px; +function splitDelta(c, pos) { + var lines = c.lines; + var end = c.end; + c.end = clonePos(pos); + var rowsBefore = c.end.row - c.start.row; + var otherLines = lines.splice(rowsBefore, lines.length); + var col = rowsBefore ? pos.column : pos.column - c.start.column; + lines.push(otherLines[0].substring(0, col)); + otherLines[0] = otherLines[0].substr(col); + var rest = { + start: clonePos(pos), + end: end, + lines: otherLines, + action: c.action + }; + return rest; } - -.trial-content .toggle-label { - margin-right: 5px; +function moveDeltasByOne(redoStack, d) { + d = cloneDelta(d); + for (var j = redoStack.length; j--;) { + var deltaSet = redoStack[j]; + for (var i = 0; i < deltaSet.length; i++) { + var x = deltaSet[i]; + var xformed = xform(x, d); + d = xformed[0]; + if (xformed.length != 2) { + if (xformed[2]) { + deltaSet.splice(i + 1, 1, xformed[1], xformed[2]); + i++; + } + else if (!xformed[1]) { + deltaSet.splice(i, 1); + i--; + } + } + } + if (!deltaSet.length) { + redoStack.splice(j, 1); + } + } + return redoStack; } - -.graphselector > div:first-child { - margin-top: 8px; +function rebaseRedoStack(redoStack, deltaSets) { + for (var i = 0; i < deltaSets.length; i++) { + var deltas = deltaSets[i]; + for (var j = 0; j < deltas.length; j++) { + moveDeltasByOne(redoStack, deltas[j]); + } + } } +exports.UndoManager = UndoManager; -.graphselector > a:last-child { - margin-bottom: 8px; -}`, "",{"version":3,"sources":["webpack://./style/trial.css"],"names":[],"mappings":"AAAA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,YAAY;AAChB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,kBAAkB;AACtB","sourcesContent":[".trial-content,\n.trial-content .sub-content,\n.trial-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.trial-content .graphselector .graph-attr:first-child label {\n margin-right: 17px;\n}\n\n.trial-content .graphselector {\n width: 100%;\n padding-left: 8px;\n}\n\n.trial-content .graphselector .use-cache {\n margin-top: 10px;\n margin-left: 0px;\n}\n\n.trial-content .graphselector a.link-button {\n margin-top: 10px;\n width: 273px;\n}\n\n.trial-content .toggle-label {\n margin-right: 5px;\n}\n\n.graphselector > div:first-child {\n margin-top: 8px;\n}\n\n.graphselector > a:last-child {\n margin-bottom: 8px;\n}"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../trial/style/index.css": -/*!**********************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../trial/style/index.css ***! - \**********************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - +}); -var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `.trial-toolbar { - margin: 5px; - float: left; - overflow: none; - width: 375px; - height: 30px; - z-index: 3; - position: absolute; -} +ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var Range = require("../range").Range; +var FoldLine = /** @class */ (function () { + function FoldLine(foldData, folds) { + this.foldData = foldData; + if (Array.isArray(folds)) { + this.folds = folds; + } + else { + folds = this.folds = [folds]; + } + var last = folds[folds.length - 1]; + this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column); + this.start = this.range.start; + this.end = this.range.end; + this.folds.forEach(function (fold) { + fold.setFoldLine(this); + }, this); + } + FoldLine.prototype.shiftRow = function (shift) { + this.start.row += shift; + this.end.row += shift; + this.folds.forEach(function (fold) { + fold.start.row += shift; + fold.end.row += shift; + }); + }; + FoldLine.prototype.addFold = function (fold) { + if (fold.sameRow) { + if (fold.start.row < this.startRow || fold.endRow > this.endRow) { + throw new Error("Can't add a fold to this FoldLine as it has no connection"); + } + this.folds.push(fold); + this.folds.sort(function (a, b) { + return -a.range.compareEnd(b.start.row, b.start.column); + }); + if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } + else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } + } + else if (fold.start.row == this.end.row) { + this.folds.push(fold); + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } + else if (fold.end.row == this.start.row) { + this.folds.unshift(fold); + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } + else { + throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); + } + fold.foldLine = this; + }; + FoldLine.prototype.containsRow = function (row) { + return row >= this.start.row && row <= this.end.row; + }; + FoldLine.prototype.walk = function (callback, endRow, endColumn) { + var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true; + if (endRow == null) { + endRow = this.end.row; + endColumn = this.end.column; + } + for (var i = 0; i < folds.length; i++) { + fold = folds[i]; + cmp = fold.range.compareStart(endRow, endColumn); + if (cmp == -1) { + callback(null, endRow, endColumn, lastEnd, isNewRow); + return; + } + stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); + stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); + if (stop || cmp === 0) { + return; + } + isNewRow = !fold.sameRow; + lastEnd = fold.end.column; + } + callback(null, endRow, endColumn, lastEnd, isNewRow); + }; + FoldLine.prototype.getNextFoldTo = function (row, column) { + var fold, cmp; + for (var i = 0; i < this.folds.length; i++) { + fold = this.folds[i]; + cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + return { + fold: fold, + kind: "after" + }; + } + else if (cmp === 0) { + return { + fold: fold, + kind: "inside" + }; + } + } + return null; + }; + FoldLine.prototype.addRemoveChars = function (row, column, len) { + var ret = this.getNextFoldTo(row, column), fold, folds; + if (ret) { + fold = ret.fold; + if (ret.kind == "inside" + && fold.start.column != column + && fold.start.row != row) { + window.console && window.console.log(row, column, fold); + } + else if (fold.start.row == row) { + folds = this.folds; + var i = folds.indexOf(fold); + if (i === 0) { + this.start.column += len; + } + for (i; i < folds.length; i++) { + fold = folds[i]; + fold.start.column += len; + if (!fold.sameRow) { + return; + } + fold.end.column += len; + } + this.end.column += len; + } + } + }; + FoldLine.prototype.split = function (row, column) { + var pos = this.getNextFoldTo(row, column); + if (!pos || pos.kind == "inside") + return null; + var fold = pos.fold; + var folds = this.folds; + var foldData = this.foldData; + var i = folds.indexOf(fold); + var foldBefore = folds[i - 1]; + this.end.row = foldBefore.end.row; + this.end.column = foldBefore.end.column; + folds = folds.splice(i, folds.length - i); + var newFoldLine = new FoldLine(foldData, folds); + foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); + return newFoldLine; + }; + FoldLine.prototype.merge = function (foldLineNext) { + var folds = foldLineNext.folds; + for (var i = 0; i < folds.length; i++) { + this.addFold(folds[i]); + } + var foldData = this.foldData; + foldData.splice(foldData.indexOf(foldLineNext), 1); + }; + FoldLine.prototype.toString = function () { + var ret = [this.range.toString() + ": ["]; + this.folds.forEach(function (fold) { + ret.push(" " + fold.toString()); + }); + ret.push("]"); + return ret.join("\n"); + }; + FoldLine.prototype.idxToPosition = function (idx) { + var lastFoldEndColumn = 0; + for (var i = 0; i < this.folds.length; i++) { + var fold = this.folds[i]; + idx -= fold.start.column - lastFoldEndColumn; + if (idx < 0) { + return { + row: fold.start.row, + column: fold.start.column + idx + }; + } + idx -= fold.placeholder.length; + if (idx < 0) { + return fold.start; + } + lastFoldEndColumn = fold.end.column; + } + return { + row: this.end.row, + column: this.end.column + idx + }; + }; + return FoldLine; +}()); +exports.FoldLine = FoldLine; -.trial-toolbar input { - height: 30px; -} +}); -.trial-toolbar input[type=checkbox] { - display: none -} +ace.define("ace/range_list",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var Range = require("./range").Range; +var comparePoints = Range.comparePoints; +var RangeList = /** @class */ (function () { + function RangeList() { + this.ranges = []; + this.$bias = 1; + } + RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) { + var list = this.ranges; + for (var i = startIndex || 0; i < list.length; i++) { + var range = list[i]; + var cmpEnd = comparePoints(pos, range.end); + if (cmpEnd > 0) + continue; + var cmpStart = comparePoints(pos, range.start); + if (cmpEnd === 0) + return excludeEdges && cmpStart !== 0 ? -i - 2 : i; + if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) + return i; + return -i - 1; + } + return -i - 1; + }; + RangeList.prototype.add = function (range) { + var excludeEdges = !range.isEmpty(); + var startIndex = this.pointIndex(range.start, excludeEdges); + if (startIndex < 0) + startIndex = -startIndex - 1; + var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); + if (endIndex < 0) + endIndex = -endIndex - 1; + else + endIndex++; + return this.ranges.splice(startIndex, endIndex - startIndex, range); + }; + RangeList.prototype.addList = function (list) { + var removed = []; + for (var i = list.length; i--;) { + removed.push.apply(removed, this.add(list[i])); + } + return removed; + }; + RangeList.prototype.substractPoint = function (pos) { + var i = this.pointIndex(pos); + if (i >= 0) + return this.ranges.splice(i, 1); + }; + RangeList.prototype.merge = function () { + var removed = []; + var list = this.ranges; + list = list.sort(function (a, b) { + return comparePoints(a.start, b.start); + }); + var next = list[0], range; + for (var i = 1; i < list.length; i++) { + range = next; + next = list[i]; + var cmp = comparePoints(range.end, next.start); + if (cmp < 0) + continue; + if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) + continue; + if (comparePoints(range.end, next.end) < 0) { + range.end.row = next.end.row; + range.end.column = next.end.column; + } + list.splice(i, 1); + removed.push(next); + next = range; + i--; + } + this.ranges = list; + return removed; + }; + RangeList.prototype.contains = function (row, column) { + return this.pointIndex({ row: row, column: column }) >= 0; + }; + RangeList.prototype.containsPoint = function (pos) { + return this.pointIndex(pos) >= 0; + }; + RangeList.prototype.rangeAtPoint = function (pos) { + var i = this.pointIndex(pos); + if (i >= 0) + return this.ranges[i]; + }; + RangeList.prototype.clipRows = function (startRow, endRow) { + var list = this.ranges; + if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) + return []; + var startIndex = this.pointIndex({ row: startRow, column: 0 }); + if (startIndex < 0) + startIndex = -startIndex - 1; + var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex); + if (endIndex < 0) + endIndex = -endIndex - 1; + var clipped = []; + for (var i = startIndex; i < endIndex; i++) { + clipped.push(list[i]); + } + return clipped; + }; + RangeList.prototype.removeAll = function () { + return this.ranges.splice(0, this.ranges.length); + }; + RangeList.prototype.attach = function (session) { + if (this.session) + this.detach(); + this.session = session; + this.onChange = this.$onChange.bind(this); + this.session.on('change', this.onChange); + }; + RangeList.prototype.detach = function () { + if (!this.session) + return; + this.session.removeListener('change', this.onChange); + this.session = null; + }; + RangeList.prototype.$onChange = function (delta) { + var start = delta.start; + var end = delta.end; + var startRow = start.row; + var endRow = end.row; + var ranges = this.ranges; + for (var i = 0, n = ranges.length; i < n; i++) { + var r = ranges[i]; + if (r.end.row >= startRow) + break; + } + if (delta.action == "insert") { + var lineDif = endRow - startRow; + var colDiff = -start.column + end.column; + for (; i < n; i++) { + var r = ranges[i]; + if (r.start.row > startRow) + break; + if (r.start.row == startRow && r.start.column >= start.column) { + if (r.start.column == start.column && this.$bias <= 0) { + } + else { + r.start.column += colDiff; + r.start.row += lineDif; + } + } + if (r.end.row == startRow && r.end.column >= start.column) { + if (r.end.column == start.column && this.$bias < 0) { + continue; + } + if (r.end.column == start.column && colDiff > 0 && i < n - 1) { + if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column) + r.end.column -= colDiff; + } + r.end.column += colDiff; + r.end.row += lineDif; + } + } + } + else { + var lineDif = startRow - endRow; + var colDiff = start.column - end.column; + for (; i < n; i++) { + var r = ranges[i]; + if (r.start.row > endRow) + break; + if (r.end.row < endRow + && (startRow < r.end.row + || startRow == r.end.row && start.column < r.end.column)) { + r.end.row = startRow; + r.end.column = start.column; + } + else if (r.end.row == endRow) { + if (r.end.column <= end.column) { + if (lineDif || r.end.column > start.column) { + r.end.column = start.column; + r.end.row = start.row; + } + } + else { + r.end.column += colDiff; + r.end.row += lineDif; + } + } + else if (r.end.row > endRow) { + r.end.row += lineDif; + } + if (r.start.row < endRow + && (startRow < r.start.row + || startRow == r.start.row && start.column < r.start.column)) { + r.start.row = startRow; + r.start.column = start.column; + } + else if (r.start.row == endRow) { + if (r.start.column <= end.column) { + if (lineDif || r.start.column > start.column) { + r.start.column = start.column; + r.start.row = start.row; + } + } + else { + r.start.column += colDiff; + r.start.row += lineDif; + } + } + else if (r.start.row > endRow) { + r.start.row += lineDif; + } + } + } + if (lineDif != 0 && i < n) { + for (; i < n; i++) { + var r = ranges[i]; + r.start.row += lineDif; + r.end.row += lineDif; + } + } + }; + return RangeList; +}()); +RangeList.prototype.comparePoints = comparePoints; +exports.RangeList = RangeList; -.trial-toolbar label, .trial-toolbar a { - margin-right: 8px; - margin-top: 8px; -} +}); -.trial-toolbar input[type=checkbox] + label { - display:inline-block; - color: black; - cursor: pointer; +ace.define("ace/edit_session/fold",["require","exports","module","ace/range_list"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var RangeList = require("../range_list").RangeList; +var Fold = /** @class */ (function (_super) { + __extends(Fold, _super); + function Fold(range, placeholder) { + var _this = _super.call(this) || this; + _this.foldLine = null; + _this.placeholder = placeholder; + _this.range = range; + _this.start = range.start; + _this.end = range.end; + _this.sameRow = range.start.row == range.end.row; + _this.subFolds = _this.ranges = []; + return _this; + } + Fold.prototype.toString = function () { + return '"' + this.placeholder + '" ' + this.range.toString(); + }; + Fold.prototype.setFoldLine = function (foldLine) { + this.foldLine = foldLine; + this.subFolds.forEach(function (fold) { + fold.setFoldLine(foldLine); + }); + }; + Fold.prototype.clone = function () { + var range = this.range.clone(); + var fold = new Fold(range, this.placeholder); + this.subFolds.forEach(function (subFold) { + fold.subFolds.push(subFold.clone()); + }); + fold.collapseChildren = this.collapseChildren; + return fold; + }; + Fold.prototype.addSubFold = function (fold) { + if (this.range.isEqual(fold)) + return; + consumeRange(fold, this.start); + var row = fold.start.row, column = fold.start.column; + for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { + cmp = this.subFolds[i].range.compare(row, column); + if (cmp != 1) + break; + } + var afterStart = this.subFolds[i]; + var firstConsumed = 0; + if (cmp == 0) { + if (afterStart.range.containsRange(fold)) + return afterStart.addSubFold(fold); + else + firstConsumed = 1; + } + var row = fold.range.end.row, column = fold.range.end.column; + for (var j = i, cmp = -1; j < this.subFolds.length; j++) { + cmp = this.subFolds[j].range.compare(row, column); + if (cmp != 1) + break; + } + if (cmp == 0) + j++; + var consumedFolds = this.subFolds.splice(i, j - i, fold); + var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length; + for (var k = firstConsumed; k < last; k++) { + fold.addSubFold(consumedFolds[k]); + } + fold.setFoldLine(this.foldLine); + return fold; + }; + Fold.prototype.restoreRange = function (range) { + return restoreRange(range, this.start); + }; + return Fold; +}(RangeList)); +function consumePoint(point, anchor) { + point.row -= anchor.row; + if (point.row == 0) + point.column -= anchor.column; } - -.trial-toolbar input[type=checkbox]:checked + label { - color: blue; +function consumeRange(range, anchor) { + consumePoint(range.start, anchor); + consumePoint(range.end, anchor); } - -.trial-toolbar a.toollink, -.trial-toolbar a.toollink:link, -.trial-toolbar a.toollink:visited { - color: black; +function restorePoint(point, anchor) { + if (point.row == 0) + point.column += anchor.column; + point.row += anchor.row; } - -.trial-toolbar a.toollink:active { - color: blue; +function restoreRange(range, anchor) { + restorePoint(range.start, anchor); + restorePoint(range.end, anchor); } -`, "",{"version":3,"sources":["webpack://./../trial/style/index.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,WAAW;AACb","sourcesContent":[".trial-toolbar {\n margin: 5px;\n float: left;\n overflow: none;\n width: 375px;\n height: 30px;\n z-index: 3;\n position: absolute;\n}\n\n.trial-toolbar input {\n height: 30px;\n}\n\n.trial-toolbar input[type=checkbox] {\n display: none\n}\n\n.trial-toolbar label, .trial-toolbar a {\n margin-right: 8px;\n margin-top: 8px;\n}\n\n.trial-toolbar input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.trial-toolbar input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.trial-toolbar a.toollink,\n.trial-toolbar a.toollink:link,\n.trial-toolbar a.toollink:visited {\n color: black;\n}\n\n.trial-toolbar a.toollink:active {\n color: blue;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), +exports.Fold = Fold; -/***/ "./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css": -/*!***********************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css ***! - \***********************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +}); +ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator","ace/mouse/mouse_event"], function(require, exports, module){// @ts-nocheck "use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `div.now-tooltip { - position: absolute; - left: 1px; - right: 1px; - max-height: 200px; - max-width: 400px; - overflow: auto; - padding: 5px; - padding-bottom: 10px; - font: 12px sans-serif; - background: #DDD; - border: 0px; - border-radius: 8px; - z-index: 2000; +var Range = require("../range").Range; +var FoldLine = require("./fold_line").FoldLine; +var Fold = require("./fold").Fold; +var TokenIterator = require("../token_iterator").TokenIterator; +var MouseEvent = require("../mouse/mouse_event").MouseEvent; +function Folding() { + this.getFoldAt = function (row, column, side) { + var foldLine = this.getFoldLine(row); + if (!foldLine) + return null; + var folds = foldLine.folds; + for (var i = 0; i < folds.length; i++) { + var range = folds[i].range; + if (range.contains(row, column)) { + if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) { + continue; + } + else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) { + continue; + } + return folds[i]; + } + } + }; + this.getFoldsInRange = function (range) { + var start = range.start; + var end = range.end; + var foldLines = this.$foldData; + var foundFolds = []; + start.column += 1; + end.column -= 1; + for (var i = 0; i < foldLines.length; i++) { + var cmp = foldLines[i].range.compareRange(range); + if (cmp == 2) { + continue; + } + else if (cmp == -2) { + break; + } + var folds = foldLines[i].folds; + for (var j = 0; j < folds.length; j++) { + var fold = folds[j]; + cmp = fold.range.compareRange(range); + if (cmp == -2) { + break; + } + else if (cmp == 2) { + continue; + } + else + if (cmp == 42) { + break; + } + foundFolds.push(fold); + } + } + start.column -= 1; + end.column += 1; + return foundFolds; + }; + this.getFoldsInRangeList = function (ranges) { + if (Array.isArray(ranges)) { + var folds = []; + ranges.forEach(function (range) { + folds = folds.concat(this.getFoldsInRange(range)); + }, this); + } + else { + var folds = this.getFoldsInRange(ranges); + } + return folds; + }; + this.getAllFolds = function () { + var folds = []; + var foldLines = this.$foldData; + for (var i = 0; i < foldLines.length; i++) + for (var j = 0; j < foldLines[i].folds.length; j++) + folds.push(foldLines[i].folds[j]); + return folds; + }; + this.getFoldStringAt = function (row, column, trim, foldLine) { + foldLine = foldLine || this.getFoldLine(row); + if (!foldLine) + return null; + var lastFold = { + end: { column: 0 } + }; + var str, fold; + for (var i = 0; i < foldLine.folds.length; i++) { + fold = foldLine.folds[i]; + var cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + str = this + .getLine(fold.start.row) + .substring(lastFold.end.column, fold.start.column); + break; + } + else if (cmp === 0) { + return null; + } + lastFold = fold; + } + if (!str) + str = this.getLine(fold.start.row).substring(lastFold.end.column); + if (trim == -1) + return str.substring(0, column - lastFold.end.column); + else if (trim == 1) + return str.substring(column - lastFold.end.column); + else + return str; + }; + this.getFoldLine = function (docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { + return foldLine; + } + else if (foldLine.end.row > docRow) { + return null; + } + } + return null; + }; + this.getNextFoldLine = function (docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.end.row >= docRow) { + return foldLine; + } + } + return null; + }; + this.getFoldedRowCount = function (first, last) { + var foldData = this.$foldData, rowCount = last - first + 1; + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row; + if (end >= last) { + if (start < last) { + if (start >= first) + rowCount -= last - start; + else + rowCount = 0; // in one fold + } + break; + } + else if (end >= first) { + if (start >= first) // fold inside range + rowCount -= end - start; + else + rowCount -= end - first + 1; + } + } + return rowCount; + }; + this.$addFoldLine = function (foldLine) { + this.$foldData.push(foldLine); + this.$foldData.sort(function (a, b) { + return a.start.row - b.start.row; + }); + return foldLine; + }; + this.addFold = function (placeholder, range) { + var foldData = this.$foldData; + var added = false; + var fold; + if (placeholder instanceof Fold) + fold = placeholder; + else { + fold = new Fold(range, placeholder); + fold.collapseChildren = range.collapseChildren; + } + this.$clipRangeToDocument(fold.range); + var startRow = fold.start.row; + var startColumn = fold.start.column; + var endRow = fold.end.row; + var endColumn = fold.end.column; + var startFold = this.getFoldAt(startRow, startColumn, 1); + var endFold = this.getFoldAt(endRow, endColumn, -1); + if (startFold && endFold == startFold) + return startFold.addSubFold(fold); + if (startFold && !startFold.range.isStart(startRow, startColumn)) + this.removeFold(startFold); + if (endFold && !endFold.range.isEnd(endRow, endColumn)) + this.removeFold(endFold); + var folds = this.getFoldsInRange(fold.range); + if (folds.length > 0) { + this.removeFolds(folds); + if (!fold.collapseChildren) { + folds.forEach(function (subFold) { + fold.addSubFold(subFold); + }); + } + } + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (endRow == foldLine.start.row) { + foldLine.addFold(fold); + added = true; + break; + } + else if (startRow == foldLine.end.row) { + foldLine.addFold(fold); + added = true; + if (!fold.sameRow) { + var foldLineNext = foldData[i + 1]; + if (foldLineNext && foldLineNext.start.row == endRow) { + foldLine.merge(foldLineNext); + break; + } + } + break; + } + else if (endRow <= foldLine.start.row) { + break; + } + } + if (!added) + foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); + if (this.$useWrapMode) + this.$updateWrapData(foldLine.start.row, foldLine.start.row); + else + this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); + this.$modified = true; + this._signal("changeFold", { data: fold, action: "add" }); + return fold; + }; + this.addFolds = function (folds) { + folds.forEach(function (fold) { + this.addFold(fold); + }, this); + }; + this.removeFold = function (fold) { + var foldLine = fold.foldLine; + var startRow = foldLine.start.row; + var endRow = foldLine.end.row; + var foldLines = this.$foldData; + var folds = foldLine.folds; + if (folds.length == 1) { + foldLines.splice(foldLines.indexOf(foldLine), 1); + } + else + if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { + folds.pop(); + foldLine.end.row = folds[folds.length - 1].end.row; + foldLine.end.column = folds[folds.length - 1].end.column; + } + else + if (foldLine.range.isStart(fold.start.row, fold.start.column)) { + folds.shift(); + foldLine.start.row = folds[0].start.row; + foldLine.start.column = folds[0].start.column; + } + else + if (fold.sameRow) { + folds.splice(folds.indexOf(fold), 1); + } + else + { + var newFoldLine = foldLine.split(fold.start.row, fold.start.column); + folds = newFoldLine.folds; + folds.shift(); + newFoldLine.start.row = folds[0].start.row; + newFoldLine.start.column = folds[0].start.column; + } + if (!this.$updating) { + if (this.$useWrapMode) + this.$updateWrapData(startRow, endRow); + else + this.$updateRowLengthCache(startRow, endRow); + } + this.$modified = true; + this._signal("changeFold", { data: fold, action: "remove" }); + }; + this.removeFolds = function (folds) { + var cloneFolds = []; + for (var i = 0; i < folds.length; i++) { + cloneFolds.push(folds[i]); + } + cloneFolds.forEach(function (fold) { + this.removeFold(fold); + }, this); + this.$modified = true; + }; + this.expandFold = function (fold) { + this.removeFold(fold); + fold.subFolds.forEach(function (subFold) { + fold.restoreRange(subFold); + this.addFold(subFold); + }, this); + if (fold.collapseChildren > 0) { + this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1); + } + fold.subFolds = []; + }; + this.expandFolds = function (folds) { + folds.forEach(function (fold) { + this.expandFold(fold); + }, this); + }; + this.unfold = function (location, expandInner) { + var range, folds; + if (location == null) { + range = new Range(0, 0, this.getLength(), 0); + if (expandInner == null) + expandInner = true; + } + else if (typeof location == "number") { + range = new Range(location, 0, location, this.getLine(location).length); + } + else if ("row" in location) { + range = Range.fromPoints(location, location); + } + else if (Array.isArray(location)) { + folds = []; + location.forEach(function (range) { + folds = folds.concat(this.unfold(range)); + }, this); + return folds; + } + else { + range = location; + } + folds = this.getFoldsInRangeList(range); + var outermostFolds = folds; + while (folds.length == 1 + && Range.comparePoints(folds[0].start, range.start) < 0 + && Range.comparePoints(folds[0].end, range.end) > 0) { + this.expandFolds(folds); + folds = this.getFoldsInRangeList(range); + } + if (expandInner != false) { + this.removeFolds(folds); + } + else { + this.expandFolds(folds); + } + if (outermostFolds.length) + return outermostFolds; + }; + this.isRowFolded = function (docRow, startFoldRow) { + return !!this.getFoldLine(docRow, startFoldRow); + }; + this.getRowFoldEnd = function (docRow, startFoldRow) { + var foldLine = this.getFoldLine(docRow, startFoldRow); + return foldLine ? foldLine.end.row : docRow; + }; + this.getRowFoldStart = function (docRow, startFoldRow) { + var foldLine = this.getFoldLine(docRow, startFoldRow); + return foldLine ? foldLine.start.row : docRow; + }; + this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) { + if (startRow == null) + startRow = foldLine.start.row; + if (startColumn == null) + startColumn = 0; + if (endRow == null) + endRow = foldLine.end.row; + if (endColumn == null) + endColumn = this.getLine(endRow).length; + var doc = this.doc; + var textLine = ""; + foldLine.walk(function (placeholder, row, column, lastColumn) { + if (row < startRow) + return; + if (row == startRow) { + if (column < startColumn) + return; + lastColumn = Math.max(startColumn, lastColumn); + } + if (placeholder != null) { + textLine += placeholder; + } + else { + textLine += doc.getLine(row).substring(lastColumn, column); + } + }, endRow, endColumn); + return textLine; + }; + this.getDisplayLine = function (row, endColumn, startRow, startColumn) { + var foldLine = this.getFoldLine(row); + if (!foldLine) { + var line; + line = this.doc.getLine(row); + return line.substring(startColumn || 0, endColumn || line.length); + } + else { + return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn); + } + }; + this.$cloneFoldData = function () { + var fd = []; + fd = this.$foldData.map(function (foldLine) { + var folds = foldLine.folds.map(function (fold) { + return fold.clone(); + }); + return new FoldLine(fd, folds); + }); + return fd; + }; + this.toggleFold = function (tryToUnfold) { + var selection = this.selection; + var range = selection.getRange(); + var fold; + var bracketPos; + if (range.isEmpty()) { + var cursor = range.start; + fold = this.getFoldAt(cursor.row, cursor.column); + if (fold) { + this.expandFold(fold); + return; + } + else if (tryToUnfold) { + var foldLine = this.getFoldLine(cursor.row); + if (foldLine) + this.expandFolds(foldLine.folds); + return; + } + else if (bracketPos = this.findMatchingBracket(cursor)) { + if (range.comparePoint(bracketPos) == 1) { + range.end = bracketPos; + } + else { + range.start = bracketPos; + range.start.column++; + range.end.column--; + } + } + else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) { + if (range.comparePoint(bracketPos) == 1) + range.end = bracketPos; + else + range.start = bracketPos; + range.start.column++; + } + else { + range = this.getCommentFoldRange(cursor.row, cursor.column) || range; + } + } + else { + var folds = this.getFoldsInRange(range); + if (tryToUnfold && folds.length) { + this.expandFolds(folds); + return; + } + else if (folds.length == 1) { + fold = folds[0]; + } + } + if (!fold) + fold = this.getFoldAt(range.start.row, range.start.column); + if (fold && fold.range.toString() == range.toString()) { + this.expandFold(fold); + return; + } + var placeholder = "..."; + if (!range.isMultiLine()) { + placeholder = this.getTextRange(range); + if (placeholder.length < 4) + return; + placeholder = placeholder.trim().substring(0, 2) + ".."; + } + this.addFold(placeholder, range); + }; + this.getCommentFoldRange = function (row, column, dir) { + var iterator = new TokenIterator(this, row, column); + var token = iterator.getCurrentToken(); + var type = token && token.type; + if (token && /^comment|string/.test(type)) { + type = type.match(/comment|string/)[0]; + if (type == "comment") + type += "|doc-start|\\.doc"; + var re = new RegExp(type); + var range = new Range(); + if (dir != 1) { + do { + token = iterator.stepBackward(); + } while (token && re.test(token.type)); + token = iterator.stepForward(); + } + range.start.row = iterator.getCurrentTokenRow(); + range.start.column = iterator.getCurrentTokenColumn() + token.value.length; + iterator = new TokenIterator(this, row, column); + var initState = this.getState(iterator.$row); + if (dir != -1) { + var lastRow = -1; + do { + token = iterator.stepForward(); + if (lastRow == -1) { + var state = this.getState(iterator.$row); + if (initState.toString() !== state.toString()) + lastRow = iterator.$row; + } + else if (iterator.$row > lastRow) { + break; + } + } while (token && re.test(token.type)); + token = iterator.stepBackward(); + } + else + token = iterator.getCurrentToken(); + range.end.row = iterator.getCurrentTokenRow(); + range.end.column = iterator.getCurrentTokenColumn(); + if (range.start.row == range.end.row && range.start.column > range.end.column) + return; + return range; + } + }; + this.foldAll = function (startRow, endRow, depth, test) { + if (depth == undefined) + depth = 100000; // JSON.stringify doesn't hanle Infinity + var foldWidgets = this.foldWidgets; + if (!foldWidgets) + return; // mode doesn't support folding + endRow = endRow || this.getLength(); + startRow = startRow || 0; + for (var row = startRow; row < endRow; row++) { + if (foldWidgets[row] == null) + foldWidgets[row] = this.getFoldWidget(row); + if (foldWidgets[row] != "start") + continue; + if (test && !test(row)) + continue; + var range = this.getFoldWidgetRange(row); + if (range && range.isMultiLine() + && range.end.row <= endRow + && range.start.row >= startRow) { + row = range.end.row; + range.collapseChildren = depth; + this.addFold("...", range); + } + } + }; + this.foldToLevel = function (level) { + this.foldAll(); + while (level-- > 0) + this.unfold(null, false); + }; + this.foldAllComments = function () { + var session = this; + this.foldAll(null, null, null, function (row) { + var tokens = session.getTokens(row); + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (token.type == "text" && /^\s+$/.test(token.value)) + continue; + if (/comment/.test(token.type)) + return true; + return false; + } + }); + }; + this.$foldStyles = { + "manual": 1, + "markbegin": 1, + "markbeginend": 1 + }; + this.$foldStyle = "markbegin"; + this.setFoldStyle = function (style) { + if (!this.$foldStyles[style]) + throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); + if (this.$foldStyle == style) + return; + this.$foldStyle = style; + if (style == "manual") + this.unfold(); + var mode = this.$foldMode; + this.$setFolding(null); + this.$setFolding(mode); + }; + this.$setFolding = function (foldMode) { + if (this.$foldMode == foldMode) + return; + this.$foldMode = foldMode; + this.off('change', this.$updateFoldWidgets); + this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); + this._signal("changeAnnotation"); + if (!foldMode || this.$foldStyle == "manual") { + this.foldWidgets = null; + return; + } + this.foldWidgets = []; + this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); + this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); + this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); + this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); + this.on('change', this.$updateFoldWidgets); + this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); + }; + this.getParentFoldRangeData = function (row, ignoreCurrent) { + var fw = this.foldWidgets; + if (!fw || (ignoreCurrent && fw[row])) + return {}; + var i = row - 1, firstRange; + while (i >= 0) { + var c = fw[i]; + if (c == null) + c = fw[i] = this.getFoldWidget(i); + if (c == "start") { + var range = this.getFoldWidgetRange(i); + if (!firstRange) + firstRange = range; + if (range && range.end.row >= row) + break; + } + i--; + } + return { + range: i !== -1 && range, + firstRange: firstRange + }; + }; + this.onFoldWidgetClick = function (row, e) { + if (e instanceof MouseEvent) + e = e.domEvent; + var options = { + children: e.shiftKey, + all: e.ctrlKey || e.metaKey, + siblings: e.altKey + }; + var range = this.$toggleFoldWidget(row, options); + if (!range) { + var el = (e.target || e.srcElement); + if (el && /ace_fold-widget/.test(el.className)) + el.className += " ace_invalid"; + } + }; + this.$toggleFoldWidget = function (row, options) { + if (!this.getFoldWidget) + return; + var type = this.getFoldWidget(row); + var line = this.getLine(row); + var dir = type === "end" ? -1 : 1; + var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); + if (fold) { + if (options.children || options.all) + this.removeFold(fold); + else + this.expandFold(fold); + return fold; + } + var range = this.getFoldWidgetRange(row, true); + if (range && !range.isMultiLine()) { + fold = this.getFoldAt(range.start.row, range.start.column, 1); + if (fold && range.isEqual(fold.range)) { + this.removeFold(fold); + return fold; + } + } + if (options.siblings) { + var data = this.getParentFoldRangeData(row); + if (data.range) { + var startRow = data.range.start.row + 1; + var endRow = data.range.end.row; + } + this.foldAll(startRow, endRow, options.all ? 10000 : 0); + } + else if (options.children) { + endRow = range ? range.end.row : this.getLength(); + this.foldAll(row + 1, endRow, options.all ? 10000 : 0); + } + else if (range) { + if (options.all) + range.collapseChildren = 10000; + this.addFold("...", range); + } + return range; + }; + this.toggleFoldWidget = function (toggleParent) { + var row = this.selection.getCursor().row; + row = this.getRowFoldStart(row); + var range = this.$toggleFoldWidget(row, {}); + if (range) + return; + var data = this.getParentFoldRangeData(row, true); + range = data.range || data.firstRange; + if (range) { + row = range.start.row; + var fold = this.getFoldAt(row, this.getLine(row).length, 1); + if (fold) { + this.removeFold(fold); + } + else { + this.addFold("...", range); + } + } + }; + this.updateFoldWidgets = function (delta) { + var firstRow = delta.start.row; + var len = delta.end.row - firstRow; + if (len === 0) { + this.foldWidgets[firstRow] = null; + } + else if (delta.action == 'remove') { + this.foldWidgets.splice(firstRow, len + 1, null); + } + else { + var args = Array(len + 1); + args.unshift(firstRow, 1); + this.foldWidgets.splice.apply(this.foldWidgets, args); + } + }; + this.tokenizerUpdateFoldWidgets = function (e) { + var rows = e.data; + if (rows.first != rows.last) { + if (this.foldWidgets.length > rows.first) + this.foldWidgets.splice(rows.first, this.foldWidgets.length); + } + }; } +exports.Folding = Folding; -.now-tooltip.hidden { - display: none; -}`, "",{"version":3,"sources":["webpack://./../utils/style/shared.css"],"names":[],"mappings":"AAAA;IACI,kBAAkB;IAClB,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,aAAa;AACjB;;AAEA;IACI,aAAa;AACjB","sourcesContent":["div.now-tooltip {\n position: absolute;\n left: 1px;\n right: 1px;\n max-height: 200px;\n max-width: 400px;\n overflow: auto;\n padding: 5px;\n padding-bottom: 10px;\n font: 12px sans-serif;\n background: #DDD;\n border: 0px;\n border-radius: 8px;\n z-index: 2000;\n}\n\n.now-tooltip.hidden {\n display: none;\n}"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/api.js": -/*!*****************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/api.js ***! - \*****************************************************/ -/***/ ((module) => { - -"use strict"; - - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -module.exports = function (cssWithMappingToString) { - var list = []; - - // return the list of modules as css string - list.toString = function toString() { - return this.map(function (item) { - var content = ""; - var needLayer = typeof item[5] !== "undefined"; - if (item[4]) { - content += "@supports (".concat(item[4], ") {"); - } - if (item[2]) { - content += "@media ".concat(item[2], " {"); - } - if (needLayer) { - content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); - } - content += cssWithMappingToString(item); - if (needLayer) { - content += "}"; - } - if (item[2]) { - content += "}"; - } - if (item[4]) { - content += "}"; - } - return content; - }).join(""); - }; +}); - // import a list of modules into the list - list.i = function i(modules, media, dedupe, supports, layer) { - if (typeof modules === "string") { - modules = [[null, modules, undefined]]; - } - var alreadyImportedModules = {}; - if (dedupe) { - for (var k = 0; k < this.length; k++) { - var id = this[k][0]; - if (id != null) { - alreadyImportedModules[id] = true; +ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(require, exports, module){"use strict"; +var TokenIterator = require("../token_iterator").TokenIterator; +var Range = require("../range").Range; +function BracketMatch() { + this.findMatchingBracket = function (position, chr) { + if (position.column == 0) + return null; + var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1); + if (charBeforeCursor == "") + return null; + var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); + if (!match) + return null; + if (match[1]) + return this.$findClosingBracket(match[1], position); + else + return this.$findOpeningBracket(match[2], position); + }; + this.getBracketRange = function (pos) { + var line = this.getLine(pos.row); + var before = true, range; + var chr = line.charAt(pos.column - 1); + var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); + if (!match) { + chr = line.charAt(pos.column); + pos = { row: pos.row, column: pos.column + 1 }; + match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); + before = false; + } + if (!match) + return null; + if (match[1]) { + var bracketPos = this.$findClosingBracket(match[1], pos); + if (!bracketPos) + return null; + range = Range.fromPoints(pos, bracketPos); + if (!before) { + range.end.column++; + range.start.column--; + } + range.cursor = range.end; + } + else { + var bracketPos = this.$findOpeningBracket(match[2], pos); + if (!bracketPos) + return null; + range = Range.fromPoints(bracketPos, pos); + if (!before) { + range.start.column++; + range.end.column--; + } + range.cursor = range.start; } - } - } - for (var _k = 0; _k < modules.length; _k++) { - var item = [].concat(modules[_k]); - if (dedupe && alreadyImportedModules[item[0]]) { - continue; - } - if (typeof layer !== "undefined") { - if (typeof item[5] === "undefined") { - item[5] = layer; - } else { - item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); - item[5] = layer; + return range; + }; + this.getMatchingBracketRanges = function (pos, isBackwards) { + var line = this.getLine(pos.row); + var bracketsRegExp = /([\(\[\{])|([\)\]\}])/; + var chr = !isBackwards && line.charAt(pos.column - 1); + var match = chr && chr.match(bracketsRegExp); + if (!match) { + chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column); + pos = { + row: pos.row, + column: pos.column + 1 + }; + match = chr && chr.match(bracketsRegExp); } - } - if (media) { - if (!item[2]) { - item[2] = media; - } else { - item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); - item[2] = media; + if (!match) + return null; + var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column); + var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos) + : this.$findOpeningBracket(match[2], pos); + if (!bracketPos) + return [startRange]; + var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1); + return [startRange, endRange]; + }; + this.$brackets = { + ")": "(", + "(": ")", + "]": "[", + "[": "]", + "{": "}", + "}": "{", + "<": ">", + ">": "<" + }; + this.$findOpeningBracket = function (bracket, position, typeRe) { + var openBracket = this.$brackets[bracket]; + var depth = 1; + var iterator = new TokenIterator(this, position.row, position.column); + var token = iterator.getCurrentToken(); + if (!token) + token = iterator.stepForward(); + if (!token) + return; + if (!typeRe) { + typeRe = new RegExp("(\\.?" + + token.type.replace(".", "\\.").replace("rparen", ".paren") + .replace(/\b(?:end)\b/, "(?:start|begin|end)") + .replace(/-close\b/, "-(close|open)") + + ")+"); } - } - if (supports) { - if (!item[4]) { - item[4] = "".concat(supports); - } else { - item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); - item[4] = supports; + var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; + var value = token.value; + while (true) { + while (valueIndex >= 0) { + var chr = value.charAt(valueIndex); + if (chr == openBracket) { + depth -= 1; + if (depth == 0) { + return { row: iterator.getCurrentTokenRow(), + column: valueIndex + iterator.getCurrentTokenColumn() }; + } + } + else if (chr == bracket) { + depth += 1; + } + valueIndex -= 1; + } + do { + token = iterator.stepBackward(); + } while (token && !typeRe.test(token.type)); + if (token == null) + break; + value = token.value; + valueIndex = value.length - 1; + } + return null; + }; + this.$findClosingBracket = function (bracket, position, typeRe) { + var closingBracket = this.$brackets[bracket]; + var depth = 1; + var iterator = new TokenIterator(this, position.row, position.column); + var token = iterator.getCurrentToken(); + if (!token) + token = iterator.stepForward(); + if (!token) + return; + if (!typeRe) { + typeRe = new RegExp("(\\.?" + + token.type.replace(".", "\\.").replace("lparen", ".paren") + .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)") + .replace(/-open\b/, "-(close|open)") + + ")+"); + } + var valueIndex = position.column - iterator.getCurrentTokenColumn(); + while (true) { + var value = token.value; + var valueLength = value.length; + while (valueIndex < valueLength) { + var chr = value.charAt(valueIndex); + if (chr == closingBracket) { + depth -= 1; + if (depth == 0) { + return { row: iterator.getCurrentTokenRow(), + column: valueIndex + iterator.getCurrentTokenColumn() }; + } + } + else if (chr == bracket) { + depth += 1; + } + valueIndex += 1; + } + do { + token = iterator.stepForward(); + } while (token && !typeRe.test(token.type)); + if (token == null) + break; + valueIndex = 0; + } + return null; + }; + this.getMatchingTags = function (pos) { + var iterator = new TokenIterator(this, pos.row, pos.column); + var token = this.$findTagName(iterator); + if (!token) + return; + var prevToken = iterator.stepBackward(); + if (prevToken.value === '<') { + return this.$findClosingTag(iterator, token); + } + else { + return this.$findOpeningTag(iterator, token); + } + }; + this.$findTagName = function (iterator) { + var token = iterator.getCurrentToken(); + var found = false; + var backward = false; + if (token && token.type.indexOf('tag-name') === -1) { + do { + if (backward) + token = iterator.stepBackward(); + else + token = iterator.stepForward(); + if (token) { + if (token.value === "/>") { + backward = true; + } + else if (token.type.indexOf('tag-name') !== -1) { + found = true; + } + } + } while (token && !found); + } + return token; + }; + this.$findClosingTag = function (iterator, token) { + var prevToken; + var currentTag = token.value; + var tag = token.value; + var depth = 0; + var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); + token = iterator.stepForward(); + var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length); + var foundOpenTagEnd = false; + do { + prevToken = token; + if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) { + var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>` + foundOpenTagEnd = true; + } + token = iterator.stepForward(); + if (token) { + if (token.value === '>' && !foundOpenTagEnd) { + var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>` + foundOpenTagEnd = true; + } + if (token.type.indexOf('tag-name') !== -1) { + currentTag = token.value; + if (tag === currentTag) { + if (prevToken.value === '<') { + depth++; + } + else if (prevToken.value === '') { + var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > + } + else { + return; + } + } + } + } + } + else if (tag === currentTag && token.value === '/>') { // self-closing tag + depth--; + if (depth < 0) { //found self-closing tag end + var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); + var closeTagName = closeTagStart; + var closeTagEnd = closeTagName; + var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1); + } + } + } + } while (token && depth >= 0); + if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) { + return { + openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column), + closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column), + openTagName: openTagName, + closeTagName: closeTagName + }; + } + }; + this.$findOpeningTag = function (iterator, token) { + var prevToken = iterator.getCurrentToken(); + var tag = token.value; + var depth = 0; + var startRow = iterator.getCurrentTokenRow(); + var startColumn = iterator.getCurrentTokenColumn(); + var endColumn = startColumn + 2; + var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for ") + return; + var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > + iterator.stepBackward(); + iterator.stepBackward(); + do { + token = prevToken; + startRow = iterator.getCurrentTokenRow(); + startColumn = iterator.getCurrentTokenColumn(); + endColumn = startColumn + token.value.length; + prevToken = iterator.stepBackward(); + if (token) { + if (token.type.indexOf('tag-name') !== -1) { + if (tag === token.value) { + if (prevToken.value === '<') { + depth++; + if (depth > 0) { //found opening tag + var openTagName = new Range(startRow, startColumn, startRow, endColumn); + var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for < + do { + token = iterator.stepForward(); + } while (token && token.value !== '>'); + var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > + } + } + else if (prevToken.value === '') { // self-closing tag + var stepCount = 0; + var tmpToken = prevToken; + while (tmpToken) { + if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) { + depth--; + break; + } + else if (tmpToken.value === '<') { + break; + } + tmpToken = iterator.stepBackward(); + stepCount++; + } + for (var i = 0; i < stepCount; i++) { + iterator.stepForward(); + } + } + } + } while (prevToken && depth <= 0); + if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) { + return { + openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column), + closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column), + openTagName: openTagName, + closeTagName: closeTagName + }; } - } - list.push(item); - } - }; - return list; -}; - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/getUrl.js": -/*!********************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***! - \********************************************************/ -/***/ ((module) => { - -"use strict"; - - -module.exports = function (url, options) { - if (!options) { - options = {}; - } - if (!url) { - return url; - } - url = String(url.__esModule ? url.default : url); - - // If url is already wrapped in quotes, remove them - if (/^['"].*['"]$/.test(url)) { - url = url.slice(1, -1); - } - if (options.hash) { - url += options.hash; - } - - // Should url be wrapped? - // See https://drafts.csswg.org/css-values-3/#urls - if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) { - return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\""); - } - return url; -}; - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js": -/*!************************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***! - \************************************************************/ -/***/ ((module) => { - -"use strict"; - - -module.exports = function (item) { - var content = item[1]; - var cssMapping = item[3]; - if (!cssMapping) { - return content; - } - if (typeof btoa === "function") { - var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); - var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); - var sourceMapping = "/*# ".concat(data, " */"); - return [content].concat([sourceMapping]).join("\n"); - } - return [content].join("\n"); -}; - -/***/ }), - -/***/ "./style/bootstrap.min.css": -/*!*********************************!*\ - !*** ./style/bootstrap.min.css ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css */ "./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css"); - - - - - - - - - - - -var options = {}; - -options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); -options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); -options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); -options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); -options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); - -var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); - - - - - /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); - - -/***/ }), - -/***/ "./style/index.css": -/*!*************************!*\ - !*** ./style/index.css ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./index.css */ "./node_modules/css-loader/dist/cjs.js!./style/index.css"); - - - - - - - - - - - -var options = {}; - -options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); -options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); -options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); -options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); -options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); - -var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); - - - - - /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); - - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": -/*!****************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! - \****************************************************************************/ -/***/ ((module) => { - -"use strict"; - - -var stylesInDOM = []; -function getIndexByIdentifier(identifier) { - var result = -1; - for (var i = 0; i < stylesInDOM.length; i++) { - if (stylesInDOM[i].identifier === identifier) { - result = i; - break; - } - } - return result; -} -function modulesToDom(list, options) { - var idCountMap = {}; - var identifiers = []; - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var id = options.base ? item[0] + options.base : item[0]; - var count = idCountMap[id] || 0; - var identifier = "".concat(id, " ").concat(count); - idCountMap[id] = count + 1; - var indexByIdentifier = getIndexByIdentifier(identifier); - var obj = { - css: item[1], - media: item[2], - sourceMap: item[3], - supports: item[4], - layer: item[5] }; - if (indexByIdentifier !== -1) { - stylesInDOM[indexByIdentifier].references++; - stylesInDOM[indexByIdentifier].updater(obj); - } else { - var updater = addElementStyle(obj, options); - options.byIndex = i; - stylesInDOM.splice(i, 0, { - identifier: identifier, - updater: updater, - references: 1 - }); - } - identifiers.push(identifier); - } - return identifiers; -} -function addElementStyle(obj, options) { - var api = options.domAPI(options); - api.update(obj); - var updater = function updater(newObj) { - if (newObj) { - if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) { - return; - } - api.update(obj = newObj); - } else { - api.remove(); - } - }; - return updater; } -module.exports = function (list, options) { - options = options || {}; - list = list || []; - var lastIdentifiers = modulesToDom(list, options); - return function update(newList) { - newList = newList || []; - for (var i = 0; i < lastIdentifiers.length; i++) { - var identifier = lastIdentifiers[i]; - var index = getIndexByIdentifier(identifier); - stylesInDOM[index].references--; - } - var newLastIdentifiers = modulesToDom(newList, options); - for (var _i = 0; _i < lastIdentifiers.length; _i++) { - var _identifier = lastIdentifiers[_i]; - var _index = getIndexByIdentifier(_identifier); - if (stylesInDOM[_index].references === 0) { - stylesInDOM[_index].updater(); - stylesInDOM.splice(_index, 1); - } - } - lastIdentifiers = newLastIdentifiers; - }; -}; - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js": -/*!********************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***! - \********************************************************************/ -/***/ ((module) => { - -"use strict"; - - -var memo = {}; +exports.BracketMatch = BracketMatch; -/* istanbul ignore next */ -function getTarget(target) { - if (typeof memo[target] === "undefined") { - var styleTarget = document.querySelector(target); +}); - // Special case to return head of iframe instead of iframe itself - if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { - try { - // This will throw an exception if access to iframe is blocked - // due to cross-origin restrictions - styleTarget = styleTarget.contentDocument.head; - } catch (e) { - // istanbul ignore next - styleTarget = null; - } +ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/bidihandler","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/line_widgets","ace/document","ace/background_tokenizer","ace/search_highlight","ace/undomanager","ace/edit_session/folding","ace/edit_session/bracket_match"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var lang = require("./lib/lang"); +var BidiHandler = require("./bidihandler").BidiHandler; +var config = require("./config"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Selection = require("./selection").Selection; +var TextMode = require("./mode/text").Mode; +var Range = require("./range").Range; +var LineWidgets = require("./line_widgets").LineWidgets; +var Document = require("./document").Document; +var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer; +var SearchHighlight = require("./search_highlight").SearchHighlight; +var UndoManager = require("./undomanager").UndoManager; +var EditSession = /** @class */ (function () { + function EditSession(text, mode) { this.doc; + this.$breakpoints = []; + this.$decorations = []; + this.$frontMarkers = {}; + this.$backMarkers = {}; + this.$markerId = 1; + this.$undoSelect = true; + this.$editor = null; + this.prevOp = {}; + this.$foldData = []; + this.id = "session" + (++EditSession.$uid); + this.$foldData.toString = function () { + return this.join("\n"); + }; + this.$gutterCustomWidgets = {}; + this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this); + var _self = this; + this.bgTokenizer.on("update", function (e) { + _self._signal("tokenizerUpdate", e); + }); + this.on("changeFold", this.onChangeFold.bind(this)); + this.$onChange = this.onChange.bind(this); + if (typeof text != "object" || !text.getLine) + text = new Document(/**@type{string}*/ (text)); + this.setDocument(text); + this.selection = new Selection(this); + this.$onSelectionChange = this.onSelectionChange.bind(this); + this.selection.on("changeSelection", this.$onSelectionChange); + this.selection.on("changeCursor", this.$onSelectionChange); + this.$bidiHandler = new BidiHandler(this); + config.resetOptions(this); + this.setMode(mode); + config._signal("session", this); + this.destroyed = false; + this.$initOperationListeners(); } - memo[target] = styleTarget; - } - return memo[target]; -} - -/* istanbul ignore next */ -function insertBySelector(insert, style) { - var target = getTarget(insert); - if (!target) { - throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); - } - target.appendChild(style); -} -module.exports = insertBySelector; - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js": -/*!**********************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***! - \**********************************************************************/ -/***/ ((module) => { - -"use strict"; - - -/* istanbul ignore next */ -function insertStyleElement(options) { - var element = document.createElement("style"); - options.setAttributes(element, options.attributes); - options.insert(element, options.options); - return element; -} -module.exports = insertStyleElement; - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js": -/*!**********************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***! - \**********************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -/* istanbul ignore next */ -function setAttributesWithoutAttributes(styleElement) { - var nonce = true ? __webpack_require__.nc : 0; - if (nonce) { - styleElement.setAttribute("nonce", nonce); - } -} -module.exports = setAttributesWithoutAttributes; - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js": -/*!***************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***! - \***************************************************************/ -/***/ ((module) => { - -"use strict"; - - -/* istanbul ignore next */ -function apply(styleElement, options, obj) { - var css = ""; - if (obj.supports) { - css += "@supports (".concat(obj.supports, ") {"); - } - if (obj.media) { - css += "@media ".concat(obj.media, " {"); - } - var needLayer = typeof obj.layer !== "undefined"; - if (needLayer) { - css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {"); - } - css += obj.css; - if (needLayer) { - css += "}"; - } - if (obj.media) { - css += "}"; - } - if (obj.supports) { - css += "}"; - } - var sourceMap = obj.sourceMap; - if (sourceMap && typeof btoa !== "undefined") { - css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); - } - - // For old IE - /* istanbul ignore if */ - options.styleTagTransform(css, styleElement, options.options); -} -function removeStyleElement(styleElement) { - // istanbul ignore if - if (styleElement.parentNode === null) { - return false; - } - styleElement.parentNode.removeChild(styleElement); -} - -/* istanbul ignore next */ -function domAPI(options) { - if (typeof document === "undefined") { - return { - update: function update() {}, - remove: function remove() {} + EditSession.prototype.$initOperationListeners = function () { + var _this = this; + this.curOp = null; + this.on("change", function () { + if (!_this.curOp) { + _this.startOperation(); + _this.curOp.selectionBefore = _this.$lastSel; + } + _this.curOp.docChanged = true; + }, true); + this.on("changeSelection", function () { + if (!_this.curOp) { + _this.startOperation(); + _this.curOp.selectionBefore = _this.$lastSel; + } + _this.curOp.selectionChanged = true; + }, true); + this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true)); + }; + EditSession.prototype.startOperation = function (commandEvent) { + if (this.curOp) { + if (!commandEvent || this.curOp.command) { + return; + } + this.prevOp = this.curOp; + } + if (!commandEvent) { + commandEvent = {}; + } + this.$operationResetTimer.schedule(); + this.curOp = { + command: commandEvent.command || {}, + args: commandEvent.args + }; + this.curOp.selectionBefore = this.selection.toJSON(); + this._signal("startOperation", commandEvent); + }; + EditSession.prototype.endOperation = function (e) { + if (this.curOp) { + if (e && e.returnValue === false) { + this.curOp = null; + this._signal("endOperation", e); + return; + } + if (e == true && this.curOp.command && this.curOp.command.name == "mouse") { + return; + } + var currentSelection = this.selection.toJSON(); + this.curOp.selectionAfter = currentSelection; + this.$lastSel = this.selection.toJSON(); + this.getUndoManager().addSelection(currentSelection); + this._signal("beforeEndOperation"); + this.prevOp = this.curOp; + this.curOp = null; + this._signal("endOperation", e); + } + }; + EditSession.prototype.setDocument = function (doc) { + if (this.doc) + this.doc.off("change", this.$onChange); + this.doc = doc; + doc.on("change", this.$onChange, true); + this.bgTokenizer.setDocument(this.getDocument()); + this.resetCaches(); + }; + EditSession.prototype.getDocument = function () { + return this.doc; + }; + Object.defineProperty(EditSession.prototype, "widgetManager", { + get: function () { + var widgetManager = new LineWidgets(this); + this.widgetManager = widgetManager; + if (this.$editor) + widgetManager.attach(this.$editor); + return widgetManager; + }, + set: function (value) { + Object.defineProperty(this, "widgetManager", { + writable: true, + enumerable: true, + configurable: true, + value: value, + }); + }, + enumerable: false, + configurable: true + }); + EditSession.prototype.$resetRowCache = function (docRow) { + if (!docRow) { + this.$docRowCache = []; + this.$screenRowCache = []; + return; + } + var l = this.$docRowCache.length; + var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1; + if (l > i) { + this.$docRowCache.splice(i, l); + this.$screenRowCache.splice(i, l); + } + }; + EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) { + var low = 0; + var hi = cacheArray.length - 1; + while (low <= hi) { + var mid = (low + hi) >> 1; + var c = cacheArray[mid]; + if (val > c) + low = mid + 1; + else if (val < c) + hi = mid - 1; + else + return mid; + } + return low - 1; + }; + EditSession.prototype.resetCaches = function () { + this.$modified = true; + this.$wrapData = []; + this.$rowLengthCache = []; + this.$resetRowCache(0); + if (!this.destroyed) + this.bgTokenizer.start(0); + }; + EditSession.prototype.onChangeFold = function (e) { + var fold = e.data; + this.$resetRowCache(fold.start.row); + }; + EditSession.prototype.onChange = function (delta) { + this.$modified = true; + this.$bidiHandler.onChange(delta); + this.$resetRowCache(delta.start.row); + var removedFolds = this.$updateInternalDataOnChange(delta); + if (!this.$fromUndo && this.$undoManager) { + if (removedFolds && removedFolds.length) { + this.$undoManager.add({ + action: "removeFolds", + folds: removedFolds + }, this.mergeUndoDeltas); + this.mergeUndoDeltas = true; + } + this.$undoManager.add(delta, this.mergeUndoDeltas); + this.mergeUndoDeltas = true; + this.$informUndoManager.schedule(); + } + this.bgTokenizer.$updateOnChange(delta); + this._signal("change", delta); + }; + EditSession.prototype.onSelectionChange = function () { + this._signal("changeSelection"); + }; + EditSession.prototype.setValue = function (text) { + this.doc.setValue(text); + this.selection.moveTo(0, 0); + this.$resetRowCache(0); + this.setUndoManager(this.$undoManager); + this.getUndoManager().reset(); + }; + EditSession.fromJSON = function (session) { + if (typeof session == "string") + session = JSON.parse(session); + var undoManager = new UndoManager(); + undoManager.$undoStack = session.history.undo; + undoManager.$redoStack = session.history.redo; + undoManager.mark = session.history.mark; + undoManager.$rev = session.history.rev; + var editSession = new EditSession(session.value); + session.folds.forEach(function (fold) { + editSession.addFold("...", Range.fromPoints(fold.start, fold.end)); + }); + editSession.setAnnotations(session.annotations); + editSession.setBreakpoints(session.breakpoints); + editSession.setMode(session.mode); + editSession.setScrollLeft(session.scrollLeft); + editSession.setScrollTop(session.scrollTop); + editSession.setUndoManager(undoManager); + editSession.selection.fromJSON(session.selection); + return editSession; + }; + EditSession.prototype.toJSON = function () { + return { + annotations: this.$annotations, + breakpoints: this.$breakpoints, + folds: this.getAllFolds().map(function (fold) { + return fold.range; + }), + history: this.getUndoManager(), + mode: this.$mode.$id, + scrollLeft: this.$scrollLeft, + scrollTop: this.$scrollTop, + selection: this.selection.toJSON(), + value: this.doc.getValue() + }; + }; + EditSession.prototype.toString = function () { + return this.doc.getValue(); + }; + EditSession.prototype.getSelection = function () { + return this.selection; + }; + EditSession.prototype.getState = function (row) { + return this.bgTokenizer.getState(row); + }; + EditSession.prototype.getTokens = function (row) { + return this.bgTokenizer.getTokens(row); + }; + EditSession.prototype.getTokenAt = function (row, column) { + var tokens = this.bgTokenizer.getTokens(row); + var token, c = 0; + if (column == null) { + var i = tokens.length - 1; + c = this.getLine(row).length; + } + else { + for (var i = 0; i < tokens.length; i++) { + c += tokens[i].value.length; + if (c >= column) + break; + } + } + token = tokens[i]; + if (!token) + return null; + token.index = i; + token.start = c - token.value.length; + return token; + }; + EditSession.prototype.setUndoManager = function (undoManager) { + this.$undoManager = undoManager; + if (this.$informUndoManager) + this.$informUndoManager.cancel(); + if (undoManager) { + var self = this; + undoManager.addSession(this); + this.$syncInformUndoManager = function () { + self.$informUndoManager.cancel(); + self.mergeUndoDeltas = false; + }; + this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); + } + else { + this.$syncInformUndoManager = function () { }; + } + }; + EditSession.prototype.markUndoGroup = function () { + if (this.$syncInformUndoManager) + this.$syncInformUndoManager(); }; - } - var styleElement = options.insertStyleElement(options); - return { - update: function update(obj) { - apply(styleElement, options, obj); - }, - remove: function remove() { - removeStyleElement(styleElement); - } - }; -} -module.exports = domAPI; - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js": -/*!*********************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***! - \*********************************************************************/ -/***/ ((module) => { - -"use strict"; - - -/* istanbul ignore next */ -function styleTagTransform(css, styleElement) { - if (styleElement.styleSheet) { - styleElement.styleSheet.cssText = css; - } else { - while (styleElement.firstChild) { - styleElement.removeChild(styleElement.firstChild); - } - styleElement.appendChild(document.createTextNode(css)); - } -} -module.exports = styleTagTransform; - -/***/ }), - -/***/ "../trial/lib/config.js": -/*!******************************!*\ - !*** ../trial/lib/config.js ***! - \******************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); - - -/***/ }), - -/***/ "../trial/lib/graph.js": -/*!*****************************!*\ - !*** ../trial/lib/graph.js ***! - \*****************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TrialGraph = void 0; -__webpack_require__(/*! d3-transition */ "../../node_modules/d3-transition/src/index.js"); -const d3_color_1 = __webpack_require__(/*! d3-color */ "../../node_modules/d3-color/src/index.js"); -const d3_hierarchy_1 = __webpack_require__(/*! d3-hierarchy */ "../../node_modules/d3-hierarchy/src/index.js"); -const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); -const d3_zoom_1 = __webpack_require__(/*! d3-zoom */ "../../node_modules/d3-zoom/src/index.js"); -const fs = __webpack_require__(/*! file-saver */ "../../node_modules/file-saver/dist/FileSaver.min.js"); -const utils_1 = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); -class TrialGraph { - constructor(graphId, div, config = {}, showDiffFunction, nowVisPanel) { - if (showDiffFunction && nowVisPanel) { - this.showDiffFunction = showDiffFunction; - this.nowVisPanel = nowVisPanel; + EditSession.prototype.getUndoManager = function () { + return this.$undoManager || this.$defaultUndoManager; + }; + EditSession.prototype.getTabString = function () { + if (this.getUseSoftTabs()) { + return lang.stringRepeat(" ", this.getTabSize()); } - this.i = 0; - let defaultConfig = { - customSize: function (g) { - return [ - g.config.width, - g.config.height, - ]; - }, - customMouseOver: (g, d) => false, - customMouseOut: (g, d) => false, - customForm: (g, form) => null, - customLoadTooltip: (g, div, text, trialid, aid) => null, - duration: 750, - top: 50, - right: 30, - bottom: 80, - left: 30, - width: 900, - height: 500, - useTooltip: false, - fontSize: 10, - labelFontSize: 10, - nodeSizeX: 47, - nodeSizeY: 100, - queryTooltip: false + else { + return "\t"; + } + }; + EditSession.prototype.setUseSoftTabs = function (val) { + this.setOption("useSoftTabs", val); + }; + EditSession.prototype.getUseSoftTabs = function () { + return this.$useSoftTabs && !this.$mode.$indentWithTabs; + }; + EditSession.prototype.setTabSize = function (tabSize) { + this.setOption("tabSize", tabSize); + }; + EditSession.prototype.getTabSize = function () { + return this.$tabSize; + }; + EditSession.prototype.isTabStop = function (position) { + return this.$useSoftTabs && (position.column % this.$tabSize === 0); + }; + EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) { + this.setOption("navigateWithinSoftTabs", navigateWithinSoftTabs); + }; + EditSession.prototype.getNavigateWithinSoftTabs = function () { + return this.$navigateWithinSoftTabs; + }; + EditSession.prototype.setOverwrite = function (overwrite) { + this.setOption("overwrite", overwrite); + }; + EditSession.prototype.getOverwrite = function () { + return this.$overwrite; + }; + EditSession.prototype.toggleOverwrite = function () { + this.setOverwrite(!this.$overwrite); + }; + EditSession.prototype.addGutterDecoration = function (row, className) { + if (!this.$decorations[row]) + this.$decorations[row] = ""; + this.$decorations[row] += " " + className; + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.removeGutterCustomWidget = function (row) { + if (this.$editor) { + this.$editor.renderer.$gutterLayer.$removeCustomWidget(row); + } + }; + EditSession.prototype.addGutterCustomWidget = function (row, attributes) { + if (this.$editor) { + this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes); + } + }; + EditSession.prototype.removeGutterDecoration = function (row, className) { + this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.getBreakpoints = function () { + return this.$breakpoints; + }; + EditSession.prototype.setBreakpoints = function (rows) { + this.$breakpoints = []; + for (var i = 0; i < rows.length; i++) { + this.$breakpoints[rows[i]] = "ace_breakpoint"; + } + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.clearBreakpoints = function () { + this.$breakpoints = []; + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.setBreakpoint = function (row, className) { + if (className === undefined) + className = "ace_breakpoint"; + if (className) + this.$breakpoints[row] = className; + else + delete this.$breakpoints[row]; + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.clearBreakpoint = function (row) { + delete this.$breakpoints[row]; + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.addMarker = function (range, clazz, type, inFront) { + var id = this.$markerId++; + var marker = { + range: range, + type: type || "line", + renderer: typeof type == "function" ? type : null, + clazz: clazz, + inFront: !!inFront, + id: id }; - this.config = Object.assign({}, defaultConfig, config); - this.graphId = graphId; - this.zoom = (0, d3_zoom_1.zoom)() - .on("zoom", (event) => { - return this.zoomFunction(event); - }) - .on("start", () => (0, d3_selection_1.select)('body').style("cursor", "move")) - .on("end", () => (0, d3_selection_1.select)('body').style("cursor", "auto")) - .wheelDelta(function () { - const e = event; - return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000; - }); - this.div = (0, d3_selection_1.select)(div); - this.form = this.div - .append("form") - .classed("trial-toolbar", true); - this.svg = (0, d3_selection_1.select)(div) - .append("div") - .append("svg") - .attr("width", this.config.width) - .attr("height", this.config.height) - .call(this.zoom); - this.createMarker('end', 'enormal', 'black'); - this.createMarker('endbefore', 'ebefore', 'red'); - this.createMarker('endafter', 'eafter', 'green'); - this.g = this.svg.append("g") - .attr("id", this._graphId()) - .attr("transform", "translate(0,0)") - .classed('TrialGraph', true); - this.tree = (0, d3_hierarchy_1.tree)() - .nodeSize([ - this.config.nodeSizeX, - this.config.nodeSizeY - ]); - // Tooltip - this.tooltipDiv = (0, d3_selection_1.select)("body").append("div") - .attr("class", "now-tooltip now-trial-tooltip") - .style("opacity", 0) - .on("mouseout", () => { - this.closeTooltip(); - }); - // Zoom - this.svg - .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top)); - this.activationStorage = {}; - } - init(data, t1, t2) { - this.t1 = t1; - this.t2 = t2; - // **Toolbar** - this.createToolbar(this.form); - // **Graph** - this.minDuration = data.min_duration; - this.maxDuration = data.max_duration; - this.totalDuration = {}; - this.totalDuration[t1] = this.maxDuration[t1] - this.minDuration[t1]; - this.totalDuration[t2] = this.maxDuration[t2] - this.minDuration[t2]; - this.maxTotalDuration = Math.max(this.totalDuration[t1], this.totalDuration[t2]); - this.colors = data.colors; - if (!data.root) + if (inFront) { + this.$frontMarkers[id] = marker; + this._signal("changeFrontMarker"); + } + else { + this.$backMarkers[id] = marker; + this._signal("changeBackMarker"); + } + return id; + }; + EditSession.prototype.addDynamicMarker = function (marker, inFront) { + if (!marker.update) return; - this.root = (0, d3_hierarchy_1.hierarchy)(data.root, function (d) { return d.children; }); - this.root.x0 = 0; - this.root.y0 = (this.config.width) / 2; - this.alledges = data.edges; - this.update(this.root); - } - createToolbar(form) { - let self = this; - form = form.append("div") - .classed("buttons buttonsGraph", true); - this.config.customForm(this, form); - // Reset zoom - form.append("a") - .classed("toollink", true) - .attr("id", "trial-" + this.graphId + "-restore-zoom") - .attr("href", "#") - .attr("title", "Restore zoom") - .on("click", () => this.restorePosition()) - .append("i") - .classed("fa fa-eye", true); - // Toggle Tooltips - let tooltipsToggle = form.append("input") - .attr("id", "trial-" + this.graphId + "-toolbar-tooltips") - .attr("type", "checkbox") - .attr("name", "trial-toolbar-tooltips") - .attr("value", "show") - .property("checked", this.config.useTooltip) - .on("change", () => { - this.closeTooltip(); - this.config.useTooltip = tooltipsToggle.property("checked"); - }); - form.append("label") - .attr("for", "trial-" + this.graphId + "-toolbar-tooltips") - .attr("title", "Show tooltips on mouse hover") - .append("i") - .classed("fa fa-comment", true); - // Download SVG - form.append("a") - .classed("toollink", true) - .attr("id", "trial-" + this.graphId + "-download") - .attr("href", "#") - .attr("title", "Download graph SVG") - .on("click", () => { - this.download(); - }) - .append("i") - .classed("fa fa-download", true); - // Set Font Size - let fontToggle = form.append("input") - .attr("id", "trial-" + this.graphId + "-toolbar-fonts") - .attr("type", "checkbox") - .attr("name", "trial-toolbar-fonts") - .attr("value", "show") - .property("checked", false) - .on("change", () => { - let display = fontToggle.property("checked") ? "inline-block" : "none"; - fontSize.style("display", display); - labelFontSize.style("display", display); - }); - form.append("label") - .attr("for", "trial-" + this.graphId + "-toolbar-fonts") - .attr("title", "Set font size") - .append("i") - .classed("fa fa-font", true); - let fontSize = form.append("input") - .attr("type", "number") - .attr("value", this.config.fontSize) - .style("width", "50px") - .style("display", "none") - .attr("title", "Node font size") - .on("change", () => { - this.config.fontSize = fontSize.property("value"); - this.svg.selectAll(".node text").attr("font-size", this.config.fontSize); - }); - let labelFontSize = form.append("input") - .attr("type", "number") - .attr("value", this.config.labelFontSize) - .style("width", "50px") - .style("display", "none") - .attr("title", "Arrow font size") - .on("change", () => { - this.config.labelFontSize = labelFontSize.property("value"); - this.svg.selectAll("text.label_text").attr("font-size", this.config.labelFontSize); - }); - // Set distances - let setDistances = function () { - self.config.nodeSizeX = distanceX.property("value"); - self.config.nodeSizeY = distanceY.property("value"); - self.wrapText(); - self.tree - .nodeSize([ - self.config.nodeSizeX, - self.config.nodeSizeY - ]); - self.update(self.root); - }; - // Set Distance X - let distanceXToggle = form.append("input") - .attr("id", "trial-" + this.graphId + "-toolbar-distance-x") - .attr("type", "checkbox") - .attr("name", "trial-toolbar-distance-x") - .attr("value", "show") - .property("checked", false) - .on("change", () => { - let display = distanceXToggle.property("checked") ? "inline-block" : "none"; - distanceX.style("display", display); - }); - form.append("label") - .attr("for", "trial-" + this.graphId + "-toolbar-distance-x") - .attr("title", "Set horizontal distance") - .append("i") - .classed("fa fa-arrows-h", true); - let distanceX = form.append("input") - .attr("type", "number") - .attr("value", this.config.nodeSizeX) - .style("width", "65px") - .style("display", "none") - .attr("title", "Node horizontal distance") - .on("change", setDistances); - // Set Distance Y - let distanceYToggle = form.append("input") - .attr("id", "trial-" + this.graphId + "-toolbar-distance-y") - .attr("type", "checkbox") - .attr("name", "trial-toolbar-distance-y") - .attr("value", "show") - .property("checked", false) - .on("change", () => { - let display = distanceYToggle.property("checked") ? "inline-block" : "none"; - distanceY.style("display", display); - }); - form.append("label") - .attr("for", "trial-" + this.graphId + "-toolbar-distance-y") - .attr("title", "Set vertical distance") - .append("i") - .classed("fa fa-arrows-v", true); - let distanceY = form.append("input") - .attr("type", "number") - .attr("value", this.config.nodeSizeY) - .style("width", "65px") - .style("display", "none") - .attr("title", "Node vertical distance") - .on("change", setDistances); - // Submit - form.append("input") - .attr("type", "submit") - .attr("name", "prevent-enter") - .attr("onclick", "return false;") - .style("display", "none"); - } - load(data, t1, t2) { - this.init(data, t1, t2); - this.updateWindow(); - } - restorePosition() { - this.wrapText(); - this.svg - .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top)); - } - updateWindow() { - let size = this.config.customSize(this); - this.config.width = size[0]; - this.config.height = size[1]; - this.svg - .attr("width", size[0]) - .attr("height", size[1]); - } - update(source) { - let treeData = this.tree(this.root); - this.nodes = treeData.descendants(); - var node = this.g.selectAll('g.node') - .data(this.nodes, (d) => { return d.id || (d.id = ++this.i); }); - let validNodes = {}; - this.nodes.forEach((node) => { - validNodes[node.data.index] = node; - }); - var edges = this.alledges.filter((edge) => { - let source = validNodes[edge.source]; - let target = validNodes[edge.target]; - if (source == undefined || target == undefined) { - return false; + var id = this.$markerId++; + marker.id = id; + marker.inFront = !!inFront; + if (inFront) { + this.$frontMarkers[id] = marker; + this._signal("changeFrontMarker"); + } + else { + this.$backMarkers[id] = marker; + this._signal("changeBackMarker"); + } + return marker; + }; + EditSession.prototype.removeMarker = function (markerId) { + var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId]; + if (!marker) + return; + var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers; + delete (markers[markerId]); + this._signal(marker.inFront ? "changeFrontMarker" : "changeBackMarker"); + }; + EditSession.prototype.getMarkers = function (inFront) { + return inFront ? this.$frontMarkers : this.$backMarkers; + }; + EditSession.prototype.highlight = function (re) { + if (!this.$searchHighlight) { + var highlight = new SearchHighlight(null, "ace_selected-word", "text"); + this.$searchHighlight = this.addDynamicMarker(highlight); + } + this.$searchHighlight.setRegexp(re); + }; + EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) { + if (typeof endRow != "number") { + clazz = endRow; + endRow = startRow; + } + if (!clazz) + clazz = "ace_step"; + var range = new Range(startRow, 0, endRow, Infinity); + range.id = this.addMarker(range, clazz, "fullLine", inFront); + return range; + }; + EditSession.prototype.setAnnotations = function (annotations) { + this.$annotations = annotations; + this._signal("changeAnnotation", {}); + }; + EditSession.prototype.getAnnotations = function () { + return this.$annotations || []; + }; + EditSession.prototype.clearAnnotations = function () { + this.setAnnotations([]); + }; + EditSession.prototype.$detectNewLine = function (text) { + var match = text.match(/^.*?(\r?\n)/m); + if (match) { + this.$autoNewLine = match[1]; + } + else { + this.$autoNewLine = "\n"; + } + }; + EditSession.prototype.getWordRange = function (row, column) { + var line = this.getLine(row); + var inToken = false; + if (column > 0) + inToken = !!line.charAt(column - 1).match(this.tokenRe); + if (!inToken) + inToken = !!line.charAt(column).match(this.tokenRe); + if (inToken) + var re = this.tokenRe; + else if (/^\s+$/.test(line.slice(column - 1, column + 1))) + var re = /\s/; + else + var re = this.nonTokenRe; + var start = column; + if (start > 0) { + do { + start--; + } while (start >= 0 && line.charAt(start).match(re)); + start++; + } + var end = column; + while (end < line.length && line.charAt(end).match(re)) { + end++; + } + return new Range(row, start, row, end); + }; + EditSession.prototype.getAWordRange = function (row, column) { + var wordRange = this.getWordRange(row, column); + var line = this.getLine(wordRange.end.row); + while (line.charAt(wordRange.end.column).match(/[ \t]/)) { + wordRange.end.column += 1; + } + return wordRange; + }; + EditSession.prototype.setNewLineMode = function (newLineMode) { + this.doc.setNewLineMode(newLineMode); + }; + EditSession.prototype.getNewLineMode = function () { + return this.doc.getNewLineMode(); + }; + EditSession.prototype.setUseWorker = function (useWorker) { this.setOption("useWorker", useWorker); }; + EditSession.prototype.getUseWorker = function () { return this.$useWorker; }; + EditSession.prototype.onReloadTokenizer = function (e) { + var rows = e.data; + this.bgTokenizer.start(rows.first); + this._signal("tokenizerUpdate", e); + }; + EditSession.prototype.setMode = function (mode, cb) { + if (mode && typeof mode === "object") { + if (mode.getTokenizer) + return this.$onChangeMode(mode); + var options = mode; + var path = options.path; + } + else { + path = /**@type{string}*/ (mode) || "ace/mode/text"; + } + if (!this.$modes["ace/mode/text"]) + this.$modes["ace/mode/text"] = new TextMode(); + if (this.$modes[path] && !options) { + this.$onChangeMode(this.$modes[path]); + cb && cb(); + return; + } + this.$modeId = path; + config.loadModule(["mode", path], function (m) { + if (this.destroyed) { + return; } - return true; - }).map((edge) => { - let source = validNodes[edge.source]; - let target = validNodes[edge.target]; - var copy = Object.assign({}, edge); - copy.id = edge.source + "-" + edge.target; - copy.source = source; - copy.target = target; - return copy; - }); - this.updateNodes(source, node); - this.updateLinks(source, edges); - this.updateLinkLabels(edges); - // Store old positions for transition - this.nodes.forEach(function (d, i) { - d.x0 = d.x; - d.y0 = d.y; - }); - this.wrapText(); - } - download(name) { - var isFileSaverSupported = false; + if (this.$modeId !== path) + return cb && cb(); + if (this.$modes[path] && !options) { + this.$onChangeMode(this.$modes[path]); + } + else if (m && m.Mode) { + m = new m.Mode(options); + if (!options) { + this.$modes[path] = m; + m.$id = path; + } + this.$onChangeMode(m); + } + cb && cb(); + }.bind(this)); + if (!this.$mode) + this.$onChangeMode(this.$modes["ace/mode/text"], true); + }; + EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) { + if (!$isPlaceholder) + this.$modeId = mode.$id; + if (this.$mode === mode) + return; + var oldMode = this.$mode; + this.$mode = mode; + this.$stopWorker(); + if (this.$useWorker) + this.$startWorker(); + var tokenizer = mode.getTokenizer(); + if (tokenizer.on !== undefined) { + var onReloadTokenizer = this.onReloadTokenizer.bind(this); + tokenizer.on("update", onReloadTokenizer); + } + this.bgTokenizer.setTokenizer(tokenizer); + this.bgTokenizer.setDocument(this.getDocument()); + this.tokenRe = mode.tokenRe; + this.nonTokenRe = mode.nonTokenRe; + if (!$isPlaceholder) { + if (mode.attachToSession) + mode.attachToSession(this); + this.$options.wrapMethod.set.call(this, this.$wrapMethod); + this.$setFolding(mode.foldingRules); + this.bgTokenizer.start(0); + this._emit("changeMode", { oldMode: oldMode, mode: mode }); + } + }; + EditSession.prototype.$stopWorker = function () { + if (this.$worker) { + this.$worker.terminate(); + this.$worker = null; + } + }; + EditSession.prototype.$startWorker = function () { try { - isFileSaverSupported = !!new Blob(); + this.$worker = this.$mode.createWorker(this); } catch (e) { - alert("blob not supported"); + config.warn("Could not load worker", e); + this.$worker = null; } - name = (name === undefined) ? "trial.svg" : name; - let gnode = this.g.node(); - var bbox = gnode.getBBox(); - var width = this.svg.attr("width"), height = this.svg.attr("height"); - this.g.attr("transform", "translate(" + (-bbox.x + 5) + ", " + (-bbox.y + 5) + ")"); - let svgNode = this.svg - .attr("title", "Trial") - .attr("version", 1.1) - .attr("width", bbox.width + 10) - .attr("height", bbox.height + 10) - .attr("xmlns", "http://www.w3.org/2000/svg") - .node(); - var html = svgNode.parentNode.innerHTML; - html = ' width) + width = w.screenWidth; + }); + return this.lineWidgetWidth = width; + }; + EditSession.prototype.$computeWidth = function (force) { + if (this.$modified || force) { + this.$modified = false; + if (this.$useWrapMode) + return this.screenWidth = this.$wrapLimit; + var lines = this.doc.getAllLines(); + var cache = this.$rowLengthCache; + var longestScreenLine = 0; + var foldIndex = 0; + var foldLine = this.$foldData[foldIndex]; + var foldStart = foldLine ? foldLine.start.row : Infinity; + var len = lines.length; + for (var i = 0; i < len; i++) { + if (i > foldStart) { + i = foldLine.end.row + 1; + if (i >= len) + break; + foldLine = this.$foldData[foldIndex++]; + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (cache[i] == null) + cache[i] = this.$getStringScreenWidth(lines[i])[0]; + if (cache[i] > longestScreenLine) + longestScreenLine = cache[i]; + } + this.screenWidth = longestScreenLine; } - } - wrapText() { - this.svg.selectAll(".node text:not(.nowrap)") - .call(utils_1.wrap, this.config.nodeSizeX); - } - calculateColor(d, trial_id) { - var proportion = Math.round(255 * (1.0 - (d.duration[trial_id] / this.maxTotalDuration))); - //Math.round(510 * (node.duration - self.min_duration[node.trial_id]) / self.total_duration[node.trial_id]); - return (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString(); - } - getFunctionDiff(activations, trial_ids) { - let showModal = (activations[trial_ids[0]].length > 1 || activations[trial_ids[1]].length > 1); - let modal; - let modalBody; - let button; - if (showModal) { - modal = (0, d3_selection_1.select)(document.getElementById("main")) - .append("div").classed("modal fade show", true) - .attr("id", "functionDiffModal") - .attr("tabindex", "-1") - .attr("role", "dialog") - .attr("aria-labelledby", "functionDiffModalLabel") - .style("display", "none") - .attr("aria-hidden", "false") - .style("display", "block"); - let modalDialog = modal.append("div").classed("modal-dialog", true).attr("role", "document"); - let modalContent = modalDialog.append("div").classed("modal-content", true); - let modalHeader = modalContent.append("div").classed("modal-header", true); - modalHeader.append("h5").classed("modal-title", true).attr("id", "functionDiffModalLabel").text("Select a function activation: "); - modalHeader.append("button").classed("close", true).attr("data-dismiss", "modal").attr("aria-label", "Close") - .append("span").attr("aria-hidden", "true").html("×").on("click", () => modal.remove()); - modalBody = modalContent.append("div").classed("modal-body", true); - modalBody.append("p").text("This function was called multipled times. Select the activations you want to see their diff").style("font-weight", "bold"); - button = modalContent.append("div").classed("modal-footer", true).append("button").classed("btn btn-primary", true).text("Confirm"); + }; + EditSession.prototype.getLine = function (row) { + return this.doc.getLine(row); + }; + EditSession.prototype.getLines = function (firstRow, lastRow) { + return this.doc.getLines(firstRow, lastRow); + }; + EditSession.prototype.getLength = function () { + return this.doc.getLength(); + }; + EditSession.prototype.getTextRange = function (range) { + return this.doc.getTextRange(range || this.selection.getRange()); + }; + EditSession.prototype.insert = function (position, text) { + return this.doc.insert(position, text); + }; + EditSession.prototype.remove = function (range) { + return this.doc.remove(range); + }; + EditSession.prototype.removeFullLines = function (firstRow, lastRow) { + return this.doc.removeFullLines(firstRow, lastRow); + }; + EditSession.prototype.undoChanges = function (deltas, dontSelect) { + if (!deltas.length) + return; + this.$fromUndo = true; + for (var i = deltas.length - 1; i != -1; i--) { + var delta = deltas[i]; + if (delta.action == "insert" || delta.action == "remove") { + this.doc.revertDelta(delta); + } + else if (delta.folds) { + this.addFolds(delta.folds); + } } - let compareFunctionCallsUrl = "commands/diff"; - let windowLabel = "Diff"; - for (let i = 0; i < trial_ids.length; i++) { - let trial = trial_ids[i]; - if (showModal) { - let trialNumber = i == 0 ? "first" : "second"; - modalBody.append("span").text("Select the " + trialNumber + " trial activation: "); - let select = modalBody.append("select").classed("form-select", true).attr("arial-label", "functionTrial" + trial).attr("id", "functionTrial" + trial); - for (let activation in activations[trial]) { - fetch("/diff/getFunctionActivationArguments/" + trial + "/" + activations[trial][activation], { - method: 'GET', // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - }, - }).then((response) => { - response.json().then((json) => { - select.append("option").attr("value", activations[trial][activation]).text(activations[trial][activation] + " params: " + json.function_params.toString()); - }); - }); + if (!dontSelect && this.$undoSelect) { + if (deltas.selectionBefore) + this.selection.fromJSON(deltas.selectionBefore); + else + this.selection.setRange(this.$getUndoSelection(deltas, true)); + } + this.$fromUndo = false; + }; + EditSession.prototype.redoChanges = function (deltas, dontSelect) { + if (!deltas.length) + return; + this.$fromUndo = true; + for (var i = 0; i < deltas.length; i++) { + var delta = deltas[i]; + if (delta.action == "insert" || delta.action == "remove") { + this.doc.$safeApplyDelta(delta); + } + } + if (!dontSelect && this.$undoSelect) { + if (deltas.selectionAfter) + this.selection.fromJSON(deltas.selectionAfter); + else + this.selection.setRange(this.$getUndoSelection(deltas, false)); + } + this.$fromUndo = false; + }; + EditSession.prototype.setUndoSelect = function (enable) { + this.$undoSelect = enable; + }; + EditSession.prototype.$getUndoSelection = function (deltas, isUndo) { + function isInsert(delta) { + return isUndo ? delta.action !== "insert" : delta.action === "insert"; + } + var range, point; + for (var i = 0; i < deltas.length; i++) { + var delta = deltas[i]; + if (!delta.start) + continue; // skip folds + if (!range) { + if (isInsert(delta)) { + range = Range.fromPoints(delta.start, delta.end); + } + else { + range = Range.fromPoints(delta.start, delta.start); + } + continue; + } + if (isInsert(delta)) { + point = delta.start; + if (range.compare(point.row, point.column) == -1) { + range.setStart(point); + } + point = delta.end; + if (range.compare(point.row, point.column) == 1) { + range.setEnd(point); } - modalBody.append("br"); } else { - if (compareFunctionCallsUrl.length > 0) - compareFunctionCallsUrl += "/"; - compareFunctionCallsUrl += trial + "/"; - compareFunctionCallsUrl += activations[trial]; - windowLabel += " trial " + trial + " activation_id " + activations[trial]; + point = delta.start; + if (range.compare(point.row, point.column) == -1) { + range = Range.fromPoints(delta.start, delta.start); + } } } - if (showModal) { - button === null || button === void 0 ? void 0 : button.on("click", () => { - let firstTrialActivation = document.getElementById("functionTrial" + trial_ids[0]).selectedOptions[0].value; - let secondTrialActivation = document.getElementById("functionTrial" + trial_ids[1]).selectedOptions[0].value; - compareFunctionCallsUrl += "/" + trial_ids[0] + "/" + firstTrialActivation + "/" + trial_ids[1] + "/" + secondTrialActivation; - windowLabel += " trial " + trial_ids[0] + " activation_id " + firstTrialActivation + " trial " + trial_ids[1] + " activation_id " + secondTrialActivation; - makeRequest(this.showDiffFunction, this.nowVisPanel); - modal.remove(); - }); + return range; + }; + EditSession.prototype.replace = function (range, text) { + return this.doc.replace(range, text); + }; + EditSession.prototype.moveText = function (fromRange, toPosition, copy) { + var text = this.getTextRange(fromRange); + var folds = this.getFoldsInRange(fromRange); + var toRange = Range.fromPoints(toPosition, toPosition); + if (!copy) { + this.remove(fromRange); + var rowDiff = fromRange.start.row - fromRange.end.row; + var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; + if (collDiff) { + if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) + toRange.start.column += collDiff; + if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) + toRange.end.column += collDiff; + } + if (rowDiff && toRange.start.row >= fromRange.end.row) { + toRange.start.row += rowDiff; + toRange.end.row += rowDiff; + } + } + toRange.end = this.insert(toRange.start, text); + if (folds.length) { + var oldStart = fromRange.start; + var newStart = toRange.start; + var rowDiff = newStart.row - oldStart.row; + var collDiff = newStart.column - oldStart.column; + this.addFolds(folds.map(function (x) { + x = x.clone(); + if (x.start.row == oldStart.row) + x.start.column += collDiff; + if (x.end.row == oldStart.row) + x.end.column += collDiff; + x.start.row += rowDiff; + x.end.row += rowDiff; + return x; + })); + } + return toRange; + }; + EditSession.prototype.indentRows = function (startRow, endRow, indentString) { + indentString = indentString.replace(/\t/g, this.getTabString()); + for (var row = startRow; row <= endRow; row++) + this.doc.insertInLine({ row: row, column: 0 }, indentString); + }; + EditSession.prototype.outdentRows = function (range) { + var rowRange = range.collapseRows(); + var deleteRange = new Range(0, 0, 0, 0); + var size = this.getTabSize(); + for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { + var line = this.getLine(i); + deleteRange.start.row = i; + deleteRange.end.row = i; + for (var j = 0; j < size; ++j) + if (line.charAt(j) != ' ') + break; + if (j < size && line.charAt(j) == '\t') { + deleteRange.start.column = j; + deleteRange.end.column = j + 1; + } + else { + deleteRange.start.column = 0; + deleteRange.end.column = j; + } + this.remove(deleteRange); + } + }; + EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) { + firstRow = this.getRowFoldStart(firstRow); + lastRow = this.getRowFoldEnd(lastRow); + if (dir < 0) { + var row = this.getRowFoldStart(firstRow + dir); + if (row < 0) + return 0; + var diff = row - firstRow; + } + else if (dir > 0) { + var row = this.getRowFoldEnd(lastRow + dir); + if (row > this.doc.getLength() - 1) + return 0; + var diff = row - lastRow; + } + else { + firstRow = this.$clipRowToDocument(firstRow); + lastRow = this.$clipRowToDocument(lastRow); + var diff = lastRow - firstRow + 1; + } + var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); + var folds = this.getFoldsInRange(range).map(function (x) { + x = x.clone(); + x.start.row += diff; + x.end.row += diff; + return x; + }); + var lines = dir == 0 + ? this.doc.getLines(firstRow, lastRow) + : this.doc.removeFullLines(firstRow, lastRow); + this.doc.insertFullLines(firstRow + diff, lines); + folds.length && this.addFolds(folds); + return diff; + }; + EditSession.prototype.moveLinesUp = function (firstRow, lastRow) { + return this.$moveLines(firstRow, lastRow, -1); + }; + EditSession.prototype.moveLinesDown = function (firstRow, lastRow) { + return this.$moveLines(firstRow, lastRow, 1); + }; + EditSession.prototype.duplicateLines = function (firstRow, lastRow) { + return this.$moveLines(firstRow, lastRow, 0); + }; + EditSession.prototype.$clipRowToDocument = function (row) { + return Math.max(0, Math.min(row, this.doc.getLength() - 1)); + }; + EditSession.prototype.$clipColumnToRow = function (row, column) { + if (column < 0) + return 0; + return Math.min(this.doc.getLine(row).length, column); + }; + EditSession.prototype.$clipPositionToDocument = function (row, column) { + column = Math.max(0, column); + if (row < 0) { + row = 0; + column = 0; } else { - makeRequest(this.showDiffFunction, this.nowVisPanel); - } - function makeRequest(showDiffFunction, nowVisPanel) { - fetch(compareFunctionCallsUrl, { - method: 'GET', // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - }, - }).then((response) => { - response.json().then((json) => { - if (showDiffFunction) - showDiffFunction(json, windowLabel, nowVisPanel); - }); - }); - } - } - closeTooltip() { - this.tooltipDiv.transition() - .duration(500) - .style("opacity", 0); - this.tooltipDiv.classed("hidden", true); - } - showTooltip(event, d, trial_id) { - var self = this; - this.tooltipDiv.classed("hidden", false); - this.tooltipDiv.transition() - .duration(200) - .style("opacity", 0.9); - if (this.config.queryTooltip) { - var string = d.tooltip[trial_id]; - var regexp = (/T(.*) - (\d*)
    Line \d*?
    /g); - var match = regexp.exec(string); - this.tooltipDiv.html("") - .style("left", (event.pageX - 3) + "px") - .style("top", (event.pageY - 28) + "px"); - while (match != null) { - var div = document.createElement("div"); - //var div2 = document.createElement("div"); - this.tooltipDiv.append(() => div); - //this.tooltipDiv.append(() => div2); - var aid = match[2]; - if (aid in self.activationStorage) { - this.updateTooltipDiv(aid, div); - } - else { - self.config.customLoadTooltip(self, div, match[0], match[1], match[2]); - } - match = regexp.exec(string); + var len = this.doc.getLength(); + if (row >= len) { + row = len - 1; + column = this.doc.getLine(len - 1).length; + } + else { + column = Math.min(this.doc.getLine(row).length, column); } } + return { + row: row, + column: column + }; + }; + EditSession.prototype.$clipRangeToDocument = function (range) { + if (range.start.row < 0) { + range.start.row = 0; + range.start.column = 0; + } else { - this.tooltipDiv.html(d.tooltip[trial_id]) - .style("left", (event.pageX - 3) + "px") - .style("top", (event.pageY - 28) + "px"); + range.start.column = this.$clipColumnToRow(range.start.row, range.start.column); } - } - updateTooltipDiv(activationId, div) { - var data = this.activationStorage[activationId]; - var title = data.id + " - " + data.name; - if (data.hash != "") { - title = '' + title + ""; + var len = this.doc.getLength() - 1; + if (range.end.row > len) { + range.end.row = len; + range.end.column = this.doc.getLine(len).length; } - var result = [ - ' ' + title + '', - ' Line: ' + data.line + "", - ' Start: ' + data.start + "", - ' Finish: ' + data.finish + "", - ' Duration: ' + data.duration + "ns", - ' Return: ' + data.return_value + "", - ]; - // ToDo: parameters and globals - div.outerHTML = result.join("
    ") + "

    "; - } - createMarker(name, cls, fill) { - this.svg.append("svg:defs").selectAll("marker") - .data([name]) - .enter().append("svg:marker") - .attr("id", this.graphId + "-" + name) - .attr("viewBox", "0 -5 10 10") - .attr("refX", 10) - .attr("refY", 0) - .attr("markerWidth", 6) - .attr("markerHeight", 6) - .attr("orient", "auto") - .append("svg:path") - .classed(cls, true) - .attr("fill", fill) - .attr("d", "M0,-5L10,0L0,5"); - } - defaultNodeStroke(d) { - let color = this.colors[d.data.trial_ids[0]]; - if (d.data.trial_ids.length > 1 || color == 0) { - return "#000"; + else { + range.end.column = this.$clipColumnToRow(range.end.row, range.end.column); } - if (color == 1) { - return "red"; + return range; + }; + EditSession.prototype.setUseWrapMode = function (useWrapMode) { + if (useWrapMode != this.$useWrapMode) { + this.$useWrapMode = useWrapMode; + this.$modified = true; + this.$resetRowCache(0); + if (useWrapMode) { + var len = this.getLength(); + this.$wrapData = Array(len); + this.$updateWrapData(0, len - 1); + } + this._signal("changeWrapMode"); } - return "green"; - } - nodeClick(d) { - if (d.children) { - d._children = d.children; - delete d.children; + }; + EditSession.prototype.getUseWrapMode = function () { + return this.$useWrapMode; + }; + EditSession.prototype.setWrapLimitRange = function (min, max) { + if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { + this.$wrapLimitRange = { min: min, max: max }; + this.$modified = true; + this.$bidiHandler.markAsDirty(); + if (this.$useWrapMode) + this._signal("changeWrapMode"); } - else { - d.children = d._children; - delete d._children; + }; + EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) { + var limits = this.$wrapLimitRange; + if (limits.max < 0) + limits = { min: $printMargin, max: $printMargin }; + var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); + if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { + this.$wrapLimit = wrapLimit; + this.$modified = true; + if (this.$useWrapMode) { + this.$updateWrapData(0, this.getLength() - 1); + this.$resetRowCache(0); + this._signal("changeWrapLimit"); + } + return true; } - this.update(d); - } - updateNodes(source, node) { - let self = this; - var nodeEnter = node.enter().append('g') - .attr("id", (d) => { - return "node-" + this.graphId + "-" + d.data.index; - }) - .attr('class', 'node') - .attr("cursor", "pointer") - .attr('transform', (d) => { - return "translate(" + source.x + "," + source.y + ")"; - }) - .on('click', (event, d) => { - let activations = d.data.activations; - if (event.ctrlKey && Object.keys(activations).length > 1) { - self.getFunctionDiff(activations, d.data.trial_ids); + return false; + }; + EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) { + if (min) + wrapLimit = Math.max(min, wrapLimit); + if (max) + wrapLimit = Math.min(max, wrapLimit); + return wrapLimit; + }; + EditSession.prototype.getWrapLimit = function () { + return this.$wrapLimit; + }; + EditSession.prototype.setWrapLimit = function (limit) { + this.setWrapLimitRange(limit, limit); + }; + EditSession.prototype.getWrapLimitRange = function () { + return { + min: this.$wrapLimitRange.min, + max: this.$wrapLimitRange.max + }; + }; + EditSession.prototype.$updateInternalDataOnChange = function (delta) { + var useWrapMode = this.$useWrapMode; + var action = delta.action; + var start = delta.start; + var end = delta.end; + var firstRow = start.row; + var lastRow = end.row; + var len = lastRow - firstRow; + var removedFolds = null; + this.$updating = true; + if (len != 0) { + if (action === "remove") { + this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); + var foldLines = this.$foldData; + removedFolds = this.getFoldsInRange(delta); + this.removeFolds(removedFolds); + var foldLine = this.getFoldLine(end.row); + var idx = 0; + if (foldLine) { + foldLine.addRemoveChars(end.row, end.column, start.column - end.column); + foldLine.shiftRow(-len); + var foldLineBefore = this.getFoldLine(firstRow); + if (foldLineBefore && foldLineBefore !== foldLine) { + foldLineBefore.merge(foldLine); + foldLine = foldLineBefore; + } + idx = foldLines.indexOf(foldLine) + 1; + } + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= end.row) { + foldLine.shiftRow(-len); + } + } + lastRow = firstRow; } else { - this.nodeClick(d); - } - }) - .on('mouseover', function (event, d) { - if (self.config.useTooltip) { - self.closeTooltip(); - if ((0, d3_selection_1.pointers)(event)[0][0] < 10) { - self.showTooltip(event, d.data, self.t1); + var args = Array(len); + args.unshift(firstRow, 0); + var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache; + arr.splice.apply(arr, args); + var foldLines = this.$foldData; + var foldLine = this.getFoldLine(firstRow); + var idx = 0; + if (foldLine) { + var cmp = foldLine.range.compareInside(start.row, start.column); + if (cmp == 0) { + foldLine = foldLine.split(start.row, start.column); + if (foldLine) { + foldLine.shiftRow(len); + foldLine.addRemoveChars(lastRow, 0, end.column - start.column); + } + } + else + if (cmp == -1) { + foldLine.addRemoveChars(firstRow, 0, end.column - start.column); + foldLine.shiftRow(len); + } + idx = foldLines.indexOf(foldLine) + 1; } - else { - self.showTooltip(event, d.data, self.t2); + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= firstRow) { + foldLine.shiftRow(len); + } } } - self.config.customMouseOver(self, d); - return false; - }).on('mouseout', function (event, d) { - self.config.customMouseOut(self, d); - }); - /* nodeEnter.attr("activations_ids", (d:VisibleTrialNode)=>{ - let activations = d.data.activations; - let attrValue = ""; - for(let trial in activations){ - if(attrValue.length > 0) attrValue+= "/"; - attrValue += trial + "/"; - attrValue += activations[trial]; - } - return attrValue; - }); */ - // Circle for new nodes - nodeEnter.append('rect') - .attr('class', 'node') - .attr('rx', 1e-6) - .attr('ry', 1e-6) - .attr('width', 1e-6) - .attr('height', 1e-6) - .attr("stroke", (d) => this.defaultNodeStroke(d)) - .attr("stroke-width", "3px") - .attr("fill", (d) => { - if (d.data.trial_ids.length == 1) { - return this.calculateColor(d.data, this.t1); - } - var grad = this.svg.append("svg:defs") - .append("linearGradient") - .attr("id", "grad-" + this.graphId + "-" + d.data.index) - .attr("x1", "100%") - .attr("x2", "0%") - .attr("y1", "0%") - .attr("y2", "0%"); - grad.append("stop") - .attr("offset", "50%") - .attr("stop-color", this.calculateColor(d.data, this.t2)); - grad.append("stop") - .attr("offset", "50%") - .attr("stop-color", this.calculateColor(d.data, this.t1)); - return "url(#grad-" + this.graphId + "-" + d.data.index + ")"; - }); - // Text for new nodes - nodeEnter.append('text') - .attr("dy", ".35em") - .attr("font-family", "sans-serif") - .attr("font-size", this.config.fontSize + "px") - .attr("pointer-events", "none") - .attr("fill", "#000") - .attr("y", 24) - .attr("x", 10) - .attr("text-anchor", "middle") - .each(function (d) { - const textLabel = (0, d3_selection_1.select)(this); - const name = d.data.name.split('
    '); - if (name.length > 1) { - textLabel.append("tspan") - .attr("x", "10") - .attr("dy", ".35em") - .attr("font-weight", "bold") - .text(name[0]); - textLabel.append("tspan") - .attr("x", "10") - .attr("dy", "1em") - .text(name[1]); - textLabel.attr("class", "nowrap"); - } - else { - return textLabel.text(d.data.name); + } + else { + len = Math.abs(delta.start.column - delta.end.column); + if (action === "remove") { + removedFolds = this.getFoldsInRange(delta); + this.removeFolds(removedFolds); + len = -len; } - }); - nodeEnter.append("path") - .attr("stroke", "#000") - .attr("d", function (d) { - if (d.data.trial_ids.length > 1) { - return "M10," + 0 + - "L10," + 20; + var foldLine = this.getFoldLine(firstRow); + if (foldLine) { + foldLine.addRemoveChars(firstRow, start.column, len); } - return "M0,0L0,0"; - }); - // Update - var nodeUpdate = nodeEnter.merge(node); - // Transition to proper position - nodeUpdate.transition() - .duration(this.config.duration) - .attr("transform", (d) => { - let color = this.colors[d.data.trial_ids[0]]; - d.dy = 0; - if (color == 1) { - d.dy = -40; + } + if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { + console.error("doc.getLength() and $wrapData.length have to be the same!"); + } + this.$updating = false; + if (useWrapMode) + this.$updateWrapData(firstRow, lastRow); + else + this.$updateRowLengthCache(firstRow, lastRow); + return removedFolds; + }; + EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) { + this.$rowLengthCache[firstRow] = null; + this.$rowLengthCache[lastRow] = null; + }; + EditSession.prototype.$updateWrapData = function (firstRow, lastRow) { + var lines = this.doc.getAllLines(); + var tabSize = this.getTabSize(); + var wrapData = this.$wrapData; + var wrapLimit = this.$wrapLimit; + var tokens; + var foldLine; + var row = firstRow; + lastRow = Math.min(lastRow, lines.length - 1); + while (row <= lastRow) { + foldLine = this.getFoldLine(row, foldLine); + if (!foldLine) { + tokens = this.$getDisplayTokens(lines[row]); + wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); + row++; } - else if (color == 2) { - d.dy = 40; + else { + tokens = []; + foldLine.walk(function (placeholder, row, column, lastColumn) { + var walkTokens; + if (placeholder != null) { + walkTokens = this.$getDisplayTokens(placeholder, tokens.length); + walkTokens[0] = PLACEHOLDER_START; + for (var i = 1; i < walkTokens.length; i++) { + walkTokens[i] = PLACEHOLDER_BODY; + } + } + else { + walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length); + } + tokens = tokens.concat(walkTokens); + }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1); + wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); + row = foldLine.end.row + 1; } - return "translate(" + (d.x - 10) + "," + (d.y + d.dy - 10) + ")"; - }); - // Update the node attributes and style - nodeUpdate.select('rect.node') - .attr('width', 20) - .attr('height', 20) - .attr('rx', 20) - .attr('ry', 20) - .attr("rx", (d) => { - return d._children ? 0 : 20; - }) - .attr("ry", (d) => { - return d._children ? 0 : 20; - }) - .attr('cursor', 'pointer'); - // Remove exiting nodes - var nodeExit = node.exit().transition() - .duration(this.config.duration) - .attr("transform", function (d) { - return "translate(" + source.x + "," + source.y + ")"; - }) - .remove(); - // Reduce node rects size to 0 on exit - nodeExit.select('rect') - .attr('rx', 1e-6) - .attr('ry', 1e-6) - .attr('width', 1e-6) - .attr('height', 1e-6); - // Reduce opacity of labels on exit - nodeExit.select('text') - .style('fill-opacity', 1e-6); - } - updateLinks(source, edges) { - var link = this.g.selectAll('path.link') - .data(edges, (d) => d.id); - // Enter any new links at the parent's previous position. - var linkEnter = link.enter().insert('path', "g") - .attr("class", "link") - .attr("id", (d, i) => { - return "pathId-" + this.graphId + "-" + d.id; - }) - .attr("fill", "none") - .attr("stroke-width", "1.5px") - .attr('d', (d) => { - var o = { y: source.y0, x: source.x0 }; - if (d.source.dy == undefined) { - d.source.dy = 0; + } + }; + EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) { + if (tokens.length == 0) { + return []; + } + var splits = []; + var displayLength = tokens.length; + var lastSplit = 0, lastDocSplit = 0; + var isCode = this.$wrapAsCode; + var indentedSoftWrap = this.$indentedSoftWrap; + var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) + || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2); + function getWrapIndent() { + var indentation = 0; + if (maxIndent === 0) + return indentation; + if (indentedSoftWrap) { + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (token == SPACE) + indentation += 1; + else if (token == TAB) + indentation += tabSize; + else if (token == TAB_SPACE) + continue; + else + break; + } } - if (d.target.dy == undefined) { - d.target.dy = 0; + if (isCode && indentedSoftWrap !== false) + indentation += tabSize; + return Math.min(indentation, maxIndent); + } + function addSplit(screenPos) { + var len = screenPos - lastSplit; + for (var i = lastSplit; i < screenPos; i++) { + var ch = tokens[i]; + if (ch === 12 || ch === 2) + len -= 1; } - let ox = source.x0 || 0, oy = source.y0 || 0, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1; - if (d.type === 'initial' || d.type === 'call' || d.type == 'return') { - // Initial - return (0, utils_1.diagonal)(o, o); + if (!splits.length) { + indent = getWrapIndent(); + splits.indent = indent; } - else if (dx === 0 && dy === 0) { - // Loop - return `M ${ox}, ${oy} - A 15,20 - -45,1,1 - ${ox + 5},${oy + 8}`; + lastDocSplit += len; + splits.push(lastDocSplit); + lastSplit = screenPos; + } + var indent = 0; + while (displayLength - lastSplit > wrapLimit - indent) { + var split = lastSplit + wrapLimit - indent; + if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { + addSplit(split); + continue; } - //return diagonal(d.source, d.target); - return (0, utils_1.diagonal)(o, o); - }) - .attr("marker-end", (d) => { - let count = 0; - for (let trial_id in d.count) { - if (trial_id == this.t1.toString()) { - count += 1; + if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { + for (split; split != lastSplit - 1; split--) { + if (tokens[split] == PLACEHOLDER_START) { + break; + } } - if (trial_id == this.t2.toString()) { - count += 2; + if (split > lastSplit) { + addSplit(split); + continue; } + split = lastSplit + wrapLimit; + for (split; split < tokens.length; split++) { + if (tokens[split] != PLACEHOLDER_BODY) { + break; + } + } + if (split == tokens.length) { + break; // Breaks the while-loop. + } + addSplit(split); + continue; } - if (count == 0 || count == 3) { // Single trial or diff - return "url(#" + this.graphId + "-end)"; - } - if (count == 1) { // First trial - return "url(#" + this.graphId + "-endbefore)"; - } - if (count == 2) { // Second trial - return "url(#" + this.graphId + "-endafter)"; + var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1); + while (split > minSplit && tokens[split] < PLACEHOLDER_START) { + split--; } - return ""; - }) - .attr('stroke', (d) => { - if (d.type === 'sequence') { - return '#07F'; + if (isCode) { + while (split > minSplit && tokens[split] < PLACEHOLDER_START) { + split--; + } + while (split > minSplit && tokens[split] == PUNCTUATION) { + split--; + } } - return '#666'; - }) - .attr('stroke-dasharray', (d) => { - if (d.type === 'return') { - return '10,2'; + else { + while (split > minSplit && tokens[split] < SPACE) { + split--; + } } - return 'none'; - }); - // UPDATE - var linkUpdate = linkEnter.merge(link); - // Transition back to the parent element position - linkUpdate.transition() - .duration(this.config.duration) - .attr('d', (d) => { - if (d.source.dy == undefined) { - d.source.dy = 0; + if (split > minSplit) { + addSplit(++split); + continue; } - if (d.target.dy == undefined) { - d.target.dy = 0; + split = lastSplit + wrapLimit; + if (tokens[split] == CHAR_EXT) + split--; + addSplit(split - indent); + } + return splits; + }; + EditSession.prototype.$getDisplayTokens = function (str, offset) { + var arr = []; + var tabSize; + offset = offset || 0; + for (var i = 0; i < str.length; i++) { + var c = str.charCodeAt(i); + if (c == 9) { + tabSize = this.getScreenTabSize(arr.length + offset); + arr.push(TAB); + for (var n = 1; n < tabSize; n++) { + arr.push(TAB_SPACE); + } } - let sd = d.source.data, td = d.target.data, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1, theta = Math.atan(dx / dy), phi = Math.atan(dy / dx), r = 10 + 2, sin_theta = r * Math.sin(theta), cos_theta = r * Math.cos(theta), sin_phi = r * Math.sin(phi), cos_phi = r * Math.cos(phi), m1 = (y2 > y1) ? 1 : -1, m2 = (x2 > x1) ? -1 : 1; - if (d.type === 'initial') { - // Initial - return `M ${(x2 - 20)},${(y2 - 20)} - L ${(x2 - r / 2.0)},${(y2 - r / 2.0)}`; + else if (c == 32) { + arr.push(SPACE); } - else if (d.type === 'call' || d.type == 'return') { - // Call/Return - x1 += m1 * sin_theta; - x2 += m2 * cos_phi; - y1 += m1 * cos_theta; - y2 += m2 * sin_phi; - if (dx === 0) { - if (y1 > y2) { - //y1 -= 10 - y2 += 20; - } - else { - //y1 += 10 - y2 -= 20; - } - } - return `M ${x1}, ${y1} - L ${x2}, ${y2}`; + else if ((c > 39 && c < 48) || (c > 57 && c < 64)) { + arr.push(PUNCTUATION); } - else if (dx === 0 && dy === 0) { - // Loop - return `M ${x1}, ${y1} - A 15,20 - -45,1,1 - ${x2 + 5},${y2 + 8}`; + else if (c >= 0x1100 && isFullWidth(c)) { + arr.push(CHAR, CHAR_EXT); } - else if (sd.parent_index == td.parent_index) { - // Same caller - if (dy === 0 && sd.children_index == td.children_index - 1) { - // Immediate sequence - return `M ${x1}, ${y1} - L ${(x2 + m2 * cos_phi)}, ${y2}`; - } - else { - let sign = -1; - if (y1 < y2) { - x1 += m1 * sin_theta; - y1 += m1 * cos_theta; - y2 -= r; - sign = -1; - } - else if (y2 < y1) { - x1 += m1 * sin_theta; - y1 += m1 * cos_theta; - y2 += r; - sign = 1; - } - else if (x1 >= x2) { - y1 += r; - y2 += r; - sign = 2; - } - else { - y1 -= r; - y2 -= r; - sign = -1; - } - return `M ${x1}, ${y1} - C ${(x1 + x2) / 2} ${y1 + r * sign}, - ${(x1 + x2) / 2} ${y2 + r * sign}, - ${x2} ${y2}`; - } + else { + arr.push(CHAR); } - // Other caller - x1 += m1 * sin_theta; - y1 += m1 * cos_theta; - x2 += m2 * cos_phi; - y2 += m2 * sin_phi; - return `M ${x1} ${y1} - C ${(x1 + x2) / 2} ${y1}, - ${(x1 + x2) / 2} ${y2}, - ${x2} ${y2}`; - }); - // Remove any exiting links - link.exit() //.transition() - .attr('d', function (d) { - return (0, utils_1.diagonal)(d.source, d.target); - }) - .remove(); // linkExit - } - updateLinkLabels(edges) { - var labelPath = this.g.selectAll(".label_text") - .data(edges, (d) => d.id); - var labelEnter = labelPath.enter().append("text") - .attr("class", "label_text") - .attr("font-family", "sans-serif") - .attr("font-size", this.config.labelFontSize + "px") - .attr("pointer-events", "none") - .attr("fill", "#000") - .attr("text-anchor", "middle") - .attr("dx", (d) => { - if (d.source.x == d.target.x) { - return 29; + } + return arr; + }; + EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) { + if (maxScreenColumn == 0) + return [0, 0]; + if (maxScreenColumn == null) + maxScreenColumn = Infinity; + screenColumn = screenColumn || 0; + var c, column; + for (column = 0; column < str.length; column++) { + c = str.charCodeAt(column); + if (c == 9) { + screenColumn += this.getScreenTabSize(screenColumn); } - return (Math.abs(d.source.x - d.target.x) - 10) / 2; - }) - .attr("dy", -3) - .attr("id", (d, i) => { - return "pathlabel-" + this.graphId + "-" + d.id; - }) - .append("textPath") - .attr("xlink:href", (d, i) => { - return "#pathId-" + this.graphId + "-" + d.id; - }) - .text((d) => { - if (d.type === 'initial') { - return ''; + else if (c >= 0x1100 && isFullWidth(c)) { + screenColumn += 2; } - if (this.t1 == this.t2 || !d.count[this.t2]) { - return d.count[this.t1].toString(); + else { + screenColumn += 1; } - else if (!d.count[this.t1]) { - return d.count[this.t2].toString(); + if (screenColumn > maxScreenColumn) { + break; } - return d.count[this.t1] + ', ' + d.count[this.t2]; - }); - labelEnter.merge(labelPath); - labelPath.exit().remove(); - } - zoomFunction(event) { - this.closeTooltip(); - this.transform = event.transform; - this.g.attr("transform", event.transform); - } - _graphId() { - return "trial-graph-" + this.graphId; - } -} -exports.TrialGraph = TrialGraph; - - -/***/ }), - -/***/ "../trial/lib/index.js": -/*!*****************************!*\ - !*** ../trial/lib/index.js ***! - \*****************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(/*! ./config */ "../trial/lib/config.js"), exports); -__exportStar(__webpack_require__(/*! ./structures */ "../trial/lib/structures.js"), exports); -__exportStar(__webpack_require__(/*! ./graph */ "../trial/lib/graph.js"), exports); - - -/***/ }), - -/***/ "../trial/lib/structures.js": -/*!**********************************!*\ - !*** ../trial/lib/structures.js ***! - \**********************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); - - -/***/ }), - -/***/ "../utils/lib/d3svg.js": -/*!*****************************!*\ - !*** ../utils/lib/d3svg.js ***! - \*****************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.diagonal = diagonal; -/** - * Create diagonal line between two nodes - */ -function diagonal(s, d) { - if (s.dy == undefined) { - s.dy = 0; - } - if (d.dy == undefined) { - d.dy = 0; - } - let path = `M ${s.x} ${(s.y + s.dy)} - C ${(s.x + d.x) / 2} ${(s.y + s.dy)}, - ${(s.x + d.x) / 2} ${(d.y + d.dy)}, - ${d.x} ${(d.y + d.dy)}`; - return path; -} - - -/***/ }), - -/***/ "../utils/lib/index.js": -/*!*****************************!*\ - !*** ../utils/lib/index.js ***! - \*****************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(/*! ./d3svg */ "../utils/lib/d3svg.js"), exports); -__exportStar(__webpack_require__(/*! ./random */ "../utils/lib/random.js"), exports); -__exportStar(__webpack_require__(/*! ./text */ "../utils/lib/text.js"), exports); -__exportStar(__webpack_require__(/*! ./web */ "../utils/lib/web.js"), exports); - - -/***/ }), - -/***/ "../utils/lib/random.js": -/*!******************************!*\ - !*** ../utils/lib/random.js ***! - \******************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.makeid = makeid; -function makeid() { - var text = ""; - var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - for (var i = 0; i < 5; i++) - text += possible.charAt(Math.floor(Math.random() * possible.length)); - return text; -} - - -/***/ }), - -/***/ "../utils/lib/text.js": -/*!****************************!*\ - !*** ../utils/lib/text.js ***! - \****************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.wrap = wrap; -const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); -function wrap(text, width) { - text.each(function () { - var text = (0, d3_selection_1.select)(this), words = text.text().split(/(?=_)/).reverse(), word, line = [], lineNumber = 0, lineHeight = 1.1, // ems - y = text.attr("y"), dy = parseFloat(text.attr("dy")), tspan = text.text(null).append("tspan").attr("x", 10).attr("y", y).attr("dy", dy + "em"); - while (word = words.pop()) { - line.push(word); - tspan.text(line.join("")); - if (tspan.node().getComputedTextLength() > width) { - line.pop(); - tspan.text(line.join("")); - line = [word]; - tspan = text.append("tspan").attr("x", 10).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word); + } + return [screenColumn, column]; + }; + EditSession.prototype.getRowLength = function (row) { + var h = 1; + if (this.lineWidgets) + h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; + if (!this.$useWrapMode || !this.$wrapData[row]) + return h; + else + return this.$wrapData[row].length + h; + }; + EditSession.prototype.getRowLineCount = function (row) { + if (!this.$useWrapMode || !this.$wrapData[row]) { + return 1; + } + else { + return this.$wrapData[row].length + 1; + } + }; + EditSession.prototype.getRowWrapIndent = function (screenRow) { + if (this.$useWrapMode) { + var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); + var splits = this.$wrapData[pos.row]; + return splits.length && splits[0] < pos.column ? splits.indent : 0; + } + else { + return 0; + } + }; + EditSession.prototype.getScreenLastRowColumn = function (screenRow) { + var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); + return this.documentToScreenColumn(pos.row, pos.column); + }; + EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.getScreenLastRowColumn(screenRow); + }; + EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); + }; + EditSession.prototype.getRowSplitData = function (row) { + if (!this.$useWrapMode) { + return undefined; + } + else { + return this.$wrapData[row]; + } + }; + EditSession.prototype.getScreenTabSize = function (screenColumn) { + return this.$tabSize - (screenColumn % this.$tabSize | 0); + }; + EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).row; + }; + EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).column; + }; + EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) { + if (screenRow < 0) + return { row: 0, column: 0 }; + var line; + var docRow = 0; + var docColumn = 0; + var column; + var row = 0; + var rowLength = 0; + var rowCache = this.$screenRowCache; + var i = this.$getRowCacheIndex(rowCache, screenRow); + var l = rowCache.length; + if (l && i >= 0) { + var row = rowCache[i]; + var docRow = this.$docRowCache[i]; + var doCache = screenRow > rowCache[l - 1]; + } + else { + var doCache = !l; + } + var maxRow = this.getLength() - 1; + var foldLine = this.getNextFoldLine(docRow); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (row <= screenRow) { + rowLength = this.getRowLength(docRow); + if (row + rowLength > screenRow || docRow >= maxRow) { + break; + } + else { + row += rowLength; + docRow++; + if (docRow > foldStart) { + docRow = foldLine.end.row + 1; + foldLine = this.getNextFoldLine(docRow, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + } + if (doCache) { + this.$docRowCache.push(docRow); + this.$screenRowCache.push(row); } } - }); -} - - -/***/ }), - -/***/ "../utils/lib/web.js": -/*!***************************!*\ - !*** ../utils/lib/web.js ***! - \***************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.json = json; -const d3_fetch_1 = __webpack_require__(/*! d3-fetch */ "../../node_modules/d3-fetch/src/index.js"); -function json(innertext, sub, url, fn) { - let i = document.createElement('i'); - i.classList.add("loading"); - i.classList.add("fa"); - i.classList.add("fa-spinner"); - i.classList.add("fa-pulse"); - sub.innerHTML = ""; - sub.appendChild(i); - sub.onclick = function () { - json(innertext, sub, url, fn); + if (foldLine && foldLine.start.row <= docRow) { + line = this.getFoldDisplayLine(foldLine); + docRow = foldLine.start.row; + } + else if (row + rowLength <= screenRow || docRow > maxRow) { + return { + row: maxRow, + column: this.getLine(maxRow).length + }; + } + else { + line = this.getLine(docRow); + foldLine = null; + } + var wrapIndent = 0, splitIndex = Math.floor(screenRow - row); + if (this.$useWrapMode) { + var splits = this.$wrapData[docRow]; + if (splits) { + column = splits[splitIndex]; + if (splitIndex > 0 && splits.length) { + wrapIndent = splits.indent; + docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; + line = line.substring(docColumn); + } + } + } + if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex)) + screenColumn = this.$bidiHandler.offsetToCol(offsetX); + docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1]; + if (this.$useWrapMode && docColumn >= column) + docColumn = column - 1; + if (foldLine) + return foldLine.idxToPosition(docColumn); + return { row: docRow, column: docColumn }; }; - (0, d3_fetch_1.json)(url).then(function (data) { - sub.onclick = function () { - }; - fn(data); - }).catch(function (error) { - i.classList.remove("fa-spinner"); - i.classList.remove("fa-pulse"); - i.classList.add("fa-refresh"); - i.classList.add("connection-error"); - let text = document.createElement('span'); - text.classList.add("error-text"); - text.innerHTML = innertext; - i.appendChild(text); - }); -} - - -/***/ }), - -/***/ "../../../../../../../../node_modules/ace-builds/src-noconflict/ace.js": -/*!*****************************************************************************!*\ - !*** ../../../../../../../../node_modules/ace-builds/src-noconflict/ace.js ***! - \*****************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -/* module decorator */ module = __webpack_require__.nmd(module); -/* ***** BEGIN LICENSE BLOCK ***** - * Distributed under the BSD license: - * - * Copyright (c) 2010, Ajax.org B.V. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Ajax.org B.V. nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ***** END LICENSE BLOCK ***** */ - -/** - * Define a module along with a payload - * @param module a name for the payload - * @param payload a function to call with (require, exports, module) params - */ - -(function() { - -var ACE_NAMESPACE = "ace"; - -var global = (function() { return this; })(); -if (!global && typeof window != "undefined") global = window; // strict mode - - -if (!ACE_NAMESPACE && typeof requirejs !== "undefined") - return; - - -var define = function(module, deps, payload) { - if (typeof module !== "string") { - if (define.original) - define.original.apply(this, arguments); + EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) { + if (typeof docColumn === "undefined") + var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column); + else + pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn); + docRow = pos.row; + docColumn = pos.column; + var screenRow = 0; + var foldStartRow = null; + var fold = null; + fold = this.getFoldAt(docRow, docColumn, 1); + if (fold) { + docRow = fold.start.row; + docColumn = fold.start.column; + } + var rowEnd, row = 0; + var rowCache = this.$docRowCache; + var i = this.$getRowCacheIndex(rowCache, docRow); + var l = rowCache.length; + if (l && i >= 0) { + var row = rowCache[i]; + var screenRow = this.$screenRowCache[i]; + var doCache = docRow > rowCache[l - 1]; + } else { - console.error("dropping module because define wasn\'t a string."); - console.trace(); + var doCache = !l; } - return; - } - if (arguments.length == 2) - payload = deps; - if (!define.modules[module]) { - define.payloads[module] = payload; - define.modules[module] = null; - } -}; - -define.modules = {}; -define.payloads = {}; - -/** - * Get at functionality define()ed using the function above - */ -var _require = function(parentId, module, callback) { - if (typeof module === "string") { - var payload = lookup(parentId, module); - if (payload != undefined) { - callback && callback(); - return payload; + var foldLine = this.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (row < docRow) { + if (row >= foldStart) { + rowEnd = foldLine.end.row + 1; + if (rowEnd > docRow) + break; + foldLine = this.getNextFoldLine(rowEnd, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + else { + rowEnd = row + 1; + } + screenRow += this.getRowLength(row); + row = rowEnd; + if (doCache) { + this.$docRowCache.push(row); + this.$screenRowCache.push(screenRow); + } } - } else if (Object.prototype.toString.call(module) === "[object Array]") { - var params = []; - for (var i = 0, l = module.length; i < l; ++i) { - var dep = lookup(parentId, module[i]); - if (dep == undefined && require.original) - return; - params.push(dep); + var textLine = ""; + if (foldLine && row >= foldStart) { + textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); + foldStartRow = foldLine.start.row; } - return callback && callback.apply(null, params) || true; - } -}; - -var require = function(module, callback) { - var packagedModule = _require("", module, callback); - if (packagedModule == undefined && require.original) - return require.original.apply(this, arguments); - return packagedModule; -}; - -var normalizeModule = function(parentId, moduleName) { - // normalize plugin requires - if (moduleName.indexOf("!") !== -1) { - var chunks = moduleName.split("!"); - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); - } - // normalize relative requires - if (moduleName.charAt(0) == ".") { - var base = parentId.split("/").slice(0, -1).join("/"); - moduleName = base + "/" + moduleName; - - while(moduleName.indexOf(".") !== -1 && previous != moduleName) { - var previous = moduleName; - moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); + else { + textLine = this.getLine(docRow).substring(0, docColumn); + foldStartRow = docRow; } - } - return moduleName; -}; - -/** - * Internal function to lookup moduleNames and resolve them by calling the - * definition function if needed. - */ -var lookup = function(parentId, moduleName) { - moduleName = normalizeModule(parentId, moduleName); - - var module = define.modules[moduleName]; - if (!module) { - module = define.payloads[moduleName]; - if (typeof module === 'function') { - var exports = {}; - var mod = { - id: moduleName, - uri: '', - exports: exports, - packaged: true - }; - - var req = function(module, callback) { - return _require(moduleName, module, callback); - }; - - var returnValue = module(req, exports, mod); - exports = returnValue || mod.exports; - define.modules[moduleName] = exports; - delete define.payloads[moduleName]; + var wrapIndent = 0; + if (this.$useWrapMode) { + var wrapRow = this.$wrapData[foldStartRow]; + if (wrapRow) { + var screenRowOffset = 0; + while (textLine.length >= wrapRow[screenRowOffset]) { + screenRow++; + screenRowOffset++; + } + textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length); + wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0; + } } - module = define.modules[moduleName] = exports || module; - } - return module; -}; - -function exportAce(ns) { - var root = global; - if (ns) { - if (!global[ns]) - global[ns] = {}; - root = global[ns]; - } - - if (!root.define || !root.define.packaged) { - define.original = root.define; - root.define = define; - root.define.packaged = true; - } - - if (!root.require || !root.require.packaged) { - require.original = root.require; - root.require = require; - root.require.packaged = true; - } -} - -exportAce(ACE_NAMESPACE); - -})(); - -ace.define("ace/lib/es6-shim",["require","exports","module"], function(require, exports, module){function defineProp(obj, name, val) { - Object.defineProperty(obj, name, { - value: val, - enumerable: false, - writable: true, - configurable: true - }); -} -if (!String.prototype.startsWith) { - defineProp(String.prototype, "startsWith", function (searchString, position) { - position = position || 0; - return this.lastIndexOf(searchString, position) === position; - }); -} -if (!String.prototype.endsWith) { - defineProp(String.prototype, "endsWith", function (searchString, position) { - var subjectString = this; - if (position === undefined || position > subjectString.length) { - position = subjectString.length; + if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove) + screenRow += this.lineWidgets[row].rowsAbove; + return { + row: screenRow, + column: wrapIndent + this.$getStringScreenWidth(textLine)[0] + }; + }; + EditSession.prototype.documentToScreenColumn = function (row, docColumn) { + return this.documentToScreenPosition(row, docColumn).column; + }; + EditSession.prototype.documentToScreenRow = function (docRow, docColumn) { + return this.documentToScreenPosition(docRow, docColumn).row; + }; + EditSession.prototype.getScreenLength = function () { + var screenRows = 0; + var fold = null; + if (!this.$useWrapMode) { + screenRows = this.getLength(); + var foldData = this.$foldData; + for (var i = 0; i < foldData.length; i++) { + fold = foldData[i]; + screenRows -= fold.end.row - fold.start.row; + } } - position -= searchString.length; - var lastIndex = subjectString.indexOf(searchString, position); - return lastIndex !== -1 && lastIndex === position; - }); -} -if (!String.prototype.repeat) { - defineProp(String.prototype, "repeat", function (count) { - var result = ""; - var string = this; - while (count > 0) { - if (count & 1) - result += string; - if ((count >>= 1)) - string += string; + else { + var lastRow = this.$wrapData.length; + var row = 0, i = 0; + var fold = this.$foldData[i++]; + var foldStart = fold ? fold.start.row : Infinity; + while (row < lastRow) { + var splits = this.$wrapData[row]; + screenRows += splits ? splits.length + 1 : 1; + row++; + if (row > foldStart) { + row = fold.end.row + 1; + fold = this.$foldData[i++]; + foldStart = fold ? fold.start.row : Infinity; + } + } } - return result; - }); -} -if (!String.prototype.includes) { - defineProp(String.prototype, "includes", function (str, position) { - return this.indexOf(str, position) != -1; - }); + if (this.lineWidgets) + screenRows += this.$getWidgetScreenLength(); + return screenRows; + }; + EditSession.prototype.$setFontMetrics = function (fm) { + if (!this.$enableVarChar) + return; + this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) { + if (maxScreenColumn === 0) + return [0, 0]; + if (!maxScreenColumn) + maxScreenColumn = Infinity; + screenColumn = screenColumn || 0; + var c, column; + for (column = 0; column < str.length; column++) { + c = str.charAt(column); + if (c === "\t") { + screenColumn += this.getScreenTabSize(screenColumn); + } + else { + screenColumn += fm.getCharacterWidth(c); + } + if (screenColumn > maxScreenColumn) { + break; + } + } + return [screenColumn, column]; + }; + }; + EditSession.prototype.getPrecedingCharacter = function () { + var pos = this.selection.getCursor(); + if (pos.column === 0) { + return pos.row === 0 ? "" : this.doc.getNewLineCharacter(); + } + var currentLine = this.getLine(pos.row); + return currentLine[pos.column - 1]; + }; + EditSession.prototype.destroy = function () { + if (!this.destroyed) { + this.bgTokenizer.setDocument(null); + this.bgTokenizer.cleanup(); + this.destroyed = true; + } + this.endOperation(); + this.$stopWorker(); + this.removeAllListeners(); + if (this.doc) { + this.doc.off("change", this.$onChange); + } + if (this.selection) { + this.selection.off("changeCursor", this.$onSelectionChange); + this.selection.off("changeSelection", this.$onSelectionChange); + } + this.selection.detach(); + }; + return EditSession; +}()); +EditSession.$uid = 0; +EditSession.prototype.$modes = config.$modes; +EditSession.prototype.getValue = EditSession.prototype.toString; +EditSession.prototype.$defaultUndoManager = { + undo: function () { }, + redo: function () { }, + hasUndo: function () { }, + hasRedo: function () { }, + reset: function () { }, + add: function () { }, + addSelection: function () { }, + startNewGroup: function () { }, + addSession: function () { } +}; +EditSession.prototype.$overwrite = false; +EditSession.prototype.$mode = null; +EditSession.prototype.$modeId = null; +EditSession.prototype.$scrollTop = 0; +EditSession.prototype.$scrollLeft = 0; +EditSession.prototype.$wrapLimit = 80; +EditSession.prototype.$useWrapMode = false; +EditSession.prototype.$wrapLimitRange = { + min: null, + max: null +}; +EditSession.prototype.lineWidgets = null; +EditSession.prototype.isFullWidth = isFullWidth; +oop.implement(EditSession.prototype, EventEmitter); +var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12; +function isFullWidth(c) { + if (c < 0x1100) + return false; + return c >= 0x1100 && c <= 0x115F || + c >= 0x11A3 && c <= 0x11A7 || + c >= 0x11FA && c <= 0x11FF || + c >= 0x2329 && c <= 0x232A || + c >= 0x2E80 && c <= 0x2E99 || + c >= 0x2E9B && c <= 0x2EF3 || + c >= 0x2F00 && c <= 0x2FD5 || + c >= 0x2FF0 && c <= 0x2FFB || + c >= 0x3000 && c <= 0x303E || + c >= 0x3041 && c <= 0x3096 || + c >= 0x3099 && c <= 0x30FF || + c >= 0x3105 && c <= 0x312D || + c >= 0x3131 && c <= 0x318E || + c >= 0x3190 && c <= 0x31BA || + c >= 0x31C0 && c <= 0x31E3 || + c >= 0x31F0 && c <= 0x321E || + c >= 0x3220 && c <= 0x3247 || + c >= 0x3250 && c <= 0x32FE || + c >= 0x3300 && c <= 0x4DBF || + c >= 0x4E00 && c <= 0xA48C || + c >= 0xA490 && c <= 0xA4C6 || + c >= 0xA960 && c <= 0xA97C || + c >= 0xAC00 && c <= 0xD7A3 || + c >= 0xD7B0 && c <= 0xD7C6 || + c >= 0xD7CB && c <= 0xD7FB || + c >= 0xF900 && c <= 0xFAFF || + c >= 0xFE10 && c <= 0xFE19 || + c >= 0xFE30 && c <= 0xFE52 || + c >= 0xFE54 && c <= 0xFE66 || + c >= 0xFE68 && c <= 0xFE6B || + c >= 0xFF01 && c <= 0xFF60 || + c >= 0xFFE0 && c <= 0xFFE6; } -if (!Object.assign) { - Object.assign = function (target) { - if (target === undefined || target === null) { - throw new TypeError("Cannot convert undefined or null to object"); - } - var output = Object(target); - for (var index = 1; index < arguments.length; index++) { - var source = arguments[index]; - if (source !== undefined && source !== null) { - Object.keys(source).forEach(function (key) { - output[key] = source[key]; - }); +require("./edit_session/folding").Folding.call(EditSession.prototype); +require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); +config.defineOptions(EditSession.prototype, "session", { + wrap: { + set: function (value) { + if (!value || value == "off") + value = false; + else if (value == "free") + value = true; + else if (value == "printMargin") + value = -1; + else if (typeof value == "string") + value = parseInt(value, 10) || false; + if (this.$wrap == value) + return; + this.$wrap = value; + if (!value) { + this.setUseWrapMode(false); } - } - return output; - }; -} -if (!Object.values) { - Object.values = function (o) { - return Object.keys(o).map(function (k) { - return o[k]; - }); - }; -} -if (!Array.prototype.find) { - defineProp(Array.prototype, "find", function (predicate) { - var len = this.length; - var thisArg = arguments[1]; - for (var k = 0; k < len; k++) { - var kValue = this[k]; - if (predicate.call(thisArg, kValue, k, this)) { - return kValue; + else { + var col = typeof value == "number" ? value : null; + this.setWrapLimitRange(col, col); + this.setUseWrapMode(true); } - } - }); -} -if (!Array.prototype.findIndex) { - defineProp(Array.prototype, "findIndex", function (predicate) { - var len = this.length; - var thisArg = arguments[1]; - for (var k = 0; k < len; k++) { - var kValue = this[k]; - if (predicate.call(thisArg, kValue, k, this)) { - return k; + }, + get: function () { + if (this.getUseWrapMode()) { + if (this.$wrap == -1) + return "printMargin"; + if (!this.getWrapLimitRange().min) + return "free"; + return this.$wrap; } - } - }); -} -if (!Array.prototype.includes) { - defineProp(Array.prototype, "includes", function (item, position) { - return this.indexOf(item, position) != -1; - }); -} -if (!Array.prototype.fill) { - defineProp(Array.prototype, "fill", function (value) { - var O = this; - var len = O.length >>> 0; - var start = arguments[1]; - var relativeStart = start >> 0; - var k = relativeStart < 0 - ? Math.max(len + relativeStart, 0) - : Math.min(relativeStart, len); - var end = arguments[2]; - var relativeEnd = end === undefined ? len : end >> 0; - var final = relativeEnd < 0 - ? Math.max(len + relativeEnd, 0) - : Math.min(relativeEnd, len); - while (k < final) { - O[k] = value; - k++; - } - return O; - }); -} -if (!Array.of) { - defineProp(Array, "of", function () { - return Array.prototype.slice.call(arguments); - }); -} - -}); - -ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/es6-shim"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st: -"use strict"; -require("./es6-shim"); - -}); - -ace.define("ace/lib/deep_copy",["require","exports","module"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) { - if (typeof obj !== "object" || !obj) - return obj; - var copy; - if (Array.isArray(obj)) { - copy = []; - for (var key = 0; key < obj.length; key++) { - copy[key] = deepCopy(obj[key]); - } - return copy; + return "off"; + }, + handlesSet: true + }, + wrapMethod: { + set: function (val) { + val = val == "auto" + ? this.$mode.type != "text" + : val != "text"; + if (val != this.$wrapAsCode) { + this.$wrapAsCode = val; + if (this.$useWrapMode) { + this.$useWrapMode = false; + this.setUseWrapMode(true); + } + } + }, + initialValue: "auto" + }, + indentedSoftWrap: { + set: function () { + if (this.$useWrapMode) { + this.$useWrapMode = false; + this.setUseWrapMode(true); + } + }, + initialValue: true + }, + firstLineNumber: { + set: function () { this._signal("changeBreakpoint"); }, + initialValue: 1 + }, + useWorker: { + set: function (useWorker) { + this.$useWorker = useWorker; + this.$stopWorker(); + if (useWorker) + this.$startWorker(); + }, + initialValue: true + }, + useSoftTabs: { initialValue: true }, + tabSize: { + set: function (tabSize) { + tabSize = parseInt(tabSize); + if (tabSize > 0 && this.$tabSize !== tabSize) { + this.$modified = true; + this.$rowLengthCache = []; + this.$tabSize = tabSize; + this._signal("changeTabSize"); + } + }, + initialValue: 4, + handlesSet: true + }, + navigateWithinSoftTabs: { initialValue: false }, + foldStyle: { + set: function (val) { this.setFoldStyle(val); }, + handlesSet: true + }, + overwrite: { + set: function (val) { this._signal("changeOverwrite"); }, + initialValue: false + }, + newLineMode: { + set: function (val) { this.doc.setNewLineMode(val); }, + get: function () { return this.doc.getNewLineMode(); }, + handlesSet: true + }, + mode: { + set: function (val) { this.setMode(val); }, + get: function () { return this.$modeId; }, + handlesSet: true } - if (Object.prototype.toString.call(obj) !== "[object Object]") - return obj; - copy = {}; - for (var key in obj) - copy[key] = deepCopy(obj[key]); - return copy; -}; +}); +exports.EditSession = EditSession; }); -ace.define("ace/lib/lang",["require","exports","module","ace/lib/deep_copy"], function(require, exports, module){"use strict"; -exports.last = function (a) { - return a[a.length - 1]; -}; -exports.stringReverse = function (string) { - return string.split("").reverse().join(""); -}; -exports.stringRepeat = function (string, count) { - var result = ''; - while (count > 0) { - if (count & 1) - result += string; - if (count >>= 1) - string += string; - } - return result; -}; -var trimBeginRegexp = /^\s\s*/; -var trimEndRegexp = /\s\s*$/; -exports.stringTrimLeft = function (string) { - return string.replace(trimBeginRegexp, ''); -}; -exports.stringTrimRight = function (string) { - return string.replace(trimEndRegexp, ''); -}; -exports.copyObject = function (obj) { - var copy = {}; - for (var key in obj) { - copy[key] = obj[key]; - } - return copy; -}; -exports.copyArray = function (array) { - var copy = []; - for (var i = 0, l = array.length; i < l; i++) { - if (array[i] && typeof array[i] == "object") - copy[i] = this.copyObject(array[i]); - else - copy[i] = array[i]; - } - return copy; -}; -exports.deepCopy = require("./deep_copy").deepCopy; -exports.arrayToMap = function (arr) { - var map = {}; - for (var i = 0; i < arr.length; i++) { - map[arr[i]] = 1; - } - return map; -}; -exports.createMap = function (props) { - var map = Object.create(null); - for (var i in props) { - map[i] = props[i]; - } - return map; -}; -exports.arrayRemove = function (array, value) { - for (var i = 0; i <= array.length; i++) { - if (value === array[i]) { - array.splice(i, 1); - } +ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module){"use strict"; +var lang = require("./lib/lang"); +var oop = require("./lib/oop"); +var Range = require("./range").Range; +var Search = /** @class */ (function () { + function Search() { + this.$options = {}; } -}; -exports.escapeRegExp = function (str) { - return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1'); -}; -exports.escapeHTML = function (str) { - return ("" + str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/ startIndex) { + continue; + } + ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex)); + if (len > 2) + row = row + len - 2; + } + } + else { + for (var matches, i = 0; i < lines.length; i++) { + if (this.$isMultilineSearch(options)) { + var lng = lines.length - 1; + matches = this.$multiLineForward(session, re, i, lng); + if (matches) { + var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng; + if (end_row > i) + i = end_row; + ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol)); + } + } + else { + matches = lang.getMatchOffsets(lines[i], re); + for (var j = 0; j < matches.length; j++) { + var match = matches[j]; + ranges.push(new Range(i, match.offset, i, match.offset + match.length)); + } + } + } + } + if (range) { + var startColumn = range.start.column; + var endColumn = range.end.column; + var i = 0, j = ranges.length - 1; + while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0) + i++; + var endRow = range.end.row - range.start.row; + while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow) + j--; + ranges = ranges.slice(i, j + 1); + for (i = 0, j = ranges.length; i < j; i++) { + ranges[i].start.row += range.start.row; + ranges[i].end.row += range.start.row; + } + } + return ranges; }; - var _self = function (timeout) { - if (timer == null) - timer = setTimeout(callback, timeout || defaultTimeout); + Search.prototype.parseReplaceString = function (replaceString) { + var CharCode = { + DollarSign: 36, + Ampersand: 38, + Digit0: 48, + Digit1: 49, + Digit9: 57, + Backslash: 92, + n: 110, + t: 116 + }; + var replacement = ''; + for (var i = 0, len = replaceString.length; i < len; i++) { + var chCode = replaceString.charCodeAt(i); + if (chCode === CharCode.Backslash) { + i++; + if (i >= len) { + replacement += "\\"; + break; + } + var nextChCode = replaceString.charCodeAt(i); + switch (nextChCode) { + case CharCode.Backslash: + replacement += "\\"; + break; + case CharCode.n: + replacement += "\n"; + break; + case CharCode.t: + replacement += "\t"; + break; + } + continue; + } + if (chCode === CharCode.DollarSign) { + i++; + if (i >= len) { + replacement += "$"; + break; + } + var nextChCode_1 = replaceString.charCodeAt(i); + if (nextChCode_1 === CharCode.DollarSign) { + replacement += "$$"; + continue; + } + if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) { + replacement += "$&"; + continue; + } + if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) { + replacement += "$" + replaceString[i]; + continue; + } + } + replacement += replaceString[i]; + } + return replacement || replaceString; }; - _self.delay = function (timeout) { - timer && clearTimeout(timer); - timer = setTimeout(callback, timeout || defaultTimeout); + Search.prototype.replace = function (input, replacement) { + var options = this.$options; + var re = this.$assembleRegExp(options); + if (options.$isMultiLine) + return replacement; + if (!re) + return; + var mtSearch = this.$isMultilineSearch(options); + if (mtSearch) + input = input.replace(/\r\n|\r|\n/g, "\n"); + var match = re.exec(input); + if (!match || (!mtSearch && match[0].length != input.length)) + return null; + replacement = options.regExp + ? this.parseReplaceString(replacement) + : replacement.replace(/\$/g, "$$$$"); + replacement = input.replace(re, replacement); + if (options.preserveCase) { + replacement = replacement.split(""); + for (var i = Math.min(input.length, input.length); i--;) { + var ch = input[i]; + if (ch && ch.toLowerCase() != ch) + replacement[i] = replacement[i].toUpperCase(); + else + replacement[i] = replacement[i].toLowerCase(); + } + replacement = replacement.join(""); + } + return replacement; }; - _self.schedule = _self; - _self.call = function () { - this.cancel(); - fcn(); + Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) { + if (options.needle instanceof RegExp) + return options.re = options.needle; + var needle = options.needle; + if (!options.needle) + return options.re = false; + if (!options.regExp) + needle = lang.escapeRegExp(needle); + var modifier = options.caseSensitive ? "gm" : "gmi"; + try { + new RegExp(needle, "u"); + options.$supportsUnicodeFlag = true; + modifier += "u"; + } + catch (e) { + options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\{2}/gu + } + if (options.wholeWord) + needle = addWordBoundary(needle, options); + options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); + if (options.$isMultiLine) + return options.re = this.$assembleMultilineRegExp(needle, modifier); + try { + var re = new RegExp(needle, modifier); + } + catch (e) { + re = false; + } + return options.re = re; }; - _self.cancel = function () { - timer && clearTimeout(timer); - timer = null; + Search.prototype.$assembleMultilineRegExp = function (needle, modifier) { + var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); + var re = []; + for (var i = 0; i < parts.length; i++) + try { + re.push(new RegExp(parts[i], modifier)); + } + catch (e) { + return false; + } + return re; }; - _self.isPending = function () { - return timer; + Search.prototype.$isMultilineSearch = function (options) { + return options.re && /\\r\\n|\\r|\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine; }; - return _self; -}; -exports.supportsLookbehind = function () { - try { - new RegExp('(?<=.)'); - } - catch (e) { - return false; - } - return true; -}; -exports.skipEmptyMatch = function (line, last, supportsUnicodeFlag) { - return supportsUnicodeFlag && line.codePointAt(last) > 0xffff ? 2 : 1; -}; - -}); - -ace.define("ace/lib/useragent",["require","exports","module"], function(require, exports, module){"use strict"; -exports.OS = { - LINUX: "LINUX", - MAC: "MAC", - WINDOWS: "WINDOWS" -}; -exports.getOS = function () { - if (exports.isMac) { - return exports.OS.MAC; - } - else if (exports.isLinux) { - return exports.OS.LINUX; - } - else { - return exports.OS.WINDOWS; - } -}; -var _navigator = typeof navigator == "object" ? navigator : {}; -var os = (/mac|win|linux/i.exec(_navigator.platform) || ["other"])[0].toLowerCase(); -var ua = _navigator.userAgent || ""; -var appName = _navigator.appName || ""; -exports.isWin = (os == "win"); -exports.isMac = (os == "mac"); -exports.isLinux = (os == "linux"); -exports.isIE = - (appName == "Microsoft Internet Explorer" || appName.indexOf("MSAppHost") >= 0) - ? parseFloat((ua.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/) || [])[1]) - : parseFloat((ua.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/) || [])[1]); // for ie -exports.isOldIE = exports.isIE && exports.isIE < 9; -exports.isGecko = exports.isMozilla = ua.match(/ Gecko\/\d+/); -exports.isOpera = typeof opera == "object" && Object.prototype.toString.call(window["opera"]) == "[object Opera]"; -exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; -exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; -exports.isSafari = parseFloat(ua.split(" Safari/")[1]) && !exports.isChrome || undefined; -exports.isEdge = parseFloat(ua.split(" Edge/")[1]) || undefined; -exports.isAIR = ua.indexOf("AdobeAIR") >= 0; -exports.isAndroid = ua.indexOf("Android") >= 0; -exports.isChromeOS = ua.indexOf(" CrOS ") >= 0; -exports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window["MSStream"]; -if (exports.isIOS) - exports.isMac = true; -exports.isMobile = exports.isIOS || exports.isAndroid; - -}); - -ace.define("ace/lib/dom",["require","exports","module","ace/lib/useragent"], function(require, exports, module){"use strict"; -var useragent = require("./useragent"); -var XHTML_NS = "http://www.w3.org/1999/xhtml"; -exports.buildDom = function buildDom(arr, parent, refs) { - if (typeof arr == "string" && arr) { - var txt = document.createTextNode(arr); - if (parent) - parent.appendChild(txt); - return txt; - } - if (!Array.isArray(arr)) { - if (arr && arr.appendChild && parent) - parent.appendChild(arr); - return arr; - } - if (typeof arr[0] != "string" || !arr[0]) { - var els = []; - for (var i = 0; i < arr.length; i++) { - var ch = buildDom(arr[i], parent, refs); - ch && els.push(ch); - } - return els; - } - var el = document.createElement(arr[0]); - var options = arr[1]; - var childIndex = 1; - if (options && typeof options == "object" && !Array.isArray(options)) - childIndex = 2; - for (var i = childIndex; i < arr.length; i++) - buildDom(arr[i], el, refs); - if (childIndex == 2) { - Object.keys(options).forEach(function (n) { - var val = options[n]; - if (n === "class") { - el.className = Array.isArray(val) ? val.join(" ") : val; - } - else if (typeof val == "function" || n == "value" || n[0] == "$") { - el[n] = val; + Search.prototype.$multiLineForward = function (session, re, start, last) { + var line, chunk = chunkEnd(session, start); + for (var row = start; row <= last;) { + for (var i = 0; i < chunk; i++) { + if (row > last) + break; + var next = session.getLine(row++); + line = line == null ? next : line + "\n" + next; } - else if (n === "ref") { - if (refs) - refs[val] = el; + var match = re.exec(line); + re.lastIndex = 0; + if (match) { + var beforeMatch = line.slice(0, match.index).split("\n"); + var matchedText = match[0].split("\n"); + var startRow = start + beforeMatch.length - 1; + var startCol = beforeMatch[beforeMatch.length - 1].length; + var endRow = startRow + matchedText.length - 1; + var endCol = matchedText.length == 1 + ? startCol + matchedText[0].length + : matchedText[matchedText.length - 1].length; + return { + startRow: startRow, + startCol: startCol, + endRow: endRow, + endCol: endCol + }; } - else if (n === "style") { - if (typeof val == "string") - el.style.cssText = val; + } + return null; + }; + Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) { + var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex; + for (var row = start; row >= first;) { + for (var i = 0; i < chunk && row >= first; i++) { + var next = session.getLine(row--); + line = line == null ? next : next + "\n" + line; } - else if (val != null) { - el.setAttribute(n, val); + var match = multiLineBackwardMatch(line, re, endMargin); + if (match) { + var beforeMatch = line.slice(0, match.index).split("\n"); + var matchedText = match[0].split("\n"); + var startRow = row + beforeMatch.length; + var startCol = beforeMatch[beforeMatch.length - 1].length; + var endRow = startRow + matchedText.length - 1; + var endCol = matchedText.length == 1 + ? startCol + matchedText[0].length + : matchedText[matchedText.length - 1].length; + return { + startRow: startRow, + startCol: startCol, + endRow: endRow, + endCol: endCol + }; } - }); - } - if (parent) - parent.appendChild(el); - return el; -}; -exports.getDocumentHead = function (doc) { - if (!doc) - doc = document; - return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; -}; -exports.createElement = function (tag, ns) { - return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag); -}; -exports.removeChildren = function (element) { - element.innerHTML = ""; -}; -exports.createTextNode = function (textContent, element) { - var doc = element ? element.ownerDocument : document; - return doc.createTextNode(textContent); -}; -exports.createFragment = function (element) { - var doc = element ? element.ownerDocument : document; - return doc.createDocumentFragment(); -}; -exports.hasCssClass = function (el, name) { - var classes = (el.className + "").split(/\s+/g); - return classes.indexOf(name) !== -1; -}; -exports.addCssClass = function (el, name) { - if (!exports.hasCssClass(el, name)) { - el.className += " " + name; - } -}; -exports.removeCssClass = function (el, name) { - var classes = el.className.split(/\s+/g); - while (true) { - var index = classes.indexOf(name); - if (index == -1) { - break; } - classes.splice(index, 1); - } - el.className = classes.join(" "); -}; -exports.toggleCssClass = function (el, name) { - var classes = el.className.split(/\s+/g), add = true; - while (true) { - var index = classes.indexOf(name); - if (index == -1) { - break; + return null; + }; + Search.prototype.$matchIterator = function (session, options) { + var re = this.$assembleRegExp(options); + if (!re) + return false; + var mtSearch = this.$isMultilineSearch(options); + var mtForward = this.$multiLineForward; + var mtBackward = this.$multiLineBackward; + var backwards = options.backwards == true; + var skipCurrent = options.skipCurrent != false; + var supportsUnicodeFlag = re.unicode; + var range = options.range; + var start = options.start; + if (!start) + start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); + if (start.start) + start = start[skipCurrent != backwards ? "end" : "start"]; + var firstRow = range ? range.start.row : 0; + var lastRow = range ? range.end.row : session.getLength() - 1; + if (backwards) { + var forEach = function (callback) { + var row = start.row; + if (forEachInLine(row, start.column, callback)) + return; + for (row--; row >= firstRow; row--) + if (forEachInLine(row, Number.MAX_VALUE, callback)) + return; + if (options.wrap == false) + return; + for (row = lastRow, firstRow = start.row; row >= firstRow; row--) + if (forEachInLine(row, Number.MAX_VALUE, callback)) + return; + }; } - add = false; - classes.splice(index, 1); - } - if (add) - classes.push(name); - el.className = classes.join(" "); - return add; -}; -exports.setCssClass = function (node, className, include) { - if (include) { - exports.addCssClass(node, className); - } - else { - exports.removeCssClass(node, className); - } -}; -exports.hasCssString = function (id, doc) { - var index = 0, sheets; - doc = doc || document; - if ((sheets = doc.querySelectorAll("style"))) { - while (index < sheets.length) { - if (sheets[index++].id === id) { - return true; - } + else { + var forEach = function (callback) { + var row = start.row; + if (forEachInLine(row, start.column, callback)) + return; + for (row = row + 1; row <= lastRow; row++) + if (forEachInLine(row, 0, callback)) + return; + if (options.wrap == false) + return; + for (row = firstRow, lastRow = start.row; row <= lastRow; row++) + if (forEachInLine(row, 0, callback)) + return; + }; } - } -}; -exports.removeElementById = function (id, doc) { - doc = doc || document; - if (doc.getElementById(id)) { - doc.getElementById(id).remove(); - } -}; -var strictCSP; -var cssCache = []; -exports.useStrictCSP = function (value) { - strictCSP = value; - if (value == false) - insertPendingStyles(); - else if (!cssCache) - cssCache = []; -}; -function insertPendingStyles() { - var cache = cssCache; - cssCache = null; - cache && cache.forEach(function (item) { - importCssString(item[0], item[1]); - }); -} -function importCssString(cssText, id, target) { - if (typeof document == "undefined") - return; - if (cssCache) { - if (target) { - insertPendingStyles(); + if (options.$isMultiLine) { + var len = re.length; + var forEachInLine = function (row, offset, callback) { + var startRow = backwards ? row - len + 1 : row; + if (startRow < 0 || startRow + len > session.getLength()) + return; + var line = session.getLine(startRow); + var startIndex = line.search(re[0]); + if (!backwards && startIndex < offset || startIndex === -1) + return; + for (var i = 1; i < len; i++) { + line = session.getLine(startRow + i); + if (line.search(re[i]) == -1) + return; + } + var endIndex = line.match(re[len - 1])[0].length; + if (backwards && endIndex > offset) + return; + if (callback(startRow, startIndex, startRow + len - 1, endIndex)) + return true; + }; } - else if (target === false) { - return cssCache.push([cssText, id]); + else if (backwards) { + var forEachInLine = function (row, endIndex, callback) { + if (mtSearch) { + var pos = mtBackward(session, re, endIndex, row, firstRow); + if (!pos) + return false; + if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol)) + return true; + } + else { + var line = session.getLine(row); + var matches = []; + var m, last = 0; + re.lastIndex = 0; + while ((m = re.exec(line))) { + var length = m[0].length; + last = m.index; + if (!length) { + if (last >= line.length) + break; + re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag); + } + if (m.index + length > endIndex) + break; + matches.push(m.index, length); + } + for (var i = matches.length - 1; i >= 0; i -= 2) { + var column = matches[i - 1]; + var length = matches[i]; + if (callback(row, column, row, column + length)) + return true; + } + } + }; } + else { + var forEachInLine = function (row, startIndex, callback) { + re.lastIndex = startIndex; + if (mtSearch) { + var pos = mtForward(session, re, row, lastRow); + if (pos) { + var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow; + if (end_row > row) + row = end_row; + } + if (!pos) + return false; + if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol)) + return true; + } + else { + var line = session.getLine(row); + var last; + var m; + while ((m = re.exec(line))) { + var length = m[0].length; + last = m.index; + if (callback(row, last, row, last + length)) + return true; + if (!length) { + re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag); + if (last >= line.length) + return false; + } + } + } + }; + } + return { forEach: forEach }; + }; + return Search; +}()); +function addWordBoundary(needle, options) { + var supportsLookbehind = lang.supportsLookbehind(); + function wordBoundary(c, firstChar) { + if (firstChar === void 0) { firstChar = true; } + var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp("[\\p{L}\\p{N}_]", "u") : new RegExp("\\w"); + if (wordRegExp.test(c) || options.regExp) { + if (supportsLookbehind && options.$supportsUnicodeFlag) { + if (firstChar) + return "(?<=^|[^\\p{L}\\p{N}_])"; + return "(?=[^\\p{L}\\p{N}_]|$)"; + } + return "\\b"; + } + return ""; } - if (strictCSP) - return; - var container = target; - if (!target || !target.getRootNode) { - container = document; - } - else { - container = target.getRootNode(); - if (!container || container == target) - container = document; - } - var doc = container.ownerDocument || container; - if (id && exports.hasCssString(id, container)) - return null; - if (id) - cssText += "\n/*# sourceURL=ace/css/" + id + " */"; - var style = exports.createElement("style"); - style.appendChild(doc.createTextNode(cssText)); - if (id) - style.id = id; - if (container == doc) - container = exports.getDocumentHead(doc); - container.insertBefore(style, container.firstChild); -} -exports.importCssString = importCssString; -exports.importCssStylsheet = function (uri, doc) { - exports.buildDom(["link", { rel: "stylesheet", href: uri }], exports.getDocumentHead(doc)); -}; -exports.scrollbarWidth = function (doc) { - var inner = exports.createElement("ace_inner"); - inner.style.width = "100%"; - inner.style.minWidth = "0px"; - inner.style.height = "200px"; - inner.style.display = "block"; - var outer = exports.createElement("ace_outer"); - var style = outer.style; - style.position = "absolute"; - style.left = "-10000px"; - style.overflow = "hidden"; - style.width = "200px"; - style.minWidth = "0px"; - style.height = "150px"; - style.display = "block"; - outer.appendChild(inner); - var body = (doc && doc.documentElement) || (document && document.documentElement); - if (!body) - return 0; - body.appendChild(outer); - var noScrollbar = inner.offsetWidth; - style.overflow = "scroll"; - var withScrollbar = inner.offsetWidth; - if (noScrollbar === withScrollbar) { - withScrollbar = outer.clientWidth; - } - body.removeChild(outer); - return noScrollbar - withScrollbar; -}; -exports.computedStyle = function (element, style) { - return window.getComputedStyle(element, "") || {}; -}; -exports.setStyle = function (styles, property, value) { - if (styles[property] !== value) { - styles[property] = value; - } -}; -exports.HAS_CSS_ANIMATION = false; -exports.HAS_CSS_TRANSFORMS = false; -exports.HI_DPI = useragent.isWin - ? typeof window !== "undefined" && window.devicePixelRatio >= 1.5 - : true; -if (useragent.isChromeOS) - exports.HI_DPI = false; -if (typeof document !== "undefined") { - var div = document.createElement("div"); - if (exports.HI_DPI && div.style.transform !== undefined) - exports.HAS_CSS_TRANSFORMS = true; - if (!useragent.isEdge && typeof div.style.animationName !== "undefined") - exports.HAS_CSS_ANIMATION = true; - div = null; + var needleArray = Array.from(needle); + var firstChar = needleArray[0]; + var lastChar = needleArray[needleArray.length - 1]; + return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false); } -if (exports.HAS_CSS_TRANSFORMS) { - exports.translate = function (element, tx, ty) { - element.style.transform = "translate(" + Math.round(tx) + "px, " + Math.round(ty) + "px)"; - }; +function multiLineBackwardMatch(line, re, endMargin) { + var match = null; + var from = 0; + while (from <= line.length) { + re.lastIndex = from; + var newMatch = re.exec(line); + if (!newMatch) + break; + var end = newMatch.index + newMatch[0].length; + if (end > line.length - endMargin) + break; + if (!match || end > match.index + match[0].length) + match = newMatch; + from = newMatch.index + 1; + } + return match; } -else { - exports.translate = function (element, tx, ty) { - element.style.top = Math.round(ty) + "px"; - element.style.left = Math.round(tx) + "px"; - }; +function chunkEnd(session, start) { + var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row; + return targetLine + 1; } +exports.Search = Search; }); -ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(require, exports, module){/* - * based on code from: - * - * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -"use strict"; -var dom = require("./dom"); -exports.get = function (url, callback) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - callback(xhr.responseText); +ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); var keyUtil = require("../lib/keys"); +var useragent = require("../lib/useragent"); +var KEY_MODS = keyUtil.KEY_MODS; +var MultiHashHandler = /** @class */ (function () { + function MultiHashHandler(config, platform) { + this.$init(config, platform, false); + } + MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) { + this.platform = platform || (useragent.isMac ? "mac" : "win"); + this.commands = {}; + this.commandKeyBinding = {}; + this.addCommands(config); + this.$singleCommand = $singleCommand; + }; + MultiHashHandler.prototype.addCommand = function (command) { + if (this.commands[command.name]) + this.removeCommand(command); + this.commands[command.name] = command; + if (command.bindKey) + this._buildKeyHash(command); + }; + MultiHashHandler.prototype.removeCommand = function (command, keepCommand) { + var name = command && (typeof command === 'string' ? command : command.name); + command = this.commands[name]; + if (!keepCommand) + delete this.commands[name]; + var ckb = this.commandKeyBinding; + for (var keyId in ckb) { + var cmdGroup = ckb[keyId]; + if (cmdGroup == command) { + delete ckb[keyId]; + } + else if (Array.isArray(cmdGroup)) { + var i = cmdGroup.indexOf(command); + if (i != -1) { + cmdGroup.splice(i, 1); + if (cmdGroup.length == 1) + ckb[keyId] = cmdGroup[0]; + } + } } }; - xhr.send(null); -}; -exports.loadScript = function (path, callback) { - var head = dom.getDocumentHead(); - var s = document.createElement('script'); - s.src = path; - head.appendChild(s); - s.onload = s.onreadystatechange = function (_, isAbort) { - if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") { - s = s.onload = s.onreadystatechange = null; - if (!isAbort) - callback(); + MultiHashHandler.prototype.bindKey = function (key, command, position) { + if (typeof key == "object" && key) { + if (position == undefined) + position = key.position; + key = key[this.platform]; } + if (!key) + return; + if (typeof command == "function") + return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split("|").forEach(function (keyPart) { + var chain = ""; + if (keyPart.indexOf(" ") != -1) { + var parts = keyPart.split(/\s+/); + keyPart = parts.pop(); + parts.forEach(function (keyPart) { + var binding = this.parseKeys(keyPart); + var id = KEY_MODS[binding.hashId] + binding.key; + chain += (chain ? " " : "") + id; + this._addCommandToBinding(chain, "chainKeys"); + }, this); + chain += " "; + } + var binding = this.parseKeys(keyPart); + var id = KEY_MODS[binding.hashId] + binding.key; + this._addCommandToBinding(chain + id, command, position); + }, this); }; -}; -exports.qualifyURL = function (url) { - var a = document.createElement('a'); - a.href = url; - return a.href; -}; - -}); - -ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module){"use strict"; -exports.inherits = function (ctor, superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true + MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) { + var ckb = this.commandKeyBinding, i; + if (!command) { + delete ckb[keyId]; } - }); -}; -exports.mixin = function (obj, mixin) { - for (var key in mixin) { - obj[key] = mixin[key]; - } - return obj; -}; -exports.implement = function (proto, mixin) { - exports.mixin(proto, mixin); -}; - -}); - -ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module){"use strict"; -var EventEmitter = {}; -var stopPropagation = function () { this.propagationStopped = true; }; -var preventDefault = function () { this.defaultPrevented = true; }; -EventEmitter._emit = - EventEmitter._dispatchEvent = function (eventName, e) { - this._eventRegistry || (this._eventRegistry = {}); - this._defaultHandlers || (this._defaultHandlers = {}); - var listeners = this._eventRegistry[eventName] || []; - var defaultHandler = this._defaultHandlers[eventName]; - if (!listeners.length && !defaultHandler) + else if (!ckb[keyId] || this.$singleCommand) { + ckb[keyId] = command; + } + else { + if (!Array.isArray(ckb[keyId])) { + ckb[keyId] = [ckb[keyId]]; + } + else if ((i = ckb[keyId].indexOf(command)) != -1) { + ckb[keyId].splice(i, 1); + } + if (typeof position != "number") { + position = getPosition(command); + } + var commands = ckb[keyId]; + for (i = 0; i < commands.length; i++) { + var other = commands[i]; + var otherPos = getPosition(other); + if (otherPos > position) + break; + } + commands.splice(i, 0, command); + } + }; + MultiHashHandler.prototype.addCommands = function (commands) { + commands && Object.keys(commands).forEach(function (name) { + var command = commands[name]; + if (!command) + return; + if (typeof command === "string") + return this.bindKey(command, name); + if (typeof command === "function") + command = { exec: command }; + if (typeof command !== "object") + return; + if (!command.name) + command.name = name; + this.addCommand(command); + }, this); + }; + MultiHashHandler.prototype.removeCommands = function (commands) { + Object.keys(commands).forEach(function (name) { + this.removeCommand(commands[name]); + }, this); + }; + MultiHashHandler.prototype.bindKeys = function (keyList) { + Object.keys(keyList).forEach(function (key) { + this.bindKey(key, keyList[key]); + }, this); + }; + MultiHashHandler.prototype._buildKeyHash = function (command) { + this.bindKey(command.bindKey, command); + }; + MultiHashHandler.prototype.parseKeys = function (keys) { + var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function (x) { return x; }); + var key = parts.pop(); + var keyCode = keyUtil[key]; + if (keyUtil.FUNCTION_KEYS[keyCode]) + key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); + else if (!parts.length) + return { key: key, hashId: -1 }; + else if (parts.length == 1 && parts[0] == "shift") + return { key: key.toUpperCase(), hashId: -1 }; + var hashId = 0; + for (var i = parts.length; i--;) { + var modifier = keyUtil.KEY_MODS[parts[i]]; + if (modifier == null) { + if (typeof console != "undefined") + console.error("invalid modifier " + parts[i] + " in " + keys); + return false; + } + hashId |= modifier; + } + return { key: key, hashId: hashId }; + }; + MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) { + var key = KEY_MODS[hashId] + keyString; + return this.commandKeyBinding[key]; + }; + MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) { + if (keyCode < 0) return; - if (typeof e != "object" || !e) - e = {}; - if (!e.type) - e.type = eventName; - if (!e.stopPropagation) - e.stopPropagation = stopPropagation; - if (!e.preventDefault) - e.preventDefault = preventDefault; - listeners = listeners.slice(); - for (var i = 0; i < listeners.length; i++) { - listeners[i](e, this); - if (e.propagationStopped) - break; + var key = KEY_MODS[hashId] + keyString; + var command = this.commandKeyBinding[key]; + if (data.$keyChain) { + data.$keyChain += " " + key; + command = this.commandKeyBinding[data.$keyChain] || command; } - if (defaultHandler && !e.defaultPrevented) - return defaultHandler(e, this); + if (command) { + if (command == "chainKeys" || command[command.length - 1] == "chainKeys") { + data.$keyChain = data.$keyChain || key; + return { command: "null" }; + } + } + if (data.$keyChain) { + if ((!hashId || hashId == 4) && keyString.length == 1) + data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input + else if (hashId == -1 || keyCode > 0) + data.$keyChain = ""; // reset keyChain + } + return { command: command }; }; -EventEmitter._signal = function (eventName, e) { - var listeners = (this._eventRegistry || {})[eventName]; - if (!listeners) - return; - listeners = listeners.slice(); - for (var i = 0; i < listeners.length; i++) - listeners[i](e, this); -}; -EventEmitter.once = function (eventName, callback) { - var _self = this; - this.on(eventName, function newCallback() { - _self.off(eventName, newCallback); - callback.apply(null, arguments); - }); - if (!callback) { - return new Promise(function (resolve) { - callback = resolve; - }); - } -}; -EventEmitter.setDefaultHandler = function (eventName, callback) { - var handlers = this._defaultHandlers; - if (!handlers) - handlers = this._defaultHandlers = { _disabled_: {} }; - if (handlers[eventName]) { - var old = handlers[eventName]; - var disabled = handlers._disabled_[eventName]; - if (!disabled) - handlers._disabled_[eventName] = disabled = []; - disabled.push(old); - var i = disabled.indexOf(callback); - if (i != -1) - disabled.splice(i, 1); - } - handlers[eventName] = callback; -}; -EventEmitter.removeDefaultHandler = function (eventName, callback) { - var handlers = this._defaultHandlers; - if (!handlers) - return; - var disabled = handlers._disabled_[eventName]; - if (handlers[eventName] == callback) { - if (disabled) - this.setDefaultHandler(eventName, disabled.pop()); - } - else if (disabled) { - var i = disabled.indexOf(callback); - if (i != -1) - disabled.splice(i, 1); - } -}; -EventEmitter.on = - EventEmitter.addEventListener = function (eventName, callback, capturing) { - this._eventRegistry = this._eventRegistry || {}; - var listeners = this._eventRegistry[eventName]; - if (!listeners) - listeners = this._eventRegistry[eventName] = []; - if (listeners.indexOf(callback) == -1) - listeners[capturing ? "unshift" : "push"](callback); - return callback; + MultiHashHandler.prototype.getStatusText = function (editor, data) { + return data.$keyChain || ""; }; -EventEmitter.off = - EventEmitter.removeListener = - EventEmitter.removeEventListener = function (eventName, callback) { - this._eventRegistry = this._eventRegistry || {}; - var listeners = this._eventRegistry[eventName]; - if (!listeners) - return; - var index = listeners.indexOf(callback); - if (index !== -1) - listeners.splice(index, 1); - }; -EventEmitter.removeAllListeners = function (eventName) { - if (!eventName) - this._eventRegistry = this._defaultHandlers = undefined; - if (this._eventRegistry) - this._eventRegistry[eventName] = undefined; - if (this._defaultHandlers) - this._defaultHandlers[eventName] = undefined; -}; -exports.EventEmitter = EventEmitter; - -}); - -ace.define("ace/lib/report_error",["require","exports","module"], function(require, exports, module){exports.reportError = function reportError(msg, data) { - var e = new Error(msg); - e["data"] = data; - if (typeof console == "object" && console.error) - console.error(e); - setTimeout(function () { throw e; }); + return MultiHashHandler; +}()); +function getPosition(command) { + return typeof command == "object" && command.bindKey + && command.bindKey.position + || (command.isDefault ? -100 : 0); +} +var HashHandler = /** @class */ (function (_super) { + __extends(HashHandler, _super); + function HashHandler(config, platform) { + var _this = _super.call(this, config, platform) || this; + _this.$singleCommand = true; + return _this; + } + return HashHandler; +}(MultiHashHandler)); +HashHandler.call = function (thisArg, config, platform) { + MultiHashHandler.prototype.$init.call(thisArg, config, platform, true); }; - -}); - -ace.define("ace/lib/default_english_messages",["require","exports","module"], function(require, exports, module){var defaultEnglishMessages = { - "autocomplete.popup.aria-roledescription": "Autocomplete suggestions", - "autocomplete.popup.aria-label": "Autocomplete suggestions", - "autocomplete.popup.item.aria-roledescription": "item", - "autocomplete.loading": "Loading...", - "editor.scroller.aria-roledescription": "editor", - "editor.scroller.aria-label": "Editor content, press Enter to start editing, press Escape to exit", - "editor.gutter.aria-roledescription": "editor gutter", - "editor.gutter.aria-label": "Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit", - "error-marker.good-state": "Looks good!", - "prompt.recently-used": "Recently used", - "prompt.other-commands": "Other commands", - "prompt.no-matching-commands": "No matching commands", - "search-box.find.placeholder": "Search for", - "search-box.find-all.text": "All", - "search-box.replace.placeholder": "Replace with", - "search-box.replace-next.text": "Replace", - "search-box.replace-all.text": "All", - "search-box.toggle-replace.title": "Toggle Replace mode", - "search-box.toggle-regexp.title": "RegExp Search", - "search-box.toggle-case.title": "CaseSensitive Search", - "search-box.toggle-whole-word.title": "Whole Word Search", - "search-box.toggle-in-selection.title": "Search In Selection", - "search-box.search-counter": "$0 of $1", - "text-input.aria-roledescription": "editor", - "text-input.aria-label": "Cursor at row $0", - "gutter.code-folding.range.aria-label": "Toggle code folding, rows $0 through $1", - "gutter.code-folding.closed.aria-label": "Toggle code folding, rows $0 through $1", - "gutter.code-folding.open.aria-label": "Toggle code folding, row $0", - "gutter.code-folding.closed.title": "Unfold code", - "gutter.code-folding.open.title": "Fold code", - "gutter.annotation.aria-label.error": "Error, read annotations row $0", - "gutter.annotation.aria-label.warning": "Warning, read annotations row $0", - "gutter.annotation.aria-label.info": "Info, read annotations row $0", - "inline-fold.closed.title": "Unfold code", - "gutter-tooltip.aria-label.error.singular": "error", - "gutter-tooltip.aria-label.error.plural": "errors", - "gutter-tooltip.aria-label.warning.singular": "warning", - "gutter-tooltip.aria-label.warning.plural": "warnings", - "gutter-tooltip.aria-label.info.singular": "information message", - "gutter-tooltip.aria-label.info.plural": "information messages", - "gutter.annotation.aria-label.security": "Security finding, read annotations row $0", - "gutter.annotation.aria-label.hint": "Suggestion, read annotations row $0", - "gutter-tooltip.aria-label.security.singular": "security finding", - "gutter-tooltip.aria-label.security.plural": "security findings", - "gutter-tooltip.aria-label.hint.singular": "suggestion", - "gutter-tooltip.aria-label.hint.plural": "suggestions", - "editor.tooltip.disable-editing": "Editing is disabled" +MultiHashHandler.call = function (thisArg, config, platform) { + MultiHashHandler.prototype.$init.call(thisArg, config, platform, false); }; -exports.defaultEnglishMessages = defaultEnglishMessages; +exports.HashHandler = HashHandler; +exports.MultiHashHandler = MultiHashHandler; }); -ace.define("ace/lib/app_config",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/report_error","ace/lib/default_english_messages"], function(require, exports, module){"no use strict"; -var oop = require("./oop"); -var EventEmitter = require("./event_emitter").EventEmitter; -var reportError = require("./report_error").reportError; -var defaultEnglishMessages = require("./default_english_messages").defaultEnglishMessages; -var optionsProvider = { - setOptions: function (optList) { - Object.keys(optList).forEach(function (key) { - this.setOption(key, optList[key]); - }, this); - }, - getOptions: function (optionNames) { - var result = {}; - if (!optionNames) { - var options = this.$options; - optionNames = Object.keys(options).filter(function (key) { - return !options[key].hidden; - }); +ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var oop = require("../lib/oop"); +var MultiHashHandler = require("../keyboard/hash_handler").MultiHashHandler; +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var CommandManager = /** @class */ (function (_super) { + __extends(CommandManager, _super); + function CommandManager(platform, commands) { + var _this = _super.call(this, commands, platform) || this; + _this.byName = _this.commands; + _this.setDefaultHandler("exec", function (e) { + if (!e.args) { + return e.command.exec(e.editor, {}, e.event, true); + } + return e.command.exec(e.editor, e.args, e.event, false); + }); + return _this; + } + CommandManager.prototype.exec = function (command, editor, args) { + if (Array.isArray(command)) { + for (var i = command.length; i--;) { + if (this.exec(command[i], editor, args)) + return true; + } + return false; } - else if (!Array.isArray(optionNames)) { - optionNames = Object.keys(optionNames); + if (typeof command === "string") + command = this.commands[command]; + var e = { editor: editor, command: command, args: args }; + if (!this.canExecute(command, editor)) { + this._signal("commandUnavailable", e); + return false; } - optionNames.forEach(function (key) { - result[key] = this.getOption(key); - }, this); - return result; - }, - setOption: function (name, value) { - if (this["$" + name] === value) + e.returnValue = this._emit("exec", e); + this._signal("afterExec", e); + return e.returnValue === false ? false : true; + }; + CommandManager.prototype.canExecute = function (command, editor) { + if (typeof command === "string") + command = this.commands[command]; + if (!command) + return false; + if (editor && editor.$readOnly && !command.readOnly) + return false; + if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor)) + return false; + return true; + }; + CommandManager.prototype.toggleRecording = function (editor) { + if (this.$inReplay) return; - var opt = this.$options[name]; - if (!opt) { - return warn('misspelled option "' + name + '"'); + editor && editor._emit("changeStatus"); + if (this.recording) { + this.macro.pop(); + this.off("exec", this.$addCommandToMacro); + if (!this.macro.length) + this.macro = this.oldMacro; + return this.recording = false; } - if (opt.forwardTo) - return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value); - if (!opt.handlesSet) - this["$" + name] = value; - if (opt && opt.set) - opt.set.call(this, value); + if (!this.$addCommandToMacro) { + this.$addCommandToMacro = function (e) { + this.macro.push([e.command, e.args]); + }.bind(this); + } + this.oldMacro = this.macro; + this.macro = []; + this.on("exec", this.$addCommandToMacro); + return this.recording = true; + }; + CommandManager.prototype.replay = function (editor) { + if (this.$inReplay || !this.macro) + return; + if (this.recording) + return this.toggleRecording(editor); + try { + this.$inReplay = true; + this.macro.forEach(function (x) { + if (typeof x == "string") + this.exec(x, editor); + else + this.exec(x[0], editor, x[1]); + }, this); + } + finally { + this.$inReplay = false; + } + }; + CommandManager.prototype.trimMacro = function (m) { + return m.map(function (x) { + if (typeof x[0] != "string") + x[0] = x[0].name; + if (!x[1]) + x = x[0]; + return x; + }); + }; + return CommandManager; +}(MultiHashHandler)); +oop.implement(CommandManager.prototype, EventEmitter); +exports.CommandManager = CommandManager; + +}); + +ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(require, exports, module){"use strict"; +var lang = require("../lib/lang"); +var config = require("../config"); +var Range = require("../range").Range; +function bindKey(win, mac) { + return { win: win, mac: mac }; +} +exports.commands = [{ + name: "showSettingsMenu", + description: "Show settings menu", + bindKey: bindKey("Ctrl-,", "Command-,"), + exec: function (editor) { + config.loadModule("ace/ext/settings_menu", function (module) { + module.init(editor); + editor.showSettingsMenu(); + }); + }, + readOnly: true + }, { + name: "goToNextError", + description: "Go to next error", + bindKey: bindKey("Alt-E", "F4"), + exec: function (editor) { + config.loadModule("ace/ext/error_marker", function (module) { + module.showErrorMarker(editor, 1); + }); + }, + scrollIntoView: "animate", + readOnly: true + }, { + name: "goToPreviousError", + description: "Go to previous error", + bindKey: bindKey("Alt-Shift-E", "Shift-F4"), + exec: function (editor) { + config.loadModule("ace/ext/error_marker", function (module) { + module.showErrorMarker(editor, -1); + }); + }, + scrollIntoView: "animate", + readOnly: true + }, { + name: "selectall", + description: "Select all", + bindKey: bindKey("Ctrl-A", "Command-A"), + exec: function (editor) { editor.selectAll(); }, + readOnly: true + }, { + name: "centerselection", + description: "Center selection", + bindKey: bindKey(null, "Ctrl-L"), + exec: function (editor) { editor.centerSelection(); }, + readOnly: true + }, { + name: "gotoline", + description: "Go to line...", + bindKey: bindKey("Ctrl-L", "Command-L"), + exec: function (editor, line) { + if (typeof line === "number" && !isNaN(line)) + editor.gotoLine(line); + editor.prompt({ $type: "gotoLine" }); + }, + readOnly: true + }, { + name: "fold", + bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), + exec: function (editor) { editor.session.toggleFold(false); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "unfold", + bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), + exec: function (editor) { editor.session.toggleFold(true); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "toggleFoldWidget", + description: "Toggle fold widget", + bindKey: bindKey("F2", "F2"), + exec: function (editor) { editor.session.toggleFoldWidget(); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "toggleParentFoldWidget", + description: "Toggle parent fold widget", + bindKey: bindKey("Alt-F2", "Alt-F2"), + exec: function (editor) { editor.session.toggleFoldWidget(true); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "foldall", + description: "Fold all", + bindKey: bindKey(null, "Ctrl-Command-Option-0"), + exec: function (editor) { editor.session.foldAll(); }, + scrollIntoView: "center", + readOnly: true + }, { + name: "foldAllComments", + description: "Fold all comments", + bindKey: bindKey(null, "Ctrl-Command-Option-0"), + exec: function (editor) { editor.session.foldAllComments(); }, + scrollIntoView: "center", + readOnly: true + }, { + name: "foldOther", + description: "Fold other", + bindKey: bindKey("Alt-0", "Command-Option-0"), + exec: function (editor) { + editor.session.foldAll(); + editor.session.unfold(editor.selection.getAllRanges()); + }, + scrollIntoView: "center", + readOnly: true + }, { + name: "unfoldall", + description: "Unfold all", + bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), + exec: function (editor) { editor.session.unfold(); }, + scrollIntoView: "center", + readOnly: true + }, { + name: "findnext", + description: "Find next", + bindKey: bindKey("Ctrl-K", "Command-G"), + exec: function (editor) { editor.findNext(); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "findprevious", + description: "Find previous", + bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), + exec: function (editor) { editor.findPrevious(); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "selectOrFindNext", + description: "Select or find next", + bindKey: bindKey("Alt-K", "Ctrl-G"), + exec: function (editor) { + if (editor.selection.isEmpty()) + editor.selection.selectWord(); + else + editor.findNext(); + }, + readOnly: true + }, { + name: "selectOrFindPrevious", + description: "Select or find previous", + bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"), + exec: function (editor) { + if (editor.selection.isEmpty()) + editor.selection.selectWord(); + else + editor.findPrevious(); + }, + readOnly: true + }, { + name: "find", + description: "Find", + bindKey: bindKey("Ctrl-F", "Command-F"), + exec: function (editor) { + config.loadModule("ace/ext/searchbox", function (e) { e.Search(editor); }); + }, + readOnly: true + }, { + name: "overwrite", + description: "Overwrite", + bindKey: "Insert", + exec: function (editor) { editor.toggleOverwrite(); }, + readOnly: true + }, { + name: "selecttostart", + description: "Select to start", + bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Home|Command-Shift-Up"), + exec: function (editor) { editor.getSelection().selectFileStart(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" + }, { + name: "gotostart", + description: "Go to start", + bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), + exec: function (editor) { editor.navigateFileStart(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" + }, { + name: "selectup", + description: "Select up", + bindKey: bindKey("Shift-Up", "Shift-Up|Ctrl-Shift-P"), + exec: function (editor) { editor.getSelection().selectUp(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "golineup", + description: "Go line up", + bindKey: bindKey("Up", "Up|Ctrl-P"), + exec: function (editor, args) { editor.navigateUp(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selecttoend", + description: "Select to end", + bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-End|Command-Shift-Down"), + exec: function (editor) { editor.getSelection().selectFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" + }, { + name: "gotoend", + description: "Go to end", + bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), + exec: function (editor) { editor.navigateFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" + }, { + name: "selectdown", + description: "Select down", + bindKey: bindKey("Shift-Down", "Shift-Down|Ctrl-Shift-N"), + exec: function (editor) { editor.getSelection().selectDown(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "golinedown", + description: "Go line down", + bindKey: bindKey("Down", "Down|Ctrl-N"), + exec: function (editor, args) { editor.navigateDown(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectwordleft", + description: "Select word left", + bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), + exec: function (editor) { editor.getSelection().selectWordLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotowordleft", + description: "Go to word left", + bindKey: bindKey("Ctrl-Left", "Option-Left"), + exec: function (editor) { editor.navigateWordLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selecttolinestart", + description: "Select to line start", + bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left|Ctrl-Shift-A"), + exec: function (editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotolinestart", + description: "Go to line start", + bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), + exec: function (editor) { editor.navigateLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectleft", + description: "Select left", + bindKey: bindKey("Shift-Left", "Shift-Left|Ctrl-Shift-B"), + exec: function (editor) { editor.getSelection().selectLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotoleft", + description: "Go to left", + bindKey: bindKey("Left", "Left|Ctrl-B"), + exec: function (editor, args) { editor.navigateLeft(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectwordright", + description: "Select word right", + bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), + exec: function (editor) { editor.getSelection().selectWordRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotowordright", + description: "Go to word right", + bindKey: bindKey("Ctrl-Right", "Option-Right"), + exec: function (editor) { editor.navigateWordRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selecttolineend", + description: "Select to line end", + bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right|Shift-End|Ctrl-Shift-E"), + exec: function (editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotolineend", + description: "Go to line end", + bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), + exec: function (editor) { editor.navigateLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectright", + description: "Select right", + bindKey: bindKey("Shift-Right", "Shift-Right"), + exec: function (editor) { editor.getSelection().selectRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotoright", + description: "Go to right", + bindKey: bindKey("Right", "Right|Ctrl-F"), + exec: function (editor, args) { editor.navigateRight(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectpagedown", + description: "Select page down", + bindKey: "Shift-PageDown", + exec: function (editor) { editor.selectPageDown(); }, + readOnly: true + }, { + name: "pagedown", + description: "Page down", + bindKey: bindKey(null, "Option-PageDown"), + exec: function (editor) { editor.scrollPageDown(); }, + readOnly: true + }, { + name: "gotopagedown", + description: "Go to page down", + bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), + exec: function (editor) { editor.gotoPageDown(); }, + readOnly: true + }, { + name: "selectpageup", + description: "Select page up", + bindKey: "Shift-PageUp", + exec: function (editor) { editor.selectPageUp(); }, + readOnly: true + }, { + name: "pageup", + description: "Page up", + bindKey: bindKey(null, "Option-PageUp"), + exec: function (editor) { editor.scrollPageUp(); }, + readOnly: true + }, { + name: "gotopageup", + description: "Go to page up", + bindKey: "PageUp", + exec: function (editor) { editor.gotoPageUp(); }, + readOnly: true + }, { + name: "scrollup", + description: "Scroll up", + bindKey: bindKey("Ctrl-Up", null), + exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, + readOnly: true + }, { + name: "scrolldown", + description: "Scroll down", + bindKey: bindKey("Ctrl-Down", null), + exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, + readOnly: true + }, { + name: "selectlinestart", + description: "Select line start", + bindKey: "Shift-Home", + exec: function (editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectlineend", + description: "Select line end", + bindKey: "Shift-End", + exec: function (editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "togglerecording", + description: "Toggle recording", + bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), + exec: function (editor) { editor.commands.toggleRecording(editor); }, + readOnly: true + }, { + name: "replaymacro", + description: "Replay macro", + bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), + exec: function (editor) { editor.commands.replay(editor); }, + readOnly: true + }, { + name: "jumptomatching", + description: "Jump to matching", + bindKey: bindKey("Ctrl-\\|Ctrl-P", "Command-\\"), + exec: function (editor) { editor.jumpToMatching(); }, + multiSelectAction: "forEach", + scrollIntoView: "animate", + readOnly: true + }, { + name: "selecttomatching", + description: "Select to matching", + bindKey: bindKey("Ctrl-Shift-\\|Ctrl-Shift-P", "Command-Shift-\\"), + exec: function (editor) { editor.jumpToMatching(true); }, + multiSelectAction: "forEach", + scrollIntoView: "animate", + readOnly: true + }, { + name: "expandToMatching", + description: "Expand to matching", + bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"), + exec: function (editor) { editor.jumpToMatching(true, true); }, + multiSelectAction: "forEach", + scrollIntoView: "animate", + readOnly: true + }, { + name: "passKeysToBrowser", + description: "Pass keys to browser", + bindKey: bindKey(null, null), + exec: function () { }, + passEvent: true, + readOnly: true + }, { + name: "copy", + description: "Copy", + exec: function (editor) { + }, + readOnly: true }, - getOption: function (name) { - var opt = this.$options[name]; - if (!opt) { - return warn('misspelled option "' + name + '"'); - } - if (opt.forwardTo) - return this[opt.forwardTo] && this[opt.forwardTo].getOption(name); - return opt && opt.get ? opt.get.call(this) : this["$" + name]; - } -}; -function warn(message) { - if (typeof console != "undefined" && console.warn) - console.warn.apply(console, arguments); -} -var messages; -var nlsPlaceholders; -var AppConfig = /** @class */ (function () { - function AppConfig() { - this.$defaultOptions = {}; - messages = defaultEnglishMessages; - nlsPlaceholders = "dollarSigns"; - } - AppConfig.prototype.defineOptions = function (obj, path, options) { - if (!obj.$options) - this.$defaultOptions[path] = obj.$options = {}; - Object.keys(options).forEach(function (key) { - var opt = options[key]; - if (typeof opt == "string") - opt = { forwardTo: opt }; - opt.name || (opt.name = key); - obj.$options[opt.name] = opt; - if ("initialValue" in opt) - obj["$" + opt.name] = opt.initialValue; - }); - oop.implement(obj, optionsProvider); - return this; - }; - AppConfig.prototype.resetOptions = function (obj) { - Object.keys(obj.$options).forEach(function (key) { - var opt = obj.$options[key]; - if ("value" in opt) - obj.setOption(key, opt.value); - }); - }; - AppConfig.prototype.setDefaultValue = function (path, name, value) { - if (!path) { - for (path in this.$defaultOptions) - if (this.$defaultOptions[path][name]) - break; - if (!this.$defaultOptions[path][name]) - return false; - } - var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {}); - if (opts[name]) { - if (opts.forwardTo) - this.setDefaultValue(opts.forwardTo, name, value); - else - opts[name].value = value; - } - }; - AppConfig.prototype.setDefaultValues = function (path, optionHash) { - Object.keys(optionHash).forEach(function (key) { - this.setDefaultValue(path, key, optionHash[key]); - }, this); - }; - AppConfig.prototype.setMessages = function (value, options) { - messages = value; - if (options && options.placeholders) { - nlsPlaceholders = options.placeholders; - } - }; - AppConfig.prototype.nls = function (key, defaultString, params) { - if (!messages[key]) { - warn("No message found for the key '" + key + "' in messages with id " + messages.$id + ", trying to find a translation for the default string '" + defaultString + "'."); - if (!messages[defaultString]) { - warn("No message found for the default string '" + defaultString + "' in the provided messages. Falling back to the default English message."); - } + { + name: "cut", + description: "Cut", + exec: function (editor) { + var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty(); + var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange(); + editor._emit("cut", range); + if (!range.isEmpty()) + editor.session.remove(range); + editor.clearSelection(); + }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" + }, { + name: "paste", + description: "Paste", + exec: function (editor, args) { + editor.$handlePaste(args); + }, + scrollIntoView: "cursor" + }, { + name: "removeline", + description: "Remove line", + bindKey: bindKey("Ctrl-D", "Command-D"), + exec: function (editor) { editor.removeLines(); }, + scrollIntoView: "cursor", + multiSelectAction: "forEachLine" + }, { + name: "duplicateSelection", + description: "Duplicate selection", + bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), + exec: function (editor) { editor.duplicateSelection(); }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" + }, { + name: "sortlines", + description: "Sort lines", + bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), + exec: function (editor) { editor.sortLines(); }, + scrollIntoView: "selection", + multiSelectAction: "forEachLine" + }, { + name: "togglecomment", + description: "Toggle comment", + bindKey: bindKey("Ctrl-/", "Command-/"), + exec: function (editor) { editor.toggleCommentLines(); }, + multiSelectAction: "forEachLine", + scrollIntoView: "selectionPart" + }, { + name: "toggleBlockComment", + description: "Toggle block comment", + bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), + exec: function (editor) { editor.toggleBlockComment(); }, + multiSelectAction: "forEach", + scrollIntoView: "selectionPart" + }, { + name: "modifyNumberUp", + description: "Modify number up", + bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), + exec: function (editor) { editor.modifyNumber(1); }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" + }, { + name: "modifyNumberDown", + description: "Modify number down", + bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), + exec: function (editor) { editor.modifyNumber(-1); }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" + }, { + name: "replace", + description: "Replace", + bindKey: bindKey("Ctrl-H", "Command-Option-F"), + exec: function (editor) { + config.loadModule("ace/ext/searchbox", function (e) { e.Search(editor, true); }); } - var translated = messages[key] || messages[defaultString] || defaultString; - if (params) { - if (nlsPlaceholders === "dollarSigns") { - translated = translated.replace(/\$(\$|[\d]+)/g, function (_, dollarMatch) { - if (dollarMatch == "$") - return "$"; - return params[dollarMatch]; - }); + }, { + name: "undo", + description: "Undo", + bindKey: bindKey("Ctrl-Z", "Command-Z"), + exec: function (editor) { editor.undo(); } + }, { + name: "redo", + description: "Redo", + bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), + exec: function (editor) { editor.redo(); } + }, { + name: "copylinesup", + description: "Copy lines up", + bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), + exec: function (editor) { editor.copyLinesUp(); }, + scrollIntoView: "cursor" + }, { + name: "movelinesup", + description: "Move lines up", + bindKey: bindKey("Alt-Up", "Option-Up"), + exec: function (editor) { editor.moveLinesUp(); }, + scrollIntoView: "cursor" + }, { + name: "copylinesdown", + description: "Copy lines down", + bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), + exec: function (editor) { editor.copyLinesDown(); }, + scrollIntoView: "cursor" + }, { + name: "movelinesdown", + description: "Move lines down", + bindKey: bindKey("Alt-Down", "Option-Down"), + exec: function (editor) { editor.moveLinesDown(); }, + scrollIntoView: "cursor" + }, { + name: "del", + description: "Delete", + bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), + exec: function (editor) { editor.remove("right"); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "backspace", + description: "Backspace", + bindKey: bindKey("Shift-Backspace|Backspace", "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"), + exec: function (editor) { editor.remove("left"); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "cut_or_delete", + description: "Cut or delete", + bindKey: bindKey("Shift-Delete", null), + exec: function (editor) { + if (editor.selection.isEmpty()) { + editor.remove("left"); } - if (nlsPlaceholders === "curlyBrackets") { - translated = translated.replace(/\{([^\}]+)\}/g, function (_, curlyBracketMatch) { - return params[curlyBracketMatch]; - }); + else { + return false; } - } - return translated; - }; - return AppConfig; -}()); -AppConfig.prototype.warn = warn; -AppConfig.prototype.reportError = reportError; -oop.implement(AppConfig.prototype, EventEmitter); -exports.AppConfig = AppConfig; - -}); - -ace.define("ace/theme/textmate-css",["require","exports","module"], function(require, exports, module){module.exports = ".ace-tm .ace_gutter {\n background: #f0f0f0;\n color: #333;\n}\n\n.ace-tm .ace_print-margin {\n width: 1px;\n background: #e8e8e8;\n}\n\n.ace-tm .ace_fold {\n background-color: #6B72E6;\n}\n\n.ace-tm {\n background-color: #FFFFFF;\n color: black;\n}\n\n.ace-tm .ace_cursor {\n color: black;\n}\n \n.ace-tm .ace_invisible {\n color: rgb(191, 191, 191);\n}\n\n.ace-tm .ace_storage,\n.ace-tm .ace_keyword {\n color: blue;\n}\n\n.ace-tm .ace_constant {\n color: rgb(197, 6, 11);\n}\n\n.ace-tm .ace_constant.ace_buildin {\n color: rgb(88, 72, 246);\n}\n\n.ace-tm .ace_constant.ace_language {\n color: rgb(88, 92, 246);\n}\n\n.ace-tm .ace_constant.ace_library {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_invalid {\n background-color: rgba(255, 0, 0, 0.1);\n color: red;\n}\n\n.ace-tm .ace_support.ace_function {\n color: rgb(60, 76, 114);\n}\n\n.ace-tm .ace_support.ace_constant {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_support.ace_type,\n.ace-tm .ace_support.ace_class {\n color: rgb(109, 121, 222);\n}\n\n.ace-tm .ace_keyword.ace_operator {\n color: rgb(104, 118, 135);\n}\n\n.ace-tm .ace_string {\n color: rgb(3, 106, 7);\n}\n\n.ace-tm .ace_comment {\n color: rgb(76, 136, 107);\n}\n\n.ace-tm .ace_comment.ace_doc {\n color: rgb(0, 102, 255);\n}\n\n.ace-tm .ace_comment.ace_doc.ace_tag {\n color: rgb(128, 159, 191);\n}\n\n.ace-tm .ace_constant.ace_numeric {\n color: rgb(0, 0, 205);\n}\n\n.ace-tm .ace_variable {\n color: rgb(49, 132, 149);\n}\n\n.ace-tm .ace_xml-pe {\n color: rgb(104, 104, 91);\n}\n\n.ace-tm .ace_entity.ace_name.ace_function {\n color: #0000A2;\n}\n\n\n.ace-tm .ace_heading {\n color: rgb(12, 7, 255);\n}\n\n.ace-tm .ace_list {\n color:rgb(185, 6, 144);\n}\n\n.ace-tm .ace_meta.ace_tag {\n color:rgb(0, 22, 142);\n}\n\n.ace-tm .ace_string.ace_regex {\n color: rgb(255, 0, 0)\n}\n\n.ace-tm .ace_marker-layer .ace_selection {\n background: rgb(181, 213, 255);\n}\n.ace-tm.ace_multiselect .ace_selection.ace_start {\n box-shadow: 0 0 3px 0px white;\n}\n.ace-tm .ace_marker-layer .ace_step {\n background: rgb(252, 255, 0);\n}\n\n.ace-tm .ace_marker-layer .ace_stack {\n background: rgb(164, 229, 101);\n}\n\n.ace-tm .ace_marker-layer .ace_bracket {\n margin: -1px 0 0 -1px;\n border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-tm .ace_marker-layer .ace_active-line {\n background: rgba(0, 0, 0, 0.07);\n}\n\n.ace-tm .ace_gutter-active-line {\n background-color : #dcdcdc;\n}\n\n.ace-tm .ace_marker-layer .ace_selected-word {\n background: rgb(250, 250, 255);\n border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-tm .ace_indent-guide {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}\n\n.ace-tm .ace_indent-guide-active {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\") right repeat-y;\n}\n"; - -}); - -ace.define("ace/theme/textmate",["require","exports","module","ace/theme/textmate-css","ace/lib/dom"], function(require, exports, module){"use strict"; -exports.isDark = false; -exports.cssClass = "ace-tm"; -exports.cssText = require("./textmate-css"); -exports.$id = "ace/theme/textmate"; -var dom = require("../lib/dom"); -dom.importCssString(exports.cssText, exports.cssClass, false); - -}); - -ace.define("ace/config",["require","exports","module","ace/lib/lang","ace/lib/net","ace/lib/dom","ace/lib/app_config","ace/theme/textmate"], function(require, exports, module){"no use strict"; -var lang = require("./lib/lang"); -var net = require("./lib/net"); -var dom = require("./lib/dom"); -var AppConfig = require("./lib/app_config").AppConfig; -module.exports = exports = new AppConfig(); -var options = { - packaged: false, - workerPath: null, - modePath: null, - themePath: null, - basePath: "", - suffix: ".js", - $moduleUrls: {}, - loadWorkerFromBlob: true, - sharedPopups: false, - useStrictCSP: null -}; -exports.get = function (key) { - if (!options.hasOwnProperty(key)) - throw new Error("Unknown config key: " + key); - return options[key]; -}; -exports.set = function (key, value) { - if (options.hasOwnProperty(key)) - options[key] = value; - else if (this.setDefaultValue("", key, value) == false) - throw new Error("Unknown config key: " + key); - if (key == "useStrictCSP") - dom.useStrictCSP(value); -}; -exports.all = function () { - return lang.copyObject(options); -}; -exports.$modes = {}; -exports.moduleUrl = function (name, component) { - if (options.$moduleUrls[name]) - return options.$moduleUrls[name]; - var parts = name.split("/"); - component = component || parts[parts.length - 2] || ""; - var sep = component == "snippets" ? "/" : "-"; - var base = parts[parts.length - 1]; - if (component == "worker" && sep == "-") { - var re = new RegExp("^" + component + "[\\-_]|[\\-_]" + component + "$", "g"); - base = base.replace(re, ""); - } - if ((!base || base == component) && parts.length > 1) - base = parts[parts.length - 2]; - var path = options[component + "Path"]; - if (path == null) { - path = options.basePath; - } - else if (sep == "/") { - component = sep = ""; - } - if (path && path.slice(-1) != "/") - path += "/"; - return path + component + sep + base + this.get("suffix"); -}; -exports.setModuleUrl = function (name, subst) { - return options.$moduleUrls[name] = subst; -}; -var loader = function (moduleName, cb) { - if (moduleName === "ace/theme/textmate" || moduleName === "./theme/textmate") - return cb(null, require("./theme/textmate")); - if (customLoader) - return customLoader(moduleName, cb); - console.error("loader is not configured"); -}; -var customLoader; -exports.setLoader = function (cb) { - customLoader = cb; -}; -exports.dynamicModules = Object.create(null); -exports.$loading = {}; -exports.$loaded = {}; -exports.loadModule = function (moduleId, onLoad) { - var loadedModule; - if (Array.isArray(moduleId)) { - var moduleType = moduleId[0]; - var moduleName = moduleId[1]; - } - else if (typeof moduleId == "string") { - var moduleName = moduleId; - } - var load = function (module) { - if (module && !exports.$loading[moduleName]) - return onLoad && onLoad(module); - if (!exports.$loading[moduleName]) - exports.$loading[moduleName] = []; - exports.$loading[moduleName].push(onLoad); - if (exports.$loading[moduleName].length > 1) - return; - var afterLoad = function () { - loader(moduleName, function (err, module) { - if (module) - exports.$loaded[moduleName] = module; - exports._emit("load.module", { name: moduleName, module: module }); - var listeners = exports.$loading[moduleName]; - exports.$loading[moduleName] = null; - listeners.forEach(function (onLoad) { - onLoad && onLoad(module); - }); - }); - }; - if (!exports.get("packaged")) - return afterLoad(); - net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); - reportErrorIfPathIsNotConfigured(); - }; - if (exports.dynamicModules[moduleName]) { - exports.dynamicModules[moduleName]().then(function (module) { - if (module.default) { - load(module.default); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removetolinestart", + description: "Remove to line start", + bindKey: bindKey("Alt-Backspace", "Command-Backspace"), + exec: function (editor) { editor.removeToLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removetolineend", + description: "Remove to line end", + bindKey: bindKey("Alt-Delete", "Ctrl-K|Command-Delete"), + exec: function (editor) { editor.removeToLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removetolinestarthard", + description: "Remove to line start hard", + bindKey: bindKey("Ctrl-Shift-Backspace", null), + exec: function (editor) { + var range = editor.selection.getRange(); + range.start.column = 0; + editor.session.remove(range); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removetolineendhard", + description: "Remove to line end hard", + bindKey: bindKey("Ctrl-Shift-Delete", null), + exec: function (editor) { + var range = editor.selection.getRange(); + range.end.column = Number.MAX_VALUE; + editor.session.remove(range); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removewordleft", + description: "Remove word left", + bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), + exec: function (editor) { editor.removeWordLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removewordright", + description: "Remove word right", + bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), + exec: function (editor) { editor.removeWordRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "outdent", + description: "Outdent", + bindKey: bindKey("Shift-Tab", "Shift-Tab"), + exec: function (editor) { editor.blockOutdent(); }, + multiSelectAction: "forEach", + scrollIntoView: "selectionPart" + }, { + name: "indent", + description: "Indent", + bindKey: bindKey("Tab", "Tab"), + exec: function (editor) { editor.indent(); }, + multiSelectAction: "forEach", + scrollIntoView: "selectionPart" + }, { + name: "blockoutdent", + description: "Block outdent", + bindKey: bindKey("Ctrl-[", "Ctrl-["), + exec: function (editor) { editor.blockOutdent(); }, + multiSelectAction: "forEachLine", + scrollIntoView: "selectionPart" + }, { + name: "blockindent", + description: "Block indent", + bindKey: bindKey("Ctrl-]", "Ctrl-]"), + exec: function (editor) { editor.blockIndent(); }, + multiSelectAction: "forEachLine", + scrollIntoView: "selectionPart" + }, { + name: "insertstring", + description: "Insert string", + exec: function (editor, str) { editor.insert(str); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "inserttext", + description: "Insert text", + exec: function (editor, args) { + editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "splitline", + description: "Split line", + bindKey: bindKey(null, "Ctrl-O"), + exec: function (editor) { editor.splitLine(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "transposeletters", + description: "Transpose letters", + bindKey: bindKey("Alt-Shift-X", "Ctrl-T"), + exec: function (editor) { editor.transposeLetters(); }, + multiSelectAction: function (editor) { editor.transposeSelections(1); }, + scrollIntoView: "cursor" + }, { + name: "touppercase", + description: "To uppercase", + bindKey: bindKey("Ctrl-U", "Ctrl-U"), + exec: function (editor) { editor.toUpperCase(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "tolowercase", + description: "To lowercase", + bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), + exec: function (editor) { editor.toLowerCase(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "autoindent", + description: "Auto Indent", + bindKey: bindKey(null, null), + exec: function (editor) { editor.autoIndent(); }, + scrollIntoView: "animate" + }, { + name: "expandtoline", + description: "Expand to line", + bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"), + exec: function (editor) { + var range = editor.selection.getRange(); + range.start.column = range.end.column = 0; + range.end.row++; + editor.selection.setRange(range, false); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "openlink", + bindKey: bindKey("Ctrl+F3", "F3"), + exec: function (editor) { editor.openLink(); } + }, { + name: "joinlines", + description: "Join lines", + bindKey: bindKey(null, null), + exec: function (editor) { + var isBackwards = editor.selection.isBackwards(); + var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor(); + var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead(); + var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length; + var selectedText = editor.session.doc.getTextRange(editor.selection.getRange()); + var selectedCount = selectedText.replace(/\n\s*/, " ").length; + var insertLine = editor.session.doc.getLine(selectionStart.row); + for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) { + var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i))); + if (curLine.length !== 0) { + curLine = " " + curLine; + } + insertLine += curLine; + } + if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) { + insertLine += editor.session.doc.getNewLineCharacter(); + } + editor.clearSelection(); + editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine); + if (selectedCount > 0) { + editor.selection.moveCursorTo(selectionStart.row, selectionStart.column); + editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount); } else { - load(module); + firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol; + editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol); } - }); - } - else { - try { - loadedModule = this.$require(moduleName); - } - catch (e) { } - load(loadedModule || exports.$loaded[moduleName]); - } -}; -exports.$require = function (moduleName) { - if (typeof module["require"] == "function") { - var req = "require"; - return module[req](moduleName); - } -}; -exports.setModuleLoader = function (moduleName, onLoad) { - exports.dynamicModules[moduleName] = onLoad; -}; -var reportErrorIfPathIsNotConfigured = function () { - if (!options.basePath && !options.workerPath - && !options.modePath && !options.themePath - && !Object.keys(options.$moduleUrls).length) { - console.error("Unable to infer path to ace from script src,", "use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes", "or with webpack use ace/webpack-resolver"); - reportErrorIfPathIsNotConfigured = function () { }; - } -}; -exports.version = "1.43.2"; - -}); - -ace.define("ace/loader_build",["require","exports","module","ace/lib/fixoldbrowsers","ace/config"], function(require, exports, module) { -"use strict"; - -require("./lib/fixoldbrowsers"); -var config = require("./config"); -config.setLoader(function(moduleName, cb) { - require([moduleName], function(module) { - cb(null, module); - }); -}); - -var global = (function() { - return this || typeof window != "undefined" && window; -})(); - -module.exports = function(ace) { - config.init = init; - config.$require = require; - ace.require = require; - - if (true) - ace.define = __webpack_require__.amdD; -}; -init(true);function init(packaged) { - - if (!global || !global.document) - return; - - config.set("packaged", packaged || require.packaged || module.packaged || (global.define && __webpack_require__.amdD.packaged)); - - var scriptOptions = {}; - var scriptUrl = ""; - var currentScript = (document.currentScript || document._currentScript ); // native or polyfill - var currentDocument = currentScript && currentScript.ownerDocument || document; - - if (currentScript && currentScript.src) { - scriptUrl = currentScript.src.split(/[?#]/)[0].split("/").slice(0, -1).join("/") || ""; - } - - var scripts = currentDocument.getElementsByTagName("script"); - for (var i=0; i [" + this.end.row + "/" + this.end.column + "]"); + GutterKeyboardHandler.prototype.addListener = function () { + this.element.addEventListener("keydown", this.$onGutterKeyDown.bind(this)); + this.element.addEventListener("focusout", this.$blurGutter.bind(this)); + this.editor.on("mousewheel", this.$blurGutter.bind(this)); }; - Range.prototype.contains = function (row, column) { - return this.compare(row, column) == 0; + GutterKeyboardHandler.prototype.removeListener = function () { + this.element.removeEventListener("keydown", this.$onGutterKeyDown.bind(this)); + this.element.removeEventListener("focusout", this.$blurGutter.bind(this)); + this.editor.off("mousewheel", this.$blurGutter.bind(this)); }; - Range.prototype.compareRange = function (range) { - var cmp, end = range.end, start = range.start; - cmp = this.compare(end.row, end.column); - if (cmp == 1) { - cmp = this.compare(start.row, start.column); - if (cmp == 1) { - return 2; + GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) { + if (this.annotationTooltip.isOpen) { + e.preventDefault(); + if (e.keyCode === keys["escape"]) + this.annotationTooltip.hideTooltip(); + return; + } + if (e.target === this.element) { + if (e.keyCode != keys["enter"]) { + return; } - else if (cmp == 0) { - return 1; + e.preventDefault(); + var row = this.editor.getCursorPosition().row; + if (!this.editor.isRowVisible(row)) + this.editor.scrollToLine(row, true, true); + setTimeout( + function () { + var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row); + var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index); + var nearestAnnotationIndex = this.$findNearestAnnotation(index); + if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null) + return; + var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index); + if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) { + this.activeLane = "fold"; + this.activeRowIndex = nearestFoldLaneWidgetIndex; + if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) { + this.$focusCustomWidget(this.activeRowIndex); + return; + } + else { + this.$focusFoldWidget(this.activeRowIndex); + return; + } + } + else { + this.activeRowIndex = nearestAnnotationIndex; + this.activeLane = "annotation"; + this.$focusAnnotation(this.activeRowIndex); + return; + } + }.bind(this), 10); + return; + } + this.$handleGutterKeyboardInteraction(e); + setTimeout(function () { + this.editor._signal("gutterkeydown", new GutterKeyboardEvent(e, this)); + }.bind(this), 10); + }; + GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) { + if (e.keyCode === keys["tab"]) { + e.preventDefault(); + return; + } + if (e.keyCode === keys["escape"]) { + e.preventDefault(); + this.$blurGutter(); + this.element.focus(); + this.lane = null; + return; + } + if (e.keyCode === keys["up"]) { + e.preventDefault(); + switch (this.activeLane) { + case "fold": + this.$moveFoldWidgetUp(); + break; + case "annotation": + this.$moveAnnotationUp(); + break; } - else { - return 0; + return; + } + if (e.keyCode === keys["down"]) { + e.preventDefault(); + switch (this.activeLane) { + case "fold": + this.$moveFoldWidgetDown(); + break; + case "annotation": + this.$moveAnnotationDown(); + break; } + return; } - else if (cmp == -1) { - return -2; + if (e.keyCode === keys["left"]) { + e.preventDefault(); + this.$switchLane("annotation"); + return; } - else { - cmp = this.compare(start.row, start.column); - if (cmp == -1) { - return -1; - } - else if (cmp == 1) { - return 42; + if (e.keyCode === keys["right"]) { + e.preventDefault(); + this.$switchLane("fold"); + return; + } + if (e.keyCode === keys["enter"] || e.keyCode === keys["space"]) { + e.preventDefault(); + switch (this.activeLane) { + case "fold": + var row = this.$rowIndexToRow(this.activeRowIndex); + var customWidget = this.editor.session.$gutterCustomWidgets[row]; + if (customWidget) { + if (customWidget.callbacks && customWidget.callbacks.onClick) { + customWidget.callbacks.onClick(e, row); + } + } + else if (this.gutterLayer.session.foldWidgets[row] === 'start') { + this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e); + setTimeout( + function () { + if (this.$rowIndexToRow(this.activeRowIndex) !== row) { + this.$blurFoldWidget(this.activeRowIndex); + this.activeRowIndex = this.$rowToRowIndex(row); + this.$focusFoldWidget(this.activeRowIndex); + } + }.bind(this), 10); + break; + } + else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') { + break; + } + return; + case "annotation": + var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2]; + var rect = gutterElement.getBoundingClientRect(); + var style = this.annotationTooltip.getElement().style; + style.left = rect.right + "px"; + style.top = rect.bottom + "px"; + this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex)); + break; } - else { - return 0; + return; + } + }; + GutterKeyboardHandler.prototype.$blurGutter = function () { + if (this.activeRowIndex !== null) { + switch (this.activeLane) { + case "fold": + this.$blurFoldWidget(this.activeRowIndex); + this.$blurCustomWidget(this.activeRowIndex); + break; + case "annotation": + this.$blurAnnotation(this.activeRowIndex); + break; } } + if (this.annotationTooltip.isOpen) + this.annotationTooltip.hideTooltip(); + return; }; - Range.prototype.comparePoint = function (p) { - return this.compare(p.row, p.column); - }; - Range.prototype.containsRange = function (range) { - return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; + GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) { + var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); + var isIconVisible = this.$getFoldWidget(index).style.display !== "none"; + return isRowFullyVisible && isIconVisible; }; - Range.prototype.intersects = function (range) { - var cmp = this.compareRange(range); - return (cmp == -1 || cmp == 0 || cmp == 1); + GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) { + var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); + var isIconVisible = !!this.$getCustomWidget(index); + return isRowFullyVisible && isIconVisible; }; - Range.prototype.isEnd = function (row, column) { - return this.end.row == row && this.end.column == column; + GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) { + var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); + var isIconVisible = this.$getAnnotation(index).style.display !== "none"; + return isRowFullyVisible && isIconVisible; }; - Range.prototype.isStart = function (row, column) { - return this.start.row == row && this.start.column == column; + GutterKeyboardHandler.prototype.$getFoldWidget = function (index) { + var cell = this.lines.get(index); + var element = cell.element; + return element.childNodes[1]; }; - Range.prototype.setStart = function (row, column) { - if (typeof row == "object") { - this.start.column = row.column; - this.start.row = row.row; - } - else { - this.start.row = row; - this.start.column = column; - } + GutterKeyboardHandler.prototype.$getCustomWidget = function (index) { + var cell = this.lines.get(index); + var element = cell.element; + return element.childNodes[3]; }; - Range.prototype.setEnd = function (row, column) { - if (typeof row == "object") { - this.end.column = row.column; - this.end.row = row.row; - } - else { - this.end.row = row; - this.end.column = column; - } + GutterKeyboardHandler.prototype.$getAnnotation = function (index) { + var cell = this.lines.get(index); + var element = cell.element; + return element.childNodes[2]; }; - Range.prototype.inside = function (row, column) { - if (this.compare(row, column) == 0) { - if (this.isEnd(row, column) || this.isStart(row, column)) { - return false; - } - else { - return true; - } + GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) { + if (this.$isCustomWidgetVisible(index)) + return index; + if (this.$isFoldWidgetVisible(index)) + return index; + var i = 0; + while (index - i > 0 || index + i < this.lines.getLength() - 1) { + i++; + if (index - i >= 0 && this.$isCustomWidgetVisible(index - i)) + return index - i; + if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i)) + return index + i; + if (index - i >= 0 && this.$isFoldWidgetVisible(index - i)) + return index - i; + if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i)) + return index + i; } - return false; + return null; }; - Range.prototype.insideStart = function (row, column) { - if (this.compare(row, column) == 0) { - if (this.isEnd(row, column)) { - return false; - } - else { - return true; - } + GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) { + if (this.$isAnnotationVisible(index)) + return index; + var i = 0; + while (index - i > 0 || index + i < this.lines.getLength() - 1) { + i++; + if (index - i >= 0 && this.$isAnnotationVisible(index - i)) + return index - i; + if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i)) + return index + i; } - return false; + return null; }; - Range.prototype.insideEnd = function (row, column) { - if (this.compare(row, column) == 0) { - if (this.isStart(row, column)) { - return false; - } - else { - return true; - } - } - return false; + GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) { + if (index == null) + return; + var foldWidget = this.$getFoldWidget(index); + foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName); + foldWidget.focus(); }; - Range.prototype.compare = function (row, column) { - if (!this.isMultiLine()) { - if (row === this.start.row) { - return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); - } + GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) { + if (index == null) + return; + var customWidget = this.$getCustomWidget(index); + if (customWidget) { + customWidget.classList.add(this.editor.renderer.keyboardFocusClassName); + customWidget.focus(); } - if (row < this.start.row) - return -1; - if (row > this.end.row) - return 1; - if (this.start.row === row) - return column >= this.start.column ? 0 : -1; - if (this.end.row === row) - return column <= this.end.column ? 0 : 1; - return 0; }; - Range.prototype.compareStart = function (row, column) { - if (this.start.row == row && this.start.column == column) { - return -1; - } - else { - return this.compare(row, column); - } + GutterKeyboardHandler.prototype.$focusAnnotation = function (index) { + if (index == null) + return; + var annotation = this.$getAnnotation(index); + annotation.classList.add(this.editor.renderer.keyboardFocusClassName); + annotation.focus(); }; - Range.prototype.compareEnd = function (row, column) { - if (this.end.row == row && this.end.column == column) { - return 1; - } - else { - return this.compare(row, column); - } + GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) { + var foldWidget = this.$getFoldWidget(index); + foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName); + foldWidget.blur(); }; - Range.prototype.compareInside = function (row, column) { - if (this.end.row == row && this.end.column == column) { - return 1; - } - else if (this.start.row == row && this.start.column == column) { - return -1; - } - else { - return this.compare(row, column); + GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) { + var customWidget = this.$getCustomWidget(index); + if (customWidget) { + customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName); + customWidget.blur(); } }; - Range.prototype.clipRows = function (firstRow, lastRow) { - if (this.end.row > lastRow) - var end = { row: lastRow + 1, column: 0 }; - else if (this.end.row < firstRow) - var end = { row: firstRow, column: 0 }; - if (this.start.row > lastRow) - var start = { row: lastRow + 1, column: 0 }; - else if (this.start.row < firstRow) - var start = { row: firstRow, column: 0 }; - return Range.fromPoints(start || this.start, end || this.end); - }; - Range.prototype.extend = function (row, column) { - var cmp = this.compare(row, column); - if (cmp == 0) - return this; - else if (cmp == -1) - var start = { row: row, column: column }; - else - var end = { row: row, column: column }; - return Range.fromPoints(start || this.start, end || this.end); - }; - Range.prototype.isEmpty = function () { - return (this.start.row === this.end.row && this.start.column === this.end.column); - }; - Range.prototype.isMultiLine = function () { - return (this.start.row !== this.end.row); - }; - Range.prototype.clone = function () { - return Range.fromPoints(this.start, this.end); - }; - Range.prototype.collapseRows = function () { - if (this.end.column == 0) - return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0); - else - return new Range(this.start.row, 0, this.end.row, 0); - }; - Range.prototype.toScreenRange = function (session) { - var screenPosStart = session.documentToScreenPosition(this.start); - var screenPosEnd = session.documentToScreenPosition(this.end); - return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column); - }; - Range.prototype.moveBy = function (row, column) { - this.start.row += row; - this.start.column += column; - this.end.row += row; - this.end.column += column; + GutterKeyboardHandler.prototype.$blurAnnotation = function (index) { + var annotation = this.$getAnnotation(index); + annotation.classList.remove(this.editor.renderer.keyboardFocusClassName); + annotation.blur(); }; - return Range; -}()); -Range.fromPoints = function (start, end) { - return new Range(start.row, start.column, end.row, end.column); -}; -Range.comparePoints = function (p1, p2) { - return p1.row - p2.row || p1.column - p2.column; -}; -exports.Range = Range; - -}); - -ace.define("ace/lib/keys",["require","exports","module","ace/lib/oop"], function(require, exports, module){"use strict"; -var oop = require("./oop"); -var Keys = { - MODIFIER_KEYS: { - 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta', - 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu' - }, - KEY_MODS: { - "ctrl": 1, "alt": 2, "option": 2, "shift": 4, - "super": 8, "meta": 8, "command": 8, "cmd": 8, - "control": 1 - }, - FUNCTION_KEYS: { - 8: "Backspace", - 9: "Tab", - 13: "Return", - 19: "Pause", - 27: "Esc", - 32: "Space", - 33: "PageUp", - 34: "PageDown", - 35: "End", - 36: "Home", - 37: "Left", - 38: "Up", - 39: "Right", - 40: "Down", - 44: "Print", - 45: "Insert", - 46: "Delete", - '-13': "NumpadEnter", - 144: "Numlock", - 145: "Scrolllock" - }, - PRINTABLE_KEYS: { - 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.', - 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', - 219: '[', 220: '\\', 221: ']', 222: "'", 111: '/', 106: '*' - } -}; -var codeToKeyCode = { - Command: 224, - Backspace: 8, - Tab: 9, - Return: 13, - Enter: 13, - Pause: 19, - Escape: 27, - PageUp: 33, - PageDown: 34, - End: 35, - Home: 36, - Insert: 45, - Delete: 46, - ArrowLeft: 37, - ArrowUp: 38, - ArrowRight: 39, - ArrowDown: 40, - Backquote: 192, - Minus: 189, - Equal: 187, - BracketLeft: 219, - Backslash: 220, - BracketRight: 221, - Semicolon: 186, - Quote: 222, - Comma: 188, - Period: 190, - Slash: 191, - Space: 32, - NumpadAdd: 107, - NumpadDecimal: 110, - NumpadSubtract: 109, - NumpadDivide: 111, - NumpadMultiply: 106 -}; -for (var i = 0; i < 10; i++) { - codeToKeyCode["Digit" + i] = 48 + i; - codeToKeyCode["Numpad" + i] = 96 + i; - Keys.PRINTABLE_KEYS[48 + i] = "" + i; - Keys.FUNCTION_KEYS[96 + i] = "Numpad" + i; -} -for (var i = 65; i < 91; i++) { - var chr = String.fromCharCode(i + 32); - codeToKeyCode["Key" + chr.toUpperCase()] = i; - Keys.PRINTABLE_KEYS[i] = chr; -} -for (var i = 1; i < 13; i++) { - codeToKeyCode["F" + i] = 111 + i; - Keys.FUNCTION_KEYS[111 + i] = "F" + i; -} -var modifiers = { - Shift: 16, - Control: 17, - Alt: 18, - Meta: 224 -}; -for (var mod in modifiers) { - codeToKeyCode[mod] = codeToKeyCode[mod + "Left"] - = codeToKeyCode[mod + "Right"] = modifiers[mod]; -} -exports.$codeToKeyCode = codeToKeyCode; -Keys.PRINTABLE_KEYS[173] = '-'; -for (var j in Keys.FUNCTION_KEYS) { - var name = Keys.FUNCTION_KEYS[j].toLowerCase(); - Keys[name] = parseInt(j, 10); -} -for (var j in Keys.PRINTABLE_KEYS) { - var name = Keys.PRINTABLE_KEYS[j].toLowerCase(); - Keys[name] = parseInt(j, 10); -} -oop.mixin(Keys, Keys.MODIFIER_KEYS); -oop.mixin(Keys, Keys.PRINTABLE_KEYS); -oop.mixin(Keys, Keys.FUNCTION_KEYS); -Keys.enter = Keys["return"]; -Keys.escape = Keys.esc; -Keys.del = Keys["delete"]; -(function () { - var mods = ["cmd", "ctrl", "alt", "shift"]; - for (var i = Math.pow(2, mods.length); i--;) { - Keys.KEY_MODS[i] = mods.filter(function (x) { - return i & Keys.KEY_MODS[x]; - }).join("-") + "-"; - } -})(); -Keys.KEY_MODS[0] = ""; -Keys.KEY_MODS[-1] = "input-"; -oop.mixin(exports, Keys); -exports.default = exports; -exports.keyCodeToString = function (keyCode) { - var keyString = Keys[keyCode]; - if (typeof keyString != "string") - keyString = String.fromCharCode(keyCode); - return keyString.toLowerCase(); -}; - -}); - -ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module){"use strict"; var keys = require("./keys"); -var useragent = require("./useragent"); -var pressedKeys = null; -var ts = 0; -var activeListenerOptions; -function detectListenerOptionsSupport() { - activeListenerOptions = false; - try { - document.createComment("").addEventListener("test", function () { }, { - get passive() { - activeListenerOptions = { passive: false }; - return true; + GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () { + var index = this.activeRowIndex; + while (index > 0) { + index--; + if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) { + this.$blurFoldWidget(this.activeRowIndex); + this.$blurCustomWidget(this.activeRowIndex); + this.activeRowIndex = index; + if (this.$isFoldWidgetVisible(index)) { + this.$focusFoldWidget(this.activeRowIndex); + } + else { + this.$focusCustomWidget(this.activeRowIndex); + } + return; } - }); - } - catch (e) { } -} -function getListenerOptions() { - if (activeListenerOptions == undefined) - detectListenerOptionsSupport(); - return activeListenerOptions; -} -function EventListener(elem, type, callback) { - this.elem = elem; - this.type = type; - this.callback = callback; -} -EventListener.prototype.destroy = function () { - removeListener(this.elem, this.type, this.callback); - this.elem = this.type = this.callback = undefined; -}; -var addListener = exports.addListener = function (elem, type, callback, destroyer) { - elem.addEventListener(type, callback, getListenerOptions()); - if (destroyer) - destroyer.$toDestroy.push(new EventListener(elem, type, callback)); -}; -var removeListener = exports.removeListener = function (elem, type, callback) { - elem.removeEventListener(type, callback, getListenerOptions()); -}; -exports.stopEvent = function (e) { - exports.stopPropagation(e); - exports.preventDefault(e); - return false; -}; -exports.stopPropagation = function (e) { - if (e.stopPropagation) - e.stopPropagation(); -}; -exports.preventDefault = function (e) { - if (e.preventDefault) - e.preventDefault(); -}; -exports.getButton = function (e) { - if (e.type == "dblclick") - return 0; - if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey))) - return 2; - return e.button; -}; -exports.capture = function (el, eventHandler, releaseCaptureHandler) { - var ownerDocument = el && el.ownerDocument || document; - function onMouseUp(e) { - eventHandler && eventHandler(e); - releaseCaptureHandler && releaseCaptureHandler(e); - removeListener(ownerDocument, "mousemove", eventHandler); - removeListener(ownerDocument, "mouseup", onMouseUp); - removeListener(ownerDocument, "dragstart", onMouseUp); - } - addListener(ownerDocument, "mousemove", eventHandler); - addListener(ownerDocument, "mouseup", onMouseUp); - addListener(ownerDocument, "dragstart", onMouseUp); - return onMouseUp; -}; -exports.addMouseWheelListener = function (el, callback, destroyer) { - addListener(el, "wheel", function (e) { - var factor = 0.15; - var deltaX = e.deltaX || 0; - var deltaY = e.deltaY || 0; - switch (e.deltaMode) { - case e.DOM_DELTA_PIXEL: - e.wheelX = deltaX * factor; - e.wheelY = deltaY * factor; - break; - case e.DOM_DELTA_LINE: - var linePixels = 15; - e.wheelX = deltaX * linePixels; - e.wheelY = deltaY * linePixels; - break; - case e.DOM_DELTA_PAGE: - var pagePixels = 150; - e.wheelX = deltaX * pagePixels; - e.wheelY = deltaY * pagePixels; - break; } - callback(e); - }, destroyer); -}; -exports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) { - var clicks = 0; - var startX, startY, timer; - var eventNames = { - 2: "dblclick", - 3: "tripleclick", - 4: "quadclick" + return; + }; + GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () { + var index = this.activeRowIndex; + while (index < this.lines.getLength() - 1) { + index++; + if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) { + this.$blurFoldWidget(this.activeRowIndex); + this.$blurCustomWidget(this.activeRowIndex); + this.activeRowIndex = index; + if (this.$isFoldWidgetVisible(index)) { + this.$focusFoldWidget(this.activeRowIndex); + } + else { + this.$focusCustomWidget(this.activeRowIndex); + } + return; + } + } + return; }; - function onMousedown(e) { - if (exports.getButton(e) !== 0) { - clicks = 0; + GutterKeyboardHandler.prototype.$moveAnnotationUp = function () { + var index = this.activeRowIndex; + while (index > 0) { + index--; + if (this.$isAnnotationVisible(index)) { + this.$blurAnnotation(this.activeRowIndex); + this.activeRowIndex = index; + this.$focusAnnotation(this.activeRowIndex); + return; + } } - else if (e.detail > 1) { - clicks++; - if (clicks > 4) - clicks = 1; + return; + }; + GutterKeyboardHandler.prototype.$moveAnnotationDown = function () { + var index = this.activeRowIndex; + while (index < this.lines.getLength() - 1) { + index++; + if (this.$isAnnotationVisible(index)) { + this.$blurAnnotation(this.activeRowIndex); + this.activeRowIndex = index; + this.$focusAnnotation(this.activeRowIndex); + return; + } } - else { - clicks = 1; + return; + }; + GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) { + if (num1 === null) + return num2; + if (num2 === null) + return num1; + return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2; + }; + GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) { + switch (desinationLane) { + case "annotation": + if (this.activeLane === "annotation") { + break; + } + var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex); + if (annotationIndex == null) { + break; + } + this.activeLane = "annotation"; + this.$blurFoldWidget(this.activeRowIndex); + this.$blurCustomWidget(this.activeRowIndex); + this.activeRowIndex = annotationIndex; + this.$focusAnnotation(this.activeRowIndex); + break; + case "fold": + if (this.activeLane === "fold") { + break; + } + var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex); + if (foldLaneWidgetIndex === null) { + break; + } + this.activeLane = "fold"; + this.$blurAnnotation(this.activeRowIndex); + this.activeRowIndex = foldLaneWidgetIndex; + if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) { + this.$focusCustomWidget(this.activeRowIndex); + } + else { + this.$focusFoldWidget(this.activeRowIndex); + } + break; } - if (useragent.isIE) { - var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; - if (!timer || isNewClick) - clicks = 1; - if (timer) - clearTimeout(timer); - timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600); - if (clicks == 1) { - startX = e.clientX; - startY = e.clientY; - } + return; + }; + GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) { + var cell = this.lines.get(index); + if (cell) + return cell.row; + return null; + }; + GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) { + for (var i = 0; i < this.lines.getLength(); i++) { + var cell = this.lines.get(i); + if (cell.row == row) + return i; } - e._clicks = clicks; - eventHandler[callbackName]("mousedown", e); - if (clicks > 4) - clicks = 0; - else if (clicks > 1) - return eventHandler[callbackName](eventNames[clicks], e); + return null; + }; + return GutterKeyboardHandler; +}()); +exports.GutterKeyboardHandler = GutterKeyboardHandler; +var GutterKeyboardEvent = /** @class */ (function () { + function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) { + this.gutterKeyboardHandler = gutterKeyboardHandler; + this.domEvent = domEvent; } - if (!Array.isArray(elements)) - elements = [elements]; - elements.forEach(function (el) { - addListener(el, "mousedown", onMousedown, destroyer); - }); -}; -function getModifierHash(e) { - return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); -} -exports.getModifierString = function (e) { - return keys.KEY_MODS[getModifierHash(e)]; + GutterKeyboardEvent.prototype.getKey = function () { + return keys.keyCodeToString(this.domEvent.keyCode); + }; + GutterKeyboardEvent.prototype.getRow = function () { + return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex); + }; + GutterKeyboardEvent.prototype.isInAnnotationLane = function () { + return this.gutterKeyboardHandler.activeLane === "annotation"; + }; + GutterKeyboardEvent.prototype.isInFoldLane = function () { + return this.gutterKeyboardHandler.activeLane === "fold"; + }; + return GutterKeyboardEvent; +}()); +exports.GutterKeyboardEvent = GutterKeyboardEvent; + +}); + +ace.define("ace/editor",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator","ace/keyboard/gutter_handler","ace/config","ace/clipboard","ace/lib/keys","ace/lib/event","ace/tooltip"], function(require, exports, module){"use strict"; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -function normalizeCommandKeys(callback, e, keyCode) { - var hashId = getModifierHash(e); - if (!keyCode && e.code) { - keyCode = keys.$codeToKeyCode[e.code] || keyCode; +var oop = require("./lib/oop"); +var dom = require("./lib/dom"); +var lang = require("./lib/lang"); +var useragent = require("./lib/useragent"); +var TextInput = require("./keyboard/textinput").TextInput; +var MouseHandler = require("./mouse/mouse_handler").MouseHandler; +var FoldHandler = require("./mouse/fold_handler").FoldHandler; +var KeyBinding = require("./keyboard/keybinding").KeyBinding; +var EditSession = require("./edit_session").EditSession; +var Search = require("./search").Search; +var Range = require("./range").Range; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var CommandManager = require("./commands/command_manager").CommandManager; +var defaultCommands = require("./commands/default_commands").commands; +var config = require("./config"); +var TokenIterator = require("./token_iterator").TokenIterator; +var GutterKeyboardHandler = require("./keyboard/gutter_handler").GutterKeyboardHandler; +var nls = require("./config").nls; +var clipboard = require("./clipboard"); +var keys = require('./lib/keys'); +var event = require("./lib/event"); +var HoverTooltip = require("./tooltip").HoverTooltip; +var Editor = /** @class */ (function () { + function Editor(renderer, session, options) { + this.id = "editor" + (++Editor.$uid); this.session; + this.$toDestroy = []; + var container = renderer.getContainerElement(); + this.container = container; + this.renderer = renderer; + this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); + if (typeof document == "object") { + this.textInput = new TextInput(renderer.getTextAreaContainer(), this); + this.renderer.textarea = this.textInput.getElement(); + this.$mouseHandler = new MouseHandler(this); + new FoldHandler(this); + } + this.keyBinding = new KeyBinding(this); + this.$search = new Search().set({ + wrap: true + }); + this.$historyTracker = this.$historyTracker.bind(this); + this.commands.on("exec", this.$historyTracker); + this.$initOperationListeners(); + this._$emitInputEvent = lang.delayedCall(function () { + this._signal("input", {}); + if (this.session && !this.session.destroyed) + this.session.bgTokenizer.scheduleStart(); + }.bind(this)); + this.on("change", function (_, _self) { + _self._$emitInputEvent.schedule(31); + }); + this.setSession(session || options && options.session || new EditSession("")); + config.resetOptions(this); + if (options) + this.setOptions(options); + config._signal("editor", this); } - if (!useragent.isMac && pressedKeys) { - if (e.getModifierState && (e.getModifierState("OS") || e.getModifierState("Win"))) - hashId |= 8; - if (pressedKeys.altGr) { - if ((3 & hashId) != 3) - pressedKeys.altGr = 0; - else - return; + Editor.prototype.$initOperationListeners = function () { + this.commands.on("exec", this.startOperation.bind(this), true); + this.commands.on("afterExec", this.endOperation.bind(this), true); + }; + Editor.prototype.startOperation = function (commandEvent) { + this.session.startOperation(commandEvent); + }; + Editor.prototype.endOperation = function (e) { + this.session.endOperation(e); + }; + Editor.prototype.onStartOperation = function (commandEvent) { + this.curOp = this.session.curOp; + this.curOp.scrollTop = this.renderer.scrollTop; + this.prevOp = this.session.prevOp; + if (!commandEvent) { + this.previousCommand = null; } - if (keyCode === 18 || keyCode === 17) { - var location = e.location; - if (keyCode === 17 && location === 1) { - if (pressedKeys[keyCode] == 1) - ts = e.timeStamp; - } - else if (keyCode === 18 && hashId === 3 && location === 2) { - var dt = e.timeStamp - ts; - if (dt < 50) - pressedKeys.altGr = true; + }; + Editor.prototype.onEndOperation = function (e) { + if (this.curOp && this.session) { + if (e && e.returnValue === false) { + this.curOp = null; + return; } - } - } - if (keyCode in keys.MODIFIER_KEYS) { - keyCode = -1; - } - if (!hashId && keyCode === 13) { - if (e.location === 3) { - callback(e, hashId, -keyCode); - if (e.defaultPrevented) + this._signal("beforeEndOperation"); + if (!this.curOp) return; + var command = this.curOp.command; + var scrollIntoView = command && command.scrollIntoView; + if (scrollIntoView) { + switch (scrollIntoView) { + case "center-animate": + scrollIntoView = "animate"; + case "center": + this.renderer.scrollCursorIntoView(null, 0.5); + break; + case "animate": + case "cursor": + this.renderer.scrollCursorIntoView(); + break; + case "selectionPart": + var range = this.selection.getRange(); + var config = this.renderer.layerConfig; + if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { + this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); + } + break; + default: + break; + } + if (scrollIntoView == "animate") + this.renderer.animateScrolling(this.curOp.scrollTop); + } + this.$lastSel = this.session.selection.toJSON(); + this.prevOp = this.curOp; + this.curOp = null; } - } - if (useragent.isChromeOS && hashId & 8) { - callback(e, hashId, keyCode); - if (e.defaultPrevented) + }; + Editor.prototype.$historyTracker = function (e) { + if (!this.$mergeUndoDeltas) return; - else - hashId &= ~8; - } - if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { - return false; - } - return callback(e, hashId, keyCode); -} -exports.addCommandKeyListener = function (el, callback, destroyer) { - var lastDefaultPrevented = null; - addListener(el, "keydown", function (e) { - pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1; - var result = normalizeCommandKeys(callback, e, e.keyCode); - lastDefaultPrevented = e.defaultPrevented; - return result; - }, destroyer); - addListener(el, "keypress", function (e) { - if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { - exports.stopEvent(e); - lastDefaultPrevented = null; + var prev = this.prevOp; + var mergeableCommands = this.$mergeableCommands; + var shouldMerge = prev.command && (e.command.name == prev.command.name); + if (e.command.name == "insertstring") { + var text = e.args; + if (this.mergeNextCommand === undefined) + this.mergeNextCommand = true; + shouldMerge = shouldMerge + && this.mergeNextCommand // previous command allows to coalesce with + && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type + this.mergeNextCommand = true; } - }, destroyer); - addListener(el, "keyup", function (e) { - pressedKeys[e.keyCode] = null; - }, destroyer); - if (!pressedKeys) { - resetPressedKeys(); - addListener(window, "focus", resetPressedKeys); - } -}; -function resetPressedKeys() { - pressedKeys = Object.create(null); -} -if (typeof window == "object" && window.postMessage && !useragent.isOldIE) { - var postMessageId = 1; - exports.nextTick = function (callback, win) { - win = win || window; - var messageName = "zero-timeout-message-" + (postMessageId++); - var listener = function (e) { - if (e.data == messageName) { - exports.stopPropagation(e); - removeListener(win, "message", listener); - callback(); - } - }; - addListener(win, "message", listener); - win.postMessage(messageName, "*"); + else { + shouldMerge = shouldMerge + && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable + } + if (this.$mergeUndoDeltas != "always" + && Date.now() - this.sequenceStartTime > 2000) { + shouldMerge = false; // the sequence is too long + } + if (shouldMerge) + this.session.mergeUndoDeltas = true; + else if (mergeableCommands.indexOf(e.command.name) !== -1) + this.sequenceStartTime = Date.now(); }; -} -exports.$idleBlocked = false; -exports.onIdle = function (cb, timeout) { - return setTimeout(function handler() { - if (!exports.$idleBlocked) { - cb(); + Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) { + if (keyboardHandler && typeof keyboardHandler === "string" && keyboardHandler != "ace") { + this.$keybindingId = keyboardHandler; + var _self = this; + config.loadModule(["keybinding", keyboardHandler], function (module) { + if (_self.$keybindingId == keyboardHandler) + _self.keyBinding.setKeyboardHandler(module && module.handler); + cb && cb(); + }); } else { - setTimeout(handler, 100); + this.$keybindingId = null; + this.keyBinding.setKeyboardHandler(keyboardHandler); + cb && cb(); } - }, timeout); -}; -exports.$idleBlockId = null; -exports.blockIdle = function (delay) { - if (exports.$idleBlockId) - clearTimeout(exports.$idleBlockId); - exports.$idleBlocked = true; - exports.$idleBlockId = setTimeout(function () { - exports.$idleBlocked = false; - }, delay || 100); -}; -exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame - || window["mozRequestAnimationFrame"] - || window["webkitRequestAnimationFrame"] - || window["msRequestAnimationFrame"] - || window["oRequestAnimationFrame"]); -if (exports.nextFrame) - exports.nextFrame = exports.nextFrame.bind(window); -else - exports.nextFrame = function (callback) { - setTimeout(callback, 17); }; - -}); - -ace.define("ace/clipboard",["require","exports","module"], function(require, exports, module){"use strict"; -var $cancelT; -module.exports = { - lineMode: false, - pasteCancelled: function () { - if ($cancelT && $cancelT > Date.now() - 50) - return true; - return $cancelT = false; - }, - cancel: function () { - $cancelT = Date.now(); - } -}; - -}); - -ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/config","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/clipboard","ace/lib/keys"], function(require, exports, module){"use strict"; -var event = require("../lib/event"); -var nls = require("../config").nls; -var useragent = require("../lib/useragent"); -var dom = require("../lib/dom"); -var lang = require("../lib/lang"); -var clipboard = require("../clipboard"); -var BROKEN_SETDATA = useragent.isChrome < 18; -var USE_IE_MIME_TYPE = useragent.isIE; -var HAS_FOCUS_ARGS = useragent.isChrome > 63; -var MAX_LINE_LENGTH = 400; -var KEYS = require("../lib/keys"); -var MODS = KEYS.KEY_MODS; -var isIOS = useragent.isIOS; -var valueResetRegex = isIOS ? /\s/ : /\n/; -var isMobile = useragent.isMobile; -var TextInput = /** @class */ (function () { - function TextInput(parentNode, host) { - var _this = this; - this.host = host; - this.text = dom.createElement("textarea"); - this.text.className = "ace_text-input"; - this.text.setAttribute("wrap", "off"); - this.text.setAttribute("autocorrect", "off"); - this.text.setAttribute("autocapitalize", "off"); - this.text.setAttribute("spellcheck", "false"); - this.text.style.opacity = "0"; - parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false; - this.pasted = false; - this.inComposition = false; - this.sendingText = false; - this.tempStyle = ''; - if (!isMobile) - this.text.style.fontSize = "1px"; - this.commandMode = false; - this.ignoreFocusEvents = false; - this.lastValue = ""; - this.lastSelectionStart = 0; - this.lastSelectionEnd = 0; - this.lastRestoreEnd = 0; - this.rowStart = Number.MAX_SAFE_INTEGER; - this.rowEnd = Number.MIN_SAFE_INTEGER; - this.numberOfExtraLines = 0; - try { - this.$isFocused = document.activeElement === this.text; + Editor.prototype.getKeyboardHandler = function () { + return this.keyBinding.getKeyboardHandler(); + }; + Editor.prototype.setSession = function (session) { + if (this.session == session) + return; + if (this.curOp) + this.endOperation(); + this.curOp = {}; + var oldSession = this.session; + if (oldSession) { + this.session.off("change", this.$onDocumentChange); + this.session.off("changeMode", this.$onChangeMode); + this.session.off("tokenizerUpdate", this.$onTokenizerUpdate); + this.session.off("changeTabSize", this.$onChangeTabSize); + this.session.off("changeWrapLimit", this.$onChangeWrapLimit); + this.session.off("changeWrapMode", this.$onChangeWrapMode); + this.session.off("changeFold", this.$onChangeFold); + this.session.off("changeFrontMarker", this.$onChangeFrontMarker); + this.session.off("changeBackMarker", this.$onChangeBackMarker); + this.session.off("changeBreakpoint", this.$onChangeBreakpoint); + this.session.off("changeAnnotation", this.$onChangeAnnotation); + this.session.off("changeOverwrite", this.$onCursorChange); + this.session.off("changeScrollTop", this.$onScrollTopChange); + this.session.off("changeScrollLeft", this.$onScrollLeftChange); + this.session.off("startOperation", this.$onStartOperation); + this.session.off("endOperation", this.$onEndOperation); + var selection = this.session.getSelection(); + selection.off("changeCursor", this.$onCursorChange); + selection.off("changeSelection", this.$onSelectionChange); + } + this.session = session; + if (session) { + this.$onDocumentChange = this.onDocumentChange.bind(this); + session.on("change", this.$onDocumentChange); + this.renderer.setSession(session); + this.$onChangeMode = this.onChangeMode.bind(this); + session.on("changeMode", this.$onChangeMode); + this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); + session.on("tokenizerUpdate", this.$onTokenizerUpdate); + this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); + session.on("changeTabSize", this.$onChangeTabSize); + this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); + session.on("changeWrapLimit", this.$onChangeWrapLimit); + this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); + session.on("changeWrapMode", this.$onChangeWrapMode); + this.$onChangeFold = this.onChangeFold.bind(this); + session.on("changeFold", this.$onChangeFold); + this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); + this.session.on("changeFrontMarker", this.$onChangeFrontMarker); + this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); + this.session.on("changeBackMarker", this.$onChangeBackMarker); + this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); + this.session.on("changeBreakpoint", this.$onChangeBreakpoint); + this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); + this.session.on("changeAnnotation", this.$onChangeAnnotation); + this.$onCursorChange = this.onCursorChange.bind(this); + this.session.on("changeOverwrite", this.$onCursorChange); + this.$onScrollTopChange = this.onScrollTopChange.bind(this); + this.session.on("changeScrollTop", this.$onScrollTopChange); + this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); + this.session.on("changeScrollLeft", this.$onScrollLeftChange); + this.selection = session.getSelection(); + this.selection.on("changeCursor", this.$onCursorChange); + this.$onSelectionChange = this.onSelectionChange.bind(this); + this.selection.on("changeSelection", this.$onSelectionChange); + this.$onStartOperation = this.onStartOperation.bind(this); + this.session.on("startOperation", this.$onStartOperation); + this.$onEndOperation = this.onEndOperation.bind(this); + this.session.on("endOperation", this.$onEndOperation); + this.onChangeMode(); + this.onCursorChange(); + this.onScrollTopChange(); + this.onScrollLeftChange(); + this.onSelectionChange(); + this.onChangeFrontMarker(); + this.onChangeBackMarker(); + this.onChangeBreakpoint(); + this.onChangeAnnotation(); + this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); + this.renderer.updateFull(); } - catch (e) { + else { + this.selection = null; + this.renderer.setSession(session); } - this.cancelComposition = this.cancelComposition.bind(this); - this.setAriaOptions({ role: "textbox" }); - event.addListener(this.text, "blur", function (e) { - if (_this.ignoreFocusEvents) - return; - host.onBlur(e); - _this.$isFocused = false; - }, host); - event.addListener(this.text, "focus", function (e) { - if (_this.ignoreFocusEvents) - return; - _this.$isFocused = true; - if (useragent.isEdge) { - try { - if (!document.hasFocus()) - return; - } - catch (e) { - } - } - host.onFocus(e); - if (useragent.isEdge) - setTimeout(_this.resetSelection.bind(_this)); - else - _this.resetSelection(); - }, host); this.$focusScroll = false; - host.on("beforeEndOperation", function () { - var curOp = host.curOp; - var commandName = curOp && curOp.command && curOp.command.name; - if (commandName == "insertstring") - return; - var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged); - if (_this.inComposition && isUserAction) { - _this.lastValue = _this.text.value = ""; - _this.onCompositionEnd(); - } - _this.resetSelection(); + this._signal("changeSession", { + session: session, + oldSession: oldSession }); - host.on("changeSelection", this.setAriaLabel.bind(this)); - this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection; - if (this.$isFocused) - host.onFocus(); - this.inputHandler = null; - this.afterContextMenu = false; - event.addCommandKeyListener(this.text, function (e, hashId, keyCode) { - if (_this.inComposition) - return; - return host.onCommandKey(e, hashId, keyCode); - }, host); - event.addListener(this.text, "select", this.onSelect.bind(this), host); - event.addListener(this.text, "input", this.onInput.bind(this), host); - event.addListener(this.text, "cut", this.onCut.bind(this), host); - event.addListener(this.text, "copy", this.onCopy.bind(this), host); - event.addListener(this.text, "paste", this.onPaste.bind(this), host); - if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) { - event.addListener(parentNode, "keydown", function (e) { - if ((useragent.isMac && !e.metaKey) || !e.ctrlKey) - return; - switch (e.keyCode) { - case 67: - _this.onCopy(e); - break; - case 86: - _this.onPaste(e); - break; - case 88: - _this.onCut(e); - break; - } - }, host); + this.curOp = null; + oldSession && oldSession._signal("changeEditor", { oldEditor: this }); + if (oldSession) + oldSession.$editor = null; + session && session._signal("changeEditor", { editor: this }); + if (session) + session.$editor = this; + if (session && !session.destroyed) + session.bgTokenizer.scheduleStart(); + }; + Editor.prototype.getSession = function () { + return this.session; + }; + Editor.prototype.setValue = function (val, cursorPos) { + this.session.doc.setValue(val); + if (!cursorPos) + this.selectAll(); + else if (cursorPos == 1) + this.navigateFileEnd(); + else if (cursorPos == -1) + this.navigateFileStart(); + return val; + }; + Editor.prototype.getValue = function () { + return this.session.getValue(); + }; + Editor.prototype.getSelection = function () { + return this.selection; + }; + Editor.prototype.resize = function (force) { + this.renderer.onResize(force); + }; + Editor.prototype.setTheme = function (theme, cb) { + this.renderer.setTheme(theme, cb); + }; + Editor.prototype.getTheme = function () { + return this.renderer.getTheme(); + }; + Editor.prototype.setStyle = function (style, incluude) { + this.renderer.setStyle(style, incluude); + }; + Editor.prototype.unsetStyle = function (style) { + this.renderer.unsetStyle(style); + }; + Editor.prototype.getFontSize = function () { + return this.getOption("fontSize") || + dom.computedStyle(this.container).fontSize; + }; + Editor.prototype.setFontSize = function (size) { + this.setOption("fontSize", size); + }; + Editor.prototype.$highlightBrackets = function () { + if (this.$highlightPending) { + return; } - this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this - event.addListener(this.text, "compositionstart", this.onCompositionStart.bind(this), host); - event.addListener(this.text, "compositionupdate", this.onCompositionUpdate.bind(this), host); - event.addListener(this.text, "keyup", this.onKeyup.bind(this), host); - event.addListener(this.text, "keydown", this.syncComposition.bind(this), host); - event.addListener(this.text, "compositionend", this.onCompositionEnd.bind(this), host); - this.closeTimeout; - event.addListener(this.text, "mouseup", this.$onContextMenu.bind(this), host); - event.addListener(this.text, "mousedown", function (e) { - e.preventDefault(); - _this.onContextMenuClose(); - }, host); - event.addListener(host.renderer.scroller, "contextmenu", this.$onContextMenu.bind(this), host); - event.addListener(this.text, "contextmenu", this.$onContextMenu.bind(this), host); - if (isIOS) - this.addIosSelectionHandler(parentNode, host, this.text); - } - TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) { - var _this = this; - var typingResetTimeout = null; - var typing = false; - text.addEventListener("keydown", function (e) { - if (typingResetTimeout) - clearTimeout(typingResetTimeout); - typing = true; - }, true); - text.addEventListener("keyup", function (e) { - typingResetTimeout = setTimeout(function () { - typing = false; - }, 100); - }, true); - var detectArrowKeys = function (e) { - if (document.activeElement !== text) - return; - if (typing || _this.inComposition || host.$mouseHandler.isMousePressed) - return; - if (_this.copied) { + var self = this; + this.$highlightPending = true; + setTimeout(function () { + self.$highlightPending = false; + var session = self.session; + if (!session || session.destroyed) return; + if (session.$bracketHighlight) { + session.$bracketHighlight.markerIds.forEach(function (id) { + session.removeMarker(id); + }); + session.$bracketHighlight = null; } - var selectionStart = text.selectionStart; - var selectionEnd = text.selectionEnd; - var key = null; - var modifier = 0; - if (selectionStart == 0) { - key = KEYS.up; - } - else if (selectionStart == 1) { - key = KEYS.home; - } - else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == "\n") { - key = KEYS.end; - } - else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == " ") { - key = KEYS.left; - modifier = MODS.option; - } - else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart - && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) { - key = KEYS.left; - } - else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split("\n").length > 2) { - key = KEYS.down; + var pos = self.getCursorPosition(); + var handler = self.getKeyboardHandler(); + var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self); + var ranges = session.getMatchingBracketRanges(pos, isBackwards); + if (!ranges) { + var iterator = new TokenIterator(session, pos.row, pos.column); + var token = iterator.getCurrentToken(); + if (token && /\b(?:tag-open|tag-name)/.test(token.type)) { + var tagNamesRanges = session.getMatchingTags(pos); + if (tagNamesRanges) { + ranges = [ + tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName, + tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName + ]; + } + } } - else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == " ") { - key = KEYS.right; - modifier = MODS.option; + if (!ranges && session.$mode.getMatching) + ranges = session.$mode.getMatching(self.session); + if (!ranges) { + if (self.getHighlightIndentGuides()) + self.renderer.$textLayer.$highlightIndentGuide(); + return; } - else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd - && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) { - key = KEYS.right; + var markerType = "ace_bracket"; + if (!Array.isArray(ranges)) { + ranges = [ranges]; } - if (selectionStart !== selectionEnd) - modifier |= MODS.shift; - if (key) { - var result = host.onCommandKey({}, modifier, key); - if (!result && host.commands) { - key = KEYS.keyCodeToString(key); - var command = host.commands.findKeyCommand(modifier, key); - if (command) - host.execCommand(command); - } - _this.lastSelectionStart = selectionStart; - _this.lastSelectionEnd = selectionEnd; - _this.resetSelection(""); + else if (ranges.length == 1) { + markerType = "ace_error_bracket"; } - }; - document.addEventListener("selectionchange", detectArrowKeys); - host.on("destroy", function () { - document.removeEventListener("selectionchange", detectArrowKeys); - }); - }; - TextInput.prototype.onContextMenuClose = function () { - var _this = this; - clearTimeout(this.closeTimeout); - this.closeTimeout = setTimeout(function () { - if (_this.tempStyle) { - _this.text.style.cssText = _this.tempStyle; - _this.tempStyle = ''; + if (ranges.length == 2) { + if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0) + ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)]; + else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0) + ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)]; } - _this.host.renderer.$isMousePressed = false; - if (_this.host.renderer.$keepTextAreaAtCursor) - _this.host.renderer.$moveTextAreaToCursor(); - }, 0); + session.$bracketHighlight = { + ranges: ranges, + markerIds: ranges.map(function (range) { + return session.addMarker(range, markerType, "text"); + }) + }; + if (self.getHighlightIndentGuides()) + self.renderer.$textLayer.$highlightIndentGuide(); + }, 50); }; - TextInput.prototype.$onContextMenu = function (e) { - this.host.textInput.onContextMenu(e); - this.onContextMenuClose(); + Editor.prototype.focus = function () { + this.textInput.focus(); }; - TextInput.prototype.onKeyup = function (e) { - if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) { - if (!this.inComposition) - this.lastValue = this.text.value; - this.lastSelectionStart = this.lastSelectionEnd = -1; - this.resetSelection(); - } - this.syncComposition(); + Editor.prototype.isFocused = function () { + return this.textInput.isFocused(); }; - TextInput.prototype.cancelComposition = function () { - this.ignoreFocusEvents = true; - this.text.blur(); - this.text.focus(); - this.ignoreFocusEvents = false; + Editor.prototype.blur = function () { + this.textInput.blur(); }; - TextInput.prototype.onCompositionStart = function (e) { - if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly) + Editor.prototype.onFocus = function (e) { + if (this.$isFocused) return; - this.inComposition = {}; - if (this.commandMode) + this.$isFocused = true; + this.renderer.showCursor(); + this.renderer.visualizeFocus(); + this._emit("focus", e); + }; + Editor.prototype.onBlur = function (e) { + if (!this.$isFocused) return; - if (e.data) - this.inComposition.useTextareaForIME = false; - setTimeout(this.onCompositionUpdate.bind(this), 0); - this.host._signal("compositionStart"); - this.host.on("mousedown", this.cancelComposition); //TODO: - var range = this.host.getSelectionRange(); - range.end.row = range.start.row; - range.end.column = range.start.column; - this.inComposition.markerRange = range; - this.inComposition.selectionStart = this.lastSelectionStart; - this.host.onCompositionStart(this.inComposition); - if (this.inComposition.useTextareaForIME) { - this.lastValue = this.text.value = ""; - this.lastSelectionStart = 0; - this.lastSelectionEnd = 0; + this.$isFocused = false; + this.renderer.hideCursor(); + this.renderer.visualizeBlur(); + this._emit("blur", e); + }; + Editor.prototype.$cursorChange = function () { + this.renderer.updateCursor(); + this.$highlightBrackets(); + this.$updateHighlightActiveLine(); + }; + Editor.prototype.onDocumentChange = function (delta) { + var wrap = this.session.$useWrapMode; + var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity); + this.renderer.updateLines(delta.start.row, lastRow, wrap); + this._signal("change", delta); + this.$cursorChange(); + }; + Editor.prototype.onTokenizerUpdate = function (e) { + var rows = e.data; + this.renderer.updateLines(rows.first, rows.last); + }; + Editor.prototype.onScrollTopChange = function () { + this.renderer.scrollToY(this.session.getScrollTop()); + }; + Editor.prototype.onScrollLeftChange = function () { + this.renderer.scrollToX(this.session.getScrollLeft()); + }; + Editor.prototype.onCursorChange = function () { + this.$cursorChange(); + this._signal("changeSelection"); + }; + Editor.prototype.$updateHighlightActiveLine = function () { + var session = this.getSession(); + var highlight; + if (this.$highlightActiveLine) { + if (this.$selectionStyle != "line" || !this.selection.isMultiLine()) + highlight = this.getCursorPosition(); + if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty()) + highlight = false; + if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1)) + highlight = false; } - else { - if (this.text.msGetInputContext) - this.inComposition.context = this.text.msGetInputContext(); - if (this.text.getInputContext) - this.inComposition.context = this.text.getInputContext(); + if (session.$highlightLineMarker && !highlight) { + session.removeMarker(session.$highlightLineMarker.id); + session.$highlightLineMarker = null; + } + else if (!session.$highlightLineMarker && highlight) { + var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); + range.id = session.addMarker(range, "ace_active-line", "screenLine"); + session.$highlightLineMarker = range; + } + else if (highlight) { + session.$highlightLineMarker.start.row = highlight.row; + session.$highlightLineMarker.end.row = highlight.row; + session.$highlightLineMarker.start.column = highlight.column; + session._signal("changeBackMarker"); } }; - TextInput.prototype.onCompositionUpdate = function () { - if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly) - return; - if (this.commandMode) - return this.cancelComposition(); - if (this.inComposition.useTextareaForIME) { - this.host.onCompositionUpdate(this.text.value); + Editor.prototype.onSelectionChange = function (e) { + var session = this.session; + if (session.$selectionMarker) { + session.removeMarker(session.$selectionMarker); + } + session.$selectionMarker = null; + if (!this.selection.isEmpty()) { + var range = this.selection.getRange(); + var style = this.getSelectionStyle(); + session.$selectionMarker = session.addMarker(range, "ace_selection", style); } else { - var data = this.text.value; - this.sendText(data); - if (this.inComposition.markerRange) { - if (this.inComposition.context) { - this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset; - } - this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column - + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd; + this.$updateHighlightActiveLine(); + } + var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp(); + this.session.highlight(re); + this._signal("changeSelection"); + }; + Editor.prototype.$getSelectionHighLightRegexp = function () { + var session = this.session; + var selection = this.getSelectionRange(); + if (selection.isEmpty() || selection.isMultiLine()) + return; + var startColumn = selection.start.column; + var endColumn = selection.end.column; + var line = session.getLine(selection.start.row); + var needle = line.substring(startColumn, endColumn); + if (needle.length > 5000 || !/[\w\d]/.test(needle)) + return; + var re = this.$search.$assembleRegExp({ + wholeWord: true, + caseSensitive: true, + needle: needle + }); + var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1); + if (!re.test(wordWithBoundary)) + return; + return re; + }; + Editor.prototype.onChangeFrontMarker = function () { + this.renderer.updateFrontMarkers(); + }; + Editor.prototype.onChangeBackMarker = function () { + this.renderer.updateBackMarkers(); + }; + Editor.prototype.onChangeBreakpoint = function () { + this.renderer.updateBreakpoints(); + }; + Editor.prototype.onChangeAnnotation = function () { + this.renderer.setAnnotations(this.session.getAnnotations()); + }; + Editor.prototype.onChangeMode = function (e) { + this.renderer.updateText(); + this._emit("changeMode", e); + }; + Editor.prototype.onChangeWrapLimit = function () { + this.renderer.updateFull(); + }; + Editor.prototype.onChangeWrapMode = function () { + this.renderer.onResize(true); + }; + Editor.prototype.onChangeFold = function () { + this.$updateHighlightActiveLine(); + this.renderer.updateFull(); + }; + Editor.prototype.getSelectedText = function () { + return this.session.getTextRange(this.getSelectionRange()); + }; + Editor.prototype.getCopyText = function () { + var text = this.getSelectedText(); + var nl = this.session.doc.getNewLineCharacter(); + var copyLine = false; + if (!text && this.$copyWithEmptySelection) { + copyLine = true; + var ranges = this.selection.getAllRanges(); + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (i && ranges[i - 1].start.row == range.start.row) + continue; + text += this.session.getLine(range.start.row) + nl; } } + var e = { text: text }; + this._signal("copy", e); + clipboard.lineMode = copyLine ? e.text : false; + return e.text; }; - TextInput.prototype.onCompositionEnd = function (e) { - if (!this.host.onCompositionEnd || this.host.$readOnly) - return; - this.inComposition = false; - this.host.onCompositionEnd(); - this.host.off("mousedown", this.cancelComposition); - if (e) - this.onInput(); - }; - TextInput.prototype.onCut = function (e) { - this.doCopy(e, true); + Editor.prototype.onCopy = function () { + this.commands.exec("copy", this); }; - TextInput.prototype.onCopy = function (e) { - this.doCopy(e, false); + Editor.prototype.onCut = function () { + this.commands.exec("cut", this); }; - TextInput.prototype.onPaste = function (e) { - var data = this.handleClipboardData(e); - if (clipboard.pasteCancelled()) - return; - if (typeof data == "string") { - if (data) - this.host.onPaste(data, e); - if (useragent.isIE) - setTimeout(this.resetSelection); - event.preventDefault(e); - } - else { - this.text.value = ""; - this.pasted = true; - } + Editor.prototype.onPaste = function (text, event) { + var e = { text: text, event: event }; + this.commands.exec("paste", this, e); }; - TextInput.prototype.doCopy = function (e, isCut) { - var _this = this; - var data = this.host.getCopyText(); - if (!data) - return event.preventDefault(e); - if (this.handleClipboardData(e, data)) { - if (isIOS) { - this.resetSelection(data); - this.copied = data; - setTimeout(function () { - _this.copied = false; - }, 10); - } - isCut ? this.host.onCut() : this.host.onCopy(); - event.preventDefault(e); + Editor.prototype.$handlePaste = function (e) { + if (typeof e == "string") + e = { text: e }; + this._signal("paste", e); + var text = e.text; + var lineMode = text === clipboard.lineMode; + var session = this.session; + if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { + if (lineMode) + session.insert({ row: this.selection.lead.row, column: 0 }, text); + else + this.insert(text); } - else { - this.copied = true; - this.text.value = data; - this.text.select(); - setTimeout(function () { - _this.copied = false; - _this.resetSelection(); - isCut ? _this.host.onCut() : _this.host.onCopy(); + else if (lineMode) { + this.selection.rangeList.ranges.forEach(function (range) { + session.insert({ row: range.start.row, column: 0 }, text); }); } - }; - TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) { - var clipboardData = e.clipboardData || window["clipboardData"]; - if (!clipboardData || BROKEN_SETDATA) - return; - var mime = USE_IE_MIME_TYPE || forceIEMime ? "Text" : "text/plain"; - try { - if (data) { - return clipboardData.setData(mime, data) !== false; - } - else { - return clipboardData.getData(mime); + else { + var lines = text.split(/\r\n|\r|\n/); + var ranges = this.selection.rangeList.ranges; + var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]); + if (lines.length != ranges.length || isFullLine) + return this.commands.exec("insertstring", this, text); + for (var i = ranges.length; i--;) { + var range = ranges[i]; + if (!range.isEmpty()) + session.remove(range); + session.insert(range.start, lines[i]); } } - catch (e) { - if (!forceIEMime) - return this.handleClipboardData(e, data, true); - } }; - TextInput.prototype.onInput = function (e) { - if (this.inComposition) - return this.onCompositionUpdate(); - if (e && e.inputType) { - if (e.inputType == "historyUndo") - return this.host.execCommand("undo"); - if (e.inputType == "historyRedo") - return this.host.execCommand("redo"); + Editor.prototype.execCommand = function (command, args) { + return this.commands.exec(command, this, args); + }; + Editor.prototype.insert = function (text, pasted) { + var session = this.session; + var mode = session.getMode(); + var cursor = this.getCursorPosition(); + if (this.getBehavioursEnabled() && !pasted) { + var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); + if (transform) { + if (text !== transform.text) { + if (!this.inVirtualSelectionMode) { + this.session.mergeUndoDeltas = false; + this.mergeNextCommand = false; + } + } + text = transform.text; + } } - var data = this.text.value; - var inserted = this.sendText(data, true); - if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart - < 1 && this.lastSelectionStart == this.lastSelectionEnd) { - this.resetSelection(); + if (text == "\t") + text = this.session.getTabString(); + if (!this.selection.isEmpty()) { + var range = this.getSelectionRange(); + cursor = this.session.remove(range); + this.clearSelection(); } - }; - TextInput.prototype.sendText = function (value, fromInput) { - if (this.afterContextMenu) - this.afterContextMenu = false; - if (this.pasted) { - this.resetSelection(); - if (value) - this.host.onPaste(value); - this.pasted = false; - return ""; + else if (this.session.getOverwrite() && text.indexOf("\n") == -1) { + var range = Range.fromPoints(cursor, cursor); + range.end.column += text.length; + this.session.remove(range); } - else { - var selectionStart = this.text.selectionStart; - var selectionEnd = this.text.selectionEnd; - var extendLeft = this.lastSelectionStart; - var extendRight = this.lastValue.length - this.lastSelectionEnd; - var inserted = value; - var restoreStart = value.length - selectionStart; - var restoreEnd = value.length - selectionEnd; - var i = 0; - while (extendLeft > 0 && this.lastValue[i] == value[i]) { - i++; - extendLeft--; - } - inserted = inserted.slice(i); - i = 1; - while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1 - && this.lastValue[this.lastValue.length - i] == value[value.length - i]) { - i++; - extendRight--; - } - restoreStart -= i - 1; - restoreEnd -= i - 1; - var endIndex = inserted.length - i + 1; - if (endIndex < 0) { - extendLeft = -endIndex; - endIndex = 0; + if (text == "\n" || text == "\r\n") { + var line = session.getLine(cursor.row); + if (cursor.column > line.search(/\S|$/)) { + var d = line.substr(cursor.column).search(/\S|$/); + session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); } - inserted = inserted.slice(0, endIndex); - if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd) - return ""; - this.sendingText = true; - var shouldReset = false; - if (useragent.isAndroid && inserted == ". ") { - inserted = " "; - shouldReset = true; + } + this.clearSelection(); + var start = cursor.column; + var lineState = session.getState(cursor.row); + var line = session.getLine(cursor.row); + var shouldOutdent = mode.checkOutdent(lineState, line, text); + session.insert(cursor, text); + if (transform && transform.selection) { + if (transform.selection.length == 2) { // Transform relative to the current column + this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1])); } - if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) { - this.host.onTextInput(inserted); + else { // Transform relative to the current row. + this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3])); } - else { - this.host.onTextInput(inserted, { - extendLeft: extendLeft, - extendRight: extendRight, - restoreStart: restoreStart, - restoreEnd: restoreEnd - }); + } + if (this.$enableAutoIndent) { + if (session.getDocument().isNewLine(text)) { + var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); + session.insert({ row: cursor.row + 1, column: 0 }, lineIndent); } - this.sendingText = false; - this.lastValue = value; - this.lastSelectionStart = selectionStart; - this.lastSelectionEnd = selectionEnd; - this.lastRestoreEnd = restoreEnd; - return shouldReset ? "\n" : inserted; + if (shouldOutdent) + mode.autoOutdent(lineState, session, cursor.row); } }; - TextInput.prototype.onSelect = function (e) { - var _this = this; - if (this.inComposition) - return; - var isAllSelected = function (text) { - return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value - === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd; - }; - if (this.copied) { - this.copied = false; + Editor.prototype.autoIndent = function () { + var session = this.session; + var mode = session.getMode(); + var ranges = this.selection.isEmpty() + ? [new Range(0, 0, session.doc.getLength() - 1, 0)] + : this.selection.getAllRanges(); + var prevLineState = ""; + var prevLine = ""; + var lineIndent = ""; + var tab = session.getTabString(); + for (var i = 0; i < ranges.length; i++) { + var startRow = ranges[i].start.row; + var endRow = ranges[i].end.row; + for (var row = startRow; row <= endRow; row++) { + if (row > 0) { + prevLineState = session.getState(row - 1); + prevLine = session.getLine(row - 1); + lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab); + } + var line = session.getLine(row); + var currIndent = mode.$getIndent(line); + if (lineIndent !== currIndent) { + if (currIndent.length > 0) { + var range = new Range(row, 0, row, currIndent.length); + session.remove(range); + } + if (lineIndent.length > 0) { + session.insert({ row: row, column: 0 }, lineIndent); + } + } + mode.autoOutdent(prevLineState, session, row); + } } - else if (isAllSelected(this.text)) { - this.host.selectAll(); - this.resetSelection(); + }; + Editor.prototype.onTextInput = function (text, composition) { + if (!composition) + return this.keyBinding.onTextInput(text); + this.startOperation({ command: { name: "insertstring" } }); + var applyComposition = this.applyComposition.bind(this, text, composition); + if (this.selection.rangeCount) + this.forEachSelection(applyComposition); + else + applyComposition(); + this.endOperation(); + }; + Editor.prototype.applyComposition = function (text, composition) { + if (composition.extendLeft || composition.extendRight) { + var r = this.selection.getRange(); + r.start.column -= composition.extendLeft; + r.end.column += composition.extendRight; + if (r.start.column < 0) { + r.start.row--; + r.start.column += this.session.getLine(r.start.row).length + 1; + } + this.selection.setRange(r); + if (!text && !r.isEmpty()) + this.remove(); } - else if (isMobile && this.text.selectionStart != this.lastSelectionStart) { - this.resetSelection(); + if (text || !this.selection.isEmpty()) + this.insert(text, true); + if (composition.restoreStart || composition.restoreEnd) { + var r = this.selection.getRange(); + r.start.column -= composition.restoreStart; + r.end.column -= composition.restoreEnd; + this.selection.setRange(r); } }; - TextInput.prototype.$resetSelectionIOS = function (value) { - if (!this.$isFocused || (this.copied && !value) || this.sendingText) - return; - if (!value) - value = ""; - var newValue = "\n ab" + value + "cde fg\n"; - if (newValue != this.text.value) - this.text.value = this.lastValue = newValue; - var selectionStart = 4; - var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1)); - if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) { - this.text.setSelectionRange(selectionStart, selectionEnd); - } - this.lastSelectionStart = selectionStart; - this.lastSelectionEnd = selectionEnd; + Editor.prototype.onCommandKey = function (e, hashId, keyCode) { + return this.keyBinding.onCommandKey(e, hashId, keyCode); }; - TextInput.prototype.$resetSelection = function () { - var _this = this; - if (this.inComposition || this.sendingText) - return; - if (!this.$isFocused && !this.afterContextMenu) - return; - this.inComposition = true; - var selectionStart = 0; - var selectionEnd = 0; - var line = ""; - var positionToSelection = function (row, column) { - var selection = column; - for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) { - selection += _this.host.session.getLine(row - i).length + 1; - } - return selection; - }; - if (this.host.session) { - var selection = this.host.selection; - var range = selection.getRange(); - var row = selection.cursor.row; - if (row === this.rowEnd + 1) { - this.rowStart = this.rowEnd + 1; - this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines; - } - else if (row === this.rowStart - 1) { - this.rowEnd = this.rowStart - 1; - this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines; - } - else if (row < this.rowStart - 1 || row > this.rowEnd + 1) { - this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0; - this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2 - * this.numberOfExtraLines; - } - var lines = []; - for (var i = this.rowStart; i <= this.rowEnd; i++) { - lines.push(this.host.session.getLine(i)); - } - line = lines.join('\n'); - selectionStart = positionToSelection(range.start.row, range.start.column); - selectionEnd = positionToSelection(range.end.row, range.end.column); - if (range.start.row < this.rowStart) { - var prevLine = this.host.session.getLine(this.rowStart - 1); - selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart; - selectionEnd += prevLine.length + 1; - line = prevLine + "\n" + line; - } - else if (range.end.row > this.rowEnd) { - var nextLine = this.host.session.getLine(this.rowEnd + 1); - selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column; - selectionEnd += line.length + 1; - line = line + "\n" + nextLine; - } - else if (isMobile && row > 0) { - line = "\n" + line; - selectionEnd += 1; - selectionStart += 1; - } - if (line.length > MAX_LINE_LENGTH) { - if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) { - line = line.slice(0, MAX_LINE_LENGTH); - } - else { - line = "\n"; - if (selectionStart == selectionEnd) { - selectionStart = selectionEnd = 0; - } - else { - selectionStart = 0; - selectionEnd = 1; + Editor.prototype.setOverwrite = function (overwrite) { + this.session.setOverwrite(overwrite); + }; + Editor.prototype.getOverwrite = function () { + return this.session.getOverwrite(); + }; + Editor.prototype.toggleOverwrite = function () { + this.session.toggleOverwrite(); + }; + Editor.prototype.setScrollSpeed = function (speed) { + this.setOption("scrollSpeed", speed); + }; + Editor.prototype.getScrollSpeed = function () { + return this.getOption("scrollSpeed"); + }; + Editor.prototype.setDragDelay = function (dragDelay) { + this.setOption("dragDelay", dragDelay); + }; + Editor.prototype.getDragDelay = function () { + return this.getOption("dragDelay"); + }; + Editor.prototype.setSelectionStyle = function (val) { + this.setOption("selectionStyle", val); + }; + Editor.prototype.getSelectionStyle = function () { + return this.getOption("selectionStyle"); + }; + Editor.prototype.setHighlightActiveLine = function (shouldHighlight) { + this.setOption("highlightActiveLine", shouldHighlight); + }; + Editor.prototype.getHighlightActiveLine = function () { + return this.getOption("highlightActiveLine"); + }; + Editor.prototype.setHighlightGutterLine = function (shouldHighlight) { + this.setOption("highlightGutterLine", shouldHighlight); + }; + Editor.prototype.getHighlightGutterLine = function () { + return this.getOption("highlightGutterLine"); + }; + Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) { + this.setOption("highlightSelectedWord", shouldHighlight); + }; + Editor.prototype.getHighlightSelectedWord = function () { + return this.$highlightSelectedWord; + }; + Editor.prototype.setAnimatedScroll = function (shouldAnimate) { + this.renderer.setAnimatedScroll(shouldAnimate); + }; + Editor.prototype.getAnimatedScroll = function () { + return this.renderer.getAnimatedScroll(); + }; + Editor.prototype.setShowInvisibles = function (showInvisibles) { + this.renderer.setShowInvisibles(showInvisibles); + }; + Editor.prototype.getShowInvisibles = function () { + return this.renderer.getShowInvisibles(); + }; + Editor.prototype.setDisplayIndentGuides = function (display) { + this.renderer.setDisplayIndentGuides(display); + }; + Editor.prototype.getDisplayIndentGuides = function () { + return this.renderer.getDisplayIndentGuides(); + }; + Editor.prototype.setHighlightIndentGuides = function (highlight) { + this.renderer.setHighlightIndentGuides(highlight); + }; + Editor.prototype.getHighlightIndentGuides = function () { + return this.renderer.getHighlightIndentGuides(); + }; + Editor.prototype.setShowPrintMargin = function (showPrintMargin) { + this.renderer.setShowPrintMargin(showPrintMargin); + }; + Editor.prototype.getShowPrintMargin = function () { + return this.renderer.getShowPrintMargin(); + }; + Editor.prototype.setPrintMarginColumn = function (showPrintMargin) { + this.renderer.setPrintMarginColumn(showPrintMargin); + }; + Editor.prototype.getPrintMarginColumn = function () { + return this.renderer.getPrintMarginColumn(); + }; + Editor.prototype.setReadOnly = function (readOnly) { + this.setOption("readOnly", readOnly); + }; + Editor.prototype.getReadOnly = function () { + return this.getOption("readOnly"); + }; + Editor.prototype.setBehavioursEnabled = function (enabled) { + this.setOption("behavioursEnabled", enabled); + }; + Editor.prototype.getBehavioursEnabled = function () { + return this.getOption("behavioursEnabled"); + }; + Editor.prototype.setWrapBehavioursEnabled = function (enabled) { + this.setOption("wrapBehavioursEnabled", enabled); + }; + Editor.prototype.getWrapBehavioursEnabled = function () { + return this.getOption("wrapBehavioursEnabled"); + }; + Editor.prototype.setShowFoldWidgets = function (show) { + this.setOption("showFoldWidgets", show); + }; + Editor.prototype.getShowFoldWidgets = function () { + return this.getOption("showFoldWidgets"); + }; + Editor.prototype.setFadeFoldWidgets = function (fade) { + this.setOption("fadeFoldWidgets", fade); + }; + Editor.prototype.getFadeFoldWidgets = function () { + return this.getOption("fadeFoldWidgets"); + }; + Editor.prototype.remove = function (dir) { + if (this.selection.isEmpty()) { + if (dir == "left") + this.selection.selectLeft(); + else + this.selection.selectRight(); + } + var range = this.getSelectionRange(); + if (this.getBehavioursEnabled()) { + var session = this.session; + var state = session.getState(range.start.row); + var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); + if (range.end.column === 0) { + var text = session.getTextRange(range); + if (text[text.length - 1] == "\n") { + var line = session.getLine(range.end.row); + if (/^\s+$/.test(line)) { + range.end.column = line.length; } } } - var newValue = line + "\n\n"; - if (newValue != this.lastValue) { - this.text.value = this.lastValue = newValue; - this.lastSelectionStart = this.lastSelectionEnd = newValue.length; - } - } - if (this.afterContextMenu) { - this.lastSelectionStart = this.text.selectionStart; - this.lastSelectionEnd = this.text.selectionEnd; - } - if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd - != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization - ) { - try { - this.text.setSelectionRange(selectionStart, selectionEnd); - this.lastSelectionStart = selectionStart; - this.lastSelectionEnd = selectionEnd; - } - catch (e) { - } + if (new_range) + range = new_range; } - this.inComposition = false; + this.session.remove(range); + this.clearSelection(); }; - TextInput.prototype.setHost = function (newHost) { - this.host = newHost; + Editor.prototype.removeWordRight = function () { + if (this.selection.isEmpty()) + this.selection.selectWordRight(); + this.session.remove(this.getSelectionRange()); + this.clearSelection(); }; - TextInput.prototype.setNumberOfExtraLines = function (number) { - this.rowStart = Number.MAX_SAFE_INTEGER; - this.rowEnd = Number.MIN_SAFE_INTEGER; - if (number < 0) { - this.numberOfExtraLines = 0; - return; - } - this.numberOfExtraLines = number; + Editor.prototype.removeWordLeft = function () { + if (this.selection.isEmpty()) + this.selection.selectWordLeft(); + this.session.remove(this.getSelectionRange()); + this.clearSelection(); }; - TextInput.prototype.setAriaLabel = function () { - var ariaLabel = ""; - if (this.host.$textInputAriaLabel) { - ariaLabel += "".concat(this.host.$textInputAriaLabel, ", "); + Editor.prototype.removeToLineStart = function () { + if (this.selection.isEmpty()) + this.selection.selectLineStart(); + if (this.selection.isEmpty()) + this.selection.selectLeft(); + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + Editor.prototype.removeToLineEnd = function () { + if (this.selection.isEmpty()) + this.selection.selectLineEnd(); + var range = this.getSelectionRange(); + if (range.start.column == range.end.column && range.start.row == range.end.row) { + range.end.column = 0; + range.end.row++; } - if (this.host.session) { - var row = this.host.session.selection.cursor.row; - ariaLabel += nls("text-input.aria-label", "Cursor at row $0", [row + 1]); + this.session.remove(range); + this.clearSelection(); + }; + Editor.prototype.splitLine = function () { + if (!this.selection.isEmpty()) { + this.session.remove(this.getSelectionRange()); + this.clearSelection(); } - this.text.setAttribute("aria-label", ariaLabel); + var cursor = this.getCursorPosition(); + this.insert("\n"); + this.moveCursorToPosition(cursor); }; - TextInput.prototype.setAriaOptions = function (options) { - if (options.activeDescendant) { - this.text.setAttribute("aria-haspopup", "true"); - this.text.setAttribute("aria-autocomplete", options.inline ? "both" : "list"); - this.text.setAttribute("aria-activedescendant", options.activeDescendant); + Editor.prototype.setGhostText = function (text, position) { + this.renderer.setGhostText(text, position); + }; + Editor.prototype.removeGhostText = function () { + this.renderer.removeGhostText(); + }; + Editor.prototype.transposeLetters = function () { + if (!this.selection.isEmpty()) { + return; } - else { - this.text.setAttribute("aria-haspopup", "false"); - this.text.setAttribute("aria-autocomplete", "both"); - this.text.removeAttribute("aria-activedescendant"); + var cursor = this.getCursorPosition(); + var column = cursor.column; + if (column === 0) + return; + var line = this.session.getLine(cursor.row); + var swap, range; + if (column < line.length) { + swap = line.charAt(column) + line.charAt(column - 1); + range = new Range(cursor.row, column - 1, cursor.row, column + 1); } - if (options.role) { - this.text.setAttribute("role", options.role); + else { + swap = line.charAt(column - 1) + line.charAt(column - 2); + range = new Range(cursor.row, column - 2, cursor.row, column); } - if (options.setLabel) { - this.text.setAttribute("aria-roledescription", nls("text-input.aria-roledescription", "editor")); - this.setAriaLabel(); + this.session.replace(range, swap); + this.session.selection.moveToPosition(range.end); + }; + Editor.prototype.toLowerCase = function () { + var originalRange = this.getSelectionRange(); + if (this.selection.isEmpty()) { + this.selection.selectWord(); } + var range = this.getSelectionRange(); + var text = this.session.getTextRange(range); + this.session.replace(range, text.toLowerCase()); + this.selection.setSelectionRange(originalRange); }; - TextInput.prototype.focus = function () { - var _this = this; - this.setAriaOptions({ - setLabel: this.host.renderer.enableKeyboardAccessibility - }); - if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == "browser") - return this.text.focus({ preventScroll: true }); - var top = this.text.style.top; - this.text.style.position = "fixed"; - this.text.style.top = "0px"; - try { - var isTransformed = this.text.getBoundingClientRect().top != 0; + Editor.prototype.toUpperCase = function () { + var originalRange = this.getSelectionRange(); + if (this.selection.isEmpty()) { + this.selection.selectWord(); } - catch (e) { + var range = this.getSelectionRange(); + var text = this.session.getTextRange(range); + this.session.replace(range, text.toUpperCase()); + this.selection.setSelectionRange(originalRange); + }; + Editor.prototype.indent = function () { + var session = this.session; + var range = this.getSelectionRange(); + if (range.start.row < range.end.row) { + var rows = this.$getSelectedRows(); + session.indentRows(rows.first, rows.last, "\t"); return; } - var ancestors = []; - if (isTransformed) { - var t = this.text.parentElement; - while (t && t.nodeType == 1) { - ancestors.push(t); - t.setAttribute("ace_nocontext", "true"); - if (!t.parentElement && t.getRootNode) - t = t.getRootNode()["host"]; - else - t = t.parentElement; + else if (range.start.column < range.end.column) { + var text = session.getTextRange(range); + if (!/^\s+$/.test(text)) { + var rows = this.$getSelectedRows(); + session.indentRows(rows.first, rows.last, "\t"); + return; } } - this.text.focus({ preventScroll: true }); - if (isTransformed) { - ancestors.forEach(function (p) { - p.removeAttribute("ace_nocontext"); - }); + var line = session.getLine(range.start.row); + var position = range.start; + var size = session.getTabSize(); + var column = session.documentToScreenColumn(position.row, position.column); + if (this.session.getUseSoftTabs()) { + var count = (size - column % size); + var indentString = lang.stringRepeat(" ", count); } - setTimeout(function () { - _this.text.style.position = ""; - if (_this.text.style.top == "0px") - _this.text.style.top = top; - }, 0); - }; - TextInput.prototype.blur = function () { - this.text.blur(); - }; - TextInput.prototype.isFocused = function () { - return this.$isFocused; - }; - TextInput.prototype.setInputHandler = function (cb) { - this.inputHandler = cb; - }; - TextInput.prototype.getInputHandler = function () { - return this.inputHandler; - }; - TextInput.prototype.getElement = function () { - return this.text; - }; - TextInput.prototype.setCommandMode = function (value) { - this.commandMode = value; - this.text.readOnly = false; + else { + var count = column % size; + while (line[range.start.column - 1] == " " && count) { + range.start.column--; + count--; + } + this.selection.setSelectionRange(range); + indentString = "\t"; + } + return this.insert(indentString); }; - TextInput.prototype.setReadOnly = function (readOnly) { - if (!this.commandMode) - this.text.readOnly = readOnly; + Editor.prototype.blockIndent = function () { + var rows = this.$getSelectedRows(); + this.session.indentRows(rows.first, rows.last, "\t"); }; - TextInput.prototype.setCopyWithEmptySelection = function (value) { + Editor.prototype.blockOutdent = function () { + var selection = this.session.getSelection(); + this.session.outdentRows(selection.getRange()); }; - TextInput.prototype.onContextMenu = function (e) { - this.afterContextMenu = true; - this.resetSelection(); - this.host._emit("nativecontextmenu", { - target: this.host, - domEvent: e + Editor.prototype.sortLines = function () { + var rows = this.$getSelectedRows(); + var session = this.session; + var lines = []; + for (var i = rows.first; i <= rows.last; i++) + lines.push(session.getLine(i)); + lines.sort(function (a, b) { + if (a.toLowerCase() < b.toLowerCase()) + return -1; + if (a.toLowerCase() > b.toLowerCase()) + return 1; + return 0; }); - this.moveToMouse(e, true); + var deleteRange = new Range(0, 0, 0, 0); + for (var i = rows.first; i <= rows.last; i++) { + var line = session.getLine(i); + deleteRange.start.row = i; + deleteRange.end.row = i; + deleteRange.end.column = line.length; + session.replace(deleteRange, lines[i - rows.first]); + } }; - TextInput.prototype.moveToMouse = function (e, bringToFront) { - var _this = this; - if (!this.tempStyle) - this.tempStyle = this.text.style.cssText; - this.text.style.cssText = (bringToFront ? "z-index:100000;" : "") + (useragent.isIE ? "opacity:0.1;" : "") - + "text-indent: -" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth - * 0.5 + "px;"; - var rect = this.host.container.getBoundingClientRect(); - var style = dom.computedStyle(this.host.container); - var top = rect.top + (parseInt(style.borderTopWidth) || 0); - var left = rect.left + (parseInt(style.borderLeftWidth) || 0); - var maxTop = rect.bottom - top - this.text.clientHeight - 2; - var move = function (e) { - dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop)); - }; - move(e); - if (e.type != "mousedown") - return; - this.host.renderer.$isMousePressed = true; - clearTimeout(this.closeTimeout); - if (useragent.isWin) - event.capture(this.host.container, move, this.onContextMenuClose.bind(this)); + Editor.prototype.toggleCommentLines = function () { + var state = this.session.getState(this.getCursorPosition().row); + var rows = this.$getSelectedRows(); + this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); }; - TextInput.prototype.destroy = function () { - if (this.text.parentElement) - this.text.parentElement.removeChild(this.text); + Editor.prototype.toggleBlockComment = function () { + var cursor = this.getCursorPosition(); + var state = this.session.getState(cursor.row); + var range = this.getSelectionRange(); + this.session.getMode().toggleBlockComment(state, this.session, range, cursor); }; - return TextInput; -}()); -exports.TextInput = TextInput; -exports.$setUserAgentForTests = function (_isMobile, _isIOS) { - isMobile = _isMobile; - isIOS = _isIOS; -}; - -}); - -ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"], function(require, exports, module){"use strict"; -var useragent = require("../lib/useragent"); -var DRAG_OFFSET = 0; // pixels -var SCROLL_COOLDOWN_T = 550; // milliseconds -var DefaultHandlers = /** @class */ (function () { - function DefaultHandlers(mouseHandler) { - mouseHandler.$clickSelection = null; - var editor = mouseHandler.editor; - editor.setDefaultHandler("mousedown", this.onMouseDown.bind(mouseHandler)); - editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(mouseHandler)); - editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler)); - editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler)); - editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler)); - var exports = ["select", "startSelect", "selectEnd", "selectAllEnd", "selectByWordsEnd", - "selectByLinesEnd", "dragWait", "dragWaitEnd", "focusWait"]; - exports.forEach(function (x) { - mouseHandler[x] = this[x]; - }, this); - mouseHandler["selectByLines"] = this.extendSelectionBy.bind(mouseHandler, "getLineRange"); - mouseHandler["selectByWords"] = this.extendSelectionBy.bind(mouseHandler, "getWordRange"); - } - DefaultHandlers.prototype.onMouseDown = function (ev) { - var inSelection = ev.inSelection(); - var pos = ev.getDocumentPosition(); - this.mousedownEvent = ev; - var editor = this.editor; - var button = ev.getButton(); - if (button !== 0) { - var selectionRange = editor.getSelectionRange(); - var selectionEmpty = selectionRange.isEmpty(); - if (selectionEmpty || button == 1) - editor.selection.moveToPosition(pos); - if (button == 2) { - editor.textInput.onContextMenu(ev.domEvent); - if (!useragent.isMozilla) - ev.preventDefault(); + Editor.prototype.getNumberAt = function (row, column) { + var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g; + _numberRx.lastIndex = 0; + var s = this.session.getLine(row); + while (_numberRx.lastIndex < column) { + var m = _numberRx.exec(s); + if (m.index <= column && m.index + m[0].length >= column) { + var number = { + value: m[0], + start: m.index, + end: m.index + m[0].length + }; + return number; } - return; } - this.mousedownEvent.time = Date.now(); - if (inSelection && !editor.isFocused()) { - editor.focus(); - if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) { - this.setState("focusWait"); - this.captureMouse(ev); - return; + return null; + }; + Editor.prototype.modifyNumber = function (amount) { + var row = this.selection.getCursor().row; + var column = this.selection.getCursor().column; + var charRange = new Range(row, column - 1, row, column); + var c = this.session.getTextRange(charRange); + if (!isNaN(parseFloat(c)) && isFinite(c)) { + var nr = this.getNumberAt(row, column); + if (nr) { + var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; + var decimals = nr.start + nr.value.length - fp; + var t = parseFloat(nr.value); + t *= Math.pow(10, decimals); + if (fp !== nr.end && column < fp) { + amount *= Math.pow(10, nr.end - column - 1); + } + else { + amount *= Math.pow(10, nr.end - column); + } + t += amount; + t /= Math.pow(10, decimals); + var nnr = t.toFixed(decimals); + var replaceRange = new Range(row, nr.start, row, nr.end); + this.session.replace(replaceRange, nnr); + this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length)); } } - this.captureMouse(ev); - this.startSelect(pos, ev.domEvent._clicks > 1); - return ev.preventDefault(); - }; - DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) { - pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); - var editor = this.editor; - if (!this.mousedownEvent) - return; - if (this.mousedownEvent.getShiftKey()) - editor.selection.selectToPosition(pos); - else if (!waitForClickSelection) - editor.selection.moveToPosition(pos); - if (!waitForClickSelection) - this.select(); - editor.setStyle("ace_selecting"); - this.setState("select"); + else { + this.toggleWord(); + } }; - DefaultHandlers.prototype.select = function () { - var anchor, editor = this.editor; - var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); - if (this.$clickSelection) { - var cmp = this.$clickSelection.comparePoint(cursor); - if (cmp == -1) { - anchor = this.$clickSelection.end; - } - else if (cmp == 1) { - anchor = this.$clickSelection.start; - } - else { - var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); - cursor = orientedRange.cursor; - anchor = orientedRange.anchor; + Editor.prototype.toggleWord = function () { + var row = this.selection.getCursor().row; + var column = this.selection.getCursor().column; + this.selection.selectWord(); + var currentState = this.getSelectedText(); + var currWordStart = this.selection.getWordRange().start.column; + var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\s/); + var delta = column - currWordStart - 1; + if (delta < 0) + delta = 0; + var curLength = 0, itLength = 0; + var that = this; + if (currentState.match(/[A-Za-z0-9_]+/)) { + wordParts.forEach(function (item, i) { + itLength = curLength + item.length; + if (delta >= curLength && delta <= itLength) { + currentState = item; + that.selection.clearSelection(); + that.moveCursorTo(row, curLength + currWordStart); + that.selection.selectTo(row, itLength + currWordStart); + } + curLength = itLength; + }); + } + var wordPairs = this.$toggleWordPairs; + var reg; + for (var i = 0; i < wordPairs.length; i++) { + var item = wordPairs[i]; + for (var j = 0; j <= 1; j++) { + var negate = +!j; + var firstCondition = currentState.match(new RegExp('^\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\s?$', 'i')); + if (firstCondition) { + var secondCondition = currentState.match(new RegExp('([_]|^|\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\s)', 'g')); + if (secondCondition) { + reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) { + var res = item[negate]; + if (result.toUpperCase() == result) { + res = res.toUpperCase(); + } + else if (result.charAt(0).toUpperCase() == result.charAt(0)) { + res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1); + } + return res; + }); + this.insert(reg); + reg = ""; + } + } } - editor.selection.setSelectionAnchor(anchor.row, anchor.column); } - editor.selection.selectToPosition(cursor); - editor.renderer.scrollCursorIntoView(); }; - DefaultHandlers.prototype.extendSelectionBy = function (unitName) { - var anchor, editor = this.editor; - var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); - var range = editor.selection[unitName](cursor.row, cursor.column); - if (this.$clickSelection) { - var cmpStart = this.$clickSelection.comparePoint(range.start); - var cmpEnd = this.$clickSelection.comparePoint(range.end); - if (cmpStart == -1 && cmpEnd <= 0) { - anchor = this.$clickSelection.end; - if (range.end.row != cursor.row || range.end.column != cursor.column) - cursor = range.start; - } - else if (cmpEnd == 1 && cmpStart >= 0) { - anchor = this.$clickSelection.start; - if (range.start.row != cursor.row || range.start.column != cursor.column) - cursor = range.end; - } - else if (cmpStart == -1 && cmpEnd == 1) { - cursor = range.end; - anchor = range.start; + Editor.prototype.findLinkAt = function (row, column) { + var e_1, _a; + var line = this.session.getLine(row); + var wordParts = line.split(/((?:https?|ftp):\/\/[\S]+)/); + var columnPosition = column; + if (columnPosition < 0) + columnPosition = 0; + var previousPosition = 0, currentPosition = 0, match; + try { + for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) { + var item = wordParts_1_1.value; + currentPosition = previousPosition + item.length; + if (columnPosition >= previousPosition && columnPosition <= currentPosition) { + if (item.match(/((?:https?|ftp):\/\/[\S]+)/)) { + match = item.replace(/[\s:.,'";}\]]+$/, ""); + break; + } + } + previousPosition = currentPosition; } - else { - var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); - cursor = orientedRange.cursor; - anchor = orientedRange.anchor; + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1); } - editor.selection.setSelectionAnchor(anchor.row, anchor.column); + finally { if (e_1) throw e_1.error; } } - editor.selection.selectToPosition(cursor); - editor.renderer.scrollCursorIntoView(); + return match; }; - DefaultHandlers.prototype.selectByLinesEnd = function () { - this.$clickSelection = null; - this.editor.unsetStyle("ace_selecting"); + Editor.prototype.openLink = function () { + var cursor = this.selection.getCursor(); + var url = this.findLinkAt(cursor.row, cursor.column); + if (url) + window.open(url, '_blank'); + return url != null; }; - DefaultHandlers.prototype.focusWait = function () { - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); - var time = Date.now(); - if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout) - this.startSelect(this.mousedownEvent.getDocumentPosition()); + Editor.prototype.removeLines = function () { + var rows = this.$getSelectedRows(); + this.session.removeFullLines(rows.first, rows.last); + this.clearSelection(); }; - DefaultHandlers.prototype.onDoubleClick = function (ev) { - var pos = ev.getDocumentPosition(); - var editor = this.editor; - var session = editor.session; - var range = session.getBracketRange(pos); - if (range) { - if (range.isEmpty()) { - range.start.column--; - range.end.column++; - } - this.setState("select"); + Editor.prototype.duplicateSelection = function () { + var sel = this.selection; + var doc = this.session; + var range = sel.getRange(); + var reverse = sel.isBackwards(); + if (range.isEmpty()) { + var row = range.start.row; + doc.duplicateLines(row, row); } else { - range = editor.selection.getWordRange(pos.row, pos.column); - this.setState("selectByWords"); + var point = reverse ? range.start : range.end; + var endPoint = doc.insert(point, doc.getTextRange(range)); + range.start = point; + range.end = endPoint; + sel.setSelectionRange(range, reverse); } - this.$clickSelection = range; - this.select(); }; - DefaultHandlers.prototype.onTripleClick = function (ev) { - var pos = ev.getDocumentPosition(); - var editor = this.editor; - this.setState("selectByLines"); - var range = editor.getSelectionRange(); - if (range.isMultiLine() && range.contains(pos.row, pos.column)) { - this.$clickSelection = editor.selection.getLineRange(range.start.row); - this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end; + Editor.prototype.moveLinesDown = function () { + this.$moveLines(1, false); + }; + Editor.prototype.moveLinesUp = function () { + this.$moveLines(-1, false); + }; + Editor.prototype.moveText = function (range, toPosition, copy) { + return this.session.moveText(range, toPosition, copy); + }; + Editor.prototype.copyLinesUp = function () { + this.$moveLines(-1, true); + }; + Editor.prototype.copyLinesDown = function () { + this.$moveLines(1, true); + }; + Editor.prototype.$moveLines = function (dir, copy) { + var rows, moved; + var selection = this.selection; + if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { + var range = selection.toOrientedRange(); + rows = this.$getSelectedRows(range); + moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir); + if (copy && dir == -1) + moved = 0; + range.moveBy(moved, 0); + selection.fromOrientedRange(range); } else { - this.$clickSelection = editor.selection.getLineRange(pos.row); + var ranges = selection.rangeList.ranges; + selection.rangeList.detach(this.session); + this.inVirtualSelectionMode = true; + var diff = 0; + var totalDiff = 0; + var l = ranges.length; + for (var i = 0; i < l; i++) { + var rangeIndex = i; + ranges[i].moveBy(diff, 0); + rows = this.$getSelectedRows(ranges[i]); + var first = rows.first; + var last = rows.last; + while (++i < l) { + if (totalDiff) + ranges[i].moveBy(totalDiff, 0); + var subRows = this.$getSelectedRows(ranges[i]); + if (copy && subRows.first != last) + break; + else if (!copy && subRows.first > last + 1) + break; + last = subRows.last; + } + i--; + diff = this.session.$moveLines(first, last, copy ? 0 : dir); + if (copy && dir == -1) + rangeIndex = i + 1; + while (rangeIndex <= i) { + ranges[rangeIndex].moveBy(diff, 0); + rangeIndex++; + } + if (!copy) + diff = 0; + totalDiff += diff; + } + selection.fromOrientedRange(selection.ranges[0]); + selection.rangeList.attach(this.session); + this.inVirtualSelectionMode = false; } - this.select(); }; - DefaultHandlers.prototype.onQuadClick = function (ev) { - var editor = this.editor; - editor.selectAll(); - this.$clickSelection = editor.getSelectionRange(); - this.setState("selectAll"); + Editor.prototype.$getSelectedRows = function (range) { + range = (range || this.getSelectionRange()).collapseRows(); + return { + first: this.session.getRowFoldStart(range.start.row), + last: this.session.getRowFoldEnd(range.end.row) + }; }; - DefaultHandlers.prototype.onMouseWheel = function (ev) { - if (ev.getAccelKey()) - return; - if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) { - ev.wheelX = ev.wheelY; - ev.wheelY = 0; - } - var editor = this.editor; - if (!this.$lastScroll) - this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 }; - var prevScroll = this.$lastScroll; - var t = ev.domEvent.timeStamp; - var dt = t - prevScroll.t; - var vx = dt ? ev.wheelX / dt : prevScroll.vx; - var vy = dt ? ev.wheelY / dt : prevScroll.vy; - if (dt < SCROLL_COOLDOWN_T) { - vx = (vx + prevScroll.vx) / 2; - vy = (vy + prevScroll.vy) / 2; - } - var direction = Math.abs(vx / vy); - var canScroll = false; - if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0)) - canScroll = true; - if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed)) - canScroll = true; - if (canScroll) { - prevScroll.allowed = t; - } - else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) { - var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx) - && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy); - if (isSlower) { - canScroll = true; - prevScroll.allowed = t; - } - else { - prevScroll.allowed = 0; - } + Editor.prototype.onCompositionStart = function (compositionState) { + this.renderer.showComposition(compositionState); + }; + Editor.prototype.onCompositionUpdate = function (text) { + this.renderer.setCompositionText(text); + }; + Editor.prototype.onCompositionEnd = function () { + this.renderer.hideComposition(); + }; + Editor.prototype.getFirstVisibleRow = function () { + return this.renderer.getFirstVisibleRow(); + }; + Editor.prototype.getLastVisibleRow = function () { + return this.renderer.getLastVisibleRow(); + }; + Editor.prototype.isRowVisible = function (row) { + return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); + }; + Editor.prototype.isRowFullyVisible = function (row) { + return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); + }; + Editor.prototype.$getVisibleRowCount = function () { + return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; + }; + Editor.prototype.$moveByPage = function (dir, select) { + var renderer = this.renderer; + var config = this.renderer.layerConfig; + var rows = dir * Math.floor(config.height / config.lineHeight); + if (select === true) { + this.selection.$moveSelection(function () { + this.moveCursorBy(rows, 0); + }); } - prevScroll.t = t; - prevScroll.vx = vx; - prevScroll.vy = vy; - if (canScroll) { - editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); - return ev.stop(); + else if (select === false) { + this.selection.moveCursorBy(rows, 0); + this.selection.clearSelection(); } + var scrollTop = renderer.scrollTop; + renderer.scrollBy(0, rows * config.lineHeight); + if (select != null) + renderer.scrollCursorIntoView(null, 0.5); + renderer.animateScrolling(scrollTop); }; - return DefaultHandlers; -}()); -DefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd; -DefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd; -DefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd; -exports.DefaultHandlers = DefaultHandlers; -function calcDistance(ax, ay, bx, by) { - return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); -} -function calcRangeOrientation(range, cursor) { - if (range.start.row == range.end.row) - var cmp = 2 * cursor.column - range.start.column - range.end.column; - else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) - var cmp = cursor.column - 4; - else - var cmp = 2 * cursor.row - range.start.row - range.end.row; - if (cmp < 0) - return { cursor: range.start, anchor: range.end }; - else - return { cursor: range.end, anchor: range.start }; -} - -}); - -ace.define("ace/lib/scroll",["require","exports","module"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) { - event.stopPropagation(); - var target = event.currentTarget; - var contentOverflows = target.scrollHeight > target.clientHeight; - if (!contentOverflows) { - event.preventDefault(); - } -}; - -}); - -ace.define("ace/tooltip",["require","exports","module","ace/lib/dom","ace/lib/event","ace/range","ace/lib/scroll"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); + Editor.prototype.selectPageDown = function () { + this.$moveByPage(1, true); }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + Editor.prototype.selectPageUp = function () { + this.$moveByPage(-1, true); }; -})(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } + Editor.prototype.gotoPageDown = function () { + this.$moveByPage(1, false); }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var dom = require("./lib/dom"); -var event = require("./lib/event"); -var Range = require("./range").Range; -var preventParentScroll = require("./lib/scroll").preventParentScroll; -var CLASSNAME = "ace_tooltip"; -var Tooltip = /** @class */ (function () { - function Tooltip(parentNode) { - this.isOpen = false; - this.$element = null; - this.$parentNode = parentNode; - } - Tooltip.prototype.$init = function () { - this.$element = dom.createElement("div"); - this.$element.className = CLASSNAME; - this.$element.style.display = "none"; - this.$parentNode.appendChild(this.$element); - return this.$element; + Editor.prototype.gotoPageUp = function () { + this.$moveByPage(-1, false); }; - Tooltip.prototype.getElement = function () { - return this.$element || this.$init(); + Editor.prototype.scrollPageDown = function () { + this.$moveByPage(1); }; - Tooltip.prototype.setText = function (text) { - this.getElement().textContent = text; + Editor.prototype.scrollPageUp = function () { + this.$moveByPage(-1); }; - Tooltip.prototype.setHtml = function (html) { - this.getElement().innerHTML = html; + Editor.prototype.scrollToRow = function (row) { + this.renderer.scrollToRow(row); }; - Tooltip.prototype.setPosition = function (x, y) { - this.getElement().style.left = x + "px"; - this.getElement().style.top = y + "px"; + Editor.prototype.scrollToLine = function (line, center, animate, callback) { + this.renderer.scrollToLine(line, center, animate, callback); }; - Tooltip.prototype.setClassName = function (className) { - dom.addCssClass(this.getElement(), className); + Editor.prototype.centerSelection = function () { + var range = this.getSelectionRange(); + var pos = { + row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), + column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) + }; + this.renderer.alignCursor(pos, 0.5); }; - Tooltip.prototype.setTheme = function (theme) { - this.$element.className = CLASSNAME + " " + - (theme.isDark ? "ace_dark " : "") + (theme.cssClass || ""); + Editor.prototype.getCursorPosition = function () { + return this.selection.getCursor(); }; - Tooltip.prototype.show = function (text, x, y) { - if (text != null) - this.setText(text); - if (x != null && y != null) - this.setPosition(x, y); - if (!this.isOpen) { - this.getElement().style.display = "block"; - this.isOpen = true; - } + Editor.prototype.getCursorPositionScreen = function () { + return this.session.documentToScreenPosition(this.getCursorPosition()); }; - Tooltip.prototype.hide = function (e) { - if (this.isOpen) { - this.getElement().style.display = "none"; - this.getElement().className = CLASSNAME; - this.isOpen = false; - } + Editor.prototype.getSelectionRange = function () { + return this.selection.getRange(); }; - Tooltip.prototype.getHeight = function () { - return this.getElement().offsetHeight; + Editor.prototype.selectAll = function () { + this.selection.selectAll(); }; - Tooltip.prototype.getWidth = function () { - return this.getElement().offsetWidth; + Editor.prototype.clearSelection = function () { + this.selection.clearSelection(); }; - Tooltip.prototype.destroy = function () { - this.isOpen = false; - if (this.$element && this.$element.parentNode) { - this.$element.parentNode.removeChild(this.$element); - } + Editor.prototype.moveCursorTo = function (row, column) { + this.selection.moveCursorTo(row, column); }; - return Tooltip; -}()); -var PopupManager = /** @class */ (function () { - function PopupManager() { - this.popups = []; - } - PopupManager.prototype.addPopup = function (popup) { - this.popups.push(popup); - this.updatePopups(); + Editor.prototype.moveCursorToPosition = function (pos) { + this.selection.moveCursorToPosition(pos); }; - PopupManager.prototype.removePopup = function (popup) { - var index = this.popups.indexOf(popup); - if (index !== -1) { - this.popups.splice(index, 1); - this.updatePopups(); + Editor.prototype.jumpToMatching = function (select, expand) { + var cursor = this.getCursorPosition(); + var iterator = new TokenIterator(this.session, cursor.row, cursor.column); + var prevToken = iterator.getCurrentToken(); + var tokenCount = 0; + if (prevToken && prevToken.type.indexOf('tag-name') !== -1) { + prevToken = iterator.stepBackward(); } - }; - PopupManager.prototype.updatePopups = function () { - var e_1, _a, e_2, _b; - this.popups.sort(function (a, b) { return b.priority - a.priority; }); - var visiblepopups = []; - try { - for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) { - var popup = _d.value; - var shouldDisplay = true; - try { - for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) { - var visiblePopup = visiblepopups_1_1.value; - if (this.doPopupsOverlap(visiblePopup, popup)) { - shouldDisplay = false; + var token = prevToken || iterator.stepForward(); + if (!token) + return; + var matchType; + var found = false; + var depth = {}; + var i = cursor.column - token.start; + var bracketType; + var brackets = { + ")": "(", + "(": "(", + "]": "[", + "[": "[", + "{": "{", + "}": "{" + }; + do { + if (token.value.match(/[{}()\[\]]/g)) { + for (; i < token.value.length && !found; i++) { + if (!brackets[token.value[i]]) { + continue; + } + bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen"); + if (isNaN(depth[bracketType])) { + depth[bracketType] = 0; + } + switch (token.value[i]) { + case '(': + case '[': + case '{': + depth[bracketType]++; break; - } + case ')': + case ']': + case '}': + depth[bracketType]--; + if (depth[bracketType] === -1) { + matchType = 'bracket'; + found = true; + } + break; + } + } + } + else if (token.type.indexOf('tag-name') !== -1) { + if (isNaN(depth[token.value])) { + depth[token.value] = 0; + } + if (prevToken.value === '<' && tokenCount > 1) { + depth[token.value]++; + } + else if (prevToken.value === ' rectB.left && rectA.top < rectB.bottom && rectA.bottom - > rectB.top); + Editor.prototype.gotoLine = function (lineNumber, column, animate) { + this.selection.clearSelection(); + this.session.unfold({ row: lineNumber - 1, column: column || 0 }); + this.exitMultiSelectMode && this.exitMultiSelectMode(); + this.moveCursorTo(lineNumber - 1, column || 0); + if (!this.isRowFullyVisible(lineNumber - 1)) + this.scrollToLine(lineNumber - 1, true, animate); }; - return PopupManager; -}()); -var popupManager = new PopupManager(); -exports.popupManager = popupManager; -exports.Tooltip = Tooltip; -var HoverTooltip = /** @class */ (function (_super) { - __extends(HoverTooltip, _super); - function HoverTooltip(parentNode) { - if (parentNode === void 0) { parentNode = document.body; } - var _this = _super.call(this, parentNode) || this; - _this.timeout = undefined; - _this.lastT = 0; - _this.idleTime = 350; - _this.lastEvent = undefined; - _this.onMouseOut = _this.onMouseOut.bind(_this); - _this.onMouseMove = _this.onMouseMove.bind(_this); - _this.waitForHover = _this.waitForHover.bind(_this); - _this.hide = _this.hide.bind(_this); - var el = _this.getElement(); - el.style.whiteSpace = "pre-wrap"; - el.style.pointerEvents = "auto"; - el.addEventListener("mouseout", _this.onMouseOut); - el.tabIndex = -1; - el.addEventListener("blur", function () { - if (!el.contains(document.activeElement)) - this.hide(); - }.bind(_this)); - el.addEventListener("wheel", preventParentScroll); - return _this; - } - HoverTooltip.prototype.addToEditor = function (editor) { - editor.on("mousemove", this.onMouseMove); - editor.on("mousedown", this.hide); - editor.renderer.getMouseEventTarget().addEventListener("mouseout", this.onMouseOut, true); + Editor.prototype.navigateTo = function (row, column) { + this.selection.moveTo(row, column); }; - HoverTooltip.prototype.removeFromEditor = function (editor) { - editor.off("mousemove", this.onMouseMove); - editor.off("mousedown", this.hide); - editor.renderer.getMouseEventTarget().removeEventListener("mouseout", this.onMouseOut, true); - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; + Editor.prototype.navigateUp = function (times) { + if (this.selection.isMultiLine() && !this.selection.isBackwards()) { + var selectionStart = this.selection.anchor.getPosition(); + return this.moveCursorToPosition(selectionStart); } + this.selection.clearSelection(); + this.selection.moveCursorBy(-times || -1, 0); }; - HoverTooltip.prototype.onMouseMove = function (e, editor) { - this.lastEvent = e; - this.lastT = Date.now(); - var isMousePressed = editor.$mouseHandler.isMousePressed; - if (this.isOpen) { - var pos = this.lastEvent && this.lastEvent.getDocumentPosition(); - if (!this.range - || !this.range.contains(pos.row, pos.column) - || isMousePressed - || this.isOutsideOfText(this.lastEvent)) { - this.hide(); - } + Editor.prototype.navigateDown = function (times) { + if (this.selection.isMultiLine() && this.selection.isBackwards()) { + var selectionEnd = this.selection.anchor.getPosition(); + return this.moveCursorToPosition(selectionEnd); } - if (this.timeout || isMousePressed) - return; - this.lastEvent = e; - this.timeout = setTimeout(this.waitForHover, this.idleTime); + this.selection.clearSelection(); + this.selection.moveCursorBy(times || 1, 0); }; - HoverTooltip.prototype.waitForHover = function () { - if (this.timeout) - clearTimeout(this.timeout); - var dt = Date.now() - this.lastT; - if (this.idleTime - dt > 10) { - this.timeout = setTimeout(this.waitForHover, this.idleTime - dt); - return; - } - this.timeout = null; - if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) { - this.$gatherData(this.lastEvent, this.lastEvent.editor); + Editor.prototype.navigateLeft = function (times) { + if (!this.selection.isEmpty()) { + var selectionStart = this.getSelectionRange().start; + this.moveCursorToPosition(selectionStart); } - }; - HoverTooltip.prototype.isOutsideOfText = function (e) { - var editor = e.editor; - var docPos = e.getDocumentPosition(); - var line = editor.session.getLine(docPos.row); - if (docPos.column == line.length) { - var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY); - var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column); - if (clippedPos.column != screenPos.column - || clippedPos.row != screenPos.row) { - return true; + else { + times = times || 1; + while (times--) { + this.selection.moveCursorLeft(); } } - return false; - }; - HoverTooltip.prototype.setDataProvider = function (value) { - this.$gatherData = value; - }; - HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) { - var MARGIN = 10; - if (startingEvent && startingEvent != this.lastEvent) - return; - if (this.isOpen && document.activeElement == this.getElement()) - return; - var renderer = editor.renderer; - if (!this.isOpen) { - popupManager.addPopup(this); - this.$registerCloseEvents(); - this.setTheme(renderer.theme); - } - this.isOpen = true; - this.addMarker(range, editor.session); - this.range = Range.fromPoints(range.start, range.end); - var position = renderer.textToScreenCoordinates(range.start.row, range.start.column); - var rect = renderer.scroller.getBoundingClientRect(); - if (position.pageX < rect.left) - position.pageX = rect.left; - var element = this.getElement(); - element.innerHTML = ""; - element.appendChild(domNode); - element.style.maxHeight = ""; - element.style.display = "block"; - var labelHeight = element.clientHeight; - var labelWidth = element.clientWidth; - var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight; - var isAbove = true; - if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) { - isAbove = false; - } - element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + "px"; - element.style.top = isAbove ? "" : position.pageY + renderer.lineHeight + "px"; - element.style.bottom = isAbove ? window.innerHeight - position.pageY + "px" : ""; - element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + "px"; + this.clearSelection(); }; - HoverTooltip.prototype.addMarker = function (range, session) { - if (this.marker) { - this.$markerSession.removeMarker(this.marker); + Editor.prototype.navigateRight = function (times) { + if (!this.selection.isEmpty()) { + var selectionEnd = this.getSelectionRange().end; + this.moveCursorToPosition(selectionEnd); } - this.$markerSession = session; - this.marker = session && session.addMarker(range, "ace_highlight-marker", "text"); - }; - HoverTooltip.prototype.hide = function (e) { - if (!e && document.activeElement == this.getElement()) - return; - if (e && e.target && (e.type != "keydown" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target)) - return; - this.lastEvent = null; - if (this.timeout) - clearTimeout(this.timeout); - this.timeout = null; - this.addMarker(null); - if (this.isOpen) { - this.$removeCloseEvents(); - this.getElement().style.display = "none"; - this.isOpen = false; - popupManager.removePopup(this); + else { + times = times || 1; + while (times--) { + this.selection.moveCursorRight(); + } } + this.clearSelection(); }; - HoverTooltip.prototype.$registerCloseEvents = function () { - window.addEventListener("keydown", this.hide, true); - window.addEventListener("wheel", this.hide, true); - window.addEventListener("mousedown", this.hide, true); - }; - HoverTooltip.prototype.$removeCloseEvents = function () { - window.removeEventListener("keydown", this.hide, true); - window.removeEventListener("wheel", this.hide, true); - window.removeEventListener("mousedown", this.hide, true); - }; - HoverTooltip.prototype.onMouseOut = function (e) { - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.lastEvent = null; - if (!this.isOpen) - return; - if (!e.relatedTarget || this.getElement().contains(e.relatedTarget)) - return; - if (e && e.currentTarget.contains(e.relatedTarget)) - return; - if (!e.relatedTarget.classList.contains("ace_content")) - this.hide(); + Editor.prototype.navigateLineStart = function () { + this.selection.moveCursorLineStart(); + this.clearSelection(); }; - return HoverTooltip; -}(Tooltip)); -exports.HoverTooltip = HoverTooltip; - -}); - -ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/tooltip","ace/config"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); + Editor.prototype.navigateLineEnd = function () { + this.selection.moveCursorLineEnd(); + this.clearSelection(); }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + Editor.prototype.navigateFileEnd = function () { + this.selection.moveCursorFileEnd(); + this.clearSelection(); }; -})(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } + Editor.prototype.navigateFileStart = function () { + this.selection.moveCursorFileStart(); + this.clearSelection(); }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var dom = require("../lib/dom"); -var event = require("../lib/event"); -var Tooltip = require("../tooltip").Tooltip; -var nls = require("../config").nls; -var GUTTER_TOOLTIP_LEFT_OFFSET = 5; -var GUTTER_TOOLTIP_TOP_OFFSET = 3; -exports.GUTTER_TOOLTIP_LEFT_OFFSET = GUTTER_TOOLTIP_LEFT_OFFSET; -exports.GUTTER_TOOLTIP_TOP_OFFSET = GUTTER_TOOLTIP_TOP_OFFSET; -function GutterHandler(mouseHandler) { - var editor = mouseHandler.editor; - var gutter = editor.renderer.$gutterLayer; - var tooltip = new GutterTooltip(editor, true); - mouseHandler.editor.setDefaultHandler("guttermousedown", function (e) { - if (!editor.isFocused() || e.getButton() != 0) - return; - var gutterRegion = gutter.getRegion(e); - if (gutterRegion == "foldWidgets") - return; - var row = e.getDocumentPosition().row; - var selection = editor.session.selection; - if (e.getShiftKey()) - selection.selectTo(row, 0); - else { - if (e.domEvent.detail == 2) { - editor.selectAll(); - return e.preventDefault(); - } - mouseHandler.$clickSelection = editor.selection.getLineRange(row); - } - mouseHandler.setState("selectByLines"); - mouseHandler.captureMouse(e); - return e.preventDefault(); - }); - var tooltipTimeout, mouseEvent; - function showTooltip() { - var row = mouseEvent.getDocumentPosition().row; - var maxRow = editor.session.getLength(); - if (row == maxRow) { - var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; - var pos = mouseEvent.$pos; - if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) - return hideTooltip(); - } - tooltip.showTooltip(row); - if (!tooltip.isOpen) - return; - editor.on("mousewheel", hideTooltip); - editor.on("changeSession", hideTooltip); - window.addEventListener("keydown", hideTooltip, true); - if (mouseHandler.$tooltipFollowsMouse) { - moveTooltip(mouseEvent); - } - else { - var gutterRow = mouseEvent.getGutterRow(); - var gutterCell = gutter.$lines.get(gutterRow); - if (gutterCell) { - var gutterElement = gutterCell.element.querySelector(".ace_gutter_annotation"); - var rect = gutterElement.getBoundingClientRect(); - var style = tooltip.getElement().style; - style.left = (rect.right - GUTTER_TOOLTIP_LEFT_OFFSET) + "px"; - style.top = (rect.bottom - GUTTER_TOOLTIP_TOP_OFFSET) + "px"; - } - else { - moveTooltip(mouseEvent); - } - } - } - function hideTooltip(e) { - if (e && e.type === "keydown" && (e.ctrlKey || e.metaKey)) - return; - if (e && e.type === "mouseout" && (!e.relatedTarget || tooltip.getElement().contains(e.relatedTarget))) - return; - if (tooltipTimeout) - tooltipTimeout = clearTimeout(tooltipTimeout); - if (tooltip.isOpen) { - tooltip.hideTooltip(); - editor.off("mousewheel", hideTooltip); - editor.off("changeSession", hideTooltip); - window.removeEventListener("keydown", hideTooltip, true); - } - } - function moveTooltip(e) { - tooltip.setPosition(e.x, e.y); - } - mouseHandler.editor.setDefaultHandler("guttermousemove", function (e) { - var target = e.domEvent.target || e.domEvent.srcElement; - if (dom.hasCssClass(target, "ace_fold-widget") || dom.hasCssClass(target, "ace_custom-widget")) - return hideTooltip(); - if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse) - moveTooltip(e); - mouseEvent = e; - if (tooltipTimeout) - return; - tooltipTimeout = setTimeout(function () { - tooltipTimeout = null; - if (mouseEvent && !mouseHandler.isMousePressed) - showTooltip(); - }, 50); - }); - event.addListener(editor.renderer.$gutter, "mouseout", function (e) { - mouseEvent = null; - if (!tooltip.isOpen) - return; - tooltipTimeout = setTimeout(function () { - tooltipTimeout = null; - hideTooltip(e); - }, 50); - }, editor); -} -exports.GutterHandler = GutterHandler; -var GutterTooltip = /** @class */ (function (_super) { - __extends(GutterTooltip, _super); - function GutterTooltip(editor, isHover) { - if (isHover === void 0) { isHover = false; } - var _this = _super.call(this, editor.container) || this; - _this.id = "gt" + (++GutterTooltip.$uid); - _this.editor = editor; - _this.visibleTooltipRow; - var el = _this.getElement(); - el.setAttribute("role", "tooltip"); - el.setAttribute("id", _this.id); - el.style.pointerEvents = "auto"; - if (isHover) { - _this.onMouseOut = _this.onMouseOut.bind(_this); - el.addEventListener("mouseout", _this.onMouseOut); - } - return _this; - } - GutterTooltip.prototype.onMouseOut = function (e) { - if (!this.isOpen) - return; - if (!e.relatedTarget || this.getElement().contains(e.relatedTarget)) - return; - if (e && e.currentTarget.contains(e.relatedTarget)) - return; - this.hideTooltip(); + Editor.prototype.navigateWordRight = function () { + this.selection.moveCursorWordRight(); + this.clearSelection(); }; - GutterTooltip.prototype.setPosition = function (x, y) { - var windowWidth = window.innerWidth || document.documentElement.clientWidth; - var windowHeight = window.innerHeight || document.documentElement.clientHeight; - var width = this.getWidth(); - var height = this.getHeight(); - x += 15; - y += 15; - if (x + width > windowWidth) { - x -= (x + width) - windowWidth; - } - if (y + height > windowHeight) { - y -= 20 + height; - } - Tooltip.prototype.setPosition.call(this, x, y); + Editor.prototype.navigateWordLeft = function () { + this.selection.moveCursorWordLeft(); + this.clearSelection(); }; - Object.defineProperty(GutterTooltip, "annotationLabels", { - get: function () { - return { - error: { - singular: nls("gutter-tooltip.aria-label.error.singular", "error"), - plural: nls("gutter-tooltip.aria-label.error.plural", "errors") - }, - security: { - singular: nls("gutter-tooltip.aria-label.security.singular", "security finding"), - plural: nls("gutter-tooltip.aria-label.security.plural", "security findings") - }, - warning: { - singular: nls("gutter-tooltip.aria-label.warning.singular", "warning"), - plural: nls("gutter-tooltip.aria-label.warning.plural", "warnings") - }, - info: { - singular: nls("gutter-tooltip.aria-label.info.singular", "information message"), - plural: nls("gutter-tooltip.aria-label.info.plural", "information messages") - }, - hint: { - singular: nls("gutter-tooltip.aria-label.hint.singular", "suggestion"), - plural: nls("gutter-tooltip.aria-label.hint.plural", "suggestions") - } - }; - }, - enumerable: false, - configurable: true - }); - GutterTooltip.prototype.showTooltip = function (row) { - var _a; - var gutter = this.editor.renderer.$gutterLayer; - var annotationsInRow = gutter.$annotations[row]; - var annotation; - if (annotationsInRow) - annotation = { - displayText: Array.from(annotationsInRow.displayText), - type: Array.from(annotationsInRow.type) - }; - else - annotation = { displayText: [], type: [] }; - var fold = gutter.session.getFoldLine(row); - if (fold && gutter.$showFoldedAnnotations) { - var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] }; - var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 }; - var mostSevereAnnotationTypeInFold; - for (var i = row + 1; i <= fold.end.row; i++) { - if (!gutter.$annotations[i]) - continue; - for (var j = 0; j < gutter.$annotations[i].text.length; j++) { - var annotationType = gutter.$annotations[i].type[j]; - annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]); - if (!mostSevereAnnotationTypeInFold || - severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) { - mostSevereAnnotationTypeInFold = annotationType; - } - } - } - if (["error", "security", "warning"].includes(mostSevereAnnotationTypeInFold)) { - var summaryFoldedAnnotations = "".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), " in folded code."); - annotation.displayText.push(summaryFoldedAnnotations); - annotation.type.push(mostSevereAnnotationTypeInFold + "_fold"); - } + Editor.prototype.replace = function (replacement, options) { + if (options) + this.$search.set(options); + var range = this.$search.find(this.session); + var replaced = 0; + if (!range) + return replaced; + if (this.$tryReplace(range, replacement)) { + replaced = 1; } - if (annotation.displayText.length === 0) - return this.hideTooltip(); - var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] }; - var iconClassName = gutter.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; - for (var i = 0; i < annotation.displayText.length; i++) { - var lineElement = dom.createElement("span"); - var iconElement = dom.createElement("span"); - (_a = iconElement.classList).add.apply(_a, ["ace_".concat(annotation.type[i]), iconClassName]); - iconElement.setAttribute("aria-label", "".concat(GutterTooltip.annotationLabels[annotation.type[i].replace("_fold", "")].singular)); - iconElement.setAttribute("role", "img"); - iconElement.appendChild(dom.createTextNode(" ")); - lineElement.appendChild(iconElement); - lineElement.appendChild(dom.createTextNode(annotation.displayText[i])); - lineElement.appendChild(dom.createElement("br")); - annotationMessages[annotation.type[i].replace("_fold", "")].push(lineElement); + this.selection.setSelectionRange(range); + this.renderer.scrollSelectionIntoView(range.start, range.end); + return replaced; + }; + Editor.prototype.replaceAll = function (replacement, options) { + if (options) { + this.$search.set(options); } - var tooltipElement = this.getElement(); - dom.removeChildren(tooltipElement); - annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); }); - annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); }); - annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); }); - annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); }); - annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); }); - tooltipElement.setAttribute("aria-live", "polite"); - if (!this.isOpen) { - this.setTheme(this.editor.renderer.theme); - this.setClassName("ace_gutter-tooltip"); + var ranges = this.$search.findAll(this.session); + var replaced = 0; + if (!ranges.length) + return replaced; + var selection = this.getSelectionRange(); + this.selection.moveTo(0, 0); + for (var i = ranges.length - 1; i >= 0; --i) { + if (this.$tryReplace(ranges[i], replacement)) { + replaced++; + } } - var annotationNode = this.$findLinkedAnnotationNode(row); - if (annotationNode) { - annotationNode.setAttribute("aria-describedby", this.id); + this.selection.setSelectionRange(selection); + return replaced; + }; + Editor.prototype.$tryReplace = function (range, replacement) { + var input = this.session.getTextRange(range); + replacement = this.$search.replace(input, replacement); + if (replacement !== null) { + range.end = this.session.replace(range, replacement); + return range; + } + else { + return null; } - this.show(); - this.visibleTooltipRow = row; - this.editor._signal("showGutterTooltip", this); }; - GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) { - var cell = this.$findCellByRow(row); - if (cell) { - var element = cell.element; - if (element.childNodes.length > 2) { - return element.childNodes[2]; + Editor.prototype.getLastSearchOptions = function () { + return this.$search.getOptions(); + }; + Editor.prototype.find = function (needle, options, animate) { + if (!options) + options = {}; + if (typeof needle == "string" || needle instanceof RegExp) + options.needle = needle; + else if (typeof needle == "object") + oop.mixin(options, needle); + var range = this.selection.getRange(); + if (options.needle == null) { + needle = this.session.getTextRange(range) + || this.$search.$options.needle; + if (!needle) { + range = this.session.getWordRange(range.start.row, range.start.column); + needle = this.session.getTextRange(range); } + this.$search.set({ needle: needle }); + } + this.$search.set(options); + if (!options.start) + this.$search.set({ start: range }); + var newRange = this.$search.find(this.session); + if (options.preventScroll) + return newRange; + if (newRange) { + this.revealRange(newRange, animate); + return newRange; } + if (options.backwards) + range.start = range.end; + else + range.end = range.start; + this.selection.setRange(range); }; - GutterTooltip.prototype.$findCellByRow = function (row) { - return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; }); + Editor.prototype.findNext = function (options, animate) { + this.find({ skipCurrent: true, backwards: false }, options, animate); }; - GutterTooltip.prototype.hideTooltip = function () { - if (!this.isOpen) { - return; + Editor.prototype.findPrevious = function (options, animate) { + this.find(options, { skipCurrent: true, backwards: true }, animate); + }; + Editor.prototype.revealRange = function (range, animate) { + this.session.unfold(range); + this.selection.setSelectionRange(range); + var scrollTop = this.renderer.scrollTop; + this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); + if (animate !== false) + this.renderer.animateScrolling(scrollTop); + }; + Editor.prototype.undo = function () { + this.session.getUndoManager().undo(this.session); + this.renderer.scrollCursorIntoView(null, 0.5); + }; + Editor.prototype.redo = function () { + this.session.getUndoManager().redo(this.session); + this.renderer.scrollCursorIntoView(null, 0.5); + }; + Editor.prototype.destroy = function () { + this.destroyed = true; + if (this.$toDestroy) { + this.$toDestroy.forEach(function (el) { + el.destroy(); + }); + this.$toDestroy = []; } - this.$element.removeAttribute("aria-live"); - this.hide(); - if (this.visibleTooltipRow != undefined) { - var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow); - if (annotationNode) { - annotationNode.removeAttribute("aria-describedby"); + if (this.$mouseHandler) + this.$mouseHandler.destroy(); + this.renderer.destroy(); + this._signal("destroy", this); + if (this.session) + this.session.destroy(); + if (this._$emitInputEvent) + this._$emitInputEvent.cancel(); + this.removeAllListeners(); + }; + Editor.prototype.setAutoScrollEditorIntoView = function (enable) { + if (!enable) + return; + var rect; + var self = this; + var shouldScroll = false; + if (!this.$scrollAnchor) + this.$scrollAnchor = document.createElement("div"); + var scrollAnchor = this.$scrollAnchor; + scrollAnchor.style.cssText = "position:absolute"; + this.container.insertBefore(scrollAnchor, this.container.firstChild); + var onChangeSelection = this.on("changeSelection", function () { + shouldScroll = true; + }); + var onBeforeRender = this.renderer.on("beforeRender", function () { + if (shouldScroll) + rect = self.renderer.container.getBoundingClientRect(); + }); + var onAfterRender = this.renderer.on("afterRender", function () { + if (shouldScroll && rect && (self.isFocused() + || self.searchBox && self.searchBox.isFocused())) { + var renderer = self.renderer; + var pos = renderer.$cursorLayer.$pixelPos; + var config = renderer.layerConfig; + var top = pos.top - config.offset; + if (pos.top >= 0 && top + rect.top < 0) { + shouldScroll = true; + } + else if (pos.top < config.height && + pos.top + rect.top + config.lineHeight > window.innerHeight) { + shouldScroll = false; + } + else { + shouldScroll = null; + } + if (shouldScroll != null) { + scrollAnchor.style.top = top + "px"; + scrollAnchor.style.left = pos.left + "px"; + scrollAnchor.style.height = config.lineHeight + "px"; + scrollAnchor.scrollIntoView(shouldScroll); + } + shouldScroll = rect = null; } - } - this.visibleTooltipRow = undefined; - this.editor._signal("hideGutterTooltip", this); + }); + this.setAutoScrollEditorIntoView = function (enable) { + if (enable) + return; + delete this.setAutoScrollEditorIntoView; + this.off("changeSelection", onChangeSelection); + this.renderer.off("afterRender", onAfterRender); + this.renderer.off("beforeRender", onBeforeRender); + }; }; - GutterTooltip.annotationsToSummaryString = function (annotations) { - var e_1, _a; - var summary = []; - var annotationTypes = ["error", "security", "warning", "info", "hint"]; - try { - for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) { - var annotationType = annotationTypes_1_1.value; - if (!annotations[annotationType].length) - continue; - var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural; - summary.push("".concat(annotations[annotationType].length, " ").concat(label)); + Editor.prototype.$resetCursorStyle = function () { + var style = this.$cursorStyle || "ace"; + var cursorLayer = this.renderer.$cursorLayer; + if (!cursorLayer) + return; + cursorLayer.setSmoothBlinking(/smooth/.test(style)); + cursorLayer.isBlinking = !this.$readOnly && style != "wide"; + dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style)); + }; + Editor.prototype.prompt = function (message, options, callback) { + var editor = this; + config.loadModule("ace/ext/prompt", function (module) { + module.prompt(editor, message, options, callback); + }); + }; + return Editor; +}()); +Editor.$uid = 0; +Editor.prototype.curOp = null; +Editor.prototype.prevOp = {}; +Editor.prototype.$mergeableCommands = ["backspace", "del", "insertstring"]; +Editor.prototype.$toggleWordPairs = [ + ["first", "last"], + ["true", "false"], + ["yes", "no"], + ["width", "height"], + ["top", "bottom"], + ["right", "left"], + ["on", "off"], + ["x", "y"], + ["get", "set"], + ["max", "min"], + ["horizontal", "vertical"], + ["show", "hide"], + ["add", "remove"], + ["up", "down"], + ["before", "after"], + ["even", "odd"], + ["in", "out"], + ["inside", "outside"], + ["next", "previous"], + ["increase", "decrease"], + ["attach", "detach"], + ["&&", "||"], + ["==", "!="] +]; +oop.implement(Editor.prototype, EventEmitter); +config.defineOptions(Editor.prototype, "editor", { + selectionStyle: { + set: function (style) { + this.onSelectionChange(); + this._signal("changeSelectionStyle", { data: style }); + }, + initialValue: "line" + }, + highlightActiveLine: { + set: function () { this.$updateHighlightActiveLine(); }, + initialValue: true + }, + highlightSelectedWord: { + set: function (shouldHighlight) { this.$onSelectionChange(); }, + initialValue: true + }, + readOnly: { + set: function (/**@type{boolean}*/ readOnly) { + var _this = this; + this.textInput.setReadOnly(readOnly); + if (this.destroyed) + return; + this.$resetCursorStyle(); + if (!this.$readOnlyCallback) { + this.$readOnlyCallback = function (e) { + var shouldShow = false; + if (e && e.type == "keydown") { + if (e && e.key && !e.ctrlKey && !e.metaKey) { + if (e.key == " ") + e.preventDefault(); + shouldShow = e.key.length == 1; + } + if (!shouldShow) + return; + } + else if (e && e.type !== "exec") { + shouldShow = true; + } + if (shouldShow) { + if (!_this.hoverTooltip) { + _this.hoverTooltip = new HoverTooltip(); + } + var domNode = dom.createElement("div"); + domNode.textContent = nls("editor.tooltip.disable-editing", "Editing is disabled"); + if (!_this.hoverTooltip.isOpen) { + _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode); + } + } + else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) { + _this.hoverTooltip.hide(); + } + }; + } + var textArea = this.textInput.getElement(); + if (readOnly) { + event.addListener(textArea, "keydown", this.$readOnlyCallback, this); + this.commands.on("exec", this.$readOnlyCallback); + this.commands.on("commandUnavailable", this.$readOnlyCallback); + } + else { + event.removeListener(textArea, "keydown", this.$readOnlyCallback); + this.commands.off("exec", this.$readOnlyCallback); + this.commands.off("commandUnavailable", this.$readOnlyCallback); + if (this.hoverTooltip) { + this.hoverTooltip.destroy(); + this.hoverTooltip = null; + } } + }, + initialValue: false + }, + copyWithEmptySelection: { + set: function (value) { + this.textInput.setCopyWithEmptySelection(value); + }, + initialValue: false + }, + cursorStyle: { + set: function (val) { this.$resetCursorStyle(); }, + values: ["ace", "slim", "smooth", "wide"], + initialValue: "ace" + }, + mergeUndoDeltas: { + values: [false, true, "always"], + initialValue: true + }, + behavioursEnabled: { initialValue: true }, + wrapBehavioursEnabled: { initialValue: true }, + enableAutoIndent: { initialValue: true }, + autoScrollEditorIntoView: { + set: function (val) { this.setAutoScrollEditorIntoView(val); } + }, + keyboardHandler: { + set: function (val) { this.setKeyboardHandler(val); }, + get: function () { return this.$keybindingId; }, + handlesSet: true + }, + value: { + set: function (val) { this.session.setValue(val); }, + get: function () { return this.getValue(); }, + handlesSet: true, + hidden: true + }, + session: { + set: function (val) { this.setSession(val); }, + get: function () { return this.session; }, + handlesSet: true, + hidden: true + }, + showLineNumbers: { + set: function (show) { + this.renderer.$gutterLayer.setShowLineNumbers(show); + this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER); + if (show && this.$relativeLineNumbers) + relativeNumberRenderer.attach(this); + else + relativeNumberRenderer.detach(this); + }, + initialValue: true + }, + relativeLineNumbers: { + set: function (value) { + if (this.$showLineNumbers && value) + relativeNumberRenderer.attach(this); + else + relativeNumberRenderer.detach(this); } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1); + }, + placeholder: { + set: function (message) { + if (!this.$updatePlaceholder) { + this.$updatePlaceholder = function () { + var hasValue = this.session && (this.renderer.$composition || + this.session.getLength() > 1 || this.session.getLine(0).length > 0); + if (hasValue && this.renderer.placeholderNode) { + this.renderer.off("afterRender", this.$updatePlaceholder); + dom.removeCssClass(this.container, "ace_hasPlaceholder"); + this.renderer.placeholderNode.remove(); + this.renderer.placeholderNode = null; + } + else if (!hasValue && !this.renderer.placeholderNode) { + this.renderer.on("afterRender", this.$updatePlaceholder); + dom.addCssClass(this.container, "ace_hasPlaceholder"); + var el = dom.createElement("div"); + el.className = "ace_placeholder"; + el.textContent = this.$placeholder || ""; + this.renderer.placeholderNode = el; + this.renderer.content.appendChild(this.renderer.placeholderNode); + } + else if (!hasValue && this.renderer.placeholderNode) { + this.renderer.placeholderNode.textContent = this.$placeholder || ""; + } + }.bind(this); + this.on("input", this.$updatePlaceholder); } - finally { if (e_1) throw e_1.error; } + this.$updatePlaceholder(); } - return summary.join(", "); - }; - return GutterTooltip; -}(Tooltip)); -GutterTooltip.$uid = 0; -exports.GutterTooltip = GutterTooltip; + }, + enableKeyboardAccessibility: { + set: function (value) { + var blurCommand = { + name: "blurTextInput", + description: "Set focus to the editor content div to allow tabbing through the page", + bindKey: "Esc", + exec: function (editor) { + editor.blur(); + editor.renderer.scroller.focus(); + }, + readOnly: true + }; + var focusOnEnterKeyup = function (e) { + if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) { + e.preventDefault(); + var row = this.getCursorPosition().row; + if (!this.isRowVisible(row)) + this.scrollToLine(row, true, true); + this.focus(); + } + }; + var gutterKeyboardHandler; + if (value) { + this.renderer.enableKeyboardAccessibility = true; + this.renderer.keyboardFocusClassName = "ace_keyboard-focus"; + this.textInput.getElement().setAttribute("tabindex", -1); + this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0); + this.renderer.scroller.setAttribute("tabindex", 0); + this.renderer.scroller.setAttribute("role", "group"); + this.renderer.scroller.setAttribute("aria-roledescription", nls("editor.scroller.aria-roledescription", "editor")); + this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName); + this.renderer.scroller.setAttribute("aria-label", nls("editor.scroller.aria-label", "Editor content, press Enter to start editing, press Escape to exit")); + this.renderer.scroller.addEventListener("keyup", focusOnEnterKeyup.bind(this)); + this.commands.addCommand(blurCommand); + this.renderer.$gutter.setAttribute("tabindex", 0); + this.renderer.$gutter.setAttribute("aria-hidden", false); + this.renderer.$gutter.setAttribute("role", "group"); + this.renderer.$gutter.setAttribute("aria-roledescription", nls("editor.gutter.aria-roledescription", "editor gutter")); + this.renderer.$gutter.setAttribute("aria-label", nls("editor.gutter.aria-label", "Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit")); + this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName); + this.renderer.content.setAttribute("aria-hidden", true); + if (!gutterKeyboardHandler) + gutterKeyboardHandler = new GutterKeyboardHandler(this); + gutterKeyboardHandler.addListener(); + this.textInput.setAriaOptions({ + setLabel: true + }); + } + else { + this.renderer.enableKeyboardAccessibility = false; + this.textInput.getElement().setAttribute("tabindex", 0); + this.textInput.setNumberOfExtraLines(0); + this.renderer.scroller.setAttribute("tabindex", -1); + this.renderer.scroller.removeAttribute("role"); + this.renderer.scroller.removeAttribute("aria-roledescription"); + this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName); + this.renderer.scroller.removeAttribute("aria-label"); + this.renderer.scroller.removeEventListener("keyup", focusOnEnterKeyup.bind(this)); + this.commands.removeCommand(blurCommand); + this.renderer.content.removeAttribute("aria-hidden"); + this.renderer.$gutter.setAttribute("tabindex", -1); + this.renderer.$gutter.setAttribute("aria-hidden", true); + this.renderer.$gutter.removeAttribute("role"); + this.renderer.$gutter.removeAttribute("aria-roledescription"); + this.renderer.$gutter.removeAttribute("aria-label"); + this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName); + if (gutterKeyboardHandler) + gutterKeyboardHandler.removeListener(); + } + }, + initialValue: false + }, + textInputAriaLabel: { + set: function (val) { this.$textInputAriaLabel = val; }, + initialValue: "" + }, + enableMobileMenu: { + set: function (val) { this.$enableMobileMenu = val; }, + initialValue: true + }, + customScrollbar: "renderer", + hScrollBarAlwaysVisible: "renderer", + vScrollBarAlwaysVisible: "renderer", + highlightGutterLine: "renderer", + animatedScroll: "renderer", + showInvisibles: "renderer", + showPrintMargin: "renderer", + printMarginColumn: "renderer", + printMargin: "renderer", + fadeFoldWidgets: "renderer", + showFoldWidgets: "renderer", + displayIndentGuides: "renderer", + highlightIndentGuides: "renderer", + showGutter: "renderer", + fontSize: "renderer", + fontFamily: "renderer", + maxLines: "renderer", + minLines: "renderer", + scrollPastEnd: "renderer", + fixedWidthGutter: "renderer", + theme: "renderer", + hasCssTransforms: "renderer", + maxPixelHeight: "renderer", + useTextareaForIME: "renderer", + useResizeObserver: "renderer", + useSvgGutterIcons: "renderer", + showFoldedAnnotations: "renderer", + scrollSpeed: "$mouseHandler", + dragDelay: "$mouseHandler", + dragEnabled: "$mouseHandler", + focusTimeout: "$mouseHandler", + tooltipFollowsMouse: "$mouseHandler", + firstLineNumber: "session", + overwrite: "session", + newLineMode: "session", + useWorker: "session", + useSoftTabs: "session", + navigateWithinSoftTabs: "session", + tabSize: "session", + wrap: "session", + indentedSoftWrap: "session", + foldStyle: "session", + mode: "session" +}); +var relativeNumberRenderer = { + getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) { + return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? "\xb7" : ""))) + ""; + }, + getWidth: function (session, /**@type{number}*/ lastLineNumber, config) { + return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth; + }, + update: function (e, /**@type{Editor}*/ editor) { + editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER); + }, + attach: function (/**@type{Editor}*/ editor) { + editor.renderer.$gutterLayer.$renderer = this; + editor.on("changeSelection", this.update); + this.update(null, editor); + }, + detach: function (/**@type{Editor}*/ editor) { + if (editor.renderer.$gutterLayer.$renderer == this) + editor.renderer.$gutterLayer.$renderer = null; + editor.off("changeSelection", this.update); + this.update(null, editor); + } +}; +exports.Editor = Editor; }); -ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module){"use strict"; -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -var MouseEvent = /** @class */ (function () { - function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY; - this.domEvent = domEvent; - this.editor = editor; - this.x = this.clientX = domEvent.clientX; - this.y = this.clientY = domEvent.clientY; - this.$pos = null; - this.$inSelection = null; - this.propagationStopped = false; - this.defaultPrevented = false; +ace.define("ace/layer/lines",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var Lines = /** @class */ (function () { + function Lines(element, canvasHeight) { + this.element = element; + this.canvasHeight = canvasHeight || 500000; + this.element.style.height = (this.canvasHeight * 2) + "px"; + this.cells = []; + this.cellCache = []; + this.$offsetCoefficient = 0; } - MouseEvent.prototype.stopPropagation = function () { - event.stopPropagation(this.domEvent); - this.propagationStopped = true; - }; - MouseEvent.prototype.preventDefault = function () { - event.preventDefault(this.domEvent); - this.defaultPrevented = true; - }; - MouseEvent.prototype.stop = function () { - this.stopPropagation(); - this.preventDefault(); - }; - MouseEvent.prototype.getDocumentPosition = function () { - if (this.$pos) - return this.$pos; - this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); - return this.$pos; - }; - MouseEvent.prototype.getGutterRow = function () { - var documentRow = this.getDocumentPosition().row; - var screenRow = this.editor.session.documentToScreenRow(documentRow, 0); - var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0); - return screenRow - screenTopRow; - }; - MouseEvent.prototype.inSelection = function () { - if (this.$inSelection !== null) - return this.$inSelection; - var editor = this.editor; - var selectionRange = editor.getSelectionRange(); - if (selectionRange.isEmpty()) - this.$inSelection = false; - else { - var pos = this.getDocumentPosition(); - this.$inSelection = selectionRange.contains(pos.row, pos.column); - } - return this.$inSelection; - }; - MouseEvent.prototype.getButton = function () { - return event.getButton(this.domEvent); + Lines.prototype.moveContainer = function (config) { + dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient); }; - MouseEvent.prototype.getShiftKey = function () { - return this.domEvent.shiftKey; + Lines.prototype.pageChanged = function (oldConfig, newConfig) { + return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !== + Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)); }; - MouseEvent.prototype.getAccelKey = function () { - return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey; + Lines.prototype.computeLineTop = function (row, config, session) { + var screenTop = config.firstRowScreen * config.lineHeight; + var screenPage = Math.floor(screenTop / this.canvasHeight); + var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight; + return lineTop - (screenPage * this.canvasHeight); }; - return MouseEvent; -}()); -exports.MouseEvent = MouseEvent; - -}); - -ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -var AUTOSCROLL_DELAY = 200; -var SCROLL_CURSOR_DELAY = 200; -var SCROLL_CURSOR_HYSTERESIS = 5; -function DragdropHandler(mouseHandler) { - var editor = mouseHandler.editor; - var dragImage = dom.createElement("div"); - dragImage.style.cssText = "top:-100px;position:absolute;z-index:2147483647;opacity:0.5"; - dragImage.textContent = "\xa0"; - var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; - exports.forEach(function (x) { - mouseHandler[x] = this[x]; - }, this); - editor.on("mousedown", this.onMouseDown.bind(mouseHandler)); - var mouseTarget = editor.container; - var dragSelectionMarker, x, y; - var timerId, range; - var dragCursor, counter = 0; - var dragOperation; - var isInternal; - var autoScrollStartTime; - var cursorMovedTime; - var cursorPointOnCaretMoved; - this.onDragStart = function (e) { - if (this.cancelDrag || !mouseTarget.draggable) { - var self = this; - setTimeout(function () { - self.startSelect(); - self.captureMouse(e); - }, 0); - return e.preventDefault(); - } - range = editor.getSelectionRange(); - var dataTransfer = e.dataTransfer; - dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; - editor.container.appendChild(dragImage); - dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0); - setTimeout(function () { - editor.container.removeChild(dragImage); - }); - dataTransfer.clearData(); - dataTransfer.setData("Text", editor.session.getTextRange()); - isInternal = true; - this.setState("drag"); + Lines.prototype.computeLineHeight = function (row, config, session) { + return config.lineHeight * session.getRowLineCount(row); }; - this.onDragEnd = function (e) { - mouseTarget.draggable = false; - isInternal = false; - this.setState(null); - if (!editor.getReadOnly()) { - var dropEffect = e.dataTransfer.dropEffect; - if (!dragOperation && dropEffect == "move") - editor.session.remove(editor.getSelectionRange()); - editor.$resetCursorStyle(); - } - this.editor.unsetStyle("ace_dragging"); - this.editor.renderer.setCursorStyle(""); + Lines.prototype.getLength = function () { + return this.cells.length; }; - this.onDragEnter = function (e) { - if (editor.getReadOnly() || !canAccept(e.dataTransfer)) - return; - x = e.clientX; - y = e.clientY; - if (!dragSelectionMarker) - addDragMarker(); - counter++; - e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); - return event.preventDefault(e); + Lines.prototype.get = function (index) { + return this.cells[index]; }; - this.onDragOver = function (e) { - if (editor.getReadOnly() || !canAccept(e.dataTransfer)) - return; - x = e.clientX; - y = e.clientY; - if (!dragSelectionMarker) { - addDragMarker(); - counter++; - } - if (onMouseMoveTimer !== null) - onMouseMoveTimer = null; - e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); - return event.preventDefault(e); + Lines.prototype.shift = function () { + this.$cacheCell(this.cells.shift()); }; - this.onDragLeave = function (e) { - counter--; - if (counter <= 0 && dragSelectionMarker) { - clearDragMarker(); - dragOperation = null; - return event.preventDefault(e); - } + Lines.prototype.pop = function () { + this.$cacheCell(this.cells.pop()); }; - this.onDrop = function (e) { - if (!dragCursor) - return; - var dataTransfer = e.dataTransfer; - if (isInternal) { - switch (dragOperation) { - case "move": - if (range.contains(dragCursor.row, dragCursor.column)) { - range = { - start: dragCursor, - end: dragCursor - }; - } - else { - range = editor.moveText(range, dragCursor); - } - break; - case "copy": - range = editor.moveText(range, dragCursor, true); - break; + Lines.prototype.push = function (cell) { + if (Array.isArray(cell)) { + this.cells.push.apply(this.cells, cell); + var fragment = dom.createFragment(this.element); + for (var i = 0; i < cell.length; i++) { + fragment.appendChild(cell[i].element); } + this.element.appendChild(fragment); } else { - var dropData = dataTransfer.getData('Text'); - range = { - start: dragCursor, - end: editor.session.insert(dragCursor, dropData) - }; - editor.focus(); - dragOperation = null; + this.cells.push(cell); + this.element.appendChild(cell.element); } - clearDragMarker(); - return event.preventDefault(e); }; - event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler), editor); - event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler), editor); - event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler), editor); - event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler), editor); - event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler), editor); - event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler), editor); - function scrollCursorIntoView(cursor, prevCursor) { - var now = Date.now(); - var vMovement = !prevCursor || cursor.row != prevCursor.row; - var hMovement = !prevCursor || cursor.column != prevCursor.column; - if (!cursorMovedTime || vMovement || hMovement) { - editor.moveCursorToPosition(cursor); - cursorMovedTime = now; - cursorPointOnCaretMoved = { x: x, y: y }; - } - else { - var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); - if (distance > SCROLL_CURSOR_HYSTERESIS) { - cursorMovedTime = null; - } - else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { - editor.renderer.scrollCursorIntoView(); - cursorMovedTime = null; - } - } - } - function autoScroll(cursor, prevCursor) { - var now = Date.now(); - var lineHeight = editor.renderer.layerConfig.lineHeight; - var characterWidth = editor.renderer.layerConfig.characterWidth; - var editorRect = editor.renderer.scroller.getBoundingClientRect(); - var offsets = { - x: { - left: x - editorRect.left, - right: editorRect.right - x - }, - y: { - top: y - editorRect.top, - bottom: editorRect.bottom - y + Lines.prototype.unshift = function (cell) { + if (Array.isArray(cell)) { + this.cells.unshift.apply(this.cells, cell); + var fragment = dom.createFragment(this.element); + for (var i = 0; i < cell.length; i++) { + fragment.appendChild(cell[i].element); } - }; - var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); - var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); - var scrollCursor = { row: cursor.row, column: cursor.column }; - if (nearestXOffset / characterWidth <= 2) { - scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); - } - if (nearestYOffset / lineHeight <= 1) { - scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); - } - var vScroll = cursor.row != scrollCursor.row; - var hScroll = cursor.column != scrollCursor.column; - var vMovement = !prevCursor || cursor.row != prevCursor.row; - if (vScroll || (hScroll && !vMovement)) { - if (!autoScrollStartTime) - autoScrollStartTime = now; - else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) - editor.renderer.scrollCursorIntoView(scrollCursor); + if (this.element.firstChild) + this.element.insertBefore(fragment, this.element.firstChild); + else + this.element.appendChild(fragment); } else { - autoScrollStartTime = null; - } - } - function onDragInterval() { - var prevCursor = dragCursor; - dragCursor = editor.renderer.screenToTextCoordinates(x, y); - scrollCursorIntoView(dragCursor, prevCursor); - autoScroll(dragCursor, prevCursor); - } - function addDragMarker() { - range = editor.selection.toOrientedRange(); - dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); - editor.clearSelection(); - if (editor.isFocused()) - editor.renderer.$cursorLayer.setBlinking(false); - clearInterval(timerId); - onDragInterval(); - timerId = setInterval(onDragInterval, 20); - counter = 0; - event.addListener(document, "mousemove", onMouseMove); - } - function clearDragMarker() { - clearInterval(timerId); - editor.session.removeMarker(dragSelectionMarker); - dragSelectionMarker = null; - editor.selection.fromOrientedRange(range); - if (editor.isFocused() && !isInternal) - editor.$resetCursorStyle(); - range = null; - dragCursor = null; - counter = 0; - autoScrollStartTime = null; - cursorMovedTime = null; - event.removeListener(document, "mousemove", onMouseMove); - } - var onMouseMoveTimer = null; - function onMouseMove() { - if (onMouseMoveTimer == null) { - onMouseMoveTimer = setTimeout(function () { - if (onMouseMoveTimer != null && dragSelectionMarker) - clearDragMarker(); - }, 20); - } - } - function canAccept(dataTransfer) { - var types = dataTransfer.types; - return !types || Array.prototype.some.call(types, function (type) { - return type == 'text/plain' || type == 'Text'; - }); - } - function getDropEffect(e) { - var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; - var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; - var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; - var effectAllowed = "uninitialized"; - try { - effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); + this.cells.unshift(cell); + this.element.insertAdjacentElement("afterbegin", cell.element); } - catch (e) { } - var dropEffect = "none"; - if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) - dropEffect = "copy"; - else if (moveAllowed.indexOf(effectAllowed) >= 0) - dropEffect = "move"; - else if (copyAllowed.indexOf(effectAllowed) >= 0) - dropEffect = "copy"; - return dropEffect; - } -} -(function () { - this.dragWait = function () { - var interval = Date.now() - this.mousedownEvent.time; - if (interval > this.editor.getDragDelay()) - this.startDrag(); - }; - this.dragWaitEnd = function () { - var target = this.editor.container; - target.draggable = false; - this.startSelect(this.mousedownEvent.getDocumentPosition()); - this.selectEnd(); - }; - this.dragReadyEnd = function (e) { - this.editor.$resetCursorStyle(); - this.editor.unsetStyle("ace_dragging"); - this.editor.renderer.setCursorStyle(""); - this.dragWaitEnd(); - }; - this.startDrag = function () { - this.cancelDrag = false; - var editor = this.editor; - var target = editor.container; - target.draggable = true; - editor.renderer.$cursorLayer.setBlinking(false); - editor.setStyle("ace_dragging"); - var cursorStyle = useragent.isWin ? "default" : "move"; - editor.renderer.setCursorStyle(cursorStyle); - this.setState("dragReady"); }; - this.onMouseDrag = function (e) { - var target = this.editor.container; - if (useragent.isIE && this.state == "dragReady") { - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); - if (distance > 3) - target.dragDrop(); - } - if (this.state === "dragWait") { - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); - if (distance > 0) { - target.draggable = false; - this.startSelect(this.mousedownEvent.getDocumentPosition()); - } - } + Lines.prototype.last = function () { + if (this.cells.length) + return this.cells[this.cells.length - 1]; + else + return null; }; - this.onMouseDown = function (e) { - if (!this.$dragEnabled) + Lines.prototype.$cacheCell = function (cell) { + if (!cell) return; - this.mousedownEvent = e; - var editor = this.editor; - var inSelection = e.inSelection(); - var button = e.getButton(); - var clickCount = e.domEvent.detail || 1; - if (clickCount === 1 && button === 0 && inSelection) { - if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) - return; - this.mousedownEvent.time = Date.now(); - var eventTarget = e.domEvent.target || e.domEvent.srcElement; - if ("unselectable" in eventTarget) - eventTarget.unselectable = "on"; - if (editor.getDragDelay()) { - if (useragent.isWebKit) { - this.cancelDrag = true; - var mouseTarget = editor.container; - mouseTarget.draggable = true; - } - this.setState("dragWait"); - } - else { - this.startDrag(); - } - this.captureMouse(e, this.onMouseDrag.bind(this)); - e.defaultPrevented = true; + cell.element.remove(); + this.cellCache.push(cell); + }; + Lines.prototype.createCell = function (row, config, session, initElement) { + var cell = this.cellCache.pop(); + if (!cell) { + var element = dom.createElement("div"); + if (initElement) + initElement(element); + this.element.appendChild(element); + cell = { + element: element, + text: "", + row: row + }; } + cell.row = row; + return cell; }; -}).call(DragdropHandler.prototype); -function calcDistance(ax, ay, bx, by) { - return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); -} -exports.DragdropHandler = DragdropHandler; + return Lines; +}()); +exports.Lines = Lines; }); -ace.define("ace/mouse/touch_handler",["require","exports","module","ace/mouse/mouse_event","ace/lib/event","ace/lib/dom"], function(require, exports, module){"use strict"; -var MouseEvent = require("./mouse_event").MouseEvent; -var event = require("../lib/event"); +ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/layer/lines","ace/config"], function(require, exports, module){"use strict"; var dom = require("../lib/dom"); -exports.addTouchListeners = function (el, editor) { - var mode = "scroll"; - var startX; - var startY; - var touchStartT; - var lastT; - var longTouchTimer; - var animationTimer; - var animationSteps = 0; - var pos; - var clickCount = 0; - var vX = 0; - var vY = 0; - var pressed; - var contextMenu; - function createContextMenu() { - var clipboard = window.navigator && window.navigator.clipboard; - var isOpen = false; - var updateMenu = function () { - var selected = editor.getCopyText(); - var hasUndo = editor.session.getUndoManager().hasUndo(); - contextMenu.replaceChild(dom.buildDom(isOpen ? ["span", - !selected && canExecuteCommand("selectall") && ["span", { class: "ace_mobile-button", action: "selectall" }, "Select All"], - selected && canExecuteCommand("copy") && ["span", { class: "ace_mobile-button", action: "copy" }, "Copy"], - selected && canExecuteCommand("cut") && ["span", { class: "ace_mobile-button", action: "cut" }, "Cut"], - clipboard && canExecuteCommand("paste") && ["span", { class: "ace_mobile-button", action: "paste" }, "Paste"], - hasUndo && canExecuteCommand("undo") && ["span", { class: "ace_mobile-button", action: "undo" }, "Undo"], - canExecuteCommand("find") && ["span", { class: "ace_mobile-button", action: "find" }, "Find"], - canExecuteCommand("openCommandPalette") && ["span", { class: "ace_mobile-button", action: "openCommandPalette" }, "Palette"] - ] : ["span"]), contextMenu.firstChild); - }; - var canExecuteCommand = function (/** @type {string} */ cmd) { - return editor.commands.canExecute(cmd, editor); - }; - var handleClick = function (e) { - var action = e.target.getAttribute("action"); - if (action == "more" || !isOpen) { - isOpen = !isOpen; - return updateMenu(); +var oop = require("../lib/oop"); +var lang = require("../lib/lang"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var Lines = require("./lines").Lines; +var nls = require("../config").nls; +var Gutter = /** @class */ (function () { + function Gutter(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_gutter-layer"; + parentEl.appendChild(this.element); + this.setShowFoldWidgets(this.$showFoldWidgets); + this.gutterWidth = 0; + this.$annotations = []; + this.$updateAnnotations = this.$updateAnnotations.bind(this); + this.$lines = new Lines(this.element); + this.$lines.$offsetCoefficient = 1; + } + Gutter.prototype.setSession = function (session) { + if (this.session) + this.session.off("change", this.$updateAnnotations); + this.session = session; + if (session) + session.on("change", this.$updateAnnotations); + }; + Gutter.prototype.addGutterDecoration = function (row, className) { + if (window.console) + console.warn && console.warn("deprecated use session.addGutterDecoration"); + this.session.addGutterDecoration(row, className); + }; + Gutter.prototype.removeGutterDecoration = function (row, className) { + if (window.console) + console.warn && console.warn("deprecated use session.removeGutterDecoration"); + this.session.removeGutterDecoration(row, className); + }; + Gutter.prototype.setAnnotations = function (annotations) { + this.$annotations = []; + for (var i = 0; i < annotations.length; i++) { + var annotation = annotations[i]; + var row = annotation.row; + var rowInfo = this.$annotations[row]; + if (!rowInfo) + rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] }; + var annoText = annotation.text; + var displayAnnoText = annotation.text; + var annoType = annotation.type; + annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; + displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || ""; + if (rowInfo.text.indexOf(annoText) === -1) { + rowInfo.text.push(annoText); + rowInfo.type.push(annoType); + rowInfo.displayText.push(displayAnnoText); } - if (action == "paste") { - clipboard.readText().then(function (text) { - editor.execCommand(action, text); - }); + var className = annotation.className; + if (className) { + rowInfo.className = className; } - else if (action) { - if (action == "cut" || action == "copy") { - if (clipboard) - clipboard.writeText(editor.getCopyText()); - else - document.execCommand("copy"); - } - editor.execCommand(action); + else if (annoType === "error") { + rowInfo.className = " ace_error"; } - contextMenu.firstChild.style.display = "none"; - isOpen = false; - if (action != "openCommandPalette") - editor.focus(); - }; - contextMenu = dom.buildDom(["div", - { - class: "ace_mobile-menu", - ontouchstart: function (e) { - mode = "menu"; - e.stopPropagation(); - e.preventDefault(); - editor.textInput.focus(); - }, - ontouchend: function (e) { - e.stopPropagation(); - e.preventDefault(); - handleClick(e); - }, - onclick: handleClick - }, - ["span"], - ["span", { class: "ace_mobile-button", action: "more" }, "..."] - ], editor.container); - } - function showContextMenu() { - if (!editor.getOption("enableMobileMenu")) { - if (contextMenu) { - hideContextMenu(); + else if (annoType === "security" && !/\bace_error\b/.test(rowInfo.className)) { + rowInfo.className = " ace_security"; + } + else if (annoType === "warning" && !/\bace_(error|security)\b/.test(rowInfo.className)) { + rowInfo.className = " ace_warning"; } + else if (annoType === "info" && !rowInfo.className) { + rowInfo.className = " ace_info"; + } + else if (annoType === "hint" && !rowInfo.className) { + rowInfo.className = " ace_hint"; + } + } + }; + Gutter.prototype.$updateAnnotations = function (delta) { + if (!this.$annotations.length) return; + var firstRow = delta.start.row; + var len = delta.end.row - firstRow; + if (len === 0) { } - if (!contextMenu) - createContextMenu(); - var cursor = editor.selection.cursor; - var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column); - var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX; - var scrollLeft = editor.renderer.scrollLeft; - var rect = editor.container.getBoundingClientRect(); - contextMenu.style.top = pagePos.pageY - rect.top - 3 + "px"; - if (pagePos.pageX - rect.left < rect.width - 70) { - contextMenu.style.left = ""; - contextMenu.style.right = "10px"; + else if (delta.action == 'remove') { + this.$annotations.splice(firstRow, len + 1, null); } else { - contextMenu.style.right = ""; - contextMenu.style.left = leftOffset + scrollLeft - rect.left + "px"; - } - contextMenu.style.display = ""; - contextMenu.firstChild.style.display = "none"; - editor.on("input", hideContextMenu); - } - function hideContextMenu(e) { - if (contextMenu) - contextMenu.style.display = "none"; - editor.off("input", hideContextMenu); - } - function handleLongTap() { - longTouchTimer = null; - clearTimeout(longTouchTimer); - var range = editor.selection.getRange(); - var inSelection = range.contains(pos.row, pos.column); - if (range.isEmpty() || !inSelection) { - editor.selection.moveToPosition(pos); - editor.selection.selectWord(); + var args = new Array(len + 1); + args.unshift(firstRow, 1); + this.$annotations.splice.apply(this.$annotations, args); } - mode = "wait"; - showContextMenu(); - } - function switchToSelectionMode() { - longTouchTimer = null; - clearTimeout(longTouchTimer); - editor.selection.moveToPosition(pos); - var range = clickCount >= 2 - ? editor.selection.getLineRange(pos.row) - : editor.session.getBracketRange(pos); - if (range && !range.isEmpty()) { - editor.selection.setRange(range); + }; + Gutter.prototype.update = function (config) { + this.config = config; + var session = this.session; + var firstRow = config.firstRow; + var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar + session.getLength() - 1); + this.oldLastRow = lastRow; + this.config = config; + this.$lines.moveContainer(config); + this.$updateCursorRow(); + var fold = session.getNextFoldLine(firstRow); + var foldStart = fold ? fold.start.row : Infinity; + var cell = null; + var index = -1; + var row = firstRow; + while (true) { + if (row > foldStart) { + row = fold.end.row + 1; + fold = session.getNextFoldLine(row, fold); + foldStart = fold ? fold.start.row : Infinity; + } + if (row > lastRow) { + while (this.$lines.getLength() > index + 1) + this.$lines.pop(); + break; + } + cell = this.$lines.get(++index); + if (cell) { + cell.row = row; + } + else { + cell = this.$lines.createCell(row, config, this.session, onCreateCell); + this.$lines.push(cell); + } + this.$renderCell(cell, config, fold, row); + row++; } - else { - editor.selection.selectWord(); + this._signal("afterRender"); + this.$updateGutterWidth(config); + }; + Gutter.prototype.$updateGutterWidth = function (config) { + var session = this.session; + var gutterRenderer = session.gutterRenderer || this.$renderer; + var firstLineNumber = session.$firstLineNumber; + var lastLineText = this.$lines.last() ? this.$lines.last().text : ""; + if (this.$fixedWidth || session.$useWrapMode) + lastLineText = session.getLength() + firstLineNumber - 1; + var gutterWidth = gutterRenderer + ? gutterRenderer.getWidth(session, lastLineText, config) + : lastLineText.toString().length * config.characterWidth; + var padding = this.$padding || this.$computePadding(); + gutterWidth += padding.left + padding.right; + if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { + this.gutterWidth = gutterWidth; (this.element.parentNode).style.width = + this.element.style.width = Math.ceil(this.gutterWidth) + "px"; + this._signal("changeGutterWidth", gutterWidth); } - mode = "wait"; - } - event.addListener(el, "contextmenu", function (e) { - if (!pressed) + }; + Gutter.prototype.$updateCursorRow = function () { + if (!this.$highlightGutterLine) return; - var textarea = editor.textInput.getElement(); - textarea.focus(); - }, editor); - event.addListener(el, "touchstart", function (e) { - var touches = e.touches; - if (longTouchTimer || touches.length > 1) { - clearTimeout(longTouchTimer); - longTouchTimer = null; - touchStartT = -1; - mode = "zoom"; + var position = this.session.selection.getCursor(); + if (this.$cursorRow === position.row) + return; + this.$cursorRow = position.row; + }; + Gutter.prototype.updateLineHighlight = function () { + if (!this.$highlightGutterLine) + return; + var row = this.session.selection.cursor.row; + this.$cursorRow = row; + if (this.$cursorCell && this.$cursorCell.row == row) return; + if (this.$cursorCell) + this.$cursorCell.element.className = this.$cursorCell.element.className.replace("ace_gutter-active-line ", ""); + var cells = this.$lines.cells; + this.$cursorCell = null; + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + if (cell.row >= this.$cursorRow) { + if (cell.row > this.$cursorRow) { + var fold = this.session.getFoldLine(this.$cursorRow); + if (i > 0 && fold && fold.start.row == cells[i - 1].row) + cell = cells[i - 1]; + else + break; + } + cell.element.className = "ace_gutter-active-line " + cell.element.className; + this.$cursorCell = cell; + break; + } } - pressed = editor.$mouseHandler.isMousePressed = true; - var h = editor.renderer.layerConfig.lineHeight; - var w = editor.renderer.layerConfig.lineHeight; - var t = e.timeStamp; - lastT = t; - var touchObj = touches[0]; - var x = touchObj.clientX; - var y = touchObj.clientY; - if (Math.abs(startX - x) + Math.abs(startY - y) > h) - touchStartT = -1; - startX = e.clientX = x; - startY = e.clientY = y; - vX = vY = 0; - var ev = new MouseEvent(e, editor); - pos = ev.getDocumentPosition(); - if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) { - clickCount++; - e.preventDefault(); - e.button = 0; - switchToSelectionMode(); + }; + Gutter.prototype.scrollLines = function (config) { + var oldConfig = this.config; + this.config = config; + this.$updateCursorRow(); + if (this.$lines.pageChanged(oldConfig, config)) + return this.update(config); + this.$lines.moveContainer(config); + var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar + this.session.getLength() - 1); + var oldLastRow = this.oldLastRow; + this.oldLastRow = lastRow; + if (!oldConfig || oldLastRow < config.firstRow) + return this.update(config); + if (lastRow < oldConfig.firstRow) + return this.update(config); + if (oldConfig.firstRow < config.firstRow) + for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) + this.$lines.shift(); + if (oldLastRow > lastRow) + for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--) + this.$lines.pop(); + if (config.firstRow < oldConfig.firstRow) { + this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1)); + } + if (lastRow > oldLastRow) { + this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow)); + } + this.updateLineHighlight(); + this._signal("afterRender"); + this.$updateGutterWidth(config); + }; + Gutter.prototype.$renderLines = function (config, firstRow, lastRow) { + var fragment = []; + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (true) { + if (row > foldStart) { + row = foldLine.end.row + 1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (row > lastRow) + break; + var cell = this.$lines.createCell(row, config, this.session, onCreateCell); + this.$renderCell(cell, config, foldLine, row); + fragment.push(cell); + row++; + } + return fragment; + }; + Gutter.prototype.$renderCell = function (cell, config, fold, row) { + var element = cell.element; + var session = this.session; + var textNode = element.childNodes[0]; + var foldWidget = element.childNodes[1]; + var annotationNode = element.childNodes[2]; + var customWidget = element.childNodes[3]; + var annotationIconNode = annotationNode.firstChild; + var firstLineNumber = session.$firstLineNumber; + var breakpoints = session.$breakpoints; + var decorations = session.$decorations; + var gutterRenderer = session.gutterRenderer || this.$renderer; + var foldWidgets = this.$showFoldWidgets && session.foldWidgets; + var foldStart = fold ? fold.start.row : Number.MAX_VALUE; + var lineHeight = config.lineHeight + "px"; + var className = this.$useSvgGutterIcons ? "ace_gutter-cell_svg-icons " : "ace_gutter-cell "; + var iconClassName = this.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; + var rowText = (gutterRenderer + ? gutterRenderer.getText(session, row) + : row + firstLineNumber).toString(); + if (this.$highlightGutterLine) { + if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) { + className += "ace_gutter-active-line "; + if (this.$cursorCell != cell) { + if (this.$cursorCell) + this.$cursorCell.element.className = this.$cursorCell.element.className.replace("ace_gutter-active-line ", ""); + this.$cursorCell = cell; + } + } + } + if (breakpoints[row]) + className += breakpoints[row]; + if (decorations[row]) + className += decorations[row]; + if (this.$annotations[row] && row !== foldStart) + className += this.$annotations[row].className; + if (foldWidgets) { + var c = foldWidgets[row]; + if (c == null) + c = foldWidgets[row] = session.getFoldWidget(row); + } + if (c) { + var foldClass = "ace_fold-widget ace_" + c; + var isClosedFold = c == "start" && row == foldStart && row < fold.end.row; + if (isClosedFold) { + foldClass += " ace_closed"; + var foldAnnotationClass = ""; + var annotationInFold = false; + for (var i = row + 1; i <= fold.end.row; i++) { + if (!this.$annotations[i]) + continue; + if (this.$annotations[i].className === " ace_error") { + annotationInFold = true; + foldAnnotationClass = " ace_error_fold"; + break; + } + if (this.$annotations[i].className === " ace_security") { + annotationInFold = true; + foldAnnotationClass = " ace_security_fold"; + } + else if (this.$annotations[i].className === " ace_warning" && + foldAnnotationClass !== " ace_security_fold") { + annotationInFold = true; + foldAnnotationClass = " ace_warning_fold"; + } + } + className += foldAnnotationClass; + } + else + foldClass += " ace_open"; + if (foldWidget.className != foldClass) + foldWidget.className = foldClass; + dom.setStyle(foldWidget.style, "height", lineHeight); + dom.setStyle(foldWidget.style, "display", "inline-block"); + foldWidget.setAttribute("role", "button"); + foldWidget.setAttribute("tabindex", "-1"); + var foldRange = session.getFoldWidgetRange(row); + if (foldRange) + foldWidget.setAttribute("aria-label", nls("gutter.code-folding.range.aria-label", "Toggle code folding, rows $0 through $1", [ + foldRange.start.row + 1, + foldRange.end.row + 1 + ])); + else { + if (fold) + foldWidget.setAttribute("aria-label", nls("gutter.code-folding.closed.aria-label", "Toggle code folding, rows $0 through $1", [ + fold.start.row + 1, + fold.end.row + 1 + ])); + else + foldWidget.setAttribute("aria-label", nls("gutter.code-folding.open.aria-label", "Toggle code folding, row $0", [row + 1])); + } + if (isClosedFold) { + foldWidget.setAttribute("aria-expanded", "false"); + foldWidget.setAttribute("title", nls("gutter.code-folding.closed.title", "Unfold code")); + } + else { + foldWidget.setAttribute("aria-expanded", "true"); + foldWidget.setAttribute("title", nls("gutter.code-folding.open.title", "Fold code")); + } } else { - clickCount = 0; - var cursor = editor.selection.cursor; - var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor; - var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true); - var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true); - var rect = editor.renderer.scroller.getBoundingClientRect(); - var offsetTop = editor.renderer.layerConfig.offset; - var offsetLeft = editor.renderer.scrollLeft; - var weightedDistance = function (x, y) { - x = x / w; - y = y / h - 0.75; - return x * x + y * y; - }; - if (e.clientX < rect.left) { - mode = "zoom"; - return; + if (foldWidget) { + dom.setStyle(foldWidget.style, "display", "none"); + foldWidget.setAttribute("tabindex", "0"); + foldWidget.removeAttribute("role"); + foldWidget.removeAttribute("aria-label"); } - var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop); - var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop); - if (diff1 < 3.5 && diff2 < 3.5) - mode = diff1 > diff2 ? "cursor" : "anchor"; - if (diff2 < 3.5) - mode = "anchor"; - else if (diff1 < 3.5) - mode = "cursor"; - else - mode = "scroll"; - longTouchTimer = setTimeout(handleLongTap, 450); } - touchStartT = t; - }, editor); - event.addListener(el, "touchend", function (e) { - pressed = editor.$mouseHandler.isMousePressed = false; - if (animationTimer) - clearInterval(animationTimer); - if (mode == "zoom") { - mode = ""; - animationSteps = 0; + var customWidgetAttributes = this.session.$gutterCustomWidgets[row]; + if (customWidgetAttributes) { + this.$addCustomWidget(row, customWidgetAttributes, cell); } - else if (longTouchTimer) { - editor.selection.moveToPosition(pos); - animationSteps = 0; - showContextMenu(); + else if (customWidget) { + this.$removeCustomWidget(row, cell); } - else if (mode == "scroll") { - animate(); - hideContextMenu(); + if (annotationInFold && this.$showFoldedAnnotations) { + annotationNode.className = "ace_gutter_annotation"; + annotationIconNode.className = iconClassName; + annotationIconNode.className += foldAnnotationClass; + dom.setStyle(annotationIconNode.style, "height", lineHeight); + dom.setStyle(annotationNode.style, "display", "block"); + dom.setStyle(annotationNode.style, "height", lineHeight); + var ariaLabel; + switch (foldAnnotationClass) { + case " ace_error_fold": + ariaLabel = nls("gutter.annotation.aria-label.error", "Error, read annotations row $0", [rowText]); + break; + case " ace_security_fold": + ariaLabel = nls("gutter.annotation.aria-label.security", "Security finding, read annotations row $0", [rowText]); + break; + case " ace_warning_fold": + ariaLabel = nls("gutter.annotation.aria-label.warning", "Warning, read annotations row $0", [rowText]); + break; + } + annotationNode.setAttribute("aria-label", ariaLabel); + annotationNode.setAttribute("tabindex", "-1"); + annotationNode.setAttribute("role", "button"); } - else { - showContextMenu(); + else if (this.$annotations[row]) { + annotationNode.className = "ace_gutter_annotation"; + annotationIconNode.className = iconClassName; + if (this.$useSvgGutterIcons) + annotationIconNode.className += this.$annotations[row].className; + else + element.classList.add(this.$annotations[row].className.replace(" ", "")); + dom.setStyle(annotationIconNode.style, "height", lineHeight); + dom.setStyle(annotationNode.style, "display", "block"); + dom.setStyle(annotationNode.style, "height", lineHeight); + var ariaLabel; + switch (this.$annotations[row].className) { + case " ace_error": + ariaLabel = nls("gutter.annotation.aria-label.error", "Error, read annotations row $0", [rowText]); + break; + case " ace_security": + ariaLabel = nls("gutter.annotation.aria-label.security", "Security finding, read annotations row $0", [rowText]); + break; + case " ace_warning": + ariaLabel = nls("gutter.annotation.aria-label.warning", "Warning, read annotations row $0", [rowText]); + break; + case " ace_info": + ariaLabel = nls("gutter.annotation.aria-label.info", "Info, read annotations row $0", [rowText]); + break; + case " ace_hint": + ariaLabel = nls("gutter.annotation.aria-label.hint", "Suggestion, read annotations row $0", [rowText]); + break; + } + annotationNode.setAttribute("aria-label", ariaLabel); + annotationNode.setAttribute("tabindex", "-1"); + annotationNode.setAttribute("role", "button"); } - clearTimeout(longTouchTimer); - longTouchTimer = null; - }, editor); - event.addListener(el, "touchmove", function (e) { - if (longTouchTimer) { - clearTimeout(longTouchTimer); - longTouchTimer = null; + else { + dom.setStyle(annotationNode.style, "display", "none"); + annotationNode.removeAttribute("aria-label"); + annotationNode.removeAttribute("role"); + annotationNode.setAttribute("tabindex", "0"); } - var touches = e.touches; - if (touches.length > 1 || mode == "zoom") - return; - var touchObj = touches[0]; - var wheelX = startX - touchObj.clientX; - var wheelY = startY - touchObj.clientY; - if (mode == "wait") { - if (wheelX * wheelX + wheelY * wheelY > 4) - mode = "cursor"; - else - return e.preventDefault(); + if (rowText !== textNode.data) { + textNode.data = rowText; } - startX = touchObj.clientX; - startY = touchObj.clientY; - e.clientX = touchObj.clientX; - e.clientY = touchObj.clientY; - var t = e.timeStamp; - var dt = t - lastT; - lastT = t; - if (mode == "scroll") { - var mouseEvent = new MouseEvent(e, editor); - mouseEvent.speed = 1; - mouseEvent.wheelX = wheelX; - mouseEvent.wheelY = wheelY; - if (10 * Math.abs(wheelX) < Math.abs(wheelY)) - wheelX = 0; - if (10 * Math.abs(wheelY) < Math.abs(wheelX)) - wheelY = 0; - if (dt != 0) { - vX = wheelX / dt; - vY = wheelY / dt; + if (element.className != className) + element.className = className; + dom.setStyle(cell.element.style, "height", this.$lines.computeLineHeight(row, config, session) + "px"); + dom.setStyle(cell.element.style, "top", this.$lines.computeLineTop(row, config, session) + "px"); + cell.text = rowText; + if (annotationNode.style.display === "none" && foldWidget.style.display === "none" && !customWidgetAttributes) + cell.element.setAttribute("aria-hidden", true); + else + cell.element.setAttribute("aria-hidden", false); + return cell; + }; + Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) { + this.$highlightGutterLine = highlightGutterLine; + }; + Gutter.prototype.setShowLineNumbers = function (show) { + this.$renderer = !show && { + getWidth: function () { return 0; }, + getText: function () { return ""; } + }; + }; + Gutter.prototype.getShowLineNumbers = function () { + return this.$showLineNumbers; + }; + Gutter.prototype.setShowFoldWidgets = function (show) { + if (show) + dom.addCssClass(this.element, "ace_folding-enabled"); + else + dom.removeCssClass(this.element, "ace_folding-enabled"); + this.$showFoldWidgets = show; + this.$padding = null; + }; + Gutter.prototype.getShowFoldWidgets = function () { + return this.$showFoldWidgets; + }; + Gutter.prototype.$hideFoldWidget = function (row, cell) { + var rowCell = cell || this.$getGutterCell(row); + if (rowCell && rowCell.element) { + var foldWidget = rowCell.element.childNodes[1]; + if (foldWidget) { + dom.setStyle(foldWidget.style, "display", "none"); } - editor._emit("mousewheel", mouseEvent); - if (!mouseEvent.propagationStopped) { - vX = vY = 0; + } + }; + Gutter.prototype.$showFoldWidget = function (row, cell) { + var rowCell = cell || this.$getGutterCell(row); + if (rowCell && rowCell.element) { + var foldWidget = rowCell.element.childNodes[1]; + if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) { + dom.setStyle(foldWidget.style, "display", "inline-block"); } } - else { - var ev = new MouseEvent(e, editor); - var pos = ev.getDocumentPosition(); - if (mode == "cursor") - editor.selection.moveCursorToPosition(pos); - else if (mode == "anchor") - editor.selection.setSelectionAnchor(pos.row, pos.column); - editor.renderer.scrollCursorIntoView(pos); - e.preventDefault(); + }; + Gutter.prototype.$getGutterCell = function (row) { + var cells = this.$lines.cells; + var visibileRow = this.session.documentToScreenRow(row, 0); + return cells[row - this.config.firstRowScreen - (row - visibileRow)]; + }; + Gutter.prototype.$addCustomWidget = function (row, _a, cell) { + var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks; + this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks }; + this.$hideFoldWidget(row, cell); + var rowCell = cell || this.$getGutterCell(row); + if (rowCell && rowCell.element) { + var customWidget = rowCell.element.querySelector(".ace_custom-widget"); + if (customWidget) { + customWidget.remove(); + } + customWidget = dom.createElement("span"); + customWidget.className = "ace_custom-widget ".concat(className); + customWidget.setAttribute("tabindex", "-1"); + customWidget.setAttribute("role", 'button'); + customWidget.setAttribute("aria-label", label); + customWidget.setAttribute("title", title); + dom.setStyle(customWidget.style, "display", "inline-block"); + dom.setStyle(customWidget.style, "height", "inherit"); + if (callbacks && callbacks.onClick) { + customWidget.addEventListener("click", function (e) { + callbacks.onClick(e, row); + e.stopPropagation(); + }); + } + rowCell.element.appendChild(customWidget); } - }, editor); - function animate() { - animationSteps += 60; - animationTimer = setInterval(function () { - if (animationSteps-- <= 0) { - clearInterval(animationTimer); - animationTimer = null; + }; + Gutter.prototype.$removeCustomWidget = function (row, cell) { + delete this.session.$gutterCustomWidgets[row]; + this.$showFoldWidget(row, cell); + var rowCell = cell || this.$getGutterCell(row); + if (rowCell && rowCell.element) { + var customWidget = rowCell.element.querySelector(".ace_custom-widget"); + if (customWidget) { + rowCell.element.removeChild(customWidget); } - if (Math.abs(vX) < 0.01) - vX = 0; - if (Math.abs(vY) < 0.01) - vY = 0; - if (animationSteps < 20) - vX = 0.9 * vX; - if (animationSteps < 20) - vY = 0.9 * vY; - var oldScrollTop = editor.session.getScrollTop(); - editor.renderer.scrollBy(10 * vX, 10 * vY); - if (oldScrollTop == editor.session.getScrollTop()) - animationSteps = 0; - }, 10); - } -}; + } + }; + Gutter.prototype.$computePadding = function () { + if (!this.element.firstChild) + return { left: 0, right: 0 }; + var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild)); + this.$padding = {}; + this.$padding.left = (parseInt(style.borderLeftWidth) || 0) + + (parseInt(style.paddingLeft) || 0) + 1; + this.$padding.right = (parseInt(style.borderRightWidth) || 0) + + (parseInt(style.paddingRight) || 0); + return this.$padding; + }; + Gutter.prototype.getRegion = function (point) { + var padding = this.$padding || this.$computePadding(); + var rect = this.element.getBoundingClientRect(); + if (point.x < padding.left + rect.left) + return "markers"; + if (this.$showFoldWidgets && point.x > rect.right - padding.right) + return "foldWidgets"; + }; + return Gutter; +}()); +Gutter.prototype.$fixedWidth = false; +Gutter.prototype.$highlightGutterLine = true; +Gutter.prototype.$renderer = ""; +Gutter.prototype.$showLineNumbers = true; +Gutter.prototype.$showFoldWidgets = true; +oop.implement(Gutter.prototype, EventEmitter); +function onCreateCell(element) { + var textNode = document.createTextNode(''); + element.appendChild(textNode); + var foldWidget = dom.createElement("span"); + element.appendChild(foldWidget); + var annotationNode = dom.createElement("span"); + element.appendChild(annotationNode); + var annotationIconNode = dom.createElement("span"); + annotationNode.appendChild(annotationIconNode); + return element; +} +exports.Gutter = Gutter; }); -ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/mouse/touch_handler","ace/config"], function(require, exports, module){"use strict"; -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -var DefaultHandlers = require("./default_handlers").DefaultHandlers; -var DefaultGutterHandler = require("./default_gutter_handler").GutterHandler; -var MouseEvent = require("./mouse_event").MouseEvent; -var DragdropHandler = require("./dragdrop_handler").DragdropHandler; -var addTouchListeners = require("./touch_handler").addTouchListeners; -var config = require("../config"); -var MouseHandler = /** @class */ (function () { - function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout; - var _self = this; - this.editor = editor; - new DefaultHandlers(this); - new DefaultGutterHandler(this); - new DragdropHandler(this); - var focusEditor = function (e) { - var windowBlurred = !document.hasFocus || !document.hasFocus() - || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement()); - if (windowBlurred) - window.focus(); - editor.focus(); - setTimeout(function () { - if (!editor.isFocused()) - editor.focus(); - }); - }; - var mouseTarget = editor.renderer.getMouseEventTarget(); - event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"), editor); - event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"), editor); - event.addMultiMouseDownListener([ - mouseTarget, - editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner, - editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner, - editor.textInput && editor.textInput.getElement() - ].filter(Boolean), [400, 300, 250], this, "onMouseEvent", editor); - event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"), editor); - addTouchListeners(editor.container, editor); - var gutterEl = editor.renderer.$gutter; - event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown"), editor); - event.addListener(gutterEl, "click", this.onMouseEvent.bind(this, "gutterclick"), editor); - event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick"), editor); - event.addListener(gutterEl, "mousemove", this.onMouseEvent.bind(this, "guttermousemove"), editor); - event.addListener(mouseTarget, "mousedown", focusEditor, editor); - event.addListener(gutterEl, "mousedown", focusEditor, editor); - if (useragent.isIE && editor.renderer.scrollBarV) { - event.addListener(editor.renderer.scrollBarV.element, "mousedown", focusEditor, editor); - event.addListener(editor.renderer.scrollBarH.element, "mousedown", focusEditor, editor); +ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(require, exports, module){"use strict"; +var Range = require("../range").Range; +var dom = require("../lib/dom"); +var Marker = /** @class */ (function () { + function Marker(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_marker-layer"; + parentEl.appendChild(this.element); + } + Marker.prototype.setPadding = function (padding) { + this.$padding = padding; + }; + Marker.prototype.setSession = function (session) { + this.session = session; + }; + Marker.prototype.setMarkers = function (markers) { + this.markers = markers; + }; + Marker.prototype.elt = function (className, css) { + var x = this.i != -1 && this.element.childNodes[this.i]; + if (!x) { + x = document.createElement("div"); + this.element.appendChild(x); + this.i = -1; } - editor.on("mousemove", function (e) { - if (_self.state || _self.$dragDelay || !_self.$dragEnabled) - return; - var character = editor.renderer.screenToTextCoordinates(e.x, e.y); - var range = editor.session.selection.getRange(); - var renderer = editor.renderer; - if (!range.isEmpty() && range.insideStart(character.row, character.column)) { - renderer.setCursorStyle("default"); + else { + this.i++; + } + x.style.cssText = css; + x.className = className; + }; + Marker.prototype.update = function (config) { + if (!config) + return; + this.config = config; + this.i = 0; + var html; + for (var key in this.markers) { + var marker = this.markers[key]; + if (!marker.range) { + marker.update(html, this, this.session, config); + continue; + } + var range = marker.range.clipRows(config.firstRow, config.lastRow); + if (range.isEmpty()) + continue; + range = range.toScreenRange(this.session); + if (marker.renderer) { + var top = this.$getTop(range.start.row, config); + var left = this.$padding + range.start.column * config.characterWidth; + marker.renderer(html, range, left, top, config); + } + else if (marker.type == "fullLine") { + this.drawFullLineMarker(html, range, marker.clazz, config); + } + else if (marker.type == "screenLine") { + this.drawScreenLineMarker(html, range, marker.clazz, config); + } + else if (range.isMultiLine()) { + if (marker.type == "text") + this.drawTextMarker(html, range, marker.clazz, config); + else + this.drawMultiLineMarker(html, range, marker.clazz, config); } else { - renderer.setCursorStyle(""); + this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config); } - }, //@ts-expect-error TODO: seems mistyping - should be boolean - editor); - } - MouseHandler.prototype.onMouseEvent = function (name, e) { - if (!this.editor.session) - return; - this.editor._emit(name, new MouseEvent(e, this.editor)); - }; - MouseHandler.prototype.onMouseMove = function (name, e) { - var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove; - if (!listeners || !listeners.length) - return; - this.editor._emit(name, new MouseEvent(e, this.editor)); + } + if (this.i != -1) { + while (this.i < this.element.childElementCount) + this.element.removeChild(this.element.lastChild); + } }; - MouseHandler.prototype.onMouseWheel = function (name, e) { - var mouseEvent = new MouseEvent(e, this.editor); - mouseEvent.speed = this.$scrollSpeed * 2; - mouseEvent.wheelX = e.wheelX; - mouseEvent.wheelY = e.wheelY; - this.editor._emit(name, mouseEvent); + Marker.prototype.$getTop = function (row, layerConfig) { + return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; }; - MouseHandler.prototype.setState = function (state) { - this.state = state; + Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) { + var session = this.session; + var start = range.start.row; + var end = range.end.row; + var row = start; + var prev = 0; + var curr = 0; + var next = session.getScreenLastRowColumn(row); + var lineRange = new Range(row, range.start.column, row, curr); + for (; row <= end; row++) { + lineRange.start.row = lineRange.end.row = row; + lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row); + lineRange.end.column = next; + prev = curr; + curr = next; + next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column; + this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? " ace_start" : "") + " ace_br" + + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle); + } }; - MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) { - this.x = ev.x; - this.y = ev.y; - this.isMousePressed = true; - var editor = this.editor; - var renderer = this.editor.renderer; - renderer.$isMousePressed = true; - var self = this; - var continueCapture = true; - var onMouseMove = function (e) { - if (!e) - return; - if (useragent.isWebKit && !e.which && self.releaseMouse) - return self.releaseMouse(); - self.x = e.clientX; - self.y = e.clientY; - mouseMoveHandler && mouseMoveHandler(e); - self.mouseEvent = new MouseEvent(e, self.editor); - self.$mouseMoved = true; - }; - var onCaptureEnd = function (e) { - editor.off("beforeEndOperation", onOperationEnd); - continueCapture = false; - if (editor.session) - onCaptureUpdate(); - self[self.state + "End"] && self[self.state + "End"](e); - self.state = ""; - self.isMousePressed = renderer.$isMousePressed = false; - if (renderer.$keepTextAreaAtCursor) - renderer.$moveTextAreaToCursor(); - self.$onCaptureMouseMove = self.releaseMouse = null; - e && self.onMouseEvent("mouseup", e); - editor.endOperation(); - }; - var onCaptureUpdate = function () { - self[self.state] && self[self.state](); - self.$mouseMoved = false; - }; - var onCaptureInterval = function () { - if (continueCapture) { - onCaptureUpdate(); - event.nextFrame(onCaptureInterval); - } - }; - if (useragent.isOldIE && ev.domEvent.type == "dblclick") { - return setTimeout(function () { onCaptureEnd(ev); }); + Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { + var padding = this.$padding; + var height = config.lineHeight; + var top = this.$getTop(range.start.row, config); + var left = padding + range.start.column * config.characterWidth; + extraStyle = extraStyle || ""; + if (this.session.$bidiHandler.isBidiRow(range.start.row)) { + var range1 = range.clone(); + range1.end.row = range1.start.row; + range1.end.column = this.session.getLine(range1.start.row).length; + this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + " ace_br1 ace_start", config, null, extraStyle); } - var onOperationEnd = function (e) { - if (!self.releaseMouse) - return; - if (editor.curOp.command.name && editor.curOp.selectionChanged) { - self[self.state + "End"] && self[self.state + "End"](); - self.state = ""; - self.releaseMouse(); - } - }; - editor.on("beforeEndOperation", onOperationEnd); - editor.startOperation({ command: { name: "mouse" } }); - self.$onCaptureMouseMove = onMouseMove; - self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd); - onCaptureInterval(); + else { + this.elt(clazz + " ace_br1 ace_start", "height:" + height + "px;" + "right:" + padding + "px;" + "top:" + top + "px;left:" + left + "px;" + (extraStyle || "")); + } + if (this.session.$bidiHandler.isBidiRow(range.end.row)) { + var range1 = range.clone(); + range1.start.row = range1.end.row; + range1.start.column = 0; + this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + " ace_br12", config, null, extraStyle); + } + else { + top = this.$getTop(range.end.row, config); + var width = range.end.column * config.characterWidth; + this.elt(clazz + " ace_br12", "height:" + height + "px;" + + "width:" + width + "px;" + + "top:" + top + "px;" + + "left:" + padding + "px;" + (extraStyle || "")); + } + height = (range.end.row - range.start.row - 1) * config.lineHeight; + if (height <= 0) + return; + top = this.$getTop(range.start.row + 1, config); + var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8); + this.elt(clazz + (radiusClass ? " ace_br" + radiusClass : ""), "height:" + height + "px;" + + "right:" + padding + "px;" + + "top:" + top + "px;" + + "left:" + padding + "px;" + (extraStyle || "")); }; - MouseHandler.prototype.cancelContextMenu = function () { - var stop = function (e) { - if (e && e.domEvent && e.domEvent.type != "contextmenu") - return; - this.editor.off("nativecontextmenu", stop); - if (e && e.domEvent) - event.stopEvent(e.domEvent); - }.bind(this); - setTimeout(stop, 10); - this.editor.on("nativecontextmenu", stop); + Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) { + if (this.session.$bidiHandler.isBidiRow(range.start.row)) + return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle); + var height = config.lineHeight; + var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; + var top = this.$getTop(range.start.row, config); + var left = this.$padding + range.start.column * config.characterWidth; + this.elt(clazz, "height:" + height + "px;" + + "width:" + width + "px;" + + "top:" + top + "px;" + + "left:" + left + "px;" + (extraStyle || "")); }; - MouseHandler.prototype.destroy = function () { - if (this.releaseMouse) - this.releaseMouse(); + Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) { + var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding; + var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column); + selections.forEach(function (selection) { + this.elt(clazz, "height:" + height + "px;" + + "width:" + (selection.width + (extraLength || 0)) + "px;" + + "top:" + top + "px;" + + "left:" + (padding + selection.left) + "px;" + (extraStyle || "")); + }, this); }; - return MouseHandler; + Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { + var top = this.$getTop(range.start.row, config); + var height = config.lineHeight; + if (range.start.row != range.end.row) + height += this.$getTop(range.end.row, config) - top; + this.elt(clazz, "height:" + height + "px;" + + "top:" + top + "px;" + + "left:0;right:0;" + (extraStyle || "")); + }; + Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { + var top = this.$getTop(range.start.row, config); + var height = config.lineHeight; + this.elt(clazz, "height:" + height + "px;" + + "top:" + top + "px;" + + "left:0;right:0;" + (extraStyle || "")); + }; + return Marker; }()); -MouseHandler.prototype.releaseMouse = null; -config.defineOptions(MouseHandler.prototype, "mouseHandler", { - scrollSpeed: { initialValue: 2 }, - dragDelay: { initialValue: (useragent.isMac ? 150 : 0) }, - dragEnabled: { initialValue: true }, - focusTimeout: { initialValue: 0 }, - tooltipFollowsMouse: { initialValue: true } -}); -exports.MouseHandler = MouseHandler; +Marker.prototype.$padding = 0; +function getBorderClass(tl, tr, br, bl) { + return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0); +} +exports.Marker = Marker; }); -ace.define("ace/mouse/fold_handler",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var FoldHandler = /** @class */ (function () { - function FoldHandler(editor) { - editor.on("click", function (e) { - var position = e.getDocumentPosition(); - var session = editor.session; - var fold = session.getFoldAt(position.row, position.column, 1); - if (fold) { - if (e.getAccelKey()) - session.removeFold(fold); - else - session.expandFold(fold); - e.stop(); - } - var target = e.domEvent && e.domEvent.target; - if (target && dom.hasCssClass(target, "ace_inline_button")) { - if (dom.hasCssClass(target, "ace_toggle_wrap")) { - session.setOption("wrap", !session.getUseWrapMode()); - editor.renderer.scrollCursorIntoView(); - } - } - }); - editor.on("gutterclick", function (e) { - var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); - if (gutterRegion == "foldWidgets") { - var row = e.getDocumentPosition().row; - var session = editor.session; - if (session.foldWidgets && session.foldWidgets[row]) - editor.session.onFoldWidgetClick(row, e); - if (!editor.isFocused()) - editor.focus(); - e.stop(); - } - }); - editor.on("gutterdblclick", function (e) { - var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); - if (gutterRegion == "foldWidgets") { - var row = e.getDocumentPosition().row; - var session = editor.session; - var data = session.getParentFoldRangeData(row, true); - var range = data.range || data.firstRange; - if (range) { - row = range.start.row; - var fold = session.getFoldAt(row, session.getLine(row).length, 1); - if (fold) { - session.removeFold(fold); - } - else { - session.addFold("...", range); - editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 }); - } - } - e.stop(); - } - }); - } - return FoldHandler; -}()); -exports.FoldHandler = FoldHandler; +ace.define("ace/layer/text_util",["require","exports","module"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className. +var textTokens = new Set(["text", "rparen", "lparen"]); +exports.isTextToken = function (tokenType) { + return textTokens.has(tokenType); +}; }); -ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"], function(require, exports, module){"use strict"; -var keyUtil = require("../lib/keys"); -var event = require("../lib/event"); -var KeyBinding = /** @class */ (function () { - function KeyBinding(editor) { - this.$editor = editor; - this.$data = { editor: editor }; - this.$handlers = []; - this.setDefaultHandler(editor.commands); +ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter","ace/config","ace/layer/text_util"], function(require, exports, module){"use strict"; +var oop = require("../lib/oop"); +var dom = require("../lib/dom"); +var lang = require("../lib/lang"); +var Lines = require("./lines").Lines; +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var nls = require("../config").nls; +var isTextToken = require("./text_util").isTextToken; +var Text = /** @class */ (function () { + function Text(parentEl) { + this.dom = dom; + this.element = this.dom.createElement("div"); + this.element.className = "ace_layer ace_text-layer"; + parentEl.appendChild(this.element); + this.$updateEolChar = this.$updateEolChar.bind(this); + this.$lines = new Lines(this.element); } - KeyBinding.prototype.setDefaultHandler = function (kb) { - this.removeKeyboardHandler(this.$defaultHandler); - this.$defaultHandler = kb; - this.addKeyboardHandler(kb, 0); + Text.prototype.$updateEolChar = function () { + var doc = this.session.doc; + var unixMode = doc.getNewLineCharacter() == "\n" && doc.getNewLineMode() != "windows"; + var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF; + if (this.EOL_CHAR != EOL_CHAR) { + this.EOL_CHAR = EOL_CHAR; + return true; + } }; - KeyBinding.prototype.setKeyboardHandler = function (kb) { - var h = this.$handlers; - if (h[h.length - 1] == kb) - return; - while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) - this.removeKeyboardHandler(h[h.length - 1]); - this.addKeyboardHandler(kb, 1); + Text.prototype.setPadding = function (padding) { + this.$padding = padding; + this.element.style.margin = "0 " + padding + "px"; }; - KeyBinding.prototype.addKeyboardHandler = function (kb, pos) { - if (!kb) - return; - if (typeof kb == "function" && !kb.handleKeyboard) - kb.handleKeyboard = kb; - var i = this.$handlers.indexOf(kb); - if (i != -1) - this.$handlers.splice(i, 1); - if (pos == undefined) - this.$handlers.push(kb); - else - this.$handlers.splice(pos, 0, kb); - if (i == -1 && kb.attach) - kb.attach(this.$editor); + Text.prototype.getLineHeight = function () { + return this.$fontMetrics.$characterSize.height || 0; }; - KeyBinding.prototype.removeKeyboardHandler = function (kb) { - var i = this.$handlers.indexOf(kb); - if (i == -1) - return false; - this.$handlers.splice(i, 1); - kb.detach && kb.detach(this.$editor); - return true; + Text.prototype.getCharacterWidth = function () { + return this.$fontMetrics.$characterSize.width || 0; }; - KeyBinding.prototype.getKeyboardHandler = function () { - return this.$handlers[this.$handlers.length - 1]; + Text.prototype.$setFontMetrics = function (measure) { + this.$fontMetrics = measure; + this.$fontMetrics.on("changeCharacterSize", + function (e) { + this._signal("changeCharacterSize", e); + }.bind(this)); + this.$pollSizeChanges(); }; - KeyBinding.prototype.getStatusText = function () { - var data = this.$data; - var editor = data.editor; - return this.$handlers.map(function (h) { - return h.getStatusText && h.getStatusText(editor, data) || ""; - }).filter(Boolean).join(" "); + Text.prototype.checkForSizeChanges = function () { + this.$fontMetrics.checkForSizeChanges(); }; - KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) { - var toExecute; - var success = false; - var commands = this.$editor.commands; - for (var i = this.$handlers.length; i--;) { - toExecute = this.$handlers[i].handleKeyboard( - this.$data, hashId, keyString, keyCode, e); - if (!toExecute || !toExecute.command) - continue; - if (toExecute.command == "null") { - success = true; - } - else { - success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); - } - if (success && e && hashId != -1 && - toExecute["passEvent"] != true && toExecute.command["passEvent"] != true) { - event.stopEvent(e); - } - if (success) - break; + Text.prototype.$pollSizeChanges = function () { + return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges(); + }; + Text.prototype.setSession = function (session) { + this.session = session; + if (session) + this.$computeTabString(); + }; + Text.prototype.setShowInvisibles = function (showInvisibles) { + if (this.showInvisibles == showInvisibles) + return false; + this.showInvisibles = showInvisibles; + if (typeof showInvisibles == "string") { + this.showSpaces = /tab/i.test(showInvisibles); + this.showTabs = /space/i.test(showInvisibles); + this.showEOL = /eol/i.test(showInvisibles); } - if (!success && hashId == -1) { - toExecute = { command: "insertstring" }; - success = commands.exec("insertstring", this.$editor, keyString); + else { + this.showSpaces = this.showTabs = this.showEOL = showInvisibles; } - if (success && this.$editor._signal) - this.$editor._signal("keyboardActivity", toExecute); - return success; + this.$computeTabString(); + return true; }; - KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) { - var keyString = keyUtil.keyCodeToString(keyCode); - return this.$callKeyboardHandlers(hashId, keyString, keyCode, e); + Text.prototype.setDisplayIndentGuides = function (display) { + if (this.displayIndentGuides == display) + return false; + this.displayIndentGuides = display; + this.$computeTabString(); + return true; }; - KeyBinding.prototype.onTextInput = function (text) { - return this.$callKeyboardHandlers(-1, text); + Text.prototype.setHighlightIndentGuides = function (highlight) { + if (this.$highlightIndentGuides === highlight) + return false; + this.$highlightIndentGuides = highlight; + return highlight; }; - return KeyBinding; -}()); -exports.KeyBinding = KeyBinding; - -}); - -ace.define("ace/lib/bidiutil",["require","exports","module"], function(require, exports, module){"use strict"; -var ArabicAlefBetIntervalsBegine = ['\u0621', '\u0641']; -var ArabicAlefBetIntervalsEnd = ['\u063A', '\u064a']; -var dir = 0, hiLevel = 0; -var lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false; -var impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0] -]; -var impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1] -]; -var LTR = 0, RTL = 1; -var L = 0; -var R = 1; -var EN = 2; -var AN = 3; -var ON = 4; -var B = 5; -var S = 6; -var AL = 7; -var WS = 8; -var CS = 9; -var ES = 10; -var ET = 11; -var NSM = 12; -var LRE = 13; -var RLE = 14; -var PDF = 15; -var LRO = 16; -var RLO = 17; -var BN = 18; -var UnicodeTBL00 = [ - BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN, - BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S, - WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS, - EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON, - ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, - L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, - ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, - L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN, - BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, - BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, - CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON, - ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON -]; -var UnicodeTBL20 = [ - WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R, - ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, - ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS, - ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, - ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, - ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS -]; -function _computeLevels(chars, levels, len, charTypes) { - var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = []; - if (!charTypes) { - for (i = 0, charTypes = []; i < len; i++) { - charTypes[i] = _getCharacterType(chars[i]); - } - } - hiLevel = dir; - lastArabic = false; - hasUBAT_AL = false; - hasUBAT_B = false; - hasUBAT_S = false; - for (ix = 0; ix < len; ix++) { - prevState = newState; - classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix); - newState = impTab[prevState][newClass]; - action = newState & 0xF0; - newState &= 0x0F; - levels[ix] = newLevel = impTab[newState][5]; - if (action > 0) { - if (action == 0x10) { - for (i = condPos; i < ix; i++) { - levels[i] = 1; - } - condPos = -1; + Text.prototype.$computeTabString = function () { + var tabSize = this.session.getTabSize(); + this.tabSize = tabSize; var tabStr = this.$tabStrings = [0]; + for (var i = 1; i < tabSize + 1; i++) { + if (this.showTabs) { + var span = this.dom.createElement("span"); + span.className = "ace_invisible ace_invisible_tab"; + span.textContent = lang.stringRepeat(this.TAB_CHAR, i); + tabStr.push(span); } else { - condPos = -1; + tabStr.push(this.dom.createTextNode(lang.stringRepeat(" ", i), this.element)); } } - cond = impTab[newState][6]; - if (cond) { - if (condPos == -1) { - condPos = ix; - } + if (this.displayIndentGuides) { + this.$indentGuideRe = /\s\S| \t|\t |\s$/; + var className = "ace_indent-guide"; + var spaceClass = this.showSpaces ? " ace_invisible ace_invisible_space" : ""; + var spaceContent = this.showSpaces + ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize) + : lang.stringRepeat(" ", this.tabSize); + var tabClass = this.showTabs ? " ace_invisible ace_invisible_tab" : ""; + var tabContent = this.showTabs + ? lang.stringRepeat(this.TAB_CHAR, this.tabSize) + : spaceContent; + var span = this.dom.createElement("span"); + span.className = className + spaceClass; + span.textContent = spaceContent; + this.$tabStrings[" "] = span; + var span = this.dom.createElement("span"); + span.className = className + tabClass; + span.textContent = tabContent; + this.$tabStrings["\t"] = span; } - else { - if (condPos > -1) { - for (i = condPos; i < ix; i++) { - levels[i] = newLevel; + }; + Text.prototype.updateLines = function (config, firstRow, lastRow) { + if (this.config.lastRow != config.lastRow || + this.config.firstRow != config.firstRow) { + return this.update(config); + } + this.config = config; + var first = Math.max(firstRow, config.firstRow); + var last = Math.min(lastRow, config.lastRow); + var lineElements = this.element.childNodes; + var lineElementsIdx = 0; + for (var row = config.firstRow; row < first; row++) { + var foldLine = this.session.getFoldLine(row); + if (foldLine) { + if (foldLine.containsRow(first)) { + first = foldLine.start.row; + break; + } + else { + row = foldLine.end.row; } - condPos = -1; } + lineElementsIdx++; } - if (charTypes[ix] == B) { - levels[ix] = 0; - } - hiLevel |= newLevel; - } - if (hasUBAT_S) { - for (i = 0; i < len; i++) { - if (charTypes[i] == S) { - levels[i] = dir; - for (var j = i - 1; j >= 0; j--) { - if (charTypes[j] == WS) { - levels[j] = dir; - } - else { - break; - } + var heightChanged = false; + var row = first; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (true) { + if (row > foldStart) { + row = foldLine.end.row + 1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (row > last) + break; var lineElement = lineElements[lineElementsIdx++]; + if (lineElement) { + this.dom.removeChildren(lineElement); + this.$renderLine(lineElement, row, row == foldStart ? foldLine : false); + if (heightChanged) + lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + "px"; + var height = (config.lineHeight * this.session.getRowLength(row)) + "px"; + if (lineElement.style.height != height) { + heightChanged = true; + lineElement.style.height = height; } } + row++; } - } -} -function _invertLevel(lev, levels, _array) { - if (hiLevel < lev) { - return; - } - if (lev == 1 && dir == RTL && !hasUBAT_B) { - _array.reverse(); - return; - } - var len = _array.length, start = 0, end, lo, hi, tmp; - while (start < len) { - if (levels[start] >= lev) { - end = start + 1; - while (end < len && levels[end] >= lev) { - end++; - } - for (lo = start, hi = end - 1; lo < hi; lo++, hi--) { - tmp = _array[lo]; - _array[lo] = _array[hi]; - _array[hi] = tmp; + if (heightChanged) { + while (lineElementsIdx < this.$lines.cells.length) { + var cell = this.$lines.cells[lineElementsIdx++]; + cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + "px"; } - start = end; } - start++; - } -} -function _getCharClass(chars, types, classes, ix) { - var cType = types[ix], wType, nType, len, i; - switch (cType) { - case L: - case R: - lastArabic = false; - case ON: - case AN: - return cType; - case EN: - return lastArabic ? AN : EN; - case AL: - lastArabic = true; - hasUBAT_AL = true; - return R; - case WS: - return ON; - case CS: - if (ix < 1 || (ix + 1) >= types.length || - ((wType = classes[ix - 1]) != EN && wType != AN) || - ((nType = types[ix + 1]) != EN && nType != AN)) { - return ON; - } - if (lastArabic) { - nType = AN; + }; + Text.prototype.scrollLines = function (config) { + var oldConfig = this.config; + this.config = config; + if (this.$lines.pageChanged(oldConfig, config)) + return this.update(config); + this.$lines.moveContainer(config); + var lastRow = config.lastRow; + var oldLastRow = oldConfig ? oldConfig.lastRow : -1; + if (!oldConfig || oldLastRow < config.firstRow) + return this.update(config); + if (lastRow < oldConfig.firstRow) + return this.update(config); + if (!oldConfig || oldConfig.lastRow < config.firstRow) + return this.update(config); + if (config.lastRow < oldConfig.firstRow) + return this.update(config); + if (oldConfig.firstRow < config.firstRow) + for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) + this.$lines.shift(); + if (oldConfig.lastRow > config.lastRow) + for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--) + this.$lines.pop(); + if (config.firstRow < oldConfig.firstRow) { + this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1)); + } + if (config.lastRow > oldConfig.lastRow) { + this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow)); + } + this.$highlightIndentGuide(); + }; + Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) { + var fragment = []; + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (true) { + if (row > foldStart) { + row = foldLine.end.row + 1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; } - return nType == wType ? nType : ON; - case ES: - wType = ix > 0 ? classes[ix - 1] : B; - if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) { - return EN; + if (row > lastRow) + break; + var line = this.$lines.createCell(row, config, this.session); + var lineEl = line.element; + this.dom.removeChildren(lineEl); + dom.setStyle(lineEl.style, "height", this.$lines.computeLineHeight(row, config, this.session) + "px"); + dom.setStyle(lineEl.style, "top", this.$lines.computeLineTop(row, config, this.session) + "px"); + this.$renderLine(lineEl, row, row == foldStart ? foldLine : false); + if (this.$useLineGroups()) { + lineEl.className = "ace_line_group"; } - return ON; - case ET: - if (ix > 0 && classes[ix - 1] == EN) { - return EN; + else { + lineEl.className = "ace_line"; } - if (lastArabic) { - return ON; + fragment.push(line); + row++; + } + return fragment; + }; + Text.prototype.update = function (config) { + this.$lines.moveContainer(config); + this.config = config; + var firstRow = config.firstRow; + var lastRow = config.lastRow; + var lines = this.$lines; + while (lines.getLength()) + lines.pop(); + lines.push(this.$renderLinesFragment(config, firstRow, lastRow)); + }; + Text.prototype.$renderToken = function (parent, screenColumn, token, value) { + var self = this; + var re = /(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC\u2066\u2067\u2068\u202A\u202B\u202D\u202E\u202C\u2069\u2060\u2061\u2062\u2063\u2064\u206A\u206B\u206B\u206C\u206D\u206E\u206F]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g; + var valueFragment = this.dom.createFragment(this.element); + var m; + var i = 0; + while (m = re.exec(value)) { + var tab = m[1]; + var simpleSpace = m[2]; + var controlCharacter = m[3]; + var cjkSpace = m[4]; + var cjk = m[5]; + if (!self.showSpaces && simpleSpace) + continue; + var before = i != m.index ? value.slice(i, m.index) : ""; + i = m.index + m[0].length; + if (before) { + valueFragment.appendChild(this.dom.createTextNode(before, this.element)); } - i = ix + 1; - len = types.length; - while (i < len && types[i] == ET) { - i++; + if (tab) { + var tabSize = self.session.getScreenTabSize(screenColumn + m.index); + var text = self.$tabStrings[tabSize].cloneNode(true); + text["charCount"] = 1; + valueFragment.appendChild(text); + screenColumn += tabSize - 1; } - if (i < len && types[i] == EN) { - return EN; + else if (simpleSpace) { + if (self.showSpaces) { + var span = this.dom.createElement("span"); + span.className = "ace_invisible ace_invisible_space"; + span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length); + valueFragment.appendChild(span); + } + else { + valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element)); + } } - return ON; - case NSM: - len = types.length; - i = ix + 1; - while (i < len && types[i] == NSM) { - i++; + else if (controlCharacter) { + var span = this.dom.createElement("span"); + span.className = "ace_invisible ace_invisible_space ace_invalid"; + span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length); + valueFragment.appendChild(span); } - if (i < len) { - var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E; - wType = types[i]; - if (rtlCandidate && (wType == R || wType == AL)) { - return R; - } + else if (cjkSpace) { + screenColumn += 1; + var span = this.dom.createElement("span"); + span.style.width = (self.config.characterWidth * 2) + "px"; + span.className = self.showSpaces ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk"; + span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace; + valueFragment.appendChild(span); } - if (ix < 1 || (wType = types[ix - 1]) == B) { - return ON; + else if (cjk) { + screenColumn += 1; + var span = this.dom.createElement("span"); + span.style.width = (self.config.characterWidth * 2) + "px"; + span.className = "ace_cjk"; + span.textContent = cjk; + valueFragment.appendChild(span); } - return classes[ix - 1]; - case B: - lastArabic = false; - hasUBAT_B = true; - return dir; - case S: - hasUBAT_S = true; - return ON; - case LRE: - case RLE: - case LRO: - case RLO: - case PDF: - lastArabic = false; - case BN: - return ON; - } -} -function _getCharacterType(ch) { - var uc = ch.charCodeAt(0), hi = uc >> 8; - if (hi == 0) { - return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]); - } - else if (hi == 5) { - return (/[\u0591-\u05f4]/.test(ch) ? R : L); - } - else if (hi == 6) { - if (/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(ch)) - return NSM; - else if (/[\u0660-\u0669\u066b-\u066c]/.test(ch)) - return AN; - else if (uc == 0x066A) - return ET; - else if (/[\u06f0-\u06f9]/.test(ch)) - return EN; - else - return AL; - } - else if (hi == 0x20 && uc <= 0x205F) { - return UnicodeTBL20[uc & 0xFF]; - } - else if (hi == 0xFE) { - return (uc >= 0xFE70 ? AL : ON); - } - return ON; -} -function _isArabicDiacritics(ch) { - return (ch >= '\u064b' && ch <= '\u0655'); -} -exports.L = L; -exports.R = R; -exports.EN = EN; -exports.ON_R = 3; -exports.AN = 4; -exports.R_H = 5; -exports.B = 6; -exports.RLE = 7; -exports.DOT = "\xB7"; -exports.doBidiReorder = function (text, textCharTypes, isRtl) { - if (text.length < 2) - return {}; - var chars = text.split(""), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = []; - dir = isRtl ? RTL : LTR; - _computeLevels(chars, levels, chars.length, textCharTypes); - for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++) - ; - _invertLevel(2, levels, logicalFromVisual); - _invertLevel(1, levels, logicalFromVisual); - for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width - if (textCharTypes[i] === AN) { - levels[i] = exports.AN; - } - else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) - || textCharTypes[i] === ON || textCharTypes[i] === BN)) { - levels[i] = exports.ON_R; - } - else if ((i > 0 && chars[i - 1] === '\u0644') && /\u0622|\u0623|\u0625|\u0627/.test(chars[i])) { - levels[i - 1] = levels[i] = exports.R_H; - i++; - } - } - if (chars[chars.length - 1] === exports.DOT) - levels[chars.length - 1] = exports.B; - if (chars[0] === '\u202B') - levels[0] = exports.RLE; - for (var i = 0; i < logicalFromVisual.length; i++) { - bidiLevels[i] = levels[logicalFromVisual[i]]; - } - return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels }; -}; -exports.hasBidiCharacters = function (text, textCharTypes) { - var ret = false; - for (var i = 0; i < text.length; i++) { - textCharTypes[i] = _getCharacterType(text.charAt(i)); - if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN)) - ret = true; - } - return ret; -}; -exports.getVisualFromLogicalIdx = function (logIdx, rowMap) { - for (var i = 0; i < rowMap.logicalFromVisual.length; i++) { - if (rowMap.logicalFromVisual[i] == logIdx) - return i; - } - return 0; -}; - -}); - -ace.define("ace/bidihandler",["require","exports","module","ace/lib/bidiutil","ace/lib/lang"], function(require, exports, module){"use strict"; -var bidiUtil = require("./lib/bidiutil"); -var lang = require("./lib/lang"); -var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac\u202B]/; -var BidiHandler = /** @class */ (function () { - function BidiHandler(session) { - this.session = session; - this.bidiMap = {}; - this.currentRow = null; - this.bidiUtil = bidiUtil; - this.charWidths = []; - this.EOL = "\xAC"; - this.showInvisibles = true; - this.isRtlDir = false; - this.$isRtl = false; - this.line = ""; - this.wrapIndent = 0; - this.EOF = "\xB6"; - this.RLE = "\u202B"; - this.contentWidth = 0; - this.fontMetrics = null; - this.rtlLineOffset = 0; - this.wrapOffset = 0; - this.isMoveLeftOperation = false; - this.seenBidi = bidiRE.test(session.getValue()); - } - BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) { - if (!this.seenBidi) - return false; - if (screenRow !== this.currentRow) { - this.currentRow = screenRow; - this.updateRowLine(docRow, splitIndex); - this.updateBidiMap(); } - return this.bidiMap.bidiLevels; - }; - BidiHandler.prototype.onChange = function (delta) { - if (!this.seenBidi) { - if (delta.action == "insert" && bidiRE.test(delta.lines.join("\n"))) { - this.seenBidi = true; - this.currentRow = null; + valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element)); + if (!isTextToken(token.type)) { + var classes = "ace_" + token.type.replace(/\./g, " ace_"); + var span = this.dom.createElement("span"); + if (token.type == "fold") { + span.style.width = (token.value.length * this.config.characterWidth) + "px"; + span.setAttribute("title", nls("inline-fold.closed.title", "Unfold code")); } + span.className = classes; + span.appendChild(valueFragment); + parent.appendChild(span); } else { - this.currentRow = null; + parent.appendChild(valueFragment); } + return screenColumn + value.length; }; - BidiHandler.prototype.getDocumentRow = function () { - var docRow = 0; - var rowCache = this.session.$screenRowCache; - if (rowCache.length) { - var index = this.session.$getRowCacheIndex(rowCache, this.currentRow); - if (index >= 0) - docRow = this.session.$docRowCache[index]; + Text.prototype.renderIndentGuide = function (parent, value, max) { + var cols = value.search(this.$indentGuideRe); + if (cols <= 0 || cols >= max) + return value; + if (value[0] == " ") { + cols -= cols % this.tabSize; + var count = cols / this.tabSize; + for (var i = 0; i < count; i++) { + parent.appendChild(this.$tabStrings[" "].cloneNode(true)); + } + this.$highlightIndentGuide(); + return value.substr(cols); } - return docRow; + else if (value[0] == "\t") { + for (var i = 0; i < cols; i++) { + parent.appendChild(this.$tabStrings["\t"].cloneNode(true)); + } + this.$highlightIndentGuide(); + return value.substr(cols); + } + this.$highlightIndentGuide(); + return value; }; - BidiHandler.prototype.getSplitIndex = function () { - var splitIndex = 0; - var rowCache = this.session.$screenRowCache; - if (rowCache.length) { - var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow); - while (this.currentRow - splitIndex > 0) { - currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1); - if (currentIndex !== prevIndex) + Text.prototype.$highlightIndentGuide = function () { + if (!this.$highlightIndentGuides || !this.displayIndentGuides) + return; + this.$highlightIndentGuideMarker = { + indentLevel: undefined, + start: undefined, + end: undefined, + dir: undefined + }; + var lines = this.session.doc.$lines; + if (!lines) + return; + var cursor = this.session.selection.getCursor(); + var initialIndent = /^\s*/.exec(this.session.doc.getLine(cursor.row))[0].length; + var elementIndentLevel = Math.floor(initialIndent / this.tabSize); + this.$highlightIndentGuideMarker = { + indentLevel: elementIndentLevel, + start: cursor.row + }; + var bracketHighlight = this.session.$bracketHighlight; + if (bracketHighlight) { + var ranges = this.session.$bracketHighlight.ranges; + for (var i = 0; i < ranges.length; i++) { + if (cursor.row !== ranges[i].start.row) { + this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1; + if (cursor.row > ranges[i].start.row) { + this.$highlightIndentGuideMarker.dir = -1; + } + else { + this.$highlightIndentGuideMarker.dir = 1; + } break; - prevIndex = currentIndex; - splitIndex++; + } } } - else { - splitIndex = this.currentRow; + if (!this.$highlightIndentGuideMarker.end) { + if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) { + this.$highlightIndentGuideMarker.dir = 1; + for (var i = cursor.row + 1; i < lines.length; i++) { + var line = lines[i]; + var currentIndent = /^\s*/.exec(line)[0].length; + if (line !== '') { + this.$highlightIndentGuideMarker.end = i; + if (currentIndent <= initialIndent) + break; + } + } + } } - return splitIndex; + this.$renderHighlightIndentGuide(); }; - BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) { - if (docRow === undefined) - docRow = this.getDocumentRow(); - var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL; - this.wrapIndent = 0; - this.line = this.session.getLine(docRow); - this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE; - if (this.session.$useWrapMode) { - var splits = this.session.$wrapData[docRow]; - if (splits) { - if (splitIndex === undefined) - splitIndex = this.getSplitIndex(); - if (splitIndex > 0 && splits.length) { - this.wrapIndent = splits.indent; - this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L]; - this.line = (splitIndex < splits.length) ? - this.line.substring(splits[splitIndex - 1], splits[splitIndex]) : - this.line.substring(splits[splits.length - 1]); + Text.prototype.$clearActiveIndentGuide = function () { + var activeIndentGuides = this.element.querySelectorAll(".ace_indent-guide-active"); + for (var i = 0; i < activeIndentGuides.length; i++) { + activeIndentGuides[i].classList.remove("ace_indent-guide-active"); + } + }; + Text.prototype.$setIndentGuideActive = function (cell, indentLevel) { + var line = this.session.doc.getLine(cell.row); + if (line !== "") { + var element = cell.element; + if (cell.element.classList && cell.element.classList.contains("ace_line_group")) { + if (cell.element.childNodes.length > 0) { + element = cell.element.childNodes[0]; } else { - this.line = this.line.substring(0, splits[splitIndex]); + return; + } + } + var childNodes = element.childNodes; + if (childNodes) { + var node = childNodes[indentLevel - 1]; + if (node && node.classList && node.classList.contains("ace_indent-guide")) + node.classList.add("ace_indent-guide-active"); + } + } + }; + Text.prototype.$renderHighlightIndentGuide = function () { + if (!this.$lines) + return; + var cells = this.$lines.cells; + this.$clearActiveIndentGuide(); + var indentLevel = this.$highlightIndentGuideMarker.indentLevel; + if (indentLevel !== 0) { + if (this.$highlightIndentGuideMarker.dir === 1) { + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start + + 1) { + if (cell.row >= this.$highlightIndentGuideMarker.end) + break; + this.$setIndentGuideActive(cell, indentLevel); + } } - if (splitIndex == splits.length) { - this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT; + } + else { + for (var i = cells.length - 1; i >= 0; i--) { + var cell = cells[i]; + if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) { + if (cell.row < this.$highlightIndentGuideMarker.end) + break; + this.$setIndentGuideActive(cell, indentLevel); + } } } } - else { - this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT; - } - var session = this.session, shift = 0, size; - this.line = this.line.replace(/\t|[\u1100-\u2029, \u202F-\uFFE6]/g, function (ch, i) { - if (ch === '\t' || session.isFullWidth(ch.charCodeAt(0))) { - size = (ch === '\t') ? session.getScreenTabSize(i + shift) : 2; - shift += size - 1; - return lang.stringRepeat(bidiUtil.DOT, size); + }; + Text.prototype.$createLineElement = function (parent) { + var lineEl = this.dom.createElement("div"); + lineEl.className = "ace_line"; + lineEl.style.height = this.config.lineHeight + "px"; + return lineEl; + }; + Text.prototype.$renderWrappedLine = function (parent, tokens, splits) { + var chars = 0; + var split = 0; + var splitChars = splits[0]; + var screenColumn = 0; + var lineEl = this.$createLineElement(); + parent.appendChild(lineEl); + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + var value = token.value; + if (i == 0 && this.displayIndentGuides) { + chars = value.length; + value = this.renderIndentGuide(lineEl, value, splitChars); + if (!value) + continue; + chars -= value.length; + } + if (chars + value.length < splitChars) { + screenColumn = this.$renderToken(lineEl, screenColumn, token, value); + chars += value.length; + } + else { + while (chars + value.length >= splitChars) { + screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars)); + value = value.substring(splitChars - chars); + chars = splitChars; + lineEl = this.$createLineElement(); + parent.appendChild(lineEl); + var text = this.dom.createTextNode(lang.stringRepeat("\xa0", splits.indent), this.element); + text["charCount"] = 0; // not to take into account when we are counting columns + lineEl.appendChild(text); + split++; + screenColumn = 0; + splitChars = splits[split] || Number.MAX_VALUE; + } + if (value.length != 0) { + chars += value.length; + screenColumn = this.$renderToken(lineEl, screenColumn, token, value); + } } - return ch; - }); - if (this.isRtlDir) { - this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line; - this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width; } + if (splits[splits.length - 1] > this.MAX_LINE_LENGTH) + this.$renderOverflowMessage(lineEl, screenColumn, null, "", true); }; - BidiHandler.prototype.updateBidiMap = function () { - var textCharTypes = []; - if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) { - this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir); - } - else { - this.bidiMap = {}; + Text.prototype.$renderSimpleLine = function (parent, tokens) { + var screenColumn = 0; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + var value = token.value; + if (i == 0 && this.displayIndentGuides) { + value = this.renderIndentGuide(parent, value); + if (!value) + continue; + } + if (screenColumn + value.length > this.MAX_LINE_LENGTH) + return this.$renderOverflowMessage(parent, screenColumn, token, value); + screenColumn = this.$renderToken(parent, screenColumn, token, value); } }; - BidiHandler.prototype.markAsDirty = function () { - this.currentRow = null; - }; - BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) { - if (this.characterWidth === fontMetrics.$characterSize.width) - return; - this.fontMetrics = fontMetrics; - var characterWidth = this.characterWidth = fontMetrics.$characterSize.width; - var bidiCharWidth = fontMetrics.$measureCharWidth("\u05d4"); - this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth; - this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth; - this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45; - this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0; - this.currentRow = null; - }; - BidiHandler.prototype.setShowInvisibles = function (showInvisibles) { - this.showInvisibles = showInvisibles; - this.currentRow = null; - }; - BidiHandler.prototype.setEolChar = function (eolChar) { - this.EOL = eolChar; - }; - BidiHandler.prototype.setContentWidth = function (width) { - this.contentWidth = width; + Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) { + token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn)); + var overflowEl = this.dom.createElement("span"); + overflowEl.className = "ace_inline_button ace_keyword ace_toggle_wrap"; + overflowEl.textContent = hide ? "" : ""; + parent.appendChild(overflowEl); }; - BidiHandler.prototype.isRtlLine = function (row) { - if (this.$isRtl) - return true; - if (row != undefined) - return (this.session.getLine(row).charAt(0) == this.RLE); + Text.prototype.$renderLine = function (parent, row, foldLine) { + if (!foldLine && foldLine != false) + foldLine = this.session.getFoldLine(row); + if (foldLine) + var tokens = this.$getFoldLineTokens(row, foldLine); else - return this.isRtlDir; - }; - BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) { - var cursor = editor.getCursorPosition(); - for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) { - if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE) - editor.session.doc.removeInLine(row, 0, 1); - else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE) - editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE); - } - }; - BidiHandler.prototype.getPosLeft = function (col) { - col -= this.wrapIndent; - var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0; - var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary; - var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0; - if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0) - visualIdx++; - for (var i = 0; i < visualIdx; i++) { - left += this.charWidths[levels[i]]; - } - if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0)) - left += this.charWidths[levels[visualIdx]]; - if (this.wrapIndent) - left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; - if (this.isRtlDir) - left += this.rtlLineOffset; - return left; - }; - BidiHandler.prototype.getSelections = function (startCol, endCol) { - var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0; - if (this.wrapIndent) - offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; - for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) { - logIdx = map.logicalFromVisual[visIdx]; - level = levels[visIdx]; - isSelected = (logIdx >= selColMin) && (logIdx < selColMax); - if (isSelected && !isSelectedPrev) { - selectionStart = offset; + var tokens = this.session.getTokens(row); + var lastLineEl = parent; + if (tokens.length) { + var splits = this.session.getRowSplitData(row); + if (splits && splits.length) { + this.$renderWrappedLine(parent, tokens, splits); + var lastLineEl = parent.lastChild; } - else if (!isSelected && isSelectedPrev) { - selections.push({ left: selectionStart, width: offset - selectionStart }); + else { + var lastLineEl = parent; + if (this.$useLineGroups()) { + lastLineEl = this.$createLineElement(); + parent.appendChild(lastLineEl); + } + this.$renderSimpleLine(lastLineEl, tokens); } - offset += this.charWidths[level]; - isSelectedPrev = isSelected; } - if (isSelected && (visIdx === levels.length)) { - selections.push({ left: selectionStart, width: offset - selectionStart }); + else if (this.$useLineGroups()) { + lastLineEl = this.$createLineElement(); + parent.appendChild(lastLineEl); } - if (this.isRtlDir) { - for (var i = 0; i < selections.length; i++) { - selections[i].left += this.rtlLineOffset; - } + if (this.showEOL && lastLineEl) { + if (foldLine) + row = foldLine.end.row; + var invisibleEl = this.dom.createElement("span"); + invisibleEl.className = "ace_invisible ace_invisible_eol"; + invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR; + lastLineEl.appendChild(invisibleEl); } - return selections; }; - BidiHandler.prototype.offsetToCol = function (posX) { - if (this.isRtlDir) - posX -= this.rtlLineOffset; - var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]]; - if (this.wrapIndent) - posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; - while (posX > offset + charWidth / 2) { - offset += charWidth; - if (visualIdx === levels.length - 1) { - charWidth = 0; - break; + Text.prototype.$getFoldLineTokens = function (row, foldLine) { + var session = this.session; + var renderTokens = []; + function addTokens(tokens, from, to) { + var idx = 0, col = 0; + while ((col + tokens[idx].value.length) < from) { + col += tokens[idx].value.length; + idx++; + if (idx == tokens.length) + return; + } + if (col != from) { + var value = tokens[idx].value.substring(from - col); + if (value.length > (to - from)) + value = value.substring(0, to - from); + renderTokens.push({ + type: tokens[idx].type, + value: value + }); + col = from + value.length; + idx += 1; + } + while (col < to && idx < tokens.length) { + var value = tokens[idx].value; + if (value.length + col > to) { + renderTokens.push({ + type: tokens[idx].type, + value: value.substring(0, to - col) + }); + } + else + renderTokens.push(tokens[idx]); + col += value.length; + idx += 1; } - charWidth = this.charWidths[levels[++visualIdx]]; - } - if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) { - if (posX < offset) - visualIdx--; - logicalIdx = this.bidiMap.logicalFromVisual[visualIdx]; - } - else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) { - logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx] - : this.bidiMap.logicalFromVisual[visualIdx - 1]); - } - else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0)) - || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) { - logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx]; - } - else { - if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0) - visualIdx--; - logicalIdx = this.bidiMap.logicalFromVisual[visualIdx]; } - if (logicalIdx === 0 && this.isRtlDir) - logicalIdx++; - return (logicalIdx + this.wrapIndent); + var tokens = session.getTokens(row); + foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) { + if (placeholder != null) { + renderTokens.push({ + type: "fold", + value: placeholder + }); + } + else { + if (isNewRow) + tokens = session.getTokens(row); + if (tokens.length) + addTokens(tokens, lastColumn, column); + } + }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); + return renderTokens; }; - return BidiHandler; + Text.prototype.$useLineGroups = function () { + return this.session.getUseWrapMode(); + }; + return Text; }()); -exports.BidiHandler = BidiHandler; +Text.prototype.EOF_CHAR = "\xB6"; +Text.prototype.EOL_CHAR_LF = "\xAC"; +Text.prototype.EOL_CHAR_CRLF = "\xa4"; +Text.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF; +Text.prototype.TAB_CHAR = "\u2014"; //"\u21E5"; +Text.prototype.SPACE_CHAR = "\xB7"; +Text.prototype.$padding = 0; +Text.prototype.MAX_LINE_LENGTH = 10000; +Text.prototype.showInvisibles = false; +Text.prototype.showSpaces = false; +Text.prototype.showTabs = false; +Text.prototype.showEOL = false; +Text.prototype.displayIndentGuides = true; +Text.prototype.$highlightIndentGuides = true; +Text.prototype.$tabStrings = []; +Text.prototype.destroy = {}; +Text.prototype.onChangeTabSize = Text.prototype.$computeTabString; +oop.implement(Text.prototype, EventEmitter); +exports.Text = Text; }); -ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var lang = require("./lib/lang"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Range = require("./range").Range; -var Selection = /** @class */ (function () { - function Selection(session) { - this.session = session; - this.doc = session.getDocument(); - this.clearSelection(); - this.cursor = this.lead = this.doc.createAnchor(0, 0); - this.anchor = this.doc.createAnchor(0, 0); - this.$silent = false; - var self = this; - this.cursor.on("change", function (e) { - self.$cursorChanged = true; - if (!self.$silent) - self._emit("changeCursor"); - if (!self.$isEmpty && !self.$silent) - self._emit("changeSelection"); - if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) - self.$desiredColumn = null; - }); - this.anchor.on("change", function () { - self.$anchorChanged = true; - if (!self.$isEmpty && !self.$silent) - self._emit("changeSelection"); - }); - } - Selection.prototype.isEmpty = function () { - return this.$isEmpty || (this.anchor.row == this.lead.row && - this.anchor.column == this.lead.column); - }; - Selection.prototype.isMultiLine = function () { - return !this.$isEmpty && this.anchor.row != this.cursor.row; - }; - Selection.prototype.getCursor = function () { - return this.lead.getPosition(); - }; - Selection.prototype.setAnchor = function (row, column) { - this.$isEmpty = false; - this.anchor.setPosition(row, column); - }; - Selection.prototype.getAnchor = function () { - if (this.$isEmpty) - return this.getSelectionLead(); - return this.anchor.getPosition(); - }; - Selection.prototype.getSelectionLead = function () { - return this.lead.getPosition(); - }; - Selection.prototype.isBackwards = function () { - var anchor = this.anchor; - var lead = this.lead; - return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); - }; - Selection.prototype.getRange = function () { - var anchor = this.anchor; - var lead = this.lead; - if (this.$isEmpty) - return Range.fromPoints(lead, lead); - return this.isBackwards() - ? Range.fromPoints(lead, anchor) - : Range.fromPoints(anchor, lead); - }; - Selection.prototype.clearSelection = function () { - if (!this.$isEmpty) { - this.$isEmpty = true; - this._emit("changeSelection"); - } - }; - Selection.prototype.selectAll = function () { - this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE); - }; - Selection.prototype.setRange = function (range, reverse) { - var start = reverse ? range.end : range.start; - var end = reverse ? range.start : range.end; - this.$setSelection(start.row, start.column, end.row, end.column); - }; - Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) { - if (this.$silent) - return; - var wasEmpty = this.$isEmpty; - var wasMultiselect = this.inMultiSelectMode; - this.$silent = true; - this.$cursorChanged = this.$anchorChanged = false; - this.anchor.setPosition(anchorRow, anchorColumn); - this.cursor.setPosition(cursorRow, cursorColumn); - this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor); - this.$silent = false; - if (this.$cursorChanged) - this._emit("changeCursor"); - if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect) - this._emit("changeSelection"); - }; - Selection.prototype.$moveSelection = function (mover) { - var lead = this.lead; - if (this.$isEmpty) - this.setSelectionAnchor(lead.row, lead.column); - mover.call(this); - }; - Selection.prototype.selectTo = function (row, column) { - this.$moveSelection(function () { - this.moveCursorTo(row, column); - }); - }; - Selection.prototype.selectToPosition = function (pos) { - this.$moveSelection(function () { - this.moveCursorToPosition(pos); - }); - }; - Selection.prototype.moveTo = function (row, column) { - this.clearSelection(); - this.moveCursorTo(row, column); - }; - Selection.prototype.moveToPosition = function (pos) { - this.clearSelection(); - this.moveCursorToPosition(pos); - }; - Selection.prototype.selectUp = function () { - this.$moveSelection(this.moveCursorUp); - }; - Selection.prototype.selectDown = function () { - this.$moveSelection(this.moveCursorDown); - }; - Selection.prototype.selectRight = function () { - this.$moveSelection(this.moveCursorRight); - }; - Selection.prototype.selectLeft = function () { - this.$moveSelection(this.moveCursorLeft); - }; - Selection.prototype.selectLineStart = function () { - this.$moveSelection(this.moveCursorLineStart); - }; - Selection.prototype.selectLineEnd = function () { - this.$moveSelection(this.moveCursorLineEnd); - }; - Selection.prototype.selectFileEnd = function () { - this.$moveSelection(this.moveCursorFileEnd); - }; - Selection.prototype.selectFileStart = function () { - this.$moveSelection(this.moveCursorFileStart); - }; - Selection.prototype.selectWordRight = function () { - this.$moveSelection(this.moveCursorWordRight); - }; - Selection.prototype.selectWordLeft = function () { - this.$moveSelection(this.moveCursorWordLeft); - }; - Selection.prototype.getWordRange = function (row, column) { - if (typeof column == "undefined") { - var cursor = row || this.lead; - row = cursor.row; - column = cursor.column; - } - return this.session.getWordRange(row, column); - }; - Selection.prototype.selectWord = function () { - this.setSelectionRange(this.getWordRange()); - }; - Selection.prototype.selectAWord = function () { - var cursor = this.getCursor(); - var range = this.session.getAWordRange(cursor.row, cursor.column); - this.setSelectionRange(range); - }; - Selection.prototype.getLineRange = function (row, excludeLastChar) { - var rowStart = typeof row == "number" ? row : this.lead.row; - var rowEnd; - var foldLine = this.session.getFoldLine(rowStart); - if (foldLine) { - rowStart = foldLine.start.row; - rowEnd = foldLine.end.row; - } - else { - rowEnd = rowStart; - } - if (excludeLastChar === true) - return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); - else - return new Range(rowStart, 0, rowEnd + 1, 0); +ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var Cursor = /** @class */ (function () { + function Cursor(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_cursor-layer"; + parentEl.appendChild(this.element); + this.isVisible = false; + this.isBlinking = true; + this.blinkInterval = 1000; + this.smoothBlinking = false; + this.cursors = []; + this.cursor = this.addCursor(); + dom.addCssClass(this.element, "ace_hidden-cursors"); + this.$updateCursors = this.$updateOpacity.bind(this); + } + Cursor.prototype.$updateOpacity = function (val) { + var cursors = this.cursors; + for (var i = cursors.length; i--;) + dom.setStyle(cursors[i].style, "opacity", val ? "" : "0"); }; - Selection.prototype.selectLine = function () { - this.setSelectionRange(this.getLineRange()); + Cursor.prototype.$startCssAnimation = function () { + var cursors = this.cursors; + for (var i = cursors.length; i--;) + cursors[i].style.animationDuration = this.blinkInterval + "ms"; + this.$isAnimating = true; + setTimeout(function () { + if (this.$isAnimating) { + dom.addCssClass(this.element, "ace_animate-blinking"); + } + }.bind(this)); }; - Selection.prototype.moveCursorUp = function () { - this.moveCursorBy(-1, 0); + Cursor.prototype.$stopCssAnimation = function () { + this.$isAnimating = false; + dom.removeCssClass(this.element, "ace_animate-blinking"); }; - Selection.prototype.moveCursorDown = function () { - this.moveCursorBy(1, 0); + Cursor.prototype.setPadding = function (padding) { + this.$padding = padding; }; - Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) { - var start = cursor.column; - var end = cursor.column + tabSize; - if (direction < 0) { - start = cursor.column - tabSize; - end = cursor.column; - } - return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(" ").length - 1 == tabSize; + Cursor.prototype.setSession = function (session) { + this.session = session; }; - Selection.prototype.moveCursorLeft = function () { - var cursor = this.lead.getPosition(), fold; - if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { - this.moveCursorTo(fold.start.row, fold.start.column); - } - else if (cursor.column === 0) { - if (cursor.row > 0) { - this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); - } - } - else { - var tabSize = this.session.getTabSize(); - if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) { - this.moveCursorBy(0, -tabSize); - } - else { - this.moveCursorBy(0, -1); - } + Cursor.prototype.setBlinking = function (blinking) { + if (blinking != this.isBlinking) { + this.isBlinking = blinking; + this.restartTimer(); } }; - Selection.prototype.moveCursorRight = function () { - var cursor = this.lead.getPosition(), fold; - if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { - this.moveCursorTo(fold.end.row, fold.end.column); - } - else if (this.lead.column == this.doc.getLine(this.lead.row).length) { - if (this.lead.row < this.doc.getLength() - 1) { - this.moveCursorTo(this.lead.row + 1, 0); - } + Cursor.prototype.setBlinkInterval = function (blinkInterval) { + if (blinkInterval != this.blinkInterval) { + this.blinkInterval = blinkInterval; + this.restartTimer(); } - else { - var tabSize = this.session.getTabSize(); - var cursor = this.lead; - if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) { - this.moveCursorBy(0, tabSize); - } - else { - this.moveCursorBy(0, 1); - } + }; + Cursor.prototype.setSmoothBlinking = function (smoothBlinking) { + if (smoothBlinking != this.smoothBlinking) { + this.smoothBlinking = smoothBlinking; + dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); + this.$updateCursors(true); + this.restartTimer(); } }; - Selection.prototype.moveCursorLineStart = function () { - var row = this.lead.row; - var column = this.lead.column; - var screenRow = this.session.documentToScreenRow(row, column); - var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); - var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column); - var leadingSpace = beforeCursor.match(/^\s*/); - if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) - firstColumnPosition.column += leadingSpace[0].length; - this.moveCursorToPosition(firstColumnPosition); + Cursor.prototype.addCursor = function () { + var el = dom.createElement("div"); + el.className = "ace_cursor"; + this.element.appendChild(el); + this.cursors.push(el); + return el; }; - Selection.prototype.moveCursorLineEnd = function () { - var lead = this.lead; - var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); - if (this.lead.column == lineEnd.column) { - var line = this.session.getLine(lineEnd.row); - if (lineEnd.column == line.length) { - var textEnd = line.search(/\s+$/); - if (textEnd > 0) - lineEnd.column = textEnd; - } + Cursor.prototype.removeCursor = function () { + if (this.cursors.length > 1) { + var el = this.cursors.pop(); + el.parentNode.removeChild(el); + return el; } - this.moveCursorTo(lineEnd.row, lineEnd.column); - }; - Selection.prototype.moveCursorFileEnd = function () { - var row = this.doc.getLength() - 1; - var column = this.doc.getLine(row).length; - this.moveCursorTo(row, column); }; - Selection.prototype.moveCursorFileStart = function () { - this.moveCursorTo(0, 0); + Cursor.prototype.hideCursor = function () { + this.isVisible = false; + dom.addCssClass(this.element, "ace_hidden-cursors"); + this.restartTimer(); }; - Selection.prototype.moveCursorLongWordRight = function () { - var row = this.lead.row; - var column = this.lead.column; - var line = this.doc.getLine(row); - var rightOfCursor = line.substring(column); - this.session.nonTokenRe.lastIndex = 0; - this.session.tokenRe.lastIndex = 0; - var fold = this.session.getFoldAt(row, column, 1); - if (fold) { - this.moveCursorTo(fold.end.row, fold.end.column); - return; - } - if (this.session.nonTokenRe.exec(rightOfCursor)) { - column += this.session.nonTokenRe.lastIndex; - this.session.nonTokenRe.lastIndex = 0; - rightOfCursor = line.substring(column); - } - if (column >= line.length) { - this.moveCursorTo(row, line.length); - this.moveCursorRight(); - if (row < this.doc.getLength() - 1) - this.moveCursorWordRight(); - return; - } - if (this.session.tokenRe.exec(rightOfCursor)) { - column += this.session.tokenRe.lastIndex; - this.session.tokenRe.lastIndex = 0; - } - this.moveCursorTo(row, column); + Cursor.prototype.showCursor = function () { + this.isVisible = true; + dom.removeCssClass(this.element, "ace_hidden-cursors"); + this.restartTimer(); }; - Selection.prototype.moveCursorLongWordLeft = function () { - var row = this.lead.row; - var column = this.lead.column; - var fold; - if (fold = this.session.getFoldAt(row, column, -1)) { - this.moveCursorTo(fold.start.row, fold.start.column); - return; - } - var str = this.session.getFoldStringAt(row, column, -1); - if (str == null) { - str = this.doc.getLine(row).substring(0, column); - } - var leftOfCursor = lang.stringReverse(str); - this.session.nonTokenRe.lastIndex = 0; - this.session.tokenRe.lastIndex = 0; - if (this.session.nonTokenRe.exec(leftOfCursor)) { - column -= this.session.nonTokenRe.lastIndex; - leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); - this.session.nonTokenRe.lastIndex = 0; + Cursor.prototype.restartTimer = function () { + var update = this.$updateCursors; + clearInterval(this.intervalId); + clearTimeout(this.timeoutId); + this.$stopCssAnimation(); + if (this.smoothBlinking) { + this.$isSmoothBlinking = false; + dom.removeCssClass(this.element, "ace_smooth-blinking"); } - if (column <= 0) { - this.moveCursorTo(row, 0); - this.moveCursorLeft(); - if (row > 0) - this.moveCursorWordLeft(); + update(true); + if (!this.isBlinking || !this.blinkInterval || !this.isVisible) { + this.$stopCssAnimation(); return; } - if (this.session.tokenRe.exec(leftOfCursor)) { - column -= this.session.tokenRe.lastIndex; - this.session.tokenRe.lastIndex = 0; - } - this.moveCursorTo(row, column); - }; - Selection.prototype.$shortWordEndIndex = function (rightOfCursor) { - var index = 0, ch; - var whitespaceRe = /\s/; - var tokenRe = this.session.tokenRe; - tokenRe.lastIndex = 0; - if (this.session.tokenRe.exec(rightOfCursor)) { - index = this.session.tokenRe.lastIndex; - } - else { - while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) - index++; - if (index < 1) { - tokenRe.lastIndex = 0; - while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { - tokenRe.lastIndex = 0; - index++; - if (whitespaceRe.test(ch)) { - if (index > 2) { - index--; - break; - } - else { - while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) - index++; - if (index > 2) - break; - } - } + if (this.smoothBlinking) { + this.$isSmoothBlinking = true; + setTimeout(function () { + if (this.$isSmoothBlinking) { + dom.addCssClass(this.element, "ace_smooth-blinking"); } - } + }.bind(this)); } - tokenRe.lastIndex = 0; - return index; - }; - Selection.prototype.moveCursorShortWordRight = function () { - var row = this.lead.row; - var column = this.lead.column; - var line = this.doc.getLine(row); - var rightOfCursor = line.substring(column); - var fold = this.session.getFoldAt(row, column, 1); - if (fold) - return this.moveCursorTo(fold.end.row, fold.end.column); - if (column == line.length) { - var l = this.doc.getLength(); - do { - row++; - rightOfCursor = this.doc.getLine(row); - } while (row < l && /^\s*$/.test(rightOfCursor)); - if (!/^\s+/.test(rightOfCursor)) - rightOfCursor = ""; - column = 0; + if (dom.HAS_CSS_ANIMATION) { + this.$startCssAnimation(); } - var index = this.$shortWordEndIndex(rightOfCursor); - this.moveCursorTo(row, column + index); - }; - Selection.prototype.moveCursorShortWordLeft = function () { - var row = this.lead.row; - var column = this.lead.column; - var fold; - if (fold = this.session.getFoldAt(row, column, -1)) - return this.moveCursorTo(fold.start.row, fold.start.column); - var line = this.session.getLine(row).substring(0, column); - if (column === 0) { - do { - row--; - line = this.doc.getLine(row); - } while (row > 0 && /^\s*$/.test(line)); - column = line.length; - if (!/\s+$/.test(line)) - line = ""; + else { + var blink = /**@this{Cursor}*/ function () { + this.timeoutId = setTimeout(function () { + update(false); + }, 0.6 * this.blinkInterval); + }.bind(this); + this.intervalId = setInterval(function () { + update(true); + blink(); + }, this.blinkInterval); + blink(); } - var leftOfCursor = lang.stringReverse(line); - var index = this.$shortWordEndIndex(leftOfCursor); - return this.moveCursorTo(row, column - index); }; - Selection.prototype.moveCursorWordRight = function () { - if (this.session.$selectLongWords) - this.moveCursorLongWordRight(); - else - this.moveCursorShortWordRight(); + Cursor.prototype.getPixelPosition = function (position, onScreen) { + if (!this.config || !this.session) + return { left: 0, top: 0 }; + if (!position) + position = this.session.selection.getCursor(); + var pos = this.session.documentToScreenPosition(position); + var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row) + ? this.session.$bidiHandler.getPosLeft(pos.column) + : pos.column * this.config.characterWidth); + var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * + this.config.lineHeight; + return { left: cursorLeft, top: cursorTop }; }; - Selection.prototype.moveCursorWordLeft = function () { - if (this.session.$selectLongWords) - this.moveCursorLongWordLeft(); - else - this.moveCursorShortWordLeft(); + Cursor.prototype.isCursorInView = function (pixelPos, config) { + return pixelPos.top >= 0 && pixelPos.top < config.maxHeight; }; - Selection.prototype.moveCursorBy = function (rows, chars) { - var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column); - var offsetX; - if (chars === 0) { - if (rows !== 0) { - if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) { - offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column); - screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]); + Cursor.prototype.update = function (config) { + this.config = config; + var selections = this.session.$selectionMarkers; + var i = 0, cursorIndex = 0; + if (selections === undefined || selections.length === 0) { + selections = [{ cursor: null }]; + } + for (var i = 0, n = selections.length; i < n; i++) { + var pixelPos = this.getPixelPosition(selections[i].cursor, true); + if ((pixelPos.top > config.height + config.offset || + pixelPos.top < 0) && i > 1) { + continue; + } + var element = this.cursors[cursorIndex++] || this.addCursor(); + var style = element.style; + if (!this.drawCursor) { + if (!this.isCursorInView(pixelPos, config)) { + dom.setStyle(style, "display", "none"); } else { - offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0]; + dom.setStyle(style, "display", "block"); + dom.translate(element, pixelPos.left, pixelPos.top); + dom.setStyle(style, "width", Math.round(config.characterWidth) + "px"); + dom.setStyle(style, "height", config.lineHeight + "px"); } } - if (this.$desiredColumn) - screenPos.column = this.$desiredColumn; - else - this.$desiredColumn = screenPos.column; - } - if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) { - var widget = this.session.lineWidgets[this.lead.row]; - if (rows < 0) - rows -= widget.rowsAbove || 0; - else if (rows > 0) - rows += widget.rowCount - (widget.rowsAbove || 0); - } - var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX); - if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { + else { + this.drawCursor(element, pixelPos, config, selections[i], this.session); + } } - this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); - }; - Selection.prototype.moveCursorToPosition = function (position) { - this.moveCursorTo(position.row, position.column); + while (this.cursors.length > cursorIndex) + this.removeCursor(); + var overwrite = this.session.getOverwrite(); + this.$setOverwrite(overwrite); + this.$pixelPos = pixelPos; + this.restartTimer(); }; - Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) { - var fold = this.session.getFoldAt(row, column, 1); - if (fold) { - row = fold.start.row; - column = fold.start.column; - } - this.$keepDesiredColumnOnChange = true; - var line = this.session.getLine(row); - if (/[\uDC00-\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) { - if (this.lead.row == row && this.lead.column == column + 1) - column = column - 1; + Cursor.prototype.$setOverwrite = function (overwrite) { + if (overwrite != this.overwrite) { + this.overwrite = overwrite; + if (overwrite) + dom.addCssClass(this.element, "ace_overwrite-cursors"); else - column = column + 1; + dom.removeCssClass(this.element, "ace_overwrite-cursors"); } - this.lead.setPosition(row, column); - this.$keepDesiredColumnOnChange = false; - if (!keepDesiredColumn) - this.$desiredColumn = null; }; - Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) { - var pos = this.session.screenToDocumentPosition(row, column); - this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); + Cursor.prototype.destroy = function () { + clearInterval(this.intervalId); + clearTimeout(this.timeoutId); }; - Selection.prototype.detach = function () { - this.lead.detach(); - this.anchor.detach(); + return Cursor; +}()); +Cursor.prototype.$padding = 0; +Cursor.prototype.drawCursor = null; +exports.Cursor = Cursor; + +}); + +ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); }; - Selection.prototype.fromOrientedRange = function (range) { - this.setSelectionRange(range, range.cursor == range.start); - this.$desiredColumn = range.desiredColumn || this.$desiredColumn; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; - Selection.prototype.toOrientedRange = function (range) { - var r = this.getRange(); - if (range) { - range.start.column = r.start.column; - range.start.row = r.start.row; - range.end.column = r.end.column; - range.end.row = r.end.row; - } - else { - range = r; - } - range.cursor = this.isBackwards() ? range.start : range.end; - range.desiredColumn = this.$desiredColumn; - return range; +})(); +var oop = require("./lib/oop"); +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var MAX_SCROLL_H = 0x8000; +var Scrollbar = /** @class */ (function () { + function Scrollbar(parent, classSuffix) { + this.element = dom.createElement("div"); + this.element.className = "ace_scrollbar ace_scrollbar" + classSuffix; + this.inner = dom.createElement("div"); + this.inner.className = "ace_scrollbar-inner"; + this.inner.textContent = "\xa0"; + this.element.appendChild(this.inner); + parent.appendChild(this.element); + this.setVisible(false); + this.skipEvent = false; + event.addListener(this.element, "scroll", this.onScroll.bind(this)); + event.addListener(this.element, "mousedown", event.preventDefault); + } + Scrollbar.prototype.setVisible = function (isVisible) { + this.element.style.display = isVisible ? "" : "none"; + this.isVisible = isVisible; + this.coeff = 1; }; - Selection.prototype.getRangeOfMovements = function (func) { - var start = this.getCursor(); - try { - func(this); - var end = this.getCursor(); - return Range.fromPoints(start, end); + return Scrollbar; +}()); +oop.implement(Scrollbar.prototype, EventEmitter); +var VScrollBar = /** @class */ (function (_super) { + __extends(VScrollBar, _super); + function VScrollBar(parent, renderer) { + var _this = _super.call(this, parent, '-v') || this; + _this.scrollTop = 0; + _this.scrollHeight = 0; + renderer.$scrollbarWidth = + _this.width = dom.scrollbarWidth(parent.ownerDocument); + _this.inner.style.width = + _this.element.style.width = (_this.width || 15) + 5 + "px"; + _this.$minWidth = 0; + return _this; + } + VScrollBar.prototype.onScroll = function () { + if (!this.skipEvent) { + this.scrollTop = this.element.scrollTop; + if (this.coeff != 1) { + var h = this.element.clientHeight / this.scrollHeight; + this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h); + } + this._emit("scroll", { data: this.scrollTop }); } - catch (e) { - return Range.fromPoints(start, start); + this.skipEvent = false; + }; + VScrollBar.prototype.getWidth = function () { + return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0); + }; + VScrollBar.prototype.setHeight = function (height) { + this.element.style.height = height + "px"; + }; + VScrollBar.prototype.setScrollHeight = function (height) { + this.scrollHeight = height; + if (height > MAX_SCROLL_H) { + this.coeff = MAX_SCROLL_H / height; + height = MAX_SCROLL_H; } - finally { - this.moveCursorToPosition(start); + else if (this.coeff != 1) { + this.coeff = 1; } + this.inner.style.height = height + "px"; }; - Selection.prototype.toJSON = function () { - if (this.rangeCount) { var data = this.ranges.map(function (r) { - var r1 = r.clone(); - r1.isBackwards = r.cursor == r.start; - return r1; - }); - } - else { var data = this.getRange(); - data.isBackwards = this.isBackwards(); + VScrollBar.prototype.setScrollTop = function (scrollTop) { + if (this.scrollTop != scrollTop) { + this.skipEvent = true; + this.scrollTop = scrollTop; + this.element.scrollTop = scrollTop * this.coeff; } - return data; }; - Selection.prototype.fromJSON = function (data) { - if (data.start == undefined) { - if (this.rangeList && data.length > 1) { - this.toSingleRange(data[0]); - for (var i = data.length; i--;) { - var r = Range.fromPoints(data[i].start, data[i].end); - if (data[i].isBackwards) - r.cursor = r.start; - this.addRange(r, true); - } - return; - } - else { - data = data[0]; - } + return VScrollBar; +}(Scrollbar)); +VScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight; +var HScrollBar = /** @class */ (function (_super) { + __extends(HScrollBar, _super); + function HScrollBar(parent, renderer) { + var _this = _super.call(this, parent, '-h') || this; + _this.scrollLeft = 0; + _this.height = renderer.$scrollbarWidth; + _this.inner.style.height = + _this.element.style.height = (_this.height || 15) + 5 + "px"; + return _this; + } + HScrollBar.prototype.onScroll = function () { + if (!this.skipEvent) { + this.scrollLeft = this.element.scrollLeft; + this._emit("scroll", { data: this.scrollLeft }); } - if (this.rangeList) - this.toSingleRange(data); - this.setSelectionRange(data, data.isBackwards); + this.skipEvent = false; }; - Selection.prototype.isEqual = function (data) { - if ((data.length || this.rangeCount) && data.length != this.rangeCount) - return false; - if (!data.length || !this.ranges) - return this.getRange().isEqual(data); - for (var i = this.ranges.length; i--;) { - if (!this.ranges[i].isEqual(data[i])) - return false; + HScrollBar.prototype.getHeight = function () { + return this.isVisible ? this.height : 0; + }; + HScrollBar.prototype.setWidth = function (width) { + this.element.style.width = width + "px"; + }; + HScrollBar.prototype.setInnerWidth = function (width) { + this.inner.style.width = width + "px"; + }; + HScrollBar.prototype.setScrollWidth = function (width) { + this.inner.style.width = width + "px"; + }; + HScrollBar.prototype.setScrollLeft = function (scrollLeft) { + if (this.scrollLeft != scrollLeft) { + this.skipEvent = true; + this.scrollLeft = this.element.scrollLeft = scrollLeft; } - return true; }; - return Selection; -}()); -Selection.prototype.setSelectionAnchor = Selection.prototype.setAnchor; -Selection.prototype.getSelectionAnchor = Selection.prototype.getAnchor; -Selection.prototype.setSelectionRange = Selection.prototype.setRange; -oop.implement(Selection.prototype, EventEmitter); -exports.Selection = Selection; + return HScrollBar; +}(Scrollbar)); +exports.ScrollBar = VScrollBar; // backward compatibility +exports.ScrollBarV = VScrollBar; // backward compatibility +exports.ScrollBarH = HScrollBar; // backward compatibility +exports.VScrollBar = VScrollBar; +exports.HScrollBar = HScrollBar; }); -ace.define("ace/tokenizer",["require","exports","module","ace/lib/report_error"], function(require, exports, module){"use strict"; -var reportError = require("./lib/report_error").reportError; -var MAX_TOKEN_COUNT = 2000; -var Tokenizer = /** @class */ (function () { - function Tokenizer(rules) { - this.splitRegex; - this.states = rules; - this.regExps = {}; - this.matchMappings = {}; - for (var key in this.states) { - var state = this.states[key]; - var ruleRegExps = []; - var matchTotal = 0; - var mapping = this.matchMappings[key] = { defaultToken: "text" }; - var flag = "g"; - var splitterRurles = []; - for (var i = 0; i < state.length; i++) { - var rule = state[i]; - if (rule.defaultToken) - mapping.defaultToken = rule.defaultToken; - if (rule.caseInsensitive && flag.indexOf("i") === -1) - flag += "i"; - if (rule.unicode && flag.indexOf("u") === -1) - flag += "u"; - if (rule.regex == null) - continue; - if (rule.regex instanceof RegExp) - rule.regex = rule.regex.toString().slice(1, -1); - var adjustedregex = rule.regex; - var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; - if (Array.isArray(rule.token)) { - if (rule.token.length == 1 || matchcount == 1) { - rule.token = rule.token[0]; - } - else if (matchcount - 1 != rule.token.length) { - this.reportError("number of classes and regexp groups doesn't match", { - rule: rule, - groupCount: matchcount - 1 - }); - rule.token = rule.token[0]; - } - else { - rule.tokenArray = rule.token; - rule.token = null; - rule.onMatch = this.$arrayTokens; - } - } - else if (typeof rule.token == "function" && !rule.onMatch) { - if (matchcount > 1) - rule.onMatch = this.$applyToken; - else - rule.onMatch = rule.token; - } - if (matchcount > 1) { - if (/\\\d/.test(rule.regex)) { - adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function (match, digit) { - return "\\" + (parseInt(digit, 10) + matchTotal + 1); - }); - } - else { - matchcount = 1; - adjustedregex = this.removeCapturingGroups(rule.regex); - } - if (!rule.splitRegex && typeof rule.token != "string") - splitterRurles.push(rule); // flag will be known only at the very end - } - mapping[matchTotal] = i; - matchTotal += matchcount; - ruleRegExps.push(adjustedregex); - if (!rule.onMatch) - rule.onMatch = null; - } - if (!ruleRegExps.length) { - mapping[0] = 0; - ruleRegExps.push("$"); - } - splitterRurles.forEach(function (rule) { - rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); - }, this); - this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); - } +ace.define("ace/scrollbar_custom",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var oop = require("./lib/oop"); +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +dom.importCssString(".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\n position: absolute;\n background: rgba(128, 128, 128, 0.6);\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n border: 1px solid #bbb;\n border-radius: 2px;\n z-index: 8;\n}\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\n position: absolute;\n z-index: 6;\n background: none;\n overflow: hidden!important;\n}\n.ace_editor>.ace_sb-v {\n z-index: 6;\n right: 0;\n top: 0;\n width: 12px;\n}\n.ace_editor>.ace_sb-v div {\n z-index: 8;\n right: 0;\n width: 100%;\n}\n.ace_editor>.ace_sb-h {\n bottom: 0;\n left: 0;\n height: 12px;\n}\n.ace_editor>.ace_sb-h div {\n bottom: 0;\n height: 100%;\n}\n.ace_editor>.ace_sb_grabbed {\n z-index: 8;\n background: #000;\n}", "ace_scrollbar.css", false); +var ScrollBar = /** @class */ (function () { + function ScrollBar(parent, classSuffix) { + this.element = dom.createElement("div"); + this.element.className = "ace_sb" + classSuffix; + this.inner = dom.createElement("div"); + this.inner.className = ""; + this.element.appendChild(this.inner); + this.VScrollWidth = 12; + this.HScrollHeight = 12; + parent.appendChild(this.element); + this.setVisible(false); + this.skipEvent = false; + event.addMultiMouseDownListener(this.element, [500, 300, 300], this, "onMouseDown"); } - Tokenizer.prototype.$setMaxTokenCount = function (m) { - MAX_TOKEN_COUNT = m | 0; + ScrollBar.prototype.setVisible = function (isVisible) { + this.element.style.display = isVisible ? "" : "none"; + this.isVisible = isVisible; + this.coeff = 1; }; - Tokenizer.prototype.$applyToken = function (str) { - var values = this.splitRegex.exec(str).slice(1); - var types = this.token.apply(this, values); - if (typeof types === "string") - return [{ type: types, value: str }]; - var tokens = []; - for (var i = 0, l = types.length; i < l; i++) { - if (values[i]) - tokens[tokens.length] = { - type: types[i], - value: values[i] - }; + return ScrollBar; +}()); +oop.implement(ScrollBar.prototype, EventEmitter); +var VScrollBar = /** @class */ (function (_super) { + __extends(VScrollBar, _super); + function VScrollBar(parent, renderer) { + var _this = _super.call(this, parent, '-v') || this; + _this.scrollTop = 0; + _this.scrollHeight = 0; + _this.parent = parent; + _this.width = _this.VScrollWidth; + _this.renderer = renderer; + _this.inner.style.width = _this.element.style.width = (_this.width || 15) + "px"; + _this.$minWidth = 0; + return _this; + } + VScrollBar.prototype.onMouseDown = function (eType, e) { + if (eType !== "mousedown") + return; + if (event.getButton(e) !== 0 || e.detail === 2) { + return; } - return tokens; - }; - Tokenizer.prototype.$arrayTokens = function (str) { - if (!str) - return []; - var values = this.splitRegex.exec(str); - if (!values) - return "text"; - var tokens = []; - var types = this.tokenArray; - for (var i = 0, l = types.length; i < l; i++) { - if (values[i + 1]) - tokens[tokens.length] = { - type: types[i], - value: values[i + 1] - }; + if (e.target === this.inner) { + var self = this; + var mousePageY = e.clientY; + var onMouseMove = function (e) { + mousePageY = e.clientY; + }; + var onMouseUp = function () { + clearInterval(timerId); + }; + var startY = e.clientY; + var startTop = this.thumbTop; + var onScrollInterval = function () { + if (mousePageY === undefined) + return; + var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY); + if (scrollTop === self.scrollTop) + return; + self._emit("scroll", { data: scrollTop }); + }; + event.capture(this.inner, onMouseMove, onMouseUp); + var timerId = setInterval(onScrollInterval, 20); + return event.preventDefault(e); } - return tokens; + var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2; + this._emit("scroll", { data: this.scrollTopFromThumbTop(top) }); + return event.preventDefault(e); }; - Tokenizer.prototype.removeCapturingGroups = function (src) { - var r = src.replace(/\\.|\[(?:\\.|[^\\\]])*|\(\?[:=!<]|(\()/g, function (x, y) { return y ? "(?:" : x; }); - return r; + VScrollBar.prototype.getHeight = function () { + return this.height; }; - Tokenizer.prototype.createSplitterRegexp = function (src, flag) { - if (src.indexOf("(?=") != -1) { - var stack = 0; - var inChClass = false; - var lastCapture = {}; - src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function (m, esc, parenOpen, parenClose, square, index) { - if (inChClass) { - inChClass = square != "]"; - } - else if (square) { - inChClass = true; - } - else if (parenClose) { - if (stack == lastCapture.stack) { - lastCapture.end = index + 1; - lastCapture.stack = -1; - } - stack--; - } - else if (parenOpen) { - stack++; - if (parenOpen.length != 1) { - lastCapture.stack = stack; - lastCapture.start = index; - } - } - return m; - }); - if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) - src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); + VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) { + var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight); + scrollTop = scrollTop >> 0; + if (scrollTop < 0) { + scrollTop = 0; } - if (src.charAt(0) != "^") - src = "^" + src; - if (src.charAt(src.length - 1) != "$") - src += "$"; - return new RegExp(src, (flag || "").replace("g", "")); + else if (scrollTop > this.pageHeight - this.viewHeight) { + scrollTop = this.pageHeight - this.viewHeight; + } + return scrollTop; }; - Tokenizer.prototype.getLineTokens = function (line, startState) { - if (startState && typeof startState != "string") { - var stack = startState.slice(0); - startState = stack[0]; - if (startState === "#tmp") { - stack.shift(); - startState = stack.shift(); - } + VScrollBar.prototype.getWidth = function () { + return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0); + }; + VScrollBar.prototype.setHeight = function (height) { + this.height = Math.max(0, height); + this.slideHeight = this.height; + this.viewHeight = this.height; + this.setScrollHeight(this.pageHeight, true); + }; + VScrollBar.prototype.setScrollHeight = function (height, force) { + if (this.pageHeight === height && !force) + return; + this.pageHeight = height; + this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight; + if (this.thumbHeight > this.slideHeight) + this.thumbHeight = this.slideHeight; + if (this.thumbHeight < 15) + this.thumbHeight = 15; + this.inner.style.height = this.thumbHeight + "px"; + if (this.scrollTop > (this.pageHeight - this.viewHeight)) { + this.scrollTop = (this.pageHeight - this.viewHeight); + if (this.scrollTop < 0) + this.scrollTop = 0; + this._emit("scroll", { data: this.scrollTop }); } - else - var stack = []; - var currentState = /**@type{string}*/ (startState) || "start"; - var state = this.states[currentState]; - if (!state) { - currentState = "start"; - state = this.states[currentState]; + }; + VScrollBar.prototype.setScrollTop = function (scrollTop) { + this.scrollTop = scrollTop; + if (scrollTop < 0) + scrollTop = 0; + this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight); + this.inner.style.top = this.thumbTop + "px"; + }; + return VScrollBar; +}(ScrollBar)); +VScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight; +var HScrollBar = /** @class */ (function (_super) { + __extends(HScrollBar, _super); + function HScrollBar(parent, renderer) { + var _this = _super.call(this, parent, '-h') || this; + _this.scrollLeft = 0; + _this.scrollWidth = 0; + _this.height = _this.HScrollHeight; + _this.inner.style.height = _this.element.style.height = (_this.height || 12) + "px"; + _this.renderer = renderer; + return _this; + } + HScrollBar.prototype.onMouseDown = function (eType, e) { + if (eType !== "mousedown") + return; + if (event.getButton(e) !== 0 || e.detail === 2) { + return; } - var mapping = this.matchMappings[currentState]; - var re = this.regExps[currentState]; - re.lastIndex = 0; - var match, tokens = []; - var lastIndex = 0; - var matchAttempts = 0; - var token = { type: null, value: "" }; - while (match = re.exec(line)) { - var type = mapping.defaultToken; - var rule = null; - var value = match[0]; - var index = re.lastIndex; - if (index - value.length > lastIndex) { - var skipped = line.substring(lastIndex, index - value.length); - if (token.type == type) { - token.value += skipped; - } - else { - if (token.type) - tokens.push(token); - token = { type: type, value: skipped }; - } - } - for (var i = 0; i < match.length - 2; i++) { - if (match[i + 1] === undefined) - continue; - rule = state[mapping[i]]; - if (rule.onMatch) - type = rule.onMatch(value, currentState, stack, line); - else - type = rule.token; - if (rule.next) { - if (typeof rule.next == "string") { - currentState = rule.next; - } - else { - currentState = rule.next(currentState, stack); - } - state = this.states[currentState]; - if (!state) { - this.reportError("state doesn't exist", currentState); - currentState = "start"; - state = this.states[currentState]; - } - mapping = this.matchMappings[currentState]; - lastIndex = index; - re = this.regExps[currentState]; - re.lastIndex = index; - } - if (rule.consumeLineEnd) - lastIndex = index; - break; - } - if (value) { - if (typeof type === "string") { - if ((!rule || rule.merge !== false) && token.type === type) { - token.value += value; - } - else { - if (token.type) - tokens.push(token); - token = { type: type, value: value }; - } - } - else if (type) { - if (token.type) - tokens.push(token); - token = { type: null, value: "" }; - for (var i = 0; i < type.length; i++) - tokens.push(type[i]); - } - } - if (lastIndex == line.length) - break; - lastIndex = index; - if (matchAttempts++ > MAX_TOKEN_COUNT) { - if (matchAttempts > 2 * line.length) { - this.reportError("infinite loop with in ace tokenizer", { - startState: startState, - line: line - }); - } - while (lastIndex < line.length) { - if (token.type) - tokens.push(token); - token = { - value: line.substring(lastIndex, lastIndex += 500), - type: "overflow" - }; - } - currentState = "start"; - stack = []; - break; - } + if (e.target === this.inner) { + var self = this; + var mousePageX = e.clientX; + var onMouseMove = function (e) { + mousePageX = e.clientX; + }; + var onMouseUp = function () { + clearInterval(timerId); + }; + var startX = e.clientX; + var startLeft = this.thumbLeft; + var onScrollInterval = function () { + if (mousePageX === undefined) + return; + var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX); + if (scrollLeft === self.scrollLeft) + return; + self._emit("scroll", { data: scrollLeft }); + }; + event.capture(this.inner, onMouseMove, onMouseUp); + var timerId = setInterval(onScrollInterval, 20); + return event.preventDefault(e); } - if (token.type) - tokens.push(token); - if (stack.length > 1) { - if (stack[0] !== currentState) - stack.unshift("#tmp", currentState); + var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2; + this._emit("scroll", { data: this.scrollLeftFromThumbLeft(left) }); + return event.preventDefault(e); + }; + HScrollBar.prototype.getHeight = function () { + return this.isVisible ? this.height : 0; + }; + HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) { + var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth); + scrollLeft = scrollLeft >> 0; + if (scrollLeft < 0) { + scrollLeft = 0; } - return { - tokens: tokens, - state: stack.length ? stack : currentState - }; + else if (scrollLeft > this.pageWidth - this.viewWidth) { + scrollLeft = this.pageWidth - this.viewWidth; + } + return scrollLeft; }; - return Tokenizer; -}()); -Tokenizer.prototype.reportError = reportError; -exports.Tokenizer = Tokenizer; - -}); - -ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/deep_copy"], function(require, exports, module){"use strict"; -var deepCopy = require("../lib/deep_copy").deepCopy; -var TextHighlightRules; -TextHighlightRules = function () { - this.$rules = { - "start": [{ - token: "empty_line", - regex: '^$' - }, { - defaultToken: "text" - }] + HScrollBar.prototype.setWidth = function (width) { + this.width = Math.max(0, width); + this.element.style.width = this.width + "px"; + this.slideWidth = this.width; + this.viewWidth = this.width; + this.setScrollWidth(this.pageWidth, true); }; -}; -(function () { - this.addRules = function (rules, prefix) { - if (!prefix) { - for (var key in rules) - this.$rules[key] = rules[key]; + HScrollBar.prototype.setScrollWidth = function (width, force) { + if (this.pageWidth === width && !force) return; + this.pageWidth = width; + this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth; + if (this.thumbWidth > this.slideWidth) + this.thumbWidth = this.slideWidth; + if (this.thumbWidth < 15) + this.thumbWidth = 15; + this.inner.style.width = this.thumbWidth + "px"; + if (this.scrollLeft > (this.pageWidth - this.viewWidth)) { + this.scrollLeft = (this.pageWidth - this.viewWidth); + if (this.scrollLeft < 0) + this.scrollLeft = 0; + this._emit("scroll", { data: this.scrollLeft }); } - for (var key in rules) { - var state = rules[key]; - for (var i = 0; i < state.length; i++) { - var rule = state[i]; - if (rule.next || rule.onMatch) { - if (typeof rule.next == "string") { - if (rule.next.indexOf(prefix) !== 0) - rule.next = prefix + rule.next; - } - if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) - rule.nextState = prefix + rule.nextState; - } + }; + HScrollBar.prototype.setScrollLeft = function (scrollLeft) { + this.scrollLeft = scrollLeft; + if (scrollLeft < 0) + scrollLeft = 0; + this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth); + this.inner.style.left = (this.thumbLeft) + "px"; + }; + return HScrollBar; +}(ScrollBar)); +HScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth; +exports.ScrollBar = VScrollBar; // backward compatibility +exports.ScrollBarV = VScrollBar; // backward compatibility +exports.ScrollBarH = HScrollBar; // backward compatibility +exports.VScrollBar = VScrollBar; +exports.HScrollBar = HScrollBar; + +}); + +ace.define("ace/renderloop",["require","exports","module","ace/lib/event"], function(require, exports, module){"use strict"; +var event = require("./lib/event"); +var RenderLoop = /** @class */ (function () { + function RenderLoop(onRender, win) { + this.onRender = onRender; + this.pending = false; + this.changes = 0; + this.$recursionLimit = 2; + this.window = win || window; + var _self = this; + this._flush = function (ts) { + _self.pending = false; + var changes = _self.changes; + if (changes) { + event.blockIdle(100); + _self.changes = 0; + _self.onRender(changes); } - this.$rules[prefix + key] = state; + if (_self.changes) { + if (_self.$recursionLimit-- < 0) + return; + _self.schedule(); + } + else { + _self.$recursionLimit = 2; + } + }; + } + RenderLoop.prototype.schedule = function (change) { + this.changes = this.changes | change; + if (this.changes && !this.pending) { + event.nextFrame(this._flush); + this.pending = true; } }; - this.getRules = function () { - return this.$rules; + RenderLoop.prototype.clear = function (change) { + var changes = this.changes; + this.changes = 0; + return changes; }; - this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { - var embedRules = typeof HighlightRules == "function" - ? new HighlightRules().getRules() - : HighlightRules; - if (states) { - for (var i = 0; i < states.length; i++) - states[i] = prefix + states[i]; + return RenderLoop; +}()); +exports.RenderLoop = RenderLoop; + +}); + +ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module){var oop = require("../lib/oop"); +var dom = require("../lib/dom"); +var lang = require("../lib/lang"); +var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var CHAR_COUNT = 512; +var USE_OBSERVER = typeof ResizeObserver == "function"; +var L = 200; +var FontMetrics = /** @class */ (function () { + function FontMetrics(parentEl) { + this.el = dom.createElement("div"); + this.$setMeasureNodeStyles(this.el.style, true); + this.$main = dom.createElement("div"); + this.$setMeasureNodeStyles(this.$main.style); + this.$measureNode = dom.createElement("div"); + this.$setMeasureNodeStyles(this.$measureNode.style); + this.el.appendChild(this.$main); + this.el.appendChild(this.$measureNode); + parentEl.appendChild(this.el); + this.$measureNode.textContent = lang.stringRepeat("X", CHAR_COUNT); + this.$characterSize = { width: 0, height: 0 }; + if (USE_OBSERVER) + this.$addObserver(); + else + this.checkForSizeChanges(); + } + FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) { + style.width = style.height = "auto"; + style.left = style.top = "0px"; + style.visibility = "hidden"; + style.position = "absolute"; + style.whiteSpace = "pre"; + if (useragent.isIE < 8) { + style["font-family"] = "inherit"; } else { - states = []; - for (var key in embedRules) - states.push(prefix + key); + style.font = "inherit"; } - this.addRules(embedRules, prefix); - if (escapeRules) { - var addRules = Array.prototype[append ? "push" : "unshift"]; - for (var i = 0; i < states.length; i++) - addRules.apply(this.$rules[states[i]], deepCopy(escapeRules)); + style.overflow = isRoot ? "hidden" : "visible"; + }; + FontMetrics.prototype.checkForSizeChanges = function (size) { + if (size === undefined) + size = this.$measureSizes(); + if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { + this.$measureNode.style.fontWeight = "bold"; + var boldSize = this.$measureSizes(); + this.$measureNode.style.fontWeight = ""; + this.$characterSize = size; + this.charSizes = Object.create(null); + this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; + this._emit("changeCharacterSize", { data: size }); } - if (!this.$embeds) - this.$embeds = []; - this.$embeds.push(prefix); }; - this.getEmbeds = function () { - return this.$embeds; + FontMetrics.prototype.$addObserver = function () { + var self = this; + this.$observer = new window.ResizeObserver(function (e) { + self.checkForSizeChanges(); + }); + this.$observer.observe(this.$measureNode); }; - var pushState = function (currentState, stack) { - if (currentState != "start" || stack.length) - stack.unshift(this.nextState, currentState); - return this.nextState; + FontMetrics.prototype.$pollSizeChanges = function () { + if (this.$pollSizeChangesTimer || this.$observer) + return this.$pollSizeChangesTimer; + var self = this; + return this.$pollSizeChangesTimer = event.onIdle(function cb() { + self.checkForSizeChanges(); + event.onIdle(cb, 500); + }, 500); }; - var popState = function (currentState, stack) { - stack.shift(); - return stack.shift() || "start"; + FontMetrics.prototype.setPolling = function (val) { + if (val) { + this.$pollSizeChanges(); + } + else if (this.$pollSizeChangesTimer) { + clearInterval(this.$pollSizeChangesTimer); + this.$pollSizeChangesTimer = 0; + } }; - this.normalizeRules = function () { - var id = 0; - var rules = this.$rules; - function processState(key) { - var state = rules[key]; - state["processed"] = true; - for (var i = 0; i < state.length; i++) { - var rule = state[i]; - var toInsert = null; - if (Array.isArray(rule)) { - toInsert = rule; - rule = {}; - } - if (!rule.regex && rule.start) { - rule.regex = rule.start; - if (!rule.next) - rule.next = []; - rule.next.push({ - defaultToken: rule.token - }, { - token: rule.token + ".end", - regex: rule.end || rule.start, - next: "pop" - }); - rule.token = rule.token + ".start"; - rule.push = true; - } - var next = rule.next || rule.push; - if (next && Array.isArray(next)) { - var stateName = rule.stateName; - if (!stateName) { - stateName = rule.token; - if (typeof stateName != "string") - stateName = stateName[0] || ""; - if (rules[stateName]) - stateName += id++; - } - rules[stateName] = next; - rule.next = stateName; - processState(stateName); - } - else if (next == "pop") { - rule.next = popState; - } - if (rule.push) { - rule.nextState = rule.next || rule.push; - rule.next = pushState; - delete rule.push; - } - if (rule.rules) { - for (var r in rule.rules) { - if (rules[r]) { - if (rules[r].push) - rules[r].push.apply(rules[r], rule.rules[r]); - } - else { - rules[r] = rule.rules[r]; - } - } - } - var includeName = typeof rule == "string" ? rule : rule.include; - if (includeName) { - if (includeName === "$self") - includeName = "start"; - if (Array.isArray(includeName)) - toInsert = includeName.map(function (x) { return rules[x]; }); - else - toInsert = rules[includeName]; - } - if (toInsert) { - var args = [i, 1].concat(toInsert); - if (rule.noEscape) - args = args.filter(function (x) { return !x.next; }); - state.splice.apply(state, args); - i--; - } - if (rule.keywordMap) { - rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive); - delete rule.defaultToken; - } - } + FontMetrics.prototype.$measureSizes = function (node) { + var size = { + height: (node || this.$measureNode).clientHeight, + width: (node || this.$measureNode).clientWidth / CHAR_COUNT + }; + if (size.width === 0 || size.height === 0) + return null; + return size; + }; + FontMetrics.prototype.$measureCharWidth = function (ch) { + this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT); + var rect = this.$main.getBoundingClientRect(); + return rect.width / CHAR_COUNT; + }; + FontMetrics.prototype.getCharacterWidth = function (ch) { + var w = this.charSizes[ch]; + if (w === undefined) { + w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width; } - Object.keys(rules).forEach(processState, this); + return w; }; - this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) { - var keywords = Object.create(null); - this.$keywordList = []; - Object.keys(map).forEach(function (className) { - var a = map[className]; - var list = a.split(splitChar || "|"); - for (var i = list.length; i--;) { - var word = list[i]; - this.$keywordList.push(word); - if (ignoreCase) - word = word.toLowerCase(); - keywords[word] = className; - } - }, this); - map = null; - return ignoreCase - ? function (value) { return keywords[value.toLowerCase()] || defaultToken; } - : function (value) { return keywords[value] || defaultToken; }; + FontMetrics.prototype.destroy = function () { + clearInterval(this.$pollSizeChangesTimer); + if (this.$observer) + this.$observer.disconnect(); + if (this.el && this.el.parentNode) + this.el.parentNode.removeChild(this.el); }; - this.getKeywords = function () { - return this.$keywords; + FontMetrics.prototype.$getZoom = function (element) { + if (!element || !element.parentElement) + return 1; + return (Number(window.getComputedStyle(element)["zoom"]) || 1) * this.$getZoom(element.parentElement); }; -}).call(TextHighlightRules.prototype); -exports.TextHighlightRules = TextHighlightRules; + FontMetrics.prototype.$initTransformMeasureNodes = function () { + var t = function (t, l) { + return ["div", { + style: "position: absolute;top:" + t + "px;left:" + l + "px;" + }]; + }; + this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el); + }; + FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) { + if (clientPos) { + var zoom = this.$getZoom(this.el); + clientPos = mul(1 / zoom, clientPos); + } + function solve(l1, l2, r) { + var det = l1[1] * l2[0] - l1[0] * l2[1]; + return [ + (-l2[1] * r[0] + l2[0] * r[1]) / det, + (+l1[1] * r[0] - l1[0] * r[1]) / det + ]; + } + function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; } + function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; } + function mul(a, b) { return [a * b[0], a * b[1]]; } + if (!this.els) + this.$initTransformMeasureNodes(); + function p(el) { + var r = el.getBoundingClientRect(); + return [r.left, r.top]; + } + var a = p(this.els[0]); + var b = p(this.els[1]); + var c = p(this.els[2]); + var d = p(this.els[3]); + var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a))); + var m1 = mul(1 + h[0], sub(b, a)); + var m2 = mul(1 + h[1], sub(c, a)); + if (elPos) { + var x = elPos; + var k = h[0] * x[0] / L + h[1] * x[1] / L + 1; + var ut = add(mul(x[0], m1), mul(x[1], m2)); + return add(mul(1 / k / L, ut), a); + } + var u = sub(clientPos, a); + var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u); + return mul(L, f); + }; + return FontMetrics; +}()); +FontMetrics.prototype.$characterSize = { width: 0, height: 0 }; +oop.implement(FontMetrics.prototype, EventEmitter); +exports.FontMetrics = FontMetrics; }); -ace.define("ace/mode/behaviour",["require","exports","module"], function(require, exports, module){"use strict"; -var Behaviour; -Behaviour = function () { - this.$behaviours = {}; -}; -(function () { - this.add = function (name, action, callback) { - switch (undefined) { - case this.$behaviours: - this.$behaviours = {}; - case this.$behaviours[name]: - this.$behaviours[name] = {}; - } - this.$behaviours[name][action] = callback; - }; - this.addBehaviours = function (behaviours) { - for (var key in behaviours) { - for (var action in behaviours[key]) { - this.add(key, action, behaviours[key][action]); - } - } +ace.define("ace/css/editor-css",["require","exports","module"], function(require, exports, module){/* +styles = [] +for (var i = 1; i < 16; i++) { + styles.push(".ace_br" + i + "{" + ( + ["top-left", "top-right", "bottom-right", "bottom-left"] + ).map(function(x, j) { + return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\n contain: style size layout;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n}\n\n.ace_hidpi .ace_text-layer,\n.ace_hidpi .ace_gutter-layer,\n.ace_hidpi .ace_content,\n.ace_hidpi .ace_gutter {\n contain: strict;\n}\n.ace_hidpi .ace_text-layer > .ace_line, \n.ace_hidpi .ace_text-layer > .ace_line_group {\n contain: strict;\n}\n\n.ace_cjk {\n display: inline-block;\n text-align: center;\n}\n\n.ace_cursor-layer {\n z-index: 4;\n}\n\n.ace_cursor {\n z-index: 4;\n position: absolute;\n box-sizing: border-box;\n border-left: 2px solid;\n /* workaround for smooth cursor repaintng whole screen in chrome */\n transform: translatez(0);\n}\n\n.ace_multiselect .ace_cursor {\n border-left-width: 1px;\n}\n\n.ace_slim-cursors .ace_cursor {\n border-left-width: 1px;\n}\n\n.ace_overwrite-cursors .ace_cursor {\n border-left-width: 0;\n border-bottom: 1px solid;\n}\n\n.ace_hidden-cursors .ace_cursor {\n opacity: 0.2;\n}\n\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\n opacity: 0;\n}\n\n.ace_smooth-blinking .ace_cursor {\n transition: opacity 0.18s;\n}\n\n.ace_animate-blinking .ace_cursor {\n animation-duration: 1000ms;\n animation-timing-function: step-end;\n animation-name: blink-ace-animate;\n animation-iteration-count: infinite;\n}\n\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\n animation-duration: 1000ms;\n animation-timing-function: ease-in-out;\n animation-name: blink-ace-animate-smooth;\n}\n \n@keyframes blink-ace-animate {\n from, to { opacity: 1; }\n 60% { opacity: 0; }\n}\n\n@keyframes blink-ace-animate-smooth {\n from, to { opacity: 1; }\n 45% { opacity: 1; }\n 60% { opacity: 0; }\n 85% { opacity: 0; }\n}\n\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\n position: absolute;\n z-index: 3;\n}\n\n.ace_marker-layer .ace_selection {\n position: absolute;\n z-index: 5;\n}\n\n.ace_marker-layer .ace_bracket {\n position: absolute;\n z-index: 6;\n}\n\n.ace_marker-layer .ace_error_bracket {\n position: absolute;\n border-bottom: 1px solid #DE5555;\n border-radius: 0;\n}\n\n.ace_marker-layer .ace_active-line {\n position: absolute;\n z-index: 2;\n}\n\n.ace_marker-layer .ace_selected-word {\n position: absolute;\n z-index: 4;\n box-sizing: border-box;\n}\n\n.ace_line .ace_fold {\n box-sizing: border-box;\n\n display: inline-block;\n height: 11px;\n margin-top: -2px;\n vertical-align: middle;\n\n background-image:\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n color: transparent;\n\n border: 1px solid black;\n border-radius: 2px;\n\n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_dark .ace_fold {\n}\n\n.ace_fold:hover{\n background-image:\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\n}\n\n.ace_tooltip {\n background-color: #f5f5f5;\n border: 1px solid gray;\n border-radius: 1px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n color: black;\n padding: 3px 4px;\n position: absolute;\n z-index: 999999;\n box-sizing: border-box;\n cursor: default;\n white-space: pre-wrap;\n word-wrap: break-word;\n line-height: normal;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n pointer-events: none;\n overflow: auto;\n max-width: min(33em, 66vw);\n overscroll-behavior: contain;\n}\n.ace_tooltip pre {\n white-space: pre-wrap;\n}\n\n.ace_tooltip.ace_dark {\n background-color: #636363;\n color: #fff;\n}\n\n.ace_tooltip:focus {\n outline: 1px solid #5E9ED6;\n}\n\n.ace_icon {\n display: inline-block;\n width: 18px;\n vertical-align: top;\n}\n\n.ace_icon_svg {\n display: inline-block;\n width: 12px;\n vertical-align: top;\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-size: 12px;\n -webkit-mask-position: center;\n}\n\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\n padding-right: 13px;\n}\n\n.ace_fold-widget, .ace_custom-widget {\n box-sizing: border-box;\n\n margin: 0 -12px 0 1px;\n display: none;\n width: 11px;\n vertical-align: top;\n\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\n background-repeat: no-repeat;\n background-position: center;\n\n border-radius: 3px;\n \n border: 1px solid transparent;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_custom-widget {\n background: none;\n}\n\n.ace_folding-enabled .ace_fold-widget {\n display: inline-block; \n}\n\n.ace_fold-widget.ace_end {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\n}\n\n.ace_fold-widget.ace_closed {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\n}\n\n.ace_fold-widget:hover {\n border: 1px solid rgba(0, 0, 0, 0.3);\n background-color: rgba(255, 255, 255, 0.2);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n}\n\n.ace_fold-widget:active {\n border: 1px solid rgba(0, 0, 0, 0.4);\n background-color: rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n}\n/**\n * Dark version for fold widgets\n */\n.ace_dark .ace_fold-widget {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\n}\n.ace_dark .ace_fold-widget.ace_end {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget.ace_closed {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget:hover {\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n background-color: rgba(255, 255, 255, 0.1);\n}\n.ace_dark .ace_fold-widget:active {\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n}\n\n.ace_inline_button {\n border: 1px solid lightgray;\n display: inline-block;\n margin: -1px 8px;\n padding: 0 5px;\n pointer-events: auto;\n cursor: pointer;\n}\n.ace_inline_button:hover {\n border-color: gray;\n background: rgba(200,200,200,0.2);\n display: inline-block;\n pointer-events: auto;\n}\n\n.ace_fold-widget.ace_invalid {\n background-color: #FFB4B4;\n border-color: #DE5555;\n}\n\n.ace_fade-fold-widgets .ace_fold-widget {\n transition: opacity 0.4s ease 0.05s;\n opacity: 0;\n}\n\n.ace_fade-fold-widgets:hover .ace_fold-widget {\n transition: opacity 0.05s ease 0.05s;\n opacity:1;\n}\n\n.ace_underline {\n text-decoration: underline;\n}\n\n.ace_bold {\n font-weight: bold;\n}\n\n.ace_nobold .ace_bold {\n font-weight: normal;\n}\n\n.ace_italic {\n font-style: italic;\n}\n\n\n.ace_error-marker {\n background-color: rgba(255, 0, 0,0.2);\n position: absolute;\n z-index: 9;\n}\n\n.ace_highlight-marker {\n background-color: rgba(255, 255, 0,0.2);\n position: absolute;\n z-index: 8;\n}\n\n.ace_mobile-menu {\n position: absolute;\n line-height: 1.5;\n border-radius: 4px;\n -ms-user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n background: white;\n box-shadow: 1px 3px 2px grey;\n border: 1px solid #dcdcdc;\n color: black;\n}\n.ace_dark > .ace_mobile-menu {\n background: #333;\n color: #ccc;\n box-shadow: 1px 3px 2px grey;\n border: 1px solid #444;\n\n}\n.ace_mobile-button {\n padding: 2px;\n cursor: pointer;\n overflow: hidden;\n}\n.ace_mobile-button:hover {\n background-color: #eee;\n opacity:1;\n}\n.ace_mobile-button:active {\n background-color: #ddd;\n}\n\n.ace_placeholder {\n position: relative;\n font-family: arial;\n transform: scale(0.9);\n transform-origin: left;\n white-space: pre;\n opacity: 0.7;\n margin: 0 10px;\n z-index: 1;\n}\n\n.ace_ghost_text {\n opacity: 0.5;\n font-style: italic;\n}\n\n.ace_ghost_text_container > div {\n white-space: pre;\n}\n\n.ghost_text_line_wrapped::after {\n content: \"\u21A9\";\n position: absolute;\n}\n\n.ace_lineWidgetContainer.ace_ghost_text {\n margin: 0px 4px\n}\n\n.ace_screenreader-only {\n position:absolute;\n left:-10000px;\n top:auto;\n width:1px;\n height:1px;\n overflow:hidden;\n}\n\n.ace_hidden_token {\n display: none;\n}"; + +}); + +ace.define("ace/layer/decorators",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var oop = require("../lib/oop"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var Decorator = /** @class */ (function () { + function Decorator(scrollbarV, renderer) { + this.renderer = renderer; + this.pixelRatio = 1; + this.maxHeight = renderer.layerConfig.maxHeight; + this.lineHeight = renderer.layerConfig.lineHeight; + this.minDecorationHeight = (2 * this.pixelRatio) | 0; + this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0; + this.colors = {}; + this.colors.dark = { + "error": "rgba(255, 18, 18, 1)", + "warning": "rgba(18, 136, 18, 1)", + "info": "rgba(18, 18, 136, 1)", + }; + this.colors.light = { + "error": "rgb(255,51,51)", + "warning": "rgb(32,133,72)", + "info": "rgb(35,68,138)", + }; + this.setScrollBarV(scrollbarV); + } + Decorator.prototype.$createCanvas = function () { + this.canvas = dom.createElement("canvas"); + this.canvas.style.top = 0 + "px"; + this.canvas.style.right = 0 + "px"; + this.canvas.style.zIndex = "7"; + this.canvas.style.position = "absolute"; }; - this.remove = function (name) { - if (this.$behaviours && this.$behaviours[name]) { - delete this.$behaviours[name]; - } + Decorator.prototype.setScrollBarV = function (scrollbarV) { + this.$createCanvas(); + this.scrollbarV = scrollbarV; + scrollbarV.element.appendChild(this.canvas); + this.setDimensions(); }; - this.inherit = function (mode, filter) { - if (typeof mode === "function") { - var behaviours = new mode().getBehaviours(filter); - } - else { - var behaviours = mode.getBehaviours(filter); + Decorator.prototype.$updateDecorators = function (config) { + if (typeof this.canvas.getContext !== "function") { + return; } - this.addBehaviours(behaviours); - }; - this.getBehaviours = function (filter) { - if (!filter) { - return this.$behaviours; + var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light; + this.setDimensions(config); + var ctx = this.canvas.getContext("2d"); + function compare(a, b) { + if (a.priority < b.priority) + return -1; + if (a.priority > b.priority) + return 1; + return 0; } - else { - var ret = {}; - for (var i = 0; i < filter.length; i++) { - if (this.$behaviours[filter[i]]) { - ret[filter[i]] = this.$behaviours[filter[i]]; + var annotations = this.renderer.session.$annotations; + ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + if (annotations) { + var priorities = { + "info": 1, + "warning": 2, + "error": 3 + }; + annotations.forEach(function (item) { + item["priority"] = priorities[item.type] || null; + }); + annotations = annotations.sort(compare); + for (var i = 0; i < annotations.length; i++) { + var row = annotations[i].row; + var offset1 = this.getVerticalOffsetForRow(row); + var offset2 = offset1 + this.lineHeight; + var y1 = Math.round(this.heightRatio * offset1); + var y2 = Math.round(this.heightRatio * offset2); + var ycenter = Math.round((y1 + y2) / 2); + var halfHeight = (y2 - ycenter); + if (halfHeight < this.halfMinDecorationHeight) { + halfHeight = this.halfMinDecorationHeight; } + if (ycenter - halfHeight < 0) { + ycenter = halfHeight; + } + if (ycenter + halfHeight > this.canvasHeight) { + ycenter = this.canvasHeight - halfHeight; + } + var from = ycenter - halfHeight; + var to = ycenter + halfHeight; + var zoneHeight = to - from; + ctx.fillStyle = colors[annotations[i].type] || null; + ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight); } - return ret; - } - }; -}).call(Behaviour.prototype); -exports.Behaviour = Behaviour; - -}); - -ace.define("ace/token_iterator",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; -var Range = require("./range").Range; -var TokenIterator = /** @class */ (function () { - function TokenIterator(session, initialRow, initialColumn) { - this.$session = session; - this.$row = initialRow; - this.$rowTokens = session.getTokens(initialRow); - var token = session.getTokenAt(initialRow, initialColumn); - this.$tokenIndex = token ? token.index : -1; - } - TokenIterator.prototype.stepBackward = function () { - this.$tokenIndex -= 1; - while (this.$tokenIndex < 0) { - this.$row -= 1; - if (this.$row < 0) { - this.$row = 0; - return null; - } - this.$rowTokens = this.$session.getTokens(this.$row); - this.$tokenIndex = this.$rowTokens.length - 1; } - return this.$rowTokens[this.$tokenIndex]; - }; - TokenIterator.prototype.stepForward = function () { - this.$tokenIndex += 1; - var rowCount; - while (this.$tokenIndex >= this.$rowTokens.length) { - this.$row += 1; - if (!rowCount) - rowCount = this.$session.getLength(); - if (this.$row >= rowCount) { - this.$row = rowCount - 1; - return null; - } - this.$rowTokens = this.$session.getTokens(this.$row); - this.$tokenIndex = 0; + var cursor = this.renderer.session.selection.getCursor(); + if (cursor) { + var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio); + ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; + ctx.fillRect(0, currentY, this.canvasWidth, 2); } - return this.$rowTokens[this.$tokenIndex]; - }; - TokenIterator.prototype.getCurrentToken = function () { - return this.$rowTokens[this.$tokenIndex]; }; - TokenIterator.prototype.getCurrentTokenRow = function () { - return this.$row; + Decorator.prototype.getVerticalOffsetForRow = function (row) { + row = row | 0; + var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight; + return offset; }; - TokenIterator.prototype.getCurrentTokenColumn = function () { - var rowTokens = this.$rowTokens; - var tokenIndex = this.$tokenIndex; - var column = rowTokens[tokenIndex].start; - if (column !== undefined) - return column; - column = 0; - while (tokenIndex > 0) { - tokenIndex -= 1; - column += rowTokens[tokenIndex].value.length; + Decorator.prototype.setDimensions = function (config) { + config = config || this.renderer.layerConfig; + this.maxHeight = config.maxHeight; + this.lineHeight = config.lineHeight; + this.canvasHeight = config.height; + this.canvasWidth = this.scrollbarV.width || this.canvasWidth; + this.setZoneWidth(); + this.canvas.width = this.canvasWidth; + this.canvas.height = this.canvasHeight; + if (this.maxHeight < this.canvasHeight) { + this.heightRatio = 1; + } + else { + this.heightRatio = this.canvasHeight / this.maxHeight; } - return column; }; - TokenIterator.prototype.getCurrentTokenPosition = function () { - return { row: this.$row, column: this.getCurrentTokenColumn() }; + Decorator.prototype.setZoneWidth = function () { + this.oneZoneWidth = this.canvasWidth; }; - TokenIterator.prototype.getCurrentTokenRange = function () { - var token = this.$rowTokens[this.$tokenIndex]; - var column = this.getCurrentTokenColumn(); - return new Range(this.$row, column, this.$row, column + token.value.length); + Decorator.prototype.destroy = function () { + this.canvas.parentNode.removeChild(this.canvas); }; - return TokenIterator; + return Decorator; }()); -exports.TokenIterator = TokenIterator; +oop.implement(Decorator.prototype, EventEmitter); +exports.Decorator = Decorator; }); -ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module){"use strict"; -var oop = require("../../lib/oop"); -var Behaviour = require("../behaviour").Behaviour; -var TokenIterator = require("../../token_iterator").TokenIterator; -var lang = require("../../lib/lang"); -var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "rparen", "paren", "punctuation.operator"]; -var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "rparen", "paren", "punctuation.operator", "comment"]; -var context; -var contextCache = {}; -var defaultQuotes = { '"': '"', "'": "'" }; -var initContext = function (editor) { - var id = -1; - if (editor.multiSelect) { - id = editor.selection.index; - if (contextCache.rangeCount != editor.multiSelect.rangeCount) - contextCache = { rangeCount: editor.multiSelect.rangeCount }; +ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/scrollbar_custom","ace/scrollbar_custom","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/css/editor-css","ace/layer/decorators","ace/lib/useragent","ace/layer/text_util"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var dom = require("./lib/dom"); +var lang = require("./lib/lang"); +var config = require("./config"); +var GutterLayer = require("./layer/gutter").Gutter; +var MarkerLayer = require("./layer/marker").Marker; +var TextLayer = require("./layer/text").Text; +var CursorLayer = require("./layer/cursor").Cursor; +var HScrollBar = require("./scrollbar").HScrollBar; +var VScrollBar = require("./scrollbar").VScrollBar; +var HScrollBarCustom = require("./scrollbar_custom").HScrollBar; +var VScrollBarCustom = require("./scrollbar_custom").VScrollBar; +var RenderLoop = require("./renderloop").RenderLoop; +var FontMetrics = require("./layer/font_metrics").FontMetrics; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var editorCss = require("./css/editor-css"); +var Decorator = require("./layer/decorators").Decorator; +var useragent = require("./lib/useragent"); +var isTextToken = require("./layer/text_util").isTextToken; +dom.importCssString(editorCss, "ace_editor.css", false); +var VirtualRenderer = /** @class */ (function () { + function VirtualRenderer(container, theme) { + var _self = this; + this.container = container || dom.createElement("div"); + dom.addCssClass(this.container, "ace_editor"); + if (dom.HI_DPI) + dom.addCssClass(this.container, "ace_hidpi"); + this.setTheme(theme); + if (config.get("useStrictCSP") == null) + config.set("useStrictCSP", false); + this.$gutter = dom.createElement("div"); + this.$gutter.className = "ace_gutter"; + this.container.appendChild(this.$gutter); + this.$gutter.setAttribute("aria-hidden", "true"); + this.scroller = dom.createElement("div"); + this.scroller.className = "ace_scroller"; + this.container.appendChild(this.scroller); + this.content = dom.createElement("div"); + this.content.className = "ace_content"; + this.scroller.appendChild(this.content); + this.$gutterLayer = new GutterLayer(this.$gutter); + this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); + this.$markerBack = new MarkerLayer(this.content); + var textLayer = this.$textLayer = new TextLayer(this.content); + this.canvas = textLayer.element; + this.$markerFront = new MarkerLayer(this.content); + this.$cursorLayer = new CursorLayer(this.content); + this.$horizScroll = false; + this.$vScroll = false; + this.scrollBar = + this.scrollBarV = new VScrollBar(this.container, this); + this.scrollBarH = new HScrollBar(this.container, this); + this.scrollBarV.on("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollTop(e.data - _self.scrollMargin.top); + }); + this.scrollBarH.on("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollLeft(e.data - _self.scrollMargin.left); + }); + this.scrollTop = 0; + this.scrollLeft = 0; + this.cursorPos = { + row: 0, + column: 0 + }; + this.$fontMetrics = new FontMetrics(this.container); + this.$textLayer.$setFontMetrics(this.$fontMetrics); + this.$textLayer.on("changeCharacterSize", function (e) { + _self.updateCharacterSize(); + _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height); + _self._signal("changeCharacterSize", e); + }); + this.$size = { + width: 0, + height: 0, + scrollerHeight: 0, + scrollerWidth: 0, + $dirty: true + }; + this.layerConfig = { + width: 1, + padding: 0, + firstRow: 0, + firstRowScreen: 0, + lastRow: 0, + lineHeight: 0, + characterWidth: 0, + minHeight: 1, + maxHeight: 1, + offset: 0, + height: 1, + gutterOffset: 1 + }; + this.scrollMargin = { + left: 0, + right: 0, + top: 0, + bottom: 0, + v: 0, + h: 0 + }; + this.margin = { + left: 0, + right: 0, + top: 0, + bottom: 0, + v: 0, + h: 0 + }; + this.$keepTextAreaAtCursor = !useragent.isIOS; + this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView); + this.$loop.schedule(this.CHANGE_FULL); + this.updateCharacterSize(); + this.setPadding(4); + this.$addResizeObserver(); + config.resetOptions(this); + config._signal("renderer", this); } - if (contextCache[id]) - return context = contextCache[id]; - context = contextCache[id] = { - autoInsertedBrackets: 0, - autoInsertedRow: -1, - autoInsertedLineEnd: "", - maybeInsertedBrackets: 0, - maybeInsertedRow: -1, - maybeInsertedLineStart: "", - maybeInsertedLineEnd: "" + VirtualRenderer.prototype.updateCharacterSize = function () { + if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { + this.$allowBoldFonts = this.$textLayer.allowBoldFonts; + this.setStyle("ace_nobold", !this.$allowBoldFonts); + } + this.layerConfig.characterWidth = + this.characterWidth = this.$textLayer.getCharacterWidth(); + this.layerConfig.lineHeight = + this.lineHeight = this.$textLayer.getLineHeight(); + this.$updatePrintMargin(); + dom.setStyle(this.scroller.style, "line-height", this.lineHeight + "px"); }; -}; -var getWrapped = function (selection, selected, opening, closing) { - var rowDiff = selection.end.row - selection.start.row; - return { - text: opening + selected + closing, - selection: [ - 0, - selection.start.column + 1, - rowDiff, - selection.end.column + (rowDiff ? 0 : 1) - ] + VirtualRenderer.prototype.setSession = function (session) { + if (this.session) + this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode); + this.session = session; + if (session && this.scrollMargin.top && session.getScrollTop() <= 0) + session.setScrollTop(-this.scrollMargin.top); + this.$cursorLayer.setSession(session); + this.$markerBack.setSession(session); + this.$markerFront.setSession(session); + this.$gutterLayer.setSession(session); + this.$textLayer.setSession(session); + if (!session) + return; + this.$loop.schedule(this.CHANGE_FULL); + this.session.$setFontMetrics(this.$fontMetrics); + this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null; + this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this); + this.onChangeNewLineMode(); + this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode); }; -}; -var CstyleBehaviour; -CstyleBehaviour = function (options) { - options = options || {}; - this.add("braces", "insertion", function (state, action, editor, session, text) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - if (text == '{') { - initContext(editor); - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - var token = session.getTokenAt(cursor.row, cursor.column); - if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, '{', '}'); - } - else if (token && /(?:string)\.quasi|\.xml/.test(token.type)) { - var excludeTokens = [ - /tag\-(?:open|name)/, /attribute\-name/ - ]; - if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\.quasi/.test(token.type) - && token.value[cursor.column - token.start - 1] !== '$') - return; - CstyleBehaviour.recordAutoInsert(editor, session, "}"); - return { - text: '{}', - selection: [1, 1] - }; - } - else if (CstyleBehaviour.isSaneInsertion(editor, session)) { - if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) { - CstyleBehaviour.recordAutoInsert(editor, session, "}"); - return { - text: '{}', - selection: [1, 1] - }; - } - else { - CstyleBehaviour.recordMaybeInsert(editor, session, "{"); - return { - text: '{', - selection: [1, 1] - }; - } - } - } - else if (text == '}') { - initContext(editor); - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar == '}') { - var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row }); - if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { - CstyleBehaviour.popAutoInsertedClosing(); - return { - text: '', - selection: [1, 1] - }; - } - } - } - else if (text == "\n" || text == "\r\n") { - initContext(editor); - var closing = ""; - if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { - closing = lang.stringRepeat("}", context.maybeInsertedBrackets); - CstyleBehaviour.clearMaybeInsertedClosing(); - } - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar === '}') { - var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}'); - if (!openBracePos) - return null; - var next_indent = this.$getIndent(session.getLine(openBracePos.row)); - } - else if (closing) { - var next_indent = this.$getIndent(line); - } - else { - CstyleBehaviour.clearMaybeInsertedClosing(); - return; - } - var indent = next_indent + session.getTabString(); - return { - text: '\n' + indent + '\n' + next_indent + closing, - selection: [1, indent.length, 1, indent.length] + VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) { + if (lastRow === undefined) + lastRow = Infinity; + if (!this.$changedLines) { + this.$changedLines = { + firstRow: firstRow, + lastRow: lastRow }; } else { - CstyleBehaviour.clearMaybeInsertedClosing(); - } - }); - this.add("braces", "deletion", function (state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && selected == '{') { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.end.column, range.end.column + 1); - if (rightChar == '}') { - range.end.column++; - return range; - } - else { - context.maybeInsertedBrackets--; - } + if (this.$changedLines.firstRow > firstRow) + this.$changedLines.firstRow = firstRow; + if (this.$changedLines.lastRow < lastRow) + this.$changedLines.lastRow = lastRow; } - }); - this.add("parens", "insertion", function (state, action, editor, session, text) { - if (text == '(') { - initContext(editor); - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, '(', ')'); - } - else if (CstyleBehaviour.isSaneInsertion(editor, session)) { - CstyleBehaviour.recordAutoInsert(editor, session, ")"); - return { - text: '()', - selection: [1, 1] - }; - } + if (this.$changedLines.lastRow < this.layerConfig.firstRow) { + if (force) + this.$changedLines.lastRow = this.layerConfig.lastRow; + else + return; } - else if (text == ')') { - initContext(editor); - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar == ')') { - var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row }); - if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { - CstyleBehaviour.popAutoInsertedClosing(); - return { - text: '', - selection: [1, 1] - }; - } + if (this.$changedLines.firstRow > this.layerConfig.lastRow) + return; + this.$loop.schedule(this.CHANGE_LINES); + }; + VirtualRenderer.prototype.onChangeNewLineMode = function () { + this.$loop.schedule(this.CHANGE_TEXT); + this.$textLayer.$updateEolChar(); + this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR); + }; + VirtualRenderer.prototype.onChangeTabSize = function () { + this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); + this.$textLayer.onChangeTabSize(); + }; + VirtualRenderer.prototype.updateText = function () { + this.$loop.schedule(this.CHANGE_TEXT); + }; + VirtualRenderer.prototype.updateFull = function (force) { + if (force) + this.$renderChanges(this.CHANGE_FULL, true); + else + this.$loop.schedule(this.CHANGE_FULL); + }; + VirtualRenderer.prototype.updateFontSize = function () { + this.$textLayer.checkForSizeChanges(); + }; + VirtualRenderer.prototype.$updateSizeAsync = function () { + if (this.$loop.pending) + this.$size.$dirty = true; + else + this.onResize(); + }; + VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) { + if (this.resizing > 2) + return; + else if (this.resizing > 0) + this.resizing++; + else + this.resizing = force ? 1 : 0; + var el = this.container; + if (!height) + height = el.clientHeight || el.scrollHeight; + if (!height && this.$maxLines && this.lineHeight > 1) { + if (!el.style.height || el.style.height == "0px") { + el.style.height = "1px"; + height = el.clientHeight || el.scrollHeight; } } - }); - this.add("parens", "deletion", function (state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && selected == '(') { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.start.column + 1, range.start.column + 2); - if (rightChar == ')') { - range.end.column++; - return range; - } + if (!width) + width = el.clientWidth || el.scrollWidth; + var changes = this.$updateCachedSize(force, gutterWidth, width, height); + if (this.$resizeTimer) + this.$resizeTimer.cancel(); + if (!this.$size.scrollerHeight || (!width && !height)) + return this.resizing = 0; + if (force) + this.$gutterLayer.$padding = null; + if (force) + this.$renderChanges(changes | this.$changes, true); + else + this.$loop.schedule(changes | this.$changes); + if (this.resizing) + this.resizing = 0; + this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null; + if (this.$customScrollbar) { + this.$updateCustomScrollbar(true); } - }); - this.add("brackets", "insertion", function (state, action, editor, session, text) { - if (text == '[') { - initContext(editor); - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, '[', ']'); - } - else if (CstyleBehaviour.isSaneInsertion(editor, session)) { - CstyleBehaviour.recordAutoInsert(editor, session, "]"); - return { - text: '[]', - selection: [1, 1] - }; - } + }; + VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) { + height -= (this.$extraHeight || 0); + var changes = 0; + var size = this.$size; + var oldSize = { + width: size.width, + height: size.height, + scrollerHeight: size.scrollerHeight, + scrollerWidth: size.scrollerWidth + }; + if (height && (force || size.height != height)) { + size.height = height; + changes |= this.CHANGE_SIZE; + size.scrollerHeight = size.height; + if (this.$horizScroll) + size.scrollerHeight -= this.scrollBarH.getHeight(); + this.scrollBarV.setHeight(size.scrollerHeight); + this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; + changes = changes | this.CHANGE_SCROLL; } - else if (text == ']') { - initContext(editor); - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar == ']') { - var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row }); - if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { - CstyleBehaviour.popAutoInsertedClosing(); - return { - text: '', - selection: [1, 1] - }; - } + if (width && (force || size.width != width)) { + changes |= this.CHANGE_SIZE; + size.width = width; + if (gutterWidth == null) + gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; + this.gutterWidth = gutterWidth; + dom.setStyle(this.scrollBarH.element.style, "left", gutterWidth + "px"); + dom.setStyle(this.scroller.style, "left", gutterWidth + this.margin.left + "px"); + size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h); + dom.setStyle(this.$gutter.style, "left", this.margin.left + "px"); + var right = this.scrollBarV.getWidth() + "px"; + dom.setStyle(this.scrollBarH.element.style, "right", right); + dom.setStyle(this.scroller.style, "right", right); + dom.setStyle(this.scroller.style, "bottom", this.scrollBarH.getHeight()); + this.scrollBarH.setWidth(size.scrollerWidth); + if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) { + changes |= this.CHANGE_FULL; } } - }); - this.add("brackets", "deletion", function (state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && selected == '[') { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.start.column + 1, range.start.column + 2); - if (rightChar == ']') { - range.end.column++; - return range; - } + size.$dirty = !width || !height; + if (changes) + this._signal("resize", oldSize); + return changes; + }; + VirtualRenderer.prototype.onGutterResize = function (width) { + var gutterWidth = this.$showGutter ? width : 0; + if (gutterWidth != this.gutterWidth) + this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); + if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { + this.$loop.schedule(this.CHANGE_FULL); } - }); - this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { - var quotes = session.$mode.$quotes || defaultQuotes; - if (text.length == 1 && quotes[text]) { - if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) - return; - initContext(editor); - var quote = text; - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, quote, quote); - } - else if (!selected) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - var leftChar = line.substring(cursor.column - 1, cursor.column); - var rightChar = line.substring(cursor.column, cursor.column + 1); - var token = session.getTokenAt(cursor.row, cursor.column); - var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); - if (leftChar == "\\" && token && /escape/.test(token.type)) - return null; - var stringBefore = token && /string|escape/.test(token.type); - var stringAfter = !rightToken || /string|escape/.test(rightToken.type); - var pair; - if (rightChar == quote) { - pair = stringBefore !== stringAfter; - if (pair && /string\.end/.test(rightToken.type)) - pair = false; - } - else { - if (stringBefore && !stringAfter) - return null; // wrap string with different quote - if (stringBefore && stringAfter) - return null; // do not pair quotes inside strings - var wordRe = session.$mode.tokenRe; - wordRe.lastIndex = 0; - var isWordBefore = wordRe.test(leftChar); - wordRe.lastIndex = 0; - var isWordAfter = wordRe.test(rightChar); - var pairQuotesAfter = session.$mode.$pairQuotesAfter; - var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar); - if ((!shouldPairQuotes && isWordBefore) || isWordAfter) - return null; // before or after alphanumeric - if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) - return null; // there is rightChar and it isn't closing - var charBefore = line[cursor.column - 2]; - if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore))) - return null; - pair = true; - } - return { - text: pair ? quote + quote : "", - selection: [1, 1] - }; - } + else if (this.$size.$dirty) { + this.$loop.schedule(this.CHANGE_FULL); } - }); - this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { - var quotes = session.$mode.$quotes || defaultQuotes; - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.start.column + 1, range.start.column + 2); - if (rightChar == selected) { - range.end.column++; - return range; - } + else { + this.$computeLayerConfig(); } - }); - if (options.closeDocComment !== false) { - this.add("doc comment end", "insertion", function (state, action, editor, session, text) { - if (state === "doc-start" && (text === "\n" || text === "\r\n") && editor.selection.isEmpty()) { - var cursor = editor.getCursorPosition(); - if (cursor.column === 0) { - return; - } - var line = session.doc.getLine(cursor.row); - var nextLine = session.doc.getLine(cursor.row + 1); - var tokens = session.getTokens(cursor.row); - var index = 0; - for (var i = 0; i < tokens.length; i++) { - index += tokens[i].value.length; - var currentToken = tokens[i]; - if (index >= cursor.column) { - if (index === cursor.column) { - if (!/\.doc/.test(currentToken.type)) { - return; - } - if (/\*\//.test(currentToken.value)) { - var nextToken = tokens[i + 1]; - if (!nextToken || !/\.doc/.test(nextToken.type)) { - return; - } - } - } - var cursorPosInToken = cursor.column - (index - currentToken.value.length); - var closeDocPos = currentToken.value.indexOf("*/"); - var openDocPos = currentToken.value.indexOf("/**", closeDocPos > -1 ? closeDocPos + 2 : 0); - if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) { - return; - } - if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos - && cursorPosInToken <= openDocPos || !/\.doc/.test(currentToken.type)) { - return; - } - break; - } - } - var indent = this.$getIndent(line); - if (/\s*\*/.test(nextLine)) { - if (/^\s*\*/.test(line)) { - return { - text: text + indent + "* ", - selection: [1, 2 + indent.length, 1, 2 + indent.length] - }; - } - else { - return { - text: text + indent + " * ", - selection: [1, 3 + indent.length, 1, 3 + indent.length] - }; - } - } - if (/\/\*\*/.test(line.substring(0, cursor.column))) { - return { - text: text + indent + " * " + text + " " + indent + "*/", - selection: [1, 4 + indent.length, 1, 4 + indent.length] - }; - } - } - }); - } -}; -CstyleBehaviour.isSaneInsertion = function (editor, session) { - var cursor = editor.getCursorPosition(); - var iterator = new TokenIterator(session, cursor.row, cursor.column); - if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { - if (/[)}\]]/.test(editor.session.getLine(cursor.row)[cursor.column])) - return true; - var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); - if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) - return false; - } - iterator.stepForward(); - return iterator.getCurrentTokenRow() !== cursor.row || - this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); -}; -CstyleBehaviour["$matchTokenType"] = function (token, types) { - return types.indexOf(token.type || token) > -1; -}; -CstyleBehaviour["recordAutoInsert"] = function (editor, session, bracket) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - if (!this["isAutoInsertedClosing"](cursor, line, context.autoInsertedLineEnd[0])) - context.autoInsertedBrackets = 0; - context.autoInsertedRow = cursor.row; - context.autoInsertedLineEnd = bracket + line.substr(cursor.column); - context.autoInsertedBrackets++; -}; -CstyleBehaviour["recordMaybeInsert"] = function (editor, session, bracket) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - if (!this["isMaybeInsertedClosing"](cursor, line)) - context.maybeInsertedBrackets = 0; - context.maybeInsertedRow = cursor.row; - context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; - context.maybeInsertedLineEnd = line.substr(cursor.column); - context.maybeInsertedBrackets++; -}; -CstyleBehaviour["isAutoInsertedClosing"] = function (cursor, line, bracket) { - return context.autoInsertedBrackets > 0 && - cursor.row === context.autoInsertedRow && - bracket === context.autoInsertedLineEnd[0] && - line.substr(cursor.column) === context.autoInsertedLineEnd; -}; -CstyleBehaviour["isMaybeInsertedClosing"] = function (cursor, line) { - return context.maybeInsertedBrackets > 0 && - cursor.row === context.maybeInsertedRow && - line.substr(cursor.column) === context.maybeInsertedLineEnd && - line.substr(0, cursor.column) == context.maybeInsertedLineStart; -}; -CstyleBehaviour["popAutoInsertedClosing"] = function () { - context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); - context.autoInsertedBrackets--; -}; -CstyleBehaviour["clearMaybeInsertedClosing"] = function () { - if (context) { - context.maybeInsertedBrackets = 0; - context.maybeInsertedRow = -1; - } -}; -oop.inherits(CstyleBehaviour, Behaviour); -exports.CstyleBehaviour = CstyleBehaviour; - -}); - -ace.define("ace/unicode",["require","exports","module"], function(require, exports, module){"use strict"; -var wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2]; -var code = 0; -var str = []; -for (var i = 0; i < wordChars.length; i += 2) { - str.push(code += wordChars[i]); - if (wordChars[i + 1]) - str.push(45, code += wordChars[i + 1]); -} -exports.wordChars = String.fromCharCode.apply(null, str); - -}); - -ace.define("ace/mode/text",["require","exports","module","ace/config","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"], function(require, exports, module){"use strict"; -var config = require("../config"); -var Tokenizer = require("../tokenizer").Tokenizer; -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; -var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; -var unicode = require("../unicode"); -var lang = require("../lib/lang"); -var TokenIterator = require("../token_iterator").TokenIterator; -var Range = require("../range").Range; -var Mode; -Mode = function () { - this.HighlightRules = TextHighlightRules; -}; -(function () { - this.$defaultBehaviour = new CstyleBehaviour(); - this.tokenRe = new RegExp("^[" + unicode.wordChars + "\\$_]+", "g"); - this.nonTokenRe = new RegExp("^(?:[^" + unicode.wordChars + "\\$_]|\\s])+", "g"); - this.getTokenizer = function () { - if (!this.$tokenizer) { - this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig); - this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); + }; + VirtualRenderer.prototype.adjustWrapLimit = function () { + var availableWidth = this.$size.scrollerWidth - this.$padding * 2; + var limit = Math.floor(availableWidth / this.characterWidth); + return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); + }; + VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) { + this.setOption("animatedScroll", shouldAnimate); + }; + VirtualRenderer.prototype.getAnimatedScroll = function () { + return this.$animatedScroll; + }; + VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) { + this.setOption("showInvisibles", showInvisibles); + this.session.$bidiHandler.setShowInvisibles(showInvisibles); + }; + VirtualRenderer.prototype.getShowInvisibles = function () { + return this.getOption("showInvisibles"); + }; + VirtualRenderer.prototype.getDisplayIndentGuides = function () { + return this.getOption("displayIndentGuides"); + }; + VirtualRenderer.prototype.setDisplayIndentGuides = function (display) { + this.setOption("displayIndentGuides", display); + }; + VirtualRenderer.prototype.getHighlightIndentGuides = function () { + return this.getOption("highlightIndentGuides"); + }; + VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) { + this.setOption("highlightIndentGuides", highlight); + }; + VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) { + this.setOption("showPrintMargin", showPrintMargin); + }; + VirtualRenderer.prototype.getShowPrintMargin = function () { + return this.getOption("showPrintMargin"); + }; + VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) { + this.setOption("printMarginColumn", printMarginColumn); + }; + VirtualRenderer.prototype.getPrintMarginColumn = function () { + return this.getOption("printMarginColumn"); + }; + VirtualRenderer.prototype.getShowGutter = function () { + return this.getOption("showGutter"); + }; + VirtualRenderer.prototype.setShowGutter = function (show) { + return this.setOption("showGutter", show); + }; + VirtualRenderer.prototype.getFadeFoldWidgets = function () { + return this.getOption("fadeFoldWidgets"); + }; + VirtualRenderer.prototype.setFadeFoldWidgets = function (show) { + this.setOption("fadeFoldWidgets", show); + }; + VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) { + this.setOption("highlightGutterLine", shouldHighlight); + }; + VirtualRenderer.prototype.getHighlightGutterLine = function () { + return this.getOption("highlightGutterLine"); + }; + VirtualRenderer.prototype.$updatePrintMargin = function () { + if (!this.$showPrintMargin && !this.$printMarginEl) + return; + if (!this.$printMarginEl) { + var containerEl = dom.createElement("div"); + containerEl.className = "ace_layer ace_print-margin-layer"; + this.$printMarginEl = dom.createElement("div"); + this.$printMarginEl.className = "ace_print-margin"; + containerEl.appendChild(this.$printMarginEl); + this.content.insertBefore(containerEl, this.content.firstChild); } - return this.$tokenizer; + var style = this.$printMarginEl.style; + style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + "px"; + style.visibility = this.$showPrintMargin ? "visible" : "hidden"; + if (this.session && this.session.$wrap == -1) + this.adjustWrapLimit(); }; - this.lineCommentStart = ""; - this.blockComment = ""; - this.toggleCommentLines = function (state, session, startRow, endRow) { - var doc = session.doc; - var ignoreBlankLines = true; - var shouldRemove = true; - var minIndent = Infinity; - var tabSize = session.getTabSize(); - var insertAtTabStop = false; - if (!this.lineCommentStart) { - if (!this.blockComment) - return false; - var lineCommentStart = this.blockComment.start; - var lineCommentEnd = this.blockComment.end; - var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); - var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); - var comment = function (line, i) { - if (testRemove(line, i)) - return; - if (!ignoreBlankLines || /\S/.test(line)) { - doc.insertInLine({ row: i, column: line.length }, lineCommentEnd); - doc.insertInLine({ row: i, column: minIndent }, lineCommentStart); - } - }; - var uncomment = function (line, i) { - var m; - if (m = line.match(regexpEnd)) - doc.removeInLine(i, line.length - m[0].length, line.length); - if (m = line.match(regexpStart)) - doc.removeInLine(i, m[1].length, m[0].length); - }; - var testRemove = function (line, row) { - if (regexpStart.test(line)) - return true; - var tokens = session.getTokens(row); - for (var i = 0; i < tokens.length; i++) { - if (tokens[i].type === "comment") - return true; - } - }; + VirtualRenderer.prototype.getContainerElement = function () { + return this.container; + }; + VirtualRenderer.prototype.getMouseEventTarget = function () { + return this.scroller; + }; + VirtualRenderer.prototype.getTextAreaContainer = function () { + return this.container; + }; + VirtualRenderer.prototype.$moveTextAreaToCursor = function () { + if (this.$isMousePressed) + return; + var style = this.textarea.style; + var composition = this.$composition; + if (!this.$keepTextAreaAtCursor && !composition) { + dom.translate(this.textarea, -100, 0); + return; + } + var pixelPos = this.$cursorLayer.$pixelPos; + if (!pixelPos) + return; + if (composition && composition.markerRange) + pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true); + var config = this.layerConfig; + var posTop = pixelPos.top; + var posLeft = pixelPos.left; + posTop -= config.offset; + var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1; + if (posTop < 0 || posTop > config.height - h) { + dom.translate(this.textarea, 0, 0); + return; + } + var w = 1; + var maxTop = this.$size.height - h; + if (!composition) { + posTop += this.lineHeight; } else { - if (Array.isArray(this.lineCommentStart)) { - var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); - var lineCommentStart = this.lineCommentStart[0]; + if (composition.useTextareaForIME) { + var val = this.textarea.value; + w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]); } else { - var regexpStart = lang.escapeRegExp(this.lineCommentStart); - var lineCommentStart = this.lineCommentStart; + posTop += this.lineHeight + 2; } - regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); - insertAtTabStop = session.getUseSoftTabs(); - var uncomment = function (line, i) { - var m = line.match(regexpStart); - if (!m) - return; - var start = m[1].length, end = m[0].length; - if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") - end--; - doc.removeInLine(i, start, end); - }; - var commentWithSpace = lineCommentStart + " "; - var comment = function (line, i) { - if (!ignoreBlankLines || /\S/.test(line)) { - if (shouldInsertSpace(line, minIndent, minIndent)) - doc.insertInLine({ row: i, column: minIndent }, commentWithSpace); - else - doc.insertInLine({ row: i, column: minIndent }, lineCommentStart); + } + posLeft -= this.scrollLeft; + if (posLeft > this.$size.scrollerWidth - w) + posLeft = this.$size.scrollerWidth - w; + posLeft += this.gutterWidth + this.margin.left; + dom.setStyle(style, "height", h + "px"); + dom.setStyle(style, "width", w + "px"); + dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop)); + }; + VirtualRenderer.prototype.getFirstVisibleRow = function () { + return this.layerConfig.firstRow; + }; + VirtualRenderer.prototype.getFirstFullyVisibleRow = function () { + return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); + }; + VirtualRenderer.prototype.getLastFullyVisibleRow = function () { + var config = this.layerConfig; + var lastRow = config.lastRow; + var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight; + if (top - this.session.getScrollTop() > config.height - config.lineHeight) + return lastRow - 1; + return lastRow; + }; + VirtualRenderer.prototype.getLastVisibleRow = function () { + return this.layerConfig.lastRow; + }; + VirtualRenderer.prototype.setPadding = function (padding) { + this.$padding = padding; + this.$textLayer.setPadding(padding); + this.$cursorLayer.setPadding(padding); + this.$markerFront.setPadding(padding); + this.$markerBack.setPadding(padding); + this.$loop.schedule(this.CHANGE_FULL); + this.$updatePrintMargin(); + }; + VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) { + var sm = this.scrollMargin; + sm.top = top | 0; + sm.bottom = bottom | 0; + sm.right = right | 0; + sm.left = left | 0; + sm.v = sm.top + sm.bottom; + sm.h = sm.left + sm.right; + if (sm.top && this.scrollTop <= 0 && this.session) + this.session.setScrollTop(-sm.top); + this.updateFull(); + }; + VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) { + var sm = this.margin; + sm.top = top | 0; + sm.bottom = bottom | 0; + sm.right = right | 0; + sm.left = left | 0; + sm.v = sm.top + sm.bottom; + sm.h = sm.left + sm.right; + this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height); + this.updateFull(); + }; + VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () { + return this.$hScrollBarAlwaysVisible; + }; + VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) { + this.setOption("hScrollBarAlwaysVisible", alwaysVisible); + }; + VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () { + return this.$vScrollBarAlwaysVisible; + }; + VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) { + this.setOption("vScrollBarAlwaysVisible", alwaysVisible); + }; + VirtualRenderer.prototype.$updateScrollBarV = function () { + var scrollHeight = this.layerConfig.maxHeight; + var scrollerHeight = this.$size.scrollerHeight; + if (!this.$maxLines && this.$scrollPastEnd) { + scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd; + if (this.scrollTop > scrollHeight - scrollerHeight) { + scrollHeight = this.scrollTop + scrollerHeight; + this.scrollBarV.scrollTop = null; + } + } + this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v); + this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); + }; + VirtualRenderer.prototype.$updateScrollBarH = function () { + this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); + this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); + }; + VirtualRenderer.prototype.freeze = function () { + this.$frozen = true; + }; + VirtualRenderer.prototype.unfreeze = function () { + this.$frozen = false; + }; + VirtualRenderer.prototype.$renderChanges = function (changes, force) { + if (this.$changes) { + changes |= this.$changes; + this.$changes = 0; + } + if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) { + this.$changes |= changes; + return; + } + if (this.$size.$dirty) { + this.$changes |= changes; + return this.onResize(true); + } + if (!this.lineHeight) { + this.$textLayer.checkForSizeChanges(); + } + this._signal("beforeRender", changes); + if (this.session && this.session.$bidiHandler) + this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics); + var config = this.layerConfig; + if (changes & this.CHANGE_FULL || + changes & this.CHANGE_SIZE || + changes & this.CHANGE_TEXT || + changes & this.CHANGE_LINES || + changes & this.CHANGE_SCROLL || + changes & this.CHANGE_H_SCROLL) { + changes |= this.$computeLayerConfig() | this.$loop.clear(); + if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) { + var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight; + if (st > 0) { + this.scrollTop = st; + changes = changes | this.CHANGE_SCROLL; + changes |= this.$computeLayerConfig() | this.$loop.clear(); } - }; - var testRemove = function (line, i) { - return regexpStart.test(line); - }; - var shouldInsertSpace = function (line, before, after) { - var spaces = 0; - while (before-- && line.charAt(before) == " ") - spaces++; - if (spaces % tabSize != 0) - return false; - var spaces = 0; - while (line.charAt(after++) == " ") - spaces++; - if (tabSize > 2) - return spaces % tabSize != tabSize - 1; + } + config = this.layerConfig; + this.$updateScrollBarV(); + if (changes & this.CHANGE_H_SCROLL) + this.$updateScrollBarH(); + dom.translate(this.content, -this.scrollLeft, -config.offset); + var width = config.width + 2 * this.$padding + "px"; + var height = config.minHeight + "px"; + dom.setStyle(this.content.style, "width", width); + dom.setStyle(this.content.style, "height", height); + } + if (changes & this.CHANGE_H_SCROLL) { + dom.translate(this.content, -this.scrollLeft, -config.offset); + this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller " : "ace_scroller ace_scroll-left "; + if (this.enableKeyboardAccessibility) + this.scroller.className += this.keyboardFocusClassName; + } + if (changes & this.CHANGE_FULL) { + this.$changedLines = null; + this.$textLayer.update(config); + if (this.$showGutter) + this.$gutterLayer.update(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); + } + this.$markerBack.update(config); + this.$markerFront.update(config); + this.$cursorLayer.update(config); + this.$moveTextAreaToCursor(); + this._signal("afterRender", changes); + return; + } + if (changes & this.CHANGE_SCROLL) { + this.$changedLines = null; + if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) + this.$textLayer.update(config); + else + this.$textLayer.scrollLines(config); + if (this.$showGutter) { + if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES) + this.$gutterLayer.update(config); else - return spaces % tabSize == 0; - }; + this.$gutterLayer.scrollLines(config); + } + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); + } + this.$markerBack.update(config); + this.$markerFront.update(config); + this.$cursorLayer.update(config); + this.$moveTextAreaToCursor(); + this._signal("afterRender", changes); + return; } - function iter(fun) { - for (var i = startRow; i <= endRow; i++) - fun(doc.getLine(i), i); + if (changes & this.CHANGE_TEXT) { + this.$changedLines = null; + this.$textLayer.update(config); + if (this.$showGutter) + this.$gutterLayer.update(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); + } } - var minEmptyLength = Infinity; - iter(function (line, i) { - var indent = line.search(/\S/); - if (indent !== -1) { - if (indent < minIndent) - minIndent = indent; - if (shouldRemove && !testRemove(line, i)) - shouldRemove = false; + else if (changes & this.CHANGE_LINES) { + if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) + this.$gutterLayer.update(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); } - else if (minEmptyLength > line.length) { - minEmptyLength = line.length; + } + else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { + if (this.$showGutter) + this.$gutterLayer.update(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); } - }); - if (minIndent == Infinity) { - minIndent = minEmptyLength; - ignoreBlankLines = false; - shouldRemove = false; } - if (insertAtTabStop && minIndent % tabSize != 0) - minIndent = Math.floor(minIndent / tabSize) * tabSize; - iter(shouldRemove ? uncomment : comment); - }; - this.toggleBlockComment = function (state, session, range, cursor) { - var comment = this.blockComment; - if (!comment) - return; - if (!comment.start && comment[0]) - comment = comment[0]; - var iterator = new TokenIterator(session, cursor.row, cursor.column); - var token = iterator.getCurrentToken(); - var sel = session.selection; - var initialRange = session.selection.toOrientedRange(); - var startRow, colDiff; - if (token && /comment/.test(token.type)) { - var startRange, endRange; - while (token && /comment/.test(token.type)) { - var i = token.value.indexOf(comment.start); - if (i != -1) { - var row = iterator.getCurrentTokenRow(); - var column = iterator.getCurrentTokenColumn() + i; - startRange = new Range(row, column, row, column + comment.start.length); - break; - } - token = iterator.stepBackward(); + else if (changes & this.CHANGE_CURSOR) { + if (this.$highlightGutterLine) + this.$gutterLayer.updateLineHighlight(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); } - var iterator = new TokenIterator(session, cursor.row, cursor.column); - var token = iterator.getCurrentToken(); - while (token && /comment/.test(token.type)) { - var i = token.value.indexOf(comment.end); - if (i != -1) { - var row = iterator.getCurrentTokenRow(); - var column = iterator.getCurrentTokenColumn() + i; - endRange = new Range(row, column, row, column + comment.end.length); - break; - } - token = iterator.stepForward(); + } + if (changes & this.CHANGE_CURSOR) { + this.$cursorLayer.update(config); + this.$moveTextAreaToCursor(); + } + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { + this.$markerFront.update(config); + } + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { + this.$markerBack.update(config); + } + this._signal("afterRender", changes); + }; + VirtualRenderer.prototype.$autosize = function () { + var height = this.session.getScreenLength() * this.lineHeight; + var maxHeight = this.$maxLines * this.lineHeight; + var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0); + if (this.$horizScroll) + desiredHeight += this.scrollBarH.getHeight(); + if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight) + desiredHeight = this.$maxPixelHeight; + var hideScrollbars = desiredHeight <= 2 * this.lineHeight; + var vScroll = !hideScrollbars && height > maxHeight; + if (desiredHeight != this.desiredHeight || + this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { + if (vScroll != this.$vScroll) { + this.$vScroll = vScroll; + this.scrollBarV.setVisible(vScroll); } - if (endRange) - session.remove(endRange); - if (startRange) { - session.remove(startRange); - startRow = startRange.start.row; - colDiff = -comment.start.length; + var w = this.container.clientWidth; + this.container.style.height = desiredHeight + "px"; + this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); + this.desiredHeight = desiredHeight; + this._signal("autosize"); + } + }; + VirtualRenderer.prototype.$computeLayerConfig = function () { + var session = this.session; + var size = this.$size; + var hideScrollbars = size.height <= 2 * this.lineHeight; + var screenLines = this.session.getScreenLength(); + var maxHeight = screenLines * this.lineHeight; + var longestLine = this.$getLongestLine(); + var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || + size.scrollerWidth - longestLine - 2 * this.$padding < 0); + var hScrollChanged = this.$horizScroll !== horizScroll; + if (hScrollChanged) { + this.$horizScroll = horizScroll; + this.scrollBarH.setVisible(horizScroll); + } + var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine + if (this.$maxLines && this.lineHeight > 1) { + this.$autosize(); + hideScrollbars = size.height <= 2 * this.lineHeight; + } + var minHeight = size.scrollerHeight + this.lineHeight; + var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd + ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd + : 0; + maxHeight += scrollPastEnd; + var sm = this.scrollMargin; + this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom))); + this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right))); + var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || + size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top); + var vScrollChanged = vScrollBefore !== vScroll; + if (vScrollChanged) { + this.$vScroll = vScroll; + this.scrollBarV.setVisible(vScroll); + } + var offset = this.scrollTop % this.lineHeight; + var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; + var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); + var lastRow = firstRow + lineCount; + var firstRowScreen, firstRowHeight; + var lineHeight = this.lineHeight; + firstRow = session.screenToDocumentRow(firstRow, 0); + var foldLine = session.getFoldLine(firstRow); + if (foldLine) { + firstRow = foldLine.start.row; + } + firstRowScreen = session.documentToScreenRow(firstRow, 0); + firstRowHeight = session.getRowLength(firstRow) * lineHeight; + lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); + minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + + firstRowHeight; + offset = this.scrollTop - firstRowScreen * lineHeight; + if (offset < 0 && firstRowScreen > 0) { + firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight)); + offset = this.scrollTop - firstRowScreen * lineHeight; + } + var changes = 0; + if (this.layerConfig.width != longestLine || hScrollChanged) + changes = this.CHANGE_H_SCROLL; + if (hScrollChanged || vScrollChanged) { + changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height); + this._signal("scrollbarVisibilityChanged"); + if (vScrollChanged) + longestLine = this.$getLongestLine(); + } + this.layerConfig = { + width: longestLine, + padding: this.$padding, + firstRow: firstRow, + firstRowScreen: firstRowScreen, + lastRow: lastRow, + lineHeight: lineHeight, + characterWidth: this.characterWidth, + minHeight: minHeight, + maxHeight: maxHeight, + offset: offset, + gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0, + height: this.$size.scrollerHeight + }; + if (this.session.$bidiHandler) + this.session.$bidiHandler.setContentWidth(longestLine - this.$padding); + return changes; + }; + VirtualRenderer.prototype.$updateLines = function () { + if (!this.$changedLines) + return; + var firstRow = this.$changedLines.firstRow; + var lastRow = this.$changedLines.lastRow; + this.$changedLines = null; + var layerConfig = this.layerConfig; + if (firstRow > layerConfig.lastRow + 1) { + return; + } + if (lastRow < layerConfig.firstRow) { + return; + } + if (lastRow === Infinity) { + if (this.$showGutter) + this.$gutterLayer.update(layerConfig); + this.$textLayer.update(layerConfig); + return; + } + this.$textLayer.updateLines(layerConfig, firstRow, lastRow); + return true; + }; + VirtualRenderer.prototype.$getLongestLine = function () { + var charCount = this.session.getScreenWidth(); + if (this.showInvisibles && !this.session.$useWrapMode) + charCount += 1; + if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH) + charCount = this.$textLayer.MAX_LINE_LENGTH + 30; + return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); + }; + VirtualRenderer.prototype.updateFrontMarkers = function () { + this.$markerFront.setMarkers(this.session.getMarkers(true)); + this.$loop.schedule(this.CHANGE_MARKER_FRONT); + }; + VirtualRenderer.prototype.updateBackMarkers = function () { + this.$markerBack.setMarkers(this.session.getMarkers()); + this.$loop.schedule(this.CHANGE_MARKER_BACK); + }; + VirtualRenderer.prototype.addGutterDecoration = function (row, className) { + this.$gutterLayer.addGutterDecoration(row, className); + }; + VirtualRenderer.prototype.removeGutterDecoration = function (row, className) { + this.$gutterLayer.removeGutterDecoration(row, className); + }; + VirtualRenderer.prototype.updateBreakpoints = function (rows) { + this._rows = rows; + this.$loop.schedule(this.CHANGE_GUTTER); + }; + VirtualRenderer.prototype.setAnnotations = function (annotations) { + this.$gutterLayer.setAnnotations(annotations); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + VirtualRenderer.prototype.updateCursor = function () { + this.$loop.schedule(this.CHANGE_CURSOR); + }; + VirtualRenderer.prototype.hideCursor = function () { + this.$cursorLayer.hideCursor(); + }; + VirtualRenderer.prototype.showCursor = function () { + this.$cursorLayer.showCursor(); + }; + VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) { + this.scrollCursorIntoView(anchor, offset); + this.scrollCursorIntoView(lead, offset); + }; + VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) { + if (this.$size.scrollerHeight === 0) + return; + var pos = this.$cursorLayer.getPixelPosition(cursor); + var newLeft = pos.left; + var newTop = pos.top; + var topMargin = $viewMargin && $viewMargin.top || 0; + var bottomMargin = $viewMargin && $viewMargin.bottom || 0; + if (this.$scrollAnimation) { + this.$stopAnimation = true; + } + var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; + if (currentTop + topMargin > newTop) { + if (offset && currentTop + topMargin > newTop + this.lineHeight) + newTop -= offset * this.$size.scrollerHeight; + if (newTop === 0) + newTop = -this.scrollMargin.top; + this.session.setScrollTop(newTop); + } + else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) { + if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight) + newTop += offset * this.$size.scrollerHeight; + this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight); + } + var currentLeft = this.scrollLeft; + var twoCharsWidth = 2 * this.layerConfig.characterWidth; + if (newLeft - twoCharsWidth < currentLeft) { + newLeft -= twoCharsWidth; + if (newLeft < this.$padding + twoCharsWidth) { + newLeft = -this.scrollMargin.left; } + this.session.setScrollLeft(newLeft); } else { - colDiff = comment.start.length; - startRow = range.start.row; - session.insert(range.end, comment.end); - session.insert(range.start, comment.start); + newLeft += twoCharsWidth; + if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) { + this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth)); + } + else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) { + this.session.setScrollLeft(0); + } } - if (initialRange.start.row == startRow) - initialRange.start.column += colDiff; - if (initialRange.end.row == startRow) - initialRange.end.column += colDiff; - session.selection.fromOrientedRange(initialRange); }; - this.getNextLineIndent = function (state, line, tab) { - return this.$getIndent(line); + VirtualRenderer.prototype.getScrollTop = function () { + return this.session.getScrollTop(); }; - this.checkOutdent = function (state, line, input) { - return false; + VirtualRenderer.prototype.getScrollLeft = function () { + return this.session.getScrollLeft(); }; - this.autoOutdent = function (state, doc, row) { + VirtualRenderer.prototype.getScrollTopRow = function () { + return this.scrollTop / this.lineHeight; }; - this.$getIndent = function (line) { - return line.match(/^\s*/)[0]; + VirtualRenderer.prototype.getScrollBottomRow = function () { + return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); }; - this.createWorker = function (session) { - return null; + VirtualRenderer.prototype.scrollToRow = function (row) { + this.session.setScrollTop(row * this.lineHeight); }; - this.createModeDelegates = function (mapping) { - this.$embeds = []; - this.$modes = {}; - for (var i in mapping) { - if (mapping[i]) { - var Mode = mapping[i]; - var id = Mode.prototype.$id; - var mode = config.$modes[id]; - if (!mode) - config.$modes[id] = mode = new Mode(); - if (!config.$modes[i]) - config.$modes[i] = mode; - this.$embeds.push(i); - this.$modes[i] = mode; - } - } - var delegations = ["toggleBlockComment", "toggleCommentLines", "getNextLineIndent", - "checkOutdent", "autoOutdent", "transformAction", "getCompletions"]; - var _loop_1 = function (i) { - (function (scope) { - var functionName = delegations[i]; - var defaultHandler = scope[functionName]; - scope[delegations[i]] = - function () { - return this.$delegator(functionName, arguments, defaultHandler); - }; - }(this_1)); + VirtualRenderer.prototype.alignCursor = function (cursor, alignment) { + if (typeof cursor == "number") + cursor = { row: cursor, column: 0 }; + var pos = this.$cursorLayer.getPixelPosition(cursor); + var h = this.$size.scrollerHeight - this.lineHeight; + var offset = pos.top - h * (alignment || 0); + this.session.setScrollTop(offset); + return offset; + }; + VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) { + var i = 0; + var l = this.STEPS; + var steps = []; + var func = function (t, x_min, dx) { + return dx * (Math.pow(t - 1, 3) + 1) + x_min; }; - var this_1 = this; - for (var i = 0; i < delegations.length; i++) { - _loop_1(i); - } + for (i = 0; i < l; ++i) + steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); + return steps; }; - this.$delegator = function (method, args, defaultHandler) { - var state = args[0] || "start"; - if (typeof state != "string") { - if (Array.isArray(state[2])) { - var language = state[2][state[2].length - 1]; - var mode = this.$modes[language]; - if (mode) - return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1))); + VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) { + var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 }); + var offset = pos.top; + if (center) + offset -= this.$size.scrollerHeight / 2; + var initialScroll = this.scrollTop; + this.session.setScrollTop(offset); + if (animate !== false) + this.animateScrolling(initialScroll, callback); + }; + VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) { + var toValue = this.scrollTop; + if (!this.$animatedScroll) + return; + var _self = this; + if (fromValue == toValue) + return; + if (this.$scrollAnimation) { + var oldSteps = this.$scrollAnimation.steps; + if (oldSteps.length) { + fromValue = oldSteps[0]; + if (fromValue == toValue) + return; } - state = state[0] || "start"; } - for (var i = 0; i < this.$embeds.length; i++) { - if (!this.$modes[this.$embeds[i]]) - continue; - var split = state.split(this.$embeds[i]); - if (!split[0] && split[1]) { - args[0] = split[1]; - var mode = this.$modes[this.$embeds[i]]; - return mode[method].apply(mode, args); - } + var steps = _self.$calcSteps(fromValue, toValue); + this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps }; + clearInterval(this.$timer); + _self.session.setScrollTop(steps.shift()); + _self.session.$scrollTop = toValue; + function endAnimation() { + _self.$timer = clearInterval(_self.$timer); + _self.$scrollAnimation = null; + _self.$stopAnimation = false; + callback && callback(); } - var ret = defaultHandler.apply(this, args); - return defaultHandler ? ret : undefined; - }; - this.transformAction = function (state, action, editor, session, param) { - if (this.$behaviour) { - var behaviours = this.$behaviour.getBehaviours(); - for (var key in behaviours) { - if (behaviours[key][action]) { - var ret = behaviours[key][action].apply(this, arguments); - if (ret) { - return ret; - } - } + this.$timer = setInterval(function () { + if (_self.$stopAnimation) { + endAnimation(); + return; } - } - }; - this.getKeywords = function (append) { - if (!this.completionKeywords) { - var rules = this.$tokenizer["rules"]; - var completionKeywords = []; - for (var rule in rules) { - var ruleItr = rules[rule]; - for (var r = 0, l = ruleItr.length; r < l; r++) { - if (typeof ruleItr[r].token === "string") { - if (/keyword|support|storage/.test(ruleItr[r].token)) - completionKeywords.push(ruleItr[r].regex); - } - else if (typeof ruleItr[r].token === "object") { - for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { - if (/keyword|support|storage/.test(ruleItr[r].token[a])) { - var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; - completionKeywords.push(rule.substr(1, rule.length - 2)); - } - } - } - } + if (!_self.session) + return clearInterval(_self.$timer); + if (steps.length) { + _self.session.setScrollTop(steps.shift()); + _self.session.$scrollTop = toValue; } - this.completionKeywords = completionKeywords; + else if (toValue != null) { + _self.session.$scrollTop = -1; + _self.session.setScrollTop(toValue); + toValue = null; + } + else { + endAnimation(); + } + }, 10); + }; + VirtualRenderer.prototype.scrollToY = function (scrollTop) { + if (this.scrollTop !== scrollTop) { + this.$loop.schedule(this.CHANGE_SCROLL); + this.scrollTop = scrollTop; } - if (!append) - return this.$keywordList; - return completionKeywords.concat(this.$keywordList || []); }; - this.$createKeywordList = function () { - if (!this.$highlightRules) - this.getTokenizer(); - return this.$keywordList = this.$highlightRules.$keywordList || []; + VirtualRenderer.prototype.scrollToX = function (scrollLeft) { + if (this.scrollLeft !== scrollLeft) + this.scrollLeft = scrollLeft; + this.$loop.schedule(this.CHANGE_H_SCROLL); }; - this.getCompletions = function (state, session, pos, prefix) { - var keywords = this.$keywordList || this.$createKeywordList(); - return keywords.map(function (word) { - return { - name: word, - value: word, - score: 0, - meta: "keyword" - }; - }); + VirtualRenderer.prototype.scrollTo = function (x, y) { + this.session.setScrollTop(y); + this.session.setScrollLeft(x); }; - this.$id = "ace/mode/text"; -}).call(Mode.prototype); -exports.Mode = Mode; - -}); - -ace.define("ace/line_widgets",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; -var dom = require("./lib/dom"); -var LineWidgets = /** @class */ (function () { - function LineWidgets(session) { - this.session = session; - this.session.widgetManager = this; - this.session.getRowLength = this.getRowLength; - this.session.$getWidgetScreenLength = this.$getWidgetScreenLength; - this.updateOnChange = this.updateOnChange.bind(this); - this.renderWidgets = this.renderWidgets.bind(this); - this.measureWidgets = this.measureWidgets.bind(this); - this.session._changedWidgets = []; - this.$onChangeEditor = this.$onChangeEditor.bind(this); - this.session.on("change", this.updateOnChange); - this.session.on("changeFold", this.updateOnFold); - this.session.on("changeEditor", this.$onChangeEditor); - } - LineWidgets.prototype.getRowLength = function (row) { - var h; - if (this.lineWidgets) - h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; - else - h = 0; - if (!this["$useWrapMode"] || !this["$wrapData"][row]) { - return 1 + h; + VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) { + deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); + deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); + }; + VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) { + if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) + return true; + if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight + - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) + return true; + if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) + return true; + if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth + - this.layerConfig.width < -1 + this.scrollMargin.right) + return true; + }; + VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) { + var canvasPos; + if (this.$hasCssTransforms) { + canvasPos = { top: 0, left: 0 }; + var p = this.$fontMetrics.transformCoordinates([x, y]); + x = p[1] - this.gutterWidth - this.margin.left; + y = p[0]; } else { - return this["$wrapData"][row].length + 1 + h; + canvasPos = this.scroller.getBoundingClientRect(); } + var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding; + var offset = offsetX / this.characterWidth; + var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); + var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset); + return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX }; }; - LineWidgets.prototype.$getWidgetScreenLength = function () { - var screenRows = 0; - this.lineWidgets.forEach(function (w) { - if (w && w.rowCount && !w.hidden) - screenRows += w.rowCount; - }); - return screenRows; + VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) { + var canvasPos; + if (this.$hasCssTransforms) { + canvasPos = { top: 0, left: 0 }; + var p = this.$fontMetrics.transformCoordinates([x, y]); + x = p[1] - this.gutterWidth - this.margin.left; + y = p[0]; + } + else { + canvasPos = this.scroller.getBoundingClientRect(); + } + var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding; + var offset = offsetX / this.characterWidth; + var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset); + var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); + return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX); }; - LineWidgets.prototype.$onChangeEditor = function (e) { - this.attach(e.editor); + VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) { + var canvasPos = this.scroller.getBoundingClientRect(); + var pos = this.session.documentToScreenPosition(row, column); + var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row) + ? this.session.$bidiHandler.getPosLeft(pos.column) + : Math.round(pos.column * this.characterWidth)); + var y = pos.row * this.lineHeight; + return { + pageX: canvasPos.left + x - this.scrollLeft, + pageY: canvasPos.top + y - this.scrollTop + }; }; - LineWidgets.prototype.attach = function (editor) { - if (editor && editor.widgetManager && editor.widgetManager != this) - editor.widgetManager.detach(); - if (this.editor == editor) - return; - this.detach(); - this.editor = editor; - if (editor) { - editor.widgetManager = this; - editor.renderer.on("beforeRender", this.measureWidgets); - editor.renderer.on("afterRender", this.renderWidgets); + VirtualRenderer.prototype.visualizeFocus = function () { + dom.addCssClass(this.container, "ace_focus"); + }; + VirtualRenderer.prototype.visualizeBlur = function () { + dom.removeCssClass(this.container, "ace_focus"); + }; + VirtualRenderer.prototype.showComposition = function (composition) { + this.$composition = composition; + if (!composition.cssText) { + composition.cssText = this.textarea.style.cssText; + } + if (composition.useTextareaForIME == undefined) + composition.useTextareaForIME = this.$useTextareaForIME; + if (this.$useTextareaForIME) { + dom.addCssClass(this.textarea, "ace_composition"); + this.textarea.style.cssText = ""; + this.$moveTextAreaToCursor(); + this.$cursorLayer.element.style.display = "none"; + } + else { + composition.markerId = this.session.addMarker(composition.markerRange, "ace_composition_marker", "text"); } }; - LineWidgets.prototype.detach = function (e) { - var editor = this.editor; - if (!editor) - return; - this.editor = null; - editor.widgetManager = null; - editor.renderer.off("beforeRender", this.measureWidgets); - editor.renderer.off("afterRender", this.renderWidgets); - var lineWidgets = this.session.lineWidgets; - lineWidgets && lineWidgets.forEach(function (w) { - if (w && w.el && w.el.parentNode) { - w._inDocument = false; - w.el.parentNode.removeChild(w.el); - } - }); + VirtualRenderer.prototype.setCompositionText = function (text) { + var cursor = this.session.selection.cursor; + this.addToken(text, "composition_placeholder", cursor.row, cursor.column); + this.$moveTextAreaToCursor(); }; - LineWidgets.prototype.updateOnFold = function (e, session) { - var lineWidgets = session.lineWidgets; - if (!lineWidgets || !e.action) + VirtualRenderer.prototype.hideComposition = function () { + if (!this.$composition) return; - var fold = e.data; - var start = fold.start.row; - var end = fold.end.row; - var hide = e.action == "add"; - for (var i = start + 1; i < end; i++) { - if (lineWidgets[i]) - lineWidgets[i].hidden = hide; + if (this.$composition.markerId) + this.session.removeMarker(this.$composition.markerId); + dom.removeCssClass(this.textarea, "ace_composition"); + this.textarea.style.cssText = this.$composition.cssText; + var cursor = this.session.selection.cursor; + this.removeExtraToken(cursor.row, cursor.column); + this.$composition = null; + this.$cursorLayer.element.style.display = ""; + }; + VirtualRenderer.prototype.setGhostText = function (text, position) { + var cursor = this.session.selection.cursor; + var insertPosition = position || { row: cursor.row, column: cursor.column }; + this.removeGhostText(); + var textChunks = this.$calculateWrappedTextChunks(text, insertPosition); + this.addToken(textChunks[0].text, "ghost_text", insertPosition.row, insertPosition.column); + this.$ghostText = { + text: text, + position: { + row: insertPosition.row, + column: insertPosition.column + } + }; + var widgetDiv = dom.createElement("div"); + if (textChunks.length > 1) { + var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column); + var lastLineDiv; + textChunks.slice(1).forEach(function (el) { + var chunkDiv = dom.createElement("div"); + var chunkSpan = dom.createElement("span"); + chunkSpan.className = "ace_ghost_text"; + if (el.wrapped) + chunkDiv.className = "ghost_text_line_wrapped"; + if (el.text.length === 0) + el.text = " "; + chunkSpan.appendChild(dom.createTextNode(el.text)); + chunkDiv.appendChild(chunkSpan); + widgetDiv.appendChild(chunkDiv); + lastLineDiv = chunkDiv; + }); + hiddenTokens.forEach(function (token) { + var element = dom.createElement("span"); + if (!isTextToken(token.type)) + element.className = "ace_" + token.type.replace(/\./g, " ace_"); + element.appendChild(dom.createTextNode(token.value)); + lastLineDiv.appendChild(element); + }); + this.$ghostTextWidget = { + el: widgetDiv, + row: insertPosition.row, + column: insertPosition.column, + className: "ace_ghost_text_container" + }; + this.session.widgetManager.addLineWidget(this.$ghostTextWidget); + var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true); + var el = this.container; + var height = el.getBoundingClientRect().height; + var ghostTextHeight = textChunks.length * this.lineHeight; + var fitsY = ghostTextHeight < (height - pixelPosition.top); + if (fitsY) + return; + if (ghostTextHeight < height) { + this.scrollBy(0, (textChunks.length - 1) * this.lineHeight); + } + else { + this.scrollToRow(insertPosition.row); + } } - if (lineWidgets[end]) { - if (hide) { - if (!lineWidgets[start]) - lineWidgets[start] = lineWidgets[end]; - else - lineWidgets[end].hidden = hide; + }; + VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) { + var availableWidth = this.$size.scrollerWidth - this.$padding * 2; + var limit = Math.floor(availableWidth / this.characterWidth) - 2; + limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small + var textLines = text.split(/\r?\n/); + var textChunks = []; + for (var i = 0; i < textLines.length; i++) { + var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column); + var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize); + if (wrapSplits.length > 0) { + var start = 0; + wrapSplits.push(textLines[i].length); + for (var j = 0; j < wrapSplits.length; j++) { + var textSlice = textLines[i].slice(start, wrapSplits[j]); + textChunks.push({ text: textSlice, wrapped: true }); + start = wrapSplits[j]; + } } else { - if (lineWidgets[start] == lineWidgets[end]) - lineWidgets[start] = undefined; - lineWidgets[end].hidden = hide; + textChunks.push({ text: textLines[i], wrapped: false }); } } + return textChunks; + }; + VirtualRenderer.prototype.removeGhostText = function () { + if (!this.$ghostText) + return; + var position = this.$ghostText.position; + this.removeExtraToken(position.row, position.column); + if (this.$ghostTextWidget) { + this.session.widgetManager.removeLineWidget(this.$ghostTextWidget); + this.$ghostTextWidget = null; + } + this.$ghostText = null; }; - LineWidgets.prototype.updateOnChange = function (delta) { - var lineWidgets = this.session.lineWidgets; - if (!lineWidgets) - return; - var startRow = delta.start.row; - var len = delta.end.row - startRow; - if (len === 0) { - } - else if (delta.action == "remove") { - var removed = lineWidgets.splice(startRow + 1, len); - if (!lineWidgets[startRow] && removed[removed.length - 1]) { - lineWidgets[startRow] = removed.pop(); - } - removed.forEach(function (w) { - w && this.removeLineWidget(w); - }, this); - this.$updateRows(); + VirtualRenderer.prototype.addToken = function (text, type, row, column) { + var session = this.session; + session.bgTokenizer.lines[row] = null; + var newToken = { type: type, value: text }; + var tokens = session.getTokens(row); + if (column == null || !tokens.length) { + tokens.push(newToken); } else { - var args = new Array(len); - if (lineWidgets[startRow] && lineWidgets[startRow].column != null) { - if (delta.start.column > lineWidgets[startRow].column) - startRow++; + var l = 0; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + l += token.value.length; + if (column <= l) { + var diff = token.value.length - (l - column); + var before = token.value.slice(0, diff); + var after = token.value.slice(diff); + tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after }); + break; + } } - args.unshift(startRow, 0); - lineWidgets.splice.apply(lineWidgets, args); - this.$updateRows(); } + this.updateLines(row, row); }; - LineWidgets.prototype.$updateRows = function () { - var lineWidgets = this.session.lineWidgets; - if (!lineWidgets) - return; - var noWidgets = true; - lineWidgets.forEach(function (w, i) { - if (w) { - noWidgets = false; - w.row = i; - while (w.$oldWidget) { - w.$oldWidget.row = i; - w = w.$oldWidget; - } + VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) { + var tokens = this.session.getTokens(row); + var l = 0; + var hasPassedCursor = false; + var hiddenTokens = []; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + l += token.value.length; + if (token.type === "ghost_text") + continue; + if (hasPassedCursor) { + hiddenTokens.push({ type: token.type, value: token.value }); + token.type = "hidden_token"; + continue; } - }); - if (noWidgets) - this.session.lineWidgets = null; - }; - LineWidgets.prototype.$registerLineWidget = function (w) { - if (!this.session.lineWidgets) - this.session.lineWidgets = new Array(this.session.getLength()); - var old = this.session.lineWidgets[w.row]; - if (old) { - w.$oldWidget = old; - if (old.el && old.el.parentNode) { - old.el.parentNode.removeChild(old.el); - old._inDocument = false; + if (l === column) { + hasPassedCursor = true; } } - this.session.lineWidgets[w.row] = w; - return w; + this.updateLines(row, row); + return hiddenTokens; }; - LineWidgets.prototype.addLineWidget = function (w) { - this.$registerLineWidget(w); - w.session = this.session; - if (!this.editor) - return w; - var renderer = this.editor.renderer; - if (w.html && !w.el) { - w.el = dom.createElement("div"); - w.el.innerHTML = w.html; + VirtualRenderer.prototype.removeExtraToken = function (row, column) { + this.session.bgTokenizer.lines[row] = null; + this.updateLines(row, row); + }; + VirtualRenderer.prototype.setTheme = function (theme, cb) { + var _self = this; + this.$themeId = theme; + _self._dispatchEvent('themeChange', { theme: theme }); + if (!theme || typeof theme == "string") { + var moduleName = theme || this.$options.theme.initialValue; + config.loadModule(["theme", moduleName], afterLoad); } - if (w.text && !w.el) { - w.el = dom.createElement("div"); - w.el.textContent = w.text; + else { + afterLoad(theme); } - if (w.el) { - dom.addCssClass(w.el, "ace_lineWidgetContainer"); - if (w.className) { - dom.addCssClass(w.el, w.className); - } - w.el.style.position = "absolute"; - w.el.style.zIndex = "5"; - renderer.container.appendChild(w.el); - w._inDocument = true; - if (!w.coverGutter) { - w.el.style.zIndex = "3"; + function afterLoad(module) { + if (_self.$themeId != theme) + return cb && cb(); + if (!module || !module.cssClass) + throw new Error("couldn't load module " + theme + " or it didn't call define"); + if (module.$id) + _self.$themeId = module.$id; + dom.importCssString(module.cssText, module.cssClass, _self.container); + if (_self.theme) + dom.removeCssClass(_self.container, _self.theme.cssClass); + var padding = "padding" in module ? module.padding + : "padding" in (_self.theme || {}) ? 4 : _self.$padding; + if (_self.$padding && padding != _self.$padding) + _self.setPadding(padding); + _self.$theme = module.cssClass; + _self.theme = module; + dom.addCssClass(_self.container, module.cssClass); + dom.setCssClass(_self.container, "ace_dark", module.isDark); + if (_self.$size) { + _self.$size.width = 0; + _self.$updateSizeAsync(); } - if (w.pixelHeight == null) { - w.pixelHeight = w.el.offsetHeight; + _self._dispatchEvent('themeLoaded', { theme: module }); + cb && cb(); + if (useragent.isSafari && _self.scroller) { + _self.scroller.style.background = "red"; + _self.scroller.style.background = ""; } } - if (w.rowCount == null) { - w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; - } - var fold = this.session.getFoldAt(w.row, 0); - w.$fold = fold; - if (fold) { - var lineWidgets = this.session.lineWidgets; - if (w.row == fold.end.row && !lineWidgets[fold.start.row]) - lineWidgets[fold.start.row] = w; - else - w.hidden = true; - } - this.session._emit("changeFold", { data: { start: { row: w.row } } }); - this.$updateRows(); - this.renderWidgets(null, renderer); - this.onWidgetChanged(w); - return w; }; - LineWidgets.prototype.removeLineWidget = function (w) { - w._inDocument = false; - w.session = null; - if (w.el && w.el.parentNode) - w.el.parentNode.removeChild(w.el); - if (w.editor && w.editor.destroy) - try { - w.editor.destroy(); - } - catch (e) { } - if (this.session.lineWidgets) { - var w1 = this.session.lineWidgets[w.row]; - if (w1 == w) { - this.session.lineWidgets[w.row] = w.$oldWidget; - if (w.$oldWidget) - this.onWidgetChanged(w.$oldWidget); + VirtualRenderer.prototype.getTheme = function () { + return this.$themeId; + }; + VirtualRenderer.prototype.setStyle = function (style, include) { + dom.setCssClass(this.container, style, include !== false); + }; + VirtualRenderer.prototype.unsetStyle = function (style) { + dom.removeCssClass(this.container, style); + }; + VirtualRenderer.prototype.setCursorStyle = function (style) { + dom.setStyle(this.scroller.style, "cursor", style); + }; + VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) { + dom.setStyle(this.scroller.style, "cursor", cursorStyle); + }; + VirtualRenderer.prototype.attachToShadowRoot = function () { + dom.importCssString(editorCss, "ace_editor.css", this.container); + }; + VirtualRenderer.prototype.destroy = function () { + this.freeze(); + this.$fontMetrics.destroy(); + this.$cursorLayer.destroy(); + this.removeAllListeners(); + this.container.textContent = ""; + this.setOption("useResizeObserver", false); + }; + VirtualRenderer.prototype.$updateCustomScrollbar = function (val) { + var _self = this; + this.$horizScroll = this.$vScroll = null; + this.scrollBarV.element.remove(); + this.scrollBarH.element.remove(); + if (val === true) { + this.scrollBarV = new VScrollBarCustom(this.container, this); + this.scrollBarH = new HScrollBarCustom(this.container, this); + this.scrollBarV.setHeight(this.$size.scrollerHeight); + this.scrollBarH.setWidth(this.$size.scrollerWidth); + this.scrollBarV.addEventListener("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollTop(e.data - _self.scrollMargin.top); + }); + this.scrollBarH.addEventListener("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollLeft(e.data - _self.scrollMargin.left); + }); + if (!this.$scrollDecorator) { + this.$scrollDecorator = new Decorator(this.scrollBarV, this); + this.$scrollDecorator.$updateDecorators(); } else { - while (w1) { - if (w1.$oldWidget == w) { - w1.$oldWidget = w.$oldWidget; - break; - } - w1 = w1.$oldWidget; - } + this.$scrollDecorator.setScrollBarV(this.scrollBarV); + this.$scrollDecorator.$updateDecorators(); } } - this.session._emit("changeFold", { data: { start: { row: w.row } } }); - this.$updateRows(); - }; - LineWidgets.prototype.getWidgetsAtRow = function (row) { - var lineWidgets = this.session.lineWidgets; - var w = lineWidgets && lineWidgets[row]; - var list = []; - while (w) { - list.push(w); - w = w.$oldWidget; + else { + this.scrollBarV = new VScrollBar(this.container, this); + this.scrollBarH = new HScrollBar(this.container, this); + this.scrollBarV.addEventListener("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollTop(e.data - _self.scrollMargin.top); + }); + this.scrollBarH.addEventListener("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollLeft(e.data - _self.scrollMargin.left); + }); } - return list; - }; - LineWidgets.prototype.onWidgetChanged = function (w) { - this.session._changedWidgets.push(w); - this.editor && this.editor.renderer.updateFull(); }; - LineWidgets.prototype.measureWidgets = function (e, renderer) { - var changedWidgets = this.session._changedWidgets; - var config = renderer.layerConfig; - if (!changedWidgets || !changedWidgets.length) + VirtualRenderer.prototype.$addResizeObserver = function () { + if (!window.ResizeObserver || this.$resizeObserver) return; - var min = Infinity; - for (var i = 0; i < changedWidgets.length; i++) { - var w = changedWidgets[i]; - if (!w || !w.el) - continue; - if (w.session != this.session) - continue; - if (!w._inDocument) { - if (this.session.lineWidgets[w.row] != w) - continue; - w._inDocument = true; - renderer.container.appendChild(w.el); + var self = this; + this.$resizeTimer = lang.delayedCall(function () { + if (!self.destroyed) + self.onResize(); + }, 50); + this.$resizeObserver = new window.ResizeObserver(function (e) { + var w = e[0].contentRect.width; + var h = e[0].contentRect.height; + if (Math.abs(self.$size.width - w) > 1 + || Math.abs(self.$size.height - h) > 1) { + self.$resizeTimer.delay(); } - w.h = w.el.offsetHeight; - if (!w.fixedWidth) { - w.w = w.el.offsetWidth; - w.screenWidth = Math.ceil(w.w / config.characterWidth); + else { + self.$resizeTimer.cancel(); } - var rowCount = w.h / config.lineHeight; - if (w.coverLine) { - rowCount -= this.session.getRowLineCount(w.row); - if (rowCount < 0) - rowCount = 0; + }); + this.$resizeObserver.observe(this.container); + }; + return VirtualRenderer; +}()); +VirtualRenderer.prototype.CHANGE_CURSOR = 1; +VirtualRenderer.prototype.CHANGE_MARKER = 2; +VirtualRenderer.prototype.CHANGE_GUTTER = 4; +VirtualRenderer.prototype.CHANGE_SCROLL = 8; +VirtualRenderer.prototype.CHANGE_LINES = 16; +VirtualRenderer.prototype.CHANGE_TEXT = 32; +VirtualRenderer.prototype.CHANGE_SIZE = 64; +VirtualRenderer.prototype.CHANGE_MARKER_BACK = 128; +VirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256; +VirtualRenderer.prototype.CHANGE_FULL = 512; +VirtualRenderer.prototype.CHANGE_H_SCROLL = 1024; +VirtualRenderer.prototype.$changes = 0; +VirtualRenderer.prototype.$padding = null; +VirtualRenderer.prototype.$frozen = false; +VirtualRenderer.prototype.STEPS = 8; +oop.implement(VirtualRenderer.prototype, EventEmitter); +config.defineOptions(VirtualRenderer.prototype, "renderer", { + useResizeObserver: { + set: function (value) { + if (!value && this.$resizeObserver) { + this.$resizeObserver.disconnect(); + this.$resizeTimer.cancel(); + this.$resizeTimer = this.$resizeObserver = null; } - if (w.rowCount != rowCount) { - w.rowCount = rowCount; - if (w.row < min) - min = w.row; + else if (value && !this.$resizeObserver) { + this.$addResizeObserver(); } } - if (min != Infinity) { - this.session._emit("changeFold", { data: { start: { row: min } } }); - this.session.lineWidgetWidth = null; + }, + animatedScroll: { initialValue: false }, + showInvisibles: { + set: function (value) { + if (this.$textLayer.setShowInvisibles(value)) + this.$loop.schedule(this.CHANGE_TEXT); + }, + initialValue: false + }, + showPrintMargin: { + set: function () { this.$updatePrintMargin(); }, + initialValue: true + }, + printMarginColumn: { + set: function () { this.$updatePrintMargin(); }, + initialValue: 80 + }, + printMargin: { + set: function (val) { + if (typeof val == "number") + this.$printMarginColumn = val; + this.$showPrintMargin = !!val; + this.$updatePrintMargin(); + }, + get: function () { + return this.$showPrintMargin && this.$printMarginColumn; } - this.session._changedWidgets = []; - }; - LineWidgets.prototype.renderWidgets = function (e, renderer) { - var config = renderer.layerConfig; - var lineWidgets = this.session.lineWidgets; - if (!lineWidgets) - return; - var first = Math.min(this.firstRow, config.firstRow); - var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length); - while (first > 0 && !lineWidgets[first]) - first--; - this.firstRow = config.firstRow; - this.lastRow = config.lastRow; - renderer.$cursorLayer.config = config; - for (var i = first; i <= last; i++) { - var w = lineWidgets[i]; - if (!w || !w.el) - continue; - if (w.hidden) { - w.el.style.top = -100 - (w.pixelHeight || 0) + "px"; - continue; - } - if (!w._inDocument) { - w._inDocument = true; - renderer.container.appendChild(w.el); - } - var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top; - if (!w.coverLine) - top += config.lineHeight * this.session.getRowLineCount(w.row); - w.el.style.top = top - config.offset + "px"; - var left = w.coverGutter ? 0 : renderer.gutterWidth; - if (!w.fixedWidth) - left -= renderer.scrollLeft; - w.el.style.left = left + "px"; - if (w.fullWidth && w.screenWidth) { - w.el.style.minWidth = config.width + 2 * config.padding + "px"; - } - if (w.fixedWidth) { - w.el.style.right = renderer.scrollBar.getWidth() + "px"; + }, + showGutter: { + set: function (show) { + this.$gutter.style.display = show ? "block" : "none"; + this.$loop.schedule(this.CHANGE_FULL); + this.onGutterResize(); + }, + initialValue: true + }, + useSvgGutterIcons: { + set: function (value) { + this.$gutterLayer.$useSvgGutterIcons = value; + }, + initialValue: false + }, + showFoldedAnnotations: { + set: function (value) { + this.$gutterLayer.$showFoldedAnnotations = value; + }, + initialValue: false + }, + fadeFoldWidgets: { + set: function (show) { + dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); + }, + initialValue: false + }, + showFoldWidgets: { + set: function (show) { + this.$gutterLayer.setShowFoldWidgets(show); + this.$loop.schedule(this.CHANGE_GUTTER); + }, + initialValue: true + }, + displayIndentGuides: { + set: function (show) { + if (this.$textLayer.setDisplayIndentGuides(show)) + this.$loop.schedule(this.CHANGE_TEXT); + }, + initialValue: true + }, + highlightIndentGuides: { + set: function (show) { + if (this.$textLayer.setHighlightIndentGuides(show) == true) { + this.$textLayer.$highlightIndentGuide(); } else { - w.el.style.right = ""; + this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells); } + }, + initialValue: true + }, + highlightGutterLine: { + set: function (shouldHighlight) { + this.$gutterLayer.setHighlightGutterLine(shouldHighlight); + this.$loop.schedule(this.CHANGE_GUTTER); + }, + initialValue: true + }, + hScrollBarAlwaysVisible: { + set: function (val) { + if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: false + }, + vScrollBarAlwaysVisible: { + set: function (val) { + if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: false + }, + fontSize: { + set: function (size) { + if (typeof size == "number") + size = size + "px"; + this.container.style.fontSize = size; + this.updateFontSize(); + }, + initialValue: 12 + }, + fontFamily: { + set: function (name) { + this.container.style.fontFamily = name; + this.updateFontSize(); + } + }, + maxLines: { + set: function (val) { + this.updateFull(); + } + }, + minLines: { + set: function (val) { + if (!(this.$minLines < 0x1ffffffffffff)) + this.$minLines = 0; + this.updateFull(); + } + }, + maxPixelHeight: { + set: function (val) { + this.updateFull(); + }, + initialValue: 0 + }, + scrollPastEnd: { + set: function (val) { + val = +val || 0; + if (this.$scrollPastEnd == val) + return; + this.$scrollPastEnd = val; + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: 0, + handlesSet: true + }, + fixedWidthGutter: { + set: function (val) { + this.$gutterLayer.$fixedWidth = !!val; + this.$loop.schedule(this.CHANGE_GUTTER); } - }; - return LineWidgets; -}()); -exports.LineWidgets = LineWidgets; + }, + customScrollbar: { + set: function (val) { + this.$updateCustomScrollbar(val); + }, + initialValue: false + }, + theme: { + set: function (val) { this.setTheme(val); }, + get: function () { return this.$themeId || this.theme; }, + initialValue: "./theme/textmate", + handlesSet: true + }, + hasCssTransforms: {}, + useTextareaForIME: { + initialValue: !useragent.isMobile && !useragent.isIE + } +}); +exports.VirtualRenderer = VirtualRenderer; }); -ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module){"use strict"; -function throwDeltaError(delta, errorText) { - console.log("Invalid Delta:", delta); - throw "Invalid Delta: " + errorText; -} -function positionInDocument(docLines, position) { - return position.row >= 0 && position.row < docLines.length && - position.column >= 0 && position.column <= docLines[position.row].length; -} -function validateDelta(docLines, delta) { - if (delta.action != "insert" && delta.action != "remove") - throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); - if (!(delta.lines instanceof Array)) - throwDeltaError(delta, "delta.lines must be an Array"); - if (!delta.start || !delta.end) - throwDeltaError(delta, "delta.start/end must be an present"); - var start = delta.start; - if (!positionInDocument(docLines, delta.start)) - throwDeltaError(delta, "delta.start must be contained in document"); - var end = delta.end; - if (delta.action == "remove" && !positionInDocument(docLines, end)) - throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); - var numRangeRows = end.row - start.row; - var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); - if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) - throwDeltaError(delta, "delta.range must match delta lines"); +ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var net = require("../lib/net"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var config = require("../config"); + +function $workerBlob(workerUrl) { + var script = "importScripts('" + net.qualifyURL(workerUrl) + "');"; + try { + return new Blob([script], {"type": "application/javascript"}); + } catch (e) { // Backwards-compatibility + var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; + var blobBuilder = new BlobBuilder(); + blobBuilder.append(script); + return blobBuilder.getBlob("application/javascript"); + } } -exports.applyDelta = function (docLines, delta, doNotValidate) { - var row = delta.start.row; - var startColumn = delta.start.column; - var line = docLines[row] || ""; - switch (delta.action) { - case "insert": - var lines = delta.lines; - if (lines.length === 1) { - docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); - } - else { - var args = [row, 1].concat(delta.lines); - docLines.splice.apply(docLines, args); - docLines[row] = line.substring(0, startColumn) + docLines[row]; - docLines[row + delta.lines.length - 1] += line.substring(startColumn); - } - break; - case "remove": - var endColumn = delta.end.column; - var endRow = delta.end.row; - if (row === endRow) { - docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); - } - else { - docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn)); - } - break; + +function createWorker(workerUrl) { + if (typeof Worker == "undefined") + return { postMessage: function() {}, terminate: function() {} }; + if (config.get("loadWorkerFromBlob")) { + var blob = $workerBlob(workerUrl); + var URL = window.URL || window.webkitURL; + var blobURL = URL.createObjectURL(blob); + return new Worker(blobURL); } + return new Worker(workerUrl); +} + +var WorkerClient = function(worker) { + if (!worker.postMessage) + worker = this.$createWorkerFromOldConfig.apply(this, arguments); + + this.$worker = worker; + this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); + this.changeListener = this.changeListener.bind(this); + this.onMessage = this.onMessage.bind(this); + + this.callbackId = 1; + this.callbacks = {}; + + this.$worker.onmessage = this.onMessage; }; -}); +(function(){ -ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Anchor = /** @class */ (function () { - function Anchor(doc, row, column) { - this.$onChange = this.onChange.bind(this); - this.attach(doc); - if (typeof row != "number") - this.setPosition(row.row, row.column); - else - this.setPosition(row, column); - } - Anchor.prototype.getPosition = function () { - return this.$clipPositionToDocument(this.row, this.column); - }; - Anchor.prototype.getDocument = function () { - return this.document; - }; - Anchor.prototype.onChange = function (delta) { - if (delta.start.row == delta.end.row && delta.start.row != this.row) - return; - if (delta.start.row > this.row) - return; - var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight); - this.setPosition(point.row, point.column, true); - }; - Anchor.prototype.setPosition = function (row, column, noClip) { - var pos; - if (noClip) { - pos = { - row: row, - column: column - }; + oop.implement(this, EventEmitter); + + this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) { + if (require.nameToUrl && !require.toUrl) + require.toUrl = require.nameToUrl; + + if (config.get("packaged") || !require.toUrl) { + workerUrl = workerUrl || config.moduleUrl(mod, "worker"); + } else { + var normalizePath = this.$normalizePath; + workerUrl = workerUrl || normalizePath(require.toUrl("ace/worker/worker.js", null, "_")); + + var tlns = {}; + topLevelNamespaces.forEach(function(ns) { + tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); + }); } - else { - pos = this.$clipPositionToDocument(row, column); + + this.$worker = createWorker(workerUrl); + if (importScripts) { + this.send("importScripts", importScripts); } - if (this.row == pos.row && this.column == pos.column) - return; - var old = { - row: this.row, - column: this.column - }; - this.row = pos.row; - this.column = pos.column; - this._signal("change", { - old: old, - value: pos + this.$worker.postMessage({ + init : true, + tlns : tlns, + module : mod, + classname : classname }); + return this.$worker; }; - Anchor.prototype.detach = function () { - this.document.off("change", this.$onChange); + + this.onMessage = function(e) { + var msg = e.data; + switch (msg.type) { + case "event": + this._signal(msg.name, {data: msg.data}); + break; + case "call": + var callback = this.callbacks[msg.id]; + if (callback) { + callback(msg.data); + delete this.callbacks[msg.id]; + } + break; + case "error": + this.reportError(msg.data); + break; + case "log": + window.console && console.log && console.log.apply(console, msg.data); + break; + } }; - Anchor.prototype.attach = function (doc) { - this.document = doc || this.document; - this.document.on("change", this.$onChange); + + this.reportError = function(err) { + window.console && console.error && console.error(err); }; - Anchor.prototype.$clipPositionToDocument = function (row, column) { - var pos = {}; - if (row >= this.document.getLength()) { - pos.row = Math.max(0, this.document.getLength() - 1); - pos.column = this.document.getLine(pos.row).length; - } - else if (row < 0) { - pos.row = 0; - pos.column = 0; - } - else { - pos.row = row; - pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); - } - if (column < 0) - pos.column = 0; - return pos; + + this.$normalizePath = function(path) { + return net.qualifyURL(path); }; - return Anchor; -}()); -Anchor.prototype.$insertRight = false; -oop.implement(Anchor.prototype, EventEmitter); -function $pointsInOrder(point1, point2, equalPointsInOrder) { - var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; - return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); -} -function $getTransformedPoint(delta, point, moveIfEqual) { - var deltaIsInsert = delta.action == "insert"; - var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); - var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); - var deltaStart = delta.start; - var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. - if ($pointsInOrder(point, deltaStart, moveIfEqual)) { - return { - row: point.row, - column: point.column - }; - } - if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { - return { - row: point.row + deltaRowShift, - column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) + + this.terminate = function() { + this._signal("terminate", {}); + this.deltaQueue = null; + this.$worker.terminate(); + this.$worker.onerror = function(e) { + e.preventDefault(); }; - } - return { - row: deltaStart.row, - column: deltaStart.column + this.$worker = null; + if (this.$doc) + this.$doc.off("change", this.changeListener); + this.$doc = null; }; -} -exports.Anchor = Anchor; -}); + this.send = function(cmd, args) { + this.$worker.postMessage({command: cmd, args: args}); + }; -ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var applyDelta = require("./apply_delta").applyDelta; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Range = require("./range").Range; -var Anchor = require("./anchor").Anchor; -var Document = /** @class */ (function () { - function Document(textOrLines) { - this.$lines = [""]; - if (textOrLines.length === 0) { - this.$lines = [""]; + this.call = function(cmd, args, callback) { + if (callback) { + var id = this.callbackId++; + this.callbacks[id] = callback; + args.push(id); } - else if (Array.isArray(textOrLines)) { - this.insertMergedLines({ row: 0, column: 0 }, textOrLines); + this.send(cmd, args); + }; + + this.emit = function(event, data) { + try { + if (data.data && data.data.err) + data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code}; + this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}}); } - else { - this.insert({ row: 0, column: 0 }, textOrLines); + catch(ex) { + console.error(ex.stack); } - } - Document.prototype.setValue = function (text) { - var len = this.getLength() - 1; - this.remove(new Range(0, 0, len, this.getLine(len).length)); - this.insert({ row: 0, column: 0 }, text || ""); - }; - Document.prototype.getValue = function () { - return this.getAllLines().join(this.getNewLineCharacter()); - }; - Document.prototype.createAnchor = function (row, column) { - return new Anchor(this, row, column); }; - Document.prototype.$detectNewLine = function (text) { - var match = text.match(/^.*?(\r\n|\r|\n)/m); - this.$autoNewLine = match ? match[1] : "\n"; - this._signal("changeNewLineMode"); + + this.attachToDocument = function(doc) { + if (this.$doc) + this.terminate(); + + this.$doc = doc; + this.call("setValue", [doc.getValue()]); + doc.on("change", this.changeListener, true); }; - Document.prototype.getNewLineCharacter = function () { - switch (this.$newLineMode) { - case "windows": - return "\r\n"; - case "unix": - return "\n"; - default: - return this.$autoNewLine || "\n"; + + this.changeListener = function(delta) { + if (!this.deltaQueue) { + this.deltaQueue = []; + setTimeout(this.$sendDeltaQueue, 0); } + if (delta.action == "insert") + this.deltaQueue.push(delta.start, delta.lines); + else + this.deltaQueue.push(delta.start, delta.end); }; - Document.prototype.setNewLineMode = function (newLineMode) { - if (this.$newLineMode === newLineMode) - return; - this.$newLineMode = newLineMode; - this._signal("changeNewLineMode"); - }; - Document.prototype.getNewLineMode = function () { - return this.$newLineMode; - }; - Document.prototype.isNewLine = function (text) { - return (text == "\r\n" || text == "\r" || text == "\n"); - }; - Document.prototype.getLine = function (row) { - return this.$lines[row] || ""; - }; - Document.prototype.getLines = function (firstRow, lastRow) { - return this.$lines.slice(firstRow, lastRow + 1); - }; - Document.prototype.getAllLines = function () { - return this.getLines(0, this.getLength()); - }; - Document.prototype.getLength = function () { - return this.$lines.length; - }; - Document.prototype.getTextRange = function (range) { - return this.getLinesForRange(range).join(this.getNewLineCharacter()); + + this.$sendDeltaQueue = function() { + var q = this.deltaQueue; + if (!q) return; + this.deltaQueue = null; + if (q.length > 50 && q.length > this.$doc.getLength() >> 1) { + this.call("setValue", [this.$doc.getValue()]); + } else + this.emit("change", {data: q}); }; - Document.prototype.getLinesForRange = function (range) { - var lines; - if (range.start.row === range.end.row) { - lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; - } - else { - lines = this.getLines(range.start.row, range.end.row); - lines[0] = (lines[0] || "").substring(range.start.column); - var l = lines.length - 1; - if (range.end.row - range.start.row == l) - lines[l] = lines[l].substring(0, range.end.column); + +}).call(WorkerClient.prototype); + + +var UIWorkerClient = function(topLevelNamespaces, mod, classname) { + var main = null; + var emitSync = false; + var sender = Object.create(EventEmitter); + + var messageBuffer = []; + var workerClient = new WorkerClient({ + messageBuffer: messageBuffer, + terminate: function() {}, + postMessage: function(e) { + messageBuffer.push(e); + if (!main) return; + if (emitSync) + setTimeout(processNext); + else + processNext(); } - return lines; + }); + + workerClient.setEmitSync = function(val) { emitSync = val; }; + + var processNext = function() { + var msg = messageBuffer.shift(); + if (msg.command) + main[msg.command].apply(main, msg.args); + else if (msg.event) + sender._signal(msg.event, msg.data); }; - Document.prototype.insertLines = function (row, lines) { - console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); - return this.insertFullLines(row, lines); + + sender.postMessage = function(msg) { + workerClient.onMessage({data: msg}); }; - Document.prototype.removeLines = function (firstRow, lastRow) { - console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); - return this.removeFullLines(firstRow, lastRow); + sender.callback = function(data, callbackId) { + this.postMessage({type: "call", id: callbackId, data: data}); }; - Document.prototype.insertNewLine = function (position) { - console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."); - return this.insertMergedLines(position, ["", ""]); + sender.emit = function(name, data) { + this.postMessage({type: "event", name: name, data: data}); }; - Document.prototype.insert = function (position, text) { - if (this.getLength() <= 1) - this.$detectNewLine(text); - return this.insertMergedLines(position, this.$split(text)); + + config.loadModule(["worker", mod], function(Main) { + main = new Main[classname](sender); + while (messageBuffer.length) + processNext(); + }); + + return workerClient; +}; + +exports.UIWorkerClient = UIWorkerClient; +exports.WorkerClient = WorkerClient; +exports.createWorker = createWorker; + + +}); + +ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(require, exports, module){"use strict"; +var Range = require("./range").Range; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var oop = require("./lib/oop"); +var PlaceHolder = /** @class */ (function () { + function PlaceHolder(session, length, pos, others, mainClass, othersClass) { + var _self = this; + this.length = length; + this.session = session; + this.doc = session.getDocument(); + this.mainClass = mainClass; + this.othersClass = othersClass; + this.$onUpdate = this.onUpdate.bind(this); + this.doc.on("change", this.$onUpdate, true); + this.$others = others; + this.$onCursorChange = function () { + setTimeout(function () { + _self.onCursorChange(); + }); + }; + this.$pos = pos; + var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()["$undostack"] || { length: -1 }; + this.$undoStackDepth = undoStack.length; + this.setup(); + session.selection.on("changeCursor", this.$onCursorChange); + } + PlaceHolder.prototype.setup = function () { + var _self = this; + var doc = this.doc; + var session = this.session; + this.selectionBefore = session.selection.toJSON(); + if (session.selection.inMultiSelectMode) + session.selection.toSingleRange(); + this.pos = doc.createAnchor(this.$pos.row, this.$pos.column); + var pos = this.pos; + pos.$insertRight = true; + pos.detach(); + pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); + this.others = []; + this.$others.forEach(function (other) { + var anchor = doc.createAnchor(other.row, other.column); + anchor.$insertRight = true; + anchor.detach(); + _self.others.push(anchor); + }); + session.setUndoSelect(false); }; - Document.prototype.insertInLine = function (position, text) { - var start = this.clippedPos(position.row, position.column); - var end = this.pos(position.row, position.column + text.length); - this.applyDelta({ - start: start, - end: end, - action: "insert", - lines: [text] - }, true); - return this.clonePos(end); + PlaceHolder.prototype.showOtherMarkers = function () { + if (this.othersActive) + return; + var session = this.session; + var _self = this; + this.othersActive = true; + this.others.forEach(function (anchor) { + anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false); + }); }; - Document.prototype.clippedPos = function (row, column) { - var length = this.getLength(); - if (row === undefined) { - row = length; - } - else if (row < 0) { - row = 0; - } - else if (row >= length) { - row = length - 1; - column = undefined; + PlaceHolder.prototype.hideOtherMarkers = function () { + if (!this.othersActive) + return; + this.othersActive = false; + for (var i = 0; i < this.others.length; i++) { + this.session.removeMarker(this.others[i].markerId); } - var line = this.getLine(row); - if (column == undefined) - column = line.length; - column = Math.min(Math.max(column, 0), line.length); - return { row: row, column: column }; }; - Document.prototype.clonePos = function (pos) { - return { row: pos.row, column: pos.column }; + PlaceHolder.prototype.onUpdate = function (delta) { + if (this.$updating) + return this.updateAnchors(delta); + var range = delta; + if (range.start.row !== range.end.row) + return; + if (range.start.row !== this.pos.row) + return; + this.$updating = true; + var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column; + var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1; + var distanceFromStart = range.start.column - this.pos.column; + this.updateAnchors(delta); + if (inMainRange) + this.length += lengthDiff; + if (inMainRange && !this.session.$fromUndo) { + if (delta.action === 'insert') { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart }; + this.doc.insertMergedLines(newPos, delta.lines); + } + } + else if (delta.action === 'remove') { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart }; + this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); + } + } + } + this.$updating = false; + this.updateMarkers(); }; - Document.prototype.pos = function (row, column) { - return { row: row, column: column }; + PlaceHolder.prototype.updateAnchors = function (delta) { + this.pos.onChange(delta); + for (var i = this.others.length; i--;) + this.others[i].onChange(delta); + this.updateMarkers(); }; - Document.prototype.$clipPosition = function (position) { - var length = this.getLength(); - if (position.row >= length) { - position.row = Math.max(0, length - 1); - position.column = this.getLine(length - 1).length; - } - else { - position.row = Math.max(0, position.row); - position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); - } - return position; + PlaceHolder.prototype.updateMarkers = function () { + if (this.$updating) + return; + var _self = this; + var session = this.session; + var updateMarker = function (pos, className) { + session.removeMarker(pos.markerId); + pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false); + }; + updateMarker(this.pos, this.mainClass); + for (var i = this.others.length; i--;) + updateMarker(this.others[i], this.othersClass); }; - Document.prototype.insertFullLines = function (row, lines) { - row = Math.min(Math.max(row, 0), this.getLength()); - var column = 0; - if (row < this.getLength()) { - lines = lines.concat([""]); - column = 0; + PlaceHolder.prototype.onCursorChange = function (event) { + if (this.$updating || !this.session) + return; + var pos = this.session.selection.getCursor(); + if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { + this.showOtherMarkers(); + this._emit("cursorEnter", event); } else { - lines = [""].concat(lines); - row--; - column = this.$lines[row].length; + this.hideOtherMarkers(); + this._emit("cursorLeave", event); } - this.insertMergedLines({ row: row, column: column }, lines); - }; - Document.prototype.insertMergedLines = function (position, lines) { - var start = this.clippedPos(position.row, position.column); - var end = { - row: start.row + lines.length - 1, - column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length - }; - this.applyDelta({ - start: start, - end: end, - action: "insert", - lines: lines - }); - return this.clonePos(end); }; - Document.prototype.remove = function (range) { - var start = this.clippedPos(range.start.row, range.start.column); - var end = this.clippedPos(range.end.row, range.end.column); - this.applyDelta({ - start: start, - end: end, - action: "remove", - lines: this.getLinesForRange({ start: start, end: end }) - }); - return this.clonePos(start); + PlaceHolder.prototype.detach = function () { + this.session.removeMarker(this.pos && this.pos.markerId); + this.hideOtherMarkers(); + this.doc.off("change", this.$onUpdate); + this.session.selection.off("changeCursor", this.$onCursorChange); + this.session.setUndoSelect(true); + this.session = null; }; - Document.prototype.removeInLine = function (row, startColumn, endColumn) { - var start = this.clippedPos(row, startColumn); - var end = this.clippedPos(row, endColumn); - this.applyDelta({ - start: start, - end: end, - action: "remove", - lines: this.getLinesForRange({ start: start, end: end }) - }, true); - return this.clonePos(start); + PlaceHolder.prototype.cancel = function () { + if (this.$undoStackDepth === -1) + return; + var undoManager = this.session.getUndoManager(); + var undosRequired = (undoManager.$undoStack || undoManager["$undostack"]).length - this.$undoStackDepth; + for (var i = 0; i < undosRequired; i++) { + undoManager.undo(this.session, true); + } + if (this.selectionBefore) + this.session.selection.fromJSON(this.selectionBefore); }; - Document.prototype.removeFullLines = function (firstRow, lastRow) { - firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); - lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1); - var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; - var deleteLastNewLine = lastRow < this.getLength() - 1; - var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow); - var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0); - var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow); - var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length); - var range = new Range(startRow, startCol, endRow, endCol); - var deletedLines = this.$lines.slice(firstRow, lastRow + 1); - this.applyDelta({ - start: range.start, - end: range.end, - action: "remove", - lines: this.getLinesForRange(range) - }); - return deletedLines; + return PlaceHolder; +}()); +oop.implement(PlaceHolder.prototype, EventEmitter); +exports.PlaceHolder = PlaceHolder; + +}); + +ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module){var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; +} +function onMouseDown(e) { + var ev = e.domEvent; + var alt = ev.altKey; + var shift = ev.shiftKey; + var ctrl = ev.ctrlKey; + var accel = e.getAccelKey(); + var button = e.getButton(); + if (ctrl && useragent.isMac) + button = ev.button; + if (e.editor.inMultiSelectMode && button == 2) { + e.editor.textInput.onContextMenu(e.domEvent); + return; + } + if (!ctrl && !alt && !accel) { + if (button === 0 && e.editor.inMultiSelectMode) + e.editor.exitMultiSelectMode(); + return; + } + if (button !== 0) + return; + var editor = e.editor; + var selection = editor.selection; + var isMultiSelect = editor.inMultiSelectMode; + var pos = e.getDocumentPosition(); + var cursor = selection.getCursor(); + var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); + var mouseX = e.x, mouseY = e.y; + var onMouseSelection = function (e) { + mouseX = e.clientX; + mouseY = e.clientY; }; - Document.prototype.removeNewLine = function (row) { - if (row < this.getLength() - 1 && row >= 0) { - this.applyDelta({ - start: this.pos(row, this.getLine(row).length), - end: this.pos(row + 1, 0), - action: "remove", - lines: ["", ""] - }); + var session = editor.session; + var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var screenCursor = screenAnchor; + var selectionMode; + if (editor.$mouseHandler.$enableJumpToDef) { + if (ctrl && alt || accel && alt) + selectionMode = shift ? "block" : "add"; + else if (alt && editor.$blockSelectEnabled) + selectionMode = "block"; + } + else { + if (accel && !alt) { + selectionMode = "add"; + if (!isMultiSelect && shift) + return; } - }; - Document.prototype.replace = function (range, text) { - if (!(range instanceof Range)) - range = Range.fromPoints(range.start, range.end); - if (text.length === 0 && range.isEmpty()) - return range.start; - if (text == this.getTextRange(range)) - return range.end; - this.remove(range); - var end; - if (text) { - end = this.insert(range.start, text); + else if (alt && editor.$blockSelectEnabled) { + selectionMode = "block"; } - else { - end = range.start; + } + if (selectionMode && useragent.isMac && ev.ctrlKey) { + editor.$mouseHandler.cancelContextMenu(); + } + if (selectionMode == "add") { + if (!isMultiSelect && inSelection) + return; // dragging + if (!isMultiSelect) { + var range = selection.toOrientedRange(); + editor.addSelectionMarker(range); } - return end; - }; - Document.prototype.applyDeltas = function (deltas) { - for (var i = 0; i < deltas.length; i++) { - this.applyDelta(deltas[i]); + var oldRange = selection.rangeList.rangeAtPoint(pos); + editor.inVirtualSelectionMode = true; + if (shift) { + oldRange = null; + range = selection.ranges[0] || range; + editor.removeSelectionMarker(range); } - }; - Document.prototype.revertDeltas = function (deltas) { - for (var i = deltas.length - 1; i >= 0; i--) { - this.revertDelta(deltas[i]); + editor.once("mouseup", function () { + var tmpSel = selection.toOrientedRange(); + if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) + selection.substractPoint(tmpSel.cursor); + else { + if (shift) { + selection.substractPoint(range.cursor); + } + else if (range) { + editor.removeSelectionMarker(range); + selection.addRange(range); + } + selection.addRange(tmpSel); + } + editor.inVirtualSelectionMode = false; + }); + } + else if (selectionMode == "block") { + e.stop(); + editor.inVirtualSelectionMode = true; + var initialRange; + var rectSel = []; + var blockSelect = function () { + var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX); + if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) + return; + screenCursor = newCursor; + editor.selection.moveToPosition(cursor); + editor.renderer.scrollCursorIntoView(); + editor.removeSelectionMarkers(rectSel); + rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); + if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) + rectSel[0] = editor.$mouseHandler.$clickSelection.clone(); + rectSel.forEach(editor.addSelectionMarker, editor); + editor.updateSelectionMarkers(); + }; + if (isMultiSelect && !accel) { + selection.toSingleRange(); + } + else if (!isMultiSelect && accel) { + initialRange = selection.toOrientedRange(); + editor.addSelectionMarker(initialRange); } + if (shift) + screenAnchor = session.documentToScreenPosition(selection.lead); + else + selection.moveToPosition(pos); + screenCursor = { row: -1, column: -1 }; + var onMouseSelectionEnd = function (e) { + blockSelect(); + clearInterval(timerId); + editor.removeSelectionMarkers(rectSel); + if (!rectSel.length) + rectSel = [selection.toOrientedRange()]; + if (initialRange) { + editor.removeSelectionMarker(initialRange); + selection.toSingleRange(initialRange); + } + for (var i = 0; i < rectSel.length; i++) + selection.addRange(rectSel[i]); + editor.inVirtualSelectionMode = false; + editor.$mouseHandler.$clickSelection = null; + }; + var onSelectionInterval = blockSelect; + event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); + var timerId = setInterval(function () { onSelectionInterval(); }, 20); + return e.preventDefault(); + } +} +exports.onMouseDown = onMouseDown; + +}); + +ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module){/** + * commands to enter multiselect mode + * @type {import("../../ace-internal").Ace.Command[]} + */ +exports.defaultCommands = [{ + name: "addCursorAbove", + description: "Add cursor above", + exec: function (editor) { editor.selectMoreLines(-1); }, + bindKey: { win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "addCursorBelow", + description: "Add cursor below", + exec: function (editor) { editor.selectMoreLines(1); }, + bindKey: { win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "addCursorAboveSkipCurrent", + description: "Add cursor above (skip current)", + exec: function (editor) { editor.selectMoreLines(-1, true); }, + bindKey: { win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "addCursorBelowSkipCurrent", + description: "Add cursor below (skip current)", + exec: function (editor) { editor.selectMoreLines(1, true); }, + bindKey: { win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectMoreBefore", + description: "Select more before", + exec: function (editor) { editor.selectMore(-1); }, + bindKey: { win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectMoreAfter", + description: "Select more after", + exec: function (editor) { editor.selectMore(1); }, + bindKey: { win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectNextBefore", + description: "Select next before", + exec: function (editor) { editor.selectMore(-1, true); }, + bindKey: { win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectNextAfter", + description: "Select next after", + exec: function (editor) { editor.selectMore(1, true); }, + bindKey: { win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "toggleSplitSelectionIntoLines", + description: "Split selection into lines", + exec: function (editor) { + if (editor.multiSelect.rangeCount > 1) + editor.multiSelect.joinSelections(); + else + editor.multiSelect.splitIntoLines(); + }, + bindKey: { win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L" }, + readOnly: true + }, { + name: "splitSelectionIntoLines", + description: "Split into lines", + exec: function (editor) { editor.multiSelect.splitIntoLines(); }, + readOnly: true + }, { + name: "alignCursors", + description: "Align cursors", + exec: function (editor) { editor.alignCursors(); }, + bindKey: { win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A" }, + scrollIntoView: "cursor" + }, { + name: "findAll", + description: "Find all", + exec: function (editor) { editor.findAll(); }, + bindKey: { win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G" }, + scrollIntoView: "cursor", + readOnly: true + }]; +exports.multiSelectCommands = [{ + name: "singleSelection", + description: "Single selection", + bindKey: "esc", + exec: function (editor) { editor.exitMultiSelectMode(); }, + scrollIntoView: "cursor", + readOnly: true, + isAvailable: function (editor) { return editor && editor.inMultiSelectMode; } + }]; +var HashHandler = require("../keyboard/hash_handler").HashHandler; +exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); + +}); + +ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"], function(require, exports, module){/** + * @typedef {import("./anchor").Anchor} Anchor + * @typedef {import("../ace-internal").Ace.Point} Point + * @typedef {import("../ace-internal").Ace.ScreenCoordinates} ScreenCoordinates + */ +var RangeList = require("./range_list").RangeList; +var Range = require("./range").Range; +var Selection = require("./selection").Selection; +var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; +var event = require("./lib/event"); +var lang = require("./lib/lang"); +var commands = require("./commands/multi_select_commands"); +exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); +var Search = require("./search").Search; +var search = new Search(); +function find(session, needle, dir) { + search.$options.wrap = true; + search.$options.needle = needle; + search.$options.backwards = dir == -1; + return search.find(session); +} +var EditSession = require("./edit_session").EditSession; +(function () { + this.getSelectionMarkers = function () { + return this.$selectionMarkers; }; - Document.prototype.applyDelta = function (delta, doNotValidate) { - var isInsert = delta.action == "insert"; - if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] - : !Range.comparePoints(delta.start, delta.end)) { +}).call(EditSession.prototype); +(function () { + this.ranges = null; + this.rangeList = null; + this.addRange = function (range, $blockChangeEvents) { + if (!range) return; + if (!this.inMultiSelectMode && this.rangeCount === 0) { + var oldRange = this.toOrientedRange(); + this.rangeList.add(oldRange); + this.rangeList.add(range); + if (this.rangeList.ranges.length != 2) { + this.rangeList.removeAll(); + return $blockChangeEvents || this.fromOrientedRange(range); + } + this.rangeList.removeAll(); + this.rangeList.add(oldRange); + this.$onAddRange(oldRange); } - if (isInsert && delta.lines.length > 20000) { - this.$splitAndapplyLargeDelta(delta, 20000); - } - else { - applyDelta(this.$lines, delta, doNotValidate); - this._signal("change", delta); + if (!range.cursor) + range.cursor = range.end; + var removed = this.rangeList.add(range); + this.$onAddRange(range); + if (removed.length) + this.$onRemoveRange(removed); + if (this.rangeCount > 1 && !this.inMultiSelectMode) { + this._signal("multiSelect"); + this.inMultiSelectMode = true; + this.session.$undoSelect = false; + this.rangeList.attach(this.session); } + return $blockChangeEvents || this.fromOrientedRange(range); }; - Document.prototype.$safeApplyDelta = function (delta) { - var docLength = this.$lines.length; - if (delta.action == "remove" && delta.start.row < docLength && delta.end.row < docLength - || delta.action == "insert" && delta.start.row <= docLength) { - this.applyDelta(delta); - } + this.toSingleRange = function (range) { + range = range || this.ranges[0]; + var removed = this.rangeList.removeAll(); + if (removed.length) + this.$onRemoveRange(removed); + range && this.fromOrientedRange(range); }; - Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) { - var lines = delta.lines; - var l = lines.length - MAX + 1; - var row = delta.start.row; - var column = delta.start.column; - for (var from = 0, to = 0; from < l; from = to) { - to += MAX - 1; - var chunk = lines.slice(from, to); - chunk.push(""); - this.applyDelta({ - start: this.pos(row + from, column), - end: this.pos(row + to, column = 0), - action: delta.action, - lines: chunk - }, true); + this.substractPoint = function (pos) { + var removed = this.rangeList.substractPoint(pos); + if (removed) { + this.$onRemoveRange(removed); + return removed[0]; } - delta.lines = lines.slice(from); - delta.start.row = row + from; - delta.start.column = column; - this.applyDelta(delta, true); }; - Document.prototype.revertDelta = function (delta) { - this.$safeApplyDelta({ - start: this.clonePos(delta.start), - end: this.clonePos(delta.end), - action: (delta.action == "insert" ? "remove" : "insert"), - lines: delta.lines.slice() - }); + this.mergeOverlappingRanges = function () { + var removed = this.rangeList.merge(); + if (removed.length) + this.$onRemoveRange(removed); }; - Document.prototype.indexToPosition = function (index, startRow) { - var lines = this.$lines || this.getAllLines(); - var newlineLength = this.getNewLineCharacter().length; - for (var i = startRow || 0, l = lines.length; i < l; i++) { - index -= lines[i].length + newlineLength; - if (index < 0) - return { row: i, column: index + lines[i].length + newlineLength }; + this.$onAddRange = function (range) { + this.rangeCount = this.rangeList.ranges.length; + this.ranges.unshift(range); + this._signal("addRange", { range: range }); + }; + this.$onRemoveRange = function (removed) { + this.rangeCount = this.rangeList.ranges.length; + if (this.rangeCount == 1 && this.inMultiSelectMode) { + var lastRange = this.rangeList.ranges.pop(); + removed.push(lastRange); + this.rangeCount = 0; } - return { row: l - 1, column: index + lines[l - 1].length + newlineLength }; + for (var i = removed.length; i--;) { + var index = this.ranges.indexOf(removed[i]); + this.ranges.splice(index, 1); + } + this._signal("removeRange", { ranges: removed }); + if (this.rangeCount === 0 && this.inMultiSelectMode) { + this.inMultiSelectMode = false; + this._signal("singleSelect"); + this.session.$undoSelect = true; + this.rangeList.detach(this.session); + } + lastRange = lastRange || this.ranges[0]; + if (lastRange && !lastRange.isEqual(this.getRange())) + this.fromOrientedRange(lastRange); }; - Document.prototype.positionToIndex = function (pos, startRow) { - var lines = this.$lines || this.getAllLines(); - var newlineLength = this.getNewLineCharacter().length; - var index = 0; - var row = Math.min(pos.row, lines.length); - for (var i = startRow || 0; i < row; ++i) - index += lines[i].length + newlineLength; - return index + pos.column; + this.$initRangeList = function () { + if (this.rangeList) + return; + this.rangeList = new RangeList(); + this.ranges = []; + this.rangeCount = 0; }; - Document.prototype.$split = function (text) { - return text.split(/\r\n|\r|\n/); + this.getAllRanges = function () { + return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; }; - return Document; -}()); -Document.prototype.$autoNewLine = ""; -Document.prototype.$newLineMode = "auto"; -oop.implement(Document.prototype, EventEmitter); -exports.Document = Document; - -}); - -ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var BackgroundTokenizer = /** @class */ (function () { - function BackgroundTokenizer(tokenizer, session) { - this.running = false; - this.lines = []; - this.states = []; - this.currentLine = 0; - this.tokenizer = tokenizer; - var self = this; - this.$worker = function () { - if (!self.running) { - return; + this.splitIntoLines = function () { + var ranges = this.ranges.length ? this.ranges : [this.getRange()]; + var newRanges = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + var row = range.start.row; + var endRow = range.end.row; + if (row === endRow) { + newRanges.push(range.clone()); } - var workerStart = new Date(); - var currentLine = self.currentLine; - var endLine = -1; - var doc = self.doc; - var startLine = currentLine; - while (self.lines[currentLine]) - currentLine++; - var len = doc.getLength(); - var processedLines = 0; - self.running = false; - while (currentLine < len) { - self.$tokenizeRow(currentLine); - endLine = currentLine; - do { - currentLine++; - } while (self.lines[currentLine]); - processedLines++; - if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { - self.running = setTimeout(self.$worker, 20); - break; - } + else { + newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length)); + while (++row < endRow) + newRanges.push(this.getLineRange(row, true)); + newRanges.push(new Range(endRow, 0, endRow, range.end.column)); } - self.currentLine = currentLine; - if (endLine == -1) - endLine = currentLine; - if (startLine <= endLine) - self.fireUpdateEvent(startLine, endLine); - }; - } - BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) { - this.tokenizer = tokenizer; - this.lines = []; - this.states = []; - this.start(0); - }; - BackgroundTokenizer.prototype.setDocument = function (doc) { - this.doc = doc; - this.lines = []; - this.states = []; - this.stop(); - }; - BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) { - var data = { - first: firstRow, - last: lastRow - }; - this._signal("update", { data: data }); - }; - BackgroundTokenizer.prototype.start = function (startRow) { - this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); - this.lines.splice(this.currentLine, this.lines.length); - this.states.splice(this.currentLine, this.states.length); - this.stop(); - this.running = setTimeout(this.$worker, 700); + if (i == 0 && !this.isBackwards()) + newRanges = newRanges.reverse(); + } + this.toSingleRange(); + for (var i = newRanges.length; i--;) + this.addRange(newRanges[i]); }; - BackgroundTokenizer.prototype.scheduleStart = function () { - if (!this.running) - this.running = setTimeout(this.$worker, 700); + this.joinSelections = function () { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); }; - BackgroundTokenizer.prototype.$updateOnChange = function (delta) { - var startRow = delta.start.row; - var len = delta.end.row - startRow; - if (len === 0) { - this.lines[startRow] = null; - } - else if (delta.action == "remove") { - this.lines.splice(startRow, len + 1, null); - this.states.splice(startRow, len + 1, null); + this.toggleBlockSelection = function () { + if (this.rangeCount > 1) { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); } else { - var args = Array(len + 1); - args.unshift(startRow, 1); - this.lines.splice.apply(this.lines, args); - this.states.splice.apply(this.states, args); + var cursor = this.session.documentToScreenPosition(this.cursor); + var anchor = this.session.documentToScreenPosition(this.anchor); + var rectSel = this.rectangularRangeBlock(cursor, anchor); + rectSel.forEach(this.addRange, this); } - this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); - this.stop(); - }; - BackgroundTokenizer.prototype.stop = function () { - if (this.running) - clearTimeout(this.running); - this.running = false; - }; - BackgroundTokenizer.prototype.getTokens = function (row) { - return this.lines[row] || this.$tokenizeRow(row); - }; - BackgroundTokenizer.prototype.getState = function (row) { - if (this.currentLine == row) - this.$tokenizeRow(row); - return this.states[row] || "start"; }; - BackgroundTokenizer.prototype.$tokenizeRow = function (row) { - var line = this.doc.getLine(row); - var state = this.states[row - 1]; - var data = this.tokenizer.getLineTokens(line, state, row); - if (this.states[row] + "" !== data.state + "") { - this.states[row] = data.state; - this.lines[row + 1] = null; - if (this.currentLine > row + 1) - this.currentLine = row + 1; - } - else if (this.currentLine == row) { - this.currentLine = row + 1; + this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) { + var rectSel = []; + var xBackwards = screenCursor.column < screenAnchor.column; + if (xBackwards) { + var startColumn = screenCursor.column; + var endColumn = screenAnchor.column; + var startOffsetX = screenCursor.offsetX; + var endOffsetX = screenAnchor.offsetX; } - return this.lines[row] = data.tokens; - }; - BackgroundTokenizer.prototype.cleanup = function () { - this.running = false; - this.lines = []; - this.states = []; - this.currentLine = 0; - this.removeAllListeners(); - }; - return BackgroundTokenizer; -}()); -oop.implement(BackgroundTokenizer.prototype, EventEmitter); -exports.BackgroundTokenizer = BackgroundTokenizer; - -}); - -ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/range"], function(require, exports, module){"use strict"; -var lang = require("./lib/lang"); -var Range = require("./range").Range; -var SearchHighlight = /** @class */ (function () { - function SearchHighlight(regExp, clazz, type) { - if (type === void 0) { type = "text"; } - this.setRegexp(regExp); - this.clazz = clazz; - this.type = type; - this.docLen = 0; - } - SearchHighlight.prototype.setRegexp = function (regExp) { - if (this.regExp + "" == regExp + "") - return; - this.regExp = regExp; - this.cache = []; - }; - SearchHighlight.prototype.update = function (html, markerLayer, session, config) { - if (!this.regExp) - return; - var start = config.firstRow; - var end = config.lastRow; - var renderedMarkerRanges = {}; - var _search = session.$editor && session.$editor.$search; - var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions()); - for (var i = start; i <= end; i++) { - var ranges = this.cache[i]; - if (ranges == null || session.getValue().length != this.docLen) { - if (mtSearch) { - ranges = []; - var match = _search.$multiLineForward(session, this.regExp, i, end); - if (match) { - var end_row = match.endRow <= end ? match.endRow - 1 : end; - if (end_row > i) - i = end_row; - ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol)); - } - if (ranges.length > this.MAX_RANGES) - ranges = ranges.slice(0, this.MAX_RANGES); - } - else { - ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); - if (ranges.length > this.MAX_RANGES) - ranges = ranges.slice(0, this.MAX_RANGES); - ranges = ranges.map(function (match) { - return new Range(i, match.offset, i, match.offset + match.length); - }); - } - this.cache[i] = ranges.length ? ranges : ""; - } - if (ranges.length === 0) - continue; - for (var j = ranges.length; j--;) { - var rangeToAddMarkerTo = ranges[j].toScreenRange(session); - var rangeAsString = rangeToAddMarkerTo.toString(); - if (renderedMarkerRanges[rangeAsString]) - continue; - renderedMarkerRanges[rangeAsString] = true; - markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config); - } + else { + var startColumn = screenAnchor.column; + var endColumn = screenCursor.column; + var startOffsetX = screenAnchor.offsetX; + var endOffsetX = screenCursor.offsetX; } - this.docLen = session.getValue().length; - }; - return SearchHighlight; -}()); -SearchHighlight.prototype.MAX_RANGES = 500; -exports.SearchHighlight = SearchHighlight; - -}); - -ace.define("ace/undomanager",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; -var UndoManager = /** @class */ (function () { - function UndoManager() { - this.$keepRedoStack; - this.$maxRev = 0; - this.$fromUndo = false; - this.$undoDepth = Infinity; - this.reset(); - } - UndoManager.prototype.addSession = function (session) { - this.$session = session; - }; - UndoManager.prototype.add = function (delta, allowMerge, session) { - if (this.$fromUndo) - return; - if (delta == this.$lastDelta) - return; - if (!this.$keepRedoStack) - this.$redoStack.length = 0; - if (allowMerge === false || !this.lastDeltas) { - this.lastDeltas = []; - var undoStackLength = this.$undoStack.length; - if (undoStackLength > this.$undoDepth - 1) { - this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1); - } - this.$undoStack.push(this.lastDeltas); - delta.id = this.$rev = ++this.$maxRev; + var yBackwards = screenCursor.row < screenAnchor.row; + if (yBackwards) { + var startRow = screenCursor.row; + var endRow = screenAnchor.row; } - if (delta.action == "remove" || delta.action == "insert") - this.$lastDelta = delta; - this.lastDeltas.push(delta); - }; - UndoManager.prototype.addSelection = function (selection, rev) { - this.selections.push({ - value: selection, - rev: rev || this.$rev - }); - }; - UndoManager.prototype.startNewGroup = function () { - this.lastDeltas = null; - return this.$rev; - }; - UndoManager.prototype.markIgnored = function (from, to) { - if (to == null) - to = this.$rev + 1; - var stack = this.$undoStack; - for (var i = stack.length; i--;) { - var delta = stack[i][0]; - if (delta.id <= from) - break; - if (delta.id < to) - delta.ignore = true; + else { + var startRow = screenAnchor.row; + var endRow = screenCursor.row; } - this.lastDeltas = null; - }; - UndoManager.prototype.getSelection = function (rev, after) { - var stack = this.selections; - for (var i = stack.length; i--;) { - var selection = stack[i]; - if (selection.rev < rev) { - if (after) - selection = stack[i + 1]; - return selection; + if (startColumn < 0) + startColumn = 0; + if (startRow < 0) + startRow = 0; + if (startRow == endRow) + includeEmptyLines = true; + var docEnd; + for (var row = startRow; row <= endRow; row++) { + var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX)); + if (range.isEmpty()) { + if (docEnd && isSamePoint(range.end, docEnd)) + break; + docEnd = range.end; } + range.cursor = xBackwards ? range.start : range.end; + rectSel.push(range); } - }; - UndoManager.prototype.getRevision = function () { - return this.$rev; - }; - UndoManager.prototype.getDeltas = function (from, to) { - if (to == null) - to = this.$rev + 1; - var stack = this.$undoStack; - var end = null, start = 0; - for (var i = stack.length; i--;) { - var delta = stack[i][0]; - if (delta.id < to && !end) - end = i + 1; - if (delta.id <= from) { - start = i + 1; - break; + if (yBackwards) + rectSel.reverse(); + if (!includeEmptyLines) { + var end = rectSel.length - 1; + while (rectSel[end].isEmpty() && end > 0) + end--; + if (end > 0) { + var start = 0; + while (rectSel[start].isEmpty()) + start++; + } + for (var i = end; i >= start; i--) { + if (rectSel[i].isEmpty()) + rectSel.splice(i, 1); } } - return stack.slice(start, end); + return rectSel; }; - UndoManager.prototype.getChangedRanges = function (from, to) { - if (to == null) - to = this.$rev + 1; +}).call(Selection.prototype); +var Editor = require("./editor").Editor; +(function () { + this.updateSelectionMarkers = function () { + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); }; - UndoManager.prototype.getChangedLines = function (from, to) { - if (to == null) - to = this.$rev + 1; + this.addSelectionMarker = function (orientedRange) { + if (!orientedRange.cursor) + orientedRange.cursor = orientedRange.end; + var style = this.getSelectionStyle(); + orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); + this.session.$selectionMarkers.push(orientedRange); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + return orientedRange; }; - UndoManager.prototype.undo = function (session, dontSelect) { - this.lastDeltas = null; - var stack = this.$undoStack; - if (!rearrangeUndoStack(stack, stack.length)) + this.removeSelectionMarker = function (range) { + if (!range.marker) return; - if (!session) - session = this.$session; - if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length) - this.$redoStack = []; - this.$fromUndo = true; - var deltaSet = stack.pop(); - var undoSelectionRange = null; - if (deltaSet) { - undoSelectionRange = session.undoChanges(deltaSet, dontSelect); - this.$redoStack.push(deltaSet); - this.$syncRev(); - } - this.$fromUndo = false; - return undoSelectionRange; + this.session.removeMarker(range.marker); + var index = this.session.$selectionMarkers.indexOf(range); + if (index != -1) + this.session.$selectionMarkers.splice(index, 1); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; }; - UndoManager.prototype.redo = function (session, dontSelect) { - this.lastDeltas = null; - if (!session) - session = this.$session; - this.$fromUndo = true; - if (this.$redoStackBaseRev != this.$rev) { - var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1); - rebaseRedoStack(this.$redoStack, diff); - this.$redoStackBaseRev = this.$rev; - this.$redoStack.forEach(function (x) { - x[0].id = ++this.$maxRev; - }, this); - } - var deltaSet = this.$redoStack.pop(); - var redoSelectionRange = null; - if (deltaSet) { - redoSelectionRange = session.redoChanges(deltaSet, dontSelect); - this.$undoStack.push(deltaSet); - this.$syncRev(); + this.removeSelectionMarkers = function (ranges) { + var markerList = this.session.$selectionMarkers; + for (var i = ranges.length; i--;) { + var range = ranges[i]; + if (!range.marker) + continue; + this.session.removeMarker(range.marker); + var index = markerList.indexOf(range); + if (index != -1) + markerList.splice(index, 1); } - this.$fromUndo = false; - return redoSelectionRange; - }; - UndoManager.prototype.$syncRev = function () { - var stack = this.$undoStack; - var nextDelta = stack[stack.length - 1]; - var id = nextDelta && nextDelta[0].id || 0; - this.$redoStackBaseRev = id; - this.$rev = id; - }; - UndoManager.prototype.reset = function () { - this.lastDeltas = null; - this.$lastDelta = null; - this.$undoStack = []; - this.$redoStack = []; - this.$rev = 0; - this.mark = 0; - this.$redoStackBaseRev = this.$rev; - this.selections = []; + this.session.selectionMarkerCount = markerList.length; }; - UndoManager.prototype.canUndo = function () { - return this.$undoStack.length > 0; + this.$onAddRange = function (e) { + this.addSelectionMarker(e.range); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); }; - UndoManager.prototype.canRedo = function () { - return this.$redoStack.length > 0; + this.$onRemoveRange = function (e) { + this.removeSelectionMarkers(e.ranges); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); }; - UndoManager.prototype.bookmark = function (rev) { - if (rev == undefined) - rev = this.$rev; - this.mark = rev; + this.$onMultiSelect = function (e) { + if (this.inMultiSelectMode) + return; + this.inMultiSelectMode = true; + this.setStyle("ace_multiselect"); + this.keyBinding.addKeyboardHandler(commands.keyboardHandler); + this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); }; - UndoManager.prototype.isAtBookmark = function () { - return this.$rev === this.mark; + this.$onSingleSelect = function (e) { + if (this.session.multiSelect.inVirtualMode) + return; + this.inMultiSelectMode = false; + this.unsetStyle("ace_multiselect"); + this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); + this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + this._emit("changeSelection"); }; - UndoManager.prototype.toJSON = function () { - return { - $redoStack: this.$redoStack, - $undoStack: this.$undoStack - }; + this.$onMultiSelectExec = function (e) { + var command = e.command; + var editor = e.editor; + if (!editor.multiSelect) + return; + if (!command.multiSelectAction) { + var result = command.exec(editor, e.args || {}); + editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); + editor.multiSelect.mergeOverlappingRanges(); + } + else if (command.multiSelectAction == "forEach") { + result = editor.forEachSelection(command, e.args); + } + else if (command.multiSelectAction == "forEachLine") { + result = editor.forEachSelection(command, e.args, true); + } + else if (command.multiSelectAction == "single") { + editor.exitMultiSelectMode(); + result = command.exec(editor, e.args || {}); + } + else { + result = command.multiSelectAction(editor, e.args || {}); + } + return result; }; - UndoManager.prototype.fromJSON = function (json) { - this.reset(); - this.$undoStack = json.$undoStack; - this.$redoStack = json.$redoStack; + this.forEachSelection = function (cmd, args, options) { + if (this.inVirtualSelectionMode) + return; + var keepOrder = options && options.keepOrder; + var $byLines = options == true || options && options.$byLines; + var session = this.session; + var selection = this.selection; + var rangeList = selection.rangeList; + var ranges = (keepOrder ? selection : rangeList).ranges; + var result; + if (!ranges.length) + return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); + var reg = selection._eventRegistry; + selection._eventRegistry = {}; + var tmpSel = new Selection(session); + this.inVirtualSelectionMode = true; + for (var i = ranges.length; i--;) { + if ($byLines) { + while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) + i--; + } + tmpSel.fromOrientedRange(ranges[i]); + tmpSel.index = i; + this.selection = session.selection = tmpSel; + var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); + if (!result && cmdResult !== undefined) + result = cmdResult; + tmpSel.toOrientedRange(ranges[i]); + } + tmpSel.detach(); + this.selection = session.selection = selection; + this.inVirtualSelectionMode = false; + selection._eventRegistry = reg; + selection.mergeOverlappingRanges(); + if (selection.ranges[0]) + selection.fromOrientedRange(selection.ranges[0]); + var anim = this.renderer.$scrollAnimation; + this.onCursorChange(); + this.onSelectionChange(); + if (anim && anim.from == anim.to) + this.renderer.animateScrolling(anim.from); + return result; }; - UndoManager.prototype.$prettyPrint = function (delta) { - if (delta) - return stringifyDelta(delta); - return stringifyDelta(this.$undoStack) + "\n---\n" + stringifyDelta(this.$redoStack); + this.exitMultiSelectMode = function () { + if (!this.inMultiSelectMode || this.inVirtualSelectionMode) + return; + this.multiSelect.toSingleRange(); }; - return UndoManager; -}()); -UndoManager.prototype.hasUndo = UndoManager.prototype.canUndo; -UndoManager.prototype.hasRedo = UndoManager.prototype.canRedo; -UndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark; -UndoManager.prototype.markClean = UndoManager.prototype.bookmark; -function rearrangeUndoStack(stack, pos) { - for (var i = pos; i--;) { - var deltaSet = stack[i]; - if (deltaSet && !deltaSet[0].ignore) { - while (i < pos - 1) { - var swapped = swapGroups(stack[i], stack[i + 1]); - stack[i] = swapped[0]; - stack[i + 1] = swapped[1]; - i++; + this.getSelectedText = function () { + var text = ""; + if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { + var ranges = this.multiSelect.rangeList.ranges; + var buf = []; + for (var i = 0; i < ranges.length; i++) { + buf.push(this.session.getTextRange(ranges[i])); } - return true; - } - } -} -var Range = require("./range").Range; -var cmp = Range.comparePoints; -var comparePoints = Range.comparePoints; -function $updateMarkers(delta) { - var isInsert = delta.action == "insert"; - var start = delta.start; - var end = delta.end; - var rowShift = (end.row - start.row) * (isInsert ? 1 : -1); - var colShift = (end.column - start.column) * (isInsert ? 1 : -1); - if (isInsert) - end = start; - for (var i in this.marks) { - var point = this.marks[i]; - var cmp = comparePoints(point, start); - if (cmp < 0) { - continue; // delta starts after the range + var nl = this.session.getDocument().getNewLineCharacter(); + text = buf.join(nl); + if (text.length == (buf.length - 1) * nl.length) + text = ""; } - if (cmp === 0) { - if (isInsert) { - if (point.bias == 1) { - cmp = 1; - } - else { - point.bias == -1; - continue; - } - } + else if (!this.selection.isEmpty()) { + text = this.session.getTextRange(this.getSelectionRange()); } - var cmp2 = isInsert ? cmp : comparePoints(point, end); - if (cmp2 > 0) { - point.row += rowShift; - point.column += point.row == end.row ? colShift : 0; - continue; + return text; + }; + this.$checkMultiselectChange = function (e, anchor) { + if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { + var range = this.multiSelect.ranges[0]; + if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) + return; + var pos = anchor == this.multiSelect.anchor + ? range.cursor == range.start ? range.end : range.start + : range.cursor; + if (pos.row != anchor.row + || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) + this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()); + else + this.multiSelect.mergeOverlappingRanges(); } - if (!isInsert && cmp2 <= 0) { - point.row = start.row; - point.column = start.column; - if (cmp2 === 0) - point.bias = 1; + }; + this.findAll = function (needle, options, additive) { + options = options || {}; + options.needle = needle || options.needle; + if (options.needle == undefined) { + var range = this.selection.isEmpty() + ? this.selection.getWordRange() + : this.selection.getRange(); + options.needle = this.session.getTextRange(range); } - } -} -function clonePos(pos) { - return { row: pos.row, column: pos.column }; -} -function cloneDelta(d) { - return { - start: clonePos(d.start), - end: clonePos(d.end), - action: d.action, - lines: d.lines.slice() + this.$search.set(options); + var ranges = this.$search.findAll(this.session); + if (!ranges.length) + return 0; + var selection = this.multiSelect; + if (!additive) + selection.toSingleRange(ranges[0]); + for (var i = ranges.length; i--;) + selection.addRange(ranges[i], true); + if (range && selection.rangeList.rangeAtPoint(range.start)) + selection.addRange(range, true); + return ranges.length; }; -} -function stringifyDelta(d) { - d = d || this; - if (Array.isArray(d)) { - return d.map(stringifyDelta).join("\n"); - } - var type = ""; - if (d.action) { - type = d.action == "insert" ? "+" : "-"; - type += "[" + d.lines + "]"; - } - else if (d.value) { - if (Array.isArray(d.value)) { - type = d.value.map(stringifyRange).join("\n"); + this.selectMoreLines = function (dir, skip) { + var range = this.selection.toOrientedRange(); + var isBackwards = range.cursor == range.end; + var screenLead = this.session.documentToScreenPosition(range.cursor); + if (this.selection.$desiredColumn) + screenLead.column = this.selection.$desiredColumn; + var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); + if (!range.isEmpty()) { + var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); + var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); } else { - type = stringifyRange(d.value); - } - } - if (d.start) { - type += stringifyRange(d); - } - if (d.id || d.rev) { - type += "\t(" + (d.id || d.rev) + ")"; - } - return type; -} -function stringifyRange(r) { - return r.start.row + ":" + r.start.column - + "=>" + r.end.row + ":" + r.end.column; -} -function swap(d1, d2) { - var i1 = d1.action == "insert"; - var i2 = d2.action == "insert"; - if (i1 && i2) { - if (cmp(d2.start, d1.end) >= 0) { - shift(d2, d1, -1); + var anchor = lead; } - else if (cmp(d2.start, d1.start) <= 0) { - shift(d1, d2, +1); + if (isBackwards) { + var newRange = Range.fromPoints(lead, anchor); + newRange.cursor = newRange.start; } else { - return null; - } - } - else if (i1 && !i2) { - if (cmp(d2.start, d1.end) >= 0) { - shift(d2, d1, -1); + var newRange = Range.fromPoints(anchor, lead); + newRange.cursor = newRange.end; } - else if (cmp(d2.end, d1.start) <= 0) { - shift(d1, d2, -1); + newRange.desiredColumn = screenLead.column; + if (!this.selection.inMultiSelectMode) { + this.selection.addRange(range); } else { - return null; - } - } - else if (!i1 && i2) { - if (cmp(d2.start, d1.start) >= 0) { - shift(d2, d1, +1); + if (skip) + var toRemove = range.cursor; } - else if (cmp(d2.start, d1.start) <= 0) { - shift(d1, d2, +1); + this.selection.addRange(newRange); + if (toRemove) + this.selection.substractPoint(toRemove); + }; + this.transposeSelections = function (dir) { + var session = this.session; + var sel = session.multiSelect; + var all = sel.ranges; + for (var i = all.length; i--;) { + var range = all[i]; + if (range.isEmpty()) { + var tmp_1 = session.getWordRange(range.start.row, range.start.column); + range.start.row = tmp_1.start.row; + range.start.column = tmp_1.start.column; + range.end.row = tmp_1.end.row; + range.end.column = tmp_1.end.column; + } } - else { - return null; + sel.mergeOverlappingRanges(); + var words = []; + for (var i = all.length; i--;) { + var range = all[i]; + words.unshift(session.getTextRange(range)); } - } - else if (!i1 && !i2) { - if (cmp(d2.start, d1.start) >= 0) { - shift(d2, d1, +1); + if (dir < 0) + words.unshift(words.pop()); + else + words.push(words.shift()); + for (var i = all.length; i--;) { + var range = all[i]; + var tmp = range.clone(); + session.replace(range, words[i]); + range.start.row = tmp.start.row; + range.start.column = tmp.start.column; } - else if (cmp(d2.end, d1.start) <= 0) { - shift(d1, d2, -1); + sel.fromOrientedRange(sel.ranges[0]); + }; + this.selectMore = function (dir, skip, stopAtFirst) { + var session = this.session; + var sel = session.multiSelect; + var range = sel.toOrientedRange(); + if (range.isEmpty()) { + range = session.getWordRange(range.start.row, range.start.column); + range.cursor = dir == -1 ? range.start : range.end; + this.multiSelect.addRange(range); + if (stopAtFirst) + return; } - else { - return null; + var needle = session.getTextRange(range); + var newRange = find(session, needle, dir); + if (newRange) { + newRange.cursor = dir == -1 ? newRange.start : newRange.end; + this.session.unfold(newRange); + this.multiSelect.addRange(newRange); + this.renderer.scrollCursorIntoView(null, 0.5); } - } - return [d2, d1]; -} -function swapGroups(ds1, ds2) { - for (var i = ds1.length; i--;) { - for (var j = 0; j < ds2.length; j++) { - if (!swap(ds1[i], ds2[j])) { - while (i < ds1.length) { - while (j--) { - swap(ds2[j], ds1[i]); - } - j = ds2.length; - i++; - } - return [ds1, ds2]; + if (skip) + this.multiSelect.substractPoint(range.cursor); + }; + this.alignCursors = function () { + var session = this.session; + var sel = session.multiSelect; + var ranges = sel.ranges; + var row = -1; + var sameRowRanges = ranges.filter(function (r) { + if (r.cursor.row == row) + return true; + row = r.cursor.row; + }); + if (!ranges.length || sameRowRanges.length == ranges.length - 1) { + var range = this.selection.getRange(); + var fr = range.start.row, lr = range.end.row; + var guessRange = fr == lr; + if (guessRange) { + var max = this.session.getLength(); + var line; + do { + line = this.session.getLine(lr); + } while (/[=:]/.test(line) && ++lr < max); + do { + line = this.session.getLine(fr); + } while (/[=:]/.test(line) && --fr > 0); + if (fr < 0) + fr = 0; + if (lr >= max) + lr = max - 1; } - } - } - ds1.selectionBefore = ds2.selectionBefore = - ds1.selectionAfter = ds2.selectionAfter = null; - return [ds2, ds1]; -} -function xform(d1, c1) { - var i1 = d1.action == "insert"; - var i2 = c1.action == "insert"; - if (i1 && i2) { - if (cmp(d1.start, c1.start) < 0) { - shift(c1, d1, 1); + var lines = this.session.removeFullLines(fr, lr); + lines = this.$reAlignText(lines, guessRange); + this.session.insert({ row: fr, column: 0 }, lines.join("\n") + "\n"); + if (!guessRange) { + range.start.column = 0; + range.end.column = lines[lines.length - 1].length; + } + this.selection.setRange(range); } else { - shift(d1, c1, 1); - } - } - else if (i1 && !i2) { - if (cmp(d1.start, c1.end) >= 0) { - shift(d1, c1, -1); - } - else if (cmp(d1.start, c1.start) <= 0) { - shift(c1, d1, +1); + sameRowRanges.forEach(function (r) { + sel.substractPoint(r.cursor); + }); + var maxCol = 0; + var minSpace = Infinity; + var spaceOffsets = ranges.map(function (r) { + var p = r.cursor; + var line = session.getLine(p.row); + var spaceOffset = line.substr(p.column).search(/\S/g); + if (spaceOffset == -1) + spaceOffset = 0; + if (p.column > maxCol) + maxCol = p.column; + if (spaceOffset < minSpace) + minSpace = spaceOffset; + return spaceOffset; + }); + ranges.forEach(function (r, i) { + var p = r.cursor; + var l = maxCol - p.column; + var d = spaceOffsets[i] - minSpace; + if (l > d) + session.insert(p, lang.stringRepeat(" ", l - d)); + else + session.remove(new Range(p.row, p.column, p.row, p.column - l + d)); + r.start.column = r.end.column = maxCol; + r.start.row = r.end.row = p.row; + r.cursor = r.end; + }); + sel.fromOrientedRange(ranges[0]); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); } - else { - shift(d1, Range.fromPoints(c1.start, d1.start), -1); - shift(c1, d1, +1); + }; + this.$reAlignText = function (lines, forceLeft) { + var isLeftAligned = true, isRightAligned = true; + var startW, textW, endW; + return lines.map(function (line) { + var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); + if (!m) + return [line]; + if (startW == null) { + startW = m[1].length; + textW = m[2].length; + endW = m[3].length; + return m; + } + if (startW + textW + endW != m[1].length + m[2].length + m[3].length) + isRightAligned = false; + if (startW != m[1].length) + isLeftAligned = false; + if (startW > m[1].length) + startW = m[1].length; + if (textW < m[2].length) + textW = m[2].length; + if (endW > m[3].length) + endW = m[3].length; + return m; + }).map(forceLeft ? alignLeft : + isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); + function spaces(n) { + return lang.stringRepeat(" ", n); } - } - else if (!i1 && i2) { - if (cmp(c1.start, d1.end) >= 0) { - shift(c1, d1, -1); + function alignLeft(m) { + return !m[2] ? m[0] : spaces(startW) + m[2] + + spaces(textW - m[2].length + endW) + + m[4].replace(/^([=:])\s+/, "$1 "); } - else if (cmp(c1.start, d1.start) <= 0) { - shift(d1, c1, +1); + function alignRight(m) { + return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + + spaces(endW) + + m[4].replace(/^([=:])\s+/, "$1 "); } - else { - shift(c1, Range.fromPoints(d1.start, c1.start), -1); - shift(d1, c1, +1); + function unAlign(m) { + return !m[2] ? m[0] : spaces(startW) + m[2] + + spaces(endW) + + m[4].replace(/^([=:])\s+/, "$1 "); } + }; +}).call(Editor.prototype); +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; +} +exports.onSessionChange = function (e) { + var session = e.session; + if (session && !session.multiSelect) { + session.$selectionMarkers = []; + session.selection.$initRangeList(); + session.multiSelect = session.selection; } - else if (!i1 && !i2) { - if (cmp(c1.start, d1.end) >= 0) { - shift(c1, d1, -1); - } - else if (cmp(c1.end, d1.start) <= 0) { - shift(d1, c1, -1); - } - else { - var before, after; - if (cmp(d1.start, c1.start) < 0) { - before = d1; - d1 = splitDelta(d1, c1.start); - } - if (cmp(d1.end, c1.end) > 0) { - after = splitDelta(d1, c1.end); - } - shiftPos(c1.end, d1.start, d1.end, -1); - if (after && !before) { - d1.lines = after.lines; - d1.start = after.start; - d1.end = after.end; - after = d1; - } - return [c1, before, after].filter(Boolean); - } + this.multiSelect = session && session.multiSelect; + var oldSession = e.oldSession; + if (oldSession) { + oldSession.multiSelect.off("addRange", this.$onAddRange); + oldSession.multiSelect.off("removeRange", this.$onRemoveRange); + oldSession.multiSelect.off("multiSelect", this.$onMultiSelect); + oldSession.multiSelect.off("singleSelect", this.$onSingleSelect); + oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange); + oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange); } - return [c1, d1]; -} -function shift(d1, d2, dir) { - shiftPos(d1.start, d2.start, d2.end, dir); - shiftPos(d1.end, d2.start, d2.end, dir); -} -function shiftPos(pos, start, end, dir) { - if (pos.row == (dir == 1 ? start : end).row) { - pos.column += dir * (end.column - start.column); + if (session) { + session.multiSelect.on("addRange", this.$onAddRange); + session.multiSelect.on("removeRange", this.$onRemoveRange); + session.multiSelect.on("multiSelect", this.$onMultiSelect); + session.multiSelect.on("singleSelect", this.$onSingleSelect); + session.multiSelect.lead.on("change", this.$checkMultiselectChange); + session.multiSelect.anchor.on("change", this.$checkMultiselectChange); } - pos.row += dir * (end.row - start.row); -} -function splitDelta(c, pos) { - var lines = c.lines; - var end = c.end; - c.end = clonePos(pos); - var rowsBefore = c.end.row - c.start.row; - var otherLines = lines.splice(rowsBefore, lines.length); - var col = rowsBefore ? pos.column : pos.column - c.start.column; - lines.push(otherLines[0].substring(0, col)); - otherLines[0] = otherLines[0].substr(col); - var rest = { - start: clonePos(pos), - end: end, - lines: otherLines, - action: c.action - }; - return rest; + if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) { + if (session.selection.inMultiSelectMode) + this.$onMultiSelect(); + else + this.$onSingleSelect(); + } +}; +function MultiSelect(editor) { + if (editor.$multiselectOnSessionChange) + return; + editor.$onAddRange = editor.$onAddRange.bind(editor); + editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); + editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); + editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); + editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); + editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor); + editor.$multiselectOnSessionChange(editor); + editor.on("changeSession", editor.$multiselectOnSessionChange); + editor.on("mousedown", onMouseDown); + editor.commands.addCommands(commands.defaultCommands); + addAltCursorListeners(editor); } -function moveDeltasByOne(redoStack, d) { - d = cloneDelta(d); - for (var j = redoStack.length; j--;) { - var deltaSet = redoStack[j]; - for (var i = 0; i < deltaSet.length; i++) { - var x = deltaSet[i]; - var xformed = xform(x, d); - d = xformed[0]; - if (xformed.length != 2) { - if (xformed[2]) { - deltaSet.splice(i + 1, 1, xformed[1], xformed[2]); - i++; - } - else if (!xformed[1]) { - deltaSet.splice(i, 1); - i--; - } +function addAltCursorListeners(editor) { + if (!editor.textInput) + return; + var el = editor.textInput.getElement(); + var altCursor = false; + event.addListener(el, "keydown", function (e) { + var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey); + if (editor.$blockSelectEnabled && altDown) { + if (!altCursor) { + editor.renderer.setMouseCursor("crosshair"); + altCursor = true; } } - if (!deltaSet.length) { - redoStack.splice(j, 1); + else if (altCursor) { + reset(); } - } - return redoStack; -} -function rebaseRedoStack(redoStack, deltaSets) { - for (var i = 0; i < deltaSets.length; i++) { - var deltas = deltaSets[i]; - for (var j = 0; j < deltas.length; j++) { - moveDeltasByOne(redoStack, deltas[j]); + }, editor); + event.addListener(el, "keyup", reset, editor); + event.addListener(el, "blur", reset, editor); + function reset(e) { + if (altCursor) { + editor.renderer.setMouseCursor(""); + altCursor = false; } } } -exports.UndoManager = UndoManager; +exports.MultiSelect = MultiSelect; +require("./config").defineOptions(Editor.prototype, "editor", { + enableMultiselect: { + set: function (val) { + MultiSelect(this); + if (val) { + this.on("mousedown", onMouseDown); + } + else { + this.off("mousedown", onMouseDown); + } + }, + value: true + }, + enableBlockSelect: { + set: function (val) { + this.$blockSelectEnabled = val; + }, + value: true + } +}); }); -ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; -var Range = require("../range").Range; -var FoldLine = /** @class */ (function () { - function FoldLine(foldData, folds) { - this.foldData = foldData; - if (Array.isArray(folds)) { - this.folds = folds; - } - else { - folds = this.folds = [folds]; - } - var last = folds[folds.length - 1]; - this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column); - this.start = this.range.start; - this.end = this.range.end; - this.folds.forEach(function (fold) { - fold.setFoldLine(this); - }, this); - } - FoldLine.prototype.shiftRow = function (shift) { - this.start.row += shift; - this.end.row += shift; - this.folds.forEach(function (fold) { - fold.start.row += shift; - fold.end.row += shift; - }); +ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var Range = require("../../range").Range; +var FoldMode = exports.FoldMode = function () { }; +(function () { + this.foldingStartMarker = null; + this.foldingStopMarker = null; + this.getFoldWidget = function (session, foldStyle, row) { + var line = session.getLine(row); + if (this.foldingStartMarker.test(line)) + return "start"; + if (foldStyle == "markbeginend" + && this.foldingStopMarker + && this.foldingStopMarker.test(line)) + return "end"; + return ""; }; - FoldLine.prototype.addFold = function (fold) { - if (fold.sameRow) { - if (fold.start.row < this.startRow || fold.endRow > this.endRow) { - throw new Error("Can't add a fold to this FoldLine as it has no connection"); - } - this.folds.push(fold); - this.folds.sort(function (a, b) { - return -a.range.compareEnd(b.start.row, b.start.column); - }); - if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { - this.end.row = fold.end.row; - this.end.column = fold.end.column; - } - else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { - this.start.row = fold.start.row; - this.start.column = fold.start.column; + this.getFoldWidgetRange = function (session, foldStyle, row) { + return null; + }; + this.indentationBlock = function (session, row, column) { + var re = /\S/; + var line = session.getLine(row); + var startLevel = line.search(re); + if (startLevel == -1) + return; + var startColumn = column || line.length; + var maxRow = session.getLength(); + var startRow = row; + var endRow = row; + while (++row < maxRow) { + var level = session.getLine(row).search(re); + if (level == -1) + continue; + if (level <= startLevel) { + var token = session.getTokenAt(row, 0); + if (!token || token.type !== "string") + break; } + endRow = row; } - else if (fold.start.row == this.end.row) { - this.folds.push(fold); - this.end.row = fold.end.row; - this.end.column = fold.end.column; - } - else if (fold.end.row == this.start.row) { - this.folds.unshift(fold); - this.start.row = fold.start.row; - this.start.column = fold.start.column; - } - else { - throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); + if (endRow > startRow) { + var endColumn = session.getLine(endRow).length; + return new Range(startRow, startColumn, endRow, endColumn); } - fold.foldLine = this; - }; - FoldLine.prototype.containsRow = function (row) { - return row >= this.start.row && row <= this.end.row; }; - FoldLine.prototype.walk = function (callback, endRow, endColumn) { - var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true; - if (endRow == null) { - endRow = this.end.row; - endColumn = this.end.column; - } - for (var i = 0; i < folds.length; i++) { - fold = folds[i]; - cmp = fold.range.compareStart(endRow, endColumn); - if (cmp == -1) { - callback(null, endRow, endColumn, lastEnd, isNewRow); - return; - } - stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); - stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); - if (stop || cmp === 0) { - return; - } - isNewRow = !fold.sameRow; - lastEnd = fold.end.column; + this.openingBracketBlock = function (session, bracket, row, column, typeRe) { + var start = { row: row, column: column + 1 }; + var end = session.$findClosingBracket(bracket, start, typeRe); + if (!end) + return; + var fw = session.foldWidgets[end.row]; + if (fw == null) + fw = session.getFoldWidget(end.row); + if (fw == "start" && end.row > start.row) { + end.row--; + end.column = session.getLine(end.row).length; } - callback(null, endRow, endColumn, lastEnd, isNewRow); + return Range.fromPoints(start, end); }; - FoldLine.prototype.getNextFoldTo = function (row, column) { - var fold, cmp; - for (var i = 0; i < this.folds.length; i++) { - fold = this.folds[i]; - cmp = fold.range.compareEnd(row, column); - if (cmp == -1) { - return { - fold: fold, - kind: "after" - }; - } - else if (cmp === 0) { - return { - fold: fold, - kind: "inside" - }; - } - } - return null; + this.closingBracketBlock = function (session, bracket, row, column, typeRe) { + var end = { row: row, column: column }; + var start = session.$findOpeningBracket(bracket, end); + if (!start) + return; + start.column++; + end.column--; + return Range.fromPoints(start, end); + }; +}).call(FoldMode.prototype); + +}); + +ace.define("ace/ext/error_marker",["require","exports","module","ace/lib/dom","ace/range","ace/config"], function(require, exports, module){/** + * ## Error Marker extension + * + * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips + * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with + * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity. + * + * @module + */ +"use strict"; +var dom = require("../lib/dom"); +var Range = require("../range").Range; +var nls = require("../config").nls; +function binarySearch(array, needle, comparator) { + var first = 0; + var last = array.length - 1; + while (first <= last) { + var mid = (first + last) >> 1; + var c = comparator(needle, array[mid]); + if (c > 0) + first = mid + 1; + else if (c < 0) + last = mid - 1; + else + return mid; + } + return -(first + 1); +} +function findAnnotations(session, row, dir) { + var annotations = session.getAnnotations().sort(Range.comparePoints); + if (!annotations.length) + return; + var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints); + if (i < 0) + i = -i - 1; + if (i >= annotations.length) + i = dir > 0 ? 0 : annotations.length - 1; + else if (i === 0 && dir < 0) + i = annotations.length - 1; + var annotation = annotations[i]; + if (!annotation || !dir) + return; + if (annotation.row === row) { + do { + annotation = annotations[i += dir]; + } while (annotation && annotation.row === row); + if (!annotation) + return annotations.slice(); + } + var matched = []; + row = annotation.row; + do { + matched[dir < 0 ? "unshift" : "push"](annotation); + annotation = annotations[i += dir]; + } while (annotation && annotation.row == row); + return matched.length && matched; +} +exports.showErrorMarker = function (editor, dir) { + var session = editor.session; + var pos = editor.getCursorPosition(); + var row = pos.row; + var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) { + return w.type == "errorMarker"; + })[0]; + if (oldWidget) { + oldWidget.destroy(); + } + else { + row -= dir; + } + var annotations = findAnnotations(session, row, dir); + var gutterAnno; + if (annotations) { + var annotation = annotations[0]; + pos.column = (annotation.pos && typeof annotation.column != "number" + ? annotation.pos.sc + : annotation.column) || 0; + pos.row = annotation.row; + gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row]; + } + else if (oldWidget) { + return; + } + else { + gutterAnno = { + displayText: [nls("error-marker.good-state", "Looks good!")], + className: "ace_ok" + }; + } + editor.session.unfold(pos.row); + editor.selection.moveToPosition(pos); + var w = { + row: pos.row, + fixedWidth: true, + coverGutter: true, + el: dom.createElement("div"), + type: "errorMarker" }; - FoldLine.prototype.addRemoveChars = function (row, column, len) { - var ret = this.getNextFoldTo(row, column), fold, folds; - if (ret) { - fold = ret.fold; - if (ret.kind == "inside" - && fold.start.column != column - && fold.start.row != row) { - window.console && window.console.log(row, column, fold); - } - else if (fold.start.row == row) { - folds = this.folds; - var i = folds.indexOf(fold); - if (i === 0) { - this.start.column += len; - } - for (i; i < folds.length; i++) { - fold = folds[i]; - fold.start.column += len; - if (!fold.sameRow) { - return; - } - fold.end.column += len; - } - this.end.column += len; - } + var el = w.el.appendChild(dom.createElement("div")); + var arrow = w.el.appendChild(dom.createElement("div")); + arrow.className = "error_widget_arrow " + gutterAnno.className; + var left = editor.renderer.$cursorLayer + .getPixelPosition(pos).left; + arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px"; + w.el.className = "error_widget_wrapper"; + el.className = "error_widget " + gutterAnno.className; + gutterAnno.displayText.forEach(function (annoTextLine, i) { + el.appendChild(dom.createTextNode(annoTextLine)); + if (i < gutterAnno.displayText.length - 1) { + el.appendChild(dom.createElement("br")); } - }; - FoldLine.prototype.split = function (row, column) { - var pos = this.getNextFoldTo(row, column); - if (!pos || pos.kind == "inside") - return null; - var fold = pos.fold; - var folds = this.folds; - var foldData = this.foldData; - var i = folds.indexOf(fold); - var foldBefore = folds[i - 1]; - this.end.row = foldBefore.end.row; - this.end.column = foldBefore.end.column; - folds = folds.splice(i, folds.length - i); - var newFoldLine = new FoldLine(foldData, folds); - foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); - return newFoldLine; - }; - FoldLine.prototype.merge = function (foldLineNext) { - var folds = foldLineNext.folds; - for (var i = 0; i < folds.length; i++) { - this.addFold(folds[i]); + }); + el.appendChild(dom.createElement("div")); + var kb = function (_, hashId, keyString) { + if (hashId === 0 && (keyString === "esc" || keyString === "return")) { + w.destroy(); + return { command: "null" }; } - var foldData = this.foldData; - foldData.splice(foldData.indexOf(foldLineNext), 1); - }; - FoldLine.prototype.toString = function () { - var ret = [this.range.toString() + ": ["]; - this.folds.forEach(function (fold) { - ret.push(" " + fold.toString()); - }); - ret.push("]"); - return ret.join("\n"); }; - FoldLine.prototype.idxToPosition = function (idx) { - var lastFoldEndColumn = 0; - for (var i = 0; i < this.folds.length; i++) { - var fold = this.folds[i]; - idx -= fold.start.column - lastFoldEndColumn; - if (idx < 0) { - return { - row: fold.start.row, - column: fold.start.column + idx - }; - } - idx -= fold.placeholder.length; - if (idx < 0) { - return fold.start; - } - lastFoldEndColumn = fold.end.column; - } - return { - row: this.end.row, - column: this.end.column + idx - }; + w.destroy = function () { + if (editor.$mouseHandler.isMousePressed) + return; + editor.keyBinding.removeKeyboardHandler(kb); + session.widgetManager.removeLineWidget(w); + editor.off("changeSelection", w.destroy); + editor.off("changeSession", w.destroy); + editor.off("mouseup", w.destroy); + editor.off("change", w.destroy); }; - return FoldLine; -}()); -exports.FoldLine = FoldLine; + editor.keyBinding.addKeyboardHandler(kb); + editor.on("changeSelection", w.destroy); + editor.on("changeSession", w.destroy); + editor.on("mouseup", w.destroy); + editor.on("change", w.destroy); + editor.session.widgetManager.addLineWidget(w); + w.el.onmousedown = editor.focus.bind(editor); + editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight }); +}; +dom.importCssString("\n .error_widget_wrapper {\n background: inherit;\n color: inherit;\n border:none\n }\n .error_widget {\n border-top: solid 2px;\n border-bottom: solid 2px;\n margin: 5px 0;\n padding: 10px 40px;\n white-space: pre-wrap;\n }\n .error_widget.ace_error, .error_widget_arrow.ace_error{\n border-color: #ff5a5a\n }\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\n border-color: #F1D817\n }\n .error_widget.ace_info, .error_widget_arrow.ace_info{\n border-color: #5a5a5a\n }\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\n border-color: #5aaa5a\n }\n .error_widget_arrow {\n position: absolute;\n border: solid 5px;\n border-top-color: transparent!important;\n border-right-color: transparent!important;\n border-left-color: transparent!important;\n top: -5px;\n }\n", "error_marker.css", false); }); -ace.define("ace/range_list",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +ace.define("ace/ace",["require","exports","module","ace/lib/dom","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config","ace/loader_build"], function(require, exports, module){/** + * The main class required to set up an Ace instance in the browser. + * + * @namespace Ace + **/ +"use strict"; +require("./loader_build")(exports) +var dom = require("./lib/dom"); var Range = require("./range").Range; -var comparePoints = Range.comparePoints; -var RangeList = /** @class */ (function () { - function RangeList() { - this.ranges = []; - this.$bias = 1; +var Editor = require("./editor").Editor; +var EditSession = require("./edit_session").EditSession; +var UndoManager = require("./undomanager").UndoManager; +var Renderer = require("./virtual_renderer").VirtualRenderer; +require("./worker/worker_client"); +require("./keyboard/hash_handler"); +require("./placeholder"); +require("./multi_select"); +require("./mode/folding/fold_mode"); +require("./theme/textmate"); +require("./ext/error_marker"); +exports.config = require("./config"); +exports.edit = function (el, options) { + if (typeof el == "string") { + var _id = el; + el = document.getElementById(_id); + if (!el) + throw new Error("ace.edit can't find div #" + _id); } - RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) { - var list = this.ranges; - for (var i = startIndex || 0; i < list.length; i++) { - var range = list[i]; - var cmpEnd = comparePoints(pos, range.end); - if (cmpEnd > 0) - continue; - var cmpStart = comparePoints(pos, range.start); - if (cmpEnd === 0) - return excludeEdges && cmpStart !== 0 ? -i - 2 : i; - if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) - return i; - return -i - 1; - } - return -i - 1; - }; - RangeList.prototype.add = function (range) { - var excludeEdges = !range.isEmpty(); - var startIndex = this.pointIndex(range.start, excludeEdges); - if (startIndex < 0) - startIndex = -startIndex - 1; - var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); - if (endIndex < 0) - endIndex = -endIndex - 1; - else - endIndex++; - return this.ranges.splice(startIndex, endIndex - startIndex, range); - }; - RangeList.prototype.addList = function (list) { - var removed = []; - for (var i = list.length; i--;) { - removed.push.apply(removed, this.add(list[i])); - } - return removed; + if (el && el.env && el.env.editor instanceof Editor) + return el.env.editor; + var value = ""; + if (el && /input|textarea/i.test(el.tagName)) { + var oldNode = el; + value = oldNode.value; + el = dom.createElement("pre"); + oldNode.parentNode.replaceChild(el, oldNode); + } + else if (el) { + value = el.textContent; + el.innerHTML = ""; + } + var doc = exports.createEditSession(value); + var editor = new Editor(new Renderer(el), doc, options); + var env = { + document: doc, + editor: editor, + onResize: editor.resize.bind(editor, null) }; - RangeList.prototype.substractPoint = function (pos) { - var i = this.pointIndex(pos); - if (i >= 0) - return this.ranges.splice(i, 1); + if (oldNode) + env.textarea = oldNode; + editor.on("destroy", function () { + env.editor.container.env = null; // prevent memory leak on old ie + }); + editor.container.env = editor.env = env; + return editor; +}; +exports.createEditSession = function (text, mode) { + var doc = new EditSession(text, mode); + doc.setUndoManager(new UndoManager()); + return doc; +}; +exports.Range = Range; +exports.Editor = Editor; +exports.EditSession = EditSession; +exports.UndoManager = UndoManager; +exports.VirtualRenderer = Renderer; +var version = exports.config.version; +exports.version = version; + +}); (function() { + ace.require(["ace/ace"], function(a) { + if (a) { + a.config.init(true); + a.define = ace.define; + } + var global = (function () { + return this; + })(); + if (!global && typeof window != "undefined") global = window; // can happen in strict mode + if (!global && typeof self != "undefined") global = self; // can happen in webworker + + if (!global.ace) + global.ace = a; + for (var key in a) if (a.hasOwnProperty(key)) + global.ace[key] = a[key]; + global.ace["default"] = global.ace; + if ( true && module) { + module.exports = global.ace; + } + }); + })(); + + +/***/ }), + +/***/ "../../node_modules/ace-builds/src-noconflict/ext-language_tools.js": +/*!**************************************************************************!*\ + !*** ../../node_modules/ace-builds/src-noconflict/ext-language_tools.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* module decorator */ module = __webpack_require__.nmd(module); +ace.define("ace/snippets",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/range_list","ace/keyboard/hash_handler","ace/tokenizer","ace/clipboard","ace/editor"], function(require, exports, module){"use strict"; +var dom = require("./lib/dom"); +var oop = require("./lib/oop"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var lang = require("./lib/lang"); +var Range = require("./range").Range; +var RangeList = require("./range_list").RangeList; +var HashHandler = require("./keyboard/hash_handler").HashHandler; +var Tokenizer = require("./tokenizer").Tokenizer; +var clipboard = require("./clipboard"); +var VARIABLES = { + CURRENT_WORD: function (editor) { + return editor.session.getTextRange(editor.session.getWordRange()); + }, + SELECTION: function (editor, name, indentation) { + var text = editor.session.getTextRange(); + if (indentation) + return text.replace(/\n\r?([ \t]*\S)/g, "\n" + indentation + "$1"); + return text; + }, + CURRENT_LINE: function (editor) { + return editor.session.getLine(editor.getCursorPosition().row); + }, + PREV_LINE: function (editor) { + return editor.session.getLine(editor.getCursorPosition().row - 1); + }, + LINE_INDEX: function (editor) { + return editor.getCursorPosition().row; + }, + LINE_NUMBER: function (editor) { + return editor.getCursorPosition().row + 1; + }, + SOFT_TABS: function (editor) { + return editor.session.getUseSoftTabs() ? "YES" : "NO"; + }, + TAB_SIZE: function (editor) { + return editor.session.getTabSize(); + }, + CLIPBOARD: function (editor) { + return clipboard.getText && clipboard.getText(); + }, + FILENAME: function (editor) { + return /[^/\\]*$/.exec(this.FILEPATH(editor))[0]; + }, + FILENAME_BASE: function (editor) { + return /[^/\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\.[^.]*$/, ""); + }, + DIRECTORY: function (editor) { + return this.FILEPATH(editor).replace(/[^/\\]*$/, ""); + }, + FILEPATH: function (editor) { return "/not implemented.txt"; }, + WORKSPACE_NAME: function () { return "Unknown"; }, + FULLNAME: function () { return "Unknown"; }, + BLOCK_COMMENT_START: function (editor) { + var mode = editor.session.$mode || {}; + return mode.blockComment && mode.blockComment.start || ""; + }, + BLOCK_COMMENT_END: function (editor) { + var mode = editor.session.$mode || {}; + return mode.blockComment && mode.blockComment.end || ""; + }, + LINE_COMMENT: function (editor) { + var mode = editor.session.$mode || {}; + return mode.lineCommentStart || ""; + }, + CURRENT_YEAR: date.bind(null, { year: "numeric" }), + CURRENT_YEAR_SHORT: date.bind(null, { year: "2-digit" }), + CURRENT_MONTH: date.bind(null, { month: "numeric" }), + CURRENT_MONTH_NAME: date.bind(null, { month: "long" }), + CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: "short" }), + CURRENT_DATE: date.bind(null, { day: "2-digit" }), + CURRENT_DAY_NAME: date.bind(null, { weekday: "long" }), + CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: "short" }), + CURRENT_HOUR: date.bind(null, { hour: "2-digit", hour12: false }), + CURRENT_MINUTE: date.bind(null, { minute: "2-digit" }), + CURRENT_SECOND: date.bind(null, { second: "2-digit" }) +}; +VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION; +function date(dateFormat) { + var str = new Date().toLocaleString("en-us", dateFormat); + return str.length == 1 ? "0" + str : str; +} +var SnippetManager = /** @class */ (function () { + function SnippetManager() { + this.snippetMap = {}; + this.snippetNameMap = {}; + this.variables = VARIABLES; + } + SnippetManager.prototype.getTokenizer = function () { + return SnippetManager["$tokenizer"] || this.createTokenizer(); }; - RangeList.prototype.merge = function () { - var removed = []; - var list = this.ranges; - list = list.sort(function (a, b) { - return comparePoints(a.start, b.start); - }); - var next = list[0], range; - for (var i = 1; i < list.length; i++) { - range = next; - next = list[i]; - var cmp = comparePoints(range.end, next.start); - if (cmp < 0) - continue; - if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) - continue; - if (comparePoints(range.end, next.end) < 0) { - range.end.row = next.end.row; - range.end.column = next.end.column; - } - list.splice(i, 1); - removed.push(next); - next = range; - i--; + SnippetManager.prototype.createTokenizer = function () { + function TabstopToken(str) { + str = str.substr(1); + if (/^\d+$/.test(str)) + return [{ tabstopId: parseInt(str, 10) }]; + return [{ text: str }]; } - this.ranges = list; - return removed; - }; - RangeList.prototype.contains = function (row, column) { - return this.pointIndex({ row: row, column: column }) >= 0; - }; - RangeList.prototype.containsPoint = function (pos) { - return this.pointIndex(pos) >= 0; - }; - RangeList.prototype.rangeAtPoint = function (pos) { - var i = this.pointIndex(pos); - if (i >= 0) - return this.ranges[i]; - }; - RangeList.prototype.clipRows = function (startRow, endRow) { - var list = this.ranges; - if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) - return []; - var startIndex = this.pointIndex({ row: startRow, column: 0 }); - if (startIndex < 0) - startIndex = -startIndex - 1; - var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex); - if (endIndex < 0) - endIndex = -endIndex - 1; - var clipped = []; - for (var i = startIndex; i < endIndex; i++) { - clipped.push(list[i]); + function escape(ch) { + return "(?:[^\\\\" + ch + "]|\\\\.)"; } - return clipped; - }; - RangeList.prototype.removeAll = function () { - return this.ranges.splice(0, this.ranges.length); + var formatMatcher = { + regex: "/(" + escape("/") + "+)/", + onMatch: function (val, state, stack) { + var ts = stack[0]; + ts.fmtString = true; + ts.guard = val.slice(1, -1); + ts.flag = ""; + return ""; + }, + next: "formatString" + }; + SnippetManager["$tokenizer"] = new Tokenizer({ + start: [ + { regex: /\\./, onMatch: function (val, state, stack) { + var ch = val[1]; + if (ch == "}" && stack.length) { + val = ch; + } + else if ("`$\\".indexOf(ch) != -1) { + val = ch; + } + return [val]; + } }, + { regex: /}/, onMatch: function (val, state, stack) { + return [stack.length ? stack.shift() : val]; + } }, + { regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken }, + { regex: /\$\{[\dA-Z_a-z]+/, onMatch: function (str, state, stack) { + var t = TabstopToken(str.substr(1)); + stack.unshift(t[0]); + return t; + }, next: "snippetVar" }, + { regex: /\n/, token: "newline", merge: false } + ], + snippetVar: [ + { regex: "\\|" + escape("\\|") + "*\\|", onMatch: function (val, state, stack) { + var choices = val.slice(1, -1).replace(/\\[,|\\]|,/g, function (operator) { + return operator.length == 2 ? operator[1] : "\x00"; + }).split("\x00").map(function (value) { + return { value: value }; + }); + stack[0].choices = choices; + return [choices[0]]; + }, next: "start" }, + formatMatcher, + { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start" } + ], + formatString: [ + { regex: /:/, onMatch: function (val, state, stack) { + if (stack.length && stack[0].expectElse) { + stack[0].expectElse = false; + stack[0].ifEnd = { elseEnd: stack[0] }; + return [stack[0].ifEnd]; + } + return ":"; + } }, + { regex: /\\./, onMatch: function (val, state, stack) { + var ch = val[1]; + if (ch == "}" && stack.length) + val = ch; + else if ("`$\\".indexOf(ch) != -1) + val = ch; + else if (ch == "n") + val = "\n"; + else if (ch == "t") + val = "\t"; + else if ("ulULE".indexOf(ch) != -1) + val = { changeCase: ch, local: ch > "a" }; + return [val]; + } }, + { regex: "/\\w*}", onMatch: function (val, state, stack) { + var next = stack.shift(); + if (next) + next.flag = val.slice(1, -1); + this.next = next && next.tabstopId ? "start" : ""; + return [next || val]; + }, next: "start" }, + { regex: /\$(?:\d+|\w+)/, onMatch: function (val, state, stack) { + return [{ text: val.slice(1) }]; + } }, + { regex: /\${\w+/, onMatch: function (val, state, stack) { + var token = { text: val.slice(2) }; + stack.unshift(token); + return [token]; + }, next: "formatStringVar" }, + { regex: /\n/, token: "newline", merge: false }, + { regex: /}/, onMatch: function (val, state, stack) { + var next = stack.shift(); + this.next = next && next.tabstopId ? "start" : ""; + return [next || val]; + }, next: "start" } + ], + formatStringVar: [ + { regex: /:\/\w+}/, onMatch: function (val, state, stack) { + var ts = stack[0]; + ts.formatFunction = val.slice(2, -1); + return [stack.shift()]; + }, next: "formatString" }, + formatMatcher, + { regex: /:[\?\-+]?/, onMatch: function (val, state, stack) { + if (val[1] == "+") + stack[0].ifEnd = stack[0]; + if (val[1] == "?") + stack[0].expectElse = true; + }, next: "formatString" }, + { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "formatString" } + ] + }); + return SnippetManager["$tokenizer"]; }; - RangeList.prototype.attach = function (session) { - if (this.session) - this.detach(); - this.session = session; - this.onChange = this.$onChange.bind(this); - this.session.on('change', this.onChange); + SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) { + return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) { + return x.value || x; + }); }; - RangeList.prototype.detach = function () { - if (!this.session) - return; - this.session.removeListener('change', this.onChange); - this.session = null; + SnippetManager.prototype.getVariableValue = function (editor, name, indentation) { + if (/^\d+$/.test(name)) + return (this.variables.__ || {})[name] || ""; + if (/^[A-Z]\d+$/.test(name)) + return (this.variables[name[0] + "__"] || {})[name.substr(1)] || ""; + name = name.replace(/^TM_/, ""); + if (!this.variables.hasOwnProperty(name)) + return ""; + var value = this.variables[name]; + if (typeof value == "function") + value = this.variables[name](editor, name, indentation); + return value == null ? "" : value; }; - RangeList.prototype.$onChange = function (delta) { - var start = delta.start; - var end = delta.end; - var startRow = start.row; - var endRow = end.row; - var ranges = this.ranges; - for (var i = 0, n = ranges.length; i < n; i++) { - var r = ranges[i]; - if (r.end.row >= startRow) - break; - } - if (delta.action == "insert") { - var lineDif = endRow - startRow; - var colDiff = -start.column + end.column; - for (; i < n; i++) { - var r = ranges[i]; - if (r.start.row > startRow) - break; - if (r.start.row == startRow && r.start.column >= start.column) { - if (r.start.column == start.column && this.$bias <= 0) { - } - else { - r.start.column += colDiff; - r.start.row += lineDif; - } - } - if (r.end.row == startRow && r.end.column >= start.column) { - if (r.end.column == start.column && this.$bias < 0) { - continue; - } - if (r.end.column == start.column && colDiff > 0 && i < n - 1) { - if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column) - r.end.column -= colDiff; - } - r.end.column += colDiff; - r.end.row += lineDif; - } - } - } - else { - var lineDif = startRow - endRow; - var colDiff = start.column - end.column; - for (; i < n; i++) { - var r = ranges[i]; - if (r.start.row > endRow) - break; - if (r.end.row < endRow - && (startRow < r.end.row - || startRow == r.end.row && start.column < r.end.column)) { - r.end.row = startRow; - r.end.column = start.column; - } - else if (r.end.row == endRow) { - if (r.end.column <= end.column) { - if (lineDif || r.end.column > start.column) { - r.end.column = start.column; - r.end.row = start.row; + SnippetManager.prototype.tmStrFormat = function (str, ch, editor) { + if (!ch.fmt) + return str; + var flag = ch.flag || ""; + var re = ch.guard; + re = new RegExp(re, flag.replace(/[^gim]/g, "")); + var fmtTokens = typeof ch.fmt == "string" ? this.tokenizeTmSnippet(ch.fmt, "formatString") : ch.fmt; + var _self = this; + var formatted = str.replace(re, function () { + var oldArgs = _self.variables.__; + _self.variables.__ = [].slice.call(arguments); + var fmtParts = _self.resolveVariables(fmtTokens, editor); + var gChangeCase = "E"; + for (var i = 0; i < fmtParts.length; i++) { + var ch = fmtParts[i]; + if (typeof ch == "object") { + fmtParts[i] = ""; + if (ch.changeCase && ch.local) { + var next = fmtParts[i + 1]; + if (next && typeof next == "string") { + if (ch.changeCase == "u") + fmtParts[i] = next[0].toUpperCase(); + else + fmtParts[i] = next[0].toLowerCase(); + fmtParts[i + 1] = next.substr(1); } } - else { - r.end.column += colDiff; - r.end.row += lineDif; + else if (ch.changeCase) { + gChangeCase = ch.changeCase; } } - else if (r.end.row > endRow) { - r.end.row += lineDif; - } - if (r.start.row < endRow - && (startRow < r.start.row - || startRow == r.start.row && start.column < r.start.column)) { - r.start.row = startRow; - r.start.column = start.column; - } - else if (r.start.row == endRow) { - if (r.start.column <= end.column) { - if (lineDif || r.start.column > start.column) { - r.start.column = start.column; - r.start.row = start.row; - } - } - else { - r.start.column += colDiff; - r.start.row += lineDif; - } + else if (gChangeCase == "U") { + fmtParts[i] = ch.toUpperCase(); } - else if (r.start.row > endRow) { - r.start.row += lineDif; + else if (gChangeCase == "L") { + fmtParts[i] = ch.toLowerCase(); } } - } - if (lineDif != 0 && i < n) { - for (; i < n; i++) { - var r = ranges[i]; - r.start.row += lineDif; - r.end.row += lineDif; - } - } - }; - return RangeList; -}()); -RangeList.prototype.comparePoints = comparePoints; -exports.RangeList = RangeList; - -}); - -ace.define("ace/edit_session/fold",["require","exports","module","ace/range_list"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var RangeList = require("../range_list").RangeList; -var Fold = /** @class */ (function (_super) { - __extends(Fold, _super); - function Fold(range, placeholder) { - var _this = _super.call(this) || this; - _this.foldLine = null; - _this.placeholder = placeholder; - _this.range = range; - _this.start = range.start; - _this.end = range.end; - _this.sameRow = range.start.row == range.end.row; - _this.subFolds = _this.ranges = []; - return _this; - } - Fold.prototype.toString = function () { - return '"' + this.placeholder + '" ' + this.range.toString(); - }; - Fold.prototype.setFoldLine = function (foldLine) { - this.foldLine = foldLine; - this.subFolds.forEach(function (fold) { - fold.setFoldLine(foldLine); - }); - }; - Fold.prototype.clone = function () { - var range = this.range.clone(); - var fold = new Fold(range, this.placeholder); - this.subFolds.forEach(function (subFold) { - fold.subFolds.push(subFold.clone()); + _self.variables.__ = oldArgs; + return fmtParts.join(""); }); - fold.collapseChildren = this.collapseChildren; - return fold; - }; - Fold.prototype.addSubFold = function (fold) { - if (this.range.isEqual(fold)) - return; - consumeRange(fold, this.start); - var row = fold.start.row, column = fold.start.column; - for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { - cmp = this.subFolds[i].range.compare(row, column); - if (cmp != 1) - break; - } - var afterStart = this.subFolds[i]; - var firstConsumed = 0; - if (cmp == 0) { - if (afterStart.range.containsRange(fold)) - return afterStart.addSubFold(fold); - else - firstConsumed = 1; - } - var row = fold.range.end.row, column = fold.range.end.column; - for (var j = i, cmp = -1; j < this.subFolds.length; j++) { - cmp = this.subFolds[j].range.compare(row, column); - if (cmp != 1) - break; - } - if (cmp == 0) - j++; - var consumedFolds = this.subFolds.splice(i, j - i, fold); - var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length; - for (var k = firstConsumed; k < last; k++) { - fold.addSubFold(consumedFolds[k]); - } - fold.setFoldLine(this.foldLine); - return fold; + return formatted; }; - Fold.prototype.restoreRange = function (range) { - return restoreRange(range, this.start); + SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) { + if (ch.formatFunction == "upcase") + return str.toUpperCase(); + if (ch.formatFunction == "downcase") + return str.toLowerCase(); + return str; }; - return Fold; -}(RangeList)); -function consumePoint(point, anchor) { - point.row -= anchor.row; - if (point.row == 0) - point.column -= anchor.column; -} -function consumeRange(range, anchor) { - consumePoint(range.start, anchor); - consumePoint(range.end, anchor); -} -function restorePoint(point, anchor) { - if (point.row == 0) - point.column += anchor.column; - point.row += anchor.row; -} -function restoreRange(range, anchor) { - restorePoint(range.start, anchor); - restorePoint(range.end, anchor); -} -exports.Fold = Fold; - -}); - -ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator","ace/mouse/mouse_event"], function(require, exports, module){// @ts-nocheck -"use strict"; -var Range = require("../range").Range; -var FoldLine = require("./fold_line").FoldLine; -var Fold = require("./fold").Fold; -var TokenIterator = require("../token_iterator").TokenIterator; -var MouseEvent = require("../mouse/mouse_event").MouseEvent; -function Folding() { - this.getFoldAt = function (row, column, side) { - var foldLine = this.getFoldLine(row); - if (!foldLine) - return null; - var folds = foldLine.folds; - for (var i = 0; i < folds.length; i++) { - var range = folds[i].range; - if (range.contains(row, column)) { - if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) { - continue; + SnippetManager.prototype.resolveVariables = function (snippet, editor) { + var result = []; + var indentation = ""; + var afterNewLine = true; + for (var i = 0; i < snippet.length; i++) { + var ch = snippet[i]; + if (typeof ch == "string") { + result.push(ch); + if (ch == "\n") { + afterNewLine = true; + indentation = ""; } - else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) { - continue; + else if (afterNewLine) { + indentation = /^\t*/.exec(ch)[0]; + afterNewLine = /\S/.test(ch); } - return folds[i]; - } - } - }; - this.getFoldsInRange = function (range) { - var start = range.start; - var end = range.end; - var foldLines = this.$foldData; - var foundFolds = []; - start.column += 1; - end.column -= 1; - for (var i = 0; i < foldLines.length; i++) { - var cmp = foldLines[i].range.compareRange(range); - if (cmp == 2) { continue; } - else if (cmp == -2) { - break; + if (!ch) + continue; + afterNewLine = false; + if (ch.fmtString) { + var j = snippet.indexOf(ch, i + 1); + if (j == -1) + j = snippet.length; + ch.fmt = snippet.slice(i + 1, j); + i = j; } - var folds = foldLines[i].folds; - for (var j = 0; j < folds.length; j++) { - var fold = folds[j]; - cmp = fold.range.compareRange(range); - if (cmp == -2) { - break; - } - else if (cmp == 2) { - continue; + if (ch.text) { + var value = this.getVariableValue(editor, ch.text, indentation) + ""; + if (ch.fmtString) + value = this.tmStrFormat(value, ch, editor); + if (ch.formatFunction) + value = this.tmFormatFunction(value, ch, editor); + if (value && !ch.ifEnd) { + result.push(value); + gotoNext(ch); } - else - if (cmp == 42) { - break; + else if (!value && ch.ifEnd) { + gotoNext(ch.ifEnd); } - foundFolds.push(fold); + } + else if (ch.elseEnd) { + gotoNext(ch.elseEnd); + } + else if (ch.tabstopId != null) { + result.push(ch); + } + else if (ch.changeCase != null) { + result.push(ch); } } - start.column -= 1; - end.column += 1; - return foundFolds; + function gotoNext(ch) { + var i1 = snippet.indexOf(ch, i + 1); + if (i1 != -1) + i = i1; + } + return result; }; - this.getFoldsInRangeList = function (ranges) { - if (Array.isArray(ranges)) { - var folds = []; - ranges.forEach(function (range) { - folds = folds.concat(this.getFoldsInRange(range)); - }, this); + SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) { + var processedSnippet = processSnippetText.call(this, editor, snippetText); + return processedSnippet.text; + }; + SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) { + if (options === void 0) { options = {}; } + var processedSnippet = processSnippetText.call(this, editor, snippetText, options); + var range = editor.getSelectionRange(); + var end = editor.session.replace(range, processedSnippet.text); + var tabstopManager = new TabstopManager(editor); + var selectionId = editor.inVirtualSelectionMode && editor.selection.index; + tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId); + }; + SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) { + if (options === void 0) { options = {}; } + var self = this; + if (editor.inVirtualSelectionMode) + return self.insertSnippetForSelection(editor, snippetText, options); + editor.forEachSelection(function () { + self.insertSnippetForSelection(editor, snippetText, options); + }, null, { keepOrder: true }); + if (editor.tabstopManager) + editor.tabstopManager.tabNext(); + }; + SnippetManager.prototype.$getScope = function (editor) { + var scope = editor.session.$mode.$id || ""; + scope = scope.split("/").pop(); + if (scope === "html" || scope === "php") { + if (scope === "php" && !editor.session.$mode.inlinePhp) + scope = "html"; + var c = editor.getCursorPosition(); + var state = editor.session.getState(c.row); + if (typeof state === "object") { + state = state[0]; + } + if (state.substring) { + if (state.substring(0, 3) == "js-") + scope = "javascript"; + else if (state.substring(0, 4) == "css-") + scope = "css"; + else if (state.substring(0, 4) == "php-") + scope = "php"; + } } - else { - var folds = this.getFoldsInRange(ranges); + return scope; + }; + SnippetManager.prototype.getActiveScopes = function (editor) { + var scope = this.$getScope(editor); + var scopes = [scope]; + var snippetMap = this.snippetMap; + if (snippetMap[scope] && snippetMap[scope].includeScopes) { + scopes.push.apply(scopes, snippetMap[scope].includeScopes); } - return folds; + scopes.push("_"); + return scopes; }; - this.getAllFolds = function () { - var folds = []; - var foldLines = this.$foldData; - for (var i = 0; i < foldLines.length; i++) - for (var j = 0; j < foldLines[i].folds.length; j++) - folds.push(foldLines[i].folds[j]); - return folds; + SnippetManager.prototype.expandWithTab = function (editor, options) { + var self = this; + var result = editor.forEachSelection(function () { + return self.expandSnippetForSelection(editor, options); + }, null, { keepOrder: true }); + if (result && editor.tabstopManager) + editor.tabstopManager.tabNext(); + return result; + }; + SnippetManager.prototype.expandSnippetForSelection = function (editor, options) { + var cursor = editor.getCursorPosition(); + var line = editor.session.getLine(cursor.row); + var before = line.substring(0, cursor.column); + var after = line.substr(cursor.column); + var snippetMap = this.snippetMap; + var snippet; + this.getActiveScopes(editor).some(function (scope) { + var snippets = snippetMap[scope]; + if (snippets) + snippet = this.findMatchingSnippet(snippets, before, after); + return !!snippet; + }, this); + if (!snippet) + return false; + if (options && options.dryRun) + return true; + editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length); + this.variables.M__ = snippet.matchBefore; + this.variables.T__ = snippet.matchAfter; + this.insertSnippetForSelection(editor, snippet.content); + this.variables.M__ = this.variables.T__ = null; + return true; }; - this.getFoldStringAt = function (row, column, trim, foldLine) { - foldLine = foldLine || this.getFoldLine(row); - if (!foldLine) - return null; - var lastFold = { - end: { column: 0 } - }; - var str, fold; - for (var i = 0; i < foldLine.folds.length; i++) { - fold = foldLine.folds[i]; - var cmp = fold.range.compareEnd(row, column); - if (cmp == -1) { - str = this - .getLine(fold.start.row) - .substring(lastFold.end.column, fold.start.column); - break; - } - else if (cmp === 0) { - return null; - } - lastFold = fold; + SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) { + for (var i = snippetList.length; i--;) { + var s = snippetList[i]; + if (s.startRe && !s.startRe.test(before)) + continue; + if (s.endRe && !s.endRe.test(after)) + continue; + if (!s.startRe && !s.endRe) + continue; + s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; + s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; + s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; + s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; + return s; } - if (!str) - str = this.getLine(fold.start.row).substring(lastFold.end.column); - if (trim == -1) - return str.substring(0, column - lastFold.end.column); - else if (trim == 1) - return str.substring(column - lastFold.end.column); - else - return str; }; - this.getFoldLine = function (docRow, startFoldLine) { - var foldData = this.$foldData; - var i = 0; - if (startFoldLine) - i = foldData.indexOf(startFoldLine); - if (i == -1) - i = 0; - for (i; i < foldData.length; i++) { - var foldLine = foldData[i]; - if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { - return foldLine; + SnippetManager.prototype.register = function (snippets, scope) { + var snippetMap = this.snippetMap; + var snippetNameMap = this.snippetNameMap; + var self = this; + if (!snippets) + snippets = []; + function wrapRegexp(src) { + if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) + src = "(?:" + src + ")"; + return src || ""; + } + function guardedRegexp(re, guard, opening) { + re = wrapRegexp(re); + guard = wrapRegexp(guard); + if (opening) { + re = guard + re; + if (re && re[re.length - 1] != "$") + re = re + "$"; } - else if (foldLine.end.row > docRow) { - return null; + else { + re = re + guard; + if (re && re[0] != "^") + re = "^" + re; } + return new RegExp(re); } - return null; - }; - this.getNextFoldLine = function (docRow, startFoldLine) { - var foldData = this.$foldData; - var i = 0; - if (startFoldLine) - i = foldData.indexOf(startFoldLine); - if (i == -1) - i = 0; - for (i; i < foldData.length; i++) { - var foldLine = foldData[i]; - if (foldLine.end.row >= docRow) { - return foldLine; + function addSnippet(s) { + if (!s.scope) + s.scope = scope || "_"; + scope = s.scope; + if (!snippetMap[scope]) { + snippetMap[scope] = []; + snippetNameMap[scope] = {}; } - } - return null; - }; - this.getFoldedRowCount = function (first, last) { - var foldData = this.$foldData, rowCount = last - first + 1; - for (var i = 0; i < foldData.length; i++) { - var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row; - if (end >= last) { - if (start < last) { - if (start >= first) - rowCount -= last - start; - else - rowCount = 0; // in one fold - } - break; + var map = snippetNameMap[scope]; + if (s.name) { + var old = map[s.name]; + if (old) + self.unregister(old); + map[s.name] = s; } - else if (end >= first) { - if (start >= first) // fold inside range - rowCount -= end - start; - else - rowCount -= end - first + 1; + snippetMap[scope].push(s); + if (s.prefix) + s.tabTrigger = s.prefix; + if (!s.content && s.body) + s.content = Array.isArray(s.body) ? s.body.join("\n") : s.body; + if (s.tabTrigger && !s.trigger) { + if (!s.guard && /^\w/.test(s.tabTrigger)) + s.guard = "\\b"; + s.trigger = lang.escapeRegExp(s.tabTrigger); } + if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) + return; + s.startRe = guardedRegexp(s.trigger, s.guard, true); + s.triggerRe = new RegExp(s.trigger); + s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); + s.endTriggerRe = new RegExp(s.endTrigger); + } + if (Array.isArray(snippets)) { + snippets.forEach(addSnippet); } - return rowCount; - }; - this.$addFoldLine = function (foldLine) { - this.$foldData.push(foldLine); - this.$foldData.sort(function (a, b) { - return a.start.row - b.start.row; - }); - return foldLine; - }; - this.addFold = function (placeholder, range) { - var foldData = this.$foldData; - var added = false; - var fold; - if (placeholder instanceof Fold) - fold = placeholder; else { - fold = new Fold(range, placeholder); - fold.collapseChildren = range.collapseChildren; + Object.keys(snippets).forEach(function (key) { + addSnippet(snippets[key]); + }); } - this.$clipRangeToDocument(fold.range); - var startRow = fold.start.row; - var startColumn = fold.start.column; - var endRow = fold.end.row; - var endColumn = fold.end.column; - var startFold = this.getFoldAt(startRow, startColumn, 1); - var endFold = this.getFoldAt(endRow, endColumn, -1); - if (startFold && endFold == startFold) - return startFold.addSubFold(fold); - if (startFold && !startFold.range.isStart(startRow, startColumn)) - this.removeFold(startFold); - if (endFold && !endFold.range.isEnd(endRow, endColumn)) - this.removeFold(endFold); - var folds = this.getFoldsInRange(fold.range); - if (folds.length > 0) { - this.removeFolds(folds); - if (!fold.collapseChildren) { - folds.forEach(function (subFold) { - fold.addSubFold(subFold); - }); + this._signal("registerSnippets", { scope: scope }); + }; + SnippetManager.prototype.unregister = function (snippets, scope) { + var snippetMap = this.snippetMap; + var snippetNameMap = this.snippetNameMap; + function removeSnippet(s) { + var nameMap = snippetNameMap[s.scope || scope]; + if (nameMap && nameMap[s.name]) { + delete nameMap[s.name]; + var map = snippetMap[s.scope || scope]; + var i = map && map.indexOf(s); + if (i >= 0) + map.splice(i, 1); } } - for (var i = 0; i < foldData.length; i++) { - var foldLine = foldData[i]; - if (endRow == foldLine.start.row) { - foldLine.addFold(fold); - added = true; - break; - } - else if (startRow == foldLine.end.row) { - foldLine.addFold(fold); - added = true; - if (!fold.sameRow) { - var foldLineNext = foldData[i + 1]; - if (foldLineNext && foldLineNext.start.row == endRow) { - foldLine.merge(foldLineNext); - break; - } + if (snippets.content) + removeSnippet(snippets); + else if (Array.isArray(snippets)) + snippets.forEach(removeSnippet); + }; + SnippetManager.prototype.parseSnippetFile = function (str) { + str = str.replace(/\r/g, ""); + var list = [], /**@type{Snippet}*/ snippet = {}; + var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; + var m; + while (m = re.exec(str)) { + if (m[1]) { + try { + snippet = JSON.parse(m[1]); + list.push(snippet); } - break; + catch (e) { } } - else if (endRow <= foldLine.start.row) { - break; + if (m[4]) { + snippet.content = m[4].replace(/^\t/gm, ""); + list.push(snippet); + snippet = {}; + } + else { + var key = m[2], val = m[3]; + if (key == "regex") { + var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; + snippet.guard = guardRe.exec(val)[1]; + snippet.trigger = guardRe.exec(val)[1]; + snippet.endTrigger = guardRe.exec(val)[1]; + snippet.endGuard = guardRe.exec(val)[1]; + } + else if (key == "snippet") { + snippet.tabTrigger = val.match(/^\S*/)[0]; + if (!snippet.name) + snippet.name = val; + } + else if (key) { + snippet[key] = val; + } } } - if (!added) - foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); - if (this.$useWrapMode) - this.$updateWrapData(foldLine.start.row, foldLine.start.row); - else - this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); - this.$modified = true; - this._signal("changeFold", { data: fold, action: "add" }); - return fold; + return list; }; - this.addFolds = function (folds) { - folds.forEach(function (fold) { - this.addFold(fold); + SnippetManager.prototype.getSnippetByName = function (name, editor) { + var snippetMap = this.snippetNameMap; + var snippet; + this.getActiveScopes(editor).some(function (scope) { + var snippets = snippetMap[scope]; + if (snippets) + snippet = snippets[name]; + return !!snippet; }, this); + return snippet; }; - this.removeFold = function (fold) { - var foldLine = fold.foldLine; - var startRow = foldLine.start.row; - var endRow = foldLine.end.row; - var foldLines = this.$foldData; - var folds = foldLine.folds; - if (folds.length == 1) { - foldLines.splice(foldLines.indexOf(foldLine), 1); + return SnippetManager; +}()); +oop.implement(SnippetManager.prototype, EventEmitter); +var processSnippetText = function (editor, snippetText, options) { + if (options === void 0) { options = {}; } + var cursor = editor.getCursorPosition(); + var line = editor.session.getLine(cursor.row); + var tabString = editor.session.getTabString(); + var indentString = line.match(/^\s*/)[0]; + if (cursor.column < indentString.length) + indentString = indentString.slice(0, cursor.column); + snippetText = snippetText.replace(/\r/g, ""); + var tokens = this.tokenizeTmSnippet(snippetText); + tokens = this.resolveVariables(tokens, editor); + tokens = tokens.map(function (x) { + if (x == "\n" && !options.excludeExtraIndent) + return x + indentString; + if (typeof x == "string") + return x.replace(/\t/g, tabString); + return x; + }); + var tabstops = []; + tokens.forEach(function (p, i) { + if (typeof p != "object") + return; + var id = p.tabstopId; + var ts = tabstops[id]; + if (!ts) { + ts = tabstops[id] = []; + ts.index = id; + ts.value = ""; + ts.parents = {}; } - else - if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { - folds.pop(); - foldLine.end.row = folds[folds.length - 1].end.row; - foldLine.end.column = folds[folds.length - 1].end.column; + if (ts.indexOf(p) !== -1) + return; + if (p.choices && !ts.choices) + ts.choices = p.choices; + ts.push(p); + var i1 = tokens.indexOf(p, i + 1); + if (i1 === -1) + return; + var value = tokens.slice(i + 1, i1); + var isNested = value.some(function (t) { return typeof t === "object"; }); + if (isNested && !ts.value) { + ts.value = value; } - else - if (foldLine.range.isStart(fold.start.row, fold.start.column)) { - folds.shift(); - foldLine.start.row = folds[0].start.row; - foldLine.start.column = folds[0].start.column; + else if (value.length && (!ts.value || typeof ts.value !== "string")) { + ts.value = value.join(""); } - else - if (fold.sameRow) { - folds.splice(folds.indexOf(fold), 1); + }); + tabstops.forEach(function (ts) { ts.length = 0; }); + var expanding = {}; + function copyValue(val) { + var copy = []; + for (var i = 0; i < val.length; i++) { + var p = val[i]; + if (typeof p == "object") { + if (expanding[p.tabstopId]) + continue; + var j = val.lastIndexOf(p, i - 1); + p = copy[j] || { tabstopId: p.tabstopId }; + } + copy[i] = p; } - else - { - var newFoldLine = foldLine.split(fold.start.row, fold.start.column); - folds = newFoldLine.folds; - folds.shift(); - newFoldLine.start.row = folds[0].start.row; - newFoldLine.start.column = folds[0].start.column; + return copy; + } + for (var i = 0; i < tokens.length; i++) { + var p = tokens[i]; + if (typeof p != "object") + continue; + var id = p.tabstopId; + var ts = tabstops[id]; + var i1 = tokens.indexOf(p, i + 1); + if (expanding[id]) { + if (expanding[id] === p) { + delete expanding[id]; + Object.keys(expanding).forEach(function (parentId) { + ts.parents[parentId] = true; + }); + } + continue; } - if (!this.$updating) { - if (this.$useWrapMode) - this.$updateWrapData(startRow, endRow); + expanding[id] = p; + var value = ts.value; + if (typeof value !== "string") + value = copyValue(value); + else if (p.fmt) + value = this.tmStrFormat(value, p, editor); + tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p)); + if (ts.indexOf(p) === -1) + ts.push(p); + } + var row = 0, column = 0; + var text = ""; + tokens.forEach(function (t) { + if (typeof t === "string") { + var lines = t.split("\n"); + if (lines.length > 1) { + column = lines[lines.length - 1].length; + row += lines.length - 1; + } else - this.$updateRowLengthCache(startRow, endRow); + column += t.length; + text += t; } - this.$modified = true; - this._signal("changeFold", { data: fold, action: "remove" }); + else if (t) { + if (!t.start) + t.start = { row: row, column: column }; + else + t.end = { row: row, column: column }; + } + }); + return { + text: text, + tabstops: tabstops, + tokens: tokens }; - this.removeFolds = function (folds) { - var cloneFolds = []; - for (var i = 0; i < folds.length; i++) { - cloneFolds.push(folds[i]); +}; +var TabstopManager = /** @class */ (function () { + function TabstopManager(editor) { + this.index = 0; + this.ranges = []; + this.tabstops = []; + if (editor.tabstopManager) + return editor.tabstopManager; + editor.tabstopManager = this; + this.$onChange = this.onChange.bind(this); + this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; + this.$onChangeSession = this.onChangeSession.bind(this); + this.$onAfterExec = this.onAfterExec.bind(this); + this.attach(editor); + } + TabstopManager.prototype.attach = function (editor) { + this.$openTabstops = null; + this.selectedTabstop = null; + this.editor = editor; + this.session = editor.session; + this.editor.on("change", this.$onChange); + this.editor.on("changeSelection", this.$onChangeSelection); + this.editor.on("changeSession", this.$onChangeSession); + this.editor.commands.on("afterExec", this.$onAfterExec); + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + }; + TabstopManager.prototype.detach = function () { + this.tabstops.forEach(this.removeTabstopMarkers, this); + this.ranges.length = 0; + this.tabstops.length = 0; + this.selectedTabstop = null; + this.editor.off("change", this.$onChange); + this.editor.off("changeSelection", this.$onChangeSelection); + this.editor.off("changeSession", this.$onChangeSession); + this.editor.commands.off("afterExec", this.$onAfterExec); + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); + this.editor.tabstopManager = null; + this.session = null; + this.editor = null; + }; + TabstopManager.prototype.onChange = function (delta) { + var isRemove = delta.action[0] == "r"; + var selectedTabstop = this.selectedTabstop || {}; + var parents = selectedTabstop.parents || {}; + var tabstops = this.tabstops.slice(); + for (var i = 0; i < tabstops.length; i++) { + var ts = tabstops[i]; + var active = ts == selectedTabstop || parents[ts.index]; + ts.rangeList.$bias = active ? 0 : 1; + if (delta.action == "remove" && ts !== selectedTabstop) { + var parentActive = ts.parents && ts.parents[selectedTabstop.index]; + var startIndex = ts.rangeList.pointIndex(delta.start, parentActive); + startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1; + var endIndex = ts.rangeList.pointIndex(delta.end, parentActive); + endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1; + var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex); + for (var j = 0; j < toRemove.length; j++) + this.removeRange(toRemove[j]); + } + ts.rangeList.$onChange(delta); } - cloneFolds.forEach(function (fold) { - this.removeFold(fold); - }, this); - this.$modified = true; + var session = this.session; + if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue()) + this.detach(); }; - this.expandFold = function (fold) { - this.removeFold(fold); - fold.subFolds.forEach(function (subFold) { - fold.restoreRange(subFold); - this.addFold(subFold); - }, this); - if (fold.collapseChildren > 0) { - this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1); + TabstopManager.prototype.updateLinkedFields = function () { + var ts = this.selectedTabstop; + if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked) + return; + this.$inChange = true; + var session = this.session; + var text = session.getTextRange(ts.firstNonLinked); + for (var i = 0; i < ts.length; i++) { + var range = ts[i]; + if (!range.linked) + continue; + var original = range.original; + var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor); + session.replace(range, fmt); } - fold.subFolds = []; + this.$inChange = false; }; - this.expandFolds = function (folds) { - folds.forEach(function (fold) { - this.expandFold(fold); - }, this); + TabstopManager.prototype.onAfterExec = function (e) { + if (e.command && !e.command.readOnly) + this.updateLinkedFields(); }; - this.unfold = function (location, expandInner) { - var range, folds; - if (location == null) { - range = new Range(0, 0, this.getLength(), 0); - if (expandInner == null) - expandInner = true; - } - else if (typeof location == "number") { - range = new Range(location, 0, location, this.getLine(location).length); + TabstopManager.prototype.onChangeSelection = function () { + if (!this.editor) + return; + var lead = this.editor.selection.lead; + var anchor = this.editor.selection.anchor; + var isEmpty = this.editor.selection.isEmpty(); + for (var i = 0; i < this.ranges.length; i++) { + if (this.ranges[i].linked) + continue; + var containsLead = this.ranges[i].contains(lead.row, lead.column); + var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); + if (containsLead && containsAnchor) + return; } - else if ("row" in location) { - range = Range.fromPoints(location, location); + this.detach(); + }; + TabstopManager.prototype.onChangeSession = function () { + this.detach(); + }; + TabstopManager.prototype.tabNext = function (dir) { + var max = this.tabstops.length; + var index = this.index + (dir || 1); + index = Math.min(Math.max(index, 1), max); + if (index == max) + index = 0; + this.selectTabstop(index); + this.updateTabstopMarkers(); + if (index === 0) { + this.detach(); } - else if (Array.isArray(location)) { - folds = []; - location.forEach(function (range) { - folds = folds.concat(this.unfold(range)); - }, this); - return folds; + }; + TabstopManager.prototype.selectTabstop = function (index) { + this.$openTabstops = null; + var ts = this.tabstops[this.index]; + if (ts) + this.addTabstopMarkers(ts); + this.index = index; + ts = this.tabstops[this.index]; + if (!ts || !ts.length) + return; + this.selectedTabstop = ts; + var range = ts.firstNonLinked || ts; + if (ts.choices) + range.cursor = range.start; + if (!this.editor.inVirtualSelectionMode) { + var sel = this.editor.multiSelect; + sel.toSingleRange(range); + for (var i = 0; i < ts.length; i++) { + if (ts.hasLinkedRanges && ts[i].linked) + continue; + sel.addRange(ts[i].clone(), true); + } } else { - range = location; + this.editor.selection.fromOrientedRange(range); } - folds = this.getFoldsInRangeList(range); - var outermostFolds = folds; - while (folds.length == 1 - && Range.comparePoints(folds[0].start, range.start) < 0 - && Range.comparePoints(folds[0].end, range.end) > 0) { - this.expandFolds(folds); - folds = this.getFoldsInRangeList(range); + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + if (this.selectedTabstop && this.selectedTabstop.choices) + this.editor.execCommand("startAutocomplete", { matches: this.selectedTabstop.choices }); + }; + TabstopManager.prototype.addTabstops = function (tabstops, start, end) { + var useLink = this.useLink || !this.editor.getOption("enableMultiselect"); + if (!this.$openTabstops) + this.$openTabstops = []; + if (!tabstops[0]) { + var p = Range.fromPoints(end, end); + moveRelative(p.start, start); + moveRelative(p.end, start); + tabstops[0] = [p]; + tabstops[0].index = 0; } - if (expandInner != false) { - this.removeFolds(folds); + var i = this.index; + var arg = [i + 1, 0]; + var ranges = this.ranges; + var snippetId = this.snippetId = (this.snippetId || 0) + 1; + tabstops.forEach(function (ts, index) { + var dest = this.$openTabstops[index] || ts; + dest.snippetId = snippetId; + for (var i = 0; i < ts.length; i++) { + var p = ts[i]; + var range = Range.fromPoints(p.start, p.end || p.start); + movePoint(range.start, start); + movePoint(range.end, start); + range.original = p; + range.tabstop = dest; + ranges.push(range); + if (dest != ts) + dest.unshift(range); + else + dest[i] = range; + if (p.fmtString || (dest.firstNonLinked && useLink)) { + range.linked = true; + dest.hasLinkedRanges = true; + } + else if (!dest.firstNonLinked) + dest.firstNonLinked = range; + } + if (!dest.firstNonLinked) + dest.hasLinkedRanges = false; + if (dest === ts) { + arg.push(dest); + this.$openTabstops[index] = dest; + } + this.addTabstopMarkers(dest); + dest.rangeList = dest.rangeList || new RangeList(); + dest.rangeList.$bias = 0; + dest.rangeList.addList(dest); + }, this); + if (arg.length > 2) { + if (this.tabstops.length) + arg.push(arg.splice(2, 1)[0]); + this.tabstops.splice.apply(this.tabstops, arg); } - else { - this.expandFolds(folds); + }; + TabstopManager.prototype.addTabstopMarkers = function (ts) { + var session = this.session; + ts.forEach(function (range) { + if (!range.markerId) + range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); + }); + }; + TabstopManager.prototype.removeTabstopMarkers = function (ts) { + var session = this.session; + ts.forEach(function (range) { + session.removeMarker(range.markerId); + range.markerId = null; + }); + }; + TabstopManager.prototype.updateTabstopMarkers = function () { + if (!this.selectedTabstop) + return; + var currentSnippetId = this.selectedTabstop.snippetId; + if (this.selectedTabstop.index === 0) { + currentSnippetId--; } - if (outermostFolds.length) - return outermostFolds; + this.tabstops.forEach(function (ts) { + if (ts.snippetId === currentSnippetId) + this.addTabstopMarkers(ts); + else + this.removeTabstopMarkers(ts); + }, this); }; - this.isRowFolded = function (docRow, startFoldRow) { - return !!this.getFoldLine(docRow, startFoldRow); + TabstopManager.prototype.removeRange = function (range) { + var i = range.tabstop.indexOf(range); + if (i != -1) + range.tabstop.splice(i, 1); + i = this.ranges.indexOf(range); + if (i != -1) + this.ranges.splice(i, 1); + i = range.tabstop.rangeList.ranges.indexOf(range); + if (i != -1) + range.tabstop.splice(i, 1); + this.session.removeMarker(range.markerId); + if (!range.tabstop.length) { + i = this.tabstops.indexOf(range.tabstop); + if (i != -1) + this.tabstops.splice(i, 1); + if (!this.tabstops.length) + this.detach(); + } }; - this.getRowFoldEnd = function (docRow, startFoldRow) { - var foldLine = this.getFoldLine(docRow, startFoldRow); - return foldLine ? foldLine.end.row : docRow; + return TabstopManager; +}()); +TabstopManager.prototype.keyboardHandler = new HashHandler(); +TabstopManager.prototype.keyboardHandler.bindKeys({ + "Tab": function (editor) { + if (exports.snippetManager && exports.snippetManager.expandWithTab(editor)) + return; + editor.tabstopManager.tabNext(1); + editor.renderer.scrollCursorIntoView(); + }, + "Shift-Tab": function (editor) { + editor.tabstopManager.tabNext(-1); + editor.renderer.scrollCursorIntoView(); + }, + "Esc": function (editor) { + editor.tabstopManager.detach(); + } +}); +var movePoint = function (point, diff) { + if (point.row == 0) + point.column += diff.column; + point.row += diff.row; +}; +var moveRelative = function (point, start) { + if (point.row == start.row) + point.column -= start.column; + point.row -= start.row; +}; +dom.importCssString("\n.ace_snippet-marker {\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n background: rgba(194, 193, 208, 0.09);\n border: 1px dotted rgba(211, 208, 235, 0.62);\n position: absolute;\n}", "snippets.css", false); +exports.snippetManager = new SnippetManager(); +var Editor = require("./editor").Editor; +(function () { + this.insertSnippet = function (content, options) { + return exports.snippetManager.insertSnippet(this, content, options); }; - this.getRowFoldStart = function (docRow, startFoldRow) { - var foldLine = this.getFoldLine(docRow, startFoldRow); - return foldLine ? foldLine.start.row : docRow; + this.expandSnippet = function (options) { + return exports.snippetManager.expandWithTab(this, options); }; - this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) { - if (startRow == null) - startRow = foldLine.start.row; - if (startColumn == null) - startColumn = 0; - if (endRow == null) - endRow = foldLine.end.row; - if (endColumn == null) - endColumn = this.getLine(endRow).length; - var doc = this.doc; - var textLine = ""; - foldLine.walk(function (placeholder, row, column, lastColumn) { - if (row < startRow) +}).call(Editor.prototype); + +}); + +ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/config","ace/lib/useragent"], function(require, exports, module){"use strict"; +var Renderer = require("../virtual_renderer").VirtualRenderer; +var Editor = require("../editor").Editor; +var Range = require("../range").Range; +var event = require("../lib/event"); +var lang = require("../lib/lang"); +var dom = require("../lib/dom"); +var nls = require("../config").nls; +var userAgent = require("./../lib/useragent"); +var getAriaId = function (index) { + return "suggest-aria-id:".concat(index); +}; +var popupAriaRole = userAgent.isSafari ? "menu" : "listbox"; +var optionAriaRole = userAgent.isSafari ? "menuitem" : "option"; +var ariaActiveState = userAgent.isSafari ? "aria-current" : "aria-selected"; +var $singleLineEditor = function (el) { + var renderer = new Renderer(el); + renderer.$maxLines = 4; + var editor = new Editor(renderer); + editor.setHighlightActiveLine(false); + editor.setShowPrintMargin(false); + editor.renderer.setShowGutter(false); + editor.renderer.setHighlightGutterLine(false); + editor.$mouseHandler.$focusTimeout = 0; + editor.$highlightTagPending = true; + return editor; +}; +var AcePopup = /** @class */ (function () { + function AcePopup(parentNode) { + var el = dom.createElement("div"); + var popup = $singleLineEditor(el); + if (parentNode) { + parentNode.appendChild(el); + } + el.style.display = "none"; + popup.renderer.content.style.cursor = "default"; + popup.renderer.setStyle("ace_autocomplete"); + popup.renderer.$textLayer.element.setAttribute("role", popupAriaRole); + popup.renderer.$textLayer.element.setAttribute("aria-roledescription", nls("autocomplete.popup.aria-roledescription", "Autocomplete suggestions")); + popup.renderer.$textLayer.element.setAttribute("aria-label", nls("autocomplete.popup.aria-label", "Autocomplete suggestions")); + popup.renderer.textarea.setAttribute("aria-hidden", "true"); + popup.setOption("displayIndentGuides", false); + popup.setOption("dragDelay", 150); + var noop = function () { }; + popup.focus = noop; + popup.$isFocused = true; + popup.renderer.$cursorLayer.restartTimer = noop; + popup.renderer.$cursorLayer.element.style.opacity = "0"; + popup.renderer.$maxLines = 8; + popup.renderer.$keepTextAreaAtCursor = false; + popup.setHighlightActiveLine(false); + popup.session.highlight(""); + popup.session.$searchHighlight.clazz = "ace_highlight-marker"; + popup.on("mousedown", function (e) { + var pos = e.getDocumentPosition(); + popup.selection.moveToPosition(pos); + selectionMarker.start.row = selectionMarker.end.row = pos.row; + e.stop(); + }); + var lastMouseEvent; + var hoverMarker = new Range(-1, 0, -1, Infinity); + var selectionMarker = new Range(-1, 0, -1, Infinity); + selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine"); + popup.setSelectOnHover = function (val) { + if (!val) { + hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine"); + } + else if (hoverMarker.id) { + popup.session.removeMarker(hoverMarker.id); + hoverMarker.id = null; + } + }; + popup.setSelectOnHover(false); + popup.on("mousemove", function (e) { + if (!lastMouseEvent) { + lastMouseEvent = e; return; - if (row == startRow) { - if (column < startColumn) - return; - lastColumn = Math.max(startColumn, lastColumn); } - if (placeholder != null) { - textLine += placeholder; + if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) { + return; } - else { - textLine += doc.getLine(row).substring(lastColumn, column); + lastMouseEvent = e; + lastMouseEvent.scrollTop = popup.renderer.scrollTop; + popup.isMouseOver = true; + var row = lastMouseEvent.getDocumentPosition().row; + if (hoverMarker.start.row != row) { + if (!hoverMarker.id) + popup.setRow(row); + setHoverMarker(row); } - }, endRow, endColumn); - return textLine; - }; - this.getDisplayLine = function (row, endColumn, startRow, startColumn) { - var foldLine = this.getFoldLine(row); - if (!foldLine) { - var line; - line = this.doc.getLine(row); - return line.substring(startColumn || 0, endColumn || line.length); - } - else { - return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn); - } - }; - this.$cloneFoldData = function () { - var fd = []; - fd = this.$foldData.map(function (foldLine) { - var folds = foldLine.folds.map(function (fold) { - return fold.clone(); - }); - return new FoldLine(fd, folds); }); - return fd; - }; - this.toggleFold = function (tryToUnfold) { - var selection = this.selection; - var range = selection.getRange(); - var fold; - var bracketPos; - if (range.isEmpty()) { - var cursor = range.start; - fold = this.getFoldAt(cursor.row, cursor.column); - if (fold) { - this.expandFold(fold); - return; + popup.renderer.on("beforeRender", function () { + if (lastMouseEvent && hoverMarker.start.row != -1) { + lastMouseEvent.$pos = null; + var row = lastMouseEvent.getDocumentPosition().row; + if (!hoverMarker.id) + popup.setRow(row); + setHoverMarker(row, true); + } + }); + popup.renderer.on("afterRender", function () { + var t = popup.renderer.$textLayer; + for (var row = t.config.firstRow, l = t.config.lastRow; row <= l; row++) { + var popupRowElement = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]); + popupRowElement.setAttribute("role", optionAriaRole); + popupRowElement.setAttribute("aria-roledescription", nls("autocomplete.popup.item.aria-roledescription", "item")); + popupRowElement.setAttribute("aria-setsize", popup.data.length); + popupRowElement.setAttribute("aria-describedby", "doc-tooltip"); + popupRowElement.setAttribute("aria-posinset", row + 1); + var rowData = popup.getData(row); + if (rowData) { + var ariaLabel = "".concat(rowData.caption || rowData.value).concat(rowData.meta ? ", ".concat(rowData.meta) : ''); + popupRowElement.setAttribute("aria-label", ariaLabel); + } + var highlightedSpans = popupRowElement.querySelectorAll(".ace_completion-highlight"); + highlightedSpans.forEach(function (span) { + span.setAttribute("role", "mark"); + }); + } + }); + popup.renderer.on("afterRender", function () { + var row = popup.getRow(); + var t = popup.renderer.$textLayer; + var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]); + var el = document.activeElement; // Active element is textarea of main editor + if (selected !== popup.selectedNode && popup.selectedNode) { + dom.removeCssClass(popup.selectedNode, "ace_selected"); + popup.selectedNode.removeAttribute(ariaActiveState); + popup.selectedNode.removeAttribute("id"); + } + el.removeAttribute("aria-activedescendant"); + popup.selectedNode = selected; + if (selected) { + var ariaId = getAriaId(row); + dom.addCssClass(selected, "ace_selected"); + selected.id = ariaId; + t.element.setAttribute("aria-activedescendant", ariaId); + el.setAttribute("aria-activedescendant", ariaId); + selected.setAttribute(ariaActiveState, "true"); + } + }); + var hideHoverMarker = function () { setHoverMarker(-1); }; + var setHoverMarker = function (row, suppressRedraw) { + if (row !== hoverMarker.start.row) { + hoverMarker.start.row = hoverMarker.end.row = row; + if (!suppressRedraw) + popup.session._emit("changeBackMarker"); + popup._emit("changeHoverMarker"); + } + }; + popup.getHoveredRow = function () { + return hoverMarker.start.row; + }; + event.addListener(popup.container, "mouseout", function () { + popup.isMouseOver = false; + hideHoverMarker(); + }); + popup.on("hide", hideHoverMarker); + popup.on("changeSelection", hideHoverMarker); + popup.session.doc.getLength = function () { + return popup.data.length; + }; + popup.session.doc.getLine = function (i) { + var data = popup.data[i]; + if (typeof data == "string") + return data; + return (data && data.value) || ""; + }; + var bgTokenizer = popup.session.bgTokenizer; + bgTokenizer.$tokenizeRow = function (row) { + var data = popup.data[row]; + var tokens = []; + if (!data) + return tokens; + if (typeof data == "string") + data = { value: data }; + var caption = data.caption || data.value || data.name; + function addToken(value, className) { + value && tokens.push({ + type: (data.className || "") + (className || ""), + value: value + }); + } + var lower = caption.toLowerCase(); + var filterText = (popup.filterText || "").toLowerCase(); + var lastIndex = 0; + var lastI = 0; + for (var i = 0; i <= filterText.length; i++) { + if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) { + var sub = filterText.slice(lastI, i); + lastI = i; + var index = lower.indexOf(sub, lastIndex); + if (index == -1) + continue; + addToken(caption.slice(lastIndex, index), ""); + lastIndex = index + sub.length; + addToken(caption.slice(index, lastIndex), "completion-highlight"); + } + } + addToken(caption.slice(lastIndex, caption.length), ""); + tokens.push({ type: "completion-spacer", value: " " }); + if (data.meta) + tokens.push({ type: "completion-meta", value: data.meta }); + if (data.message) + tokens.push({ type: "completion-message", value: data.message }); + return tokens; + }; + bgTokenizer.$updateOnChange = noop; + bgTokenizer.start = noop; + popup.session.$computeWidth = function () { + return this.screenWidth = 0; + }; + popup.isOpen = false; + popup.isTopdown = false; + popup.autoSelect = true; + popup.filterText = ""; + popup.isMouseOver = false; + popup.data = []; + popup.setData = function (list, filterText) { + popup.filterText = filterText || ""; + popup.setValue(lang.stringRepeat("\n", list.length), -1); + popup.data = list || []; + popup.setRow(0); + }; + popup.getData = function (row) { + return popup.data[row]; + }; + popup.getRow = function () { + return selectionMarker.start.row; + }; + popup.setRow = function (line) { + line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line)); + if (selectionMarker.start.row != line) { + popup.selection.clearSelection(); + selectionMarker.start.row = selectionMarker.end.row = line || 0; + popup.session._emit("changeBackMarker"); + popup.moveCursorTo(line || 0, 0); + if (popup.isOpen) + popup._signal("select"); + } + }; + popup.on("changeSelection", function () { + if (popup.isOpen) + popup.setRow(popup.selection.lead.row); + popup.renderer.scrollCursorIntoView(); + }); + popup.hide = function () { + this.container.style.display = "none"; + popup.anchorPos = null; + popup.anchor = null; + if (popup.isOpen) { + popup.isOpen = false; + this._signal("hide"); } - else if (tryToUnfold) { - var foldLine = this.getFoldLine(cursor.row); - if (foldLine) - this.expandFolds(foldLine.folds); - return; + }; + popup.tryShow = function (pos, lineHeight, anchor, forceShow) { + if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor && + popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left && + popup.anchor === anchor) { + return true; } - else if (bracketPos = this.findMatchingBracket(cursor)) { - if (range.comparePoint(bracketPos) == 1) { - range.end = bracketPos; + var el = this.container; + var scrollBarSize = this.renderer.scrollBar.width || 10; + var screenHeight = window.innerHeight - scrollBarSize; + var screenWidth = window.innerWidth - scrollBarSize; + var renderer = this.renderer; + var maxH = renderer.$maxLines * lineHeight * 1.4; + var dims = { top: 0, bottom: 0, left: 0 }; + var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight; + var spaceAbove = pos.top - 3 * this.$borderSize; + if (!anchor) { + if (spaceAbove <= spaceBelow || spaceBelow >= maxH) { + anchor = "bottom"; } else { - range.start = bracketPos; - range.start.column++; - range.end.column--; + anchor = "top"; } } - else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) { - if (range.comparePoint(bracketPos) == 1) - range.end = bracketPos; - else - range.start = bracketPos; - range.start.column++; + if (anchor === "top") { + dims.bottom = pos.top - this.$borderSize; + dims.top = dims.bottom - maxH; } - else { - range = this.getCommentFoldRange(cursor.row, cursor.column) || range; + else if (anchor === "bottom") { + dims.top = pos.top + lineHeight + this.$borderSize; + dims.bottom = dims.top + maxH; } - } - else { - var folds = this.getFoldsInRange(range); - if (tryToUnfold && folds.length) { - this.expandFolds(folds); - return; + var fitsX = dims.top >= 0 && dims.bottom <= screenHeight; + if (!forceShow && !fitsX) { + return false; } - else if (folds.length == 1) { - fold = folds[0]; + if (!fitsX) { + if (anchor === "top") { + renderer.$maxPixelHeight = spaceAbove; + } + else { + renderer.$maxPixelHeight = spaceBelow; + } } - } - if (!fold) - fold = this.getFoldAt(range.start.row, range.start.column); - if (fold && fold.range.toString() == range.toString()) { - this.expandFold(fold); - return; - } - var placeholder = "..."; - if (!range.isMultiLine()) { - placeholder = this.getTextRange(range); - if (placeholder.length < 4) - return; - placeholder = placeholder.trim().substring(0, 2) + ".."; - } - this.addFold(placeholder, range); - }; - this.getCommentFoldRange = function (row, column, dir) { - var iterator = new TokenIterator(this, row, column); - var token = iterator.getCurrentToken(); - var type = token && token.type; - if (token && /^comment|string/.test(type)) { - type = type.match(/comment|string/)[0]; - if (type == "comment") - type += "|doc-start|\\.doc"; - var re = new RegExp(type); - var range = new Range(); - if (dir != 1) { - do { - token = iterator.stepBackward(); - } while (token && re.test(token.type)); - token = iterator.stepForward(); + else { + renderer.$maxPixelHeight = null; } - range.start.row = iterator.getCurrentTokenRow(); - range.start.column = iterator.getCurrentTokenColumn() + token.value.length; - iterator = new TokenIterator(this, row, column); - var initState = this.getState(iterator.$row); - if (dir != -1) { - var lastRow = -1; - do { - token = iterator.stepForward(); - if (lastRow == -1) { - var state = this.getState(iterator.$row); - if (initState.toString() !== state.toString()) - lastRow = iterator.$row; - } - else if (iterator.$row > lastRow) { - break; - } - } while (token && re.test(token.type)); - token = iterator.stepBackward(); + el.style.display = ""; + var rootRect = el.offsetParent && el.offsetParent.getBoundingClientRect(); + if (anchor === "top") { + el.style.top = ""; + el.style.bottom = (screenHeight + scrollBarSize - dims.bottom) + - (rootRect ? screenHeight + scrollBarSize - rootRect.bottom : 0) + "px"; + popup.isTopdown = false; } - else - token = iterator.getCurrentToken(); - range.end.row = iterator.getCurrentTokenRow(); - range.end.column = iterator.getCurrentTokenColumn(); - if (range.start.row == range.end.row && range.start.column > range.end.column) - return; - return range; - } - }; - this.foldAll = function (startRow, endRow, depth, test) { - if (depth == undefined) - depth = 100000; // JSON.stringify doesn't hanle Infinity - var foldWidgets = this.foldWidgets; - if (!foldWidgets) - return; // mode doesn't support folding - endRow = endRow || this.getLength(); - startRow = startRow || 0; - for (var row = startRow; row < endRow; row++) { - if (foldWidgets[row] == null) - foldWidgets[row] = this.getFoldWidget(row); - if (foldWidgets[row] != "start") - continue; - if (test && !test(row)) - continue; - var range = this.getFoldWidgetRange(row); - if (range && range.isMultiLine() - && range.end.row <= endRow - && range.start.row >= startRow) { - row = range.end.row; - range.collapseChildren = depth; - this.addFold("...", range); + else { + el.style.top = (dims.top - (rootRect ? rootRect.top : 0)) + "px"; + el.style.bottom = ""; + popup.isTopdown = true; } - } - }; - this.foldToLevel = function (level) { - this.foldAll(); - while (level-- > 0) - this.unfold(null, false); - }; - this.foldAllComments = function () { - var session = this; - this.foldAll(null, null, null, function (row) { - var tokens = session.getTokens(row); - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (token.type == "text" && /^\s+$/.test(token.value)) - continue; - if (/comment/.test(token.type)) - return true; - return false; + var left = pos.left; + if (left + el.offsetWidth > screenWidth) + left = screenWidth - el.offsetWidth; + el.style.left = (left - (rootRect ? rootRect.left : 0)) + "px"; + el.style.right = ""; + if (!popup.isOpen) { + popup.isOpen = true; + this._signal("show"); + lastMouseEvent = null; } - }); - }; - this.$foldStyles = { - "manual": 1, - "markbegin": 1, - "markbeginend": 1 - }; - this.$foldStyle = "markbegin"; - this.setFoldStyle = function (style) { - if (!this.$foldStyles[style]) - throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); - if (this.$foldStyle == style) - return; - this.$foldStyle = style; - if (style == "manual") - this.unfold(); - var mode = this.$foldMode; - this.$setFolding(null); - this.$setFolding(mode); - }; - this.$setFolding = function (foldMode) { - if (this.$foldMode == foldMode) - return; - this.$foldMode = foldMode; - this.off('change', this.$updateFoldWidgets); - this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); - this._signal("changeAnnotation"); - if (!foldMode || this.$foldStyle == "manual") { - this.foldWidgets = null; - return; - } - this.foldWidgets = []; - this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); - this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); - this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); - this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); - this.on('change', this.$updateFoldWidgets); - this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); - }; - this.getParentFoldRangeData = function (row, ignoreCurrent) { - var fw = this.foldWidgets; - if (!fw || (ignoreCurrent && fw[row])) - return {}; - var i = row - 1, firstRange; - while (i >= 0) { - var c = fw[i]; - if (c == null) - c = fw[i] = this.getFoldWidget(i); - if (c == "start") { - var range = this.getFoldWidgetRange(i); - if (!firstRange) - firstRange = range; - if (range && range.end.row >= row) + popup.anchorPos = pos; + popup.anchor = anchor; + return true; + }; + popup.show = function (pos, lineHeight, topdownOnly) { + this.tryShow(pos, lineHeight, topdownOnly ? "bottom" : undefined, true); + }; + popup.goTo = function (where) { + var row = this.getRow(); + var max = this.session.getLength() - 1; + switch (where) { + case "up": + row = row <= 0 ? max : row - 1; + break; + case "down": + row = row >= max ? -1 : row + 1; + break; + case "start": + row = 0; + break; + case "end": + row = max; break; } - i--; - } - return { - range: i !== -1 && range, - firstRange: firstRange + this.setRow(row); }; - }; - this.onFoldWidgetClick = function (row, e) { - if (e instanceof MouseEvent) - e = e.domEvent; - var options = { - children: e.shiftKey, - all: e.ctrlKey || e.metaKey, - siblings: e.altKey + popup.getTextLeftOffset = function () { + return this.$borderSize + this.renderer.$padding + this.$imageSize; }; - var range = this.$toggleFoldWidget(row, options); - if (!range) { - var el = (e.target || e.srcElement); - if (el && /ace_fold-widget/.test(el.className)) - el.className += " ace_invalid"; - } - }; - this.$toggleFoldWidget = function (row, options) { - if (!this.getFoldWidget) - return; - var type = this.getFoldWidget(row); - var line = this.getLine(row); - var dir = type === "end" ? -1 : 1; - var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); - if (fold) { - if (options.children || options.all) - this.removeFold(fold); - else - this.expandFold(fold); - return fold; - } - var range = this.getFoldWidgetRange(row, true); - if (range && !range.isMultiLine()) { - fold = this.getFoldAt(range.start.row, range.start.column, 1); - if (fold && range.isEqual(fold.range)) { - this.removeFold(fold); - return fold; - } - } - if (options.siblings) { - var data = this.getParentFoldRangeData(row); - if (data.range) { - var startRow = data.range.start.row + 1; - var endRow = data.range.end.row; - } - this.foldAll(startRow, endRow, options.all ? 10000 : 0); - } - else if (options.children) { - endRow = range ? range.end.row : this.getLength(); - this.foldAll(row + 1, endRow, options.all ? 10000 : 0); - } - else if (range) { - if (options.all) - range.collapseChildren = 10000; - this.addFold("...", range); - } - return range; - }; - this.toggleFoldWidget = function (toggleParent) { - var row = this.selection.getCursor().row; - row = this.getRowFoldStart(row); - var range = this.$toggleFoldWidget(row, {}); - if (range) - return; - var data = this.getParentFoldRangeData(row, true); - range = data.range || data.firstRange; - if (range) { - row = range.start.row; - var fold = this.getFoldAt(row, this.getLine(row).length, 1); - if (fold) { - this.removeFold(fold); - } - else { - this.addFold("...", range); - } - } - }; - this.updateFoldWidgets = function (delta) { - var firstRow = delta.start.row; - var len = delta.end.row - firstRow; - if (len === 0) { - this.foldWidgets[firstRow] = null; - } - else if (delta.action == 'remove') { - this.foldWidgets.splice(firstRow, len + 1, null); - } - else { - var args = Array(len + 1); - args.unshift(firstRow, 1); - this.foldWidgets.splice.apply(this.foldWidgets, args); - } - }; - this.tokenizerUpdateFoldWidgets = function (e) { - var rows = e.data; - if (rows.first != rows.last) { - if (this.foldWidgets.length > rows.first) - this.foldWidgets.splice(rows.first, this.foldWidgets.length); - } - }; -} -exports.Folding = Folding; - -}); - -ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(require, exports, module){"use strict"; -var TokenIterator = require("../token_iterator").TokenIterator; -var Range = require("../range").Range; -function BracketMatch() { - this.findMatchingBracket = function (position, chr) { - if (position.column == 0) - return null; - var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1); - if (charBeforeCursor == "") - return null; - var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); - if (!match) - return null; - if (match[1]) - return this.$findClosingBracket(match[1], position); - else - return this.$findOpeningBracket(match[2], position); - }; - this.getBracketRange = function (pos) { - var line = this.getLine(pos.row); - var before = true, range; - var chr = line.charAt(pos.column - 1); - var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); - if (!match) { - chr = line.charAt(pos.column); - pos = { row: pos.row, column: pos.column + 1 }; - match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); - before = false; - } - if (!match) - return null; - if (match[1]) { - var bracketPos = this.$findClosingBracket(match[1], pos); - if (!bracketPos) - return null; - range = Range.fromPoints(pos, bracketPos); - if (!before) { - range.end.column++; - range.start.column--; - } - range.cursor = range.end; - } - else { - var bracketPos = this.$findOpeningBracket(match[2], pos); - if (!bracketPos) - return null; - range = Range.fromPoints(bracketPos, pos); - if (!before) { - range.start.column++; - range.end.column--; - } - range.cursor = range.start; - } - return range; - }; - this.getMatchingBracketRanges = function (pos, isBackwards) { - var line = this.getLine(pos.row); - var bracketsRegExp = /([\(\[\{])|([\)\]\}])/; - var chr = !isBackwards && line.charAt(pos.column - 1); - var match = chr && chr.match(bracketsRegExp); - if (!match) { - chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column); - pos = { - row: pos.row, - column: pos.column + 1 - }; - match = chr && chr.match(bracketsRegExp); - } - if (!match) - return null; - var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column); - var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos) - : this.$findOpeningBracket(match[2], pos); - if (!bracketPos) - return [startRange]; - var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1); - return [startRange, endRange]; - }; - this.$brackets = { - ")": "(", - "(": ")", - "]": "[", - "[": "]", - "{": "}", - "}": "{", - "<": ">", - ">": "<" - }; - this.$findOpeningBracket = function (bracket, position, typeRe) { - var openBracket = this.$brackets[bracket]; - var depth = 1; - var iterator = new TokenIterator(this, position.row, position.column); - var token = iterator.getCurrentToken(); - if (!token) - token = iterator.stepForward(); - if (!token) - return; - if (!typeRe) { - typeRe = new RegExp("(\\.?" + - token.type.replace(".", "\\.").replace("rparen", ".paren") - .replace(/\b(?:end)\b/, "(?:start|begin|end)") - .replace(/-close\b/, "-(close|open)") - + ")+"); - } - var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; - var value = token.value; - while (true) { - while (valueIndex >= 0) { - var chr = value.charAt(valueIndex); - if (chr == openBracket) { - depth -= 1; - if (depth == 0) { - return { row: iterator.getCurrentTokenRow(), - column: valueIndex + iterator.getCurrentTokenColumn() }; + popup.$imageSize = 0; + popup.$borderSize = 1; + return popup; + } + return AcePopup; +}()); +dom.importCssString("\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n background-color: #CAD6FA;\n z-index: 1;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n background-color: #3a674e;\n}\n.ace_editor.ace_autocomplete .ace_line-hover {\n border: 1px solid #abbffe;\n margin-top: -1px;\n background: rgba(233,233,253,0.4);\n position: absolute;\n z-index: 2;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\n border: 1px solid rgba(109, 150, 13, 0.8);\n background: rgba(58, 103, 78, 0.62);\n}\n.ace_completion-meta {\n opacity: 0.5;\n margin-left: 0.9em;\n}\n.ace_completion-message {\n margin-left: 0.9em;\n color: blue;\n}\n.ace_editor.ace_autocomplete .ace_completion-highlight{\n color: #2d69c7;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\n color: #93ca12;\n}\n.ace_editor.ace_autocomplete {\n width: 300px;\n z-index: 200000;\n border: 1px lightgray solid;\n position: absolute;\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n line-height: 1.4;\n background: #fefefe;\n color: #111;\n}\n.ace_dark.ace_editor.ace_autocomplete {\n border: 1px #484747 solid;\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\n line-height: 1.4;\n background: #25282c;\n color: #c1c1c1;\n}\n.ace_autocomplete .ace_text-layer {\n width: calc(100% - 8px);\n}\n.ace_autocomplete .ace_line {\n display: flex;\n align-items: center;\n}\n.ace_autocomplete .ace_line > * {\n min-width: 0;\n flex: 0 0 auto;\n}\n.ace_autocomplete .ace_line .ace_ {\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ace_autocomplete .ace_completion-spacer {\n flex: 1;\n}\n.ace_autocomplete.ace_loading:after {\n content: \"\";\n position: absolute;\n top: 0px;\n height: 2px;\n width: 8%;\n background: blue;\n z-index: 100;\n animation: ace_progress 3s infinite linear;\n animation-delay: 300ms;\n transform: translateX(-100%) scaleX(1);\n}\n@keyframes ace_progress {\n 0% { transform: translateX(-100%) scaleX(1) }\n 50% { transform: translateX(625%) scaleX(2) } \n 100% { transform: translateX(1500%) scaleX(3) } \n}\n@media (prefers-reduced-motion) {\n .ace_autocomplete.ace_loading:after {\n transform: translateX(625%) scaleX(2);\n animation: none;\n }\n}\n", "autocompletion.css", false); +exports.AcePopup = AcePopup; +exports.$singleLineEditor = $singleLineEditor; +exports.getAriaId = getAriaId; + +}); + +ace.define("ace/autocomplete/inline_screenreader",["require","exports","module"], function(require, exports, module){"use strict"; +var AceInlineScreenReader = /** @class */ (function () { + function AceInlineScreenReader(editor) { + this.editor = editor; + this.screenReaderDiv = document.createElement("div"); + this.screenReaderDiv.classList.add("ace_screenreader-only"); + this.editor.container.appendChild(this.screenReaderDiv); + } + AceInlineScreenReader.prototype.setScreenReaderContent = function (content) { + if (!this.popup && this.editor.completer && /**@type{import("../autocomplete").Autocomplete}*/ (this.editor.completer).popup) { + this.popup = /**@type{import("../autocomplete").Autocomplete}*/ (this.editor.completer).popup; + this.popup.renderer.on("afterRender", function () { + var row = this.popup.getRow(); + var t = this.popup.renderer.$textLayer; + var selected = t.element.childNodes[row - t.config.firstRow]; + if (selected) { + var idString = "doc-tooltip "; + for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) { + idString += "ace-inline-screenreader-line-".concat(lineIndex, " "); } + selected.setAttribute("aria-describedby", idString); } - else if (chr == bracket) { - depth += 1; - } - valueIndex -= 1; - } - do { - token = iterator.stepBackward(); - } while (token && !typeRe.test(token.type)); - if (token == null) - break; - value = token.value; - valueIndex = value.length - 1; + }.bind(this)); } - return null; - }; - this.$findClosingBracket = function (bracket, position, typeRe) { - var closingBracket = this.$brackets[bracket]; - var depth = 1; - var iterator = new TokenIterator(this, position.row, position.column); - var token = iterator.getCurrentToken(); - if (!token) - token = iterator.stepForward(); - if (!token) - return; - if (!typeRe) { - typeRe = new RegExp("(\\.?" + - token.type.replace(".", "\\.").replace("lparen", ".paren") - .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)") - .replace(/-open\b/, "-(close|open)") - + ")+"); + while (this.screenReaderDiv.firstChild) { + this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild); } - var valueIndex = position.column - iterator.getCurrentTokenColumn(); - while (true) { - var value = token.value; - var valueLength = value.length; - while (valueIndex < valueLength) { - var chr = value.charAt(valueIndex); - if (chr == closingBracket) { - depth -= 1; - if (depth == 0) { - return { row: iterator.getCurrentTokenRow(), - column: valueIndex + iterator.getCurrentTokenColumn() }; - } - } - else if (chr == bracket) { - depth += 1; - } - valueIndex += 1; - } - do { - token = iterator.stepForward(); - } while (token && !typeRe.test(token.type)); - if (token == null) - break; - valueIndex = 0; + this._lines = content.split(/\r\n|\r|\n/); + var codeElement = this.createCodeBlock(); + this.screenReaderDiv.appendChild(codeElement); + }; + AceInlineScreenReader.prototype.destroy = function () { + this.screenReaderDiv.remove(); + }; + AceInlineScreenReader.prototype.createCodeBlock = function () { + var container = document.createElement("pre"); + container.setAttribute("id", "ace-inline-screenreader"); + for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) { + var codeElement = document.createElement("code"); + codeElement.setAttribute("id", "ace-inline-screenreader-line-".concat(lineIndex)); + var line = document.createTextNode(this._lines[lineIndex]); + codeElement.appendChild(line); + container.appendChild(codeElement); } - return null; + return container; }; - this.getMatchingTags = function (pos) { - var iterator = new TokenIterator(this, pos.row, pos.column); - var token = this.$findTagName(iterator); - if (!token) - return; - var prevToken = iterator.stepBackward(); - if (prevToken.value === '<') { - return this.$findClosingTag(iterator, token); + return AceInlineScreenReader; +}()); +exports.AceInlineScreenReader = AceInlineScreenReader; + +}); + +ace.define("ace/autocomplete/inline",["require","exports","module","ace/snippets","ace/autocomplete/inline_screenreader"], function(require, exports, module){"use strict"; +var snippetManager = require("../snippets").snippetManager; +var AceInlineScreenReader = require("./inline_screenreader").AceInlineScreenReader; +var AceInline = /** @class */ (function () { + function AceInline() { + this.editor = null; + } + AceInline.prototype.show = function (editor, completion, prefix) { + prefix = prefix || ""; + if (editor && this.editor && this.editor !== editor) { + this.hide(); + this.editor = null; + this.inlineScreenReader = null; + } + if (!editor || !completion) { + return false; + } + if (!this.inlineScreenReader) { + this.inlineScreenReader = new AceInlineScreenReader(editor); + } + var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value; + if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) { + return false; + } + this.editor = editor; + this.inlineScreenReader.setScreenReaderContent(displayText); + displayText = displayText.slice(prefix.length); + if (displayText === "") { + editor.removeGhostText(); } else { - return this.$findOpeningTag(iterator, token); + editor.setGhostText(displayText); } + return true; }; - this.$findTagName = function (iterator) { - var token = iterator.getCurrentToken(); - var found = false; - var backward = false; - if (token && token.type.indexOf('tag-name') === -1) { - do { - if (backward) - token = iterator.stepBackward(); - else - token = iterator.stepForward(); - if (token) { - if (token.value === "/>") { - backward = true; - } - else if (token.type.indexOf('tag-name') !== -1) { - found = true; - } - } - } while (token && !found); + AceInline.prototype.isOpen = function () { + if (!this.editor) { + return false; } - return token; + return !!this.editor.renderer.$ghostText; }; - this.$findClosingTag = function (iterator, token) { - var prevToken; - var currentTag = token.value; - var tag = token.value; - var depth = 0; - var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); - token = iterator.stepForward(); - var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length); - var foundOpenTagEnd = false; - do { - prevToken = token; - if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) { - var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>` - foundOpenTagEnd = true; - } - token = iterator.stepForward(); - if (token) { - if (token.value === '>' && !foundOpenTagEnd) { - var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>` - foundOpenTagEnd = true; - } - if (token.type.indexOf('tag-name') !== -1) { - currentTag = token.value; - if (tag === currentTag) { - if (prevToken.value === '<') { - depth++; - } - else if (prevToken.value === '') { - var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > - } - else { - return; - } - } - } - } - } - else if (tag === currentTag && token.value === '/>') { // self-closing tag - depth--; - if (depth < 0) { //found self-closing tag end - var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); - var closeTagName = closeTagStart; - var closeTagEnd = closeTagName; - var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1); - } - } - } - } while (token && depth >= 0); - if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) { - return { - openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column), - closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column), - openTagName: openTagName, - closeTagName: closeTagName - }; + AceInline.prototype.hide = function () { + if (!this.editor) { + return false; } + this.editor.removeGhostText(); + return true; }; - this.$findOpeningTag = function (iterator, token) { - var prevToken = iterator.getCurrentToken(); - var tag = token.value; - var depth = 0; - var startRow = iterator.getCurrentTokenRow(); - var startColumn = iterator.getCurrentTokenColumn(); - var endColumn = startColumn + 2; - var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for ") - return; - var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > - iterator.stepBackward(); - iterator.stepBackward(); - do { - token = prevToken; - startRow = iterator.getCurrentTokenRow(); - startColumn = iterator.getCurrentTokenColumn(); - endColumn = startColumn + token.value.length; - prevToken = iterator.stepBackward(); - if (token) { - if (token.type.indexOf('tag-name') !== -1) { - if (tag === token.value) { - if (prevToken.value === '<') { - depth++; - if (depth > 0) { //found opening tag - var openTagName = new Range(startRow, startColumn, startRow, endColumn); - var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for < - do { - token = iterator.stepForward(); - } while (token && token.value !== '>'); - var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > - } - } - else if (prevToken.value === '') { // self-closing tag - var stepCount = 0; - var tmpToken = prevToken; - while (tmpToken) { - if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) { - depth--; - break; - } - else if (tmpToken.value === '<') { - break; - } - tmpToken = iterator.stepBackward(); - stepCount++; - } - for (var i = 0; i < stepCount; i++) { - iterator.stepForward(); - } - } - } - } while (prevToken && depth <= 0); - if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) { - return { - openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column), - closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column), - openTagName: openTagName, - closeTagName: closeTagName - }; + AceInline.prototype.destroy = function () { + this.hide(); + this.editor = null; + if (this.inlineScreenReader) { + this.inlineScreenReader.destroy(); + this.inlineScreenReader = null; } }; -} -exports.BracketMatch = BracketMatch; + return AceInline; +}()); +exports.AceInline = AceInline; }); -ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/bidihandler","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/line_widgets","ace/document","ace/background_tokenizer","ace/search_highlight","ace/undomanager","ace/edit_session/folding","ace/edit_session/bracket_match"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); +ace.define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module){"use strict"; +exports.parForEach = function (array, fn, callback) { + var completed = 0; + var arLength = array.length; + if (arLength === 0) + callback(); + for (var i = 0; i < arLength; i++) { + fn(array[i], function (result, err) { + completed++; + if (completed === arLength) + callback(result, err); + }); + } +}; +var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\u2000\u2070-\uFFFF]/; +exports.retrievePrecedingIdentifier = function (text, pos, regex) { + regex = regex || ID_REGEX; + var buf = []; + for (var i = pos - 1; i >= 0; i--) { + if (regex.test(text[i])) + buf.push(text[i]); + else + break; + } + return buf.reverse().join(""); +}; +exports.retrieveFollowingIdentifier = function (text, pos, regex) { + regex = regex || ID_REGEX; + var buf = []; + for (var i = pos; i < text.length; i++) { + if (regex.test(text[i])) + buf.push(text[i]); + else + break; + } + return buf; +}; +exports.getCompletionPrefix = function (editor) { + var pos = editor.getCursorPosition(); + var line = editor.session.getLine(pos.row); + var prefix; + editor.completers.forEach(function (completer) { + if (completer.identifierRegexps) { + completer.identifierRegexps.forEach(function (identifierRegex) { + if (!prefix && identifierRegex) + prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex); + }.bind(this)); + } + }.bind(this)); + return prefix || this.retrievePrecedingIdentifier(line, pos.column); +}; +exports.triggerAutocomplete = function (editor, previousChar) { + var previousChar = previousChar == null + ? editor.session.getPrecedingCharacter() + : previousChar; + return editor.completers.some(function (completer) { + if (completer.triggerCharacters && Array.isArray(completer.triggerCharacters)) { + return completer.triggerCharacters.includes(previousChar); + } + }); +}; + +}); + +ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/inline","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/lang","ace/lib/dom","ace/snippets","ace/config","ace/lib/event","ace/lib/scroll"], function(require, exports, module){"use strict"; +var HashHandler = require("./keyboard/hash_handler").HashHandler; +var AcePopup = require("./autocomplete/popup").AcePopup; +var AceInline = require("./autocomplete/inline").AceInline; +var getAriaId = require("./autocomplete/popup").getAriaId; +var util = require("./autocomplete/util"); var lang = require("./lib/lang"); -var BidiHandler = require("./bidihandler").BidiHandler; +var dom = require("./lib/dom"); +var snippetManager = require("./snippets").snippetManager; var config = require("./config"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Selection = require("./selection").Selection; -var TextMode = require("./mode/text").Mode; -var Range = require("./range").Range; -var LineWidgets = require("./line_widgets").LineWidgets; -var Document = require("./document").Document; -var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer; -var SearchHighlight = require("./search_highlight").SearchHighlight; -var UndoManager = require("./undomanager").UndoManager; -var EditSession = /** @class */ (function () { - function EditSession(text, mode) { this.doc; - this.$breakpoints = []; - this.$decorations = []; - this.$frontMarkers = {}; - this.$backMarkers = {}; - this.$markerId = 1; - this.$undoSelect = true; - this.$editor = null; - this.prevOp = {}; - this.$foldData = []; - this.id = "session" + (++EditSession.$uid); - this.$foldData.toString = function () { - return this.join("\n"); - }; - this.$gutterCustomWidgets = {}; - this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this); - var _self = this; - this.bgTokenizer.on("update", function (e) { - _self._signal("tokenizerUpdate", e); - }); - this.on("changeFold", this.onChangeFold.bind(this)); - this.$onChange = this.onChange.bind(this); - if (typeof text != "object" || !text.getLine) - text = new Document(/**@type{string}*/ (text)); - this.setDocument(text); - this.selection = new Selection(this); - this.$onSelectionChange = this.onSelectionChange.bind(this); - this.selection.on("changeSelection", this.$onSelectionChange); - this.selection.on("changeCursor", this.$onSelectionChange); - this.$bidiHandler = new BidiHandler(this); - config.resetOptions(this); - this.setMode(mode); - config._signal("session", this); - this.destroyed = false; - this.$initOperationListeners(); +var event = require("./lib/event"); +var preventParentScroll = require("./lib/scroll").preventParentScroll; +var destroyCompleter = function (e, editor) { + editor.completer && editor.completer.destroy(); +}; +var Autocomplete = /** @class */ (function () { + function Autocomplete() { + this.autoInsert = false; + this.autoSelect = true; + this.autoShown = false; + this.exactMatch = false; + this.inlineEnabled = false; + this.keyboardHandler = new HashHandler(); + this.keyboardHandler.bindKeys(this.commands); + this.parentNode = null; + this.setSelectOnHover = false; + this.hasSeen = new Set(); + this.showLoadingState = false; + this.stickySelectionDelay = 500; + this.blurListener = this.blurListener.bind(this); + this.changeListener = this.changeListener.bind(this); + this.mousedownListener = this.mousedownListener.bind(this); + this.mousewheelListener = this.mousewheelListener.bind(this); + this.onLayoutChange = this.onLayoutChange.bind(this); + this.changeTimer = lang.delayedCall(function () { + this.updateCompletions(true); + }.bind(this)); + this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50); + this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50); + this.stickySelectionTimer = lang.delayedCall(function () { + this.stickySelection = true; + }.bind(this), this.stickySelectionDelay); + this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () { + var initialPosition = this.completionProvider && this.completionProvider.initialPosition; + if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0) + return; + this.completions = new FilteredList(Autocomplete.completionsForLoading); + this.openPopup(this.editor, initialPosition.prefix, false); + this.popup.renderer.setStyle("ace_loading", true); + }.bind(this), this.stickySelectionDelay); } - EditSession.prototype.$initOperationListeners = function () { - var _this = this; - this.curOp = null; - this.on("change", function () { - if (!_this.curOp) { - _this.startOperation(); - _this.curOp.selectionBefore = _this.$lastSel; - } - _this.curOp.docChanged = true; - }, true); - this.on("changeSelection", function () { - if (!_this.curOp) { - _this.startOperation(); - _this.curOp.selectionBefore = _this.$lastSel; - } - _this.curOp.selectionChanged = true; - }, true); - this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true)); + Object.defineProperty(Autocomplete, "completionsForLoading", { + get: function () { + return [{ + caption: config.nls("autocomplete.loading", "Loading..."), + value: "" + }]; + }, + enumerable: false, + configurable: true + }); + Autocomplete.prototype.$init = function () { + this.popup = new AcePopup(this.parentNode || document.body || document.documentElement); + this.popup.on("click", function (e) { + this.insertMatch(); + e.stop(); + }.bind(this)); + this.popup.focus = this.editor.focus.bind(this.editor); + this.popup.on("show", this.$onPopupShow.bind(this)); + this.popup.on("hide", this.$onHidePopup.bind(this)); + this.popup.on("select", this.$onPopupChange.bind(this)); + event.addListener(this.popup.container, "mouseout", this.mouseOutListener.bind(this)); + this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null)); + this.popup.renderer.on("afterRender", this.$onPopupRender.bind(this)); + return this.popup; }; - EditSession.prototype.startOperation = function (commandEvent) { - if (this.curOp) { - if (!commandEvent || this.curOp.command) { - return; - } - this.prevOp = this.curOp; + Autocomplete.prototype.$initInline = function () { + if (!this.inlineEnabled || this.inlineRenderer) + return; + this.inlineRenderer = new AceInline(); + return this.inlineRenderer; + }; + Autocomplete.prototype.getPopup = function () { + return this.popup || this.$init(); + }; + Autocomplete.prototype.$onHidePopup = function () { + if (this.inlineRenderer) { + this.inlineRenderer.hide(); } - if (!commandEvent) { - commandEvent = {}; + this.hideDocTooltip(); + this.stickySelectionTimer.cancel(); + this.popupTimer.cancel(); + this.stickySelection = false; + }; + Autocomplete.prototype.$seen = function (completion) { + if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === "function") { + completion.completer.onSeen(this.editor, completion); + this.hasSeen.add(completion); } - this.$operationResetTimer.schedule(); - this.curOp = { - command: commandEvent.command || {}, - args: commandEvent.args - }; - this.curOp.selectionBefore = this.selection.toJSON(); - this._signal("startOperation", commandEvent); }; - EditSession.prototype.endOperation = function (e) { - if (this.curOp) { - if (e && e.returnValue === false) { - this.curOp = null; - this._signal("endOperation", e); + Autocomplete.prototype.$onPopupChange = function (hide) { + if (this.inlineRenderer && this.inlineEnabled) { + var completion = hide ? null : this.popup.getData(this.popup.getRow()); + this.$updateGhostText(completion); + if (this.popup.isMouseOver && this.setSelectOnHover) { + this.tooltipTimer.call(null, null); return; } - if (e == true && this.curOp.command && this.curOp.command.name == "mouse") { - return; + this.popupTimer.schedule(); + this.tooltipTimer.schedule(); + } + else { + this.popupTimer.call(null, null); + this.tooltipTimer.call(null, null); + } + }; + Autocomplete.prototype.$updateGhostText = function (completion) { + var row = this.base.row; + var column = this.base.column; + var cursorColumn = this.editor.getCursorPosition().column; + var prefix = this.editor.session.getLine(row).slice(column, cursorColumn); + if (!this.inlineRenderer.show(this.editor, completion, prefix)) { + this.inlineRenderer.hide(); + } + else { + this.$seen(completion); + } + }; + Autocomplete.prototype.$onPopupRender = function () { + var inlineEnabled = this.inlineRenderer && this.inlineEnabled; + if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) { + for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) { + var completion = this.popup.getData(i); + if (completion && (!inlineEnabled || completion.hideInlinePreview)) { + this.$seen(completion); + } } - var currentSelection = this.selection.toJSON(); - this.curOp.selectionAfter = currentSelection; - this.$lastSel = this.selection.toJSON(); - this.getUndoManager().addSelection(currentSelection); - this._signal("beforeEndOperation"); - this.prevOp = this.curOp; - this.curOp = null; - this._signal("endOperation", e); } }; - EditSession.prototype.setDocument = function (doc) { - if (this.doc) - this.doc.off("change", this.$onChange); - this.doc = doc; - doc.on("change", this.$onChange, true); - this.bgTokenizer.setDocument(this.getDocument()); - this.resetCaches(); + Autocomplete.prototype.$onPopupShow = function (hide) { + this.$onPopupChange(hide); + this.stickySelection = false; + if (this.stickySelectionDelay >= 0) + this.stickySelectionTimer.schedule(this.stickySelectionDelay); }; - EditSession.prototype.getDocument = function () { - return this.doc; + Autocomplete.prototype.observeLayoutChanges = function () { + if (this.$elements || !this.editor) + return; + window.addEventListener("resize", this.onLayoutChange, { passive: true }); + window.addEventListener("wheel", this.mousewheelListener); + var el = this.editor.container.parentNode; + var elements = []; + while (el) { + elements.push(el); + el.addEventListener("scroll", this.onLayoutChange, { passive: true }); + el = el.parentNode; + } + this.$elements = elements; }; - Object.defineProperty(EditSession.prototype, "widgetManager", { - get: function () { - var widgetManager = new LineWidgets(this); - this.widgetManager = widgetManager; - if (this.$editor) - widgetManager.attach(this.$editor); - return widgetManager; - }, - set: function (value) { - Object.defineProperty(this, "widgetManager", { - writable: true, - enumerable: true, - configurable: true, - value: value, - }); - }, - enumerable: false, - configurable: true - }); - EditSession.prototype.$resetRowCache = function (docRow) { - if (!docRow) { - this.$docRowCache = []; - this.$screenRowCache = []; + Autocomplete.prototype.unObserveLayoutChanges = function () { + var _this = this; + window.removeEventListener("resize", this.onLayoutChange, { passive: true }); + window.removeEventListener("wheel", this.mousewheelListener); + this.$elements && this.$elements.forEach(function (el) { + el.removeEventListener("scroll", _this.onLayoutChange, { passive: true }); + }); + this.$elements = null; + }; + Autocomplete.prototype.onLayoutChange = function () { + if (!this.popup.isOpen) + return this.unObserveLayoutChanges(); + this.$updatePopupPosition(); + this.updateDocTooltip(); + }; + Autocomplete.prototype.$updatePopupPosition = function () { + var editor = this.editor; + var renderer = editor.renderer; + var lineHeight = renderer.layerConfig.lineHeight; + var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); + pos.left -= this.popup.getTextLeftOffset(); + var rect = editor.container.getBoundingClientRect(); + pos.top += rect.top - renderer.layerConfig.offset; + pos.left += rect.left - editor.renderer.scrollLeft; + pos.left += renderer.gutterWidth; + var posGhostText = { + top: pos.top, + left: pos.left + }; + if (renderer.$ghostText && renderer.$ghostTextWidget) { + if (this.base.row === renderer.$ghostText.position.row) { + posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight; + } + } + var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight; + var lowestPosition = editorContainerBottom < posGhostText.top ? + { top: editorContainerBottom, left: posGhostText.left } : + posGhostText; + if (this.popup.tryShow(lowestPosition, lineHeight, "bottom")) { return; } - var l = this.$docRowCache.length; - var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1; - if (l > i) { - this.$docRowCache.splice(i, l); - this.$screenRowCache.splice(i, l); + if (this.popup.tryShow(pos, lineHeight, "top")) { + return; } + this.popup.show(pos, lineHeight); }; - EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) { - var low = 0; - var hi = cacheArray.length - 1; - while (low <= hi) { - var mid = (low + hi) >> 1; - var c = cacheArray[mid]; - if (val > c) - low = mid + 1; - else if (val < c) - hi = mid - 1; - else - return mid; + Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) { + this.$firstOpenTimer.cancel(); + if (!this.popup) + this.$init(); + if (this.inlineEnabled && !this.inlineRenderer) + this.$initInline(); + this.popup.autoSelect = this.autoSelect; + this.popup.setSelectOnHover(this.setSelectOnHover); + var oldRow = this.popup.getRow(); + var previousSelectedItem = this.popup.data[oldRow]; + this.popup.setData(this.completions.filtered, this.completions.filterText); + if (this.editor.textInput.setAriaOptions) { + this.editor.textInput.setAriaOptions({ + activeDescendant: getAriaId(this.popup.getRow()), + inline: this.inlineEnabled + }); } - return low - 1; + editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + var newRow; + if (this.stickySelection) + newRow = this.popup.data.indexOf(previousSelectedItem); + if (!newRow || newRow === -1) + newRow = 0; + this.popup.setRow(this.autoSelect ? newRow : -1); + if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow]) + this.$onPopupChange(); + var inlineEnabled = this.inlineRenderer && this.inlineEnabled; + if (newRow === oldRow && inlineEnabled) { + var completion = this.popup.getData(this.popup.getRow()); + this.$updateGhostText(completion); + } + if (!keepPopupPosition) { + this.popup.setTheme(editor.getTheme()); + this.popup.setFontSize(editor.getFontSize()); + this.$updatePopupPosition(); + if (this.tooltipNode) { + this.updateDocTooltip(); + } + } + this.changeTimer.cancel(); + this.observeLayoutChanges(); }; - EditSession.prototype.resetCaches = function () { - this.$modified = true; - this.$wrapData = []; - this.$rowLengthCache = []; - this.$resetRowCache(0); - if (!this.destroyed) - this.bgTokenizer.start(0); + Autocomplete.prototype.detach = function () { + if (this.editor) { + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); + this.editor.off("changeSelection", this.changeListener); + this.editor.off("blur", this.blurListener); + this.editor.off("mousedown", this.mousedownListener); + this.editor.off("mousewheel", this.mousewheelListener); + } + this.$firstOpenTimer.cancel(); + this.changeTimer.cancel(); + this.hideDocTooltip(); + if (this.completionProvider) { + this.completionProvider.detach(); + } + if (this.popup && this.popup.isOpen) + this.popup.hide(); + if (this.popup && this.popup.renderer) { + this.popup.renderer.off("afterRender", this.$onPopupRender); + } + if (this.base) + this.base.detach(); + this.activated = false; + this.completionProvider = this.completions = this.base = null; + this.unObserveLayoutChanges(); }; - EditSession.prototype.onChangeFold = function (e) { - var fold = e.data; - this.$resetRowCache(fold.start.row); + Autocomplete.prototype.changeListener = function (e) { + var cursor = this.editor.selection.lead; + if (cursor.row != this.base.row || cursor.column < this.base.column) { + this.detach(); + } + if (this.activated) + this.changeTimer.schedule(); + else + this.detach(); }; - EditSession.prototype.onChange = function (delta) { - this.$modified = true; - this.$bidiHandler.onChange(delta); - this.$resetRowCache(delta.start.row); - var removedFolds = this.$updateInternalDataOnChange(delta); - if (!this.$fromUndo && this.$undoManager) { - if (removedFolds && removedFolds.length) { - this.$undoManager.add({ - action: "removeFolds", - folds: removedFolds - }, this.mergeUndoDeltas); - this.mergeUndoDeltas = true; - } - this.$undoManager.add(delta, this.mergeUndoDeltas); - this.mergeUndoDeltas = true; - this.$informUndoManager.schedule(); + Autocomplete.prototype.blurListener = function (e) { + var el = document.activeElement; + var text = this.editor.textInput.getElement(); + var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget); + var container = this.popup && this.popup.container; + if (el != text && el.parentNode != container && !fromTooltip + && el != this.tooltipNode && e.relatedTarget != text) { + this.detach(); } - this.bgTokenizer.$updateOnChange(delta); - this._signal("change", delta); }; - EditSession.prototype.onSelectionChange = function () { - this._signal("changeSelection"); + Autocomplete.prototype.mousedownListener = function (e) { + this.detach(); }; - EditSession.prototype.setValue = function (text) { - this.doc.setValue(text); - this.selection.moveTo(0, 0); - this.$resetRowCache(0); - this.setUndoManager(this.$undoManager); - this.getUndoManager().reset(); + Autocomplete.prototype.mousewheelListener = function (e) { + if (this.popup && !this.popup.isMouseOver) + this.detach(); }; - EditSession.fromJSON = function (session) { - if (typeof session == "string") - session = JSON.parse(session); - var undoManager = new UndoManager(); - undoManager.$undoStack = session.history.undo; - undoManager.$redoStack = session.history.redo; - undoManager.mark = session.history.mark; - undoManager.$rev = session.history.rev; - var editSession = new EditSession(session.value); - session.folds.forEach(function (fold) { - editSession.addFold("...", Range.fromPoints(fold.start, fold.end)); - }); - editSession.setAnnotations(session.annotations); - editSession.setBreakpoints(session.breakpoints); - editSession.setMode(session.mode); - editSession.setScrollLeft(session.scrollLeft); - editSession.setScrollTop(session.scrollTop); - editSession.setUndoManager(undoManager); - editSession.selection.fromJSON(session.selection); - return editSession; + Autocomplete.prototype.mouseOutListener = function (e) { + if (this.popup.isOpen) + this.$updatePopupPosition(); }; - EditSession.prototype.toJSON = function () { - return { - annotations: this.$annotations, - breakpoints: this.$breakpoints, - folds: this.getAllFolds().map(function (fold) { - return fold.range; - }), - history: this.getUndoManager(), - mode: this.$mode.$id, - scrollLeft: this.$scrollLeft, - scrollTop: this.$scrollTop, - selection: this.selection.toJSON(), - value: this.doc.getValue() - }; + Autocomplete.prototype.goTo = function (where) { + this.popup.goTo(where); }; - EditSession.prototype.toString = function () { - return this.doc.getValue(); + Autocomplete.prototype.insertMatch = function (data, options) { + if (!data) + data = this.popup.getData(this.popup.getRow()); + if (!data) + return false; + if (data.value === "") // Explicitly given nothing to insert, e.g. "No suggestion state" + return this.detach(); + var completions = this.completions; + var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options); + if (this.completions == completions) + this.detach(); + return result; }; - EditSession.prototype.getSelection = function () { - return this.selection; + Autocomplete.prototype.showPopup = function (editor, options) { + if (this.editor) + this.detach(); + this.activated = true; + this.editor = editor; + if (editor.completer != this) { + if (editor.completer) + editor.completer.detach(); + editor.completer = this; + } + editor.on("changeSelection", this.changeListener); + editor.on("blur", this.blurListener); + editor.on("mousedown", this.mousedownListener); + editor.on("mousewheel", this.mousewheelListener); + this.updateCompletions(false, options); }; - EditSession.prototype.getState = function (row) { - return this.bgTokenizer.getState(row); + Autocomplete.prototype.getCompletionProvider = function (initialPosition) { + if (!this.completionProvider) + this.completionProvider = new CompletionProvider(initialPosition); + return this.completionProvider; }; - EditSession.prototype.getTokens = function (row) { - return this.bgTokenizer.getTokens(row); + Autocomplete.prototype.gatherCompletions = function (editor, callback) { + return this.getCompletionProvider().gatherCompletions(editor, callback); }; - EditSession.prototype.getTokenAt = function (row, column) { - var tokens = this.bgTokenizer.getTokens(row); - var token, c = 0; - if (column == null) { - var i = tokens.length - 1; - c = this.getLine(row).length; + Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) { + if (keepPopupPosition && this.base && this.completions) { + var pos = this.editor.getCursorPosition(); + var prefix = this.editor.session.getTextRange({ start: this.base, end: pos }); + if (prefix == this.completions.filterText) + return; + this.completions.setFilter(prefix); + if (!this.completions.filtered.length) + return this.detach(); + if (this.completions.filtered.length == 1 + && this.completions.filtered[0].value == prefix + && !this.completions.filtered[0].snippet) + return this.detach(); + this.openPopup(this.editor, prefix, keepPopupPosition); + return; } - else { - for (var i = 0; i < tokens.length; i++) { - c += tokens[i].value.length; - if (c >= column) - break; + if (options && options.matches) { + var pos = this.editor.getSelectionRange().start; + this.base = this.editor.session.doc.createAnchor(pos.row, pos.column); + this.base.$insertRight = true; + this.completions = new FilteredList(options.matches); + this.getCompletionProvider().completions = this.completions; + return this.openPopup(this.editor, "", keepPopupPosition); + } + var session = this.editor.getSession(); + var pos = this.editor.getCursorPosition(); + var prefix = util.getCompletionPrefix(this.editor); + this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length); + this.base.$insertRight = true; + var completionOptions = { + exactMatch: this.exactMatch, + ignoreCaption: this.ignoreCaption + }; + this.getCompletionProvider({ + prefix: prefix, + pos: pos + }).provideCompletions(this.editor, completionOptions, + function (err, completions, finished) { + var filtered = completions.filtered; + var prefix = util.getCompletionPrefix(this.editor); + this.$firstOpenTimer.cancel(); + if (finished) { + if (!filtered.length) { + var emptyMessage = !this.autoShown && this.emptyMessage; + if (typeof emptyMessage == "function") + emptyMessage = this.emptyMessage(prefix); + if (emptyMessage) { + var completionsForEmpty = [{ + caption: emptyMessage, + value: "" + } + ]; + this.completions = new FilteredList(completionsForEmpty); + this.openPopup(this.editor, prefix, keepPopupPosition); + this.popup.renderer.setStyle("ace_loading", false); + this.popup.renderer.setStyle("ace_empty-message", true); + return; + } + return this.detach(); + } + if (filtered.length == 1 && filtered[0].value == prefix + && !filtered[0].snippet) + return this.detach(); + if (this.autoInsert && !this.autoShown && filtered.length == 1) + return this.insertMatch(filtered[0]); + } + this.completions = !finished && this.showLoadingState ? + new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) : + completions; + this.openPopup(this.editor, prefix, keepPopupPosition); + this.popup.renderer.setStyle("ace_empty-message", false); + this.popup.renderer.setStyle("ace_loading", !finished); + }.bind(this)); + if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) { + this.$firstOpenTimer.delay(this.stickySelectionDelay / 2); + } + }; + Autocomplete.prototype.cancelContextMenu = function () { + this.editor.$mouseHandler.cancelContextMenu(); + }; + Autocomplete.prototype.updateDocTooltip = function () { + var popup = this.popup; + var all = this.completions && this.completions.filtered; + var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]); + var doc = null; + if (!selected || !this.editor || !this.popup.isOpen) + return this.hideDocTooltip(); + var completersLength = this.editor.completers.length; + for (var i = 0; i < completersLength; i++) { + var completer = this.editor.completers[i]; + if (completer.getDocTooltip && selected.completerId === completer.id) { + doc = completer.getDocTooltip(selected); + break; } } - token = tokens[i]; - if (!token) - return null; - token.index = i; - token.start = c - token.value.length; - return token; + if (!doc && typeof selected != "string") + doc = selected; + if (typeof doc == "string") + doc = { docText: doc }; + if (!doc || !(doc.docHTML || doc.docText)) + return this.hideDocTooltip(); + this.showDocTooltip(doc); }; - EditSession.prototype.setUndoManager = function (undoManager) { - this.$undoManager = undoManager; - if (this.$informUndoManager) - this.$informUndoManager.cancel(); - if (undoManager) { - var self = this; - undoManager.addSession(this); - this.$syncInformUndoManager = function () { - self.$informUndoManager.cancel(); - self.mergeUndoDeltas = false; - }; - this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); + Autocomplete.prototype.showDocTooltip = function (item) { + if (!this.tooltipNode) { + this.tooltipNode = dom.createElement("div"); + this.tooltipNode.style.margin = "0"; + this.tooltipNode.style.pointerEvents = "auto"; + this.tooltipNode.style.overscrollBehavior = "contain"; + this.tooltipNode.tabIndex = -1; + this.tooltipNode.onblur = this.blurListener.bind(this); + this.tooltipNode.onclick = this.onTooltipClick.bind(this); + this.tooltipNode.id = "doc-tooltip"; + this.tooltipNode.setAttribute("role", "tooltip"); + this.tooltipNode.addEventListener("wheel", preventParentScroll); } - else { - this.$syncInformUndoManager = function () { }; + var theme = this.editor.renderer.theme; + this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " + + (theme.isDark ? "ace_dark " : "") + (theme.cssClass || ""); + var tooltipNode = this.tooltipNode; + if (item.docHTML) { + tooltipNode.innerHTML = item.docHTML; } - }; - EditSession.prototype.markUndoGroup = function () { - if (this.$syncInformUndoManager) - this.$syncInformUndoManager(); - }; - EditSession.prototype.getUndoManager = function () { - return this.$undoManager || this.$defaultUndoManager; - }; - EditSession.prototype.getTabString = function () { - if (this.getUseSoftTabs()) { - return lang.stringRepeat(" ", this.getTabSize()); + else if (item.docText) { + tooltipNode.textContent = item.docText; } - else { - return "\t"; + if (!tooltipNode.parentNode) + this.popup.container.appendChild(this.tooltipNode); + var popup = this.popup; + var rect = popup.container.getBoundingClientRect(); + var targetWidth = 400; + var targetHeight = 300; + var scrollBarSize = popup.renderer.scrollBar.width || 10; + var leftSize = rect.left; + var rightSize = window.innerWidth - rect.right - scrollBarSize; + var topSize = popup.isTopdown ? rect.top : window.innerHeight - scrollBarSize - rect.bottom; + var scores = [ + Math.min(rightSize / targetWidth, 1), + Math.min(leftSize / targetWidth, 1), + Math.min(topSize / targetHeight * 0.9), + ]; + var max = Math.max.apply(Math, scores); + var tooltipStyle = tooltipNode.style; + tooltipStyle.display = "block"; + if (max == scores[0]) { + tooltipStyle.left = (rect.right + 1) + "px"; + tooltipStyle.right = ""; + tooltipStyle.maxWidth = targetWidth * max + "px"; + tooltipStyle.top = rect.top + "px"; + tooltipStyle.bottom = ""; + tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + "px"; } - }; - EditSession.prototype.setUseSoftTabs = function (val) { - this.setOption("useSoftTabs", val); - }; - EditSession.prototype.getUseSoftTabs = function () { - return this.$useSoftTabs && !this.$mode.$indentWithTabs; - }; - EditSession.prototype.setTabSize = function (tabSize) { - this.setOption("tabSize", tabSize); - }; - EditSession.prototype.getTabSize = function () { - return this.$tabSize; - }; - EditSession.prototype.isTabStop = function (position) { - return this.$useSoftTabs && (position.column % this.$tabSize === 0); - }; - EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) { - this.setOption("navigateWithinSoftTabs", navigateWithinSoftTabs); - }; - EditSession.prototype.getNavigateWithinSoftTabs = function () { - return this.$navigateWithinSoftTabs; - }; - EditSession.prototype.setOverwrite = function (overwrite) { - this.setOption("overwrite", overwrite); - }; - EditSession.prototype.getOverwrite = function () { - return this.$overwrite; - }; - EditSession.prototype.toggleOverwrite = function () { - this.setOverwrite(!this.$overwrite); - }; - EditSession.prototype.addGutterDecoration = function (row, className) { - if (!this.$decorations[row]) - this.$decorations[row] = ""; - this.$decorations[row] += " " + className; - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.removeGutterCustomWidget = function (row) { - if (this.$editor) { - this.$editor.renderer.$gutterLayer.$removeCustomWidget(row); + else if (max == scores[1]) { + tooltipStyle.right = window.innerWidth - rect.left + "px"; + tooltipStyle.left = ""; + tooltipStyle.maxWidth = targetWidth * max + "px"; + tooltipStyle.top = rect.top + "px"; + tooltipStyle.bottom = ""; + tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + "px"; } - }; - EditSession.prototype.addGutterCustomWidget = function (row, attributes) { - if (this.$editor) { - this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes); + else if (max == scores[2]) { + tooltipStyle.left = window.innerWidth - rect.left + "px"; + tooltipStyle.maxWidth = Math.min(targetWidth, window.innerWidth) + "px"; + if (popup.isTopdown) { + tooltipStyle.top = rect.bottom + "px"; + tooltipStyle.left = rect.left + "px"; + tooltipStyle.right = ""; + tooltipStyle.bottom = ""; + tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.bottom, targetHeight) + "px"; + } + else { + tooltipStyle.top = popup.container.offsetTop - tooltipNode.offsetHeight + "px"; + tooltipStyle.left = rect.left + "px"; + tooltipStyle.right = ""; + tooltipStyle.bottom = ""; + tooltipStyle.maxHeight = Math.min(popup.container.offsetTop, targetHeight) + "px"; + } } }; - EditSession.prototype.removeGutterDecoration = function (row, className) { - this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.getBreakpoints = function () { - return this.$breakpoints; + Autocomplete.prototype.hideDocTooltip = function () { + this.tooltipTimer.cancel(); + if (!this.tooltipNode) + return; + var el = this.tooltipNode; + if (!this.editor.isFocused() && document.activeElement == el) + this.editor.focus(); + this.tooltipNode = null; + if (el.parentNode) + el.parentNode.removeChild(el); }; - EditSession.prototype.setBreakpoints = function (rows) { - this.$breakpoints = []; - for (var i = 0; i < rows.length; i++) { - this.$breakpoints[rows[i]] = "ace_breakpoint"; + Autocomplete.prototype.onTooltipClick = function (e) { + var a = e.target; + while (a && a != this.tooltipNode) { + if (a.nodeName == "A" && a.href) { + a.rel = "noreferrer"; + a.target = "_blank"; + break; + } + a = a.parentNode; } - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.clearBreakpoints = function () { - this.$breakpoints = []; - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.setBreakpoint = function (row, className) { - if (className === undefined) - className = "ace_breakpoint"; - if (className) - this.$breakpoints[row] = className; - else - delete this.$breakpoints[row]; - this._signal("changeBreakpoint", {}); }; - EditSession.prototype.clearBreakpoint = function (row) { - delete this.$breakpoints[row]; - this._signal("changeBreakpoint", {}); + Autocomplete.prototype.destroy = function () { + this.detach(); + if (this.popup) { + this.popup.destroy(); + var el = this.popup.container; + if (el && el.parentNode) + el.parentNode.removeChild(el); + } + if (this.editor && this.editor.completer == this) { + this.editor.off("destroy", destroyCompleter); + this.editor.completer = null; + } + this.inlineRenderer = this.popup = this.editor = null; }; - EditSession.prototype.addMarker = function (range, clazz, type, inFront) { - var id = this.$markerId++; - var marker = { - range: range, - type: type || "line", - renderer: typeof type == "function" ? type : null, - clazz: clazz, - inFront: !!inFront, - id: id - }; - if (inFront) { - this.$frontMarkers[id] = marker; - this._signal("changeFrontMarker"); + Autocomplete.for = function (editor) { + if (editor.completer instanceof Autocomplete) { + return editor.completer; + } + if (editor.completer) { + editor.completer.destroy(); + editor.completer = null; + } + if (config.get("sharedPopups")) { + if (!Autocomplete["$sharedInstance"]) + Autocomplete["$sharedInstance"] = new Autocomplete(); + editor.completer = Autocomplete["$sharedInstance"]; } else { - this.$backMarkers[id] = marker; - this._signal("changeBackMarker"); + editor.completer = new Autocomplete(); + editor.once("destroy", destroyCompleter); } - return id; + return editor.completer; }; - EditSession.prototype.addDynamicMarker = function (marker, inFront) { - if (!marker.update) - return; - var id = this.$markerId++; - marker.id = id; - marker.inFront = !!inFront; - if (inFront) { - this.$frontMarkers[id] = marker; - this._signal("changeFrontMarker"); + return Autocomplete; +}()); +Autocomplete.prototype.commands = { + "Up": function (editor) { editor.completer.goTo("up"); }, + "Down": function (editor) { editor.completer.goTo("down"); }, + "Ctrl-Up|Ctrl-Home": function (editor) { editor.completer.goTo("start"); }, + "Ctrl-Down|Ctrl-End": function (editor) { editor.completer.goTo("end"); }, + "Esc": function (editor) { editor.completer.detach(); }, + "Return": function (editor) { return editor.completer.insertMatch(); }, + "Shift-Return": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); }, + "Tab": function (editor) { + var result = editor.completer.insertMatch(); + if (!result && !editor.tabstopManager) + editor.completer.goTo("down"); + else + return result; + }, + "Backspace": function (editor) { + editor.execCommand("backspace"); + var prefix = util.getCompletionPrefix(editor); + if (!prefix && editor.completer) + editor.completer.detach(); + }, + "PageUp": function (editor) { editor.completer.popup.gotoPageUp(); }, + "PageDown": function (editor) { editor.completer.popup.gotoPageDown(); } +}; +Autocomplete.startCommand = { + name: "startAutocomplete", + exec: function (editor, options) { + var completer = Autocomplete.for(editor); + completer.autoInsert = false; + completer.autoSelect = true; + completer.autoShown = false; + completer.showPopup(editor, options); + completer.cancelContextMenu(); + }, + bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space" +}; +var CompletionProvider = /** @class */ (function () { + function CompletionProvider(initialPosition) { + this.initialPosition = initialPosition; + this.active = true; + } + CompletionProvider.prototype.insertByIndex = function (editor, index, options) { + if (!this.completions || !this.completions.filtered) { + return false; + } + return this.insertMatch(editor, this.completions.filtered[index], options); + }; + CompletionProvider.prototype.insertMatch = function (editor, data, options) { + if (!data) + return false; + editor.startOperation({ command: { name: "insertMatch" } }); + if (data.completer && data.completer.insertMatch) { + data.completer.insertMatch(editor, data); } else { - this.$backMarkers[id] = marker; - this._signal("changeBackMarker"); + if (!this.completions) + return false; + var replaceBefore = this.completions.filterText.length; + var replaceAfter = 0; + if (data.range && data.range.start.row === data.range.end.row) { + replaceBefore -= this.initialPosition.prefix.length; + replaceBefore += this.initialPosition.pos.column - data.range.start.column; + replaceAfter += data.range.end.column - this.initialPosition.pos.column; + } + if (replaceBefore || replaceAfter) { + var ranges; + if (editor.selection.getAllRanges) { + ranges = editor.selection.getAllRanges(); + } + else { + ranges = [editor.getSelectionRange()]; + } + for (var i = 0, range; range = ranges[i]; i++) { + range.start.column -= replaceBefore; + range.end.column += replaceAfter; + editor.session.remove(range); + } + } + if (data.snippet) { + snippetManager.insertSnippet(editor, data.snippet); + } + else { + this.$insertString(editor, data); + } + if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == "function") { + data.completer.onInsert(editor, data); + } + if (data.command && data.command === "startAutocomplete") { + editor.execCommand(data.command); + } } - return marker; + editor.endOperation(); + return true; }; - EditSession.prototype.removeMarker = function (markerId) { - var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId]; - if (!marker) - return; - var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers; - delete (markers[markerId]); - this._signal(marker.inFront ? "changeFrontMarker" : "changeBackMarker"); + CompletionProvider.prototype.$insertString = function (editor, data) { + var text = data.value || data; + editor.execCommand("insertstring", text); }; - EditSession.prototype.getMarkers = function (inFront) { - return inFront ? this.$frontMarkers : this.$backMarkers; + CompletionProvider.prototype.gatherCompletions = function (editor, callback) { + var session = editor.getSession(); + var pos = editor.getCursorPosition(); + var prefix = util.getCompletionPrefix(editor); + var matches = []; + this.completers = editor.completers; + var total = editor.completers.length; + editor.completers.forEach(function (completer, i) { + completer.getCompletions(editor, session, pos, prefix, function (err, results) { + if (completer.hideInlinePreview) + results = results.map(function (result) { + return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview }); + }); + if (!err && results) + matches = matches.concat(results); + callback(null, { + prefix: util.getCompletionPrefix(editor), + matches: matches, + finished: (--total === 0) + }); + }); + }); + return true; }; - EditSession.prototype.highlight = function (re) { - if (!this.$searchHighlight) { - var highlight = new SearchHighlight(null, "ace_selected-word", "text"); - this.$searchHighlight = this.addDynamicMarker(highlight); + CompletionProvider.prototype.provideCompletions = function (editor, options, callback) { + var processResults = function (results) { + var prefix = results.prefix; + var matches = results.matches; + this.completions = new FilteredList(matches); + if (options.exactMatch) + this.completions.exactMatch = true; + if (options.ignoreCaption) + this.completions.ignoreCaption = true; + this.completions.setFilter(prefix); + if (results.finished || this.completions.filtered.length) + callback(null, this.completions, results.finished); + }.bind(this); + var isImmediate = true; + var immediateResults = null; + this.gatherCompletions(editor, function (err, results) { + if (!this.active) { + return; + } + if (err) { + callback(err, [], true); + this.detach(); + } + var prefix = results.prefix; + if (prefix.indexOf(results.prefix) !== 0) + return; + if (isImmediate) { + immediateResults = results; + return; + } + processResults(results); + }.bind(this)); + isImmediate = false; + if (immediateResults) { + var results = immediateResults; + immediateResults = null; + processResults(results); } - this.$searchHighlight.setRegexp(re); }; - EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) { - if (typeof endRow != "number") { - clazz = endRow; - endRow = startRow; + CompletionProvider.prototype.detach = function () { + this.active = false; + this.completers && this.completers.forEach(function (completer) { + if (typeof completer.cancel === "function") { + completer.cancel(); + } + }); + }; + return CompletionProvider; +}()); +var FilteredList = /** @class */ (function () { + function FilteredList(array, filterText) { + this.all = array; + this.filtered = array; + this.filterText = filterText || ""; + this.exactMatch = false; + this.ignoreCaption = false; + } + FilteredList.prototype.setFilter = function (str) { + if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) + var matches = this.filtered; + else + var matches = this.all; + this.filterText = str; + matches = this.filterCompletions(matches, this.filterText); + matches = matches.sort(function (a, b) { + return b.exactMatch - a.exactMatch || b.$score - a.$score + || (a.caption || a.value).localeCompare(b.caption || b.value); + }); + var prev = null; + matches = matches.filter(function (item) { + var caption = item.snippet || item.caption || item.value; + if (caption === prev) + return false; + prev = caption; + return true; + }); + this.filtered = matches; + }; + FilteredList.prototype.filterCompletions = function (items, needle) { + var results = []; + var upper = needle.toUpperCase(); + var lower = needle.toLowerCase(); + loop: for (var i = 0, item; item = items[i]; i++) { + if (item.skipFilter) { + item.$score = item.score; + results.push(item); + continue; + } + var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet; + if (!caption) + continue; + var lastIndex = -1; + var matchMask = 0; + var penalty = 0; + var index, distance; + if (this.exactMatch) { + if (needle !== caption.substr(0, needle.length)) + continue loop; + } + else { + var fullMatchIndex = caption.toLowerCase().indexOf(lower); + if (fullMatchIndex > -1) { + penalty = fullMatchIndex; + } + else { + for (var j = 0; j < needle.length; j++) { + var i1 = caption.indexOf(lower[j], lastIndex + 1); + var i2 = caption.indexOf(upper[j], lastIndex + 1); + index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2; + if (index < 0) + continue loop; + distance = index - lastIndex - 1; + if (distance > 0) { + if (lastIndex === -1) + penalty += 10; + penalty += distance; + matchMask = matchMask | (1 << j); + } + lastIndex = index; + } + } + } + item.matchMask = matchMask; + item.exactMatch = penalty ? 0 : 1; + item.$score = (item.score || 0) - penalty; + results.push(item); } - if (!clazz) - clazz = "ace_step"; - var range = new Range(startRow, 0, endRow, Infinity); - range.id = this.addMarker(range, clazz, "fullLine", inFront); - return range; + return results; }; - EditSession.prototype.setAnnotations = function (annotations) { - this.$annotations = annotations; - this._signal("changeAnnotation", {}); + return FilteredList; +}()); +exports.Autocomplete = Autocomplete; +exports.CompletionProvider = CompletionProvider; +exports.FilteredList = FilteredList; + +}); + +ace.define("ace/marker_group",["require","exports","module"], function(require, exports, module){"use strict"; +var MarkerGroup = /** @class */ (function () { + function MarkerGroup(session, options) { + if (options) + this.markerType = options.markerType; + this.markers = []; + this.session = session; + session.addDynamicMarker(this); + } + MarkerGroup.prototype.getMarkerAtPosition = function (pos) { + return this.markers.find(function (marker) { + return marker.range.contains(pos.row, pos.column); + }); }; - EditSession.prototype.getAnnotations = function () { - return this.$annotations || []; + MarkerGroup.prototype.markersComparator = function (a, b) { + return a.range.start.row - b.range.start.row; }; - EditSession.prototype.clearAnnotations = function () { - this.setAnnotations([]); + MarkerGroup.prototype.setMarkers = function (markers) { + this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS); + this.session._signal("changeBackMarker"); }; - EditSession.prototype.$detectNewLine = function (text) { - var match = text.match(/^.*?(\r?\n)/m); - if (match) { - this.$autoNewLine = match[1]; + MarkerGroup.prototype.update = function (html, markerLayer, session, config) { + if (!this.markers || !this.markers.length) + return; + var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow; + var foldLine; + var markersOnOneLine = 0; + var lastRow = 0; + for (var i = 0; i < this.markers.length; i++) { + var marker = this.markers[i]; + if (marker.range.end.row < visibleRangeStartRow) + continue; + if (marker.range.start.row > visibleRangeEndRow) + continue; + if (marker.range.start.row === lastRow) { + markersOnOneLine++; + } + else { + lastRow = marker.range.start.row; + markersOnOneLine = 0; + } + if (markersOnOneLine > 200) { + continue; + } + var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow); + if (markerVisibleRange.start.row === markerVisibleRange.end.row + && markerVisibleRange.start.column === markerVisibleRange.end.column) { + continue; // visible range is empty + } + var screenRange = markerVisibleRange.toScreenRange(session); + if (screenRange.isEmpty()) { + foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine); + if (foldLine && foldLine.end.row > markerVisibleRange.end.row) { + visibleRangeStartRow = foldLine.end.row; + } + continue; + } + if (this.markerType === "fullLine") { + markerLayer.drawFullLineMarker(html, screenRange, marker.className, config); + } + else if (screenRange.isMultiLine()) { + if (this.markerType === "line") + markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config); + else + markerLayer.drawTextMarker(html, screenRange, marker.className, config); + } + else { + markerLayer.drawSingleLineMarker(html, screenRange, marker.className + " ace_br15", config); + } + } + }; + return MarkerGroup; +}()); +MarkerGroup.prototype.MAX_MARKERS = 10000; +exports.MarkerGroup = MarkerGroup; + +}); + +ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(require, exports, module){var Range = require("../range").Range; +var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/; +function getWordIndex(doc, pos) { + var textBefore = doc.getTextRange(Range.fromPoints({ + row: 0, + column: 0 + }, pos)); + return textBefore.split(splitRegex).length - 1; +} +function wordDistance(doc, pos) { + var prefixPos = getWordIndex(doc, pos); + var words = doc.getValue().split(splitRegex); + var wordScores = Object.create(null); + var currentWord = words[prefixPos]; + words.forEach(function (word, idx) { + if (!word || word === currentWord) + return; + var distance = Math.abs(prefixPos - idx); + var score = words.length - distance; + if (wordScores[word]) { + wordScores[word] = Math.max(score, wordScores[word]); } else { - this.$autoNewLine = "\n"; + wordScores[word] = score; } - }; - EditSession.prototype.getWordRange = function (row, column) { - var line = this.getLine(row); - var inToken = false; - if (column > 0) - inToken = !!line.charAt(column - 1).match(this.tokenRe); - if (!inToken) - inToken = !!line.charAt(column).match(this.tokenRe); - if (inToken) - var re = this.tokenRe; - else if (/^\s+$/.test(line.slice(column - 1, column + 1))) - var re = /\s/; - else - var re = this.nonTokenRe; - var start = column; - if (start > 0) { - do { - start--; - } while (start >= 0 && line.charAt(start).match(re)); - start++; + }); + return wordScores; +} +exports.getCompletions = function (editor, session, pos, prefix, callback) { + var wordScore = wordDistance(session, pos); + var wordList = Object.keys(wordScore); + callback(null, wordList.map(function (word) { + return { + caption: word, + value: word, + score: wordScore[word], + meta: "local" + }; + })); +}; + +}); + +ace.define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/lib/lang","ace/autocomplete/util","ace/marker_group","ace/autocomplete/text_completer","ace/editor","ace/config"], function(require, exports, module){/** + * ## Language Tools extension for Ace Editor + * + * Provides autocompletion, snippets, and language intelligence features for the Ace code editor. + * This extension integrates multiple completion providers including keyword completion, snippet expansion, + * and text-based completion to enhance the coding experience with contextual suggestions and automated code generation. + * + * **Configuration Options:** + * - `enableBasicAutocompletion`: Enable/disable basic completion functionality + * - `enableLiveAutocompletion`: Enable/disable real-time completion suggestions + * - `enableSnippets`: Enable/disable snippet expansion with Tab key + * - `liveAutocompletionDelay`: Delay before showing live completion popup + * - `liveAutocompletionThreshold`: Minimum prefix length to trigger completion + * + * **Usage:** + * ```javascript + * editor.setOptions({ + * enableBasicAutocompletion: true, + * enableLiveAutocompletion: true, + * enableSnippets: true + * }); + * ``` + * + * @module + */ +"use strict"; +var snippetManager = require("../snippets").snippetManager; +var Autocomplete = require("../autocomplete").Autocomplete; +var config = require("../config"); +var lang = require("../lib/lang"); +var util = require("../autocomplete/util"); +var MarkerGroup = require("../marker_group").MarkerGroup; +var textCompleter = require("../autocomplete/text_completer"); +var keyWordCompleter = { + getCompletions: function (editor, session, pos, prefix, callback) { + if (session.$mode.completer) { + return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback); } - var end = column; - while (end < line.length && line.charAt(end).match(re)) { - end++; + var state = editor.session.getState(pos.row); + var completions = session.$mode.getCompletions(state, session, pos, prefix); + completions = completions.map(function (el) { + el.completerId = keyWordCompleter.id; + return el; + }); + callback(null, completions); + }, + id: "keywordCompleter" +}; +var transformSnippetTooltip = function (str) { + var record = {}; + return str.replace(/\${(\d+)(:(.*?))?}/g, function (_, p1, p2, p3) { + return (record[p1] = p3 || ''); + }).replace(/\$(\d+?)/g, function (_, p1) { + return record[p1]; + }); +}; +var snippetCompleter = { + getCompletions: function (editor, session, pos, prefix, callback) { + var scopes = []; + var token = session.getTokenAt(pos.row, pos.column); + if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\.xml$/)) + scopes.push('html-tag'); + else + scopes = snippetManager.getActiveScopes(editor); + var snippetMap = snippetManager.snippetMap; + var completions = []; + scopes.forEach(function (scope) { + var snippets = snippetMap[scope] || []; + for (var i = snippets.length; i--;) { + var s = snippets[i]; + var caption = s.name || s.tabTrigger; + if (!caption) + continue; + completions.push({ + caption: caption, + snippet: s.content, + meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet", + completerId: snippetCompleter.id + }); + } + }, this); + callback(null, completions); + }, + getDocTooltip: function (item) { + if (item.snippet && !item.docHTML) { + item.docHTML = [ + "", lang.escapeHTML(item.caption), "", "
    ", + lang.escapeHTML(transformSnippetTooltip(item.snippet)) + ].join(""); } - return new Range(row, start, row, end); - }; - EditSession.prototype.getAWordRange = function (row, column) { - var wordRange = this.getWordRange(row, column); - var line = this.getLine(wordRange.end.row); - while (line.charAt(wordRange.end.column).match(/[ \t]/)) { - wordRange.end.column += 1; + }, + id: "snippetCompleter" +}; +var completers = [snippetCompleter, textCompleter, keyWordCompleter]; +exports.setCompleters = function (val) { + completers.length = 0; + if (val) + completers.push.apply(completers, val); +}; +exports.addCompleter = function (completer) { + completers.push(completer); +}; +exports.textCompleter = textCompleter; +exports.keyWordCompleter = keyWordCompleter; +exports.snippetCompleter = snippetCompleter; +var expandSnippet = { + name: "expandSnippet", + exec: function (editor) { + return snippetManager.expandWithTab(editor); + }, + bindKey: "Tab" +}; +var onChangeMode = function (e, editor) { + loadSnippetsForMode(editor.session.$mode); +}; +var loadSnippetsForMode = function (mode) { + if (typeof mode == "string") + mode = config.$modes[mode]; + if (!mode) + return; + if (!snippetManager.files) + snippetManager.files = {}; + loadSnippetFile(mode.$id, mode.snippetFileId); + if (mode.modes) + mode.modes.forEach(loadSnippetsForMode); +}; +var loadSnippetFile = function (id, snippetFilePath) { + if (!snippetFilePath || !id || snippetManager.files[id]) + return; + snippetManager.files[id] = {}; + config.loadModule(snippetFilePath, function (m) { + if (!m) + return; + snippetManager.files[id] = m; + if (!m.snippets && m.snippetText) + m.snippets = snippetManager.parseSnippetFile(m.snippetText); + snippetManager.register(m.snippets || [], m.scope); + if (m.includeScopes) { + snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes; + m.includeScopes.forEach(function (x) { + loadSnippetsForMode("ace/mode/" + x); + }); } - return wordRange; - }; - EditSession.prototype.setNewLineMode = function (newLineMode) { - this.doc.setNewLineMode(newLineMode); - }; - EditSession.prototype.getNewLineMode = function () { - return this.doc.getNewLineMode(); - }; - EditSession.prototype.setUseWorker = function (useWorker) { this.setOption("useWorker", useWorker); }; - EditSession.prototype.getUseWorker = function () { return this.$useWorker; }; - EditSession.prototype.onReloadTokenizer = function (e) { - var rows = e.data; - this.bgTokenizer.start(rows.first); - this._signal("tokenizerUpdate", e); - }; - EditSession.prototype.setMode = function (mode, cb) { - if (mode && typeof mode === "object") { - if (mode.getTokenizer) - return this.$onChangeMode(mode); - var options = mode; - var path = options.path; + }); +}; +var doLiveAutocomplete = function (e) { + var editor = e.editor; + var hasCompleter = editor.completer && editor.completer.activated; + if (e.command.name === "backspace") { + if (hasCompleter && !util.getCompletionPrefix(editor)) + editor.completer.detach(); + } + else if (e.command.name === "insertstring" && !hasCompleter) { + lastExecEvent = e; + var delay = e.editor.$liveAutocompletionDelay; + if (delay) { + liveAutocompleteTimer.delay(delay); } else { - path = /**@type{string}*/ (mode) || "ace/mode/text"; - } - if (!this.$modes["ace/mode/text"]) - this.$modes["ace/mode/text"] = new TextMode(); - if (this.$modes[path] && !options) { - this.$onChangeMode(this.$modes[path]); - cb && cb(); - return; + showLiveAutocomplete(e); } - this.$modeId = path; - config.loadModule(["mode", path], function (m) { - if (this.destroyed) { - return; + } +}; +var lastExecEvent; +var liveAutocompleteTimer = lang.delayedCall(function () { + showLiveAutocomplete(lastExecEvent); +}, 0); +var showLiveAutocomplete = function (e) { + var editor = e.editor; + var prefix = util.getCompletionPrefix(editor); + var previousChar = e.args; + var triggerAutocomplete = util.triggerAutocomplete(editor, previousChar); + if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) { + var completer = Autocomplete.for(editor); + completer.autoShown = true; + completer.showPopup(editor); + } +}; +var Editor = require("../editor").Editor; +require("../config").defineOptions(Editor.prototype, "editor", { + enableBasicAutocompletion: { + set: function (val) { + if (val) { + Autocomplete.for(this); + if (!this.completers) + this.completers = Array.isArray(val) ? val : completers; + this.commands.addCommand(Autocomplete.startCommand); } - if (this.$modeId !== path) - return cb && cb(); - if (this.$modes[path] && !options) { - this.$onChangeMode(this.$modes[path]); + else { + this.commands.removeCommand(Autocomplete.startCommand); } - else if (m && m.Mode) { - m = new m.Mode(options); - if (!options) { - this.$modes[path] = m; - m.$id = path; - } - this.$onChangeMode(m); + }, + value: false + }, + enableLiveAutocompletion: { + set: function (val) { + if (val) { + if (!this.completers) + this.completers = Array.isArray(val) ? val : completers; + this.commands.on('afterExec', doLiveAutocomplete); } - cb && cb(); - }.bind(this)); - if (!this.$mode) - this.$onChangeMode(this.$modes["ace/mode/text"], true); - }; - EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) { - if (!$isPlaceholder) - this.$modeId = mode.$id; - if (this.$mode === mode) - return; - var oldMode = this.$mode; - this.$mode = mode; - this.$stopWorker(); - if (this.$useWorker) - this.$startWorker(); - var tokenizer = mode.getTokenizer(); - if (tokenizer.on !== undefined) { - var onReloadTokenizer = this.onReloadTokenizer.bind(this); - tokenizer.on("update", onReloadTokenizer); - } - this.bgTokenizer.setTokenizer(tokenizer); - this.bgTokenizer.setDocument(this.getDocument()); - this.tokenRe = mode.tokenRe; - this.nonTokenRe = mode.nonTokenRe; - if (!$isPlaceholder) { - if (mode.attachToSession) - mode.attachToSession(this); - this.$options.wrapMethod.set.call(this, this.$wrapMethod); - this.$setFolding(mode.foldingRules); - this.bgTokenizer.start(0); - this._emit("changeMode", { oldMode: oldMode, mode: mode }); - } + else { + this.commands.off('afterExec', doLiveAutocomplete); + } + }, + value: false + }, + liveAutocompletionDelay: { + initialValue: 0 + }, + liveAutocompletionThreshold: { + initialValue: 0 + }, + enableSnippets: { + set: function (val) { + if (val) { + this.commands.addCommand(expandSnippet); + this.on("changeMode", onChangeMode); + onChangeMode(null, this); + } + else { + this.commands.removeCommand(expandSnippet); + this.off("changeMode", onChangeMode); + } + }, + value: false + } +}); +exports.MarkerGroup = MarkerGroup; + +}); (function() { + ace.require(["ace/ext/language_tools"], function(m) { + if ( true && module) { + module.exports = m; + } + }); + })(); + + +/***/ }), + +/***/ "../../node_modules/ace-builds/src-noconflict/mode-sql.js": +/*!****************************************************************!*\ + !*** ../../node_modules/ace-builds/src-noconflict/mode-sql.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* module decorator */ module = __webpack_require__.nmd(module); +ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict"; +var oop = require("../lib/oop"); +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; +var SqlHighlightRules = function () { + var keywords = ("select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|" + + "when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|" + + "foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct|is|in|" + + "all|alter|any|array|at|authorization|between|both|cast|check|collate|column|commit|constraint|" + + "cube|current|current_date|current_time|current_timestamp|current_user|describe|escape|except|" + + "exists|external|extract|fetch|filter|for|full|function|global|grouping|intersect|interval|" + + "into|leading|like|local|no|of|only|out|overlaps|partition|position|range|revoke|rollback|rollup|" + + "row|rows|session_user|set|some|start|tablesample|time|to|trailing|truncate|unique|unknown|" + + "user|using|values|window|with"); + var builtinConstants = ("true|false"); + var builtinFunctions = ("avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|" + + "coalesce|ifnull|isnull|nvl"); + var dataTypes = ("int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|" + + "money|real|number|integer|string"); + var keywordMapper = this.createKeywordMapper({ + "support.function": builtinFunctions, + "keyword": keywords, + "constant.language": builtinConstants, + "storage.type": dataTypes + }, "identifier", true); + this.$rules = { + "start": [{ + token: "comment", + regex: "--.*$" + }, { + token: "comment", + start: "/\\*", + end: "\\*/" + }, { + token: "string", // " string + regex: '".*?"' + }, { + token: "string", // ' string + regex: "'.*?'" + }, { + token: "string", // ` string (apache drill) + regex: "`.*?`" + }, { + token: "constant.numeric", // float + regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" + }, { + token: keywordMapper, + regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" + }, { + token: "keyword.operator", + regex: "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" + }, { + token: "paren.lparen", + regex: "[\\(]" + }, { + token: "paren.rparen", + regex: "[\\)]" + }, { + token: "text", + regex: "\\s+" + }] }; - EditSession.prototype.$stopWorker = function () { - if (this.$worker) { - this.$worker.terminate(); - this.$worker = null; + this.normalizeRules(); +}; +oop.inherits(SqlHighlightRules, TextHighlightRules); +exports.SqlHighlightRules = SqlHighlightRules; + +}); + +ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict"; +var oop = require("../../lib/oop"); +var Range = require("../../range").Range; +var BaseFoldMode = require("./fold_mode").FoldMode; +var FoldMode = exports.FoldMode = function (commentRegex) { + if (commentRegex) { + this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)); + this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)); + } +}; +oop.inherits(FoldMode, BaseFoldMode); +(function () { + this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/; + this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/; + this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/; + this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; + this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; + this._getFoldWidgetBase = this.getFoldWidget; + this.getFoldWidget = function (session, foldStyle, row) { + var line = session.getLine(row); + if (this.singleLineBlockCommentRe.test(line)) { + if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) + return ""; } + var fw = this._getFoldWidgetBase(session, foldStyle, row); + if (!fw && this.startRegionRe.test(line)) + return "start"; // lineCommentRegionStart + return fw; }; - EditSession.prototype.$startWorker = function () { - try { - this.$worker = this.$mode.createWorker(this); - } - catch (e) { - config.warn("Could not load worker", e); - this.$worker = null; + this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) { + var line = session.getLine(row); + if (this.startRegionRe.test(line)) + return this.getCommentRegionBlock(session, line, row); + var match = line.match(this.foldingStartMarker); + if (match) { + var i = match.index; + if (match[1]) + return this.openingBracketBlock(session, match[1], row, i); + var range = session.getCommentFoldRange(row, i + match[0].length, 1); + if (range && !range.isMultiLine()) { + if (forceMultiline) { + range = this.getSectionRange(session, row); + } + else if (foldStyle != "all") + range = null; + } + return range; } - }; - EditSession.prototype.getMode = function () { - return this.$mode; - }; - EditSession.prototype.setScrollTop = function (scrollTop) { - if (this.$scrollTop === scrollTop || isNaN(scrollTop)) - return; - this.$scrollTop = scrollTop; - this._signal("changeScrollTop", scrollTop); - }; - EditSession.prototype.getScrollTop = function () { - return this.$scrollTop; - }; - EditSession.prototype.setScrollLeft = function (scrollLeft) { - if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) + if (foldStyle === "markbegin") return; - this.$scrollLeft = scrollLeft; - this._signal("changeScrollLeft", scrollLeft); - }; - EditSession.prototype.getScrollLeft = function () { - return this.$scrollLeft; - }; - EditSession.prototype.getScreenWidth = function () { - this.$computeWidth(); - if (this.lineWidgets) - return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth); - return this.screenWidth; - }; - EditSession.prototype.getLineWidgetMaxWidth = function () { - if (this.lineWidgetsWidth != null) - return this.lineWidgetsWidth; - var width = 0; - this.lineWidgets.forEach(function (w) { - if (w && w.screenWidth > width) - width = w.screenWidth; - }); - return this.lineWidgetWidth = width; + var match = line.match(this.foldingStopMarker); + if (match) { + var i = match.index + match[0].length; + if (match[1]) + return this.closingBracketBlock(session, match[1], row, i); + return session.getCommentFoldRange(row, i, -1); + } }; - EditSession.prototype.$computeWidth = function (force) { - if (this.$modified || force) { - this.$modified = false; - if (this.$useWrapMode) - return this.screenWidth = this.$wrapLimit; - var lines = this.doc.getAllLines(); - var cache = this.$rowLengthCache; - var longestScreenLine = 0; - var foldIndex = 0; - var foldLine = this.$foldData[foldIndex]; - var foldStart = foldLine ? foldLine.start.row : Infinity; - var len = lines.length; - for (var i = 0; i < len; i++) { - if (i > foldStart) { - i = foldLine.end.row + 1; - if (i >= len) - break; - foldLine = this.$foldData[foldIndex++]; - foldStart = foldLine ? foldLine.start.row : Infinity; + this.getSectionRange = function (session, row) { + var line = session.getLine(row); + var startIndent = line.search(/\S/); + var startRow = row; + var startColumn = line.length; + row = row + 1; + var endRow = row; + var maxRow = session.getLength(); + while (++row < maxRow) { + line = session.getLine(row); + var indent = line.search(/\S/); + if (indent === -1) + continue; + if (startIndent > indent) + break; + var subRange = this.getFoldWidgetRange(session, "all", row); + if (subRange) { + if (subRange.start.row <= startRow) { + break; + } + else if (subRange.isMultiLine()) { + row = subRange.end.row; + } + else if (startIndent == indent) { + break; } - if (cache[i] == null) - cache[i] = this.$getStringScreenWidth(lines[i])[0]; - if (cache[i] > longestScreenLine) - longestScreenLine = cache[i]; } - this.screenWidth = longestScreenLine; + endRow = row; } + return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; - EditSession.prototype.getLine = function (row) { - return this.doc.getLine(row); - }; - EditSession.prototype.getLines = function (firstRow, lastRow) { - return this.doc.getLines(firstRow, lastRow); - }; - EditSession.prototype.getLength = function () { - return this.doc.getLength(); - }; - EditSession.prototype.getTextRange = function (range) { - return this.doc.getTextRange(range || this.selection.getRange()); - }; - EditSession.prototype.insert = function (position, text) { - return this.doc.insert(position, text); + this.getCommentRegionBlock = function (session, line, row) { + var startColumn = line.search(/\s*$/); + var maxRow = session.getLength(); + var startRow = row; + var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; + var depth = 1; + while (++row < maxRow) { + line = session.getLine(row); + var m = re.exec(line); + if (!m) + continue; + if (m[1]) + depth--; + else + depth++; + if (!depth) + break; + } + var endRow = row; + if (endRow > startRow) { + return new Range(startRow, startColumn, endRow, line.length); + } }; - EditSession.prototype.remove = function (range) { - return this.doc.remove(range); +}).call(FoldMode.prototype); + +}); + +ace.define("ace/mode/folding/sql",["require","exports","module","ace/lib/oop","ace/mode/folding/cstyle"], function(require, exports, module){"use strict"; +var oop = require("../../lib/oop"); +var BaseFoldMode = require("./cstyle").FoldMode; +var FoldMode = exports.FoldMode = function () { }; +oop.inherits(FoldMode, BaseFoldMode); +(function () { +}).call(FoldMode.prototype); + +}); + +ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules","ace/mode/folding/sql"], function(require, exports, module){"use strict"; +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules; +var SqlFoldMode = require("./folding/sql").FoldMode; +var Mode = function () { + this.HighlightRules = SqlHighlightRules; + this.foldingRules = new SqlFoldMode(); + this.$behaviour = this.$defaultBehaviour; +}; +oop.inherits(Mode, TextMode); +(function () { + this.lineCommentStart = "--"; + this.blockComment = { start: "/*", end: "*/" }; + this.$id = "ace/mode/sql"; + this.snippetFileId = "ace/snippets/sql"; +}).call(Mode.prototype); +exports.Mode = Mode; + +}); (function() { + ace.require(["ace/mode/sql"], function(m) { + if ( true && module) { + module.exports = m; + } + }); + })(); + + +/***/ }), + +/***/ "../../node_modules/ace-builds/src-noconflict/theme-textmate.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/ace-builds/src-noconflict/theme-textmate.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* module decorator */ module = __webpack_require__.nmd(module); +ace.define("ace/theme/textmate",["require","exports","module","ace/theme/textmate-css","ace/lib/dom"], function(require, exports, module){"use strict"; +exports.isDark = false; +exports.cssClass = "ace-tm"; +exports.cssText = require("./textmate-css"); +exports.$id = "ace/theme/textmate"; +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass, false); + +}); (function() { + ace.require(["ace/theme/textmate"], function(m) { + if ( true && module) { + module.exports = m; + } + }); + })(); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1.js": +/*!**********************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var asn1 = exports; + +asn1.bignum = __webpack_require__(/*! bn.js */ "../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js"); + +asn1.define = (__webpack_require__(/*! ./asn1/api */ "../../node_modules/asn1.js/lib/asn1/api.js").define); +asn1.base = __webpack_require__(/*! ./asn1/base */ "../../node_modules/asn1.js/lib/asn1/base/index.js"); +asn1.constants = __webpack_require__(/*! ./asn1/constants */ "../../node_modules/asn1.js/lib/asn1/constants/index.js"); +asn1.decoders = __webpack_require__(/*! ./asn1/decoders */ "../../node_modules/asn1.js/lib/asn1/decoders/index.js"); +asn1.encoders = __webpack_require__(/*! ./asn1/encoders */ "../../node_modules/asn1.js/lib/asn1/encoders/index.js"); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/api.js": +/*!**************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/api.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var asn1 = __webpack_require__(/*! ../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +var api = exports; + +api.define = function define(name, body) { + return new Entity(name, body); +}; + +function Entity(name, body) { + this.name = name; + this.body = body; + + this.decoders = {}; + this.encoders = {}; +}; + +Entity.prototype._createNamed = function createNamed(base) { + var named; + try { + named = (__webpack_require__(/*! vm */ "../../node_modules/vm-browserify/index.js").runInThisContext)( + '(function ' + this.name + '(entity) {\n' + + ' this._initNamed(entity);\n' + + '})' + ); + } catch (e) { + named = function (entity) { + this._initNamed(entity); }; - EditSession.prototype.removeFullLines = function (firstRow, lastRow) { - return this.doc.removeFullLines(firstRow, lastRow); + } + inherits(named, base); + named.prototype._initNamed = function initnamed(entity) { + base.call(this, entity); + }; + + return new named(this); +}; + +Entity.prototype._getDecoder = function _getDecoder(enc) { + enc = enc || 'der'; + // Lazily create decoder + if (!this.decoders.hasOwnProperty(enc)) + this.decoders[enc] = this._createNamed(asn1.decoders[enc]); + return this.decoders[enc]; +}; + +Entity.prototype.decode = function decode(data, enc, options) { + return this._getDecoder(enc).decode(data, options); +}; + +Entity.prototype._getEncoder = function _getEncoder(enc) { + enc = enc || 'der'; + // Lazily create encoder + if (!this.encoders.hasOwnProperty(enc)) + this.encoders[enc] = this._createNamed(asn1.encoders[enc]); + return this.encoders[enc]; +}; + +Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { + return this._getEncoder(enc).encode(data, reporter); +}; + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/base/buffer.js": +/*!**********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/base/buffer.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var Reporter = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").Reporter); +var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); + +function DecoderBuffer(base, options) { + Reporter.call(this, options); + if (!Buffer.isBuffer(base)) { + this.error('Input not Buffer'); + return; + } + + this.base = base; + this.offset = 0; + this.length = base.length; +} +inherits(DecoderBuffer, Reporter); +exports.DecoderBuffer = DecoderBuffer; + +DecoderBuffer.prototype.save = function save() { + return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; +}; + +DecoderBuffer.prototype.restore = function restore(save) { + // Return skipped data + var res = new DecoderBuffer(this.base); + res.offset = save.offset; + res.length = this.offset; + + this.offset = save.offset; + Reporter.prototype.restore.call(this, save.reporter); + + return res; +}; + +DecoderBuffer.prototype.isEmpty = function isEmpty() { + return this.offset === this.length; +}; + +DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { + if (this.offset + 1 <= this.length) + return this.base.readUInt8(this.offset++, true); + else + return this.error(fail || 'DecoderBuffer overrun'); +} + +DecoderBuffer.prototype.skip = function skip(bytes, fail) { + if (!(this.offset + bytes <= this.length)) + return this.error(fail || 'DecoderBuffer overrun'); + + var res = new DecoderBuffer(this.base); + + // Share reporter state + res._reporterState = this._reporterState; + + res.offset = this.offset; + res.length = this.offset + bytes; + this.offset += bytes; + return res; +} + +DecoderBuffer.prototype.raw = function raw(save) { + return this.base.slice(save ? save.offset : this.offset, this.length); +} + +function EncoderBuffer(value, reporter) { + if (Array.isArray(value)) { + this.length = 0; + this.value = value.map(function(item) { + if (!(item instanceof EncoderBuffer)) + item = new EncoderBuffer(item, reporter); + this.length += item.length; + return item; + }, this); + } else if (typeof value === 'number') { + if (!(0 <= value && value <= 0xff)) + return reporter.error('non-byte EncoderBuffer value'); + this.value = value; + this.length = 1; + } else if (typeof value === 'string') { + this.value = value; + this.length = Buffer.byteLength(value); + } else if (Buffer.isBuffer(value)) { + this.value = value; + this.length = value.length; + } else { + return reporter.error('Unsupported type: ' + typeof value); + } +} +exports.EncoderBuffer = EncoderBuffer; + +EncoderBuffer.prototype.join = function join(out, offset) { + if (!out) + out = new Buffer(this.length); + if (!offset) + offset = 0; + + if (this.length === 0) + return out; + + if (Array.isArray(this.value)) { + this.value.forEach(function(item) { + item.join(out, offset); + offset += item.length; + }); + } else { + if (typeof this.value === 'number') + out[offset] = this.value; + else if (typeof this.value === 'string') + out.write(this.value, offset); + else if (Buffer.isBuffer(this.value)) + this.value.copy(out, offset); + offset += this.length; + } + + return out; +}; + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/base/index.js": +/*!*********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/base/index.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var base = exports; + +base.Reporter = (__webpack_require__(/*! ./reporter */ "../../node_modules/asn1.js/lib/asn1/base/reporter.js").Reporter); +base.DecoderBuffer = (__webpack_require__(/*! ./buffer */ "../../node_modules/asn1.js/lib/asn1/base/buffer.js").DecoderBuffer); +base.EncoderBuffer = (__webpack_require__(/*! ./buffer */ "../../node_modules/asn1.js/lib/asn1/base/buffer.js").EncoderBuffer); +base.Node = __webpack_require__(/*! ./node */ "../../node_modules/asn1.js/lib/asn1/base/node.js"); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/base/node.js": +/*!********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/base/node.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Reporter = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").Reporter); +var EncoderBuffer = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").EncoderBuffer); +var DecoderBuffer = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").DecoderBuffer); +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); + +// Supported tags +var tags = [ + 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', + 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', + 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', + 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' +]; + +// Public methods list +var methods = [ + 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', + 'any', 'contains' +].concat(tags); + +// Overrided methods list +var overrided = [ + '_peekTag', '_decodeTag', '_use', + '_decodeStr', '_decodeObjid', '_decodeTime', + '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', + + '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', + '_encodeNull', '_encodeInt', '_encodeBool' +]; + +function Node(enc, parent) { + var state = {}; + this._baseState = state; + + state.enc = enc; + + state.parent = parent || null; + state.children = null; + + // State + state.tag = null; + state.args = null; + state.reverseArgs = null; + state.choice = null; + state.optional = false; + state.any = false; + state.obj = false; + state.use = null; + state.useDecoder = null; + state.key = null; + state['default'] = null; + state.explicit = null; + state.implicit = null; + state.contains = null; + + // Should create new instance on each method + if (!state.parent) { + state.children = []; + this._wrap(); + } +} +module.exports = Node; + +var stateProps = [ + 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', + 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', + 'implicit', 'contains' +]; + +Node.prototype.clone = function clone() { + var state = this._baseState; + var cstate = {}; + stateProps.forEach(function(prop) { + cstate[prop] = state[prop]; + }); + var res = new this.constructor(cstate.parent); + res._baseState = cstate; + return res; +}; + +Node.prototype._wrap = function wrap() { + var state = this._baseState; + methods.forEach(function(method) { + this[method] = function _wrappedMethod() { + var clone = new this.constructor(this); + state.children.push(clone); + return clone[method].apply(clone, arguments); }; - EditSession.prototype.undoChanges = function (deltas, dontSelect) { - if (!deltas.length) - return; - this.$fromUndo = true; - for (var i = deltas.length - 1; i != -1; i--) { - var delta = deltas[i]; - if (delta.action == "insert" || delta.action == "remove") { - this.doc.revertDelta(delta); - } - else if (delta.folds) { - this.addFolds(delta.folds); - } + }, this); +}; + +Node.prototype._init = function init(body) { + var state = this._baseState; + + assert(state.parent === null); + body.call(this); + + // Filter children + state.children = state.children.filter(function(child) { + return child._baseState.parent === this; + }, this); + assert.equal(state.children.length, 1, 'Root node can have only one child'); +}; + +Node.prototype._useArgs = function useArgs(args) { + var state = this._baseState; + + // Filter children and args + var children = args.filter(function(arg) { + return arg instanceof this.constructor; + }, this); + args = args.filter(function(arg) { + return !(arg instanceof this.constructor); + }, this); + + if (children.length !== 0) { + assert(state.children === null); + state.children = children; + + // Replace parent to maintain backward link + children.forEach(function(child) { + child._baseState.parent = this; + }, this); + } + if (args.length !== 0) { + assert(state.args === null); + state.args = args; + state.reverseArgs = args.map(function(arg) { + if (typeof arg !== 'object' || arg.constructor !== Object) + return arg; + + var res = {}; + Object.keys(arg).forEach(function(key) { + if (key == (key | 0)) + key |= 0; + var value = arg[key]; + res[value] = key; + }); + return res; + }); + } +}; + +// +// Overrided methods +// + +overrided.forEach(function(method) { + Node.prototype[method] = function _overrided() { + var state = this._baseState; + throw new Error(method + ' not implemented for encoding: ' + state.enc); + }; +}); + +// +// Public methods +// + +tags.forEach(function(tag) { + Node.prototype[tag] = function _tagMethod() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + assert(state.tag === null); + state.tag = tag; + + this._useArgs(args); + + return this; + }; +}); + +Node.prototype.use = function use(item) { + assert(item); + var state = this._baseState; + + assert(state.use === null); + state.use = item; + + return this; +}; + +Node.prototype.optional = function optional() { + var state = this._baseState; + + state.optional = true; + + return this; +}; + +Node.prototype.def = function def(val) { + var state = this._baseState; + + assert(state['default'] === null); + state['default'] = val; + state.optional = true; + + return this; +}; + +Node.prototype.explicit = function explicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.explicit = num; + + return this; +}; + +Node.prototype.implicit = function implicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.implicit = num; + + return this; +}; + +Node.prototype.obj = function obj() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + state.obj = true; + + if (args.length !== 0) + this._useArgs(args); + + return this; +}; + +Node.prototype.key = function key(newKey) { + var state = this._baseState; + + assert(state.key === null); + state.key = newKey; + + return this; +}; + +Node.prototype.any = function any() { + var state = this._baseState; + + state.any = true; + + return this; +}; + +Node.prototype.choice = function choice(obj) { + var state = this._baseState; + + assert(state.choice === null); + state.choice = obj; + this._useArgs(Object.keys(obj).map(function(key) { + return obj[key]; + })); + + return this; +}; + +Node.prototype.contains = function contains(item) { + var state = this._baseState; + + assert(state.use === null); + state.contains = item; + + return this; +}; + +// +// Decoding +// + +Node.prototype._decode = function decode(input, options) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return input.wrapResult(state.children[0]._decode(input, options)); + + var result = state['default']; + var present = true; + + var prevKey = null; + if (state.key !== null) + prevKey = input.enterKey(state.key); + + // Check if tag is there + if (state.optional) { + var tag = null; + if (state.explicit !== null) + tag = state.explicit; + else if (state.implicit !== null) + tag = state.implicit; + else if (state.tag !== null) + tag = state.tag; + + if (tag === null && !state.any) { + // Trial and Error + var save = input.save(); + try { + if (state.choice === null) + this._decodeGeneric(state.tag, input, options); + else + this._decodeChoice(input, options); + present = true; + } catch (e) { + present = false; + } + input.restore(save); + } else { + present = this._peekTag(input, tag, state.any); + + if (input.isError(present)) + return present; + } + } + + // Push object on stack + var prevObj; + if (state.obj && present) + prevObj = input.enterObject(); + + if (present) { + // Unwrap explicit values + if (state.explicit !== null) { + var explicit = this._decodeTag(input, state.explicit); + if (input.isError(explicit)) + return explicit; + input = explicit; + } + + var start = input.offset; + + // Unwrap implicit and normal values + if (state.use === null && state.choice === null) { + if (state.any) + var save = input.save(); + var body = this._decodeTag( + input, + state.implicit !== null ? state.implicit : state.tag, + state.any + ); + if (input.isError(body)) + return body; + + if (state.any) + result = input.raw(save); + else + input = body; + } + + if (options && options.track && state.tag !== null) + options.track(input.path(), start, input.length, 'tagged'); + + if (options && options.track && state.tag !== null) + options.track(input.path(), input.offset, input.length, 'content'); + + // Select proper method for tag + if (state.any) + result = result; + else if (state.choice === null) + result = this._decodeGeneric(state.tag, input, options); + else + result = this._decodeChoice(input, options); + + if (input.isError(result)) + return result; + + // Decode children + if (!state.any && state.choice === null && state.children !== null) { + state.children.forEach(function decodeChildren(child) { + // NOTE: We are ignoring errors here, to let parser continue with other + // parts of encoded data + child._decode(input, options); + }); + } + + // Decode contained/encoded by schema, only in bit or octet strings + if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { + var data = new DecoderBuffer(result); + result = this._getUse(state.contains, input._reporterState.obj) + ._decode(data, options); + } + } + + // Pop object + if (state.obj && present) + result = input.leaveObject(prevObj); + + // Set key + if (state.key !== null && (result !== null || present === true)) + input.leaveKey(prevKey, state.key, result); + else if (prevKey !== null) + input.exitKey(prevKey); + + return result; +}; + +Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { + var state = this._baseState; + + if (tag === 'seq' || tag === 'set') + return null; + if (tag === 'seqof' || tag === 'setof') + return this._decodeList(input, tag, state.args[0], options); + else if (/str$/.test(tag)) + return this._decodeStr(input, tag, options); + else if (tag === 'objid' && state.args) + return this._decodeObjid(input, state.args[0], state.args[1], options); + else if (tag === 'objid') + return this._decodeObjid(input, null, null, options); + else if (tag === 'gentime' || tag === 'utctime') + return this._decodeTime(input, tag, options); + else if (tag === 'null_') + return this._decodeNull(input, options); + else if (tag === 'bool') + return this._decodeBool(input, options); + else if (tag === 'objDesc') + return this._decodeStr(input, tag, options); + else if (tag === 'int' || tag === 'enum') + return this._decodeInt(input, state.args && state.args[0], options); + + if (state.use !== null) { + return this._getUse(state.use, input._reporterState.obj) + ._decode(input, options); + } else { + return input.error('unknown tag: ' + tag); + } +}; + +Node.prototype._getUse = function _getUse(entity, obj) { + + var state = this._baseState; + // Create altered use decoder if implicit is set + state.useDecoder = this._use(entity, obj); + assert(state.useDecoder._baseState.parent === null); + state.useDecoder = state.useDecoder._baseState.children[0]; + if (state.implicit !== state.useDecoder._baseState.implicit) { + state.useDecoder = state.useDecoder.clone(); + state.useDecoder._baseState.implicit = state.implicit; + } + return state.useDecoder; +}; + +Node.prototype._decodeChoice = function decodeChoice(input, options) { + var state = this._baseState; + var result = null; + var match = false; + + Object.keys(state.choice).some(function(key) { + var save = input.save(); + var node = state.choice[key]; + try { + var value = node._decode(input, options); + if (input.isError(value)) + return false; + + result = { type: key, value: value }; + match = true; + } catch (e) { + input.restore(save); + return false; + } + return true; + }, this); + + if (!match) + return input.error('Choice not matched'); + + return result; +}; + +// +// Encoding +// + +Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { + return new EncoderBuffer(data, this.reporter); +}; + +Node.prototype._encode = function encode(data, reporter, parent) { + var state = this._baseState; + if (state['default'] !== null && state['default'] === data) + return; + + var result = this._encodeValue(data, reporter, parent); + if (result === undefined) + return; + + if (this._skipDefault(result, reporter, parent)) + return; + + return result; +}; + +Node.prototype._encodeValue = function encode(data, reporter, parent) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return state.children[0]._encode(data, reporter || new Reporter()); + + var result = null; + + // Set reporter to share it with a child class + this.reporter = reporter; + + // Check if data is there + if (state.optional && data === undefined) { + if (state['default'] !== null) + data = state['default'] + else + return; + } + + // Encode children first + var content = null; + var primitive = false; + if (state.any) { + // Anything that was given is translated to buffer + result = this._createEncoderBuffer(data); + } else if (state.choice) { + result = this._encodeChoice(data, reporter); + } else if (state.contains) { + content = this._getUse(state.contains, parent)._encode(data, reporter); + primitive = true; + } else if (state.children) { + content = state.children.map(function(child) { + if (child._baseState.tag === 'null_') + return child._encode(null, reporter, data); + + if (child._baseState.key === null) + return reporter.error('Child should have a key'); + var prevKey = reporter.enterKey(child._baseState.key); + + if (typeof data !== 'object') + return reporter.error('Child expected, but input is not object'); + + var res = child._encode(data[child._baseState.key], reporter, data); + reporter.leaveKey(prevKey); + + return res; + }, this).filter(function(child) { + return child; + }); + content = this._createEncoderBuffer(content); + } else { + if (state.tag === 'seqof' || state.tag === 'setof') { + // TODO(indutny): this should be thrown on DSL level + if (!(state.args && state.args.length === 1)) + return reporter.error('Too many args for : ' + state.tag); + + if (!Array.isArray(data)) + return reporter.error('seqof/setof, but data is not Array'); + + var child = this.clone(); + child._baseState.implicit = null; + content = this._createEncoderBuffer(data.map(function(item) { + var state = this._baseState; + + return this._getUse(state.args[0], data)._encode(item, reporter); + }, child)); + } else if (state.use !== null) { + result = this._getUse(state.use, parent)._encode(data, reporter); + } else { + content = this._encodePrimitive(state.tag, data); + primitive = true; + } + } + + // Encode data itself + var result; + if (!state.any && state.choice === null) { + var tag = state.implicit !== null ? state.implicit : state.tag; + var cls = state.implicit === null ? 'universal' : 'context'; + + if (tag === null) { + if (state.use === null) + reporter.error('Tag could be omitted only for .use()'); + } else { + if (state.use === null) + result = this._encodeComposite(tag, primitive, cls, content); + } + } + + // Wrap in explicit + if (state.explicit !== null) + result = this._encodeComposite(state.explicit, false, 'context', result); + + return result; +}; + +Node.prototype._encodeChoice = function encodeChoice(data, reporter) { + var state = this._baseState; + + var node = state.choice[data.type]; + if (!node) { + assert( + false, + data.type + ' not found in ' + + JSON.stringify(Object.keys(state.choice))); + } + return node._encode(data.value, reporter); +}; + +Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { + var state = this._baseState; + + if (/str$/.test(tag)) + return this._encodeStr(data, tag); + else if (tag === 'objid' && state.args) + return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); + else if (tag === 'objid') + return this._encodeObjid(data, null, null); + else if (tag === 'gentime' || tag === 'utctime') + return this._encodeTime(data, tag); + else if (tag === 'null_') + return this._encodeNull(); + else if (tag === 'int' || tag === 'enum') + return this._encodeInt(data, state.args && state.reverseArgs[0]); + else if (tag === 'bool') + return this._encodeBool(data); + else if (tag === 'objDesc') + return this._encodeStr(data, tag); + else + throw new Error('Unsupported tag: ' + tag); +}; + +Node.prototype._isNumstr = function isNumstr(str) { + return /^[0-9 ]*$/.test(str); +}; + +Node.prototype._isPrintstr = function isPrintstr(str) { + return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); +}; + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/base/reporter.js": +/*!************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/base/reporter.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +function Reporter(options) { + this._reporterState = { + obj: null, + path: [], + options: options || {}, + errors: [] + }; +} +exports.Reporter = Reporter; + +Reporter.prototype.isError = function isError(obj) { + return obj instanceof ReporterError; +}; + +Reporter.prototype.save = function save() { + var state = this._reporterState; + + return { obj: state.obj, pathLen: state.path.length }; +}; + +Reporter.prototype.restore = function restore(data) { + var state = this._reporterState; + + state.obj = data.obj; + state.path = state.path.slice(0, data.pathLen); +}; + +Reporter.prototype.enterKey = function enterKey(key) { + return this._reporterState.path.push(key); +}; + +Reporter.prototype.exitKey = function exitKey(index) { + var state = this._reporterState; + + state.path = state.path.slice(0, index - 1); +}; + +Reporter.prototype.leaveKey = function leaveKey(index, key, value) { + var state = this._reporterState; + + this.exitKey(index); + if (state.obj !== null) + state.obj[key] = value; +}; + +Reporter.prototype.path = function path() { + return this._reporterState.path.join('/'); +}; + +Reporter.prototype.enterObject = function enterObject() { + var state = this._reporterState; + + var prev = state.obj; + state.obj = {}; + return prev; +}; + +Reporter.prototype.leaveObject = function leaveObject(prev) { + var state = this._reporterState; + + var now = state.obj; + state.obj = prev; + return now; +}; + +Reporter.prototype.error = function error(msg) { + var err; + var state = this._reporterState; + + var inherited = msg instanceof ReporterError; + if (inherited) { + err = msg; + } else { + err = new ReporterError(state.path.map(function(elem) { + return '[' + JSON.stringify(elem) + ']'; + }).join(''), msg.message || msg, msg.stack); + } + + if (!state.options.partial) + throw err; + + if (!inherited) + state.errors.push(err); + + return err; +}; + +Reporter.prototype.wrapResult = function wrapResult(result) { + var state = this._reporterState; + if (!state.options.partial) + return result; + + return { + result: this.isError(result) ? null : result, + errors: state.errors + }; +}; + +function ReporterError(path, msg) { + this.path = path; + this.rethrow(msg); +}; +inherits(ReporterError, Error); + +ReporterError.prototype.rethrow = function rethrow(msg) { + this.message = msg + ' at: ' + (this.path || '(shallow)'); + if (Error.captureStackTrace) + Error.captureStackTrace(this, ReporterError); + + if (!this.stack) { + try { + // IE only adds stack when thrown + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; + } + } + return this; +}; + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/constants/der.js": +/*!************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/constants/der.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var constants = __webpack_require__(/*! ../constants */ "../../node_modules/asn1.js/lib/asn1/constants/index.js"); + +exports.tagClass = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private' +}; +exports.tagClassByName = constants._reverse(exports.tagClass); + +exports.tag = { + 0x00: 'end', + 0x01: 'bool', + 0x02: 'int', + 0x03: 'bitstr', + 0x04: 'octstr', + 0x05: 'null_', + 0x06: 'objid', + 0x07: 'objDesc', + 0x08: 'external', + 0x09: 'real', + 0x0a: 'enum', + 0x0b: 'embed', + 0x0c: 'utf8str', + 0x0d: 'relativeOid', + 0x10: 'seq', + 0x11: 'set', + 0x12: 'numstr', + 0x13: 'printstr', + 0x14: 't61str', + 0x15: 'videostr', + 0x16: 'ia5str', + 0x17: 'utctime', + 0x18: 'gentime', + 0x19: 'graphstr', + 0x1a: 'iso646str', + 0x1b: 'genstr', + 0x1c: 'unistr', + 0x1d: 'charstr', + 0x1e: 'bmpstr' +}; +exports.tagByName = constants._reverse(exports.tag); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/constants/index.js": +/*!**************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/constants/index.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var constants = exports; + +// Helper +constants._reverse = function reverse(map) { + var res = {}; + + Object.keys(map).forEach(function(key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) + key = key | 0; + + var value = map[key]; + res[value] = key; + }); + + return res; +}; + +constants.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/constants/der.js"); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/decoders/der.js": +/*!***********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/decoders/der.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +var asn1 = __webpack_require__(/*! ../../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); +var base = asn1.base; +var bignum = asn1.bignum; + +// Import DER constants +var der = asn1.constants.der; + +function DERDecoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DERDecoder; + +DERDecoder.prototype.decode = function decode(data, options) { + if (!(data instanceof base.DecoderBuffer)) + data = new base.DecoderBuffer(data, options); + + return this.tree._decode(data, options); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { + if (buffer.isEmpty()) + return false; + + var state = buffer.save(); + var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + buffer.restore(state); + + return decodedTag.tag === tag || decodedTag.tagStr === tag || + (decodedTag.tagStr + 'of') === tag || any; +}; + +DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { + var decodedTag = derDecodeTag(buffer, + 'Failed to decode tag of "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + var len = derDecodeLen(buffer, + decodedTag.primitive, + 'Failed to get length of "' + tag + '"'); + + // Failure + if (buffer.isError(len)) + return len; + + if (!any && + decodedTag.tag !== tag && + decodedTag.tagStr !== tag && + decodedTag.tagStr + 'of' !== tag) { + return buffer.error('Failed to match tag: "' + tag + '"'); + } + + if (decodedTag.primitive || len !== null) + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); + + // Indefinite length... find END tag + var state = buffer.save(); + var res = this._skipUntilEnd( + buffer, + 'Failed to skip indefinite length body: "' + this.tag + '"'); + if (buffer.isError(res)) + return res; + + len = buffer.offset - state.offset; + buffer.restore(state); + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +}; + +DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { + while (true) { + var tag = derDecodeTag(buffer, fail); + if (buffer.isError(tag)) + return tag; + var len = derDecodeLen(buffer, tag.primitive, fail); + if (buffer.isError(len)) + return len; + + var res; + if (tag.primitive || len !== null) + res = buffer.skip(len) + else + res = this._skipUntilEnd(buffer, fail); + + // Failure + if (buffer.isError(res)) + return res; + + if (tag.tagStr === 'end') + break; + } +}; + +DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, + options) { + var result = []; + while (!buffer.isEmpty()) { + var possibleEnd = this._peekTag(buffer, 'end'); + if (buffer.isError(possibleEnd)) + return possibleEnd; + + var res = decoder.decode(buffer, 'der', options); + if (buffer.isError(res) && possibleEnd) + break; + result.push(res); + } + return result; +}; + +DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { + if (tag === 'bitstr') { + var unused = buffer.readUInt8(); + if (buffer.isError(unused)) + return unused; + return { unused: unused, data: buffer.raw() }; + } else if (tag === 'bmpstr') { + var raw = buffer.raw(); + if (raw.length % 2 === 1) + return buffer.error('Decoding of string type: bmpstr length mismatch'); + + var str = ''; + for (var i = 0; i < raw.length / 2; i++) { + str += String.fromCharCode(raw.readUInt16BE(i * 2)); + } + return str; + } else if (tag === 'numstr') { + var numstr = buffer.raw().toString('ascii'); + if (!this._isNumstr(numstr)) { + return buffer.error('Decoding of string type: ' + + 'numstr unsupported characters'); + } + return numstr; + } else if (tag === 'octstr') { + return buffer.raw(); + } else if (tag === 'objDesc') { + return buffer.raw(); + } else if (tag === 'printstr') { + var printstr = buffer.raw().toString('ascii'); + if (!this._isPrintstr(printstr)) { + return buffer.error('Decoding of string type: ' + + 'printstr unsupported characters'); + } + return printstr; + } else if (/str$/.test(tag)) { + return buffer.raw().toString(); + } else { + return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + } +}; + +DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { + var result; + var identifiers = []; + var ident = 0; + while (!buffer.isEmpty()) { + var subident = buffer.readUInt8(); + ident <<= 7; + ident |= subident & 0x7f; + if ((subident & 0x80) === 0) { + identifiers.push(ident); + ident = 0; + } + } + if (subident & 0x80) + identifiers.push(ident); + + var first = (identifiers[0] / 40) | 0; + var second = identifiers[0] % 40; + + if (relative) + result = identifiers; + else + result = [first, second].concat(identifiers.slice(1)); + + if (values) { + var tmp = values[result.join(' ')]; + if (tmp === undefined) + tmp = values[result.join('.')]; + if (tmp !== undefined) + result = tmp; + } + + return result; +}; + +DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { + var str = buffer.raw().toString(); + if (tag === 'gentime') { + var year = str.slice(0, 4) | 0; + var mon = str.slice(4, 6) | 0; + var day = str.slice(6, 8) | 0; + var hour = str.slice(8, 10) | 0; + var min = str.slice(10, 12) | 0; + var sec = str.slice(12, 14) | 0; + } else if (tag === 'utctime') { + var year = str.slice(0, 2) | 0; + var mon = str.slice(2, 4) | 0; + var day = str.slice(4, 6) | 0; + var hour = str.slice(6, 8) | 0; + var min = str.slice(8, 10) | 0; + var sec = str.slice(10, 12) | 0; + if (year < 70) + year = 2000 + year; + else + year = 1900 + year; + } else { + return buffer.error('Decoding ' + tag + ' time is not supported yet'); + } + + return Date.UTC(year, mon - 1, day, hour, min, sec, 0); +}; + +DERNode.prototype._decodeNull = function decodeNull(buffer) { + return null; +}; + +DERNode.prototype._decodeBool = function decodeBool(buffer) { + var res = buffer.readUInt8(); + if (buffer.isError(res)) + return res; + else + return res !== 0; +}; + +DERNode.prototype._decodeInt = function decodeInt(buffer, values) { + // Bigint, return as it is (assume big endian) + var raw = buffer.raw(); + var res = new bignum(raw); + + if (values) + res = values[res.toString(10)] || res; + + return res; +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getDecoder('der').tree; +}; + +// Utility methods + +function derDecodeTag(buf, fail) { + var tag = buf.readUInt8(fail); + if (buf.isError(tag)) + return tag; + + var cls = der.tagClass[tag >> 6]; + var primitive = (tag & 0x20) === 0; + + // Multi-octet tag - load + if ((tag & 0x1f) === 0x1f) { + var oct = tag; + tag = 0; + while ((oct & 0x80) === 0x80) { + oct = buf.readUInt8(fail); + if (buf.isError(oct)) + return oct; + + tag <<= 7; + tag |= oct & 0x7f; + } + } else { + tag &= 0x1f; + } + var tagStr = der.tag[tag]; + + return { + cls: cls, + primitive: primitive, + tag: tag, + tagStr: tagStr + }; +} + +function derDecodeLen(buf, primitive, fail) { + var len = buf.readUInt8(fail); + if (buf.isError(len)) + return len; + + // Indefinite form + if (!primitive && len === 0x80) + return null; + + // Definite form + if ((len & 0x80) === 0) { + // Short form + return len; + } + + // Long form + var num = len & 0x7f; + if (num > 4) + return buf.error('length octect is too long'); + + len = 0; + for (var i = 0; i < num; i++) { + len <<= 8; + var j = buf.readUInt8(fail); + if (buf.isError(j)) + return j; + len |= j; + } + + return len; +} + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/decoders/index.js": +/*!*************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/decoders/index.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var decoders = exports; + +decoders.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/decoders/der.js"); +decoders.pem = __webpack_require__(/*! ./pem */ "../../node_modules/asn1.js/lib/asn1/decoders/pem.js"); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/decoders/pem.js": +/*!***********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/decoders/pem.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); + +var DERDecoder = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/decoders/der.js"); + +function PEMDecoder(entity) { + DERDecoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMDecoder, DERDecoder); +module.exports = PEMDecoder; + +PEMDecoder.prototype.decode = function decode(data, options) { + var lines = data.toString().split(/[\r\n]+/g); + + var label = options.label.toUpperCase(); + + var re = /^-----(BEGIN|END) ([^-]+)-----$/; + var start = -1; + var end = -1; + for (var i = 0; i < lines.length; i++) { + var match = lines[i].match(re); + if (match === null) + continue; + + if (match[2] !== label) + continue; + + if (start === -1) { + if (match[1] !== 'BEGIN') + break; + start = i; + } else { + if (match[1] !== 'END') + break; + end = i; + break; + } + } + if (start === -1 || end === -1) + throw new Error('PEM section not found for: ' + label); + + var base64 = lines.slice(start + 1, end).join(''); + // Remove excessive symbols + base64.replace(/[^a-z0-9\+\/=]+/gi, ''); + + var input = new Buffer(base64, 'base64'); + return DERDecoder.prototype.decode.call(this, input, options); +}; + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/encoders/der.js": +/*!***********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/encoders/der.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); + +var asn1 = __webpack_require__(/*! ../../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); +var base = asn1.base; + +// Import DER constants +var der = asn1.constants.der; + +function DEREncoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DEREncoder; + +DEREncoder.prototype.encode = function encode(data, reporter) { + return this.tree._encode(data, reporter).join(); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._encodeComposite = function encodeComposite(tag, + primitive, + cls, + content) { + var encodedTag = encodeTag(tag, primitive, cls, this.reporter); + + // Short form + if (content.length < 0x80) { + var header = new Buffer(2); + header[0] = encodedTag; + header[1] = content.length; + return this._createEncoderBuffer([ header, content ]); + } + + // Long form + // Count octets required to store length + var lenOctets = 1; + for (var i = content.length; i >= 0x100; i >>= 8) + lenOctets++; + + var header = new Buffer(1 + 1 + lenOctets); + header[0] = encodedTag; + header[1] = 0x80 | lenOctets; + + for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) + header[i] = j & 0xff; + + return this._createEncoderBuffer([ header, content ]); +}; + +DERNode.prototype._encodeStr = function encodeStr(str, tag) { + if (tag === 'bitstr') { + return this._createEncoderBuffer([ str.unused | 0, str.data ]); + } else if (tag === 'bmpstr') { + var buf = new Buffer(str.length * 2); + for (var i = 0; i < str.length; i++) { + buf.writeUInt16BE(str.charCodeAt(i), i * 2); + } + return this._createEncoderBuffer(buf); + } else if (tag === 'numstr') { + if (!this._isNumstr(str)) { + return this.reporter.error('Encoding of string type: numstr supports ' + + 'only digits and space'); + } + return this._createEncoderBuffer(str); + } else if (tag === 'printstr') { + if (!this._isPrintstr(str)) { + return this.reporter.error('Encoding of string type: printstr supports ' + + 'only latin upper and lower case letters, ' + + 'digits, space, apostrophe, left and rigth ' + + 'parenthesis, plus sign, comma, hyphen, ' + + 'dot, slash, colon, equal sign, ' + + 'question mark'); + } + return this._createEncoderBuffer(str); + } else if (/str$/.test(tag)) { + return this._createEncoderBuffer(str); + } else if (tag === 'objDesc') { + return this._createEncoderBuffer(str); + } else { + return this.reporter.error('Encoding of string type: ' + tag + + ' unsupported'); + } +}; + +DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { + if (typeof id === 'string') { + if (!values) + return this.reporter.error('string objid given, but no values map found'); + if (!values.hasOwnProperty(id)) + return this.reporter.error('objid not found in values map'); + id = values[id].split(/[\s\.]+/g); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } else if (Array.isArray(id)) { + id = id.slice(); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } + + if (!Array.isArray(id)) { + return this.reporter.error('objid() should be either array or string, ' + + 'got: ' + JSON.stringify(id)); + } + + if (!relative) { + if (id[1] >= 40) + return this.reporter.error('Second objid identifier OOB'); + id.splice(0, 2, id[0] * 40 + id[1]); + } + + // Count number of octets + var size = 0; + for (var i = 0; i < id.length; i++) { + var ident = id[i]; + for (size++; ident >= 0x80; ident >>= 7) + size++; + } + + var objid = new Buffer(size); + var offset = objid.length - 1; + for (var i = id.length - 1; i >= 0; i--) { + var ident = id[i]; + objid[offset--] = ident & 0x7f; + while ((ident >>= 7) > 0) + objid[offset--] = 0x80 | (ident & 0x7f); + } + + return this._createEncoderBuffer(objid); +}; + +function two(num) { + if (num < 10) + return '0' + num; + else + return num; +} + +DERNode.prototype._encodeTime = function encodeTime(time, tag) { + var str; + var date = new Date(time); + + if (tag === 'gentime') { + str = [ + two(date.getFullYear()), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else if (tag === 'utctime') { + str = [ + two(date.getFullYear() % 100), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else { + this.reporter.error('Encoding ' + tag + ' time is not supported yet'); + } + + return this._encodeStr(str, 'octstr'); +}; + +DERNode.prototype._encodeNull = function encodeNull() { + return this._createEncoderBuffer(''); +}; + +DERNode.prototype._encodeInt = function encodeInt(num, values) { + if (typeof num === 'string') { + if (!values) + return this.reporter.error('String int or enum given, but no values map'); + if (!values.hasOwnProperty(num)) { + return this.reporter.error('Values map doesn\'t contain: ' + + JSON.stringify(num)); + } + num = values[num]; + } + + // Bignum, assume big endian + if (typeof num !== 'number' && !Buffer.isBuffer(num)) { + var numArray = num.toArray(); + if (!num.sign && numArray[0] & 0x80) { + numArray.unshift(0); + } + num = new Buffer(numArray); + } + + if (Buffer.isBuffer(num)) { + var size = num.length; + if (num.length === 0) + size++; + + var out = new Buffer(size); + num.copy(out); + if (num.length === 0) + out[0] = 0 + return this._createEncoderBuffer(out); + } + + if (num < 0x80) + return this._createEncoderBuffer(num); + + if (num < 0x100) + return this._createEncoderBuffer([0, num]); + + var size = 1; + for (var i = num; i >= 0x100; i >>= 8) + size++; + + var out = new Array(size); + for (var i = out.length - 1; i >= 0; i--) { + out[i] = num & 0xff; + num >>= 8; + } + if(out[0] & 0x80) { + out.unshift(0); + } + + return this._createEncoderBuffer(new Buffer(out)); +}; + +DERNode.prototype._encodeBool = function encodeBool(value) { + return this._createEncoderBuffer(value ? 0xff : 0); +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getEncoder('der').tree; +}; + +DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { + var state = this._baseState; + var i; + if (state['default'] === null) + return false; + + var data = dataBuffer.join(); + if (state.defaultBuffer === undefined) + state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); + + if (data.length !== state.defaultBuffer.length) + return false; + + for (i=0; i < data.length; i++) + if (data[i] !== state.defaultBuffer[i]) + return false; + + return true; +}; + +// Utility methods + +function encodeTag(tag, primitive, cls, reporter) { + var res; + + if (tag === 'seqof') + tag = 'seq'; + else if (tag === 'setof') + tag = 'set'; + + if (der.tagByName.hasOwnProperty(tag)) + res = der.tagByName[tag]; + else if (typeof tag === 'number' && (tag | 0) === tag) + res = tag; + else + return reporter.error('Unknown tag: ' + tag); + + if (res >= 0x1f) + return reporter.error('Multi-octet tag encoding unsupported'); + + if (!primitive) + res |= 0x20; + + res |= (der.tagClassByName[cls || 'universal'] << 6); + + return res; +} + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/encoders/index.js": +/*!*************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/encoders/index.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var encoders = exports; + +encoders.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/encoders/der.js"); +encoders.pem = __webpack_require__(/*! ./pem */ "../../node_modules/asn1.js/lib/asn1/encoders/pem.js"); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/encoders/pem.js": +/*!***********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/encoders/pem.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +var DEREncoder = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/encoders/der.js"); + +function PEMEncoder(entity) { + DEREncoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMEncoder, DEREncoder); +module.exports = PEMEncoder; + +PEMEncoder.prototype.encode = function encode(data, options) { + var buf = DEREncoder.prototype.encode.call(this, data); + + var p = buf.toString('base64'); + var out = [ '-----BEGIN ' + options.label + '-----' ]; + for (var i = 0; i < p.length; i += 64) + out.push(p.slice(i, i + 64)); + out.push('-----END ' + options.label + '-----'); + return out.join('\n'); +}; + + +/***/ }), + +/***/ "../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js": +/*!***************************************************************!*\ + !*** ../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js ***! + \***************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(/*! buffer */ "?98fd").Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); } - if (!dontSelect && this.$undoSelect) { - if (deltas.selectionBefore) - this.selection.fromJSON(deltas.selectionBefore); - else - this.selection.setRange(this.$getUndoSelection(deltas, true)); + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - this.$fromUndo = false; - }; - EditSession.prototype.redoChanges = function (deltas, dontSelect) { - if (!deltas.length) - return; - this.$fromUndo = true; - for (var i = 0; i < deltas.length; i++) { - var delta = deltas[i]; - if (delta.action == "insert" || delta.action == "remove") { - this.doc.$safeApplyDelta(delta); - } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - if (!dontSelect && this.$undoSelect) { - if (deltas.selectionAfter) - this.selection.fromJSON(deltas.selectionAfter); - else - this.selection.setRange(this.$getUndoSelection(deltas, false)); + } + } + return this.strip(); + }; + + function parseHex4Bits (string, index) { + var c = string.charCodeAt(index); + // 'A' - 'F' + if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return (c - 48) & 0xf; + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - this.$fromUndo = false; - }; - EditSession.prototype.setUndoSelect = function (enable) { - this.$undoSelect = enable; - }; - EditSession.prototype.$getUndoSelection = function (deltas, isUndo) { - function isInsert(delta) { - return isUndo ? delta.action !== "insert" : delta.action === "insert"; + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - var range, point; - for (var i = 0; i < deltas.length; i++) { - var delta = deltas[i]; - if (!delta.start) - continue; // skip folds - if (!range) { - if (isInsert(delta)) { - range = Range.fromPoints(delta.start, delta.end); - } - else { - range = Range.fromPoints(delta.start, delta.start); - } - continue; - } - if (isInsert(delta)) { - point = delta.start; - if (range.compare(point.row, point.column) == -1) { - range.setStart(point); - } - point = delta.end; - if (range.compare(point.row, point.column) == 1) { - range.setEnd(point); - } - } - else { - point = delta.start; - if (range.compare(point.row, point.column) == -1) { - range = Range.fromPoints(delta.start, delta.start); - } - } + } + } + + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this.strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; } - return range; - }; - EditSession.prototype.replace = function (range, text) { - return this.doc.replace(range, text); - }; - EditSession.prototype.moveText = function (fromRange, toPosition, copy) { - var text = this.getTextRange(fromRange); - var folds = this.getFoldsInRange(fromRange); - var toRange = Range.fromPoints(toPosition, toPosition); - if (!copy) { - this.remove(fromRange); - var rowDiff = fromRange.start.row - fromRange.end.row; - var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; - if (collDiff) { - if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) - toRange.start.column += collDiff; - if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) - toRange.end.column += collDiff; - } - if (rowDiff && toRange.start.row >= fromRange.end.row) { - toRange.start.row += rowDiff; - toRange.end.row += rowDiff; - } + off += 2; + if (off >= 26) { + off -= 26; + i--; } - toRange.end = this.insert(toRange.start, text); - if (folds.length) { - var oldStart = fromRange.start; - var newStart = toRange.start; - var rowDiff = newStart.row - oldStart.row; - var collDiff = newStart.column - oldStart.column; - this.addFolds(folds.map(function (x) { - x = x.clone(); - if (x.start.row == oldStart.row) - x.start.column += collDiff; - if (x.end.row == oldStart.row) - x.end.column += collDiff; - x.start.row += rowDiff; - x.end.row += rowDiff; - return x; - })); + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; } - return toRange; - }; - EditSession.prototype.indentRows = function (startRow, endRow, indentString) { - indentString = indentString.replace(/\t/g, this.getTabString()); - for (var row = startRow; row <= endRow; row++) - this.doc.insertInLine({ row: row, column: 0 }, indentString); + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); }; - EditSession.prototype.outdentRows = function (range) { - var rowRange = range.collapseRows(); - var deleteRange = new Range(0, 0, 0, 0); - var size = this.getTabSize(); - for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { - var line = this.getLine(i); - deleteRange.start.row = i; - deleteRange.end.row = i; - for (var j = 0; j < size; ++j) - if (line.charAt(j) != ' ') - break; - if (j < size && line.charAt(j) == '\t') { - deleteRange.start.column = j; - deleteRange.end.column = j + 1; - } - else { - deleteRange.start.column = 0; - deleteRange.end.column = j; - } - this.remove(deleteRange); - } + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; }; - EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) { - firstRow = this.getRowFoldStart(firstRow); - lastRow = this.getRowFoldEnd(lastRow); - if (dir < 0) { - var row = this.getRowFoldStart(firstRow + dir); - if (row < 0) - return 0; - var diff = row - firstRow; - } - else if (dir > 0) { - var row = this.getRowFoldEnd(lastRow + dir); - if (row > this.doc.getLength() - 1) - return 0; - var diff = row - lastRow; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } } - else { - firstRow = this.$clipRowToDocument(firstRow); - lastRow = this.$clipRowToDocument(lastRow); - var diff = lastRow - firstRow + 1; + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; } - var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); - var folds = this.getFoldsInRange(range).map(function (x) { - x = x.clone(); - x.start.row += diff; - x.end.row += diff; - return x; - }); - var lines = dir == 0 - ? this.doc.getLines(firstRow, lastRow) - : this.doc.removeFullLines(firstRow, lastRow); - this.doc.insertFullLines(firstRow + diff, lines); - folds.length && this.addFolds(folds); - return diff; - }; - EditSession.prototype.moveLinesUp = function (firstRow, lastRow) { - return this.$moveLines(firstRow, lastRow, -1); - }; - EditSession.prototype.moveLinesDown = function (firstRow, lastRow) { - return this.$moveLines(firstRow, lastRow, 1); - }; - EditSession.prototype.duplicateLines = function (firstRow, lastRow) { - return this.$moveLines(firstRow, lastRow, 0); - }; - EditSession.prototype.$clipRowToDocument = function (row) { - return Math.max(0, Math.min(row, this.doc.getLength() - 1)); - }; - EditSession.prototype.$clipColumnToRow = function (row, column) { - if (column < 0) - return 0; - return Math.min(this.doc.getLine(row).length, column); + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a }; - EditSession.prototype.$clipPositionToDocument = function (row, column) { - column = Math.max(0, column); - if (row < 0) { - row = 0; - column = 0; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); } - else { - var len = this.doc.getLength(); - if (row >= len) { - row = len - 1; - column = this.doc.getLine(len - 1).length; - } - else { - column = Math.min(this.doc.getLine(row).length, column); - } + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); } + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { return { - row: row, - column: column + div: this.divn(num.words[0]), + mod: null }; - }; - EditSession.prototype.$clipRangeToDocument = function (range) { - if (range.start.row < 0) { - range.start.row = 0; - range.start.column = 0; - } - else { - range.start.column = this.$clipColumnToRow(range.start.row, range.start.column); - } - var len = this.doc.getLength() - 1; - if (range.end.row > len) { - range.end.row = len; - range.end.column = this.doc.getLine(len).length; - } - else { - range.end.column = this.$clipColumnToRow(range.end.row, range.end.column); - } - return range; - }; - EditSession.prototype.setUseWrapMode = function (useWrapMode) { - if (useWrapMode != this.$useWrapMode) { - this.$useWrapMode = useWrapMode; - this.$modified = true; - this.$resetRowCache(0); - if (useWrapMode) { - var len = this.getLength(); - this.$wrapData = Array(len); - this.$updateWrapData(0, len - 1); - } - this._signal("changeWrapMode"); - } - }; - EditSession.prototype.getUseWrapMode = function () { - return this.$useWrapMode; - }; - EditSession.prototype.setWrapLimitRange = function (min, max) { - if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { - this.$wrapLimitRange = { min: min, max: max }; - this.$modified = true; - this.$bidiHandler.markAsDirty(); - if (this.$useWrapMode) - this._signal("changeWrapMode"); - } - }; - EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) { - var limits = this.$wrapLimitRange; - if (limits.max < 0) - limits = { min: $printMargin, max: $printMargin }; - var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); - if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { - this.$wrapLimit = wrapLimit; - this.$modified = true; - if (this.$useWrapMode) { - this.$updateWrapData(0, this.getLength() - 1); - this.$resetRowCache(0); - this._signal("changeWrapLimit"); - } - return true; - } - return false; - }; - EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) { - if (min) - wrapLimit = Math.max(min, wrapLimit); - if (max) - wrapLimit = Math.min(max, wrapLimit); - return wrapLimit; - }; - EditSession.prototype.getWrapLimit = function () { - return this.$wrapLimit; - }; - EditSession.prototype.setWrapLimit = function (limit) { - this.setWrapLimitRange(limit, limit); - }; - EditSession.prototype.getWrapLimitRange = function () { + } + + if (mode === 'mod') { return { - min: this.$wrapLimitRange.min, - max: this.$wrapLimitRange.max + div: null, + mod: new BN(this.modn(num.words[0])) }; - }; - EditSession.prototype.$updateInternalDataOnChange = function (delta) { - var useWrapMode = this.$useWrapMode; - var action = delta.action; - var start = delta.start; - var end = delta.end; - var firstRow = start.row; - var lastRow = end.row; - var len = lastRow - firstRow; - var removedFolds = null; - this.$updating = true; - if (len != 0) { - if (action === "remove") { - this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); - var foldLines = this.$foldData; - removedFolds = this.getFoldsInRange(delta); - this.removeFolds(removedFolds); - var foldLine = this.getFoldLine(end.row); - var idx = 0; - if (foldLine) { - foldLine.addRemoveChars(end.row, end.column, start.column - end.column); - foldLine.shiftRow(-len); - var foldLineBefore = this.getFoldLine(firstRow); - if (foldLineBefore && foldLineBefore !== foldLine) { - foldLineBefore.merge(foldLine); - foldLine = foldLineBefore; - } - idx = foldLines.indexOf(foldLine) + 1; - } - for (idx; idx < foldLines.length; idx++) { - var foldLine = foldLines[idx]; - if (foldLine.start.row >= end.row) { - foldLine.shiftRow(-len); - } - } - lastRow = firstRow; - } - else { - var args = Array(len); - args.unshift(firstRow, 0); - var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache; - arr.splice.apply(arr, args); - var foldLines = this.$foldData; - var foldLine = this.getFoldLine(firstRow); - var idx = 0; - if (foldLine) { - var cmp = foldLine.range.compareInside(start.row, start.column); - if (cmp == 0) { - foldLine = foldLine.split(start.row, start.column); - if (foldLine) { - foldLine.shiftRow(len); - foldLine.addRemoveChars(lastRow, 0, end.column - start.column); - } - } - else - if (cmp == -1) { - foldLine.addRemoveChars(firstRow, 0, end.column - start.column); - foldLine.shiftRow(len); - } - idx = foldLines.indexOf(foldLine) + 1; - } - for (idx; idx < foldLines.length; idx++) { - var foldLine = foldLines[idx]; - if (foldLine.start.row >= firstRow) { - foldLine.shiftRow(len); - } - } - } - } - else { - len = Math.abs(delta.start.column - delta.end.column); - if (action === "remove") { - removedFolds = this.getFoldsInRange(delta); - this.removeFolds(removedFolds); - len = -len; - } - var foldLine = this.getFoldLine(firstRow); - if (foldLine) { - foldLine.addRemoveChars(firstRow, start.column, len); - } + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); } - if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { - console.error("doc.getLength() and $wrapData.length have to be the same!"); + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); } - this.$updating = false; - if (useWrapMode) - this.$updateWrapData(firstRow, lastRow); - else - this.$updateRowLengthCache(firstRow, lastRow); - return removedFolds; - }; - EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) { - this.$rowLengthCache[firstRow] = null; - this.$rowLengthCache[lastRow] = null; + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) }; - EditSession.prototype.$updateWrapData = function (firstRow, lastRow) { - var lines = this.doc.getAllLines(); - var tabSize = this.getTabSize(); - var wrapData = this.$wrapData; - var wrapLimit = this.$wrapLimit; - var tokens; - var foldLine; - var row = firstRow; - lastRow = Math.min(lastRow, lines.length - 1); - while (row <= lastRow) { - foldLine = this.getFoldLine(row, foldLine); - if (!foldLine) { - tokens = this.$getDisplayTokens(lines[row]); - wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); - row++; - } - else { - tokens = []; - foldLine.walk(function (placeholder, row, column, lastColumn) { - var walkTokens; - if (placeholder != null) { - walkTokens = this.$getDisplayTokens(placeholder, tokens.length); - walkTokens[0] = PLACEHOLDER_START; - for (var i = 1; i < walkTokens.length; i++) { - walkTokens[i] = PLACEHOLDER_BODY; - } - } - else { - walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length); - } - tokens = tokens.concat(walkTokens); - }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1); - wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); - row = foldLine.end.row + 1; - } + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); } - }; - EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) { - if (tokens.length == 0) { - return []; + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); } - var splits = []; - var displayLength = tokens.length; - var lastSplit = 0, lastDocSplit = 0; - var isCode = this.$wrapAsCode; - var indentedSoftWrap = this.$indentedSoftWrap; - var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) - || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2); - function getWrapIndent() { - var indentation = 0; - if (maxIndent === 0) - return indentation; - if (indentedSoftWrap) { - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (token == SPACE) - indentation += 1; - else if (token == TAB) - indentation += tabSize; - else if (token == TAB_SPACE) - continue; - else - break; - } - } - if (isCode && indentedSoftWrap !== false) - indentation += tabSize; - return Math.min(indentation, maxIndent); + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is BN v4 instance + r.strip(); + } else { + // r is BN v5 instance + r._strip(); + } + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); } - function addSplit(screenPos) { - var len = screenPos - lastSplit; - for (var i = lastSplit; i < screenPos; i++) { - var ch = tokens[i]; - if (ch === 12 || ch === 2) - len -= 1; - } - if (!splits.length) { - indent = getWrapIndent(); - splits.indent = indent; - } - lastDocSplit += len; - splits.push(lastDocSplit); - lastSplit = screenPos; + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; } - var indent = 0; - while (displayLength - lastSplit > wrapLimit - indent) { - var split = lastSplit + wrapLimit - indent; - if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { - addSplit(split); - continue; - } - if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { - for (split; split != lastSplit - 1; split--) { - if (tokens[split] == PLACEHOLDER_START) { - break; - } - } - if (split > lastSplit) { - addSplit(split); - continue; - } - split = lastSplit + wrapLimit; - for (split; split < tokens.length; split++) { - if (tokens[split] != PLACEHOLDER_BODY) { - break; - } - } - if (split == tokens.length) { - break; // Breaks the while-loop. - } - addSplit(split); - continue; - } - var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1); - while (split > minSplit && tokens[split] < PLACEHOLDER_START) { - split--; - } - if (isCode) { - while (split > minSplit && tokens[split] < PLACEHOLDER_START) { - split--; - } - while (split > minSplit && tokens[split] == PUNCTUATION) { - split--; - } - } - else { - while (split > minSplit && tokens[split] < SPACE) { - split--; + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); + + +/***/ }), + +/***/ "./src/annotation_widget.ts": +/*!**********************************!*\ + !*** ./src/annotation_widget.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AnnontationWidget: () => (/* binding */ AnnontationWidget) +/* harmony export */ }); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var _style_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../style/bootstrap.min.css */ "./style/bootstrap.min.css"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + +var AnnontationWidget = /*#__PURE__*/function (_Widget) { + function AnnontationWidget(expId) { + var _this; + _classCallCheck(this, AnnontationWidget); + _this = _callSuper(this, AnnontationWidget, [{ + node: AnnontationWidget.createNode() + }]); + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); + _this.expId = expId; + _this.addClass('content'); + _this.title.label = "Annotation"; + _this.title.closable = false; + _this.title.caption = "Annontation"; + _this.setNode(); + _this.setAnnotationLevelToExperiment(); + return _this; + } + _inherits(AnnontationWidget, _Widget); + return _createClass(AnnontationWidget, [{ + key: "onBeforeHide", + value: function onBeforeHide(msg) { + this.setAnnotationLevelToExperiment(); + } + }, { + key: "setAnnotationLevelToExperiment", + value: function setAnnotationLevelToExperiment() { + this.trialId = ""; + this.fetchUrl = "/experiments/" + this.expId + "/extendedAnnotation"; + this.annotationLevel = "Experiment"; + this.anntTitle.text("Annotations for Experiment: " + this.expId); + this.setAnnotations(); + } + }, { + key: "setAnnotationLevelToTrial", + value: function setAnnotationLevelToTrial(trialId) { + this.trialId = trialId; + this.anntTitle.text("Annotations for Trial: " + this.trialId); + this.fetchUrl = "/trials/" + this.trialId + "/extendedAnnotation"; + this.annotationLevel = "Trial"; + this.setAnnotations(); + } + }, { + key: "activeAnnotation", + value: function activeAnnotation(trialId) { + var parentDock = this.parent; + parentDock.activateWidget(this); + this.setAnnotationLevelToTrial(trialId); + } + }, { + key: "fillAnnotations", + value: function () { + var _fillAnnotations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { + var _thiss, response, obj; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + this.annotations = new Array(); + _thiss = this; + _context.next = 4; + return fetch(this.fetchUrl, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' } - } - if (split > minSplit) { - addSplit(++split); - continue; - } - split = lastSplit + wrapLimit; - if (tokens[split] == CHAR_EXT) - split--; - addSplit(split - indent); + }); + case 4: + response = _context.sent; + if (!(response.status == 200)) { + _context.next = 13; + break; + } + _thiss.annotations = new Array(); + _context.next = 9; + return response.json(); + case 9: + obj = _context.sent; + obj.forEach(function (item) { + var annt = { + id: item.id, + provenanceType: item.provenanceType, + annotationFormat: item.annotationFormat, + description: item.description, + annotationLevel: item.annotationLevel, + relatedTrial: item.relatedTrial, + relatedExperiment: item.relatedExperiment + }; + _thiss.annotations.push(annt); + }); + _context.next = 14; + break; + case 13: + if (response.status != 404) { + this.showNode(_thiss.errorFeedback); + } + case 14: + case "end": + return _context.stop(); + } + }, _callee, this); + })); + function fillAnnotations() { + return _fillAnnotations.apply(this, arguments); + } + return fillAnnotations; + }() + }, { + key: "addAnntRow", + value: function addAnntRow(annt, tBody) { + var item = tBody.append("tr"); + item.append("th").attr("scope", "row").text(annt.id); + item.append("td").text(annt.description); + item.append("td").text(annt.annotationFormat); + item.append("td").text(annt.provenanceType); + var actions = item.append("td"); + var addMemberButton = actions.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Download Content"); + addMemberButton.on("click", function () { + window.open("/extendedAnnotation/" + annt.id + "/annotation"); + }); + } + }, { + key: "setAnnotations", + value: function () { + var _setAnnotations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { + var _thiss, header, tBody; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + _thiss = this; + this.table.html(""); + header = this.table.append("thead").append("tr"); + header.append("th").attr("scope", "col").text("id"); + header.append("th").attr("scope", "col").text("description"); + header.append("th").attr("scope", "col").text("annotation Format"); + header.append("th").attr("scope", "col").text("provenance Type"); + header.append("th").attr("scope", "col").text("Actions"); + tBody = this.table.append("tbody"); + _context2.next = 11; + return this.fillAnnotations(); + case 11: + this.annotations.forEach(function (obj) { + _thiss.addAnntRow(obj, tBody); + }); + case 12: + case "end": + return _context2.stop(); + } + }, _callee2, this); + })); + function setAnnotations() { + return _setAnnotations.apply(this, arguments); + } + return setAnnotations; + }() + }, { + key: "addFormInput", + value: function addFormInput(form, fieldId, fieldLabel, fieldType) { + var grp = form.append("div").classed("form-group row", true); + grp.append("label").classed("col-sm-2 col-form-label", true).attr("for", fieldId).text(fieldLabel + ": "); + var divIn = grp.append("div").classed("col-sm-10", true); + var inp = divIn.append(fieldType); + inp.classed("form-control", true).attr("id", fieldId); + return inp; + } + }, { + key: "addFeedBackinfo", + value: function addFeedBackinfo(baseNode, cls, txt, desc) { + var _thiss = this; + var feedbackNode = baseNode.append("div").classed("alert", true).classed(cls, true).classed("alert-dismissible", true).classed("fade", true).classed("show", true); + feedbackNode.append("strong").text(txt); + feedbackNode.append("span").text(" " + desc).append("button").attr("type", "button").classed("close", true).attr("data-dismiss", "alert").text("x").on("click", function () { + _thiss.hideNode(feedbackNode); + }); + return feedbackNode; + } + }, { + key: "hideNode", + value: function hideNode(node) { + node.classed("d-none", true); + } + }, { + key: "showNode", + value: function showNode(node) { + node.classed("d-none", false); + } + }, { + key: "getValueFromSelect", + value: function getValueFromSelect(node, defaultVale) { + var option = defaultVale; + var select = node.node(); + if (select != null) { + option = select.options[select.selectedIndex].value; + } + return option; + ; + } + }, { + key: "createAddGroupForm", + value: function createAddGroupForm(projectsDiv) { + var _thiss = this; + var inputsDiv = projectsDiv.append("div"); + var descIn = this.addFormInput(inputsDiv, "descriptionAnntInput", "Description", "textarea"); + var annotationIn = this.addFormInput(inputsDiv, "annotationNameInput", "Annotation", "textarea"); + var annotationFormatIn = this.addFormInput(inputsDiv, "annotationFormatInput", "Annotation Format", "select"); + var provenanceTypeIn = this.addFormInput(inputsDiv, "provenanceTypeInput", "Provenance Type", "select"); + provenanceTypeIn.append("option").attr("value", "Data").text("Data"); + provenanceTypeIn.append("option").attr("value", "Interaction").text("Interaction"); + provenanceTypeIn.append("option").attr("value", "Insight").text("Insight"); + provenanceTypeIn.append("option").attr("value", "Other").text("Other"); + provenanceTypeIn.append("option").attr("value", "Rationale").text("Rationale"); + provenanceTypeIn.append("option").attr("value", "Visualization").text("Visualization"); + annotationFormatIn.append("option").attr("value", "plainText").text("plain text"); + annotationFormatIn.append("option").attr("value", "base64").text("base64"); + annotationFormatIn.append("option").attr("value", "JSON").text("JSON"); + annotationFormatIn.append("option").attr("value", "XML").text("XML"); + var confimButton = inputsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Confirm"); + var addAnntButton = projectsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Add Annotation"); + inputsDiv.classed("d-none", true); + confimButton.on("click", function () { + var annotationFormat = _thiss.getValueFromSelect(annotationFormatIn, "plainText"); + var provenanceType = _thiss.getValueFromSelect(provenanceTypeIn, "Other"); + _thiss.hideNode(_thiss.errorFeedback); + _thiss.hideNode(_thiss.successFeedback); + var newAnnotation = { + annotation: annotationIn.property("value"), + description: descIn.property("value"), + annotationFormat: annotationFormat, + annotationLevel: _thiss.annotationLevel, + provenanceType: provenanceType + }; + fetch(_thiss.fetchUrl, { + method: 'POST', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(newAnnotation) // body data type must match "Content-Type" header + }).then(function (response) { + if (response.status == 201) { + response.json().then(function (obj) { + _thiss.showNode(_thiss.successFeedback); + _thiss.hideNode(inputsDiv); + _thiss.showNode(addAnntButton); + _thiss.setAnnotations(); + }); + } else { + _thiss.showNode(_thiss.errorFeedback); + } + }); + }); + addAnntButton.on("click", function () { + _thiss.showNode(inputsDiv); + _thiss.hideNode(addAnntButton); + }); + } + }, { + key: "setNode", + value: function setNode() { + var content = this.d3node.append('div').classed('config-content', true); + var projectsDiv = content.append("div"); + this.anntTitle = projectsDiv.append("h2"); + this.errorFeedback = this.addFeedBackinfo(projectsDiv, "alert-danger", "Error!", "A problem has been occurred while submitting your data."); + this.successFeedback = this.addFeedBackinfo(projectsDiv, "alert-success", "Success!", ""); + this.hideNode(this.errorFeedback); + this.hideNode(this.successFeedback); + this.createAddGroupForm(projectsDiv); + this.table = projectsDiv.append("table").classed("table", true); + } + }], [{ + key: "createNode", + value: function createNode() { + var node = document.createElement('div'); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/config_widget.ts": +/*!******************************!*\ + !*** ./src/config_widget.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ConfigWidget: () => (/* binding */ ConfigWidget) +/* harmony export */ }); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _graph_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./graph/base_activation_graph */ "./src/graph/base_activation_graph.ts"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + +var ConfigWidget = /*#__PURE__*/function (_Widget) { + function ConfigWidget() { + var _this; + _classCallCheck(this, ConfigWidget); + _this = _callSuper(this, ConfigWidget, [{ + node: ConfigWidget.createNode() + }]); + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); + //this.setFlag(Widget.Flag.DisallowLayout); + _this.addClass('content'); + _this.title.label = "Config"; + _this.title.closable = false; + _this.title.caption = "Configuration"; + return _this; + } + _inherits(ConfigWidget, _Widget); + return _createClass(ConfigWidget, [{ + key: "showTrial", + value: function showTrial() { + return this.d3node.select(".show-graph").property("checked"); + } + }, { + key: "showInfo", + value: function showInfo() { + return this.d3node.select(".show-info").property("checked"); + } + }, { + key: "graphType", + value: function graphType() { + return this.d3node.select(".graph-type").property("value"); + } + }, { + key: "useCache", + value: function useCache() { + return this.d3node.select(".use-cache").property("checked"); + } + }], [{ + key: "createNode", + value: function createNode() { + var node = document.createElement('div'); + var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(node); + var content = d3node.append('div').classed('config-content', true); + var historydiv = content.append("div"); + historydiv.append("h2").text("History Graph"); + var showGraph = historydiv.append("div").classed("graph-attr", true); + showGraph.append("input").attr("type", "checkbox").attr("name", "show_graph").attr("value", "on").attr("checked", true).classed("show-graph", true).attr("id", "config-show-graph"); + showGraph.append("label").attr("for", "config-show-graph").attr("title", "Open trial graph").text("Show trial graph on selection"); + var showInfo = historydiv.append("div").classed("graph-attr", true); + showInfo.append("input").attr("type", "checkbox").attr("name", "show_info").attr("value", "on").attr("checked", true).classed("show-info", true).attr("id", "config-show-info"); + showInfo.append("label").attr("for", "config-show-info").attr("title", "Open trial info").text("Show trial information on selection"); + var trialdiv = content.append("div"); + trialdiv.append("h2").text("Trial Graph"); + _graph_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget.graphTypeForm("config", trialdiv); + _graph_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget.useCacheForm("config", trialdiv); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/database_widget.ts": +/*!********************************!*\ + !*** ./src/database_widget.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DatabaseTabWidget: () => (/* binding */ DatabaseTabWidget), +/* harmony export */ DatabaseWidget: () => (/* binding */ DatabaseWidget), +/* harmony export */ TableInfoWidget: () => (/* binding */ TableInfoWidget) +/* harmony export */ }); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/simulation.js"); +/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/link.js"); +/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/manyBody.js"); +/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/center.js"); +/* harmony import */ var d3_force__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! d3-force */ "../../node_modules/d3-force/src/collide.js"); +/* harmony import */ var d3_scale__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-scale */ "../../node_modules/d3-scale/src/ordinal.js"); +/* harmony import */ var d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! d3-scale-chromatic */ "../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js"); +/* harmony import */ var d3_drag__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-drag */ "../../node_modules/d3-drag/src/drag.js"); +/* harmony import */ var _query_widget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./query_widget */ "./src/query_widget.ts"); +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + + + + + +var DatabaseTabWidget = /*#__PURE__*/function (_Widget) { + function DatabaseTabWidget() { + _classCallCheck(this, DatabaseTabWidget); + return _callSuper(this, DatabaseTabWidget, arguments); + } + _inherits(DatabaseTabWidget, _Widget); + return _createClass(DatabaseTabWidget); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); +var TableInfoWidget = /*#__PURE__*/function (_DatabaseTabWidget) { + function TableInfoWidget(tableName, details) { + var _this; + _classCallCheck(this, TableInfoWidget); + _this = _callSuper(this, TableInfoWidget, [{ + node: TableInfoWidget.createNode(tableName, details) + }]); + _this.title.label = tableName; + _this.title.caption = "Table: ".concat(tableName); + _this.title.closable = true; + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); + return _this; + } + _inherits(TableInfoWidget, _DatabaseTabWidget); + return _createClass(TableInfoWidget, null, [{ + key: "createNode", + value: function createNode(tableName, details) { + var node = document.createElement('div'); + node.style.display = 'flex'; + node.style.flexDirection = 'column'; + node.style.height = '100%'; + node.style.overflow = 'hidden'; + var header = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(node).append('div').style('flex-shrink', '0').style('padding', '1rem').style('border-bottom', '1px solid #eee').style('background', '#f8f9fa'); + header.append('h4').text(tableName).style('margin', '0').style('color', '#333'); + var contentContainer = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(node).append('div').style('flex', '1').style('overflow-y', 'auto').style('overflow-x', 'hidden').style('padding', '1rem'); + if (details.error) { + contentContainer.append('div').style('color', 'red').text('Failed to load table details.'); + } else { + contentContainer.append('h5').text('Columns').style('margin-top', '0').style('margin-bottom', '1rem').style('color', '#495057'); + var columnsTable = contentContainer.append('table').attr('class', 'table table-sm table-bordered').style('width', '100%').style('margin-bottom', '2rem'); + var columnsThead = columnsTable.append('thead').append('tr'); + for (var _i = 0, _arr = ['Name', 'Type', 'NOT NULL', 'Default', 'PK']; _i < _arr.length; _i++) { + var h = _arr[_i]; + columnsThead.append('th').text(h).style('font-size', '0.875rem'); } - return splits; - }; - EditSession.prototype.$getDisplayTokens = function (str, offset) { - var arr = []; - var tabSize; - offset = offset || 0; - for (var i = 0; i < str.length; i++) { - var c = str.charCodeAt(i); - if (c == 9) { - tabSize = this.getScreenTabSize(arr.length + offset); - arr.push(TAB); - for (var n = 1; n < tabSize; n++) { - arr.push(TAB_SPACE); - } - } - else if (c == 32) { - arr.push(SPACE); - } - else if ((c > 39 && c < 48) || (c > 57 && c < 64)) { - arr.push(PUNCTUATION); - } - else if (c >= 0x1100 && isFullWidth(c)) { - arr.push(CHAR, CHAR_EXT); - } - else { - arr.push(CHAR); + ; + var columnsTbody = columnsTable.append('tbody'); + details.columns.forEach(function (col) { + var row = columnsTbody.append('tr'); + row.append('td').text(col.name).style('font-size', '0.875rem'); + row.append('td').text(col.type).style('font-size', '0.875rem'); + row.append('td').text(col.notnull ? 'Yes' : '').style('font-size', '0.875rem'); + row.append('td').text(col["default"] === null ? '' : col["default"]).style('font-size', '0.875rem'); + row.append('td').text(col.pk ? 'Yes' : '').style('font-size', '0.875rem'); + }); + if (details.foreign_keys && details.foreign_keys.length > 0) { + contentContainer.append('h5').text('Foreign Keys').style('margin-top', '0').style('margin-bottom', '1rem').style('color', '#495057'); + var fkTable = contentContainer.append('table').attr('class', 'table table-sm table-bordered').style('width', '100%').style('margin-bottom', '2rem'); + var fkThead = fkTable.append('thead').append('tr'); + for (var _i2 = 0, _arr2 = ['Column', 'References Table', 'References Column']; _i2 < _arr2.length; _i2++) { + var _h = _arr2[_i2]; + fkThead.append('th').text(_h).style('font-size', '0.875rem'); + } + ; + var fkTbody = fkTable.append('tbody'); + var _iterator = _createForOfIteratorHelper(details.foreign_keys), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var fk = _step.value; + var row = fkTbody.append('tr'); + row.append('td').text(fk.from).style('font-size', '0.875rem'); + row.append('td').text(fk.table).style('font-size', '0.875rem'); + row.append('td').text(fk.to).style('font-size', '0.875rem'); } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + ; } - return arr; - }; - EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) { - if (maxScreenColumn == 0) - return [0, 0]; - if (maxScreenColumn == null) - maxScreenColumn = Infinity; - screenColumn = screenColumn || 0; - var c, column; - for (column = 0; column < str.length; column++) { - c = str.charCodeAt(column); - if (c == 9) { - screenColumn += this.getScreenTabSize(screenColumn); - } - else if (c >= 0x1100 && isFullWidth(c)) { - screenColumn += 2; + if (details.referenced_by && details.referenced_by.length > 0) { + contentContainer.append('h5').text('Referenced By').style('margin-top', '0').style('margin-bottom', '1rem').style('color', '#495057'); + var columnReferences = {}; + details.referenced_by.forEach(function (ref) { + if (!columnReferences[ref.referenced_column]) { + columnReferences[ref.referenced_column] = []; } - else { - screenColumn += 1; + columnReferences[ref.referenced_column].push(ref); + }); + var refTable = contentContainer.append('table').attr('class', 'table table-sm table-bordered').style('width', '100%').style('margin-bottom', '2rem'); + var refThead = refTable.append('thead').append('tr'); + for (var _i3 = 0, _arr3 = ['Table', 'Column', 'References Column']; _i3 < _arr3.length; _i3++) { + var _h2 = _arr3[_i3]; + refThead.append('th').text(_h2).style('font-size', '0.875rem'); + } + ; + var refTbody = refTable.append('tbody'); + var _iterator2 = _createForOfIteratorHelper(details.referenced_by), + _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var ref = _step2.value; + var _row = refTbody.append('tr'); + _row.append('td').text(ref.referencing_table).style('font-size', '0.875rem'); + _row.append('td').text(ref.referencing_column).style('font-size', '0.875rem'); + _row.append('td').text(ref.referenced_column).style('font-size', '0.875rem'); } - if (screenColumn > maxScreenColumn) { + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + ; + } + } + return node; + } + }]); +}(DatabaseTabWidget); +var DatabaseWidget = /*#__PURE__*/function (_Widget2) { + function DatabaseWidget(panel) { + var _this2; + _classCallCheck(this, DatabaseWidget); + _this2 = _callSuper(this, DatabaseWidget); + _defineProperty(_this2, "graphData", { + nodes: [], + links: [] + }); + _defineProperty(_this2, "dataLoaded", false); + _defineProperty(_this2, "selectedNodes", new Set()); + _this2.panel = panel; + _this2.title.label = 'Database'; + _this2.title.caption = 'Database'; + var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this2.node); + var container = d3node.append('div').style('display', 'flex').style('flex-direction', 'column').style('height', '100%').style('padding', '1rem'); + var headerContainer = container.append('div').style('display', 'flex').style('justify-content', 'space-between').style('align-items', 'center').style('margin-bottom', '1rem'); + headerContainer.append('h4').text('Database').style('margin', '0').style('color', '#333'); + var controlsContainer = headerContainer.append('div').style('display', 'flex').style('gap', '0.5rem').style('align-items', 'center'); + var tablesDropdown = controlsContainer.append('div').style('position', 'relative').style('display', 'inline-block'); + var dropdownButton = tablesDropdown.append('button').classed('btn btn-outline-primary dropdown-toggle', true).attr('type', 'button').attr('data-toggle', 'dropdown').attr('aria-haspopup', 'true').attr('aria-expanded', 'false').html('Tables ').style('min-width', '120px'); + tablesDropdown.append('div').attr('id', 'tables-dropdown').classed('dropdown-menu', true).style('position', 'absolute').style('top', '100%').style('left', '0').style('z-index', '1000').style('display', 'none').style('min-width', '250px').style('max-height', '300px').style('overflow-y', 'auto').style('background', '#fff').style('border', '1px solid #ccc').style('border-radius', '4px').style('box-shadow', '0 2px 10px rgba(0,0,0,0.1)').style('padding', '0.5rem'); + controlsContainer.append('button').attr('id', 'new-query-btn').classed('btn btn-primary', true).on('click', function () { + return _this2.openNewQueryTab(); + }).html(' New Query'); + controlsContainer.append('button').attr('id', 'clear-selection-btn').classed('btn btn-outline-secondary', true).style('display', 'none').on('click', function () { + return _this2.clearSelection(); + }).html(' Clear Selection'); + container.append('div').attr('id', 'graph-container').style('flex', '1').style('border', '1px solid #ddd').style('border-radius', '4px').style('background', '#f9f9f9').style('position', 'relative'); + _this2.color = (0,d3_scale__WEBPACK_IMPORTED_MODULE_3__["default"])(d3_scale_chromatic__WEBPACK_IMPORTED_MODULE_4__["default"]); + dropdownButton.on('click', function () { + var dropdown = document.getElementById('tables-dropdown'); + if (dropdown) { + var isVisible = dropdown.style.display === 'block'; + dropdown.style.display = isVisible ? 'none' : 'block'; + dropdownButton.attr('aria-expanded', !isVisible); + } + }); + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(document).on('click', function (event) { + var dropdown = document.getElementById('tables-dropdown'); + var button = dropdownButton.node(); + if (dropdown && button && !button.contains(event.target) && !dropdown.contains(event.target)) { + dropdown.style.display = 'none'; + dropdownButton.attr('aria-expanded', 'false'); + } + }); + _this2.showLoadingMessage(); + return _this2; + } + _inherits(DatabaseWidget, _Widget2); + return _createClass(DatabaseWidget, [{ + key: "onAfterShow", + value: function onAfterShow(msg) { + this.fetchAndRenderTables(); + } + }, { + key: "showLoadingMessage", + value: function showLoadingMessage() { + var container = this.node.querySelector('#graph-container'); + if (!container) return; + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).selectAll('*').remove(); + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).append('div').style('display', 'flex').style('justify-content', 'center').style('align-items', 'center').style('height', '100%').style('flex-direction', 'column').style('color', '#666').style('font-size', '16px').html("\n \n
    Click on the Database tab to load database structure
    \n "); + } + }, { + key: "fetchAndRenderTables", + value: function () { + var _fetchAndRenderTables = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { + var dropdownMenu, response, data; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + dropdownMenu = this.node.querySelector('#tables-dropdown'); + if (dropdownMenu) { + _context.next = 4; + break; + } + console.error('Tables dropdown element not found'); + return _context.abrupt("return"); + case 4: + this.showLoadingState(); + this.clearSelection(); + _context.prev = 6; + _context.next = 9; + return fetch('/db/tables'); + case 9: + response = _context.sent; + if (response.ok) { + _context.next = 12; break; + } + throw new Error('Failed to fetch table list'); + case 12: + _context.next = 14; + return response.json(); + case 14: + data = _context.sent; + this.renderTableList(data.tables); + this.buildGraphDataFromTablesResponse(data); + this.initializeGraph(); + this.renderGraph(); + this.dataLoaded = true; + _context.next = 26; + break; + case 22: + _context.prev = 22; + _context.t0 = _context["catch"](6); + console.error('Error fetching tables:', _context.t0); + this.showErrorMessage('Failed to load database structure'); + case 26: + case "end": + return _context.stop(); + } + }, _callee, this, [[6, 22]]); + })); + function fetchAndRenderTables() { + return _fetchAndRenderTables.apply(this, arguments); + } + return fetchAndRenderTables; + }() + }, { + key: "showLoadingState", + value: function showLoadingState() { + var container = this.node.querySelector('#graph-container'); + if (!container) return; + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).selectAll('*').remove(); + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).append('div').style('display', 'flex').style('justify-content', 'center').style('align-items', 'center').style('height', '100%').style('flex-direction', 'column').style('color', '#666').style('font-size', '16px').html("\n \n
    Loading database structure...
    \n "); + } + }, { + key: "showErrorMessage", + value: function showErrorMessage(message) { + var container = this.node.querySelector('#graph-container'); + if (!container) return; + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).selectAll('*').remove(); + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).append('div').style('display', 'flex').style('justify-content', 'center').style('align-items', 'center').style('height', '100%').style('flex-direction', 'column').style('color', '#dc3545').style('font-size', '16px').html("\n \n
    ".concat(message, "
    \n ")); + } + }, { + key: "buildGraphDataFromTablesResponse", + value: function buildGraphDataFromTablesResponse(data) { + var _this3 = this; + var tables = data.tables, + foreign_keys = data.foreign_keys; + this.graphData.nodes = tables.map(function (tableName) { + return { + id: tableName, + name: tableName + }; + }); + this.graphData.links = []; + if (foreign_keys) { + Object.keys(foreign_keys).forEach(function (sourceTable) { + var tableForeignKeys = foreign_keys[sourceTable]; + tableForeignKeys.forEach(function (fk) { + var existingLink = _this3.graphData.links.find(function (link) { + return link.source === sourceTable && link.target === fk.table; + }); + if (!existingLink) { + _this3.graphData.links.push({ + source: sourceTable, + target: fk.table, + sourceColumn: fk.from, + targetColumn: fk.to + }); } + }); + }); + } + } + }, { + key: "createArrowMarker", + value: function createArrowMarker() { + this.svg.append('defs').append('marker').attr('id', 'arrowhead').attr('viewBox', '-0 -3 6 6').attr('refX', 25).attr('refY', 0).attr('orient', 'auto').attr('markerWidth', 5).attr('markerHeight', 5).attr('xoverflow', 'visible').append('svg:path').attr('d', 'M 0,-3 L 6 ,0 L 0,3').attr('fill', '#999').style('stroke', 'none'); + } + }, { + key: "createSimulation", + value: function createSimulation(width, height) { + var isInitial = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (this.simulation) { + this.simulation.stop(); + } + var linkDistance = isInitial ? 200 : 250; + var chargeStrength = isInitial ? -200 : -400; + var chargeDistanceMax = isInitial ? 800 : 400; + var collisionRadius = isInitial ? 120 : 70; + this.simulation = (0,d3_force__WEBPACK_IMPORTED_MODULE_5__["default"])(this.graphData.nodes).force('link', (0,d3_force__WEBPACK_IMPORTED_MODULE_6__["default"])(this.graphData.links).id(function (d) { + return d.id; + }).distance(linkDistance)).force('charge', (0,d3_force__WEBPACK_IMPORTED_MODULE_7__["default"])().strength(chargeStrength).distanceMax(chargeDistanceMax)).force('center', (0,d3_force__WEBPACK_IMPORTED_MODULE_8__["default"])(width / 2, height / 2)).force('collision', (0,d3_force__WEBPACK_IMPORTED_MODULE_9__["default"])().radius(collisionRadius)); + if (!isInitial) { + this.simulation.alphaDecay(0.1).velocityDecay(0.4); + } + } + }, { + key: "initializeGraph", + value: function initializeGraph() { + var container = this.node.querySelector('#graph-container'); + if (!container) return; + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).selectAll('*').remove(); + var rect = container.getBoundingClientRect(); + var width = Math.max(400, rect.width || 800); + var height = Math.max(300, rect.height || 600); + this.svg = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(container).append('svg').attr('width', width).attr('height', height).style('background', '#f9f9f9'); + this.createArrowMarker(); + if (this.graphData.nodes.length > 0) { + this.createSimulation(width, height, true); + } + } + }, { + key: "renderGraph", + value: function renderGraph() { + var _this4 = this; + if (!this.svg) return; + this.svg.selectAll('*').remove(); + this.createArrowMarker(); + if (this.graphData.nodes.length === 0) { + this.svg.append('text').attr('x', '50%').attr('y', '50%').attr('text-anchor', 'middle').attr('dominant-baseline', 'middle').style('font-size', '16px').style('fill', '#666').text('No database relationships found'); + return; + } + var svgNode = this.svg.node(); + var width = svgNode ? svgNode.getBoundingClientRect().width : 800; + var height = svgNode ? svgNode.getBoundingClientRect().height : 600; + var centerX = width / 2; + var centerY = height / 2; + var nodesCount = this.graphData.nodes.length; + var radius = Math.min(width, height) / 2 - 50; + this.graphData.nodes.forEach(function (node, index) { + var angle = 2 * Math.PI * index / nodesCount; + node.x = centerX + radius * Math.sin(angle); + node.y = centerY + radius * Math.cos(angle); + }); + var link = this.svg.append('g').selectAll('line').data(this.graphData.links).enter().append('line').attr('stroke', '#999').attr('stroke-opacity', 0.6).attr('stroke-width', 2).attr('marker-end', 'url(#arrowhead)'); + var node = this.svg.append('g').selectAll('g').data(this.graphData.nodes).enter().append('g').attr('class', 'node').call(function (selection) { + selection.on('click', function (event, d) { + return _this4.handleNodeClick(event, d); + }); + }); + node.append('circle').attr('r', 35).attr('fill', function (d) { + return _this4.color(d.id); + }).attr('stroke', '#fff').attr('stroke-width', 3); + node.append('text').text(function (d) { + return d.name; + }).attr('text-anchor', 'middle').attr('dy', '.35em').style('font-size', '12px').style('font-weight', 'bold').style('fill', '#fff').style('text-shadow', '1px 1px 2px rgba(0,0,0,0.8), -1px -1px 2px rgba(0,0,0,0.8), 1px -1px 2px rgba(0,0,0,0.8), -1px 1px 2px rgba(0,0,0,0.8)').style('pointer-events', 'none'); + node.append('title').text(function (d) { + return "Table: ".concat(d.name, "\nClick to view details\nCtrl+Click to select (orange margin)"); + }); + this.svg.on('click', function (event) { + if (event.target === _this4.svg.node()) { + _this4.clearSelection(); } - return [screenColumn, column]; - }; - EditSession.prototype.getRowLength = function (row) { - var h = 1; - if (this.lineWidgets) - h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; - if (!this.$useWrapMode || !this.$wrapData[row]) - return h; - else - return this.$wrapData[row].length + h; - }; - EditSession.prototype.getRowLineCount = function (row) { - if (!this.$useWrapMode || !this.$wrapData[row]) { - return 1; - } - else { - return this.$wrapData[row].length + 1; - } - }; - EditSession.prototype.getRowWrapIndent = function (screenRow) { - if (this.$useWrapMode) { - var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); - var splits = this.$wrapData[pos.row]; - return splits.length && splits[0] < pos.column ? splits.indent : 0; - } - else { - return 0; - } - }; - EditSession.prototype.getScreenLastRowColumn = function (screenRow) { - var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); - return this.documentToScreenColumn(pos.row, pos.column); - }; - EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) { - var screenRow = this.documentToScreenRow(docRow, docColumn); - return this.getScreenLastRowColumn(screenRow); - }; - EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) { - var screenRow = this.documentToScreenRow(docRow, docColumn); - return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); - }; - EditSession.prototype.getRowSplitData = function (row) { - if (!this.$useWrapMode) { - return undefined; - } - else { - return this.$wrapData[row]; - } - }; - EditSession.prototype.getScreenTabSize = function (screenColumn) { - return this.$tabSize - (screenColumn % this.$tabSize | 0); - }; - EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) { - return this.screenToDocumentPosition(screenRow, screenColumn).row; - }; - EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) { - return this.screenToDocumentPosition(screenRow, screenColumn).column; - }; - EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) { - if (screenRow < 0) - return { row: 0, column: 0 }; - var line; - var docRow = 0; - var docColumn = 0; - var column; - var row = 0; - var rowLength = 0; - var rowCache = this.$screenRowCache; - var i = this.$getRowCacheIndex(rowCache, screenRow); - var l = rowCache.length; - if (l && i >= 0) { - var row = rowCache[i]; - var docRow = this.$docRowCache[i]; - var doCache = screenRow > rowCache[l - 1]; - } - else { - var doCache = !l; - } - var maxRow = this.getLength() - 1; - var foldLine = this.getNextFoldLine(docRow); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (row <= screenRow) { - rowLength = this.getRowLength(docRow); - if (row + rowLength > screenRow || docRow >= maxRow) { + }); + this.createSimulation(width, height, false); + this.simulation.on('tick', function () { + link.attr('x1', function (d) { + var x = d.source.x; + return _this4.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0; + }).attr('y1', function (d) { + var y = d.source.y; + return _this4.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0; + }).attr('x2', function (d) { + var x = d.target.x; + return _this4.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0; + }).attr('y2', function (d) { + var y = d.target.y; + return _this4.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0; + }); + node.attr('transform', function (d) { + var x = d.x; + var y = d.y; + if (!_this4.isValidNumber(x) || !_this4.isValidNumber(y)) { + d.x = width / 2; + d.y = height / 2; + return "translate(".concat(width / 2, ",").concat(height / 2, ")"); + } + var boundedX = Math.max(50, Math.min(width - 50, x)); + var boundedY = Math.max(50, Math.min(height - 50, y)); + if (boundedX !== x) { + d.x = boundedX; + } + if (boundedY !== y) { + d.y = boundedY; + } + return "translate(".concat(boundedX, ",").concat(boundedY, ")"); + }); + }); + node.call(function (selection) { + var widget = _this4; + selection.on('mouseover', function (event, d) { + var isSelected = widget.selectedNodes.has(d.id); + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(this).select('circle').attr('stroke-width', isSelected ? 6 : 4).attr('stroke', isSelected ? '#ff8c00' : '#333'); + link.attr('stroke-opacity', function (linkData) { + var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; + var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; + return sourceId === d.id || targetId === d.id ? 1 : 0.1; + }).attr('stroke-width', function (linkData) { + var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; + var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; + return sourceId === d.id || targetId === d.id ? 3 : 2; + }).attr('stroke', function (linkData) { + var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; + var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; + return sourceId === d.id || targetId === d.id ? '#87CEEB' : '#999'; + }); + node.select('circle').attr('stroke-width', function (nodeData) { + var isConnected = link.data().some(function (linkData) { + var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; + var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; + return sourceId === d.id && targetId === nodeData.id || targetId === d.id && sourceId === nodeData.id; + }); + var isNodeSelected = widget.selectedNodes.has(nodeData.id); + return isNodeSelected ? 6 : isConnected ? 4 : 3; + }).attr('stroke', function (nodeData) { + var isConnected = link.data().some(function (linkData) { + var sourceId = _typeof(linkData.source) === 'object' ? linkData.source.id : linkData.source; + var targetId = _typeof(linkData.target) === 'object' ? linkData.target.id : linkData.target; + return sourceId === d.id && targetId === nodeData.id || targetId === d.id && sourceId === nodeData.id; + }); + var isNodeSelected = widget.selectedNodes.has(nodeData.id); + return isConnected ? '#87CEEB' : isNodeSelected ? '#ff8c00' : '#fff'; + }); + }).on('mouseout', function () { + widget.updateSelection(); + link.attr('stroke-opacity', 0.6).attr('stroke-width', 2).attr('stroke', '#999'); + }); + }); + node.call((0,d3_drag__WEBPACK_IMPORTED_MODULE_10__["default"])().on('start', function (event, d) { + if (!event.active) _this4.simulation.alphaTarget(0.3).restart(); + d.fx = _this4.isValidNumber(d.x) ? d.x : width / 2; + d.fy = _this4.isValidNumber(d.y) ? d.y : height / 2; + }).on('drag', function (event, d) { + var boundedX = Math.max(50, Math.min(width - 50, event.x)); + var boundedY = Math.max(50, Math.min(height - 50, event.y)); + d.fx = boundedX; + d.fy = boundedY; + }).on('end', function (event, d) { + if (!event.active) _this4.simulation.alphaTarget(0); + d.fx = null; + d.fy = null; + })); + } + }, { + key: "isValidNumber", + value: function isValidNumber(value) { + return typeof value === 'number' && !isNaN(value) && isFinite(value); + } + }, { + key: "toggleSelection", + value: function toggleSelection(nodeId) { + if (this.selectedNodes.has(nodeId)) { + this.selectedNodes["delete"](nodeId); + } else { + this.selectedNodes.add(nodeId); + } + this.updateSelection(); + } + }, { + key: "clearSelection", + value: function clearSelection() { + this.selectedNodes.clear(); + this.updateSelection(); + } + }, { + key: "updateSelection", + value: function updateSelection() { + if (!this.svg) return; + var widget = this; + this.svg.selectAll('.node').each(function (d) { + var nodeElement = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(this); + var isSelected = widget.selectedNodes.has(d.id); + nodeElement.select('circle').attr('stroke', isSelected ? '#ff8c00' : '#fff').attr('stroke-width', isSelected ? 6 : 3).attr('stroke-dasharray', 'none'); + }); + var newQueryBtn = this.node.querySelector('#new-query-btn'); + var clearBtn = this.node.querySelector('#clear-selection-btn'); + if (!newQueryBtn || !clearBtn) return; + if (this.selectedNodes.size > 0) { + newQueryBtn.innerHTML = " New Query ".concat(this.selectedNodes.size, ""); + clearBtn.style.display = 'inline-block'; + } else { + newQueryBtn.innerHTML = ' New Query'; + clearBtn.style.display = 'none'; + } + } + }, { + key: "handleNodeClick", + value: function handleNodeClick(event, d) { + if (event.ctrlKey || event.metaKey) { + event.preventDefault(); + event.stopPropagation(); + this.toggleSelection(d.id); + } else { + this.openTableInfoTab(d.name); + } + } + }, { + key: "getSelectedTables", + value: function getSelectedTables() { + return Array.from(this.selectedNodes); + } + }, { + key: "selectTables", + value: function selectTables(tableNames) { + var _this5 = this; + tableNames.forEach(function (name) { + _this5.selectedNodes.add(name); + }); + this.updateSelection(); + } + }, { + key: "renderTableList", + value: function renderTableList(tables) { + var _this6 = this; + var dropdownMenu = this.node.querySelector('#tables-dropdown'); + if (!dropdownMenu) { + console.error('Tables dropdown element not found in renderTableList'); + return; + } + var d3menu = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(dropdownMenu); + d3menu.html(''); + if (!tables || tables.length === 0) { + d3menu.append('div').text('No tables found.').style('padding', '0.5rem').style('color', '#666').style('font-style', 'italic'); + return; + } + d3menu.append('div').text("Tables (".concat(tables.length, ")")).style('font-weight', 'bold').style('padding', '0.5rem').style('border-bottom', '1px solid #eee').style('margin-bottom', '0.5rem'); + tables.forEach(function (tableName) { + var item = d3menu.append('div').style('padding', '0.5rem').style('cursor', 'pointer').style('border-radius', '3px').style('margin-bottom', '0.25rem').style('transition', 'background-color 0.2s').on('mouseover', function () { + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(this).style('background-color', '#f8f9fa'); + }).on('mouseout', function () { + (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(this).style('background-color', 'transparent'); + }).on('click', function () { + _this6.openTableInfoTab(tableName); + dropdownMenu.style.display = 'none'; + var dropdownButton = _this6.node.querySelector('[data-toggle="dropdown"]'); + if (dropdownButton) { + dropdownButton.setAttribute('aria-expanded', 'false'); + } + }); + item.append('i').classed('fa fa-table', true).style('margin-right', '0.5rem').style('color', '#007bff'); + item.append('span').text(tableName).style('font-size', '14px'); + }); + } + }, { + key: "openTableInfoTab", + value: function () { + var _openTableInfoTab = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(tableName) { + var widget, response, details, refWidget, _iterator3, _step3, w; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + widget = null; + _context2.prev = 1; + _context2.next = 4; + return fetch("/db/table/".concat(encodeURIComponent(tableName))); + case 4: + response = _context2.sent; + if (response.ok) { + _context2.next = 7; break; - } - else { - row += rowLength; - docRow++; - if (docRow > foldStart) { - docRow = foldLine.end.row + 1; - foldLine = this.getNextFoldLine(docRow, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - } - if (doCache) { - this.$docRowCache.push(docRow); - this.$screenRowCache.push(row); - } - } - if (foldLine && foldLine.start.row <= docRow) { - line = this.getFoldDisplayLine(foldLine); - docRow = foldLine.start.row; - } - else if (row + rowLength <= screenRow || docRow > maxRow) { - return { - row: maxRow, - column: this.getLine(maxRow).length - }; - } - else { - line = this.getLine(docRow); - foldLine = null; - } - var wrapIndent = 0, splitIndex = Math.floor(screenRow - row); - if (this.$useWrapMode) { - var splits = this.$wrapData[docRow]; - if (splits) { - column = splits[splitIndex]; - if (splitIndex > 0 && splits.length) { - wrapIndent = splits.indent; - docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; - line = line.substring(docColumn); - } - } - } - if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex)) - screenColumn = this.$bidiHandler.offsetToCol(offsetX); - docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1]; - if (this.$useWrapMode && docColumn >= column) - docColumn = column - 1; - if (foldLine) - return foldLine.idxToPosition(docColumn); - return { row: docRow, column: docColumn }; - }; - EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) { - if (typeof docColumn === "undefined") - var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column); - else - pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn); - docRow = pos.row; - docColumn = pos.column; - var screenRow = 0; - var foldStartRow = null; - var fold = null; - fold = this.getFoldAt(docRow, docColumn, 1); - if (fold) { - docRow = fold.start.row; - docColumn = fold.start.column; - } - var rowEnd, row = 0; - var rowCache = this.$docRowCache; - var i = this.$getRowCacheIndex(rowCache, docRow); - var l = rowCache.length; - if (l && i >= 0) { - var row = rowCache[i]; - var screenRow = this.$screenRowCache[i]; - var doCache = docRow > rowCache[l - 1]; - } - else { - var doCache = !l; - } - var foldLine = this.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (row < docRow) { - if (row >= foldStart) { - rowEnd = foldLine.end.row + 1; - if (rowEnd > docRow) - break; - foldLine = this.getNextFoldLine(rowEnd, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - else { - rowEnd = row + 1; - } - screenRow += this.getRowLength(row); - row = rowEnd; - if (doCache) { - this.$docRowCache.push(row); - this.$screenRowCache.push(screenRow); - } - } - var textLine = ""; - if (foldLine && row >= foldStart) { - textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); - foldStartRow = foldLine.start.row; - } - else { - textLine = this.getLine(docRow).substring(0, docColumn); - foldStartRow = docRow; - } - var wrapIndent = 0; - if (this.$useWrapMode) { - var wrapRow = this.$wrapData[foldStartRow]; - if (wrapRow) { - var screenRowOffset = 0; - while (textLine.length >= wrapRow[screenRowOffset]) { - screenRow++; - screenRowOffset++; - } - textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length); - wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0; - } - } - if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove) - screenRow += this.lineWidgets[row].rowsAbove; - return { - row: screenRow, - column: wrapIndent + this.$getStringScreenWidth(textLine)[0] - }; - }; - EditSession.prototype.documentToScreenColumn = function (row, docColumn) { - return this.documentToScreenPosition(row, docColumn).column; - }; - EditSession.prototype.documentToScreenRow = function (docRow, docColumn) { - return this.documentToScreenPosition(docRow, docColumn).row; - }; - EditSession.prototype.getScreenLength = function () { - var screenRows = 0; - var fold = null; - if (!this.$useWrapMode) { - screenRows = this.getLength(); - var foldData = this.$foldData; - for (var i = 0; i < foldData.length; i++) { - fold = foldData[i]; - screenRows -= fold.end.row - fold.start.row; - } - } - else { - var lastRow = this.$wrapData.length; - var row = 0, i = 0; - var fold = this.$foldData[i++]; - var foldStart = fold ? fold.start.row : Infinity; - while (row < lastRow) { - var splits = this.$wrapData[row]; - screenRows += splits ? splits.length + 1 : 1; - row++; - if (row > foldStart) { - row = fold.end.row + 1; - fold = this.$foldData[i++]; - foldStart = fold ? fold.start.row : Infinity; + } + throw new Error('Failed to fetch table details'); + case 7: + _context2.next = 9; + return response.json(); + case 9: + details = _context2.sent; + widget = new TableInfoWidget(tableName, details); + _context2.next = 18; + break; + case 13: + _context2.prev = 13; + _context2.t0 = _context2["catch"](1); + widget = new DatabaseTabWidget(); + widget.title.label = tableName; + widget.node.innerHTML = "
    Error loading table info: ".concat(_context2.t0.message, "
    "); + case 18: + refWidget = null; + if (this.panel.widgets) { + _iterator3 = _createForOfIteratorHelper(this.panel.widgets()); + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + w = _step3.value; + if (w instanceof TableInfoWidget || w instanceof _query_widget__WEBPACK_IMPORTED_MODULE_1__.QueryResultWidget) { + refWidget = w; + } + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); } + } + if (refWidget) { + this.panel.addInfoWidget(widget, { + ref: refWidget, + mode: 'tab-after' + }); + } else { + this.panel.addInfoWidget(widget, { + ref: this, + mode: 'split-bottom' + }); + } + this.panel.activateWidget(widget); + case 22: + case "end": + return _context2.stop(); + } + }, _callee2, this, [[1, 13]]); + })); + function openTableInfoTab(_x) { + return _openTableInfoTab.apply(this, arguments); + } + return openTableInfoTab; + }() + }, { + key: "onResize", + value: function onResize(msg) { + if (this.graphData.nodes.length > 0) { + this.initializeGraph(); + this.renderGraph(); + } + } + }, { + key: "getInitialQuery", + value: function getInitialQuery(selectedTables) { + if (selectedTables.length === 0) return ''; + if (selectedTables.length === 1) { + return "SELECT * FROM \"".concat(selectedTables[0], "\" LIMIT 100;"); + } + var initialQuery = "SELECT *\nFROM \"".concat(selectedTables[0], "\"\n"); + var usedTables = new Set([selectedTables[0]]); + var joins = []; + for (var i = 1; i < selectedTables.length; i++) { + var currentTable = selectedTables[i]; + var joinFound = false; + var _iterator4 = _createForOfIteratorHelper(this.graphData.links), + _step4; + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { + var link = _step4.value; + console.log(link.source, link.target); + var sourceTable = link.source.id; + var targetTable = link.target.id; + if (sourceTable === currentTable && usedTables.has(targetTable)) { + joins.push("JOIN \"".concat(currentTable, "\" ON \"").concat(targetTable, "\".").concat(link.targetColumn, " = \"").concat(currentTable, "\".").concat(link.sourceColumn)); + usedTables.add(currentTable); + joinFound = true; + break; } - } - if (this.lineWidgets) - screenRows += this.$getWidgetScreenLength(); - return screenRows; - }; - EditSession.prototype.$setFontMetrics = function (fm) { - if (!this.$enableVarChar) - return; - this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) { - if (maxScreenColumn === 0) - return [0, 0]; - if (!maxScreenColumn) - maxScreenColumn = Infinity; - screenColumn = screenColumn || 0; - var c, column; - for (column = 0; column < str.length; column++) { - c = str.charAt(column); - if (c === "\t") { - screenColumn += this.getScreenTabSize(screenColumn); - } - else { - screenColumn += fm.getCharacterWidth(c); - } - if (screenColumn > maxScreenColumn) { - break; - } + if (targetTable === currentTable && usedTables.has(sourceTable)) { + joins.push("JOIN \"".concat(currentTable, "\" ON \"").concat(sourceTable, "\".").concat(link.sourceColumn, " = \"").concat(currentTable, "\".").concat(link.targetColumn)); + usedTables.add(currentTable); + joinFound = true; + break; } - return [screenColumn, column]; - }; - }; - EditSession.prototype.getPrecedingCharacter = function () { - var pos = this.selection.getCursor(); - if (pos.column === 0) { - return pos.row === 0 ? "" : this.doc.getNewLineCharacter(); - } - var currentLine = this.getLine(pos.row); - return currentLine[pos.column - 1]; - }; - EditSession.prototype.destroy = function () { - if (!this.destroyed) { - this.bgTokenizer.setDocument(null); - this.bgTokenizer.cleanup(); - this.destroyed = true; - } - this.endOperation(); - this.$stopWorker(); - this.removeAllListeners(); - if (this.doc) { - this.doc.off("change", this.$onChange); + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); } - if (this.selection) { - this.selection.off("changeCursor", this.$onSelectionChange); - this.selection.off("changeSelection", this.$onSelectionChange); + if (!joinFound) { + joins.push("CROSS JOIN \"".concat(currentTable, "\"")); + usedTables.add(currentTable); } - this.selection.detach(); - }; - return EditSession; -}()); -EditSession.$uid = 0; -EditSession.prototype.$modes = config.$modes; -EditSession.prototype.getValue = EditSession.prototype.toString; -EditSession.prototype.$defaultUndoManager = { - undo: function () { }, - redo: function () { }, - hasUndo: function () { }, - hasRedo: function () { }, - reset: function () { }, - add: function () { }, - addSelection: function () { }, - startNewGroup: function () { }, - addSession: function () { } -}; -EditSession.prototype.$overwrite = false; -EditSession.prototype.$mode = null; -EditSession.prototype.$modeId = null; -EditSession.prototype.$scrollTop = 0; -EditSession.prototype.$scrollLeft = 0; -EditSession.prototype.$wrapLimit = 80; -EditSession.prototype.$useWrapMode = false; -EditSession.prototype.$wrapLimitRange = { - min: null, - max: null -}; -EditSession.prototype.lineWidgets = null; -EditSession.prototype.isFullWidth = isFullWidth; -oop.implement(EditSession.prototype, EventEmitter); -var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12; -function isFullWidth(c) { - if (c < 0x1100) - return false; - return c >= 0x1100 && c <= 0x115F || - c >= 0x11A3 && c <= 0x11A7 || - c >= 0x11FA && c <= 0x11FF || - c >= 0x2329 && c <= 0x232A || - c >= 0x2E80 && c <= 0x2E99 || - c >= 0x2E9B && c <= 0x2EF3 || - c >= 0x2F00 && c <= 0x2FD5 || - c >= 0x2FF0 && c <= 0x2FFB || - c >= 0x3000 && c <= 0x303E || - c >= 0x3041 && c <= 0x3096 || - c >= 0x3099 && c <= 0x30FF || - c >= 0x3105 && c <= 0x312D || - c >= 0x3131 && c <= 0x318E || - c >= 0x3190 && c <= 0x31BA || - c >= 0x31C0 && c <= 0x31E3 || - c >= 0x31F0 && c <= 0x321E || - c >= 0x3220 && c <= 0x3247 || - c >= 0x3250 && c <= 0x32FE || - c >= 0x3300 && c <= 0x4DBF || - c >= 0x4E00 && c <= 0xA48C || - c >= 0xA490 && c <= 0xA4C6 || - c >= 0xA960 && c <= 0xA97C || - c >= 0xAC00 && c <= 0xD7A3 || - c >= 0xD7B0 && c <= 0xD7C6 || - c >= 0xD7CB && c <= 0xD7FB || - c >= 0xF900 && c <= 0xFAFF || - c >= 0xFE10 && c <= 0xFE19 || - c >= 0xFE30 && c <= 0xFE52 || - c >= 0xFE54 && c <= 0xFE66 || - c >= 0xFE68 && c <= 0xFE6B || - c >= 0xFF01 && c <= 0xFF60 || - c >= 0xFFE0 && c <= 0xFFE6; -} -require("./edit_session/folding").Folding.call(EditSession.prototype); -require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); -config.defineOptions(EditSession.prototype, "session", { - wrap: { - set: function (value) { - if (!value || value == "off") - value = false; - else if (value == "free") - value = true; - else if (value == "printMargin") - value = -1; - else if (typeof value == "string") - value = parseInt(value, 10) || false; - if (this.$wrap == value) - return; - this.$wrap = value; - if (!value) { - this.setUseWrapMode(false); - } - else { - var col = typeof value == "number" ? value : null; - this.setWrapLimitRange(col, col); - this.setUseWrapMode(true); - } - }, - get: function () { - if (this.getUseWrapMode()) { - if (this.$wrap == -1) - return "printMargin"; - if (!this.getWrapLimitRange().min) - return "free"; - return this.$wrap; - } - return "off"; - }, - handlesSet: true - }, - wrapMethod: { - set: function (val) { - val = val == "auto" - ? this.$mode.type != "text" - : val != "text"; - if (val != this.$wrapAsCode) { - this.$wrapAsCode = val; - if (this.$useWrapMode) { - this.$useWrapMode = false; - this.setUseWrapMode(true); - } - } - }, - initialValue: "auto" - }, - indentedSoftWrap: { - set: function () { - if (this.$useWrapMode) { - this.$useWrapMode = false; - this.setUseWrapMode(true); - } - }, - initialValue: true - }, - firstLineNumber: { - set: function () { this._signal("changeBreakpoint"); }, - initialValue: 1 - }, - useWorker: { - set: function (useWorker) { - this.$useWorker = useWorker; - this.$stopWorker(); - if (useWorker) - this.$startWorker(); + } + return initialQuery + joins.join('\n') + '\nLIMIT 100;'; + } + }, { + key: "openNewQueryTab", + value: function () { + var _openNewQueryTab = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() { + var selectedTables, tableNames, initialQuery, columnNames, _ref2, columnPromises, columnArrays, queryWidget; + return _regeneratorRuntime().wrap(function _callee4$(_context4) { + while (1) switch (_context4.prev = _context4.next) { + case 0: + selectedTables = this.getSelectedTables(); + tableNames = this.graphData.nodes.map(function (n) { + return n.name; + }); + initialQuery = this.getInitialQuery(selectedTables); + columnNames = []; + if (!(selectedTables.length > 0)) { + _context4.next = 16; + break; + } + _context4.prev = 5; + columnPromises = selectedTables.map(/*#__PURE__*/function () { + var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(tableName) { + var response, details; + return _regeneratorRuntime().wrap(function _callee3$(_context3) { + while (1) switch (_context3.prev = _context3.next) { + case 0: + _context3.next = 2; + return fetch("/db/table/".concat(encodeURIComponent(tableName))); + case 2: + response = _context3.sent; + if (!response.ok) { + _context3.next = 8; + break; + } + _context3.next = 6; + return response.json(); + case 6: + details = _context3.sent; + return _context3.abrupt("return", details.columns ? details.columns.map(function (col) { + return col.name; + }) : []); + case 8: + return _context3.abrupt("return", []); + case 9: + case "end": + return _context3.stop(); + } + }, _callee3); + })); + return function (_x2) { + return _ref.apply(this, arguments); + }; + }()); + _context4.next = 9; + return Promise.all(columnPromises); + case 9: + columnArrays = _context4.sent; + columnNames = (_ref2 = []).concat.apply(_ref2, _toConsumableArray(columnArrays)); + _context4.next = 16; + break; + case 13: + _context4.prev = 13; + _context4.t0 = _context4["catch"](5); + console.warn('Failed to fetch column names:', _context4.t0); + case 16: + queryWidget = new _query_widget__WEBPACK_IMPORTED_MODULE_1__.QueryWidget(this.panel, tableNames, columnNames, initialQuery); + this.panel.addInfoWidget(queryWidget, { + ref: this, + mode: 'tab-after' + }); + this.panel.activateWidget(queryWidget); + this.clearSelection(); + case 20: + case "end": + return _context4.stop(); + } + }, _callee4, this, [[5, 13]]); + })); + function openNewQueryTab() { + return _openNewQueryTab.apply(this, arguments); + } + return openNewQueryTab; + }() + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/graph/base_activation_graph.ts": +/*!********************************************!*\ + !*** ./src/graph/base_activation_graph.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ BaseActivationGraphWidget: () => (/* binding */ BaseActivationGraphWidget) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var _noworkflow_trial__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noworkflow/trial */ "../trial/lib/index.js"); +/* harmony import */ var _noworkflow_trial__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_trial__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + + +var BaseActivationGraphWidget = /*#__PURE__*/function (_Widget) { + function BaseActivationGraphWidget() { + _classCallCheck(this, BaseActivationGraphWidget); + return _callSuper(this, BaseActivationGraphWidget, arguments); + } + _inherits(BaseActivationGraphWidget, _Widget); + return _createClass(BaseActivationGraphWidget, [{ + key: "setGraph", + value: function setGraph(data) { + var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var showDiffFunction = arguments.length > 2 ? arguments[2] : undefined; + var nowVisPanel = arguments.length > 3 ? arguments[3] : undefined; + var sub = this.node.getElementsByClassName("sub-content")[0]; + sub.innerHTML = ""; + this.graph = new _noworkflow_trial__WEBPACK_IMPORTED_MODULE_1__.TrialGraph(this.cls, sub, config, showDiffFunction, nowVisPanel); + this.graph.load(data, this.t1, this.t2); + } + }, { + key: "graphDefinition", + value: function graphDefinition() { + var _this = this; + var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; + var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var genDataflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var data = arguments.length > 3 ? arguments[3] : undefined; + return { + width: this.node.getBoundingClientRect().width - 24, + height: this.node.getBoundingClientRect().height - 24, + customForm: function customForm(graph, form) { + // Toggle Tooltips + var selectorDiv = _this.d3node.select(".trial-content .graphselector"); + var typeOptions = selectorDiv.select(".graph-type"); + typeOptions.property("value", selectedGraph); + var useCacheDiv = selectorDiv.select(".use-cache"); + useCacheDiv.property("checked", useCache); + var selectorToggle = form.append("input").attr("id", "trial-" + graph.graphId + "-toolbar-selector-check").attr("type", "checkbox").attr("name", "trial-toolbar-selector-check").attr("value", "show").property("checked", selectorDiv.classed('visible')).on("change", function () { + var visible = selectorToggle.property("checked"); + selectorToggleI.classed('fa-circle-o', visible).classed('fa-circle', !visible); + selectorDiv.classed('visible', visible).classed('show-toolbar', visible).classed('hide-toolbar', !visible); + }); + var selectorLabel = form.append("label").attr("for", "trial-" + graph.graphId + "-toolbar-selector-check"); + var optionsNode = typeOptions.node(); + selectorLabel.append("span").classed("toggle-label", true).text(optionsNode.options[optionsNode.selectedIndex].text); + var selectorToggleI = selectorLabel.append("i").classed('fa', true).classed("fa-circle", !selectorDiv.classed('visible')).classed("fa-circle-o", selectorDiv.classed('visible')); }, - initialValue: true - }, - useSoftTabs: { initialValue: true }, - tabSize: { - set: function (tabSize) { - tabSize = parseInt(tabSize); - if (tabSize > 0 && this.$tabSize !== tabSize) { - this.$modified = true; - this.$rowLengthCache = []; - this.$tabSize = tabSize; - this._signal("changeTabSize"); - } + customLoadTooltip: function customLoadTooltip(g, div, text, trialid, aid) { + var url = "/trials/" + trialid + "/activations/" + aid + ".json"; + function createResponse(activationId, div2) { + return function (data) { + g.activationStorage[activationId] = data; + g.updateTooltipDiv(activationId, div2); + }; + } + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__.json)(text, div, url, createResponse(aid, div)); }, - initialValue: 4, - handlesSet: true - }, - navigateWithinSoftTabs: { initialValue: false }, - foldStyle: { - set: function (val) { this.setFoldStyle(val); }, - handlesSet: true - }, - overwrite: { - set: function (val) { this._signal("changeOverwrite"); }, - initialValue: false - }, - newLineMode: { - set: function (val) { this.doc.setNewLineMode(val); }, - get: function () { return this.doc.getNewLineMode(); }, - handlesSet: true - }, - mode: { - set: function (val) { this.setMode(val); }, - get: function () { return this.$modeId; }, - handlesSet: true + genDataflow: genDataflow, + queryTooltip: true + }; + } + }, { + key: "configureGraph", + value: function configureGraph() { + var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; + var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var genDataflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var data = arguments.length > 3 ? arguments[3] : undefined; + var showDiffFunction = arguments.length > 4 ? arguments[4] : undefined; + var nowVisPanel = arguments.length > 5 ? arguments[5] : undefined; + this.setGraph(data, this.graphDefinition(selectedGraph, useCache, genDataflow, data), showDiffFunction, nowVisPanel); + } + }, { + key: "onResize", + value: function onResize(msg) { + if (this.graph) { + this.graph.config.width = this.node.getBoundingClientRect().width - 24; + this.graph.config.height = this.node.getBoundingClientRect().height - 24; + this.graph.updateWindow(); + } + } + }], [{ + key: "graphTypeForm", + value: function graphTypeForm(name, selectorDiv) { + var graphType = selectorDiv.append("div").classed("graph-attr", true); + graphType.append("label").attr("for", name + "-graphtype").attr("title", "Select the graph type").text("Graph Type:"); + var typeOptions = graphType.append("select").attr("id", name + "-graphtype").classed("graph-type", true).classed("select-style", true); + typeOptions.append("option").attr("value", "tree").attr("data-description", "Activation tree. Edges represent order of execution").text("Activation Tree"); + typeOptions.append("option").attr("value", "no_match").attr("data-description", "Activation tree presented as a Graph").text("Activation No Match"); + typeOptions.append("option").attr("value", "exact_match").attr("data-description", "Calls have counting independent from caller activations").text("Activation Exact Match"); + typeOptions.append("option").attr("value", "namespace_match").attr("data-description", "Calls are combined and a function may have more than one call workflow").text("Activation Namespace Match"); + typeOptions.append("option").attr("value", "definition_tree").attr("data-description", "Definition tree. Edges represent order of script definition").text("Definition Tree"); + typeOptions.property("value", "namespace_match"); + } + }, { + key: "useCacheForm", + value: function useCacheForm(name, selectorDiv) { + var useCache = selectorDiv.append("div").classed("graph-attr", true); + useCache.append("input").attr("type", "checkbox").attr("name", "use_cache").attr("value", "on").attr("checked", true).classed("use-cache", true).attr("id", name + "-use-cache"); + useCache.append("label").attr("for", name + "-use-cache").attr("title", "Select the graph type").text("Use Cache"); + } + }, { + key: "createNode", + value: function createNode(name) { + var fn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (parent) { + return null; + }; + var node = document.createElement('div'); + var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__["default"])(node); + var content = d3node.append('div').classed('trial-content', true); + var selectorDiv = content.append("div").classed("graphselector", true).classed("hide-toolbar", true); + BaseActivationGraphWidget.graphTypeForm(name, selectorDiv); + fn(name, selectorDiv); + BaseActivationGraphWidget.useCacheForm(name, selectorDiv); + var selectorReload = selectorDiv.append("a").attr("href", "#").classed("link-button reload-button", true); + selectorReload.append('i').classed("fa fa-refresh", true); + selectorReload.append('span').text('Reload'); + content.append('div').classed('sub-content', true); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/graph/diff_graph.ts": +/*!*********************************!*\ + !*** ./src/graph/diff_graph.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DiffGraphWidget: () => (/* binding */ DiffGraphWidget) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _base_activation_graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base_activation_graph */ "./src/graph/base_activation_graph.ts"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + +var DiffGraphWidget = /*#__PURE__*/function (_BaseActivationGraphW) { + function DiffGraphWidget(name, cls, t1, t2, showDiffFunction, nowVisPanel) { + var _this; + _classCallCheck(this, DiffGraphWidget); + _this = _callSuper(this, DiffGraphWidget, [{ + node: _base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget.createNode(cls, DiffGraphWidget.createForm) + }]); + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); + _this.d3node.select('.reload-button').on("click", function () { + _this.load(_this.d3node.select(".graph-type").property("value"), _this.d3node.select(".use-cache").property("checked")); + }); + _this.addClass('content'); + _this.addClass('diff-widget'); + _this.title.label = name; + _this.title.closable = true; + _this.title.caption = "".concat(name, " Graph"); + _this.name = name; + _this.cls = cls; + _this.t1 = t1; + _this.t2 = t2; + _this.showDiffFunction = showDiffFunction; + _this.nowVisPanel = nowVisPanel; + return _this; + } + _inherits(DiffGraphWidget, _BaseActivationGraphW); + return _createClass(DiffGraphWidget, [{ + key: "load", + value: function load() { + var _this2 = this; + var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; + var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var sub = this.node.getElementsByClassName("sub-content")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__.json)("Diff", sub, DiffGraphWidget.url(this.t1, this.t2, selectedGraph, useCache), function (data) { + var selectorDiv = _this2.d3node.select(".trial-content .graphselector"); + var useCacheDiv = selectorDiv.select(".use-cache"); + useCacheDiv.property("checked", useCache); + _this2.configureGraph(selectedGraph, useCache, false, data, _this2.showDiffFunction, _this2.nowVisPanel); + }); + } + }], [{ + key: "url", + value: function url(trial1, trial2, selectedGraph, useCache) { + var cache = useCache ? "1" : "0"; + return "diff/" + trial1 + "/" + trial2 + "/" + selectedGraph + "-" + cache + ".json"; + } + }, { + key: "createForm", + value: function createForm(name, parent) {} + }]); +}(_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget); + +/***/ }), + +/***/ "./src/graph/function_diff.ts": +/*!************************************!*\ + !*** ./src/graph/function_diff.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ functionDiffWindow: () => (/* binding */ functionDiffWindow) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +var _templateObject; +function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); } + + +function functionDiffWindow(functionDiffJson, windowIdAndTitle, parentDock) { + if (document.getElementById(windowIdAndTitle)) { + alert("This function diff is already open!"); + return; + } + var functionDiffWidget = new _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget(); + functionDiffWidget.title.label = windowIdAndTitle; + functionDiffWidget.id = windowIdAndTitle; + functionDiffWidget.title.closable = true; + parentDock.addGraphWidget(functionDiffWidget); + parentDock.activateWidget(functionDiffWidget); + var functionDiffWindow = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(document.getElementById(windowIdAndTitle)); + functionDiffWindow.style("overflow-y", "auto").style("padding", "2em 2em 2em 1em"); + function addHideShowButton(elementToAppendTo, buttonId, spanId) { + buttonId += "-" + crypto.randomUUID(); + return elementToAppendTo.append("span").append("i").attr("id", buttonId).classed("fa fa-compress", true).on("click", function () { + var spanToHideOrShow = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(document.getElementById(spanId)); + var thisButton = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(document.getElementById(buttonId)); + if (spanToHideOrShow.classed("d-none")) { + spanToHideOrShow.classed("d-none", false); + thisButton.classed("fa fa-expand", false); + thisButton.classed("fa fa-compress", true); + } else { + spanToHideOrShow.classed("d-none", true); + thisButton.classed("fa fa-compress", false); + thisButton.classed("fa fa-expand", true); + } + }); + } + function filterVariablesArray(array, opVariables) { + var defaultVariables = ["name", "attribute", "access"]; + if (opVariables) defaultVariables = defaultVariables.concat(["add", "sub", "mult", "div", "mod", "pow", "floordiv", + // arithmetic operators + "add_assign", "sub_assign", "mult_assign", "div_assign", + // assignment operators 1 + "mod_assign", "pow_assign", "floordiv_assign", + // assignment operators 2 + "bitand_assign", "bitor_assign", "bitxor_assign", + // assignment operators 3 + "rshift_assign", "lshift_assign", + // assignment operators 4 + "eq", "noteq", "gt", "lt", "gte", "lte", + // comparison operators + "and", "or", "not", + // logical operators + "is", "isnot", + // identity operators + "in", "notin", + // membership operators + "bitand", "bitor", "bitxor", "invert", "rshift", "lshift"]); // bitwise operators] + + var filteredArray = array.filter(function (arrayElement) { + for (var i = 0; i < defaultVariables.length; i++) { + if (arrayElement.includes("'type': '" + defaultVariables[i] + "',")) return true; + } + return false; + }); + return filteredArray; + } + function writeHTMLDiffVariables(spanVariables, trial1VariablesThatChanged, trial2VariablesAdded, trial1VariablesRemoved) { + if (trial1VariablesThatChanged.length > 0) { + var variablesChangedTitle = spanVariables.append("p").attr("style", "font-weight:bold;").text("The variables changed:"); + var spanVariablesChanged = spanVariables.append("spand").attr("id", "diff-function-variables-changed-span-" + crypto.randomUUID()); + addHideShowButton(variablesChangedTitle, "hide-and-show-button-variables-changed", spanVariablesChanged.attr("id")); + trial1VariablesThatChanged.forEach(function (diffVar) { + var variablesLines = diffVar.match(/\{[^}]*\}/g); + var differentAttributes = findDifferenceBetweenVariables(variablesLines[0], variablesLines[1]); + spanVariablesChanged.append("span").html(colorJsonAttributesHTML(variablesLines[0], differentAttributes, "red")); + spanVariablesChanged.append("br"); + spanVariablesChanged.append("span").html(colorJsonAttributesHTML(variablesLines[1], differentAttributes, "green")); + spanVariablesChanged.append("br"); + spanVariablesChanged.append("br"); + }); + } + if (trial2VariablesAdded.length > 0) { + var variablesAddedTitle = spanVariables.append("p").attr("style", "font-weight:bold;").text("The variables added:"); + var spanVariablesAdded = spanVariables.append("spand").attr("id", "diff-function-variables-added-span-" + crypto.randomUUID()); + addHideShowButton(variablesAddedTitle, "hide-and-show-button-variables-added", spanVariablesAdded.attr("id")); + trial2VariablesAdded.forEach(function (varAdded) { + spanVariablesAdded.append("span").style("color", "green").text(varAdded); + spanVariablesAdded.append("br"); + }); + } + if (trial1VariablesRemoved.length > 0) { + var variablesRemovedTitle = spanVariables.append("p").attr("style", "font-weight:bold;").text("The variables removed:"); + var spanVariablesRemoved = spanVariables.append("spand").attr("id", "diff-function-variables-removed-span" + crypto.randomUUID()); + addHideShowButton(variablesRemovedTitle, "hide-and-show-button-removed-added", spanVariablesRemoved.attr("id")); + trial1VariablesRemoved.forEach(function (varRemoved) { + spanVariablesRemoved.append("span").style("color", "red").text(varRemoved); + spanVariablesRemoved.append("br"); + }); + } + } + function findDifferenceBetweenVariables(variable1, variable2) { + var jsonVariable1 = JSON.parse(variable1.replace(/"'/g, "\"").replace(/'"/g, "\"").replace(/'/g, "\"")); + var jsonVariable2 = JSON.parse(variable2.replace(/"'/g, "\"").replace(/'"/g, "\"").replace(/'/g, "\"")); + var differentAttributes = []; + for (var attr in jsonVariable1) { + if (jsonVariable1[attr] != jsonVariable2[attr]) differentAttributes.push(attr.toString()); + } + return differentAttributes; + } + function colorJsonAttributesHTML(jsonAsString, attributesArray, color) { + var coloredJsonAsString = jsonAsString.replace(/'<([^>]+)>'/g, "'$1'"); + attributesArray.forEach(function (attr) { + // Annotated code = color only the attribute + //attr = "'"+attr+"':"; + //coloredJsonAsString = coloredJsonAsString.replace(attr, "" + attr + ""); + var regex = "'" + attr + "':" + "(.*?),"; + var regexMatches = coloredJsonAsString.match(new RegExp(String.raw(_templateObject || (_templateObject = _taggedTemplateLiteral(["s", "s"], ["\\s", "\\s"])), regex))); + coloredJsonAsString = coloredJsonAsString.replace(regexMatches[1], "" + regexMatches[1] + ""); + }); + return coloredJsonAsString; + } + function colorArrayElementsHTML(array, symDifference, color) { + var coloredArray = array; + symDifference.forEach(function (argument) { + if (coloredArray.includes(argument)) coloredArray[coloredArray.indexOf(argument)] = "" + argument.toString() + ""; + }); + return coloredArray.toString(); + } + function writeFileAccess(fileAccessArray, window, color) { + fileAccessArray.forEach(function (file) { + window.append("span").style("color", color).text("Name: " + file.name); + window.append("br"); + window.append("span").style("color", color).text("Mode: " + file.mode); + window.append("br"); + window.append("span").style("color", color).text(" Buffering: " + file.buffering); + window.append("br"); + window.append("span").style("color", color).text("Content hash before: " + file.content_hash_before).on("click", function () { + downloadFileContent(file.content_hash_before, file.name); + }); + window.append("br"); + window.append("span").style("color", color).text("Content hash after: " + file.content_hash_after).on("click", function () { + downloadFileContent(file.content_hash_after, file.name); + }); + window.append("br"); + window.append("span").style("color", color).text("Timestamp: " + file.timestamp); + window.append("br"); + window.append("span").style("color", color).text("Function: " + file.stack); + window.append("br"); + window.append("br"); + }); + } + ["output", "arguments", "duration", "variables"].forEach(function (property) { + var didntChange = JSON.stringify(functionDiffJson[property + "_function_trial1"]) == JSON.stringify(functionDiffJson[property + "_function_trial2"]); + var changeText = didntChange ? "The " + property + " didn't change" : "The " + property + " changed:"; + var textChangeTitle; + if (property != "variables") textChangeTitle = functionDiffWindow.append("p").attr("style", "font-weight:bold;").text(changeText); + if (changeText.includes("changed")) { + if (property == "duration") { + functionDiffJson[property + "_function_trial1"] = functionDiffJson[property + "_function_trial1"].toString() + " miliseconds"; + functionDiffJson[property + "_function_trial2"] = functionDiffJson[property + "_function_trial2"].toString() + " miliseconds"; + } + var spanProperty = functionDiffWindow.append("span").attr("id", "diff-function-" + property + "-span-" + crypto.randomUUID()); + if (property != "variables") addHideShowButton(textChangeTitle, "hide-and-show-button-" + property, spanProperty.attr("id")); + if (property == "variables") { + var buttonDiv = functionDiffWindow.append("div").attr("id", "div-diff-function-variables-filter").lower(); + buttonDiv.append("span").classed("toollink", true).attr("id", "filter-" + windowIdAndTitle + "-variables-default").attr("href", "#").attr("title", "Show only name, attribute, and access variables").on("click", function () { + var trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson["trial1_variables_that_changed"], false); + var trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson["trial2_variables_added"], false); + var trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson["trial1_variables_removed"], false); + spanProperty.html(""); + writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered); + }).append("i").classed("fa fa-asterisk", true).append("span").style("margin-right", "10px").text("Show only name, attribute, and access variables"); + buttonDiv.append("span").classed("toollink", true).attr("id", "filter-" + windowIdAndTitle + "-variables-operation").attr("href", "#").attr("title", "Show all operation variables").on("click", function () { + var trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson["trial1_variables_that_changed"], true); + var trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson["trial2_variables_added"], true); + var trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson["trial1_variables_removed"], true); + spanProperty.html(""); + writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered); + }).append("i").classed("fa fa-plus-square", true).append("span").style("margin-right", "10px").text("Show all operation variables"); + ; + buttonDiv.append("span").classed("toollink", true).attr("id", "filter-" + windowIdAndTitle + "-variables-all").attr("href", "#").attr("title", "Show all variables").on("click", function () { + spanProperty.html(""); + writeHTMLDiffVariables(spanProperty, functionDiffJson["trial1_variables_that_changed"], functionDiffJson["trial2_variables_added"], functionDiffJson["trial1_variables_removed"]); + }).append("i").classed("fa fa-code", true).append("span").style("margin-right", "10px").text("Show all variables"); + writeHTMLDiffVariables(spanProperty, functionDiffJson["trial1_variables_that_changed"], functionDiffJson["trial2_variables_added"], functionDiffJson["trial1_variables_removed"]); + } else if (property == "arguments") { + var symDifference = functionDiffJson[property + "_function_trial1"].filter(function (x) { + return !functionDiffJson[property + "_function_trial2"].includes(x); + }).concat(functionDiffJson[property + "_function_trial2"].filter(function (x) { + return !functionDiffJson[property + "_function_trial1"].includes(x); + })); + spanProperty.append("span").html(colorArrayElementsHTML(functionDiffJson[property + "_function_trial1"], symDifference, "red")); + spanProperty.append("br"); + spanProperty.append("span").html(colorArrayElementsHTML(functionDiffJson[property + "_function_trial2"], symDifference, "green")); + } else { + spanProperty.append("span").style("color", "red").text(functionDiffJson[property + "_function_trial1"].toString()); + spanProperty.append("br"); + spanProperty.append("span").style("color", "green").text(functionDiffJson[property + "_function_trial2"].toString()); + } } -}); -exports.EditSession = EditSession; + }); + var fileAccessAddedTitle = functionDiffWindow.append("p").style("font-weight", "bold").text(functionDiffJson["file_accesses_added"].length + " file accesses added:"); + var spanFileAccessAdded = functionDiffWindow.append("span").attr("id", "diff-function-file-access-added-span-" + crypto.randomUUID()); + addHideShowButton(fileAccessAddedTitle, "hide-and-show-button-file-access-added", spanFileAccessAdded.attr("id")); + writeFileAccess(functionDiffJson["file_accesses_added"], spanFileAccessAdded, "green"); + var fileAccessRemovedTitle = functionDiffWindow.append("p").style("font-weight", "bold").text(functionDiffJson["file_accesses_removed"].length + " file accesses removed:"); + var spanFileAccessRemoved = functionDiffWindow.append("span").attr("id", "diff-function-file-access-removed-span-" + crypto.randomUUID()); + addHideShowButton(fileAccessRemovedTitle, "hide-and-show-button-file-access-removed", spanFileAccessRemoved.attr("id")); + writeFileAccess(functionDiffJson["file_accesses_removed"], spanFileAccessRemoved, "red"); + var fileAccessReplacedTitle = functionDiffWindow.append("p").style("font-weight", "bold").text(functionDiffJson["file_accesses_replaced"].length + " file accesses replaced:"); + var spanFileAccessReplaced = functionDiffWindow.append("span").attr("id", "diff-function-file-access-replaced-span-" + crypto.randomUUID()); + addHideShowButton(fileAccessReplacedTitle, "hide-and-show-button-file-access-replaced", spanFileAccessReplaced.attr("id")); + functionDiffJson["file_accesses_replaced"].forEach(function (file) { + spanFileAccessReplaced.append("span").text("Name: " + file.name); + spanFileAccessReplaced.append("br"); + //spanFileAccessReplaced.append("span").style("color", color).text("Mode: " + file.mode); + //spanFileAccessReplaced.append("br"); + //spanFileAccessReplaced.append("span").style("color", color).text(" Buffering: " + file.buffering); + //spanFileAccessReplaced.append("br"); + spanFileAccessReplaced.append("span").text("Content hash before changed from ").append("span").style("color", "red").text(file.content_hash_before_first_trial).on("click", function () { + downloadFileContent(file.content_hash_before_first_trial, file.name); + }); + spanFileAccessReplaced.append("span").text(" to ").append("span").style("color", "green").text(file.content_hash_before_second_trial).on("click", function () { + downloadFileContent(file.content_hash_before_second_trial, file.name); + }); + spanFileAccessReplaced.append("br"); + spanFileAccessReplaced.append("span").text("Content hash after changed from ").append("span").style("color", "red").text(file.content_hash_after_first_trial).on("click", function () { + downloadFileContent(file.content_hash_after_first_trial, file.name); + }); + spanFileAccessReplaced.append("span").text(" to ").append("span").style("color", "green").text(file.content_hash_after_second_trial).on("click", function () { + downloadFileContent(file.content_hash_after_second_trial, file.name); + }); + spanFileAccessReplaced.append("br"); + spanFileAccessReplaced.append("span").text("Timestamp changed from ").append("span").style("color", "red").text(file.timestamp_first_trial); + spanFileAccessReplaced.append("span").text(" to ").append("span").style("color", "green").text(file.timestamp_second_trial); + spanFileAccessReplaced.append("br"); + spanFileAccessReplaced.append("span").text("Checkpoint changed from ").append("span").style("color", "red").text(file.checkpoint_first_trial); + spanFileAccessReplaced.append("span").text(" to ").append("span").style("color", "green").text(file.checkpoint_second_trial); + //spanFileAccessReplaced.append("span").style("color", color).text("Function: " + file.stack); + spanFileAccessReplaced.append("br"); + spanFileAccessReplaced.append("br"); + }); + function downloadFileContent(fileHash, fileName) { + var link = document.createElement("a"); + link.download = fileName; + link.href = window.location.origin + "/downloadFile/" + fileHash; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + link.remove(); + } -}); + /* function showFileContent(fileHash: any, fileName : any) { + fetch("getFileContent/" + fileHash, { + method: 'GET', // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + }, + }).then((response) => { + response.json().then((json) => { + if(fileName.length > 50) fileName = fileName.substring(40); + let modal = d3_select(document.getElementById("main")) + .append("div").classed("modal fade show", true) + .attr("id", "fileContentModal") + .attr("tabindex", "-1") + .attr("role", "dialog") + .attr("aria-labelledby", "fileContentModal") + .style("display", "none") + .attr("aria-hidden", "false") + .style("display", "block"); + + let modalDialog = modal.append("div").classed("modal-dialog", true).attr("role","document").style("overflow-y","initial").style("max-height", "85%"); + let modalContent = modalDialog.append("div").classed("modal-content", true); + + let modalHeader = modalContent.append("div").classed("modal-header", true); + modalHeader.append("h5").classed("modal-title", true).attr("id", "fileContentModalLabel").text("File "+fileName+"'s content:"); + modalHeader.append("button").classed("close", true).attr("data-dismiss", "modal").attr("aria-label", "Close") + .append("span").attr("aria-hidden", "true").html("×").on("click", () => modal.remove()); + let modalBody = modalContent.append("div").classed("modal-body", true).style("overflow-y", "auto").style("height", "80vh"); + modalBody.append("p").html(json.file_content.replace("\r\n", "
    ").replace("\n", "
    ")); + }); + }); + } */ +} -ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module){"use strict"; -var lang = require("./lib/lang"); -var oop = require("./lib/oop"); -var Range = require("./range").Range; -var Search = /** @class */ (function () { - function Search() { - this.$options = {}; +/***/ }), + +/***/ "./src/graph/history_graph.ts": +/*!************************************!*\ + !*** ./src/graph/history_graph.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HistoryWidget: () => (/* binding */ HistoryWidget) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var _noworkflow_history__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noworkflow/history */ "../history/lib/index.js"); +/* harmony import */ var _noworkflow_history__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_history__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _trial_graph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./trial_graph */ "./src/graph/trial_graph.ts"); +/* harmony import */ var _diff_graph__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./diff_graph */ "./src/graph/diff_graph.ts"); +/* harmony import */ var _info_trial_info__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../info/trial_info */ "./src/info/trial_info.ts"); +/* harmony import */ var _info_diff_info__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../info/diff_info */ "./src/info/diff_info.ts"); +/* harmony import */ var _function_diff__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./function_diff */ "./src/graph/function_diff.ts"); +/* harmony import */ var file_saver__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! file-saver */ "../../node_modules/file-saver/dist/FileSaver.min.js"); +/* harmony import */ var file_saver__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(file_saver__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _viz_js_viz__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @viz-js/viz */ "../../node_modules/@viz-js/viz/lib/viz-standalone.mjs"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } + + + + + + + + + + + +var pl = __webpack_require__(/*! tau-prolog */ "../../node_modules/tau-prolog/modules/core.js"); +var svgPanZoom = __webpack_require__(/*! svg-pan-zoom */ "../../node_modules/svg-pan-zoom/src/browserify.js"); +"svg-pan-zoom"; +var HistoryWidget = /*#__PURE__*/function (_Widget) { + function HistoryWidget(config, name, cls, expId, annontationWidget) { + var _this; + _classCallCheck(this, HistoryWidget); + _this = _callSuper(this, HistoryWidget, [{ + node: HistoryWidget.createNode() + }]); + _defineProperty(_this, "functionDiffWindow", _function_diff__WEBPACK_IMPORTED_MODULE_7__.functionDiffWindow); + _this.expId = expId; + _this.config = config; + _this.annontationWidget = annontationWidget; + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(_this.node); + _this.d3node.select('.reload-button').on("click", function () { + _this.load(_this.d3node.select(".script-options").property("value"), _this.d3node.select(".exec-selection").property("value"), _this.d3node.select(".summarize").property("checked")); + }); + _this.rightClickMenu = _this.d3node.append("div").classed("dropdown-menu dropdown-menu-sm", true).attr("id", "context-menu").attr("selected-trial", "").style("display", "block"); + _this.buildModal(_this.node); + _this.buildRightClickMenu(); + + //this.setFlag(Widget.Flag.DisallowLayout); + _this.addClass('content'); + _this.addClass('trial-widget'); + _this.title.label = name; + _this.title.closable = false; + _this.title.caption = "".concat(name, " Graph"); + _this.name = name; + _this.cls = cls; + return _this; + } + _inherits(HistoryWidget, _Widget); + return _createClass(HistoryWidget, [{ + key: "setGraph", + value: function setGraph(data) { + var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var sub = this.node.getElementsByClassName("sub-content")[0]; + sub.innerHTML = ""; + this.graph = new _noworkflow_history__WEBPACK_IMPORTED_MODULE_1__.HistoryGraph(this.cls, sub, config); + this.graph.load(data); } - Search.prototype.set = function (options) { - oop.mixin(this.$options, options); - return this; - }; - Search.prototype.getOptions = function () { - return lang.copyObject(this.$options); - }; - Search.prototype.setOptions = function (options) { - this.$options = options; - }; - Search.prototype.find = function (session) { - var options = this.$options; - var iterator = this.$matchIterator(session, options); - if (!iterator) - return false; - var firstRange = null; - iterator.forEach(function (sr, sc, er, ec) { - firstRange = new Range(sr, sc, er, ec); - if (sc == ec && options.start && /**@type{Range}*/ (options.start).start - && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) { - firstRange = null; - return false; - } - return true; - }); - return firstRange; - }; - Search.prototype.findAll = function (session) { - var options = this.$options; - if (!options.needle) - return []; - this.$assembleRegExp(options); - var range = options.range; - var lines = range - ? session.getLines(range.start.row, range.end.row) - : session.doc.getAllLines(); - var ranges = []; - var re = options.re; - if (options.$isMultiLine) { - var len = re.length; - var maxRow = lines.length - len; - var prevRange; - outer: for (var row = re.offset || 0; row <= maxRow; row++) { - for (var j = 0; j < len; j++) - if (lines[row + j].search(re[j]) == -1) - continue outer; - var startLine = lines[row]; - var line = lines[row + len - 1]; - var startIndex = startLine.length - startLine.match(re[0])[0].length; - var endIndex = line.match(re[len - 1])[0].length; - if (prevRange && prevRange.end.row === row && - prevRange.end.column > startIndex) { - continue; - } - ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex)); - if (len > 2) - row = row + len - 2; - } - } - else { - for (var matches, i = 0; i < lines.length; i++) { - if (this.$isMultilineSearch(options)) { - var lng = lines.length - 1; - matches = this.$multiLineForward(session, re, i, lng); - if (matches) { - var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng; - if (end_row > i) - i = end_row; - ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol)); - } - } - else { - matches = lang.getMatchOffsets(lines[i], re); - for (var j = 0; j < matches.length; j++) { - var match = matches[j]; - ranges.push(new Range(i, match.offset, i, match.offset + match.length)); - } - } - } - } - if (range) { - var startColumn = range.start.column; - var endColumn = range.end.column; - var i = 0, j = ranges.length - 1; - while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0) - i++; - var endRow = range.end.row - range.start.row; - while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow) - j--; - ranges = ranges.slice(i, j + 1); - for (i = 0, j = ranges.length; i < j; i++) { - ranges[i].start.row += range.start.row; - ranges[i].end.row += range.start.row; - } - } - return ranges; - }; - Search.prototype.parseReplaceString = function (replaceString) { - var CharCode = { - DollarSign: 36, - Ampersand: 38, - Digit0: 48, - Digit1: 49, - Digit9: 57, - Backslash: 92, - n: 110, - t: 116 - }; - var replacement = ''; - for (var i = 0, len = replaceString.length; i < len; i++) { - var chCode = replaceString.charCodeAt(i); - if (chCode === CharCode.Backslash) { - i++; - if (i >= len) { - replacement += "\\"; - break; - } - var nextChCode = replaceString.charCodeAt(i); - switch (nextChCode) { - case CharCode.Backslash: - replacement += "\\"; - break; - case CharCode.n: - replacement += "\n"; - break; - case CharCode.t: - replacement += "\t"; - break; - } - continue; + }, { + key: "load", + value: function load() { + var _this2 = this; + var script = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "*"; + var execution = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "*"; + var summarize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var sub = this.node.getElementsByClassName("sub-content")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__.json)("History", sub, HistoryWidget.url(script, execution, summarize), function (data) { + _this2.setGraph(data, { + width: _this2.node.getBoundingClientRect().width - 24, + height: _this2.node.getBoundingClientRect().height - 24, + customCtrlClick: function customCtrlClick(g, d) { + var redTrial = g.state.selectedNode; + if (redTrial == null) { + return true; } - if (chCode === CharCode.DollarSign) { - i++; - if (i >= len) { - replacement += "$"; - break; - } - var nextChCode_1 = replaceString.charCodeAt(i); - if (nextChCode_1 === CharCode.DollarSign) { - replacement += "$$"; - continue; - } - if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) { - replacement += "$&"; - continue; - } - if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) { - replacement += "$" + replaceString[i]; - continue; - } + var greenTrial = d; + var diffGraphWidget = new _diff_graph__WEBPACK_IMPORTED_MODULE_4__.DiffGraphWidget("Diff " + redTrial.display + "-" + greenTrial.display, "diff-" + redTrial.title + "-" + greenTrial.title + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__.makeid)(), redTrial.title, greenTrial.title, _this2.functionDiffWindow, _this2.parent); + diffGraphWidget.d3node.append("span").text("Ctrl+(left click) on a function overlap to see the functions' diff").style('font-family', 'sans-serif').style('font-size', '12px').style('pointer-events', 'none').lower(); + var parentDock = _this2.parent; + if (_this2.config.showInfo()) { + var diffInfoWidget = new _info_diff_info__WEBPACK_IMPORTED_MODULE_6__.DiffInfoWidget(redTrial.display, greenTrial.display, redTrial.title, greenTrial.title); + parentDock.addInfoWidget(diffInfoWidget); + parentDock.activateWidget(diffInfoWidget); } - replacement += replaceString[i]; - } - return replacement || replaceString; - }; - Search.prototype.replace = function (input, replacement) { - var options = this.$options; - var re = this.$assembleRegExp(options); - if (options.$isMultiLine) - return replacement; - if (!re) - return; - var mtSearch = this.$isMultilineSearch(options); - if (mtSearch) - input = input.replace(/\r\n|\r|\n/g, "\n"); - var match = re.exec(input); - if (!match || (!mtSearch && match[0].length != input.length)) - return null; - replacement = options.regExp - ? this.parseReplaceString(replacement) - : replacement.replace(/\$/g, "$$$$"); - replacement = input.replace(re, replacement); - if (options.preserveCase) { - replacement = replacement.split(""); - for (var i = Math.min(input.length, input.length); i--;) { - var ch = input[i]; - if (ch && ch.toLowerCase() != ch) - replacement[i] = replacement[i].toUpperCase(); - else - replacement[i] = replacement[i].toLowerCase(); + if (_this2.config.showTrial()) { + parentDock.addGraphWidget(diffGraphWidget); + parentDock.activateWidget(diffGraphWidget); + diffGraphWidget.load(_this2.config.graphType(), _this2.config.useCache()); } - replacement = replacement.join(""); - } - return replacement; - }; - Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) { - if (options.needle instanceof RegExp) - return options.re = options.needle; - var needle = options.needle; - if (!options.needle) - return options.re = false; - if (!options.regExp) - needle = lang.escapeRegExp(needle); - var modifier = options.caseSensitive ? "gm" : "gmi"; - try { - new RegExp(needle, "u"); - options.$supportsUnicodeFlag = true; - modifier += "u"; - } - catch (e) { - options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\{2}/gu - } - if (options.wholeWord) - needle = addWordBoundary(needle, options); - options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); - if (options.$isMultiLine) - return options.re = this.$assembleMultilineRegExp(needle, modifier); - try { - var re = new RegExp(needle, modifier); - } - catch (e) { - re = false; - } - return options.re = re; - }; - Search.prototype.$assembleMultilineRegExp = function (needle, modifier) { - var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); - var re = []; - for (var i = 0; i < parts.length; i++) - try { - re.push(new RegExp(parts[i], modifier)); + return true; + }, + customWindowTabCommand: function customWindowTabCommand(trialIdSimplified, windowId, command) { + var trialExportWidget = new _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget(); + trialExportWidget.title.label = command + " trial " + trialIdSimplified; + trialExportWidget.title.closable = true; + trialExportWidget.id = windowId; + var parentDock = _this2.parent; + parentDock.addGraphWidget(trialExportWidget); + parentDock.activateWidget(trialExportWidget); + return true; + }, + customSelectNode: function customSelectNode(g, d) { + var trialGraphWidget = new _trial_graph__WEBPACK_IMPORTED_MODULE_3__.TrialGraphWidget("Trial " + d.display, "trial-" + d.title + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_2__.makeid)(), d.title, d.title); + var parentDock = _this2.parent; + if (_this2.config.showInfo()) { + var trialInfoWidget = new _info_trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget(d, _this2.annontationWidget); + parentDock.addInfoWidget(trialInfoWidget); + parentDock.activateWidget(trialInfoWidget); } - catch (e) { - return false; + if (_this2.config.showTrial()) { + parentDock.addGraphWidget(trialGraphWidget); + parentDock.activateWidget(trialGraphWidget); + trialGraphWidget.load(_this2.config.graphType(), _this2.config.useCache()); } - return re; - }; - Search.prototype.$isMultilineSearch = function (options) { - return options.re && /\\r\\n|\\r|\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine; - }; - Search.prototype.$multiLineForward = function (session, re, start, last) { - var line, chunk = chunkEnd(session, start); - for (var row = start; row <= last;) { - for (var i = 0; i < chunk; i++) { - if (row > last) - break; - var next = session.getLine(row++); - line = line == null ? next : line + "\n" + next; + return true; + }, + customForm: function customForm(graph, form) { + // Toggle Tooltips + var filterDiv = _this2.d3node.select(".history-content .filter"); + var scriptOptions = filterDiv.select(".script-options"); + var currentScript = scriptOptions.property("value"); + scriptOptions.html(""); + scriptOptions.append("option").attr("value", "*").text("All Scripts"); + var _iterator = _createForOfIteratorHelper(data.scripts), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var _script = _step.value; + scriptOptions.append("option").attr("value", _script).text(_script); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); } - var match = re.exec(line); - re.lastIndex = 0; - if (match) { - var beforeMatch = line.slice(0, match.index).split("\n"); - var matchedText = match[0].split("\n"); - var startRow = start + beforeMatch.length - 1; - var startCol = beforeMatch[beforeMatch.length - 1].length; - var endRow = startRow + matchedText.length - 1; - var endCol = matchedText.length == 1 - ? startCol + matchedText[0].length - : matchedText[matchedText.length - 1].length; - return { - startRow: startRow, - startCol: startCol, - endRow: endRow, - endCol: endCol - }; + scriptOptions.property("value", currentScript); + var filterToggle = form.append("input").attr("id", "history-" + graph.graphId + "-toolbar-filter-check").attr("type", "checkbox").attr("name", "history-toolbar-filter-check").attr("value", "show").property("checked", filterDiv.classed('visible')).on("change", function () { + var visible = filterToggle.property("checked"); + filterToggleI.classed('fa-circle-o', visible).classed('fa-circle', !visible); + filterDiv.classed('visible', visible).classed('show-toolbar', visible).classed('hide-toolbar', !visible); + }); + var filterLabel = form.append("label").attr("for", "history-" + graph.graphId + "-toolbar-filter-check"); + var filterToggleI = filterLabel.append("i").classed('fa', true).classed("fa-circle", !filterDiv.classed('visible')).classed("fa-circle-o", filterDiv.classed('visible')); + + // Push trial + form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-push-trial").attr("href", "#").attr("title", "Push trial").on("click", function () { + return _this2.buildPushCommand(_this2.modal, _this2.modalBody); + }).append("i").classed("fa fa-cloud-upload", true); + + // Pull trial + form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-pull-trial").attr("href", "#").attr("title", "Pull trial").on("click", function () { + return _this2.buildPullCommand(_this2.modal, _this2.modalBody); + }).append("i").classed("fa fa-cloud-download", true); + + // Add remote + form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-add-remote").attr("href", "#").attr("title", "Add remote").on("click", function () { + return _this2.buildAddRemote(_this2.modal, _this2.modalBody); + }).append("i").classed("fa fa-plus-circle", true); + + // Edit remote + form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-edit-remote").attr("href", "#").attr("title", "Edit remote").on("click", function () { + return _this2.buildEditRemote(_this2.modal, _this2.modalBody); + }).append("i").classed("fa fa-pencil-square", true); + + // Delete remote + form.append("a").classed("toollink", true).attr("id", "history-" + graph.graphId + "-delete-remote").attr("href", "#").attr("title", "Delete remote").on("click", function () { + return _this2.buildDeleteRemote(_this2.modal, _this2.modalBody); + }).append("i").classed("fa fa-trash", true); + } + }); + }); + } + }, { + key: "onResize", + value: function onResize(msg) { + if (!this.graph) { + return; + } + this.graph.config.width = this.node.getBoundingClientRect().width - 24; + this.graph.config.height = this.node.getBoundingClientRect().height - 24; + this.graph.updateWindow(); + } + }, { + key: "buildModal", + value: function buildModal(div) { + var _this3 = this; + this.modal = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(div).append("div").classed("modal fade", true).attr("id", "commandsModal").attr("tabindex", "-1").attr("role", "dialog").attr("aria-labelledby", "commandsModalTitle").style("display", "none").attr("aria-hidden", "true"); + var modalContent = this.modal.append("div").classed("modal-dialog", true).attr("role", "document").append("div").classed("modal-content", true); //modal content + + var modalHeader = modalContent.append("div").classed("modal-header", true); //modal header + modalHeader.append("h5").classed("modal-title", true).attr("id", "exampleModalTitle").text("Change Temporary Title"); //modal title + + this.modalBody = modalContent.append("div").classed("modal-body", true); + modalHeader.append("button").classed("close", true).attr("type", "button").text("x").style("float", "right").on("click", function () { + return cleanModalBodyAndClose(_this3.modal, _this3.modalBody); + }); //close modal + } + }, { + key: "buildRightClickMenu", + value: function buildRightClickMenu() { + //let modal = document.getElementById("commandsModal"); + this.buildRestoreTrialCommand(this.modal, this.modalBody); + this.buildRestoreFileCommand(this.modal, this.modalBody); + this.buildProvCommand(); + this.buildExportPrologCommand(this.modal, this.modalBody); + this.buildDataflowCommand(this.modal, this.modalBody); + this.buildTrialFunctionDiffCommand(this.modal, this.modalBody, this.functionDiffWindow); + } + }, { + key: "buildTrialFunctionDiffCommand", + value: function buildTrialFunctionDiffCommand(modal, modalBody, functionDiffWindow) { + var self = this; + this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "trial-function-diff-option").text("function activation diff").on("click", function () { + var _parent$getAttribute; + var parent = this.parentNode; + var trialId = (_parent$getAttribute = parent.getAttribute("selected-trial")) !== null && _parent$getAttribute !== void 0 ? _parent$getAttribute : ""; + buildTrialFunctionDiffModal(modal, modalBody, parent, trialId, functionDiffWindow, self); + }); + } + }, { + key: "buildDataflowCommand", + value: function buildDataflowCommand(modal, modalBody) { + var self = this; + this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "dataflow-option").text("export dataflow").on("click", function () { + var _parent$getAttribute2; + var parent = this.parentNode; + var trialId = (_parent$getAttribute2 = parent.getAttribute("selected-trial")) !== null && _parent$getAttribute2 !== void 0 ? _parent$getAttribute2 : ""; + buildDataflowModal(modal, modalBody, parent, self.graph.config, trialId); + }); + } + }, { + key: "buildExportPrologCommand", + value: function buildExportPrologCommand(modal, modalBody) { + var self = this; + this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "export-option").text("export prolog").on("click", function () { + var parent = this.parentNode; + var trialId = parent.getAttribute("selected-trial"); + var exportUrl = "/commands/export/" + trialId; + var exportWindowId = "Export window " + trialId; + buildExportPrologModal(modal, modalBody, exportUrl, self.graph.config, parent, exportWindowId, trialId); + }); + } + }, { + key: "buildProvCommand", + value: function buildProvCommand() { + var self = this; + this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "prov-option").text("export prov").on("click", function () { + var parent = this.parentNode; + var trialId = parent.getAttribute("selected-trial"); + var provWindowId = "Prov window " + trialId; + if (document.getElementById(provWindowId)) return; + var provUrl = "/commands/prov/" + trialId; + fetch(provUrl, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(function (json) { + self.graph.config.customWindowTabCommand(parent.getAttribute("selected-trial-simplified"), provWindowId, "Prov"); + var provWindow = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(provWindowId)); + if (response.status == 200) { + provWindow.style("overflow-y", "auto"); + var prov_lines = json.prov.split("\n"); + for (var line in prov_lines) provWindow.append("p").text(prov_lines[line]); + } else { + window.alert("No prov to export"); } - } - return null; - }; - Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) { - var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex; - for (var row = start; row >= first;) { - for (var i = 0; i < chunk && row >= first; i++) { - var next = session.getLine(row--); - line = line == null ? next : next + "\n" + line; + }); + }); + }); + } + }, { + key: "buildRestoreFileCommand", + value: function buildRestoreFileCommand(modal, modalBody) { + this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "restore-file-option").text("restore file").on("click", function () { + var parent = this.parentNode; + var trialId = parent.getAttribute("selected-trial"); + var trialFiles; + fetch("/files/" + trialId, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(function (json) { + var _submitButton; + trialFiles = json.files; + changeTitle(parent, "Restore file trial "); + var submitButton; + var form; + showModal(modal); + if (modalBody) { + form = modalBody.append("form").attr("onsubmit", "return false;"); + //createFormTextInput(form, "restoreFile", "Restore file", "restoreFileHelp", "Write the name of the file you want to restore"); + createFormSelectInput(form, "restoreFile", "Restore file", 0, trialFiles.length - 1, 0, "", "", trialFiles); + createFormTextInput(form, "restoreFileID", "File identifier", "restoreIDHelp", "(optional) Identifies the file to be restored. It can be either the timestamp, the number of access, or the code hash"); + createFormTextInput(form, "restoreFileTarget", "Target file path", "restoreTargetHelp", "(optional) specifies the target path of the restored file"); + submitButton = form.append("button").classed("btn btn-primary mb-2", true).attr("type", "submit").text("restore trial"); } - var match = multiLineBackwardMatch(line, re, endMargin); - if (match) { - var beforeMatch = line.slice(0, match.index).split("\n"); - var matchedText = match[0].split("\n"); - var startRow = row + beforeMatch.length; - var startCol = beforeMatch[beforeMatch.length - 1].length; - var endRow = startRow + matchedText.length - 1; - var endCol = matchedText.length == 1 - ? startCol + matchedText[0].length - : matchedText[matchedText.length - 1].length; - return { - startRow: startRow, - startCol: startCol, - endRow: endRow, - endCol: endCol - }; + (_submitButton = submitButton) === null || _submitButton === void 0 || _submitButton.on("click", function () { + //let fileToRestore : string | boolean = getTextInputFormByID("restoreFile", true); + var fileToRestore = document.getElementById("restoreFile").selectedOptions[0].value; + var fileIdentifier = getTextInputFormByID("restoreFileID", true); + var targetPath = getTextInputFormByID("restoreFileTarget", false); + var restoreUrl = "/commands/restore/file/" + trialId + "/" + fileToRestore + "/" + fileIdentifier + "/" + targetPath; + if (fileToRestore) getRestoreOrCollabCommand(restoreUrl, form, modalBody);else addAlert(modalBody, "alert-danger", "Error!", "The file's name is empty"); + }); + }); + }); + }); + } + }, { + key: "buildRestoreTrialCommand", + value: function buildRestoreTrialCommand(modal, modalBody) { + this.rightClickMenu.append("a").classed("dropdown-item", true).attr("href", "#").attr("id", "restore-trial-option").text("restore trial").on("click", function () { + var _submitButton2; + var parent = this.parentNode; + var trialId = parent.getAttribute("selected-trial"); + changeTitle(parent, "Restore trial "); + var submitButton; + var form; + showModal(modal); + if (modalBody) { + form = modalBody.append("form").attr("onsubmit", "return false;"); + createFormCheckInput(form, "restoreSkipScript", "Skip Script"); + createFormCheckInput(form, "restoreSkipLocalModules", "Skip Local Modules"); + createFormCheckInput(form, "restoreSkipFileAccess", "Skip File Access"); + submitButton = form.append("button").classed("btn btn-primary mb-2", true).attr("type", "submit").text("restore trial"); + } + (_submitButton2 = submitButton) === null || _submitButton2 === void 0 || _submitButton2.on("click", function () { + var skipScript = document.getElementById("restoreSkipScript").checked; + var skipModules = document.getElementById("restoreSkipLocalModules").checked; + var skipFileAccess = document.getElementById("restoreSkipFileAccess").checked; + var restoreUrl = "/commands/restore/trial/" + trialId + "/" + skipScript + "/" + skipModules + "/" + skipFileAccess; + getRestoreOrCollabCommand(restoreUrl, form, modalBody); + }); + }); + } + }, { + key: "buildAddRemote", + value: function buildAddRemote(modal, modalBody) { + var _submitButton3; + document.getElementById("exampleModalTitle").textContent = "Add new remote"; + var submitButton; + var form; + showModal(modal); + if (modalBody) { + form = modalBody.append("form").attr("onsubmit", "return false;"); + createFormTextInput(form, "inputAddRemoteUrl", "Remote URL: "); + createFormTextInput(form, "inputAddRemoteName", "Remote name: "); + submitButton = form.append("button").classed("btn btn-primary mb-2", true).text("Add remote"); + } + (_submitButton3 = submitButton) === null || _submitButton3 === void 0 || _submitButton3.on("click", function () { + var remoteURL = document.getElementById("inputAddRemoteUrl").value; + var remoteName = document.getElementById("inputAddRemoteName").value; + var addRemoteURL = "/collab/remotes/add/" + remoteName + "/" + remoteURL; + fetch(addRemoteURL, { + method: 'POST', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(function (json) { + form.remove(); + if (response.status == 200) { + addAlert(modalBody, "alert-success", "Success!", json.terminal_text); + } else { + addAlert(modalBody, "alert-danger", "Error!", ""); } + }); + }); + }); + } + }, { + key: "buildDeleteRemote", + value: function buildDeleteRemote(modal, modalBody) { + var _this4 = this; + fetch("/collab/remotes/getall", { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' } - return null; - }; - Search.prototype.$matchIterator = function (session, options) { - var re = this.$assembleRegExp(options); - if (!re) - return false; - var mtSearch = this.$isMultilineSearch(options); - var mtForward = this.$multiLineForward; - var mtBackward = this.$multiLineBackward; - var backwards = options.backwards == true; - var skipCurrent = options.skipCurrent != false; - var supportsUnicodeFlag = re.unicode; - var range = options.range; - var start = options.start; - if (!start) - start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); - if (start.start) - start = start[skipCurrent != backwards ? "end" : "start"]; - var firstRow = range ? range.start.row : 0; - var lastRow = range ? range.end.row : session.getLength() - 1; - if (backwards) { - var forEach = function (callback) { - var row = start.row; - if (forEachInLine(row, start.column, callback)) - return; - for (row--; row >= firstRow; row--) - if (forEachInLine(row, Number.MAX_VALUE, callback)) - return; - if (options.wrap == false) - return; - for (row = lastRow, firstRow = start.row; row >= firstRow; row--) - if (forEachInLine(row, Number.MAX_VALUE, callback)) - return; - }; + }).then(function (response) { + response.json().then(/*#__PURE__*/function () { + var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(json) { + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + if (response.status == 200) { + _this4.executeCollabCommand(modal, modalBody, "editDeleteServerUrlId", "Delete remote", "delete", json.remotes); + } else { + console.log("Failed to get remotes"); + } + case 1: + case "end": + return _context.stop(); + } + }, _callee); + })); + return function (_x) { + return _ref.apply(this, arguments); + }; + }()); + }); + } + }, { + key: "buildEditRemote", + value: function buildEditRemote(modal, modalBody) { + var _this5 = this; + fetch("/collab/remotes/getall", { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' } - else { - var forEach = function (callback) { - var row = start.row; - if (forEachInLine(row, start.column, callback)) - return; - for (row = row + 1; row <= lastRow; row++) - if (forEachInLine(row, 0, callback)) - return; - if (options.wrap == false) - return; - for (row = firstRow, lastRow = start.row; row <= lastRow; row++) - if (forEachInLine(row, 0, callback)) - return; - }; + }).then(function (response) { + response.json().then(/*#__PURE__*/function () { + var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(json) { + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + if (response.status == 200) { + _this5.executeCollabCommand(modal, modalBody, "editRemoteServerUrlId", "Edit remote", "edit", json.remotes); + } else { + console.log("Failed to get remotes"); + } + case 1: + case "end": + return _context2.stop(); + } + }, _callee2); + })); + return function (_x2) { + return _ref2.apply(this, arguments); + }; + }()); + }); + } + }, { + key: "buildPushCommand", + value: function buildPushCommand(modal, modalBody) { + var _this6 = this; + fetch("/collab/remotes/getall", { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(/*#__PURE__*/function () { + var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(json) { + return _regeneratorRuntime().wrap(function _callee3$(_context3) { + while (1) switch (_context3.prev = _context3.next) { + case 0: + if (response.status == 200) { + _this6.executeCollabCommand(modal, modalBody, "pushServerUrlId", "Push experiment", "push", json.remotes); + } else { + console.log("Failed to get remotes"); + } + case 1: + case "end": + return _context3.stop(); + } + }, _callee3); + })); + return function (_x3) { + return _ref3.apply(this, arguments); + }; + }()); + }); + } + }, { + key: "buildPullCommand", + value: function buildPullCommand(modal, modalBody) { + var _this7 = this; + fetch("/collab/remotes/getall", { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(/*#__PURE__*/function () { + var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(json) { + return _regeneratorRuntime().wrap(function _callee4$(_context4) { + while (1) switch (_context4.prev = _context4.next) { + case 0: + if (response.status == 200) { + _this7.executeCollabCommand(modal, modalBody, "pullServerUrlId", "Pull experiment", "pull", json.remotes); + } else { + console.log("Failed to get remotes"); + } + case 1: + case "end": + return _context4.stop(); + } + }, _callee4); + })); + return function (_x4) { + return _ref4.apply(this, arguments); + }; + }()); + }); + } + }, { + key: "executeCollabCommand", + value: function executeCollabCommand(modal, modalBody, serverUrlId, title, command, remotes) { + var _submitButton4; + document.getElementById("exampleModalTitle").textContent = title; + var submitButton; + var form; + showModal(modal); + var select; + if (modalBody) { + form = modalBody.append("form").attr("onsubmit", "return false;"); + form.append("label").attr("for", "remotes").text("Remote: "); + select = form.append("select").attr("name", "remotes").attr("id", "remotes"); + for (var i = 0; i < remotes.length; i++) { + select.append("option").attr("value", remotes[i].server_url).text(remotes[i].name); } - if (options.$isMultiLine) { - var len = re.length; - var forEachInLine = function (row, offset, callback) { - var startRow = backwards ? row - len + 1 : row; - if (startRow < 0 || startRow + len > session.getLength()) - return; - var line = session.getLine(startRow); - var startIndex = line.search(re[0]); - if (!backwards && startIndex < offset || startIndex === -1) - return; - for (var i = 1; i < len; i++) { - line = session.getLine(startRow + i); - if (line.search(re[i]) == -1) - return; - } - var endIndex = line.match(re[len - 1])[0].length; - if (backwards && endIndex > offset) - return; - if (callback(startRow, startIndex, startRow + len - 1, endIndex)) - return true; - }; + form.append("br"); + form.append("span").text("Remote URL: "); + var remoteURLText = form.append("span").attr("id", serverUrlId + "Remote").text(remotes[0].server_url); + select.on("change", function () { + remoteURLText.text(select.node().value); + }); + form.append("br"); + if (command == "edit") { + createFormTextInput(form, "inputEditRemoteName", "Remote new name: "); } - else if (backwards) { - var forEachInLine = function (row, endIndex, callback) { - if (mtSearch) { - var pos = mtBackward(session, re, endIndex, row, firstRow); - if (!pos) - return false; - if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol)) - return true; - } - else { - var line = session.getLine(row); - var matches = []; - var m, last = 0; - re.lastIndex = 0; - while ((m = re.exec(line))) { - var length = m[0].length; - last = m.index; - if (!length) { - if (last >= line.length) - break; - re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag); - } - if (m.index + length > endIndex) - break; - matches.push(m.index, length); - } - for (var i = matches.length - 1; i >= 0; i -= 2) { - var column = matches[i - 1]; - var length = matches[i]; - if (callback(row, column, row, column + length)) - return true; - } - } - }; + submitButton = form.append("button").classed("btn btn-primary mb-2", true).text(title); + } + (_submitButton4 = submitButton) === null || _submitButton4 === void 0 || _submitButton4.on("click", function () { + var serverUrl = select.node().value; + var collabCommandUrl = "/commands/" + command + "/" + serverUrl; + if (command == "edit") collabCommandUrl = "/collab/remotes/edit/" + document.getElementById("inputEditRemoteName").value + "/" + serverUrl; + if (command == "delete") collabCommandUrl = "/collab/remotes/delete/" + serverUrl; + getRestoreOrCollabCommand(collabCommandUrl, form, modalBody); + }); + } + }], [{ + key: "url", + value: function url() { + var script = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "*"; + var execution = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "*"; + var summarize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + return "trials.json" + "?script=" + encodeURIComponent(script) + "&execution=" + encodeURIComponent(execution) + "&summarize=" + (summarize ? "1" : "0"); + } + }, { + key: "createNode", + value: function createNode() { + var node = document.createElement('div'); + var content = document.createElement('div'); + node.appendChild(content); + var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(content); + var d3content = d3node.append('div').classed('history-content', true); + var filterDiv = d3content.append("div") + //let filterDiv = form.insert("div", ":first-child") + .classed("filter", true).classed("hide-toolbar", true); + var filterInternal = filterDiv.append("div").classed("internal", true); + var scriptOptions = filterInternal.append("select").attr("name", "script").classed("select-style script-options", true); + scriptOptions.append("option").attr("value", "*").text("All Scripts"); + var executionOptions = filterInternal.append("select").attr("name", "execution").classed("select-style exec-selection", true); + executionOptions.append("option").attr("value", "*").text("All Statuses"); + executionOptions.append("option").attr("value", "finished").text("Finished Trials"); + executionOptions.append("option").attr("value", "unfinished").text("Unfinished Trials"); + executionOptions.append("option").attr("value", "backup").text("Backup Trials"); + var summarize = filterInternal.append("div").classed("graph-attr", true); + summarize.append("input").attr("type", "checkbox").attr("name", "summarize").attr("value", "").attr("checked", false).classed("summarize", true).attr("id", "history-summarize"); + summarize.append("label").attr("for", "history-summarize").attr("title", "Summarize History").text("Summarize"); + var filterReload = filterInternal.append("a").attr("href", "#").classed("link-button reload-button", true); + filterReload.append('i').classed("fa fa-refresh", true); + filterReload.append('span').text('Reload'); + d3content.append('div').classed('sub-content', true); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); +function buildTrialFunctionDiffModal(modal, modalBody, parent, trialId, functionDiffWindow, self) { + var secondTrialId; + changeTitle(parent, "Function activation diff trial"); + //document.getElementById("exampleModalTitle")!.textContent = "Function activation diff trial " + trialId; + + fetch("/getFunctionActivations/" + trialId, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(function (json) { + showModal(modal); + if (modalBody) { + //scrollableModal(modalBody); + + modalBody.append("span").text("Select this trial's activation: "); + var firstTrialSelectActivation = modalBody.append("select").classed("form-select", true).attr("arial-label", "firstTrialFunctionActivations").attr("id", "firstTrialFunctionActivations").style("max-width", "480px"); + for (var activation in json["function_activations"]) { + firstTrialSelectActivation.append("option").attr("value", json["function_activations"][activation].id).text(JSON.stringify(json["function_activations"][activation]).replace(/{|}/g, "").substring(0, 70)); } - else { - var forEachInLine = function (row, startIndex, callback) { - re.lastIndex = startIndex; - if (mtSearch) { - var pos = mtForward(session, re, row, lastRow); - if (pos) { - var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow; - if (end_row > row) - row = end_row; - } - if (!pos) - return false; - if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol)) - return true; - } - else { - var line = session.getLine(row); - var last; - var m; - while ((m = re.exec(line))) { - var length = m[0].length; - last = m.index; - if (callback(row, last, row, last + length)) - return true; - if (!length) { - re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag); - if (last >= line.length) - return false; - } - } + modalBody.append("br"); + modalBody.append("span").text("Select the other trial: "); + var secondTrialSelect = modalBody.append("select").classed("form-select", true).attr("arial-label", "secondTrialSelect").attr("id", "secondTrialSelect"); + fetch("/getAllTrialsIdsAndTags", { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(function (json) { + for (var trial in json) { + secondTrialSelect.append("option").attr("value", json[trial].id).text(json[trial].tag); + } + modalBody.append("br"); + modalBody.append("span").text("Select the other trial's activation: "); + var secondTrialSelectActivation = modalBody.append("select").classed("form-select", true).attr("arial-label", "secondTrialFunctionActivations").attr("id", "secondTrialFunctionActivations").style("max-width", "480px"); + getSecondTrialFunctionActivations(secondTrialSelectActivation); + secondTrialSelect.on("change", function () { + getSecondTrialFunctionActivations(secondTrialSelectActivation); + }); + modalBody.append("br"); + var submitButton = modalBody.append("button").classed("btn btn-primary mb-2", true).style("margin-top", "10px").text("Confirm"); + submitButton.on("click", function () { + var firstTrialFunctionId = document.getElementById("firstTrialFunctionActivations").selectedOptions[0].value; + var secondTrialFunctionId = document.getElementById("secondTrialFunctionActivations").selectedOptions[0].value; + var url = "/commands/diff/" + trialId + "/" + firstTrialFunctionId + "/" + secondTrialId + "/" + secondTrialFunctionId; + fetch(url, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' } - }; + }).then(function (response) { + response.json().then(function (json) { + functionDiffWindow(json, "Diff trial " + trialId + " activation_id " + firstTrialFunctionId + " trial " + secondTrialId + " activation_id " + secondTrialFunctionId, self.parent); + }); + }); + cleanModalBodyAndClose(modal, modalBody); + }); + }); + }); + } + }); + }); + function getSecondTrialFunctionActivations(secondTrialSelectActivation) { + secondTrialId = document.getElementById("secondTrialSelect").selectedOptions[0].value; + fetch("/getFunctionActivations/" + secondTrialId, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(function (json) { + secondTrialSelectActivation.html(""); + for (var activation in json["function_activations"]) { + secondTrialSelectActivation.append("option").attr("value", json["function_activations"][activation].id).text(JSON.stringify(json["function_activations"][activation]).replace(/{|}/g, "").substring(0, 70)); } - return { forEach: forEach }; - }; - return Search; -}()); -function addWordBoundary(needle, options) { - var supportsLookbehind = lang.supportsLookbehind(); - function wordBoundary(c, firstChar) { - if (firstChar === void 0) { firstChar = true; } - var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp("[\\p{L}\\p{N}_]", "u") : new RegExp("\\w"); - if (wordRegExp.test(c) || options.regExp) { - if (supportsLookbehind && options.$supportsUnicodeFlag) { - if (firstChar) - return "(?<=^|[^\\p{L}\\p{N}_])"; - return "(?=[^\\p{L}\\p{N}_]|$)"; + }); + }); + } +} +function buildExportPrologModal(modal, modalBody, exportUrl, config, parent, exportWindowId, trialId) { + var _submitButton5; + var submitButton; + var form; + document.getElementById("exampleModalTitle").textContent = "Prolog"; + showModal(modal); + if (modalBody) { + form = modalBody.append("form").attr("onsubmit", "return false;"); + createFormCheckInput(form, "exportProvRules", "Also exports inference rules"); + createFormCheckInput(form, "exportProvHideTimestamps", "Hide timestamps"); + submitButton = form.append("button").classed("btn btn-primary mb-2", true).text("Generate prolog"); + } + (_submitButton5 = submitButton) === null || _submitButton5 === void 0 || _submitButton5.on("click", function () { + var inferenceRules = document.getElementById("exportProvRules").checked; + var hideTimestamps = document.getElementById("exportProvHideTimestamps").checked; + exportUrl += "/" + inferenceRules + "/" + hideTimestamps; + buildExportPrologTab(exportUrl, config, parent, exportWindowId, trialId); + cleanModalBodyAndClose(modal, modalBody); + }); +} +function buildExportPrologTab(exportUrl, config, parent, exportWindowId, trialId) { + if (document.getElementById(exportWindowId)) { + window.alert("Close trial " + trialId + " prolog tab before generating a new prolog"); + return; + } + fetch(exportUrl, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(function (json) { + if (response.status == 200) { + config.customWindowTabCommand(parent.getAttribute("selected-trial-simplified"), exportWindowId, "Prolog"); + var exportWindow = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(exportWindowId)); + var form = exportWindow.append("form").attr("onsubmit", "return false;").append("div").classed("form-row", true); + createFormTextInput(form, "exportPrologProgram" + trialId, "Prolog").classed("col-7", true); + createFormTextInput(form, "exportPrologQuery" + trialId, "Query").classed("col", true); + var submitButton = form.append("div").classed("col-auto", true).style("padding-top", "5vh").append("button").classed("btn btn-primary mb-2", true).text("Execute Query"); + document.getElementById("exportPrologProgram" + trialId).value = json["export"]; + var prologSession = pl.create(1000); + var _answerCallback = function answerCallback(answer, answerString) { + if (answer == false) { + var answerCardTextId = "Answers prolog card text " + trialId; + var answerCardText = document.getElementById(answerCardTextId) ? (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(answerCardTextId)) : null; + if (answerCardText == null) { + var answerWindow = exportWindow.append("div"); + answerWindow.classed("card", true).append("div").classed("card-header", true).text("Answers"); + answerCardText = answerWindow.append("div").classed("card-body", true).append("p").classed("card-text", true).attr("id", answerCardTextId).style("overflow-y", "auto").style("max-height", "35vh"); } - return "\\b"; + answerCardText.html(answerString); + return; + } + answerString += prologSession.format_answer(answer).toString() + "
    "; + prologSession.answer(function (answer) { + return _answerCallback(answer, answerString); + }); + }; + submitButton.on("click", function () { + var prologProgram = getTextInputFormByID("exportPrologProgram" + trialId); + var userQuery = getTextInputFormByID("exportPrologQuery" + trialId); + if (prologProgram && userQuery) { + prologSession.consult(prologProgram, { + success: function success() { + console.log("Prolog consult success"); + prologSession.query(userQuery, { + success: function success() { + prologSession.answer(function (answer) { + return _answerCallback(answer, ""); + }); + }, + error: function error() { + console.log("Erro query"); + } + }); + }, + error: function error() { + console.log("Prolog consult error"); + } + }); + } + }); + } else { + console.log("Export error"); + } + }); + }); +} +function scrollableModal(modalBody) { + var modalDialog = document.getElementsByClassName("modal-dialog")[0]; + modalDialog.style.overflowY = "initial"; + modalDialog.style.maxHeight = "85%"; + modalBody.style("overflow-y", "auto").style("height", "80vh"); +} +function getDataflow(response, config, parent, dataflowWindowId, dataflowUrl) { + response.json().then(function (json) { + if (response.status == 200) { + var trialIdSimplified = parent.getAttribute("selected-trial-simplified"); + config.customWindowTabCommand(trialIdSimplified, dataflowWindowId, "Dataflow"); + console.log(json.dataflow); + (0,_viz_js_viz__WEBPACK_IMPORTED_MODULE_9__.instance)().then(function (viz) { + var dataflowWindow = document.getElementById(dataflowWindowId); + + // Download SVG Button, excluding hint, and excluding checkbox + dataflowButtons(dataflowWindow, dataflowWindowId, "Click on a function call, then (Ctrl or Shift)+click on another one to exclude prior provenience", json.dataflow); + var selectedNode; + var selectedEdge; + + //dataflowWindow!.style.overflowY = dataflowWindow!.style.overflowX = "auto"; + var svgElement = viz.renderSVGElement(json.dataflow); + dataflowWindow.appendChild(svgElement); + svgPanZoom(svgElement, { + preventMouseEventsDefault: false, + dblClickZoomEnabled: false + }); + var _loop = function _loop(nodeIndex) { + var presentNode = svgElement.children[0].children[0].children[nodeIndex]; + if (presentNode.getAttribute("class") == "node" && presentNode.children[1].tagName.toLowerCase() == "polygon") { + var presentNodeSelection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(presentNode); + presentNodeSelection.style("cursor", "pointer"); + presentNodeSelection.on("click", function (event) { + if (selectedNode) { + selectedNode.children[1].setAttribute("stroke", "black"); + } + if (selectedNode && (event.ctrlKey || event.shiftKey)) { + deletePriorNodes(selectedNode, presentNode, viz, dataflowUrl, config, trialIdSimplified, dataflowWindowId); + } else { + selectedNode = svgElement.children[0].children[0].children[nodeIndex]; + selectedNode.children[1].setAttribute("stroke", "red"); + } + }); + } else if (presentNode.getAttribute("class") == "edge" && presentNode.children[1].tagName.toLowerCase() == "path") { + var _presentNodeSelection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(presentNode); + _presentNodeSelection.style("cursor", "pointer"); + _presentNodeSelection.on("click", function () { + if (selectedEdge) { + selectedEdge.children[1].setAttribute("stroke", "black"); + } + selectedEdge = svgElement.children[0].children[0].children[nodeIndex]; + selectedEdge.children[1].setAttribute("stroke", "red"); + }); + } + }; + for (var nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) { + _loop(nodeIndex); } - return ""; + }); + } else { + console.log("Dataflow error"); + } + }); +} +function checkboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow) { + var dataflowWindowD3Select = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(dataflowWindow); + var checkboxID = dataflowWindow.getAttribute("id") + "OpenNewWindowOption"; + dataflowWindowD3Select.append("input").attr("id", checkboxID).attr("type", "checkbox"); + dataflowWindowD3Select.append("label").attr("for", checkboxID).text("Don't open dataflow with excluded provenance in a new tab").style('font-family', 'sans-serif').style('font-size', '12px').style('pointer-events', 'none'); +} +function excludePriorProvenanceHint(dataflowWindow, text) { + (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(dataflowWindow).append("div").append("div").text(text).style('font-family', 'sans-serif').style('font-size', '12px').style('pointer-events', 'none'); +} +function chooseDataflowExcludedProvenanceWindowId(presentWindowId, newWindowId) { + if (document.getElementById(presentWindowId + "OpenNewWindowOption").checked) return presentWindowId; + return newWindowId; +} +function deletePriorNodes(selectedNode, presentNode, viz, dataflowUrl, config, trialIdSimplified, presentWindowId) { + dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf("/")); + dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf("/")) + "/true/"; + var selectedNodeEvaluationTitle = selectedNode.children[0].innerHTML; + var presentNodeOrderEvaluationTitle = presentNode.children[0].innerHTML; + var firstEvaluationOrder = Number(selectedNodeEvaluationTitle.replace("e_", "")); + var lastEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace("e_", "")); + if (firstEvaluationOrder > lastEvaluationOrder) { + lastEvaluationOrder = firstEvaluationOrder; + firstEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace("e_", "")); + } + var dataflowUrlLastEvaluation = dataflowUrl + lastEvaluationOrder; + var dataflowUrlFirstEvaluation = dataflowUrl + firstEvaluationOrder; + var excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(presentWindowId, "Dataflow excluding prior " + presentNodeOrderEvaluationTitle + " " + selectedNodeEvaluationTitle + " window " + trialIdSimplified, trialIdSimplified, config); + excludingProvenanceWindow.textContent = "Loading..."; + fetch(dataflowUrlLastEvaluation, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (responseLastEvaluation) { + responseLastEvaluation.json().then(function (jsonLastEvaluation) { + var dataflowLastEvaluation = jsonLastEvaluation.dataflow; + fetch(dataflowUrlFirstEvaluation, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (responseFirstEvaluation) { + responseFirstEvaluation.json().then(function (jsonFirstEvaluation) { + var dataflowFirstEvaluation = jsonFirstEvaluation.dataflow; + dataflowAMinusDataflowB(dataflowLastEvaluation, dataflowFirstEvaluation, firstEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationOrder); + }); + }); + }); + }); +} +function getDataflowWindowExcludeSomeProvenance(presentWindowId, newWindowId, trialIdSimplified, config) { + var excludingProvenanceWindowId = chooseDataflowExcludedProvenanceWindowId(presentWindowId, newWindowId); + var excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId); + if (!excludingProvenanceWindow) { + config.customWindowTabCommand(trialIdSimplified, excludingProvenanceWindowId, "Dataflow excluding some provenance"); + excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId); + } + return excludingProvenanceWindow; +} +function dataflowAMinusDataflowB(dataflowA, dataflowB, selectedEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationId) { + //SET MINUS OPERATION A-B "The set A−B consists of elements that are in A but not in B. For example if A={1,2,3} and B={3,5}, then A−B={1,2}." + var linesDataflowA = dataflowA.split("\n"); + var linesDataflowB = dataflowB.split("\n"); + var newDataflow = linesDataflowA.slice(0); + removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB, newDataflow, selectedEvaluationOrder); + var dataflowIsAligned = addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow, selectedEvaluationOrder, linesDataflowA); + removesDeletedEvaluationsFromAligment(dataflowIsAligned, newDataflow); + console.log("------"); + var newDataflowString = newDataflow.join("\n"); + console.log(newDataflowString); + console.log("------"); + excludingProvenanceWindow.textContent = ""; + dataflowButtons(excludingProvenanceWindow, excludingProvenanceWindow.getAttribute("id"), "(Ctrl or Shift)+click on a function call to exclude prior provenience", newDataflowString); + var svgElement = viz.renderSVGElement(newDataflowString); + excludingProvenanceWindow.appendChild(svgElement); + svgPanZoom(svgElement, { + preventMouseEventsDefault: false, + dblClickZoomEnabled: false + }); + addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId); +} +function addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId) { + var selectedEdge; + var _loop2 = function _loop2(nodeIndex) { + var selectedNode = svgElement.children[0].children[0].children[nodeIndex]; + if (selectedNode.getAttribute("class") == "node" && selectedNode.children[1].tagName.toLowerCase() == "polygon") { + var selectedNodeSelection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(selectedNode); + selectedNodeSelection.style("cursor", "pointer"); + selectedNodeSelection.on("click", function (event) { + if (event.ctrlKey || event.shiftKey) deletePriorNodesAfterDeletingPriorNodes(selectedNode, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId); + }); + } else if (selectedNode.getAttribute("class") == "edge" && selectedNode.children[1].tagName.toLowerCase() == "path") { + var _selectedNodeSelection = (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(selectedNode); + _selectedNodeSelection.style("cursor", "pointer"); + _selectedNodeSelection.on("click", function () { + if (selectedEdge) { + selectedEdge.children[1].setAttribute("stroke", "black"); + } + selectedEdge = svgElement.children[0].children[0].children[nodeIndex]; + selectedEdge.children[1].setAttribute("stroke", "red"); + }); + } + }; + for (var nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) { + _loop2(nodeIndex); + } +} +function deletePriorNodesAfterDeletingPriorNodes(selectedNode, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId) { + var _excludingProvenanceW; + var selectedNodeOrderEvaluationTitle = selectedNode.children[0].innerHTML; + var selectedEvaluationOrder = Number(selectedNodeOrderEvaluationTitle.replace("e_", "")); + if (lastEvaluationId == selectedEvaluationOrder) { + window.alert("You can't remove everything."); + return undefined; + } + dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf("/")); + dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf("/")) + "/true/"; + var dataflowUrlPresentEvaluation = dataflowUrl + selectedEvaluationOrder; + var excludingProvenanceWindowId = (_excludingProvenanceW = excludingProvenanceWindow) === null || _excludingProvenanceW === void 0 ? void 0 : _excludingProvenanceW.getAttribute("id"); + excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(excludingProvenanceWindowId, excludingProvenanceWindowId + "OneMore", "", config); //TODO get simplifiedtrialid from wxcludingprovenancewindow + + excludingProvenanceWindow.textContent = "Loading..."; + fetch(dataflowUrlPresentEvaluation, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' } - var needleArray = Array.from(needle); - var firstChar = needleArray[0]; - var lastChar = needleArray[needleArray.length - 1]; - return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false); + }).then(function (responseLastEvaluation) { + responseLastEvaluation.json().then(function (json) { + var selectedEvaluationDataflow = json.dataflow; + dataflowAMinusDataflowB(newDataflowString, selectedEvaluationDataflow, selectedEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationId); + }); + }); } -function multiLineBackwardMatch(line, re, endMargin) { - var match = null; - var from = 0; - while (from <= line.length) { - re.lastIndex = from; - var newMatch = re.exec(line); - if (!newMatch) - break; - var end = newMatch.index + newMatch[0].length; - if (end > line.length - endMargin) - break; - if (!match || end > match.index + match[0].length) - match = newMatch; - from = newMatch.index + 1; +function removesDeletedEvaluationsFromAligment(dataflowIsAligned, newDataflow) { + if (dataflowIsAligned) { + var evaluations = []; + for (var lineIndex = 3; lineIndex < newDataflow.length; lineIndex++) { + var line = newDataflow[lineIndex]; + if (line.includes("label")) evaluations.push(line.replace(/\[[^\]]*?\];/, "").split(" ")[4].trim());else if (line.includes("{rank=")) { + var alignedEvaluations = line.split(" "); + for (var alignedEvalIndex = 5; alignedEvalIndex < alignedEvaluations.length; alignedEvalIndex++) { + var alignedEval = alignedEvaluations[alignedEvalIndex].replace("}\r", "").trim(); + if (!evaluations.includes(alignedEval)) newDataflow[lineIndex] = newDataflow[lineIndex].replace(alignedEval, ""); + } + } else if (line.includes("->")) break; } - return match; + } } -function chunkEnd(session, start) { - var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row; - return targetLine + 1; +function removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB, newDataflow, selectedEvaluationOrder) { + var _loop3 = function _loop3() { + var indexOfDataflowLineToRemove; + if (linesDataflowB[i].includes("->") && linesDataflowB[i].includes("[")) { + var lineToRemove = linesDataflowB[i].replace(/\[[^\]]*\]/, ""); + indexOfDataflowLineToRemove = newDataflow.findIndex(function (dataflowLine) { + return dataflowLine.replace(/\[[^\]]*\]/, "") == lineToRemove; + }); + } else indexOfDataflowLineToRemove = newDataflow.indexOf(linesDataflowB[i]); + if (indexOfDataflowLineToRemove > -1 && !linesDataflowB[i].includes("_" + selectedEvaluationOrder + " [")) newDataflow.splice(indexOfDataflowLineToRemove, 1); + }; + for (var i = 3; i < linesDataflowB.length - 2; i++) { + _loop3(); + } } -exports.Search = Search; +function addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow, selectedEvaluationOrder, linesDataflowA) { + var tempArray = []; + var isAligned = false; + newDataflow.forEach(function (line) { + if (!isAligned && line.includes("{rank")) isAligned = true; + if (line.includes("->")) { + var evaluationWithoutSettings = line.split(" ")[6]; + if (Number(evaluationWithoutSettings.replace("e_", "").replace("a_", "")) < selectedEvaluationOrder) { + // TODO revise if firstEvaluationOrder is right + var lineToAdd = linesDataflowA.find(function (string) { + return string.includes(evaluationWithoutSettings + " ["); + }); + if (newDataflow.indexOf(lineToAdd) < 0) tempArray.push(lineToAdd); + } + } + }); + tempArray.forEach(function (item) { + return newDataflow.splice(3, 0, item); + }); + return isAligned; +} +function buildDataflowModal(modal, modalBody, parent, config, trialId) { + var submitButton; + var evaluationList; + var form; + document.getElementById("exampleModalTitle").textContent = "Dataflow"; + fetch("/dataflow/evaluations/" + trialId, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(function (json) { + evaluationList = json.evaluations; + var selectedEvaluation; + var dataflowTextInputEvaluation; + showModal(modal); + if (modalBody) { + scrollableModal(modalBody); + form = modalBody.append("form").attr("onsubmit", "return false;"); + createFormCheckInput(form, "dataFlowShowType", "Show type nodes"); + createFormCheckInput(form, "dataFlowHideTimestamps", "Hide timestamps"); + createFormCheckInput(form, "dataFlowHideInternals", "Show variables and functions which name starts with a leading underscore"); + createFormCheckInput(form, "dataFlowHideNotCode", "Hide evaluations that aren't from the code"); + createFormCheckInput(form, "dataFlowActivationNames", "Display nodes with their activation names instead"); + createFormCheckInput(form, "dataFlowHideFunc", "Hide func type evaluations"); + createFormSelectInput(form, "dataflowShowAccesses", "Show file accesses", 0, 4, 1, "dataflowShowAccessesHelp", "(default: Shows each file once (hide external accesses))", ["Hides file accesses", "Shows each file once (hide external accesses)", "Shows each file once (show external accesses)", "Shows all accesses (except external accesses)", "Shows all accesses (including external accesses)"]); + createFormSelectInput(form, "dataflowEvaluation", "Combine evaluation nodes", 0, 2, 1, "dataflowEvaluationHelp", "(default: Combines evaluation nodes by assignment)", ["Not combine evaluation nodes", "Combines evaluation nodes by assignment", "Combines evaluation nodes by value"]); + createFormSelectInput(form, "dataflowGroup", "Align evalutions in the same column", 0, 2, 0, "dataflowGroupHelp", "(default: Does no align). With this option, all variables in a loop appear grouped, reducing the width of the graph. It may affect the graph legibility. The alignment is independent for each activation.", ["Does no align", "Aligns by line", "Aligns by line and column"]); + createFormSelectInput(form, "dataflowMode", "Graph mode", 0, 4, 1, "dataflowModeHelp", "(default: coarseGrain). 'activation' presents only function activations and file accesses. Dependencies on the dataflow are clustered by depth(-d). 'coarseGrain' is the same as the activation dataflow, but with the addition of parameters and variable assignment of function activations. 'looplessCoarseGrain' is the same as the coarseGrain dataflow, but it doesn't repeat function activations when they're in the same line in a loop. 'fineGrain' is the same as the coarseGrain dataflow with the addition of variables, all user defined evaluations and data values. 'all' presents a dataflow with all evaluations and function activations. Dependencies on the dataflow are not clustered.", ["activation", "coarseGrain", "looplessCoarseGrain", "fineGrain", "all"]); + createFormNumberInput(form, "dataflowDepth", "Visualization depth", 0, 0, "dataflowDepthHelp", "(default: 0) 0 represents infinity. This parameter is ignored when the mode is \"all\""); + createFormNumberInput(form, "dataflowValueLength", "Maximum length of values", 0, 0, "dataflowValueLengthHelp", "(default: 0). 0 indicates that values should be hidden.The values appear on the second line of node lables. E.g. if it is set to '10', it will show 'data.dat', but it will transform 'data2.dat' in to 'da...dat' to respect the length restriction (note that '' is part of the value). Minimum displayable value: 5. Suggested: 55."); + createFormNumberInput(form, "dataflowName", "Maximum length of names", 0, 55, "dataflowNameHelp", "(default: 55). 0 indicates that values should be hidden. Minimum displayable value: 5. Suggested: 55."); + var dataflowEvaluationInput = createFormTextInput(form, "dataflowTextInputEvaluation", "Evaluation was derived from: ", "dataflowSelectEvaluationHelp", "Filter that shows only one evaluation and the ones that derived it"); + form.append("div").attr("id", "autocompleteSuggestionsResults"); + dataflowTextInputEvaluation = document.getElementById("dataflowTextInputEvaluation"); + addsAutocompleteToDataflowWDF(dataflowEvaluationInput, dataflowTextInputEvaluation, evaluationList); + submitButton = form.append("button").classed("btn btn-primary mb-2", true).text("Generate dataflow"); + } + submitButton.on("click", function () { + var dataFlowShowType = document.getElementById("dataFlowShowType").checked; + var dataFlowHideTimestamps = document.getElementById("dataflowMode").checked; + var dataFlowHideInternals = document.getElementById("dataFlowHideInternals").checked; + var dataFlowHideNotCode = document.getElementById("dataFlowHideNotCode").checked; + var dataFlowActivationNames = document.getElementById("dataFlowActivationNames").checked; + var dataFlowHideFunc = document.getElementById("dataFlowHideFunc").checked; + var dataflowFileAccesses = document.getElementById("dataflowShowAccesses").selectedOptions[0].index; + var dataflowEvaluation = document.getElementById("dataflowEvaluation").selectedOptions[0].index; + var dataflowGroup = document.getElementById("dataflowGroup").selectedOptions[0].index; + var dataflowMode = document.getElementById("dataflowMode").selectedOptions[0].value; + var dataflowDepth = document.getElementById("dataflowDepth").value; + var dataflowValueLength = document.getElementById("dataflowValueLength").value; + var dataflowName = document.getElementById("dataflowName").value; + var trialId = parent.getAttribute("selected-trial"); + selectedEvaluation = dataflowTextInputEvaluation.getAttribute("selectedEvaluationID"); + var dataflowUrl = "/commands/dataflow/" + trialId + "/" + dataFlowShowType + "/" + dataFlowHideTimestamps + "/" + dataFlowHideInternals + "/" + dataFlowHideNotCode + "/" + dataFlowActivationNames + "/" + dataFlowHideFunc + "/" + dataflowFileAccesses + "/" + dataflowEvaluation + "/" + dataflowGroup + "/" + dataflowDepth + "/" + dataflowValueLength + "/" + dataflowName + "/" + dataflowMode; + dataflowUrl += selectedEvaluation && !selectedEvaluation.includes("undefined") ? "/true/" + selectedEvaluation : "/false/0"; + var dataflowWindowId = "Dataflow window " + trialId; -}); + /* if (document.getElementById(dataflowWindowId)) { + window.alert("Close trial " + trialId + " dataflow tab before generating a new dataflow"); + return; + } */ -ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); var keyUtil = require("../lib/keys"); -var useragent = require("../lib/useragent"); -var KEY_MODS = keyUtil.KEY_MODS; -var MultiHashHandler = /** @class */ (function () { - function MultiHashHandler(config, platform) { - this.$init(config, platform, false); + if (document.getElementById(dataflowWindowId)) dataflowWindowId += crypto.randomUUID(); + fetch(dataflowUrl, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + console.log(dataflowMode); + cleanModalBodyAndClose(modal, modalBody); + getDataflow(response, config, parent, dataflowWindowId, dataflowUrl); + }); + }); + }); + }); +} +function addsAutocompleteToDataflowWDF(dataflowEvaluationInput, dataflowTextInputEvaluation, evaluationList) { + dataflowEvaluationInput.on("keyup", function () { + var input = dataflowTextInputEvaluation.value; + var autocompleteSuggestionsResults = document.getElementById("autocompleteSuggestionsResults"); + var evaluationInputHint = document.getElementById("dataflowSelectEvaluationHelp"); + autocompleteSuggestionsResults.innerHTML = ""; + var suggestions; + if (input == "") { + autocompleteSuggestionsResults.setAttribute("style", ""); + evaluationInputHint.style.opacity = "1"; + suggestions = []; + dataflowTextInputEvaluation.setAttribute("selectedEvaluationID", "undefined"); + } else { + autocompleteSuggestionsResults.style.border = "1px solid #ccc"; + autocompleteSuggestionsResults.style.padding = "3px"; + autocompleteSuggestionsResults.style.marginTop = "-3rem"; + evaluationInputHint.style.opacity = "0"; + suggestions = evaluationList.filter(function (evaluation) { + if (evaluation.name.includes(input)) return evaluation; + }); + autocompleteSuggestionsResults.innerHTML = "
      "; + var _loop4 = function _loop4(i) { + var evaluationSuggestionId = suggestions[i].evaluation_id + " " + "evaluationSuggestionItem"; + (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById("dataflowEvaluationSuggestionsBoxId")).append("li").attr("id", evaluationSuggestionId).style("padding", "5px 0").style("z-index", 1).text("Evaluation: " + suggestions[i].name + " " + "Code_line: " + suggestions[i].first_char_line).on("click", function () { + dataflowTextInputEvaluation.value = suggestions[i].name; + input = suggestions[i].name; + dataflowTextInputEvaluation.setAttribute("selectedEvaluationID", suggestions[i].evaluation_id); + }).on("mouseover", function () { + (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(evaluationSuggestionId)).style("background-color", "#eee"); + }).on("mouseout", function () { + (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(evaluationSuggestionId)).style("background-color", ""); + }); + }; + for (var i = 0; i < suggestions.length; i++) { + _loop4(i); + } } - MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) { - this.platform = platform || (useragent.isMac ? "mac" : "win"); - this.commands = {}; - this.commandKeyBinding = {}; - this.addCommands(config); - this.$singleCommand = $singleCommand; - }; - MultiHashHandler.prototype.addCommand = function (command) { - if (this.commands[command.name]) - this.removeCommand(command); - this.commands[command.name] = command; - if (command.bindKey) - this._buildKeyHash(command); - }; - MultiHashHandler.prototype.removeCommand = function (command, keepCommand) { - var name = command && (typeof command === 'string' ? command : command.name); - command = this.commands[name]; - if (!keepCommand) - delete this.commands[name]; - var ckb = this.commandKeyBinding; - for (var keyId in ckb) { - var cmdGroup = ckb[keyId]; - if (cmdGroup == command) { - delete ckb[keyId]; - } - else if (Array.isArray(cmdGroup)) { - var i = cmdGroup.indexOf(command); - if (i != -1) { - cmdGroup.splice(i, 1); - if (cmdGroup.length == 1) - ckb[keyId] = cmdGroup[0]; - } - } - } - }; - MultiHashHandler.prototype.bindKey = function (key, command, position) { - if (typeof key == "object" && key) { - if (position == undefined) - position = key.position; - key = key[this.platform]; - } - if (!key) - return; - if (typeof command == "function") - return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split("|").forEach(function (keyPart) { - var chain = ""; - if (keyPart.indexOf(" ") != -1) { - var parts = keyPart.split(/\s+/); - keyPart = parts.pop(); - parts.forEach(function (keyPart) { - var binding = this.parseKeys(keyPart); - var id = KEY_MODS[binding.hashId] + binding.key; - chain += (chain ? " " : "") + id; - this._addCommandToBinding(chain, "chainKeys"); - }, this); - chain += " "; - } - var binding = this.parseKeys(keyPart); - var id = KEY_MODS[binding.hashId] + binding.key; - this._addCommandToBinding(chain + id, command, position); - }, this); - }; - MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) { - var ckb = this.commandKeyBinding, i; - if (!command) { - delete ckb[keyId]; - } - else if (!ckb[keyId] || this.$singleCommand) { - ckb[keyId] = command; - } - else { - if (!Array.isArray(ckb[keyId])) { - ckb[keyId] = [ckb[keyId]]; - } - else if ((i = ckb[keyId].indexOf(command)) != -1) { - ckb[keyId].splice(i, 1); - } - if (typeof position != "number") { - position = getPosition(command); - } - var commands = ckb[keyId]; - for (i = 0; i < commands.length; i++) { - var other = commands[i]; - var otherPos = getPosition(other); - if (otherPos > position) - break; - } - commands.splice(i, 0, command); - } - }; - MultiHashHandler.prototype.addCommands = function (commands) { - commands && Object.keys(commands).forEach(function (name) { - var command = commands[name]; - if (!command) - return; - if (typeof command === "string") - return this.bindKey(command, name); - if (typeof command === "function") - command = { exec: command }; - if (typeof command !== "object") - return; - if (!command.name) - command.name = name; - this.addCommand(command); - }, this); - }; - MultiHashHandler.prototype.removeCommands = function (commands) { - Object.keys(commands).forEach(function (name) { - this.removeCommand(commands[name]); - }, this); - }; - MultiHashHandler.prototype.bindKeys = function (keyList) { - Object.keys(keyList).forEach(function (key) { - this.bindKey(key, keyList[key]); - }, this); - }; - MultiHashHandler.prototype._buildKeyHash = function (command) { - this.bindKey(command.bindKey, command); - }; - MultiHashHandler.prototype.parseKeys = function (keys) { - var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function (x) { return x; }); - var key = parts.pop(); - var keyCode = keyUtil[key]; - if (keyUtil.FUNCTION_KEYS[keyCode]) - key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); - else if (!parts.length) - return { key: key, hashId: -1 }; - else if (parts.length == 1 && parts[0] == "shift") - return { key: key.toUpperCase(), hashId: -1 }; - var hashId = 0; - for (var i = parts.length; i--;) { - var modifier = keyUtil.KEY_MODS[parts[i]]; - if (modifier == null) { - if (typeof console != "undefined") - console.error("invalid modifier " + parts[i] + " in " + keys); - return false; - } - hashId |= modifier; - } - return { key: key, hashId: hashId }; - }; - MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) { - var key = KEY_MODS[hashId] + keyString; - return this.commandKeyBinding[key]; - }; - MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) { - if (keyCode < 0) - return; - var key = KEY_MODS[hashId] + keyString; - var command = this.commandKeyBinding[key]; - if (data.$keyChain) { - data.$keyChain += " " + key; - command = this.commandKeyBinding[data.$keyChain] || command; - } - if (command) { - if (command == "chainKeys" || command[command.length - 1] == "chainKeys") { - data.$keyChain = data.$keyChain || key; - return { command: "null" }; - } - } - if (data.$keyChain) { - if ((!hashId || hashId == 4) && keyString.length == 1) - data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input - else if (hashId == -1 || keyCode > 0) - data.$keyChain = ""; // reset keyChain - } - return { command: command }; - }; - MultiHashHandler.prototype.getStatusText = function (editor, data) { - return data.$keyChain || ""; - }; - return MultiHashHandler; -}()); -function getPosition(command) { - return typeof command == "object" && command.bindKey - && command.bindKey.position - || (command.isDefault ? -100 : 0); + }); +} +function downloadDataflowAsSVG(dataflowWindow, dataflowWindowId, dataflowDOT, appendDiv) { + var div = appendDiv ? (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(dataflowWindow).append("div").attr("id", dataflowWindowId + "-downloadDiv") : (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(dataflowWindowId + "-downloadDiv")); + div.append("a").classed("toollink", true).attr("id", dataflowWindowId + "-downloadSVG").attr("href", "#").style("color", "black").style("margin-right", "10px").attr("title", "Download dataflow SVG").on("click", function () { + (0,_viz_js_viz__WEBPACK_IMPORTED_MODULE_9__.instance)().then(function (viz) { + var svgElement = viz.renderSVGElement(dataflowDOT); + file_saver__WEBPACK_IMPORTED_MODULE_8__.saveAs(new Blob([svgElement.outerHTML], { + type: "image/svg+xml" + }), "dataflow.svg"); + }); + //fs.saveAs(new Blob([dataflowWindow!.getElementsByTagName("svg")[0].outerHTML], { type: "image/svg+xml" }), "dataflow.svg"); + }).append("i").classed("fa fa-download", true); +} +function downloadDataflowAsDOT(dataflowWindow, dataflowWindowId, dataflowDOT, appendDiv) { + var div = appendDiv ? (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(dataflowWindow).append("div").attr("id", dataflowWindowId + "-downloadDiv") : (0,d3_selection__WEBPACK_IMPORTED_MODULE_10__["default"])(document.getElementById(dataflowWindowId + "-downloadDiv")); + div.append("a").classed("toollink", true).attr("id", dataflowWindowId + "-downloadDOT").attr("href", "#").style("color", "black").attr("title", "Download dataflow DOT").on("click", function () { + file_saver__WEBPACK_IMPORTED_MODULE_8__.saveAs(new Blob([dataflowDOT.trim()], { + type: "text/plain;charset=utf-8" + }), "dataflow.dot"); + }).append("i").classed("fa fa-file-text", true); +} +function dataflowButtons(dataflowWindow, dataflowWindowId, excludeProvenanceHint, dataflowDOT) { + downloadDataflowAsSVG(dataflowWindow, dataflowWindowId, dataflowDOT, true); + downloadDataflowAsDOT(dataflowWindow, dataflowWindowId, dataflowDOT, false); + excludePriorProvenanceHint(dataflowWindow, excludeProvenanceHint); + checkboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow); +} +function getRestoreOrCollabCommand(serverUrl, form, modalBody) { + fetch(serverUrl, { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }).then(function (response) { + response.json().then(function (json) { + form.remove(); + if (response.status == 200 && (!json.terminal_text.includes("not") || serverUrl.includes("edit"))) { + addAlert(modalBody, "alert-success", "Success!", json.terminal_text); + } else { + addAlert(modalBody, "alert-danger", "Error!", json.terminal_text); + } + }); + }); +} +function changeTitle(parent, commandTitle) { + var trialIdTitle = parent.getAttribute("selected-trial-simplified"); + document.getElementById("exampleModalTitle").textContent = commandTitle + trialIdTitle; +} +function cleanModalBodyAndClose(modal, modalBody) { + document.getElementsByClassName("modal-body")[0].textContent = ""; + modalBody.style("height", null); + hideModal(modal); +} +function addAlert(div, alertType, title, text) { + var feedbackAlert = div.append("div").classed("alert " + alertType, true).attr("role", "alert"); + feedbackAlert.append("h4").text(title).append("button").classed("close", true).attr("type", "button").text("x").on("click", function () { + feedbackAlert.remove(); + }); + feedbackAlert.append("p").text(text); +} +function createFormCheckInput(form, checkInputId, text) { + var checkDiv = form.append("div").classed("form-check", true); + checkDiv.append("input").classed("form-check-input", true).attr("value", "").attr("id", checkInputId).attr("type", "checkbox"); + checkDiv.append("label").classed("form-check-label", true).attr("for", checkInputId).text(text); +} +function createFormTextInput(form, textInputId, text, helpId, helpText) { + var textDiv = form.append("div").classed("form-group", true); + textDiv.append("label").attr("for", textInputId).text(text); + var textInput = textDiv.append("textarea").classed("form-control", true).attr("id", textInputId); + if (helpId && helpText) { + textInput.attr("aria-describedby", helpId); + textDiv.append("small").classed("form-text text-muted", true).attr("id", helpId).text(helpText); + } + return textDiv; +} +function createFormSelectInput(form, selectId, selectText, minOptionNumber, maxOptionNumber, defaultOption, helpId, helpText, optionsLabels) { + var selectDiv = form.append("div").classed("form-group", true); + var selectInput = selectDiv.append("label").attr("for", selectId).text(selectText).append("select").classed("form-control", true).attr("id", selectId); + if (helpId && helpText) { + selectInput.attr("aria-describedby", helpId); + selectDiv.append("small").classed("form-text text-muted", true).attr("id", helpId).text(helpText); + } + for (var optionNumber = minOptionNumber; optionNumber <= maxOptionNumber; optionNumber++) { + var inputLabel = optionsLabels ? optionsLabels[optionNumber] : optionNumber; + var input = selectInput.append("option").text(inputLabel); + if (defaultOption && optionNumber == defaultOption) input.attr("selected", "selected"); + } +} +function createFormNumberInput(form, id, text, minValue, defaultValue, helpId, helpText) { + var numberDiv = form.append("div").classed("form-group", true); + numberDiv.append("label").classed("form-check-label", true).attr("for", id).text(text); + numberDiv.append("input").attr("type", "number").attr("id", id).attr("min", minValue).attr("value", defaultValue).attr("oninput", "validity.valid||(value='');").attr("aria-describedby", "dataflowDepthHelp"); + if (helpId && helpText) { + numberDiv.attr("aria-describedby", helpId); + numberDiv.append("small").classed("form-text text-muted", true).attr("id", helpId).text(helpText); + } +} +function getTextInputFormByID(id, replace) { + var formTextInput = document.getElementById(id).value; + if (replace) formTextInput.replace("/", "%2F").replace("\\", "%5C"); + if (!formTextInput) formTextInput = false; + return formTextInput; +} +function hideModal(modal) { + if (modal) modal.style("display", "none").style("padding-right", "").classed("show", false).attr("aria-hidden", "true"); +} +function showModal(modal) { + if (modal) modal.style("display", "block").style("padding-right", "17px").classed("show", true).attr("aria-hidden", "false"); } -var HashHandler = /** @class */ (function (_super) { - __extends(HashHandler, _super); - function HashHandler(config, platform) { - var _this = _super.call(this, config, platform) || this; - _this.$singleCommand = true; - return _this; - } - return HashHandler; -}(MultiHashHandler)); -HashHandler.call = function (thisArg, config, platform) { - MultiHashHandler.prototype.$init.call(thisArg, config, platform, true); -}; -MultiHashHandler.call = function (thisArg, config, platform) { - MultiHashHandler.prototype.$init.call(thisArg, config, platform, false); -}; -exports.HashHandler = HashHandler; -exports.MultiHashHandler = MultiHashHandler; -}); +/***/ }), -ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var oop = require("../lib/oop"); -var MultiHashHandler = require("../keyboard/hash_handler").MultiHashHandler; -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var CommandManager = /** @class */ (function (_super) { - __extends(CommandManager, _super); - function CommandManager(platform, commands) { - var _this = _super.call(this, commands, platform) || this; - _this.byName = _this.commands; - _this.setDefaultHandler("exec", function (e) { - if (!e.args) { - return e.command.exec(e.editor, {}, e.event, true); - } - return e.command.exec(e.editor, e.args, e.event, false); - }); - return _this; +/***/ "./src/graph/trial_graph.ts": +/*!**********************************!*\ + !*** ./src/graph/trial_graph.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TrialGraphWidget: () => (/* binding */ TrialGraphWidget) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _base_activation_graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base_activation_graph */ "./src/graph/base_activation_graph.ts"); +/* harmony import */ var _noworkflow_trial__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @noworkflow/trial */ "../trial/lib/index.js"); +/* harmony import */ var _noworkflow_trial__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_trial__WEBPACK_IMPORTED_MODULE_2__); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _superPropGet(t, e, o, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; } +function _get() { return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); } +function _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + + +var TrialGraphWidget = /*#__PURE__*/function (_BaseActivationGraphW) { + function TrialGraphWidget(name, cls, t1, t2) { + var _this; + _classCallCheck(this, TrialGraphWidget); + _this = _callSuper(this, TrialGraphWidget, [{ + node: _base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget.createNode(cls) + }]); + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_3__["default"])(_this.node); + _this.d3node.select('.reload-button').on("click", function () { + _this.load(_this.d3node.select(".graph-type").property("value"), _this.d3node.select(".use-cache").property("checked")); + }); + _this.addClass('content'); + _this.addClass('trial-widget'); + _this.title.label = name; + _this.title.closable = true; + _this.title.caption = "".concat(name, " Graph"); + _this.name = name; + _this.cls = cls; + _this.t1 = t1; + _this.t2 = t2; + return _this; + } + _inherits(TrialGraphWidget, _BaseActivationGraphW); + return _createClass(TrialGraphWidget, [{ + key: "setGraph", + value: function setGraph(data) { + var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var sub = this.node.getElementsByClassName("sub-content")[0]; + sub.innerHTML = ""; + this.graph = new _noworkflow_trial__WEBPACK_IMPORTED_MODULE_2__.TrialGraph(this.cls, sub, config); + this.graph.load(data, this.t1, this.t2); } - CommandManager.prototype.exec = function (command, editor, args) { - if (Array.isArray(command)) { - for (var i = command.length; i--;) { - if (this.exec(command[i], editor, args)) - return true; - } - return false; - } - if (typeof command === "string") - command = this.commands[command]; - var e = { editor: editor, command: command, args: args }; - if (!this.canExecute(command, editor)) { - this._signal("commandUnavailable", e); - return false; - } - e.returnValue = this._emit("exec", e); - this._signal("afterExec", e); - return e.returnValue === false ? false : true; - }; - CommandManager.prototype.canExecute = function (command, editor) { - if (typeof command === "string") - command = this.commands[command]; - if (!command) - return false; - if (editor && editor.$readOnly && !command.readOnly) - return false; - if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor)) - return false; - return true; - }; - CommandManager.prototype.toggleRecording = function (editor) { - if (this.$inReplay) - return; - editor && editor._emit("changeStatus"); - if (this.recording) { - this.macro.pop(); - this.off("exec", this.$addCommandToMacro); - if (!this.macro.length) - this.macro = this.oldMacro; - return this.recording = false; - } - if (!this.$addCommandToMacro) { - this.$addCommandToMacro = function (e) { - this.macro.push([e.command, e.args]); - }.bind(this); - } - this.oldMacro = this.macro; - this.macro = []; - this.on("exec", this.$addCommandToMacro); - return this.recording = true; - }; - CommandManager.prototype.replay = function (editor) { - if (this.$inReplay || !this.macro) - return; - if (this.recording) - return this.toggleRecording(editor); - try { - this.$inReplay = true; - this.macro.forEach(function (x) { - if (typeof x == "string") - this.exec(x, editor); - else - this.exec(x[0], editor, x[1]); - }, this); - } - finally { - this.$inReplay = false; - } - }; - CommandManager.prototype.trimMacro = function (m) { - return m.map(function (x) { - if (typeof x[0] != "string") - x[0] = x[0].name; - if (!x[1]) - x = x[0]; - return x; - }); - }; - return CommandManager; -}(MultiHashHandler)); -oop.implement(CommandManager.prototype, EventEmitter); -exports.CommandManager = CommandManager; + }, { + key: "graphDefinition", + value: function graphDefinition() { + var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; + var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var genDataflow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var data = arguments.length > 3 ? arguments[3] : undefined; + var result = _superPropGet(TrialGraphWidget, "graphDefinition", this, 3)([selectedGraph, useCache, genDataflow, data]); + return Object.assign({}, result, { + queryTooltip: selectedGraph != "definition_tree" + }); + } + }, { + key: "load", + value: function load() { + var _this2 = this; + var selectedGraph = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "namespace_match"; + var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var sub = this.node.getElementsByClassName("sub-content")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_0__.json)("Trial", sub, TrialGraphWidget.url(this.t1, selectedGraph, useCache), function (data) { + _this2.configureGraph(selectedGraph, useCache, true, data); + }); + } + }, { + key: "onResize", + value: function onResize(msg) { + if (this.graph) { + this.graph.config.width = this.node.getBoundingClientRect().width - 24; + this.graph.config.height = this.node.getBoundingClientRect().height - 24; + this.graph.updateWindow(); + } + } + }], [{ + key: "url", + value: function url(trialId, selectedGraph, useCache) { + var cache = useCache ? "1" : "0"; + return "trials/" + trialId + "/" + selectedGraph + "/" + cache + ".json"; + } + }]); +}(_base_activation_graph__WEBPACK_IMPORTED_MODULE_1__.BaseActivationGraphWidget); -}); +/***/ }), -ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(require, exports, module){"use strict"; -var lang = require("../lib/lang"); -var config = require("../config"); -var Range = require("../range").Range; -function bindKey(win, mac) { - return { win: win, mac: mac }; -} -exports.commands = [{ - name: "showSettingsMenu", - description: "Show settings menu", - bindKey: bindKey("Ctrl-,", "Command-,"), - exec: function (editor) { - config.loadModule("ace/ext/settings_menu", function (module) { - module.init(editor); - editor.showSettingsMenu(); - }); - }, - readOnly: true - }, { - name: "goToNextError", - description: "Go to next error", - bindKey: bindKey("Alt-E", "F4"), - exec: function (editor) { - config.loadModule("ace/ext/error_marker", function (module) { - module.showErrorMarker(editor, 1); - }); - }, - scrollIntoView: "animate", - readOnly: true - }, { - name: "goToPreviousError", - description: "Go to previous error", - bindKey: bindKey("Alt-Shift-E", "Shift-F4"), - exec: function (editor) { - config.loadModule("ace/ext/error_marker", function (module) { - module.showErrorMarker(editor, -1); +/***/ "./src/group_widget.ts": +/*!*****************************!*\ + !*** ./src/group_widget.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ GroupWidget: () => (/* binding */ GroupWidget) +/* harmony export */ }); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var _style_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../style/bootstrap.min.css */ "./style/bootstrap.min.css"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + +var GroupWidget = /*#__PURE__*/function (_Widget) { + function GroupWidget() { + var _this; + _classCallCheck(this, GroupWidget); + _this = _callSuper(this, GroupWidget, [{ + node: GroupWidget.createNode() + }]); + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); + _this.addClass('content'); + _this.title.label = "Group Information"; + _this.title.closable = false; + _this.title.caption = "Group"; + _this.setNode(); + return _this; + } + _inherits(GroupWidget, _Widget); + return _createClass(GroupWidget, [{ + key: "onBeforeShow", + value: function onBeforeShow(msg) { + if (!this.groups) { + this.setGroups(); + this.setUsers(); + } + } + }, { + key: "setUsers", + value: function () { + var _setUsers = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { + var _thiss, response, obj; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + _thiss = this; + _thiss.userIn.html(""); + _context.next = 4; + return fetch("users", { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }); + case 4: + response = _context.sent; + if (!(response.status == 200)) { + _context.next = 13; + break; + } + _thiss.users = new Array(); + _context.next = 9; + return response.json(); + case 9: + obj = _context.sent; + obj.forEach(function (item) { + _thiss.users.push({ + id: item.id, + login: item.userLogin + }); + }); + _context.next = 14; + break; + case 13: + this.showNode(_thiss.errorFeedback); + case 14: + _thiss.users.forEach(function (obj) { + _thiss.userIn.append("option").attr("value", obj.id).text(obj.login); + }); + case 15: + case "end": + return _context.stop(); + } + }, _callee, this); + })); + function setUsers() { + return _setUsers.apply(this, arguments); + } + return setUsers; + }() + }, { + key: "resfreshGroups", + value: function resfreshGroups() { + this.tBody.html(""); + this.setGroups(); + } + }, { + key: "setGroups", + value: function () { + var _setGroups = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { + var _thiss, response, obj; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + _thiss = this; + _context2.next = 3; + return fetch("groups", { + method: 'GET', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }); + case 3: + response = _context2.sent; + if (!(response.status == 200)) { + _context2.next = 12; + break; + } + _thiss.groups = new Array(); + _context2.next = 8; + return response.json(); + case 8: + obj = _context2.sent; + obj.forEach(function (item) { + var group = { + id: item.id, + name: item.name, + members: new Array() + }; + item.members.forEach(function (user) { + group.members.push({ + id: user.id, + login: user.userLogin + }); + }); + _thiss.groups.push(group); + }); + _context2.next = 13; + break; + case 12: + this.showNode(_thiss.errorFeedback); + case 13: + this.groups.forEach(function (obj) { + _thiss.addGrpRow(obj); + }); + case 14: + case "end": + return _context2.stop(); + } + }, _callee2, this); + })); + function setGroups() { + return _setGroups.apply(this, arguments); + } + return setGroups; + }() + }, { + key: "deleteGrp", + value: function () { + var _deleteGrp = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(grpId) { + var response; + return _regeneratorRuntime().wrap(function _callee3$(_context3) { + while (1) switch (_context3.prev = _context3.next) { + case 0: + _context3.next = 2; + return fetch("/groups/" + grpId, { + method: 'DELETE', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + } + }); + case 2: + response = _context3.sent; + if (response.status == 200) { + this.showNode(this.successFeedback); + this.resfreshGroups(); + } else { + this.showNode(this.errorFeedback); + } + case 4: + case "end": + return _context3.stop(); + } + }, _callee3, this); + })); + function deleteGrp(_x) { + return _deleteGrp.apply(this, arguments); + } + return deleteGrp; + }() + }, { + key: "addGrpRow", + value: function addGrpRow(grp) { + var _thiss = this; + var item = this.tBody.append("tr"); + item.append("th").attr("scope", "row").text(grp.id); + item.append("td").text(grp.name); + var membersText = ""; + grp.members.forEach(function (user) { + membersText += user.login + " "; + }); + item.append("td").text(membersText); + var actions = item.append("td"); + var addMemberButton = actions.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Add User"); + addMemberButton.on("click", function () { + _thiss.showNode(_thiss.addMemberForm); + _thiss.currentGroup = grp.id; + }); + var deleteGroupButton = actions.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Delete Group"); + deleteGroupButton.on("click", function () { + if (confirm("Are you sure you want to delete group: " + grp.name + " ?")) { + _thiss.deleteGrp(grp.id); + } + }); + deleteGroupButton.style("margin-left", 4); + } + }, { + key: "addFormInput", + value: function addFormInput(form, fieldId, fieldLabel, fieldType) { + var grp = form.append("div").classed("form-group row", true); + grp.append("label").classed("col-sm-2 col-form-label", true).attr("for", fieldId).text(fieldLabel + ": "); + var divIn = grp.append("div").classed("col-sm-10", true); + var inp = divIn.append(fieldType); + inp.classed("form-control", true).attr("id", fieldId); + return inp; + } + }, { + key: "addFeedBackinfo", + value: function addFeedBackinfo(baseNode, cls, txt, desc) { + var _thiss = this; + var feedbackNode = baseNode.append("div").classed("alert", true).classed(cls, true).classed("alert-dismissible", true).classed("fade", true).classed("show", true); + feedbackNode.append("strong").text(txt); + feedbackNode.append("span").text(" " + desc).append("button").attr("type", "button").classed("close", true).attr("data-dismiss", "alert").text("x").on("click", function () { + _thiss.hideNode(feedbackNode); + }); + return feedbackNode; + } + }, { + key: "hideNode", + value: function hideNode(node) { + node.classed("d-none", true); + } + }, { + key: "showNode", + value: function showNode(node) { + node.classed("d-none", false); + } + }, { + key: "createAddGroupForm", + value: function createAddGroupForm(projectsDiv) { + var _thiss = this; + var inputsDiv = projectsDiv.append("div"); + var nameIn = this.addFormInput(inputsDiv, "groupNameInput", "Name: ", "input"); + var confimButton = inputsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Confirm"); + var addGrpButton = projectsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Add Group"); + inputsDiv.classed("d-none", true); + confimButton.on("click", function () { + _thiss.hideNode(_thiss.errorFeedback); + _thiss.hideNode(_thiss.successFeedback); + var newGrp = { + name: nameIn.property("value"), + members: new Array() + }; + fetch("groups", { + method: 'POST', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(newGrp) // body data type must match "Content-Type" header + }).then(function (response) { + if (response.status == 201) { + response.json().then(function (obj) { + newGrp.id = obj.id; + _thiss.addGrpRow(newGrp); + _thiss.hideNode(inputsDiv); + _thiss.showNode(addGrpButton); + _thiss.showNode(_thiss.successFeedback); }); + } else { + _thiss.showNode(_thiss.errorFeedback); + } + }); + }); + addGrpButton.on("click", function () { + _thiss.showNode(inputsDiv); + _thiss.hideNode(addGrpButton); + }); + } + }, { + key: "createAddMemberForm", + value: function createAddMemberForm(projectsDiv) { + var _thiss = this; + _thiss.addMemberForm = projectsDiv.append("div"); + var inputsDiv = _thiss.addMemberForm; + this.userIn = this.addFormInput(inputsDiv, "groupUsersInput", "User", "select"); + var confimButton = inputsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Confirm"); + confimButton.on("click", function () { + _thiss.hideNode(_thiss.errorFeedback); + _thiss.hideNode(_thiss.successFeedback); + var select = _thiss.userIn.node(); + if (select != null) { + var option = select.options[select.selectedIndex]; + var newGrp = { + userId: option.value + }; + fetch("groups/" + _thiss.currentGroup + "/users", { + method: 'POST', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(newGrp) // body data type must match "Content-Type" header + }).then(function (response) { + if (response.status == 201) { + response.json().then(function (obj) { + _thiss.hideNode(_thiss.addMemberForm); + _thiss.showNode(_thiss.successFeedback); + _thiss.resfreshGroups(); + }); + } else { + _thiss.showNode(_thiss.errorFeedback); + } + }); + } + }); + _thiss.hideNode(_thiss.addMemberForm); + } + }, { + key: "setNode", + value: function setNode() { + var content = this.d3node.append('div').classed('config-content', true); + var projectsDiv = content.append("div"); + projectsDiv.append("h2").text("Groups:"); + this.errorFeedback = this.addFeedBackinfo(projectsDiv, "alert-danger", "Error!", "A problem has been occurred while submitting your data."); + this.successFeedback = this.addFeedBackinfo(projectsDiv, "alert-success", "Success!", ""); + this.hideNode(this.errorFeedback); + this.hideNode(this.successFeedback); + this.createAddMemberForm(projectsDiv); + projectsDiv.append("br"); + this.createAddGroupForm(projectsDiv); + var table = projectsDiv.append("table").classed("table", true); + var header = table.append("thead").append("tr"); + header.append("th").attr("scope", "col").text("id"); + header.append("th").attr("scope", "col").text("name"); + header.append("th").attr("scope", "col").text("Members"); + header.append("th").attr("scope", "col").text("Actions"); + this.tBody = table.append("tbody"); + } + }], [{ + key: "createNode", + value: function createNode() { + var node = document.createElement('div'); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/info/diff_info.ts": +/*!*******************************!*\ + !*** ./src/info/diff_info.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DiffInfoWidget: () => (/* binding */ DiffInfoWidget) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _modules_info__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules_info */ "./src/info/modules_info.ts"); +/* harmony import */ var _environment_info__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./environment_info */ "./src/info/environment_info.ts"); +/* harmony import */ var _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./file_accesses_info */ "./src/info/file_accesses_info.ts"); +/* harmony import */ var _trial_info__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./trial_info */ "./src/info/trial_info.ts"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + + + + + +var DiffInfoWidget = /*#__PURE__*/function (_Widget) { + function DiffInfoWidget(display1, display2, trial1, trial2) { + var _this; + _classCallCheck(this, DiffInfoWidget); + _this = _callSuper(this, DiffInfoWidget, [{ + node: DiffInfoWidget.createNode() + }]); + _this.display1 = display1; + _this.display2 = display2; + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__["default"])(_this.node); + _this.addClass('content'); + _this.addClass('trial-info'); + _this.title.label = display1 + "<->" + display2 + " - Diff Info"; + _this.title.closable = true; + _this.title.caption = "Diff ".concat(display1, "-").concat(display2, " Information"); + _this.load(trial1, trial2); + return _this; + } + _inherits(DiffInfoWidget, _Widget); + return _createClass(DiffInfoWidget, [{ + key: "load", + value: function load(trial1, trial2) { + var _this2 = this; + var sub = this.node.getElementsByClassName("trial-info")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Info", sub, DiffInfoWidget.url(trial1, trial2), function (data) { + _this2.createMain(data); + _this2.loadModules(trial1, trial2); + _this2.loadEnvironment(trial1, trial2); + _this2.loadFileAccess(trial1, trial2); + }); + } + }, { + key: "createMain", + value: function createMain(data) { + var trial = data.trial; + var trial1 = data.trial1; + var trial2 = data.trial2; + var content = this.d3node.select('.trial-info').html("").append('div').classed('side-info', true); + var main = content.append('div').classed('main', true); + var h1 = main.append("h1"); + + // Title + h1.append("span").classed("dbefore", true).text("Trial " + this.display1); + h1.append("span").text(" <-> "); + h1.append("span").classed("dafter", true).text("Trial " + this.display2); + + // Code hash + if (trial.code_hash == undefined) { + main.append("h3").classed("hash", true).text(trial1.code_hash || ""); + } else { + main.append("h3").classed("hash dbefore", true).text(trial.code_hash[0] || ""); + main.append("h3").classed("hash dafter", true).text(trial.code_hash[1] || ""); + } + this.info(main, "id", "Id", trial1.id, trial2.id); + this.info(main, "script", "Script", trial1.script, trial2.script); + this.info(main, "start", "Start", trial1.start, trial2.start); + this.info(main, "finish", "Finish", trial1.finish, trial2.finish); + this.info(main, "duration", "Duration", trial1.duration_text, trial2.duration_text); + if (trial.arguments == undefined) { + if (trial1.arguments) { + var attr = main.append("span").classed("attr", true); + attr.append("span").classed("desc", true).text("Arguments: "); + attr.append("span").classed("arguments", true).text(trial1.arguments); + } + } else { + if (trial1.arguments) { + var _attr = main.append("span").classed("attr", true); + _attr.append("span").classed("desc dbefore", true).text("Arguments: "); + _attr.append("span").classed("arguments", true).text(trial1.arguments); + } + if (trial2.arguments) { + var _attr2 = main.append("span").classed("attr", true); + _attr2.append("span").classed("desc dafter", true).text("Arguments: "); + _attr2.append("span").classed("arguments", true).text(trial2.arguments); + } + } + content.append("div").classed("modules", true); + content.append("div").classed("environment", true); + content.append("div").classed("file-accesses", true); + } + }, { + key: "filter_trial", + value: function filter_trial(filter, filterfn) { + var select_trial = filter.filterdiv.append("select"); + select_trial.append("option").attr("value", "3").text("Do not filter Trial"); + select_trial.append("option").attr("value", "1").text("First Trial Only"); + select_trial.append("option").attr("value", "5").text("Exists in First Trial"); + select_trial.append("option").attr("value", "2").text("Second Trial Only"); + select_trial.append("option").attr("value", "6").text("Exists in Second Trial"); + select_trial.append("option").attr("value", "4").text("Both Trials Only"); + select_trial.property("value", "3"); + var newfilter = function newfilter() { + filterfn(Number(select_trial.property("value"))); + }; + select_trial.on("change", newfilter); + filter.on_change(newfilter); + } + }, { + key: "loadModules", + value: function loadModules(trial1, trial2) { + var _this3 = this; + var sub = this.node.getElementsByClassName("modules")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Modules", sub, DiffInfoWidget.modules_url(trial1, trial2), function (data) { + var modules = _this3.d3node.select(".modules").html(""); + if (data.modules_added.length > 0 || data.modules_removed.length > 0 || data.modules_replaced.length > 0) { + var fold = _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFold(modules, "Modules"); + var foldable = modules.append("div").classed("foldable show-toolbar", true); + var filter = _modules_info__WEBPACK_IMPORTED_MODULE_2__.ModulesInfoWidget.createFilter(foldable); + var ul = foldable.append("ul").classed("mod-list", true); + _this3.filter_trial(filter, function (strial) { + ul.html(""); + if ((strial & 1) == 1) { + var _iterator = _createForOfIteratorHelper(data.modules_removed), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var element = _step.value; + if (!filter.valid(data.t1_path, element)) { + continue; + } + _this3.mod_li(ul, 'libefore', element); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + if ((strial & 2) == 2) { + var _iterator2 = _createForOfIteratorHelper(data.modules_added), + _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var element = _step2.value; + if (!filter.valid(data.t2_path, element)) { + continue; + } + _this3.mod_li(ul, 'liafter', element); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + if (strial >= 3) { + var _iterator3 = _createForOfIteratorHelper(data.modules_replaced), + _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var elements = _step3.value; + var rem = elements[0], + add = elements[1]; + if (!filter.valid(data.t1_path, rem) || !filter.valid(data.t2_path, add)) { + continue; + } + var li = ul.append("li"); + li.append("div").classed("name", true).text(rem.name); + var version = li.append("div").classed("version", true); + version.append("div").classed("dbefore", true).text(rem.version); + version.append("div").classed("dafter", true).text(add.version); + li.append("div").classed("clear", true); + li.append("div").classed("hash dbefore", true).attr("title", rem.path).text(rem.code_hash); + li.append("div").classed("hash dafter", true).attr("title", add.path).text(add.code_hash); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + } + }); + _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFilterFold(fold, filter); + } + }); + } + }, { + key: "loadEnvironment", + value: function loadEnvironment(trial1, trial2) { + var _this4 = this; + var sub = this.node.getElementsByClassName("environment")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Environment", sub, DiffInfoWidget.environment_url(trial1, trial2), function (data) { + var environment = _this4.d3node.select(".environment").html(""); + if (data.env_added.length > 0 || data.env_removed.length > 0 || data.env_replaced.length > 0) { + var fold = _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFold(environment, "Environment"); + var foldable = environment.append("div").classed("foldable show-toolbar", true); + var filter = _environment_info__WEBPACK_IMPORTED_MODULE_3__.EnvironmentInfoWidget.createFilter(foldable); + var ul = foldable.append("ul").classed("env-list", true); + _this4.filter_trial(filter, function (strial) { + ul.html(""); + if ((strial & 1) == 1) { + var _iterator4 = _createForOfIteratorHelper(data.env_removed), + _step4; + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { + var element = _step4.value; + if (!filter.valid(element)) { + continue; + } + _this4.env_li(ul, 'dbefore', element); + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + } + if ((strial & 2) == 2) { + var _iterator5 = _createForOfIteratorHelper(data.env_added), + _step5; + try { + for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { + var element = _step5.value; + if (!filter.valid(element)) { + continue; + } + _this4.env_li(ul, 'dafter', element); + } + } catch (err) { + _iterator5.e(err); + } finally { + _iterator5.f(); + } + } + if (strial >= 3) { + var _iterator6 = _createForOfIteratorHelper(data.env_replaced), + _step6; + try { + for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { + var elements = _step6.value; + var rem = elements[0], + add = elements[1]; + if (!filter.valid(rem) || !filter.valid(add)) { + continue; + } + _this4.env_cli(ul, rem, add); + } + } catch (err) { + _iterator6.e(err); + } finally { + _iterator6.f(); + } + } + }); + _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFilterFold(fold, filter); + } + }); + } + }, { + key: "loadFileAccess", + value: function loadFileAccess(trial1, trial2) { + var _this5 = this; + var sub = this.node.getElementsByClassName("file-accesses")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("File Accesses", sub, DiffInfoWidget.accesses_url(trial1, trial2), function (data) { + var accesses = _this5.d3node.select(".file-accesses").html(""); + if (data.fa_added.length > 0 || data.fa_removed.length > 0 || data.fa_replaced.length > 0) { + var fold = _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFold(accesses, "File Accesses"); + var foldable = accesses.append("div").classed("foldable show-toolbar", true); + var filter = _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__.FileAccessesInfoWidget.createFilter(foldable); + var ul = foldable.append("ul").classed("fac-list", true); + _this5.filter_trial(filter, function (strial) { + ul.html(""); + if ((strial & 1) == 1) { + var _iterator7 = _createForOfIteratorHelper(data.fa_removed), + _step7; + try { + for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { + var element = _step7.value; + if (!filter.valid(data.t1_path, element)) { + continue; + } + _this5.fa_li(ul, 'libefore', element); + } + } catch (err) { + _iterator7.e(err); + } finally { + _iterator7.f(); + } + } + if ((strial & 2) == 2) { + var _iterator8 = _createForOfIteratorHelper(data.fa_added), + _step8; + try { + for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { + var element = _step8.value; + if (!filter.valid(data.t2_path, element)) { + continue; + } + _this5.fa_li(ul, 'liafter', element); + } + } catch (err) { + _iterator8.e(err); + } finally { + _iterator8.f(); + } + } + if (strial >= 3) { + var _iterator9 = _createForOfIteratorHelper(data.fa_replaced), + _step9; + try { + for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { + var elements = _step9.value; + var rem = elements[0], + add = elements[1]; + if (!filter.valid(data.t1_path, rem) || !filter.valid(data.t2_path, add)) { + continue; + } + var li = ul.append("li"); + _this5.fa_cfield(li, 'name', 'Name', rem.name, add.name); + _this5.fa_cfield(li, 'mode', 'Mode', rem.mode, add.mode); + _this5.fa_cfield(li, 'buffering', 'Buffering', rem.buffering, add.buffering); + li.append("div").classed("clear", true); + _this5.fa_cfield(li, 'timestamp', 'Time', rem.timestamp, add.timestamp); + _this5.fa_cfield(li, 'content_hash_before hash', 'Content hash before', rem.content_hash_before, add.content_hash_before); + _this5.fa_cfield(li, 'content_hash_after hash', 'Content hash after', rem.content_hash_after, add.content_hash_after); + _this5.fa_cfield(li, 'stack', 'Stack', rem.stack, add.stack); + } + } catch (err) { + _iterator9.e(err); + } finally { + _iterator9.f(); + } + } + }); + _trial_info__WEBPACK_IMPORTED_MODULE_5__.TrialInfoWidget.createFilterFold(fold, filter); + } + }); + } + }, { + key: "info", + value: function info(main, cls, label, value1, value2) { + if (value1 == value2) { + var attr = main.append("span").classed("attr", true); + attr.append("span").classed("desc", true).text(label + ": "); + attr.append("span").classed(cls, true).text(value1); + } else { + var attr1 = main.append("span").classed("attr dbefore", true); + attr1.append("span").classed("desc", true).text(label + ": "); + attr1.append("span").classed(cls, true).text(value1); + var attr2 = main.append("span").classed("attr dafter", true); + attr2.append("span").classed("desc", true).text(label + ": "); + attr2.append("span").classed(cls, true).text(value2); + } + } + }, { + key: "mod_li", + value: function mod_li(element, cls, mod) { + var li = element.append("li").classed(cls, true); + li.append("div").classed("name", true).text(mod.name); + li.append("div").classed("version", true).text(mod.version); + li.append("div").classed("clear", true); + li.append("div").classed("hash", true).attr("title", mod.path).text(mod.code_hash); + } + }, { + key: "env_field", + value: function env_field(element, env) { + element.append("span").classed("key", true).text(env.name); + element.append("span").classed("equal", true).text(" = "); + element.append("span").classed("value", true).text(env.value); + } + }, { + key: "env_li", + value: function env_li(element, cls, env) { + this.env_field(element.append("li").classed(cls, true), env); + } + }, { + key: "env_cli", + value: function env_cli(element, rem, add) { + var li = element.append("li"); + this.env_field(li.append("div").classed("dbefore", true), rem); + this.env_field(li.append("div").classed("dafter", true), add); + } + }, { + key: "fa_field", + value: function fa_field(element, cls, title, value) { + element.append("div").classed(cls, true).attr("title", title).text(value); + } + }, { + key: "fa_li", + value: function fa_li(element, cls, fa) { + var li = element.append("li").classed(cls, true); + this.fa_field(li, 'name', 'Name', fa.name); + this.fa_field(li, 'mode', 'Mode', fa.mode); + this.fa_field(li, 'buffering', 'Buffering', fa.buffering); + li.append("div").classed("clear", true); + this.fa_field(li, 'timestamp', 'Time', fa.timestamp); + this.fa_field(li, 'content_hash_before hash', 'Content hash before', fa.content_hash_before); + this.fa_field(li, 'content_hash_after hash', 'Content hash after', fa.content_hash_after); + this.fa_field(li, 'stack', 'Stack', fa.stack); + } + }, { + key: "fa_cfield", + value: function fa_cfield(element, cls, title, v1, v2) { + if (v1 == v2) { + this.fa_field(element, cls, title, v1); + } else { + this.fa_field(element, cls + " dbefore", title, v1); + this.fa_field(element, cls + " dafter", title, v2); + } + } + }], [{ + key: "url", + value: function url(trial1, trial2) { + return "diff/" + trial1 + "/" + trial2 + "/info.json"; + } + }, { + key: "modules_url", + value: function modules_url(trial1, trial2) { + return "diff/" + trial1 + "/" + trial2 + "/dependencies.json"; + } + }, { + key: "environment_url", + value: function environment_url(trial1, trial2) { + return "diff/" + trial1 + "/" + trial2 + "/environment.json"; + } + }, { + key: "accesses_url", + value: function accesses_url(trial1, trial2) { + return "diff/" + trial1 + "/" + trial2 + "/file_accesses.json"; + } + }, { + key: "createNode", + value: function createNode() { + var node = document.createElement('div'); + var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__["default"])(node); + d3node.append('div').classed('trial-info', true); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/info/environment_info.ts": +/*!**************************************!*\ + !*** ./src/info/environment_info.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ EnvironmentInfoWidget: () => (/* binding */ EnvironmentInfoWidget) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + +var EnvironmentInfoWidget = /*#__PURE__*/function (_Widget) { + function EnvironmentInfoWidget(trialDisplay, data) { + var _this; + var default_local = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "0"; + _classCallCheck(this, EnvironmentInfoWidget); + _this = _callSuper(this, EnvironmentInfoWidget, [{ + node: EnvironmentInfoWidget.createNode(trialDisplay, data, default_local) + }]); + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(_this.node); + _this.addClass('content'); + _this.addClass('trial-info-list'); + _this.title.label = trialDisplay + "- Environment"; + _this.title.closable = true; + _this.title.caption = "Trial ".concat(trialDisplay, " Environment"); + return _this; + } + _inherits(EnvironmentInfoWidget, _Widget); + return _createClass(EnvironmentInfoWidget, null, [{ + key: "url", + value: function url(trialId) { + return "trials/" + trialId + "/environment.json"; + } + }, { + key: "createItem", + value: function createItem(parent, key, value) { + if (value) { + var li = parent.append("li"); + li.append("span").classed("key", true).text(key); + li.append("span").classed("equal", true).text(" = "); + li.append("span").classed("value", true).text(value); + } + } + }, { + key: "createFilterDiv", + value: function createFilterDiv(parent) { + return parent.append("div"); + } + }, { + key: "createFilter", + value: function createFilter(parent) { + var default_local = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "0"; + var filterdiv = this.createFilterDiv(parent); + var text_filter = filterdiv.append("input").attr("type", "search"); + var select_local = filterdiv.append("select"); + select_local.append("option").attr("value", "0").text("Do not filter Main"); + select_local.append("option").attr("value", "1").text("Main Environment Only"); + select_local.append("option").attr("value", "2").text("Non-Main Environment Only"); + select_local.property("value", default_local); + return { + filterdiv: filterdiv, + valid: function valid(element) { + var stext = text_filter.property("value").toLowerCase(); + var slocal = Number(select_local.property("value")); + var check_text = function check_text() { + return element.name.toLowerCase().indexOf(stext) >= 0 || element.value.toLowerCase().indexOf(stext) >= 0; + }; + var check_local = function check_local() { + if (slocal == 0) return true; + switch (element.name) { + case 'PYTHON_IMPLEMENTATION': + case 'PYTHON_VERSION': + case 'OS_NAME': + case 'OS_RELEASE': + case 'OS_USER': + case 'PWD': + case 'PID': + case 'HOSTNAME': + case 'ARCH': + case 'PROCESSOR': + return slocal == 1; + default: + return slocal != 1; + } + }; + return check_text() && check_local(); }, - scrollIntoView: "animate", - readOnly: true - }, { - name: "selectall", - description: "Select all", - bindKey: bindKey("Ctrl-A", "Command-A"), - exec: function (editor) { editor.selectAll(); }, - readOnly: true - }, { - name: "centerselection", - description: "Center selection", - bindKey: bindKey(null, "Ctrl-L"), - exec: function (editor) { editor.centerSelection(); }, - readOnly: true - }, { - name: "gotoline", - description: "Go to line...", - bindKey: bindKey("Ctrl-L", "Command-L"), - exec: function (editor, line) { - if (typeof line === "number" && !isNaN(line)) - editor.gotoLine(line); - editor.prompt({ $type: "gotoLine" }); - }, - readOnly: true - }, { - name: "fold", - bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), - exec: function (editor) { editor.session.toggleFold(false); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "unfold", - bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), - exec: function (editor) { editor.session.toggleFold(true); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "toggleFoldWidget", - description: "Toggle fold widget", - bindKey: bindKey("F2", "F2"), - exec: function (editor) { editor.session.toggleFoldWidget(); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "toggleParentFoldWidget", - description: "Toggle parent fold widget", - bindKey: bindKey("Alt-F2", "Alt-F2"), - exec: function (editor) { editor.session.toggleFoldWidget(true); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "foldall", - description: "Fold all", - bindKey: bindKey(null, "Ctrl-Command-Option-0"), - exec: function (editor) { editor.session.foldAll(); }, - scrollIntoView: "center", - readOnly: true - }, { - name: "foldAllComments", - description: "Fold all comments", - bindKey: bindKey(null, "Ctrl-Command-Option-0"), - exec: function (editor) { editor.session.foldAllComments(); }, - scrollIntoView: "center", - readOnly: true - }, { - name: "foldOther", - description: "Fold other", - bindKey: bindKey("Alt-0", "Command-Option-0"), - exec: function (editor) { - editor.session.foldAll(); - editor.session.unfold(editor.selection.getAllRanges()); - }, - scrollIntoView: "center", - readOnly: true - }, { - name: "unfoldall", - description: "Unfold all", - bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), - exec: function (editor) { editor.session.unfold(); }, - scrollIntoView: "center", - readOnly: true - }, { - name: "findnext", - description: "Find next", - bindKey: bindKey("Ctrl-K", "Command-G"), - exec: function (editor) { editor.findNext(); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "findprevious", - description: "Find previous", - bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), - exec: function (editor) { editor.findPrevious(); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "selectOrFindNext", - description: "Select or find next", - bindKey: bindKey("Alt-K", "Ctrl-G"), - exec: function (editor) { - if (editor.selection.isEmpty()) - editor.selection.selectWord(); - else - editor.findNext(); - }, - readOnly: true - }, { - name: "selectOrFindPrevious", - description: "Select or find previous", - bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"), - exec: function (editor) { - if (editor.selection.isEmpty()) - editor.selection.selectWord(); - else - editor.findPrevious(); - }, - readOnly: true - }, { - name: "find", - description: "Find", - bindKey: bindKey("Ctrl-F", "Command-F"), - exec: function (editor) { - config.loadModule("ace/ext/searchbox", function (e) { e.Search(editor); }); - }, - readOnly: true - }, { - name: "overwrite", - description: "Overwrite", - bindKey: "Insert", - exec: function (editor) { editor.toggleOverwrite(); }, - readOnly: true - }, { - name: "selecttostart", - description: "Select to start", - bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Home|Command-Shift-Up"), - exec: function (editor) { editor.getSelection().selectFileStart(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" - }, { - name: "gotostart", - description: "Go to start", - bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), - exec: function (editor) { editor.navigateFileStart(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" - }, { - name: "selectup", - description: "Select up", - bindKey: bindKey("Shift-Up", "Shift-Up|Ctrl-Shift-P"), - exec: function (editor) { editor.getSelection().selectUp(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "golineup", - description: "Go line up", - bindKey: bindKey("Up", "Up|Ctrl-P"), - exec: function (editor, args) { editor.navigateUp(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selecttoend", - description: "Select to end", - bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-End|Command-Shift-Down"), - exec: function (editor) { editor.getSelection().selectFileEnd(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" - }, { - name: "gotoend", - description: "Go to end", - bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), - exec: function (editor) { editor.navigateFileEnd(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" - }, { - name: "selectdown", - description: "Select down", - bindKey: bindKey("Shift-Down", "Shift-Down|Ctrl-Shift-N"), - exec: function (editor) { editor.getSelection().selectDown(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "golinedown", - description: "Go line down", - bindKey: bindKey("Down", "Down|Ctrl-N"), - exec: function (editor, args) { editor.navigateDown(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectwordleft", - description: "Select word left", - bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), - exec: function (editor) { editor.getSelection().selectWordLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotowordleft", - description: "Go to word left", - bindKey: bindKey("Ctrl-Left", "Option-Left"), - exec: function (editor) { editor.navigateWordLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selecttolinestart", - description: "Select to line start", - bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left|Ctrl-Shift-A"), - exec: function (editor) { editor.getSelection().selectLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotolinestart", - description: "Go to line start", - bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), - exec: function (editor) { editor.navigateLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectleft", - description: "Select left", - bindKey: bindKey("Shift-Left", "Shift-Left|Ctrl-Shift-B"), - exec: function (editor) { editor.getSelection().selectLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotoleft", - description: "Go to left", - bindKey: bindKey("Left", "Left|Ctrl-B"), - exec: function (editor, args) { editor.navigateLeft(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectwordright", - description: "Select word right", - bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), - exec: function (editor) { editor.getSelection().selectWordRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotowordright", - description: "Go to word right", - bindKey: bindKey("Ctrl-Right", "Option-Right"), - exec: function (editor) { editor.navigateWordRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selecttolineend", - description: "Select to line end", - bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right|Shift-End|Ctrl-Shift-E"), - exec: function (editor) { editor.getSelection().selectLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotolineend", - description: "Go to line end", - bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), - exec: function (editor) { editor.navigateLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectright", - description: "Select right", - bindKey: bindKey("Shift-Right", "Shift-Right"), - exec: function (editor) { editor.getSelection().selectRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotoright", - description: "Go to right", - bindKey: bindKey("Right", "Right|Ctrl-F"), - exec: function (editor, args) { editor.navigateRight(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectpagedown", - description: "Select page down", - bindKey: "Shift-PageDown", - exec: function (editor) { editor.selectPageDown(); }, - readOnly: true - }, { - name: "pagedown", - description: "Page down", - bindKey: bindKey(null, "Option-PageDown"), - exec: function (editor) { editor.scrollPageDown(); }, - readOnly: true - }, { - name: "gotopagedown", - description: "Go to page down", - bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), - exec: function (editor) { editor.gotoPageDown(); }, - readOnly: true - }, { - name: "selectpageup", - description: "Select page up", - bindKey: "Shift-PageUp", - exec: function (editor) { editor.selectPageUp(); }, - readOnly: true - }, { - name: "pageup", - description: "Page up", - bindKey: bindKey(null, "Option-PageUp"), - exec: function (editor) { editor.scrollPageUp(); }, - readOnly: true - }, { - name: "gotopageup", - description: "Go to page up", - bindKey: "PageUp", - exec: function (editor) { editor.gotoPageUp(); }, - readOnly: true - }, { - name: "scrollup", - description: "Scroll up", - bindKey: bindKey("Ctrl-Up", null), - exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, - readOnly: true - }, { - name: "scrolldown", - description: "Scroll down", - bindKey: bindKey("Ctrl-Down", null), - exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, - readOnly: true - }, { - name: "selectlinestart", - description: "Select line start", - bindKey: "Shift-Home", - exec: function (editor) { editor.getSelection().selectLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectlineend", - description: "Select line end", - bindKey: "Shift-End", - exec: function (editor) { editor.getSelection().selectLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "togglerecording", - description: "Toggle recording", - bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), - exec: function (editor) { editor.commands.toggleRecording(editor); }, - readOnly: true - }, { - name: "replaymacro", - description: "Replay macro", - bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), - exec: function (editor) { editor.commands.replay(editor); }, - readOnly: true - }, { - name: "jumptomatching", - description: "Jump to matching", - bindKey: bindKey("Ctrl-\\|Ctrl-P", "Command-\\"), - exec: function (editor) { editor.jumpToMatching(); }, - multiSelectAction: "forEach", - scrollIntoView: "animate", - readOnly: true - }, { - name: "selecttomatching", - description: "Select to matching", - bindKey: bindKey("Ctrl-Shift-\\|Ctrl-Shift-P", "Command-Shift-\\"), - exec: function (editor) { editor.jumpToMatching(true); }, - multiSelectAction: "forEach", - scrollIntoView: "animate", - readOnly: true - }, { - name: "expandToMatching", - description: "Expand to matching", - bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"), - exec: function (editor) { editor.jumpToMatching(true, true); }, - multiSelectAction: "forEach", - scrollIntoView: "animate", - readOnly: true - }, { - name: "passKeysToBrowser", - description: "Pass keys to browser", - bindKey: bindKey(null, null), - exec: function () { }, - passEvent: true, - readOnly: true - }, { - name: "copy", - description: "Copy", - exec: function (editor) { - }, - readOnly: true - }, - { - name: "cut", - description: "Cut", - exec: function (editor) { - var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty(); - var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange(); - editor._emit("cut", range); - if (!range.isEmpty()) - editor.session.remove(range); - editor.clearSelection(); + on_change: function on_change(filterfn) { + text_filter.on("keyup", filterfn); + select_local.on("change", filterfn); + filterfn(); + } + }; + } + }, { + key: "createList", + value: function createList(parent, data) { + var default_local = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "0"; + var filter = EnvironmentInfoWidget.createFilter(parent, default_local); + var list = parent.append("ul").classed("env-list", true); + filter.on_change(function () { + list.html(""); + var _iterator = _createForOfIteratorHelper(data), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var element = _step.value; + if (!filter.valid(element)) { + continue; + } + EnvironmentInfoWidget.createItem(list, element.name, element.value); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + }); + return filter; + } + }, { + key: "createNode", + value: function createNode(trialDisplay, data) { + var default_local = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "0"; + var node = document.createElement('div'); + var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(node); + var content = d3node.append('div').classed('list', true).append('div').classed('side-info', true); + content.append("div").classed("main", true).append("h1").text("Environment (" + trialDisplay + ")"); + EnvironmentInfoWidget.createList(content, data, default_local); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/info/file_accesses_info.ts": +/*!****************************************!*\ + !*** ./src/info/file_accesses_info.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ FileAccessesInfoWidget: () => (/* binding */ FileAccessesInfoWidget) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + +var FileAccessesInfoWidget = /*#__PURE__*/function (_Widget) { + function FileAccessesInfoWidget(trialDisplay, data, trial_path) { + var _this; + var default_local = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "0"; + _classCallCheck(this, FileAccessesInfoWidget); + _this = _callSuper(this, FileAccessesInfoWidget, [{ + node: FileAccessesInfoWidget.createNode(trialDisplay, data, trial_path, default_local) + }]); + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(_this.node); + _this.addClass('content'); + _this.addClass('trial-info-list'); + _this.title.label = trialDisplay + "- Accesses"; + _this.title.closable = true; + _this.title.caption = "Trial ".concat(trialDisplay, " Accesses"); + return _this; + } + _inherits(FileAccessesInfoWidget, _Widget); + return _createClass(FileAccessesInfoWidget, null, [{ + key: "url", + value: function url(trialId) { + return "trials/" + trialId + "/file_accesses.json"; + } + }, { + key: "createFilterDiv", + value: function createFilterDiv(parent) { + return parent.append("div"); + } + }, { + key: "createFilter", + value: function createFilter(parent) { + var default_local = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "0"; + var filterdiv = this.createFilterDiv(parent); + var text_filter = filterdiv.append("input").attr("placeholder", "Name").attr("type", "search"); + var mode_filter = filterdiv.append("input").attr("placeholder", "Mode").attr("type", "search"); + var select_hash = filterdiv.append("select"); + select_hash.append("option").attr("value", "0").text("Do not filter Existence"); + select_hash.append("option").attr("value", "1").text("Exists only before trial"); + select_hash.append("option").attr("value", "2").text("Exists only after trial"); + select_hash.append("option").attr("value", "3").text("Changes during trial"); + select_hash.append("option").attr("value", "7").text("Does not change during trial"); + select_hash.property("value", "0"); + var select_local = filterdiv.append("select"); + select_local.append("option").attr("value", "0").text("Do not filter Locality"); + select_local.append("option").attr("value", "1").text("Local files only"); + select_local.append("option").attr("value", "2").text("Non-local files only"); + select_local.property("value", default_local); + return { + filterdiv: filterdiv, + valid: function valid(local, element) { + var stext = text_filter.property("value").toLowerCase(); + var smode = mode_filter.property("value").toLowerCase(); + var shash = Number(select_hash.property("value")); + var slocal = Number(select_local.property("value")); + var check_text = function check_text() { + return element.name.toLowerCase().indexOf(stext) >= 0; + }; + var check_mode = function check_mode() { + return element.mode.toLowerCase().indexOf(smode) >= 0; + }; + var check_hash = function check_hash() { + if ((shash & 1) == 1 && element.content_hash_before == null) return false; + if ((shash & 2) == 2 && element.content_hash_after == null) return false; + if (shash == 1) return element.content_hash_after == null; + if (shash == 2) return element.content_hash_before == null; + if (shash == 3) return element.content_hash_before != element.content_hash_after; + if (shash == 4) return element.content_hash_before == element.content_hash_after; + return true; + }; + var check_local = function check_local() { + if (slocal == 0) return true; + if (!/^((\/)|(\w+:\\))/.test(element.name)) return slocal == 1; // not absolute path + if (element.name.startsWith(local)) return slocal == 1; + return slocal != 1; + }; + return check_text() && check_mode() && check_hash() && check_local(); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" - }, { - name: "paste", - description: "Paste", - exec: function (editor, args) { - editor.$handlePaste(args); + on_change: function on_change(filterfn) { + text_filter.on("keyup", filterfn); + mode_filter.on("keyup", filterfn); + select_hash.on("change", filterfn); + select_local.on("change", filterfn); + filterfn(); + } + }; + } + }, { + key: "createList", + value: function createList(parent, data, trial_path) { + var default_local = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "0"; + var filter = FileAccessesInfoWidget.createFilter(parent, default_local); + var list = parent.append("ul").classed("fac-list", true); + filter.on_change(function () { + list.html(""); + var _iterator = _createForOfIteratorHelper(data), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var element = _step.value; + if (!filter.valid(trial_path, element)) { + continue; + } + var li = list.append("li"); + + //name of file for request + var name = element.name.split("/"); + var pos = name.length - 1; + var fileName = name[pos]; + li.append("a").classed("name", true).attr("title", "Name").text(element.name).attr("href", "/trials/files/" + element.content_hash_after + "/" + fileName); //file after execution + li.append("div").classed("mode", true).attr("title", "Mode").text(element.mode); + li.append("div").classed("buffering", true).attr("title", "Buffering").text(element.buffering); + li.append("div").classed("clear", true); + li.append("div").classed("timestamp", true).attr("title", "Time").text(element.timestamp); + li.append("a").classed("content_hash_before hash", true).attr("title", "Content hash before").text(element.content_hash_before).attr("href", "/trials/files/" + element.content_hash_before + "/" + fileName); + li.append("div"); //spacing + li.append("a").classed("content_hash_after hash", true).attr("title", "Content hash after").text(element.content_hash_after).attr("href", "/trials/files/" + element.content_hash_after + "/" + fileName); + li.append("div").classed("stack", true).attr("title", "Stack").text(element.stack); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + }); + return filter; + } + }, { + key: "createNode", + value: function createNode(trialDisplay, data, trial_path) { + var default_local = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "0"; + var node = document.createElement('div'); + var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(node); + var content = d3node.append('div').classed('list', true).append('div').classed('side-info', true); + content.append("div").classed("main", true).append("h1").text("File Accesses (" + trialDisplay + ")"); + FileAccessesInfoWidget.createList(content, data, trial_path, default_local); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/info/modules_info.ts": +/*!**********************************!*\ + !*** ./src/info/modules_info.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ModulesInfoWidget: () => (/* binding */ ModulesInfoWidget) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + +var ModulesInfoWidget = /*#__PURE__*/function (_Widget) { + function ModulesInfoWidget(trialDisplay, data, trial_path) { + var _this; + _classCallCheck(this, ModulesInfoWidget); + _this = _callSuper(this, ModulesInfoWidget, [{ + node: ModulesInfoWidget.createNode(trialDisplay, data, trial_path) + }]); + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(_this.node); + _this.addClass('content'); + _this.addClass('trial-info-list'); + _this.title.label = trialDisplay + "- Modules"; + _this.title.closable = true; + _this.title.caption = "Trial ".concat(trialDisplay, " Modules"); + return _this; + } + _inherits(ModulesInfoWidget, _Widget); + return _createClass(ModulesInfoWidget, null, [{ + key: "url", + value: function url(trialId) { + return "trials/" + trialId + "/dependencies.json"; + } + }, { + key: "createFilterDiv", + value: function createFilterDiv(parent) { + return parent.append("div"); + } + }, { + key: "createFilter", + value: function createFilter(parent) { + var default_local = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "0"; + var filterdiv = this.createFilterDiv(parent); + var text_filter = filterdiv.append("input").attr("type", "search"); + var select_version = filterdiv.append("select"); + select_version.append("option").attr("value", "both").text("Do not filter Version"); + select_version.append("option").attr("value", "1").text("Filter In Version"); + select_version.append("option").attr("value", "0").text("Filter Out Version"); + select_version.property("value", "both"); + var select_local = filterdiv.append("select"); + select_local.append("option").attr("value", "0").text("Do not filter Locality"); + select_local.append("option").attr("value", "1").text("Local Modules Only"); + select_local.append("option").attr("value", "2").text("Non-Local Modules Only"); + select_local.property("value", default_local); + return { + filterdiv: filterdiv, + valid: function valid(local, element) { + var stext = text_filter.property("value").toLowerCase(); + var sversion = select_version.property("value"); + var slocal = Number(select_local.property("value")); + var check_text = function check_text() { + return element.name.toLowerCase().indexOf(stext) >= 0; + }; + var check_version = function check_version() { + if (sversion == "both") return true; + if (sversion == "1") return element.version != null; + if (sversion == "0") return element.version == null; + return false; + }; + var check_local = function check_local() { + if (slocal == 0) return true; + if (element.path == null) return slocal != 1; + if (!/^((\/)|(\w+:\\))/.test(element.path)) return slocal == 1; // not absolute path + if (element.path.startsWith(local)) return slocal == 1; + return slocal != 1; + }; + return check_text() && check_version() && check_local(); }, - scrollIntoView: "cursor" - }, { - name: "removeline", - description: "Remove line", - bindKey: bindKey("Ctrl-D", "Command-D"), - exec: function (editor) { editor.removeLines(); }, - scrollIntoView: "cursor", - multiSelectAction: "forEachLine" - }, { - name: "duplicateSelection", - description: "Duplicate selection", - bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), - exec: function (editor) { editor.duplicateSelection(); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" - }, { - name: "sortlines", - description: "Sort lines", - bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), - exec: function (editor) { editor.sortLines(); }, - scrollIntoView: "selection", - multiSelectAction: "forEachLine" - }, { - name: "togglecomment", - description: "Toggle comment", - bindKey: bindKey("Ctrl-/", "Command-/"), - exec: function (editor) { editor.toggleCommentLines(); }, - multiSelectAction: "forEachLine", - scrollIntoView: "selectionPart" - }, { - name: "toggleBlockComment", - description: "Toggle block comment", - bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), - exec: function (editor) { editor.toggleBlockComment(); }, - multiSelectAction: "forEach", - scrollIntoView: "selectionPart" - }, { - name: "modifyNumberUp", - description: "Modify number up", - bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), - exec: function (editor) { editor.modifyNumber(1); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" - }, { - name: "modifyNumberDown", - description: "Modify number down", - bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), - exec: function (editor) { editor.modifyNumber(-1); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" - }, { - name: "replace", - description: "Replace", - bindKey: bindKey("Ctrl-H", "Command-Option-F"), - exec: function (editor) { - config.loadModule("ace/ext/searchbox", function (e) { e.Search(editor, true); }); + on_change: function on_change(filterfn) { + text_filter.on("keyup", filterfn); + select_version.on("change", filterfn); + select_local.on("change", filterfn); + filterfn(); + } + }; + } + }, { + key: "createList", + value: function createList(parent, data, trial_path) { + var default_local = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "0"; + var filter = ModulesInfoWidget.createFilter(parent, default_local); + var list = parent.append("ul").classed("mod-list", true); + filter.on_change(function () { + list.html(""); + var _iterator = _createForOfIteratorHelper(data), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var element = _step.value; + if (!filter.valid(trial_path, element)) { + continue; + } + var li = list.append("li"); + li.append("div").classed("name", true).text(element.name); + li.append("div").classed("version", true).text(element.version === null ? "" : element.version); + li.append("div").classed("clear", true); + li.append("div").classed("hash", true).attr("title", element.path).text(element.code_hash); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + }); + return filter; + } + }, { + key: "createNode", + value: function createNode(trialDisplay, data, trial_path) { + var node = document.createElement('div'); + var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_1__["default"])(node); + var content = d3node.append('div').classed('list', true).append('div').classed('side-info', true); + content.append("div").classed("main", true).append("h1").text("Modules (" + trialDisplay + ")"); + ModulesInfoWidget.createList(content, data, trial_path); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/info/trial_info.ts": +/*!********************************!*\ + !*** ./src/info/trial_info.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TrialInfoWidget: () => (/* binding */ TrialInfoWidget) +/* harmony export */ }); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); +/* harmony import */ var _noworkflow_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _modules_info__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules_info */ "./src/info/modules_info.ts"); +/* harmony import */ var _environment_info__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./environment_info */ "./src/info/environment_info.ts"); +/* harmony import */ var _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./file_accesses_info */ "./src/info/file_accesses_info.ts"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + + + + +var TrialInfoWidget = /*#__PURE__*/function (_Widget) { + function TrialInfoWidget(trial, annontationWidget) { + var _this; + _classCallCheck(this, TrialInfoWidget); + _this = _callSuper(this, TrialInfoWidget, [{ + node: TrialInfoWidget.createNode(trial, annontationWidget) + }]); + _this.trial = trial; + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__["default"])(_this.node); + _this.addClass('content'); + _this.addClass('trial-info'); + _this.title.label = trial.display + "- Information"; + _this.title.closable = true; + _this.title.caption = "Trial ".concat(trial.display, " Information"); + _this.loadModules(); + _this.loadEnvironment(); + _this.loadFileAccess(); + _this.annontationWidget = annontationWidget; + return _this; + } + _inherits(TrialInfoWidget, _Widget); + return _createClass(TrialInfoWidget, [{ + key: "loadModules", + value: function loadModules() { + var _this2 = this; + var sub = this.node.getElementsByClassName("modules")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Modules", sub, _modules_info__WEBPACK_IMPORTED_MODULE_2__.ModulesInfoWidget.url(this.trial.title), function (data) { + var modules = _this2.d3node.select(".modules").html(""); + if (data.all.length > 0) { + var fold = TrialInfoWidget.createFold(modules, "Modules"); + var filter = _modules_info__WEBPACK_IMPORTED_MODULE_2__.ModulesInfoWidget.createList(modules.append("div").classed("foldable show-toolbar", true), data.all, data.trial_path, "1"); + TrialInfoWidget.createFilterFold(fold, filter); + } + }); + } + }, { + key: "loadEnvironment", + value: function loadEnvironment() { + var _this3 = this; + var sub = this.node.getElementsByClassName("environment")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("Environment", sub, _environment_info__WEBPACK_IMPORTED_MODULE_3__.EnvironmentInfoWidget.url(this.trial.title), function (data) { + var environment = _this3.d3node.select(".environment").html(""); + var fold = TrialInfoWidget.createFold(environment, "Environment"); + var filter = _environment_info__WEBPACK_IMPORTED_MODULE_3__.EnvironmentInfoWidget.createList(environment.append("div").classed("foldable show-toolbar", true), data.all, "1"); + TrialInfoWidget.createFilterFold(fold, filter); + }); + } + }, { + key: "loadFileAccess", + value: function loadFileAccess() { + var _this4 = this; + var sub = this.node.getElementsByClassName("file-accesses")[0]; + (0,_noworkflow_utils__WEBPACK_IMPORTED_MODULE_1__.json)("File Accesses", sub, _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__.FileAccessesInfoWidget.url(this.trial.title), function (data) { + var accesses = _this4.d3node.select(".file-accesses").html(""); + if (data.file_accesses.length > 0) { + var fold = TrialInfoWidget.createFold(accesses, "File Accesses"); + var filter = _file_accesses_info__WEBPACK_IMPORTED_MODULE_4__.FileAccessesInfoWidget.createList(accesses.append("div").classed("foldable show-toolbar", true), data.file_accesses, data.trial_path); + TrialInfoWidget.createFilterFold(fold, filter); + } + }); + } + }], [{ + key: "createNode", + value: function createNode(trial, annontationWidget) { + var node = document.createElement('div'); + var info = trial.info; + var d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_5__["default"])(node); + var content = d3node.append('div').classed('trial-info', true).append('div').classed('side-info', true); + var main = content.append('div').classed('main', true); + main.append("h1").text("Trial " + trial.display); + main.append("a").classed("hash", true).text(info.code_hash || "").attr('href', 'trials/' + trial.id + '/' + info.code_hash + '/' + info.script); // href for script + + var idAttr = main.append("span").classed("attr", true); + idAttr.append("span").classed("desc", true).text("Id: "); + idAttr.append("span").classed("id", true).text(trial.title); + var scriptAttr = main.append("span").classed("attr", true); + scriptAttr.append("span").classed("desc", true).text("Script: "); + scriptAttr.append("a").classed("script", true).text(info.script).attr('href', 'trials/' + trial.id + '/' + info.code_hash + '/' + info.script); // href for script + + var startAttr = main.append("span").classed("attr", true); + startAttr.append("span").classed("desc", true).text("Start: "); + startAttr.append("span").classed("start", true).text(info.str_start || ""); + var finishAttr = main.append("span").classed("attr", true); + finishAttr.append("span").classed("desc", true).text("Finish: "); + finishAttr.append("span").classed("finish", true).text(info.str_finish || ""); + var durationAttr = main.append("span").classed("attr", true); + durationAttr.append("span").classed("desc", true).text("Duration: "); + durationAttr.append("span").classed("duration", true).text(info.duration_text || ""); + if (info.command) { + var argumentsAttr = main.append("span").classed("attr", true); + argumentsAttr.append("span").classed("desc", true).text("Arguments: "); + argumentsAttr.append("span").classed("arguments", true).text(info.command); + } + content.append("div").classed("modules", true); + content.append("div").classed("environment", true); + content.append("div").classed("file-accesses", true); + var anntButton = content.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Manage Annotations"); + anntButton.on("click", function () { + annontationWidget.activeAnnotation(trial.title); + }); + return node; + } + }, { + key: "createFold", + value: function createFold(parent, title) { + var fold = parent.append("div").classed("fold", true); + var foldI = fold.append("i").classed("fa fa-minus", true); + var spanI = fold.append("span").text(title); + var click = function click() { + var visible = foldI.classed("fa-plus"); + foldI.classed("fa-plus", !visible); + foldI.classed("fa-minus", visible); + parent.select(".foldable").classed("show-toolbar", visible).classed("hide-toolbar", !visible); + return false; + }; + foldI.on("click", click); + spanI.on("click", click); + return fold; + } + }, { + key: "createFilterFold", + value: function createFilterFold(fold, filter) { + filter.filterdiv.classed("info-filter", true).classed("show-toolbar", false).classed("hide-toolbar", true); + var foldA = fold.append("a").attr("href", "#").attr("title", "Search").classed("show-all", true); + var foldAI = foldA.append("i").classed("fa fa-search-plus", true); + foldA.on("click", function () { + var visible = foldAI.classed("fa-search-plus"); + foldAI.classed("fa-search-plus", !visible); + foldAI.classed("fa-search-minus", visible); + filter.filterdiv.classed("show-toolbar", visible).classed("hide-toolbar", !visible); + return false; + }); + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/nowpanel.ts": +/*!*************************!*\ + !*** ./src/nowpanel.ts ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ NowVisPanel: () => (/* binding */ NowVisPanel), +/* harmony export */ findInLayout: () => (/* binding */ findInLayout) +/* harmony export */ }); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } + +function findInLayout(area, widget) { + if (area == null || area.type == 'tab-area') { + return null; + } + var splitconfig = area; + var result = null; + splitconfig.children.every(function (child, index) { + if (child.type == 'tab-area') { + var tabconfig = child; + var _iterator = _createForOfIteratorHelper(tabconfig.widgets), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var tabwidget = _step.value; + if (tabwidget == widget) { + result = { + area: area, + index: index + }; + return false; + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } else { + var temp = findInLayout(child, widget); + if (temp) { + result = temp; + return false; + } + } + return true; + }); + return result; +} +var NowVisPanel = /*#__PURE__*/function (_DockPanel) { + function NowVisPanel() { + _classCallCheck(this, NowVisPanel); + return _callSuper(this, NowVisPanel, arguments); + } + _inherits(NowVisPanel, _DockPanel); + return _createClass(NowVisPanel, [{ + key: "addMainWidget", + value: function addMainWidget(widget) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + if (options.ref) { + if (options.ref.nowVis != "main") { + console.log("Warning: options.ref is not 'main'"); + } + } else { + var _iterator2 = _createForOfIteratorHelper(this.widgets()), + _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var w = _step2.value; + var wnow = w; + if (wnow.nowVis == "main") { + options.ref = w; + } + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + widget.nowVis = "main"; + this.addWidget(widget, options); + } + }, { + key: "addGraphWidget", + value: function addGraphWidget(widget) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var operation = "none"; + if (options.ref) { + if (options.ref.nowVis != "graph") { + console.log("Warning: options.ref is not 'graph'"); + } + } else { + var _iterator3 = _createForOfIteratorHelper(this.widgets()), + _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var w = _step3.value; + var wnow = w; + if (wnow.nowVis == "main" && !options.ref) { + options.ref = w; + options.mode = "split-bottom"; + operation = "main"; + } else if (wnow.nowVis == "info" && operation != "graph") { + options.ref = w; + options.mode = "split-left"; + operation = "info"; + } else if (wnow.nowVis == "graph") { + options.ref = w; + options.mode = "tab-after"; + operation = "graph"; + } + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + ; + } + widget.nowVis = "graph"; + this.addWidget(widget, options); + if (operation == "main") { + var layout = this.saveLayout(); + var sublayout = findInLayout(layout.main, widget); + if (sublayout) { + var sizes = sublayout.area.sizes; + sizes[0] = 0.20; + sizes[1] = 0.80; + this.restoreLayout(layout); + } + } + if (operation == "info") { + var layout = this.saveLayout(); + var sublayout = findInLayout(layout.main, widget); + if (sublayout) { + var sizes = sublayout.area.sizes; + sizes[0] = 0.80; + sizes[1] = 0.20; + this.restoreLayout(layout); + } + } + } + }, { + key: "addInfoWidget", + value: function addInfoWidget(widget) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var operation = "none"; + if (options.ref) { + if (options.ref.nowVis != "info") { + console.log("Warning: options.ref is not 'info'"); + } + } else { + var _iterator4 = _createForOfIteratorHelper(this.widgets()), + _step4; + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { + var w = _step4.value; + var wnow = w; + if (wnow.nowVis == "main" && !options.ref) { + options.ref = w; + options.mode = "split-bottom"; + operation = "main"; + } else if (wnow.nowVis == "graph" && operation != "info") { + options.ref = w; + options.mode = "split-right"; + operation = "graph"; + } else if (wnow.nowVis == "info") { + options.ref = w; + options.mode = "tab-after"; + operation = "info"; + } + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + ; + } + widget.nowVis = "info"; + this.addWidget(widget, options); + if (operation == "main") { + var layout = this.saveLayout(); + var sublayout = findInLayout(layout.main, widget); + if (sublayout) { + var sizes = sublayout.area.sizes; + sizes[0] = 0.20; + sizes[1] = 0.80; + this.restoreLayout(layout); + } + } + if (operation == "graph") { + var layout = this.saveLayout(); + var sublayout = findInLayout(layout.main, widget); + if (sublayout) { + var sizes = sublayout.area.sizes; + sizes[0] = 0.80; + sizes[1] = 0.20; + this.restoreLayout(layout); + } + } + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.DockPanel); + +/***/ }), + +/***/ "./src/project_widget.ts": +/*!*******************************!*\ + !*** ./src/project_widget.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ProjectWidget: () => (/* binding */ ProjectWidget) +/* harmony export */ }); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var _style_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../style/bootstrap.min.css */ "./style/bootstrap.min.css"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + +var ProjectWidget = /*#__PURE__*/function (_Widget) { + function ProjectWidget(experiments) { + var _this; + _classCallCheck(this, ProjectWidget); + _this = _callSuper(this, ProjectWidget, [{ + node: ProjectWidget.createNode() + }]); + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(_this.node); + _this.experiments = experiments; + _this.setNode(); + _this.addClass('content'); + _this.title.label = "Experiment Selection"; + _this.title.closable = false; + _this.title.caption = "Experiment"; + return _this; + } + _inherits(ProjectWidget, _Widget); + return _createClass(ProjectWidget, [{ + key: "addExpRow", + value: function addExpRow(exp) { + var link = window.location.href + "experiments/" + exp.id; + var item = this.expTBody.append("tr"); + item.append("th").attr("scope", "row").text(exp.id); + item.append("td").text(exp.name); + item.append("td").text(exp.description); + item.append("td").append("a").attr("href", link).text(link); + var cloneCommandText = "now pull --url " + link; + item.append("td").text(cloneCommandText + " ").append("i").classed("fa fa-clone", true).attr("aria-hidden", "true").attr("id", exp.id + "CopyIcon").on("click", function () { + navigator.clipboard.writeText(cloneCommandText).then(function () { + var divCopied = (0,d3_selection__WEBPACK_IMPORTED_MODULE_2__["default"])(document.getElementById(exp.id + "CopyIcon")).append("small").classed("alert alert-secondary p-0", true).text("Copied!"); + setTimeout(function () { + divCopied.remove(); + }, 3000); + }); + }); + } + }, { + key: "addFormInput", + value: function addFormInput(form, fieldId, fieldLabel, fieldType) { + var grp = form.append("div").classed("form-group row", true); + grp.append("label").classed("col-sm-2 col-form-label", true).attr("for", fieldId).text(fieldLabel + ": "); + var divIn = grp.append("div").classed("col-sm-10", true); + var inp = divIn.append(fieldType); + inp.classed("form-control", true).attr("id", fieldId); + return inp; + } + }, { + key: "addFeedBackinfo", + value: function addFeedBackinfo(baseNode, cls, txt, desc) { + var _thiss = this; + var feedbackNode = baseNode.append("div").classed("alert", true).classed(cls, true).classed("alert-dismissible", true).classed("fade", true).classed("show", true); + feedbackNode.append("strong").text(txt); + feedbackNode.append("span").text(" " + desc).append("button").attr("type", "button").classed("close", true).attr("data-dismiss", "alert").text("x").on("click", function () { + _thiss.hideNode(feedbackNode); + }); + return feedbackNode; + } + }, { + key: "hideNode", + value: function hideNode(node) { + node.classed("d-none", true); + } + }, { + key: "showNode", + value: function showNode(node) { + node.classed("d-none", false); + } + }, { + key: "setNode", + value: function setNode() { + var content = this.d3node.append('div').classed('config-content', true); + var projectsDiv = content.append("div"); + projectsDiv.append("h2").text("Experiments:"); + this.errorFeedback = this.addFeedBackinfo(projectsDiv, "alert-danger", "Error!", "A problem has been occurred while submitting your data."); + this.successFeedback = this.addFeedBackinfo(projectsDiv, "alert-success", "Success!", "Experiment created successfully"); + this.hideNode(this.errorFeedback); + this.hideNode(this.successFeedback); + var inputsDiv = projectsDiv.append("div"); + var nameIn = this.addFormInput(inputsDiv, "experimentNameInput", "Name", "input"); + var descIn = this.addFormInput(inputsDiv, "experimentDescInput", "Description", "textarea"); + var confimButton = inputsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Confirm"); + var addExpButton = projectsDiv.append("button").classed("btn btn-primary", true).attr("type", "submit").text("Add Experiment"); + var table = projectsDiv.append("table").classed("table", true); + var header = table.append("thead").append("tr"); + header.append("th").attr("scope", "col").text("id"); + header.append("th").attr("scope", "col").text("name"); + header.append("th").attr("scope", "col").text("description"); + header.append("th").attr("scope", "col").text("url"); + header.append("th").attr("scope", "col").html(" clone ").append("i").classed("fa fa-question-circle-o", true).attr("aria-hidden", "true").attr("title", "Run this command on the command line, in the desired folder, to clone the experiment."); + this.expTBody = table.append("tbody"); + inputsDiv.classed("d-none", true); + confimButton.on("click", function () { + _thiss.hideNode(_thiss.errorFeedback); + _thiss.hideNode(_thiss.successFeedback); + var newExp = { + name: nameIn.property("value"), + description: descIn.property("value") + }; + fetch("experiments", { + method: 'POST', + // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(newExp) // body data type must match "Content-Type" header + }).then(function (response) { + if (response.status == 201) { + response.json().then(function (obj) { + newExp.id = obj.id; + _thiss.addExpRow(newExp); + _thiss.hideNode(inputsDiv); + _thiss.showNode(addExpButton); + _thiss.showNode(_thiss.successFeedback); + }); + } else { + _thiss.showNode(_thiss.errorFeedback); + } + }); + }); + var _thiss = this; + addExpButton.on("click", function () { + _thiss.showNode(inputsDiv); + _thiss.hideNode(addExpButton); + }); + this.experiments.forEach(function (obj) { + _thiss.addExpRow(obj); + }); + } + }], [{ + key: "createNode", + value: function createNode() { + var node = document.createElement('div'); + return node; + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); + +/***/ }), + +/***/ "./src/query_widget.ts": +/*!*****************************!*\ + !*** ./src/query_widget.ts ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DatabaseTabWidget: () => (/* binding */ DatabaseTabWidget), +/* harmony export */ QueryResultWidget: () => (/* binding */ QueryResultWidget), +/* harmony export */ QueryWidget: () => (/* binding */ QueryWidget) +/* harmony export */ }); +/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); +/* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); +/* harmony import */ var _database_widget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./database_widget */ "./src/database_widget.ts"); +/* harmony import */ var ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ace-builds/src-noconflict/ace */ "../../node_modules/ace-builds/src-noconflict/ace.js"); +/* harmony import */ var ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ace-builds/src-noconflict/theme-textmate */ "../../node_modules/ace-builds/src-noconflict/theme-textmate.js"); +/* harmony import */ var ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ace-builds/src-noconflict/mode-sql */ "../../node_modules/ace-builds/src-noconflict/mode-sql.js"); +/* harmony import */ var ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ace-builds/src-noconflict/ext-language_tools */ "../../node_modules/ace-builds/src-noconflict/ext-language_tools.js"); +/* harmony import */ var ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5__); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } + + + + + + + +var DatabaseTabWidget = /*#__PURE__*/function (_Widget) { + function DatabaseTabWidget() { + _classCallCheck(this, DatabaseTabWidget); + return _callSuper(this, DatabaseTabWidget, arguments); + } + _inherits(DatabaseTabWidget, _Widget); + return _createClass(DatabaseTabWidget); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); +var QueryResultWidget = /*#__PURE__*/function (_DatabaseTabWidget) { + function QueryResultWidget(query, columns, rows, count) { + var _this; + _classCallCheck(this, QueryResultWidget); + _this = _callSuper(this, QueryResultWidget, [{ + node: QueryResultWidget.createNode() + }]); + _defineProperty(_this, "currentPage", 1); + _this.title.label = "Query Result (".concat(count, ")"); + _this.title.caption = "Query Result (".concat(count, ")"); + _this.title.closable = true; + _this.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__["default"])(_this.node); + _this.query = query; + _this.columns = columns; + _this.rows = rows; + _this.renderTable(); + return _this; + } + _inherits(QueryResultWidget, _DatabaseTabWidget); + return _createClass(QueryResultWidget, [{ + key: "renderTable", + value: function renderTable() { + var _this2 = this; + this.d3node.selectAll('*').remove(); + this.d3node.append('a').classed("toollink", true).attr('class', 'btn btn-secondary-outline').attr('title', 'Download CSV').style('margin-bottom', '1em').on('click', function () { + var csv = ''; + csv += _this2.columns.map(function (col) { + return "\"".concat(col.replace(/"/g, '""'), "\""); + }).join(',') + '\n'; + var _iterator = _createForOfIteratorHelper(_this2.rows), + _step; + try { + var _loop = function _loop() { + var row = _step.value; + csv += _this2.columns.map(function (col) { + return "\"".concat(String(row[col] !== undefined ? row[col] : '').replace(/"/g, '""'), "\""); + }).join(',') + '\n'; + }; + for (_iterator.s(); !(_step = _iterator.n()).done;) { + _loop(); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + var blob = new Blob([csv], { + type: 'text/csv' + }); + var url = URL.createObjectURL(blob); + var a = document.createElement('a'); + a.href = url; + a.download = 'query_result.csv'; + document.body.appendChild(a); + a.click(); + setTimeout(function () { + document.body.removeChild(a); + URL.revokeObjectURL(url); + }, 100); + }).append("i").classed("fa fa-download", true); + if (!this.columns.length || !this.rows.length) { + this.d3node.append('div').text('No results.'); + return; + } + var paginationContainer = this.d3node.append('div').style('display', 'flex').style('justify-content', 'space-between').style('align-items', 'center').style('margin-bottom', '1rem').style('padding', '0.5rem').style('background-color', '#f8f9fa').style('border-radius', '4px'); + var startIndex = (this.currentPage - 1) * 50 + 1; + var endIndex = Math.min(this.currentPage * 50, this.rows.length); + paginationContainer.append('div').style('font-size', '0.9em').style('color', '#666').text("Showing ".concat(startIndex, "-").concat(endIndex, " of ").concat(this.rows.length, " rows")); + var paginationButtons = paginationContainer.append('div').style('display', 'flex').style('gap', '0.25rem'); + var totalPages = Math.ceil(this.rows.length / 50); + if (totalPages > 1) { + paginationButtons.append('button').attr('class', 'btn btn-sm btn-outline-secondary').on('click', function () { + _this2.currentPage = 1; + _this2.renderTable(); + }).text('<<'); + paginationButtons.append('button').attr('class', 'btn btn-sm btn-outline-secondary').on('click', function () { + _this2.currentPage--; + _this2.renderTable(); + }).text('<'); + paginationButtons.append('button').attr('class', 'btn btn-sm btn-primary').text(this.currentPage.toString()); + paginationButtons.append('button').attr('class', 'btn btn-sm btn-outline-secondary').on('click', function () { + _this2.currentPage++; + _this2.renderTable(); + }).text('>'); + paginationButtons.append('button').attr('class', 'btn btn-sm btn-outline-secondary').on('click', function () { + _this2.currentPage = totalPages; + _this2.renderTable(); + }).text('>>'); + } + var tableContainer = this.d3node.append('div').style('max-height', '400px').style('overflow-y', 'auto').style('border', '1px solid #dee2e6').style('border-radius', '4px'); + var table = tableContainer.append('table').attr('class', 'table table-bordered table-sm'); + table.style('border-collapse', 'separate').style('border-spacing', '0'); + var thead = table.append('thead').append('tr'); + thead.style('position', 'sticky').style('top', '0').style('background-color', 'white').style('z-index', '1'); + this.columns.forEach(function (col) { + return thead.append('th').text(col); + }); + var tbody = table.append('tbody'); + var startRow = (this.currentPage - 1) * 50; + var endRow = Math.min(startRow + 50, this.rows.length); + var currentPageRows = this.rows.slice(startRow, endRow); + currentPageRows.forEach(function (row) { + var tr = tbody.append('tr'); + _this2.columns.forEach(function (col) { + return tr.append('td').text(row[col] !== undefined ? row[col] : ''); + }); + }); + this.d3node.append('div').attr('class', 'text-muted').style('margin-top', '1rem').style('margin-bottom', '0.5em').html("Query: ".concat(this.query, "")); + } + }], [{ + key: "createNode", + value: function createNode() { + var node = document.createElement('div'); + node.style.padding = '1rem'; + node.style.height = '100%'; + node.style.overflowY = 'auto'; + return node; + } + }]); +}(DatabaseTabWidget); +var QueryWidget = /*#__PURE__*/function (_Widget2) { + function QueryWidget(panel, tableNames, columnNames, initialQuery) { + var _this3; + _classCallCheck(this, QueryWidget); + _this3 = _callSuper(this, QueryWidget); + // Ace editor instance + _defineProperty(_this3, "tableNames", []); + _defineProperty(_this3, "columnNames", []); + _this3.panel = panel; + _this3.title.label = 'SQL Query'; + _this3.title.caption = 'SQL Query Interface'; + _this3.title.closable = true; + _this3.d3node = (0,d3_selection__WEBPACK_IMPORTED_MODULE_6__["default"])(_this3.node); + _this3.tableNames = tableNames || []; + _this3.columnNames = columnNames || []; + _this3.editorId = "query-input-".concat(++QueryWidget.count); + _this3.initialQuery = initialQuery || ''; + _this3.createQueryInterface(); + return _this3; + } + _inherits(QueryWidget, _Widget2); + return _createClass(QueryWidget, [{ + key: "createQueryInterface", + value: function () { + var _createQueryInterface = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { + var _this4 = this; + var container, headerRow, queryContainer; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + container = this.d3node.append('div').style('display', 'flex').style('flex-direction', 'column').style('height', '100%').style('padding', '1rem').style('gap', '1rem').style('overflow-y', 'auto').style('overflow-x', 'hidden'); + headerRow = container.append('div').style('display', 'flex').style('justify-content', 'space-between').style('align-items', 'center').style('margin-bottom', '1rem').style('flex-shrink', '0'); + headerRow.append('h4').text('SQL Query Interface').style('margin', '0').style('color', '#333'); + headerRow.append('button').attr('id', 'execute-query-btn').attr("title", "Execute query. Use Ctrl+Enter for quick execution.").classed('btn btn-primary', true).on('click', function () { + return _this4.executeQuery(); + }).html(' Execute Query'); + queryContainer = container.append('div').style('display', 'flex').style('flex-direction', 'column').style('min-height', '50%').style('flex', '1 1 0'); + queryContainer.append('label').attr('for', this.editorId).text('Enter your SQL query:').style('font-weight', 'bold').style('margin-bottom', '0.5rem'); + queryContainer.append('div').attr('id', this.editorId).style('width', '100%').style('min-height', '140px').style('max-height', '30vh').style('border', '1px solid #ccc').style('border-radius', '4px').style('font-size', '1em').style('flex', '1'); + setTimeout(function () { + // @ts-ignore + _this4.aceEditor = window.ace.edit(_this4.editorId); + _this4.aceEditor.setTheme('ace/theme/textmate'); + _this4.aceEditor.session.setMode('ace/mode/sql'); + _this4.aceEditor.setOptions({ + fontSize: '1em', + minLines: 6, + showPrintMargin: false, + enableBasicAutocompletion: true, + enableLiveAutocompletion: true + }); + _this4.aceEditor.commands.addCommand({ + name: 'executeQuery', + bindKey: { + win: 'Ctrl-Enter', + mac: 'Command-Enter' + }, + exec: function exec() { + return _this4.executeQuery(); + } + }); + if (window.ace && window.ace.require) { + var langTools = window.ace.require('ace/ext/language_tools'); + var tableCompleter = { + getCompletions: function getCompletions(editor, session, pos, prefix, callback) { + if (!prefix) { + callback(null, []); + return; + } + var completions = _this4.tableNames.map(function (name) { + return { + caption: name, + value: name, + meta: 'table' + }; + }); + _this4.columnNames.forEach(function (name) { + completions.push({ + caption: name, + value: name, + meta: 'column' + }); + }); + callback(null, completions); + } + }; + langTools.addCompleter(tableCompleter); + } + if (_this4.initialQuery) { + _this4.aceEditor.setValue(_this4.initialQuery); + _this4.aceEditor.clearSelection(); + _this4.aceEditor.focus(); + } + }, 0); + queryContainer.append('div').attr('id', "query-status-".concat(this.editorId)).style('min-height', '60px').style('padding', '0.5rem').style('border', '1px solid #e0e0e0').style('border-radius', '4px').style('background-color', '#f9f9f9').style('font-family', 'monospace').style('font-size', '0.9em').style('overflow-y', 'auto').style('flex-shrink', '0').style('margin-top', '1rem').text('Ready to execute queries. Use Ctrl+Enter for quick execution.'); + case 9: + case "end": + return _context.stop(); + } + }, _callee, this); + })); + function createQueryInterface() { + return _createQueryInterface.apply(this, arguments); + } + return createQueryInterface; + }() + }, { + key: "executeQuery", + value: function () { + var _executeQuery = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { + var statusArea, sql, response, data; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + // const queryInput = this.node.querySelector('#query-input') as HTMLTextAreaElement; + statusArea = this.node.querySelector("#query-status-".concat(this.editorId)); + sql = this.aceEditor ? this.aceEditor.getValue().trim() : ''; + if (statusArea) { + _context2.next = 4; + break; + } + return _context2.abrupt("return"); + case 4: + statusArea.innerHTML = ''; + statusArea.style.color = '#333'; + if (sql) { + _context2.next = 10; + break; + } + statusArea.textContent = 'Please enter a SQL query.'; + statusArea.style.color = '#d32f2f'; + return _context2.abrupt("return"); + case 10: + statusArea.textContent = 'Executing query...'; + statusArea.style.color = '#1976d2'; + _context2.prev = 12; + _context2.next = 15; + return fetch('/db/query', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + query: sql + }) + }); + case 15: + response = _context2.sent; + _context2.next = 18; + return response.json(); + case 18: + data = _context2.sent; + if (!data.error) { + _context2.next = 24; + break; + } + statusArea.textContent = "Error: ".concat(data.error); + statusArea.style.color = '#d32f2f'; + _context2.next = 33; + break; + case 24: + if (!(data.rows && data.columns)) { + _context2.next = 31; + break; + } + statusArea.textContent = "Query executed successfully! Found ".concat(data.rows.length, " rows with ").concat(data.columns.length, " columns."); + statusArea.style.color = '#388e3c'; + _context2.next = 29; + return this.displayQueryResults(sql, data.columns, data.rows); + case 29: + _context2.next = 33; + break; + case 31: + statusArea.textContent = 'Query executed successfully. No results returned.'; + statusArea.style.color = '#388e3c'; + case 33: + _context2.next = 39; + break; + case 35: + _context2.prev = 35; + _context2.t0 = _context2["catch"](12); + statusArea.textContent = "Error executing query: ".concat(_context2.t0.message); + statusArea.style.color = '#d32f2f'; + case 39: + case "end": + return _context2.stop(); + } + }, _callee2, this, [[12, 35]]); + })); + function executeQuery() { + return _executeQuery.apply(this, arguments); + } + return executeQuery; + }() + }, { + key: "displayQueryResults", + value: function () { + var _displayQueryResults = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(sql, columns, rows) { + var resultWidget, refWidget, _iterator2, _step2, w; + return _regeneratorRuntime().wrap(function _callee3$(_context3) { + while (1) switch (_context3.prev = _context3.next) { + case 0: + resultWidget = new QueryResultWidget(sql, columns, rows, ++QueryWidget.count); + refWidget = null; + if (this.panel.widgets) { + _iterator2 = _createForOfIteratorHelper(this.panel.widgets()); + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + w = _step2.value; + if (w instanceof _database_widget__WEBPACK_IMPORTED_MODULE_1__.TableInfoWidget || w instanceof QueryResultWidget) { + refWidget = w; + } + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + if (refWidget) { + this.panel.addInfoWidget(resultWidget, { + ref: refWidget, + mode: 'tab-after' + }); + } else { + this.panel.addInfoWidget(resultWidget, { + ref: this, + mode: 'split-bottom' + }); + } + this.panel.activateWidget(resultWidget); + case 5: + case "end": + return _context3.stop(); + } + }, _callee3, this); + })); + function displayQueryResults(_x, _x2, _x3) { + return _displayQueryResults.apply(this, arguments); + } + return displayQueryResults; + }() + }, { + key: "onResize", + value: function onResize(msg) { + var editorElement = this.node.querySelector("#".concat(this.editorId)); + if (!editorElement) return; + var rect = this.node.getBoundingClientRect(); + var availableHeight = rect.height - 200; + var minHeight = 250; + var maxHeight = Math.max(minHeight, availableHeight * 0.6); + editorElement.style.height = "".concat(maxHeight, "px"); + if (this.aceEditor) { + this.aceEditor.resize(); + } + } + }]); +}(_lumino_widgets__WEBPACK_IMPORTED_MODULE_0__.Widget); +_defineProperty(QueryWidget, "count", 0); + +/***/ }), + +/***/ "../../node_modules/base64-js/index.js": +/*!*********************************************!*\ + !*** ../../node_modules/base64-js/index.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function getLens (b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + var i + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} + + +/***/ }), + +/***/ "../../node_modules/bn.js/lib/bn.js": +/*!******************************************!*\ + !*** ../../node_modules/bn.js/lib/bn.js ***! + \******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(/*! buffer */ "?2e65").Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); + } + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [number & 0x3ffffff]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [0]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this._strip(); + }; + + function parseHex4Bits (string, index) { + var c = string.charCodeAt(index); + // '0' - '9' + if (c >= 48 && c <= 57) { + return c - 48; + // 'A' - 'F' + } else if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + } else { + assert(false, 'Invalid character in ' + string); + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; + } + } + } + + this._strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var b = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + b = c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + b = c - 17 + 0xa; + + // '0' - '9' + } else { + b = c; + } + assert(c >= 0 && b < mul, 'Invalid character'); + r += b; + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [0]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this._strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + function move (dest, src) { + dest.words = src.words; + dest.length = src.length; + dest.negative = src.negative; + dest.red = src.red; + } + + BN.prototype._move = function _move (dest) { + move(dest, this); + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype._strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + // Check Symbol.for because not everywhere where Symbol defined + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility + if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') { + try { + BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect; + } catch (e) { + BN.prototype.inspect = inspect; + } + } else { + BN.prototype.inspect = inspect; + } + + function inspect () { + return (this.red ? ''; + } + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modrn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16, 2); + }; + + if (Buffer) { + BN.prototype.toBuffer = function toBuffer (endian, length) { + return this.toArrayLike(Buffer, endian, length); + }; + } + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + var allocate = function allocate (ArrayType, size) { + if (ArrayType.allocUnsafe) { + return ArrayType.allocUnsafe(size); + } + return new ArrayType(size); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + this._strip(); + + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + var res = allocate(ArrayType, reqLength); + var postfix = endian === 'le' ? 'LE' : 'BE'; + this['_toArrayLike' + postfix](res, byteLength); + return res; + }; + + BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) { + var position = 0; + var carry = 0; + + for (var i = 0, shift = 0; i < this.length; i++) { + var word = (this.words[i] << shift) | carry; + + res[position++] = word & 0xff; + if (position < res.length) { + res[position++] = (word >> 8) & 0xff; + } + if (position < res.length) { + res[position++] = (word >> 16) & 0xff; + } + + if (shift === 6) { + if (position < res.length) { + res[position++] = (word >> 24) & 0xff; + } + carry = 0; + shift = 0; + } else { + carry = word >>> 24; + shift += 2; + } + } + + if (position < res.length) { + res[position++] = carry; + + while (position < res.length) { + res[position++] = 0; + } + } + }; + + BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) { + var position = res.length - 1; + var carry = 0; + + for (var i = 0, shift = 0; i < this.length; i++) { + var word = (this.words[i] << shift) | carry; + + res[position--] = word & 0xff; + if (position >= 0) { + res[position--] = (word >> 8) & 0xff; + } + if (position >= 0) { + res[position--] = (word >> 16) & 0xff; + } + + if (shift === 6) { + if (position >= 0) { + res[position--] = (word >> 24) & 0xff; + } + carry = 0; + shift = 0; + } else { + carry = word >>> 24; + shift += 2; + } + } + + if (position >= 0) { + res[position--] = carry; + + while (position >= 0) { + res[position--] = 0; + } + } + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] >>> wbit) & 0x01; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this._strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this._strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this._strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this._strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this._strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this._strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out._strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out._strip(); + } + + function jumboMulTo (self, num, out) { + // Temporary disable, see https://github.com/indutny/bn.js/issues/211 + // var fftm = new FFTM(); + // return fftm.mulp(self, num, out); + return bigMulTo(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out._strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return isNegNum ? this.ineg() : this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this._strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this._strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this._strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) <= num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this._strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this._strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this._strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q._strip(); + } + a._strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modrn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modrn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modrn = function modrn (num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return isNegNum ? -acc : acc; + }; + + // WARNING: DEPRECATED + BN.prototype.modn = function modn (num) { + return this.modrn(num); + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + var isNegNum = num < 0; + if (isNegNum) num = -num; + + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + this._strip(); + return isNegNum ? this.ineg() : this; + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); + } + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); + } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); + } + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); + } + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this._strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is a BN v4 instance + r.strip(); + } else { + // r is a BN v5 instance + r._strip(); + } + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + + move(a, a.umod(this.m)._forceRed(this)); + return a; + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); + + +/***/ }), + +/***/ "../../node_modules/brorand/index.js": +/*!*******************************************!*\ + !*** ../../node_modules/brorand/index.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var r; + +module.exports = function rand(len) { + if (!r) + r = new Rand(null); + + return r.generate(len); +}; + +function Rand(rand) { + this.rand = rand; +} +module.exports.Rand = Rand; + +Rand.prototype.generate = function generate(len) { + return this._rand(len); +}; + +// Emulate crypto API using randy +Rand.prototype._rand = function _rand(n) { + if (this.rand.getBytes) + return this.rand.getBytes(n); + + var res = new Uint8Array(n); + for (var i = 0; i < res.length; i++) + res[i] = this.rand.getByte(); + return res; +}; + +if (typeof self === 'object') { + if (self.crypto && self.crypto.getRandomValues) { + // Modern browsers + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.crypto.getRandomValues(arr); + return arr; + }; + } else if (self.msCrypto && self.msCrypto.getRandomValues) { + // IE + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.msCrypto.getRandomValues(arr); + return arr; + }; + + // Safari's WebWorkers do not have `crypto` + } else if (typeof window === 'object') { + // Old junk + Rand.prototype._rand = function() { + throw new Error('Not implemented yet'); + }; + } +} else { + // Node.js or Web worker with no crypto support + try { + var crypto = __webpack_require__(/*! crypto */ "?0749"); + if (typeof crypto.randomBytes !== 'function') + throw new Error('Not supported'); + + Rand.prototype._rand = function _rand(n) { + return crypto.randomBytes(n); + }; + } catch (e) { + } +} + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/aes.js": +/*!************************************************!*\ + !*** ../../node_modules/browserify-aes/aes.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// based on the aes implimentation in triple sec +// https://github.com/keybase/triplesec +// which is in turn based on the one from crypto-js +// https://code.google.com/p/crypto-js/ + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +function asUInt32Array (buf) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) + + var len = (buf.length / 4) | 0 + var out = new Array(len) + + for (var i = 0; i < len; i++) { + out[i] = buf.readUInt32BE(i * 4) + } + + return out +} + +function scrubVec (v) { + for (var i = 0; i < v.length; v++) { + v[i] = 0 + } +} + +function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { + var SUB_MIX0 = SUB_MIX[0] + var SUB_MIX1 = SUB_MIX[1] + var SUB_MIX2 = SUB_MIX[2] + var SUB_MIX3 = SUB_MIX[3] + + var s0 = M[0] ^ keySchedule[0] + var s1 = M[1] ^ keySchedule[1] + var s2 = M[2] ^ keySchedule[2] + var s3 = M[3] ^ keySchedule[3] + var t0, t1, t2, t3 + var ksRow = 4 + + for (var round = 1; round < nRounds; round++) { + t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] + t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] + t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] + t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] + s0 = t0 + s1 = t1 + s2 = t2 + s3 = t3 + } + + t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] + t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] + t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] + t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] + t0 = t0 >>> 0 + t1 = t1 >>> 0 + t2 = t2 >>> 0 + t3 = t3 >>> 0 + + return [t0, t1, t2, t3] +} + +// AES constants +var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] +var G = (function () { + // Compute double table + var d = new Array(256) + for (var j = 0; j < 256; j++) { + if (j < 128) { + d[j] = j << 1 + } else { + d[j] = (j << 1) ^ 0x11b + } + } + + var SBOX = [] + var INV_SBOX = [] + var SUB_MIX = [[], [], [], []] + var INV_SUB_MIX = [[], [], [], []] + + // Walk GF(2^8) + var x = 0 + var xi = 0 + for (var i = 0; i < 256; ++i) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 + SBOX[x] = sx + INV_SBOX[sx] = x + + // Compute multiplication + var x2 = d[x] + var x4 = d[x2] + var x8 = d[x4] + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100) + SUB_MIX[0][x] = (t << 24) | (t >>> 8) + SUB_MIX[1][x] = (t << 16) | (t >>> 16) + SUB_MIX[2][x] = (t << 8) | (t >>> 24) + SUB_MIX[3][x] = t + + // Compute inv sub bytes, inv mix columns tables + t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) + INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) + INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) + INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) + INV_SUB_MIX[3][sx] = t + + if (x === 0) { + x = xi = 1 + } else { + x = x2 ^ d[d[d[x8 ^ x2]]] + xi ^= d[d[xi]] + } + } + + return { + SBOX: SBOX, + INV_SBOX: INV_SBOX, + SUB_MIX: SUB_MIX, + INV_SUB_MIX: INV_SUB_MIX + } +})() + +function AES (key) { + this._key = asUInt32Array(key) + this._reset() +} + +AES.blockSize = 4 * 4 +AES.keySize = 256 / 8 +AES.prototype.blockSize = AES.blockSize +AES.prototype.keySize = AES.keySize +AES.prototype._reset = function () { + var keyWords = this._key + var keySize = keyWords.length + var nRounds = keySize + 6 + var ksRows = (nRounds + 1) * 4 + + var keySchedule = [] + for (var k = 0; k < keySize; k++) { + keySchedule[k] = keyWords[k] + } + + for (k = keySize; k < ksRows; k++) { + var t = keySchedule[k - 1] + + if (k % keySize === 0) { + t = (t << 8) | (t >>> 24) + t = + (G.SBOX[t >>> 24] << 24) | + (G.SBOX[(t >>> 16) & 0xff] << 16) | + (G.SBOX[(t >>> 8) & 0xff] << 8) | + (G.SBOX[t & 0xff]) + + t ^= RCON[(k / keySize) | 0] << 24 + } else if (keySize > 6 && k % keySize === 4) { + t = + (G.SBOX[t >>> 24] << 24) | + (G.SBOX[(t >>> 16) & 0xff] << 16) | + (G.SBOX[(t >>> 8) & 0xff] << 8) | + (G.SBOX[t & 0xff]) + } + + keySchedule[k] = keySchedule[k - keySize] ^ t + } + + var invKeySchedule = [] + for (var ik = 0; ik < ksRows; ik++) { + var ksR = ksRows - ik + var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] + + if (ik < 4 || ksR <= 4) { + invKeySchedule[ik] = tt + } else { + invKeySchedule[ik] = + G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ + G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ + G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ + G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] + } + } + + this._nRounds = nRounds + this._keySchedule = keySchedule + this._invKeySchedule = invKeySchedule +} + +AES.prototype.encryptBlockRaw = function (M) { + M = asUInt32Array(M) + return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) +} + +AES.prototype.encryptBlock = function (M) { + var out = this.encryptBlockRaw(M) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[1], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[3], 12) + return buf +} + +AES.prototype.decryptBlock = function (M) { + M = asUInt32Array(M) + + // swap + var m1 = M[1] + M[1] = M[3] + M[3] = m1 + + var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[3], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[1], 12) + return buf +} + +AES.prototype.scrub = function () { + scrubVec(this._keySchedule) + scrubVec(this._invKeySchedule) + scrubVec(this._key) +} + +module.exports.AES = AES + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/authCipher.js": +/*!*******************************************************!*\ + !*** ../../node_modules/browserify-aes/authCipher.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var aes = __webpack_require__(/*! ./aes */ "../../node_modules/browserify-aes/aes.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var Transform = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var GHASH = __webpack_require__(/*! ./ghash */ "../../node_modules/browserify-aes/ghash.js") +var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") +var incr32 = __webpack_require__(/*! ./incr32 */ "../../node_modules/browserify-aes/incr32.js") + +function xorTest (a, b) { + var out = 0 + if (a.length !== b.length) out++ + + var len = Math.min(a.length, b.length) + for (var i = 0; i < len; ++i) { + out += (a[i] ^ b[i]) + } + + return out +} + +function calcIv (self, iv, ck) { + if (iv.length === 12) { + self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) + return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) + } + var ghash = new GHASH(ck) + var len = iv.length + var toPad = len % 16 + ghash.update(iv) + if (toPad) { + toPad = 16 - toPad + ghash.update(Buffer.alloc(toPad, 0)) + } + ghash.update(Buffer.alloc(8, 0)) + var ivBits = len * 8 + var tail = Buffer.alloc(8) + tail.writeUIntBE(ivBits, 0, 8) + ghash.update(tail) + self._finID = ghash.state + var out = Buffer.from(self._finID) + incr32(out) + return out +} +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + var h = Buffer.alloc(4, 0) + + this._cipher = new aes.AES(key) + var ck = this._cipher.encryptBlock(h) + this._ghash = new GHASH(ck) + iv = calcIv(this, iv, ck) + + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._alen = 0 + this._len = 0 + this._mode = mode + + this._authTag = null + this._called = false +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + if (!this._called && this._alen) { + var rump = 16 - (this._alen % 16) + if (rump < 16) { + rump = Buffer.alloc(rump, 0) + this._ghash.update(rump) + } + } + + this._called = true + var out = this._mode.encrypt(this, chunk) + if (this._decrypt) { + this._ghash.update(chunk) + } else { + this._ghash.update(out) + } + this._len += chunk.length + return out +} + +StreamCipher.prototype._final = function () { + if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') + + var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) + if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') + + this._authTag = tag + this._cipher.scrub() +} + +StreamCipher.prototype.getAuthTag = function getAuthTag () { + if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') + + return this._authTag +} + +StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { + if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') + + this._authTag = tag +} + +StreamCipher.prototype.setAAD = function setAAD (buf) { + if (this._called) throw new Error('Attempting to set AAD in unsupported state') + + this._ghash.update(buf) + this._alen += buf.length +} + +module.exports = StreamCipher + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/browser.js": +/*!****************************************************!*\ + !*** ../../node_modules/browserify-aes/browser.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var ciphers = __webpack_require__(/*! ./encrypter */ "../../node_modules/browserify-aes/encrypter.js") +var deciphers = __webpack_require__(/*! ./decrypter */ "../../node_modules/browserify-aes/decrypter.js") +var modes = __webpack_require__(/*! ./modes/list.json */ "../../node_modules/browserify-aes/modes/list.json") + +function getCiphers () { + return Object.keys(modes) +} + +exports.createCipher = exports.Cipher = ciphers.createCipher +exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv +exports.createDecipher = exports.Decipher = deciphers.createDecipher +exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/decrypter.js": +/*!******************************************************!*\ + !*** ../../node_modules/browserify-aes/decrypter.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var AuthCipher = __webpack_require__(/*! ./authCipher */ "../../node_modules/browserify-aes/authCipher.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var MODES = __webpack_require__(/*! ./modes */ "../../node_modules/browserify-aes/modes/index.js") +var StreamCipher = __webpack_require__(/*! ./streamCipher */ "../../node_modules/browserify-aes/streamCipher.js") +var Transform = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") +var aes = __webpack_require__(/*! ./aes */ "../../node_modules/browserify-aes/aes.js") +var ebtk = __webpack_require__(/*! evp_bytestokey */ "../../node_modules/evp_bytestokey/index.js") +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") + +function Decipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._last = void 0 + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Decipher, Transform) + +Decipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + while ((chunk = this._cache.get(this._autopadding))) { + thing = this._mode.decrypt(this, chunk) + out.push(thing) + } + return Buffer.concat(out) +} + +Decipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + return unpad(this._mode.decrypt(this, chunk)) + } else if (chunk) { + throw new Error('data not multiple of block length') + } +} + +Decipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function (autoPadding) { + var out + if (autoPadding) { + if (this.cache.length > 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } else { + if (this.cache.length >= 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } + + return null +} + +Splitter.prototype.flush = function () { + if (this.cache.length) return this.cache +} + +function unpad (last) { + var padded = last[15] + if (padded < 1 || padded > 16) { + throw new Error('unable to decrypt data') + } + var i = -1 + while (++i < padded) { + if (last[(i + (16 - padded))] !== padded) { + throw new Error('unable to decrypt data') + } + } + if (padded === 16) return + + return last.slice(0, 16 - padded) +} + +function createDecipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv, true) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv, true) + } + + return new Decipher(config.module, password, iv) +} + +function createDecipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createDecipheriv(suite, keys.key, keys.iv) +} + +exports.createDecipher = createDecipher +exports.createDecipheriv = createDecipheriv + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/encrypter.js": +/*!******************************************************!*\ + !*** ../../node_modules/browserify-aes/encrypter.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var MODES = __webpack_require__(/*! ./modes */ "../../node_modules/browserify-aes/modes/index.js") +var AuthCipher = __webpack_require__(/*! ./authCipher */ "../../node_modules/browserify-aes/authCipher.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var StreamCipher = __webpack_require__(/*! ./streamCipher */ "../../node_modules/browserify-aes/streamCipher.js") +var Transform = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") +var aes = __webpack_require__(/*! ./aes */ "../../node_modules/browserify-aes/aes.js") +var ebtk = __webpack_require__(/*! evp_bytestokey */ "../../node_modules/evp_bytestokey/index.js") +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") + +function Cipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Cipher, Transform) + +Cipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + + while ((chunk = this._cache.get())) { + thing = this._mode.encrypt(this, chunk) + out.push(thing) + } + + return Buffer.concat(out) +} + +var PADDING = Buffer.alloc(16, 0x10) + +Cipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + chunk = this._mode.encrypt(this, chunk) + this._cipher.scrub() + return chunk + } + + if (!chunk.equals(PADDING)) { + this._cipher.scrub() + throw new Error('data not multiple of block length') + } +} + +Cipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function () { + if (this.cache.length > 15) { + var out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + return null +} + +Splitter.prototype.flush = function () { + var len = 16 - this.cache.length + var padBuff = Buffer.allocUnsafe(len) + + var i = -1 + while (++i < len) { + padBuff.writeUInt8(len, i) + } + + return Buffer.concat([this.cache, padBuff]) +} + +function createCipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv) + } + + return new Cipher(config.module, password, iv) +} + +function createCipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createCipheriv(suite, keys.key, keys.iv) +} + +exports.createCipheriv = createCipheriv +exports.createCipher = createCipher + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/ghash.js": +/*!**************************************************!*\ + !*** ../../node_modules/browserify-aes/ghash.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var ZEROES = Buffer.alloc(16, 0) + +function toArray (buf) { + return [ + buf.readUInt32BE(0), + buf.readUInt32BE(4), + buf.readUInt32BE(8), + buf.readUInt32BE(12) + ] +} + +function fromArray (out) { + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0] >>> 0, 0) + buf.writeUInt32BE(out[1] >>> 0, 4) + buf.writeUInt32BE(out[2] >>> 0, 8) + buf.writeUInt32BE(out[3] >>> 0, 12) + return buf +} + +function GHASH (key) { + this.h = key + this.state = Buffer.alloc(16, 0) + this.cache = Buffer.allocUnsafe(0) +} + +// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html +// by Juho Vähä-Herttua +GHASH.prototype.ghash = function (block) { + var i = -1 + while (++i < block.length) { + this.state[i] ^= block[i] + } + this._multiply() +} + +GHASH.prototype._multiply = function () { + var Vi = toArray(this.h) + var Zi = [0, 0, 0, 0] + var j, xi, lsbVi + var i = -1 + while (++i < 128) { + xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 + if (xi) { + // Z_i+1 = Z_i ^ V_i + Zi[0] ^= Vi[0] + Zi[1] ^= Vi[1] + Zi[2] ^= Vi[2] + Zi[3] ^= Vi[3] + } + + // Store the value of LSB(V_i) + lsbVi = (Vi[3] & 1) !== 0 + + // V_i+1 = V_i >> 1 + for (j = 3; j > 0; j--) { + Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) + } + Vi[0] = Vi[0] >>> 1 + + // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R + if (lsbVi) { + Vi[0] = Vi[0] ^ (0xe1 << 24) + } + } + this.state = fromArray(Zi) +} + +GHASH.prototype.update = function (buf) { + this.cache = Buffer.concat([this.cache, buf]) + var chunk + while (this.cache.length >= 16) { + chunk = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + this.ghash(chunk) + } +} + +GHASH.prototype.final = function (abl, bl) { + if (this.cache.length) { + this.ghash(Buffer.concat([this.cache, ZEROES], 16)) + } + + this.ghash(fromArray([0, abl, 0, bl])) + return this.state +} + +module.exports = GHASH + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/incr32.js": +/*!***************************************************!*\ + !*** ../../node_modules/browserify-aes/incr32.js ***! + \***************************************************/ +/***/ ((module) => { + +function incr32 (iv) { + var len = iv.length + var item + while (len--) { + item = iv.readUInt8(len) + if (item === 255) { + iv.writeUInt8(0, len) + } else { + item++ + iv.writeUInt8(item, len) + break + } + } +} +module.exports = incr32 + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/modes/cbc.js": +/*!******************************************************!*\ + !*** ../../node_modules/browserify-aes/modes/cbc.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") + +exports.encrypt = function (self, block) { + var data = xor(block, self._prev) + + self._prev = self._cipher.encryptBlock(data) + return self._prev +} + +exports.decrypt = function (self, block) { + var pad = self._prev + + self._prev = block + var out = self._cipher.decryptBlock(block) + + return xor(out, pad) +} + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/modes/cfb.js": +/*!******************************************************!*\ + !*** ../../node_modules/browserify-aes/modes/cfb.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") + +function encryptStart (self, data, decrypt) { + var len = data.length + var out = xor(data, self._cache) + self._cache = self._cache.slice(len) + self._prev = Buffer.concat([self._prev, decrypt ? data : out]) + return out +} + +exports.encrypt = function (self, data, decrypt) { + var out = Buffer.allocUnsafe(0) + var len + + while (data.length) { + if (self._cache.length === 0) { + self._cache = self._cipher.encryptBlock(self._prev) + self._prev = Buffer.allocUnsafe(0) + } + + if (self._cache.length <= data.length) { + len = self._cache.length + out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) + data = data.slice(len) + } else { + out = Buffer.concat([out, encryptStart(self, data, decrypt)]) + break + } + } + + return out +} + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/modes/cfb1.js": +/*!*******************************************************!*\ + !*** ../../node_modules/browserify-aes/modes/cfb1.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +function encryptByte (self, byteParam, decrypt) { + var pad + var i = -1 + var len = 8 + var out = 0 + var bit, value + while (++i < len) { + pad = self._cipher.encryptBlock(self._prev) + bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 + value = pad[0] ^ bit + out += ((value & 0x80) >> (i % 8)) + self._prev = shiftIn(self._prev, decrypt ? bit : value) + } + return out +} + +function shiftIn (buffer, value) { + var len = buffer.length + var i = -1 + var out = Buffer.allocUnsafe(buffer.length) + buffer = Buffer.concat([buffer, Buffer.from([value])]) + + while (++i < len) { + out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) + } + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/modes/cfb8.js": +/*!*******************************************************!*\ + !*** ../../node_modules/browserify-aes/modes/cfb8.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +function encryptByte (self, byteParam, decrypt) { + var pad = self._cipher.encryptBlock(self._prev) + var out = pad[0] ^ byteParam + + self._prev = Buffer.concat([ + self._prev.slice(1), + Buffer.from([decrypt ? byteParam : out]) + ]) + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/modes/ctr.js": +/*!******************************************************!*\ + !*** ../../node_modules/browserify-aes/modes/ctr.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var incr32 = __webpack_require__(/*! ../incr32 */ "../../node_modules/browserify-aes/incr32.js") + +function getBlock (self) { + var out = self._cipher.encryptBlockRaw(self._prev) + incr32(self._prev) + return out +} + +var blockSize = 16 +exports.encrypt = function (self, chunk) { + var chunkNum = Math.ceil(chunk.length / blockSize) + var start = self._cache.length + self._cache = Buffer.concat([ + self._cache, + Buffer.allocUnsafe(chunkNum * blockSize) + ]) + for (var i = 0; i < chunkNum; i++) { + var out = getBlock(self) + var offset = start + i * blockSize + self._cache.writeUInt32BE(out[0], offset + 0) + self._cache.writeUInt32BE(out[1], offset + 4) + self._cache.writeUInt32BE(out[2], offset + 8) + self._cache.writeUInt32BE(out[3], offset + 12) + } + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/modes/ecb.js": +/*!******************************************************!*\ + !*** ../../node_modules/browserify-aes/modes/ecb.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +exports.encrypt = function (self, block) { + return self._cipher.encryptBlock(block) +} + +exports.decrypt = function (self, block) { + return self._cipher.decryptBlock(block) +} + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/modes/index.js": +/*!********************************************************!*\ + !*** ../../node_modules/browserify-aes/modes/index.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var modeModules = { + ECB: __webpack_require__(/*! ./ecb */ "../../node_modules/browserify-aes/modes/ecb.js"), + CBC: __webpack_require__(/*! ./cbc */ "../../node_modules/browserify-aes/modes/cbc.js"), + CFB: __webpack_require__(/*! ./cfb */ "../../node_modules/browserify-aes/modes/cfb.js"), + CFB8: __webpack_require__(/*! ./cfb8 */ "../../node_modules/browserify-aes/modes/cfb8.js"), + CFB1: __webpack_require__(/*! ./cfb1 */ "../../node_modules/browserify-aes/modes/cfb1.js"), + OFB: __webpack_require__(/*! ./ofb */ "../../node_modules/browserify-aes/modes/ofb.js"), + CTR: __webpack_require__(/*! ./ctr */ "../../node_modules/browserify-aes/modes/ctr.js"), + GCM: __webpack_require__(/*! ./ctr */ "../../node_modules/browserify-aes/modes/ctr.js") +} + +var modes = __webpack_require__(/*! ./list.json */ "../../node_modules/browserify-aes/modes/list.json") + +for (var key in modes) { + modes[key].module = modeModules[modes[key].mode] +} + +module.exports = modes + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/modes/ofb.js": +/*!******************************************************!*\ + !*** ../../node_modules/browserify-aes/modes/ofb.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var xor = __webpack_require__(/*! buffer-xor */ "../../node_modules/buffer-xor/index.js") + +function getBlock (self) { + self._prev = self._cipher.encryptBlock(self._prev) + return self._prev +} + +exports.encrypt = function (self, chunk) { + while (self._cache.length < chunk.length) { + self._cache = Buffer.concat([self._cache, getBlock(self)]) + } + + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + + +/***/ }), + +/***/ "../../node_modules/browserify-aes/streamCipher.js": +/*!*********************************************************!*\ + !*** ../../node_modules/browserify-aes/streamCipher.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var aes = __webpack_require__(/*! ./aes */ "../../node_modules/browserify-aes/aes.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var Transform = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") + +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._mode = mode +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + return this._mode.encrypt(this, chunk, this._decrypt) +} + +StreamCipher.prototype._final = function () { + this._cipher.scrub() +} + +module.exports = StreamCipher + + +/***/ }), + +/***/ "../../node_modules/browserify-cipher/browser.js": +/*!*******************************************************!*\ + !*** ../../node_modules/browserify-cipher/browser.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var DES = __webpack_require__(/*! browserify-des */ "../../node_modules/browserify-des/index.js") +var aes = __webpack_require__(/*! browserify-aes/browser */ "../../node_modules/browserify-aes/browser.js") +var aesModes = __webpack_require__(/*! browserify-aes/modes */ "../../node_modules/browserify-aes/modes/index.js") +var desModes = __webpack_require__(/*! browserify-des/modes */ "../../node_modules/browserify-des/modes.js") +var ebtk = __webpack_require__(/*! evp_bytestokey */ "../../node_modules/evp_bytestokey/index.js") + +function createCipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createCipheriv(suite, keys.key, keys.iv) +} + +function createDecipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createDecipheriv(suite, keys.key, keys.iv) +} + +function createCipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) + + throw new TypeError('invalid suite type') +} + +function createDecipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) + + throw new TypeError('invalid suite type') +} + +function getCiphers () { + return Object.keys(desModes).concat(aes.getCiphers()) +} + +exports.createCipher = exports.Cipher = createCipher +exports.createCipheriv = exports.Cipheriv = createCipheriv +exports.createDecipher = exports.Decipher = createDecipher +exports.createDecipheriv = exports.Decipheriv = createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + + +/***/ }), + +/***/ "../../node_modules/browserify-des/index.js": +/*!**************************************************!*\ + !*** ../../node_modules/browserify-des/index.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var CipherBase = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") +var des = __webpack_require__(/*! des.js */ "../../node_modules/des.js/lib/des.js") +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var modes = { + 'des-ede3-cbc': des.CBC.instantiate(des.EDE), + 'des-ede3': des.EDE, + 'des-ede-cbc': des.CBC.instantiate(des.EDE), + 'des-ede': des.EDE, + 'des-cbc': des.CBC.instantiate(des.DES), + 'des-ecb': des.DES +} +modes.des = modes['des-cbc'] +modes.des3 = modes['des-ede3-cbc'] +module.exports = DES +inherits(DES, CipherBase) +function DES (opts) { + CipherBase.call(this) + var modeName = opts.mode.toLowerCase() + var mode = modes[modeName] + var type + if (opts.decrypt) { + type = 'decrypt' + } else { + type = 'encrypt' + } + var key = opts.key + if (!Buffer.isBuffer(key)) { + key = Buffer.from(key) + } + if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { + key = Buffer.concat([key, key.slice(0, 8)]) + } + var iv = opts.iv + if (!Buffer.isBuffer(iv)) { + iv = Buffer.from(iv) + } + this._des = mode.create({ + key: key, + iv: iv, + type: type + }) +} +DES.prototype._update = function (data) { + return Buffer.from(this._des.update(data)) +} +DES.prototype._final = function () { + return Buffer.from(this._des.final()) +} + + +/***/ }), + +/***/ "../../node_modules/browserify-des/modes.js": +/*!**************************************************!*\ + !*** ../../node_modules/browserify-des/modes.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +exports["des-ecb"] = { + key: 8, + iv: 0 +} +exports["des-cbc"] = exports.des = { + key: 8, + iv: 8 +} +exports["des-ede3-cbc"] = exports.des3 = { + key: 24, + iv: 8 +} +exports["des-ede3"] = { + key: 24, + iv: 0 +} +exports["des-ede-cbc"] = { + key: 16, + iv: 8 +} +exports["des-ede"] = { + key: 16, + iv: 0 +} + + +/***/ }), + +/***/ "../../node_modules/browserify-rsa/index.js": +/*!**************************************************!*\ + !*** ../../node_modules/browserify-rsa/index.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/bn.js/lib/bn.js") +var randomBytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js") + +function blind (priv) { + var r = getr(priv) + var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed() + return { blinder: blinder, unblinder: r.invm(priv.modulus) } +} + +function getr (priv) { + var len = priv.modulus.byteLength() + var r + do { + r = new BN(randomBytes(len)) + } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) + return r +} + +function crt (msg, priv) { + var blinds = blind(priv) + var len = priv.modulus.byteLength() + var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus) + var c1 = blinded.toRed(BN.mont(priv.prime1)) + var c2 = blinded.toRed(BN.mont(priv.prime2)) + var qinv = priv.coefficient + var p = priv.prime1 + var q = priv.prime2 + var m1 = c1.redPow(priv.exponent1).fromRed() + var m2 = c2.redPow(priv.exponent2).fromRed() + var h = m1.isub(m2).imul(qinv).umod(p).imul(q) + return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len) +} +crt.getr = getr + +module.exports = crt + + +/***/ }), + +/***/ "../../node_modules/browserify-sign/algos.js": +/*!***************************************************!*\ + !*** ../../node_modules/browserify-sign/algos.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +module.exports = __webpack_require__(/*! ./browser/algorithms.json */ "../../node_modules/browserify-sign/browser/algorithms.json"); + + +/***/ }), + +/***/ "../../node_modules/browserify-sign/browser/index.js": +/*!***********************************************************!*\ + !*** ../../node_modules/browserify-sign/browser/index.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); +var createHash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js"); +var stream = __webpack_require__(/*! readable-stream */ "../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var sign = __webpack_require__(/*! ./sign */ "../../node_modules/browserify-sign/browser/sign.js"); +var verify = __webpack_require__(/*! ./verify */ "../../node_modules/browserify-sign/browser/verify.js"); + +var algorithms = __webpack_require__(/*! ./algorithms.json */ "../../node_modules/browserify-sign/browser/algorithms.json"); +Object.keys(algorithms).forEach(function (key) { + algorithms[key].id = Buffer.from(algorithms[key].id, 'hex'); + algorithms[key.toLowerCase()] = algorithms[key]; +}); + +function Sign(algorithm) { + stream.Writable.call(this); + + var data = algorithms[algorithm]; + if (!data) { throw new Error('Unknown message digest'); } + + this._hashType = data.hash; + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} +inherits(Sign, stream.Writable); + +Sign.prototype._write = function _write(data, _, done) { + this._hash.update(data); + done(); +}; + +Sign.prototype.update = function update(data, enc) { + this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data); + + return this; +}; + +Sign.prototype.sign = function signMethod(key, enc) { + this.end(); + var hash = this._hash.digest(); + var sig = sign(hash, key, this._hashType, this._signType, this._tag); + + return enc ? sig.toString(enc) : sig; +}; + +function Verify(algorithm) { + stream.Writable.call(this); + + var data = algorithms[algorithm]; + if (!data) { throw new Error('Unknown message digest'); } + + this._hash = createHash(data.hash); + this._tag = data.id; + this._signType = data.sign; +} +inherits(Verify, stream.Writable); + +Verify.prototype._write = function _write(data, _, done) { + this._hash.update(data); + done(); +}; + +Verify.prototype.update = function update(data, enc) { + this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data); + + return this; +}; + +Verify.prototype.verify = function verifyMethod(key, sig, enc) { + var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig; + + this.end(); + var hash = this._hash.digest(); + return verify(sigBuffer, hash, key, this._signType, this._tag); +}; + +function createSign(algorithm) { + return new Sign(algorithm); +} + +function createVerify(algorithm) { + return new Verify(algorithm); +} + +module.exports = { + Sign: createSign, + Verify: createVerify, + createSign: createSign, + createVerify: createVerify +}; + + +/***/ }), + +/***/ "../../node_modules/browserify-sign/browser/sign.js": +/*!**********************************************************!*\ + !*** ../../node_modules/browserify-sign/browser/sign.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); +var createHmac = __webpack_require__(/*! create-hmac */ "../../node_modules/create-hmac/browser.js"); +var crt = __webpack_require__(/*! browserify-rsa */ "../../node_modules/browserify-rsa/index.js"); +var EC = (__webpack_require__(/*! elliptic */ "../../node_modules/elliptic/lib/elliptic.js").ec); +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/bn.js/lib/bn.js"); +var parseKeys = __webpack_require__(/*! parse-asn1 */ "../../node_modules/parse-asn1/index.js"); +var curves = __webpack_require__(/*! ./curves.json */ "../../node_modules/browserify-sign/browser/curves.json"); + +var RSA_PKCS1_PADDING = 1; + +function sign(hash, key, hashType, signType, tag) { + var priv = parseKeys(key); + if (priv.curve) { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); } + return ecSign(hash, priv); + } else if (priv.type === 'dsa') { + if (signType !== 'dsa') { throw new Error('wrong private key type'); } + return dsaSign(hash, priv, hashType); + } + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); } + if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); } + + hash = Buffer.concat([tag, hash]); + var len = priv.modulus.byteLength(); + var pad = [0, 1]; + while (hash.length + pad.length + 1 < len) { pad.push(0xff); } + pad.push(0x00); + var i = -1; + while (++i < hash.length) { pad.push(hash[i]); } + + var out = crt(pad, priv); + return out; +} + +function ecSign(hash, priv) { + var curveId = curves[priv.curve.join('.')]; + if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); } + + var curve = new EC(curveId); + var key = curve.keyFromPrivate(priv.privateKey); + var out = key.sign(hash); + + return Buffer.from(out.toDER()); +} + +function dsaSign(hash, priv, algo) { + var x = priv.params.priv_key; + var p = priv.params.p; + var q = priv.params.q; + var g = priv.params.g; + var r = new BN(0); + var k; + var H = bits2int(hash, q).mod(q); + var s = false; + var kv = getKey(x, q, hash, algo); + while (s === false) { + k = makeKey(q, kv, algo); + r = makeR(g, k, p, q); + s = k.invm(q).imul(H.add(x.mul(r))).mod(q); + if (s.cmpn(0) === 0) { + s = false; + r = new BN(0); + } + } + return toDER(r, s); +} + +function toDER(r, s) { + r = r.toArray(); + s = s.toArray(); + + // Pad values + if (r[0] & 0x80) { r = [0].concat(r); } + if (s[0] & 0x80) { s = [0].concat(s); } + + var total = r.length + s.length + 4; + var res = [ + 0x30, total, 0x02, r.length + ]; + res = res.concat(r, [0x02, s.length], s); + return Buffer.from(res); +} + +function getKey(x, q, hash, algo) { + x = Buffer.from(x.toArray()); + if (x.length < q.byteLength()) { + var zeros = Buffer.alloc(q.byteLength() - x.length); + x = Buffer.concat([zeros, x]); + } + var hlen = hash.length; + var hbits = bits2octets(hash, q); + var v = Buffer.alloc(hlen); + v.fill(1); + var k = Buffer.alloc(hlen); + k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest(); + v = createHmac(algo, k).update(v).digest(); + return { k: k, v: v }; +} + +function bits2int(obits, q) { + var bits = new BN(obits); + var shift = (obits.length << 3) - q.bitLength(); + if (shift > 0) { bits.ishrn(shift); } + return bits; +} + +function bits2octets(bits, q) { + bits = bits2int(bits, q); + bits = bits.mod(q); + var out = Buffer.from(bits.toArray()); + if (out.length < q.byteLength()) { + var zeros = Buffer.alloc(q.byteLength() - out.length); + out = Buffer.concat([zeros, out]); + } + return out; +} + +function makeKey(q, kv, algo) { + var t; + var k; + + do { + t = Buffer.alloc(0); + + while (t.length * 8 < q.bitLength()) { + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + t = Buffer.concat([t, kv.v]); + } + + k = bits2int(t, q); + kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest(); + kv.v = createHmac(algo, kv.k).update(kv.v).digest(); + } while (k.cmp(q) !== -1); + + return k; +} + +function makeR(g, k, p, q) { + return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q); +} + +module.exports = sign; +module.exports.getKey = getKey; +module.exports.makeKey = makeKey; + + +/***/ }), + +/***/ "../../node_modules/browserify-sign/browser/verify.js": +/*!************************************************************!*\ + !*** ../../node_modules/browserify-sign/browser/verify.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/bn.js/lib/bn.js"); +var EC = (__webpack_require__(/*! elliptic */ "../../node_modules/elliptic/lib/elliptic.js").ec); +var parseKeys = __webpack_require__(/*! parse-asn1 */ "../../node_modules/parse-asn1/index.js"); +var curves = __webpack_require__(/*! ./curves.json */ "../../node_modules/browserify-sign/browser/curves.json"); + +function verify(sig, hash, key, signType, tag) { + var pub = parseKeys(key); + if (pub.type === 'ec') { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); } + return ecVerify(sig, hash, pub); + } else if (pub.type === 'dsa') { + if (signType !== 'dsa') { throw new Error('wrong public key type'); } + return dsaVerify(sig, hash, pub); + } + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); } + + hash = Buffer.concat([tag, hash]); + var len = pub.modulus.byteLength(); + var pad = [1]; + var padNum = 0; + while (hash.length + pad.length + 2 < len) { + pad.push(0xff); + padNum += 1; + } + pad.push(0x00); + var i = -1; + while (++i < hash.length) { + pad.push(hash[i]); + } + pad = Buffer.from(pad); + var red = BN.mont(pub.modulus); + sig = new BN(sig).toRed(red); + + sig = sig.redPow(new BN(pub.publicExponent)); + sig = Buffer.from(sig.fromRed().toArray()); + var out = padNum < 8 ? 1 : 0; + len = Math.min(sig.length, pad.length); + if (sig.length !== pad.length) { out = 1; } + + i = -1; + while (++i < len) { out |= sig[i] ^ pad[i]; } + return out === 0; +} + +function ecVerify(sig, hash, pub) { + var curveId = curves[pub.data.algorithm.curve.join('.')]; + if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); } + + var curve = new EC(curveId); + var pubkey = pub.data.subjectPrivateKey.data; + + return curve.verify(hash, sig, pubkey); +} + +function dsaVerify(sig, hash, pub) { + var p = pub.data.p; + var q = pub.data.q; + var g = pub.data.g; + var y = pub.data.pub_key; + var unpacked = parseKeys.signature.decode(sig, 'der'); + var s = unpacked.s; + var r = unpacked.r; + checkValue(s, q); + checkValue(r, q); + var montp = BN.mont(p); + var w = s.invm(q); + var v = g.toRed(montp) + .redPow(new BN(hash).mul(w).mod(q)) + .fromRed() + .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()) + .mod(p) + .mod(q); + return v.cmp(r) === 0; +} + +function checkValue(b, q) { + if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); } + if (b.cmp(q) >= 0) { throw new Error('invalid sig'); } +} + +module.exports = verify; + + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/isarray/index.js": +/*!************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/isarray/index.js ***! + \************************************************************************/ +/***/ ((module) => { + +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js": +/*!*********************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js ***! + \*********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + + + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "../../node_modules/process-nextick-args/index.js"); +/**/ + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +/**/ + +var Readable = __webpack_require__(/*! ./_stream_readable */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js"); +var Writable = __webpack_require__(/*! ./_stream_writable */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js"); + +util.inherits(Duplex, Readable); + +{ + // avoid scope creep, the keys array can then be collected + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + pna.nextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +Object.defineProperty(Duplex.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +Duplex.prototype._destroy = function (err, cb) { + this.push(null); + this.end(); + + pna.nextTick(cb, err); +}; + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js": +/*!**************************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js ***! + \**************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + + + +module.exports = PassThrough; + +var Transform = __webpack_require__(/*! ./_stream_transform */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js"); + +/**/ +var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js": +/*!***********************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js ***! + \***********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "../../node_modules/process-nextick-args/index.js"); +/**/ + +module.exports = Readable; + +/**/ +var isArray = __webpack_require__(/*! isarray */ "../../node_modules/browserify-sign/node_modules/isarray/index.js"); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = (__webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter); + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = __webpack_require__(/*! ./internal/streams/stream */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js"); +/**/ + +/**/ + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js").Buffer); +var OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +/**/ +var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +/**/ + +/**/ +var debugUtil = __webpack_require__(/*! util */ "?ec48"); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = __webpack_require__(/*! ./internal/streams/BufferList */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js"); +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js"); +var StringDecoder; + +util.inherits(Readable, Stream); + +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} + +function ReadableState(options, stream) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var readableHwm = options.readableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = (__webpack_require__(/*! string_decoder/ */ "../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js").StringDecoder); + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options) { + if (typeof options.read === 'function') this._read = options.read; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + + Stream.call(this); +} + +Object.defineProperty(Readable.prototype, 'destroyed', { + get: function () { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); + +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + this.push(null); + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; + +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (addToFront) { + if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); + } else if (state.ended) { + stream.emit('error', new Error('stream.push() after EOF')); + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + } + } + + return needMoreData(state); +} + +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} + +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = (__webpack_require__(/*! string_decoder/ */ "../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js").StringDecoder); + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + pna.nextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { hasUnpiped: false }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, { hasUnpiped: false }); + }return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this, unpipeInfo); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + pna.nextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + pna.nextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + + var state = this._readableState; + var paused = false; + + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + + _this.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return this; +}; + +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._readableState.highWaterMark; + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = Buffer.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + pna.nextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js": +/*!************************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js ***! + \************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + + + +module.exports = Transform; + +var Duplex = __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); + +/**/ +var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +/**/ + +util.inherits(Transform, Duplex); + +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + + cb(er); + + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} + +function prefinish() { + var _this = this; + + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this2.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js": +/*!***********************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js ***! + \***********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + + + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "../../node_modules/process-nextick-args/index.js"); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = Object.create(__webpack_require__(/*! core-util-is */ "../../node_modules/core-util-is/lib/util.js")); +util.inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +/**/ + +/**/ +var internalUtil = { + deprecate: __webpack_require__(/*! util-deprecate */ "../../node_modules/util-deprecate/browser.js") +}; +/**/ + +/**/ +var Stream = __webpack_require__(/*! ./internal/streams/stream */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js"); +/**/ + +/**/ + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js").Buffer); +var OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js"); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + pna.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} + +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + // reuse the free corkReq. + state.corkedRequestsFree.next = corkReq; +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); + +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js": +/*!**********************************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js ***! + \**********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js").Buffer); +var util = __webpack_require__(/*! util */ "?ff61"); + +function copyBuffer(src, target, offset) { + src.copy(target, offset); +} + +module.exports = function () { + function BufferList() { + _classCallCheck(this, BufferList); + + this.head = null; + this.tail = null; + this.length = 0; + } + + BufferList.prototype.push = function push(v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + }; + + BufferList.prototype.unshift = function unshift(v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + }; + + BufferList.prototype.shift = function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + }; + + BufferList.prototype.clear = function clear() { + this.head = this.tail = null; + this.length = 0; + }; + + BufferList.prototype.join = function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; + }; + + BufferList.prototype.concat = function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + }; + + return BufferList; +}(); + +if (util && util.inspect && util.inspect.custom) { + module.exports.prototype[util.inspect.custom] = function () { + var obj = util.inspect({ length: this.length }); + return this.constructor.name + ' ' + obj; + }; +} + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js": +/*!*******************************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js ***! + \*******************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +/**/ + +var pna = __webpack_require__(/*! process-nextick-args */ "../../node_modules/process-nextick-args/index.js"); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + pna.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, this, err); + } + } + + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + pna.nextTick(emitErrorNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, _this, err); + } + } else if (cb) { + cb(err); + } + }); + + return this; +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js": +/*!**************************************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js ***! + \**************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter; + + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js": +/*!*********************************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js ***! + \*********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js") +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js": +/*!*******************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js ***! + \*******************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +exports = module.exports = __webpack_require__(/*! ./lib/_stream_readable.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js"); +exports.Stream = exports; +exports.Readable = exports; +exports.Writable = __webpack_require__(/*! ./lib/_stream_writable.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js"); +exports.Duplex = __webpack_require__(/*! ./lib/_stream_duplex.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js"); +exports.Transform = __webpack_require__(/*! ./lib/_stream_transform.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js"); +exports.PassThrough = __webpack_require__(/*! ./lib/_stream_passthrough.js */ "../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js"); + + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js": +/*!********************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js ***! + \********************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +/**/ + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js").Buffer); +/**/ + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. If an invalid byte is detected, -2 is returned. +function utf8CheckByte(byte) { + if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; + return byte >> 6 === 0x02 ? -1 : -2; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; + } + return nb; + } + return 0; +} + +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } +} + +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} + +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} + +// For UTF-8, a replacement character is added when ending on a partial +// character. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; +} + +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } + } + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); +} + +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} + +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} + +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} + +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} + +/***/ }), + +/***/ "../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js": +/*!********************************************************************************************************!*\ + !*** ../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js ***! + \********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js") +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + + +/***/ }), + +/***/ "../../node_modules/buffer-xor/index.js": +/*!**********************************************!*\ + !*** ../../node_modules/buffer-xor/index.js ***! + \**********************************************/ +/***/ ((module) => { + +module.exports = function xor (a, b) { + var length = Math.min(a.length, b.length) + var buffer = new Buffer(length) + + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i] + } + + return buffer +} + + +/***/ }), + +/***/ "../../node_modules/buffer/index.js": +/*!******************************************!*\ + !*** ../../node_modules/buffer/index.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + + + +const base64 = __webpack_require__(/*! base64-js */ "../../node_modules/base64-js/index.js") +const ieee754 = __webpack_require__(/*! ieee754 */ "../../node_modules/ieee754/index.js") +const customInspectSymbol = + (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation + ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation + : null + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +const K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + const arr = new Uint8Array(1) + const proto = { foo: function () { return 42 } } + Object.setPrototypeOf(proto, Uint8Array.prototype) + Object.setPrototypeOf(arr, proto) + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + const buf = new Uint8Array(length) + Object.setPrototypeOf(buf, Buffer.prototype) + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayView(value) + } + + if (value == null) { + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof SharedArrayBuffer !== 'undefined' && + (isInstance(value, SharedArrayBuffer) || + (value && isInstance(value.buffer, SharedArrayBuffer)))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + const valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + const b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) +Object.setPrototypeOf(Buffer, Uint8Array) + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpreted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + const length = byteLength(string, encoding) | 0 + let buf = createBuffer(length) + + const actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + const length = array.length < 0 ? 0 : checked(array.length) | 0 + const buf = createBuffer(length) + for (let i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayView (arrayView) { + if (isInstance(arrayView, Uint8Array)) { + const copy = new Uint8Array(arrayView) + return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength) + } + return fromArrayLike(arrayView) +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + let buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(buf, Buffer.prototype) + + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + const len = checked(obj.length) | 0 + const buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + let x = a.length + let y = b.length + + for (let i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + let i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + const buffer = Buffer.allocUnsafe(length) + let pos = 0 + for (i = 0; i < list.length; ++i) { + let buf = list[i] + if (isInstance(buf, Uint8Array)) { + if (pos + buf.length > buffer.length) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) + buf.copy(buffer, pos) + } else { + Uint8Array.prototype.set.call( + buffer, + buf, + pos + ) + } + } else if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } else { + buf.copy(buffer, pos) + } + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + const len = string.length + const mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + let loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 } - }, { - name: "undo", - description: "Undo", - bindKey: bindKey("Ctrl-Z", "Command-Z"), - exec: function (editor) { editor.undo(); } - }, { - name: "redo", - description: "Redo", - bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), - exec: function (editor) { editor.redo(); } - }, { - name: "copylinesup", - description: "Copy lines up", - bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), - exec: function (editor) { editor.copyLinesUp(); }, - scrollIntoView: "cursor" - }, { - name: "movelinesup", - description: "Move lines up", - bindKey: bindKey("Alt-Up", "Option-Up"), - exec: function (editor) { editor.moveLinesUp(); }, - scrollIntoView: "cursor" - }, { - name: "copylinesdown", - description: "Copy lines down", - bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), - exec: function (editor) { editor.copyLinesDown(); }, - scrollIntoView: "cursor" - }, { - name: "movelinesdown", - description: "Move lines down", - bindKey: bindKey("Alt-Down", "Option-Down"), - exec: function (editor) { editor.moveLinesDown(); }, - scrollIntoView: "cursor" - }, { - name: "del", - description: "Delete", - bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), - exec: function (editor) { editor.remove("right"); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "backspace", - description: "Backspace", - bindKey: bindKey("Shift-Backspace|Backspace", "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"), - exec: function (editor) { editor.remove("left"); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "cut_or_delete", - description: "Cut or delete", - bindKey: bindKey("Shift-Delete", null), - exec: function (editor) { - if (editor.selection.isEmpty()) { - editor.remove("left"); - } - else { - return false; - } - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removetolinestart", - description: "Remove to line start", - bindKey: bindKey("Alt-Backspace", "Command-Backspace"), - exec: function (editor) { editor.removeToLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removetolineend", - description: "Remove to line end", - bindKey: bindKey("Alt-Delete", "Ctrl-K|Command-Delete"), - exec: function (editor) { editor.removeToLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removetolinestarthard", - description: "Remove to line start hard", - bindKey: bindKey("Ctrl-Shift-Backspace", null), - exec: function (editor) { - var range = editor.selection.getRange(); - range.start.column = 0; - editor.session.remove(range); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removetolineendhard", - description: "Remove to line end hard", - bindKey: bindKey("Ctrl-Shift-Delete", null), - exec: function (editor) { - var range = editor.selection.getRange(); - range.end.column = Number.MAX_VALUE; - editor.session.remove(range); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removewordleft", - description: "Remove word left", - bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), - exec: function (editor) { editor.removeWordLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removewordright", - description: "Remove word right", - bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), - exec: function (editor) { editor.removeWordRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "outdent", - description: "Outdent", - bindKey: bindKey("Shift-Tab", "Shift-Tab"), - exec: function (editor) { editor.blockOutdent(); }, - multiSelectAction: "forEach", - scrollIntoView: "selectionPart" - }, { - name: "indent", - description: "Indent", - bindKey: bindKey("Tab", "Tab"), - exec: function (editor) { editor.indent(); }, - multiSelectAction: "forEach", - scrollIntoView: "selectionPart" - }, { - name: "blockoutdent", - description: "Block outdent", - bindKey: bindKey("Ctrl-[", "Ctrl-["), - exec: function (editor) { editor.blockOutdent(); }, - multiSelectAction: "forEachLine", - scrollIntoView: "selectionPart" - }, { - name: "blockindent", - description: "Block indent", - bindKey: bindKey("Ctrl-]", "Ctrl-]"), - exec: function (editor) { editor.blockIndent(); }, - multiSelectAction: "forEachLine", - scrollIntoView: "selectionPart" - }, { - name: "insertstring", - description: "Insert string", - exec: function (editor, str) { editor.insert(str); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "inserttext", - description: "Insert text", - exec: function (editor, args) { - editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "splitline", - description: "Split line", - bindKey: bindKey(null, "Ctrl-O"), - exec: function (editor) { editor.splitLine(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "transposeletters", - description: "Transpose letters", - bindKey: bindKey("Alt-Shift-X", "Ctrl-T"), - exec: function (editor) { editor.transposeLetters(); }, - multiSelectAction: function (editor) { editor.transposeSelections(1); }, - scrollIntoView: "cursor" - }, { - name: "touppercase", - description: "To uppercase", - bindKey: bindKey("Ctrl-U", "Ctrl-U"), - exec: function (editor) { editor.toUpperCase(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "tolowercase", - description: "To lowercase", - bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), - exec: function (editor) { editor.toLowerCase(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "autoindent", - description: "Auto Indent", - bindKey: bindKey(null, null), - exec: function (editor) { editor.autoIndent(); }, - scrollIntoView: "animate" - }, { - name: "expandtoline", - description: "Expand to line", - bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"), - exec: function (editor) { - var range = editor.selection.getRange(); - range.start.column = range.end.column = 0; - range.end.row++; - editor.selection.setRange(range, false); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "openlink", - bindKey: bindKey("Ctrl+F3", "F3"), - exec: function (editor) { editor.openLink(); } - }, { - name: "joinlines", - description: "Join lines", - bindKey: bindKey(null, null), - exec: function (editor) { - var isBackwards = editor.selection.isBackwards(); - var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor(); - var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead(); - var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length; - var selectedText = editor.session.doc.getTextRange(editor.selection.getRange()); - var selectedCount = selectedText.replace(/\n\s*/, " ").length; - var insertLine = editor.session.doc.getLine(selectionStart.row); - for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) { - var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i))); - if (curLine.length !== 0) { - curLine = " " + curLine; - } - insertLine += curLine; - } - if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) { - insertLine += editor.session.doc.getNewLineCharacter(); - } - editor.clearSelection(); - editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine); - if (selectedCount > 0) { - editor.selection.moveCursorTo(selectionStart.row, selectionStart.column); - editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount); - } - else { - firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol; - editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol); - } - }, - multiSelectAction: "forEach", - readOnly: true - }, { - name: "invertSelection", - description: "Invert selection", - bindKey: bindKey(null, null), - exec: function (editor) { - var endRow = editor.session.doc.getLength() - 1; - var endCol = editor.session.doc.getLine(endRow).length; - var ranges = editor.selection.rangeList.ranges; - var newRanges = []; - if (ranges.length < 1) { - ranges = [editor.selection.getRange()]; - } - for (var i = 0; i < ranges.length; i++) { - if (i == (ranges.length - 1)) { - if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) { - newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol)); - } - } - if (i === 0) { - if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) { - newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column)); - } - } - else { - newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column)); - } - } - editor.exitMultiSelectMode(); - editor.clearSelection(); - for (var i = 0; i < newRanges.length; i++) { - editor.selection.addRange(newRanges[i], false); - } - }, - readOnly: true, - scrollIntoView: "none" - }, { - name: "addLineAfter", - description: "Add new line after the current line", - exec: function (editor) { - editor.selection.clearSelection(); - editor.navigateLineEnd(); - editor.insert("\n"); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "addLineBefore", - description: "Add new line before the current line", - exec: function (editor) { - editor.selection.clearSelection(); - var cursor = editor.getCursorPosition(); - editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE); - editor.insert("\n"); - if (cursor.row === 0) - editor.navigateUp(); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "openCommandPallete", - exec: function (editor) { - console.warn("This is an obsolete command. Please use `openCommandPalette` instead."); - editor.prompt({ $type: "commands" }); - }, - readOnly: true - }, { - name: "openCommandPalette", - description: "Open command palette", - bindKey: bindKey("F1", "F1"), - exec: function (editor) { - editor.prompt({ $type: "commands" }); - }, - readOnly: true - }, { - name: "modeSelect", - description: "Change language mode...", - bindKey: bindKey(null, null), - exec: function (editor) { - editor.prompt({ $type: "modes" }); - }, - readOnly: true - }]; -for (var i = 1; i < 9; i++) { - exports.commands.push({ - name: "foldToLevel" + i, - description: "Fold To Level " + i, - level: i, - exec: function (editor) { editor.session.foldToLevel(this.level); }, - scrollIntoView: "center", - readOnly: true - }); + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + let loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coercion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } } -}); +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true -ace.define("ace/keyboard/gutter_handler",["require","exports","module","ace/lib/keys","ace/mouse/default_gutter_handler"], function(require, exports, module){"use strict"; -var keys = require('../lib/keys'); -var GutterTooltip = require("../mouse/default_gutter_handler").GutterTooltip; -var GutterKeyboardHandler = /** @class */ (function () { - function GutterKeyboardHandler(editor) { - this.editor = editor; - this.gutterLayer = editor.renderer.$gutterLayer; - this.element = editor.renderer.$gutter; - this.lines = editor.renderer.$gutterLayer.$lines; - this.activeRowIndex = null; - this.activeLane = null; - this.annotationTooltip = new GutterTooltip(this.editor); - } - GutterKeyboardHandler.prototype.addListener = function () { - this.element.addEventListener("keydown", this.$onGutterKeyDown.bind(this)); - this.element.addEventListener("focusout", this.$blurGutter.bind(this)); - this.editor.on("mousewheel", this.$blurGutter.bind(this)); - }; - GutterKeyboardHandler.prototype.removeListener = function () { - this.element.removeEventListener("keydown", this.$onGutterKeyDown.bind(this)); - this.element.removeEventListener("focusout", this.$blurGutter.bind(this)); - this.editor.off("mousewheel", this.$blurGutter.bind(this)); - }; - GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) { - if (this.annotationTooltip.isOpen) { - e.preventDefault(); - if (e.keyCode === keys["escape"]) - this.annotationTooltip.hideTooltip(); - return; - } - if (e.target === this.element) { - if (e.keyCode != keys["enter"]) { - return; - } - e.preventDefault(); - var row = this.editor.getCursorPosition().row; - if (!this.editor.isRowVisible(row)) - this.editor.scrollToLine(row, true, true); - setTimeout( - function () { - var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row); - var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index); - var nearestAnnotationIndex = this.$findNearestAnnotation(index); - if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null) - return; - var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index); - if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) { - this.activeLane = "fold"; - this.activeRowIndex = nearestFoldLaneWidgetIndex; - if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) { - this.$focusCustomWidget(this.activeRowIndex); - return; - } - else { - this.$focusFoldWidget(this.activeRowIndex); - return; - } - } - else { - this.activeRowIndex = nearestAnnotationIndex; - this.activeLane = "annotation"; - this.$focusAnnotation(this.activeRowIndex); - return; - } - }.bind(this), 10); - return; - } - this.$handleGutterKeyboardInteraction(e); - setTimeout(function () { - this.editor._signal("gutterkeydown", new GutterKeyboardEvent(e, this)); - }.bind(this), 10); - }; - GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) { - if (e.keyCode === keys["tab"]) { - e.preventDefault(); - return; - } - if (e.keyCode === keys["escape"]) { - e.preventDefault(); - this.$blurGutter(); - this.element.focus(); - this.lane = null; - return; - } - if (e.keyCode === keys["up"]) { - e.preventDefault(); - switch (this.activeLane) { - case "fold": - this.$moveFoldWidgetUp(); - break; - case "annotation": - this.$moveAnnotationUp(); - break; - } - return; - } - if (e.keyCode === keys["down"]) { - e.preventDefault(); - switch (this.activeLane) { - case "fold": - this.$moveFoldWidgetDown(); - break; - case "annotation": - this.$moveAnnotationDown(); - break; - } - return; - } - if (e.keyCode === keys["left"]) { - e.preventDefault(); - this.$switchLane("annotation"); - return; - } - if (e.keyCode === keys["right"]) { - e.preventDefault(); - this.$switchLane("fold"); - return; - } - if (e.keyCode === keys["enter"] || e.keyCode === keys["space"]) { - e.preventDefault(); - switch (this.activeLane) { - case "fold": - var row = this.$rowIndexToRow(this.activeRowIndex); - var customWidget = this.editor.session.$gutterCustomWidgets[row]; - if (customWidget) { - if (customWidget.callbacks && customWidget.callbacks.onClick) { - customWidget.callbacks.onClick(e, row); - } - } - else if (this.gutterLayer.session.foldWidgets[row] === 'start') { - this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e); - setTimeout( - function () { - if (this.$rowIndexToRow(this.activeRowIndex) !== row) { - this.$blurFoldWidget(this.activeRowIndex); - this.activeRowIndex = this.$rowToRowIndex(row); - this.$focusFoldWidget(this.activeRowIndex); - } - }.bind(this), 10); - break; - } - else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') { - break; - } - return; - case "annotation": - var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2]; - var rect = gutterElement.getBoundingClientRect(); - var style = this.annotationTooltip.getElement().style; - style.left = rect.right + "px"; - style.top = rect.bottom + "px"; - this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex)); - break; - } - return; - } - }; - GutterKeyboardHandler.prototype.$blurGutter = function () { - if (this.activeRowIndex !== null) { - switch (this.activeLane) { - case "fold": - this.$blurFoldWidget(this.activeRowIndex); - this.$blurCustomWidget(this.activeRowIndex); - break; - case "annotation": - this.$blurAnnotation(this.activeRowIndex); - break; - } - } - if (this.annotationTooltip.isOpen) - this.annotationTooltip.hideTooltip(); - return; - }; - GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) { - var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); - var isIconVisible = this.$getFoldWidget(index).style.display !== "none"; - return isRowFullyVisible && isIconVisible; - }; - GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) { - var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); - var isIconVisible = !!this.$getCustomWidget(index); - return isRowFullyVisible && isIconVisible; - }; - GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) { - var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); - var isIconVisible = this.$getAnnotation(index).style.display !== "none"; - return isRowFullyVisible && isIconVisible; - }; - GutterKeyboardHandler.prototype.$getFoldWidget = function (index) { - var cell = this.lines.get(index); - var element = cell.element; - return element.childNodes[1]; - }; - GutterKeyboardHandler.prototype.$getCustomWidget = function (index) { - var cell = this.lines.get(index); - var element = cell.element; - return element.childNodes[3]; - }; - GutterKeyboardHandler.prototype.$getAnnotation = function (index) { - var cell = this.lines.get(index); - var element = cell.element; - return element.childNodes[2]; - }; - GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) { - if (this.$isCustomWidgetVisible(index)) - return index; - if (this.$isFoldWidgetVisible(index)) - return index; - var i = 0; - while (index - i > 0 || index + i < this.lines.getLength() - 1) { - i++; - if (index - i >= 0 && this.$isCustomWidgetVisible(index - i)) - return index - i; - if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i)) - return index + i; - if (index - i >= 0 && this.$isFoldWidgetVisible(index - i)) - return index - i; - if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i)) - return index + i; - } - return null; - }; - GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) { - if (this.$isAnnotationVisible(index)) - return index; - var i = 0; - while (index - i > 0 || index + i < this.lines.getLength() - 1) { - i++; - if (index - i >= 0 && this.$isAnnotationVisible(index - i)) - return index - i; - if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i)) - return index + i; - } - return null; - }; - GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) { - if (index == null) - return; - var foldWidget = this.$getFoldWidget(index); - foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName); - foldWidget.focus(); - }; - GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) { - if (index == null) - return; - var customWidget = this.$getCustomWidget(index); - if (customWidget) { - customWidget.classList.add(this.editor.renderer.keyboardFocusClassName); - customWidget.focus(); - } - }; - GutterKeyboardHandler.prototype.$focusAnnotation = function (index) { - if (index == null) - return; - var annotation = this.$getAnnotation(index); - annotation.classList.add(this.editor.renderer.keyboardFocusClassName); - annotation.focus(); - }; - GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) { - var foldWidget = this.$getFoldWidget(index); - foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName); - foldWidget.blur(); - }; - GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) { - var customWidget = this.$getCustomWidget(index); - if (customWidget) { - customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName); - customWidget.blur(); - } - }; - GutterKeyboardHandler.prototype.$blurAnnotation = function (index) { - var annotation = this.$getAnnotation(index); - annotation.classList.remove(this.editor.renderer.keyboardFocusClassName); - annotation.blur(); - }; - GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () { - var index = this.activeRowIndex; - while (index > 0) { - index--; - if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) { - this.$blurFoldWidget(this.activeRowIndex); - this.$blurCustomWidget(this.activeRowIndex); - this.activeRowIndex = index; - if (this.$isFoldWidgetVisible(index)) { - this.$focusFoldWidget(this.activeRowIndex); - } - else { - this.$focusCustomWidget(this.activeRowIndex); - } - return; - } - } - return; - }; - GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () { - var index = this.activeRowIndex; - while (index < this.lines.getLength() - 1) { - index++; - if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) { - this.$blurFoldWidget(this.activeRowIndex); - this.$blurCustomWidget(this.activeRowIndex); - this.activeRowIndex = index; - if (this.$isFoldWidgetVisible(index)) { - this.$focusFoldWidget(this.activeRowIndex); - } - else { - this.$focusCustomWidget(this.activeRowIndex); - } - return; - } - } - return; - }; - GutterKeyboardHandler.prototype.$moveAnnotationUp = function () { - var index = this.activeRowIndex; - while (index > 0) { - index--; - if (this.$isAnnotationVisible(index)) { - this.$blurAnnotation(this.activeRowIndex); - this.activeRowIndex = index; - this.$focusAnnotation(this.activeRowIndex); - return; - } - } - return; - }; - GutterKeyboardHandler.prototype.$moveAnnotationDown = function () { - var index = this.activeRowIndex; - while (index < this.lines.getLength() - 1) { - index++; - if (this.$isAnnotationVisible(index)) { - this.$blurAnnotation(this.activeRowIndex); - this.activeRowIndex = index; - this.$focusAnnotation(this.activeRowIndex); - return; - } - } - return; - }; - GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) { - if (num1 === null) - return num2; - if (num2 === null) - return num1; - return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2; - }; - GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) { - switch (desinationLane) { - case "annotation": - if (this.activeLane === "annotation") { - break; - } - var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex); - if (annotationIndex == null) { - break; - } - this.activeLane = "annotation"; - this.$blurFoldWidget(this.activeRowIndex); - this.$blurCustomWidget(this.activeRowIndex); - this.activeRowIndex = annotationIndex; - this.$focusAnnotation(this.activeRowIndex); - break; - case "fold": - if (this.activeLane === "fold") { - break; - } - var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex); - if (foldLaneWidgetIndex === null) { - break; - } - this.activeLane = "fold"; - this.$blurAnnotation(this.activeRowIndex); - this.activeRowIndex = foldLaneWidgetIndex; - if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) { - this.$focusCustomWidget(this.activeRowIndex); - } - else { - this.$focusFoldWidget(this.activeRowIndex); - } - break; - } - return; - }; - GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) { - var cell = this.lines.get(index); - if (cell) - return cell.row; - return null; - }; - GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) { - for (var i = 0; i < this.lines.getLength(); i++) { - var cell = this.lines.get(i); - if (cell.row == row) - return i; - } - return null; - }; - return GutterKeyboardHandler; -}()); -exports.GutterKeyboardHandler = GutterKeyboardHandler; -var GutterKeyboardEvent = /** @class */ (function () { - function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) { - this.gutterKeyboardHandler = gutterKeyboardHandler; - this.domEvent = domEvent; +function swap (b, n, m) { + const i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + const len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (let i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + const len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (let i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + const len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (let i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + const length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + let str = '' + const max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} +if (customInspectSymbol) { + Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + let x = thisEnd - thisStart + let y = end - start + const len = Math.min(x, y) + + const thisCopy = this.slice(thisStart, thisEnd) + const targetCopy = target.slice(start, end) + + for (let i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break } - GutterKeyboardEvent.prototype.getKey = function () { - return keys.keyCodeToString(this.domEvent.keyCode); - }; - GutterKeyboardEvent.prototype.getRow = function () { - return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex); - }; - GutterKeyboardEvent.prototype.isInAnnotationLane = function () { - return this.gutterKeyboardHandler.activeLane === "annotation"; - }; - GutterKeyboardEvent.prototype.isInFoldLane = function () { - return this.gutterKeyboardHandler.activeLane === "fold"; - }; - return GutterKeyboardEvent; -}()); -exports.GutterKeyboardEvent = GutterKeyboardEvent; + } -}); + if (x < y) return -1 + if (y < x) return 1 + return 0 +} -ace.define("ace/editor",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator","ace/keyboard/gutter_handler","ace/config","ace/clipboard","ace/lib/keys","ace/lib/event","ace/tooltip"], function(require, exports, module){"use strict"; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var lang = require("./lib/lang"); -var useragent = require("./lib/useragent"); -var TextInput = require("./keyboard/textinput").TextInput; -var MouseHandler = require("./mouse/mouse_handler").MouseHandler; -var FoldHandler = require("./mouse/fold_handler").FoldHandler; -var KeyBinding = require("./keyboard/keybinding").KeyBinding; -var EditSession = require("./edit_session").EditSession; -var Search = require("./search").Search; -var Range = require("./range").Range; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var CommandManager = require("./commands/command_manager").CommandManager; -var defaultCommands = require("./commands/default_commands").commands; -var config = require("./config"); -var TokenIterator = require("./token_iterator").TokenIterator; -var GutterKeyboardHandler = require("./keyboard/gutter_handler").GutterKeyboardHandler; -var nls = require("./config").nls; -var clipboard = require("./clipboard"); -var keys = require('./lib/keys'); -var event = require("./lib/event"); -var HoverTooltip = require("./tooltip").HoverTooltip; -var Editor = /** @class */ (function () { - function Editor(renderer, session, options) { - this.id = "editor" + (++Editor.$uid); this.session; - this.$toDestroy = []; - var container = renderer.getContainerElement(); - this.container = container; - this.renderer = renderer; - this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); - if (typeof document == "object") { - this.textInput = new TextInput(renderer.getTextAreaContainer(), this); - this.renderer.textarea = this.textInput.getElement(); - this.$mouseHandler = new MouseHandler(this); - new FoldHandler(this); - } - this.keyBinding = new KeyBinding(this); - this.$search = new Search().set({ - wrap: true - }); - this.$historyTracker = this.$historyTracker.bind(this); - this.commands.on("exec", this.$historyTracker); - this.$initOperationListeners(); - this._$emitInputEvent = lang.delayedCall(function () { - this._signal("input", {}); - if (this.session && !this.session.destroyed) - this.session.bgTokenizer.scheduleStart(); - }.bind(this)); - this.on("change", function (_, _self) { - _self._$emitInputEvent.schedule(31); - }); - this.setSession(session || options && options.session || new EditSession("")); - config.resetOptions(this); - if (options) - this.setOptions(options); - config._signal("editor", this); +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 } - Editor.prototype.$initOperationListeners = function () { - this.commands.on("exec", this.startOperation.bind(this), true); - this.commands.on("afterExec", this.endOperation.bind(this), true); - }; - Editor.prototype.startOperation = function (commandEvent) { - this.session.startOperation(commandEvent); - }; - Editor.prototype.endOperation = function (e) { - this.session.endOperation(e); - }; - Editor.prototype.onStartOperation = function (commandEvent) { - this.curOp = this.session.curOp; - this.curOp.scrollTop = this.renderer.scrollTop; - this.prevOp = this.session.prevOp; - if (!commandEvent) { - this.previousCommand = null; - } - }; - Editor.prototype.onEndOperation = function (e) { - if (this.curOp && this.session) { - if (e && e.returnValue === false) { - this.curOp = null; - return; - } - this._signal("beforeEndOperation"); - if (!this.curOp) - return; - var command = this.curOp.command; - var scrollIntoView = command && command.scrollIntoView; - if (scrollIntoView) { - switch (scrollIntoView) { - case "center-animate": - scrollIntoView = "animate"; - case "center": - this.renderer.scrollCursorIntoView(null, 0.5); - break; - case "animate": - case "cursor": - this.renderer.scrollCursorIntoView(); - break; - case "selectionPart": - var range = this.selection.getRange(); - var config = this.renderer.layerConfig; - if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { - this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); - } - break; - default: - break; - } - if (scrollIntoView == "animate") - this.renderer.animateScrolling(this.curOp.scrollTop); - } - this.$lastSel = this.session.selection.toJSON(); - this.prevOp = this.curOp; - this.curOp = null; - } - }; - Editor.prototype.$historyTracker = function (e) { - if (!this.$mergeUndoDeltas) - return; - var prev = this.prevOp; - var mergeableCommands = this.$mergeableCommands; - var shouldMerge = prev.command && (e.command.name == prev.command.name); - if (e.command.name == "insertstring") { - var text = e.args; - if (this.mergeNextCommand === undefined) - this.mergeNextCommand = true; - shouldMerge = shouldMerge - && this.mergeNextCommand // previous command allows to coalesce with - && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type - this.mergeNextCommand = true; - } - else { - shouldMerge = shouldMerge - && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable - } - if (this.$mergeUndoDeltas != "always" - && Date.now() - this.sequenceStartTime > 2000) { - shouldMerge = false; // the sequence is too long - } - if (shouldMerge) - this.session.mergeUndoDeltas = true; - else if (mergeableCommands.indexOf(e.command.name) !== -1) - this.sequenceStartTime = Date.now(); - }; - Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) { - if (keyboardHandler && typeof keyboardHandler === "string" && keyboardHandler != "ace") { - this.$keybindingId = keyboardHandler; - var _self = this; - config.loadModule(["keybinding", keyboardHandler], function (module) { - if (_self.$keybindingId == keyboardHandler) - _self.keyBinding.setKeyboardHandler(module && module.handler); - cb && cb(); - }); - } - else { - this.$keybindingId = null; - this.keyBinding.setKeyboardHandler(keyboardHandler); - cb && cb(); - } - }; - Editor.prototype.getKeyboardHandler = function () { - return this.keyBinding.getKeyboardHandler(); - }; - Editor.prototype.setSession = function (session) { - if (this.session == session) - return; - if (this.curOp) - this.endOperation(); - this.curOp = {}; - var oldSession = this.session; - if (oldSession) { - this.session.off("change", this.$onDocumentChange); - this.session.off("changeMode", this.$onChangeMode); - this.session.off("tokenizerUpdate", this.$onTokenizerUpdate); - this.session.off("changeTabSize", this.$onChangeTabSize); - this.session.off("changeWrapLimit", this.$onChangeWrapLimit); - this.session.off("changeWrapMode", this.$onChangeWrapMode); - this.session.off("changeFold", this.$onChangeFold); - this.session.off("changeFrontMarker", this.$onChangeFrontMarker); - this.session.off("changeBackMarker", this.$onChangeBackMarker); - this.session.off("changeBreakpoint", this.$onChangeBreakpoint); - this.session.off("changeAnnotation", this.$onChangeAnnotation); - this.session.off("changeOverwrite", this.$onCursorChange); - this.session.off("changeScrollTop", this.$onScrollTopChange); - this.session.off("changeScrollLeft", this.$onScrollLeftChange); - this.session.off("startOperation", this.$onStartOperation); - this.session.off("endOperation", this.$onEndOperation); - var selection = this.session.getSelection(); - selection.off("changeCursor", this.$onCursorChange); - selection.off("changeSelection", this.$onSelectionChange); - } - this.session = session; - if (session) { - this.$onDocumentChange = this.onDocumentChange.bind(this); - session.on("change", this.$onDocumentChange); - this.renderer.setSession(session); - this.$onChangeMode = this.onChangeMode.bind(this); - session.on("changeMode", this.$onChangeMode); - this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); - session.on("tokenizerUpdate", this.$onTokenizerUpdate); - this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); - session.on("changeTabSize", this.$onChangeTabSize); - this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); - session.on("changeWrapLimit", this.$onChangeWrapLimit); - this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); - session.on("changeWrapMode", this.$onChangeWrapMode); - this.$onChangeFold = this.onChangeFold.bind(this); - session.on("changeFold", this.$onChangeFold); - this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); - this.session.on("changeFrontMarker", this.$onChangeFrontMarker); - this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); - this.session.on("changeBackMarker", this.$onChangeBackMarker); - this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); - this.session.on("changeBreakpoint", this.$onChangeBreakpoint); - this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); - this.session.on("changeAnnotation", this.$onChangeAnnotation); - this.$onCursorChange = this.onCursorChange.bind(this); - this.session.on("changeOverwrite", this.$onCursorChange); - this.$onScrollTopChange = this.onScrollTopChange.bind(this); - this.session.on("changeScrollTop", this.$onScrollTopChange); - this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); - this.session.on("changeScrollLeft", this.$onScrollLeftChange); - this.selection = session.getSelection(); - this.selection.on("changeCursor", this.$onCursorChange); - this.$onSelectionChange = this.onSelectionChange.bind(this); - this.selection.on("changeSelection", this.$onSelectionChange); - this.$onStartOperation = this.onStartOperation.bind(this); - this.session.on("startOperation", this.$onStartOperation); - this.$onEndOperation = this.onEndOperation.bind(this); - this.session.on("endOperation", this.$onEndOperation); - this.onChangeMode(); - this.onCursorChange(); - this.onScrollTopChange(); - this.onScrollLeftChange(); - this.onSelectionChange(); - this.onChangeFrontMarker(); - this.onChangeBackMarker(); - this.onChangeBreakpoint(); - this.onChangeAnnotation(); - this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); - this.renderer.updateFull(); - } - else { - this.selection = null; - this.renderer.setSession(session); - } - this._signal("changeSession", { - session: session, - oldSession: oldSession - }); - this.curOp = null; - oldSession && oldSession._signal("changeEditor", { oldEditor: this }); - if (oldSession) - oldSession.$editor = null; - session && session._signal("changeEditor", { editor: this }); - if (session) - session.$editor = this; - if (session && !session.destroyed) - session.bgTokenizer.scheduleStart(); - }; - Editor.prototype.getSession = function () { - return this.session; - }; - Editor.prototype.setValue = function (val, cursorPos) { - this.session.doc.setValue(val); - if (!cursorPos) - this.selectAll(); - else if (cursorPos == 1) - this.navigateFileEnd(); - else if (cursorPos == -1) - this.navigateFileStart(); - return val; - }; - Editor.prototype.getValue = function () { - return this.session.getValue(); - }; - Editor.prototype.getSelection = function () { - return this.selection; - }; - Editor.prototype.resize = function (force) { - this.renderer.onResize(force); - }; - Editor.prototype.setTheme = function (theme, cb) { - this.renderer.setTheme(theme, cb); - }; - Editor.prototype.getTheme = function () { - return this.renderer.getTheme(); - }; - Editor.prototype.setStyle = function (style, incluude) { - this.renderer.setStyle(style, incluude); - }; - Editor.prototype.unsetStyle = function (style) { - this.renderer.unsetStyle(style); - }; - Editor.prototype.getFontSize = function () { - return this.getOption("fontSize") || - dom.computedStyle(this.container).fontSize; - }; - Editor.prototype.setFontSize = function (size) { - this.setOption("fontSize", size); - }; - Editor.prototype.$highlightBrackets = function () { - if (this.$highlightPending) { - return; - } - var self = this; - this.$highlightPending = true; - setTimeout(function () { - self.$highlightPending = false; - var session = self.session; - if (!session || session.destroyed) - return; - if (session.$bracketHighlight) { - session.$bracketHighlight.markerIds.forEach(function (id) { - session.removeMarker(id); - }); - session.$bracketHighlight = null; - } - var pos = self.getCursorPosition(); - var handler = self.getKeyboardHandler(); - var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self); - var ranges = session.getMatchingBracketRanges(pos, isBackwards); - if (!ranges) { - var iterator = new TokenIterator(session, pos.row, pos.column); - var token = iterator.getCurrentToken(); - if (token && /\b(?:tag-open|tag-name)/.test(token.type)) { - var tagNamesRanges = session.getMatchingTags(pos); - if (tagNamesRanges) { - ranges = [ - tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName, - tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName - ]; - } - } - } - if (!ranges && session.$mode.getMatching) - ranges = session.$mode.getMatching(self.session); - if (!ranges) { - if (self.getHighlightIndentGuides()) - self.renderer.$textLayer.$highlightIndentGuide(); - return; - } - var markerType = "ace_bracket"; - if (!Array.isArray(ranges)) { - ranges = [ranges]; - } - else if (ranges.length == 1) { - markerType = "ace_error_bracket"; + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + let indexSize = 1 + let arrLength = arr.length + let valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + let i + if (dir) { + let foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + let found = true + for (let j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + const remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + const strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + let i + for (i = 0; i < length; ++i) { + const parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + const remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + let loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + case 'latin1': + case 'binary': + return asciiWrite(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + const res = [] + + let i = start + while (i < end) { + const firstByte = buf[i] + let codePoint = null + let bytesPerSequence = (firstByte > 0xEF) + ? 4 + : (firstByte > 0xDF) + ? 3 + : (firstByte > 0xBF) + ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + let secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint } - if (ranges.length == 2) { - if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0) - ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)]; - else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0) - ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)]; + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint } - session.$bracketHighlight = { - ranges: ranges, - markerIds: ranges.map(function (range) { - return session.addMarker(range, markerType, "text"); - }) - }; - if (self.getHighlightIndentGuides()) - self.renderer.$textLayer.$highlightIndentGuide(); - }, 50); - }; - Editor.prototype.focus = function () { - this.textInput.focus(); - }; - Editor.prototype.isFocused = function () { - return this.textInput.isFocused(); - }; - Editor.prototype.blur = function () { - this.textInput.blur(); - }; - Editor.prototype.onFocus = function (e) { - if (this.$isFocused) - return; - this.$isFocused = true; - this.renderer.showCursor(); - this.renderer.visualizeFocus(); - this._emit("focus", e); - }; - Editor.prototype.onBlur = function (e) { - if (!this.$isFocused) - return; - this.$isFocused = false; - this.renderer.hideCursor(); - this.renderer.visualizeBlur(); - this._emit("blur", e); - }; - Editor.prototype.$cursorChange = function () { - this.renderer.updateCursor(); - this.$highlightBrackets(); - this.$updateHighlightActiveLine(); - }; - Editor.prototype.onDocumentChange = function (delta) { - var wrap = this.session.$useWrapMode; - var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity); - this.renderer.updateLines(delta.start.row, lastRow, wrap); - this._signal("change", delta); - this.$cursorChange(); - }; - Editor.prototype.onTokenizerUpdate = function (e) { - var rows = e.data; - this.renderer.updateLines(rows.first, rows.last); - }; - Editor.prototype.onScrollTopChange = function () { - this.renderer.scrollToY(this.session.getScrollTop()); - }; - Editor.prototype.onScrollLeftChange = function () { - this.renderer.scrollToX(this.session.getScrollLeft()); - }; - Editor.prototype.onCursorChange = function () { - this.$cursorChange(); - this._signal("changeSelection"); - }; - Editor.prototype.$updateHighlightActiveLine = function () { - var session = this.getSession(); - var highlight; - if (this.$highlightActiveLine) { - if (this.$selectionStyle != "line" || !this.selection.isMultiLine()) - highlight = this.getCursorPosition(); - if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty()) - highlight = false; - if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1)) - highlight = false; - } - if (session.$highlightLineMarker && !highlight) { - session.removeMarker(session.$highlightLineMarker.id); - session.$highlightLineMarker = null; - } - else if (!session.$highlightLineMarker && highlight) { - var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); - range.id = session.addMarker(range, "ace_active-line", "screenLine"); - session.$highlightLineMarker = range; - } - else if (highlight) { - session.$highlightLineMarker.start.row = highlight.row; - session.$highlightLineMarker.end.row = highlight.row; - session.$highlightLineMarker.start.column = highlight.column; - session._signal("changeBackMarker"); - } - }; - Editor.prototype.onSelectionChange = function (e) { - var session = this.session; - if (session.$selectionMarker) { - session.removeMarker(session.$selectionMarker); - } - session.$selectionMarker = null; - if (!this.selection.isEmpty()) { - var range = this.selection.getRange(); - var style = this.getSelectionStyle(); - session.$selectionMarker = session.addMarker(range, "ace_selection", style); - } - else { - this.$updateHighlightActiveLine(); - } - var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp(); - this.session.highlight(re); - this._signal("changeSelection"); - }; - Editor.prototype.$getSelectionHighLightRegexp = function () { - var session = this.session; - var selection = this.getSelectionRange(); - if (selection.isEmpty() || selection.isMultiLine()) - return; - var startColumn = selection.start.column; - var endColumn = selection.end.column; - var line = session.getLine(selection.start.row); - var needle = line.substring(startColumn, endColumn); - if (needle.length > 5000 || !/[\w\d]/.test(needle)) - return; - var re = this.$search.$assembleRegExp({ - wholeWord: true, - caseSensitive: true, - needle: needle - }); - var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1); - if (!re.test(wordWithBoundary)) - return; - return re; - }; - Editor.prototype.onChangeFrontMarker = function () { - this.renderer.updateFrontMarkers(); - }; - Editor.prototype.onChangeBackMarker = function () { - this.renderer.updateBackMarkers(); - }; - Editor.prototype.onChangeBreakpoint = function () { - this.renderer.updateBreakpoints(); - }; - Editor.prototype.onChangeAnnotation = function () { - this.renderer.setAnnotations(this.session.getAnnotations()); - }; - Editor.prototype.onChangeMode = function (e) { - this.renderer.updateText(); - this._emit("changeMode", e); - }; - Editor.prototype.onChangeWrapLimit = function () { - this.renderer.updateFull(); - }; - Editor.prototype.onChangeWrapMode = function () { - this.renderer.onResize(true); - }; - Editor.prototype.onChangeFold = function () { - this.$updateHighlightActiveLine(); - this.renderer.updateFull(); - }; - Editor.prototype.getSelectedText = function () { - return this.session.getTextRange(this.getSelectionRange()); - }; - Editor.prototype.getCopyText = function () { - var text = this.getSelectedText(); - var nl = this.session.doc.getNewLineCharacter(); - var copyLine = false; - if (!text && this.$copyWithEmptySelection) { - copyLine = true; - var ranges = this.selection.getAllRanges(); - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (i && ranges[i - 1].start.row == range.start.row) - continue; - text += this.session.getLine(range.start.row) + nl; + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +const MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + const len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + let res = '' + let i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + let ret = '' + end = Math.min(buf.length, end) + + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + let ret = '' + end = Math.min(buf.length, end) + + for (let i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + const len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + let out = '' + for (let i = start; i < end; ++i) { + out += hexSliceLookupTable[buf[i]] + } + return out +} + +function utf16leSlice (buf, start, end) { + const bytes = buf.slice(start, end) + let res = '' + // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) + for (let i = 0; i < bytes.length - 1; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + const len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + const newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + Object.setPrototypeOf(newBuf, Buffer.prototype) + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUintLE = +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let val = this[offset] + let mul = 1 + let i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUintBE = +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + let val = this[offset + --byteLength] + let mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUint8 = +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUint16LE = +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUint16BE = +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUint32LE = +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUint32BE = +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const lo = first + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 24 + + const hi = this[++offset] + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + last * 2 ** 24 + + return BigInt(lo) + (BigInt(hi) << BigInt(32)) +}) + +Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const hi = first * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + this[++offset] + + const lo = this[++offset] * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + last + + return (BigInt(hi) << BigInt(32)) + BigInt(lo) +}) + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let val = this[offset] + let mul = 1 + let i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + let i = byteLength + let mul = 1 + let val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + const val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + const val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const val = this[offset + 4] + + this[offset + 5] * 2 ** 8 + + this[offset + 6] * 2 ** 16 + + (last << 24) // Overflow + + return (BigInt(val) << BigInt(32)) + + BigInt(first + + this[++offset] * 2 ** 8 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 24) +}) + +Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) { + offset = offset >>> 0 + validateNumber(offset, 'offset') + const first = this[offset] + const last = this[offset + 7] + if (first === undefined || last === undefined) { + boundsError(offset, this.length - 8) + } + + const val = (first << 24) + // Overflow + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + this[++offset] + + return (BigInt(val) << BigInt(32)) + + BigInt(this[++offset] * 2 ** 24 + + this[++offset] * 2 ** 16 + + this[++offset] * 2 ** 8 + + last) +}) + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUintLE = +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + let mul = 1 + let i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUintBE = +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + const maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + let i = byteLength - 1 + let mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUint8 = +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUint16LE = +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUint16BE = +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUint32LE = +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUint32BE = +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function wrtBigUInt64LE (buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7) + + let lo = Number(value & BigInt(0xffffffff)) + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + lo = lo >> 8 + buf[offset++] = lo + let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + hi = hi >> 8 + buf[offset++] = hi + return offset +} + +function wrtBigUInt64BE (buf, value, offset, min, max) { + checkIntBI(value, min, max, buf, offset, 7) + + let lo = Number(value & BigInt(0xffffffff)) + buf[offset + 7] = lo + lo = lo >> 8 + buf[offset + 6] = lo + lo = lo >> 8 + buf[offset + 5] = lo + lo = lo >> 8 + buf[offset + 4] = lo + let hi = Number(value >> BigInt(32) & BigInt(0xffffffff)) + buf[offset + 3] = hi + hi = hi >> 8 + buf[offset + 2] = hi + hi = hi >> 8 + buf[offset + 1] = hi + hi = hi >> 8 + buf[offset] = hi + return offset + 8 +} + +Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) +}) + +Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff')) +}) + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + const limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + let i = 0 + let mul = 1 + let sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + const limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + let i = byteLength - 1 + let mul = 1 + let sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) { + return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) +}) + +Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) { + return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff')) +}) + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + const len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + const code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } else if (typeof val === 'boolean') { + val = Number(val) + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + let i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + const bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + const len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// CUSTOM ERRORS +// ============= + +// Simplified versions from Node, changed for Buffer-only usage +const errors = {} +function E (sym, getMessage, Base) { + errors[sym] = class NodeError extends Base { + constructor () { + super() + + Object.defineProperty(this, 'message', { + value: getMessage.apply(this, arguments), + writable: true, + configurable: true + }) + + // Add the error code to the name to include it in the stack trace. + this.name = `${this.name} [${sym}]` + // Access the stack to generate the error message including the error code + // from the name. + this.stack // eslint-disable-line no-unused-expressions + // Reset the name to the actual name. + delete this.name + } + + get code () { + return sym + } + + set code (value) { + Object.defineProperty(this, 'code', { + configurable: true, + enumerable: true, + value, + writable: true + }) + } + + toString () { + return `${this.name} [${sym}]: ${this.message}` + } + } +} + +E('ERR_BUFFER_OUT_OF_BOUNDS', + function (name) { + if (name) { + return `${name} is outside of buffer bounds` + } + + return 'Attempt to access memory outside buffer bounds' + }, RangeError) +E('ERR_INVALID_ARG_TYPE', + function (name, actual) { + return `The "${name}" argument must be of type number. Received type ${typeof actual}` + }, TypeError) +E('ERR_OUT_OF_RANGE', + function (str, range, input) { + let msg = `The value of "${str}" is out of range.` + let received = input + if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) { + received = addNumericalSeparator(String(input)) + } else if (typeof input === 'bigint') { + received = String(input) + if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) { + received = addNumericalSeparator(received) + } + received += 'n' + } + msg += ` It must be ${range}. Received ${received}` + return msg + }, RangeError) + +function addNumericalSeparator (val) { + let res = '' + let i = val.length + const start = val[0] === '-' ? 1 : 0 + for (; i >= start + 4; i -= 3) { + res = `_${val.slice(i - 3, i)}${res}` + } + return `${val.slice(0, i)}${res}` +} + +// CHECK FUNCTIONS +// =============== + +function checkBounds (buf, offset, byteLength) { + validateNumber(offset, 'offset') + if (buf[offset] === undefined || buf[offset + byteLength] === undefined) { + boundsError(offset, buf.length - (byteLength + 1)) + } +} + +function checkIntBI (value, min, max, buf, offset, byteLength) { + if (value > max || value < min) { + const n = typeof min === 'bigint' ? 'n' : '' + let range + if (byteLength > 3) { + if (min === 0 || min === BigInt(0)) { + range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}` + } else { + range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + + `${(byteLength + 1) * 8 - 1}${n}` + } + } else { + range = `>= ${min}${n} and <= ${max}${n}` + } + throw new errors.ERR_OUT_OF_RANGE('value', range, value) + } + checkBounds(buf, offset, byteLength) +} + +function validateNumber (value, name) { + if (typeof value !== 'number') { + throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value) + } +} + +function boundsError (value, length, type) { + if (Math.floor(value) !== value) { + validateNumber(value, type) + throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value) + } + + if (length < 0) { + throw new errors.ERR_BUFFER_OUT_OF_BOUNDS() + } + + throw new errors.ERR_OUT_OF_RANGE(type || 'offset', + `>= ${type ? 1 : 0} and <= ${length}`, + value) +} + +// HELPER FUNCTIONS +// ================ + +const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function utf8ToBytes (string, units) { + units = units || Infinity + let codePoint + const length = string.length + let leadSurrogate = null + const bytes = [] + + for (let i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue } - var e = { text: text }; - this._signal("copy", e); - clipboard.lineMode = copyLine ? e.text : false; - return e.text; - }; - Editor.prototype.onCopy = function () { - this.commands.exec("copy", this); - }; - Editor.prototype.onCut = function () { - this.commands.exec("cut", this); - }; - Editor.prototype.onPaste = function (text, event) { - var e = { text: text, event: event }; - this.commands.exec("paste", this, e); - }; - Editor.prototype.$handlePaste = function (e) { - if (typeof e == "string") - e = { text: e }; - this._signal("paste", e); - var text = e.text; - var lineMode = text === clipboard.lineMode; - var session = this.session; - if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { - if (lineMode) - session.insert({ row: this.selection.lead.row, column: 0 }, text); - else - this.insert(text); + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + const byteArray = [] + for (let i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + let c, hi, lo + const byteArray = [] + for (let i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + let i + for (i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +// Create lookup table for `toString('hex')` +// See: https://github.com/feross/buffer/issues/219 +const hexSliceLookupTable = (function () { + const alphabet = '0123456789abcdef' + const table = new Array(256) + for (let i = 0; i < 16; ++i) { + const i16 = i * 16 + for (let j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j] + } + } + return table +})() + +// Return not function with Error if BigInt not supported +function defineBigIntMethod (fn) { + return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn +} + +function BufferBigIntNotDefined () { + throw new Error('BigInt not supported') +} + + +/***/ }), + +/***/ "../../node_modules/cipher-base/index.js": +/*!***********************************************!*\ + !*** ../../node_modules/cipher-base/index.js ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var Transform = (__webpack_require__(/*! stream */ "../../node_modules/stream-browserify/index.js").Transform) +var StringDecoder = (__webpack_require__(/*! string_decoder */ "../../node_modules/string_decoder/lib/string_decoder.js").StringDecoder) +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") + +function CipherBase (hashMode) { + Transform.call(this) + this.hashMode = typeof hashMode === 'string' + if (this.hashMode) { + this[hashMode] = this._finalOrDigest + } else { + this.final = this._finalOrDigest + } + if (this._final) { + this.__final = this._final + this._final = null + } + this._decoder = null + this._encoding = null +} +inherits(CipherBase, Transform) + +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + if (typeof data === 'string') { + data = Buffer.from(data, inputEnc) + } + + var outData = this._update(data) + if (this.hashMode) return this + + if (outputEnc) { + outData = this._toString(outData, outputEnc) + } + + return outData +} + +CipherBase.prototype.setAutoPadding = function () {} +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state') +} + +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state') +} + +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state') +} + +CipherBase.prototype._transform = function (data, _, next) { + var err + try { + if (this.hashMode) { + this._update(data) + } else { + this.push(this._update(data)) + } + } catch (e) { + err = e + } finally { + next(err) + } +} +CipherBase.prototype._flush = function (done) { + var err + try { + this.push(this.__final()) + } catch (e) { + err = e + } + + done(err) +} +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this.__final() || Buffer.alloc(0) + if (outputEnc) { + outData = this._toString(outData, outputEnc, true) + } + return outData +} + +CipherBase.prototype._toString = function (value, enc, fin) { + if (!this._decoder) { + this._decoder = new StringDecoder(enc) + this._encoding = enc + } + + if (this._encoding !== enc) throw new Error('can\'t switch encodings') + + var out = this._decoder.write(value) + if (fin) { + out += this._decoder.end() + } + + return out +} + +module.exports = CipherBase + + +/***/ }), + +/***/ "../../node_modules/core-util-is/lib/util.js": +/*!***************************************************!*\ + !*** ../../node_modules/core-util-is/lib/util.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +/***/ }), + +/***/ "../../node_modules/create-ecdh/browser.js": +/*!*************************************************!*\ + !*** ../../node_modules/create-ecdh/browser.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var elliptic = __webpack_require__(/*! elliptic */ "../../node_modules/elliptic/lib/elliptic.js") +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js") + +module.exports = function createECDH (curve) { + return new ECDH(curve) +} + +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +} + +aliases.p224 = aliases.secp224r1 +aliases.p256 = aliases.secp256r1 = aliases.prime256v1 +aliases.p192 = aliases.secp192r1 = aliases.prime192v1 +aliases.p384 = aliases.secp384r1 +aliases.p521 = aliases.secp521r1 + +function ECDH (curve) { + this.curveType = aliases[curve] + if (!this.curveType) { + this.curveType = { + name: curve + } + } + this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap + this.keys = void 0 +} + +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair() + return this.getPublicKey(enc, format) +} + +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8' + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc) + } + var otherPub = this.curve.keyFromPublic(other).getPublic() + var out = otherPub.mul(this.keys.getPrivate()).getX() + return formatReturnValue(out, enc, this.curveType.byteLength) +} + +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true) + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7 + } else { + key[0] = 6 + } + } + return formatReturnValue(key, enc) +} + +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc) +} + +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc) + } + this.keys._importPublic(pub) + return this +} + +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc) + } + + var _priv = new BN(priv) + _priv = _priv.toString(16) + this.keys = this.curve.genKeyPair() + this.keys._importPrivate(_priv) + return this +} + +function formatReturnValue (bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray() + } + var buf = new Buffer(bn) + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length) + zeros.fill(0) + buf = Buffer.concat([zeros, buf]) + } + if (!enc) { + return buf + } else { + return buf.toString(enc) + } +} + + +/***/ }), + +/***/ "../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js ***! + \*******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(/*! buffer */ "?e376").Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); } - else if (lineMode) { - this.selection.rangeList.ranges.forEach(function (range) { - session.insert({ row: range.start.row, column: 0 }, text); - }); + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - else { - var lines = text.split(/\r\n|\r|\n/); - var ranges = this.selection.rangeList.ranges; - var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]); - if (lines.length != ranges.length || isFullLine) - return this.commands.exec("insertstring", this, text); - for (var i = ranges.length; i--;) { - var range = ranges[i]; - if (!range.isEmpty()) - session.remove(range); - session.insert(range.start, lines[i]); - } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - }; - Editor.prototype.execCommand = function (command, args) { - return this.commands.exec(command, this, args); - }; - Editor.prototype.insert = function (text, pasted) { - var session = this.session; - var mode = session.getMode(); - var cursor = this.getCursorPosition(); - if (this.getBehavioursEnabled() && !pasted) { - var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); - if (transform) { - if (text !== transform.text) { - if (!this.inVirtualSelectionMode) { - this.session.mergeUndoDeltas = false; - this.mergeNextCommand = false; - } - } - text = transform.text; - } + } + } + return this.strip(); + }; + + function parseHex4Bits (string, index) { + var c = string.charCodeAt(index); + // 'A' - 'F' + if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return (c - 48) & 0xf; + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - if (text == "\t") - text = this.session.getTabString(); - if (!this.selection.isEmpty()) { - var range = this.getSelectionRange(); - cursor = this.session.remove(range); - this.clearSelection(); + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - else if (this.session.getOverwrite() && text.indexOf("\n") == -1) { - var range = Range.fromPoints(cursor, cursor); - range.end.column += text.length; - this.session.remove(range); + } + } + + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this.strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; } - if (text == "\n" || text == "\r\n") { - var line = session.getLine(cursor.row); - if (cursor.column > line.search(/\S|$/)) { - var d = line.substr(cursor.column).search(/\S|$/); - session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); - } + off += 2; + if (off >= 26) { + off -= 26; + i--; } - this.clearSelection(); - var start = cursor.column; - var lineState = session.getState(cursor.row); - var line = session.getLine(cursor.row); - var shouldOutdent = mode.checkOutdent(lineState, line, text); - session.insert(cursor, text); - if (transform && transform.selection) { - if (transform.selection.length == 2) { // Transform relative to the current column - this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1])); - } - else { // Transform relative to the current row. - this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3])); - } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; } - if (this.$enableAutoIndent) { - if (session.getDocument().isNewLine(text)) { - var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); - session.insert({ row: cursor.row + 1, column: 0 }, lineIndent); - } - if (shouldOutdent) - mode.autoOutdent(lineState, session, cursor.row); + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } } - }; - Editor.prototype.autoIndent = function () { - var session = this.session; - var mode = session.getMode(); - var ranges = this.selection.isEmpty() - ? [new Range(0, 0, session.doc.getLength() - 1, 0)] - : this.selection.getAllRanges(); - var prevLineState = ""; - var prevLine = ""; - var lineIndent = ""; - var tab = session.getTabString(); - for (var i = 0; i < ranges.length; i++) { - var startRow = ranges[i].start.row; - var endRow = ranges[i].end.row; - for (var row = startRow; row <= endRow; row++) { - if (row > 0) { - prevLineState = session.getState(row - 1); - prevLine = session.getLine(row - 1); - lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab); - } - var line = session.getLine(row); - var currIndent = mode.$getIndent(line); - if (lineIndent !== currIndent) { - if (currIndent.length > 0) { - var range = new Range(row, 0, row, currIndent.length); - session.remove(range); - } - if (lineIndent.length > 0) { - session.insert({ row: row, column: 0 }, lineIndent); - } - } - mode.autoOutdent(prevLineState, session, row); - } + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a }; - Editor.prototype.onTextInput = function (text, composition) { - if (!composition) - return this.keyBinding.onTextInput(text); - this.startOperation({ command: { name: "insertstring" } }); - var applyComposition = this.applyComposition.bind(this, text, composition); - if (this.selection.rangeCount) - this.forEachSelection(applyComposition); - else - applyComposition(); - this.endOperation(); - }; - Editor.prototype.applyComposition = function (text, composition) { - if (composition.extendLeft || composition.extendRight) { - var r = this.selection.getRange(); - r.start.column -= composition.extendLeft; - r.end.column += composition.extendRight; - if (r.start.column < 0) { - r.start.row--; - r.start.column += this.session.getLine(r.start.row).length + 1; - } - this.selection.setRange(r); - if (!text && !r.isEmpty()) - this.remove(); + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); } - if (text || !this.selection.isEmpty()) - this.insert(text, true); - if (composition.restoreStart || composition.restoreEnd) { - var r = this.selection.getRange(); - r.start.column -= composition.restoreStart; - r.end.column -= composition.restoreEnd; - this.selection.setRange(r); + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); } - }; - Editor.prototype.onCommandKey = function (e, hashId, keyCode) { - return this.keyBinding.onCommandKey(e, hashId, keyCode); - }; - Editor.prototype.setOverwrite = function (overwrite) { - this.session.setOverwrite(overwrite); - }; - Editor.prototype.getOverwrite = function () { - return this.session.getOverwrite(); - }; - Editor.prototype.toggleOverwrite = function () { - this.session.toggleOverwrite(); - }; - Editor.prototype.setScrollSpeed = function (speed) { - this.setOption("scrollSpeed", speed); - }; - Editor.prototype.getScrollSpeed = function () { - return this.getOption("scrollSpeed"); - }; - Editor.prototype.setDragDelay = function (dragDelay) { - this.setOption("dragDelay", dragDelay); - }; - Editor.prototype.getDragDelay = function () { - return this.getOption("dragDelay"); - }; - Editor.prototype.setSelectionStyle = function (val) { - this.setOption("selectionStyle", val); - }; - Editor.prototype.getSelectionStyle = function () { - return this.getOption("selectionStyle"); - }; - Editor.prototype.setHighlightActiveLine = function (shouldHighlight) { - this.setOption("highlightActiveLine", shouldHighlight); - }; - Editor.prototype.getHighlightActiveLine = function () { - return this.getOption("highlightActiveLine"); - }; - Editor.prototype.setHighlightGutterLine = function (shouldHighlight) { - this.setOption("highlightGutterLine", shouldHighlight); - }; - Editor.prototype.getHighlightGutterLine = function () { - return this.getOption("highlightGutterLine"); - }; - Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) { - this.setOption("highlightSelectedWord", shouldHighlight); - }; - Editor.prototype.getHighlightSelectedWord = function () { - return this.$highlightSelectedWord; - }; - Editor.prototype.setAnimatedScroll = function (shouldAnimate) { - this.renderer.setAnimatedScroll(shouldAnimate); - }; - Editor.prototype.getAnimatedScroll = function () { - return this.renderer.getAnimatedScroll(); - }; - Editor.prototype.setShowInvisibles = function (showInvisibles) { - this.renderer.setShowInvisibles(showInvisibles); - }; - Editor.prototype.getShowInvisibles = function () { - return this.renderer.getShowInvisibles(); - }; - Editor.prototype.setDisplayIndentGuides = function (display) { - this.renderer.setDisplayIndentGuides(display); - }; - Editor.prototype.getDisplayIndentGuides = function () { - return this.renderer.getDisplayIndentGuides(); - }; - Editor.prototype.setHighlightIndentGuides = function (highlight) { - this.renderer.setHighlightIndentGuides(highlight); - }; - Editor.prototype.getHighlightIndentGuides = function () { - return this.renderer.getHighlightIndentGuides(); - }; - Editor.prototype.setShowPrintMargin = function (showPrintMargin) { - this.renderer.setShowPrintMargin(showPrintMargin); - }; - Editor.prototype.getShowPrintMargin = function () { - return this.renderer.getShowPrintMargin(); - }; - Editor.prototype.setPrintMarginColumn = function (showPrintMargin) { - this.renderer.setPrintMarginColumn(showPrintMargin); - }; - Editor.prototype.getPrintMarginColumn = function () { - return this.renderer.getPrintMarginColumn(); - }; - Editor.prototype.setReadOnly = function (readOnly) { - this.setOption("readOnly", readOnly); - }; - Editor.prototype.getReadOnly = function () { - return this.getOption("readOnly"); - }; - Editor.prototype.setBehavioursEnabled = function (enabled) { - this.setOption("behavioursEnabled", enabled); - }; - Editor.prototype.getBehavioursEnabled = function () { - return this.getOption("behavioursEnabled"); - }; - Editor.prototype.setWrapBehavioursEnabled = function (enabled) { - this.setOption("wrapBehavioursEnabled", enabled); - }; - Editor.prototype.getWrapBehavioursEnabled = function () { - return this.getOption("wrapBehavioursEnabled"); - }; - Editor.prototype.setShowFoldWidgets = function (show) { - this.setOption("showFoldWidgets", show); - }; - Editor.prototype.getShowFoldWidgets = function () { - return this.getOption("showFoldWidgets"); - }; - Editor.prototype.setFadeFoldWidgets = function (fade) { - this.setOption("fadeFoldWidgets", fade); - }; - Editor.prototype.getFadeFoldWidgets = function () { - return this.getOption("fadeFoldWidgets"); - }; - Editor.prototype.remove = function (dir) { - if (this.selection.isEmpty()) { - if (dir == "left") - this.selection.selectLeft(); - else - this.selection.selectRight(); + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); } - var range = this.getSelectionRange(); - if (this.getBehavioursEnabled()) { - var session = this.session; - var state = session.getState(range.start.row); - var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); - if (range.end.column === 0) { - var text = session.getTextRange(range); - if (text[text.length - 1] == "\n") { - var line = session.getLine(range.end.row); - if (/^\s+$/.test(line)) { - range.end.column = line.length; - } - } - } - if (new_range) - range = new_range; + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); } - this.session.remove(range); - this.clearSelection(); - }; - Editor.prototype.removeWordRight = function () { - if (this.selection.isEmpty()) - this.selection.selectWordRight(); - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - }; - Editor.prototype.removeWordLeft = function () { - if (this.selection.isEmpty()) - this.selection.selectWordLeft(); - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - }; - Editor.prototype.removeToLineStart = function () { - if (this.selection.isEmpty()) - this.selection.selectLineStart(); - if (this.selection.isEmpty()) - this.selection.selectLeft(); - this.session.remove(this.getSelectionRange()); - this.clearSelection(); + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) }; - Editor.prototype.removeToLineEnd = function () { - if (this.selection.isEmpty()) - this.selection.selectLineEnd(); - var range = this.getSelectionRange(); - if (range.start.column == range.end.column && range.start.row == range.end.row) { - range.end.column = 0; - range.end.row++; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); } - this.session.remove(range); - this.clearSelection(); - }; - Editor.prototype.splitLine = function () { - if (!this.selection.isEmpty()) { - this.session.remove(this.getSelectionRange()); - this.clearSelection(); + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); + } + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is BN v4 instance + r.strip(); + } else { + // r is BN v5 instance + r._strip(); + } + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); } - var cursor = this.getCursorPosition(); - this.insert("\n"); - this.moveCursorToPosition(cursor); - }; - Editor.prototype.setGhostText = function (text, position) { - this.renderer.setGhostText(text, position); - }; - Editor.prototype.removeGhostText = function () { - this.renderer.removeGhostText(); - }; - Editor.prototype.transposeLetters = function () { - if (!this.selection.isEmpty()) { - return; + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; } - var cursor = this.getCursorPosition(); - var column = cursor.column; - if (column === 0) - return; - var line = this.session.getLine(cursor.row); - var swap, range; - if (column < line.length) { - swap = line.charAt(column) + line.charAt(column - 1); - range = new Range(cursor.row, column - 1, cursor.row, column + 1); + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); + + +/***/ }), + +/***/ "../../node_modules/create-hash/browser.js": +/*!*************************************************!*\ + !*** ../../node_modules/create-hash/browser.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var MD5 = __webpack_require__(/*! md5.js */ "../../node_modules/md5.js/index.js") +var RIPEMD160 = __webpack_require__(/*! ripemd160 */ "../../node_modules/ripemd160/index.js") +var sha = __webpack_require__(/*! sha.js */ "../../node_modules/sha.js/index.js") +var Base = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") + +function Hash (hash) { + Base.call(this, 'digest') + + this._hash = hash +} + +inherits(Hash, Base) + +Hash.prototype._update = function (data) { + this._hash.update(data) +} + +Hash.prototype._final = function () { + return this._hash.digest() +} + +module.exports = function createHash (alg) { + alg = alg.toLowerCase() + if (alg === 'md5') return new MD5() + if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() + + return new Hash(sha(alg)) +} + + +/***/ }), + +/***/ "../../node_modules/create-hash/md5.js": +/*!*********************************************!*\ + !*** ../../node_modules/create-hash/md5.js ***! + \*********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var MD5 = __webpack_require__(/*! md5.js */ "../../node_modules/md5.js/index.js") + +module.exports = function (buffer) { + return new MD5().update(buffer).digest() +} + + +/***/ }), + +/***/ "../../node_modules/create-hmac/browser.js": +/*!*************************************************!*\ + !*** ../../node_modules/create-hmac/browser.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var Legacy = __webpack_require__(/*! ./legacy */ "../../node_modules/create-hmac/legacy.js") +var Base = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var md5 = __webpack_require__(/*! create-hash/md5 */ "../../node_modules/create-hash/md5.js") +var RIPEMD160 = __webpack_require__(/*! ripemd160 */ "../../node_modules/ripemd160/index.js") + +var sha = __webpack_require__(/*! sha.js */ "../../node_modules/sha.js/index.js") + +var ZEROS = Buffer.alloc(128) + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 + + this._alg = alg + this._key = key + if (key.length > blocksize) { + var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + key = hash.update(key).digest() + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + this._hash.update(ipad) +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.update(data) +} + +Hmac.prototype._final = function () { + var h = this._hash.digest() + var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) + return hash.update(this._opad).update(h).digest() +} + +module.exports = function createHmac (alg, key) { + alg = alg.toLowerCase() + if (alg === 'rmd160' || alg === 'ripemd160') { + return new Hmac('rmd160', key) + } + if (alg === 'md5') { + return new Legacy(md5, key) + } + return new Hmac(alg, key) +} + + +/***/ }), + +/***/ "../../node_modules/create-hmac/legacy.js": +/*!************************************************!*\ + !*** ../../node_modules/create-hmac/legacy.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var Base = __webpack_require__(/*! cipher-base */ "../../node_modules/cipher-base/index.js") + +var ZEROS = Buffer.alloc(128) +var blocksize = 64 + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + this._alg = alg + this._key = key + + if (key.length > blocksize) { + key = alg(key) + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + + this._hash = [ipad] +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.push(data) +} + +Hmac.prototype._final = function () { + var h = this._alg(Buffer.concat(this._hash)) + return this._alg(Buffer.concat([this._opad, h])) +} +module.exports = Hmac + + +/***/ }), + +/***/ "../../node_modules/crypto-browserify/index.js": +/*!*****************************************************!*\ + !*** ../../node_modules/crypto-browserify/index.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js") +exports.createHash = exports.Hash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js") +exports.createHmac = exports.Hmac = __webpack_require__(/*! create-hmac */ "../../node_modules/create-hmac/browser.js") + +var algos = __webpack_require__(/*! browserify-sign/algos */ "../../node_modules/browserify-sign/algos.js") +var algoKeys = Object.keys(algos) +var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) +exports.getHashes = function () { + return hashes +} + +var p = __webpack_require__(/*! pbkdf2 */ "../../node_modules/pbkdf2/browser.js") +exports.pbkdf2 = p.pbkdf2 +exports.pbkdf2Sync = p.pbkdf2Sync + +var aes = __webpack_require__(/*! browserify-cipher */ "../../node_modules/browserify-cipher/browser.js") + +exports.Cipher = aes.Cipher +exports.createCipher = aes.createCipher +exports.Cipheriv = aes.Cipheriv +exports.createCipheriv = aes.createCipheriv +exports.Decipher = aes.Decipher +exports.createDecipher = aes.createDecipher +exports.Decipheriv = aes.Decipheriv +exports.createDecipheriv = aes.createDecipheriv +exports.getCiphers = aes.getCiphers +exports.listCiphers = aes.listCiphers + +var dh = __webpack_require__(/*! diffie-hellman */ "../../node_modules/diffie-hellman/browser.js") + +exports.DiffieHellmanGroup = dh.DiffieHellmanGroup +exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup +exports.getDiffieHellman = dh.getDiffieHellman +exports.createDiffieHellman = dh.createDiffieHellman +exports.DiffieHellman = dh.DiffieHellman + +var sign = __webpack_require__(/*! browserify-sign */ "../../node_modules/browserify-sign/browser/index.js") + +exports.createSign = sign.createSign +exports.Sign = sign.Sign +exports.createVerify = sign.createVerify +exports.Verify = sign.Verify + +exports.createECDH = __webpack_require__(/*! create-ecdh */ "../../node_modules/create-ecdh/browser.js") + +var publicEncrypt = __webpack_require__(/*! public-encrypt */ "../../node_modules/public-encrypt/browser.js") + +exports.publicEncrypt = publicEncrypt.publicEncrypt +exports.privateEncrypt = publicEncrypt.privateEncrypt +exports.publicDecrypt = publicEncrypt.publicDecrypt +exports.privateDecrypt = publicEncrypt.privateDecrypt + +// the least I can do is make error messages for the rest of the node.js/crypto api. +// ;[ +// 'createCredentials' +// ].forEach(function (name) { +// exports[name] = function () { +// throw new Error([ +// 'sorry, ' + name + ' is not implemented yet', +// 'we accept pull requests', +// 'https://github.com/crypto-browserify/crypto-browserify' +// ].join('\n')) +// } +// }) + +var rf = __webpack_require__(/*! randomfill */ "../../node_modules/randomfill/browser.js") + +exports.randomFill = rf.randomFill +exports.randomFillSync = rf.randomFillSync + +exports.createCredentials = function () { + throw new Error([ + 'sorry, createCredentials is not implemented yet', + 'we accept pull requests', + 'https://github.com/crypto-browserify/crypto-browserify' + ].join('\n')) +} + +exports.constants = { + 'DH_CHECK_P_NOT_SAFE_PRIME': 2, + 'DH_CHECK_P_NOT_PRIME': 1, + 'DH_UNABLE_TO_CHECK_GENERATOR': 4, + 'DH_NOT_SUITABLE_GENERATOR': 8, + 'NPN_ENABLED': 1, + 'ALPN_ENABLED': 1, + 'RSA_PKCS1_PADDING': 1, + 'RSA_SSLV23_PADDING': 2, + 'RSA_NO_PADDING': 3, + 'RSA_PKCS1_OAEP_PADDING': 4, + 'RSA_X931_PADDING': 5, + 'RSA_PKCS1_PSS_PADDING': 6, + 'POINT_CONVERSION_COMPRESSED': 2, + 'POINT_CONVERSION_UNCOMPRESSED': 4, + 'POINT_CONVERSION_HYBRID': 6 +} + + +/***/ }), + +/***/ "../../node_modules/des.js/lib/des.js": +/*!********************************************!*\ + !*** ../../node_modules/des.js/lib/des.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +exports.utils = __webpack_require__(/*! ./des/utils */ "../../node_modules/des.js/lib/des/utils.js"); +exports.Cipher = __webpack_require__(/*! ./des/cipher */ "../../node_modules/des.js/lib/des/cipher.js"); +exports.DES = __webpack_require__(/*! ./des/des */ "../../node_modules/des.js/lib/des/des.js"); +exports.CBC = __webpack_require__(/*! ./des/cbc */ "../../node_modules/des.js/lib/des/cbc.js"); +exports.EDE = __webpack_require__(/*! ./des/ede */ "../../node_modules/des.js/lib/des/ede.js"); + + +/***/ }), + +/***/ "../../node_modules/des.js/lib/des/cbc.js": +/*!************************************************!*\ + !*** ../../node_modules/des.js/lib/des/cbc.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +var proto = {}; + +function CBCState(iv) { + assert.equal(iv.length, 8, 'Invalid IV length'); + + this.iv = new Array(8); + for (var i = 0; i < this.iv.length; i++) + this.iv[i] = iv[i]; +} + +function instantiate(Base) { + function CBC(options) { + Base.call(this, options); + this._cbcInit(); + } + inherits(CBC, Base); + + var keys = Object.keys(proto); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + CBC.prototype[key] = proto[key]; + } + + CBC.create = function create(options) { + return new CBC(options); + }; + + return CBC; +} + +exports.instantiate = instantiate; + +proto._cbcInit = function _cbcInit() { + var state = new CBCState(this.options.iv); + this._cbcState = state; +}; + +proto._update = function _update(inp, inOff, out, outOff) { + var state = this._cbcState; + var superProto = this.constructor.super_.prototype; + + var iv = state.iv; + if (this.type === 'encrypt') { + for (var i = 0; i < this.blockSize; i++) + iv[i] ^= inp[inOff + i]; + + superProto._update.call(this, iv, 0, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + iv[i] = out[outOff + i]; + } else { + superProto._update.call(this, inp, inOff, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + out[outOff + i] ^= iv[i]; + + for (var i = 0; i < this.blockSize; i++) + iv[i] = inp[inOff + i]; + } +}; + + +/***/ }), + +/***/ "../../node_modules/des.js/lib/des/cipher.js": +/*!***************************************************!*\ + !*** ../../node_modules/des.js/lib/des/cipher.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); + +function Cipher(options) { + this.options = options; + + this.type = this.options.type; + this.blockSize = 8; + this._init(); + + this.buffer = new Array(this.blockSize); + this.bufferOff = 0; + this.padding = options.padding !== false +} +module.exports = Cipher; + +Cipher.prototype._init = function _init() { + // Might be overrided +}; + +Cipher.prototype.update = function update(data) { + if (data.length === 0) + return []; + + if (this.type === 'decrypt') + return this._updateDecrypt(data); + else + return this._updateEncrypt(data); +}; + +Cipher.prototype._buffer = function _buffer(data, off) { + // Append data to buffer + var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); + for (var i = 0; i < min; i++) + this.buffer[this.bufferOff + i] = data[off + i]; + this.bufferOff += min; + + // Shift next + return min; +}; + +Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { + this._update(this.buffer, 0, out, off); + this.bufferOff = 0; + return this.blockSize; +}; + +Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = ((this.bufferOff + data.length) / this.blockSize) | 0; + var out = new Array(count * this.blockSize); + + if (this.bufferOff !== 0) { + inputOff += this._buffer(data, inputOff); + + if (this.bufferOff === this.buffer.length) + outputOff += this._flushBuffer(out, outputOff); + } + + // Write blocks + var max = data.length - ((data.length - inputOff) % this.blockSize); + for (; inputOff < max; inputOff += this.blockSize) { + this._update(data, inputOff, out, outputOff); + outputOff += this.blockSize; + } + + // Queue rest + for (; inputOff < data.length; inputOff++, this.bufferOff++) + this.buffer[this.bufferOff] = data[inputOff]; + + return out; +}; + +Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; + var out = new Array(count * this.blockSize); + + // TODO(indutny): optimize it, this is far from optimal + for (; count > 0; count--) { + inputOff += this._buffer(data, inputOff); + outputOff += this._flushBuffer(out, outputOff); + } + + // Buffer rest of the input + inputOff += this._buffer(data, inputOff); + + return out; +}; + +Cipher.prototype.final = function final(buffer) { + var first; + if (buffer) + first = this.update(buffer); + + var last; + if (this.type === 'encrypt') + last = this._finalEncrypt(); + else + last = this._finalDecrypt(); + + if (first) + return first.concat(last); + else + return last; +}; + +Cipher.prototype._pad = function _pad(buffer, off) { + if (off === 0) + return false; + + while (off < buffer.length) + buffer[off++] = 0; + + return true; +}; + +Cipher.prototype._finalEncrypt = function _finalEncrypt() { + if (!this._pad(this.buffer, this.bufferOff)) + return []; + + var out = new Array(this.blockSize); + this._update(this.buffer, 0, out, 0); + return out; +}; + +Cipher.prototype._unpad = function _unpad(buffer) { + return buffer; +}; + +Cipher.prototype._finalDecrypt = function _finalDecrypt() { + assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); + var out = new Array(this.blockSize); + this._flushBuffer(out, 0); + + return this._unpad(out); +}; + + +/***/ }), + +/***/ "../../node_modules/des.js/lib/des/des.js": +/*!************************************************!*\ + !*** ../../node_modules/des.js/lib/des/des.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +var utils = __webpack_require__(/*! ./utils */ "../../node_modules/des.js/lib/des/utils.js"); +var Cipher = __webpack_require__(/*! ./cipher */ "../../node_modules/des.js/lib/des/cipher.js"); + +function DESState() { + this.tmp = new Array(2); + this.keys = null; +} + +function DES(options) { + Cipher.call(this, options); + + var state = new DESState(); + this._desState = state; + + this.deriveKeys(state, options.key); +} +inherits(DES, Cipher); +module.exports = DES; + +DES.create = function create(options) { + return new DES(options); +}; + +var shiftTable = [ + 1, 1, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 1 +]; + +DES.prototype.deriveKeys = function deriveKeys(state, key) { + state.keys = new Array(16 * 2); + + assert.equal(key.length, this.blockSize, 'Invalid key length'); + + var kL = utils.readUInt32BE(key, 0); + var kR = utils.readUInt32BE(key, 4); + + utils.pc1(kL, kR, state.tmp, 0); + kL = state.tmp[0]; + kR = state.tmp[1]; + for (var i = 0; i < state.keys.length; i += 2) { + var shift = shiftTable[i >>> 1]; + kL = utils.r28shl(kL, shift); + kR = utils.r28shl(kR, shift); + utils.pc2(kL, kR, state.keys, i); + } +}; + +DES.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._desState; + + var l = utils.readUInt32BE(inp, inOff); + var r = utils.readUInt32BE(inp, inOff + 4); + + // Initial Permutation + utils.ip(l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + + if (this.type === 'encrypt') + this._encrypt(state, l, r, state.tmp, 0); + else + this._decrypt(state, l, r, state.tmp, 0); + + l = state.tmp[0]; + r = state.tmp[1]; + + utils.writeUInt32BE(out, l, outOff); + utils.writeUInt32BE(out, r, outOff + 4); +}; + +DES.prototype._pad = function _pad(buffer, off) { + if (this.padding === false) { + return false; + } + + var value = buffer.length - off; + for (var i = off; i < buffer.length; i++) + buffer[i] = value; + + return true; +}; + +DES.prototype._unpad = function _unpad(buffer) { + if (this.padding === false) { + return buffer; + } + + var pad = buffer[buffer.length - 1]; + for (var i = buffer.length - pad; i < buffer.length; i++) + assert.equal(buffer[i], pad); + + return buffer.slice(0, buffer.length - pad); +}; + +DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { + var l = lStart; + var r = rStart; + + // Apply f() x16 times + for (var i = 0; i < state.keys.length; i += 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(r, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = r; + r = (l ^ f) >>> 0; + l = t; + } + + // Reverse Initial Permutation + utils.rip(r, l, out, off); +}; + +DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { + var l = rStart; + var r = lStart; + + // Apply f() x16 times + for (var i = state.keys.length - 2; i >= 0; i -= 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(l, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = l; + l = (r ^ f) >>> 0; + r = t; + } + + // Reverse Initial Permutation + utils.rip(l, r, out, off); +}; + + +/***/ }), + +/***/ "../../node_modules/des.js/lib/des/ede.js": +/*!************************************************!*\ + !*** ../../node_modules/des.js/lib/des/ede.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +var Cipher = __webpack_require__(/*! ./cipher */ "../../node_modules/des.js/lib/des/cipher.js"); +var DES = __webpack_require__(/*! ./des */ "../../node_modules/des.js/lib/des/des.js"); + +function EDEState(type, key) { + assert.equal(key.length, 24, 'Invalid key length'); + + var k1 = key.slice(0, 8); + var k2 = key.slice(8, 16); + var k3 = key.slice(16, 24); + + if (type === 'encrypt') { + this.ciphers = [ + DES.create({ type: 'encrypt', key: k1 }), + DES.create({ type: 'decrypt', key: k2 }), + DES.create({ type: 'encrypt', key: k3 }) + ]; + } else { + this.ciphers = [ + DES.create({ type: 'decrypt', key: k3 }), + DES.create({ type: 'encrypt', key: k2 }), + DES.create({ type: 'decrypt', key: k1 }) + ]; + } +} + +function EDE(options) { + Cipher.call(this, options); + + var state = new EDEState(this.type, this.options.key); + this._edeState = state; +} +inherits(EDE, Cipher); + +module.exports = EDE; + +EDE.create = function create(options) { + return new EDE(options); +}; + +EDE.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._edeState; + + state.ciphers[0]._update(inp, inOff, out, outOff); + state.ciphers[1]._update(out, outOff, out, outOff); + state.ciphers[2]._update(out, outOff, out, outOff); +}; + +EDE.prototype._pad = DES.prototype._pad; +EDE.prototype._unpad = DES.prototype._unpad; + + +/***/ }), + +/***/ "../../node_modules/des.js/lib/des/utils.js": +/*!**************************************************!*\ + !*** ../../node_modules/des.js/lib/des/utils.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +exports.readUInt32BE = function readUInt32BE(bytes, off) { + var res = (bytes[0 + off] << 24) | + (bytes[1 + off] << 16) | + (bytes[2 + off] << 8) | + bytes[3 + off]; + return res >>> 0; +}; + +exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { + bytes[0 + off] = value >>> 24; + bytes[1 + off] = (value >>> 16) & 0xff; + bytes[2 + off] = (value >>> 8) & 0xff; + bytes[3 + off] = value & 0xff; +}; + +exports.ip = function ip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + } + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.rip = function rip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 0; i < 4; i++) { + for (var j = 24; j >= 0; j -= 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + for (var i = 4; i < 8; i++) { + for (var j = 24; j >= 0; j -= 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.pc1 = function pc1(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + // 7, 15, 23, 31, 39, 47, 55, 63 + // 6, 14, 22, 30, 39, 47, 55, 63 + // 5, 13, 21, 29, 39, 47, 55, 63 + // 4, 12, 20, 28 + for (var i = 7; i >= 5; i--) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + + // 1, 9, 17, 25, 33, 41, 49, 57 + // 2, 10, 18, 26, 34, 42, 50, 58 + // 3, 11, 19, 27, 35, 43, 51, 59 + // 36, 44, 52, 60 + for (var i = 1; i <= 3; i++) { + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.r28shl = function r28shl(num, shift) { + return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); +}; + +var pc2table = [ + // inL => outL + 14, 11, 17, 4, 27, 23, 25, 0, + 13, 22, 7, 18, 5, 9, 16, 24, + 2, 20, 12, 21, 1, 8, 15, 26, + + // inR => outR + 15, 4, 25, 19, 9, 1, 26, 16, + 5, 11, 23, 8, 12, 7, 17, 0, + 22, 3, 10, 14, 6, 20, 27, 24 +]; + +exports.pc2 = function pc2(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + var len = pc2table.length >>> 1; + for (var i = 0; i < len; i++) { + outL <<= 1; + outL |= (inL >>> pc2table[i]) & 0x1; + } + for (var i = len; i < pc2table.length; i++) { + outR <<= 1; + outR |= (inR >>> pc2table[i]) & 0x1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.expand = function expand(r, out, off) { + var outL = 0; + var outR = 0; + + outL = ((r & 1) << 5) | (r >>> 27); + for (var i = 23; i >= 15; i -= 4) { + outL <<= 6; + outL |= (r >>> i) & 0x3f; + } + for (var i = 11; i >= 3; i -= 4) { + outR |= (r >>> i) & 0x3f; + outR <<= 6; + } + outR |= ((r & 0x1f) << 1) | (r >>> 31); + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +var sTable = [ + 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, + 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, + 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, + 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, + + 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, + 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, + 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, + 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, + + 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, + 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, + 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, + 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, + + 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, + 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, + 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, + 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, + + 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, + 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, + 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, + 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, + + 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, + 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, + 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, + 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, + + 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, + 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, + 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, + 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, + + 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, + 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, + 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, + 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 +]; + +exports.substitute = function substitute(inL, inR) { + var out = 0; + for (var i = 0; i < 4; i++) { + var b = (inL >>> (18 - i * 6)) & 0x3f; + var sb = sTable[i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + for (var i = 0; i < 4; i++) { + var b = (inR >>> (18 - i * 6)) & 0x3f; + var sb = sTable[4 * 0x40 + i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + return out >>> 0; +}; + +var permuteTable = [ + 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, + 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 +]; + +exports.permute = function permute(num) { + var out = 0; + for (var i = 0; i < permuteTable.length; i++) { + out <<= 1; + out |= (num >>> permuteTable[i]) & 0x1; + } + return out >>> 0; +}; + +exports.padSplit = function padSplit(num, size, group) { + var str = num.toString(2); + while (str.length < size) + str = '0' + str; + + var out = []; + for (var i = 0; i < size; i += group) + out.push(str.slice(i, i + group)); + return out.join(' '); +}; + + +/***/ }), + +/***/ "../../node_modules/diffie-hellman/browser.js": +/*!****************************************************!*\ + !*** ../../node_modules/diffie-hellman/browser.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var generatePrime = __webpack_require__(/*! ./lib/generatePrime */ "../../node_modules/diffie-hellman/lib/generatePrime.js") +var primes = __webpack_require__(/*! ./lib/primes.json */ "../../node_modules/diffie-hellman/lib/primes.json") + +var DH = __webpack_require__(/*! ./lib/dh */ "../../node_modules/diffie-hellman/lib/dh.js") + +function getDiffieHellman (mod) { + var prime = new Buffer(primes[mod].prime, 'hex') + var gen = new Buffer(primes[mod].gen, 'hex') + + return new DH(prime, gen) +} + +var ENCODINGS = { + 'binary': true, 'hex': true, 'base64': true +} + +function createDiffieHellman (prime, enc, generator, genc) { + if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { + return createDiffieHellman(prime, 'binary', enc, generator) + } + + enc = enc || 'binary' + genc = genc || 'binary' + generator = generator || new Buffer([2]) + + if (!Buffer.isBuffer(generator)) { + generator = new Buffer(generator, genc) + } + + if (typeof prime === 'number') { + return new DH(generatePrime(prime, generator), generator, true) + } + + if (!Buffer.isBuffer(prime)) { + prime = new Buffer(prime, enc) + } + + return new DH(prime, generator, true) +} + +exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman +exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman + + +/***/ }), + +/***/ "../../node_modules/diffie-hellman/lib/dh.js": +/*!***************************************************!*\ + !*** ../../node_modules/diffie-hellman/lib/dh.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js"); +var MillerRabin = __webpack_require__(/*! miller-rabin */ "../../node_modules/miller-rabin/lib/mr.js"); +var millerRabin = new MillerRabin(); +var TWENTYFOUR = new BN(24); +var ELEVEN = new BN(11); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var primes = __webpack_require__(/*! ./generatePrime */ "../../node_modules/diffie-hellman/lib/generatePrime.js"); +var randomBytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js"); +module.exports = DH; + +function setPublicKey(pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this._pub = new BN(pub); + return this; +} + +function setPrivateKey(priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + this._priv = new BN(priv); + return this; +} + +var primeCache = {}; +function checkPrime(prime, generator) { + var gen = generator.toString('hex'); + var hex = [gen, prime.toString(16)].join('_'); + if (hex in primeCache) { + return primeCache[hex]; + } + var error = 0; + + if (prime.isEven() || + !primes.simpleSieve || + !primes.fermatTest(prime) || + !millerRabin.test(prime)) { + //not a prime so +1 + error += 1; + + if (gen === '02' || gen === '05') { + // we'd be able to check the generator + // it would fail so +8 + error += 8; + } else { + //we wouldn't be able to test the generator + // so +4 + error += 4; + } + primeCache[hex] = error; + return error; + } + if (!millerRabin.test(prime.shrn(1))) { + //not a safe prime + error += 2; + } + var rem; + switch (gen) { + case '02': + if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { + // unsuidable generator + error += 8; + } + break; + case '05': + rem = prime.mod(TEN); + if (rem.cmp(THREE) && rem.cmp(SEVEN)) { + // prime mod 10 needs to equal 3 or 7 + error += 8; + } + break; + default: + error += 4; + } + primeCache[hex] = error; + return error; +} + +function DH(prime, generator, malleable) { + this.setGenerator(generator); + this.__prime = new BN(prime); + this._prime = BN.mont(this.__prime); + this._primeLen = prime.length; + this._pub = undefined; + this._priv = undefined; + this._primeCode = undefined; + if (malleable) { + this.setPublicKey = setPublicKey; + this.setPrivateKey = setPrivateKey; + } else { + this._primeCode = 8; + } +} +Object.defineProperty(DH.prototype, 'verifyError', { + enumerable: true, + get: function () { + if (typeof this._primeCode !== 'number') { + this._primeCode = checkPrime(this.__prime, this.__gen); + } + return this._primeCode; + } +}); +DH.prototype.generateKeys = function () { + if (!this._priv) { + this._priv = new BN(randomBytes(this._primeLen)); + } + this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); + return this.getPublicKey(); +}; + +DH.prototype.computeSecret = function (other) { + other = new BN(other); + other = other.toRed(this._prime); + var secret = other.redPow(this._priv).fromRed(); + var out = new Buffer(secret.toArray()); + var prime = this.getPrime(); + if (out.length < prime.length) { + var front = new Buffer(prime.length - out.length); + front.fill(0); + out = Buffer.concat([front, out]); + } + return out; +}; + +DH.prototype.getPublicKey = function getPublicKey(enc) { + return formatReturnValue(this._pub, enc); +}; + +DH.prototype.getPrivateKey = function getPrivateKey(enc) { + return formatReturnValue(this._priv, enc); +}; + +DH.prototype.getPrime = function (enc) { + return formatReturnValue(this.__prime, enc); +}; + +DH.prototype.getGenerator = function (enc) { + return formatReturnValue(this._gen, enc); +}; + +DH.prototype.setGenerator = function (gen, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(gen)) { + gen = new Buffer(gen, enc); + } + this.__gen = gen; + this._gen = new BN(gen); + return this; +}; + +function formatReturnValue(bn, enc) { + var buf = new Buffer(bn.toArray()); + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} + + +/***/ }), + +/***/ "../../node_modules/diffie-hellman/lib/generatePrime.js": +/*!**************************************************************!*\ + !*** ../../node_modules/diffie-hellman/lib/generatePrime.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var randomBytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js"); +module.exports = findPrime; +findPrime.simpleSieve = simpleSieve; +findPrime.fermatTest = fermatTest; +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js"); +var TWENTYFOUR = new BN(24); +var MillerRabin = __webpack_require__(/*! miller-rabin */ "../../node_modules/miller-rabin/lib/mr.js"); +var millerRabin = new MillerRabin(); +var ONE = new BN(1); +var TWO = new BN(2); +var FIVE = new BN(5); +var SIXTEEN = new BN(16); +var EIGHT = new BN(8); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var ELEVEN = new BN(11); +var FOUR = new BN(4); +var TWELVE = new BN(12); +var primes = null; + +function _getPrimes() { + if (primes !== null) + return primes; + + var limit = 0x100000; + var res = []; + res[0] = 2; + for (var i = 1, k = 3; k < limit; k += 2) { + var sqrt = Math.ceil(Math.sqrt(k)); + for (var j = 0; j < i && res[j] <= sqrt; j++) + if (k % res[j] === 0) + break; + + if (i !== j && res[j] <= sqrt) + continue; + + res[i++] = k; + } + primes = res; + return res; +} + +function simpleSieve(p) { + var primes = _getPrimes(); + + for (var i = 0; i < primes.length; i++) + if (p.modn(primes[i]) === 0) { + if (p.cmpn(primes[i]) === 0) { + return true; + } else { + return false; + } + } + + return true; +} + +function fermatTest(p) { + var red = BN.mont(p); + return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +} + +function findPrime(bits, gen) { + if (bits < 16) { + // this is what openssl does + if (gen === 2 || gen === 5) { + return new BN([0x8c, 0x7b]); + } else { + return new BN([0x8c, 0x27]); + } + } + gen = new BN(gen); + + var num, n2; + + while (true) { + num = new BN(randomBytes(Math.ceil(bits / 8))); + while (num.bitLength() > bits) { + num.ishrn(1); + } + if (num.isEven()) { + num.iadd(ONE); + } + if (!num.testn(1)) { + num.iadd(TWO); + } + if (!gen.cmp(TWO)) { + while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { + num.iadd(FOUR); + } + } else if (!gen.cmp(FIVE)) { + while (num.mod(TEN).cmp(THREE)) { + num.iadd(FOUR); + } + } + n2 = num.shrn(1); + if (simpleSieve(n2) && simpleSieve(num) && + fermatTest(n2) && fermatTest(num) && + millerRabin.test(n2) && millerRabin.test(num)) { + return num; + } + } + +} + + +/***/ }), + +/***/ "../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js ***! + \**********************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(/*! buffer */ "?7dc1").Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); } - else { - swap = line.charAt(column - 1) + line.charAt(column - 2); - range = new Range(cursor.row, column - 2, cursor.row, column); + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - this.session.replace(range, swap); - this.session.selection.moveToPosition(range.end); - }; - Editor.prototype.toLowerCase = function () { - var originalRange = this.getSelectionRange(); - if (this.selection.isEmpty()) { - this.selection.selectWord(); + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - var range = this.getSelectionRange(); - var text = this.session.getTextRange(range); - this.session.replace(range, text.toLowerCase()); - this.selection.setSelectionRange(originalRange); - }; - Editor.prototype.toUpperCase = function () { - var originalRange = this.getSelectionRange(); - if (this.selection.isEmpty()) { - this.selection.selectWord(); + } + } + return this.strip(); + }; + + function parseHex4Bits (string, index) { + var c = string.charCodeAt(index); + // 'A' - 'F' + if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return (c - 48) & 0xf; + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - var range = this.getSelectionRange(); - var text = this.session.getTextRange(range); - this.session.replace(range, text.toUpperCase()); - this.selection.setSelectionRange(originalRange); - }; - Editor.prototype.indent = function () { - var session = this.session; - var range = this.getSelectionRange(); - if (range.start.row < range.end.row) { - var rows = this.$getSelectedRows(); - session.indentRows(rows.first, rows.last, "\t"); - return; + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - else if (range.start.column < range.end.column) { - var text = session.getTextRange(range); - if (!/^\s+$/.test(text)) { - var rows = this.$getSelectedRows(); - session.indentRows(rows.first, rows.last, "\t"); - return; - } + } + } + + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this.strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; } - var line = session.getLine(range.start.row); - var position = range.start; - var size = session.getTabSize(); - var column = session.documentToScreenColumn(position.row, position.column); - if (this.session.getUseSoftTabs()) { - var count = (size - column % size); - var indentString = lang.stringRepeat(" ", count); + off += 2; + if (off >= 26) { + off -= 26; + i--; } - else { - var count = column % size; - while (line[range.start.column - 1] == " " && count) { - range.start.column--; - count--; - } - this.selection.setSelectionRange(range); - indentString = "\t"; + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; } - return this.insert(indentString); - }; - Editor.prototype.blockIndent = function () { - var rows = this.$getSelectedRows(); - this.session.indentRows(rows.first, rows.last, "\t"); - }; - Editor.prototype.blockOutdent = function () { - var selection = this.session.getSelection(); - this.session.outdentRows(selection.getRange()); + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); }; - Editor.prototype.sortLines = function () { - var rows = this.$getSelectedRows(); - var session = this.session; - var lines = []; - for (var i = rows.first; i <= rows.last; i++) - lines.push(session.getLine(i)); - lines.sort(function (a, b) { - if (a.toLowerCase() < b.toLowerCase()) - return -1; - if (a.toLowerCase() > b.toLowerCase()) - return 1; - return 0; - }); - var deleteRange = new Range(0, 0, 0, 0); - for (var i = rows.first; i <= rows.last; i++) { - var line = session.getLine(i); - deleteRange.start.row = i; - deleteRange.end.row = i; - deleteRange.end.column = line.length; - session.replace(deleteRange, lines[i - rows.first]); + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } } - }; - Editor.prototype.toggleCommentLines = function () { - var state = this.session.getState(this.getCursorPosition().row); - var rows = this.$getSelectedRows(); - this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); - }; - Editor.prototype.toggleBlockComment = function () { - var cursor = this.getCursorPosition(); - var state = this.session.getState(cursor.row); - var range = this.getSelectionRange(); - this.session.getMode().toggleBlockComment(state, this.session, range, cursor); - }; - Editor.prototype.getNumberAt = function (row, column) { - var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g; - _numberRx.lastIndex = 0; - var s = this.session.getLine(row); - while (_numberRx.lastIndex < column) { - var m = _numberRx.exec(s); - if (m.index <= column && m.index + m[0].length >= column) { - var number = { - value: m[0], - start: m.index, - end: m.index + m[0].length - }; - return number; - } + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; } - return null; + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a }; - Editor.prototype.modifyNumber = function (amount) { - var row = this.selection.getCursor().row; - var column = this.selection.getCursor().column; - var charRange = new Range(row, column - 1, row, column); - var c = this.session.getTextRange(charRange); - if (!isNaN(parseFloat(c)) && isFinite(c)) { - var nr = this.getNumberAt(row, column); - if (nr) { - var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; - var decimals = nr.start + nr.value.length - fp; - var t = parseFloat(nr.value); - t *= Math.pow(10, decimals); - if (fp !== nr.end && column < fp) { - amount *= Math.pow(10, nr.end - column - 1); - } - else { - amount *= Math.pow(10, nr.end - column); - } - t += amount; - t /= Math.pow(10, decimals); - var nnr = t.toFixed(decimals); - var replaceRange = new Range(row, nr.start, row, nr.end); - this.session.replace(replaceRange, nnr); - this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length)); - } - } - else { - this.toggleWord(); + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); } - }; - Editor.prototype.toggleWord = function () { - var row = this.selection.getCursor().row; - var column = this.selection.getCursor().column; - this.selection.selectWord(); - var currentState = this.getSelectedText(); - var currWordStart = this.selection.getWordRange().start.column; - var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\s/); - var delta = column - currWordStart - 1; - if (delta < 0) - delta = 0; - var curLength = 0, itLength = 0; - var that = this; - if (currentState.match(/[A-Za-z0-9_]+/)) { - wordParts.forEach(function (item, i) { - itLength = curLength + item.length; - if (delta >= curLength && delta <= itLength) { - currentState = item; - that.selection.clearSelection(); - that.moveCursorTo(row, curLength + currWordStart); - that.selection.selectTo(row, itLength + currWordStart); - } - curLength = itLength; - }); + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); } - var wordPairs = this.$toggleWordPairs; - var reg; - for (var i = 0; i < wordPairs.length; i++) { - var item = wordPairs[i]; - for (var j = 0; j <= 1; j++) { - var negate = +!j; - var firstCondition = currentState.match(new RegExp('^\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\s?$', 'i')); - if (firstCondition) { - var secondCondition = currentState.match(new RegExp('([_]|^|\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\s)', 'g')); - if (secondCondition) { - reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) { - var res = item[negate]; - if (result.toUpperCase() == result) { - res = res.toUpperCase(); - } - else if (result.charAt(0).toUpperCase() == result.charAt(0)) { - res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1); - } - return res; - }); - this.insert(reg); - reg = ""; - } - } - } + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); + } + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) }; - Editor.prototype.findLinkAt = function (row, column) { - var e_1, _a; - var line = this.session.getLine(row); - var wordParts = line.split(/((?:https?|ftp):\/\/[\S]+)/); - var columnPosition = column; - if (columnPosition < 0) - columnPosition = 0; - var previousPosition = 0, currentPosition = 0, match; - try { - for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) { - var item = wordParts_1_1.value; - currentPosition = previousPosition + item.length; - if (columnPosition >= previousPosition && columnPosition <= currentPosition) { - if (item.match(/((?:https?|ftp):\/\/[\S]+)/)) { - match = item.replace(/[\s:.,'";}\]]+$/, ""); - break; - } - } - previousPosition = currentPosition; - } + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1); - } - finally { if (e_1) throw e_1.error; } + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); } - return match; - }; - Editor.prototype.openLink = function () { - var cursor = this.selection.getCursor(); - var url = this.findLinkAt(cursor.row, cursor.column); - if (url) - window.open(url, '_blank'); - return url != null; - }; - Editor.prototype.removeLines = function () { - var rows = this.$getSelectedRows(); - this.session.removeFullLines(rows.first, rows.last); - this.clearSelection(); - }; - Editor.prototype.duplicateSelection = function () { - var sel = this.selection; - var doc = this.session; - var range = sel.getRange(); - var reverse = sel.isBackwards(); - if (range.isEmpty()) { - var row = range.start.row; - doc.duplicateLines(row, row); + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is BN v4 instance + r.strip(); + } else { + // r is BN v5 instance + r._strip(); + } + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); } - else { - var point = reverse ? range.start : range.end; - var endPoint = doc.insert(point, doc.getTextRange(range)); - range.start = point; - range.end = endPoint; - sel.setSelectionRange(range, reverse); + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; } - }; - Editor.prototype.moveLinesDown = function () { - this.$moveLines(1, false); - }; - Editor.prototype.moveLinesUp = function () { - this.$moveLines(-1, false); - }; - Editor.prototype.moveText = function (range, toPosition, copy) { - return this.session.moveText(range, toPosition, copy); - }; - Editor.prototype.copyLinesUp = function () { - this.$moveLines(-1, true); - }; - Editor.prototype.copyLinesDown = function () { - this.$moveLines(1, true); - }; - Editor.prototype.$moveLines = function (dir, copy) { - var rows, moved; - var selection = this.selection; - if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { - var range = selection.toOrientedRange(); - rows = this.$getSelectedRows(range); - moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir); - if (copy && dir == -1) - moved = 0; - range.moveBy(moved, 0); - selection.fromOrientedRange(range); + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic.js": +/*!***************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var elliptic = exports; + +elliptic.version = (__webpack_require__(/*! ../package.json */ "../../node_modules/elliptic/package.json").version); +elliptic.utils = __webpack_require__(/*! ./elliptic/utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +elliptic.rand = __webpack_require__(/*! brorand */ "../../node_modules/brorand/index.js"); +elliptic.curve = __webpack_require__(/*! ./elliptic/curve */ "../../node_modules/elliptic/lib/elliptic/curve/index.js"); +elliptic.curves = __webpack_require__(/*! ./elliptic/curves */ "../../node_modules/elliptic/lib/elliptic/curves.js"); + +// Protocols +elliptic.ec = __webpack_require__(/*! ./elliptic/ec */ "../../node_modules/elliptic/lib/elliptic/ec/index.js"); +elliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ "../../node_modules/elliptic/lib/elliptic/eddsa/index.js"); + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/curve/base.js": +/*!**************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/curve/base.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; + +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); + + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); + + // Useful for many curves + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); + + // Curve configuration, optional + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); + + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); + + this._bitLength = this.n ? this.n.bitLength() : 0; + + // Generalized Greg Maxwell's trick + var adjustCount = this.n && this.p.div(this.n); + if (!adjustCount || adjustCount.cmpn(100) > 0) { + this.redN = null; + } else { + this._maxwellTrick = true; + this.redN = this.n.toRed(this.red); + } +} +module.exports = BaseCurve; + +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); + + var naf = getNAF(k, 1, this._bitLength); + var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; + + // Translate into more windowed form + var repr = []; + var j; + var nafW; + for (j = 0; j < naf.length; j += doubles.step) { + nafW = 0; + for (var l = j + doubles.step - 1; l >= j; l--) + nafW = (nafW << 1) + naf[l]; + repr.push(nafW); + } + + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (j = 0; j < repr.length; j++) { + nafW = repr[j]; + if (nafW === i) + b = b.mixedAdd(doubles.points[j]); + else if (nafW === -i) + b = b.mixedAdd(doubles.points[j].neg()); + } + a = a.add(b); + } + return a.toP(); +}; + +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; + + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; + + // Get NAF form + var naf = getNAF(k, w, this._bitLength); + + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var l = 0; i >= 0 && naf[i] === 0; i--) + l++; + if (i >= 0) + l++; + acc = acc.dblp(l); + + if (i < 0) + break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) + acc = acc.mixedAdd(wnd[(z - 1) >> 1]); + else + acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); + } else { + // J +- J + if (z > 0) + acc = acc.add(wnd[(z - 1) >> 1]); + else + acc = acc.add(wnd[(-z - 1) >> 1].neg()); + } + } + return p.type === 'affine' ? acc.toP() : acc; +}; + +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, + points, + coeffs, + len, + jacobianResult) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; + + // Fill all arrays + var max = 0; + var i; + var j; + var p; + for (i = 0; i < len; i++) { + p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } + + // Comb small window NAFs + for (i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength); + naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } + + var comb = [ + points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b], /* 7 */ + ]; + + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } + + var index = [ + -3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3, /* 1 1 */ + ]; + + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; + + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } + + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (i = max; i >= 0; i--) { + var k = 0; + + while (i >= 0) { + var zero = true; + for (j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) + zero = false; + } + if (!zero) + break; + k++; + i--; + } + if (i >= 0) + k++; + acc = acc.dblp(k); + if (i < 0) + break; + + for (j = 0; j < len; j++) { + var z = tmp[j]; + p; + if (z === 0) + continue; + else if (z > 0) + p = wnd[j][(z - 1) >> 1]; + else if (z < 0) + p = wnd[j][(-z - 1) >> 1].neg(); + + if (p.type === 'affine') + acc = acc.mixedAdd(p); + else + acc = acc.add(p); + } + } + // Zeroify references + for (i = 0; i < len; i++) + wnd[i] = null; + + if (jacobianResult) + return acc; + else + return acc.toP(); +}; + +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; + +BasePoint.prototype.eq = function eq(/*other*/) { + throw new Error('Not implemented'); +}; + +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; + +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); + + var len = this.p.byteLength(); + + // uncompressed, hybrid-odd, hybrid-even + if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && + bytes.length - 1 === 2 * len) { + if (bytes[0] === 0x06) + assert(bytes[bytes.length - 1] % 2 === 0); + else if (bytes[0] === 0x07) + assert(bytes[bytes.length - 1] % 2 === 1); + + var res = this.point(bytes.slice(1, 1 + len), + bytes.slice(1 + len, 1 + 2 * len)); + + return res; + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && + bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + throw new Error('Unknown point format'); +}; + +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; + +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); + + if (compact) + return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); + + return [ 0x04 ].concat(x, this.getY().toArray('be', len)); +}; + +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; + +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) + return this; + + var precomputed = { + doubles: null, + naf: null, + beta: null, + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; + + return this; +}; + +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) + return false; + + var doubles = this.precomputed.doubles; + if (!doubles) + return false; + + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; + +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) + return this.precomputed.doubles; + + var doubles = [ this ]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) + acc = acc.dbl(); + doubles.push(acc); + } + return { + step: step, + points: doubles, + }; +}; + +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) + return this.precomputed.naf; + + var res = [ this ]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) + res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res, + }; +}; + +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; + +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) + r = r.dbl(); + return r; +}; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/curve/edwards.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/curve/edwards.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var Base = __webpack_require__(/*! ./base */ "../../node_modules/elliptic/lib/elliptic/curve/base.js"); + +var assert = utils.assert; + +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + + Base.call(this, 'edwards', conf); + + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; + +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) + return num.redNeg(); + else + return this.a.redMul(num); +}; + +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) + return num; + else + return this.c.redMul(num); +}; + +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; + +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) + y = y.toRed(this.red); + + // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.c2); + var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); + var x2 = lhs.redMul(rhs.redInvm()); + + if (x2.cmp(this.zero) === 0) { + if (odd) + throw new Error('invalid point'); + else + return this.point(this.zero, y); + } + + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + if (x.fromRed().isOdd() !== odd) + x = x.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) + return true; + + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); + + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + + return lhs.cmp(rhs) === 0; +}; + +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) + this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; + + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) + this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); + +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && + (this.y.cmp(this.z) === 0 || + (this.zOne && this.y.cmp(this.curve.c) === 0)); +}; + +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); + + var nx; + var ny; + var nz; + var e; + var h; + var j; + if (this.curve.twisted) { + // E = a * C + e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + h = this.z.redSqr(); + // J = F - 2 * H + j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + e = c.redAdd(d); + // H = (c * Z1)^2 + h = this.curve._mulC(this.z).redSqr(); + // J = E - 2 * H + j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + // Double in extended coordinates + if (this.curve.extended) + return this._extDbl(); + else + return this._projDbl(); +}; + +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.add = function add(p) { + if (this.isInfinity()) + return p; + if (p.isInfinity()) + return this; + + if (this.curve.extended) + return this._extAdd(p); + else + return this._projAdd(p); +}; + +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); +}; + +Point.prototype.normalize = function normalize() { + if (this.zOne) + return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) + this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; + +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), + this.y, + this.z, + this.t && this.t.redNeg()); +}; + +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; + +Point.prototype.eq = function eq(other) { + return this === other || + this.getX().cmp(other.getX()) === 0 && + this.getY().cmp(other.getY()) === 0; +}; + +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/curve/index.js": +/*!***************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/curve/index.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var curve = exports; + +curve.base = __webpack_require__(/*! ./base */ "../../node_modules/elliptic/lib/elliptic/curve/base.js"); +curve.short = __webpack_require__(/*! ./short */ "../../node_modules/elliptic/lib/elliptic/curve/short.js"); +curve.mont = __webpack_require__(/*! ./mont */ "../../node_modules/elliptic/lib/elliptic/curve/mont.js"); +curve.edwards = __webpack_require__(/*! ./edwards */ "../../node_modules/elliptic/lib/elliptic/curve/edwards.js"); + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/curve/mont.js": +/*!**************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/curve/mont.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var Base = __webpack_require__(/*! ./base */ "../../node_modules/elliptic/lib/elliptic/curve/base.js"); + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); + +function MontCurve(conf) { + Base.call(this, 'mont', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); +} +inherits(MontCurve, Base); +module.exports = MontCurve; + +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); + + return y.redSqr().cmp(rhs) === 0; +}; + +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + } +} +inherits(Point, Base.BasePoint); + +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); +}; + +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; + +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +Point.prototype.precompute = function precompute() { + // No-op +}; + +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + + // A = X1 + Z1 + var a = this.x.redAdd(this.z); + // AA = A^2 + var aa = a.redSqr(); + // B = X1 - Z1 + var b = this.x.redSub(this.z); + // BB = B^2 + var bb = b.redSqr(); + // C = AA - BB + var c = aa.redSub(bb); + // X3 = AA * BB + var nx = aa.redMul(bb); + // Z3 = C * (BB + A24 * C) + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); +}; + +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + + // A = X2 + Z2 + var a = this.x.redAdd(this.z); + // B = X2 - Z2 + var b = this.x.redSub(this.z); + // C = X3 + Z3 + var c = p.x.redAdd(p.z); + // D = X3 - Z3 + var d = p.x.redSub(p.z); + // DA = D * A + var da = d.redMul(a); + // CB = C * B + var cb = c.redMul(b); + // X5 = Z1 * (DA + CB)^2 + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); + // Z5 = X1 * (DA - CB)^2 + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); +}; + +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + var b = this.curve.point(null, null); // (N / 2) * Q + var c = this; // Q + + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) + bits.push(t.andln(1)); + + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); + // N * Q = 2 * ((N / 2) * Q + Q)) + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); + // N * Q + Q = 2 * ((N / 2) * Q + Q) + a = a.dbl(); + } + } + return b; +}; + +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.jumlAdd = function jumlAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; +}; + +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; +}; + +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); + + return this.x.fromRed(); +}; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/curve/short.js": +/*!***************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/curve/short.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var Base = __webpack_require__(/*! ./base */ "../../node_modules/elliptic/lib/elliptic/curve/base.js"); + +var assert = utils.assert; + +function ShortCurve(conf) { + Base.call(this, 'short', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; + +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) + return; + + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } + + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function(vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16), + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + + return { + beta: beta, + lambda: lambda, + basis: basis, + }; +}; + +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [ l1, l2 ]; +}; + +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); + + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; + + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; + + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; + + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } + + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + + return [ + { a: a1, b: b1 }, + { a: a2, b: b2 }, + ]; +}; + +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); + + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { k1: k1, k2: k2 }; +}; + +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) + return true; + + var x = point.x; + var y = point.y; + + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; + +ShortCurve.prototype._endoWnafMulAdd = + function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); } - else { - var ranges = selection.rangeList.ranges; - selection.rangeList.detach(this.session); - this.inVirtualSelectionMode = true; - var diff = 0; - var totalDiff = 0; - var l = ranges.length; - for (var i = 0; i < l; i++) { - var rangeIndex = i; - ranges[i].moveBy(diff, 0); - rows = this.$getSelectedRows(ranges[i]); - var first = rows.first; - var last = rows.last; - while (++i < l) { - if (totalDiff) - ranges[i].moveBy(totalDiff, 0); - var subRows = this.$getSelectedRows(ranges[i]); - if (copy && subRows.first != last) - break; - else if (!copy && subRows.first > last + 1) - break; - last = subRows.last; - } - i--; - diff = this.session.$moveLines(first, last, copy ? 0 : dir); - if (copy && dir == -1) - rangeIndex = i + 1; - while (rangeIndex <= i) { - ranges[rangeIndex].moveBy(diff, 0); - rangeIndex++; - } - if (!copy) - diff = 0; - totalDiff += diff; - } - selection.fromOrientedRange(selection.ranges[0]); - selection.rangeList.attach(this.session); - this.inVirtualSelectionMode = false; + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); } + + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); + + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + return res; }; - Editor.prototype.$getSelectedRows = function (range) { - range = (range || this.getSelectionRange()).collapseRows(); - return { - first: this.session.getRowFoldStart(range.start.row), - last: this.session.getRowFoldEnd(range.end.row) - }; - }; - Editor.prototype.onCompositionStart = function (compositionState) { - this.renderer.showComposition(compositionState); - }; - Editor.prototype.onCompositionUpdate = function (text) { - this.renderer.setCompositionText(text); - }; - Editor.prototype.onCompositionEnd = function () { - this.renderer.hideComposition(); - }; - Editor.prototype.getFirstVisibleRow = function () { - return this.renderer.getFirstVisibleRow(); + +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} +inherits(Point, Base.BasePoint); + +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; + +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; + +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) + return; + + var pre = this.precomputed; + if (pre && pre.beta) + return pre.beta; + + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); }; - Editor.prototype.getLastVisibleRow = function () { - return this.renderer.getLastVisibleRow(); + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul), + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul), + }, }; - Editor.prototype.isRowVisible = function (row) { - return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); + } + return beta; +}; + +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) + return [ this.x, this.y ]; + + return [ this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1), + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1), + }, + } ]; +}; + +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') + obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) + return res; + + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [ res ].concat(pre.doubles.points.map(obj2point)), + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [ res ].concat(pre.naf.points.map(obj2point)), + }, + }; + return res; +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; + +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) + return p; + + // P + O = P + if (p.inf) + return this; + + // P + P = 2P + if (this.eq(p)) + return this.dbl(); + + // P + (-P) = O + if (this.neg().eq(p)) + return this.curve.point(null, null); + + // P + Q = O + if (this.x.cmp(p.x) === 0) + return this.curve.point(null, null); + + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) + c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.dbl = function dbl() { + if (this.inf) + return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) + return this.curve.point(null, null); + + var a = this.curve.a; + + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; + +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + if (this.isInfinity()) + return this; + else if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else if (this.curve.endo) + return this.curve._endoWnafMulAdd([ this ], [ k ]); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs, true); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; + +Point.prototype.eq = function eq(p) { + return this === p || + this.inf === p.inf && + (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) + return this; + + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function(p) { + return p.neg(); }; - Editor.prototype.isRowFullyVisible = function (row) { - return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate), + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate), + }, }; - Editor.prototype.$getVisibleRowCount = function () { - return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; + } + return res; +}; + +Point.prototype.toJ = function toJ() { + if (this.inf) + return this.curve.jpoint(null, null, null); + + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; + +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); + +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; + +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) + return this.curve.point(null, null); + + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + + return this.curve.point(ax, ay); +}; + +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; + +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) + return p; + + // P + O = P + if (p.isInfinity()) + return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) + return p.toJ(); + + // P + O = P + if (p.isInfinity()) + return this; + + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) + return this; + if (this.isInfinity()) + return this; + if (!pow) + return this.dbl(); + + var i; + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (i = 0; i < pow; i++) + r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) + jz4 = jz4.redMul(jyd4); + + jx = nx; + jz = nz; + jyd = dny; + } + + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; + +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + if (this.curve.zeroA) + return this._zeroDbl(); + else if (this.curve.threeA) + return this._threeDbl(); + else + return this._dbl(); +}; + +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) + return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + + return this.curve._wnafMul(this, k); +}; + +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') + return this.eq(p.toJ()); + + if (this === p) + return true; + + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) + return false; + + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; + +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/curves.js": +/*!**********************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/curves.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var curves = exports; + +var hash = __webpack_require__(/*! hash.js */ "../../node_modules/hash.js/lib/hash.js"); +var curve = __webpack_require__(/*! ./curve */ "../../node_modules/elliptic/lib/elliptic/curve/index.js"); +var utils = __webpack_require__(/*! ./utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); + +var assert = utils.assert; + +function PresetCurve(options) { + if (options.type === 'short') + this.curve = new curve.short(options); + else if (options.type === 'edwards') + this.curve = new curve.edwards(options); + else + this.curve = new curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; + + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} +curves.PresetCurve = PresetCurve; + +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function() { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve, + }); + return curve; + }, + }); +} + +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: [ + '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', + '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811', + ], +}); + +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: [ + 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', + 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34', + ], +}); + +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: [ + '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', + '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5', + ], +}); + +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: [ + 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + + '5502f25d bf55296c 3a545e38 72760ab7', + '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f', + ], +}); + +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: [ + '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', + '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + + '3fad0761 353c7086 a272c240 88be9476 9fd16650', + ], +}); + +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '1', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '9', + ], +}); + +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', + + // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658', + ], +}); + +var pre; +try { + pre = __webpack_require__(/*! ./precomputed/secp256k1 */ "../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js"); +} catch (e) { + pre = undefined; +} + +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, + + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [ + { + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3', + }, + { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15', + }, + ], + + gRed: false, + g: [ + '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', + '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', + pre, + ], +}); + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/ec/index.js": +/*!************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/ec/index.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); +var HmacDRBG = __webpack_require__(/*! hmac-drbg */ "../../node_modules/hmac-drbg/lib/hmac-drbg.js"); +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +var curves = __webpack_require__(/*! ../curves */ "../../node_modules/elliptic/lib/elliptic/curves.js"); +var rand = __webpack_require__(/*! brorand */ "../../node_modules/brorand/index.js"); +var assert = utils.assert; + +var KeyPair = __webpack_require__(/*! ./key */ "../../node_modules/elliptic/lib/elliptic/ec/key.js"); +var Signature = __webpack_require__(/*! ./signature */ "../../node_modules/elliptic/lib/elliptic/ec/signature.js"); + +function EC(options) { + if (!(this instanceof EC)) + return new EC(options); + + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(Object.prototype.hasOwnProperty.call(curves, options), + 'Unknown curve ' + options); + + options = curves[options]; + } + + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof curves.PresetCurve) + options = { curve: options }; + + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; + + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); + + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; + +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; + +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; + +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; + +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) + options = {}; + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + entropy: options.entropy || rand(this.hash.hmacStrength), + entropyEnc: options.entropy && options.entropyEnc || 'utf8', + nonce: this.n.toArray(), + }); + + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + for (;;) { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) + continue; + + priv.iaddn(1); + return this.keyFromPrivate(priv); + } +}; + +EC.prototype._truncateToN = function _truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) + msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) + return msg.sub(this.n); + else + return msg; +}; + +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) + options = {}; + + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); + + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); + + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + }); + + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); + + for (var iter = 0; ; iter++) { + var k = options.k ? + options.k(iter) : + new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) + continue; + + var kp = this.g.mul(k); + if (kp.isInfinity()) + continue; + + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) + continue; + + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) + continue; + + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | + (kpX.cmp(r) !== 0 ? 2 : 0); + + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + + return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); + } +}; + +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) + return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) + return false; + + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + var p; + + if (!this.curve._maxwellTrick) { + p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + return p.getX().umod(this.n).cmp(r) === 0; + } + + // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + return p.eqXToP(r); +}; + +EC.prototype.recoverPubKey = function(msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; + + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) + throw new Error('Unable to find sencond key candinate'); + + // 1.1. Let x = r + jn. + if (isSecondKey) + r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); + else + r = this.curve.pointFromX(r, isYOdd); + + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); + + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + return this.g.mulAdd(s1, r, s2); +}; + +EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) + return signature.recoveryParam; + + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + + if (Qprime.eq(Q)) + return i; + } + throw new Error('Unable to find valid recovery factor'); +}; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/ec/key.js": +/*!**********************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/ec/key.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +var assert = utils.assert; + +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; + + // KeyPair(ec, { priv: ..., pub: ... }) + if (options.priv) + this._importPrivate(options.priv, options.privEnc); + if (options.pub) + this._importPublic(options.pub, options.pubEnc); +} +module.exports = KeyPair; + +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) + return pub; + + return new KeyPair(ec, { + pub: pub, + pubEnc: enc, + }); +}; + +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) + return priv; + + return new KeyPair(ec, { + priv: priv, + privEnc: enc, + }); +}; + +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); + + if (pub.isInfinity()) + return { result: false, reason: 'Invalid public key' }; + if (!pub.validate()) + return { result: false, reason: 'Public key is not a point' }; + if (!pub.mul(this.ec.curve.n).isInfinity()) + return { result: false, reason: 'Public key * N != O' }; + + return { result: true, reason: null }; +}; + +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } + + if (!this.pub) + this.pub = this.ec.g.mul(this.priv); + + if (!enc) + return this.pub; + + return this.pub.encode(enc, compact); +}; + +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') + return this.priv.toString(16, 2); + else + return this.priv; +}; + +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); + + // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + this.priv = this.priv.umod(this.ec.curve.n); +}; + +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + // Montgomery points only have an `x` coordinate. + // Weierstrass/Edwards points on the other hand have both `x` and + // `y` coordinates. + if (this.ec.curve.type === 'mont') { + assert(key.x, 'Need x coordinate'); + } else if (this.ec.curve.type === 'short' || + this.ec.curve.type === 'edwards') { + assert(key.x && key.y, 'Need both x and y coordinate'); + } + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + this.pub = this.ec.curve.decodePoint(key, enc); +}; + +// ECDH +KeyPair.prototype.derive = function derive(pub) { + if(!pub.validate()) { + assert(pub.validate(), 'public point not validated'); + } + return pub.mul(this.priv).getX(); +}; + +// ECDSA +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); +}; + +KeyPair.prototype.verify = function verify(msg, signature) { + return this.ec.verify(msg, signature, this); +}; + +KeyPair.prototype.inspect = function inspect() { + return ''; +}; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/ec/signature.js": +/*!****************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/ec/signature.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +var assert = utils.assert; + +function Signature(options, enc) { + if (options instanceof Signature) + return options; + + if (this._importDER(options, enc)) + return; + + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) + this.recoveryParam = null; + else + this.recoveryParam = options.recoveryParam; +} +module.exports = Signature; + +function Position() { + this.place = 0; +} + +function getLength(buf, p) { + var initial = buf[p.place++]; + if (!(initial & 0x80)) { + return initial; + } + var octetLen = initial & 0xf; + + // Indefinite length or overflow + if (octetLen === 0 || octetLen > 4) { + return false; + } + + if(buf[p.place] === 0x00) { + return false; + } + + var val = 0; + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + val >>>= 0; + } + + // Leading zeroes + if (val <= 0x7f) { + return false; + } + + p.place = off; + return val; +} + +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; + } + if (i === 0) { + return buf; + } + return buf.slice(i); +} + +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + if (data[p.place++] !== 0x30) { + return false; + } + var len = getLength(data, p); + if (len === false) { + return false; + } + if ((len + p.place) !== data.length) { + return false; + } + if (data[p.place++] !== 0x02) { + return false; + } + var rlen = getLength(data, p); + if (rlen === false) { + return false; + } + if ((data[p.place] & 128) !== 0) { + return false; + } + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + if (data[p.place++] !== 0x02) { + return false; + } + var slen = getLength(data, p); + if (slen === false) { + return false; + } + if (data.length !== slen + p.place) { + return false; + } + if ((data[p.place] & 128) !== 0) { + return false; + } + var s = data.slice(p.place, slen + p.place); + if (r[0] === 0) { + if (r[1] & 0x80) { + r = r.slice(1); + } else { + // Leading zeroes + return false; + } + } + if (s[0] === 0) { + if (s[1] & 0x80) { + s = s.slice(1); + } else { + // Leading zeroes + return false; + } + } + + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; + + return true; +}; + +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; + } + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + while (--octets) { + arr.push((len >>> (octets << 3)) & 0xff); + } + arr.push(len); +} + +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); + + // Pad values + if (r[0] & 0x80) + r = [ 0 ].concat(r); + // Pad values + if (s[0] & 0x80) + s = [ 0 ].concat(s); + + r = rmPadding(r); + s = rmPadding(s); + + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); + } + var arr = [ 0x02 ]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [ 0x30 ]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); +}; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/eddsa/index.js": +/*!***************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/eddsa/index.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var hash = __webpack_require__(/*! hash.js */ "../../node_modules/hash.js/lib/hash.js"); +var curves = __webpack_require__(/*! ../curves */ "../../node_modules/elliptic/lib/elliptic/curves.js"); +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var KeyPair = __webpack_require__(/*! ./key */ "../../node_modules/elliptic/lib/elliptic/eddsa/key.js"); +var Signature = __webpack_require__(/*! ./signature */ "../../node_modules/elliptic/lib/elliptic/eddsa/signature.js"); + +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); + + if (!(this instanceof EDDSA)) + return new EDDSA(curve); + + curve = curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); + + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} + +module.exports = EDDSA; + +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message) + .mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); +}; + +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) { + return false; + } + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); +}; + +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + for (var i = 0; i < arguments.length; i++) + hash.update(arguments[i]); + return utils.intFromLE(hash.digest()).umod(this.curve.n); +}; + +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); +}; + +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; + +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) + return sig; + return new Signature(this, sig); +}; + +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; + +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); + + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; + +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; + +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; + +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/eddsa/key.js": +/*!*************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/eddsa/key.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; + +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) + this._pub = params.pub; + else + this._pubBytes = parseBytes(params.pub); +} + +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) + return pub; + return new KeyPair(eddsa, { pub: pub }); +}; + +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) + return secret; + return new KeyPair(eddsa, { secret: secret }); +}; + +KeyPair.prototype.secret = function secret() { + return this._secret; +}; + +cachedProperty(KeyPair, 'pubBytes', function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); + +cachedProperty(KeyPair, 'pub', function pub() { + if (this._pubBytes) + return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); + +cachedProperty(KeyPair, 'privBytes', function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; + + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; + + return a; +}); + +cachedProperty(KeyPair, 'priv', function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); + +cachedProperty(KeyPair, 'hash', function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); + +cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); + +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); +}; + +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); +}; + +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; + +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; + +module.exports = KeyPair; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/eddsa/signature.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/eddsa/signature.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/elliptic/lib/elliptic/utils.js"); +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; + +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ +function Signature(eddsa, sig) { + this.eddsa = eddsa; + + if (typeof sig !== 'object') + sig = parseBytes(sig); + + if (Array.isArray(sig)) { + assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size'); + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength), }; - Editor.prototype.$moveByPage = function (dir, select) { - var renderer = this.renderer; - var config = this.renderer.layerConfig; - var rows = dir * Math.floor(config.height / config.lineHeight); - if (select === true) { - this.selection.$moveSelection(function () { - this.moveCursorBy(rows, 0); - }); + } + + assert(sig.R && sig.S, 'Signature without R or S'); + + if (eddsa.isPoint(sig.R)) + this._R = sig.R; + if (sig.S instanceof BN) + this._S = sig.S; + + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} + +cachedProperty(Signature, 'S', function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); + +cachedProperty(Signature, 'R', function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); + +cachedProperty(Signature, 'Rencoded', function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); + +cachedProperty(Signature, 'Sencoded', function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); + +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); +}; + +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); +}; + +module.exports = Signature; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js": +/*!*************************************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js ***! + \*************************************************************************/ +/***/ ((module) => { + +module.exports = { + doubles: { + step: 4, + points: [ + [ + 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', + 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821', + ], + [ + '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', + '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf', + ], + [ + '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', + 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695', + ], + [ + '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', + '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9', + ], + [ + '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', + '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36', + ], + [ + '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', + '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f', + ], + [ + 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', + '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999', + ], + [ + '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', + 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09', + ], + [ + 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', + '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d', + ], + [ + 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', + 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088', + ], + [ + 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', + '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d', + ], + [ + '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', + '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8', + ], + [ + '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', + '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a', + ], + [ + '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', + '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453', + ], + [ + '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', + '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160', + ], + [ + '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', + '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0', + ], + [ + '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', + '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6', + ], + [ + '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', + '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589', + ], + [ + '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', + 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17', + ], + [ + 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', + '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda', + ], + [ + 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', + '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd', + ], + [ + '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', + '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2', + ], + [ + '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', + '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6', + ], + [ + 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', + '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f', + ], + [ + '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', + 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01', + ], + [ + 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', + '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3', + ], + [ + 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', + 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f', + ], + [ + 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', + '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7', + ], + [ + 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', + 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78', + ], + [ + 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', + '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1', + ], + [ + '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', + 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150', + ], + [ + '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', + '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82', + ], + [ + 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', + '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc', + ], + [ + '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', + 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b', + ], + [ + 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', + '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51', + ], + [ + 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', + '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45', + ], + [ + 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', + 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120', + ], + [ + '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', + '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84', + ], + [ + '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', + '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d', + ], + [ + '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', + 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d', + ], + [ + '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', + '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8', + ], + [ + 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', + '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8', + ], + [ + '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', + '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac', + ], + [ + '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', + 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f', + ], + [ + '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', + '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962', + ], + [ + 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', + '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907', + ], + [ + '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', + 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec', + ], + [ + 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', + 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d', + ], + [ + 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', + '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414', + ], + [ + '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', + 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd', + ], + [ + '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', + 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0', + ], + [ + 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', + '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811', + ], + [ + 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', + '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1', + ], + [ + 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', + '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c', + ], + [ + '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', + 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73', + ], + [ + '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', + '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd', + ], + [ + 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', + 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405', + ], + [ + '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', + 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589', + ], + [ + '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', + '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e', + ], + [ + '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', + '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27', + ], + [ + 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', + 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1', + ], + [ + '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', + '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482', + ], + [ + '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', + '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945', + ], + [ + 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', + '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573', + ], + [ + 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', + 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82', + ], + ], + }, + naf: { + wnd: 7, + points: [ + [ + 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', + '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672', + ], + [ + '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', + 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6', + ], + [ + '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', + '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da', + ], + [ + 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', + 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37', + ], + [ + '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', + 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b', + ], + [ + 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', + 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81', + ], + [ + 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', + '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58', + ], + [ + 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', + '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77', + ], + [ + '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', + '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a', + ], + [ + '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', + '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c', + ], + [ + '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', + '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67', + ], + [ + '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', + '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402', + ], + [ + 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', + 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55', + ], + [ + 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', + '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482', + ], + [ + '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', + 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82', + ], + [ + '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', + 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396', + ], + [ + '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', + '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49', + ], + [ + '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', + '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf', + ], + [ + '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', + '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a', + ], + [ + '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', + 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7', + ], + [ + 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', + 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933', + ], + [ + '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', + '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a', + ], + [ + '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', + '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6', + ], + [ + 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', + 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37', + ], + [ + '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', + '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e', + ], + [ + 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', + 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6', + ], + [ + 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', + 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476', + ], + [ + '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', + '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40', + ], + [ + '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', + '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61', + ], + [ + '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', + '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683', + ], + [ + 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', + '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5', + ], + [ + '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', + '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b', + ], + [ + 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', + '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417', + ], + [ + '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', + 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868', + ], + [ + '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', + 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a', + ], + [ + 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', + 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6', + ], + [ + '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', + '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996', + ], + [ + '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', + 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e', + ], + [ + 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', + 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d', + ], + [ + '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', + '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2', + ], + [ + '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', + 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e', + ], + [ + '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', + '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437', + ], + [ + '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', + 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311', + ], + [ + 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', + '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4', + ], + [ + '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', + '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575', + ], + [ + '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', + 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d', + ], + [ + '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', + 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d', + ], + [ + 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', + 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629', + ], + [ + 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', + 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06', + ], + [ + '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', + '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374', + ], + [ + '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', + '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee', + ], + [ + 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', + '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1', + ], + [ + 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', + 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b', + ], + [ + '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', + '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661', + ], + [ + '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', + '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6', + ], + [ + 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', + '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e', + ], + [ + '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', + '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d', + ], + [ + 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', + 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc', + ], + [ + '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', + 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4', + ], + [ + '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', + '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c', + ], + [ + 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', + '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b', + ], + [ + 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', + '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913', + ], + [ + '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', + '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154', + ], + [ + '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', + '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865', + ], + [ + '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', + 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc', + ], + [ + '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', + 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224', + ], + [ + '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', + '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e', + ], + [ + '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', + '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6', + ], + [ + '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', + '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511', + ], + [ + '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', + 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b', + ], + [ + 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', + 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2', + ], + [ + '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', + 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c', + ], + [ + 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', + '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3', + ], + [ + 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', + '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d', + ], + [ + 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', + '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700', + ], + [ + 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', + '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4', + ], + [ + '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', + 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196', + ], + [ + '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', + '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4', + ], + [ + '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', + 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257', + ], + [ + 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', + 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13', + ], + [ + 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', + '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096', + ], + [ + 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', + 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38', + ], + [ + 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', + '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f', + ], + [ + '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', + '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448', + ], + [ + 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', + '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a', + ], + [ + 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', + '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4', + ], + [ + '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', + '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437', + ], + [ + '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', + 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7', + ], + [ + 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', + '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d', + ], + [ + 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', + '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a', + ], + [ + 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', + '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54', + ], + [ + '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', + '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77', + ], + [ + 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', + 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517', + ], + [ + '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', + 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10', + ], + [ + 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', + 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125', + ], + [ + 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', + '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e', + ], + [ + '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', + 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1', + ], + [ + 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', + '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2', + ], + [ + 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', + '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423', + ], + [ + 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', + '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8', + ], + [ + '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', + 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758', + ], + [ + '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', + 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375', + ], + [ + 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', + '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d', + ], + [ + '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', + 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec', + ], + [ + '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', + '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0', + ], + [ + '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', + 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c', + ], + [ + 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', + 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4', + ], + [ + '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', + 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f', + ], + [ + '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', + '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649', + ], + [ + '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', + 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826', + ], + [ + '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', + '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5', + ], + [ + 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', + 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87', + ], + [ + '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', + '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b', + ], + [ + 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', + '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc', + ], + [ + '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', + '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c', + ], + [ + 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', + 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f', + ], + [ + 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', + '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a', + ], + [ + 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', + 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46', + ], + [ + '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', + 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f', + ], + [ + '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', + '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03', + ], + [ + '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', + 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08', + ], + [ + '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', + '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8', + ], + [ + '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', + '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373', + ], + [ + '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', + 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3', + ], + [ + '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', + '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8', + ], + [ + '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', + '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1', + ], + [ + '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', + '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9', + ], + ], + }, +}; + + +/***/ }), + +/***/ "../../node_modules/elliptic/lib/elliptic/utils.js": +/*!*********************************************************!*\ + !*** ../../node_modules/elliptic/lib/elliptic/utils.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var utils = exports; +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js"); +var minAssert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); +var minUtils = __webpack_require__(/*! minimalistic-crypto-utils */ "../../node_modules/minimalistic-crypto-utils/lib/utils.js"); + +utils.assert = minAssert; +utils.toArray = minUtils.toArray; +utils.zero2 = minUtils.zero2; +utils.toHex = minUtils.toHex; +utils.encode = minUtils.encode; + +// Represent num in a w-NAF form +function getNAF(num, w, bits) { + var naf = new Array(Math.max(num.bitLength(), bits) + 1); + var i; + for (i = 0; i < naf.length; i += 1) { + naf[i] = 0; + } + + var ws = 1 << (w + 1); + var k = num.clone(); + + for (i = 0; i < naf.length; i++) { + var z; + var mod = k.andln(ws - 1); + if (k.isOdd()) { + if (mod > (ws >> 1) - 1) + z = (ws >> 1) - mod; + else + z = mod; + k.isubn(z); + } else { + z = 0; + } + + naf[i] = z; + k.iushrn(1); + } + + return naf; +} +utils.getNAF = getNAF; + +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [ + [], + [], + ]; + + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + var m8; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + // First phase + var m14 = (k1.andln(3) + d1) & 3; + var m24 = (k2.andln(3) + d2) & 3; + if (m14 === 3) + m14 = -1; + if (m24 === 3) + m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + m8 = (k1.andln(7) + d1) & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) + u1 = -m14; + else + u1 = m14; + } + jsf[0].push(u1); + + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + m8 = (k2.andln(7) + d2) & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) + u2 = -m24; + else + u2 = m24; + } + jsf[1].push(u2); + + // Second phase + if (2 * d1 === u1 + 1) + d1 = 1 - d1; + if (2 * d2 === u2 + 1) + d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + + return jsf; +} +utils.getJSF = getJSF; + +function cachedProperty(obj, name, computer) { + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : + this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; + +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : + bytes; +} +utils.parseBytes = parseBytes; + +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; + + + +/***/ }), + +/***/ "../../node_modules/elliptic/node_modules/bn.js/lib/bn.js": +/*!****************************************************************!*\ + !*** ../../node_modules/elliptic/node_modules/bn.js/lib/bn.js ***! + \****************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(/*! buffer */ "?f84f").Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); } - else if (select === false) { - this.selection.moveCursorBy(rows, 0); - this.selection.clearSelection(); + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - var scrollTop = renderer.scrollTop; - renderer.scrollBy(0, rows * config.lineHeight); - if (select != null) - renderer.scrollCursorIntoView(null, 0.5); - renderer.animateScrolling(scrollTop); - }; - Editor.prototype.selectPageDown = function () { - this.$moveByPage(1, true); - }; - Editor.prototype.selectPageUp = function () { - this.$moveByPage(-1, true); - }; - Editor.prototype.gotoPageDown = function () { - this.$moveByPage(1, false); - }; - Editor.prototype.gotoPageUp = function () { - this.$moveByPage(-1, false); - }; - Editor.prototype.scrollPageDown = function () { - this.$moveByPage(1); - }; - Editor.prototype.scrollPageUp = function () { - this.$moveByPage(-1); - }; - Editor.prototype.scrollToRow = function (row) { - this.renderer.scrollToRow(row); - }; - Editor.prototype.scrollToLine = function (line, center, animate, callback) { - this.renderer.scrollToLine(line, center, animate, callback); - }; - Editor.prototype.centerSelection = function () { - var range = this.getSelectionRange(); - var pos = { - row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), - column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) - }; - this.renderer.alignCursor(pos, 0.5); - }; - Editor.prototype.getCursorPosition = function () { - return this.selection.getCursor(); - }; - Editor.prototype.getCursorPositionScreen = function () { - return this.session.documentToScreenPosition(this.getCursorPosition()); - }; - Editor.prototype.getSelectionRange = function () { - return this.selection.getRange(); - }; - Editor.prototype.selectAll = function () { - this.selection.selectAll(); - }; - Editor.prototype.clearSelection = function () { - this.selection.clearSelection(); - }; - Editor.prototype.moveCursorTo = function (row, column) { - this.selection.moveCursorTo(row, column); - }; - Editor.prototype.moveCursorToPosition = function (pos) { - this.selection.moveCursorToPosition(pos); - }; - Editor.prototype.jumpToMatching = function (select, expand) { - var cursor = this.getCursorPosition(); - var iterator = new TokenIterator(this.session, cursor.row, cursor.column); - var prevToken = iterator.getCurrentToken(); - var tokenCount = 0; - if (prevToken && prevToken.type.indexOf('tag-name') !== -1) { - prevToken = iterator.stepBackward(); + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - var token = prevToken || iterator.stepForward(); - if (!token) - return; - var matchType; - var found = false; - var depth = {}; - var i = cursor.column - token.start; - var bracketType; - var brackets = { - ")": "(", - "(": "(", - "]": "[", - "[": "[", - "{": "{", - "}": "{" - }; - do { - if (token.value.match(/[{}()\[\]]/g)) { - for (; i < token.value.length && !found; i++) { - if (!brackets[token.value[i]]) { - continue; - } - bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen"); - if (isNaN(depth[bracketType])) { - depth[bracketType] = 0; - } - switch (token.value[i]) { - case '(': - case '[': - case '{': - depth[bracketType]++; - break; - case ')': - case ']': - case '}': - depth[bracketType]--; - if (depth[bracketType] === -1) { - matchType = 'bracket'; - found = true; - } - break; - } - } - } - else if (token.type.indexOf('tag-name') !== -1) { - if (isNaN(depth[token.value])) { - depth[token.value] = 0; - } - if (prevToken.value === '<' && tokenCount > 1) { - depth[token.value]++; - } - else if (prevToken.value === '= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return (c - 48) & 0xf; + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - else if (matchType === 'tag') { - if (!token || token.type.indexOf('tag-name') === -1) - return; - range = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2); - if (range.compare(cursor.row, cursor.column) === 0) { - var tagsRanges = this.session.getMatchingTags(cursor); - if (tagsRanges) { - if (tagsRanges.openTag.contains(cursor.row, cursor.column)) { - range = tagsRanges.closeTag; - pos = range.start; - } - else { - range = tagsRanges.openTag; - if (tagsRanges.closeTag.start.row === cursor.row && tagsRanges.closeTag.start.column - === cursor.column) - pos = range.end; - else - pos = range.start; - } - } - } - pos = pos || range.start; + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - pos = range && range.cursor || pos; - if (pos) { - if (select) { - if (range && expand) { - this.selection.setRange(range); - } - else if (range && range.isEqual(this.getSelectionRange())) { - this.clearSelection(); - } - else { - this.selection.selectTo(pos.row, pos.column); - } - } - else { - this.selection.moveTo(pos.row, pos.column); - } + } + } + + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this.strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; } - }; - Editor.prototype.gotoLine = function (lineNumber, column, animate) { - this.selection.clearSelection(); - this.session.unfold({ row: lineNumber - 1, column: column || 0 }); - this.exitMultiSelectMode && this.exitMultiSelectMode(); - this.moveCursorTo(lineNumber - 1, column || 0); - if (!this.isRowFullyVisible(lineNumber - 1)) - this.scrollToLine(lineNumber - 1, true, animate); - }; - Editor.prototype.navigateTo = function (row, column) { - this.selection.moveTo(row, column); - }; - Editor.prototype.navigateUp = function (times) { - if (this.selection.isMultiLine() && !this.selection.isBackwards()) { - var selectionStart = this.selection.anchor.getPosition(); - return this.moveCursorToPosition(selectionStart); + off += 2; + if (off >= 26) { + off -= 26; + i--; } - this.selection.clearSelection(); - this.selection.moveCursorBy(-times || -1, 0); - }; - Editor.prototype.navigateDown = function (times) { - if (this.selection.isMultiLine() && this.selection.isBackwards()) { - var selectionEnd = this.selection.anchor.getPosition(); - return this.moveCursorToPosition(selectionEnd); + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; } - this.selection.clearSelection(); - this.selection.moveCursorBy(times || 1, 0); + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); }; - Editor.prototype.navigateLeft = function (times) { - if (!this.selection.isEmpty()) { - var selectionStart = this.getSelectionRange().start; - this.moveCursorToPosition(selectionStart); - } - else { - times = times || 1; - while (times--) { - this.selection.moveCursorLeft(); - } - } - this.clearSelection(); + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; }; - Editor.prototype.navigateRight = function (times) { - if (!this.selection.isEmpty()) { - var selectionEnd = this.getSelectionRange().end; - this.moveCursorToPosition(selectionEnd); - } - else { - times = times || 1; - while (times--) { - this.selection.moveCursorRight(); - } + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } } - this.clearSelection(); - }; - Editor.prototype.navigateLineStart = function () { - this.selection.moveCursorLineStart(); - this.clearSelection(); - }; - Editor.prototype.navigateLineEnd = function () { - this.selection.moveCursorLineEnd(); - this.clearSelection(); - }; - Editor.prototype.navigateFileEnd = function () { - this.selection.moveCursorFileEnd(); - this.clearSelection(); - }; - Editor.prototype.navigateFileStart = function () { - this.selection.moveCursorFileStart(); - this.clearSelection(); - }; - Editor.prototype.navigateWordRight = function () { - this.selection.moveCursorWordRight(); - this.clearSelection(); - }; - Editor.prototype.navigateWordLeft = function () { - this.selection.moveCursorWordLeft(); - this.clearSelection(); - }; - Editor.prototype.replace = function (replacement, options) { - if (options) - this.$search.set(options); - var range = this.$search.find(this.session); - var replaced = 0; - if (!range) - return replaced; - if (this.$tryReplace(range, replacement)) { - replaced = 1; + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; } - this.selection.setSelectionRange(range); - this.renderer.scrollSelectionIntoView(range.start, range.end); - return replaced; + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a }; - Editor.prototype.replaceAll = function (replacement, options) { - if (options) { - this.$search.set(options); + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); } - var ranges = this.$search.findAll(this.session); - var replaced = 0; - if (!ranges.length) - return replaced; - var selection = this.getSelectionRange(); - this.selection.moveTo(0, 0); - for (var i = ranges.length - 1; i >= 0; --i) { - if (this.$tryReplace(ranges[i], replacement)) { - replaced++; - } + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); } - this.selection.setSelectionRange(selection); - return replaced; - }; - Editor.prototype.$tryReplace = function (range, replacement) { - var input = this.session.getTextRange(range); - replacement = this.$search.replace(input, replacement); - if (replacement !== null) { - range.end = this.session.replace(range, replacement); - return range; + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); } - else { - return null; + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) }; - Editor.prototype.getLastSearchOptions = function () { - return this.$search.getOptions(); - }; - Editor.prototype.find = function (needle, options, animate) { - if (!options) - options = {}; - if (typeof needle == "string" || needle instanceof RegExp) - options.needle = needle; - else if (typeof needle == "object") - oop.mixin(options, needle); - var range = this.selection.getRange(); - if (options.needle == null) { - needle = this.session.getTextRange(range) - || this.$search.$options.needle; - if (!needle) { - range = this.session.getWordRange(range.start.row, range.start.column); - needle = this.session.getTextRange(range); - } - this.$search.set({ needle: needle }); + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); } - this.$search.set(options); - if (!options.start) - this.$search.set({ start: range }); - var newRange = this.$search.find(this.session); - if (options.preventScroll) - return newRange; - if (newRange) { - this.revealRange(newRange, animate); - return newRange; + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); + } + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is BN v4 instance + r.strip(); + } else { + // r is BN v5 instance + r._strip(); + } + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); } - if (options.backwards) - range.start = range.end; - else - range.end = range.start; - this.selection.setRange(range); - }; - Editor.prototype.findNext = function (options, animate) { - this.find({ skipCurrent: true, backwards: false }, options, animate); - }; - Editor.prototype.findPrevious = function (options, animate) { - this.find(options, { skipCurrent: true, backwards: true }, animate); - }; - Editor.prototype.revealRange = function (range, animate) { - this.session.unfold(range); - this.selection.setSelectionRange(range); - var scrollTop = this.renderer.scrollTop; - this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); - if (animate !== false) - this.renderer.animateScrolling(scrollTop); - }; - Editor.prototype.undo = function () { - this.session.getUndoManager().undo(this.session); - this.renderer.scrollCursorIntoView(null, 0.5); - }; - Editor.prototype.redo = function () { - this.session.getUndoManager().redo(this.session); - this.renderer.scrollCursorIntoView(null, 0.5); - }; - Editor.prototype.destroy = function () { - this.destroyed = true; - if (this.$toDestroy) { - this.$toDestroy.forEach(function (el) { - el.destroy(); - }); - this.$toDestroy = []; + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; } - if (this.$mouseHandler) - this.$mouseHandler.destroy(); - this.renderer.destroy(); - this._signal("destroy", this); - if (this.session) - this.session.destroy(); - if (this._$emitInputEvent) - this._$emitInputEvent.cancel(); - this.removeAllListeners(); - }; - Editor.prototype.setAutoScrollEditorIntoView = function (enable) { - if (!enable) - return; - var rect; - var self = this; - var shouldScroll = false; - if (!this.$scrollAnchor) - this.$scrollAnchor = document.createElement("div"); - var scrollAnchor = this.$scrollAnchor; - scrollAnchor.style.cssText = "position:absolute"; - this.container.insertBefore(scrollAnchor, this.container.firstChild); - var onChangeSelection = this.on("changeSelection", function () { - shouldScroll = true; - }); - var onBeforeRender = this.renderer.on("beforeRender", function () { - if (shouldScroll) - rect = self.renderer.container.getBoundingClientRect(); - }); - var onAfterRender = this.renderer.on("afterRender", function () { - if (shouldScroll && rect && (self.isFocused() - || self.searchBox && self.searchBox.isFocused())) { - var renderer = self.renderer; - var pos = renderer.$cursorLayer.$pixelPos; - var config = renderer.layerConfig; - var top = pos.top - config.offset; - if (pos.top >= 0 && top + rect.top < 0) { - shouldScroll = true; - } - else if (pos.top < config.height && - pos.top + rect.top + config.lineHeight > window.innerHeight) { - shouldScroll = false; - } - else { - shouldScroll = null; - } - if (shouldScroll != null) { - scrollAnchor.style.top = top + "px"; - scrollAnchor.style.left = pos.left + "px"; - scrollAnchor.style.height = config.lineHeight + "px"; - scrollAnchor.scrollIntoView(shouldScroll); - } - shouldScroll = rect = null; - } - }); - this.setAutoScrollEditorIntoView = function (enable) { - if (enable) - return; - delete this.setAutoScrollEditorIntoView; - this.off("changeSelection", onChangeSelection); - this.renderer.off("afterRender", onAfterRender); - this.renderer.off("beforeRender", onBeforeRender); - }; + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); + + +/***/ }), + +/***/ "../../node_modules/events/events.js": +/*!*******************************************!*\ + !*** ../../node_modules/events/events.js ***! + \*******************************************/ +/***/ ((module) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var R = typeof Reflect === 'object' ? Reflect : null +var ReflectApply = R && typeof R.apply === 'function' + ? R.apply + : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); + } + +var ReflectOwnKeys +if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys +} else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target) + .concat(Object.getOwnPropertySymbols(target)); + }; +} else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; +} + +function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); +} + +var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; +} + +function EventEmitter() { + EventEmitter.init.call(this); +} +module.exports = EventEmitter; +module.exports.once = once; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._eventsCount = 0; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; + +function checkListener(listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } +} + +Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function() { + return defaultMaxListeners; + }, + set: function(arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + defaultMaxListeners = arg; + } +}); + +EventEmitter.init = function() { + + if (this._events === undefined || + this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +}; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { + throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); + } + this._maxListeners = n; + return this; +}; + +function _getMaxListeners(that) { + if (that._maxListeners === undefined) + return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} + +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return _getMaxListeners(this); +}; + +EventEmitter.prototype.emit = function emit(type) { + var args = []; + for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); + var doError = (type === 'error'); + + var events = this._events; + if (events !== undefined) + doError = (doError && events.error === undefined); + else if (!doError) + return false; + + // If there is no 'error' event listener then throw. + if (doError) { + var er; + if (args.length > 0) + er = args[0]; + if (er instanceof Error) { + // Note: The comments on the `throw` lines are intentional, they show + // up in Node's output if this results in an unhandled exception. + throw er; // Unhandled 'error' event + } + // At least give some kind of context to the user + var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); + err.context = er; + throw err; // Unhandled 'error' event + } + + var handler = events[type]; + + if (handler === undefined) + return false; + + if (typeof handler === 'function') { + ReflectApply(handler, this, args); + } else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + ReflectApply(listeners[i], this, args); + } + + return true; +}; + +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + checkListener(listener); + + events = target._events; + if (events === undefined) { + events = target._events = Object.create(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener !== undefined) { + target.emit('newListener', type, + listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + + if (existing === undefined) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = + prepend ? [listener, existing] : [existing, listener]; + // If we've already got an array, just append. + } else if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + + // Check for listener leak + m = _getMaxListeners(target); + if (m > 0 && existing.length > m && !existing.warned) { + existing.warned = true; + // No error code for this since it is a Warning + // eslint-disable-next-line no-restricted-syntax + var w = new Error('Possible EventEmitter memory leak detected. ' + + existing.length + ' ' + String(type) + ' listeners ' + + 'added. Use emitter.setMaxListeners() to ' + + 'increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + ProcessEmitWarning(w); + } + } + + return target; +} + +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.prependListener = + function prependListener(type, listener) { + return _addListener(this, type, listener, true); }; - Editor.prototype.$resetCursorStyle = function () { - var style = this.$cursorStyle || "ace"; - var cursorLayer = this.renderer.$cursorLayer; - if (!cursorLayer) - return; - cursorLayer.setSmoothBlinking(/smooth/.test(style)); - cursorLayer.isBlinking = !this.$readOnly && style != "wide"; - dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style)); + +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + if (arguments.length === 0) + return this.listener.call(this.target); + return this.listener.apply(this.target, arguments); + } +} + +function _onceWrap(target, type, listener) { + var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; + var wrapped = onceWrapper.bind(state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} + +EventEmitter.prototype.once = function once(type, listener) { + checkListener(listener); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; + +EventEmitter.prototype.prependOnceListener = + function prependOnceListener(type, listener) { + checkListener(listener); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; }; - Editor.prototype.prompt = function (message, options, callback) { - var editor = this; - config.loadModule("ace/ext/prompt", function (module) { - module.prompt(editor, message, options, callback); - }); + +// Emits a 'removeListener' event if and only if the listener was removed. +EventEmitter.prototype.removeListener = + function removeListener(type, listener) { + var list, events, position, i, originalListener; + + checkListener(listener); + + events = this._events; + if (events === undefined) + return this; + + list = events[type]; + if (list === undefined) + return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else { + delete events[type]; + if (events.removeListener) + this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) + return this; + + if (position === 0) + list.shift(); + else { + spliceOne(list, position); + } + + if (list.length === 1) + events[type] = list[0]; + + if (events.removeListener !== undefined) + this.emit('removeListener', type, originalListener || listener); + } + + return this; }; - return Editor; -}()); -Editor.$uid = 0; -Editor.prototype.curOp = null; -Editor.prototype.prevOp = {}; -Editor.prototype.$mergeableCommands = ["backspace", "del", "insertstring"]; -Editor.prototype.$toggleWordPairs = [ - ["first", "last"], - ["true", "false"], - ["yes", "no"], - ["width", "height"], - ["top", "bottom"], - ["right", "left"], - ["on", "off"], - ["x", "y"], - ["get", "set"], - ["max", "min"], - ["horizontal", "vertical"], - ["show", "hide"], - ["add", "remove"], - ["up", "down"], - ["before", "after"], - ["even", "odd"], - ["in", "out"], - ["inside", "outside"], - ["next", "previous"], - ["increase", "decrease"], - ["attach", "detach"], - ["&&", "||"], - ["==", "!="] -]; -oop.implement(Editor.prototype, EventEmitter); -config.defineOptions(Editor.prototype, "editor", { - selectionStyle: { - set: function (style) { - this.onSelectionChange(); - this._signal("changeSelectionStyle", { data: style }); - }, - initialValue: "line" - }, - highlightActiveLine: { - set: function () { this.$updateHighlightActiveLine(); }, - initialValue: true - }, - highlightSelectedWord: { - set: function (shouldHighlight) { this.$onSelectionChange(); }, - initialValue: true - }, - readOnly: { - set: function (/**@type{boolean}*/ readOnly) { - var _this = this; - this.textInput.setReadOnly(readOnly); - if (this.destroyed) - return; - this.$resetCursorStyle(); - if (!this.$readOnlyCallback) { - this.$readOnlyCallback = function (e) { - var shouldShow = false; - if (e && e.type == "keydown") { - if (e && e.key && !e.ctrlKey && !e.metaKey) { - if (e.key == " ") - e.preventDefault(); - shouldShow = e.key.length == 1; - } - if (!shouldShow) - return; - } - else if (e && e.type !== "exec") { - shouldShow = true; - } - if (shouldShow) { - if (!_this.hoverTooltip) { - _this.hoverTooltip = new HoverTooltip(); - } - var domNode = dom.createElement("div"); - domNode.textContent = nls("editor.tooltip.disable-editing", "Editing is disabled"); - if (!_this.hoverTooltip.isOpen) { - _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode); - } - } - else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) { - _this.hoverTooltip.hide(); - } - }; - } - var textArea = this.textInput.getElement(); - if (readOnly) { - event.addListener(textArea, "keydown", this.$readOnlyCallback, this); - this.commands.on("exec", this.$readOnlyCallback); - this.commands.on("commandUnavailable", this.$readOnlyCallback); - } - else { - event.removeListener(textArea, "keydown", this.$readOnlyCallback); - this.commands.off("exec", this.$readOnlyCallback); - this.commands.off("commandUnavailable", this.$readOnlyCallback); - if (this.hoverTooltip) { - this.hoverTooltip.destroy(); - this.hoverTooltip = null; - } - } - }, - initialValue: false - }, - copyWithEmptySelection: { - set: function (value) { - this.textInput.setCopyWithEmptySelection(value); - }, - initialValue: false - }, - cursorStyle: { - set: function (val) { this.$resetCursorStyle(); }, - values: ["ace", "slim", "smooth", "wide"], - initialValue: "ace" - }, - mergeUndoDeltas: { - values: [false, true, "always"], - initialValue: true - }, - behavioursEnabled: { initialValue: true }, - wrapBehavioursEnabled: { initialValue: true }, - enableAutoIndent: { initialValue: true }, - autoScrollEditorIntoView: { - set: function (val) { this.setAutoScrollEditorIntoView(val); } - }, - keyboardHandler: { - set: function (val) { this.setKeyboardHandler(val); }, - get: function () { return this.$keybindingId; }, - handlesSet: true - }, - value: { - set: function (val) { this.session.setValue(val); }, - get: function () { return this.getValue(); }, - handlesSet: true, - hidden: true - }, - session: { - set: function (val) { this.setSession(val); }, - get: function () { return this.session; }, - handlesSet: true, - hidden: true - }, - showLineNumbers: { - set: function (show) { - this.renderer.$gutterLayer.setShowLineNumbers(show); - this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER); - if (show && this.$relativeLineNumbers) - relativeNumberRenderer.attach(this); - else - relativeNumberRenderer.detach(this); - }, - initialValue: true - }, - relativeLineNumbers: { - set: function (value) { - if (this.$showLineNumbers && value) - relativeNumberRenderer.attach(this); - else - relativeNumberRenderer.detach(this); + +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + +EventEmitter.prototype.removeAllListeners = + function removeAllListeners(type) { + var listeners, events, i; + + events = this._events; + if (events === undefined) + return this; + + // not listening for removeListener, no need to emit + if (events.removeListener === undefined) { + if (arguments.length === 0) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (events[type] !== undefined) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else + delete events[type]; } - }, - placeholder: { - set: function (message) { - if (!this.$updatePlaceholder) { - this.$updatePlaceholder = function () { - var hasValue = this.session && (this.renderer.$composition || - this.session.getLength() > 1 || this.session.getLine(0).length > 0); - if (hasValue && this.renderer.placeholderNode) { - this.renderer.off("afterRender", this.$updatePlaceholder); - dom.removeCssClass(this.container, "ace_hasPlaceholder"); - this.renderer.placeholderNode.remove(); - this.renderer.placeholderNode = null; - } - else if (!hasValue && !this.renderer.placeholderNode) { - this.renderer.on("afterRender", this.$updatePlaceholder); - dom.addCssClass(this.container, "ace_hasPlaceholder"); - var el = dom.createElement("div"); - el.className = "ace_placeholder"; - el.textContent = this.$placeholder || ""; - this.renderer.placeholderNode = el; - this.renderer.content.appendChild(this.renderer.placeholderNode); - } - else if (!hasValue && this.renderer.placeholderNode) { - this.renderer.placeholderNode.textContent = this.$placeholder || ""; - } - }.bind(this); - this.on("input", this.$updatePlaceholder); - } - this.$updatePlaceholder(); + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = Object.keys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); } - }, - enableKeyboardAccessibility: { - set: function (value) { - var blurCommand = { - name: "blurTextInput", - description: "Set focus to the editor content div to allow tabbing through the page", - bindKey: "Esc", - exec: function (editor) { - editor.blur(); - editor.renderer.scroller.focus(); - }, - readOnly: true - }; - var focusOnEnterKeyup = function (e) { - if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) { - e.preventDefault(); - var row = this.getCursorPosition().row; - if (!this.isRowVisible(row)) - this.scrollToLine(row, true, true); - this.focus(); - } - }; - var gutterKeyboardHandler; - if (value) { - this.renderer.enableKeyboardAccessibility = true; - this.renderer.keyboardFocusClassName = "ace_keyboard-focus"; - this.textInput.getElement().setAttribute("tabindex", -1); - this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0); - this.renderer.scroller.setAttribute("tabindex", 0); - this.renderer.scroller.setAttribute("role", "group"); - this.renderer.scroller.setAttribute("aria-roledescription", nls("editor.scroller.aria-roledescription", "editor")); - this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName); - this.renderer.scroller.setAttribute("aria-label", nls("editor.scroller.aria-label", "Editor content, press Enter to start editing, press Escape to exit")); - this.renderer.scroller.addEventListener("keyup", focusOnEnterKeyup.bind(this)); - this.commands.addCommand(blurCommand); - this.renderer.$gutter.setAttribute("tabindex", 0); - this.renderer.$gutter.setAttribute("aria-hidden", false); - this.renderer.$gutter.setAttribute("role", "group"); - this.renderer.$gutter.setAttribute("aria-roledescription", nls("editor.gutter.aria-roledescription", "editor gutter")); - this.renderer.$gutter.setAttribute("aria-label", nls("editor.gutter.aria-label", "Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit")); - this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName); - this.renderer.content.setAttribute("aria-hidden", true); - if (!gutterKeyboardHandler) - gutterKeyboardHandler = new GutterKeyboardHandler(this); - gutterKeyboardHandler.addListener(); - this.textInput.setAriaOptions({ - setLabel: true - }); - } - else { - this.renderer.enableKeyboardAccessibility = false; - this.textInput.getElement().setAttribute("tabindex", 0); - this.textInput.setNumberOfExtraLines(0); - this.renderer.scroller.setAttribute("tabindex", -1); - this.renderer.scroller.removeAttribute("role"); - this.renderer.scroller.removeAttribute("aria-roledescription"); - this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName); - this.renderer.scroller.removeAttribute("aria-label"); - this.renderer.scroller.removeEventListener("keyup", focusOnEnterKeyup.bind(this)); - this.commands.removeCommand(blurCommand); - this.renderer.content.removeAttribute("aria-hidden"); - this.renderer.$gutter.setAttribute("tabindex", -1); - this.renderer.$gutter.setAttribute("aria-hidden", true); - this.renderer.$gutter.removeAttribute("role"); - this.renderer.$gutter.removeAttribute("aria-roledescription"); - this.renderer.$gutter.removeAttribute("aria-label"); - this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName); - if (gutterKeyboardHandler) - gutterKeyboardHandler.removeListener(); - } - }, - initialValue: false - }, - textInputAriaLabel: { - set: function (val) { this.$textInputAriaLabel = val; }, - initialValue: "" - }, - enableMobileMenu: { - set: function (val) { this.$enableMobileMenu = val; }, - initialValue: true - }, - customScrollbar: "renderer", - hScrollBarAlwaysVisible: "renderer", - vScrollBarAlwaysVisible: "renderer", - highlightGutterLine: "renderer", - animatedScroll: "renderer", - showInvisibles: "renderer", - showPrintMargin: "renderer", - printMarginColumn: "renderer", - printMargin: "renderer", - fadeFoldWidgets: "renderer", - showFoldWidgets: "renderer", - displayIndentGuides: "renderer", - highlightIndentGuides: "renderer", - showGutter: "renderer", - fontSize: "renderer", - fontFamily: "renderer", - maxLines: "renderer", - minLines: "renderer", - scrollPastEnd: "renderer", - fixedWidthGutter: "renderer", - theme: "renderer", - hasCssTransforms: "renderer", - maxPixelHeight: "renderer", - useTextareaForIME: "renderer", - useResizeObserver: "renderer", - useSvgGutterIcons: "renderer", - showFoldedAnnotations: "renderer", - scrollSpeed: "$mouseHandler", - dragDelay: "$mouseHandler", - dragEnabled: "$mouseHandler", - focusTimeout: "$mouseHandler", - tooltipFollowsMouse: "$mouseHandler", - firstLineNumber: "session", - overwrite: "session", - newLineMode: "session", - useWorker: "session", - useSoftTabs: "session", - navigateWithinSoftTabs: "session", - tabSize: "session", - wrap: "session", - indentedSoftWrap: "session", - foldStyle: "session", - mode: "session" -}); -var relativeNumberRenderer = { - getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) { - return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? "\xb7" : ""))) + ""; - }, - getWidth: function (session, /**@type{number}*/ lastLineNumber, config) { - return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth; - }, - update: function (e, /**@type{Editor}*/ editor) { - editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER); - }, - attach: function (/**@type{Editor}*/ editor) { - editor.renderer.$gutterLayer.$renderer = this; - editor.on("changeSelection", this.update); - this.update(null, editor); - }, - detach: function (/**@type{Editor}*/ editor) { - if (editor.renderer.$gutterLayer.$renderer == this) - editor.renderer.$gutterLayer.$renderer = null; - editor.off("changeSelection", this.update); - this.update(null, editor); + this.removeAllListeners('removeListener'); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners !== undefined) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; + }; + +function _listeners(target, type, unwrap) { + var events = target._events; + + if (events === undefined) + return []; + + var evlistener = events[type]; + if (evlistener === undefined) + return []; + + if (typeof evlistener === 'function') + return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + + return unwrap ? + unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} + +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; + +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; + +EventEmitter.listenerCount = function(emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; + +EventEmitter.prototype.listenerCount = listenerCount; +function listenerCount(type) { + var events = this._events; + + if (events !== undefined) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener !== undefined) { + return evlistener.length; } + } + + return 0; +} + +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; -exports.Editor = Editor; -}); +function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) + copy[i] = arr[i]; + return copy; +} + +function spliceOne(list, index) { + for (; index + 1 < list.length; index++) + list[index] = list[index + 1]; + list.pop(); +} -ace.define("ace/layer/lines",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var Lines = /** @class */ (function () { - function Lines(element, canvasHeight) { - this.element = element; - this.canvasHeight = canvasHeight || 500000; - this.element.style.height = (this.canvasHeight * 2) + "px"; - this.cells = []; - this.cellCache = []; - this.$offsetCoefficient = 0; +function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; +} + +function once(emitter, name) { + return new Promise(function (resolve, reject) { + function errorListener(err) { + emitter.removeListener(name, resolver); + reject(err); } - Lines.prototype.moveContainer = function (config) { - dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient); - }; - Lines.prototype.pageChanged = function (oldConfig, newConfig) { - return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !== - Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)); - }; - Lines.prototype.computeLineTop = function (row, config, session) { - var screenTop = config.firstRowScreen * config.lineHeight; - var screenPage = Math.floor(screenTop / this.canvasHeight); - var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight; - return lineTop - (screenPage * this.canvasHeight); - }; - Lines.prototype.computeLineHeight = function (row, config, session) { - return config.lineHeight * session.getRowLineCount(row); - }; - Lines.prototype.getLength = function () { - return this.cells.length; - }; - Lines.prototype.get = function (index) { - return this.cells[index]; - }; - Lines.prototype.shift = function () { - this.$cacheCell(this.cells.shift()); - }; - Lines.prototype.pop = function () { - this.$cacheCell(this.cells.pop()); - }; - Lines.prototype.push = function (cell) { - if (Array.isArray(cell)) { - this.cells.push.apply(this.cells, cell); - var fragment = dom.createFragment(this.element); - for (var i = 0; i < cell.length; i++) { - fragment.appendChild(cell[i].element); - } - this.element.appendChild(fragment); - } - else { - this.cells.push(cell); - this.element.appendChild(cell.element); - } - }; - Lines.prototype.unshift = function (cell) { - if (Array.isArray(cell)) { - this.cells.unshift.apply(this.cells, cell); - var fragment = dom.createFragment(this.element); - for (var i = 0; i < cell.length; i++) { - fragment.appendChild(cell[i].element); - } - if (this.element.firstChild) - this.element.insertBefore(fragment, this.element.firstChild); - else - this.element.appendChild(fragment); - } - else { - this.cells.unshift(cell); - this.element.insertAdjacentElement("afterbegin", cell.element); - } - }; - Lines.prototype.last = function () { - if (this.cells.length) - return this.cells[this.cells.length - 1]; - else - return null; - }; - Lines.prototype.$cacheCell = function (cell) { - if (!cell) - return; - cell.element.remove(); - this.cellCache.push(cell); - }; - Lines.prototype.createCell = function (row, config, session, initElement) { - var cell = this.cellCache.pop(); - if (!cell) { - var element = dom.createElement("div"); - if (initElement) - initElement(element); - this.element.appendChild(element); - cell = { - element: element, - text: "", - row: row - }; - } - cell.row = row; - return cell; + + function resolver() { + if (typeof emitter.removeListener === 'function') { + emitter.removeListener('error', errorListener); + } + resolve([].slice.call(arguments)); }; - return Lines; -}()); -exports.Lines = Lines; -}); + eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); + if (name !== 'error') { + addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); + } + }); +} + +function addErrorHandlerIfEventEmitter(emitter, handler, flags) { + if (typeof emitter.on === 'function') { + eventTargetAgnosticAddListener(emitter, 'error', handler, flags); + } +} + +function eventTargetAgnosticAddListener(emitter, name, listener, flags) { + if (typeof emitter.on === 'function') { + if (flags.once) { + emitter.once(name, listener); + } else { + emitter.on(name, listener); + } + } else if (typeof emitter.addEventListener === 'function') { + // EventTarget does not have `error` event semantics like Node + // EventEmitters, we do not listen for `error` events here. + emitter.addEventListener(name, function wrapListener(arg) { + // IE does not have builtin `{ once: true }` support so we + // have to do it manually. + if (flags.once) { + emitter.removeEventListener(name, wrapListener); + } + listener(arg); + }); + } else { + throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); + } +} + + +/***/ }), + +/***/ "../../node_modules/evp_bytestokey/index.js": +/*!**************************************************!*\ + !*** ../../node_modules/evp_bytestokey/index.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var MD5 = __webpack_require__(/*! md5.js */ "../../node_modules/md5.js/index.js") + +/* eslint-disable camelcase */ +function EVP_BytesToKey (password, salt, keyBits, ivLen) { + if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary') + if (salt) { + if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary') + if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length') + } + + var keyLen = keyBits / 8 + var key = Buffer.alloc(keyLen) + var iv = Buffer.alloc(ivLen || 0) + var tmp = Buffer.alloc(0) + + while (keyLen > 0 || ivLen > 0) { + var hash = new MD5() + hash.update(tmp) + hash.update(password) + if (salt) hash.update(salt) + tmp = hash.digest() + + var used = 0 + + if (keyLen > 0) { + var keyStart = key.length - keyLen + used = Math.min(keyLen, tmp.length) + tmp.copy(key, keyStart, 0, used) + keyLen -= used + } + + if (used < tmp.length && ivLen > 0) { + var ivStart = iv.length - ivLen + var length = Math.min(ivLen, tmp.length - used) + tmp.copy(iv, ivStart, used, used + length) + ivLen -= length + } + } + + tmp.fill(0) + return { key: key, iv: iv } +} + +module.exports = EVP_BytesToKey + + +/***/ }), + +/***/ "../../node_modules/file-saver/dist/FileSaver.min.js": +/*!***********************************************************!*\ + !*** ../../node_modules/file-saver/dist/FileSaver.min.js ***! + \***********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (b), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open("GET",a),d.responseType="blob",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error("could not download file")},d.send()}function d(a){var b=new XMLHttpRequest;b.open("HEAD",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof __webpack_require__.g&&__webpack_require__.g.global===__webpack_require__.g?__webpack_require__.g:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||("object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open("","_blank"),g&&(g.document.title=g.document.body.innerText="downloading..."),"string"==typeof b)return c(b,d,e);var h="application/octet-stream"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\/[\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&"undefined"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g, true&&(module.exports=g)}); + +//# sourceMappingURL=FileSaver.min.js.map + +/***/ }), + +/***/ "../../node_modules/hash-base/index.js": +/*!*********************************************!*\ + !*** ../../node_modules/hash-base/index.js ***! + \*********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var Transform = (__webpack_require__(/*! stream */ "../../node_modules/stream-browserify/index.js").Transform) +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") + +function throwIfNotStringOrBuffer (val, prefix) { + if (!Buffer.isBuffer(val) && typeof val !== 'string') { + throw new TypeError(prefix + ' must be a string or a buffer') + } +} + +function HashBase (blockSize) { + Transform.call(this) + + this._block = Buffer.allocUnsafe(blockSize) + this._blockSize = blockSize + this._blockOffset = 0 + this._length = [0, 0, 0, 0] + + this._finalized = false +} + +inherits(HashBase, Transform) + +HashBase.prototype._transform = function (chunk, encoding, callback) { + var error = null + try { + this.update(chunk, encoding) + } catch (err) { + error = err + } + + callback(error) +} + +HashBase.prototype._flush = function (callback) { + var error = null + try { + this.push(this.digest()) + } catch (err) { + error = err + } + + callback(error) +} + +HashBase.prototype.update = function (data, encoding) { + throwIfNotStringOrBuffer(data, 'Data') + if (this._finalized) throw new Error('Digest already called') + if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding) + + // consume data + var block = this._block + var offset = 0 + while (this._blockOffset + data.length - offset >= this._blockSize) { + for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++] + this._update() + this._blockOffset = 0 + } + while (offset < data.length) block[this._blockOffset++] = data[offset++] + + // update length + for (var j = 0, carry = data.length * 8; carry > 0; ++j) { + this._length[j] += carry + carry = (this._length[j] / 0x0100000000) | 0 + if (carry > 0) this._length[j] -= 0x0100000000 * carry + } + + return this +} + +HashBase.prototype._update = function () { + throw new Error('_update is not implemented') +} + +HashBase.prototype.digest = function (encoding) { + if (this._finalized) throw new Error('Digest already called') + this._finalized = true + + var digest = this._digest() + if (encoding !== undefined) digest = digest.toString(encoding) + + // reset state + this._block.fill(0) + this._blockOffset = 0 + for (var i = 0; i < 4; ++i) this._length[i] = 0 + + return digest +} + +HashBase.prototype._digest = function () { + throw new Error('_digest is not implemented') +} + +module.exports = HashBase + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash.js": +/*!**********************************************!*\ + !*** ../../node_modules/hash.js/lib/hash.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var hash = exports; + +hash.utils = __webpack_require__(/*! ./hash/utils */ "../../node_modules/hash.js/lib/hash/utils.js"); +hash.common = __webpack_require__(/*! ./hash/common */ "../../node_modules/hash.js/lib/hash/common.js"); +hash.sha = __webpack_require__(/*! ./hash/sha */ "../../node_modules/hash.js/lib/hash/sha.js"); +hash.ripemd = __webpack_require__(/*! ./hash/ripemd */ "../../node_modules/hash.js/lib/hash/ripemd.js"); +hash.hmac = __webpack_require__(/*! ./hash/hmac */ "../../node_modules/hash.js/lib/hash/hmac.js"); + +// Proxy hash functions to the main object +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/common.js": +/*!*****************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/common.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ./utils */ "../../node_modules/hash.js/lib/hash/utils.js"); +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); + +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; + + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; +} +exports.BlockHash = BlockHash; + +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) + this.pending = msg; + else + this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; + + // Enough data, try updating + if (this.pending.length >= this._delta8) { + msg = this.pending; + + // Process pending data in blocks + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) + this.pending = null; + + msg = utils.join32(msg, 0, msg.length - r, this.endian); + for (var i = 0; i < msg.length; i += this._delta32) + this._update(msg, i, i + this._delta32); + } + + return this; +}; + +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); + + return this._digest(enc); +}; + +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - ((len + this.padLength) % bytes); + var res = new Array(k + this.padLength); + res[0] = 0x80; + for (var i = 1; i < k; i++) + res[i] = 0; + + // Append length + len <<= 3; + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) + res[i++] = 0; + + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = (len >>> 24) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = len & 0xff; + } else { + res[i++] = len & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 24) & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + + for (t = 8; t < this.padLength; t++) + res[i++] = 0; + } + + return res; +}; + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/hmac.js": +/*!***************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/hmac.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ./utils */ "../../node_modules/hash.js/lib/hash/utils.js"); +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); + +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) + return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; + + this._init(utils.toArray(key, enc)); +} +module.exports = Hmac; + +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) + key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); + + // Add padding to key + for (var i = key.length; i < this.blockSize; i++) + key.push(0); + + for (i = 0; i < key.length; i++) + key[i] ^= 0x36; + this.inner = new this.Hash().update(key); + + // 0x36 ^ 0x5c = 0x6a + for (i = 0; i < key.length; i++) + key[i] ^= 0x6a; + this.outer = new this.Hash().update(key); +}; + +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; +}; -ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/layer/lines","ace/config"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var oop = require("../lib/oop"); -var lang = require("../lib/lang"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var Lines = require("./lines").Lines; -var nls = require("../config").nls; -var Gutter = /** @class */ (function () { - function Gutter(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_gutter-layer"; - parentEl.appendChild(this.element); - this.setShowFoldWidgets(this.$showFoldWidgets); - this.gutterWidth = 0; - this.$annotations = []; - this.$updateAnnotations = this.$updateAnnotations.bind(this); - this.$lines = new Lines(this.element); - this.$lines.$offsetCoefficient = 1; - } - Gutter.prototype.setSession = function (session) { - if (this.session) - this.session.off("change", this.$updateAnnotations); - this.session = session; - if (session) - session.on("change", this.$updateAnnotations); - }; - Gutter.prototype.addGutterDecoration = function (row, className) { - if (window.console) - console.warn && console.warn("deprecated use session.addGutterDecoration"); - this.session.addGutterDecoration(row, className); - }; - Gutter.prototype.removeGutterDecoration = function (row, className) { - if (window.console) - console.warn && console.warn("deprecated use session.removeGutterDecoration"); - this.session.removeGutterDecoration(row, className); - }; - Gutter.prototype.setAnnotations = function (annotations) { - this.$annotations = []; - for (var i = 0; i < annotations.length; i++) { - var annotation = annotations[i]; - var row = annotation.row; - var rowInfo = this.$annotations[row]; - if (!rowInfo) - rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] }; - var annoText = annotation.text; - var displayAnnoText = annotation.text; - var annoType = annotation.type; - annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; - displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || ""; - if (rowInfo.text.indexOf(annoText) === -1) { - rowInfo.text.push(annoText); - rowInfo.type.push(annoType); - rowInfo.displayText.push(displayAnnoText); - } - var className = annotation.className; - if (className) { - rowInfo.className = className; - } - else if (annoType === "error") { - rowInfo.className = " ace_error"; - } - else if (annoType === "security" && !/\bace_error\b/.test(rowInfo.className)) { - rowInfo.className = " ace_security"; - } - else if (annoType === "warning" && !/\bace_(error|security)\b/.test(rowInfo.className)) { - rowInfo.className = " ace_warning"; - } - else if (annoType === "info" && !rowInfo.className) { - rowInfo.className = " ace_info"; - } - else if (annoType === "hint" && !rowInfo.className) { - rowInfo.className = " ace_hint"; - } - } - }; - Gutter.prototype.$updateAnnotations = function (delta) { - if (!this.$annotations.length) - return; - var firstRow = delta.start.row; - var len = delta.end.row - firstRow; - if (len === 0) { - } - else if (delta.action == 'remove') { - this.$annotations.splice(firstRow, len + 1, null); - } - else { - var args = new Array(len + 1); - args.unshift(firstRow, 1); - this.$annotations.splice.apply(this.$annotations, args); - } - }; - Gutter.prototype.update = function (config) { - this.config = config; - var session = this.session; - var firstRow = config.firstRow; - var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar - session.getLength() - 1); - this.oldLastRow = lastRow; - this.config = config; - this.$lines.moveContainer(config); - this.$updateCursorRow(); - var fold = session.getNextFoldLine(firstRow); - var foldStart = fold ? fold.start.row : Infinity; - var cell = null; - var index = -1; - var row = firstRow; - while (true) { - if (row > foldStart) { - row = fold.end.row + 1; - fold = session.getNextFoldLine(row, fold); - foldStart = fold ? fold.start.row : Infinity; - } - if (row > lastRow) { - while (this.$lines.getLength() > index + 1) - this.$lines.pop(); - break; - } - cell = this.$lines.get(++index); - if (cell) { - cell.row = row; - } - else { - cell = this.$lines.createCell(row, config, this.session, onCreateCell); - this.$lines.push(cell); - } - this.$renderCell(cell, config, fold, row); - row++; - } - this._signal("afterRender"); - this.$updateGutterWidth(config); - }; - Gutter.prototype.$updateGutterWidth = function (config) { - var session = this.session; - var gutterRenderer = session.gutterRenderer || this.$renderer; - var firstLineNumber = session.$firstLineNumber; - var lastLineText = this.$lines.last() ? this.$lines.last().text : ""; - if (this.$fixedWidth || session.$useWrapMode) - lastLineText = session.getLength() + firstLineNumber - 1; - var gutterWidth = gutterRenderer - ? gutterRenderer.getWidth(session, lastLineText, config) - : lastLineText.toString().length * config.characterWidth; - var padding = this.$padding || this.$computePadding(); - gutterWidth += padding.left + padding.right; - if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { - this.gutterWidth = gutterWidth; (this.element.parentNode).style.width = - this.element.style.width = Math.ceil(this.gutterWidth) + "px"; - this._signal("changeGutterWidth", gutterWidth); - } - }; - Gutter.prototype.$updateCursorRow = function () { - if (!this.$highlightGutterLine) - return; - var position = this.session.selection.getCursor(); - if (this.$cursorRow === position.row) - return; - this.$cursorRow = position.row; - }; - Gutter.prototype.updateLineHighlight = function () { - if (!this.$highlightGutterLine) - return; - var row = this.session.selection.cursor.row; - this.$cursorRow = row; - if (this.$cursorCell && this.$cursorCell.row == row) - return; - if (this.$cursorCell) - this.$cursorCell.element.className = this.$cursorCell.element.className.replace("ace_gutter-active-line ", ""); - var cells = this.$lines.cells; - this.$cursorCell = null; - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - if (cell.row >= this.$cursorRow) { - if (cell.row > this.$cursorRow) { - var fold = this.session.getFoldLine(this.$cursorRow); - if (i > 0 && fold && fold.start.row == cells[i - 1].row) - cell = cells[i - 1]; - else - break; - } - cell.element.className = "ace_gutter-active-line " + cell.element.className; - this.$cursorCell = cell; - break; - } - } - }; - Gutter.prototype.scrollLines = function (config) { - var oldConfig = this.config; - this.config = config; - this.$updateCursorRow(); - if (this.$lines.pageChanged(oldConfig, config)) - return this.update(config); - this.$lines.moveContainer(config); - var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar - this.session.getLength() - 1); - var oldLastRow = this.oldLastRow; - this.oldLastRow = lastRow; - if (!oldConfig || oldLastRow < config.firstRow) - return this.update(config); - if (lastRow < oldConfig.firstRow) - return this.update(config); - if (oldConfig.firstRow < config.firstRow) - for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) - this.$lines.shift(); - if (oldLastRow > lastRow) - for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--) - this.$lines.pop(); - if (config.firstRow < oldConfig.firstRow) { - this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1)); - } - if (lastRow > oldLastRow) { - this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow)); - } - this.updateLineHighlight(); - this._signal("afterRender"); - this.$updateGutterWidth(config); - }; - Gutter.prototype.$renderLines = function (config, firstRow, lastRow) { - var fragment = []; - var row = firstRow; - var foldLine = this.session.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (true) { - if (row > foldStart) { - row = foldLine.end.row + 1; - foldLine = this.session.getNextFoldLine(row, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - if (row > lastRow) - break; - var cell = this.$lines.createCell(row, config, this.session, onCreateCell); - this.$renderCell(cell, config, foldLine, row); - fragment.push(cell); - row++; - } - return fragment; - }; - Gutter.prototype.$renderCell = function (cell, config, fold, row) { - var element = cell.element; - var session = this.session; - var textNode = element.childNodes[0]; - var foldWidget = element.childNodes[1]; - var annotationNode = element.childNodes[2]; - var customWidget = element.childNodes[3]; - var annotationIconNode = annotationNode.firstChild; - var firstLineNumber = session.$firstLineNumber; - var breakpoints = session.$breakpoints; - var decorations = session.$decorations; - var gutterRenderer = session.gutterRenderer || this.$renderer; - var foldWidgets = this.$showFoldWidgets && session.foldWidgets; - var foldStart = fold ? fold.start.row : Number.MAX_VALUE; - var lineHeight = config.lineHeight + "px"; - var className = this.$useSvgGutterIcons ? "ace_gutter-cell_svg-icons " : "ace_gutter-cell "; - var iconClassName = this.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; - var rowText = (gutterRenderer - ? gutterRenderer.getText(session, row) - : row + firstLineNumber).toString(); - if (this.$highlightGutterLine) { - if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) { - className += "ace_gutter-active-line "; - if (this.$cursorCell != cell) { - if (this.$cursorCell) - this.$cursorCell.element.className = this.$cursorCell.element.className.replace("ace_gutter-active-line ", ""); - this.$cursorCell = cell; - } - } - } - if (breakpoints[row]) - className += breakpoints[row]; - if (decorations[row]) - className += decorations[row]; - if (this.$annotations[row] && row !== foldStart) - className += this.$annotations[row].className; - if (foldWidgets) { - var c = foldWidgets[row]; - if (c == null) - c = foldWidgets[row] = session.getFoldWidget(row); - } - if (c) { - var foldClass = "ace_fold-widget ace_" + c; - var isClosedFold = c == "start" && row == foldStart && row < fold.end.row; - if (isClosedFold) { - foldClass += " ace_closed"; - var foldAnnotationClass = ""; - var annotationInFold = false; - for (var i = row + 1; i <= fold.end.row; i++) { - if (!this.$annotations[i]) - continue; - if (this.$annotations[i].className === " ace_error") { - annotationInFold = true; - foldAnnotationClass = " ace_error_fold"; - break; - } - if (this.$annotations[i].className === " ace_security") { - annotationInFold = true; - foldAnnotationClass = " ace_security_fold"; - } - else if (this.$annotations[i].className === " ace_warning" && - foldAnnotationClass !== " ace_security_fold") { - annotationInFold = true; - foldAnnotationClass = " ace_warning_fold"; - } - } - className += foldAnnotationClass; - } - else - foldClass += " ace_open"; - if (foldWidget.className != foldClass) - foldWidget.className = foldClass; - dom.setStyle(foldWidget.style, "height", lineHeight); - dom.setStyle(foldWidget.style, "display", "inline-block"); - foldWidget.setAttribute("role", "button"); - foldWidget.setAttribute("tabindex", "-1"); - var foldRange = session.getFoldWidgetRange(row); - if (foldRange) - foldWidget.setAttribute("aria-label", nls("gutter.code-folding.range.aria-label", "Toggle code folding, rows $0 through $1", [ - foldRange.start.row + 1, - foldRange.end.row + 1 - ])); - else { - if (fold) - foldWidget.setAttribute("aria-label", nls("gutter.code-folding.closed.aria-label", "Toggle code folding, rows $0 through $1", [ - fold.start.row + 1, - fold.end.row + 1 - ])); - else - foldWidget.setAttribute("aria-label", nls("gutter.code-folding.open.aria-label", "Toggle code folding, row $0", [row + 1])); - } - if (isClosedFold) { - foldWidget.setAttribute("aria-expanded", "false"); - foldWidget.setAttribute("title", nls("gutter.code-folding.closed.title", "Unfold code")); - } - else { - foldWidget.setAttribute("aria-expanded", "true"); - foldWidget.setAttribute("title", nls("gutter.code-folding.open.title", "Fold code")); - } - } - else { - if (foldWidget) { - dom.setStyle(foldWidget.style, "display", "none"); - foldWidget.setAttribute("tabindex", "0"); - foldWidget.removeAttribute("role"); - foldWidget.removeAttribute("aria-label"); - } - } - var customWidgetAttributes = this.session.$gutterCustomWidgets[row]; - if (customWidgetAttributes) { - this.$addCustomWidget(row, customWidgetAttributes, cell); - } - else if (customWidget) { - this.$removeCustomWidget(row, cell); - } - if (annotationInFold && this.$showFoldedAnnotations) { - annotationNode.className = "ace_gutter_annotation"; - annotationIconNode.className = iconClassName; - annotationIconNode.className += foldAnnotationClass; - dom.setStyle(annotationIconNode.style, "height", lineHeight); - dom.setStyle(annotationNode.style, "display", "block"); - dom.setStyle(annotationNode.style, "height", lineHeight); - var ariaLabel; - switch (foldAnnotationClass) { - case " ace_error_fold": - ariaLabel = nls("gutter.annotation.aria-label.error", "Error, read annotations row $0", [rowText]); - break; - case " ace_security_fold": - ariaLabel = nls("gutter.annotation.aria-label.security", "Security finding, read annotations row $0", [rowText]); - break; - case " ace_warning_fold": - ariaLabel = nls("gutter.annotation.aria-label.warning", "Warning, read annotations row $0", [rowText]); - break; - } - annotationNode.setAttribute("aria-label", ariaLabel); - annotationNode.setAttribute("tabindex", "-1"); - annotationNode.setAttribute("role", "button"); - } - else if (this.$annotations[row]) { - annotationNode.className = "ace_gutter_annotation"; - annotationIconNode.className = iconClassName; - if (this.$useSvgGutterIcons) - annotationIconNode.className += this.$annotations[row].className; - else - element.classList.add(this.$annotations[row].className.replace(" ", "")); - dom.setStyle(annotationIconNode.style, "height", lineHeight); - dom.setStyle(annotationNode.style, "display", "block"); - dom.setStyle(annotationNode.style, "height", lineHeight); - var ariaLabel; - switch (this.$annotations[row].className) { - case " ace_error": - ariaLabel = nls("gutter.annotation.aria-label.error", "Error, read annotations row $0", [rowText]); - break; - case " ace_security": - ariaLabel = nls("gutter.annotation.aria-label.security", "Security finding, read annotations row $0", [rowText]); - break; - case " ace_warning": - ariaLabel = nls("gutter.annotation.aria-label.warning", "Warning, read annotations row $0", [rowText]); - break; - case " ace_info": - ariaLabel = nls("gutter.annotation.aria-label.info", "Info, read annotations row $0", [rowText]); - break; - case " ace_hint": - ariaLabel = nls("gutter.annotation.aria-label.hint", "Suggestion, read annotations row $0", [rowText]); - break; - } - annotationNode.setAttribute("aria-label", ariaLabel); - annotationNode.setAttribute("tabindex", "-1"); - annotationNode.setAttribute("role", "button"); - } - else { - dom.setStyle(annotationNode.style, "display", "none"); - annotationNode.removeAttribute("aria-label"); - annotationNode.removeAttribute("role"); - annotationNode.setAttribute("tabindex", "0"); - } - if (rowText !== textNode.data) { - textNode.data = rowText; - } - if (element.className != className) - element.className = className; - dom.setStyle(cell.element.style, "height", this.$lines.computeLineHeight(row, config, session) + "px"); - dom.setStyle(cell.element.style, "top", this.$lines.computeLineTop(row, config, session) + "px"); - cell.text = rowText; - if (annotationNode.style.display === "none" && foldWidget.style.display === "none" && !customWidgetAttributes) - cell.element.setAttribute("aria-hidden", true); - else - cell.element.setAttribute("aria-hidden", false); - return cell; - }; - Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) { - this.$highlightGutterLine = highlightGutterLine; - }; - Gutter.prototype.setShowLineNumbers = function (show) { - this.$renderer = !show && { - getWidth: function () { return 0; }, - getText: function () { return ""; } - }; - }; - Gutter.prototype.getShowLineNumbers = function () { - return this.$showLineNumbers; - }; - Gutter.prototype.setShowFoldWidgets = function (show) { - if (show) - dom.addCssClass(this.element, "ace_folding-enabled"); - else - dom.removeCssClass(this.element, "ace_folding-enabled"); - this.$showFoldWidgets = show; - this.$padding = null; - }; - Gutter.prototype.getShowFoldWidgets = function () { - return this.$showFoldWidgets; - }; - Gutter.prototype.$hideFoldWidget = function (row, cell) { - var rowCell = cell || this.$getGutterCell(row); - if (rowCell && rowCell.element) { - var foldWidget = rowCell.element.childNodes[1]; - if (foldWidget) { - dom.setStyle(foldWidget.style, "display", "none"); - } - } - }; - Gutter.prototype.$showFoldWidget = function (row, cell) { - var rowCell = cell || this.$getGutterCell(row); - if (rowCell && rowCell.element) { - var foldWidget = rowCell.element.childNodes[1]; - if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) { - dom.setStyle(foldWidget.style, "display", "inline-block"); - } - } - }; - Gutter.prototype.$getGutterCell = function (row) { - var cells = this.$lines.cells; - var visibileRow = this.session.documentToScreenRow(row, 0); - return cells[row - this.config.firstRowScreen - (row - visibileRow)]; - }; - Gutter.prototype.$addCustomWidget = function (row, _a, cell) { - var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks; - this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks }; - this.$hideFoldWidget(row, cell); - var rowCell = cell || this.$getGutterCell(row); - if (rowCell && rowCell.element) { - var customWidget = rowCell.element.querySelector(".ace_custom-widget"); - if (customWidget) { - customWidget.remove(); - } - customWidget = dom.createElement("span"); - customWidget.className = "ace_custom-widget ".concat(className); - customWidget.setAttribute("tabindex", "-1"); - customWidget.setAttribute("role", 'button'); - customWidget.setAttribute("aria-label", label); - customWidget.setAttribute("title", title); - dom.setStyle(customWidget.style, "display", "inline-block"); - dom.setStyle(customWidget.style, "height", "inherit"); - if (callbacks && callbacks.onClick) { - customWidget.addEventListener("click", function (e) { - callbacks.onClick(e, row); - e.stopPropagation(); - }); - } - rowCell.element.appendChild(customWidget); +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/ripemd.js": +/*!*****************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/ripemd.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ./utils */ "../../node_modules/hash.js/lib/hash/utils.js"); +var common = __webpack_require__(/*! ./common */ "../../node_modules/hash.js/lib/hash/common.js"); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = common.BlockHash; + +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) + return new RIPEMD160(); + + BlockHash.call(this); + + this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; + this.endian = 'little'; +} +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; + +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; + +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + for (var j = 0; j < 80; j++) { + var T = sum32( + rotl32( + sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), + s[j]), + E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32( + rotl32( + sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), + sh[j]), + Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; + } + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; + +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'little'); + else + return utils.split32(this.h, 'little'); +}; + +function f(j, x, y, z) { + if (j <= 15) + return x ^ y ^ z; + else if (j <= 31) + return (x & y) | ((~x) & z); + else if (j <= 47) + return (x | (~y)) ^ z; + else if (j <= 63) + return (x & z) | (y & (~z)); + else + return x ^ (y | (~z)); +} + +function K(j) { + if (j <= 15) + return 0x00000000; + else if (j <= 31) + return 0x5a827999; + else if (j <= 47) + return 0x6ed9eba1; + else if (j <= 63) + return 0x8f1bbcdc; + else + return 0xa953fd4e; +} + +function Kh(j) { + if (j <= 15) + return 0x50a28be6; + else if (j <= 31) + return 0x5c4dd124; + else if (j <= 47) + return 0x6d703ef3; + else if (j <= 63) + return 0x7a6d76e9; + else + return 0x00000000; +} + +var r = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +]; + +var rh = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +]; + +var s = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +]; + +var sh = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +]; + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/sha.js": +/*!**************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/sha.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +exports.sha1 = __webpack_require__(/*! ./sha/1 */ "../../node_modules/hash.js/lib/hash/sha/1.js"); +exports.sha224 = __webpack_require__(/*! ./sha/224 */ "../../node_modules/hash.js/lib/hash/sha/224.js"); +exports.sha256 = __webpack_require__(/*! ./sha/256 */ "../../node_modules/hash.js/lib/hash/sha/256.js"); +exports.sha384 = __webpack_require__(/*! ./sha/384 */ "../../node_modules/hash.js/lib/hash/sha/384.js"); +exports.sha512 = __webpack_require__(/*! ./sha/512 */ "../../node_modules/hash.js/lib/hash/sha/512.js"); + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/sha/1.js": +/*!****************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/sha/1.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); +var common = __webpack_require__(/*! ../common */ "../../node_modules/hash.js/lib/hash/common.js"); +var shaCommon = __webpack_require__(/*! ./common */ "../../node_modules/hash.js/lib/hash/sha/common.js"); + +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_5 = utils.sum32_5; +var ft_1 = shaCommon.ft_1; +var BlockHash = common.BlockHash; + +var sha1_K = [ + 0x5A827999, 0x6ED9EBA1, + 0x8F1BBCDC, 0xCA62C1D6 +]; + +function SHA1() { + if (!(this instanceof SHA1)) + return new SHA1(); + + BlockHash.call(this); + this.h = [ + 0x67452301, 0xefcdab89, 0x98badcfe, + 0x10325476, 0xc3d2e1f0 ]; + this.W = new Array(80); +} + +utils.inherits(SHA1, BlockHash); +module.exports = SHA1; + +SHA1.blockSize = 512; +SHA1.outSize = 160; +SHA1.hmacStrength = 80; +SHA1.padLength = 64; + +SHA1.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + + for(; i < W.length; i++) + W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + + for (i = 0; i < W.length; i++) { + var s = ~~(i / 20); + var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); + e = d; + d = c; + c = rotl32(b, 30); + b = a; + a = t; + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); +}; + +SHA1.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/sha/224.js": +/*!******************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/sha/224.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); +var SHA256 = __webpack_require__(/*! ./256 */ "../../node_modules/hash.js/lib/hash/sha/256.js"); + +function SHA224() { + if (!(this instanceof SHA224)) + return new SHA224(); + + SHA256.call(this); + this.h = [ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; +} +utils.inherits(SHA224, SHA256); +module.exports = SHA224; + +SHA224.blockSize = 512; +SHA224.outSize = 224; +SHA224.hmacStrength = 192; +SHA224.padLength = 64; + +SHA224.prototype._digest = function digest(enc) { + // Just truncate output + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 7), 'big'); + else + return utils.split32(this.h.slice(0, 7), 'big'); +}; + + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/sha/256.js": +/*!******************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/sha/256.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); +var common = __webpack_require__(/*! ../common */ "../../node_modules/hash.js/lib/hash/common.js"); +var shaCommon = __webpack_require__(/*! ./common */ "../../node_modules/hash.js/lib/hash/sha/common.js"); +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); + +var sum32 = utils.sum32; +var sum32_4 = utils.sum32_4; +var sum32_5 = utils.sum32_5; +var ch32 = shaCommon.ch32; +var maj32 = shaCommon.maj32; +var s0_256 = shaCommon.s0_256; +var s1_256 = shaCommon.s1_256; +var g0_256 = shaCommon.g0_256; +var g1_256 = shaCommon.g1_256; + +var BlockHash = common.BlockHash; + +var sha256_K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +]; + +function SHA256() { + if (!(this instanceof SHA256)) + return new SHA256(); + + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + this.k = sha256_K; + this.W = new Array(64); +} +utils.inherits(SHA256, BlockHash); +module.exports = SHA256; + +SHA256.blockSize = 512; +SHA256.outSize = 256; +SHA256.hmacStrength = 192; +SHA256.padLength = 64; + +SHA256.prototype._update = function _update(msg, start) { + var W = this.W; + + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + for (; i < W.length; i++) + W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); + + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + var f = this.h[5]; + var g = this.h[6]; + var h = this.h[7]; + + assert(this.k.length === W.length); + for (i = 0; i < W.length; i++) { + var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); + var T2 = sum32(s0_256(a), maj32(a, b, c)); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } + + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); + this.h[5] = sum32(this.h[5], f); + this.h[6] = sum32(this.h[6], g); + this.h[7] = sum32(this.h[7], h); +}; + +SHA256.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/sha/384.js": +/*!******************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/sha/384.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); + +var SHA512 = __webpack_require__(/*! ./512 */ "../../node_modules/hash.js/lib/hash/sha/512.js"); + +function SHA384() { + if (!(this instanceof SHA384)) + return new SHA384(); + + SHA512.call(this); + this.h = [ + 0xcbbb9d5d, 0xc1059ed8, + 0x629a292a, 0x367cd507, + 0x9159015a, 0x3070dd17, + 0x152fecd8, 0xf70e5939, + 0x67332667, 0xffc00b31, + 0x8eb44a87, 0x68581511, + 0xdb0c2e0d, 0x64f98fa7, + 0x47b5481d, 0xbefa4fa4 ]; +} +utils.inherits(SHA384, SHA512); +module.exports = SHA384; + +SHA384.blockSize = 1024; +SHA384.outSize = 384; +SHA384.hmacStrength = 192; +SHA384.padLength = 128; + +SHA384.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 12), 'big'); + else + return utils.split32(this.h.slice(0, 12), 'big'); +}; + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/sha/512.js": +/*!******************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/sha/512.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); +var common = __webpack_require__(/*! ../common */ "../../node_modules/hash.js/lib/hash/common.js"); +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); + +var rotr64_hi = utils.rotr64_hi; +var rotr64_lo = utils.rotr64_lo; +var shr64_hi = utils.shr64_hi; +var shr64_lo = utils.shr64_lo; +var sum64 = utils.sum64; +var sum64_hi = utils.sum64_hi; +var sum64_lo = utils.sum64_lo; +var sum64_4_hi = utils.sum64_4_hi; +var sum64_4_lo = utils.sum64_4_lo; +var sum64_5_hi = utils.sum64_5_hi; +var sum64_5_lo = utils.sum64_5_lo; + +var BlockHash = common.BlockHash; + +var sha512_K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; + +function SHA512() { + if (!(this instanceof SHA512)) + return new SHA512(); + + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xf3bcc908, + 0xbb67ae85, 0x84caa73b, + 0x3c6ef372, 0xfe94f82b, + 0xa54ff53a, 0x5f1d36f1, + 0x510e527f, 0xade682d1, + 0x9b05688c, 0x2b3e6c1f, + 0x1f83d9ab, 0xfb41bd6b, + 0x5be0cd19, 0x137e2179 ]; + this.k = sha512_K; + this.W = new Array(160); +} +utils.inherits(SHA512, BlockHash); +module.exports = SHA512; + +SHA512.blockSize = 1024; +SHA512.outSize = 512; +SHA512.hmacStrength = 192; +SHA512.padLength = 128; + +SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { + var W = this.W; + + // 32 x 32bit words + for (var i = 0; i < 32; i++) + W[i] = msg[start + i]; + for (; i < W.length; i += 2) { + var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 + var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); + var c1_hi = W[i - 14]; // i - 7 + var c1_lo = W[i - 13]; + var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 + var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); + var c3_hi = W[i - 32]; // i - 16 + var c3_lo = W[i - 31]; + + W[i] = sum64_4_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + W[i + 1] = sum64_4_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + } +}; + +SHA512.prototype._update = function _update(msg, start) { + this._prepareBlock(msg, start); + + var W = this.W; + + var ah = this.h[0]; + var al = this.h[1]; + var bh = this.h[2]; + var bl = this.h[3]; + var ch = this.h[4]; + var cl = this.h[5]; + var dh = this.h[6]; + var dl = this.h[7]; + var eh = this.h[8]; + var el = this.h[9]; + var fh = this.h[10]; + var fl = this.h[11]; + var gh = this.h[12]; + var gl = this.h[13]; + var hh = this.h[14]; + var hl = this.h[15]; + + assert(this.k.length === W.length); + for (var i = 0; i < W.length; i += 2) { + var c0_hi = hh; + var c0_lo = hl; + var c1_hi = s1_512_hi(eh, el); + var c1_lo = s1_512_lo(eh, el); + var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); + var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); + var c3_hi = this.k[i]; + var c3_lo = this.k[i + 1]; + var c4_hi = W[i]; + var c4_lo = W[i + 1]; + + var T1_hi = sum64_5_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + var T1_lo = sum64_5_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + + c0_hi = s0_512_hi(ah, al); + c0_lo = s0_512_lo(ah, al); + c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); + c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); + + var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); + var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); + + hh = gh; + hl = gl; + + gh = fh; + gl = fl; + + fh = eh; + fl = el; + + eh = sum64_hi(dh, dl, T1_hi, T1_lo); + el = sum64_lo(dl, dl, T1_hi, T1_lo); + + dh = ch; + dl = cl; + + ch = bh; + cl = bl; + + bh = ah; + bl = al; + + ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); + al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); + } + + sum64(this.h, 0, ah, al); + sum64(this.h, 2, bh, bl); + sum64(this.h, 4, ch, cl); + sum64(this.h, 6, dh, dl); + sum64(this.h, 8, eh, el); + sum64(this.h, 10, fh, fl); + sum64(this.h, 12, gh, gl); + sum64(this.h, 14, hh, hl); +}; + +SHA512.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; + +function ch64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ ((~xh) & zh); + if (r < 0) + r += 0x100000000; + return r; +} + +function ch64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ ((~xl) & zl); + if (r < 0) + r += 0x100000000; + return r; +} + +function maj64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); + if (r < 0) + r += 0x100000000; + return r; +} + +function maj64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); + if (r < 0) + r += 0x100000000; + return r; +} + +function s0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 28); + var c1_hi = rotr64_hi(xl, xh, 2); // 34 + var c2_hi = rotr64_hi(xl, xh, 7); // 39 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function s0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 28); + var c1_lo = rotr64_lo(xl, xh, 2); // 34 + var c2_lo = rotr64_lo(xl, xh, 7); // 39 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function s1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 14); + var c1_hi = rotr64_hi(xh, xl, 18); + var c2_hi = rotr64_hi(xl, xh, 9); // 41 + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function s1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 14); + var c1_lo = rotr64_lo(xh, xl, 18); + var c2_lo = rotr64_lo(xl, xh, 9); // 41 + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function g0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 1); + var c1_hi = rotr64_hi(xh, xl, 8); + var c2_hi = shr64_hi(xh, xl, 7); + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function g0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 1); + var c1_lo = rotr64_lo(xh, xl, 8); + var c2_lo = shr64_lo(xh, xl, 7); + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + +function g1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 19); + var c1_hi = rotr64_hi(xl, xh, 29); // 61 + var c2_hi = shr64_hi(xh, xl, 6); + + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} + +function g1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 19); + var c1_lo = rotr64_lo(xl, xh, 29); // 61 + var c2_lo = shr64_lo(xh, xl, 6); + + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/sha/common.js": +/*!*********************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/sha/common.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var utils = __webpack_require__(/*! ../utils */ "../../node_modules/hash.js/lib/hash/utils.js"); +var rotr32 = utils.rotr32; + +function ft_1(s, x, y, z) { + if (s === 0) + return ch32(x, y, z); + if (s === 1 || s === 3) + return p32(x, y, z); + if (s === 2) + return maj32(x, y, z); +} +exports.ft_1 = ft_1; + +function ch32(x, y, z) { + return (x & y) ^ ((~x) & z); +} +exports.ch32 = ch32; + +function maj32(x, y, z) { + return (x & y) ^ (x & z) ^ (y & z); +} +exports.maj32 = maj32; + +function p32(x, y, z) { + return x ^ y ^ z; +} +exports.p32 = p32; + +function s0_256(x) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} +exports.s0_256 = s0_256; + +function s1_256(x) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} +exports.s1_256 = s1_256; + +function g0_256(x) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); +} +exports.g0_256 = g0_256; + +function g1_256(x) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); +} +exports.g1_256 = g1_256; + + +/***/ }), + +/***/ "../../node_modules/hash.js/lib/hash/utils.js": +/*!****************************************************!*\ + !*** ../../node_modules/hash.js/lib/hash/utils.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +exports.inherits = inherits; + +function isSurrogatePair(msg, i) { + if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { + return false; + } + if (i < 0 || i + 1 >= msg.length) { + return false; + } + return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; +} + +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg === 'string') { + if (!enc) { + // Inspired by stringToUtf8ByteArray() in closure-library by Google + // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 + // Apache License 2.0 + // https://github.com/google/closure-library/blob/master/LICENSE + var p = 0; + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + if (c < 128) { + res[p++] = c; + } else if (c < 2048) { + res[p++] = (c >> 6) | 192; + res[p++] = (c & 63) | 128; + } else if (isSurrogatePair(msg, i)) { + c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); + res[p++] = (c >> 18) | 240; + res[p++] = ((c >> 12) & 63) | 128; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; + } else { + res[p++] = (c >> 12) | 224; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; } - }; - Gutter.prototype.$removeCustomWidget = function (row, cell) { - delete this.session.$gutterCustomWidgets[row]; - this.$showFoldWidget(row, cell); - var rowCell = cell || this.$getGutterCell(row); - if (rowCell && rowCell.element) { - var customWidget = rowCell.element.querySelector(".ace_custom-widget"); - if (customWidget) { - rowCell.element.removeChild(customWidget); - } + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + } else { + for (i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + } + return res; +} +exports.toArray = toArray; + +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +exports.toHex = toHex; + +function htonl(w) { + var res = (w >>> 24) | + ((w >>> 8) & 0xff00) | + ((w << 8) & 0xff0000) | + ((w & 0xff) << 24); + return res >>> 0; +} +exports.htonl = htonl; + +function toHex32(msg, endian) { + var res = ''; + for (var i = 0; i < msg.length; i++) { + var w = msg[i]; + if (endian === 'little') + w = htonl(w); + res += zero8(w.toString(16)); + } + return res; +} +exports.toHex32 = toHex32; + +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +exports.zero2 = zero2; + +function zero8(word) { + if (word.length === 7) + return '0' + word; + else if (word.length === 6) + return '00' + word; + else if (word.length === 5) + return '000' + word; + else if (word.length === 4) + return '0000' + word; + else if (word.length === 3) + return '00000' + word; + else if (word.length === 2) + return '000000' + word; + else if (word.length === 1) + return '0000000' + word; + else + return word; +} +exports.zero8 = zero8; + +function join32(msg, start, end, endian) { + var len = end - start; + assert(len % 4 === 0); + var res = new Array(len / 4); + for (var i = 0, k = start; i < res.length; i++, k += 4) { + var w; + if (endian === 'big') + w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; + else + w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; + res[i] = w >>> 0; + } + return res; +} +exports.join32 = join32; + +function split32(msg, endian) { + var res = new Array(msg.length * 4); + for (var i = 0, k = 0; i < msg.length; i++, k += 4) { + var m = msg[i]; + if (endian === 'big') { + res[k] = m >>> 24; + res[k + 1] = (m >>> 16) & 0xff; + res[k + 2] = (m >>> 8) & 0xff; + res[k + 3] = m & 0xff; + } else { + res[k + 3] = m >>> 24; + res[k + 2] = (m >>> 16) & 0xff; + res[k + 1] = (m >>> 8) & 0xff; + res[k] = m & 0xff; + } + } + return res; +} +exports.split32 = split32; + +function rotr32(w, b) { + return (w >>> b) | (w << (32 - b)); +} +exports.rotr32 = rotr32; + +function rotl32(w, b) { + return (w << b) | (w >>> (32 - b)); +} +exports.rotl32 = rotl32; + +function sum32(a, b) { + return (a + b) >>> 0; +} +exports.sum32 = sum32; + +function sum32_3(a, b, c) { + return (a + b + c) >>> 0; +} +exports.sum32_3 = sum32_3; + +function sum32_4(a, b, c, d) { + return (a + b + c + d) >>> 0; +} +exports.sum32_4 = sum32_4; + +function sum32_5(a, b, c, d, e) { + return (a + b + c + d + e) >>> 0; +} +exports.sum32_5 = sum32_5; + +function sum64(buf, pos, ah, al) { + var bh = buf[pos]; + var bl = buf[pos + 1]; + + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + buf[pos] = hi >>> 0; + buf[pos + 1] = lo; +} +exports.sum64 = sum64; + +function sum64_hi(ah, al, bh, bl) { + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + return hi >>> 0; +} +exports.sum64_hi = sum64_hi; + +function sum64_lo(ah, al, bh, bl) { + var lo = al + bl; + return lo >>> 0; +} +exports.sum64_lo = sum64_lo; + +function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + + var hi = ah + bh + ch + dh + carry; + return hi >>> 0; +} +exports.sum64_4_hi = sum64_4_hi; + +function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { + var lo = al + bl + cl + dl; + return lo >>> 0; +} +exports.sum64_4_lo = sum64_4_lo; + +function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + lo = (lo + el) >>> 0; + carry += lo < el ? 1 : 0; + + var hi = ah + bh + ch + dh + eh + carry; + return hi >>> 0; +} +exports.sum64_5_hi = sum64_5_hi; + +function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var lo = al + bl + cl + dl + el; + + return lo >>> 0; +} +exports.sum64_5_lo = sum64_5_lo; + +function rotr64_hi(ah, al, num) { + var r = (al << (32 - num)) | (ah >>> num); + return r >>> 0; +} +exports.rotr64_hi = rotr64_hi; + +function rotr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.rotr64_lo = rotr64_lo; + +function shr64_hi(ah, al, num) { + return ah >>> num; +} +exports.shr64_hi = shr64_hi; + +function shr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.shr64_lo = shr64_lo; + + +/***/ }), + +/***/ "../../node_modules/hmac-drbg/lib/hmac-drbg.js": +/*!*****************************************************!*\ + !*** ../../node_modules/hmac-drbg/lib/hmac-drbg.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var hash = __webpack_require__(/*! hash.js */ "../../node_modules/hash.js/lib/hash.js"); +var utils = __webpack_require__(/*! minimalistic-crypto-utils */ "../../node_modules/minimalistic-crypto-utils/lib/utils.js"); +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); + +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) + return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; + + this._reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; + + var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); + var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); + var pers = utils.toArray(options.pers, options.persEnc || 'hex'); + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._init(entropy, nonce, pers); +} +module.exports = HmacDRBG; + +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); + + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; + } + + this._update(seed); + this._reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 +}; + +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); +}; + +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac() + .update(this.V) + .update([ 0x00 ]); + if (seed) + kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) + return; + + this.K = this._hmac() + .update(this.V) + .update([ 0x01 ]) + .update(seed) + .digest(); + this.V = this._hmac().update(this.V).digest(); +}; + +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; + } + + entropy = utils.toArray(entropy, entropyEnc); + add = utils.toArray(add, addEnc); + + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + + this._update(entropy.concat(add || [])); + this._reseed = 1; +}; + +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this._reseed > this.reseedInterval) + throw new Error('Reseed is required'); + + // Optional encoding + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } + + // Optional additional data + if (add) { + add = utils.toArray(add, addEnc || 'hex'); + this._update(add); + } + + var temp = []; + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); + } + + var res = temp.slice(0, len); + this._update(add); + this._reseed++; + return utils.encode(res, enc); +}; + + +/***/ }), + +/***/ "../../node_modules/ieee754/index.js": +/*!*******************************************!*\ + !*** ../../node_modules/ieee754/index.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, exports) => { + +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + + +/***/ }), + +/***/ "../../node_modules/inherits/inherits_browser.js": +/*!*******************************************************!*\ + !*** ../../node_modules/inherits/inherits_browser.js ***! + \*******************************************************/ +/***/ ((module) => { + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true } - }; - Gutter.prototype.$computePadding = function () { - if (!this.element.firstChild) - return { left: 0, right: 0 }; - var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild)); - this.$padding = {}; - this.$padding.left = (parseInt(style.borderLeftWidth) || 0) - + (parseInt(style.paddingLeft) || 0) + 1; - this.$padding.right = (parseInt(style.borderRightWidth) || 0) - + (parseInt(style.paddingRight) || 0); - return this.$padding; - }; - Gutter.prototype.getRegion = function (point) { - var padding = this.$padding || this.$computePadding(); - var rect = this.element.getBoundingClientRect(); - if (point.x < padding.left + rect.left) - return "markers"; - if (this.$showFoldWidgets && point.x > rect.right - padding.right) - return "foldWidgets"; - }; - return Gutter; -}()); -Gutter.prototype.$fixedWidth = false; -Gutter.prototype.$highlightGutterLine = true; -Gutter.prototype.$renderer = ""; -Gutter.prototype.$showLineNumbers = true; -Gutter.prototype.$showFoldWidgets = true; -oop.implement(Gutter.prototype, EventEmitter); -function onCreateCell(element) { - var textNode = document.createTextNode(''); - element.appendChild(textNode); - var foldWidget = dom.createElement("span"); - element.appendChild(foldWidget); - var annotationNode = dom.createElement("span"); - element.appendChild(annotationNode); - var annotationIconNode = dom.createElement("span"); - annotationNode.appendChild(annotationIconNode); - return element; + }) + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } + } +} + + +/***/ }), + +/***/ "../../node_modules/md5.js/index.js": +/*!******************************************!*\ + !*** ../../node_modules/md5.js/index.js ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var HashBase = __webpack_require__(/*! hash-base */ "../../node_modules/hash-base/index.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var ARRAY16 = new Array(16) + +function MD5 () { + HashBase.call(this, 64) + + // state + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 +} + +inherits(MD5, HashBase) + +MD5.prototype._update = function () { + var M = ARRAY16 + for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4) + + var a = this._a + var b = this._b + var c = this._c + var d = this._d + + a = fnF(a, b, c, d, M[0], 0xd76aa478, 7) + d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12) + c = fnF(c, d, a, b, M[2], 0x242070db, 17) + b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22) + a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7) + d = fnF(d, a, b, c, M[5], 0x4787c62a, 12) + c = fnF(c, d, a, b, M[6], 0xa8304613, 17) + b = fnF(b, c, d, a, M[7], 0xfd469501, 22) + a = fnF(a, b, c, d, M[8], 0x698098d8, 7) + d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12) + c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17) + b = fnF(b, c, d, a, M[11], 0x895cd7be, 22) + a = fnF(a, b, c, d, M[12], 0x6b901122, 7) + d = fnF(d, a, b, c, M[13], 0xfd987193, 12) + c = fnF(c, d, a, b, M[14], 0xa679438e, 17) + b = fnF(b, c, d, a, M[15], 0x49b40821, 22) + + a = fnG(a, b, c, d, M[1], 0xf61e2562, 5) + d = fnG(d, a, b, c, M[6], 0xc040b340, 9) + c = fnG(c, d, a, b, M[11], 0x265e5a51, 14) + b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20) + a = fnG(a, b, c, d, M[5], 0xd62f105d, 5) + d = fnG(d, a, b, c, M[10], 0x02441453, 9) + c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14) + b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20) + a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5) + d = fnG(d, a, b, c, M[14], 0xc33707d6, 9) + c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14) + b = fnG(b, c, d, a, M[8], 0x455a14ed, 20) + a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5) + d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9) + c = fnG(c, d, a, b, M[7], 0x676f02d9, 14) + b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20) + + a = fnH(a, b, c, d, M[5], 0xfffa3942, 4) + d = fnH(d, a, b, c, M[8], 0x8771f681, 11) + c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16) + b = fnH(b, c, d, a, M[14], 0xfde5380c, 23) + a = fnH(a, b, c, d, M[1], 0xa4beea44, 4) + d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11) + c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16) + b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23) + a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4) + d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11) + c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16) + b = fnH(b, c, d, a, M[6], 0x04881d05, 23) + a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4) + d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11) + c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16) + b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23) + + a = fnI(a, b, c, d, M[0], 0xf4292244, 6) + d = fnI(d, a, b, c, M[7], 0x432aff97, 10) + c = fnI(c, d, a, b, M[14], 0xab9423a7, 15) + b = fnI(b, c, d, a, M[5], 0xfc93a039, 21) + a = fnI(a, b, c, d, M[12], 0x655b59c3, 6) + d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10) + c = fnI(c, d, a, b, M[10], 0xffeff47d, 15) + b = fnI(b, c, d, a, M[1], 0x85845dd1, 21) + a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6) + d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10) + c = fnI(c, d, a, b, M[6], 0xa3014314, 15) + b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21) + a = fnI(a, b, c, d, M[4], 0xf7537e82, 6) + d = fnI(d, a, b, c, M[11], 0xbd3af235, 10) + c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15) + b = fnI(b, c, d, a, M[9], 0xeb86d391, 21) + + this._a = (this._a + a) | 0 + this._b = (this._b + b) | 0 + this._c = (this._c + c) | 0 + this._d = (this._d + d) | 0 } -exports.Gutter = Gutter; -}); +MD5.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80 + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64) + this._update() + this._blockOffset = 0 + } -ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(require, exports, module){"use strict"; -var Range = require("../range").Range; -var dom = require("../lib/dom"); -var Marker = /** @class */ (function () { - function Marker(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_marker-layer"; - parentEl.appendChild(this.element); - } - Marker.prototype.setPadding = function (padding) { - this.$padding = padding; - }; - Marker.prototype.setSession = function (session) { - this.session = session; - }; - Marker.prototype.setMarkers = function (markers) { - this.markers = markers; - }; - Marker.prototype.elt = function (className, css) { - var x = this.i != -1 && this.element.childNodes[this.i]; - if (!x) { - x = document.createElement("div"); - this.element.appendChild(x); - this.i = -1; - } - else { - this.i++; - } - x.style.cssText = css; - x.className = className; - }; - Marker.prototype.update = function (config) { - if (!config) - return; - this.config = config; - this.i = 0; - var html; - for (var key in this.markers) { - var marker = this.markers[key]; - if (!marker.range) { - marker.update(html, this, this.session, config); - continue; - } - var range = marker.range.clipRows(config.firstRow, config.lastRow); - if (range.isEmpty()) - continue; - range = range.toScreenRange(this.session); - if (marker.renderer) { - var top = this.$getTop(range.start.row, config); - var left = this.$padding + range.start.column * config.characterWidth; - marker.renderer(html, range, left, top, config); - } - else if (marker.type == "fullLine") { - this.drawFullLineMarker(html, range, marker.clazz, config); - } - else if (marker.type == "screenLine") { - this.drawScreenLineMarker(html, range, marker.clazz, config); - } - else if (range.isMultiLine()) { - if (marker.type == "text") - this.drawTextMarker(html, range, marker.clazz, config); - else - this.drawMultiLineMarker(html, range, marker.clazz, config); - } - else { - this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config); - } - } - if (this.i != -1) { - while (this.i < this.element.childElementCount) - this.element.removeChild(this.element.lastChild); - } - }; - Marker.prototype.$getTop = function (row, layerConfig) { - return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; - }; - Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) { - var session = this.session; - var start = range.start.row; - var end = range.end.row; - var row = start; - var prev = 0; - var curr = 0; - var next = session.getScreenLastRowColumn(row); - var lineRange = new Range(row, range.start.column, row, curr); - for (; row <= end; row++) { - lineRange.start.row = lineRange.end.row = row; - lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row); - lineRange.end.column = next; - prev = curr; - curr = next; - next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column; - this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? " ace_start" : "") + " ace_br" - + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle); - } - }; - Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { - var padding = this.$padding; - var height = config.lineHeight; - var top = this.$getTop(range.start.row, config); - var left = padding + range.start.column * config.characterWidth; - extraStyle = extraStyle || ""; - if (this.session.$bidiHandler.isBidiRow(range.start.row)) { - var range1 = range.clone(); - range1.end.row = range1.start.row; - range1.end.column = this.session.getLine(range1.start.row).length; - this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + " ace_br1 ace_start", config, null, extraStyle); - } - else { - this.elt(clazz + " ace_br1 ace_start", "height:" + height + "px;" + "right:" + padding + "px;" + "top:" + top + "px;left:" + left + "px;" + (extraStyle || "")); - } - if (this.session.$bidiHandler.isBidiRow(range.end.row)) { - var range1 = range.clone(); - range1.start.row = range1.end.row; - range1.start.column = 0; - this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + " ace_br12", config, null, extraStyle); - } - else { - top = this.$getTop(range.end.row, config); - var width = range.end.column * config.characterWidth; - this.elt(clazz + " ace_br12", "height:" + height + "px;" + - "width:" + width + "px;" + - "top:" + top + "px;" + - "left:" + padding + "px;" + (extraStyle || "")); - } - height = (range.end.row - range.start.row - 1) * config.lineHeight; - if (height <= 0) - return; - top = this.$getTop(range.start.row + 1, config); - var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8); - this.elt(clazz + (radiusClass ? " ace_br" + radiusClass : ""), "height:" + height + "px;" + - "right:" + padding + "px;" + - "top:" + top + "px;" + - "left:" + padding + "px;" + (extraStyle || "")); - }; - Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) { - if (this.session.$bidiHandler.isBidiRow(range.start.row)) - return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle); - var height = config.lineHeight; - var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; - var top = this.$getTop(range.start.row, config); - var left = this.$padding + range.start.column * config.characterWidth; - this.elt(clazz, "height:" + height + "px;" + - "width:" + width + "px;" + - "top:" + top + "px;" + - "left:" + left + "px;" + (extraStyle || "")); - }; - Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) { - var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding; - var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column); - selections.forEach(function (selection) { - this.elt(clazz, "height:" + height + "px;" + - "width:" + (selection.width + (extraLength || 0)) + "px;" + - "top:" + top + "px;" + - "left:" + (padding + selection.left) + "px;" + (extraStyle || "")); - }, this); - }; - Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { - var top = this.$getTop(range.start.row, config); - var height = config.lineHeight; - if (range.start.row != range.end.row) - height += this.$getTop(range.end.row, config) - top; - this.elt(clazz, "height:" + height + "px;" + - "top:" + top + "px;" + - "left:0;right:0;" + (extraStyle || "")); - }; - Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { - var top = this.$getTop(range.start.row, config); - var height = config.lineHeight; - this.elt(clazz, "height:" + height + "px;" + - "top:" + top + "px;" + - "left:0;right:0;" + (extraStyle || "")); - }; - return Marker; -}()); -Marker.prototype.$padding = 0; -function getBorderClass(tl, tr, br, bl) { - return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0); + this._block.fill(0, this._blockOffset, 56) + this._block.writeUInt32LE(this._length[0], 56) + this._block.writeUInt32LE(this._length[1], 60) + this._update() + + // produce result + var buffer = Buffer.allocUnsafe(16) + buffer.writeInt32LE(this._a, 0) + buffer.writeInt32LE(this._b, 4) + buffer.writeInt32LE(this._c, 8) + buffer.writeInt32LE(this._d, 12) + return buffer } -exports.Marker = Marker; -}); +function rotl (x, n) { + return (x << n) | (x >>> (32 - n)) +} -ace.define("ace/layer/text_util",["require","exports","module"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className. -var textTokens = new Set(["text", "rparen", "lparen"]); -exports.isTextToken = function (tokenType) { - return textTokens.has(tokenType); +function fnF (a, b, c, d, m, k, s) { + return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0 +} + +function fnG (a, b, c, d, m, k, s) { + return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0 +} + +function fnH (a, b, c, d, m, k, s) { + return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0 +} + +function fnI (a, b, c, d, m, k, s) { + return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0 +} + +module.exports = MD5 + + +/***/ }), + +/***/ "../../node_modules/miller-rabin/lib/mr.js": +/*!*************************************************!*\ + !*** ../../node_modules/miller-rabin/lib/mr.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var bn = __webpack_require__(/*! bn.js */ "../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js"); +var brorand = __webpack_require__(/*! brorand */ "../../node_modules/brorand/index.js"); + +function MillerRabin(rand) { + this.rand = rand || new brorand.Rand(); +} +module.exports = MillerRabin; + +MillerRabin.create = function create(rand) { + return new MillerRabin(rand); +}; + +MillerRabin.prototype._randbelow = function _randbelow(n) { + var len = n.bitLength(); + var min_bytes = Math.ceil(len / 8); + + // Generage random bytes until a number less than n is found. + // This ensures that 0..n-1 have an equal probability of being selected. + do + var a = new bn(this.rand.generate(min_bytes)); + while (a.cmp(n) >= 0); + + return a; +}; + +MillerRabin.prototype._randrange = function _randrange(start, stop) { + // Generate a random number greater than or equal to start and less than stop. + var size = stop.sub(start); + return start.add(this._randbelow(size)); +}; + +MillerRabin.prototype.test = function test(n, k, cb) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + + if (!k) + k = Math.max(1, (len / 48) | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + + var rn1 = n1.toRed(red); + + var prime = true; + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + if (cb) + cb(a); + + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) + continue; + + for (var i = 1; i < s; i++) { + x = x.redSqr(); + + if (x.cmp(rone) === 0) + return false; + if (x.cmp(rn1) === 0) + break; + } + + if (i === s) + return false; + } + + return prime; +}; + +MillerRabin.prototype.getDivisor = function getDivisor(n, k) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); + + if (!k) + k = Math.max(1, (len / 48) | 0); + + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); + + var rn1 = n1.toRed(red); + + for (; k > 0; k--) { + var a = this._randrange(new bn(2), n1); + + var g = n.gcd(a); + if (g.cmpn(1) !== 0) + return g; + + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) + continue; + + for (var i = 1; i < s; i++) { + x = x.redSqr(); + + if (x.cmp(rone) === 0) + return x.fromRed().subn(1).gcd(n); + if (x.cmp(rn1) === 0) + break; + } + + if (i === s) { + x = x.redSqr(); + return x.fromRed().subn(1).gcd(n); + } + } + + return false; }; -}); -ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter","ace/config","ace/layer/text_util"], function(require, exports, module){"use strict"; -var oop = require("../lib/oop"); -var dom = require("../lib/dom"); -var lang = require("../lib/lang"); -var Lines = require("./lines").Lines; -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var nls = require("../config").nls; -var isTextToken = require("./text_util").isTextToken; -var Text = /** @class */ (function () { - function Text(parentEl) { - this.dom = dom; - this.element = this.dom.createElement("div"); - this.element.className = "ace_layer ace_text-layer"; - parentEl.appendChild(this.element); - this.$updateEolChar = this.$updateEolChar.bind(this); - this.$lines = new Lines(this.element); - } - Text.prototype.$updateEolChar = function () { - var doc = this.session.doc; - var unixMode = doc.getNewLineCharacter() == "\n" && doc.getNewLineMode() != "windows"; - var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF; - if (this.EOL_CHAR != EOL_CHAR) { - this.EOL_CHAR = EOL_CHAR; - return true; - } - }; - Text.prototype.setPadding = function (padding) { - this.$padding = padding; - this.element.style.margin = "0 " + padding + "px"; - }; - Text.prototype.getLineHeight = function () { - return this.$fontMetrics.$characterSize.height || 0; - }; - Text.prototype.getCharacterWidth = function () { - return this.$fontMetrics.$characterSize.width || 0; - }; - Text.prototype.$setFontMetrics = function (measure) { - this.$fontMetrics = measure; - this.$fontMetrics.on("changeCharacterSize", - function (e) { - this._signal("changeCharacterSize", e); - }.bind(this)); - this.$pollSizeChanges(); - }; - Text.prototype.checkForSizeChanges = function () { - this.$fontMetrics.checkForSizeChanges(); - }; - Text.prototype.$pollSizeChanges = function () { - return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges(); - }; - Text.prototype.setSession = function (session) { - this.session = session; - if (session) - this.$computeTabString(); - }; - Text.prototype.setShowInvisibles = function (showInvisibles) { - if (this.showInvisibles == showInvisibles) - return false; - this.showInvisibles = showInvisibles; - if (typeof showInvisibles == "string") { - this.showSpaces = /tab/i.test(showInvisibles); - this.showTabs = /space/i.test(showInvisibles); - this.showEOL = /eol/i.test(showInvisibles); - } - else { - this.showSpaces = this.showTabs = this.showEOL = showInvisibles; - } - this.$computeTabString(); - return true; - }; - Text.prototype.setDisplayIndentGuides = function (display) { - if (this.displayIndentGuides == display) - return false; - this.displayIndentGuides = display; - this.$computeTabString(); - return true; - }; - Text.prototype.setHighlightIndentGuides = function (highlight) { - if (this.$highlightIndentGuides === highlight) - return false; - this.$highlightIndentGuides = highlight; - return highlight; - }; - Text.prototype.$computeTabString = function () { - var tabSize = this.session.getTabSize(); - this.tabSize = tabSize; var tabStr = this.$tabStrings = [0]; - for (var i = 1; i < tabSize + 1; i++) { - if (this.showTabs) { - var span = this.dom.createElement("span"); - span.className = "ace_invisible ace_invisible_tab"; - span.textContent = lang.stringRepeat(this.TAB_CHAR, i); - tabStr.push(span); - } - else { - tabStr.push(this.dom.createTextNode(lang.stringRepeat(" ", i), this.element)); - } - } - if (this.displayIndentGuides) { - this.$indentGuideRe = /\s\S| \t|\t |\s$/; - var className = "ace_indent-guide"; - var spaceClass = this.showSpaces ? " ace_invisible ace_invisible_space" : ""; - var spaceContent = this.showSpaces - ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize) - : lang.stringRepeat(" ", this.tabSize); - var tabClass = this.showTabs ? " ace_invisible ace_invisible_tab" : ""; - var tabContent = this.showTabs - ? lang.stringRepeat(this.TAB_CHAR, this.tabSize) - : spaceContent; - var span = this.dom.createElement("span"); - span.className = className + spaceClass; - span.textContent = spaceContent; - this.$tabStrings[" "] = span; - var span = this.dom.createElement("span"); - span.className = className + tabClass; - span.textContent = tabContent; - this.$tabStrings["\t"] = span; - } - }; - Text.prototype.updateLines = function (config, firstRow, lastRow) { - if (this.config.lastRow != config.lastRow || - this.config.firstRow != config.firstRow) { - return this.update(config); - } - this.config = config; - var first = Math.max(firstRow, config.firstRow); - var last = Math.min(lastRow, config.lastRow); - var lineElements = this.element.childNodes; - var lineElementsIdx = 0; - for (var row = config.firstRow; row < first; row++) { - var foldLine = this.session.getFoldLine(row); - if (foldLine) { - if (foldLine.containsRow(first)) { - first = foldLine.start.row; - break; - } - else { - row = foldLine.end.row; - } - } - lineElementsIdx++; - } - var heightChanged = false; - var row = first; - var foldLine = this.session.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (true) { - if (row > foldStart) { - row = foldLine.end.row + 1; - foldLine = this.session.getNextFoldLine(row, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - if (row > last) - break; var lineElement = lineElements[lineElementsIdx++]; - if (lineElement) { - this.dom.removeChildren(lineElement); - this.$renderLine(lineElement, row, row == foldStart ? foldLine : false); - if (heightChanged) - lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + "px"; - var height = (config.lineHeight * this.session.getRowLength(row)) + "px"; - if (lineElement.style.height != height) { - heightChanged = true; - lineElement.style.height = height; - } - } - row++; - } - if (heightChanged) { - while (lineElementsIdx < this.$lines.cells.length) { - var cell = this.$lines.cells[lineElementsIdx++]; - cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + "px"; - } - } - }; - Text.prototype.scrollLines = function (config) { - var oldConfig = this.config; - this.config = config; - if (this.$lines.pageChanged(oldConfig, config)) - return this.update(config); - this.$lines.moveContainer(config); - var lastRow = config.lastRow; - var oldLastRow = oldConfig ? oldConfig.lastRow : -1; - if (!oldConfig || oldLastRow < config.firstRow) - return this.update(config); - if (lastRow < oldConfig.firstRow) - return this.update(config); - if (!oldConfig || oldConfig.lastRow < config.firstRow) - return this.update(config); - if (config.lastRow < oldConfig.firstRow) - return this.update(config); - if (oldConfig.firstRow < config.firstRow) - for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) - this.$lines.shift(); - if (oldConfig.lastRow > config.lastRow) - for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--) - this.$lines.pop(); - if (config.firstRow < oldConfig.firstRow) { - this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1)); - } - if (config.lastRow > oldConfig.lastRow) { - this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow)); - } - this.$highlightIndentGuide(); - }; - Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) { - var fragment = []; - var row = firstRow; - var foldLine = this.session.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (true) { - if (row > foldStart) { - row = foldLine.end.row + 1; - foldLine = this.session.getNextFoldLine(row, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - if (row > lastRow) - break; - var line = this.$lines.createCell(row, config, this.session); - var lineEl = line.element; - this.dom.removeChildren(lineEl); - dom.setStyle(lineEl.style, "height", this.$lines.computeLineHeight(row, config, this.session) + "px"); - dom.setStyle(lineEl.style, "top", this.$lines.computeLineTop(row, config, this.session) + "px"); - this.$renderLine(lineEl, row, row == foldStart ? foldLine : false); - if (this.$useLineGroups()) { - lineEl.className = "ace_line_group"; - } - else { - lineEl.className = "ace_line"; - } - fragment.push(line); - row++; - } - return fragment; - }; - Text.prototype.update = function (config) { - this.$lines.moveContainer(config); - this.config = config; - var firstRow = config.firstRow; - var lastRow = config.lastRow; - var lines = this.$lines; - while (lines.getLength()) - lines.pop(); - lines.push(this.$renderLinesFragment(config, firstRow, lastRow)); - }; - Text.prototype.$renderToken = function (parent, screenColumn, token, value) { - var self = this; - var re = /(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC\u2066\u2067\u2068\u202A\u202B\u202D\u202E\u202C\u2069\u2060\u2061\u2062\u2063\u2064\u206A\u206B\u206B\u206C\u206D\u206E\u206F]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g; - var valueFragment = this.dom.createFragment(this.element); - var m; - var i = 0; - while (m = re.exec(value)) { - var tab = m[1]; - var simpleSpace = m[2]; - var controlCharacter = m[3]; - var cjkSpace = m[4]; - var cjk = m[5]; - if (!self.showSpaces && simpleSpace) - continue; - var before = i != m.index ? value.slice(i, m.index) : ""; - i = m.index + m[0].length; - if (before) { - valueFragment.appendChild(this.dom.createTextNode(before, this.element)); - } - if (tab) { - var tabSize = self.session.getScreenTabSize(screenColumn + m.index); - var text = self.$tabStrings[tabSize].cloneNode(true); - text["charCount"] = 1; - valueFragment.appendChild(text); - screenColumn += tabSize - 1; - } - else if (simpleSpace) { - if (self.showSpaces) { - var span = this.dom.createElement("span"); - span.className = "ace_invisible ace_invisible_space"; - span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length); - valueFragment.appendChild(span); - } - else { - valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element)); - } - } - else if (controlCharacter) { - var span = this.dom.createElement("span"); - span.className = "ace_invisible ace_invisible_space ace_invalid"; - span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length); - valueFragment.appendChild(span); - } - else if (cjkSpace) { - screenColumn += 1; - var span = this.dom.createElement("span"); - span.style.width = (self.config.characterWidth * 2) + "px"; - span.className = self.showSpaces ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk"; - span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace; - valueFragment.appendChild(span); - } - else if (cjk) { - screenColumn += 1; - var span = this.dom.createElement("span"); - span.style.width = (self.config.characterWidth * 2) + "px"; - span.className = "ace_cjk"; - span.textContent = cjk; - valueFragment.appendChild(span); - } - } - valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element)); - if (!isTextToken(token.type)) { - var classes = "ace_" + token.type.replace(/\./g, " ace_"); - var span = this.dom.createElement("span"); - if (token.type == "fold") { - span.style.width = (token.value.length * this.config.characterWidth) + "px"; - span.setAttribute("title", nls("inline-fold.closed.title", "Unfold code")); - } - span.className = classes; - span.appendChild(valueFragment); - parent.appendChild(span); - } - else { - parent.appendChild(valueFragment); - } - return screenColumn + value.length; - }; - Text.prototype.renderIndentGuide = function (parent, value, max) { - var cols = value.search(this.$indentGuideRe); - if (cols <= 0 || cols >= max) - return value; - if (value[0] == " ") { - cols -= cols % this.tabSize; - var count = cols / this.tabSize; - for (var i = 0; i < count; i++) { - parent.appendChild(this.$tabStrings[" "].cloneNode(true)); - } - this.$highlightIndentGuide(); - return value.substr(cols); - } - else if (value[0] == "\t") { - for (var i = 0; i < cols; i++) { - parent.appendChild(this.$tabStrings["\t"].cloneNode(true)); - } - this.$highlightIndentGuide(); - return value.substr(cols); - } - this.$highlightIndentGuide(); - return value; - }; - Text.prototype.$highlightIndentGuide = function () { - if (!this.$highlightIndentGuides || !this.displayIndentGuides) - return; - this.$highlightIndentGuideMarker = { - indentLevel: undefined, - start: undefined, - end: undefined, - dir: undefined - }; - var lines = this.session.doc.$lines; - if (!lines) - return; - var cursor = this.session.selection.getCursor(); - var initialIndent = /^\s*/.exec(this.session.doc.getLine(cursor.row))[0].length; - var elementIndentLevel = Math.floor(initialIndent / this.tabSize); - this.$highlightIndentGuideMarker = { - indentLevel: elementIndentLevel, - start: cursor.row - }; - var bracketHighlight = this.session.$bracketHighlight; - if (bracketHighlight) { - var ranges = this.session.$bracketHighlight.ranges; - for (var i = 0; i < ranges.length; i++) { - if (cursor.row !== ranges[i].start.row) { - this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1; - if (cursor.row > ranges[i].start.row) { - this.$highlightIndentGuideMarker.dir = -1; - } - else { - this.$highlightIndentGuideMarker.dir = 1; - } - break; - } - } - } - if (!this.$highlightIndentGuideMarker.end) { - if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) { - this.$highlightIndentGuideMarker.dir = 1; - for (var i = cursor.row + 1; i < lines.length; i++) { - var line = lines[i]; - var currentIndent = /^\s*/.exec(line)[0].length; - if (line !== '') { - this.$highlightIndentGuideMarker.end = i; - if (currentIndent <= initialIndent) - break; - } - } - } - } - this.$renderHighlightIndentGuide(); - }; - Text.prototype.$clearActiveIndentGuide = function () { - var activeIndentGuides = this.element.querySelectorAll(".ace_indent-guide-active"); - for (var i = 0; i < activeIndentGuides.length; i++) { - activeIndentGuides[i].classList.remove("ace_indent-guide-active"); - } - }; - Text.prototype.$setIndentGuideActive = function (cell, indentLevel) { - var line = this.session.doc.getLine(cell.row); - if (line !== "") { - var element = cell.element; - if (cell.element.classList && cell.element.classList.contains("ace_line_group")) { - if (cell.element.childNodes.length > 0) { - element = cell.element.childNodes[0]; - } - else { - return; - } - } - var childNodes = element.childNodes; - if (childNodes) { - var node = childNodes[indentLevel - 1]; - if (node && node.classList && node.classList.contains("ace_indent-guide")) - node.classList.add("ace_indent-guide-active"); - } - } - }; - Text.prototype.$renderHighlightIndentGuide = function () { - if (!this.$lines) - return; - var cells = this.$lines.cells; - this.$clearActiveIndentGuide(); - var indentLevel = this.$highlightIndentGuideMarker.indentLevel; - if (indentLevel !== 0) { - if (this.$highlightIndentGuideMarker.dir === 1) { - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start - + 1) { - if (cell.row >= this.$highlightIndentGuideMarker.end) - break; - this.$setIndentGuideActive(cell, indentLevel); - } - } - } - else { - for (var i = cells.length - 1; i >= 0; i--) { - var cell = cells[i]; - if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) { - if (cell.row < this.$highlightIndentGuideMarker.end) - break; - this.$setIndentGuideActive(cell, indentLevel); - } - } - } - } - }; - Text.prototype.$createLineElement = function (parent) { - var lineEl = this.dom.createElement("div"); - lineEl.className = "ace_line"; - lineEl.style.height = this.config.lineHeight + "px"; - return lineEl; - }; - Text.prototype.$renderWrappedLine = function (parent, tokens, splits) { - var chars = 0; - var split = 0; - var splitChars = splits[0]; - var screenColumn = 0; - var lineEl = this.$createLineElement(); - parent.appendChild(lineEl); - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - var value = token.value; - if (i == 0 && this.displayIndentGuides) { - chars = value.length; - value = this.renderIndentGuide(lineEl, value, splitChars); - if (!value) - continue; - chars -= value.length; - } - if (chars + value.length < splitChars) { - screenColumn = this.$renderToken(lineEl, screenColumn, token, value); - chars += value.length; - } - else { - while (chars + value.length >= splitChars) { - screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars)); - value = value.substring(splitChars - chars); - chars = splitChars; - lineEl = this.$createLineElement(); - parent.appendChild(lineEl); - var text = this.dom.createTextNode(lang.stringRepeat("\xa0", splits.indent), this.element); - text["charCount"] = 0; // not to take into account when we are counting columns - lineEl.appendChild(text); - split++; - screenColumn = 0; - splitChars = splits[split] || Number.MAX_VALUE; - } - if (value.length != 0) { - chars += value.length; - screenColumn = this.$renderToken(lineEl, screenColumn, token, value); - } - } +/***/ }), + +/***/ "../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js": +/*!********************************************************************!*\ + !*** ../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js ***! + \********************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(/*! buffer */ "?4c42").Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); + } + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - if (splits[splits.length - 1] > this.MAX_LINE_LENGTH) - this.$renderOverflowMessage(lineEl, screenColumn, null, "", true); - }; - Text.prototype.$renderSimpleLine = function (parent, tokens) { - var screenColumn = 0; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - var value = token.value; - if (i == 0 && this.displayIndentGuides) { - value = this.renderIndentGuide(parent, value); - if (!value) - continue; - } - if (screenColumn + value.length > this.MAX_LINE_LENGTH) - return this.$renderOverflowMessage(parent, screenColumn, token, value); - screenColumn = this.$renderToken(parent, screenColumn, token, value); + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - }; - Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) { - token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn)); - var overflowEl = this.dom.createElement("span"); - overflowEl.className = "ace_inline_button ace_keyword ace_toggle_wrap"; - overflowEl.textContent = hide ? "" : ""; - parent.appendChild(overflowEl); - }; - Text.prototype.$renderLine = function (parent, row, foldLine) { - if (!foldLine && foldLine != false) - foldLine = this.session.getFoldLine(row); - if (foldLine) - var tokens = this.$getFoldLineTokens(row, foldLine); - else - var tokens = this.session.getTokens(row); - var lastLineEl = parent; - if (tokens.length) { - var splits = this.session.getRowSplitData(row); - if (splits && splits.length) { - this.$renderWrappedLine(parent, tokens, splits); - var lastLineEl = parent.lastChild; - } - else { - var lastLineEl = parent; - if (this.$useLineGroups()) { - lastLineEl = this.$createLineElement(); - parent.appendChild(lastLineEl); - } - this.$renderSimpleLine(lastLineEl, tokens); - } + } + } + return this.strip(); + }; + + function parseHex4Bits (string, index) { + var c = string.charCodeAt(index); + // 'A' - 'F' + if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return (c - 48) & 0xf; + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - else if (this.$useLineGroups()) { - lastLineEl = this.$createLineElement(); - parent.appendChild(lastLineEl); + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - if (this.showEOL && lastLineEl) { - if (foldLine) - row = foldLine.end.row; - var invisibleEl = this.dom.createElement("span"); - invisibleEl.className = "ace_invisible ace_invisible_eol"; - invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR; - lastLineEl.appendChild(invisibleEl); + } + } + + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this.strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; }; - Text.prototype.$getFoldLineTokens = function (row, foldLine) { - var session = this.session; - var renderTokens = []; - function addTokens(tokens, from, to) { - var idx = 0, col = 0; - while ((col + tokens[idx].value.length) < from) { - col += tokens[idx].value.length; - idx++; - if (idx == tokens.length) - return; - } - if (col != from) { - var value = tokens[idx].value.substring(from - col); - if (value.length > (to - from)) - value = value.substring(0, to - from); - renderTokens.push({ - type: tokens[idx].type, - value: value - }); - col = from + value.length; - idx += 1; - } - while (col < to && idx < tokens.length) { - var value = tokens[idx].value; - if (value.length + col > to) { - renderTokens.push({ - type: tokens[idx].type, - value: value.substring(0, to - col) - }); - } - else - renderTokens.push(tokens[idx]); - col += value.length; - idx += 1; - } + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } } - var tokens = session.getTokens(row); - foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) { - if (placeholder != null) { - renderTokens.push({ - type: "fold", - value: placeholder - }); - } - else { - if (isNewRow) - tokens = session.getTokens(row); - if (tokens.length) - addTokens(tokens, lastColumn, column); - } - }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); - return renderTokens; - }; - Text.prototype.$useLineGroups = function () { - return this.session.getUseWrapMode(); - }; - return Text; -}()); -Text.prototype.EOF_CHAR = "\xB6"; -Text.prototype.EOL_CHAR_LF = "\xAC"; -Text.prototype.EOL_CHAR_CRLF = "\xa4"; -Text.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF; -Text.prototype.TAB_CHAR = "\u2014"; //"\u21E5"; -Text.prototype.SPACE_CHAR = "\xB7"; -Text.prototype.$padding = 0; -Text.prototype.MAX_LINE_LENGTH = 10000; -Text.prototype.showInvisibles = false; -Text.prototype.showSpaces = false; -Text.prototype.showTabs = false; -Text.prototype.showEOL = false; -Text.prototype.displayIndentGuides = true; -Text.prototype.$highlightIndentGuides = true; -Text.prototype.$tabStrings = []; -Text.prototype.destroy = {}; -Text.prototype.onChangeTabSize = Text.prototype.$computeTabString; -oop.implement(Text.prototype, EventEmitter); -exports.Text = Text; + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } -}); + return this.strip(); + }; -ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var Cursor = /** @class */ (function () { - function Cursor(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_cursor-layer"; - parentEl.appendChild(this.element); - this.isVisible = false; - this.isBlinking = true; - this.blinkInterval = 1000; - this.smoothBlinking = false; - this.cursors = []; - this.cursor = this.addCursor(); - dom.addCssClass(this.element, "ace_hidden-cursors"); - this.$updateCursors = this.$updateOpacity.bind(this); + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; } - Cursor.prototype.$updateOpacity = function (val) { - var cursors = this.cursors; - for (var i = cursors.length; i--;) - dom.setStyle(cursors[i].style, "opacity", val ? "" : "0"); - }; - Cursor.prototype.$startCssAnimation = function () { - var cursors = this.cursors; - for (var i = cursors.length; i--;) - cursors[i].style.animationDuration = this.blinkInterval + "ms"; - this.$isAnimating = true; - setTimeout(function () { - if (this.$isAnimating) { - dom.addCssClass(this.element, "ace_animate-blinking"); - } - }.bind(this)); - }; - Cursor.prototype.$stopCssAnimation = function () { - this.$isAnimating = false; - dom.removeCssClass(this.element, "ace_animate-blinking"); - }; - Cursor.prototype.setPadding = function (padding) { - this.$padding = padding; - }; - Cursor.prototype.setSession = function (session) { - this.session = session; - }; - Cursor.prototype.setBlinking = function (blinking) { - if (blinking != this.isBlinking) { - this.isBlinking = blinking; - this.restartTimer(); - } - }; - Cursor.prototype.setBlinkInterval = function (blinkInterval) { - if (blinkInterval != this.blinkInterval) { - this.blinkInterval = blinkInterval; - this.restartTimer(); - } - }; - Cursor.prototype.setSmoothBlinking = function (smoothBlinking) { - if (smoothBlinking != this.smoothBlinking) { - this.smoothBlinking = smoothBlinking; - dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); - this.$updateCursors(true); - this.restartTimer(); - } - }; - Cursor.prototype.addCursor = function () { - var el = dom.createElement("div"); - el.className = "ace_cursor"; - this.element.appendChild(el); - this.cursors.push(el); - return el; - }; - Cursor.prototype.removeCursor = function () { - if (this.cursors.length > 1) { - var el = this.cursors.pop(); - el.parentNode.removeChild(el); - return el; + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a }; - Cursor.prototype.hideCursor = function () { - this.isVisible = false; - dom.addCssClass(this.element, "ace_hidden-cursors"); - this.restartTimer(); - }; - Cursor.prototype.showCursor = function () { - this.isVisible = true; - dom.removeCssClass(this.element, "ace_hidden-cursors"); - this.restartTimer(); - }; - Cursor.prototype.restartTimer = function () { - var update = this.$updateCursors; - clearInterval(this.intervalId); - clearTimeout(this.timeoutId); - this.$stopCssAnimation(); - if (this.smoothBlinking) { - this.$isSmoothBlinking = false; - dom.removeCssClass(this.element, "ace_smooth-blinking"); - } - update(true); - if (!this.isBlinking || !this.blinkInterval || !this.isVisible) { - this.$stopCssAnimation(); - return; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); } - if (this.smoothBlinking) { - this.$isSmoothBlinking = true; - setTimeout(function () { - if (this.$isSmoothBlinking) { - dom.addCssClass(this.element, "ace_smooth-blinking"); - } - }.bind(this)); + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); } - if (dom.HAS_CSS_ANIMATION) { - this.$startCssAnimation(); + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); } - else { - var blink = /**@this{Cursor}*/ function () { - this.timeoutId = setTimeout(function () { - update(false); - }, 0.6 * this.blinkInterval); - }.bind(this); - this.intervalId = setInterval(function () { - update(true); - blink(); - }, this.blinkInterval); - blink(); + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) }; - Cursor.prototype.getPixelPosition = function (position, onScreen) { - if (!this.config || !this.session) - return { left: 0, top: 0 }; - if (!position) - position = this.session.selection.getCursor(); - var pos = this.session.documentToScreenPosition(position); - var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row) - ? this.session.$bidiHandler.getPosLeft(pos.column) - : pos.column * this.config.characterWidth); - var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * - this.config.lineHeight; - return { left: cursorLeft, top: cursorTop }; - }; - Cursor.prototype.isCursorInView = function (pixelPos, config) { - return pixelPos.top >= 0 && pixelPos.top < config.maxHeight; - }; - Cursor.prototype.update = function (config) { - this.config = config; - var selections = this.session.$selectionMarkers; - var i = 0, cursorIndex = 0; - if (selections === undefined || selections.length === 0) { - selections = [{ cursor: null }]; - } - for (var i = 0, n = selections.length; i < n; i++) { - var pixelPos = this.getPixelPosition(selections[i].cursor, true); - if ((pixelPos.top > config.height + config.offset || - pixelPos.top < 0) && i > 1) { - continue; - } - var element = this.cursors[cursorIndex++] || this.addCursor(); - var style = element.style; - if (!this.drawCursor) { - if (!this.isCursorInView(pixelPos, config)) { - dom.setStyle(style, "display", "none"); - } - else { - dom.setStyle(style, "display", "block"); - dom.translate(element, pixelPos.left, pixelPos.top); - dom.setStyle(style, "width", Math.round(config.characterWidth) + "px"); - dom.setStyle(style, "height", config.lineHeight + "px"); - } - } - else { - this.drawCursor(element, pixelPos, config, selections[i], this.session); - } + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); } - while (this.cursors.length > cursorIndex) - this.removeCursor(); - var overwrite = this.session.getOverwrite(); - this.$setOverwrite(overwrite); - this.$pixelPos = pixelPos; - this.restartTimer(); - }; - Cursor.prototype.$setOverwrite = function (overwrite) { - if (overwrite != this.overwrite) { - this.overwrite = overwrite; - if (overwrite) - dom.addCssClass(this.element, "ace_overwrite-cursors"); - else - dom.removeCssClass(this.element, "ace_overwrite-cursors"); + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); } - }; - Cursor.prototype.destroy = function () { - clearInterval(this.intervalId); - clearTimeout(this.timeoutId); - }; - return Cursor; -}()); -Cursor.prototype.$padding = 0; -Cursor.prototype.drawCursor = null; -exports.Cursor = Cursor; + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; -}); + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; -ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var event = require("./lib/event"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var MAX_SCROLL_H = 0x8000; -var Scrollbar = /** @class */ (function () { - function Scrollbar(parent, classSuffix) { - this.element = dom.createElement("div"); - this.element.className = "ace_scrollbar ace_scrollbar" + classSuffix; - this.inner = dom.createElement("div"); - this.inner.className = "ace_scrollbar-inner"; - this.inner.textContent = "\xa0"; - this.element.appendChild(this.inner); - parent.appendChild(this.element); - this.setVisible(false); - this.skipEvent = false; - event.addListener(this.element, "scroll", this.onScroll.bind(this)); - event.addListener(this.element, "mousedown", event.preventDefault); - } - Scrollbar.prototype.setVisible = function (isVisible) { - this.element.style.display = isVisible ? "" : "none"; - this.isVisible = isVisible; - this.coeff = 1; - }; - return Scrollbar; -}()); -oop.implement(Scrollbar.prototype, EventEmitter); -var VScrollBar = /** @class */ (function (_super) { - __extends(VScrollBar, _super); - function VScrollBar(parent, renderer) { - var _this = _super.call(this, parent, '-v') || this; - _this.scrollTop = 0; - _this.scrollHeight = 0; - renderer.$scrollbarWidth = - _this.width = dom.scrollbarWidth(parent.ownerDocument); - _this.inner.style.width = - _this.element.style.width = (_this.width || 15) + 5 + "px"; - _this.$minWidth = 0; - return _this; - } - VScrollBar.prototype.onScroll = function () { - if (!this.skipEvent) { - this.scrollTop = this.element.scrollTop; - if (this.coeff != 1) { - var h = this.element.clientHeight / this.scrollHeight; - this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h); - } - this._emit("scroll", { data: this.scrollTop }); - } - this.skipEvent = false; - }; - VScrollBar.prototype.getWidth = function () { - return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0); - }; - VScrollBar.prototype.setHeight = function (height) { - this.element.style.height = height + "px"; - }; - VScrollBar.prototype.setScrollHeight = function (height) { - this.scrollHeight = height; - if (height > MAX_SCROLL_H) { - this.coeff = MAX_SCROLL_H / height; - height = MAX_SCROLL_H; - } - else if (this.coeff != 1) { - this.coeff = 1; - } - this.inner.style.height = height + "px"; - }; - VScrollBar.prototype.setScrollTop = function (scrollTop) { - if (this.scrollTop != scrollTop) { - this.skipEvent = true; - this.scrollTop = scrollTop; - this.element.scrollTop = scrollTop * this.coeff; - } - }; - return VScrollBar; -}(Scrollbar)); -VScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight; -var HScrollBar = /** @class */ (function (_super) { - __extends(HScrollBar, _super); - function HScrollBar(parent, renderer) { - var _this = _super.call(this, parent, '-h') || this; - _this.scrollLeft = 0; - _this.height = renderer.$scrollbarWidth; - _this.inner.style.height = - _this.element.style.height = (_this.height || 15) + 5 + "px"; - return _this; - } - HScrollBar.prototype.onScroll = function () { - if (!this.skipEvent) { - this.scrollLeft = this.element.scrollLeft; - this._emit("scroll", { data: this.scrollLeft }); - } - this.skipEvent = false; - }; - HScrollBar.prototype.getHeight = function () { - return this.isVisible ? this.height : 0; - }; - HScrollBar.prototype.setWidth = function (width) { - this.element.style.width = width + "px"; - }; - HScrollBar.prototype.setInnerWidth = function (width) { - this.inner.style.width = width + "px"; - }; - HScrollBar.prototype.setScrollWidth = function (width) { - this.inner.style.width = width + "px"; - }; - HScrollBar.prototype.setScrollLeft = function (scrollLeft) { - if (this.scrollLeft != scrollLeft) { - this.skipEvent = true; - this.scrollLeft = this.element.scrollLeft = scrollLeft; - } - }; - return HScrollBar; -}(Scrollbar)); -exports.ScrollBar = VScrollBar; // backward compatibility -exports.ScrollBarV = VScrollBar; // backward compatibility -exports.ScrollBarH = HScrollBar; // backward compatibility -exports.VScrollBar = VScrollBar; -exports.HScrollBar = HScrollBar; + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; -}); + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; -ace.define("ace/scrollbar_custom",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var event = require("./lib/event"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -dom.importCssString(".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\n position: absolute;\n background: rgba(128, 128, 128, 0.6);\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n border: 1px solid #bbb;\n border-radius: 2px;\n z-index: 8;\n}\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\n position: absolute;\n z-index: 6;\n background: none;\n overflow: hidden!important;\n}\n.ace_editor>.ace_sb-v {\n z-index: 6;\n right: 0;\n top: 0;\n width: 12px;\n}\n.ace_editor>.ace_sb-v div {\n z-index: 8;\n right: 0;\n width: 100%;\n}\n.ace_editor>.ace_sb-h {\n bottom: 0;\n left: 0;\n height: 12px;\n}\n.ace_editor>.ace_sb-h div {\n bottom: 0;\n height: 100%;\n}\n.ace_editor>.ace_sb_grabbed {\n z-index: 8;\n background: #000;\n}", "ace_scrollbar.css", false); -var ScrollBar = /** @class */ (function () { - function ScrollBar(parent, classSuffix) { - this.element = dom.createElement("div"); - this.element.className = "ace_sb" + classSuffix; - this.inner = dom.createElement("div"); - this.inner.className = ""; - this.element.appendChild(this.inner); - this.VScrollWidth = 12; - this.HScrollHeight = 12; - parent.appendChild(this.element); - this.setVisible(false); - this.skipEvent = false; - event.addMultiMouseDownListener(this.element, [500, 300, 300], this, "onMouseDown"); + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is BN v4 instance + r.strip(); + } else { + // r is BN v5 instance + r._strip(); + } } - ScrollBar.prototype.setVisible = function (isVisible) { - this.element.style.display = isVisible ? "" : "none"; - this.isVisible = isVisible; - this.coeff = 1; - }; - return ScrollBar; -}()); -oop.implement(ScrollBar.prototype, EventEmitter); -var VScrollBar = /** @class */ (function (_super) { - __extends(VScrollBar, _super); - function VScrollBar(parent, renderer) { - var _this = _super.call(this, parent, '-v') || this; - _this.scrollTop = 0; - _this.scrollHeight = 0; - _this.parent = parent; - _this.width = _this.VScrollWidth; - _this.renderer = renderer; - _this.inner.style.width = _this.element.style.width = (_this.width || 15) + "px"; - _this.$minWidth = 0; - return _this; + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; } - VScrollBar.prototype.onMouseDown = function (eType, e) { - if (eType !== "mousedown") - return; - if (event.getButton(e) !== 0 || e.detail === 2) { - return; - } - if (e.target === this.inner) { - var self = this; - var mousePageY = e.clientY; - var onMouseMove = function (e) { - mousePageY = e.clientY; - }; - var onMouseUp = function () { - clearInterval(timerId); - }; - var startY = e.clientY; - var startTop = this.thumbTop; - var onScrollInterval = function () { - if (mousePageY === undefined) - return; - var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY); - if (scrollTop === self.scrollTop) - return; - self._emit("scroll", { data: scrollTop }); - }; - event.capture(this.inner, onMouseMove, onMouseUp); - var timerId = setInterval(onScrollInterval, 20); - return event.preventDefault(e); - } - var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2; - this._emit("scroll", { data: this.scrollTopFromThumbTop(top) }); - return event.preventDefault(e); - }; - VScrollBar.prototype.getHeight = function () { - return this.height; - }; - VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) { - var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight); - scrollTop = scrollTop >> 0; - if (scrollTop < 0) { - scrollTop = 0; - } - else if (scrollTop > this.pageHeight - this.viewHeight) { - scrollTop = this.pageHeight - this.viewHeight; - } - return scrollTop; - }; - VScrollBar.prototype.getWidth = function () { - return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0); - }; - VScrollBar.prototype.setHeight = function (height) { - this.height = Math.max(0, height); - this.slideHeight = this.height; - this.viewHeight = this.height; - this.setScrollHeight(this.pageHeight, true); - }; - VScrollBar.prototype.setScrollHeight = function (height, force) { - if (this.pageHeight === height && !force) - return; - this.pageHeight = height; - this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight; - if (this.thumbHeight > this.slideHeight) - this.thumbHeight = this.slideHeight; - if (this.thumbHeight < 15) - this.thumbHeight = 15; - this.inner.style.height = this.thumbHeight + "px"; - if (this.scrollTop > (this.pageHeight - this.viewHeight)) { - this.scrollTop = (this.pageHeight - this.viewHeight); - if (this.scrollTop < 0) - this.scrollTop = 0; - this._emit("scroll", { data: this.scrollTop }); - } - }; - VScrollBar.prototype.setScrollTop = function (scrollTop) { - this.scrollTop = scrollTop; - if (scrollTop < 0) - scrollTop = 0; - this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight); - this.inner.style.top = this.thumbTop + "px"; - }; - return VScrollBar; -}(ScrollBar)); -VScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight; -var HScrollBar = /** @class */ (function (_super) { - __extends(HScrollBar, _super); - function HScrollBar(parent, renderer) { - var _this = _super.call(this, parent, '-h') || this; - _this.scrollLeft = 0; - _this.scrollWidth = 0; - _this.height = _this.HScrollHeight; - _this.inner.style.height = _this.element.style.height = (_this.height || 12) + "px"; - _this.renderer = renderer; - return _this; + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; } - HScrollBar.prototype.onMouseDown = function (eType, e) { - if (eType !== "mousedown") - return; - if (event.getButton(e) !== 0 || e.detail === 2) { - return; - } - if (e.target === this.inner) { - var self = this; - var mousePageX = e.clientX; - var onMouseMove = function (e) { - mousePageX = e.clientX; - }; - var onMouseUp = function () { - clearInterval(timerId); - }; - var startX = e.clientX; - var startLeft = this.thumbLeft; - var onScrollInterval = function () { - if (mousePageX === undefined) - return; - var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX); - if (scrollLeft === self.scrollLeft) - return; - self._emit("scroll", { data: scrollLeft }); - }; - event.capture(this.inner, onMouseMove, onMouseUp); - var timerId = setInterval(onScrollInterval, 20); - return event.preventDefault(e); - } - var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2; - this._emit("scroll", { data: this.scrollLeftFromThumbLeft(left) }); - return event.preventDefault(e); - }; - HScrollBar.prototype.getHeight = function () { - return this.isVisible ? this.height : 0; - }; - HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) { - var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth); - scrollLeft = scrollLeft >> 0; - if (scrollLeft < 0) { - scrollLeft = 0; - } - else if (scrollLeft > this.pageWidth - this.viewWidth) { - scrollLeft = this.pageWidth - this.viewWidth; - } - return scrollLeft; - }; - HScrollBar.prototype.setWidth = function (width) { - this.width = Math.max(0, width); - this.element.style.width = this.width + "px"; - this.slideWidth = this.width; - this.viewWidth = this.width; - this.setScrollWidth(this.pageWidth, true); - }; - HScrollBar.prototype.setScrollWidth = function (width, force) { - if (this.pageWidth === width && !force) - return; - this.pageWidth = width; - this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth; - if (this.thumbWidth > this.slideWidth) - this.thumbWidth = this.slideWidth; - if (this.thumbWidth < 15) - this.thumbWidth = 15; - this.inner.style.width = this.thumbWidth + "px"; - if (this.scrollLeft > (this.pageWidth - this.viewWidth)) { - this.scrollLeft = (this.pageWidth - this.viewWidth); - if (this.scrollLeft < 0) - this.scrollLeft = 0; - this._emit("scroll", { data: this.scrollLeft }); - } - }; - HScrollBar.prototype.setScrollLeft = function (scrollLeft) { - this.scrollLeft = scrollLeft; - if (scrollLeft < 0) - scrollLeft = 0; - this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth); - this.inner.style.left = (this.thumbLeft) + "px"; - }; - return HScrollBar; -}(ScrollBar)); -HScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth; -exports.ScrollBar = VScrollBar; // backward compatibility -exports.ScrollBarV = VScrollBar; // backward compatibility -exports.ScrollBarH = HScrollBar; // backward compatibility -exports.VScrollBar = VScrollBar; -exports.HScrollBar = HScrollBar; -}); + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; -ace.define("ace/renderloop",["require","exports","module","ace/lib/event"], function(require, exports, module){"use strict"; -var event = require("./lib/event"); -var RenderLoop = /** @class */ (function () { - function RenderLoop(onRender, win) { - this.onRender = onRender; - this.pending = false; - this.changes = 0; - this.$recursionLimit = 2; - this.window = win || window; - var _self = this; - this._flush = function (ts) { - _self.pending = false; - var changes = _self.changes; - if (changes) { - event.blockIdle(100); - _self.changes = 0; - _self.onRender(changes); - } - if (_self.changes) { - if (_self.$recursionLimit-- < 0) - return; - _self.schedule(); - } - else { - _self.$recursionLimit = 2; - } - }; + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; } - RenderLoop.prototype.schedule = function (change) { - this.changes = this.changes | change; - if (this.changes && !this.pending) { - event.nextFrame(this._flush); - this.pending = true; - } - }; - RenderLoop.prototype.clear = function (change) { - var changes = this.changes; - this.changes = 0; - return changes; - }; - return RenderLoop; -}()); -exports.RenderLoop = RenderLoop; + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; -}); + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; -ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module){var oop = require("../lib/oop"); -var dom = require("../lib/dom"); -var lang = require("../lib/lang"); -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var CHAR_COUNT = 512; -var USE_OBSERVER = typeof ResizeObserver == "function"; -var L = 200; -var FontMetrics = /** @class */ (function () { - function FontMetrics(parentEl) { - this.el = dom.createElement("div"); - this.$setMeasureNodeStyles(this.el.style, true); - this.$main = dom.createElement("div"); - this.$setMeasureNodeStyles(this.$main.style); - this.$measureNode = dom.createElement("div"); - this.$setMeasureNodeStyles(this.$measureNode.style); - this.el.appendChild(this.$main); - this.el.appendChild(this.$measureNode); - parentEl.appendChild(this.el); - this.$measureNode.textContent = lang.stringRepeat("X", CHAR_COUNT); - this.$characterSize = { width: 0, height: 0 }; - if (USE_OBSERVER) - this.$addObserver(); - else - this.checkForSizeChanges(); + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); } - FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) { - style.width = style.height = "auto"; - style.left = style.top = "0px"; - style.visibility = "hidden"; - style.position = "absolute"; - style.whiteSpace = "pre"; - if (useragent.isIE < 8) { - style["font-family"] = "inherit"; - } - else { - style.font = "inherit"; - } - style.overflow = isRoot ? "hidden" : "visible"; - }; - FontMetrics.prototype.checkForSizeChanges = function (size) { - if (size === undefined) - size = this.$measureSizes(); - if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { - this.$measureNode.style.fontWeight = "bold"; - var boldSize = this.$measureSizes(); - this.$measureNode.style.fontWeight = ""; - this.$characterSize = size; - this.charSizes = Object.create(null); - this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; - this._emit("changeCharacterSize", { data: size }); - } - }; - FontMetrics.prototype.$addObserver = function () { - var self = this; - this.$observer = new window.ResizeObserver(function (e) { - self.checkForSizeChanges(); - }); - this.$observer.observe(this.$measureNode); - }; - FontMetrics.prototype.$pollSizeChanges = function () { - if (this.$pollSizeChangesTimer || this.$observer) - return this.$pollSizeChangesTimer; - var self = this; - return this.$pollSizeChangesTimer = event.onIdle(function cb() { - self.checkForSizeChanges(); - event.onIdle(cb, 500); - }, 500); - }; - FontMetrics.prototype.setPolling = function (val) { - if (val) { - this.$pollSizeChanges(); - } - else if (this.$pollSizeChangesTimer) { - clearInterval(this.$pollSizeChangesTimer); - this.$pollSizeChangesTimer = 0; - } - }; - FontMetrics.prototype.$measureSizes = function (node) { - var size = { - height: (node || this.$measureNode).clientHeight, - width: (node || this.$measureNode).clientWidth / CHAR_COUNT - }; - if (size.width === 0 || size.height === 0) - return null; - return size; - }; - FontMetrics.prototype.$measureCharWidth = function (ch) { - this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT); - var rect = this.$main.getBoundingClientRect(); - return rect.width / CHAR_COUNT; - }; - FontMetrics.prototype.getCharacterWidth = function (ch) { - var w = this.charSizes[ch]; - if (w === undefined) { - w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width; - } - return w; - }; - FontMetrics.prototype.destroy = function () { - clearInterval(this.$pollSizeChangesTimer); - if (this.$observer) - this.$observer.disconnect(); - if (this.el && this.el.parentNode) - this.el.parentNode.removeChild(this.el); - }; - FontMetrics.prototype.$getZoom = function (element) { - if (!element || !element.parentElement) - return 1; - return (Number(window.getComputedStyle(element)["zoom"]) || 1) * this.$getZoom(element.parentElement); - }; - FontMetrics.prototype.$initTransformMeasureNodes = function () { - var t = function (t, l) { - return ["div", { - style: "position: absolute;top:" + t + "px;left:" + l + "px;" - }]; - }; - this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el); - }; - FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) { - if (clientPos) { - var zoom = this.$getZoom(this.el); - clientPos = mul(1 / zoom, clientPos); - } - function solve(l1, l2, r) { - var det = l1[1] * l2[0] - l1[0] * l2[1]; - return [ - (-l2[1] * r[0] + l2[0] * r[1]) / det, - (+l1[1] * r[0] - l1[0] * r[1]) / det - ]; - } - function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; } - function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; } - function mul(a, b) { return [a * b[0], a * b[1]]; } - if (!this.els) - this.$initTransformMeasureNodes(); - function p(el) { - var r = el.getBoundingClientRect(); - return [r.left, r.top]; - } - var a = p(this.els[0]); - var b = p(this.els[1]); - var c = p(this.els[2]); - var d = p(this.els[3]); - var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a))); - var m1 = mul(1 + h[0], sub(b, a)); - var m2 = mul(1 + h[1], sub(c, a)); - if (elPos) { - var x = elPos; - var k = h[0] * x[0] / L + h[1] * x[1] / L + 1; - var ut = add(mul(x[0], m1), mul(x[1], m2)); - return add(mul(1 / k / L, ut), a); - } - var u = sub(clientPos, a); - var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u); - return mul(L, f); - }; - return FontMetrics; -}()); -FontMetrics.prototype.$characterSize = { width: 0, height: 0 }; -oop.implement(FontMetrics.prototype, EventEmitter); -exports.FontMetrics = FontMetrics; -}); + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; -ace.define("ace/css/editor-css",["require","exports","module"], function(require, exports, module){/* -styles = [] -for (var i = 1; i < 16; i++) { - styles.push(".ace_br" + i + "{" + ( - ["top-left", "top-right", "bottom-right", "bottom-left"] - ).map(function(x, j) { - return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\n contain: style size layout;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n}\n\n.ace_hidpi .ace_text-layer,\n.ace_hidpi .ace_gutter-layer,\n.ace_hidpi .ace_content,\n.ace_hidpi .ace_gutter {\n contain: strict;\n}\n.ace_hidpi .ace_text-layer > .ace_line, \n.ace_hidpi .ace_text-layer > .ace_line_group {\n contain: strict;\n}\n\n.ace_cjk {\n display: inline-block;\n text-align: center;\n}\n\n.ace_cursor-layer {\n z-index: 4;\n}\n\n.ace_cursor {\n z-index: 4;\n position: absolute;\n box-sizing: border-box;\n border-left: 2px solid;\n /* workaround for smooth cursor repaintng whole screen in chrome */\n transform: translatez(0);\n}\n\n.ace_multiselect .ace_cursor {\n border-left-width: 1px;\n}\n\n.ace_slim-cursors .ace_cursor {\n border-left-width: 1px;\n}\n\n.ace_overwrite-cursors .ace_cursor {\n border-left-width: 0;\n border-bottom: 1px solid;\n}\n\n.ace_hidden-cursors .ace_cursor {\n opacity: 0.2;\n}\n\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\n opacity: 0;\n}\n\n.ace_smooth-blinking .ace_cursor {\n transition: opacity 0.18s;\n}\n\n.ace_animate-blinking .ace_cursor {\n animation-duration: 1000ms;\n animation-timing-function: step-end;\n animation-name: blink-ace-animate;\n animation-iteration-count: infinite;\n}\n\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\n animation-duration: 1000ms;\n animation-timing-function: ease-in-out;\n animation-name: blink-ace-animate-smooth;\n}\n \n@keyframes blink-ace-animate {\n from, to { opacity: 1; }\n 60% { opacity: 0; }\n}\n\n@keyframes blink-ace-animate-smooth {\n from, to { opacity: 1; }\n 45% { opacity: 1; }\n 60% { opacity: 0; }\n 85% { opacity: 0; }\n}\n\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\n position: absolute;\n z-index: 3;\n}\n\n.ace_marker-layer .ace_selection {\n position: absolute;\n z-index: 5;\n}\n\n.ace_marker-layer .ace_bracket {\n position: absolute;\n z-index: 6;\n}\n\n.ace_marker-layer .ace_error_bracket {\n position: absolute;\n border-bottom: 1px solid #DE5555;\n border-radius: 0;\n}\n\n.ace_marker-layer .ace_active-line {\n position: absolute;\n z-index: 2;\n}\n\n.ace_marker-layer .ace_selected-word {\n position: absolute;\n z-index: 4;\n box-sizing: border-box;\n}\n\n.ace_line .ace_fold {\n box-sizing: border-box;\n\n display: inline-block;\n height: 11px;\n margin-top: -2px;\n vertical-align: middle;\n\n background-image:\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n color: transparent;\n\n border: 1px solid black;\n border-radius: 2px;\n\n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_dark .ace_fold {\n}\n\n.ace_fold:hover{\n background-image:\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\n}\n\n.ace_tooltip {\n background-color: #f5f5f5;\n border: 1px solid gray;\n border-radius: 1px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n color: black;\n padding: 3px 4px;\n position: fixed;\n z-index: 999999;\n box-sizing: border-box;\n cursor: default;\n white-space: pre-wrap;\n word-wrap: break-word;\n line-height: normal;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n pointer-events: none;\n overflow: auto;\n max-width: min(33em, 66vw);\n overscroll-behavior: contain;\n}\n.ace_tooltip pre {\n white-space: pre-wrap;\n}\n\n.ace_tooltip.ace_dark {\n background-color: #636363;\n color: #fff;\n}\n\n.ace_tooltip:focus {\n outline: 1px solid #5E9ED6;\n}\n\n.ace_icon {\n display: inline-block;\n width: 18px;\n vertical-align: top;\n}\n\n.ace_icon_svg {\n display: inline-block;\n width: 12px;\n vertical-align: top;\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-size: 12px;\n -webkit-mask-position: center;\n}\n\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\n padding-right: 13px;\n}\n\n.ace_fold-widget, .ace_custom-widget {\n box-sizing: border-box;\n\n margin: 0 -12px 0 1px;\n display: none;\n width: 11px;\n vertical-align: top;\n\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\n background-repeat: no-repeat;\n background-position: center;\n\n border-radius: 3px;\n \n border: 1px solid transparent;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_custom-widget {\n background: none;\n}\n\n.ace_folding-enabled .ace_fold-widget {\n display: inline-block; \n}\n\n.ace_fold-widget.ace_end {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\n}\n\n.ace_fold-widget.ace_closed {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\n}\n\n.ace_fold-widget:hover {\n border: 1px solid rgba(0, 0, 0, 0.3);\n background-color: rgba(255, 255, 255, 0.2);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n}\n\n.ace_fold-widget:active {\n border: 1px solid rgba(0, 0, 0, 0.4);\n background-color: rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n}\n/**\n * Dark version for fold widgets\n */\n.ace_dark .ace_fold-widget {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\n}\n.ace_dark .ace_fold-widget.ace_end {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget.ace_closed {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget:hover {\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n background-color: rgba(255, 255, 255, 0.1);\n}\n.ace_dark .ace_fold-widget:active {\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n}\n\n.ace_inline_button {\n border: 1px solid lightgray;\n display: inline-block;\n margin: -1px 8px;\n padding: 0 5px;\n pointer-events: auto;\n cursor: pointer;\n}\n.ace_inline_button:hover {\n border-color: gray;\n background: rgba(200,200,200,0.2);\n display: inline-block;\n pointer-events: auto;\n}\n\n.ace_fold-widget.ace_invalid {\n background-color: #FFB4B4;\n border-color: #DE5555;\n}\n\n.ace_fade-fold-widgets .ace_fold-widget {\n transition: opacity 0.4s ease 0.05s;\n opacity: 0;\n}\n\n.ace_fade-fold-widgets:hover .ace_fold-widget {\n transition: opacity 0.05s ease 0.05s;\n opacity:1;\n}\n\n.ace_underline {\n text-decoration: underline;\n}\n\n.ace_bold {\n font-weight: bold;\n}\n\n.ace_nobold .ace_bold {\n font-weight: normal;\n}\n\n.ace_italic {\n font-style: italic;\n}\n\n\n.ace_error-marker {\n background-color: rgba(255, 0, 0,0.2);\n position: absolute;\n z-index: 9;\n}\n\n.ace_highlight-marker {\n background-color: rgba(255, 255, 0,0.2);\n position: absolute;\n z-index: 8;\n}\n\n.ace_mobile-menu {\n position: absolute;\n line-height: 1.5;\n border-radius: 4px;\n -ms-user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n background: white;\n box-shadow: 1px 3px 2px grey;\n border: 1px solid #dcdcdc;\n color: black;\n}\n.ace_dark > .ace_mobile-menu {\n background: #333;\n color: #ccc;\n box-shadow: 1px 3px 2px grey;\n border: 1px solid #444;\n\n}\n.ace_mobile-button {\n padding: 2px;\n cursor: pointer;\n overflow: hidden;\n}\n.ace_mobile-button:hover {\n background-color: #eee;\n opacity:1;\n}\n.ace_mobile-button:active {\n background-color: #ddd;\n}\n\n.ace_placeholder {\n position: relative;\n font-family: arial;\n transform: scale(0.9);\n transform-origin: left;\n white-space: pre;\n opacity: 0.7;\n margin: 0 10px;\n z-index: 1;\n}\n\n.ace_ghost_text {\n opacity: 0.5;\n font-style: italic;\n}\n\n.ace_ghost_text_container > div {\n white-space: pre;\n}\n\n.ghost_text_line_wrapped::after {\n content: \"\u21A9\";\n position: absolute;\n}\n\n.ace_lineWidgetContainer.ace_ghost_text {\n margin: 0px 4px\n}\n\n.ace_screenreader-only {\n position:absolute;\n left:-10000px;\n top:auto;\n width:1px;\n height:1px;\n overflow:hidden;\n}\n\n.ace_hidden_token {\n display: none;\n}"; + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); -}); + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); -ace.define("ace/layer/decorators",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var oop = require("../lib/oop"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var Decorator = /** @class */ (function () { - function Decorator(scrollbarV, renderer) { - this.renderer = renderer; - this.pixelRatio = 1; - this.maxHeight = renderer.layerConfig.maxHeight; - this.lineHeight = renderer.layerConfig.lineHeight; - this.minDecorationHeight = (2 * this.pixelRatio) | 0; - this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0; - this.colors = {}; - this.colors.dark = { - "error": "rgba(255, 18, 18, 1)", - "warning": "rgba(18, 136, 18, 1)", - "info": "rgba(18, 18, 136, 1)", - }; - this.colors.light = { - "error": "rgb(255,51,51)", - "warning": "rgb(32,133,72)", - "info": "rgb(35,68,138)", - }; - this.setScrollBarV(scrollbarV); + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; } - Decorator.prototype.$createCanvas = function () { - this.canvas = dom.createElement("canvas"); - this.canvas.style.top = 0 + "px"; - this.canvas.style.right = 0 + "px"; - this.canvas.style.zIndex = "7"; - this.canvas.style.position = "absolute"; - }; - Decorator.prototype.setScrollBarV = function (scrollbarV) { - this.$createCanvas(); - this.scrollbarV = scrollbarV; - scrollbarV.element.appendChild(this.canvas); - this.setDimensions(); - }; - Decorator.prototype.$updateDecorators = function (config) { - if (typeof this.canvas.getContext !== "function") { - return; - } - var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light; - this.setDimensions(config); - var ctx = this.canvas.getContext("2d"); - function compare(a, b) { - if (a.priority < b.priority) - return -1; - if (a.priority > b.priority) - return 1; - return 0; - } - var annotations = this.renderer.session.$annotations; - ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); - if (annotations) { - var priorities = { - "info": 1, - "warning": 2, - "error": 3 - }; - annotations.forEach(function (item) { - item["priority"] = priorities[item.type] || null; - }); - annotations = annotations.sort(compare); - for (var i = 0; i < annotations.length; i++) { - var row = annotations[i].row; - var offset1 = this.getVerticalOffsetForRow(row); - var offset2 = offset1 + this.lineHeight; - var y1 = Math.round(this.heightRatio * offset1); - var y2 = Math.round(this.heightRatio * offset2); - var ycenter = Math.round((y1 + y2) / 2); - var halfHeight = (y2 - ycenter); - if (halfHeight < this.halfMinDecorationHeight) { - halfHeight = this.halfMinDecorationHeight; - } - if (ycenter - halfHeight < 0) { - ycenter = halfHeight; - } - if (ycenter + halfHeight > this.canvasHeight) { - ycenter = this.canvasHeight - halfHeight; - } - var from = ycenter - halfHeight; - var to = ycenter + halfHeight; - var zoneHeight = to - from; - ctx.fillStyle = colors[annotations[i].type] || null; - ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight); - } - } - var cursor = this.renderer.session.selection.getCursor(); - if (cursor) { - var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio); - ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; - ctx.fillRect(0, currentY, this.canvasWidth, 2); - } - }; - Decorator.prototype.getVerticalOffsetForRow = function (row) { - row = row | 0; - var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight; - return offset; - }; - Decorator.prototype.setDimensions = function (config) { - config = config || this.renderer.layerConfig; - this.maxHeight = config.maxHeight; - this.lineHeight = config.lineHeight; - this.canvasHeight = config.height; - this.canvasWidth = this.scrollbarV.width || this.canvasWidth; - this.setZoneWidth(); - this.canvas.width = this.canvasWidth; - this.canvas.height = this.canvasHeight; - if (this.maxHeight < this.canvasHeight) { - this.heightRatio = 1; - } - else { - this.heightRatio = this.canvasHeight / this.maxHeight; - } - }; - Decorator.prototype.setZoneWidth = function () { - this.oneZoneWidth = this.canvasWidth; - }; - Decorator.prototype.destroy = function () { - this.canvas.parentNode.removeChild(this.canvas); - }; - return Decorator; -}()); -oop.implement(Decorator.prototype, EventEmitter); -exports.Decorator = Decorator; + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; -}); + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; -ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/scrollbar_custom","ace/scrollbar_custom","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/css/editor-css","ace/layer/decorators","ace/lib/useragent","ace/layer/text_util"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var lang = require("./lib/lang"); -var config = require("./config"); -var GutterLayer = require("./layer/gutter").Gutter; -var MarkerLayer = require("./layer/marker").Marker; -var TextLayer = require("./layer/text").Text; -var CursorLayer = require("./layer/cursor").Cursor; -var HScrollBar = require("./scrollbar").HScrollBar; -var VScrollBar = require("./scrollbar").VScrollBar; -var HScrollBarCustom = require("./scrollbar_custom").HScrollBar; -var VScrollBarCustom = require("./scrollbar_custom").VScrollBar; -var RenderLoop = require("./renderloop").RenderLoop; -var FontMetrics = require("./layer/font_metrics").FontMetrics; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var editorCss = require("./css/editor-css"); -var Decorator = require("./layer/decorators").Decorator; -var useragent = require("./lib/useragent"); -var isTextToken = require("./layer/text_util").isTextToken; -dom.importCssString(editorCss, "ace_editor.css", false); -var VirtualRenderer = /** @class */ (function () { - function VirtualRenderer(container, theme) { - var _self = this; - this.container = container || dom.createElement("div"); - dom.addCssClass(this.container, "ace_editor"); - if (dom.HI_DPI) - dom.addCssClass(this.container, "ace_hidpi"); - this.setTheme(theme); - if (config.get("useStrictCSP") == null) - config.set("useStrictCSP", false); - this.$gutter = dom.createElement("div"); - this.$gutter.className = "ace_gutter"; - this.container.appendChild(this.$gutter); - this.$gutter.setAttribute("aria-hidden", "true"); - this.scroller = dom.createElement("div"); - this.scroller.className = "ace_scroller"; - this.container.appendChild(this.scroller); - this.content = dom.createElement("div"); - this.content.className = "ace_content"; - this.scroller.appendChild(this.content); - this.$gutterLayer = new GutterLayer(this.$gutter); - this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); - this.$markerBack = new MarkerLayer(this.content); - var textLayer = this.$textLayer = new TextLayer(this.content); - this.canvas = textLayer.element; - this.$markerFront = new MarkerLayer(this.content); - this.$cursorLayer = new CursorLayer(this.content); - this.$horizScroll = false; - this.$vScroll = false; - this.scrollBar = - this.scrollBarV = new VScrollBar(this.container, this); - this.scrollBarH = new HScrollBar(this.container, this); - this.scrollBarV.on("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollTop(e.data - _self.scrollMargin.top); - }); - this.scrollBarH.on("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollLeft(e.data - _self.scrollMargin.left); - }); - this.scrollTop = 0; - this.scrollLeft = 0; - this.cursorPos = { - row: 0, - column: 0 - }; - this.$fontMetrics = new FontMetrics(this.container); - this.$textLayer.$setFontMetrics(this.$fontMetrics); - this.$textLayer.on("changeCharacterSize", function (e) { - _self.updateCharacterSize(); - _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height); - _self._signal("changeCharacterSize", e); - }); - this.$size = { - width: 0, - height: 0, - scrollerHeight: 0, - scrollerWidth: 0, - $dirty: true - }; - this.layerConfig = { - width: 1, - padding: 0, - firstRow: 0, - firstRowScreen: 0, - lastRow: 0, - lineHeight: 0, - characterWidth: 0, - minHeight: 1, - maxHeight: 1, - offset: 0, - height: 1, - gutterOffset: 1 - }; - this.scrollMargin = { - left: 0, - right: 0, - top: 0, - bottom: 0, - v: 0, - h: 0 - }; - this.margin = { - left: 0, - right: 0, - top: 0, - bottom: 0, - v: 0, - h: 0 - }; - this.$keepTextAreaAtCursor = !useragent.isIOS; - this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView); - this.$loop.schedule(this.CHANGE_FULL); - this.updateCharacterSize(); - this.setPadding(4); - this.$addResizeObserver(); - config.resetOptions(this); - config._signal("renderer", this); + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); } - VirtualRenderer.prototype.updateCharacterSize = function () { - if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { - this.$allowBoldFonts = this.$textLayer.allowBoldFonts; - this.setStyle("ace_nobold", !this.$allowBoldFonts); - } - this.layerConfig.characterWidth = - this.characterWidth = this.$textLayer.getCharacterWidth(); - this.layerConfig.lineHeight = - this.lineHeight = this.$textLayer.getLineHeight(); - this.$updatePrintMargin(); - dom.setStyle(this.scroller.style, "line-height", this.lineHeight + "px"); - }; - VirtualRenderer.prototype.setSession = function (session) { - if (this.session) - this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode); - this.session = session; - if (session && this.scrollMargin.top && session.getScrollTop() <= 0) - session.setScrollTop(-this.scrollMargin.top); - this.$cursorLayer.setSession(session); - this.$markerBack.setSession(session); - this.$markerFront.setSession(session); - this.$gutterLayer.setSession(session); - this.$textLayer.setSession(session); - if (!session) - return; - this.$loop.schedule(this.CHANGE_FULL); - this.session.$setFontMetrics(this.$fontMetrics); - this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null; - this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this); - this.onChangeNewLineMode(); - this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode); - }; - VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) { - if (lastRow === undefined) - lastRow = Infinity; - if (!this.$changedLines) { - this.$changedLines = { - firstRow: firstRow, - lastRow: lastRow - }; - } - else { - if (this.$changedLines.firstRow > firstRow) - this.$changedLines.firstRow = firstRow; - if (this.$changedLines.lastRow < lastRow) - this.$changedLines.lastRow = lastRow; - } - if (this.$changedLines.lastRow < this.layerConfig.firstRow) { - if (force) - this.$changedLines.lastRow = this.layerConfig.lastRow; - else - return; - } - if (this.$changedLines.firstRow > this.layerConfig.lastRow) - return; - this.$loop.schedule(this.CHANGE_LINES); - }; - VirtualRenderer.prototype.onChangeNewLineMode = function () { - this.$loop.schedule(this.CHANGE_TEXT); - this.$textLayer.$updateEolChar(); - this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR); - }; - VirtualRenderer.prototype.onChangeTabSize = function () { - this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); - this.$textLayer.onChangeTabSize(); - }; - VirtualRenderer.prototype.updateText = function () { - this.$loop.schedule(this.CHANGE_TEXT); - }; - VirtualRenderer.prototype.updateFull = function (force) { - if (force) - this.$renderChanges(this.CHANGE_FULL, true); - else - this.$loop.schedule(this.CHANGE_FULL); - }; - VirtualRenderer.prototype.updateFontSize = function () { - this.$textLayer.checkForSizeChanges(); - }; - VirtualRenderer.prototype.$updateSizeAsync = function () { - if (this.$loop.pending) - this.$size.$dirty = true; - else - this.onResize(); - }; - VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) { - if (this.resizing > 2) - return; - else if (this.resizing > 0) - this.resizing++; - else - this.resizing = force ? 1 : 0; - var el = this.container; - if (!height) - height = el.clientHeight || el.scrollHeight; - if (!height && this.$maxLines && this.lineHeight > 1) { - if (!el.style.height || el.style.height == "0px") { - el.style.height = "1px"; - height = el.clientHeight || el.scrollHeight; - } - } - if (!width) - width = el.clientWidth || el.scrollWidth; - var changes = this.$updateCachedSize(force, gutterWidth, width, height); - if (this.$resizeTimer) - this.$resizeTimer.cancel(); - if (!this.$size.scrollerHeight || (!width && !height)) - return this.resizing = 0; - if (force) - this.$gutterLayer.$padding = null; - if (force) - this.$renderChanges(changes | this.$changes, true); - else - this.$loop.schedule(changes | this.$changes); - if (this.resizing) - this.resizing = 0; - this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null; - if (this.$customScrollbar) { - this.$updateCustomScrollbar(true); - } - }; - VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) { - height -= (this.$extraHeight || 0); - var changes = 0; - var size = this.$size; - var oldSize = { - width: size.width, - height: size.height, - scrollerHeight: size.scrollerHeight, - scrollerWidth: size.scrollerWidth - }; - if (height && (force || size.height != height)) { - size.height = height; - changes |= this.CHANGE_SIZE; - size.scrollerHeight = size.height; - if (this.$horizScroll) - size.scrollerHeight -= this.scrollBarH.getHeight(); - this.scrollBarV.setHeight(size.scrollerHeight); - this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; - changes = changes | this.CHANGE_SCROLL; - } - if (width && (force || size.width != width)) { - changes |= this.CHANGE_SIZE; - size.width = width; - if (gutterWidth == null) - gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; - this.gutterWidth = gutterWidth; - dom.setStyle(this.scrollBarH.element.style, "left", gutterWidth + "px"); - dom.setStyle(this.scroller.style, "left", gutterWidth + this.margin.left + "px"); - size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h); - dom.setStyle(this.$gutter.style, "left", this.margin.left + "px"); - var right = this.scrollBarV.getWidth() + "px"; - dom.setStyle(this.scrollBarH.element.style, "right", right); - dom.setStyle(this.scroller.style, "right", right); - dom.setStyle(this.scroller.style, "bottom", this.scrollBarH.getHeight()); - this.scrollBarH.setWidth(size.scrollerWidth); - if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) { - changes |= this.CHANGE_FULL; - } - } - size.$dirty = !width || !height; - if (changes) - this._signal("resize", oldSize); - return changes; - }; - VirtualRenderer.prototype.onGutterResize = function (width) { - var gutterWidth = this.$showGutter ? width : 0; - if (gutterWidth != this.gutterWidth) - this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); - if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { - this.$loop.schedule(this.CHANGE_FULL); - } - else if (this.$size.$dirty) { - this.$loop.schedule(this.CHANGE_FULL); - } - else { - this.$computeLayerConfig(); - } - }; - VirtualRenderer.prototype.adjustWrapLimit = function () { - var availableWidth = this.$size.scrollerWidth - this.$padding * 2; - var limit = Math.floor(availableWidth / this.characterWidth); - return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); - }; - VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) { - this.setOption("animatedScroll", shouldAnimate); - }; - VirtualRenderer.prototype.getAnimatedScroll = function () { - return this.$animatedScroll; - }; - VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) { - this.setOption("showInvisibles", showInvisibles); - this.session.$bidiHandler.setShowInvisibles(showInvisibles); - }; - VirtualRenderer.prototype.getShowInvisibles = function () { - return this.getOption("showInvisibles"); - }; - VirtualRenderer.prototype.getDisplayIndentGuides = function () { - return this.getOption("displayIndentGuides"); - }; - VirtualRenderer.prototype.setDisplayIndentGuides = function (display) { - this.setOption("displayIndentGuides", display); - }; - VirtualRenderer.prototype.getHighlightIndentGuides = function () { - return this.getOption("highlightIndentGuides"); - }; - VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) { - this.setOption("highlightIndentGuides", highlight); - }; - VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) { - this.setOption("showPrintMargin", showPrintMargin); - }; - VirtualRenderer.prototype.getShowPrintMargin = function () { - return this.getOption("showPrintMargin"); - }; - VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) { - this.setOption("printMarginColumn", printMarginColumn); - }; - VirtualRenderer.prototype.getPrintMarginColumn = function () { - return this.getOption("printMarginColumn"); - }; - VirtualRenderer.prototype.getShowGutter = function () { - return this.getOption("showGutter"); - }; - VirtualRenderer.prototype.setShowGutter = function (show) { - return this.setOption("showGutter", show); - }; - VirtualRenderer.prototype.getFadeFoldWidgets = function () { - return this.getOption("fadeFoldWidgets"); - }; - VirtualRenderer.prototype.setFadeFoldWidgets = function (show) { - this.setOption("fadeFoldWidgets", show); - }; - VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) { - this.setOption("highlightGutterLine", shouldHighlight); - }; - VirtualRenderer.prototype.getHighlightGutterLine = function () { - return this.getOption("highlightGutterLine"); - }; - VirtualRenderer.prototype.$updatePrintMargin = function () { - if (!this.$showPrintMargin && !this.$printMarginEl) - return; - if (!this.$printMarginEl) { - var containerEl = dom.createElement("div"); - containerEl.className = "ace_layer ace_print-margin-layer"; - this.$printMarginEl = dom.createElement("div"); - this.$printMarginEl.className = "ace_print-margin"; - containerEl.appendChild(this.$printMarginEl); - this.content.insertBefore(containerEl, this.content.firstChild); - } - var style = this.$printMarginEl.style; - style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + "px"; - style.visibility = this.$showPrintMargin ? "visible" : "hidden"; - if (this.session && this.session.$wrap == -1) - this.adjustWrapLimit(); - }; - VirtualRenderer.prototype.getContainerElement = function () { - return this.container; - }; - VirtualRenderer.prototype.getMouseEventTarget = function () { - return this.scroller; - }; - VirtualRenderer.prototype.getTextAreaContainer = function () { - return this.container; - }; - VirtualRenderer.prototype.$moveTextAreaToCursor = function () { - if (this.$isMousePressed) - return; - var style = this.textarea.style; - var composition = this.$composition; - if (!this.$keepTextAreaAtCursor && !composition) { - dom.translate(this.textarea, -100, 0); - return; - } - var pixelPos = this.$cursorLayer.$pixelPos; - if (!pixelPos) - return; - if (composition && composition.markerRange) - pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true); - var config = this.layerConfig; - var posTop = pixelPos.top; - var posLeft = pixelPos.left; - posTop -= config.offset; - var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1; - if (posTop < 0 || posTop > config.height - h) { - dom.translate(this.textarea, 0, 0); - return; - } - var w = 1; - var maxTop = this.$size.height - h; - if (!composition) { - posTop += this.lineHeight; - } - else { - if (composition.useTextareaForIME) { - var val = this.textarea.value; - w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]); - } - else { - posTop += this.lineHeight + 2; - } - } - posLeft -= this.scrollLeft; - if (posLeft > this.$size.scrollerWidth - w) - posLeft = this.$size.scrollerWidth - w; - posLeft += this.gutterWidth + this.margin.left; - dom.setStyle(style, "height", h + "px"); - dom.setStyle(style, "width", w + "px"); - dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop)); - }; - VirtualRenderer.prototype.getFirstVisibleRow = function () { - return this.layerConfig.firstRow; - }; - VirtualRenderer.prototype.getFirstFullyVisibleRow = function () { - return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); - }; - VirtualRenderer.prototype.getLastFullyVisibleRow = function () { - var config = this.layerConfig; - var lastRow = config.lastRow; - var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight; - if (top - this.session.getScrollTop() > config.height - config.lineHeight) - return lastRow - 1; - return lastRow; - }; - VirtualRenderer.prototype.getLastVisibleRow = function () { - return this.layerConfig.lastRow; - }; - VirtualRenderer.prototype.setPadding = function (padding) { - this.$padding = padding; - this.$textLayer.setPadding(padding); - this.$cursorLayer.setPadding(padding); - this.$markerFront.setPadding(padding); - this.$markerBack.setPadding(padding); - this.$loop.schedule(this.CHANGE_FULL); - this.$updatePrintMargin(); - }; - VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) { - var sm = this.scrollMargin; - sm.top = top | 0; - sm.bottom = bottom | 0; - sm.right = right | 0; - sm.left = left | 0; - sm.v = sm.top + sm.bottom; - sm.h = sm.left + sm.right; - if (sm.top && this.scrollTop <= 0 && this.session) - this.session.setScrollTop(-sm.top); - this.updateFull(); - }; - VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) { - var sm = this.margin; - sm.top = top | 0; - sm.bottom = bottom | 0; - sm.right = right | 0; - sm.left = left | 0; - sm.v = sm.top + sm.bottom; - sm.h = sm.left + sm.right; - this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height); - this.updateFull(); - }; - VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () { - return this.$hScrollBarAlwaysVisible; - }; - VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) { - this.setOption("hScrollBarAlwaysVisible", alwaysVisible); - }; - VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () { - return this.$vScrollBarAlwaysVisible; - }; - VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) { - this.setOption("vScrollBarAlwaysVisible", alwaysVisible); - }; - VirtualRenderer.prototype.$updateScrollBarV = function () { - var scrollHeight = this.layerConfig.maxHeight; - var scrollerHeight = this.$size.scrollerHeight; - if (!this.$maxLines && this.$scrollPastEnd) { - scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd; - if (this.scrollTop > scrollHeight - scrollerHeight) { - scrollHeight = this.scrollTop + scrollerHeight; - this.scrollBarV.scrollTop = null; - } - } - this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v); - this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); - }; - VirtualRenderer.prototype.$updateScrollBarH = function () { - this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); - this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); - }; - VirtualRenderer.prototype.freeze = function () { - this.$frozen = true; - }; - VirtualRenderer.prototype.unfreeze = function () { - this.$frozen = false; - }; - VirtualRenderer.prototype.$renderChanges = function (changes, force) { - if (this.$changes) { - changes |= this.$changes; - this.$changes = 0; - } - if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) { - this.$changes |= changes; - return; - } - if (this.$size.$dirty) { - this.$changes |= changes; - return this.onResize(true); - } - if (!this.lineHeight) { - this.$textLayer.checkForSizeChanges(); - } - this._signal("beforeRender", changes); - if (this.session && this.session.$bidiHandler) - this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics); - var config = this.layerConfig; - if (changes & this.CHANGE_FULL || - changes & this.CHANGE_SIZE || - changes & this.CHANGE_TEXT || - changes & this.CHANGE_LINES || - changes & this.CHANGE_SCROLL || - changes & this.CHANGE_H_SCROLL) { - changes |= this.$computeLayerConfig() | this.$loop.clear(); - if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) { - var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight; - if (st > 0) { - this.scrollTop = st; - changes = changes | this.CHANGE_SCROLL; - changes |= this.$computeLayerConfig() | this.$loop.clear(); - } - } - config = this.layerConfig; - this.$updateScrollBarV(); - if (changes & this.CHANGE_H_SCROLL) - this.$updateScrollBarH(); - dom.translate(this.content, -this.scrollLeft, -config.offset); - var width = config.width + 2 * this.$padding + "px"; - var height = config.minHeight + "px"; - dom.setStyle(this.content.style, "width", width); - dom.setStyle(this.content.style, "height", height); + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); } - if (changes & this.CHANGE_H_SCROLL) { - dom.translate(this.content, -this.scrollLeft, -config.offset); - this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller " : "ace_scroller ace_scroll-left "; - if (this.enableKeyboardAccessibility) - this.scroller.className += this.keyboardFocusClassName; + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; } - if (changes & this.CHANGE_FULL) { - this.$changedLines = null; - this.$textLayer.update(config); - if (this.$showGutter) - this.$gutterLayer.update(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } - this.$markerBack.update(config); - this.$markerFront.update(config); - this.$cursorLayer.update(config); - this.$moveTextAreaToCursor(); - this._signal("afterRender", changes); - return; + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); + + +/***/ }), + +/***/ "../../node_modules/minimalistic-assert/index.js": +/*!*******************************************************!*\ + !*** ../../node_modules/minimalistic-assert/index.js ***! + \*******************************************************/ +/***/ ((module) => { + +module.exports = assert; + +function assert(val, msg) { + if (!val) + throw new Error(msg || 'Assertion failed'); +} + +assert.equal = function assertEqual(l, r, msg) { + if (l != r) + throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); +}; + + +/***/ }), + +/***/ "../../node_modules/minimalistic-crypto-utils/lib/utils.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/minimalistic-crypto-utils/lib/utils.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + + +var utils = exports; + +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg !== 'string') { + for (var i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + return res; + } + if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (var i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } else { + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + var hi = c >> 8; + var lo = c & 0xff; + if (hi) + res.push(hi, lo); + else + res.push(lo); + } + } + return res; +} +utils.toArray = toArray; + +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +utils.zero2 = zero2; + +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +utils.toHex = toHex; + +utils.encode = function encode(arr, enc) { + if (enc === 'hex') + return toHex(arr); + else + return arr; +}; + + +/***/ }), + +/***/ "../../node_modules/os/index.js": +/*!**************************************!*\ + !*** ../../node_modules/os/index.js ***! + \**************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! os */ "../../node_modules/os/index.js") + + +/***/ }), + +/***/ "../../node_modules/parse-asn1/asn1.js": +/*!*********************************************!*\ + !*** ../../node_modules/parse-asn1/asn1.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js +// Fedor, you are amazing. + + + +var asn1 = __webpack_require__(/*! asn1.js */ "../../node_modules/asn1.js/lib/asn1.js"); + +exports.certificate = __webpack_require__(/*! ./certificate */ "../../node_modules/parse-asn1/certificate.js"); + +var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { + this.seq().obj( + this.key('version')['int'](), + this.key('modulus')['int'](), + this.key('publicExponent')['int'](), + this.key('privateExponent')['int'](), + this.key('prime1')['int'](), + this.key('prime2')['int'](), + this.key('exponent1')['int'](), + this.key('exponent2')['int'](), + this.key('coefficient')['int']() + ); +}); +exports.RSAPrivateKey = RSAPrivateKey; + +var RSAPublicKey = asn1.define('RSAPublicKey', function () { + this.seq().obj( + this.key('modulus')['int'](), + this.key('publicExponent')['int']() + ); +}); +exports.RSAPublicKey = RSAPublicKey; + +var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { + this.seq().obj( + this.key('algorithm').objid(), + this.key('none').null_().optional(), + this.key('curve').objid().optional(), + this.key('params').seq().obj( + this.key('p')['int'](), + this.key('q')['int'](), + this.key('g')['int']() + ).optional() + ); +}); + +var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { + this.seq().obj( + this.key('algorithm').use(AlgorithmIdentifier), + this.key('subjectPublicKey').bitstr() + ); +}); +exports.PublicKey = PublicKey; + +var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { + this.seq().obj( + this.key('version')['int'](), + this.key('algorithm').use(AlgorithmIdentifier), + this.key('subjectPrivateKey').octstr() + ); +}); +exports.PrivateKey = PrivateKeyInfo; +var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { + this.seq().obj( + this.key('algorithm').seq().obj( + this.key('id').objid(), + this.key('decrypt').seq().obj( + this.key('kde').seq().obj( + this.key('id').objid(), + this.key('kdeparams').seq().obj( + this.key('salt').octstr(), + this.key('iters')['int']() + ) + ), + this.key('cipher').seq().obj( + this.key('algo').objid(), + this.key('iv').octstr() + ) + ) + ), + this.key('subjectPrivateKey').octstr() + ); +}); + +exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo; + +var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { + this.seq().obj( + this.key('version')['int'](), + this.key('p')['int'](), + this.key('q')['int'](), + this.key('g')['int'](), + this.key('pub_key')['int'](), + this.key('priv_key')['int']() + ); +}); +exports.DSAPrivateKey = DSAPrivateKey; + +exports.DSAparam = asn1.define('DSAparam', function () { + this['int'](); +}); + +var ECParameters = asn1.define('ECParameters', function () { + this.choice({ + namedCurve: this.objid() + }); +}); + +var ECPrivateKey = asn1.define('ECPrivateKey', function () { + this.seq().obj( + this.key('version')['int'](), + this.key('privateKey').octstr(), + this.key('parameters').optional().explicit(0).use(ECParameters), + this.key('publicKey').optional().explicit(1).bitstr() + ); +}); +exports.ECPrivateKey = ECPrivateKey; + +exports.signature = asn1.define('signature', function () { + this.seq().obj( + this.key('r')['int'](), + this.key('s')['int']() + ); +}); + + +/***/ }), + +/***/ "../../node_modules/parse-asn1/certificate.js": +/*!****************************************************!*\ + !*** ../../node_modules/parse-asn1/certificate.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js +// thanks to @Rantanen + + + +var asn = __webpack_require__(/*! asn1.js */ "../../node_modules/asn1.js/lib/asn1.js"); + +var Time = asn.define('Time', function () { + this.choice({ + utcTime: this.utctime(), + generalTime: this.gentime() + }); +}); + +var AttributeTypeValue = asn.define('AttributeTypeValue', function () { + this.seq().obj( + this.key('type').objid(), + this.key('value').any() + ); +}); + +var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { + this.seq().obj( + this.key('algorithm').objid(), + this.key('parameters').optional(), + this.key('curve').objid().optional() + ); +}); + +var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { + this.seq().obj( + this.key('algorithm').use(AlgorithmIdentifier), + this.key('subjectPublicKey').bitstr() + ); +}); + +var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { + this.setof(AttributeTypeValue); +}); + +var RDNSequence = asn.define('RDNSequence', function () { + this.seqof(RelativeDistinguishedName); +}); + +var Name = asn.define('Name', function () { + this.choice({ + rdnSequence: this.use(RDNSequence) + }); +}); + +var Validity = asn.define('Validity', function () { + this.seq().obj( + this.key('notBefore').use(Time), + this.key('notAfter').use(Time) + ); +}); + +var Extension = asn.define('Extension', function () { + this.seq().obj( + this.key('extnID').objid(), + this.key('critical').bool().def(false), + this.key('extnValue').octstr() + ); +}); + +var TBSCertificate = asn.define('TBSCertificate', function () { + this.seq().obj( + this.key('version').explicit(0)['int']().optional(), + this.key('serialNumber')['int'](), + this.key('signature').use(AlgorithmIdentifier), + this.key('issuer').use(Name), + this.key('validity').use(Validity), + this.key('subject').use(Name), + this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), + this.key('issuerUniqueID').implicit(1).bitstr().optional(), + this.key('subjectUniqueID').implicit(2).bitstr().optional(), + this.key('extensions').explicit(3).seqof(Extension).optional() + ); +}); + +var X509Certificate = asn.define('X509Certificate', function () { + this.seq().obj( + this.key('tbsCertificate').use(TBSCertificate), + this.key('signatureAlgorithm').use(AlgorithmIdentifier), + this.key('signatureValue').bitstr() + ); +}); + +module.exports = X509Certificate; + + +/***/ }), + +/***/ "../../node_modules/parse-asn1/fixProc.js": +/*!************************************************!*\ + !*** ../../node_modules/parse-asn1/fixProc.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +// adapted from https://github.com/apatil/pemstrip +var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m; +var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m; +var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m; +var evp = __webpack_require__(/*! evp_bytestokey */ "../../node_modules/evp_bytestokey/index.js"); +var ciphers = __webpack_require__(/*! browserify-aes */ "../../node_modules/browserify-aes/browser.js"); +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); +module.exports = function (okey, password) { + var key = okey.toString(); + var match = key.match(findProc); + var decrypted; + if (!match) { + var match2 = key.match(fullRegex); + decrypted = Buffer.from(match2[2].replace(/[\r\n]/g, ''), 'base64'); + } else { + var suite = 'aes' + match[1]; + var iv = Buffer.from(match[2], 'hex'); + var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64'); + var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key; + var out = []; + var cipher = ciphers.createDecipheriv(suite, cipherKey, iv); + out.push(cipher.update(cipherText)); + out.push(cipher['final']()); + decrypted = Buffer.concat(out); + } + var tag = key.match(startRegex)[1]; + return { + tag: tag, + data: decrypted + }; +}; + + +/***/ }), + +/***/ "../../node_modules/parse-asn1/index.js": +/*!**********************************************!*\ + !*** ../../node_modules/parse-asn1/index.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var asn1 = __webpack_require__(/*! ./asn1 */ "../../node_modules/parse-asn1/asn1.js"); +var aesid = __webpack_require__(/*! ./aesid.json */ "../../node_modules/parse-asn1/aesid.json"); +var fixProc = __webpack_require__(/*! ./fixProc */ "../../node_modules/parse-asn1/fixProc.js"); +var ciphers = __webpack_require__(/*! browserify-aes */ "../../node_modules/browserify-aes/browser.js"); +var compat = __webpack_require__(/*! pbkdf2 */ "../../node_modules/pbkdf2/browser.js"); +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); + +function decrypt(data, password) { + var salt = data.algorithm.decrypt.kde.kdeparams.salt; + var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10); + var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]; + var iv = data.algorithm.decrypt.cipher.iv; + var cipherText = data.subjectPrivateKey; + var keylen = parseInt(algo.split('-')[1], 10) / 8; + var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1'); + var cipher = ciphers.createDecipheriv(algo, key, iv); + var out = []; + out.push(cipher.update(cipherText)); + out.push(cipher['final']()); + return Buffer.concat(out); +} + +function parseKeys(buffer) { + var password; + if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { + password = buffer.passphrase; + buffer = buffer.key; + } + if (typeof buffer === 'string') { + buffer = Buffer.from(buffer); + } + + var stripped = fixProc(buffer, password); + + var type = stripped.tag; + var data = stripped.data; + var subtype, ndata; + switch (type) { + case 'CERTIFICATE': + ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo; + // falls through + case 'PUBLIC KEY': + if (!ndata) { + ndata = asn1.PublicKey.decode(data, 'der'); + } + subtype = ndata.algorithm.algorithm.join('.'); + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der'); + case '1.2.840.10045.2.1': + ndata.subjectPrivateKey = ndata.subjectPublicKey; + return { + type: 'ec', + data: ndata + }; + case '1.2.840.10040.4.1': + ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der'); + return { + type: 'dsa', + data: ndata.algorithm.params + }; + default: throw new Error('unknown key id ' + subtype); + } + // throw new Error('unknown key type ' + type) + case 'ENCRYPTED PRIVATE KEY': + data = asn1.EncryptedPrivateKey.decode(data, 'der'); + data = decrypt(data, password); + // falls through + case 'PRIVATE KEY': + ndata = asn1.PrivateKey.decode(data, 'der'); + subtype = ndata.algorithm.algorithm.join('.'); + switch (subtype) { + case '1.2.840.113549.1.1.1': + return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der'); + case '1.2.840.10045.2.1': + return { + curve: ndata.algorithm.curve, + privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey + }; + case '1.2.840.10040.4.1': + ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der'); + return { + type: 'dsa', + params: ndata.algorithm.params + }; + default: throw new Error('unknown key id ' + subtype); + } + // throw new Error('unknown key type ' + type) + case 'RSA PUBLIC KEY': + return asn1.RSAPublicKey.decode(data, 'der'); + case 'RSA PRIVATE KEY': + return asn1.RSAPrivateKey.decode(data, 'der'); + case 'DSA PRIVATE KEY': + return { + type: 'dsa', + params: asn1.DSAPrivateKey.decode(data, 'der') + }; + case 'EC PRIVATE KEY': + data = asn1.ECPrivateKey.decode(data, 'der'); + return { + curve: data.parameters.value, + privateKey: data.privateKey + }; + default: throw new Error('unknown key type ' + type); + } +} +parseKeys.signature = asn1.signature; + +module.exports = parseKeys; + + +/***/ }), + +/***/ "../../node_modules/path/path.js": +/*!***************************************!*\ + !*** ../../node_modules/path/path.js ***! + \***************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + +var isWindows = process.platform === 'win32'; +var util = __webpack_require__(/*! util */ "../../node_modules/util/util.js"); + + +// resolves . and .. elements in a path array with directory names there +// must be no slashes or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + var res = []; + for (var i = 0; i < parts.length; i++) { + var p = parts[i]; + + // ignore empty parts + if (!p || p === '.') + continue; + + if (p === '..') { + if (res.length && res[res.length - 1] !== '..') { + res.pop(); + } else if (allowAboveRoot) { + res.push('..'); + } + } else { + res.push(p); + } + } + + return res; +} + +// returns an array with empty elements removed from either end of the input +// array or the original array if no elements need to be removed +function trimArray(arr) { + var lastIndex = arr.length - 1; + var start = 0; + for (; start <= lastIndex; start++) { + if (arr[start]) + break; + } + + var end = lastIndex; + for (; end >= 0; end--) { + if (arr[end]) + break; + } + + if (start === 0 && end === lastIndex) + return arr; + if (start > end) + return []; + return arr.slice(start, end + 1); +} + +// Regex to split a windows path into three parts: [*, device, slash, +// tail] windows-only +var splitDeviceRe = + /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + +// Regex to split the tail part of the above into [*, dir, basename, ext] +var splitTailRe = + /^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/; + +var win32 = {}; + +// Function to split a filename into [root, dir, basename, ext] +function win32SplitPath(filename) { + // Separate device+slash from tail + var result = splitDeviceRe.exec(filename), + device = (result[1] || '') + (result[2] || ''), + tail = result[3] || ''; + // Split the tail into dir, basename and extension + var result2 = splitTailRe.exec(tail), + dir = result2[1], + basename = result2[2], + ext = result2[3]; + return [device, dir, basename, ext]; +} + +function win32StatPath(path) { + var result = splitDeviceRe.exec(path), + device = result[1] || '', + isUnc = !!device && device[1] !== ':'; + return { + device: device, + isUnc: isUnc, + isAbsolute: isUnc || !!result[2], // UNC paths are always absolute + tail: result[3] + }; +} + +function normalizeUNCRoot(device) { + return '\\\\' + device.replace(/^[\\\/]+/, '').replace(/[\\\/]+/g, '\\'); +} + +// path.resolve([from ...], to) +win32.resolve = function() { + var resolvedDevice = '', + resolvedTail = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1; i--) { + var path; + if (i >= 0) { + path = arguments[i]; + } else if (!resolvedDevice) { + path = process.cwd(); + } else { + // Windows has the concept of drive-specific current working + // directories. If we've resolved a drive letter but not yet an + // absolute path, get cwd for that drive. We're sure the device is not + // an unc path at this points, because unc paths are always absolute. + path = process.env['=' + resolvedDevice]; + // Verify that a drive-local cwd was found and that it actually points + // to our drive. If not, default to the drive's root. + if (!path || path.substr(0, 3).toLowerCase() !== + resolvedDevice.toLowerCase() + '\\') { + path = resolvedDevice + '\\'; + } + } + + // Skip empty and invalid entries + if (!util.isString(path)) { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + var result = win32StatPath(path), + device = result.device, + isUnc = result.isUnc, + isAbsolute = result.isAbsolute, + tail = result.tail; + + if (device && + resolvedDevice && + device.toLowerCase() !== resolvedDevice.toLowerCase()) { + // This path points to another device so it is not applicable + continue; + } + + if (!resolvedDevice) { + resolvedDevice = device; + } + if (!resolvedAbsolute) { + resolvedTail = tail + '\\' + resolvedTail; + resolvedAbsolute = isAbsolute; + } + + if (resolvedDevice && resolvedAbsolute) { + break; + } + } + + // Convert slashes to backslashes when `resolvedDevice` points to an UNC + // root. Also squash multiple slashes into a single one where appropriate. + if (isUnc) { + resolvedDevice = normalizeUNCRoot(resolvedDevice); + } + + // At this point the path should be resolved to a full absolute path, + // but handle relative paths to be safe (might happen when process.cwd() + // fails) + + // Normalize the tail path + resolvedTail = normalizeArray(resolvedTail.split(/[\\\/]+/), + !resolvedAbsolute).join('\\'); + + return (resolvedDevice + (resolvedAbsolute ? '\\' : '') + resolvedTail) || + '.'; +}; + + +win32.normalize = function(path) { + var result = win32StatPath(path), + device = result.device, + isUnc = result.isUnc, + isAbsolute = result.isAbsolute, + tail = result.tail, + trailingSlash = /[\\\/]$/.test(tail); + + // Normalize the tail path + tail = normalizeArray(tail.split(/[\\\/]+/), !isAbsolute).join('\\'); + + if (!tail && !isAbsolute) { + tail = '.'; + } + if (tail && trailingSlash) { + tail += '\\'; + } + + // Convert slashes to backslashes when `device` points to an UNC root. + // Also squash multiple slashes into a single one where appropriate. + if (isUnc) { + device = normalizeUNCRoot(device); + } + + return device + (isAbsolute ? '\\' : '') + tail; +}; + + +win32.isAbsolute = function(path) { + return win32StatPath(path).isAbsolute; +}; + +win32.join = function() { + var paths = []; + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; + if (!util.isString(arg)) { + throw new TypeError('Arguments to path.join must be strings'); + } + if (arg) { + paths.push(arg); + } + } + + var joined = paths.join('\\'); + + // Make sure that the joined path doesn't start with two slashes, because + // normalize() will mistake it for an UNC path then. + // + // This step is skipped when it is very clear that the user actually + // intended to point at an UNC path. This is assumed when the first + // non-empty string arguments starts with exactly two slashes followed by + // at least one more non-slash character. + // + // Note that for normalize() to treat a path as an UNC path it needs to + // have at least 2 components, so we don't filter for that here. + // This means that the user can use join to construct UNC paths from + // a server name and a share name; for example: + // path.join('//server', 'share') -> '\\\\server\\share\') + if (!/^[\\\/]{2}[^\\\/]/.test(paths[0])) { + joined = joined.replace(/^[\\\/]{2,}/, '\\'); + } + + return win32.normalize(joined); +}; + + +// path.relative(from, to) +// it will solve the relative path from 'from' to 'to', for instance: +// from = 'C:\\orandea\\test\\aaa' +// to = 'C:\\orandea\\impl\\bbb' +// The output of the function should be: '..\\..\\impl\\bbb' +win32.relative = function(from, to) { + from = win32.resolve(from); + to = win32.resolve(to); + + // windows is not case sensitive + var lowerFrom = from.toLowerCase(); + var lowerTo = to.toLowerCase(); + + var toParts = trimArray(to.split('\\')); + + var lowerFromParts = trimArray(lowerFrom.split('\\')); + var lowerToParts = trimArray(lowerTo.split('\\')); + + var length = Math.min(lowerFromParts.length, lowerToParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (lowerFromParts[i] !== lowerToParts[i]) { + samePartsLength = i; + break; + } + } + + if (samePartsLength == 0) { + return to; + } + + var outputParts = []; + for (var i = samePartsLength; i < lowerFromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('\\'); +}; + + +win32._makeLong = function(path) { + // Note: this will *probably* throw somewhere. + if (!util.isString(path)) + return path; + + if (!path) { + return ''; + } + + var resolvedPath = win32.resolve(path); + + if (/^[a-zA-Z]\:\\/.test(resolvedPath)) { + // path is local filesystem path, which needs to be converted + // to long UNC path. + return '\\\\?\\' + resolvedPath; + } else if (/^\\\\[^?.]/.test(resolvedPath)) { + // path is network UNC path, which needs to be converted + // to long UNC path. + return '\\\\?\\UNC\\' + resolvedPath.substring(2); + } + + return path; +}; + + +win32.dirname = function(path) { + var result = win32SplitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +win32.basename = function(path, ext) { + var f = win32SplitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +win32.extname = function(path) { + return win32SplitPath(path)[3]; +}; + + +win32.format = function(pathObject) { + if (!util.isObject(pathObject)) { + throw new TypeError( + "Parameter 'pathObject' must be an object, not " + typeof pathObject + ); + } + + var root = pathObject.root || ''; + + if (!util.isString(root)) { + throw new TypeError( + "'pathObject.root' must be a string or undefined, not " + + typeof pathObject.root + ); + } + + var dir = pathObject.dir; + var base = pathObject.base || ''; + if (!dir) { + return base; + } + if (dir[dir.length - 1] === win32.sep) { + return dir + base; + } + return dir + win32.sep + base; +}; + + +win32.parse = function(pathString) { + if (!util.isString(pathString)) { + throw new TypeError( + "Parameter 'pathString' must be a string, not " + typeof pathString + ); + } + var allParts = win32SplitPath(pathString); + if (!allParts || allParts.length !== 4) { + throw new TypeError("Invalid path '" + pathString + "'"); + } + return { + root: allParts[0], + dir: allParts[0] + allParts[1].slice(0, -1), + base: allParts[2], + ext: allParts[3], + name: allParts[2].slice(0, allParts[2].length - allParts[3].length) + }; +}; + + +win32.sep = '\\'; +win32.delimiter = ';'; + + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var posix = {}; + + +function posixSplitPath(filename) { + return splitPathRe.exec(filename).slice(1); +} + + +// path.resolve([from ...], to) +// posix version +posix.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (!util.isString(path)) { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path[0] === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(resolvedPath.split('/'), + !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +posix.normalize = function(path) { + var isAbsolute = posix.isAbsolute(path), + trailingSlash = path && path[path.length - 1] === '/'; + + // Normalize the path + path = normalizeArray(path.split('/'), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +posix.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +posix.join = function() { + var path = ''; + for (var i = 0; i < arguments.length; i++) { + var segment = arguments[i]; + if (!util.isString(segment)) { + throw new TypeError('Arguments to path.join must be strings'); + } + if (segment) { + if (!path) { + path += segment; + } else { + path += '/' + segment; + } + } + } + return posix.normalize(path); +}; + + +// path.relative(from, to) +// posix version +posix.relative = function(from, to) { + from = posix.resolve(from).substr(1); + to = posix.resolve(to).substr(1); + + var fromParts = trimArray(from.split('/')); + var toParts = trimArray(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + + +posix._makeLong = function(path) { + return path; +}; + + +posix.dirname = function(path) { + var result = posixSplitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +posix.basename = function(path, ext) { + var f = posixSplitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +posix.extname = function(path) { + return posixSplitPath(path)[3]; +}; + + +posix.format = function(pathObject) { + if (!util.isObject(pathObject)) { + throw new TypeError( + "Parameter 'pathObject' must be an object, not " + typeof pathObject + ); + } + + var root = pathObject.root || ''; + + if (!util.isString(root)) { + throw new TypeError( + "'pathObject.root' must be a string or undefined, not " + + typeof pathObject.root + ); + } + + var dir = pathObject.dir ? pathObject.dir + posix.sep : ''; + var base = pathObject.base || ''; + return dir + base; +}; + + +posix.parse = function(pathString) { + if (!util.isString(pathString)) { + throw new TypeError( + "Parameter 'pathString' must be a string, not " + typeof pathString + ); + } + var allParts = posixSplitPath(pathString); + if (!allParts || allParts.length !== 4) { + throw new TypeError("Invalid path '" + pathString + "'"); + } + allParts[1] = allParts[1] || ''; + allParts[2] = allParts[2] || ''; + allParts[3] = allParts[3] || ''; + + return { + root: allParts[0], + dir: allParts[0] + allParts[1].slice(0, -1), + base: allParts[2], + ext: allParts[3], + name: allParts[2].slice(0, allParts[2].length - allParts[3].length) + }; +}; + + +posix.sep = '/'; +posix.delimiter = ':'; + + +if (isWindows) + module.exports = win32; +else /* posix */ + module.exports = posix; + +module.exports.posix = posix; +module.exports.win32 = win32; + + +/***/ }), + +/***/ "../../node_modules/pbkdf2/browser.js": +/*!********************************************!*\ + !*** ../../node_modules/pbkdf2/browser.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +exports.pbkdf2 = __webpack_require__(/*! ./lib/async */ "../../node_modules/pbkdf2/lib/async.js") +exports.pbkdf2Sync = __webpack_require__(/*! ./lib/sync */ "../../node_modules/pbkdf2/lib/sync-browser.js") + + +/***/ }), + +/***/ "../../node_modules/pbkdf2/lib/async.js": +/*!**********************************************!*\ + !*** ../../node_modules/pbkdf2/lib/async.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var checkParameters = __webpack_require__(/*! ./precondition */ "../../node_modules/pbkdf2/lib/precondition.js") +var defaultEncoding = __webpack_require__(/*! ./default-encoding */ "../../node_modules/pbkdf2/lib/default-encoding.js") +var sync = __webpack_require__(/*! ./sync */ "../../node_modules/pbkdf2/lib/sync-browser.js") +var toBuffer = __webpack_require__(/*! ./to-buffer */ "../../node_modules/pbkdf2/lib/to-buffer.js") + +var ZERO_BUF +var subtle = __webpack_require__.g.crypto && __webpack_require__.g.crypto.subtle +var toBrowser = { + sha: 'SHA-1', + 'sha-1': 'SHA-1', + sha1: 'SHA-1', + sha256: 'SHA-256', + 'sha-256': 'SHA-256', + sha384: 'SHA-384', + 'sha-384': 'SHA-384', + 'sha-512': 'SHA-512', + sha512: 'SHA-512' +} +var checks = [] +function checkNative (algo) { + if (__webpack_require__.g.process && !__webpack_require__.g.process.browser) { + return Promise.resolve(false) + } + if (!subtle || !subtle.importKey || !subtle.deriveBits) { + return Promise.resolve(false) + } + if (checks[algo] !== undefined) { + return checks[algo] + } + ZERO_BUF = ZERO_BUF || Buffer.alloc(8) + var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo) + .then(function () { + return true + }).catch(function () { + return false + }) + checks[algo] = prom + return prom +} +var nextTick +function getNextTick () { + if (nextTick) { + return nextTick + } + if (__webpack_require__.g.process && __webpack_require__.g.process.nextTick) { + nextTick = __webpack_require__.g.process.nextTick + } else if (__webpack_require__.g.queueMicrotask) { + nextTick = __webpack_require__.g.queueMicrotask + } else if (__webpack_require__.g.setImmediate) { + nextTick = __webpack_require__.g.setImmediate + } else { + nextTick = __webpack_require__.g.setTimeout + } + return nextTick +} +function browserPbkdf2 (password, salt, iterations, length, algo) { + return subtle.importKey( + 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits'] + ).then(function (key) { + return subtle.deriveBits({ + name: 'PBKDF2', + salt: salt, + iterations: iterations, + hash: { + name: algo + } + }, key, length << 3) + }).then(function (res) { + return Buffer.from(res) + }) +} + +function resolvePromise (promise, callback) { + promise.then(function (out) { + getNextTick()(function () { + callback(null, out) + }) + }, function (e) { + getNextTick()(function () { + callback(e) + }) + }) +} +module.exports = function (password, salt, iterations, keylen, digest, callback) { + if (typeof digest === 'function') { + callback = digest + digest = undefined + } + + digest = digest || 'sha1' + var algo = toBrowser[digest.toLowerCase()] + + if (!algo || typeof __webpack_require__.g.Promise !== 'function') { + getNextTick()(function () { + var out + try { + out = sync(password, salt, iterations, keylen, digest) + } catch (e) { + return callback(e) + } + callback(null, out) + }) + return + } + + checkParameters(iterations, keylen) + password = toBuffer(password, defaultEncoding, 'Password') + salt = toBuffer(salt, defaultEncoding, 'Salt') + if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2') + + resolvePromise(checkNative(algo).then(function (resp) { + if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo) + + return sync(password, salt, iterations, keylen, digest) + }), callback) +} + + +/***/ }), + +/***/ "../../node_modules/pbkdf2/lib/default-encoding.js": +/*!*********************************************************!*\ + !*** ../../node_modules/pbkdf2/lib/default-encoding.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var defaultEncoding +/* istanbul ignore next */ +if (__webpack_require__.g.process && __webpack_require__.g.process.browser) { + defaultEncoding = 'utf-8' +} else if (__webpack_require__.g.process && __webpack_require__.g.process.version) { + var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10) + + defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary' +} else { + defaultEncoding = 'utf-8' +} +module.exports = defaultEncoding + + +/***/ }), + +/***/ "../../node_modules/pbkdf2/lib/precondition.js": +/*!*****************************************************!*\ + !*** ../../node_modules/pbkdf2/lib/precondition.js ***! + \*****************************************************/ +/***/ ((module) => { + +var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs + +module.exports = function (iterations, keylen) { + if (typeof iterations !== 'number') { + throw new TypeError('Iterations not a number') + } + + if (iterations < 0) { + throw new TypeError('Bad iterations') + } + + if (typeof keylen !== 'number') { + throw new TypeError('Key length not a number') + } + + if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */ + throw new TypeError('Bad key length') + } +} + + +/***/ }), + +/***/ "../../node_modules/pbkdf2/lib/sync-browser.js": +/*!*****************************************************!*\ + !*** ../../node_modules/pbkdf2/lib/sync-browser.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var md5 = __webpack_require__(/*! create-hash/md5 */ "../../node_modules/create-hash/md5.js") +var RIPEMD160 = __webpack_require__(/*! ripemd160 */ "../../node_modules/ripemd160/index.js") +var sha = __webpack_require__(/*! sha.js */ "../../node_modules/sha.js/index.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var checkParameters = __webpack_require__(/*! ./precondition */ "../../node_modules/pbkdf2/lib/precondition.js") +var defaultEncoding = __webpack_require__(/*! ./default-encoding */ "../../node_modules/pbkdf2/lib/default-encoding.js") +var toBuffer = __webpack_require__(/*! ./to-buffer */ "../../node_modules/pbkdf2/lib/to-buffer.js") + +var ZEROS = Buffer.alloc(128) +var sizes = { + md5: 16, + sha1: 20, + sha224: 28, + sha256: 32, + sha384: 48, + sha512: 64, + rmd160: 20, + ripemd160: 20 +} + +function Hmac (alg, key, saltLen) { + var hash = getDigest(alg) + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 + + if (key.length > blocksize) { + key = hash(key) + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]) + var opad = Buffer.allocUnsafe(blocksize + sizes[alg]) + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + + var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4) + ipad.copy(ipad1, 0, 0, blocksize) + this.ipad1 = ipad1 + this.ipad2 = ipad + this.opad = opad + this.alg = alg + this.blocksize = blocksize + this.hash = hash + this.size = sizes[alg] +} + +Hmac.prototype.run = function (data, ipad) { + data.copy(ipad, this.blocksize) + var h = this.hash(ipad) + h.copy(this.opad, this.blocksize) + return this.hash(this.opad) +} + +function getDigest (alg) { + function shaFunc (data) { + return sha(alg).update(data).digest() + } + function rmd160Func (data) { + return new RIPEMD160().update(data).digest() + } + + if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func + if (alg === 'md5') return md5 + return shaFunc +} + +function pbkdf2 (password, salt, iterations, keylen, digest) { + checkParameters(iterations, keylen) + password = toBuffer(password, defaultEncoding, 'Password') + salt = toBuffer(salt, defaultEncoding, 'Salt') + + digest = digest || 'sha1' + + var hmac = new Hmac(digest, password, salt.length) + + var DK = Buffer.allocUnsafe(keylen) + var block1 = Buffer.allocUnsafe(salt.length + 4) + salt.copy(block1, 0, 0, salt.length) + + var destPos = 0 + var hLen = sizes[digest] + var l = Math.ceil(keylen / hLen) + + for (var i = 1; i <= l; i++) { + block1.writeUInt32BE(i, salt.length) + + var T = hmac.run(block1, hmac.ipad1) + var U = T + + for (var j = 1; j < iterations; j++) { + U = hmac.run(U, hmac.ipad2) + for (var k = 0; k < hLen; k++) T[k] ^= U[k] + } + + T.copy(DK, destPos) + destPos += hLen + } + + return DK +} + +module.exports = pbkdf2 + + +/***/ }), + +/***/ "../../node_modules/pbkdf2/lib/to-buffer.js": +/*!**************************************************!*\ + !*** ../../node_modules/pbkdf2/lib/to-buffer.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +module.exports = function (thing, encoding, name) { + if (Buffer.isBuffer(thing)) { + return thing + } else if (typeof thing === 'string') { + return Buffer.from(thing, encoding) + } else if (ArrayBuffer.isView(thing)) { + return Buffer.from(thing.buffer) + } else { + throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView') + } +} + + +/***/ }), + +/***/ "../../node_modules/process-nextick-args/index.js": +/*!********************************************************!*\ + !*** ../../node_modules/process-nextick-args/index.js ***! + \********************************************************/ +/***/ ((module) => { + +"use strict"; + + +if (typeof process === 'undefined' || + !process.version || + process.version.indexOf('v0.') === 0 || + process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { + module.exports = { nextTick: nextTick }; +} else { + module.exports = process +} + +function nextTick(fn, arg1, arg2, arg3) { + if (typeof fn !== 'function') { + throw new TypeError('"callback" argument must be a function'); + } + var len = arguments.length; + var args, i; + switch (len) { + case 0: + case 1: + return process.nextTick(fn); + case 2: + return process.nextTick(function afterTickOne() { + fn.call(null, arg1); + }); + case 3: + return process.nextTick(function afterTickTwo() { + fn.call(null, arg1, arg2); + }); + case 4: + return process.nextTick(function afterTickThree() { + fn.call(null, arg1, arg2, arg3); + }); + default: + args = new Array(len - 1); + i = 0; + while (i < args.length) { + args[i++] = arguments[i]; + } + return process.nextTick(function afterTick() { + fn.apply(null, args); + }); + } +} + + + +/***/ }), + +/***/ "../../node_modules/public-encrypt/browser.js": +/*!****************************************************!*\ + !*** ../../node_modules/public-encrypt/browser.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +exports.publicEncrypt = __webpack_require__(/*! ./publicEncrypt */ "../../node_modules/public-encrypt/publicEncrypt.js") +exports.privateDecrypt = __webpack_require__(/*! ./privateDecrypt */ "../../node_modules/public-encrypt/privateDecrypt.js") + +exports.privateEncrypt = function privateEncrypt (key, buf) { + return exports.publicEncrypt(key, buf, true) +} + +exports.publicDecrypt = function publicDecrypt (key, buf) { + return exports.privateDecrypt(key, buf, true) +} + + +/***/ }), + +/***/ "../../node_modules/public-encrypt/mgf.js": +/*!************************************************!*\ + !*** ../../node_modules/public-encrypt/mgf.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var createHash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +module.exports = function (seed, len) { + var t = Buffer.alloc(0) + var i = 0 + var c + while (t.length < len) { + c = i2ops(i++) + t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]) + } + return t.slice(0, len) +} + +function i2ops (c) { + var out = Buffer.allocUnsafe(4) + out.writeUInt32BE(c, 0) + return out +} + + +/***/ }), + +/***/ "../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js ***! + \**********************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(/*! buffer */ "?c86f").Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); } - if (changes & this.CHANGE_SCROLL) { - this.$changedLines = null; - if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) - this.$textLayer.update(config); - else - this.$textLayer.scrollLines(config); - if (this.$showGutter) { - if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES) - this.$gutterLayer.update(config); - else - this.$gutterLayer.scrollLines(config); - } - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } - this.$markerBack.update(config); - this.$markerFront.update(config); - this.$cursorLayer.update(config); - this.$moveTextAreaToCursor(); - this._signal("afterRender", changes); - return; + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - if (changes & this.CHANGE_TEXT) { - this.$changedLines = null; - this.$textLayer.update(config); - if (this.$showGutter) - this.$gutterLayer.update(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - else if (changes & this.CHANGE_LINES) { - if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) - this.$gutterLayer.update(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } + } + } + return this.strip(); + }; + + function parseHex4Bits (string, index) { + var c = string.charCodeAt(index); + // 'A' - 'F' + if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return (c - 48) & 0xf; + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { - if (this.$showGutter) - this.$gutterLayer.update(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - else if (changes & this.CHANGE_CURSOR) { - if (this.$highlightGutterLine) - this.$gutterLayer.updateLineHighlight(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } + } + } + + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this.strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; } - if (changes & this.CHANGE_CURSOR) { - this.$cursorLayer.update(config); - this.$moveTextAreaToCursor(); + off += 2; + if (off >= 26) { + off -= 26; + i--; } - if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { - this.$markerFront.update(config); + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; } - if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { - this.$markerBack.update(config); + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } } - this._signal("afterRender", changes); - }; - VirtualRenderer.prototype.$autosize = function () { - var height = this.session.getScreenLength() * this.lineHeight; - var maxHeight = this.$maxLines * this.lineHeight; - var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0); - if (this.$horizScroll) - desiredHeight += this.scrollBarH.getHeight(); - if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight) - desiredHeight = this.$maxPixelHeight; - var hideScrollbars = desiredHeight <= 2 * this.lineHeight; - var vScroll = !hideScrollbars && height > maxHeight; - if (desiredHeight != this.desiredHeight || - this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { - if (vScroll != this.$vScroll) { - this.$vScroll = vScroll; - this.scrollBarV.setVisible(vScroll); - } - var w = this.container.clientWidth; - this.container.style.height = desiredHeight + "px"; - this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); - this.desiredHeight = desiredHeight; - this._signal("autosize"); + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a }; - VirtualRenderer.prototype.$computeLayerConfig = function () { - var session = this.session; - var size = this.$size; - var hideScrollbars = size.height <= 2 * this.lineHeight; - var screenLines = this.session.getScreenLength(); - var maxHeight = screenLines * this.lineHeight; - var longestLine = this.$getLongestLine(); - var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || - size.scrollerWidth - longestLine - 2 * this.$padding < 0); - var hScrollChanged = this.$horizScroll !== horizScroll; - if (hScrollChanged) { - this.$horizScroll = horizScroll; - this.scrollBarH.setVisible(horizScroll); - } - var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine - if (this.$maxLines && this.lineHeight > 1) { - this.$autosize(); - hideScrollbars = size.height <= 2 * this.lineHeight; - } - var minHeight = size.scrollerHeight + this.lineHeight; - var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd - ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd - : 0; - maxHeight += scrollPastEnd; - var sm = this.scrollMargin; - this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom))); - this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right))); - var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || - size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top); - var vScrollChanged = vScrollBefore !== vScroll; - if (vScrollChanged) { - this.$vScroll = vScroll; - this.scrollBarV.setVisible(vScroll); - } - var offset = this.scrollTop % this.lineHeight; - var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; - var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); - var lastRow = firstRow + lineCount; - var firstRowScreen, firstRowHeight; - var lineHeight = this.lineHeight; - firstRow = session.screenToDocumentRow(firstRow, 0); - var foldLine = session.getFoldLine(firstRow); - if (foldLine) { - firstRow = foldLine.start.row; - } - firstRowScreen = session.documentToScreenRow(firstRow, 0); - firstRowHeight = session.getRowLength(firstRow) * lineHeight; - lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); - minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + - firstRowHeight; - offset = this.scrollTop - firstRowScreen * lineHeight; - if (offset < 0 && firstRowScreen > 0) { - firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight)); - offset = this.scrollTop - firstRowScreen * lineHeight; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); } - var changes = 0; - if (this.layerConfig.width != longestLine || hScrollChanged) - changes = this.CHANGE_H_SCROLL; - if (hScrollChanged || vScrollChanged) { - changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height); - this._signal("scrollbarVisibilityChanged"); - if (vScrollChanged) - longestLine = this.$getLongestLine(); + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); } - this.layerConfig = { - width: longestLine, - padding: this.$padding, - firstRow: firstRow, - firstRowScreen: firstRowScreen, - lastRow: lastRow, - lineHeight: lineHeight, - characterWidth: this.characterWidth, - minHeight: minHeight, - maxHeight: maxHeight, - offset: offset, - gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0, - height: this.$size.scrollerHeight + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null }; - if (this.session.$bidiHandler) - this.session.$bidiHandler.setContentWidth(longestLine - this.$padding); - return changes; - }; - VirtualRenderer.prototype.$updateLines = function () { - if (!this.$changedLines) - return; - var firstRow = this.$changedLines.firstRow; - var lastRow = this.$changedLines.lastRow; - this.$changedLines = null; - var layerConfig = this.layerConfig; - if (firstRow > layerConfig.lastRow + 1) { - return; - } - if (lastRow < layerConfig.firstRow) { - return; - } - if (lastRow === Infinity) { - if (this.$showGutter) - this.$gutterLayer.update(layerConfig); - this.$textLayer.update(layerConfig); - return; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); } - this.$textLayer.updateLines(layerConfig, firstRow, lastRow); - return true; - }; - VirtualRenderer.prototype.$getLongestLine = function () { - var charCount = this.session.getScreenWidth(); - if (this.showInvisibles && !this.session.$useWrapMode) - charCount += 1; - if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH) - charCount = this.$textLayer.MAX_LINE_LENGTH + 30; - return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); - }; - VirtualRenderer.prototype.updateFrontMarkers = function () { - this.$markerFront.setMarkers(this.session.getMarkers(true)); - this.$loop.schedule(this.CHANGE_MARKER_FRONT); - }; - VirtualRenderer.prototype.updateBackMarkers = function () { - this.$markerBack.setMarkers(this.session.getMarkers()); - this.$loop.schedule(this.CHANGE_MARKER_BACK); - }; - VirtualRenderer.prototype.addGutterDecoration = function (row, className) { - this.$gutterLayer.addGutterDecoration(row, className); - }; - VirtualRenderer.prototype.removeGutterDecoration = function (row, className) { - this.$gutterLayer.removeGutterDecoration(row, className); - }; - VirtualRenderer.prototype.updateBreakpoints = function (rows) { - this._rows = rows; - this.$loop.schedule(this.CHANGE_GUTTER); - }; - VirtualRenderer.prototype.setAnnotations = function (annotations) { - this.$gutterLayer.setAnnotations(annotations); - this.$loop.schedule(this.CHANGE_GUTTER); - }; - VirtualRenderer.prototype.updateCursor = function () { - this.$loop.schedule(this.CHANGE_CURSOR); - }; - VirtualRenderer.prototype.hideCursor = function () { - this.$cursorLayer.hideCursor(); - }; - VirtualRenderer.prototype.showCursor = function () { - this.$cursorLayer.showCursor(); - }; - VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) { - this.scrollCursorIntoView(anchor, offset); - this.scrollCursorIntoView(lead, offset); + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); + } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) }; - VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) { - if (this.$size.scrollerHeight === 0) - return; - var pos = this.$cursorLayer.getPixelPosition(cursor); - var newLeft = pos.left; - var newTop = pos.top; - var topMargin = $viewMargin && $viewMargin.top || 0; - var bottomMargin = $viewMargin && $viewMargin.bottom || 0; - if (this.$scrollAnimation) { - this.$stopAnimation = true; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); } - var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; - if (currentTop + topMargin > newTop) { - if (offset && currentTop + topMargin > newTop + this.lineHeight) - newTop -= offset * this.$size.scrollerHeight; - if (newTop === 0) - newTop = -this.scrollMargin.top; - this.session.setScrollTop(newTop); + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); } - else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) { - if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight) - newTop += offset * this.$size.scrollerHeight; - this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight); + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + if (r.strip !== undefined) { + // r is BN v4 instance + r.strip(); + } else { + // r is BN v5 instance + r._strip(); + } + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); } - var currentLeft = this.scrollLeft; - var twoCharsWidth = 2 * this.layerConfig.characterWidth; - if (newLeft - twoCharsWidth < currentLeft) { - newLeft -= twoCharsWidth; - if (newLeft < this.$padding + twoCharsWidth) { - newLeft = -this.scrollMargin.left; - } - this.session.setScrollLeft(newLeft); + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; } - else { - newLeft += twoCharsWidth; - if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) { - this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth)); - } - else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) { - this.session.setScrollLeft(0); - } + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})( false || module, this); + + +/***/ }), + +/***/ "../../node_modules/public-encrypt/privateDecrypt.js": +/*!***********************************************************!*\ + !*** ../../node_modules/public-encrypt/privateDecrypt.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var parseKeys = __webpack_require__(/*! parse-asn1 */ "../../node_modules/parse-asn1/index.js") +var mgf = __webpack_require__(/*! ./mgf */ "../../node_modules/public-encrypt/mgf.js") +var xor = __webpack_require__(/*! ./xor */ "../../node_modules/public-encrypt/xor.js") +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js") +var crt = __webpack_require__(/*! browserify-rsa */ "../../node_modules/browserify-rsa/index.js") +var createHash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js") +var withPublic = __webpack_require__(/*! ./withPublic */ "../../node_modules/public-encrypt/withPublic.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +module.exports = function privateDecrypt (privateKey, enc, reverse) { + var padding + if (privateKey.padding) { + padding = privateKey.padding + } else if (reverse) { + padding = 1 + } else { + padding = 4 + } + + var key = parseKeys(privateKey) + var k = key.modulus.byteLength() + if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { + throw new Error('decryption error') + } + var msg + if (reverse) { + msg = withPublic(new BN(enc), key) + } else { + msg = crt(enc, key) + } + var zBuffer = Buffer.alloc(k - msg.length) + msg = Buffer.concat([zBuffer, msg], k) + if (padding === 4) { + return oaep(key, msg) + } else if (padding === 1) { + return pkcs1(key, msg, reverse) + } else if (padding === 3) { + return msg + } else { + throw new Error('unknown padding') + } +} + +function oaep (key, msg) { + var k = key.modulus.byteLength() + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() + var hLen = iHash.length + if (msg[0] !== 0) { + throw new Error('decryption error') + } + var maskedSeed = msg.slice(1, hLen + 1) + var maskedDb = msg.slice(hLen + 1) + var seed = xor(maskedSeed, mgf(maskedDb, hLen)) + var db = xor(maskedDb, mgf(seed, k - hLen - 1)) + if (compare(iHash, db.slice(0, hLen))) { + throw new Error('decryption error') + } + var i = hLen + while (db[i] === 0) { + i++ + } + if (db[i++] !== 1) { + throw new Error('decryption error') + } + return db.slice(i) +} + +function pkcs1 (key, msg, reverse) { + var p1 = msg.slice(0, 2) + var i = 2 + var status = 0 + while (msg[i++] !== 0) { + if (i >= msg.length) { + status++ + break + } + } + var ps = msg.slice(2, i - 1) + + if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) { + status++ + } + if (ps.length < 8) { + status++ + } + if (status) { + throw new Error('decryption error') + } + return msg.slice(i) +} +function compare (a, b) { + a = Buffer.from(a) + b = Buffer.from(b) + var dif = 0 + var len = a.length + if (a.length !== b.length) { + dif++ + len = Math.min(a.length, b.length) + } + var i = -1 + while (++i < len) { + dif += (a[i] ^ b[i]) + } + return dif +} + + +/***/ }), + +/***/ "../../node_modules/public-encrypt/publicEncrypt.js": +/*!**********************************************************!*\ + !*** ../../node_modules/public-encrypt/publicEncrypt.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var parseKeys = __webpack_require__(/*! parse-asn1 */ "../../node_modules/parse-asn1/index.js") +var randomBytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js") +var createHash = __webpack_require__(/*! create-hash */ "../../node_modules/create-hash/browser.js") +var mgf = __webpack_require__(/*! ./mgf */ "../../node_modules/public-encrypt/mgf.js") +var xor = __webpack_require__(/*! ./xor */ "../../node_modules/public-encrypt/xor.js") +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js") +var withPublic = __webpack_require__(/*! ./withPublic */ "../../node_modules/public-encrypt/withPublic.js") +var crt = __webpack_require__(/*! browserify-rsa */ "../../node_modules/browserify-rsa/index.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +module.exports = function publicEncrypt (publicKey, msg, reverse) { + var padding + if (publicKey.padding) { + padding = publicKey.padding + } else if (reverse) { + padding = 1 + } else { + padding = 4 + } + var key = parseKeys(publicKey) + var paddedMsg + if (padding === 4) { + paddedMsg = oaep(key, msg) + } else if (padding === 1) { + paddedMsg = pkcs1(key, msg, reverse) + } else if (padding === 3) { + paddedMsg = new BN(msg) + if (paddedMsg.cmp(key.modulus) >= 0) { + throw new Error('data too long for modulus') + } + } else { + throw new Error('unknown padding') + } + if (reverse) { + return crt(paddedMsg, key) + } else { + return withPublic(paddedMsg, key) + } +} + +function oaep (key, msg) { + var k = key.modulus.byteLength() + var mLen = msg.length + var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() + var hLen = iHash.length + var hLen2 = 2 * hLen + if (mLen > k - hLen2 - 2) { + throw new Error('message too long') + } + var ps = Buffer.alloc(k - mLen - hLen2 - 2) + var dblen = k - hLen - 1 + var seed = randomBytes(hLen) + var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)) + var maskedSeed = xor(seed, mgf(maskedDb, hLen)) + return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)) +} +function pkcs1 (key, msg, reverse) { + var mLen = msg.length + var k = key.modulus.byteLength() + if (mLen > k - 11) { + throw new Error('message too long') + } + var ps + if (reverse) { + ps = Buffer.alloc(k - mLen - 3, 0xff) + } else { + ps = nonZero(k - mLen - 3) + } + return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)) +} +function nonZero (len) { + var out = Buffer.allocUnsafe(len) + var i = 0 + var cache = randomBytes(len * 2) + var cur = 0 + var num + while (i < len) { + if (cur === cache.length) { + cache = randomBytes(len * 2) + cur = 0 + } + num = cache[cur++] + if (num) { + out[i++] = num + } + } + return out +} + + +/***/ }), + +/***/ "../../node_modules/public-encrypt/withPublic.js": +/*!*******************************************************!*\ + !*** ../../node_modules/public-encrypt/withPublic.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var BN = __webpack_require__(/*! bn.js */ "../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +function withPublic (paddedMsg, key) { + return Buffer.from(paddedMsg + .toRed(BN.mont(key.modulus)) + .redPow(new BN(key.publicExponent)) + .fromRed() + .toArray()) +} + +module.exports = withPublic + + +/***/ }), + +/***/ "../../node_modules/public-encrypt/xor.js": +/*!************************************************!*\ + !*** ../../node_modules/public-encrypt/xor.js ***! + \************************************************/ +/***/ ((module) => { + +module.exports = function xor (a, b) { + var len = a.length + var i = -1 + while (++i < len) { + a[i] ^= b[i] + } + return a +} + + +/***/ }), + +/***/ "../../node_modules/randombytes/browser.js": +/*!*************************************************!*\ + !*** ../../node_modules/randombytes/browser.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +// limit of Crypto.getRandomValues() +// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues +var MAX_BYTES = 65536 + +// Node supports requesting up to this number of bytes +// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 +var MAX_UINT32 = 4294967295 + +function oldBrowser () { + throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11') +} + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) +var crypto = __webpack_require__.g.crypto || __webpack_require__.g.msCrypto + +if (crypto && crypto.getRandomValues) { + module.exports = randomBytes +} else { + module.exports = oldBrowser +} + +function randomBytes (size, cb) { + // phantomjs needs to throw + if (size > MAX_UINT32) throw new RangeError('requested too many random bytes') + + var bytes = Buffer.allocUnsafe(size) + + if (size > 0) { // getRandomValues fails on IE if size == 0 + if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues + // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + for (var generated = 0; generated < size; generated += MAX_BYTES) { + // buffer.slice automatically checks if the end is past the end of + // the buffer so we don't have to here + crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)) + } + } else { + crypto.getRandomValues(bytes) + } + } + + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes) + }) + } + + return bytes +} + + +/***/ }), + +/***/ "../../node_modules/randomfill/browser.js": +/*!************************************************!*\ + !*** ../../node_modules/randomfill/browser.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + + +function oldBrowser () { + throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') +} +var safeBuffer = __webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js") +var randombytes = __webpack_require__(/*! randombytes */ "../../node_modules/randombytes/browser.js") +var Buffer = safeBuffer.Buffer +var kBufferMaxLength = safeBuffer.kMaxLength +var crypto = __webpack_require__.g.crypto || __webpack_require__.g.msCrypto +var kMaxUint32 = Math.pow(2, 32) - 1 +function assertOffset (offset, length) { + if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare + throw new TypeError('offset must be a number') + } + + if (offset > kMaxUint32 || offset < 0) { + throw new TypeError('offset must be a uint32') + } + + if (offset > kBufferMaxLength || offset > length) { + throw new RangeError('offset out of range') + } +} + +function assertSize (size, offset, length) { + if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare + throw new TypeError('size must be a number') + } + + if (size > kMaxUint32 || size < 0) { + throw new TypeError('size must be a uint32') + } + + if (size + offset > length || size > kBufferMaxLength) { + throw new RangeError('buffer too small') + } +} +if ((crypto && crypto.getRandomValues) || !process.browser) { + exports.randomFill = randomFill + exports.randomFillSync = randomFillSync +} else { + exports.randomFill = oldBrowser + exports.randomFillSync = oldBrowser +} +function randomFill (buf, offset, size, cb) { + if (!Buffer.isBuffer(buf) && !(buf instanceof __webpack_require__.g.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array') + } + + if (typeof offset === 'function') { + cb = offset + offset = 0 + size = buf.length + } else if (typeof size === 'function') { + cb = size + size = buf.length - offset + } else if (typeof cb !== 'function') { + throw new TypeError('"cb" argument must be a function') + } + assertOffset(offset, buf.length) + assertSize(size, offset, buf.length) + return actualFill(buf, offset, size, cb) +} + +function actualFill (buf, offset, size, cb) { + if (process.browser) { + var ourBuf = buf.buffer + var uint = new Uint8Array(ourBuf, offset, size) + crypto.getRandomValues(uint) + if (cb) { + process.nextTick(function () { + cb(null, buf) + }) + return + } + return buf + } + if (cb) { + randombytes(size, function (err, bytes) { + if (err) { + return cb(err) + } + bytes.copy(buf, offset) + cb(null, buf) + }) + return + } + var bytes = randombytes(size) + bytes.copy(buf, offset) + return buf +} +function randomFillSync (buf, offset, size) { + if (typeof offset === 'undefined') { + offset = 0 + } + if (!Buffer.isBuffer(buf) && !(buf instanceof __webpack_require__.g.Uint8Array)) { + throw new TypeError('"buf" argument must be a Buffer or Uint8Array') + } + + assertOffset(offset, buf.length) + + if (size === undefined) size = buf.length - offset + + assertSize(size, offset, buf.length) + + return actualFill(buf, offset, size) +} + + +/***/ }), + +/***/ "../../node_modules/readable-stream/errors-browser.js": +/*!************************************************************!*\ + !*** ../../node_modules/readable-stream/errors-browser.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + + +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } + +var codes = {}; + +function createErrorType(code, message, Base) { + if (!Base) { + Base = Error; + } + + function getMessage(arg1, arg2, arg3) { + if (typeof message === 'string') { + return message; + } else { + return message(arg1, arg2, arg3); + } + } + + var NodeError = + /*#__PURE__*/ + function (_Base) { + _inheritsLoose(NodeError, _Base); + + function NodeError(arg1, arg2, arg3) { + return _Base.call(this, getMessage(arg1, arg2, arg3)) || this; + } + + return NodeError; + }(Base); + + NodeError.prototype.name = Base.name; + NodeError.prototype.code = code; + codes[code] = NodeError; +} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js + + +function oneOf(expected, thing) { + if (Array.isArray(expected)) { + var len = expected.length; + expected = expected.map(function (i) { + return String(i); + }); + + if (len > 2) { + return "one of ".concat(thing, " ").concat(expected.slice(0, len - 1).join(', '), ", or ") + expected[len - 1]; + } else if (len === 2) { + return "one of ".concat(thing, " ").concat(expected[0], " or ").concat(expected[1]); + } else { + return "of ".concat(thing, " ").concat(expected[0]); + } + } else { + return "of ".concat(thing, " ").concat(String(expected)); + } +} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith + + +function startsWith(str, search, pos) { + return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; +} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith + + +function endsWith(str, search, this_len) { + if (this_len === undefined || this_len > str.length) { + this_len = str.length; + } + + return str.substring(this_len - search.length, this_len) === search; +} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes + + +function includes(str, search, start) { + if (typeof start !== 'number') { + start = 0; + } + + if (start + search.length > str.length) { + return false; + } else { + return str.indexOf(search, start) !== -1; + } +} + +createErrorType('ERR_INVALID_OPT_VALUE', function (name, value) { + return 'The value "' + value + '" is invalid for option "' + name + '"'; +}, TypeError); +createErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) { + // determiner: 'must be' or 'must not be' + var determiner; + + if (typeof expected === 'string' && startsWith(expected, 'not ')) { + determiner = 'must not be'; + expected = expected.replace(/^not /, ''); + } else { + determiner = 'must be'; + } + + var msg; + + if (endsWith(name, ' argument')) { + // For cases like 'first argument' + msg = "The ".concat(name, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } else { + var type = includes(name, '.') ? 'property' : 'argument'; + msg = "The \"".concat(name, "\" ").concat(type, " ").concat(determiner, " ").concat(oneOf(expected, 'type')); + } + + msg += ". Received type ".concat(typeof actual); + return msg; +}, TypeError); +createErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF'); +createErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) { + return 'The ' + name + ' method is not implemented'; +}); +createErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close'); +createErrorType('ERR_STREAM_DESTROYED', function (name) { + return 'Cannot call ' + name + ' after a stream was destroyed'; +}); +createErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times'); +createErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable'); +createErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end'); +createErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError); +createErrorType('ERR_UNKNOWN_ENCODING', function (arg) { + return 'Unknown encoding: ' + arg; +}, TypeError); +createErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event'); +module.exports.codes = codes; + + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/_stream_duplex.js": +/*!****************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/_stream_duplex.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + + + +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; +}; +/**/ + +module.exports = Duplex; +var Readable = __webpack_require__(/*! ./_stream_readable */ "../../node_modules/readable-stream/lib/_stream_readable.js"); +var Writable = __webpack_require__(/*! ./_stream_writable */ "../../node_modules/readable-stream/lib/_stream_writable.js"); +__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(Duplex, Readable); +{ + // Allow the keys array to be GC'ed. + var keys = objectKeys(Writable.prototype); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; + } +} +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + this.allowHalfOpen = true; + if (options) { + if (options.readable === false) this.readable = false; + if (options.writable === false) this.writable = false; + if (options.allowHalfOpen === false) { + this.allowHalfOpen = false; + this.once('end', onend); + } + } +} +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); +Object.defineProperty(Duplex.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } +}); +Object.defineProperty(Duplex.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } +}); + +// the no-half-open enforcer +function onend() { + // If the writable side ended, then we're ok. + if (this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + process.nextTick(onEndNT, this); +} +function onEndNT(self) { + self.end(); +} +Object.defineProperty(Duplex.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/_stream_passthrough.js": +/*!*********************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/_stream_passthrough.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + + + +module.exports = PassThrough; +var Transform = __webpack_require__(/*! ./_stream_transform */ "../../node_modules/readable-stream/lib/_stream_transform.js"); +__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(PassThrough, Transform); +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + Transform.call(this, options); +} +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/_stream_readable.js": +/*!******************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/_stream_readable.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +module.exports = Readable; + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = (__webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter); +var EElistenerCount = function EElistenerCount(emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream = __webpack_require__(/*! ./internal/streams/stream */ "../../node_modules/readable-stream/lib/internal/streams/stream-browser.js"); +/**/ + +var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); +var OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ +var debugUtil = __webpack_require__(/*! util */ "?983a"); +var debug; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function debug() {}; +} +/**/ + +var BufferList = __webpack_require__(/*! ./internal/streams/buffer_list */ "../../node_modules/readable-stream/lib/internal/streams/buffer_list.js"); +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "../../node_modules/readable-stream/lib/internal/streams/destroy.js"); +var _require = __webpack_require__(/*! ./internal/streams/state */ "../../node_modules/readable-stream/lib/internal/streams/state.js"), + getHighWaterMark = _require.getHighWaterMark; +var _require$codes = (__webpack_require__(/*! ../errors */ "../../node_modules/readable-stream/errors-browser.js").codes), + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; + +// Lazy loaded to improve the startup performance. +var StringDecoder; +var createReadableStreamAsyncIterator; +var from; +__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(Readable, Stream); +var errorOrDestroy = destroyImpl.errorOrDestroy; +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); + + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} +function ReadableState(options, stream, isDuplex) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + this.paused = true; + + // Should close be emitted on destroy. Defaults to true. + this.emitClose = options.emitClose !== false; + + // Should .destroy() be called after 'end' (and potentially 'finish') + this.autoDestroy = !!options.autoDestroy; + + // has it been destroyed + this.destroyed = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = (__webpack_require__(/*! string_decoder/ */ "../../node_modules/string_decoder/lib/string_decoder.js").StringDecoder); + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} +function Readable(options) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); + if (!(this instanceof Readable)) return new Readable(options); + + // Checking for a Stream.Duplex instance is faster here instead of inside + // the ReadableState constructor, at least with V8 6.5 + var isDuplex = this instanceof Duplex; + this._readableState = new ReadableState(options, this, isDuplex); + + // legacy + this.readable = true; + if (options) { + if (typeof options.read === 'function') this._read = options.read; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } + Stream.call(this); +} +Object.defineProperty(Readable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined) { + return false; + } + return this._readableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._readableState.destroyed = value; + } +}); +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; +Readable.prototype._destroy = function (err, cb) { + cb(err); +}; + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; + } + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); +}; +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + debug('readableAddChunk', chunk); + var state = stream._readableState; + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); + if (er) { + errorOrDestroy(stream, er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (addToFront) { + if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); + } else if (state.ended) { + errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); + } else if (state.destroyed) { + return false; + } else { + state.reading = false; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); } - }; - VirtualRenderer.prototype.getScrollTop = function () { - return this.session.getScrollTop(); - }; - VirtualRenderer.prototype.getScrollLeft = function () { - return this.session.getScrollLeft(); - }; - VirtualRenderer.prototype.getScrollTopRow = function () { - return this.scrollTop / this.lineHeight; - }; - VirtualRenderer.prototype.getScrollBottomRow = function () { - return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); - }; - VirtualRenderer.prototype.scrollToRow = function (row) { - this.session.setScrollTop(row * this.lineHeight); - }; - VirtualRenderer.prototype.alignCursor = function (cursor, alignment) { - if (typeof cursor == "number") - cursor = { row: cursor, column: 0 }; - var pos = this.$cursorLayer.getPixelPosition(cursor); - var h = this.$size.scrollerHeight - this.lineHeight; - var offset = pos.top - h * (alignment || 0); - this.session.setScrollTop(offset); - return offset; - }; - VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) { - var i = 0; - var l = this.STEPS; - var steps = []; - var func = function (t, x_min, dx) { - return dx * (Math.pow(t - 1, 3) + 1) + x_min; + } + } else if (!addToFront) { + state.reading = false; + maybeReadMore(stream, state); + } + } + + // We can push more data if we are below the highWaterMark. + // Also, if we have no data yet, we can stand some more bytes. + // This is to work around cases where hwm=0, such as the repl. + return !state.ended && (state.length < state.highWaterMark || state.length === 0); +} +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + state.awaitDrain = 0; + stream.emit('data', chunk); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } + maybeReadMore(stream, state); +} +function chunkInvalid(state, chunk) { + var er; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); + } + return er; +} +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = (__webpack_require__(/*! string_decoder/ */ "../../node_modules/string_decoder/lib/string_decoder.js").StringDecoder); + var decoder = new StringDecoder(enc); + this._readableState.decoder = decoder; + // If setEncoding(null), decoder.encoding equals utf8 + this._readableState.encoding = this._readableState.decoder.encoding; + + // Iterate over current buffer to convert already stored Buffers: + var p = this._readableState.buffer.head; + var content = ''; + while (p !== null) { + content += decoder.write(p.data); + p = p.next; + } + this._readableState.buffer.clear(); + if (content !== '') this._readableState.buffer.push(content); + this._readableState.length = content.length; + return this; +}; + +// Don't raise the hwm > 1GB +var MAX_HWM = 0x40000000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + if (ret === null) { + state.needReadable = state.length <= state.highWaterMark; + n = 0; + } else { + state.length -= n; + state.awaitDrain = 0; + } + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + if (ret !== null) this.emit('data', ret); + return ret; +}; +function onEofChunk(stream, state) { + debug('onEofChunk'); + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + if (state.sync) { + // if we are sync, wait until next tick to emit the data. + // Otherwise we risk emitting data in the flow() + // the readable code triggers during a read() call + emitReadable(stream); + } else { + // emit 'readable' now to make sure it gets picked up. + state.needReadable = false; + if (!state.emittedReadable) { + state.emittedReadable = true; + emitReadable_(stream); + } + } +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + debug('emitReadable', state.needReadable, state.emittedReadable); + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + process.nextTick(emitReadable_, stream); + } +} +function emitReadable_(stream) { + var state = stream._readableState; + debug('emitReadable_', state.destroyed, state.length, state.ended); + if (!state.destroyed && (state.length || state.ended)) { + stream.emit('readable'); + state.emittedReadable = false; + } + + // The stream needs another readable event if + // 1. It is not flowing, as the flow mechanism will take + // care of it. + // 2. It is not ended. + // 3. It is below the highWaterMark, so we can schedule + // another readable later. + state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(maybeReadMore_, stream, state); + } +} +function maybeReadMore_(stream, state) { + // Attempt to read more data if we should. + // + // The conditions for reading more data are (one of): + // - Not enough data buffered (state.length < state.highWaterMark). The loop + // is responsible for filling the buffer with enough data if such data + // is available. If highWaterMark is 0 and we are not in the flowing mode + // we should _not_ attempt to buffer any extra data. We'll get more data + // when the stream consumer calls read() instead. + // - No data in the buffer, and the stream is in flowing mode. In this mode + // the loop below is responsible for ensuring read() is called. Failing to + // call read here would abort the flow and there's no other mechanism for + // continuing the flow if the stream consumer has just subscribed to the + // 'data' event. + // + // In addition to the above conditions to keep reading data, the following + // conditions prevent the data from being read: + // - The stream has ended (state.ended). + // - There is already a pending 'read' operation (state.reading). This is a + // case where the the stream has called the implementation defined _read() + // method, but they are processing the call asynchronously and have _not_ + // called push() with new data. In this case we skip performing more + // read()s. The execution ends in this method again after the _read() ends + // up calling push() with more data. + while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { + var len = state.length; + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); +}; +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); + dest.on('unpipe', onunpipe); + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); + } + } + } + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + var ret = dest.write(chunk); + debug('dest.write', ret); + if (ret === false) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + return dest; +}; +function pipeOnDrain(src) { + return function pipeOnDrainFunctionResult() { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, { + hasUnpiped: false + }); + return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this, unpipeInfo); + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + var state = this._readableState; + if (ev === 'data') { + // update readableListening so that resume() may be a no-op + // a few lines down. This is needed to support once('readable'). + state.readableListening = this.listenerCount('readable') > 0; + + // Try start flowing on next tick if stream isn't explicitly paused + if (state.flowing !== false) this.resume(); + } else if (ev === 'readable') { + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.flowing = false; + state.emittedReadable = false; + debug('on readable', state.length, state.reading); + if (state.length) { + emitReadable(this); + } else if (!state.reading) { + process.nextTick(nReadingNextTick, this); + } + } + } + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; +Readable.prototype.removeListener = function (ev, fn) { + var res = Stream.prototype.removeListener.call(this, ev, fn); + if (ev === 'readable') { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + return res; +}; +Readable.prototype.removeAllListeners = function (ev) { + var res = Stream.prototype.removeAllListeners.apply(this, arguments); + if (ev === 'readable' || ev === undefined) { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + return res; +}; +function updateReadableListening(self) { + var state = self._readableState; + state.readableListening = self.listenerCount('readable') > 0; + if (state.resumeScheduled && !state.paused) { + // flowing needs to be set to true now, otherwise + // the upcoming resume will not flow. + state.flowing = true; + + // crude way to check if we should resume + } else if (self.listenerCount('data') > 0) { + self.resume(); + } +} +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + // we flow only if there is no one listening + // for readable, but we still have to call + // resume() + state.flowing = !state.readableListening; + resume(this, state); + } + state.paused = false; + return this; +}; +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + process.nextTick(resume_, stream, state); + } +} +function resume_(stream, state) { + debug('resume', state.reading); + if (!state.reading) { + stream.read(0); + } + state.resumeScheduled = false; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (this._readableState.flowing !== false) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + this._readableState.paused = true; + return this; +}; +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null); +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var _this = this; + var state = this._readableState; + var paused = false; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } + _this.push(null); + }); + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + var ret = _this.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function methodWrap(method) { + return function methodWrapReturnFunction() { + return stream[method].apply(stream, arguments); }; - for (i = 0; i < l; ++i) - steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); - return steps; - }; - VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) { - var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 }); - var offset = pos.top; - if (center) - offset -= this.$size.scrollerHeight / 2; - var initialScroll = this.scrollTop; - this.session.setScrollTop(offset); - if (animate !== false) - this.animateScrolling(initialScroll, callback); - }; - VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) { - var toValue = this.scrollTop; - if (!this.$animatedScroll) - return; - var _self = this; - if (fromValue == toValue) - return; - if (this.$scrollAnimation) { - var oldSteps = this.$scrollAnimation.steps; - if (oldSteps.length) { - fromValue = oldSteps[0]; - if (fromValue == toValue) - return; - } - } - var steps = _self.$calcSteps(fromValue, toValue); - this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps }; - clearInterval(this.$timer); - _self.session.setScrollTop(steps.shift()); - _self.session.$scrollTop = toValue; - function endAnimation() { - _self.$timer = clearInterval(_self.$timer); - _self.$scrollAnimation = null; - _self.$stopAnimation = false; - callback && callback(); - } - this.$timer = setInterval(function () { - if (_self.$stopAnimation) { - endAnimation(); - return; - } - if (!_self.session) - return clearInterval(_self.$timer); - if (steps.length) { - _self.session.setScrollTop(steps.shift()); - _self.session.$scrollTop = toValue; - } - else if (toValue != null) { - _self.session.$scrollTop = -1; - _self.session.setScrollTop(toValue); - toValue = null; - } - else { - endAnimation(); - } - }, 10); - }; - VirtualRenderer.prototype.scrollToY = function (scrollTop) { - if (this.scrollTop !== scrollTop) { - this.$loop.schedule(this.CHANGE_SCROLL); - this.scrollTop = scrollTop; - } - }; - VirtualRenderer.prototype.scrollToX = function (scrollLeft) { - if (this.scrollLeft !== scrollLeft) - this.scrollLeft = scrollLeft; - this.$loop.schedule(this.CHANGE_H_SCROLL); - }; - VirtualRenderer.prototype.scrollTo = function (x, y) { - this.session.setScrollTop(y); - this.session.setScrollLeft(x); - }; - VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) { - deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); - deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); - }; - VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) { - if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) - return true; - if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) - return true; - if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) - return true; - if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - - this.layerConfig.width < -1 + this.scrollMargin.right) - return true; - }; - VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) { - var canvasPos; - if (this.$hasCssTransforms) { - canvasPos = { top: 0, left: 0 }; - var p = this.$fontMetrics.transformCoordinates([x, y]); - x = p[1] - this.gutterWidth - this.margin.left; - y = p[0]; - } - else { - canvasPos = this.scroller.getBoundingClientRect(); - } - var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding; - var offset = offsetX / this.characterWidth; - var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); - var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset); - return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX }; + }(i); + } + } + + // proxy certain important events. + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + this._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + return this; +}; +if (typeof Symbol === 'function') { + Readable.prototype[Symbol.asyncIterator] = function () { + if (createReadableStreamAsyncIterator === undefined) { + createReadableStreamAsyncIterator = __webpack_require__(/*! ./internal/streams/async_iterator */ "../../node_modules/readable-stream/lib/internal/streams/async_iterator.js"); + } + return createReadableStreamAsyncIterator(this); + }; +} +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.highWaterMark; + } +}); +Object.defineProperty(Readable.prototype, 'readableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState && this._readableState.buffer; + } +}); +Object.defineProperty(Readable.prototype, 'readableFlowing', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.flowing; + }, + set: function set(state) { + if (this._readableState) { + this._readableState.flowing = state; + } + } +}); + +// exposed for testing purposes only. +Readable._fromList = fromList; +Object.defineProperty(Readable.prototype, 'readableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.length; + } +}); + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = state.buffer.consume(n, state.decoder); + } + return ret; +} +function endReadable(stream) { + var state = stream._readableState; + debug('endReadable', state.endEmitted); + if (!state.endEmitted) { + state.ended = true; + process.nextTick(endReadableNT, state, stream); + } +} +function endReadableNT(state, stream) { + debug('endReadableNT', state.endEmitted, state.length); + + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the writable side is ready for autoDestroy as well + var wState = stream._writableState; + if (!wState || wState.autoDestroy && wState.finished) { + stream.destroy(); + } + } + } +} +if (typeof Symbol === 'function') { + Readable.from = function (iterable, opts) { + if (from === undefined) { + from = __webpack_require__(/*! ./internal/streams/from */ "../../node_modules/readable-stream/lib/internal/streams/from-browser.js"); + } + return from(Readable, iterable, opts); + }; +} +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/_stream_transform.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/_stream_transform.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + + + +module.exports = Transform; +var _require$codes = (__webpack_require__(/*! ../errors */ "../../node_modules/readable-stream/errors-browser.js").codes), + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING, + ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0; +var Duplex = __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); +__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(Transform, Duplex); +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + var cb = ts.writecb; + if (cb === null) { + return this.emit('error', new ERR_MULTIPLE_CALLBACK()); + } + ts.writechunk = null; + ts.writecb = null; + if (data != null) + // single equals check for both `null` and `undefined` + this.push(data); + cb(er); + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + Duplex.call(this, options); + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} +function prefinish() { + var _this = this; + if (typeof this._flush === 'function' && !this._readableState.destroyed) { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()')); +}; +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + if (ts.writechunk !== null && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; +Transform.prototype._destroy = function (err, cb) { + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + }); +}; +function done(stream, er, data) { + if (er) return stream.emit('error', er); + if (data != null) + // single equals check for both `null` and `undefined` + stream.push(data); + + // TODO(BridgeAR): Write a test for these two error cases + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0(); + if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING(); + return stream.push(null); +} + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/_stream_writable.js": +/*!******************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/_stream_writable.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + + + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var internalUtil = { + deprecate: __webpack_require__(/*! util-deprecate */ "../../node_modules/util-deprecate/browser.js") +}; +/**/ + +/**/ +var Stream = __webpack_require__(/*! ./internal/streams/stream */ "../../node_modules/readable-stream/lib/internal/streams/stream-browser.js"); +/**/ + +var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); +var OurUint8Array = (typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +var destroyImpl = __webpack_require__(/*! ./internal/streams/destroy */ "../../node_modules/readable-stream/lib/internal/streams/destroy.js"); +var _require = __webpack_require__(/*! ./internal/streams/state */ "../../node_modules/readable-stream/lib/internal/streams/state.js"), + getHighWaterMark = _require.getHighWaterMark; +var _require$codes = (__webpack_require__(/*! ../errors */ "../../node_modules/readable-stream/errors-browser.js").codes), + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, + ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, + ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, + ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; +var errorOrDestroy = destroyImpl.errorOrDestroy; +__webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js")(Writable, Stream); +function nop() {} +function WritableState(options, stream, isDuplex) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream, + // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // Should close be emitted on destroy. Defaults to true. + this.emitClose = options.emitClose !== false; + + // Should .destroy() be called after 'finish' (and potentially 'end') + this.autoDestroy = !!options.autoDestroy; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function writableStateBufferGetter() { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function value(object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function realHasInstance(object) { + return object instanceof this; + }; +} +function Writable(options) { + Duplex = Duplex || __webpack_require__(/*! ./_stream_duplex */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + + // Checking for a Stream.Duplex instance is faster here instead of inside + // the WritableState constructor, at least with V8 6.5 + var isDuplex = this instanceof Duplex; + if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); + this._writableState = new WritableState(options, this, isDuplex); + + // legacy. + this.writable = true; + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + if (typeof options.final === 'function') this._final = options.final; + } + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); +}; +function writeAfterEnd(stream, cb) { + var er = new ERR_STREAM_WRITE_AFTER_END(); + // TODO: defer error events consistently everywhere, not just the cb + errorOrDestroy(stream, er); + process.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var er; + if (chunk === null) { + er = new ERR_STREAM_NULL_VALUES(); + } else if (typeof chunk !== 'string' && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); + } + if (er) { + errorOrDestroy(stream, er); + process.nextTick(cb, er); + return false; + } + return true; +} +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; +}; +Writable.prototype.cork = function () { + this._writableState.corked++; +}; +Writable.prototype.uncork = function () { + var state = this._writableState; + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; +Object.defineProperty(Writable.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } +}); +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null }; - VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) { - var canvasPos; - if (this.$hasCssTransforms) { - canvasPos = { top: 0, left: 0 }; - var p = this.$fontMetrics.transformCoordinates([x, y]); - x = p[1] - this.gutterWidth - this.margin.left; - y = p[0]; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + return ret; +} +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + process.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + process.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state) || stream.destroyed; + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + if (sync) { + process.nextTick(afterWrite, stream, state, finished, cb); + } else { + afterWrite(stream, state, finished, cb); + } + } +} +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + if (entry === null) state.lastBufferedRequest = null; + } + state.bufferedRequest = entry; + state.bufferProcessing = false; +} +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); +}; +Writable.prototype._writev = null; +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending) endWritable(this, state, cb); + return this; +}; +Object.defineProperty(Writable.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } +}); +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + errorOrDestroy(stream, err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function' && !state.destroyed) { + state.pendingcb++; + state.finalCalled = true; + process.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the readable side is ready for autoDestroy as well + var rState = stream._readableState; + if (!rState || rState.autoDestroy && rState.endEmitted) { + stream.destroy(); } - else { - canvasPos = this.scroller.getBoundingClientRect(); + } + } + } + return need; +} +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) process.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + // reuse the free corkReq. + state.corkedRequestsFree.next = corkReq; +} +Object.defineProperty(Writable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + cb(err); +}; + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/internal/streams/async_iterator.js": +/*!*********************************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/internal/streams/async_iterator.js ***! + \*********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var _Object$setPrototypeO; +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +var finished = __webpack_require__(/*! ./end-of-stream */ "../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js"); +var kLastResolve = Symbol('lastResolve'); +var kLastReject = Symbol('lastReject'); +var kError = Symbol('error'); +var kEnded = Symbol('ended'); +var kLastPromise = Symbol('lastPromise'); +var kHandlePromise = Symbol('handlePromise'); +var kStream = Symbol('stream'); +function createIterResult(value, done) { + return { + value: value, + done: done + }; +} +function readAndResolve(iter) { + var resolve = iter[kLastResolve]; + if (resolve !== null) { + var data = iter[kStream].read(); + // we defer if data is null + // we can be expecting either 'end' or + // 'error' + if (data !== null) { + iter[kLastPromise] = null; + iter[kLastResolve] = null; + iter[kLastReject] = null; + resolve(createIterResult(data, false)); + } + } +} +function onReadable(iter) { + // we wait for the next tick, because it might + // emit an error with process.nextTick + process.nextTick(readAndResolve, iter); +} +function wrapForNext(lastPromise, iter) { + return function (resolve, reject) { + lastPromise.then(function () { + if (iter[kEnded]) { + resolve(createIterResult(undefined, true)); + return; + } + iter[kHandlePromise](resolve, reject); + }, reject); + }; +} +var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); +var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { + get stream() { + return this[kStream]; + }, + next: function next() { + var _this = this; + // if we have detected an error in the meanwhile + // reject straight away + var error = this[kError]; + if (error !== null) { + return Promise.reject(error); + } + if (this[kEnded]) { + return Promise.resolve(createIterResult(undefined, true)); + } + if (this[kStream].destroyed) { + // We need to defer via nextTick because if .destroy(err) is + // called, the error will be emitted via nextTick, and + // we cannot guarantee that there is no error lingering around + // waiting to be emitted. + return new Promise(function (resolve, reject) { + process.nextTick(function () { + if (_this[kError]) { + reject(_this[kError]); + } else { + resolve(createIterResult(undefined, true)); + } + }); + }); + } + + // if we have multiple next() calls + // we will wait for the previous Promise to finish + // this logic is optimized to support for await loops, + // where next() is only called once at a time + var lastPromise = this[kLastPromise]; + var promise; + if (lastPromise) { + promise = new Promise(wrapForNext(lastPromise, this)); + } else { + // fast path needed to support multiple this.push() + // without triggering the next() queue + var data = this[kStream].read(); + if (data !== null) { + return Promise.resolve(createIterResult(data, false)); + } + promise = new Promise(this[kHandlePromise]); + } + this[kLastPromise] = promise; + return promise; + } +}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { + return this; +}), _defineProperty(_Object$setPrototypeO, "return", function _return() { + var _this2 = this; + // destroy(err, cb) is a private API + // we can guarantee we have that here, because we control the + // Readable class this is attached to + return new Promise(function (resolve, reject) { + _this2[kStream].destroy(null, function (err) { + if (err) { + reject(err); + return; + } + resolve(createIterResult(undefined, true)); + }); + }); +}), _Object$setPrototypeO), AsyncIteratorPrototype); +var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { + var _Object$create; + var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { + value: stream, + writable: true + }), _defineProperty(_Object$create, kLastResolve, { + value: null, + writable: true + }), _defineProperty(_Object$create, kLastReject, { + value: null, + writable: true + }), _defineProperty(_Object$create, kError, { + value: null, + writable: true + }), _defineProperty(_Object$create, kEnded, { + value: stream._readableState.endEmitted, + writable: true + }), _defineProperty(_Object$create, kHandlePromise, { + value: function value(resolve, reject) { + var data = iterator[kStream].read(); + if (data) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(data, false)); + } else { + iterator[kLastResolve] = resolve; + iterator[kLastReject] = reject; + } + }, + writable: true + }), _Object$create)); + iterator[kLastPromise] = null; + finished(stream, function (err) { + if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { + var reject = iterator[kLastReject]; + // reject if we are waiting for data in the Promise + // returned by next() and store the error + if (reject !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + reject(err); + } + iterator[kError] = err; + return; + } + var resolve = iterator[kLastResolve]; + if (resolve !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(undefined, true)); + } + iterator[kEnded] = true; + }); + stream.on('readable', onReadable.bind(null, iterator)); + return iterator; +}; +module.exports = createReadableStreamAsyncIterator; + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/internal/streams/buffer_list.js": +/*!******************************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/internal/streams/buffer_list.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } +function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } +function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +var _require = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js"), + Buffer = _require.Buffer; +var _require2 = __webpack_require__(/*! util */ "?1dff"), + inspect = _require2.inspect; +var custom = inspect && inspect.custom || 'inspect'; +function copyBuffer(src, target, offset) { + Buffer.prototype.copy.call(src, target, offset); +} +module.exports = /*#__PURE__*/function () { + function BufferList() { + _classCallCheck(this, BufferList); + this.head = null; + this.tail = null; + this.length = 0; + } + _createClass(BufferList, [{ + key: "push", + value: function push(v) { + var entry = { + data: v, + next: null + }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; + } + }, { + key: "unshift", + value: function unshift(v) { + var entry = { + data: v, + next: this.head + }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; + } + }, { + key: "shift", + value: function shift() { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; + } + }, { + key: "clear", + value: function clear() { + this.head = this.tail = null; + this.length = 0; + } + }, { + key: "join", + value: function join(s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) ret += s + p.data; + return ret; + } + }, { + key: "concat", + value: function concat(n) { + if (this.length === 0) return Buffer.alloc(0); + var ret = Buffer.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + copyBuffer(p.data, ret, i); + i += p.data.length; + p = p.next; + } + return ret; + } + + // Consumes a specified amount of bytes or characters from the buffered data. + }, { + key: "consume", + value: function consume(n, hasStrings) { + var ret; + if (n < this.head.data.length) { + // `slice` is the same for buffers and strings. + ret = this.head.data.slice(0, n); + this.head.data = this.head.data.slice(n); + } else if (n === this.head.data.length) { + // First chunk is a perfect match. + ret = this.shift(); + } else { + // Result spans more than one buffer. + ret = hasStrings ? this._getString(n) : this._getBuffer(n); + } + return ret; + } + }, { + key: "first", + value: function first() { + return this.head.data; + } + + // Consumes a specified amount of characters from the buffered data. + }, { + key: "_getString", + value: function _getString(n) { + var p = this.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) this.head = p.next;else this.head = this.tail = null; + } else { + this.head = p; + p.data = str.slice(nb); + } + break; } - var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding; - var offset = offsetX / this.characterWidth; - var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset); - var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); - return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX); - }; - VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) { - var canvasPos = this.scroller.getBoundingClientRect(); - var pos = this.session.documentToScreenPosition(row, column); - var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row) - ? this.session.$bidiHandler.getPosLeft(pos.column) - : Math.round(pos.column * this.characterWidth)); - var y = pos.row * this.lineHeight; - return { - pageX: canvasPos.left + x - this.scrollLeft, - pageY: canvasPos.top + y - this.scrollTop - }; - }; - VirtualRenderer.prototype.visualizeFocus = function () { - dom.addCssClass(this.container, "ace_focus"); - }; - VirtualRenderer.prototype.visualizeBlur = function () { - dom.removeCssClass(this.container, "ace_focus"); - }; - VirtualRenderer.prototype.showComposition = function (composition) { - this.$composition = composition; - if (!composition.cssText) { - composition.cssText = this.textarea.style.cssText; + ++c; + } + this.length -= c; + return ret; + } + + // Consumes a specified amount of bytes from the buffered data. + }, { + key: "_getBuffer", + value: function _getBuffer(n) { + var ret = Buffer.allocUnsafe(n); + var p = this.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) this.head = p.next;else this.head = this.tail = null; + } else { + this.head = p; + p.data = buf.slice(nb); + } + break; } - if (composition.useTextareaForIME == undefined) - composition.useTextareaForIME = this.$useTextareaForIME; - if (this.$useTextareaForIME) { - dom.addCssClass(this.textarea, "ace_composition"); - this.textarea.style.cssText = ""; - this.$moveTextAreaToCursor(); - this.$cursorLayer.element.style.display = "none"; + ++c; + } + this.length -= c; + return ret; + } + + // Make sure the linked list only shows the minimal necessary information. + }, { + key: custom, + value: function value(_, options) { + return inspect(this, _objectSpread(_objectSpread({}, options), {}, { + // Only inspect one level. + depth: 0, + // It should not recurse. + customInspect: false + })); + } + }]); + return BufferList; +}(); + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/internal/streams/destroy.js": +/*!**************************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/internal/streams/destroy.js ***! + \**************************************************************************/ +/***/ ((module) => { + +"use strict"; + + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + process.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + process.nextTick(emitErrorNT, this, err); + } + } + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + process.nextTick(emitErrorAndCloseNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + process.nextTick(emitErrorAndCloseNT, _this, err); + } else { + process.nextTick(emitCloseNT, _this); + } + } else if (cb) { + process.nextTick(emitCloseNT, _this); + cb(err); + } else { + process.nextTick(emitCloseNT, _this); + } + }); + return this; +} +function emitErrorAndCloseNT(self, err) { + emitErrorNT(self, err); + emitCloseNT(self); +} +function emitCloseNT(self) { + if (self._writableState && !self._writableState.emitClose) return; + if (self._readableState && !self._readableState.emitClose) return; + self.emit('close'); +} +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} +function emitErrorNT(self, err) { + self.emit('error', err); +} +function errorOrDestroy(stream, err) { + // We have tests that rely on errors being emitted + // in the same tick, so changing this is semver major. + // For now when you opt-in to autoDestroy we allow + // the error to be emitted nextTick. In a future + // semver major update we should change the default to this. + + var rState = stream._readableState; + var wState = stream._writableState; + if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); +} +module.exports = { + destroy: destroy, + undestroy: undestroy, + errorOrDestroy: errorOrDestroy +}; + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js": +/*!********************************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js ***! + \********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Ported from https://github.com/mafintosh/end-of-stream with +// permission from the author, Mathias Buus (@mafintosh). + + + +var ERR_STREAM_PREMATURE_CLOSE = (__webpack_require__(/*! ../../../errors */ "../../node_modules/readable-stream/errors-browser.js").codes).ERR_STREAM_PREMATURE_CLOSE; +function once(callback) { + var called = false; + return function () { + if (called) return; + called = true; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + callback.apply(this, args); + }; +} +function noop() {} +function isRequest(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +} +function eos(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + callback = once(callback || noop); + var readable = opts.readable || opts.readable !== false && stream.readable; + var writable = opts.writable || opts.writable !== false && stream.writable; + var onlegacyfinish = function onlegacyfinish() { + if (!stream.writable) onfinish(); + }; + var writableEnded = stream._writableState && stream._writableState.finished; + var onfinish = function onfinish() { + writable = false; + writableEnded = true; + if (!readable) callback.call(stream); + }; + var readableEnded = stream._readableState && stream._readableState.endEmitted; + var onend = function onend() { + readable = false; + readableEnded = true; + if (!writable) callback.call(stream); + }; + var onerror = function onerror(err) { + callback.call(stream, err); + }; + var onclose = function onclose() { + var err; + if (readable && !readableEnded) { + if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + if (writable && !writableEnded) { + if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE(); + return callback.call(stream, err); + } + }; + var onrequest = function onrequest() { + stream.req.on('finish', onfinish); + }; + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest();else stream.on('request', onrequest); + } else if (writable && !stream._writableState) { + // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); + return function () { + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; +} +module.exports = eos; + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/internal/streams/from-browser.js": +/*!*******************************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/internal/streams/from-browser.js ***! + \*******************************************************************************/ +/***/ ((module) => { + +module.exports = function () { + throw new Error('Readable.from is not available in the browser') +}; + + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/internal/streams/pipeline.js": +/*!***************************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/internal/streams/pipeline.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// Ported from https://github.com/mafintosh/pump with +// permission from the author, Mathias Buus (@mafintosh). + + + +var eos; +function once(callback) { + var called = false; + return function () { + if (called) return; + called = true; + callback.apply(void 0, arguments); + }; +} +var _require$codes = (__webpack_require__(/*! ../../../errors */ "../../node_modules/readable-stream/errors-browser.js").codes), + ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; +function noop(err) { + // Rethrow the error if it exists to avoid swallowing it + if (err) throw err; +} +function isRequest(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +} +function destroyer(stream, reading, writing, callback) { + callback = once(callback); + var closed = false; + stream.on('close', function () { + closed = true; + }); + if (eos === undefined) eos = __webpack_require__(/*! ./end-of-stream */ "../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js"); + eos(stream, { + readable: reading, + writable: writing + }, function (err) { + if (err) return callback(err); + closed = true; + callback(); + }); + var destroyed = false; + return function (err) { + if (closed) return; + if (destroyed) return; + destroyed = true; + + // request.destroy just do .end - .abort is what we want + if (isRequest(stream)) return stream.abort(); + if (typeof stream.destroy === 'function') return stream.destroy(); + callback(err || new ERR_STREAM_DESTROYED('pipe')); + }; +} +function call(fn) { + fn(); +} +function pipe(from, to) { + return from.pipe(to); +} +function popCallback(streams) { + if (!streams.length) return noop; + if (typeof streams[streams.length - 1] !== 'function') return noop; + return streams.pop(); +} +function pipeline() { + for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { + streams[_key] = arguments[_key]; + } + var callback = popCallback(streams); + if (Array.isArray(streams[0])) streams = streams[0]; + if (streams.length < 2) { + throw new ERR_MISSING_ARGS('streams'); + } + var error; + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1; + var writing = i > 0; + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err; + if (err) destroys.forEach(call); + if (reading) return; + destroys.forEach(call); + callback(error); + }); + }); + return streams.reduce(pipe); +} +module.exports = pipeline; + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/internal/streams/state.js": +/*!************************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/internal/streams/state.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +var ERR_INVALID_OPT_VALUE = (__webpack_require__(/*! ../../../errors */ "../../node_modules/readable-stream/errors-browser.js").codes).ERR_INVALID_OPT_VALUE; +function highWaterMarkFrom(options, isDuplex, duplexKey) { + return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null; +} +function getHighWaterMark(state, options, duplexKey, isDuplex) { + var hwm = highWaterMarkFrom(options, isDuplex, duplexKey); + if (hwm != null) { + if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) { + var name = isDuplex ? duplexKey : 'highWaterMark'; + throw new ERR_INVALID_OPT_VALUE(name, hwm); + } + return Math.floor(hwm); + } + + // Default value + return state.objectMode ? 16 : 16 * 1024; +} +module.exports = { + getHighWaterMark: getHighWaterMark +}; + +/***/ }), + +/***/ "../../node_modules/readable-stream/lib/internal/streams/stream-browser.js": +/*!*********************************************************************************!*\ + !*** ../../node_modules/readable-stream/lib/internal/streams/stream-browser.js ***! + \*********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +module.exports = __webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter; + + +/***/ }), + +/***/ "../../node_modules/readline-sync/lib/readline-sync.js": +/*!*************************************************************!*\ + !*** ../../node_modules/readline-sync/lib/readline-sync.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +var __dirname = "/"; +/* + * readlineSync + * https://github.com/anseki/readline-sync + * + * Copyright (c) 2018 anseki + * Licensed under the MIT license. + */ + + + +var + IS_WIN = process.platform === 'win32', + + ALGORITHM_CIPHER = 'aes-256-cbc', + ALGORITHM_HASH = 'sha256', + DEFAULT_ERR_MSG = 'The current environment doesn\'t support interactive reading from TTY.', + + fs = __webpack_require__(/*! fs */ "?cf74"), + TTY = process.binding('tty_wrap').TTY, + childProc = __webpack_require__(/*! child_process */ "?e4ab"), + pathUtil = __webpack_require__(/*! path */ "../../node_modules/path/path.js"), + + defaultOptions = { + /* eslint-disable key-spacing */ + prompt: '> ', + hideEchoBack: false, + mask: '*', + limit: [], + limitMessage: 'Input another, please.$<( [)limit(])>', + defaultInput: '', + trueValue: [], + falseValue: [], + caseSensitive: false, + keepWhitespace: false, + encoding: 'utf8', + bufferSize: 1024, + print: void 0, + history: true, + cd: false, + phContent: void 0, + preCheck: void 0 + /* eslint-enable key-spacing */ + }, + + fdR = 'none', fdW, ttyR, isRawMode = false, + extHostPath, extHostArgs, tempdir, salt = 0, + lastInput = '', inputHistory = [], rawInput, + _DBG_useExt = false, _DBG_checkOptions = false, _DBG_checkMethod = false; + +function getHostArgs(options) { + // Send any text to crazy Windows shell safely. + function encodeArg(arg) { + return arg.replace(/[^\w\u0080-\uFFFF]/g, function(chr) { + return '#' + chr.charCodeAt(0) + ';'; + }); + } + + return extHostArgs.concat((function(conf) { + var args = []; + Object.keys(conf).forEach(function(optionName) { + if (conf[optionName] === 'boolean') { + if (options[optionName]) { args.push('--' + optionName); } + } else if (conf[optionName] === 'string') { + if (options[optionName]) { + args.push('--' + optionName, encodeArg(options[optionName])); } - else { - composition.markerId = this.session.addMarker(composition.markerRange, "ace_composition_marker", "text"); + } + }); + return args; + })({ + /* eslint-disable key-spacing */ + display: 'string', + displayOnly: 'boolean', + keyIn: 'boolean', + hideEchoBack: 'boolean', + mask: 'string', + limit: 'string', + caseSensitive: 'boolean' + /* eslint-enable key-spacing */ + })); +} + +// piping via files (for Node.js v0.10-) +function _execFileSync(options, execOptions) { + + function getTempfile(name) { + var filepath, suffix = '', fd; + tempdir = tempdir || (__webpack_require__(/*! os */ "../../node_modules/os/index.js").tmpdir)(); + + while (true) { + filepath = pathUtil.join(tempdir, name + suffix); + try { + fd = fs.openSync(filepath, 'wx'); + } catch (e) { + if (e.code === 'EEXIST') { + suffix++; + continue; + } else { + throw e; + } + } + fs.closeSync(fd); + break; + } + return filepath; + } + + var hostArgs, shellPath, shellArgs, res = {}, exitCode, extMessage, + pathStdout = getTempfile('readline-sync.stdout'), + pathStderr = getTempfile('readline-sync.stderr'), + pathExit = getTempfile('readline-sync.exit'), + pathDone = getTempfile('readline-sync.done'), + crypto = __webpack_require__(/*! crypto */ "../../node_modules/crypto-browserify/index.js"), shasum, decipher, password; + + shasum = crypto.createHash(ALGORITHM_HASH); + shasum.update('' + process.pid + (salt++) + Math.random()); + password = shasum.digest('hex'); + decipher = crypto.createDecipher(ALGORITHM_CIPHER, password); + + hostArgs = getHostArgs(options); + if (IS_WIN) { + shellPath = process.env.ComSpec || 'cmd.exe'; + process.env.Q = '"'; // The quote (") that isn't escaped. + // `()` for ignore space by echo + shellArgs = ['/V:ON', '/S', '/C', + '(%Q%' + shellPath + '%Q% /V:ON /S /C %Q%' + /* ESLint bug? */ // eslint-disable-line no-path-concat + '%Q%' + extHostPath + '%Q%' + + hostArgs.map(function(arg) { return ' %Q%' + arg + '%Q%'; }).join('') + + ' & (echo !ERRORLEVEL!)>%Q%' + pathExit + '%Q%%Q%) 2>%Q%' + pathStderr + '%Q%' + + ' |%Q%' + process.execPath + '%Q% %Q%' + __dirname + '\\encrypt.js%Q%' + + ' %Q%' + ALGORITHM_CIPHER + '%Q% %Q%' + password + '%Q%' + + ' >%Q%' + pathStdout + '%Q%' + + ' & (echo 1)>%Q%' + pathDone + '%Q%']; + } else { + shellPath = '/bin/sh'; + shellArgs = ['-c', + // Use `()`, not `{}` for `-c` (text param) + '("' + extHostPath + '"' + /* ESLint bug? */ // eslint-disable-line no-path-concat + hostArgs.map(function(arg) { return " '" + arg.replace(/'/g, "'\\''") + "'"; }).join('') + + '; echo $?>"' + pathExit + '") 2>"' + pathStderr + '"' + + ' |"' + process.execPath + '" "' + __dirname + '/encrypt.js"' + + ' "' + ALGORITHM_CIPHER + '" "' + password + '"' + + ' >"' + pathStdout + '"' + + '; echo 1 >"' + pathDone + '"']; + } + if (_DBG_checkMethod) { _DBG_checkMethod('_execFileSync', hostArgs); } + try { + childProc.spawn(shellPath, shellArgs, execOptions); + } catch (e) { + res.error = new Error(e.message); + res.error.method = '_execFileSync - spawn'; + res.error.program = shellPath; + res.error.args = shellArgs; + } + + while (fs.readFileSync(pathDone, {encoding: options.encoding}).trim() !== '1') {} // eslint-disable-line no-empty + if ((exitCode = + fs.readFileSync(pathExit, {encoding: options.encoding}).trim()) === '0') { + res.input = + decipher.update(fs.readFileSync(pathStdout, {encoding: 'binary'}), + 'hex', options.encoding) + + decipher.final(options.encoding); + } else { + extMessage = fs.readFileSync(pathStderr, {encoding: options.encoding}).trim(); + res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\n' + extMessage : '')); + res.error.method = '_execFileSync'; + res.error.program = shellPath; + res.error.args = shellArgs; + res.error.extMessage = extMessage; + res.error.exitCode = +exitCode; + } + + fs.unlinkSync(pathStdout); + fs.unlinkSync(pathStderr); + fs.unlinkSync(pathExit); + fs.unlinkSync(pathDone); + + return res; +} + +function readlineExt(options) { + var hostArgs, res = {}, extMessage, + execOptions = {env: process.env, encoding: options.encoding}; + + if (!extHostPath) { + if (IS_WIN) { + if (process.env.PSModulePath) { // Windows PowerShell + extHostPath = 'powershell.exe'; + extHostArgs = ['-ExecutionPolicy', 'Bypass', '-File', __dirname + '\\read.ps1']; // eslint-disable-line no-path-concat + } else { // Windows Script Host + extHostPath = 'cscript.exe'; + extHostArgs = ['//nologo', __dirname + '\\read.cs.js']; // eslint-disable-line no-path-concat + } + } else { + extHostPath = '/bin/sh'; + extHostArgs = [__dirname + '/read.sh']; // eslint-disable-line no-path-concat + } + } + if (IS_WIN && !process.env.PSModulePath) { // Windows Script Host + // ScriptPW (Win XP and Server2003) needs TTY stream as STDIN. + // In this case, If STDIN isn't TTY, an error is thrown. + execOptions.stdio = [process.stdin]; + } + + if (childProc.execFileSync) { + hostArgs = getHostArgs(options); + if (_DBG_checkMethod) { _DBG_checkMethod('execFileSync', hostArgs); } + try { + res.input = childProc.execFileSync(extHostPath, hostArgs, execOptions); + } catch (e) { // non-zero exit code + extMessage = e.stderr ? (e.stderr + '').trim() : ''; + res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\n' + extMessage : '')); + res.error.method = 'execFileSync'; + res.error.program = extHostPath; + res.error.args = hostArgs; + res.error.extMessage = extMessage; + res.error.exitCode = e.status; + res.error.code = e.code; + res.error.signal = e.signal; + } + } else { + res = _execFileSync(options, execOptions); + } + if (!res.error) { + res.input = res.input.replace(/^\s*'|'\s*$/g, ''); + options.display = ''; + } + + return res; +} + +/* + display: string + displayOnly: boolean + keyIn: boolean + hideEchoBack: boolean + mask: string + limit: string (pattern) + caseSensitive: boolean + keepWhitespace: boolean + encoding, bufferSize, print +*/ +function _readlineSync(options) { + var input = '', displaySave = options.display, + silent = !options.display && + options.keyIn && options.hideEchoBack && !options.mask; + + function tryExt() { + var res = readlineExt(options); + if (res.error) { throw res.error; } + return res.input; + } + + if (_DBG_checkOptions) { _DBG_checkOptions(options); } + + (function() { // open TTY + var fsB, constants, verNum; + + function getFsB() { + if (!fsB) { + fsB = process.binding('fs'); // For raw device path + constants = process.binding('constants'); + } + return fsB; + } + + if (typeof fdR !== 'string') { return; } + fdR = null; + + if (IS_WIN) { + // iojs-v2.3.2+ input stream can't read first line. (#18) + // ** Don't get process.stdin before check! ** + // Fixed v5.1.0 + // Fixed v4.2.4 + // It regressed again in v5.6.0, it is fixed in v6.2.0. + verNum = (function(ver) { // getVerNum + var nums = ver.replace(/^\D+/, '').split('.'); + var verNum = 0; + if ((nums[0] = +nums[0])) { verNum += nums[0] * 10000; } + if ((nums[1] = +nums[1])) { verNum += nums[1] * 100; } + if ((nums[2] = +nums[2])) { verNum += nums[2]; } + return verNum; + })(process.version); + if (!(verNum >= 20302 && verNum < 40204 || verNum >= 50000 && verNum < 50100 || verNum >= 50600 && verNum < 60200) && + process.stdin.isTTY) { + process.stdin.pause(); + fdR = process.stdin.fd; + ttyR = process.stdin._handle; + } else { + try { + // The stream by fs.openSync('\\\\.\\CON', 'r') can't switch to raw mode. + // 'CONIN$' might fail on XP, 2000, 7 (x86). + fdR = getFsB().open('CONIN$', constants.O_RDWR, parseInt('0666', 8)); + ttyR = new TTY(fdR, true); + } catch (e) { /* ignore */ } + } + + if (process.stdout.isTTY) { + fdW = process.stdout.fd; + } else { + try { + fdW = fs.openSync('\\\\.\\CON', 'w'); + } catch (e) { /* ignore */ } + if (typeof fdW !== 'number') { // Retry + try { + fdW = getFsB().open('CONOUT$', constants.O_RDWR, parseInt('0666', 8)); + } catch (e) { /* ignore */ } } - }; - VirtualRenderer.prototype.setCompositionText = function (text) { - var cursor = this.session.selection.cursor; - this.addToken(text, "composition_placeholder", cursor.row, cursor.column); - this.$moveTextAreaToCursor(); - }; - VirtualRenderer.prototype.hideComposition = function () { - if (!this.$composition) - return; - if (this.$composition.markerId) - this.session.removeMarker(this.$composition.markerId); - dom.removeCssClass(this.textarea, "ace_composition"); - this.textarea.style.cssText = this.$composition.cssText; - var cursor = this.session.selection.cursor; - this.removeExtraToken(cursor.row, cursor.column); - this.$composition = null; - this.$cursorLayer.element.style.display = ""; - }; - VirtualRenderer.prototype.setGhostText = function (text, position) { - var cursor = this.session.selection.cursor; - var insertPosition = position || { row: cursor.row, column: cursor.column }; - this.removeGhostText(); - var textChunks = this.$calculateWrappedTextChunks(text, insertPosition); - this.addToken(textChunks[0].text, "ghost_text", insertPosition.row, insertPosition.column); - this.$ghostText = { - text: text, - position: { - row: insertPosition.row, - column: insertPosition.column - } - }; - var widgetDiv = dom.createElement("div"); - if (textChunks.length > 1) { - var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column); - var lastLineDiv; - textChunks.slice(1).forEach(function (el) { - var chunkDiv = dom.createElement("div"); - var chunkSpan = dom.createElement("span"); - chunkSpan.className = "ace_ghost_text"; - if (el.wrapped) - chunkDiv.className = "ghost_text_line_wrapped"; - if (el.text.length === 0) - el.text = " "; - chunkSpan.appendChild(dom.createTextNode(el.text)); - chunkDiv.appendChild(chunkSpan); - widgetDiv.appendChild(chunkDiv); - lastLineDiv = chunkDiv; - }); - hiddenTokens.forEach(function (token) { - var element = dom.createElement("span"); - if (!isTextToken(token.type)) - element.className = "ace_" + token.type.replace(/\./g, " ace_"); - element.appendChild(dom.createTextNode(token.value)); - lastLineDiv.appendChild(element); - }); - this.$ghostTextWidget = { - el: widgetDiv, - row: insertPosition.row, - column: insertPosition.column, - className: "ace_ghost_text_container" - }; - this.session.widgetManager.addLineWidget(this.$ghostTextWidget); - var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true); - var el = this.container; - var height = el.getBoundingClientRect().height; - var ghostTextHeight = textChunks.length * this.lineHeight; - var fitsY = ghostTextHeight < (height - pixelPosition.top); - if (fitsY) - return; - if (ghostTextHeight < height) { - this.scrollBy(0, (textChunks.length - 1) * this.lineHeight); - } - else { - this.scrollToRow(insertPosition.row); - } + } + + } else { + if (process.stdin.isTTY) { + process.stdin.pause(); + try { + fdR = fs.openSync('/dev/tty', 'r'); // device file, not process.stdin + ttyR = process.stdin._handle; + } catch (e) { /* ignore */ } + } else { + // Node.js v0.12 read() fails. + try { + fdR = fs.openSync('/dev/tty', 'r'); + ttyR = new TTY(fdR, false); + } catch (e) { /* ignore */ } + } + + if (process.stdout.isTTY) { + fdW = process.stdout.fd; + } else { + try { + fdW = fs.openSync('/dev/tty', 'w'); + } catch (e) { /* ignore */ } + } + } + })(); + + (function() { // try read + var atEol, limit, + isCooked = !options.hideEchoBack && !options.keyIn, + buffer, reqSize, readSize, chunk, line; + rawInput = ''; + + // Node.js v0.10- returns an error if same mode is set. + function setRawMode(mode) { + if (mode === isRawMode) { return true; } + if (ttyR.setRawMode(mode) !== 0) { return false; } + isRawMode = mode; + return true; + } + + if (_DBG_useExt || !ttyR || + typeof fdW !== 'number' && (options.display || !isCooked)) { + input = tryExt(); + return; + } + + if (options.display) { + fs.writeSync(fdW, options.display); + options.display = ''; + } + if (options.displayOnly) { return; } + + if (!setRawMode(!isCooked)) { + input = tryExt(); + return; + } + + reqSize = options.keyIn ? 1 : options.bufferSize; + // Check `allocUnsafe` to make sure of the new API. + buffer = Buffer.allocUnsafe && Buffer.alloc ? Buffer.alloc(reqSize) : new Buffer(reqSize); + + if (options.keyIn && options.limit) { + limit = new RegExp('[^' + options.limit + ']', + 'g' + (options.caseSensitive ? '' : 'i')); + } + + while (true) { + readSize = 0; + try { + readSize = fs.readSync(fdR, buffer, 0, reqSize); + } catch (e) { + if (e.code !== 'EOF') { + setRawMode(false); + input += tryExt(); + return; } - }; - VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) { - var availableWidth = this.$size.scrollerWidth - this.$padding * 2; - var limit = Math.floor(availableWidth / this.characterWidth) - 2; - limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small - var textLines = text.split(/\r?\n/); - var textChunks = []; - for (var i = 0; i < textLines.length; i++) { - var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column); - var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize); - if (wrapSplits.length > 0) { - var start = 0; - wrapSplits.push(textLines[i].length); - for (var j = 0; j < wrapSplits.length; j++) { - var textSlice = textLines[i].slice(start, wrapSplits[j]); - textChunks.push({ text: textSlice, wrapped: true }); - start = wrapSplits[j]; - } - } - else { - textChunks.push({ text: textLines[i], wrapped: false }); - } + } + if (readSize > 0) { + chunk = buffer.toString(options.encoding, 0, readSize); + rawInput += chunk; + } else { + chunk = '\n'; + rawInput += String.fromCharCode(0); + } + + if (chunk && typeof (line = (chunk.match(/^(.*?)[\r\n]/) || [])[1]) === 'string') { + chunk = line; + atEol = true; + } + + // other ctrl-chars + // eslint-disable-next-line no-control-regex + if (chunk) { chunk = chunk.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g, ''); } + if (chunk && limit) { chunk = chunk.replace(limit, ''); } + + if (chunk) { + if (!isCooked) { + if (!options.hideEchoBack) { + fs.writeSync(fdW, chunk); + } else if (options.mask) { + fs.writeSync(fdW, (new Array(chunk.length + 1)).join(options.mask)); + } } - return textChunks; - }; - VirtualRenderer.prototype.removeGhostText = function () { - if (!this.$ghostText) - return; - var position = this.$ghostText.position; - this.removeExtraToken(position.row, position.column); - if (this.$ghostTextWidget) { - this.session.widgetManager.removeLineWidget(this.$ghostTextWidget); - this.$ghostTextWidget = null; + input += chunk; + } + + if (!options.keyIn && atEol || + options.keyIn && input.length >= reqSize) { break; } + } + + if (!isCooked && !silent) { fs.writeSync(fdW, '\n'); } + setRawMode(false); + })(); + + if (options.print && !silent) { + options.print(displaySave + (options.displayOnly ? '' : + (options.hideEchoBack ? (new Array(input.length + 1)).join(options.mask) + : input) + '\n'), // must at least write '\n' + options.encoding); + } + + return options.displayOnly ? '' : + (lastInput = options.keepWhitespace || options.keyIn ? input : input.trim()); +} + +function flattenArray(array, validator) { + var flatArray = []; + function _flattenArray(array) { + if (array == null) { + return; + } else if (Array.isArray(array)) { + array.forEach(_flattenArray); + } else if (!validator || validator(array)) { + flatArray.push(array); + } + } + _flattenArray(array); + return flatArray; +} + +function escapePattern(pattern) { + return pattern.replace(/[\x00-\x7f]/g, // eslint-disable-line no-control-regex + function(s) { return '\\x' + ('00' + s.charCodeAt().toString(16)).substr(-2); }); +} + +// margeOptions(options1, options2 ... ) +// margeOptions(true, options1, options2 ... ) +// arg1=true : Start from defaultOptions and pick elements of that. +function margeOptions() { + var optionsList = Array.prototype.slice.call(arguments), + optionNames, fromDefault; + + if (optionsList.length && typeof optionsList[0] === 'boolean') { + fromDefault = optionsList.shift(); + if (fromDefault) { + optionNames = Object.keys(defaultOptions); + optionsList.unshift(defaultOptions); + } + } + + return optionsList.reduce(function(options, optionsPart) { + if (optionsPart == null) { return options; } + + // ======== DEPRECATED ======== + if (optionsPart.hasOwnProperty('noEchoBack') && + !optionsPart.hasOwnProperty('hideEchoBack')) { + optionsPart.hideEchoBack = optionsPart.noEchoBack; + delete optionsPart.noEchoBack; + } + if (optionsPart.hasOwnProperty('noTrim') && + !optionsPart.hasOwnProperty('keepWhitespace')) { + optionsPart.keepWhitespace = optionsPart.noTrim; + delete optionsPart.noTrim; + } + // ======== /DEPRECATED ======== + + if (!fromDefault) { optionNames = Object.keys(optionsPart); } + optionNames.forEach(function(optionName) { + var value; + if (!optionsPart.hasOwnProperty(optionName)) { return; } + value = optionsPart[optionName]; + switch (optionName) { + // _readlineSync <- * * -> defaultOptions + // ================ string + case 'mask': // * * + case 'limitMessage': // * + case 'defaultInput': // * + case 'encoding': // * * + value = value != null ? value + '' : ''; + if (value && optionName !== 'limitMessage') { value = value.replace(/[\r\n]/g, ''); } + options[optionName] = value; + break; + // ================ number(int) + case 'bufferSize': // * * + if (!isNaN(value = parseInt(value, 10)) && typeof value === 'number') { + options[optionName] = value; // limited updating (number is needed) + } + break; + // ================ boolean + case 'displayOnly': // * + case 'keyIn': // * + case 'hideEchoBack': // * * + case 'caseSensitive': // * * + case 'keepWhitespace': // * * + case 'history': // * + case 'cd': // * + options[optionName] = !!value; + break; + // ================ array + case 'limit': // * * to string for readlineExt + case 'trueValue': // * + case 'falseValue': // * + options[optionName] = flattenArray(value, function(value) { + var type = typeof value; + return type === 'string' || type === 'number' || + type === 'function' || value instanceof RegExp; + }).map(function(value) { + return typeof value === 'string' ? value.replace(/[\r\n]/g, '') : value; + }); + break; + // ================ function + case 'print': // * * + case 'phContent': // * + case 'preCheck': // * + options[optionName] = typeof value === 'function' ? value : void 0; + break; + // ================ other + case 'prompt': // * + case 'display': // * + options[optionName] = value != null ? value : ''; + break; + // no default + } + }); + return options; + }, {}); +} + +function isMatched(res, comps, caseSensitive) { + return comps.some(function(comp) { + var type = typeof comp; + return type === 'string' ? + (caseSensitive ? res === comp : res.toLowerCase() === comp.toLowerCase()) : + type === 'number' ? parseFloat(res) === comp : + type === 'function' ? comp(res) : + comp instanceof RegExp ? comp.test(res) : false; + }); +} + +function replaceHomePath(path, expand) { + var homePath = pathUtil.normalize( + IS_WIN ? (process.env.HOMEDRIVE || '') + (process.env.HOMEPATH || '') : + process.env.HOME || '').replace(/[\/\\]+$/, ''); + path = pathUtil.normalize(path); + return expand ? path.replace(/^~(?=\/|\\|$)/, homePath) : + path.replace(new RegExp('^' + escapePattern(homePath) + + '(?=\\/|\\\\|$)', IS_WIN ? 'i' : ''), '~'); +} + +function replacePlaceholder(text, generator) { + var PTN_INNER = '(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?', + rePlaceholder = new RegExp('(\\$)?(\\$<' + PTN_INNER + '>)', 'g'), + rePlaceholderCompat = new RegExp('(\\$)?(\\$\\{' + PTN_INNER + '\\})', 'g'); + + function getPlaceholderText(s, escape, placeholder, pre, param, post) { + var text; + return escape || typeof (text = generator(param)) !== 'string' ? placeholder : + text ? (pre || '') + text + (post || '') : ''; + } + + return text.replace(rePlaceholder, getPlaceholderText) + .replace(rePlaceholderCompat, getPlaceholderText); +} + +function array2charlist(array, caseSensitive, collectSymbols) { + var values, group = [], groupClass = -1, charCode = 0, symbols = '', suppressed; + function addGroup(groups, group) { + if (group.length > 3) { // ellipsis + groups.push(group[0] + '...' + group[group.length - 1]); + suppressed = true; + } else if (group.length) { + groups = groups.concat(group); + } + return groups; + } + + values = array.reduce( + function(chars, value) { return chars.concat((value + '').split('')); }, []) + .reduce(function(groups, curChar) { + var curGroupClass, curCharCode; + if (!caseSensitive) { curChar = curChar.toLowerCase(); } + curGroupClass = /^\d$/.test(curChar) ? 1 : + /^[A-Z]$/.test(curChar) ? 2 : /^[a-z]$/.test(curChar) ? 3 : 0; + if (collectSymbols && curGroupClass === 0) { + symbols += curChar; + } else { + curCharCode = curChar.charCodeAt(0); + if (curGroupClass && curGroupClass === groupClass && + curCharCode === charCode + 1) { + group.push(curChar); + } else { + groups = addGroup(groups, group); + group = [curChar]; + groupClass = curGroupClass; } - this.$ghostText = null; - }; - VirtualRenderer.prototype.addToken = function (text, type, row, column) { - var session = this.session; - session.bgTokenizer.lines[row] = null; - var newToken = { type: type, value: text }; - var tokens = session.getTokens(row); - if (column == null || !tokens.length) { - tokens.push(newToken); + charCode = curCharCode; + } + return groups; + }, []); + values = addGroup(values, group); // last group + if (symbols) { values.push(symbols); suppressed = true; } + return {values: values, suppressed: suppressed}; +} + +function joinChunks(chunks, suppressed) { + return chunks.join(chunks.length > 2 ? ', ' : suppressed ? ' / ' : '/'); +} + +function getPhContent(param, options) { + var text, values, resCharlist = {}, arg; + if (options.phContent) { + text = options.phContent(param, options); + } + if (typeof text !== 'string') { + switch (param) { + case 'hideEchoBack': + case 'mask': + case 'defaultInput': + case 'caseSensitive': + case 'keepWhitespace': + case 'encoding': + case 'bufferSize': + case 'history': + case 'cd': + text = !options.hasOwnProperty(param) ? '' : + typeof options[param] === 'boolean' ? (options[param] ? 'on' : 'off') : + options[param] + ''; + break; + // case 'prompt': + // case 'query': + // case 'display': + // text = options.hasOwnProperty('displaySrc') ? options.displaySrc + '' : ''; + // break; + case 'limit': + case 'trueValue': + case 'falseValue': + values = options[options.hasOwnProperty(param + 'Src') ? param + 'Src' : param]; + if (options.keyIn) { // suppress + resCharlist = array2charlist(values, options.caseSensitive); + values = resCharlist.values; + } else { + values = values.filter(function(value) { + var type = typeof value; + return type === 'string' || type === 'number'; + }); } - else { - var l = 0; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - l += token.value.length; - if (column <= l) { - var diff = token.value.length - (l - column); - var before = token.value.slice(0, diff); - var after = token.value.slice(diff); - tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after }); - break; - } - } + text = joinChunks(values, resCharlist.suppressed); + break; + case 'limitCount': + case 'limitCountNotZero': + text = options[options.hasOwnProperty('limitSrc') ? + 'limitSrc' : 'limit'].length; + text = text || param !== 'limitCountNotZero' ? text + '' : ''; + break; + case 'lastInput': + text = lastInput; + break; + case 'cwd': + case 'CWD': + case 'cwdHome': + text = process.cwd(); + if (param === 'CWD') { + text = pathUtil.basename(text); + } else if (param === 'cwdHome') { + text = replaceHomePath(text); } - this.updateLines(row, row); - }; - VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) { - var tokens = this.session.getTokens(row); - var l = 0; - var hasPassedCursor = false; - var hiddenTokens = []; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - l += token.value.length; - if (token.type === "ghost_text") - continue; - if (hasPassedCursor) { - hiddenTokens.push({ type: token.type, value: token.value }); - token.type = "hidden_token"; - continue; - } - if (l === column) { - hasPassedCursor = true; - } + break; + case 'date': + case 'time': + case 'localeDate': + case 'localeTime': + text = (new Date())['to' + + param.replace(/^./, function(str) { return str.toUpperCase(); }) + + 'String'](); + break; + default: // with arg + if (typeof (arg = (param.match(/^history_m(\d+)$/) || [])[1]) === 'string') { + text = inputHistory[inputHistory.length - arg] || ''; } - this.updateLines(row, row); - return hiddenTokens; - }; - VirtualRenderer.prototype.removeExtraToken = function (row, column) { - this.session.bgTokenizer.lines[row] = null; - this.updateLines(row, row); - }; - VirtualRenderer.prototype.setTheme = function (theme, cb) { - var _self = this; - this.$themeId = theme; - _self._dispatchEvent('themeChange', { theme: theme }); - if (!theme || typeof theme == "string") { - var moduleName = theme || this.$options.theme.initialValue; - config.loadModule(["theme", moduleName], afterLoad); + } + } + return text; +} + +function getPhCharlist(param) { + var matches = /^(.)-(.)$/.exec(param), text = '', from, to, code, step; + if (!matches) { return null; } + from = matches[1].charCodeAt(0); + to = matches[2].charCodeAt(0); + step = from < to ? 1 : -1; + for (code = from; code !== to + step; code += step) { text += String.fromCharCode(code); } + return text; +} + +// cmd "arg" " a r g " "" 'a"r"g' "a""rg" "arg +function parseCl(cl) { + var reToken = new RegExp(/(\s*)(?:("|')(.*?)(?:\2|$)|(\S+))/g), matches, + taken = '', args = [], part; + cl = cl.trim(); + while ((matches = reToken.exec(cl))) { + part = matches[3] || matches[4] || ''; + if (matches[1]) { + args.push(taken); + taken = ''; + } + taken += part; + } + if (taken) { args.push(taken); } + return args; +} + +function toBool(res, options) { + return ( + (options.trueValue.length && + isMatched(res, options.trueValue, options.caseSensitive)) ? true : + (options.falseValue.length && + isMatched(res, options.falseValue, options.caseSensitive)) ? false : res); +} + +function getValidLine(options) { + var res, forceNext, limitMessage, + matches, histInput, args, resCheck; + + function _getPhContent(param) { return getPhContent(param, options); } + function addDisplay(text) { options.display += (/[^\r\n]$/.test(options.display) ? '\n' : '') + text; } + + options.limitSrc = options.limit; + options.displaySrc = options.display; + options.limit = ''; // for readlineExt + options.display = replacePlaceholder(options.display + '', _getPhContent); + + while (true) { + res = _readlineSync(options); + forceNext = false; + limitMessage = ''; + + if (options.defaultInput && !res) { res = options.defaultInput; } + + if (options.history) { + if ((matches = /^\s*\!(?:\!|-1)(:p)?\s*$/.exec(res))) { // `!!` `!-1` +`:p` + histInput = inputHistory[0] || ''; + if (matches[1]) { // only display + forceNext = true; + } else { // replace input + res = histInput; } - else { - afterLoad(theme); + // Show it even if it is empty (NL only). + addDisplay(histInput + '\n'); + if (!forceNext) { // Loop may break + options.displayOnly = true; + _readlineSync(options); + options.displayOnly = false; } - function afterLoad(module) { - if (_self.$themeId != theme) - return cb && cb(); - if (!module || !module.cssClass) - throw new Error("couldn't load module " + theme + " or it didn't call define"); - if (module.$id) - _self.$themeId = module.$id; - dom.importCssString(module.cssText, module.cssClass, _self.container); - if (_self.theme) - dom.removeCssClass(_self.container, _self.theme.cssClass); - var padding = "padding" in module ? module.padding - : "padding" in (_self.theme || {}) ? 4 : _self.$padding; - if (_self.$padding && padding != _self.$padding) - _self.setPadding(padding); - _self.$theme = module.cssClass; - _self.theme = module; - dom.addCssClass(_self.container, module.cssClass); - dom.setCssClass(_self.container, "ace_dark", module.isDark); - if (_self.$size) { - _self.$size.width = 0; - _self.$updateSizeAsync(); + } else if (res && res !== inputHistory[inputHistory.length - 1]) { + inputHistory = [res]; + } + } + + if (!forceNext && options.cd && res) { + args = parseCl(res); + switch (args[0].toLowerCase()) { + case 'cd': + if (args[1]) { + try { + process.chdir(replaceHomePath(args[1], true)); + } catch (e) { + addDisplay(e + ''); } - _self._dispatchEvent('themeLoaded', { theme: module }); - cb && cb(); - if (useragent.isSafari && _self.scroller) { - _self.scroller.style.background = "red"; - _self.scroller.style.background = ""; + } + forceNext = true; + break; + case 'pwd': + addDisplay(process.cwd()); + forceNext = true; + break; + // no default + } + } + + if (!forceNext && options.preCheck) { + resCheck = options.preCheck(res, options); + res = resCheck.res; + if (resCheck.forceNext) { forceNext = true; } // Don't switch to false. + } + + if (!forceNext) { + if (!options.limitSrc.length || + isMatched(res, options.limitSrc, options.caseSensitive)) { break; } + if (options.limitMessage) { + limitMessage = replacePlaceholder(options.limitMessage, _getPhContent); + } + } + + addDisplay((limitMessage ? limitMessage + '\n' : '') + + replacePlaceholder(options.displaySrc + '', _getPhContent)); + } + return toBool(res, options); +} + +// for dev +exports._DBG_set_useExt = function(val) { _DBG_useExt = val; }; +exports._DBG_set_checkOptions = function(val) { _DBG_checkOptions = val; }; +exports._DBG_set_checkMethod = function(val) { _DBG_checkMethod = val; }; +exports._DBG_clearHistory = function() { lastInput = ''; inputHistory = []; }; + +// ------------------------------------ + +exports.setDefaultOptions = function(options) { + defaultOptions = margeOptions(true, options); + return margeOptions(true); // copy +}; + +exports.question = function(query, options) { + /* eslint-disable key-spacing */ + return getValidLine(margeOptions(margeOptions(true, options), { + display: query + })); + /* eslint-enable key-spacing */ +}; + +exports.prompt = function(options) { + var readOptions = margeOptions(true, options); + readOptions.display = readOptions.prompt; + return getValidLine(readOptions); +}; + +exports.keyIn = function(query, options) { + /* eslint-disable key-spacing */ + var readOptions = margeOptions(margeOptions(true, options), { + display: query, + keyIn: true, + keepWhitespace: true + }); + /* eslint-enable key-spacing */ + + // char list + readOptions.limitSrc = readOptions.limit.filter(function(value) { + var type = typeof value; + return type === 'string' || type === 'number'; + }) + .map(function(text) { return replacePlaceholder(text + '', getPhCharlist); }); + // pattern + readOptions.limit = escapePattern(readOptions.limitSrc.join('')); + + ['trueValue', 'falseValue'].forEach(function(optionName) { + readOptions[optionName] = readOptions[optionName].reduce(function(comps, comp) { + var type = typeof comp; + if (type === 'string' || type === 'number') { + comps = comps.concat((comp + '').split('')); + } else { comps.push(comp); } + return comps; + }, []); + }); + + readOptions.display = replacePlaceholder(readOptions.display + '', + function(param) { return getPhContent(param, readOptions); }); + + return toBool(_readlineSync(readOptions), readOptions); +}; + +// ------------------------------------ + +exports.questionEMail = function(query, options) { + if (query == null) { query = 'Input e-mail address: '; } + /* eslint-disable key-spacing */ + return exports.question(query, margeOptions({ + // -------- default + hideEchoBack: false, + // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address + limit: /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, + limitMessage: 'Input valid e-mail address, please.', + trueValue: null, + falseValue: null + }, options, { + // -------- forced + keepWhitespace: false, + cd: false + })); + /* eslint-enable key-spacing */ +}; + +exports.questionNewPassword = function(query, options) { + /* eslint-disable key-spacing */ + var resCharlist, min, max, + readOptions = margeOptions({ + // -------- default + hideEchoBack: true, + mask: '*', + limitMessage: 'It can include: $\n' + + 'And the length must be: $', + trueValue: null, + falseValue: null, + caseSensitive: true + }, options, { + // -------- forced + history: false, + cd: false, + // limit (by charlist etc.), + phContent: function(param) { + return param === 'charlist' ? resCharlist.text : + param === 'length' ? min + '...' + max : null; + } + }), + // added: charlist, min, max, confirmMessage, unmatchMessage + charlist, confirmMessage, unmatchMessage, + limit, limitMessage, res1, res2; + /* eslint-enable key-spacing */ + options = options || {}; + + charlist = replacePlaceholder( + options.charlist ? options.charlist + '' : '$', getPhCharlist); + if (isNaN(min = parseInt(options.min, 10)) || typeof min !== 'number') { min = 12; } + if (isNaN(max = parseInt(options.max, 10)) || typeof max !== 'number') { max = 24; } + limit = new RegExp('^[' + escapePattern(charlist) + + ']{' + min + ',' + max + '}$'); + resCharlist = array2charlist([charlist], readOptions.caseSensitive, true); + resCharlist.text = joinChunks(resCharlist.values, resCharlist.suppressed); + + confirmMessage = options.confirmMessage != null ? options.confirmMessage : + 'Reinput a same one to confirm it: '; + unmatchMessage = options.unmatchMessage != null ? options.unmatchMessage : + 'It differs from first one.' + + ' Hit only the Enter key if you want to retry from first one.'; + + if (query == null) { query = 'Input new password: '; } + + limitMessage = readOptions.limitMessage; + while (!res2) { + readOptions.limit = limit; + readOptions.limitMessage = limitMessage; + res1 = exports.question(query, readOptions); + + readOptions.limit = [res1, '']; + readOptions.limitMessage = unmatchMessage; + res2 = exports.question(confirmMessage, readOptions); + } + + return res1; +}; + +function _questionNum(query, options, parser) { + var validValue; + function getValidValue(value) { + validValue = parser(value); + return !isNaN(validValue) && typeof validValue === 'number'; + } + /* eslint-disable key-spacing */ + exports.question(query, margeOptions({ + // -------- default + limitMessage: 'Input valid number, please.' + }, options, { + // -------- forced + limit: getValidValue, + cd: false + // trueValue, falseValue, caseSensitive, keepWhitespace don't work. + })); + /* eslint-enable key-spacing */ + return validValue; +} +exports.questionInt = function(query, options) { + return _questionNum(query, options, function(value) { return parseInt(value, 10); }); +}; +exports.questionFloat = function(query, options) { + return _questionNum(query, options, parseFloat); +}; + +exports.questionPath = function(query, options) { + /* eslint-disable key-spacing */ + var validPath, error = '', + readOptions = margeOptions({ + // -------- default + hideEchoBack: false, + limitMessage: '$Input valid path, please.' + + '$<( Min:)min>$<( Max:)max>', + history: true, + cd: true + }, options, { + // -------- forced + keepWhitespace: false, + limit: function(value) { + var exists, stat, res; + value = replaceHomePath(value, true); + error = ''; // for validate + // mkdir -p + function mkdirParents(dirPath) { + dirPath.split(/\/|\\/).reduce(function(parents, dir) { + var path = pathUtil.resolve((parents += dir + pathUtil.sep)); + if (!fs.existsSync(path)) { + fs.mkdirSync(path); + } else if (!fs.statSync(path).isDirectory()) { + throw new Error('Non directory already exists: ' + path); } + return parents; + }, ''); } - }; - VirtualRenderer.prototype.getTheme = function () { - return this.$themeId; - }; - VirtualRenderer.prototype.setStyle = function (style, include) { - dom.setCssClass(this.container, style, include !== false); - }; - VirtualRenderer.prototype.unsetStyle = function (style) { - dom.removeCssClass(this.container, style); - }; - VirtualRenderer.prototype.setCursorStyle = function (style) { - dom.setStyle(this.scroller.style, "cursor", style); - }; - VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) { - dom.setStyle(this.scroller.style, "cursor", cursorStyle); - }; - VirtualRenderer.prototype.attachToShadowRoot = function () { - dom.importCssString(editorCss, "ace_editor.css", this.container); - }; - VirtualRenderer.prototype.destroy = function () { - this.freeze(); - this.$fontMetrics.destroy(); - this.$cursorLayer.destroy(); - this.removeAllListeners(); - this.container.textContent = ""; - this.setOption("useResizeObserver", false); - }; - VirtualRenderer.prototype.$updateCustomScrollbar = function (val) { - var _self = this; - this.$horizScroll = this.$vScroll = null; - this.scrollBarV.element.remove(); - this.scrollBarH.element.remove(); - if (val === true) { - this.scrollBarV = new VScrollBarCustom(this.container, this); - this.scrollBarH = new HScrollBarCustom(this.container, this); - this.scrollBarV.setHeight(this.$size.scrollerHeight); - this.scrollBarH.setWidth(this.$size.scrollerWidth); - this.scrollBarV.addEventListener("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollTop(e.data - _self.scrollMargin.top); - }); - this.scrollBarH.addEventListener("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollLeft(e.data - _self.scrollMargin.left); - }); - if (!this.$scrollDecorator) { - this.$scrollDecorator = new Decorator(this.scrollBarV, this); - this.$scrollDecorator.$updateDecorators(); + + try { + exists = fs.existsSync(value); + validPath = exists ? fs.realpathSync(value) : pathUtil.resolve(value); + // options.exists default: true, not-bool: no-check + if (!options.hasOwnProperty('exists') && !exists || + typeof options.exists === 'boolean' && options.exists !== exists) { + error = (exists ? 'Already exists' : 'No such file or directory') + + ': ' + validPath; + return false; + } + if (!exists && options.create) { + if (options.isDirectory) { + mkdirParents(validPath); + } else { + mkdirParents(pathUtil.dirname(validPath)); + fs.closeSync(fs.openSync(validPath, 'w')); // touch } - else { - this.$scrollDecorator.setScrollBarV(this.scrollBarV); - this.$scrollDecorator.$updateDecorators(); + validPath = fs.realpathSync(validPath); + } + if (exists && (options.min || options.max || + options.isFile || options.isDirectory)) { + stat = fs.statSync(validPath); + // type check first (directory has zero size) + if (options.isFile && !stat.isFile()) { + error = 'Not file: ' + validPath; + return false; + } else if (options.isDirectory && !stat.isDirectory()) { + error = 'Not directory: ' + validPath; + return false; + } else if (options.min && stat.size < +options.min || + options.max && stat.size > +options.max) { + error = 'Size ' + stat.size + ' is out of range: ' + validPath; + return false; } + } + if (typeof options.validate === 'function' && + (res = options.validate(validPath)) !== true) { + if (typeof res === 'string') { error = res; } + return false; + } + } catch (e) { + error = e + ''; + return false; } - else { - this.scrollBarV = new VScrollBar(this.container, this); - this.scrollBarH = new HScrollBar(this.container, this); - this.scrollBarV.addEventListener("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollTop(e.data - _self.scrollMargin.top); - }); - this.scrollBarH.addEventListener("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollLeft(e.data - _self.scrollMargin.left); - }); - } + return true; + }, + // trueValue, falseValue, caseSensitive don't work. + phContent: function(param) { + return param === 'error' ? error : + param !== 'min' && param !== 'max' ? null : + options.hasOwnProperty(param) ? options[param] + '' : ''; + } + }); + // added: exists, create, min, max, isFile, isDirectory, validate + /* eslint-enable key-spacing */ + options = options || {}; + + if (query == null) { query = 'Input path (you can "cd" and "pwd"): '; } + + exports.question(query, readOptions); + return validPath; +}; + +// props: preCheck, args, hRes, limit +function getClHandler(commandHandler, options) { + var clHandler = {}, hIndex = {}; + if (typeof commandHandler === 'object') { + Object.keys(commandHandler).forEach(function(cmd) { + if (typeof commandHandler[cmd] === 'function') { + hIndex[options.caseSensitive ? cmd : cmd.toLowerCase()] = commandHandler[cmd]; + } + }); + clHandler.preCheck = function(res) { + var cmdKey; + clHandler.args = parseCl(res); + cmdKey = clHandler.args[0] || ''; + if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); } + clHandler.hRes = + cmdKey !== '_' && hIndex.hasOwnProperty(cmdKey) ? + hIndex[cmdKey].apply(res, clHandler.args.slice(1)) : + hIndex.hasOwnProperty('_') ? hIndex._.apply(res, clHandler.args) : null; + return {res: res, forceNext: false}; }; - VirtualRenderer.prototype.$addResizeObserver = function () { - if (!window.ResizeObserver || this.$resizeObserver) - return; - var self = this; - this.$resizeTimer = lang.delayedCall(function () { - if (!self.destroyed) - self.onResize(); - }, 50); - this.$resizeObserver = new window.ResizeObserver(function (e) { - var w = e[0].contentRect.width; - var h = e[0].contentRect.height; - if (Math.abs(self.$size.width - w) > 1 - || Math.abs(self.$size.height - h) > 1) { - self.$resizeTimer.delay(); - } - else { - self.$resizeTimer.cancel(); - } - }); - this.$resizeObserver.observe(this.container); + if (!hIndex.hasOwnProperty('_')) { + clHandler.limit = function() { // It's called after preCheck. + var cmdKey = clHandler.args[0] || ''; + if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); } + return hIndex.hasOwnProperty(cmdKey); + }; + } + } else { + clHandler.preCheck = function(res) { + clHandler.args = parseCl(res); + clHandler.hRes = typeof commandHandler === 'function' ? + commandHandler.apply(res, clHandler.args) : true; // true for break loop + return {res: res, forceNext: false}; }; - return VirtualRenderer; -}()); -VirtualRenderer.prototype.CHANGE_CURSOR = 1; -VirtualRenderer.prototype.CHANGE_MARKER = 2; -VirtualRenderer.prototype.CHANGE_GUTTER = 4; -VirtualRenderer.prototype.CHANGE_SCROLL = 8; -VirtualRenderer.prototype.CHANGE_LINES = 16; -VirtualRenderer.prototype.CHANGE_TEXT = 32; -VirtualRenderer.prototype.CHANGE_SIZE = 64; -VirtualRenderer.prototype.CHANGE_MARKER_BACK = 128; -VirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256; -VirtualRenderer.prototype.CHANGE_FULL = 512; -VirtualRenderer.prototype.CHANGE_H_SCROLL = 1024; -VirtualRenderer.prototype.$changes = 0; -VirtualRenderer.prototype.$padding = null; -VirtualRenderer.prototype.$frozen = false; -VirtualRenderer.prototype.STEPS = 8; -oop.implement(VirtualRenderer.prototype, EventEmitter); -config.defineOptions(VirtualRenderer.prototype, "renderer", { - useResizeObserver: { - set: function (value) { - if (!value && this.$resizeObserver) { - this.$resizeObserver.disconnect(); - this.$resizeTimer.cancel(); - this.$resizeTimer = this.$resizeObserver = null; - } - else if (value && !this.$resizeObserver) { - this.$addResizeObserver(); - } - } - }, - animatedScroll: { initialValue: false }, - showInvisibles: { - set: function (value) { - if (this.$textLayer.setShowInvisibles(value)) - this.$loop.schedule(this.CHANGE_TEXT); - }, - initialValue: false - }, - showPrintMargin: { - set: function () { this.$updatePrintMargin(); }, - initialValue: true - }, - printMarginColumn: { - set: function () { this.$updatePrintMargin(); }, - initialValue: 80 - }, - printMargin: { - set: function (val) { - if (typeof val == "number") - this.$printMarginColumn = val; - this.$showPrintMargin = !!val; - this.$updatePrintMargin(); - }, - get: function () { - return this.$showPrintMargin && this.$printMarginColumn; - } - }, - showGutter: { - set: function (show) { - this.$gutter.style.display = show ? "block" : "none"; - this.$loop.schedule(this.CHANGE_FULL); - this.onGutterResize(); - }, - initialValue: true - }, - useSvgGutterIcons: { - set: function (value) { - this.$gutterLayer.$useSvgGutterIcons = value; - }, - initialValue: false - }, - showFoldedAnnotations: { - set: function (value) { - this.$gutterLayer.$showFoldedAnnotations = value; - }, - initialValue: false - }, - fadeFoldWidgets: { - set: function (show) { - dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); - }, - initialValue: false - }, - showFoldWidgets: { - set: function (show) { - this.$gutterLayer.setShowFoldWidgets(show); - this.$loop.schedule(this.CHANGE_GUTTER); - }, - initialValue: true - }, - displayIndentGuides: { - set: function (show) { - if (this.$textLayer.setDisplayIndentGuides(show)) - this.$loop.schedule(this.CHANGE_TEXT); - }, - initialValue: true - }, - highlightIndentGuides: { - set: function (show) { - if (this.$textLayer.setHighlightIndentGuides(show) == true) { - this.$textLayer.$highlightIndentGuide(); - } - else { - this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells); - } - }, - initialValue: true - }, - highlightGutterLine: { - set: function (shouldHighlight) { - this.$gutterLayer.setHighlightGutterLine(shouldHighlight); - this.$loop.schedule(this.CHANGE_GUTTER); - }, - initialValue: true - }, - hScrollBarAlwaysVisible: { - set: function (val) { - if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) - this.$loop.schedule(this.CHANGE_SCROLL); - }, - initialValue: false - }, - vScrollBarAlwaysVisible: { - set: function (val) { - if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) - this.$loop.schedule(this.CHANGE_SCROLL); - }, - initialValue: false - }, - fontSize: { - set: function (size) { - if (typeof size == "number") - size = size + "px"; - this.container.style.fontSize = size; - this.updateFontSize(); - }, - initialValue: 12 - }, - fontFamily: { - set: function (name) { - this.container.style.fontFamily = name; - this.updateFontSize(); - } - }, - maxLines: { - set: function (val) { - this.updateFull(); - } - }, - minLines: { - set: function (val) { - if (!(this.$minLines < 0x1ffffffffffff)) - this.$minLines = 0; - this.updateFull(); - } - }, - maxPixelHeight: { - set: function (val) { - this.updateFull(); - }, - initialValue: 0 - }, - scrollPastEnd: { - set: function (val) { - val = +val || 0; - if (this.$scrollPastEnd == val) - return; - this.$scrollPastEnd = val; - this.$loop.schedule(this.CHANGE_SCROLL); - }, - initialValue: 0, - handlesSet: true - }, - fixedWidthGutter: { - set: function (val) { - this.$gutterLayer.$fixedWidth = !!val; - this.$loop.schedule(this.CHANGE_GUTTER); - } - }, - customScrollbar: { - set: function (val) { - this.$updateCustomScrollbar(val); - }, - initialValue: false - }, - theme: { - set: function (val) { this.setTheme(val); }, - get: function () { return this.$themeId || this.theme; }, - initialValue: "./theme/textmate", - handlesSet: true - }, - hasCssTransforms: {}, - useTextareaForIME: { - initialValue: !useragent.isMobile && !useragent.isIE + } + return clHandler; +} + +exports.promptCL = function(commandHandler, options) { + /* eslint-disable key-spacing */ + var readOptions = margeOptions({ + // -------- default + hideEchoBack: false, + limitMessage: 'Requested command is not available.', + caseSensitive: false, + history: true + }, options), + // -------- forced + // trueValue, falseValue, keepWhitespace don't work. + // preCheck, limit (by clHandler) + clHandler = getClHandler(commandHandler, readOptions); + /* eslint-enable key-spacing */ + readOptions.limit = clHandler.limit; + readOptions.preCheck = clHandler.preCheck; + exports.prompt(readOptions); + return clHandler.args; +}; + +exports.promptLoop = function(inputHandler, options) { + /* eslint-disable key-spacing */ + var readOptions = margeOptions({ + // -------- default + hideEchoBack: false, + trueValue: null, + falseValue: null, + caseSensitive: false, + history: true + }, options); + /* eslint-enable key-spacing */ + while (true) { if (inputHandler(exports.prompt(readOptions))) { break; } } + return; +}; + +exports.promptCLLoop = function(commandHandler, options) { + /* eslint-disable key-spacing */ + var readOptions = margeOptions({ + // -------- default + hideEchoBack: false, + limitMessage: 'Requested command is not available.', + caseSensitive: false, + history: true + }, options), + // -------- forced + // trueValue, falseValue, keepWhitespace don't work. + // preCheck, limit (by clHandler) + clHandler = getClHandler(commandHandler, readOptions); + /* eslint-enable key-spacing */ + readOptions.limit = clHandler.limit; + readOptions.preCheck = clHandler.preCheck; + while (true) { + exports.prompt(readOptions); + if (clHandler.hRes) { break; } + } + return; +}; + +exports.promptSimShell = function(options) { + /* eslint-disable key-spacing */ + return exports.prompt(margeOptions({ + // -------- default + hideEchoBack: false, + history: true + }, options, { + // -------- forced + prompt: (function() { + return IS_WIN ? + '$>' : + // 'user@host:cwd$ ' + (process.env.USER || '') + + (process.env.HOSTNAME ? + '@' + process.env.HOSTNAME.replace(/\..*$/, '') : '') + + ':$$ '; + })() + })); + /* eslint-enable key-spacing */ +}; + +function _keyInYN(query, options, limit) { + var res; + if (query == null) { query = 'Are you sure? '; } + if ((!options || options.guide !== false) && (query += '')) { + query = query.replace(/\s*:?\s*$/, '') + ' [y/n]: '; + } + /* eslint-disable key-spacing */ + res = exports.keyIn(query, margeOptions(options, { + // -------- forced + hideEchoBack: false, + limit: limit, + trueValue: 'y', + falseValue: 'n', + caseSensitive: false + // mask doesn't work. + })); + // added: guide + /* eslint-enable key-spacing */ + return typeof res === 'boolean' ? res : ''; +} +exports.keyInYN = function(query, options) { return _keyInYN(query, options); }; +exports.keyInYNStrict = function(query, options) { return _keyInYN(query, options, 'yn'); }; + +exports.keyInPause = function(query, options) { + if (query == null) { query = 'Continue...'; } + if ((!options || options.guide !== false) && (query += '')) { + query = query.replace(/\s+$/, '') + ' (Hit any key)'; + } + /* eslint-disable key-spacing */ + exports.keyIn(query, margeOptions({ + // -------- default + limit: null + }, options, { + // -------- forced + hideEchoBack: true, + mask: '' + })); + // added: guide + /* eslint-enable key-spacing */ + return; +}; + +exports.keyInSelect = function(items, query, options) { + /* eslint-disable key-spacing */ + var readOptions = margeOptions({ + // -------- default + hideEchoBack: false + }, options, { + // -------- forced + trueValue: null, + falseValue: null, + caseSensitive: false, + // limit (by items), + phContent: function(param) { + return param === 'itemsCount' ? items.length + '' : + param === 'firstItem' ? (items[0] + '').trim() : + param === 'lastItem' ? (items[items.length - 1] + '').trim() : null; + } + }), + // added: guide, cancel + keylist = '', key2i = {}, charCode = 49 /* '1' */, display = '\n'; + /* eslint-enable key-spacing */ + if (!Array.isArray(items) || !items.length || items.length > 35) { + throw '`items` must be Array (max length: 35).'; + } + + items.forEach(function(item, i) { + var key = String.fromCharCode(charCode); + keylist += key; + key2i[key] = i; + display += '[' + key + '] ' + (item + '').trim() + '\n'; + charCode = charCode === 57 /* '9' */ ? 97 /* 'a' */ : charCode + 1; + }); + if (!options || options.cancel !== false) { + keylist += '0'; + key2i['0'] = -1; + display += '[0] ' + + (options && options.cancel != null && typeof options.cancel !== 'boolean' ? + (options.cancel + '').trim() : 'CANCEL') + '\n'; + } + readOptions.limit = keylist; + display += '\n'; + + if (query == null) { query = 'Choose one from list: '; } + if ((query += '')) { + if (!options || options.guide !== false) { + query = query.replace(/\s*:?\s*$/, '') + ' [$]: '; + } + display += query; + } + + return key2i[exports.keyIn(display, readOptions).toLowerCase()]; +}; + +exports.getRawInput = function() { return rawInput; }; + +// ======== DEPRECATED ======== +function _setOption(optionName, args) { + var options; + if (args.length) { options = {}; options[optionName] = args[0]; } + return exports.setDefaultOptions(options)[optionName]; +} +exports.setPrint = function() { return _setOption('print', arguments); }; +exports.setPrompt = function() { return _setOption('prompt', arguments); }; +exports.setEncoding = function() { return _setOption('encoding', arguments); }; +exports.setMask = function() { return _setOption('mask', arguments); }; +exports.setBufferSize = function() { return _setOption('bufferSize', arguments); }; + + +/***/ }), + +/***/ "../../node_modules/ripemd160/index.js": +/*!*********************************************!*\ + !*** ../../node_modules/ripemd160/index.js ***! + \*********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer) +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var HashBase = __webpack_require__(/*! hash-base */ "../../node_modules/hash-base/index.js") + +var ARRAY16 = new Array(16) + +var zl = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +] + +var zr = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +] + +var sl = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +] + +var sr = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +] + +var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e] +var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000] + +function RIPEMD160 () { + HashBase.call(this, 64) + + // state + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 +} + +inherits(RIPEMD160, HashBase) + +RIPEMD160.prototype._update = function () { + var words = ARRAY16 + for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4) + + var al = this._a | 0 + var bl = this._b | 0 + var cl = this._c | 0 + var dl = this._d | 0 + var el = this._e | 0 + + var ar = this._a | 0 + var br = this._b | 0 + var cr = this._c | 0 + var dr = this._d | 0 + var er = this._e | 0 + + // computation + for (var i = 0; i < 80; i += 1) { + var tl + var tr + if (i < 16) { + tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]) + tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]) + } else if (i < 32) { + tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]) + tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]) + } else if (i < 48) { + tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]) + tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]) + } else if (i < 64) { + tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]) + tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]) + } else { // if (i<80) { + tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]) + tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]) + } + + al = el + el = dl + dl = rotl(cl, 10) + cl = bl + bl = tl + + ar = er + er = dr + dr = rotl(cr, 10) + cr = br + br = tr + } + + // update state + var t = (this._b + cl + dr) | 0 + this._b = (this._c + dl + er) | 0 + this._c = (this._d + el + ar) | 0 + this._d = (this._e + al + br) | 0 + this._e = (this._a + bl + cr) | 0 + this._a = t +} + +RIPEMD160.prototype._digest = function () { + // create padding and handle blocks + this._block[this._blockOffset++] = 0x80 + if (this._blockOffset > 56) { + this._block.fill(0, this._blockOffset, 64) + this._update() + this._blockOffset = 0 + } + + this._block.fill(0, this._blockOffset, 56) + this._block.writeUInt32LE(this._length[0], 56) + this._block.writeUInt32LE(this._length[1], 60) + this._update() + + // produce result + var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20) + buffer.writeInt32LE(this._a, 0) + buffer.writeInt32LE(this._b, 4) + buffer.writeInt32LE(this._c, 8) + buffer.writeInt32LE(this._d, 12) + buffer.writeInt32LE(this._e, 16) + return buffer +} + +function rotl (x, n) { + return (x << n) | (x >>> (32 - n)) +} + +function fn1 (a, b, c, d, e, m, k, s) { + return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0 +} + +function fn2 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0 +} + +function fn3 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0 +} + +function fn4 (a, b, c, d, e, m, k, s) { + return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0 +} + +function fn5 (a, b, c, d, e, m, k, s) { + return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0 +} + +module.exports = RIPEMD160 + + +/***/ }), + +/***/ "../../node_modules/safe-buffer/index.js": +/*!***********************************************!*\ + !*** ../../node_modules/safe-buffer/index.js ***! + \***********************************************/ +/***/ ((module, exports, __webpack_require__) => { + +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js") +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.prototype = Object.create(Buffer.prototype) + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + + +/***/ }), + +/***/ "../../node_modules/sha.js/hash.js": +/*!*****************************************!*\ + !*** ../../node_modules/sha.js/hash.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +// prototype class for hash functions +function Hash (blockSize, finalSize) { + this._block = Buffer.alloc(blockSize) + this._finalSize = finalSize + this._blockSize = blockSize + this._len = 0 +} + +Hash.prototype.update = function (data, enc) { + if (typeof data === 'string') { + enc = enc || 'utf8' + data = Buffer.from(data, enc) + } + + var block = this._block + var blockSize = this._blockSize + var length = data.length + var accum = this._len + + for (var offset = 0; offset < length;) { + var assigned = accum % blockSize + var remainder = Math.min(length - offset, blockSize - assigned) + + for (var i = 0; i < remainder; i++) { + block[assigned + i] = data[offset + i] + } + + accum += remainder + offset += remainder + + if ((accum % blockSize) === 0) { + this._update(block) + } + } + + this._len += length + return this +} + +Hash.prototype.digest = function (enc) { + var rem = this._len % this._blockSize + + this._block[rem] = 0x80 + + // zero (rem + 1) trailing bits, where (rem + 1) is the smallest + // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize + this._block.fill(0, rem + 1) + + if (rem >= this._finalSize) { + this._update(this._block) + this._block.fill(0) + } + + var bits = this._len * 8 + + // uint32 + if (bits <= 0xffffffff) { + this._block.writeUInt32BE(bits, this._blockSize - 4) + + // uint64 + } else { + var lowBits = (bits & 0xffffffff) >>> 0 + var highBits = (bits - lowBits) / 0x100000000 + + this._block.writeUInt32BE(highBits, this._blockSize - 8) + this._block.writeUInt32BE(lowBits, this._blockSize - 4) + } + + this._update(this._block) + var hash = this._hash() + + return enc ? hash.toString(enc) : hash +} + +Hash.prototype._update = function () { + throw new Error('_update must be implemented by subclass') +} + +module.exports = Hash + + +/***/ }), + +/***/ "../../node_modules/sha.js/index.js": +/*!******************************************!*\ + !*** ../../node_modules/sha.js/index.js ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var exports = module.exports = function SHA (algorithm) { + algorithm = algorithm.toLowerCase() + + var Algorithm = exports[algorithm] + if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') + + return new Algorithm() +} + +exports.sha = __webpack_require__(/*! ./sha */ "../../node_modules/sha.js/sha.js") +exports.sha1 = __webpack_require__(/*! ./sha1 */ "../../node_modules/sha.js/sha1.js") +exports.sha224 = __webpack_require__(/*! ./sha224 */ "../../node_modules/sha.js/sha224.js") +exports.sha256 = __webpack_require__(/*! ./sha256 */ "../../node_modules/sha.js/sha256.js") +exports.sha384 = __webpack_require__(/*! ./sha384 */ "../../node_modules/sha.js/sha384.js") +exports.sha512 = __webpack_require__(/*! ./sha512 */ "../../node_modules/sha.js/sha512.js") + + +/***/ }), + +/***/ "../../node_modules/sha.js/sha.js": +/*!****************************************!*\ + !*** ../../node_modules/sha.js/sha.js ***! + \****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined + * in FIPS PUB 180-1 + * This source code is derived from sha1.js of the same repository. + * The difference between SHA-0 and SHA-1 is just a bitwise rotate left + * operation was added. + */ + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +] + +var W = new Array(80) + +function Sha () { + this.init() + this._w = W + + Hash.call(this, 64, 56) +} + +inherits(Sha, Hash) + +Sha.prototype.init = function () { + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 + + return this +} + +function rotl5 (num) { + return (num << 5) | (num >>> 27) +} + +function rotl30 (num) { + return (num << 30) | (num >>> 2) +} + +function ft (s, b, c, d) { + if (s === 0) return (b & c) | ((~b) & d) + if (s === 2) return (b & c) | (b & d) | (c & d) + return b ^ c ^ d +} + +Sha.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16] + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20) + var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 + + e = d + d = c + c = rotl30(b) + b = a + a = t + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 +} + +Sha.prototype._hash = function () { + var H = Buffer.allocUnsafe(20) + + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H +} + +module.exports = Sha + + +/***/ }), + +/***/ "../../node_modules/sha.js/sha1.js": +/*!*****************************************!*\ + !*** ../../node_modules/sha.js/sha1.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. + */ + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var K = [ + 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 +] + +var W = new Array(80) + +function Sha1 () { + this.init() + this._w = W + + Hash.call(this, 64, 56) +} + +inherits(Sha1, Hash) + +Sha1.prototype.init = function () { + this._a = 0x67452301 + this._b = 0xefcdab89 + this._c = 0x98badcfe + this._d = 0x10325476 + this._e = 0xc3d2e1f0 + + return this +} + +function rotl1 (num) { + return (num << 1) | (num >>> 31) +} + +function rotl5 (num) { + return (num << 5) | (num >>> 27) +} + +function rotl30 (num) { + return (num << 30) | (num >>> 2) +} + +function ft (s, b, c, d) { + if (s === 0) return (b & c) | ((~b) & d) + if (s === 2) return (b & c) | (b & d) | (c & d) + return b ^ c ^ d +} + +Sha1.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) + + for (var j = 0; j < 80; ++j) { + var s = ~~(j / 20) + var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 + + e = d + d = c + c = rotl30(b) + b = a + a = t + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 +} + +Sha1.prototype._hash = function () { + var H = Buffer.allocUnsafe(20) + + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H +} + +module.exports = Sha1 + + +/***/ }), + +/***/ "../../node_modules/sha.js/sha224.js": +/*!*******************************************!*\ + !*** ../../node_modules/sha.js/sha224.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var Sha256 = __webpack_require__(/*! ./sha256 */ "../../node_modules/sha.js/sha256.js") +var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var W = new Array(64) + +function Sha224 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) +} + +inherits(Sha224, Sha256) + +Sha224.prototype.init = function () { + this._a = 0xc1059ed8 + this._b = 0x367cd507 + this._c = 0x3070dd17 + this._d = 0xf70e5939 + this._e = 0xffc00b31 + this._f = 0x68581511 + this._g = 0x64f98fa7 + this._h = 0xbefa4fa4 + + return this +} + +Sha224.prototype._hash = function () { + var H = Buffer.allocUnsafe(28) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + + return H +} + +module.exports = Sha224 + + +/***/ }), + +/***/ "../../node_modules/sha.js/sha256.js": +/*!*******************************************!*\ + !*** ../../node_modules/sha.js/sha256.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/** + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * + */ + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var K = [ + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +] + +var W = new Array(64) + +function Sha256 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) +} + +inherits(Sha256, Hash) + +Sha256.prototype.init = function () { + this._a = 0x6a09e667 + this._b = 0xbb67ae85 + this._c = 0x3c6ef372 + this._d = 0xa54ff53a + this._e = 0x510e527f + this._f = 0x9b05688c + this._g = 0x1f83d9ab + this._h = 0x5be0cd19 + + return this +} + +function ch (x, y, z) { + return z ^ (x & (y ^ z)) +} + +function maj (x, y, z) { + return (x & y) | (z & (x | y)) +} + +function sigma0 (x) { + return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) +} + +function sigma1 (x) { + return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) +} + +function gamma0 (x) { + return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) +} + +function gamma1 (x) { + return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) +} + +Sha256.prototype._update = function (M) { + var W = this._w + + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + var f = this._f | 0 + var g = this._g | 0 + var h = this._h | 0 + + for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) + for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0 + + for (var j = 0; j < 64; ++j) { + var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0 + var T2 = (sigma0(a) + maj(a, b, c)) | 0 + + h = g + g = f + f = e + e = (d + T1) | 0 + d = c + c = b + b = a + a = (T1 + T2) | 0 + } + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 + this._f = (f + this._f) | 0 + this._g = (g + this._g) | 0 + this._h = (h + this._h) | 0 +} + +Sha256.prototype._hash = function () { + var H = Buffer.allocUnsafe(32) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + H.writeInt32BE(this._h, 28) + + return H +} + +module.exports = Sha256 + + +/***/ }), + +/***/ "../../node_modules/sha.js/sha384.js": +/*!*******************************************!*\ + !*** ../../node_modules/sha.js/sha384.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var SHA512 = __webpack_require__(/*! ./sha512 */ "../../node_modules/sha.js/sha512.js") +var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var W = new Array(160) + +function Sha384 () { + this.init() + this._w = W + + Hash.call(this, 128, 112) +} + +inherits(Sha384, SHA512) + +Sha384.prototype.init = function () { + this._ah = 0xcbbb9d5d + this._bh = 0x629a292a + this._ch = 0x9159015a + this._dh = 0x152fecd8 + this._eh = 0x67332667 + this._fh = 0x8eb44a87 + this._gh = 0xdb0c2e0d + this._hh = 0x47b5481d + + this._al = 0xc1059ed8 + this._bl = 0x367cd507 + this._cl = 0x3070dd17 + this._dl = 0xf70e5939 + this._el = 0xffc00b31 + this._fl = 0x68581511 + this._gl = 0x64f98fa7 + this._hl = 0xbefa4fa4 + + return this +} + +Sha384.prototype._hash = function () { + var H = Buffer.allocUnsafe(48) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } + + writeInt64BE(this._ah, this._al, 0) + writeInt64BE(this._bh, this._bl, 8) + writeInt64BE(this._ch, this._cl, 16) + writeInt64BE(this._dh, this._dl, 24) + writeInt64BE(this._eh, this._el, 32) + writeInt64BE(this._fh, this._fl, 40) + + return H +} + +module.exports = Sha384 + + +/***/ }), + +/***/ "../../node_modules/sha.js/sha512.js": +/*!*******************************************!*\ + !*** ../../node_modules/sha.js/sha512.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js") +var Hash = __webpack_require__(/*! ./hash */ "../../node_modules/sha.js/hash.js") +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer) + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +] + +var W = new Array(160) + +function Sha512 () { + this.init() + this._w = W + + Hash.call(this, 128, 112) +} + +inherits(Sha512, Hash) + +Sha512.prototype.init = function () { + this._ah = 0x6a09e667 + this._bh = 0xbb67ae85 + this._ch = 0x3c6ef372 + this._dh = 0xa54ff53a + this._eh = 0x510e527f + this._fh = 0x9b05688c + this._gh = 0x1f83d9ab + this._hh = 0x5be0cd19 + + this._al = 0xf3bcc908 + this._bl = 0x84caa73b + this._cl = 0xfe94f82b + this._dl = 0x5f1d36f1 + this._el = 0xade682d1 + this._fl = 0x2b3e6c1f + this._gl = 0xfb41bd6b + this._hl = 0x137e2179 + + return this +} + +function Ch (x, y, z) { + return z ^ (x & (y ^ z)) +} + +function maj (x, y, z) { + return (x & y) | (z & (x | y)) +} + +function sigma0 (x, xl) { + return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) +} + +function sigma1 (x, xl) { + return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) +} + +function Gamma0 (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) +} + +function Gamma0l (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) +} + +function Gamma1 (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) +} + +function Gamma1l (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) +} + +function getCarry (a, b) { + return (a >>> 0) < (b >>> 0) ? 1 : 0 +} + +Sha512.prototype._update = function (M) { + var W = this._w + + var ah = this._ah | 0 + var bh = this._bh | 0 + var ch = this._ch | 0 + var dh = this._dh | 0 + var eh = this._eh | 0 + var fh = this._fh | 0 + var gh = this._gh | 0 + var hh = this._hh | 0 + + var al = this._al | 0 + var bl = this._bl | 0 + var cl = this._cl | 0 + var dl = this._dl | 0 + var el = this._el | 0 + var fl = this._fl | 0 + var gl = this._gl | 0 + var hl = this._hl | 0 + + for (var i = 0; i < 32; i += 2) { + W[i] = M.readInt32BE(i * 4) + W[i + 1] = M.readInt32BE(i * 4 + 4) + } + for (; i < 160; i += 2) { + var xh = W[i - 15 * 2] + var xl = W[i - 15 * 2 + 1] + var gamma0 = Gamma0(xh, xl) + var gamma0l = Gamma0l(xl, xh) + + xh = W[i - 2 * 2] + xl = W[i - 2 * 2 + 1] + var gamma1 = Gamma1(xh, xl) + var gamma1l = Gamma1l(xl, xh) + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7h = W[i - 7 * 2] + var Wi7l = W[i - 7 * 2 + 1] + + var Wi16h = W[i - 16 * 2] + var Wi16l = W[i - 16 * 2 + 1] + + var Wil = (gamma0l + Wi7l) | 0 + var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0 + Wil = (Wil + gamma1l) | 0 + Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0 + Wil = (Wil + Wi16l) | 0 + Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0 + + W[i] = Wih + W[i + 1] = Wil + } + + for (var j = 0; j < 160; j += 2) { + Wih = W[j] + Wil = W[j + 1] + + var majh = maj(ah, bh, ch) + var majl = maj(al, bl, cl) + + var sigma0h = sigma0(ah, al) + var sigma0l = sigma0(al, ah) + var sigma1h = sigma1(eh, el) + var sigma1l = sigma1(el, eh) + + // t1 = h + sigma1 + ch + K[j] + W[j] + var Kih = K[j] + var Kil = K[j + 1] + + var chh = Ch(eh, fh, gh) + var chl = Ch(el, fl, gl) + + var t1l = (hl + sigma1l) | 0 + var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0 + t1l = (t1l + chl) | 0 + t1h = (t1h + chh + getCarry(t1l, chl)) | 0 + t1l = (t1l + Kil) | 0 + t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0 + t1l = (t1l + Wil) | 0 + t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0 + + // t2 = sigma0 + maj + var t2l = (sigma0l + majl) | 0 + var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0 + + hh = gh + hl = gl + gh = fh + gl = fl + fh = eh + fl = el + el = (dl + t1l) | 0 + eh = (dh + t1h + getCarry(el, dl)) | 0 + dh = ch + dl = cl + ch = bh + cl = bl + bh = ah + bl = al + al = (t1l + t2l) | 0 + ah = (t1h + t2h + getCarry(al, t1l)) | 0 + } + + this._al = (this._al + al) | 0 + this._bl = (this._bl + bl) | 0 + this._cl = (this._cl + cl) | 0 + this._dl = (this._dl + dl) | 0 + this._el = (this._el + el) | 0 + this._fl = (this._fl + fl) | 0 + this._gl = (this._gl + gl) | 0 + this._hl = (this._hl + hl) | 0 + + this._ah = (this._ah + ah + getCarry(this._al, al)) | 0 + this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0 + this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0 + this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0 + this._eh = (this._eh + eh + getCarry(this._el, el)) | 0 + this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0 + this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0 + this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0 +} + +Sha512.prototype._hash = function () { + var H = Buffer.allocUnsafe(64) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } + + writeInt64BE(this._ah, this._al, 0) + writeInt64BE(this._bh, this._bl, 8) + writeInt64BE(this._ch, this._cl, 16) + writeInt64BE(this._dh, this._dl, 24) + writeInt64BE(this._eh, this._el, 32) + writeInt64BE(this._fh, this._fl, 40) + writeInt64BE(this._gh, this._gl, 48) + writeInt64BE(this._hh, this._hl, 56) + + return H +} + +module.exports = Sha512 + + +/***/ }), + +/***/ "../../node_modules/stream-browserify/index.js": +/*!*****************************************************!*\ + !*** ../../node_modules/stream-browserify/index.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +module.exports = Stream; + +var EE = (__webpack_require__(/*! events */ "../../node_modules/events/events.js").EventEmitter); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +inherits(Stream, EE); +Stream.Readable = __webpack_require__(/*! readable-stream/lib/_stream_readable.js */ "../../node_modules/readable-stream/lib/_stream_readable.js"); +Stream.Writable = __webpack_require__(/*! readable-stream/lib/_stream_writable.js */ "../../node_modules/readable-stream/lib/_stream_writable.js"); +Stream.Duplex = __webpack_require__(/*! readable-stream/lib/_stream_duplex.js */ "../../node_modules/readable-stream/lib/_stream_duplex.js"); +Stream.Transform = __webpack_require__(/*! readable-stream/lib/_stream_transform.js */ "../../node_modules/readable-stream/lib/_stream_transform.js"); +Stream.PassThrough = __webpack_require__(/*! readable-stream/lib/_stream_passthrough.js */ "../../node_modules/readable-stream/lib/_stream_passthrough.js"); +Stream.finished = __webpack_require__(/*! readable-stream/lib/internal/streams/end-of-stream.js */ "../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js") +Stream.pipeline = __webpack_require__(/*! readable-stream/lib/internal/streams/pipeline.js */ "../../node_modules/readable-stream/lib/internal/streams/pipeline.js") + +// Backwards-compat with node 0.4.x +Stream.Stream = Stream; + + + +// old-style streams. Note that the pipe method (the only relevant +// part of this class) is overridden in the Readable class. + +function Stream() { + EE.call(this); +} + +Stream.prototype.pipe = function(dest, options) { + var source = this; + + function ondata(chunk) { + if (dest.writable) { + if (false === dest.write(chunk) && source.pause) { + source.pause(); + } + } + } + + source.on('data', ondata); + + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } + + dest.on('drain', ondrain); + + // If the 'end' option is not supplied, dest.end() will be called when + // source gets the 'end' or 'close' events. Only dest.end() once. + if (!dest._isStdio && (!options || options.end !== false)) { + source.on('end', onend); + source.on('close', onclose); + } + + var didOnEnd = false; + function onend() { + if (didOnEnd) return; + didOnEnd = true; + + dest.end(); + } + + + function onclose() { + if (didOnEnd) return; + didOnEnd = true; + + if (typeof dest.destroy === 'function') dest.destroy(); + } + + // don't leave dangling pipes when there are errors. + function onerror(er) { + cleanup(); + if (EE.listenerCount(this, 'error') === 0) { + throw er; // Unhandled stream error in pipe. + } + } + + source.on('error', onerror); + dest.on('error', onerror); + + // remove all the event listeners that were added. + function cleanup() { + source.removeListener('data', ondata); + dest.removeListener('drain', ondrain); + + source.removeListener('end', onend); + source.removeListener('close', onclose); + + source.removeListener('error', onerror); + dest.removeListener('error', onerror); + + source.removeListener('end', cleanup); + source.removeListener('close', cleanup); + + dest.removeListener('close', cleanup); + } + + source.on('end', cleanup); + source.on('close', cleanup); + + dest.on('close', cleanup); + + dest.emit('pipe', source); + + // Allow for unix-like usage: A.pipe(B).pipe(C) + return dest; +}; + + +/***/ }), + +/***/ "../../node_modules/string_decoder/lib/string_decoder.js": +/*!***************************************************************!*\ + !*** ../../node_modules/string_decoder/lib/string_decoder.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +/**/ + +var Buffer = (__webpack_require__(/*! safe-buffer */ "../../node_modules/safe-buffer/index.js").Buffer); +/**/ + +var isEncoding = Buffer.isEncoding || function (encoding) { + encoding = '' + encoding; + switch (encoding && encoding.toLowerCase()) { + case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': + return true; + default: + return false; + } +}; + +function _normalizeEncoding(enc) { + if (!enc) return 'utf8'; + var retried; + while (true) { + switch (enc) { + case 'utf8': + case 'utf-8': + return 'utf8'; + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return 'utf16le'; + case 'latin1': + case 'binary': + return 'latin1'; + case 'base64': + case 'ascii': + case 'hex': + return enc; + default: + if (retried) return; // undefined + enc = ('' + enc).toLowerCase(); + retried = true; + } + } +}; + +// Do not cache `Buffer.isEncoding` when checking encoding names as some +// modules monkey-patch it to support additional encodings +function normalizeEncoding(enc) { + var nenc = _normalizeEncoding(enc); + if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); + return nenc || enc; +} + +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. +exports.StringDecoder = StringDecoder; +function StringDecoder(encoding) { + this.encoding = normalizeEncoding(encoding); + var nb; + switch (this.encoding) { + case 'utf16le': + this.text = utf16Text; + this.end = utf16End; + nb = 4; + break; + case 'utf8': + this.fillLast = utf8FillLast; + nb = 4; + break; + case 'base64': + this.text = base64Text; + this.end = base64End; + nb = 3; + break; + default: + this.write = simpleWrite; + this.end = simpleEnd; + return; + } + this.lastNeed = 0; + this.lastTotal = 0; + this.lastChar = Buffer.allocUnsafe(nb); +} + +StringDecoder.prototype.write = function (buf) { + if (buf.length === 0) return ''; + var r; + var i; + if (this.lastNeed) { + r = this.fillLast(buf); + if (r === undefined) return ''; + i = this.lastNeed; + this.lastNeed = 0; + } else { + i = 0; + } + if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); + return r || ''; +}; + +StringDecoder.prototype.end = utf8End; + +// Returns only complete characters in a Buffer +StringDecoder.prototype.text = utf8Text; + +// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer +StringDecoder.prototype.fillLast = function (buf) { + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); + this.lastNeed -= buf.length; +}; + +// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a +// continuation byte. If an invalid byte is detected, -2 is returned. +function utf8CheckByte(byte) { + if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; + return byte >> 6 === 0x02 ? -1 : -2; +} + +// Checks at most 3 bytes at the end of a Buffer in order to detect an +// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) +// needed to complete the UTF-8 character (if applicable) are returned. +function utf8CheckIncomplete(self, buf, i) { + var j = buf.length - 1; + if (j < i) return 0; + var nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 1; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) self.lastNeed = nb - 2; + return nb; + } + if (--j < i || nb === -2) return 0; + nb = utf8CheckByte(buf[j]); + if (nb >= 0) { + if (nb > 0) { + if (nb === 2) nb = 0;else self.lastNeed = nb - 3; } -}); -exports.VirtualRenderer = VirtualRenderer; + return nb; + } + return 0; +} -}); +// Validates as many continuation bytes for a multi-byte UTF-8 character as +// needed or are available. If we see a non-continuation byte where we expect +// one, we "replace" the validated continuation bytes we've seen so far with +// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding +// behavior. The continuation byte check is included three times in the case +// where all of the continuation bytes for a character exist in the same buffer. +// It is also done this way as a slight performance increase instead of using a +// loop. +function utf8CheckExtraBytes(self, buf, p) { + if ((buf[0] & 0xC0) !== 0x80) { + self.lastNeed = 0; + return '\ufffd'; + } + if (self.lastNeed > 1 && buf.length > 1) { + if ((buf[1] & 0xC0) !== 0x80) { + self.lastNeed = 1; + return '\ufffd'; + } + if (self.lastNeed > 2 && buf.length > 2) { + if ((buf[2] & 0xC0) !== 0x80) { + self.lastNeed = 2; + return '\ufffd'; + } + } + } +} -ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(require, exports, module) { -"use strict"; +// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. +function utf8FillLast(buf) { + var p = this.lastTotal - this.lastNeed; + var r = utf8CheckExtraBytes(this, buf, p); + if (r !== undefined) return r; + if (this.lastNeed <= buf.length) { + buf.copy(this.lastChar, p, 0, this.lastNeed); + return this.lastChar.toString(this.encoding, 0, this.lastTotal); + } + buf.copy(this.lastChar, p, 0, buf.length); + this.lastNeed -= buf.length; +} -var oop = require("../lib/oop"); -var net = require("../lib/net"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var config = require("../config"); +// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a +// partial character, the character's bytes are buffered until the required +// number of bytes are available. +function utf8Text(buf, i) { + var total = utf8CheckIncomplete(this, buf, i); + if (!this.lastNeed) return buf.toString('utf8', i); + this.lastTotal = total; + var end = buf.length - (total - this.lastNeed); + buf.copy(this.lastChar, 0, end); + return buf.toString('utf8', i, end); +} -function $workerBlob(workerUrl) { - var script = "importScripts('" + net.qualifyURL(workerUrl) + "');"; - try { - return new Blob([script], {"type": "application/javascript"}); - } catch (e) { // Backwards-compatibility - var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; - var blobBuilder = new BlobBuilder(); - blobBuilder.append(script); - return blobBuilder.getBlob("application/javascript"); - } +// For UTF-8, a replacement character is added when ending on a partial +// character. +function utf8End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + '\ufffd'; + return r; } -function createWorker(workerUrl) { - if (typeof Worker == "undefined") - return { postMessage: function() {}, terminate: function() {} }; - if (config.get("loadWorkerFromBlob")) { - var blob = $workerBlob(workerUrl); - var URL = window.URL || window.webkitURL; - var blobURL = URL.createObjectURL(blob); - return new Worker(blobURL); +// UTF-16LE typically needs two bytes per character, but even if we have an even +// number of bytes available, we need to check if we end on a leading/high +// surrogate. In that case, we need to wait for the next two bytes in order to +// decode the last character properly. +function utf16Text(buf, i) { + if ((buf.length - i) % 2 === 0) { + var r = buf.toString('utf16le', i); + if (r) { + var c = r.charCodeAt(r.length - 1); + if (c >= 0xD800 && c <= 0xDBFF) { + this.lastNeed = 2; + this.lastTotal = 4; + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + return r.slice(0, -1); + } } - return new Worker(workerUrl); + return r; + } + this.lastNeed = 1; + this.lastTotal = 2; + this.lastChar[0] = buf[buf.length - 1]; + return buf.toString('utf16le', i, buf.length - 1); } -var WorkerClient = function(worker) { - if (!worker.postMessage) - worker = this.$createWorkerFromOldConfig.apply(this, arguments); +// For UTF-16LE we do not explicitly append special replacement characters if we +// end on a partial character, we simply let v8 handle that. +function utf16End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) { + var end = this.lastTotal - this.lastNeed; + return r + this.lastChar.toString('utf16le', 0, end); + } + return r; +} - this.$worker = worker; - this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); - this.changeListener = this.changeListener.bind(this); - this.onMessage = this.onMessage.bind(this); +function base64Text(buf, i) { + var n = (buf.length - i) % 3; + if (n === 0) return buf.toString('base64', i); + this.lastNeed = 3 - n; + this.lastTotal = 3; + if (n === 1) { + this.lastChar[0] = buf[buf.length - 1]; + } else { + this.lastChar[0] = buf[buf.length - 2]; + this.lastChar[1] = buf[buf.length - 1]; + } + return buf.toString('base64', i, buf.length - n); +} - this.callbackId = 1; - this.callbacks = {}; +function base64End(buf) { + var r = buf && buf.length ? this.write(buf) : ''; + if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); + return r; +} - this.$worker.onmessage = this.onMessage; +// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) +function simpleWrite(buf) { + return buf.toString(this.encoding); +} + +function simpleEnd(buf) { + return buf && buf.length ? this.write(buf) : ''; +} + +/***/ }), + +/***/ "../../node_modules/svg-pan-zoom/src/browserify.js": +/*!*********************************************************!*\ + !*** ../../node_modules/svg-pan-zoom/src/browserify.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var SvgPanZoom = __webpack_require__(/*! ./svg-pan-zoom.js */ "../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js"); + +module.exports = SvgPanZoom; + + +/***/ }), + +/***/ "../../node_modules/svg-pan-zoom/src/control-icons.js": +/*!************************************************************!*\ + !*** ../../node_modules/svg-pan-zoom/src/control-icons.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var SvgUtils = __webpack_require__(/*! ./svg-utilities */ "../../node_modules/svg-pan-zoom/src/svg-utilities.js"); + +module.exports = { + enable: function(instance) { + // Select (and create if necessary) defs + var defs = instance.svg.querySelector("defs"); + if (!defs) { + defs = document.createElementNS(SvgUtils.svgNS, "defs"); + instance.svg.appendChild(defs); + } + + // Check for style element, and create it if it doesn't exist + var styleEl = defs.querySelector("style#svg-pan-zoom-controls-styles"); + if (!styleEl) { + var style = document.createElementNS(SvgUtils.svgNS, "style"); + style.setAttribute("id", "svg-pan-zoom-controls-styles"); + style.setAttribute("type", "text/css"); + style.textContent = + ".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }"; + defs.appendChild(style); + } + + // Zoom Group + var zoomGroup = document.createElementNS(SvgUtils.svgNS, "g"); + zoomGroup.setAttribute("id", "svg-pan-zoom-controls"); + zoomGroup.setAttribute( + "transform", + "translate(" + + (instance.width - 70) + + " " + + (instance.height - 76) + + ") scale(0.75)" + ); + zoomGroup.setAttribute("class", "svg-pan-zoom-control"); + + // Control elements + zoomGroup.appendChild(this._createZoomIn(instance)); + zoomGroup.appendChild(this._createZoomReset(instance)); + zoomGroup.appendChild(this._createZoomOut(instance)); + + // Finally append created element + instance.svg.appendChild(zoomGroup); + + // Cache control instance + instance.controlIcons = zoomGroup; + }, + + _createZoomIn: function(instance) { + var zoomIn = document.createElementNS(SvgUtils.svgNS, "g"); + zoomIn.setAttribute("id", "svg-pan-zoom-zoom-in"); + zoomIn.setAttribute("transform", "translate(30.5 5) scale(0.015)"); + zoomIn.setAttribute("class", "svg-pan-zoom-control"); + zoomIn.addEventListener( + "click", + function() { + instance.getPublicInstance().zoomIn(); + }, + false + ); + zoomIn.addEventListener( + "touchstart", + function() { + instance.getPublicInstance().zoomIn(); + }, + false + ); + + var zoomInBackground = document.createElementNS(SvgUtils.svgNS, "rect"); // TODO change these background space fillers to rounded rectangles so they look prettier + zoomInBackground.setAttribute("x", "0"); + zoomInBackground.setAttribute("y", "0"); + zoomInBackground.setAttribute("width", "1500"); // larger than expected because the whole group is transformed to scale down + zoomInBackground.setAttribute("height", "1400"); + zoomInBackground.setAttribute("class", "svg-pan-zoom-control-background"); + zoomIn.appendChild(zoomInBackground); + + var zoomInShape = document.createElementNS(SvgUtils.svgNS, "path"); + zoomInShape.setAttribute( + "d", + "M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" + ); + zoomInShape.setAttribute("class", "svg-pan-zoom-control-element"); + zoomIn.appendChild(zoomInShape); + + return zoomIn; + }, + + _createZoomReset: function(instance) { + // reset + var resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, "g"); + resetPanZoomControl.setAttribute("id", "svg-pan-zoom-reset-pan-zoom"); + resetPanZoomControl.setAttribute("transform", "translate(5 35) scale(0.4)"); + resetPanZoomControl.setAttribute("class", "svg-pan-zoom-control"); + resetPanZoomControl.addEventListener( + "click", + function() { + instance.getPublicInstance().reset(); + }, + false + ); + resetPanZoomControl.addEventListener( + "touchstart", + function() { + instance.getPublicInstance().reset(); + }, + false + ); + + var resetPanZoomControlBackground = document.createElementNS( + SvgUtils.svgNS, + "rect" + ); // TODO change these background space fillers to rounded rectangles so they look prettier + resetPanZoomControlBackground.setAttribute("x", "2"); + resetPanZoomControlBackground.setAttribute("y", "2"); + resetPanZoomControlBackground.setAttribute("width", "182"); // larger than expected because the whole group is transformed to scale down + resetPanZoomControlBackground.setAttribute("height", "58"); + resetPanZoomControlBackground.setAttribute( + "class", + "svg-pan-zoom-control-background" + ); + resetPanZoomControl.appendChild(resetPanZoomControlBackground); + + var resetPanZoomControlShape1 = document.createElementNS( + SvgUtils.svgNS, + "path" + ); + resetPanZoomControlShape1.setAttribute( + "d", + "M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z" + ); + resetPanZoomControlShape1.setAttribute( + "class", + "svg-pan-zoom-control-element" + ); + resetPanZoomControl.appendChild(resetPanZoomControlShape1); + + var resetPanZoomControlShape2 = document.createElementNS( + SvgUtils.svgNS, + "path" + ); + resetPanZoomControlShape2.setAttribute( + "d", + "M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z" + ); + resetPanZoomControlShape2.setAttribute( + "class", + "svg-pan-zoom-control-element" + ); + resetPanZoomControl.appendChild(resetPanZoomControlShape2); + + return resetPanZoomControl; + }, + + _createZoomOut: function(instance) { + // zoom out + var zoomOut = document.createElementNS(SvgUtils.svgNS, "g"); + zoomOut.setAttribute("id", "svg-pan-zoom-zoom-out"); + zoomOut.setAttribute("transform", "translate(30.5 70) scale(0.015)"); + zoomOut.setAttribute("class", "svg-pan-zoom-control"); + zoomOut.addEventListener( + "click", + function() { + instance.getPublicInstance().zoomOut(); + }, + false + ); + zoomOut.addEventListener( + "touchstart", + function() { + instance.getPublicInstance().zoomOut(); + }, + false + ); + + var zoomOutBackground = document.createElementNS(SvgUtils.svgNS, "rect"); // TODO change these background space fillers to rounded rectangles so they look prettier + zoomOutBackground.setAttribute("x", "0"); + zoomOutBackground.setAttribute("y", "0"); + zoomOutBackground.setAttribute("width", "1500"); // larger than expected because the whole group is transformed to scale down + zoomOutBackground.setAttribute("height", "1400"); + zoomOutBackground.setAttribute("class", "svg-pan-zoom-control-background"); + zoomOut.appendChild(zoomOutBackground); + + var zoomOutShape = document.createElementNS(SvgUtils.svgNS, "path"); + zoomOutShape.setAttribute( + "d", + "M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" + ); + zoomOutShape.setAttribute("class", "svg-pan-zoom-control-element"); + zoomOut.appendChild(zoomOutShape); + + return zoomOut; + }, + + disable: function(instance) { + if (instance.controlIcons) { + instance.controlIcons.parentNode.removeChild(instance.controlIcons); + instance.controlIcons = null; + } + } }; -(function(){ - oop.implement(this, EventEmitter); +/***/ }), - this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) { - if (require.nameToUrl && !require.toUrl) - require.toUrl = require.nameToUrl; +/***/ "../../node_modules/svg-pan-zoom/src/shadow-viewport.js": +/*!**************************************************************!*\ + !*** ../../node_modules/svg-pan-zoom/src/shadow-viewport.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - if (config.get("packaged") || !require.toUrl) { - workerUrl = workerUrl || config.moduleUrl(mod, "worker"); - } else { - var normalizePath = this.$normalizePath; - workerUrl = workerUrl || normalizePath(require.toUrl("ace/worker/worker.js", null, "_")); +var SvgUtils = __webpack_require__(/*! ./svg-utilities */ "../../node_modules/svg-pan-zoom/src/svg-utilities.js"), + Utils = __webpack_require__(/*! ./utilities */ "../../node_modules/svg-pan-zoom/src/utilities.js"); - var tlns = {}; - topLevelNamespaces.forEach(function(ns) { - tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); - }); - } +var ShadowViewport = function(viewport, options) { + this.init(viewport, options); +}; - this.$worker = createWorker(workerUrl); - if (importScripts) { - this.send("importScripts", importScripts); - } - this.$worker.postMessage({ - init : true, - tlns : tlns, - module : mod, - classname : classname - }); - return this.$worker; - }; +/** + * Initialization + * + * @param {SVGElement} viewport + * @param {Object} options + */ +ShadowViewport.prototype.init = function(viewport, options) { + // DOM Elements + this.viewport = viewport; + this.options = options; - this.onMessage = function(e) { - var msg = e.data; - switch (msg.type) { - case "event": - this._signal(msg.name, {data: msg.data}); - break; - case "call": - var callback = this.callbacks[msg.id]; - if (callback) { - callback(msg.data); - delete this.callbacks[msg.id]; - } - break; - case "error": - this.reportError(msg.data); - break; - case "log": - window.console && console.log && console.log.apply(console, msg.data); - break; - } - }; - - this.reportError = function(err) { - window.console && console.error && console.error(err); - }; + // State cache + this.originalState = { zoom: 1, x: 0, y: 0 }; + this.activeState = { zoom: 1, x: 0, y: 0 }; - this.$normalizePath = function(path) { - return net.qualifyURL(path); - }; + this.updateCTMCached = Utils.proxy(this.updateCTM, this); - this.terminate = function() { - this._signal("terminate", {}); - this.deltaQueue = null; - this.$worker.terminate(); - this.$worker.onerror = function(e) { - e.preventDefault(); - }; - this.$worker = null; - if (this.$doc) - this.$doc.off("change", this.changeListener); - this.$doc = null; - }; + // Create a custom requestAnimationFrame taking in account refreshRate + this.requestAnimationFrame = Utils.createRequestAnimationFrame( + this.options.refreshRate + ); + + // ViewBox + this.viewBox = { x: 0, y: 0, width: 0, height: 0 }; + this.cacheViewBox(); + + // Process CTM + var newCTM = this.processCTM(); + + // Update viewport CTM and cache zoom and pan + this.setCTM(newCTM); + + // Update CTM in this frame + this.updateCTM(); +}; + +/** + * Cache initial viewBox value + * If no viewBox is defined, then use viewport size/position instead for viewBox values + */ +ShadowViewport.prototype.cacheViewBox = function() { + var svgViewBox = this.options.svg.getAttribute("viewBox"); + + if (svgViewBox) { + var viewBoxValues = svgViewBox + .split(/[\s\,]/) + .filter(function(v) { + return v; + }) + .map(parseFloat); + + // Cache viewbox x and y offset + this.viewBox.x = viewBoxValues[0]; + this.viewBox.y = viewBoxValues[1]; + this.viewBox.width = viewBoxValues[2]; + this.viewBox.height = viewBoxValues[3]; - this.send = function(cmd, args) { - this.$worker.postMessage({command: cmd, args: args}); - }; + var zoom = Math.min( + this.options.width / this.viewBox.width, + this.options.height / this.viewBox.height + ); - this.call = function(cmd, args, callback) { - if (callback) { - var id = this.callbackId++; - this.callbacks[id] = callback; - args.push(id); - } - this.send(cmd, args); - }; + // Update active state + this.activeState.zoom = zoom; + this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2; + this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2; - this.emit = function(event, data) { - try { - if (data.data && data.data.err) - data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code}; - this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}}); - } - catch(ex) { - console.error(ex.stack); - } - }; + // Force updating CTM + this.updateCTMOnNextFrame(); - this.attachToDocument = function(doc) { - if (this.$doc) - this.terminate(); + this.options.svg.removeAttribute("viewBox"); + } else { + this.simpleViewBoxCache(); + } +}; - this.$doc = doc; - this.call("setValue", [doc.getValue()]); - doc.on("change", this.changeListener, true); - }; +/** + * Recalculate viewport sizes and update viewBox cache + */ +ShadowViewport.prototype.simpleViewBoxCache = function() { + var bBox = this.viewport.getBBox(); - this.changeListener = function(delta) { - if (!this.deltaQueue) { - this.deltaQueue = []; - setTimeout(this.$sendDeltaQueue, 0); - } - if (delta.action == "insert") - this.deltaQueue.push(delta.start, delta.lines); - else - this.deltaQueue.push(delta.start, delta.end); - }; + this.viewBox.x = bBox.x; + this.viewBox.y = bBox.y; + this.viewBox.width = bBox.width; + this.viewBox.height = bBox.height; +}; - this.$sendDeltaQueue = function() { - var q = this.deltaQueue; - if (!q) return; - this.deltaQueue = null; - if (q.length > 50 && q.length > this.$doc.getLength() >> 1) { - this.call("setValue", [this.$doc.getValue()]); - } else - this.emit("change", {data: q}); - }; +/** + * Returns a viewbox object. Safe to alter + * + * @return {Object} viewbox object + */ +ShadowViewport.prototype.getViewBox = function() { + return Utils.extend({}, this.viewBox); +}; -}).call(WorkerClient.prototype); +/** + * Get initial zoom and pan values. Save them into originalState + * Parses viewBox attribute to alter initial sizes + * + * @return {CTM} CTM object based on options + */ +ShadowViewport.prototype.processCTM = function() { + var newCTM = this.getCTM(); + if (this.options.fit || this.options.contain) { + var newScale; + if (this.options.fit) { + newScale = Math.min( + this.options.width / this.viewBox.width, + this.options.height / this.viewBox.height + ); + } else { + newScale = Math.max( + this.options.width / this.viewBox.width, + this.options.height / this.viewBox.height + ); + } -var UIWorkerClient = function(topLevelNamespaces, mod, classname) { - var main = null; - var emitSync = false; - var sender = Object.create(EventEmitter); + newCTM.a = newScale; //x-scale + newCTM.d = newScale; //y-scale + newCTM.e = -this.viewBox.x * newScale; //x-transform + newCTM.f = -this.viewBox.y * newScale; //y-transform + } - var messageBuffer = []; - var workerClient = new WorkerClient({ - messageBuffer: messageBuffer, - terminate: function() {}, - postMessage: function(e) { - messageBuffer.push(e); - if (!main) return; - if (emitSync) - setTimeout(processNext); - else - processNext(); - } - }); + if (this.options.center) { + var offsetX = + (this.options.width - + (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) * + 0.5, + offsetY = + (this.options.height - + (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) * + 0.5; - workerClient.setEmitSync = function(val) { emitSync = val; }; + newCTM.e = offsetX; + newCTM.f = offsetY; + } - var processNext = function() { - var msg = messageBuffer.shift(); - if (msg.command) - main[msg.command].apply(main, msg.args); - else if (msg.event) - sender._signal(msg.event, msg.data); - }; + // Cache initial values. Based on activeState and fix+center opitons + this.originalState.zoom = newCTM.a; + this.originalState.x = newCTM.e; + this.originalState.y = newCTM.f; - sender.postMessage = function(msg) { - workerClient.onMessage({data: msg}); - }; - sender.callback = function(data, callbackId) { - this.postMessage({type: "call", id: callbackId, data: data}); - }; - sender.emit = function(name, data) { - this.postMessage({type: "event", name: name, data: data}); - }; + return newCTM; +}; - config.loadModule(["worker", mod], function(Main) { - main = new Main[classname](sender); - while (messageBuffer.length) - processNext(); - }); +/** + * Return originalState object. Safe to alter + * + * @return {Object} + */ +ShadowViewport.prototype.getOriginalState = function() { + return Utils.extend({}, this.originalState); +}; - return workerClient; +/** + * Return actualState object. Safe to alter + * + * @return {Object} + */ +ShadowViewport.prototype.getState = function() { + return Utils.extend({}, this.activeState); }; -exports.UIWorkerClient = UIWorkerClient; -exports.WorkerClient = WorkerClient; -exports.createWorker = createWorker; +/** + * Get zoom scale + * + * @return {Float} zoom scale + */ +ShadowViewport.prototype.getZoom = function() { + return this.activeState.zoom; +}; +/** + * Get zoom scale for pubilc usage + * + * @return {Float} zoom scale + */ +ShadowViewport.prototype.getRelativeZoom = function() { + return this.activeState.zoom / this.originalState.zoom; +}; -}); +/** + * Compute zoom scale for pubilc usage + * + * @return {Float} zoom scale + */ +ShadowViewport.prototype.computeRelativeZoom = function(scale) { + return scale / this.originalState.zoom; +}; -ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(require, exports, module){"use strict"; -var Range = require("./range").Range; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var oop = require("./lib/oop"); -var PlaceHolder = /** @class */ (function () { - function PlaceHolder(session, length, pos, others, mainClass, othersClass) { - var _self = this; - this.length = length; - this.session = session; - this.doc = session.getDocument(); - this.mainClass = mainClass; - this.othersClass = othersClass; - this.$onUpdate = this.onUpdate.bind(this); - this.doc.on("change", this.$onUpdate, true); - this.$others = others; - this.$onCursorChange = function () { - setTimeout(function () { - _self.onCursorChange(); - }); - }; - this.$pos = pos; - var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()["$undostack"] || { length: -1 }; - this.$undoStackDepth = undoStack.length; - this.setup(); - session.selection.on("changeCursor", this.$onCursorChange); - } - PlaceHolder.prototype.setup = function () { - var _self = this; - var doc = this.doc; - var session = this.session; - this.selectionBefore = session.selection.toJSON(); - if (session.selection.inMultiSelectMode) - session.selection.toSingleRange(); - this.pos = doc.createAnchor(this.$pos.row, this.$pos.column); - var pos = this.pos; - pos.$insertRight = true; - pos.detach(); - pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); - this.others = []; - this.$others.forEach(function (other) { - var anchor = doc.createAnchor(other.row, other.column); - anchor.$insertRight = true; - anchor.detach(); - _self.others.push(anchor); - }); - session.setUndoSelect(false); - }; - PlaceHolder.prototype.showOtherMarkers = function () { - if (this.othersActive) - return; - var session = this.session; - var _self = this; - this.othersActive = true; - this.others.forEach(function (anchor) { - anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false); - }); - }; - PlaceHolder.prototype.hideOtherMarkers = function () { - if (!this.othersActive) - return; - this.othersActive = false; - for (var i = 0; i < this.others.length; i++) { - this.session.removeMarker(this.others[i].markerId); - } - }; - PlaceHolder.prototype.onUpdate = function (delta) { - if (this.$updating) - return this.updateAnchors(delta); - var range = delta; - if (range.start.row !== range.end.row) - return; - if (range.start.row !== this.pos.row) - return; - this.$updating = true; - var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column; - var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1; - var distanceFromStart = range.start.column - this.pos.column; - this.updateAnchors(delta); - if (inMainRange) - this.length += lengthDiff; - if (inMainRange && !this.session.$fromUndo) { - if (delta.action === 'insert') { - for (var i = this.others.length - 1; i >= 0; i--) { - var otherPos = this.others[i]; - var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart }; - this.doc.insertMergedLines(newPos, delta.lines); - } - } - else if (delta.action === 'remove') { - for (var i = this.others.length - 1; i >= 0; i--) { - var otherPos = this.others[i]; - var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart }; - this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); - } - } - } - this.$updating = false; - this.updateMarkers(); - }; - PlaceHolder.prototype.updateAnchors = function (delta) { - this.pos.onChange(delta); - for (var i = this.others.length; i--;) - this.others[i].onChange(delta); - this.updateMarkers(); - }; - PlaceHolder.prototype.updateMarkers = function () { - if (this.$updating) - return; - var _self = this; - var session = this.session; - var updateMarker = function (pos, className) { - session.removeMarker(pos.markerId); - pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false); - }; - updateMarker(this.pos, this.mainClass); - for (var i = this.others.length; i--;) - updateMarker(this.others[i], this.othersClass); - }; - PlaceHolder.prototype.onCursorChange = function (event) { - if (this.$updating || !this.session) - return; - var pos = this.session.selection.getCursor(); - if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { - this.showOtherMarkers(); - this._emit("cursorEnter", event); - } - else { - this.hideOtherMarkers(); - this._emit("cursorLeave", event); - } - }; - PlaceHolder.prototype.detach = function () { - this.session.removeMarker(this.pos && this.pos.markerId); - this.hideOtherMarkers(); - this.doc.off("change", this.$onUpdate); - this.session.selection.off("changeCursor", this.$onCursorChange); - this.session.setUndoSelect(true); - this.session = null; - }; - PlaceHolder.prototype.cancel = function () { - if (this.$undoStackDepth === -1) - return; - var undoManager = this.session.getUndoManager(); - var undosRequired = (undoManager.$undoStack || undoManager["$undostack"]).length - this.$undoStackDepth; - for (var i = 0; i < undosRequired; i++) { - undoManager.undo(this.session, true); - } - if (this.selectionBefore) - this.session.selection.fromJSON(this.selectionBefore); - }; - return PlaceHolder; -}()); -oop.implement(PlaceHolder.prototype, EventEmitter); -exports.PlaceHolder = PlaceHolder; +/** + * Get pan + * + * @return {Object} + */ +ShadowViewport.prototype.getPan = function() { + return { x: this.activeState.x, y: this.activeState.y }; +}; -}); +/** + * Return cached viewport CTM value that can be safely modified + * + * @return {SVGMatrix} + */ +ShadowViewport.prototype.getCTM = function() { + var safeCTM = this.options.svg.createSVGMatrix(); -ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module){var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -function isSamePoint(p1, p2) { - return p1.row == p2.row && p1.column == p2.column; -} -function onMouseDown(e) { - var ev = e.domEvent; - var alt = ev.altKey; - var shift = ev.shiftKey; - var ctrl = ev.ctrlKey; - var accel = e.getAccelKey(); - var button = e.getButton(); - if (ctrl && useragent.isMac) - button = ev.button; - if (e.editor.inMultiSelectMode && button == 2) { - e.editor.textInput.onContextMenu(e.domEvent); - return; - } - if (!ctrl && !alt && !accel) { - if (button === 0 && e.editor.inMultiSelectMode) - e.editor.exitMultiSelectMode(); - return; - } - if (button !== 0) - return; - var editor = e.editor; - var selection = editor.selection; - var isMultiSelect = editor.inMultiSelectMode; - var pos = e.getDocumentPosition(); - var cursor = selection.getCursor(); - var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); - var mouseX = e.x, mouseY = e.y; - var onMouseSelection = function (e) { - mouseX = e.clientX; - mouseY = e.clientY; - }; - var session = editor.session; - var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); - var screenCursor = screenAnchor; - var selectionMode; - if (editor.$mouseHandler.$enableJumpToDef) { - if (ctrl && alt || accel && alt) - selectionMode = shift ? "block" : "add"; - else if (alt && editor.$blockSelectEnabled) - selectionMode = "block"; - } - else { - if (accel && !alt) { - selectionMode = "add"; - if (!isMultiSelect && shift) - return; - } - else if (alt && editor.$blockSelectEnabled) { - selectionMode = "block"; - } - } - if (selectionMode && useragent.isMac && ev.ctrlKey) { - editor.$mouseHandler.cancelContextMenu(); - } - if (selectionMode == "add") { - if (!isMultiSelect && inSelection) - return; // dragging - if (!isMultiSelect) { - var range = selection.toOrientedRange(); - editor.addSelectionMarker(range); - } - var oldRange = selection.rangeList.rangeAtPoint(pos); - editor.inVirtualSelectionMode = true; - if (shift) { - oldRange = null; - range = selection.ranges[0] || range; - editor.removeSelectionMarker(range); - } - editor.once("mouseup", function () { - var tmpSel = selection.toOrientedRange(); - if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) - selection.substractPoint(tmpSel.cursor); - else { - if (shift) { - selection.substractPoint(range.cursor); - } - else if (range) { - editor.removeSelectionMarker(range); - selection.addRange(range); - } - selection.addRange(tmpSel); - } - editor.inVirtualSelectionMode = false; - }); - } - else if (selectionMode == "block") { - e.stop(); - editor.inVirtualSelectionMode = true; - var initialRange; - var rectSel = []; - var blockSelect = function () { - var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); - var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX); - if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) - return; - screenCursor = newCursor; - editor.selection.moveToPosition(cursor); - editor.renderer.scrollCursorIntoView(); - editor.removeSelectionMarkers(rectSel); - rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); - if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) - rectSel[0] = editor.$mouseHandler.$clickSelection.clone(); - rectSel.forEach(editor.addSelectionMarker, editor); - editor.updateSelectionMarkers(); - }; - if (isMultiSelect && !accel) { - selection.toSingleRange(); + // Copy values manually as in FF they are not itterable + safeCTM.a = this.activeState.zoom; + safeCTM.b = 0; + safeCTM.c = 0; + safeCTM.d = this.activeState.zoom; + safeCTM.e = this.activeState.x; + safeCTM.f = this.activeState.y; + + return safeCTM; +}; + +/** + * Set a new CTM + * + * @param {SVGMatrix} newCTM + */ +ShadowViewport.prototype.setCTM = function(newCTM) { + var willZoom = this.isZoomDifferent(newCTM), + willPan = this.isPanDifferent(newCTM); + + if (willZoom || willPan) { + // Before zoom + if (willZoom) { + // If returns false then cancel zooming + if ( + this.options.beforeZoom( + this.getRelativeZoom(), + this.computeRelativeZoom(newCTM.a) + ) === false + ) { + newCTM.a = newCTM.d = this.activeState.zoom; + willZoom = false; + } else { + this.updateCache(newCTM); + this.options.onZoom(this.getRelativeZoom()); + } + } + + // Before pan + if (willPan) { + var preventPan = this.options.beforePan(this.getPan(), { + x: newCTM.e, + y: newCTM.f + }), + // If prevent pan is an object + preventPanX = false, + preventPanY = false; + + // If prevent pan is Boolean false + if (preventPan === false) { + // Set x and y same as before + newCTM.e = this.getPan().x; + newCTM.f = this.getPan().y; + + preventPanX = preventPanY = true; + } else if (Utils.isObject(preventPan)) { + // Check for X axes attribute + if (preventPan.x === false) { + // Prevent panning on x axes + newCTM.e = this.getPan().x; + preventPanX = true; + } else if (Utils.isNumber(preventPan.x)) { + // Set a custom pan value + newCTM.e = preventPan.x; } - else if (!isMultiSelect && accel) { - initialRange = selection.toOrientedRange(); - editor.addSelectionMarker(initialRange); + + // Check for Y axes attribute + if (preventPan.y === false) { + // Prevent panning on x axes + newCTM.f = this.getPan().y; + preventPanY = true; + } else if (Utils.isNumber(preventPan.y)) { + // Set a custom pan value + newCTM.f = preventPan.y; } - if (shift) - screenAnchor = session.documentToScreenPosition(selection.lead); - else - selection.moveToPosition(pos); - screenCursor = { row: -1, column: -1 }; - var onMouseSelectionEnd = function (e) { - blockSelect(); - clearInterval(timerId); - editor.removeSelectionMarkers(rectSel); - if (!rectSel.length) - rectSel = [selection.toOrientedRange()]; - if (initialRange) { - editor.removeSelectionMarker(initialRange); - selection.toSingleRange(initialRange); - } - for (var i = 0; i < rectSel.length; i++) - selection.addRange(rectSel[i]); - editor.inVirtualSelectionMode = false; - editor.$mouseHandler.$clickSelection = null; - }; - var onSelectionInterval = blockSelect; - event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); - var timerId = setInterval(function () { onSelectionInterval(); }, 20); - return e.preventDefault(); + } + + // Update willPan flag + // Check if newCTM is still different + if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) { + willPan = false; + } else { + this.updateCache(newCTM); + this.options.onPan(this.getPan()); + } } -} -exports.onMouseDown = onMouseDown; -}); + // Check again if should zoom or pan + if (willZoom || willPan) { + this.updateCTMOnNextFrame(); + } + } +}; -ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module){/** - * commands to enter multiselect mode - * @type {import("../../ace-internal").Ace.Command[]} - */ -exports.defaultCommands = [{ - name: "addCursorAbove", - description: "Add cursor above", - exec: function (editor) { editor.selectMoreLines(-1); }, - bindKey: { win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "addCursorBelow", - description: "Add cursor below", - exec: function (editor) { editor.selectMoreLines(1); }, - bindKey: { win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "addCursorAboveSkipCurrent", - description: "Add cursor above (skip current)", - exec: function (editor) { editor.selectMoreLines(-1, true); }, - bindKey: { win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "addCursorBelowSkipCurrent", - description: "Add cursor below (skip current)", - exec: function (editor) { editor.selectMoreLines(1, true); }, - bindKey: { win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectMoreBefore", - description: "Select more before", - exec: function (editor) { editor.selectMore(-1); }, - bindKey: { win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectMoreAfter", - description: "Select more after", - exec: function (editor) { editor.selectMore(1); }, - bindKey: { win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectNextBefore", - description: "Select next before", - exec: function (editor) { editor.selectMore(-1, true); }, - bindKey: { win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectNextAfter", - description: "Select next after", - exec: function (editor) { editor.selectMore(1, true); }, - bindKey: { win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "toggleSplitSelectionIntoLines", - description: "Split selection into lines", - exec: function (editor) { - if (editor.multiSelect.rangeCount > 1) - editor.multiSelect.joinSelections(); - else - editor.multiSelect.splitIntoLines(); - }, - bindKey: { win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L" }, - readOnly: true - }, { - name: "splitSelectionIntoLines", - description: "Split into lines", - exec: function (editor) { editor.multiSelect.splitIntoLines(); }, - readOnly: true - }, { - name: "alignCursors", - description: "Align cursors", - exec: function (editor) { editor.alignCursors(); }, - bindKey: { win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A" }, - scrollIntoView: "cursor" - }, { - name: "findAll", - description: "Find all", - exec: function (editor) { editor.findAll(); }, - bindKey: { win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G" }, - scrollIntoView: "cursor", - readOnly: true - }]; -exports.multiSelectCommands = [{ - name: "singleSelection", - description: "Single selection", - bindKey: "esc", - exec: function (editor) { editor.exitMultiSelectMode(); }, - scrollIntoView: "cursor", - readOnly: true, - isAvailable: function (editor) { return editor && editor.inMultiSelectMode; } - }]; -var HashHandler = require("../keyboard/hash_handler").HashHandler; -exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); +ShadowViewport.prototype.isZoomDifferent = function(newCTM) { + return this.activeState.zoom !== newCTM.a; +}; -}); +ShadowViewport.prototype.isPanDifferent = function(newCTM) { + return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f; +}; -ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"], function(require, exports, module){/** - * @typedef {import("./anchor").Anchor} Anchor - * @typedef {import("../ace-internal").Ace.Point} Point - * @typedef {import("../ace-internal").Ace.ScreenCoordinates} ScreenCoordinates +/** + * Update cached CTM and active state + * + * @param {SVGMatrix} newCTM */ -var RangeList = require("./range_list").RangeList; -var Range = require("./range").Range; -var Selection = require("./selection").Selection; -var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; -var event = require("./lib/event"); -var lang = require("./lib/lang"); -var commands = require("./commands/multi_select_commands"); -exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); -var Search = require("./search").Search; -var search = new Search(); -function find(session, needle, dir) { - search.$options.wrap = true; - search.$options.needle = needle; - search.$options.backwards = dir == -1; - return search.find(session); -} -var EditSession = require("./edit_session").EditSession; -(function () { - this.getSelectionMarkers = function () { - return this.$selectionMarkers; - }; -}).call(EditSession.prototype); -(function () { - this.ranges = null; - this.rangeList = null; - this.addRange = function (range, $blockChangeEvents) { - if (!range) - return; - if (!this.inMultiSelectMode && this.rangeCount === 0) { - var oldRange = this.toOrientedRange(); - this.rangeList.add(oldRange); - this.rangeList.add(range); - if (this.rangeList.ranges.length != 2) { - this.rangeList.removeAll(); - return $blockChangeEvents || this.fromOrientedRange(range); - } - this.rangeList.removeAll(); - this.rangeList.add(oldRange); - this.$onAddRange(oldRange); - } - if (!range.cursor) - range.cursor = range.end; - var removed = this.rangeList.add(range); - this.$onAddRange(range); - if (removed.length) - this.$onRemoveRange(removed); - if (this.rangeCount > 1 && !this.inMultiSelectMode) { - this._signal("multiSelect"); - this.inMultiSelectMode = true; - this.session.$undoSelect = false; - this.rangeList.attach(this.session); - } - return $blockChangeEvents || this.fromOrientedRange(range); - }; - this.toSingleRange = function (range) { - range = range || this.ranges[0]; - var removed = this.rangeList.removeAll(); - if (removed.length) - this.$onRemoveRange(removed); - range && this.fromOrientedRange(range); - }; - this.substractPoint = function (pos) { - var removed = this.rangeList.substractPoint(pos); - if (removed) { - this.$onRemoveRange(removed); - return removed[0]; - } - }; - this.mergeOverlappingRanges = function () { - var removed = this.rangeList.merge(); - if (removed.length) - this.$onRemoveRange(removed); - }; - this.$onAddRange = function (range) { - this.rangeCount = this.rangeList.ranges.length; - this.ranges.unshift(range); - this._signal("addRange", { range: range }); - }; - this.$onRemoveRange = function (removed) { - this.rangeCount = this.rangeList.ranges.length; - if (this.rangeCount == 1 && this.inMultiSelectMode) { - var lastRange = this.rangeList.ranges.pop(); - removed.push(lastRange); - this.rangeCount = 0; - } - for (var i = removed.length; i--;) { - var index = this.ranges.indexOf(removed[i]); - this.ranges.splice(index, 1); - } - this._signal("removeRange", { ranges: removed }); - if (this.rangeCount === 0 && this.inMultiSelectMode) { - this.inMultiSelectMode = false; - this._signal("singleSelect"); - this.session.$undoSelect = true; - this.rangeList.detach(this.session); - } - lastRange = lastRange || this.ranges[0]; - if (lastRange && !lastRange.isEqual(this.getRange())) - this.fromOrientedRange(lastRange); - }; - this.$initRangeList = function () { - if (this.rangeList) - return; - this.rangeList = new RangeList(); - this.ranges = []; - this.rangeCount = 0; - }; - this.getAllRanges = function () { - return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; - }; - this.splitIntoLines = function () { - var ranges = this.ranges.length ? this.ranges : [this.getRange()]; - var newRanges = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - var row = range.start.row; - var endRow = range.end.row; - if (row === endRow) { - newRanges.push(range.clone()); - } - else { - newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length)); - while (++row < endRow) - newRanges.push(this.getLineRange(row, true)); - newRanges.push(new Range(endRow, 0, endRow, range.end.column)); - } - if (i == 0 && !this.isBackwards()) - newRanges = newRanges.reverse(); - } - this.toSingleRange(); - for (var i = newRanges.length; i--;) - this.addRange(newRanges[i]); - }; - this.joinSelections = function () { - var ranges = this.rangeList.ranges; - var lastRange = ranges[ranges.length - 1]; - var range = Range.fromPoints(ranges[0].start, lastRange.end); - this.toSingleRange(); - this.setSelectionRange(range, lastRange.cursor == lastRange.start); - }; - this.toggleBlockSelection = function () { - if (this.rangeCount > 1) { - var ranges = this.rangeList.ranges; - var lastRange = ranges[ranges.length - 1]; - var range = Range.fromPoints(ranges[0].start, lastRange.end); - this.toSingleRange(); - this.setSelectionRange(range, lastRange.cursor == lastRange.start); - } - else { - var cursor = this.session.documentToScreenPosition(this.cursor); - var anchor = this.session.documentToScreenPosition(this.anchor); - var rectSel = this.rectangularRangeBlock(cursor, anchor); - rectSel.forEach(this.addRange, this); - } - }; - this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) { - var rectSel = []; - var xBackwards = screenCursor.column < screenAnchor.column; - if (xBackwards) { - var startColumn = screenCursor.column; - var endColumn = screenAnchor.column; - var startOffsetX = screenCursor.offsetX; - var endOffsetX = screenAnchor.offsetX; - } - else { - var startColumn = screenAnchor.column; - var endColumn = screenCursor.column; - var startOffsetX = screenAnchor.offsetX; - var endOffsetX = screenCursor.offsetX; - } - var yBackwards = screenCursor.row < screenAnchor.row; - if (yBackwards) { - var startRow = screenCursor.row; - var endRow = screenAnchor.row; - } - else { - var startRow = screenAnchor.row; - var endRow = screenCursor.row; - } - if (startColumn < 0) - startColumn = 0; - if (startRow < 0) - startRow = 0; - if (startRow == endRow) - includeEmptyLines = true; - var docEnd; - for (var row = startRow; row <= endRow; row++) { - var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX)); - if (range.isEmpty()) { - if (docEnd && isSamePoint(range.end, docEnd)) - break; - docEnd = range.end; - } - range.cursor = xBackwards ? range.start : range.end; - rectSel.push(range); - } - if (yBackwards) - rectSel.reverse(); - if (!includeEmptyLines) { - var end = rectSel.length - 1; - while (rectSel[end].isEmpty() && end > 0) - end--; - if (end > 0) { - var start = 0; - while (rectSel[start].isEmpty()) - start++; - } - for (var i = end; i >= start; i--) { - if (rectSel[i].isEmpty()) - rectSel.splice(i, 1); - } - } - return rectSel; - }; -}).call(Selection.prototype); -var Editor = require("./editor").Editor; -(function () { - this.updateSelectionMarkers = function () { - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - this.addSelectionMarker = function (orientedRange) { - if (!orientedRange.cursor) - orientedRange.cursor = orientedRange.end; - var style = this.getSelectionStyle(); - orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); - this.session.$selectionMarkers.push(orientedRange); - this.session.selectionMarkerCount = this.session.$selectionMarkers.length; - return orientedRange; - }; - this.removeSelectionMarker = function (range) { - if (!range.marker) - return; - this.session.removeMarker(range.marker); - var index = this.session.$selectionMarkers.indexOf(range); - if (index != -1) - this.session.$selectionMarkers.splice(index, 1); - this.session.selectionMarkerCount = this.session.$selectionMarkers.length; - }; - this.removeSelectionMarkers = function (ranges) { - var markerList = this.session.$selectionMarkers; - for (var i = ranges.length; i--;) { - var range = ranges[i]; - if (!range.marker) - continue; - this.session.removeMarker(range.marker); - var index = markerList.indexOf(range); - if (index != -1) - markerList.splice(index, 1); - } - this.session.selectionMarkerCount = markerList.length; - }; - this.$onAddRange = function (e) { - this.addSelectionMarker(e.range); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - this.$onRemoveRange = function (e) { - this.removeSelectionMarkers(e.ranges); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - this.$onMultiSelect = function (e) { - if (this.inMultiSelectMode) - return; - this.inMultiSelectMode = true; - this.setStyle("ace_multiselect"); - this.keyBinding.addKeyboardHandler(commands.keyboardHandler); - this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - this.$onSingleSelect = function (e) { - if (this.session.multiSelect.inVirtualMode) - return; - this.inMultiSelectMode = false; - this.unsetStyle("ace_multiselect"); - this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); - this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - this._emit("changeSelection"); - }; - this.$onMultiSelectExec = function (e) { - var command = e.command; - var editor = e.editor; - if (!editor.multiSelect) - return; - if (!command.multiSelectAction) { - var result = command.exec(editor, e.args || {}); - editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); - editor.multiSelect.mergeOverlappingRanges(); - } - else if (command.multiSelectAction == "forEach") { - result = editor.forEachSelection(command, e.args); - } - else if (command.multiSelectAction == "forEachLine") { - result = editor.forEachSelection(command, e.args, true); +ShadowViewport.prototype.updateCache = function(newCTM) { + this.activeState.zoom = newCTM.a; + this.activeState.x = newCTM.e; + this.activeState.y = newCTM.f; +}; + +ShadowViewport.prototype.pendingUpdate = false; + +/** + * Place a request to update CTM on next Frame + */ +ShadowViewport.prototype.updateCTMOnNextFrame = function() { + if (!this.pendingUpdate) { + // Lock + this.pendingUpdate = true; + + // Throttle next update + this.requestAnimationFrame.call(window, this.updateCTMCached); + } +}; + +/** + * Update viewport CTM with cached CTM + */ +ShadowViewport.prototype.updateCTM = function() { + var ctm = this.getCTM(); + + // Updates SVG element + SvgUtils.setCTM(this.viewport, ctm, this.defs); + + // Free the lock + this.pendingUpdate = false; + + // Notify about the update + if (this.options.onUpdatedCTM) { + this.options.onUpdatedCTM(ctm); + } +}; + +module.exports = function(viewport, options) { + return new ShadowViewport(viewport, options); +}; + + +/***/ }), + +/***/ "../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js": +/*!***********************************************************!*\ + !*** ../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Wheel = __webpack_require__(/*! ./uniwheel */ "../../node_modules/svg-pan-zoom/src/uniwheel.js"), + ControlIcons = __webpack_require__(/*! ./control-icons */ "../../node_modules/svg-pan-zoom/src/control-icons.js"), + Utils = __webpack_require__(/*! ./utilities */ "../../node_modules/svg-pan-zoom/src/utilities.js"), + SvgUtils = __webpack_require__(/*! ./svg-utilities */ "../../node_modules/svg-pan-zoom/src/svg-utilities.js"), + ShadowViewport = __webpack_require__(/*! ./shadow-viewport */ "../../node_modules/svg-pan-zoom/src/shadow-viewport.js"); + +var SvgPanZoom = function(svg, options) { + this.init(svg, options); +}; + +var optionsDefaults = { + viewportSelector: ".svg-pan-zoom_viewport", // Viewport selector. Can be querySelector string or SVGElement + panEnabled: true, // enable or disable panning (default enabled) + controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled) + zoomEnabled: true, // enable or disable zooming (default enabled) + dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled) + mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled) + preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events + zoomScaleSensitivity: 0.1, // Zoom sensitivity + minZoom: 0.5, // Minimum Zoom level + maxZoom: 10, // Maximum Zoom level + fit: true, // enable or disable viewport fit in SVG (default true) + contain: false, // enable or disable viewport contain the svg (default false) + center: true, // enable or disable viewport centering in SVG (default true) + refreshRate: "auto", // Maximum number of frames per second (altering SVG's viewport) + beforeZoom: null, + onZoom: null, + beforePan: null, + onPan: null, + customEventsHandler: null, + eventsListenerElement: null, + onUpdatedCTM: null +}; + +var passiveListenerOption = { passive: true }; + +SvgPanZoom.prototype.init = function(svg, options) { + var that = this; + + this.svg = svg; + this.defs = svg.querySelector("defs"); + + // Add default attributes to SVG + SvgUtils.setupSvgAttributes(this.svg); + + // Set options + this.options = Utils.extend(Utils.extend({}, optionsDefaults), options); + + // Set default state + this.state = "none"; + + // Get dimensions + var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized( + svg + ); + this.width = boundingClientRectNormalized.width; + this.height = boundingClientRectNormalized.height; + + // Init shadow viewport + this.viewport = ShadowViewport( + SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector), + { + svg: this.svg, + width: this.width, + height: this.height, + fit: this.options.fit, + contain: this.options.contain, + center: this.options.center, + refreshRate: this.options.refreshRate, + // Put callbacks into functions as they can change through time + beforeZoom: function(oldScale, newScale) { + if (that.viewport && that.options.beforeZoom) { + return that.options.beforeZoom(oldScale, newScale); } - else if (command.multiSelectAction == "single") { - editor.exitMultiSelectMode(); - result = command.exec(editor, e.args || {}); + }, + onZoom: function(scale) { + if (that.viewport && that.options.onZoom) { + return that.options.onZoom(scale); } - else { - result = command.multiSelectAction(editor, e.args || {}); + }, + beforePan: function(oldPoint, newPoint) { + if (that.viewport && that.options.beforePan) { + return that.options.beforePan(oldPoint, newPoint); } - return result; - }; - this.forEachSelection = function (cmd, args, options) { - if (this.inVirtualSelectionMode) - return; - var keepOrder = options && options.keepOrder; - var $byLines = options == true || options && options.$byLines; - var session = this.session; - var selection = this.selection; - var rangeList = selection.rangeList; - var ranges = (keepOrder ? selection : rangeList).ranges; - var result; - if (!ranges.length) - return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); - var reg = selection._eventRegistry; - selection._eventRegistry = {}; - var tmpSel = new Selection(session); - this.inVirtualSelectionMode = true; - for (var i = ranges.length; i--;) { - if ($byLines) { - while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) - i--; - } - tmpSel.fromOrientedRange(ranges[i]); - tmpSel.index = i; - this.selection = session.selection = tmpSel; - var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); - if (!result && cmdResult !== undefined) - result = cmdResult; - tmpSel.toOrientedRange(ranges[i]); + }, + onPan: function(point) { + if (that.viewport && that.options.onPan) { + return that.options.onPan(point); } - tmpSel.detach(); - this.selection = session.selection = selection; - this.inVirtualSelectionMode = false; - selection._eventRegistry = reg; - selection.mergeOverlappingRanges(); - if (selection.ranges[0]) - selection.fromOrientedRange(selection.ranges[0]); - var anim = this.renderer.$scrollAnimation; - this.onCursorChange(); - this.onSelectionChange(); - if (anim && anim.from == anim.to) - this.renderer.animateScrolling(anim.from); - return result; - }; - this.exitMultiSelectMode = function () { - if (!this.inMultiSelectMode || this.inVirtualSelectionMode) - return; - this.multiSelect.toSingleRange(); - }; - this.getSelectedText = function () { - var text = ""; - if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { - var ranges = this.multiSelect.rangeList.ranges; - var buf = []; - for (var i = 0; i < ranges.length; i++) { - buf.push(this.session.getTextRange(ranges[i])); - } - var nl = this.session.getDocument().getNewLineCharacter(); - text = buf.join(nl); - if (text.length == (buf.length - 1) * nl.length) - text = ""; + }, + onUpdatedCTM: function(ctm) { + if (that.viewport && that.options.onUpdatedCTM) { + return that.options.onUpdatedCTM(ctm); } - else if (!this.selection.isEmpty()) { - text = this.session.getTextRange(this.getSelectionRange()); + } + } + ); + + // Wrap callbacks into public API context + var publicInstance = this.getPublicInstance(); + publicInstance.setBeforeZoom(this.options.beforeZoom); + publicInstance.setOnZoom(this.options.onZoom); + publicInstance.setBeforePan(this.options.beforePan); + publicInstance.setOnPan(this.options.onPan); + publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM); + + if (this.options.controlIconsEnabled) { + ControlIcons.enable(this); + } + + // Init events handlers + this.lastMouseWheelEventTime = Date.now(); + this.setupHandlers(); +}; + +/** + * Register event handlers + */ +SvgPanZoom.prototype.setupHandlers = function() { + var that = this, + prevEvt = null; // use for touchstart event to detect double tap + + this.eventListeners = { + // Mouse down group + mousedown: function(evt) { + var result = that.handleMouseDown(evt, prevEvt); + prevEvt = evt; + return result; + }, + touchstart: function(evt) { + var result = that.handleMouseDown(evt, prevEvt); + prevEvt = evt; + return result; + }, + + // Mouse up group + mouseup: function(evt) { + return that.handleMouseUp(evt); + }, + touchend: function(evt) { + return that.handleMouseUp(evt); + }, + + // Mouse move group + mousemove: function(evt) { + return that.handleMouseMove(evt); + }, + touchmove: function(evt) { + return that.handleMouseMove(evt); + }, + + // Mouse leave group + mouseleave: function(evt) { + return that.handleMouseUp(evt); + }, + touchleave: function(evt) { + return that.handleMouseUp(evt); + }, + touchcancel: function(evt) { + return that.handleMouseUp(evt); + } + }; + + // Init custom events handler if available + // eslint-disable-next-line eqeqeq + if (this.options.customEventsHandler != null) { + this.options.customEventsHandler.init({ + svgElement: this.svg, + eventsListenerElement: this.options.eventsListenerElement, + instance: this.getPublicInstance() + }); + + // Custom event handler may halt builtin listeners + var haltEventListeners = this.options.customEventsHandler + .haltEventListeners; + if (haltEventListeners && haltEventListeners.length) { + for (var i = haltEventListeners.length - 1; i >= 0; i--) { + if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) { + delete this.eventListeners[haltEventListeners[i]]; } - return text; + } + } + } + + // Bind eventListeners + for (var event in this.eventListeners) { + // Attach event to eventsListenerElement or SVG if not available + (this.options.eventsListenerElement || this.svg).addEventListener( + event, + this.eventListeners[event], + !this.options.preventMouseEventsDefault ? passiveListenerOption : false + ); + } + + // Zoom using mouse wheel + if (this.options.mouseWheelZoomEnabled) { + this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true + this.enableMouseWheelZoom(); + } +}; + +/** + * Enable ability to zoom using mouse wheel + */ +SvgPanZoom.prototype.enableMouseWheelZoom = function() { + if (!this.options.mouseWheelZoomEnabled) { + var that = this; + + // Mouse wheel listener + this.wheelListener = function(evt) { + return that.handleMouseWheel(evt); }; - this.$checkMultiselectChange = function (e, anchor) { - if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { - var range = this.multiSelect.ranges[0]; - if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) - return; - var pos = anchor == this.multiSelect.anchor - ? range.cursor == range.start ? range.end : range.start - : range.cursor; - if (pos.row != anchor.row - || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) - this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()); - else - this.multiSelect.mergeOverlappingRanges(); + + // Bind wheelListener + var isPassiveListener = !this.options.preventMouseEventsDefault; + Wheel.on( + this.options.eventsListenerElement || this.svg, + this.wheelListener, + isPassiveListener + ); + + this.options.mouseWheelZoomEnabled = true; + } +}; + +/** + * Disable ability to zoom using mouse wheel + */ +SvgPanZoom.prototype.disableMouseWheelZoom = function() { + if (this.options.mouseWheelZoomEnabled) { + var isPassiveListener = !this.options.preventMouseEventsDefault; + Wheel.off( + this.options.eventsListenerElement || this.svg, + this.wheelListener, + isPassiveListener + ); + this.options.mouseWheelZoomEnabled = false; + } +}; + +/** + * Handle mouse wheel event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseWheel = function(evt) { + if (!this.options.zoomEnabled || this.state !== "none") { + return; + } + + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + // Default delta in case that deltaY is not available + var delta = evt.deltaY || 1, + timeDelta = Date.now() - this.lastMouseWheelEventTime, + divider = 3 + Math.max(0, 30 - timeDelta); + + // Update cache + this.lastMouseWheelEventTime = Date.now(); + + // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0) + if ("deltaMode" in evt && evt.deltaMode === 0 && evt.wheelDelta) { + delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY; + } + + delta = + -0.3 < delta && delta < 0.3 + ? delta + : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider; + + var inversedScreenCTM = this.svg.getScreenCTM().inverse(), + relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform( + inversedScreenCTM + ), + zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior + + this.zoomAtPoint(zoom, relativeMousePoint); +}; + +/** + * Zoom in at a SVG point + * + * @param {SVGPoint} point + * @param {Float} zoomScale Number representing how much to zoom + * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value. + * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%) + */ +SvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) { + var originalState = this.viewport.getOriginalState(); + + if (!zoomAbsolute) { + // Fit zoomScale in set bounds + if ( + this.getZoom() * zoomScale < + this.options.minZoom * originalState.zoom + ) { + zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom(); + } else if ( + this.getZoom() * zoomScale > + this.options.maxZoom * originalState.zoom + ) { + zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom(); + } + } else { + // Fit zoomScale in set bounds + zoomScale = Math.max( + this.options.minZoom * originalState.zoom, + Math.min(this.options.maxZoom * originalState.zoom, zoomScale) + ); + // Find relative scale to achieve desired scale + zoomScale = zoomScale / this.getZoom(); + } + + var oldCTM = this.viewport.getCTM(), + relativePoint = point.matrixTransform(oldCTM.inverse()), + modifier = this.svg + .createSVGMatrix() + .translate(relativePoint.x, relativePoint.y) + .scale(zoomScale) + .translate(-relativePoint.x, -relativePoint.y), + newCTM = oldCTM.multiply(modifier); + + if (newCTM.a !== oldCTM.a) { + this.viewport.setCTM(newCTM); + } +}; + +/** + * Zoom at center point + * + * @param {Float} scale + * @param {Boolean} absolute Marks zoom scale as relative or absolute + */ +SvgPanZoom.prototype.zoom = function(scale, absolute) { + this.zoomAtPoint( + scale, + SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height), + absolute + ); +}; + +/** + * Zoom used by public instance + * + * @param {Float} scale + * @param {Boolean} absolute Marks zoom scale as relative or absolute + */ +SvgPanZoom.prototype.publicZoom = function(scale, absolute) { + if (absolute) { + scale = this.computeFromRelativeZoom(scale); + } + + this.zoom(scale, absolute); +}; + +/** + * Zoom at point used by public instance + * + * @param {Float} scale + * @param {SVGPoint|Object} point An object that has x and y attributes + * @param {Boolean} absolute Marks zoom scale as relative or absolute + */ +SvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) { + if (absolute) { + // Transform zoom into a relative value + scale = this.computeFromRelativeZoom(scale); + } + + // If not a SVGPoint but has x and y then create a SVGPoint + if (Utils.getType(point) !== "SVGPoint") { + if ("x" in point && "y" in point) { + point = SvgUtils.createSVGPoint(this.svg, point.x, point.y); + } else { + throw new Error("Given point is invalid"); + } + } + + this.zoomAtPoint(scale, point, absolute); +}; + +/** + * Get zoom scale + * + * @return {Float} zoom scale + */ +SvgPanZoom.prototype.getZoom = function() { + return this.viewport.getZoom(); +}; + +/** + * Get zoom scale for public usage + * + * @return {Float} zoom scale + */ +SvgPanZoom.prototype.getRelativeZoom = function() { + return this.viewport.getRelativeZoom(); +}; + +/** + * Compute actual zoom from public zoom + * + * @param {Float} zoom + * @return {Float} zoom scale + */ +SvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) { + return zoom * this.viewport.getOriginalState().zoom; +}; + +/** + * Set zoom to initial state + */ +SvgPanZoom.prototype.resetZoom = function() { + var originalState = this.viewport.getOriginalState(); + + this.zoom(originalState.zoom, true); +}; + +/** + * Set pan to initial state + */ +SvgPanZoom.prototype.resetPan = function() { + this.pan(this.viewport.getOriginalState()); +}; + +/** + * Set pan and zoom to initial state + */ +SvgPanZoom.prototype.reset = function() { + this.resetZoom(); + this.resetPan(); +}; + +/** + * Handle double click event + * See handleMouseDown() for alternate detection method + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleDblClick = function(evt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + // Check if target was a control button + if (this.options.controlIconsEnabled) { + var targetClass = evt.target.getAttribute("class") || ""; + if (targetClass.indexOf("svg-pan-zoom-control") > -1) { + return false; + } + } + + var zoomFactor; + + if (evt.shiftKey) { + zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed + } else { + zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2; + } + + var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform( + this.svg.getScreenCTM().inverse() + ); + this.zoomAtPoint(zoomFactor, point); +}; + +/** + * Handle click event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + Utils.mouseAndTouchNormalize(evt, this.svg); + + // Double click detection; more consistent than ondblclick + if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) { + this.handleDblClick(evt); + } else { + // Pan mode + this.state = "pan"; + this.firstEventCTM = this.viewport.getCTM(); + this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform( + this.firstEventCTM.inverse() + ); + } +}; + +/** + * Handle mouse move event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseMove = function(evt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + if (this.state === "pan" && this.options.panEnabled) { + // Pan mode + var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform( + this.firstEventCTM.inverse() + ), + viewportCTM = this.firstEventCTM.translate( + point.x - this.stateOrigin.x, + point.y - this.stateOrigin.y + ); + + this.viewport.setCTM(viewportCTM); + } +}; + +/** + * Handle mouse button release event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseUp = function(evt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + if (this.state === "pan") { + // Quit pan mode + this.state = "none"; + } +}; + +/** + * Adjust viewport size (only) so it will fit in SVG + * Does not center image + */ +SvgPanZoom.prototype.fit = function() { + var viewBox = this.viewport.getViewBox(), + newScale = Math.min( + this.width / viewBox.width, + this.height / viewBox.height + ); + + this.zoom(newScale, true); +}; + +/** + * Adjust viewport size (only) so it will contain the SVG + * Does not center image + */ +SvgPanZoom.prototype.contain = function() { + var viewBox = this.viewport.getViewBox(), + newScale = Math.max( + this.width / viewBox.width, + this.height / viewBox.height + ); + + this.zoom(newScale, true); +}; + +/** + * Adjust viewport pan (only) so it will be centered in SVG + * Does not zoom/fit/contain image + */ +SvgPanZoom.prototype.center = function() { + var viewBox = this.viewport.getViewBox(), + offsetX = + (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5, + offsetY = + (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5; + + this.getPublicInstance().pan({ x: offsetX, y: offsetY }); +}; + +/** + * Update content cached BorderBox + * Use when viewport contents change + */ +SvgPanZoom.prototype.updateBBox = function() { + this.viewport.simpleViewBoxCache(); +}; + +/** + * Pan to a rendered position + * + * @param {Object} point {x: 0, y: 0} + */ +SvgPanZoom.prototype.pan = function(point) { + var viewportCTM = this.viewport.getCTM(); + viewportCTM.e = point.x; + viewportCTM.f = point.y; + this.viewport.setCTM(viewportCTM); +}; + +/** + * Relatively pan the graph by a specified rendered position vector + * + * @param {Object} point {x: 0, y: 0} + */ +SvgPanZoom.prototype.panBy = function(point) { + var viewportCTM = this.viewport.getCTM(); + viewportCTM.e += point.x; + viewportCTM.f += point.y; + this.viewport.setCTM(viewportCTM); +}; + +/** + * Get pan vector + * + * @return {Object} {x: 0, y: 0} + */ +SvgPanZoom.prototype.getPan = function() { + var state = this.viewport.getState(); + + return { x: state.x, y: state.y }; +}; + +/** + * Recalculates cached svg dimensions and controls position + */ +SvgPanZoom.prototype.resize = function() { + // Get dimensions + var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized( + this.svg + ); + this.width = boundingClientRectNormalized.width; + this.height = boundingClientRectNormalized.height; + + // Recalculate original state + var viewport = this.viewport; + viewport.options.width = this.width; + viewport.options.height = this.height; + viewport.processCTM(); + + // Reposition control icons by re-enabling them + if (this.options.controlIconsEnabled) { + this.getPublicInstance().disableControlIcons(); + this.getPublicInstance().enableControlIcons(); + } +}; + +/** + * Unbind mouse events, free callbacks and destroy public instance + */ +SvgPanZoom.prototype.destroy = function() { + var that = this; + + // Free callbacks + this.beforeZoom = null; + this.onZoom = null; + this.beforePan = null; + this.onPan = null; + this.onUpdatedCTM = null; + + // Destroy custom event handlers + // eslint-disable-next-line eqeqeq + if (this.options.customEventsHandler != null) { + this.options.customEventsHandler.destroy({ + svgElement: this.svg, + eventsListenerElement: this.options.eventsListenerElement, + instance: this.getPublicInstance() + }); + } + + // Unbind eventListeners + for (var event in this.eventListeners) { + (this.options.eventsListenerElement || this.svg).removeEventListener( + event, + this.eventListeners[event], + !this.options.preventMouseEventsDefault ? passiveListenerOption : false + ); + } + + // Unbind wheelListener + this.disableMouseWheelZoom(); + + // Remove control icons + this.getPublicInstance().disableControlIcons(); + + // Reset zoom and pan + this.reset(); + + // Remove instance from instancesStore + instancesStore = instancesStore.filter(function(instance) { + return instance.svg !== that.svg; + }); + + // Delete options and its contents + delete this.options; + + // Delete viewport to make public shadow viewport functions uncallable + delete this.viewport; + + // Destroy public instance and rewrite getPublicInstance + delete this.publicInstance; + delete this.pi; + this.getPublicInstance = function() { + return null; + }; +}; + +/** + * Returns a public instance object + * + * @return {Object} Public instance object + */ +SvgPanZoom.prototype.getPublicInstance = function() { + var that = this; + + // Create cache + if (!this.publicInstance) { + this.publicInstance = this.pi = { + // Pan + enablePan: function() { + that.options.panEnabled = true; + return that.pi; + }, + disablePan: function() { + that.options.panEnabled = false; + return that.pi; + }, + isPanEnabled: function() { + return !!that.options.panEnabled; + }, + pan: function(point) { + that.pan(point); + return that.pi; + }, + panBy: function(point) { + that.panBy(point); + return that.pi; + }, + getPan: function() { + return that.getPan(); + }, + // Pan event + setBeforePan: function(fn) { + that.options.beforePan = + fn === null ? null : Utils.proxy(fn, that.publicInstance); + return that.pi; + }, + setOnPan: function(fn) { + that.options.onPan = + fn === null ? null : Utils.proxy(fn, that.publicInstance); + return that.pi; + }, + // Zoom and Control Icons + enableZoom: function() { + that.options.zoomEnabled = true; + return that.pi; + }, + disableZoom: function() { + that.options.zoomEnabled = false; + return that.pi; + }, + isZoomEnabled: function() { + return !!that.options.zoomEnabled; + }, + enableControlIcons: function() { + if (!that.options.controlIconsEnabled) { + that.options.controlIconsEnabled = true; + ControlIcons.enable(that); } - }; - this.findAll = function (needle, options, additive) { - options = options || {}; - options.needle = needle || options.needle; - if (options.needle == undefined) { - var range = this.selection.isEmpty() - ? this.selection.getWordRange() - : this.selection.getRange(); - options.needle = this.session.getTextRange(range); + return that.pi; + }, + disableControlIcons: function() { + if (that.options.controlIconsEnabled) { + that.options.controlIconsEnabled = false; + ControlIcons.disable(that); } - this.$search.set(options); - var ranges = this.$search.findAll(this.session); - if (!ranges.length) - return 0; - var selection = this.multiSelect; - if (!additive) - selection.toSingleRange(ranges[0]); - for (var i = ranges.length; i--;) - selection.addRange(ranges[i], true); - if (range && selection.rangeList.rangeAtPoint(range.start)) - selection.addRange(range, true); - return ranges.length; + return that.pi; + }, + isControlIconsEnabled: function() { + return !!that.options.controlIconsEnabled; + }, + // Double click zoom + enableDblClickZoom: function() { + that.options.dblClickZoomEnabled = true; + return that.pi; + }, + disableDblClickZoom: function() { + that.options.dblClickZoomEnabled = false; + return that.pi; + }, + isDblClickZoomEnabled: function() { + return !!that.options.dblClickZoomEnabled; + }, + // Mouse wheel zoom + enableMouseWheelZoom: function() { + that.enableMouseWheelZoom(); + return that.pi; + }, + disableMouseWheelZoom: function() { + that.disableMouseWheelZoom(); + return that.pi; + }, + isMouseWheelZoomEnabled: function() { + return !!that.options.mouseWheelZoomEnabled; + }, + // Zoom scale and bounds + setZoomScaleSensitivity: function(scale) { + that.options.zoomScaleSensitivity = scale; + return that.pi; + }, + setMinZoom: function(zoom) { + that.options.minZoom = zoom; + return that.pi; + }, + setMaxZoom: function(zoom) { + that.options.maxZoom = zoom; + return that.pi; + }, + // Zoom event + setBeforeZoom: function(fn) { + that.options.beforeZoom = + fn === null ? null : Utils.proxy(fn, that.publicInstance); + return that.pi; + }, + setOnZoom: function(fn) { + that.options.onZoom = + fn === null ? null : Utils.proxy(fn, that.publicInstance); + return that.pi; + }, + // Zooming + zoom: function(scale) { + that.publicZoom(scale, true); + return that.pi; + }, + zoomBy: function(scale) { + that.publicZoom(scale, false); + return that.pi; + }, + zoomAtPoint: function(scale, point) { + that.publicZoomAtPoint(scale, point, true); + return that.pi; + }, + zoomAtPointBy: function(scale, point) { + that.publicZoomAtPoint(scale, point, false); + return that.pi; + }, + zoomIn: function() { + this.zoomBy(1 + that.options.zoomScaleSensitivity); + return that.pi; + }, + zoomOut: function() { + this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity)); + return that.pi; + }, + getZoom: function() { + return that.getRelativeZoom(); + }, + // CTM update + setOnUpdatedCTM: function(fn) { + that.options.onUpdatedCTM = + fn === null ? null : Utils.proxy(fn, that.publicInstance); + return that.pi; + }, + // Reset + resetZoom: function() { + that.resetZoom(); + return that.pi; + }, + resetPan: function() { + that.resetPan(); + return that.pi; + }, + reset: function() { + that.reset(); + return that.pi; + }, + // Fit, Contain and Center + fit: function() { + that.fit(); + return that.pi; + }, + contain: function() { + that.contain(); + return that.pi; + }, + center: function() { + that.center(); + return that.pi; + }, + // Size and Resize + updateBBox: function() { + that.updateBBox(); + return that.pi; + }, + resize: function() { + that.resize(); + return that.pi; + }, + getSizes: function() { + return { + width: that.width, + height: that.height, + realZoom: that.getZoom(), + viewBox: that.viewport.getViewBox() + }; + }, + // Destroy + destroy: function() { + that.destroy(); + return that.pi; + } }; - this.selectMoreLines = function (dir, skip) { - var range = this.selection.toOrientedRange(); - var isBackwards = range.cursor == range.end; - var screenLead = this.session.documentToScreenPosition(range.cursor); - if (this.selection.$desiredColumn) - screenLead.column = this.selection.$desiredColumn; - var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); - if (!range.isEmpty()) { - var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); - var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); - } - else { - var anchor = lead; - } - if (isBackwards) { - var newRange = Range.fromPoints(lead, anchor); - newRange.cursor = newRange.start; - } - else { - var newRange = Range.fromPoints(anchor, lead); - newRange.cursor = newRange.end; - } - newRange.desiredColumn = screenLead.column; - if (!this.selection.inMultiSelectMode) { - this.selection.addRange(range); + } + + return this.publicInstance; +}; + +/** + * Stores pairs of instances of SvgPanZoom and SVG + * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom} + * + * @type {Array} + */ +var instancesStore = []; + +var svgPanZoom = function(elementOrSelector, options) { + var svg = Utils.getSvg(elementOrSelector); + + if (svg === null) { + return null; + } else { + // Look for existent instance + for (var i = instancesStore.length - 1; i >= 0; i--) { + if (instancesStore[i].svg === svg) { + return instancesStore[i].instance.getPublicInstance(); + } + } + + // If instance not found - create one + instancesStore.push({ + svg: svg, + instance: new SvgPanZoom(svg, options) + }); + + // Return just pushed instance + return instancesStore[ + instancesStore.length - 1 + ].instance.getPublicInstance(); + } +}; + +module.exports = svgPanZoom; + + +/***/ }), + +/***/ "../../node_modules/svg-pan-zoom/src/svg-utilities.js": +/*!************************************************************!*\ + !*** ../../node_modules/svg-pan-zoom/src/svg-utilities.js ***! + \************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +var Utils = __webpack_require__(/*! ./utilities */ "../../node_modules/svg-pan-zoom/src/utilities.js"), + _browser = "unknown"; + +// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser +if (/*@cc_on!@*/ false || !!document.documentMode) { + // internet explorer + _browser = "ie"; +} + +module.exports = { + svgNS: "http://www.w3.org/2000/svg", + xmlNS: "http://www.w3.org/XML/1998/namespace", + xmlnsNS: "http://www.w3.org/2000/xmlns/", + xlinkNS: "http://www.w3.org/1999/xlink", + evNS: "http://www.w3.org/2001/xml-events", + + /** + * Get svg dimensions: width and height + * + * @param {SVGSVGElement} svg + * @return {Object} {width: 0, height: 0} + */ + getBoundingClientRectNormalized: function(svg) { + if (svg.clientWidth && svg.clientHeight) { + return { width: svg.clientWidth, height: svg.clientHeight }; + } else if (!!svg.getBoundingClientRect()) { + return svg.getBoundingClientRect(); + } else { + throw new Error("Cannot get BoundingClientRect for SVG."); + } + }, + + /** + * Gets g element with class of "viewport" or creates it if it doesn't exist + * + * @param {SVGSVGElement} svg + * @return {SVGElement} g (group) element + */ + getOrCreateViewport: function(svg, selector) { + var viewport = null; + + if (Utils.isElement(selector)) { + viewport = selector; + } else { + viewport = svg.querySelector(selector); + } + + // Check if there is just one main group in SVG + if (!viewport) { + var childNodes = Array.prototype.slice + .call(svg.childNodes || svg.children) + .filter(function(el) { + return el.nodeName !== "defs" && el.nodeName !== "#text"; + }); + + // Node name should be SVGGElement and should have no transform attribute + // Groups with transform are not used as viewport because it involves parsing of all transform possibilities + if ( + childNodes.length === 1 && + childNodes[0].nodeName === "g" && + childNodes[0].getAttribute("transform") === null + ) { + viewport = childNodes[0]; + } + } + + // If no favorable group element exists then create one + if (!viewport) { + var viewportId = + "viewport-" + new Date().toISOString().replace(/\D/g, ""); + viewport = document.createElementNS(this.svgNS, "g"); + viewport.setAttribute("id", viewportId); + + // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes + var svgChildren = svg.childNodes || svg.children; + if (!!svgChildren && svgChildren.length > 0) { + for (var i = svgChildren.length; i > 0; i--) { + // Move everything into viewport except defs + if (svgChildren[svgChildren.length - i].nodeName !== "defs") { + viewport.appendChild(svgChildren[svgChildren.length - i]); + } } - else { - if (skip) - var toRemove = range.cursor; + } + svg.appendChild(viewport); + } + + // Parse class names + var classNames = []; + if (viewport.getAttribute("class")) { + classNames = viewport.getAttribute("class").split(" "); + } + + // Set class (if not set already) + if (!~classNames.indexOf("svg-pan-zoom_viewport")) { + classNames.push("svg-pan-zoom_viewport"); + viewport.setAttribute("class", classNames.join(" ")); + } + + return viewport; + }, + + /** + * Set SVG attributes + * + * @param {SVGSVGElement} svg + */ + setupSvgAttributes: function(svg) { + // Setting default attributes + svg.setAttribute("xmlns", this.svgNS); + svg.setAttributeNS(this.xmlnsNS, "xmlns:xlink", this.xlinkNS); + svg.setAttributeNS(this.xmlnsNS, "xmlns:ev", this.evNS); + + // Needed for Internet Explorer, otherwise the viewport overflows + if (svg.parentNode !== null) { + var style = svg.getAttribute("style") || ""; + if (style.toLowerCase().indexOf("overflow") === -1) { + svg.setAttribute("style", "overflow: hidden; " + style); + } + } + }, + + /** + * How long Internet Explorer takes to finish updating its display (ms). + */ + internetExplorerRedisplayInterval: 300, + + /** + * Forces the browser to redisplay all SVG elements that rely on an + * element defined in a 'defs' section. It works globally, for every + * available defs element on the page. + * The throttling is intentionally global. + * + * This is only needed for IE. It is as a hack to make markers (and 'use' elements?) + * visible after pan/zoom when there are multiple SVGs on the page. + * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/ + * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62 + */ + refreshDefsGlobal: Utils.throttle( + function() { + var allDefs = document.querySelectorAll("defs"); + var allDefsCount = allDefs.length; + for (var i = 0; i < allDefsCount; i++) { + var thisDefs = allDefs[i]; + thisDefs.parentNode.insertBefore(thisDefs, thisDefs); + } + }, + this ? this.internetExplorerRedisplayInterval : null + ), + + /** + * Sets the current transform matrix of an element + * + * @param {SVGElement} element + * @param {SVGMatrix} matrix CTM + * @param {SVGElement} defs + */ + setCTM: function(element, matrix, defs) { + var that = this, + s = + "matrix(" + + matrix.a + + "," + + matrix.b + + "," + + matrix.c + + "," + + matrix.d + + "," + + matrix.e + + "," + + matrix.f + + ")"; + + element.setAttributeNS(null, "transform", s); + if ("transform" in element.style) { + element.style.transform = s; + } else if ("-ms-transform" in element.style) { + element.style["-ms-transform"] = s; + } else if ("-webkit-transform" in element.style) { + element.style["-webkit-transform"] = s; + } + + // IE has a bug that makes markers disappear on zoom (when the matrix "a" and/or "d" elements change) + // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10 + // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/ + if (_browser === "ie" && !!defs) { + // this refresh is intended for redisplaying the SVG during zooming + defs.parentNode.insertBefore(defs, defs); + // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG + // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that + // are located under any other element(s). + window.setTimeout(function() { + that.refreshDefsGlobal(); + }, that.internetExplorerRedisplayInterval); + } + }, + + /** + * Instantiate an SVGPoint object with given event coordinates + * + * @param {Event} evt + * @param {SVGSVGElement} svg + * @return {SVGPoint} point + */ + getEventPoint: function(evt, svg) { + var point = svg.createSVGPoint(); + + Utils.mouseAndTouchNormalize(evt, svg); + + point.x = evt.clientX; + point.y = evt.clientY; + + return point; + }, + + /** + * Get SVG center point + * + * @param {SVGSVGElement} svg + * @return {SVGPoint} + */ + getSvgCenterPoint: function(svg, width, height) { + return this.createSVGPoint(svg, width / 2, height / 2); + }, + + /** + * Create a SVGPoint with given x and y + * + * @param {SVGSVGElement} svg + * @param {Number} x + * @param {Number} y + * @return {SVGPoint} + */ + createSVGPoint: function(svg, x, y) { + var point = svg.createSVGPoint(); + point.x = x; + point.y = y; + + return point; + } +}; + + +/***/ }), + +/***/ "../../node_modules/svg-pan-zoom/src/uniwheel.js": +/*!*******************************************************!*\ + !*** ../../node_modules/svg-pan-zoom/src/uniwheel.js ***! + \*******************************************************/ +/***/ ((module) => { + +// uniwheel 0.1.2 (customized) +// A unified cross browser mouse wheel event handler +// https://github.com/teemualap/uniwheel + +module.exports = (function(){ + + //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel + + var prefix = "", _addEventListener, _removeEventListener, support, fns = []; + var passiveOption = {passive: true}; + + // detect event model + if ( window.addEventListener ) { + _addEventListener = "addEventListener"; + _removeEventListener = "removeEventListener"; + } else { + _addEventListener = "attachEvent"; + _removeEventListener = "detachEvent"; + prefix = "on"; + } + + // detect available wheel event + support = "onwheel" in document.createElement("div") ? "wheel" : // Modern browsers support "wheel" + document.onmousewheel !== undefined ? "mousewheel" : // Webkit and IE support at least "mousewheel" + "DOMMouseScroll"; // let's assume that remaining browsers are older Firefox + + + function createCallback(element,callback) { + + var fn = function(originalEvent) { + + !originalEvent && ( originalEvent = window.event ); + + // create a normalized event object + var event = { + // keep a ref to the original event object + originalEvent: originalEvent, + target: originalEvent.target || originalEvent.srcElement, + type: "wheel", + deltaMode: originalEvent.type == "MozMousePixelScroll" ? 0 : 1, + deltaX: 0, + delatZ: 0, + preventDefault: function() { + originalEvent.preventDefault ? + originalEvent.preventDefault() : + originalEvent.returnValue = false; } - this.selection.addRange(newRange); - if (toRemove) - this.selection.substractPoint(toRemove); + }; + + // calculate deltaY (and deltaX) according to the event + if ( support == "mousewheel" ) { + event.deltaY = - 1/40 * originalEvent.wheelDelta; + // Webkit also support wheelDeltaX + originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX ); + } else { + event.deltaY = originalEvent.detail; + } + + // it's time to fire the callback + return callback( event ); + }; - this.transposeSelections = function (dir) { - var session = this.session; - var sel = session.multiSelect; - var all = sel.ranges; - for (var i = all.length; i--;) { - var range = all[i]; - if (range.isEmpty()) { - var tmp_1 = session.getWordRange(range.start.row, range.start.column); - range.start.row = tmp_1.start.row; - range.start.column = tmp_1.start.column; - range.end.row = tmp_1.end.row; - range.end.column = tmp_1.end.column; - } - } - sel.mergeOverlappingRanges(); - var words = []; - for (var i = all.length; i--;) { - var range = all[i]; - words.unshift(session.getTextRange(range)); + + fns.push({ + element: element, + fn: fn, + }); + + return fn; + } + + function getCallback(element) { + for (var i = 0; i < fns.length; i++) { + if (fns[i].element === element) { + return fns[i].fn; + } + } + return function(){}; + } + + function removeCallback(element) { + for (var i = 0; i < fns.length; i++) { + if (fns[i].element === element) { + return fns.splice(i,1); + } + } + } + + function _addWheelListener(elem, eventName, callback, isPassiveListener ) { + var cb; + + if (support === "wheel") { + cb = callback; + } else { + cb = createCallback(elem, callback); + } + + elem[_addEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false); + } + + function _removeWheelListener(elem, eventName, callback, isPassiveListener ) { + + var cb; + + if (support === "wheel") { + cb = callback; + } else { + cb = getCallback(elem); + } + + elem[_removeEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false); + + removeCallback(elem); + } + + function addWheelListener( elem, callback, isPassiveListener ) { + _addWheelListener(elem, support, callback, isPassiveListener ); + + // handle MozMousePixelScroll in older Firefox + if( support == "DOMMouseScroll" ) { + _addWheelListener(elem, "MozMousePixelScroll", callback, isPassiveListener ); + } + } + + function removeWheelListener(elem, callback, isPassiveListener){ + _removeWheelListener(elem, support, callback, isPassiveListener); + + // handle MozMousePixelScroll in older Firefox + if( support == "DOMMouseScroll" ) { + _removeWheelListener(elem, "MozMousePixelScroll", callback, isPassiveListener); + } + } + + return { + on: addWheelListener, + off: removeWheelListener + }; + +})(); + + +/***/ }), + +/***/ "../../node_modules/svg-pan-zoom/src/utilities.js": +/*!********************************************************!*\ + !*** ../../node_modules/svg-pan-zoom/src/utilities.js ***! + \********************************************************/ +/***/ ((module) => { + +module.exports = { + /** + * Extends an object + * + * @param {Object} target object to extend + * @param {Object} source object to take properties from + * @return {Object} extended object + */ + extend: function(target, source) { + target = target || {}; + for (var prop in source) { + // Go recursively + if (this.isObject(source[prop])) { + target[prop] = this.extend(target[prop], source[prop]); + } else { + target[prop] = source[prop]; + } + } + return target; + }, + + /** + * Checks if an object is a DOM element + * + * @param {Object} o HTML element or String + * @return {Boolean} returns true if object is a DOM element + */ + isElement: function(o) { + return ( + o instanceof HTMLElement || + o instanceof SVGElement || + o instanceof SVGSVGElement || //DOM2 + (o && + typeof o === "object" && + o !== null && + o.nodeType === 1 && + typeof o.nodeName === "string") + ); + }, + + /** + * Checks if an object is an Object + * + * @param {Object} o Object + * @return {Boolean} returns true if object is an Object + */ + isObject: function(o) { + return Object.prototype.toString.call(o) === "[object Object]"; + }, + + /** + * Checks if variable is Number + * + * @param {Integer|Float} n + * @return {Boolean} returns true if variable is Number + */ + isNumber: function(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + }, + + /** + * Search for an SVG element + * + * @param {Object|String} elementOrSelector DOM Element or selector String + * @return {Object|Null} SVG or null + */ + getSvg: function(elementOrSelector) { + var element, svg; + + if (!this.isElement(elementOrSelector)) { + // If selector provided + if ( + typeof elementOrSelector === "string" || + elementOrSelector instanceof String + ) { + // Try to find the element + element = document.querySelector(elementOrSelector); + + if (!element) { + throw new Error( + "Provided selector did not find any elements. Selector: " + + elementOrSelector + ); + return null; } - if (dir < 0) - words.unshift(words.pop()); - else - words.push(words.shift()); - for (var i = all.length; i--;) { - var range = all[i]; - var tmp = range.clone(); - session.replace(range, words[i]); - range.start.row = tmp.start.row; - range.start.column = tmp.start.column; + } else { + throw new Error("Provided selector is not an HTML object nor String"); + return null; + } + } else { + element = elementOrSelector; + } + + if (element.tagName.toLowerCase() === "svg") { + svg = element; + } else { + if (element.tagName.toLowerCase() === "object") { + svg = element.contentDocument.documentElement; + } else { + if (element.tagName.toLowerCase() === "embed") { + svg = element.getSVGDocument().documentElement; + } else { + if (element.tagName.toLowerCase() === "img") { + throw new Error( + 'Cannot script an SVG in an "img" element. Please use an "object" element or an in-line SVG.' + ); + } else { + throw new Error("Cannot get SVG."); + } + return null; } - sel.fromOrientedRange(sel.ranges[0]); + } + } + + return svg; + }, + + /** + * Attach a given context to a function + * @param {Function} fn Function + * @param {Object} context Context + * @return {Function} Function with certain context + */ + proxy: function(fn, context) { + return function() { + return fn.apply(context, arguments); }; - this.selectMore = function (dir, skip, stopAtFirst) { - var session = this.session; - var sel = session.multiSelect; - var range = sel.toOrientedRange(); - if (range.isEmpty()) { - range = session.getWordRange(range.start.row, range.start.column); - range.cursor = dir == -1 ? range.start : range.end; - this.multiSelect.addRange(range); - if (stopAtFirst) - return; + }, + + /** + * Returns object type + * Uses toString that returns [object SVGPoint] + * And than parses object type from string + * + * @param {Object} o Any object + * @return {String} Object type + */ + getType: function(o) { + return Object.prototype.toString + .apply(o) + .replace(/^\[object\s/, "") + .replace(/\]$/, ""); + }, + + /** + * If it is a touch event than add clientX and clientY to event object + * + * @param {Event} evt + * @param {SVGSVGElement} svg + */ + mouseAndTouchNormalize: function(evt, svg) { + // If no clientX then fallback + if (evt.clientX === void 0 || evt.clientX === null) { + // Fallback + evt.clientX = 0; + evt.clientY = 0; + + // If it is a touch event + if (evt.touches !== void 0 && evt.touches.length) { + if (evt.touches[0].clientX !== void 0) { + evt.clientX = evt.touches[0].clientX; + evt.clientY = evt.touches[0].clientY; + } else if (evt.touches[0].pageX !== void 0) { + var rect = svg.getBoundingClientRect(); + + evt.clientX = evt.touches[0].pageX - rect.left; + evt.clientY = evt.touches[0].pageY - rect.top; } - var needle = session.getTextRange(range); - var newRange = find(session, needle, dir); - if (newRange) { - newRange.cursor = dir == -1 ? newRange.start : newRange.end; - this.session.unfold(newRange); - this.multiSelect.addRange(newRange); - this.renderer.scrollCursorIntoView(null, 0.5); + // If it is a custom event + } else if (evt.originalEvent !== void 0) { + if (evt.originalEvent.clientX !== void 0) { + evt.clientX = evt.originalEvent.clientX; + evt.clientY = evt.originalEvent.clientY; } - if (skip) - this.multiSelect.substractPoint(range.cursor); + } + } + }, + + /** + * Check if an event is a double click/tap + * TODO: For touch gestures use a library (hammer.js) that takes in account other events + * (touchmove and touchend). It should take in account tap duration and traveled distance + * + * @param {Event} evt + * @param {Event} prevEvt Previous Event + * @return {Boolean} + */ + isDblClick: function(evt, prevEvt) { + // Double click detected by browser + if (evt.detail === 2) { + return true; + } + // Try to compare events + else if (prevEvt !== void 0 && prevEvt !== null) { + var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms + touchesDistance = Math.sqrt( + Math.pow(evt.clientX - prevEvt.clientX, 2) + + Math.pow(evt.clientY - prevEvt.clientY, 2) + ); + + return timeStampDiff < 250 && touchesDistance < 10; + } + + // Nothing found + return false; + }, + + /** + * Returns current timestamp as an integer + * + * @return {Number} + */ + now: + Date.now || + function() { + return new Date().getTime(); + }, + + // From underscore. + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + throttle: function(func, wait, options) { + var that = this; + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) { + options = {}; + } + var later = function() { + previous = options.leading === false ? 0 : that.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) { + context = args = null; + } }; - this.alignCursors = function () { - var session = this.session; - var sel = session.multiSelect; - var ranges = sel.ranges; - var row = -1; - var sameRowRanges = ranges.filter(function (r) { - if (r.cursor.row == row) - return true; - row = r.cursor.row; - }); - if (!ranges.length || sameRowRanges.length == ranges.length - 1) { - var range = this.selection.getRange(); - var fr = range.start.row, lr = range.end.row; - var guessRange = fr == lr; - if (guessRange) { - var max = this.session.getLength(); - var line; - do { - line = this.session.getLine(lr); - } while (/[=:]/.test(line) && ++lr < max); - do { - line = this.session.getLine(fr); - } while (/[=:]/.test(line) && --fr > 0); - if (fr < 0) - fr = 0; - if (lr >= max) - lr = max - 1; - } - var lines = this.session.removeFullLines(fr, lr); - lines = this.$reAlignText(lines, guessRange); - this.session.insert({ row: fr, column: 0 }, lines.join("\n") + "\n"); - if (!guessRange) { - range.start.column = 0; - range.end.column = lines[lines.length - 1].length; - } - this.selection.setRange(range); - } - else { - sameRowRanges.forEach(function (r) { - sel.substractPoint(r.cursor); - }); - var maxCol = 0; - var minSpace = Infinity; - var spaceOffsets = ranges.map(function (r) { - var p = r.cursor; - var line = session.getLine(p.row); - var spaceOffset = line.substr(p.column).search(/\S/g); - if (spaceOffset == -1) - spaceOffset = 0; - if (p.column > maxCol) - maxCol = p.column; - if (spaceOffset < minSpace) - minSpace = spaceOffset; - return spaceOffset; - }); - ranges.forEach(function (r, i) { - var p = r.cursor; - var l = maxCol - p.column; - var d = spaceOffsets[i] - minSpace; - if (l > d) - session.insert(p, lang.stringRepeat(" ", l - d)); - else - session.remove(new Range(p.row, p.column, p.row, p.column - l + d)); - r.start.column = r.end.column = maxCol; - r.start.row = r.end.row = p.row; - r.cursor = r.end; - }); - sel.fromOrientedRange(ranges[0]); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); + return function() { + var now = that.now(); + if (!previous && options.leading === false) { + previous = now; + } + var remaining = wait - (now - previous); + context = this; // eslint-disable-line consistent-this + args = arguments; + if (remaining <= 0 || remaining > wait) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + if (!timeout) { + context = args = null; } + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; }; - this.$reAlignText = function (lines, forceLeft) { - var isLeftAligned = true, isRightAligned = true; - var startW, textW, endW; - return lines.map(function (line) { - var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); - if (!m) - return [line]; - if (startW == null) { - startW = m[1].length; - textW = m[2].length; - endW = m[3].length; - return m; - } - if (startW + textW + endW != m[1].length + m[2].length + m[3].length) - isRightAligned = false; - if (startW != m[1].length) - isLeftAligned = false; - if (startW > m[1].length) - startW = m[1].length; - if (textW < m[2].length) - textW = m[2].length; - if (endW > m[3].length) - endW = m[3].length; - return m; - }).map(forceLeft ? alignLeft : - isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); - function spaces(n) { - return lang.stringRepeat(" ", n); - } - function alignLeft(m) { - return !m[2] ? m[0] : spaces(startW) + m[2] - + spaces(textW - m[2].length + endW) - + m[4].replace(/^([=:])\s+/, "$1 "); - } - function alignRight(m) { - return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] - + spaces(endW) - + m[4].replace(/^([=:])\s+/, "$1 "); - } - function unAlign(m) { - return !m[2] ? m[0] : spaces(startW) + m[2] - + spaces(endW) - + m[4].replace(/^([=:])\s+/, "$1 "); + }, + + /** + * Create a requestAnimationFrame simulation + * + * @param {Number|String} refreshRate + * @return {Function} + */ + createRequestAnimationFrame: function(refreshRate) { + var timeout = null; + + // Convert refreshRate to timeout + if (refreshRate !== "auto" && refreshRate < 60 && refreshRate > 1) { + timeout = Math.floor(1000 / refreshRate); + } + + if (timeout === null) { + return window.requestAnimationFrame || requestTimeout(33); + } else { + return requestTimeout(timeout); + } + } +}; + +/** + * Create a callback that will execute after a given timeout + * + * @param {Function} timeout + * @return {Function} + */ +function requestTimeout(timeout) { + return function(callback) { + window.setTimeout(callback, timeout); + }; +} + + +/***/ }), + +/***/ "../../node_modules/tau-prolog/modules/core.js": +/*!*****************************************************!*\ + !*** ../../node_modules/tau-prolog/modules/core.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +(function() { + + // VERSION + var version = { major: 0, minor: 3, patch: 4, status: "beta" }; + + + + // IO FILE SYSTEM + + // Virtual file + function TauFile(name, type, parent, text) { + text = text === undefined ? "" : text; + this.name = name; + this.type = type; + this.parent = parent; + this.text = text; + this.created = Date.now() / 1000; + this.modified = this.created; + } + + TauFile.prototype.get = function(length, position) { + if(position === this.text.length) { + return "end_of_stream"; + } else if(position > this.text.length) { + return "end_of_stream"; + } else { + return this.text.substring(position, position+length); + } + }; + + TauFile.prototype.eof = function(position) { + return position === this.text.length; + }; + + TauFile.prototype.put = function(text, position) { + if(position === "end_of_stream") { + this.text += text; + return true; + } else if(position === "past_end_of_stream") { + return null; + } else { + this.text = this.text.substring(0, position) + text + this.text.substring(position+text.length); + return true; + } + }; + + TauFile.prototype.get_byte = function(position) { + if(position === "end_of_stream") + return -1; + var index = Math.floor(position/2); + if(this.text.length <= index) + return -1; + var code = codePointAt(this.text[Math.floor(position/2)], 0); + if(position % 2 === 0) + return code & 0xff; + else + return code / 256 >>> 0; + }; + + TauFile.prototype.put_byte = function(byte, position) { + var index = position === "end_of_stream" ? this.text.length : Math.floor(position/2); + if(this.text.length < index) + return null; + var code = this.text.length === index ? -1 : codePointAt(this.text[Math.floor(position/2)], 0); + if(position % 2 === 0) { + code = code / 256 >>> 0; + code = ((code & 0xff) << 8) | (byte & 0xff); + } else { + code = code & 0xff; + code = ((byte & 0xff) << 8) | (code & 0xff); + } + if(this.text.length === index) + this.text += fromCodePoint(code); + else + this.text = this.text.substring(0, index) + fromCodePoint(code) + this.text.substring(index+1); + return true; + }; + + TauFile.prototype.flush = function() { + return true; + }; + + TauFile.prototype.close = function() { + this.modified = Date.now() / 1000; + return true; + }; + + TauFile.prototype.size = function() { + return this.text.length; + }; + + // Virtual directory + function TauDirectory(name, parent) { + this.name = name; + this.parent = parent; + this.files = {}; + this.length = 0; + this.created = Date.now() / 1000; + this.modified = this.created; + } + + TauDirectory.prototype.lookup = function(file) { + if(this.files.hasOwnProperty(file)) + return this.files[file]; + return null; + }; + + TauDirectory.prototype.push = function(name, file) { + if(!this.files.hasOwnProperty(name)) + this.length++; + this.files[name] = file; + this.modified = Date.now() / 1000; + }; + + TauDirectory.prototype.remove = function(name) { + if(this.files.hasOwnProperty(name)) { + this.length--; + delete this.files[name]; + this.modified = Date.now() / 1000; + } + }; + + TauDirectory.prototype.empty = function() { + return this.length === 0; + }; + + TauDirectory.prototype.size = function() { + return 4096; + }; + + // Virtual file system for browser + tau_file_system = { + // Current files + files: new TauDirectory("/", "/", null), + // Open file + open: function(path, type, mode) { + var dirs = path.replace(/\/$/, "").split("/"); + var dir = tau_file_system.files; + var name = dirs[dirs.length-1]; + for(var i = 1; i < dirs.length-1; i++) { + dir = dir.lookup(dirs[i]); + if(!pl.type.is_directory(dir)) + return null; + } + var file = dir.lookup(name); + if(file === null) { + if(mode === "read") + return null; + file = new TauFile(name, type, dir); + dir.push(name, file); + } else if(!pl.type.is_file(file)) { + return null; + } + if(mode === "write") + file.text = ""; + return file; + }, + // Get item + get: function(path) { + var dirs = path.replace(/\/$/, "").split("/"); + var file = tau_file_system.files; + for(var i = 1; i < dirs.length; i++) + if(pl.type.is_directory(file)) + file = file.lookup(dirs[i]); + else + return null; + return file; + } + }; + + // User input for browser + tau_user_input = { + buffer: "", + get: function( length, _ ) { + var text; + while( tau_user_input.buffer.length < length ) { + text = window.prompt(); + if( text.length === 0 ) + return "end_of_stream"; + if( text ) { + tau_user_input.buffer += text; + } + } + text = tau_user_input.buffer.substr( 0, length ); + tau_user_input.buffer = tau_user_input.buffer.substr( length ); + return text; + }, + eof: function(_) { + return false; + } + }; + + // User output for browser + tau_user_output = { + put: function( text, _ ) { + console.log( text ); + return true; + }, + flush: function() { + return true; + } + }; + + // User error for browser + tau_user_error = { + put: function( text, _ ) { + (console.error || console.log)( text ); + return true; + }, + flush: function() { + return true; + } + }; + + // Virtual file system for Node.js + nodejs_file_system = { + // Open file + open: function( path, type, mode ) { + var fd, fs = __webpack_require__(/*! fs */ "?1914"); + if( mode === "read" && !fs.existsSync( path ) ) + return null; + try { + fd = fs.openSync( path, mode[0] ); + } catch(ex) { + return false; + } + return { + get: function( length, position ) { + var buffer = new Buffer( length ); + fs.readSync( fd, buffer, 0, length, position ); + var end_of_file = true; + var text = buffer.toString(); + for(var i = 0; i < length && end_of_file; i++) + end_of_file = text[i] === "\u0000"; + return end_of_file ? "end_of_stream" : buffer.toString(); + }, + eof: function(position) { + var stats = fs.statSync(path) + return position === stats["size"]; + }, + put: function( text, position ) { + var buffer = Buffer.from( text ); + if( position === "end_of_stream" ) + fs.writeSync( fd, buffer ); + else if( position === "past_end_of_stream" ) + return null; + else + fs.writeSync( fd, buffer, 0, buffer.length, position ); + return true; + }, + get_byte: function( position ) { + try { + var buffer = Buffer.alloc(1); + var bytesRead = fs.readSync(fd, buffer, 0, 1, position); + //var _text = buffer.toString("utf8", 0, bytesRead); + var end_of_file = bytesRead < 1; + return end_of_file ? "end_of_stream" : buffer.readUInt8(0); + } catch(ex) { + return "end_of_stream"; + } + }, + put_byte: function(byte, position) { + var buffer = Buffer.from([byte]); + if(position === "end_of_stream") + fs.writeSync(fd, buffer); + else if(position === "past_end_of_stream") + return null; + else + fs.writeSync(fd, buffer, 0, buffer.length, position); + return true; + }, + flush: function() { + return true; + }, + close: function() { + fs.closeSync( fd ); + return true; + } + }; + } + }; + + // User input for Node.js + nodejs_user_input = { + buffer: "", + get: function( length, _ ) { + var text; + var readlineSync = __webpack_require__(/*! readline-sync */ "../../node_modules/readline-sync/lib/readline-sync.js"); + while( nodejs_user_input.buffer.length < length ) + nodejs_user_input.buffer += readlineSync.question("", {keepWhitespace: true}) + "\n"; + text = nodejs_user_input.buffer.substr( 0, length ); + nodejs_user_input.buffer = nodejs_user_input.buffer.substr( length ); + return text; + }, + eof: function(length) { + return false; + } + }; + + // User output for Node.js + nodejs_user_output = { + put: function( text, _ ) { + process.stdout.write( text ); + return true; + }, + flush: function() { + return true; + } + }; + + // User error for Node.js + nodejs_user_error = { + put: function( text, _ ) { + process.stderr.write( text ); + return true; + }, + flush: function() { + return true; + } + }; + + + + // COMPATITBILITY + + var indexOf; + if(!Array.prototype.indexOf) { + indexOf = function(array, elem) { + var len = array.length; + for(var i = 0; i < len; i++) { + if(elem === array[i]) return i; + } + return -1; + }; + } else { + indexOf = function(array, elem) { + return array.indexOf(elem); + }; + } + + var reduce = function(array, fn) { + if(array.length === 0) return undefined; + var elem = array[0]; + var len = array.length; + for(var i = 1; i < len; i++) { + elem = fn(elem, array[i]); + } + return elem; + }; + + var map; + if(!Array.prototype.map) { + map = function(array, fn) { + var a = []; + var len = array.length; + for(var i = 0; i < len; i++) { + a.push( fn(array[i]) ); + } + return a; + }; + } else { + map = function(array, fn) { + return array.map(fn); + }; + } + + var filter; + if(!Array.prototype.filter) { + filter = function(array, fn) { + var a = []; + var len = array.length; + for(var i = 0; i < len; i++) { + if(fn(array[i])) + a.push( array[i] ); + } + return a; + }; + } else { + filter = function(array, fn) { + return array.filter(fn); + }; + } + + var codePointAt; + if(!String.prototype.codePointAt) { + codePointAt = function(str, i) { + return str.charCodeAt(i); + }; + } else { + codePointAt = function(str, i) { + return str.codePointAt(i); + }; + } + + var fromCodePoint; + if(!String.fromCodePoint) { + fromCodePoint = function() { + return String.fromCharCode.apply(null, arguments); + }; + } else { + fromCodePoint = function() { + return String.fromCodePoint.apply(null, arguments); + }; + } + + var stringLength; + var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + if(Array.from) + stringLength = function(str) { + return Array.from(str).length; + }; + else + stringLength = function(str) { + return str.replace(regexAstralSymbols, '_').length; + }; + + + + // PARSER + + var ERROR = 0; + var SUCCESS = 1; + + var regex_escape = /(\\a)|(\\b)|(\\d)|(\\e)|(\\f)|(\\n)|(\\r)|(\\s)|(\\t)|(\\v)|\\x([0-9a-fA-F]+)\\|\\([0-7]+)\\|(\\\\)|(\\')|('')|(\\")|(\\`)|(\\.)|(.)/g; + var escape_map = {"\\a": 7, "\\b": 8, "\\d": 127, "\\e": 27, "\\f": 12, "\\n": 10, "\\r": 13, "\\s": 32, "\\t": 9, "\\v": 11}; + function escape(str) { + var stack = []; + var _error = false; + str.replace(regex_escape, function(match, a, b, d, e, f, n, r, s, t, v, hex, octal, back, single, dsingle, double, backquote, error, char) { + switch(true) { + case hex !== undefined: + stack.push( parseInt(hex, 16) ); + return ""; + case octal !== undefined: + stack.push( parseInt(octal, 8) ); + return ""; + case back !== undefined: + case single !== undefined: + case dsingle !== undefined: + case double !== undefined: + case backquote !== undefined: + stack.push( codePointAt(match.substr(1),0) ); + return ""; + case char !== undefined: + stack.push( codePointAt(char,0) ); + return ""; + case error !== undefined: + _error = true; + default: + stack.push(escape_map[match]); + return ""; + } + }); + if(_error) + return null; + return stack; + } + + // Escape atoms + function escapeAtom(str, quote) { + var atom = ''; + if( str === "\\" ) return null; + if( str.length < 2 ) return str; + try { + str = str.replace(/((?:\\\\)+)|\\([0-7]+)\\/g, function(match, g1, g2) { + return g1 || fromCodePoint(parseInt(g2, 8)); + }); + str = str.replace(/((?:\\\\)+)|\\x([0-9a-fA-F]+)\\/g, function(match, g1, g2) { + return g1 || fromCodePoint(parseInt(g2, 16)); + }); + str = str.replace(/((?:\\\\)+)|\\u([0-9a-fA-F]{4})/g, function(match, g1, g2) { + return g1 || fromCodePoint(parseInt(g2, 16)); + }); + } catch(error) { + return null; + } + for( var i = 0; i < str.length; i++) { + var a = str.charAt(i); + var b = str.charAt(i+1); + if( a === quote && b === quote ) { + i++; + atom += quote; + } else if( a === '\\' ) { + if( ['a','b','f','n','r','t','v',"'",'"','\\','\a','\b','\f','\n','\r','\t','\v'].indexOf(b) !== -1 ) { + i += 1; + switch( b ) { + case 'a': atom += '\a'; break; + case 'b': atom += '\b'; break; + case 'f': atom += '\f'; break; + case 'n': atom += '\n'; break; + case 'r': atom += '\r'; break; + case 't': atom += '\t'; break; + case 'v': atom += '\v'; break; + case "'": atom += "'"; break; + case '"': atom += '"'; break; + case '\\': atom += '\\'; break; + } + } else { + return null; + } + } else { + atom += a; + } + } + return atom; + } + + // Redo escape + function redoEscape(str) { + var atom = ''; + for( var i = 0; i < str.length; i++) { + switch( str.charAt(i) ) { + case "'": atom += "\\'"; break; + case '\\': atom += '\\\\'; break; + //case '\a': atom += '\\a'; break; + case '\b': atom += '\\b'; break; + case '\f': atom += '\\f'; break; + case '\n': atom += '\\n'; break; + case '\r': atom += '\\r'; break; + case '\t': atom += '\\t'; break; + case '\v': atom += '\\v'; break; + default: atom += str.charAt(i); break; + } + } + return atom; + } + + // String to num + function convertNum(num) { + var n = num.substr(2); + switch(num.substr(0,2).toLowerCase()) { + case "0x": + return parseInt(n, 16); + case "0b": + return parseInt(n, 2); + case "0o": + return parseInt(n, 8); + case "0'": + return escape(n)[0]; + default: + return parseFloat(num); + } + } + + // Is graphic token + function is_graphic_token(string) { + return /^[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+/.test(string); + } + + // Regular expressions for tokens + var rules = { + whitespace: /^\s*(?:(?:%.*)|(?:\/\*(?:\n|\r|.)*?(?:\*\/|$))|(?:\s+))\s*/, + variable: /^(?:[A-Z_][a-zA-Z0-9_]*)/, + atom: /^(\!|,|;|[a-z][0-9a-zA-Z_]*|[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+|'(?:(?:'')|(?:\\\\)|(?:\\')|[^'])*')/, + number: /^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abdefnrstv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/, + string: /^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/, + l_brace: /^(?:\[)/, + r_brace: /^(?:\])/, + l_bracket: /^(?:\{)/, + r_bracket: /^(?:\})/, + bar: /^(?:\|)/, + l_paren: /^(?:\()/, + r_paren: /^(?:\))/ + }; + + // Replace chars of char_conversion session + function replace( thread, text ) { + if( thread.get_flag( "char_conversion" ).id === "on" ) { + return text.replace(/./g, function(char) { + return thread.get_char_conversion( char ); + }); + } + return text; + } + + // Tokenize strings + function Tokenizer(thread) { + this.thread = thread; + this.text = ""; // Current text to be analized + this.tokens = []; // Consumed tokens + } + + Tokenizer.prototype.set_last_tokens = function(tokens) { + return this.tokens = tokens; + }; + + Tokenizer.prototype.new_text = function(text) { + this.text = text; + this.tokens = []; + }; + + Tokenizer.prototype.get_tokens = function(init) { + var text; + var len = 0; // Total length respect to text + var line = 0; + var start = 0; + var tokens = []; + var last_is_blank; + + if(init) { + var token = this.tokens[init-1]; + len = token.len; + text = replace( this.thread, this.text.substr(token.len) ); + line = token.line; + start = token.start; + } + else + text = this.text; + + + // If there is nothing to be analized, return null + if(/^\s*$/.test(text)) + return null; + + while(text !== "") { + var matches = []; + last_is_blank = false; + + if(/^\n/.exec(text) !== null) { + line++; + start = 0; + len++; + text = text.replace(/\n/, ""); + last_is_blank = true; + continue; + } + + for(var rule in rules) { + if(rules.hasOwnProperty(rule)) { + var matchs = rules[rule].exec( text ); + if(matchs) { + matches.push({ + value: matchs[0], + name: rule, + matches: matchs + }); + } + } + } + + // Lexical error + if(!matches.length) + return this.set_last_tokens( [{ value: text, matches: [], name: "lexical", line: line, start: start }] ); + + var token = reduce( matches, function(a, b) { + return a.value.length >= b.value.length ? a : b; + } ); + + token.start = start; + token.line = line; + + text = text.replace(token.value, ""); + start += token.value.length; + len += token.value.length; + + var nl = (token.value.match(/\n/g) || []).length; + line += nl; + if(nl > 0) + start = token.value.length - token.value.lastIndexOf("\n") - 1; + token.line_count = line; + token.line_position = start; + + switch(token.name) { + case "atom": + token.raw = token.value; + if(token.value.charAt(0) === "'") { + token.value = escapeAtom( token.value.substring(1, token.value.length - 1), "'" ); + if( token.value === null ) { + token.name = "lexical"; + token.value = token.raw; + token.error = "unknown_escape_sequence"; + } + } + break; + case "number": + var substr = token.value.substring(0,2); + token.raw = token.value; + token.float = substr !== "0x" && substr !== "0'" && token.value.match(/[.eE]/) !== null; + token.value = convertNum( token.value ); + token.blank = last_is_blank; + if(!token.float && pl.flag.bounded.value.indicator === "true/0" && token.value > pl.flag.max_integer.value.value) { + token.name = "lexical"; + token.value = token.raw; + token.error = "int_overflow"; + } + break; + case "string": + var del = token.value.charAt(0); + token.raw = token.value; + token.value = escapeAtom( token.value.substring(1, token.value.length - 1), del ); + if( token.value === null ) { + token.name = "lexical"; + token.value = token.raw; + token.error = "unknown_escape_sequence" + } + break; + case "whitespace": + var last = tokens[tokens.length-1]; + if(last) last.space = true; + last_is_blank = true; + continue; + case "r_bracket": + if( tokens.length > 0 && tokens[tokens.length-1].name === "l_bracket" ) { + token = tokens.pop(); + token.name = "atom"; + token.value = "{}"; + token.raw = "{}"; + token.space = false; + } + break; + case "r_brace": + if( tokens.length > 0 && tokens[tokens.length-1].name === "l_brace" ) { + token = tokens.pop(); + token.name = "atom"; + token.value = "[]"; + token.raw = "[]"; + token.space = false; + } + break; + } + token.len = len; + tokens.push( token ); + last_is_blank = false; + } + + var t = this.set_last_tokens( tokens ); + return t.length === 0 ? null : t; + }; + + // Parse an expression + function parseExpr(thread, tokens, start, priority, toplevel) { + if(!tokens[start]) return {type: ERROR, value: pl.error.syntax(tokens[start-1], "expression expected", true)}; + var error; + + if(priority === "0") { + var token = tokens[start]; + switch(token.name) { + case "number": + return {type: SUCCESS, len: start+1, value: new pl.type.Num(token.value, token.float)}; + case "variable": + return {type: SUCCESS, len: start+1, value: new pl.type.Var(token.value)}; + case "string": + var str; + switch( thread.get_flag( "double_quotes" ).id ) { + case "atom":; + str = new Term( token.value, [] ); + break; + case "codes": + str = new Term( "[]", [] ); + for(var i = token.value.length-1; i >= 0; i-- ) + str = new Term( ".", [new pl.type.Num( codePointAt(token.value,i), false ), str] ); + break; + case "chars": + str = new Term( "[]", [] ); + for(var i = token.value.length-1; i >= 0; i-- ) + str = new Term( ".", [new pl.type.Term( token.value.charAt(i), [] ), str] ); + break; + } + return {type: SUCCESS, len: start+1, value: str}; + case "l_paren": + var expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true); + if(expr.type !== SUCCESS) return expr; + if(tokens[expr.len] && tokens[expr.len].name === "r_paren") { + expr.len++; + return expr; + } + return {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], ") or operator expected", !tokens[expr.len])} + case "l_bracket": + var expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true); + if(expr.type !== SUCCESS) return expr; + if(tokens[expr.len] && tokens[expr.len].name === "r_bracket") { + expr.len++; + expr.value = new Term( "{}", [expr.value] ); + return expr; + } + return {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], "} or operator expected", !tokens[expr.len])} + } + // Compound term + var result = parseTerm(thread, tokens, start, toplevel); + if(result.type === SUCCESS || result.derived) + return result; + // List + result = parseList(thread, tokens, start); + if(result.type === SUCCESS || result.derived) + return result; + // Unexpected + return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], token.error || "unexpected token")}; + } + + var max_priority = thread.__get_max_priority(); + var next_priority = thread.__get_next_priority(priority); + var aux_start = start; + + // Prefix operators + if(tokens[start].name === "atom" && tokens[start+1] && (tokens[start].space || tokens[start+1].name !== "l_paren")) { + var token = tokens[start++]; + var classes = thread.__lookup_operator_classes(priority, token.value); + + // Associative prefix operator + if(classes && classes.indexOf("fy") > -1) { + var expr = parseExpr(thread, tokens, start, priority, toplevel); + if(expr.type !== ERROR) { + if( token.value === "-" && !token.space && pl.type.is_number( expr.value ) ) { + return { + value: new pl.type.Num(-expr.value.value, expr.value.is_float), + len: expr.len, + type: SUCCESS + }; + } else { + return { + value: new pl.type.Term(token.value, [expr.value]), + len: expr.len, + type: SUCCESS + }; + } + } else { + error = expr; + } + // Non-associative prefix operator + } else if(classes && classes.indexOf("fx") > -1) { + var expr = parseExpr(thread, tokens, start, next_priority, toplevel); + if(expr.type !== ERROR) { + return { + value: new pl.type.Term(token.value, [expr.value]), + len: expr.len, + type: SUCCESS + }; + } else { + error = expr; + } + } + } + + start = aux_start; + var expr = parseExpr(thread, tokens, start, next_priority, toplevel); + if(expr.type === SUCCESS) { + start = expr.len; + var token = tokens[start]; + if(tokens[start] && ( + tokens[start].name === "atom" && thread.__lookup_operator_classes(priority, token.value) || + tokens[start].name === "bar" && thread.__lookup_operator_classes(priority, "|") + ) ) { + var next_priority_lt = next_priority; + var next_priority_eq = priority; + var classes = thread.__lookup_operator_classes(priority, token.value); + + if(classes.indexOf("xf") > -1) { + return { + value: new pl.type.Term(token.value, [expr.value]), + len: ++expr.len, + type: SUCCESS + }; + } else if(classes.indexOf("xfx") > -1) { + var expr2 = parseExpr(thread, tokens, start + 1, next_priority_lt, toplevel); + if(expr2.type === SUCCESS) { + return { + value: new pl.type.Term(token.value, [expr.value, expr2.value]), + len: expr2.len, + type: SUCCESS + }; + } else { + expr2.derived = true; + return expr2; + } + } else if(classes.indexOf("xfy") > -1) { + var expr2 = parseExpr(thread, tokens, start + 1, next_priority_eq, toplevel); + if(expr2.type === SUCCESS) { + return { + value: new pl.type.Term(token.value, [expr.value, expr2.value]), + len: expr2.len, + type: SUCCESS + }; + } else { + expr2.derived = true; + return expr2; + } + } else if(expr.type !== ERROR) { + while(true) { + start = expr.len; + var token = tokens[start]; + if(token && token.name === "atom" && thread.__lookup_operator_classes(priority, token.value)) { + var classes = thread.__lookup_operator_classes(priority, token.value); + if( classes.indexOf("yf") > -1 ) { + expr = { + value: new pl.type.Term(token.value, [expr.value]), + len: ++start, + type: SUCCESS + }; + } else if( classes.indexOf("yfx") > -1 ) { + var expr2 = parseExpr(thread, tokens, ++start, next_priority_lt, toplevel); + if(expr2.type === ERROR) { + expr2.derived = true; + return expr2; + } + start = expr2.len; + expr = { + value: new pl.type.Term(token.value, [expr.value, expr2.value]), + len: start, + type: SUCCESS + }; + } else { break; } + } else { break; } + } + } + } else { + error = {type: ERROR, value: pl.error.syntax(tokens[expr.len-1], "operator expected")}; + } + return expr; + } + return expr; + } + + // Parse a compound term + function parseTerm(thread, tokens, start, toplevel) { + if(!tokens[start] || (tokens[start].name === "atom" && tokens[start].raw === "." && !toplevel && (tokens[start].space || !tokens[start+1] || tokens[start+1].name !== "l_paren"))) + return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], "unfounded token")}; + var atom = tokens[start]; + var exprs = []; + if(tokens[start].name === "atom" && tokens[start].raw !== ",") { + start++; + if(tokens[start-1].space) return {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)}; + if(tokens[start] && tokens[start].name === "l_paren") { + if(tokens[start+1] && tokens[start+1].name === "r_paren") + return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1], "argument expected")}; + var expr = parseExpr(thread, tokens, ++start, "999", true); + if(expr.type === ERROR) { + if( expr.derived ) + return expr; + else + return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], "argument expected", !tokens[start])}; + } + exprs.push(expr.value); + start = expr.len; + while(tokens[start] && tokens[start].name === "atom" && tokens[start].value === ",") { + expr = parseExpr(thread, tokens, start+1, "999", true); + if(expr.type === ERROR) { + if( expr.derived ) + return expr; + else + return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], "argument expected", !tokens[start+1])}; + } + exprs.push(expr.value); + start = expr.len; + } + if(tokens[start] && tokens[start].name === "r_paren") start++; + else return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], ", or ) expected", !tokens[start])}; + } + return {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)}; + } + return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], "term expected")}; + } + + // Parse a list + function parseList(thread, tokens, start) { + if(!tokens[start]) + return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], "[ expected")}; + if(tokens[start] && tokens[start].name === "l_brace") { + var expr = parseExpr(thread, tokens, ++start, "999", true); + var exprs = [expr.value]; + var cons = undefined; + + if(expr.type === ERROR) { + if(tokens[start] && tokens[start].name === "r_brace") { + return {type: SUCCESS, len: start+1, value: new pl.type.Term("[]", [])}; + } + return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start], "] expected")}; + } + + start = expr.len; + + while(tokens[start] && tokens[start].name === "atom" && tokens[start].value === ",") { + expr = parseExpr(thread, tokens, start+1, "999", true); + if(expr.type === ERROR) { + if( expr.derived ) + return expr; + else + return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], "argument expected", !tokens[start+1])}; + } + exprs.push(expr.value); + start = expr.len; + } + var bar = false + if(tokens[start] && tokens[start].name === "bar") { + bar = true; + expr = parseExpr(thread, tokens, start+1, "999", true); + if(expr.type === ERROR) { + if( expr.derived ) + return expr; + else + return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], "argument expected", !tokens[start+1])}; + } + cons = expr.value; + start = expr.len; + } + if(tokens[start] && tokens[start].name === "r_brace") + return {type: SUCCESS, len: start+1, value: arrayToList(exprs, cons) }; + else + return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], bar ? "] expected" : ", or | or ] expected", !tokens[start])}; + } + return {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], "list expected")}; + } + + // Parse a rule + function parseRule(thread, tokens, start) { + var line = tokens[start].line; + var expr = parseExpr(thread, tokens, start, thread.__get_max_priority(), false); + var rule = null; + var obj; + if(expr.type !== ERROR) { + start = expr.len; + if(tokens[start] && tokens[start].name === "atom" && tokens[start].raw === ".") { + start++; + if( pl.type.is_term(expr.value) ) { + if(expr.value.indicator === ":-/2") { + rule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1])); + obj = { + value: rule, + len: start, + type: SUCCESS + }; + } else if(expr.value.indicator === "-->/2") { + rule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1])); + rule = rule_to_dcg(rule, thread); + rule.body = body_conversion(rule.body); + if(!pl.type.is_rule(rule)) + return { + value: rule, + len: start, + type: ERROR + }; + obj = { + value: rule, + len: start, + type: pl.type.is_rule( rule ) ? SUCCESS : ERROR + }; + } else { + rule = new pl.type.Rule(expr.value, null); + obj = { + value: rule, + len: start, + type: SUCCESS + }; + } + if( rule ) { + var singleton = rule.singleton_variables(); + if( singleton.length > 0 ) + thread.throw_warning( pl.warning.singleton( singleton, rule.head.indicator, line ) ); + } + return obj; + } else { + return { type: ERROR, value: pl.error.syntax(tokens[start], "callable expected") }; + } + } else { + return { type: ERROR, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], ". or operator expected") }; + } + } + return expr; + } + + // Parse a program + function parseProgram(thread, string, options) { + var opts = {}; + options = options ? options : {}; + opts.success = options.success ? options.success : function(){}; + opts.error = options.error ? options.error : function(){}; + opts.from = options.from ? options.from : "$tau-js"; + opts.reconsult = options.reconsult !== undefined ? options.reconsult : true; + opts.reconsulted = options.reconsulted === undefined ? {} : options.reconsulted; + opts.context_module = options.context_module === undefined ? "user" : options.context_module; + opts.initialization = options.initialization === undefined ? [] : options.initialization; + opts.current_token = options.current_token === undefined ? 0 : options.current_token; + opts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer; + opts.tokens = options.tokens === undefined ? null : options.tokens; + opts.string = string; + opts.term_expansion = false; + var reconsulted = opts.reconsulted; + var tokenizer = opts.tokenizer; + var tokens = opts.tokens; + if(tokenizer === null) { + tokenizer = new Tokenizer(thread); + tokenizer.new_text(string); + opts.tokenizer = tokenizer; + tokens = tokenizer.get_tokens(0); + opts.tokens = tokens; + } + var n = opts.current_token; + while(tokens !== null && tokens[n]) { + var expr = parseRule(thread, tokens, n); + opts.current_token = expr.len; + if(expr.type === ERROR) { + if(opts.error !== undefined) + opts.error(new Term("throw", [expr.value])); + return; + } else { + // Term expansion + var context_module = opts.context_module; + var term_expansion = thread.session.modules[context_module].rules["term_expansion/2"]; + if(term_expansion && term_expansion.length > 0) { + opts.term_expansion = true; + var n_thread = new Thread(thread.session); + var term = expr.value.body ? new Term(":-", [expr.value.head, expr.value.body]) : expr.value.head; + thread.session.renamed_variables = {}; + term = term.rename(thread.session); + n_thread.query(context_module + ":term_expansion(" + term.toString({quoted: true}) + ", X)."); + n_thread.answer((function(thread, opts, reconsulted, expr) { + return function(answer) { + if(answer && !pl.type.is_error(answer) && pl.type.is_term(answer.links['X'])) { + var term = answer.links['X']; + var rule = term.indicator === ":-/2" ? new Rule(term.args[0], term.args[1]) : new Rule(term, null); + parseProgramExpansion(thread, opts, reconsulted, {value: rule, len: expr.len, type: expr.type}); + } else { + parseProgramExpansion(thread, opts, reconsulted, expr); + } + } + })(thread, opts, reconsulted, expr)); + return; + } else { + opts.term_expansion = false; + var async = parseProgramExpansion(thread, opts, reconsulted, expr); + if(async) + return; + n = expr.len; + } + } + } + // run goals from initialization/1 directive + var callback = opts.success; + var nthread = new Thread(thread.session); + for(var i = opts.initialization.length-1; i > 0; i--) { + var next_callback = (function(init, callback) { + return function(answer) { + if(answer === null) { + nthread.answer(); + } else if(pl.type.is_error(answer)) { + opts.error(answer); + } else { + nthread.add_goal(init); + nthread.answer(callback); + } + }; + })(opts.initialization[i], callback); + callback = next_callback; + } + if(opts.initialization.length > 0) { + nthread.add_goal(opts.initialization[0]); + nthread.answer(callback); + } else { + callback(); + } + } + + function parseGoalExpansion(thread, options, expr) { + var n_thread = new Thread( thread.session ); + n_thread.__goal_expansion = true; + var varterm = thread.next_free_variable(); + var varhead = thread.next_free_variable(); + var goal = varhead + " = " + expr.value.head + ", goal_expansion(" + expr.value.body.toString({ + quoted: true + }) + ", " + varterm.toString({ + quoted: true + }) + ")."; + n_thread.query(goal); + n_thread.answer(function(answer) { + if(answer && !pl.type.is_error(answer) && answer.links[varterm]) { + expr.value.head = answer.links[varhead]; + expr.value.body = body_conversion(answer.links[varterm]); + parseGoalExpansion(thread, options, expr); + } else { + thread.add_rule(expr.value, options); + parseProgram(thread, options.string, options); + } + }); + } + + function parseQueryExpansion(thread, term, options) { + var n_thread = new Thread(thread.session); + n_thread.__goal_expansion = true; + var varterm = thread.next_free_variable(); + var goal = "goal_expansion(" + term.toString({ + quoted: true + }) + ", " + varterm.toString({ + quoted: true + }) + ")."; + n_thread.query(goal); + var variables = n_thread.head_point().substitution.domain(); + n_thread.answer(function(answer) { + if(answer && !pl.type.is_error(answer) && answer.links[varterm]) { + for(var i = 0; i < variables.length; i++) { + if(variables[i] !== varterm.id && answer.links[variables[i]]) { + var subs = new Substitution(); + subs.links[answer.links[variables[i]]] = variables[i]; + answer.links[varterm] = answer.links[varterm].apply( subs ); + } + } + parseQueryExpansion(thread, body_conversion(answer.links[varterm]), options); + } else { + thread.add_goal(term); + options.success(term); + parseQuery(thread, options.string, options); + } + }); + } + + function parseProgramExpansion(thread, options, reconsulted, expr) { + var async = options.term_expansion === true; + if(expr.value.body === null && expr.value.head.indicator === "?-/1") { + async = true; + var n_thread = new Thread(thread.session); + n_thread.add_goal(expr.value.head.args[0]); + n_thread.answer(function(answer) { + if(pl.type.is_error(answer)) { + thread.throw_warning(answer.args[0]); + } else if(answer === false || answer === null) { + thread.throw_warning(pl.warning.failed_goal(expr.value.head.args[0], expr.len)); + } + parseProgram(thread, options.string, options); + }); + } else if(expr.value.body === null && expr.value.head.indicator === ":-/1") { + var result = thread.run_directive(expr.value.head.args[0], options); + async = async || (result === true); + if(async) + parseProgram(thread, options.string, options); + } else { + var context_module = options.context_module; + var indicator = expr.value.head.indicator; + if(expr.value.head.indicator === ":/2") { + context_module = expr.value.head.args[0].id; + indicator = expr.value.head.args[1].indicator; + } + if(!reconsulted.hasOwnProperty(context_module)) + reconsulted[context_module] = {}; + if(options.reconsult !== false && reconsulted[context_module][indicator] !== true && !thread.is_multifile_predicate(indicator)) { + var get_module = thread.session.modules[context_module]; + if(context_module !== "system" && get_module && get_module.rules[indicator]) { + get_module.rules[indicator] = filter(get_module.rules[indicator], function(rule) { + return rule.dynamic; + }); + get_module.update_indices_predicate(indicator); + } + reconsulted[context_module][indicator] = true; + } + var goal_expansion = thread.session.modules.user.rules["goal_expansion/2"]; + if(expr.value.body !== null && goal_expansion && goal_expansion.length > 0) { + async = true; + thread.session.renamed_variables = {}; + var origin = { + head: function() { return expr.value.head; }, + term: function() { return expr.value.body; }, + set: function(h, p){ + expr.value.head = h; + expr.value.body = p; + } + }; + parseGoalExpansion(thread, options, expr, body_conversion(expr.value.body), origin.set, origin); + } else { + thread.add_rule(expr.value, options); + if(async) + parseProgram(thread, options.string, options); + } + } + return async; + } + + // Parse a query + function parseQuery(thread, string, options) { + var opts = {}; + var callback = typeof options === "function" ? options : function(){}; + options = options === undefined || typeof options === "function" ? {} : options; + opts.success = options.success === undefined ? callback : options.success; + opts.error = options.error === undefined ? callback : options.error; + opts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer; + opts.current_token = options.current_token === undefined ? 0 : options.current_token; + opts.string = string; + var tokenizer = opts.tokenizer; + var n = opts.current_token; + if(tokenizer === null) { + tokenizer = new Tokenizer(thread); + opts.tokenizer = tokenizer; + tokenizer.new_text(string); + } + do { + var tokens = tokenizer.get_tokens(n); + if(tokens === null) + break; + var expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false); + if(expr.type !== ERROR) { + var expr_position = expr.len; + n = expr.len + 1; + opts.current_token = n; + if(tokens[expr_position] && tokens[expr_position].name === "atom" && tokens[expr_position].raw === ".") { + expr.value = body_conversion(expr.value); + // Goal expansion + var goal_expansion = thread.session.modules.user.rules["goal_expansion/2"]; + if(!thread.__goal_expansion && goal_expansion && goal_expansion.length > 0) { + parseQueryExpansion(thread, expr.value, opts); + return; + } else { + thread.add_goal(expr.value); + opts.success(expr.value); + } + } else { + var token = tokens[expr_position]; + opts.error( + new Term("throw", [ + pl.error.syntax( + token ? token : tokens[expr_position-1], + token && token.error ? token.error : ". or operator expected", + !token + ) + ]) + ); + return; + } + } else { + opts.error(new Term("throw", [expr.value])); + return; + } + } while(true); + } + + + + // UTILS + + // Rule to DCG + function rule_to_dcg(rule, thread) { + thread.session.renamed_variables = {}; + rule = rule.rename(thread); + var begin = thread.next_free_variable(); + var dcg = body_to_dcg( rule.body, begin, thread ); + if( dcg.error ) + return dcg.value; + rule.body = dcg.value; + // push-back lists + if(rule.head.indicator === ",/2") { + var terminals = rule.head.args[1]; + rule.head = rule.head.args[0]; + var last = thread.next_free_variable(); + var pointer = terminals; + if(!pl.type.is_list(pointer)) { + return pl.error.type("list", pointer, "DCG/0"); + } + if(pointer.indicator === "[]/0") { + terminals = dcg.variable; + } else { + while(pointer.indicator === "./2" && pl.type.is_list(pointer) && pointer.args[1].indicator !== "[]/0") { + pointer = pointer.args[1]; + } + if(pl.type.is_variable(pointer)) + return pl.error.instantiation("DCG/0"); + else if(!pl.type.is_list(pointer)) + return pl.error.type("list", terminals, "DCG/0"); + pointer.args[1] = dcg.variable; + } + rule.body = new Term(",", [rule.body, new Term("=", [last, terminals])]); + rule.head = new Term(rule.head.id, rule.head.args.concat([begin, last])); + } else { + // replace first assignment + var first_assign = rule.body; + if(pl.type.is_term(first_assign) && first_assign.indicator === ",/2") + first_assign = first_assign.args[0]; + if(pl.type.is_term(first_assign) && first_assign.indicator === "=/2" && + pl.type.is_variable(first_assign.args[0]) && first_assign.args[0] === begin) { + begin = first_assign.args[1]; + rule.body = rule.body.replace(null); + } + // add first and last variables to the head + if(rule.head.indicator === ":/2") + rule.head = new Term(":", [ + new Term(rule.head.args[0].id, []), + new Term(rule.head.args[1].id, rule.head.args[1].args.concat([begin, dcg.variable])) + ]); + else + rule.head = new Term(rule.head.id, rule.head.args.concat([begin, dcg.variable])); + } + return rule; + } + + // Body to DCG + function body_to_dcg(expr, last, thread) { + var free; + if( pl.type.is_term( expr ) && expr.indicator === "!/0" ) { + free = thread.next_free_variable(); + return { + value: new Term(",", [expr, new Term("=", [last, free])]), + variable: free, + error: false + }; + } else if( pl.type.is_term( expr ) && expr.indicator === ":/2" ) { + var right = body_to_dcg(expr.args[1], last, thread); + if( right.error ) return right; + return { + value: new Term(":", [expr.args[0], right.value]), + variable: right.variable, + error: false + }; + } else if( pl.type.is_term( expr ) && expr.indicator === "\\+/1" ) { + var left = body_to_dcg(expr.args[0], last, thread); + if( left.error ) return left; + free = thread.next_free_variable(); + return { + value: new Term(",", [new Term(expr.id, [left.value]), new Term("=", [last, free])]), + variable: free, + error: false + }; + } else if( pl.type.is_term( expr ) && (expr.indicator === ",/2" || expr.indicator === "->/2") ) { + var left = body_to_dcg(expr.args[0], last, thread); + if( left.error ) return left; + var right = body_to_dcg(expr.args[1], left.variable, thread); + if( right.error ) return right; + return { + value: new Term(expr.id, [left.value, right.value]), + variable: right.variable, + error: false + }; + } else if( pl.type.is_term( expr ) && expr.indicator === ";/2" ) { + var left = body_to_dcg(expr.args[0], last, thread); + if( left.error ) return left; + var right = body_to_dcg(expr.args[1], last, thread); + if( right.error ) return right; + return { + value: new Term(",", [new Term(";", [left.value, right.value]), new Term("=", [left.variable, right.variable])]), + variable: right.variable, + error: false + }; + } else if( pl.type.is_term( expr ) && expr.indicator === "{}/1" ) { + free = thread.next_free_variable(); + return { + value: new Term(",", [expr.args[0], new Term("=", [last, free])]), + variable: free, + error: false + }; + } else if( pl.type.is_empty_list( expr ) ) { + return { + value: new Term("true", []), + variable: last, + error: false + }; + } else if( pl.type.is_list( expr ) ) { + free = thread.next_free_variable(); + var pointer = expr; + var prev; + while( pointer.indicator === "./2" ) { + prev = pointer; + pointer = pointer.args[1]; + } + if( pl.type.is_variable( pointer ) ) { + return { + value: pl.error.instantiation("DCG/0"), + variable: last, + error: true + }; + } else if( !pl.type.is_empty_list( pointer ) ) { + return { + value: pl.error.type("list", expr, "DCG/0"), + variable: last, + error: true + }; + } else { + prev.args[1] = free; + return { + value: new Term("=", [last, expr]), + variable: free, + error: false + }; + } + } else if( pl.type.is_callable( expr ) ) { + free = thread.next_free_variable(); + expr = new Term( expr.id, expr.args.concat([last,free]) ); + return { + value: expr, + variable: free, + error: false + }; + } else { + return { + value: pl.error.type( "callable", expr, "DCG/0" ), + variable: last, + error: true + }; + } + } + + // Body conversion + function body_conversion( expr ) { + if( pl.type.is_variable( expr ) ) + return new Term( "call", [expr] ); + else if( pl.type.is_term( expr ) && [",/2", ";/2", "->/2"].indexOf(expr.indicator) !== -1 ) + return new Term( expr.id, [body_conversion( expr.args[0] ), body_conversion( expr.args[1] )] ); + else if( pl.type.is_term(expr) && expr.indicator === ":/2" ) { + var body = body_conversion(expr.args[1]); + return new Term(":", [expr.args[0], body]); + } + return expr; + } + + // List to Prolog list + function arrayToList( array, cons ) { + var list = cons ? cons : new Term( "[]", [] ); + for(var i = array.length-1; i >= 0; i-- ) + list = new Term( ".", [array[i], list] ); + return list; + } + + // Array difference + function difference(xs, ys) { + var zs = []; + for(var i = 0; i < xs.length; i++) { + if(indexOf(zs, xs[i]) === -1 && indexOf(ys, xs[i]) === -1) + zs.push(xs[i]); + } + return zs; + } + + // Remove element from array + function remove( array, element ) { + for( var i = array.length - 1; i >= 0; i-- ) { + if( array[i] === element ) { + array.splice(i, 1); + } + } + } + + // Remove duplicate elements + function nub( array ) { + var seen = {}; + var unique = []; + for( var i = 0; i < array.length; i++ ) { + if( !(array[i] in seen) ) { + unique.push( array[i] ); + seen[array[i]] = true; + } + } + return unique; + } + + // Retract a rule + function retract(thread, point, indicator, rule, get_module) { + if(get_module.rules[indicator]) { + for(var i = 0; i < get_module.rules[indicator].length; i++) { + if(get_module.rules[indicator][i] === rule) { + get_module.rules[indicator].splice(i, 1); + get_module.update_indices_predicate(indicator); + thread.success( point ); + break; + } + } + } + } + + // call/n + function callN(n) { + return function(thread, point, atom) { + var closure = atom.args[0], args = atom.args.slice(1, n); + var module_atom; + if(pl.type.is_term(closure) && closure.indicator === ":/2") { + if(!pl.type.is_atom(closure.args[0])) { + thread.throw_error(pl.error.type("module", closure.args[0], atom.indicator)); + return; + } + module_atom = closure.args[0]; + closure = closure.args[1]; + } + if(pl.type.is_variable(closure)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(closure)) { + thread.throw_error(pl.error.type("callable", closure, atom.indicator)); + } else { + var goal = body_conversion(new Term(closure.id, closure.args.concat(args))); + if(!pl.type.is_callable(goal)) { + thread.throw_error(pl.error.type("callable", goal, atom.indicator)); + return; + } + if(module_atom) + goal = new Term(":", [module_atom, goal]); + thread.prepend([new State(point.goal.replace(goal), point.substitution, point)]); + } + }; + } + + // String to indicator + function str_indicator( str ) { + for( var i = str.length - 1; i >= 0; i-- ) + if( str.charAt(i) === "/" ) + return new Term( "/", [new Term( str.substring(0, i) ), new Num( parseInt(str.substring(i+1)), false )] ); + } + + // Greatest common divisor + function gcd(a, b) { + if(b === 0) + return a; + return Math.abs(gcd(b, a % b)); + } + + + + // PROLOG OBJECTS + + // Variables + function Var( id ) { + this.id = id; + this.ground = false; + } + + // Numbers + function Num( value, is_float ) { + this.is_float = is_float !== undefined ? is_float : Math.trunc(value) !== value; + this.value = this.is_float ? value : Math.trunc(value); + this.index = this.value; + this.ground = true; + } + + // Terms + var term_ref = 0; + function Term( id, args, ref ) { + term_ref++; + this.ref = ref || term_ref; + this.id = id; + this.args = args || []; + this.indicator = id + "/" + this.args.length; + this.index = this.indicator; + this.ground = true; + for(var i = 0; i < this.args.length; i++) { + if(this.args[i].hasOwnProperty("ground") && this.args[i].ground === false) { + this.ground = false; + break; + } + } + } + + // Streams + var stream_ref = 0; + function Stream( stream, mode, alias, type, reposition, eof_action ) { + this.id = stream_ref++; + this.stream = stream; + this.mode = mode; // "read" or "write" or "append" + this.alias = alias; + this.type = type !== undefined ? type : "text"; // "text" or "binary" + this.reposition = reposition !== undefined ? reposition : true; // true or false + this.eof_action = eof_action !== undefined ? eof_action : "eof_code"; // "error" or "eof_code" or "reset" + this.position = this.mode === "append" ? "end_of_stream" : 0; + this.output = this.mode === "write" || this.mode === "append"; + this.input = this.mode === "read"; + this.line_position = 0; + this.line_count = 1; + this.char_count = 0; + } + + // Substitutions + function Substitution( links, attrs ) { + links = links || {}; + attrs = attrs || {}; + this.links = links; + this.attrs = attrs; + } + + // States + function State( goal, subs, parent ) { + subs = subs || new Substitution(); + parent = parent || null; + this.goal = goal; + this.substitution = subs; + this.parent = parent; + } + + // Rules + function Rule( head, body, dynamic ) { + this.head = head; + this.body = body; + this.dynamic = dynamic ? dynamic : false; + } + + // Session + function Session( limit ) { + limit = typeof limit === "number" && limit > 0 ? limit : null; + this.rename = 0; + this.modules = {}; + this.modules.user = new Module("user", {}, "all", { + session: this, + dependencies: ["system"] + }); + this.modules.system = pl.modules.system; + this.rules = this.modules.user.rules; + this.total_threads = 0; + this.renamed_variables = {}; + this.public_predicates = this.modules.user.public_predicates; + this.multifile_predicates = this.modules.user.multifile_predicates; + this.limit = limit; + this.streams = { + "user_input": new Stream( + nodejs_flag ? nodejs_user_input : tau_user_input, + "read", "user_input", "text", false, "reset" ), + "user_output": new Stream( + nodejs_flag ? nodejs_user_output : tau_user_output, + "append", "user_output", "text", false, "reset" ), + "user_error": new Stream( + nodejs_flag ? nodejs_user_error : tau_user_error, + "append", "user_error", "text", false, "reset" ), + }; + this.file_system = nodejs_flag ? nodejs_file_system : tau_file_system; + this.standard_input = this.streams["user_input"]; + this.standard_output = this.streams["user_output"]; + this.standard_error = this.streams["user_error"]; + this.current_input = this.streams["user_input"]; + this.current_output = this.streams["user_output"]; + this.working_directory = "/"; // only for browser + this.format_success = function( state ) { return state.substitution; }; + this.format_error = function( state ) { return state.goal; }; + this.flag = { + bounded: pl.flag.bounded.value, + max_integer: pl.flag.max_integer.value, + min_integer: pl.flag.min_integer.value, + integer_rounding_function: pl.flag.integer_rounding_function.value, + char_conversion: pl.flag.char_conversion.value, + debug: pl.flag.debug.value, + max_arity: pl.flag.max_arity.value, + unknown: pl.flag.unknown.value, + double_quotes: pl.flag.double_quotes.value, + occurs_check: pl.flag.occurs_check.value, + dialect: pl.flag.dialect.value, + version_data: pl.flag.version_data.value, + nodejs: pl.flag.nodejs.value, + argv: pl.flag.argv.value + }; + this.__loaded_modules = []; + this.__char_conversion = {}; + this.__operators = { + 1200: { ":-": ["fx", "xfx"], "-->": ["xfx"], "?-": ["fx"] }, + 1150: { "meta_predicate": ["fx"] }, + 1100: { ";": ["xfy"] }, + 1050: { "->": ["xfy"], "*->": ["xfy"] }, + 1000: { ",": ["xfy"] }, + 900: { "\\+": ["fy"] }, + 700: { + "=": ["xfx"], "\\=": ["xfx"], "==": ["xfx"], "\\==": ["xfx"], + "@<": ["xfx"], "@=<": ["xfx"], "@>": ["xfx"], "@>=": ["xfx"], + "=..": ["xfx"], "is": ["xfx"], "=:=": ["xfx"], "=\\=": ["xfx"], + "<": ["xfx"], "=<": ["xfx"], ">": ["xfx"], ">=": ["xfx"] + }, + 600: { ":": ["xfy"] }, + 500: { "+": ["yfx"], "-": ["yfx"], "/\\": ["yfx"], "\\/": ["yfx"] }, + 400: { + "*": ["yfx"], "/": ["yfx"], "//": ["yfx"], "rem": ["yfx"], + "mod": ["yfx"], "<<": ["yfx"], ">>": ["yfx"], "div": ["yfx"] + }, + 200: { "**": ["xfx"], "^": ["xfy"], "-": ["fy"], "+": ["fy"], "\\": ["fy"] } + }; + this.thread = new Thread( this ); + } + + // Threads + function Thread( session ) { + this.epoch = Date.now(); + this.session = session; + this.session.total_threads++; + this.format_success = session.format_success; + this.format_error = session.format_error; + this.total_steps = 0; + this.cpu_time = 0; + this.points = []; + this.debugger = false; + this.debugger_states = []; + this.level = new Term("top_level"); + this.current_limit = this.session.limit; + this.has_limit = this.session.limit !== null; + this.warnings = []; + this.__calls = []; + this.__goal_expansion = false; + this.__stacks = {}; + } + + // Modules + function Module(id, rules, exports, options) { + options = options === undefined ? {} : options; + options.public_predicates = options.public_predicates === undefined ? {} : options.public_predicates; + options.multifile_predicates = options.multifile_predicates === undefined ? {} : options.multifile_predicates; + options.meta_predicates = options.meta_predicates === undefined ? {} : options.meta_predicates; + options.session = options.session === undefined ? null : options.session; + options.dependencies = options.dependencies === undefined ? [] : options.dependencies; + this.id = id; + this.rules = rules; + this.indexed_clauses = {}; + this.non_indexable_clauses = {}; + this.public_predicates = options.public_predicates; + this.multifile_predicates = options.multifile_predicates; + this.meta_predicates = options.meta_predicates; + this.src_predicates = {}; + this.dependencies = options.dependencies; + this.exports = exports; + this.is_library = options.session === null; + this.modules = {}; + if(options.session) { + options.session.modules[id] = this; + for(var i = 0; i < options.dependencies.length; i++) { + var lib = options.dependencies[i]; + if(!options.session.modules.hasOwnProperty(lib)) + options.session.modules[lib] = pl.modules[lib]; + } + } else { + pl.modules[id] = this; + } + if(exports !== "all") { + for(var i = 0; i < exports.length; i++) { + this.public_predicates[exports[i]] = + options.public_predicates.hasOwnProperty(exports[i]) && + options.public_predicates[exports[i]] === true; + } + } + this.update_indices_clauses(); + } + + // Check if a predicate is exported + Module.prototype.exports_predicate = function(indicator) { + return this.exports === "all" || indexOf(this.exports, indicator) !== -1; + }; + + // Check if a predicate is public + Module.prototype.is_public_predicate = function(indicator) { + return !this.public_predicates.hasOwnProperty(indicator) || this.public_predicates[indicator] === true; + }; + + // Check if a predicate is multifile + Module.prototype.is_multifile_predicate = function( indicator ) { + return this.multifile_predicates.hasOwnProperty(indicator) && this.multifile_predicates[indicator] === true; + }; + + // Check if a predicate is a meta-predicate + Module.prototype.is_meta_predicate = function( indicator ) { + if(this.meta_predicates.hasOwnProperty(indicator)) + return this.meta_predicates[indicator]; + return null; + }; + + // Update indices of all predicates + Module.prototype.update_indices_clauses = function() { + this.indexed_clauses = {}; + this.non_indexable_clauses = {}; + for(var indicator in this.rules) + this.update_indices_predicate(indicator); + }; + + // Update indices of a predicate + Module.prototype.update_indices_predicate = function(indicator) { + this.indexed_clauses[indicator] = {}; + this.non_indexable_clauses[indicator] = []; + if(!Array.isArray(this.rules[indicator])) + return; + for(var i = 0; i < this.rules[indicator].length; i++) { + var clause = this.rules[indicator][i]; + this.add_index_predicate(clause); + } + }; + + // Add indexed cluuse to a predicate + Module.prototype.add_index_predicate = function(clause) { + var indicator = clause.head.indicator; + var index = clause.head.args.length > 0 ? clause.head.args[0].index : undefined; + if(index) { + if(!this.indexed_clauses.hasOwnProperty(indicator)) + this.indexed_clauses[indicator] = {}; + if(!this.indexed_clauses[indicator].hasOwnProperty(index)) { + this.indexed_clauses[indicator][index] = []; + if(this.non_indexable_clauses.hasOwnProperty(indicator)) + for(var j = 0; j < this.non_indexable_clauses[indicator].length; j++) + this.indexed_clauses[indicator][index].push(this.non_indexable_clauses[indicator][j]); + } + this.indexed_clauses[indicator][index].push(clause); + } else { + if(!this.non_indexable_clauses.hasOwnProperty(indicator)) + this.non_indexable_clauses[indicator] = []; + this.non_indexable_clauses[indicator].push(clause); + for(var index in this.indexed_clauses[indicator]) + this.indexed_clauses[indicator][index].push(clause); + } + }; + + + + // UNIFY PROLOG OBJECTS + + // Variables + Var.prototype.unify = function(obj, occurs_check) { + if(occurs_check && indexOf(obj.variables(), this.id) !== -1 && !pl.type.is_variable(obj)) + return null; + var links = {}; + links[this.id] = obj; + return new Substitution(links); + }; + + // Numbers + Num.prototype.unify = function(obj, occurs_check) { + if(pl.type.is_number(obj) && this.value === obj.value && this.is_float === obj.is_float) + return new Substitution(); + return null; + }; + + // Terms + Term.prototype.unify = function(obj, occurs_check) { + if(!pl.type.is_term(obj) && obj.unify !== undefined) { + return obj.unify(this, occurs_check); + } else if(pl.type.is_term(obj) && this.indicator === obj.indicator) { + var subs = new Substitution(); + for(var i = 0; i < this.args.length; i++) { + var mgu = pl.unify(this.args[i].apply(subs), obj.args[i].apply(subs), occurs_check); + if(mgu === null) + return null; + for(var x in mgu.links) + subs.links[x] = mgu.links[x]; + subs = subs.apply(mgu); + } + return subs; + } + return null; + }; + + // Streams + Stream.prototype.unify = function(obj, _occurs_check) { + if(pl.type.is_stream(obj) && this.id === obj.id) + return new Substitution(); + return null; + }; + + Stream.prototype.compare = function(obj) { + if(this.id < obj.id) + return -1; + else if(this.id === obj.id) + return 0; + else + return 1; + }; + + + + // PROLOG OBJECTS TO STRING + + // Variables + Var.prototype.toString = function( options ) { + options = options === undefined ? {} : options; + if(options.variable_names) { + var pointer = options.variable_names; + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + var head = pointer.args[0]; + if(pl.type.is_term(head) && head.indicator === "=/2" + && pl.type.is_variable(head.args[1]) && head.args[1].id === this.id + && pl.type.is_atom(head.args[0])) + return head.args[0].id; + pointer = pointer.args[1]; + } + } + return this.id; + }; + + // Numbers + Num.prototype.toString = function( _ ) { + var str = this.value.toString(); + var e = str.indexOf("e"); + if(e !== -1) { + if(str.indexOf(".") !== -1) + return str; + else + return str.replace("e", ".0e"); + } + return this.is_float && indexOf(str, ".") === -1 ? this.value + ".0" : str; + }; + + // Terms + Term.prototype.toString = function( options, priority, from ) { + options = !options ? {} : options; + options.quoted = options.quoted === undefined ? false: options.quoted; + options.ignore_ops = options.ignore_ops === undefined ? false : options.ignore_ops; + options.numbervars = options.numbervars === undefined ? false : options.numbervars; + options.variable_names = options.variable_names === undefined ? false : options.variable_names; + priority = priority === undefined ? {priority: 1200, class: "", indicator: ""} : priority; + from = from === undefined ? "" : from; + var arg_priority = {priority: 999, class: "", indicator: ""}; + if( options.numbervars && this.indicator === "$VAR/1" && pl.type.is_integer( this.args[0] ) && this.args[0].value >= 0 ) { + var i = this.args[0].value; + var number = Math.floor( i/26 ); + var letter = i % 26; + return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[letter] + (number !== 0 ? number : ""); + } + switch( this.indicator ){ + case "[]/0": + case "{}/0": + case "!/0": + return this.id; + case "{}/1": + if( options.ignore_ops === false ) { + return "{" + this.args[0].toString( options ) + "}"; + } else { + return "{}(" + this.args[0].toString( options ) + ")"; + } + case "./2": + if( options.ignore_ops === false ) { + var list = "[" + this.args[0].toString( options, arg_priority ); + var pointer = this.args[1]; + while( pointer.indicator === "./2" ) { + list += "," + pointer.args[0].toString( options, arg_priority ); + pointer = pointer.args[1]; + } + if( pointer.indicator !== "[]/0" ) { + list += "|" + pointer.toString( options, arg_priority ); + } + list += "]"; + return list; + } + default: + var id = this.id; + var operator = options.session ? options.session.lookup_operator( this.id, this.args.length ) : null; + if( options.session === undefined || options.ignore_ops || operator === null ) { + if( options.quoted && (! /^(!|[a-z][0-9a-zA-Z_]*|[#\$\&\*\+\-\.\/\:\<\=\>\?\@\^\~\\]+)$/.test( id ) && id !== "{}" && id !== "[]" || indexOf([".",",",";"], id) !== -1 || id.substring(0,2) === "/*") ) + id = "'" + redoEscape(id) + "'"; + if( this.args.length === 0 && is_graphic_token(this.id) && priority.indicator !== "") + return "(" + id + ")"; + return id + (this.args.length > 0 ? "(" + map( this.args, + function(x) { return x.toString(options, arg_priority); } + ).join(",") + ")" : ""); + } else { + var priority_op = parseInt(operator.priority); + var priority_arg = parseInt(priority.priority); + var cond = priority_op > priority_arg || priority_op === priority_arg && ( + operator.class === "xfx" || + operator.class === "xfy" && this.indicator !== priority.indicator || + operator.class === "yfx" && this.indicator !== priority.indicator || + this.indicator === priority.indicator && operator.class === "yfx" && from === "right" || + this.indicator === priority.indicator && operator.class === "xfy" && from === "left" || + this.indicator === priority.indicator && operator.class === "xf" && from === "left" || + this.indicator === priority.indicator && operator.class === "fx" && from === "right"); + operator.indicator = this.indicator; + var lpar = cond ? "(" : ""; + var rpar = cond ? ")" : ""; + var space = !(is_graphic_token(this.id) || this.id === "," || this.id === ";") + || operator.class.length === 2 + || operator.class.length === 3 && pl.type.is_number(this.args[1]) && this.args[1].value < 0 ? " " : ""; + if( this.args.length === 0 ) { + return lpar + this.id + rpar; + } else if( ["fy","fx"].indexOf( operator.class) !== -1 ) { + return lpar + id + space + this.args[0].toString( options, operator, "right" ) + rpar; + } else if( ["yf","xf"].indexOf( operator.class) !== -1 ) { + return lpar + this.args[0].toString( options, operator, "left" ) + space + id + rpar; + } else { + return lpar + this.args[0].toString( options, operator, "left" ) + space + this.id + space + this.args[1].toString( options, operator, "right" ) + rpar; + } + } + } + }; + + // Streams + Stream.prototype.toString = function( _ ) { + return "(" + this.id + ")"; + }; + + // Substitutions + Substitution.prototype.toString = function( options ) { + var str = "{"; + for( var link in this.links ) { + if(!this.links.hasOwnProperty(link)) continue; + if( str !== "{" ) { + str += ", "; + } + str += link + "/" + this.links[link].toString( options ); + } + str += "}"; + return str; + }; + + // States + State.prototype.toString = function( options ) { + if( this.goal === null ) { + return "<" + this.substitution.toString( options ) + ">"; + } else { + return "<" + this.goal.toString( options ) + ", " + this.substitution.toString( options ) + ">"; + } + }; + + // Rules + Rule.prototype.toString = function( options ) { + if( !this.body ) { + return this.head.toString( options ) + "."; + } else { + return this.head.toString( options, 1200, "left" ) + " :- " + this.body.toString( options, 1200, "right" ) + "."; + } + }; + + // Session + Session.prototype.toString = function( options ) { + var str = ""; + for(var prop in this.modules) { + if(this.modules.hasOwnProperty(prop) && this.modules[prop].is_library) + str += ":- use_module(library(" + this.modules[prop] + ")).\n"; + } + str += "\n"; + for(var key in this.modules.user.rules) { + if(!this.modules.user.rules.hasOwnProperty(key)) continue; + for(i = 0; i < this.modules.user.rules[key].length; i++) { + str += this.modules.user.rules[key][i].toString(options); + str += "\n"; + } + } + return str; + }; + + + + // CLONE PROLOG OBJECTS + + // Variables + Var.prototype.clone = function() { + return new Var( this.id ); + }; + + // Numbers + Num.prototype.clone = function() { + return new Num( this.value, this.is_float ); + }; + + // Terms + Term.prototype.clone = function() { + var term = new Term( this.id, map( this.args, function( arg ) { + return arg.clone(); + } ) ); + if(this.definition_module) + term.definition_module = this.definition_module; + return term; + }; + + // Streams + Stream.prototype.clone = function() { + return new Stream( this.stream, this.mode, this.alias, this.type, this.reposition, this.eof_action ); + }; + + // Substitutions + Substitution.prototype.clone = function() { + var links = {}; + var attrs = {}; + for( var link in this.links ) { + if(!this.links.hasOwnProperty(link)) continue; + links[link] = this.links[link].clone(); + } + for( var attr in this.attrs ) { + if(!this.attrs.hasOwnProperty(attrs)) continue; + attrs[attr] = {}; + for( var m in this.attrs[attr] ) { + if(!this.attrs[attr].hasOwnProperty(m)) continue; + attrs[attr][m] = this.attrs[attr][m].clone(); + } + } + return new Substitution( links, attrs ); + }; + + // States + State.prototype.clone = function() { + return new State( this.goal.clone(), this.substitution.clone(), this.parent ); + }; + + // Rules + Rule.prototype.clone = function() { + return new Rule( this.head.clone(), this.body !== null ? this.body.clone() : null ); + }; + + + + // COMPARE PROLOG OBJECTS + + // Variables + Var.prototype.equals = function( obj ) { + return pl.type.is_variable( obj ) && this.id === obj.id; + }; + + // Numbers + Num.prototype.equals = function( obj ) { + return pl.type.is_number( obj ) && this.value === obj.value && this.is_float === obj.is_float; + }; + + // Terms + Term.prototype.equals = function( obj ) { + if( !pl.type.is_term( obj ) || this.indicator !== obj.indicator ) { + return false; + } + for( var i = 0; i < this.args.length; i++ ) { + if( !this.args[i].equals( obj.args[i] ) ) { + return false; + } + } + return true; + }; + + // Streams + Stream.prototype.equals = function( obj ) { + return pl.type.is_stream( obj ) && this.id === obj.id; + }; + + // Substitutions + Substitution.prototype.equals = function( obj ) { + var link; + if( !pl.type.is_substitution( obj ) ) { + return false; + } + for( link in this.links ) { + if(!this.links.hasOwnProperty(link)) continue; + if( !obj.links[link] || !this.links[link].equals( obj.links[link] ) ) { + return false; + } + } + for( link in obj.links ) { + if(!obj.links.hasOwnProperty(link)) continue; + if( !this.links[link] ) { + return false; + } + } + return true; + }; + + // States + State.prototype.equals = function( obj ) { + return pl.type.is_state( obj ) && this.goal.equals( obj.goal ) && this.substitution.equals( obj.substitution ) && this.parent === obj.parent; + }; + + // Rules + Rule.prototype.equals = function( obj ) { + return pl.type.is_rule( obj ) && this.head.equals( obj.head ) && (this.body === null && obj.body === null || this.body !== null && this.body.equals( obj.body )); + }; + + + + // RENAME VARIABLES OF PROLOG OBJECTS + + // Variables + Var.prototype.rename = function( thread ) { + return thread.get_free_variable( this ); + }; + + // Numbers + Num.prototype.rename = function( _ ) { + return this; + }; + + // Terms + Term.prototype.rename = function( thread ) { + // ground + if(this.ground) + return new Term(this.id, this.args); + // list + if(this.indicator === "./2") { + var arr = []; + var pointer = this; + while(pointer.indicator === "./2" && !pointer.ground) { + var app = pointer.args[0].rename(thread); + arr.push(app); + pointer = pointer.args[1]; + } + var list = pointer.rename(thread); + for(var i = arr.length-1; i >= 0; i--) + list = new Term(".", [arr[i], list]); + return list; + } + // compound term + var args = []; + for(var i = 0; i < this.args.length; i++) { + var app = this.args[i].rename(thread); + args.push(app); + } + return new Term(this.id, args); + }; + + // Streams + Stream.prototype.rename = function( thread ) { + return this; + }; + + // Rules + Rule.prototype.rename = function( thread ) { + return new Rule( this.head.rename( thread ), this.body !== null ? this.body.rename( thread ) : null ); + }; + + + + // CHECK IF RENAME + + // Variables + Var.prototype.is_rename = function(obj, links) { + links = links || {}; + if(!pl.type.is_variable(obj) + || links.hasOwnProperty(this.id) && links[this.id] !== obj.id + || links.hasOwnProperty(obj.id) && links[obj.id] !== this.id) + return false; + links[this.id] = obj.id; + links[obj.id] = this.id; + return true; + }; + + // Numbers + Num.prototype.is_rename = function(obj, _links) { + return this.equals(obj); + }; + + // Terms + Term.prototype.is_rename = function(obj, links) { + links = links || {}; + if(!pl.type.is_term(obj) || this.indicator !== obj.indicator) + return false; + for(var i = 0; i < this.args.length; i++) { + if(!pl.is_rename(this.args[i], obj.args[i], links)) + return false; + } + return true; + }; + + // Streams + Stream.prototype.is_rename = function(obj, _links) { + return this.equals(obj); + }; + + + + // GET ID OF VARIABLES FROM PROLOG OBJECTS + + // Variables + Var.prototype.variables = function() { + return [this.id]; + }; + + // Numbers + Num.prototype.variables = function() { + return []; + }; + + // Terms + Term.prototype.variables = function() { + if(this.ground) + return []; + return [].concat.apply( [], map( this.args, function( arg ) { + return arg.variables(); + } ) ); + }; + + // Streams + Stream.prototype.variables = function() { + return []; + }; + + // Rules + Rule.prototype.variables = function() { + if( this.body === null ) { + return this.head.variables(); + } else { + return this.head.variables().concat( this.body.variables() ); + } + }; + + + + // APPLY SUBSTITUTIONS TO PROLOG OBJECTS + + // Variables + Var.prototype.apply = function( subs ) { + if( subs.lookup( this.id ) ) { + return subs.lookup( this.id ); + } + return this; + }; + + // Numbers + Num.prototype.apply = function( _ ) { + return this; + }; + + // Terms + Term.prototype.apply = function( subs ) { + // ground atom + if(this.ground) + return this; + // list + if(this.indicator === "./2") { + var arr = []; + var pointer = this; + while(pointer.indicator === "./2" && !pointer.ground) { + var app = pointer.args[0].apply(subs); + arr.push(app); + pointer = pointer.args[1]; + } + var list = pointer.apply(subs); + for(var i = arr.length-1; i >= 0; i--) + list = new Term(".", [arr[i], list]); + return list; + } + // compound term + var args = []; + for(var i = 0; i < this.args.length; i++) { + var app = this.args[i].apply(subs); + args.push(app); + } + return new Term(this.id, args, this.ref); + }; + + // Streams + Stream.prototype.apply = function( _ ) { + return this; + }; + + // Rules + Rule.prototype.apply = function( subs ) { + return new Rule( this.head.apply( subs ), this.body !== null ? this.body.apply( subs ) : null ); + }; + + // Substitutions + Substitution.prototype.apply = function( subs ) { + var link, links = {}, attr, attrs = {}, m; + for( link in this.links ) { + if(!this.links.hasOwnProperty(link)) continue; + links[link] = this.links[link].apply(subs); + } + for( attr in this.attrs ) { + if(!this.attrs.hasOwnProperty(attr)) continue; + attrs[attr] = {}; + for( m in this.attrs[attr] ) { + if(!this.attrs[attr].hasOwnProperty(m)) continue; + attrs[attr][m] = this.attrs[attr][m].apply(subs); + } + } + return new Substitution( links, attrs ); + }; + + + + // SELECTION FUNCTION + + // Select term + Term.prototype.select = function() { + var pointer = this; + while(pl.type.is_term(pointer) && pointer.indicator === ",/2") + pointer = pointer.args[0]; + return pointer; + }; + + // Replace term + Term.prototype.replace = function( expr ) { + if( this.indicator === ",/2" ) { + if( this.args[0].indicator === ",/2" ) { + return new Term( ",", [this.args[0].replace( expr ), this.args[1]] ); + } else { + return expr === null ? this.args[1] : new Term( ",", [expr, this.args[1]] ); + } + } else { + return expr; + } + }; + + // Search term + Term.prototype.search = function( expr ) { + if(this == expr || this.ref === expr.ref) + return true; + for( var i = 0; i < this.args.length; i++ ) + if( pl.type.is_term( this.args[i] ) && this.args[i].search( expr ) ) + return true; + return false; + }; + + + + // PROLOG SESSIONS AND THREADS + + // Push to a global stack + Session.prototype.push_global_stack = function(stack, value) { + return this.thread.push_global_stack(stack, value); + }; + Thread.prototype.push_global_stack = function(stack, value) { + if(!this.__stacks.hasOwnProperty(stack)) + this.__stacks[stack] = []; + this.__stacks[stack].push(value); + }; + + // Pop all from a global stack + Session.prototype.flush_global_stack = function(stack, tail) { + return this.thread.push_global_stack(stack, tail); + }; + Thread.prototype.flush_global_stack = function(stack, tail) { + var list = tail || new Term("[]", []); + if(this.__stacks.hasOwnProperty(stack)) { + while(this.__stacks[stack].length > 0) + list = new Term(".", [this.__stacks[stack].pop(), list]); + delete this.__stacks[stack]; + } + return list; + }; + + // Set max inferences + Session.prototype.setMaxInferences = function(max) { + this.limit = typeof max === "number" && max > 0 ? max : null; + }; + Thread.prototype.setMaxInferences = function(max) { + this.session.setMaxInferences(max); + this.current_limit = this.session.limit; + this.has_limit = this.session.limit !== null; + }; + + // Format answer + Session.prototype.format_answer = function(answer, options) { + return this.thread.format_answer(answer, options); + }; + Thread.prototype.format_answer = function(answer, options) { + return pl.format_answer(answer, this, options); + }; + + // Get current input + Session.prototype.get_current_input = function() { + return this.current_input; + }; + Thread.prototype.get_current_input = function() { + return this.session.get_current_input(); + }; + + // Get current output + Session.prototype.get_current_output = function() { + return this.current_output; + }; + Thread.prototype.get_current_output = function() { + return this.session.get_current_output(); + }; + + // Set current input + Session.prototype.set_current_input = function( input ) { + this.current_input = input; + }; + Thread.prototype.set_current_input = function( input ) { + return this.session.set_current_input( input ); + }; + + // Set current output + Session.prototype.set_current_output = function( output ) { + this.current_output = output; + }; + Thread.prototype.set_current_output = function( output ) { + return this.session.set_current_output( output); + }; + + // Get stream by alias + Session.prototype.get_stream_by_alias = function( alias ) { + return this.streams[alias]; + }; + Thread.prototype.get_stream_by_alias = function( alias ) { + return this.session.get_stream_by_alias( alias ); + }; + + // Open file + Session.prototype.file_system_open = function( path, type, mode ) { + if(this.get_flag("nodejs").indicator === "false/0") + path = this.absolute_file_name(path); + return this.file_system.open( path, type, mode ); + }; + Thread.prototype.file_system_open = function( path, type, mode ) { + return this.session.file_system_open( path, type, mode ); + }; + + // Absolute file name + Session.prototype.absolute_file_name = function(filename) { + var absolute; + // node.js + if(this.get_flag("nodejs").indicator === "true/0") { + var path = __webpack_require__(/*! path */ "../../node_modules/path/path.js"); + absolute = filename; + for(var prop in process.env) { + if(!process.env.hasOwnProperty(prop)) + continue; + absolute = absolute.replace(new RegExp("\\$" + prop, "g"), process.env[prop]); + } + return path.resolve(absolute); + // browser + } else { + var cwd = this.working_directory; + if(filename[0] === "/") + absolute = filename; + else + absolute = cwd + (cwd[cwd.length-1] === "/" ? filename : "/" + filename); + absolute = absolute.replace(/\/\.\//g, "/"); + var dirs = absolute.split("/"); + var dirs2 = []; + for(var i = 0; i < dirs.length; i++) { + if(dirs[i] !== "..") { + dirs2.push(dirs[i]); + } else { + if(dirs2.length !== 0) + dirs2.pop(); + } + } + absolute = dirs2.join("/").replace(/\/\.$/, "/"); + } + return absolute; + }; + Thread.prototype.absolute_file_name = function(path, cwd) { + return this.session.absolute_file_name(path, cwd); + }; + + // Get conversion of the char + Session.prototype.get_char_conversion = function( char ) { + return this.__char_conversion[char] || char; + }; + Thread.prototype.get_char_conversion = function( char ) { + return this.session.get_char_conversion( char ); + }; + + // Parse an expression + Session.prototype.parse = function( string ) { + return this.thread.parse( string ); + }; + Thread.prototype.parse = function( string ) { + var tokenizer = new Tokenizer( this ); + tokenizer.new_text( string ); + var tokens = tokenizer.get_tokens(); + if( tokens === null ) + return false; + var expr = parseExpr(this, tokens, 0, this.__get_max_priority(), false); + if( expr.len !== tokens.length ) + return false; + return { value: expr.value, expr: expr, tokens: tokens }; + }; + + // Get flag value + Session.prototype.get_flag = function( flag ) { + return this.flag[flag]; + }; + Thread.prototype.get_flag = function( flag ) { + return this.session.get_flag( flag ); + }; + + // Add a rule + Session.prototype.add_rule = function(rule, options) { + return this.thread.add_rule(rule, options); + }; + Thread.prototype.add_rule = function(rule, options) { + options = options ? options : {}; + options.from = options.from ? options.from : "$tau-js"; + var module_id, get_module; + if(pl.type.is_term(rule.head) && rule.head.indicator === ":/2") { + if(!pl.type.is_atom(rule.head.args[0])) { + this.throw_warning(pl.error.type("module", rule.head.args[0], "top_level/0")); + return; + } + module_id = rule.head.args[0].id; + rule.head = rule.head.args[1]; + } + if(module_id) { + get_module = this.session.modules[module_id]; + if(!pl.type.is_module(get_module)) { + get_module = new Module(module_id, {}, "all", {session: this.session}); + this.session.modules[module_id] = get_module; + } + } else { + get_module = this.session.modules[options.context_module]; + } + get_module.src_predicates[rule.head.indicator] = options.from; + if(!get_module.rules.hasOwnProperty(rule.head.indicator)) { + get_module.rules[rule.head.indicator] = []; + } + get_module.rules[rule.head.indicator].push(rule); + if(!get_module.public_predicates.hasOwnProperty(rule.head.indicator)) + get_module.public_predicates[rule.head.indicator] = false; + // update term indexing + get_module.add_index_predicate(rule); + return true; + }; + + // Run a directive + Session.prototype.run_directive = function(directive, options) { + return this.thread.run_directive(directive, options); + }; + Thread.prototype.run_directive = function(directive, options) { + if(pl.type.is_directive(directive)) { + if(pl.directive[directive.indicator]) + return pl.directive[directive.indicator](this, directive, options); + else + return pl.directive[directive.id + "/*"](this, directive, options); + } + return false; + }; + + // Get maximum priority of the operators + Session.prototype.__get_max_priority = function() { + return "1200"; + }; + Thread.prototype.__get_max_priority = function() { + return this.session.__get_max_priority(); + }; + + // Get next priority of the operators + Session.prototype.__get_next_priority = function( priority ) { + var max = 0; + priority = parseInt( priority ); + for( var key in this.__operators ) { + if( !this.__operators.hasOwnProperty(key) ) continue; + var n = parseInt(key); + if( n > max && n < priority ) max = n; + } + return max.toString(); + }; + Thread.prototype.__get_next_priority = function( priority ) { + return this.session.__get_next_priority( priority ); + }; + + // Get classes of an operator + Session.prototype.__lookup_operator_classes = function( priority, operator ) { + if( this.__operators.hasOwnProperty( priority ) && this.__operators[priority][operator] instanceof Array ) { + return this.__operators[priority][operator] || false; + } + return false; + }; + Thread.prototype.__lookup_operator_classes = function( priority, operator ) { + return this.session.__lookup_operator_classes( priority, operator ); + }; + + // Get operator + Session.prototype.lookup_operator = function( name, arity ) { + for(var p in this.__operators) + if(this.__operators[p][name]) + for(var i = 0; i < this.__operators[p][name].length; i++) + if( this.__operators[p][name][i].length === arity+1 ) + return {priority: p, class: this.__operators[p][name][i]}; + return null; + }; + Thread.prototype.lookup_operator = function( name, arity ) { + return this.session.lookup_operator( name, arity ); + }; + + // Throw a warning + Session.prototype.throw_warning = function( warning ) { + this.thread.throw_warning( warning ); + }; + Thread.prototype.throw_warning = function( warning ) { + this.warnings.push( warning ); + }; + + // Get warnings + Session.prototype.get_warnings = function() { + return this.thread.get_warnings(); + }; + Thread.prototype.get_warnings = function() { + return this.warnings; + }; + + // Add a goal + Session.prototype.add_goal = function( goal, unique ) { + this.thread.add_goal( goal, unique ); + }; + Thread.prototype.add_goal = function( goal, unique, parent ) { + parent = parent ? parent : null; + if( unique === true ) + this.points = []; + var vars = goal.variables(); + var links = {}; + for( var i = 0; i < vars.length; i++ ) + links[vars[i]] = new Var(vars[i]); + this.points.push( new State( goal, new Substitution(links), parent ) ); + }; + + // Consult a program from a string + Session.prototype.consult = function(program, options) { + return this.thread.consult(program, options); + }; + Thread.prototype.consult = function(program, options) { + var string = "", success = false; + var opts = {}; + var callback = typeof options === "function" ? options : function(){}; + options = options === undefined || typeof options === "function" ? {} : options; + opts.context_module = options.context_module === undefined ? "user" : options.context_module; + opts.text = options.text === undefined ? true : options.text; + opts.html = options.html === undefined ? true : options.html; + opts.url = options.url === undefined ? true : options.url; + opts.file = options.file === undefined ? true : options.file; + opts.script = options.script === undefined ? true : options.script; + opts.success = options.success === undefined ? callback : options.success; + opts.error = options.error === undefined ? callback : options.error; + // string + if(typeof program === "string") { + string = program; + // script id + if(opts.script && this.get_flag("nodejs").indicator === "false/0" && program != "" && document.getElementById(string)) { + var script = document.getElementById(string); + var type = script.getAttribute("type"); + if(type !== null && type.replace(/ /g, "").toLowerCase() === "text/prolog") { + string = script.text; + success = true; + } + } + // file (node.js) + if(!success && opts.file && this.get_flag("nodejs").indicator === "true/0") { + var fs = __webpack_require__(/*! fs */ "?1914"); + var thread = this; + fs.readFile(program, function(error, data) { + if(error) { + opts.file = false; + thread.consult(program, opts); + } else { + parseProgram(thread, data.toString(), opts); + } + }); + return; + } + // http request + if(!success && this.get_flag("nodejs").indicator === "false/0" && opts.url && program !== "" && !(/\s/.test(program))) { + try { + var xhttp = new XMLHttpRequest(); + var thread = this; + xhttp.onreadystatechange = function() { + if(this.readyState == 4) { + if(this.status == 200) { + string = xhttp.responseText; + success = true; + parseProgram(thread, string, opts); + } else { + opts.url = false; + thread.consult(program, opts); + } + } + } + xhttp.open("GET", program, true); + xhttp.send(); + return; + } catch(ex) { + opts.error(ex); + return; + } + } + // text + if(!success && opts.text) { + success = true; + } + // html + } else if(opts.html && program.nodeName) { + switch(program.nodeName.toLowerCase()) { + case "input": + case "textarea": + string = program.value; + success = true; + break; + default: + string = program.innerHTML; + success = true; + break; + } + } else { + opts.error(pl.error.existence("source_sink", new Term(string), "top_level/0")); + } + this.warnings = []; + parseProgram(this, string, opts); + }; + + // Query goal from a string (without ?-) + Session.prototype.query = function(string, options) { + return this.thread.query(string, options); + }; + Thread.prototype.query = function(string, options) { + this.points = []; + this.debugger_states = []; + this.level = new Term("top_level"); + return parseQuery(this, string, options); + }; + + // Get first choice point + Session.prototype.head_point = function() { + return this.thread.head_point(); + }; + Thread.prototype.head_point = function() { + return this.points[this.points.length-1]; + }; + + // Get free variable + Session.prototype.get_free_variable = function( variable ) { + return this.thread.get_free_variable( variable ); + }; + Thread.prototype.get_free_variable = function( variable ) { + var variables = []; + if( variable.id === "_" || this.session.renamed_variables[variable.id] === undefined ) { + this.session.rename++; + if( this.current_point ) + variables = this.current_point.substitution.domain(); + while( indexOf( variables, pl.format_variable( this.session.rename, variable.id ) ) !== -1 ) { + this.session.rename++; + } + if( variable.id === "_" ) { + return new Var( pl.format_variable( this.session.rename, variable.id ) ); + } else { + this.session.renamed_variables[variable.id] = pl.format_variable( this.session.rename, variable.id ); + } + } + return new Var( this.session.renamed_variables[variable.id] ); + }; + + // Get next free variable + Session.prototype.next_free_variable = function() { + return this.thread.next_free_variable(); + }; + Thread.prototype.next_free_variable = function() { + this.session.rename++; + var variables = []; + if( this.current_point ) + variables = this.current_point.substitution.domain(); + while( indexOf( variables, pl.format_variable( this.session.rename ) ) !== -1 ) { + this.session.rename++; + } + return new Var( pl.format_variable( this.session.rename ) ); + }; + + // Check if a predicate is public + Session.prototype.is_public_predicate = function(indicator, module_id) { + module_id = module_id === undefined ? "user" : module_id; + return pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_public_predicate(indicator); + }; + Thread.prototype.is_public_predicate = function(indicator, module_id) { + return this.session.is_public_predicate(indicator, module_id); + }; + + // Check if a predicate is multifile + Session.prototype.is_multifile_predicate = function(indicator, module_id) { + module_id = module_id === undefined ? "user" : module_id; + return pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_multifile_predicate(indicator); + }; + Thread.prototype.is_multifile_predicate = function(indicator, module_id) { + return this.session.is_multifile_predicate(indicator, module_id); + }; + + // Check if a predicate is a meta-predicate + Session.prototype.is_meta_predicate = function(indicator, module_id) { + module_id = module_id === undefined ? "user" : module_id; + if(pl.type.is_module(this.modules[module_id])) + return this.modules[module_id].is_meta_predicate(indicator); + return null; + }; + Thread.prototype.is_meta_predicate = function(indicator, module_id) { + return this.session.is_meta_predicate(indicator, module_id); + }; + + // Insert states at the beginning + Session.prototype.prepend = function( states ) { + return this.thread.prepend( states ); + }; + Thread.prototype.prepend = function( states ) { + for(var i = states.length-1; i >= 0; i--) + this.points.push( states[i] ); + }; + + // Remove the selected term and prepend the current state + Session.prototype.success = function( point, parent ) { + return this.thread.success( point, parent ); + } + Thread.prototype.success = function( point, parent ) { + var parent = typeof parent === "undefined" ? point : parent; + this.prepend( [new State( point.goal.replace( null ), point.substitution, parent ) ] ); + }; + + // Throw error + Session.prototype.throw_error = function(error) { + return this.thread.throw_error(error); + }; + Thread.prototype.throw_error = function(error) { + if(pl.type.is_variable(error)) + error = pl.error.instantiation(this.level.indicator); + var state = new State( + new Term("throw", [error]), + new Substitution(), + null + ); + state.error = true; + this.prepend([state]); + }; + + // Get the module of a predicate + Session.prototype.lookup_module = function(atom, context_module) { + return this.thread.lookup_module(atom, context_module); + } + Thread.prototype.lookup_module = function(atom, context_module) { + var get_module = this.session.modules[context_module]; + if(!pl.type.is_module(get_module)) + get_module = this.session.modules.user; + if(get_module.rules.hasOwnProperty(atom.indicator) && ( + get_module.exports_predicate(atom.indicator) || + get_module.rules.hasOwnProperty(this.level.indicator) || + context_module === get_module.id)) + return get_module; + get_module.modules.system = pl.modules.system; + get_module.modules.user = this.session.modules.user; + for(var prop in get_module.modules) { + if(!this.session.modules.hasOwnProperty(prop)) + continue; + var get_module = this.session.modules[prop]; + if(get_module.rules.hasOwnProperty(atom.indicator) && ( + get_module.exports_predicate(atom.indicator) || + get_module.rules.hasOwnProperty(this.level.indicator) || + context_module === get_module.id)) + return get_module; + } + return null; + }; + + // Expand a meta-predicate + Session.prototype.expand_meta_predicate = function(atom, definition_module, context_module) { + return this.thread.expand_meta_predicate(atom, definition_module, context_module); + }; + Thread.prototype.expand_meta_predicate = function(atom, definition_module, context_module) { + var get_module = this.session.modules[definition_module]; + if(!get_module) + return; + var meta = get_module.is_meta_predicate(atom.indicator); + if(!meta) + return; + for(var i = 0; i < meta.args.length; i++) { + if(pl.type.is_integer(meta.args[i]) || pl.type.is_atom(meta.args[i]) && indexOf([":"], meta.args[i].id) !== -1) { + if(!pl.type.is_term(atom.args[i]) || atom.args[i].indicator !== ":/2") { + atom.args[i] = new Term(":", [new Term(context_module), atom.args[i]]); + } + } else if(pl.type.is_atom(meta.args[i]) && meta.args[i].id === "^") { + var pointer_last = atom; + var pointer_index = i; + var pointer = atom.args[i]; + while(pl.type.is_term(pointer) && pointer.indicator === "^/2") { + pointer_last = pointer; + pointer_index = 1; + pointer = pointer.args[1]; + } + if(!pl.type.is_term(pointer) || pointer.indicator !== ":/2") { + pointer_last.args[pointer_index] = new Term(":", [new Term(context_module), pointer]); + } + } + } + }; + + // Resolution step + Session.prototype.step = function() { + return this.thread.step(); + } + Thread.prototype.step = function() { + if(this.points.length === 0) { + return; + } + var asyn = false; + var point = this.points.pop(); + this.current_point = point; + if(this.debugger) + this.debugger_states.push(point); + var atom = pl.type.is_term(point.goal) ? point.goal.select() : point.goal; + if(pl.type.is_term(atom) && (atom.indicator !== ":/2" || pl.type.is_term(atom.args[1]))) { + var context_module = null; + var states = []; + if(atom !== null) { + this.total_steps++; + var level = point; + while(level.parent !== null && level.parent.goal.search(atom)) + level = level.parent; + if(level.parent === null) { + this.level = new Term("top_level"); + } else { + this.level = level.parent.goal.select(); + if(this.level.indicator === ":/2") + this.level = this.level.args[1]; + } + if(pl.type.is_term(atom) && atom.indicator === ":/2") { + context_module = atom.args[0]; + atom = atom.args[1]; + if(!pl.type.is_atom(context_module)) { + this.throw_error(pl.error.type("module", context_module, this.level.indicator)); + return; + } + context_module = context_module.id; + } else { + if(this.level.definition_module) { + context_module = this.level.definition_module; + } else { + context_module = "user"; + } + } + atom.context_module = context_module; + if(atom.indicator === ",/2") { + this.prepend([new State( + point.goal.replace(new Term(",", [ + new Term(":", [new Term(context_module), atom.args[0]]), + new Term(":", [new Term(context_module), atom.args[1]])])), + point.substitution, + point + )]); + return; + } + this.__call_indicator = atom.indicator; + var get_module = this.lookup_module(atom, context_module); + atom.definition_module = pl.type.is_module(get_module) ? get_module.id : "user"; + this.expand_meta_predicate(atom, atom.definition_module, context_module); + var clauses = null; + if(get_module && atom.args.length > 0 && atom.args[0].index && get_module.indexed_clauses.hasOwnProperty(atom.indicator) && get_module.indexed_clauses[atom.indicator].hasOwnProperty(atom.args[0].index)) + clauses = get_module.indexed_clauses[atom.indicator][atom.args[0].index]; + else + clauses = get_module === null ? null : get_module.rules[atom.indicator]; + if(clauses === null) { + if(!this.session.modules.user.rules.hasOwnProperty(atom.indicator)) { + if(this.get_flag("unknown").id === "error") { + this.throw_error( pl.error.existence( "procedure", atom.indicator, this.level.indicator)); + } else if(this.get_flag("unknown").id === "warning") { + this.throw_warning("unknown procedure " + atom.indicator + " (from " + this.level.indicator + ")"); + } + } + } else if(clauses instanceof Function) { + asyn = clauses(this, point, atom); + } else { + // Goal expansion + if(this.__goal_expansion && atom.indicator === "goal_expansion/2") + clauses = clauses.concat(pl.builtin.rules["goal_expansion/2"]); + for(var i = 0; i < clauses.length; i++) { + this.session.renamed_variables = {}; + var clause = clauses[i].rename(this); + var occurs_check = this.get_flag("occurs_check").indicator === "true/0"; + var mgu = pl.unify(atom, clause.head, occurs_check); + if(mgu !== null) { + var state = new State(); + state.goal = point.goal.replace(clause.body); + if(state.goal !== null) + state.goal = state.goal.apply(mgu); + state.substitution = point.substitution.apply(mgu); + state.parent = point; + states.push(state); + } + } + this.prepend(states); + } + } + } else { + var term = pl.type.is_term(atom) && atom.indicator === ":/2" ? atom.args[1] : atom; + if(pl.type.is_variable(term)) + this.throw_error(pl.error.instantiation(this.level.indicator)); + else + this.throw_error(pl.error.type("callable", term, this.level.indicator)); + } + return asyn; + }; + + // Find next computed answer + Session.prototype.answer = function(options) { + return this.thread.answer(options); + }; + Thread.prototype.answer = function(options) { + var opts = {}; + options = options || function() {}; + if(typeof options === "function") { + opts = { + success: options, + error: options, + fail: options, + limit: options + }; + } else { + opts.success = options.success === undefined ? function() {} : options.success; + opts.error = options.error === undefined ? function() {} : options.error; + opts.fail = options.fail === undefined ? function() {} : options.fail; + opts.limit = options.limit === undefined ? function() {} : options.limit; + } + this.__calls.push(opts); + if( this.__calls.length > 1 ) { + return; + } + this.again(); + }; + + // Find all computed answers + Session.prototype.answers = function( callback, max, after ) { + return this.thread.answers( callback, max, after ); + } + Thread.prototype.answers = function( callback, max, after ) { + var answers = max === undefined ? 1000 : max; + var thread = this; + if( answers <= 0 ) { + if(after) + after(); + return; + } + this.answer( function( answer ) { + callback( answer ); + if( answer !== false ) { + setTimeout( function() { + thread.answers( callback, answers-1, after ); + }, 0 ); + } else if(after) { + after(); + } + } ); + }; + + // Again finding next computed answer + Session.prototype.again = function(reset_limit) { + return this.thread.again(reset_limit); + }; + Thread.prototype.again = function(reset_limit) { + while(this.__calls.length > 0) { + this.warnings = []; + if(reset_limit !== false) + this.current_limit = this.session.limit; + while((!this.has_limit || this.current_limit > 0) && this.points.length > 0 && this.head_point().goal !== null && !pl.type.is_error_state(this.head_point())) { + if(this.has_limit) + this.current_limit--; + var t0 = Date.now(); + var asyn = this.step(); + var t1 = Date.now(); + this.cpu_time += t1-t0; + if(asyn === true) + return; + } + var call = this.__calls.shift(); + // limit of inferences + if(this.has_limit && this.current_limit <= 0) { + (function(call) { + return setTimeout(function() { + call.limit(null); + }, 0); + })(call); + // no answer + } else if(this.points.length === 0) { + (function(call) { + return setTimeout(function() { + call.fail(false); + }, 0); + })(call); + // error + } else if(pl.type.is_error(this.head_point().goal)) { + var error = this.format_error(this.points.pop()); + this.points = []; + (function(error, call) { + return setTimeout(function() { + call.error(error); + }, 0); + })(error, call); + // computed answer + } else { + if(this.debugger) + this.debugger_states.push(this.head_point()); + var answer = this.format_success(this.points.pop()); + (function(answer, call) { + return setTimeout(function() { + call.success(answer); + }, 0); + })(answer, call); + } + } + }; + + // Unfolding transformation + Session.prototype.unfold = function( rule ) { + if(rule.body === null) + return false; + var head = rule.head; + var body = rule.body; + var atom = body.select(); + var thread = new Thread( this ); + var unfolded = []; + thread.add_goal( atom ); + thread.step(); + for( var i = thread.points.length-1; i >= 0; i-- ) { + var point = thread.points[i]; + var head2 = head.apply( point.substitution ); + var body2 = body.replace( point.goal ); + if( body2 !== null ) + body2 = body2.apply( point.substitution ); + unfolded.push( new Rule( head2, body2 ) ); + } + var rules = this.modules.user.rules[head.indicator]; + var index = indexOf( rules, rule ); + if( unfolded.length > 0 && index !== -1 ) { + rules.splice.apply( rules, [index, 1].concat(unfolded) ); + return true; + } + return false; + }; + Thread.prototype.unfold = function(rule) { + return this.session.unfold(rule); + }; + + + + // INTERPRET EXPRESSIONS + + // Variables + Var.prototype.interpret = function( thread ) { + return pl.error.instantiation( thread.level.indicator ); + }; + + // Numbers + Num.prototype.interpret = function( thread ) { + return this; + }; + + // Terms + Term.prototype.interpret = function( thread ) { + if( pl.type.is_unitary_list( this ) ) { + return this.args[0].interpret( thread ); + } else { + return pl.operate( thread, this ); + } + }; + + + + // COMPARE PROLOG OBJECTS + + // Variables + Var.prototype.compare = function( obj ) { + if( this.id < obj.id ) { + return -1; + } else if( this.id > obj.id ) { + return 1; + } else { + return 0; + } + }; + + // Numbers + Num.prototype.compare = function( obj ) { + if( this.value === obj.value && this.is_float === obj.is_float ) { + return 0; + } else if( this.value < obj.value || this.value === obj.value && this.is_float && !obj.is_float ) { + return -1; + } else if( this.value > obj.value ) { + return 1; + } + }; + + // Terms + Term.prototype.compare = function( obj ) { + if( this.args.length < obj.args.length || this.args.length === obj.args.length && this.id < obj.id ) { + return -1; + } else if( this.args.length > obj.args.length || this.args.length === obj.args.length && this.id > obj.id ) { + return 1; + } else { + for( var i = 0; i < this.args.length; i++ ) { + var arg = pl.compare( this.args[i], obj.args[i] ); + if( arg !== 0 ) { + return arg; + } + } + return 0; + } + }; + + + + // SUBSTITUTIONS + + // Lookup variable + Substitution.prototype.lookup = function( variable ) { + if( this.links[variable] ) { + return this.links[variable]; + } else { + return null; + } + }; + + // Filter variables + Substitution.prototype.filter = function( predicate ) { + var links = {}; + for( var id in this.links ) { + if(!this.links.hasOwnProperty(id)) continue; + var value = this.links[id]; + if( predicate( id, value ) ) { + links[id] = value; + } + } + return new Substitution( links, this.attrs ); + }; + + // Exclude variables + Substitution.prototype.exclude = function( variables ) { + var links = {}; + for( var variable in this.links ) { + if(!this.links.hasOwnProperty(variable)) continue; + if( indexOf( variables, variable ) === -1 ) { + links[variable] = this.links[variable]; + } + } + return new Substitution( links, this.attrs ); + }; + + // Add link + Substitution.prototype.add = function( variable, value ) { + this.links[variable] = value; + }; + + // Get domain + Substitution.prototype.domain = function( plain ) { + var f = plain === true ? function(x){return x;} : function(x){return new Var(x);}; + var vars = []; + for( var x in this.links ) + vars.push( f(x) ); + return vars; + }; + + // Get an attribute + Substitution.prototype.get_attribute = function( variable, module ) { + if( this.attrs[variable] ) + return this.attrs[variable][module]; + } + + // Set an attribute (in a new substitution) + Substitution.prototype.set_attribute = function( variable, module, value ) { + var subs = new Substitution( this.links ); + for( var v in this.attrs ) { + if( v === variable ) { + subs.attrs[v] = {}; + for( var m in this.attrs[v] ) { + subs.attrs[v][m] = this.attrs[v][m]; + } + } else { + subs.attrs[v] = this.attrs[v]; + } + } + if( !subs.attrs[variable] ) { + subs.attrs[variable] = {}; + } + subs.attrs[variable][module] = value; + return subs; + } + + // Check if a variables has attributes + Substitution.prototype.has_attributes = function( variable ) { + return this.attrs[variable] && this.attrs[variable] !== {}; + } + + + + // GENERATE JAVASCRIPT CODE FROM PROLOG OBJECTS + + // Variables + Var.prototype.compile = function() { + return 'new pl.type.Var("' + this.id.toString() + '")'; + }; + + // Numbers + Num.prototype.compile = function() { + return 'new pl.type.Num(' + this.value.toString() + ', ' + this.is_float.toString() + ')'; + }; + + // Terms + Term.prototype.compile = function() { + return 'new pl.type.Term("' + this.id.replace(/"/g, '\\"') + '", [' + map( this.args, function( arg ) { + return arg.compile(); + } ) + '])'; + }; + + // Rules + Rule.prototype.compile = function() { + return 'new pl.type.Rule(' + this.head.compile() + ', ' + (this.body === null ? 'null' : this.body.compile()) + ')'; + }; + + // Sessions + Session.prototype.compile = function() { + var str, obj = [], rules; + for( var _indicator in this.modules.user.rules ) { + if(!this.modules.user.rules.hasOwnProperty(_indicator)) continue; + var indicator = this.modules.user.rules[_indicator]; + rules = []; + str = "\"" + _indicator + "\": ["; + for(var i = 0; i < indicator.length; i++) { + rules.push(indicator[i].compile()); + } + str += rules.join(); + str += "]"; + obj.push( str ); + } + return "{" + obj.join() + "};"; + }; + + // Module + Module.prototype.compile = function() { + var length = 0; + var dependencies = 0; + var str = "var pl;\n"; + str += "(function(pl) {\n"; + // name + str += "\tvar name = \"" + this.id + "\";\n"; + // predicates + str += "\tvar predicates = function() {\n"; + str += "\t\treturn {\n"; + for(var prop in this.rules) { + if(length > 0) + str += ",\n"; + str += "\t\t\t\"" + prop + "\": "; + if(typeof this.rules[prop] === "function") { + str += this.rules[prop]; + } else { + str += "[\n"; + for(var i = 0; i < this.rules[prop].length; i++) { + str += "\t\t\t\t" + this.rules[prop][i].compile(); + if(i < this.rules[prop].length-1) + str += ","; + str += "\n"; + } + str += "\t\t\t]"; + } + length++; + } + str += "\n\t\t};\n"; + str += "\t};\n"; + // exports + str += "\tvar exports = ["; + for(var i = 0; i < this.exports.length; i++) { + if(i > 0) + str += ", "; + str += "\"" + this.exports[i] + "\""; + } + str += "];\n"; + // options + str += "\tvar options = function() {\n"; + str += "\t\treturn {\n"; + // dependencies + str += "\t\t\tdependencies: ["; + for(var prop in this.modules) { + if(dependencies > 0) + str += ", "; + str += "\"" + prop + "\""; + dependencies++; + } + str += "]\n"; + str += "\t\t};\n"; + str += "};\n"; + // fixed code + str += "\tif(typeof module !== 'undefined') {\n"; + str += "\t\tmodule.exports = function(p) {\n"; + str += "\t\t\tpl = p;\n"; + str += "\t\t\tnew pl.type.Module(name, predicates(), exports, options());\n"; + str += "\t\t};\n"; + str += "\t} else {\n"; + str += "\t\tnew pl.type.Module(name, predicates(), exports, options());\n"; + str += "\t}\n"; + str += "})(pl);\n"; + return str; + }; + + + + // PROLOG TO JAVASCRIPT + Var.prototype.toJavaScript = function() { + return this.toString(); + }; + + // Numbers + Num.prototype.toJavaScript = function() { + return this.value; + }; + + // Terms + Term.prototype.toJavaScript = function(options) { + // Atom => String + if( this.args.length === 0 && this.indicator !== "[]/0" ) { + return this.toString(options); + } else if( pl.type.is_list( this ) ) { + // List => Array + var all_obj = true; + var arr = []; + var obj = {}; + var pointer = this; + var value; + while( pointer.indicator === "./2" ) { + value = pointer.args[0].toJavaScript(options); + arr.push( value ); + all_obj = all_obj && pl.type.is_term(pointer.args[0]) && pointer.args[0].indicator === "-/2" && pl.type.is_atom(pointer.args[0].args[0]); + if(all_obj) + obj[pointer.args[0].args[0].id] = pointer.args[0].args[1].toJavaScript(options); + pointer = pointer.args[1]; + } + if( pointer.indicator === "[]/0" ) + return all_obj && arr.length > 0 ? obj : arr; + + } + return this.toString(options); + }; + + + + // RULES + + // Return singleton variables in the session + Rule.prototype.singleton_variables = function(include_named) { + include_named = include_named || false; + var variables = this.head.variables(); + var count = {}; + var singleton = []; + if(this.body !== null) + variables = variables.concat(this.body.variables()); + for(var i = 0; i < variables.length; i++) { + if(count[variables[i]] === undefined) + count[variables[i]] = 0; + count[variables[i]]++; + } + for(var key in count) { + if(!count.hasOwnProperty(key)) + continue; + if(count[key] === 1) { + var charcode = codePointAt(key, 1); + if(!include_named || key === "_") + if(key === "_" || key[0] === "_" && (charcode === 95 || charcode >= 65 && charcode <= 90)) + continue; + singleton.push(key); + } + } + return singleton; + }; + + + + // NODEJS + + var nodejs_flag = typeof process !== 'undefined' && !process.browser + + var nodejs_arguments = nodejs_flag ? + arrayToList( map(process.argv.slice(1), function(arg) { return new Term( arg ); })) : + new Term("[]", []); + + + + // PROLOG + + var pl = { + + // Environment + __env: nodejs_flag ? __webpack_require__.g : window, + + // Modules + modules: {}, + + // Version + version: version, + + // Parser + parser: { + tokenizer: Tokenizer, + expression: parseExpr + }, + + // Utils + utils: { + + // String to indicator + str_indicator: str_indicator, + // Code point at + codePointAt: codePointAt, + // From code point + fromCodePoint: fromCodePoint, + // Length of string + stringLength: stringLength + + }, + + // Statistics + statistics: { + + // Number of created terms + getCountTerms: function() { + return term_ref; + } + + }, + + // JavaScript to Prolog + fromJavaScript: { + + // Type testing + test: { + + // Boolean + boolean: function( obj, tobj ) { + return obj === true || obj === false; + }, + + // Number + number: function( obj, tobj ) { + return typeof obj === "number"; + }, + + // String + string: function( obj, tobj ) { + return typeof obj === "string"; + }, + + // List + list: function( obj, tobj ) { + return obj instanceof Array; + }, + + // Variable + variable: function( obj, tobj ) { + return obj === undefined; + }, + + // Object + object: function( obj, tobj ) { + tobj = tobj === undefined ? false : tobj; + return tobj && !(obj instanceof Array) && typeof obj === "object"; + }, + + // Any + any: function( _, tobj ) { + return true; + } + + }, + + // Function conversion + conversion: { + + // Bolean + boolean: function( obj, tobj ) { + return new Term( obj ? "true" : "false", [] ); + }, + + // Number + number: function( obj, tobj ) { + return new Num( obj, obj % 1 !== 0 ); + }, + + // String + string: function( obj, tobj ) { + return new Term( obj, [] ); + }, + + // List + list: function( obj, tobj ) { + tobj = tobj === undefined ? false : tobj; + var arr = []; + var elem; + for( var i = 0; i < obj.length; i++ ) { + elem = pl.fromJavaScript.apply( obj[i], tobj ); + if( elem === undefined ) + return undefined; + arr.push( elem ); + } + return arrayToList( arr ); + }, + + // Variable + variable: function( obj, tobj ) { + return new Var( "_" ); + }, + + // Object + object: function( obj, tobj ) { + tobj = tobj === undefined ? false : tobj; + var list = new Term("[]", []); + var arr = []; + for(var prop in obj) { + if(!obj.hasOwnProperty(prop)) continue; + arr.push(new Term("-", [ + pl.fromJavaScript.apply(prop, tobj), + pl.fromJavaScript.apply(obj[prop], tobj) + ])); + } + return arrayToList(arr); + }, + + // Any + any: function( obj, tobj ) { + return undefined; + } + + }, + + // Transform object + apply: function( obj, tobj ) { + tobj = tobj === undefined ? false : tobj; + for( var i in pl.fromJavaScript.test ) + if( i !== "any" && pl.fromJavaScript.test[i]( obj, tobj ) ) + return pl.fromJavaScript.conversion[i]( obj, tobj ); + return pl.fromJavaScript.conversion.any( obj, tobj ); + } + }, + + // Types + type: { + + // Objects + Var: Var, + Num: Num, + Term: Term, + Rule: Rule, + State: State, + Stream: Stream, + Module: Module, + Thread: Thread, + Session: Session, + Substitution: Substitution, + File: TauFile, + Directory: TauDirectory, + + // Order + order: [Var, Num, Term, Stream], + + // Compare types + compare: function( x, y ) { + var ord_x = indexOf( pl.type.order, x.constructor ); + var ord_y = indexOf( pl.type.order, y.constructor ); + if( ord_x < ord_y ) { + return -1; + } else if( ord_x > ord_y ) { + return 1; + } else { + if( x.constructor === Num ) + if( x.is_float && y.is_float ) + return 0; + else if( x.is_float ) + return -1; + else if( y.is_float ) + return 1; + return 0; + } + }, + + // Is a substitution + is_substitution: function( obj ) { + return obj instanceof Substitution; + }, + + // Is a state + is_state: function( obj ) { + return obj instanceof State; + }, + + // Is a rule + is_rule: function( obj ) { + return obj instanceof Rule; + }, + + // Is a variable + is_variable: function( obj ) { + return obj instanceof Var; + }, + + // Is a stream + is_stream: function( obj ) { + return obj instanceof Stream; + }, + + // Is an anonymous variable + is_anonymous_var: function( obj ) { + return obj instanceof Var && obj.id === "_"; + }, + + // Is a callable term + is_callable: function( obj ) { + return obj instanceof Term + && (indexOf([",/2",";/2","->/2"], obj.indicator) === -1 + || pl.type.is_callable(obj.args[0]) && pl.type.is_callable(obj.args[1])) + || obj instanceof Var; + }, + + // Is a number + is_number: function( obj ) { + return obj instanceof Num; + }, + + // Is an integer + is_integer: function( obj ) { + return obj instanceof Num && !obj.is_float; + }, + + // Is a float + is_float: function( obj ) { + return obj instanceof Num && obj.is_float; + }, + + // Is a term + is_term: function( obj ) { + return obj instanceof Term; + }, + + // Is an atom + is_atom: function( obj ) { + return obj instanceof Term && obj.args.length === 0; + }, + + // Is a ground term + is_ground: function( obj ) { + if( obj instanceof Var ) return false; + if( obj instanceof Term ) + for( var i = 0; i < obj.args.length; i++ ) + if( !pl.type.is_ground( obj.args[i] ) ) + return false; + return true; + }, + + // Is atomic + is_atomic: function( obj ) { + return obj instanceof Term && obj.args.length === 0 || obj instanceof Num; + }, + + // Is compound + is_compound: function( obj ) { + return obj instanceof Term && obj.args.length > 0; + }, + + // Is a list + is_list: function( obj ) { + return obj instanceof Term && (obj.indicator === "[]/0" || obj.indicator === "./2"); + }, + + // Is an empty list + is_empty_list: function( obj ) { + return obj instanceof Term && obj.indicator === "[]/0"; + }, + + // Is a non empty list + is_non_empty_list: function( obj ) { + return obj instanceof Term && obj.indicator === "./2"; + }, + + // Is a fully list + is_fully_list: function( obj ) { + while( obj instanceof Term && obj.indicator === "./2" ) { + obj = obj.args[1]; + } + return obj instanceof Var || obj instanceof Term && obj.indicator === "[]/0"; + }, + + // Is a instantiated list + is_instantiated_list: function( obj ) { + while( obj instanceof Term && obj.indicator === "./2" ) { + obj = obj.args[1]; + } + return obj instanceof Term && obj.indicator === "[]/0"; + }, + + // Is an unitary list + is_unitary_list: function( obj ) { + return obj instanceof Term && obj.indicator === "./2" && obj.args[1] instanceof Term && obj.args[1].indicator === "[]/0"; + }, + + // Is a character + is_character: function( obj ) { + return obj instanceof Term && obj.args.length === 0 && (obj.id.length === 1 || obj.id.length > 0 && obj.id.length <= 2 && codePointAt( obj.id, 0 ) >= 65536); + }, + + // Is a in_character + is_in_character: function( obj ) { + return obj instanceof Term && (obj.indicator === "end_of_file/0" + || obj.id.length === 1 + || obj.id.length > 0 && obj.id.length <= 2 && codePointAt(obj.id, 0) >= 65536); + }, + + // Is a character_code + is_character_code: function( obj ) { + return obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 1114111; + }, + + // Is a in_character_code + is_in_character_code: function( obj ) { + return obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 1114111; + }, + + // Is a byte + is_byte: function( obj ) { + return obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 255; + }, + + // Is a in_byte + is_in_byte: function( obj ) { + return obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 255; + }, + + // Is an operator + is_operator: function( obj ) { + return obj instanceof Term && pl.arithmetic.evaluation[obj.indicator]; + }, + + // Is a directive + is_directive: function( obj ) { + return obj instanceof Term && (pl.directive[obj.indicator] !== undefined || pl.directive[obj.id + "/*"] !== undefined); + }, + + // Is a built-in predicate + is_builtin: function( obj ) { + return obj instanceof Term && pl.builtin.rules.hasOwnProperty(obj.indicator) && obj.indicator !== "goal_expansion/2"; + }, + + // Is an error + is_error: function( obj ) { + return obj instanceof Term && obj.indicator === "throw/1"; + }, + + // Is an error state + is_error_state: function( obj ) { + return pl.type.is_state( obj ) && obj.error && obj.error === true; + }, + + // Is a predicate indicator + is_predicate_indicator: function( obj ) { + return obj instanceof Term && obj.indicator === "//2" && obj.args[0] instanceof Term && obj.args[0].args.length === 0 && obj.args[1] instanceof Num && obj.args[1].is_float === false; + }, + + // Is a flag + is_flag: function( obj ) { + return obj instanceof Term && obj.args.length === 0 && pl.flag[obj.id] !== undefined; + }, + + // Is a valid value for a flag + is_value_flag: function( flag, obj ) { + if( !pl.type.is_flag( flag ) ) return false; + for( var value in pl.flag[flag.id].allowed ) { + if(!pl.flag[flag.id].allowed.hasOwnProperty(value)) continue; + if( pl.flag[flag.id].allowed[value].equals( obj ) ) return true; + } + return false; + }, + + // Is a io mode + is_io_mode: function( obj ) { + return pl.type.is_atom( obj ) && ["read","write","append"].indexOf( obj.id ) !== -1; + }, + + // Is a stream option + is_stream_option: function( obj ) { + return pl.type.is_term( obj ) && ( + obj.indicator === "alias/1" && pl.type.is_atom(obj.args[0]) || + obj.indicator === "reposition/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || + obj.indicator === "type/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "text" || obj.args[0].id === "binary") || + obj.indicator === "eof_action/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "error" || obj.args[0].id === "eof_code" || obj.args[0].id === "reset") + ); + }, + + // Is a stream position + is_stream_position: function( obj ) { + return pl.type.is_term(obj) && ( + obj.indicator === "end_of_stream/0" || + obj.indicator === "past_end_of_stream/0" || + obj.indicator === "position/3" + && pl.type.is_integer(obj.args[0]) + && pl.type.is_integer(obj.args[1]) + && pl.type.is_integer(obj.args[2]) + ) + }, + + // Is a stream property + is_stream_property: function( obj ) { + return pl.type.is_term( obj ) && ( + obj.indicator === "input/0" || + obj.indicator === "output/0" || + obj.indicator === "alias/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) || + obj.indicator === "file_name/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) || + obj.indicator === "reposition/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false")) || + obj.indicator === "type/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "text" || obj.args[0].id === "binary")) || + obj.indicator === "mode/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "read" || obj.args[0].id === "write" || obj.args[0].id === "append")) || + obj.indicator === "eof_action/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "error" || obj.args[0].id === "eof_code" || obj.args[0].id === "reset")) || + obj.indicator === "end_of_stream/1" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "at" || obj.args[0].id === "past" || obj.args[0].id === "not")) || + obj.indicator === "position/1" + && (pl.type.is_variable(obj.args[0]) || pl.type.is_term(obj.args[0]) && obj.args[0].indicator === "position/3" + && (pl.type.is_variable(obj.args[0].args[0]) || pl.type.is_integer(obj.args[0].args[0])) + && (pl.type.is_variable(obj.args[0].args[1]) || pl.type.is_integer(obj.args[0].args[1])) + && (pl.type.is_variable(obj.args[0].args[2]) || pl.type.is_integer(obj.args[0].args[2]))) + ); + }, + + // Is a streamable term + is_streamable: function( obj ) { + return obj.__proto__.stream !== undefined; + }, + + // Is a read option + is_read_option: function( obj ) { + return pl.type.is_term( obj ) && ["variables/1","variable_names/1","singletons/1"].indexOf( obj.indicator ) !== -1; + }, + + // Is a write option + is_write_option: function( obj ) { + return pl.type.is_term( obj ) && ( + obj.indicator === "quoted/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || + obj.indicator === "ignore_ops/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || + obj.indicator === "numbervars/1" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === "true" || obj.args[0].id === "false") || + obj.indicator === "variable_names/1" && pl.type.is_fully_list(obj.args[0]) + ); + }, + + // Is a close option + is_close_option: function( obj ) { + return pl.type.is_term( obj ) && + obj.indicator === "force/1" && + pl.type.is_atom(obj.args[0]) && + (obj.args[0].id === "true" || obj.args[0].id === "false"); + }, + + // Is a modifiable flag + is_modifiable_flag: function( obj ) { + return pl.type.is_flag( obj ) && pl.flag[obj.id].changeable; + }, + + // Is a module + is_module: function( obj ) { + return obj instanceof Module; + }, + + // Is a virtual file + is_file: function( obj ) { + return obj instanceof TauFile; + }, + + // Is a virtual directory + is_directory: function( obj ) { + return obj instanceof TauDirectory; + }, + + // Is a predicate property + is_predicate_property: function(obj) { + return pl.type.is_term(obj) && ( + obj.indicator === "built_in/0" || + obj.indicator === "static/0" || + obj.indicator === "dynamic/0" || + obj.indicator === "native_code/0" || + obj.indicator === "multifile/0" || + obj.indicator === "meta_predicate/1" + ); + }, + + // Is a meta-argument specifier + is_meta_argument_specifier: function(obj) { + return pl.type.is_integer(obj) && obj.value >= 0 || + pl.type.is_atom(obj) && indexOf(["+", "-", "?", "*", "^", ":", "//"], obj.id) !== -1; + }, + + // Is a time property + is_time_property: function( obj ) { + return pl.type.is_term(obj) && obj.args.length === 1 + && (pl.type.is_variable(obj.args[0]) || pl.type.is_integer(obj.args[0])) + && indexOf(["year", "month", "day", "hours", "minutes", "seconds", "milliseconds", "weekday"], obj.id) !== -1; + }, + + }, + + // Arithmetic functions + arithmetic: { + + // Evaluation + evaluation: { + "e/0": { + type_args: null, + type_result: true, + fn: function( _ ) { return Math.E; } + }, + "pi/0": { + type_args: null, + type_result: true, + fn: function( _ ) { return Math.PI; } + }, + "tau/0": { + type_args: null, + type_result: true, + fn: function( _ ) { return 2*Math.PI; } + }, + "epsilon/0": { + type_args: null, + type_result: true, + fn: function( _ ) { return Number.EPSILON; } + }, + "+/1": { + type_args: null, + type_result: null, + fn: function( x, _ ) { return x; } + }, + "-/1": { + type_args: null, + type_result: null, + fn: function( x, _ ) { return -x; } + }, + "\\/1": { + type_args: false, + type_result: false, + fn: function( x, _ ) { return ~x; } + }, + "abs/1": { + type_args: null, + type_result: null, + fn: function( x, _ ) { return Math.abs( x ); } + }, + "sign/1": { + type_args: null, + type_result: null, + fn: function( x, _ ) { return Math.sign( x ); } + }, + "float_integer_part/1": { + type_args: true, + type_result: false, + fn: function( x, _ ) { return parseInt( x ); } + }, + "float_fractional_part/1": { + type_args: true, + type_result: true, + fn: function( x, _ ) { return x - parseInt( x ); } + }, + "float/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return parseFloat( x ); } + }, + "floor/1": { + type_args: true, + type_result: false, + fn: function( x, _ ) { return Math.floor( x ); } + }, + "truncate/1": { + type_args: true, + type_result: false, + fn: function( x, _ ) { return parseInt( x ); } + }, + "round/1": { + type_args: true, + type_result: false, + fn: function( x, _ ) { return Math.round( x ); } + }, + "ceiling/1": { + type_args: true, + type_result: false, + fn: function( x, _ ) { return Math.ceil( x ); } + }, + "sin/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return Math.sin( x ); } + }, + "cos/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return Math.cos( x ); } + }, + "tan/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return Math.tan( x ); } + }, + "asin/1": { + type_args: null, + type_result: true, + fn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.asin(x) : pl.error.evaluation("undefined", thread.__call_indicator); } + }, + "acos/1": { + type_args: null, + type_result: true, + fn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.acos(x) : pl.error.evaluation("undefined", thread.__call_indicator); } + }, + "atan/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return Math.atan( x ); } + }, + "atan2/2": { + type_args: null, + type_result: true, + fn: function( x, y, thread ) { return x === 0 && y === 0 ? pl.error.evaluation("undefined", thread.__call_indicator) : Math.atan2(x, y); } + }, + "acosh/1": { + type_args: null, + type_result: true, + fn: function( x, thread ) { return x >= 1 ? Math.acosh(x) : pl.error.evaluation("undefined", thread.__call_indicator); } + }, + "asinh/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return Math.asinh( x ); } + }, + "atanh/1": { + type_args: null, + type_result: true, + fn: function( x, thread ) { return Math.abs(x) < 1 ? Math.atanh(x) : pl.error.evaluation("undefined", thread.__call_indicator); } + }, + "cosh/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return Math.cosh( x ); } + }, + "sinh/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return Math.sinh( x ); } + }, + "tanh/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return Math.tanh( x ); } + }, + "exp/1": { + type_args: null, + type_result: true, + fn: function( x, _ ) { return Math.exp( x ); } + }, + "sqrt/1": { + type_args: null, + type_result: true, + fn: function( x, thread ) { return x >= 0 ? Math.sqrt( x ) : pl.error.evaluation( "undefined", thread.__call_indicator ); } + }, + "log/1": { + type_args: null, + type_result: true, + fn: function( x, thread ) { return x > 0 ? Math.log( x ) : pl.error.evaluation( "undefined", thread.__call_indicator ); } + }, + "log/2": { + type_args: null, + type_result: true, + fn: function( x, y, thread ) { return x > 0 && y > 0 ? Math.log(y)/Math.log(x) : pl.error.evaluation( "undefined", thread.__call_indicator ); } + }, + "log10/1": { + type_args: null, + type_result: true, + fn: function( x, thread ) { return x > 0 ? Math.log(x)/Math.log(10) : pl.error.evaluation( "undefined", thread.__call_indicator ); } + }, + "+/2": { + type_args: null, + type_result: null, + fn: function( x, y, _ ) { return x + y; } + }, + "-/2": { + type_args: null, + type_result: null, + fn: function( x, y, _ ) { return x - y; } + }, + "*/2": { + type_args: null, + type_result: null, + fn: function( x, y, _ ) { return x * y; } + }, + "//2": { + type_args: null, + type_result: true, + fn: function( x, y, thread ) { return y ? x / y : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } + }, + "///2": { + type_args: false, + type_result: false, + fn: function( x, y, thread ) { return y ? Math.trunc( x / y ) : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } + }, + "div/2": { + type_args: false, + type_result: false, + fn: function( x, y, thread ) { return y ? Math.floor( x / y ) : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } + }, + "**/2": { + type_args: null, + type_result: true, + fn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation("zero_divisor", thread.__call_indicator) : Math.pow(x, y); } + }, + "^/2": { + type_args: null, + type_result: null, + fn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation("zero_divisor", thread.__call_indicator) : Math.pow(x, y); } + }, + "<>/2": { + type_args: false, + type_result: false, + fn: function( x, y, _ ) { return x >> y; } + }, + "/\\/2": { + type_args: false, + type_result: false, + fn: function( x, y, _ ) { return x & y; } + }, + "\\//2": { + type_args: false, + type_result: false, + fn: function( x, y, _ ) { return x | y; } + }, + "xor/2": { + type_args: false, + type_result: false, + fn: function( x, y, _ ) { return x ^ y; } + }, + "rem/2": { + type_args: false, + type_result: false, + fn: function( x, y, thread ) { return y ? x % y : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } + }, + "mod/2": { + type_args: false, + type_result: false, + fn: function( x, y, thread ) { return y ? x - Math.floor( x / y ) * y : pl.error.evaluation( "zero_divisor", thread.__call_indicator ); } + }, + "max/2": { + type_args: null, + type_result: null, + fn: function( x, y, _ ) { return Math.max( x, y ); } + }, + "min/2": { + type_args: null, + type_result: null, + fn: function( x, y, _ ) { return Math.min( x, y ); } + }, + "gcd/2": { + type_args: false, + type_result: false, + fn: function( x, y, _ ) { return gcd(x, y); } + } + + } + + }, + + // Directives + directive: { + + // dynamic/1 + "dynamic/1": function( thread, atom, options ) { + var indicators = atom.args[0]; + if(!pl.type.is_list(indicators)) + indicators = arrayToList([indicators]); + var pointer = indicators; + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + indicator = pointer.args[0]; + if( pl.type.is_variable( indicator ) ) { + thread.throw_warning( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_compound( indicator ) || indicator.indicator !== "//2" ) { + thread.throw_warning( pl.error.type( "predicate_indicator", indicator, atom.indicator ) ); + } else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) { + thread.throw_warning( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atom( indicator.args[0] ) ) { + thread.throw_warning( pl.error.type( "atom", indicator.args[0], atom.indicator ) ); + } else if( !pl.type.is_integer( indicator.args[1] ) ) { + thread.throw_warning( pl.error.type( "integer", indicator.args[1], atom.indicator ) ); + } else { + var key = indicator.args[0].id + "/" + indicator.args[1].value; + var get_module = thread.session.modules[options.context_module]; + get_module.public_predicates[key] = true; + if( !get_module.rules[key] ) + get_module.rules[key] = []; + } + pointer = pointer.args[1]; + } + if(pl.type.is_variable(pointer)) { + thread.throw_warning( pl.error.instantiation( atom.indicator ) ); + } else if(!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { + thread.throw_warning( pl.error.type( "predicate_indicator", indicator, atom.indicator ) ); + } + }, + + // dynamic/[2..] + "dynamic/*": function( thread, atom ) { + for(var i = 0; i < atom.args.length; i++) { + pl.directive["dynamic/1"](thread, new Term("dynamic", [atom.args[i]])); + } + }, + + // multifile/1 + "multifile/1": function( thread, atom, options ) { + var indicator = atom.args[0]; + if( pl.type.is_variable( indicator ) ) { + thread.throw_warning( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_compound( indicator ) || indicator.indicator !== "//2" ) { + thread.throw_warning( pl.error.type( "predicate_indicator", indicator, atom.indicator ) ); + } else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) { + thread.throw_warning( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atom( indicator.args[0] ) ) { + thread.throw_warning( pl.error.type( "atom", indicator.args[0], atom.indicator ) ); + } else if( !pl.type.is_integer( indicator.args[1] ) ) { + thread.throw_warning( pl.error.type( "integer", indicator.args[1], atom.indicator ) ); + } else { + var predicate_indicator = atom.args[0].args[0].id + "/" + atom.args[0].args[1].value; + var get_module = thread.session.modules[options.context_module]; + get_module.multifile_predicates[predicate_indicator] = true; + if(!get_module.rules.hasOwnProperty(predicate_indicator)) { + get_module.rules[predicate_indicator] = []; + get_module.public_predicates[predicate_indicator] = false; + } + } + }, + + // meta_predicate/1 + "meta_predicate/1": function(thread, atom, options) { + var options = options === undefined ? {} : options; + var head = atom.args[0]; + if( pl.type.is_variable(head) ) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(head)) { + thread.throw_warning(pl.error.type("callable", head, atom.indicator)); + } else { + for(var i = 0; i < head.args.length; i++) { + var arg = head.args[i]; + if(!pl.type.is_meta_argument_specifier(arg)) { + thread.throw_warning(pl.error.type("meta_argument_specifier", arg, atom.indicator)); + return; + } + } + thread.session.modules[options.context_module].meta_predicates[head.indicator] = head; + } + }, + + // set_prolog_flag + "set_prolog_flag/2": function( thread, atom ) { + var flag = atom.args[0], value = atom.args[1]; + if( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) { + thread.throw_warning( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atom( flag ) ) { + thread.throw_warning( pl.error.type( "atom", flag, atom.indicator ) ); + } else if( !pl.type.is_flag( flag ) ) { + thread.throw_warning( pl.error.domain( "prolog_flag", flag, atom.indicator ) ); + } else if( !pl.type.is_modifiable_flag( flag ) ) { + thread.throw_warning( pl.error.permission( "modify", "flag", flag, atom.indicator ) ); + } else if( !pl.type.is_value_flag( flag, value ) ) { + thread.throw_warning( pl.error.domain( "flag_value", new Term( "+", [flag, value] ), atom.indicator ) ); + } else { + thread.session.flag[flag.id] = value; + } + }, + + // module/2 + "module/2": function(thread, atom, options) { + var options = options === undefined ? {} : options; + options.context_module = options.context_module === undefined ? "user" : options.context_module; + var module_id = atom.args[0], exports = atom.args[1]; + if(pl.type.is_variable(module_id) || pl.type.is_variable(exports)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_atom(module_id)) { + thread.throw_warning(pl.error.type("atom", module_id, atom.indicator)); + } else if(!pl.type.is_list(exports)) { + thread.throw_warning(pl.error.type("list", exports, atom.indicator)); + } else { + if(!pl.type.is_module(thread.session.modules[module_id.indicator])) { + var pointer = exports; + var indicators = []; + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + var predicate = pointer.args[0]; + if(!pl.type.is_predicate_indicator(predicate)) { + thread.throw_warning(pl.error.type("predicate_indicator", predicate, atom.indicator)); + } else { + indicators.push(predicate.args[0].id + "/" + predicate.args[1].value); + } + pointer = pointer.args[1]; + } + if(pl.type.is_variable(pointer)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_empty_list(pointer)) { + thread.throw_warning(pl.error.type("list", exports, atom.indicator)); + } + var new_module = new Module(module_id.id, {}, indicators, { + session: thread.session + }); + thread.session.modules[module_id.id] = new_module; + thread.session.modules[options.context_module].modules[module_id.id] = new_module; + options.context_module = module_id.id; + } else { + thread.throw_warning(pl.error.permission("create", "module", module_id, atom.indicator)); + } + } + }, + + // use_module/1 + "use_module/1": function(thread, atom, options) { + var options = options === undefined ? {} : options; + options.context_module = options.context_module === undefined ? "user" : options.context_module; + var module_id = atom.args[0]; + if(pl.type.is_variable(module_id)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_term(module_id)) { + thread.throw_warning(pl.error.type("term", module_id, atom.indicator)); + } else { + if(module_id.indicator === "library/1") { + var name = module_id.args[0].id; + var get_module = pl.modules[name]; + if(pl.type.is_module(get_module)) { + if(!thread.session.modules[options.context_module].modules.hasOwnProperty(name)) { + thread.session.modules[name] = get_module; + thread.session.modules[options.context_module].modules[name] = get_module; + for(var i = 0; i < get_module.dependencies.length; i++) { + var term = new Term("use_module", [new Term("library", [new Term(get_module.dependencies[i])])]); + pl.directive["use_module/1"](thread, term, { + context_module: name + }); + } + } + } else { + thread.throw_warning(pl.error.existence("module", module_id, atom.indicator)); + } + } else { + var name = module_id.id; + thread.consult(name, { + context_module: options.context_module, + text: false, + success: function() { + parseProgram(thread, options.string, options); + }, + error: function() { + options.error(pl.error.existence("module", module_id, atom.indicator)); + } + }); + return true; + } + } + }, + + // char_conversion/2 + "char_conversion/2": function(thread, atom, options) { + var inchar = atom.args[0], outchar = atom.args[1]; + if(pl.type.is_variable(inchar) || pl.type.is_variable(outchar)) { + thread.throw_warning(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_character(inchar)) { + thread.throw_warning(pl.error.type("character", inchar, atom.indicator)); + } else if(!pl.type.is_character(outchar)) { + thread.throw_warning(pl.error.type("character", outchar, atom.indicator)); + } else { + if(inchar.id === outchar.id) { + delete thread.session.__char_conversion[inchar.id]; + } else { + thread.session.__char_conversion[inchar.id] = outchar.id; + } + options.tokens = options.tokenizer.get_tokens(options.current_token); + options.current_token = 0; + return true; + } + }, + + // op/3 + "op/3": function( thread, atom ) { + var priority = atom.args[0], type = atom.args[1], operators = atom.args[2]; + if(pl.type.is_atom(operators)) + operators = new Term(".", [operators, new Term("[]")]); + if( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) { + thread.throw_warning( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_integer( priority ) ) { + thread.throw_warning( pl.error.type( "integer", priority, atom.indicator ) ); + } else if( !pl.type.is_atom( type ) ) { + thread.throw_warning( pl.error.type( "atom", type, atom.indicator ) ); + } else if( !pl.type.is_list( operators ) ) { + thread.throw_warning( pl.error.type( "list", operators, atom.indicator ) ); + } else if( pl.type.is_empty_list( operators ) ) { + thread.throw_warning( pl.error.permission( "create", "operator", operators, atom.indicator ) ); + } else { + var pointer = operators; + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + var operator = pointer.args[0]; + pointer = pointer.args[1]; + if( pl.type.is_variable( operator ) ) { + thread.throw_warning( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atom( operator ) ) { + thread.throw_warning( pl.error.type( "atom", operator, atom.indicator ) ); + } else if( priority.value < 0 || priority.value > 1200 ) { + thread.throw_warning( pl.error.domain( "operator_priority", priority, atom.indicator ) ); + } else if( operator.id === "," ) { + thread.throw_error( pl.error.permission( "modify", "operator", operator, atom.indicator ) ); + } else if( operator.id === "{}" ) { + thread.throw_warning( pl.error.permission( "create", "operator", operator, atom.indicator ) ); + } else if( operator.id === "[]" ) { + thread.throw_warning( pl.error.permission( "create", "operator", operator, atom.indicator ) ); + } else if( operator.id === "|" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) { + thread.throw_warning( pl.error.permission( "create", "operator", operator, atom.indicator ) ); + } else if( ["fy", "fx", "yf", "xf", "xfx", "yfx", "xfy"].indexOf( type.id ) === -1 ) { + thread.throw_warning( pl.error.domain( "operator_specifier", type, atom.indicator ) ); + } else { + var fix = { prefix: null, infix: null, postfix: null }; + for( var p in thread.session.__operators ) { + if(!thread.session.__operators.hasOwnProperty(p)) continue; + var classes = thread.session.__operators[p][operator.id]; + if( classes ) { + if( indexOf( classes, "fx" ) !== -1 ) { fix.prefix = { priority: p, type: "fx" }; } + if( indexOf( classes, "fy" ) !== -1 ) { fix.prefix = { priority: p, type: "fy" }; } + if( indexOf( classes, "xf" ) !== -1 ) { fix.postfix = { priority: p, type: "xf" }; } + if( indexOf( classes, "yf" ) !== -1 ) { fix.postfix = { priority: p, type: "yf" }; } + if( indexOf( classes, "xfx" ) !== -1 ) { fix.infix = { priority: p, type: "xfx" }; } + if( indexOf( classes, "xfy" ) !== -1 ) { fix.infix = { priority: p, type: "xfy" }; } + if( indexOf( classes, "yfx" ) !== -1 ) { fix.infix = { priority: p, type: "yfx" }; } + } + } + var current_class; + switch( type.id ) { + case "fy": case "fx": current_class = "prefix"; break; + case "yf": case "xf": current_class = "postfix"; break; + default: current_class = "infix"; break; + } + if(fix.infix && current_class === "postfix" || fix.postfix && current_class === "infix") { + thread.throw_warning( pl.error.permission( "create", "operator", operator, atom.indicator ) ); + } else { + if( fix[current_class] ) { + remove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type ); + if( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) { + delete thread.session.__operators[fix[current_class].priority][operator.id]; + } + } + if( priority.value > 0 ) { + if( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {}; + if( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = []; + thread.session.__operators[priority.value][operator.id].push( type.id ); + } + } + } + } + if(pl.type.is_variable(pointer)) { + thread.throw_warning( pl.error.instantiation( atom.indicator ) ); + return; + } else if(!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { + thread.throw_warning( pl.error.type( "list", operators, atom.indicator ) ); + return; + } + } + }, + + // initialization/1 + "initialization/1": function(thread, atom, options) { + var goal = atom.args[0]; + options.initialization.push(goal); + } + + }, + + // Flags + flag: { + + // Bounded numbers + bounded: { + allowed: [new Term( "true" ), new Term( "false" )], + value: new Term( "true" ), + changeable: false + }, + + // Maximum integer + max_integer: { + allowed: [new Num( Number.MAX_SAFE_INTEGER )], + value: new Num( Number.MAX_SAFE_INTEGER ), + changeable: false + }, + + // Minimum integer + min_integer: { + allowed: [new Num( Number.MIN_SAFE_INTEGER )], + value: new Num( Number.MIN_SAFE_INTEGER ), + changeable: false + }, + + // Rounding function + integer_rounding_function: { + allowed: [new Term( "down" ), new Term( "toward_zero" )], + value: new Term( "toward_zero" ), + changeable: false + }, + + // Character conversion + char_conversion: { + allowed: [new Term( "on" ), new Term( "off" )], + value: new Term( "on" ), + changeable: true + }, + + // Debugger + debug: { + allowed: [new Term( "on" ), new Term( "off" )], + value: new Term( "off" ), + changeable: true + }, + + // Maximum arity of predicates + max_arity: { + allowed: [new Term( "unbounded" )], + value: new Term( "unbounded" ), + changeable: false + }, + + // Unkwnow predicates behavior + unknown: { + allowed: [new Term( "error" ), new Term( "fail" ), new Term( "warning" )], + value: new Term( "error" ), + changeable: true + }, + + // Double quotes behavior + double_quotes: { + allowed: [new Term( "chars" ), new Term( "codes" ), new Term( "atom" )], + value: new Term( "chars" ), + changeable: true + }, + + // Occurs check behavior + occurs_check: { + allowed: [new Term( "false" ), new Term( "true" )], + value: new Term( "false" ), + changeable: true + }, + + // Dialect + dialect: { + allowed: [new Term( "tau" )], + value: new Term( "tau" ), + changeable: false + }, + + // Version + version_data: { + allowed: [new Term( "tau", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] )], + value: new Term( "tau", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] ), + changeable: false + }, + + // NodeJS + nodejs: { + allowed: [new Term( "true" ), new Term( "false" )], + value: new Term( nodejs_flag ? "true" : "false" ), + changeable: false + }, + + // Arguments + argv: { + allowed: [nodejs_arguments], + value: nodejs_arguments, + changeble: false + } + + }, + + // Unify + unify: function(t1, t2, occurs_check) { + occurs_check = occurs_check === undefined ? false : occurs_check; + var left = Array.isArray(t1) ? t1 : [t1]; + var right = Array.isArray(t2) ? t2 : [t2]; + if(left.length !== right.length) + return null; + var subs = new Substitution(); + while(left.length > 0) { + var s = left.pop(); + var t = right.pop(); + if(pl.type.is_variable(s)) + s = s.apply(subs); + if(pl.type.is_variable(t)) + t = t.apply(subs); + // same object + if(s == t) + continue; + // compound terms + if(pl.type.is_term(s) && pl.type.is_term(t)) { + if(s.indicator !== t.indicator) + return null; + for(var i = s.args.length-1; i >= 0; i--) { + left.push(s.args[i]); + right.push(t.args[i]); + } + // numbers + } else if(pl.type.is_number(s) && pl.type.is_number(t)) { + if(s.value !== t.value || s.is_float !== t.is_float) + return null; + // variable - term + } else if(pl.type.is_variable(s)) { + t = t.apply(subs); + // x = x + if(pl.type.is_variable(t) && s.id === t.id) + continue; + // occurs check + if(occurs_check === true && indexOf(t.variables(), s.id) !== -1) + return null; + // anonymous variable + if(s.id !== "_") + subs.add(s.id, t); + // term - variable + } else if(pl.type.is_variable(t)) { + left.push(t); + right.push(s); + // user-defined terms + } else if(s.unify !== undefined) { + var user_subs = s.apply(subs).unify(t.apply(subs), occurs_check); + if(user_subs == null) + return null; + for(var i in user_subs.links) + subs.add(i, user_subs.links[i]); + } else { + return null; + } + } + return subs.apply(subs); + }, + + // Is rename + is_rename: function(obj1, obj2, links) { + links = links || {}; + if(obj1.is_rename && obj2.is_rename) + return obj1.is_rename(obj2, links); + else if(obj1.equals && obj2.equals) + return obj1.equals(obj2); + else + return false; + }, + + // Compare + compare: function( obj1, obj2 ) { + var type = pl.type.compare( obj1, obj2 ); + return type !== 0 ? type : obj1.compare( obj2 ); + }, + + // Arithmetic comparison + arithmetic_compare: function( thread, obj1, obj2 ) { + var expr1 = obj1.interpret( thread ); + if( !pl.type.is_number( expr1 ) ) { + return expr1; + } else { + var expr2 = obj2.interpret( thread ); + if( !pl.type.is_number( expr2 ) ) { + return expr2; + } else { + return expr1.value < expr2.value ? -1 : (expr1.value > expr2.value ? 1 : 0); + } + } + }, + + // Operate + operate: function( thread, obj ) { + if( pl.type.is_operator( obj ) ) { + var op = pl.type.is_operator( obj ); + var args = [], value; + var type = false; + for( var i = 0; i < obj.args.length; i++ ) { + value = obj.args[i].interpret( thread ); + if( !pl.type.is_number( value ) ) { + return value; + } else if( op.type_args !== null && value.is_float !== op.type_args ) { + return pl.error.type( op.type_args ? "float" : "integer", value, thread.__call_indicator ); + } else { + args.push( value.value ); + } + type = type || value.is_float; + } + args.push( thread ); + value = pl.arithmetic.evaluation[obj.indicator].fn.apply( this, args ); + if(obj.indicator === "^/2" && !type && value !== parseInt(value, 10)) + return pl.error.type( "float", new Num(args[0],false), thread.__call_indicator ); + type = op.type_result === null ? type : op.type_result; + if( pl.type.is_term( value ) ) { + return value; + } else if( value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY ) { + return pl.error.evaluation( "float_overflow", thread.__call_indicator ); + } else if( type === false && thread.get_flag( "bounded" ).id === "true" && (value > thread.get_flag( "max_integer" ).value || value < thread.get_flag( "min_integer" ).value) ) { + return pl.error.evaluation( "int_overflow", thread.__call_indicator ); + } else { + return new Num( value, type ); + } + } else { + return pl.error.type( "evaluable", str_indicator(obj.indicator), thread.__call_indicator ); + } + }, + + // Errors + error: { + + // Existence error + existence: function( type, object, indicator ) { + if( typeof object === "string" ) + object = str_indicator( object ); + return new Term( "error", [new Term( "existence_error", [new Term( type ), object] ), str_indicator( indicator )] ); + }, + + // Type error + type: function( expected, found, indicator ) { + return new Term( "error", [new Term( "type_error", [new Term( expected ), found] ), str_indicator( indicator )] ); + }, + + // Instantation error + instantiation: function( indicator ) { + return new Term( "error", [new Term( "instantiation_error" ), str_indicator( indicator )] ); + }, + + // Uninstantation error + uninstantiation: function( found, indicator ) { + return new Term( "error", [new Term( "uninstantiation_error", [new Term( found )] ), str_indicator( indicator )] ); + }, + + // Domain error + domain: function( expected, found, indicator ) { + return new Term( "error", [new Term( "domain_error", [new Term( expected ), found]), str_indicator( indicator )] ); + }, + + // Representation error + representation: function( flag, indicator ) { + return new Term( "error", [new Term( "representation_error", [new Term( flag )] ), str_indicator( indicator )] ); + }, + + // Permission error + permission: function( operation, type, found, indicator ) { + return new Term( "error", [new Term( "permission_error", [new Term( operation ), new Term( type ), found] ), str_indicator( indicator )] ); + }, + + // Evaluation error + evaluation: function( error, indicator ) { + return new Term( "error", [new Term( "evaluation_error", [new Term( error )] ), str_indicator( indicator )] ); + }, + + // Syntax error + syntax: function( token, expected, last ) { + token = token || {value: "", line: 0, column: 0, matches: [""], start: 0}; + var position = last && token.matches.length > 0 ? token.start + token.matches[0].length : token.start; + var found = last ? new Term("token_not_found") : new Term("found", [new Term(token.value.toString())]); + var info = new Term( ".", [new Term( "line", [new Num(token.line+1)] ), new Term( ".", [new Term( "column", [new Num(position)] ), new Term( ".", [found, new Term( "[]", [] )] )] )] ); + return new Term( "error", [new Term( "syntax_error", [new Term( expected )] ), info] ); + }, + + // Syntax error by predicate + syntax_by_predicate: function( expected, indicator ) { + return new Term( "error", [new Term( "syntax_error", [new Term( expected ) ] ), str_indicator( indicator )] ); + } + + }, + + // Warnings + warning: { + + // Singleton variables + singleton: function( variables, rule, line ) { + var list = new Term( "[]" ); + for( var i = variables.length-1; i >= 0; i-- ) + list = new Term( ".", [new Var(variables[i]), list] ); + return new Term( "warning", [new Term( "singleton_variables", [list, str_indicator(rule)]), new Term(".",[new Term( "line", [ new Num( line, false ) ]), new Term("[]")])] ); + }, + + // Failed goal + failed_goal: function( goal, line ) { + return new Term( "warning", [new Term( "failed_goal", [goal]), new Term(".",[new Term( "line", [ new Num( line, false ) ]), new Term("[]")])] ); + } + + }, + + // Format of renamed variables + format_variable: function( id, variable ) { + var charcode = variable && variable.length > 0 ? codePointAt(variable, 1) : 0; + if(variable === "_" || variable && variable[0] === "_" && (charcode === 95 || charcode >= 65 && charcode <= 90)) + return "__" + id; + return "_" + id; + }, + + // Format of computed answers + format_answer: function( answer, thread, options ) { + if( thread instanceof Session ) + thread = thread.thread; + var options = options ? options : {}; + options.session = thread ? thread.session : undefined; + if( pl.type.is_error( answer ) ) { + return "uncaught exception: " + answer.args[0].toString(options); + } else if( answer === false ) { + return "false"; + } else if( answer === null ) { + return "limit exceeded"; + } else { + var i = 0; + var str = ""; + if( pl.type.is_substitution( answer ) ) { + var dom = answer.domain( true ); + for( var link in answer.links ){ + if( !answer.links.hasOwnProperty(link) ) continue; + if( pl.type.is_variable(answer.links[link]) ) { + var links = {}; + links[answer.links[link].id] = new Var(link); + answer = answer.apply( new Substitution(links) ); + } + } + answer = answer.filter( function( id, value ) { + return !pl.type.is_variable( value ) || + pl.type.is_variable( value ) && answer.has_attributes( id ) || + indexOf( dom, value.id ) !== -1 && id !== value.id; + } ); + } + for( var link in answer.links ) { + if(!answer.links.hasOwnProperty(link)) + continue; + if( pl.type.is_variable( answer.links[link] ) && link === answer.links[link].id ) { + var attrs = answer.attrs[link]; + for( var module in attrs ) { + if(!attrs.hasOwnProperty(module)) + continue; + i++; + if( str !== "" ) + str += ", "; + str += "put_attr(" + link + ", " + module + ", " + attrs[module].toString(options) + ")"; + } + } else { + i++; + if( str !== "" ) + str += ", "; + str += link.toString( options ) + " = " + + answer.links[link].toString( options, {priority: "700", class: "xfx", indicator: "=/2"}, "right" ); + } + } + if( i === 0 ) { + return "true"; + } else { + return str; + } + } + }, + + // Flatten default errors + flatten_error: function( error ) { + if( !pl.type.is_error( error ) ) return null; + error = error.args[0]; + var obj = {}; + obj.type = error.args[0].id; + obj.thrown = obj.type === "syntax_error" ? null : error.args[1].id; + obj.expected = null; + obj.found = null; + obj.representation = null; + obj.existence = null; + obj.existence_type = null; + obj.line = null; + obj.column = null; + obj.permission_operation = null; + obj.permission_type = null; + obj.evaluation_type = null; + if( obj.type === "type_error" || obj.type === "domain_error" ) { + obj.expected = error.args[0].args[0].id; + obj.found = error.args[0].args[1].toString(); + } else if( obj.type === "syntax_error" ) { + if( error.args[1].indicator === "./2" ) { + obj.expected = error.args[0].args[0].id; + obj.found = error.args[1].args[1].args[1].args[0]; + obj.found = obj.found.id === "token_not_found" ? obj.found.id : obj.found.args[0].id; + obj.line = error.args[1].args[0].args[0].value; + obj.column = error.args[1].args[1].args[0].args[0].value; + } else { + obj.thrown = error.args[1].id; + } + } else if( obj.type === "permission_error" ) { + obj.found = error.args[0].args[2].toString(); + obj.permission_operation = error.args[0].args[0].id; + obj.permission_type = error.args[0].args[1].id; + } else if( obj.type === "evaluation_error" ) { + obj.evaluation_type = error.args[0].args[0].id; + } else if( obj.type === "representation_error" ) { + obj.representation = error.args[0].args[0].id; + } else if( obj.type === "existence_error" ) { + obj.existence = error.args[0].args[1].toString(); + obj.existence_type = error.args[0].args[0].id; + } + return obj; + }, + + // Create new session + create: function( limit ) { + return new pl.type.Session( limit ); + } + + }; + + // Built-in predicates + pl.builtin = new Module("system", { + + // TERM AND GOAL EXPANSION + + // goal_expansion/2 + "goal_expansion/2": [ + new Rule(new Term("goal_expansion", [new Term(",", [new Var("X"),new Var("Y")]),new Term(",", [new Var("X_"),new Var("Y_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"),new Var("X_")]),new Term(";", [new Term("goal_expansion", [new Var("Y"),new Var("Y_")]),new Term("=", [new Var("Y_"),new Var("Y")])])]),new Term(",", [new Term("=", [new Var("X"),new Var("X_")]),new Term("goal_expansion", [new Var("Y"),new Var("Y_")])])])), + new Rule(new Term("goal_expansion", [new Term(";", [new Var("X"),new Var("Y")]),new Term(";", [new Var("X_"),new Var("Y_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"),new Var("X_")]),new Term(";", [new Term("goal_expansion", [new Var("Y"),new Var("Y_")]),new Term("=", [new Var("Y_"),new Var("Y")])])]),new Term(",", [new Term("=", [new Var("X"),new Var("X_")]),new Term("goal_expansion", [new Var("Y"),new Var("Y_")])])])), + new Rule(new Term("goal_expansion", [new Term("->", [new Var("X"),new Var("Y")]),new Term("->", [new Var("X_"),new Var("Y_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"),new Var("X_")]),new Term(";", [new Term("goal_expansion", [new Var("Y"),new Var("Y_")]),new Term("=", [new Var("Y_"),new Var("Y")])])]),new Term(",", [new Term("=", [new Var("X"),new Var("X_")]),new Term("goal_expansion", [new Var("Y"),new Var("Y_")])])])), + new Rule(new Term("goal_expansion", [new Term("catch", [new Var("X"),new Var("Y"),new Var("Z")]),new Term("catch", [new Var("X_"),new Var("Y"),new Var("Z_")])]), new Term(";", [new Term(",", [new Term("goal_expansion", [new Var("X"),new Var("X_")]),new Term(";", [new Term("goal_expansion", [new Var("Z"),new Var("Z_")]),new Term("=", [new Var("Z_"),new Var("Z")])])]),new Term(",", [new Term("=", [new Var("X_"),new Var("X")]),new Term("goal_expansion", [new Var("Z"),new Var("Z_")])])])), + new Rule(new Term("goal_expansion", [new Term("\\+", [new Var("X")]),new Term("\\+", [new Var("X_")])]), new Term(",", [new Term("nonvar", [new Var("X")]),new Term("goal_expansion", [new Var("X"),new Var("X_")])])), + new Rule(new Term("goal_expansion", [new Term("once", [new Var("X")]),new Term("once", [new Var("X_")])]), new Term(",", [new Term("nonvar", [new Var("X")]),new Term("goal_expansion", [new Var("X"),new Var("X_")])])), + new Rule(new Term("goal_expansion", [new Term("findall", [new Var("X"),new Var("Y"),new Var("Z")]),new Term("findall", [new Var("X"),new Var("Y_"),new Var("Z")])]), new Term("goal_expansion", [new Var("Y"),new Var("Y_")])), + new Rule(new Term("goal_expansion", [new Term("setof", [new Var("X"),new Var("Y"),new Var("Z")]),new Term("findall", [new Var("X"),new Var("Y_"),new Var("Z")])]), new Term("goal_expansion", [new Var("Y"),new Var("Y_")])), + new Rule(new Term("goal_expansion", [new Term("bagof", [new Var("X"),new Var("Y"),new Var("Z")]),new Term("findall", [new Var("X"),new Var("Y_"),new Var("Z")])]), new Term("goal_expansion", [new Var("Y"),new Var("Y_")])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X")]),new Term("call", [new Var("X_")])]), new Term(",", [new Term("nonvar", [new Var("X")]),new Term("goal_expansion", [new Var("X"),new Var("X_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term("[]", [])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term("[]", [])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term("[]", [])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term(".", [new Var("A4"),new Term("[]", [])])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4"),new Var("A5")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term(".", [new Var("A4"),new Term(".", [new Var("A5"),new Term("[]", [])])])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4"),new Var("A5"),new Var("A6")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term(".", [new Var("A4"),new Term(".", [new Var("A5"),new Term(".", [new Var("A6"),new Term("[]", [])])])])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])), + new Rule(new Term("goal_expansion", [new Term("call", [new Var("X"),new Var("A1"),new Var("A2"),new Var("A3"),new Var("A4"),new Var("A5"),new Var("A6"),new Var("A7")]),new Term("call", [new Var("F_")])]), new Term(",", [new Term("=..", [new Var("F"),new Term(".", [new Var("X"),new Term(".", [new Var("A1"),new Term(".", [new Var("A2"),new Term(".", [new Var("A3"),new Term(".", [new Var("A4"),new Term(".", [new Var("A5"),new Term(".", [new Var("A6"),new Term(".", [new Var("A7"),new Term("[]", [])])])])])])])])])]),new Term("goal_expansion", [new Var("F"),new Var("F_")])])) + ], + + + + // SYSTEM PREDICATES ($) + + // '$push_global_stack'/2 + "$push_global_stack/2": function(thread, point, atom) { + var stack = atom.args[0], value = atom.args[1]; + if(!pl.type.is_variable(stack)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else { + thread.push_global_stack(stack.id, value); + thread.success(point); + } + }, + + // '$flush_global_stack'/3 + "$flush_global_stack/3": function(thread, point, atom) { + var stack = atom.args[0], list = atom.args[1], tail = atom.args[2]; + if(!pl.type.is_variable(stack)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else { + var values = thread.flush_global_stack(stack.id, tail); + thread.prepend([new State( + point.goal.replace(new Term("=", [list, values])), + point.substitution, + point + )]); + } + }, + + // '$free_variable_set'/3 + "$free_variable_set/3": function(thread, point, atom) { + var goal_in = atom.args[0], goal_out = atom.args[1], vars = atom.args[2]; + var bv = []; + var pointer = goal_in; + while(pl.type.is_term(pointer) && pointer.indicator === "^/2") { + bv = bv.concat(pointer.args[0].variables()); + pointer = pointer.args[1]; + } + var gv = pointer.variables(); + var fv = arrayToList(map(difference(gv, bv), function(v) { + return new Var(v); + })); + thread.prepend([ + new State( + point.goal.replace(new Term(",", [ + new Term("=", [goal_out, pointer]), + new Term("=", [vars, fv]) + ])), + point.substitution, + point + ) + ]); + }, + + // '$member'/2 + "$member/2": [ + new pl.type.Rule(new pl.type.Term("$member", [new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("X"),new pl.type.Var("_")])]), null), + new pl.type.Rule(new pl.type.Term("$member", [new pl.type.Var("X"),new pl.type.Term(".", [new pl.type.Var("_"),new pl.type.Var("Xs")])]), new pl.type.Term("$member", [new pl.type.Var("X"),new pl.type.Var("Xs")])) + ], + + // '$bind_bagof_keys/2'/2 + "$bind_bagof_keys/2": [ + new pl.type.Rule(new pl.type.Term("$bind_bagof_keys", [new pl.type.Term("[]", []),new pl.type.Var("_")]), null), + new pl.type.Rule(new pl.type.Term("$bind_bagof_keys", [new pl.type.Term(".", [new pl.type.Term("-", [new pl.type.Var("Key"),new pl.type.Var("_")]),new pl.type.Var("Bag")]),new pl.type.Var("Vars")]), new pl.type.Term(",", [new pl.type.Term("term_variables", [new pl.type.Var("Key"),new pl.type.Var("Vars"),new pl.type.Var("_")]),new pl.type.Term("$bind_bagof_keys", [new pl.type.Var("Bag"),new pl.type.Var("Vars")])])) + ], + + // '$findall'/4 + "$findall/4": [ + new pl.type.Rule(new pl.type.Term("$findall", [new pl.type.Var("Template0"),new pl.type.Var("Goal0"),new pl.type.Var("Instances"),new pl.type.Var("Tail")]), new pl.type.Term(";", [new pl.type.Term(",", [new pl.type.Term("copy_term", [new pl.type.Term("-", [new pl.type.Var("Template0"),new pl.type.Var("Goal0")]),new pl.type.Term("-", [new pl.type.Var("Template1"),new pl.type.Var("Goal1")])]),new pl.type.Term(",", [new pl.type.Term("call", [new pl.type.Var("Goal1")]),new pl.type.Term(",", [new pl.type.Term("copy_term", [new pl.type.Var("Template1"),new pl.type.Var("Template2")]),new pl.type.Term(",", [new pl.type.Term("$push_global_stack", [new pl.type.Var("Var"),new pl.type.Var("Template2")]),new pl.type.Term("false", [])])])])]),new pl.type.Term("$flush_global_stack", [new pl.type.Var("Var"),new pl.type.Var("Instances"),new pl.type.Var("Tail")])])) + ], + + // '$bagof'/3 + "$bagof/3": [ + new pl.type.Rule(new pl.type.Term("$bagof", [new pl.type.Var("Template"),new pl.type.Var("Goal0"),new pl.type.Var("Answer")]), new pl.type.Term(",", [new pl.type.Term("$free_variable_set", [new pl.type.Term("^", [new pl.type.Var("Template"),new pl.type.Var("Goal0")]),new pl.type.Var("Goal1"),new pl.type.Var("FV")]),new pl.type.Term(",", [new pl.type.Term("findall", [new pl.type.Term("-", [new pl.type.Var("FV"),new pl.type.Var("Template")]),new pl.type.Var("Goal1"),new pl.type.Var("Answers"),new pl.type.Term("[]", [])]),new pl.type.Term(",", [new pl.type.Term("$bind_bagof_keys", [new pl.type.Var("Answers"),new pl.type.Var("_")]),new pl.type.Term(",", [new pl.type.Term("keygroup", [new pl.type.Var("Answers"),new pl.type.Var("KeyGroups")]),new pl.type.Term(",", [new pl.type.Term("keysort", [new pl.type.Var("KeyGroups"),new pl.type.Var("KeySorted")]),new pl.type.Term("$member", [new pl.type.Term("-", [new pl.type.Var("FV"),new pl.type.Var("Answer")]),new pl.type.Var("KeySorted")])])])])])])) + ], + + // '$setof'/3 + "$setof/3": [ + new pl.type.Rule(new pl.type.Term("$setof", [new pl.type.Var("Template"),new pl.type.Var("Goal0"),new pl.type.Var("Answer")]), new pl.type.Term(",", [new pl.type.Term("$free_variable_set", [new pl.type.Term("^", [new pl.type.Var("Template"),new pl.type.Var("Goal0")]),new pl.type.Var("Goal1"),new pl.type.Var("FV")]),new pl.type.Term(",", [new pl.type.Term("findall", [new pl.type.Term("-", [new pl.type.Var("FV"),new pl.type.Var("Template")]),new pl.type.Var("Goal1"),new pl.type.Var("Answers"),new pl.type.Term("[]", [])]),new pl.type.Term(",", [new pl.type.Term("$bind_bagof_keys", [new pl.type.Var("Answers"),new pl.type.Var("_")]),new pl.type.Term(",", [new pl.type.Term("keygroup", [new pl.type.Var("Answers"),new pl.type.Var("KeyGroups")]),new pl.type.Term(",", [new pl.type.Term("keysort", [new pl.type.Var("KeyGroups"),new pl.type.Var("KeySorted")]),new pl.type.Term(",", [new pl.type.Term("$member", [new pl.type.Term("-", [new pl.type.Var("FV"),new pl.type.Var("Unsorted")]),new pl.type.Var("KeySorted")]),new pl.type.Term("sort", [new pl.type.Var("Unsorted"),new pl.type.Var("Answer")])])])])])])])) + ], + + // '$if/3' + "$if/3": [ + new pl.type.Rule(new pl.type.Term("$if", [new pl.type.Var("If"),new pl.type.Var("Then"),new pl.type.Var("Else")]), new pl.type.Term(";", [new pl.type.Term(",", [new pl.type.Term("call", [new pl.type.Var("If")]),new pl.type.Term(",", [new pl.type.Term("$push_global_stack", [new pl.type.Var("Stack"),new pl.type.Var("_")]),new pl.type.Term("call", [new pl.type.Var("Then")])])]),new pl.type.Term(",", [new pl.type.Term("$flush_global_stack", [new pl.type.Var("Stack"),new pl.type.Term("[]", []),new pl.type.Term("[]", [])]),new pl.type.Term("call", [new pl.type.Var("Else")])])])) + ], + + + // ATTRIBUTED VARIABLES + + //put_attr/3 + "put_attr/3": function( thread, point, atom ) { + var variable = atom.args[0], module = atom.args[1], value = atom.args[2]; + if( !pl.type.is_variable(variable) ) { + thread.throw_error( pl.error.type( "variable", variable, atom.indicator ) ); + } else if( !pl.type.is_atom(module) ) { + thread.throw_error( pl.error.type( "atom", module, atom.indicator ) ); + } else { + var subs = point.substitution.set_attribute( variable.id, module, value ); + thread.prepend( [new State( point.goal.replace(null), subs, point )] ); + } + }, + + // get_attr/3 + "get_attr/3": function( thread, point, atom ) { + var variable = atom.args[0], module = atom.args[1], value = atom.args[2]; + if( !pl.type.is_variable(variable) ) { + thread.throw_error( pl.error.type( "variable", variable, atom.indicator ) ); + } else if( !pl.type.is_atom(module) ) { + thread.throw_error( pl.error.type( "atom", module, atom.indicator ) ); + } else { + var attr = point.substitution.get_attribute( variable.id, module ); + if( attr ) { + thread.prepend( [new State( + point.goal.replace( new Term("=", [value, attr]) ), + point.substitution, + point + )] ); + } + } + }, + + + + // INPUT AND OUTPUT + + // op/3 + "op/3": function( thread, point, atom ) { + var priority = atom.args[0], type = atom.args[1], operators = atom.args[2]; + if(pl.type.is_atom(operators)) + operators = new Term(".", [operators, new Term("[]")]); + if( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_integer( priority ) ) { + thread.throw_error( pl.error.type( "integer", priority, atom.indicator ) ); + } else if( !pl.type.is_atom( type ) ) { + thread.throw_error( pl.error.type( "atom", type, atom.indicator ) ); + } else if( !pl.type.is_list( operators ) ) { + thread.throw_error( pl.error.type( "list", operators, atom.indicator ) ); + } else if( pl.type.is_empty_list( operators ) ) { + thread.throw_error( pl.error.permission( "create", "operator", operators, atom.indicator ) ); + } else { + var pointer = operators; + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + var operator = pointer.args[0]; + pointer = pointer.args[1]; + if( pl.type.is_variable( operator ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( !pl.type.is_atom( operator ) ) { + thread.throw_error( pl.error.type( "atom", operator, atom.indicator ) ); + return; + } else if( priority.value < 0 || priority.value > 1200 ) { + thread.throw_error( pl.error.domain( "operator_priority", priority, atom.indicator ) ); + return; + } else if( operator.id === "," ) { + thread.throw_error( pl.error.permission( "modify", "operator", operator, atom.indicator ) ); + return; + } else if( operator.id === "{}" ) { + thread.throw_error( pl.error.permission( "create", "operator", operator, atom.indicator ) ); + return; + } else if( operator.id === "[]" ) { + thread.throw_error( pl.error.permission( "create", "operator", operator, atom.indicator ) ); + return; + } else if( operator.id === "|" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) { + thread.throw_error( pl.error.permission( "create", "operator", operator, atom.indicator ) ); + return; + } else if( ["fy", "fx", "yf", "xf", "xfx", "yfx", "xfy"].indexOf( type.id ) === -1 ) { + thread.throw_error( pl.error.domain( "operator_specifier", type, atom.indicator ) ); + return; + } else { + var fix = { prefix: null, infix: null, postfix: null }; + for( var p in thread.session.__operators ) { + if(!thread.session.__operators.hasOwnProperty(p)) continue; + var classes = thread.session.__operators[p][operator.id]; + if( classes ) { + if( indexOf( classes, "fx" ) !== -1 ) { fix.prefix = { priority: p, type: "fx" }; } + if( indexOf( classes, "fy" ) !== -1 ) { fix.prefix = { priority: p, type: "fy" }; } + if( indexOf( classes, "xf" ) !== -1 ) { fix.postfix = { priority: p, type: "xf" }; } + if( indexOf( classes, "yf" ) !== -1 ) { fix.postfix = { priority: p, type: "yf" }; } + if( indexOf( classes, "xfx" ) !== -1 ) { fix.infix = { priority: p, type: "xfx" }; } + if( indexOf( classes, "xfy" ) !== -1 ) { fix.infix = { priority: p, type: "xfy" }; } + if( indexOf( classes, "yfx" ) !== -1 ) { fix.infix = { priority: p, type: "yfx" }; } + } + } + var current_class; + switch( type.id ) { + case "fy": case "fx": current_class = "prefix"; break; + case "yf": case "xf": current_class = "postfix"; break; + default: current_class = "infix"; break; + } + if(fix.infix && current_class === "postfix" || fix.postfix && current_class === "infix") { + thread.throw_error( pl.error.permission( "create", "operator", operator, atom.indicator ) ); + return; + } else { + if( fix[current_class] ) { + remove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type ); + if( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) { + delete thread.session.__operators[fix[current_class].priority][operator.id]; + } + } + if( priority.value > 0 ) { + if( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {}; + if( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = []; + thread.session.__operators[priority.value][operator.id].push( type.id ); + } + } + } + } + if(pl.type.is_variable(pointer)) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if(!pl.type.is_term(pointer) || pointer.indicator !== "[]/0") { + thread.throw_error( pl.error.type( "list", operators, atom.indicator ) ); + return; + } else { + thread.success(point); + } + } + }, + + // current_op/3 + "current_op/3": function( thread, point, atom ) { + var priority = atom.args[0], specifier = atom.args[1], operator = atom.args[2]; + var points = []; + if( !pl.type.is_variable( priority ) && !pl.type.is_integer( priority ) ) { + thread.throw_error( pl.error.type( "integer", priority, atom.indicator ) ); + } else if( pl.type.is_integer( priority ) && ( priority.value < 0 || priority.value > 1200 ) ) { + thread.throw_error( pl.error.domain( "operator_priority", priority, atom.indicator ) ); + } else if( !pl.type.is_variable( specifier ) && !pl.type.is_atom( specifier ) ) { + thread.throw_error( pl.error.type( "atom", specifier, atom.indicator ) ); + } else if( pl.type.is_atom( specifier ) && indexOf( ["fy", "fx", "yf", "xf", "xfx", "yfx", "xfy"], specifier.id ) === -1 ) { + thread.throw_error( pl.error.domain( "operator_specifier", specifier, atom.indicator ) ); + } else if( !pl.type.is_variable( operator ) && !pl.type.is_atom( operator ) ) { + thread.throw_error( pl.error.type( "atom", operator, atom.indicator ) ); + } else { + for( var p in thread.session.__operators ) + for( var o in thread.session.__operators[p] ) + for( var i = 0; i < thread.session.__operators[p][o].length; i++ ) + points.push( new State( + point.goal.replace( + new Term( ",", [ + new Term( "=", [new Num( p, false ), priority] ), + new Term( ",", [ + new Term( "=", [new Term( thread.session.__operators[p][o][i], [] ), specifier] ), + new Term( "=", [new Term( o, [] ), operator] ) + ] ) + ] ) + ), + point.substitution, + point + ) ); + thread.prepend( points ); + } + }, + + + + // LOGIC AND CONTROL STRUCTURES + + // ;/2 (disjunction) + ";/2": function(thread, point, atom) { + var left = atom.args[0], right = atom.args[1]; + var context_left = left.args[0]; + var free_left = left.indicator === ":/2" ? left.args[1] : left; + // if then else + if(pl.type.is_term(free_left) && free_left.indicator === "->/2") { + var cond = left.indicator === ":/2" ? new Term(":", [context_left, new Term("call", [free_left.args[0]])]) : free_left.args[0]; + var then = left.indicator === ":/2" ? new Term(":", [context_left, free_left.args[1]]) : free_left.args[1]; + var otherwise = right; + var goal_fst = point.goal.replace(new Term( ",", [cond, new Term(",", [new Term("!"), then])] ) ); + var goal_snd = point.goal.replace(new Term( ",", [new Term("!"), otherwise])); + thread.prepend([ + new State(goal_fst, point.substitution, point), + new State(goal_snd, point.substitution, point) + ]); + // soft-cut + } else if(pl.type.is_term(free_left) && free_left.indicator === "*->/2") { + var cond = left.indicator === ":/2" ? new Term(":", [context_left, free_left.args[0]]) : free_left.args[0]; + var then = left.indicator === ":/2" ? new Term(":", [context_left, free_left.args[1]]) : free_left.args[1]; + var otherwise = right; + thread.prepend([new State( + point.goal.replace(new Term("$if", [cond, then, otherwise])), + point.substitution, + point + )]); + // otherwise + } else { + thread.prepend([ + new State(point.goal.replace(left), point.substitution, point), + new State(point.goal.replace(right), point.substitution, point) + ]); + } + }, + + // !/0 (cut) + "!/0": function( thread, point, atom ) { + var parent_cut, last_cut, states = []; + parent_cut = point; + last_cut = null; + while( parent_cut.parent !== null && parent_cut.parent.goal.search( atom ) ) { + last_cut = parent_cut; + parent_cut = parent_cut.parent; + if(parent_cut.goal !== null) { + var selected = parent_cut.goal.select(); + if(selected && selected.indicator === ":/2") + selected = selected.args[1]; + if( selected && selected.id === "call" && selected.search(atom) ) { + parent_cut = last_cut; + break; + } + } + } + var setup_call_cleanup = null; + for( var i = thread.points.length-1; i >= 0; i-- ) { + var state = thread.points[i]; + var node = state.parent; + while( node !== null && node !== parent_cut.parent ) { + node = node.parent; + } + if( node === null && node !== parent_cut.parent ) + states.push( state ); + else if(state.setup_call_cleanup_goal) + setup_call_cleanup = state.setup_call_cleanup_goal + } + thread.points = states.reverse(); + thread.prepend([new State( + point.goal.replace(setup_call_cleanup), + point.substitution, + point + )]); + }, + + // \+ (negation) + "\\+/1": function( thread, point, atom ) { + var goal = atom.args[0]; + if( pl.type.is_variable( goal ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_callable( goal ) ) { + thread.throw_error( pl.error.type( "callable", goal, atom.indicator ) ); + } else { + // TRANSPARENT VERSION OF THE NEGATION + /*var neg_thread; + if(point.negation_thread) { + neg_thread = point.negation_thread; + } else { + neg_thread = new Thread( thread.session ); + neg_thread.add_goal( goal ); + point.negation_thread = neg_thread; + } + neg_thread.answer( function( answer ) { + if(answer === false) { + thread.success( point ); + } else if(pl.type.is_error( answer )) { + thread.throw_error( answer.args[0] ); + } else if(answer === null) { + thread.prepend( [point] ); + thread.current_limit = 0; + } + thread.again( answer !== null ); + } ); + return true;*/ + + // '\+'(X) :- call(X), !, fail. + // '\+'(_). + thread.prepend( [ + new State( point.goal.replace( new Term( ",", [new Term( ",", [ new Term( "call", [goal] ), new Term( "!", [] ) ] ), new Term( "fail", [] ) ] ) ), point.substitution, point ), + new State( point.goal.replace( null ), point.substitution, point ) + ] ); + } + }, + + // ->/2 (implication) + "->/2": function( thread, point, atom ) { + var cond = atom.args[0], then = atom.args[1]; + var goal = point.goal.replace(new Term(",", [ + new Term("call", [cond]), + new Term(",", [new Term("!"), then]) + ])); + thread.prepend( [new State( goal, point.substitution, point )] ); + }, + + // *->/2 (soft-cut) + "*->/2": function(thread, point, atom) { + var cond = atom.args[0], then = atom.args[1]; + var goal = point.goal.replace(new Term(",", [ + new Term("call", [cond]), then])); + thread.prepend([new State(goal, point.substitution, point)]); + }, + + // fail/0 + "fail/0": function( _1, _2, _3 ) {}, + + // false/0 + "false/0": function( _1, _2, _3 ) {}, + + // true/0 + "true/0": function( thread, point, _ ) { + thread.success( point ); + }, + + // call/1..8 + "call/1": callN(1), + "call/2": callN(2), + "call/3": callN(3), + "call/4": callN(4), + "call/5": callN(5), + "call/6": callN(6), + "call/7": callN(7), + "call/8": callN(8), + + // once/1 + "once/1": function( thread, point, atom ) { + var goal = atom.args[0]; + thread.prepend( [new State( point.goal.replace( new Term( ",", [new Term( "call", [goal] ), new Term( "!", [] )] ) ), point.substitution, point )] ); + }, + + // forall/2 + "forall/2": function( thread, point, atom ) { + var generate = atom.args[0], test = atom.args[1]; + thread.prepend( [new State( point.goal.replace( new Term( "\\+", [new Term( ",", [new Term( "call", [generate] ), new Term( "\\+", [new Term( "call", [test] )] )] )] ) ), point.substitution, point )] ); + }, + + // repeat/0 + "repeat/0": function( thread, point, _ ) { + thread.prepend( [new State( point.goal.replace( null ), point.substitution, point ), point] ); + }, + + // EXCEPTIONS + + // throw/1 + "throw/1": function( thread, point, atom ) { + var error = atom.args[0]; + if(pl.type.is_variable(error)) { + thread.throw_error(pl.error.instantiation(thread.level.indicator)); + } else { + for(var i = 0; i < thread.points.length; i++) { + var state = thread.points[i]; + if(state.setup_call_cleanup_catch) { + thread.points = [new State( + new Term(",", [ + new Term("catch", [ + state.setup_call_cleanup_catch, + new Var("_"), + new Term("throw", [error]) + ]), + new Term("throw", [error]) + ]), + point.substitution, + point + )]; + return; + } + + } + thread.throw_error(error); + } + }, + + // catch/3 + "catch/3": function(thread, point, atom) { + var goal = atom.args[0], catcher = atom.args[1], recover = atom.args[2]; + var nthread; + if(!point.catch) { + nthread = new Thread(thread.session); + nthread.debugger = thread.debugger; + nthread.format_success = function(state) { return state.substitution; }; + nthread.format_error = function(state) { return state.goal; }; + nthread.add_goal(goal, true, point); + point.catch = nthread; + } else { + nthread = point.catch; + } + var callback = function(answer) { + if(pl.type.is_error(answer)) { + var occurs_check = thread.get_flag("occurs_check").indicator === "true/0"; + var state = new State(); + var mgu = pl.unify(answer.args[0], catcher, occurs_check); + if(mgu !== null) { + state.substitution = point.substitution.apply(mgu); + state.goal = point.goal.replace(recover).apply(mgu); + state.parent = point; + thread.prepend([state]); + } else { + thread.throw_error(answer.args[0]); + } + } else if(answer !== false && answer !== null) { + var state = answer === null ? [] : new State( + point.goal.apply(answer).replace(null), + point.substitution.apply(answer), + point + ); + thread.prepend([state, point]); + } else if(answer === null) { + thread.prepend([point]); + if(thread.has_limit) + thread.current_limit = 0; + } + thread.again(answer !== null); + }; + nthread.answer(callback); + return true; + }, + + // call_cleanup/2 + "call_cleanup/2": function(thread, point, atom) { + var call = atom.args[0], cleanup = atom.args[1]; + if(pl.type.is_variable(call) || pl.type.is_variable(cleanup)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(call)) { + thread.throw_error(pl.error.type("callable", call, atom.indicator)); + } else if(!pl.type.is_callable(cleanup)) { + thread.throw_error(pl.error.type("callable", cleanup, atom.indicator)); + } else { + var nthread, callback; + if(point.hasOwnProperty("setup_call_cleanup_thread")) { + nthread = point.setup_call_cleanup_thread; + callback = point.setup_call_cleanup_callback; + } else { + var goal = new Term("call", [call]); + nthread = new Thread(thread.session); + nthread.add_goal(goal, true, point); + callback = function(answer) { + if(answer === null) { + var state = new State( + point.goal, + point.substitution, + point + ); + state.setup_call_cleanup_thread = nthread; + state.setup_call_cleanup_callback = callback; + thread.prepend([state]); + } else if(answer === false) { + var cleanup_and_fail = new Term(",", [ + new Term("call", [cleanup]), + new Term("fail") + ]); + var state = new State( + point.goal.replace(cleanup_and_fail), + point.substitution, + point + ); + thread.prepend([state]); + } else if(pl.type.is_error(answer)) { + var cleanup_and_throw = new Term(",", [ + new Term("call", [cleanup]), + answer + ]); + var state = new State( + point.goal.replace(cleanup_and_throw), + point.substitution, + point + ); + thread.prepend([state]); + } else { + if(nthread.points.length === 0) { + var state = new State( + point.goal.replace( + new Term("call", [cleanup]) + ).apply(answer), + point.substitution.apply(answer), + point + ); + thread.prepend([state]); + } else { + var state1 = new State( + point.goal.apply(answer).replace(null), + point.substitution.apply(answer), + point + ); + var state2 = new State( + point.goal, + point.substitution, + point + ); + state2.setup_call_cleanup_thread = nthread; + state2.setup_call_cleanup_callback = callback; + state2.setup_call_cleanup_goal = cleanup.apply(answer); + state2.setup_call_cleanup_catch = cleanup; + thread.prepend([state1, state2]); + } + } + thread.again(); + } + } + nthread.answer(callback); + return true; + } + }, + + // setup_call_cleanup/3 + "setup_call_cleanup/3": function(thread, point, atom) { + var setup = atom.args[0], call = atom.args[1], cleanup = atom.args[2]; + if(pl.type.is_variable(setup) || pl.type.is_variable(call) || pl.type.is_variable(cleanup)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(setup)) { + thread.throw_error(pl.error.type("callable", setup, atom.indicator)); + } else if(!pl.type.is_callable(call)) { + thread.throw_error(pl.error.type("callable", call, atom.indicator)); + } else if(!pl.type.is_callable(cleanup)) { + thread.throw_error(pl.error.type("callable", cleanup, atom.indicator)); + } else { + thread.prepend([new State( + point.goal.replace(new Term(",", [ + new Term("once", [setup]), + new Term("call_cleanup", [call, cleanup]) + ])), + point.substitution, + point + )]); + } + }, + + // UNIFICATION + + // =/2 (unification) + "=/2": function( thread, point, atom ) { + var occurs_check = thread.get_flag( "occurs_check" ).indicator === "true/0"; + var state = new State(); + var mgu = pl.unify( atom.args[0], atom.args[1], occurs_check ); + if( mgu !== null ) { + state.goal = point.goal.apply( mgu ).replace( null ); + state.substitution = point.substitution.apply( mgu ); + state.parent = point; + thread.prepend( [state] ); + } + }, + + // unify_with_occurs_check/2 + "unify_with_occurs_check/2": function( thread, point, atom ) { + var state = new State(); + var mgu = pl.unify( atom.args[0], atom.args[1], true ); + if( mgu !== null ) { + state.goal = point.goal.apply( mgu ).replace( null ); + state.substitution = point.substitution.apply( mgu ); + state.parent = point; + thread.prepend( [state] ); + } + }, + + // \=/2 + "\\=/2": function( thread, point, atom ) { + var occurs_check = thread.get_flag( "occurs_check" ).indicator === "true/0"; + var mgu = pl.unify( atom.args[0], atom.args[1], occurs_check ); + if( mgu === null ) { + thread.success( point ); + } + }, + + // subsumes_term/2 + /* + subsumes_term(General, Specific) :- + \+ \+ ( + term_variables(Specific, Vars1), + unify_with_occurs_check(General, Specific), + term_variables(Vars1, Vars2), + Vars1 == Vars2 + ). + */ + "subsumes_term/2": function( thread, point, atom ) { + var general = atom.args[0], specific = atom.args[1]; + var vars1 = thread.next_free_variable(); + var vars2 = thread.next_free_variable(); + thread.prepend([new State( + point.goal.replace(new Term("\\+", [ + new Term("\\+", [ + new Term(",", [ + new Term("term_variables", [specific, vars1]), + new Term(",", [ + new Term("unify_with_occurs_check", [general, specific]), + new Term(",", [ + new Term("term_variables", [vars1, vars2]), + new Term("==", [vars1, vars2]) + ]) + ]) + ]) + ]) + ])), + point.substitution, + point + )]); + }, + + // ALL SOLUTIONS + + // findall/3 + "findall/3": function(thread, point, atom) { + var template = atom.args[0], goal = atom.args[1], instances = atom.args[2]; + var tail = new Term("[]", []); + thread.prepend([new State( + point.goal.replace(new Term("findall", [template, goal, instances, tail])), + point.substitution, + point + )]); + }, + + // findall/4 + "findall/4": function(thread, point, atom) { + var template = atom.args[0], goal = atom.args[1], instances = atom.args[2], tail = atom.args[3]; + var proper_goal = goal; + if(pl.type.is_term(goal) && goal.indicator === ":/2") + proper_goal = goal.args[1]; + if(pl.type.is_variable(proper_goal)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(proper_goal)) { + thread.throw_error(pl.error.type("callable", goal, atom.indicator)); + } else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) { + thread.throw_error(pl.error.type("list", instances, atom.indicator)); + } else if(!pl.type.is_variable(tail) && !pl.type.is_list(tail)) { + thread.throw_error(pl.error.type("list", tail, atom.indicator)); + } else { + thread.prepend([new State( + point.goal.replace(new Term("$findall", [template, goal, instances, tail])), + point.substitution, + point + )]); + } + }, + + // bagof/3 + "bagof/3": function(thread, point, atom) { + var template = atom.args[0], goal = atom.args[1], instances = atom.args[2]; + if(pl.type.is_variable(goal)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(goal)) { + thread.throw_error(pl.error.type("callable", goal, atom.indicator)); + } else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) { + thread.throw_error( pl.error.type("list", instances, atom.indicator)); + } else { + thread.prepend([new State( + point.goal.replace(new Term("$bagof", [template, goal, instances])), + point.substitution, + point + )]); + } + }, + + // setof/3 + "setof/3": function(thread, point, atom) { + var template = atom.args[0], goal = atom.args[1], instances = atom.args[2]; + if(pl.type.is_variable(goal)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(goal)) { + thread.throw_error(pl.error.type("callable", goal, atom.indicator)); + } else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) { + thread.throw_error( pl.error.type("list", instances, atom.indicator)); + } else { + thread.prepend([new State( + point.goal.replace(new Term("$setof", [template, goal, instances])), + point.substitution, + point + )]); + } + }, + + // TERM CREATION AND DECOMPOSITION + + // functor/3 + "functor/3": function( thread, point, atom ) { + var subs; + var term = atom.args[0], name = atom.args[1], arity = atom.args[2]; + if( pl.type.is_variable( term ) && (pl.type.is_variable( name ) || pl.type.is_variable( arity )) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( arity ) && !pl.type.is_integer( arity ) ) { + thread.throw_error( pl.error.type( "integer", atom.args[2], atom.indicator ) ); + } else if( !pl.type.is_variable( name ) && !pl.type.is_atomic( name ) ) { + thread.throw_error( pl.error.type( "atomic", atom.args[1], atom.indicator ) ); + } else if( pl.type.is_variable( term ) && !pl.type.is_atom( name ) && pl.type.is_integer( arity ) && arity.value > 0 ) { + thread.throw_error( pl.error.type( "atom", atom.args[1], atom.indicator ) ); + } else if( pl.type.is_variable( term ) && pl.type.is_integer( arity ) && arity.value < 0 ) { + thread.throw_error( pl.error.domain( "not_less_than_zero", atom.args[2], atom.indicator ) ); + } else if( pl.type.is_variable( term ) ) { + if( atom.args[2].value >= 0 ) { + var args = []; + for( var i = 0; i < arity.value; i++ ) + args.push( thread.next_free_variable() ); + var functor = pl.type.is_number( name ) ? name : new Term( name.id, args ); + thread.prepend( [new State( point.goal.replace( new Term( "=", [term, functor] ) ), point.substitution, point )] ); + } + } else { + var id = pl.type.is_number( term ) ? term : new Term( term.id, [] ); + var length = pl.type.is_number( term ) ? new Num( 0, false ) : new Num( term.args.length, false ); + var goal = new Term( ",", [new Term( "=", [id, name] ), new Term( "=", [length, arity] )] ); + thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); + } + }, + + // arg/3 + "arg/3": function( thread, point, atom ) { + if( pl.type.is_variable( atom.args[0] ) || pl.type.is_variable( atom.args[1] ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_integer( atom.args[0] ) ) { + thread.throw_error( pl.error.type( "integer", atom.args[0], atom.indicator ) ); + } else if( atom.args[0].value < 0 ) { + thread.throw_error( pl.error.domain( "not_less_than_zero", atom.args[0], atom.indicator ) ); + } else if( !pl.type.is_compound( atom.args[1] ) ) { + thread.throw_error( pl.error.type( "compound", atom.args[1], atom.indicator ) ); + } else { + var n = atom.args[0].value; + if( n > 0 && n <= atom.args[1].args.length ) { + var goal = new Term( "=", [atom.args[1].args[n-1], atom.args[2]] ); + thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); + } + } + }, + + // =../2 (univ) + "=../2": function( thread, point, atom ) { + var list; + if( pl.type.is_variable( atom.args[0] ) && (pl.type.is_variable( atom.args[1] ) + || pl.type.is_non_empty_list( atom.args[1] ) && pl.type.is_variable( atom.args[1].args[0] )) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_fully_list( atom.args[1] ) ) { + thread.throw_error( pl.error.type( "list", atom.args[1], atom.indicator ) ); + } else if( pl.type.is_variable( atom.args[0] ) && pl.type.is_empty_list( atom.args[1] ) ) { + thread.throw_error( pl.error.domain( "non_empty_list", atom.args[1], atom.indicator ) ); + } else if( !pl.type.is_variable( atom.args[0] ) ) { + if( pl.type.is_term( atom.args[0] ) && atom.args[0].args.length > 0 ) { + list = new Term( "[]" ); + for( var i = atom.args[0].args.length - 1; i >= 0; i-- ) { + list = new Term( ".", [atom.args[0].args[i], list] ); + } + list = new Term( ".", [new Term( atom.args[0].id ), list] ); + } else { + list = new Term( ".", [atom.args[0], new Term( "[]" )] ); + } + thread.prepend( [new State( point.goal.replace( new Term( "=", [list, atom.args[1]] ) ), point.substitution, point )] ); + } else if( !pl.type.is_variable( atom.args[1] ) ) { + var args = []; + list = atom.args[1].args[1]; + while( list.indicator === "./2" ) { + args.push( list.args[0] ); + list = list.args[1]; + } + if( pl.type.is_variable( atom.args[0] ) && pl.type.is_variable( list ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( args.length === 0 && pl.type.is_compound( atom.args[1].args[0] ) ) { + thread.throw_error( pl.error.type( "atomic", atom.args[1].args[0], atom.indicator ) ); + } else if( args.length > 0 && (pl.type.is_compound( atom.args[1].args[0] ) || pl.type.is_number( atom.args[1].args[0] )) ) { + thread.throw_error( pl.error.type( "atom", atom.args[1].args[0], atom.indicator ) ); + } else { + if( args.length === 0 ) { + thread.prepend( [new State( point.goal.replace( new Term( "=", [atom.args[1].args[0], atom.args[0]], point ) ), point.substitution, point )] ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [new Term( atom.args[1].args[0].id, args ), atom.args[0]] ) ), point.substitution, point )] ); + } + } + } + }, + + // copy_term/2 + "copy_term/2": function(thread, point, atom) { + var original_term = atom.args[0], renamed_term = atom.args[1]; + thread.session.renamed_variables = {}; + var new_term = original_term.rename(thread); + thread.session.renamed_variables = {}; + thread.prepend([ + new State( + point.goal.replace(new Term("=", [renamed_term, new_term])), + point.substitution, + point) + ] + ); + }, + + // term_variables/2 + "term_variables/2": [ + new pl.type.Rule(new pl.type.Term("term_variables", [new pl.type.Var("Term"),new pl.type.Var("Vars")]), new pl.type.Term("term_variables", [new pl.type.Var("Term"),new pl.type.Var("Vars"),new pl.type.Term("[]", [])])) + ], + + // term_variables/3 + "term_variables/3": function(thread, point, atom) { + var term = atom.args[0], vars = atom.args[1], tail = atom.args[2]; + if( !pl.type.is_fully_list( vars ) ) { + thread.throw_error( pl.error.type( "list", vars, atom.indicator ) ); + } else { + var list = arrayToList(map(nub(term.variables()), function(v) { + return new Var(v); + }), tail); + thread.prepend([new State( + point.goal.replace(new Term("=", [vars, list])), + point.substitution, + point + )]); + } + }, + + // numbervars/3 + "numbervars/3": function(thread, point, atom) { + var term = atom.args[0], start = atom.args[1], end = atom.args[2]; + if(pl.type.is_variable(start)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_integer(start)) { + thread.throw_error(pl.error.type("integer", start, atom.indicator)); + } else if(!pl.type.is_variable(end) && !pl.type.is_integer(end)) { + thread.throw_error(pl.error.type("integer", end, atom.indicator)); + } else { + var variables = nub(term.variables()); + var value = start.value; + var unif_body = new Term("true"); + for(var i = 0; i < variables.length; i++) { + unif_body = new Term(",", [ + new Term("=", [ + new Var(variables[i]), + new Term("$VAR", [new Num(value, false)])]), + unif_body]); + value++; + } + var unif_end = new Term("=", [end, new Num(value, false)]); + if(pl.type.is_variable(end) || end.value === value) { + thread.prepend([new State( + point.goal.replace(new Term(",", [unif_body, unif_end])), + point.substitution, + point + )]); + } + } + }, + + // CLAUSE RETRIEVAL AND INFORMATION + + // clause/2 + "clause/2": function(thread, point, atom) { + var head = atom.args[0], body = atom.args[1]; + var module_id = "user"; + if(pl.type.is_term(head) && head.indicator === ":/2") { + if(!pl.type.is_atom(head.args[0])) { + thread.throw_error(pl.error.type("module", head.args[0], atom.indicator)); + return; + } + module_id = head.args[0].id; + head = head.args[1]; + } + var get_module = thread.session.modules[module_id]; + if(pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if(!pl.type.is_variable(body) && !pl.type.is_callable(body)) { + thread.throw_error(pl.error.type("callable", body, atom.indicator)); + } else if(head.indicator === ",/2" || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + thread.throw_error(pl.error.permission("access", "private_procedure", str_indicator(head.indicator), atom.indicator)); + } else if(pl.type.is_module(get_module) && get_module.rules[head.indicator]) { + if(get_module.is_public_predicate(head.indicator)) { + var states = []; + if(typeof get_module.rules[head.indicator] === "function") { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + return; + } + for(var i = 0; i < get_module.rules[head.indicator].length; i++) { + var rule = get_module.rules[head.indicator][i]; + thread.session.renamed_variables = {}; + rule = rule.rename(thread); + if(rule.body === null) + rule.body = new Term("true"); + var goal = new Term(",", [ + new Term("=", [rule.head, head]), + new Term("=", [rule.body, body]) + ]); + states.push(new State(point.goal.replace(goal), point.substitution, point)); + } + thread.prepend(states); + } else { + thread.throw_error(pl.error.permission("access", "private_procedure", str_indicator(head.indicator), atom.indicator)); + } + } + }, + + // current_predicate/1 + "current_predicate/1": function(thread, point, atom) { + var indicator = atom.args[0]; + var module_id; + if(pl.type.is_term(indicator) && indicator.indicator === ":/2") { + if(!pl.type.is_atom(indicator.args[0])) { + thread.throw_error(pl.error.type("module", indicator.args[0], atom.indicator)); + return; + } + module_id = indicator.args[0].id; + indicator = indicator.args[1]; + } else { + module_id = "user"; + } + if(!pl.type.is_variable(indicator) && (!pl.type.is_compound(indicator) || indicator.indicator !== "//2")) { + thread.throw_error(pl.error.type( "predicate_indicator", indicator, atom.indicator)); + } else if(!pl.type.is_variable( indicator ) && !pl.type.is_variable(indicator.args[0]) && !pl.type.is_atom(indicator.args[0])) { + thread.throw_error(pl.error.type( "atom", indicator.args[0], atom.indicator)); + } else if(!pl.type.is_variable(indicator) && !pl.type.is_variable(indicator.args[1]) && !pl.type.is_integer(indicator.args[1])) { + thread.throw_error(pl.error.type("integer", indicator.args[1], atom.indicator)); + } else if(!pl.type.is_variable(indicator) && pl.type.is_integer(indicator.args[1]) && indicator.args[1].value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", indicator.args[1], atom.indicator)); + } else { + var states = []; + var get_module = thread.session.modules[module_id]; + if(pl.type.is_module(get_module)) { + for(var prop in get_module.rules) { + if(!get_module.rules.hasOwnProperty(prop)) + continue; + var predicate = str_indicator(prop); + var goal = new Term("=", [predicate, indicator]); + states.push(new State(point.goal.replace(goal), point.substitution, point)); + } + thread.prepend(states); + } + } + }, + + // current_module/1 + "current_module/1": function(thread, point, atom) { + var module_id = atom.args[0]; + if(!pl.type.is_variable(module_id) && !pl.type.is_atom(module_id)) { + thread.throw_error(pl.error.type("atom", module_id, atom.indicator)); + } else { + if(pl.type.is_variable(module_id)) { + var states = []; + for(var prop in thread.session.modules) { + if(!thread.session.modules.hasOwnProperty(prop)) + continue; + states.push(new State( + point.goal.replace(new Term("=", [module_id, new Term(prop)])), + point.substitution, + point + )); + } + thread.prepend(states); + } else { + if(thread.session.modules.hasOwnProperty(module_id.id)) + thread.success(point); + } + } + }, + + // predicate_property/2 + "predicate_property/2": function(thread, point, atom) { + var head = atom.args[0], property = atom.args[1]; + var module_id; + if(pl.type.is_term(head) && head.indicator === ":/2") { + if(!pl.type.is_atom(head.args[0])) { + thread.throw_error(pl.error.type("module", head.args[0], atom.indicator)); + return; + } + module_id = head.args[0].id; + head = head.args[1]; + } + if(!pl.type.is_variable(head) && !pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if(!pl.type.is_variable(property) && !pl.type.is_predicate_property(property)) { + thread.throw_error(pl.error.domain("predicate_property", property, atom.indicator)); + } else { + var get_module = module_id ? thread.session.modules[module_id] : thread.session.modules.user; + var points = []; + // all predicates + if(pl.type.is_variable(head)) { + // built-in predicates (built_in + static + native_code + meta_predicate?) + if(!module_id) { + for(var prop in pl.builtin.rules) { + if(!pl.builtin.rules.hasOwnProperty(prop)) + continue; + var indicator = str_indicator(prop); + var args = []; + for(var i = 0; i < indicator.args[1].value; i++) + args.push(thread.next_free_variable()); + var unif_head = new Term(indicator.args[0].id, args); + var current_properties = [ + new Term("static"), + new Term("built_in"), + new Term("native_code") + ]; + if(pl.builtin.meta_predicates.hasOwnProperty(prop)) + current_properties.push(new Term("meta_predicate", [ + pl.builtin.meta_predicates[prop] + ])); + // all predicates, one property / all properties + for(var i = 0; i < current_properties.length; i++) { + if(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) { + points.push(new State( + point.goal.replace(new Term(",", [ + new Term("=", [head, unif_head]), + new Term("=", [property, current_properties[i]]) + ])), + point.substitution, + point + )); + } + } + } + } + // user-defined predicates + if(pl.type.is_module(get_module)) { + for(var prop in get_module.rules) { + if(!get_module.rules.hasOwnProperty(prop)) + continue; + var indicator = str_indicator(prop); + var args = []; + for(var i = 0; i < indicator.args[1].value; i++) + args.push(thread.next_free_variable()); + var unif_head = new Term(indicator.args[0].id, args); + var current_properties = []; + if(thread.is_public_predicate(prop, module_id)) + current_properties.push(new Term("dynamic")); + else + current_properties.push(new Term("static")); + if(get_module.rules[prop] instanceof Function) + current_properties.push(new Term("native_code")); + if(thread.is_multifile_predicate(prop, module_id)) + current_properties.push(new Term("multifile")); + if(get_module.meta_predicates.hasOwnProperty(prop)) + current_properties.push(new Term("meta_predicate", [ + get_module.meta_predicates[prop] + ])); + // all predicates, one property / all properties + for(var i = 0; i < current_properties.length; i++) { + if(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) { + points.push(new State( + point.goal.replace(new Term(",", [ + new Term("=", [head, unif_head]), + new Term("=", [property, current_properties[i]]) + ])), + point.substitution, + point + )); + } + } + } + } + // one predicate + } else { + var builtin = !module_id && pl.type.is_builtin(head); + var predicate = builtin ? pl.builtin.rules[head.indicator] : get_module.rules[head.indicator]; + get_module = builtin ? pl.builtin : get_module; + if(predicate) { + var current_properties; + if(builtin) { + current_properties = [ + new Term("static"), + new Term("built_in"), + new Term("native_code") + ]; + } else { + current_properties = []; + if(thread.is_public_predicate(head.indicator, module_id)) + current_properties.push(new Term("dynamic")); + else + current_properties.push(new Term("static")); + if(predicate instanceof Function) + current_properties.push(new Term("native_code")); + if(thread.is_multifile_predicate(head.indicator, module_id)) + current_properties.push(new Term("multifile")); + } + if(get_module.meta_predicates.hasOwnProperty(head.indicator)) + current_properties.push(new Term("meta_predicate", [ + get_module.meta_predicates[head.indicator] + ])); + var args = []; + for(var i = 0; i < head.args.length; i++) + args.push(thread.next_free_variable()); + var unif_head = new Term(head.id, args); + // one predicate, one property / all properties + for(var i = 0; i < current_properties.length; i++) { + if(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) { + points.push(new State( + point.goal.replace(new Term(",", [ + new Term("=", [head, unif_head]), + new Term("=", [property, current_properties[i]]) + ])), + point.substitution, + point + )); + } + } + } + } + thread.prepend(points); + } + }, + + // listing/0 + "listing/0": function( thread, point, atom ) { + var context_module = atom.context_module ? atom.context_module : "user"; + var rules = {}; + if(pl.type.is_module(thread.session.modules[context_module])) { + rules = thread.session.modules[context_module].rules; + } + var str = ""; + for(var indicator in rules) { + if(!rules.hasOwnProperty(indicator)) continue; + var predicate = rules[indicator]; + str += "% " + indicator + "\n"; + if(predicate instanceof Array) { + for(var i = 0; i < predicate.length; i++) + str += predicate[i].toString( {session: thread.session} ) + "\n"; + } else { + str += "/*\n" + predicate.toString() + "\n*/"; + } + str += "\n"; + } + thread.prepend( [new State( + point.goal.replace(new Term("write", [new Term(str, [])])), + point.substitution, + point + )] ); + }, + + // listing/1 + "listing/1": function( thread, point, atom ) { + var indicator = atom.args[0]; + var context_module = "user"; + if(indicator.indicator === ":/2") { + context_module = indicator.args[0].id; + indicator = indicator.args[1]; + } + if(pl.type.is_variable(indicator)) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if(!pl.type.is_predicate_indicator(indicator)) { + thread.throw_error( pl.error.type( "predicate_indicator", indicator, atom.indicator ) ); + } else { + var rules = {}; + if(pl.type.is_module(thread.session.modules[context_module])) { + rules = thread.session.modules[context_module].rules; + } + var str = ""; + var str_indicator = indicator.args[0].id + "/" + indicator.args[1].value; + if(rules.hasOwnProperty(str_indicator)) { + var predicate = rules[str_indicator]; + if(predicate instanceof Array) { + for(var i = 0; i < predicate.length; i++) + str += predicate[i].toString( {session: thread.session} ) + "\n"; + } else { + str += "/*\n" + predicate.toString() + "\n*/"; + } + str += "\n"; + } + thread.prepend( [new State( + point.goal.replace(new Term("write", [new Term(str, [])])), + point.substitution, + point + )] ); + } + }, + + // LIST OPERATIONS + + // sort/2 + "sort/2": function( thread, point, atom ) { + var list = atom.args[0], expected = atom.args[1]; + if( pl.type.is_variable( list ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) { + thread.throw_error( pl.error.type( "list", expected, atom.indicator ) ); + } else { + var arr = []; + var pointer = list; + while( pointer.indicator === "./2" ) { + arr.push( pointer.args[0] ); + pointer = pointer.args[1]; + } + if( pl.type.is_variable( pointer ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_empty_list( pointer ) ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + } else { + var sorted_arr = arr.sort( pl.compare ); + for( var i = sorted_arr.length-1; i > 0; i-- ) { + if( sorted_arr[i].equals(sorted_arr[i-1]) ) + sorted_arr.splice(i,1); + } + var sorted_list = new Term( "[]" ); + for( var i = sorted_arr.length-1; i >= 0; i-- ) { + sorted_list = new Term( ".", [sorted_arr[i], sorted_list] ); + } + thread.prepend( [new State( point.goal.replace( new Term( "=", [sorted_list, expected] ) ), point.substitution, point )] ); + } + } + }, + + // keysort/2 + "keysort/2": function( thread, point, atom ) { + var list = atom.args[0], expected = atom.args[1]; + if( pl.type.is_variable( list ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) { + thread.throw_error( pl.error.type( "list", expected, atom.indicator ) ); + } else { + var arr = []; + var elem; + var pointer = list; + while( pointer.indicator === "./2" ) { + elem = pointer.args[0]; + if( pl.type.is_variable( elem ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( !pl.type.is_term( elem ) || elem.indicator !== "-/2" ) { + thread.throw_error( pl.error.type( "pair", elem, atom.indicator ) ); + return; + } + elem.args[0].pair = elem.args[1]; + arr.push( elem.args[0] ); + pointer = pointer.args[1]; + } + if( pl.type.is_variable( pointer ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_empty_list( pointer ) ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + } else { + if(!pl.type.is_variable(expected)) { + var pointer = expected; + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + var head = pointer.args[0]; + if(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== "-/2")) { + thread.throw_error( pl.error.type( "pair", head, atom.indicator ) ); + return; + } + pointer = pointer.args[1]; + } + if(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) { + thread.throw_error( pl.error.type( "list", expected, atom.indicator ) ); + return; + } + } + var sorted_arr = arr.sort( pl.compare ); + var sorted_list = new pl.type.Term( "[]" ); + for( var i = sorted_arr.length - 1; i >= 0; i-- ) { + sorted_list = new pl.type.Term( ".", [new pl.type.Term( "-", [sorted_arr[i], sorted_arr[i].pair] ), sorted_list] ); + delete sorted_arr[i].pair; + } + thread.prepend( [new pl.type.State( point.goal.replace( new pl.type.Term( "=", [sorted_list, expected] ) ), point.substitution, point )] ); + } + } + }, + + // keygroup + "keygroup/2": function(thread, point, atom) { + var list = atom.args[0], expected = atom.args[1]; + if(pl.type.is_variable(list)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_variable(expected) && !pl.type.is_fully_list(expected)) { + thread.throw_error(pl.error.type("list", expected, atom.indicator)); + } else { + var keys = []; + var values = []; + var pointer = list + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + var elem = pointer.args[0]; + if(pl.type.is_variable(elem)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if(!pl.type.is_term(elem) || elem.indicator !== "-/2") { + thread.throw_error(pl.error.type("pair", elem, atom.indicator)); + return; + } + var key = elem.args[0], value = elem.args[1]; + var index = -1; + for(var i = 0; i < keys.length; i++) { + if(pl.compare(key, keys[i]) === 0) { + index = i; + break; + } + } + if(index === -1) { + index = keys.length; + keys.push(key); + values.push([]); + } + values[index].push(value); + pointer = pointer.args[1]; + } + if(pl.type.is_variable(pointer)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_empty_list(pointer)) { + thread.throw_error(pl.error.type("list", list, atom.indicator)); + } else { + if(!pl.type.is_variable(expected)) { + var pointer = expected; + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + var head = pointer.args[0]; + if(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== "-/2")) { + thread.throw_error(pl.error.type("pair", head, atom.indicator)); + return; + } + pointer = pointer.args[1]; + } + if(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) { + thread.throw_error(pl.error.type("list", expected, atom.indicator)); + return; + } + } + group = new Term("[]", []); + for(var i = keys.length-1; i >= 0; i--) + group = new Term(".", [new Term("-", [keys[i], arrayToList(values[i])]), group]); + thread.prepend([ + new State( + point.goal.replace(new pl.type.Term("=", [expected, group])), + point.substitution, + point + ) + ]); + } + } + }, + + // CLAUSE CREATION AND DESTRUCTION + + // asserta/1 + "asserta/1": function(thread, point, atom) { + var clause = atom.args[0]; + var module_id = "user"; + if(pl.type.is_term(clause) && clause.indicator === ":/2") { + module_id = clause.args[0].id; + clause = clause.args[1]; + } + if(pl.type.is_variable(clause)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(clause)) { + thread.throw_error(pl.error.type("callable", clause, atom.indicator)); + } else { + var head, body, get_module; + if(clause.indicator === ":-/2") { + head = clause.args[0]; + body = body_conversion(clause.args[1]); + } else { + head = clause; + body = null; + } + if(pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if(body !== null && !pl.type.is_callable(body)) { + thread.throw_error( pl.error.type("callable", body, atom.indicator)); + } else if((!pl.type.is_module(thread.session.modules[module_id]) + || thread.is_public_predicate(head.indicator, module_id)) + && head.indicator !== ",/2" + && !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + if(!pl.type.is_module(thread.session.modules[module_id])) { + get_module = new Module(module_id, {}, "all", {session: thread.session}); + thread.session.modules[module_id] = get_module; + } else { + get_module = thread.session.modules[module_id]; + } + if(get_module.rules[head.indicator] === undefined) + get_module.rules[head.indicator] = []; + get_module.public_predicates[head.indicator] = true; + get_module.rules[head.indicator] = [new Rule(head, body, true)].concat(get_module.rules[head.indicator]); + get_module.update_indices_predicate(head.indicator); + thread.success(point); + } else { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + } + } + }, + + // assertz/1 + "assertz/1": function(thread, point, atom) { + var clause = atom.args[0]; + var module_id = "user"; + if(pl.type.is_term(clause) && clause.indicator === ":/2") { + module_id = clause.args[0].id; + clause = clause.args[1]; + } + if(pl.type.is_variable(clause)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(clause)) { + thread.throw_error(pl.error.type("callable", clause, atom.indicator)); + } else { + var head, body, get_module; + if(clause.indicator === ":-/2") { + head = clause.args[0]; + body = body_conversion(clause.args[1]); + } else { + head = clause; + body = null; + } + if(pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if(body !== null && !pl.type.is_callable(body)) { + thread.throw_error( pl.error.type("callable", body, atom.indicator)); + } else if((!pl.type.is_module(thread.session.modules[module_id]) + || thread.is_public_predicate(head.indicator, module_id)) + && head.indicator !== ",/2" + && !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + if(!pl.type.is_module(thread.session.modules[module_id])) { + get_module = new Module(module_id, {}, "all", {session: thread.session}); + thread.session.modules[module_id] = get_module; + } else { + get_module = thread.session.modules[module_id]; + } + if(get_module.rules[head.indicator] === undefined) + get_module.rules[head.indicator] = []; + get_module.public_predicates[head.indicator] = true; + get_module.rules[head.indicator].push(new Rule(head, body, true)); + get_module.update_indices_predicate(head.indicator); + thread.success(point); + } else { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + } + } + }, + + // retract/1 + "retract/1": function(thread, point, atom) { + var clause = atom.args[0]; + if(pl.type.is_variable(clause)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(clause)) { + thread.throw_error(pl.error.type("callable", clause, atom.indicator)); + } else { + var head, body, module_atom, module_id; + if(clause.indicator === ":/2") { + module_atom = clause.args[0]; + clause = clause.args[1]; + if(!pl.type.is_atom(module_atom)) { + thread.throw_error(pl.error.type("module", module_atom, atom.indicator)); + return; + } + } else { + module_atom = new Term("user"); + } + if(clause.indicator === ":-/2") { + head = clause.args[0]; + body = clause.args[1]; + } else { + head = clause; + body = new Term("true"); + } + if(pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + return; + } else if(!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + return; + } + module_id = module_atom.id; + var get_module = thread.session.modules[module_id]; + if(!pl.type.is_module(get_module)) + return; + if(!point.retract) { + if(thread.is_public_predicate(head.indicator, module_id) + && head.indicator !== ",/2" + && !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + if(get_module.rules[head.indicator] !== undefined) { + var states = []; + if(typeof get_module.rules[head.indicator] === "function") { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + return; + } + for(var i = 0; i < get_module.rules[head.indicator].length; i++) { + thread.session.renamed_variables = {}; + var orule = get_module.rules[head.indicator][i]; + var rule = orule.rename(thread); + if(rule.body === null) + rule.body = new Term("true", []); + var occurs_check = thread.get_flag("occurs_check").indicator === "true/0"; + var mgu = pl.unify(new Term(",", [head, body]), new Term(",", [rule.head, rule.body]), occurs_check); + if(mgu !== null) { + var state = new State( + point.goal.replace(new Term(",", [ + new Term(":", [ + module_atom, + new Term("retract", [new Term(":-", [head, body])]), + ]), + new Term(",", [ + new Term("=", [head, rule.head]), + new Term("=", [body, rule.body]) + ]) + ])), point.substitution, point); + state.retract = orule; + states.push(state); + } + } + thread.prepend(states); + } + } else { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + } + } else { + retract(thread, point, head.indicator, point.retract, get_module); + } + } + }, + + // retractall/1 + "retractall/1": function(thread, point, atom) { + var head = atom.args[0]; + var context_module = "user"; + if(pl.type.is_term(head) && head.indicator === ":/2") { + context_module = head.args[0].id; + head = head.args[1]; + } + if(pl.type.is_variable(head)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_callable(head)) { + thread.throw_error(pl.error.type("callable", head, atom.indicator)); + } else if(!thread.is_public_predicate(head.indicator, context_module) + || head.indicator === ",/2" + || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) { + thread.throw_error(pl.error.permission("modify", "static_procedure", str_indicator(head.indicator), atom.indicator)); + } else { + thread.prepend([ + new State(point.goal.replace(new Term(",", [ + new Term(":", [ + new Term(context_module), + new Term("retract", [new pl.type.Term(":-", [head, new Var("_")])]) + ]), + new Term("fail", []) + ])), point.substitution, point), + new State(point.goal.replace(null), point.substitution, point) + ]); + } + }, + + // abolish/1 + "abolish/1": function(thread, point, atom) { + var predicate = atom.args[0]; + var module_id; + if(pl.type.is_term(predicate) && predicate.indicator === ":/2") { + if(!pl.type.is_atom(predicate.args[0])) { + thread.throw_error(pl.error.type("module", predicate.args[0], atom.indicator)); + return; + } + module_id = predicate.args[0].id; + predicate = predicate.args[1]; + } else { + module_id = "user"; + } + if(pl.type.is_variable(predicate) || pl.type.is_term(predicate) && predicate.indicator === "//2" + && (pl.type.is_variable(predicate.args[0]) || pl.type.is_variable(predicate.args[1]))) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_term(predicate) || predicate.indicator !== "//2") { + thread.throw_error(pl.error.type("predicate_indicator", predicate, atom.indicator)); + } else if(!pl.type.is_atom(predicate.args[0])) { + thread.throw_error(pl.error.type("atom", predicate.args[0], atom.indicator)); + } else if(!pl.type.is_integer(predicate.args[1])) { + thread.throw_error(pl.error.type("integer", predicate.args[1], atom.indicator)); + } else if(predicate.args[1].value < 0) { + thread.throw_error(pl.error.domain("not_less_than_zero", predicate.args[1], atom.indicator)); + } else if(pl.type.is_number(thread.get_flag("max_arity")) && predicate.args[1].value > thread.get_flag("max_arity").value) { + thread.throw_error(pl.error.representation("max_arity", atom.indicator)); + } else { + var get_module = thread.session.modules[module_id]; + if(pl.type.is_module(get_module)) { + var indicator = predicate.args[0].id + "/" + predicate.args[1].value; + if(thread.is_public_predicate(indicator, module_id) + && indicator !== ",/2" + && !thread.session.modules.system.rules.hasOwnProperty(indicator)) { + delete get_module.rules[indicator]; + delete get_module.indexed_clauses[indicator]; + delete get_module.non_indexable_clauses[indicator]; + delete get_module.public_predicates[indicator]; + delete get_module.multifile_predicates[indicator]; + thread.success(point); + } else { + thread.throw_error(pl.error.permission("modify", "static_procedure", atom.args[0], atom.indicator)); + } + } else { + thread.success(point); + } + } + }, + + // ATOM PROCESSING + + // atom_length/2 + "atom_length/2": function( thread, point, atom ) { + if( pl.type.is_variable( atom.args[0] ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atom( atom.args[0] ) ) { + thread.throw_error( pl.error.type( "atom", atom.args[0], atom.indicator ) ); + } else if( !pl.type.is_variable( atom.args[1] ) && !pl.type.is_integer( atom.args[1] ) ) { + thread.throw_error( pl.error.type( "integer", atom.args[1], atom.indicator ) ); + } else if( pl.type.is_integer( atom.args[1] ) && atom.args[1].value < 0 ) { + thread.throw_error( pl.error.domain( "not_less_than_zero", atom.args[1], atom.indicator ) ); + } else { + var length = new Num( stringLength(atom.args[0].id), false ); + thread.prepend( [new State( point.goal.replace( new Term( "=", [length, atom.args[1]] ) ), point.substitution, point )] ); + } + }, + + // atom_concat/3 + "atom_concat/3": function( thread, point, atom ) { + var str, goal, start = atom.args[0], end = atom.args[1], whole = atom.args[2]; + if( pl.type.is_variable( whole ) && (pl.type.is_variable( start ) || pl.type.is_variable( end )) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( start ) && !pl.type.is_atom( start ) ) { + thread.throw_error( pl.error.type( "atom", start, atom.indicator ) ); + } else if( !pl.type.is_variable( end ) && !pl.type.is_atom( end ) ) { + thread.throw_error( pl.error.type( "atom", end, atom.indicator ) ); + } else if( !pl.type.is_variable( whole ) && !pl.type.is_atom( whole ) ) { + thread.throw_error( pl.error.type( "atom", whole, atom.indicator ) ); + } else { + var v1 = pl.type.is_variable( start ); + var v2 = pl.type.is_variable( end ); + //var v3 = pl.type.is_variable( whole ); + if( !v1 && !v2 ) { + goal = new Term( "=", [whole, new Term( start.id + end.id )] ); + thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); + } else if( v1 && !v2 ) { + str = whole.id.substr( 0, whole.id.length - end.id.length ); + if( str + end.id === whole.id ) { + goal = new Term( "=", [start, new Term( str )] ); + thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); + } + } else if( v2 && !v1 ) { + str = whole.id.substr( start.id.length ); + if( start.id + str === whole.id ) { + goal = new Term( "=", [end, new Term( str )] ); + thread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] ); + } + } else { + var states = []; + for( var i = 0; i <= whole.id.length; i++ ) { + var atom1 = new Term( whole.id.substr( 0, i ) ); + var atom2 = new Term( whole.id.substr( i ) ); + goal = new Term( ",", [new Term( "=", [atom1, start] ), new Term( "=", [atom2, end] )] ); + states.push( new State( point.goal.replace( goal ), point.substitution, point ) ); + } + thread.prepend( states ); + } + } + }, + + // sub_atom/5 + "sub_atom/5": function( thread, point, atom ) { + var i, atom1 = atom.args[0], before = atom.args[1], length = atom.args[2], after = atom.args[3], subatom = atom.args[4]; + if( pl.type.is_variable( atom1 ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atom( atom1 ) ) { + thread.throw_error( pl.error.type( "atom", atom1, atom.indicator ) ); + } else if( !pl.type.is_variable( before ) && !pl.type.is_integer( before ) ) { + thread.throw_error( pl.error.type( "integer", before, atom.indicator ) ); + } else if( !pl.type.is_variable( length ) && !pl.type.is_integer( length ) ) { + thread.throw_error( pl.error.type( "integer", length, atom.indicator ) ); + } else if( !pl.type.is_variable( after ) && !pl.type.is_integer( after ) ) { + thread.throw_error( pl.error.type( "integer", after, atom.indicator ) ); + } else if( pl.type.is_integer( before ) && before.value < 0 ) { + thread.throw_error( pl.error.domain( "not_less_than_zero", before, atom.indicator ) ); + } else if( pl.type.is_integer( length ) && length.value < 0 ) { + thread.throw_error( pl.error.domain( "not_less_than_zero", length, atom.indicator ) ); + } else if( pl.type.is_integer( after ) && after.value < 0 ) { + thread.throw_error( pl.error.domain( "not_less_than_zero", after, atom.indicator ) ); + } else if( !pl.type.is_variable( subatom ) && !pl.type.is_atom( subatom ) ) { + thread.throw_error( pl.error.type( "atom", subatom, atom.indicator ) ); + } else { + var bs = [], ls = [], as = []; + if( pl.type.is_variable( before ) ) { + for( i = 0; i <= atom1.id.length; i++ ) { + bs.push( i ); + } + } else { + bs.push( before.value ); + } + if( pl.type.is_variable( length ) ) { + for( i = 0; i <= atom1.id.length; i++ ) { + ls.push( i ); + } + } else { + ls.push( length.value ); + } + if( pl.type.is_variable( after ) ) { + for( i = 0; i <= atom1.id.length; i++ ) { + as.push( i ); + } + } else { + as.push( after.value ); + } + var states = []; + for( var _i in bs ) { + if(!bs.hasOwnProperty(_i)) continue; + i = bs[_i]; + for( var _j in ls ) { + if(!ls.hasOwnProperty(_j)) continue; + var j = ls[_j]; + var k = atom1.id.length - i - j; + if( indexOf( as, k ) !== -1 ) { + if( i+j+k === atom1.id.length ) { + var str = atom1.id.substr( i, j ); + if( atom1.id === atom1.id.substr( 0, i ) + str + atom1.id.substr( i+j, k ) ) { + var pl1 = new Term( "=", [new Term( str ), subatom] ); + var pl2 = new Term( "=", [before, new Num( i )] ); + var pl3 = new Term( "=", [length, new Num( j )] ); + var pl4 = new Term( "=", [after, new Num( k )] ); + var goal = new Term( ",", [ new Term( ",", [ new Term( ",", [pl2, pl3] ), pl4] ), pl1] ); + states.push( new State( point.goal.replace( goal ), point.substitution, point ) ); + } + } + } + } + } + thread.prepend( states ); + } + }, + + // atom_chars/2 + "atom_chars/2": function( thread, point, atom ) { + var atom1 = atom.args[0], list = atom.args[1]; + if( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) { + thread.throw_error( pl.error.type( "atom", atom1, atom.indicator ) ); + } else { + if( !pl.type.is_variable( atom1 ) ) { + if(!pl.type.is_variable(list)) { + var pointer = list; + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + if(!pl.type.is_character(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) { + thread.throw_error(pl.error.type("character", pointer.args[0], atom.indicator)); + return; + } + pointer = pointer.args[1]; + } + } + var list1 = new Term( "[]" ); + var unilen = stringLength(atom1.id); + for( var i = unilen-1; i >= 0; i-- ) { + list1 = new Term( ".", [new Term( atom1.id.charAt( i ) ), list1] ); + } + thread.prepend( [new State( point.goal.replace( new Term( "=", [list, list1] ) ), point.substitution, point )] ); + } else { + var pointer = list; + var v = pl.type.is_variable( atom1 ); + var str = ""; + while( pointer.indicator === "./2" ) { + if( !pl.type.is_character( pointer.args[0] ) ) { + if( pl.type.is_variable( pointer.args[0] ) && v ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( !pl.type.is_variable( pointer.args[0] ) ) { + thread.throw_error( pl.error.type( "character", pointer.args[0], atom.indicator ) ); + return; + } + } else { + str += pointer.args[0].id; + } + pointer = pointer.args[1]; + } + if( pl.type.is_variable( pointer ) && v ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [new Term( str ), atom1] ) ), point.substitution, point )] ); + } + } + } + }, + + // atom_codes/2 + "atom_codes/2": function( thread, point, atom ) { + var atom1 = atom.args[0], list = atom.args[1]; + if( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) { + thread.throw_error( pl.error.type( "atom", atom1, atom.indicator ) ); + } else { + if( !pl.type.is_variable( atom1 ) ) { + if(!pl.type.is_variable(list)) { + var pointer = list; + while(pl.type.is_term(pointer) && pointer.indicator === "./2") { + if(!pl.type.is_character_code(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) { + thread.throw_error(pl.error.type("integer", pointer.args[0], atom.indicator)); + return; + } + pointer = pointer.args[1]; + } + } + var list1 = new Term( "[]" ); + var unilen = stringLength(atom1.id); + for( var i = unilen-1; i >= 0; i-- ) { + list1 = new Term( ".", [new Num( codePointAt(atom1.id,i), false ), list1] ); + } + thread.prepend( [new State( point.goal.replace( new Term( "=", [list, list1] ) ), point.substitution, point )] ); + } else { + var pointer = list; + var v = pl.type.is_variable( atom1 ); + var str = ""; + while( pointer.indicator === "./2" ) { + if( !pl.type.is_character_code( pointer.args[0] ) ) { + if( pl.type.is_variable( pointer.args[0] ) && v ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( !pl.type.is_variable( pointer.args[0] ) ) { + thread.throw_error( pl.error.representation( "character_code", atom.indicator ) ); + return; + } + } else { + str += fromCodePoint( pointer.args[0].value ); + } + pointer = pointer.args[1]; + } + if( pl.type.is_variable( pointer ) && v ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [new Term( str ), atom1] ) ), point.substitution, point )] ); + } + } + } + }, + + // char_code/2 + "char_code/2": function( thread, point, atom ) { + var char = atom.args[0], code = atom.args[1]; + if( pl.type.is_variable( char ) && pl.type.is_variable( code ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( char ) && !pl.type.is_character( char ) ) { + thread.throw_error( pl.error.type( "character", char, atom.indicator ) ); + } else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) { + thread.throw_error( pl.error.type( "integer", code, atom.indicator ) ); + } else if( !pl.type.is_variable( code ) && !pl.type.is_character_code( code ) ) { + thread.throw_error( pl.error.representation( "character_code", atom.indicator ) ); + } else { + if( pl.type.is_variable( code ) ) { + var code1 = new Num( codePointAt(char.id,0 ), false ); + thread.prepend( [new State( point.goal.replace( new Term( "=", [code1, code] ) ), point.substitution, point )] ); + } else { + var char1 = new Term( fromCodePoint( code.value ) ); + thread.prepend( [new State( point.goal.replace( new Term( "=", [char1, char] ) ), point.substitution, point )] ); + } + } + }, + + // number_chars/2 + "number_chars/2": function( thread, point, atom ) { + var str, num = atom.args[0], list = atom.args[1]; + if( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) { + thread.throw_error( pl.error.type( "number", num, atom.indicator ) ); + } else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + } else { + var isvar = pl.type.is_variable( num ); + if( !pl.type.is_variable( list ) ) { + var pointer = list; + var total = true; + str = ""; + while( pointer.indicator === "./2" ) { + if( !pl.type.is_character( pointer.args[0] ) ) { + if( pl.type.is_variable( pointer.args[0] ) ) { + total = false; + } else if( !pl.type.is_variable( pointer.args[0] ) ) { + thread.throw_error( pl.error.type( "character", pointer.args[0], atom.indicator ) ); + return; + } + } else { + str += pointer.args[0].id; + } + pointer = pointer.args[1]; + } + total = total && pl.type.is_empty_list( pointer ); + if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + return; + } + if( !total && isvar ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( total ) { + if( pl.type.is_variable( pointer ) && isvar ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else { + var expr = thread.parse( str ); + var num2 = expr.value; + if( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) { + thread.throw_error( pl.error.syntax_by_predicate( "parseable_number", atom.indicator ) ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [num, num2] ) ), point.substitution, point )] ); + } + return; + } + } + } + if( !isvar ) { + str = num.toString(); + var list2 = new Term( "[]" ); + for( var i = str.length - 1; i >= 0; i-- ) { + list2 = new Term( ".", [ new Term( str.charAt( i ) ), list2 ] ); + } + thread.prepend( [new State( point.goal.replace( new Term( "=", [list, list2] ) ), point.substitution, point )] ); + } + } + }, + + // number_codes/2 + "number_codes/2": function( thread, point, atom ) { + var str, num = atom.args[0], list = atom.args[1]; + if( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) { + thread.throw_error( pl.error.type( "number", num, atom.indicator ) ); + } else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + } else { + var isvar = pl.type.is_variable( num ); + if( !pl.type.is_variable( list ) ) { + var pointer = list; + var total = true; + str = ""; + while( pointer.indicator === "./2" ) { + if( !pl.type.is_character_code( pointer.args[0] ) ) { + if( pl.type.is_variable( pointer.args[0] ) ) { + total = false; + } else if( !pl.type.is_variable( pointer.args[0] ) ) { + thread.throw_error( pl.error.representation( "character_code", atom.indicator ) ); + return; + } + } else { + str += fromCodePoint( pointer.args[0].value ); + } + pointer = pointer.args[1]; + } + total = total && pl.type.is_empty_list( pointer ); + if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + return; + } + if( !total && isvar ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( total ) { + if( pl.type.is_variable( pointer ) && isvar ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else { + var expr = thread.parse( str ); + var num2 = expr.value; + if( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) { + thread.throw_error( pl.error.syntax_by_predicate( "parseable_number", atom.indicator ) ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [num, num2] ) ), point.substitution, point )] ); + } + return; + } + } + } + if( !isvar ) { + str = num.toString(); + var list2 = new Term( "[]" ); + for( var i = str.length - 1; i >= 0; i-- ) { + list2 = new Term( ".", [ new Num( codePointAt(str,i), false ), list2 ] ); + } + thread.prepend( [new State( point.goal.replace( new Term( "=", [list, list2] ) ), point.substitution, point )] ); + } + } + }, + + // upcase_atom/2 + "upcase_atom/2": function( thread, point, atom ) { + var original = atom.args[0], upcase = atom.args[1]; + if( pl.type.is_variable( original ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atom( original ) ) { + thread.throw_error( pl.error.type( "atom", original, atom.indicator ) ); + } else if( !pl.type.is_variable( upcase ) && !pl.type.is_atom( upcase ) ) { + thread.throw_error( pl.error.type( "atom", upcase, atom.indicator ) ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [upcase, new Term( original.id.toUpperCase(), [] )] ) ), point.substitution, point )] ); + } + }, + + // downcase_atom/2 + "downcase_atom/2": function( thread, point, atom ) { + var original = atom.args[0], downcase = atom.args[1]; + if( pl.type.is_variable( original ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atom( original ) ) { + thread.throw_error( pl.error.type( "atom", original, atom.indicator ) ); + } else if( !pl.type.is_variable( downcase ) && !pl.type.is_atom( downcase ) ) { + thread.throw_error( pl.error.type( "atom", downcase, atom.indicator ) ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [downcase, new Term( original.id.toLowerCase(), [] )] ) ), point.substitution, point )] ); + } + }, + + // atomic_concat/3 + "atomic_concat/3": function( thread, point, atom ) { + var atomic1 = atom.args[0], atomic2 = atom.args[1], concat = atom.args[2]; + if( pl.type.is_variable( atomic1 ) || pl.type.is_variable( atomic2 ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atomic( atomic1 ) ) { + thread.throw_error( pl.error.type( "atomic", atomic1, atom.indicator ) ); + } else if( !pl.type.is_atomic( atomic2 ) ) { + thread.throw_error( pl.error.type( "atomic", atomic2, atom.indicator ) ); + } else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) { + thread.throw_error( pl.error.type( "atom", concat, atom.indicator ) ); + } else { + var id = ""; + if( pl.type.is_atom( atomic1 ) ) { + id += atomic1.id; + } else { + id += "" + atomic1.value; + } + if( pl.type.is_atom( atomic2 ) ) { + id += atomic2.id; + } else { + id += "" + atomic2.value; + } + var atom = new Term(id, []); + thread.prepend( [new State( point.goal.replace( new Term( "=", [atom, concat] ) ), point.substitution, point )] ); + } + }, + + // atomic_list_concat/2 + "atomic_list_concat/2": function( thread, point, atom ) { + var list = atom.args[0], concat = atom.args[1]; + thread.prepend( [new State( point.goal.replace( new Term( "atomic_list_concat", [list, new Term( "", [] ), concat] ) ), point.substitution, point )] ); + }, + + // atomic_list_concat/3 + "atomic_list_concat/3": function( thread, point, atom ) { + var list = atom.args[0], separator = atom.args[1], concat = atom.args[2]; + if( pl.type.is_variable( separator ) || pl.type.is_variable( list ) && pl.type.is_variable( concat ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + } else if( !pl.type.is_atom( separator ) && !pl.type.is_number( separator ) ) { + thread.throw_error( pl.error.type( "atomic", separator, atom.indicator ) ); + } else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) { + thread.throw_error( pl.error.type( "atom", concat, atom.indicator ) ); + } else { + var id = ""; + var pointer = list; + while( pl.type.is_term( pointer ) && pointer.indicator === "./2" ) { + if( pl.type.is_variable( pointer.args[0] ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( !pl.type.is_atom( pointer.args[0] ) && !pl.type.is_number( pointer.args[0] ) ) { + thread.throw_error( pl.error.type( "atomic", pointer.args[0], atom.indicator ) ); + return; + } + if( id !== "" ) + id += separator.id; + if( pl.type.is_atom( pointer.args[0] ) ) + id += pointer.args[0].id; + else + id += "" + pointer.args[0].value; + pointer = pointer.args[1]; + } + id = new Term( id, [] ); + if( pl.type.is_variable( pointer ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_term( pointer ) || pointer.indicator !== "[]/0" ) { + thread.throw_error( pl.error.type( "list", list, atom.indicator ) ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [id, concat] ) ), point.substitution, point )] ); + } + } + }, + + // TERM COMPARISON + + "@=/2": function( thread, point, atom ) { + if( pl.compare( atom.args[0], atom.args[1] ) > 0 ) { + thread.success( point ); + } + }, + + "@>=/2": function( thread, point, atom ) { + if( pl.compare( atom.args[0], atom.args[1] ) >= 0 ) { + thread.success( point ); + } + }, + + "compare/3": function( thread, point, atom ) { + var order = atom.args[0], left = atom.args[1], right = atom.args[2]; + if( !pl.type.is_variable( order ) && !pl.type.is_atom( order ) ) { + thread.throw_error( pl.error.type( "atom", order, atom.indicator ) ); + } else if( pl.type.is_atom( order ) && ["<", ">", "="].indexOf( order.id ) === -1 ) { + thread.throw_error( pl.error.domain( "order", order, atom.indicator ) ); + } else { + var compare = pl.compare( left, right ); + compare = compare === 0 ? "=" : (compare === -1 ? "<" : ">"); + thread.prepend( [new State( point.goal.replace( new Term( "=", [order, new Term( compare, [] )] ) ), point.substitution, point )] ); + } + }, + + // EVALUATION + + // is/2 + "is/2": function( thread, point, atom ) { + var op = atom.args[1].interpret( thread ); + if( !pl.type.is_number( op ) ) { + thread.throw_error( op ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [atom.args[0], op], atom.indicator ) ), point.substitution, point )] ); + } + }, + + // between/3 + "between/3": function( thread, point, atom ) { + var lower = atom.args[0], upper = atom.args[1], bet = atom.args[2]; + if( pl.type.is_variable( lower ) || pl.type.is_variable( upper ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_integer( lower ) ) { + thread.throw_error( pl.error.type( "integer", lower, atom.indicator ) ); + } else if( !pl.type.is_integer( upper ) ) { + thread.throw_error( pl.error.type( "integer", upper, atom.indicator ) ); + } else if( !pl.type.is_variable( bet ) && !pl.type.is_integer( bet ) ) { + thread.throw_error( pl.error.type( "integer", bet, atom.indicator ) ); + } else { + if( pl.type.is_variable( bet ) ) { + if( lower.value <= upper.value ) { + var states = [new State( point.goal.replace( new Term( "=", [bet, lower] ) ), point.substitution, point )]; + states.push( new State( point.goal.replace( new Term( "between", [new Num( lower.value+1, false ), upper, bet] ) ), point.substitution, point ) ); + thread.prepend( states ); + } + } else if( lower.value <= bet.value && upper.value >= bet.value ) { + thread.success( point ); + } + } + }, + + // succ/2 + "succ/2": function( thread, point, atom ) { + var n = atom.args[0], m = atom.args[1]; + if( pl.type.is_variable( n ) && pl.type.is_variable( m ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( n ) && !pl.type.is_integer( n ) ) { + thread.throw_error( pl.error.type( "integer", n, atom.indicator ) ); + } else if( !pl.type.is_variable( m ) && !pl.type.is_integer( m ) ) { + thread.throw_error( pl.error.type( "integer", m, atom.indicator ) ); + } else if( !pl.type.is_variable( n ) && n.value < 0 ) { + thread.throw_error( pl.error.domain( "not_less_than_zero", n, atom.indicator ) ); + } else if( !pl.type.is_variable( m ) && m.value < 0 ) { + thread.throw_error( pl.error.domain( "not_less_than_zero", m, atom.indicator ) ); + } else { + if( pl.type.is_variable( m ) || m.value > 0 ) { + if( pl.type.is_variable( n ) ) { + thread.prepend( [new State( point.goal.replace( new Term( "=", [n, new Num( m.value-1, false )] ) ), point.substitution, point )] ); + } else { + thread.prepend( [new State( point.goal.replace( new Term( "=", [m, new Num( n.value+1, false )] ) ), point.substitution, point )] ); + } + } + } + }, + + // =:=/2 + "=:=/2": function( thread, point, atom ) { + var cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] ); + if( pl.type.is_term( cmp ) ) { + thread.throw_error( cmp ); + } else if( cmp === 0 ) { + thread.success( point ); + } + }, + + // =\=/2 + "=\\=/2": function( thread, point, atom ) { + var cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] ); + if( pl.type.is_term( cmp ) ) { + thread.throw_error( cmp ); + } else if( cmp !== 0 ) { + thread.success( point ); + } + }, + + // /2 + ">/2": function( thread, point, atom ) { + var cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] ); + if( pl.type.is_term( cmp ) ) { + thread.throw_error( cmp ); + } else if( cmp > 0 ) { + thread.success( point ); + } + }, + + // >=/2 + ">=/2": function( thread, point, atom ) { + var cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] ); + if( pl.type.is_term( cmp ) ) { + thread.throw_error( cmp ); + } else if( cmp >= 0 ) { + thread.success( point ); + } + }, + + // TYPE TEST + + // var/1 + "var/1": function( thread, point, atom ) { + if( pl.type.is_variable( atom.args[0] ) ) { + thread.success( point ); + } + }, + + // atom/1 + "atom/1": function( thread, point, atom ) { + if( pl.type.is_atom( atom.args[0] ) ) { + thread.success( point ); + } + }, + + // atomic/1 + "atomic/1": function( thread, point, atom ) { + if( pl.type.is_atomic( atom.args[0] ) ) { + thread.success( point ); + } + }, + + // compound/1 + "compound/1": function( thread, point, atom ) { + if( pl.type.is_compound( atom.args[0] ) ) { + thread.success( point ); + } + }, + + // integer/1 + "integer/1": function( thread, point, atom ) { + if( pl.type.is_integer( atom.args[0] ) ) { + thread.success( point ); + } + }, + + // float/1 + "float/1": function( thread, point, atom ) { + if( pl.type.is_float( atom.args[0] ) ) { + thread.success( point ); + } + }, + + // number/1 + "number/1": function( thread, point, atom ) { + if( pl.type.is_number( atom.args[0] ) ) { + thread.success( point ); + } + }, + + // nonvar/1 + "nonvar/1": function( thread, point, atom ) { + if( !pl.type.is_variable( atom.args[0] ) ) { + thread.success( point ); + } + }, + + // ground/1 + "ground/1": function( thread, point, atom ) { + if( atom.variables().length === 0 ) { + thread.success( point ); + } + }, + + // acyclic_term/1 + "acyclic_term/1": function( thread, point, atom ) { + var test = point.substitution.apply( point.substitution ); + var variables = atom.args[0].variables(); + for( var i = 0; i < variables.length; i++ ) + if( point.substitution.links[variables[i]] !== undefined && !point.substitution.links[variables[i]].equals( test.links[variables[i]] ) ) + return; + thread.success( point ); + }, + + // callable/1 + "callable/1": function( thread, point, atom ) { + var callable = atom.args[0]; + if(pl.type.is_term(callable)) { + thread.success( point ); + } + }, + + // is_list/1 + "is_list/1": function( thread, point, atom ) { + var list = atom.args[0]; + while( pl.type.is_term( list ) && list.indicator === "./2" ) + list = list.args[1]; + if( pl.type.is_term( list ) && list.indicator === "[]/0" ) + thread.success( point ); + }, + + + + // STREAM SELECTION AND CONTROL + + // current_input/1 + "current_input/1": function( thread, point, atom ) { + var stream = atom.args[0]; + if(!pl.type.is_variable(stream) + && (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias) + && !thread.get_stream_by_alias(stream.id)) + && (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) { + thread.throw_error( pl.error.domain("stream", stream, atom.indicator) ); + } else { + if(pl.type.is_atom(stream)) + stream = thread.get_stream_by_alias(stream.id); + thread.prepend( [new State( + point.goal.replace(new Term("=", [stream, thread.get_current_input()])), + point.substitution, + point) + ] ); + } + }, + + // current_output/1 + "current_output/1": function( thread, point, atom ) { + var stream = atom.args[0]; + if(!pl.type.is_variable(stream) + && (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias) + && !thread.get_stream_by_alias(stream.id)) + && (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) { + thread.throw_error( pl.error.domain("stream", stream, atom.indicator) ); + } else { + if(pl.type.is_atom(stream)) + stream = thread.get_stream_by_alias( stream.id ); + thread.prepend( [new State( + point.goal.replace(new Term("=", [stream, thread.get_current_output()])), + point.substitution, + point) + ] ); + } + }, + + // set_input/1 + "set_input/1": function( thread, point, atom ) { + var input = atom.args[0]; + var stream = pl.type.is_stream( input ) ? input : thread.get_stream_by_alias( input.id ); + if( pl.type.is_variable( input ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_stream( input ) && !pl.type.is_atom( input ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", input, atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(input.alias) + && !thread.get_stream_by_alias(input.id) ) { + thread.throw_error( pl.error.existence( "stream", input, atom.indicator ) ); + } else if( stream.output === true ) { + thread.throw_error( pl.error.permission( "input", "stream", input, atom.indicator ) ); + } else { + thread.set_current_input( stream ); + thread.success( point ); + } + }, + + // set_output/1 + "set_output/1": function( thread, point, atom ) { + var output = atom.args[0]; + var stream = pl.type.is_stream( output ) ? output : thread.get_stream_by_alias( output.id ); + if( pl.type.is_variable( output ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_stream( output ) && !pl.type.is_atom( output ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", output, atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(output.alias) + && !thread.get_stream_by_alias(output.id) ) { + thread.throw_error( pl.error.existence( "stream", output, atom.indicator ) ); + } else if( stream.input === true ) { + thread.throw_error( pl.error.permission( "output", "stream", output, atom.indicator ) ); + } else { + thread.set_current_output( stream ); + thread.success( point ); + } + }, + + // open/3 + "open/3": function( thread, point, atom ) { + var dest = atom.args[0], mode = atom.args[1], stream = atom.args[2]; + thread.prepend( [new State( + point.goal.replace(new Term("open", [dest, mode, stream, new Term("[]", [])])), + point.substitution, + point + )] ); + }, + + // open/4 + "open/4": function( thread, point, atom ) { + var dest = atom.args[0], mode = atom.args[1], stream = atom.args[2], options = atom.args[3]; + if( pl.type.is_variable( dest ) || pl.type.is_variable( mode ) || pl.type.is_variable( options ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( mode ) && !pl.type.is_atom( mode ) ) { + thread.throw_error( pl.error.type( "atom", mode, atom.indicator ) ); + } else if( !pl.type.is_list( options ) ) { + thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); + } else if( !pl.type.is_variable( stream ) ) { + thread.throw_error( pl.error.uninstantiation( stream, atom.indicator ) ); + } else if( !pl.type.is_atom( dest ) && !pl.type.is_streamable( dest ) ) { + thread.throw_error( pl.error.domain( "source_sink", dest, atom.indicator ) ); + } else if( !pl.type.is_io_mode( mode ) ) { + thread.throw_error( pl.error.domain( "io_mode", mode, atom.indicator ) ); + } else { + var obj_options = {}; + var pointer = options; + var property; + while( pl.type.is_term(pointer) && pointer.indicator === "./2" ) { + property = pointer.args[0]; + if( pl.type.is_variable( property ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( !pl.type.is_stream_option( property ) ) { + thread.throw_error( pl.error.domain( "stream_option", property, atom.indicator ) ); + return; + } + obj_options[property.id] = property.args[0].id; + pointer = pointer.args[1]; + } + if( pointer.indicator !== "[]/0" ) { + if( pl.type.is_variable( pointer ) ) + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + else + thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); + return; + } else { + var alias = obj_options["alias"]; + if( alias && thread.get_stream_by_alias(alias) ) { + thread.throw_error( pl.error.permission( "open", "source_sink", new Term("alias", [new Term(alias, [])]), atom.indicator ) ); + return; + } + if( !obj_options["type"] ) + obj_options["type"] = "text"; + var file; + if( pl.type.is_atom( dest ) ) + file = thread.file_system_open( dest.id, obj_options["type"], mode.id ); + else + file = dest.stream( obj_options["type"], mode.id ); + if( file === false ) { + thread.throw_error( pl.error.permission( "open", "source_sink", dest, atom.indicator ) ); + return; + } else if( file === null ) { + thread.throw_error( pl.error.existence( "source_sink", dest, atom.indicator ) ); + return; + } + var newstream = new Stream( + file, mode.id, + obj_options["alias"], + obj_options["type"], + obj_options["reposition"] === "true", + obj_options["eof_action"] ); + if( alias ) + thread.session.streams[alias] = newstream; + else + thread.session.streams[newstream.id] = newstream; + thread.prepend( [new State( + point.goal.replace( new Term( "=", [stream, newstream] ) ), + point.substitution, + point + )] ); + } + } + }, + + // close/1 + "close/1": function( thread, point, atom ) { + var stream = atom.args[0]; + thread.prepend( [new State( + point.goal.replace(new Term("close", [stream, new Term("[]", [])])), + point.substitution, + point + )] ); + }, + + // close/2 + "close/2": function( thread, point, atom ) { + var stream = atom.args[0], options = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_list( options ) ) { + thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else { + // Get options + var obj_options = {}; + var pointer = options; + var property; + while( pl.type.is_term(pointer) && pointer.indicator === "./2" ) { + property = pointer.args[0]; + if( pl.type.is_variable( property ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( !pl.type.is_close_option( property ) ) { + thread.throw_error( pl.error.domain( "close_option", property, atom.indicator ) ); + return; + } + obj_options[property.id] = property.args[0].id === "true"; + pointer = pointer.args[1]; + } + if( pointer.indicator !== "[]/0" ) { + if( pl.type.is_variable( pointer ) ) + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + else + thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); + return; + } else { + if(stream2 === thread.session.standard_input || stream2 === thread.session.standard_output || stream2 === thread.session.standard_error) { + thread.success( point ); + return; + } else if( stream2 === thread.session.current_input ) { + thread.session.current_input = thread.session.standard_input; + } else if( stream2 === thread.session.current_output ) { + thread.session.current_output = thread.session.standard_output; + } + if( stream2.alias !== null && stream2.alias !== undefined ) + delete thread.session.streams[stream2.alias]; + else + delete thread.session.streams[stream2.id]; + if( stream2.output ) + stream2.stream.flush(); + var closed = stream2.stream.close(); + stream2.stream = null; + if( obj_options.force === true || closed === true ) { + thread.success( point ); + } + } + } + }, + + // flush_output/0 + "flush_output/0": [ + new Rule(new Term("flush_output", []), new Term(",", [new Term("current_output", [new Var("S")]),new Term("flush_output", [new Var("S")])])) + ], + + // flush_output/1 + "flush_output/1": function( thread, point, atom ) { + var stream = atom.args[0]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.input === true ) { + thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); + } else { + stream2.stream.flush(); + thread.success( point ); + } + }, + + // stream_property/2 + "stream_property/2": function( thread, point, atom ) { + var stream = atom.args[0], property = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) ) { + thread.throw_error( pl.error.domain( "stream", stream, atom.indicator ) ); + } else if( !pl.type.is_variable( stream ) && (!pl.type.is_stream( stream2 ) || stream2.stream === null) ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( !pl.type.is_variable( property ) && !pl.type.is_stream_property( property ) ) { + thread.throw_error( pl.error.domain( "stream_property", property, atom.indicator ) ); + } else { + var streams = []; + var states = []; + var propvar = pl.type.is_variable(property); + if( !pl.type.is_variable( stream ) ) + streams.push( stream2 ); + else + for( var key in thread.session.streams ) + streams.push( thread.session.streams[key] ); + for( var i = 0; i < streams.length; i++ ) { + var properties = []; + // file_name/1 + if( (propvar || property.indicator === "file_name/1") && streams[i].filename ) + properties.push( new Term( "file_name", [new Term(streams[i].file_name, [])] ) ); + // mode/1 + if(propvar || property.indicator === "mode/1") + properties.push( new Term( "mode", [new Term(streams[i].mode, [])] ) ); + // input/0 or output/0 + if(propvar || property.indicator === "input/0" || property.indicator === "output/0") + properties.push( new Term( streams[i].input ? "input" : "output", [] ) ); + // alias/1 + if( (propvar || property.indicator === "alias/1") && streams[i].alias ) + properties.push( new Term( "alias", [new Term(streams[i].alias, [])] ) ); + // position/1 + if(propvar || property.indicator === "position/1") + properties.push( new Term( "position", [ + new Term("position", [ + new Num(streams[i].char_count, false), + new Num(streams[i].line_count, false), + new Num(streams[i].line_position, false) + ]) + ] ) ); + // end_of_stream/1 + if(propvar || property.indicator === "end_of_stream/1") + properties.push( new Term( "end_of_stream", [new Term( + streams[i].position === "end_of_stream" || streams[i].stream.eof && streams[i].stream.eof(streams[i].position) ? "at" : + streams[i].position === "past_end_of_stream" ? "past" : + "not", [])] ) ); + // eof_action/1 + if(propvar || property.indicator === "eof_action/1") + properties.push( new Term( "eof_action", [new Term(streams[i].eof_action, [])] ) ); + // reposition/1 + if(propvar || property.indicator === "reposition/1") + properties.push( new Term( "reposition", [new Term(streams[i].reposition ? "true" : "false", [])] ) ); + // type/1 + if(propvar || property.indicator === "type/1") + properties.push( new Term( "type", [new Term(streams[i].type, [])] ) ); + for( var j = 0; j < properties.length; j++ ) { + states.push( new State( + point.goal.replace( new Term( ",", [ + new Term("=", [pl.type.is_variable( stream ) ? stream : stream2, streams[i]]), + new Term("=", [property, properties[j]])]) ), + point.substitution, + point + ) ); + } + } + thread.prepend( states ); + } + }, + + // stream_position_data + "stream_position_data/3": function(thread, point, atom) { + var field = atom.args[0], position = atom.args[1], value = atom.args[2]; + if(pl.type.is_variable(position)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_term(position) || position.indicator !== "position/3") { + thread.throw_error(pl.error.domain("stream_position", position, atom.indicator)); + } else if(!pl.type.is_variable(field) && !pl.type.is_atom(field)) { + thread.throw_error(pl.error.type("atom", field, atom.indicator)); + } else if(!pl.type.is_variable(value) && !pl.type.is_integer(value)) { + thread.throw_error(pl.error.type("integer", value, atom.indicator)); + } else { + var fields = ["char_count", "line_count", "line_position"]; + var states = []; + var data_pos = {char_count: 0, line_count: 1, line_position: 2}; + if(pl.type.is_variable(field)) { + for(var i = 0; i < fields.length; i++) { + states.push(new State(point.goal.replace( + new Term(",", [ + new Term("=", [new Term(fields[i]), field]), + new Term("=", [value, position.args[data_pos[fields[i]]]]) + ]) + ), point.substitution, point)); + } + } else if(data_pos.hasOwnProperty(field.id)) { + states.push(new State(point.goal.replace( + new Term("=", [value, position.args[data_pos[field.id]]]) + ), point.substitution, point)); + } + thread.prepend(states); + } + }, + + // at_end_of_stream/0 + "at_end_of_stream/0": [ + new Rule(new Term("at_end_of_stream", []), new pl.type.Term(",", [new Term("current_input", [new Var("S")]),new Term(",", [new Term("stream_property", [new Var("S"),new Term("end_of_stream", [new Var("E")])]),new Term(",", [new Term("!", []),new Term(";", [new Term("=", [new Var("E"),new Term("at", [])]),new Term("=", [new Var("E"),new Term("past", [])])])])])])) + ], + + // at_end_of_stream/1 + "at_end_of_stream/1": function( thread, point, atom ) { + var stream = atom.args[0]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else { + var e = thread.next_free_variable(); + thread.prepend( [new State( + point.goal.replace( + new Term(",", [new Term("stream_property", [stream2,new Term("end_of_stream", [e])]), + new Term(",", [new Term("!", []),new Term(";", [new Term("=", [e,new Term("at", [])]), + new Term("=", [e,new Term("past", [])])])])]) + ), + point.substitution, + point + )] ); + } + }, + + // set_stream_position/2 + "set_stream_position/2": function( thread, point, atom ) { + var stream = atom.args[0], position = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) || pl.type.is_variable( position ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( !pl.type.is_stream_position( position ) ) { + thread.throw_error( pl.error.domain( "stream_position", position, atom.indicator ) ); + } else if( stream2.reposition === false ) { + thread.throw_error( pl.error.permission( "reposition", "stream", stream, atom.indicator ) ); + } else { + if( position.indicator === "position/3" ) { + stream2.position = position.args[0].value; + stream2.char_count = position.args[0].value; + stream2.line_count = position.args[1].value; + stream2.line_position = position.args[2].value; + } else { + stream2.position = position.id; + } + thread.success( point ); + } + }, + + + + // CHARACTER INPUT OUTPUT + + // get_char/1 + "get_char/1": [ + new Rule(new Term("get_char", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("get_char", [new Var("S"),new Var("C")])])) + ], + + // get_char/2 + "get_char/2": function( thread, point, atom ) { + var stream = atom.args[0], char = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) { + thread.throw_error( pl.error.type( "in_character", char, atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.output ) { + thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "binary" ) { + thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); + } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { + thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); + } else { + var stream_char; + if( stream2.position === "end_of_stream" ) { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else if( stream2.position === "past_end_of_stream" ) { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else { + stream_char = stream2.stream.get( 1, stream2.position ); + if( stream_char === null ) { + thread.throw_error( pl.error.representation( "character", atom.indicator ) ); + return; + } else if(stream_char === "end_of_stream") { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else { + stream2.position++; + stream2.char_count++; + stream2.line_position++; + if(stream_char === "\n") { + stream2.line_count++; + stream2.line_position = 0; + } + } + } + thread.prepend( [new State( + point.goal.replace( new Term( "=", [new Term(stream_char,[]), char] ) ), + point.substitution, + point + )] ); + } + }, + + // get_code/1 + "get_code/1": [ + new Rule(new Term("get_code", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("get_code", [new Var("S"),new Var("C")])])) + ], + + // get_code/2 + "get_code/2": function( thread, point, atom ) { + var stream = atom.args[0], code = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) { + thread.throw_error( pl.error.type( "integer", code, atom.indicator ) ); + } else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) { + thread.throw_error( pl.error.representation( "in_character_code", atom.indicator ) ); + } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.output ) { + thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "binary" ) { + thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); + } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { + thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); + } else { + var stream_code; + if( stream2.position === "end_of_stream" ) { + stream_code = -1; + stream2.position = "past_end_of_stream"; + } else if( stream2.position === "past_end_of_stream" ) { + stream_code = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_code = stream2.stream.get( 1, stream2.position ); + if( stream_code === null ) { + thread.throw_error( pl.error.representation( "character", atom.indicator ) ); + return; + } else if(stream_code === "end_of_stream") { + stream_code = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_code = codePointAt( stream_code, 0 ); + stream2.position++; + stream2.char_count++; + stream2.line_position++; + if(stream_code === 10) { + stream2.line_count++; + stream2.line_position = 0; + } + } + } + thread.prepend( [new State( + point.goal.replace( new Term( "=", [new Num(stream_code, false), code] ) ), + point.substitution, + point + )] ); + } + }, + + // peek_char/1 + "peek_char/1": [ + new Rule(new Term("peek_char", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("peek_char", [new Var("S"),new Var("C")])])) + ], + + // peek_char/2 + "peek_char/2": function( thread, point, atom ) { + var stream = atom.args[0], char = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) { + thread.throw_error( pl.error.type( "in_character", char, atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.output ) { + thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "binary" ) { + thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); + } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { + thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); + } else { + var stream_char; + if( stream2.position === "end_of_stream" ) { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else if( stream2.position === "past_end_of_stream" ) { + stream_char = "end_of_file"; + stream2.position = "past_end_of_stream"; + } else { + stream_char = stream2.stream.get( 1, stream2.position ); + if( stream_char === null ) { + thread.throw_error( pl.error.representation( "character", atom.indicator ) ); + return; + } else if(stream_char === "end_of_stream") { + stream_char = "end_of_file"; + } + } + thread.prepend( [new State( + point.goal.replace( new Term( "=", [new Term(stream_char,[]), char] ) ), + point.substitution, + point + )] ); + } + }, + + // peek_code/1 + "peek_code/1": [ + new Rule(new Term("peek_code", [new Var("C")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("peek_code", [new Var("S"),new Var("C")])])) + ], + + // peek_code/2 + "peek_code/2": function( thread, point, atom ) { + var stream = atom.args[0], code = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) { + thread.throw_error( pl.error.type( "integer", code, atom.indicator ) ); + } else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) { + thread.throw_error( pl.error.representation( "in_character_code", atom.indicator ) ); + } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.output ) { + thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "binary" ) { + thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); + } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { + thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); + } else { + var stream_code; + if( stream2.position === "end_of_stream" ) { + stream_code = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_code = stream2.stream.get( 1, stream2.position ); + if( stream_code === null ) { + thread.throw_error( pl.error.representation( "character", atom.indicator ) ); + return; + } else if(stream_code === "end_of_stream") { + stream_code = -1; + } else { + stream_code = codePointAt( stream_code, 0 ); + } + } + thread.prepend( [new State( + point.goal.replace( new Term( "=", [new Num(stream_code, false), code] ) ), + point.substitution, + point + )] ); + } + }, + + // put_char/1 + "put_char/1": [ + new Rule(new Term("put_char", [new Var("C")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("put_char", [new Var("S"),new Var("C")])])) + ], + + // put_char/2 + "put_char/2": function( thread, point, atom ) { + var stream = atom.args[0], char = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) || pl.type.is_variable( char ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_character( char ) ) { + thread.throw_error( pl.error.type( "character", char, atom.indicator ) ); + } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.input ) { + thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "binary" ) { + thread.throw_error( pl.error.permission( "output", "binary_stream", stream, atom.indicator ) ); + } else { + if( stream2.stream.put( char.id, stream2.position ) ) { + if(typeof stream2.position === "number") + stream2.position++; + stream2.char_count++; + stream2.line_position++; + if(char.id === "\n") { + stream2.line_count++; + stream2.line_position = 0; + } + thread.success( point ); + } + } + }, + + // put_code/1 + "put_code/1": [ + new Rule(new Term("put_code", [new Var("C")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("put_code", [new Var("S"),new Var("C")])])) + ], + + // put_code/2 + "put_code/2": function( thread, point, atom ) { + var stream = atom.args[0], code = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) || pl.type.is_variable( code ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_integer( code ) ) { + thread.throw_error( pl.error.type( "integer", code, atom.indicator ) ); + } else if( !pl.type.is_character_code( code ) ) { + thread.throw_error( pl.error.representation( "character_code", atom.indicator ) ); + } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.input ) { + thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "binary" ) { + thread.throw_error( pl.error.permission( "output", "binary_stream", stream, atom.indicator ) ); + } else { + if( stream2.stream.put( fromCodePoint( code.value ), stream2.position ) ) { + if(typeof stream2.position === "number") + stream2.position++; + stream2.char_count++; + stream2.line_position++; + if(code.value === 10) { + stream2.line_count++; + stream2.line_position = 0; + } + thread.success( point ); + } + } + }, + + // nl/0 + "nl/0": [ + new Rule(new Term("nl"), new Term(",", [new Term("current_output", [new Var("S")]),new Term("put_char", [new Var("S"),new Term("\n")])])) + ], + + // nl/1 + "nl/1": function( thread, point, atom ) { + var stream = atom.args[0]; + thread.prepend( [new State( + point.goal.replace( new Term("put_char", [stream, new Term("\n", [])]) ), + point.substitution, + point + )] ); + }, + + + + // BYTE INPUT/OUTPUT + + // get_byte/1 + "get_byte/1": [ + new Rule(new Term("get_byte", [new Var("B")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("get_byte", [new Var("S"),new Var("B")])])) + ], + + // get_byte/2 + "get_byte/2": function( thread, point, atom ) { + var stream = atom.args[0], byte = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) { + thread.throw_error( pl.error.type( "in_byte", byte, atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.output ) { + thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "text" ) { + thread.throw_error( pl.error.permission( "input", "text_stream", stream, atom.indicator ) ); + } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { + thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); + } else { + var stream_byte; + if( stream2.position === "end_of_stream" ) { + stream_byte = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_byte = stream2.stream.get_byte( stream2.position ); + if( stream_byte === null ) { + thread.throw_error( pl.error.representation( "byte", atom.indicator ) ); + return; + } else if(stream_byte === "end_of_stream") { + stream_byte = -1; + stream2.position = "past_end_of_stream"; + } else { + stream2.position++; + stream2.char_count++; + stream2.line_position++; + } + } + thread.prepend( [new State( + point.goal.replace( new Term( "=", [new Num(stream_byte,false), byte] ) ), + point.substitution, + point + )] ); + } + }, + + // peek_byte/1 + "peek_byte/1": [ + new Rule(new Term("peek_byte", [new Var("B")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("peek_byte", [new Var("S"),new Var("B")])])) + ], + + // peek_byte/2 + "peek_byte/2": function( thread, point, atom ) { + var stream = atom.args[0], byte = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) { + thread.throw_error( pl.error.type( "in_byte", byte, atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.output ) { + thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "text" ) { + thread.throw_error( pl.error.permission( "input", "text_stream", stream, atom.indicator ) ); + } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { + thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); + } else { + var stream_byte; + if( stream2.position === "end_of_stream" ) { + stream_byte = -1; + stream2.position = "past_end_of_stream"; + } else { + stream_byte = stream2.stream.get_byte( stream2.position ); + if( stream_byte === null ) { + thread.throw_error( pl.error.representation( "byte", atom.indicator ) ); + return; + } else if(stream_byte === "end_of_stream") { + stream_byte = -1; + } + } + thread.prepend( [new State( + point.goal.replace( new Term( "=", [new Num(stream_byte,false), byte] ) ), + point.substitution, + point + )] ); + } + }, + + // put_byte/1 + "put_byte/1": [ + new Rule(new Term("put_byte", [new Var("B")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("put_byte", [new Var("S"),new Var("B")])])) + ], + + // put_byte/2 + "put_byte/2": function( thread, point, atom ) { + var stream = atom.args[0], byte = atom.args[1]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) || pl.type.is_variable( byte ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_byte( byte ) ) { + thread.throw_error( pl.error.type( "byte", byte, atom.indicator ) ); + } else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.input ) { + thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "text" ) { + thread.throw_error( pl.error.permission( "output", "text_stream", stream, atom.indicator ) ); + } else { + if( stream2.stream.put_byte( byte.value, stream2.position ) ) { + if(typeof stream2.position === "number") + stream2.position++; + stream2.char_count++; + stream2.line_position++; + thread.success( point ); + } + } + }, + + + + // TERM INPUT/OUTPUT + + // read/1 + "read/1": [ + new Rule(new Term("read", [new Var("T")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("read_term", [new Var("S"),new Var("T"),new Term("[]")])])) + ], + + // read/2 + "read/2": [ + new Rule(new Term("read", [new Var("S"), new Var("T")]), new Term("read_term", [new Var("S"),new Var("T"),new Term("[]")])) + ], + + // read_term/2 + "read_term/2": [ + new Rule(new Term("read_term", [new Var("T"),new Var("O")]), new Term(",", [new Term("current_input", [new Var("S")]),new Term("read_term", [new Var("S"),new Var("T"),new Var("O")])])) + ], + + // read_term/3 + "read_term/3": function( thread, point, atom ) { + var stream = atom.args[0], term = atom.args[1], options = atom.args[2]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_list( options ) ) { + thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.output ) { + thread.throw_error( pl.error.permission( "input", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "binary" ) { + thread.throw_error( pl.error.permission( "input", "binary_stream", stream, atom.indicator ) ); + } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { + thread.throw_error( pl.error.permission( "input", "past_end_of_stream", stream, atom.indicator ) ); + } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "eof_code" ) { + expr = { + value: new Term("end_of_file", []), + type: SUCCESS, + len: -1 + }; + } else { + // Get options + var obj_options = {}; + var pointer = options; + var property; + while( pl.type.is_term(pointer) && pointer.indicator === "./2" ) { + property = pointer.args[0]; + if( pl.type.is_variable( property ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( !pl.type.is_read_option( property ) ) { + thread.throw_error( pl.error.domain( "read_option", property, atom.indicator ) ); + return; + } + obj_options[property.id] = property.args[0]; + pointer = pointer.args[1]; + } + if( pointer.indicator !== "[]/0" ) { + if( pl.type.is_variable( pointer ) ) + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + else + thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); + return; + } else { + var char, tokenizer, expr; + var text = ""; + var tokens = []; + var last_token = null; + var lexical_error = false; + // Get term + while( last_token === null || lexical_error || last_token.name !== "atom" || last_token.value !== "." || tokens.length > 0 && expr.type === ERROR ) { + char = stream2.stream.get( 1, stream2.position ); + while(char !== null && char !== "." && char !== "end_of_stream" && char !== "past_end_of_stream") { + stream2.position++; + text += char; + char = stream2.stream.get( 1, stream2.position ); + } + if( char === null ) { + thread.throw_error( pl.error.representation( "character", atom.indicator ) ); + return; + } else if( char === "end_of_stream" || char === "past_end_of_stream" ) { + if(tokens === null || tokens.length === 0) { + stream2.position = "past_end_of_stream"; + expr = { + value: new Term("end_of_file", []), + type: SUCCESS, + len: -1 + }; + break; + } else if(expr) { + thread.throw_error( pl.error.syntax( last_token, "unexpected end of file", false ) ); + return; + } else { + thread.throw_error( pl.error.syntax( last_token, "token not found", true ) ); + return; + } + } else if(char === ".") { + stream2.position++; + text += char; + } + tokenizer = new Tokenizer( thread ); + tokenizer.new_text( text ); + tokens = tokenizer.get_tokens(); + num_token = tokens !== null && tokens.length > 1 ? tokens[tokens.length-2] : null; + last_token = tokens !== null && tokens.length > 0 ? tokens[tokens.length-1] : null; + if(tokens === null) + continue; + lexical_error = false; + for(var i = 0; i < tokens.length && !lexical_error; i++) + lexical_error = tokens[i].name === "lexical"; + if(lexical_error) + continue; + expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false); + if(num_token && num_token.name === "number" && !num_token.float && !num_token.blank && last_token.value === ".") { + var next_char = stream2.stream.get(1, stream2.position); + if(next_char >= '0' && next_char <= '9') { + stream2.position++; + text += next_char; + last_token = null; + continue; + } + } + } + if(last_token) { + if(last_token.line_position === last_token.len) + stream2.line_position += last_token.line_position; + else + stream2.line_position = last_token.line_position; + stream2.line_count += last_token.line_count; + stream2.char_count += last_token.len; + } + // Succeed analyzing term + if( expr.type === SUCCESS && (expr.len === -1 || expr.len === tokens.length-1 && last_token.value === "." )) { + thread.session.renamed_variables = {}; + expr = expr.value.rename( thread ); + var eq = new Term( "=", [term, expr] ); + // Variables + if( obj_options.variables ) { + var vars = arrayToList( map( nub( expr.variables() ), function(v) { return new Var(v); } ) ); + eq = new Term( ",", [eq, new Term( "=", [obj_options.variables, vars] )] ) + } + // Variable names + if( obj_options.variable_names ) { + var vars = nub(expr.variables()); + var plvars = []; + for(var i = 0; i < vars.length; i++) { + var v = vars[i]; + for( var prop in thread.session.renamed_variables ) { + if( thread.session.renamed_variables.hasOwnProperty( prop ) ) { + if( thread.session.renamed_variables[ prop ] === v ) { + plvars.push(new Term( "=", [new Term( prop, []), new Var(v)] )); + break; + } + } + } + } + plvars = arrayToList(plvars); + eq = new Term( ",", [eq, new Term( "=", [obj_options.variable_names, plvars] )] ); + } + // Singletons + if( obj_options.singletons ) { + var vars = nub(new Rule(expr, null).singleton_variables(true)); + var plvars = []; + for(var i = 0; i < vars.length; i++) { + var v = vars[i]; + for( var prop in thread.session.renamed_variables ) { + if( thread.session.renamed_variables.hasOwnProperty( prop ) ) { + if( thread.session.renamed_variables[ prop ] === v ) { + plvars.push(new Term( "=", [new Term( prop, []), new Var(v)] )); + break; + } + } + } + } + plvars = arrayToList(plvars); + eq = new Term( ",", [eq, new Term( "=", [obj_options.singletons, plvars] )] ); + } + thread.prepend( [new State( point.goal.replace( eq ), point.substitution, point )] ); + // Failed analyzing term + } else { + if( expr.type === SUCCESS ) + thread.throw_error( pl.error.syntax( tokens[expr.len], "unexpected token", false ) ); + else + thread.throw_error( expr.value ); + } + } + } + }, + + // write/1 + "write/1": [ + new Rule(new Term("write", [new Var("T")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("write", [new Var("S"),new Var("T")])])) + ], + + // write/2 + "write/2": function( thread, point, atom ) { + var stream = atom.args[0], term = atom.args[1]; + thread.prepend( [new State( + point.goal.replace( new Term("write_term", [stream, term, + new Term(".", [new Term("quoted", [new Term("false", [])]), + new Term(".", [new Term("ignore_ops", [new Term("false")]), + new Term(".", [new Term("numbervars", [new Term("true")]), new Term("[]",[])])])])]) ), + point.substitution, + point + )] ); + }, + + // writeq/1 + "writeq/1": [ + new Rule(new Term("writeq", [new Var("T")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("writeq", [new Var("S"),new Var("T")])])) + ], + + // writeq/2 + "writeq/2": function( thread, point, atom ) { + var stream = atom.args[0], term = atom.args[1]; + thread.prepend( [new State( + point.goal.replace( new Term("write_term", [stream, term, + new Term(".", [new Term("quoted", [new Term("true", [])]), + new Term(".", [new Term("ignore_ops", [new Term("false")]), + new Term(".", [new Term("numbervars", [new Term("true")]), new Term("[]",[])])])])]) ), + point.substitution, + point + )] ); + }, + + // write_canonical/1 + "write_canonical/1": [ + new Rule(new Term("write_canonical", [new Var("T")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("write_canonical", [new Var("S"),new Var("T")])])) + ], + + // write_canonical/2 + "write_canonical/2": function( thread, point, atom ) { + var stream = atom.args[0], term = atom.args[1]; + thread.prepend( [new State( + point.goal.replace( new Term("write_term", [stream, term, + new Term(".", [new Term("quoted", [new Term("true", [])]), + new Term(".", [new Term("ignore_ops", [new Term("true")]), + new Term(".", [new Term("numbervars", [new Term("false")]), new Term("[]",[])])])])]) ), + point.substitution, + point + )] ); + }, + + // write_term/2 + "write_term/2": [ + new Rule(new Term("write_term", [new Var("T"),new Var("O")]), new Term(",", [new Term("current_output", [new Var("S")]),new Term("write_term", [new Var("S"),new Var("T"),new Var("O")])])) + ], + + // write_term/3 + "write_term/3": function( thread, point, atom ) { + var stream = atom.args[0], term = atom.args[1], options = atom.args[2]; + var stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id ); + if( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_list( options ) ) { + thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); + } else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) { + thread.throw_error( pl.error.domain( "stream_or_alias", stream, atom.indicator ) ); + } else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) { + thread.throw_error( pl.error.existence( "stream", stream, atom.indicator ) ); + } else if( stream2.input ) { + thread.throw_error( pl.error.permission( "output", "stream", stream, atom.indicator ) ); + } else if( stream2.type === "binary" ) { + thread.throw_error( pl.error.permission( "output", "binary_stream", stream, atom.indicator ) ); + } else if( stream2.position === "past_end_of_stream" && stream2.eof_action === "error" ) { + thread.throw_error( pl.error.permission( "output", "past_end_of_stream", stream, atom.indicator ) ); + } else { + // Get options + var obj_options = {}; + var pointer = options; + var property; + while( pl.type.is_term(pointer) && pointer.indicator === "./2" ) { + property = pointer.args[0]; + if( pl.type.is_variable( property ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + return; + } else if( !pl.type.is_write_option( property ) ) { + thread.throw_error( pl.error.domain( "write_option", property, atom.indicator ) ); + return; + } + if(property.indicator === "variable_names/1") + obj_options[property.id] = property.args[0]; + else + obj_options[property.id] = property.args[0].id === "true"; + pointer = pointer.args[1]; + } + if( pointer.indicator !== "[]/0" ) { + if( pl.type.is_variable( pointer ) ) + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + else + thread.throw_error( pl.error.type( "list", options, atom.indicator ) ); + return; + } else { + obj_options.session = thread.session; + var text = term.toString( obj_options ); + stream2.stream.put( text, stream2.position ); + if( typeof stream2.position === "number" ) + stream2.position += text.length; + var nl = (text.match(/\n/g) || []).length; + stream2.line_count += nl; + if(nl > 0) + stream2.line_position = text.length - text.lastIndexOf("\n") - 1; + else + stream2.line_position += text.length; + stream2.char_count += text.length; + thread.success( point ); + } + } + }, + + // IMPLEMENTATION DEFINED HOOKS + + // halt/0 + "halt/0": function( thread, point, _ ) { + if( thread.get_flag("nodejs").indicator === "true/0" ) + process.exit(); + thread.points = []; + }, + + // halt/1 + "halt/1": function( thread, point, atom ) { + var int = atom.args[0]; + if( pl.type.is_variable( int ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_integer( int ) ) { + thread.throw_error( pl.error.type( "integer", int, atom.indicator ) ); + } else { + if( thread.get_flag("nodejs").indicator === "true/0" ) + process.exit(int.value); + thread.points = []; + } + }, + + // current_prolog_flag/2 + "current_prolog_flag/2": function( thread, point, atom ) { + var flag = atom.args[0], value = atom.args[1]; + if( !pl.type.is_variable( flag ) && !pl.type.is_atom( flag ) ) { + thread.throw_error( pl.error.type( "atom", flag, atom.indicator ) ); + } else if( !pl.type.is_variable( flag ) && !pl.type.is_flag( flag ) ) { + thread.throw_error( pl.error.domain( "prolog_flag", flag, atom.indicator ) ); + } else { + var states = []; + for( var name in pl.flag ) { + if(!pl.flag.hasOwnProperty(name)) continue; + var goal = new Term( ",", [new Term( "=", [new Term( name ), flag] ), new Term( "=", [thread.get_flag(name), value] )] ); + states.push( new State( point.goal.replace( goal ), point.substitution, point ) ); + } + thread.prepend( states ); + } + }, + + // set_prolog_flag/2 + "set_prolog_flag/2": function( thread, point, atom ) { + var flag = atom.args[0], value = atom.args[1]; + if( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_atom( flag ) ) { + thread.throw_error( pl.error.type( "atom", flag, atom.indicator ) ); + } else if( !pl.type.is_flag( flag ) ) { + thread.throw_error( pl.error.domain( "prolog_flag", flag, atom.indicator ) ); + } else if( !pl.type.is_modifiable_flag( flag ) ) { + thread.throw_error( pl.error.permission( "modify", "flag", flag, atom.indicator ) ); + } else if( !pl.type.is_value_flag( flag, value ) ) { + thread.throw_error( pl.error.domain( "flag_value", new Term( "+", [flag, value] ), atom.indicator ) ); + } else { + thread.session.flag[flag.id] = value; + thread.success( point ); + } + }, + + + + // LOAD PROLOG SOURCE FILES + + // consult/1 + "consult/1": function(thread, point, atom) { + var src = atom.args[0]; + var context_module = "user"; + if(src.indicator === ":/2") { + context_module = src.args[0].id; + src = src.args[1]; + } + if(pl.type.is_variable(src)) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if(!pl.type.is_atom(src)) { + thread.throw_error( pl.error.type( "atom", src, atom.indicator ) ); + } else { + if(thread.consult(src.id, { + context_module: context_module, + text: false, + html: false, + success: function() { + thread.success(point); + thread.again(); + }, + error: function(err) { + thread.throw_error(err); + thread.again(); + } + })); + return true; + } + }, + + + + // TIME AND DATES + + // get_time/1 + "get_time/1": function( thread, point, atom ) { + var time = atom.args[0]; + if(!pl.type.is_variable(time) && !pl.type.is_number(time)) { + thread.throw_error( pl.error.type( "number", time, atom.indicator ) ); + } else { + var current = new Num(Date.now(), true); + thread.prepend( [new State( + point.goal.replace( new Term( "=", [time, current] ) ), + point.substitution, + point + )] ); + } + }, + + // time_property + "time_property/2": function(thread, point, atom) { + var time = atom.args[0], property = atom.args[1]; + if(pl.type.is_variable(time)) { + thread.throw_error(pl.error.instantiation(atom.indicator)); + } else if(!pl.type.is_variable(time) && !pl.type.is_number(time)) { + thread.throw_error(pl.error.type("number", time, atom.indicator)); + } else if(!pl.type.is_variable(property) && !pl.type.is_time_property(property)) { + thread.throw_error(pl.error.domain("time_property", property, atom.indicator)); + } else { + var props; + if(pl.type.is_variable(property)) { + props = ["year", "month", "day", "hours", "minutes", "seconds", "milliseconds", "weekday"]; + } else { + props = [property.id]; + } + var date = new Date(time.value); + var value; + var states = []; + for(var i = 0; i < props.length; i++) { + switch(props[i]) { + case "year": + value = new Term("year", [new Num(date.getFullYear(), false)]); + break; + case "month": + value = new Term("month", [new Num(date.getMonth(), false)]); + break; + case "day": + value = new Term("day", [new Num(date.getDate(), false)]); + break; + case "hours": + value = new Term("hours", [new Num(date.getHours(), false)]); + break; + case "minutes": + value = new Term("minutes", [new Num(date.getMinutes(), false)]); + break; + case "seconds": + value = new Term("seconds", [new Num(date.getSeconds(), false)]); + break; + case "milliseconds": + value = new Term("milliseconds", [new Num(date.getMilliseconds(), false)]); + break; + case "weekday": + value = new Term("weekday", [new Num(date.getDay(), false)]); + break; + } + states.push(new State( + point.goal.replace( new Term( "=", [property, value] ) ), + point.substitution, + point + )); + } + thread.prepend(states); + } + }, + + // time_year/2 + "time_year/2": function( thread, point, atom ) { + var time = atom.args[0], year = atom.args[1]; + if(pl.type.is_variable(time)) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if(!pl.type.is_number(time)) { + thread.throw_error( pl.error.type( "number", time, atom.indicator ) ); + } else if(!pl.type.is_variable(year) && !pl.type.is_integer(year)) { + thread.throw_error( pl.error.type( "integer", year, atom.indicator ) ); + } else { + var value = new Num(new Date(time.value).getFullYear(), false); + thread.prepend( [new State( + point.goal.replace( new Term( "=", [year, value] ) ), + point.substitution, + point + )] ); + } + }, + + // time_month/2 + "time_month/2": function( thread, point, atom ) { + var time = atom.args[0], month = atom.args[1]; + if(pl.type.is_variable(time)) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if(!pl.type.is_number(time)) { + thread.throw_error( pl.error.type( "number", time, atom.indicator ) ); + } else if(!pl.type.is_variable(month) && !pl.type.is_integer(month)) { + thread.throw_error( pl.error.type( "integer", month, atom.indicator ) ); + } else { + var value = new Num(new Date(time.value).getMonth(), false); + thread.prepend( [new State( + point.goal.replace( new Term( "=", [month, value] ) ), + point.substitution, + point + )] ); + } + }, + + + + // GRAMMARS + + // phrase/3 + "phrase/3": function( thread, point, atom ) { + var grbody = atom.args[0], s0 = atom.args[1], s = atom.args[2]; + var context_module = "user"; + if(grbody.indicator === ":/2") { + context_module = grbody.args[0].id; + grbody = grbody.args[1]; + } + if( pl.type.is_variable( grbody ) ) { + thread.throw_error( pl.error.instantiation( atom.indicator ) ); + } else if( !pl.type.is_callable( grbody ) ) { + thread.throw_error( pl.error.type( "callable", grbody, atom.indicator ) ); + } else { + var goal = body_to_dcg( grbody.clone(), s0, thread ); + goal.value = new Term(":", [new Term(context_module), new Term("call", [goal.value])]); + if(goal !== null) { + thread.prepend( [new State( + point.goal.replace( new Term( ",", [goal.value, new Term("=", [goal.variable, s])] ) ), + point.substitution, + point + )] ); + } + } + }, + + // phrase/2 + "phrase/2": function( thread, point, atom ) { + var grbody = atom.args[0], s0 = atom.args[1]; + thread.prepend( [new State( + point.goal.replace( new Term( "phrase", [grbody, s0, new Term("[]", [])] ) ), + point.substitution, + point + )] ); + }, + + + + // TAU PROLOG INFORMATION + + // version/0 + "version/0": function( thread, point, atom ) { + var msg = "Welcome to Tau Prolog version " + version.major + "." + version.minor + "." + version.patch + "\n"; + msg += "Tau Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.\n"; + msg += "Please run ?- license. for legal details.\n"; + msg += "For online help and background, visit http:/tau-prolog.org"; + thread.prepend( [new State( + point.goal.replace( new Term( "write", [new Term( msg, [] )] ) ), + point.substitution, + point + )] ); + }, + + // license/0 + "license/0": function( thread, point, atom ) { + var msg = "Tau Prolog. A Prolog interpreter in JavaScript.\n"; + msg += "Copyright (C) 2017 - 2022 José Antonio Riaza Valverde\n\n"; + msg += "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n"; + msg += "1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n"; + msg += "2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n"; + msg += "3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\n"; + msg += "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n"; + msg += "You should have received a copy of the BSD 3-Clause License along with this program. If not, see https://opensource.org/licenses/BSD-3-Clause"; + thread.prepend( [new State( + point.goal.replace( new Term( "write", [new Term( msg, [] )] ) ), + point.substitution, + point + )] ); + } + + }, "all", { + meta_predicates: { + // '$findall'(?, 0, -, ?) + "$findall/4": new Term("$findall", [new Term("?"), new Num(0, false), new Term("-"), new Term("?")]), + // '$bagof'(?, ^, -) + "$bagof/3": new Term("$bagof", [new Term("?"), new Term("^"), new Term("-")]), + // '$setof'(?, ^, -) + "$setof/3": new Term("$setof", [new Term("?"), new Term("^"), new Term("-")]), + // '$if'(0, 0, 0) + "$if/3": new Term("$if", [new Num(0, false), new Num(0, false), new Num(0, false)]), + // (0;0) + ";/2": new Term(";", [new Num(0, false), new Num(0, false)]), + // (0->0) + "->/2": new Term("->", [new Num(0, false), new Num(0, false)]), + // (0->0) + "*->/2": new Term("*->", [new Num(0, false), new Num(0, false)]), + // (\+0) + "\\+/1": new Term("\\+", [new Num(0, false)]), + // abolish(:) + "abolish/1": new Term("abolish", [new Term(":")]), + // asserta(:) + "asserta/1": new Term("asserta", [new Term(":")]), + // assertz(:) + "assertz/1": new Term("assertz", [new Term(":")]), + // bagof(?, ^, -) + "bagof/3": new Term("bagof", [new Term("?"), new Term("^"), new Term("-")]), + // call(0) + "call/1": new Term("call", [new Num(0, false)]), + // call(1, ?) + "call/2": new Term("call", [new Num(1, false), new Term("?")]), + // call(2, ?, ?) + "call/3": new Term("call", [new Num(2, false), new Term("?"), new Term("?")]), + // call(3, ?, ?, ?) + "call/4": new Term("call", [new Num(3, false), new Term("?"), new Term("?"), new Term("?")]), + // call(4, ?, ?, ?, ?) + "call/5": new Term("call", [new Num(4, false), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), + // call(5, ?, ?, ?, ?, ?) + "call/6": new Term("call", [new Num(5, false), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), + // call(6, ?, ?, ?, ?, ?, ?) + "call/7": new Term("call", [new Num(6, false), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), + // call(7, ?, ?, ?, ?, ?, ?, ?) + "call/8": new Term("call", [new Num(6, false), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?"), new Term("?")]), + // call_cleanup(0, 0) + "call_cleanup/2": new Term("call_cleanup", [new Num(0, false), new Num(0, false)]), + // catch(0, ?, 0) + "catch/3": new Term("catch", [new Num(0, false), new Term("?"), new Num(0, false)]), + // consult(:) + "consult/1": new Term("consult", [new Term(":")]), + // clause(:, ?) + "clause/2": new Term("clause", [new Term(":"), new Term("?")]), + // current_predicate(?, :) + "current_predicate/2": new Term("current_predicate", [new Term("?"), new Term(":")]), + // findall(?, 0, -) + "findall/3": new Term("findall", [new Term("?"), new Num(0, false), new Term("-")]), + // findall(?, 0, -, ?) + "findall/4": new Term("findall", [new Term("?"), new Num(0, false), new Term("-"), new Term("?")]), + // forall(0, 0) + "forall/2": new Term("forall", [new Num(0, false), new Num(0, false)]), + // listing(:) + "listing/1": new Term("listing", [new Term(":")]), + // once(0) + "once/1": new Term("once", [new Num(0, false)]), + // phrase(:, ?) + "phrase/2": new Term("phrase", [new Term(":"),new Term("?")]), + // phrase(:, ?, ?) + "phrase/3": new Term("phrase", [new Term(":"),new Term("?"), new Term("?")]), + // retract(:) + "retract/1": new Term("retract", [new Term(":")]), + // retractall(:) + "retractall/1": new Term("retractall", [new Term(":")]), + // setup_call_cleanup(0, 0, 0) + "setup_call_cleanup/3": new Term("setup_call_cleanup", [new Num(0, false), new Num(0, false), new Num(0, false)]), + // setof(?, ^, -) + "setof/3": new Term("setof", [new Term("?"), new Term("^"), new Term("-")]) + } + }); + + if( true ) { + module.exports = pl; + } else {} + +})(); + + +/***/ }), + +/***/ "../../node_modules/util-deprecate/browser.js": +/*!****************************************************!*\ + !*** ../../node_modules/util-deprecate/browser.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!__webpack_require__.g.localStorage) return false; + } catch (_) { + return false; + } + var val = __webpack_require__.g.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} + + +/***/ }), + +/***/ "../../node_modules/util/node_modules/inherits/inherits_browser.js": +/*!*************************************************************************!*\ + !*** ../../node_modules/util/node_modules/inherits/inherits_browser.js ***! + \*************************************************************************/ +/***/ ((module) => { + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + + +/***/ }), + +/***/ "../../node_modules/util/support/isBufferBrowser.js": +/*!**********************************************************!*\ + !*** ../../node_modules/util/support/isBufferBrowser.js ***! + \**********************************************************/ +/***/ ((module) => { + +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} + +/***/ }), + +/***/ "../../node_modules/util/util.js": +/*!***************************************!*\ + !*** ../../node_modules/util/util.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(__webpack_require__.g.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); }; -}).call(Editor.prototype); -function isSamePoint(p1, p2) { - return p1.row == p2.row && p1.column == p2.column; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); } -exports.onSessionChange = function (e) { - var session = e.session; - if (session && !session.multiSelect) { - session.$selectionMarkers = []; - session.selection.$initRangeList(); - session.multiSelect = session.selection; +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); } - this.multiSelect = session && session.multiSelect; - var oldSession = e.oldSession; - if (oldSession) { - oldSession.multiSelect.off("addRange", this.$onAddRange); - oldSession.multiSelect.off("removeRange", this.$onRemoveRange); - oldSession.multiSelect.off("multiSelect", this.$onMultiSelect); - oldSession.multiSelect.off("singleSelect", this.$onSingleSelect); - oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange); - oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange); + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); } - if (session) { - session.multiSelect.on("addRange", this.$onAddRange); - session.multiSelect.on("removeRange", this.$onRemoveRange); - session.multiSelect.on("multiSelect", this.$onMultiSelect); - session.multiSelect.on("singleSelect", this.$onSingleSelect); - session.multiSelect.lead.on("change", this.$checkMultiselectChange); - session.multiSelect.anchor.on("change", this.$checkMultiselectChange); + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } - if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) { - if (session.selection.inMultiSelectMode) - this.$onMultiSelect(); - else - this.$onSingleSelect(); + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); } -}; -function MultiSelect(editor) { - if (editor.$multiselectOnSessionChange) - return; - editor.$onAddRange = editor.$onAddRange.bind(editor); - editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); - editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); - editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); - editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); - editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor); - editor.$multiselectOnSessionChange(editor); - editor.on("changeSession", editor.$multiselectOnSessionChange); - editor.on("mousedown", onMouseDown); - editor.commands.addCommands(commands.defaultCommands); - addAltCursorListeners(editor); + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; } -function addAltCursorListeners(editor) { - if (!editor.textInput) - return; - var el = editor.textInput.getElement(); - var altCursor = false; - event.addListener(el, "keydown", function (e) { - var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey); - if (editor.$blockSelectEnabled && altDown) { - if (!altCursor) { - editor.renderer.setMouseCursor("crosshair"); - altCursor = true; - } - } - else if (altCursor) { - reset(); - } - }, editor); - event.addListener(el, "keyup", reset, editor); - event.addListener(el, "blur", reset, editor); - function reset(e) { - if (altCursor) { - editor.renderer.setMouseCursor(""); - altCursor = false; - } - } +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); } -exports.MultiSelect = MultiSelect; -require("./config").defineOptions(Editor.prototype, "editor", { - enableMultiselect: { - set: function (val) { - MultiSelect(this); - if (val) { - this.on("mousedown", onMouseDown); - } - else { - this.off("mousedown", onMouseDown); - } - }, - value: true - }, - enableBlockSelect: { - set: function (val) { - this.$blockSelectEnabled = val; - }, - value: true - } -}); +exports.isError = isError; -}); +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; -ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; -var Range = require("../../range").Range; -var FoldMode = exports.FoldMode = function () { }; -(function () { - this.foldingStartMarker = null; - this.foldingStopMarker = null; - this.getFoldWidget = function (session, foldStyle, row) { - var line = session.getLine(row); - if (this.foldingStartMarker.test(line)) - return "start"; - if (foldStyle == "markbeginend" - && this.foldingStopMarker - && this.foldingStopMarker.test(line)) - return "end"; - return ""; - }; - this.getFoldWidgetRange = function (session, foldStyle, row) { - return null; - }; - this.indentationBlock = function (session, row, column) { - var re = /\S/; - var line = session.getLine(row); - var startLevel = line.search(re); - if (startLevel == -1) - return; - var startColumn = column || line.length; - var maxRow = session.getLength(); - var startRow = row; - var endRow = row; - while (++row < maxRow) { - var level = session.getLine(row).search(re); - if (level == -1) - continue; - if (level <= startLevel) { - var token = session.getTokenAt(row, 0); - if (!token || token.type !== "string") - break; - } - endRow = row; - } - if (endRow > startRow) { - var endColumn = session.getLine(endRow).length; - return new Range(startRow, startColumn, endRow, endColumn); - } - }; - this.openingBracketBlock = function (session, bracket, row, column, typeRe) { - var start = { row: row, column: column + 1 }; - var end = session.$findClosingBracket(bracket, start, typeRe); - if (!end) - return; - var fw = session.foldWidgets[end.row]; - if (fw == null) - fw = session.getFoldWidget(end.row); - if (fw == "start" && end.row > start.row) { - end.row--; - end.column = session.getLine(end.row).length; - } - return Range.fromPoints(start, end); - }; - this.closingBracketBlock = function (session, bracket, row, column, typeRe) { - var end = { row: row, column: column }; - var start = session.$findOpeningBracket(bracket, end); - if (!start) - return; - start.column++; - end.column--; - return Range.fromPoints(start, end); - }; -}).call(FoldMode.prototype); +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; -}); +exports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ "../../node_modules/util/support/isBufferBrowser.js"); -ace.define("ace/ext/error_marker",["require","exports","module","ace/lib/dom","ace/range","ace/config"], function(require, exports, module){/** - * ## Error Marker extension +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. * - * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips - * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with - * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity. + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). * - * @module + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. */ -"use strict"; -var dom = require("../lib/dom"); -var Range = require("../range").Range; -var nls = require("../config").nls; -function binarySearch(array, needle, comparator) { - var first = 0; - var last = array.length - 1; - while (first <= last) { - var mid = (first + last) >> 1; - var c = comparator(needle, array[mid]); - if (c > 0) - first = mid + 1; - else if (c < 0) - last = mid - 1; - else - return mid; - } - return -(first + 1); -} -function findAnnotations(session, row, dir) { - var annotations = session.getAnnotations().sort(Range.comparePoints); - if (!annotations.length) - return; - var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints); - if (i < 0) - i = -i - 1; - if (i >= annotations.length) - i = dir > 0 ? 0 : annotations.length - 1; - else if (i === 0 && dir < 0) - i = annotations.length - 1; - var annotation = annotations[i]; - if (!annotation || !dir) - return; - if (annotation.row === row) { - do { - annotation = annotations[i += dir]; - } while (annotation && annotation.row === row); - if (!annotation) - return annotations.slice(); - } - var matched = []; - row = annotation.row; - do { - matched[dir < 0 ? "unshift" : "push"](annotation); - annotation = annotations[i += dir]; - } while (annotation && annotation.row == row); - return matched.length && matched; +exports.inherits = __webpack_require__(/*! inherits */ "../../node_modules/util/node_modules/inherits/inherits_browser.js"); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); } -exports.showErrorMarker = function (editor, dir) { - var session = editor.session; - var pos = editor.getCursorPosition(); - var row = pos.row; - var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) { - return w.type == "errorMarker"; - })[0]; - if (oldWidget) { - oldWidget.destroy(); + + +/***/ }), + +/***/ "../../node_modules/vm-browserify/index.js": +/*!*************************************************!*\ + !*** ../../node_modules/vm-browserify/index.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +var indexOf = function (xs, item) { + if (xs.indexOf) return xs.indexOf(item); + else for (var i = 0; i < xs.length; i++) { + if (xs[i] === item) return i; } + return -1; +}; +var Object_keys = function (obj) { + if (Object.keys) return Object.keys(obj) else { - row -= dir; - } - var annotations = findAnnotations(session, row, dir); - var gutterAnno; - if (annotations) { - var annotation = annotations[0]; - pos.column = (annotation.pos && typeof annotation.column != "number" - ? annotation.pos.sc - : annotation.column) || 0; - pos.row = annotation.row; - gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row]; + var res = []; + for (var key in obj) res.push(key) + return res; } - else if (oldWidget) { - return; +}; + +var forEach = function (xs, fn) { + if (xs.forEach) return xs.forEach(fn) + else for (var i = 0; i < xs.length; i++) { + fn(xs[i], i, xs); } - else { - gutterAnno = { - displayText: [nls("error-marker.good-state", "Looks good!")], - className: "ace_ok" +}; + +var defineProp = (function() { + try { + Object.defineProperty({}, '_', {}); + return function(obj, name, value) { + Object.defineProperty(obj, name, { + writable: true, + enumerable: false, + configurable: true, + value: value + }) + }; + } catch(e) { + return function(obj, name, value) { + obj[name] = value; }; } - editor.session.unfold(pos.row); - editor.selection.moveToPosition(pos); - var w = { - row: pos.row, - fixedWidth: true, - coverGutter: true, - el: dom.createElement("div"), - type: "errorMarker" - }; - var el = w.el.appendChild(dom.createElement("div")); - var arrow = w.el.appendChild(dom.createElement("div")); - arrow.className = "error_widget_arrow " + gutterAnno.className; - var left = editor.renderer.$cursorLayer - .getPixelPosition(pos).left; - arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px"; - w.el.className = "error_widget_wrapper"; - el.className = "error_widget " + gutterAnno.className; - gutterAnno.displayText.forEach(function (annoTextLine, i) { - el.appendChild(dom.createTextNode(annoTextLine)); - if (i < gutterAnno.displayText.length - 1) { - el.appendChild(dom.createElement("br")); +}()); + +var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', +'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', +'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', +'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', +'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; + +function Context() {} +Context.prototype = {}; + +var Script = exports.Script = function NodeScript (code) { + if (!(this instanceof Script)) return new Script(code); + this.code = code; +}; + +Script.prototype.runInContext = function (context) { + if (!(context instanceof Context)) { + throw new TypeError("needs a 'context' argument."); + } + + var iframe = document.createElement('iframe'); + if (!iframe.style) iframe.style = {}; + iframe.style.display = 'none'; + + document.body.appendChild(iframe); + + var win = iframe.contentWindow; + var wEval = win.eval, wExecScript = win.execScript; + + if (!wEval && wExecScript) { + // win.eval() magically appears when this is called in IE: + wExecScript.call(win, 'null'); + wEval = win.eval; + } + + forEach(Object_keys(context), function (key) { + win[key] = context[key]; + }); + forEach(globals, function (key) { + if (context[key]) { + win[key] = context[key]; } }); - el.appendChild(dom.createElement("div")); - var kb = function (_, hashId, keyString) { - if (hashId === 0 && (keyString === "esc" || keyString === "return")) { - w.destroy(); - return { command: "null" }; + + var winKeys = Object_keys(win); + + var res = wEval.call(win, this.code); + + forEach(Object_keys(win), function (key) { + // Avoid copying circular objects like `top` and `window` by only + // updating existing context properties or new properties in the `win` + // that was only introduced after the eval. + if (key in context || indexOf(winKeys, key) === -1) { + context[key] = win[key]; } - }; - w.destroy = function () { - if (editor.$mouseHandler.isMousePressed) - return; - editor.keyBinding.removeKeyboardHandler(kb); - session.widgetManager.removeLineWidget(w); - editor.off("changeSelection", w.destroy); - editor.off("changeSession", w.destroy); - editor.off("mouseup", w.destroy); - editor.off("change", w.destroy); - }; - editor.keyBinding.addKeyboardHandler(kb); - editor.on("changeSelection", w.destroy); - editor.on("changeSession", w.destroy); - editor.on("mouseup", w.destroy); - editor.on("change", w.destroy); - editor.session.widgetManager.addLineWidget(w); - w.el.onmousedown = editor.focus.bind(editor); - editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight }); + }); + + forEach(globals, function (key) { + if (!(key in context)) { + defineProp(context, key, win[key]); + } + }); + + document.body.removeChild(iframe); + + return res; }; -dom.importCssString("\n .error_widget_wrapper {\n background: inherit;\n color: inherit;\n border:none\n }\n .error_widget {\n border-top: solid 2px;\n border-bottom: solid 2px;\n margin: 5px 0;\n padding: 10px 40px;\n white-space: pre-wrap;\n }\n .error_widget.ace_error, .error_widget_arrow.ace_error{\n border-color: #ff5a5a\n }\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\n border-color: #F1D817\n }\n .error_widget.ace_info, .error_widget_arrow.ace_info{\n border-color: #5a5a5a\n }\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\n border-color: #5aaa5a\n }\n .error_widget_arrow {\n position: absolute;\n border: solid 5px;\n border-top-color: transparent!important;\n border-right-color: transparent!important;\n border-left-color: transparent!important;\n top: -5px;\n }\n", "error_marker.css", false); -}); +Script.prototype.runInThisContext = function () { + return eval(this.code); // maybe... +}; -ace.define("ace/ace",["require","exports","module","ace/lib/dom","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config","ace/loader_build"], function(require, exports, module){/** - * The main class required to set up an Ace instance in the browser. - * - * @namespace Ace - **/ -"use strict"; -require("./loader_build")(exports) -var dom = require("./lib/dom"); -var Range = require("./range").Range; -var Editor = require("./editor").Editor; -var EditSession = require("./edit_session").EditSession; -var UndoManager = require("./undomanager").UndoManager; -var Renderer = require("./virtual_renderer").VirtualRenderer; -require("./worker/worker_client"); -require("./keyboard/hash_handler"); -require("./placeholder"); -require("./multi_select"); -require("./mode/folding/fold_mode"); -require("./theme/textmate"); -require("./ext/error_marker"); -exports.config = require("./config"); -exports.edit = function (el, options) { - if (typeof el == "string") { - var _id = el; - el = document.getElementById(_id); - if (!el) - throw new Error("ace.edit can't find div #" + _id); - } - if (el && el.env && el.env.editor instanceof Editor) - return el.env.editor; - var value = ""; - if (el && /input|textarea/i.test(el.tagName)) { - var oldNode = el; - value = oldNode.value; - el = dom.createElement("pre"); - oldNode.parentNode.replaceChild(el, oldNode); - } - else if (el) { - value = el.textContent; - el.innerHTML = ""; +Script.prototype.runInNewContext = function (context) { + var ctx = Script.createContext(context); + var res = this.runInContext(ctx); + + if (context) { + forEach(Object_keys(ctx), function (key) { + context[key] = ctx[key]; + }); } - var doc = exports.createEditSession(value); - var editor = new Editor(new Renderer(el), doc, options); - var env = { - document: doc, - editor: editor, - onResize: editor.resize.bind(editor, null) + + return res; +}; + +forEach(Object_keys(Script.prototype), function (name) { + exports[name] = Script[name] = function (code) { + var s = Script(code); + return s[name].apply(s, [].slice.call(arguments, 1)); }; - if (oldNode) - env.textarea = oldNode; - editor.on("destroy", function () { - env.editor.container.env = null; // prevent memory leak on old ie - }); - editor.container.env = editor.env = env; - return editor; +}); + +exports.isContext = function (context) { + return context instanceof Context; }; -exports.createEditSession = function (text, mode) { - var doc = new EditSession(text, mode); - doc.setUndoManager(new UndoManager()); - return doc; + +exports.createScript = function (code) { + return exports.Script(code); +}; + +exports.createContext = Script.createContext = function (context) { + var copy = new Context(); + if(typeof context === 'object') { + forEach(Object_keys(context), function (key) { + copy[key] = context[key]; + }); + } + return copy; }; -exports.Range = Range; -exports.Editor = Editor; -exports.EditSession = EditSession; -exports.UndoManager = UndoManager; -exports.VirtualRenderer = Renderer; -var version = exports.config.version; -exports.version = version; -}); (function() { - ace.require(["ace/ace"], function(a) { - if (a) { - a.config.init(true); - a.define = ace.define; - } - var global = (function () { - return this; - })(); - if (!global && typeof window != "undefined") global = window; // can happen in strict mode - if (!global && typeof self != "undefined") global = self; // can happen in webworker - - if (!global.ace) - global.ace = a; - for (var key in a) if (a.hasOwnProperty(key)) - global.ace[key] = a[key]; - global.ace["default"] = global.ace; - if ( true && module) { - module.exports = global.ace; - } - }); - })(); - /***/ }), -/***/ "../../../../../../../../node_modules/ace-builds/src-noconflict/ext-language_tools.js": -/*!********************************************************************************************!*\ - !*** ../../../../../../../../node_modules/ace-builds/src-noconflict/ext-language_tools.js ***! - \********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "../history/lib/config.js": +/*!********************************!*\ + !*** ../history/lib/config.js ***! + \********************************/ +/***/ ((__unused_webpack_module, exports) => { -/* module decorator */ module = __webpack_require__.nmd(module); -ace.define("ace/snippets",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/range_list","ace/keyboard/hash_handler","ace/tokenizer","ace/clipboard","ace/editor"], function(require, exports, module){"use strict"; -var dom = require("./lib/dom"); -var oop = require("./lib/oop"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var lang = require("./lib/lang"); -var Range = require("./range").Range; -var RangeList = require("./range_list").RangeList; -var HashHandler = require("./keyboard/hash_handler").HashHandler; -var Tokenizer = require("./tokenizer").Tokenizer; -var clipboard = require("./clipboard"); -var VARIABLES = { - CURRENT_WORD: function (editor) { - return editor.session.getTextRange(editor.session.getWordRange()); - }, - SELECTION: function (editor, name, indentation) { - var text = editor.session.getTextRange(); - if (indentation) - return text.replace(/\n\r?([ \t]*\S)/g, "\n" + indentation + "$1"); - return text; - }, - CURRENT_LINE: function (editor) { - return editor.session.getLine(editor.getCursorPosition().row); - }, - PREV_LINE: function (editor) { - return editor.session.getLine(editor.getCursorPosition().row - 1); - }, - LINE_INDEX: function (editor) { - return editor.getCursorPosition().row; - }, - LINE_NUMBER: function (editor) { - return editor.getCursorPosition().row + 1; - }, - SOFT_TABS: function (editor) { - return editor.session.getUseSoftTabs() ? "YES" : "NO"; - }, - TAB_SIZE: function (editor) { - return editor.session.getTabSize(); - }, - CLIPBOARD: function (editor) { - return clipboard.getText && clipboard.getText(); - }, - FILENAME: function (editor) { - return /[^/\\]*$/.exec(this.FILEPATH(editor))[0]; - }, - FILENAME_BASE: function (editor) { - return /[^/\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\.[^.]*$/, ""); - }, - DIRECTORY: function (editor) { - return this.FILEPATH(editor).replace(/[^/\\]*$/, ""); - }, - FILEPATH: function (editor) { return "/not implemented.txt"; }, - WORKSPACE_NAME: function () { return "Unknown"; }, - FULLNAME: function () { return "Unknown"; }, - BLOCK_COMMENT_START: function (editor) { - var mode = editor.session.$mode || {}; - return mode.blockComment && mode.blockComment.start || ""; - }, - BLOCK_COMMENT_END: function (editor) { - var mode = editor.session.$mode || {}; - return mode.blockComment && mode.blockComment.end || ""; - }, - LINE_COMMENT: function (editor) { - var mode = editor.session.$mode || {}; - return mode.lineCommentStart || ""; - }, - CURRENT_YEAR: date.bind(null, { year: "numeric" }), - CURRENT_YEAR_SHORT: date.bind(null, { year: "2-digit" }), - CURRENT_MONTH: date.bind(null, { month: "numeric" }), - CURRENT_MONTH_NAME: date.bind(null, { month: "long" }), - CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: "short" }), - CURRENT_DATE: date.bind(null, { day: "2-digit" }), - CURRENT_DAY_NAME: date.bind(null, { weekday: "long" }), - CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: "short" }), - CURRENT_HOUR: date.bind(null, { hour: "2-digit", hour12: false }), - CURRENT_MINUTE: date.bind(null, { minute: "2-digit" }), - CURRENT_SECOND: date.bind(null, { second: "2-digit" }) -}; -VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION; -function date(dateFormat) { - var str = new Date().toLocaleString("en-us", dateFormat); - return str.length == 1 ? "0" + str : str; -} -var SnippetManager = /** @class */ (function () { - function SnippetManager() { - this.snippetMap = {}; - this.snippetNameMap = {}; - this.variables = VARIABLES; - } - SnippetManager.prototype.getTokenizer = function () { - return SnippetManager["$tokenizer"] || this.createTokenizer(); - }; - SnippetManager.prototype.createTokenizer = function () { - function TabstopToken(str) { - str = str.substr(1); - if (/^\d+$/.test(str)) - return [{ tabstopId: parseInt(str, 10) }]; - return [{ text: str }]; - } - function escape(ch) { - return "(?:[^\\\\" + ch + "]|\\\\.)"; - } - var formatMatcher = { - regex: "/(" + escape("/") + "+)/", - onMatch: function (val, state, stack) { - var ts = stack[0]; - ts.fmtString = true; - ts.guard = val.slice(1, -1); - ts.flag = ""; - return ""; - }, - next: "formatString" +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "../history/lib/graph.js": +/*!*******************************!*\ + !*** ../history/lib/graph.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.HistoryGraph = void 0; +__webpack_require__(/*! d3-transition */ "../../node_modules/d3-transition/src/index.js"); +const d3_color_1 = __webpack_require__(/*! d3-color */ "../../node_modules/d3-color/src/index.js"); +const d3_scale_1 = __webpack_require__(/*! d3-scale */ "../../node_modules/d3-scale/src/index.js"); +const d3_scale_chromatic_1 = __webpack_require__(/*! d3-scale-chromatic */ "../../node_modules/d3-scale-chromatic/src/index.js"); +const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); +const d3_zoom_1 = __webpack_require__(/*! d3-zoom */ "../../node_modules/d3-zoom/src/index.js"); +const fs = __webpack_require__(/*! file-saver */ "../../node_modules/file-saver/dist/FileSaver.min.js"); +class HistoryGraph { + constructor(graphId, div, config = {}) { + this.nodes = []; + this.versionNodes = []; + this.edges = []; + this.maxX = 0; + this.maxY = 0; + this.maxId = 0; + this.i = 0; + var defaultConfig = { + customSelectNode: (g, d) => false, + customCtrlClick: (g, d) => false, + customForm: (g, form) => null, + customSize: (g) => [g.config.width, g.config.height], + customWindowTabCommand: (trialIdSimplified, trialId, command) => false, + hintMessage: "Ctrl+Shift click or ⌘+Shift click to diff trials", + width: 200, + height: 100, + radius: 20, + moveX: 20, + moveY: 25, + moveY2: 10, + spacing: 17, + margin: 50, + fontSize: 10, + useTooltip: false, }; - SnippetManager["$tokenizer"] = new Tokenizer({ - start: [ - { regex: /\\./, onMatch: function (val, state, stack) { - var ch = val[1]; - if (ch == "}" && stack.length) { - val = ch; - } - else if ("`$\\".indexOf(ch) != -1) { - val = ch; - } - return [val]; - } }, - { regex: /}/, onMatch: function (val, state, stack) { - return [stack.length ? stack.shift() : val]; - } }, - { regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken }, - { regex: /\$\{[\dA-Z_a-z]+/, onMatch: function (str, state, stack) { - var t = TabstopToken(str.substr(1)); - stack.unshift(t[0]); - return t; - }, next: "snippetVar" }, - { regex: /\n/, token: "newline", merge: false } - ], - snippetVar: [ - { regex: "\\|" + escape("\\|") + "*\\|", onMatch: function (val, state, stack) { - var choices = val.slice(1, -1).replace(/\\[,|\\]|,/g, function (operator) { - return operator.length == 2 ? operator[1] : "\x00"; - }).split("\x00").map(function (value) { - return { value: value }; - }); - stack[0].choices = choices; - return [choices[0]]; - }, next: "start" }, - formatMatcher, - { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start" } - ], - formatString: [ - { regex: /:/, onMatch: function (val, state, stack) { - if (stack.length && stack[0].expectElse) { - stack[0].expectElse = false; - stack[0].ifEnd = { elseEnd: stack[0] }; - return [stack[0].ifEnd]; - } - return ":"; - } }, - { regex: /\\./, onMatch: function (val, state, stack) { - var ch = val[1]; - if (ch == "}" && stack.length) - val = ch; - else if ("`$\\".indexOf(ch) != -1) - val = ch; - else if (ch == "n") - val = "\n"; - else if (ch == "t") - val = "\t"; - else if ("ulULE".indexOf(ch) != -1) - val = { changeCase: ch, local: ch > "a" }; - return [val]; - } }, - { regex: "/\\w*}", onMatch: function (val, state, stack) { - var next = stack.shift(); - if (next) - next.flag = val.slice(1, -1); - this.next = next && next.tabstopId ? "start" : ""; - return [next || val]; - }, next: "start" }, - { regex: /\$(?:\d+|\w+)/, onMatch: function (val, state, stack) { - return [{ text: val.slice(1) }]; - } }, - { regex: /\${\w+/, onMatch: function (val, state, stack) { - var token = { text: val.slice(2) }; - stack.unshift(token); - return [token]; - }, next: "formatStringVar" }, - { regex: /\n/, token: "newline", merge: false }, - { regex: /}/, onMatch: function (val, state, stack) { - var next = stack.shift(); - this.next = next && next.tabstopId ? "start" : ""; - return [next || val]; - }, next: "start" } - ], - formatStringVar: [ - { regex: /:\/\w+}/, onMatch: function (val, state, stack) { - var ts = stack[0]; - ts.formatFunction = val.slice(2, -1); - return [stack.shift()]; - }, next: "formatString" }, - formatMatcher, - { regex: /:[\?\-+]?/, onMatch: function (val, state, stack) { - if (val[1] == "+") - stack[0].ifEnd = stack[0]; - if (val[1] == "?") - stack[0].expectElse = true; - }, next: "formatString" }, - { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "formatString" } - ] - }); - return SnippetManager["$tokenizer"]; - }; - SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) { - return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) { - return x.value || x; + this.config = Object.assign({}, defaultConfig, config); + this.graphId = graphId; + this.zoom = (0, d3_zoom_1.zoom)() + .on("zoom", (event) => { + return this.zoomFunction(event); + }) + .on("start", () => (0, d3_selection_1.select)('body').style("cursor", "move")) + .on("end", () => (0, d3_selection_1.select)('body').style("cursor", "auto")) + .wheelDelta(function () { + const e = event; + return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000; }); - }; - SnippetManager.prototype.getVariableValue = function (editor, name, indentation) { - if (/^\d+$/.test(name)) - return (this.variables.__ || {})[name] || ""; - if (/^[A-Z]\d+$/.test(name)) - return (this.variables[name[0] + "__"] || {})[name.substr(1)] || ""; - name = name.replace(/^TM_/, ""); - if (!this.variables.hasOwnProperty(name)) - return ""; - var value = this.variables[name]; - if (typeof value == "function") - value = this.variables[name](editor, name, indentation); - return value == null ? "" : value; - }; - SnippetManager.prototype.tmStrFormat = function (str, ch, editor) { - if (!ch.fmt) - return str; - var flag = ch.flag || ""; - var re = ch.guard; - re = new RegExp(re, flag.replace(/[^gim]/g, "")); - var fmtTokens = typeof ch.fmt == "string" ? this.tokenizeTmSnippet(ch.fmt, "formatString") : ch.fmt; - var _self = this; - var formatted = str.replace(re, function () { - var oldArgs = _self.variables.__; - _self.variables.__ = [].slice.call(arguments); - var fmtParts = _self.resolveVariables(fmtTokens, editor); - var gChangeCase = "E"; - for (var i = 0; i < fmtParts.length; i++) { - var ch = fmtParts[i]; - if (typeof ch == "object") { - fmtParts[i] = ""; - if (ch.changeCase && ch.local) { - var next = fmtParts[i + 1]; - if (next && typeof next == "string") { - if (ch.changeCase == "u") - fmtParts[i] = next[0].toUpperCase(); - else - fmtParts[i] = next[0].toLowerCase(); - fmtParts[i + 1] = next.substr(1); - } - } - else if (ch.changeCase) { - gChangeCase = ch.changeCase; - } - } - else if (gChangeCase == "U") { - fmtParts[i] = ch.toUpperCase(); - } - else if (gChangeCase == "L") { - fmtParts[i] = ch.toLowerCase(); - } - } - _self.variables.__ = oldArgs; - return fmtParts.join(""); + this.div = (0, d3_selection_1.select)(div); + let form = (0, d3_selection_1.select)(div) + .append("form") + .classed("history-toolbar", true); + this.svg = (0, d3_selection_1.select)(div) + .append("div") + .append("svg") + .attr("width", this.config.width) + .attr("height", this.config.height) + .call(this.zoom) + .on("mouseup", () => this.svgMouseUp()); + this.state = { + selectedNode: null, + mouseDownNode: null, + justScale: false + }; + // Tooltip + this.tooltipDiv = (0, d3_selection_1.select)("body").append("div") + .classed("now-tooltip now-history-tooltip", true) + .style("opacity", 0) + .style("max-width", "250px") + .on("mouseout", () => { + this.closeTooltip(); }); - return formatted; - }; - SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) { - if (ch.formatFunction == "upcase") - return str.toUpperCase(); - if (ch.formatFunction == "downcase") - return str.toLowerCase(); - return str; - }; - SnippetManager.prototype.resolveVariables = function (snippet, editor) { - var result = []; - var indentation = ""; - var afterNewLine = true; - for (var i = 0; i < snippet.length; i++) { - var ch = snippet[i]; - if (typeof ch == "string") { - result.push(ch); - if (ch == "\n") { - afterNewLine = true; - indentation = ""; - } - else if (afterNewLine) { - indentation = /^\t*/.exec(ch)[0]; - afterNewLine = /\S/.test(ch); - } - continue; - } - if (!ch) - continue; - afterNewLine = false; - if (ch.fmtString) { - var j = snippet.indexOf(ch, i + 1); - if (j == -1) - j = snippet.length; - ch.fmt = snippet.slice(i + 1, j); - i = j; - } - if (ch.text) { - var value = this.getVariableValue(editor, ch.text, indentation) + ""; - if (ch.fmtString) - value = this.tmStrFormat(value, ch, editor); - if (ch.formatFunction) - value = this.tmFormatFunction(value, ch, editor); - if (value && !ch.ifEnd) { - result.push(value); - gotoNext(ch); - } - else if (!value && ch.ifEnd) { - gotoNext(ch.ifEnd); - } - } - else if (ch.elseEnd) { - gotoNext(ch.elseEnd); - } - else if (ch.tabstopId != null) { - result.push(ch); - } - else if (ch.changeCase != null) { - result.push(ch); - } - } - function gotoNext(ch) { - var i1 = snippet.indexOf(ch, i + 1); - if (i1 != -1) - i = i1; - } - return result; - }; - SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) { - var processedSnippet = processSnippetText.call(this, editor, snippetText); - return processedSnippet.text; - }; - SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) { - if (options === void 0) { options = {}; } - var processedSnippet = processSnippetText.call(this, editor, snippetText, options); - var range = editor.getSelectionRange(); - var end = editor.session.replace(range, processedSnippet.text); - var tabstopManager = new TabstopManager(editor); - var selectionId = editor.inVirtualSelectionMode && editor.selection.index; - tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId); - }; - SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) { - if (options === void 0) { options = {}; } - var self = this; - if (editor.inVirtualSelectionMode) - return self.insertSnippetForSelection(editor, snippetText, options); - editor.forEachSelection(function () { - self.insertSnippetForSelection(editor, snippetText, options); - }, null, { keepOrder: true }); - if (editor.tabstopManager) - editor.tabstopManager.tabNext(); - }; - SnippetManager.prototype.$getScope = function (editor) { - var scope = editor.session.$mode.$id || ""; - scope = scope.split("/").pop(); - if (scope === "html" || scope === "php") { - if (scope === "php" && !editor.session.$mode.inlinePhp) - scope = "html"; - var c = editor.getCursorPosition(); - var state = editor.session.getState(c.row); - if (typeof state === "object") { - state = state[0]; + this.createToolbar(form); + this.createMarker('end-arrow', 'endarrow', '#000'); + this.g = this.svg.append("g") + .attr("id", this._graphId()) + .attr("transform", "translate(0,0)") + .classed('HistoryGraph', true); + } + createToolbar(form) { + let formdiv = form.append("div") + .classed("buttons", true); + this.config.customForm(this, formdiv); + // Reset zoom + formdiv.append("a") + .classed("toollink", true) + .attr("id", "history-" + this.graphId + "-history-zoom") + .attr("href", "#") + .attr("title", "Restore zoom") + .on("click", () => this.restorePosition()) + .append("i") + .classed("fa fa-eye", true); + // Toggle Tooltips + let tooltipsToggle = formdiv.append("input") + .attr("id", "history-" + this.graphId + "-toolbar-tooltips") + .attr("type", "checkbox") + .attr("name", "history-toolbar-tooltips") + .attr("value", "show") + .property("checked", this.config.useTooltip) + .on("change", () => { + this.closeTooltip(); + this.config.useTooltip = tooltipsToggle.property("checked"); + }); + formdiv.append("label") + .attr("for", "history-" + this.graphId + "-toolbar-tooltips") + .attr("title", "Show tooltips on mouse hover") + .append("i") + .classed("fa fa-comment", true); + // Download SVG + formdiv.append("a") + .classed("toollink", true) + .attr("id", "history-" + this.graphId + "-download") + .attr("href", "#") + .attr("title", "Download graph SVG") + .on("click", () => { + this.download(); + }) + .append("i") + .classed("fa fa-download", true); + // Set Font Size + let fontToggle = formdiv.append("input") + .attr("id", "history-" + this.graphId + "-toolbar-fonts") + .attr("type", "checkbox") + .attr("name", "history-toolbar-fonts") + .attr("value", "show") + .property("checked", false) + .on("change", () => { + let display = fontToggle.property("checked") ? "inline-block" : "none"; + fontSize.style("display", display); + }); + formdiv.append("label") + .attr("for", "history-" + this.graphId + "-toolbar-fonts") + .attr("title", "Set font size") + .append("i") + .classed("fa fa-font", true); + let fontSize = formdiv.append("input") + .attr("type", "number") + .attr("value", this.config.fontSize) + .style("width", "50px") + .style("display", "none") + .attr("title", "Node font size") + .on("change", () => { + this.config.fontSize = fontSize.property("value"); + this.svg.selectAll("text.trial-id") + .attr("font-size", this.config.fontSize); + }); + // Submit + formdiv.append("input") + .attr("type", "submit") + .attr("name", "prevent-enter") + .attr("onclick", "return false;") + .style("display", "none"); + formdiv.append("div"); + formdiv.append("div") + .text(this.config.hintMessage) + .style('font-family', 'sans-serif') + .style('font-size', '12px') + .style('pointer-events', 'none'); + } + load(data) { + let nodes = [], otherNodes = [], edges = [], spacing = this.config.spacing, margin = this.config.margin; + let spacing2 = 2 * spacing, spacing4 = 4 * spacing, start = margin, max = 0, id = 0, last = data.nodes.length - 1, tid = 0, useVersion = false; + let levels = []; + for (var i = 0; i <= last; i++) { + let node = data.nodes[i]; + var previous = levels[node.level]; + if (previous == undefined) { + previous = -1; } - if (state.substring) { - if (state.substring(0, 3) == "js-") - scope = "javascript"; - else if (state.substring(0, 4) == "css-") - scope = "css"; - else if (state.substring(0, 4) == "php-") - scope = "php"; + var trials = node.trials; + if (trials == undefined) { + trials = []; } + levels[node.level] = Math.max(previous, trials.length); } - return scope; - }; - SnippetManager.prototype.getActiveScopes = function (editor) { - var scope = this.$getScope(editor); - var scopes = [scope]; - var snippetMap = this.snippetMap; - if (snippetMap[scope] && snippetMap[scope].includeScopes) { - scopes.push.apply(scopes, snippetMap[scope].includeScopes); - } - scopes.push("_"); - return scopes; - }; - SnippetManager.prototype.expandWithTab = function (editor, options) { - var self = this; - var result = editor.forEachSelection(function () { - return self.expandSnippetForSelection(editor, options); - }, null, { keepOrder: true }); - if (result && editor.tabstopManager) - editor.tabstopManager.tabNext(); - return result; - }; - SnippetManager.prototype.expandSnippetForSelection = function (editor, options) { - var cursor = editor.getCursorPosition(); - var line = editor.session.getLine(cursor.row); - var before = line.substring(0, cursor.column); - var after = line.substr(cursor.column); - var snippetMap = this.snippetMap; - var snippet; - this.getActiveScopes(editor).some(function (scope) { - var snippets = snippetMap[scope]; - if (snippets) - snippet = this.findMatchingSnippet(snippets, before, after); - return !!snippet; - }, this); - if (!snippet) - return false; - if (options && options.dryRun) - return true; - editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length); - this.variables.M__ = snippet.matchBefore; - this.variables.T__ = snippet.matchAfter; - this.insertSnippetForSelection(editor, snippet.content); - this.variables.M__ = this.variables.T__ = null; - return true; - }; - SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) { - for (var i = snippetList.length; i--;) { - var s = snippetList[i]; - if (s.startRe && !s.startRe.test(before)) - continue; - if (s.endRe && !s.endRe.test(after)) - continue; - if (!s.startRe && !s.endRe) - continue; - s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; - s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; - s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; - s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; - return s; - } - }; - SnippetManager.prototype.register = function (snippets, scope) { - var snippetMap = this.snippetMap; - var snippetNameMap = this.snippetNameMap; - var self = this; - if (!snippets) - snippets = []; - function wrapRegexp(src) { - if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) - src = "(?:" + src + ")"; - return src || ""; + let levelsy = []; + var current = margin; + for (var i = 0; i <= levels.length; i++) { + levelsy[i] = current; + current += spacing2 + levels[i] * spacing2; } - function guardedRegexp(re, guard, opening) { - re = wrapRegexp(re); - guard = wrapRegexp(guard); - if (opening) { - re = guard + re; - if (re && re[re.length - 1] != "$") - re = re + "$"; + for (var i = 0; i <= last; i++) { + let node = data.nodes[i]; + let x = start + spacing4 * id; + let y = levelsy[node.level]; + var new_node = { + id: id, + display: node.display, + x: x, + y: y, + title: node.id.toString(), + info: node, + radius: this.config.radius, + gradient: false, + status: node.status + }; + nodes.push(new_node); + if (typeof (node.trials) != "undefined") { + useVersion = true; + for (var j = 0; j < node.trials.length; j++) { + let trialNode = node.trials[j]; + let ny = y + (j + 1) * spacing2 + spacing; + otherNodes.push({ + id: tid, + display: trialNode.display, + x: x + this.config.radius / 2, + y: ny, + title: trialNode.id.toString(), + info: trialNode, + tooltip: trialNode.tooltip, + radius: this.config.radius / 2, + gradient: true, + status: trialNode.status + }); + tid += 1; + max = Math.max(max, y); + } } else { - re = re + guard; - if (re && re[0] != "^") - re = "^" + re; + new_node.tooltip = node.tooltip; } - return new RegExp(re); + max = Math.max(max, y); + this.maxX = x; + id += 1; } - function addSnippet(s) { - if (!s.scope) - s.scope = scope || "_"; - scope = s.scope; - if (!snippetMap[scope]) { - snippetMap[scope] = []; - snippetNameMap[scope] = {}; - } - var map = snippetNameMap[scope]; - if (s.name) { - var old = map[s.name]; - if (old) - self.unregister(old); - map[s.name] = s; - } - snippetMap[scope].push(s); - if (s.prefix) - s.tabTrigger = s.prefix; - if (!s.content && s.body) - s.content = Array.isArray(s.body) ? s.body.join("\n") : s.body; - if (s.tabTrigger && !s.trigger) { - if (!s.guard && /^\w/.test(s.tabTrigger)) - s.guard = "\\b"; - s.trigger = lang.escapeRegExp(s.tabTrigger); + max += spacing2; + this.maxY = max; + this.maxId = Math.max(tid, id); + for (var i = 0; i < data.edges.length; i++) { + let edge = Object.assign({}, data.edges[i]); + edge.id = edge.source + "-" + edge.target; + edge.source = nodes[edge.source]; + edge.target = nodes[edge.target]; + if (edge.source != edge.target) { + edges.push(edge); } - if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) - return; - s.startRe = guardedRegexp(s.trigger, s.guard, true); - s.triggerRe = new RegExp(s.trigger); - s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); - s.endTriggerRe = new RegExp(s.endTrigger); } - if (Array.isArray(snippets)) { - snippets.forEach(addSnippet); + if (useVersion) { + this.nodes = otherNodes; + this.versionNodes = nodes; } else { - Object.keys(snippets).forEach(function (key) { - addSnippet(snippets[key]); - }); - } - this._signal("registerSnippets", { scope: scope }); - }; - SnippetManager.prototype.unregister = function (snippets, scope) { - var snippetMap = this.snippetMap; - var snippetNameMap = this.snippetNameMap; - function removeSnippet(s) { - var nameMap = snippetNameMap[s.scope || scope]; - if (nameMap && nameMap[s.name]) { - delete nameMap[s.name]; - var map = snippetMap[s.scope || scope]; - var i = map && map.indexOf(s); - if (i >= 0) - map.splice(i, 1); - } - } - if (snippets.content) - removeSnippet(snippets); - else if (Array.isArray(snippets)) - snippets.forEach(removeSnippet); - }; - SnippetManager.prototype.parseSnippetFile = function (str) { - str = str.replace(/\r/g, ""); - var list = [], /**@type{Snippet}*/ snippet = {}; - var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; - var m; - while (m = re.exec(str)) { - if (m[1]) { - try { - snippet = JSON.parse(m[1]); - list.push(snippet); - } - catch (e) { } - } - if (m[4]) { - snippet.content = m[4].replace(/^\t/gm, ""); - list.push(snippet); - snippet = {}; - } - else { - var key = m[2], val = m[3]; - if (key == "regex") { - var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; - snippet.guard = guardRe.exec(val)[1]; - snippet.trigger = guardRe.exec(val)[1]; - snippet.endTrigger = guardRe.exec(val)[1]; - snippet.endGuard = guardRe.exec(val)[1]; - } - else if (key == "snippet") { - snippet.tabTrigger = val.match(/^\S*/)[0]; - if (!snippet.name) - snippet.name = val; - } - else if (key) { - snippet[key] = val; - } - } - } - return list; - }; - SnippetManager.prototype.getSnippetByName = function (name, editor) { - var snippetMap = this.snippetNameMap; - var snippet; - this.getActiveScopes(editor).some(function (scope) { - var snippets = snippetMap[scope]; - if (snippets) - snippet = snippets[name]; - return !!snippet; - }, this); - return snippet; - }; - return SnippetManager; -}()); -oop.implement(SnippetManager.prototype, EventEmitter); -var processSnippetText = function (editor, snippetText, options) { - if (options === void 0) { options = {}; } - var cursor = editor.getCursorPosition(); - var line = editor.session.getLine(cursor.row); - var tabString = editor.session.getTabString(); - var indentString = line.match(/^\s*/)[0]; - if (cursor.column < indentString.length) - indentString = indentString.slice(0, cursor.column); - snippetText = snippetText.replace(/\r/g, ""); - var tokens = this.tokenizeTmSnippet(snippetText); - tokens = this.resolveVariables(tokens, editor); - tokens = tokens.map(function (x) { - if (x == "\n" && !options.excludeExtraIndent) - return x + indentString; - if (typeof x == "string") - return x.replace(/\t/g, tabString); - return x; - }); - var tabstops = []; - tokens.forEach(function (p, i) { - if (typeof p != "object") - return; - var id = p.tabstopId; - var ts = tabstops[id]; - if (!ts) { - ts = tabstops[id] = []; - ts.index = id; - ts.value = ""; - ts.parents = {}; - } - if (ts.indexOf(p) !== -1) - return; - if (p.choices && !ts.choices) - ts.choices = p.choices; - ts.push(p); - var i1 = tokens.indexOf(p, i + 1); - if (i1 === -1) - return; - var value = tokens.slice(i + 1, i1); - var isNested = value.some(function (t) { return typeof t === "object"; }); - if (isNested && !ts.value) { - ts.value = value; - } - else if (value.length && (!ts.value || typeof ts.value !== "string")) { - ts.value = value.join(""); - } - }); - tabstops.forEach(function (ts) { ts.length = 0; }); - var expanding = {}; - function copyValue(val) { - var copy = []; - for (var i = 0; i < val.length; i++) { - var p = val[i]; - if (typeof p == "object") { - if (expanding[p.tabstopId]) - continue; - var j = val.lastIndexOf(p, i - 1); - p = copy[j] || { tabstopId: p.tabstopId }; - } - copy[i] = p; + this.nodes = nodes; + this.versionNodes = []; } - return copy; + this.edges = edges; + this.updateWindow(); + this.restorePosition(); + this.update(); + this.menuOnRightClick(); + return nodes; } - for (var i = 0; i < tokens.length; i++) { - var p = tokens[i]; - if (typeof p != "object") - continue; - var id = p.tabstopId; - var ts = tabstops[id]; - var i1 = tokens.indexOf(p, i + 1); - if (expanding[id]) { - if (expanding[id] === p) { - delete expanding[id]; - Object.keys(expanding).forEach(function (parentId) { - ts.parents[parentId] = true; - }); - } - continue; - } - expanding[id] = p; - var value = ts.value; - if (typeof value !== "string") - value = copyValue(value); - else if (p.fmt) - value = this.tmStrFormat(value, p, editor); - tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p)); - if (ts.indexOf(p) === -1) - ts.push(p); + updateWindow() { + let size = this.config.customSize(this); + this.config.width = size[0]; + this.config.height = size[1]; + this.svg + .attr("width", size[0]) + .attr("height", size[1]); } - var row = 0, column = 0; - var text = ""; - tokens.forEach(function (t) { - if (typeof t === "string") { - var lines = t.split("\n"); - if (lines.length > 1) { - column = lines[lines.length - 1].length; - row += lines.length - 1; - } - else - column += t.length; - text += t; + update() { + var nodes = this.g.selectAll('g.node') + .data(this.nodes, (d) => d.id); + var edges = this.g.selectAll('g.link') + .data(this.edges, (d) => d.id); + var version = this.g.selectAll('g.version') + .data(this.versionNodes, (d) => d.id); + this.updateNodes(nodes); + this.updateVersionNodes(version); + this.updateLinks(edges); + } + restorePosition() { + let scale = this.config.height / this.maxY; + if (scale <= 1.0) { + this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity + .translate(this.config.width + - this.maxX * scale + - this.config.margin, 0) + .scale(scale)); } - else if (t) { - if (!t.start) - t.start = { row: row, column: column }; - else - t.end = { row: row, column: column }; + else { + this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity + .scale(1) + .translate(this.config.width + - this.maxX + - this.config.margin, 0)); } - }); - return { - text: text, - tabstops: tabstops, - tokens: tokens - }; -}; -var TabstopManager = /** @class */ (function () { - function TabstopManager(editor) { - this.index = 0; - this.ranges = []; - this.tabstops = []; - if (editor.tabstopManager) - return editor.tabstopManager; - editor.tabstopManager = this; - this.$onChange = this.onChange.bind(this); - this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; - this.$onChangeSession = this.onChangeSession.bind(this); - this.$onAfterExec = this.onAfterExec.bind(this); - this.attach(editor); + this.state.justScale = false; + } + selectNode(node) { + this.state.selectedNode = node; + this.config.customSelectNode(this, node); + this.svg.selectAll('.node[attr-trial="' + node.title + '"] > rect') + .attr('stroke', 'rgb(200, 238, 241)') + .classed('selected', true); } - TabstopManager.prototype.attach = function (editor) { - this.$openTabstops = null; - this.selectedTabstop = null; - this.editor = editor; - this.session = editor.session; - this.editor.on("change", this.$onChange); - this.editor.on("changeSelection", this.$onChangeSelection); - this.editor.on("changeSession", this.$onChangeSession); - this.editor.commands.on("afterExec", this.$onAfterExec); - this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); - }; - TabstopManager.prototype.detach = function () { - this.tabstops.forEach(this.removeTabstopMarkers, this); - this.ranges.length = 0; - this.tabstops.length = 0; - this.selectedTabstop = null; - this.editor.off("change", this.$onChange); - this.editor.off("changeSelection", this.$onChangeSelection); - this.editor.off("changeSession", this.$onChangeSession); - this.editor.commands.off("afterExec", this.$onAfterExec); - this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); - this.editor.tabstopManager = null; - this.session = null; - this.editor = null; - }; - TabstopManager.prototype.onChange = function (delta) { - var isRemove = delta.action[0] == "r"; - var selectedTabstop = this.selectedTabstop || {}; - var parents = selectedTabstop.parents || {}; - var tabstops = this.tabstops.slice(); - for (var i = 0; i < tabstops.length; i++) { - var ts = tabstops[i]; - var active = ts == selectedTabstop || parents[ts.index]; - ts.rangeList.$bias = active ? 0 : 1; - if (delta.action == "remove" && ts !== selectedTabstop) { - var parentActive = ts.parents && ts.parents[selectedTabstop.index]; - var startIndex = ts.rangeList.pointIndex(delta.start, parentActive); - startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1; - var endIndex = ts.rangeList.pointIndex(delta.end, parentActive); - endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1; - var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex); - for (var j = 0; j < toRemove.length; j++) - this.removeRange(toRemove[j]); + selectTrial(trialId) { + for (var node of this.nodes) { + if (node.title == trialId) { + this.selectNode(node); + return; } - ts.rangeList.$onChange(delta); } - var session = this.session; - if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue()) - this.detach(); - }; - TabstopManager.prototype.updateLinkedFields = function () { - var ts = this.selectedTabstop; - if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked) - return; - this.$inChange = true; - var session = this.session; - var text = session.getTextRange(ts.firstNonLinked); - for (var i = 0; i < ts.length; i++) { - var range = ts[i]; - if (!range.linked) - continue; - var original = range.original; - var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor); - session.replace(range, fmt); + } + download(name) { + var isFileSaverSupported = false; + try { + isFileSaverSupported = !!new Blob(); } - this.$inChange = false; - }; - TabstopManager.prototype.onAfterExec = function (e) { - if (e.command && !e.command.readOnly) - this.updateLinkedFields(); - }; - TabstopManager.prototype.onChangeSelection = function () { - if (!this.editor) - return; - var lead = this.editor.selection.lead; - var anchor = this.editor.selection.anchor; - var isEmpty = this.editor.selection.isEmpty(); - for (var i = 0; i < this.ranges.length; i++) { - if (this.ranges[i].linked) - continue; - var containsLead = this.ranges[i].contains(lead.row, lead.column); - var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); - if (containsLead && containsAnchor) - return; + catch (e) { + alert("blob not supported"); } - this.detach(); - }; - TabstopManager.prototype.onChangeSession = function () { - this.detach(); - }; - TabstopManager.prototype.tabNext = function (dir) { - var max = this.tabstops.length; - var index = this.index + (dir || 1); - index = Math.min(Math.max(index, 1), max); - if (index == max) - index = 0; - this.selectTabstop(index); - this.updateTabstopMarkers(); - if (index === 0) { - this.detach(); + name = (name === undefined) ? "history.svg" : name; + let gnode = this.g.node(); + var bbox = gnode.getBBox(); + var width = this.svg.attr("width"), height = this.svg.attr("height"); + this.g.attr("transform", "translate(" + (-bbox.x + 5) + ", " + (-bbox.y + 5) + ")"); + let svgNode = this.svg + .attr("title", "Trial") + .attr("version", 1.1) + .attr("width", bbox.width + 10) + .attr("height", bbox.height + 10) + .attr("xmlns", "http://www.w3.org/2000/svg") + .node(); + var html = svgNode.parentNode.innerHTML; + html = ' { + if (this.state.selectedNode == null) { + return false; + } + return cd.id === this.state.selectedNode.id; + }).select('rect') + .classed('selected', false) + .attr("stroke", "#000"); + this.state.selectedNode = null; + } + nodeMouseDown(event, d3node, d) { + event.stopPropagation(); + this.state.mouseDownNode = d; + this.closeTooltip(); + } + nodeMouseUp(event, d3node, d) { + event.stopPropagation(); + if (!this.state.mouseDownNode) { + return; } - this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); - if (this.selectedTabstop && this.selectedTabstop.choices) - this.editor.execCommand("startAutocomplete", { matches: this.selectedTabstop.choices }); - }; - TabstopManager.prototype.addTabstops = function (tabstops, start, end) { - var useLink = this.useLink || !this.editor.getOption("enableMultiselect"); - if (!this.$openTabstops) - this.$openTabstops = []; - if (!tabstops[0]) { - var p = Range.fromPoints(end, end); - moveRelative(p.start, start); - moveRelative(p.end, start); - tabstops[0] = [p]; - tabstops[0].index = 0; + if (this.state.justScale) { + this.state.justScale = false; } - var i = this.index; - var arg = [i + 1, 0]; - var ranges = this.ranges; - var snippetId = this.snippetId = (this.snippetId || 0) + 1; - tabstops.forEach(function (ts, index) { - var dest = this.$openTabstops[index] || ts; - dest.snippetId = snippetId; - for (var i = 0; i < ts.length; i++) { - var p = ts[i]; - var range = Range.fromPoints(p.start, p.end || p.start); - movePoint(range.start, start); - movePoint(range.end, start); - range.original = p; - range.tabstop = dest; - ranges.push(range); - if (dest != ts) - dest.unshift(range); - else - dest[i] = range; - if (p.fmtString || (dest.firstNonLinked && useLink)) { - range.linked = true; - dest.hasLinkedRanges = true; - } - else if (!dest.firstNonLinked) - dest.firstNonLinked = range; + else { + if (event.ctrlKey || event.shiftKey || event.altKey) { + this.config.customCtrlClick(this, d); + return; } - if (!dest.firstNonLinked) - dest.hasLinkedRanges = false; - if (dest === ts) { - arg.push(dest); - this.$openTabstops[index] = dest; + if (this.state.selectedNode) { + this.unselectNode(); } - this.addTabstopMarkers(dest); - dest.rangeList = dest.rangeList || new RangeList(); - dest.rangeList.$bias = 0; - dest.rangeList.addList(dest); - }, this); - if (arg.length > 2) { - if (this.tabstops.length) - arg.push(arg.splice(2, 1)[0]); - this.tabstops.splice.apply(this.tabstops, arg); + d3node + .attr('stroke', 'rgb(200, 238, 241)') + .classed('selected', true); + this.state.selectedNode = d; + this.config.customSelectNode(this, d); } - }; - TabstopManager.prototype.addTabstopMarkers = function (ts) { - var session = this.session; - ts.forEach(function (range) { - if (!range.markerId) - range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); + this.state.mouseDownNode = null; + } + svgMouseUp() { + if (this.state.justScale) { + this.state.justScale = false; + } + } + updateVersionNodes(nodes) { + var nodeEnter = nodes.enter().append("g") + .classed("version", true) + .attr("attr-trialid", (d) => d.title) + .attr("transform", (d) => { + return "translate(" + 0 + "," + 0 + ")"; }); - }; - TabstopManager.prototype.removeTabstopMarkers = function (ts) { - var session = this.session; - ts.forEach(function (range) { - session.removeMarker(range.markerId); - range.markerId = null; + // Circle for new nodes + nodeEnter.append('rect') + .attr("transform", (d) => { + return "translate(" + d.x + "," + d.y + ")"; + }) + .attr('width', (d) => 2 * d.radius) + .attr('height', (d) => 2 * d.radius) + .attr('rx', 0) + .attr('ry', 0) + //.attr('r', ) + .attr("stroke", "#000") + .attr("stroke-width", "2.5px") + .attr("fill", "#F6FBFF") + .attr("stroke", "#000") + .attr("stroke-width", "2.5px"); + nodeEnter.append('text') + .classed('trial-id', true) + .attr('font-family', 'sans-serif') + .attr('font-size', this.config.fontSize + 'px') + .attr('pointer-events', 'none') + .attr('x', (d) => d.radius) + .attr('y', (d) => d.radius + 4) + .attr('stroke', '#000') + .attr('text-anchor', 'middle') + //.attr('font-weight', 'bold') + .attr("transform", (d) => { + return "translate(" + d.x + "," + d.y + ")"; + }).text((d) => d.display); + nodeEnter.merge(nodes); // nodeUpdate + nodes.exit().remove(); // nodeExit + } + updateNodes(nodes) { + let self = this; + var nodeEnter = nodes.enter().append("g") + .classed("node", true) + .attr("attr-trialid", (d) => d.title) + .attr("cursor", "pointer") + .attr("transform", (d) => { + return "translate(" + 0 + "," + 0 + ")"; + }); + // Circle for new nodes + nodeEnter.append('rect') + .attr("transform", (d) => { + return "translate(" + d.x + "," + d.y + ")"; + }) + .attr('cursor', 'pointer') + .attr('title', (d) => d.info.display) + .attr('width', (d) => 2 * d.radius) + .attr('height', (d) => 2 * d.radius) + .attr('rx', (d) => 2 * d.radius) + .attr('ry', (d) => 2 * d.radius) + //.attr('r', ) + .attr("stroke", "#000") + .attr("stroke-width", "2.5px") + .attr("fill", function (d) { + var proportion = Math.round(200 * (1.0 - (parseInt(d.title) / self.maxId)) + 50); + if (d.status === 'unfinished') { + return d.gradient ? (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString() : "rgb(238, 200, 241)"; + } + if (d.status === 'finished') { + return d.gradient ? (0, d3_color_1.rgb)(proportion, proportion, proportion, 255).toString() : "#F6FBFF"; + } + if (d.status === 'backup') { + return d.gradient ? (0, d3_color_1.rgb)(255, 255, proportion, 255).toString() : "rgb(241, 238, 200)"; + } + return '#666'; + }) + .attr("stroke", function (d) { + return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : "#000"; + }) + .attr("stroke-width", "2.5px") + .on('mousedown', function (event, d) { + self.nodeMouseDown(event, (0, d3_selection_1.select)(this), d); + }).on('click', function (event, d) { + self.nodeMouseUp(event, (0, d3_selection_1.select)(this), d); + }).on('mouseover', function (event, d) { + if (!self.state.mouseDownNode && self.config.useTooltip) { + self.closeTooltip(); + self.showTooltip(event, d); + } + (0, d3_selection_1.select)(this) + .attr('stroke', 'rgb(200, 238, 241)'); + }).on('mouseout', function (event, d) { + (0, d3_selection_1.select)(this) + .attr("stroke", (d) => { + return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : "#000"; + }); + }) + .classed("custom-menu", true); + nodeEnter.append('text') + .classed('trial-id', true) + .attr('font-family', 'sans-serif') + .attr('font-size', this.config.fontSize + 'px') + .attr('pointer-events', 'none') + .attr('x', (d) => d.radius) + .attr('y', (d) => d.radius + 4) + .attr('stroke', '#000') + .attr('text-anchor', 'middle') + //.attr('font-weight', 'bold') + .attr("transform", (d) => { + return "translate(" + d.x + "," + d.y + ")"; + }).text((d) => d.gradient ? "" : d.display); + nodeEnter.merge(nodes); // nodeUpdate + nodes.exit().remove(); // nodeExit + } + updateLinks(link) { + // Enter any new links + let colors = (0, d3_scale_1.scaleOrdinal)(d3_scale_chromatic_1.schemeCategory10); + var linkEnter = link.enter().insert('path', 'g') + .classed('link', true) + .attr('cursor', 'crosshair') + .attr('fill', 'none') + .attr('stroke', '#000') + .attr('stroke-width', '4px'); + linkEnter + .attr("d", (d) => { + var deltaX = d.target.x - d.source.x, deltaY = d.target.y - d.source.y, dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY), normX = deltaX / dist, normY = deltaY / dist, sourcePadding = this.config.radius - 5, targetPadding = this.config.radius + (d.right ? 3 : -5), sourceX = d.source.x + this.config.radius + (sourcePadding * normX), sourceY = d.source.y + this.config.radius + (sourcePadding * normY), targetX = d.target.x + this.config.radius - (targetPadding * normX), targetY = d.target.y + this.config.radius - (targetPadding * normY); + var step = 0; + if (d.level > 0) { + step += this.config.moveY; + step += (d.level - 1) * this.config.moveY2; + } + return `M ${sourceX}, ${sourceY} + C ${(sourceX - this.config.moveX / 2)} ${sourceY} + ${(sourceX - this.config.moveX / 2)} ${(sourceY + 3 * step / 4)} + ${(sourceX - this.config.moveX)} ${(sourceY + step)} + L ${(sourceX - this.config.moveX)} ${(sourceY + step)} + ${(targetX + this.config.moveX)} ${(sourceY + step)} + C ${(targetX + this.config.moveX / 2)} ${(sourceY + 3 * step / 4)} + ${(targetX + this.config.moveX / 2)} ${sourceY} + ${targetX}, ${targetY}`; + }) + .attr('marker-end', (d) => { + return d.right ? 'url(#end-arrow)' : ''; + }) + .attr('stroke', (d) => { + return (0, d3_color_1.rgb)(colors(d.level.toString())).darker().toString(); + }); + // Update + linkEnter.merge(link); // linkUpdate + // Remove any exiting links + link.exit().remove(); // linkExit + } + zoomFunction(event) { + this.state.justScale = true; + this.closeTooltip(); + this.transform = event.transform; + this.g.attr("transform", event.transform); + } + _graphId() { + return "history-graph-" + this.graphId; + } + menuOnRightClick() { + let rightClickMenu = document.getElementById("context-menu"); + // Set up an event handler for the documnt right click + document.addEventListener("contextmenu", function (event) { + var _a; + //open right click menu + let target = event.target; + if (target && target.classList.contains("custom-menu")) { + event.preventDefault(); + if (rightClickMenu) { + rightClickMenu.setAttribute("selected-trial", (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("attr-trialid")); + rightClickMenu.setAttribute("selected-trial-simplified", target.getAttribute("title")); + rightClickMenu.style.top = (event.pageY - 10).toString(); + rightClickMenu.style.left = (event.pageX - 90).toString(); + rightClickMenu.style.display = "block"; + rightClickMenu.classList.add("show"); + } + } + }); + // close the menu + document.addEventListener("click", function (event) { + if (rightClickMenu) { + rightClickMenu.style.display = "none"; + rightClickMenu.classList.remove("show"); + } }); - }; - TabstopManager.prototype.updateTabstopMarkers = function () { - if (!this.selectedTabstop) - return; - var currentSnippetId = this.selectedTabstop.snippetId; - if (this.selectedTabstop.index === 0) { - currentSnippetId--; - } - this.tabstops.forEach(function (ts) { - if (ts.snippetId === currentSnippetId) - this.addTabstopMarkers(ts); - else - this.removeTabstopMarkers(ts); - }, this); - }; - TabstopManager.prototype.removeRange = function (range) { - var i = range.tabstop.indexOf(range); - if (i != -1) - range.tabstop.splice(i, 1); - i = this.ranges.indexOf(range); - if (i != -1) - this.ranges.splice(i, 1); - i = range.tabstop.rangeList.ranges.indexOf(range); - if (i != -1) - range.tabstop.splice(i, 1); - this.session.removeMarker(range.markerId); - if (!range.tabstop.length) { - i = this.tabstops.indexOf(range.tabstop); - if (i != -1) - this.tabstops.splice(i, 1); - if (!this.tabstops.length) - this.detach(); - } - }; - return TabstopManager; -}()); -TabstopManager.prototype.keyboardHandler = new HashHandler(); -TabstopManager.prototype.keyboardHandler.bindKeys({ - "Tab": function (editor) { - if (exports.snippetManager && exports.snippetManager.expandWithTab(editor)) - return; - editor.tabstopManager.tabNext(1); - editor.renderer.scrollCursorIntoView(); - }, - "Shift-Tab": function (editor) { - editor.tabstopManager.tabNext(-1); - editor.renderer.scrollCursorIntoView(); - }, - "Esc": function (editor) { - editor.tabstopManager.detach(); } -}); -var movePoint = function (point, diff) { - if (point.row == 0) - point.column += diff.column; - point.row += diff.row; -}; -var moveRelative = function (point, start) { - if (point.row == start.row) - point.column -= start.column; - point.row -= start.row; +} +exports.HistoryGraph = HistoryGraph; + + +/***/ }), + +/***/ "../history/lib/index.js": +/*!*******************************!*\ + !*** ../history/lib/index.js ***! + \*******************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; -dom.importCssString("\n.ace_snippet-marker {\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n background: rgba(194, 193, 208, 0.09);\n border: 1px dotted rgba(211, 208, 235, 0.62);\n position: absolute;\n}", "snippets.css", false); -exports.snippetManager = new SnippetManager(); -var Editor = require("./editor").Editor; -(function () { - this.insertSnippet = function (content, options) { - return exports.snippetManager.insertSnippet(this, content, options); - }; - this.expandSnippet = function (options) { - return exports.snippetManager.expandWithTab(this, options); - }; -}).call(Editor.prototype); +Object.defineProperty(exports, "__esModule", ({ value: true })); +__exportStar(__webpack_require__(/*! ./config */ "../history/lib/config.js"), exports); +__exportStar(__webpack_require__(/*! ./structures */ "../history/lib/structures.js"), exports); +__exportStar(__webpack_require__(/*! ./graph */ "../history/lib/graph.js"), exports); + + +/***/ }), + +/***/ "../history/lib/structures.js": +/*!************************************!*\ + !*** ../history/lib/structures.js ***! + \************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css ***! + \***************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.lm-AccordionPanel .lm-AccordionPanel-title { + box-sizing: border-box; + padding: 0px 10px; + background: #e5e5e5; + border: 1px solid #c0c0c0; + border-bottom: none; + font: + 12px Helvetica, + Arial, + sans-serif; + min-height: 22px; + max-height: 22px; + min-width: 35px; + line-height: 20px; + margin: 0px; +} + +.lm-AccordionPanel .lm-AccordionPanel-title:focus, +.lm-AccordionPanel .lm-AccordionPanel-title:hover { + background: #dbdbdb; +} + +.lm-AccordionPanel .lm-AccordionPanel-title:focus, +.lm-AccordionPanel + .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) { + border: 1px solid lightskyblue; +} + +.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) { + border-bottom: 1px solid #c0c0c0; +} + +.lm-AccordionPanel + .lm-AccordionPanel-title.lm-mod-expanded + .lm-AccordionPanel-titleCollapser:before { + content: '\\f0d8'; + font-family: FontAwesome; +} + +.lm-AccordionPanel + .lm-AccordionPanel-title + .lm-AccordionPanel-titleCollapser:before { + content: '\\f0d7'; + font-family: FontAwesome; + position: absolute; + right: 10px; +} + +.lm-AccordionPanel .lm-AccordionPanel-titleLabel { + padding: 0px 5px; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/accordionpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,sBAAsB;EACtB,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,WAAW;AACb;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;;;EAGE,8BAA8B;AAChC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel .lm-AccordionPanel-title {\n box-sizing: border-box;\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n min-height: 22px;\n max-height: 22px;\n min-width: 35px;\n line-height: 20px;\n margin: 0px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\n background: #dbdbdb;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\n border: 1px solid lightskyblue;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title.lm-mod-expanded\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\f0d8';\n font-family: FontAwesome;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\f0d7';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\n padding: 0px 5px;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css ***! + \***************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + font-family: sans-serif; + background: #f5f5f5; +} + +.lm-CommandPalette-search { + padding: 8px; +} + +.lm-CommandPalette-wrapper { + padding: 4px 6px; + background: white; + border: 1px solid #e0e0e0; + position: relative; +} + +.lm-CommandPalette-input { + width: 92%; + border: none; + outline: none; + font-size: 16px; +} + +.lm-CommandPalette-header { + padding: 4px; + color: #757575; + font-size: 12px; + font-weight: 600; + background: #e1e1e1; + cursor: pointer; +} + +.lm-CommandPalette-header:hover::before { + content: '\\2026'; /* ellipsis */ + float: right; + margin-right: 4px; +} + +.lm-CommandPalette-header > mark { + background-color: transparent; + font-weight: bold; +} + +.lm-CommandPalette-item { + padding: 4px 8px; + color: #757575; + font-size: 13px; + font-weight: 500; +} + +.lm-CommandPalette-emptyMessage { + padding: 4px; + color: #757575; + font-size: 12px; + font-weight: 600; + text-align: center; +} + +.lm-CommandPalette-item.lm-mod-disabled { + color: rgba(0, 0, 0, 0.25); +} + +.lm-CommandPalette-item.lm-mod-active { + background: #7fdbff; +} + +.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) { + background: #e5e5e5; +} + +.lm-CommandPalette-itemIcon { + display: none; +} + +.lm-CommandPalette-itemLabel > mark { + background-color: transparent; + font-weight: bold; +} + +.lm-CommandPalette-item.lm-mod-disabled mark { + color: rgba(0, 0, 0, 0.4); +} + +.lm-CommandPalette-itemCaption { + color: #9e9e9e; + font-size: 11px; + font-weight: 400; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/commandpalette.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,gBAAgB,EAAE,aAAa;EAC/B,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n font-family: sans-serif;\n background: #f5f5f5;\n}\n\n.lm-CommandPalette-search {\n padding: 8px;\n}\n\n.lm-CommandPalette-wrapper {\n padding: 4px 6px;\n background: white;\n border: 1px solid #e0e0e0;\n position: relative;\n}\n\n.lm-CommandPalette-input {\n width: 92%;\n border: none;\n outline: none;\n font-size: 16px;\n}\n\n.lm-CommandPalette-header {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n background: #e1e1e1;\n cursor: pointer;\n}\n\n.lm-CommandPalette-header:hover::before {\n content: '\\2026'; /* ellipsis */\n float: right;\n margin-right: 4px;\n}\n\n.lm-CommandPalette-header > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item {\n padding: 4px 8px;\n color: #757575;\n font-size: 13px;\n font-weight: 500;\n}\n\n.lm-CommandPalette-emptyMessage {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n text-align: center;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-CommandPalette-item.lm-mod-active {\n background: #7fdbff;\n}\n\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\n background: #e5e5e5;\n}\n\n.lm-CommandPalette-itemIcon {\n display: none;\n}\n\n.lm-CommandPalette-itemLabel > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled mark {\n color: rgba(0, 0, 0, 0.4);\n}\n\n.lm-CommandPalette-itemCaption {\n color: #9e9e9e;\n font-size: 11px;\n font-weight: 400;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css ***! + \*********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2018, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-DataGrid { + min-width: 64px; + min-height: 64px; + border: 1px solid #a0a0a0; +} + +.lm-DataGrid-scrollCorner { + background-color: #f0f0f0; +} + +.lm-DataGrid-scrollCorner::after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 1px; + height: 1px; + background-color: #a0a0a0; +} + +.lm-DataGrid-cellEditorOccluder { + pointer-events: none; + position: absolute; + overflow: hidden; +} + +.lm-DataGrid-cellEditorContainer { + pointer-events: auto; + position: absolute; + background-color: #ffffff; + box-sizing: border-box; + box-shadow: 0px 0px 6px #006bf7; + border: 2px solid #006bf7; +} + +.lm-DataGrid-cellEditorContainer.lm-mod-invalid { + box-shadow: 0px 0px 6px red; + border: 2px solid red; +} + +.lm-DataGrid-cellEditorContainer > form { + width: 100%; + height: 100%; + overflow: hidden; +} + +.lm-DataGrid-cellEditorWidget { + width: 100%; + height: 100%; + outline: none; + box-sizing: border-box; +} + +.lm-DataGrid-cellEditorInput { + background-color: #ffffff; + border: 0; +} + +.lm-DataGrid-cellEditorCheckbox { + margin: 0; +} + +.lm-DataGrid-notification { + position: absolute; + display: flex; + overflow: visible; + animation: fade-in 300ms ease-out; +} + +.lm-DataGrid-notificationContainer { + box-shadow: 0px 2px 5px #999999; + border-radius: 3px; + background-color: white; + color: black; + border: 1px solid black; + font-family: sans-serif; + font-size: 13px; + padding: 4px; +} + +@keyframes fade-in { + 0% { + opacity: 0; + } + 50% { + opacity: 0.7; + } + 100% { + opacity: 1; + } +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/datagrid.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E;;AAE9E;EACE,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,yBAAyB;EACzB,sBAAsB;EACtB,+BAA+B;EAC/B,yBAAyB;AAC3B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,yBAAyB;EACzB,SAAS;AACX;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,iCAAiC;AACnC;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,uBAAuB;EACvB,YAAY;EACZ,uBAAuB;EACvB,uBAAuB;EACvB,eAAe;EACf,YAAY;AACd;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,YAAY;EACd;EACA;IACE,UAAU;EACZ;AACF","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DataGrid {\n min-width: 64px;\n min-height: 64px;\n border: 1px solid #a0a0a0;\n}\n\n.lm-DataGrid-scrollCorner {\n background-color: #f0f0f0;\n}\n\n.lm-DataGrid-scrollCorner::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n background-color: #a0a0a0;\n}\n\n.lm-DataGrid-cellEditorOccluder {\n pointer-events: none;\n position: absolute;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorContainer {\n pointer-events: auto;\n position: absolute;\n background-color: #ffffff;\n box-sizing: border-box;\n box-shadow: 0px 0px 6px #006bf7;\n border: 2px solid #006bf7;\n}\n\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\n box-shadow: 0px 0px 6px red;\n border: 2px solid red;\n}\n\n.lm-DataGrid-cellEditorContainer > form {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorWidget {\n width: 100%;\n height: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n.lm-DataGrid-cellEditorInput {\n background-color: #ffffff;\n border: 0;\n}\n\n.lm-DataGrid-cellEditorCheckbox {\n margin: 0;\n}\n\n.lm-DataGrid-notification {\n position: absolute;\n display: flex;\n overflow: visible;\n animation: fade-in 300ms ease-out;\n}\n\n.lm-DataGrid-notificationContainer {\n box-shadow: 0px 2px 5px #999999;\n border-radius: 3px;\n background-color: white;\n color: black;\n border: 1px solid black;\n font-family: sans-serif;\n font-size: 13px;\n padding: 4px;\n}\n\n@keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n opacity: 1;\n }\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css ***! + \**********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-DockPanel-overlay { + background: rgba(255, 255, 255, 0.6); + border: 1px dashed black; + transition-property: top, left, right, bottom; + transition-duration: 150ms; + transition-timing-function: ease; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/dockpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css": +/*!******************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css ***! + \******************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dragdrop_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../dragdrop/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_widgets_style_index_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../widgets/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_datagrid_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./datagrid.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css"); +// Imports + + + + + + + + + + + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dragdrop_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_widgets_style_index_css__WEBPACK_IMPORTED_MODULE_3__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_4__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_5__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_datagrid_css__WEBPACK_IMPORTED_MODULE_6__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_7__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_8__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_9__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_10__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_11__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2018, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n@import '@lumino/dragdrop/style/index.css';\n@import '@lumino/widgets/style/index.css';\n@import './accordionpanel.css';\n@import './commandpalette.css';\n@import './datagrid.css';\n@import './dockpanel.css';\n@import './menu.css';\n@import './menubar.css';\n@import './scrollbar.css';\n@import './tabbar.css';\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css ***! + \*****************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Menu { + padding: 3px 0px; + background: white; + color: rgba(0, 0, 0, 0.87); + border: 1px solid #c0c0c0; + font: + 12px Helvetica, + Arial, + sans-serif; + box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2); +} + +.lm-Menu-item.lm-mod-active { + background: #e5e5e5; +} + +.lm-Menu-item.lm-mod-disabled { + color: rgba(0, 0, 0, 0.25); +} + +.lm-Menu-itemIcon { + width: 21px; + padding: 4px 2px; +} + +.lm-Menu-itemLabel { + padding: 4px 35px 4px 2px; +} + +.lm-Menu-itemMnemonic { + text-decoration: underline; +} + +.lm-Menu-itemShortcut { + padding: 4px 0px; +} + +.lm-Menu-itemSubmenuIcon { + width: 16px; + padding: 4px 0px; +} + +.lm-Menu-item[data-type='separator'] > div { + padding: 0; + height: 9px; +} + +.lm-Menu-item[data-type='separator'] > div::after { + content: ''; + display: block; + position: relative; + top: 4px; + border-top: 1px solid #dddddd; +} + +.lm-Menu-itemIcon::before, +.lm-Menu-itemSubmenuIcon::before { + font-family: FontAwesome; +} + +.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before { + content: '\\f00c'; +} + +.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before { + content: '\\f0da'; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/menu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;EAC1B,yBAAyB;EACzB;;;cAGY;EACZ,0CAA0C;AAC5C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,WAAW;AACb;;AAEA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,6BAA6B;AAC/B;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n padding: 3px 0px;\n background: white;\n color: rgba(0, 0, 0, 0.87);\n border: 1px solid #c0c0c0;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-Menu-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-Menu-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-Menu-itemIcon {\n width: 21px;\n padding: 4px 2px;\n}\n\n.lm-Menu-itemLabel {\n padding: 4px 35px 4px 2px;\n}\n\n.lm-Menu-itemMnemonic {\n text-decoration: underline;\n}\n\n.lm-Menu-itemShortcut {\n padding: 4px 0px;\n}\n\n.lm-Menu-itemSubmenuIcon {\n width: 16px;\n padding: 4px 0px;\n}\n\n.lm-Menu-item[data-type='separator'] > div {\n padding: 0;\n height: 9px;\n}\n\n.lm-Menu-item[data-type='separator'] > div::after {\n content: '';\n display: block;\n position: relative;\n top: 4px;\n border-top: 1px solid #dddddd;\n}\n\n.lm-Menu-itemIcon::before,\n.lm-Menu-itemSubmenuIcon::before {\n font-family: FontAwesome;\n}\n\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\n content: '\\f00c';\n}\n\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\n content: '\\f0da';\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css": +/*!********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css ***! + \********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-MenuBar { + padding-left: 5px; + background: #fafafa; + color: rgba(0, 0, 0, 0.87); + border-bottom: 1px solid #dddddd; + font: + 13px Helvetica, + Arial, + sans-serif; +} + +.lm-MenuBar-menu { + transform: translateY(-1px); +} + +.lm-MenuBar-item { + padding: 4px 8px; + border-left: 1px solid transparent; + border-right: 1px solid transparent; +} + +.lm-MenuBar-item.lm-mod-active { + background: #e5e5e5; +} + +.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active { + z-index: 10001; + background: white; + border-left: 1px solid #c0c0c0; + border-right: 1px solid #c0c0c0; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); +} + +.lm-MenuBar-item:focus-visible { + outline: 2px solid #333; + outline-offset: -2px; +} + +.lm-MenuBar-item[aria-disabled='true'] { + color: rgba(0, 0, 0, 0.37); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/menubar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,iBAAiB;EACjB,mBAAmB;EACnB,0BAA0B;EAC1B,gCAAgC;EAChC;;;cAGY;AACd;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,kCAAkC;EAClC,mCAAmC;AACrC;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,iBAAiB;EACjB,8BAA8B;EAC9B,+BAA+B;EAC/B,0CAA0C;AAC5C;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,0BAA0B;AAC5B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n padding-left: 5px;\n background: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n border-bottom: 1px solid #dddddd;\n font:\n 13px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-MenuBar-menu {\n transform: translateY(-1px);\n}\n\n.lm-MenuBar-item {\n padding: 4px 8px;\n border-left: 1px solid transparent;\n border-right: 1px solid transparent;\n}\n\n.lm-MenuBar-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\n z-index: 10001;\n background: white;\n border-left: 1px solid #c0c0c0;\n border-right: 1px solid #c0c0c0;\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-MenuBar-item:focus-visible {\n outline: 2px solid #333;\n outline-offset: -2px;\n}\n\n.lm-MenuBar-item[aria-disabled='true'] {\n color: rgba(0, 0, 0, 0.37);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css ***! + \**********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); +// Imports + + + +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretleft.png */ "../../node_modules/@lumino/default-theme/images/caretleft.png"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretright.png */ "../../node_modules/@lumino/default-theme/images/caretright.png"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretup.png */ "../../node_modules/@lumino/default-theme/images/caretup.png"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretdown.png */ "../../node_modules/@lumino/default-theme/images/caretdown.png"), __webpack_require__.b); +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); +var ___CSS_LOADER_URL_REPLACEMENT_1___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); +var ___CSS_LOADER_URL_REPLACEMENT_2___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); +var ___CSS_LOADER_URL_REPLACEMENT_3___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-ScrollBar[data-orientation='horizontal'] { + min-height: 16px; + max-height: 16px; + min-width: 45px; + border-top: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] { + min-width: 16px; + max-width: 16px; + min-height: 45px; + border-left: 1px solid #a0a0a0; +} + +.lm-ScrollBar-button { + background-color: #f0f0f0; + background-position: center center; + min-height: 15px; + max-height: 15px; + min-width: 15px; + max-width: 15px; +} + +.lm-ScrollBar-button:hover { + background-color: #dadada; +} + +.lm-ScrollBar-button.lm-mod-active { + background-color: #cdcdcd; +} + +.lm-ScrollBar-track { + background: #f0f0f0; +} + +.lm-ScrollBar-thumb { + background: #cdcdcd; +} + +.lm-ScrollBar-thumb:hover { + background: #bababa; +} + +.lm-ScrollBar-thumb.lm-mod-active { + background: #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb { + height: 100%; + min-width: 15px; + border-left: 1px solid #a0a0a0; + border-right: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb { + width: 100%; + min-height: 15px; + border-top: 1px solid #a0a0a0; + border-bottom: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___}); +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___}); +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___}); +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___}); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/scrollbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,8BAA8B;AAChC;;AAEA;EACE,yBAAyB;EACzB,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,gCAAgC;AAClC;;AAEA;;EAEE,yDAA8C;AAChD;;AAEA;;EAEE,yDAA+C;AACjD;;AAEA;;EAEE,yDAA4C;AAC9C;;AAEA;;EAEE,yDAA8C;AAChD","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n min-height: 16px;\n max-height: 16px;\n min-width: 45px;\n border-top: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n min-width: 16px;\n max-width: 16px;\n min-height: 45px;\n border-left: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar-button {\n background-color: #f0f0f0;\n background-position: center center;\n min-height: 15px;\n max-height: 15px;\n min-width: 15px;\n max-width: 15px;\n}\n\n.lm-ScrollBar-button:hover {\n background-color: #dadada;\n}\n\n.lm-ScrollBar-button.lm-mod-active {\n background-color: #cdcdcd;\n}\n\n.lm-ScrollBar-track {\n background: #f0f0f0;\n}\n\n.lm-ScrollBar-thumb {\n background: #cdcdcd;\n}\n\n.lm-ScrollBar-thumb:hover {\n background: #bababa;\n}\n\n.lm-ScrollBar-thumb.lm-mod-active {\n background: #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\n height: 100%;\n min-width: 15px;\n border-left: 1px solid #a0a0a0;\n border-right: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\n width: 100%;\n min-height: 15px;\n border-top: 1px solid #a0a0a0;\n border-bottom: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(../images/caretleft.png);\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(../images/caretright.png);\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(../images/caretup.png);\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(../images/caretdown.png);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css ***! + \*******************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabBar { + min-height: 24px; + max-height: 24px; +} + +.lm-TabBar-content { + min-width: 0; + min-height: 0; + align-items: flex-end; + border-bottom: 1px solid #c0c0c0; +} + +.lm-TabBar-tab { + padding: 0px 10px; + background: #e5e5e5; + border: 1px solid #c0c0c0; + border-bottom: none; + font: + 12px Helvetica, + Arial, + sans-serif; + flex: 0 1 125px; + min-height: 20px; + max-height: 20px; + min-width: 35px; + margin-left: -1px; + line-height: 20px; +} + +.lm-TabBar-tabLabel .lm-TabBar-tabInput { + padding: 0px; + border: 0px; + font: + 12px Helvetica, + Arial, + sans-serif; +} + +.lm-TabBar-tab.lm-mod-current { + background: white; +} + +.lm-TabBar-tab:hover:not(.lm-mod-current) { + background: #f0f0f0; +} + +.lm-TabBar-tab:first-child { + margin-left: 0; +} + +.lm-TabBar-tab.lm-mod-current { + min-height: 23px; + max-height: 23px; + transform: translateY(1px); +} + +.lm-TabBar-tabIcon, +.lm-TabBar-tabLabel, +.lm-TabBar-tabCloseIcon { + display: inline-block; +} + +.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon { + margin-left: 4px; +} + +.lm-TabBar .lm-TabBar-addButton { + padding: 0px 6px; + border-bottom: 1px solid #c0c0c0; +} + +.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before { + content: '\\f00d'; + font-family: FontAwesome; +} + +.lm-TabBar .lm-TabBar-addButton:before { + content: '\\f067'; + font-family: FontAwesome; +} + +.lm-TabBar-tab.lm-mod-drag-image { + min-height: 23px; + max-height: 23px; + min-width: 125px; + border: none; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/tabbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX;;;cAGY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;AAEA;;;EAGE,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;AAC5C","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.lm-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab {\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n flex: 0 1 125px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n padding: 0px;\n border: 0px;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n background: white;\n}\n\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\n background: #f0f0f0;\n}\n\n.lm-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabLabel,\n.lm-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n.lm-TabBar .lm-TabBar-addButton {\n padding: 0px 6px;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\n content: '\\f00d';\n font-family: FontAwesome;\n}\n\n.lm-TabBar .lm-TabBar-addButton:before {\n content: '\\f067';\n font-family: FontAwesome;\n}\n\n.lm-TabBar-tab.lm-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css": +/*!*************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css ***! + \*************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-cursor-backdrop { + top: 0px; + left: 0px; + position: fixed; + width: 200px; + height: 200px; + margin-top: -100px; + margin-left: -100px; + will-change: transform; + z-index: 100; + scrollbar-width: none; + -ms-overflow-style: none; + overflow: scroll; +} + +.lm-cursor-backdrop::after { + content: ''; + height: 1200px; + width: 1200px; + display: block; +} + +.lm-cursor-backdrop::-webkit-scrollbar { + display: none; +} + +.lm-mod-drag-image { + top: 0px; + left: 0px; + will-change: transform; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/dragdrop/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,QAAQ;EACR,SAAS;EACT,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,wBAAwB;EACxB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,SAAS;EACT,sBAAsB;AACxB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-cursor-backdrop {\n top: 0px;\n left: 0px;\n position: fixed;\n width: 200px;\n height: 200px;\n margin-top: -100px;\n margin-left: -100px;\n will-change: transform;\n z-index: 100;\n scrollbar-width: none;\n -ms-overflow-style: none;\n overflow: scroll;\n}\n\n.lm-cursor-backdrop::after {\n content: '';\n height: 1200px;\n width: 1200px;\n display: block;\n}\n\n.lm-cursor-backdrop::-webkit-scrollbar {\n display: none;\n}\n\n.lm-mod-drag-image {\n top: 0px;\n left: 0px;\n will-change: transform;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css ***! + \*********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title { + /* Title is rotated for horizontal accordion panel using CSS */ + display: block; + transform-origin: top left; + transform: rotate(-90deg) translate(-100%); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/accordionpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\n /* Title is rotated for horizontal accordion panel using CSS */\n display: block;\n transform-origin: top left;\n transform: rotate(-90deg) translate(-100%);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css ***! + \*********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + display: flex; + flex-direction: column; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-CommandPalette-search { + flex: 0 0 auto; +} + +.lm-CommandPalette-content { + flex: 1 1 auto; + margin: 0; + padding: 0; + min-height: 0; + overflow: auto; + list-style-type: none; +} + +.lm-CommandPalette-header { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-CommandPalette-item { + display: flex; + flex-direction: row; +} + +.lm-CommandPalette-itemIcon { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemContent { + flex: 1 1 auto; + overflow: hidden; +} + +.lm-CommandPalette-itemShortcut { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemLabel { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-close-icon { + border: 1px solid transparent; + background-color: transparent; + position: absolute; + z-index: 1; + right: 3%; + top: 0; + bottom: 0; + margin: auto; + padding: 7px 0; + display: none; + vertical-align: middle; + outline: 0; + cursor: pointer; +} +.lm-close-icon:after { + content: 'X'; + display: block; + width: 15px; + height: 15px; + text-align: center; + color: #000; + font-weight: normal; + font-size: 12px; + cursor: pointer; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/commandpalette.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;EAC7B,6BAA6B;EAC7B,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACZ,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,eAAe;AACjB;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,eAAe;AACjB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n display: flex;\n flex-direction: column;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-CommandPalette-search {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-content {\n flex: 1 1 auto;\n margin: 0;\n padding: 0;\n min-height: 0;\n overflow: auto;\n list-style-type: none;\n}\n\n.lm-CommandPalette-header {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-CommandPalette-item {\n display: flex;\n flex-direction: row;\n}\n\n.lm-CommandPalette-itemIcon {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemContent {\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.lm-CommandPalette-itemShortcut {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemLabel {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-close-icon {\n border: 1px solid transparent;\n background-color: transparent;\n position: absolute;\n z-index: 1;\n right: 3%;\n top: 0;\n bottom: 0;\n margin: auto;\n padding: 7px 0;\n display: none;\n vertical-align: middle;\n outline: 0;\n cursor: pointer;\n}\n.lm-close-icon:after {\n content: 'X';\n display: block;\n width: 15px;\n height: 15px;\n text-align: center;\n color: #000;\n font-weight: normal;\n font-size: 12px;\n cursor: pointer;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css": +/*!****************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css ***! + \****************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-DockPanel { + z-index: 0; +} + +.lm-DockPanel-widget { + z-index: 0; +} + +.lm-DockPanel-tabBar { + z-index: 1; +} + +.lm-DockPanel-handle { + z-index: 2; +} + +.lm-DockPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-DockPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-DockPanel-handle[data-orientation='horizontal'] { + cursor: ew-resize; +} + +.lm-DockPanel-handle[data-orientation='vertical'] { + cursor: ns-resize; +} + +.lm-DockPanel-handle[data-orientation='horizontal']:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-DockPanel-handle[data-orientation='vertical']:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + +.lm-DockPanel-overlay { + z-index: 3; + box-sizing: border-box; + pointer-events: none; +} + +.lm-DockPanel-overlay.lm-mod-hidden { + display: none !important; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/dockpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B;;AAEA;EACE,UAAU;EACV,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel {\n z-index: 0;\n}\n\n.lm-DockPanel-widget {\n z-index: 0;\n}\n\n.lm-DockPanel-tabBar {\n z-index: 1;\n}\n\n.lm-DockPanel-handle {\n z-index: 2;\n}\n\n.lm-DockPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-DockPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal'] {\n cursor: ew-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='vertical'] {\n cursor: ns-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-DockPanel-handle[data-orientation='vertical']:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n\n.lm-DockPanel-overlay {\n z-index: 3;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n.lm-DockPanel-overlay.lm-mod-hidden {\n display: none !important;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css": +/*!************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css ***! + \************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_widget_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./widget.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_splitpanel_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./splitpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabpanel_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css"); +// Imports + + + + + + + + + + + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_widget_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_3__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_4__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_5__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_6__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_7__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_8__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_splitpanel_css__WEBPACK_IMPORTED_MODULE_9__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_10__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabpanel_css__WEBPACK_IMPORTED_MODULE_11__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n@import './widget.css';\n@import './accordionpanel.css';\n@import './commandpalette.css';\n@import './dockpanel.css';\n@import './menu.css';\n@import './menubar.css';\n@import './scrollbar.css';\n@import './splitpanel.css';\n@import './tabbar.css';\n@import './tabpanel.css';\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css": +/*!***********************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css ***! + \***********************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Menu { + z-index: 10000; + position: absolute; + white-space: nowrap; + overflow-x: hidden; + overflow-y: auto; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-Menu-content { + margin: 0; + padding: 0; + display: table; + list-style-type: none; +} + +.lm-Menu-item { + display: table-row; +} + +.lm-Menu-item.lm-mod-hidden, +.lm-Menu-item.lm-mod-collapsed { + display: none !important; +} + +.lm-Menu-itemIcon, +.lm-Menu-itemSubmenuIcon { + display: table-cell; + text-align: center; +} + +.lm-Menu-itemLabel { + display: table-cell; + text-align: left; +} + +.lm-Menu-itemShortcut { + display: table-cell; + text-align: right; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/menu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;;EAEE,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n z-index: 10000;\n position: absolute;\n white-space: nowrap;\n overflow-x: hidden;\n overflow-y: auto;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-Menu-content {\n margin: 0;\n padding: 0;\n display: table;\n list-style-type: none;\n}\n\n.lm-Menu-item {\n display: table-row;\n}\n\n.lm-Menu-item.lm-mod-hidden,\n.lm-Menu-item.lm-mod-collapsed {\n display: none !important;\n}\n\n.lm-Menu-itemIcon,\n.lm-Menu-itemSubmenuIcon {\n display: table-cell;\n text-align: center;\n}\n\n.lm-Menu-itemLabel {\n display: table-cell;\n text-align: left;\n}\n\n.lm-Menu-itemShortcut {\n display: table-cell;\n text-align: right;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css": +/*!**************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css ***! + \**************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-MenuBar { + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-MenuBar-content { + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + list-style-type: none; +} + +.lm-MenuBar-item { + box-sizing: border-box; +} + +.lm-MenuBar-itemIcon, +.lm-MenuBar-itemLabel { + display: inline-block; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/menubar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,qBAAqB;AACvB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-MenuBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n list-style-type: none;\n}\n\n.lm-MenuBar-item {\n box-sizing: border-box;\n}\n\n.lm-MenuBar-itemIcon,\n.lm-MenuBar-itemLabel {\n display: inline-block;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css": +/*!****************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css ***! + \****************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-ScrollBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-ScrollBar[data-orientation='horizontal'] { + flex-direction: row; +} + +.lm-ScrollBar[data-orientation='vertical'] { + flex-direction: column; +} + +.lm-ScrollBar-button { + box-sizing: border-box; + flex: 0 0 auto; +} + +.lm-ScrollBar-track { + box-sizing: border-box; + position: relative; + overflow: hidden; + flex: 1 1 auto; +} + +.lm-ScrollBar-thumb { + box-sizing: border-box; + position: absolute; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/scrollbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;AACpB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n flex-direction: row;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n flex-direction: column;\n}\n\n.lm-ScrollBar-button {\n box-sizing: border-box;\n flex: 0 0 auto;\n}\n\n.lm-ScrollBar-track {\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.lm-ScrollBar-thumb {\n box-sizing: border-box;\n position: absolute;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css ***! + \*****************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-SplitPanel-child { + z-index: 0; +} + +.lm-SplitPanel-handle { + z-index: 1; +} + +.lm-SplitPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-SplitPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle { + cursor: ew-resize; +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle { + cursor: ns-resize; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/splitpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-SplitPanel-child {\n z-index: 0;\n}\n\n.lm-SplitPanel-handle {\n z-index: 1;\n}\n\n.lm-SplitPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-SplitPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\n cursor: ew-resize;\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\n cursor: ns-resize;\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css": +/*!*************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css ***! + \*************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-TabBar[data-orientation='horizontal'] { + flex-direction: row; + align-items: flex-end; +} + +.lm-TabBar[data-orientation='vertical'] { + flex-direction: column; + align-items: flex-end; +} + +.lm-TabBar-content { + margin: 0; + padding: 0; + display: flex; + flex: 1 1 auto; + list-style-type: none; +} + +.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content { + flex-direction: row; +} + +.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content { + flex-direction: column; +} + +.lm-TabBar-tab { + display: flex; + flex-direction: row; + box-sizing: border-box; + overflow: hidden; + touch-action: none; /* Disable native Drag/Drop */ +} + +.lm-TabBar-tabIcon, +.lm-TabBar-tabCloseIcon { + flex: 0 0 auto; +} + +.lm-TabBar-tabLabel { + flex: 1 1 auto; + overflow: hidden; + white-space: nowrap; +} + +.lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; +} + +.lm-TabBar-tab.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar-addButton.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab { + position: relative; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab { + left: 0; + transition: left 150ms ease; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab { + top: 0; + transition: top 150ms ease; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging { + transition: none; +} + +.lm-TabBar-tabLabel .lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; + background: inherit; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/tabbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB,EAAE,6BAA6B;AACnD;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,OAAO;EACP,2BAA2B;AAC7B;;AAEA;EACE,MAAM;EACN,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;EACtB,mBAAmB;AACrB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] {\n flex-direction: row;\n align-items: flex-end;\n}\n\n.lm-TabBar[data-orientation='vertical'] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n.lm-TabBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex: 1 1 auto;\n list-style-type: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\n flex-direction: row;\n}\n\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\n flex-direction: column;\n}\n\n.lm-TabBar-tab {\n display: flex;\n flex-direction: row;\n box-sizing: border-box;\n overflow: hidden;\n touch-action: none; /* Disable native Drag/Drop */\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabCloseIcon {\n flex: 0 0 auto;\n}\n\n.lm-TabBar-tabLabel {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n}\n\n.lm-TabBar-tab.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar-addButton.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\n position: relative;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\n left: 0;\n transition: left 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\n top: 0;\n transition: top 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\n transition: none;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n background: inherit;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css": +/*!***************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css ***! + \***************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabPanel-tabBar { + z-index: 1; +} + +.lm-TabPanel-stackedPanel { + z-index: 0; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/tabpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabPanel-tabBar {\n z-index: 1;\n}\n\n.lm-TabPanel-stackedPanel {\n z-index: 0;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css": +/*!*************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css ***! + \*************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Widget { + box-sizing: border-box; + position: relative; +} + +.lm-Widget.lm-mod-hidden { + display: none !important; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/widget.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,wBAAwB;AAC1B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Widget {\n box-sizing: border-box;\n position: relative;\n}\n\n.lm-Widget.lm-mod-hidden {\n display: none !important;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css": +/*!************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../history/style/index.css ***! + \************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.history-toolbar { + float: left; + overflow: none; + z-index: 3; + position: absolute; +} + +.history-toolbar .buttons { + height: 30px; + display: inline-block; + margin-left: 8px; +} + +.history-toolbar .buttons > input { + height: 30px; +} + +.history-toolbar .buttons > input[type=checkbox] { + display: none +} + +.history-toolbar .buttons > label, .history-toolbar > div > a { + margin: 8px 8px 8px 0; +} + +.history-toolbar .buttons > input[type=checkbox] + label { + display:inline-block; + color: black; + cursor: pointer; +} + +.history-toolbar .buttons > input[type=checkbox]:checked + label { + color: blue; +} + +.history-toolbar .buttons > a.toollink, +.history-toolbar .buttons > a.toollink:link, +.history-toolbar .buttons > a.toollink:visited { + color: black; +} + +.history-toolbar .buttons > a.toollink:active { + color: blue; +} +`, "",{"version":3,"sources":["webpack://./../history/style/index.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,cAAc;IACd,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;IAGI,YAAY;AAChB;;AAEA;IACI,WAAW;AACf","sourcesContent":[".history-toolbar {\n float: left;\n overflow: none;\n z-index: 3;\n position: absolute;\n}\n\n.history-toolbar .buttons {\n height: 30px;\n display: inline-block;\n margin-left: 8px;\n}\n\n.history-toolbar .buttons > input {\n height: 30px;\n}\n\n.history-toolbar .buttons > input[type=checkbox] {\n display: none\n}\n\n.history-toolbar .buttons > label, .history-toolbar > div > a {\n margin: 8px 8px 8px 0;\n}\n\n.history-toolbar .buttons > input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.history-toolbar .buttons > a.toollink,\n.history-toolbar .buttons > a.toollink:link,\n.history-toolbar .buttons > a.toollink:visited {\n color: black;\n}\n\n.history-toolbar .buttons > a.toollink:active {\n color: blue;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css": +/*!***********************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css ***! + \***********************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); +// Imports + + + +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_4___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_5___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_6___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_7___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); +var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); +var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); +var ___CSS_LOADER_URL_REPLACEMENT_3___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); +var ___CSS_LOADER_URL_REPLACEMENT_4___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_4___); +var ___CSS_LOADER_URL_REPLACEMENT_5___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_5___); +var ___CSS_LOADER_URL_REPLACEMENT_6___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_6___); +var ___CSS_LOADER_URL_REPLACEMENT_7___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_7___); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/*! + * Bootstrap v4.0.0 (https://getbootstrap.com) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\\2014 \\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___})}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_2___})}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(${___CSS_LOADER_URL_REPLACEMENT_3___}) no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_4___})}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_5___})}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_6___})}.carousel-control-next-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_7___})}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}} +/*# sourceMappingURL=bootstrap.min.css.map */`, "",{"version":3,"sources":["webpack://./style/bootstrap.min.css"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.0.0 (https://getbootstrap.com)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\2014 \\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\"\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\n/*# sourceMappingURL=bootstrap.min.css.map */"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./style/history.css": +/*!*****************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/history.css ***! + \*****************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css"); +// Imports + + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.history-content, +.history-content .sub-content, +.history-content .sub-content > div { + overflow: hidden !important; +} + +.history-content .filter .internal { + margin: 4px 8px; +} + +.history-content .filter { +} + +.history-content .filter input, .history-content .filter label { + vertical-align: top; + display: inline-block; +} + + +.history-content .graph-attr { + display: inline-block; + margin-right: 5px; +} + +.history-content .graph-attr input, .history-content .graph-attr label { + vertical-align: middle; + display: inline-block; +} + +.history-content .select-style { + width: 170px; + margin-right: 5px; +} + +`, "",{"version":3,"sources":["webpack://./style/history.css"],"names":[],"mappings":"AAEA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,eAAe;AACnB;;AAEA;AACA;;AAEA;IACI,mBAAmB;IACnB,qBAAqB;AACzB;;;AAGA;CACC,qBAAqB;CACrB,iBAAiB;AAClB;;AAEA;IACI,sBAAsB;IACtB,qBAAqB;AACzB;;AAEA;IACI,YAAY;IACZ,iBAAiB;AACrB","sourcesContent":["@import '~@noworkflow/history/style/index.css';\n\n.history-content,\n.history-content .sub-content,\n.history-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.history-content .filter .internal {\n margin: 4px 8px;\n}\n\n.history-content .filter {\n}\n\n.history-content .filter input, .history-content .filter label {\n vertical-align: top;\n display: inline-block;\n}\n\n\n.history-content .graph-attr {\n\tdisplay: inline-block;\n\tmargin-right: 5px;\n}\n\n.history-content .graph-attr input, .history-content .graph-attr label {\n vertical-align: middle;\n display: inline-block;\n}\n\n.history-content .select-style {\n width: 170px;\n margin-right: 5px;\n}\n\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./style/index.css": +/*!***************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/index.css ***! + \***************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_utils_style_shared_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../utils/style/shared.css */ "./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_trial_style_index_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../trial/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../trial/style/index.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./panel.css */ "./node_modules/css-loader/dist/cjs.js!./style/panel.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./history.css */ "./node_modules/css-loader/dist/cjs.js!./style/history.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_trial_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./trial.css */ "./node_modules/css-loader/dist/cjs.js!./style/trial.css"); +// Imports + + + + + + + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_utils_style_shared_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_3__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_trial_style_index_css__WEBPACK_IMPORTED_MODULE_4__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_5__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_css__WEBPACK_IMPORTED_MODULE_6__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_trial_css__WEBPACK_IMPORTED_MODULE_7__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `body { + font-family: "Verdana", "Geneva", "sans-serif"; +} + +.loading { + font-size: 40px; +} + +/* Link Button */ + +a.link-button { + text-decoration: none; + display:inline-block; + padding: 4px 0; + /*padding: 4px 12px;*/ + margin-bottom: 0; + font-size: 14px; + width: 100px; + line-height: 15px; + color: #333; + text-align: center; + text-shadow: 0 1px 1px rgba(255,255,255,0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top,#fff,#e6e6e6); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6)); + background-image: -webkit-linear-gradient(top,#fff,#e6e6e6); + background-image: -o-linear-gradient(top,#fff,#e6e6e6); + background-image: linear-gradient(to bottom,#fff,#e6e6e6); + background-repeat: repeat-x; + border: 1px solid #ccc; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25); + border-bottom-color: #b3b3b3; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +} + +a.link-button:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); + background-color:#e0e0e0; +} + +.hide-toolbar { + overflow: hidden; + max-height: 0; + padding-top: 0; + padding-bottom: 0; + margin-top: 0; + margin-bottom: 0; + -moz-transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + -o-transition-duration: 0.3s; + transition-duration: 0.3s; + -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); + -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); + -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); + transition-timing-function: cubic-bezier(0, 1, 0.5, 1); +} + +.show-toolbar { + -moz-transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + -o-transition-duration: 0.3s; + transition-duration: 0.3s; + -moz-transition-timing-function: ease-in; + -webkit-transition-timing-function: ease-in; + -o-transition-timing-function: ease-in; + transition-timing-function: ease-in; + /*max-height: 1000px; + overflow: hidden;*/ +} + +.visible { + border-bottom: 1px solid black; +} + +.info-filter input, .info-filter select { + display: block; + width: 250px; + margin: 7px 0; +}`, "",{"version":3,"sources":["webpack://./style/index.css"],"names":[],"mappings":"AAQA;EACE,8CAA8C;AAChD;;AAEA;EACE,eAAe;AACjB;;AAEA,gBAAgB;;AAEhB;EACE,qBAAqB;EACrB,oBAAoB;EACpB,cAAc;CACf,qBAAqB;EACpB,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,kBAAkB;EAClB,6CAA6C;EAC7C,sBAAsB;EACtB,eAAe;EACf,yBAAyB;EACzB,wDAAwD;EACxD,4EAA4E;EAC5E,2DAA2D;EAC3D,sDAAsD;EACtD,yDAAyD;EACzD,2BAA2B;EAC3B,sBAAsB;EACtB,qCAAqC;EACrC,8DAA8D;EAC9D,4BAA4B;EAC5B,oHAAoH;EACpH,iEAAiE;EACjE,kFAAkF;EAClF,+EAA+E;EAC/E,0EAA0E;AAC5E;;AAEA;EACE,sBAAsB;EACtB,UAAU;EACV,+EAA+E;EAC/E,4EAA4E;EAC5E,uEAAuE;EACvE,wBAAwB;AAC1B;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,2DAA2D;IAC3D,8DAA8D;IAC9D,yDAAyD;IACzD,sDAAsD;AAC1D;;AAEA;IACI,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,wCAAwC;IACxC,2CAA2C;IAC3C,sCAAsC;IACtC,mCAAmC;IACnC;sBACkB;AACtB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;AACf","sourcesContent":["@import '~@noworkflow/utils/style/shared.css';\n@import '~@noworkflow/history/style/index.css';\n@import '~@noworkflow/trial/style/index.css';\n@import './panel.css';\n@import './history.css';\n@import './trial.css';\n\n\nbody {\n font-family: \"Verdana\", \"Geneva\", \"sans-serif\";\n}\n\n.loading {\n font-size: 40px;\n}\n\n/* Link Button */\n\na.link-button {\n text-decoration: none;\n display:inline-block;\n padding: 4px 0;\n /*padding: 4px 12px;*/\n margin-bottom: 0;\n font-size: 14px;\n width: 100px;\n line-height: 15px;\n color: #333;\n text-align: center;\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\n vertical-align: middle;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\n background-repeat: repeat-x;\n border: 1px solid #ccc;\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\n border-bottom-color: #b3b3b3;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n}\n\na.link-button:active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n background-color:#e0e0e0;\n}\n\n.hide-toolbar {\n overflow: hidden;\n max-height: 0;\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 0;\n margin-bottom: 0;\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.show-toolbar {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n /*max-height: 1000px;\n overflow: hidden;*/\n}\n\n.visible {\n border-bottom: 1px solid black;\n}\n\n.info-filter input, .info-filter select {\n display: block;\n width: 250px;\n margin: 7px 0;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./style/panel.css": +/*!***************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/panel.css ***! + \***************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_lumino_default_theme_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../../node_modules/@lumino/default-theme/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css"); +// Imports + + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_node_modules_lumino_default_theme_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ` +.p-TabBar { + min-height: 24px; + max-height: 24px; +} + +.p-TabBar-content { + min-width: 0; + min-height: 0; + align-items: flex-end; + border-bottom: 1px solid #C0C0C0; +} + + +.p-TabBar-tab { + padding: 0px 10px; + background: #E5E5E5; + border: 1px solid #C0C0C0; + border-bottom: none; + font: 12px Helvetica, Arial, sans-serif; + flex: 0 1 180px; + min-height: 20px; + max-height: 20px; + min-width: 35px; + margin-left: -1px; + line-height: 20px; +} + + +.p-TabBar-tab.p-mod-current { + background: white; +} + + +.p-TabBar-tab:hover:not(.p-mod-current) { + background: #F0F0F0; +} + + +.p-TabBar-tab:first-child { + margin-left: 0; +} + + +.p-TabBar-tab.p-mod-current { + min-height: 23px; + max-height: 23px; + transform: translateY(1px); +} + + +.p-TabBar-tabIcon, +.p-TabBar-tabLabel, +.p-TabBar-tabCloseIcon { + display: inline-block; +} + + +.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon { + margin-left: 4px; +} + + +.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before { + content: '\\f00d'; + font-family: FontAwesome; +} + + +.p-TabBar-tab.p-mod-drag-image { + min-height: 23px; + max-height: 23px; + min-width: 125px; + border: none; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); + transform: translateX(-40%) translateY(-58%); +} + +.p-DockPanel-overlay { + background: rgba(255, 255, 255, 0.6); + border: 1px dashed black; + transition-property: top, left, right, bottom; + transition-duration: 150ms; + transition-timing-function: ease; +} + +.content { + min-width: 50px; + min-height: 50px; + display: flex; + flex-direction: column; + padding: 8px; + border: 1px solid #C0C0C0; + border-top: none; + background: white; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); +} + +.content > div { + flex: 1 1 auto; + overflow: auto; +} + +body { + display: flex; + flex-direction: column; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; + padding: 0; + overflow: hidden; + +} + +#main { + flex: 1 1 auto; +} + + +.side-info { + margin: 5px; + font-size: 14px; +} + +.side-info .main h1 { + margin: 0; +} + +.side-info .main h3 { + margin: 0 0 8px 0; +} + +.side-info .attr { + display: block; + margin: 3px 0; +} + +.side-info .desc { + font-weight: bold; +} + +.side-info .fold { + margin-top: 15px; + font-size: 2em; +} + +.side-info .fold:hover { + cursor: pointer; +} + +.side-info .fold span { + padding-left: 7px; +} + +.side-info .show-all { + color: rgb(50, 38, 41); + float: right; + margin-right: 10px; +} + +.side-info ul.mod-list, +.side-info ul.env-list, +.side-info ul.fac-list { + padding: 0; + margin: 0; + list-style-type: none; +} + +.side-info ul.mod-list li, +.side-info ul.fac-list li { + border-left: 3px solid black; + margin: 6px 4px; + padding: 1px 3px; +} + +.side-info ul.env-list li { + margin: 3px; + font-size: 0.8em; +} + +.side-info ul.env-list li .key { + font-weight: bold; +} + +.side-info ul.mod-list li .version, +.side-info ul.fac-list li .mode, +.side-info ul.fac-list li .buffering { + float: right; + margin-left: 20px; +} + +.side-info .clear { + clear: both; +} + +.hash { + font-size: 12px; + color: #666; +} + +.dbefore { + color: red !important; +} + +.dafter { + color: green !important; +} + +.dbefore::before { + color: red !important; + content: ' - '; + font-family: "Courier New", Courier, monospace; +} + +.dafter::before { + color: green !important; + content: ' + '; + font-family: "Courier New", Courier, monospace; +} + +.libefore { + border-left: 3px solid red !important; + color: red !important; +} + +.liafter { + border-left: 3px solid green !important; + color: green !important; +} + +.connection-error:hover { + cursor: pointer; +} + +.error-text { + font-size: 15px; + margin-left: 3px; + vertical-align: middle; +}`, "",{"version":3,"sources":["webpack://./style/panel.css"],"names":[],"mappings":";AAIA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;;AAGA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,uCAAuC;EACvC,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;;AAGA;EACE,iBAAiB;AACnB;;;AAGA;EACE,mBAAmB;AACrB;;;AAGA;EACE,cAAc;AAChB;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;;AAGA;;;EAGE,qBAAqB;AACvB;;;AAGA;EACE,gBAAgB;AAClB;;;AAGA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;EAC1C,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,0CAA0C;AAC5C;;AAEA;EACE,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,SAAS;EACT,UAAU;EACV,gBAAgB;;AAElB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;AACpB;;AAEA;;;EAGE,UAAU;EACV,SAAS;EACT,qBAAqB;AACvB;;AAEA;;EAEE,4BAA4B;EAC5B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;EAGE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,WAAW;AACb;;AAEA;IACI,eAAe;IACf,WAAW;AACf;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,uBAAuB;EACvB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,qCAAqC;EACrC,qBAAqB;AACvB;;AAEA;EACE,uCAAuC;EACvC,uBAAuB;AACzB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,sBAAsB;AACxB","sourcesContent":["\n@import '~@lumino/default-theme/style/index.css';\n\n\n.p-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.p-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #C0C0C0;\n}\n\n\n.p-TabBar-tab {\n padding: 0px 10px;\n background: #E5E5E5;\n border: 1px solid #C0C0C0;\n border-bottom: none;\n font: 12px Helvetica, Arial, sans-serif;\n flex: 0 1 180px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n background: white;\n}\n\n\n.p-TabBar-tab:hover:not(.p-mod-current) {\n background: #F0F0F0;\n}\n\n\n.p-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n\n.p-TabBar-tabIcon,\n.p-TabBar-tabLabel,\n.p-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\n content: '\\f00d';\n font-family: FontAwesome;\n}\n\n\n.p-TabBar-tab.p-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n transform: translateX(-40%) translateY(-58%);\n}\n\n.p-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n\n.content {\n min-width: 50px;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n padding: 8px;\n border: 1px solid #C0C0C0;\n border-top: none;\n background: white;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.content > div {\n flex: 1 1 auto;\n overflow: auto;\n}\n\nbody {\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n}\n\n#main {\n flex: 1 1 auto;\n}\n\n\n.side-info {\n margin: 5px;\n font-size: 14px;\n}\n\n.side-info .main h1 {\n margin: 0;\n}\n\n.side-info .main h3 {\n margin: 0 0 8px 0;\n}\n\n.side-info .attr {\n display: block;\n margin: 3px 0;\n}\n\n.side-info .desc {\n font-weight: bold;\n}\n\n.side-info .fold {\n margin-top: 15px;\n font-size: 2em;\n}\n\n.side-info .fold:hover {\n cursor: pointer;\n}\n\n.side-info .fold span {\n padding-left: 7px;\n}\n\n.side-info .show-all {\n color: rgb(50, 38, 41);\n float: right;\n margin-right: 10px;\n}\n\n.side-info ul.mod-list,\n.side-info ul.env-list,\n.side-info ul.fac-list {\n padding: 0;\n margin: 0;\n list-style-type: none;\n}\n\n.side-info ul.mod-list li,\n.side-info ul.fac-list li {\n border-left: 3px solid black;\n margin: 6px 4px;\n padding: 1px 3px;\n}\n\n.side-info ul.env-list li {\n margin: 3px;\n font-size: 0.8em;\n}\n\n.side-info ul.env-list li .key {\n font-weight: bold;\n}\n\n.side-info ul.mod-list li .version,\n.side-info ul.fac-list li .mode,\n.side-info ul.fac-list li .buffering {\n float: right;\n margin-left: 20px;\n}\n\n.side-info .clear {\n clear: both;\n}\n\n.hash {\n font-size: 12px;\n color: #666;\n}\n\n.dbefore {\n color: red !important;\n}\n\n.dafter {\n color: green !important;\n}\n\n.dbefore::before {\n color: red !important;\n content: ' - ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.dafter::before {\n color: green !important;\n content: ' + ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.libefore {\n border-left: 3px solid red !important;\n color: red !important;\n}\n\n.liafter {\n border-left: 3px solid green !important;\n color: green !important;\n}\n\n.connection-error:hover {\n cursor: pointer;\n}\n\n.error-text {\n font-size: 15px;\n margin-left: 3px;\n vertical-align: middle;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./style/trial.css": +/*!***************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/trial.css ***! + \***************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.trial-content, +.trial-content .sub-content, +.trial-content .sub-content > div { + overflow: hidden !important; +} + +.trial-content .graphselector .graph-attr:first-child label { + margin-right: 17px; +} + +.trial-content .graphselector { + width: 100%; + padding-left: 8px; +} + +.trial-content .graphselector .use-cache { + margin-top: 10px; + margin-left: 0px; +} + +.trial-content .graphselector a.link-button { + margin-top: 10px; + width: 273px; +} -}); +.trial-content .toggle-label { + margin-right: 5px; +} -ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/config","ace/lib/useragent"], function(require, exports, module){"use strict"; -var Renderer = require("../virtual_renderer").VirtualRenderer; -var Editor = require("../editor").Editor; -var Range = require("../range").Range; -var event = require("../lib/event"); -var lang = require("../lib/lang"); -var dom = require("../lib/dom"); -var nls = require("../config").nls; -var userAgent = require("./../lib/useragent"); -var getAriaId = function (index) { - return "suggest-aria-id:".concat(index); -}; -var popupAriaRole = userAgent.isSafari ? "menu" : "listbox"; -var optionAriaRole = userAgent.isSafari ? "menuitem" : "option"; -var ariaActiveState = userAgent.isSafari ? "aria-current" : "aria-selected"; -var $singleLineEditor = function (el) { - var renderer = new Renderer(el); - renderer.$maxLines = 4; - var editor = new Editor(renderer); - editor.setHighlightActiveLine(false); - editor.setShowPrintMargin(false); - editor.renderer.setShowGutter(false); - editor.renderer.setHighlightGutterLine(false); - editor.$mouseHandler.$focusTimeout = 0; - editor.$highlightTagPending = true; - return editor; -}; -var AcePopup = /** @class */ (function () { - function AcePopup(parentNode) { - var el = dom.createElement("div"); - var popup = $singleLineEditor(el); - if (parentNode) { - parentNode.appendChild(el); - } - el.style.display = "none"; - popup.renderer.content.style.cursor = "default"; - popup.renderer.setStyle("ace_autocomplete"); - popup.renderer.$textLayer.element.setAttribute("role", popupAriaRole); - popup.renderer.$textLayer.element.setAttribute("aria-roledescription", nls("autocomplete.popup.aria-roledescription", "Autocomplete suggestions")); - popup.renderer.$textLayer.element.setAttribute("aria-label", nls("autocomplete.popup.aria-label", "Autocomplete suggestions")); - popup.renderer.textarea.setAttribute("aria-hidden", "true"); - popup.setOption("displayIndentGuides", false); - popup.setOption("dragDelay", 150); - var noop = function () { }; - popup.focus = noop; - popup.$isFocused = true; - popup.renderer.$cursorLayer.restartTimer = noop; - popup.renderer.$cursorLayer.element.style.opacity = "0"; - popup.renderer.$maxLines = 8; - popup.renderer.$keepTextAreaAtCursor = false; - popup.setHighlightActiveLine(false); - popup.session.highlight(""); - popup.session.$searchHighlight.clazz = "ace_highlight-marker"; - popup.on("mousedown", function (e) { - var pos = e.getDocumentPosition(); - popup.selection.moveToPosition(pos); - selectionMarker.start.row = selectionMarker.end.row = pos.row; - e.stop(); - }); - var lastMouseEvent; - var hoverMarker = new Range(-1, 0, -1, Infinity); - var selectionMarker = new Range(-1, 0, -1, Infinity); - selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine"); - popup.setSelectOnHover = function (val) { - if (!val) { - hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine"); - } - else if (hoverMarker.id) { - popup.session.removeMarker(hoverMarker.id); - hoverMarker.id = null; - } - }; - popup.setSelectOnHover(false); - popup.on("mousemove", function (e) { - if (!lastMouseEvent) { - lastMouseEvent = e; - return; - } - if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) { - return; - } - lastMouseEvent = e; - lastMouseEvent.scrollTop = popup.renderer.scrollTop; - popup.isMouseOver = true; - var row = lastMouseEvent.getDocumentPosition().row; - if (hoverMarker.start.row != row) { - if (!hoverMarker.id) - popup.setRow(row); - setHoverMarker(row); - } - }); - popup.renderer.on("beforeRender", function () { - if (lastMouseEvent && hoverMarker.start.row != -1) { - lastMouseEvent.$pos = null; - var row = lastMouseEvent.getDocumentPosition().row; - if (!hoverMarker.id) - popup.setRow(row); - setHoverMarker(row, true); - } - }); - popup.renderer.on("afterRender", function () { - var t = popup.renderer.$textLayer; - for (var row = t.config.firstRow, l = t.config.lastRow; row <= l; row++) { - var popupRowElement = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]); - popupRowElement.setAttribute("role", optionAriaRole); - popupRowElement.setAttribute("aria-roledescription", nls("autocomplete.popup.item.aria-roledescription", "item")); - popupRowElement.setAttribute("aria-setsize", popup.data.length); - popupRowElement.setAttribute("aria-describedby", "doc-tooltip"); - popupRowElement.setAttribute("aria-posinset", row + 1); - var rowData = popup.getData(row); - if (rowData) { - var ariaLabel = "".concat(rowData.caption || rowData.value).concat(rowData.meta ? ", ".concat(rowData.meta) : ''); - popupRowElement.setAttribute("aria-label", ariaLabel); - } - var highlightedSpans = popupRowElement.querySelectorAll(".ace_completion-highlight"); - highlightedSpans.forEach(function (span) { - span.setAttribute("role", "mark"); - }); - } - }); - popup.renderer.on("afterRender", function () { - var row = popup.getRow(); - var t = popup.renderer.$textLayer; - var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]); - var el = document.activeElement; // Active element is textarea of main editor - if (selected !== popup.selectedNode && popup.selectedNode) { - dom.removeCssClass(popup.selectedNode, "ace_selected"); - popup.selectedNode.removeAttribute(ariaActiveState); - popup.selectedNode.removeAttribute("id"); - } - el.removeAttribute("aria-activedescendant"); - popup.selectedNode = selected; - if (selected) { - var ariaId = getAriaId(row); - dom.addCssClass(selected, "ace_selected"); - selected.id = ariaId; - t.element.setAttribute("aria-activedescendant", ariaId); - el.setAttribute("aria-activedescendant", ariaId); - selected.setAttribute(ariaActiveState, "true"); - } - }); - var hideHoverMarker = function () { setHoverMarker(-1); }; - var setHoverMarker = function (row, suppressRedraw) { - if (row !== hoverMarker.start.row) { - hoverMarker.start.row = hoverMarker.end.row = row; - if (!suppressRedraw) - popup.session._emit("changeBackMarker"); - popup._emit("changeHoverMarker"); - } - }; - popup.getHoveredRow = function () { - return hoverMarker.start.row; - }; - event.addListener(popup.container, "mouseout", function () { - popup.isMouseOver = false; - hideHoverMarker(); - }); - popup.on("hide", hideHoverMarker); - popup.on("changeSelection", hideHoverMarker); - popup.session.doc.getLength = function () { - return popup.data.length; - }; - popup.session.doc.getLine = function (i) { - var data = popup.data[i]; - if (typeof data == "string") - return data; - return (data && data.value) || ""; - }; - var bgTokenizer = popup.session.bgTokenizer; - bgTokenizer.$tokenizeRow = function (row) { - var data = popup.data[row]; - var tokens = []; - if (!data) - return tokens; - if (typeof data == "string") - data = { value: data }; - var caption = data.caption || data.value || data.name; - function addToken(value, className) { - value && tokens.push({ - type: (data.className || "") + (className || ""), - value: value - }); - } - var lower = caption.toLowerCase(); - var filterText = (popup.filterText || "").toLowerCase(); - var lastIndex = 0; - var lastI = 0; - for (var i = 0; i <= filterText.length; i++) { - if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) { - var sub = filterText.slice(lastI, i); - lastI = i; - var index = lower.indexOf(sub, lastIndex); - if (index == -1) - continue; - addToken(caption.slice(lastIndex, index), ""); - lastIndex = index + sub.length; - addToken(caption.slice(index, lastIndex), "completion-highlight"); - } - } - addToken(caption.slice(lastIndex, caption.length), ""); - tokens.push({ type: "completion-spacer", value: " " }); - if (data.meta) - tokens.push({ type: "completion-meta", value: data.meta }); - if (data.message) - tokens.push({ type: "completion-message", value: data.message }); - return tokens; - }; - bgTokenizer.$updateOnChange = noop; - bgTokenizer.start = noop; - popup.session.$computeWidth = function () { - return this.screenWidth = 0; - }; - popup.isOpen = false; - popup.isTopdown = false; - popup.autoSelect = true; - popup.filterText = ""; - popup.isMouseOver = false; - popup.data = []; - popup.setData = function (list, filterText) { - popup.filterText = filterText || ""; - popup.setValue(lang.stringRepeat("\n", list.length), -1); - popup.data = list || []; - popup.setRow(0); - }; - popup.getData = function (row) { - return popup.data[row]; - }; - popup.getRow = function () { - return selectionMarker.start.row; - }; - popup.setRow = function (line) { - line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line)); - if (selectionMarker.start.row != line) { - popup.selection.clearSelection(); - selectionMarker.start.row = selectionMarker.end.row = line || 0; - popup.session._emit("changeBackMarker"); - popup.moveCursorTo(line || 0, 0); - if (popup.isOpen) - popup._signal("select"); - } - }; - popup.on("changeSelection", function () { - if (popup.isOpen) - popup.setRow(popup.selection.lead.row); - popup.renderer.scrollCursorIntoView(); - }); - popup.hide = function () { - this.container.style.display = "none"; - popup.anchorPos = null; - popup.anchor = null; - if (popup.isOpen) { - popup.isOpen = false; - this._signal("hide"); - } - }; - popup.tryShow = function (pos, lineHeight, anchor, forceShow) { - if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor && - popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left && - popup.anchor === anchor) { - return true; - } - var el = this.container; - var scrollBarSize = this.renderer.scrollBar.width || 10; - var screenHeight = window.innerHeight - scrollBarSize; - var screenWidth = window.innerWidth - scrollBarSize; - var renderer = this.renderer; - var maxH = renderer.$maxLines * lineHeight * 1.4; - var dims = { top: 0, bottom: 0, left: 0 }; - var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight; - var spaceAbove = pos.top - 3 * this.$borderSize; - if (!anchor) { - if (spaceAbove <= spaceBelow || spaceBelow >= maxH) { - anchor = "bottom"; - } - else { - anchor = "top"; - } - } - if (anchor === "top") { - dims.bottom = pos.top - this.$borderSize; - dims.top = dims.bottom - maxH; - } - else if (anchor === "bottom") { - dims.top = pos.top + lineHeight + this.$borderSize; - dims.bottom = dims.top + maxH; - } - var fitsX = dims.top >= 0 && dims.bottom <= screenHeight; - if (!forceShow && !fitsX) { - return false; - } - if (!fitsX) { - if (anchor === "top") { - renderer.$maxPixelHeight = spaceAbove; - } - else { - renderer.$maxPixelHeight = spaceBelow; - } - } - else { - renderer.$maxPixelHeight = null; - } - if (anchor === "top") { - el.style.top = ""; - el.style.bottom = (screenHeight + scrollBarSize - dims.bottom) + "px"; - popup.isTopdown = false; - } - else { - el.style.top = dims.top + "px"; - el.style.bottom = ""; - popup.isTopdown = true; - } - el.style.display = ""; - var left = pos.left; - if (left + el.offsetWidth > screenWidth) - left = screenWidth - el.offsetWidth; - el.style.left = left + "px"; - el.style.right = ""; - if (!popup.isOpen) { - popup.isOpen = true; - this._signal("show"); - lastMouseEvent = null; - } - popup.anchorPos = pos; - popup.anchor = anchor; - return true; - }; - popup.show = function (pos, lineHeight, topdownOnly) { - this.tryShow(pos, lineHeight, topdownOnly ? "bottom" : undefined, true); - }; - popup.goTo = function (where) { - var row = this.getRow(); - var max = this.session.getLength() - 1; - switch (where) { - case "up": - row = row <= 0 ? max : row - 1; - break; - case "down": - row = row >= max ? -1 : row + 1; - break; - case "start": - row = 0; - break; - case "end": - row = max; - break; - } - this.setRow(row); - }; - popup.getTextLeftOffset = function () { - return this.$borderSize + this.renderer.$padding + this.$imageSize; - }; - popup.$imageSize = 0; - popup.$borderSize = 1; - return popup; - } - return AcePopup; -}()); -dom.importCssString("\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n background-color: #CAD6FA;\n z-index: 1;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n background-color: #3a674e;\n}\n.ace_editor.ace_autocomplete .ace_line-hover {\n border: 1px solid #abbffe;\n margin-top: -1px;\n background: rgba(233,233,253,0.4);\n position: absolute;\n z-index: 2;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\n border: 1px solid rgba(109, 150, 13, 0.8);\n background: rgba(58, 103, 78, 0.62);\n}\n.ace_completion-meta {\n opacity: 0.5;\n margin-left: 0.9em;\n}\n.ace_completion-message {\n margin-left: 0.9em;\n color: blue;\n}\n.ace_editor.ace_autocomplete .ace_completion-highlight{\n color: #2d69c7;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\n color: #93ca12;\n}\n.ace_editor.ace_autocomplete {\n width: 300px;\n z-index: 200000;\n border: 1px lightgray solid;\n position: fixed;\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n line-height: 1.4;\n background: #fefefe;\n color: #111;\n}\n.ace_dark.ace_editor.ace_autocomplete {\n border: 1px #484747 solid;\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\n line-height: 1.4;\n background: #25282c;\n color: #c1c1c1;\n}\n.ace_autocomplete .ace_text-layer {\n width: calc(100% - 8px);\n}\n.ace_autocomplete .ace_line {\n display: flex;\n align-items: center;\n}\n.ace_autocomplete .ace_line > * {\n min-width: 0;\n flex: 0 0 auto;\n}\n.ace_autocomplete .ace_line .ace_ {\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ace_autocomplete .ace_completion-spacer {\n flex: 1;\n}\n.ace_autocomplete.ace_loading:after {\n content: \"\";\n position: absolute;\n top: 0px;\n height: 2px;\n width: 8%;\n background: blue;\n z-index: 100;\n animation: ace_progress 3s infinite linear;\n animation-delay: 300ms;\n transform: translateX(-100%) scaleX(1);\n}\n@keyframes ace_progress {\n 0% { transform: translateX(-100%) scaleX(1) }\n 50% { transform: translateX(625%) scaleX(2) } \n 100% { transform: translateX(1500%) scaleX(3) } \n}\n@media (prefers-reduced-motion) {\n .ace_autocomplete.ace_loading:after {\n transform: translateX(625%) scaleX(2);\n animation: none;\n }\n}\n", "autocompletion.css", false); -exports.AcePopup = AcePopup; -exports.$singleLineEditor = $singleLineEditor; -exports.getAriaId = getAriaId; +.graphselector > div:first-child { + margin-top: 8px; +} -}); +.graphselector > a:last-child { + margin-bottom: 8px; +}`, "",{"version":3,"sources":["webpack://./style/trial.css"],"names":[],"mappings":"AAAA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,YAAY;AAChB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,kBAAkB;AACtB","sourcesContent":[".trial-content,\n.trial-content .sub-content,\n.trial-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.trial-content .graphselector .graph-attr:first-child label {\n margin-right: 17px;\n}\n\n.trial-content .graphselector {\n width: 100%;\n padding-left: 8px;\n}\n\n.trial-content .graphselector .use-cache {\n margin-top: 10px;\n margin-left: 0px;\n}\n\n.trial-content .graphselector a.link-button {\n margin-top: 10px;\n width: 273px;\n}\n\n.trial-content .toggle-label {\n margin-right: 5px;\n}\n\n.graphselector > div:first-child {\n margin-top: 8px;\n}\n\n.graphselector > a:last-child {\n margin-bottom: 8px;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../trial/style/index.css": +/*!**********************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../trial/style/index.css ***! + \**********************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.trial-toolbar { + margin: 5px; + float: left; + overflow: none; + width: 375px; + height: 30px; + z-index: 3; + position: absolute; +} + +.trial-toolbar input { + height: 30px; +} + +.trial-toolbar input[type=checkbox] { + display: none +} + +.trial-toolbar label, .trial-toolbar a { + margin-right: 8px; + margin-top: 8px; +} + +.trial-toolbar input[type=checkbox] + label { + display:inline-block; + color: black; + cursor: pointer; +} + +.trial-toolbar input[type=checkbox]:checked + label { + color: blue; +} + +.trial-toolbar a.toollink, +.trial-toolbar a.toollink:link, +.trial-toolbar a.toollink:visited { + color: black; +} + +.trial-toolbar a.toollink:active { + color: blue; +} +`, "",{"version":3,"sources":["webpack://./../trial/style/index.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,WAAW;AACb","sourcesContent":[".trial-toolbar {\n margin: 5px;\n float: left;\n overflow: none;\n width: 375px;\n height: 30px;\n z-index: 3;\n position: absolute;\n}\n\n.trial-toolbar input {\n height: 30px;\n}\n\n.trial-toolbar input[type=checkbox] {\n display: none\n}\n\n.trial-toolbar label, .trial-toolbar a {\n margin-right: 8px;\n margin-top: 8px;\n}\n\n.trial-toolbar input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.trial-toolbar input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.trial-toolbar a.toollink,\n.trial-toolbar a.toollink:link,\n.trial-toolbar a.toollink:visited {\n color: black;\n}\n\n.trial-toolbar a.toollink:active {\n color: blue;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css": +/*!***********************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css ***! + \***********************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `div.now-tooltip { + position: absolute; + left: 1px; + right: 1px; + max-height: 200px; + max-width: 400px; + overflow: auto; + padding: 5px; + padding-bottom: 10px; + font: 12px sans-serif; + background: #DDD; + border: 0px; + border-radius: 8px; + z-index: 2000; +} + +.now-tooltip.hidden { + display: none; +}`, "",{"version":3,"sources":["webpack://./../utils/style/shared.css"],"names":[],"mappings":"AAAA;IACI,kBAAkB;IAClB,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,aAAa;AACjB;;AAEA;IACI,aAAa;AACjB","sourcesContent":["div.now-tooltip {\n position: absolute;\n left: 1px;\n right: 1px;\n max-height: 200px;\n max-width: 400px;\n overflow: auto;\n padding: 5px;\n padding-bottom: 10px;\n font: 12px sans-serif;\n background: #DDD;\n border: 0px;\n border-radius: 8px;\n z-index: 2000;\n}\n\n.now-tooltip.hidden {\n display: none;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/api.js": +/*!*****************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/api.js ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function (cssWithMappingToString) { + var list = []; + + // return the list of modules as css string + list.toString = function toString() { + return this.map(function (item) { + var content = ""; + var needLayer = typeof item[5] !== "undefined"; + if (item[4]) { + content += "@supports (".concat(item[4], ") {"); + } + if (item[2]) { + content += "@media ".concat(item[2], " {"); + } + if (needLayer) { + content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); + } + content += cssWithMappingToString(item); + if (needLayer) { + content += "}"; + } + if (item[2]) { + content += "}"; + } + if (item[4]) { + content += "}"; + } + return content; + }).join(""); + }; -ace.define("ace/autocomplete/inline_screenreader",["require","exports","module"], function(require, exports, module){"use strict"; -var AceInlineScreenReader = /** @class */ (function () { - function AceInlineScreenReader(editor) { - this.editor = editor; - this.screenReaderDiv = document.createElement("div"); - this.screenReaderDiv.classList.add("ace_screenreader-only"); - this.editor.container.appendChild(this.screenReaderDiv); + // import a list of modules into the list + list.i = function i(modules, media, dedupe, supports, layer) { + if (typeof modules === "string") { + modules = [[null, modules, undefined]]; } - AceInlineScreenReader.prototype.setScreenReaderContent = function (content) { - if (!this.popup && this.editor.completer && /**@type{import("../autocomplete").Autocomplete}*/ (this.editor.completer).popup) { - this.popup = /**@type{import("../autocomplete").Autocomplete}*/ (this.editor.completer).popup; - this.popup.renderer.on("afterRender", function () { - var row = this.popup.getRow(); - var t = this.popup.renderer.$textLayer; - var selected = t.element.childNodes[row - t.config.firstRow]; - if (selected) { - var idString = "doc-tooltip "; - for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) { - idString += "ace-inline-screenreader-line-".concat(lineIndex, " "); - } - selected.setAttribute("aria-describedby", idString); - } - }.bind(this)); + var alreadyImportedModules = {}; + if (dedupe) { + for (var k = 0; k < this.length; k++) { + var id = this[k][0]; + if (id != null) { + alreadyImportedModules[id] = true; } - while (this.screenReaderDiv.firstChild) { - this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild); + } + } + for (var _k = 0; _k < modules.length; _k++) { + var item = [].concat(modules[_k]); + if (dedupe && alreadyImportedModules[item[0]]) { + continue; + } + if (typeof layer !== "undefined") { + if (typeof item[5] === "undefined") { + item[5] = layer; + } else { + item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); + item[5] = layer; } - this._lines = content.split(/\r\n|\r|\n/); - var codeElement = this.createCodeBlock(); - this.screenReaderDiv.appendChild(codeElement); - }; - AceInlineScreenReader.prototype.destroy = function () { - this.screenReaderDiv.remove(); - }; - AceInlineScreenReader.prototype.createCodeBlock = function () { - var container = document.createElement("pre"); - container.setAttribute("id", "ace-inline-screenreader"); - for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) { - var codeElement = document.createElement("code"); - codeElement.setAttribute("id", "ace-inline-screenreader-line-".concat(lineIndex)); - var line = document.createTextNode(this._lines[lineIndex]); - codeElement.appendChild(line); - container.appendChild(codeElement); + } + if (media) { + if (!item[2]) { + item[2] = media; + } else { + item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); + item[2] = media; } - return container; + } + if (supports) { + if (!item[4]) { + item[4] = "".concat(supports); + } else { + item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); + item[4] = supports; + } + } + list.push(item); + } + }; + return list; +}; + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/getUrl.js": +/*!********************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***! + \********************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports = function (url, options) { + if (!options) { + options = {}; + } + if (!url) { + return url; + } + url = String(url.__esModule ? url.default : url); + + // If url is already wrapped in quotes, remove them + if (/^['"].*['"]$/.test(url)) { + url = url.slice(1, -1); + } + if (options.hash) { + url += options.hash; + } + + // Should url be wrapped? + // See https://drafts.csswg.org/css-values-3/#urls + if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) { + return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\""); + } + return url; +}; + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js": +/*!************************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports = function (item) { + var content = item[1]; + var cssMapping = item[3]; + if (!cssMapping) { + return content; + } + if (typeof btoa === "function") { + var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); + var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); + var sourceMapping = "/*# ".concat(data, " */"); + return [content].concat([sourceMapping]).join("\n"); + } + return [content].join("\n"); +}; + +/***/ }), + +/***/ "./style/bootstrap.min.css": +/*!*********************************!*\ + !*** ./style/bootstrap.min.css ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css */ "./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css"); + + + + + + + + + + + +var options = {}; + +options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); +options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); +options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); +options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); +options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); + +var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); + + + + + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); + + +/***/ }), + +/***/ "./style/index.css": +/*!*************************!*\ + !*** ./style/index.css ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./index.css */ "./node_modules/css-loader/dist/cjs.js!./style/index.css"); + + + + + + + + + + + +var options = {}; + +options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); +options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); +options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); +options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); +options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); + +var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); + + + + + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); + + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": +/*!****************************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! + \****************************************************************************/ +/***/ ((module) => { + +"use strict"; + + +var stylesInDOM = []; +function getIndexByIdentifier(identifier) { + var result = -1; + for (var i = 0; i < stylesInDOM.length; i++) { + if (stylesInDOM[i].identifier === identifier) { + result = i; + break; + } + } + return result; +} +function modulesToDom(list, options) { + var idCountMap = {}; + var identifiers = []; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + var id = options.base ? item[0] + options.base : item[0]; + var count = idCountMap[id] || 0; + var identifier = "".concat(id, " ").concat(count); + idCountMap[id] = count + 1; + var indexByIdentifier = getIndexByIdentifier(identifier); + var obj = { + css: item[1], + media: item[2], + sourceMap: item[3], + supports: item[4], + layer: item[5] }; - return AceInlineScreenReader; -}()); -exports.AceInlineScreenReader = AceInlineScreenReader; + if (indexByIdentifier !== -1) { + stylesInDOM[indexByIdentifier].references++; + stylesInDOM[indexByIdentifier].updater(obj); + } else { + var updater = addElementStyle(obj, options); + options.byIndex = i; + stylesInDOM.splice(i, 0, { + identifier: identifier, + updater: updater, + references: 1 + }); + } + identifiers.push(identifier); + } + return identifiers; +} +function addElementStyle(obj, options) { + var api = options.domAPI(options); + api.update(obj); + var updater = function updater(newObj) { + if (newObj) { + if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) { + return; + } + api.update(obj = newObj); + } else { + api.remove(); + } + }; + return updater; +} +module.exports = function (list, options) { + options = options || {}; + list = list || []; + var lastIdentifiers = modulesToDom(list, options); + return function update(newList) { + newList = newList || []; + for (var i = 0; i < lastIdentifiers.length; i++) { + var identifier = lastIdentifiers[i]; + var index = getIndexByIdentifier(identifier); + stylesInDOM[index].references--; + } + var newLastIdentifiers = modulesToDom(newList, options); + for (var _i = 0; _i < lastIdentifiers.length; _i++) { + var _identifier = lastIdentifiers[_i]; + var _index = getIndexByIdentifier(_identifier); + if (stylesInDOM[_index].references === 0) { + stylesInDOM[_index].updater(); + stylesInDOM.splice(_index, 1); + } + } + lastIdentifiers = newLastIdentifiers; + }; +}; + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js": +/*!********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***! + \********************************************************************/ +/***/ ((module) => { + +"use strict"; + + +var memo = {}; + +/* istanbul ignore next */ +function getTarget(target) { + if (typeof memo[target] === "undefined") { + var styleTarget = document.querySelector(target); + + // Special case to return head of iframe instead of iframe itself + if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { + try { + // This will throw an exception if access to iframe is blocked + // due to cross-origin restrictions + styleTarget = styleTarget.contentDocument.head; + } catch (e) { + // istanbul ignore next + styleTarget = null; + } + } + memo[target] = styleTarget; + } + return memo[target]; +} + +/* istanbul ignore next */ +function insertBySelector(insert, style) { + var target = getTarget(insert); + if (!target) { + throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); + } + target.appendChild(style); +} +module.exports = insertBySelector; + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js": +/*!**********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***! + \**********************************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* istanbul ignore next */ +function insertStyleElement(options) { + var element = document.createElement("style"); + options.setAttributes(element, options.attributes); + options.insert(element, options.options); + return element; +} +module.exports = insertStyleElement; + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***! + \**********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + + +/* istanbul ignore next */ +function setAttributesWithoutAttributes(styleElement) { + var nonce = true ? __webpack_require__.nc : 0; + if (nonce) { + styleElement.setAttribute("nonce", nonce); + } +} +module.exports = setAttributesWithoutAttributes; + +/***/ }), + +/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js": +/*!***************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***! + \***************************************************************/ +/***/ ((module) => { + +"use strict"; + + +/* istanbul ignore next */ +function apply(styleElement, options, obj) { + var css = ""; + if (obj.supports) { + css += "@supports (".concat(obj.supports, ") {"); + } + if (obj.media) { + css += "@media ".concat(obj.media, " {"); + } + var needLayer = typeof obj.layer !== "undefined"; + if (needLayer) { + css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {"); + } + css += obj.css; + if (needLayer) { + css += "}"; + } + if (obj.media) { + css += "}"; + } + if (obj.supports) { + css += "}"; + } + var sourceMap = obj.sourceMap; + if (sourceMap && typeof btoa !== "undefined") { + css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); + } + + // For old IE + /* istanbul ignore if */ + options.styleTagTransform(css, styleElement, options.options); +} +function removeStyleElement(styleElement) { + // istanbul ignore if + if (styleElement.parentNode === null) { + return false; + } + styleElement.parentNode.removeChild(styleElement); +} + +/* istanbul ignore next */ +function domAPI(options) { + if (typeof document === "undefined") { + return { + update: function update() {}, + remove: function remove() {} + }; + } + var styleElement = options.insertStyleElement(options); + return { + update: function update(obj) { + apply(styleElement, options, obj); + }, + remove: function remove() { + removeStyleElement(styleElement); + } + }; +} +module.exports = domAPI; -}); +/***/ }), -ace.define("ace/autocomplete/inline",["require","exports","module","ace/snippets","ace/autocomplete/inline_screenreader"], function(require, exports, module){"use strict"; -var snippetManager = require("../snippets").snippetManager; -var AceInlineScreenReader = require("./inline_screenreader").AceInlineScreenReader; -var AceInline = /** @class */ (function () { - function AceInline() { - this.editor = null; - } - AceInline.prototype.show = function (editor, completion, prefix) { - prefix = prefix || ""; - if (editor && this.editor && this.editor !== editor) { - this.hide(); - this.editor = null; - this.inlineScreenReader = null; - } - if (!editor || !completion) { - return false; - } - if (!this.inlineScreenReader) { - this.inlineScreenReader = new AceInlineScreenReader(editor); - } - var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value; - if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) { - return false; - } - this.editor = editor; - this.inlineScreenReader.setScreenReaderContent(displayText); - displayText = displayText.slice(prefix.length); - if (displayText === "") { - editor.removeGhostText(); - } - else { - editor.setGhostText(displayText); - } - return true; - }; - AceInline.prototype.isOpen = function () { - if (!this.editor) { - return false; - } - return !!this.editor.renderer.$ghostText; - }; - AceInline.prototype.hide = function () { - if (!this.editor) { - return false; - } - this.editor.removeGhostText(); - return true; - }; - AceInline.prototype.destroy = function () { - this.hide(); - this.editor = null; - if (this.inlineScreenReader) { - this.inlineScreenReader.destroy(); - this.inlineScreenReader = null; - } - }; - return AceInline; -}()); -exports.AceInline = AceInline; +/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js": +/*!*********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***! + \*********************************************************************/ +/***/ ((module) => { -}); +"use strict"; -ace.define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module){"use strict"; -exports.parForEach = function (array, fn, callback) { - var completed = 0; - var arLength = array.length; - if (arLength === 0) - callback(); - for (var i = 0; i < arLength; i++) { - fn(array[i], function (result, err) { - completed++; - if (completed === arLength) - callback(result, err); - }); - } -}; -var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\u2000\u2070-\uFFFF]/; -exports.retrievePrecedingIdentifier = function (text, pos, regex) { - regex = regex || ID_REGEX; - var buf = []; - for (var i = pos - 1; i >= 0; i--) { - if (regex.test(text[i])) - buf.push(text[i]); - else - break; - } - return buf.reverse().join(""); -}; -exports.retrieveFollowingIdentifier = function (text, pos, regex) { - regex = regex || ID_REGEX; - var buf = []; - for (var i = pos; i < text.length; i++) { - if (regex.test(text[i])) - buf.push(text[i]); - else - break; + +/* istanbul ignore next */ +function styleTagTransform(css, styleElement) { + if (styleElement.styleSheet) { + styleElement.styleSheet.cssText = css; + } else { + while (styleElement.firstChild) { + styleElement.removeChild(styleElement.firstChild); } - return buf; -}; -exports.getCompletionPrefix = function (editor) { - var pos = editor.getCursorPosition(); - var line = editor.session.getLine(pos.row); - var prefix; - editor.completers.forEach(function (completer) { - if (completer.identifierRegexps) { - completer.identifierRegexps.forEach(function (identifierRegex) { - if (!prefix && identifierRegex) - prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex); - }.bind(this)); - } - }.bind(this)); - return prefix || this.retrievePrecedingIdentifier(line, pos.column); -}; -exports.triggerAutocomplete = function (editor, previousChar) { - var previousChar = previousChar == null - ? editor.session.getPrecedingCharacter() - : previousChar; - return editor.completers.some(function (completer) { - if (completer.triggerCharacters && Array.isArray(completer.triggerCharacters)) { - return completer.triggerCharacters.includes(previousChar); - } - }); -}; + styleElement.appendChild(document.createTextNode(css)); + } +} +module.exports = styleTagTransform; -}); +/***/ }), -ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/inline","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/lang","ace/lib/dom","ace/snippets","ace/config","ace/lib/event","ace/lib/scroll"], function(require, exports, module){"use strict"; -var HashHandler = require("./keyboard/hash_handler").HashHandler; -var AcePopup = require("./autocomplete/popup").AcePopup; -var AceInline = require("./autocomplete/inline").AceInline; -var getAriaId = require("./autocomplete/popup").getAriaId; -var util = require("./autocomplete/util"); -var lang = require("./lib/lang"); -var dom = require("./lib/dom"); -var snippetManager = require("./snippets").snippetManager; -var config = require("./config"); -var event = require("./lib/event"); -var preventParentScroll = require("./lib/scroll").preventParentScroll; -var destroyCompleter = function (e, editor) { - editor.completer && editor.completer.destroy(); -}; -var Autocomplete = /** @class */ (function () { - function Autocomplete() { - this.autoInsert = false; - this.autoSelect = true; - this.autoShown = false; - this.exactMatch = false; - this.inlineEnabled = false; - this.keyboardHandler = new HashHandler(); - this.keyboardHandler.bindKeys(this.commands); - this.parentNode = null; - this.setSelectOnHover = false; - this.hasSeen = new Set(); - this.showLoadingState = false; - this.stickySelectionDelay = 500; - this.blurListener = this.blurListener.bind(this); - this.changeListener = this.changeListener.bind(this); - this.mousedownListener = this.mousedownListener.bind(this); - this.mousewheelListener = this.mousewheelListener.bind(this); - this.onLayoutChange = this.onLayoutChange.bind(this); - this.changeTimer = lang.delayedCall(function () { - this.updateCompletions(true); - }.bind(this)); - this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50); - this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50); - this.stickySelectionTimer = lang.delayedCall(function () { - this.stickySelection = true; - }.bind(this), this.stickySelectionDelay); - this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () { - var initialPosition = this.completionProvider && this.completionProvider.initialPosition; - if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0) - return; - this.completions = new FilteredList(Autocomplete.completionsForLoading); - this.openPopup(this.editor, initialPosition.prefix, false); - this.popup.renderer.setStyle("ace_loading", true); - }.bind(this), this.stickySelectionDelay); - } - Object.defineProperty(Autocomplete, "completionsForLoading", { - get: function () { - return [{ - caption: config.nls("autocomplete.loading", "Loading..."), - value: "" - }]; - }, - enumerable: false, - configurable: true - }); - Autocomplete.prototype.$init = function () { - this.popup = new AcePopup(this.parentNode || document.body || document.documentElement); - this.popup.on("click", function (e) { - this.insertMatch(); - e.stop(); - }.bind(this)); - this.popup.focus = this.editor.focus.bind(this.editor); - this.popup.on("show", this.$onPopupShow.bind(this)); - this.popup.on("hide", this.$onHidePopup.bind(this)); - this.popup.on("select", this.$onPopupChange.bind(this)); - event.addListener(this.popup.container, "mouseout", this.mouseOutListener.bind(this)); - this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null)); - this.popup.renderer.on("afterRender", this.$onPopupRender.bind(this)); - return this.popup; - }; - Autocomplete.prototype.$initInline = function () { - if (!this.inlineEnabled || this.inlineRenderer) - return; - this.inlineRenderer = new AceInline(); - return this.inlineRenderer; - }; - Autocomplete.prototype.getPopup = function () { - return this.popup || this.$init(); - }; - Autocomplete.prototype.$onHidePopup = function () { - if (this.inlineRenderer) { - this.inlineRenderer.hide(); - } - this.hideDocTooltip(); - this.stickySelectionTimer.cancel(); - this.popupTimer.cancel(); - this.stickySelection = false; - }; - Autocomplete.prototype.$seen = function (completion) { - if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === "function") { - completion.completer.onSeen(this.editor, completion); - this.hasSeen.add(completion); - } - }; - Autocomplete.prototype.$onPopupChange = function (hide) { - if (this.inlineRenderer && this.inlineEnabled) { - var completion = hide ? null : this.popup.getData(this.popup.getRow()); - this.$updateGhostText(completion); - if (this.popup.isMouseOver && this.setSelectOnHover) { - this.tooltipTimer.call(null, null); - return; - } - this.popupTimer.schedule(); - this.tooltipTimer.schedule(); - } - else { - this.popupTimer.call(null, null); - this.tooltipTimer.call(null, null); - } - }; - Autocomplete.prototype.$updateGhostText = function (completion) { - var row = this.base.row; - var column = this.base.column; - var cursorColumn = this.editor.getCursorPosition().column; - var prefix = this.editor.session.getLine(row).slice(column, cursorColumn); - if (!this.inlineRenderer.show(this.editor, completion, prefix)) { - this.inlineRenderer.hide(); - } - else { - this.$seen(completion); - } - }; - Autocomplete.prototype.$onPopupRender = function () { - var inlineEnabled = this.inlineRenderer && this.inlineEnabled; - if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) { - for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) { - var completion = this.popup.getData(i); - if (completion && (!inlineEnabled || completion.hideInlinePreview)) { - this.$seen(completion); - } - } - } - }; - Autocomplete.prototype.$onPopupShow = function (hide) { - this.$onPopupChange(hide); - this.stickySelection = false; - if (this.stickySelectionDelay >= 0) - this.stickySelectionTimer.schedule(this.stickySelectionDelay); - }; - Autocomplete.prototype.observeLayoutChanges = function () { - if (this.$elements || !this.editor) - return; - window.addEventListener("resize", this.onLayoutChange, { passive: true }); - window.addEventListener("wheel", this.mousewheelListener); - var el = this.editor.container.parentNode; - var elements = []; - while (el) { - elements.push(el); - el.addEventListener("scroll", this.onLayoutChange, { passive: true }); - el = el.parentNode; - } - this.$elements = elements; - }; - Autocomplete.prototype.unObserveLayoutChanges = function () { - var _this = this; - window.removeEventListener("resize", this.onLayoutChange, { passive: true }); - window.removeEventListener("wheel", this.mousewheelListener); - this.$elements && this.$elements.forEach(function (el) { - el.removeEventListener("scroll", _this.onLayoutChange, { passive: true }); - }); - this.$elements = null; - }; - Autocomplete.prototype.onLayoutChange = function () { - if (!this.popup.isOpen) - return this.unObserveLayoutChanges(); - this.$updatePopupPosition(); - this.updateDocTooltip(); - }; - Autocomplete.prototype.$updatePopupPosition = function () { - var editor = this.editor; - var renderer = editor.renderer; - var lineHeight = renderer.layerConfig.lineHeight; - var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); - pos.left -= this.popup.getTextLeftOffset(); - var rect = editor.container.getBoundingClientRect(); - pos.top += rect.top - renderer.layerConfig.offset; - pos.left += rect.left - editor.renderer.scrollLeft; - pos.left += renderer.gutterWidth; - var posGhostText = { - top: pos.top, - left: pos.left - }; - if (renderer.$ghostText && renderer.$ghostTextWidget) { - if (this.base.row === renderer.$ghostText.position.row) { - posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight; - } - } - var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight; - var lowestPosition = editorContainerBottom < posGhostText.top ? - { top: editorContainerBottom, left: posGhostText.left } : - posGhostText; - if (this.popup.tryShow(lowestPosition, lineHeight, "bottom")) { - return; - } - if (this.popup.tryShow(pos, lineHeight, "top")) { - return; - } - this.popup.show(pos, lineHeight); - }; - Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) { - this.$firstOpenTimer.cancel(); - if (!this.popup) - this.$init(); - if (this.inlineEnabled && !this.inlineRenderer) - this.$initInline(); - this.popup.autoSelect = this.autoSelect; - this.popup.setSelectOnHover(this.setSelectOnHover); - var oldRow = this.popup.getRow(); - var previousSelectedItem = this.popup.data[oldRow]; - this.popup.setData(this.completions.filtered, this.completions.filterText); - if (this.editor.textInput.setAriaOptions) { - this.editor.textInput.setAriaOptions({ - activeDescendant: getAriaId(this.popup.getRow()), - inline: this.inlineEnabled - }); - } - editor.keyBinding.addKeyboardHandler(this.keyboardHandler); - var newRow; - if (this.stickySelection) - newRow = this.popup.data.indexOf(previousSelectedItem); - if (!newRow || newRow === -1) - newRow = 0; - this.popup.setRow(this.autoSelect ? newRow : -1); - if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow]) - this.$onPopupChange(); - var inlineEnabled = this.inlineRenderer && this.inlineEnabled; - if (newRow === oldRow && inlineEnabled) { - var completion = this.popup.getData(this.popup.getRow()); - this.$updateGhostText(completion); - } - if (!keepPopupPosition) { - this.popup.setTheme(editor.getTheme()); - this.popup.setFontSize(editor.getFontSize()); - this.$updatePopupPosition(); - if (this.tooltipNode) { - this.updateDocTooltip(); - } - } - this.changeTimer.cancel(); - this.observeLayoutChanges(); - }; - Autocomplete.prototype.detach = function () { - if (this.editor) { - this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); - this.editor.off("changeSelection", this.changeListener); - this.editor.off("blur", this.blurListener); - this.editor.off("mousedown", this.mousedownListener); - this.editor.off("mousewheel", this.mousewheelListener); - } - this.$firstOpenTimer.cancel(); - this.changeTimer.cancel(); - this.hideDocTooltip(); - if (this.completionProvider) { - this.completionProvider.detach(); - } - if (this.popup && this.popup.isOpen) - this.popup.hide(); - if (this.popup && this.popup.renderer) { - this.popup.renderer.off("afterRender", this.$onPopupRender); - } - if (this.base) - this.base.detach(); - this.activated = false; - this.completionProvider = this.completions = this.base = null; - this.unObserveLayoutChanges(); - }; - Autocomplete.prototype.changeListener = function (e) { - var cursor = this.editor.selection.lead; - if (cursor.row != this.base.row || cursor.column < this.base.column) { - this.detach(); - } - if (this.activated) - this.changeTimer.schedule(); - else - this.detach(); - }; - Autocomplete.prototype.blurListener = function (e) { - var el = document.activeElement; - var text = this.editor.textInput.getElement(); - var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget); - var container = this.popup && this.popup.container; - if (el != text && el.parentNode != container && !fromTooltip - && el != this.tooltipNode && e.relatedTarget != text) { - this.detach(); - } - }; - Autocomplete.prototype.mousedownListener = function (e) { - this.detach(); - }; - Autocomplete.prototype.mousewheelListener = function (e) { - if (this.popup && !this.popup.isMouseOver) - this.detach(); - }; - Autocomplete.prototype.mouseOutListener = function (e) { - if (this.popup.isOpen) - this.$updatePopupPosition(); - }; - Autocomplete.prototype.goTo = function (where) { - this.popup.goTo(where); - }; - Autocomplete.prototype.insertMatch = function (data, options) { - if (!data) - data = this.popup.getData(this.popup.getRow()); - if (!data) - return false; - if (data.value === "") // Explicitly given nothing to insert, e.g. "No suggestion state" - return this.detach(); - var completions = this.completions; - var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options); - if (this.completions == completions) - this.detach(); - return result; - }; - Autocomplete.prototype.showPopup = function (editor, options) { - if (this.editor) - this.detach(); - this.activated = true; - this.editor = editor; - if (editor.completer != this) { - if (editor.completer) - editor.completer.detach(); - editor.completer = this; +/***/ "../trial/lib/config.js": +/*!******************************!*\ + !*** ../trial/lib/config.js ***! + \******************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "../trial/lib/graph.js": +/*!*****************************!*\ + !*** ../trial/lib/graph.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TrialGraph = void 0; +__webpack_require__(/*! d3-transition */ "../../node_modules/d3-transition/src/index.js"); +const d3_color_1 = __webpack_require__(/*! d3-color */ "../../node_modules/d3-color/src/index.js"); +const d3_hierarchy_1 = __webpack_require__(/*! d3-hierarchy */ "../../node_modules/d3-hierarchy/src/index.js"); +const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); +const d3_zoom_1 = __webpack_require__(/*! d3-zoom */ "../../node_modules/d3-zoom/src/index.js"); +const fs = __webpack_require__(/*! file-saver */ "../../node_modules/file-saver/dist/FileSaver.min.js"); +const utils_1 = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); +class TrialGraph { + constructor(graphId, div, config = {}, showDiffFunction, nowVisPanel) { + if (showDiffFunction && nowVisPanel) { + this.showDiffFunction = showDiffFunction; + this.nowVisPanel = nowVisPanel; } - editor.on("changeSelection", this.changeListener); - editor.on("blur", this.blurListener); - editor.on("mousedown", this.mousedownListener); - editor.on("mousewheel", this.mousewheelListener); - this.updateCompletions(false, options); - }; - Autocomplete.prototype.getCompletionProvider = function (initialPosition) { - if (!this.completionProvider) - this.completionProvider = new CompletionProvider(initialPosition); - return this.completionProvider; - }; - Autocomplete.prototype.gatherCompletions = function (editor, callback) { - return this.getCompletionProvider().gatherCompletions(editor, callback); - }; - Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) { - if (keepPopupPosition && this.base && this.completions) { - var pos = this.editor.getCursorPosition(); - var prefix = this.editor.session.getTextRange({ start: this.base, end: pos }); - if (prefix == this.completions.filterText) - return; - this.completions.setFilter(prefix); - if (!this.completions.filtered.length) - return this.detach(); - if (this.completions.filtered.length == 1 - && this.completions.filtered[0].value == prefix - && !this.completions.filtered[0].snippet) - return this.detach(); - this.openPopup(this.editor, prefix, keepPopupPosition); + this.i = 0; + let defaultConfig = { + customSize: function (g) { + return [ + g.config.width, + g.config.height, + ]; + }, + customMouseOver: (g, d) => false, + customMouseOut: (g, d) => false, + customForm: (g, form) => null, + customLoadTooltip: (g, div, text, trialid, aid) => null, + duration: 750, + top: 50, + right: 30, + bottom: 80, + left: 30, + width: 900, + height: 500, + useTooltip: false, + fontSize: 10, + labelFontSize: 10, + nodeSizeX: 47, + nodeSizeY: 100, + queryTooltip: false + }; + this.config = Object.assign({}, defaultConfig, config); + this.graphId = graphId; + this.zoom = (0, d3_zoom_1.zoom)() + .on("zoom", (event) => { + return this.zoomFunction(event); + }) + .on("start", () => (0, d3_selection_1.select)('body').style("cursor", "move")) + .on("end", () => (0, d3_selection_1.select)('body').style("cursor", "auto")) + .wheelDelta(function () { + const e = event; + return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000; + }); + this.div = (0, d3_selection_1.select)(div); + this.form = this.div + .append("form") + .classed("trial-toolbar", true); + this.svg = (0, d3_selection_1.select)(div) + .append("div") + .append("svg") + .attr("width", this.config.width) + .attr("height", this.config.height) + .call(this.zoom); + this.createMarker('end', 'enormal', 'black'); + this.createMarker('endbefore', 'ebefore', 'red'); + this.createMarker('endafter', 'eafter', 'green'); + this.g = this.svg.append("g") + .attr("id", this._graphId()) + .attr("transform", "translate(0,0)") + .classed('TrialGraph', true); + this.tree = (0, d3_hierarchy_1.tree)() + .nodeSize([ + this.config.nodeSizeX, + this.config.nodeSizeY + ]); + // Tooltip + this.tooltipDiv = (0, d3_selection_1.select)("body").append("div") + .attr("class", "now-tooltip now-trial-tooltip") + .style("opacity", 0) + .on("mouseout", () => { + this.closeTooltip(); + }); + // Zoom + this.svg + .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top)); + this.activationStorage = {}; + } + init(data, t1, t2) { + this.t1 = t1; + this.t2 = t2; + // **Toolbar** + this.createToolbar(this.form); + // **Graph** + this.minDuration = data.min_duration; + this.maxDuration = data.max_duration; + this.totalDuration = {}; + this.totalDuration[t1] = this.maxDuration[t1] - this.minDuration[t1]; + this.totalDuration[t2] = this.maxDuration[t2] - this.minDuration[t2]; + this.maxTotalDuration = Math.max(this.totalDuration[t1], this.totalDuration[t2]); + this.colors = data.colors; + if (!data.root) return; - } - if (options && options.matches) { - var pos = this.editor.getSelectionRange().start; - this.base = this.editor.session.doc.createAnchor(pos.row, pos.column); - this.base.$insertRight = true; - this.completions = new FilteredList(options.matches); - this.getCompletionProvider().completions = this.completions; - return this.openPopup(this.editor, "", keepPopupPosition); - } - var session = this.editor.getSession(); - var pos = this.editor.getCursorPosition(); - var prefix = util.getCompletionPrefix(this.editor); - this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length); - this.base.$insertRight = true; - var completionOptions = { - exactMatch: this.exactMatch, - ignoreCaption: this.ignoreCaption + this.root = (0, d3_hierarchy_1.hierarchy)(data.root, function (d) { return d.children; }); + this.root.x0 = 0; + this.root.y0 = (this.config.width) / 2; + this.alledges = data.edges; + this.update(this.root); + } + createToolbar(form) { + let self = this; + form = form.append("div") + .classed("buttons buttonsGraph", true); + this.config.customForm(this, form); + // Reset zoom + form.append("a") + .classed("toollink", true) + .attr("id", "trial-" + this.graphId + "-restore-zoom") + .attr("href", "#") + .attr("title", "Restore zoom") + .on("click", () => this.restorePosition()) + .append("i") + .classed("fa fa-eye", true); + // Toggle Tooltips + let tooltipsToggle = form.append("input") + .attr("id", "trial-" + this.graphId + "-toolbar-tooltips") + .attr("type", "checkbox") + .attr("name", "trial-toolbar-tooltips") + .attr("value", "show") + .property("checked", this.config.useTooltip) + .on("change", () => { + this.closeTooltip(); + this.config.useTooltip = tooltipsToggle.property("checked"); + }); + form.append("label") + .attr("for", "trial-" + this.graphId + "-toolbar-tooltips") + .attr("title", "Show tooltips on mouse hover") + .append("i") + .classed("fa fa-comment", true); + // Download SVG + form.append("a") + .classed("toollink", true) + .attr("id", "trial-" + this.graphId + "-download") + .attr("href", "#") + .attr("title", "Download graph SVG") + .on("click", () => { + this.download(); + }) + .append("i") + .classed("fa fa-download", true); + // Set Font Size + let fontToggle = form.append("input") + .attr("id", "trial-" + this.graphId + "-toolbar-fonts") + .attr("type", "checkbox") + .attr("name", "trial-toolbar-fonts") + .attr("value", "show") + .property("checked", false) + .on("change", () => { + let display = fontToggle.property("checked") ? "inline-block" : "none"; + fontSize.style("display", display); + labelFontSize.style("display", display); + }); + form.append("label") + .attr("for", "trial-" + this.graphId + "-toolbar-fonts") + .attr("title", "Set font size") + .append("i") + .classed("fa fa-font", true); + let fontSize = form.append("input") + .attr("type", "number") + .attr("value", this.config.fontSize) + .style("width", "50px") + .style("display", "none") + .attr("title", "Node font size") + .on("change", () => { + this.config.fontSize = fontSize.property("value"); + this.svg.selectAll(".node text").attr("font-size", this.config.fontSize); + }); + let labelFontSize = form.append("input") + .attr("type", "number") + .attr("value", this.config.labelFontSize) + .style("width", "50px") + .style("display", "none") + .attr("title", "Arrow font size") + .on("change", () => { + this.config.labelFontSize = labelFontSize.property("value"); + this.svg.selectAll("text.label_text").attr("font-size", this.config.labelFontSize); + }); + // Set distances + let setDistances = function () { + self.config.nodeSizeX = distanceX.property("value"); + self.config.nodeSizeY = distanceY.property("value"); + self.wrapText(); + self.tree + .nodeSize([ + self.config.nodeSizeX, + self.config.nodeSizeY + ]); + self.update(self.root); }; - this.getCompletionProvider({ - prefix: prefix, - pos: pos - }).provideCompletions(this.editor, completionOptions, - function (err, completions, finished) { - var filtered = completions.filtered; - var prefix = util.getCompletionPrefix(this.editor); - this.$firstOpenTimer.cancel(); - if (finished) { - if (!filtered.length) { - var emptyMessage = !this.autoShown && this.emptyMessage; - if (typeof emptyMessage == "function") - emptyMessage = this.emptyMessage(prefix); - if (emptyMessage) { - var completionsForEmpty = [{ - caption: emptyMessage, - value: "" - } - ]; - this.completions = new FilteredList(completionsForEmpty); - this.openPopup(this.editor, prefix, keepPopupPosition); - this.popup.renderer.setStyle("ace_loading", false); - this.popup.renderer.setStyle("ace_empty-message", true); - return; - } - return this.detach(); - } - if (filtered.length == 1 && filtered[0].value == prefix - && !filtered[0].snippet) - return this.detach(); - if (this.autoInsert && !this.autoShown && filtered.length == 1) - return this.insertMatch(filtered[0]); - } - this.completions = !finished && this.showLoadingState ? - new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) : - completions; - this.openPopup(this.editor, prefix, keepPopupPosition); - this.popup.renderer.setStyle("ace_empty-message", false); - this.popup.renderer.setStyle("ace_loading", !finished); - }.bind(this)); - if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) { - this.$firstOpenTimer.delay(this.stickySelectionDelay / 2); - } - }; - Autocomplete.prototype.cancelContextMenu = function () { - this.editor.$mouseHandler.cancelContextMenu(); - }; - Autocomplete.prototype.updateDocTooltip = function () { - var popup = this.popup; - var all = this.completions && this.completions.filtered; - var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]); - var doc = null; - if (!selected || !this.editor || !this.popup.isOpen) - return this.hideDocTooltip(); - var completersLength = this.editor.completers.length; - for (var i = 0; i < completersLength; i++) { - var completer = this.editor.completers[i]; - if (completer.getDocTooltip && selected.completerId === completer.id) { - doc = completer.getDocTooltip(selected); - break; + // Set Distance X + let distanceXToggle = form.append("input") + .attr("id", "trial-" + this.graphId + "-toolbar-distance-x") + .attr("type", "checkbox") + .attr("name", "trial-toolbar-distance-x") + .attr("value", "show") + .property("checked", false) + .on("change", () => { + let display = distanceXToggle.property("checked") ? "inline-block" : "none"; + distanceX.style("display", display); + }); + form.append("label") + .attr("for", "trial-" + this.graphId + "-toolbar-distance-x") + .attr("title", "Set horizontal distance") + .append("i") + .classed("fa fa-arrows-h", true); + let distanceX = form.append("input") + .attr("type", "number") + .attr("value", this.config.nodeSizeX) + .style("width", "65px") + .style("display", "none") + .attr("title", "Node horizontal distance") + .on("change", setDistances); + // Set Distance Y + let distanceYToggle = form.append("input") + .attr("id", "trial-" + this.graphId + "-toolbar-distance-y") + .attr("type", "checkbox") + .attr("name", "trial-toolbar-distance-y") + .attr("value", "show") + .property("checked", false) + .on("change", () => { + let display = distanceYToggle.property("checked") ? "inline-block" : "none"; + distanceY.style("display", display); + }); + form.append("label") + .attr("for", "trial-" + this.graphId + "-toolbar-distance-y") + .attr("title", "Set vertical distance") + .append("i") + .classed("fa fa-arrows-v", true); + let distanceY = form.append("input") + .attr("type", "number") + .attr("value", this.config.nodeSizeY) + .style("width", "65px") + .style("display", "none") + .attr("title", "Node vertical distance") + .on("change", setDistances); + // Submit + form.append("input") + .attr("type", "submit") + .attr("name", "prevent-enter") + .attr("onclick", "return false;") + .style("display", "none"); + } + load(data, t1, t2) { + this.init(data, t1, t2); + this.updateWindow(); + } + restorePosition() { + this.wrapText(); + this.svg + .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top)); + } + updateWindow() { + let size = this.config.customSize(this); + this.config.width = size[0]; + this.config.height = size[1]; + this.svg + .attr("width", size[0]) + .attr("height", size[1]); + } + update(source) { + let treeData = this.tree(this.root); + this.nodes = treeData.descendants(); + var node = this.g.selectAll('g.node') + .data(this.nodes, (d) => { return d.id || (d.id = ++this.i); }); + let validNodes = {}; + this.nodes.forEach((node) => { + validNodes[node.data.index] = node; + }); + var edges = this.alledges.filter((edge) => { + let source = validNodes[edge.source]; + let target = validNodes[edge.target]; + if (source == undefined || target == undefined) { + return false; } + return true; + }).map((edge) => { + let source = validNodes[edge.source]; + let target = validNodes[edge.target]; + var copy = Object.assign({}, edge); + copy.id = edge.source + "-" + edge.target; + copy.source = source; + copy.target = target; + return copy; + }); + this.updateNodes(source, node); + this.updateLinks(source, edges); + this.updateLinkLabels(edges); + // Store old positions for transition + this.nodes.forEach(function (d, i) { + d.x0 = d.x; + d.y0 = d.y; + }); + this.wrapText(); + } + download(name) { + var isFileSaverSupported = false; + try { + isFileSaverSupported = !!new Blob(); } - if (!doc && typeof selected != "string") - doc = selected; - if (typeof doc == "string") - doc = { docText: doc }; - if (!doc || !(doc.docHTML || doc.docText)) - return this.hideDocTooltip(); - this.showDocTooltip(doc); - }; - Autocomplete.prototype.showDocTooltip = function (item) { - if (!this.tooltipNode) { - this.tooltipNode = dom.createElement("div"); - this.tooltipNode.style.margin = "0"; - this.tooltipNode.style.pointerEvents = "auto"; - this.tooltipNode.style.overscrollBehavior = "contain"; - this.tooltipNode.tabIndex = -1; - this.tooltipNode.onblur = this.blurListener.bind(this); - this.tooltipNode.onclick = this.onTooltipClick.bind(this); - this.tooltipNode.id = "doc-tooltip"; - this.tooltipNode.setAttribute("role", "tooltip"); - this.tooltipNode.addEventListener("wheel", preventParentScroll); - } - var theme = this.editor.renderer.theme; - this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " + - (theme.isDark ? "ace_dark " : "") + (theme.cssClass || ""); - var tooltipNode = this.tooltipNode; - if (item.docHTML) { - tooltipNode.innerHTML = item.docHTML; - } - else if (item.docText) { - tooltipNode.textContent = item.docText; + catch (e) { + alert("blob not supported"); } - if (!tooltipNode.parentNode) - this.popup.container.appendChild(this.tooltipNode); - var popup = this.popup; - var rect = popup.container.getBoundingClientRect(); - var targetWidth = 400; - var targetHeight = 300; - var scrollBarSize = popup.renderer.scrollBar.width || 10; - var leftSize = rect.left; - var rightSize = window.innerWidth - rect.right - scrollBarSize; - var topSize = popup.isTopdown ? rect.top : window.innerHeight - scrollBarSize - rect.bottom; - var scores = [ - Math.min(rightSize / targetWidth, 1), - Math.min(leftSize / targetWidth, 1), - Math.min(topSize / targetHeight * 0.9), - ]; - var max = Math.max.apply(Math, scores); - var tooltipStyle = tooltipNode.style; - tooltipStyle.display = "block"; - if (max == scores[0]) { - tooltipStyle.left = (rect.right + 1) + "px"; - tooltipStyle.right = ""; - tooltipStyle.maxWidth = targetWidth * max + "px"; - tooltipStyle.top = rect.top + "px"; - tooltipStyle.bottom = ""; - tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + "px"; + name = (name === undefined) ? "trial.svg" : name; + let gnode = this.g.node(); + var bbox = gnode.getBBox(); + var width = this.svg.attr("width"), height = this.svg.attr("height"); + this.g.attr("transform", "translate(" + (-bbox.x + 5) + ", " + (-bbox.y + 5) + ")"); + let svgNode = this.svg + .attr("title", "Trial") + .attr("version", 1.1) + .attr("width", bbox.width + 10) + .attr("height", bbox.height + 10) + .attr("xmlns", "http://www.w3.org/2000/svg") + .node(); + var html = svgNode.parentNode.innerHTML; + html = ' 1 || activations[trial_ids[1]].length > 1); + let modal; + let modalBody; + let button; + if (showModal) { + modal = (0, d3_selection_1.select)(document.getElementById("main")) + .append("div").classed("modal fade show", true) + .attr("id", "functionDiffModal") + .attr("tabindex", "-1") + .attr("role", "dialog") + .attr("aria-labelledby", "functionDiffModalLabel") + .style("display", "none") + .attr("aria-hidden", "false") + .style("display", "block"); + let modalDialog = modal.append("div").classed("modal-dialog", true).attr("role", "document"); + let modalContent = modalDialog.append("div").classed("modal-content", true); + let modalHeader = modalContent.append("div").classed("modal-header", true); + modalHeader.append("h5").classed("modal-title", true).attr("id", "functionDiffModalLabel").text("Select a function activation: "); + modalHeader.append("button").classed("close", true).attr("data-dismiss", "modal").attr("aria-label", "Close") + .append("span").attr("aria-hidden", "true").html("×").on("click", () => modal.remove()); + modalBody = modalContent.append("div").classed("modal-body", true); + modalBody.append("p").text("This function was called multipled times. Select the activations you want to see their diff").style("font-weight", "bold"); + button = modalContent.append("div").classed("modal-footer", true).append("button").classed("btn btn-primary", true).text("Confirm"); } - else if (max == scores[2]) { - tooltipStyle.left = window.innerWidth - rect.left + "px"; - tooltipStyle.maxWidth = Math.min(targetWidth, window.innerWidth) + "px"; - if (popup.isTopdown) { - tooltipStyle.top = rect.bottom + "px"; - tooltipStyle.left = rect.left + "px"; - tooltipStyle.right = ""; - tooltipStyle.bottom = ""; - tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.bottom, targetHeight) + "px"; + let compareFunctionCallsUrl = "commands/diff"; + let windowLabel = "Diff"; + for (let i = 0; i < trial_ids.length; i++) { + let trial = trial_ids[i]; + if (showModal) { + let trialNumber = i == 0 ? "first" : "second"; + modalBody.append("span").text("Select the " + trialNumber + " trial activation: "); + let select = modalBody.append("select").classed("form-select", true).attr("arial-label", "functionTrial" + trial).attr("id", "functionTrial" + trial); + for (let activation in activations[trial]) { + fetch("/diff/getFunctionActivationArguments/" + trial + "/" + activations[trial][activation], { + method: 'GET', // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + }, + }).then((response) => { + response.json().then((json) => { + select.append("option").attr("value", activations[trial][activation]).text(activations[trial][activation] + " params: " + json.function_params.toString()); + }); + }); + } + modalBody.append("br"); } else { - tooltipStyle.top = popup.container.offsetTop - tooltipNode.offsetHeight + "px"; - tooltipStyle.left = rect.left + "px"; - tooltipStyle.right = ""; - tooltipStyle.bottom = ""; - tooltipStyle.maxHeight = Math.min(popup.container.offsetTop, targetHeight) + "px"; - } - } - }; - Autocomplete.prototype.hideDocTooltip = function () { - this.tooltipTimer.cancel(); - if (!this.tooltipNode) - return; - var el = this.tooltipNode; - if (!this.editor.isFocused() && document.activeElement == el) - this.editor.focus(); - this.tooltipNode = null; - if (el.parentNode) - el.parentNode.removeChild(el); - }; - Autocomplete.prototype.onTooltipClick = function (e) { - var a = e.target; - while (a && a != this.tooltipNode) { - if (a.nodeName == "A" && a.href) { - a.rel = "noreferrer"; - a.target = "_blank"; - break; + if (compareFunctionCallsUrl.length > 0) + compareFunctionCallsUrl += "/"; + compareFunctionCallsUrl += trial + "/"; + compareFunctionCallsUrl += activations[trial]; + windowLabel += " trial " + trial + " activation_id " + activations[trial]; } - a = a.parentNode; - } - }; - Autocomplete.prototype.destroy = function () { - this.detach(); - if (this.popup) { - this.popup.destroy(); - var el = this.popup.container; - if (el && el.parentNode) - el.parentNode.removeChild(el); } - if (this.editor && this.editor.completer == this) { - this.editor.off("destroy", destroyCompleter); - this.editor.completer = null; + if (showModal) { + button === null || button === void 0 ? void 0 : button.on("click", () => { + let firstTrialActivation = document.getElementById("functionTrial" + trial_ids[0]).selectedOptions[0].value; + let secondTrialActivation = document.getElementById("functionTrial" + trial_ids[1]).selectedOptions[0].value; + compareFunctionCallsUrl += "/" + trial_ids[0] + "/" + firstTrialActivation + "/" + trial_ids[1] + "/" + secondTrialActivation; + windowLabel += " trial " + trial_ids[0] + " activation_id " + firstTrialActivation + " trial " + trial_ids[1] + " activation_id " + secondTrialActivation; + makeRequest(this.showDiffFunction, this.nowVisPanel); + modal.remove(); + }); } - this.inlineRenderer = this.popup = this.editor = null; - }; - Autocomplete.for = function (editor) { - if (editor.completer instanceof Autocomplete) { - return editor.completer; + else { + makeRequest(this.showDiffFunction, this.nowVisPanel); } - if (editor.completer) { - editor.completer.destroy(); - editor.completer = null; + function makeRequest(showDiffFunction, nowVisPanel) { + fetch(compareFunctionCallsUrl, { + method: 'GET', // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + }, + }).then((response) => { + response.json().then((json) => { + if (showDiffFunction) + showDiffFunction(json, windowLabel, nowVisPanel); + }); + }); } - if (config.get("sharedPopups")) { - if (!Autocomplete["$sharedInstance"]) - Autocomplete["$sharedInstance"] = new Autocomplete(); - editor.completer = Autocomplete["$sharedInstance"]; + } + closeTooltip() { + this.tooltipDiv.transition() + .duration(500) + .style("opacity", 0); + this.tooltipDiv.classed("hidden", true); + } + showTooltip(event, d, trial_id) { + var self = this; + this.tooltipDiv.classed("hidden", false); + this.tooltipDiv.transition() + .duration(200) + .style("opacity", 0.9); + if (this.config.queryTooltip) { + var string = d.tooltip[trial_id]; + var regexp = (/T(.*) - (\d*)
      Line \d*?
      /g); + var match = regexp.exec(string); + this.tooltipDiv.html("") + .style("left", (event.pageX - 3) + "px") + .style("top", (event.pageY - 28) + "px"); + while (match != null) { + var div = document.createElement("div"); + //var div2 = document.createElement("div"); + this.tooltipDiv.append(() => div); + //this.tooltipDiv.append(() => div2); + var aid = match[2]; + if (aid in self.activationStorage) { + this.updateTooltipDiv(aid, div); + } + else { + self.config.customLoadTooltip(self, div, match[0], match[1], match[2]); + } + match = regexp.exec(string); + } } else { - editor.completer = new Autocomplete(); - editor.once("destroy", destroyCompleter); + this.tooltipDiv.html(d.tooltip[trial_id]) + .style("left", (event.pageX - 3) + "px") + .style("top", (event.pageY - 28) + "px"); } - return editor.completer; - }; - return Autocomplete; -}()); -Autocomplete.prototype.commands = { - "Up": function (editor) { editor.completer.goTo("up"); }, - "Down": function (editor) { editor.completer.goTo("down"); }, - "Ctrl-Up|Ctrl-Home": function (editor) { editor.completer.goTo("start"); }, - "Ctrl-Down|Ctrl-End": function (editor) { editor.completer.goTo("end"); }, - "Esc": function (editor) { editor.completer.detach(); }, - "Return": function (editor) { return editor.completer.insertMatch(); }, - "Shift-Return": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); }, - "Tab": function (editor) { - var result = editor.completer.insertMatch(); - if (!result && !editor.tabstopManager) - editor.completer.goTo("down"); - else - return result; - }, - "Backspace": function (editor) { - editor.execCommand("backspace"); - var prefix = util.getCompletionPrefix(editor); - if (!prefix && editor.completer) - editor.completer.detach(); - }, - "PageUp": function (editor) { editor.completer.popup.gotoPageUp(); }, - "PageDown": function (editor) { editor.completer.popup.gotoPageDown(); } -}; -Autocomplete.startCommand = { - name: "startAutocomplete", - exec: function (editor, options) { - var completer = Autocomplete.for(editor); - completer.autoInsert = false; - completer.autoSelect = true; - completer.autoShown = false; - completer.showPopup(editor, options); - completer.cancelContextMenu(); - }, - bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space" -}; -var CompletionProvider = /** @class */ (function () { - function CompletionProvider(initialPosition) { - this.initialPosition = initialPosition; - this.active = true; } - CompletionProvider.prototype.insertByIndex = function (editor, index, options) { - if (!this.completions || !this.completions.filtered) { - return false; + updateTooltipDiv(activationId, div) { + var data = this.activationStorage[activationId]; + var title = data.id + " - " + data.name; + if (data.hash != "") { + title = '' + title + ""; } - return this.insertMatch(editor, this.completions.filtered[index], options); - }; - CompletionProvider.prototype.insertMatch = function (editor, data, options) { - if (!data) - return false; - editor.startOperation({ command: { name: "insertMatch" } }); - if (data.completer && data.completer.insertMatch) { - data.completer.insertMatch(editor, data); + var result = [ + ' ' + title + '', + ' Line: ' + data.line + "", + ' Start: ' + data.start + "", + ' Finish: ' + data.finish + "", + ' Duration: ' + data.duration + "ns", + ' Return: ' + data.return_value + "", + ]; + // ToDo: parameters and globals + div.outerHTML = result.join("
      ") + "

      "; + } + createMarker(name, cls, fill) { + this.svg.append("svg:defs").selectAll("marker") + .data([name]) + .enter().append("svg:marker") + .attr("id", this.graphId + "-" + name) + .attr("viewBox", "0 -5 10 10") + .attr("refX", 10) + .attr("refY", 0) + .attr("markerWidth", 6) + .attr("markerHeight", 6) + .attr("orient", "auto") + .append("svg:path") + .classed(cls, true) + .attr("fill", fill) + .attr("d", "M0,-5L10,0L0,5"); + } + defaultNodeStroke(d) { + let color = this.colors[d.data.trial_ids[0]]; + if (d.data.trial_ids.length > 1 || color == 0) { + return "#000"; + } + if (color == 1) { + return "red"; + } + return "green"; + } + nodeClick(d) { + if (d.children) { + d._children = d.children; + delete d.children; } else { - if (!this.completions) - return false; - var replaceBefore = this.completions.filterText.length; - var replaceAfter = 0; - if (data.range && data.range.start.row === data.range.end.row) { - replaceBefore -= this.initialPosition.prefix.length; - replaceBefore += this.initialPosition.pos.column - data.range.start.column; - replaceAfter += data.range.end.column - this.initialPosition.pos.column; + d.children = d._children; + delete d._children; + } + this.update(d); + } + updateNodes(source, node) { + let self = this; + var nodeEnter = node.enter().append('g') + .attr("id", (d) => { + return "node-" + this.graphId + "-" + d.data.index; + }) + .attr('class', 'node') + .attr("cursor", "pointer") + .attr('transform', (d) => { + return "translate(" + source.x + "," + source.y + ")"; + }) + .on('click', (event, d) => { + let activations = d.data.activations; + if (event.ctrlKey && Object.keys(activations).length > 1) { + self.getFunctionDiff(activations, d.data.trial_ids); } - if (replaceBefore || replaceAfter) { - var ranges; - if (editor.selection.getAllRanges) { - ranges = editor.selection.getAllRanges(); + else { + this.nodeClick(d); + } + }) + .on('mouseover', function (event, d) { + if (self.config.useTooltip) { + self.closeTooltip(); + if ((0, d3_selection_1.pointers)(event)[0][0] < 10) { + self.showTooltip(event, d.data, self.t1); } else { - ranges = [editor.getSelectionRange()]; - } - for (var i = 0, range; range = ranges[i]; i++) { - range.start.column -= replaceBefore; - range.end.column += replaceAfter; - editor.session.remove(range); + self.showTooltip(event, d.data, self.t2); } } - if (data.snippet) { - snippetManager.insertSnippet(editor, data.snippet); - } - else { - this.$insertString(editor, data); + self.config.customMouseOver(self, d); + return false; + }).on('mouseout', function (event, d) { + self.config.customMouseOut(self, d); + }); + /* nodeEnter.attr("activations_ids", (d:VisibleTrialNode)=>{ + let activations = d.data.activations; + let attrValue = ""; + for(let trial in activations){ + if(attrValue.length > 0) attrValue+= "/"; + attrValue += trial + "/"; + attrValue += activations[trial]; + } + return attrValue; + }); */ + // Circle for new nodes + nodeEnter.append('rect') + .attr('class', 'node') + .attr('rx', 1e-6) + .attr('ry', 1e-6) + .attr('width', 1e-6) + .attr('height', 1e-6) + .attr("stroke", (d) => this.defaultNodeStroke(d)) + .attr("stroke-width", "3px") + .attr("fill", (d) => { + if (d.data.trial_ids.length == 1) { + return this.calculateColor(d.data, this.t1); } - if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == "function") { - data.completer.onInsert(editor, data); + var grad = this.svg.append("svg:defs") + .append("linearGradient") + .attr("id", "grad-" + this.graphId + "-" + d.data.index) + .attr("x1", "100%") + .attr("x2", "0%") + .attr("y1", "0%") + .attr("y2", "0%"); + grad.append("stop") + .attr("offset", "50%") + .attr("stop-color", this.calculateColor(d.data, this.t2)); + grad.append("stop") + .attr("offset", "50%") + .attr("stop-color", this.calculateColor(d.data, this.t1)); + return "url(#grad-" + this.graphId + "-" + d.data.index + ")"; + }); + // Text for new nodes + nodeEnter.append('text') + .attr("dy", ".35em") + .attr("font-family", "sans-serif") + .attr("font-size", this.config.fontSize + "px") + .attr("pointer-events", "none") + .attr("fill", "#000") + .attr("y", 24) + .attr("x", 10) + .attr("text-anchor", "middle") + .each(function (d) { + const textLabel = (0, d3_selection_1.select)(this); + const name = d.data.name.split('
      '); + if (name.length > 1) { + textLabel.append("tspan") + .attr("x", "10") + .attr("dy", ".35em") + .attr("font-weight", "bold") + .text(name[0]); + textLabel.append("tspan") + .attr("x", "10") + .attr("dy", "1em") + .text(name[1]); + textLabel.attr("class", "nowrap"); } - if (data.command && data.command === "startAutocomplete") { - editor.execCommand(data.command); + else { + return textLabel.text(d.data.name); } - } - editor.endOperation(); - return true; - }; - CompletionProvider.prototype.$insertString = function (editor, data) { - var text = data.value || data; - editor.execCommand("insertstring", text); - }; - CompletionProvider.prototype.gatherCompletions = function (editor, callback) { - var session = editor.getSession(); - var pos = editor.getCursorPosition(); - var prefix = util.getCompletionPrefix(editor); - var matches = []; - this.completers = editor.completers; - var total = editor.completers.length; - editor.completers.forEach(function (completer, i) { - completer.getCompletions(editor, session, pos, prefix, function (err, results) { - if (completer.hideInlinePreview) - results = results.map(function (result) { - return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview }); - }); - if (!err && results) - matches = matches.concat(results); - callback(null, { - prefix: util.getCompletionPrefix(editor), - matches: matches, - finished: (--total === 0) - }); - }); }); - return true; - }; - CompletionProvider.prototype.provideCompletions = function (editor, options, callback) { - var processResults = function (results) { - var prefix = results.prefix; - var matches = results.matches; - this.completions = new FilteredList(matches); - if (options.exactMatch) - this.completions.exactMatch = true; - if (options.ignoreCaption) - this.completions.ignoreCaption = true; - this.completions.setFilter(prefix); - if (results.finished || this.completions.filtered.length) - callback(null, this.completions, results.finished); - }.bind(this); - var isImmediate = true; - var immediateResults = null; - this.gatherCompletions(editor, function (err, results) { - if (!this.active) { - return; - } - if (err) { - callback(err, [], true); - this.detach(); + nodeEnter.append("path") + .attr("stroke", "#000") + .attr("d", function (d) { + if (d.data.trial_ids.length > 1) { + return "M10," + 0 + + "L10," + 20; } - var prefix = results.prefix; - if (prefix.indexOf(results.prefix) !== 0) - return; - if (isImmediate) { - immediateResults = results; - return; + return "M0,0L0,0"; + }); + // Update + var nodeUpdate = nodeEnter.merge(node); + // Transition to proper position + nodeUpdate.transition() + .duration(this.config.duration) + .attr("transform", (d) => { + let color = this.colors[d.data.trial_ids[0]]; + d.dy = 0; + if (color == 1) { + d.dy = -40; } - processResults(results); - }.bind(this)); - isImmediate = false; - if (immediateResults) { - var results = immediateResults; - immediateResults = null; - processResults(results); - } - }; - CompletionProvider.prototype.detach = function () { - this.active = false; - this.completers && this.completers.forEach(function (completer) { - if (typeof completer.cancel === "function") { - completer.cancel(); + else if (color == 2) { + d.dy = 40; } + return "translate(" + (d.x - 10) + "," + (d.y + d.dy - 10) + ")"; }); - }; - return CompletionProvider; -}()); -var FilteredList = /** @class */ (function () { - function FilteredList(array, filterText) { - this.all = array; - this.filtered = array; - this.filterText = filterText || ""; - this.exactMatch = false; - this.ignoreCaption = false; + // Update the node attributes and style + nodeUpdate.select('rect.node') + .attr('width', 20) + .attr('height', 20) + .attr('rx', 20) + .attr('ry', 20) + .attr("rx", (d) => { + return d._children ? 0 : 20; + }) + .attr("ry", (d) => { + return d._children ? 0 : 20; + }) + .attr('cursor', 'pointer'); + // Remove exiting nodes + var nodeExit = node.exit().transition() + .duration(this.config.duration) + .attr("transform", function (d) { + return "translate(" + source.x + "," + source.y + ")"; + }) + .remove(); + // Reduce node rects size to 0 on exit + nodeExit.select('rect') + .attr('rx', 1e-6) + .attr('ry', 1e-6) + .attr('width', 1e-6) + .attr('height', 1e-6); + // Reduce opacity of labels on exit + nodeExit.select('text') + .style('fill-opacity', 1e-6); } - FilteredList.prototype.setFilter = function (str) { - if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) - var matches = this.filtered; - else - var matches = this.all; - this.filterText = str; - matches = this.filterCompletions(matches, this.filterText); - matches = matches.sort(function (a, b) { - return b.exactMatch - a.exactMatch || b.$score - a.$score - || (a.caption || a.value).localeCompare(b.caption || b.value); - }); - var prev = null; - matches = matches.filter(function (item) { - var caption = item.snippet || item.caption || item.value; - if (caption === prev) - return false; - prev = caption; - return true; - }); - this.filtered = matches; - }; - FilteredList.prototype.filterCompletions = function (items, needle) { - var results = []; - var upper = needle.toUpperCase(); - var lower = needle.toLowerCase(); - loop: for (var i = 0, item; item = items[i]; i++) { - if (item.skipFilter) { - item.$score = item.score; - results.push(item); - continue; + updateLinks(source, edges) { + var link = this.g.selectAll('path.link') + .data(edges, (d) => d.id); + // Enter any new links at the parent's previous position. + var linkEnter = link.enter().insert('path', "g") + .attr("class", "link") + .attr("id", (d, i) => { + return "pathId-" + this.graphId + "-" + d.id; + }) + .attr("fill", "none") + .attr("stroke-width", "1.5px") + .attr('d', (d) => { + var o = { y: source.y0, x: source.x0 }; + if (d.source.dy == undefined) { + d.source.dy = 0; } - var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet; - if (!caption) - continue; - var lastIndex = -1; - var matchMask = 0; - var penalty = 0; - var index, distance; - if (this.exactMatch) { - if (needle !== caption.substr(0, needle.length)) - continue loop; + if (d.target.dy == undefined) { + d.target.dy = 0; } - else { - var fullMatchIndex = caption.toLowerCase().indexOf(lower); - if (fullMatchIndex > -1) { - penalty = fullMatchIndex; + let ox = source.x0 || 0, oy = source.y0 || 0, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1; + if (d.type === 'initial' || d.type === 'call' || d.type == 'return') { + // Initial + return (0, utils_1.diagonal)(o, o); + } + else if (dx === 0 && dy === 0) { + // Loop + return `M ${ox}, ${oy} + A 15,20 + -45,1,1 + ${ox + 5},${oy + 8}`; + } + //return diagonal(d.source, d.target); + return (0, utils_1.diagonal)(o, o); + }) + .attr("marker-end", (d) => { + let count = 0; + for (let trial_id in d.count) { + if (trial_id == this.t1.toString()) { + count += 1; } - else { - for (var j = 0; j < needle.length; j++) { - var i1 = caption.indexOf(lower[j], lastIndex + 1); - var i2 = caption.indexOf(upper[j], lastIndex + 1); - index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2; - if (index < 0) - continue loop; - distance = index - lastIndex - 1; - if (distance > 0) { - if (lastIndex === -1) - penalty += 10; - penalty += distance; - matchMask = matchMask | (1 << j); - } - lastIndex = index; - } + if (trial_id == this.t2.toString()) { + count += 2; } } - item.matchMask = matchMask; - item.exactMatch = penalty ? 0 : 1; - item.$score = (item.score || 0) - penalty; - results.push(item); - } - return results; - }; - return FilteredList; -}()); -exports.Autocomplete = Autocomplete; -exports.CompletionProvider = CompletionProvider; -exports.FilteredList = FilteredList; - -}); - -ace.define("ace/marker_group",["require","exports","module"], function(require, exports, module){"use strict"; -var MarkerGroup = /** @class */ (function () { - function MarkerGroup(session, options) { - if (options) - this.markerType = options.markerType; - this.markers = []; - this.session = session; - session.addDynamicMarker(this); - } - MarkerGroup.prototype.getMarkerAtPosition = function (pos) { - return this.markers.find(function (marker) { - return marker.range.contains(pos.row, pos.column); - }); - }; - MarkerGroup.prototype.markersComparator = function (a, b) { - return a.range.start.row - b.range.start.row; - }; - MarkerGroup.prototype.setMarkers = function (markers) { - this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS); - this.session._signal("changeBackMarker"); - }; - MarkerGroup.prototype.update = function (html, markerLayer, session, config) { - if (!this.markers || !this.markers.length) - return; - var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow; - var foldLine; - var markersOnOneLine = 0; - var lastRow = 0; - for (var i = 0; i < this.markers.length; i++) { - var marker = this.markers[i]; - if (marker.range.end.row < visibleRangeStartRow) - continue; - if (marker.range.start.row > visibleRangeEndRow) - continue; - if (marker.range.start.row === lastRow) { - markersOnOneLine++; + if (count == 0 || count == 3) { // Single trial or diff + return "url(#" + this.graphId + "-end)"; } - else { - lastRow = marker.range.start.row; - markersOnOneLine = 0; + if (count == 1) { // First trial + return "url(#" + this.graphId + "-endbefore)"; } - if (markersOnOneLine > 200) { - continue; + if (count == 2) { // Second trial + return "url(#" + this.graphId + "-endafter)"; } - var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow); - if (markerVisibleRange.start.row === markerVisibleRange.end.row - && markerVisibleRange.start.column === markerVisibleRange.end.column) { - continue; // visible range is empty + return ""; + }) + .attr('stroke', (d) => { + if (d.type === 'sequence') { + return '#07F'; } - var screenRange = markerVisibleRange.toScreenRange(session); - if (screenRange.isEmpty()) { - foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine); - if (foldLine && foldLine.end.row > markerVisibleRange.end.row) { - visibleRangeStartRow = foldLine.end.row; - } - continue; + return '#666'; + }) + .attr('stroke-dasharray', (d) => { + if (d.type === 'return') { + return '10,2'; } - if (this.markerType === "fullLine") { - markerLayer.drawFullLineMarker(html, screenRange, marker.className, config); + return 'none'; + }); + // UPDATE + var linkUpdate = linkEnter.merge(link); + // Transition back to the parent element position + linkUpdate.transition() + .duration(this.config.duration) + .attr('d', (d) => { + if (d.source.dy == undefined) { + d.source.dy = 0; } - else if (screenRange.isMultiLine()) { - if (this.markerType === "line") - markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config); - else - markerLayer.drawTextMarker(html, screenRange, marker.className, config); + if (d.target.dy == undefined) { + d.target.dy = 0; } - else { - markerLayer.drawSingleLineMarker(html, screenRange, marker.className + " ace_br15", config); + let sd = d.source.data, td = d.target.data, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1, theta = Math.atan(dx / dy), phi = Math.atan(dy / dx), r = 10 + 2, sin_theta = r * Math.sin(theta), cos_theta = r * Math.cos(theta), sin_phi = r * Math.sin(phi), cos_phi = r * Math.cos(phi), m1 = (y2 > y1) ? 1 : -1, m2 = (x2 > x1) ? -1 : 1; + if (d.type === 'initial') { + // Initial + return `M ${(x2 - 20)},${(y2 - 20)} + L ${(x2 - r / 2.0)},${(y2 - r / 2.0)}`; } - } - }; - return MarkerGroup; -}()); -MarkerGroup.prototype.MAX_MARKERS = 10000; -exports.MarkerGroup = MarkerGroup; - -}); - -ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(require, exports, module){var Range = require("../range").Range; -var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/; -function getWordIndex(doc, pos) { - var textBefore = doc.getTextRange(Range.fromPoints({ - row: 0, - column: 0 - }, pos)); - return textBefore.split(splitRegex).length - 1; -} -function wordDistance(doc, pos) { - var prefixPos = getWordIndex(doc, pos); - var words = doc.getValue().split(splitRegex); - var wordScores = Object.create(null); - var currentWord = words[prefixPos]; - words.forEach(function (word, idx) { - if (!word || word === currentWord) - return; - var distance = Math.abs(prefixPos - idx); - var score = words.length - distance; - if (wordScores[word]) { - wordScores[word] = Math.max(score, wordScores[word]); - } - else { - wordScores[word] = score; - } - }); - return wordScores; -} -exports.getCompletions = function (editor, session, pos, prefix, callback) { - var wordScore = wordDistance(session, pos); - var wordList = Object.keys(wordScore); - callback(null, wordList.map(function (word) { - return { - caption: word, - value: word, - score: wordScore[word], - meta: "local" - }; - })); -}; - -}); - -ace.define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/lib/lang","ace/autocomplete/util","ace/marker_group","ace/autocomplete/text_completer","ace/editor","ace/config"], function(require, exports, module){/** - * ## Language Tools extension for Ace Editor - * - * Provides autocompletion, snippets, and language intelligence features for the Ace code editor. - * This extension integrates multiple completion providers including keyword completion, snippet expansion, - * and text-based completion to enhance the coding experience with contextual suggestions and automated code generation. - * - * **Configuration Options:** - * - `enableBasicAutocompletion`: Enable/disable basic completion functionality - * - `enableLiveAutocompletion`: Enable/disable real-time completion suggestions - * - `enableSnippets`: Enable/disable snippet expansion with Tab key - * - `liveAutocompletionDelay`: Delay before showing live completion popup - * - `liveAutocompletionThreshold`: Minimum prefix length to trigger completion - * - * **Usage:** - * ```javascript - * editor.setOptions({ - * enableBasicAutocompletion: true, - * enableLiveAutocompletion: true, - * enableSnippets: true - * }); - * ``` - * - * @module - */ -"use strict"; -var snippetManager = require("../snippets").snippetManager; -var Autocomplete = require("../autocomplete").Autocomplete; -var config = require("../config"); -var lang = require("../lib/lang"); -var util = require("../autocomplete/util"); -var MarkerGroup = require("../marker_group").MarkerGroup; -var textCompleter = require("../autocomplete/text_completer"); -var keyWordCompleter = { - getCompletions: function (editor, session, pos, prefix, callback) { - if (session.$mode.completer) { - return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback); - } - var state = editor.session.getState(pos.row); - var completions = session.$mode.getCompletions(state, session, pos, prefix); - completions = completions.map(function (el) { - el.completerId = keyWordCompleter.id; - return el; - }); - callback(null, completions); - }, - id: "keywordCompleter" -}; -var transformSnippetTooltip = function (str) { - var record = {}; - return str.replace(/\${(\d+)(:(.*?))?}/g, function (_, p1, p2, p3) { - return (record[p1] = p3 || ''); - }).replace(/\$(\d+?)/g, function (_, p1) { - return record[p1]; - }); -}; -var snippetCompleter = { - getCompletions: function (editor, session, pos, prefix, callback) { - var scopes = []; - var token = session.getTokenAt(pos.row, pos.column); - if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\.xml$/)) - scopes.push('html-tag'); - else - scopes = snippetManager.getActiveScopes(editor); - var snippetMap = snippetManager.snippetMap; - var completions = []; - scopes.forEach(function (scope) { - var snippets = snippetMap[scope] || []; - for (var i = snippets.length; i--;) { - var s = snippets[i]; - var caption = s.name || s.tabTrigger; - if (!caption) - continue; - completions.push({ - caption: caption, - snippet: s.content, - meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet", - completerId: snippetCompleter.id - }); + else if (d.type === 'call' || d.type == 'return') { + // Call/Return + x1 += m1 * sin_theta; + x2 += m2 * cos_phi; + y1 += m1 * cos_theta; + y2 += m2 * sin_phi; + if (dx === 0) { + if (y1 > y2) { + //y1 -= 10 + y2 += 20; + } + else { + //y1 += 10 + y2 -= 20; + } + } + return `M ${x1}, ${y1} + L ${x2}, ${y2}`; } - }, this); - callback(null, completions); - }, - getDocTooltip: function (item) { - if (item.snippet && !item.docHTML) { - item.docHTML = [ - "", lang.escapeHTML(item.caption), "", "
      ", - lang.escapeHTML(transformSnippetTooltip(item.snippet)) - ].join(""); - } - }, - id: "snippetCompleter" -}; -var completers = [snippetCompleter, textCompleter, keyWordCompleter]; -exports.setCompleters = function (val) { - completers.length = 0; - if (val) - completers.push.apply(completers, val); -}; -exports.addCompleter = function (completer) { - completers.push(completer); -}; -exports.textCompleter = textCompleter; -exports.keyWordCompleter = keyWordCompleter; -exports.snippetCompleter = snippetCompleter; -var expandSnippet = { - name: "expandSnippet", - exec: function (editor) { - return snippetManager.expandWithTab(editor); - }, - bindKey: "Tab" -}; -var onChangeMode = function (e, editor) { - loadSnippetsForMode(editor.session.$mode); -}; -var loadSnippetsForMode = function (mode) { - if (typeof mode == "string") - mode = config.$modes[mode]; - if (!mode) - return; - if (!snippetManager.files) - snippetManager.files = {}; - loadSnippetFile(mode.$id, mode.snippetFileId); - if (mode.modes) - mode.modes.forEach(loadSnippetsForMode); -}; -var loadSnippetFile = function (id, snippetFilePath) { - if (!snippetFilePath || !id || snippetManager.files[id]) - return; - snippetManager.files[id] = {}; - config.loadModule(snippetFilePath, function (m) { - if (!m) - return; - snippetManager.files[id] = m; - if (!m.snippets && m.snippetText) - m.snippets = snippetManager.parseSnippetFile(m.snippetText); - snippetManager.register(m.snippets || [], m.scope); - if (m.includeScopes) { - snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes; - m.includeScopes.forEach(function (x) { - loadSnippetsForMode("ace/mode/" + x); - }); - } - }); -}; -var doLiveAutocomplete = function (e) { - var editor = e.editor; - var hasCompleter = editor.completer && editor.completer.activated; - if (e.command.name === "backspace") { - if (hasCompleter && !util.getCompletionPrefix(editor)) - editor.completer.detach(); - } - else if (e.command.name === "insertstring" && !hasCompleter) { - lastExecEvent = e; - var delay = e.editor.$liveAutocompletionDelay; - if (delay) { - liveAutocompleteTimer.delay(delay); - } - else { - showLiveAutocomplete(e); - } - } -}; -var lastExecEvent; -var liveAutocompleteTimer = lang.delayedCall(function () { - showLiveAutocomplete(lastExecEvent); -}, 0); -var showLiveAutocomplete = function (e) { - var editor = e.editor; - var prefix = util.getCompletionPrefix(editor); - var previousChar = e.args; - var triggerAutocomplete = util.triggerAutocomplete(editor, previousChar); - if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) { - var completer = Autocomplete.for(editor); - completer.autoShown = true; - completer.showPopup(editor); - } -}; -var Editor = require("../editor").Editor; -require("../config").defineOptions(Editor.prototype, "editor", { - enableBasicAutocompletion: { - set: function (val) { - if (val) { - Autocomplete.for(this); - if (!this.completers) - this.completers = Array.isArray(val) ? val : completers; - this.commands.addCommand(Autocomplete.startCommand); + else if (dx === 0 && dy === 0) { + // Loop + return `M ${x1}, ${y1} + A 15,20 + -45,1,1 + ${x2 + 5},${y2 + 8}`; } - else { - this.commands.removeCommand(Autocomplete.startCommand); + else if (sd.parent_index == td.parent_index) { + // Same caller + if (dy === 0 && sd.children_index == td.children_index - 1) { + // Immediate sequence + return `M ${x1}, ${y1} + L ${(x2 + m2 * cos_phi)}, ${y2}`; + } + else { + let sign = -1; + if (y1 < y2) { + x1 += m1 * sin_theta; + y1 += m1 * cos_theta; + y2 -= r; + sign = -1; + } + else if (y2 < y1) { + x1 += m1 * sin_theta; + y1 += m1 * cos_theta; + y2 += r; + sign = 1; + } + else if (x1 >= x2) { + y1 += r; + y2 += r; + sign = 2; + } + else { + y1 -= r; + y2 -= r; + sign = -1; + } + return `M ${x1}, ${y1} + C ${(x1 + x2) / 2} ${y1 + r * sign}, + ${(x1 + x2) / 2} ${y2 + r * sign}, + ${x2} ${y2}`; + } } - }, - value: false - }, - enableLiveAutocompletion: { - set: function (val) { - if (val) { - if (!this.completers) - this.completers = Array.isArray(val) ? val : completers; - this.commands.on('afterExec', doLiveAutocomplete); + // Other caller + x1 += m1 * sin_theta; + y1 += m1 * cos_theta; + x2 += m2 * cos_phi; + y2 += m2 * sin_phi; + return `M ${x1} ${y1} + C ${(x1 + x2) / 2} ${y1}, + ${(x1 + x2) / 2} ${y2}, + ${x2} ${y2}`; + }); + // Remove any exiting links + link.exit() //.transition() + .attr('d', function (d) { + return (0, utils_1.diagonal)(d.source, d.target); + }) + .remove(); // linkExit + } + updateLinkLabels(edges) { + var labelPath = this.g.selectAll(".label_text") + .data(edges, (d) => d.id); + var labelEnter = labelPath.enter().append("text") + .attr("class", "label_text") + .attr("font-family", "sans-serif") + .attr("font-size", this.config.labelFontSize + "px") + .attr("pointer-events", "none") + .attr("fill", "#000") + .attr("text-anchor", "middle") + .attr("dx", (d) => { + if (d.source.x == d.target.x) { + return 29; } - else { - this.commands.off('afterExec', doLiveAutocomplete); + return (Math.abs(d.source.x - d.target.x) - 10) / 2; + }) + .attr("dy", -3) + .attr("id", (d, i) => { + return "pathlabel-" + this.graphId + "-" + d.id; + }) + .append("textPath") + .attr("xlink:href", (d, i) => { + return "#pathId-" + this.graphId + "-" + d.id; + }) + .text((d) => { + if (d.type === 'initial') { + return ''; } - }, - value: false - }, - liveAutocompletionDelay: { - initialValue: 0 - }, - liveAutocompletionThreshold: { - initialValue: 0 - }, - enableSnippets: { - set: function (val) { - if (val) { - this.commands.addCommand(expandSnippet); - this.on("changeMode", onChangeMode); - onChangeMode(null, this); + if (this.t1 == this.t2 || !d.count[this.t2]) { + return d.count[this.t1].toString(); } - else { - this.commands.removeCommand(expandSnippet); - this.off("changeMode", onChangeMode); + else if (!d.count[this.t1]) { + return d.count[this.t2].toString(); } - }, - value: false + return d.count[this.t1] + ', ' + d.count[this.t2]; + }); + labelEnter.merge(labelPath); + labelPath.exit().remove(); } -}); -exports.MarkerGroup = MarkerGroup; + zoomFunction(event) { + this.closeTooltip(); + this.transform = event.transform; + this.g.attr("transform", event.transform); + } + _graphId() { + return "trial-graph-" + this.graphId; + } +} +exports.TrialGraph = TrialGraph; -}); (function() { - ace.require(["ace/ext/language_tools"], function(m) { - if ( true && module) { - module.exports = m; - } - }); - })(); - /***/ }), -/***/ "../../../../../../../../node_modules/ace-builds/src-noconflict/mode-sql.js": -/*!**********************************************************************************!*\ - !*** ../../../../../../../../node_modules/ace-builds/src-noconflict/mode-sql.js ***! - \**********************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "../trial/lib/index.js": +/*!*****************************!*\ + !*** ../trial/lib/index.js ***! + \*****************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { -/* module decorator */ module = __webpack_require__.nmd(module); -ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict"; -var oop = require("../lib/oop"); -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; -var SqlHighlightRules = function () { - var keywords = ("select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|" + - "when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|" + - "foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct|is|in|" + - "all|alter|any|array|at|authorization|between|both|cast|check|collate|column|commit|constraint|" + - "cube|current|current_date|current_time|current_timestamp|current_user|describe|escape|except|" + - "exists|external|extract|fetch|filter|for|full|function|global|grouping|intersect|interval|" + - "into|leading|like|local|no|of|only|out|overlaps|partition|position|range|revoke|rollback|rollup|" + - "row|rows|session_user|set|some|start|tablesample|time|to|trailing|truncate|unique|unknown|" + - "user|using|values|window|with"); - var builtinConstants = ("true|false"); - var builtinFunctions = ("avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|" + - "coalesce|ifnull|isnull|nvl"); - var dataTypes = ("int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|" + - "money|real|number|integer|string"); - var keywordMapper = this.createKeywordMapper({ - "support.function": builtinFunctions, - "keyword": keywords, - "constant.language": builtinConstants, - "storage.type": dataTypes - }, "identifier", true); - this.$rules = { - "start": [{ - token: "comment", - regex: "--.*$" - }, { - token: "comment", - start: "/\\*", - end: "\\*/" - }, { - token: "string", // " string - regex: '".*?"' - }, { - token: "string", // ' string - regex: "'.*?'" - }, { - token: "string", // ` string (apache drill) - regex: "`.*?`" - }, { - token: "constant.numeric", // float - regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" - }, { - token: keywordMapper, - regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" - }, { - token: "keyword.operator", - regex: "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" - }, { - token: "paren.lparen", - regex: "[\\(]" - }, { - token: "paren.rparen", - regex: "[\\)]" - }, { - token: "text", - regex: "\\s+" - }] - }; - this.normalizeRules(); +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; -oop.inherits(SqlHighlightRules, TextHighlightRules); -exports.SqlHighlightRules = SqlHighlightRules; +Object.defineProperty(exports, "__esModule", ({ value: true })); +__exportStar(__webpack_require__(/*! ./config */ "../trial/lib/config.js"), exports); +__exportStar(__webpack_require__(/*! ./structures */ "../trial/lib/structures.js"), exports); +__exportStar(__webpack_require__(/*! ./graph */ "../trial/lib/graph.js"), exports); -}); -ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict"; -var oop = require("../../lib/oop"); -var Range = require("../../range").Range; -var BaseFoldMode = require("./fold_mode").FoldMode; -var FoldMode = exports.FoldMode = function (commentRegex) { - if (commentRegex) { - this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)); - this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)); +/***/ }), + +/***/ "../trial/lib/structures.js": +/*!**********************************!*\ + !*** ../trial/lib/structures.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "../utils/lib/d3svg.js": +/*!*****************************!*\ + !*** ../utils/lib/d3svg.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.diagonal = diagonal; +/** + * Create diagonal line between two nodes + */ +function diagonal(s, d) { + if (s.dy == undefined) { + s.dy = 0; } -}; -oop.inherits(FoldMode, BaseFoldMode); -(function () { - this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/; - this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/; - this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/; - this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; - this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; - this._getFoldWidgetBase = this.getFoldWidget; - this.getFoldWidget = function (session, foldStyle, row) { - var line = session.getLine(row); - if (this.singleLineBlockCommentRe.test(line)) { - if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) - return ""; - } - var fw = this._getFoldWidgetBase(session, foldStyle, row); - if (!fw && this.startRegionRe.test(line)) - return "start"; // lineCommentRegionStart - return fw; - }; - this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) { - var line = session.getLine(row); - if (this.startRegionRe.test(line)) - return this.getCommentRegionBlock(session, line, row); - var match = line.match(this.foldingStartMarker); - if (match) { - var i = match.index; - if (match[1]) - return this.openingBracketBlock(session, match[1], row, i); - var range = session.getCommentFoldRange(row, i + match[0].length, 1); - if (range && !range.isMultiLine()) { - if (forceMultiline) { - range = this.getSectionRange(session, row); - } - else if (foldStyle != "all") - range = null; - } - return range; - } - if (foldStyle === "markbegin") - return; - var match = line.match(this.foldingStopMarker); - if (match) { - var i = match.index + match[0].length; - if (match[1]) - return this.closingBracketBlock(session, match[1], row, i); - return session.getCommentFoldRange(row, i, -1); - } - }; - this.getSectionRange = function (session, row) { - var line = session.getLine(row); - var startIndent = line.search(/\S/); - var startRow = row; - var startColumn = line.length; - row = row + 1; - var endRow = row; - var maxRow = session.getLength(); - while (++row < maxRow) { - line = session.getLine(row); - var indent = line.search(/\S/); - if (indent === -1) - continue; - if (startIndent > indent) - break; - var subRange = this.getFoldWidgetRange(session, "all", row); - if (subRange) { - if (subRange.start.row <= startRow) { - break; - } - else if (subRange.isMultiLine()) { - row = subRange.end.row; - } - else if (startIndent == indent) { - break; - } - } - endRow = row; - } - return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); - }; - this.getCommentRegionBlock = function (session, line, row) { - var startColumn = line.search(/\s*$/); - var maxRow = session.getLength(); - var startRow = row; - var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; - var depth = 1; - while (++row < maxRow) { - line = session.getLine(row); - var m = re.exec(line); - if (!m) - continue; - if (m[1]) - depth--; - else - depth++; - if (!depth) - break; - } - var endRow = row; - if (endRow > startRow) { - return new Range(startRow, startColumn, endRow, line.length); - } - }; -}).call(FoldMode.prototype); + if (d.dy == undefined) { + d.dy = 0; + } + let path = `M ${s.x} ${(s.y + s.dy)} + C ${(s.x + d.x) / 2} ${(s.y + s.dy)}, + ${(s.x + d.x) / 2} ${(d.y + d.dy)}, + ${d.x} ${(d.y + d.dy)}`; + return path; +} -}); -ace.define("ace/mode/folding/sql",["require","exports","module","ace/lib/oop","ace/mode/folding/cstyle"], function(require, exports, module){"use strict"; -var oop = require("../../lib/oop"); -var BaseFoldMode = require("./cstyle").FoldMode; -var FoldMode = exports.FoldMode = function () { }; -oop.inherits(FoldMode, BaseFoldMode); -(function () { -}).call(FoldMode.prototype); +/***/ }), -}); +/***/ "../utils/lib/index.js": +/*!*****************************!*\ + !*** ../utils/lib/index.js ***! + \*****************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { -ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules","ace/mode/folding/sql"], function(require, exports, module){"use strict"; -var oop = require("../lib/oop"); -var TextMode = require("./text").Mode; -var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules; -var SqlFoldMode = require("./folding/sql").FoldMode; -var Mode = function () { - this.HighlightRules = SqlHighlightRules; - this.foldingRules = new SqlFoldMode(); - this.$behaviour = this.$defaultBehaviour; +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; -oop.inherits(Mode, TextMode); -(function () { - this.lineCommentStart = "--"; - this.blockComment = { start: "/*", end: "*/" }; - this.$id = "ace/mode/sql"; - this.snippetFileId = "ace/snippets/sql"; -}).call(Mode.prototype); -exports.Mode = Mode; +Object.defineProperty(exports, "__esModule", ({ value: true })); +__exportStar(__webpack_require__(/*! ./d3svg */ "../utils/lib/d3svg.js"), exports); +__exportStar(__webpack_require__(/*! ./random */ "../utils/lib/random.js"), exports); +__exportStar(__webpack_require__(/*! ./text */ "../utils/lib/text.js"), exports); +__exportStar(__webpack_require__(/*! ./web */ "../utils/lib/web.js"), exports); -}); (function() { - ace.require(["ace/mode/sql"], function(m) { - if ( true && module) { - module.exports = m; - } - }); - })(); - /***/ }), -/***/ "../../../../../../../../node_modules/ace-builds/src-noconflict/theme-textmate.js": -/*!****************************************************************************************!*\ - !*** ../../../../../../../../node_modules/ace-builds/src-noconflict/theme-textmate.js ***! - \****************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "../utils/lib/random.js": +/*!******************************!*\ + !*** ../utils/lib/random.js ***! + \******************************/ +/***/ ((__unused_webpack_module, exports) => { -/* module decorator */ module = __webpack_require__.nmd(module); -ace.define("ace/theme/textmate",["require","exports","module","ace/theme/textmate-css","ace/lib/dom"], function(require, exports, module){"use strict"; -exports.isDark = false; -exports.cssClass = "ace-tm"; -exports.cssText = require("./textmate-css"); -exports.$id = "ace/theme/textmate"; -var dom = require("../lib/dom"); -dom.importCssString(exports.cssText, exports.cssClass, false); +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.makeid = makeid; +function makeid() { + var text = ""; + var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (var i = 0; i < 5; i++) + text += possible.charAt(Math.floor(Math.random() * possible.length)); + return text; +} + + +/***/ }), + +/***/ "../utils/lib/text.js": +/*!****************************!*\ + !*** ../utils/lib/text.js ***! + \****************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.wrap = wrap; +const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); +function wrap(text, width) { + text.each(function () { + var text = (0, d3_selection_1.select)(this), words = text.text().split(/(?=_)/).reverse(), word, line = [], lineNumber = 0, lineHeight = 1.1, // ems + y = text.attr("y"), dy = parseFloat(text.attr("dy")), tspan = text.text(null).append("tspan").attr("x", 10).attr("y", y).attr("dy", dy + "em"); + while (word = words.pop()) { + line.push(word); + tspan.text(line.join("")); + if (tspan.node().getComputedTextLength() > width) { + line.pop(); + tspan.text(line.join("")); + line = [word]; + tspan = text.append("tspan").attr("x", 10).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word); + } + } + }); +} + + +/***/ }), + +/***/ "../utils/lib/web.js": +/*!***************************!*\ + !*** ../utils/lib/web.js ***! + \***************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.json = json; +const d3_fetch_1 = __webpack_require__(/*! d3-fetch */ "../../node_modules/d3-fetch/src/index.js"); +function json(innertext, sub, url, fn) { + let i = document.createElement('i'); + i.classList.add("loading"); + i.classList.add("fa"); + i.classList.add("fa-spinner"); + i.classList.add("fa-pulse"); + sub.innerHTML = ""; + sub.appendChild(i); + sub.onclick = function () { + json(innertext, sub, url, fn); + }; + (0, d3_fetch_1.json)(url).then(function (data) { + sub.onclick = function () { + }; + fn(data); + }).catch(function (error) { + i.classList.remove("fa-spinner"); + i.classList.remove("fa-pulse"); + i.classList.add("fa-refresh"); + i.classList.add("connection-error"); + let text = document.createElement('span'); + text.classList.add("error-text"); + text.innerHTML = innertext; + i.appendChild(text); + }); +} -}); (function() { - ace.require(["ace/theme/textmate"], function(m) { - if ( true && module) { - module.exports = m; - } - }); - })(); - /***/ }), diff --git a/src/noworkflow/now/vis/static/dist/bundle.js.map b/src/noworkflow/now/vis/static/dist/bundle.js.map index ac39c654..a1a1ee38 100644 --- a/src/noworkflow/now/vis/static/dist/bundle.js.map +++ b/src/noworkflow/now/vis/static/dist/bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA,uCAAuC;AACvC,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qDAAqD;AACrD,8BAA8B,UAAU,aAAa;AACrD,8BAA8B,mBAAmB,IAAI;AACrD,8BAA8B,SAAS,cAAc;AACrD,8BAA8B,UAAU,aAAa;AACrD;AACA;AACA,sCAAsC;AACtC;AACA,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,mCAAmC;AACnC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,2CAA2C;AAC3C,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,OAAO;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C;AACA;AACA;;AAEoN;AACpN;;;;;;;;;;;;;;;;ACr+EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEL;AACtB;;;;;;;;;;;;;;;;;;;;;;;ACrf6C;AACD;AACY;AACF;AACD;AACV;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,oCAAoC,qDAAM;AAC1C,sCAAsC,qDAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA,wCAAwC,qBAAqB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA,oCAAoC,2CAA2C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sDAAO;AAClC;AACA;AACA,yJAAyJ,YAAY;AACrK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sDAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA,wDAAwD,GAAG;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA,mBAAmB,kEAAkB;AACrC;AACA,YAAY,uDAAQ;AACpB;AACA,2CAA2C,0BAA0B;AACrE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,QAAQ,+GAA+G;AACxL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,4BAA4B,wCAAwC;AACpE;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,mCAAmC,QAAQ,WAAW,KAAK;AAC3D,4BAA4B,MAAM,EAAE,KAAK;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oCAAoC;AACxD,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iBAAiB;AAChF;AACA,aAAa,sDAAQ;AACrB,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEA;AAC3B;;;;;;;;;;;AC/kCA;AACA,IAAI,KAA4D,oBAAoB,mBAAO,CAAC,iFAAmB;AAC/G,IAAI,CAC0I;AAC9I,CAAC,yCAAyC;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0CAA0C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA,2CAA2C,UAAU;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,GAAG;AACxD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,GAAG;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU,2CAA2C,GAAG;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,WAAW;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0BAA0B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,wCAAwC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oCAAoC;;AAEzC;AACA;AACA;AACA;;AAEA,CAAC;AACD;;;;;;;;;;;;;;;;;;;;AC1hC2C;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0DAA0D;;AAEyC;AACpG;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE6B;AACxD;;;;;;;;;;;;;;;;;AC/bwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,0BAA0B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc,MAAM,cAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEX;AAChB;;;;;;;;;;;;;;;;;;;ACh9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE2C;AACtE;;;;;;;;;;;;;;;;;;;;ACjRiE;AAChB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAK,CAAC,wDAAK;AAChC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;;AAEiB;AACpD;;;;;;;;;;;;;;;;AC7fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,KAAK;AAC/B,0BAA0B,KAAK,GAAG,KAAK;AACvC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEC;AAC5B;;;;;;;;;;;;;;;;;;;;ACjMmD;AACC;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8DAAe;AACzD,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,uDAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAED;AAC1B;;;;;;;;;;;;;;;;;;;;;;AC7lB6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,cAAc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB;AACjF;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,KAAK;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA,6CAA6C,KAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEsD;AACjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrqB0E;AACd;AACM;AACW;AACvB;AACX;AACH;AACW;AACA;AACK;AACH;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe,KAAK,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,qBAAqB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qBAAqB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qDAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,0DAAW;AACnB,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,8CAA8C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kCAAkC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iEAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iEAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAkB;AACjD,KAAK,gCAAgC;AACrC;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oEAAoE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gEAAgB;AAChD;AACA,qCAAqC,OAAO;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO;AACrC;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gEAAgB;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,cAAc;AACjD,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,MAAM;AACzC,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mDAAI,SAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI;AAChC,6BAA6B,KAAK;AAClC,+BAA+B,kBAAkB;AACjD;AACA,kCAAkC,OAAO;AACzC;AACA;AACA,kCAAkC,MAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,gCAAgC,qDAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,qDAAqD;AACrE;AACA,qCAAqC,qDAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW,GAAG,gBAAgB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oCAAoC,gEAAgB;AACpD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gBAAgB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA,6DAA6D,OAAO;AACpE,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,qDAAqD,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA,mDAAmD,uBAAuB;AAC1E;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6BAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,uCAAuC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC;AACxB;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D,iBAAiB;AACjB;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,6CAA6C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,0CAA0C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,6CAA6C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,wCAAwC,iDAAC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,0CAA0C,iDAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU,EAAE,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA,kBAAkB,sCAAsC;AACxD;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAoD;AACnF;AACA;AACA,2BAA2B,2CAA2C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC,oBAAoB,uDAAQ;AAC5B,iDAAiD,sDAAO;AACxD,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qDAAM;AACvC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,gCAAgC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,sCAAsC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yBAAyB;AAC3C;AACA,2BAA2B;AAC3B;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,mCAAmC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM;AACpC,gBAAgB,wDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,kBAAkB,wDAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC,wBAAwB,uDAAQ;AAChC,qDAAqD,sDAAO;AAC5D,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kEAAkB;AACrC,YAAY,uDAAQ;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,SAAS;AACxE;AACA,aAAa,sDAAQ;AACrB,iDAAiD,SAAS;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sDAAQ;AACzB,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC,sCAAsC,qDAAM;AAC5C,uCAAuC,qDAAM;AAC7C,yCAAyC,qDAAM;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA,8CAA8C,kCAAkC;AAChF;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAI;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAQ;AAChC,uBAAuB,wDAAU;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,YAAY,0DAAW;AACvB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,iCAAiC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,qCAAqC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,WAAW,GAAG,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,YAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAA2D;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,2BAA2B,4CAA4C;AACvE;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA;AACA;AACA;AACA;AACA,2BAA2B,+CAA+C;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,MAAM;AAC3C;AACA;AACA,oCAAoC,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wDAAK;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,wDAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wDAAK;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mCAAmC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,QAAQ;AACnD,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,MAAM;AACjD,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mBAAmB;AAC5D;AACA;AACA,yCAAyC,oBAAoB;AAC7D;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA,yCAAyC,sBAAsB;AAC/D;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA,yCAAyC,2BAA2B;AACpE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAU,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8BAA8B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uCAAuC;AACrD;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C,uCAAuC,SAAS;AAChD;AACA;AACA,yBAAyB,kDAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC,4BAA4B,SAAS;AACrC,6BAA6B,UAAU;AACvC,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iEAAkB;AACnD;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAM;AACxC,mCAAmC,qDAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAG;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,yCAAyC;AACjF;AACA;AACA;AACA,uCAAuC,uCAAuC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA,0DAA0D,OAAO;AACjE;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gEAAgB;AACrD;AACA,yBAAyB,8CAA8C;AACvE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,cAAc,6DAAe,IAAI;AACrF;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa;AAC5D;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,cAAc,YAAY;AAC1B;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA,uCAAuC,IAAI,sCAAsC;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,sCAAsC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAM;AACrC,kCAAkC,qDAAM;AACxC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,MAAM;AACvC,kCAAkC,KAAK;AACvC,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA,gCAAgC,MAAM;AACtC,mCAAmC,KAAK;AACxC,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,EAAE;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2DAA2D;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEkT;AAC7U;;;;;;;;;;;AC7seA;;AAEA,cAAc,mBAAO,CAAC,sEAAO;;AAE7B,cAAc,4FAA4B;AAC1C,YAAY,mBAAO,CAAC,sEAAa;AACjC,iBAAiB,mBAAO,CAAC,gFAAkB;AAC3C,gBAAgB,mBAAO,CAAC,8EAAiB;AACzC,gBAAgB,mBAAO,CAAC,8EAAiB;;;;;;;;;;;ACRzC,WAAW,mBAAO,CAAC,uDAAS;AAC5B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,6FAA8B;AAC1C,4CAA4C;AAC5C,iCAAiC;AACjC,QAAQ;AACR;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC5DA,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,kGAA2B;AAC1C,aAAa,gFAAwB;;AAErC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACnHA;;AAEA,gBAAgB,wGAA8B;AAC9C,qBAAqB,yGAAiC;AACtD,qBAAqB,yGAAiC;AACtD,YAAY,mBAAO,CAAC,gEAAQ;;;;;;;;;;;ACL5B,eAAe,kGAA2B;AAC1C,oBAAoB,uGAAgC;AACpD,oBAAoB,uGAAgC;AACpD,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACznBA,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;;AAEA;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxHA,gBAAgB,mBAAO,CAAC,4EAAc;;AAEtC,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;;;;;;;;;;ACzCjB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,gBAAgB,mBAAO,CAAC,mEAAO;;;;;;;;;;;AClB/B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,WAAW,mBAAO,CAAC,0DAAY;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,IAAI;AACJ;AACA;AACA;;AAEA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACnUA;;AAEA,eAAe,mBAAO,CAAC,kEAAO;AAC9B,eAAe,mBAAO,CAAC,kEAAO;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,gFAAwB;;AAErC,iBAAiB,mBAAO,CAAC,kEAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AChDA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,gFAAwB;;AAErC,WAAW,mBAAO,CAAC,0DAAY;AAC/B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,YAAY;AAC3C;;AAEA;AACA;AACA;;AAEA,kDAAkD,OAAO;AACzD;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA,IAAI;AACJ;AACA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA,iBAAiB,eAAe;AAChC;AACA;;AAEA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;;AAEA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,YAAY,iBAAiB;AAC7B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;ACtSA;;AAEA,eAAe,mBAAO,CAAC,kEAAO;AAC9B,eAAe,mBAAO,CAAC,kEAAO;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,iBAAiB,mBAAO,CAAC,kEAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;A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MAC5DD,aAAa,CAAC54B,KAAK,CAACG,MAAM,MAAAJ,MAAA,CAAMigB,SAAS,OAAI;MAE7C,IAAI,IAAI,CAACwW,SAAS,EAAE;QAClB,IAAI,CAACA,SAAS,CAACuC,MAAM,CAAC,CAAC;MACzB;IACF;EAAC;AAAA,EAhO8BliC,mDAAM;AAiOtCyH,eAAA,CAjOYkB,WAAW,WAES,CAAC;;;;;;;;;;;AC7KtB;;AAEZ,kBAAkB;AAClB,mBAAmB;AACnB,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,UAAU;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACrJA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;AC19GhC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,iBAAiB,mBAAO,CAAC,qBAAQ;AACjC;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;AChEA;AACA;AACA;AACA;;AAEA,aAAa,0FAA6B;;AAE1C;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,aAAa;AAC/B;AACA;;AAEA,oBAAoB,YAAY;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,aAAa;AAChC;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;;;;;;;;;;;ACnOlB,UAAU,mBAAO,CAAC,uDAAO;AACzB,aAAa,0FAA6B;AAC1C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,eAAe,mBAAO,CAAC,iEAAU;AACjC,YAAY,mBAAO,CAAC,2DAAS;AAC7B,UAAU,mBAAO,CAAC,0DAAY;AAC9B,aAAa,mBAAO,CAAC,6DAAU;;AAE/B;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACpHA,cAAc,mBAAO,CAAC,mEAAa;AACnC,gBAAgB,mBAAO,CAAC,mEAAa;AACrC,YAAY,mBAAO,CAAC,4EAAmB;;AAEvC;AACA;AACA;;AAEA,oBAAoB,GAAG,cAAc;AACrC,sBAAsB,GAAG,gBAAgB;AACzC,sBAAsB,GAAG,gBAAgB;AACzC,wBAAwB,GAAG,kBAAkB;AAC7C,mBAAmB,GAAG,kBAAkB;;;;;;;;;;;ACZxC,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;AAC1C,YAAY,mBAAO,CAAC,iEAAS;AAC7B,mBAAmB,mBAAO,CAAC,yEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,UAAU,mBAAO,CAAC,uDAAO;AACzB,WAAW,mBAAO,CAAC,kEAAgB;AACnC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB,wBAAwB;;;;;;;;;;;AC3HxB,YAAY,mBAAO,CAAC,iEAAS;AAC7B,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;AAC1C,mBAAmB,mBAAO,CAAC,yEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,UAAU,mBAAO,CAAC,uDAAO;AACzB,WAAW,mBAAO,CAAC,kEAAgB;AACnC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB,oBAAoB;;;;;;;;;;;ACjHpB,aAAa,0FAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA,UAAU,mBAAO,CAAC,0DAAY;;AAE9B,eAAe;AACf;;AAEA;AACA;AACA;;AAEA,eAAe;AACf;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;AChBA,aAAa,0FAA6B;AAC1C,UAAU,mBAAO,CAAC,0DAAY;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AChCA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACzCA,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACxBA,UAAU,mBAAO,CAAC,0DAAY;AAC9B,aAAa,0FAA6B;AAC1C,aAAa,mBAAO,CAAC,8DAAW;;AAEhC;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7BA,eAAe;AACf;AACA;;AAEA,eAAe;AACf;AACA;;;;;;;;;;;ACNA;AACA,OAAO,mBAAO,CAAC,6DAAO;AACtB,OAAO,mBAAO,CAAC,6DAAO;AACtB,OAAO,mBAAO,CAAC,6DAAO;AACtB,QAAQ,mBAAO,CAAC,+DAAQ;AACxB,QAAQ,mBAAO,CAAC,+DAAQ;AACxB,OAAO,mBAAO,CAAC,6DAAO;AACtB,OAAO,mBAAO,CAAC,6DAAO;AACtB,OAAO,mBAAO,CAAC,6DAAO;AACtB;;AAEA,YAAY,mBAAO,CAAC,sEAAa;;AAEjC;AACA;AACA;;AAEA;;;;;;;;;;;ACjBA,UAAU,mBAAO,CAAC,0DAAY;;AAE9B;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACfA,UAAU,mBAAO,CAAC,uDAAO;AACzB,aAAa,0FAA6B;AAC1C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AC1BA,UAAU,mBAAO,CAAC,kEAAgB;AAClC,UAAU,mBAAO,CAAC,4EAAwB;AAC1C,eAAe,mBAAO,CAAC,8EAAsB;AAC7C,eAAe,mBAAO,CAAC,wEAAsB;AAC7C,WAAW,mBAAO,CAAC,kEAAgB;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,+BAA+B;;AAEvE;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,8CAA8C;;AAEtF;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,GAAG,cAAc;AACrC,sBAAsB,GAAG,gBAAgB;AACzC,sBAAsB,GAAG,gBAAgB;AACzC,wBAAwB,GAAG,kBAAkB;AAC7C,mBAAmB,GAAG,kBAAkB;;;;;;;;;;;AClExC,iBAAiB,mBAAO,CAAC,4DAAa;AACtC,UAAU,mBAAO,CAAC,oDAAQ;AAC1B,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjDA,kBAAkB;AAClB;AACA;AACA;AACA,kBAAkB,GAAG,WAAW;AAChC;AACA;AACA;AACA,uBAAuB,GAAG,YAAY;AACtC;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;;;;;;;;;;ACvBA,SAAS,mBAAO,CAAC,iDAAO;AACxB,kBAAkB,mBAAO,CAAC,8DAAa;;AAEvC;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCa;;AAEb,mIAAqD;;;;;;;;;;;;ACFxC;;AAEb,aAAa,0FAA6B;AAC1C,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,aAAa,mBAAO,CAAC,4GAAiB;AACtC,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,kEAAQ;AAC3B,aAAa,mBAAO,CAAC,sEAAU;;AAE/B,iBAAiB,mBAAO,CAAC,qFAAmB;AAC5C;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3Fa;;AAEb;AACA,aAAa,0FAA6B;AAC1C,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,UAAU,mBAAO,CAAC,kEAAgB;AAClC,SAAS,uFAAsB;AAC/B,SAAS,mBAAO,CAAC,iDAAO;AACxB,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,aAAa,mBAAO,CAAC,6EAAe;;AAEpC;;AAEA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,IAAI;AACJ,8BAA8B;AAC9B;AACA;AACA,wDAAwD;AACxD,wEAAwE;;AAExE;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,8BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,sBAAsB;;;;;;;;;;;;ACrJT;;AAEb;AACA,aAAa,0FAA6B;AAC1C,SAAS,mBAAO,CAAC,iDAAO;AACxB,SAAS,uFAAsB;AAC/B,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,aAAa,mBAAO,CAAC,6EAAe;;AAEpC;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,IAAI;AACJ,8BAA8B;AAC9B;AACA;AACA,wDAAwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;;AAEA;;;;;;;;;;;ACrFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA,eAAe,mBAAO,CAAC,mHAAoB;AAC3C,eAAe,mBAAO,CAAC,mHAAoB;;AAE3C;;AAEA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,gBAAgB,mBAAO,CAAC,qHAAqB;;AAE7C;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;;AAEA;AACA,cAAc,mBAAO,CAAC,iFAAS;AAC/B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,uFAA8B;;AAEvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,yIAA2B;AAChD;;AAEA;;AAEA,aAAa,oJAA6B;AAC1C,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,yIAA+B;AACxD,kBAAkB,mBAAO,CAAC,mIAA4B;AACtD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,6EAA6E;AACtJ;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,kJAAwC;AAChF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,kGAAkG;AAClG,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA,4FAA4F;AAC5F,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,kJAAwC;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B,sCAAsC,mBAAmB;AACzD,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA,4EAA4E;;AAE5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA,mDAAmD,iEAAiE;AACpH;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,uCAAuC;AACvC,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;;;;;;;;;;;AC1/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mBAAO,CAAC,+GAAkB;;AAEvC;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,oEAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,yIAA2B;AAChD;;AAEA;;AAEA,aAAa,oJAA6B;AAC1C,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kBAAkB,mBAAO,CAAC,mIAA4B;;AAEtD;;AAEA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC;;AAEA,2CAA2C;AAC3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oDAAoD;AACpD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5qBa;;AAEb,kDAAkD,0CAA0C;;AAE5F,aAAa,oJAA6B;AAC1C,WAAW,mBAAO,CAAC,mBAAM;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;;;;;;;;;;;AC7Ea;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;ACnFA,sGAA+C;;;;;;;;;;;ACA/C;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7DA,UAAU,gKAAqD;AAC/D,cAAc;AACd,gBAAgB;AAChB,kKAAuD;AACvD,4JAAmD;AACnD,qKAAyD;AACzD,2KAA6D;;;;;;;;;;;;ACN7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mJAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;ACvSA;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7DA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;AACA;;AAEA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,eAAe,mBAAO,CAAC,wDAAW;AAClC,gBAAgB,mBAAO,CAAC,oDAAS;AACjC;AACA;AACA;AACA;;AAEA,cAAc;AACd,kBAAkB;AAClB,yBAAyB;;AAEzB;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,yBAAyB,QAAQ;AACjC;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,qBAAqB,WAAW,GAAG,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,gBAAgB,WAAW,GAAG,IAAI,KAAK,aAAa;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;;AAEA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,KAAK,mDAAmD,cAAc;AACzF,GAAG;AACH;AACA;AACA,+BAA+B,IAAI;AACnC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,MAAM,aAAa,SAAS;AACtD;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB,cAAc,oBAAoB,EAAE,IAAI;AACxC;AACA,YAAY,gBAAgB,EAAE,IAAI;AAClC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,GAAG,SAAS,GAAG,KAAK,qBAAqB,EAAE,EAAE;AACpE,QAAQ;AACR,yBAAyB,GAAG,KAAK,yBAAyB,EAAE,EAAE;AAC9D,mBAAmB,yBAAyB,EAAE,EAAE;AAChD;AACA,MAAM;AACN,oBAAoB,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,EAAE;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C,cAAc,SAAS,OAAO;AACxE;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACzjEA,aAAa,0FAA6B;AAC1C,gBAAgB,8FAA2B;AAC3C,oBAAoB,oHAAuC;AAC3D,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,0GAAoD;;AAEpD;AACA;AACA;;;;;;;;;;;AC1GA,eAAe,mBAAO,CAAC,6DAAU;AACjC,SAAS,mBAAO,CAAC,0EAAO;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;AC3HA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GpB;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,gBAAgB,mBAAO,CAAC,wDAAW;AACnC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,WAAW,mBAAO,CAAC,4DAAa;;AAEhC;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AC7BA,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;AACA;AACA;;;;;;;;;;;;ACJY;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,0DAAU;AAC/B,WAAW,mBAAO,CAAC,4DAAa;AAChC,aAAa,0FAA6B;AAC1C,UAAU,mBAAO,CAAC,8DAAiB;AACnC,gBAAgB,mBAAO,CAAC,wDAAW;;AAEnC,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7DY;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,0FAA6B;;AAE1C,WAAW,mBAAO,CAAC,4DAAa;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA,kBAAkB,eAAe;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7CY;;AAEZ,mBAAmB,GAAG,WAAW,GAAG,yBAAyB,GAAG,kGAAqC;AACrG,kBAAkB,GAAG,kGAAqC;AAC1D,kBAAkB,GAAG,kGAAqC;;AAE1D,YAAY,mBAAO,CAAC,0EAAuB;AAC3C;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA,QAAQ,mBAAO,CAAC,oDAAQ;AACxB,cAAc;AACd,kBAAkB;;AAElB,UAAU,mBAAO,CAAC,0EAAmB;;AAErC,cAAc;AACd,oBAAoB;AACpB,gBAAgB;AAChB,sBAAsB;AACtB,gBAAgB;AAChB,sBAAsB;AACtB,kBAAkB;AAClB,wBAAwB;AACxB,kBAAkB;AAClB,mBAAmB;;AAEnB,SAAS,mBAAO,CAAC,oEAAgB;;AAEjC,0BAA0B;AAC1B,gCAAgC;AAChC,wBAAwB;AACxB,2BAA2B;AAC3B,qBAAqB;;AAErB,WAAW,mBAAO,CAAC,4EAAiB;;AAEpC,kBAAkB;AAClB,YAAY;AACZ,oBAAoB;AACpB,cAAc;;AAEd,wGAA2C;;AAE3C,oBAAoB,mBAAO,CAAC,oEAAgB;;AAE5C,qBAAqB;AACrB,sBAAsB;AACtB,qBAAqB;AACrB,sBAAsB;;AAEtB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ,SAAS,mBAAO,CAAC,4DAAY;;AAE7B,kBAAkB;AAClB,sBAAsB;;AAEtB,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChGa;;AAEb,oGAAsC;AACtC,uGAAwC;AACxC,8FAAkC;AAClC,8FAAkC;AAClC,8FAAkC;;;;;;;;;;;;ACNrB;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;;AAEA;AACA;;AAEA;AACA,kBAAkB,oBAAoB;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB;;AAEnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;;AAEA;;AAEA,oBAAoB,oBAAoB;AACxC;AACA,IAAI;AACJ;;AAEA,oBAAoB,oBAAoB;AACxC;;AAEA,oBAAoB,oBAAoB;AACxC;AACA;AACA;;;;;;;;;;;;AChEa;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;;AAEA;AACA,SAAS,wBAAwB;AACjC;;AAEA;AACA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ACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA,kBAAkB,yBAAyB;AAC3C;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;;;;;;;;;;;AC/PA,oBAAoB,mBAAO,CAAC,mFAAqB;AACjD,aAAa,mBAAO,CAAC,4EAAmB;;AAExC,SAAS,mBAAO,CAAC,6DAAU;;AAE3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B,GAAG,gCAAgC,GAAG,wBAAwB;AACxF,2BAA2B,GAAG,qBAAqB;;;;;;;;;;;ACzCnD,SAAS,mBAAO,CAAC,6EAAO;AACxB,kBAAkB,mBAAO,CAAC,+DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,+EAAiB;AACtC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;ACnKA,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;AACA;AACA;AACA,SAAS,mBAAO,CAAC,6EAAO;AACxB;AACA,kBAAkB,mBAAO,CAAC,+DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,WAAW;AACpC;AACA,oBAAoB,yBAAyB;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GnB;;AAEb;;AAEA,mBAAmB,gGAAkC;AACrD,iBAAiB,mBAAO,CAAC,2EAAkB;AAC3C,gBAAgB,mBAAO,CAAC,oDAAS;AACjC,iBAAiB,mBAAO,CAAC,iFAAkB;AAC3C,kBAAkB,mBAAO,CAAC,6EAAmB;;AAE7C;AACA,cAAc,mBAAO,CAAC,2EAAe;AACrC,iBAAiB,mBAAO,CAAC,iFAAkB;;;;;;;;;;;;ACZ9B;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,WAAW;AAC7B,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;;;;;;;;;;;AC5Xa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AClba;;AAEb;;AAEA,aAAa,mBAAO,CAAC,sEAAQ;AAC7B,cAAc,mBAAO,CAAC,wEAAS;AAC/B,aAAa,mBAAO,CAAC,sEAAQ;AAC7B,gBAAgB,mBAAO,CAAC,4EAAW;;;;;;;;;;;;ACPtB;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B,YAAY,mBAAO,CAAC,mEAAU;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB,wCAAwC;AACxC,gBAAgB;;AAEhB,sBAAsB,iBAAiB;AACvC;;AAEA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACjLa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,cAAc;AACpB,MAAM,cAAc;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACz6Ba;;AAEb;;AAEA,WAAW,mBAAO,CAAC,uDAAS;AAC5B,YAAY,mBAAO,CAAC,wEAAS;AAC7B,YAAY,mBAAO,CAAC,kEAAS;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,QAAQ,mBAAO,CAAC,kGAAyB;AACzC,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC7MY;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,gEAAW;AAClC,YAAY,mBAAO,CAAC,mEAAU;AAC9B,aAAa,mBAAO,CAAC,qEAAW;AAChC,WAAW,mBAAO,CAAC,oDAAS;AAC5B;;AAEA,cAAc,mBAAO,CAAC,iEAAO;AAC7B,gBAAgB,mBAAO,CAAC,6EAAa;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,0CAA0C;AACrE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClPa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;;AAEb,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACxHa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;;AAExB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/Ka;;AAEb,WAAW,mBAAO,CAAC,uDAAS;AAC5B,aAAa,mBAAO,CAAC,qEAAW;AAChC,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA,cAAc,mBAAO,CAAC,oEAAO;AAC7B,gBAAgB,mBAAO,CAAC,gFAAa;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,UAAU,cAAc;AACxB,UAAU,sBAAsB;AAChC,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gCAAgC;AAC9D;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,wBAAwB;AAClC,UAAU,4BAA4B;AACtC,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACxHa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,QAAQ;AAClB;AACA,UAAU,aAAa;AACvB,UAAU,OAAO;AACjB,UAAU,aAAa;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;;AAEA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9Fa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,qBAAqB;AAC/B,UAAU,oBAAoB;AAC9B,UAAU,iBAAiB;AAC3B,UAAU,cAAc;AACxB,UAAU,cAAc;AACxB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;AC3wBa;;AAEb;AACA,SAAS,mBAAO,CAAC,uEAAO;AACxB,gBAAgB,mBAAO,CAAC,4EAAqB;AAC7C,eAAe,mBAAO,CAAC,4FAA2B;;AAElD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;;AAEA;AACA;;AAEA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACxHA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;;;;AChfA,aAAa,0FAA6B;AAC1C,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;;AAEA;;;;;;;;;;;AC5CA,+GAAe,GAAG,IAAqC,CAAC,iCAAO,EAAE,oCAAC,CAAC;AAAA;AAAA;AAAA,kGAAC,CAAC,KAAK,EAA6E,CAAC,kBAAkB,aAAa,gBAAgB,+BAA+B,WAAW,4FAA4F,WAAW,kEAAkE,4DAA4D,YAAY,IAAI,kBAAkB,yBAAyB,0DAA0D,kBAAkB,sBAAsB,yCAAyC,UAAU,cAAc,yBAAyB,oBAAoB,IAAI,SAAS,UAAU,oCAAoC,cAAc,IAAI,yCAAyC,SAAS,0CAA0C,0FAA0F,2HAA2H,qBAAM,EAAE,qBAAM,UAAU,qBAAM,CAAC,qBAAM,wMAAwM,8DAA8D,uDAAuD,iNAAiN,0BAA0B,4BAA4B,KAAK,KAAK,gDAAgD,mFAAmF,sBAAsB,KAAK,kCAAkC,iDAAiD,KAAK,GAAG,mBAAmB,8HAA8H,oIAAoI,iDAAiD,qBAAqB,uBAAuB,eAAe,0BAA0B,GAAG,wBAAwB,yCAAyC,oBAAoB,KAAK,gDAAgD,4DAA4D,qBAAqB,OAAO,EAAE,oBAAoB,KAA0B,qBAAqB;;AAEhpF;;;;;;;;;;;ACFY;AACZ,aAAa,0FAA6B;AAC1C,gBAAgB,8FAA2B;AAC3C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,WAAW;AACtD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;;AAEzB;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AC9FA;;AAEA,aAAa,mBAAO,CAAC,kEAAc;AACnC,cAAc,mBAAO,CAAC,oEAAe;AACrC,WAAW,mBAAO,CAAC,8DAAY;AAC/B,cAAc,mBAAO,CAAC,oEAAe;AACrC,YAAY,mBAAO,CAAC,gEAAa;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACda;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;;AAEA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,oBAAoB;AACpC;AACA;;AAEA;AACA;;;;;;;;;;;;AC3Fa;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,oBAAoB;AAC/C;;AAEA,cAAc,gBAAgB;AAC9B;AACA;;AAEA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AC9Ca;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,+DAAU;;AAE/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjJa;;AAEb,iGAAiC;AACjC,uGAAqC;AACrC,uGAAqC;AACrC,uGAAqC;AACrC,uGAAqC;;;;;;;;;;;;ACNxB;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,gBAAgB,mBAAO,CAAC,mEAAU;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA,QAAQ,cAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,6DAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5Ba;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,gBAAgB,mBAAO,CAAC,mEAAU;AAClC,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxGa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;;AAE9B,aAAa,mBAAO,CAAC,6DAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB,gDAAgD;AAChD;AACA,4BAA4B;AAC5B;AACA,kDAAkD;AAClD;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzUa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;;;;;;;;;;;AChDD;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA,IAAI;AACJ,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;;;;;;;;;;;ACrRH;;AAEb,WAAW,mBAAO,CAAC,uDAAS;AAC5B,YAAY,mBAAO,CAAC,4FAA2B;AAC/C,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChHA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA,SAAS,WAAW;;AAEpB;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BY;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,mBAAO,CAAC,wDAAW;AAClC,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACjJA,SAAS,mBAAO,CAAC,2EAAO;AACxB,cAAc,mBAAO,CAAC,oDAAS;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;;AAEA;;AAEA;AACA,SAAS,OAAO;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;;AAEA;;AAEA,SAAS,OAAO;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AClHA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;ACr3GhC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACVa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA,IAAI;AACJ,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzDA,gFAA8B;;;;;;;;;;;;ACA9B;AACA;;AAEa;;AAEb,WAAW,mBAAO,CAAC,uDAAS;;AAE5B,8GAA8C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,qBAAqB;;AAErB,gBAAgB;AAChB;AACA,CAAC;;AAED;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,oBAAoB;;AAEpB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC1HD;AACA;;AAEa;;AAEb,UAAU,mBAAO,CAAC,uDAAS;;AAE3B;AACA;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;ACxFa;;AAEb;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,kEAAgB;AAClC,cAAc,mBAAO,CAAC,oEAAgB;AACtC,aAAa,0FAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCa;;AAEb,WAAW,mBAAO,CAAC,qDAAQ;AAC3B,YAAY,mBAAO,CAAC,8DAAc;AAClC,cAAc,mBAAO,CAAC,2DAAW;AACjC,cAAc,mBAAO,CAAC,oEAAgB;AACtC,aAAa,mBAAO,CAAC,oDAAQ;AAC7B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AACb;AACA;AACA;AACA,WAAW,mBAAO,CAAC,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB;AAC7B;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE;AAC1B;AACA;AACA;AACA,uBAAuB,IAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,gBAAgB,EAAE;AAClB,qCAAqC,GAAG;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8BAA8B;AACnE;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;;;;;;;;;;;ACnnBpB,iGAAuC;AACvC,2GAA0C;;;;;;;;;;;ACD1C,aAAa,0FAA6B;;AAE1C,sBAAsB,mBAAO,CAAC,qEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,6EAAoB;AAClD,WAAW,mBAAO,CAAC,6DAAQ;AAC3B,eAAe,mBAAO,CAAC,+DAAa;;AAEpC;AACA,aAAa,qBAAM,WAAW,qBAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAM,aAAa,qBAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAM,YAAY,qBAAM;AAC9B,eAAe,qBAAM;AACrB,IAAI,SAAS,qBAAM;AACnB,eAAe,qBAAM;AACrB,IAAI,SAAS,qBAAM;AACnB,eAAe,qBAAM;AACrB,IAAI;AACJ,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,qBAAM;AAC5B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;ACrHA;AACA;AACA,IAAI,qBAAM,YAAY,qBAAM;AAC5B;AACA,EAAE,SAAS,qBAAM,YAAY,qBAAM;AACnC;;AAEA;AACA,EAAE;AACF;AACA;AACA;;;;;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+DAA+D;AAC/D;AACA;AACA;;;;;;;;;;;AClBA,UAAU,mBAAO,CAAC,8DAAiB;AACnC,gBAAgB,mBAAO,CAAC,wDAAW;AACnC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,aAAa,0FAA6B;;AAE1C,sBAAsB,mBAAO,CAAC,qEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,6EAAoB;AAClD,eAAe,mBAAO,CAAC,+DAAa;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA,sBAAsB,UAAU;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACxGA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;ACZa;;AAEb;AACA;AACA;AACA;AACA,qBAAqB;AACrB,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;AC3CA,wHAAkD;AAClD,2HAAoD;;AAEpD,sBAAsB;AACtB;AACA;;AAEA,qBAAqB;AACrB;AACA;;;;;;;;;;;ACTA,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;ACr3GhC,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,UAAU,mBAAO,CAAC,uDAAO;AACzB,UAAU,mBAAO,CAAC,uDAAO;AACzB,SAAS,mBAAO,CAAC,6EAAO;AACxB,UAAU,mBAAO,CAAC,kEAAgB;AAClC,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxGA,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,UAAU,mBAAO,CAAC,uDAAO;AACzB,UAAU,mBAAO,CAAC,uDAAO;AACzB,SAAS,mBAAO,CAAC,6EAAO;AACxB,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,UAAU,mBAAO,CAAC,kEAAgB;AAClC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvFA,SAAS,mBAAO,CAAC,6EAAO;AACxB,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,0FAA6B;AAC1C,aAAa,qBAAM,WAAW,qBAAM;;AAEpC;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,mBAAmB;AACnB,4BAA4B;AAC5B;AACA,8BAA8B,kBAAkB;AAChD;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;;;;;;;;;;;ACjDY;;AAEZ;AACA;AACA;AACA,iBAAiB,mBAAO,CAAC,4DAAa;AACtC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;AACA;AACA,aAAa,qBAAM,WAAW,qBAAM;AACpC;AACA;AACA,yDAAyD;AACzD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB;AACpB,EAAE,sBAAsB;AACxB,EAAE;AACF,EAAE,kBAAkB;AACpB,EAAE,sBAAsB;AACxB;AACA;AACA,gDAAgD,qBAAM;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,qBAAM;AACtD;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;;;;;;;;;;;AC3Ga;;AAEb,gDAAgD,0DAA0D,2CAA2C;;AAErJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;;;AAGF;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,oBAAoB;;;;;;;;;;;;AC9HpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,mBAAO,CAAC,sFAAoB;AAC3C,eAAe,mBAAO,CAAC,sFAAoB;AAC3C,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;AC7HD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;AACA,gBAAgB,mBAAO,CAAC,wFAAqB;AAC7C,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,uFAA8B;AACvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,4GAA2B;AAChD;;AAEA,aAAa,gFAAwB;AACrC,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,8GAAgC;AACzD,kBAAkB,mBAAO,CAAC,sGAA4B;AACtD,eAAe,mBAAO,CAAC,kGAA0B;AACjD;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,mFAAmF;AAC5J;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qHAAwC;AAChF;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,+FAA+F;AAC/F,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA,4FAA4F;AAC5F,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,qHAAwC;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mBAAO,CAAC,oHAAmC;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA,mDAAmD,+DAA+D;AAClH;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,wGAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;;;;;;;;;;;AClgCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,kFAAkB;AACvC,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,oEAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,4GAA2B;AAChD;;AAEA,aAAa,gFAAwB;AACrC,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,sGAA4B;AACtD,eAAe,mBAAO,CAAC,kGAA0B;AACjD;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,sDAAsD;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;;;;;;;;;;AChoBa;;AAEb;AACA,4CAA4C,2BAA2B,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;AAC/N,+BAA+B,uCAAuC;AACtE,qCAAqC,+DAA+D,sCAAsC,0BAA0B,+CAA+C,yCAAyC,uEAAuE;AACnU,eAAe,mBAAO,CAAC,iGAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA,yFAAyF;AACzF;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;ACnLa;;AAEb,2CAA2C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACvU,iCAAiC,gBAAgB,sBAAsB,OAAO,uDAAuD,6DAA6D,4CAA4C,oKAAoK,mFAAmF,KAAK;AAC1e,4CAA4C,2BAA2B,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;AAC/N,kDAAkD,0CAA0C;AAC5F,4CAA4C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD;AAC/P,8DAA8D,sEAAsE,8DAA8D,kDAAkD,iBAAiB,GAAG;AACxQ,+BAA+B,uCAAuC;AACtE,qCAAqC,+DAA+D,sCAAsC,0BAA0B,+CAA+C,yCAAyC,uEAAuE;AACnU,eAAe,mBAAO,CAAC,kDAAQ;AAC/B;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,yDAAyD,cAAc;AACvE;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA,CAAC;;;;;;;;;;;ACtLY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/FA;AACA;;AAEa;;AAEb,iCAAiC,0GAAgC;AACjE;AACA;AACA;AACA;AACA;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrFA;AACA;AACA;;;;;;;;;;;;ACFA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0GAAgC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,+BAA+B,mBAAO,CAAC,iGAAiB;AACxD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;;;;;;;;;;ACrFa;;AAEb,4BAA4B,0GAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrBA,sGAA+C;;;;;;;;;;;;;ACA/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA,OAAO,mBAAO,CAAC,iBAAI;AACnB;AACA,cAAc,mBAAO,CAAC,4BAAe;AACrC,aAAa,mBAAO,CAAC,6CAAM;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA,yBAAyB,wEAAoB;;AAE7C;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,6DAAQ;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,0BAA0B;AAC1B;AACA,uCAAuC,iDAAiD;AACxF,WAAW;AACX,yCAAyC,SAAS;AAClD;AACA;AACA,SAAS;AACT;AACA,0BAA0B;AAC1B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,2BAA2B,qBAAqB;AACpF;AACA,iCAAiC,2BAA2B;AAC5D;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA,IAAI;AACJ,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB;AACxB,mBAAmB;;AAEnB;AACA;AACA,sCAAsC;AACtC;AACA,8DAA8D,SAAS,kBAAkB;AACzF,QAAQ,8BAA8B;AACtC;AACA,mCAAmC,SAAS,oBAAoB;AAChE;AACA,MAAM;AACN;AACA,qBAAqB,SAAS,gBAAgB;AAC9C;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,MAAM,YAAY;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA,2BAA2B;;AAE3B,gBAAgB;AAChB;;AAEA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU,YAAY;AACtB,uCAAuC;AACvC;AACA;AACA,YAAY,YAAY;AACxB;AACA;;AAEA,MAAM;AACN;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,UAAU,YAAY;AACtB,QAAQ;AACR;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU,YAAY;AACtB;AACA;AACA,GAAG;;AAEH,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC,yCAAyC;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD;AACpD;;AAEA,gCAAgC;AAChC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,iEAAiE;AACnF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG,IAAI;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD,oBAAoB;;AAEvE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,8CAA8C;AAC7E;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oCAAoC;AACpC,iBAAiB,sBAAsB;AACvC,UAAU;AACV;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,oBAAoB,oBAAoB,gBAAgB;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC;AAClC,8BAA8B;;AAE9B;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;;AAEA,wCAAwC;;AAExC;AACA,8DAA8D;AAC9D;AACA,0BAA0B;AAC1B;AACA,UAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;;AAEA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C,6BAA6B,mBAAmB;AAChD,4BAA4B,mBAAmB;AAC/C,yBAAyB,gBAAgB,gBAAgB;;AAEzD;;AAEA,yBAAyB;AACzB;AACA,6BAA6B;AAC7B;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,wBAAwB,sDAAsD;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA,KAAK;AACL,GAAG;;AAEH;AACA,sBAAsB,0CAA0C;;AAEhE;AACA;;AAEA;;AAEA,qBAAqB;AACrB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,qDAAqD,EAAE,gCAAgC,KAAK,6CAA6C,KAAK;AAC9I;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2EAA2E;AAC3E,2EAA2E;AAC3E;AACA,OAAO,wBAAwB;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB;AACnB,wDAAwD,6BAA6B;AACrF;AACA,qBAAqB;AACrB;AACA;;AAEA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,qCAAqC;AACrC;AACA,sCAAsC;AACtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,0DAA0D;AAC1D,cAAc;AACd;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iBAAiB,iDAAiD;AAClE;AACA;;AAEA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;;AAEA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,qBAAqB,8BAA8B;;AAEnD,kBAAkB;AAClB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,gBAAgB;;AAEnC;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA;AACA,gBAAgB,gBAAgB;AAChC,iBAAiB,gBAAgB;AACjC,mBAAmB,gBAAgB;AACnC,eAAe,gBAAgB;AAC/B,qBAAqB,gBAAgB;;;;;;;;;;;;ACrxCzB;AACZ,aAAa,gFAAwB;AACrC,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,mBAAO,CAAC,wDAAW;;AAElC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM,OAAO;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AClKA;AACA;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChEA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uBAAuB,gBAAgB;AACvC;AACA;;AAEA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AChFA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,cAAc,mBAAO,CAAC,+CAAO;AAC7B,eAAe,mBAAO,CAAC,iDAAQ;AAC/B,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;;;;;;;;;;;ACdnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,qDAAU;AAC/B,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACtIA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,qDAAU;AAC/B,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACxDA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAS,uFAA8B;AACvC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA,kBAAkB,mBAAO,CAAC,2GAAyC;AACnE,kBAAkB,mBAAO,CAAC,2GAAyC;AACnE,gBAAgB,mBAAO,CAAC,uGAAuC;AAC/D,mBAAmB,mBAAO,CAAC,6GAA0C;AACrE,qBAAqB,mBAAO,CAAC,iHAA4C;AACzE,kBAAkB,mBAAO,CAAC,uIAAuD;AACjF,kBAAkB,mBAAO,CAAC,6HAAkD;;AAE5E;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;;;;;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,0FAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;ACvSA,iBAAiB,mBAAO,CAAC,8EAAmB;;AAE5C;;;;;;;;;;;ACFA,eAAe,mBAAO,CAAC,6EAAiB;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB,aAAa,uBAAuB,8BAA8B,qBAAqB,mCAAmC,aAAa,qBAAqB,mCAAmC,oBAAoB;AACrQ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,6EAA6E;AAC7E;AACA;AACA,oDAAoD;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,8EAA8E;AAC9E;AACA;AACA,qDAAqD;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtMA,eAAe,mBAAO,CAAC,6EAAiB;AACxC,UAAU,mBAAO,CAAC,qEAAa;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,uBAAuB;;AAEvB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;AACzB,2CAA2C;AAC3C,2CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC7WA,YAAY,mBAAO,CAAC,mEAAY;AAChC,iBAAiB,mBAAO,CAAC,6EAAiB;AAC1C,UAAU,mBAAO,CAAC,qEAAa;AAC/B,aAAa,mBAAO,CAAC,6EAAiB;AACtC,mBAAmB,mBAAO,CAAC,iFAAmB;;AAE9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B;;AAE9B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,kDAAkD,QAAQ;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wEAAwE;;AAExE;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,iBAAiB;AAC7B,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oEAAoE;AACpE,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA,6BAA6B;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,wBAAwB;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACr8BA,YAAY,mBAAO,CAAC,qEAAa;AACjC;;AAEA;AACA,iBAAiB,MAAK;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,aAAa;AAC3B;AACA;AACA;AACA,eAAe;AACf,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,aAAa,YAAY;AACzB,aAAa,WAAW;AACxB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA,aAAa,OAAO;AACpB,cAAc,eAAe;AAC7B,cAAc,cAAc;AAC5B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc;AACd;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AChPA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;;;AAG9B;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;AC1ID;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B,cAAc,WAAW;AACzB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,+BAA+B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,UAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvSA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,iBAAI;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,4EAAe;AAC7C;AACA,2DAA2D,qBAAqB;AAChF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ,kDAAkD,EAAE;AACpD;AACA,IAAI;AACJ,IAAI;AACJ;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,6BAA6B;AAC7B,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B,gCAAgC;AAChC,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qEAAqE;AACzG;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,aAAa,gHAAgH;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO;AAChB,QAAQ,OAAO;AACf;AACA;AACA,KAAK;AACL,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,WAAW;AACX;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,cAAc;AACd;AACA,KAAK;AACL,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA,0DAA0D,4CAA4C;AACtG,SAAS;AACT;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yDAAyD;AAC7D;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,IAAI,0DAA0D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wCAAwC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kDAAkD;AAClD,kEAAkE;AAClE,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4CAA4C;AAC5C,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oDAAoD;AAC/D,WAAW,0BAA0B;AACrC,WAAW,EAAE,YAAY;AACzB,WAAW,+BAA+B;AAC1C,WAAW,cAAc;AACzB,UAAU,eAAe;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,UAAU,cAAc;AACxB,UAAU,4DAA4D;AACtE;AACA;AACA;AACA,IAAI;AACJ,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,2EAA2E;AAC3E,iFAAiF;AACjF,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAkD;AACtE;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,uCAAuC,0CAA0C;AACjF;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,cAAc,yCAAyC;AACvD,MAAM;AACN,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH,uCAAuC;AAC7J;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yCAAyC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,6CAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,UAAU,sBAAsB;AACzE;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sCAAsC;AACzD;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,iBAAI;AACzB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,gEAAgE;AAChE,4DAA4D;AAC5D,0DAA0D;AAC1D,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,yBAAyB;AACzB;AACA,2CAA2C;AAC3C;AACA,yCAAyC;AACzC,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,mBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,cAAc;AACd;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,sCAAsC;AACtC,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,YAAY;AACZ;AACA,+CAA+C;AAC/C,4CAA4C;AAC5C,uBAAuB;AACvB,2EAA2E;AAC3E,gBAAgB;AAChB,cAAc,MAAM;AACpB,yEAAyE;AACzE,aAAa;AACb,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,yBAAyB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAM;AAC7B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,gCAAgC;AAChC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kDAAkD;AAClD;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ,4BAA4B;AACpC;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR,mBAAmB;AACnB;AACA;AACA;AACA;AACA,iDAAiD,eAAe;AAChE,iDAAiD,eAAe;AAChE,iDAAiD,gBAAgB;AACjE,iDAAiD,gBAAgB;AACjE,kDAAkD,cAAc;AAChE,kDAAkD,cAAc;AAChE,kDAAkD,cAAc;AAChE;AACA;AACA;AACA;AACA,wDAAwD;AACxD,yDAAyD;AACzD,0CAA0C;AAC1C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,8CAA8C,gDAAgD;AAC9F;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IAA8I,uFAAuF;AACrO,mDAAmD,2CAA2C,gDAAgD,uFAAuF;AACrO,gJAAgJ,uFAAuF;AACvO,gLAAgL,uFAAuF;AACvQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mLAAmL;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO,4BAA4B;AACnC;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,kBAAkB;AAClB;AACA;AACA;AACA;AACA,gDAAgD,eAAe;AAC/D,gDAAgD,eAAe;AAC/D,gDAAgD,gBAAgB;AAChE,gDAAgD,gBAAgB;AAChE,iDAAiD,cAAc;AAC/D,iDAAiD,cAAc;AAC/D,iDAAiD,cAAc;AAC/D;AACA;AACA;AACA;AACA,uDAAuD;AACvD,wDAAwD;AACxD,yCAAyC;AACzC;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAA6C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qCAAqC;AACrC;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,6CAA6C;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,gDAAgD,QAAQ;AACxD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C,qCAAqC,yBAAyB;AAC9D,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,sCAAsC,yBAAyB;AAC/D,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,2CAA2C,UAAU,wBAAwB;AAC7E;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,2CAA2C,UAAU,wBAAwB;AAC7E;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAA6C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,oBAAoB;AACpB;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,gQAAgQ;AAChQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qCAAqC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qBAAqB;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+dAA+d,+BAA+B;AAC9f;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,gBAAgB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,KAAK,IAA6B;AAClC;AACA,GAAG,KAAK,EAEN;AACF;AACA,CAAC;;;;;;;;;;;;AC14RD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,UAAU;AACvB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,SAAS,qBAAM;AACf,IAAI;AACJ;AACA;AACA,YAAY,qBAAM;AAClB;AACA;AACA;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,wBAAwB,SAAS;AACjC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,kBAAkB,qBAAM;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;;AAGf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,sHAAgD;;AAEhD;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,WAAW;AACX;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,WAAW,UAAU;AACrB;AACA,2HAAsC;;AAEtC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACzkBA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,iBAAiB;AACjB;AACA;;AAEA,oBAAoB;AACpB;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;ACpJa;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,oBAAoB;AACpB,mBAAO,CAAC,oEAAe;AACvB,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,6BAA6B,mBAAO,CAAC,8EAAoB;AACzD,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,kBAAkB,mBAAO,CAAC,wDAAS;AACnC,WAAW,mBAAO,CAAC,uEAAY;AAC/B;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wBAAwB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC;AAChC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC;AAChC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ,IAAI;AACpC,cAAc,mCAAmC,EAAE;AACnD,cAAc,mCAAmC,EAAE;AACnD,cAAc,+BAA+B,EAAE;AAC/C,cAAc,+BAA+B,EAAE;AAC/C,cAAc,+BAA+B,EAAE;AAC/C,cAAc,mCAAmC,EAAE;AACnD,cAAc,mCAAmC,EAAE;AACnD,cAAc,QAAQ,IAAI,QAAQ;AAClC,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,+BAA+B;AAC/B;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB;;;;;;;;;;;;AC1lBP;AACb;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,0CAAU;AAC/B,aAAa,mBAAO,CAAC,kDAAc;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A;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjCa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTa;;AAEb;AACA;AACA,cAAc,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AACjF;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTa;;AAEb;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5Da;;AAEb;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACba;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB;AAClB,mBAAO,CAAC,oEAAe;AACvB,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,kBAAkB,mBAAO,CAAC,wDAAS;AACnC,WAAW,mBAAO,CAAC,uEAAY;AAC/B,gBAAgB,mBAAO,CAAC,gDAAmB;AAC3C;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,oBAAoB;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mCAAmC;AAC1E;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC;AACA;AACA,gBAAgB,OAAO,GAAG,OAAO;AACjC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU,GAAG;AACzC,gBAAgB,eAAe,GAAG,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC,gBAAgB,GAAG,IAAI,GAAG;AAC1B;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC;AACA;AACA,gBAAgB,OAAO,GAAG,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA,gCAAgC,GAAG,IAAI;AACvC,kBAAkB,oBAAoB,IAAI,GAAG;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,GAAG,IAAI;AACvC,oBAAoB,eAAe,EAAE,cAAc;AACnD,gBAAgB,eAAe,EAAE,cAAc;AAC/C,gBAAgB,IAAI,EAAE,GAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,IAAI,EAAE;AAC9B,gBAAgB,eAAe,EAAE,GAAG;AACpC,gBAAgB,eAAe,EAAE,GAAG;AACpC,gBAAgB,IAAI,EAAE,GAAG;AACzB,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;;;;;;;;;;;;AC33BL;AACb;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,wCAAU;AAC/B,aAAa,mBAAO,CAAC,gDAAc;AACnC,aAAa,mBAAO,CAAC,sCAAS;;;;;;;;;;;;AClBjB;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,KAAK,EAAE;AAC3B,cAAc,iBAAiB,EAAE,aAAa;AAC9C,cAAc,iBAAiB,EAAE,aAAa;AAC9C,cAAc,KAAK,EAAE,aAAa;AAClC;AACA;;;;;;;;;;;;AClBa;AACb;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,sCAAS;AAC9B,aAAa,mBAAO,CAAC,wCAAU;AAC/B,aAAa,mBAAO,CAAC,oCAAQ;AAC7B,aAAa,mBAAO,CAAC,kCAAO;;;;;;;;;;;;ACnBf;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,cAAc;AACd;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;;;;;;;;;;;ACTa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,YAAY;AACZ,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;ACnBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,YAAY;AACZ,mBAAmB,mBAAO,CAAC,0DAAU;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,2BAA2B,cAAc;AACzC,8DAA8D;;;AAG9D;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,0HAA0H;AAC1H;AACA;;AAEA,CAAC;;AAED,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iHAAiH;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,0CAA0C,uBAAuB,uBAAuB,uBAAuB;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,2DAA2D,qCAAqC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gHAAgH;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,0GAA0G;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,4FAA4F;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,sGAAsG;AACtG;AACA,oCAAoC;AACpC,mCAAmC;AACnC;AACA;AACA,wDAAwD;AACxD,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qGAAqG;AACrG;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;;AAEA,CAAC;;AAED,iHAAiH;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,mMAAmM;AACnM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,mDAAmD,KAAK,KAAK;AAC7D;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uGAAuG,uCAAuC,wBAAwB,gBAAgB,GAAG,+BAA+B,eAAe,wBAAwB,GAAG,uBAAuB,gCAAgC,GAAG,aAAa,8BAA8B,iBAAiB,GAAG,yBAAyB,iBAAiB,GAAG,oCAAoC,8BAA8B,GAAG,iDAAiD,gBAAgB,GAAG,2BAA2B,2BAA2B,GAAG,uCAAuC,4BAA4B,GAAG,wCAAwC,4BAA4B,GAAG,uCAAuC,2BAA2B,GAAG,0BAA0B,2CAA2C,eAAe,GAAG,uCAAuC,4BAA4B,GAAG,uCAAuC,2BAA2B,GAAG,oEAAoE,8BAA8B,GAAG,uCAAuC,8BAA8B,GAAG,yBAAyB,0BAA0B,GAAG,0BAA0B,6BAA6B,GAAG,kCAAkC,4BAA4B,GAAG,0CAA0C,8BAA8B,GAAG,uCAAuC,0BAA0B,GAAG,2BAA2B,6BAA6B,GAAG,yBAAyB,6BAA6B,GAAG,+CAA+C,mBAAmB,GAAG,4BAA4B,2BAA2B,GAAG,uBAAuB,2BAA2B,GAAG,+BAA+B,0BAA0B,GAAG,mCAAmC,4BAA4B,8CAA8C,mCAAmC,GAAG,oDAAoD,kCAAkC,GAAG,uCAAuC,iCAAiC,GAAG,0CAA0C,mCAAmC,GAAG,4CAA4C,0BAA0B,yCAAyC,GAAG,gDAAgD,oCAAoC,GAAG,qCAAqC,iCAAiC,GAAG,kDAAkD,mCAAmC,yCAAyC,GAAG,+BAA+B,qCAAqC,kIAAkI,GAAG,sCAAsC,qCAAqC,8NAA8N,GAAG;;AAE9nG,CAAC;;AAED,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gLAAgL;AAChL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,kCAAkC;AACjF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA,QAAQ,IAA4B;AACpC,qBAAqB,wBAAM;AAC3B;AACA,WAAW;;AAEX;AACA;AACA;AACA,gGAAgG,wBAAM;;AAEtG;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;;AAEA;AACA;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,0BAA0B;AAC5E;AACA,CAAC;;AAED,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,wBAAwB;AACxB;AACA,0BAA0B;AAC1B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,uBAAuB;AACvB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,IAAI;AAC/C;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iIAAiI,cAAc;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA,0CAA0C;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,eAAe;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8FAA8F;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,CAAC;;AAED,oNAAoN;AACpN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,oHAAoH;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mEAAmE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qBAAqB;AAC/C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,yCAAyC;AAC3G;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+HAA+H;AAC/H;AACA,qBAAqB;AACrB,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;;AAEA,CAAC;;AAED,+FAA+F;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uJAAuJ;AACvJ;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iCAAiC;AAC5E;AACA;AACA,iEAAiE,UAAU;AAC3E;AACA;AACA;AACA,oIAAoI,yBAAyB;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,0KAA0K;AAC1K;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,sCAAsC;AACtC,iCAAiC;AACjC;AACA,kCAAkC,mBAAmB;AACrD;AACA;AACA,gCAAgC,wCAAwC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC;AACjG,4DAA4D,wCAAwC;AACpG,2DAA2D,wCAAwC;AACnG,wDAAwD,wCAAwC;AAChG,wDAAwD,wCAAwC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wBAAwB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oHAAoH,2BAA2B;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,0IAA0I;AAC1I;AACA;AACA;AACA,4CAA4C,YAAY,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,6JAA6J;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,kBAAkB,mBAAmB;AAC/E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,iDAAiD;AAC3H,oEAAoE,4CAA4C;AAChH,mEAAmE,2CAA2C;AAC9G,sEAAsE,6CAA6C;AACnH,mEAAmE,4CAA4C;AAC/G,wDAAwD,4CAA4C;AACpG,sEAAsE,0DAA0D;AAChI;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,uBAAuB,4CAA4C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA,CAAC;;AAED,wSAAwS;AACxS;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB,mBAAmB,kBAAkB,iBAAiB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,iBAAiB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,mBAAmB,iBAAiB;AACpC,iBAAiB,2CAA2C;AAC5D,mBAAmB,oBAAoB;AACvC,oBAAoB,iBAAiB;AACrC,2BAA2B;AAC3B,CAAC;AACD;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iCAAiC;AAChG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,uIAAuI;AACvI;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4CAA4C,IAAI;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA,oBAAoB,kCAAkC,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,kIAAkI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB;AACrF;AACA;AACA;AACA,4CAA4C,qBAAqB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wBAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAsD;AACxF;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAsD;AACpF;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+JAA+J;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,IAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yBAAyB;AAC/C;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,uBAAuB;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,kIAAkI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,kBAAkB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,IAAI;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iCAAiC;AACjC,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,mGAAmG;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,iLAAiL;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,kDAAkD;AAClD,yDAAyD,KAAK;AAC9D;AACA;AACA;AACA;AACA;AACA,uDAAuD,6BAA6B;AACpF;AACA;AACA,oEAAoE;AACpE;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,wEAAwE;AACxE;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,+BAA+B;AAC/B,6DAA6D,KAAK,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,gCAAgC;AAChC,iEAAiE,4CAA4C,IAAI;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,2CAA2C,GAAG;AAC9C,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,4FAA4F;AAC5F;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qPAAqP;AACrP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE,uCAAuC,2BAA2B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,aAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA,2EAA2E,aAAa;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,SAAS,gBAAgB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,SAAS,gBAAgB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ,SAAS,cAAc;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,mBAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,gGAAgG;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iIAAiI;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,oCAAoC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8KAA8K;AAC9K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mBAAmB;AACxD;AACA;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+IAA+I;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,gIAAgI;AAChI;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,wCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,4GAA4G;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,sBAAsB,IAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,IAAI;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0BAA0B;AACrE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uNAAuN;AACvN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2BAA2B;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8BAA8B;AACnE;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,4CAA4C;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,oBAAoB;AACpB;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gJAAgJ;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,WAAW;AACzD;AACA;AACA,oBAAoB;AACpB,8CAA8C,WAAW;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,WAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf,UAAU,KAAK;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kLAAkL;AAClL;AACA;AACA;AACA;AACA;AACA,sLAAsL;AACtL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,qMAAqM;AACrM;AACA;AACA;AACA;AACA;AACA;AACA,uMAAuM;AACvM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2KAA2K;AAC3K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,oMAAoM;AACpM;AACA;AACA,kCAAkC;AAClC,kMAAkM;AAClM;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,mYAAmY;AACnY;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAe;AAChD,oCAAoC,qBAAqB;AACzD;AACA;AACA;AACA;AACA;AACA,yCAAyC,uBAAuB;AAChE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,4DAA4D,MAAM,0BAA0B,MAAM;AAClG;AACA,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,yBAAyB;AACzB,yBAAyB;AACzB,4BAA4B;AAC5B,4BAA4B;AAC5B,0BAA0B;AAC1B,wBAAwB;AACxB,iCAAiC;AACjC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,mCAAmC;AAC9D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,8BAA8B,qBAAqB;AACnD;AACA,8BAA8B,yBAAyB;AACvD;AACA,KAAK;AACL;AACA,8BAA8B,kCAAkC;AAChE;AACA,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D,2BAA2B,mCAAmC;AAC9D;AACA,KAAK;AACL;AACA,8BAA8B,oBAAoB;AAClD,2BAA2B,sBAAsB;AACjD;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,MAAM;AAC5D,+EAA+E,MAAM;AACrF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6EAA6E,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,oCAAoC;AACpC,+FAA+F,EAAE,IAAI,EAAE;AACvG;AACA;AACA;AACA,wCAAwC,EAAE,IAAI,EAAE;AAChD,iCAAiC,EAAE,IAAI,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;AACA;;AAEA,CAAC;;AAED,6IAA6I;AAC7I;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC,KAAK;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,4DAA4D,OAAO,UAAU,GAAG;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sFAAsF,WAAW;AACjG;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA,qCAAqC;AACrC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+KAA+K;AAC/K;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,sJAAsJ;AACtJ;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,kCAAkC;AACpE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB;AACrF,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,gCAAgC;AACxE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,4BAA4B;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sBAAsB;AACxD;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B,iEAAiE;AAC9F;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B,gEAAgE;AAC7F;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kEAAkE,yBAAyB;AAC3F;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA,uCAAuC,qBAAqB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,4BAA4B;AAC9D,+CAA+C,gCAAgC;AAC/E;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sBAAsB;AACxD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2BAA2B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C,SAAS;AACT;AACA,KAAK;AACL,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,6gBAA6gB;AAC7gB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,2DAA2D,iBAAiB;AAC5E;AACA;AACA,qDAAqD,cAAc;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAyC;AAC1E;AACA;AACA;AACA;AACA;AACA,iCAAiC,iCAAiC;AAClE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gCAAgC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA,qCAAqC,eAAe;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAW,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,qBAAqB;AACjH;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,KAAK;AACnB,cAAc,KAAK;AACnB;AACA;AACA,sCAAsC;AACtC,uBAAuB,kCAAkC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAA0C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gBAAgB;AAC/C;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA,6BAA6B,oCAAoC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,aAAa;AAChE,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,oCAAoC;AAC/D;AACA,KAAK;AACL;AACA,0CAA0C,4BAA4B;AACtE;AACA,KAAK;AACL;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,2BAA2B;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,yBAAyB,oBAAoB;AAC7C,6BAA6B,oBAAoB;AACjD,wBAAwB,oBAAoB;AAC5C;AACA,8BAA8B;AAC9B,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA,8BAA8B,6BAA6B;AAC3D,2BAA2B,yBAAyB;AACpD;AACA;AACA,KAAK;AACL;AACA,8BAA8B,uBAAuB;AACrD,2BAA2B,sBAAsB;AACjD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,iCAAiC;AAC/D;AACA,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,gCAAgC,YAAY,qBAAqB,OAAO;AACxE;AACA,KAAK;AACL,0CAA0C,OAAO;AACjD;AACA,KAAK;AACL,kCAAkC,OAAO;AACzC;AACA,KAAK;AACL,+BAA+B,OAAO;AACtC;AACA;AACA;AACA,KAAK;AACL,+BAA+B,OAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8GAA8G;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,mMAAmM;AACnM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,SAAS;AAC7G;AACA;AACA,oFAAoF,SAAS;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,WAAW;AAC/C,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,2HAA2H;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,6BAA6B,uBAAuB,oBAAoB;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE,uCAAuC;AACvC,mCAAmC;AACnC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG;AAChG,qCAAqC;AACrC,+BAA+B;AAC/B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,mCAAmC;AACnC,+BAA+B;AAC/B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,wEAAwE;AACxE,mCAAmC;AACnC,2DAA2D;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,+BAA+B;AAC/B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,iDAAiD;AACjD,+BAA+B;AAC/B,oBAAoB,QAAQ;AAC5B;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,oGAAoG;AACpG;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uNAAuN;AACvN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,SAAS;AAC7G;AACA;AACA,kGAAkG,SAAS;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,kBAAkB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA,+CAA+C,OAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,CAAC;;AAED,kKAAkK;AAClK;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gCAAgC;AAChC,iCAAiC;AACjC,iCAAiC;AACjC;AACA;;AAEA,CAAC;;AAED,yKAAyK;AACzK;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0EAA0E,uBAAuB,yCAAyC,gCAAgC,2BAA2B,2BAA2B,uBAAuB,eAAe,GAAG,gDAAgD,uBAAuB,eAAe,qBAAqB,+BAA+B,GAAG,yBAAyB,eAAe,aAAa,WAAW,gBAAgB,GAAG,6BAA6B,eAAe,aAAa,gBAAgB,GAAG,yBAAyB,cAAc,YAAY,iBAAiB,GAAG,6BAA6B,cAAc,iBAAiB,GAAG,+BAA+B,eAAe,qBAAqB,GAAG;AACjwB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,uCAAuC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0CAA0C;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,gCAAgC;AAChC,iCAAiC;AACjC,iCAAiC;AACjC;AACA;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,8MAA8M;AAC9M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,YAAY;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,6cAA6c;AAC7c;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iCAAiC,cAAc,gCAAgC;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,oCAAoC,sCAAsC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,qBAAqB;AACnD,2BAA2B,qCAAqC;AAChE;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qEAAqE;AACrE;AACA,mCAAmC,iCAAiC;AACpE,MAAM,YAAY;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,wCAAwC,eAAe;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,yBAAyB;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,0DAA0D,qBAAqB,iBAAiB;AAChG;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iCAAiC,QAAQ;AACzC;;AAEA,CAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,UAAU;AAC1C;AACA;AACA,0BAA0B,yCAAyC;AACnE;AACA;AACA,0BAA0B,sCAAsC;AAChE;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;;AAGA,CAAC;;AAED,kJAAkJ;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,mJAAmJ;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wBAAwB;AACxE;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+IAA+I;AAC/I;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D,mBAAmB,wCAAwC;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,4BAA4B;AAC9D,mBAAmB,4CAA4C;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mCAAmC;AACrE,mBAAmB,oDAAoD;AACvE;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,kCAAkC;AACpE,mBAAmB,wDAAwD;AAC3E;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,wBAAwB;AAC1D,mBAAmB,4CAA4C;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,uBAAuB;AACzD,mBAAmB,8CAA8C;AACjE;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,8BAA8B;AAChE,mBAAmB,wDAAwD;AAC3E;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,6BAA6B;AAC/D,mBAAmB,0DAA0D;AAC7E;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,sCAAsC;AACzD;AACA,KAAK;AACL;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA,KAAK;AACL;AACA;AACA,kCAAkC,wBAAwB;AAC1D,mBAAmB,sCAAsC;AACzD;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mBAAmB;AACrD,mBAAmB,sCAAsC;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;AACA;;AAEA,CAAC;;AAED,6SAA6S;AAC7S,aAAa,2BAA2B;AACxC,aAAa,qCAAqC;AAClD,aAAa,iDAAiD;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA,sCAAsC,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,IAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAe;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wBAAwB;AAC/E;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,wBAAwB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;;AAED,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,4IAA4I;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,2BAA2B;AACjF;AACA,kDAAkD,8BAA8B,yBAAyB,4BAA4B,qBAAqB,gCAAgC,mCAAmC,wBAAwB,6BAA6B,gCAAgC,OAAO,6DAA6D,sCAAsC,iEAAiE,sCAAsC,2DAA2D,sCAAsC,uDAAuD,sCAAsC,2BAA2B,6BAA6B,4BAA4B,kDAAkD,oDAAoD,mDAAmD,oBAAoB,OAAO;;AAEz8B,CAAC;;AAED,gYAAgY;AAChY;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,cAAc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kFAAkF;AAClF,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,KAAuD;AAC/E;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;;;;;;;;;;;ACh9qBA,sQAAsQ;AACtQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,kCAAkC,gCAAgC;AAClE,kCAAkC,mBAAmB;AACrD,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,oCAAoC,iBAAiB;AACrD,0CAA0C,iBAAiB;AAC3D,qCAAqC,kBAAkB;AACvD,0CAA0C,eAAe;AACzD,gDAAgD,gBAAgB;AAChE,oCAAoC,gBAAgB;AACpD,wCAAwC,iBAAiB;AACzD,8CAA8C,kBAAkB;AAChE,oCAAoC,gCAAgC;AACpE,sCAAsC,mBAAmB;AACzD,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAA8B;AACxD,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,kBAAkB,SAAS;AAC3B;AACA,uBAAuB;AACvB,kBAAkB,+CAA+C;AACjE,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,yBAAyB;AACzB,qCAAqC;AACrC,yBAAyB;AACzB;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA,kBAAkB;AAClB;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,uBAAuB;AACvB,kBAAkB;AAClB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,uBAAuB;AACvB,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC,kBAAkB;AAClB,kCAAkC,oBAAoB;AACtD,uBAAuB;AACvB,kBAAkB,WAAW;AAC7B,sCAAsC;AACtC;AACA;AACA,qBAAqB,2BAA2B;AAChD,kBAAkB,6CAA6C;AAC/D,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,2CAA2C,cAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,+BAA+B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,qCAAqC,gBAAgB;AACrD;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uCAAuC;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,kCAAkC,6BAA6B,4CAA4C,mDAAmD,yBAAyB,GAAG;AACtO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,qOAAqO;AACrO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oEAAoE,UAAU;AAC9E,iDAAiD,kBAAkB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,sCAAsC,kBAAkB;AACxD,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uCAAuC;AACjE;AACA,8BAA8B,2CAA2C;AACzE;AACA,8BAA8B,iDAAiD;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,wFAAwF,gCAAgC,iBAAiB,GAAG,4EAA4E,gCAAgC,GAAG,gDAAgD,gCAAgC,uBAAuB,wCAAwC,yBAAyB,iBAAiB,GAAG,yDAAyD,gDAAgD,0CAA0C,GAAG,wBAAwB,mBAAmB,yBAAyB,GAAG,2BAA2B,yBAAyB,kBAAkB,GAAG,yDAAyD,qBAAqB,GAAG,kEAAkE,qBAAqB,GAAG,gCAAgC,mBAAmB,sBAAsB,kCAAkC,sBAAsB,6CAA6C,uBAAuB,0BAA0B,kBAAkB,GAAG,yCAAyC,gCAAgC,kDAAkD,uBAAuB,0BAA0B,qBAAqB,GAAG,sCAAsC,8BAA8B,GAAG,+BAA+B,oBAAoB,0BAA0B,GAAG,mCAAmC,mBAAmB,qBAAqB,GAAG,qCAAqC,qBAAqB,uBAAuB,8BAA8B,GAAG,4CAA4C,cAAc,GAAG,wCAAwC,oBAAoB,yBAAyB,eAAe,kBAAkB,gBAAgB,uBAAuB,mBAAmB,iDAAiD,6BAA6B,6CAA6C,GAAG,2BAA2B,WAAW,wCAAwC,YAAY,wCAAwC,aAAa,yCAAyC,GAAG,mCAAmC,2CAA2C,gDAAgD,0BAA0B,QAAQ,GAAG;AACh2E;AACA;AACA;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,uCAAuC;AACpG,kCAAkC,uCAAuC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gCAAgC;AAC5E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gCAAgC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,sGAAsG;AACtG;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,2TAA2T;AAC3T;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,yDAAyD,aAAa;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,qCAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,eAAe;AAChF;AACA;AACA;AACA;AACA;AACA,iEAAiE,eAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,eAAe;AACnF;AACA;AACA,qEAAqE,eAAe;AACpF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sDAAsD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,4BAA4B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,8BAA8B,8BAA8B;AAC5D,gCAAgC,gCAAgC;AAChE,6CAA6C,iCAAiC;AAC9E,8CAA8C,+BAA+B;AAC7E,+BAA+B,4BAA4B;AAC3D,kCAAkC,wCAAwC;AAC1E,wCAAwC,qCAAqC,oBAAoB,IAAI;AACrG;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,kCAAkC,sCAAsC;AACxE,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,uBAAuB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mBAAmB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gDAAgD;AACvG,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,4HAA4H;AAC5H;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,4QAA4Q;AAC5Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,IAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;;ACnqFA,2JAA2J;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+JAA+J;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,6IAA6I;AAC7I;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,iLAAiL;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,CAAC;AACD;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;;AC5NA,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,qFAAqF,wBAAwB,IAAI,uBAAuB,cAAc,QAAQ,aAAa,eAAe,6LAA6L,qEAAqE,yEAAyE,kBAAkB,cAAc,KAAK,wDAAwD,aAAa,IAAI,EAAE,aAAa,UAAU,gBAAgB,iBAAiB,gBAAgB,qGAAqG,KAAK,cAAc,kDAAkD,yCAAyC,+BAA+B,SAAS,wBAAwB,QAAQ,eAAe,4BAA4B,YAAY,mBAAmB,WAAW,wBAAwB,kBAAkB,mBAAmB,iBAAiB,wBAAwB,cAAc,yBAAyB,aAAa,yBAAyB,gBAAgB,yBAAyB,eAAe,yBAAyB,UAAU,iEAAiE,oBAAoB,oBAAoB,mBAAmB,yBAAyB,oBAAoB,+CAA+C,8BAA8B,4BAA4B,OAAO,iEAAiE,IAAI,2EAA2E,yBAAyB,KAAK,KAAK,WAAW,0EAA0E,UAAU,EAAE,oBAAoB,SAAS,eAAe,sCAAsC,+GAA+G,aAAa,mCAAmC,oDAAoD,cAAc,qBAAqB,gEAAgE,6BAA6B,iBAAiB,8CAA8C,IAAI,sBAAsB,gCAAgC,mCAAmC,eAAe,0GAA0G,sBAAsB,WAAW,mBAAmB,uCAAuC,UAAU,KAAK,gEAAgE,uFAAuF,eAAe,uBAAuB,uFAAuF,kBAAkB,cAAc,YAAY,sBAAsB,KAAK,qBAAqB,gBAAgB,KAAK,+BAA+B,kDAAkD,kFAAkF,IAAI,oBAAoB,IAAI,MAAM,SAAS,QAAQ,WAAW,iBAAiB,0CAA0C,YAAY,gBAAgB,WAAW,KAAK,sBAAsB,2DAA2D,SAAS,eAAe,mBAAmB,wBAAwB,WAAW,KAAK,sBAAsB,oEAAoE,WAAW,cAAc,SAAS,iBAAiB,gBAAgB,gCAAgC,kBAAkB,gBAAgB,oDAAoD,KAAK,gBAAgB,yEAAyE,mBAAmB,kBAAkB,sDAAsD,yBAAyB,OAAO,gBAAgB,aAAa,eAAe,WAAW,yBAAyB,kCAAkC,aAAa,QAAQ,0BAA0B,iCAAiC,sBAAsB,UAAU,uBAAuB,UAAU,uBAAuB,iBAAiB,0DAA0D,gBAAgB,IAAI,KAAK,MAAM,IAAI,4BAA4B,SAAS,2BAA2B,+CAA+C,iBAAiB,aAAa,0CAA0C,kBAAkB,0DAA0D,IAAI,YAAY,IAAI,qCAAqC,SAAS,2BAA2B,2CAA2C,kBAAkB,kBAAkB,cAAc,WAAW,+HAA+H,UAAU,iBAAiB,kBAAkB,uEAAuE,UAAU,4DAA4D,mBAAmB,oIAAoI,sDAAsD,mBAAmB,cAAc,uEAAuE,UAAU,8DAA8D,OAAO,qCAAqC,iBAAiB,6CAA6C,IAAI,2EAA2E,yDAAyD,eAAe,KAAK,MAAM,qOAAqO,SAAS,4BAA4B,OAAO,MAAM,sDAAsD,SAAS,2JAA2J,OAAO,MAAM,mFAAmF,WAAW,SAAS,MAAM,sDAAsD,8BAA8B,4BAA4B,yGAAyG,wXAAwX,kKAAkK,qCAAqC,YAAY,kEAAkE,iBAAiB,yFAAyF,wBAAwB,wDAAwD,KAAK,iBAAiB,qGAAqG,WAAW,WAAW,SAAS,uWAAuW,cAAc,gIAAgI,aAAa,0BAA0B,sDAAsD,oBAAoB,MAAM,IAAI,oBAAoB,UAAU,wDAAwD,uHAAuH,aAAa,4CAA4C,YAAY,wBAAwB,mDAAmD,4CAA4C,YAAY,iBAAiB,+CAA+C,SAAS,gBAAgB,gCAAgC,kBAAkB,aAAa,gDAAgD,eAAe,aAAa,gBAAgB,sBAAsB,gCAAgC,qCAAqC,8CAA8C,iBAAiB,IAAI,kBAAkB,SAAS,oBAAoB,2CAA2C,aAAa,0EAA0E,yDAAyD,2EAA2E,iEAAiE,kGAAkG,iBAAiB,IAAI,2BAA2B,+CAA+C,eAAe,QAAQ,0GAA0G,SAAS,iBAAiB,gFAAgF,iBAAiB,qDAAqD,0BAA0B,6BAA6B,uIAAuI,WAAW,yBAAyB,OAAO,mBAAmB,0DAA0D,WAAW,QAAQ,iCAAiC,IAAI,8BAA8B,4GAA4G,eAAe,qCAAqC,iBAAiB,kDAAkD,cAAc,eAAe,aAAa,iBAAiB,cAAc,YAAY,aAAa,+BAA+B,cAAc,+BAA+B,eAAe,uBAAuB,YAAY,yBAAyB,aAAa,oBAAoB,eAAe,4BAA4B,gBAAgB,wBAAwB,cAAc,qBAAqB,6HAA6H,mBAAmB,kDAAkD,WAAW,gDAAgD,YAAY,qDAAqD,YAAY,kDAAkD,aAAa,uDAAuD,eAAe,0BAA0B,eAAe,8BAA8B,eAAe,gEAAgE,4BAA4B,mBAAmB,oBAAoB,gCAAgC,iDAAiD,2DAA2D,WAAW,KAAK,qBAAqB,qBAAqB,oIAAoI,iBAAiB,EAAE,oBAAoB,iDAAiD,gCAAgC,0CAA0C,OAAO,eAAe,YAAY,WAAW,EAAE,gBAAgB,yBAAyB,gCAAgC,EAAE,GAAG,EAAE,QAAQ,OAAO,OAAO,GAAG,EAAE,qBAAqB,eAAe,gBAAgB,WAAW,iCAAiC,mCAAmC,gBAAgB,qCAAqC,4CAA4C,mBAAmB,qCAAqC,iDAAiD,8BAA8B,EAAE,EAAE,oBAAoB,wBAAwB,MAAM,eAAe,iBAAiB,qBAAqB,+BAA+B,8CAA8C,EAAE,eAAe,aAAa,sCAAsC,qBAAqB,qBAAqB,4BAA4B,0BAA0B,gBAAgB,oBAAoB,+QAA+Q,0BAA0B,yBAAyB,4JAA4J,8BAA8B,+BAA+B,kCAAkC,gBAAgB,IAAI,kBAAkB,UAAU,UAAU,iCAAiC,kBAAkB,MAAM,IAAI,oBAAoB,SAAS,eAAe,gCAAgC,cAAc,MAAM,8BAA8B,iDAAiD,kCAAkC,SAAS,sLAAsL,YAAY,kBAAkB,8BAA8B,2BAA2B,qBAAqB,qBAAqB,gCAAgC,SAAS,2CAA2C,gEAAgE,uFAAuF,gBAAgB,kBAAkB,cAAc,gEAAgE,0BAA0B,gCAAgC,oBAAoB,QAAQ,+BAA+B,iDAAiD,UAAU,4BAA4B,wEAAwE,cAAc,cAAc,wCAAwC,mBAAmB,SAAS,EAAE,cAAc,8BAA8B,SAAS,aAAa,sFAAsF,kBAAkB,yEAAyE,oCAAoC,cAAc,+BAA+B,cAAc,iDAAiD,uBAAuB,eAAe,iCAAiC,qBAAqB,GAAG,cAAc,qBAAqB,wCAAwC,WAAW,sBAAsB,gBAAgB,EAAE,kEAAkE,+CAA+C,OAAO,qCAAqC,cAAc,wFAAwF,YAAY,sBAAsB,gBAAgB,EAAE,sDAAsD,0CAA0C,sCAAsC,yBAAyB,EAAE,EAAE,kBAAkB,2CAA2C,kBAAkB,gCAAgC,2BAA2B,mDAAmD,sBAAsB,UAAU,uBAAuB,oDAAoD,uBAAuB,+BAA+B,gDAAgD,iCAAiC,qJAAqJ,gCAAgC,WAAW,aAAa,YAAY,IAAI,aAAa,SAAS,yBAAyB,8EAA8E,4CAA4C,sBAAsB,UAAU,OAAO,iCAAiC,uCAAuC,+BAA+B,kDAAkD,iCAAiC,aAAa,sEAAsE,qBAAqB,UAAU,yBAAyB,UAAU,yCAAyC,gDAAgD,4CAA4C,gDAAgD,kEAAkE,IAAI,oBAAoB,UAAU,UAAU,2CAA2C,+BAA+B,qEAAqE,iDAAiD,sEAAsE,iEAAiE,oBAAoB,IAAI,oCAAoC,SAAS,QAAQ,QAAQ,mBAAmB,UAAU,sBAAsB,UAAU,iEAAiE,+BAA+B,gDAAgD,gDAAgD,uCAAuC,YAAY,sBAAsB,UAAU,OAAO,kDAAkD,6BAA6B,WAAW,sBAAsB,UAAU,OAAO,iCAAiC,8DAA8D,+BAA+B,iDAAiD,gDAAgD,wCAAwC,aAAa,2BAA2B,iCAAiC,mDAAmD,6DAA6D,WAAW,sBAAsB,UAAU,OAAO,iCAAiC,kDAAkD,6BAA6B,oCAAoC,MAAM,qCAAqC,UAAU,WAAW,kDAAkD,sBAAsB,8CAA8C,EAAE,aAAa,gBAAgB,aAAa,4BAA4B,kBAAkB,gBAAgB,MAAM,qCAAqC,UAAU,WAAW,kDAAkD,sBAAsB,qBAAqB,EAAE,eAAe,kBAAkB,eAAe,4BAA4B,oBAAoB,eAAe,kCAAkC,MAAM,qCAAqC,UAAU,WAAW,kDAAkD,8CAA8C,gDAAgD,+BAA+B,+BAA+B,sBAAsB,4BAA4B,EAAE,gBAAgB,4BAA4B,mDAAmD,qBAAqB,cAAc,sBAAsB,UAAU,OAAO,sBAAsB,wBAAwB,EAAE,aAAa,qCAAqC,MAAM,mCAAmC,OAAO,2CAA2C,IAAI,yDAAyD,EAAE,GAAG,SAAS,iEAAiE,KAAK,iBAAiB,IAAI,kBAAkB,mBAAmB,OAAO,WAAW,SAAS,cAAc,oCAAoC,2BAA2B,iCAAiC,sFAAsF,OAAO,qBAAqB,+BAA+B,sCAAsC,sBAAsB,qGAAqG,EAAE,kGAAkG,0CAA0C,UAAU,2CAA2C,8BAA8B,IAAI,0CAA0C,SAAS,QAAQ,QAAQ,oBAAoB,UAAU,uCAAuC,2CAA2C,gEAAgE,+CAA+C,sEAAsE,iBAAiB,uCAAuC,2CAA2C,kDAAkD,mDAAmD,iDAAiD,iBAAiB,MAAM,0CAA0C,kBAAkB,mCAAmC,4BAA4B,oBAAoB,uCAAuC,2CAA2C,kDAAkD,mDAAmD,kDAAkD,0CAA0C,iBAAiB,MAAM,0CAA0C,kBAAkB,sCAAsC,4BAA4B,iBAAiB,2CAA2C,wCAAwC,kDAAkD,4EAA4E,sDAAsD,6BAA6B,iBAAiB,sEAAsE,kDAAkD,iDAAiD,oCAAoC,oFAAoF,kDAAkD,iCAAiC,aAAa,gEAAgE,2IAA2I,WAAW,IAAI,+DAA+D,gGAAgG,gBAAgB,gEAAgE,qBAAqB,+BAA+B,uBAAuB,iDAAiD,iCAAiC,KAAK,mEAAmE,4CAA4C,WAAW,gCAAgC,sBAAsB,UAAU,EAAE,4CAA4C,oDAAoD,oCAAoC,+BAA+B,qBAAqB,4BAA4B,2DAA2D,wBAAwB,iDAAiD,gCAAgC,wMAAwM,yEAAyE,iHAAiH,4BAA4B,iBAAiB,4BAA4B,kCAAkC,QAAQ,oCAAoC,mBAAmB,YAAY,oCAAoC,mBAAmB,kBAAkB,WAAW,sBAAsB,qBAAqB,IAAI,GAAG,kBAAkB,yBAAyB,gVAAgV,cAAc,kBAAkB,4FAA4F,2CAA2C,wGAAwG,SAAS,aAAa,6GAA6G,QAAQ,sBAAsB,YAAY,mBAAmB,KAAK,mBAAmB,eAAe,iBAAiB,yBAAyB,8BAA8B,kBAAkB,IAAI,qBAAqB,UAAU,QAAQ,UAAU,OAAO,+GAA+G,IAAI,sBAAsB,UAAU,EAAE,mGAAmG,UAAU,qFAAqF,SAAS,gBAAgB,SAAS,qBAAqB,oCAAoC,iCAAiC,SAAS,EAAE,cAAc,MAAM,mBAAmB,IAAI,WAAW,UAAU,KAAK,SAAS,uBAAuB,4DAA4D,qBAAqB,6BAA6B,QAAQ,4DAA4D,6BAA6B,MAAM,uBAAuB,6CAA6C,IAAI,yBAAyB,IAAI,iBAAiB,oBAAoB,qDAAqD,uBAAuB,gEAAgE,gDAAgD,0CAA0C,2BAA2B,QAAQ,cAAc,UAAU,yBAAyB,iBAAiB,gBAAgB,IAAI,KAAK,MAAM,IAAI,MAAM,SAAS,2BAA2B,+CAA+C,iBAAiB,aAAa,0CAA0C,kBAAkB,YAAY,IAAI,QAAQ,UAAU,SAAS,2BAA2B,2CAA2C,iBAAiB,kBAAkB,uDAAuD,0PAA0P,IAAI,2DAA2D,SAAS,4BAA4B,2BAA2B,QAAQ,cAAc,mCAAmC,OAAO,4BAA4B,4CAA4C,0BAA0B,iBAAiB,cAAc,cAAc,yBAAyB,6IAA6I,kLAAkL,SAAS,WAAW,qBAAqB,sBAAsB,iEAAiE,8EAA8E,0EAA0E,yBAAyB,2JAA2J,+IAA+I,mFAAmF,8DAA8D,mBAAmB,oLAAoL,aAAa,yDAAyD,gBAAgB,6DAA6D,uCAAuC,qJAAqJ,OAAO,4BAA4B,QAAQ,mBAAmB,8BAA8B,iGAAiG,WAAW,eAAe,8BAA8B,EAAE,SAAS,sBAAsB,sBAAsB,wBAAwB,6BAA6B,uBAAuB,IAAI,kBAAkB,aAAa,IAAI,sBAAsB,SAAS,8CAA8C,sBAAsB,gBAAgB,2CAA2C,8EAA8E,mBAAmB,WAAW,iCAAiC,qBAAqB,oBAAoB,mBAAmB,IAAI,sCAAsC,uBAAuB,MAAM,+CAA+C,gBAAgB,iCAAiC,SAAS,oBAAoB,eAAe,WAAW,mKAAmK,gEAAgE,gNAAgN,oBAAoB,qDAAqD,gBAAgB,qBAAqB,mBAAmB,yEAAyE,aAAa,uBAAuB,sBAAsB,QAAQ,+DAA+D,gCAAgC,0CAA0C,IAAI,uBAAuB,WAAW,KAAK,QAAQ,eAAe,OAAO,4MAA4M,mDAAmD,SAAS,yBAAyB,EAAE,GAAG,KAAK,GAAG,YAAY,iBAAiB,OAAO,aAAa,EAAE,IAAI,cAAc,8CAA8C,iEAAiE,EAAE,GAAG,cAAc,aAAa,0BAA0B,8BAA8B,4CAA4C,IAAI,oDAAoD,wCAAwC,EAAE,GAAG,uBAAuB,+CAA+C,OAAO,iCAAiC,EAAE,WAAW,IAAI,0BAA0B,cAAc,gBAAgB,iBAAiB,cAAc,uBAAuB,KAAK,iEAAiE,aAAa,2BAA2B,qBAAqB,IAAI,qDAAqD,sBAAsB,UAAU,OAAO,gBAAgB,SAAS,gFAAgF,SAAS,6CAA6C,gBAAgB,mBAAmB,YAAY,IAAI,2BAA2B,UAAU,8BAA8B,KAAK,aAAa,KAAK,2BAA2B,uCAAuC,sBAAsB,iBAAiB,oBAAoB,cAAc,qBAAqB,UAAU,SAAS,6CAA6C,gBAAgB,iBAAiB,IAAI,2BAA2B,iCAAiC,SAAS,6CAA6C,gBAAgB,mBAAmB,YAAY,IAAI,2BAA2B,UAAU,qFAAqF,+BAA+B,2BAA2B,sCAAsC,2FAA2F,YAAY,KAAK,2BAA2B,SAAS,SAAS,qDAAqD,2BAA2B,MAAM,wDAAwD,QAAQ,KAAK,sBAAsB,uCAAuC,+CAA+C,EAAE,SAAS,+BAA+B,MAAM,mBAAmB,gCAAgC,iBAAiB,sBAAsB,+BAA+B,+BAA+B,wCAAwC,MAAM,4BAA4B,SAAS,mBAAmB,SAAS,6CAA6C,gBAAgB,qBAAqB,IAAI,cAAc,qBAAqB,sEAAsE,SAAS,6CAA6C,gBAAgB,qBAAqB,YAAY,IAAI,mCAAmC,cAAc,wBAAwB,SAAS,6CAA6C,gBAAgB,iBAAiB,IAAI,0CAA0C,SAAS,6CAA6C,gBAAgB,QAAQ,MAAM,2BAA2B,OAAO,IAAI,sBAAsB,uDAAuD,uCAAuC,SAAS,6CAA6C,gBAAgB,yBAAyB,OAAO,IAAI,2BAA2B,0BAA0B,SAAS,6CAA6C,gBAAgB,eAAe,mIAAmI,kCAAkC,UAAU,iCAAiC,YAAY,EAAE,EAAE,yCAAyC,EAAE,6BAA6B,EAAE,eAAe,gDAAgD,wBAAwB,4BAA4B,uBAAuB,gBAAgB,KAAK,MAAM,iBAAiB,0BAA0B,sDAAsD,iBAAiB,SAAS,WAAW,QAAQ,4BAA4B,UAAU,uBAAuB,YAAY,WAAW,2BAA2B,OAAO,qBAAqB,KAAK,WAAW,UAAU,iBAAiB,QAAQ,iDAAiD,mBAAmB,IAAI,2BAA2B,oBAAoB,SAAS,6CAA6C,gBAAgB,qBAAqB,IAAI,mBAAmB,gBAAgB,IAAI,KAAK,0BAA0B,KAAK,wBAAwB,gBAAgB,kBAAkB,mBAAmB,SAAS,4BAA4B,mBAAmB,SAAS,6CAA6C,gBAAgB,qBAAqB,OAAO,IAAI,sBAAsB,2BAA2B,gGAAgG,SAAS,6CAA6C,gBAAgB,qBAAqB,IAAI,mBAAmB,gBAAgB,IAAI,KAAK,0BAA0B,KAAK,yBAAyB,gBAAgB,wBAAwB,SAAS,4BAA4B,mBAAmB,SAAS,6CAA6C,gBAAgB,eAAe,sCAAsC,sBAAsB,OAAO,WAAW,QAAQ,+BAA+B,oBAAoB,kBAAkB,QAAQ,WAAW,sBAAsB,8BAA8B,gCAAgC,iBAAiB,WAAW,KAAK,cAAc,0CAA0C,cAAc,qBAAqB,+BAA+B,mDAAmD,IAAI,IAAI,wBAAwB,kEAAkE,mCAAmC,8BAA8B,yBAAyB,yBAAyB,yBAAyB,2BAA2B,4BAA4B,uBAAuB,wCAAwC,EAAE,IAAI,uEAAuE,OAAO,KAAK,mDAAmD,yBAAyB,2iBAA2iB,sEAAsE,SAAS,MAAM,gEAAgE,cAAc,mBAAmB,WAAW,MAAM,YAAY,WAAW,0GAA0G,+BAA+B,EAAE,SAAS,mDAAmD,YAAY,WAAW,KAAK,gBAAgB,MAAM,+BAA+B,gCAAgC,OAAO,qBAAqB,IAAI,oBAAoB,MAAM,oOAAoO,mEAAmE,kBAAkB,qFAAqF,yFAAyF,GAAG,mFAAmF,wFAAwF,GAAG,mFAAmF,wFAAwF,GAAG,oBAAoB,gDAAgD,2EAA2E,GAAG,kBAAkB,uCAAuC,gFAAgF,oCAAoC,iCAAiC,wGAAwG,oCAAoC,yCAAyC,oFAAoF,SAAS,GAAG,kBAAkB,+IAA+I,kBAAkB,kBAAkB,UAAU,IAAI,0DAA0D,oBAAoB,0EAA0E,gHAAgH,mHAAmH,4HAA4H,QAAQ,YAAY,SAAS,YAAY,oEAAoE,MAAM,kDAAkD,MAAM,IAAI,6BAA6B,mIAAmI,QAAQ,4CAA4C,MAAM,KAAK,0EAA0E,SAAS,cAAc,2CAA2C,yOAAyO,2CAA2C,EAAE,sDAAsD,EAAE,SAAS,iCAAiC,4CAA4C,QAAQ,QAAQ,iHAAiH,4DAA4D,OAAO,gBAAgB,+DAA+D,qDAAqD,EAAE,GAAG,WAAW,UAAU,KAAK,oBAAoB,wEAAwE,iDAAiD,QAAQ,eAAe,cAAc,sBAAsB,mBAAmB,2DAA2D,yBAAyB,cAAc,cAAc,+BAA+B,cAAc,+BAA+B,UAAU,gEAAgE,wBAAwB,+BAA+B,EAAE,gBAAgB,gEAAgE,yBAAyB,wGAAwG,gBAAgB,oBAAoB,gEAAgE,6BAA6B,kBAAkB,EAAE,yEAAyE,cAAc,gEAAgE,6BAA6B,mBAAmB,EAAE,sBAAsB,+0pxCAA+0pxC,aAAa,2CAA2C,YAAY,WAAW,yBAAyB,gBAAgB,kUAAkU,aAAa,UAAU,SAAS,sBAA2F;;;;;;;;;;;;;;;;ACPlsh0C;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;ACFuC;AACF;AACJ;;AAEjC,wBAAwB,wDAAQ,CAAC,qDAAS;AACnC;AACA;AACA,qBAAqB,wDAAQ,CAAC,kDAAM;AAC3C,iEAAe,WAAW,EAAC;;;;;;;;;;;;;;;;;;ACRY;AACE;;AAE1B;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qDAAS;AACxB,yBAAyB,yDAAS;AAClC;AACA,IAAI;AACJ,qBAAqB,qDAAS,UAAU,sDAAU;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,UAAU;AACV;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACvDe;AACf;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACNuC;;AAExB,oCAAoC,qDAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yDAAS;AACrB,YAAY,yDAAS;AACrB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC5Be;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACrBe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACF2B;AACU;AACV;AACU;AACM;AACC;AACD;AACN;;AAEtB;AACf,6BAA6B,mDAAO;AACpC;AACA,8BAA8B,mDAAG;AACjC,qBAAqB,mDAAG;AACxB;AACA;AACA;AACA,eAAe,mDAAG,CAAC,2DAAW;AAC9B,eAAe,mDAAG;AAClB;AACA;;AAEO,6CAA6C,kDAAM;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,4CAA4C,kDAAM;AACzD;AACA,gDAAgD,sDAAM;AACtD,qBAAqB,wDAAQ;AAC7B,qBAAqB,wDAAQ;AAC7B;AACA;AACA;AACA;AACA,EAAE,2DAAW,2BAA2B,0DAAgB;AACxD,MAAM,wDAAQ;AACd;AACA;;;;;;;;;;;;;;;;;AC9C2D;;AAE3D;AACA;AACe;AACf;AACA;AACA;;AAEA;;AAEA,oCAAoC,sDAAgB,GAAG,wDAAc;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpDe;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACZuC;AACJ;;AAEpB;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA,WAAW,uDAAO;AAClB;AACA;AACA;;AAEO,kCAAkC,qDAAS;AAClD,kBAAkB,qDAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC,IAAI;AACJ,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACtD2C;;AAEpC;;AAEA;AACA;;AAEP;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY;AACrD;;AAEA;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,oDAAoD;AAC3G;;AAEA;AACA;AACA,YAAY,2BAA2B,EAAE,eAAe,IAAI,eAAe,IAAI,eAAe,EAAE,qBAAqB,EAAE,GAAG;AAC1H;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,cAAc,2BAA2B,EAAE,eAAe,IAAI,qBAAqB,KAAK,qBAAqB,GAAG,qBAAqB,EAAE,GAAG;AAC1I;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC3Y2C;AACyB;AACzB;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,0CAAG,OAAO,qDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAO;AACzC;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,uBAAuB,kDAAM,CAAC,4CAAK;AACzC;AACA,oBAAoB,+CAAQ,YAAY,+CAAQ;AAChD;AACA,GAAG;AACH;AACA,oBAAoB,6CAAM,YAAY,6CAAM;AAC5C;AACA,GAAG;AACH;AACA,iDAAiD,6CAAO;AACxD;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;;;;AC5DD,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACTsD;AACE;AACJ;;;;;;;;;;;;;;;;;;;;;;;;ACFT;AACO;AACP;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,0CAAG,OAAO,qDAAU;AACzC;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC,6CAAO;AACxC;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,6CAAO;AACvB;AACA;;AAEA,sDAAM,WAAW,kDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;;;;AC1HM;AACA;;;;;;;;;;;;;;;;ACDP,YAAY;;AAEZ;AACA,8CAA8C,KAAK,OAAO;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA,mFAAmF,OAAO;AAC1F;AACA,gDAAgD,OAAO;AACvD,GAAG;AACH;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;;AAEA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B;AAC/D;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;ACnFxB,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;;;;;;;;ACAS;AACQ;AACD;AACuC;AAC9C;AACF;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,wBAAwB;AAC9C;;AAEA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA,mBAAmB;AACnB,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mDAAU;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,wDAAM;AACV,wCAAwC,0DAAiB;AACzD,sCAAsC,0DAAiB;AACvD,IAAI,sDAAM;AACV,IAAI,0DAAa;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,uDAAO;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,wDAAM;AACV,IAAI,mDAAO;AACX,IAAI,uDAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA,QAAQ,0DAAa;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA,QAAQ,uDAAO;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C,qBAAqB,QAAQ;AACvE,gBAAgB,OAAO;AACvB;AACA,QAAQ,0DAAa;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,wDAAO;AACnB;;AAEA,oCAAoC,iDAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA,oEAAoE;AACpE,2DAA2D;AAC3D,yBAAyB,wDAAO,yCAAyC;AACzE;AACA;AACA;AACA;AACA,YAAY,iDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA,uEAAuE,wDAAQ;AAC/E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACjMe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,cAAc,qDAAqD;AACnE,aAAa,oDAAoD;AACjE,iBAAiB,wDAAwD;AACzE,aAAa,oDAAoD;AACjE,QAAQ,+CAA+C;AACvD,QAAQ,+CAA+C;AACvD,SAAS,gDAAgD;AACzD,SAAS,gDAAgD;AACzD,QAAQ;AACR,GAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3BoC;AACoB;;AAExD,6BAAe,oCAAS;AACxB;AACA,kBAAkB,wDAAM,4BAA4B,mDAAO,EAAE,0DAAiB;AAC9E;AACA,qCAAqC,mDAAO,EAAE,0DAAiB;AAC/D,IAAI;AACJ;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,wDAAM;AACxB;AACA,+BAA+B,mDAAO,EAAE,0DAAiB;AACzD,4BAA4B,mCAAmC;AAC/D;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACO,oBAAoB;AACpB,2BAA2B;;AAE3B;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACZ2B;;AAE3B,UAAU,mDAAG;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACVP,YAAY;AACZ,YAAY;AACZ;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA,GAAG,gBAAgB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACnK2B;;AAE3B,UAAU,mDAAG;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACVA;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;;;;ACPqD;AACxB;;AAE7B;AACA;AACA;AACA,WAAW,oDAAI;AACf;AACA,KAAK;AACL;AACA;;AAEe;AACf;AACA,eAAe,kDAAS;AACxB,SAAS,oDAAI;AACb;AACA,GAAG;AACH;;AAEO,mBAAmB,4CAAQ;AAC3B,mBAAmB,4CAAQ;;;;;;;;;;;;;;;;ACrBlC,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR0C;AACI;AACI;AACN;AACF;AACA;AACS;;;;;;;;;;;;;;;;ACNnD;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;ACP6B;;AAE7B;AACA,0BAA0B,oDAAI;AAC9B;AACA;;AAEA,iEAAe,yBAAyB,EAAC;;AAElC;;AAEA;;;;;;;;;;;;;;;;ACXP,6BAAe,oCAAS;AACxB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;;AAEA,4EAA4E,OAAO;AACnF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;ACvCqC;AACA;AACJ;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA,6CAA6C,wDAAQ;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC,aAAa,uDAAQ;AACrB,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAM;AACnC,6BAA6B,sDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA;;;;;;;;;;;;;;;;ACnGA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA,sBAAsB;;AAEtB,6BAAe,sCAAW;AAC1B;AACA;AACA;;;;;;;;;;;;;;;;;;ACRqC;AACJ;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA,iBAAiB,wDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,gBAAgB;AACtD,wDAAwD,OAAO;AAC/D;AACA,2DAA2D,sDAAM;AACjE,2DAA2D,sDAAM;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC,OAAO;AAC5C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACpHqC;AACA;AACJ;AACI;;AAErC,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA,iBAAiB,wDAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,uDAAQ,QAAQ,6CAAC,EAAE,6CAAC;AACxD,2BAA2B,OAAO;AAClC;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;;AAEA;AACA;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA;AACA,yBAAyB,sDAAM;AAC/B,yBAAyB,sDAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0CAA0C;AAC1C;AACA,uBAAuB,sDAAM;AAC7B,uBAAuB,sDAAM;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;ACnHqC;AACN;AACJ;;AAEpB;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+CAAK;AACrB,cAAc,uDAAQ;AACtB,eAAe,mDAAG;;AAElB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,oBAAoB,gBAAgB;AACpC;;AAEA;AACA;AACA,OAAO;;AAEP,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3JuC;;AAEvC;AACO;AACA;;AAEP;AACA;AACA;AACA;AACA,CAAC;;AAEc;AACf,WAAW,sDAAY;AACvB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjBsD;;AAEtD,6BAAe,oCAAS;AACxB,aAAa,qEAAkB;AAC/B;;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP,gGAAgG;AAChG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACjBA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;;;;;ACNsD;;AAE/C;;AAEP,6BAAe,oCAAS;AACxB,UAAU,qEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAkB,gCAAgC;AAC9F;;;;;;;;;;;;;;;;;ACfsD;;AAEtD,6BAAe,oCAAS;AACxB,UAAU,qEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACVA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,uDAAuD;;AAEhD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9CA;AACA,6BAAe,oCAAS;AACxB,kDAAkD,OAAO;AACzD;AACA,6BAA6B;AAC7B,sCAAsC,QAAQ;AAC9C,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACV+C;AACM;AACN;;AAE/C,iEAAe;AACf;AACA;AACA;AACA,OAAO,yDAAa;AACpB;AACA;AACA;AACA;AACA,iBAAiB,6DAAa;AAC9B,OAAO,yDAAa;AACpB,OAAO,4DAAgB;AACvB;AACA;AACA,CAAC,EAAC;;;;;;;;;;;;;;;;AClBF,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACFqC;AACM;AACM;AACE;AACV;AACE;AACU;AAChB;;AAErC;AACA;;AAEA,6BAAe,oCAAS;AACxB,gFAAgF,oDAAQ,GAAG,2DAAW;AACtG;AACA;AACA;AACA,iDAAiD,oDAAQ,GAAG,8DAAc;AAC1E;AACA;AACA;;AAEA;AACA,gBAAgB,+DAAe;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,uDAAW;;AAEzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B,0DAAU;;AAEpC;AACA;;AAEA;AACA;AACA,mDAAmD,gEAAc;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,uEAAuE;AACvE,sIAAsI;AACtI,sEAAsE;AACtE;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mCAAmC,+DAAe;AAClD,gDAAgD,wDAAQ;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnJqC;;AAErC,6BAAe,oCAAS;AACxB,sBAAsB,wDAAQ;AAC9B;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB,yDAAyD,wDAAQ,qBAAqB,wDAAQ;AAC9F;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB;AACA,qBAAqB,wDAAQ,QAAQ,wDAAQ;AAC7C;;;;;;;;;;;;;;;;;ACLO;AACP;AACA;;AAEO;AACP;AACA;AACA;;;;;;;;;;;;;;;;;ACPA,6BAAe,oCAAS;AACxB;AACA;AACA,qBAAqB;AACrB;;AAEO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;ACnFO;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACXA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACFA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACdA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACXA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPoC;AACF;AACY;AACF;AACV;AACF;AACE;AACA;AACU;AACI;AACV;AACF;AACM;;AAE3B;AACf;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,iDAAU;AACnB,QAAQ,gDAAS;AACjB,aAAa,qDAAc;AAC3B,cAAc,sDAAe;AAC7B,QAAQ,gDAAS;AACjB,OAAO,+CAAQ;AACf,QAAQ,gDAAS;AACjB,QAAQ,gDAAS;AACjB,aAAa,qDAAc;AAC3B,eAAe,uDAAgB;AAC/B,UAAU,mDAAW;AACrB,SAAS,kDAAU;AACnB;AACA,qBAAqB,qDAAa;AAClC;;;;;;;;;;;;;;;;AC1FA,6BAAe,uCAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,IAAI;AACJ;;;;;;;;;;;;;;;;ACbA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,sCAAW;AAC1B;AACA;AACA,yBAAyB;AACzB,kBAAkB,kCAAkC;AACpD;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7BA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRgD;AACgB;AAChB;AACW;AACF;AACL;AACF;AACR;AACY;AACO;AACJ;AACE;AACQ;AACF;AACI;;;;;;;;;;;;;;;;ACdrE;AACA;AACA;AACA,sBAAsB;;AAEtB,6BAAe,sCAAW;AAC1B;AACA;AACA;;;;;;;;;;;;;;;;;;;ACRoC;AACR;;AAE5B,6BAAe,oCAAS;AACxB,oCAAoC,mDAAG;AACvC;;AAEO;AACP,4BAA4B,kDAAO;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAkB;AAChC,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC1HyC;AACa;AAC1B;AACqB;;AAEjD;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA,gBAAgB,sDAAY;;AAE5B;AACA,mBAAmB,mDAAG;AACtB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,wCAAwC,sDAAY;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,uDAAQ;AAChD;;AAEA;AACA;AACA;;AAEA;AACA,uEAAuE,wDAAQ;AAC/E;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,OAAO;AAChC,UAAU,gEAAkB;AAC5B,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AChFgC;AACJ;AACmB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO;AACP,uBAAuB,qDAAK;;AAE5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,wCAAwC,IAAI,8DAAiB;;AAEjF;AACA,cAAc,OAAO;;AAErB;AACA;;AAEA,6BAAe,oCAAS;AACxB,8BAA8B,mDAAG;AACjC;AACA;;;;;;;;;;;;;;;;;;ACvH2C;AACC;;AAE5C,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA,QAAQ,4DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;ACnDwC;AACiB;;AAEzD,eAAe,UAAU;AACzB,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC,OAAO;AACzC,0CAA0C,qDAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,oCAAoC,MAAM,aAAa,8DAAa;AACzG;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC,uDAAQ;AAC5C;;AAEA;AACA,0CAA0C,uDAAQ;AAClD;;AAEA;AACA,sCAAsC,uDAAQ;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA,sCAAsC,KAAK;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChJ0C;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,iBAAiB;AACjB,cAAc;AACd;;AAEA,mCAAmC,qDAAI;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;AC5OA,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEA,8BAA8B,OAAO;AACrC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7CA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACXmC;AACE;AACI;AACa;;AAEtD,6BAAe,sCAAW;AAC1B,aAAa,oDAAQ;AACrB;AACA;AACA;AACA;AACA,qBAAqB,sDAAY;AACjC,mBAAmB,sDAAY;AAC/B,qBAAqB,sDAAY;AACjC,sBAAsB,sDAAY;AAClC,oBAAoB,sDAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,uDAAQ;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA,4EAA4E,wDAAQ;AACpF;;AAEA;AACA;AACA;;AAEA;AACA,0EAA0E,wDAAQ;AAClF;;AAEA;AACA,4EAA4E,wDAAQ;AACpF;;AAEA;AACA,6EAA6E,wDAAQ;AACrF;;AAEA;AACA,2EAA2E,wDAAQ;AACnF;;AAEA;AACA;;;;;;;;;;;;;;;;;;;AC7FoC;AACE;AACW;;AAEjD,iEAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,OAAO;AACzD,sBAAsB,oDAAW;AACjC,aAAa,qDAAY;AACzB;AACA;AACA,MAAM;AACN,gCAAgC,2DAAa;AAC7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,EAAE,6CAAG,CAAC,EAAC;;;;;;;;;;;;;;;;ACnCR,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACX6B;AACE;;AAE/B,6BAAe,oCAAS;AACxB,sBAAsB,iDAAK,GAAG,gDAAI;AAClC;;;;;;;;;;;;;;;;;;;;ACLoC;AACE;;AAE/B;;AAEA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;;AAEA;AACA,qBAAqB,8DAA8D;AACnF,kBAAkB,oDAAW;AAC7B,SAAS,qDAAY;AACrB;AACA;;AAEA;AACA;;AAEA,iEAAe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,MAAM,EAAC;;;;;;;;;;;;;;;;;;;ACjEuB;AAC6B;;AAE5D,6BAAe,oCAAS;AACxB,UAAU,8DAAa,MAAM,uDAAW;AACxC;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,cAAc,QAAQ,YAAY,qDAAK;AACvC,SAAS,QAAQ;;AAEjB;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;ACrBO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AClBiC;;AAEjC,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gDAAK;AAChB;AACA;;;;;;;;;;;;;;;;;;;ACZqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kFAAkF,wDAAQ;AAC1F;;AAEO;AACP;AACA,0CAA0C,wDAAQ;AAClD;AACA;;AAEe;AACf;AACA,4BAA4B,wDAAQ;AACpC;;;;;;;;;;;;;;;;AC5BA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;;;;ACAyB;AACf;;AAEtC;AACA;AACA;;AAEA;AACA,2BAA2B,oDAAc,mBAAmB,oDAAc;AAC1E,cAAc,qDAAK;AACnB,cAAc,qDAAK;AACnB,oBAAoB,qDAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;;AAEA,iEAAe,UAAU,0CAAG,CAAC,EAAC;AACvB,8BAA8B,iDAAK;;;;;;;;;;;;;;;;AC5B1C,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;ACb+B;;AAE/B,6BAAe,oCAAS;AACxB,YAAY;AACZ,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,qDAAK;AAClB,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACtB4C;;AAE7B;AACf,gEAAgE,iDAAK;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACVyC;AACV;AACY;AACD;;AAE1C,iEAAe;AACf,cAAc,gDAAK;;AAEnB;AACA,2BAA2B,6CAAQ,mBAAmB,6CAAQ;AAC9D;AACA;AACA,kBAAkB,qDAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC,IAAI,EAAC;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,cAAc,6CAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,yBAAyB,iDAAK;AAC9B,+BAA+B,uDAAW;;;;;;;;;;;;;;;;ACtDjD,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJiC;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA,yCAAyC;AACzC,4BAA4B;AAC5B;AACA,MAAM,OAAO;AACb;AACA,cAAc,SAAS,sDAAM,SAAS;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA,SAAS;AACT;;;;;;;;;;;;;;;;;AC/DA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzBkC;AACY;;AAE9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,sDAAM,SAAS,GAAG,aAAa,sDAAM,SAAS;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,gCAAgC;AACjE,cAAc,sDAAsD,sDAAM,OAAO;AACjF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,cAAc,qDAAqD,sDAAM,OAAO;AAChF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,sDAAM,SAAS,GAAG,aAAa,sDAAM,SAAS;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,mDAAmD,+CAAQ;AAC3D,mDAAmD,+CAAQ;;;;;;;;;;;;;;;;;;AC9Df;;AAEnD;;AAEA;AACO;AACP;AACA,wBAAwB,mDAAQ,GAAG,yDAAS;AAC5C;;AAEO;AACP,4BAA4B,mDAAQ;AACpC;AACA;AACA,iEAAiE,mDAAQ;AACzE;AACA,SAAS,yDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;ACjB+B;AACJ;AACa;AACX;AACI;AACA;AACA;AACI;AACuB;;AAE5D,6BAAe,oCAAS;AACxB;AACA,wCAAwC,wDAAQ;AAChD,0BAA0B,kDAAM;AAChC,+BAA+B,oDAAK,eAAe,+CAAG,IAAI,kDAAM;AAChE,qBAAqB,gDAAK,GAAG,+CAAG;AAChC,4BAA4B,gDAAI;AAChC,QAAQ,8DAAa,MAAM,uDAAW;AACtC,2BAA2B,mDAAY;AACvC,0FAA0F,kDAAM;AAChG,QAAQ,kDAAM;AACd;;;;;;;;;;;;;;;;ACrBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iEAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC,mBAAmB,EAAC;;;;;;;;;;;;;;;;;ACtErB,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;;AAEzC;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD,IAAI;AACJ;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACnFA,6BAAe,oCAAS;AACxB,mDAAmD;;AAEnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1CA,6BAAe,sCAAW;AAC1B;AACA;AACA,+CAA+C;AAC/C,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJ6B;;AAE7B,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,gDAAI;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACrEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNyD;AACrB;AACF;AACI;AACJ;AACmC;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A;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,oDAAM;AAClB;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,sDAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wFAAwF,sDAAiB;AACzG;;AAEA;AACA,sDAAsD,kDAAM;AAC5D;;AAEA;AACA;AACA;;AAEA;AACA,gDAAgD,sDAAgB;AAChE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HwE;AAC/B;AACE;AACL;AACL;AACI;AACC;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kEAAkE,0DAAS;AAC3E;AACA;;AAEA,sBAAsB,sDAAW;;AAEjC,2BAA2B,sDAAgB;;AAE3C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf,cAAc,qDAAS,eAAe,oDAAQ;;AAE9C;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,gDAAO;;AAErB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,qDAAS;;AAEvB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,+CAAM;;AAEpB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;ACvGsC;AACL;;AAElB;AACf;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,sDAAsD,kDAAM;AAC5D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iDAAiD,kDAAM;;AAEvD,SAAS,qDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBmB;;AAII;;AAIF;;AAIH;;AAIG;;AAKC;;AAKJ;;AAIG;;AAIE;;AAIA;;AAIC;;AAIL;;AAIG;;AAQG;;AAIQ;;AAQT;;AAIC;;;;;;;;;;;;;;;;;AC7ElB;AACP;AACA;AACA,gCAAgC;AAChC,+CAA+C;AAC/C;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACzB8C;AACG;AACb;AACK;;AAElC;AACP;;AAEA;AACA;AACA,WAAW,oDAAK;AAChB;;AAEA;AACA;AACA,WAAW,0DAAU;AACrB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAa;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEe;AACf,cAAc,0DAAU;;AAExB;AACA,WAAW,oDAAI;AACf;;AAEA,EAAE,+CAAS;;AAEX;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrE+B;AACmB;AACrB;AACqB;AACd;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,QAAQ;AAChC,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ,YAAY,QAAQ;AAC5B,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oDAAK;AACrC,MAAM;AACN,UAAU,oDAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC,qDAAe;AACrD,kBAAkB,iDAAM;AACxB;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,oDAAI;AACtB;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEe;AACf,wBAAwB,2DAAW;AACnC,qBAAqB,oDAAI;AACzB,EAAE,+CAAS;AACX;AACA;;;;;;;;;;;;;;;;AC3Ie;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjBe;AACf;AACA;;;;;;;;;;;;;;;;;;;ACFmC;AACC;;AAE7B;;AAEQ;AACf,kBAAkB,+CAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,+CAAS;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,EAAE,+CAAS;;AAEX;AACA;;;;;;;;;;;;;;;;;;;;;AC7CsC;AACsB;AACxB;;AAEpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP,wBAAwB,oDAAQ,EAAE,oDAAQ;AAC1C;;AAEA;AACA,sCAAsC,oDAAQ,EAAE,oDAAQ;AACxD;AACA;AACA;;AAEA;AACA;AACA;;AAEA,SAAS,qDAAS;AAClB;;AAEe;AACf,qBAAqB,2DAAW;;AAEhC;AACA,WAAW,oDAAI;AACf;;AAEA,EAAE,+CAAS;;AAEX;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;;;ACjDwE;AACpC;;AAErB;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,wDAAS;AACjD;AACA;;AAEA;AACA,wDAAwD,oDAAM;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,gDAAS;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,+CAAS;AAClB;;;;;;;;;;;;;;;;;;;ACxDgC;AACM;AACF;;AAErB;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,oDAAM;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,+CAAS,OAAO,qDAAS;AAClC;;;;;;;;;;;;;;;;;;;;ACvDyC;AACL;AACE;AACL;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf,gBAAgB,0DAAU;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oEAAoE,kDAAM;AAC1E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,+CAAS;;AAEX,SAAS,qDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9D6D;AACpB;AACE;AACL;AACL;AACK;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,sDAAW;;AAEjC,2BAA2B,sDAAgB;;AAE3C;AACA;AACA;;AAEA;AACA;AA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AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,iBAAiB,yDAAS;;AAE1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACxDA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1EA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;ACZqC;AACA;AACC;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA,MAAM;AACN,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,SAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;;AAEA,2CAA2C,wDAAQ;;AAEnD,uGAAuG,OA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I;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;;;;;;;;;;;;;;;ACdA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;;ACNqC;;AAErC,6BAAe,oCAAS;AACxB;;AAEA,+JAA+J,OAAO;AACtK,yHAAyH,OAAO;AAChI;AACA;AACA;AACA;AACA;;AAEA,SAAS,QAAQ;AACjB;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;AClBA,6BAAe,sCAAW;;AAE1B,4DAA4D,OAAO;AACnE,yDAAyD,OAAO;AAChE;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACVA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA,8CAA8C,OAAO;AACrD,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;;;;;;;;;;;;;;;AClEA,6BAAe,sCAAW;;AAE1B,6DAA6D,QAAQ;AACrE,6EAA6E,SAAS;AACtF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;;;ACPqC;AACC;;AAEtC,6BAAe,oCAAS;AACxB,6CAA6C,wDAAQ;;AAErD,sFAAsF,OAAO;AAC7F,gHAAgH,OAAO;AACvH;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;;;;AChBqC;AACL;AACY;;AAE5C;AACA;AACA,WAAW,qDAAK;AAChB;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,gBAAgB,2DAAW;;AAE3B,0FAA0F,OAAO;AACjG,+DAA+D,OAAO;AACtE;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;;ACxB2C;;AAE3C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,wDAAwD,yDAAY;AACpE;;;;;;;;;;;;;;;;;ACjB2C;;AAE3C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,6DAA6D,yDAAY;AACzE;;;;;;;;;;;;;;;;ACjBA,6BAAe,sCAAW;AAC1B;AACA,mCAAmC;AACnC;AACA;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;;AAEA,uFAAuF,OAAO;AAC9F,yGAAyG,OAAO;AAChH;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACvBA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;ACFuC;;AAEvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,SAAS,sDAAW;AACpB;;;;;;;;;;;;;;;;AClCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACxBA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA,2BAA2B;AAC3B;;;;;;;;;;;;;;;;;;;;;ACJuC;;AAEvC;AACO;AACA;AACA;AACA;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAEc;AACf,WAAW,sDAAY;AACvB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACfiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,8CAAS,cAAc,kDAAS;AACxE,iBAAiB,2CAAM;AACvB;AACA;AACA;AACA,UAAU;AACV;AACA,wCAAwC,+CAAU,cAAc,mDAAU;AAC1E,iBAAiB,4CAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA,YAAY,4BAA4B;AACxC;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,4CAAO,OAAO,iDAAQ;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,+CAAU,OAAO,iDAAQ;AACtC;;AAEA;AACA;AACA,mCAAmC,qDAAY,MAAM,iDAAY;AACjE;;AAEA;AACA;AACA,aAAa,iDAAY,OAAO,iDAAQ,WAAW,iDAAQ;AAC3D;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,+CAAU,OAAO,iDAAQ;AACtC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,qDAAY,MAAM,iDAAY;AAC9D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,2CAAM,OAAO,gDAAO;AACrC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,8CAAS,OAAO,gDAAO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A,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,2DAA2D,0DAAY;AACvE;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEO;;;;;;;;;;;;;;;;;AChD0B;;AAEjC,6BAAe,oCAAS;AACxB,cAAc,4CAAK;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sIAAsI;;AAE/H;AACP;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP,SAAS;AACT,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC7GiD;AACE;;AAEnD;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,8DAAS;AACrD,mBAAmB,4DAAU;AAC7B;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpB8B;AAC8B;AACd;AACM;;;;;;;;;;;;;;;;;ACHa;;AAEjE,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,mDAAmD,eAAe;AAClE,8BAA8B,6DAAQ,qBAAqB,2DAAM;AACjE,qBAAqB,0DAAK;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACvBuC;AACU;AACE;;AAEnD,oDAAS,uBAAuB,qDAAmB;AACnD,oDAAS,wBAAwB,sDAAoB;;;;;;;;;;;;;;;;;ACLb;;AAExC,6BAAe,oCAAS;AACxB;AACA,IAAI,yDAAS;AACb,GAAG;AACH;;;;;;;;;;;;;;;;;;;;ACNyD;AACR;AACV;AACV;;AAE7B;AACA;AACA;AACA;AACA,QAAQ,+CAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;AAEA,sBAAsB,4DAAU;AAChC;AACA,IAAI;AACJ,SAAS,2DAAK,oCAAoC,6CAAG;AACrD;;AAEA,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA,QAAQ,mEAAQ;AAChB;AACA;AACA;;AAEA,aAAa,4DAAU;AACvB;;;;;;;;;;;;;;;;;;;;ACzC+E;AACxC;AACD;AACK;;AAE3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,iBAAiB,wDAAS,uCAAuC,mEAAoB,GAAG,uDAAW;AACnG;AACA,sEAAsE,qDAAU;AAChF;AACA;AACA;;;;;;;;;;;;;;;;;AC7EuC;;AAEvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,iBAAiB,wDAAS;AAC1B;AACA;;;;;;;;;;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;AACA;AACA,kBAAkB,wDAAK;AACvB,oDAAoD,wDAAK;AACzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB;AACA;AACA,6EAA6E,wDAAK;AAClF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,yCAAyC,mEAAoB,GAAG,uDAAW;AAC3E;AACA;AACA;AACA;AACA,+CAA+C,qDAAU;AACzD;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC/EA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACvBsC;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,qBAAqB,qDAAU;AAC/B;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACvB6C;AACD;;AAE5C,6BAAe,sCAAW;AAC1B;AACA;AACA,YAAY,gDAAK;;AAEjB,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA,sBAAsB,iDAAG;AACzB,QAAQ,wDAAQ;AAChB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,aAAa,iDAAU;AACvB;;;;;;;;;;;;;;;;;;ACvBuC;;AAEvC;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB,4BAA4B,OAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;;AAEA;AACA,gBAAgB,iDAAG;AACnB,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA,mBAAmB,iDAAG;AACtB,2CAA2C;AAC3C,GAAG;;AAEH;AACA,WAAW,iDAAG;AACd;AACA;;;;;;;;;;;;;;;;AChFA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;ACAb;AACf;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,aAAa,oDAAoD;AACjE,gBAAgB,uDAAuD;AACvE,QAAQ;AACR,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;ACb0C;AACoE;;;;;;;;;;;;;;;;;ACDvG;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;;ACPO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;;AAEP;;AAEe;AACf;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AClDqC;AACW;AACD;AACF;AACL;AACH;AACF;AACgB;AACC;;AAEpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,mDAAQ;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAe;AACnC,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mDAAQ;AAC/B;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,+CAA+C,oDAAS;AACxD;;AAEA;AACA;AACA,oEAAoE,oDAAS;AAC7E;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,gDAAgD;AACvF,oDAAoD,8CAA8C;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,mBAAmB,4BAA4B,QAAQ,oDAAS;AAChE;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,cAAc,wDAAM;AACpB;AACA;AACA;AACA,YAAY,iDAAS;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAO;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM,wDAAS;AACf;AACA;;AAEA,IAAI,uDAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,wDAAM;AAClB,YAAY,wDAAO;AACnB;AACA;;AAEA,IAAI,mDAAW;AACf,IAAI,0DAAa;AACjB;AACA,IAAI,wDAAS;AACb;;AAEA;AACA,MAAM,uDAAO;AACb;AACA;AACA;AACA;AACA;AACA,sEAAsE,wDAAO;AAC7E;;AAEA;AACA;AACA,MAAM,gDAAU;AAChB,MAAM,uDAAO;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,wDAAO;AACpB;AACA;AACA;;AAEA,IAAI,uDAAO;AACX,sBAAsB,wDAAM;AAC5B,SAAS,wDAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,0DAAa;AACjB,gBAAgB,OAAO;AACvB,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iFAAiF,uBAAuB;AACxG,MAAM,wDAAS;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,uDAAO;AACX,gBAAgB,OAAO;AACvB,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,0DAAa;AACjB;AACA,0CAA0C,qBAAqB;AAC/D,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAO;AACnB;AACA,kBAAkB,wDAAM;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA,0EAA0E,wDAAQ;AAClF;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;AC9bO;AACP;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UC5DA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WC5BA;WACA;WACA;;;;;WCFA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;;;;;WCJA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WClBA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;;;;WCrBA;;;;;;;;;;;;;;;;;;;;;ACA4B;AAEW;AAEA;AACM;AACE;AACJ;AACS;AACI;AACP;AACjD;;AAGA,SAASssB,IAAIA,CAAA,EAAS;EACpB;EACA,IAAIkN,aAAa,GAAsBv7B,QAAQ,CAACgG,cAAc,CAAC,eAAe,CAAC,CAAErU,KAAK;EACtF,IAAI6pC,WAAW,GAAsBx7B,QAAQ,CAACgG,cAAc,CAAC,oBAAoB,CAAC,CAAErU,KAAK;EACzF,IAAI8pC,MAAM,GAAsBz7B,QAAQ,CAACgG,cAAc,CAAC,QAAQ,CAAC,CAAErU,KAAK;EACxE,IAAI4kC,WAAW,GAAC,EAAE;EAElB,IAAGgF,aAAa,EAChBhF,WAAW,GAAC12B,IAAI,CAAC0V,KAAK,CAACgmB,aAAa,CAAC;EAErC,IAAIG,SAAS,GAAG,IAAIhG,kDAAW,CAAC,CAAC;EACjCgG,SAAS,CAACz/B,EAAE,GAAG,MAAM;EACrB,IAAGw/B,MAAM,IAAE,MAAM,EAAC;IAChB,IAAIE,aAAa,GAAG,IAAIrF,0DAAa,CAACC,WAAW,CAAC;IAClD,IAAIqF,WAAW,GAAG,IAAI7P,sDAAW,CAAC,CAAC;IACnC,IAAI8P,cAAc,GAAG,IAAI72B,4DAAc,CAAC02B,SAAS,CAAC;IAElDA,SAAS,CAAC9F,aAAa,CAAC+F,aAAa,CAAC;IACtCD,SAAS,CAAC9F,aAAa,CAACgG,WAAW,CAAC;IACpCF,SAAS,CAAC9F,aAAa,CAACiG,cAAc,CAAC;EACzC,CAAC,MACG;IACF,IAAI7rB,MAAM,GAAG,IAAI7P,wDAAY,CAAC,CAAC;IAC/B,IAAI27B,WAAW,GAAG,IAAIviC,iEAAiB,CAACiiC,WAAW,CAAC;IACpD,IAAIO,OAAO,GAAG,IAAIpiB,+DAAa,CAAC3J,MAAM,EAAE,SAAS,EAAE,SAAS,EAAEwrB,WAAW,EAACM,WAAW,CAAC;IACtF,IAAID,cAAc,GAAG,IAAI72B,4DAAc,CAAC02B,SAAS,CAAC;IAElDA,SAAS,CAAC9F,aAAa,CAACmG,OAAO,CAAC;IAChCL,SAAS,CAAC9F,aAAa,CAAC5lB,MAAM,CAAC;IAC/B0rB,SAAS,CAAC9F,aAAa,CAACkG,WAAW,CAAC;IACpCJ,SAAS,CAAC9F,aAAa,CAACiG,cAAc,CAAC;IACvCE,OAAO,CAACzrB,IAAI,CAAC,CAAC;EAChB;EAEAlX,mDAAM,CAAC4iC,MAAM,CAACN,SAAS,EAAE17B,QAAQ,CAACJ,IAAI,CAAC;EACvC1C,MAAM,CAAC++B,QAAQ,GAAG,YAAM;IAAEP,SAAS,CAACQ,MAAM,CAAC,CAAC;EAAC,CAAC;AAChD;AAEAh/B,MAAM,CAACi/B,MAAM,GAAG9N,IAAI,C","sources":["webpack://@noworkflow/nowvis/../../node_modules/@lumino/algorithm/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/collections/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/commands/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/coreutils/dist/index.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/disposable/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/domutils/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/dragdrop/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/keyboard/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/messaging/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/properties/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/signaling/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/virtualdom/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/api.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/buffer.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/node.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/reporter.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/constants/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/constants/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/./src/annotation_widget.ts","webpack://@noworkflow/nowvis/./src/config_widget.ts","webpack://@noworkflow/nowvis/./src/database_widget.ts","webpack://@noworkflow/nowvis/./src/graph/base_activation_graph.ts","webpack://@noworkflow/nowvis/./src/graph/diff_graph.ts","webpack://@noworkflow/nowvis/./src/graph/function_diff.ts","webpack://@noworkflow/nowvis/./src/graph/history_graph.ts","webpack://@noworkflow/nowvis/./src/graph/trial_graph.ts","webpack://@noworkflow/nowvis/./src/group_widget.ts","webpack://@noworkflow/nowvis/./src/info/diff_info.ts","webpack://@noworkflow/nowvis/./src/info/environment_info.ts","webpack://@noworkflow/nowvis/./src/info/file_accesses_info.ts","webpack://@noworkflow/nowvis/./src/info/modules_info.ts","webpack://@noworkflow/nowvis/./src/info/trial_info.ts","webpack://@noworkflow/nowvis/./src/nowpanel.ts","webpack://@noworkflow/nowvis/./src/project_widget.ts","webpack://@noworkflow/nowvis/./src/query_widget.ts","webpack://@noworkflow/nowvis/../../node_modules/base64-js/index.js","webpack://@noworkflow/nowvis/../../node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/brorand/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/aes.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/authCipher.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/decrypter.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/encrypter.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/ghash.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/incr32.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cbc.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb1.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb8.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ctr.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ecb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ofb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/streamCipher.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-cipher/browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-des/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-des/modes.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-rsa/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/algos.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/sign.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/verify.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/isarray/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/buffer-xor/index.js","webpack://@noworkflow/nowvis/../../node_modules/buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/cipher-base/index.js","webpack://@noworkflow/nowvis/../../node_modules/core-util-is/lib/util.js","webpack://@noworkflow/nowvis/../../node_modules/create-ecdh/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/create-hash/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-hash/md5.js","webpack://@noworkflow/nowvis/../../node_modules/create-hmac/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-hmac/legacy.js","webpack://@noworkflow/nowvis/../../node_modules/crypto-browserify/index.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/cbc.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/cipher.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/des.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/ede.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/utils.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/browser.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/lib/dh.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/lib/generatePrime.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/base.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/mont.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/short.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curves.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/key.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/signature.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/utils.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/events/events.js","webpack://@noworkflow/nowvis/../../node_modules/evp_bytestokey/index.js","webpack://@noworkflow/nowvis/../../node_modules/file-saver/dist/FileSaver.min.js","webpack://@noworkflow/nowvis/../../node_modules/hash-base/index.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/common.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/hmac.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/ripemd.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/1.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/224.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/256.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/384.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/512.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/common.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/utils.js","webpack://@noworkflow/nowvis/../../node_modules/hmac-drbg/lib/hmac-drbg.js","webpack://@noworkflow/nowvis/../../node_modules/ieee754/index.js","webpack://@noworkflow/nowvis/../../node_modules/inherits/inherits_browser.js","webpack://@noworkflow/nowvis/../../node_modules/md5.js/index.js","webpack://@noworkflow/nowvis/../../node_modules/miller-rabin/lib/mr.js","webpack://@noworkflow/nowvis/../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/minimalistic-assert/index.js","webpack://@noworkflow/nowvis/../../node_modules/minimalistic-crypto-utils/lib/utils.js","webpack://@noworkflow/nowvis/../../node_modules/os/index.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/asn1.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/certificate.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/fixProc.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/index.js","webpack://@noworkflow/nowvis/../../node_modules/path/path.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/browser.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/async.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/default-encoding.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/precondition.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/sync-browser.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/to-buffer.js","webpack://@noworkflow/nowvis/../../node_modules/process-nextick-args/index.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/browser.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/mgf.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/privateDecrypt.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/publicEncrypt.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/withPublic.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/xor.js","webpack://@noworkflow/nowvis/../../node_modules/randombytes/browser.js","webpack://@noworkflow/nowvis/../../node_modules/randomfill/browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/errors-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_duplex.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_readable.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_transform.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_writable.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/state.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readline-sync/lib/readline-sync.js","webpack://@noworkflow/nowvis/../../node_modules/ripemd160/index.js","webpack://@noworkflow/nowvis/../../node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/hash.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/index.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha1.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha224.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha256.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha384.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha512.js","webpack://@noworkflow/nowvis/../../node_modules/stream-browserify/index.js","webpack://@noworkflow/nowvis/../../node_modules/string_decoder/lib/string_decoder.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/browserify.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/control-icons.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/shadow-viewport.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/svg-utilities.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/uniwheel.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/utilities.js","webpack://@noworkflow/nowvis/../../node_modules/tau-prolog/modules/core.js","webpack://@noworkflow/nowvis/../../node_modules/util-deprecate/browser.js","webpack://@noworkflow/nowvis/../../node_modules/util/node_modules/inherits/inherits_browser.js","webpack://@noworkflow/nowvis/../../node_modules/util/support/isBufferBrowser.js","webpack://@noworkflow/nowvis/../../node_modules/util/util.js","webpack://@noworkflow/nowvis/../../node_modules/vm-browserify/index.js","webpack://@noworkflow/nowvis/../history/lib/config.js","webpack://@noworkflow/nowvis/../history/lib/graph.js","webpack://@noworkflow/nowvis/../history/lib/index.js","webpack://@noworkflow/nowvis/../history/lib/structures.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/accordionpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/commandpalette.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/datagrid.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/dockpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/menu.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/menubar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/scrollbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/tabbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/dragdrop/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/accordionpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/commandpalette.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/dockpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/menu.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/menubar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/scrollbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/splitpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/tabbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/tabpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/widget.css","webpack://@noworkflow/nowvis/../history/style/index.css","webpack://@noworkflow/nowvis/./style/bootstrap.min.css","webpack://@noworkflow/nowvis/./style/history.css","webpack://@noworkflow/nowvis/./style/index.css","webpack://@noworkflow/nowvis/./style/panel.css","webpack://@noworkflow/nowvis/./style/trial.css","webpack://@noworkflow/nowvis/../trial/style/index.css","webpack://@noworkflow/nowvis/../utils/style/shared.css","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/api.js","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/getUrl.js","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://@noworkflow/nowvis/./style/bootstrap.min.css?f8e0","webpack://@noworkflow/nowvis/./style/index.css?b7f0","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://@noworkflow/nowvis/../trial/lib/config.js","webpack://@noworkflow/nowvis/../trial/lib/graph.js","webpack://@noworkflow/nowvis/../trial/lib/index.js","webpack://@noworkflow/nowvis/../trial/lib/structures.js","webpack://@noworkflow/nowvis/../utils/lib/d3svg.js","webpack://@noworkflow/nowvis/../utils/lib/index.js","webpack://@noworkflow/nowvis/../utils/lib/random.js","webpack://@noworkflow/nowvis/../utils/lib/text.js","webpack://@noworkflow/nowvis/../utils/lib/web.js","webpack://@noworkflow/nowvis/../../../../../../../../node_modules/ace-builds/src-noconflict/ace.js","webpack://@noworkflow/nowvis/../../../../../../../../node_modules/ace-builds/src-noconflict/ext-language_tools.js","webpack://@noworkflow/nowvis/../../../../../../../../node_modules/ace-builds/src-noconflict/mode-sql.js","webpack://@noworkflow/nowvis/../../../../../../../../node_modules/ace-builds/src-noconflict/theme-textmate.js","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/asn1.js/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/brorand|crypto","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams|util","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/browserify-sign/node_modules/readable-stream/lib|util","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/create-ecdh/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/diffie-hellman/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/elliptic/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/miller-rabin/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/public-encrypt/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/readable-stream/lib/internal/streams|util","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/readable-stream/lib|util","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/readline-sync/lib|child_process","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/readline-sync/lib|fs","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/tau-prolog/modules|fs","webpack://@noworkflow/nowvis/../../node_modules/@viz-js/viz/lib/viz-standalone.mjs","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/ascending.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/bisect.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/bisector.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/descending.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/greatest.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/max.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/maxIndex.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/min.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/minIndex.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/permute.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/quantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/quickselect.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/range.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/ticks.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/color.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/define.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/lab.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/math.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dispatch/src/dispatch.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/drag.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/event.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/nodrag.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/noevent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/csv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/dsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/tsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-ease/src/cubic.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/blob.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/buffer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/dsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/image.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/json.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/xml.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/center.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/collide.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/jiggle.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/lcg.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/link.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/manyBody.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/simulation.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/defaultLocale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/exponent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatDecimal.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatGroup.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatNumerals.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatPrefixAuto.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatRounded.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatSpecifier.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatTrim.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatTypes.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/identity.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/locale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionFixed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionPrefix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionRound.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/accessors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/cluster.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/count.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/each.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/find.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/links.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/path.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/lcg.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/enclose.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/siblings.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/partition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/stratify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/tree.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/binary.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/dice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/round.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/slice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/sliceDice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/squarify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/basis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/basisClosed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/color.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/date.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/numberArray.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/object.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/piecewise.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/rgb.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/round.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/string.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/decompose.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/parse.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/value.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/zoom.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/add.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/cover.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/data.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/extent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/find.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/quad.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/quadtree.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/root.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/size.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/visit.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/visitAfter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/x.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/y.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/observable10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/colors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/ramp.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/band.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/continuous.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/diverging.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/identity.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/init.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/linear.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/log.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/nice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/ordinal.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/pow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/quantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/quantize.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/radial.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/sequential.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/sequentialQuantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/symlog.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/threshold.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/tickFormat.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/time.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/utcTime.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/create.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/creator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/local.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/matcher.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/namespace.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/namespaces.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/pointer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/pointers.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/append.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/attr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/call.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/classed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/clone.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/data.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/datum.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/dispatch.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/each.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/empty.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/enter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/exit.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/filter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/html.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/insert.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/iterator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/join.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/lower.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/merge.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/node.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/nodes.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/on.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/order.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/property.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/raise.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectChild.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectChildren.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/size.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/sparse.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/style.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selector.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selectorAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/sourceEvent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/window.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time-format/src/defaultLocale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time-format/src/locale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/day.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/duration.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/hour.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/interval.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/millisecond.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/minute.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/month.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/second.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/ticks.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/week.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/year.js","webpack://@noworkflow/nowvis/../../node_modules/d3-timer/src/timeout.js","webpack://@noworkflow/nowvis/../../node_modules/d3-timer/src/timer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/active.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/interrupt.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/interrupt.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/transition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/attr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/attrTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/delay.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/duration.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/ease.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/easeVarying.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/end.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/filter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/interpolate.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/merge.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/on.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/schedule.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/selection.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/style.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/styleTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/textTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/transition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/tween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/event.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/noevent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/transform.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/zoom.js","webpack://@noworkflow/nowvis/../../node_modules/internmap/src/index.js","webpack://@noworkflow/nowvis/webpack/bootstrap","webpack://@noworkflow/nowvis/webpack/runtime/amd define","webpack://@noworkflow/nowvis/webpack/runtime/compat get default export","webpack://@noworkflow/nowvis/webpack/runtime/define property getters","webpack://@noworkflow/nowvis/webpack/runtime/global","webpack://@noworkflow/nowvis/webpack/runtime/hasOwnProperty shorthand","webpack://@noworkflow/nowvis/webpack/runtime/make namespace object","webpack://@noworkflow/nowvis/webpack/runtime/node module decorator","webpack://@noworkflow/nowvis/webpack/runtime/publicPath","webpack://@noworkflow/nowvis/webpack/runtime/jsonp chunk loading","webpack://@noworkflow/nowvis/webpack/runtime/nonce","webpack://@noworkflow/nowvis/./src/index.ts"],"sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for array-specific algorithms.\n */\nvar ArrayExt;\n(function (ArrayExt) {\n /**\n * Find the index of the first occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.firstIndexOf(data, 'red'); // -1\n * ArrayExt.firstIndexOf(data, 'one'); // 0\n * ArrayExt.firstIndexOf(data, 'one', 1); // 4\n * ArrayExt.firstIndexOf(data, 'two', 2); // -1\n * ArrayExt.firstIndexOf(data, 'two', 2, 1); // 1\n * ```\n */\n function firstIndexOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.firstIndexOf = firstIndexOf;\n /**\n * Find the index of the last occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.lastIndexOf(data, 'red'); // -1\n * ArrayExt.lastIndexOf(data, 'one'); // 4\n * ArrayExt.lastIndexOf(data, 'one', 1); // 0\n * ArrayExt.lastIndexOf(data, 'two', 0); // -1\n * ArrayExt.lastIndexOf(data, 'two', 0, 1); // 1\n * ```\n */\n function lastIndexOf(array, value, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (start < stop) {\n span = start + 1 + (n - stop);\n }\n else {\n span = start - stop + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start - i + n) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.lastIndexOf = lastIndexOf;\n /**\n * Find the index of the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstIndex(data, isEven); // 1\n * ArrayExt.findFirstIndex(data, isEven, 4); // 5\n * ArrayExt.findFirstIndex(data, isEven, 6); // -1\n * ArrayExt.findFirstIndex(data, isEven, 6, 5); // 1\n * ```\n */\n function findFirstIndex(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findFirstIndex = findFirstIndex;\n /**\n * Find the index of the last value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastIndex(data, isEven); // 5\n * ArrayExt.findLastIndex(data, isEven, 4); // 3\n * ArrayExt.findLastIndex(data, isEven, 0); // -1\n * ArrayExt.findLastIndex(data, isEven, 0, 1); // 5\n * ```\n */\n function findLastIndex(array, fn, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let d;\n if (start < stop) {\n d = start + 1 + (n - stop);\n }\n else {\n d = start - stop + 1;\n }\n for (let i = 0; i < d; ++i) {\n let j = (start - i + n) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findLastIndex = findLastIndex;\n /**\n * Find the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstValue(data, isEven); // 2\n * ArrayExt.findFirstValue(data, isEven, 2); // 4\n * ArrayExt.findFirstValue(data, isEven, 6); // undefined\n * ArrayExt.findFirstValue(data, isEven, 6, 5); // 2\n * ```\n */\n function findFirstValue(array, fn, start = 0, stop = -1) {\n let index = findFirstIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findFirstValue = findFirstValue;\n /**\n * Find the last value which matches a predicate.\n *\n * @param object - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The last matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastValue(data, isEven); // 2\n * ArrayExt.findLastValue(data, isEven, 4); // 4\n * ArrayExt.findLastValue(data, isEven, 0); // undefined\n * ArrayExt.findLastValue(data, isEven, 0, 1); // 2\n * ```\n */\n function findLastValue(array, fn, start = -1, stop = 0) {\n let index = findLastIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findLastValue = findLastValue;\n /**\n * Find the index of the first element which compares `>=` to a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>=` to the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.lowerBound(data, 0, numberCmp); // 0\n * ArrayExt.lowerBound(data, 6, numberCmp); // 3\n * ArrayExt.lowerBound(data, 7, numberCmp); // 3\n * ArrayExt.lowerBound(data, -1, numberCmp); // 0\n * ArrayExt.lowerBound(data, 10, numberCmp); // 6\n * ```\n */\n function lowerBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) < 0) {\n begin = middle + 1;\n span -= half + 1;\n }\n else {\n span = half;\n }\n }\n return begin;\n }\n ArrayExt.lowerBound = lowerBound;\n /**\n * Find the index of the first element which compares `>` than a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>` than the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.upperBound(data, 0, numberCmp); // 1\n * ArrayExt.upperBound(data, 6, numberCmp); // 3\n * ArrayExt.upperBound(data, 7, numberCmp); // 5\n * ArrayExt.upperBound(data, -1, numberCmp); // 0\n * ArrayExt.upperBound(data, 10, numberCmp); // 6\n * ```\n */\n function upperBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) > 0) {\n span = half;\n }\n else {\n begin = middle + 1;\n span -= half + 1;\n }\n }\n return begin;\n }\n ArrayExt.upperBound = upperBound;\n /**\n * Test whether two arrays are shallowly equal.\n *\n * @param a - The first array-like object to compare.\n *\n * @param b - The second array-like object to compare.\n *\n * @param fn - The comparison function to apply to the elements. It\n * should return `true` if the elements are \"equal\". The default\n * compares elements using strict `===` equality.\n *\n * @returns Whether the two arrays are shallowly equal.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * Modifying the length of the arrays while comparing.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let d1 = [0, 3, 4, 7, 7, 9];\n * let d2 = [0, 3, 4, 7, 7, 9];\n * let d3 = [42];\n * ArrayExt.shallowEqual(d1, d2); // true\n * ArrayExt.shallowEqual(d2, d3); // false\n * ```\n */\n function shallowEqual(a, b, fn) {\n // Check for object identity first.\n if (a === b) {\n return true;\n }\n // Bail early if the lengths are different.\n if (a.length !== b.length) {\n return false;\n }\n // Compare each element for equality.\n for (let i = 0, n = a.length; i < n; ++i) {\n if (fn ? !fn(a[i], b[i]) : a[i] !== b[i]) {\n return false;\n }\n }\n // The array are shallowly equal.\n return true;\n }\n ArrayExt.shallowEqual = shallowEqual;\n /**\n * Create a slice of an array subject to an optional step.\n *\n * @param array - The array-like object of interest.\n *\n * @param options - The options for configuring the slice.\n *\n * @returns A new array with the specified values.\n *\n * @throws An exception if the slice `step` is `0`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start`, `stop`, or `step` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.slice(data); // [0, 3, 4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 2 }); // [4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 0, stop: 4 }); // [0, 3, 4, 7]\n * ArrayExt.slice(data, { step: 2 }); // [0, 4, 7]\n * ArrayExt.slice(data, { step: -1 }); // [9, 7, 7, 4, 3, 0]\n * ```\n */\n function slice(array, options = {}) {\n // Extract the options.\n let { start, stop, step } = options;\n // Set up the `step` value.\n if (step === undefined) {\n step = 1;\n }\n // Validate the step size.\n if (step === 0) {\n throw new Error('Slice `step` cannot be zero.');\n }\n // Look up the length of the array.\n let n = array.length;\n // Set up the `start` value.\n if (start === undefined) {\n start = step < 0 ? n - 1 : 0;\n }\n else if (start < 0) {\n start = Math.max(start + n, step < 0 ? -1 : 0);\n }\n else if (start >= n) {\n start = step < 0 ? n - 1 : n;\n }\n // Set up the `stop` value.\n if (stop === undefined) {\n stop = step < 0 ? -1 : n;\n }\n else if (stop < 0) {\n stop = Math.max(stop + n, step < 0 ? -1 : 0);\n }\n else if (stop >= n) {\n stop = step < 0 ? n - 1 : n;\n }\n // Compute the slice length.\n let length;\n if ((step < 0 && stop >= start) || (step > 0 && start >= stop)) {\n length = 0;\n }\n else if (step < 0) {\n length = Math.floor((stop - start + 1) / step + 1);\n }\n else {\n length = Math.floor((stop - start - 1) / step + 1);\n }\n // Compute the sliced result.\n let result = [];\n for (let i = 0; i < length; ++i) {\n result[i] = array[start + i * step];\n }\n // Return the result.\n return result;\n }\n ArrayExt.slice = slice;\n /**\n * Move an element in an array from one index to another.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param fromIndex - The index of the element to move. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param toIndex - The target index of the element. Negative\n * values are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `fromIndex` or `toIndex` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.move(data, 1, 2); // [0, 2, 1, 3, 4]\n * ArrayExt.move(data, 4, 2); // [0, 2, 4, 1, 3]\n * ```\n */\n function move(array, fromIndex, toIndex) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (fromIndex < 0) {\n fromIndex = Math.max(0, fromIndex + n);\n }\n else {\n fromIndex = Math.min(fromIndex, n - 1);\n }\n if (toIndex < 0) {\n toIndex = Math.max(0, toIndex + n);\n }\n else {\n toIndex = Math.min(toIndex, n - 1);\n }\n if (fromIndex === toIndex) {\n return;\n }\n let value = array[fromIndex];\n let d = fromIndex < toIndex ? 1 : -1;\n for (let i = fromIndex; i !== toIndex; i += d) {\n array[i] = array[i + d];\n }\n array[toIndex] = value;\n }\n ArrayExt.move = move;\n /**\n * Reverse an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param start - The index of the first element in the range to be\n * reversed, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * reversed, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` index which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.reverse(data, 1, 3); // [0, 3, 2, 1, 4]\n * ArrayExt.reverse(data, 3); // [0, 3, 2, 4, 1]\n * ArrayExt.reverse(data); // [1, 4, 2, 3, 0]\n * ```\n */\n function reverse(array, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n while (start < stop) {\n let a = array[start];\n let b = array[stop];\n array[start++] = b;\n array[stop--] = a;\n }\n }\n ArrayExt.reverse = reverse;\n /**\n * Rotate the elements of an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param delta - The amount of rotation to apply to the elements. A\n * positive value will rotate the elements to the left. A negative\n * value will rotate the elements to the right.\n *\n * @param start - The index of the first element in the range to be\n * rotated, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * rotated, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `delta`, `start`, or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.rotate(data, 2); // [2, 3, 4, 0, 1]\n * ArrayExt.rotate(data, -2); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 10); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 9); // [4, 0, 1, 2, 3]\n * ArrayExt.rotate(data, 2, 1, 3); // [4, 2, 0, 1, 3]\n * ```\n */\n function rotate(array, delta, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n if (start >= stop) {\n return;\n }\n let length = stop - start + 1;\n if (delta > 0) {\n delta = delta % length;\n }\n else if (delta < 0) {\n delta = ((delta % length) + length) % length;\n }\n if (delta === 0) {\n return;\n }\n let pivot = start + delta;\n reverse(array, start, pivot - 1);\n reverse(array, pivot, stop);\n reverse(array, start, stop);\n }\n ArrayExt.rotate = rotate;\n /**\n * Fill an array with a static value.\n *\n * @param array - The mutable array-like object to fill.\n *\n * @param value - The static value to use to fill the array.\n *\n * @param start - The index of the first element in the range to be\n * filled, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * filled, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Notes\n * If `stop < start` the fill will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four'];\n * ArrayExt.fill(data, 'r'); // ['r', 'r', 'r', 'r']\n * ArrayExt.fill(data, 'g', 1); // ['r', 'g', 'g', 'g']\n * ArrayExt.fill(data, 'b', 2, 3); // ['r', 'g', 'b', 'b']\n * ArrayExt.fill(data, 'z', 3, 1); // ['z', 'z', 'b', 'z']\n * ```\n */\n function fill(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n array[(start + i) % n] = value;\n }\n }\n ArrayExt.fill = fill;\n /**\n * Insert a value into an array at a specific index.\n *\n * @param array - The array of interest.\n *\n * @param index - The index at which to insert the value. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param value - The value to set at the specified index.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2];\n * ArrayExt.insert(data, 0, -1); // [-1, 0, 1, 2]\n * ArrayExt.insert(data, 2, 12); // [-1, 0, 12, 1, 2]\n * ArrayExt.insert(data, -1, 7); // [-1, 0, 12, 1, 7, 2]\n * ArrayExt.insert(data, 6, 19); // [-1, 0, 12, 1, 7, 2, 19]\n * ```\n */\n function insert(array, index, value) {\n let n = array.length;\n if (index < 0) {\n index = Math.max(0, index + n);\n }\n else {\n index = Math.min(index, n);\n }\n for (let i = n; i > index; --i) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n }\n ArrayExt.insert = insert;\n /**\n * Remove and return a value at a specific index in an array.\n *\n * @param array - The array of interest.\n *\n * @param index - The index of the value to remove. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The value at the specified index, or `undefined` if the\n * index is out of range.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeAt(data, 2); // 23\n * ArrayExt.removeAt(data, -2); // 12\n * ArrayExt.removeAt(data, 10); // undefined;\n * ```\n */\n function removeAt(array, index) {\n let n = array.length;\n if (index < 0) {\n index += n;\n }\n if (index < 0 || index >= n) {\n return undefined;\n }\n let value = array[index];\n for (let i = index + 1; i < n; ++i) {\n array[i - 1] = array[i];\n }\n array.length = n - 1;\n return value;\n }\n ArrayExt.removeAt = removeAt;\n /**\n * Remove the first occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstOf(data, 12); // 1\n * ArrayExt.removeFirstOf(data, 17); // -1\n * ArrayExt.removeFirstOf(data, 39, 3); // -1\n * ArrayExt.removeFirstOf(data, 39, 3, 2); // 2\n * ```\n */\n function removeFirstOf(array, value, start = 0, stop = -1) {\n let index = firstIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeFirstOf = removeFirstOf;\n /**\n * Remove the last occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastOf(data, 12); // 5\n * ArrayExt.removeLastOf(data, 17); // -1\n * ArrayExt.removeLastOf(data, 39, 2); // -1\n * ArrayExt.removeLastOf(data, 39, 2, 3); // 3\n * ```\n */\n function removeLastOf(array, value, start = -1, stop = 0) {\n let index = lastIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeLastOf = removeLastOf;\n /**\n * Remove all occurrences of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [14, 12, 23, 39, 14, 12, 19, 14];\n * ArrayExt.removeAllOf(data, 12); // 2\n * ArrayExt.removeAllOf(data, 17); // 0\n * ArrayExt.removeAllOf(data, 14, 1, 4); // 1\n * ```\n */\n function removeAllOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && array[i] === value) {\n count++;\n }\n else if (stop < start &&\n (i <= stop || i >= start) &&\n array[i] === value) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllOf = removeAllOf;\n /**\n * Remove the first occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstWhere(data, isEven); // { index: 0, value: 0 }\n * ArrayExt.removeFirstWhere(data, isEven, 2); // { index: 3, value: 14 }\n * ArrayExt.removeFirstWhere(data, isEven, 4); // { index: -1, value: undefined }\n * ```\n */\n function removeFirstWhere(array, fn, start = 0, stop = -1) {\n let value;\n let index = findFirstIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeFirstWhere = removeFirstWhere;\n /**\n * Remove the last occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastWhere(data, isEven); // { index: 5, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2); // { index: 1, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2, 1); // { index: -1, value: undefined }\n * ```\n */\n function removeLastWhere(array, fn, start = -1, stop = 0) {\n let value;\n let index = findLastIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeLastWhere = removeLastWhere;\n /**\n * Remove all occurrences of values which match a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * function isNegative(value: number): boolean {\n * return value < 0;\n * }\n *\n * let data = [0, 12, -13, -9, 23, 39, 14, -15, 12, 75];\n * ArrayExt.removeAllWhere(data, isEven); // 4\n * ArrayExt.removeAllWhere(data, isNegative, 0, 3); // 2\n * ```\n */\n function removeAllWhere(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && fn(array[i], i)) {\n count++;\n }\n else if (stop < start && (i <= stop || i >= start) && fn(array[i], i)) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllWhere = removeAllWhere;\n})(ArrayExt || (ArrayExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Chain together several iterables.\n *\n * @deprecated\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields the values of the iterables\n * in the order in which they are supplied.\n *\n * #### Example\n * ```typescript\n * import { chain } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = chain(data1, data2);\n *\n * Array.from(stream); // [1, 2, 3, 4, 5, 6]\n * ```\n */\nfunction* chain(...objects) {\n for (const object of objects) {\n yield* object;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an empty iterator.\n *\n * @returns A new iterator which yields nothing.\n *\n * #### Example\n * ```typescript\n * import { empty } from '@lumino/algorithm';\n *\n * let stream = empty();\n *\n * Array.from(stream); // []\n * ```\n */\n// eslint-disable-next-line require-yield\nfunction* empty() {\n return;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Enumerate an iterable object.\n *\n * @param object - The iterable object of interest.\n *\n * @param start - The starting enum value. The default is `0`.\n *\n * @returns An iterator which yields the enumerated values.\n *\n * #### Example\n * ```typescript\n * import { enumerate } from '@lumino/algorithm';\n *\n * let data = ['foo', 'bar', 'baz'];\n *\n * let stream = enumerate(data, 1);\n *\n * Array.from(stream); // [[1, 'foo'], [2, 'bar'], [3, 'baz']]\n * ```\n */\nfunction* enumerate(object, start = 0) {\n for (const value of object) {\n yield [start++, value];\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Filter an iterable for values which pass a test.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns An iterator which yields the values which pass the test.\n *\n * #### Example\n * ```typescript\n * import { filter } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = filter(data, value => value % 2 === 0);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* filter(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Find the first value in an iterable which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { find } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * find(data, isCat).name; // 'fluffy'\n * ```\n */\nfunction find(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return value;\n }\n }\n return undefined;\n}\n/**\n * Find the index of the first value which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { findIndex } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * findIndex(data, isCat); // 1\n * ```\n */\nfunction findIndex(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return index - 1;\n }\n }\n return -1;\n}\n/**\n * Find the minimum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The minimum value in the iterable. If multiple values are\n * equivalent to the minimum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { min } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * min([7, 4, 0, 3, 9, 4], numberCmp); // 0\n * ```\n */\nfunction min(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) < 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the maximum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The maximum value in the iterable. If multiple values are\n * equivalent to the maximum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { max } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * max([7, 4, 0, 3, 9, 4], numberCmp); // 9\n * ```\n */\nfunction max(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) > 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the minimum and maximum values in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns A 2-tuple of the `[min, max]` values in the iterable. If\n * multiple values are equivalent, the left-most values are returned.\n * If the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { minmax } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * minmax([7, 4, 0, 3, 9, 4], numberCmp); // [0, 9]\n * ```\n */\nfunction minmax(object, fn) {\n let empty = true;\n let vmin;\n let vmax;\n for (const value of object) {\n if (empty) {\n vmin = value;\n vmax = value;\n empty = false;\n }\n else if (fn(value, vmin) < 0) {\n vmin = value;\n }\n else if (fn(value, vmax) > 0) {\n vmax = value;\n }\n }\n return empty ? undefined : [vmin, vmax];\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an array from an iterable of values.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new array of values from the given object.\n *\n * #### Example\n * ```typescript\n * import { toArray } from '@lumino/algorithm';\n *\n * let stream = [1, 2, 3, 4, 5, 6][Symbol.iterator]();\n *\n * toArray(stream); // [1, 2, 3, 4, 5, 6];\n * ```\n */\nfunction toArray(object) {\n return Array.from(object);\n}\n/**\n * Create an object from an iterable of key/value pairs.\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new object mapping keys to values.\n *\n * #### Example\n * ```typescript\n * import { toObject } from '@lumino/algorithm';\n *\n * let data: [string, number][] = [['one', 1], ['two', 2], ['three', 3]];\n *\n * toObject(data); // { one: 1, two: 2, three: 3 }\n * ```\n */\nfunction toObject(object) {\n const result = {};\n for (const [key, value] of object) {\n result[key] = value;\n }\n return result;\n}\n/**\n * Invoke a function for each value in an iterable.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The callback function to invoke for each value.\n *\n * #### Notes\n * Iteration can be terminated early by returning `false` from the\n * callback function.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { each } from '@lumino/algorithm';\n *\n * let data = [5, 7, 0, -2, 9];\n *\n * each(data, value => { console.log(value); });\n * ```\n */\nfunction each(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return;\n }\n }\n}\n/**\n * Test whether all values in an iterable satisfy a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if all values pass the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `false` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { every } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * every(data, value => value % 2 === 0); // false\n * every(data, value => value % 2 === 1); // true\n * ```\n */\nfunction every(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Test whether any value in an iterable satisfies a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if any value passes the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `true` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { some } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * some(data, value => value === 7); // true\n * some(data, value => value === 3); // false\n * ```\n */\nfunction some(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return true;\n }\n }\n return false;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Transform the values of an iterable with a mapping function.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The mapping function to invoke for each value.\n *\n * @returns An iterator which yields the transformed values.\n *\n * #### Example\n * ```typescript\n * import { map } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3];\n *\n * let stream = map(data, value => value * 2);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* map(object, fn) {\n let index = 0;\n for (const value of object) {\n yield fn(value, index++);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator of evenly spaced values.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns An iterator which produces evenly spaced values.\n *\n * #### Notes\n * In the single argument form of `range(stop)`, `start` defaults to\n * `0` and `step` defaults to `1`.\n *\n * In the two argument form of `range(start, stop)`, `step` defaults\n * to `1`.\n *\n * #### Example\n * ```typescript\n * import { range } from '@lumino/algorithm';\n *\n * let stream = range(2, 4);\n *\n * Array.from(stream); // [2, 3]\n * ```\n */\nfunction* range(start, stop, step) {\n if (stop === undefined) {\n stop = start;\n start = 0;\n step = 1;\n }\n else if (step === undefined) {\n step = 1;\n }\n const length = Private.rangeLength(start, stop, step);\n for (let index = 0; index < length; index++) {\n yield start + step * index;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Compute the effective length of a range.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns The number of steps need to traverse the range.\n */\n function rangeLength(start, stop, step) {\n if (step === 0) {\n return Infinity;\n }\n if (start > stop && step > 0) {\n return 0;\n }\n if (start < stop && step < 0) {\n return 0;\n }\n return Math.ceil((stop - start) / step);\n }\n Private.rangeLength = rangeLength;\n})(Private || (Private = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nfunction reduce(object, fn, initial) {\n // Setup the iterator and fetch the first value.\n const it = object[Symbol.iterator]();\n let index = 0;\n let first = it.next();\n // An empty iterator and no initial value is an error.\n if (first.done && initial === undefined) {\n throw new TypeError('Reduce of empty iterable with no initial value.');\n }\n // If the iterator is empty, return the initial value.\n if (first.done) {\n return initial;\n }\n // If the iterator has a single item and no initial value, the\n // reducer is not invoked and the first item is the return value.\n let second = it.next();\n if (second.done && initial === undefined) {\n return first.value;\n }\n // If iterator has a single item and an initial value is provided,\n // the reducer is invoked and that result is the return value.\n if (second.done) {\n return fn(initial, first.value, index++);\n }\n // Setup the initial accumlated value.\n let accumulator;\n if (initial === undefined) {\n accumulator = fn(first.value, second.value, index++);\n }\n else {\n accumulator = fn(fn(initial, first.value, index++), second.value, index++);\n }\n // Iterate the rest of the values, updating the accumulator.\n let next;\n while (!(next = it.next()).done) {\n accumulator = fn(accumulator, next.value, index++);\n }\n // Return the final accumulated value.\n return accumulator;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator which repeats a value a number of times.\n *\n * @deprecated\n *\n * @param value - The value to repeat.\n *\n * @param count - The number of times to repeat the value.\n *\n * @returns A new iterator which repeats the specified value.\n *\n * #### Example\n * ```typescript\n * import { repeat } from '@lumino/algorithm';\n *\n * let stream = repeat(7, 3);\n *\n * Array.from(stream); // [7, 7, 7]\n * ```\n */\nfunction* repeat(value, count) {\n while (0 < count--) {\n yield value;\n }\n}\n/**\n * Create an iterator which yields a value a single time.\n *\n * @deprecated\n *\n * @param value - The value to wrap in an iterator.\n *\n * @returns A new iterator which yields the value a single time.\n *\n * #### Example\n * ```typescript\n * import { once } from '@lumino/algorithm';\n *\n * let stream = once(7);\n *\n * Array.from(stream); // [7]\n * ```\n */\nfunction* once(value) {\n yield value;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator for a retroable object.\n *\n * @param object - The retroable or array-like object of interest.\n *\n * @returns An iterator which traverses the object's values in reverse.\n *\n * #### Example\n * ```typescript\n * import { retro } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = retro(data);\n *\n * Array.from(stream); // [6, 5, 4, 3, 2, 1]\n * ```\n */\nfunction* retro(object) {\n if (typeof object.retro === 'function') {\n yield* object.retro();\n }\n else {\n for (let index = object.length - 1; index > -1; index--) {\n yield object[index];\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Topologically sort an iterable of edges.\n *\n * @param edges - The iterable object of edges to sort.\n * An edge is represented as a 2-tuple of `[fromNode, toNode]`.\n *\n * @returns The topologically sorted array of nodes.\n *\n * #### Notes\n * If a cycle is present in the graph, the cycle will be ignored and\n * the return value will be only approximately sorted.\n *\n * #### Example\n * ```typescript\n * import { topologicSort } from '@lumino/algorithm';\n *\n * let data = [\n * ['d', 'e'],\n * ['c', 'd'],\n * ['a', 'b'],\n * ['b', 'c']\n * ];\n *\n * topologicSort(data); // ['a', 'b', 'c', 'd', 'e']\n * ```\n */\nfunction topologicSort(edges) {\n // Setup the shared sorting state.\n let sorted = [];\n let visited = new Set();\n let graph = new Map();\n // Add the edges to the graph.\n for (const edge of edges) {\n addEdge(edge);\n }\n // Visit each node in the graph.\n for (const [k] of graph) {\n visit(k);\n }\n // Return the sorted results.\n return sorted;\n // Add an edge to the graph.\n function addEdge(edge) {\n let [fromNode, toNode] = edge;\n let children = graph.get(toNode);\n if (children) {\n children.push(fromNode);\n }\n else {\n graph.set(toNode, [fromNode]);\n }\n }\n // Recursively visit the node.\n function visit(node) {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n let children = graph.get(node);\n if (children) {\n for (const child of children) {\n visit(child);\n }\n }\n sorted.push(node);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate over an iterable using a stepped increment.\n *\n * @param object - The iterable object of interest.\n *\n * @param step - The distance to step on each iteration. A value\n * of less than `1` will behave the same as a value of `1`.\n *\n * @returns An iterator which traverses the iterable step-wise.\n *\n * #### Example\n * ```typescript\n * import { stride } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = stride(data, 2);\n *\n * Array.from(stream); // [1, 3, 5];\n * ```\n */\nfunction* stride(object, step) {\n let count = 0;\n for (const value of object) {\n if (0 === count++ % step) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for string-specific algorithms.\n */\nvar StringExt;\n(function (StringExt) {\n /**\n * Find the indices of characters in a source text.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The matched indices, or `null` if there is no match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * In order for there to be a match, all of the characters in `query`\n * **must** appear in `source` in the order given by `query`.\n *\n * Characters are matched using strict `===` equality.\n */\n function findIndices(source, query, start = 0) {\n let indices = new Array(query.length);\n for (let i = 0, j = start, n = query.length; i < n; ++i, ++j) {\n j = source.indexOf(query[i], j);\n if (j === -1) {\n return null;\n }\n indices[i] = j;\n }\n return indices;\n }\n StringExt.findIndices = findIndices;\n /**\n * A string matcher which uses a sum-of-squares algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-squares approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The index of each\n * matching character is squared and added to the score. This means\n * that early and consecutive character matches are preferred, while\n * late matches are heavily penalized.\n */\n function matchSumOfSquares(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i] - start;\n score += j * j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfSquares = matchSumOfSquares;\n /**\n * A string matcher which uses a sum-of-deltas algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-deltas approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The delta between\n * the indices are summed to create the score. This means that groups\n * of matched characters are preferred, while fragmented matches are\n * penalized.\n */\n function matchSumOfDeltas(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n let last = start - 1;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i];\n score += j - last - 1;\n last = j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfDeltas = matchSumOfDeltas;\n /**\n * Highlight the matched characters of a source text.\n *\n * @param source - The text which should be highlighted.\n *\n * @param indices - The indices of the matched characters. They must\n * appear in increasing order and must be in bounds of the source.\n *\n * @param fn - The function to apply to the matched chunks.\n *\n * @returns An array of unmatched and highlighted chunks.\n */\n function highlight(source, indices, fn) {\n // Set up the result array.\n let result = [];\n // Set up the counter variables.\n let k = 0;\n let last = 0;\n let n = indices.length;\n // Iterator over each index.\n while (k < n) {\n // Set up the chunk indices.\n let i = indices[k];\n let j = indices[k];\n // Advance the right chunk index until it's non-contiguous.\n while (++k < n && indices[k] === j + 1) {\n j++;\n }\n // Extract the unmatched text.\n if (last < i) {\n result.push(source.slice(last, i));\n }\n // Extract and highlight the matched text.\n if (i < j + 1) {\n result.push(fn(source.slice(i, j + 1)));\n }\n // Update the last visited index.\n last = j + 1;\n }\n // Extract any remaining unmatched text.\n if (last < source.length) {\n result.push(source.slice(last));\n }\n // Return the highlighted result.\n return result;\n }\n StringExt.highlight = highlight;\n /**\n * A 3-way string comparison function.\n *\n * @param a - The first string of interest.\n *\n * @param b - The second string of interest.\n *\n * @returns `-1` if `a < b`, else `1` if `a > b`, else `0`.\n */\n function cmp(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n StringExt.cmp = cmp;\n})(StringExt || (StringExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Take a fixed number of items from an iterable.\n *\n * @param object - The iterable object of interest.\n *\n * @param count - The number of items to take from the iterable.\n *\n * @returns An iterator which yields the specified number of items\n * from the source iterable.\n *\n * #### Notes\n * The returned iterator will exhaust early if the source iterable\n * contains an insufficient number of items.\n *\n * #### Example\n * ```typescript\n * import { take } from '@lumino/algorithm';\n *\n * let stream = take([5, 4, 3, 2, 1, 0, -1], 3);\n *\n * Array.from(stream); // [5, 4, 3]\n * ```\n */\nfunction* take(object, count) {\n if (count < 1) {\n return;\n }\n const it = object[Symbol.iterator]();\n let item;\n while (0 < count-- && !(item = it.next()).done) {\n yield item.value;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate several iterables in lockstep.\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields successive tuples of values where\n * each value is taken in turn from the provided iterables. It will\n * be as long as the shortest provided iterable.\n *\n * #### Example\n * ```typescript\n * import { zip } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = zip(data1, data2);\n *\n * Array.from(stream); // [[1, 4], [2, 5], [3, 6]]\n * ```\n */\nfunction* zip(...objects) {\n const iters = objects.map(obj => obj[Symbol.iterator]());\n let tuple = iters.map(it => it.next());\n for (; every(tuple, item => !item.done); tuple = iters.map(it => it.next())) {\n yield tuple.map(item => item.value);\n }\n}\n\nexport { ArrayExt, StringExt, chain, each, empty, enumerate, every, filter, find, findIndex, map, max, min, minmax, once, range, reduce, repeat, retro, some, stride, take, toArray, toObject, topologicSort, zip };\n//# sourceMappingURL=index.es6.js.map\n","/**\n * A generic doubly-linked list.\n */\nclass LinkedList {\n constructor() {\n this._first = null;\n this._last = null;\n this._size = 0;\n }\n /**\n * Whether the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get isEmpty() {\n return this._size === 0;\n }\n /**\n * The size of the list.\n *\n * #### Complexity\n * `O(1)`\n *\n * #### Notes\n * This is equivalent to `length`.\n */\n get size() {\n return this._size;\n }\n /**\n * The length of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `size`.\n *\n * This property is deprecated.\n */\n get length() {\n return this._size;\n }\n /**\n * The first value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get first() {\n return this._first ? this._first.value : undefined;\n }\n /**\n * The last value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get last() {\n return this._last ? this._last.value : undefined;\n }\n /**\n * The first node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get firstNode() {\n return this._first;\n }\n /**\n * The last node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get lastNode() {\n return this._last;\n }\n /**\n * Create an iterator over the values in the list.\n *\n * @returns A new iterator starting with the first value.\n *\n * #### Complexity\n * Constant.\n */\n *[Symbol.iterator]() {\n let node = this._first;\n while (node) {\n yield node.value;\n node = node.next;\n }\n }\n /**\n * Create a reverse iterator over the values in the list.\n *\n * @returns A new iterator starting with the last value.\n *\n * #### Complexity\n * Constant.\n */\n *retro() {\n let node = this._last;\n while (node) {\n yield node.value;\n node = node.prev;\n }\n }\n /**\n * Create an iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the first node.\n *\n * #### Complexity\n * Constant.\n */\n *nodes() {\n let node = this._first;\n while (node) {\n yield node;\n node = node.next;\n }\n }\n /**\n * Create a reverse iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the last node.\n *\n * #### Complexity\n * Constant.\n */\n *retroNodes() {\n let node = this._last;\n while (node) {\n yield node;\n node = node.prev;\n }\n }\n /**\n * Assign new values to the list, replacing all current values.\n *\n * @param values - The values to assign to the list.\n *\n * #### Complexity\n * Linear.\n */\n assign(values) {\n this.clear();\n for (const value of values) {\n this.addLast(value);\n }\n }\n /**\n * Add a value to the end of the list.\n *\n * @param value - The value to add to the end of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `addLast`.\n */\n push(value) {\n this.addLast(value);\n }\n /**\n * Remove and return the value at the end of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `removeLast`.\n */\n pop() {\n return this.removeLast();\n }\n /**\n * Add a value to the beginning of the list.\n *\n * @param value - The value to add to the beginning of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `addFirst`.\n */\n shift(value) {\n this.addFirst(value);\n }\n /**\n * Remove and return the value at the beginning of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `removeFirst`.\n */\n unshift() {\n return this.removeFirst();\n }\n /**\n * Add a value to the beginning of the list.\n *\n * @param value - The value to add to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n addFirst(value) {\n let node = new Private.LinkedListNode(this, value);\n if (!this._first) {\n this._first = node;\n this._last = node;\n }\n else {\n node.next = this._first;\n this._first.prev = node;\n this._first = node;\n }\n this._size++;\n return node;\n }\n /**\n * Add a value to the end of the list.\n *\n * @param value - The value to add to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n addLast(value) {\n let node = new Private.LinkedListNode(this, value);\n if (!this._last) {\n this._first = node;\n this._last = node;\n }\n else {\n node.prev = this._last;\n this._last.next = node;\n this._last = node;\n }\n this._size++;\n return node;\n }\n /**\n * Insert a value before a specific node in the list.\n *\n * @param value - The value to insert before the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n insertBefore(value, ref) {\n if (!ref || ref === this._first) {\n return this.addFirst(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n let node = new Private.LinkedListNode(this, value);\n let _ref = ref;\n let prev = _ref.prev;\n node.next = _ref;\n node.prev = prev;\n _ref.prev = node;\n prev.next = node;\n this._size++;\n return node;\n }\n /**\n * Insert a value after a specific node in the list.\n *\n * @param value - The value to insert after the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n insertAfter(value, ref) {\n if (!ref || ref === this._last) {\n return this.addLast(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n let node = new Private.LinkedListNode(this, value);\n let _ref = ref;\n let next = _ref.next;\n node.next = next;\n node.prev = _ref;\n _ref.next = node;\n next.prev = node;\n this._size++;\n return node;\n }\n /**\n * Remove and return the value at the beginning of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n removeFirst() {\n let node = this._first;\n if (!node) {\n return undefined;\n }\n if (node === this._last) {\n this._first = null;\n this._last = null;\n }\n else {\n this._first = node.next;\n this._first.prev = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._size--;\n return node.value;\n }\n /**\n * Remove and return the value at the end of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n removeLast() {\n let node = this._last;\n if (!node) {\n return undefined;\n }\n if (node === this._first) {\n this._first = null;\n this._last = null;\n }\n else {\n this._last = node.prev;\n this._last.next = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._size--;\n return node.value;\n }\n /**\n * Remove a specific node from the list.\n *\n * @param node - The node to remove from the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * The node must be owned by the list.\n */\n removeNode(node) {\n if (!(node instanceof Private.LinkedListNode) || node.list !== this) {\n throw new Error('Node is not owned by the list.');\n }\n let _node = node;\n if (_node === this._first && _node === this._last) {\n this._first = null;\n this._last = null;\n }\n else if (_node === this._first) {\n this._first = _node.next;\n this._first.prev = null;\n }\n else if (_node === this._last) {\n this._last = _node.prev;\n this._last.next = null;\n }\n else {\n _node.next.prev = _node.prev;\n _node.prev.next = _node.next;\n }\n _node.list = null;\n _node.next = null;\n _node.prev = null;\n this._size--;\n }\n /**\n * Remove all values from the list.\n *\n * #### Complexity\n * Linear.\n */\n clear() {\n let node = this._first;\n while (node) {\n let next = node.next;\n node.list = null;\n node.prev = null;\n node.next = null;\n node = next;\n }\n this._first = null;\n this._last = null;\n this._size = 0;\n }\n}\n/**\n * The namespace for the `LinkedList` class statics.\n */\n(function (LinkedList) {\n /**\n * Create a linked list from an iterable of values.\n *\n * @param values - The iterable object of interest.\n *\n * @returns A new linked list initialized with the given values.\n *\n * #### Complexity\n * Linear.\n */\n function from(values) {\n let list = new LinkedList();\n list.assign(values);\n return list;\n }\n LinkedList.from = from;\n})(LinkedList || (LinkedList = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The internal linked list node implementation.\n */\n class LinkedListNode {\n /**\n * Construct a new linked list node.\n *\n * @param list - The list which owns the node.\n *\n * @param value - The value for the link.\n */\n constructor(list, value) {\n /**\n * The linked list which created and owns the node.\n */\n this.list = null;\n /**\n * The next node in the list.\n */\n this.next = null;\n /**\n * The previous node in the list.\n */\n this.prev = null;\n this.list = list;\n this.value = value;\n }\n }\n Private.LinkedListNode = LinkedListNode;\n})(Private || (Private = {}));\n\nexport { LinkedList };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Platform, Selector } from '@lumino/domutils';\nimport { getKeyboardLayout } from '@lumino/keyboard';\nimport { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module commands\n */\n/**\n * An object which manages a collection of commands.\n *\n * #### Notes\n * A command registry can be used to populate a variety of action-based\n * widgets, such as command palettes, menus, and toolbars.\n */\nclass CommandRegistry {\n constructor() {\n this._timerID = 0;\n this._timerModifierID = 0;\n this._replaying = false;\n this._keystrokes = [];\n this._keydownEvents = [];\n this._keyBindings = [];\n this._exactKeyMatch = null;\n this._commands = new Map();\n this._commandChanged = new Signal(this);\n this._commandExecuted = new Signal(this);\n this._keyBindingChanged = new Signal(this);\n this._holdKeyBindingPromises = new Map();\n }\n /**\n * A signal emitted when a command has changed.\n *\n * #### Notes\n * This signal is useful for visual representations of commands which\n * need to refresh when the state of a relevant command has changed.\n */\n get commandChanged() {\n return this._commandChanged;\n }\n /**\n * A signal emitted when a command has executed.\n *\n * #### Notes\n * Care should be taken when consuming this signal. The command system is used\n * by many components for many user actions. Handlers registered with this\n * signal must return quickly to ensure the overall application remains responsive.\n */\n get commandExecuted() {\n return this._commandExecuted;\n }\n /**\n * A signal emitted when a key binding is changed.\n */\n get keyBindingChanged() {\n return this._keyBindingChanged;\n }\n /**\n * A read-only array of the key bindings in the registry.\n */\n get keyBindings() {\n return this._keyBindings;\n }\n /**\n * List the ids of the registered commands.\n *\n * @returns A new array of the registered command ids.\n */\n listCommands() {\n return Array.from(this._commands.keys());\n }\n /**\n * Test whether a specific command is registered.\n *\n * @param id - The id of the command of interest.\n *\n * @returns `true` if the command is registered, `false` otherwise.\n */\n hasCommand(id) {\n return this._commands.has(id);\n }\n /**\n * Add a command to the registry.\n *\n * @param id - The unique id of the command.\n *\n * @param options - The options for the command.\n *\n * @returns A disposable which will remove the command.\n *\n * @throws An error if the given `id` is already registered.\n */\n addCommand(id, options) {\n // Throw an error if the id is already registered.\n if (this._commands.has(id)) {\n throw new Error(`Command '${id}' already registered.`);\n }\n // Add the command to the registry.\n this._commands.set(id, Private.createCommand(options));\n // Emit the `commandChanged` signal.\n this._commandChanged.emit({ id, type: 'added' });\n // Return a disposable which will remove the command.\n return new DisposableDelegate(() => {\n // Remove the command from the registry.\n this._commands.delete(id);\n // Emit the `commandChanged` signal.\n this._commandChanged.emit({ id, type: 'removed' });\n });\n }\n /**\n * Notify listeners that the state of a command has changed.\n *\n * @param id - The id of the command which has changed. If more than\n * one command has changed, this argument should be omitted.\n *\n * @throws An error if the given `id` is not registered.\n *\n * #### Notes\n * This method should be called by the command author whenever the\n * application state changes such that the results of the command\n * metadata functions may have changed.\n *\n * This will cause the `commandChanged` signal to be emitted.\n */\n notifyCommandChanged(id) {\n if (id !== undefined && !this._commands.has(id)) {\n throw new Error(`Command '${id}' is not registered.`);\n }\n this._commandChanged.emit({ id, type: id ? 'changed' : 'many-changed' });\n }\n /**\n * Get the description for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The description for the command.\n */\n describedBy(id, args = JSONExt.emptyObject) {\n var _a;\n let cmd = this._commands.get(id);\n return Promise.resolve((_a = cmd === null || cmd === void 0 ? void 0 : cmd.describedBy.call(undefined, args)) !== null && _a !== void 0 ? _a : { args: null });\n }\n /**\n * Get the display label for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The display label for the command, or an empty string\n * if the command is not registered.\n */\n label(id, args = JSONExt.emptyObject) {\n var _a;\n let cmd = this._commands.get(id);\n return (_a = cmd === null || cmd === void 0 ? void 0 : cmd.label.call(undefined, args)) !== null && _a !== void 0 ? _a : '';\n }\n /**\n * Get the mnemonic index for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The mnemonic index for the command, or `-1` if the\n * command is not registered.\n */\n mnemonic(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.mnemonic.call(undefined, args) : -1;\n }\n /**\n * Get the icon renderer for a specific command.\n *\n * DEPRECATED: if set to a string value, the .icon field will\n * function as an alias for the .iconClass field, for backwards\n * compatibility. In the future when this is removed, the default\n * return type will become undefined.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon renderer for the command or `undefined`.\n */\n icon(id, args = JSONExt.emptyObject) {\n var _a;\n return (_a = this._commands.get(id)) === null || _a === void 0 ? void 0 : _a.icon.call(undefined, args);\n }\n /**\n * Get the icon class for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon class for the command, or an empty string if\n * the command is not registered.\n */\n iconClass(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.iconClass.call(undefined, args) : '';\n }\n /**\n * Get the icon label for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon label for the command, or an empty string if\n * the command is not registered.\n */\n iconLabel(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.iconLabel.call(undefined, args) : '';\n }\n /**\n * Get the short form caption for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The caption for the command, or an empty string if the\n * command is not registered.\n */\n caption(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.caption.call(undefined, args) : '';\n }\n /**\n * Get the usage help text for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The usage text for the command, or an empty string if\n * the command is not registered.\n */\n usage(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.usage.call(undefined, args) : '';\n }\n /**\n * Get the extra class name for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The class name for the command, or an empty string if\n * the command is not registered.\n */\n className(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.className.call(undefined, args) : '';\n }\n /**\n * Get the dataset for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The dataset for the command, or an empty dataset if\n * the command is not registered.\n */\n dataset(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.dataset.call(undefined, args) : {};\n }\n /**\n * Test whether a specific command is enabled.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is enabled,\n * or `false` if the command is not registered.\n */\n isEnabled(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isEnabled.call(undefined, args) : false;\n }\n /**\n * Test whether a specific command is toggled.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is toggled,\n * or `false` if the command is not registered.\n */\n isToggled(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isToggled.call(undefined, args) : false;\n }\n /**\n * Test whether a specific command is toggleable.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is toggleable,\n * or `false` if the command is not registered.\n */\n isToggleable(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isToggleable : false;\n }\n /**\n * Test whether a specific command is visible.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is visible,\n * or `false` if the command is not registered.\n */\n isVisible(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isVisible.call(undefined, args) : false;\n }\n /**\n * Execute a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A promise which resolves with the result of the command.\n *\n * #### Notes\n * The promise will reject if the command throws an exception,\n * or if the command is not registered.\n */\n execute(id, args = JSONExt.emptyObject) {\n // Reject if the command is not registered.\n let cmd = this._commands.get(id);\n if (!cmd) {\n return Promise.reject(new Error(`Command '${id}' not registered.`));\n }\n // Execute the command and reject if an exception is thrown.\n let value;\n try {\n value = cmd.execute.call(undefined, args);\n }\n catch (err) {\n value = Promise.reject(err);\n }\n // Create the return promise which resolves the result.\n let result = Promise.resolve(value);\n // Emit the command executed signal.\n this._commandExecuted.emit({ id, args, result });\n // Return the result promise to the caller.\n return result;\n }\n /**\n * Add a key binding to the registry.\n *\n * @param options - The options for creating the key binding.\n *\n * @returns A disposable which removes the added key binding.\n *\n * #### Notes\n * If multiple key bindings are registered for the same sequence, the\n * binding with the highest selector specificity is executed first. A\n * tie is broken by using the most recently added key binding.\n *\n * Ambiguous key bindings are resolved with a timeout. As an example,\n * suppose two key bindings are registered: one with the key sequence\n * `['Ctrl D']`, and another with `['Ctrl D', 'Ctrl W']`. If the user\n * presses `Ctrl D`, the first binding cannot be immediately executed\n * since the user may intend to complete the chord with `Ctrl W`. For\n * such cases, a timer is used to allow the chord to be completed. If\n * the chord is not completed before the timeout, the first binding\n * is executed.\n */\n addKeyBinding(options) {\n // Create the binding for the given options.\n let binding = Private.createKeyBinding(options);\n // Add the key binding to the bindings array.\n this._keyBindings.push(binding);\n // Emit the `bindingChanged` signal.\n this._keyBindingChanged.emit({ binding, type: 'added' });\n // Return a disposable which will remove the binding.\n return new DisposableDelegate(() => {\n // Remove the binding from the array.\n ArrayExt.removeFirstOf(this._keyBindings, binding);\n // Emit the `bindingChanged` signal.\n this._keyBindingChanged.emit({ binding, type: 'removed' });\n });\n }\n /**\n * Process a `'keydown'` event and invoke a matching key binding.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * #### Notes\n * This should be called in response to a `'keydown'` event in order\n * to invoke the command for the best matching key binding.\n *\n * The registry **does not** install its own listener for `'keydown'`\n * events. This allows the application full control over the nodes\n * and phase for which the registry processes `'keydown'` events.\n *\n * When the keydown event is processed, if the event target or any of its\n * ancestor nodes has a `data-lm-suppress-shortcuts` attribute, its keydown\n * events will not invoke commands.\n */\n processKeydownEvent(event) {\n // Bail immediately if playing back keystrokes.\n if (event.defaultPrevented || this._replaying) {\n return;\n }\n // Get the normalized keystroke for the event.\n const keystroke = CommandRegistry.keystrokeForKeydownEvent(event);\n // If the keystroke is not valid for the keyboard layout, replay\n // any suppressed events and clear the pending state.\n if (!keystroke) {\n this._replayKeydownEvents();\n this._clearPendingState();\n return;\n }\n // Check that only mod key(s) have been pressed.\n if (CommandRegistry.isModifierKeyPressed(event)) {\n // Find the exact match for the modifier keys.\n let { exact } = Private.matchKeyBinding(this._keyBindings, [keystroke], event);\n if (exact) {\n // If the mod keys match an exact shortcut, start a dedicated timer.\n event.preventDefault();\n event.stopPropagation();\n this._startModifierTimer(exact);\n }\n else {\n // Otherwise stop potential existing timer.\n this._clearModifierTimer();\n }\n return;\n }\n // Add the keystroke to the current key sequence.\n this._keystrokes.push(keystroke);\n // Find the exact and partial matches for the key sequence.\n const { exact, partial } = Private.matchKeyBinding(this._keyBindings, this._keystrokes, event);\n // Whether there is any partial match.\n const hasPartial = partial.length !== 0;\n // If there is no exact match and no partial match, replay\n // any suppressed events and clear the pending state.\n if (!exact && !hasPartial) {\n this._replayKeydownEvents();\n this._clearPendingState();\n return;\n }\n // Stop propagation of the event. If there is only a partial match,\n // the event will be replayed if a final exact match never occurs.\n if ((exact === null || exact === void 0 ? void 0 : exact.preventDefault) || partial.some(match => match.preventDefault)) {\n event.preventDefault();\n event.stopPropagation();\n }\n // Store the event for possible playback in the future and for\n // the use in execution hold check.\n this._keydownEvents.push(event);\n // If there is an exact match but no partial match, the exact match\n // can be dispatched immediately. The pending state is cleared so\n // the next key press starts from the default state.\n if (exact && !hasPartial) {\n this._executeKeyBinding(exact);\n this._clearPendingState();\n return;\n }\n // If there is both an exact match and a partial match, the exact\n // match is stored for future dispatch in case the timer expires\n // before a more specific match is triggered.\n if (exact) {\n this._exactKeyMatch = exact;\n }\n // (Re)start the timer to dispatch the most recent exact match\n // in case the partial match fails to result in an exact match.\n this._startTimer();\n }\n /**\n * Delay the execution of any command matched against the given 'keydown' event\n * until the `permission` to execute is granted.\n *\n * @param event - The event object for a `'keydown'` event.\n * @param permission - The promise with value indicating whether to proceed with the execution.\n *\n * ### Note\n * This enables the caller of `processKeydownEvent` to asynchronously prevent the\n * execution of the command based on external events.\n */\n holdKeyBindingExecution(event, permission) {\n this._holdKeyBindingPromises.set(event, permission);\n }\n /**\n * Process a ``keyup`` event to clear the timer on the modifier, if it exists.\n *\n * @param event - The event object for a `'keydown'` event.\n */\n processKeyupEvent(event) {\n this._clearModifierTimer();\n }\n /**\n * Start or restart the timeout on the modifier keys.\n *\n * This timeout will end only if the keys are hold.\n */\n _startModifierTimer(exact) {\n this._clearModifierTimer();\n this._timerModifierID = window.setTimeout(() => {\n this._executeKeyBinding(exact);\n }, Private.modifierkeyTimeOut);\n }\n /**\n * Clear the timeout on modifier keys.\n */\n _clearModifierTimer() {\n if (this._timerModifierID !== 0) {\n clearTimeout(this._timerModifierID);\n this._timerModifierID = 0;\n }\n }\n /**\n * Start or restart the pending timeout.\n */\n _startTimer() {\n this._clearTimer();\n this._timerID = window.setTimeout(() => {\n this._onPendingTimeout();\n }, Private.CHORD_TIMEOUT);\n }\n /**\n * Clear the pending timeout.\n */\n _clearTimer() {\n if (this._timerID !== 0) {\n clearTimeout(this._timerID);\n this._timerID = 0;\n }\n }\n /**\n * Replay the keydown events which were suppressed.\n */\n _replayKeydownEvents() {\n if (this._keydownEvents.length === 0) {\n return;\n }\n this._replaying = true;\n this._keydownEvents.forEach(Private.replayKeyEvent);\n this._replaying = false;\n }\n /**\n * Execute the command for the given key binding.\n *\n * If the command is missing or disabled, a warning will be logged.\n *\n * The execution will not proceed if any of the events leading to\n * the keybinding matching were held with the permission resolving to false.\n */\n async _executeKeyBinding(binding) {\n if (this._holdKeyBindingPromises.size !== 0) {\n // Copy keydown events list to ensure it is available in async code.\n const keydownEvents = [...this._keydownEvents];\n // Wait until all hold requests on execution are lifted.\n const executionAllowed = (await Promise.race([\n Promise.all(keydownEvents.map(async (event) => { var _a; return (_a = this._holdKeyBindingPromises.get(event)) !== null && _a !== void 0 ? _a : Promise.resolve(true); })),\n new Promise(resolve => {\n setTimeout(() => resolve([false]), Private.KEYBINDING_HOLD_TIMEOUT);\n })\n ])).every(Boolean);\n // Clear the hold requests.\n this._holdKeyBindingPromises.clear();\n // Do not proceed with the execution if any of the hold requests did not get the permission to proceed.\n if (!executionAllowed) {\n return;\n }\n }\n let { command, args } = binding;\n let newArgs = {\n _luminoEvent: { type: 'keybinding', keys: binding.keys },\n ...args\n };\n if (!this.hasCommand(command) || !this.isEnabled(command, newArgs)) {\n let word = this.hasCommand(command) ? 'enabled' : 'registered';\n let keys = binding.keys.join(', ');\n let msg1 = `Cannot execute key binding '${keys}':`;\n let msg2 = `command '${command}' is not ${word}.`;\n console.warn(`${msg1} ${msg2}`);\n return;\n }\n await this.execute(command, newArgs);\n }\n /**\n * Clear the internal pending state.\n */\n _clearPendingState() {\n this._clearTimer();\n this._clearModifierTimer();\n this._exactKeyMatch = null;\n this._keystrokes.length = 0;\n this._keydownEvents.length = 0;\n }\n /**\n * Handle the partial match timeout.\n */\n _onPendingTimeout() {\n this._timerID = 0;\n if (this._exactKeyMatch) {\n this._executeKeyBinding(this._exactKeyMatch);\n }\n else {\n this._replayKeydownEvents();\n }\n this._clearPendingState();\n }\n}\n/**\n * The namespace for the `CommandRegistry` class statics.\n */\n(function (CommandRegistry) {\n /**\n * Parse a keystroke into its constituent components.\n *\n * @param keystroke - The keystroke of interest.\n *\n * @returns The parsed components of the keystroke.\n *\n * #### Notes\n * The keystroke should be of the form:\n * `[ [ [ ]]]`\n *\n * The supported modifiers are: `Accel`, `Alt`, `Cmd`, `Ctrl`, and\n * `Shift`. The `Accel` modifier is translated to `Cmd` on Mac and\n * `Ctrl` on all other platforms.\n *\n * The parsing is tolerant and will not throw exceptions. Notably:\n * - Duplicate modifiers are ignored.\n * - Extra primary keys are ignored.\n * - The order of modifiers and primary key is irrelevant.\n * - The keystroke parts should be separated by whitespace.\n * - The keystroke is case sensitive.\n */\n function parseKeystroke(keystroke) {\n let key = '';\n let alt = false;\n let cmd = false;\n let ctrl = false;\n let shift = false;\n for (let token of keystroke.split(/\\s+/)) {\n if (token === 'Accel') {\n if (Platform.IS_MAC) {\n cmd = true;\n }\n else {\n ctrl = true;\n }\n }\n else if (token === 'Alt') {\n alt = true;\n }\n else if (token === 'Cmd') {\n cmd = true;\n }\n else if (token === 'Ctrl') {\n ctrl = true;\n }\n else if (token === 'Shift') {\n shift = true;\n }\n else if (token.length > 0) {\n key = token;\n }\n }\n return { cmd, ctrl, alt, shift, key };\n }\n CommandRegistry.parseKeystroke = parseKeystroke;\n /**\n * Normalize a keystroke into a canonical representation.\n *\n * @param keystroke - The keystroke of interest.\n *\n * @returns The normalized representation of the keystroke.\n *\n * #### Notes\n * This normalizes the keystroke by removing duplicate modifiers and\n * extra primary keys, and assembling the parts in a canonical order.\n *\n * The `Cmd` modifier is ignored on non-Mac platforms.\n */\n function normalizeKeystroke(keystroke) {\n let mods = '';\n let parts = parseKeystroke(keystroke);\n if (parts.ctrl) {\n mods += 'Ctrl ';\n }\n if (parts.alt) {\n mods += 'Alt ';\n }\n if (parts.shift) {\n mods += 'Shift ';\n }\n if (parts.cmd && Platform.IS_MAC) {\n mods += 'Cmd ';\n }\n if (!parts.key) {\n return mods.trim();\n }\n return mods + parts.key;\n }\n CommandRegistry.normalizeKeystroke = normalizeKeystroke;\n /**\n * Get the platform-specific normalized keys for an options object.\n *\n * @param options - The options for the key binding.\n *\n * @returns Array of combined, normalized keys.\n */\n function normalizeKeys(options) {\n let keys;\n if (Platform.IS_WIN) {\n keys = options.winKeys || options.keys;\n }\n else if (Platform.IS_MAC) {\n keys = options.macKeys || options.keys;\n }\n else {\n keys = options.linuxKeys || options.keys;\n }\n return keys.map(normalizeKeystroke);\n }\n CommandRegistry.normalizeKeys = normalizeKeys;\n /**\n * Format keystrokes for display on the local system.\n *\n * If a list of keystrokes is provided, it will be displayed as\n * a comma-separated string\n *\n * @param keystroke The keystrokes to format\n * @returns The keystrokes representation\n */\n function formatKeystroke(keystroke) {\n return typeof keystroke === 'string'\n ? formatSingleKey(keystroke)\n : keystroke.map(formatSingleKey).join(', ');\n function formatSingleKey(key) {\n let mods = [];\n let separator = Platform.IS_MAC ? ' ' : '+';\n let parts = parseKeystroke(key);\n if (parts.ctrl) {\n mods.push('Ctrl');\n }\n if (parts.alt) {\n mods.push('Alt');\n }\n if (parts.shift) {\n mods.push('Shift');\n }\n if (Platform.IS_MAC && parts.cmd) {\n mods.push('Cmd');\n }\n mods.push(parts.key);\n return mods.map(Private.formatKey).join(separator);\n }\n }\n CommandRegistry.formatKeystroke = formatKeystroke;\n /**\n * Check if `'keydown'` event is caused by pressing a modifier key that should be ignored.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns `true` if modifier key was pressed, `false` otherwise.\n */\n function isModifierKeyPressed(event) {\n let layout = getKeyboardLayout();\n let key = layout.keyForKeydownEvent(event);\n return layout.isModifierKey(key);\n }\n CommandRegistry.isModifierKeyPressed = isModifierKeyPressed;\n /**\n * Create a normalized keystroke for a `'keydown'` event.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns A normalized keystroke, or an empty string if the event\n * does not represent a valid keystroke for the given layout.\n */\n function keystrokeForKeydownEvent(event) {\n let layout = getKeyboardLayout();\n let key = layout.keyForKeydownEvent(event);\n let mods = [];\n if (event.ctrlKey) {\n mods.push('Ctrl');\n }\n if (event.altKey) {\n mods.push('Alt');\n }\n if (event.shiftKey) {\n mods.push('Shift');\n }\n if (event.metaKey && Platform.IS_MAC) {\n mods.push('Cmd');\n }\n if (!layout.isModifierKey(key)) {\n mods.push(key);\n }\n // for purely modifier key strings\n return mods.join(' ');\n }\n CommandRegistry.keystrokeForKeydownEvent = keystrokeForKeydownEvent;\n})(CommandRegistry || (CommandRegistry = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The timeout in ms for triggering a key binding chord.\n */\n Private.CHORD_TIMEOUT = 1000;\n /**\n * The timeout in ms for stopping the hold on keybinding execution.\n */\n Private.KEYBINDING_HOLD_TIMEOUT = 1000;\n /**\n * The timeout in ms for triggering a modifer key binding.\n */\n Private.modifierkeyTimeOut = 500;\n /**\n * Create a normalized command from an options object.\n */\n function createCommand(options) {\n return {\n execute: options.execute,\n describedBy: asFunc(typeof options.describedBy === 'function'\n ? options.describedBy\n : { args: null, ...options.describedBy }, () => {\n return { args: null };\n }),\n label: asFunc(options.label, emptyStringFunc),\n mnemonic: asFunc(options.mnemonic, negativeOneFunc),\n icon: asFunc(options.icon, undefinedFunc),\n iconClass: asFunc(options.iconClass, emptyStringFunc),\n iconLabel: asFunc(options.iconLabel, emptyStringFunc),\n caption: asFunc(options.caption, emptyStringFunc),\n usage: asFunc(options.usage, emptyStringFunc),\n className: asFunc(options.className, emptyStringFunc),\n dataset: asFunc(options.dataset, emptyDatasetFunc),\n isEnabled: options.isEnabled || trueFunc,\n isToggled: options.isToggled || falseFunc,\n isToggleable: options.isToggleable || !!options.isToggled,\n isVisible: options.isVisible || trueFunc\n };\n }\n Private.createCommand = createCommand;\n /**\n * Create a key binding object from key binding options.\n */\n function createKeyBinding(options) {\n var _a;\n return {\n keys: CommandRegistry.normalizeKeys(options),\n selector: validateSelector(options),\n command: options.command,\n args: options.args || JSONExt.emptyObject,\n preventDefault: (_a = options.preventDefault) !== null && _a !== void 0 ? _a : true\n };\n }\n Private.createKeyBinding = createKeyBinding;\n /**\n * Find the key bindings which match a key sequence.\n *\n * This returns a match result which contains the best exact matching\n * binding, and a flag which indicates if there are partial matches.\n */\n function matchKeyBinding(bindings, keys, event) {\n // The current best exact match.\n let exact = null;\n // Partial matches.\n let partial = [];\n // The match distance for the exact match.\n let distance = Infinity;\n // The specificity for the exact match.\n let specificity = 0;\n // Iterate over the bindings and search for the best match.\n for (let i = 0, n = bindings.length; i < n; ++i) {\n // Lookup the current binding.\n let binding = bindings[i];\n // Check whether the key binding sequence is a match.\n let sqm = matchSequence(binding.keys, keys);\n // If there is no match, the binding is ignored.\n if (sqm === 0 /* SequenceMatch.None */) {\n continue;\n }\n // If it is a partial match and no other partial match has been\n // found, ensure the selector matches and set the partial flag.\n if (sqm === 2 /* SequenceMatch.Partial */) {\n if (targetDistance(binding.selector, event) !== -1) {\n partial.push(binding);\n }\n continue;\n }\n // Ignore the match if the selector doesn't match, or if the\n // matched node is farther away than the current best match.\n let td = targetDistance(binding.selector, event);\n if (td === -1 || td > distance) {\n continue;\n }\n // Get the specificity for the selector.\n let sp = Selector.calculateSpecificity(binding.selector);\n // Update the best match if this match is stronger.\n if (!exact || td < distance || sp >= specificity) {\n exact = binding;\n distance = td;\n specificity = sp;\n }\n }\n // Return the match result.\n return { exact, partial };\n }\n Private.matchKeyBinding = matchKeyBinding;\n /**\n * Replay a keyboard event.\n *\n * This synthetically dispatches a clone of the keyboard event.\n */\n function replayKeyEvent(event) {\n event.target.dispatchEvent(cloneKeyboardEvent(event));\n }\n Private.replayKeyEvent = replayKeyEvent;\n function formatKey(key) {\n if (Platform.IS_MAC) {\n return MAC_DISPLAY.hasOwnProperty(key) ? MAC_DISPLAY[key] : key;\n }\n else {\n return WIN_DISPLAY.hasOwnProperty(key) ? WIN_DISPLAY[key] : key;\n }\n }\n Private.formatKey = formatKey;\n const MAC_DISPLAY = {\n Backspace: '⌫',\n Tab: '⇥',\n Enter: '⏎',\n Shift: '⇧',\n Ctrl: '⌃',\n Alt: '⌥',\n Escape: '⎋',\n PageUp: '⇞',\n PageDown: '⇟',\n End: '↘',\n Home: '↖',\n ArrowLeft: '←',\n ArrowUp: '↑',\n ArrowRight: '→',\n ArrowDown: '↓',\n Delete: '⌦',\n Cmd: '⌘'\n };\n const WIN_DISPLAY = {\n Escape: 'Esc',\n PageUp: 'Page Up',\n PageDown: 'Page Down',\n ArrowLeft: 'Left',\n ArrowUp: 'Up',\n ArrowRight: 'Right',\n ArrowDown: 'Down',\n Delete: 'Del'\n };\n /**\n * A singleton empty string function.\n */\n const emptyStringFunc = () => '';\n /**\n * A singleton `-1` number function\n */\n const negativeOneFunc = () => -1;\n /**\n * A singleton true boolean function.\n */\n const trueFunc = () => true;\n /**\n * A singleton false boolean function.\n */\n const falseFunc = () => false;\n /**\n * A singleton empty dataset function.\n */\n const emptyDatasetFunc = () => ({});\n /**\n * A singleton undefined function\n */\n const undefinedFunc = () => undefined;\n /**\n * Cast a value or command func to a command func.\n */\n function asFunc(value, dfault) {\n if (value === undefined) {\n return dfault;\n }\n if (typeof value === 'function') {\n return value;\n }\n return () => value;\n }\n /**\n * Validate the selector for an options object.\n *\n * This returns the validated selector, or throws if the selector is\n * invalid or contains commas.\n */\n function validateSelector(options) {\n if (options.selector.indexOf(',') !== -1) {\n throw new Error(`Selector cannot contain commas: ${options.selector}`);\n }\n if (!Selector.isValid(options.selector)) {\n throw new Error(`Invalid selector: ${options.selector}`);\n }\n return options.selector;\n }\n /**\n * Test whether a key binding sequence matches a key sequence.\n *\n * Returns a `SequenceMatch` value indicating the type of match.\n */\n function matchSequence(bindKeys, userKeys) {\n if (bindKeys.length < userKeys.length) {\n return 0 /* SequenceMatch.None */;\n }\n for (let i = 0, n = userKeys.length; i < n; ++i) {\n if (bindKeys[i] !== userKeys[i]) {\n return 0 /* SequenceMatch.None */;\n }\n }\n if (bindKeys.length > userKeys.length) {\n return 2 /* SequenceMatch.Partial */;\n }\n return 1 /* SequenceMatch.Exact */;\n }\n /**\n * Find the distance from the target node to the first matching node.\n *\n * This traverses the event path from `target` to `currentTarget` and\n * computes the distance from `target` to the first node which matches\n * the CSS selector. If no match is found, `-1` is returned.\n */\n function targetDistance(selector, event) {\n let targ = event.target;\n let curr = event.currentTarget;\n for (let dist = 0; targ !== null; targ = targ.parentElement, ++dist) {\n if (targ.hasAttribute('data-lm-suppress-shortcuts')) {\n return -1;\n }\n if (Selector.matches(targ, selector)) {\n return dist;\n }\n if (targ === curr) {\n return -1;\n }\n }\n return -1;\n }\n /**\n * Clone a keyboard event.\n */\n function cloneKeyboardEvent(event) {\n // A custom event is required because Chrome nulls out the\n // `keyCode` field in user-generated `KeyboardEvent` types.\n let clone = document.createEvent('Event');\n let bubbles = event.bubbles || true;\n let cancelable = event.cancelable || true;\n clone.initEvent(event.type || 'keydown', bubbles, cancelable);\n clone.key = event.key || '';\n clone.keyCode = event.keyCode || 0;\n clone.which = event.keyCode || 0;\n clone.ctrlKey = event.ctrlKey || false;\n clone.altKey = event.altKey || false;\n clone.shiftKey = event.shiftKey || false;\n clone.metaKey = event.metaKey || false;\n clone.view = event.view || window;\n return clone;\n }\n})(Private || (Private = {}));\n\nexport { CommandRegistry };\n//# sourceMappingURL=index.es6.js.map\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@lumino/algorithm')) :\n typeof define === 'function' && define.amd ? define(['exports', '@lumino/algorithm'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.lumino_coreutils = {}, global.lumino_algorithm));\n})(this, (function (exports, algorithm) { 'use strict';\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for JSON-specific functions.\n */\n exports.JSONExt = void 0;\n (function (JSONExt) {\n /**\n * A shared frozen empty JSONObject\n */\n JSONExt.emptyObject = Object.freeze({});\n /**\n * A shared frozen empty JSONArray\n */\n JSONExt.emptyArray = Object.freeze([]);\n /**\n * Test whether a JSON value is a primitive.\n *\n * @param value - The JSON value of interest.\n *\n * @returns `true` if the value is a primitive,`false` otherwise.\n */\n function isPrimitive(value) {\n return (value === null ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string');\n }\n JSONExt.isPrimitive = isPrimitive;\n function isArray(value) {\n return Array.isArray(value);\n }\n JSONExt.isArray = isArray;\n function isObject(value) {\n return !isPrimitive(value) && !isArray(value);\n }\n JSONExt.isObject = isObject;\n /**\n * Compare two JSON values for deep equality.\n *\n * @param first - The first JSON value of interest.\n *\n * @param second - The second JSON value of interest.\n *\n * @returns `true` if the values are equivalent, `false` otherwise.\n */\n function deepEqual(first, second) {\n // Check referential and primitive equality first.\n if (first === second) {\n return true;\n }\n // If one is a primitive, the `===` check ruled out the other.\n if (isPrimitive(first) || isPrimitive(second)) {\n return false;\n }\n // Test whether they are arrays.\n let a1 = isArray(first);\n let a2 = isArray(second);\n // Bail if the types are different.\n if (a1 !== a2) {\n return false;\n }\n // If they are both arrays, compare them.\n if (a1 && a2) {\n return deepArrayEqual(first, second);\n }\n // At this point, they must both be objects.\n return deepObjectEqual(first, second);\n }\n JSONExt.deepEqual = deepEqual;\n /**\n * Create a deep copy of a JSON value.\n *\n * @param value - The JSON value to copy.\n *\n * @returns A deep copy of the given JSON value.\n */\n function deepCopy(value) {\n // Do nothing for primitive values.\n if (isPrimitive(value)) {\n return value;\n }\n // Deep copy an array.\n if (isArray(value)) {\n return deepArrayCopy(value);\n }\n // Deep copy an object.\n return deepObjectCopy(value);\n }\n JSONExt.deepCopy = deepCopy;\n /**\n * Compare two JSON arrays for deep equality.\n */\n function deepArrayEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Test the arrays for equal length.\n if (first.length !== second.length) {\n return false;\n }\n // Compare the values for equality.\n for (let i = 0, n = first.length; i < n; ++i) {\n if (!deepEqual(first[i], second[i])) {\n return false;\n }\n }\n // At this point, the arrays are equal.\n return true;\n }\n /**\n * Compare two JSON objects for deep equality.\n */\n function deepObjectEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Check for the first object's keys in the second object.\n for (let key in first) {\n if (first[key] !== undefined && !(key in second)) {\n return false;\n }\n }\n // Check for the second object's keys in the first object.\n for (let key in second) {\n if (second[key] !== undefined && !(key in first)) {\n return false;\n }\n }\n // Compare the values for equality.\n for (let key in first) {\n // Get the values.\n let firstValue = first[key];\n let secondValue = second[key];\n // If both are undefined, ignore the key.\n if (firstValue === undefined && secondValue === undefined) {\n continue;\n }\n // If only one value is undefined, the objects are not equal.\n if (firstValue === undefined || secondValue === undefined) {\n return false;\n }\n // Compare the values.\n if (!deepEqual(firstValue, secondValue)) {\n return false;\n }\n }\n // At this point, the objects are equal.\n return true;\n }\n /**\n * Create a deep copy of a JSON array.\n */\n function deepArrayCopy(value) {\n let result = new Array(value.length);\n for (let i = 0, n = value.length; i < n; ++i) {\n result[i] = deepCopy(value[i]);\n }\n return result;\n }\n /**\n * Create a deep copy of a JSON object.\n */\n function deepObjectCopy(value) {\n let result = {};\n for (let key in value) {\n // Ignore undefined values.\n let subvalue = value[key];\n if (subvalue === undefined) {\n continue;\n }\n result[key] = deepCopy(subvalue);\n }\n return result;\n }\n })(exports.JSONExt || (exports.JSONExt = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * An object which stores MIME data for general application use.\n *\n * #### Notes\n * This class does not attempt to enforce \"correctness\" of MIME types\n * and their associated data. Since this class is designed to transfer\n * arbitrary data and objects within the same application, it assumes\n * that the user provides correct and accurate data.\n */\n class MimeData {\n constructor() {\n this._types = [];\n this._values = [];\n }\n /**\n * Get an array of the MIME types contained within the dataset.\n *\n * @returns A new array of the MIME types, in order of insertion.\n */\n types() {\n return this._types.slice();\n }\n /**\n * Test whether the dataset has an entry for the given type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns `true` if the dataset contains a value for the given\n * MIME type, `false` otherwise.\n */\n hasData(mime) {\n return this._types.indexOf(mime) !== -1;\n }\n /**\n * Get the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns The value for the given MIME type, or `undefined` if\n * the dataset does not contain a value for the type.\n */\n getData(mime) {\n let i = this._types.indexOf(mime);\n return i !== -1 ? this._values[i] : undefined;\n }\n /**\n * Set the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @param data - The data value for the given MIME type.\n *\n * #### Notes\n * This will overwrite any previous entry for the MIME type.\n */\n setData(mime, data) {\n this.clearData(mime);\n this._types.push(mime);\n this._values.push(data);\n }\n /**\n * Remove the data entry for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * #### Notes\n * This is a no-op if there is no entry for the given MIME type.\n */\n clearData(mime) {\n let i = this._types.indexOf(mime);\n if (i !== -1) {\n this._types.splice(i, 1);\n this._values.splice(i, 1);\n }\n }\n /**\n * Remove all data entries from the dataset.\n */\n clear() {\n this._types.length = 0;\n this._values.length = 0;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /**\n * Plugin registry.\n */\n class PluginRegistry {\n constructor(options = {}) {\n this._application = null;\n this._validatePlugin = () => true;\n this._plugins = new Map();\n this._services = new Map();\n if (options.validatePlugin) {\n console.info('Plugins may be rejected by the custom validation plugin method.');\n this._validatePlugin = options.validatePlugin;\n }\n }\n /**\n * The application object.\n *\n * It will be provided as first argument to the\n * plugins activation and deactivation functions.\n *\n * It can only be set once.\n *\n * By default, it is `null`.\n */\n get application() {\n return this._application;\n }\n set application(v) {\n if (this._application !== null) {\n throw Error('PluginRegistry.application is already set. It cannot be overridden.');\n }\n this._application = v;\n }\n /**\n * The list of all the deferred plugins.\n */\n get deferredPlugins() {\n return Array.from(this._plugins)\n .filter(([id, plugin]) => plugin.autoStart === 'defer')\n .map(([id, plugin]) => id);\n }\n /**\n * Get a plugin description.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns The plugin description.\n */\n getPluginDescription(id) {\n var _a, _b;\n return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.description) !== null && _b !== void 0 ? _b : '';\n }\n /**\n * Test whether a plugin is registered with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns `true` if the plugin is registered, `false` otherwise.\n */\n hasPlugin(id) {\n return this._plugins.has(id);\n }\n /**\n * Test whether a plugin is activated with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns `true` if the plugin is activated, `false` otherwise.\n */\n isPluginActivated(id) {\n var _a, _b;\n return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.activated) !== null && _b !== void 0 ? _b : false;\n }\n /**\n * List the IDs of the plugins registered with the application.\n *\n * @returns A new array of the registered plugin IDs.\n */\n listPlugins() {\n return Array.from(this._plugins.keys());\n }\n /**\n * Register a plugin with the application.\n *\n * @param plugin - The plugin to register.\n *\n * #### Notes\n * An error will be thrown if a plugin with the same ID is already\n * registered, or if the plugin has a circular dependency.\n *\n * If the plugin provides a service which has already been provided\n * by another plugin, the new service will override the old service.\n */\n registerPlugin(plugin) {\n // Throw an error if the plugin ID is already registered.\n if (this._plugins.has(plugin.id)) {\n throw new TypeError(`Plugin '${plugin.id}' is already registered.`);\n }\n if (!this._validatePlugin(plugin)) {\n throw new Error(`Plugin '${plugin.id}' is not valid.`);\n }\n // Create the normalized plugin data.\n const data = Private.createPluginData(plugin);\n // Ensure the plugin does not cause a cyclic dependency.\n Private.ensureNoCycle(data, this._plugins, this._services);\n // Add the service token to the service map.\n if (data.provides) {\n this._services.set(data.provides, data.id);\n }\n // Add the plugin to the plugin map.\n this._plugins.set(data.id, data);\n }\n /**\n * Register multiple plugins with the application.\n *\n * @param plugins - The plugins to register.\n *\n * #### Notes\n * This calls `registerPlugin()` for each of the given plugins.\n */\n registerPlugins(plugins) {\n for (const plugin of plugins) {\n this.registerPlugin(plugin);\n }\n }\n /**\n * Deregister a plugin with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @param force - Whether to deregister the plugin even if it is active.\n */\n deregisterPlugin(id, force) {\n const plugin = this._plugins.get(id);\n if (!plugin) {\n return;\n }\n if (plugin.activated && !force) {\n throw new Error(`Plugin '${id}' is still active.`);\n }\n this._plugins.delete(id);\n }\n /**\n * Activate the plugin with the given ID.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns A promise which resolves when the plugin is activated\n * or rejects with an error if it cannot be activated.\n */\n async activatePlugin(id) {\n // Reject the promise if the plugin is not registered.\n const plugin = this._plugins.get(id);\n if (!plugin) {\n throw new ReferenceError(`Plugin '${id}' is not registered.`);\n }\n // Resolve immediately if the plugin is already activated.\n if (plugin.activated) {\n return;\n }\n // Return the pending resolver promise if it exists.\n if (plugin.promise) {\n return plugin.promise;\n }\n // Resolve the required services for the plugin.\n const required = plugin.requires.map(t => this.resolveRequiredService(t));\n // Resolve the optional services for the plugin.\n const optional = plugin.optional.map(t => this.resolveOptionalService(t));\n // Setup the resolver promise for the plugin.\n plugin.promise = Promise.all([...required, ...optional])\n .then(services => plugin.activate.apply(undefined, [this.application, ...services]))\n .then(service => {\n plugin.service = service;\n plugin.activated = true;\n plugin.promise = null;\n })\n .catch(error => {\n plugin.promise = null;\n throw error;\n });\n // Return the pending resolver promise.\n return plugin.promise;\n }\n /**\n * Activate all the deferred plugins.\n *\n * @returns A promise which will resolve when each plugin is activated\n * or rejects with an error if one cannot be activated.\n */\n async activatePlugins(kind, options = {}) {\n switch (kind) {\n case 'defer': {\n const promises = this.deferredPlugins\n .filter(pluginId => this._plugins.get(pluginId).autoStart)\n .map(pluginId => {\n return this.activatePlugin(pluginId);\n });\n await Promise.all(promises);\n break;\n }\n case 'startUp': {\n // Collect the ids of the startup plugins.\n const startups = Private.collectStartupPlugins(this._plugins, options);\n // Generate the activation promises.\n const promises = startups.map(async (id) => {\n try {\n return await this.activatePlugin(id);\n }\n catch (error) {\n console.error(`Plugin '${id}' failed to activate.`, error);\n }\n });\n await Promise.all(promises);\n break;\n }\n }\n }\n /**\n * Deactivate the plugin and its downstream dependents if and only if the\n * plugin and its dependents all support `deactivate`.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns A list of IDs of downstream plugins deactivated with this one.\n */\n async deactivatePlugin(id) {\n // Reject the promise if the plugin is not registered.\n const plugin = this._plugins.get(id);\n if (!plugin) {\n throw new ReferenceError(`Plugin '${id}' is not registered.`);\n }\n // Bail early if the plugin is not activated.\n if (!plugin.activated) {\n return [];\n }\n // Check that this plugin can deactivate.\n if (!plugin.deactivate) {\n throw new TypeError(`Plugin '${id}'#deactivate() method missing`);\n }\n // Find the optimal deactivation order for plugins downstream of this one.\n const manifest = Private.findDependents(id, this._plugins, this._services);\n const downstream = manifest.map(id => this._plugins.get(id));\n // Check that all downstream plugins can deactivate.\n for (const plugin of downstream) {\n if (!plugin.deactivate) {\n throw new TypeError(`Plugin ${plugin.id}#deactivate() method missing (depends on ${id})`);\n }\n }\n // Deactivate all downstream plugins.\n for (const plugin of downstream) {\n const services = [...plugin.requires, ...plugin.optional].map(service => {\n const id = this._services.get(service);\n return id ? this._plugins.get(id).service : null;\n });\n // Await deactivation so the next plugins only receive active services.\n await plugin.deactivate(this.application, ...services);\n plugin.service = null;\n plugin.activated = false;\n }\n // Remove plugin ID and return manifest of deactivated plugins.\n manifest.pop();\n return manifest;\n }\n /**\n * Resolve a required service of a given type.\n *\n * @param token - The token for the service type of interest.\n *\n * @returns A promise which resolves to an instance of the requested\n * service, or rejects with an error if it cannot be resolved.\n *\n * #### Notes\n * Services are singletons. The same instance will be returned each\n * time a given service token is resolved.\n *\n * If the plugin which provides the service has not been activated,\n * resolving the service will automatically activate the plugin.\n *\n * User code will not typically call this method directly. Instead,\n * the required services for the user's plugins will be resolved\n * automatically when the plugin is activated.\n */\n async resolveRequiredService(token) {\n // Reject the promise if there is no provider for the type.\n const id = this._services.get(token);\n if (!id) {\n throw new TypeError(`No provider for: ${token.name}.`);\n }\n // Activate the plugin if necessary.\n const plugin = this._plugins.get(id);\n if (!plugin.activated) {\n await this.activatePlugin(id);\n }\n return plugin.service;\n }\n /**\n * Resolve an optional service of a given type.\n *\n * @param token - The token for the service type of interest.\n *\n * @returns A promise which resolves to an instance of the requested\n * service, or `null` if it cannot be resolved.\n *\n * #### Notes\n * Services are singletons. The same instance will be returned each\n * time a given service token is resolved.\n *\n * If the plugin which provides the service has not been activated,\n * resolving the service will automatically activate the plugin.\n *\n * User code will not typically call this method directly. Instead,\n * the optional services for the user's plugins will be resolved\n * automatically when the plugin is activated.\n */\n async resolveOptionalService(token) {\n // Resolve with `null` if there is no provider for the type.\n const id = this._services.get(token);\n if (!id) {\n return null;\n }\n // Activate the plugin if necessary.\n const plugin = this._plugins.get(id);\n if (!plugin.activated) {\n try {\n await this.activatePlugin(id);\n }\n catch (reason) {\n console.error(reason);\n return null;\n }\n }\n return plugin.service;\n }\n }\n /**\n * The namespace for the module implementation details.\n */\n var Private;\n (function (Private) {\n class PluginData {\n constructor(plugin) {\n var _a, _b, _c, _d;\n this._activated = false;\n this._promise = null;\n this._service = null;\n this.id = plugin.id;\n this.description = (_a = plugin.description) !== null && _a !== void 0 ? _a : '';\n this.activate = plugin.activate;\n this.deactivate = (_b = plugin.deactivate) !== null && _b !== void 0 ? _b : null;\n this.provides = (_c = plugin.provides) !== null && _c !== void 0 ? _c : null;\n this.autoStart = (_d = plugin.autoStart) !== null && _d !== void 0 ? _d : false;\n this.requires = plugin.requires ? plugin.requires.slice() : [];\n this.optional = plugin.optional ? plugin.optional.slice() : [];\n }\n /**\n * Whether the plugin has been activated.\n */\n get activated() {\n return this._activated;\n }\n set activated(a) {\n this._activated = a;\n }\n /**\n * The resolved service for the plugin, or `null`.\n */\n get service() {\n return this._service;\n }\n set service(s) {\n this._service = s;\n }\n /**\n * The pending resolver promise, or `null`.\n */\n get promise() {\n return this._promise;\n }\n set promise(p) {\n this._promise = p;\n }\n }\n /**\n * Create a normalized plugin data object for the given plugin.\n */\n function createPluginData(plugin) {\n return new PluginData(plugin);\n }\n Private.createPluginData = createPluginData;\n /**\n * Ensure no cycle is present in the plugin resolution graph.\n *\n * If a cycle is detected, an error will be thrown.\n */\n function ensureNoCycle(plugin, plugins, services) {\n const dependencies = [...plugin.requires, ...plugin.optional];\n const visit = (token) => {\n if (token === plugin.provides) {\n return true;\n }\n const id = services.get(token);\n if (!id) {\n return false;\n }\n const visited = plugins.get(id);\n const dependencies = [...visited.requires, ...visited.optional];\n if (dependencies.length === 0) {\n return false;\n }\n trace.push(id);\n if (dependencies.some(visit)) {\n return true;\n }\n trace.pop();\n return false;\n };\n // Bail early if there cannot be a cycle.\n if (!plugin.provides || dependencies.length === 0) {\n return;\n }\n // Setup a stack to trace service resolution.\n const trace = [plugin.id];\n // Throw an exception if a cycle is present.\n if (dependencies.some(visit)) {\n throw new ReferenceError(`Cycle detected: ${trace.join(' -> ')}.`);\n }\n }\n Private.ensureNoCycle = ensureNoCycle;\n /**\n * Find dependents in deactivation order.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @param plugins - The map containing all plugins.\n *\n * @param services - The map containing all services.\n *\n * @returns A list of dependent plugin IDs in order of deactivation\n *\n * #### Notes\n * The final item of the returned list is always the plugin of interest.\n */\n function findDependents(id, plugins, services) {\n const edges = new Array();\n const add = (id) => {\n const plugin = plugins.get(id);\n // FIXME In the case of missing optional dependencies, we may consider\n // deactivating and reactivating the plugin without the missing service.\n const dependencies = [...plugin.requires, ...plugin.optional];\n edges.push(...dependencies.reduce((acc, dep) => {\n const service = services.get(dep);\n if (service) {\n // An edge is oriented from dependent to provider.\n acc.push([id, service]);\n }\n return acc;\n }, []));\n };\n for (const id of plugins.keys()) {\n add(id);\n }\n // Filter edges\n // - Get all packages that dependent on the package to be deactivated\n const newEdges = edges.filter(edge => edge[1] === id);\n let oldSize = 0;\n while (newEdges.length > oldSize) {\n const previousSize = newEdges.length;\n // Get all packages that dependent on packages that will be deactivated\n const packagesOfInterest = new Set(newEdges.map(edge => edge[0]));\n for (const poi of packagesOfInterest) {\n edges\n .filter(edge => edge[1] === poi)\n .forEach(edge => {\n // We check it is not already included to deal with circular dependencies\n if (!newEdges.includes(edge)) {\n newEdges.push(edge);\n }\n });\n }\n oldSize = previousSize;\n }\n const sorted = algorithm.topologicSort(newEdges);\n const index = sorted.findIndex(candidate => candidate === id);\n if (index === -1) {\n return [id];\n }\n return sorted.slice(0, index + 1);\n }\n Private.findDependents = findDependents;\n /**\n * Collect the IDs of the plugins to activate on startup.\n */\n function collectStartupPlugins(plugins, options) {\n // Create a set to hold the plugin IDs.\n const collection = new Set();\n // Collect the auto-start (non deferred) plugins.\n for (const id of plugins.keys()) {\n if (plugins.get(id).autoStart === true) {\n collection.add(id);\n }\n }\n // Add the startup plugins.\n if (options.startPlugins) {\n for (const id of options.startPlugins) {\n collection.add(id);\n }\n }\n // Remove the ignored plugins.\n if (options.ignorePlugins) {\n for (const id of options.ignorePlugins) {\n collection.delete(id);\n }\n }\n // Return the collected startup plugins.\n return Array.from(collection);\n }\n Private.collectStartupPlugins = collectStartupPlugins;\n })(Private || (Private = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A class which wraps a promise into a delegate object.\n *\n * #### Notes\n * This class is useful when the logic to resolve or reject a promise\n * cannot be defined at the point where the promise is created.\n */\n class PromiseDelegate {\n /**\n * Construct a new promise delegate.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n /**\n * Resolve the wrapped promise with the given value.\n *\n * @param value - The value to use for resolving the promise.\n */\n resolve(value) {\n let resolve = this._resolve;\n resolve(value);\n }\n /**\n * Reject the wrapped promise with the given value.\n *\n * @reason - The reason for rejecting the promise.\n */\n reject(reason) {\n let reject = this._reject;\n reject(reason);\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A runtime object which captures compile-time type information.\n *\n * #### Notes\n * A token captures the compile-time type of an interface or class in\n * an object which can be used at runtime in a type-safe fashion.\n */\n class Token {\n /**\n * Construct a new token.\n *\n * @param name - A human readable name for the token.\n * @param description - Token purpose description for documentation.\n */\n constructor(name, description) {\n this.name = name;\n this.description = description !== null && description !== void 0 ? description : '';\n this._tokenStructuralPropertyT = null;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n // Fallback\n function fallbackRandomValues(buffer) {\n let value = 0;\n for (let i = 0, n = buffer.length; i < n; ++i) {\n if (i % 4 === 0) {\n value = (Math.random() * 0xffffffff) >>> 0;\n }\n buffer[i] = value & 0xff;\n value >>>= 8;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for random number related functionality.\n */\n exports.Random = void 0;\n (function (Random) {\n /**\n * A function which generates random bytes.\n *\n * @param buffer - The `Uint8Array` to fill with random bytes.\n *\n * #### Notes\n * A cryptographically strong random number generator will be used if\n * available. Otherwise, `Math.random` will be used as a fallback for\n * randomness.\n *\n * The following RNGs are supported, listed in order of precedence:\n * - `window.crypto.getRandomValues`\n * - `window.msCrypto.getRandomValues`\n * - `require('crypto').randomFillSync\n * - `require('crypto').randomBytes\n * - `Math.random`\n */\n Random.getRandomValues = (() => {\n // Look up the crypto module if available.\n const crypto = (typeof window !== 'undefined' && (window.crypto || window.msCrypto)) ||\n null;\n // Modern browsers and IE 11\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return function getRandomValues(buffer) {\n return crypto.getRandomValues(buffer);\n };\n }\n // Fallback\n return fallbackRandomValues;\n })();\n })(exports.Random || (exports.Random = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A function which creates a function that generates UUID v4 identifiers.\n *\n * @returns A new function that creates a UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n function uuid4Factory(getRandomValues) {\n // Create a 16 byte array to hold the random values.\n const bytes = new Uint8Array(16);\n // Create a look up table from bytes to hex strings.\n const lut = new Array(256);\n // Pad the single character hex digits with a leading zero.\n for (let i = 0; i < 16; ++i) {\n lut[i] = '0' + i.toString(16);\n }\n // Populate the rest of the hex digits.\n for (let i = 16; i < 256; ++i) {\n lut[i] = i.toString(16);\n }\n // Return a function which generates the UUID.\n return function uuid4() {\n // Get a new batch of random values.\n getRandomValues(bytes);\n // Set the UUID version number to 4.\n bytes[6] = 0x40 | (bytes[6] & 0x0f);\n // Set the clock sequence bit to the RFC spec.\n bytes[8] = 0x80 | (bytes[8] & 0x3f);\n // Assemble the UUID string.\n return (lut[bytes[0]] +\n lut[bytes[1]] +\n lut[bytes[2]] +\n lut[bytes[3]] +\n '-' +\n lut[bytes[4]] +\n lut[bytes[5]] +\n '-' +\n lut[bytes[6]] +\n lut[bytes[7]] +\n '-' +\n lut[bytes[8]] +\n lut[bytes[9]] +\n '-' +\n lut[bytes[10]] +\n lut[bytes[11]] +\n lut[bytes[12]] +\n lut[bytes[13]] +\n lut[bytes[14]] +\n lut[bytes[15]]);\n };\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for UUID related functionality.\n */\n exports.UUID = void 0;\n (function (UUID) {\n /**\n * A function which generates UUID v4 identifiers.\n *\n * @returns A new UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n UUID.uuid4 = uuid4Factory(exports.Random.getRandomValues);\n })(exports.UUID || (exports.UUID = {}));\n\n exports.MimeData = MimeData;\n exports.PluginRegistry = PluginRegistry;\n exports.PromiseDelegate = PromiseDelegate;\n exports.Token = Token;\n\n}));\n//# sourceMappingURL=index.js.map\n","import { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module disposable\n */\n/**\n * A disposable object which delegates to a callback function.\n */\nclass DisposableDelegate {\n /**\n * Construct a new disposable delegate.\n *\n * @param fn - The callback function to invoke on dispose.\n */\n constructor(fn) {\n this._fn = fn;\n }\n /**\n * Test whether the delegate has been disposed.\n */\n get isDisposed() {\n return !this._fn;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (!this._fn) {\n return;\n }\n let fn = this._fn;\n this._fn = null;\n fn();\n }\n}\n/**\n * An observable disposable object which delegates to a callback function.\n */\nclass ObservableDisposableDelegate extends DisposableDelegate {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the delegate is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * An object which manages a collection of disposable items.\n */\nclass DisposableSet {\n constructor() {\n this._isDisposed = false;\n this._items = new Set();\n }\n /**\n * Test whether the set has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n this._items.forEach(item => {\n item.dispose();\n });\n this._items.clear();\n }\n /**\n * Test whether the set contains a specific item.\n *\n * @param item - The item of interest.\n *\n * @returns `true` if the set contains the item, `false` otherwise.\n */\n contains(item) {\n return this._items.has(item);\n }\n /**\n * Add a disposable item to the set.\n *\n * @param item - The item to add to the set.\n *\n * #### Notes\n * If the item is already contained in the set, this is a no-op.\n */\n add(item) {\n this._items.add(item);\n }\n /**\n * Remove a disposable item from the set.\n *\n * @param item - The item to remove from the set.\n *\n * #### Notes\n * If the item is not contained in the set, this is a no-op.\n */\n remove(item) {\n this._items.delete(item);\n }\n /**\n * Remove all items from the set.\n */\n clear() {\n this._items.clear();\n }\n}\n/**\n * The namespace for the `DisposableSet` class statics.\n */\n(function (DisposableSet) {\n /**\n * Create a disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new DisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n DisposableSet.from = from;\n})(DisposableSet || (DisposableSet = {}));\n/**\n * An observable object which manages a collection of disposable items.\n */\nclass ObservableDisposableSet extends DisposableSet {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the set is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * The namespace for the `ObservableDisposableSet` class statics.\n */\n(function (ObservableDisposableSet) {\n /**\n * Create an observable disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new ObservableDisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n ObservableDisposableSet.from = from;\n})(ObservableDisposableSet || (ObservableDisposableSet = {}));\n\nexport { DisposableDelegate, DisposableSet, ObservableDisposableDelegate, ObservableDisposableSet };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2019, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for clipboard related functionality.\n */\nvar ClipboardExt;\n(function (ClipboardExt) {\n /**\n * Copy text to the system clipboard.\n *\n * @param text - The text to copy to the clipboard.\n */\n function copyText(text) {\n // Fetch the document body.\n const body = document.body;\n // Set up the clipboard event listener.\n const handler = (event) => {\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Set the clipboard data.\n event.clipboardData.setData('text', text);\n // Remove the event listener.\n body.removeEventListener('copy', handler, true);\n };\n // Add the event listener.\n body.addEventListener('copy', handler, true);\n // Trigger the event.\n document.execCommand('copy');\n }\n ClipboardExt.copyText = copyText;\n})(ClipboardExt || (ClipboardExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for element related utilities.\n */\nvar ElementExt;\n(function (ElementExt) {\n /**\n * Compute the box sizing for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The box sizing data for the specified element.\n */\n function boxSizing(element) {\n let style = window.getComputedStyle(element);\n let bt = parseFloat(style.borderTopWidth) || 0;\n let bl = parseFloat(style.borderLeftWidth) || 0;\n let br = parseFloat(style.borderRightWidth) || 0;\n let bb = parseFloat(style.borderBottomWidth) || 0;\n let pt = parseFloat(style.paddingTop) || 0;\n let pl = parseFloat(style.paddingLeft) || 0;\n let pr = parseFloat(style.paddingRight) || 0;\n let pb = parseFloat(style.paddingBottom) || 0;\n let hs = bl + pl + pr + br;\n let vs = bt + pt + pb + bb;\n return {\n borderTop: bt,\n borderLeft: bl,\n borderRight: br,\n borderBottom: bb,\n paddingTop: pt,\n paddingLeft: pl,\n paddingRight: pr,\n paddingBottom: pb,\n horizontalSum: hs,\n verticalSum: vs\n };\n }\n ElementExt.boxSizing = boxSizing;\n /**\n * Compute the size limits for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The size limit data for the specified element.\n */\n function sizeLimits(element) {\n let style = window.getComputedStyle(element);\n let minWidth = parseFloat(style.minWidth) || 0;\n let minHeight = parseFloat(style.minHeight) || 0;\n let maxWidth = parseFloat(style.maxWidth) || Infinity;\n let maxHeight = parseFloat(style.maxHeight) || Infinity;\n maxWidth = Math.max(minWidth, maxWidth);\n maxHeight = Math.max(minHeight, maxHeight);\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n ElementExt.sizeLimits = sizeLimits;\n /**\n * Test whether a client position lies within an element.\n *\n * @param element - The DOM element of interest.\n *\n * @param clientX - The client X coordinate of interest.\n *\n * @param clientY - The client Y coordinate of interest.\n *\n * @returns Whether the point is within the given element.\n */\n function hitTest(element, clientX, clientY) {\n let rect = element.getBoundingClientRect();\n return (clientX >= rect.left &&\n clientX < rect.right &&\n clientY >= rect.top &&\n clientY < rect.bottom);\n }\n ElementExt.hitTest = hitTest;\n /**\n * Vertically scroll an element into view if needed.\n *\n * @param area - The scroll area element.\n *\n * @param element - The element of interest.\n *\n * #### Notes\n * This follows the \"nearest\" behavior of the native `scrollIntoView`\n * method, which is not supported by all browsers.\n * https://drafts.csswg.org/cssom-view/#element-scrolling-members\n *\n * If the element fully covers the visible area or is fully contained\n * within the visible area, no scrolling will take place. Otherwise,\n * the nearest edges of the area and element are aligned.\n */\n function scrollIntoViewIfNeeded(area, element) {\n let ar = area.getBoundingClientRect();\n let er = element.getBoundingClientRect();\n if (er.top <= ar.top && er.bottom >= ar.bottom) {\n return;\n }\n if (er.top < ar.top && er.height <= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.bottom > ar.bottom && er.height >= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.top < ar.top && er.height > ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n if (er.bottom > ar.bottom && er.height < ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n }\n ElementExt.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;\n})(ElementExt || (ElementExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for platform related utilities.\n */\nvar Platform;\n(function (Platform) {\n /**\n * A flag indicating whether the platform is Mac.\n */\n Platform.IS_MAC = !!navigator.platform.match(/Mac/i);\n /**\n * A flag indicating whether the platform is Windows.\n */\n Platform.IS_WIN = !!navigator.platform.match(/Win/i);\n /**\n * A flag indicating whether the browser is IE.\n */\n Platform.IS_IE = /Trident/.test(navigator.userAgent);\n /**\n * A flag indicating whether the browser is Edge.\n */\n Platform.IS_EDGE = /Edge/.test(navigator.userAgent);\n /**\n * Test whether the `accel` key is pressed.\n *\n * @param event - The keyboard or mouse event of interest.\n *\n * @returns Whether the `accel` key is pressed.\n *\n * #### Notes\n * On Mac the `accel` key is the command key. On all other\n * platforms the `accel` key is the control key.\n */\n function accelKey(event) {\n return Platform.IS_MAC ? event.metaKey : event.ctrlKey;\n }\n Platform.accelKey = accelKey;\n})(Platform || (Platform = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for selector related utilities.\n */\nvar Selector;\n(function (Selector) {\n /**\n * Calculate the specificity of a single CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns The specificity of the selector.\n *\n * #### Undefined Behavior\n * The selector is invalid.\n *\n * #### Notes\n * This is based on https://www.w3.org/TR/css3-selectors/#specificity\n *\n * A larger number represents a more specific selector.\n *\n * The smallest possible specificity is `0`.\n *\n * The result is represented as a hex number `0x` where\n * each component is the count of the respective selector clause.\n *\n * If the selector contains commas, only the first clause is used.\n *\n * The computed result is cached, so subsequent calculations for the\n * same selector are extremely fast.\n */\n function calculateSpecificity(selector) {\n if (selector in Private.specificityCache) {\n return Private.specificityCache[selector];\n }\n let result = Private.calculateSingle(selector);\n return (Private.specificityCache[selector] = result);\n }\n Selector.calculateSpecificity = calculateSpecificity;\n /**\n * Test whether a selector is a valid CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns `true` if the selector is valid, `false` otherwise.\n *\n * #### Notes\n * The computed result is cached, so subsequent tests for the same\n * selector are extremely fast.\n */\n function isValid(selector) {\n if (selector in Private.validityCache) {\n return Private.validityCache[selector];\n }\n let result = true;\n try {\n Private.testElem.querySelector(selector);\n }\n catch (err) {\n result = false;\n }\n return (Private.validityCache[selector] = result);\n }\n Selector.isValid = isValid;\n /**\n * Test whether an element matches a CSS selector.\n *\n * @param element - The element of interest.\n *\n * @param selector - The valid CSS selector of interest.\n *\n * @returns `true` if the element is a match, `false` otherwise.\n *\n * #### Notes\n * This function uses the builtin browser capabilities when possible,\n * falling back onto a document query otherwise.\n */\n function matches(element, selector) {\n return Private.protoMatchFunc.call(element, selector);\n }\n Selector.matches = matches;\n})(Selector || (Selector = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A cache of computed selector specificity values.\n */\n Private.specificityCache = Object.create(null);\n /**\n * A cache of computed selector validity.\n */\n Private.validityCache = Object.create(null);\n /**\n * An empty element for testing selector validity.\n */\n Private.testElem = document.createElement('div');\n /**\n * A cross-browser CSS selector matching prototype function.\n */\n Private.protoMatchFunc = (() => {\n let proto = Element.prototype;\n return (proto.matches ||\n proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector ||\n function (selector) {\n let elem = this;\n let matches = elem.ownerDocument\n ? elem.ownerDocument.querySelectorAll(selector)\n : [];\n return Array.prototype.indexOf.call(matches, elem) !== -1;\n });\n })();\n /**\n * Calculate the specificity of a single selector.\n *\n * The behavior is undefined if the selector is invalid.\n */\n function calculateSingle(selector) {\n // Ignore anything after the first comma.\n selector = selector.split(',', 1)[0];\n // Setup the aggregate counters.\n let a = 0;\n let b = 0;\n let c = 0;\n // Apply a regex to the front of the selector. If it succeeds, that\n // portion of the selector is removed. Returns a success/fail flag.\n function match(re) {\n let match = selector.match(re);\n if (match === null) {\n return false;\n }\n selector = selector.slice(match[0].length);\n return true;\n }\n // Replace the negation pseudo-class (which is ignored),\n // but keep its inner content (which is not ignored).\n selector = selector.replace(NEGATION_RE, ' $1 ');\n // Continue matching until the selector is consumed.\n while (selector.length > 0) {\n // Match an ID selector.\n if (match(ID_RE)) {\n a++;\n continue;\n }\n // Match a class selector.\n if (match(CLASS_RE)) {\n b++;\n continue;\n }\n // Match an attribute selector.\n if (match(ATTR_RE)) {\n b++;\n continue;\n }\n // Match a pseudo-element selector. This is done before matching\n // a pseudo-class since this regex overlaps with that regex.\n if (match(PSEUDO_ELEM_RE)) {\n c++;\n continue;\n }\n // Match a pseudo-class selector.\n if (match(PSEDUO_CLASS_RE)) {\n b++;\n continue;\n }\n // Match a plain type selector.\n if (match(TYPE_RE)) {\n c++;\n continue;\n }\n // Finally, match any ignored characters.\n if (match(IGNORE_RE)) {\n continue;\n }\n // At this point, the selector is assumed to be invalid.\n return 0;\n }\n // Clamp each component to a reasonable base.\n a = Math.min(a, 0xff);\n b = Math.min(b, 0xff);\n c = Math.min(c, 0xff);\n // Combine the components into a single result.\n return (a << 16) | (b << 8) | c;\n }\n Private.calculateSingle = calculateSingle;\n /**\n * A regex which matches an ID selector at string start.\n */\n const ID_RE = /^#[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a class selector at string start.\n */\n const CLASS_RE = /^\\.[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches an attribute selector at string start.\n */\n const ATTR_RE = /^\\[[^\\]]+\\]/;\n /**\n * A regex which matches a type selector at string start.\n */\n const TYPE_RE = /^[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a pseudo-element selector at string start.\n */\n const PSEUDO_ELEM_RE = /^(::[^\\s\\+>~#\\.\\[:]+|:first-line|:first-letter|:before|:after)/;\n /**\n * A regex which matches a pseudo-class selector at string start.\n */\n const PSEDUO_CLASS_RE = /^:[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches ignored characters at string start.\n */\n const IGNORE_RE = /^[\\s\\+>~\\*]+/;\n /**\n * A regex which matches the negation pseudo-class globally.\n */\n const NEGATION_RE = /:not\\(([^\\)]+)\\)/g;\n})(Private || (Private = {}));\n\nexport { ClipboardExt, ElementExt, Platform, Selector };\n//# sourceMappingURL=index.es6.js.map\n","import { DisposableDelegate } from '@lumino/disposable';\n\n/**\n * An object which manages a drag-drop operation.\n *\n * A drag object dispatches four different events to drop targets:\n *\n * - `'lm-dragenter'` - Dispatched when the mouse enters the target\n * element. This event must be canceled in order to receive any\n * of the other events.\n *\n * - `'lm-dragover'` - Dispatched when the mouse moves over the drop\n * target. It must cancel the event and set the `dropAction` to one\n * of the supported actions in order to receive drop events.\n *\n * - `'lm-dragleave'` - Dispatched when the mouse leaves the target\n * element. This includes moving the mouse into child elements.\n *\n * - `'lm-drop'`- Dispatched when the mouse is released over the target\n * element when the target indicates an appropriate drop action. If\n * the event is canceled, the indicated drop action is returned to\n * the initiator through the resolved promise.\n *\n * A drag operation can be terminated at any time by pressing `Escape`\n * or by disposing the drag object.\n *\n * A drag object has the ability to automatically scroll a scrollable\n * element when the mouse is hovered near one of its edges. To enable\n * this, add the `data-lm-dragscroll` attribute to any element which\n * the drag object should consider for scrolling.\n *\n * #### Notes\n * This class is designed to be used when dragging and dropping custom\n * data *within* a single application. It is *not* a replacement for\n * the native drag-drop API. Instead, it provides an API which allows\n * drag operations to be initiated programmatically and enables the\n * transfer of arbitrary non-string objects; features which are not\n * possible with the native drag-drop API.\n */\nclass Drag {\n /**\n * Construct a new drag object.\n *\n * @param options - The options for initializing the drag.\n */\n constructor(options) {\n /**\n * The scroll loop handler function.\n */\n this._onScrollFrame = () => {\n // Bail early if there is no scroll target.\n if (!this._scrollTarget) {\n return;\n }\n // Unpack the scroll target.\n let { element, edge, distance } = this._scrollTarget;\n // Calculate the scroll delta using nonlinear acceleration.\n let d = Private.SCROLL_EDGE_SIZE - distance;\n let f = Math.pow(d / Private.SCROLL_EDGE_SIZE, 2);\n let s = Math.max(1, Math.round(f * Private.SCROLL_EDGE_SIZE));\n // Scroll the element in the specified direction.\n switch (edge) {\n case 'top':\n element.scrollTop -= s;\n break;\n case 'left':\n element.scrollLeft -= s;\n break;\n case 'right':\n element.scrollLeft += s;\n break;\n case 'bottom':\n element.scrollTop += s;\n break;\n }\n // Request the next cycle of the scroll loop.\n requestAnimationFrame(this._onScrollFrame);\n };\n this._disposed = false;\n this._dropAction = 'none';\n this._override = null;\n this._currentTarget = null;\n this._currentElement = null;\n this._promise = null;\n this._scrollTarget = null;\n this._resolve = null;\n this.document = options.document || document;\n this.mimeData = options.mimeData;\n this.dragImage = options.dragImage || null;\n this.proposedAction = options.proposedAction || 'copy';\n this.supportedActions = options.supportedActions || 'all';\n this.source = options.source || null;\n }\n /**\n * Dispose of the resources held by the drag object.\n *\n * #### Notes\n * This will cancel the drag operation if it is active.\n */\n dispose() {\n // Do nothing if the drag object is already disposed.\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n // If there is a current target, dispatch a drag leave event.\n if (this._currentTarget) {\n let event = new PointerEvent('pointerup', {\n bubbles: true,\n cancelable: true,\n clientX: -1,\n clientY: -1\n });\n Private.dispatchDragLeave(this, this._currentTarget, null, event);\n }\n // Finalize the drag object with `'none'`.\n this._finalize('none');\n }\n /**\n * Test whether the drag object is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Start the drag operation at the specified client position.\n *\n * @param clientX - The client X position for the drag start.\n *\n * @param clientY - The client Y position for the drag start.\n *\n * @returns A promise which resolves to the result of the drag.\n *\n * #### Notes\n * If the drag has already been started, the promise created by the\n * first call to `start` is returned.\n *\n * If the drag operation has ended, or if the drag object has been\n * disposed, the returned promise will resolve to `'none'`.\n *\n * The drag object will be automatically disposed when drag operation\n * completes. This means `Drag` objects are for single-use only.\n *\n * This method assumes the left mouse button is already held down.\n */\n start(clientX, clientY) {\n // If the drag object is already disposed, resolve to `none`.\n if (this._disposed) {\n return Promise.resolve('none');\n }\n // If the drag has already been started, return the promise.\n if (this._promise) {\n return this._promise;\n }\n // Install the document listeners for the drag object.\n this._addListeners();\n // Attach the drag image at the specified client position.\n this._attachDragImage(clientX, clientY);\n // Create the promise which will be resolved on completion.\n this._promise = new Promise(resolve => {\n this._resolve = resolve;\n });\n // Trigger a fake move event to kick off the drag operation.\n let event = new PointerEvent('pointermove', {\n bubbles: true,\n cancelable: true,\n clientX,\n clientY\n });\n document.dispatchEvent(event);\n // Return the pending promise for the drag operation.\n return this._promise;\n }\n /**\n * Handle the DOM events for the drag operation.\n *\n * @param event - The DOM event sent to the drag object.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the document. It should not be\n * called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n default:\n // Stop all other events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * Move the drag image element to the specified location.\n *\n * This is a no-op if there is no drag image element.\n */\n moveDragImage(clientX, clientY) {\n if (!this.dragImage) {\n return;\n }\n let style = this.dragImage.style;\n style.transform = `translate(${clientX}px, ${clientY}px)`;\n }\n /**\n * Handle the `'pointermove'` event for the drag object.\n */\n _evtPointerMove(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Update the current target node and dispatch enter/leave events.\n this._updateCurrentTarget(event);\n // Update the drag scroll element.\n this._updateDragScroll(event);\n // Move the drag image to the specified client position. This is\n // performed *after* dispatching to prevent unnecessary reflows.\n this.moveDragImage(event.clientX, event.clientY);\n }\n /**\n * Handle the `'pointerup'` event for the drag object.\n */\n _evtPointerUp(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Do nothing if the left button is not released.\n if (event.button !== 0) {\n return;\n }\n // Update the current target node and dispatch enter/leave events.\n // This prevents a subtle issue where the DOM mutates under the\n // cursor after the last move event but before the drop event.\n this._updateCurrentTarget(event);\n // If there is no current target, finalize with `'none'`.\n if (!this._currentTarget) {\n this._finalize('none');\n return;\n }\n // If the last drop action was `'none'`, dispatch a leave event\n // to the current target and finalize the drag with `'none'`.\n if (this._dropAction === 'none') {\n Private.dispatchDragLeave(this, this._currentTarget, null, event);\n this._finalize('none');\n return;\n }\n // Dispatch the drop event at the current target and finalize\n // with the resulting drop action.\n let action = Private.dispatchDrop(this, this._currentTarget, event);\n this._finalize(action);\n }\n /**\n * Handle the `'keydown'` event for the drag object.\n */\n _evtKeyDown(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Cancel the drag if `Escape` is pressed.\n if (event.keyCode === 27) {\n this.dispose();\n }\n }\n /**\n * Add the document event listeners for the drag object.\n */\n _addListeners() {\n document.addEventListener('pointerdown', this, true);\n document.addEventListener('pointermove', this, true);\n document.addEventListener('pointerup', this, true);\n document.addEventListener('pointerenter', this, true);\n document.addEventListener('pointerleave', this, true);\n document.addEventListener('pointerover', this, true);\n document.addEventListener('pointerout', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('keyup', this, true);\n document.addEventListener('keypress', this, true);\n document.addEventListener('contextmenu', this, true);\n }\n /**\n * Remove the document event listeners for the drag object.\n */\n _removeListeners() {\n document.removeEventListener('pointerdown', this, true);\n document.removeEventListener('pointermove', this, true);\n document.removeEventListener('pointerup', this, true);\n document.removeEventListener('pointerenter', this, true);\n document.removeEventListener('pointerleave', this, true);\n document.removeEventListener('pointerover', this, true);\n document.removeEventListener('pointerout', this, true);\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('keyup', this, true);\n document.removeEventListener('keypress', this, true);\n document.removeEventListener('contextmenu', this, true);\n }\n /**\n * Update the drag scroll element under the mouse.\n */\n _updateDragScroll(event) {\n // Find the scroll target under the mouse.\n let target = Private.findScrollTarget(event);\n // Bail if there is nothing to scroll.\n if (!this._scrollTarget && !target) {\n return;\n }\n // Start the scroll loop if needed.\n if (!this._scrollTarget) {\n setTimeout(this._onScrollFrame, 500);\n }\n // Update the scroll target.\n this._scrollTarget = target;\n }\n /**\n * Update the current target node using the given mouse event.\n */\n _updateCurrentTarget(event) {\n // Fetch common local state.\n let prevTarget = this._currentTarget;\n let currTarget = this._currentTarget;\n let prevElem = this._currentElement;\n // Find the current indicated element at the given position.\n let currElem = Private.findElementBehindBackdrop(event, this.document);\n // Update the current element reference.\n this._currentElement = currElem;\n // If the indicated element changes from the previous iteration,\n // and is different from the current target, dispatch the exit\n // event to the target.\n if (currElem !== prevElem && currElem !== currTarget) {\n Private.dispatchDragExit(this, currTarget, currElem, event);\n }\n // If the indicated element changes from the previous iteration,\n // and is different from the current target, dispatch the enter\n // event and compute the new target element.\n if (currElem !== prevElem && currElem !== currTarget) {\n currTarget = Private.dispatchDragEnter(this, currElem, currTarget, event);\n }\n // If the current target element has changed, update the current\n // target reference and dispatch the leave event to the old target.\n if (currTarget !== prevTarget) {\n this._currentTarget = currTarget;\n Private.dispatchDragLeave(this, prevTarget, currTarget, event);\n }\n // Dispatch the drag over event and update the drop action.\n let action = Private.dispatchDragOver(this, currTarget, event);\n this._setDropAction(action);\n }\n /**\n * Attach the drag image element at the specified location.\n *\n * This is a no-op if there is no drag image element.\n */\n _attachDragImage(clientX, clientY) {\n if (!this.dragImage) {\n return;\n }\n this.dragImage.classList.add('lm-mod-drag-image');\n let style = this.dragImage.style;\n style.pointerEvents = 'none';\n style.position = 'fixed';\n style.transform = `translate(${clientX}px, ${clientY}px)`;\n const body = this.document instanceof Document\n ? this.document.body\n : this.document.firstElementChild;\n body.appendChild(this.dragImage);\n }\n /**\n * Detach the drag image element from the DOM.\n *\n * This is a no-op if there is no drag image element.\n */\n _detachDragImage() {\n if (!this.dragImage) {\n return;\n }\n let parent = this.dragImage.parentNode;\n if (!parent) {\n return;\n }\n parent.removeChild(this.dragImage);\n }\n /**\n * Set the internal drop action state and update the drag cursor.\n */\n _setDropAction(action) {\n action = Private.validateAction(action, this.supportedActions);\n if (this._override && this._dropAction === action) {\n return;\n }\n switch (action) {\n case 'none':\n this._dropAction = action;\n this._override = Drag.overrideCursor('no-drop', this.document);\n break;\n case 'copy':\n this._dropAction = action;\n this._override = Drag.overrideCursor('copy', this.document);\n break;\n case 'link':\n this._dropAction = action;\n this._override = Drag.overrideCursor('alias', this.document);\n break;\n case 'move':\n this._dropAction = action;\n this._override = Drag.overrideCursor('move', this.document);\n break;\n }\n }\n /**\n * Finalize the drag operation and resolve the drag promise.\n */\n _finalize(action) {\n // Store the resolve function as a temp variable.\n let resolve = this._resolve;\n // Remove the document event listeners.\n this._removeListeners();\n // Detach the drag image.\n this._detachDragImage();\n // Dispose of the cursor override.\n if (this._override) {\n this._override.dispose();\n this._override = null;\n }\n // Clear the mime data.\n this.mimeData.clear();\n // Clear the rest of the internal drag state.\n this._disposed = true;\n this._dropAction = 'none';\n this._currentTarget = null;\n this._currentElement = null;\n this._scrollTarget = null;\n this._promise = null;\n this._resolve = null;\n // Finally, resolve the promise to the given drop action.\n if (resolve) {\n resolve(action);\n }\n }\n}\n/**\n * The namespace for the `Drag` class statics.\n */\n(function (Drag) {\n /**\n * A custom event used for drag-drop operations.\n *\n * #### Notes\n * In order to receive `'lm-dragover'`, `'lm-dragleave'`, or `'lm-drop'`\n * events, a drop target must cancel the `'lm-dragenter'` event by\n * calling the event's `preventDefault()` method.\n */\n class Event extends DragEvent {\n constructor(event, options) {\n super(options.type, {\n bubbles: true,\n cancelable: true,\n altKey: event.altKey,\n button: event.button,\n clientX: event.clientX,\n clientY: event.clientY,\n ctrlKey: event.ctrlKey,\n detail: 0,\n metaKey: event.metaKey,\n relatedTarget: options.related,\n screenX: event.screenX,\n screenY: event.screenY,\n shiftKey: event.shiftKey,\n view: window\n });\n const { drag } = options;\n this.dropAction = 'none';\n this.mimeData = drag.mimeData;\n this.proposedAction = drag.proposedAction;\n this.supportedActions = drag.supportedActions;\n this.source = drag.source;\n }\n }\n Drag.Event = Event;\n /**\n * Override the cursor icon for the entire document.\n *\n * @param cursor - The string representing the cursor style.\n *\n * @returns A disposable which will clear the override when disposed.\n *\n * #### Notes\n * The most recent call to `overrideCursor` takes precedence.\n * Disposing an old override has no effect on the current override.\n *\n * This utility function is used by the `Drag` class to override the\n * mouse cursor during a drag-drop operation, but it can also be used\n * by other classes to fix the cursor icon during normal mouse drags.\n *\n * #### Example\n * ```typescript\n * import { Drag } from '@lumino/dragdrop';\n *\n * // Force the cursor to be 'wait' for the entire document.\n * let override = Drag.overrideCursor('wait');\n *\n * // Clear the override by disposing the return value.\n * override.dispose();\n * ```\n */\n function overrideCursor(cursor, doc = document) {\n return Private.overrideCursor(cursor, doc);\n }\n Drag.overrideCursor = overrideCursor;\n})(Drag || (Drag = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The size of a drag scroll edge, in pixels.\n */\n Private.SCROLL_EDGE_SIZE = 20;\n /**\n * Validate the given action is one of the supported actions.\n *\n * Returns the given action or `'none'` if the action is unsupported.\n */\n function validateAction(action, supported) {\n return actionTable[action] & supportedTable[supported] ? action : 'none';\n }\n Private.validateAction = validateAction;\n /**\n * Find the event target using pointer position if given, or otherwise\n * the central position of the backdrop.\n */\n function findElementBehindBackdrop(event, root = document) {\n if (event) {\n // Check if we already cached element for this event.\n if (lastElementEventSearch && event == lastElementEventSearch.event) {\n return lastElementEventSearch.element;\n }\n Private.cursorBackdrop.style.zIndex = '-1000';\n const element = root.elementFromPoint(event.clientX, event.clientY);\n Private.cursorBackdrop.style.zIndex = '';\n lastElementEventSearch = { event, element };\n return element;\n }\n else {\n const transform = Private.cursorBackdrop.style.transform;\n if (lastElementSearch && transform === lastElementSearch.transform) {\n return lastElementSearch.element;\n }\n const bbox = Private.cursorBackdrop.getBoundingClientRect();\n Private.cursorBackdrop.style.zIndex = '-1000';\n const element = root.elementFromPoint(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n Private.cursorBackdrop.style.zIndex = '';\n lastElementSearch = { transform, element };\n return element;\n }\n }\n Private.findElementBehindBackdrop = findElementBehindBackdrop;\n let lastElementEventSearch = null;\n let lastElementSearch = null;\n /**\n * Find the drag scroll target under the mouse, if any.\n */\n function findScrollTarget(event) {\n // Look up the client mouse position.\n let x = event.clientX;\n let y = event.clientY;\n // Get the element under the mouse.\n let element = findElementBehindBackdrop(event);\n // Search for a scrollable target based on the mouse position.\n // The null assert in third clause of for-loop is required due to:\n // https://github.com/Microsoft/TypeScript/issues/14143\n for (; element; element = element.parentElement) {\n // Ignore elements which are not marked as scrollable.\n if (!element.hasAttribute('data-lm-dragscroll')) {\n continue;\n }\n // Set up the coordinate offsets for the element.\n let offsetX = 0;\n let offsetY = 0;\n if (element === document.body) {\n offsetX = window.pageXOffset;\n offsetY = window.pageYOffset;\n }\n // Get the element bounds in viewport coordinates.\n let r = element.getBoundingClientRect();\n let top = r.top + offsetY;\n let left = r.left + offsetX;\n let right = left + r.width;\n let bottom = top + r.height;\n // Skip the element if it's not under the mouse.\n if (x < left || x >= right || y < top || y >= bottom) {\n continue;\n }\n // Compute the distance to each edge.\n let dl = x - left + 1;\n let dt = y - top + 1;\n let dr = right - x;\n let db = bottom - y;\n // Find the smallest of the edge distances.\n let distance = Math.min(dl, dt, dr, db);\n // Skip the element if the mouse is not within a scroll edge.\n if (distance > Private.SCROLL_EDGE_SIZE) {\n continue;\n }\n // Set up the edge result variable.\n let edge;\n // Find the edge for the computed distance.\n switch (distance) {\n case db:\n edge = 'bottom';\n break;\n case dt:\n edge = 'top';\n break;\n case dr:\n edge = 'right';\n break;\n case dl:\n edge = 'left';\n break;\n default:\n throw 'unreachable';\n }\n // Compute how much the element can scroll in width and height.\n let dsw = element.scrollWidth - element.clientWidth;\n let dsh = element.scrollHeight - element.clientHeight;\n // Determine if the element should be scrolled for the edge.\n let shouldScroll;\n switch (edge) {\n case 'top':\n shouldScroll = dsh > 0 && element.scrollTop > 0;\n break;\n case 'left':\n shouldScroll = dsw > 0 && element.scrollLeft > 0;\n break;\n case 'right':\n shouldScroll = dsw > 0 && element.scrollLeft < dsw;\n break;\n case 'bottom':\n shouldScroll = dsh > 0 && element.scrollTop < dsh;\n break;\n default:\n throw 'unreachable';\n }\n // Skip the element if it should not be scrolled.\n if (!shouldScroll) {\n continue;\n }\n // Return the drag scroll target.\n return { element, edge, distance };\n }\n // No drag scroll target was found.\n return null;\n }\n Private.findScrollTarget = findScrollTarget;\n /**\n * Dispatch a drag enter event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currElem - The currently indicated element, or `null`. This\n * is the \"immediate user selection\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The element to use as the current drag target. This is the\n * \"current target element\" from the whatwg spec, and may be `null`.\n *\n * #### Notes\n * This largely implements the drag enter portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragEnter(drag, currElem, currTarget, event) {\n // If the current element is null, return null as the new target.\n if (!currElem) {\n return null;\n }\n // Dispatch a drag enter event to the current element.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragenter'\n });\n let canceled = !currElem.dispatchEvent(dragEvent);\n // If the event was canceled, use the current element as the new target.\n if (canceled) {\n return currElem;\n }\n // If the current element is the document body, keep the original target.\n const body = drag.document instanceof Document\n ? drag.document.body\n : drag.document.firstElementChild;\n if (currElem === body) {\n return currTarget;\n }\n // Dispatch a drag enter event on the document body.\n dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragenter'\n });\n body.dispatchEvent(dragEvent);\n // Ignore the event cancellation, and use the body as the new target.\n return body;\n }\n Private.dispatchDragEnter = dispatchDragEnter;\n /**\n * Dispatch a drag exit event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param prevTarget - The previous target element, or `null`. This\n * is the previous \"current target element\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * #### Notes\n * This largely implements the drag exit portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragExit(drag, prevTarget, currTarget, event) {\n // If the previous target is null, do nothing.\n if (!prevTarget) {\n return;\n }\n // Dispatch the drag exit event to the previous target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragexit'\n });\n prevTarget.dispatchEvent(dragEvent);\n }\n Private.dispatchDragExit = dispatchDragExit;\n /**\n * Dispatch a drag leave event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param prevTarget - The previous target element, or `null`. This\n * is the previous \"current target element\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * #### Notes\n * This largely implements the drag leave portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragLeave(drag, prevTarget, currTarget, event) {\n // If the previous target is null, do nothing.\n if (!prevTarget) {\n return;\n }\n // Dispatch the drag leave event to the previous target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragleave'\n });\n prevTarget.dispatchEvent(dragEvent);\n }\n Private.dispatchDragLeave = dispatchDragLeave;\n /**\n * Dispatch a drag over event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The `DropAction` result of the drag over event.\n *\n * #### Notes\n * This largely implements the drag over portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragOver(drag, currTarget, event) {\n // If there is no current target, the drop action is none.\n if (!currTarget) {\n return 'none';\n }\n // Dispatch the drag over event to the current target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: null,\n type: 'lm-dragover'\n });\n let canceled = !currTarget.dispatchEvent(dragEvent);\n // If the event was canceled, return the drop action result.\n if (canceled) {\n return dragEvent.dropAction;\n }\n // Otherwise, the effective drop action is none.\n return 'none';\n }\n Private.dispatchDragOver = dispatchDragOver;\n /**\n * Dispatch a drop event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The `DropAction` result of the drop event.\n *\n * #### Notes\n * This largely implements the drag over portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDrop(drag, currTarget, event) {\n // If there is no current target, the drop action is none.\n if (!currTarget) {\n return 'none';\n }\n // Dispatch the drop event to the current target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: null,\n type: 'lm-drop'\n });\n let canceled = !currTarget.dispatchEvent(dragEvent);\n // If the event was canceled, return the drop action result.\n if (canceled) {\n return dragEvent.dropAction;\n }\n // Otherwise, the effective drop action is none.\n return 'none';\n }\n Private.dispatchDrop = dispatchDrop;\n /**\n * A lookup table from drop action to bit value.\n */\n const actionTable = {\n none: 0x0,\n copy: 0x1,\n link: 0x2,\n move: 0x4\n };\n /**\n * A lookup table from supported action to drop action bit mask.\n */\n const supportedTable = {\n none: actionTable['none'],\n copy: actionTable['copy'],\n link: actionTable['link'],\n move: actionTable['move'],\n 'copy-link': actionTable['copy'] | actionTable['link'],\n 'copy-move': actionTable['copy'] | actionTable['move'],\n 'link-move': actionTable['link'] | actionTable['move'],\n all: actionTable['copy'] | actionTable['link'] | actionTable['move']\n };\n /**\n * Implementation of `Drag.overrideCursor`.\n */\n function overrideCursor(cursor, doc = document) {\n let id = ++overrideCursorID;\n const body = doc instanceof Document\n ? doc.body\n : doc.firstElementChild;\n if (!Private.cursorBackdrop.isConnected) {\n // Hide the backdrop until the pointer moves to avoid issues with\n // native double click detection, used in e.g. datagrid editing.\n Private.cursorBackdrop.style.transform = 'scale(0)';\n body.appendChild(Private.cursorBackdrop);\n resetBackdropScroll();\n document.addEventListener('pointermove', alignBackdrop, {\n capture: true,\n passive: true\n });\n Private.cursorBackdrop.addEventListener('scroll', propagateBackdropScroll, {\n capture: true,\n passive: true\n });\n }\n Private.cursorBackdrop.style.cursor = cursor;\n return new DisposableDelegate(() => {\n if (id === overrideCursorID && Private.cursorBackdrop.isConnected) {\n document.removeEventListener('pointermove', alignBackdrop, true);\n Private.cursorBackdrop.removeEventListener('scroll', propagateBackdropScroll, true);\n body.removeChild(Private.cursorBackdrop);\n }\n });\n }\n Private.overrideCursor = overrideCursor;\n /**\n * Move cursor backdrop to match cursor position.\n */\n function alignBackdrop(event) {\n if (!Private.cursorBackdrop) {\n return;\n }\n Private.cursorBackdrop.style.transform = `translate(${event.clientX}px, ${event.clientY}px)`;\n }\n /**\n * Propagate the scroll event from the backdrop element to the scroll target.\n * The scroll target is defined by presence of `data-lm-dragscroll` attribute.\n */\n function propagateBackdropScroll(_event) {\n if (!Private.cursorBackdrop) {\n return;\n }\n // Get the element under behind the centre of the cursor backdrop\n // (essentially behind the cursor, but possibly a few pixels off).\n let element = findElementBehindBackdrop();\n if (!element) {\n return;\n }\n // Find scroll target.\n const scrollTarget = element.closest('[data-lm-dragscroll]');\n if (!scrollTarget) {\n return;\n }\n // Apply the scroll delta to the correct target.\n scrollTarget.scrollTop += Private.cursorBackdrop.scrollTop - backdropScrollOrigin;\n scrollTarget.scrollLeft += Private.cursorBackdrop.scrollLeft - backdropScrollOrigin;\n // Center the scroll position.\n resetBackdropScroll();\n }\n /**\n * Reset the backdrop scroll to allow further scrolling.\n */\n function resetBackdropScroll() {\n Private.cursorBackdrop.scrollTop = backdropScrollOrigin;\n Private.cursorBackdrop.scrollLeft = backdropScrollOrigin;\n }\n /**\n * The center of the backdrop node scroll area.\n */\n const backdropScrollOrigin = 500;\n /**\n * Create cursor backdrop node.\n */\n function createCursorBackdrop() {\n const backdrop = document.createElement('div');\n backdrop.classList.add('lm-cursor-backdrop');\n return backdrop;\n }\n /**\n * The internal id for the active cursor override.\n */\n let overrideCursorID = 0;\n /**\n * A backdrop node overriding pointer cursor.\n *\n * #### Notes\n * We use a backdrop node rather than setting the cursor directly on the body\n * because setting it on body requires more extensive style recalculation for\n * reliable application of the cursor, this is the cursor not being overriden\n * when over child elements with another style like `cursor: other!important`.\n */\n Private.cursorBackdrop = createCursorBackdrop();\n})(Private || (Private = {}));\n\nexport { Drag };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module keyboard\n */\n/**\n * Get the global application keyboard layout instance.\n *\n * @returns The keyboard layout for use by the application.\n *\n * #### Notes\n * The default keyboard layout is US-English.\n */\nfunction getKeyboardLayout() {\n return Private.keyboardLayout;\n}\n/**\n * Set the global application keyboard layout instance.\n *\n * @param layout The keyboard layout for use by the application.\n *\n * #### Notes\n * The keyboard layout should typically be set on application startup\n * to a layout which is appropriate for the user's system.\n */\nfunction setKeyboardLayout(layout) {\n Private.keyboardLayout = layout;\n}\n/**\n * A concrete implementation of {@link IKeyboardLayout} based on keycodes.\n *\n * The `keyCode` property of a `'keydown'` event is a browser and OS\n * specific representation of the physical key (not character) which\n * was pressed on a keyboard. While not the most convenient API, it\n * is currently the only one which works reliably on all browsers.\n *\n * This class accepts a user-defined mapping of keycode to key, which\n * allows for reliable shortcuts tailored to the user's system.\n */\nclass KeycodeLayout {\n /**\n * Construct a new keycode layout.\n *\n * @param name - The human readable name for the layout.\n *\n * @param codes - A mapping of keycode to key value.\n *\n * @param modifierKeys - Array of modifier key names\n */\n constructor(name, codes, modifierKeys = []) {\n this.name = name;\n this._codes = codes;\n this._keys = KeycodeLayout.extractKeys(codes);\n this._modifierKeys = KeycodeLayout.convertToKeySet(modifierKeys);\n }\n /**\n * Get an array of the key values supported by the layout.\n *\n * @returns A new array of the supported key values.\n */\n keys() {\n return Object.keys(this._keys);\n }\n /**\n * Test whether the given key is a valid value for the layout.\n *\n * @param key - The user provided key to test for validity.\n *\n * @returns `true` if the key is valid, `false` otherwise.\n */\n isValidKey(key) {\n return key in this._keys;\n }\n /**\n * Test whether the given key is a modifier key.\n *\n * @param key - The user provided key.\n *\n * @returns `true` if the key is a modifier key, `false` otherwise.\n */\n isModifierKey(key) {\n return key in this._modifierKeys;\n }\n /**\n * Get the key for a `'keydown'` event.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns The associated key value, or an empty string if\n * the event does not represent a valid primary key.\n */\n keyForKeydownEvent(event) {\n return this._codes[event.keyCode] || '';\n }\n}\n/**\n * The namespace for the `KeycodeLayout` class statics.\n */\n(function (KeycodeLayout) {\n /**\n * Extract the set of keys from a code map.\n *\n * @param codes - The code map of interest.\n *\n * @returns A set of the keys in the code map.\n */\n function extractKeys(codes) {\n let keys = Object.create(null);\n for (let c in codes) {\n keys[codes[c]] = true;\n }\n return keys;\n }\n KeycodeLayout.extractKeys = extractKeys;\n /**\n * Convert array of keys to a key set.\n *\n * @param keys - The array that needs to be converted\n *\n * @returns A set of the keys in the array.\n */\n function convertToKeySet(keys) {\n let keySet = Object(null);\n for (let i = 0, n = keys.length; i < n; ++i) {\n keySet[keys[i]] = true;\n }\n return keySet;\n }\n KeycodeLayout.convertToKeySet = convertToKeySet;\n})(KeycodeLayout || (KeycodeLayout = {}));\n/**\n * A keycode-based keyboard layout for US English keyboards.\n *\n * This layout is valid for the following OS/Browser combinations.\n *\n * - Windows\n * - Chrome\n * - Firefox\n * - IE\n *\n * - OSX\n * - Chrome\n * - Firefox\n * - Safari\n *\n * - Linux\n * - Chrome\n * - Firefox\n *\n * Other combinations may also work, but are untested.\n */\nconst EN_US = new KeycodeLayout('en-us', {\n 8: 'Backspace',\n 9: 'Tab',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 19: 'Pause',\n 27: 'Escape',\n 32: 'Space',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'A',\n 66: 'B',\n 67: 'C',\n 68: 'D',\n 69: 'E',\n 70: 'F',\n 71: 'G',\n 72: 'H',\n 73: 'I',\n 74: 'J',\n 75: 'K',\n 76: 'L',\n 77: 'M',\n 78: 'N',\n 79: 'O',\n 80: 'P',\n 81: 'Q',\n 82: 'R',\n 83: 'S',\n 84: 'T',\n 85: 'U',\n 86: 'V',\n 87: 'W',\n 88: 'X',\n 89: 'Y',\n 90: 'Z',\n 91: 'Meta',\n 93: 'ContextMenu',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9',\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111: '/',\n 112: 'F1',\n 113: 'F2',\n 114: 'F3',\n 115: 'F4',\n 116: 'F5',\n 117: 'F6',\n 118: 'F7',\n 119: 'F8',\n 120: 'F9',\n 121: 'F10',\n 122: 'F11',\n 123: 'F12',\n 173: '-',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 224: 'Meta' // firefox\n}, ['Shift', 'Ctrl', 'Alt', 'Meta'] // modifier keys\n);\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The global keyboard layout instance.\n */\n Private.keyboardLayout = EN_US;\n})(Private || (Private = {}));\n\nexport { EN_US, KeycodeLayout, getKeyboardLayout, setKeyboardLayout };\n//# sourceMappingURL=index.es6.js.map\n","import { every, retro, some, ArrayExt } from '@lumino/algorithm';\nimport { LinkedList } from '@lumino/collections';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module messaging\n */\n/**\n * A message which can be delivered to a message handler.\n *\n * #### Notes\n * This class may be subclassed to create complex message types.\n */\nclass Message {\n /**\n * Construct a new message.\n *\n * @param type - The type of the message.\n */\n constructor(type) {\n this.type = type;\n }\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * If a conflatable message is posted to a handler while another\n * conflatable message of the same `type` has already been posted\n * to the handler, the `conflate()` method of the existing message\n * will be invoked. If that method returns `true`, the new message\n * will not be enqueued. This allows messages to be compressed, so\n * that only a single instance of the message type is processed per\n * cycle, no matter how many times messages of that type are posted.\n *\n * Custom message types may reimplement this property.\n *\n * The default implementation is always `false`.\n */\n get isConflatable() {\n return false;\n }\n /**\n * Conflate this message with another message of the same `type`.\n *\n * @param other - A conflatable message of the same `type`.\n *\n * @returns `true` if the message was successfully conflated, or\n * `false` otherwise.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * This method is called automatically by the message loop when the\n * given message is posted to the handler paired with this message.\n * This message will already be enqueued and conflatable, and the\n * given message will have the same `type` and also be conflatable.\n *\n * This method should merge the state of the other message into this\n * message as needed so that when this message is finally delivered\n * to the handler, it receives the most up-to-date information.\n *\n * If this method returns `true`, it signals that the other message\n * was successfully conflated and that message will not be enqueued.\n *\n * If this method returns `false`, the other message will be enqueued\n * for normal delivery.\n *\n * Custom message types may reimplement this method.\n *\n * The default implementation always returns `false`.\n */\n conflate(other) {\n return false;\n }\n}\n/**\n * A convenience message class which conflates automatically.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most user code will not\n * make use of this class.\n *\n * This message class is useful for creating message instances which\n * should be conflated, but which have no state other than `type`.\n *\n * If conflation of stateful messages is required, a custom `Message`\n * subclass should be created.\n */\nclass ConflatableMessage extends Message {\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * This property is always `true`.\n */\n get isConflatable() {\n return true;\n }\n /**\n * Conflate this message with another message of the same `type`.\n *\n * #### Notes\n * This method always returns `true`.\n */\n conflate(other) {\n return true;\n }\n}\n/**\n * The namespace for the global singleton message loop.\n */\nvar MessageLoop;\n(function (MessageLoop) {\n /**\n * A function that cancels the pending loop task; `null` if unavailable.\n */\n let pending = null;\n /**\n * Schedules a function for invocation as soon as possible asynchronously.\n *\n * @param fn The function to invoke when called back.\n *\n * @returns An anonymous function that will unschedule invocation if possible.\n */\n const schedule = (resolved => (fn) => {\n let rejected = false;\n resolved.then(() => !rejected && fn());\n return () => {\n rejected = true;\n };\n })(Promise.resolve());\n /**\n * Send a message to a message handler to process immediately.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to deliver to the handler.\n *\n * #### Notes\n * The message will first be sent through any installed message hooks\n * for the handler. If the message passes all hooks, it will then be\n * delivered to the `processMessage` method of the handler.\n *\n * The message will not be conflated with pending posted messages.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function sendMessage(handler, msg) {\n // Lookup the message hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Handle the common case of no installed hooks.\n if (!hooks || hooks.length === 0) {\n invokeHandler(handler, msg);\n return;\n }\n // Invoke the message hooks starting with the newest first.\n let passed = every(retro(hooks), hook => {\n return hook ? invokeHook(hook, handler, msg) : true;\n });\n // Invoke the handler if the message passes all hooks.\n if (passed) {\n invokeHandler(handler, msg);\n }\n }\n MessageLoop.sendMessage = sendMessage;\n /**\n * Post a message to a message handler to process in the future.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to post to the handler.\n *\n * #### Notes\n * The message will be conflated with the pending posted messages for\n * the handler, if possible. If the message is not conflated, it will\n * be queued for normal delivery on the next cycle of the event loop.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function postMessage(handler, msg) {\n // Handle the common case of a non-conflatable message.\n if (!msg.isConflatable) {\n enqueueMessage(handler, msg);\n return;\n }\n // Conflate the message with an existing message if possible.\n let conflated = some(messageQueue, posted => {\n if (posted.handler !== handler) {\n return false;\n }\n if (!posted.msg) {\n return false;\n }\n if (posted.msg.type !== msg.type) {\n return false;\n }\n if (!posted.msg.isConflatable) {\n return false;\n }\n return posted.msg.conflate(msg);\n });\n // Enqueue the message if it was not conflated.\n if (!conflated) {\n enqueueMessage(handler, msg);\n }\n }\n MessageLoop.postMessage = postMessage;\n /**\n * Install a message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to install.\n *\n * #### Notes\n * A message hook is invoked before a message is delivered to the\n * handler. If the hook returns `false`, no other hooks will be\n * invoked and the message will not be delivered to the handler.\n *\n * The most recently installed message hook is executed first.\n *\n * If the hook is already installed, this is a no-op.\n */\n function installMessageHook(handler, hook) {\n // Look up the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Bail early if the hook is already installed.\n if (hooks && hooks.indexOf(hook) !== -1) {\n return;\n }\n // Add the hook to the end, so it will be the first to execute.\n if (!hooks) {\n messageHooks.set(handler, [hook]);\n }\n else {\n hooks.push(hook);\n }\n }\n MessageLoop.installMessageHook = installMessageHook;\n /**\n * Remove an installed message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to remove.\n *\n * #### Notes\n * It is safe to call this function while the hook is executing.\n *\n * If the hook is not installed, this is a no-op.\n */\n function removeMessageHook(handler, hook) {\n // Lookup the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Bail early if the hooks do not exist.\n if (!hooks) {\n return;\n }\n // Lookup the index of the hook and bail if not found.\n let i = hooks.indexOf(hook);\n if (i === -1) {\n return;\n }\n // Clear the hook and schedule a cleanup of the array.\n hooks[i] = null;\n scheduleCleanup(hooks);\n }\n MessageLoop.removeMessageHook = removeMessageHook;\n /**\n * Clear all message data associated with a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * #### Notes\n * This will clear all posted messages and hooks for the handler.\n */\n function clearData(handler) {\n // Lookup the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Clear all messsage hooks for the handler.\n if (hooks && hooks.length > 0) {\n ArrayExt.fill(hooks, null);\n scheduleCleanup(hooks);\n }\n // Clear all posted messages for the handler.\n for (const posted of messageQueue) {\n if (posted.handler === handler) {\n posted.handler = null;\n posted.msg = null;\n }\n }\n }\n MessageLoop.clearData = clearData;\n /**\n * Process the pending posted messages in the queue immediately.\n *\n * #### Notes\n * This function is useful when posted messages must be processed immediately.\n *\n * This function should normally not be needed, but it may be\n * required to work around certain browser idiosyncrasies.\n *\n * Recursing into this function is a no-op.\n */\n function flush() {\n // Bail if recursion is detected or if there is no pending task.\n if (flushGuard || pending === null) {\n return;\n }\n // Unschedule the pending loop task.\n pending();\n pending = null;\n // Run the message loop within the recursion guard.\n flushGuard = true;\n runMessageLoop();\n flushGuard = false;\n }\n MessageLoop.flush = flush;\n /**\n * Get the message loop exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return exceptionHandler;\n }\n MessageLoop.getExceptionHandler = getExceptionHandler;\n /**\n * Set the message loop exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a message handler or a\n * message hook throws an exception.\n */\n function setExceptionHandler(handler) {\n let old = exceptionHandler;\n exceptionHandler = handler;\n return old;\n }\n MessageLoop.setExceptionHandler = setExceptionHandler;\n /**\n * The queue of posted message pairs.\n */\n const messageQueue = new LinkedList();\n /**\n * A mapping of handler to array of installed message hooks.\n */\n const messageHooks = new WeakMap();\n /**\n * A set of message hook arrays which are pending cleanup.\n */\n const dirtySet = new Set();\n /**\n * The message loop exception handler.\n */\n let exceptionHandler = (err) => {\n console.error(err);\n };\n /**\n * A guard flag to prevent flush recursion.\n */\n let flushGuard = false;\n /**\n * Invoke a message hook with the specified handler and message.\n *\n * Returns the result of the hook, or `true` if the hook throws.\n *\n * Exceptions in the hook will be caught and logged.\n */\n function invokeHook(hook, handler, msg) {\n let result = true;\n try {\n if (typeof hook === 'function') {\n result = hook(handler, msg);\n }\n else {\n result = hook.messageHook(handler, msg);\n }\n }\n catch (err) {\n exceptionHandler(err);\n }\n return result;\n }\n /**\n * Invoke a message handler with the specified message.\n *\n * Exceptions in the handler will be caught and logged.\n */\n function invokeHandler(handler, msg) {\n try {\n handler.processMessage(msg);\n }\n catch (err) {\n exceptionHandler(err);\n }\n }\n /**\n * Add a message to the end of the message queue.\n *\n * This will automatically schedule a run of the message loop.\n */\n function enqueueMessage(handler, msg) {\n // Add the posted message to the queue.\n messageQueue.addLast({ handler, msg });\n // Bail if a loop task is already pending.\n if (pending !== null) {\n return;\n }\n // Schedule a run of the message loop.\n pending = schedule(runMessageLoop);\n }\n /**\n * Run an iteration of the message loop.\n *\n * This will process all pending messages in the queue. If a message\n * is added to the queue while the message loop is running, it will\n * be processed on the next cycle of the loop.\n */\n function runMessageLoop() {\n // Clear the task so the next loop can be scheduled.\n pending = null;\n // If the message queue is empty, there is nothing else to do.\n if (messageQueue.isEmpty) {\n return;\n }\n // Add a sentinel value to the end of the queue. The queue will\n // only be processed up to the sentinel. Messages posted during\n // this cycle will execute on the next cycle.\n let sentinel = { handler: null, msg: null };\n messageQueue.addLast(sentinel);\n // Enter the message loop.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // Remove the first posted message in the queue.\n let posted = messageQueue.removeFirst();\n // If the value is the sentinel, exit the loop.\n if (posted === sentinel) {\n return;\n }\n // Dispatch the message if it has not been cleared.\n if (posted.handler && posted.msg) {\n sendMessage(posted.handler, posted.msg);\n }\n }\n }\n /**\n * Schedule a cleanup of a message hooks array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any `null` hook will\n * be removed from the array.\n */\n function scheduleCleanup(hooks) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(hooks);\n }\n /**\n * Cleanup the message hook arrays in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupHooks);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty hooks in a message hooks array.\n *\n * This will remove any `null` hook from the array.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupHooks(hooks) {\n ArrayExt.removeAllWhere(hooks, isNull);\n }\n /**\n * Test whether a value is `null`.\n */\n function isNull(value) {\n return value === null;\n }\n})(MessageLoop || (MessageLoop = {}));\n\nexport { ConflatableMessage, Message, MessageLoop };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module properties\n */\n/**\n * A class which attaches a value to an external object.\n *\n * #### Notes\n * Attached properties are used to extend the state of an object with\n * semantic data from an unrelated class. They also encapsulate value\n * creation, coercion, and notification.\n *\n * Because attached property values are stored in a hash table, which\n * in turn is stored in a WeakMap keyed on the owner object, there is\n * non-trivial storage overhead involved in their use. The pattern is\n * therefore best used for the storage of rare data.\n */\nclass AttachedProperty {\n /**\n * Construct a new attached property.\n *\n * @param options - The options for initializing the property.\n */\n constructor(options) {\n this._pid = Private.nextPID();\n this.name = options.name;\n this._create = options.create;\n this._coerce = options.coerce || null;\n this._compare = options.compare || null;\n this._changed = options.changed || null;\n }\n /**\n * Get the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @returns The current value of the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and assigned as the current value of the property.\n */\n get(owner) {\n let value;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n value = map[this._pid];\n }\n else {\n value = map[this._pid] = this._createValue(owner);\n }\n return value;\n }\n /**\n * Set the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @param value - The value for the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n set(owner, value) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, value);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Explicitly coerce the current property value for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n coerce(owner) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, oldValue);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Get or create the default value for the given owner.\n */\n _createValue(owner) {\n let create = this._create;\n return create(owner);\n }\n /**\n * Coerce the value for the given owner.\n */\n _coerceValue(owner, value) {\n let coerce = this._coerce;\n return coerce ? coerce(owner, value) : value;\n }\n /**\n * Compare the old value and new value for equality.\n */\n _compareValue(oldValue, newValue) {\n let compare = this._compare;\n return compare ? compare(oldValue, newValue) : oldValue === newValue;\n }\n /**\n * Run the change notification if the given values are different.\n */\n _maybeNotify(owner, oldValue, newValue) {\n let changed = this._changed;\n if (changed && !this._compareValue(oldValue, newValue)) {\n changed(owner, oldValue, newValue);\n }\n }\n}\n/**\n * The namespace for the `AttachedProperty` class statics.\n */\n(function (AttachedProperty) {\n /**\n * Clear the stored property data for the given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * This will clear all property values for the owner, but it will\n * **not** run the change notification for any of the properties.\n */\n function clearData(owner) {\n Private.ownerData.delete(owner);\n }\n AttachedProperty.clearData = clearData;\n})(AttachedProperty || (AttachedProperty = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of property owner to property map.\n */\n Private.ownerData = new WeakMap();\n /**\n * A function which computes successive unique property ids.\n */\n Private.nextPID = (() => {\n let id = 0;\n return () => {\n let rand = Math.random();\n let stem = `${rand}`.slice(2);\n return `pid-${stem}-${id++}`;\n };\n })();\n /**\n * Lookup the data map for the property owner.\n *\n * This will create the map if one does not already exist.\n */\n function ensureMap(owner) {\n let map = Private.ownerData.get(owner);\n if (map) {\n return map;\n }\n map = Object.create(null);\n Private.ownerData.set(owner, map);\n return map;\n }\n Private.ensureMap = ensureMap;\n})(Private || (Private = {}));\n\nexport { AttachedProperty };\n//# sourceMappingURL=index.es6.js.map\n","import { find, ArrayExt } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module signaling\n */\n/**\n * A concrete implementation of `ISignal`.\n *\n * #### Example\n * ```typescript\n * import { ISignal, Signal } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get valueChanged: ISignal {\n * return this._valueChanged;\n * }\n *\n * get value(): number {\n * return this._value;\n * }\n *\n * set value(value: number) {\n * if (value === this._value) {\n * return;\n * }\n * this._value = value;\n * this._valueChanged.emit(value);\n * }\n *\n * private _value = 0;\n * private _valueChanged = new Signal(this);\n * }\n *\n * function logger(sender: SomeClass, value: number): void {\n * console.log(sender.name, value);\n * }\n *\n * let m1 = new SomeClass('foo');\n * let m2 = new SomeClass('bar');\n *\n * m1.valueChanged.connect(logger);\n * m2.valueChanged.connect(logger);\n *\n * m1.value = 42; // logs: foo 42\n * m2.value = 17; // logs: bar 17\n * ```\n */\nclass Signal {\n /**\n * Construct a new signal.\n *\n * @param sender - The sender which owns the signal.\n */\n constructor(sender) {\n this.sender = sender;\n }\n /**\n * Connect a slot to the signal.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n connect(slot, thisArg) {\n return Private.connect(this, slot, thisArg);\n }\n /**\n * Disconnect a slot from the signal.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n disconnect(slot, thisArg) {\n return Private.disconnect(this, slot, thisArg);\n }\n /**\n * Emit the signal and invoke the connected slots.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n emit(args) {\n Private.emit(this, args);\n }\n}\n/**\n * The namespace for the `Signal` class statics.\n */\n(function (Signal) {\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectBetween(sender, receiver) {\n Private.disconnectBetween(sender, receiver);\n }\n Signal.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n Private.disconnectSender(sender);\n }\n Signal.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectReceiver(receiver) {\n Private.disconnectReceiver(receiver);\n }\n Signal.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectAll(object) {\n Private.disconnectAll(object);\n }\n Signal.disconnectAll = disconnectAll;\n /**\n * Clear all signal data associated with the given object.\n *\n * @param object - The object for which the data should be cleared.\n *\n * #### Notes\n * This removes all signal connections and any other signal data\n * associated with the object.\n */\n function clearData(object) {\n Private.disconnectAll(object);\n }\n Signal.clearData = clearData;\n /**\n * Get the signal exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return Private.exceptionHandler;\n }\n Signal.getExceptionHandler = getExceptionHandler;\n /**\n * Set the signal exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a slot throws an exception.\n */\n function setExceptionHandler(handler) {\n let old = Private.exceptionHandler;\n Private.exceptionHandler = handler;\n return old;\n }\n Signal.setExceptionHandler = setExceptionHandler;\n})(Signal || (Signal = {}));\n/**\n * A concrete implementation of `IStream`.\n *\n * #### Example\n * ```typescript\n * import { IStream, Stream } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get pings(): IStream {\n * return this._pings;\n * }\n *\n * ping(value: string) {\n * this._pings.emit(value);\n * }\n *\n * private _pings = new Stream(this);\n * }\n *\n * let m1 = new SomeClass('foo');\n *\n * m1.pings.connect((_, value: string) => {\n * console.log('connect', value);\n * });\n *\n * void (async () => {\n * for await (const ping of m1.pings) {\n * console.log('iterator', ping);\n * }\n * })();\n *\n * m1.ping('alpha'); // logs: connect alpha\n * // logs: iterator alpha\n * m1.ping('beta'); // logs: connect beta\n * // logs: iterator beta\n * ```\n */\nclass Stream extends Signal {\n constructor() {\n super(...arguments);\n this._pending = new PromiseDelegate();\n }\n /**\n * Return an async iterator that yields every emission.\n */\n async *[Symbol.asyncIterator]() {\n let pending = this._pending;\n while (true) {\n try {\n const { args, next } = await pending.promise;\n pending = next;\n yield args;\n }\n catch (_) {\n return; // Any promise rejection stops the iterator.\n }\n }\n }\n /**\n * Emit the signal, invoke the connected slots, and yield the emission.\n *\n * @param args - The args to pass to the connected slots.\n */\n emit(args) {\n const pending = this._pending;\n const next = (this._pending = new PromiseDelegate());\n pending.resolve({ args, next });\n super.emit(args);\n }\n /**\n * Stop the stream's async iteration.\n */\n stop() {\n this._pending.promise.catch(() => undefined);\n this._pending.reject('stop');\n this._pending = new PromiseDelegate();\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The signal exception handler function.\n */\n Private.exceptionHandler = (err) => {\n console.error(err);\n };\n /**\n * Connect a slot to a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n function connect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Ensure the sender's array of receivers is created.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers) {\n receivers = [];\n receiversForSender.set(signal.sender, receivers);\n }\n // Bail if a matching connection already exists.\n if (findConnection(receivers, signal, slot, thisArg)) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Ensure the receiver's array of senders is created.\n let senders = sendersForReceiver.get(receiver);\n if (!senders) {\n senders = [];\n sendersForReceiver.set(receiver, senders);\n }\n // Create a new connection and add it to the end of each array.\n let connection = { signal, slot, thisArg };\n receivers.push(connection);\n senders.push(connection);\n // Indicate a successful connection.\n return true;\n }\n Private.connect = connect;\n /**\n * Disconnect a slot from a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n function disconnect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Lookup the list of receivers, and bail if none exist.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return false;\n }\n // Bail if no matching connection exits.\n let connection = findConnection(receivers, signal, slot, thisArg);\n if (!connection) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Lookup the array of senders, which is now known to exist.\n let senders = sendersForReceiver.get(receiver);\n // Clear the connection and schedule cleanup of the arrays.\n connection.signal = null;\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n // Indicate a successful disconnection.\n return true;\n }\n Private.disconnect = disconnect;\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectBetween(sender, receiver) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each connection between the sender and receiver.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Clear the connection if it matches the sender.\n if (connection.signal.sender === sender) {\n connection.signal = null;\n }\n }\n // Schedule a cleanup of the senders and receivers.\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n }\n Private.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Clear each receiver connection.\n for (const connection of receivers) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Choose the best object for the receiver.\n let receiver = connection.thisArg || connection.slot;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of senders, which is now known to exist.\n scheduleCleanup(sendersForReceiver.get(receiver));\n }\n // Schedule a cleanup of the receivers.\n scheduleCleanup(receivers);\n }\n Private.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectReceiver(receiver) {\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each sender connection.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Lookup the sender for the connection.\n let sender = connection.signal.sender;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of receivers, which is now known to exist.\n scheduleCleanup(receiversForSender.get(sender));\n }\n // Schedule a cleanup of the list of senders.\n scheduleCleanup(senders);\n }\n Private.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n */\n function disconnectAll(object) {\n // Remove all connections where the given object is the sender.\n disconnectSender(object);\n // Remove all connections where the given object is the receiver.\n disconnectReceiver(object);\n }\n Private.disconnectAll = disconnectAll;\n /**\n * Emit a signal and invoke its connected slots.\n *\n * @param signal - The signal of interest.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n function emit(signal, args) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Invoke the slots for connections with a matching signal.\n // Any connections added during emission are not invoked.\n for (let i = 0, n = receivers.length; i < n; ++i) {\n let connection = receivers[i];\n if (connection.signal === signal) {\n invokeSlot(connection, args);\n }\n }\n }\n Private.emit = emit;\n /**\n * A weak mapping of sender to array of receiver connections.\n */\n const receiversForSender = new WeakMap();\n /**\n * A weak mapping of receiver to array of sender connections.\n */\n const sendersForReceiver = new WeakMap();\n /**\n * A set of connection arrays which are pending cleanup.\n */\n const dirtySet = new Set();\n /**\n * A function to schedule an event loop callback.\n */\n const schedule = (() => {\n let ok = typeof requestAnimationFrame === 'function';\n return ok ? requestAnimationFrame : setImmediate;\n })();\n /**\n * Find a connection which matches the given parameters.\n */\n function findConnection(connections, signal, slot, thisArg) {\n return find(connections, connection => connection.signal === signal &&\n connection.slot === slot &&\n connection.thisArg === thisArg);\n }\n /**\n * Invoke a slot with the given parameters.\n *\n * The connection is assumed to be valid.\n *\n * Exceptions in the slot will be caught and logged.\n */\n function invokeSlot(connection, args) {\n let { signal, slot, thisArg } = connection;\n try {\n slot.call(thisArg, signal.sender, args);\n }\n catch (err) {\n Private.exceptionHandler(err);\n }\n }\n /**\n * Schedule a cleanup of a connection array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any connection with a\n * `null` signal will be removed from the array.\n */\n function scheduleCleanup(array) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(array);\n }\n /**\n * Cleanup the connection lists in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupConnections);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty connections in a connections array.\n *\n * This will remove any connection with a `null` signal.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupConnections(connections) {\n ArrayExt.removeAllWhere(connections, isDeadConnection);\n }\n /**\n * Test whether a connection is dead.\n *\n * A dead connection has a `null` signal.\n */\n function isDeadConnection(connection) {\n return connection.signal === null;\n }\n})(Private || (Private = {}));\n\nexport { Signal, Stream };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module virtualdom\n */\n/**\n * A virtual node which represents plain text content.\n *\n * #### Notes\n * User code will not typically create a `VirtualText` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualText {\n /**\n * Construct a new virtual text node.\n *\n * @param content - The text content for the node.\n */\n constructor(content) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'text';\n this.content = content;\n }\n}\n/**\n * A virtual node which represents an HTML element.\n *\n * #### Notes\n * User code will not typically create a `VirtualElement` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualElement {\n /**\n * Construct a new virtual element node.\n *\n * @param tag - The element tag name.\n *\n * @param attrs - The element attributes.\n *\n * @param children - The element children.\n *\n * @param renderer - An optional custom renderer for the element.\n */\n constructor(tag, attrs, children, renderer) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'element';\n this.tag = tag;\n this.attrs = attrs;\n this.children = children;\n this.renderer = renderer;\n }\n}\n/**\n * DEPRECATED - use VirtualElement with a defined renderer param instead.\n * This class is provided as a backwards compatibility shim\n *\n * A \"pass thru\" virtual node whose children are managed by a render and an\n * unrender callback. The intent of this flavor of virtual node is to make\n * it easy to blend other kinds of virtualdom (eg React) into Phosphor's\n * virtualdom.\n *\n * #### Notes\n * User code will not typically create a `VirtualElementPass` node directly.\n * Instead, the `hpass()` function will be used to create an element tree.\n */\nclass VirtualElementPass extends VirtualElement {\n /**\n * DEPRECATED - use VirtualElement with a defined renderer param instead\n *\n * Construct a new virtual element pass thru node.\n *\n * @param tag - the tag of the parent element of this node. Once the parent\n * element is rendered, it will be passed as an argument to\n * renderer.render\n *\n * @param attrs - attributes that will assigned to the\n * parent element\n *\n * @param renderer - an object with render and unrender\n * functions, each of which should take a single argument of type\n * HTMLElement and return nothing. If null, the parent element\n * will be rendered barren without any children.\n */\n constructor(tag, attrs, renderer) {\n super(tag, attrs, [], renderer || undefined);\n }\n}\nfunction h(tag) {\n let attrs = {};\n let renderer;\n let children = [];\n for (let i = 1, n = arguments.length; i < n; ++i) {\n // eslint-disable-next-line prefer-rest-params\n let arg = arguments[i];\n if (typeof arg === 'string') {\n children.push(new VirtualText(arg));\n }\n else if (arg instanceof VirtualText) {\n children.push(arg);\n }\n else if (arg instanceof VirtualElement) {\n children.push(arg);\n }\n else if (arg instanceof Array) {\n extend(children, arg);\n }\n else if ((i === 1 || i === 2) && arg && typeof arg === 'object') {\n if ('render' in arg) {\n renderer = arg;\n }\n else {\n attrs = arg;\n }\n }\n }\n return new VirtualElement(tag, attrs, children, renderer);\n function extend(array, values) {\n for (let child of values) {\n if (typeof child === 'string') {\n array.push(new VirtualText(child));\n }\n else if (child instanceof VirtualText) {\n array.push(child);\n }\n else if (child instanceof VirtualElement) {\n array.push(child);\n }\n }\n }\n}\n/**\n * The namespace for the `h` function statics.\n */\n(function (h) {\n h.a = h.bind(undefined, 'a');\n h.abbr = h.bind(undefined, 'abbr');\n h.address = h.bind(undefined, 'address');\n h.area = h.bind(undefined, 'area');\n h.article = h.bind(undefined, 'article');\n h.aside = h.bind(undefined, 'aside');\n h.audio = h.bind(undefined, 'audio');\n h.b = h.bind(undefined, 'b');\n h.bdi = h.bind(undefined, 'bdi');\n h.bdo = h.bind(undefined, 'bdo');\n h.blockquote = h.bind(undefined, 'blockquote');\n h.br = h.bind(undefined, 'br');\n h.button = h.bind(undefined, 'button');\n h.canvas = h.bind(undefined, 'canvas');\n h.caption = h.bind(undefined, 'caption');\n h.cite = h.bind(undefined, 'cite');\n h.code = h.bind(undefined, 'code');\n h.col = h.bind(undefined, 'col');\n h.colgroup = h.bind(undefined, 'colgroup');\n h.data = h.bind(undefined, 'data');\n h.datalist = h.bind(undefined, 'datalist');\n h.dd = h.bind(undefined, 'dd');\n h.del = h.bind(undefined, 'del');\n h.dfn = h.bind(undefined, 'dfn');\n h.div = h.bind(undefined, 'div');\n h.dl = h.bind(undefined, 'dl');\n h.dt = h.bind(undefined, 'dt');\n h.em = h.bind(undefined, 'em');\n h.embed = h.bind(undefined, 'embed');\n h.fieldset = h.bind(undefined, 'fieldset');\n h.figcaption = h.bind(undefined, 'figcaption');\n h.figure = h.bind(undefined, 'figure');\n h.footer = h.bind(undefined, 'footer');\n h.form = h.bind(undefined, 'form');\n h.h1 = h.bind(undefined, 'h1');\n h.h2 = h.bind(undefined, 'h2');\n h.h3 = h.bind(undefined, 'h3');\n h.h4 = h.bind(undefined, 'h4');\n h.h5 = h.bind(undefined, 'h5');\n h.h6 = h.bind(undefined, 'h6');\n h.header = h.bind(undefined, 'header');\n h.hr = h.bind(undefined, 'hr');\n h.i = h.bind(undefined, 'i');\n h.iframe = h.bind(undefined, 'iframe');\n h.img = h.bind(undefined, 'img');\n h.input = h.bind(undefined, 'input');\n h.ins = h.bind(undefined, 'ins');\n h.kbd = h.bind(undefined, 'kbd');\n h.label = h.bind(undefined, 'label');\n h.legend = h.bind(undefined, 'legend');\n h.li = h.bind(undefined, 'li');\n h.main = h.bind(undefined, 'main');\n h.map = h.bind(undefined, 'map');\n h.mark = h.bind(undefined, 'mark');\n h.meter = h.bind(undefined, 'meter');\n h.nav = h.bind(undefined, 'nav');\n h.noscript = h.bind(undefined, 'noscript');\n h.object = h.bind(undefined, 'object');\n h.ol = h.bind(undefined, 'ol');\n h.optgroup = h.bind(undefined, 'optgroup');\n h.option = h.bind(undefined, 'option');\n h.output = h.bind(undefined, 'output');\n h.p = h.bind(undefined, 'p');\n h.param = h.bind(undefined, 'param');\n h.pre = h.bind(undefined, 'pre');\n h.progress = h.bind(undefined, 'progress');\n h.q = h.bind(undefined, 'q');\n h.rp = h.bind(undefined, 'rp');\n h.rt = h.bind(undefined, 'rt');\n h.ruby = h.bind(undefined, 'ruby');\n h.s = h.bind(undefined, 's');\n h.samp = h.bind(undefined, 'samp');\n h.section = h.bind(undefined, 'section');\n h.select = h.bind(undefined, 'select');\n h.small = h.bind(undefined, 'small');\n h.source = h.bind(undefined, 'source');\n h.span = h.bind(undefined, 'span');\n h.strong = h.bind(undefined, 'strong');\n h.sub = h.bind(undefined, 'sub');\n h.summary = h.bind(undefined, 'summary');\n h.sup = h.bind(undefined, 'sup');\n h.table = h.bind(undefined, 'table');\n h.tbody = h.bind(undefined, 'tbody');\n h.td = h.bind(undefined, 'td');\n h.textarea = h.bind(undefined, 'textarea');\n h.tfoot = h.bind(undefined, 'tfoot');\n h.th = h.bind(undefined, 'th');\n h.thead = h.bind(undefined, 'thead');\n h.time = h.bind(undefined, 'time');\n h.title = h.bind(undefined, 'title');\n h.tr = h.bind(undefined, 'tr');\n h.track = h.bind(undefined, 'track');\n h.u = h.bind(undefined, 'u');\n h.ul = h.bind(undefined, 'ul');\n h.var_ = h.bind(undefined, 'var');\n h.video = h.bind(undefined, 'video');\n h.wbr = h.bind(undefined, 'wbr');\n})(h || (h = {}));\nfunction hpass(tag) {\n let attrs = {};\n let renderer = null;\n if (arguments.length === 2) {\n // eslint-disable-next-line prefer-rest-params\n const arg = arguments[1];\n if ('render' in arg) {\n renderer = arg;\n }\n else {\n attrs = arg;\n }\n }\n else if (arguments.length === 3) {\n // eslint-disable-next-line prefer-rest-params\n attrs = arguments[1];\n // eslint-disable-next-line prefer-rest-params\n renderer = arguments[2];\n }\n else if (arguments.length > 3) {\n throw new Error('hpass() should be called with 1, 2, or 3 arguments');\n }\n return new VirtualElementPass(tag, attrs, renderer);\n}\n/**\n * The namespace for the virtual DOM rendering functions.\n */\nvar VirtualDOM;\n(function (VirtualDOM) {\n function realize(node) {\n return Private.createDOMNode(node);\n }\n VirtualDOM.realize = realize;\n /**\n * Render virtual DOM content into a host element.\n *\n * @param content - The virtual DOM content to render.\n *\n * @param host - The host element for the rendered content.\n *\n * #### Notes\n * This renders the delta from the previous rendering. It assumes that\n * the content of the host element is not manipulated by external code.\n *\n * Providing `null` content will clear the rendering.\n *\n * Externally modifying the provided content or the host element will\n * result in undefined rendering behavior.\n */\n function render(content, host) {\n let oldContent = Private.hostMap.get(host) || [];\n let newContent = Private.asContentArray(content);\n Private.hostMap.set(host, newContent);\n Private.updateContent(host, oldContent, newContent);\n }\n VirtualDOM.render = render;\n})(VirtualDOM || (VirtualDOM = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of host element to virtual DOM content.\n */\n Private.hostMap = new WeakMap();\n /**\n * Cast a content value to a content array.\n */\n function asContentArray(value) {\n if (!value) {\n return [];\n }\n if (value instanceof Array) {\n return value;\n }\n return [value];\n }\n Private.asContentArray = asContentArray;\n function createDOMNode(node) {\n // eslint-disable-next-line prefer-rest-params\n let host = arguments[1] || null;\n // eslint-disable-next-line prefer-rest-params\n const before = arguments[2] || null;\n if (host) {\n host.insertBefore(createDOMNode(node), before);\n }\n else {\n // Create a text node for a virtual text node.\n if (node.type === 'text') {\n return document.createTextNode(node.content);\n }\n // Create the HTML element with the specified tag.\n host = document.createElement(node.tag);\n // Add the attributes for the new element.\n addAttrs(host, node.attrs);\n if (node.renderer) {\n node.renderer.render(host, {\n attrs: node.attrs,\n children: node.children\n });\n return host;\n }\n // Recursively populate the element with child content.\n for (let i = 0, n = node.children.length; i < n; ++i) {\n createDOMNode(node.children[i], host);\n }\n }\n return host;\n }\n Private.createDOMNode = createDOMNode;\n /**\n * Update a host element with the delta of the virtual content.\n *\n * This is the core \"diff\" algorithm. There is no explicit \"patch\"\n * phase. The host is patched at each step as the diff progresses.\n */\n function updateContent(host, oldContent, newContent) {\n // Bail early if the content is identical.\n if (oldContent === newContent) {\n return;\n }\n // Collect the old keyed elems into a mapping.\n let oldKeyed = collectKeys(host, oldContent);\n // Create a copy of the old content which can be modified in-place.\n let oldCopy = oldContent.slice();\n // Update the host with the new content. The diff always proceeds\n // forward and never modifies a previously visited index. The old\n // copy array is modified in-place to reflect the changes made to\n // the host children. This causes the stale nodes to be pushed to\n // the end of the host node and removed at the end of the loop.\n let currElem = host.firstChild;\n let newCount = newContent.length;\n for (let i = 0; i < newCount; ++i) {\n // If the old content is exhausted, create a new node.\n if (i >= oldCopy.length) {\n createDOMNode(newContent[i], host);\n continue;\n }\n // Lookup the old and new virtual nodes.\n let oldVNode = oldCopy[i];\n let newVNode = newContent[i];\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // Handle the simplest case of in-place text update first.\n if (oldVNode.type === 'text' && newVNode.type === 'text') {\n // Avoid spurious updates for performance.\n if (currElem.textContent !== newVNode.content) {\n currElem.textContent = newVNode.content;\n }\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old or new node is a text node, the other node is now\n // known to be an element node, so create and insert a new node.\n if (oldVNode.type === 'text' || newVNode.type === 'text') {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // If the old XOR new node has a custom renderer,\n // create and insert a new node.\n if (!oldVNode.renderer != !newVNode.renderer) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // At this point, both nodes are known to be element nodes.\n // If the new elem is keyed, move an old keyed elem to the proper\n // location before proceeding with the diff. The search can start\n // at the current index, since the unmatched old keyed elems are\n // pushed forward in the old copy array.\n let newKey = newVNode.attrs.key;\n if (newKey && newKey in oldKeyed) {\n let pair = oldKeyed[newKey];\n if (pair.vNode !== oldVNode) {\n ArrayExt.move(oldCopy, oldCopy.indexOf(pair.vNode, i + 1), i);\n host.insertBefore(pair.element, currElem);\n oldVNode = pair.vNode;\n currElem = pair.element;\n }\n }\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old elem is keyed and does not match the new elem key,\n // create a new node. This is necessary since the old keyed elem\n // may be matched at a later point in the diff.\n let oldKey = oldVNode.attrs.key;\n if (oldKey && oldKey !== newKey) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // If the tags are different, create a new node.\n if (oldVNode.tag !== newVNode.tag) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // At this point, the element can be updated in-place.\n // Update the element attributes.\n updateAttrs(currElem, oldVNode.attrs, newVNode.attrs);\n // Update the element content.\n if (newVNode.renderer) {\n newVNode.renderer.render(currElem, {\n attrs: newVNode.attrs,\n children: newVNode.children\n });\n }\n else {\n updateContent(currElem, oldVNode.children, newVNode.children);\n }\n // Step to the next sibling element.\n currElem = currElem.nextSibling;\n }\n // Cleanup stale DOM\n removeContent(host, oldCopy, newCount, true);\n }\n Private.updateContent = updateContent;\n /**\n * Handle cleanup of stale vdom and its associated DOM. The host node is\n * traversed recursively (in depth-first order), and any explicit cleanup\n * required by a child node is carried out when it is visited (eg if a node\n * has a custom renderer, the renderer.unrender function will be called).\n * Once the subtree beneath each child of host has been completely visited,\n * that child will be removed via a call to host.removeChild.\n */\n function removeContent(host, oldContent, newCount, _sentinel) {\n // Dispose of the old nodes pushed to the end of the host.\n for (let i = oldContent.length - 1; i >= newCount; --i) {\n const oldNode = oldContent[i];\n const child = (_sentinel ? host.lastChild : host.childNodes[i]);\n // recursively clean up host children\n if (oldNode.type === 'text') ;\n else if (oldNode.renderer && oldNode.renderer.unrender) {\n oldNode.renderer.unrender(child, {\n attrs: oldNode.attrs,\n children: oldNode.children\n });\n }\n else {\n removeContent(child, oldNode.children, 0, false);\n }\n if (_sentinel) {\n host.removeChild(child);\n }\n }\n }\n /**\n * A set of special-cased attribute names.\n */\n const specialAttrs = {\n key: true,\n className: true,\n htmlFor: true,\n dataset: true,\n style: true\n };\n /**\n * Add element attributes to a newly created HTML element.\n */\n function addAttrs(element, attrs) {\n // Add the inline event listeners and node attributes.\n for (let name in attrs) {\n if (name in specialAttrs) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = attrs[name];\n }\n else {\n element.setAttribute(name, attrs[name]);\n }\n }\n // Add the element `class` attribute.\n if (attrs.className !== undefined) {\n element.setAttribute('class', attrs.className);\n }\n // Add the element `for` attribute.\n if (attrs.htmlFor !== undefined) {\n element.setAttribute('for', attrs.htmlFor);\n }\n // Add the dataset values.\n if (attrs.dataset) {\n addDataset(element, attrs.dataset);\n }\n // Add the inline styles.\n if (attrs.style) {\n addStyle(element, attrs.style);\n }\n }\n /**\n * Update the element attributes of an HTML element.\n */\n function updateAttrs(element, oldAttrs, newAttrs) {\n // Do nothing if the attrs are the same object.\n if (oldAttrs === newAttrs) {\n return;\n }\n // Setup the strongly typed loop variable.\n let name;\n // Remove attributes and listeners which no longer exist.\n for (name in oldAttrs) {\n if (name in specialAttrs || name in newAttrs) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = null;\n }\n else {\n element.removeAttribute(name);\n }\n }\n // Add and update new and existing attributes and listeners.\n for (name in newAttrs) {\n if (name in specialAttrs || oldAttrs[name] === newAttrs[name]) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = newAttrs[name];\n }\n else {\n element.setAttribute(name, newAttrs[name]);\n }\n }\n // Update the element `class` attribute.\n if (oldAttrs.className !== newAttrs.className) {\n if (newAttrs.className !== undefined) {\n element.setAttribute('class', newAttrs.className);\n }\n else {\n element.removeAttribute('class');\n }\n }\n // Add the element `for` attribute.\n if (oldAttrs.htmlFor !== newAttrs.htmlFor) {\n if (newAttrs.htmlFor !== undefined) {\n element.setAttribute('for', newAttrs.htmlFor);\n }\n else {\n element.removeAttribute('for');\n }\n }\n // Update the dataset values.\n if (oldAttrs.dataset !== newAttrs.dataset) {\n updateDataset(element, oldAttrs.dataset || {}, newAttrs.dataset || {});\n }\n // Update the inline styles.\n if (oldAttrs.style !== newAttrs.style) {\n updateStyle(element, oldAttrs.style || {}, newAttrs.style || {});\n }\n }\n /**\n * Add dataset values to a newly created HTML element.\n */\n function addDataset(element, dataset) {\n for (let name in dataset) {\n element.setAttribute(`data-${name}`, dataset[name]);\n }\n }\n /**\n * Update the dataset values of an HTML element.\n */\n function updateDataset(element, oldDataset, newDataset) {\n for (let name in oldDataset) {\n if (!(name in newDataset)) {\n element.removeAttribute(`data-${name}`);\n }\n }\n for (let name in newDataset) {\n if (oldDataset[name] !== newDataset[name]) {\n element.setAttribute(`data-${name}`, newDataset[name]);\n }\n }\n }\n /**\n * Add inline style values to a newly created HTML element.\n */\n function addStyle(element, style) {\n let elemStyle = element.style;\n let name;\n for (name in style) {\n elemStyle[name] = style[name];\n }\n }\n /**\n * Update the inline style values of an HTML element.\n */\n function updateStyle(element, oldStyle, newStyle) {\n let elemStyle = element.style;\n let name;\n for (name in oldStyle) {\n if (!(name in newStyle)) {\n elemStyle[name] = '';\n }\n }\n for (name in newStyle) {\n if (oldStyle[name] !== newStyle[name]) {\n elemStyle[name] = newStyle[name];\n }\n }\n }\n /**\n * Collect a mapping of keyed elements for the host content.\n */\n function collectKeys(host, content) {\n let node = host.firstChild;\n let keyMap = Object.create(null);\n for (let vNode of content) {\n if (vNode.type === 'element' && vNode.attrs.key) {\n keyMap[vNode.attrs.key] = { vNode, element: node };\n }\n node = node.nextSibling;\n }\n return keyMap;\n }\n})(Private || (Private = {}));\n\nexport { VirtualDOM, VirtualElement, VirtualElementPass, VirtualText, h, hpass };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt, StringExt, empty, find, max } from '@lumino/algorithm';\nimport { UUID, JSONExt, MimeData } from '@lumino/coreutils';\nimport { ElementExt, Selector, Platform } from '@lumino/domutils';\nimport { Message, ConflatableMessage, MessageLoop } from '@lumino/messaging';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Signal } from '@lumino/signaling';\nimport { Drag } from '@lumino/dragdrop';\nimport { CommandRegistry } from '@lumino/commands';\nimport { VirtualDOM, h } from '@lumino/virtualdom';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { getKeyboardLayout } from '@lumino/keyboard';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A sizer object for use with the box engine layout functions.\n *\n * #### Notes\n * A box sizer holds the geometry information for an object along an\n * arbitrary layout orientation.\n *\n * For best performance, this class should be treated as a raw data\n * struct. It should not typically be subclassed.\n */\nclass BoxSizer {\n constructor() {\n /**\n * The preferred size for the sizer.\n *\n * #### Notes\n * The sizer will be given this initial size subject to its size\n * bounds. The sizer will not deviate from this size unless such\n * deviation is required to fit into the available layout space.\n *\n * There is no limit to this value, but it will be clamped to the\n * bounds defined by {@link minSize} and {@link maxSize}.\n *\n * The default value is `0`.\n */\n this.sizeHint = 0;\n /**\n * The minimum size of the sizer.\n *\n * #### Notes\n * The sizer will never be sized less than this value, even if\n * it means the sizer will overflow the available layout space.\n *\n * It is assumed that this value lies in the range `[0, Infinity)`\n * and that it is `<=` to {@link maxSize}. Failure to adhere to this\n * constraint will yield undefined results.\n *\n * The default value is `0`.\n */\n this.minSize = 0;\n /**\n * The maximum size of the sizer.\n *\n * #### Notes\n * The sizer will never be sized greater than this value, even if\n * it means the sizer will underflow the available layout space.\n *\n * It is assumed that this value lies in the range `[0, Infinity]`\n * and that it is `>=` to {@link minSize}. Failure to adhere to this\n * constraint will yield undefined results.\n *\n * The default value is `Infinity`.\n */\n this.maxSize = Infinity;\n /**\n * The stretch factor for the sizer.\n *\n * #### Notes\n * This controls how much the sizer stretches relative to its sibling\n * sizers when layout space is distributed. A stretch factor of zero\n * is special and will cause the sizer to only be resized after all\n * other sizers with a stretch factor greater than zero have been\n * resized to their limits.\n *\n * It is assumed that this value is an integer that lies in the range\n * `[0, Infinity)`. Failure to adhere to this constraint will yield\n * undefined results.\n *\n * The default value is `1`.\n */\n this.stretch = 1;\n /**\n * The computed size of the sizer.\n *\n * #### Notes\n * This value is the output of a call to {@link BoxEngine.calc}. It represents\n * the computed size for the object along the layout orientation,\n * and will always lie in the range `[minSize, maxSize]`.\n *\n * This value is output only.\n *\n * Changing this value will have no effect.\n */\n this.size = 0;\n /**\n * An internal storage property for the layout algorithm.\n *\n * #### Notes\n * This value is used as temporary storage by the layout algorithm.\n *\n * Changing this value will have no effect.\n */\n this.done = false;\n }\n}\n/**\n * The namespace for the box engine layout functions.\n */\nvar BoxEngine;\n(function (BoxEngine) {\n /**\n * Calculate the optimal layout sizes for a sequence of box sizers.\n *\n * This distributes the available layout space among the box sizers\n * according to the following algorithm:\n *\n * 1. Initialize the sizers's size to its size hint and compute the\n * sums for each of size hint, min size, and max size.\n *\n * 2. If the total size hint equals the available space, return.\n *\n * 3. If the available space is less than the total min size, set all\n * sizers to their min size and return.\n *\n * 4. If the available space is greater than the total max size, set\n * all sizers to their max size and return.\n *\n * 5. If the layout space is less than the total size hint, distribute\n * the negative delta as follows:\n *\n * a. Shrink each sizer with a stretch factor greater than zero by\n * an amount proportional to the negative space and the sum of\n * stretch factors. If the sizer reaches its min size, remove\n * it and its stretch factor from the computation.\n *\n * b. If after adjusting all stretch sizers there remains negative\n * space, distribute the space equally among the sizers with a\n * stretch factor of zero. If a sizer reaches its min size,\n * remove it from the computation.\n *\n * 6. If the layout space is greater than the total size hint,\n * distribute the positive delta as follows:\n *\n * a. Expand each sizer with a stretch factor greater than zero by\n * an amount proportional to the postive space and the sum of\n * stretch factors. If the sizer reaches its max size, remove\n * it and its stretch factor from the computation.\n *\n * b. If after adjusting all stretch sizers there remains positive\n * space, distribute the space equally among the sizers with a\n * stretch factor of zero. If a sizer reaches its max size,\n * remove it from the computation.\n *\n * 7. return\n *\n * @param sizers - The sizers for a particular layout line.\n *\n * @param space - The available layout space for the sizers.\n *\n * @returns The delta between the provided available space and the\n * actual consumed space. This value will be zero if the sizers\n * can be adjusted to fit, negative if the available space is too\n * small, and positive if the available space is too large.\n *\n * #### Notes\n * The {@link BoxSizer.size} of each sizer is updated with the computed size.\n *\n * This function can be called at any time to recompute the layout for\n * an existing sequence of sizers. The previously computed results will\n * have no effect on the new output. It is therefore not necessary to\n * create new sizer objects on each resize event.\n */\n function calc(sizers, space) {\n // Bail early if there is nothing to do.\n let count = sizers.length;\n if (count === 0) {\n return space;\n }\n // Setup the size and stretch counters.\n let totalMin = 0;\n let totalMax = 0;\n let totalSize = 0;\n let totalStretch = 0;\n let stretchCount = 0;\n // Setup the sizers and compute the totals.\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n let min = sizer.minSize;\n let max = sizer.maxSize;\n let hint = sizer.sizeHint;\n sizer.done = false;\n sizer.size = Math.max(min, Math.min(hint, max));\n totalSize += sizer.size;\n totalMin += min;\n totalMax += max;\n if (sizer.stretch > 0) {\n totalStretch += sizer.stretch;\n stretchCount++;\n }\n }\n // If the space is equal to the total size, return early.\n if (space === totalSize) {\n return 0;\n }\n // If the space is less than the total min, minimize each sizer.\n if (space <= totalMin) {\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n sizer.size = sizer.minSize;\n }\n return space - totalMin;\n }\n // If the space is greater than the total max, maximize each sizer.\n if (space >= totalMax) {\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n sizer.size = sizer.maxSize;\n }\n return space - totalMax;\n }\n // The loops below perform sub-pixel precision sizing. A near zero\n // value is used for compares instead of zero to ensure that the\n // loop terminates when the subdivided space is reasonably small.\n let nearZero = 0.01;\n // A counter which is decremented each time a sizer is resized to\n // its limit. This ensures the loops terminate even if there is\n // space remaining to distribute.\n let notDoneCount = count;\n // Distribute negative delta space.\n if (space < totalSize) {\n // Shrink each stretchable sizer by an amount proportional to its\n // stretch factor. If a sizer reaches its min size it's marked as\n // done. The loop progresses in phases where each sizer is given\n // a chance to consume its fair share for the pass, regardless of\n // whether a sizer before it reached its limit. This continues\n // until the stretchable sizers or the free space is exhausted.\n let freeSpace = totalSize - space;\n while (stretchCount > 0 && freeSpace > nearZero) {\n let distSpace = freeSpace;\n let distStretch = totalStretch;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done || sizer.stretch === 0) {\n continue;\n }\n let amt = (sizer.stretch * distSpace) / distStretch;\n if (sizer.size - amt <= sizer.minSize) {\n freeSpace -= sizer.size - sizer.minSize;\n totalStretch -= sizer.stretch;\n sizer.size = sizer.minSize;\n sizer.done = true;\n notDoneCount--;\n stretchCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size -= amt;\n }\n }\n }\n // Distribute any remaining space evenly among the non-stretchable\n // sizers. This progresses in phases in the same manner as above.\n while (notDoneCount > 0 && freeSpace > nearZero) {\n let amt = freeSpace / notDoneCount;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done) {\n continue;\n }\n if (sizer.size - amt <= sizer.minSize) {\n freeSpace -= sizer.size - sizer.minSize;\n sizer.size = sizer.minSize;\n sizer.done = true;\n notDoneCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size -= amt;\n }\n }\n }\n }\n // Distribute positive delta space.\n else {\n // Expand each stretchable sizer by an amount proportional to its\n // stretch factor. If a sizer reaches its max size it's marked as\n // done. The loop progresses in phases where each sizer is given\n // a chance to consume its fair share for the pass, regardless of\n // whether a sizer before it reached its limit. This continues\n // until the stretchable sizers or the free space is exhausted.\n let freeSpace = space - totalSize;\n while (stretchCount > 0 && freeSpace > nearZero) {\n let distSpace = freeSpace;\n let distStretch = totalStretch;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done || sizer.stretch === 0) {\n continue;\n }\n let amt = (sizer.stretch * distSpace) / distStretch;\n if (sizer.size + amt >= sizer.maxSize) {\n freeSpace -= sizer.maxSize - sizer.size;\n totalStretch -= sizer.stretch;\n sizer.size = sizer.maxSize;\n sizer.done = true;\n notDoneCount--;\n stretchCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size += amt;\n }\n }\n }\n // Distribute any remaining space evenly among the non-stretchable\n // sizers. This progresses in phases in the same manner as above.\n while (notDoneCount > 0 && freeSpace > nearZero) {\n let amt = freeSpace / notDoneCount;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done) {\n continue;\n }\n if (sizer.size + amt >= sizer.maxSize) {\n freeSpace -= sizer.maxSize - sizer.size;\n sizer.size = sizer.maxSize;\n sizer.done = true;\n notDoneCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size += amt;\n }\n }\n }\n }\n // Indicate that the consumed space equals the available space.\n return 0;\n }\n BoxEngine.calc = calc;\n /**\n * Adjust a sizer by a delta and update its neighbors accordingly.\n *\n * @param sizers - The sizers which should be adjusted.\n *\n * @param index - The index of the sizer to grow.\n *\n * @param delta - The amount to adjust the sizer, positive or negative.\n *\n * #### Notes\n * This will adjust the indicated sizer by the specified amount, along\n * with the sizes of the appropriate neighbors, subject to the limits\n * specified by each of the sizers.\n *\n * This is useful when implementing box layouts where the boundaries\n * between the sizers are interactively adjustable by the user.\n */\n function adjust(sizers, index, delta) {\n // Bail early when there is nothing to do.\n if (sizers.length === 0 || delta === 0) {\n return;\n }\n // Dispatch to the proper implementation.\n if (delta > 0) {\n growSizer(sizers, index, delta);\n }\n else {\n shrinkSizer(sizers, index, -delta);\n }\n }\n BoxEngine.adjust = adjust;\n /**\n * Grow a sizer by a positive delta and adjust neighbors.\n */\n function growSizer(sizers, index, delta) {\n // Compute how much the items to the left can expand.\n let growLimit = 0;\n for (let i = 0; i <= index; ++i) {\n let sizer = sizers[i];\n growLimit += sizer.maxSize - sizer.size;\n }\n // Compute how much the items to the right can shrink.\n let shrinkLimit = 0;\n for (let i = index + 1, n = sizers.length; i < n; ++i) {\n let sizer = sizers[i];\n shrinkLimit += sizer.size - sizer.minSize;\n }\n // Clamp the delta adjustment to the limits.\n delta = Math.min(delta, growLimit, shrinkLimit);\n // Grow the sizers to the left by the delta.\n let grow = delta;\n for (let i = index; i >= 0 && grow > 0; --i) {\n let sizer = sizers[i];\n let limit = sizer.maxSize - sizer.size;\n if (limit >= grow) {\n sizer.sizeHint = sizer.size + grow;\n grow = 0;\n }\n else {\n sizer.sizeHint = sizer.size + limit;\n grow -= limit;\n }\n }\n // Shrink the sizers to the right by the delta.\n let shrink = delta;\n for (let i = index + 1, n = sizers.length; i < n && shrink > 0; ++i) {\n let sizer = sizers[i];\n let limit = sizer.size - sizer.minSize;\n if (limit >= shrink) {\n sizer.sizeHint = sizer.size - shrink;\n shrink = 0;\n }\n else {\n sizer.sizeHint = sizer.size - limit;\n shrink -= limit;\n }\n }\n }\n /**\n * Shrink a sizer by a positive delta and adjust neighbors.\n */\n function shrinkSizer(sizers, index, delta) {\n // Compute how much the items to the right can expand.\n let growLimit = 0;\n for (let i = index + 1, n = sizers.length; i < n; ++i) {\n let sizer = sizers[i];\n growLimit += sizer.maxSize - sizer.size;\n }\n // Compute how much the items to the left can shrink.\n let shrinkLimit = 0;\n for (let i = 0; i <= index; ++i) {\n let sizer = sizers[i];\n shrinkLimit += sizer.size - sizer.minSize;\n }\n // Clamp the delta adjustment to the limits.\n delta = Math.min(delta, growLimit, shrinkLimit);\n // Grow the sizers to the right by the delta.\n let grow = delta;\n for (let i = index + 1, n = sizers.length; i < n && grow > 0; ++i) {\n let sizer = sizers[i];\n let limit = sizer.maxSize - sizer.size;\n if (limit >= grow) {\n sizer.sizeHint = sizer.size + grow;\n grow = 0;\n }\n else {\n sizer.sizeHint = sizer.size + limit;\n grow -= limit;\n }\n }\n // Shrink the sizers to the left by the delta.\n let shrink = delta;\n for (let i = index; i >= 0 && shrink > 0; --i) {\n let sizer = sizers[i];\n let limit = sizer.size - sizer.minSize;\n if (limit >= shrink) {\n sizer.sizeHint = sizer.size - shrink;\n shrink = 0;\n }\n else {\n sizer.sizeHint = sizer.size - limit;\n shrink -= limit;\n }\n }\n }\n})(BoxEngine || (BoxEngine = {}));\n\n/**\n * An object which holds data related to an object's title.\n *\n * #### Notes\n * A title object is intended to hold the data necessary to display a\n * header for a particular object. A common example is the `TabPanel`,\n * which uses the widget title to populate the tab for a child widget.\n *\n * It is the responsibility of the owner to call the title disposal.\n */\nclass Title {\n /**\n * Construct a new title.\n *\n * @param options - The options for initializing the title.\n */\n constructor(options) {\n this._label = '';\n this._caption = '';\n this._mnemonic = -1;\n this._icon = undefined;\n this._iconClass = '';\n this._iconLabel = '';\n this._className = '';\n this._closable = false;\n this._changed = new Signal(this);\n this._isDisposed = false;\n this.owner = options.owner;\n if (options.label !== undefined) {\n this._label = options.label;\n }\n if (options.mnemonic !== undefined) {\n this._mnemonic = options.mnemonic;\n }\n if (options.icon !== undefined) {\n this._icon = options.icon;\n }\n if (options.iconClass !== undefined) {\n this._iconClass = options.iconClass;\n }\n if (options.iconLabel !== undefined) {\n this._iconLabel = options.iconLabel;\n }\n if (options.caption !== undefined) {\n this._caption = options.caption;\n }\n if (options.className !== undefined) {\n this._className = options.className;\n }\n if (options.closable !== undefined) {\n this._closable = options.closable;\n }\n this._dataset = options.dataset || {};\n }\n /**\n * A signal emitted when the state of the title changes.\n */\n get changed() {\n return this._changed;\n }\n /**\n * Get the label for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get label() {\n return this._label;\n }\n /**\n * Set the label for the title.\n */\n set label(value) {\n if (this._label === value) {\n return;\n }\n this._label = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the mnemonic index for the title.\n *\n * #### Notes\n * The default value is `-1`.\n */\n get mnemonic() {\n return this._mnemonic;\n }\n /**\n * Set the mnemonic index for the title.\n */\n set mnemonic(value) {\n if (this._mnemonic === value) {\n return;\n }\n this._mnemonic = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon renderer for the title.\n *\n * #### Notes\n * The default value is undefined.\n */\n get icon() {\n return this._icon;\n }\n /**\n * Set the icon renderer for the title.\n *\n * #### Notes\n * A renderer is an object that supplies a render and unrender function.\n */\n set icon(value) {\n if (this._icon === value) {\n return;\n }\n this._icon = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon class name for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get iconClass() {\n return this._iconClass;\n }\n /**\n * Set the icon class name for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set iconClass(value) {\n if (this._iconClass === value) {\n return;\n }\n this._iconClass = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon label for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get iconLabel() {\n return this._iconLabel;\n }\n /**\n * Set the icon label for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set iconLabel(value) {\n if (this._iconLabel === value) {\n return;\n }\n this._iconLabel = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the caption for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get caption() {\n return this._caption;\n }\n /**\n * Set the caption for the title.\n */\n set caption(value) {\n if (this._caption === value) {\n return;\n }\n this._caption = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the extra class name for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get className() {\n return this._className;\n }\n /**\n * Set the extra class name for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set className(value) {\n if (this._className === value) {\n return;\n }\n this._className = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the closable state for the title.\n *\n * #### Notes\n * The default value is `false`.\n */\n get closable() {\n return this._closable;\n }\n /**\n * Set the closable state for the title.\n *\n * #### Notes\n * This controls the presence of a close icon when applicable.\n */\n set closable(value) {\n if (this._closable === value) {\n return;\n }\n this._closable = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the dataset for the title.\n *\n * #### Notes\n * The default value is an empty dataset.\n */\n get dataset() {\n return this._dataset;\n }\n /**\n * Set the dataset for the title.\n *\n * #### Notes\n * This controls the data attributes when applicable.\n */\n set dataset(value) {\n if (this._dataset === value) {\n return;\n }\n this._dataset = value;\n this._changed.emit(undefined);\n }\n /**\n * Test whether the title has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the resources held by the title.\n *\n * #### Notes\n * It is the responsibility of the owner to call the title disposal.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n Signal.clearData(this);\n }\n}\n\n/**\n * The base class of the lumino widget hierarchy.\n *\n * #### Notes\n * This class will typically be subclassed in order to create a useful\n * widget. However, it can be used directly to host externally created\n * content.\n */\nclass Widget {\n /**\n * Construct a new widget.\n *\n * @param options - The options for initializing the widget.\n */\n constructor(options = {}) {\n this._flags = 0;\n this._layout = null;\n this._parent = null;\n this._disposed = new Signal(this);\n this._hiddenMode = Widget.HiddenMode.Display;\n this.node = Private$j.createNode(options);\n this.addClass('lm-Widget');\n }\n /**\n * Dispose of the widget and its descendant widgets.\n *\n * #### Notes\n * It is unsafe to use the widget after it has been disposed.\n *\n * All calls made to this method after the first are a no-op.\n */\n dispose() {\n // Do nothing if the widget is already disposed.\n if (this.isDisposed) {\n return;\n }\n // Set the disposed flag and emit the disposed signal.\n this.setFlag(Widget.Flag.IsDisposed);\n this._disposed.emit(undefined);\n // Remove or detach the widget if necessary.\n if (this.parent) {\n this.parent = null;\n }\n else if (this.isAttached) {\n Widget.detach(this);\n }\n // Dispose of the widget layout.\n if (this._layout) {\n this._layout.dispose();\n this._layout = null;\n }\n // Dispose the title\n this.title.dispose();\n // Clear the extra data associated with the widget.\n Signal.clearData(this);\n MessageLoop.clearData(this);\n AttachedProperty.clearData(this);\n }\n /**\n * A signal emitted when the widget is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Test whether the widget has been disposed.\n */\n get isDisposed() {\n return this.testFlag(Widget.Flag.IsDisposed);\n }\n /**\n * Test whether the widget's node is attached to the DOM.\n */\n get isAttached() {\n return this.testFlag(Widget.Flag.IsAttached);\n }\n /**\n * Test whether the widget is explicitly hidden.\n */\n get isHidden() {\n return this.testFlag(Widget.Flag.IsHidden);\n }\n /**\n * Test whether the widget is visible.\n *\n * #### Notes\n * A widget is visible when it is attached to the DOM, is not\n * explicitly hidden, and has no explicitly hidden ancestors.\n */\n get isVisible() {\n return this.testFlag(Widget.Flag.IsVisible);\n }\n /**\n * The title object for the widget.\n *\n * #### Notes\n * The title object is used by some container widgets when displaying\n * the widget alongside some title, such as a tab panel or side bar.\n *\n * Since not all widgets will use the title, it is created on demand.\n *\n * The `owner` property of the title is set to this widget.\n */\n get title() {\n return Private$j.titleProperty.get(this);\n }\n /**\n * Get the id of the widget's DOM node.\n */\n get id() {\n return this.node.id;\n }\n /**\n * Set the id of the widget's DOM node.\n */\n set id(value) {\n this.node.id = value;\n }\n /**\n * The dataset for the widget's DOM node.\n */\n get dataset() {\n return this.node.dataset;\n }\n /**\n * Get the method for hiding the widget.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n /**\n * Set the method for hiding the widget.\n */\n set hiddenMode(value) {\n if (this._hiddenMode === value) {\n return;\n }\n if (this.isHidden) {\n // Reset styles set by previous mode.\n this._toggleHidden(false);\n }\n if (value == Widget.HiddenMode.Scale) {\n this.node.style.willChange = 'transform';\n }\n else {\n this.node.style.willChange = 'auto';\n }\n this._hiddenMode = value;\n if (this.isHidden) {\n // Set styles for new mode.\n this._toggleHidden(true);\n }\n }\n /**\n * Get the parent of the widget.\n */\n get parent() {\n return this._parent;\n }\n /**\n * Set the parent of the widget.\n *\n * #### Notes\n * Children are typically added to a widget by using a layout, which\n * means user code will not normally set the parent widget directly.\n *\n * The widget will be automatically removed from its old parent.\n *\n * This is a no-op if there is no effective parent change.\n */\n set parent(value) {\n if (this._parent === value) {\n return;\n }\n if (value && this.contains(value)) {\n throw new Error('Invalid parent widget.');\n }\n if (this._parent && !this._parent.isDisposed) {\n let msg = new Widget.ChildMessage('child-removed', this);\n MessageLoop.sendMessage(this._parent, msg);\n }\n this._parent = value;\n if (this._parent && !this._parent.isDisposed) {\n let msg = new Widget.ChildMessage('child-added', this);\n MessageLoop.sendMessage(this._parent, msg);\n }\n if (!this.isDisposed) {\n MessageLoop.sendMessage(this, Widget.Msg.ParentChanged);\n }\n }\n /**\n * Get the layout for the widget.\n */\n get layout() {\n return this._layout;\n }\n /**\n * Set the layout for the widget.\n *\n * #### Notes\n * The layout is single-use only. It cannot be changed after the\n * first assignment.\n *\n * The layout is disposed automatically when the widget is disposed.\n */\n set layout(value) {\n if (this._layout === value) {\n return;\n }\n if (this.testFlag(Widget.Flag.DisallowLayout)) {\n throw new Error('Cannot set widget layout.');\n }\n if (this._layout) {\n throw new Error('Cannot change widget layout.');\n }\n if (value.parent) {\n throw new Error('Cannot change layout parent.');\n }\n this._layout = value;\n value.parent = this;\n }\n /**\n * Create an iterator over the widget's children.\n *\n * @returns A new iterator over the children of the widget.\n *\n * #### Notes\n * The widget must have a populated layout in order to have children.\n *\n * If a layout is not installed, the returned iterator will be empty.\n */\n *children() {\n if (this._layout) {\n yield* this._layout;\n }\n }\n /**\n * Test whether a widget is a descendant of this widget.\n *\n * @param widget - The descendant widget of interest.\n *\n * @returns `true` if the widget is a descendant, `false` otherwise.\n */\n contains(widget) {\n for (let value = widget; value; value = value._parent) {\n if (value === this) {\n return true;\n }\n }\n return false;\n }\n /**\n * Test whether the widget's DOM node has the given class name.\n *\n * @param name - The class name of interest.\n *\n * @returns `true` if the node has the class, `false` otherwise.\n */\n hasClass(name) {\n return this.node.classList.contains(name);\n }\n /**\n * Add a class name to the widget's DOM node.\n *\n * @param name - The class name to add to the node.\n *\n * #### Notes\n * If the class name is already added to the node, this is a no-op.\n *\n * The class name must not contain whitespace.\n */\n addClass(name) {\n this.node.classList.add(name);\n }\n /**\n * Remove a class name from the widget's DOM node.\n *\n * @param name - The class name to remove from the node.\n *\n * #### Notes\n * If the class name is not yet added to the node, this is a no-op.\n *\n * The class name must not contain whitespace.\n */\n removeClass(name) {\n this.node.classList.remove(name);\n }\n /**\n * Toggle a class name on the widget's DOM node.\n *\n * @param name - The class name to toggle on the node.\n *\n * @param force - Whether to force add the class (`true`) or force\n * remove the class (`false`). If not provided, the presence of\n * the class will be toggled from its current state.\n *\n * @returns `true` if the class is now present, `false` otherwise.\n *\n * #### Notes\n * The class name must not contain whitespace.\n */\n toggleClass(name, force) {\n if (force === true) {\n this.node.classList.add(name);\n return true;\n }\n if (force === false) {\n this.node.classList.remove(name);\n return false;\n }\n return this.node.classList.toggle(name);\n }\n /**\n * Post an `'update-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n update() {\n MessageLoop.postMessage(this, Widget.Msg.UpdateRequest);\n }\n /**\n * Post a `'fit-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n fit() {\n MessageLoop.postMessage(this, Widget.Msg.FitRequest);\n }\n /**\n * Post an `'activate-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n activate() {\n MessageLoop.postMessage(this, Widget.Msg.ActivateRequest);\n }\n /**\n * Send a `'close-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for sending the message.\n */\n close() {\n MessageLoop.sendMessage(this, Widget.Msg.CloseRequest);\n }\n /**\n * Show the widget and make it visible to its parent widget.\n *\n * #### Notes\n * This causes the {@link isHidden} property to be `false`.\n *\n * If the widget is not explicitly hidden, this is a no-op.\n */\n show() {\n if (!this.testFlag(Widget.Flag.IsHidden)) {\n return;\n }\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.BeforeShow);\n }\n this.clearFlag(Widget.Flag.IsHidden);\n this._toggleHidden(false);\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.AfterShow);\n }\n if (this.parent) {\n let msg = new Widget.ChildMessage('child-shown', this);\n MessageLoop.sendMessage(this.parent, msg);\n }\n }\n /**\n * Hide the widget and make it hidden to its parent widget.\n *\n * #### Notes\n * This causes the {@link isHidden} property to be `true`.\n *\n * If the widget is explicitly hidden, this is a no-op.\n */\n hide() {\n if (this.testFlag(Widget.Flag.IsHidden)) {\n return;\n }\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.BeforeHide);\n }\n this.setFlag(Widget.Flag.IsHidden);\n this._toggleHidden(true);\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.AfterHide);\n }\n if (this.parent) {\n let msg = new Widget.ChildMessage('child-hidden', this);\n MessageLoop.sendMessage(this.parent, msg);\n }\n }\n /**\n * Show or hide the widget according to a boolean value.\n *\n * @param hidden - `true` to hide the widget, or `false` to show it.\n *\n * #### Notes\n * This is a convenience method for `hide()` and `show()`.\n */\n setHidden(hidden) {\n if (hidden) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n /**\n * Test whether the given widget flag is set.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n testFlag(flag) {\n return (this._flags & flag) !== 0;\n }\n /**\n * Set the given widget flag.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n setFlag(flag) {\n this._flags |= flag;\n }\n /**\n * Clear the given widget flag.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n clearFlag(flag) {\n this._flags &= ~flag;\n }\n /**\n * Process a message sent to the widget.\n *\n * @param msg - The message sent to the widget.\n *\n * #### Notes\n * Subclasses may reimplement this method as needed.\n */\n processMessage(msg) {\n switch (msg.type) {\n case 'resize':\n this.notifyLayout(msg);\n this.onResize(msg);\n break;\n case 'update-request':\n this.notifyLayout(msg);\n this.onUpdateRequest(msg);\n break;\n case 'fit-request':\n this.notifyLayout(msg);\n this.onFitRequest(msg);\n break;\n case 'before-show':\n this.notifyLayout(msg);\n this.onBeforeShow(msg);\n break;\n case 'after-show':\n this.setFlag(Widget.Flag.IsVisible);\n this.notifyLayout(msg);\n this.onAfterShow(msg);\n break;\n case 'before-hide':\n this.notifyLayout(msg);\n this.onBeforeHide(msg);\n break;\n case 'after-hide':\n this.clearFlag(Widget.Flag.IsVisible);\n this.notifyLayout(msg);\n this.onAfterHide(msg);\n break;\n case 'before-attach':\n this.notifyLayout(msg);\n this.onBeforeAttach(msg);\n break;\n case 'after-attach':\n if (!this.isHidden && (!this.parent || this.parent.isVisible)) {\n this.setFlag(Widget.Flag.IsVisible);\n }\n this.setFlag(Widget.Flag.IsAttached);\n this.notifyLayout(msg);\n this.onAfterAttach(msg);\n break;\n case 'before-detach':\n this.notifyLayout(msg);\n this.onBeforeDetach(msg);\n break;\n case 'after-detach':\n this.clearFlag(Widget.Flag.IsVisible);\n this.clearFlag(Widget.Flag.IsAttached);\n this.notifyLayout(msg);\n this.onAfterDetach(msg);\n break;\n case 'activate-request':\n this.notifyLayout(msg);\n this.onActivateRequest(msg);\n break;\n case 'close-request':\n this.notifyLayout(msg);\n this.onCloseRequest(msg);\n break;\n case 'child-added':\n this.notifyLayout(msg);\n this.onChildAdded(msg);\n break;\n case 'child-removed':\n this.notifyLayout(msg);\n this.onChildRemoved(msg);\n break;\n default:\n this.notifyLayout(msg);\n break;\n }\n }\n /**\n * Invoke the message processing routine of the widget's layout.\n *\n * @param msg - The message to dispatch to the layout.\n *\n * #### Notes\n * This is a no-op if the widget does not have a layout.\n *\n * This will not typically be called directly by user code.\n */\n notifyLayout(msg) {\n if (this._layout) {\n this._layout.processParentMessage(msg);\n }\n }\n /**\n * A message handler invoked on a `'close-request'` message.\n *\n * #### Notes\n * The default implementation unparents or detaches the widget.\n */\n onCloseRequest(msg) {\n if (this.parent) {\n this.parent = null;\n }\n else if (this.isAttached) {\n Widget.detach(this);\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onResize(msg) { }\n /**\n * A message handler invoked on an `'update-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onUpdateRequest(msg) { }\n /**\n * A message handler invoked on a `'fit-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onFitRequest(msg) { }\n /**\n * A message handler invoked on an `'activate-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onActivateRequest(msg) { }\n /**\n * A message handler invoked on a `'before-show'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeShow(msg) { }\n /**\n * A message handler invoked on an `'after-show'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterShow(msg) { }\n /**\n * A message handler invoked on a `'before-hide'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeHide(msg) { }\n /**\n * A message handler invoked on an `'after-hide'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterHide(msg) { }\n /**\n * A message handler invoked on a `'before-attach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeAttach(msg) { }\n /**\n * A message handler invoked on an `'after-attach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterAttach(msg) { }\n /**\n * A message handler invoked on a `'before-detach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeDetach(msg) { }\n /**\n * A message handler invoked on an `'after-detach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterDetach(msg) { }\n /**\n * A message handler invoked on a `'child-added'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildAdded(msg) { }\n /**\n * A message handler invoked on a `'child-removed'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildRemoved(msg) { }\n _toggleHidden(hidden) {\n if (hidden) {\n switch (this._hiddenMode) {\n case Widget.HiddenMode.Display:\n this.addClass('lm-mod-hidden');\n break;\n case Widget.HiddenMode.Scale:\n this.node.style.transform = 'scale(0)';\n this.node.setAttribute('aria-hidden', 'true');\n break;\n case Widget.HiddenMode.ContentVisibility:\n // @ts-expect-error content-visibility unknown by DOM lib types\n this.node.style.contentVisibility = 'hidden';\n this.node.style.zIndex = '-1';\n break;\n }\n }\n else {\n switch (this._hiddenMode) {\n case Widget.HiddenMode.Display:\n this.removeClass('lm-mod-hidden');\n break;\n case Widget.HiddenMode.Scale:\n this.node.style.transform = '';\n this.node.removeAttribute('aria-hidden');\n break;\n case Widget.HiddenMode.ContentVisibility:\n // @ts-expect-error content-visibility unknown by DOM lib types\n this.node.style.contentVisibility = '';\n this.node.style.zIndex = '';\n break;\n }\n }\n }\n}\n/**\n * The namespace for the `Widget` class statics.\n */\n(function (Widget) {\n (function (HiddenMode) {\n /**\n * Set a `lm-mod-hidden` CSS class to hide the widget using `display:none`\n * CSS from the standard Lumino CSS.\n */\n HiddenMode[HiddenMode[\"Display\"] = 0] = \"Display\";\n /**\n * Hide the widget by setting the `transform` to `'scale(0)'`.\n */\n HiddenMode[HiddenMode[\"Scale\"] = 1] = \"Scale\";\n /**\n *Hide the widget by setting the `content-visibility` to `'hidden'`.\n */\n HiddenMode[HiddenMode[\"ContentVisibility\"] = 2] = \"ContentVisibility\";\n })(Widget.HiddenMode || (Widget.HiddenMode = {}));\n (function (Flag) {\n /**\n * The widget has been disposed.\n */\n Flag[Flag[\"IsDisposed\"] = 1] = \"IsDisposed\";\n /**\n * The widget is attached to the DOM.\n */\n Flag[Flag[\"IsAttached\"] = 2] = \"IsAttached\";\n /**\n * The widget is hidden.\n */\n Flag[Flag[\"IsHidden\"] = 4] = \"IsHidden\";\n /**\n * The widget is visible.\n */\n Flag[Flag[\"IsVisible\"] = 8] = \"IsVisible\";\n /**\n * A layout cannot be set on the widget.\n */\n Flag[Flag[\"DisallowLayout\"] = 16] = \"DisallowLayout\";\n })(Widget.Flag || (Widget.Flag = {}));\n (function (Msg) {\n /**\n * A singleton `'before-show'` message.\n *\n * #### Notes\n * This message is sent to a widget before it becomes visible.\n *\n * This message is **not** sent when the widget is being attached.\n */\n Msg.BeforeShow = new Message('before-show');\n /**\n * A singleton `'after-show'` message.\n *\n * #### Notes\n * This message is sent to a widget after it becomes visible.\n *\n * This message is **not** sent when the widget is being attached.\n */\n Msg.AfterShow = new Message('after-show');\n /**\n * A singleton `'before-hide'` message.\n *\n * #### Notes\n * This message is sent to a widget before it becomes not-visible.\n *\n * This message is **not** sent when the widget is being detached.\n */\n Msg.BeforeHide = new Message('before-hide');\n /**\n * A singleton `'after-hide'` message.\n *\n * #### Notes\n * This message is sent to a widget after it becomes not-visible.\n *\n * This message is **not** sent when the widget is being detached.\n */\n Msg.AfterHide = new Message('after-hide');\n /**\n * A singleton `'before-attach'` message.\n *\n * #### Notes\n * This message is sent to a widget before it is attached.\n */\n Msg.BeforeAttach = new Message('before-attach');\n /**\n * A singleton `'after-attach'` message.\n *\n * #### Notes\n * This message is sent to a widget after it is attached.\n */\n Msg.AfterAttach = new Message('after-attach');\n /**\n * A singleton `'before-detach'` message.\n *\n * #### Notes\n * This message is sent to a widget before it is detached.\n */\n Msg.BeforeDetach = new Message('before-detach');\n /**\n * A singleton `'after-detach'` message.\n *\n * #### Notes\n * This message is sent to a widget after it is detached.\n */\n Msg.AfterDetach = new Message('after-detach');\n /**\n * A singleton `'parent-changed'` message.\n *\n * #### Notes\n * This message is sent to a widget when its parent has changed.\n */\n Msg.ParentChanged = new Message('parent-changed');\n /**\n * A singleton conflatable `'update-request'` message.\n *\n * #### Notes\n * This message can be dispatched to supporting widgets in order to\n * update their content based on the current widget state. Not all\n * widgets will respond to messages of this type.\n *\n * For widgets with a layout, this message will inform the layout to\n * update the position and size of its child widgets.\n */\n Msg.UpdateRequest = new ConflatableMessage('update-request');\n /**\n * A singleton conflatable `'fit-request'` message.\n *\n * #### Notes\n * For widgets with a layout, this message will inform the layout to\n * recalculate its size constraints to fit the space requirements of\n * its child widgets, and to update their position and size. Not all\n * layouts will respond to messages of this type.\n */\n Msg.FitRequest = new ConflatableMessage('fit-request');\n /**\n * A singleton conflatable `'activate-request'` message.\n *\n * #### Notes\n * This message should be dispatched to a widget when it should\n * perform the actions necessary to activate the widget, which\n * may include focusing its node or descendant node.\n */\n Msg.ActivateRequest = new ConflatableMessage('activate-request');\n /**\n * A singleton conflatable `'close-request'` message.\n *\n * #### Notes\n * This message should be dispatched to a widget when it should close\n * and remove itself from the widget hierarchy.\n */\n Msg.CloseRequest = new ConflatableMessage('close-request');\n })(Widget.Msg || (Widget.Msg = {}));\n /**\n * A message class for child related messages.\n */\n class ChildMessage extends Message {\n /**\n * Construct a new child message.\n *\n * @param type - The message type.\n *\n * @param child - The child widget for the message.\n */\n constructor(type, child) {\n super(type);\n this.child = child;\n }\n }\n Widget.ChildMessage = ChildMessage;\n /**\n * A message class for `'resize'` messages.\n */\n class ResizeMessage extends Message {\n /**\n * Construct a new resize message.\n *\n * @param width - The **offset width** of the widget, or `-1` if\n * the width is not known.\n *\n * @param height - The **offset height** of the widget, or `-1` if\n * the height is not known.\n */\n constructor(width, height) {\n super('resize');\n this.width = width;\n this.height = height;\n }\n }\n Widget.ResizeMessage = ResizeMessage;\n /**\n * The namespace for the `ResizeMessage` class statics.\n */\n (function (ResizeMessage) {\n /**\n * A singleton `'resize'` message with an unknown size.\n */\n ResizeMessage.UnknownSize = new ResizeMessage(-1, -1);\n })(ResizeMessage = Widget.ResizeMessage || (Widget.ResizeMessage = {}));\n /**\n * Attach a widget to a host DOM node.\n *\n * @param widget - The widget of interest.\n *\n * @param host - The DOM node to use as the widget's host.\n *\n * @param ref - The child of `host` to use as the reference element.\n * If this is provided, the widget will be inserted before this\n * node in the host. The default is `null`, which will cause the\n * widget to be added as the last child of the host.\n *\n * #### Notes\n * This will throw an error if the widget is not a root widget, if\n * the widget is already attached, or if the host is not attached\n * to the DOM.\n */\n function attach(widget, host, ref = null) {\n if (widget.parent) {\n throw new Error('Cannot attach a child widget.');\n }\n if (widget.isAttached || widget.node.isConnected) {\n throw new Error('Widget is already attached.');\n }\n if (!host.isConnected) {\n throw new Error('Host is not attached.');\n }\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n host.insertBefore(widget.node, ref);\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n Widget.attach = attach;\n /**\n * Detach the widget from its host DOM node.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will throw an error if the widget is not a root widget,\n * or if the widget is not attached to the DOM.\n */\n function detach(widget) {\n if (widget.parent) {\n throw new Error('Cannot detach a child widget.');\n }\n if (!widget.isAttached || !widget.node.isConnected) {\n throw new Error('Widget is not attached.');\n }\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n widget.node.parentNode.removeChild(widget.node);\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n Widget.detach = detach;\n})(Widget || (Widget = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$j;\n(function (Private) {\n /**\n * An attached property for the widget title object.\n */\n Private.titleProperty = new AttachedProperty({\n name: 'title',\n create: owner => new Title({ owner })\n });\n /**\n * Create a DOM node for the given widget options.\n */\n function createNode(options) {\n return options.node || document.createElement(options.tag || 'div');\n }\n Private.createNode = createNode;\n})(Private$j || (Private$j = {}));\n\n/**\n * An abstract base class for creating lumino layouts.\n *\n * #### Notes\n * A layout is used to add widgets to a parent and to arrange those\n * widgets within the parent's DOM node.\n *\n * This class implements the base functionality which is required of\n * nearly all layouts. It must be subclassed in order to be useful.\n *\n * Notably, this class does not define a uniform interface for adding\n * widgets to the layout. A subclass should define that API in a way\n * which is meaningful for its intended use.\n */\nclass Layout {\n /**\n * Construct a new layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n this._disposed = false;\n this._parent = null;\n this._fitPolicy = options.fitPolicy || 'set-min-size';\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This should be reimplemented to clear and dispose of the widgets.\n *\n * All reimplementations should call the superclass method.\n *\n * This method is called automatically when the parent is disposed.\n */\n dispose() {\n this._parent = null;\n this._disposed = true;\n Signal.clearData(this);\n AttachedProperty.clearData(this);\n }\n /**\n * Test whether the layout is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Get the parent widget of the layout.\n */\n get parent() {\n return this._parent;\n }\n /**\n * Set the parent widget of the layout.\n *\n * #### Notes\n * This is set automatically when installing the layout on the parent\n * widget. The parent widget should not be set directly by user code.\n */\n set parent(value) {\n if (this._parent === value) {\n return;\n }\n if (this._parent) {\n throw new Error('Cannot change parent widget.');\n }\n if (value.layout !== this) {\n throw new Error('Invalid parent widget.');\n }\n this._parent = value;\n this.init();\n }\n /**\n * Get the fit policy for the layout.\n *\n * #### Notes\n * The fit policy controls the computed size constraints which are\n * applied to the parent widget by the layout.\n *\n * Some layout implementations may ignore the fit policy.\n */\n get fitPolicy() {\n return this._fitPolicy;\n }\n /**\n * Set the fit policy for the layout.\n *\n * #### Notes\n * The fit policy controls the computed size constraints which are\n * applied to the parent widget by the layout.\n *\n * Some layout implementations may ignore the fit policy.\n *\n * Changing the fit policy will clear the current size constraint\n * for the parent widget and then re-fit the parent.\n */\n set fitPolicy(value) {\n // Bail if the policy does not change\n if (this._fitPolicy === value) {\n return;\n }\n // Update the internal policy.\n this._fitPolicy = value;\n // Clear the size constraints and schedule a fit of the parent.\n if (this._parent) {\n let style = this._parent.node.style;\n style.minWidth = '';\n style.minHeight = '';\n style.maxWidth = '';\n style.maxHeight = '';\n this._parent.fit();\n }\n }\n /**\n * Process a message sent to the parent widget.\n *\n * @param msg - The message sent to the parent widget.\n *\n * #### Notes\n * This method is called by the parent widget to process a message.\n *\n * Subclasses may reimplement this method as needed.\n */\n processParentMessage(msg) {\n switch (msg.type) {\n case 'resize':\n this.onResize(msg);\n break;\n case 'update-request':\n this.onUpdateRequest(msg);\n break;\n case 'fit-request':\n this.onFitRequest(msg);\n break;\n case 'before-show':\n this.onBeforeShow(msg);\n break;\n case 'after-show':\n this.onAfterShow(msg);\n break;\n case 'before-hide':\n this.onBeforeHide(msg);\n break;\n case 'after-hide':\n this.onAfterHide(msg);\n break;\n case 'before-attach':\n this.onBeforeAttach(msg);\n break;\n case 'after-attach':\n this.onAfterAttach(msg);\n break;\n case 'before-detach':\n this.onBeforeDetach(msg);\n break;\n case 'after-detach':\n this.onAfterDetach(msg);\n break;\n case 'child-removed':\n this.onChildRemoved(msg);\n break;\n case 'child-shown':\n this.onChildShown(msg);\n break;\n case 'child-hidden':\n this.onChildHidden(msg);\n break;\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n *\n * #### Notes\n * This method is invoked immediately after the layout is installed\n * on the parent widget.\n *\n * The default implementation reparents all of the widgets to the\n * layout parent widget.\n *\n * Subclasses should reimplement this method and attach the child\n * widget nodes to the parent widget's node.\n */\n init() {\n for (const widget of this) {\n widget.parent = this.parent;\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n *\n * #### Notes\n * The layout should ensure that its widgets are resized according\n * to the specified layout space, and that they are sent a `'resize'`\n * message if appropriate.\n *\n * The default implementation of this method sends an `UnknownSize`\n * resize message to all widgets.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onResize(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n *\n * #### Notes\n * The layout should ensure that its widgets are resized according\n * to the available layout space, and that they are sent a `'resize'`\n * message if appropriate.\n *\n * The default implementation of this method sends an `UnknownSize`\n * resize message to all widgets.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onUpdateRequest(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeAttach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on an `'after-attach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterAttach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on a `'before-detach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeDetach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterDetach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeShow(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on an `'after-show'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterShow(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on a `'before-hide'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeHide(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on an `'after-hide'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterHide(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n *\n * #### Notes\n * This will remove the child widget from the layout.\n *\n * Subclasses should **not** typically reimplement this method.\n */\n onChildRemoved(msg) {\n this.removeWidget(msg.child);\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onFitRequest(msg) { }\n /**\n * A message handler invoked on a `'child-shown'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildShown(msg) { }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildHidden(msg) { }\n}\n/**\n * The namespace for the `Layout` class statics.\n */\n(function (Layout) {\n /**\n * Get the horizontal alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The horizontal alignment for the widget.\n *\n * #### Notes\n * If the layout width allocated to a widget is larger than its max\n * width, the horizontal alignment controls how the widget is placed\n * within the extra horizontal space.\n *\n * If the allocated width is less than the widget's max width, the\n * horizontal alignment has no effect.\n *\n * Some layout implementations may ignore horizontal alignment.\n */\n function getHorizontalAlignment(widget) {\n return Private$i.horizontalAlignmentProperty.get(widget);\n }\n Layout.getHorizontalAlignment = getHorizontalAlignment;\n /**\n * Set the horizontal alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the horizontal alignment.\n *\n * #### Notes\n * If the layout width allocated to a widget is larger than its max\n * width, the horizontal alignment controls how the widget is placed\n * within the extra horizontal space.\n *\n * If the allocated width is less than the widget's max width, the\n * horizontal alignment has no effect.\n *\n * Some layout implementations may ignore horizontal alignment.\n *\n * Changing the horizontal alignment will post an `update-request`\n * message to widget's parent, provided the parent has a layout\n * installed.\n */\n function setHorizontalAlignment(widget, value) {\n Private$i.horizontalAlignmentProperty.set(widget, value);\n }\n Layout.setHorizontalAlignment = setHorizontalAlignment;\n /**\n * Get the vertical alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The vertical alignment for the widget.\n *\n * #### Notes\n * If the layout height allocated to a widget is larger than its max\n * height, the vertical alignment controls how the widget is placed\n * within the extra vertical space.\n *\n * If the allocated height is less than the widget's max height, the\n * vertical alignment has no effect.\n *\n * Some layout implementations may ignore vertical alignment.\n */\n function getVerticalAlignment(widget) {\n return Private$i.verticalAlignmentProperty.get(widget);\n }\n Layout.getVerticalAlignment = getVerticalAlignment;\n /**\n * Set the vertical alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the vertical alignment.\n *\n * #### Notes\n * If the layout height allocated to a widget is larger than its max\n * height, the vertical alignment controls how the widget is placed\n * within the extra vertical space.\n *\n * If the allocated height is less than the widget's max height, the\n * vertical alignment has no effect.\n *\n * Some layout implementations may ignore vertical alignment.\n *\n * Changing the horizontal alignment will post an `update-request`\n * message to widget's parent, provided the parent has a layout\n * installed.\n */\n function setVerticalAlignment(widget, value) {\n Private$i.verticalAlignmentProperty.set(widget, value);\n }\n Layout.setVerticalAlignment = setVerticalAlignment;\n})(Layout || (Layout = {}));\n/**\n * An object which assists in the absolute layout of widgets.\n *\n * #### Notes\n * This class is useful when implementing a layout which arranges its\n * widgets using absolute positioning.\n *\n * This class is used by nearly all of the built-in lumino layouts.\n */\nclass LayoutItem {\n /**\n * Construct a new layout item.\n *\n * @param widget - The widget to be managed by the item.\n *\n * #### Notes\n * The widget will be set to absolute positioning.\n * The widget will use strict CSS containment.\n */\n constructor(widget) {\n this._top = NaN;\n this._left = NaN;\n this._width = NaN;\n this._height = NaN;\n this._minWidth = 0;\n this._minHeight = 0;\n this._maxWidth = Infinity;\n this._maxHeight = Infinity;\n this._disposed = false;\n this.widget = widget;\n this.widget.node.style.position = 'absolute';\n this.widget.node.style.contain = 'strict';\n }\n /**\n * Dispose of the the layout item.\n *\n * #### Notes\n * This will reset the positioning of the widget.\n */\n dispose() {\n // Do nothing if the item is already disposed.\n if (this._disposed) {\n return;\n }\n // Mark the item as disposed.\n this._disposed = true;\n // Reset the widget style.\n let style = this.widget.node.style;\n style.position = '';\n style.top = '';\n style.left = '';\n style.width = '';\n style.height = '';\n style.contain = '';\n }\n /**\n * The computed minimum width of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get minWidth() {\n return this._minWidth;\n }\n /**\n * The computed minimum height of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get minHeight() {\n return this._minHeight;\n }\n /**\n * The computed maximum width of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get maxWidth() {\n return this._maxWidth;\n }\n /**\n * The computed maximum height of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get maxHeight() {\n return this._maxHeight;\n }\n /**\n * Whether the layout item is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Whether the managed widget is hidden.\n */\n get isHidden() {\n return this.widget.isHidden;\n }\n /**\n * Whether the managed widget is visible.\n */\n get isVisible() {\n return this.widget.isVisible;\n }\n /**\n * Whether the managed widget is attached.\n */\n get isAttached() {\n return this.widget.isAttached;\n }\n /**\n * Update the computed size limits of the managed widget.\n */\n fit() {\n let limits = ElementExt.sizeLimits(this.widget.node);\n this._minWidth = limits.minWidth;\n this._minHeight = limits.minHeight;\n this._maxWidth = limits.maxWidth;\n this._maxHeight = limits.maxHeight;\n }\n /**\n * Update the position and size of the managed widget.\n *\n * @param left - The left edge position of the layout box.\n *\n * @param top - The top edge position of the layout box.\n *\n * @param width - The width of the layout box.\n *\n * @param height - The height of the layout box.\n */\n update(left, top, width, height) {\n // Clamp the size to the computed size limits.\n let clampW = Math.max(this._minWidth, Math.min(width, this._maxWidth));\n let clampH = Math.max(this._minHeight, Math.min(height, this._maxHeight));\n // Adjust the left edge for the horizontal alignment, if needed.\n if (clampW < width) {\n switch (Layout.getHorizontalAlignment(this.widget)) {\n case 'left':\n break;\n case 'center':\n left += (width - clampW) / 2;\n break;\n case 'right':\n left += width - clampW;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Adjust the top edge for the vertical alignment, if needed.\n if (clampH < height) {\n switch (Layout.getVerticalAlignment(this.widget)) {\n case 'top':\n break;\n case 'center':\n top += (height - clampH) / 2;\n break;\n case 'bottom':\n top += height - clampH;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Set up the resize variables.\n let resized = false;\n let style = this.widget.node.style;\n // Update the top edge of the widget if needed.\n if (this._top !== top) {\n this._top = top;\n style.top = `${top}px`;\n }\n // Update the left edge of the widget if needed.\n if (this._left !== left) {\n this._left = left;\n style.left = `${left}px`;\n }\n // Update the width of the widget if needed.\n if (this._width !== clampW) {\n resized = true;\n this._width = clampW;\n style.width = `${clampW}px`;\n }\n // Update the height of the widget if needed.\n if (this._height !== clampH) {\n resized = true;\n this._height = clampH;\n style.height = `${clampH}px`;\n }\n // Send a resize message to the widget if needed.\n if (resized) {\n let msg = new Widget.ResizeMessage(clampW, clampH);\n MessageLoop.sendMessage(this.widget, msg);\n }\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$i;\n(function (Private) {\n /**\n * The attached property for a widget horizontal alignment.\n */\n Private.horizontalAlignmentProperty = new AttachedProperty({\n name: 'horizontalAlignment',\n create: () => 'center',\n changed: onAlignmentChanged\n });\n /**\n * The attached property for a widget vertical alignment.\n */\n Private.verticalAlignmentProperty = new AttachedProperty({\n name: 'verticalAlignment',\n create: () => 'top',\n changed: onAlignmentChanged\n });\n /**\n * The change handler for the attached alignment properties.\n */\n function onAlignmentChanged(child) {\n if (child.parent && child.parent.layout) {\n child.parent.update();\n }\n }\n})(Private$i || (Private$i = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation suitable for many use cases.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * layouts, but can also be used directly with standard CSS to layout a\n * collection of widgets.\n */\nclass PanelLayout extends Layout {\n constructor() {\n super(...arguments);\n this._widgets = [];\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This will clear and dispose all widgets in the layout.\n *\n * All reimplementations should call the superclass method.\n *\n * This method is called automatically when the parent is disposed.\n */\n dispose() {\n while (this._widgets.length > 0) {\n this._widgets.pop().dispose();\n }\n super.dispose();\n }\n /**\n * A read-only array of the widgets in the layout.\n */\n get widgets() {\n return this._widgets;\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n yield* this._widgets;\n }\n /**\n * Add a widget to the end of the layout.\n *\n * @param widget - The widget to add to the layout.\n *\n * #### Notes\n * If the widget is already contained in the layout, it will be moved.\n */\n addWidget(widget) {\n this.insertWidget(this._widgets.length, widget);\n }\n /**\n * Insert a widget into the layout at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into the layout.\n *\n * #### Notes\n * The index will be clamped to the bounds of the widgets.\n *\n * If the widget is already added to the layout, it will be moved.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n insertWidget(index, widget) {\n // Remove the widget from its current parent. This is a no-op\n // if the widget's parent is already the layout parent widget.\n widget.parent = this.parent;\n // Look up the current index of the widget.\n let i = this._widgets.indexOf(widget);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._widgets.length));\n // If the widget is not in the array, insert it.\n if (i === -1) {\n // Insert the widget into the array.\n ArrayExt.insert(this._widgets, j, widget);\n // If the layout is parented, attach the widget to the DOM.\n if (this.parent) {\n this.attachWidget(j, widget);\n }\n // There is nothing more to do.\n return;\n }\n // Otherwise, the widget exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._widgets.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return;\n }\n // Move the widget to the new location.\n ArrayExt.move(this._widgets, i, j);\n // If the layout is parented, move the widget in the DOM.\n if (this.parent) {\n this.moveWidget(i, j, widget);\n }\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n this.removeWidgetAt(this._widgets.indexOf(widget));\n }\n /**\n * Remove the widget at a given index from the layout.\n *\n * @param index - The index of the widget to remove.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n removeWidgetAt(index) {\n // Remove the widget from the array.\n let widget = ArrayExt.removeAt(this._widgets, index);\n // If the layout is parented, detach the widget from the DOM.\n if (widget && this.parent) {\n this.detachWidget(index, widget);\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n let index = 0;\n for (const widget of this) {\n this.attachWidget(index++, widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation adds the widgets's node to the parent's\n * node at the proper location, and sends the appropriate attach\n * messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is added to the parent's node.\n */\n attachWidget(index, widget) {\n // Look up the next sibling reference node.\n let ref = this.parent.node.children[index];\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Insert the widget's node before the sibling.\n this.parent.node.insertBefore(widget.node, ref);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation moves the widget's node to the proper\n * location in the parent's node and sends the appropriate attach and\n * detach messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is moved in the parent's node.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` and message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Look up the next sibling reference node.\n let ref = this.parent.node.children[toIndex];\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Insert the widget's node before the sibling.\n this.parent.node.insertBefore(widget.node, ref);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation removes the widget's node from the\n * parent's node, and sends the appropriate detach messages to the\n * widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is removed from the parent's node.\n */\n detachWidget(index, widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n }\n}\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nvar Utils;\n(function (Utils) {\n /**\n * Clamp a dimension value to an integer >= 0.\n */\n function clampDimension(value) {\n return Math.max(0, Math.floor(value));\n }\n Utils.clampDimension = clampDimension;\n})(Utils || (Utils = {}));\nvar Utils$1 = Utils;\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets into resizable sections.\n */\nclass SplitLayout extends PanelLayout {\n /**\n * Construct a new split layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options) {\n super();\n this.widgetOffset = 0;\n this._fixed = 0;\n this._spacing = 4;\n this._dirty = false;\n this._hasNormedSizes = false;\n this._sizers = [];\n this._items = [];\n this._handles = [];\n this._box = null;\n this._alignment = 'start';\n this._orientation = 'horizontal';\n this.renderer = options.renderer;\n if (options.orientation !== undefined) {\n this._orientation = options.orientation;\n }\n if (options.alignment !== undefined) {\n this._alignment = options.alignment;\n }\n if (options.spacing !== undefined) {\n this._spacing = Utils.clampDimension(options.spacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._sizers.length = 0;\n this._handles.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the layout orientation for the split layout.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the layout orientation for the split layout.\n */\n set orientation(value) {\n if (this._orientation === value) {\n return;\n }\n this._orientation = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['orientation'] = value;\n this.parent.fit();\n }\n /**\n * Get the content alignment for the split layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split layout.\n */\n get alignment() {\n return this._alignment;\n }\n /**\n * Set the content alignment for the split layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split layout.\n */\n set alignment(value) {\n if (this._alignment === value) {\n return;\n }\n this._alignment = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['alignment'] = value;\n this.parent.update();\n }\n /**\n * Get the inter-element spacing for the split layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the split layout.\n */\n set spacing(value) {\n value = Utils.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * A read-only array of the split handles in the layout.\n */\n get handles() {\n return this._handles;\n }\n /**\n * Get the absolute sizes of the widgets in the layout.\n *\n * @returns A new array of the absolute sizes of the widgets.\n *\n * This method **does not** measure the DOM nodes.\n */\n absoluteSizes() {\n return this._sizers.map(sizer => sizer.size);\n }\n /**\n * Get the relative sizes of the widgets in the layout.\n *\n * @returns A new array of the relative sizes of the widgets.\n *\n * #### Notes\n * The returned sizes reflect the sizes of the widgets normalized\n * relative to their siblings.\n *\n * This method **does not** measure the DOM nodes.\n */\n relativeSizes() {\n return Private$h.normalize(this._sizers.map(sizer => sizer.size));\n }\n /**\n * Set the relative sizes for the widgets in the layout.\n *\n * @param sizes - The relative sizes for the widgets in the panel.\n * @param update - Update the layout after setting relative sizes.\n * Default is True.\n *\n * #### Notes\n * Extra values are ignored, too few will yield an undefined layout.\n *\n * The actual geometry of the DOM nodes is updated asynchronously.\n */\n setRelativeSizes(sizes, update = true) {\n // Copy the sizes and pad with zeros as needed.\n let n = this._sizers.length;\n let temp = sizes.slice(0, n);\n while (temp.length < n) {\n temp.push(0);\n }\n // Normalize the padded sizes.\n let normed = Private$h.normalize(temp);\n // Apply the normalized sizes to the sizers.\n for (let i = 0; i < n; ++i) {\n let sizer = this._sizers[i];\n sizer.sizeHint = normed[i];\n sizer.size = normed[i];\n }\n // Set the flag indicating the sizes are normalized.\n this._hasNormedSizes = true;\n // Trigger an update of the parent widget.\n if (update && this.parent) {\n this.parent.update();\n }\n }\n /**\n * Move the offset position of a split handle.\n *\n * @param index - The index of the handle of the interest.\n *\n * @param position - The desired offset position of the handle.\n *\n * #### Notes\n * The position is relative to the offset parent.\n *\n * This will move the handle as close as possible to the desired\n * position. The sibling widgets will be adjusted as necessary.\n */\n moveHandle(index, position) {\n // Bail if the index is invalid or the handle is hidden.\n let handle = this._handles[index];\n if (!handle || handle.classList.contains('lm-mod-hidden')) {\n return;\n }\n // Compute the desired delta movement for the handle.\n let delta;\n if (this._orientation === 'horizontal') {\n delta = position - handle.offsetLeft;\n }\n else {\n delta = position - handle.offsetTop;\n }\n // Bail if there is no handle movement.\n if (delta === 0) {\n return;\n }\n // Prevent widget resizing unless needed.\n for (let sizer of this._sizers) {\n if (sizer.size > 0) {\n sizer.sizeHint = sizer.size;\n }\n }\n // Adjust the sizers to reflect the handle movement.\n BoxEngine.adjust(this._sizers, index, delta);\n // Update the layout of the widgets.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n this.parent.dataset['orientation'] = this.orientation;\n this.parent.dataset['alignment'] = this.alignment;\n super.init();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Create the item, handle, and sizer for the new widget.\n let item = new LayoutItem(widget);\n let handle = Private$h.createHandle(this.renderer);\n let average = Private$h.averageSize(this._sizers);\n let sizer = Private$h.createSizer(average);\n // Insert the item, handle, and sizer into the internal arrays.\n ArrayExt.insert(this._items, index, item);\n ArrayExt.insert(this._sizers, index, sizer);\n ArrayExt.insert(this._handles, index, handle);\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget and handle nodes to the parent.\n this.parent.node.appendChild(widget.node);\n this.parent.node.appendChild(handle);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the item, sizer, and handle for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n ArrayExt.move(this._sizers, fromIndex, toIndex);\n ArrayExt.move(this._handles, fromIndex, toIndex);\n // Post a fit request to the parent to show/hide last handle.\n this.parent.fit();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the item, handle, and sizer for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n let handle = ArrayExt.removeAt(this._handles, index);\n ArrayExt.removeAt(this._sizers, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget and handle nodes from the parent.\n this.parent.node.removeChild(widget.node);\n this.parent.node.removeChild(handle);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Update the item position.\n *\n * @param i Item index\n * @param isHorizontal Whether the layout is horizontal or not\n * @param left Left position in pixels\n * @param top Top position in pixels\n * @param height Item height\n * @param width Item width\n * @param size Item size\n */\n updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n const item = this._items[i];\n if (item.isHidden) {\n return;\n }\n // Fetch the style for the handle.\n let handleStyle = this._handles[i].style;\n // Update the widget and handle, and advance the relevant edge.\n if (isHorizontal) {\n left += this.widgetOffset;\n item.update(left, top, size, height);\n left += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${this._spacing}px`;\n handleStyle.height = `${height}px`;\n }\n else {\n top += this.widgetOffset;\n item.update(left, top, width, size);\n top += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${width}px`;\n handleStyle.height = `${this._spacing}px`;\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Update the handles and track the visible widget count.\n let nVisible = 0;\n let lastHandleIndex = -1;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n if (this._items[i].isHidden) {\n this._handles[i].classList.add('lm-mod-hidden');\n }\n else {\n this._handles[i].classList.remove('lm-mod-hidden');\n lastHandleIndex = i;\n nVisible++;\n }\n }\n // Hide the handle for the last visible widget.\n if (lastHandleIndex !== -1) {\n this._handles[lastHandleIndex].classList.add('lm-mod-hidden');\n }\n // Update the fixed space for the visible items.\n this._fixed =\n this._spacing * Math.max(0, nVisible - 1) +\n this.widgetOffset * this._items.length;\n // Setup the computed minimum size.\n let horz = this._orientation === 'horizontal';\n let minW = horz ? this._fixed : 0;\n let minH = horz ? 0 : this._fixed;\n // Update the sizers and computed size limits.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item and corresponding box sizer.\n let item = this._items[i];\n let sizer = this._sizers[i];\n // Prevent resizing unless necessary.\n if (sizer.size > 0) {\n sizer.sizeHint = sizer.size;\n }\n // If the item is hidden, it should consume zero size.\n if (item.isHidden) {\n sizer.minSize = 0;\n sizer.maxSize = 0;\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the stretch factor.\n sizer.stretch = SplitLayout.getStretch(item.widget);\n // Update the sizer limits and computed min size.\n if (horz) {\n sizer.minSize = item.minWidth;\n sizer.maxSize = item.maxWidth;\n minW += item.minWidth;\n minH = Math.max(minH, item.minHeight);\n }\n else {\n sizer.minSize = item.minHeight;\n sizer.maxSize = item.maxHeight;\n minH += item.minHeight;\n minW = Math.max(minW, item.minWidth);\n }\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0 && this.widgetOffset === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Set up the variables for justification and alignment offset.\n let extra = 0;\n let offset = 0;\n let horz = this._orientation === 'horizontal';\n if (nVisible > 0) {\n // Compute the adjusted layout space.\n let space;\n if (horz) {\n // left += this.widgetOffset;\n space = Math.max(0, width - this._fixed);\n }\n else {\n // top += this.widgetOffset;\n space = Math.max(0, height - this._fixed);\n }\n // Scale the size hints if they are normalized.\n if (this._hasNormedSizes) {\n for (let sizer of this._sizers) {\n sizer.sizeHint *= space;\n }\n this._hasNormedSizes = false;\n }\n // Distribute the layout space to the box sizers.\n let delta = BoxEngine.calc(this._sizers, space);\n // Account for alignment if there is extra layout space.\n if (delta > 0) {\n switch (this._alignment) {\n case 'start':\n break;\n case 'center':\n extra = 0;\n offset = delta / 2;\n break;\n case 'end':\n extra = 0;\n offset = delta;\n break;\n case 'justify':\n extra = delta / nVisible;\n offset = 0;\n break;\n default:\n throw 'unreachable';\n }\n }\n }\n // Layout the items using the computed box sizes.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n const item = this._items[i];\n // Fetch the computed size for the widget.\n const size = item.isHidden ? 0 : this._sizers[i].size + extra;\n this.updateItemPosition(i, horz, horz ? left + offset : left, horz ? top : top + offset, height, width, size);\n const fullOffset = this.widgetOffset +\n (this._handles[i].classList.contains('lm-mod-hidden')\n ? 0\n : this._spacing);\n if (horz) {\n left += size + fullOffset;\n }\n else {\n top += size + fullOffset;\n }\n }\n }\n}\n/**\n * The namespace for the `SplitLayout` class statics.\n */\n(function (SplitLayout) {\n /**\n * Get the split layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The split layout stretch factor for the widget.\n */\n function getStretch(widget) {\n return Private$h.stretchProperty.get(widget);\n }\n SplitLayout.getStretch = getStretch;\n /**\n * Set the split layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n Private$h.stretchProperty.set(widget, value);\n }\n SplitLayout.setStretch = setStretch;\n})(SplitLayout || (SplitLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$h;\n(function (Private) {\n /**\n * The property descriptor for a widget stretch factor.\n */\n Private.stretchProperty = new AttachedProperty({\n name: 'stretch',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * Create a new box sizer with the given size hint.\n */\n function createSizer(size) {\n let sizer = new BoxSizer();\n sizer.sizeHint = Math.floor(size);\n return sizer;\n }\n Private.createSizer = createSizer;\n /**\n * Create a new split handle node using the given renderer.\n */\n function createHandle(renderer) {\n let handle = renderer.createHandle();\n handle.style.position = 'absolute';\n // Do not use size containment to allow the handle to fill the available space\n handle.style.contain = 'style';\n return handle;\n }\n Private.createHandle = createHandle;\n /**\n * Compute the average size of an array of box sizers.\n */\n function averageSize(sizers) {\n return sizers.reduce((v, s) => v + s.size, 0) / sizers.length || 0;\n }\n Private.averageSize = averageSize;\n /**\n * Normalize an array of values.\n */\n function normalize(values) {\n let n = values.length;\n if (n === 0) {\n return [];\n }\n let sum = values.reduce((a, b) => a + Math.abs(b), 0);\n return sum === 0 ? values.map(v => 1 / n) : values.map(v => v / sum);\n }\n Private.normalize = normalize;\n /**\n * The change handler for the attached sizing properties.\n */\n function onChildSizingChanged(child) {\n if (child.parent && child.parent.layout instanceof SplitLayout) {\n child.parent.fit();\n }\n }\n})(Private$h || (Private$h = {}));\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * A layout which arranges its widgets into collapsible resizable sections.\n */\nclass AccordionLayout extends SplitLayout {\n /**\n * Construct a new accordion layout.\n *\n * @param options - The options for initializing the layout.\n *\n * #### Notes\n * The default orientation will be vertical.\n *\n * Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n */\n constructor(options) {\n super({ ...options, orientation: options.orientation || 'vertical' });\n this._titles = [];\n this.titleSpace = options.titleSpace || 22;\n }\n /**\n * The section title height or width depending on the orientation.\n */\n get titleSpace() {\n return this.widgetOffset;\n }\n set titleSpace(value) {\n value = Utils$1.clampDimension(value);\n if (this.widgetOffset === value) {\n return;\n }\n this.widgetOffset = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * A read-only array of the section titles in the panel.\n */\n get titles() {\n return this._titles;\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n // Clear the layout state.\n this._titles.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n updateTitle(index, widget) {\n const oldTitle = this._titles[index];\n const expanded = oldTitle.classList.contains('lm-mod-expanded');\n const newTitle = Private$g.createTitle(this.renderer, widget.title, expanded);\n this._titles[index] = newTitle;\n // Add the title node to the parent before the widget.\n this.parent.node.replaceChild(newTitle, oldTitle);\n }\n /**\n * Insert a widget into the layout at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into the layout.\n *\n * #### Notes\n * The index will be clamped to the bounds of the widgets.\n *\n * If the widget is already added to the layout, it will be moved.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n insertWidget(index, widget) {\n if (!widget.id) {\n widget.id = `id-${UUID.uuid4()}`;\n }\n super.insertWidget(index, widget);\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n */\n attachWidget(index, widget) {\n const title = Private$g.createTitle(this.renderer, widget.title);\n ArrayExt.insert(this._titles, index, title);\n // Add the title node to the parent before the widget.\n this.parent.node.appendChild(title);\n widget.node.setAttribute('role', 'region');\n widget.node.setAttribute('aria-labelledby', title.id);\n super.attachWidget(index, widget);\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n */\n moveWidget(fromIndex, toIndex, widget) {\n ArrayExt.move(this._titles, fromIndex, toIndex);\n super.moveWidget(fromIndex, toIndex, widget);\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n const title = ArrayExt.removeAt(this._titles, index);\n this.parent.node.removeChild(title);\n super.detachWidget(index, widget);\n }\n /**\n * Update the item position.\n *\n * @param i Item index\n * @param isHorizontal Whether the layout is horizontal or not\n * @param left Left position in pixels\n * @param top Top position in pixels\n * @param height Item height\n * @param width Item width\n * @param size Item size\n */\n updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n const titleStyle = this._titles[i].style;\n // Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n titleStyle.top = `${top}px`;\n titleStyle.left = `${left}px`;\n titleStyle.height = `${this.widgetOffset}px`;\n if (isHorizontal) {\n titleStyle.width = `${height}px`;\n }\n else {\n titleStyle.width = `${width}px`;\n }\n super.updateItemPosition(i, isHorizontal, left, top, height, width, size);\n }\n}\nvar Private$g;\n(function (Private) {\n /**\n * Create the title HTML element.\n *\n * @param renderer Accordion renderer\n * @param data Widget title\n * @returns Title HTML element\n */\n function createTitle(renderer, data, expanded = true) {\n const title = renderer.createSectionTitle(data);\n title.style.position = 'absolute';\n title.style.contain = 'strict';\n title.setAttribute('aria-label', `${data.label} Section`);\n title.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n title.setAttribute('aria-controls', data.owner.id);\n if (expanded) {\n title.classList.add('lm-mod-expanded');\n }\n return title;\n }\n Private.createTitle = createTitle;\n})(Private$g || (Private$g = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A simple and convenient panel widget class.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * convenience panel widgets, but can also be used directly with CSS to\n * arrange a collection of widgets.\n *\n * This class provides a convenience wrapper around a {@link PanelLayout}.\n */\nclass Panel extends Widget {\n /**\n * Construct a new panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super();\n this.addClass('lm-Panel');\n this.layout = Private$f.createLayout(options);\n }\n /**\n * A read-only array of the widgets in the panel.\n */\n get widgets() {\n return this.layout.widgets;\n }\n /**\n * Add a widget to the end of the panel.\n *\n * @param widget - The widget to add to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n addWidget(widget) {\n this.layout.addWidget(widget);\n }\n /**\n * Insert a widget at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n insertWidget(index, widget) {\n this.layout.insertWidget(index, widget);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$f;\n(function (Private) {\n /**\n * Create a panel layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new PanelLayout();\n }\n Private.createLayout = createLayout;\n})(Private$f || (Private$f = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets into resizable sections.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link SplitLayout}.\n */\nclass SplitPanel extends Panel {\n /**\n * Construct a new split panel.\n *\n * @param options - The options for initializing the split panel.\n */\n constructor(options = {}) {\n super({ layout: Private$e.createLayout(options) });\n this._handleMoved = new Signal(this);\n this._pressData = null;\n this.addClass('lm-SplitPanel');\n }\n /**\n * Dispose of the resources held by the panel.\n */\n dispose() {\n this._releaseMouse();\n super.dispose();\n }\n /**\n * Get the layout orientation for the split panel.\n */\n get orientation() {\n return this.layout.orientation;\n }\n /**\n * Set the layout orientation for the split panel.\n */\n set orientation(value) {\n this.layout.orientation = value;\n }\n /**\n * Get the content alignment for the split panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split panel.\n */\n get alignment() {\n return this.layout.alignment;\n }\n /**\n * Set the content alignment for the split panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split panel.\n */\n set alignment(value) {\n this.layout.alignment = value;\n }\n /**\n * Get the inter-element spacing for the split panel.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the inter-element spacing for the split panel.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * The renderer used by the split panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * A signal emitted when a split handle has moved.\n */\n get handleMoved() {\n return this._handleMoved;\n }\n /**\n * A read-only array of the split handles in the panel.\n */\n get handles() {\n return this.layout.handles;\n }\n /**\n * Get the relative sizes of the widgets in the panel.\n *\n * @returns A new array of the relative sizes of the widgets.\n *\n * #### Notes\n * The returned sizes reflect the sizes of the widgets normalized\n * relative to their siblings.\n *\n * This method **does not** measure the DOM nodes.\n */\n relativeSizes() {\n return this.layout.relativeSizes();\n }\n /**\n * Set the relative sizes for the widgets in the panel.\n *\n * @param sizes - The relative sizes for the widgets in the panel.\n * @param update - Update the layout after setting relative sizes.\n * Default is True.\n *\n * #### Notes\n * Extra values are ignored, too few will yield an undefined layout.\n *\n * The actual geometry of the DOM nodes is updated asynchronously.\n */\n setRelativeSizes(sizes, update = true) {\n this.layout.setRelativeSizes(sizes, update);\n }\n /**\n * Handle the DOM events for the split panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('pointerdown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('pointerdown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-SplitPanel-child');\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-SplitPanel-child');\n this._releaseMouse();\n }\n /**\n * Handle the `'keydown'` event for the split panel.\n */\n _evtKeyDown(event) {\n // Stop input events during drag.\n if (this._pressData) {\n event.preventDefault();\n event.stopPropagation();\n }\n // Release the mouse if `Escape` is pressed.\n if (event.keyCode === 27) {\n this._releaseMouse();\n }\n }\n /**\n * Handle the `'pointerdown'` event for the split panel.\n */\n _evtPointerDown(event) {\n // Do nothing if the primary button is not pressed.\n if (event.button !== 0) {\n return;\n }\n // Find the handle which contains the target, if any.\n let layout = this.layout;\n let index = ArrayExt.findFirstIndex(layout.handles, handle => {\n return handle.contains(event.target);\n });\n // Bail early if the mouse press was not on a handle.\n if (index === -1) {\n return;\n }\n // Stop the event when a split handle is pressed.\n event.preventDefault();\n event.stopPropagation();\n // Add the extra document listeners.\n document.addEventListener('pointerup', this, true);\n document.addEventListener('pointermove', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('contextmenu', this, true);\n // Compute the offset delta for the handle press.\n let delta;\n let handle = layout.handles[index];\n let rect = handle.getBoundingClientRect();\n if (layout.orientation === 'horizontal') {\n delta = event.clientX - rect.left;\n }\n else {\n delta = event.clientY - rect.top;\n }\n // Override the cursor and store the press data.\n let style = window.getComputedStyle(handle);\n let override = Drag.overrideCursor(style.cursor);\n this._pressData = { index, delta, override };\n }\n /**\n * Handle the `'pointermove'` event for the split panel.\n */\n _evtPointerMove(event) {\n // Stop the event when dragging a split handle.\n event.preventDefault();\n event.stopPropagation();\n // Compute the desired offset position for the handle.\n let pos;\n let layout = this.layout;\n let rect = this.node.getBoundingClientRect();\n if (layout.orientation === 'horizontal') {\n pos = event.clientX - rect.left - this._pressData.delta;\n }\n else {\n pos = event.clientY - rect.top - this._pressData.delta;\n }\n // Move the handle as close to the desired position as possible.\n layout.moveHandle(this._pressData.index, pos);\n }\n /**\n * Handle the `'pointerup'` event for the split panel.\n */\n _evtPointerUp(event) {\n // Do nothing if the primary button is not released.\n if (event.button !== 0) {\n return;\n }\n // Stop the event when releasing a handle.\n event.preventDefault();\n event.stopPropagation();\n // Finalize the mouse release.\n this._releaseMouse();\n }\n /**\n * Release the mouse grab for the split panel.\n */\n _releaseMouse() {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Clear the override cursor.\n this._pressData.override.dispose();\n this._pressData = null;\n // Emit the handle moved signal.\n this._handleMoved.emit();\n // Remove the extra document listeners.\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('pointerup', this, true);\n document.removeEventListener('pointermove', this, true);\n document.removeEventListener('contextmenu', this, true);\n }\n}\n/**\n * The namespace for the `SplitPanel` class statics.\n */\n(function (SplitPanel) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Create a new handle for use with a split panel.\n *\n * @returns A new handle element for a split panel.\n */\n createHandle() {\n let handle = document.createElement('div');\n handle.className = 'lm-SplitPanel-handle';\n return handle;\n }\n }\n SplitPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n SplitPanel.defaultRenderer = new Renderer();\n /**\n * Get the split panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The split panel stretch factor for the widget.\n */\n function getStretch(widget) {\n return SplitLayout.getStretch(widget);\n }\n SplitPanel.getStretch = getStretch;\n /**\n * Set the split panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n SplitLayout.setStretch(widget, value);\n }\n SplitPanel.setStretch = setStretch;\n})(SplitPanel || (SplitPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$e;\n(function (Private) {\n /**\n * Create a split layout for the given panel options.\n */\n function createLayout(options) {\n return (options.layout ||\n new SplitLayout({\n renderer: options.renderer || SplitPanel.defaultRenderer,\n orientation: options.orientation,\n alignment: options.alignment,\n spacing: options.spacing\n }));\n }\n Private.createLayout = createLayout;\n})(Private$e || (Private$e = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A panel which arranges its widgets into resizable sections separated by a title widget.\n *\n * #### Notes\n * This class provides a convenience wrapper around {@link AccordionLayout}.\n */\nclass AccordionPanel extends SplitPanel {\n /**\n * Construct a new accordion panel.\n *\n * @param options - The options for initializing the accordion panel.\n */\n constructor(options = {}) {\n super({ ...options, layout: Private$d.createLayout(options) });\n this._widgetSizesCache = new WeakMap();\n this._expansionToggled = new Signal(this);\n this.addClass('lm-AccordionPanel');\n }\n /**\n * The renderer used by the accordion panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * The section title space.\n *\n * This is the height if the panel is vertical and the width if it is\n * horizontal.\n */\n get titleSpace() {\n return this.layout.titleSpace;\n }\n set titleSpace(value) {\n this.layout.titleSpace = value;\n }\n /**\n * A read-only array of the section titles in the panel.\n */\n get titles() {\n return this.layout.titles;\n }\n /**\n * A signal emitted when a widget of the AccordionPanel is collapsed or expanded.\n */\n get expansionToggled() {\n return this._expansionToggled;\n }\n /**\n * Add a widget to the end of the panel.\n *\n * @param widget - The widget to add to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n addWidget(widget) {\n super.addWidget(widget);\n widget.title.changed.connect(this._onTitleChanged, this);\n }\n /**\n * Collapse the widget at position `index`.\n *\n * #### Notes\n * If no widget is found for `index`, this will bail.\n *\n * @param index Widget index\n */\n collapse(index) {\n const widget = this.layout.widgets[index];\n if (widget && !widget.isHidden) {\n this._toggleExpansion(index);\n }\n }\n /**\n * Expand the widget at position `index`.\n *\n * #### Notes\n * If no widget is found for `index`, this will bail.\n *\n * @param index Widget index\n */\n expand(index) {\n const widget = this.layout.widgets[index];\n if (widget && widget.isHidden) {\n this._toggleExpansion(index);\n }\n }\n /**\n * Insert a widget at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n insertWidget(index, widget) {\n super.insertWidget(index, widget);\n widget.title.changed.connect(this._onTitleChanged, this);\n }\n /**\n * Handle the DOM events for the accordion panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n super.handleEvent(event);\n switch (event.type) {\n case 'click':\n this._evtClick(event);\n break;\n case 'keydown':\n this._eventKeyDown(event);\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('click', this);\n this.node.addEventListener('keydown', this);\n super.onBeforeAttach(msg);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n super.onAfterDetach(msg);\n this.node.removeEventListener('click', this);\n this.node.removeEventListener('keydown', this);\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged(sender) {\n const index = ArrayExt.findFirstIndex(this.widgets, widget => {\n return widget.contains(sender.owner);\n });\n if (index >= 0) {\n this.layout.updateTitle(index, sender.owner);\n this.update();\n }\n }\n /**\n * Compute the size of widgets in this panel on the title click event.\n * On closing, the size of the widget is cached and we will try to expand\n * the last opened widget.\n * On opening, we will use the cached size if it is available to restore the\n * widget.\n * In both cases, if we can not compute the size of widgets, we will let\n * `SplitLayout` decide.\n *\n * @param index - The index of widget to be opened of closed\n *\n * @returns Relative size of widgets in this panel, if this size can\n * not be computed, return `undefined`\n */\n _computeWidgetSize(index) {\n const layout = this.layout;\n const widget = layout.widgets[index];\n if (!widget) {\n return undefined;\n }\n const isHidden = widget.isHidden;\n const widgetSizes = layout.absoluteSizes();\n const delta = (isHidden ? -1 : 1) * this.spacing;\n const totalSize = widgetSizes.reduce((prev, curr) => prev + curr);\n let newSize = [...widgetSizes];\n if (!isHidden) {\n // Hide the widget\n const currentSize = widgetSizes[index];\n this._widgetSizesCache.set(widget, currentSize);\n newSize[index] = 0;\n const widgetToCollapse = newSize.map(sz => sz > 0).lastIndexOf(true);\n if (widgetToCollapse === -1) {\n // All widget are closed, let the `SplitLayout` compute widget sizes.\n return undefined;\n }\n newSize[widgetToCollapse] =\n widgetSizes[widgetToCollapse] + currentSize + delta;\n }\n else {\n // Show the widget\n const previousSize = this._widgetSizesCache.get(widget);\n if (!previousSize) {\n // Previous size is unavailable, let the `SplitLayout` compute widget sizes.\n return undefined;\n }\n newSize[index] += previousSize;\n const widgetToCollapse = newSize\n .map(sz => sz - previousSize > 0)\n .lastIndexOf(true);\n if (widgetToCollapse === -1) {\n // Can not reduce the size of one widget, reduce all opened widgets\n // proportionally with its size.\n newSize.forEach((_, idx) => {\n if (idx !== index) {\n newSize[idx] -=\n (widgetSizes[idx] / totalSize) * (previousSize - delta);\n }\n });\n }\n else {\n newSize[widgetToCollapse] -= previousSize - delta;\n }\n }\n return newSize.map(sz => sz / (totalSize + delta));\n }\n /**\n * Handle the `'click'` event for the accordion panel\n */\n _evtClick(event) {\n const target = event.target;\n if (target) {\n const index = ArrayExt.findFirstIndex(this.titles, title => {\n return title.contains(target);\n });\n if (index >= 0) {\n event.preventDefault();\n event.stopPropagation();\n this._toggleExpansion(index);\n }\n }\n }\n /**\n * Handle the `'keydown'` event for the accordion panel.\n */\n _eventKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n const target = event.target;\n let handled = false;\n if (target) {\n const index = ArrayExt.findFirstIndex(this.titles, title => {\n return title.contains(target);\n });\n if (index >= 0) {\n const keyCode = event.keyCode.toString();\n // If Space or Enter is pressed on title, emulate click event\n if (event.key.match(/Space|Enter/) || keyCode.match(/13|32/)) {\n target.click();\n handled = true;\n }\n else if (this.orientation === 'horizontal'\n ? event.key.match(/ArrowLeft|ArrowRight/) || keyCode.match(/37|39/)\n : event.key.match(/ArrowUp|ArrowDown/) || keyCode.match(/38|40/)) {\n // If Up or Down (for vertical) / Left or Right (for horizontal) is pressed on title, loop on titles\n const direction = event.key.match(/ArrowLeft|ArrowUp/) || keyCode.match(/37|38/)\n ? -1\n : 1;\n const length = this.titles.length;\n const newIndex = (index + length + direction) % length;\n this.titles[newIndex].focus();\n handled = true;\n }\n else if (event.key === 'End' || keyCode === '35') {\n // If End is pressed on title, focus on the last title\n this.titles[this.titles.length - 1].focus();\n handled = true;\n }\n else if (event.key === 'Home' || keyCode === '36') {\n // If Home is pressed on title, focus on the first title\n this.titles[0].focus();\n handled = true;\n }\n }\n if (handled) {\n event.preventDefault();\n }\n }\n }\n _toggleExpansion(index) {\n const title = this.titles[index];\n const widget = this.layout.widgets[index];\n const newSize = this._computeWidgetSize(index);\n if (newSize) {\n this.setRelativeSizes(newSize, false);\n }\n if (widget.isHidden) {\n title.classList.add('lm-mod-expanded');\n title.setAttribute('aria-expanded', 'true');\n widget.show();\n }\n else {\n title.classList.remove('lm-mod-expanded');\n title.setAttribute('aria-expanded', 'false');\n widget.hide();\n }\n // Emit the expansion state signal.\n this._expansionToggled.emit(index);\n }\n}\n/**\n * The namespace for the `AccordionPanel` class statics.\n */\n(function (AccordionPanel) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer extends SplitPanel.Renderer {\n constructor() {\n super();\n /**\n * A selector which matches any title node in the accordion.\n */\n this.titleClassName = 'lm-AccordionPanel-title';\n this._titleID = 0;\n this._titleKeys = new WeakMap();\n this._uuid = ++Renderer._nInstance;\n }\n /**\n * Render the collapse indicator for a section title.\n *\n * @param data - The data to use for rendering the section title.\n *\n * @returns A element representing the collapse indicator.\n */\n createCollapseIcon(data) {\n return document.createElement('span');\n }\n /**\n * Render the element for a section title.\n *\n * @param data - The data to use for rendering the section title.\n *\n * @returns A element representing the section title.\n */\n createSectionTitle(data) {\n const handle = document.createElement('h3');\n handle.setAttribute('tabindex', '0');\n handle.id = this.createTitleKey(data);\n handle.className = this.titleClassName;\n for (const aData in data.dataset) {\n handle.dataset[aData] = data.dataset[aData];\n }\n const collapser = handle.appendChild(this.createCollapseIcon(data));\n collapser.className = 'lm-AccordionPanel-titleCollapser';\n const label = handle.appendChild(document.createElement('span'));\n label.className = 'lm-AccordionPanel-titleLabel';\n label.textContent = data.label;\n label.title = data.caption || data.label;\n return handle;\n }\n /**\n * Create a unique render key for the title.\n *\n * @param data - The data to use for the title.\n *\n * @returns The unique render key for the title.\n *\n * #### Notes\n * This method caches the key against the section title the first time\n * the key is generated.\n */\n createTitleKey(data) {\n let key = this._titleKeys.get(data);\n if (key === undefined) {\n key = `title-key-${this._uuid}-${this._titleID++}`;\n this._titleKeys.set(data, key);\n }\n return key;\n }\n }\n Renderer._nInstance = 0;\n AccordionPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n AccordionPanel.defaultRenderer = new Renderer();\n})(AccordionPanel || (AccordionPanel = {}));\nvar Private$d;\n(function (Private) {\n /**\n * Create an accordion layout for the given panel options.\n *\n * @param options Panel options\n * @returns Panel layout\n */\n function createLayout(options) {\n return (options.layout ||\n new AccordionLayout({\n renderer: options.renderer || AccordionPanel.defaultRenderer,\n orientation: options.orientation,\n alignment: options.alignment,\n spacing: options.spacing,\n titleSpace: options.titleSpace\n }));\n }\n Private.createLayout = createLayout;\n})(Private$d || (Private$d = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a single row or column.\n */\nclass BoxLayout extends PanelLayout {\n /**\n * Construct a new box layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n super();\n this._fixed = 0;\n this._spacing = 4;\n this._dirty = false;\n this._sizers = [];\n this._items = [];\n this._box = null;\n this._alignment = 'start';\n this._direction = 'top-to-bottom';\n if (options.direction !== undefined) {\n this._direction = options.direction;\n }\n if (options.alignment !== undefined) {\n this._alignment = options.alignment;\n }\n if (options.spacing !== undefined) {\n this._spacing = Utils$1.clampDimension(options.spacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._sizers.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the layout direction for the box layout.\n */\n get direction() {\n return this._direction;\n }\n /**\n * Set the layout direction for the box layout.\n */\n set direction(value) {\n if (this._direction === value) {\n return;\n }\n this._direction = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['direction'] = value;\n this.parent.fit();\n }\n /**\n * Get the content alignment for the box layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n get alignment() {\n return this._alignment;\n }\n /**\n * Set the content alignment for the box layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n set alignment(value) {\n if (this._alignment === value) {\n return;\n }\n this._alignment = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['alignment'] = value;\n this.parent.update();\n }\n /**\n * Get the inter-element spacing for the box layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the box layout.\n */\n set spacing(value) {\n value = Utils$1.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n this.parent.dataset['direction'] = this.direction;\n this.parent.dataset['alignment'] = this.alignment;\n super.init();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Create and add a new layout item for the widget.\n ArrayExt.insert(this._items, index, new LayoutItem(widget));\n // Create and add a new sizer for the widget.\n ArrayExt.insert(this._sizers, index, new BoxSizer());\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the layout item for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n // Move the sizer for the widget.\n ArrayExt.move(this._sizers, fromIndex, toIndex);\n // Post an update request for the parent widget.\n this.parent.update();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the layout item for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n // Remove the sizer for the widget.\n ArrayExt.removeAt(this._sizers, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Update the fixed space for the visible items.\n this._fixed = this._spacing * Math.max(0, nVisible - 1);\n // Setup the computed minimum size.\n let horz = Private$c.isHorizontal(this._direction);\n let minW = horz ? this._fixed : 0;\n let minH = horz ? 0 : this._fixed;\n // Update the sizers and computed minimum size.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item and corresponding box sizer.\n let item = this._items[i];\n let sizer = this._sizers[i];\n // If the item is hidden, it should consume zero size.\n if (item.isHidden) {\n sizer.minSize = 0;\n sizer.maxSize = 0;\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the size basis and stretch factor.\n sizer.sizeHint = BoxLayout.getSizeBasis(item.widget);\n sizer.stretch = BoxLayout.getStretch(item.widget);\n // Update the sizer limits and computed min size.\n if (horz) {\n sizer.minSize = item.minWidth;\n sizer.maxSize = item.maxWidth;\n minW += item.minWidth;\n minH = Math.max(minH, item.minHeight);\n }\n else {\n sizer.minSize = item.minHeight;\n sizer.maxSize = item.maxHeight;\n minH += item.minHeight;\n minW = Math.max(minW, item.minWidth);\n }\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the layout area adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Distribute the layout space and adjust the start position.\n let delta;\n switch (this._direction) {\n case 'left-to-right':\n delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n break;\n case 'top-to-bottom':\n delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n break;\n case 'right-to-left':\n delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n left += width;\n break;\n case 'bottom-to-top':\n delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n top += height;\n break;\n default:\n throw 'unreachable';\n }\n // Setup the variables for justification and alignment offset.\n let extra = 0;\n let offset = 0;\n // Account for alignment if there is extra layout space.\n if (delta > 0) {\n switch (this._alignment) {\n case 'start':\n break;\n case 'center':\n extra = 0;\n offset = delta / 2;\n break;\n case 'end':\n extra = 0;\n offset = delta;\n break;\n case 'justify':\n extra = delta / nVisible;\n offset = 0;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Layout the items using the computed box sizes.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Fetch the computed size for the widget.\n let size = this._sizers[i].size;\n // Update the widget geometry and advance the relevant edge.\n switch (this._direction) {\n case 'left-to-right':\n item.update(left + offset, top, size + extra, height);\n left += size + extra + this._spacing;\n break;\n case 'top-to-bottom':\n item.update(left, top + offset, width, size + extra);\n top += size + extra + this._spacing;\n break;\n case 'right-to-left':\n item.update(left - offset - size - extra, top, size + extra, height);\n left -= size + extra + this._spacing;\n break;\n case 'bottom-to-top':\n item.update(left, top - offset - size - extra, width, size + extra);\n top -= size + extra + this._spacing;\n break;\n default:\n throw 'unreachable';\n }\n }\n }\n}\n/**\n * The namespace for the `BoxLayout` class statics.\n */\n(function (BoxLayout) {\n /**\n * Get the box layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box layout stretch factor for the widget.\n */\n function getStretch(widget) {\n return Private$c.stretchProperty.get(widget);\n }\n BoxLayout.getStretch = getStretch;\n /**\n * Set the box layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n Private$c.stretchProperty.set(widget, value);\n }\n BoxLayout.setStretch = setStretch;\n /**\n * Get the box layout size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box layout size basis for the widget.\n */\n function getSizeBasis(widget) {\n return Private$c.sizeBasisProperty.get(widget);\n }\n BoxLayout.getSizeBasis = getSizeBasis;\n /**\n * Set the box layout size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the size basis.\n */\n function setSizeBasis(widget, value) {\n Private$c.sizeBasisProperty.set(widget, value);\n }\n BoxLayout.setSizeBasis = setSizeBasis;\n})(BoxLayout || (BoxLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$c;\n(function (Private) {\n /**\n * The property descriptor for a widget stretch factor.\n */\n Private.stretchProperty = new AttachedProperty({\n name: 'stretch',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * The property descriptor for a widget size basis.\n */\n Private.sizeBasisProperty = new AttachedProperty({\n name: 'sizeBasis',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * Test whether a direction has horizontal orientation.\n */\n function isHorizontal(dir) {\n return dir === 'left-to-right' || dir === 'right-to-left';\n }\n Private.isHorizontal = isHorizontal;\n /**\n * Clamp a spacing value to an integer >= 0.\n */\n function clampSpacing(value) {\n return Math.max(0, Math.floor(value));\n }\n Private.clampSpacing = clampSpacing;\n /**\n * The change handler for the attached sizing properties.\n */\n function onChildSizingChanged(child) {\n if (child.parent && child.parent.layout instanceof BoxLayout) {\n child.parent.fit();\n }\n }\n})(Private$c || (Private$c = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets in a single row or column.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link BoxLayout}.\n */\nclass BoxPanel extends Panel {\n /**\n * Construct a new box panel.\n *\n * @param options - The options for initializing the box panel.\n */\n constructor(options = {}) {\n super({ layout: Private$b.createLayout(options) });\n this.addClass('lm-BoxPanel');\n }\n /**\n * Get the layout direction for the box panel.\n */\n get direction() {\n return this.layout.direction;\n }\n /**\n * Set the layout direction for the box panel.\n */\n set direction(value) {\n this.layout.direction = value;\n }\n /**\n * Get the content alignment for the box panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n get alignment() {\n return this.layout.alignment;\n }\n /**\n * Set the content alignment for the box panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n set alignment(value) {\n this.layout.alignment = value;\n }\n /**\n * Get the inter-element spacing for the box panel.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the inter-element spacing for the box panel.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-BoxPanel-child');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-BoxPanel-child');\n }\n}\n/**\n * The namespace for the `BoxPanel` class statics.\n */\n(function (BoxPanel) {\n /**\n * Get the box panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box panel stretch factor for the widget.\n */\n function getStretch(widget) {\n return BoxLayout.getStretch(widget);\n }\n BoxPanel.getStretch = getStretch;\n /**\n * Set the box panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n BoxLayout.setStretch(widget, value);\n }\n BoxPanel.setStretch = setStretch;\n /**\n * Get the box panel size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box panel size basis for the widget.\n */\n function getSizeBasis(widget) {\n return BoxLayout.getSizeBasis(widget);\n }\n BoxPanel.getSizeBasis = getSizeBasis;\n /**\n * Set the box panel size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the size basis.\n */\n function setSizeBasis(widget, value) {\n BoxLayout.setSizeBasis(widget, value);\n }\n BoxPanel.setSizeBasis = setSizeBasis;\n})(BoxPanel || (BoxPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$b;\n(function (Private) {\n /**\n * Create a box layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new BoxLayout(options);\n }\n Private.createLayout = createLayout;\n})(Private$b || (Private$b = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays command items as a searchable palette.\n */\nclass CommandPalette extends Widget {\n /**\n * Construct a new command palette.\n *\n * @param options - The options for initializing the palette.\n */\n constructor(options) {\n super({ node: Private$a.createNode() });\n this._activeIndex = -1;\n this._items = [];\n this._results = null;\n this.addClass('lm-CommandPalette');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.commands = options.commands;\n this.renderer = options.renderer || CommandPalette.defaultRenderer;\n this.commands.commandChanged.connect(this._onGenericChange, this);\n this.commands.keyBindingChanged.connect(this._onGenericChange, this);\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._items.length = 0;\n this._results = null;\n super.dispose();\n }\n /**\n * The command palette search node.\n *\n * #### Notes\n * This is the node which contains the search-related elements.\n */\n get searchNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-search')[0];\n }\n /**\n * The command palette input node.\n *\n * #### Notes\n * This is the actual input node for the search area.\n */\n get inputNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-input')[0];\n }\n /**\n * The command palette content node.\n *\n * #### Notes\n * This is the node which holds the command item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-content')[0];\n }\n /**\n * A read-only array of the command items in the palette.\n */\n get items() {\n return this._items;\n }\n /**\n * Add a command item to the command palette.\n *\n * @param options - The options for creating the command item.\n *\n * @returns The command item added to the palette.\n */\n addItem(options) {\n // Create a new command item for the options.\n let item = Private$a.createItem(this.commands, options);\n // Add the item to the array.\n this._items.push(item);\n // Refresh the search results.\n this.refresh();\n // Return the item added to the palette.\n return item;\n }\n /**\n * Adds command items to the command palette.\n *\n * @param items - An array of options for creating each command item.\n *\n * @returns The command items added to the palette.\n */\n addItems(items) {\n const newItems = items.map(item => Private$a.createItem(this.commands, item));\n newItems.forEach(item => this._items.push(item));\n this.refresh();\n return newItems;\n }\n /**\n * Remove an item from the command palette.\n *\n * @param item - The item to remove from the palette.\n *\n * #### Notes\n * This is a no-op if the item is not in the palette.\n */\n removeItem(item) {\n this.removeItemAt(this._items.indexOf(item));\n }\n /**\n * Remove the item at a given index from the command palette.\n *\n * @param index - The index of the item to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeItemAt(index) {\n // Remove the item from the array.\n let item = ArrayExt.removeAt(this._items, index);\n // Bail if the index is out of range.\n if (!item) {\n return;\n }\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Remove all items from the command palette.\n */\n clearItems() {\n // Bail if there is nothing to remove.\n if (this._items.length === 0) {\n return;\n }\n // Clear the array of items.\n this._items.length = 0;\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Clear the search results and schedule an update.\n *\n * #### Notes\n * This should be called whenever the search results of the palette\n * should be updated.\n *\n * This is typically called automatically by the palette as needed,\n * but can be called manually if the input text is programatically\n * changed.\n *\n * The rendered results are updated asynchronously.\n */\n refresh() {\n this._results = null;\n if (this.inputNode.value !== '') {\n let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n clear.style.display = 'inherit';\n }\n else {\n let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n clear.style.display = 'none';\n }\n this.update();\n }\n /**\n * Handle the DOM events for the command palette.\n *\n * @param event - The DOM event sent to the command palette.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the command palette's DOM node.\n * It should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'click':\n this._evtClick(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'input':\n this.refresh();\n break;\n case 'focus':\n case 'blur':\n this._toggleFocused();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('click', this);\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('input', this);\n this.node.addEventListener('focus', this, true);\n this.node.addEventListener('blur', this, true);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('click', this);\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('input', this);\n this.node.removeEventListener('focus', this, true);\n this.node.removeEventListener('blur', this, true);\n }\n /**\n * A message handler invoked on an `'after-show'` message.\n */\n onAfterShow(msg) {\n this.update();\n super.onAfterShow(msg);\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n let input = this.inputNode;\n input.focus();\n input.select();\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.isHidden) {\n return;\n }\n // Fetch the current query text and content node.\n let query = this.inputNode.value;\n let contentNode = this.contentNode;\n // Ensure the search results are generated.\n let results = this._results;\n if (!results) {\n // Generate and store the new search results.\n results = this._results = Private$a.search(this._items, query);\n // Reset the active index.\n this._activeIndex = query\n ? ArrayExt.findFirstIndex(results, Private$a.canActivate)\n : -1;\n }\n // If there is no query and no results, clear the content.\n if (!query && results.length === 0) {\n VirtualDOM.render(null, contentNode);\n return;\n }\n // If the is a query but no results, render the empty message.\n if (query && results.length === 0) {\n let content = this.renderer.renderEmptyMessage({ query });\n VirtualDOM.render(content, contentNode);\n return;\n }\n // Create the render content for the search results.\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let content = new Array(results.length);\n for (let i = 0, n = results.length; i < n; ++i) {\n let result = results[i];\n if (result.type === 'header') {\n let indices = result.indices;\n let category = result.category;\n content[i] = renderer.renderHeader({ category, indices });\n }\n else {\n let item = result.item;\n let indices = result.indices;\n let active = i === activeIndex;\n content[i] = renderer.renderItem({ item, indices, active });\n }\n }\n // Render the search result content.\n VirtualDOM.render(content, contentNode);\n // Adjust the scroll position as needed.\n if (activeIndex < 0 || activeIndex >= results.length) {\n contentNode.scrollTop = 0;\n }\n else {\n let element = contentNode.children[activeIndex];\n ElementExt.scrollIntoViewIfNeeded(contentNode, element);\n }\n }\n /**\n * Handle the `'click'` event for the command palette.\n */\n _evtClick(event) {\n // Bail if the click is not the left button.\n if (event.button !== 0) {\n return;\n }\n // Clear input if the target is clear button\n if (event.target.classList.contains('lm-close-icon')) {\n this.inputNode.value = '';\n this.refresh();\n return;\n }\n // Find the index of the item which was clicked.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return node.contains(event.target);\n });\n // Bail if the click was not on an item.\n if (index === -1) {\n return;\n }\n // Kill the event when a content item is clicked.\n event.preventDefault();\n event.stopPropagation();\n // Execute the item if possible.\n this._execute(index);\n }\n /**\n * Handle the `'keydown'` event for the command palette.\n */\n _evtKeyDown(event) {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n switch (event.keyCode) {\n case 13: // Enter\n event.preventDefault();\n event.stopPropagation();\n this._execute(this._activeIndex);\n break;\n case 38: // Up Arrow\n event.preventDefault();\n event.stopPropagation();\n this._activatePreviousItem();\n break;\n case 40: // Down Arrow\n event.preventDefault();\n event.stopPropagation();\n this._activateNextItem();\n break;\n }\n }\n /**\n * Activate the next enabled command item.\n */\n _activateNextItem() {\n // Bail if there are no search results.\n if (!this._results || this._results.length === 0) {\n return;\n }\n // Find the next enabled item index.\n let ai = this._activeIndex;\n let n = this._results.length;\n let start = ai < n - 1 ? ai + 1 : 0;\n let stop = start === 0 ? n - 1 : start - 1;\n this._activeIndex = ArrayExt.findFirstIndex(this._results, Private$a.canActivate, start, stop);\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Activate the previous enabled command item.\n */\n _activatePreviousItem() {\n // Bail if there are no search results.\n if (!this._results || this._results.length === 0) {\n return;\n }\n // Find the previous enabled item index.\n let ai = this._activeIndex;\n let n = this._results.length;\n let start = ai <= 0 ? n - 1 : ai - 1;\n let stop = start === n - 1 ? 0 : start + 1;\n this._activeIndex = ArrayExt.findLastIndex(this._results, Private$a.canActivate, start, stop);\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Execute the command item at the given index, if possible.\n */\n _execute(index) {\n // Bail if there are no search results.\n if (!this._results) {\n return;\n }\n // Bail if the index is out of range.\n let part = this._results[index];\n if (!part) {\n return;\n }\n // Update the search text if the item is a header.\n if (part.type === 'header') {\n let input = this.inputNode;\n input.value = `${part.category.toLowerCase()} `;\n input.focus();\n this.refresh();\n return;\n }\n // Bail if item is not enabled.\n if (!part.item.isEnabled) {\n return;\n }\n // Execute the item.\n this.commands.execute(part.item.command, part.item.args);\n // Clear the query text.\n this.inputNode.value = '';\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Toggle the focused modifier based on the input node focus state.\n */\n _toggleFocused() {\n let focused = document.activeElement === this.inputNode;\n this.toggleClass('lm-mod-focused', focused);\n }\n /**\n * A signal handler for generic command changes.\n */\n _onGenericChange() {\n this.refresh();\n }\n}\n/**\n * The namespace for the `CommandPalette` class statics.\n */\n(function (CommandPalette) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Render the virtual element for a command palette header.\n *\n * @param data - The data to use for rendering the header.\n *\n * @returns A virtual element representing the header.\n */\n renderHeader(data) {\n let content = this.formatHeader(data);\n return h.li({ className: 'lm-CommandPalette-header' }, content);\n }\n /**\n * Render the virtual element for a command palette item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n if (data.item.isToggleable) {\n return h.li({\n className,\n dataset,\n role: 'menuitemcheckbox',\n 'aria-checked': `${data.item.isToggled}`\n }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n }\n return h.li({\n className,\n dataset,\n role: 'menuitem'\n }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n }\n /**\n * Render the empty results message for a command palette.\n *\n * @param data - The data to use for rendering the message.\n *\n * @returns A virtual element representing the message.\n */\n renderEmptyMessage(data) {\n let content = this.formatEmptyMessage(data);\n return h.li({ className: 'lm-CommandPalette-emptyMessage' }, content);\n }\n /**\n * Render the icon for a command palette item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the icon.\n */\n renderItemIcon(data) {\n let className = this.createIconClass(data);\n // If data.item.icon is undefined, it will be ignored.\n return h.div({ className }, data.item.icon, data.item.iconLabel);\n }\n /**\n * Render the content for a command palette item.\n *\n * @param data - The data to use for rendering the content.\n *\n * @returns A virtual element representing the content.\n */\n renderItemContent(data) {\n return h.div({ className: 'lm-CommandPalette-itemContent' }, this.renderItemLabel(data), this.renderItemCaption(data));\n }\n /**\n * Render the label for a command palette item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the label.\n */\n renderItemLabel(data) {\n let content = this.formatItemLabel(data);\n return h.div({ className: 'lm-CommandPalette-itemLabel' }, content);\n }\n /**\n * Render the caption for a command palette item.\n *\n * @param data - The data to use for rendering the caption.\n *\n * @returns A virtual element representing the caption.\n */\n renderItemCaption(data) {\n let content = this.formatItemCaption(data);\n return h.div({ className: 'lm-CommandPalette-itemCaption' }, content);\n }\n /**\n * Render the shortcut for a command palette item.\n *\n * @param data - The data to use for rendering the shortcut.\n *\n * @returns A virtual element representing the shortcut.\n */\n renderItemShortcut(data) {\n let content = this.formatItemShortcut(data);\n return h.div({ className: 'lm-CommandPalette-itemShortcut' }, content);\n }\n /**\n * Create the class name for the command palette item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the command palette item.\n */\n createItemClass(data) {\n // Set up the initial class name.\n let name = 'lm-CommandPalette-item';\n // Add the boolean state classes.\n if (!data.item.isEnabled) {\n name += ' lm-mod-disabled';\n }\n if (data.item.isToggled) {\n name += ' lm-mod-toggled';\n }\n if (data.active) {\n name += ' lm-mod-active';\n }\n // Add the extra class.\n let extra = data.item.className;\n if (extra) {\n name += ` ${extra}`;\n }\n // Return the complete class name.\n return name;\n }\n /**\n * Create the dataset for the command palette item.\n *\n * @param data - The data to use for creating the dataset.\n *\n * @returns The dataset for the command palette item.\n */\n createItemDataset(data) {\n return { ...data.item.dataset, command: data.item.command };\n }\n /**\n * Create the class name for the command item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-CommandPalette-itemIcon';\n let extra = data.item.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the render content for the header node.\n *\n * @param data - The data to use for the header content.\n *\n * @returns The content to add to the header node.\n */\n formatHeader(data) {\n if (!data.indices || data.indices.length === 0) {\n return data.category;\n }\n return StringExt.highlight(data.category, data.indices, h.mark);\n }\n /**\n * Create the render content for the empty message node.\n *\n * @param data - The data to use for the empty message content.\n *\n * @returns The content to add to the empty message node.\n */\n formatEmptyMessage(data) {\n return `No commands found that match '${data.query}'`;\n }\n /**\n * Create the render content for the item shortcut node.\n *\n * @param data - The data to use for the shortcut content.\n *\n * @returns The content to add to the shortcut node.\n */\n formatItemShortcut(data) {\n let kb = data.item.keyBinding;\n return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n }\n /**\n * Create the render content for the item label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatItemLabel(data) {\n if (!data.indices || data.indices.length === 0) {\n return data.item.label;\n }\n return StringExt.highlight(data.item.label, data.indices, h.mark);\n }\n /**\n * Create the render content for the item caption node.\n *\n * @param data - The data to use for the caption content.\n *\n * @returns The content to add to the caption node.\n */\n formatItemCaption(data) {\n return data.item.caption;\n }\n }\n CommandPalette.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n CommandPalette.defaultRenderer = new Renderer();\n})(CommandPalette || (CommandPalette = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$a;\n(function (Private) {\n /**\n * Create the DOM node for a command palette.\n */\n function createNode() {\n let node = document.createElement('div');\n let search = document.createElement('div');\n let wrapper = document.createElement('div');\n let input = document.createElement('input');\n let content = document.createElement('ul');\n let clear = document.createElement('button');\n search.className = 'lm-CommandPalette-search';\n wrapper.className = 'lm-CommandPalette-wrapper';\n input.className = 'lm-CommandPalette-input';\n clear.className = 'lm-close-icon';\n content.className = 'lm-CommandPalette-content';\n content.setAttribute('role', 'menu');\n input.spellcheck = false;\n wrapper.appendChild(input);\n wrapper.appendChild(clear);\n search.appendChild(wrapper);\n node.appendChild(search);\n node.appendChild(content);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Create a new command item from a command registry and options.\n */\n function createItem(commands, options) {\n return new CommandItem(commands, options);\n }\n Private.createItem = createItem;\n /**\n * Search an array of command items for fuzzy matches.\n */\n function search(items, query) {\n // Fuzzy match the items for the query.\n let scores = matchItems(items, query);\n // Sort the items based on their score.\n scores.sort(scoreCmp);\n // Create the results for the search.\n return createResults(scores);\n }\n Private.search = search;\n /**\n * Test whether a result item can be activated.\n */\n function canActivate(result) {\n return result.type === 'item' && result.item.isEnabled;\n }\n Private.canActivate = canActivate;\n /**\n * Normalize a category for a command item.\n */\n function normalizeCategory(category) {\n return category.trim().replace(/\\s+/g, ' ');\n }\n /**\n * Normalize the query text for a fuzzy search.\n */\n function normalizeQuery(text) {\n return text.replace(/\\s+/g, '').toLowerCase();\n }\n /**\n * Perform a fuzzy match on an array of command items.\n */\n function matchItems(items, query) {\n // Normalize the query text to lower case with no whitespace.\n query = normalizeQuery(query);\n // Create the array to hold the scores.\n let scores = [];\n // Iterate over the items and match against the query.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Ignore items which are not visible.\n let item = items[i];\n if (!item.isVisible) {\n continue;\n }\n // If the query is empty, all items are matched by default.\n if (!query) {\n scores.push({\n matchType: 3 /* MatchType.Default */,\n categoryIndices: null,\n labelIndices: null,\n score: 0,\n item\n });\n continue;\n }\n // Run the fuzzy search for the item and query.\n let score = fuzzySearch(item, query);\n // Ignore the item if it is not a match.\n if (!score) {\n continue;\n }\n // Penalize disabled items.\n // TODO - push disabled items all the way down in sort cmp?\n if (!item.isEnabled) {\n score.score += 1000;\n }\n // Add the score to the results.\n scores.push(score);\n }\n // Return the final array of scores.\n return scores;\n }\n /**\n * Perform a fuzzy search on a single command item.\n */\n function fuzzySearch(item, query) {\n // Create the source text to be searched.\n let category = item.category.toLowerCase();\n let label = item.label.toLowerCase();\n let source = `${category} ${label}`;\n // Set up the match score and indices array.\n let score = Infinity;\n let indices = null;\n // The regex for search word boundaries\n let rgx = /\\b\\w/g;\n // Search the source by word boundary.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // Find the next word boundary in the source.\n let rgxMatch = rgx.exec(source);\n // Break if there is no more source context.\n if (!rgxMatch) {\n break;\n }\n // Run the string match on the relevant substring.\n let match = StringExt.matchSumOfDeltas(source, query, rgxMatch.index);\n // Break if there is no match.\n if (!match) {\n break;\n }\n // Update the match if the score is better.\n if (match.score <= score) {\n score = match.score;\n indices = match.indices;\n }\n }\n // Bail if there was no match.\n if (!indices || score === Infinity) {\n return null;\n }\n // Compute the pivot index between category and label text.\n let pivot = category.length + 1;\n // Find the slice index to separate matched indices.\n let j = ArrayExt.lowerBound(indices, pivot, (a, b) => a - b);\n // Extract the matched category and label indices.\n let categoryIndices = indices.slice(0, j);\n let labelIndices = indices.slice(j);\n // Adjust the label indices for the pivot offset.\n for (let i = 0, n = labelIndices.length; i < n; ++i) {\n labelIndices[i] -= pivot;\n }\n // Handle a pure label match.\n if (categoryIndices.length === 0) {\n return {\n matchType: 0 /* MatchType.Label */,\n categoryIndices: null,\n labelIndices,\n score,\n item\n };\n }\n // Handle a pure category match.\n if (labelIndices.length === 0) {\n return {\n matchType: 1 /* MatchType.Category */,\n categoryIndices,\n labelIndices: null,\n score,\n item\n };\n }\n // Handle a split match.\n return {\n matchType: 2 /* MatchType.Split */,\n categoryIndices,\n labelIndices,\n score,\n item\n };\n }\n /**\n * A sort comparison function for a match score.\n */\n function scoreCmp(a, b) {\n // First compare based on the match type\n let m1 = a.matchType - b.matchType;\n if (m1 !== 0) {\n return m1;\n }\n // Otherwise, compare based on the match score.\n let d1 = a.score - b.score;\n if (d1 !== 0) {\n return d1;\n }\n // Find the match index based on the match type.\n let i1 = 0;\n let i2 = 0;\n switch (a.matchType) {\n case 0 /* MatchType.Label */:\n i1 = a.labelIndices[0];\n i2 = b.labelIndices[0];\n break;\n case 1 /* MatchType.Category */:\n case 2 /* MatchType.Split */:\n i1 = a.categoryIndices[0];\n i2 = b.categoryIndices[0];\n break;\n }\n // Compare based on the match index.\n if (i1 !== i2) {\n return i1 - i2;\n }\n // Otherwise, compare by category.\n let d2 = a.item.category.localeCompare(b.item.category);\n if (d2 !== 0) {\n return d2;\n }\n // Otherwise, compare by rank.\n let r1 = a.item.rank;\n let r2 = b.item.rank;\n if (r1 !== r2) {\n return r1 < r2 ? -1 : 1; // Infinity safe\n }\n // Finally, compare by label.\n return a.item.label.localeCompare(b.item.label);\n }\n /**\n * Create the results from an array of sorted scores.\n */\n function createResults(scores) {\n // Set up the search results array.\n let results = [];\n // Iterate over each score in the array.\n for (let i = 0, n = scores.length; i < n; ++i) {\n // Extract the current item and indices.\n let { item, categoryIndices, labelIndices } = scores[i];\n // Extract the category for the current item.\n let category = item.category;\n // Is this the same category as the preceding result?\n if (i === 0 || category !== scores[i - 1].item.category) {\n // Add the header result for the category.\n results.push({ type: 'header', category, indices: categoryIndices });\n }\n // Create the item result for the score.\n results.push({ type: 'item', item, indices: labelIndices });\n }\n // Return the final results.\n return results;\n }\n /**\n * A concrete implementation of `CommandPalette.IItem`.\n */\n class CommandItem {\n /**\n * Construct a new command item.\n */\n constructor(commands, options) {\n this._commands = commands;\n this.category = normalizeCategory(options.category);\n this.command = options.command;\n this.args = options.args || JSONExt.emptyObject;\n this.rank = options.rank !== undefined ? options.rank : Infinity;\n }\n /**\n * The display label for the command item.\n */\n get label() {\n return this._commands.label(this.command, this.args);\n }\n /**\n * The icon renderer for the command item.\n */\n get icon() {\n return this._commands.icon(this.command, this.args);\n }\n /**\n * The icon class for the command item.\n */\n get iconClass() {\n return this._commands.iconClass(this.command, this.args);\n }\n /**\n * The icon label for the command item.\n */\n get iconLabel() {\n return this._commands.iconLabel(this.command, this.args);\n }\n /**\n * The display caption for the command item.\n */\n get caption() {\n return this._commands.caption(this.command, this.args);\n }\n /**\n * The extra class name for the command item.\n */\n get className() {\n return this._commands.className(this.command, this.args);\n }\n /**\n * The dataset for the command item.\n */\n get dataset() {\n return this._commands.dataset(this.command, this.args);\n }\n /**\n * Whether the command item is enabled.\n */\n get isEnabled() {\n return this._commands.isEnabled(this.command, this.args);\n }\n /**\n * Whether the command item is toggled.\n */\n get isToggled() {\n return this._commands.isToggled(this.command, this.args);\n }\n /**\n * Whether the command item is toggleable.\n */\n get isToggleable() {\n return this._commands.isToggleable(this.command, this.args);\n }\n /**\n * Whether the command item is visible.\n */\n get isVisible() {\n return this._commands.isVisible(this.command, this.args);\n }\n /**\n * The key binding for the command item.\n */\n get keyBinding() {\n let { command, args } = this;\n return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n return kb.command === command && JSONExt.deepEqual(kb.args, args);\n }) || null);\n }\n }\n})(Private$a || (Private$a = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays items as a canonical menu.\n */\nclass Menu extends Widget {\n /**\n * Construct a new menu.\n *\n * @param options - The options for initializing the menu.\n */\n constructor(options) {\n super({ node: Private$9.createNode() });\n this._childIndex = -1;\n this._activeIndex = -1;\n this._openTimerID = 0;\n this._closeTimerID = 0;\n this._items = [];\n this._childMenu = null;\n this._parentMenu = null;\n this._aboutToClose = new Signal(this);\n this._menuRequested = new Signal(this);\n this.addClass('lm-Menu');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.commands = options.commands;\n this.renderer = options.renderer || Menu.defaultRenderer;\n }\n /**\n * Dispose of the resources held by the menu.\n */\n dispose() {\n this.close();\n this._items.length = 0;\n super.dispose();\n }\n /**\n * A signal emitted just before the menu is closed.\n *\n * #### Notes\n * This signal is emitted when the menu receives a `'close-request'`\n * message, just before it removes itself from the DOM.\n *\n * This signal is not emitted if the menu is already detached from\n * the DOM when it receives the `'close-request'` message.\n */\n get aboutToClose() {\n return this._aboutToClose;\n }\n /**\n * A signal emitted when a new menu is requested by the user.\n *\n * #### Notes\n * This signal is emitted whenever the user presses the right or left\n * arrow keys, and a submenu cannot be opened or closed in response.\n *\n * This signal is useful when implementing menu bars in order to open\n * the next or previous menu in response to a user key press.\n *\n * This signal is only emitted for the root menu in a hierarchy.\n */\n get menuRequested() {\n return this._menuRequested;\n }\n /**\n * The parent menu of the menu.\n *\n * #### Notes\n * This is `null` unless the menu is an open submenu.\n */\n get parentMenu() {\n return this._parentMenu;\n }\n /**\n * The child menu of the menu.\n *\n * #### Notes\n * This is `null` unless the menu has an open submenu.\n */\n get childMenu() {\n return this._childMenu;\n }\n /**\n * The root menu of the menu hierarchy.\n */\n get rootMenu() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let menu = this;\n while (menu._parentMenu) {\n menu = menu._parentMenu;\n }\n return menu;\n }\n /**\n * The leaf menu of the menu hierarchy.\n */\n get leafMenu() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let menu = this;\n while (menu._childMenu) {\n menu = menu._childMenu;\n }\n return menu;\n }\n /**\n * The menu content node.\n *\n * #### Notes\n * This is the node which holds the menu item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-Menu-content')[0];\n }\n /**\n * Get the currently active menu item.\n */\n get activeItem() {\n return this._items[this._activeIndex] || null;\n }\n /**\n * Set the currently active menu item.\n *\n * #### Notes\n * If the item cannot be activated, the item will be set to `null`.\n */\n set activeItem(value) {\n this.activeIndex = value ? this._items.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently active menu item.\n *\n * #### Notes\n * This will be `-1` if no menu item is active.\n */\n get activeIndex() {\n return this._activeIndex;\n }\n /**\n * Set the index of the currently active menu item.\n *\n * #### Notes\n * If the item cannot be activated, the index will be set to `-1`.\n */\n set activeIndex(value) {\n // Adjust the value for an out of range index.\n if (value < 0 || value >= this._items.length) {\n value = -1;\n }\n // Ensure the item can be activated.\n if (value !== -1 && !Private$9.canActivate(this._items[value])) {\n value = -1;\n }\n // Bail if the index will not change.\n if (this._activeIndex === value) {\n return;\n }\n // Update the active index.\n this._activeIndex = value;\n // Make active element in focus\n if (this._activeIndex >= 0 &&\n this.contentNode.childNodes[this._activeIndex]) {\n this.contentNode.childNodes[this._activeIndex].focus();\n }\n // schedule an update of the items.\n this.update();\n }\n /**\n * A read-only array of the menu items in the menu.\n */\n get items() {\n return this._items;\n }\n /**\n * Activate the next selectable item in the menu.\n *\n * #### Notes\n * If no item is selectable, the index will be set to `-1`.\n */\n activateNextItem() {\n let n = this._items.length;\n let ai = this._activeIndex;\n let start = ai < n - 1 ? ai + 1 : 0;\n let stop = start === 0 ? n - 1 : start - 1;\n this.activeIndex = ArrayExt.findFirstIndex(this._items, Private$9.canActivate, start, stop);\n }\n /**\n * Activate the previous selectable item in the menu.\n *\n * #### Notes\n * If no item is selectable, the index will be set to `-1`.\n */\n activatePreviousItem() {\n let n = this._items.length;\n let ai = this._activeIndex;\n let start = ai <= 0 ? n - 1 : ai - 1;\n let stop = start === n - 1 ? 0 : start + 1;\n this.activeIndex = ArrayExt.findLastIndex(this._items, Private$9.canActivate, start, stop);\n }\n /**\n * Trigger the active menu item.\n *\n * #### Notes\n * If the active item is a submenu, it will be opened and the first\n * item will be activated.\n *\n * If the active item is a command, the command will be executed.\n *\n * If the menu is not attached, this is a no-op.\n *\n * If there is no active item, this is a no-op.\n */\n triggerActiveItem() {\n // Bail if the menu is not attached.\n if (!this.isAttached) {\n return;\n }\n // Bail if there is no active item.\n let item = this.activeItem;\n if (!item) {\n return;\n }\n // Cancel the pending timers.\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n // If the item is a submenu, open it.\n if (item.type === 'submenu') {\n this._openChildMenu(true);\n return;\n }\n // Close the root menu before executing the command.\n this.rootMenu.close();\n // Execute the command for the item.\n let { command, args } = item;\n if (this.commands.isEnabled(command, args)) {\n this.commands.execute(command, args);\n }\n else {\n console.log(`Command '${command}' is disabled.`);\n }\n }\n /**\n * Add a menu item to the end of the menu.\n *\n * @param options - The options for creating the menu item.\n *\n * @returns The menu item added to the menu.\n */\n addItem(options) {\n return this.insertItem(this._items.length, options);\n }\n /**\n * Insert a menu item into the menu at the specified index.\n *\n * @param index - The index at which to insert the item.\n *\n * @param options - The options for creating the menu item.\n *\n * @returns The menu item added to the menu.\n *\n * #### Notes\n * The index will be clamped to the bounds of the items.\n */\n insertItem(index, options) {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Clamp the insert index to the array bounds.\n let i = Math.max(0, Math.min(index, this._items.length));\n // Create the item for the options.\n let item = Private$9.createItem(this, options);\n // Insert the item into the array.\n ArrayExt.insert(this._items, i, item);\n // Schedule an update of the items.\n this.update();\n // Return the item added to the menu.\n return item;\n }\n /**\n * Remove an item from the menu.\n *\n * @param item - The item to remove from the menu.\n *\n * #### Notes\n * This is a no-op if the item is not in the menu.\n */\n removeItem(item) {\n this.removeItemAt(this._items.indexOf(item));\n }\n /**\n * Remove the item at a given index from the menu.\n *\n * @param index - The index of the item to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeItemAt(index) {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Remove the item from the array.\n let item = ArrayExt.removeAt(this._items, index);\n // Bail if the index is out of range.\n if (!item) {\n return;\n }\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Remove all menu items from the menu.\n */\n clearItems() {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Bail if there is nothing to remove.\n if (this._items.length === 0) {\n return;\n }\n // Clear the items.\n this._items.length = 0;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Open the menu at the specified location.\n *\n * @param x - The client X coordinate of the menu location.\n *\n * @param y - The client Y coordinate of the menu location.\n *\n * @param options - The additional options for opening the menu.\n *\n * #### Notes\n * The menu will be opened at the given location unless it will not\n * fully fit on the screen. If it will not fit, it will be adjusted\n * to fit naturally on the screen.\n *\n * The menu will be attached under the `host` element in the DOM\n * (or `document.body` if `host` is `null`) and before the `ref`\n * element (or as the last child of `host` if `ref` is `null`).\n * The menu may be displayed outside of the `host` element\n * following the rules of CSS absolute positioning.\n *\n * This is a no-op if the menu is already attached to the DOM.\n */\n open(x, y, options = {}) {\n var _a, _b;\n // Bail early if the menu is already attached.\n if (this.isAttached) {\n return;\n }\n // Extract the menu options.\n let forceX = options.forceX || false;\n let forceY = options.forceY || false;\n const host = (_a = options.host) !== null && _a !== void 0 ? _a : null;\n const ref = (_b = options.ref) !== null && _b !== void 0 ? _b : null;\n // Open the menu as a root menu.\n Private$9.openRootMenu(this, x, y, forceX, forceY, host, ref);\n // Activate the menu to accept keyboard input.\n this.activate();\n }\n /**\n * Handle the DOM events for the menu.\n *\n * @param event - The DOM event sent to the menu.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the menu's DOM nodes. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'mouseup':\n this._evtMouseUp(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'mouseenter':\n this._evtMouseEnter(event);\n break;\n case 'mouseleave':\n this._evtMouseLeave(event);\n break;\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('mouseup', this);\n this.node.addEventListener('mousemove', this);\n this.node.addEventListener('mouseenter', this);\n this.node.addEventListener('mouseleave', this);\n this.node.addEventListener('contextmenu', this);\n document.addEventListener('mousedown', this, true);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('mouseup', this);\n this.node.removeEventListener('mousemove', this);\n this.node.removeEventListener('mouseenter', this);\n this.node.removeEventListener('mouseleave', this);\n this.node.removeEventListener('contextmenu', this);\n document.removeEventListener('mousedown', this, true);\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n this.node.focus();\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n let items = this._items;\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let collapsedFlags = Private$9.computeCollapsed(items);\n let content = new Array(items.length);\n for (let i = 0, n = items.length; i < n; ++i) {\n let item = items[i];\n let active = i === activeIndex;\n let collapsed = collapsedFlags[i];\n content[i] = renderer.renderItem({\n item,\n active,\n collapsed,\n onfocus: () => {\n this.activeIndex = i;\n }\n });\n }\n VirtualDOM.render(content, this.contentNode);\n }\n /**\n * A message handler invoked on a `'close-request'` message.\n */\n onCloseRequest(msg) {\n // Cancel the pending timers.\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n // Reset the active index.\n this.activeIndex = -1;\n // Close any open child menu.\n let childMenu = this._childMenu;\n if (childMenu) {\n this._childIndex = -1;\n this._childMenu = null;\n childMenu._parentMenu = null;\n childMenu.close();\n }\n // Remove this menu from its parent and activate the parent.\n let parentMenu = this._parentMenu;\n if (parentMenu) {\n this._parentMenu = null;\n parentMenu._childIndex = -1;\n parentMenu._childMenu = null;\n parentMenu.activate();\n }\n // Emit the `aboutToClose` signal if the menu is attached.\n if (this.isAttached) {\n this._aboutToClose.emit(undefined);\n }\n // Finish closing the menu.\n super.onCloseRequest(msg);\n }\n /**\n * Handle the `'keydown'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtKeyDown(event) {\n // A menu handles all keydown events.\n event.preventDefault();\n event.stopPropagation();\n // Fetch the key code for the event.\n let kc = event.keyCode;\n // Enter\n if (kc === 13) {\n this.triggerActiveItem();\n return;\n }\n // Escape\n if (kc === 27) {\n this.close();\n return;\n }\n // Left Arrow\n if (kc === 37) {\n if (this._parentMenu) {\n this.close();\n }\n else {\n this._menuRequested.emit('previous');\n }\n return;\n }\n // Up Arrow\n if (kc === 38) {\n this.activatePreviousItem();\n return;\n }\n // Right Arrow\n if (kc === 39) {\n let item = this.activeItem;\n if (item && item.type === 'submenu') {\n this.triggerActiveItem();\n }\n else {\n this.rootMenu._menuRequested.emit('next');\n }\n return;\n }\n // Down Arrow\n if (kc === 40) {\n this.activateNextItem();\n return;\n }\n // Get the pressed key character.\n let key = getKeyboardLayout().keyForKeydownEvent(event);\n // Bail if the key is not valid.\n if (!key) {\n return;\n }\n // Search for the next best matching mnemonic item.\n let start = this._activeIndex + 1;\n let result = Private$9.findMnemonic(this._items, key, start);\n // Handle the requested mnemonic based on the search results.\n // If exactly one mnemonic is matched, that item is triggered.\n // Otherwise, the next mnemonic is activated if available,\n // followed by the auto mnemonic if available.\n if (result.index !== -1 && !result.multiple) {\n this.activeIndex = result.index;\n this.triggerActiveItem();\n }\n else if (result.index !== -1) {\n this.activeIndex = result.index;\n }\n else if (result.auto !== -1) {\n this.activeIndex = result.auto;\n }\n }\n /**\n * Handle the `'mouseup'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseUp(event) {\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.triggerActiveItem();\n }\n /**\n * Handle the `'mousemove'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseMove(event) {\n // Hit test the item nodes for the item under the mouse.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // Bail early if the mouse is already over the active index.\n if (index === this._activeIndex) {\n return;\n }\n // Update and coerce the active index.\n this.activeIndex = index;\n index = this.activeIndex;\n // If the index is the current child index, cancel the timers.\n if (index === this._childIndex) {\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n return;\n }\n // If a child menu is currently open, start the close timer.\n if (this._childIndex !== -1) {\n this._startCloseTimer();\n }\n // Cancel the open timer to give a full delay for opening.\n this._cancelOpenTimer();\n // Bail if the active item is not a valid submenu item.\n let item = this.activeItem;\n if (!item || item.type !== 'submenu' || !item.submenu) {\n return;\n }\n // Start the open timer to open the active item submenu.\n this._startOpenTimer();\n }\n /**\n * Handle the `'mouseenter'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseEnter(event) {\n // Synchronize the active ancestor items.\n for (let menu = this._parentMenu; menu; menu = menu._parentMenu) {\n menu._cancelOpenTimer();\n menu._cancelCloseTimer();\n menu.activeIndex = menu._childIndex;\n }\n }\n /**\n * Handle the `'mouseleave'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseLeave(event) {\n // Cancel any pending submenu opening.\n this._cancelOpenTimer();\n // If there is no open child menu, just reset the active index.\n if (!this._childMenu) {\n this.activeIndex = -1;\n return;\n }\n // If the mouse is over the child menu, cancel the close timer.\n let { clientX, clientY } = event;\n if (ElementExt.hitTest(this._childMenu.node, clientX, clientY)) {\n this._cancelCloseTimer();\n return;\n }\n // Otherwise, reset the active index and start the close timer.\n this.activeIndex = -1;\n this._startCloseTimer();\n }\n /**\n * Handle the `'mousedown'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the document node.\n */\n _evtMouseDown(event) {\n // Bail if the menu is not a root menu.\n if (this._parentMenu) {\n return;\n }\n // The mouse button which is pressed is irrelevant. If the press\n // is not on a menu, the entire hierarchy is closed and the event\n // is allowed to propagate. This allows other code to act on the\n // event, such as focusing the clicked element.\n if (Private$9.hitTestMenus(this, event.clientX, event.clientY)) {\n event.preventDefault();\n event.stopPropagation();\n }\n else {\n this.close();\n }\n }\n /**\n * Open the child menu at the active index immediately.\n *\n * If a different child menu is already open, it will be closed,\n * even if the active item is not a valid submenu.\n */\n _openChildMenu(activateFirst = false) {\n // If the item is not a valid submenu, close the child menu.\n let item = this.activeItem;\n if (!item || item.type !== 'submenu' || !item.submenu) {\n this._closeChildMenu();\n return;\n }\n // Do nothing if the child menu will not change.\n let submenu = item.submenu;\n if (submenu === this._childMenu) {\n return;\n }\n // Prior to any DOM modifications save window data\n Menu.saveWindowData();\n // Ensure the current child menu is closed.\n this._closeChildMenu();\n // Update the private child state.\n this._childMenu = submenu;\n this._childIndex = this._activeIndex;\n // Set the parent menu reference for the child.\n submenu._parentMenu = this;\n // Ensure the menu is updated and lookup the item node.\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n let itemNode = this.contentNode.children[this._activeIndex];\n // Open the submenu at the active node.\n Private$9.openSubmenu(submenu, itemNode);\n // Activate the first item if desired.\n if (activateFirst) {\n submenu.activeIndex = -1;\n submenu.activateNextItem();\n }\n // Activate the child menu.\n submenu.activate();\n }\n /**\n * Close the child menu immediately.\n *\n * This is a no-op if a child menu is not open.\n */\n _closeChildMenu() {\n if (this._childMenu) {\n this._childMenu.close();\n }\n }\n /**\n * Start the open timer, unless it is already pending.\n */\n _startOpenTimer() {\n if (this._openTimerID === 0) {\n this._openTimerID = window.setTimeout(() => {\n this._openTimerID = 0;\n this._openChildMenu();\n }, Private$9.TIMER_DELAY);\n }\n }\n /**\n * Start the close timer, unless it is already pending.\n */\n _startCloseTimer() {\n if (this._closeTimerID === 0) {\n this._closeTimerID = window.setTimeout(() => {\n this._closeTimerID = 0;\n this._closeChildMenu();\n }, Private$9.TIMER_DELAY);\n }\n }\n /**\n * Cancel the open timer, if the timer is pending.\n */\n _cancelOpenTimer() {\n if (this._openTimerID !== 0) {\n clearTimeout(this._openTimerID);\n this._openTimerID = 0;\n }\n }\n /**\n * Cancel the close timer, if the timer is pending.\n */\n _cancelCloseTimer() {\n if (this._closeTimerID !== 0) {\n clearTimeout(this._closeTimerID);\n this._closeTimerID = 0;\n }\n }\n /**\n * Save window data used for menu positioning in transient cache.\n *\n * In order to avoid layout trashing it is recommended to invoke this\n * method immediately prior to opening the menu and any DOM modifications\n * (like closing previously visible menu, or adding a class to menu widget).\n *\n * The transient cache will be released upon `open()` call.\n */\n static saveWindowData() {\n Private$9.saveWindowData();\n }\n}\n/**\n * The namespace for the `Menu` class statics.\n */\n(function (Menu) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n /**\n * Render the virtual element for a menu item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n let aria = this.createItemARIA(data);\n return h.li({\n className,\n dataset,\n tabindex: '0',\n onfocus: data.onfocus,\n ...aria\n }, this.renderIcon(data), this.renderLabel(data), this.renderShortcut(data), this.renderSubmenu(data));\n }\n /**\n * Render the icon element for a menu item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the item icon.\n */\n renderIcon(data) {\n let className = this.createIconClass(data);\n // If data.item.icon is undefined, it will be ignored.\n return h.div({ className }, data.item.icon, data.item.iconLabel);\n }\n /**\n * Render the label element for a menu item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the item label.\n */\n renderLabel(data) {\n let content = this.formatLabel(data);\n return h.div({ className: 'lm-Menu-itemLabel' }, content);\n }\n /**\n * Render the shortcut element for a menu item.\n *\n * @param data - The data to use for rendering the shortcut.\n *\n * @returns A virtual element representing the item shortcut.\n */\n renderShortcut(data) {\n let content = this.formatShortcut(data);\n return h.div({ className: 'lm-Menu-itemShortcut' }, content);\n }\n /**\n * Render the submenu icon element for a menu item.\n *\n * @param data - The data to use for rendering the submenu icon.\n *\n * @returns A virtual element representing the submenu icon.\n */\n renderSubmenu(data) {\n return h.div({ className: 'lm-Menu-itemSubmenuIcon' });\n }\n /**\n * Create the class name for the menu item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the menu item.\n */\n createItemClass(data) {\n // Setup the initial class name.\n let name = 'lm-Menu-item';\n // Add the boolean state classes.\n if (!data.item.isEnabled) {\n name += ' lm-mod-disabled';\n }\n if (data.item.isToggled) {\n name += ' lm-mod-toggled';\n }\n if (!data.item.isVisible) {\n name += ' lm-mod-hidden';\n }\n if (data.active) {\n name += ' lm-mod-active';\n }\n if (data.collapsed) {\n name += ' lm-mod-collapsed';\n }\n // Add the extra class.\n let extra = data.item.className;\n if (extra) {\n name += ` ${extra}`;\n }\n // Return the complete class name.\n return name;\n }\n /**\n * Create the dataset for the menu item.\n *\n * @param data - The data to use for creating the dataset.\n *\n * @returns The dataset for the menu item.\n */\n createItemDataset(data) {\n let result;\n let { type, command, dataset } = data.item;\n if (type === 'command') {\n result = { ...dataset, type, command };\n }\n else {\n result = { ...dataset, type };\n }\n return result;\n }\n /**\n * Create the class name for the menu item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-Menu-itemIcon';\n let extra = data.item.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the aria attributes for menu item.\n *\n * @param data - The data to use for the aria attributes.\n *\n * @returns The aria attributes object for the item.\n */\n createItemARIA(data) {\n let aria = {};\n switch (data.item.type) {\n case 'separator':\n aria.role = 'presentation';\n break;\n case 'submenu':\n aria['aria-haspopup'] = 'true';\n if (!data.item.isEnabled) {\n aria['aria-disabled'] = 'true';\n }\n break;\n default:\n if (!data.item.isEnabled) {\n aria['aria-disabled'] = 'true';\n }\n aria.role = 'menuitem';\n }\n return aria;\n }\n /**\n * Create the render content for the label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatLabel(data) {\n // Fetch the label text and mnemonic index.\n let { label, mnemonic } = data.item;\n // If the index is out of range, do not modify the label.\n if (mnemonic < 0 || mnemonic >= label.length) {\n return label;\n }\n // Split the label into parts.\n let prefix = label.slice(0, mnemonic);\n let suffix = label.slice(mnemonic + 1);\n let char = label[mnemonic];\n // Wrap the mnemonic character in a span.\n let span = h.span({ className: 'lm-Menu-itemMnemonic' }, char);\n // Return the content parts.\n return [prefix, span, suffix];\n }\n /**\n * Create the render content for the shortcut node.\n *\n * @param data - The data to use for the shortcut content.\n *\n * @returns The content to add to the shortcut node.\n */\n formatShortcut(data) {\n let kb = data.item.keyBinding;\n return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n }\n }\n Menu.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n Menu.defaultRenderer = new Renderer();\n})(Menu || (Menu = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$9;\n(function (Private) {\n /**\n * The ms delay for opening and closing a submenu.\n */\n Private.TIMER_DELAY = 300;\n /**\n * The horizontal pixel overlap for an open submenu.\n */\n Private.SUBMENU_OVERLAP = 3;\n let transientWindowDataCache = null;\n let transientCacheCounter = 0;\n function getWindowData() {\n // if transient cache is in use, take one from it\n if (transientCacheCounter > 0) {\n transientCacheCounter--;\n return transientWindowDataCache;\n }\n return _getWindowData();\n }\n /**\n * Store window data in transient cache.\n *\n * The transient cache will be released upon `getWindowData()` call.\n * If this function is called multiple times, the cache will be\n * retained until as many calls to `getWindowData()` were made.\n *\n * Note: should be called before any DOM modifications.\n */\n function saveWindowData() {\n transientWindowDataCache = _getWindowData();\n transientCacheCounter++;\n }\n Private.saveWindowData = saveWindowData;\n /**\n * Create the DOM node for a menu.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.className = 'lm-Menu-content';\n node.appendChild(content);\n content.setAttribute('role', 'menu');\n node.tabIndex = 0;\n return node;\n }\n Private.createNode = createNode;\n /**\n * Test whether a menu item can be activated.\n */\n function canActivate(item) {\n return item.type !== 'separator' && item.isEnabled && item.isVisible;\n }\n Private.canActivate = canActivate;\n /**\n * Create a new menu item for an owner menu.\n */\n function createItem(owner, options) {\n return new MenuItem(owner.commands, options);\n }\n Private.createItem = createItem;\n /**\n * Hit test a menu hierarchy starting at the given root.\n */\n function hitTestMenus(menu, x, y) {\n for (let temp = menu; temp; temp = temp.childMenu) {\n if (ElementExt.hitTest(temp.node, x, y)) {\n return true;\n }\n }\n return false;\n }\n Private.hitTestMenus = hitTestMenus;\n /**\n * Compute which extra separator items should be collapsed.\n */\n function computeCollapsed(items) {\n // Allocate the return array and fill it with `false`.\n let result = new Array(items.length);\n ArrayExt.fill(result, false);\n // Collapse the leading separators.\n let k1 = 0;\n let n = items.length;\n for (; k1 < n; ++k1) {\n let item = items[k1];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n break;\n }\n result[k1] = true;\n }\n // Hide the trailing separators.\n let k2 = n - 1;\n for (; k2 >= 0; --k2) {\n let item = items[k2];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n break;\n }\n result[k2] = true;\n }\n // Hide the remaining consecutive separators.\n let hide = false;\n while (++k1 < k2) {\n let item = items[k1];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n hide = false;\n }\n else if (hide) {\n result[k1] = true;\n }\n else {\n hide = true;\n }\n }\n // Return the resulting flags.\n return result;\n }\n Private.computeCollapsed = computeCollapsed;\n function _getWindowData() {\n return {\n pageXOffset: window.pageXOffset,\n pageYOffset: window.pageYOffset,\n clientWidth: document.documentElement.clientWidth,\n clientHeight: document.documentElement.clientHeight\n };\n }\n /**\n * Open a menu as a root menu at the target location.\n */\n function openRootMenu(menu, x, y, forceX, forceY, host, ref) {\n // Get the current position and size of the main viewport.\n const windowData = getWindowData();\n let px = windowData.pageXOffset;\n let py = windowData.pageYOffset;\n let cw = windowData.clientWidth;\n let ch = windowData.clientHeight;\n // Ensure the menu is updated before attaching and measuring.\n MessageLoop.sendMessage(menu, Widget.Msg.UpdateRequest);\n // Compute the maximum allowed height for the menu.\n let maxHeight = ch - (forceY ? y : 0);\n // Fetch common variables.\n let node = menu.node;\n let style = node.style;\n // Clear the menu geometry and prepare it for measuring.\n style.opacity = '0';\n style.maxHeight = `${maxHeight}px`;\n // Attach the menu to the document.\n Widget.attach(menu, host || document.body, ref);\n // Measure the size of the menu.\n let { width, height } = node.getBoundingClientRect();\n // Adjust the X position of the menu to fit on-screen.\n if (!forceX && x + width > px + cw) {\n x = px + cw - width;\n }\n // Adjust the Y position of the menu to fit on-screen.\n if (!forceY && y + height > py + ch) {\n if (y > py + ch) {\n y = py + ch - height;\n }\n else {\n y = y - height;\n }\n }\n // Update the position of the menu to the computed position.\n style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n // Finally, make the menu visible on the screen.\n style.opacity = '1';\n }\n Private.openRootMenu = openRootMenu;\n /**\n * Open a menu as a submenu using an item node for positioning.\n */\n function openSubmenu(submenu, itemNode) {\n // Get the current position and size of the main viewport.\n const windowData = getWindowData();\n let px = windowData.pageXOffset;\n let py = windowData.pageYOffset;\n let cw = windowData.clientWidth;\n let ch = windowData.clientHeight;\n // Ensure the menu is updated before opening.\n MessageLoop.sendMessage(submenu, Widget.Msg.UpdateRequest);\n // Compute the maximum allowed height for the menu.\n let maxHeight = ch;\n // Fetch common variables.\n let node = submenu.node;\n let style = node.style;\n // Clear the menu geometry and prepare it for measuring.\n style.opacity = '0';\n style.maxHeight = `${maxHeight}px`;\n // Attach the menu to the document.\n Widget.attach(submenu, document.body);\n // Measure the size of the menu.\n let { width, height } = node.getBoundingClientRect();\n // Compute the box sizing for the menu.\n let box = ElementExt.boxSizing(submenu.node);\n // Get the bounding rect for the target item node.\n let itemRect = itemNode.getBoundingClientRect();\n // Compute the target X position.\n let x = itemRect.right - Private.SUBMENU_OVERLAP;\n // Adjust the X position to fit on the screen.\n if (x + width > px + cw) {\n x = itemRect.left + Private.SUBMENU_OVERLAP - width;\n }\n // Compute the target Y position.\n let y = itemRect.top - box.borderTop - box.paddingTop;\n // Adjust the Y position to fit on the screen.\n if (y + height > py + ch) {\n y = itemRect.bottom + box.borderBottom + box.paddingBottom - height;\n }\n // Update the position of the menu to the computed position.\n style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n // Finally, make the menu visible on the screen.\n style.opacity = '1';\n }\n Private.openSubmenu = openSubmenu;\n /**\n * Find the best matching mnemonic item.\n *\n * The search starts at the given index and wraps around.\n */\n function findMnemonic(items, key, start) {\n // Setup the result variables.\n let index = -1;\n let auto = -1;\n let multiple = false;\n // Normalize the key to upper case.\n let upperKey = key.toUpperCase();\n // Search the items from the given start index.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Compute the wrapped index.\n let k = (i + start) % n;\n // Lookup the item\n let item = items[k];\n // Ignore items which cannot be activated.\n if (!canActivate(item)) {\n continue;\n }\n // Ignore items with an empty label.\n let label = item.label;\n if (label.length === 0) {\n continue;\n }\n // Lookup the mnemonic index for the label.\n let mn = item.mnemonic;\n // Handle a valid mnemonic index.\n if (mn >= 0 && mn < label.length) {\n if (label[mn].toUpperCase() === upperKey) {\n if (index === -1) {\n index = k;\n }\n else {\n multiple = true;\n }\n }\n continue;\n }\n // Finally, handle the auto index if possible.\n if (auto === -1 && label[0].toUpperCase() === upperKey) {\n auto = k;\n }\n }\n // Return the search results.\n return { index, multiple, auto };\n }\n Private.findMnemonic = findMnemonic;\n /**\n * A concrete implementation of `Menu.IItem`.\n */\n class MenuItem {\n /**\n * Construct a new menu item.\n */\n constructor(commands, options) {\n this._commands = commands;\n this.type = options.type || 'command';\n this.command = options.command || '';\n this.args = options.args || JSONExt.emptyObject;\n this.submenu = options.submenu || null;\n }\n /**\n * The display label for the menu item.\n */\n get label() {\n if (this.type === 'command') {\n return this._commands.label(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.label;\n }\n return '';\n }\n /**\n * The mnemonic index for the menu item.\n */\n get mnemonic() {\n if (this.type === 'command') {\n return this._commands.mnemonic(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.mnemonic;\n }\n return -1;\n }\n /**\n * The icon renderer for the menu item.\n */\n get icon() {\n if (this.type === 'command') {\n return this._commands.icon(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.icon;\n }\n return undefined;\n }\n /**\n * The icon class for the menu item.\n */\n get iconClass() {\n if (this.type === 'command') {\n return this._commands.iconClass(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.iconClass;\n }\n return '';\n }\n /**\n * The icon label for the menu item.\n */\n get iconLabel() {\n if (this.type === 'command') {\n return this._commands.iconLabel(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.iconLabel;\n }\n return '';\n }\n /**\n * The display caption for the menu item.\n */\n get caption() {\n if (this.type === 'command') {\n return this._commands.caption(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.caption;\n }\n return '';\n }\n /**\n * The extra class name for the menu item.\n */\n get className() {\n if (this.type === 'command') {\n return this._commands.className(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.className;\n }\n return '';\n }\n /**\n * The dataset for the menu item.\n */\n get dataset() {\n if (this.type === 'command') {\n return this._commands.dataset(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.dataset;\n }\n return {};\n }\n /**\n * Whether the menu item is enabled.\n */\n get isEnabled() {\n if (this.type === 'command') {\n return this._commands.isEnabled(this.command, this.args);\n }\n if (this.type === 'submenu') {\n return this.submenu !== null;\n }\n return true;\n }\n /**\n * Whether the menu item is toggled.\n */\n get isToggled() {\n if (this.type === 'command') {\n return this._commands.isToggled(this.command, this.args);\n }\n return false;\n }\n /**\n * Whether the menu item is visible.\n */\n get isVisible() {\n if (this.type === 'command') {\n return this._commands.isVisible(this.command, this.args);\n }\n if (this.type === 'submenu') {\n return this.submenu !== null;\n }\n return true;\n }\n /**\n * The key binding for the menu item.\n */\n get keyBinding() {\n if (this.type === 'command') {\n let { command, args } = this;\n return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n return kb.command === command && JSONExt.deepEqual(kb.args, args);\n }) || null);\n }\n return null;\n }\n }\n})(Private$9 || (Private$9 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * An object which implements a universal context menu.\n *\n * #### Notes\n * The items shown in the context menu are determined by CSS selector\n * matching against the DOM hierarchy at the site of the mouse click.\n * This is similar in concept to how keyboard shortcuts are matched\n * in the command registry.\n */\nclass ContextMenu {\n /**\n * Construct a new context menu.\n *\n * @param options - The options for initializing the menu.\n */\n constructor(options) {\n this._groupByTarget = true;\n this._idTick = 0;\n this._items = [];\n this._sortBySelector = true;\n const { groupByTarget, sortBySelector, ...others } = options;\n this.menu = new Menu(others);\n this._groupByTarget = groupByTarget !== false;\n this._sortBySelector = sortBySelector !== false;\n }\n /**\n * Add an item to the context menu.\n *\n * @param options - The options for creating the item.\n *\n * @returns A disposable which will remove the item from the menu.\n */\n addItem(options) {\n // Create an item from the given options.\n let item = Private$8.createItem(options, this._idTick++);\n // Add the item to the internal array.\n this._items.push(item);\n // Return a disposable which will remove the item.\n return new DisposableDelegate(() => {\n ArrayExt.removeFirstOf(this._items, item);\n });\n }\n /**\n * Open the context menu in response to a `'contextmenu'` event.\n *\n * @param event - The `'contextmenu'` event of interest.\n *\n * @returns `true` if the menu was opened, or `false` if no items\n * matched the event and the menu was not opened.\n *\n * #### Notes\n * This method will populate the context menu with items which match\n * the propagation path of the event, then open the menu at the mouse\n * position indicated by the event.\n */\n open(event) {\n // Prior to any DOM modifications update the window data.\n Menu.saveWindowData();\n // Clear the current contents of the context menu.\n this.menu.clearItems();\n // Bail early if there are no items to match.\n if (this._items.length === 0) {\n return false;\n }\n // Find the matching items for the event.\n let items = Private$8.matchItems(this._items, event, this._groupByTarget, this._sortBySelector);\n // Bail if there are no matching items.\n if (!items || items.length === 0) {\n return false;\n }\n // Add the filtered items to the menu.\n for (const item of items) {\n this.menu.addItem(item);\n }\n // Open the context menu at the current mouse position.\n this.menu.open(event.clientX, event.clientY);\n // Indicate success.\n return true;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$8;\n(function (Private) {\n /**\n * Create a normalized context menu item from an options object.\n */\n function createItem(options, id) {\n let selector = validateSelector(options.selector);\n let rank = options.rank !== undefined ? options.rank : Infinity;\n return { ...options, selector, rank, id };\n }\n Private.createItem = createItem;\n /**\n * Find the items which match a context menu event.\n *\n * The results are sorted by DOM level, specificity, and rank.\n */\n function matchItems(items, event, groupByTarget, sortBySelector) {\n // Look up the target of the event.\n let target = event.target;\n // Bail if there is no target.\n if (!target) {\n return null;\n }\n // Look up the current target of the event.\n let currentTarget = event.currentTarget;\n // Bail if there is no current target.\n if (!currentTarget) {\n return null;\n }\n // There are some third party libraries that cause the `target` to\n // be detached from the DOM before lumino can process the event.\n // If that happens, search for a new target node by point. If that\n // node is still dangling, bail.\n if (!currentTarget.contains(target)) {\n target = document.elementFromPoint(event.clientX, event.clientY);\n if (!target || !currentTarget.contains(target)) {\n return null;\n }\n }\n // Set up the result array.\n let result = [];\n // Copy the items array to allow in-place modification.\n let availableItems = items.slice();\n // Walk up the DOM hierarchy searching for matches.\n while (target !== null) {\n // Set up the match array for this DOM level.\n let matches = [];\n // Search the remaining items for matches.\n for (let i = 0, n = availableItems.length; i < n; ++i) {\n // Fetch the item.\n let item = availableItems[i];\n // Skip items which are already consumed.\n if (!item) {\n continue;\n }\n // Skip items which do not match the element.\n if (!Selector.matches(target, item.selector)) {\n continue;\n }\n // Add the matched item to the result for this DOM level.\n matches.push(item);\n // Mark the item as consumed.\n availableItems[i] = null;\n }\n // Sort the matches for this level and add them to the results.\n if (matches.length !== 0) {\n if (groupByTarget) {\n matches.sort(sortBySelector ? itemCmp : itemCmpRank);\n }\n result.push(...matches);\n }\n // Stop searching at the limits of the DOM range.\n if (target === currentTarget) {\n break;\n }\n // Step to the parent DOM level.\n target = target.parentElement;\n }\n if (!groupByTarget) {\n result.sort(sortBySelector ? itemCmp : itemCmpRank);\n }\n // Return the matched and sorted results.\n return result;\n }\n Private.matchItems = matchItems;\n /**\n * Validate the selector for a menu item.\n *\n * This returns the validated selector, or throws if the selector is\n * invalid or contains commas.\n */\n function validateSelector(selector) {\n if (selector.indexOf(',') !== -1) {\n throw new Error(`Selector cannot contain commas: ${selector}`);\n }\n if (!Selector.isValid(selector)) {\n throw new Error(`Invalid selector: ${selector}`);\n }\n return selector;\n }\n /**\n * A sort comparison function for a context menu item by ranks.\n */\n function itemCmpRank(a, b) {\n // Sort based on rank.\n let r1 = a.rank;\n let r2 = b.rank;\n if (r1 !== r2) {\n return r1 < r2 ? -1 : 1; // Infinity-safe\n }\n // When all else fails, sort by item id.\n return a.id - b.id;\n }\n /**\n * A sort comparison function for a context menu item by selectors and ranks.\n */\n function itemCmp(a, b) {\n // Sort first based on selector specificity.\n let s1 = Selector.calculateSpecificity(a.selector);\n let s2 = Selector.calculateSpecificity(b.selector);\n if (s1 !== s2) {\n return s2 - s1;\n }\n // If specificities are equal\n return itemCmpRank(a, b);\n }\n})(Private$8 || (Private$8 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nconst ARROW_KEYS = [\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowDown',\n 'Home',\n 'End'\n];\n/**\n * A widget which displays titles as a single row or column of tabs.\n *\n * #### Notes\n * If CSS transforms are used to rotate nodes for vertically oriented\n * text, then tab dragging will not work correctly. The `tabsMovable`\n * property should be set to `false` when rotating nodes from CSS.\n */\nclass TabBar extends Widget {\n /**\n * Construct a new tab bar.\n *\n * @param options - The options for initializing the tab bar.\n */\n constructor(options = {}) {\n super({ node: Private$7.createNode() });\n this._currentIndex = -1;\n this._titles = [];\n this._titlesEditable = false;\n this._previousTitle = null;\n this._dragData = null;\n this._addButtonEnabled = false;\n this._tabMoved = new Signal(this);\n this._currentChanged = new Signal(this);\n this._addRequested = new Signal(this);\n this._tabCloseRequested = new Signal(this);\n this._tabDetachRequested = new Signal(this);\n this._tabActivateRequested = new Signal(this);\n this.addClass('lm-TabBar');\n this.contentNode.setAttribute('role', 'tablist');\n this.setFlag(Widget.Flag.DisallowLayout);\n this._document = options.document || document;\n this.tabsMovable = options.tabsMovable || false;\n this.titlesEditable = options.titlesEditable || false;\n this.allowDeselect = options.allowDeselect || false;\n this.addButtonEnabled = options.addButtonEnabled || false;\n this.insertBehavior = options.insertBehavior || 'select-tab-if-needed';\n this.name = options.name || '';\n this.orientation = options.orientation || 'horizontal';\n this.removeBehavior = options.removeBehavior || 'select-tab-after';\n this.renderer = options.renderer || TabBar.defaultRenderer;\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._releaseMouse();\n this._titles.length = 0;\n this._previousTitle = null;\n super.dispose();\n }\n /**\n * A signal emitted when the current tab is changed.\n *\n * #### Notes\n * This signal is emitted when the currently selected tab is changed\n * either through user or programmatic interaction.\n *\n * Notably, this signal is not emitted when the index of the current\n * tab changes due to tabs being inserted, removed, or moved. It is\n * only emitted when the actual current tab node is changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * A signal emitted when a tab is moved by the user.\n *\n * #### Notes\n * This signal is emitted when a tab is moved by user interaction.\n *\n * This signal is not emitted when a tab is moved programmatically.\n */\n get tabMoved() {\n return this._tabMoved;\n }\n /**\n * A signal emitted when a tab is clicked by the user.\n *\n * #### Notes\n * If the clicked tab is not the current tab, the clicked tab will be\n * made current and the `currentChanged` signal will be emitted first.\n *\n * This signal is emitted even if the clicked tab is the current tab.\n */\n get tabActivateRequested() {\n return this._tabActivateRequested;\n }\n /**\n * A signal emitted when the tab bar add button is clicked.\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * A signal emitted when a tab close icon is clicked.\n *\n * #### Notes\n * This signal is not emitted unless the tab title is `closable`.\n */\n get tabCloseRequested() {\n return this._tabCloseRequested;\n }\n /**\n * A signal emitted when a tab is dragged beyond the detach threshold.\n *\n * #### Notes\n * This signal is emitted when the user drags a tab with the mouse,\n * and mouse is dragged beyond the detach threshold.\n *\n * The consumer of the signal should call `releaseMouse` and remove\n * the tab in order to complete the detach.\n *\n * This signal is only emitted once per drag cycle.\n */\n get tabDetachRequested() {\n return this._tabDetachRequested;\n }\n /**\n * The document to use with the tab bar.\n *\n * The default is the global `document` instance.\n */\n get document() {\n return this._document;\n }\n /**\n * Whether the titles can be user-edited.\n *\n */\n get titlesEditable() {\n return this._titlesEditable;\n }\n /**\n * Set whether titles can be user edited.\n *\n */\n set titlesEditable(value) {\n this._titlesEditable = value;\n }\n /**\n * Get the currently selected title.\n *\n * #### Notes\n * This will be `null` if no tab is selected.\n */\n get currentTitle() {\n return this._titles[this._currentIndex] || null;\n }\n /**\n * Set the currently selected title.\n *\n * #### Notes\n * If the title does not exist, the title will be set to `null`.\n */\n set currentTitle(value) {\n this.currentIndex = value ? this._titles.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently selected tab.\n *\n * #### Notes\n * This will be `-1` if no tab is selected.\n */\n get currentIndex() {\n return this._currentIndex;\n }\n /**\n * Set the index of the currently selected tab.\n *\n * #### Notes\n * If the value is out of range, the index will be set to `-1`.\n */\n set currentIndex(value) {\n // Adjust for an out of range index.\n if (value < 0 || value >= this._titles.length) {\n value = -1;\n }\n // Bail early if the index will not change.\n if (this._currentIndex === value) {\n return;\n }\n // Look up the previous index and title.\n let pi = this._currentIndex;\n let pt = this._titles[pi] || null;\n // Look up the current index and title.\n let ci = value;\n let ct = this._titles[ci] || null;\n // Update the current index and previous title.\n this._currentIndex = ci;\n this._previousTitle = pt;\n // Schedule an update of the tabs.\n this.update();\n // Emit the current changed signal.\n this._currentChanged.emit({\n previousIndex: pi,\n previousTitle: pt,\n currentIndex: ci,\n currentTitle: ct\n });\n }\n /**\n * Get the name of the tab bar.\n */\n get name() {\n return this._name;\n }\n /**\n * Set the name of the tab bar.\n */\n set name(value) {\n this._name = value;\n if (value) {\n this.contentNode.setAttribute('aria-label', value);\n }\n else {\n this.contentNode.removeAttribute('aria-label');\n }\n }\n /**\n * Get the orientation of the tab bar.\n *\n * #### Notes\n * This controls whether the tabs are arranged in a row or column.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the orientation of the tab bar.\n *\n * #### Notes\n * This controls whether the tabs are arranged in a row or column.\n */\n set orientation(value) {\n // Do nothing if the orientation does not change.\n if (this._orientation === value) {\n return;\n }\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Toggle the orientation values.\n this._orientation = value;\n this.dataset['orientation'] = value;\n this.contentNode.setAttribute('aria-orientation', value);\n }\n /**\n * Whether the add button is enabled.\n */\n get addButtonEnabled() {\n return this._addButtonEnabled;\n }\n /**\n * Set whether the add button is enabled.\n */\n set addButtonEnabled(value) {\n // Do nothing if the value does not change.\n if (this._addButtonEnabled === value) {\n return;\n }\n this._addButtonEnabled = value;\n if (value) {\n this.addButtonNode.classList.remove('lm-mod-hidden');\n }\n else {\n this.addButtonNode.classList.add('lm-mod-hidden');\n }\n }\n /**\n * A read-only array of the titles in the tab bar.\n */\n get titles() {\n return this._titles;\n }\n /**\n * The tab bar content node.\n *\n * #### Notes\n * This is the node which holds the tab nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-TabBar-content')[0];\n }\n /**\n * The tab bar add button node.\n *\n * #### Notes\n * This is the node which holds the add button.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get addButtonNode() {\n return this.node.getElementsByClassName('lm-TabBar-addButton')[0];\n }\n /**\n * Add a tab to the end of the tab bar.\n *\n * @param value - The title which holds the data for the tab,\n * or an options object to convert to a title.\n *\n * @returns The title object added to the tab bar.\n *\n * #### Notes\n * If the title is already added to the tab bar, it will be moved.\n */\n addTab(value) {\n return this.insertTab(this._titles.length, value);\n }\n /**\n * Insert a tab into the tab bar at the specified index.\n *\n * @param index - The index at which to insert the tab.\n *\n * @param value - The title which holds the data for the tab,\n * or an options object to convert to a title.\n *\n * @returns The title object added to the tab bar.\n *\n * #### Notes\n * The index will be clamped to the bounds of the tabs.\n *\n * If the title is already added to the tab bar, it will be moved.\n */\n insertTab(index, value) {\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Coerce the value to a title.\n let title = Private$7.asTitle(value);\n // Look up the index of the title.\n let i = this._titles.indexOf(title);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._titles.length));\n // If the title is not in the array, insert it.\n if (i === -1) {\n // Insert the title into the array.\n ArrayExt.insert(this._titles, j, title);\n // Connect to the title changed signal.\n title.changed.connect(this._onTitleChanged, this);\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the insert.\n this._adjustCurrentForInsert(j, title);\n // Return the title added to the tab bar.\n return title;\n }\n // Otherwise, the title exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._titles.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return title;\n }\n // Move the title to the new location.\n ArrayExt.move(this._titles, i, j);\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the move.\n this._adjustCurrentForMove(i, j);\n // Return the title added to the tab bar.\n return title;\n }\n /**\n * Remove a tab from the tab bar.\n *\n * @param title - The title for the tab to remove.\n *\n * #### Notes\n * This is a no-op if the title is not in the tab bar.\n */\n removeTab(title) {\n this.removeTabAt(this._titles.indexOf(title));\n }\n /**\n * Remove the tab at a given index from the tab bar.\n *\n * @param index - The index of the tab to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeTabAt(index) {\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Remove the title from the array.\n let title = ArrayExt.removeAt(this._titles, index);\n // Bail if the index is out of range.\n if (!title) {\n return;\n }\n // Disconnect from the title changed signal.\n title.changed.disconnect(this._onTitleChanged, this);\n // Clear the previous title if it's being removed.\n if (title === this._previousTitle) {\n this._previousTitle = null;\n }\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the remove.\n this._adjustCurrentForRemove(index, title);\n }\n /**\n * Remove all tabs from the tab bar.\n */\n clearTabs() {\n // Bail if there is nothing to remove.\n if (this._titles.length === 0) {\n return;\n }\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Disconnect from the title changed signals.\n for (let title of this._titles) {\n title.changed.disconnect(this._onTitleChanged, this);\n }\n // Get the current index and title.\n let pi = this.currentIndex;\n let pt = this.currentTitle;\n // Reset the current index and previous title.\n this._currentIndex = -1;\n this._previousTitle = null;\n // Clear the title array.\n this._titles.length = 0;\n // Schedule an update of the tabs.\n this.update();\n // If no tab was selected, there's nothing else to do.\n if (pi === -1) {\n return;\n }\n // Emit the current changed signal.\n this._currentChanged.emit({\n previousIndex: pi,\n previousTitle: pt,\n currentIndex: -1,\n currentTitle: null\n });\n }\n /**\n * Release the mouse and restore the non-dragged tab positions.\n *\n * #### Notes\n * This will cause the tab bar to stop handling mouse events and to\n * restore the tabs to their non-dragged positions.\n */\n releaseMouse() {\n this._releaseMouse();\n }\n /**\n * Handle the DOM events for the tab bar.\n *\n * @param event - The DOM event sent to the tab bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the tab bar's DOM node.\n *\n * This should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'dblclick':\n this._evtDblClick(event);\n break;\n case 'keydown':\n event.eventPhase === Event.CAPTURING_PHASE\n ? this._evtKeyDownCapturing(event)\n : this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('pointerdown', this);\n this.node.addEventListener('dblclick', this);\n this.node.addEventListener('keydown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('pointerdown', this);\n this.node.removeEventListener('dblclick', this);\n this.node.removeEventListener('keydown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n var _a;\n let titles = this._titles;\n let renderer = this.renderer;\n let currentTitle = this.currentTitle;\n let content = new Array(titles.length);\n // Keep the tabindex=\"0\" attribute to the tab which handled it before the update.\n // If the add button handles it, no need to do anything. If no element of the tab\n // bar handles it, set it on the current or the first tab to ensure one element\n // handles it after update.\n const tabHandlingTabindex = (_a = this._getCurrentTabindex()) !== null && _a !== void 0 ? _a : (this._currentIndex > -1 ? this._currentIndex : 0);\n for (let i = 0, n = titles.length; i < n; ++i) {\n let title = titles[i];\n let current = title === currentTitle;\n let zIndex = current ? n : n - i - 1;\n let tabIndex = tabHandlingTabindex === i ? 0 : -1;\n content[i] = renderer.renderTab({ title, current, zIndex, tabIndex });\n }\n VirtualDOM.render(content, this.contentNode);\n }\n /**\n * Get the index of the tab which handles tabindex=\"0\".\n * If the add button handles tabindex=\"0\", -1 is returned.\n * If none of the previous handles tabindex=\"0\", null is returned.\n */\n _getCurrentTabindex() {\n let index = null;\n const elemTabindex = this.contentNode.querySelector('li[tabindex=\"0\"]');\n if (elemTabindex) {\n index = [...this.contentNode.children].indexOf(elemTabindex);\n }\n else if (this._addButtonEnabled &&\n this.addButtonNode.getAttribute('tabindex') === '0') {\n index = -1;\n }\n return index;\n }\n /**\n * Handle the `'dblclick'` event for the tab bar.\n */\n _evtDblClick(event) {\n // Do nothing if titles are not editable\n if (!this.titlesEditable) {\n return;\n }\n let tabs = this.contentNode.children;\n // Find the index of the targeted tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the press is not on a tab.\n if (index === -1) {\n return;\n }\n let title = this.titles[index];\n let label = tabs[index].querySelector('.lm-TabBar-tabLabel');\n if (label && label.contains(event.target)) {\n let value = title.label || '';\n // Clear the label element\n let oldValue = label.innerHTML;\n label.innerHTML = '';\n let input = document.createElement('input');\n input.classList.add('lm-TabBar-tabInput');\n input.value = value;\n label.appendChild(input);\n let onblur = () => {\n input.removeEventListener('blur', onblur);\n label.innerHTML = oldValue;\n this.node.addEventListener('keydown', this);\n };\n input.addEventListener('dblclick', (event) => event.stopPropagation());\n input.addEventListener('blur', onblur);\n input.addEventListener('keydown', (event) => {\n if (event.key === 'Enter') {\n if (input.value !== '') {\n title.label = title.caption = input.value;\n }\n onblur();\n }\n else if (event.key === 'Escape') {\n onblur();\n }\n });\n this.node.removeEventListener('keydown', this);\n input.select();\n input.focus();\n if (label.children.length > 0) {\n label.children[0].focus();\n }\n }\n }\n /**\n * Handle the `'keydown'` event for the tab bar at capturing phase.\n */\n _evtKeyDownCapturing(event) {\n if (event.eventPhase !== Event.CAPTURING_PHASE) {\n return;\n }\n // Stop all input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse if `Escape` is pressed.\n if (event.key === 'Escape') {\n this._releaseMouse();\n }\n }\n /**\n * Handle the `'keydown'` event for the tab bar at target phase.\n */\n _evtKeyDown(event) {\n var _a, _b, _c;\n // Allow for navigation using tab key\n if (event.key === 'Tab' || event.eventPhase === Event.CAPTURING_PHASE) {\n return;\n }\n // Check if Enter or Spacebar key has been pressed and open that tab\n if (event.key === 'Enter' ||\n event.key === 'Spacebar' ||\n event.key === ' ') {\n // Get focus element that is in focus by the tab key\n const focusedElement = document.activeElement;\n // Test first if the focus is on the add button node\n if (this.addButtonEnabled &&\n this.addButtonNode.contains(focusedElement)) {\n event.preventDefault();\n event.stopPropagation();\n this._addRequested.emit();\n }\n else {\n const index = ArrayExt.findFirstIndex(this.contentNode.children, tab => tab.contains(focusedElement));\n if (index >= 0) {\n event.preventDefault();\n event.stopPropagation();\n this.currentIndex = index;\n }\n }\n // Handle the arrow keys to switch tabs.\n }\n else if (ARROW_KEYS.includes(event.key)) {\n // Create a list of all focusable elements in the tab bar.\n const focusable = [...this.contentNode.children];\n if (this.addButtonEnabled) {\n focusable.push(this.addButtonNode);\n }\n // If the tab bar contains only one element, nothing to do.\n if (focusable.length <= 1) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n // Get the current focused element.\n let focusedIndex = focusable.indexOf(document.activeElement);\n if (focusedIndex === -1) {\n focusedIndex = this._currentIndex;\n }\n // Find the next element to focus on.\n let nextFocused;\n if ((event.key === 'ArrowRight' && this._orientation === 'horizontal') ||\n (event.key === 'ArrowDown' && this._orientation === 'vertical')) {\n nextFocused = (_a = focusable[focusedIndex + 1]) !== null && _a !== void 0 ? _a : focusable[0];\n }\n else if ((event.key === 'ArrowLeft' && this._orientation === 'horizontal') ||\n (event.key === 'ArrowUp' && this._orientation === 'vertical')) {\n nextFocused =\n (_b = focusable[focusedIndex - 1]) !== null && _b !== void 0 ? _b : focusable[focusable.length - 1];\n }\n else if (event.key === 'Home') {\n nextFocused = focusable[0];\n }\n else if (event.key === 'End') {\n nextFocused = focusable[focusable.length - 1];\n }\n // Change the focused element and the tabindex value.\n if (nextFocused) {\n (_c = focusable[focusedIndex]) === null || _c === void 0 ? void 0 : _c.setAttribute('tabindex', '-1');\n nextFocused === null || nextFocused === void 0 ? void 0 : nextFocused.setAttribute('tabindex', '0');\n nextFocused.focus();\n }\n }\n }\n /**\n * Handle the `'pointerdown'` event for the tab bar.\n */\n _evtPointerDown(event) {\n // Do nothing if it's not a left or middle mouse press.\n if (event.button !== 0 && event.button !== 1) {\n return;\n }\n // Do nothing if a drag is in progress.\n if (this._dragData) {\n return;\n }\n // Do nothing if a title editable input was clicked.\n if (event.target.classList.contains('lm-TabBar-tabInput')) {\n return;\n }\n // Check if the add button was clicked.\n let addButtonClicked = this.addButtonEnabled &&\n this.addButtonNode.contains(event.target);\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Find the index of the pressed tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the press is not on a tab or the add button.\n if (index === -1 && !addButtonClicked) {\n return;\n }\n // Pressing on a tab stops the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Initialize the non-measured parts of the drag data.\n this._dragData = {\n tab: tabs[index],\n index: index,\n pressX: event.clientX,\n pressY: event.clientY,\n tabPos: -1,\n tabSize: -1,\n tabPressPos: -1,\n targetIndex: -1,\n tabLayout: null,\n contentRect: null,\n override: null,\n dragActive: false,\n dragAborted: false,\n detachRequested: false\n };\n // Add the document pointer up listener.\n this.document.addEventListener('pointerup', this, true);\n // Do nothing else if the middle button or add button is clicked.\n if (event.button === 1 || addButtonClicked) {\n return;\n }\n // Do nothing else if the close icon is clicked.\n let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n if (icon && icon.contains(event.target)) {\n return;\n }\n // Add the extra listeners if the tabs are movable.\n if (this.tabsMovable) {\n this.document.addEventListener('pointermove', this, true);\n this.document.addEventListener('keydown', this, true);\n this.document.addEventListener('contextmenu', this, true);\n }\n // Update the current index as appropriate.\n if (this.allowDeselect && this.currentIndex === index) {\n this.currentIndex = -1;\n }\n else {\n this.currentIndex = index;\n }\n // Do nothing else if there is no current tab.\n if (this.currentIndex === -1) {\n return;\n }\n // Emit the tab activate request signal.\n this._tabActivateRequested.emit({\n index: this.currentIndex,\n title: this.currentTitle\n });\n }\n /**\n * Handle the `'pointermove'` event for the tab bar.\n */\n _evtPointerMove(event) {\n // Do nothing if no drag is in progress.\n let data = this._dragData;\n if (!data) {\n return;\n }\n // Suppress the event during a drag.\n event.preventDefault();\n event.stopPropagation();\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Bail early if the drag threshold has not been met.\n if (!data.dragActive && !Private$7.dragExceeded(data, event)) {\n return;\n }\n // Activate the drag if necessary.\n if (!data.dragActive) {\n // Fill in the rest of the drag data measurements.\n let tabRect = data.tab.getBoundingClientRect();\n if (this._orientation === 'horizontal') {\n data.tabPos = data.tab.offsetLeft;\n data.tabSize = tabRect.width;\n data.tabPressPos = data.pressX - tabRect.left;\n }\n else {\n data.tabPos = data.tab.offsetTop;\n data.tabSize = tabRect.height;\n data.tabPressPos = data.pressY - tabRect.top;\n }\n data.tabPressOffset = {\n x: data.pressX - tabRect.left,\n y: data.pressY - tabRect.top\n };\n data.tabLayout = Private$7.snapTabLayout(tabs, this._orientation);\n data.contentRect = this.contentNode.getBoundingClientRect();\n data.override = Drag.overrideCursor('default');\n // Add the dragging style classes.\n data.tab.classList.add('lm-mod-dragging');\n this.addClass('lm-mod-dragging');\n // Mark the drag as active.\n data.dragActive = true;\n }\n // Emit the detach requested signal if the threshold is exceeded.\n if (!data.detachRequested && Private$7.detachExceeded(data, event)) {\n // Only emit the signal once per drag cycle.\n data.detachRequested = true;\n // Setup the arguments for the signal.\n let index = data.index;\n let clientX = event.clientX;\n let clientY = event.clientY;\n let tab = tabs[index];\n let title = this._titles[index];\n // Emit the tab detach requested signal.\n this._tabDetachRequested.emit({\n index,\n title,\n tab,\n clientX,\n clientY,\n offset: data.tabPressOffset\n });\n // Bail if the signal handler aborted the drag.\n if (data.dragAborted) {\n return;\n }\n }\n // Update the positions of the tabs.\n Private$7.layoutTabs(tabs, data, event, this._orientation);\n }\n /**\n * Handle the `'pointerup'` event for the document.\n */\n _evtPointerUp(event) {\n // Do nothing if it's not a left or middle mouse release.\n if (event.button !== 0 && event.button !== 1) {\n return;\n }\n // Do nothing if no drag is in progress.\n const data = this._dragData;\n if (!data) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Remove the extra mouse event listeners.\n this.document.removeEventListener('pointermove', this, true);\n this.document.removeEventListener('pointerup', this, true);\n this.document.removeEventListener('keydown', this, true);\n this.document.removeEventListener('contextmenu', this, true);\n // Handle a release when the drag is not active.\n if (!data.dragActive) {\n // Clear the drag data.\n this._dragData = null;\n // Handle clicking the add button.\n let addButtonClicked = this.addButtonEnabled &&\n this.addButtonNode.contains(event.target);\n if (addButtonClicked) {\n this._addRequested.emit(undefined);\n return;\n }\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Find the index of the released tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the release is not on the original pressed tab.\n if (index !== data.index) {\n return;\n }\n // Ignore the release if the title is not closable.\n let title = this._titles[index];\n if (!title.closable) {\n return;\n }\n // Emit the close requested signal if the middle button is released.\n if (event.button === 1) {\n this._tabCloseRequested.emit({ index, title });\n return;\n }\n // Emit the close requested signal if the close icon was released.\n let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n if (icon && icon.contains(event.target)) {\n this._tabCloseRequested.emit({ index, title });\n return;\n }\n // Otherwise, there is nothing left to do.\n return;\n }\n // Do nothing if the left button is not released.\n if (event.button !== 0) {\n return;\n }\n // Position the tab at its final resting position.\n Private$7.finalizeTabPosition(data, this._orientation);\n // Remove the dragging class from the tab so it can be transitioned.\n data.tab.classList.remove('lm-mod-dragging');\n // Parse the transition duration for releasing the tab.\n let duration = Private$7.parseTransitionDuration(data.tab);\n // Complete the release on a timer to allow the tab to transition.\n setTimeout(() => {\n // Do nothing if the drag has been aborted.\n if (data.dragAborted) {\n return;\n }\n // Clear the drag data reference.\n this._dragData = null;\n // Reset the positions of the tabs.\n Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n // Clear the cursor grab.\n data.override.dispose();\n // Remove the remaining dragging style.\n this.removeClass('lm-mod-dragging');\n // If the tab was not moved, there is nothing else to do.\n let i = data.index;\n let j = data.targetIndex;\n if (j === -1 || i === j) {\n return;\n }\n // Move the title to the new locations.\n ArrayExt.move(this._titles, i, j);\n // Adjust the current index for the move.\n this._adjustCurrentForMove(i, j);\n // Emit the tab moved signal.\n this._tabMoved.emit({\n fromIndex: i,\n toIndex: j,\n title: this._titles[j]\n });\n // Update the tabs immediately to prevent flicker.\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n }, duration);\n }\n /**\n * Release the mouse and restore the non-dragged tab positions.\n */\n _releaseMouse() {\n // Do nothing if no drag is in progress.\n let data = this._dragData;\n if (!data) {\n return;\n }\n // Clear the drag data reference.\n this._dragData = null;\n // Remove the extra document event listeners.\n this.document.removeEventListener('pointermove', this, true);\n this.document.removeEventListener('pointerup', this, true);\n this.document.removeEventListener('keydown', this, true);\n this.document.removeEventListener('contextmenu', this, true);\n // Indicate the drag has been aborted. This allows the mouse\n // event handlers to return early when the drag is canceled.\n data.dragAborted = true;\n // If the drag is not active, there's nothing more to do.\n if (!data.dragActive) {\n return;\n }\n // Reset the tabs to their non-dragged positions.\n Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n // Clear the cursor override.\n data.override.dispose();\n // Clear the dragging style classes.\n data.tab.classList.remove('lm-mod-dragging');\n this.removeClass('lm-mod-dragging');\n }\n /**\n * Adjust the current index for a tab insert operation.\n *\n * This method accounts for the tab bar's insertion behavior when\n * adjusting the current index and emitting the changed signal.\n */\n _adjustCurrentForInsert(i, title) {\n // Lookup commonly used variables.\n let ct = this.currentTitle;\n let ci = this._currentIndex;\n let bh = this.insertBehavior;\n // TODO: do we need to do an update to update the aria-selected attribute?\n // Handle the behavior where the new tab is always selected,\n // or the behavior where the new tab is selected if needed.\n if (bh === 'select-tab' || (bh === 'select-tab-if-needed' && ci === -1)) {\n this._currentIndex = i;\n this._previousTitle = ct;\n this._currentChanged.emit({\n previousIndex: ci,\n previousTitle: ct,\n currentIndex: i,\n currentTitle: title\n });\n return;\n }\n // Otherwise, silently adjust the current index if needed.\n if (ci >= i) {\n this._currentIndex++;\n }\n }\n /**\n * Adjust the current index for a tab move operation.\n *\n * This method will not cause the actual current tab to change.\n * It silently adjusts the index to account for the given move.\n */\n _adjustCurrentForMove(i, j) {\n if (this._currentIndex === i) {\n this._currentIndex = j;\n }\n else if (this._currentIndex < i && this._currentIndex >= j) {\n this._currentIndex++;\n }\n else if (this._currentIndex > i && this._currentIndex <= j) {\n this._currentIndex--;\n }\n }\n /**\n * Adjust the current index for a tab remove operation.\n *\n * This method accounts for the tab bar's remove behavior when\n * adjusting the current index and emitting the changed signal.\n */\n _adjustCurrentForRemove(i, title) {\n // Lookup commonly used variables.\n let ci = this._currentIndex;\n let bh = this.removeBehavior;\n // Silently adjust the index if the current tab is not removed.\n if (ci !== i) {\n if (ci > i) {\n this._currentIndex--;\n }\n return;\n }\n // TODO: do we need to do an update to adjust the aria-selected value?\n // No tab gets selected if the tab bar is empty.\n if (this._titles.length === 0) {\n this._currentIndex = -1;\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: -1,\n currentTitle: null\n });\n return;\n }\n // Handle behavior where the next sibling tab is selected.\n if (bh === 'select-tab-after') {\n this._currentIndex = Math.min(i, this._titles.length - 1);\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Handle behavior where the previous sibling tab is selected.\n if (bh === 'select-tab-before') {\n this._currentIndex = Math.max(0, i - 1);\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Handle behavior where the previous history tab is selected.\n if (bh === 'select-previous-tab') {\n if (this._previousTitle) {\n this._currentIndex = this._titles.indexOf(this._previousTitle);\n this._previousTitle = null;\n }\n else {\n this._currentIndex = Math.min(i, this._titles.length - 1);\n }\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Otherwise, no tab gets selected.\n this._currentIndex = -1;\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: -1,\n currentTitle: null\n });\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged(sender) {\n this.update();\n }\n}\n/**\n * The namespace for the `TabBar` class statics.\n */\n(function (TabBar) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n constructor() {\n /**\n * A selector which matches the close icon node in a tab.\n */\n this.closeIconSelector = '.lm-TabBar-tabCloseIcon';\n this._tabID = 0;\n this._tabKeys = new WeakMap();\n this._uuid = ++Renderer._nInstance;\n }\n /**\n * Render the virtual element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab.\n */\n renderTab(data) {\n let title = data.title.caption;\n let key = this.createTabKey(data);\n let id = key;\n let style = this.createTabStyle(data);\n let className = this.createTabClass(data);\n let dataset = this.createTabDataset(data);\n let aria = this.createTabARIA(data);\n if (data.title.closable) {\n return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data), this.renderCloseIcon(data));\n }\n else {\n return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data));\n }\n }\n /**\n * Render the icon element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab icon.\n */\n renderIcon(data) {\n const { title } = data;\n let className = this.createIconClass(data);\n // If title.icon is undefined, it will be ignored.\n return h.div({ className }, title.icon, title.iconLabel);\n }\n /**\n * Render the label element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab label.\n */\n renderLabel(data) {\n return h.div({ className: 'lm-TabBar-tabLabel' }, data.title.label);\n }\n /**\n * Render the close icon element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab close icon.\n */\n renderCloseIcon(data) {\n return h.div({ className: 'lm-TabBar-tabCloseIcon' });\n }\n /**\n * Create a unique render key for the tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The unique render key for the tab.\n *\n * #### Notes\n * This method caches the key against the tab title the first time\n * the key is generated. This enables efficient rendering of moved\n * tabs and avoids subtle hover style artifacts.\n */\n createTabKey(data) {\n let key = this._tabKeys.get(data.title);\n if (key === undefined) {\n key = `tab-key-${this._uuid}-${this._tabID++}`;\n this._tabKeys.set(data.title, key);\n }\n return key;\n }\n /**\n * Create the inline style object for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The inline style data for the tab.\n */\n createTabStyle(data) {\n return { zIndex: `${data.zIndex}` };\n }\n /**\n * Create the class name for the tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The full class name for the tab.\n */\n createTabClass(data) {\n let name = 'lm-TabBar-tab';\n if (data.title.className) {\n name += ` ${data.title.className}`;\n }\n if (data.title.closable) {\n name += ' lm-mod-closable';\n }\n if (data.current) {\n name += ' lm-mod-current';\n }\n return name;\n }\n /**\n * Create the dataset for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The dataset for the tab.\n */\n createTabDataset(data) {\n return data.title.dataset;\n }\n /**\n * Create the ARIA attributes for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The ARIA attributes for the tab.\n */\n createTabARIA(data) {\n var _a;\n return {\n role: 'tab',\n 'aria-selected': data.current.toString(),\n tabindex: `${(_a = data.tabIndex) !== null && _a !== void 0 ? _a : '-1'}`\n };\n }\n /**\n * Create the class name for the tab icon.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The full class name for the tab icon.\n */\n createIconClass(data) {\n let name = 'lm-TabBar-tabIcon';\n let extra = data.title.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n }\n Renderer._nInstance = 0;\n TabBar.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n TabBar.defaultRenderer = new Renderer();\n /**\n * A selector which matches the add button node in the tab bar.\n */\n TabBar.addButtonSelector = '.lm-TabBar-addButton';\n})(TabBar || (TabBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$7;\n(function (Private) {\n /**\n * The start drag distance threshold.\n */\n Private.DRAG_THRESHOLD = 5;\n /**\n * The detach distance threshold.\n */\n Private.DETACH_THRESHOLD = 20;\n /**\n * Create the DOM node for a tab bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.setAttribute('role', 'tablist');\n content.className = 'lm-TabBar-content';\n node.appendChild(content);\n let add = document.createElement('div');\n add.className = 'lm-TabBar-addButton lm-mod-hidden';\n add.setAttribute('tabindex', '-1');\n add.setAttribute('role', 'button');\n node.appendChild(add);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Coerce a title or options into a real title.\n */\n function asTitle(value) {\n return value instanceof Title ? value : new Title(value);\n }\n Private.asTitle = asTitle;\n /**\n * Parse the transition duration for a tab node.\n */\n function parseTransitionDuration(tab) {\n let style = window.getComputedStyle(tab);\n return 1000 * (parseFloat(style.transitionDuration) || 0);\n }\n Private.parseTransitionDuration = parseTransitionDuration;\n /**\n * Get a snapshot of the current tab layout values.\n */\n function snapTabLayout(tabs, orientation) {\n let layout = new Array(tabs.length);\n for (let i = 0, n = tabs.length; i < n; ++i) {\n let node = tabs[i];\n let style = window.getComputedStyle(node);\n if (orientation === 'horizontal') {\n layout[i] = {\n pos: node.offsetLeft,\n size: node.offsetWidth,\n margin: parseFloat(style.marginLeft) || 0\n };\n }\n else {\n layout[i] = {\n pos: node.offsetTop,\n size: node.offsetHeight,\n margin: parseFloat(style.marginTop) || 0\n };\n }\n }\n return layout;\n }\n Private.snapTabLayout = snapTabLayout;\n /**\n * Test if the event exceeds the drag threshold.\n */\n function dragExceeded(data, event) {\n let dx = Math.abs(event.clientX - data.pressX);\n let dy = Math.abs(event.clientY - data.pressY);\n return dx >= Private.DRAG_THRESHOLD || dy >= Private.DRAG_THRESHOLD;\n }\n Private.dragExceeded = dragExceeded;\n /**\n * Test if the event exceeds the drag detach threshold.\n */\n function detachExceeded(data, event) {\n let rect = data.contentRect;\n return (event.clientX < rect.left - Private.DETACH_THRESHOLD ||\n event.clientX >= rect.right + Private.DETACH_THRESHOLD ||\n event.clientY < rect.top - Private.DETACH_THRESHOLD ||\n event.clientY >= rect.bottom + Private.DETACH_THRESHOLD);\n }\n Private.detachExceeded = detachExceeded;\n /**\n * Update the relative tab positions and computed target index.\n */\n function layoutTabs(tabs, data, event, orientation) {\n // Compute the orientation-sensitive values.\n let pressPos;\n let localPos;\n let clientPos;\n let clientSize;\n if (orientation === 'horizontal') {\n pressPos = data.pressX;\n localPos = event.clientX - data.contentRect.left;\n clientPos = event.clientX;\n clientSize = data.contentRect.width;\n }\n else {\n pressPos = data.pressY;\n localPos = event.clientY - data.contentRect.top;\n clientPos = event.clientY;\n clientSize = data.contentRect.height;\n }\n // Compute the target data.\n let targetIndex = data.index;\n let targetPos = localPos - data.tabPressPos;\n let targetEnd = targetPos + data.tabSize;\n // Update the relative tab positions.\n for (let i = 0, n = tabs.length; i < n; ++i) {\n let pxPos;\n let layout = data.tabLayout[i];\n let threshold = layout.pos + (layout.size >> 1);\n if (i < data.index && targetPos < threshold) {\n pxPos = `${data.tabSize + data.tabLayout[i + 1].margin}px`;\n targetIndex = Math.min(targetIndex, i);\n }\n else if (i > data.index && targetEnd > threshold) {\n pxPos = `${-data.tabSize - layout.margin}px`;\n targetIndex = Math.max(targetIndex, i);\n }\n else if (i === data.index) {\n let ideal = clientPos - pressPos;\n let limit = clientSize - (data.tabPos + data.tabSize);\n pxPos = `${Math.max(-data.tabPos, Math.min(ideal, limit))}px`;\n }\n else {\n pxPos = '';\n }\n if (orientation === 'horizontal') {\n tabs[i].style.left = pxPos;\n }\n else {\n tabs[i].style.top = pxPos;\n }\n }\n // Update the computed target index.\n data.targetIndex = targetIndex;\n }\n Private.layoutTabs = layoutTabs;\n /**\n * Position the drag tab at its final resting relative position.\n */\n function finalizeTabPosition(data, orientation) {\n // Compute the orientation-sensitive client size.\n let clientSize;\n if (orientation === 'horizontal') {\n clientSize = data.contentRect.width;\n }\n else {\n clientSize = data.contentRect.height;\n }\n // Compute the ideal final tab position.\n let ideal;\n if (data.targetIndex === data.index) {\n ideal = 0;\n }\n else if (data.targetIndex > data.index) {\n let tgt = data.tabLayout[data.targetIndex];\n ideal = tgt.pos + tgt.size - data.tabSize - data.tabPos;\n }\n else {\n let tgt = data.tabLayout[data.targetIndex];\n ideal = tgt.pos - data.tabPos;\n }\n // Compute the tab position limit.\n let limit = clientSize - (data.tabPos + data.tabSize);\n let final = Math.max(-data.tabPos, Math.min(ideal, limit));\n // Set the final orientation-sensitive position.\n if (orientation === 'horizontal') {\n data.tab.style.left = `${final}px`;\n }\n else {\n data.tab.style.top = `${final}px`;\n }\n }\n Private.finalizeTabPosition = finalizeTabPosition;\n /**\n * Reset the relative positions of the given tabs.\n */\n function resetTabPositions(tabs, orientation) {\n for (const tab of tabs) {\n if (orientation === 'horizontal') {\n tab.style.left = '';\n }\n else {\n tab.style.top = '';\n }\n }\n }\n Private.resetTabPositions = resetTabPositions;\n})(Private$7 || (Private$7 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which provides a flexible docking arrangement.\n *\n * #### Notes\n * The consumer of this layout is responsible for handling all signals\n * from the generated tab bars and managing the visibility of widgets\n * and tab bars as needed.\n */\nclass DockLayout extends Layout {\n /**\n * Construct a new dock layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options) {\n super();\n this._spacing = 4;\n this._dirty = false;\n this._root = null;\n this._box = null;\n this._items = new Map();\n this.renderer = options.renderer;\n if (options.spacing !== undefined) {\n this._spacing = Utils$1.clampDimension(options.spacing);\n }\n this._document = options.document || document;\n this._hiddenMode =\n options.hiddenMode !== undefined\n ? options.hiddenMode\n : Widget.HiddenMode.Display;\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This will clear and dispose all widgets in the layout.\n */\n dispose() {\n // Get an iterator over the widgets in the layout.\n let widgets = this[Symbol.iterator]();\n // Dispose of the layout items.\n this._items.forEach(item => {\n item.dispose();\n });\n // Clear the layout state before disposing the widgets.\n this._box = null;\n this._root = null;\n this._items.clear();\n // Dispose of the widgets contained in the old layout root.\n for (const widget of widgets) {\n widget.dispose();\n }\n // Dispose of the base class.\n super.dispose();\n }\n /**\n * The method for hiding child widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n set hiddenMode(v) {\n if (this._hiddenMode === v) {\n return;\n }\n this._hiddenMode = v;\n for (const bar of this.tabBars()) {\n if (bar.titles.length > 1) {\n for (const title of bar.titles) {\n title.owner.hiddenMode = this._hiddenMode;\n }\n }\n }\n }\n /**\n * Get the inter-element spacing for the dock layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the dock layout.\n */\n set spacing(value) {\n value = Utils$1.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * Whether the dock layout is empty.\n */\n get isEmpty() {\n return this._root === null;\n }\n /**\n * Create an iterator over all widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n *\n * #### Notes\n * This iterator includes the generated tab bars.\n */\n [Symbol.iterator]() {\n return this._root ? this._root.iterAllWidgets() : empty();\n }\n /**\n * Create an iterator over the user widgets in the layout.\n *\n * @returns A new iterator over the user widgets in the layout.\n *\n * #### Notes\n * This iterator does not include the generated tab bars.\n */\n widgets() {\n return this._root ? this._root.iterUserWidgets() : empty();\n }\n /**\n * Create an iterator over the selected widgets in the layout.\n *\n * @returns A new iterator over the selected user widgets.\n *\n * #### Notes\n * This iterator yields the widgets corresponding to the current tab\n * of each tab bar in the layout.\n */\n selectedWidgets() {\n return this._root ? this._root.iterSelectedWidgets() : empty();\n }\n /**\n * Create an iterator over the tab bars in the layout.\n *\n * @returns A new iterator over the tab bars in the layout.\n *\n * #### Notes\n * This iterator does not include the user widgets.\n */\n tabBars() {\n return this._root ? this._root.iterTabBars() : empty();\n }\n /**\n * Create an iterator over the handles in the layout.\n *\n * @returns A new iterator over the handles in the layout.\n */\n handles() {\n return this._root ? this._root.iterHandles() : empty();\n }\n /**\n * Move a handle to the given offset position.\n *\n * @param handle - The handle to move.\n *\n * @param offsetX - The desired offset X position of the handle.\n *\n * @param offsetY - The desired offset Y position of the handle.\n *\n * #### Notes\n * If the given handle is not contained in the layout, this is no-op.\n *\n * The handle will be moved as close as possible to the desired\n * position without violating any of the layout constraints.\n *\n * Only one of the coordinates is used depending on the orientation\n * of the handle. This method accepts both coordinates to make it\n * easy to invoke from a mouse move event without needing to know\n * the handle orientation.\n */\n moveHandle(handle, offsetX, offsetY) {\n // Bail early if there is no root or if the handle is hidden.\n let hidden = handle.classList.contains('lm-mod-hidden');\n if (!this._root || hidden) {\n return;\n }\n // Lookup the split node for the handle.\n let data = this._root.findSplitNode(handle);\n if (!data) {\n return;\n }\n // Compute the desired delta movement for the handle.\n let delta;\n if (data.node.orientation === 'horizontal') {\n delta = offsetX - handle.offsetLeft;\n }\n else {\n delta = offsetY - handle.offsetTop;\n }\n // Bail if there is no handle movement.\n if (delta === 0) {\n return;\n }\n // Prevent sibling resizing unless needed.\n data.node.holdSizes();\n // Adjust the sizers to reflect the handle movement.\n BoxEngine.adjust(data.node.sizers, data.index, delta);\n // Update the layout of the widgets.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Save the current configuration of the dock layout.\n *\n * @returns A new config object for the current layout state.\n *\n * #### Notes\n * The return value can be provided to the `restoreLayout` method\n * in order to restore the layout to its current configuration.\n */\n saveLayout() {\n // Bail early if there is no root.\n if (!this._root) {\n return { main: null };\n }\n // Hold the current sizes in the layout tree.\n this._root.holdAllSizes();\n // Return the layout config.\n return { main: this._root.createConfig() };\n }\n /**\n * Restore the layout to a previously saved configuration.\n *\n * @param config - The layout configuration to restore.\n *\n * #### Notes\n * Widgets which currently belong to the layout but which are not\n * contained in the config will be unparented.\n */\n restoreLayout(config) {\n // Create the widget set for validating the config.\n let widgetSet = new Set();\n // Normalize the main area config and collect the widgets.\n let mainConfig;\n if (config.main) {\n mainConfig = Private$6.normalizeAreaConfig(config.main, widgetSet);\n }\n else {\n mainConfig = null;\n }\n // Create iterators over the old content.\n let oldWidgets = this.widgets();\n let oldTabBars = this.tabBars();\n let oldHandles = this.handles();\n // Clear the root before removing the old content.\n this._root = null;\n // Unparent the old widgets which are not in the new config.\n for (const widget of oldWidgets) {\n if (!widgetSet.has(widget)) {\n widget.parent = null;\n }\n }\n // Dispose of the old tab bars.\n for (const tabBar of oldTabBars) {\n tabBar.dispose();\n }\n // Remove the old handles.\n for (const handle of oldHandles) {\n if (handle.parentNode) {\n handle.parentNode.removeChild(handle);\n }\n }\n // Reparent the new widgets to the current parent.\n for (const widget of widgetSet) {\n widget.parent = this.parent;\n }\n // Create the root node for the new config.\n if (mainConfig) {\n this._root = Private$6.realizeAreaConfig(mainConfig, {\n // Ignoring optional `document` argument as we must reuse `this._document`\n createTabBar: (document) => this._createTabBar(),\n createHandle: () => this._createHandle()\n }, this._document);\n }\n else {\n this._root = null;\n }\n // If there is no parent, there is nothing more to do.\n if (!this.parent) {\n return;\n }\n // Attach the new widgets to the parent.\n widgetSet.forEach(widget => {\n this.attachWidget(widget);\n });\n // Post a fit request to the parent.\n this.parent.fit();\n }\n /**\n * Add a widget to the dock layout.\n *\n * @param widget - The widget to add to the dock layout.\n *\n * @param options - The additional options for adding the widget.\n *\n * #### Notes\n * The widget will be moved if it is already contained in the layout.\n *\n * An error will be thrown if the reference widget is invalid.\n */\n addWidget(widget, options = {}) {\n // Parse the options.\n let ref = options.ref || null;\n let mode = options.mode || 'tab-after';\n // Find the tab node which holds the reference widget.\n let refNode = null;\n if (this._root && ref) {\n refNode = this._root.findTabNode(ref);\n }\n // Throw an error if the reference widget is invalid.\n if (ref && !refNode) {\n throw new Error('Reference widget is not in the layout.');\n }\n // Reparent the widget to the current layout parent.\n widget.parent = this.parent;\n // Insert the widget according to the insert mode.\n switch (mode) {\n case 'tab-after':\n this._insertTab(widget, ref, refNode, true);\n break;\n case 'tab-before':\n this._insertTab(widget, ref, refNode, false);\n break;\n case 'split-top':\n this._insertSplit(widget, ref, refNode, 'vertical', false);\n break;\n case 'split-left':\n this._insertSplit(widget, ref, refNode, 'horizontal', false);\n break;\n case 'split-right':\n this._insertSplit(widget, ref, refNode, 'horizontal', true);\n break;\n case 'split-bottom':\n this._insertSplit(widget, ref, refNode, 'vertical', true);\n break;\n case 'merge-top':\n this._insertSplit(widget, ref, refNode, 'vertical', false, true);\n break;\n case 'merge-left':\n this._insertSplit(widget, ref, refNode, 'horizontal', false, true);\n break;\n case 'merge-right':\n this._insertSplit(widget, ref, refNode, 'horizontal', true, true);\n break;\n case 'merge-bottom':\n this._insertSplit(widget, ref, refNode, 'vertical', true, true);\n break;\n }\n // Do nothing else if there is no parent widget.\n if (!this.parent) {\n return;\n }\n // Ensure the widget is attached to the parent widget.\n this.attachWidget(widget);\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Remove the widget from its current layout location.\n this._removeWidget(widget);\n // Do nothing else if there is no parent widget.\n if (!this.parent) {\n return;\n }\n // Detach the widget from the parent widget.\n this.detachWidget(widget);\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Find the tab area which contains the given client position.\n *\n * @param clientX - The client X position of interest.\n *\n * @param clientY - The client Y position of interest.\n *\n * @returns The geometry of the tab area at the given position, or\n * `null` if there is no tab area at the given position.\n */\n hitTestTabAreas(clientX, clientY) {\n // Bail early if hit testing cannot produce valid results.\n if (!this._root || !this.parent || !this.parent.isVisible) {\n return null;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Convert from client to local coordinates.\n let rect = this.parent.node.getBoundingClientRect();\n let x = clientX - rect.left - this._box.borderLeft;\n let y = clientY - rect.top - this._box.borderTop;\n // Find the tab layout node at the local position.\n let tabNode = this._root.hitTestTabNodes(x, y);\n // Bail if a tab layout node was not found.\n if (!tabNode) {\n return null;\n }\n // Extract the data from the tab node.\n let { tabBar, top, left, width, height } = tabNode;\n // Compute the right and bottom edges of the tab area.\n let borderWidth = this._box.borderLeft + this._box.borderRight;\n let borderHeight = this._box.borderTop + this._box.borderBottom;\n let right = rect.width - borderWidth - (left + width);\n let bottom = rect.height - borderHeight - (top + height);\n // Return the hit test results.\n return { tabBar, x, y, top, left, right, bottom, width, height };\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n // Perform superclass initialization.\n super.init();\n // Attach each widget to the parent.\n for (const widget of this) {\n this.attachWidget(widget);\n }\n // Attach each handle to the parent.\n for (const handle of this.handles()) {\n this.parent.node.appendChild(handle);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Attach the widget to the layout parent widget.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a no-op if the widget is already attached.\n */\n attachWidget(widget) {\n // Do nothing if the widget is already attached.\n if (this.parent.node === widget.node.parentNode) {\n return;\n }\n // Create the layout item for the widget.\n this._items.set(widget, new LayoutItem(widget));\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach the widget from the layout parent widget.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a no-op if the widget is not attached.\n */\n detachWidget(widget) {\n // Do nothing if the widget is not attached.\n if (this.parent.node !== widget.node.parentNode) {\n return;\n }\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Delete the layout item for the widget.\n let item = this._items.get(widget);\n if (item) {\n this._items.delete(widget);\n item.dispose();\n }\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Remove the specified widget from the layout structure.\n *\n * #### Notes\n * This is a no-op if the widget is not in the layout tree.\n *\n * This does not detach the widget from the parent node.\n */\n _removeWidget(widget) {\n // Bail early if there is no layout root.\n if (!this._root) {\n return;\n }\n // Find the tab node which contains the given widget.\n let tabNode = this._root.findTabNode(widget);\n // Bail early if the tab node is not found.\n if (!tabNode) {\n return;\n }\n Private$6.removeAria(widget);\n // If there are multiple tabs, just remove the widget's tab.\n if (tabNode.tabBar.titles.length > 1) {\n tabNode.tabBar.removeTab(widget.title);\n if (this._hiddenMode === Widget.HiddenMode.Scale &&\n tabNode.tabBar.titles.length == 1) {\n const existingWidget = tabNode.tabBar.titles[0].owner;\n existingWidget.hiddenMode = Widget.HiddenMode.Display;\n }\n return;\n }\n // Otherwise, the tab node needs to be removed...\n // Dispose the tab bar.\n tabNode.tabBar.dispose();\n // Handle the case where the tab node is the root.\n if (this._root === tabNode) {\n this._root = null;\n return;\n }\n // Otherwise, remove the tab node from its parent...\n // Prevent widget resizing unless needed.\n this._root.holdAllSizes();\n // Clear the parent reference on the tab node.\n let splitNode = tabNode.parent;\n tabNode.parent = null;\n // Remove the tab node from its parent split node.\n let i = ArrayExt.removeFirstOf(splitNode.children, tabNode);\n let handle = ArrayExt.removeAt(splitNode.handles, i);\n ArrayExt.removeAt(splitNode.sizers, i);\n // Remove the handle from its parent DOM node.\n if (handle.parentNode) {\n handle.parentNode.removeChild(handle);\n }\n // If there are multiple children, just update the handles.\n if (splitNode.children.length > 1) {\n splitNode.syncHandles();\n return;\n }\n // Otherwise, the split node also needs to be removed...\n // Clear the parent reference on the split node.\n let maybeParent = splitNode.parent;\n splitNode.parent = null;\n // Lookup the remaining child node and handle.\n let childNode = splitNode.children[0];\n let childHandle = splitNode.handles[0];\n // Clear the split node data.\n splitNode.children.length = 0;\n splitNode.handles.length = 0;\n splitNode.sizers.length = 0;\n // Remove the child handle from its parent node.\n if (childHandle.parentNode) {\n childHandle.parentNode.removeChild(childHandle);\n }\n // Handle the case where the split node is the root.\n if (this._root === splitNode) {\n childNode.parent = null;\n this._root = childNode;\n return;\n }\n // Otherwise, move the child node to the parent node...\n let parentNode = maybeParent;\n // Lookup the index of the split node.\n let j = parentNode.children.indexOf(splitNode);\n // Handle the case where the child node is a tab node.\n if (childNode instanceof Private$6.TabLayoutNode) {\n childNode.parent = parentNode;\n parentNode.children[j] = childNode;\n return;\n }\n // Remove the split data from the parent.\n let splitHandle = ArrayExt.removeAt(parentNode.handles, j);\n ArrayExt.removeAt(parentNode.children, j);\n ArrayExt.removeAt(parentNode.sizers, j);\n // Remove the handle from its parent node.\n if (splitHandle.parentNode) {\n splitHandle.parentNode.removeChild(splitHandle);\n }\n // The child node and the split parent node will have the same\n // orientation. Merge the grand-children with the parent node.\n for (let i = 0, n = childNode.children.length; i < n; ++i) {\n let gChild = childNode.children[i];\n let gHandle = childNode.handles[i];\n let gSizer = childNode.sizers[i];\n ArrayExt.insert(parentNode.children, j + i, gChild);\n ArrayExt.insert(parentNode.handles, j + i, gHandle);\n ArrayExt.insert(parentNode.sizers, j + i, gSizer);\n gChild.parent = parentNode;\n }\n // Clear the child node.\n childNode.children.length = 0;\n childNode.handles.length = 0;\n childNode.sizers.length = 0;\n childNode.parent = null;\n // Sync the handles on the parent node.\n parentNode.syncHandles();\n }\n /**\n * Create the tab layout node to hold the widget.\n */\n _createTabNode(widget) {\n let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n tabNode.tabBar.addTab(widget.title);\n Private$6.addAria(widget, tabNode.tabBar);\n return tabNode;\n }\n /**\n * Insert a widget next to an existing tab.\n *\n * #### Notes\n * This does not attach the widget to the parent widget.\n */\n _insertTab(widget, ref, refNode, after) {\n // Do nothing if the tab is inserted next to itself.\n if (widget === ref) {\n return;\n }\n // Create the root if it does not exist.\n if (!this._root) {\n let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n tabNode.tabBar.addTab(widget.title);\n this._root = tabNode;\n Private$6.addAria(widget, tabNode.tabBar);\n return;\n }\n // Use the first tab node as the ref node if needed.\n if (!refNode) {\n refNode = this._root.findFirstTabNode();\n }\n // If the widget is not contained in the ref node, ensure it is\n // removed from the layout and hidden before being added again.\n if (refNode.tabBar.titles.indexOf(widget.title) === -1) {\n this._removeWidget(widget);\n widget.hide();\n }\n // Lookup the target index for inserting the tab.\n let index;\n if (ref) {\n index = refNode.tabBar.titles.indexOf(ref.title);\n }\n else {\n index = refNode.tabBar.currentIndex;\n }\n // Using transform create an additional layer in the pixel pipeline\n // to limit the number of layer, it is set only if there is more than one widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale) {\n if (refNode.tabBar.titles.length === 0) {\n // Singular tab should use display mode to limit number of layers.\n widget.hiddenMode = Widget.HiddenMode.Display;\n }\n else if (refNode.tabBar.titles.length == 1) {\n // If we are adding a second tab, switch the existing tab back to scale.\n const existingWidget = refNode.tabBar.titles[0].owner;\n existingWidget.hiddenMode = Widget.HiddenMode.Scale;\n }\n else {\n // For the third and subsequent tabs no special action is needed.\n widget.hiddenMode = Widget.HiddenMode.Scale;\n }\n }\n else {\n // For all other modes just propagate the current mode.\n widget.hiddenMode = this._hiddenMode;\n }\n // Insert the widget's tab relative to the target index.\n refNode.tabBar.insertTab(index + (after ? 1 : 0), widget.title);\n Private$6.addAria(widget, refNode.tabBar);\n }\n /**\n * Insert a widget as a new split area.\n *\n * #### Notes\n * This does not attach the widget to the parent widget.\n */\n _insertSplit(widget, ref, refNode, orientation, after, merge = false) {\n // Do nothing if there is no effective split.\n if (widget === ref && refNode && refNode.tabBar.titles.length === 1) {\n return;\n }\n // Ensure the widget is removed from the current layout.\n this._removeWidget(widget);\n // Set the root if it does not exist.\n if (!this._root) {\n this._root = this._createTabNode(widget);\n return;\n }\n // If the ref node parent is null, split the root.\n if (!refNode || !refNode.parent) {\n // Ensure the root is split with the correct orientation.\n let root = this._splitRoot(orientation);\n // Determine the insert index for the new tab node.\n let i = after ? root.children.length : 0;\n // Normalize the split node.\n root.normalizeSizes();\n // Create the sizer for new tab node.\n let sizer = Private$6.createSizer(refNode ? 1 : Private$6.GOLDEN_RATIO);\n // Insert the tab node sized to the golden ratio.\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(root.children, i, tabNode);\n ArrayExt.insert(root.sizers, i, sizer);\n ArrayExt.insert(root.handles, i, this._createHandle());\n tabNode.parent = root;\n // Re-normalize the split node to maintain the ratios.\n root.normalizeSizes();\n // Finally, synchronize the visibility of the handles.\n root.syncHandles();\n return;\n }\n // Lookup the split node for the ref widget.\n let splitNode = refNode.parent;\n // If the split node already had the correct orientation,\n // the widget can be inserted into the split node directly.\n if (splitNode.orientation === orientation) {\n // Find the index of the ref node.\n let i = splitNode.children.indexOf(refNode);\n // Conditionally reuse a tab layout found in the wanted position.\n if (merge) {\n let j = i + (after ? 1 : -1);\n let sibling = splitNode.children[j];\n if (sibling instanceof Private$6.TabLayoutNode) {\n this._insertTab(widget, null, sibling, true);\n ++sibling.tabBar.currentIndex;\n return;\n }\n }\n // Normalize the split node.\n splitNode.normalizeSizes();\n // Consume half the space for the insert location.\n let s = (splitNode.sizers[i].sizeHint /= 2);\n // Insert the tab node sized to the other half.\n let j = i + (after ? 1 : 0);\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(splitNode.children, j, tabNode);\n ArrayExt.insert(splitNode.sizers, j, Private$6.createSizer(s));\n ArrayExt.insert(splitNode.handles, j, this._createHandle());\n tabNode.parent = splitNode;\n // Finally, synchronize the visibility of the handles.\n splitNode.syncHandles();\n return;\n }\n // Remove the ref node from the split node.\n let i = ArrayExt.removeFirstOf(splitNode.children, refNode);\n // Create a new normalized split node for the children.\n let childNode = new Private$6.SplitLayoutNode(orientation);\n childNode.normalized = true;\n // Add the ref node sized to half the space.\n childNode.children.push(refNode);\n childNode.sizers.push(Private$6.createSizer(0.5));\n childNode.handles.push(this._createHandle());\n refNode.parent = childNode;\n // Add the tab node sized to the other half.\n let j = after ? 1 : 0;\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(childNode.children, j, tabNode);\n ArrayExt.insert(childNode.sizers, j, Private$6.createSizer(0.5));\n ArrayExt.insert(childNode.handles, j, this._createHandle());\n tabNode.parent = childNode;\n // Synchronize the visibility of the handles.\n childNode.syncHandles();\n // Finally, add the new child node to the original split node.\n ArrayExt.insert(splitNode.children, i, childNode);\n childNode.parent = splitNode;\n }\n /**\n * Ensure the root is a split node with the given orientation.\n */\n _splitRoot(orientation) {\n // Bail early if the root already meets the requirements.\n let oldRoot = this._root;\n if (oldRoot instanceof Private$6.SplitLayoutNode) {\n if (oldRoot.orientation === orientation) {\n return oldRoot;\n }\n }\n // Create a new root node with the specified orientation.\n let newRoot = (this._root = new Private$6.SplitLayoutNode(orientation));\n // Add the old root to the new root.\n if (oldRoot) {\n newRoot.children.push(oldRoot);\n newRoot.sizers.push(Private$6.createSizer(0));\n newRoot.handles.push(this._createHandle());\n oldRoot.parent = newRoot;\n }\n // Return the new root as a convenience.\n return newRoot;\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Set up the computed minimum size.\n let minW = 0;\n let minH = 0;\n // Update the size limits for the layout tree.\n if (this._root) {\n let limits = this._root.fit(this._spacing, this._items);\n minW = limits.minWidth;\n minH = limits.minHeight;\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Bail early if there is no root layout node.\n if (!this._root) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let x = this._box.paddingTop;\n let y = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Update the geometry of the layout tree.\n this._root.update(x, y, width, height, this._spacing, this._items);\n }\n /**\n * Create a new tab bar for use by the dock layout.\n *\n * #### Notes\n * The tab bar will be attached to the parent if it exists.\n */\n _createTabBar() {\n // Create the tab bar using the renderer.\n let tabBar = this.renderer.createTabBar(this._document);\n // Enforce necessary tab bar behavior.\n tabBar.orientation = 'horizontal';\n // Attach the tab bar to the parent if possible.\n if (this.parent) {\n this.attachWidget(tabBar);\n }\n // Return the initialized tab bar.\n return tabBar;\n }\n /**\n * Create a new handle for the dock layout.\n *\n * #### Notes\n * The handle will be attached to the parent if it exists.\n */\n _createHandle() {\n // Create the handle using the renderer.\n let handle = this.renderer.createHandle();\n // Initialize the handle layout behavior.\n let style = handle.style;\n style.position = 'absolute';\n style.contain = 'strict';\n style.top = '0';\n style.left = '0';\n style.width = '0';\n style.height = '0';\n // Attach the handle to the parent if it exists.\n if (this.parent) {\n this.parent.node.appendChild(handle);\n }\n // Return the initialized handle.\n return handle;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$6;\n(function (Private) {\n /**\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n */\n Private.GOLDEN_RATIO = 0.618;\n /**\n * Create a box sizer with an initial size hint.\n */\n function createSizer(hint) {\n let sizer = new BoxSizer();\n sizer.sizeHint = hint;\n sizer.size = hint;\n return sizer;\n }\n Private.createSizer = createSizer;\n /**\n * Normalize an area config object and collect the visited widgets.\n */\n function normalizeAreaConfig(config, widgetSet) {\n let result;\n if (config.type === 'tab-area') {\n result = normalizeTabAreaConfig(config, widgetSet);\n }\n else {\n result = normalizeSplitAreaConfig(config, widgetSet);\n }\n return result;\n }\n Private.normalizeAreaConfig = normalizeAreaConfig;\n /**\n * Convert a normalized area config into a layout tree.\n */\n function realizeAreaConfig(config, renderer, document) {\n let node;\n if (config.type === 'tab-area') {\n node = realizeTabAreaConfig(config, renderer, document);\n }\n else {\n node = realizeSplitAreaConfig(config, renderer, document);\n }\n return node;\n }\n Private.realizeAreaConfig = realizeAreaConfig;\n /**\n * A layout node which holds the data for a tabbed area.\n */\n class TabLayoutNode {\n /**\n * Construct a new tab layout node.\n *\n * @param tabBar - The tab bar to use for the layout node.\n */\n constructor(tabBar) {\n /**\n * The parent of the layout node.\n */\n this.parent = null;\n this._top = 0;\n this._left = 0;\n this._width = 0;\n this._height = 0;\n let tabSizer = new BoxSizer();\n let widgetSizer = new BoxSizer();\n tabSizer.stretch = 0;\n widgetSizer.stretch = 1;\n this.tabBar = tabBar;\n this.sizers = [tabSizer, widgetSizer];\n }\n /**\n * The most recent value for the `top` edge of the layout box.\n */\n get top() {\n return this._top;\n }\n /**\n * The most recent value for the `left` edge of the layout box.\n */\n get left() {\n return this._left;\n }\n /**\n * The most recent value for the `width` of the layout box.\n */\n get width() {\n return this._width;\n }\n /**\n * The most recent value for the `height` of the layout box.\n */\n get height() {\n return this._height;\n }\n /**\n * Create an iterator for all widgets in the layout tree.\n */\n *iterAllWidgets() {\n yield this.tabBar;\n yield* this.iterUserWidgets();\n }\n /**\n * Create an iterator for the user widgets in the layout tree.\n */\n *iterUserWidgets() {\n for (const title of this.tabBar.titles) {\n yield title.owner;\n }\n }\n /**\n * Create an iterator for the selected widgets in the layout tree.\n */\n *iterSelectedWidgets() {\n let title = this.tabBar.currentTitle;\n if (title) {\n yield title.owner;\n }\n }\n /**\n * Create an iterator for the tab bars in the layout tree.\n */\n *iterTabBars() {\n yield this.tabBar;\n }\n /**\n * Create an iterator for the handles in the layout tree.\n */\n // eslint-disable-next-line require-yield\n *iterHandles() {\n return;\n }\n /**\n * Find the tab layout node which contains the given widget.\n */\n findTabNode(widget) {\n return this.tabBar.titles.indexOf(widget.title) !== -1 ? this : null;\n }\n /**\n * Find the split layout node which contains the given handle.\n */\n findSplitNode(handle) {\n return null;\n }\n /**\n * Find the first tab layout node in a layout tree.\n */\n findFirstTabNode() {\n return this;\n }\n /**\n * Find the tab layout node which contains the local point.\n */\n hitTestTabNodes(x, y) {\n if (x < this._left || x >= this._left + this._width) {\n return null;\n }\n if (y < this._top || y >= this._top + this._height) {\n return null;\n }\n return this;\n }\n /**\n * Create a configuration object for the layout tree.\n */\n createConfig() {\n let widgets = this.tabBar.titles.map(title => title.owner);\n let currentIndex = this.tabBar.currentIndex;\n return { type: 'tab-area', widgets, currentIndex };\n }\n /**\n * Recursively hold all of the sizes in the layout tree.\n *\n * This ignores the sizers of tab layout nodes.\n */\n holdAllSizes() {\n return;\n }\n /**\n * Fit the layout tree.\n */\n fit(spacing, items) {\n // Set up the limit variables.\n let minWidth = 0;\n let minHeight = 0;\n let maxWidth = Infinity;\n let maxHeight = Infinity;\n // Lookup the tab bar layout item.\n let tabBarItem = items.get(this.tabBar);\n // Lookup the widget layout item.\n let current = this.tabBar.currentTitle;\n let widgetItem = current ? items.get(current.owner) : undefined;\n // Lookup the tab bar and widget sizers.\n let [tabBarSizer, widgetSizer] = this.sizers;\n // Update the tab bar limits.\n if (tabBarItem) {\n tabBarItem.fit();\n }\n // Update the widget limits.\n if (widgetItem) {\n widgetItem.fit();\n }\n // Update the results and sizer for the tab bar.\n if (tabBarItem && !tabBarItem.isHidden) {\n minWidth = Math.max(minWidth, tabBarItem.minWidth);\n minHeight += tabBarItem.minHeight;\n tabBarSizer.minSize = tabBarItem.minHeight;\n tabBarSizer.maxSize = tabBarItem.maxHeight;\n }\n else {\n tabBarSizer.minSize = 0;\n tabBarSizer.maxSize = 0;\n }\n // Update the results and sizer for the current widget.\n if (widgetItem && !widgetItem.isHidden) {\n minWidth = Math.max(minWidth, widgetItem.minWidth);\n minHeight += widgetItem.minHeight;\n widgetSizer.minSize = widgetItem.minHeight;\n widgetSizer.maxSize = Infinity;\n }\n else {\n widgetSizer.minSize = 0;\n widgetSizer.maxSize = Infinity;\n }\n // Return the computed size limits for the layout node.\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n /**\n * Update the layout tree.\n */\n update(left, top, width, height, spacing, items) {\n // Update the layout box values.\n this._top = top;\n this._left = left;\n this._width = width;\n this._height = height;\n // Lookup the tab bar layout item.\n let tabBarItem = items.get(this.tabBar);\n // Lookup the widget layout item.\n let current = this.tabBar.currentTitle;\n let widgetItem = current ? items.get(current.owner) : undefined;\n // Distribute the layout space to the sizers.\n BoxEngine.calc(this.sizers, height);\n // Update the tab bar item using the computed size.\n if (tabBarItem && !tabBarItem.isHidden) {\n let size = this.sizers[0].size;\n tabBarItem.update(left, top, width, size);\n top += size;\n }\n // Layout the widget using the computed size.\n if (widgetItem && !widgetItem.isHidden) {\n let size = this.sizers[1].size;\n widgetItem.update(left, top, width, size);\n }\n }\n }\n Private.TabLayoutNode = TabLayoutNode;\n /**\n * A layout node which holds the data for a split area.\n */\n class SplitLayoutNode {\n /**\n * Construct a new split layout node.\n *\n * @param orientation - The orientation of the node.\n */\n constructor(orientation) {\n /**\n * The parent of the layout node.\n */\n this.parent = null;\n /**\n * Whether the sizers have been normalized.\n */\n this.normalized = false;\n /**\n * The child nodes for the split node.\n */\n this.children = [];\n /**\n * The box sizers for the layout children.\n */\n this.sizers = [];\n /**\n * The handles for the layout children.\n */\n this.handles = [];\n this.orientation = orientation;\n }\n /**\n * Create an iterator for all widgets in the layout tree.\n */\n *iterAllWidgets() {\n for (const child of this.children) {\n yield* child.iterAllWidgets();\n }\n }\n /**\n * Create an iterator for the user widgets in the layout tree.\n */\n *iterUserWidgets() {\n for (const child of this.children) {\n yield* child.iterUserWidgets();\n }\n }\n /**\n * Create an iterator for the selected widgets in the layout tree.\n */\n *iterSelectedWidgets() {\n for (const child of this.children) {\n yield* child.iterSelectedWidgets();\n }\n }\n /**\n * Create an iterator for the tab bars in the layout tree.\n */\n *iterTabBars() {\n for (const child of this.children) {\n yield* child.iterTabBars();\n }\n }\n /**\n * Create an iterator for the handles in the layout tree.\n */\n *iterHandles() {\n yield* this.handles;\n for (const child of this.children) {\n yield* child.iterHandles();\n }\n }\n /**\n * Find the tab layout node which contains the given widget.\n */\n findTabNode(widget) {\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].findTabNode(widget);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Find the split layout node which contains the given handle.\n */\n findSplitNode(handle) {\n let index = this.handles.indexOf(handle);\n if (index !== -1) {\n return { index, node: this };\n }\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].findSplitNode(handle);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Find the first tab layout node in a layout tree.\n */\n findFirstTabNode() {\n if (this.children.length === 0) {\n return null;\n }\n return this.children[0].findFirstTabNode();\n }\n /**\n * Find the tab layout node which contains the local point.\n */\n hitTestTabNodes(x, y) {\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].hitTestTabNodes(x, y);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Create a configuration object for the layout tree.\n */\n createConfig() {\n let orientation = this.orientation;\n let sizes = this.createNormalizedSizes();\n let children = this.children.map(child => child.createConfig());\n return { type: 'split-area', orientation, children, sizes };\n }\n /**\n * Sync the visibility and orientation of the handles.\n */\n syncHandles() {\n this.handles.forEach((handle, i) => {\n handle.setAttribute('data-orientation', this.orientation);\n if (i === this.handles.length - 1) {\n handle.classList.add('lm-mod-hidden');\n }\n else {\n handle.classList.remove('lm-mod-hidden');\n }\n });\n }\n /**\n * Hold the current sizes of the box sizers.\n *\n * This sets the size hint of each sizer to its current size.\n */\n holdSizes() {\n for (const sizer of this.sizers) {\n sizer.sizeHint = sizer.size;\n }\n }\n /**\n * Recursively hold all of the sizes in the layout tree.\n *\n * This ignores the sizers of tab layout nodes.\n */\n holdAllSizes() {\n for (const child of this.children) {\n child.holdAllSizes();\n }\n this.holdSizes();\n }\n /**\n * Normalize the sizes of the split layout node.\n */\n normalizeSizes() {\n // Bail early if the sizers are empty.\n let n = this.sizers.length;\n if (n === 0) {\n return;\n }\n // Hold the current sizes of the sizers.\n this.holdSizes();\n // Compute the sum of the sizes.\n let sum = this.sizers.reduce((v, sizer) => v + sizer.sizeHint, 0);\n // Normalize the sizes based on the sum.\n if (sum === 0) {\n for (const sizer of this.sizers) {\n sizer.size = sizer.sizeHint = 1 / n;\n }\n }\n else {\n for (const sizer of this.sizers) {\n sizer.size = sizer.sizeHint /= sum;\n }\n }\n // Mark the sizes as normalized.\n this.normalized = true;\n }\n /**\n * Snap the normalized sizes of the split layout node.\n */\n createNormalizedSizes() {\n // Bail early if the sizers are empty.\n let n = this.sizers.length;\n if (n === 0) {\n return [];\n }\n // Grab the current sizes of the sizers.\n let sizes = this.sizers.map(sizer => sizer.size);\n // Compute the sum of the sizes.\n let sum = sizes.reduce((v, size) => v + size, 0);\n // Normalize the sizes based on the sum.\n if (sum === 0) {\n for (let i = sizes.length - 1; i > -1; i--) {\n sizes[i] = 1 / n;\n }\n }\n else {\n for (let i = sizes.length - 1; i > -1; i--) {\n sizes[i] /= sum;\n }\n }\n // Return the normalized sizes.\n return sizes;\n }\n /**\n * Fit the layout tree.\n */\n fit(spacing, items) {\n // Compute the required fixed space.\n let horizontal = this.orientation === 'horizontal';\n let fixed = Math.max(0, this.children.length - 1) * spacing;\n // Set up the limit variables.\n let minWidth = horizontal ? fixed : 0;\n let minHeight = horizontal ? 0 : fixed;\n let maxWidth = Infinity;\n let maxHeight = Infinity;\n // Fit the children and update the limits.\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let limits = this.children[i].fit(spacing, items);\n if (horizontal) {\n minHeight = Math.max(minHeight, limits.minHeight);\n minWidth += limits.minWidth;\n this.sizers[i].minSize = limits.minWidth;\n }\n else {\n minWidth = Math.max(minWidth, limits.minWidth);\n minHeight += limits.minHeight;\n this.sizers[i].minSize = limits.minHeight;\n }\n }\n // Return the computed limits for the layout node.\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n /**\n * Update the layout tree.\n */\n update(left, top, width, height, spacing, items) {\n // Compute the available layout space.\n let horizontal = this.orientation === 'horizontal';\n let fixed = Math.max(0, this.children.length - 1) * spacing;\n let space = Math.max(0, (horizontal ? width : height) - fixed);\n // De-normalize the sizes if needed.\n if (this.normalized) {\n for (const sizer of this.sizers) {\n sizer.sizeHint *= space;\n }\n this.normalized = false;\n }\n // Distribute the layout space to the sizers.\n BoxEngine.calc(this.sizers, space);\n // Update the geometry of the child nodes and handles.\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let child = this.children[i];\n let size = this.sizers[i].size;\n let handleStyle = this.handles[i].style;\n if (horizontal) {\n child.update(left, top, size, height, spacing, items);\n left += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${spacing}px`;\n handleStyle.height = `${height}px`;\n left += spacing;\n }\n else {\n child.update(left, top, width, size, spacing, items);\n top += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${width}px`;\n handleStyle.height = `${spacing}px`;\n top += spacing;\n }\n }\n }\n }\n Private.SplitLayoutNode = SplitLayoutNode;\n function addAria(widget, tabBar) {\n widget.node.setAttribute('role', 'tabpanel');\n let renderer = tabBar.renderer;\n if (renderer instanceof TabBar.Renderer) {\n let tabId = renderer.createTabKey({\n title: widget.title,\n current: false,\n zIndex: 0\n });\n widget.node.setAttribute('aria-labelledby', tabId);\n }\n }\n Private.addAria = addAria;\n function removeAria(widget) {\n widget.node.removeAttribute('role');\n widget.node.removeAttribute('aria-labelledby');\n }\n Private.removeAria = removeAria;\n /**\n * Normalize a tab area config and collect the visited widgets.\n */\n function normalizeTabAreaConfig(config, widgetSet) {\n // Bail early if there is no content.\n if (config.widgets.length === 0) {\n return null;\n }\n // Setup the filtered widgets array.\n let widgets = [];\n // Filter the config for unique widgets.\n for (const widget of config.widgets) {\n if (!widgetSet.has(widget)) {\n widgetSet.add(widget);\n widgets.push(widget);\n }\n }\n // Bail if there are no effective widgets.\n if (widgets.length === 0) {\n return null;\n }\n // Normalize the current index.\n let index = config.currentIndex;\n if (index !== -1 && (index < 0 || index >= widgets.length)) {\n index = 0;\n }\n // Return a normalized config object.\n return { type: 'tab-area', widgets, currentIndex: index };\n }\n /**\n * Normalize a split area config and collect the visited widgets.\n */\n function normalizeSplitAreaConfig(config, widgetSet) {\n // Set up the result variables.\n let orientation = config.orientation;\n let children = [];\n let sizes = [];\n // Normalize the config children.\n for (let i = 0, n = config.children.length; i < n; ++i) {\n // Normalize the child config.\n let child = normalizeAreaConfig(config.children[i], widgetSet);\n // Ignore an empty child.\n if (!child) {\n continue;\n }\n // Add the child or hoist its content as appropriate.\n if (child.type === 'tab-area' || child.orientation !== orientation) {\n children.push(child);\n sizes.push(Math.abs(config.sizes[i] || 0));\n }\n else {\n children.push(...child.children);\n sizes.push(...child.sizes);\n }\n }\n // Bail if there are no effective children.\n if (children.length === 0) {\n return null;\n }\n // If there is only one effective child, return that child.\n if (children.length === 1) {\n return children[0];\n }\n // Return a normalized config object.\n return { type: 'split-area', orientation, children, sizes };\n }\n /**\n * Convert a normalized tab area config into a layout tree.\n */\n function realizeTabAreaConfig(config, renderer, document) {\n // Create the tab bar for the layout node.\n let tabBar = renderer.createTabBar(document);\n // Hide each widget and add it to the tab bar.\n for (const widget of config.widgets) {\n widget.hide();\n tabBar.addTab(widget.title);\n Private.addAria(widget, tabBar);\n }\n // Set the current index of the tab bar.\n tabBar.currentIndex = config.currentIndex;\n // Return the new tab layout node.\n return new TabLayoutNode(tabBar);\n }\n /**\n * Convert a normalized split area config into a layout tree.\n */\n function realizeSplitAreaConfig(config, renderer, document) {\n // Create the split layout node.\n let node = new SplitLayoutNode(config.orientation);\n // Add each child to the layout node.\n config.children.forEach((child, i) => {\n // Create the child data for the layout node.\n let childNode = realizeAreaConfig(child, renderer, document);\n let sizer = createSizer(config.sizes[i]);\n let handle = renderer.createHandle();\n // Add the child data to the layout node.\n node.children.push(childNode);\n node.handles.push(handle);\n node.sizers.push(sizer);\n // Update the parent for the child node.\n childNode.parent = node;\n });\n // Synchronize the handle state for the layout node.\n node.syncHandles();\n // Normalize the sizes for the layout node.\n node.normalizeSizes();\n // Return the new layout node.\n return node;\n }\n})(Private$6 || (Private$6 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which provides a flexible docking area for widgets.\n */\nclass DockPanel extends Widget {\n /**\n * Construct a new dock panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super();\n this._drag = null;\n this._tabsMovable = true;\n this._tabsConstrained = false;\n this._addButtonEnabled = false;\n this._pressData = null;\n this._layoutModified = new Signal(this);\n this._addRequested = new Signal(this);\n this.addClass('lm-DockPanel');\n this._document = options.document || document;\n this._mode = options.mode || 'multiple-document';\n this._renderer = options.renderer || DockPanel.defaultRenderer;\n this._edges = options.edges || Private$5.DEFAULT_EDGES;\n if (options.tabsMovable !== undefined) {\n this._tabsMovable = options.tabsMovable;\n }\n if (options.tabsConstrained !== undefined) {\n this._tabsConstrained = options.tabsConstrained;\n }\n if (options.addButtonEnabled !== undefined) {\n this._addButtonEnabled = options.addButtonEnabled;\n }\n // Toggle the CSS mode attribute.\n this.dataset['mode'] = this._mode;\n // Create the delegate renderer for the layout.\n let renderer = {\n createTabBar: () => this._createTabBar(),\n createHandle: () => this._createHandle()\n };\n // Set up the dock layout for the panel.\n this.layout = new DockLayout({\n document: this._document,\n renderer,\n spacing: options.spacing,\n hiddenMode: options.hiddenMode\n });\n // Set up the overlay drop indicator.\n this.overlay = options.overlay || new DockPanel.Overlay();\n this.node.appendChild(this.overlay.node);\n }\n /**\n * Dispose of the resources held by the panel.\n */\n dispose() {\n // Ensure the mouse is released.\n this._releaseMouse();\n // Hide the overlay.\n this.overlay.hide(0);\n // Cancel a drag if one is in progress.\n if (this._drag) {\n this._drag.dispose();\n }\n // Dispose of the base class.\n super.dispose();\n }\n /**\n * The method for hiding widgets.\n */\n get hiddenMode() {\n return this.layout.hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n */\n set hiddenMode(v) {\n this.layout.hiddenMode = v;\n }\n /**\n * A signal emitted when the layout configuration is modified.\n *\n * #### Notes\n * This signal is emitted whenever the current layout configuration\n * may have changed.\n *\n * This signal is emitted asynchronously in a collapsed fashion, so\n * that multiple synchronous modifications results in only a single\n * emit of the signal.\n */\n get layoutModified() {\n return this._layoutModified;\n }\n /**\n * A signal emitted when the add button on a tab bar is clicked.\n *\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * The renderer used by the dock panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * Get the spacing between the widgets.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the spacing between the widgets.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * Get the mode for the dock panel.\n */\n get mode() {\n return this._mode;\n }\n /**\n * Set the mode for the dock panel.\n *\n * #### Notes\n * Changing the mode is a destructive operation with respect to the\n * panel's layout configuration. If layout state must be preserved,\n * save the current layout config before changing the mode.\n */\n set mode(value) {\n // Bail early if the mode does not change.\n if (this._mode === value) {\n return;\n }\n // Update the internal mode.\n this._mode = value;\n // Toggle the CSS mode attribute.\n this.dataset['mode'] = value;\n // Get the layout for the panel.\n let layout = this.layout;\n // Configure the layout for the specified mode.\n switch (value) {\n case 'multiple-document':\n for (const tabBar of layout.tabBars()) {\n tabBar.show();\n }\n break;\n case 'single-document':\n layout.restoreLayout(Private$5.createSingleDocumentConfig(this));\n break;\n default:\n throw 'unreachable';\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Whether the tabs can be dragged / moved at runtime.\n */\n get tabsMovable() {\n return this._tabsMovable;\n }\n /**\n * Enable / Disable draggable / movable tabs.\n */\n set tabsMovable(value) {\n this._tabsMovable = value;\n for (const tabBar of this.tabBars()) {\n tabBar.tabsMovable = value;\n }\n }\n /**\n * Whether the tabs are constrained to their source dock panel\n */\n get tabsConstrained() {\n return this._tabsConstrained;\n }\n /**\n * Constrain/Allow tabs to be dragged outside of this dock panel\n */\n set tabsConstrained(value) {\n this._tabsConstrained = value;\n }\n /**\n * Whether the add buttons for each tab bar are enabled.\n */\n get addButtonEnabled() {\n return this._addButtonEnabled;\n }\n /**\n * Set whether the add buttons for each tab bar are enabled.\n */\n set addButtonEnabled(value) {\n this._addButtonEnabled = value;\n for (const tabBar of this.tabBars()) {\n tabBar.addButtonEnabled = value;\n }\n }\n /**\n * Whether the dock panel is empty.\n */\n get isEmpty() {\n return this.layout.isEmpty;\n }\n /**\n * Create an iterator over the user widgets in the panel.\n *\n * @returns A new iterator over the user widgets in the panel.\n *\n * #### Notes\n * This iterator does not include the generated tab bars.\n */\n *widgets() {\n yield* this.layout.widgets();\n }\n /**\n * Create an iterator over the selected widgets in the panel.\n *\n * @returns A new iterator over the selected user widgets.\n *\n * #### Notes\n * This iterator yields the widgets corresponding to the current tab\n * of each tab bar in the panel.\n */\n *selectedWidgets() {\n yield* this.layout.selectedWidgets();\n }\n /**\n * Create an iterator over the tab bars in the panel.\n *\n * @returns A new iterator over the tab bars in the panel.\n *\n * #### Notes\n * This iterator does not include the user widgets.\n */\n *tabBars() {\n yield* this.layout.tabBars();\n }\n /**\n * Create an iterator over the handles in the panel.\n *\n * @returns A new iterator over the handles in the panel.\n */\n *handles() {\n yield* this.layout.handles();\n }\n /**\n * Select a specific widget in the dock panel.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will make the widget the current widget in its tab area.\n */\n selectWidget(widget) {\n // Find the tab bar which contains the widget.\n let tabBar = find(this.tabBars(), bar => {\n return bar.titles.indexOf(widget.title) !== -1;\n });\n // Throw an error if no tab bar is found.\n if (!tabBar) {\n throw new Error('Widget is not contained in the dock panel.');\n }\n // Ensure the widget is the current widget.\n tabBar.currentTitle = widget.title;\n }\n /**\n * Activate a specified widget in the dock panel.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will select and activate the given widget.\n */\n activateWidget(widget) {\n this.selectWidget(widget);\n widget.activate();\n }\n /**\n * Save the current layout configuration of the dock panel.\n *\n * @returns A new config object for the current layout state.\n *\n * #### Notes\n * The return value can be provided to the `restoreLayout` method\n * in order to restore the layout to its current configuration.\n */\n saveLayout() {\n return this.layout.saveLayout();\n }\n /**\n * Restore the layout to a previously saved configuration.\n *\n * @param config - The layout configuration to restore.\n *\n * #### Notes\n * Widgets which currently belong to the layout but which are not\n * contained in the config will be unparented.\n *\n * The dock panel automatically reverts to `'multiple-document'`\n * mode when a layout config is restored.\n */\n restoreLayout(config) {\n // Reset the mode.\n this._mode = 'multiple-document';\n // Restore the layout.\n this.layout.restoreLayout(config);\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Add a widget to the dock panel.\n *\n * @param widget - The widget to add to the dock panel.\n *\n * @param options - The additional options for adding the widget.\n *\n * #### Notes\n * If the panel is in single document mode, the options are ignored\n * and the widget is always added as tab in the hidden tab bar.\n */\n addWidget(widget, options = {}) {\n // Add the widget to the layout.\n if (this._mode === 'single-document') {\n this.layout.addWidget(widget);\n }\n else {\n this.layout.addWidget(widget, options);\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Process a message sent to the widget.\n *\n * @param msg - The message sent to the widget.\n */\n processMessage(msg) {\n if (msg.type === 'layout-modified') {\n this._layoutModified.emit(undefined);\n }\n else {\n super.processMessage(msg);\n }\n }\n /**\n * Handle the DOM events for the dock panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'lm-dragenter':\n this._evtDragEnter(event);\n break;\n case 'lm-dragleave':\n this._evtDragLeave(event);\n break;\n case 'lm-dragover':\n this._evtDragOver(event);\n break;\n case 'lm-drop':\n this._evtDrop(event);\n break;\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('lm-dragenter', this);\n this.node.addEventListener('lm-dragleave', this);\n this.node.addEventListener('lm-dragover', this);\n this.node.addEventListener('lm-drop', this);\n this.node.addEventListener('pointerdown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('lm-dragenter', this);\n this.node.removeEventListener('lm-dragleave', this);\n this.node.removeEventListener('lm-dragover', this);\n this.node.removeEventListener('lm-drop', this);\n this.node.removeEventListener('pointerdown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n // Ignore the generated tab bars.\n if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n return;\n }\n // Add the widget class to the child.\n msg.child.addClass('lm-DockPanel-widget');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n // Ignore the generated tab bars.\n if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n return;\n }\n // Remove the widget class from the child.\n msg.child.removeClass('lm-DockPanel-widget');\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `'lm-dragenter'` event for the dock panel.\n */\n _evtDragEnter(event) {\n // If the factory mime type is present, mark the event as\n // handled in order to get the rest of the drag events.\n if (event.mimeData.hasData('application/vnd.lumino.widget-factory')) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n /**\n * Handle the `'lm-dragleave'` event for the dock panel.\n */\n _evtDragLeave(event) {\n // Mark the event as handled.\n event.preventDefault();\n if (this._tabsConstrained && event.source !== this)\n return;\n event.stopPropagation();\n // The new target might be a descendant, so we might still handle the drop.\n // Hide asynchronously so that if a lm-dragover event bubbles up to us, the\n // hide is cancelled by the lm-dragover handler's show overlay logic.\n this.overlay.hide(1);\n }\n /**\n * Handle the `'lm-dragover'` event for the dock panel.\n */\n _evtDragOver(event) {\n // Mark the event as handled.\n event.preventDefault();\n // Show the drop indicator overlay and update the drop\n // action based on the drop target zone under the mouse.\n if ((this._tabsConstrained && event.source !== this) ||\n this._showOverlay(event.clientX, event.clientY) === 'invalid') {\n event.dropAction = 'none';\n }\n else {\n event.stopPropagation();\n event.dropAction = event.proposedAction;\n }\n }\n /**\n * Handle the `'lm-drop'` event for the dock panel.\n */\n _evtDrop(event) {\n // Mark the event as handled.\n event.preventDefault();\n // Hide the drop indicator overlay.\n this.overlay.hide(0);\n // Bail if the proposed action is to do nothing.\n if (event.proposedAction === 'none') {\n event.dropAction = 'none';\n return;\n }\n // Find the drop target under the mouse.\n let { clientX, clientY } = event;\n let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n // Bail if the drop zone is invalid.\n if ((this._tabsConstrained && event.source !== this) ||\n zone === 'invalid') {\n event.dropAction = 'none';\n return;\n }\n // Bail if the factory mime type has invalid data.\n let mimeData = event.mimeData;\n let factory = mimeData.getData('application/vnd.lumino.widget-factory');\n if (typeof factory !== 'function') {\n event.dropAction = 'none';\n return;\n }\n // Bail if the factory does not produce a widget.\n let widget = factory();\n if (!(widget instanceof Widget)) {\n event.dropAction = 'none';\n return;\n }\n // Bail if the widget is an ancestor of the dock panel.\n if (widget.contains(this)) {\n event.dropAction = 'none';\n return;\n }\n // Find the reference widget for the drop target.\n let ref = target ? Private$5.getDropRef(target.tabBar) : null;\n // Add the widget according to the indicated drop zone.\n switch (zone) {\n case 'root-all':\n this.addWidget(widget);\n break;\n case 'root-top':\n this.addWidget(widget, { mode: 'split-top' });\n break;\n case 'root-left':\n this.addWidget(widget, { mode: 'split-left' });\n break;\n case 'root-right':\n this.addWidget(widget, { mode: 'split-right' });\n break;\n case 'root-bottom':\n this.addWidget(widget, { mode: 'split-bottom' });\n break;\n case 'widget-all':\n this.addWidget(widget, { mode: 'tab-after', ref });\n break;\n case 'widget-top':\n this.addWidget(widget, { mode: 'split-top', ref });\n break;\n case 'widget-left':\n this.addWidget(widget, { mode: 'split-left', ref });\n break;\n case 'widget-right':\n this.addWidget(widget, { mode: 'split-right', ref });\n break;\n case 'widget-bottom':\n this.addWidget(widget, { mode: 'split-bottom', ref });\n break;\n case 'widget-tab':\n this.addWidget(widget, { mode: 'tab-after', ref });\n break;\n default:\n throw 'unreachable';\n }\n // Accept the proposed drop action.\n event.dropAction = event.proposedAction;\n // Stop propagation if we have not bailed so far.\n event.stopPropagation();\n // Activate the dropped widget.\n this.activateWidget(widget);\n }\n /**\n * Handle the `'keydown'` event for the dock panel.\n */\n _evtKeyDown(event) {\n // Stop input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse if `Escape` is pressed.\n if (event.keyCode === 27) {\n // Finalize the mouse release.\n this._releaseMouse();\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n }\n /**\n * Handle the `'pointerdown'` event for the dock panel.\n */\n _evtPointerDown(event) {\n // Do nothing if the left mouse button is not pressed.\n if (event.button !== 0) {\n return;\n }\n // Find the handle which contains the mouse target, if any.\n let layout = this.layout;\n let target = event.target;\n let handle = find(layout.handles(), handle => handle.contains(target));\n if (!handle) {\n return;\n }\n // Stop the event when a handle is pressed.\n event.preventDefault();\n event.stopPropagation();\n // Add the extra document listeners.\n this._document.addEventListener('keydown', this, true);\n this._document.addEventListener('pointerup', this, true);\n this._document.addEventListener('pointermove', this, true);\n this._document.addEventListener('contextmenu', this, true);\n // Compute the offset deltas for the handle press.\n let rect = handle.getBoundingClientRect();\n let deltaX = event.clientX - rect.left;\n let deltaY = event.clientY - rect.top;\n // Override the cursor and store the press data.\n let style = window.getComputedStyle(handle);\n let override = Drag.overrideCursor(style.cursor, this._document);\n this._pressData = { handle, deltaX, deltaY, override };\n }\n /**\n * Handle the `'pointermove'` event for the dock panel.\n */\n _evtPointerMove(event) {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Stop the event when dragging a handle.\n event.preventDefault();\n event.stopPropagation();\n // Compute the desired offset position for the handle.\n let rect = this.node.getBoundingClientRect();\n let xPos = event.clientX - rect.left - this._pressData.deltaX;\n let yPos = event.clientY - rect.top - this._pressData.deltaY;\n // Set the handle as close to the desired position as possible.\n let layout = this.layout;\n layout.moveHandle(this._pressData.handle, xPos, yPos);\n }\n /**\n * Handle the `'pointerup'` event for the dock panel.\n */\n _evtPointerUp(event) {\n // Do nothing if the left mouse button is not released.\n if (event.button !== 0) {\n return;\n }\n // Stop the event when releasing a handle.\n event.preventDefault();\n event.stopPropagation();\n // Finalize the mouse release.\n this._releaseMouse();\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Release the mouse grab for the dock panel.\n */\n _releaseMouse() {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Clear the override cursor.\n this._pressData.override.dispose();\n this._pressData = null;\n // Remove the extra document listeners.\n this._document.removeEventListener('keydown', this, true);\n this._document.removeEventListener('pointerup', this, true);\n this._document.removeEventListener('pointermove', this, true);\n this._document.removeEventListener('contextmenu', this, true);\n }\n /**\n * Show the overlay indicator at the given client position.\n *\n * Returns the drop zone at the specified client position.\n *\n * #### Notes\n * If the position is not over a valid zone, the overlay is hidden.\n */\n _showOverlay(clientX, clientY) {\n // Find the dock target for the given client position.\n let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n // If the drop zone is invalid, hide the overlay and bail.\n if (zone === 'invalid') {\n this.overlay.hide(100);\n return zone;\n }\n // Setup the variables needed to compute the overlay geometry.\n let top;\n let left;\n let right;\n let bottom;\n let box = ElementExt.boxSizing(this.node); // TODO cache this?\n let rect = this.node.getBoundingClientRect();\n // Compute the overlay geometry based on the dock zone.\n switch (zone) {\n case 'root-all':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'root-top':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = rect.height * Private$5.GOLDEN_RATIO;\n break;\n case 'root-left':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = rect.width * Private$5.GOLDEN_RATIO;\n bottom = box.paddingBottom;\n break;\n case 'root-right':\n top = box.paddingTop;\n left = rect.width * Private$5.GOLDEN_RATIO;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'root-bottom':\n top = rect.height * Private$5.GOLDEN_RATIO;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'widget-all':\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-top':\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom + target.height / 2;\n break;\n case 'widget-left':\n top = target.top;\n left = target.left;\n right = target.right + target.width / 2;\n bottom = target.bottom;\n break;\n case 'widget-right':\n top = target.top;\n left = target.left + target.width / 2;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-bottom':\n top = target.top + target.height / 2;\n left = target.left;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-tab': {\n const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom + target.height - tabHeight;\n break;\n }\n default:\n throw 'unreachable';\n }\n // Show the overlay with the computed geometry.\n this.overlay.show({ top, left, right, bottom });\n // Finally, return the computed drop zone.\n return zone;\n }\n /**\n * Create a new tab bar for use by the panel.\n */\n _createTabBar() {\n // Create the tab bar.\n let tabBar = this._renderer.createTabBar(this._document);\n // Set the generated tab bar property for the tab bar.\n Private$5.isGeneratedTabBarProperty.set(tabBar, true);\n // Hide the tab bar when in single document mode.\n if (this._mode === 'single-document') {\n tabBar.hide();\n }\n // Enforce necessary tab bar behavior.\n // TODO do we really want to enforce *all* of these?\n tabBar.tabsMovable = this._tabsMovable;\n tabBar.allowDeselect = false;\n tabBar.addButtonEnabled = this._addButtonEnabled;\n tabBar.removeBehavior = 'select-previous-tab';\n tabBar.insertBehavior = 'select-tab-if-needed';\n // Connect the signal handlers for the tab bar.\n tabBar.tabMoved.connect(this._onTabMoved, this);\n tabBar.currentChanged.connect(this._onCurrentChanged, this);\n tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n tabBar.tabDetachRequested.connect(this._onTabDetachRequested, this);\n tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n tabBar.addRequested.connect(this._onTabAddRequested, this);\n // Return the initialized tab bar.\n return tabBar;\n }\n /**\n * Create a new handle for use by the panel.\n */\n _createHandle() {\n return this._renderer.createHandle();\n }\n /**\n * Handle the `tabMoved` signal from a tab bar.\n */\n _onTabMoved() {\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `currentChanged` signal from a tab bar.\n */\n _onCurrentChanged(sender, args) {\n // Extract the previous and current title from the args.\n let { previousTitle, currentTitle } = args;\n // Hide the previous widget.\n if (previousTitle) {\n previousTitle.owner.hide();\n }\n // Show the current widget.\n if (currentTitle) {\n currentTitle.owner.show();\n }\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `addRequested` signal from a tab bar.\n */\n _onTabAddRequested(sender) {\n this._addRequested.emit(sender);\n }\n /**\n * Handle the `tabActivateRequested` signal from a tab bar.\n */\n _onTabActivateRequested(sender, args) {\n args.title.owner.activate();\n }\n /**\n * Handle the `tabCloseRequested` signal from a tab bar.\n */\n _onTabCloseRequested(sender, args) {\n args.title.owner.close();\n }\n /**\n * Handle the `tabDetachRequested` signal from a tab bar.\n */\n _onTabDetachRequested(sender, args) {\n // Do nothing if a drag is already in progress.\n if (this._drag) {\n return;\n }\n // Release the tab bar's hold on the mouse.\n sender.releaseMouse();\n // Extract the data from the args.\n let { title, tab, clientX, clientY, offset } = args;\n // Setup the mime data for the drag operation.\n let mimeData = new MimeData();\n let factory = () => title.owner;\n mimeData.setData('application/vnd.lumino.widget-factory', factory);\n // Create the drag image for the drag operation.\n let dragImage = tab.cloneNode(true);\n if (offset) {\n dragImage.style.top = `-${offset.y}px`;\n dragImage.style.left = `-${offset.x}px`;\n }\n // Create the drag object to manage the drag-drop operation.\n this._drag = new Drag({\n document: this._document,\n mimeData,\n dragImage,\n proposedAction: 'move',\n supportedActions: 'move',\n source: this\n });\n // Hide the tab node in the original tab.\n tab.classList.add('lm-mod-hidden');\n let cleanup = () => {\n this._drag = null;\n tab.classList.remove('lm-mod-hidden');\n };\n // Start the drag operation and cleanup when done.\n this._drag.start(clientX, clientY).then(cleanup);\n }\n}\n/**\n * The namespace for the `DockPanel` class statics.\n */\n(function (DockPanel) {\n /**\n * A concrete implementation of `IOverlay`.\n *\n * This is the default overlay implementation for a dock panel.\n */\n class Overlay {\n /**\n * Construct a new overlay.\n */\n constructor() {\n this._timer = -1;\n this._hidden = true;\n this.node = document.createElement('div');\n this.node.classList.add('lm-DockPanel-overlay');\n this.node.classList.add('lm-mod-hidden');\n this.node.style.position = 'absolute';\n this.node.style.contain = 'strict';\n }\n /**\n * Show the overlay using the given overlay geometry.\n *\n * @param geo - The desired geometry for the overlay.\n */\n show(geo) {\n // Update the position of the overlay.\n let style = this.node.style;\n style.top = `${geo.top}px`;\n style.left = `${geo.left}px`;\n style.right = `${geo.right}px`;\n style.bottom = `${geo.bottom}px`;\n // Clear any pending hide timer.\n clearTimeout(this._timer);\n this._timer = -1;\n // If the overlay is already visible, we're done.\n if (!this._hidden) {\n return;\n }\n // Clear the hidden flag.\n this._hidden = false;\n // Finally, show the overlay.\n this.node.classList.remove('lm-mod-hidden');\n }\n /**\n * Hide the overlay node.\n *\n * @param delay - The delay (in ms) before hiding the overlay.\n * A delay value <= 0 will hide the overlay immediately.\n */\n hide(delay) {\n // Do nothing if the overlay is already hidden.\n if (this._hidden) {\n return;\n }\n // Hide immediately if the delay is <= 0.\n if (delay <= 0) {\n clearTimeout(this._timer);\n this._timer = -1;\n this._hidden = true;\n this.node.classList.add('lm-mod-hidden');\n return;\n }\n // Do nothing if a hide is already pending.\n if (this._timer !== -1) {\n return;\n }\n // Otherwise setup the hide timer.\n this._timer = window.setTimeout(() => {\n this._timer = -1;\n this._hidden = true;\n this.node.classList.add('lm-mod-hidden');\n }, delay);\n }\n }\n DockPanel.Overlay = Overlay;\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Create a new tab bar for use with a dock panel.\n *\n * @returns A new tab bar for a dock panel.\n */\n createTabBar(document) {\n let bar = new TabBar({ document });\n bar.addClass('lm-DockPanel-tabBar');\n return bar;\n }\n /**\n * Create a new handle node for use with a dock panel.\n *\n * @returns A new handle node for a dock panel.\n */\n createHandle() {\n let handle = document.createElement('div');\n handle.className = 'lm-DockPanel-handle';\n return handle;\n }\n }\n DockPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n DockPanel.defaultRenderer = new Renderer();\n})(DockPanel || (DockPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$5;\n(function (Private) {\n /**\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n */\n Private.GOLDEN_RATIO = 0.618;\n /**\n * The default sizes for the edge drop zones, in pixels.\n */\n Private.DEFAULT_EDGES = {\n /**\n * The size of the top edge dock zone for the root panel, in pixels.\n * This is different from the others to distinguish between the top\n * tab bar and the top root zone.\n */\n top: 12,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n right: 40,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n bottom: 40,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n left: 40\n };\n /**\n * A singleton `'layout-modified'` conflatable message.\n */\n Private.LayoutModified = new ConflatableMessage('layout-modified');\n /**\n * An attached property used to track generated tab bars.\n */\n Private.isGeneratedTabBarProperty = new AttachedProperty({\n name: 'isGeneratedTabBar',\n create: () => false\n });\n /**\n * Create a single document config for the widgets in a dock panel.\n */\n function createSingleDocumentConfig(panel) {\n // Return an empty config if the panel is empty.\n if (panel.isEmpty) {\n return { main: null };\n }\n // Get a flat array of the widgets in the panel.\n let widgets = Array.from(panel.widgets());\n // Get the first selected widget in the panel.\n let selected = panel.selectedWidgets().next().value;\n // Compute the current index for the new config.\n let currentIndex = selected ? widgets.indexOf(selected) : -1;\n // Return the single document config.\n return { main: { type: 'tab-area', widgets, currentIndex } };\n }\n Private.createSingleDocumentConfig = createSingleDocumentConfig;\n /**\n * Find the drop target at the given client position.\n */\n function findDropTarget(panel, clientX, clientY, edges) {\n // Bail if the mouse is not over the dock panel.\n if (!ElementExt.hitTest(panel.node, clientX, clientY)) {\n return { zone: 'invalid', target: null };\n }\n // Look up the layout for the panel.\n let layout = panel.layout;\n // If the layout is empty, indicate the entire root drop zone.\n if (layout.isEmpty) {\n return { zone: 'root-all', target: null };\n }\n // Test the edge zones when in multiple document mode.\n if (panel.mode === 'multiple-document') {\n // Get the client rect for the dock panel.\n let panelRect = panel.node.getBoundingClientRect();\n // Compute the distance to each edge of the panel.\n let pl = clientX - panelRect.left + 1;\n let pt = clientY - panelRect.top + 1;\n let pr = panelRect.right - clientX;\n let pb = panelRect.bottom - clientY;\n // Find the minimum distance to an edge.\n let pd = Math.min(pt, pr, pb, pl);\n // Return a root zone if the mouse is within an edge.\n switch (pd) {\n case pt:\n if (pt < edges.top) {\n return { zone: 'root-top', target: null };\n }\n break;\n case pr:\n if (pr < edges.right) {\n return { zone: 'root-right', target: null };\n }\n break;\n case pb:\n if (pb < edges.bottom) {\n return { zone: 'root-bottom', target: null };\n }\n break;\n case pl:\n if (pl < edges.left) {\n return { zone: 'root-left', target: null };\n }\n break;\n default:\n throw 'unreachable';\n }\n }\n // Hit test the dock layout at the given client position.\n let target = layout.hitTestTabAreas(clientX, clientY);\n // Bail if no target area was found.\n if (!target) {\n return { zone: 'invalid', target: null };\n }\n // Return the whole tab area when in single document mode.\n if (panel.mode === 'single-document') {\n return { zone: 'widget-all', target };\n }\n // Compute the distance to each edge of the tab area.\n let al = target.x - target.left + 1;\n let at = target.y - target.top + 1;\n let ar = target.left + target.width - target.x;\n let ab = target.top + target.height - target.y;\n const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n if (at < tabHeight) {\n return { zone: 'widget-tab', target };\n }\n // Get the X and Y edge sizes for the area.\n let rx = Math.round(target.width / 3);\n let ry = Math.round(target.height / 3);\n // If the mouse is not within an edge, indicate the entire area.\n if (al > rx && ar > rx && at > ry && ab > ry) {\n return { zone: 'widget-all', target };\n }\n // Scale the distances by the slenderness ratio.\n al /= rx;\n at /= ry;\n ar /= rx;\n ab /= ry;\n // Find the minimum distance to the area edge.\n let ad = Math.min(al, at, ar, ab);\n // Find the widget zone for the area edge.\n let zone;\n switch (ad) {\n case al:\n zone = 'widget-left';\n break;\n case at:\n zone = 'widget-top';\n break;\n case ar:\n zone = 'widget-right';\n break;\n case ab:\n zone = 'widget-bottom';\n break;\n default:\n throw 'unreachable';\n }\n // Return the final drop target.\n return { zone, target };\n }\n Private.findDropTarget = findDropTarget;\n /**\n * Get the drop reference widget for a tab bar.\n */\n function getDropRef(tabBar) {\n if (tabBar.titles.length === 0) {\n return null;\n }\n if (tabBar.currentTitle) {\n return tabBar.currentTitle.owner;\n }\n return tabBar.titles[tabBar.titles.length - 1].owner;\n }\n Private.getDropRef = getDropRef;\n})(Private$5 || (Private$5 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A class which tracks focus among a set of widgets.\n *\n * This class is useful when code needs to keep track of the most\n * recently focused widget(s) among a set of related widgets.\n */\nclass FocusTracker {\n constructor() {\n this._counter = 0;\n this._widgets = [];\n this._activeWidget = null;\n this._currentWidget = null;\n this._numbers = new Map();\n this._nodes = new Map();\n this._activeChanged = new Signal(this);\n this._currentChanged = new Signal(this);\n }\n /**\n * Dispose of the resources held by the tracker.\n */\n dispose() {\n // Do nothing if the tracker is already disposed.\n if (this._counter < 0) {\n return;\n }\n // Mark the tracker as disposed.\n this._counter = -1;\n // Clear the connections for the tracker.\n Signal.clearData(this);\n // Remove all event listeners.\n for (const widget of this._widgets) {\n widget.node.removeEventListener('focus', this, true);\n widget.node.removeEventListener('blur', this, true);\n }\n // Clear the internal data structures.\n this._activeWidget = null;\n this._currentWidget = null;\n this._nodes.clear();\n this._numbers.clear();\n this._widgets.length = 0;\n }\n /**\n * A signal emitted when the current widget has changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * A signal emitted when the active widget has changed.\n */\n get activeChanged() {\n return this._activeChanged;\n }\n /**\n * A flag indicating whether the tracker is disposed.\n */\n get isDisposed() {\n return this._counter < 0;\n }\n /**\n * The current widget in the tracker.\n *\n * #### Notes\n * The current widget is the widget among the tracked widgets which\n * has the *descendant node* which has most recently been focused.\n *\n * The current widget will not be updated if the node loses focus. It\n * will only be updated when a different tracked widget gains focus.\n *\n * If the current widget is removed from the tracker, the previous\n * current widget will be restored.\n *\n * This behavior is intended to follow a user's conceptual model of\n * a semantically \"current\" widget, where the \"last thing of type X\"\n * to be interacted with is the \"current instance of X\", regardless\n * of whether that instance still has focus.\n */\n get currentWidget() {\n return this._currentWidget;\n }\n /**\n * The active widget in the tracker.\n *\n * #### Notes\n * The active widget is the widget among the tracked widgets which\n * has the *descendant node* which is currently focused.\n */\n get activeWidget() {\n return this._activeWidget;\n }\n /**\n * A read only array of the widgets being tracked.\n */\n get widgets() {\n return this._widgets;\n }\n /**\n * Get the focus number for a particular widget in the tracker.\n *\n * @param widget - The widget of interest.\n *\n * @returns The focus number for the given widget, or `-1` if the\n * widget has not had focus since being added to the tracker, or\n * is not contained by the tracker.\n *\n * #### Notes\n * The focus number indicates the relative order in which the widgets\n * have gained focus. A widget with a larger number has gained focus\n * more recently than a widget with a smaller number.\n *\n * The `currentWidget` will always have the largest focus number.\n *\n * All widgets start with a focus number of `-1`, which indicates that\n * the widget has not been focused since being added to the tracker.\n */\n focusNumber(widget) {\n let n = this._numbers.get(widget);\n return n === undefined ? -1 : n;\n }\n /**\n * Test whether the focus tracker contains a given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns `true` if the widget is tracked, `false` otherwise.\n */\n has(widget) {\n return this._numbers.has(widget);\n }\n /**\n * Add a widget to the focus tracker.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * A widget will be automatically removed from the tracker if it\n * is disposed after being added.\n *\n * If the widget is already tracked, this is a no-op.\n */\n add(widget) {\n // Do nothing if the widget is already tracked.\n if (this._numbers.has(widget)) {\n return;\n }\n // Test whether the widget has focus.\n let focused = widget.node.contains(document.activeElement);\n // Set up the initial focus number.\n let n = focused ? this._counter++ : -1;\n // Add the widget to the internal data structures.\n this._widgets.push(widget);\n this._numbers.set(widget, n);\n this._nodes.set(widget.node, widget);\n // Set up the event listeners. The capturing phase must be used\n // since the 'focus' and 'blur' events don't bubble and Firefox\n // doesn't support the 'focusin' or 'focusout' events.\n widget.node.addEventListener('focus', this, true);\n widget.node.addEventListener('blur', this, true);\n // Connect the disposed signal handler.\n widget.disposed.connect(this._onWidgetDisposed, this);\n // Set the current and active widgets if needed.\n if (focused) {\n this._setWidgets(widget, widget);\n }\n }\n /**\n * Remove a widget from the focus tracker.\n *\n * #### Notes\n * If the widget is the `currentWidget`, the previous current widget\n * will become the new `currentWidget`.\n *\n * A widget will be automatically removed from the tracker if it\n * is disposed after being added.\n *\n * If the widget is not tracked, this is a no-op.\n */\n remove(widget) {\n // Bail early if the widget is not tracked.\n if (!this._numbers.has(widget)) {\n return;\n }\n // Disconnect the disposed signal handler.\n widget.disposed.disconnect(this._onWidgetDisposed, this);\n // Remove the event listeners.\n widget.node.removeEventListener('focus', this, true);\n widget.node.removeEventListener('blur', this, true);\n // Remove the widget from the internal data structures.\n ArrayExt.removeFirstOf(this._widgets, widget);\n this._nodes.delete(widget.node);\n this._numbers.delete(widget);\n // Bail early if the widget is not the current widget.\n if (this._currentWidget !== widget) {\n return;\n }\n // Filter the widgets for those which have had focus.\n let valid = this._widgets.filter(w => this._numbers.get(w) !== -1);\n // Get the valid widget with the max focus number.\n let previous = max(valid, (first, second) => {\n let a = this._numbers.get(first);\n let b = this._numbers.get(second);\n return a - b;\n }) || null;\n // Set the current and active widgets.\n this._setWidgets(previous, null);\n }\n /**\n * Handle the DOM events for the focus tracker.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the tracked nodes. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'focus':\n this._evtFocus(event);\n break;\n case 'blur':\n this._evtBlur(event);\n break;\n }\n }\n /**\n * Set the current and active widgets for the tracker.\n */\n _setWidgets(current, active) {\n // Swap the current widget.\n let oldCurrent = this._currentWidget;\n this._currentWidget = current;\n // Swap the active widget.\n let oldActive = this._activeWidget;\n this._activeWidget = active;\n // Emit the `currentChanged` signal if needed.\n if (oldCurrent !== current) {\n this._currentChanged.emit({ oldValue: oldCurrent, newValue: current });\n }\n // Emit the `activeChanged` signal if needed.\n if (oldActive !== active) {\n this._activeChanged.emit({ oldValue: oldActive, newValue: active });\n }\n }\n /**\n * Handle the `'focus'` event for a tracked widget.\n */\n _evtFocus(event) {\n // Find the widget which gained focus, which is known to exist.\n let widget = this._nodes.get(event.currentTarget);\n // Update the focus number if necessary.\n if (widget !== this._currentWidget) {\n this._numbers.set(widget, this._counter++);\n }\n // Set the current and active widgets.\n this._setWidgets(widget, widget);\n }\n /**\n * Handle the `'blur'` event for a tracked widget.\n */\n _evtBlur(event) {\n // Find the widget which lost focus, which is known to exist.\n let widget = this._nodes.get(event.currentTarget);\n // Get the node which being focused after this blur.\n let focusTarget = event.relatedTarget;\n // If no other node is being focused, clear the active widget.\n if (!focusTarget) {\n this._setWidgets(this._currentWidget, null);\n return;\n }\n // Bail if the focus widget is not changing.\n if (widget.node.contains(focusTarget)) {\n return;\n }\n // If no tracked widget is being focused, clear the active widget.\n if (!find(this._widgets, w => w.node.contains(focusTarget))) {\n this._setWidgets(this._currentWidget, null);\n return;\n }\n }\n /**\n * Handle the `disposed` signal for a tracked widget.\n */\n _onWidgetDisposed(sender) {\n this.remove(sender);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a grid.\n */\nclass GridLayout extends Layout {\n /**\n * Construct a new grid layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n super(options);\n this._dirty = false;\n this._rowSpacing = 4;\n this._columnSpacing = 4;\n this._items = [];\n this._rowStarts = [];\n this._columnStarts = [];\n this._rowSizers = [new BoxSizer()];\n this._columnSizers = [new BoxSizer()];\n this._box = null;\n if (options.rowCount !== undefined) {\n Private$4.reallocSizers(this._rowSizers, options.rowCount);\n }\n if (options.columnCount !== undefined) {\n Private$4.reallocSizers(this._columnSizers, options.columnCount);\n }\n if (options.rowSpacing !== undefined) {\n this._rowSpacing = Private$4.clampValue(options.rowSpacing);\n }\n if (options.columnSpacing !== undefined) {\n this._columnSpacing = Private$4.clampValue(options.columnSpacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the widgets and layout items.\n for (const item of this._items) {\n let widget = item.widget;\n item.dispose();\n widget.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._rowStarts.length = 0;\n this._rowSizers.length = 0;\n this._columnStarts.length = 0;\n this._columnSizers.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the number of rows in the layout.\n */\n get rowCount() {\n return this._rowSizers.length;\n }\n /**\n * Set the number of rows in the layout.\n *\n * #### Notes\n * The minimum row count is `1`.\n */\n set rowCount(value) {\n // Do nothing if the row count does not change.\n if (value === this.rowCount) {\n return;\n }\n // Reallocate the row sizers.\n Private$4.reallocSizers(this._rowSizers, value);\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the number of columns in the layout.\n */\n get columnCount() {\n return this._columnSizers.length;\n }\n /**\n * Set the number of columns in the layout.\n *\n * #### Notes\n * The minimum column count is `1`.\n */\n set columnCount(value) {\n // Do nothing if the column count does not change.\n if (value === this.columnCount) {\n return;\n }\n // Reallocate the column sizers.\n Private$4.reallocSizers(this._columnSizers, value);\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the row spacing for the layout.\n */\n get rowSpacing() {\n return this._rowSpacing;\n }\n /**\n * Set the row spacing for the layout.\n */\n set rowSpacing(value) {\n // Clamp the spacing to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the spacing does not change\n if (this._rowSpacing === value) {\n return;\n }\n // Update the internal spacing.\n this._rowSpacing = value;\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the column spacing for the layout.\n */\n get columnSpacing() {\n return this._columnSpacing;\n }\n /**\n * Set the col spacing for the layout.\n */\n set columnSpacing(value) {\n // Clamp the spacing to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the spacing does not change\n if (this._columnSpacing === value) {\n return;\n }\n // Update the internal spacing.\n this._columnSpacing = value;\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the stretch factor for a specific row.\n *\n * @param index - The row index of interest.\n *\n * @returns The stretch factor for the row.\n *\n * #### Notes\n * This returns `-1` if the index is out of range.\n */\n rowStretch(index) {\n let sizer = this._rowSizers[index];\n return sizer ? sizer.stretch : -1;\n }\n /**\n * Set the stretch factor for a specific row.\n *\n * @param index - The row index of interest.\n *\n * @param value - The stretch factor for the row.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n setRowStretch(index, value) {\n // Look up the row sizer.\n let sizer = this._rowSizers[index];\n // Bail if the index is out of range.\n if (!sizer) {\n return;\n }\n // Clamp the value to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the stretch does not change.\n if (sizer.stretch === value) {\n return;\n }\n // Update the sizer stretch.\n sizer.stretch = value;\n // Schedule an update of the parent.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Get the stretch factor for a specific column.\n *\n * @param index - The column index of interest.\n *\n * @returns The stretch factor for the column.\n *\n * #### Notes\n * This returns `-1` if the index is out of range.\n */\n columnStretch(index) {\n let sizer = this._columnSizers[index];\n return sizer ? sizer.stretch : -1;\n }\n /**\n * Set the stretch factor for a specific column.\n *\n * @param index - The column index of interest.\n *\n * @param value - The stretch factor for the column.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n setColumnStretch(index, value) {\n // Look up the column sizer.\n let sizer = this._columnSizers[index];\n // Bail if the index is out of range.\n if (!sizer) {\n return;\n }\n // Clamp the value to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the stretch does not change.\n if (sizer.stretch === value) {\n return;\n }\n // Update the sizer stretch.\n sizer.stretch = value;\n // Schedule an update of the parent.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n for (const item of this._items) {\n yield item.widget;\n }\n }\n /**\n * Add a widget to the grid layout.\n *\n * @param widget - The widget to add to the layout.\n *\n * #### Notes\n * If the widget is already contained in the layout, this is no-op.\n */\n addWidget(widget) {\n // Look up the index for the widget.\n let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n // Bail if the widget is already in the layout.\n if (i !== -1) {\n return;\n }\n // Add the widget to the layout.\n this._items.push(new LayoutItem(widget));\n // Attach the widget to the parent.\n if (this.parent) {\n this.attachWidget(widget);\n }\n }\n /**\n * Remove a widget from the grid layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Look up the index for the widget.\n let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n // Bail if the widget is not in the layout.\n if (i === -1) {\n return;\n }\n // Remove the widget from the layout.\n let item = ArrayExt.removeAt(this._items, i);\n // Detach the widget from the parent.\n if (this.parent) {\n this.detachWidget(widget);\n }\n // Dispose the layout item.\n item.dispose();\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n for (const widget of this) {\n this.attachWidget(widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param widget - The widget to attach to the parent.\n */\n attachWidget(widget) {\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param widget - The widget to detach from the parent.\n */\n detachWidget(widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Reset the min sizes of the sizers.\n for (let i = 0, n = this.rowCount; i < n; ++i) {\n this._rowSizers[i].minSize = 0;\n }\n for (let i = 0, n = this.columnCount; i < n; ++i) {\n this._columnSizers[i].minSize = 0;\n }\n // Filter for the visible layout items.\n let items = this._items.filter(it => !it.isHidden);\n // Fit the layout items.\n for (let i = 0, n = items.length; i < n; ++i) {\n items[i].fit();\n }\n // Get the max row and column index.\n let maxRow = this.rowCount - 1;\n let maxCol = this.columnCount - 1;\n // Sort the items by row span.\n items.sort(Private$4.rowSpanCmp);\n // Update the min sizes of the row sizers.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Fetch the item.\n let item = items[i];\n // Get the row bounds for the item.\n let config = GridLayout.getCellConfig(item.widget);\n let r1 = Math.min(config.row, maxRow);\n let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n // Distribute the minimum height to the sizers as needed.\n Private$4.distributeMin(this._rowSizers, r1, r2, item.minHeight);\n }\n // Sort the items by column span.\n items.sort(Private$4.columnSpanCmp);\n // Update the min sizes of the column sizers.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Fetch the item.\n let item = items[i];\n // Get the column bounds for the item.\n let config = GridLayout.getCellConfig(item.widget);\n let c1 = Math.min(config.column, maxCol);\n let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n // Distribute the minimum width to the sizers as needed.\n Private$4.distributeMin(this._columnSizers, c1, c2, item.minWidth);\n }\n // If no size constraint is needed, just update the parent.\n if (this.fitPolicy === 'set-no-constraint') {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n return;\n }\n // Set up the computed min size.\n let minH = maxRow * this._rowSpacing;\n let minW = maxCol * this._columnSpacing;\n // Add the sizer minimums to the computed min size.\n for (let i = 0, n = this.rowCount; i < n; ++i) {\n minH += this._rowSizers[i].minSize;\n }\n for (let i = 0, n = this.columnCount; i < n; ++i) {\n minW += this._columnSizers[i].minSize;\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the layout area adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Get the max row and column index.\n let maxRow = this.rowCount - 1;\n let maxCol = this.columnCount - 1;\n // Compute the total fixed row and column space.\n let fixedRowSpace = maxRow * this._rowSpacing;\n let fixedColSpace = maxCol * this._columnSpacing;\n // Distribute the available space to the box sizers.\n BoxEngine.calc(this._rowSizers, Math.max(0, height - fixedRowSpace));\n BoxEngine.calc(this._columnSizers, Math.max(0, width - fixedColSpace));\n // Update the row start positions.\n for (let i = 0, pos = top, n = this.rowCount; i < n; ++i) {\n this._rowStarts[i] = pos;\n pos += this._rowSizers[i].size + this._rowSpacing;\n }\n // Update the column start positions.\n for (let i = 0, pos = left, n = this.columnCount; i < n; ++i) {\n this._columnStarts[i] = pos;\n pos += this._columnSizers[i].size + this._columnSpacing;\n }\n // Update the geometry of the layout items.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Fetch the cell bounds for the widget.\n let config = GridLayout.getCellConfig(item.widget);\n let r1 = Math.min(config.row, maxRow);\n let c1 = Math.min(config.column, maxCol);\n let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n // Compute the cell geometry.\n let x = this._columnStarts[c1];\n let y = this._rowStarts[r1];\n let w = this._columnStarts[c2] + this._columnSizers[c2].size - x;\n let h = this._rowStarts[r2] + this._rowSizers[r2].size - y;\n // Update the geometry of the layout item.\n item.update(x, y, w, h);\n }\n }\n}\n/**\n * The namespace for the `GridLayout` class statics.\n */\n(function (GridLayout) {\n /**\n * Get the cell config for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The cell config for the widget.\n */\n function getCellConfig(widget) {\n return Private$4.cellConfigProperty.get(widget);\n }\n GridLayout.getCellConfig = getCellConfig;\n /**\n * Set the cell config for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the cell config.\n */\n function setCellConfig(widget, value) {\n Private$4.cellConfigProperty.set(widget, Private$4.normalizeConfig(value));\n }\n GridLayout.setCellConfig = setCellConfig;\n})(GridLayout || (GridLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$4;\n(function (Private) {\n /**\n * The property descriptor for the widget cell config.\n */\n Private.cellConfigProperty = new AttachedProperty({\n name: 'cellConfig',\n create: () => ({ row: 0, column: 0, rowSpan: 1, columnSpan: 1 }),\n changed: onChildCellConfigChanged\n });\n /**\n * Normalize a partial cell config object.\n */\n function normalizeConfig(config) {\n let row = Math.max(0, Math.floor(config.row || 0));\n let column = Math.max(0, Math.floor(config.column || 0));\n let rowSpan = Math.max(1, Math.floor(config.rowSpan || 0));\n let columnSpan = Math.max(1, Math.floor(config.columnSpan || 0));\n return { row, column, rowSpan, columnSpan };\n }\n Private.normalizeConfig = normalizeConfig;\n /**\n * Clamp a value to an integer >= 0.\n */\n function clampValue(value) {\n return Math.max(0, Math.floor(value));\n }\n Private.clampValue = clampValue;\n /**\n * A sort comparison function for row spans.\n */\n function rowSpanCmp(a, b) {\n let c1 = Private.cellConfigProperty.get(a.widget);\n let c2 = Private.cellConfigProperty.get(b.widget);\n return c1.rowSpan - c2.rowSpan;\n }\n Private.rowSpanCmp = rowSpanCmp;\n /**\n * A sort comparison function for column spans.\n */\n function columnSpanCmp(a, b) {\n let c1 = Private.cellConfigProperty.get(a.widget);\n let c2 = Private.cellConfigProperty.get(b.widget);\n return c1.columnSpan - c2.columnSpan;\n }\n Private.columnSpanCmp = columnSpanCmp;\n /**\n * Reallocate the box sizers for the given grid dimensions.\n */\n function reallocSizers(sizers, count) {\n // Coerce the count to the valid range.\n count = Math.max(1, Math.floor(count));\n // Add the missing sizers.\n while (sizers.length < count) {\n sizers.push(new BoxSizer());\n }\n // Remove the extra sizers.\n if (sizers.length > count) {\n sizers.length = count;\n }\n }\n Private.reallocSizers = reallocSizers;\n /**\n * Distribute a min size constraint across a range of sizers.\n */\n function distributeMin(sizers, i1, i2, minSize) {\n // Sanity check the indices.\n if (i2 < i1) {\n return;\n }\n // Handle the simple case of no cell span.\n if (i1 === i2) {\n let sizer = sizers[i1];\n sizer.minSize = Math.max(sizer.minSize, minSize);\n return;\n }\n // Compute the total current min size of the span.\n let totalMin = 0;\n for (let i = i1; i <= i2; ++i) {\n totalMin += sizers[i].minSize;\n }\n // Do nothing if the total is greater than the required.\n if (totalMin >= minSize) {\n return;\n }\n // Compute the portion of the space to allocate to each sizer.\n let portion = (minSize - totalMin) / (i2 - i1 + 1);\n // Add the portion to each sizer.\n for (let i = i1; i <= i2; ++i) {\n sizers[i].minSize += portion;\n }\n }\n Private.distributeMin = distributeMin;\n /**\n * The change handler for the child cell config property.\n */\n function onChildCellConfigChanged(child) {\n if (child.parent && child.parent.layout instanceof GridLayout) {\n child.parent.fit();\n }\n }\n})(Private$4 || (Private$4 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays menus as a canonical menu bar.\n */\nclass MenuBar extends Widget {\n /**\n * Construct a new menu bar.\n *\n * @param options - The options for initializing the menu bar.\n */\n constructor(options = {}) {\n super({ node: Private$3.createNode() });\n // Track the index of the item that is currently focused or hovered. -1 means nothing focused or hovered.\n this._activeIndex = -1;\n // Track which item can be focused using the TAB key. Unlike _activeIndex will\n // always point to a menuitem. Whenever you update this value, it's important\n // to follow it with an \"update-request\" message so that the `tabindex`\n // attribute on each menubar item gets properly updated.\n this._tabFocusIndex = 0;\n this._menus = [];\n this._childMenu = null;\n this._overflowMenu = null;\n this._menuItemSizes = [];\n this._overflowIndex = -1;\n this.addClass('lm-MenuBar');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.renderer = options.renderer || MenuBar.defaultRenderer;\n this._forceItemsPosition = options.forceItemsPosition || {\n forceX: true,\n forceY: true\n };\n this._overflowMenuOptions = options.overflowMenuOptions || {\n isVisible: true\n };\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._closeChildMenu();\n this._menus.length = 0;\n super.dispose();\n }\n /**\n * The child menu of the menu bar.\n *\n * #### Notes\n * This will be `null` if the menu bar does not have an open menu.\n */\n get childMenu() {\n return this._childMenu;\n }\n /**\n * The overflow index of the menu bar.\n */\n get overflowIndex() {\n return this._overflowIndex;\n }\n /**\n * The overflow menu of the menu bar.\n */\n get overflowMenu() {\n return this._overflowMenu;\n }\n /**\n * Get the menu bar content node.\n *\n * #### Notes\n * This is the node which holds the menu title nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-MenuBar-content')[0];\n }\n /**\n * Get the currently active menu.\n */\n get activeMenu() {\n return this._menus[this._activeIndex] || null;\n }\n /**\n * Set the currently active menu.\n *\n * #### Notes\n * If the menu does not exist, the menu will be set to `null`.\n */\n set activeMenu(value) {\n this.activeIndex = value ? this._menus.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently active menu.\n *\n * #### Notes\n * This will be `-1` if no menu is active.\n */\n get activeIndex() {\n return this._activeIndex;\n }\n /**\n * Set the index of the currently active menu.\n *\n * #### Notes\n * If the menu cannot be activated, the index will be set to `-1`.\n */\n set activeIndex(value) {\n // Adjust the value for an out of range index.\n if (value < 0 || value >= this._menus.length) {\n value = -1;\n }\n // An empty menu cannot be active\n if (value > -1 && this._menus[value].items.length === 0) {\n value = -1;\n }\n // Bail early if the index will not change.\n if (this._activeIndex === value) {\n return;\n }\n // Update the active index.\n this._activeIndex = value;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * A read-only array of the menus in the menu bar.\n */\n get menus() {\n return this._menus;\n }\n /**\n * Open the active menu and activate its first menu item.\n *\n * #### Notes\n * If there is no active menu, this is a no-op.\n */\n openActiveMenu() {\n // Bail early if there is no active item.\n if (this._activeIndex === -1) {\n return;\n }\n // Open the child menu.\n this._openChildMenu();\n // Activate the first item in the child menu.\n if (this._childMenu) {\n this._childMenu.activeIndex = -1;\n this._childMenu.activateNextItem();\n }\n }\n /**\n * Add a menu to the end of the menu bar.\n *\n * @param menu - The menu to add to the menu bar.\n *\n * #### Notes\n * If the menu is already added to the menu bar, it will be moved.\n */\n addMenu(menu, update = true) {\n this.insertMenu(this._menus.length, menu, update);\n }\n /**\n * Insert a menu into the menu bar at the specified index.\n *\n * @param index - The index at which to insert the menu.\n *\n * @param menu - The menu to insert into the menu bar.\n *\n * #### Notes\n * The index will be clamped to the bounds of the menus.\n *\n * If the menu is already added to the menu bar, it will be moved.\n */\n insertMenu(index, menu, update = true) {\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Look up the index of the menu.\n let i = this._menus.indexOf(menu);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._menus.length));\n // If the menu is not in the array, insert it.\n if (i === -1) {\n // Insert the menu into the array.\n ArrayExt.insert(this._menus, j, menu);\n // Add the styling class to the menu.\n menu.addClass('lm-MenuBar-menu');\n // Connect to the menu signals.\n menu.aboutToClose.connect(this._onMenuAboutToClose, this);\n menu.menuRequested.connect(this._onMenuMenuRequested, this);\n menu.title.changed.connect(this._onTitleChanged, this);\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n // There is nothing more to do.\n return;\n }\n // Otherwise, the menu exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._menus.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return;\n }\n // Move the menu to the new locations.\n ArrayExt.move(this._menus, i, j);\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n }\n /**\n * Remove a menu from the menu bar.\n *\n * @param menu - The menu to remove from the menu bar.\n *\n * #### Notes\n * This is a no-op if the menu is not in the menu bar.\n */\n removeMenu(menu, update = true) {\n this.removeMenuAt(this._menus.indexOf(menu), update);\n }\n /**\n * Remove the menu at a given index from the menu bar.\n *\n * @param index - The index of the menu to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeMenuAt(index, update = true) {\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Remove the menu from the array.\n let menu = ArrayExt.removeAt(this._menus, index);\n // Bail if the index is out of range.\n if (!menu) {\n return;\n }\n // Disconnect from the menu signals.\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n menu.title.changed.disconnect(this._onTitleChanged, this);\n // Remove the styling class from the menu.\n menu.removeClass('lm-MenuBar-menu');\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n }\n /**\n * Remove all menus from the menu bar.\n */\n clearMenus() {\n // Bail if there is nothing to remove.\n if (this._menus.length === 0) {\n return;\n }\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Disconnect from the menu signals and remove the styling class.\n for (let menu of this._menus) {\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n menu.title.changed.disconnect(this._onTitleChanged, this);\n menu.removeClass('lm-MenuBar-menu');\n }\n // Clear the menus array.\n this._menus.length = 0;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Handle the DOM events for the menu bar.\n *\n * @param event - The DOM event sent to the menu bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the menu bar's DOM nodes. It\n * should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'focusout':\n this._evtFocusOut(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('mousedown', this);\n this.node.addEventListener('mousemove', this);\n this.node.addEventListener('focusout', this);\n this.node.addEventListener('contextmenu', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('mousedown', this);\n this.node.removeEventListener('mousemove', this);\n this.node.removeEventListener('focusout', this);\n this.node.removeEventListener('contextmenu', this);\n this._closeChildMenu();\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n this._focusItemAt(0);\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n this.update();\n super.onResize(msg);\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n var _a;\n let menus = this._menus;\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let tabFocusIndex = this._tabFocusIndex >= 0 && this._tabFocusIndex < menus.length\n ? this._tabFocusIndex\n : 0;\n let length = this._overflowIndex > -1 ? this._overflowIndex : menus.length;\n let totalMenuSize = 0;\n let isVisible = false;\n // Check that the overflow menu doesn't count\n length = this._overflowMenu !== null ? length - 1 : length;\n let content = new Array(length);\n // Render visible menus\n for (let i = 0; i < length; ++i) {\n content[i] = renderer.renderItem({\n title: menus[i].title,\n active: i === activeIndex,\n tabbable: i === tabFocusIndex,\n disabled: menus[i].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = i;\n this.activeIndex = i;\n }\n });\n // Calculate size of current menu\n totalMenuSize += this._menuItemSizes[i];\n // Check if overflow menu is already rendered\n if (menus[i].title.label === this._overflowMenuOptions.title) {\n isVisible = true;\n length--;\n }\n }\n // Render overflow menu if needed and active\n if (this._overflowMenuOptions.isVisible) {\n if (this._overflowIndex > -1 && !isVisible) {\n // Create overflow menu\n if (this._overflowMenu === null) {\n const overflowMenuTitle = (_a = this._overflowMenuOptions.title) !== null && _a !== void 0 ? _a : '...';\n this._overflowMenu = new Menu({ commands: new CommandRegistry() });\n this._overflowMenu.title.label = overflowMenuTitle;\n this._overflowMenu.title.mnemonic = 0;\n this.addMenu(this._overflowMenu, false);\n }\n // Move menus to overflow menu\n for (let i = menus.length - 2; i >= length; i--) {\n const submenu = this.menus[i];\n submenu.title.mnemonic = 0;\n this._overflowMenu.insertItem(0, {\n type: 'submenu',\n submenu: submenu\n });\n this.removeMenu(submenu, false);\n }\n content[length] = renderer.renderItem({\n title: this._overflowMenu.title,\n active: length === activeIndex && menus[length].items.length !== 0,\n tabbable: length === tabFocusIndex,\n disabled: menus[length].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = length;\n this.activeIndex = length;\n }\n });\n length++;\n }\n else if (this._overflowMenu !== null) {\n // Remove submenus from overflow menu\n let overflowMenuItems = this._overflowMenu.items;\n let screenSize = this.node.offsetWidth;\n let n = this._overflowMenu.items.length;\n for (let i = 0; i < n; ++i) {\n let index = menus.length - 1 - i;\n if (screenSize - totalMenuSize > this._menuItemSizes[index]) {\n let menu = overflowMenuItems[0].submenu;\n this._overflowMenu.removeItemAt(0);\n this.insertMenu(length, menu, false);\n content[length] = renderer.renderItem({\n title: menu.title,\n active: false,\n tabbable: length === tabFocusIndex,\n disabled: menus[length].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = length;\n this.activeIndex = length;\n }\n });\n length++;\n }\n }\n if (this._overflowMenu.items.length === 0) {\n this.removeMenu(this._overflowMenu, false);\n content.pop();\n this._overflowMenu = null;\n this._overflowIndex = -1;\n }\n }\n }\n VirtualDOM.render(content, this.contentNode);\n this._updateOverflowIndex();\n }\n /**\n * Calculate and update the current overflow index.\n */\n _updateOverflowIndex() {\n if (!this._overflowMenuOptions.isVisible) {\n return;\n }\n // Get elements visible in the main menu bar\n const itemMenus = this.contentNode.childNodes;\n let screenSize = this.node.offsetWidth;\n let totalMenuSize = 0;\n let index = -1;\n let n = itemMenus.length;\n if (this._menuItemSizes.length == 0) {\n // Check if it is the first resize and get info about menu items sizes\n for (let i = 0; i < n; i++) {\n let item = itemMenus[i];\n // Add sizes to array\n totalMenuSize += item.offsetWidth;\n this._menuItemSizes.push(item.offsetWidth);\n if (totalMenuSize > screenSize && index === -1) {\n index = i;\n }\n }\n }\n else {\n // Calculate current menu size\n for (let i = 0; i < this._menuItemSizes.length; i++) {\n totalMenuSize += this._menuItemSizes[i];\n if (totalMenuSize > screenSize) {\n index = i;\n break;\n }\n }\n }\n this._overflowIndex = index;\n }\n /**\n * Handle the `'keydown'` event for the menu bar.\n *\n * #### Notes\n * All keys are trapped except the tab key that is ignored.\n */\n _evtKeyDown(event) {\n // Fetch the key code for the event.\n let kc = event.keyCode;\n // Reset the active index on tab, but do not trap the tab key.\n if (kc === 9) {\n this.activeIndex = -1;\n return;\n }\n // A menu bar handles all other keydown events.\n event.preventDefault();\n event.stopPropagation();\n // Enter, Space, Up Arrow, Down Arrow\n if (kc === 13 || kc === 32 || kc === 38 || kc === 40) {\n // The active index may have changed (for example, user hovers over an\n // item with the mouse), so be sure to use the focus index.\n this.activeIndex = this._tabFocusIndex;\n if (this.activeIndex !== this._tabFocusIndex) {\n // Bail if the setter refused to set activeIndex to tabFocusIndex\n // because it means that the item at tabFocusIndex cannot be opened (for\n // example, it has an empty menu)\n return;\n }\n this.openActiveMenu();\n return;\n }\n // Escape\n if (kc === 27) {\n this._closeChildMenu();\n this._focusItemAt(this.activeIndex);\n return;\n }\n // Left or Right Arrow\n if (kc === 37 || kc === 39) {\n let direction = kc === 37 ? -1 : 1;\n let start = this._tabFocusIndex + direction;\n let n = this._menus.length;\n for (let i = 0; i < n; i++) {\n let index = (n + start + direction * i) % n;\n if (this._menus[index].items.length) {\n this._focusItemAt(index);\n return;\n }\n }\n return;\n }\n // Get the pressed key character.\n let key = getKeyboardLayout().keyForKeydownEvent(event);\n // Bail if the key is not valid.\n if (!key) {\n return;\n }\n // Search for the next best matching mnemonic item.\n let start = this._activeIndex + 1;\n let result = Private$3.findMnemonic(this._menus, key, start);\n // Handle the requested mnemonic based on the search results.\n // If exactly one mnemonic is matched, that menu is opened.\n // Otherwise, the next mnemonic is activated if available,\n // followed by the auto mnemonic if available.\n if (result.index !== -1 && !result.multiple) {\n this.activeIndex = result.index;\n this.openActiveMenu();\n }\n else if (result.index !== -1) {\n this.activeIndex = result.index;\n this._focusItemAt(this.activeIndex);\n }\n else if (result.auto !== -1) {\n this.activeIndex = result.auto;\n this._focusItemAt(this.activeIndex);\n }\n }\n /**\n * Handle the `'mousedown'` event for the menu bar.\n */\n _evtMouseDown(event) {\n // Bail if the mouse press was not on the menu bar. This can occur\n // when the document listener is installed for an active menu bar.\n if (!ElementExt.hitTest(this.node, event.clientX, event.clientY)) {\n return;\n }\n // Stop the propagation of the event. Immediate propagation is\n // also stopped so that an open menu does not handle the event.\n event.stopPropagation();\n event.stopImmediatePropagation();\n // Check if the mouse is over one of the menu items.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // If the press was not on an item, close the child menu.\n if (index === -1) {\n this._closeChildMenu();\n return;\n }\n // If the press was not the left mouse button, do nothing further.\n if (event.button !== 0) {\n return;\n }\n // Otherwise, toggle the open state of the child menu.\n if (this._childMenu) {\n this._closeChildMenu();\n this.activeIndex = index;\n }\n else {\n // If we don't call preventDefault() here, then the item in the menu\n // bar will take focus over the menu that is being opened.\n event.preventDefault();\n const position = this._positionForMenu(index);\n Menu.saveWindowData();\n // Begin DOM modifications.\n this.activeIndex = index;\n this._openChildMenu(position);\n }\n }\n /**\n * Handle the `'mousemove'` event for the menu bar.\n */\n _evtMouseMove(event) {\n // Check if the mouse is over one of the menu items.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // Bail early if the active index will not change.\n if (index === this._activeIndex) {\n return;\n }\n // Bail early if a child menu is open and the mouse is not over\n // an item. This allows the child menu to be kept open when the\n // mouse is over the empty part of the menu bar.\n if (index === -1 && this._childMenu) {\n return;\n }\n // Get position for the new menu >before< updating active index.\n const position = index >= 0 && this._childMenu ? this._positionForMenu(index) : null;\n // Before any modification, update window data.\n Menu.saveWindowData();\n // Begin DOM modifications.\n // Update the active index to the hovered item.\n this.activeIndex = index;\n // Open the new menu if a menu is already open.\n if (position) {\n this._openChildMenu(position);\n }\n }\n /**\n * Find initial position for the menu based on menubar item position.\n *\n * NOTE: this should be called before updating active index to avoid\n * an additional layout and style invalidation as changing active\n * index modifies DOM.\n */\n _positionForMenu(index) {\n let itemNode = this.contentNode.children[index];\n let { left, bottom } = itemNode.getBoundingClientRect();\n return {\n top: bottom,\n left\n };\n }\n /**\n * Handle the `'focusout'` event for the menu bar.\n */\n _evtFocusOut(event) {\n // Reset the active index if there is no open menu and the menubar is losing focus.\n if (!this._childMenu && !this.node.contains(event.relatedTarget)) {\n this.activeIndex = -1;\n }\n }\n /**\n * Focus an item in the menu bar.\n *\n * #### Notes\n * Does not open the associated menu.\n */\n _focusItemAt(index) {\n const itemNode = this.contentNode.childNodes[index];\n if (itemNode) {\n itemNode.focus();\n }\n }\n /**\n * Open the child menu at the active index immediately.\n *\n * If a different child menu is already open, it will be closed,\n * even if there is no active menu.\n */\n _openChildMenu(options = {}) {\n // If there is no active menu, close the current menu.\n let newMenu = this.activeMenu;\n if (!newMenu) {\n this._closeChildMenu();\n return;\n }\n // Bail if there is no effective menu change.\n let oldMenu = this._childMenu;\n if (oldMenu === newMenu) {\n return;\n }\n // Swap the internal menu reference.\n this._childMenu = newMenu;\n // Close the current menu, or setup for the new menu.\n if (oldMenu) {\n oldMenu.close();\n }\n else {\n document.addEventListener('mousedown', this, true);\n }\n // Update the tab focus index and ensure the menu bar is updated.\n this._tabFocusIndex = this.activeIndex;\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n // Get the positioning data for the new menu.\n let { left, top } = options;\n if (typeof left === 'undefined' || typeof top === 'undefined') {\n ({ left, top } = this._positionForMenu(this._activeIndex));\n }\n // Begin DOM modifications\n if (!oldMenu) {\n // Continue setup for new menu\n this.addClass('lm-mod-active');\n }\n // Open the new menu at the computed location.\n if (newMenu.items.length > 0) {\n newMenu.open(left, top, this._forceItemsPosition);\n }\n }\n /**\n * Close the child menu immediately.\n *\n * This is a no-op if a child menu is not open.\n */\n _closeChildMenu() {\n // Bail if no child menu is open.\n if (!this._childMenu) {\n return;\n }\n // Remove the active class from the menu bar.\n this.removeClass('lm-mod-active');\n // Remove the document listeners.\n document.removeEventListener('mousedown', this, true);\n // Clear the internal menu reference.\n let menu = this._childMenu;\n this._childMenu = null;\n // Close the menu.\n menu.close();\n // Reset the active index.\n this.activeIndex = -1;\n }\n /**\n * Handle the `aboutToClose` signal of a menu.\n */\n _onMenuAboutToClose(sender) {\n // Bail if the sender is not the child menu.\n if (sender !== this._childMenu) {\n return;\n }\n // Remove the active class from the menu bar.\n this.removeClass('lm-mod-active');\n // Remove the document listeners.\n document.removeEventListener('mousedown', this, true);\n // Clear the internal menu reference.\n this._childMenu = null;\n // Reset the active index.\n this.activeIndex = -1;\n }\n /**\n * Handle the `menuRequested` signal of a child menu.\n */\n _onMenuMenuRequested(sender, args) {\n // Bail if the sender is not the child menu.\n if (sender !== this._childMenu) {\n return;\n }\n // Look up the active index and menu count.\n let i = this._activeIndex;\n let n = this._menus.length;\n // Active the next requested index.\n switch (args) {\n case 'next':\n this.activeIndex = i === n - 1 ? 0 : i + 1;\n break;\n case 'previous':\n this.activeIndex = i === 0 ? n - 1 : i - 1;\n break;\n }\n // Open the active menu.\n this.openActiveMenu();\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged() {\n this.update();\n }\n}\n/**\n * The namespace for the `MenuBar` class statics.\n */\n(function (MenuBar) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n /**\n * Render the virtual element for a menu bar item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n let aria = this.createItemARIA(data);\n return h.li({\n className,\n dataset,\n ...(data.disabled ? {} : { tabindex: data.tabbable ? '0' : '-1' }),\n onfocus: data.onfocus,\n ...aria\n }, this.renderIcon(data), this.renderLabel(data));\n }\n /**\n * Render the icon element for a menu bar item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the item icon.\n */\n renderIcon(data) {\n let className = this.createIconClass(data);\n // If data.title.icon is undefined, it will be ignored.\n return h.div({ className }, data.title.icon, data.title.iconLabel);\n }\n /**\n * Render the label element for a menu item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the item label.\n */\n renderLabel(data) {\n let content = this.formatLabel(data);\n return h.div({ className: 'lm-MenuBar-itemLabel' }, content);\n }\n /**\n * Create the class name for the menu bar item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the menu item.\n */\n createItemClass(data) {\n let name = 'lm-MenuBar-item';\n if (data.title.className) {\n name += ` ${data.title.className}`;\n }\n if (data.active && !data.disabled) {\n name += ' lm-mod-active';\n }\n return name;\n }\n /**\n * Create the dataset for a menu bar item.\n *\n * @param data - The data to use for the item.\n *\n * @returns The dataset for the menu bar item.\n */\n createItemDataset(data) {\n return data.title.dataset;\n }\n /**\n * Create the aria attributes for menu bar item.\n *\n * @param data - The data to use for the aria attributes.\n *\n * @returns The aria attributes object for the item.\n */\n createItemARIA(data) {\n return {\n role: 'menuitem',\n 'aria-haspopup': 'true',\n 'aria-disabled': data.disabled ? 'true' : 'false'\n };\n }\n /**\n * Create the class name for the menu bar item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-MenuBar-itemIcon';\n let extra = data.title.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the render content for the label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatLabel(data) {\n // Fetch the label text and mnemonic index.\n let { label, mnemonic } = data.title;\n // If the index is out of range, do not modify the label.\n if (mnemonic < 0 || mnemonic >= label.length) {\n return label;\n }\n // Split the label into parts.\n let prefix = label.slice(0, mnemonic);\n let suffix = label.slice(mnemonic + 1);\n let char = label[mnemonic];\n // Wrap the mnemonic character in a span.\n let span = h.span({ className: 'lm-MenuBar-itemMnemonic' }, char);\n // Return the content parts.\n return [prefix, span, suffix];\n }\n }\n MenuBar.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n MenuBar.defaultRenderer = new Renderer();\n})(MenuBar || (MenuBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$3;\n(function (Private) {\n /**\n * Create the DOM node for a menu bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.className = 'lm-MenuBar-content';\n node.appendChild(content);\n content.setAttribute('role', 'menubar');\n return node;\n }\n Private.createNode = createNode;\n /**\n * Find the best matching mnemonic item.\n *\n * The search starts at the given index and wraps around.\n */\n function findMnemonic(menus, key, start) {\n // Setup the result variables.\n let index = -1;\n let auto = -1;\n let multiple = false;\n // Normalize the key to upper case.\n let upperKey = key.toUpperCase();\n // Search the items from the given start index.\n for (let i = 0, n = menus.length; i < n; ++i) {\n // Compute the wrapped index.\n let k = (i + start) % n;\n // Look up the menu title.\n let title = menus[k].title;\n // Ignore titles with an empty label.\n if (title.label.length === 0) {\n continue;\n }\n // Look up the mnemonic index for the label.\n let mn = title.mnemonic;\n // Handle a valid mnemonic index.\n if (mn >= 0 && mn < title.label.length) {\n if (title.label[mn].toUpperCase() === upperKey) {\n if (index === -1) {\n index = k;\n }\n else {\n multiple = true;\n }\n }\n continue;\n }\n // Finally, handle the auto index if possible.\n if (auto === -1 && title.label[0].toUpperCase() === upperKey) {\n auto = k;\n }\n }\n // Return the search results.\n return { index, multiple, auto };\n }\n Private.findMnemonic = findMnemonic;\n})(Private$3 || (Private$3 = {}));\n\n/**\n * A widget which implements a canonical scroll bar.\n */\nclass ScrollBar extends Widget {\n /**\n * Construct a new scroll bar.\n *\n * @param options - The options for initializing the scroll bar.\n */\n constructor(options = {}) {\n super({ node: Private$2.createNode() });\n /**\n * A timeout callback for repeating the mouse press.\n */\n this._onRepeat = () => {\n // Clear the repeat timer id.\n this._repeatTimer = -1;\n // Bail if the mouse has been released.\n if (!this._pressData) {\n return;\n }\n // Look up the part that was pressed.\n let part = this._pressData.part;\n // Bail if the thumb was pressed.\n if (part === 'thumb') {\n return;\n }\n // Schedule the timer for another repeat.\n this._repeatTimer = window.setTimeout(this._onRepeat, 20);\n // Get the current mouse position.\n let mouseX = this._pressData.mouseX;\n let mouseY = this._pressData.mouseY;\n // Handle a decrement button repeat.\n if (part === 'decrement') {\n // Bail if the mouse is not over the button.\n if (!ElementExt.hitTest(this.decrementNode, mouseX, mouseY)) {\n return;\n }\n // Emit the step requested signal.\n this._stepRequested.emit('decrement');\n // Finished.\n return;\n }\n // Handle an increment button repeat.\n if (part === 'increment') {\n // Bail if the mouse is not over the button.\n if (!ElementExt.hitTest(this.incrementNode, mouseX, mouseY)) {\n return;\n }\n // Emit the step requested signal.\n this._stepRequested.emit('increment');\n // Finished.\n return;\n }\n // Handle a track repeat.\n if (part === 'track') {\n // Bail if the mouse is not over the track.\n if (!ElementExt.hitTest(this.trackNode, mouseX, mouseY)) {\n return;\n }\n // Fetch the thumb node.\n let thumbNode = this.thumbNode;\n // Bail if the mouse is over the thumb.\n if (ElementExt.hitTest(thumbNode, mouseX, mouseY)) {\n return;\n }\n // Fetch the client rect for the thumb.\n let thumbRect = thumbNode.getBoundingClientRect();\n // Determine the direction for the page request.\n let dir;\n if (this._orientation === 'horizontal') {\n dir = mouseX < thumbRect.left ? 'decrement' : 'increment';\n }\n else {\n dir = mouseY < thumbRect.top ? 'decrement' : 'increment';\n }\n // Emit the page requested signal.\n this._pageRequested.emit(dir);\n // Finished.\n return;\n }\n };\n this._value = 0;\n this._page = 10;\n this._maximum = 100;\n this._repeatTimer = -1;\n this._pressData = null;\n this._thumbMoved = new Signal(this);\n this._stepRequested = new Signal(this);\n this._pageRequested = new Signal(this);\n this.addClass('lm-ScrollBar');\n this.setFlag(Widget.Flag.DisallowLayout);\n // Set the orientation.\n this._orientation = options.orientation || 'vertical';\n this.dataset['orientation'] = this._orientation;\n // Parse the rest of the options.\n if (options.maximum !== undefined) {\n this._maximum = Math.max(0, options.maximum);\n }\n if (options.page !== undefined) {\n this._page = Math.max(0, options.page);\n }\n if (options.value !== undefined) {\n this._value = Math.max(0, Math.min(options.value, this._maximum));\n }\n }\n /**\n * A signal emitted when the user moves the scroll thumb.\n *\n * #### Notes\n * The payload is the current value of the scroll bar.\n */\n get thumbMoved() {\n return this._thumbMoved;\n }\n /**\n * A signal emitted when the user clicks a step button.\n *\n * #### Notes\n * The payload is whether a decrease or increase is requested.\n */\n get stepRequested() {\n return this._stepRequested;\n }\n /**\n * A signal emitted when the user clicks the scroll track.\n *\n * #### Notes\n * The payload is whether a decrease or increase is requested.\n */\n get pageRequested() {\n return this._pageRequested;\n }\n /**\n * Get the orientation of the scroll bar.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the orientation of the scroll bar.\n */\n set orientation(value) {\n // Do nothing if the orientation does not change.\n if (this._orientation === value) {\n return;\n }\n // Release the mouse before making changes.\n this._releaseMouse();\n // Update the internal orientation.\n this._orientation = value;\n this.dataset['orientation'] = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the current value of the scroll bar.\n */\n get value() {\n return this._value;\n }\n /**\n * Set the current value of the scroll bar.\n *\n * #### Notes\n * The value will be clamped to the range `[0, maximum]`.\n */\n set value(value) {\n // Clamp the value to the allowable range.\n value = Math.max(0, Math.min(value, this._maximum));\n // Do nothing if the value does not change.\n if (this._value === value) {\n return;\n }\n // Update the internal value.\n this._value = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the page size of the scroll bar.\n *\n * #### Notes\n * The page size is the amount of visible content in the scrolled\n * region, expressed in data units. It determines the size of the\n * scroll bar thumb.\n */\n get page() {\n return this._page;\n }\n /**\n * Set the page size of the scroll bar.\n *\n * #### Notes\n * The page size will be clamped to the range `[0, Infinity]`.\n */\n set page(value) {\n // Clamp the page size to the allowable range.\n value = Math.max(0, value);\n // Do nothing if the value does not change.\n if (this._page === value) {\n return;\n }\n // Update the internal page size.\n this._page = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the maximum value of the scroll bar.\n */\n get maximum() {\n return this._maximum;\n }\n /**\n * Set the maximum value of the scroll bar.\n *\n * #### Notes\n * The max size will be clamped to the range `[0, Infinity]`.\n */\n set maximum(value) {\n // Clamp the value to the allowable range.\n value = Math.max(0, value);\n // Do nothing if the value does not change.\n if (this._maximum === value) {\n return;\n }\n // Update the internal values.\n this._maximum = value;\n // Clamp the current value to the new range.\n this._value = Math.min(this._value, value);\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * The scroll bar decrement button node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get decrementNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-button')[0];\n }\n /**\n * The scroll bar increment button node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get incrementNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-button')[1];\n }\n /**\n * The scroll bar track node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get trackNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-track')[0];\n }\n /**\n * The scroll bar thumb node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get thumbNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-thumb')[0];\n }\n /**\n * Handle the DOM events for the scroll bar.\n *\n * @param event - The DOM event sent to the scroll bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the scroll bar's DOM node.\n *\n * This should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'mouseup':\n this._evtMouseUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A method invoked on a 'before-attach' message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('mousedown', this);\n this.update();\n }\n /**\n * A method invoked on an 'after-detach' message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('mousedown', this);\n this._releaseMouse();\n }\n /**\n * A method invoked on an 'update-request' message.\n */\n onUpdateRequest(msg) {\n // Convert the value and page into percentages.\n let value = (this._value * 100) / this._maximum;\n let page = (this._page * 100) / (this._page + this._maximum);\n // Clamp the value and page to the relevant range.\n value = Math.max(0, Math.min(value, 100));\n page = Math.max(0, Math.min(page, 100));\n // Fetch the thumb style.\n let thumbStyle = this.thumbNode.style;\n // Update the thumb style for the current orientation.\n if (this._orientation === 'horizontal') {\n thumbStyle.top = '';\n thumbStyle.height = '';\n thumbStyle.left = `${value}%`;\n thumbStyle.width = `${page}%`;\n thumbStyle.transform = `translate(${-value}%, 0%)`;\n }\n else {\n thumbStyle.left = '';\n thumbStyle.width = '';\n thumbStyle.top = `${value}%`;\n thumbStyle.height = `${page}%`;\n thumbStyle.transform = `translate(0%, ${-value}%)`;\n }\n }\n /**\n * Handle the `'keydown'` event for the scroll bar.\n */\n _evtKeyDown(event) {\n // Stop all input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Ignore anything except the `Escape` key.\n if (event.keyCode !== 27) {\n return;\n }\n // Fetch the previous scroll value.\n let value = this._pressData ? this._pressData.value : -1;\n // Release the mouse.\n this._releaseMouse();\n // Restore the old scroll value if possible.\n if (value !== -1) {\n this._moveThumb(value);\n }\n }\n /**\n * Handle the `'mousedown'` event for the scroll bar.\n */\n _evtMouseDown(event) {\n // Do nothing if it's not a left mouse press.\n if (event.button !== 0) {\n return;\n }\n // Send an activate request to the scroll bar. This can be\n // used by message hooks to activate something relevant.\n this.activate();\n // Do nothing if the mouse is already captured.\n if (this._pressData) {\n return;\n }\n // Find the pressed scroll bar part.\n let part = Private$2.findPart(this, event.target);\n // Do nothing if the part is not of interest.\n if (!part) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Override the mouse cursor.\n let override = Drag.overrideCursor('default');\n // Set up the press data.\n this._pressData = {\n part,\n override,\n delta: -1,\n value: -1,\n mouseX: event.clientX,\n mouseY: event.clientY\n };\n // Add the extra event listeners.\n document.addEventListener('mousemove', this, true);\n document.addEventListener('mouseup', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('contextmenu', this, true);\n // Handle a thumb press.\n if (part === 'thumb') {\n // Fetch the thumb node.\n let thumbNode = this.thumbNode;\n // Fetch the client rect for the thumb.\n let thumbRect = thumbNode.getBoundingClientRect();\n // Update the press data delta for the current orientation.\n if (this._orientation === 'horizontal') {\n this._pressData.delta = event.clientX - thumbRect.left;\n }\n else {\n this._pressData.delta = event.clientY - thumbRect.top;\n }\n // Add the active class to the thumb node.\n thumbNode.classList.add('lm-mod-active');\n // Store the current value in the press data.\n this._pressData.value = this._value;\n // Finished.\n return;\n }\n // Handle a track press.\n if (part === 'track') {\n // Fetch the client rect for the thumb.\n let thumbRect = this.thumbNode.getBoundingClientRect();\n // Determine the direction for the page request.\n let dir;\n if (this._orientation === 'horizontal') {\n dir = event.clientX < thumbRect.left ? 'decrement' : 'increment';\n }\n else {\n dir = event.clientY < thumbRect.top ? 'decrement' : 'increment';\n }\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the page requested signal.\n this._pageRequested.emit(dir);\n // Finished.\n return;\n }\n // Handle a decrement button press.\n if (part === 'decrement') {\n // Add the active class to the decrement node.\n this.decrementNode.classList.add('lm-mod-active');\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the step requested signal.\n this._stepRequested.emit('decrement');\n // Finished.\n return;\n }\n // Handle an increment button press.\n if (part === 'increment') {\n // Add the active class to the increment node.\n this.incrementNode.classList.add('lm-mod-active');\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the step requested signal.\n this._stepRequested.emit('increment');\n // Finished.\n return;\n }\n }\n /**\n * Handle the `'mousemove'` event for the scroll bar.\n */\n _evtMouseMove(event) {\n // Do nothing if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Update the mouse position.\n this._pressData.mouseX = event.clientX;\n this._pressData.mouseY = event.clientY;\n // Bail if the thumb is not being dragged.\n if (this._pressData.part !== 'thumb') {\n return;\n }\n // Get the client rect for the thumb and track.\n let thumbRect = this.thumbNode.getBoundingClientRect();\n let trackRect = this.trackNode.getBoundingClientRect();\n // Fetch the scroll geometry based on the orientation.\n let trackPos;\n let trackSpan;\n if (this._orientation === 'horizontal') {\n trackPos = event.clientX - trackRect.left - this._pressData.delta;\n trackSpan = trackRect.width - thumbRect.width;\n }\n else {\n trackPos = event.clientY - trackRect.top - this._pressData.delta;\n trackSpan = trackRect.height - thumbRect.height;\n }\n // Compute the desired value from the scroll geometry.\n let value = trackSpan === 0 ? 0 : (trackPos * this._maximum) / trackSpan;\n // Move the thumb to the computed value.\n this._moveThumb(value);\n }\n /**\n * Handle the `'mouseup'` event for the scroll bar.\n */\n _evtMouseUp(event) {\n // Do nothing if it's not a left mouse release.\n if (event.button !== 0) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse.\n this._releaseMouse();\n }\n /**\n * Release the mouse and restore the node states.\n */\n _releaseMouse() {\n // Bail if there is no press data.\n if (!this._pressData) {\n return;\n }\n // Clear the repeat timer.\n clearTimeout(this._repeatTimer);\n this._repeatTimer = -1;\n // Clear the press data.\n this._pressData.override.dispose();\n this._pressData = null;\n // Remove the extra event listeners.\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('contextmenu', this, true);\n // Remove the active classes from the nodes.\n this.thumbNode.classList.remove('lm-mod-active');\n this.decrementNode.classList.remove('lm-mod-active');\n this.incrementNode.classList.remove('lm-mod-active');\n }\n /**\n * Move the thumb to the specified position.\n */\n _moveThumb(value) {\n // Clamp the value to the allowed range.\n value = Math.max(0, Math.min(value, this._maximum));\n // Bail if the value does not change.\n if (this._value === value) {\n return;\n }\n // Update the internal value.\n this._value = value;\n // Schedule an update of the scroll bar.\n this.update();\n // Emit the thumb moved signal.\n this._thumbMoved.emit(value);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$2;\n(function (Private) {\n /**\n * Create the DOM node for a scroll bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let decrement = document.createElement('div');\n let increment = document.createElement('div');\n let track = document.createElement('div');\n let thumb = document.createElement('div');\n decrement.className = 'lm-ScrollBar-button';\n increment.className = 'lm-ScrollBar-button';\n decrement.dataset['action'] = 'decrement';\n increment.dataset['action'] = 'increment';\n track.className = 'lm-ScrollBar-track';\n thumb.className = 'lm-ScrollBar-thumb';\n track.appendChild(thumb);\n node.appendChild(decrement);\n node.appendChild(track);\n node.appendChild(increment);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Find the scroll bar part which contains the given target.\n */\n function findPart(scrollBar, target) {\n // Test the thumb.\n if (scrollBar.thumbNode.contains(target)) {\n return 'thumb';\n }\n // Test the track.\n if (scrollBar.trackNode.contains(target)) {\n return 'track';\n }\n // Test the decrement button.\n if (scrollBar.decrementNode.contains(target)) {\n return 'decrement';\n }\n // Test the increment button.\n if (scrollBar.incrementNode.contains(target)) {\n return 'increment';\n }\n // Indicate no match.\n return null;\n }\n Private.findPart = findPart;\n})(Private$2 || (Private$2 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation which holds a single widget.\n *\n * #### Notes\n * This class is useful for creating simple container widgets which\n * hold a single child. The child should be positioned with CSS.\n */\nclass SingletonLayout extends Layout {\n constructor() {\n super(...arguments);\n this._widget = null;\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n if (this._widget) {\n let widget = this._widget;\n this._widget = null;\n widget.dispose();\n }\n super.dispose();\n }\n /**\n * Get the child widget for the layout.\n */\n get widget() {\n return this._widget;\n }\n /**\n * Set the child widget for the layout.\n *\n * #### Notes\n * Setting the child widget will cause the old child widget to be\n * automatically disposed. If that is not desired, set the parent\n * of the old child to `null` before assigning a new child.\n */\n set widget(widget) {\n // Remove the widget from its current parent. This is a no-op\n // if the widget's parent is already the layout parent widget.\n if (widget) {\n widget.parent = this.parent;\n }\n // Bail early if the widget does not change.\n if (this._widget === widget) {\n return;\n }\n // Dispose of the old child widget.\n if (this._widget) {\n this._widget.dispose();\n }\n // Update the internal widget.\n this._widget = widget;\n // Attach the new child widget if needed.\n if (this.parent && widget) {\n this.attachWidget(widget);\n }\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n if (this._widget) {\n yield this._widget;\n }\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Bail early if the widget does not exist in the layout.\n if (this._widget !== widget) {\n return;\n }\n // Clear the internal widget.\n this._widget = null;\n // If the layout is parented, detach the widget from the DOM.\n if (this.parent) {\n this.detachWidget(widget);\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n for (const widget of this) {\n this.attachWidget(widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This method is called automatically by the single layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation adds the widgets's node to the parent's\n * node at the proper location, and sends the appropriate attach\n * messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is added to the parent's node.\n */\n attachWidget(widget) {\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This method is called automatically by the single layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation removes the widget's node from the\n * parent's node, and sends the appropriate detach messages to the\n * widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is removed from the parent's node.\n */\n detachWidget(widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout where visible widgets are stacked atop one another.\n *\n * #### Notes\n * The Z-order of the visible widgets follows their layout order.\n */\nclass StackedLayout extends PanelLayout {\n constructor(options = {}) {\n super(options);\n this._dirty = false;\n this._items = [];\n this._box = null;\n this._hiddenMode =\n options.hiddenMode !== undefined\n ? options.hiddenMode\n : Widget.HiddenMode.Display;\n }\n /**\n * The method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n set hiddenMode(v) {\n if (this._hiddenMode === v) {\n return;\n }\n this._hiddenMode = v;\n if (this.widgets.length > 1) {\n this.widgets.forEach(w => {\n w.hiddenMode = this._hiddenMode;\n });\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Using transform create an additional layer in the pixel pipeline\n // to limit the number of layer, it is set only if there is more than one widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale &&\n this._items.length > 0) {\n if (this._items.length === 1) {\n this.widgets[0].hiddenMode = Widget.HiddenMode.Scale;\n }\n widget.hiddenMode = Widget.HiddenMode.Scale;\n }\n else {\n widget.hiddenMode = Widget.HiddenMode.Display;\n }\n // Create and add a new layout item for the widget.\n ArrayExt.insert(this._items, index, new LayoutItem(widget));\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the layout item for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n // Post an update request for the parent widget.\n this.parent.update();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the layout item for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Reset the z-index for the widget.\n item.widget.node.style.zIndex = '';\n // Reset the hidden mode for the widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale) {\n widget.hiddenMode = Widget.HiddenMode.Display;\n // Reset the hidden mode for the first widget if necessary.\n if (this._items.length === 1) {\n this._items[0].widget.hiddenMode = Widget.HiddenMode.Display;\n }\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Set up the computed minimum size.\n let minW = 0;\n let minH = 0;\n // Update the computed minimum size.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the computed minimum size.\n minW = Math.max(minW, item.minWidth);\n minH = Math.max(minH, item.minHeight);\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Update the widget stacking order and layout geometry.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Set the z-index for the widget.\n item.widget.node.style.zIndex = `${i}`;\n // Update the item geometry.\n item.update(left, top, width, height);\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel where visible widgets are stacked atop one another.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link StackedLayout}.\n */\nclass StackedPanel extends Panel {\n /**\n * Construct a new stacked panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super({ layout: Private$1.createLayout(options) });\n this._widgetRemoved = new Signal(this);\n this.addClass('lm-StackedPanel');\n }\n /**\n * The method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this.layout.hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n set hiddenMode(v) {\n this.layout.hiddenMode = v;\n }\n /**\n * A signal emitted when a widget is removed from a stacked panel.\n */\n get widgetRemoved() {\n return this._widgetRemoved;\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-StackedPanel-child');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-StackedPanel-child');\n this._widgetRemoved.emit(msg.child);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$1;\n(function (Private) {\n /**\n * Create a stacked layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new StackedLayout();\n }\n Private.createLayout = createLayout;\n})(Private$1 || (Private$1 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which combines a `TabBar` and a `StackedPanel`.\n *\n * #### Notes\n * This is a simple panel which handles the common case of a tab bar\n * placed next to a content area. The selected tab controls the widget\n * which is shown in the content area.\n *\n * For use cases which require more control than is provided by this\n * panel, the `TabBar` widget may be used independently.\n */\nclass TabPanel extends Widget {\n /**\n * Construct a new tab panel.\n *\n * @param options - The options for initializing the tab panel.\n */\n constructor(options = {}) {\n super();\n this._currentChanged = new Signal(this);\n this._addRequested = new Signal(this);\n this.addClass('lm-TabPanel');\n // Create the tab bar and stacked panel.\n this.tabBar = new TabBar(options);\n this.tabBar.addClass('lm-TabPanel-tabBar');\n this.stackedPanel = new StackedPanel();\n this.stackedPanel.addClass('lm-TabPanel-stackedPanel');\n // Connect the tab bar signal handlers.\n this.tabBar.tabMoved.connect(this._onTabMoved, this);\n this.tabBar.currentChanged.connect(this._onCurrentChanged, this);\n this.tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n this.tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n this.tabBar.addRequested.connect(this._onTabAddRequested, this);\n // Connect the stacked panel signal handlers.\n this.stackedPanel.widgetRemoved.connect(this._onWidgetRemoved, this);\n // Get the data related to the placement.\n this._tabPlacement = options.tabPlacement || 'top';\n let direction = Private.directionFromPlacement(this._tabPlacement);\n let orientation = Private.orientationFromPlacement(this._tabPlacement);\n // Configure the tab bar for the placement.\n this.tabBar.orientation = orientation;\n this.tabBar.dataset['placement'] = this._tabPlacement;\n // Create the box layout.\n let layout = new BoxLayout({ direction, spacing: 0 });\n // Set the stretch factors for the child widgets.\n BoxLayout.setStretch(this.tabBar, 0);\n BoxLayout.setStretch(this.stackedPanel, 1);\n // Add the child widgets to the layout.\n layout.addWidget(this.tabBar);\n layout.addWidget(this.stackedPanel);\n // Install the layout on the tab panel.\n this.layout = layout;\n }\n /**\n * A signal emitted when the current tab is changed.\n *\n * #### Notes\n * This signal is emitted when the currently selected tab is changed\n * either through user or programmatic interaction.\n *\n * Notably, this signal is not emitted when the index of the current\n * tab changes due to tabs being inserted, removed, or moved. It is\n * only emitted when the actual current tab node is changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * Get the index of the currently selected tab.\n *\n * #### Notes\n * This will be `-1` if no tab is selected.\n */\n get currentIndex() {\n return this.tabBar.currentIndex;\n }\n /**\n * Set the index of the currently selected tab.\n *\n * #### Notes\n * If the index is out of range, it will be set to `-1`.\n */\n set currentIndex(value) {\n this.tabBar.currentIndex = value;\n }\n /**\n * Get the currently selected widget.\n *\n * #### Notes\n * This will be `null` if there is no selected tab.\n */\n get currentWidget() {\n let title = this.tabBar.currentTitle;\n return title ? title.owner : null;\n }\n /**\n * Set the currently selected widget.\n *\n * #### Notes\n * If the widget is not in the panel, it will be set to `null`.\n */\n set currentWidget(value) {\n this.tabBar.currentTitle = value ? value.title : null;\n }\n /**\n * Get the whether the tabs are movable by the user.\n *\n * #### Notes\n * Tabs can always be moved programmatically.\n */\n get tabsMovable() {\n return this.tabBar.tabsMovable;\n }\n /**\n * Set the whether the tabs are movable by the user.\n *\n * #### Notes\n * Tabs can always be moved programmatically.\n */\n set tabsMovable(value) {\n this.tabBar.tabsMovable = value;\n }\n /**\n * Get the whether the add button is enabled.\n *\n */\n get addButtonEnabled() {\n return this.tabBar.addButtonEnabled;\n }\n /**\n * Set the whether the add button is enabled.\n *\n */\n set addButtonEnabled(value) {\n this.tabBar.addButtonEnabled = value;\n }\n /**\n * Get the tab placement for the tab panel.\n *\n * #### Notes\n * This controls the position of the tab bar relative to the content.\n */\n get tabPlacement() {\n return this._tabPlacement;\n }\n /**\n * Set the tab placement for the tab panel.\n *\n * #### Notes\n * This controls the position of the tab bar relative to the content.\n */\n set tabPlacement(value) {\n // Bail if the placement does not change.\n if (this._tabPlacement === value) {\n return;\n }\n // Update the internal value.\n this._tabPlacement = value;\n // Get the values related to the placement.\n let direction = Private.directionFromPlacement(value);\n let orientation = Private.orientationFromPlacement(value);\n // Configure the tab bar for the placement.\n this.tabBar.orientation = orientation;\n this.tabBar.dataset['placement'] = value;\n // Update the layout direction.\n this.layout.direction = direction;\n }\n /**\n * A signal emitted when the add button on a tab bar is clicked.\n *\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * A read-only array of the widgets in the panel.\n */\n get widgets() {\n return this.stackedPanel.widgets;\n }\n /**\n * Add a widget to the end of the tab panel.\n *\n * @param widget - The widget to add to the tab panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n *\n * The widget's `title` is used to populate the tab.\n */\n addWidget(widget) {\n this.insertWidget(this.widgets.length, widget);\n }\n /**\n * Insert a widget into the tab panel at a specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the tab panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n *\n * The widget's `title` is used to populate the tab.\n */\n insertWidget(index, widget) {\n if (widget !== this.currentWidget) {\n widget.hide();\n }\n this.stackedPanel.insertWidget(index, widget);\n this.tabBar.insertTab(index, widget.title);\n widget.node.setAttribute('role', 'tabpanel');\n let renderer = this.tabBar.renderer;\n if (renderer instanceof TabBar.Renderer) {\n let tabId = renderer.createTabKey({\n title: widget.title,\n current: false,\n zIndex: 0\n });\n widget.node.setAttribute('aria-labelledby', tabId);\n }\n }\n /**\n * Handle the `currentChanged` signal from the tab bar.\n */\n _onCurrentChanged(sender, args) {\n // Extract the previous and current title from the args.\n let { previousIndex, previousTitle, currentIndex, currentTitle } = args;\n // Extract the widgets from the titles.\n let previousWidget = previousTitle ? previousTitle.owner : null;\n let currentWidget = currentTitle ? currentTitle.owner : null;\n // Hide the previous widget.\n if (previousWidget) {\n previousWidget.hide();\n }\n // Show the current widget.\n if (currentWidget) {\n currentWidget.show();\n }\n // Emit the `currentChanged` signal for the tab panel.\n this._currentChanged.emit({\n previousIndex,\n previousWidget,\n currentIndex,\n currentWidget\n });\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n }\n /**\n * Handle the `tabAddRequested` signal from the tab bar.\n */\n _onTabAddRequested(sender, args) {\n this._addRequested.emit(sender);\n }\n /**\n * Handle the `tabActivateRequested` signal from the tab bar.\n */\n _onTabActivateRequested(sender, args) {\n args.title.owner.activate();\n }\n /**\n * Handle the `tabCloseRequested` signal from the tab bar.\n */\n _onTabCloseRequested(sender, args) {\n args.title.owner.close();\n }\n /**\n * Handle the `tabMoved` signal from the tab bar.\n */\n _onTabMoved(sender, args) {\n this.stackedPanel.insertWidget(args.toIndex, args.title.owner);\n }\n /**\n * Handle the `widgetRemoved` signal from the stacked panel.\n */\n _onWidgetRemoved(sender, widget) {\n widget.node.removeAttribute('role');\n widget.node.removeAttribute('aria-labelledby');\n this.tabBar.removeTab(widget.title);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Convert a tab placement to tab bar orientation.\n */\n function orientationFromPlacement(plc) {\n return placementToOrientationMap[plc];\n }\n Private.orientationFromPlacement = orientationFromPlacement;\n /**\n * Convert a tab placement to a box layout direction.\n */\n function directionFromPlacement(plc) {\n return placementToDirectionMap[plc];\n }\n Private.directionFromPlacement = directionFromPlacement;\n /**\n * A mapping of tab placement to tab bar orientation.\n */\n const placementToOrientationMap = {\n top: 'horizontal',\n left: 'vertical',\n right: 'vertical',\n bottom: 'horizontal'\n };\n /**\n * A mapping of tab placement to box layout direction.\n */\n const placementToDirectionMap = {\n top: 'top-to-bottom',\n left: 'left-to-right',\n right: 'right-to-left',\n bottom: 'bottom-to-top'\n };\n})(Private || (Private = {}));\n\nexport { AccordionLayout, AccordionPanel, BoxEngine, BoxLayout, BoxPanel, BoxSizer, CommandPalette, ContextMenu, DockLayout, DockPanel, FocusTracker, GridLayout, Layout, LayoutItem, Menu, MenuBar, Panel, PanelLayout, ScrollBar, SingletonLayout, SplitLayout, SplitPanel, StackedLayout, StackedPanel, TabBar, TabPanel, Title, Widget };\n//# sourceMappingURL=index.es6.js.map\n","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = require('vm').runInThisContext(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","var constants = require('../constants');\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\nimport { Message } from '@lumino/messaging';\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\nimport {NowVisPanel} from './nowpanel';\ninterface IAnnotation {\n id: string;\n annotationFormat: string;\n annotation: string;\n description: string;\n annotationLevel: string;\n provenanceType: string;\n relatedTrial: string;\n relatedExperiment: string;\n }\nexport\nclass AnnontationWidget extends Widget {\n\n d3node: d3_Selection;\n tBody: d3_Selection;\n table: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n anntTitle: d3_Selection;\n expId: string;\n trialId: string;\n fetchUrl: string;\n annotationLevel: string;\n annotations: Array;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor( expId: string) {\n super({ node: AnnontationWidget.createNode() });\n this.d3node = d3_select(this.node);\n this.expId=expId;\n\n this.addClass('content');\n this.title.label = \"Annotation\";\n this.title.closable = false\n this.title.caption = `Annontation`;\n this.setNode();\n this.setAnnotationLevelToExperiment();\n\n }\n\n protected onBeforeHide(msg: Message): void {\n this.setAnnotationLevelToExperiment()\n \n }\n setAnnotationLevelToExperiment(){\n this.trialId=\"\";\n this.fetchUrl=\"/experiments/\"+this.expId+\"/extendedAnnotation\";\n this.annotationLevel=\"Experiment\";\n this.anntTitle.text(\"Annotations for Experiment: \" + this.expId)\n this.setAnnotations();\n\n }\n setAnnotationLevelToTrial(trialId:string){\n this.trialId=trialId;\n this.anntTitle.text(\"Annotations for Trial: \" + this.trialId)\n this.fetchUrl=\"/trials/\"+this.trialId+\"/extendedAnnotation\";\n this.annotationLevel=\"Trial\";\n this.setAnnotations();\n }\n activeAnnotation(trialId:string){\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n parentDock.activateWidget(this);\n this.setAnnotationLevelToTrial(trialId);\n }\n async fillAnnotations(){\n this.annotations=new Array();\n var _thiss=this;\n var response= await fetch(this.fetchUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.annotations= new Array();\n var obj=await response.json();\n\n obj.forEach( function(item: any){\n var annt={\n id: item.id,\n provenanceType: item.provenanceType,\n annotationFormat: item.annotationFormat,\n description: item.description,\n annotationLevel: item.annotationLevel,\n relatedTrial: item.relatedTrial,\n relatedExperiment: item.relatedExperiment,\n }\n\n _thiss.annotations.push(annt);\n }); \n }else{\n if(response.status!=404){\n this.showNode(_thiss.errorFeedback);\n }\n \n }\n\n \n }\n addAnntRow(annt : IAnnotation, tBody:d3_Selection){\n\n let item=tBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(annt.id);\n item.append(\"td\").text(annt.description);\n item.append(\"td\").text(annt.annotationFormat);\n\n item.append(\"td\").text(annt.provenanceType);\n\n var actions =item.append(\"td\")\n var addMemberButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Download Content\");\n addMemberButton.on(\"click\",function(){\n window.open(\"/extendedAnnotation/\"+annt.id+\"/annotation\");\n \n });\n \n }\n async setAnnotations(){\n let _thiss=this;\n \n this.table.html(\"\");\n let header=this.table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"description\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"annotation Format\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"provenance Type\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Actions\");\n var tBody=this.table.append(\"tbody\");\n\n await this.fillAnnotations();\n \n this.annotations.forEach(function (obj: any) {\n _thiss.addAnntRow(obj,tBody);\n });\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n getValueFromSelect(node: d3_Selection,defaultVale:String) :String{\n var option =defaultVale;\n\n var select = node.node() as HTMLSelectElement;\n if(select!=null){\n option = select.options[select.selectedIndex].value;\n }\n return option;;\n }\n createAddGroupForm(projectsDiv:d3_Selection){\n var _thiss=this;\n let inputsDiv=projectsDiv.append(\"div\");\n let descIn=this.addFormInput(inputsDiv,\"descriptionAnntInput\",\"Description\",\"textarea\");\n let annotationIn=this.addFormInput(inputsDiv,\"annotationNameInput\",\"Annotation\",\"textarea\");\n let annotationFormatIn=this.addFormInput(inputsDiv,\"annotationFormatInput\",\"Annotation Format\",\"select\");\n let provenanceTypeIn=this.addFormInput(inputsDiv,\"provenanceTypeInput\",\"Provenance Type\",\"select\");\n\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Data\").text(\"Data\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Interaction\").text(\"Interaction\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Insight\").text(\"Insight\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Other\").text(\"Other\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Rationale\").text(\"Rationale\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Visualization\").text(\"Visualization\");\n\n annotationFormatIn.append(\"option\").attr(\"value\",\"plainText\").text(\"plain text\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"base64\").text(\"base64\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"JSON\").text(\"JSON\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"XML\").text(\"XML\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addAnntButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Annotation\");\n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n var annotationFormat=_thiss.getValueFromSelect(annotationFormatIn,\"plainText\");\n var provenanceType=_thiss.getValueFromSelect(provenanceTypeIn,\"Other\");\n\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n\n let newAnnotation={\n annotation: annotationIn.property(\"value\"),\n description: descIn.property(\"value\"),\n annotationFormat: annotationFormat,\n annotationLevel: _thiss.annotationLevel,\n provenanceType: provenanceType\n };\n\n fetch(_thiss.fetchUrl, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newAnnotation) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n\n _thiss.showNode(_thiss.successFeedback);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addAnntButton);\n _thiss.setAnnotations();\n\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n \n }\n }); \n\n \n });\n\n addAnntButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addAnntButton);\n });\n\n }\n\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n this.anntTitle= projectsDiv.append(\"h2\");\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"\") ; \n this.hideNode(this.errorFeedback);\n this.hideNode(this.successFeedback);\n\n\n this.createAddGroupForm(projectsDiv);\n\n \n this.table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n\n \n }\n\n}","import {Widget} from '@lumino/widgets';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {BaseActivationGraphWidget} from './graph/base_activation_graph';\n\n\nexport\nclass ConfigWidget extends Widget {\n\n d3node: d3_Selection;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('config-content', true)\n\n let historydiv = content.append(\"div\")\n\n historydiv.append(\"h2\")\n .text(\"History Graph\")\n\n let showGraph = historydiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n showGraph.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"show_graph\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"show-graph\", true)\n .attr(\"id\", \"config-show-graph\")\n\n showGraph.append(\"label\")\n .attr(\"for\", \"config-show-graph\")\n .attr(\"title\", \"Open trial graph\")\n .text(\"Show trial graph on selection\")\n\n let showInfo = historydiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n showInfo.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"show_info\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"show-info\", true)\n .attr(\"id\", \"config-show-info\")\n\n showInfo.append(\"label\")\n .attr(\"for\", \"config-show-info\")\n .attr(\"title\", \"Open trial info\")\n .text(\"Show trial information on selection\")\n\n\n let trialdiv = content.append(\"div\")\n trialdiv.append(\"h2\")\n .text(\"Trial Graph\")\n\n BaseActivationGraphWidget.graphTypeForm(\"config\", trialdiv);\n BaseActivationGraphWidget.useCacheForm(\"config\", trialdiv);\n\n return node;\n }\n\n constructor() {\n super({ node: ConfigWidget.createNode() });\n this.d3node = d3_select(this.node);\n //this.setFlag(Widget.Flag.DisallowLayout);\n this.addClass('content');\n this.title.label = \"Config\";\n this.title.closable = false\n this.title.caption = `Configuration`;\n }\n\n\n showTrial(): boolean {\n return this.d3node.select(\".show-graph\").property(\"checked\");\n }\n\n showInfo(): boolean {\n return this.d3node.select(\".show-info\").property(\"checked\");\n }\n\n graphType(): string {\n return this.d3node.select(\".graph-type\").property(\"value\");\n }\n\n useCache(): boolean {\n return this.d3node.select(\".use-cache\").property(\"checked\");\n }\n\n}","import { Widget } from '@lumino/widgets';\nimport { Message } from '@lumino/messaging';\nimport { select as d3_select, Selection as d3_Selection, BaseType as d3_BaseType } from 'd3-selection';\nimport { forceSimulation, forceLink, forceManyBody, forceCenter, forceCollide, SimulationNodeDatum, SimulationLinkDatum } from 'd3-force';\nimport { scaleOrdinal } from 'd3-scale';\nimport { schemeTableau10 } from 'd3-scale-chromatic';\nimport { drag } from 'd3-drag';\nimport { NowVisPanel } from './nowpanel';\nimport { QueryWidget, QueryResultWidget } from './query_widget';\n\ninterface TableNode extends SimulationNodeDatum {\n id: string;\n name: string;\n selected?: boolean;\n}\n\ninterface TableLink extends SimulationLinkDatum {\n source: string | TableNode;\n target: string | TableNode;\n sourceColumn: string;\n targetColumn: string;\n}\n\ninterface DatabaseGraphData {\n nodes: TableNode[];\n links: TableLink[];\n}\n\nexport class DatabaseTabWidget extends Widget {}\n\nexport class TableInfoWidget extends DatabaseTabWidget {\n d3node: d3_Selection;\n constructor(tableName: string, details: any) {\n super({ node: TableInfoWidget.createNode(tableName, details) });\n this.title.label = tableName;\n this.title.caption = `Table: ${tableName}`;\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n }\n static createNode(tableName: string, details: any): HTMLElement {\n const node = document.createElement('div');\n \n node.style.display = 'flex';\n node.style.flexDirection = 'column';\n node.style.height = '100%';\n node.style.overflow = 'hidden';\n \n const header = d3_select(node).append('div')\n .style('flex-shrink', '0')\n .style('padding', '1rem')\n .style('border-bottom', '1px solid #eee')\n .style('background', '#f8f9fa');\n \n header.append('h4')\n .text(tableName)\n .style('margin', '0')\n .style('color', '#333');\n \n const contentContainer = d3_select(node).append('div')\n .style('flex', '1')\n .style('overflow-y', 'auto')\n .style('overflow-x', 'hidden')\n .style('padding', '1rem');\n \n if (details.error) {\n contentContainer.append('div')\n .style('color', 'red')\n .text('Failed to load table details.');\n } else {\n contentContainer.append('h5')\n .text('Columns')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const columnsTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const columnsThead = columnsTable.append('thead').append('tr');\n for( const h of ['Name', 'Type', 'NOT NULL', 'Default', 'PK']){\n columnsThead.append('th').text(h).style('font-size', '0.875rem')\n };\n \n const columnsTbody = columnsTable.append('tbody');\n details.columns.forEach((col: any) => {\n const row = columnsTbody.append('tr');\n row.append('td').text(col.name).style('font-size', '0.875rem');\n row.append('td').text(col.type).style('font-size', '0.875rem');\n row.append('td').text(col.notnull ? 'Yes' : '').style('font-size', '0.875rem');\n row.append('td').text(col.default === null ? '' : col.default).style('font-size', '0.875rem');\n row.append('td').text(col.pk ? 'Yes' : '').style('font-size', '0.875rem');\n });\n\n if (details.foreign_keys && details.foreign_keys.length > 0) {\n contentContainer.append('h5')\n .text('Foreign Keys')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const fkTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const fkThead = fkTable.append('thead').append('tr');\n for( const h of ['Column', 'References Table', 'References Column']){\n fkThead.append('th').text(h).style('font-size', '0.875rem');\n };\n \n const fkTbody = fkTable.append('tbody');\n for( const fk of details.foreign_keys){\n const row = fkTbody.append('tr');\n row.append('td').text(fk.from).style('font-size', '0.875rem');\n row.append('td').text(fk.table).style('font-size', '0.875rem');\n row.append('td').text(fk.to).style('font-size', '0.875rem');\n };\n }\n\n if (details.referenced_by && details.referenced_by.length > 0) {\n contentContainer.append('h5')\n .text('Referenced By')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const columnReferences: { [key: string]: any[] } = {};\n details.referenced_by.forEach((ref: any) => {\n if (!columnReferences[ref.referenced_column]) {\n columnReferences[ref.referenced_column] = [];\n }\n columnReferences[ref.referenced_column].push(ref);\n });\n\n const refTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const refThead = refTable.append('thead').append('tr');\n for( const h of ['Table', 'Column', 'References Column']){\n refThead.append('th').text(h).style('font-size', '0.875rem');\n };\n \n const refTbody = refTable.append('tbody');\n for( const ref of details.referenced_by){\n const row = refTbody.append('tr');\n row.append('td').text(ref.referencing_table).style('font-size', '0.875rem');\n row.append('td').text(ref.referencing_column).style('font-size', '0.875rem');\n row.append('td').text(ref.referenced_column).style('font-size', '0.875rem');\n };\n }\n }\n return node;\n }\n}\n\nexport class DatabaseWidget extends Widget {\n panel: NowVisPanel;\n graphData: DatabaseGraphData = { nodes: [], links: [] };\n simulation: any;\n svg: d3_Selection;\n color: any;\n dataLoaded: boolean = false;\n selectedNodes: Set = new Set();\n \n constructor(panel: NowVisPanel) {\n super();\n this.panel = panel;\n this.title.label = 'Database';\n this.title.caption = 'Database';\n \n const d3node = d3_select(this.node);\n \n const container = d3node.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('height', '100%')\n .style('padding', '1rem');\n\n const headerContainer = container.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem');\n\n headerContainer.append('h4')\n .text('Database')\n .style('margin', '0')\n .style('color', '#333');\n\n const controlsContainer = headerContainer.append('div')\n .style('display', 'flex')\n .style('gap', '0.5rem')\n .style('align-items', 'center');\n\n const tablesDropdown = controlsContainer.append('div')\n .style('position', 'relative')\n .style('display', 'inline-block');\n\n const dropdownButton = tablesDropdown.append('button')\n .classed('btn btn-outline-primary dropdown-toggle', true)\n .attr('type', 'button')\n .attr('data-toggle', 'dropdown')\n .attr('aria-haspopup', 'true')\n .attr('aria-expanded', 'false')\n .html('Tables ')\n .style('min-width', '120px');\n\n tablesDropdown.append('div')\n .attr('id', 'tables-dropdown')\n .classed('dropdown-menu', true)\n .style('position', 'absolute')\n .style('top', '100%')\n .style('left', '0')\n .style('z-index', '1000')\n .style('display', 'none')\n .style('min-width', '250px')\n .style('max-height', '300px')\n .style('overflow-y', 'auto')\n .style('background', '#fff')\n .style('border', '1px solid #ccc')\n .style('border-radius', '4px')\n .style('box-shadow', '0 2px 10px rgba(0,0,0,0.1)')\n .style('padding', '0.5rem');\n\n controlsContainer.append('button')\n .attr('id', 'new-query-btn')\n .classed('btn btn-primary', true)\n .on('click', () => this.openNewQueryTab())\n .html(' New Query');\n\n controlsContainer.append('button')\n .attr('id', 'clear-selection-btn')\n .classed('btn btn-outline-secondary', true)\n .style('display', 'none')\n .on('click', () => this.clearSelection())\n .html(' Clear Selection');\n\n container.append('div')\n .attr('id', 'graph-container')\n .style('flex', '1')\n .style('border', '1px solid #ddd')\n .style('border-radius', '4px')\n .style('background', '#f9f9f9')\n .style('position', 'relative');\n\n this.color = scaleOrdinal(schemeTableau10);\n\n dropdownButton.on('click', () => {\n const dropdown = document.getElementById('tables-dropdown');\n if (dropdown) {\n const isVisible = dropdown.style.display === 'block';\n dropdown.style.display = isVisible ? 'none' : 'block';\n dropdownButton.attr('aria-expanded', !isVisible);\n }\n });\n\n d3_select(document).on('click', (event) => {\n const dropdown = document.getElementById('tables-dropdown');\n const button = dropdownButton.node();\n if (dropdown && button && !button.contains(event.target) && !dropdown.contains(event.target)) {\n dropdown.style.display = 'none';\n dropdownButton.attr('aria-expanded', 'false');\n }\n });\n\n this.showLoadingMessage();\n }\n\n protected onAfterShow(msg: Message): void {\n this.fetchAndRenderTables();\n }\n\n private showLoadingMessage(): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#666')\n .style('font-size', '16px')\n .html(`\n \n
      Click on the Database tab to load database structure
      \n `);\n }\n\n async fetchAndRenderTables() {\n const dropdownMenu = this.node.querySelector('#tables-dropdown');\n if (!dropdownMenu) {\n console.error('Tables dropdown element not found');\n return;\n }\n\n this.showLoadingState();\n this.clearSelection();\n\n try {\n const response = await fetch('/db/tables');\n if (!response.ok) throw new Error('Failed to fetch table list');\n const data = await response.json();\n this.renderTableList(data.tables);\n this.buildGraphDataFromTablesResponse(data);\n this.initializeGraph();\n this.renderGraph();\n this.dataLoaded = true;\n } catch (e) {\n console.error('Error fetching tables:', e);\n this.showErrorMessage('Failed to load database structure');\n }\n }\n\n private showLoadingState(): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#666')\n .style('font-size', '16px')\n .html(`\n \n
      Loading database structure...
      \n `);\n }\n\n private showErrorMessage(message: string): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#dc3545')\n .style('font-size', '16px')\n .html(`\n \n
      ${message}
      \n `);\n }\n\n buildGraphDataFromTablesResponse(data: any) {\n const { tables, foreign_keys } = data;\n \n this.graphData.nodes = tables.map((tableName: string) => ({\n id: tableName,\n name: tableName\n }));\n\n this.graphData.links = [];\n\n if (foreign_keys) {\n Object.keys(foreign_keys).forEach(sourceTable => {\n const tableForeignKeys = foreign_keys[sourceTable];\n tableForeignKeys.forEach((fk: any) => {\n const existingLink = this.graphData.links.find(link => \n link.source === sourceTable && link.target === fk.table\n );\n \n if (!existingLink) {\n this.graphData.links.push({\n source: sourceTable,\n target: fk.table,\n sourceColumn: fk.from,\n targetColumn: fk.to\n });\n }\n });\n });\n }\n }\n\n private createArrowMarker(): void {\n this.svg.append('defs').append('marker')\n .attr('id', 'arrowhead')\n .attr('viewBox', '-0 -3 6 6')\n .attr('refX', 25)\n .attr('refY', 0)\n .attr('orient', 'auto')\n .attr('markerWidth', 5)\n .attr('markerHeight', 5)\n .attr('xoverflow', 'visible')\n .append('svg:path')\n .attr('d', 'M 0,-3 L 6 ,0 L 0,3')\n .attr('fill', '#999')\n .style('stroke', 'none');\n }\n\n private createSimulation(width: number, height: number, isInitial: boolean = false): void {\n if (this.simulation) {\n this.simulation.stop();\n }\n\n const linkDistance = isInitial ? 200 : 250;\n const chargeStrength = isInitial ? -200 : -400;\n const chargeDistanceMax = isInitial ? 800 : 400;\n const collisionRadius = isInitial ? 120 : 70;\n\n this.simulation = forceSimulation(this.graphData.nodes)\n .force('link', forceLink(this.graphData.links).id((d: any) => d.id).distance(linkDistance))\n .force('charge', forceManyBody().strength(chargeStrength).distanceMax(chargeDistanceMax))\n .force('center', forceCenter(width / 2, height / 2))\n .force('collision', forceCollide().radius(collisionRadius));\n\n if (!isInitial) {\n this.simulation.alphaDecay(0.1).velocityDecay(0.4);\n }\n }\n\n initializeGraph() {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n const rect = container.getBoundingClientRect();\n const width = Math.max(400, rect.width || 800);\n const height = Math.max(300, rect.height || 600);\n\n this.svg = d3_select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', height)\n .style('background', '#f9f9f9') as d3_Selection;\n\n this.createArrowMarker();\n\n if (this.graphData.nodes.length > 0) {\n this.createSimulation(width, height, true);\n }\n }\n\n renderGraph() {\n if (!this.svg) return;\n\n this.svg.selectAll('*').remove();\n\n this.createArrowMarker();\n\n if (this.graphData.nodes.length === 0) {\n this.svg.append('text')\n .attr('x', '50%')\n .attr('y', '50%')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '16px')\n .style('fill', '#666')\n .text('No database relationships found');\n return;\n }\n\n const svgNode = this.svg.node();\n const width = svgNode ? svgNode.getBoundingClientRect().width : 800;\n const height = svgNode ? svgNode.getBoundingClientRect().height : 600;\n\n const centerX = width / 2;\n const centerY = height / 2;\n const nodesCount = this.graphData.nodes.length;\n const radius = Math.min(width, height) / 2 - 50;\n this.graphData.nodes.forEach((node: any, index: number) => {\n const angle = 2 * Math.PI * index / nodesCount;\n node.x = centerX + radius * Math.sin(angle);\n node.y = centerY + radius * Math.cos(angle);\n });\n\n const link = this.svg.append('g')\n .selectAll('line')\n .data(this.graphData.links)\n .enter().append('line')\n .attr('stroke', '#999')\n .attr('stroke-opacity', 0.6)\n .attr('stroke-width', 2)\n .attr('marker-end', 'url(#arrowhead)');\n\n const node = this.svg.append('g')\n .selectAll('g')\n .data(this.graphData.nodes)\n .enter().append('g')\n .attr('class', 'node')\n .call((selection: any) => {\n selection.on('click', (event: any, d: any) => this.handleNodeClick(event, d));\n });\n\n node.append('circle')\n .attr('r', 35)\n .attr('fill', (d: any) => this.color(d.id))\n .attr('stroke', '#fff')\n .attr('stroke-width', 3);\n\n node.append('text')\n .text((d: any) => d.name)\n .attr('text-anchor', 'middle')\n .attr('dy', '.35em')\n .style('font-size', '12px')\n .style('font-weight', 'bold')\n .style('fill', '#fff')\n .style('text-shadow', '1px 1px 2px rgba(0,0,0,0.8), -1px -1px 2px rgba(0,0,0,0.8), 1px -1px 2px rgba(0,0,0,0.8), -1px 1px 2px rgba(0,0,0,0.8)')\n .style('pointer-events', 'none');\n\n node.append('title')\n .text((d: any) => `Table: ${d.name}\\nClick to view details\\nCtrl+Click to select (orange margin)`);\n\n this.svg.on('click', (event: any) => {\n if (event.target === this.svg.node()) {\n this.clearSelection();\n }\n });\n\n this.createSimulation(width, height, false);\n\n this.simulation.on('tick', () => {\n link\n .attr('x1', (d: any) => {\n const x = d.source.x;\n return this.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0;\n })\n .attr('y1', (d: any) => {\n const y = d.source.y;\n return this.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0;\n })\n .attr('x2', (d: any) => {\n const x = d.target.x;\n return this.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0;\n })\n .attr('y2', (d: any) => {\n const y = d.target.y;\n return this.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0;\n });\n\n node\n .attr('transform', (d: any) => {\n const x = d.x;\n const y = d.y;\n \n if (!this.isValidNumber(x) || !this.isValidNumber(y)) {\n d.x = width / 2;\n d.y = height / 2;\n return `translate(${width / 2},${height / 2})`;\n }\n \n const boundedX = Math.max(50, Math.min(width - 50, x));\n const boundedY = Math.max(50, Math.min(height - 50, y));\n \n if (boundedX !== x) {\n d.x = boundedX;\n }\n if (boundedY !== y) {\n d.y = boundedY;\n }\n \n return `translate(${boundedX},${boundedY})`;\n });\n });\n\n node.call((selection: any) => {\n const widget = this;\n selection.on('mouseover', function(event: any, d: any) {\n const isSelected = widget.selectedNodes.has(d.id);\n \n d3_select(this).select('circle')\n .attr('stroke-width', isSelected ? 6 : 4)\n .attr('stroke', isSelected ? '#ff8c00' : '#333');\n \n link\n .attr('stroke-opacity', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? 1 : 0.1;\n })\n .attr('stroke-width', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? 3 : 2;\n })\n .attr('stroke', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? '#87CEEB' : '#999';\n });\n \n node.select('circle')\n .attr('stroke-width', (nodeData: any) => {\n const isConnected = link.data().some((linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id && targetId === nodeData.id) || \n (targetId === d.id && sourceId === nodeData.id);\n });\n const isNodeSelected = widget.selectedNodes.has(nodeData.id);\n return isNodeSelected ? 6 : (isConnected ? 4 : 3);\n })\n .attr('stroke', (nodeData: any) => {\n const isConnected = link.data().some((linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id && targetId === nodeData.id) || \n (targetId === d.id && sourceId === nodeData.id);\n });\n const isNodeSelected = widget.selectedNodes.has(nodeData.id);\n return isConnected ? '#87CEEB' : (isNodeSelected ? '#ff8c00' : '#fff');\n });\n })\n .on('mouseout', function() {\n widget.updateSelection();\n \n link\n .attr('stroke-opacity', 0.6)\n .attr('stroke-width', 2)\n .attr('stroke', '#999');\n });\n });\n\n node.call(drag()\n .on('start', (event: any, d: any) => {\n if (!event.active) this.simulation.alphaTarget(0.3).restart();\n d.fx = this.isValidNumber(d.x) ? d.x : width / 2;\n d.fy = this.isValidNumber(d.y) ? d.y : height / 2;\n })\n .on('drag', (event: any, d: any) => {\n const boundedX = Math.max(50, Math.min(width - 50, event.x));\n const boundedY = Math.max(50, Math.min(height - 50, event.y));\n d.fx = boundedX;\n d.fy = boundedY;\n })\n .on('end', (event: any, d: any) => {\n if (!event.active) this.simulation.alphaTarget(0);\n d.fx = null;\n d.fy = null;\n }));\n }\n\n private isValidNumber(value: any): boolean {\n return typeof value === 'number' && !isNaN(value) && isFinite(value);\n }\n\n private toggleSelection(nodeId: string): void {\n if (this.selectedNodes.has(nodeId)) {\n this.selectedNodes.delete(nodeId);\n } else {\n this.selectedNodes.add(nodeId);\n }\n this.updateSelection();\n }\n\n private clearSelection(): void {\n this.selectedNodes.clear();\n this.updateSelection();\n }\n\n private updateSelection(): void {\n if (!this.svg) return;\n\n const widget = this;\n this.svg.selectAll('.node').each(function(d: any) {\n const nodeElement = d3_select(this);\n const isSelected = widget.selectedNodes.has(d.id);\n \n nodeElement.select('circle')\n .attr('stroke', isSelected ? '#ff8c00' : '#fff')\n .attr('stroke-width', isSelected ? 6 : 3)\n .attr('stroke-dasharray', 'none');\n });\n\n const newQueryBtn = this.node.querySelector('#new-query-btn') as HTMLElement;\n const clearBtn = this.node.querySelector('#clear-selection-btn') as HTMLElement;\n \n if (!newQueryBtn || !clearBtn) return;\n\n if (this.selectedNodes.size > 0) {\n newQueryBtn.innerHTML = ` New Query ${this.selectedNodes.size}`;\n clearBtn.style.display = 'inline-block';\n } else {\n newQueryBtn.innerHTML = ' New Query';\n clearBtn.style.display = 'none';\n }\n }\n\n private handleNodeClick(event: any, d: any): void {\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n event.stopPropagation();\n this.toggleSelection(d.id);\n } else {\n this.openTableInfoTab(d.name);\n }\n }\n\n getSelectedTables(): string[] {\n return Array.from(this.selectedNodes);\n }\n\n selectTables(tableNames: string[]): void {\n tableNames.forEach(name => {\n this.selectedNodes.add(name);\n });\n this.updateSelection();\n }\n\n renderTableList(tables: string[]) {\n const dropdownMenu = this.node.querySelector('#tables-dropdown') as HTMLElement;\n if (!dropdownMenu) {\n console.error('Tables dropdown element not found in renderTableList');\n return;\n }\n const d3menu = d3_select(dropdownMenu);\n d3menu.html('');\n \n if (!tables || tables.length === 0) {\n d3menu.append('div')\n .text('No tables found.')\n .style('padding', '0.5rem')\n .style('color', '#666')\n .style('font-style', 'italic');\n return;\n }\n\n d3menu.append('div')\n .text(`Tables (${tables.length})`)\n .style('font-weight', 'bold')\n .style('padding', '0.5rem')\n .style('border-bottom', '1px solid #eee')\n .style('margin-bottom', '0.5rem');\n\n tables.forEach(tableName => {\n const item = d3menu.append('div')\n .style('padding', '0.5rem')\n .style('cursor', 'pointer')\n .style('border-radius', '3px')\n .style('margin-bottom', '0.25rem')\n .style('transition', 'background-color 0.2s')\n .on('mouseover', function() {\n d3_select(this).style('background-color', '#f8f9fa');\n })\n .on('mouseout', function() {\n d3_select(this).style('background-color', 'transparent');\n })\n .on('click', () => {\n this.openTableInfoTab(tableName);\n dropdownMenu.style.display = 'none';\n const dropdownButton = this.node.querySelector('[data-toggle=\"dropdown\"]');\n if (dropdownButton) {\n dropdownButton.setAttribute('aria-expanded', 'false');\n }\n });\n\n item.append('i')\n .classed('fa fa-table', true)\n .style('margin-right', '0.5rem')\n .style('color', '#007bff');\n\n item.append('span')\n .text(tableName)\n .style('font-size', '14px');\n });\n }\n\n async openTableInfoTab(tableName: string) {\n let widget: Widget | null = null;\n try {\n const response = await fetch(`/db/table/${encodeURIComponent(tableName)}`);\n if (!response.ok) throw new Error('Failed to fetch table details');\n const details = await response.json();\n widget = new TableInfoWidget(tableName, details);\n } catch (e) {\n widget = new DatabaseTabWidget();\n widget.title.label = tableName;\n widget.node.innerHTML = `
      Error loading table info: ${e.message}
      `;\n }\n\n let refWidget: Widget | null = null;\n if(this.panel.widgets) {\n for (let w of this.panel.widgets()) {\n if (w instanceof TableInfoWidget || w instanceof QueryResultWidget) {\n refWidget = w;\n }\n }\n }\n if (refWidget) {\n this.panel.addInfoWidget(widget, { ref: refWidget, mode: 'tab-after' });\n } else {\n this.panel.addInfoWidget(widget, { ref: this, mode: 'split-bottom' });\n }\n this.panel.activateWidget(widget);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graphData.nodes.length > 0) {\n this.initializeGraph();\n this.renderGraph();\n }\n }\n\n private getInitialQuery(selectedTables: string[]): string {\n if (selectedTables.length === 0) \n return '';\n \n if (selectedTables.length === 1) {\n return `SELECT * FROM \"${selectedTables[0]}\" LIMIT 100;`;\n }\n \n let initialQuery = `SELECT *\\nFROM \"${selectedTables[0]}\"\\n`;\n \n const usedTables = new Set([selectedTables[0]]);\n const joins: string[] = [];\n \n for (let i = 1; i < selectedTables.length; i++) {\n const currentTable = selectedTables[i];\n let joinFound = false;\n \n for (const link of this.graphData.links) {\n console.log(link.source, link.target);\n const sourceTable = (link.source as TableNode).id;\n const targetTable = (link.target as TableNode).id;\n \n if (sourceTable === currentTable && usedTables.has(targetTable)) {\n joins.push(`JOIN \"${currentTable}\" ON \"${targetTable}\".${link.targetColumn} = \"${currentTable}\".${link.sourceColumn}`);\n usedTables.add(currentTable);\n joinFound = true;\n break;\n }\n \n if (targetTable === currentTable && usedTables.has(sourceTable)) {\n joins.push(`JOIN \"${currentTable}\" ON \"${sourceTable}\".${link.sourceColumn} = \"${currentTable}\".${link.targetColumn}`);\n usedTables.add(currentTable);\n joinFound = true;\n break;\n }\n }\n \n if (!joinFound) {\n joins.push(`CROSS JOIN \"${currentTable}\"`);\n usedTables.add(currentTable);\n }\n }\n \n return initialQuery + joins.join('\\n') + '\\nLIMIT 100;';\n }\n\n private async openNewQueryTab(): Promise {\n const selectedTables = this.getSelectedTables();\n const tableNames = this.graphData.nodes.map(n => n.name);\n const initialQuery = this.getInitialQuery(selectedTables);\n \n let columnNames: string[] = [];\n if (selectedTables.length > 0) {\n try {\n const columnPromises = selectedTables.map(async (tableName) => {\n const response = await fetch(`/db/table/${encodeURIComponent(tableName)}`);\n if (response.ok) {\n const details = await response.json();\n return details.columns ? details.columns.map((col: any) => col.name) : [];\n }\n return [];\n });\n \n const columnArrays = await Promise.all(columnPromises);\n columnNames = [].concat(...columnArrays);\n } catch (error) {\n console.warn('Failed to fetch column names:', error);\n }\n }\n \n const queryWidget = new QueryWidget(this.panel, tableNames, columnNames, initialQuery);\n \n this.panel.addInfoWidget(queryWidget, { ref: this, mode: 'tab-after' });\n this.panel.activateWidget(queryWidget);\n \n this.clearSelection();\n }\n} \n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {TrialGraph, TrialGraphData, ActivationData} from '@noworkflow/trial';\n\nimport {json} from '@noworkflow/utils';\n\nexport\nclass BaseActivationGraphWidget extends Widget {\n\n name: string;\n cls: string;\n t1: string;\n t2: string;\n graph: TrialGraph;\n d3node: d3_Selection;\n\n static graphTypeForm(name: string, selectorDiv: d3_Selection) {\n let graphType = selectorDiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n graphType.append(\"label\")\n .attr(\"for\", name + \"-graphtype\")\n .attr(\"title\", \"Select the graph type\")\n .text(\"Graph Type:\")\n\n let typeOptions = graphType.append(\"select\")\n .attr(\"id\", name + \"-graphtype\")\n .classed(\"graph-type\", true)\n .classed(\"select-style\", true);\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"tree\")\n .attr(\"data-description\", \"Activation tree. Edges represent order of execution\")\n .text(\"Activation Tree\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"no_match\")\n .attr(\"data-description\", \"Activation tree presented as a Graph\")\n .text(\"Activation No Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"exact_match\")\n .attr(\"data-description\", \"Calls have counting independent from caller activations\")\n .text(\"Activation Exact Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"namespace_match\")\n .attr(\"data-description\", \"Calls are combined and a function may have more than one call workflow\")\n .text(\"Activation Namespace Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"definition_tree\")\n .attr(\"data-description\", \"Definition tree. Edges represent order of script definition\")\n .text(\"Definition Tree\")\n\n typeOptions.property(\"value\", \"namespace_match\")\n }\n\n static useCacheForm(name: string, selectorDiv: d3_Selection) {\n let useCache = selectorDiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n useCache.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"use_cache\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"use-cache\", true)\n .attr(\"id\", name + \"-use-cache\")\n\n useCache.append(\"label\")\n .attr(\"for\", name + \"-use-cache\")\n .attr(\"title\", \"Select the graph type\")\n .text(\"Use Cache\")\n }\n\n static createNode(name:string, fn: (name: string, parent: d3_Selection) => void = (parent) => null): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('trial-content', true)\n\n let selectorDiv = content.append(\"div\")\n .classed(\"graphselector\", true)\n .classed(\"hide-toolbar\", true);\n\n BaseActivationGraphWidget.graphTypeForm(name, selectorDiv);\n\n fn(name, selectorDiv);\n\n BaseActivationGraphWidget.useCacheForm(name, selectorDiv);\n\n let selectorReload = selectorDiv.append(\"a\")\n .attr(\"href\", \"#\")\n .classed(\"link-button reload-button\", true)\n\n selectorReload.append('i')\n .classed(\"fa fa-refresh\", true);\n\n selectorReload.append('span')\n .text('Reload');\n\n content.append('div')\n .classed('sub-content', true);\n\n return node;\n }\n\n setGraph(data: TrialGraphData, config: any={}, showDiffFunction?:any, nowVisPanel?: any) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new TrialGraph(this.cls, sub, config, showDiffFunction, nowVisPanel);\n this.graph.load(data, this.t1, this.t2);\n }\n\n graphDefinition(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData) {\n return {\n width: this.node.getBoundingClientRect().width - 24,\n height: this.node.getBoundingClientRect().height - 24,\n customForm: (graph: TrialGraph, form: d3_Selection) => {\n // Toggle Tooltips\n let selectorDiv = this.d3node.select(\".trial-content .graphselector\");\n\n let typeOptions = selectorDiv.select(\".graph-type\");\n typeOptions.property(\"value\", selectedGraph);\n\n let useCacheDiv = selectorDiv.select(\".use-cache\");\n useCacheDiv.property(\"checked\", useCache);\n\n\n let selectorToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + graph.graphId + \"-toolbar-selector-check\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-selector-check\")\n .attr(\"value\", \"show\")\n .property(\"checked\", selectorDiv.classed('visible'))\n .on(\"change\", () => {\n let visible = selectorToggle.property(\"checked\");\n selectorToggleI\n .classed('fa-circle-o', visible)\n .classed('fa-circle', !visible);\n selectorDiv\n .classed('visible', visible)\n .classed('show-toolbar', visible)\n .classed('hide-toolbar', !visible)\n });\n let selectorLabel = form.append(\"label\")\n .attr(\"for\", \"trial-\" + graph.graphId + \"-toolbar-selector-check\")\n\n let optionsNode: any = typeOptions.node();\n\n selectorLabel.append(\"span\")\n .classed(\"toggle-label\", true)\n .text(optionsNode.options[optionsNode.selectedIndex].text)\n\n let selectorToggleI = selectorLabel.append(\"i\")\n .classed('fa', true)\n .classed(\"fa-circle\", !selectorDiv.classed('visible'))\n .classed(\"fa-circle-o\", selectorDiv.classed('visible'))\n },\n customLoadTooltip: (g: TrialGraph, div: HTMLDivElement, text: string, trialid: string, aid: string) => {\n var url = \"/trials/\" + trialid + \"/activations/\" + aid + \".json\";\n function createResponse(activationId: string, div2: Element) {\n return function(data: ActivationData) {\n g.activationStorage[activationId] = data;\n g.updateTooltipDiv(activationId, div2);\n }\n }\n json(text, div, url, createResponse(aid, div));\n },\n genDataflow: genDataflow,\n queryTooltip: true\n }\n }\n\n configureGraph(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData, showDiffFunction?:any, nowVisPanel?:any) {\n this.setGraph(data, this.graphDefinition(selectedGraph, useCache, genDataflow, data), showDiffFunction, nowVisPanel);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graph) {\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n }\n\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {json} from '@noworkflow/utils';\n\nimport {BaseActivationGraphWidget} from './base_activation_graph';\n\nimport {TrialGraphData} from '@noworkflow/trial';\n\n\nexport\nclass DiffGraphWidget extends BaseActivationGraphWidget {\n\n showDiffFunction : any;\n nowVisPanel : any\n\n static url(trial1: string, trial2: string, selectedGraph: string, useCache: boolean): string {\n let cache = useCache ? \"1\" : \"0\"\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/\" + selectedGraph + \"-\" + cache + \".json\"\n );\n }\n\n static createForm(name: string, parent: d3_Selection): void {\n }\n\n constructor(name: string, cls: string, t1: string, t2: string, showDiffFunction : any, nowVisPanel : any) {\n super({ node: BaseActivationGraphWidget.createNode(cls, DiffGraphWidget.createForm) });\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".graph-type\").property(\"value\"),\n this.d3node.select(\".use-cache\").property(\"checked\"),\n )\n })\n this.addClass('content');\n this.addClass('diff-widget');\n this.title.label = name;\n this.title.closable = true;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n this.t1 = t1;\n this.t2 = t2;\n this.showDiffFunction = showDiffFunction\n this.nowVisPanel = nowVisPanel\n }\n\n load(selectedGraph: string = \"namespace_match\", useCache: boolean = true) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n json(\"Diff\", sub, DiffGraphWidget.url(this.t1, this.t2, selectedGraph, useCache), (data: TrialGraphData) => {\n let selectorDiv = this.d3node.select(\".trial-content .graphselector\");\n\n let useCacheDiv = selectorDiv.select(\".use-cache\");\n useCacheDiv.property(\"checked\", useCache);\n\n this.configureGraph(selectedGraph, useCache, false, data, this.showDiffFunction, this.nowVisPanel);\n })\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n } from 'd3-selection';\n\nimport {NowVisPanel} from '../nowpanel';\nimport {Widget} from '@lumino/widgets';\n\nexport function functionDiffWindow(functionDiffJson : any, windowIdAndTitle:string, parentDock : NowVisPanel){ \n if(document.getElementById(windowIdAndTitle)){\n alert(\"This function diff is already open!\")\n return\n }\n \n let functionDiffWidget = new Widget();\n functionDiffWidget.title.label = windowIdAndTitle\n functionDiffWidget.id = windowIdAndTitle;\n functionDiffWidget.title.closable = true;\n parentDock.addGraphWidget(functionDiffWidget);\n parentDock.activateWidget(functionDiffWidget);\n\n let functionDiffWindow = d3_select(document.getElementById(windowIdAndTitle));\n functionDiffWindow.style(\"overflow-y\", \"auto\").style(\"padding\", \"2em 2em 2em 1em\");\n\n function addHideShowButton(elementToAppendTo : any, buttonId : string, spanId : string){\n buttonId += \"-\" + crypto.randomUUID();\n return elementToAppendTo.append(\"span\").append(\"i\").attr(\"id\", buttonId).classed(\"fa fa-compress\", true).on(\"click\",()=>{\n let spanToHideOrShow = d3_select(document.getElementById(spanId));\n let thisButton = d3_select(document.getElementById(buttonId));\n if(spanToHideOrShow.classed(\"d-none\")){\n spanToHideOrShow.classed(\"d-none\", false);\n thisButton.classed(\"fa fa-expand\", false);\n thisButton.classed(\"fa fa-compress\", true);\n }else{\n spanToHideOrShow.classed(\"d-none\", true);\n thisButton.classed(\"fa fa-compress\", false);\n thisButton.classed(\"fa fa-expand\", true);\n }\n });\n }\n\n function filterVariablesArray(array : any, opVariables: boolean){\n \n let defaultVariables: any[] = [\"name\", \"attribute\", \"access\"];\n if(opVariables) defaultVariables = defaultVariables.concat([\"add\", \"sub\", \"mult\", \"div\", \"mod\", \"pow\", \"floordiv\", // arithmetic operators\n \"add_assign\", \"sub_assign\", \"mult_assign\", \"div_assign\", // assignment operators 1\n \"mod_assign\", \"pow_assign\", \"floordiv_assign\", // assignment operators 2\n \"bitand_assign\", \"bitor_assign\", \"bitxor_assign\", // assignment operators 3\n \"rshift_assign\", \"lshift_assign\", // assignment operators 4\n \"eq\", \"noteq\", \"gt\", \"lt\", \"gte\", \"lte\", // comparison operators\n \"and\", \"or\", \"not\", // logical operators\n \"is\", \"isnot\", // identity operators\n \"in\", \"notin\", // membership operators\n \"bitand\", \"bitor\", \"bitxor\", \"invert\", \"rshift\", \"lshift\"]); // bitwise operators]\n\n \n\n let filteredArray = array.filter((arrayElement : string)=>{\n\n for(let i = 0; i < defaultVariables.length; i++){\n if(arrayElement.includes(\"'type': '\"+defaultVariables[i]+\"',\")) return true;\n }\n\n return false;\n });\n\n return filteredArray;\n\n }\n\n function writeHTMLDiffVariables(spanVariables: d3_Selection, trial1VariablesThatChanged: any[], trial2VariablesAdded: any[], trial1VariablesRemoved : any[]) {\n\n if(trial1VariablesThatChanged.length > 0){\n\n let variablesChangedTitle = spanVariables.append(\"p\").attr(\"style\",\"font-weight:bold;\").text(\"The variables changed:\");\n let spanVariablesChanged = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-changed-span-\" + crypto.randomUUID());\n addHideShowButton(variablesChangedTitle, \"hide-and-show-button-variables-changed\", spanVariablesChanged.attr(\"id\"));\n\n trial1VariablesThatChanged.forEach((diffVar: any) => {\n let variablesLines = diffVar.match(/\\{[^}]*\\}/g);\n let differentAttributes = findDifferenceBetweenVariables(variablesLines[0], variablesLines[1]);\n\n spanVariablesChanged.append(\"span\").html(colorJsonAttributesHTML(variablesLines[0], differentAttributes, \"red\"));\n spanVariablesChanged.append(\"br\");\n spanVariablesChanged.append(\"span\").html(colorJsonAttributesHTML(variablesLines[1], differentAttributes, \"green\"));\n spanVariablesChanged.append(\"br\");\n spanVariablesChanged.append(\"br\");\n });\n }\n\n if (trial2VariablesAdded.length > 0) {\n let variablesAddedTitle = spanVariables.append(\"p\").attr(\"style\", \"font-weight:bold;\").text(\"The variables added:\");\n let spanVariablesAdded = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-added-span-\"+crypto.randomUUID());\n addHideShowButton(variablesAddedTitle, \"hide-and-show-button-variables-added\", spanVariablesAdded.attr(\"id\"));\n\n trial2VariablesAdded.forEach((varAdded: any) => {\n spanVariablesAdded.append(\"span\").style(\"color\", \"green\").text(varAdded);\n spanVariablesAdded.append(\"br\");\n });\n }\n\n if (trial1VariablesRemoved.length > 0) {\n let variablesRemovedTitle = spanVariables.append(\"p\").attr(\"style\", \"font-weight:bold;\").text(\"The variables removed:\");\n let spanVariablesRemoved = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-removed-span\"+crypto.randomUUID());\n addHideShowButton(variablesRemovedTitle, \"hide-and-show-button-removed-added\", spanVariablesRemoved.attr(\"id\"));\n\n trial1VariablesRemoved.forEach((varRemoved: any) => {\n spanVariablesRemoved.append(\"span\").style(\"color\", \"red\").text(varRemoved);\n spanVariablesRemoved.append(\"br\");\n });\n }\n }\n\n\n function findDifferenceBetweenVariables(variable1 : string, variable2 : string){\n let jsonVariable1 = JSON.parse(variable1.replace(/\"'/g,\"\\\"\").replace(/'\"/g,\"\\\"\").replace(/'/g,\"\\\"\"));\n let jsonVariable2 = JSON.parse(variable2.replace(/\"'/g,\"\\\"\").replace(/'\"/g,\"\\\"\").replace(/'/g,\"\\\"\"));\n \n let differentAttributes = []\n for(let attr in jsonVariable1){\n if (jsonVariable1[attr] != jsonVariable2[attr]) differentAttributes.push(attr.toString());\n }\n \n return differentAttributes;\n }\n \n function colorJsonAttributesHTML(jsonAsString : string, attributesArray : any, color : string) : string{\n let coloredJsonAsString = jsonAsString.replace(/'<([^>]+)>'/g, \"'$1'\");\n attributesArray.forEach((attr : string)=>{\n // Annotated code = color only the attribute\n //attr = \"'\"+attr+\"':\";\n //coloredJsonAsString = coloredJsonAsString.replace(attr, \"\" + attr + \"\");\n let regex = \"'\"+attr+\"':\"+\"(.*?),\"\n let regexMatches = coloredJsonAsString.match(new RegExp(String.raw`\\s${regex}\\s`))!;\n coloredJsonAsString = coloredJsonAsString.replace(regexMatches[1], \"\" + regexMatches[1] + \"\");\n });\n return coloredJsonAsString;\n }\n\n function colorArrayElementsHTML(array : any, symDifference : any, color : string){\n let coloredArray = array;\n symDifference.forEach((argument: any) => { \n if (coloredArray.includes(argument)) coloredArray[coloredArray.indexOf(argument)] = \"\" + argument.toString() + \"\"; \n });\n return coloredArray.toString();\n }\n\n function writeFileAccess(fileAccessArray : any, window : any, color : string){\n fileAccessArray.forEach((file:any)=>{\n window.append(\"span\").style(\"color\", color).text(\"Name: \" + file.name);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Mode: \" + file.mode);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\" Buffering: \" + file.buffering);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Content hash before: \" + file.content_hash_before).on(\"click\", () => {\n downloadFileContent(file.content_hash_before, file.name);\n });\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Content hash after: \" + file.content_hash_after).on(\"click\", () => {\n downloadFileContent(file.content_hash_after, file.name);\n });\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Timestamp: \" + file.timestamp);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Function: \" + file.stack);\n window.append(\"br\");\n window.append(\"br\");\n });\n }\n \n [\"output\", \"arguments\", \"duration\", \"variables\"].forEach((property)=>{\n let didntChange = JSON.stringify(functionDiffJson[property+\"_function_trial1\"]) == JSON.stringify(functionDiffJson[property+\"_function_trial2\"]);\n let changeText = didntChange ? \"The \" + property + \" didn't change\" : \"The \" + property + \" changed:\";\n let textChangeTitle;\n if(property != \"variables\") textChangeTitle = functionDiffWindow.append(\"p\").attr(\"style\",\"font-weight:bold;\").text(changeText);\n\n if(changeText.includes(\"changed\")){\n if(property == \"duration\"){\n functionDiffJson[property+\"_function_trial1\"] = functionDiffJson[property+\"_function_trial1\"].toString() + \" miliseconds\"\n functionDiffJson[property+\"_function_trial2\"] = functionDiffJson[property+\"_function_trial2\"].toString() + \" miliseconds\"\n }\n\n let spanProperty = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-\"+property+\"-span-\"+crypto.randomUUID());\n\n if(property != \"variables\") addHideShowButton(textChangeTitle, \"hide-and-show-button-\"+property, spanProperty.attr(\"id\"));\n \n if(property == \"variables\"){\n\n let buttonDiv = functionDiffWindow.append(\"div\").attr(\"id\", \"div-diff-function-variables-filter\").lower();\n \n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-default\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show only name, attribute, and access variables\")\n .on(\"click\", () => {\n \n let trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_that_changed\"], false);\n let trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial2_variables_added\"], false);\n let trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_removed\"], false);\n\n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered);\n\n })\n .append(\"i\")\n .classed(\"fa fa-asterisk\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show only name, attribute, and access variables\");\n\n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-operation\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show all operation variables\")\n .on(\"click\", () => {\n \n let trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_that_changed\"], true);\n let trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial2_variables_added\"], true);\n let trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_removed\"], true);\n\n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered);\n\n })\n .append(\"i\")\n .classed(\"fa fa-plus-square\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show all operation variables\");;\n\n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-all\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show all variables\")\n .on(\"click\", () => {\n \n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, functionDiffJson[\"trial1_variables_that_changed\"], functionDiffJson[\"trial2_variables_added\"], functionDiffJson[\"trial1_variables_removed\"]);\n\n })\n .append(\"i\")\n .classed(\"fa fa-code\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show all variables\");\n\n writeHTMLDiffVariables(spanProperty, functionDiffJson[\"trial1_variables_that_changed\"], functionDiffJson[\"trial2_variables_added\"], functionDiffJson[\"trial1_variables_removed\"]);\n\n }else if(property == \"arguments\"){\n let symDifference = functionDiffJson[property+\"_function_trial1\"].filter((x: any) => !functionDiffJson[property+\"_function_trial2\"].includes(x))\n .concat(functionDiffJson[property+\"_function_trial2\"].filter((x: any) => !functionDiffJson[property+\"_function_trial1\"].includes(x)));\n\n spanProperty.append(\"span\").html(colorArrayElementsHTML(functionDiffJson[property+\"_function_trial1\"], symDifference, \"red\"));\n spanProperty.append(\"br\");\n spanProperty.append(\"span\").html(colorArrayElementsHTML(functionDiffJson[property+\"_function_trial2\"], symDifference, \"green\"));\n } else {\n spanProperty.append(\"span\").style(\"color\", \"red\").text(functionDiffJson[property+\"_function_trial1\"].toString());\n spanProperty.append(\"br\");\n spanProperty.append(\"span\").style(\"color\", \"green\").text(functionDiffJson[property+\"_function_trial2\"].toString());\n }\n\n }\n\n });\n\n let fileAccessAddedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_added\"].length + \" file accesses added:\");\n let spanFileAccessAdded = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-added-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessAddedTitle, \"hide-and-show-button-file-access-added\", spanFileAccessAdded.attr(\"id\"));\n writeFileAccess(functionDiffJson[\"file_accesses_added\"], spanFileAccessAdded, \"green\");\n\n\n let fileAccessRemovedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_removed\"].length + \" file accesses removed:\");\n let spanFileAccessRemoved = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-removed-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessRemovedTitle, \"hide-and-show-button-file-access-removed\", spanFileAccessRemoved.attr(\"id\"));\n writeFileAccess(functionDiffJson[\"file_accesses_removed\"], spanFileAccessRemoved, \"red\");\n \n \n let fileAccessReplacedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_replaced\"].length + \" file accesses replaced:\")\n let spanFileAccessReplaced = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-replaced-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessReplacedTitle, \"hide-and-show-button-file-access-replaced\", spanFileAccessReplaced.attr(\"id\"));\n \n functionDiffJson[\"file_accesses_replaced\"].forEach((file:any)=>{\n spanFileAccessReplaced.append(\"span\").text(\"Name: \" + file.name);\n spanFileAccessReplaced.append(\"br\");\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\"Mode: \" + file.mode);\n //spanFileAccessReplaced.append(\"br\");\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\" Buffering: \" + file.buffering);\n //spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Content hash before changed from \").append(\"span\").style(\"color\", \"red\").text(file.content_hash_before_first_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_before_first_trial, file.name);\n });\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.content_hash_before_second_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_before_second_trial, file.name);\n });\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Content hash after changed from \").append(\"span\").style(\"color\", \"red\").text(file.content_hash_after_first_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_after_first_trial, file.name);\n });\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.content_hash_after_second_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_after_second_trial, file.name);\n });\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Timestamp changed from \").append(\"span\").style(\"color\", \"red\").text(file.timestamp_first_trial);\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.timestamp_second_trial);\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Checkpoint changed from \").append(\"span\").style(\"color\", \"red\").text(file.checkpoint_first_trial);\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.checkpoint_second_trial);\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\"Function: \" + file.stack);\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"br\");\n });\n\n function downloadFileContent(fileHash: any, fileName : any) {\n var link = document.createElement(\"a\");\n link.download = fileName;\n link.href = window.location.origin + \"/downloadFile/\"+fileHash;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n link.remove();\n } \n\n /* function showFileContent(fileHash: any, fileName : any) {\n fetch(\"getFileContent/\" + fileHash, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n if(fileName.length > 50) fileName = fileName.substring(40);\n\n let modal = d3_select(document.getElementById(\"main\"))\n .append(\"div\").classed(\"modal fade show\", true)\n .attr(\"id\", \"fileContentModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"fileContentModal\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"false\")\n .style(\"display\", \"block\");\n \n let modalDialog = modal.append(\"div\").classed(\"modal-dialog\", true).attr(\"role\",\"document\").style(\"overflow-y\",\"initial\").style(\"max-height\", \"85%\");\n\n let modalContent = modalDialog.append(\"div\").classed(\"modal-content\", true);\n \n let modalHeader = modalContent.append(\"div\").classed(\"modal-header\", true);\n modalHeader.append(\"h5\").classed(\"modal-title\", true).attr(\"id\", \"fileContentModalLabel\").text(\"File \"+fileName+\"'s content:\");\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"data-dismiss\", \"modal\").attr(\"aria-label\", \"Close\")\n .append(\"span\").attr(\"aria-hidden\", \"true\").html(\"×\").on(\"click\", () => modal.remove());\n\n let modalBody = modalContent.append(\"div\").classed(\"modal-body\", true).style(\"overflow-y\", \"auto\").style(\"height\", \"80vh\");\n modalBody.append(\"p\").html(json.file_content.replace(\"\\r\\n\", \"
      \").replace(\"\\n\", \"
      \"));\n });\n });\n } */\n }","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {DockPanel, Widget} from '@lumino/widgets';\n\nimport {\n HistoryGraph,\n VisibleHistoryNode,\n HistoryGraphData,\n HistoryConfig\n} from '@noworkflow/history';\n\nimport {json, makeid} from '@noworkflow/utils';\n\nimport {TrialGraphWidget} from './trial_graph';\nimport {DiffGraphWidget} from './diff_graph';\nimport {NowVisPanel} from '../nowpanel';\nimport {TrialInfoWidget} from '../info/trial_info';\nimport {DiffInfoWidget} from '../info/diff_info';\nimport {ConfigWidget} from '../config_widget';\nimport {AnnontationWidget} from '../annotation_widget';\n\nimport { functionDiffWindow } from './function_diff';\n\nimport * as fs from 'file-saver';\nimport { instance } from \"@viz-js/viz\";\ndeclare var require: any;\nconst pl = require(\"tau-prolog\");\nconst svgPanZoom = require(\"svg-pan-zoom\"); \"svg-pan-zoom\";\n\nexport\nclass HistoryWidget extends Widget {\n\n name: string;\n expId: string;\n cls: string;\n graph: HistoryGraph;\n d3node: d3_Selection;\n config: ConfigWidget;\n annontationWidget: AnnontationWidget;\n rightClickMenu: d3_Selection;\n modal: d3_Selection;\n modalBody: d3_Selection;\n functionDiffWindow = functionDiffWindow;\n\n static url(script = \"*\", execution = \"*\", summarize=false) {\n return (\"trials.json\"\n + \"?script=\" + encodeURIComponent(script)\n + \"&execution=\" + encodeURIComponent(execution)\n + \"&summarize=\" + (summarize? \"1\" : \"0\")\n )\n }\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let content = document.createElement('div');\n node.appendChild(content);\n let d3node = d3_select(content);\n\n let d3content = d3node.append('div')\n .classed('history-content', true)\n\n let filterDiv = d3content.append(\"div\")\n //let filterDiv = form.insert(\"div\", \":first-child\")\n .classed(\"filter\", true)\n .classed(\"hide-toolbar\", true);\n\n let filterInternal = filterDiv.append(\"div\")\n .classed(\"internal\", true);\n let scriptOptions = filterInternal.append(\"select\")\n .attr(\"name\", \"script\")\n .classed(\"select-style script-options\", true);\n\n scriptOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Scripts\");\n\n let executionOptions = filterInternal.append(\"select\")\n .attr(\"name\", \"execution\")\n .classed(\"select-style exec-selection\", true)\n\n executionOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Statuses\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"finished\")\n .text(\"Finished Trials\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"unfinished\")\n .text(\"Unfinished Trials\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"backup\")\n .text(\"Backup Trials\");\n\n let summarize = filterInternal.append(\"div\")\n .classed(\"graph-attr\", true);\n\n summarize.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"summarize\")\n .attr(\"value\", \"\")\n .attr(\"checked\", false)\n .classed(\"summarize\", true)\n .attr(\"id\", \"history-summarize\")\n\n summarize.append(\"label\")\n .attr(\"for\", \"history-summarize\")\n .attr(\"title\", \"Summarize History\")\n .text(\"Summarize\")\n\n let filterReload = filterInternal.append(\"a\")\n .attr(\"href\", \"#\")\n .classed(\"link-button reload-button\", true)\n\n filterReload.append('i')\n .classed(\"fa fa-refresh\", true);\n\n filterReload.append('span')\n .text('Reload');\n\n d3content.append('div')\n .classed('sub-content', true);\n\n return node;\n }\n\n constructor(config: ConfigWidget, name: string, cls: string, expId: string,annontationWidget:AnnontationWidget) {\n super({ node: HistoryWidget.createNode() });\n this.expId = expId;\n this.config = config;\n this.annontationWidget = annontationWidget;\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".script-options\").property(\"value\"),\n this.d3node.select(\".exec-selection\").property(\"value\"),\n this.d3node.select(\".summarize\").property(\"checked\"),\n )\n })\n this.rightClickMenu = this.d3node.append(\"div\")\n .classed(\"dropdown-menu dropdown-menu-sm\", true)\n .attr(\"id\", \"context-menu\")\n .attr(\"selected-trial\", \"\")\n .style(\"display\", \"block\");\n this.buildModal(this.node);\n this.buildRightClickMenu();\n\n //this.setFlag(Widget.Flag.DisallowLayout);\n this.addClass('content');\n this.addClass('trial-widget');\n this.title.label = name;\n this.title.closable = false;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n }\n\n setGraph(data: HistoryGraphData, config: any={}) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new HistoryGraph(this.cls, sub, config);\n this.graph.load(data);\n }\n\n load(script = \"*\", execution = \"*\", summarize=false) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n\n json(\"History\", sub, HistoryWidget.url(script, execution, summarize), (data: HistoryGraphData) => {\n this.setGraph(data, {\n width: this.node.getBoundingClientRect().width - 24,\n height: this.node.getBoundingClientRect().height - 24,\n customCtrlClick: (g: HistoryGraph, d: VisibleHistoryNode) => {\n var redTrial = g.state.selectedNode;\n if (redTrial == null) {\n return true;\n }\n var greenTrial = d;\n let diffGraphWidget = new DiffGraphWidget(\n \"Diff \" + redTrial.display + \"-\" + greenTrial.display,\n \"diff-\" + redTrial.title + \"-\" + greenTrial.title + makeid(),\n redTrial.title, greenTrial.title, this.functionDiffWindow, (this.parent as NowVisPanel)\n );\n diffGraphWidget.d3node.append(\"span\")\n .text(\"Ctrl+(left click) on a function overlap to see the functions' diff\")\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none')\n .lower();\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n\n if (this.config.showInfo()) {\n let diffInfoWidget = new DiffInfoWidget(redTrial.display, greenTrial.display, redTrial.title, greenTrial.title);\n parentDock.addInfoWidget(diffInfoWidget);\n parentDock.activateWidget(diffInfoWidget);\n }\n\n if (this.config.showTrial()) {\n parentDock.addGraphWidget(diffGraphWidget);\n parentDock.activateWidget(diffGraphWidget);\n diffGraphWidget.load(\n this.config.graphType(),\n this.config.useCache()\n );\n }\n return true;\n },\n customWindowTabCommand: (trialIdSimplified : string, windowId : string, command: string)=>{\n \n let trialExportWidget = new Widget();\n trialExportWidget.title.label = command + \" trial \" + trialIdSimplified;\n trialExportWidget.title.closable = true;\n trialExportWidget.id = windowId;\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n parentDock.addGraphWidget(trialExportWidget);\n parentDock.activateWidget(trialExportWidget);\n return true;\n \n },\n customSelectNode: (g: HistoryGraph, d: VisibleHistoryNode) => {\n let trialGraphWidget = new TrialGraphWidget(\"Trial \" + d.display, \"trial-\" + d.title + makeid(), d.title, d.title);\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n\n if (this.config.showInfo()) {\n let trialInfoWidget = new TrialInfoWidget(d,this.annontationWidget);\n parentDock.addInfoWidget(trialInfoWidget);\n parentDock.activateWidget(trialInfoWidget);\n }\n if (this.config.showTrial()) {\n parentDock.addGraphWidget(trialGraphWidget);\n parentDock.activateWidget(trialGraphWidget);\n trialGraphWidget.load(\n this.config.graphType(),\n this.config.useCache()\n );\n }\n return true;\n },\n customForm: (graph: HistoryGraph, form: d3_Selection) => {\n // Toggle Tooltips\n let filterDiv = this.d3node.select(\".history-content .filter\");\n\n let scriptOptions = filterDiv.select(\".script-options\");\n\n let currentScript = scriptOptions.property(\"value\");\n\n scriptOptions.html(\"\");\n\n scriptOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Scripts\");\n\n for (let script of data.scripts) {\n scriptOptions.append(\"option\")\n .attr(\"value\", script)\n .text(script);\n }\n\n scriptOptions.property(\"value\", currentScript);\n\n let filterToggle = form.append(\"input\")\n .attr(\"id\", \"history-\" + graph.graphId + \"-toolbar-filter-check\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-filter-check\")\n .attr(\"value\", \"show\")\n .property(\"checked\", filterDiv.classed('visible'))\n .on(\"change\", () => {\n let visible = filterToggle.property(\"checked\");\n filterToggleI\n .classed('fa-circle-o', visible)\n .classed('fa-circle', !visible);\n filterDiv\n .classed('visible', visible)\n .classed('show-toolbar', visible)\n .classed('hide-toolbar', !visible)\n });\n let filterLabel = form.append(\"label\")\n .attr(\"for\", \"history-\" + graph.graphId + \"-toolbar-filter-check\")\n let filterToggleI = filterLabel.append(\"i\")\n .classed('fa', true)\n .classed(\"fa-circle\", !filterDiv.classed('visible'))\n .classed(\"fa-circle-o\", filterDiv.classed('visible'))\n\n \n // Push trial\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-push-trial\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Push trial\")\n .on(\"click\", () => this.buildPushCommand(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-cloud-upload\", true)\n\n // Pull trial\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-pull-trial\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Pull trial\")\n .on(\"click\", () => this.buildPullCommand(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-cloud-download\", true)\n\n // Add remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-add-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Add remote\")\n .on(\"click\", () => this.buildAddRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-plus-circle\", true)\n\n // Edit remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-edit-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Edit remote\")\n .on(\"click\", () => this.buildEditRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-pencil-square\", true)\n\n // Delete remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-delete-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Delete remote\")\n .on(\"click\", () => this.buildDeleteRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-trash\", true)\n\n \n }\n });\n });\n } \n\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (!this.graph) {\n return;\n }\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n\n private buildModal(div: any) {\n this.modal = d3_select(div).append(\"div\")\n .classed(\"modal fade\", true)\n .attr(\"id\", \"commandsModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"commandsModalTitle\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"true\");\n\n let modalContent = this.modal.append(\"div\")\n .classed(\"modal-dialog\", true)\n .attr(\"role\", \"document\")\n .append(\"div\").classed(\"modal-content\", true); //modal content\n\n let modalHeader = modalContent.append(\"div\")\n .classed(\"modal-header\", true)//modal header\n modalHeader.append(\"h5\")\n .classed(\"modal-title\", true)\n .attr(\"id\", \"exampleModalTitle\")\n .text(\"Change Temporary Title\") //modal title\n\n this.modalBody = modalContent.append(\"div\")\n .classed(\"modal-body\", true);\n\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"type\", \"button\").text(\"x\").style(\"float\", \"right\")\n .on(\"click\", () => cleanModalBodyAndClose(this.modal, this.modalBody)); //close modal\n }\n\n private buildRightClickMenu() {\n\n //let modal = document.getElementById(\"commandsModal\");\n this.buildRestoreTrialCommand(this.modal, this.modalBody);\n this.buildRestoreFileCommand(this.modal, this.modalBody);\n this.buildProvCommand();\n this.buildExportPrologCommand(this.modal, this.modalBody)\n this.buildDataflowCommand(this.modal, this.modalBody)\n this.buildTrialFunctionDiffCommand(this.modal, this.modalBody, this.functionDiffWindow)\n }\n\n buildTrialFunctionDiffCommand(modal: d3_Selection,\n modalBody: d3_Selection, functionDiffWindow : any) {\n\n let self = this\n\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"trial-function-diff-option\")\n .text(\"function activation diff\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\") ?? \"\";\n\n buildTrialFunctionDiffModal(modal, modalBody, parent, trialId, functionDiffWindow, self);\n });\n\n };\n\n buildDataflowCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"dataflow-option\")\n .text(\"export dataflow\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\") ?? \"\";\n\n buildDataflowModal(modal, modalBody, parent, self.graph.config, trialId);\n });\n\n };\n\n buildExportPrologCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"export-option\")\n .text(\"export prolog\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\");\n let exportUrl = \"/commands/export/\" + trialId;\n let exportWindowId = \"Export window \" + trialId;\n\n\n buildExportPrologModal(modal, modalBody, exportUrl, self.graph.config, parent, exportWindowId, trialId);\n\n });\n }\n\n buildProvCommand() {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"prov-option\")\n .text(\"export prov\")\n .on(\"click\", function () {\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n let provWindowId = \"Prov window \" + trialId;\n\n if (document.getElementById(provWindowId)) return;\n\n\n let provUrl = \"/commands/prov/\" + trialId;\n\n\n fetch(provUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n self.graph.config.customWindowTabCommand(parent.getAttribute(\"selected-trial-simplified\")!, provWindowId, \"Prov\");\n let provWindow = d3_select(document.getElementById(provWindowId));\n\n\n if (response.status == 200) {\n provWindow.style(\"overflow-y\", \"auto\");\n let prov_lines = json.prov.split(\"\\n\");\n for (var line in prov_lines) provWindow.append(\"p\").text(prov_lines[line]);\n\n } else {\n window.alert(\"No prov to export\");\n }\n\n });\n });\n });\n }\n\n private buildRestoreFileCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"restore-file-option\")\n .text(\"restore file\")\n .on(\"click\", function () {\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n\n let trialFiles: string[];\n\n fetch(\"/files/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n trialFiles = json.files\n\n changeTitle(parent, \"Restore file trial \")\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n //createFormTextInput(form, \"restoreFile\", \"Restore file\", \"restoreFileHelp\", \"Write the name of the file you want to restore\");\n createFormSelectInput(form, \"restoreFile\", \"Restore file\", 0, trialFiles.length - 1, 0, \"\", \"\", trialFiles);\n createFormTextInput(form, \"restoreFileID\", \"File identifier\", \"restoreIDHelp\", \"(optional) Identifies the file to be restored. It can be either the timestamp, the number of access, or the code hash\");\n createFormTextInput(form, \"restoreFileTarget\", \"Target file path\", \"restoreTargetHelp\", \"(optional) specifies the target path of the restored file\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).attr(\"type\", \"submit\").text(\"restore trial\");\n\n }\n\n submitButton?.on(\"click\", function () {\n //let fileToRestore : string | boolean = getTextInputFormByID(\"restoreFile\", true);\n let fileToRestore = (document.getElementById(\"restoreFile\")).selectedOptions[0].value;\n let fileIdentifier: string | boolean = getTextInputFormByID(\"restoreFileID\", true);\n let targetPath: string | boolean = getTextInputFormByID(\"restoreFileTarget\", false);\n\n let restoreUrl = \"/commands/restore/file/\" + trialId + \"/\" + fileToRestore + \"/\" + fileIdentifier + \"/\" + targetPath;\n\n if (fileToRestore) getRestoreOrCollabCommand(restoreUrl, form, modalBody);\n else addAlert(modalBody, \"alert-danger\", \"Error!\", \"The file's name is empty\");\n\n });\n });\n\n });\n });\n }\n\n private buildRestoreTrialCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"restore-trial-option\")\n .text(\"restore trial\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n changeTitle(parent, \"Restore trial \");\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormCheckInput(form, \"restoreSkipScript\", \"Skip Script\");\n createFormCheckInput(form, \"restoreSkipLocalModules\", \"Skip Local Modules\");\n createFormCheckInput(form, \"restoreSkipFileAccess\", \"Skip File Access\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).attr(\"type\", \"submit\").text(\"restore trial\");\n\n }\n\n submitButton?.on(\"click\", function () {\n let skipScript = (document.getElementById(\"restoreSkipScript\")).checked;\n let skipModules = (document.getElementById(\"restoreSkipLocalModules\")).checked;\n let skipFileAccess = (document.getElementById(\"restoreSkipFileAccess\")).checked;\n\n let restoreUrl = \"/commands/restore/trial/\" + trialId + \"/\" + skipScript + \"/\" + skipModules + \"/\" + skipFileAccess;\n\n getRestoreOrCollabCommand(restoreUrl, form, modalBody);\n\n });\n });\n }\n\n private buildAddRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Add new remote\";\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormTextInput(form, \"inputAddRemoteUrl\", \"Remote URL: \");\n createFormTextInput(form, \"inputAddRemoteName\", \"Remote name: \");\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Add remote\");\n }\n\n submitButton?.on(\"click\", function () {\n let remoteURL = (document.getElementById(\"inputAddRemoteUrl\")).value;\n let remoteName = (document.getElementById(\"inputAddRemoteName\")).value;\n\n let addRemoteURL = \"/collab/remotes/add/\" + remoteName + \"/\" + remoteURL;\n\n fetch(addRemoteURL, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then((json) => {\n form.remove();\n if (response.status == 200) {\n addAlert(modalBody, \"alert-success\", \"Success!\", json.terminal_text);\n } else {\n addAlert(modalBody, \"alert-danger\", \"Error!\", \"\");\n }\n\n });\n });\n\n });\n }\n\n private buildDeleteRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"editDeleteServerUrlId\", \"Delete remote\", \"delete\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildEditRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"editRemoteServerUrlId\", \"Edit remote\", \"edit\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildPushCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"pushServerUrlId\", \"Push experiment\", \"push\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildPullCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"pullServerUrlId\", \"Pull experiment\", \"pull\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private executeCollabCommand(modal: d3_Selection, modalBody: d3_Selection, serverUrlId: string, title: string, command: string, remotes: any) {\n document.getElementById(\"exampleModalTitle\")!.textContent = title;\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n let select: d3_Selection;\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n form.append(\"label\").attr(\"for\", \"remotes\").text(\"Remote: \");\n\n select = form.append(\"select\").attr(\"name\", \"remotes\").attr(\"id\", \"remotes\");\n for (let i = 0; i < remotes.length; i++) {\n select.append(\"option\").attr(\"value\", remotes[i].server_url).text(remotes[i].name);\n }\n\n form.append(\"br\");\n form.append(\"span\").text(\"Remote URL: \");\n let remoteURLText = form.append(\"span\").attr(\"id\", serverUrlId + \"Remote\").text(remotes[0].server_url);\n select.on(\"change\", () => {\n remoteURLText.text(select.node()!.value);\n })\n\n form.append(\"br\");\n if (command == \"edit\") {\n createFormTextInput(form, \"inputEditRemoteName\", \"Remote new name: \");\n }\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(title);\n }\n\n submitButton?.on(\"click\", function () {\n let serverUrl = select.node()!.value;\n\n let collabCommandUrl = \"/commands/\" + command + \"/\" + serverUrl;\n if (command == \"edit\") collabCommandUrl = \"/collab/remotes/edit/\" + (document.getElementById(\"inputEditRemoteName\")).value + \"/\" + serverUrl;\n if (command == \"delete\") collabCommandUrl = \"/collab/remotes/delete/\" + serverUrl;\n\n getRestoreOrCollabCommand(collabCommandUrl, form, modalBody);\n\n });\n }\n\n}\n\nfunction buildTrialFunctionDiffModal(modal: d3_Selection, modalBody: d3_Selection,\n parent: Element, trialId: string, functionDiffWindow : any, self : any) {\n\n let secondTrialId : string;\n changeTitle(parent, \"Function activation diff trial\")\n //document.getElementById(\"exampleModalTitle\")!.textContent = \"Function activation diff trial \" + trialId;\n\n fetch(\"/getFunctionActivations/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n showModal(modal);\n\n if (modalBody) {\n\n //scrollableModal(modalBody);\n\n modalBody.append(\"span\").text(\"Select this trial's activation: \");\n let firstTrialSelectActivation = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"firstTrialFunctionActivations\").attr(\"id\", \"firstTrialFunctionActivations\").style(\"max-width\", \"480px\");\n\n for(let activation in json[\"function_activations\"]){\n firstTrialSelectActivation.append(\"option\").attr(\"value\", json[\"function_activations\"][activation].id).text(JSON.stringify(json[\"function_activations\"][activation]).replace(/{|}/g,\"\").substring(0, 70));\n } \n\n modalBody.append(\"br\");\n\n modalBody.append(\"span\").text(\"Select the other trial: \");\n\n let secondTrialSelect = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"secondTrialSelect\").attr(\"id\", \"secondTrialSelect\");\n\n fetch(\"/getAllTrialsIdsAndTags\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n for(let trial in json){\n secondTrialSelect.append(\"option\").attr(\"value\", json[trial].id).text(json[trial].tag);\n }\n\n modalBody.append(\"br\");\n\n modalBody.append(\"span\").text(\"Select the other trial's activation: \");\n\n let secondTrialSelectActivation = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"secondTrialFunctionActivations\").attr(\"id\", \"secondTrialFunctionActivations\").style(\"max-width\", \"480px\");\n\n getSecondTrialFunctionActivations(secondTrialSelectActivation);\n\n secondTrialSelect.on(\"change\",()=>{\n\n getSecondTrialFunctionActivations(secondTrialSelectActivation);\n\n });\n \n \n modalBody.append(\"br\");\n\n let submitButton = modalBody.append(\"button\").classed(\"btn btn-primary mb-2\", true).style(\"margin-top\", \"10px\").text(\"Confirm\");\n\n submitButton!.on(\"click\", function () {\n\n let firstTrialFunctionId = (document.getElementById(\"firstTrialFunctionActivations\")).selectedOptions[0].value;\n let secondTrialFunctionId = (document.getElementById(\"secondTrialFunctionActivations\")).selectedOptions[0].value;\n \n let url = \"/commands/diff/\"+ trialId +\"/\"+ firstTrialFunctionId + \"/\"+ secondTrialId + \"/\" + secondTrialFunctionId;\n\n fetch(url, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n \n response.json().then((json) => {\n functionDiffWindow(json, \"Diff trial \" + trialId + \" activation_id \" + firstTrialFunctionId + \" trial \" + secondTrialId + \" activation_id \" + secondTrialFunctionId, self.parent as NowVisPanel);\n });\n });\n \n cleanModalBodyAndClose(modal, modalBody);\n \n \n \n });\n\n })});\n\n \n\n }\n\n });\n });\n\n\n\n function getSecondTrialFunctionActivations(secondTrialSelectActivation: d3_Selection) {\n secondTrialId = (document.getElementById(\"secondTrialSelect\")).selectedOptions[0].value;\n\n fetch(\"/getFunctionActivations/\" + secondTrialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n secondTrialSelectActivation.html(\"\");\n\n for (let activation in json[\"function_activations\"]) {\n secondTrialSelectActivation.append(\"option\").attr(\"value\", json[\"function_activations\"][activation].id).text(JSON.stringify(json[\"function_activations\"][activation]).replace(/{|}/g, \"\").substring(0, 70));\n }\n\n });\n });\n }\n}\n\nfunction buildExportPrologModal(modal: d3_Selection, modalBody: d3_Selection, exportUrl: string, config: HistoryConfig, parent: Element, exportWindowId: string, trialId: string | null) {\n let submitButton;\n let form: d3_Selection;\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Prolog\";\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n\n createFormCheckInput(form, \"exportProvRules\", \"Also exports inference rules\");\n createFormCheckInput(form, \"exportProvHideTimestamps\", \"Hide timestamps\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Generate prolog\");\n\n }\n\n submitButton?.on(\"click\", () => {\n let inferenceRules = (document.getElementById(\"exportProvRules\")).checked;\n let hideTimestamps = (document.getElementById(\"exportProvHideTimestamps\")).checked;\n\n exportUrl += \"/\" + inferenceRules + \"/\" + hideTimestamps;\n\n buildExportPrologTab(exportUrl, config, parent, exportWindowId, trialId);\n cleanModalBodyAndClose(modal, modalBody);\n });\n}\n\nfunction buildExportPrologTab(exportUrl: string, config: HistoryConfig, parent: Element, exportWindowId: string, trialId: string | null) {\n\n if (document.getElementById(exportWindowId)) {\n window.alert(\"Close trial \" + trialId + \" prolog tab before generating a new prolog\");\n return;\n }\n\n\n\n fetch(exportUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response: any) => {\n response.json().then((json: any) => {\n\n if (response.status == 200) {\n\n\n config.customWindowTabCommand(parent.getAttribute(\"selected-trial-simplified\")!, exportWindowId, \"Prolog\");\n let exportWindow = d3_select(document.getElementById(exportWindowId));\n\n let form: d3_Selection = (exportWindow.append(\"form\").attr(\"onsubmit\", \"return false;\") as d3_Selection)\n .append(\"div\").classed(\"form-row\", true);\n createFormTextInput(form, \"exportPrologProgram\" + trialId, \"Prolog\").classed(\"col-7\", true);\n createFormTextInput(form, \"exportPrologQuery\" + trialId, \"Query\").classed(\"col\", true);\n\n let submitButton = form.append(\"div\").classed(\"col-auto\", true).style(\"padding-top\", \"5vh\")\n .append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Execute Query\");\n\n\n (document.getElementById(\"exportPrologProgram\" + trialId))!.value = json.export;\n\n let prologSession = pl.create(1000);\n\n let answerCallback = (answer: any, answerString: string) => {\n if (answer == false) {\n\n let answerCardTextId = \"Answers prolog card text \" + trialId;\n let answerCardText = document.getElementById(answerCardTextId) ? d3_select(document.getElementById(answerCardTextId)) : null;\n if (answerCardText == null) {\n let answerWindow = exportWindow.append(\"div\");\n answerWindow.classed(\"card\", true).append(\"div\").classed(\"card-header\", true).text(\"Answers\");\n answerCardText = answerWindow.append(\"div\").classed(\"card-body\", true)\n .append(\"p\").classed(\"card-text\", true).attr(\"id\", answerCardTextId)\n .style(\"overflow-y\", \"auto\").style(\"max-height\", \"35vh\");\n }\n\n answerCardText!.html(answerString);\n return;\n }\n answerString += prologSession.format_answer(answer).toString() + \"
      \";\n\n prologSession.answer((answer: any) => answerCallback(answer, answerString));\n };\n\n submitButton.on(\"click\", () => {\n let prologProgram = getTextInputFormByID(\"exportPrologProgram\" + trialId);\n let userQuery = getTextInputFormByID(\"exportPrologQuery\" + trialId);\n if (prologProgram && userQuery) {\n\n prologSession.consult(prologProgram, {\n success: () => {\n console.log(\"Prolog consult success\");\n prologSession.query(userQuery, {\n success: () => {\n prologSession.answer((answer: any) => answerCallback(answer, \"\"));\n },\n error: () => {\n console.log(\"Erro query\");\n }\n });\n },\n error: () => {\n console.log(\"Prolog consult error\");\n }\n });\n }\n\n\n });\n\n } else {\n console.log(\"Export error\");\n }\n\n });\n });\n}\n\nfunction scrollableModal(modalBody: d3_Selection) {\n let modalDialog = (document.getElementsByClassName(\"modal-dialog\") as HTMLCollectionOf)[0];\n modalDialog.style.overflowY = \"initial\";\n modalDialog.style.maxHeight = \"85%\";\n modalBody.style(\"overflow-y\", \"auto\").style(\"height\", \"80vh\");\n}\n\nfunction getDataflow(response: any, config: HistoryConfig, parent: Element, dataflowWindowId: string, dataflowUrl: string) {\n response.json().then((json: any) => {\n if (response.status == 200) {\n\n let trialIdSimplified = parent.getAttribute(\"selected-trial-simplified\")!;\n\n config.customWindowTabCommand(trialIdSimplified, dataflowWindowId, \"Dataflow\");\n console.log(json.dataflow);\n\n instance().then(viz => {\n const dataflowWindow = document.getElementById(dataflowWindowId);\n\n // Download SVG Button, excluding hint, and excluding checkbox\n dataflowButtons(dataflowWindow, dataflowWindowId, \"Click on a function call, then (Ctrl or Shift)+click on another one to exclude prior provenience\", json.dataflow)\n\n let selectedNode: Element | undefined;\n let selectedEdge: Element | undefined;\n\n //dataflowWindow!.style.overflowY = dataflowWindow!.style.overflowX = \"auto\";\n let svgElement = viz.renderSVGElement(json.dataflow);\n dataflowWindow!.appendChild(svgElement);\n svgPanZoom(svgElement, {preventMouseEventsDefault: false, dblClickZoomEnabled: false});\n\n for (let nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) {\n\n let presentNode: Element | undefined = svgElement.children[0].children[0].children[nodeIndex];\n if (presentNode.getAttribute(\"class\") == \"node\" && presentNode.children[1].tagName.toLowerCase() == \"polygon\") {\n let presentNodeSelection = d3_select(presentNode);\n\n presentNodeSelection.style(\"cursor\", \"pointer\");\n\n presentNodeSelection.on(\"click\", (event: MouseEvent) => {\n\n if (selectedNode) { selectedNode.children[1].setAttribute(\"stroke\", \"black\"); }\n\n if (selectedNode && (event.ctrlKey || event.shiftKey)) {\n deletePriorNodes(selectedNode, presentNode!, viz, dataflowUrl, config, trialIdSimplified, dataflowWindowId);\n } else {\n selectedNode = svgElement.children[0].children[0].children[nodeIndex];\n selectedNode.children[1].setAttribute(\"stroke\", \"red\");\n }\n });\n } else if (presentNode.getAttribute(\"class\") == \"edge\" && presentNode.children[1].tagName.toLowerCase() == \"path\"){\n let presentNodeSelection = d3_select(presentNode);\n\n presentNodeSelection.style(\"cursor\", \"pointer\");\n\n presentNodeSelection.on(\"click\",()=>{\n if (selectedEdge) {selectedEdge.children[1].setAttribute(\"stroke\", \"black\");}\n selectedEdge = svgElement.children[0].children[0].children[nodeIndex];\n selectedEdge.children[1].setAttribute(\"stroke\", \"red\");\n });\n }\n }\n });\n\n\n } else {\n console.log(\"Dataflow error\");\n }\n\n });\n\n}\n\nfunction checkboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow: HTMLElement) {\n\n let dataflowWindowD3Select = d3_select(dataflowWindow);\n let checkboxID = dataflowWindow.getAttribute(\"id\") + \"OpenNewWindowOption\";\n \n dataflowWindowD3Select.append(\"input\")\n .attr(\"id\", checkboxID)\n .attr(\"type\", \"checkbox\");\n\n dataflowWindowD3Select.append(\"label\")\n .attr(\"for\", checkboxID)\n .text(\"Don't open dataflow with excluded provenance in a new tab\")\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n}\n\nfunction excludePriorProvenanceHint(dataflowWindow: HTMLElement | null, text : string) {\n d3_select(dataflowWindow).append(\"div\").append(\"div\")\n .text(text)\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n}\n\nfunction chooseDataflowExcludedProvenanceWindowId(presentWindowId : string, newWindowId : string){\n if((document.getElementById(presentWindowId + \"OpenNewWindowOption\") as HTMLInputElement).checked) return presentWindowId;\n return newWindowId;\n}\n\nfunction deletePriorNodes(selectedNode: Element, presentNode: Element, viz: any, dataflowUrl: string,\n config: HistoryConfig, trialIdSimplified: string, presentWindowId: string) {\n\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\"));\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\")) + \"/true/\";\n\n let selectedNodeEvaluationTitle = selectedNode.children[0].innerHTML;\n let presentNodeOrderEvaluationTitle = presentNode.children[0].innerHTML;\n\n let firstEvaluationOrder = Number(selectedNodeEvaluationTitle.replace(\"e_\", \"\"));\n let lastEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n if (firstEvaluationOrder > lastEvaluationOrder) {\n lastEvaluationOrder = firstEvaluationOrder;\n firstEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n }\n\n let dataflowUrlLastEvaluation = dataflowUrl + lastEvaluationOrder;\n let dataflowUrlFirstEvaluation = dataflowUrl + firstEvaluationOrder;\n\n let excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(presentWindowId, \"Dataflow excluding prior \" + presentNodeOrderEvaluationTitle + \" \" + selectedNodeEvaluationTitle\n + \" window \" + trialIdSimplified, trialIdSimplified, config);\n\n excludingProvenanceWindow!.textContent = \"Loading...\";\n\n fetch(dataflowUrlLastEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseLastEvaluation: any) => {\n responseLastEvaluation.json().then((jsonLastEvaluation: any) => {\n let dataflowLastEvaluation = jsonLastEvaluation.dataflow;\n fetch(dataflowUrlFirstEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseFirstEvaluation: any) => {\n responseFirstEvaluation.json().then((jsonFirstEvaluation: any) => {\n let dataflowFirstEvaluation = jsonFirstEvaluation.dataflow;\n\n dataflowAMinusDataflowB(dataflowLastEvaluation, dataflowFirstEvaluation, firstEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationOrder);\n\n });\n });\n });\n });\n\n}\n\nfunction getDataflowWindowExcludeSomeProvenance(presentWindowId: string, newWindowId: string, trialIdSimplified: string, config: HistoryConfig) {\n let excludingProvenanceWindowId = chooseDataflowExcludedProvenanceWindowId(presentWindowId, newWindowId);\n\n let excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId);\n\n if (!excludingProvenanceWindow) {\n\n config.customWindowTabCommand(trialIdSimplified, excludingProvenanceWindowId, \"Dataflow excluding some provenance\");\n\n excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId);\n\n }\n return excludingProvenanceWindow;\n}\n\nfunction dataflowAMinusDataflowB(dataflowA: any, dataflowB: any, selectedEvaluationOrder: number, excludingProvenanceWindow: HTMLElement | null, viz: any, dataflowUrl: string, config : HistoryConfig, lastEvaluationId : number) {\n //SET MINUS OPERATION A-B \"The set A−B consists of elements that are in A but not in B. For example if A={1,2,3} and B={3,5}, then A−B={1,2}.\"\n let linesDataflowA = dataflowA.split(\"\\n\");\n let linesDataflowB = dataflowB.split(\"\\n\");\n let newDataflow = linesDataflowA.slice(0);\n\n removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB, newDataflow, selectedEvaluationOrder);\n\n let dataflowIsAligned = addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow, selectedEvaluationOrder, linesDataflowA);\n\n removesDeletedEvaluationsFromAligment(dataflowIsAligned, newDataflow);\n\n console.log(\"------\");\n let newDataflowString = newDataflow.join(\"\\n\");\n console.log(newDataflowString);\n console.log(\"------\");\n\n excludingProvenanceWindow!.textContent = \"\";\n\n dataflowButtons(excludingProvenanceWindow, excludingProvenanceWindow!.getAttribute(\"id\")!, \"(Ctrl or Shift)+click on a function call to exclude prior provenience\", newDataflowString)\n\n let svgElement = viz.renderSVGElement(newDataflowString);\n excludingProvenanceWindow!.appendChild(svgElement);\n svgPanZoom(svgElement, {preventMouseEventsDefault: false, dblClickZoomEnabled: false});\n\n addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId);\n \n}\n\nfunction addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement: any, viz: any, dataflowUrl: string, newDataflowString: any, excludingProvenanceWindow: HTMLElement | null, config : HistoryConfig, lastEvaluationId : number) {\n let selectedEdge : Element | undefined;\n \n for (let nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) {\n\n let selectedNode: Element = svgElement.children[0].children[0].children[nodeIndex];\n if (selectedNode.getAttribute(\"class\") == \"node\" && selectedNode.children[1].tagName.toLowerCase() == \"polygon\") {\n\n let selectedNodeSelection = d3_select(selectedNode);\n \n selectedNodeSelection.style(\"cursor\", \"pointer\");\n \n selectedNodeSelection.on(\"click\", (event: MouseEvent) => {\n\n if (event.ctrlKey || event.shiftKey) deletePriorNodesAfterDeletingPriorNodes(selectedNode, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId);\n\n });\n } else if (selectedNode.getAttribute(\"class\") == \"edge\" && selectedNode.children[1].tagName.toLowerCase() == \"path\"){\n\n let selectedNodeSelection = d3_select(selectedNode);\n\n selectedNodeSelection.style(\"cursor\", \"pointer\");\n\n selectedNodeSelection.on(\"click\",()=>{\n if (selectedEdge) {selectedEdge.children[1].setAttribute(\"stroke\", \"black\");}\n selectedEdge = svgElement.children[0].children[0].children[nodeIndex];\n selectedEdge!.children[1].setAttribute(\"stroke\", \"red\");\n });\n }\n }\n}\n\nfunction deletePriorNodesAfterDeletingPriorNodes(selectedNode: Element, viz: any, dataflowUrl: string, newDataflowString: any, excludingProvenanceWindow: HTMLElement | null, config : HistoryConfig, lastEvaluationId : number) {\n\n let selectedNodeOrderEvaluationTitle = selectedNode.children[0].innerHTML;\n let selectedEvaluationOrder = Number(selectedNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n\n if(lastEvaluationId == selectedEvaluationOrder){\n window.alert(\"You can't remove everything.\")\n return undefined;\n } \n \n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\"));\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\")) + \"/true/\";\n\n \n\n let dataflowUrlPresentEvaluation = dataflowUrl + selectedEvaluationOrder;\n\n\n let excludingProvenanceWindowId = excludingProvenanceWindow?.getAttribute(\"id\");\n excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(excludingProvenanceWindowId!, excludingProvenanceWindowId+\"OneMore\", \"\", config);//TODO get simplifiedtrialid from wxcludingprovenancewindow\n\n excludingProvenanceWindow!.textContent = \"Loading...\";\n\n fetch(dataflowUrlPresentEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseLastEvaluation: any) => {\n responseLastEvaluation.json().then((json: any) => {\n\n let selectedEvaluationDataflow = json.dataflow;\n\n dataflowAMinusDataflowB(newDataflowString, selectedEvaluationDataflow, selectedEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationId);\n\n });\n });\n}\n\nfunction removesDeletedEvaluationsFromAligment(dataflowIsAligned: boolean, newDataflow: any) {\n if (dataflowIsAligned) {\n\n let evaluations: any = [];\n\n for (let lineIndex = 3; lineIndex < newDataflow.length; lineIndex++) {\n let line = newDataflow[lineIndex];\n if (line.includes(\"label\")) evaluations.push(line.replace(/\\[[^\\]]*?\\];/, \"\").split(\" \")[4].trim());\n\n else if (line.includes(\"{rank=\")) {\n let alignedEvaluations = line.split(\" \");\n\n for (let alignedEvalIndex = 5; alignedEvalIndex < alignedEvaluations.length; alignedEvalIndex++) {\n let alignedEval = alignedEvaluations[alignedEvalIndex].replace(\"}\\r\", \"\").trim();\n\n if (!evaluations.includes(alignedEval)) newDataflow[lineIndex] = newDataflow[lineIndex].replace(alignedEval, \"\");\n }\n }\n\n else if (line.includes(\"->\")) break;\n }\n }\n}\n\nfunction removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB: any, newDataflow: any, selectedEvaluationOrder: number) {\n for (let i = 3; i < linesDataflowB.length - 2; i++) {\n let indexOfDataflowLineToRemove;\n\n if (linesDataflowB[i].includes(\"->\") && linesDataflowB[i].includes(\"[\")) {\n\n let lineToRemove = linesDataflowB[i].replace(/\\[[^\\]]*\\]/, \"\");\n\n indexOfDataflowLineToRemove = newDataflow.findIndex((dataflowLine: string) => {\n return dataflowLine.replace(/\\[[^\\]]*\\]/, \"\") == lineToRemove;\n });\n\n\n } else indexOfDataflowLineToRemove = newDataflow.indexOf(linesDataflowB[i]);\n\n if (indexOfDataflowLineToRemove > -1 && (!linesDataflowB[i].includes(\"_\" + selectedEvaluationOrder + \" [\"))) newDataflow.splice(indexOfDataflowLineToRemove, 1);\n\n }\n}\n\nfunction addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow: any, selectedEvaluationOrder: number, linesDataflowA: any) {\n let tempArray: any[] = [];\n let isAligned = false;\n\n newDataflow.forEach((line: string) => {\n if (!isAligned && line.includes(\"{rank\")) isAligned = true;\n\n\n if (line.includes(\"->\")) {\n let evaluationWithoutSettings = line.split(\" \")[6];\n if (Number(evaluationWithoutSettings.replace(\"e_\", \"\").replace(\"a_\", \"\")) < selectedEvaluationOrder) { // TODO revise if firstEvaluationOrder is right\n let lineToAdd = linesDataflowA.find((string: string) => string.includes(evaluationWithoutSettings + \" [\"));\n if (newDataflow.indexOf(lineToAdd) < 0) tempArray.push(lineToAdd);\n }\n }\n });\n\n tempArray.forEach(item => newDataflow.splice(3, 0, item));\n\n return isAligned\n}\n\nfunction buildDataflowModal(modal: d3_Selection, modalBody: d3_Selection,\n parent: Element, config: HistoryConfig, trialId: string) {\n\n let submitButton;\n let evaluationList;\n let form: d3_Selection;\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Dataflow\";\n\n fetch(\"/dataflow/evaluations/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n evaluationList = json.evaluations;\n let selectedEvaluation: string | null;\n let dataflowTextInputEvaluation: HTMLSelectElement;\n\n showModal(modal);\n\n if (modalBody) {\n\n scrollableModal(modalBody);\n\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormCheckInput(form, \"dataFlowShowType\", \"Show type nodes\");\n createFormCheckInput(form, \"dataFlowHideTimestamps\", \"Hide timestamps\");\n createFormCheckInput(form, \"dataFlowHideInternals\", \"Show variables and functions which name starts with a leading underscore\");\n createFormCheckInput(form, \"dataFlowHideNotCode\", \"Hide evaluations that aren't from the code\");\n createFormCheckInput(form, \"dataFlowActivationNames\", \"Display nodes with their activation names instead\");\n createFormCheckInput(form, \"dataFlowHideFunc\", \"Hide func type evaluations\");\n\n createFormSelectInput(form, \"dataflowShowAccesses\", \"Show file accesses\", 0, 4, 1, \"dataflowShowAccessesHelp\",\n \"(default: Shows each file once (hide external accesses))\",\n [\"Hides file accesses\", \"Shows each file once (hide external accesses)\", \"Shows each file once (show external accesses)\",\n \"Shows all accesses (except external accesses)\", \"Shows all accesses (including external accesses)\"]);\n\n createFormSelectInput(form, \"dataflowEvaluation\", \"Combine evaluation nodes\", 0, 2, 1, \"dataflowEvaluationHelp\",\n \"(default: Combines evaluation nodes by assignment)\",\n [\"Not combine evaluation nodes\", \"Combines evaluation nodes by assignment\", \"Combines evaluation nodes by value\"]);\n\n createFormSelectInput(form, \"dataflowGroup\", \"Align evalutions in the same column\", 0, 2, 0,\n \"dataflowGroupHelp\",\n \"(default: Does no align). With this option, all variables in a loop appear grouped, reducing the width of the graph. It may affect the graph legibility. The alignment is independent for each activation.\",\n [\"Does no align\", \"Aligns by line\", \"Aligns by line and column\"]);\n\n createFormSelectInput(form, \"dataflowMode\", \"Graph mode\", 0, 4, 1, \"dataflowModeHelp\",\n \"(default: coarseGrain). 'activation' presents only function activations and file accesses. Dependencies on the dataflow are clustered by depth(-d). 'coarseGrain' is the same as the activation dataflow, but with the addition of parameters and variable assignment of function activations. 'looplessCoarseGrain' is the same as the coarseGrain dataflow, but it doesn't repeat function activations when they're in the same line in a loop. 'fineGrain' is the same as the coarseGrain dataflow with the addition of variables, all user defined evaluations and data values. 'all' presents a dataflow with all evaluations and function activations. Dependencies on the dataflow are not clustered.\",\n [\"activation\", \"coarseGrain\", \"looplessCoarseGrain\", \"fineGrain\", \"all\"]);\n\n createFormNumberInput(form, \"dataflowDepth\", \"Visualization depth\", 0, 0, \"dataflowDepthHelp\", \"(default: 0) 0 represents infinity. This parameter is ignored when the mode is \\\"all\\\"\");\n createFormNumberInput(form, \"dataflowValueLength\", \"Maximum length of values\", 0, 0, \"dataflowValueLengthHelp\",\n \"(default: 0). 0 indicates that values should be hidden.The values appear on the second line of node lables. E.g. if it is set to '10', it will show 'data.dat', but it will transform 'data2.dat' in to 'da...dat' to respect the length restriction (note that '' is part of the value). Minimum displayable value: 5. Suggested: 55.\");\n createFormNumberInput(form, \"dataflowName\", \"Maximum length of names\", 0, 55, \"dataflowNameHelp\",\n \"(default: 55). 0 indicates that values should be hidden. Minimum displayable value: 5. Suggested: 55.\");\n\n let dataflowEvaluationInput = createFormTextInput(form, \"dataflowTextInputEvaluation\", \"Evaluation was derived from: \", \"dataflowSelectEvaluationHelp\", \"Filter that shows only one evaluation and the ones that derived it\");\n\n form.append(\"div\").attr(\"id\", \"autocompleteSuggestionsResults\");\n\n dataflowTextInputEvaluation = (document.getElementById(\"dataflowTextInputEvaluation\"))\n\n\n addsAutocompleteToDataflowWDF(dataflowEvaluationInput, dataflowTextInputEvaluation, evaluationList);\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Generate dataflow\");\n\n }\n\n submitButton!.on(\"click\", function () {\n let dataFlowShowType = (document.getElementById(\"dataFlowShowType\")).checked;\n let dataFlowHideTimestamps = (document.getElementById(\"dataflowMode\")).checked;\n let dataFlowHideInternals = (document.getElementById(\"dataFlowHideInternals\")).checked;\n let dataFlowHideNotCode = (document.getElementById(\"dataFlowHideNotCode\")).checked;\n let dataFlowActivationNames = (document.getElementById(\"dataFlowActivationNames\")).checked;\n let dataFlowHideFunc = (document.getElementById(\"dataFlowHideFunc\")).checked;\n\n let dataflowFileAccesses = (document.getElementById(\"dataflowShowAccesses\")).selectedOptions[0].index;\n let dataflowEvaluation = (document.getElementById(\"dataflowEvaluation\")).selectedOptions[0].index;\n let dataflowGroup = (document.getElementById(\"dataflowGroup\")).selectedOptions[0].index;\n let dataflowMode = (document.getElementById(\"dataflowMode\")).selectedOptions[0].value;\n\n let dataflowDepth = (document.getElementById(\"dataflowDepth\")).value;\n let dataflowValueLength = (document.getElementById(\"dataflowValueLength\")).value;\n let dataflowName = (document.getElementById(\"dataflowName\")).value;\n\n let trialId = parent.getAttribute(\"selected-trial\");\n\n selectedEvaluation = dataflowTextInputEvaluation.getAttribute(\"selectedEvaluationID\");\n\n let dataflowUrl = \"/commands/dataflow/\" + trialId + \"/\" + dataFlowShowType + \"/\" + dataFlowHideTimestamps + \"/\" +\n dataFlowHideInternals + \"/\" + dataFlowHideNotCode + \"/\"+ dataFlowActivationNames + \"/\"+ dataFlowHideFunc + \"/\" +dataflowFileAccesses + \"/\" + dataflowEvaluation + \n \"/\" + dataflowGroup + \"/\" + dataflowDepth + \"/\" + dataflowValueLength + \"/\" + dataflowName + \"/\" + dataflowMode;\n dataflowUrl += (selectedEvaluation && !selectedEvaluation.includes(\"undefined\")) ? \"/true/\" + selectedEvaluation : \"/false/0\";\n\n let dataflowWindowId = \"Dataflow window \" + trialId;\n\n /* if (document.getElementById(dataflowWindowId)) {\n window.alert(\"Close trial \" + trialId + \" dataflow tab before generating a new dataflow\");\n return;\n } */\n\n if (document.getElementById(dataflowWindowId)) dataflowWindowId += crypto.randomUUID();\n\n fetch(dataflowUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response: any) => {\n console.log(dataflowMode);\n cleanModalBodyAndClose(modal, modalBody);\n getDataflow(response, config, parent, dataflowWindowId, dataflowUrl);\n });\n\n\n\n });\n\n });\n });\n\n\n}\n\nfunction addsAutocompleteToDataflowWDF(dataflowEvaluationInput: d3_Selection, dataflowTextInputEvaluation: HTMLSelectElement, evaluationList: any) {\n dataflowEvaluationInput.on(\"keyup\", () => {\n\n let input = dataflowTextInputEvaluation.value;\n let autocompleteSuggestionsResults = (document.getElementById(\"autocompleteSuggestionsResults\"));\n let evaluationInputHint = (document.getElementById(\"dataflowSelectEvaluationHelp\"));\n\n autocompleteSuggestionsResults.innerHTML = \"\";\n\n let suggestions: any[];\n\n if (input == \"\") {\n autocompleteSuggestionsResults.setAttribute(\"style\", \"\");\n evaluationInputHint.style.opacity = \"1\";\n suggestions = [];\n dataflowTextInputEvaluation.setAttribute(\"selectedEvaluationID\", \"undefined\");\n }\n else {\n autocompleteSuggestionsResults.style.border = \"1px solid #ccc\";\n autocompleteSuggestionsResults.style.padding = \"3px\";\n autocompleteSuggestionsResults.style.marginTop = \"-3rem\";\n evaluationInputHint.style.opacity = \"0\";\n\n suggestions = evaluationList!.filter((evaluation: any) => {\n if (evaluation.name.includes(input)) return evaluation;\n });\n\n autocompleteSuggestionsResults.innerHTML = \"
        \";\n\n\n for (let i = 0; i < suggestions.length; i++) {\n let evaluationSuggestionId = suggestions[i].evaluation_id + \" \" + \"evaluationSuggestionItem\";\n\n d3_select(document.getElementById(\"dataflowEvaluationSuggestionsBoxId\")).append(\"li\").attr(\"id\", evaluationSuggestionId)\n .style(\"padding\", \"5px 0\")\n .style(\"z-index\", 1)\n .text(\"Evaluation: \" + suggestions[i].name + \" \" + \"Code_line: \" + suggestions[i].first_char_line)\n .on(\"click\", () => {\n dataflowTextInputEvaluation.value = suggestions[i].name;\n input = suggestions[i].name;\n dataflowTextInputEvaluation.setAttribute(\"selectedEvaluationID\", suggestions[i].evaluation_id);\n })\n .on(\"mouseover\", () => { d3_select(document.getElementById(evaluationSuggestionId)).style(\"background-color\", \"#eee\"); })\n .on(\"mouseout\", () => { d3_select(document.getElementById(evaluationSuggestionId)).style(\"background-color\", \"\"); });\n }\n\n\n\n }\n\n });\n}\n\nfunction downloadDataflowAsSVG(dataflowWindow: HTMLElement | null, dataflowWindowId: string, dataflowDOT : string, appendDiv : boolean) {\n let div = appendDiv ? d3_select(dataflowWindow).append(\"div\").attr(\"id\", dataflowWindowId + \"-downloadDiv\") : d3_select(document.getElementById(dataflowWindowId + \"-downloadDiv\"));\n div.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", dataflowWindowId + \"-downloadSVG\")\n .attr(\"href\", \"#\")\n .style(\"color\", \"black\")\n .style(\"margin-right\", \"10px\")\n .attr(\"title\", \"Download dataflow SVG\")\n .on(\"click\", () => {\n instance().then(viz => {\n let svgElement = viz.renderSVGElement(dataflowDOT);\n fs.saveAs(new Blob([svgElement.outerHTML], { type: \"image/svg+xml\" }), \"dataflow.svg\");\n });\n //fs.saveAs(new Blob([dataflowWindow!.getElementsByTagName(\"svg\")[0].outerHTML], { type: \"image/svg+xml\" }), \"dataflow.svg\");\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n}\n\nfunction downloadDataflowAsDOT(dataflowWindow: HTMLElement | null, dataflowWindowId: string, dataflowDOT : string, appendDiv: boolean) {\n let div = appendDiv ? d3_select(dataflowWindow).append(\"div\").attr(\"id\", dataflowWindowId + \"-downloadDiv\") : d3_select(document.getElementById(dataflowWindowId + \"-downloadDiv\"));\n div.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", dataflowWindowId + \"-downloadDOT\")\n .attr(\"href\", \"#\")\n .style(\"color\", \"black\")\n .attr(\"title\", \"Download dataflow DOT\")\n .on(\"click\", () => {\n fs.saveAs(new Blob([dataflowDOT.trim()], { type: \"text/plain;charset=utf-8\" }), \"dataflow.dot\");\n })\n .append(\"i\")\n .classed(\"fa fa-file-text\", true);\n}\n\nfunction dataflowButtons(dataflowWindow: HTMLElement | null, dataflowWindowId: string, excludeProvenanceHint : string, dataflowDOT : string){\n downloadDataflowAsSVG(dataflowWindow, dataflowWindowId, dataflowDOT, true);\n\tdownloadDataflowAsDOT(dataflowWindow, dataflowWindowId, dataflowDOT, false)\n\texcludePriorProvenanceHint(dataflowWindow, excludeProvenanceHint);\n\tcheckboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow!);\n}\n\nfunction getRestoreOrCollabCommand(serverUrl: string, form: d3_Selection,\n modalBody: d3_Selection) {\n fetch(serverUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then((json) => {\n form.remove();\n if (response.status == 200 && (!json.terminal_text.includes(\"not\") || (serverUrl.includes(\"edit\")))) {\n addAlert(modalBody, \"alert-success\", \"Success!\", json.terminal_text);\n } else {\n addAlert(modalBody, \"alert-danger\", \"Error!\", json.terminal_text);\n }\n\n });\n });\n}\n\nfunction changeTitle(parent: Element, commandTitle: string) {\n let trialIdTitle = parent.getAttribute(\"selected-trial-simplified\");\n document.getElementById(\"exampleModalTitle\")!.textContent = commandTitle + trialIdTitle;\n}\n\nfunction cleanModalBodyAndClose(modal: d3_Selection,\n modalBody: d3_Selection) {\n document.getElementsByClassName(\"modal-body\")[0].textContent = \"\";\n modalBody.style(\"height\", null);\n hideModal(modal);\n}\n\nfunction addAlert(div: d3_Selection, alertType: string, title: string, text: string) {\n let feedbackAlert = div.append(\"div\").classed(\"alert \" + alertType, true).attr(\"role\", \"alert\");\n feedbackAlert.append(\"h4\").text(title).append(\"button\").classed(\"close\", true).attr(\"type\", \"button\").text(\"x\").on(\"click\", () => {\n feedbackAlert.remove();\n });\n feedbackAlert.append(\"p\").text(text);\n}\n\nfunction createFormCheckInput(form: d3_Selection, checkInputId: string, text: string) {\n let checkDiv = form.append(\"div\").classed(\"form-check\", true);\n checkDiv.append(\"input\").classed(\"form-check-input\", true).attr(\"value\", \"\").attr(\"id\", checkInputId)\n .attr(\"type\", \"checkbox\");\n checkDiv.append(\"label\").classed(\"form-check-label\", true).attr(\"for\", checkInputId)\n .text(text);\n}\n\nfunction createFormTextInput(form: d3_Selection, textInputId: string, text: string, helpId?: string, helpText?: string) {\n let textDiv = form.append(\"div\").classed(\"form-group\", true);\n textDiv.append(\"label\").attr(\"for\", textInputId).text(text);\n let textInput = textDiv.append(\"textarea\").classed(\"form-control\", true).attr(\"id\", textInputId);\n if (helpId && helpText) {\n textInput.attr(\"aria-describedby\", helpId);\n textDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n return textDiv;\n}\n\nfunction createFormSelectInput(form: d3_Selection,\n selectId: string, selectText: string, minOptionNumber: number, maxOptionNumber: number, defaultOption?: number,\n helpId?: string, helpText?: string, optionsLabels?: Array) {\n let selectDiv = form.append(\"div\").classed(\"form-group\", true);\n let selectInput = selectDiv.append(\"label\").attr(\"for\", selectId).text(selectText)\n .append(\"select\").classed(\"form-control\", true).attr(\"id\", selectId);\n\n if (helpId && helpText) {\n selectInput.attr(\"aria-describedby\", helpId);\n selectDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n for (var optionNumber = minOptionNumber; optionNumber <= maxOptionNumber; optionNumber++) {\n let inputLabel = optionsLabels ? optionsLabels[optionNumber] : optionNumber;\n let input = selectInput.append(\"option\").text(inputLabel);\n if (defaultOption && optionNumber == defaultOption) input.attr(\"selected\", \"selected\");\n }\n}\n\nfunction createFormNumberInput(form: d3_Selection, id: string, text: string, minValue: number, defaultValue: number,\n helpId?: string, helpText?: string) {\n let numberDiv = form.append(\"div\").classed(\"form-group\", true);\n numberDiv.append(\"label\").classed(\"form-check-label\", true).attr(\"for\", id)\n .text(text);\n\n numberDiv.append(\"input\").attr(\"type\", \"number\").attr(\"id\", id).attr(\"min\", minValue).attr(\"value\", defaultValue)\n .attr(\"oninput\", \"validity.valid||(value='');\").attr(\"aria-describedby\", \"dataflowDepthHelp\");\n\n if (helpId && helpText) {\n numberDiv.attr(\"aria-describedby\", helpId);\n numberDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n}\n\nfunction getTextInputFormByID(id: string, replace?: boolean) {\n let formTextInput: string | boolean = (document.getElementById(id)).value\n if (replace) formTextInput.replace(\"/\", \"%2F\").replace(\"\\\\\", \"%5C\");\n if (!formTextInput) formTextInput = false;\n return formTextInput;\n}\n\nfunction hideModal(modal: d3_Selection) {\n if (modal) modal.style(\"display\", \"none\").style(\"padding-right\", \"\").classed(\"show\", false).attr(\"aria-hidden\", \"true\");\n}\n\nfunction showModal(modal: d3_Selection) {\n if (modal) modal.style(\"display\", \"block\").style(\"padding-right\", \"17px\").classed(\"show\", true).attr(\"aria-hidden\", \"false\");\n}","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {json} from '@noworkflow/utils';\n\nimport {BaseActivationGraphWidget} from './base_activation_graph';\n\nimport {TrialGraph, TrialGraphData} from '@noworkflow/trial';\n\n\nexport\nclass TrialGraphWidget extends BaseActivationGraphWidget {\n\n name: string;\n cls: string;\n t1: string;\n t2: string;\n graph: TrialGraph;\n d3node: d3_Selection;\n\n static url(trialId: string, selectedGraph: string, useCache: boolean) {\n let cache = useCache ? \"1\" : \"0\"\n return (\"trials/\"\n + trialId + \"/\" + selectedGraph + \"/\" + cache + \".json\"\n );\n }\n\n constructor(name: string, cls: string, t1: string, t2: string) {\n super({ node: BaseActivationGraphWidget.createNode(cls) });\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".graph-type\").property(\"value\"),\n this.d3node.select(\".use-cache\").property(\"checked\"),\n )\n })\n this.addClass('content');\n this.addClass('trial-widget');\n this.title.label = name;\n this.title.closable = true;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n this.t1 = t1;\n this.t2 = t2;\n }\n\n setGraph(data: TrialGraphData, config: any={}) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new TrialGraph(this.cls, sub, config);\n this.graph.load(data, this.t1, this.t2);\n\n }\n\n graphDefinition(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData) {\n var result = super.graphDefinition(selectedGraph, useCache, genDataflow, data);\n return Object.assign({}, result, {\n queryTooltip: selectedGraph != \"definition_tree\"\n });\n }\n\n load(selectedGraph: string = \"namespace_match\", useCache: boolean = true) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n json(\"Trial\", sub, TrialGraphWidget.url(this.t1, selectedGraph, useCache), (data: TrialGraphData) => {\n this.configureGraph(selectedGraph, useCache, true, data);\n })\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graph) {\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n }\n\n}\n\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\nimport { Message } from '@lumino/messaging';\ninterface IAddMember {\n userId: string;\n }\ninterface IUser {\n id: string;\n login: string\n }\ninterface IGroup {\n id: string;\n name: string;\n members: Array;\n}\n\nexport \nclass GroupWidget extends Widget {\n\n d3node: d3_Selection;\n tBody: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n userIn: d3_Selection;\n addMemberForm: d3_Selection;\n groups: Array;\n users: Array;\n currentGroup: String;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor() {\n super({ node: GroupWidget.createNode() });\n this.d3node = d3_select(this.node);\n\n \n this.addClass('content');\n this.title.label = \"Group Information\";\n this.title.closable = false\n this.title.caption = `Group`;\n this.setNode();\n }\n protected onBeforeShow(msg: Message): void {\n if(!this.groups){\n this.setGroups();\n this.setUsers();\n }\n \n }\n async setUsers(){\n var _thiss=this;\n _thiss.userIn.html(\"\");\n var response= await fetch(\"users\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.users= new Array();\n\n var obj=await response.json();\n\n\n obj.forEach( function(item: any){\n \n _thiss.users.push({\n id: item.id,\n login: item.userLogin\n });\n }); \n }else{\n this.showNode(_thiss.errorFeedback);\n }\n _thiss.users.forEach(function (obj: IUser) {\n\n _thiss.userIn.append(\"option\").attr(\"value\",obj.id).text(obj.login);\n\n });\n\n }\n resfreshGroups(){\n this.tBody.html(\"\");\n this.setGroups();\n }\n async setGroups(){\n var _thiss=this;\n var response= await fetch(\"groups\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.groups= new Array();\n\n var obj=await response.json();\n\n obj.forEach( function(item: any){\n var group={\n id: item.id,\n name:item.name,\n members: new Array()\n }\n item.members.forEach( function(user: any){\n group.members.push( {\n id: user.id,\n login: user.userLogin\n });\n });\n _thiss.groups.push(group);\n }); \n }else{\n this.showNode(_thiss.errorFeedback);\n }\n\n this.groups.forEach(function (obj: any) {\n _thiss.addGrpRow(obj);\n });\n\n }\n async deleteGrp(grpId:String){\n var response= await fetch(\"/groups/\" +grpId, {\n method: 'DELETE', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n this.showNode(this.successFeedback);\n this.resfreshGroups();\n \n }else{\n this.showNode(this.errorFeedback);\n }\n\n\n }\n addGrpRow(grp : IGroup){\n let _thiss=this;\n let item=this.tBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(grp.id);\n item.append(\"td\").text(grp.name);\n var membersText=\"\";\n grp.members.forEach( function(user: IUser){\n membersText+= user.login + \" \"\n });\n item.append(\"td\").text(membersText);\n var actions =item.append(\"td\")\n var addMemberButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add User\");\n addMemberButton.on(\"click\",function(){\n _thiss.showNode(_thiss.addMemberForm);\n _thiss.currentGroup=grp.id\n\n });\n var deleteGroupButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Delete Group\");\n deleteGroupButton.on(\"click\",function(){\n\n if(confirm(\"Are you sure you want to delete group: \" + grp.name + \" ?\" )){\n _thiss.deleteGrp(grp.id);\n }\n\n });\n deleteGroupButton.style(\"margin-left\",4);\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n createAddGroupForm(projectsDiv:d3_Selection){\n var _thiss=this;\n let inputsDiv=projectsDiv.append(\"div\");\n let nameIn=this.addFormInput(inputsDiv,\"groupNameInput\",\"Name: \",\"input\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addGrpButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Group\");\n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n let newGrp={\n name:nameIn.property(\"value\"),\n members: new Array()\n };\n fetch(\"groups\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newGrp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n newGrp.id=obj.id;\n _thiss.addGrpRow(newGrp);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addGrpButton);\n _thiss.showNode(_thiss.successFeedback);\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n }\n }); \n \n \n });\n\n addGrpButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addGrpButton);\n });\n\n }\n createAddMemberForm(projectsDiv:d3_Selection){\n var _thiss=this;\n _thiss.addMemberForm=projectsDiv.append(\"div\");\n var inputsDiv =_thiss.addMemberForm;\n this.userIn=this.addFormInput(inputsDiv,\"groupUsersInput\",\"User\",\"select\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n \n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n\n var select = _thiss.userIn.node() as HTMLSelectElement;\n if(select!=null){\n var option = select.options[select.selectedIndex];\n\n \n \n \n let newGrp={\n userId: option.value,\n };\n fetch(\"groups/\"+_thiss.currentGroup+\"/users\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newGrp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n _thiss.hideNode(_thiss.addMemberForm);\n _thiss.showNode(_thiss.successFeedback);\n _thiss.resfreshGroups();\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n \n }\n }); \n }\n \n });\n _thiss.hideNode(_thiss.addMemberForm);\n\n }\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n projectsDiv.append(\"h2\")\n .text(\"Groups:\")\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"\") ; \n this.hideNode(this.errorFeedback);\n \n this.hideNode(this.successFeedback);\n\n this.createAddMemberForm(projectsDiv);\n projectsDiv.append(\"br\");\n this.createAddGroupForm(projectsDiv);\n\n \n let table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n let header=table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"name\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Members\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Actions\");\n \n this.tBody=table.append(\"tbody\");\n\n \n }\n\n}","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {json} from '@noworkflow/utils';\n\n\nimport {\n ModuleData, FileAccessData, EnvironmentItemData,\n DiffInfoData, DiffModuleData, DiffEnvironmentData, DiffAccessData,\n FilterObject\n} from './structures';\n\nimport {ModulesInfoWidget} from './modules_info';\nimport {EnvironmentInfoWidget} from './environment_info';\nimport {FileAccessesInfoWidget} from './file_accesses_info';\nimport {TrialInfoWidget} from './trial_info';\n\nexport\nclass DiffInfoWidget extends Widget {\n\n d3node: d3_Selection;\n display1: string;\n display2: string;\n\n static url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/info.json\"\n );\n }\n\n static modules_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/dependencies.json\"\n );\n }\n\n static environment_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/environment.json\"\n );\n }\n\n static accesses_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/file_accesses.json\"\n );\n }\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n d3node.append('div')\n .classed('trial-info', true)\n\n return node;\n }\n\n constructor(display1:string, display2: string, trial1: string, trial2: string) {\n super({ node: DiffInfoWidget.createNode() });\n this.display1 = display1;\n this.display2 = display2;\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info');\n this.title.label = display1 + \"<->\" + display2 + \" - Diff Info\";\n this.title.closable = true;\n this.title.caption = `Diff ${display1}-${display2} Information`;\n this.load(trial1, trial2);\n }\n\n load(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"trial-info\")[0];\n json(\"Info\", sub, DiffInfoWidget.url(trial1, trial2), (data: DiffInfoData) => {\n this.createMain(data);\n this.loadModules(trial1, trial2);\n this.loadEnvironment(trial1, trial2);\n this.loadFileAccess(trial1, trial2);\n })\n }\n\n createMain(data: DiffInfoData) {\n let trial = data.trial;\n let trial1 = data.trial1;\n let trial2 = data.trial2;\n\n let content = this.d3node.select('.trial-info').html(\"\")\n .append('div')\n .classed('side-info', true)\n let main = content.append('div')\n .classed('main', true)\n\n let h1 = main.append(\"h1\")\n\n // Title\n h1.append(\"span\")\n .classed(\"dbefore\", true)\n .text(\"Trial \" + this.display1);\n\n h1.append(\"span\")\n .text(\" <-> \");\n\n h1.append(\"span\")\n .classed(\"dafter\", true)\n .text(\"Trial \" + this.display2);\n\n // Code hash\n if (trial.code_hash == undefined) {\n main.append(\"h3\")\n .classed(\"hash\", true)\n .text(trial1.code_hash || \"\");\n } else {\n main.append(\"h3\")\n .classed(\"hash dbefore\", true)\n .text(trial.code_hash[0] || \"\");\n main.append(\"h3\")\n .classed(\"hash dafter\", true)\n .text(trial.code_hash[1] || \"\");\n }\n this.info(main, \"id\", \"Id\", trial1.id, trial2.id);\n this.info(main, \"script\", \"Script\", trial1.script, trial2.script);\n this.info(main, \"start\", \"Start\", trial1.start, trial2.start);\n this.info(main, \"finish\", \"Finish\", trial1.finish, trial2.finish);\n this.info(main, \"duration\", \"Duration\", trial1.duration_text, trial2.duration_text);\n\n\n if (trial.arguments == undefined) {\n if (trial1.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial1.arguments);\n }\n } else {\n if (trial1.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc dbefore\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial1.arguments);\n }\n if (trial2.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc dafter\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial2.arguments);\n }\n }\n\n content.append(\"div\")\n .classed(\"modules\", true);\n\n content.append(\"div\")\n .classed(\"environment\", true)\n\n content.append(\"div\")\n .classed(\"file-accesses\", true)\n }\n\n filter_trial(filter: FilterObject, filterfn: (strial: number) => void) {\n let select_trial = filter.filterdiv.append(\"select\");\n select_trial.append(\"option\")\n .attr(\"value\", \"3\")\n .text(\"Do not filter Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"First Trial Only\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"5\")\n .text(\"Exists in First Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Second Trial Only\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"6\")\n .text(\"Exists in Second Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"4\")\n .text(\"Both Trials Only\");\n select_trial.property(\"value\", \"3\");\n\n let newfilter = () => {\n filterfn(Number(select_trial.property(\"value\")));\n }\n select_trial.on(\"change\", newfilter);\n filter.on_change(newfilter);\n }\n\n loadModules(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"modules\")[0];\n\n json(\"Modules\", sub, DiffInfoWidget.modules_url(trial1, trial2), (data: DiffModuleData) => {\n let modules = this.d3node.select(\".modules\").html(\"\");\n if ((data.modules_added.length > 0) ||\n (data.modules_removed.length > 0) ||\n (data.modules_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(modules, \"Modules\");\n let foldable = modules.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = ModulesInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"mod-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n if ((strial & 1) == 1) {\n for (var element of data.modules_removed) {\n if (!filter.valid(data.t1_path, element)) {\n continue;\n }\n this.mod_li(ul, 'libefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.modules_added) {\n if (!filter.valid(data.t2_path, element)) {\n continue;\n }\n this.mod_li(ul, 'liafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.modules_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(data.t1_path, rem) ||\n !filter.valid(data.t2_path, add)) {\n continue;\n }\n let li = ul.append(\"li\")\n\n li.append(\"div\")\n .classed(\"name\", true)\n .text(rem.name);\n\n let version = li.append(\"div\")\n .classed(\"version\", true)\n version.append(\"div\")\n .classed(\"dbefore\", true)\n .text(rem.version)\n version.append(\"div\")\n .classed(\"dafter\", true)\n .text(add.version)\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n li.append(\"div\")\n .classed(\"hash dbefore\", true)\n .attr(\"title\", rem.path)\n .text(rem.code_hash);\n\n li.append(\"div\")\n .classed(\"hash dafter\", true)\n .attr(\"title\", add.path)\n .text(add.code_hash);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n loadEnvironment(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"environment\")[0];\n\n json(\"Environment\", sub, DiffInfoWidget.environment_url(trial1, trial2), (data: DiffEnvironmentData) => {\n let environment = this.d3node.select(\".environment\").html(\"\");\n if ((data.env_added.length > 0) ||\n (data.env_removed.length > 0) ||\n (data.env_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(environment, \"Environment\");\n let foldable = environment.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = EnvironmentInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"env-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n if ((strial & 1) == 1) {\n for (var element of data.env_removed) {\n if (!filter.valid(element)) {\n continue;\n }\n this.env_li(ul, 'dbefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.env_added) {\n if (!filter.valid(element)) {\n continue;\n }\n this.env_li(ul, 'dafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.env_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(rem) ||\n !filter.valid(add)) {\n continue;\n }\n this.env_cli(ul, rem, add);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n })\n }\n\n loadFileAccess(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"file-accesses\")[0];\n\n json(\"File Accesses\", sub, DiffInfoWidget.accesses_url(trial1, trial2), (data: DiffAccessData) => {\n let accesses = this.d3node.select(\".file-accesses\").html(\"\");\n if ((data.fa_added.length > 0) ||\n (data.fa_removed.length > 0) ||\n (data.fa_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(accesses, \"File Accesses\");\n let foldable = accesses.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = FileAccessesInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"fac-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n\n if ((strial & 1) == 1) {\n for (var element of data.fa_removed) {\n if (!filter.valid(data.t1_path, element)) {\n continue;\n }\n this.fa_li(ul, 'libefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.fa_added) {\n if (!filter.valid(data.t2_path, element)) {\n continue;\n }\n this.fa_li(ul, 'liafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.fa_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(data.t1_path, rem) ||\n !filter.valid(data.t2_path, add)) {\n continue;\n }\n let li = ul.append(\"li\")\n\n this.fa_cfield(li, 'name', 'Name', rem.name, add.name);\n this.fa_cfield(li, 'mode', 'Mode', rem.mode, add.mode);\n this.fa_cfield(li, 'buffering', 'Buffering', rem.buffering, add.buffering);\n li.append(\"div\")\n .classed(\"clear\", true)\n this.fa_cfield(li, 'timestamp', 'Time', rem.timestamp, add.timestamp);\n this.fa_cfield(li, 'content_hash_before hash', 'Content hash before', rem.content_hash_before, add.content_hash_before);\n this.fa_cfield(li, 'content_hash_after hash', 'Content hash after', rem.content_hash_after, add.content_hash_after);\n this.fa_cfield(li, 'stack', 'Stack', rem.stack, add.stack);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n private info(main: d3_Selection, cls: string, label: string, value1: any, value2: any) {\n if (value1 == value2) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr.append(\"span\")\n .classed(cls, true)\n .text(value1);\n } else {\n let attr1 = main.append(\"span\")\n .classed(\"attr dbefore\", true);\n attr1.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr1.append(\"span\")\n .classed(cls, true)\n .text(value1);\n\n let attr2 = main.append(\"span\")\n .classed(\"attr dafter\", true);\n attr2.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr2.append(\"span\")\n .classed(cls, true)\n .text(value2);\n }\n }\n\n private mod_li(element: d3_Selection, cls: string, mod: ModuleData) {\n let li = element.append(\"li\")\n .classed(cls, true);\n\n li.append(\"div\")\n .classed(\"name\", true)\n .text(mod.name);\n\n li.append(\"div\")\n .classed(\"version\", true)\n .text(mod.version);\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n li.append(\"div\")\n .classed(\"hash\", true)\n .attr(\"title\", mod.path)\n .text(mod.code_hash);\n }\n\n private env_field(element: d3_Selection, env: EnvironmentItemData) {\n element.append(\"span\")\n .classed(\"key\", true)\n .text(env.name);\n\n element.append(\"span\")\n .classed(\"equal\", true)\n .text(\" = \");\n\n element.append(\"span\")\n .classed(\"value\", true)\n .text(env.value);\n\n }\n\n private env_li(element: d3_Selection, cls: string, env: EnvironmentItemData) {\n this.env_field(\n element.append(\"li\")\n .classed(cls, true),\n env\n )\n }\n\n private env_cli(element: d3_Selection, rem: EnvironmentItemData, add: EnvironmentItemData) {\n let li = element.append(\"li\");\n this.env_field(\n li.append(\"div\")\n .classed(\"dbefore\", true),\n rem\n )\n this.env_field(\n li.append(\"div\")\n .classed(\"dafter\", true),\n add\n )\n }\n\n private fa_field(element: d3_Selection, cls: string, title: string, value: string) {\n element.append(\"div\")\n .classed(cls, true)\n .attr(\"title\", title)\n .text(value);\n }\n\n private fa_li(element: d3_Selection, cls: string, fa: FileAccessData) {\n let li = element.append(\"li\")\n .classed(cls, true);\n\n this.fa_field(li, 'name', 'Name', fa.name);\n this.fa_field(li, 'mode', 'Mode', fa.mode);\n this.fa_field(li, 'buffering', 'Buffering', fa.buffering);\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n this.fa_field(li, 'timestamp', 'Time', fa.timestamp);\n this.fa_field(li, 'content_hash_before hash', 'Content hash before', fa.content_hash_before);\n this.fa_field(li, 'content_hash_after hash', 'Content hash after', fa.content_hash_after);\n this.fa_field(li, 'stack', 'Stack', fa.stack);\n }\n\n private fa_cfield(element: d3_Selection, cls: string, title: string, v1: string, v2: string) {\n if (v1 == v2) {\n this.fa_field(element, cls, title, v1);\n } else {\n this.fa_field(element, cls + \" dbefore\", title, v1);\n this.fa_field(element, cls + \" dafter\", title, v2);\n }\n }\n\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {EnvironmentItemData, FilterObject} from './structures';\n\nexport\nclass EnvironmentInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/environment.json\";\n }\n\n static createItem(parent: d3_Selection, key: string, value: string): void {\n if (value) {\n let li = parent.append(\"li\");\n li.append(\"span\")\n .classed(\"key\", true)\n .text(key)\n li.append(\"span\")\n .classed(\"equal\", true)\n .text(\" = \")\n li.append(\"span\")\n .classed(\"value\", true)\n .text(value)\n }\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"type\", \"search\");\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Main\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Main Environment Only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-Main Environment Only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (element: EnvironmentItemData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return (\n element.name.toLowerCase().indexOf(stext) >= 0\n || element.value.toLowerCase().indexOf(stext) >= 0\n );\n }\n\n let check_local = () => {\n if (slocal == 0) return true;\n switch (element.name) {\n case 'PYTHON_IMPLEMENTATION': \n case 'PYTHON_VERSION':\n case 'OS_NAME':\n case 'OS_RELEASE':\n case 'OS_USER':\n case 'PWD':\n case 'PID':\n case 'HOSTNAME':\n case 'ARCH':\n case 'PROCESSOR':\n return (slocal == 1)\n default:\n return (slocal != 1)\n }\n }\n\n return check_text() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n }\n\n static createList(parent: d3_Selection, data: EnvironmentItemData[], default_local: string = \"0\"): FilterObject {\n let filter = EnvironmentInfoWidget.createFilter(parent, default_local);\n let list = parent.append(\"ul\")\n .classed(\"env-list\", true)\n\n filter.on_change(() => {\n list.html(\"\");\n for (var element of data) {\n if (!filter.valid(element)) {\n continue;\n }\n EnvironmentInfoWidget.createItem(list, element.name, element.value);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: EnvironmentItemData[], default_local: string = \"0\"): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"Environment (\" + trialDisplay + \")\");\n\n EnvironmentInfoWidget.createList(content, data, default_local);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: EnvironmentItemData[], default_local: string = \"0\") {\n super({ node: EnvironmentInfoWidget.createNode(trialDisplay, data, default_local) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Environment\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Environment`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {FileAccessData, FilterObject} from './structures';\n\n\nexport\nclass FileAccessesInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/file_accesses.json\";\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"placeholder\", \"Name\")\n .attr(\"type\", \"search\");\n\n let mode_filter = filterdiv.append(\"input\")\n .attr(\"placeholder\", \"Mode\")\n .attr(\"type\", \"search\");\n\n let select_hash = filterdiv.append(\"select\");\n select_hash.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Existence\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Exists only before trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Exists only after trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"3\")\n .text(\"Changes during trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"7\")\n .text(\"Does not change during trial\");\n\n select_hash.property(\"value\", \"0\");\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Locality\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Local files only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-local files only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (local: string, element: FileAccessData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let smode = mode_filter.property(\"value\").toLowerCase();\n let shash = Number(select_hash.property(\"value\"));\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return element.name.toLowerCase().indexOf(stext) >= 0;\n }\n\n let check_mode = () => {\n return element.mode.toLowerCase().indexOf(smode) >= 0;\n }\n\n let check_hash = () => {\n if (((shash & 1) == 1) && element.content_hash_before == null) return false;\n if (((shash & 2) == 2) && element.content_hash_after == null) return false;\n if (shash == 1) return element.content_hash_after == null;\n if (shash == 2) return element.content_hash_before == null;\n if (shash == 3) return element.content_hash_before != element.content_hash_after;\n if (shash == 4) return element.content_hash_before == element.content_hash_after;\n return true;\n } \n\n let check_local = () => {\n if (slocal == 0) return true;\n if (!/^((\\/)|(\\w+:\\\\))/.test(element.name)) return (slocal == 1); // not absolute path\n if (element.name.startsWith(local)) return (slocal == 1);\n return (slocal != 1);\n }\n\n return check_text() && check_mode() && check_hash() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n mode_filter.on(\"keyup\", filterfn);\n select_hash.on(\"change\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n }\n\n static createList(parent: d3_Selection, data: FileAccessData[], trial_path: string, default_local: string = \"0\"): FilterObject {\n let filter = FileAccessesInfoWidget.createFilter(parent, default_local);\n\n let list = parent.append(\"ul\")\n .classed(\"fac-list\", true)\n\n filter.on_change(() => {\n list.html(\"\");\n for (var element of data) {\n if (!filter.valid(trial_path, element)) {\n continue;\n }\n var li = list.append(\"li\");\n\n //name of file for request\n var name = element.name.split(\"/\");\n var pos = name.length -1;\n var fileName = name[pos];\n\n li.append(\"a\").classed(\"name\", true)\n .attr(\"title\", \"Name\")\n .text(element.name)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_after + \"/\" + fileName); //file after execution\n li.append(\"div\").classed(\"mode\", true)\n .attr(\"title\", \"Mode\")\n .text(element.mode);\n li.append(\"div\").classed(\"buffering\", true)\n .attr(\"title\", \"Buffering\")\n .text(element.buffering);\n li.append(\"div\").classed(\"clear\", true)\n li.append(\"div\").classed(\"timestamp\", true)\n .attr(\"title\", \"Time\")\n .text(element.timestamp);\n li.append(\"a\").classed(\"content_hash_before hash\", true)\n .attr(\"title\", \"Content hash before\")\n .text(element.content_hash_before)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_before + \"/\" + fileName);\n li.append(\"div\"); //spacing\n li.append(\"a\").classed(\"content_hash_after hash\", true)\n .attr(\"title\", \"Content hash after\")\n .text(element.content_hash_after)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_after + \"/\" + fileName);\n li.append(\"div\").classed(\"stack\", true)\n .attr(\"title\", \"Stack\")\n .text(element.stack);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: FileAccessData[], trial_path: string, default_local: string = \"0\"): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"File Accesses (\" + trialDisplay + \")\");\n\n FileAccessesInfoWidget.createList(content, data, trial_path, default_local);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: FileAccessData[], trial_path: string, default_local: string = \"0\") {\n super({ node: FileAccessesInfoWidget.createNode(trialDisplay, data, trial_path, default_local) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Accesses\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Accesses`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {ModuleData, FilterObject} from './structures';\n\n\nexport\nclass ModulesInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/dependencies.json\";\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"type\", \"search\");\n\n let select_version = filterdiv.append(\"select\");\n select_version.append(\"option\")\n .attr(\"value\", \"both\")\n .text(\"Do not filter Version\");\n\n select_version.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Filter In Version\");\n\n select_version.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Filter Out Version\");\n select_version.property(\"value\", \"both\")\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Locality\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Local Modules Only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-Local Modules Only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (local: string, element: ModuleData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let sversion = select_version.property(\"value\");\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return element.name.toLowerCase().indexOf(stext) >= 0;\n }\n\n let check_version = () => {\n if (sversion == \"both\") return true;\n if (sversion == \"1\") return element.version != null;\n if (sversion == \"0\") return element.version == null;\n return false;\n }\n\n let check_local = () => {\n if (slocal == 0) return true;\n if (element.path == null) return (slocal != 1);\n if (!/^((\\/)|(\\w+:\\\\))/.test(element.path)) return (slocal == 1); // not absolute path\n if (element.path.startsWith(local)) return (slocal == 1);\n return (slocal != 1);\n }\n\n return check_text() && check_version() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n select_version.on(\"change\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n \n }\n\n static createList(parent: d3_Selection, data: ModuleData[], trial_path: string, default_local: string = \"0\"): FilterObject {\n let filter = ModulesInfoWidget.createFilter(parent, default_local);\n\n let list = parent.append(\"ul\")\n .classed(\"mod-list\", true);\n\n filter.on_change(() => {\n list.html(\"\");\n\n for (var element of data) {\n if (!filter.valid(trial_path, element)) {\n continue;\n }\n var li = list.append(\"li\");\n li.append(\"div\").classed(\"name\", true)\n .text(element.name);\n li.append(\"div\").classed(\"version\", true)\n .text(element.version === null ? \"\" : element.version);\n li.append(\"div\").classed(\"clear\", true)\n li.append(\"div\").classed(\"hash\", true)\n .attr(\"title\", element.path)\n .text(element.code_hash);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: ModuleData[], trial_path: string): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"Modules (\" + trialDisplay + \")\");\n\n ModulesInfoWidget.createList(content, data, trial_path);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: ModuleData[], trial_path: string) {\n super({ node: ModulesInfoWidget.createNode(trialDisplay, data, trial_path) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Modules\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Modules`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {\n VisibleHistoryNode, HistoryTrialNodeData\n} from '@noworkflow/history';\nimport {json} from '@noworkflow/utils';\n\n\nimport {ModuleListData, EnvironmentData, FileAccessListData, FilterObject} from './structures';\n\nimport {ModulesInfoWidget} from './modules_info';\nimport {EnvironmentInfoWidget} from './environment_info';\nimport {FileAccessesInfoWidget} from './file_accesses_info';\nimport {AnnontationWidget} from '../annotation_widget';\n\nexport\nclass TrialInfoWidget extends Widget {\n\n d3node: d3_Selection;\n trial: VisibleHistoryNode;\n annontationWidget: AnnontationWidget;\n\n static createNode(trial: VisibleHistoryNode,annontationWidget: AnnontationWidget): HTMLElement {\n let node = document.createElement('div');\n let info = trial.info as HistoryTrialNodeData;\n\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('trial-info', true)\n .append('div')\n .classed('side-info', true)\n\n let main = content.append('div')\n .classed('main', true)\n\n main.append(\"h1\")\n .text(\"Trial \" + trial.display);\n\n main.append(\"a\")\n .classed(\"hash\", true)\n .text(info.code_hash || \"\")\n .attr('href','trials/'+ trial.id + '/' + info.code_hash + '/' + info.script);// href for script\n\n let idAttr = main.append(\"span\")\n .classed(\"attr\", true);\n idAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Id: \");\n idAttr.append(\"span\")\n .classed(\"id\", true)\n .text(trial.title);\n\n let scriptAttr = main.append(\"span\")\n .classed(\"attr\", true);\n scriptAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Script: \");\n scriptAttr.append(\"a\")\n .classed(\"script\", true)\n .text(info.script)\n .attr('href','trials/'+ trial.id + '/' + info.code_hash + '/' + info.script ); // href for script\n\n let startAttr = main.append(\"span\")\n .classed(\"attr\", true);\n startAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Start: \");\n startAttr.append(\"span\")\n .classed(\"start\", true)\n .text(info.str_start || \"\");\n\n let finishAttr = main.append(\"span\")\n .classed(\"attr\", true);\n finishAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Finish: \");\n finishAttr.append(\"span\")\n .classed(\"finish\", true)\n .text(info.str_finish || \"\");\n\n let durationAttr = main.append(\"span\")\n .classed(\"attr\", true);\n durationAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Duration: \");\n durationAttr.append(\"span\")\n .classed(\"duration\", true)\n .text(info.duration_text || \"\");\n\n if (info.command) {\n let argumentsAttr = main.append(\"span\")\n .classed(\"attr\", true);\n argumentsAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Arguments: \");\n argumentsAttr.append(\"span\")\n .classed(\"arguments\", true)\n .text(info.command);\n }\n\n\n\n \n\n content.append(\"div\")\n .classed(\"modules\", true)\n\n content.append(\"div\")\n .classed(\"environment\", true)\n\n content.append(\"div\")\n .classed(\"file-accesses\", true)\n\n var anntButton=content.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Manage Annotations\");\n\n anntButton.on(\"click\",function(){\n \n\n annontationWidget.activeAnnotation(trial.title);\n });\n\n return node;\n }\n\n constructor(trial: VisibleHistoryNode,annontationWidget: AnnontationWidget) {\n super({ node: TrialInfoWidget.createNode(trial,annontationWidget) });\n this.trial = trial;\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info');\n this.title.label = trial.display + \"- Information\";\n this.title.closable = true;\n this.title.caption = `Trial ${trial.display} Information`;\n this.loadModules();\n this.loadEnvironment();\n this.loadFileAccess();\n this.annontationWidget=annontationWidget;\n }\n\n static createFold(parent: d3_Selection, title: string) {\n let fold = parent.append(\"div\")\n .classed(\"fold\", true)\n let foldI = fold.append(\"i\")\n .classed(\"fa fa-minus\", true)\n let spanI = fold.append(\"span\")\n .text(title)\n \n let click = () => {\n let visible = foldI.classed(\"fa-plus\");\n foldI.classed(\"fa-plus\", !visible);\n foldI.classed(\"fa-minus\", visible);\n parent.select(\".foldable\")\n .classed(\"show-toolbar\", visible)\n .classed(\"hide-toolbar\", !visible)\n return false;\n };\n foldI.on(\"click\", click);\n spanI.on(\"click\", click);\n return fold;\n }\n\n static createFilterFold(fold: d3_Selection, filter: FilterObject) {\n filter.filterdiv\n .classed(\"info-filter\", true)\n .classed(\"show-toolbar\", false)\n .classed(\"hide-toolbar\", true);\n\n let foldA = fold.append(\"a\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Search\")\n .classed(\"show-all\", true);\n\n let foldAI = foldA.append(\"i\")\n .classed(\"fa fa-search-plus\", true);\n \n foldA.on(\"click\", () => {\n let visible = foldAI.classed(\"fa-search-plus\");\n foldAI.classed(\"fa-search-plus\", !visible);\n foldAI.classed(\"fa-search-minus\", visible);\n filter.filterdiv\n .classed(\"show-toolbar\", visible)\n .classed(\"hide-toolbar\", !visible)\n return false;\n });\n }\n\n loadModules() {\n let sub = this.node.getElementsByClassName(\"modules\")[0];\n json(\"Modules\", sub, ModulesInfoWidget.url(this.trial.title), (data: ModuleListData) => {\n let modules = this.d3node.select(\".modules\").html(\"\");\n if (data.all.length > 0) {\n \n let fold = TrialInfoWidget.createFold(modules, \"Modules\");\n let filter = ModulesInfoWidget.createList(\n modules.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.all, data.trial_path, \"1\"\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n loadEnvironment() {\n let sub = this.node.getElementsByClassName(\"environment\")[0];\n\n json(\"Environment\", sub, EnvironmentInfoWidget.url(this.trial.title), (data: EnvironmentData) => {\n let environment = this.d3node.select(\".environment\").html(\"\");\n\n let fold = TrialInfoWidget.createFold(environment, \"Environment\");\n let filter = EnvironmentInfoWidget.createList(\n environment.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.all, \"1\"\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n })\n }\n\n loadFileAccess() {\n let sub = this.node.getElementsByClassName(\"file-accesses\")[0];\n\n json(\"File Accesses\", sub, FileAccessesInfoWidget.url(this.trial.title), (data: FileAccessListData) => {\n let accesses = this.d3node.select(\".file-accesses\").html(\"\");\n\n if (data.file_accesses.length > 0) {\n\n let fold = TrialInfoWidget.createFold(accesses, \"File Accesses\");\n let filter = FileAccessesInfoWidget.createList(\n accesses.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.file_accesses, data.trial_path\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n}\n","import {DockPanel, Widget, DockLayout} from '@lumino/widgets';\n\n\nexport\ninterface VisWidget extends Widget {\n nowVis?: string;\n}\n\n\nexport\ninterface FindResult {\n area: DockLayout.AreaConfig | null;\n index: number;\n}\n\n\nexport\nfunction findInLayout(area: DockLayout.AreaConfig | null, widget: Widget): FindResult | null {\n if (area == null || area.type == 'tab-area') {\n return null;\n }\n var splitconfig: DockLayout.ISplitAreaConfig = area;\n var result: FindResult | null = null;\n splitconfig.children.every((child, index) => {\n if (child.type == 'tab-area') {\n var tabconfig: DockLayout.ITabAreaConfig = child;\n for (var tabwidget of tabconfig.widgets) {\n if (tabwidget == widget) {\n result = {\n area: area,\n index: index\n }\n return false;\n }\n }\n } else {\n var temp = findInLayout(child, widget);\n if (temp) {\n result = temp;\n return false;\n }\n }\n return true;\n });\n return result;\n}\n\n\nexport\nclass NowVisPanel extends DockPanel {\n\n addMainWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"main\") {\n console.log(\"Warning: options.ref is not 'main'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\") {\n options.ref = w;\n }\n }\n }\n (widget as VisWidget).nowVis = \"main\";\n this.addWidget(widget, options);\n }\n\n addGraphWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n var operation: string = \"none\";\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"graph\") {\n console.log(\"Warning: options.ref is not 'graph'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\" && !options.ref) {\n options.ref = w;\n options.mode = \"split-bottom\";\n operation = \"main\";\n } else if ((wnow.nowVis == \"info\") && (operation != \"graph\")) {\n options.ref = w;\n options.mode = \"split-left\";\n operation = \"info\";\n } else if (wnow.nowVis == \"graph\") {\n options.ref = w;\n options.mode = \"tab-after\";\n operation = \"graph\";\n }\n };\n }\n (widget as VisWidget).nowVis = \"graph\";\n this.addWidget(widget, options);\n\n if (operation == \"main\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.20;\n sizes[1] = 0.80;\n this.restoreLayout(layout);\n }\n }\n\n if (operation == \"info\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.80;\n sizes[1] = 0.20;\n this.restoreLayout(layout);\n }\n }\n }\n\n addInfoWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n var operation: string = \"none\";\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"info\") {\n console.log(\"Warning: options.ref is not 'info'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\" && !options.ref) {\n options.ref = w;\n options.mode = \"split-bottom\";\n operation = \"main\";\n } else if ((wnow.nowVis == \"graph\") && (operation != \"info\")) {\n options.ref = w;\n options.mode = \"split-right\";\n operation = \"graph\";\n } else if (wnow.nowVis == \"info\") {\n options.ref = w;\n options.mode = \"tab-after\";\n operation = \"info\";\n }\n };\n }\n (widget as VisWidget).nowVis = \"info\";\n this.addWidget(widget, options);\n\n if (operation == \"main\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.20;\n sizes[1] = 0.80;\n this.restoreLayout(layout);\n }\n }\n\n if (operation == \"graph\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.80;\n sizes[1] = 0.20;\n this.restoreLayout(layout);\n }\n }\n }\n\n}\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\ninterface IExperiment {\n id: string;\n name: string;\n description: string;\n}\n\nexport\nclass ProjectWidget extends Widget {\n\n d3node: d3_Selection;\n expTBody: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n experiments: Array;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor(experiments: Array) {\n super({ node: ProjectWidget.createNode() });\n this.d3node = d3_select(this.node);\n this.experiments=experiments;\n this.setNode();\n this.addClass('content');\n this.title.label = \"Experiment Selection\";\n this.title.closable = false\n this.title.caption = `Experiment`;\n }\n addExpRow(exp : IExperiment){\n var link=window.location.href + \"experiments/\"+exp.id;\n let item=this.expTBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(exp.id);\n item.append(\"td\").text(exp.name);\n item.append(\"td\").text(exp.description);\n item.append(\"td\").append(\"a\").attr(\"href\",link).text(link);\n\n let cloneCommandText = \"now pull --url \" + link;\n item.append(\"td\").text( cloneCommandText + \" \").append(\"i\").classed(\"fa fa-clone\", true).attr(\"aria-hidden\", \"true\")\n .attr(\"id\", exp.id + \"CopyIcon\").on(\"click\", ()=> {\n navigator.clipboard.writeText(cloneCommandText)\n .then(()=>{\n let divCopied = d3_select(document.getElementById(exp.id + \"CopyIcon\")!)\n .append(\"small\").classed(\"alert alert-secondary p-0\", true).text(\"Copied!\");\n setTimeout(()=>{divCopied.remove()}, 3000);\n });\n });\n\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n projectsDiv.append(\"h2\")\n .text(\"Experiments:\")\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"Experiment created successfully\") ; \n this.hideNode(this.errorFeedback);\n this.hideNode(this.successFeedback);\n\n let inputsDiv=projectsDiv.append(\"div\");\n let nameIn=this.addFormInput(inputsDiv,\"experimentNameInput\",\"Name\",\"input\");\n let descIn=this.addFormInput(inputsDiv,\"experimentDescInput\",\"Description\",\"textarea\");\n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addExpButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Experiment\");\n\n\n let table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n let header=table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"name\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"description\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"url\");\n header.append(\"th\").attr(\"scope\", \"col\").html(\" clone \")\n .append(\"i\").classed(\"fa fa-question-circle-o\", true).attr(\"aria-hidden\", \"true\")\n .attr(\"title\", \"Run this command on the command line, in the desired folder, to clone the experiment.\");\n \n this.expTBody=table.append(\"tbody\");\n\n \n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n let newExp={\n name:nameIn.property(\"value\"),\n description:descIn.property(\"value\")\n };\n fetch(\"experiments\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newExp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n newExp.id=obj.id;\n _thiss.addExpRow(newExp);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addExpButton);\n _thiss.showNode(_thiss.successFeedback);\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n }\n }); \n \n \n });\n var _thiss=this;\n addExpButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addExpButton);\n });\n \n this.experiments.forEach(function (obj) {\n _thiss.addExpRow(obj);\n });\n }\n\n}","import { Widget } from '@lumino/widgets';\nimport { select as d3_select, Selection as d3_Selection, BaseType as d3_BaseType } from 'd3-selection';\nimport { NowVisPanel } from './nowpanel';\nimport { TableInfoWidget } from './database_widget';\nimport 'ace-builds/src-noconflict/ace';\nimport 'ace-builds/src-noconflict/theme-textmate';\nimport 'ace-builds/src-noconflict/mode-sql';\nimport 'ace-builds/src-noconflict/ext-language_tools';\n\ndeclare global { interface Window { ace: any; } }\n\nexport class DatabaseTabWidget extends Widget {}\n\nexport class QueryResultWidget extends DatabaseTabWidget {\n d3node: d3_Selection;\n private columns: string[];\n private rows: any[];\n private query: string;\n private currentPage: number = 1;\n \n constructor(query: string, columns: string[], rows: any[], count: number) {\n super({ node: QueryResultWidget.createNode() });\n this.title.label = `Query Result (${count})`;\n this.title.caption = `Query Result (${count})`;\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n this.query = query;\n this.columns = columns;\n this.rows = rows;\n this.renderTable();\n }\n \n static createNode(): HTMLElement {\n const node = document.createElement('div');\n node.style.padding = '1rem';\n node.style.height = '100%';\n node.style.overflowY = 'auto';\n return node;\n }\n \n private renderTable(): void {\n this.d3node.selectAll('*').remove();\n \n this.d3node.append('a')\n .classed(\"toollink\", true)\n .attr('class', 'btn btn-secondary-outline')\n .attr('title', 'Download CSV')\n .style('margin-bottom', '1em')\n .on('click', () => {\n let csv = '';\n csv += this.columns.map(col => `\"${col.replace(/\"/g, '\"\"')}\"`).join(',') + '\\n';\n for (const row of this.rows) {\n csv += this.columns.map(col => `\"${String(row[col] !== undefined ? row[col] : '').replace(/\"/g, '\"\"')}\"`).join(',') + '\\n';\n }\n const blob = new Blob([csv], { type: 'text/csv' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'query_result.csv';\n document.body.appendChild(a);\n a.click();\n setTimeout(() => {\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, 100);\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n\n if (!this.columns.length || !this.rows.length) {\n this.d3node.append('div').text('No results.');\n return;\n }\n\n const paginationContainer = this.d3node.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem')\n .style('padding', '0.5rem')\n .style('background-color', '#f8f9fa')\n .style('border-radius', '4px');\n\n const startIndex = (this.currentPage - 1) * 50 + 1;\n const endIndex = Math.min(this.currentPage * 50, this.rows.length);\n paginationContainer.append('div')\n .style('font-size', '0.9em')\n .style('color', '#666')\n .text(`Showing ${startIndex}-${endIndex} of ${this.rows.length} rows`);\n\n const paginationButtons = paginationContainer.append('div')\n .style('display', 'flex')\n .style('gap', '0.25rem');\n\n const totalPages = Math.ceil(this.rows.length / 50);\n\n if (totalPages > 1) {\n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage = 1;\n this.renderTable();\n })\n .text('<<');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage--;\n this.renderTable();\n })\n .text('<');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-primary')\n .text(this.currentPage.toString());\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage++;\n this.renderTable();\n })\n .text('>');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage = totalPages;\n this.renderTable();\n })\n .text('>>');\n }\n\n const tableContainer = this.d3node.append('div')\n .style('max-height', '400px')\n .style('overflow-y', 'auto')\n .style('border', '1px solid #dee2e6')\n .style('border-radius', '4px');\n \n const table = tableContainer.append('table').attr('class', 'table table-bordered table-sm');\n table.style('border-collapse', 'separate')\n .style('border-spacing', '0');\n\n const thead = table.append('thead').append('tr');\n thead.style('position', 'sticky')\n .style('top', '0')\n .style('background-color', 'white')\n .style('z-index', '1');\n\n this.columns.forEach(col => thead.append('th').text(col));\n \n const tbody = table.append('tbody');\n \n const startRow = (this.currentPage - 1) * 50;\n const endRow = Math.min(startRow + 50, this.rows.length);\n const currentPageRows = this.rows.slice(startRow, endRow);\n \n currentPageRows.forEach(row => {\n const tr = tbody.append('tr');\n this.columns.forEach(col => tr.append('td').text(row[col] !== undefined ? row[col] : ''));\n });\n\n this.d3node.append('div')\n .attr('class', 'text-muted')\n .style('margin-top', '1rem')\n .style('margin-bottom', '0.5em')\n .html(`Query: ${this.query}`);\n }\n}\n\nexport class QueryWidget extends Widget {\n private panel: NowVisPanel;\n private static count: number = 0;\n d3node: d3_Selection;\n private aceEditor: any; // Ace editor instance\n private tableNames: string[] = [];\n private columnNames: string[] = [];\n private editorId: string;\n private initialQuery: string;\n \n constructor(panel: NowVisPanel, tableNames?: string[], columnNames?: string[], initialQuery?: string) {\n super();\n this.panel = panel;\n this.title.label = 'SQL Query';\n this.title.caption = 'SQL Query Interface';\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n this.tableNames = tableNames || [];\n this.columnNames = columnNames || [];\n this.editorId = `query-input-${++QueryWidget.count}`;\n this.initialQuery = initialQuery || '';\n\n this.createQueryInterface();\n }\n\n private async createQueryInterface(): Promise {\n const container = this.d3node.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('height', '100%')\n .style('padding', '1rem')\n .style('gap', '1rem')\n .style('overflow-y', 'auto')\n .style('overflow-x', 'hidden');\n\n const headerRow = container.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem')\n .style('flex-shrink', '0');\n\n headerRow.append('h4')\n .text('SQL Query Interface')\n .style('margin', '0')\n .style('color', '#333');\n\n headerRow.append('button')\n .attr('id', 'execute-query-btn')\n .attr(\"title\", \"Execute query. Use Ctrl+Enter for quick execution.\")\n .classed('btn btn-primary', true)\n .on('click', () => this.executeQuery())\n .html(' Execute Query');\n\n const queryContainer = container.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('min-height', '50%')\n .style('flex', '1 1 0');\n \n queryContainer.append('label')\n .attr('for', this.editorId)\n .text('Enter your SQL query:')\n .style('font-weight', 'bold')\n .style('margin-bottom', '0.5rem');\n \n queryContainer.append('div')\n .attr('id', this.editorId)\n .style('width', '100%')\n .style('min-height', '140px')\n .style('max-height', '30vh')\n .style('border', '1px solid #ccc')\n .style('border-radius', '4px')\n .style('font-size', '1em')\n .style('flex', '1');\n\n setTimeout(() => {\n // @ts-ignore\n this.aceEditor = window.ace.edit(this.editorId);\n this.aceEditor.setTheme('ace/theme/textmate');\n this.aceEditor.session.setMode('ace/mode/sql');\n this.aceEditor.setOptions({\n fontSize: '1em',\n minLines: 6,\n showPrintMargin: false,\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n });\n this.aceEditor.commands.addCommand({\n name: 'executeQuery',\n bindKey: { win: 'Ctrl-Enter', mac: 'Command-Enter' },\n exec: () => this.executeQuery()\n });\n\n if (window.ace && window.ace.require) {\n const langTools = window.ace.require('ace/ext/language_tools');\n const tableCompleter = {\n getCompletions: (editor: any, session: any, pos: any, prefix: string, callback: any) => {\n if (!prefix) { callback(null, []); return; }\n \n const completions = this.tableNames.map((name: string) => ({\n caption: name,\n value: name,\n meta: 'table'\n }));\n \n this.columnNames.forEach((name: string) => {\n completions.push({\n caption: name,\n value: name,\n meta: 'column'\n });\n });\n \n callback(null, completions);\n }\n };\n langTools.addCompleter(tableCompleter);\n }\n\n if (this.initialQuery) {\n this.aceEditor.setValue(this.initialQuery);\n this.aceEditor.clearSelection();\n this.aceEditor.focus();\n }\n }, 0);\n \n queryContainer.append('div')\n .attr('id', `query-status-${this.editorId}`)\n .style('min-height', '60px')\n .style('padding', '0.5rem')\n .style('border', '1px solid #e0e0e0')\n .style('border-radius', '4px')\n .style('background-color', '#f9f9f9')\n .style('font-family', 'monospace')\n .style('font-size', '0.9em')\n .style('overflow-y', 'auto')\n .style('flex-shrink', '0')\n .style('margin-top', '1rem')\n .text('Ready to execute queries. Use Ctrl+Enter for quick execution.');\n }\n\n private async executeQuery(): Promise {\n // const queryInput = this.node.querySelector('#query-input') as HTMLTextAreaElement;\n const statusArea = this.node.querySelector(`#query-status-${this.editorId}`) as HTMLDivElement;\n \n const sql = this.aceEditor ? this.aceEditor.getValue().trim() : '';\n \n if (!statusArea) return;\n \n statusArea.innerHTML = '';\n statusArea.style.color = '#333';\n \n if (!sql) {\n statusArea.textContent = 'Please enter a SQL query.';\n statusArea.style.color = '#d32f2f';\n return;\n }\n\n statusArea.textContent = 'Executing query...';\n statusArea.style.color = '#1976d2';\n \n try {\n const response = await fetch('/db/query', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query: sql })\n });\n \n const data = await response.json();\n \n if (data.error) {\n statusArea.textContent = `Error: ${data.error}`;\n statusArea.style.color = '#d32f2f';\n } else if (data.rows && data.columns) {\n statusArea.textContent = `Query executed successfully! Found ${data.rows.length} rows with ${data.columns.length} columns.`;\n statusArea.style.color = '#388e3c';\n \n await this.displayQueryResults(sql, data.columns, data.rows);\n } else {\n statusArea.textContent = 'Query executed successfully. No results returned.';\n statusArea.style.color = '#388e3c';\n }\n } catch (e) {\n statusArea.textContent = `Error executing query: ${e.message}`;\n statusArea.style.color = '#d32f2f';\n }\n }\n\n private async displayQueryResults(sql: string, columns: string[], rows: any[]): Promise {\n const resultWidget = new QueryResultWidget(sql, columns, rows, ++QueryWidget.count);\n \n let refWidget: Widget | null = null;\n if (this.panel.widgets) {\n for (let w of this.panel.widgets()) {\n if (w instanceof TableInfoWidget || w instanceof QueryResultWidget) {\n refWidget = w;\n }\n }\n }\n \n if (refWidget) {\n this.panel.addInfoWidget(resultWidget, { ref: refWidget, mode: 'tab-after' });\n } else {\n this.panel.addInfoWidget(resultWidget, { ref: this, mode: 'split-bottom' });\n }\n \n this.panel.activateWidget(resultWidget);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n const editorElement = this.node.querySelector(`#${this.editorId}`) as HTMLElement;\n if (!editorElement) \n return;\n\n const rect = this.node.getBoundingClientRect();\n const availableHeight = rect.height - 200;\n const minHeight = 250;\n const maxHeight = Math.max(minHeight, availableHeight * 0.6);\n editorElement.style.height = `${maxHeight}px`;\n \n if (this.aceEditor) {\n this.aceEditor.resize();\n }\n }\n} \n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","'use strict';\n\nmodule.exports = require('./browser/algorithms.json');\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar createHash = require('create-hash');\nvar stream = require('readable-stream');\nvar inherits = require('inherits');\nvar sign = require('./sign');\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');\n algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hashType = data.hash;\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nSign.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n this.end();\n var hash = this._hash.digest();\n var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;\n\n this.end();\n var hash = this._hash.digest();\n return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n return new Verify(algorithm);\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n};\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar createHmac = require('create-hmac');\nvar crt = require('browserify-rsa');\nvar EC = require('elliptic').ec;\nvar BN = require('bn.js');\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n var priv = parseKeys(key);\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n return ecSign(hash, priv);\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n return dsaSign(hash, priv, hashType);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = priv.modulus.byteLength();\n var pad = [0, 1];\n while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) { pad.push(hash[i]); }\n\n var out = crt(pad, priv);\n return out;\n}\n\nfunction ecSign(hash, priv) {\n var curveId = curves[priv.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n var curve = new EC(curveId);\n var key = curve.keyFromPrivate(priv.privateKey);\n var out = key.sign(hash);\n\n return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n var x = priv.params.priv_key;\n var p = priv.params.p;\n var q = priv.params.q;\n var g = priv.params.g;\n var r = new BN(0);\n var k;\n var H = bits2int(hash, q).mod(q);\n var s = false;\n var kv = getKey(x, q, hash, algo);\n while (s === false) {\n k = makeKey(q, kv, algo);\n r = makeR(g, k, p, q);\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n if (s.cmpn(0) === 0) {\n s = false;\n r = new BN(0);\n }\n }\n return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n r = r.toArray();\n s = s.toArray();\n\n // Pad values\n if (r[0] & 0x80) { r = [0].concat(r); }\n if (s[0] & 0x80) { s = [0].concat(s); }\n\n var total = r.length + s.length + 4;\n var res = [\n 0x30, total, 0x02, r.length\n ];\n res = res.concat(r, [0x02, s.length], s);\n return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n x = Buffer.from(x.toArray());\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length);\n x = Buffer.concat([zeros, x]);\n }\n var hlen = hash.length;\n var hbits = bits2octets(hash, q);\n var v = Buffer.alloc(hlen);\n v.fill(1);\n var k = Buffer.alloc(hlen);\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n var bits = new BN(obits);\n var shift = (obits.length << 3) - q.bitLength();\n if (shift > 0) { bits.ishrn(shift); }\n return bits;\n}\n\nfunction bits2octets(bits, q) {\n bits = bits2int(bits, q);\n bits = bits.mod(q);\n var out = Buffer.from(bits.toArray());\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length);\n out = Buffer.concat([zeros, out]);\n }\n return out;\n}\n\nfunction makeKey(q, kv, algo) {\n var t;\n var k;\n\n do {\n t = Buffer.alloc(0);\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n t = Buffer.concat([t, kv.v]);\n }\n\n k = bits2int(t, q);\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n } while (k.cmp(q) !== -1);\n\n return k;\n}\n\nfunction makeR(g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar BN = require('bn.js');\nvar EC = require('elliptic').ec;\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n var pub = parseKeys(key);\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n return ecVerify(sig, hash, pub);\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n return dsaVerify(sig, hash, pub);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = pub.modulus.byteLength();\n var pad = [1];\n var padNum = 0;\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff);\n padNum += 1;\n }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) {\n pad.push(hash[i]);\n }\n pad = Buffer.from(pad);\n var red = BN.mont(pub.modulus);\n sig = new BN(sig).toRed(red);\n\n sig = sig.redPow(new BN(pub.publicExponent));\n sig = Buffer.from(sig.fromRed().toArray());\n var out = padNum < 8 ? 1 : 0;\n len = Math.min(sig.length, pad.length);\n if (sig.length !== pad.length) { out = 1; }\n\n i = -1;\n while (++i < len) { out |= sig[i] ^ pad[i]; }\n return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n var curve = new EC(curveId);\n var pubkey = pub.data.subjectPrivateKey.data;\n\n return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n var p = pub.data.p;\n var q = pub.data.q;\n var g = pub.data.g;\n var y = pub.data.pub_key;\n var unpacked = parseKeys.signature.decode(sig, 'der');\n var s = unpacked.s;\n var r = unpacked.r;\n checkValue(s, q);\n checkValue(r, q);\n var montp = BN.mont(p);\n var w = s.invm(q);\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q);\n return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","module.exports = require('events').EventEmitter;\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","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\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'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\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","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\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 = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n if (this.padding === false) {\n return false;\n }\n\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n if (this.padding === false) {\n return buffer;\n }\n\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n if(buf[p.place] === 0x00) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) {\n return false;\n }\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size');\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n var i;\n for (i = 0; i < naf.length; i += 1) {\n naf[i] = 0;\n }\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\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'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","module.exports = require('os')\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n\n'use strict';\n\nvar asn1 = require('asn1.js');\n\nexports.certificate = require('./certificate');\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int'](),\n\t\tthis.key('privateExponent')['int'](),\n\t\tthis.key('prime1')['int'](),\n\t\tthis.key('prime2')['int'](),\n\t\tthis.key('exponent1')['int'](),\n\t\tthis.key('exponent2')['int'](),\n\t\tthis.key('coefficient')['int']()\n\t);\n});\nexports.RSAPrivateKey = RSAPrivateKey;\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int']()\n\t);\n});\nexports.RSAPublicKey = RSAPublicKey;\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('none').null_().optional(),\n\t\tthis.key('curve').objid().optional(),\n\t\tthis.key('params').seq().obj(\n\t\t\tthis.key('p')['int'](),\n\t\t\tthis.key('q')['int'](),\n\t\t\tthis.key('g')['int']()\n\t\t).optional()\n\t);\n});\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\nexports.PublicKey = PublicKey;\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\nexports.PrivateKey = PrivateKeyInfo;\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').seq().obj(\n\t\t\tthis.key('id').objid(),\n\t\t\tthis.key('decrypt').seq().obj(\n\t\t\t\tthis.key('kde').seq().obj(\n\t\t\t\t\tthis.key('id').objid(),\n\t\t\t\t\tthis.key('kdeparams').seq().obj(\n\t\t\t\t\t\tthis.key('salt').octstr(),\n\t\t\t\t\t\tthis.key('iters')['int']()\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tthis.key('cipher').seq().obj(\n\t\t\t\t\tthis.key('algo').objid(),\n\t\t\t\t\tthis.key('iv').octstr()\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('p')['int'](),\n\t\tthis.key('q')['int'](),\n\t\tthis.key('g')['int'](),\n\t\tthis.key('pub_key')['int'](),\n\t\tthis.key('priv_key')['int']()\n\t);\n});\nexports.DSAPrivateKey = DSAPrivateKey;\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n\tthis['int']();\n});\n\nvar ECParameters = asn1.define('ECParameters', function () {\n\tthis.choice({\n\t\tnamedCurve: this.objid()\n\t});\n});\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('privateKey').octstr(),\n\t\tthis.key('parameters').optional().explicit(0).use(ECParameters),\n\t\tthis.key('publicKey').optional().explicit(1).bitstr()\n\t);\n});\nexports.ECPrivateKey = ECPrivateKey;\n\nexports.signature = asn1.define('signature', function () {\n\tthis.seq().obj(\n\t\tthis.key('r')['int'](),\n\t\tthis.key('s')['int']()\n\t);\n});\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict';\n\nvar asn = require('asn1.js');\n\nvar Time = asn.define('Time', function () {\n\tthis.choice({\n\t\tutcTime: this.utctime(),\n\t\tgeneralTime: this.gentime()\n\t});\n});\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n\tthis.seq().obj(\n\t\tthis.key('type').objid(),\n\t\tthis.key('value').any()\n\t);\n});\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('parameters').optional(),\n\t\tthis.key('curve').objid().optional()\n\t);\n});\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n\tthis.setof(AttributeTypeValue);\n});\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n\tthis.seqof(RelativeDistinguishedName);\n});\n\nvar Name = asn.define('Name', function () {\n\tthis.choice({\n\t\trdnSequence: this.use(RDNSequence)\n\t});\n});\n\nvar Validity = asn.define('Validity', function () {\n\tthis.seq().obj(\n\t\tthis.key('notBefore').use(Time),\n\t\tthis.key('notAfter').use(Time)\n\t);\n});\n\nvar Extension = asn.define('Extension', function () {\n\tthis.seq().obj(\n\t\tthis.key('extnID').objid(),\n\t\tthis.key('critical').bool().def(false),\n\t\tthis.key('extnValue').octstr()\n\t);\n});\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('version').explicit(0)['int']().optional(),\n\t\tthis.key('serialNumber')['int'](),\n\t\tthis.key('signature').use(AlgorithmIdentifier),\n\t\tthis.key('issuer').use(Name),\n\t\tthis.key('validity').use(Validity),\n\t\tthis.key('subject').use(Name),\n\t\tthis.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n\t\tthis.key('issuerUniqueID').implicit(1).bitstr().optional(),\n\t\tthis.key('subjectUniqueID').implicit(2).bitstr().optional(),\n\t\tthis.key('extensions').explicit(3).seqof(Extension).optional()\n\t);\n});\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('tbsCertificate').use(TBSCertificate),\n\t\tthis.key('signatureAlgorithm').use(AlgorithmIdentifier),\n\t\tthis.key('signatureValue').bitstr()\n\t);\n});\n\nmodule.exports = X509Certificate;\n","'use strict';\n\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m;\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m;\nvar evp = require('evp_bytestokey');\nvar ciphers = require('browserify-aes');\nvar Buffer = require('safe-buffer').Buffer;\nmodule.exports = function (okey, password) {\n\tvar key = okey.toString();\n\tvar match = key.match(findProc);\n\tvar decrypted;\n\tif (!match) {\n\t\tvar match2 = key.match(fullRegex);\n\t\tdecrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64');\n\t} else {\n\t\tvar suite = 'aes' + match[1];\n\t\tvar iv = Buffer.from(match[2], 'hex');\n\t\tvar cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64');\n\t\tvar cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;\n\t\tvar out = [];\n\t\tvar cipher = ciphers.createDecipheriv(suite, cipherKey, iv);\n\t\tout.push(cipher.update(cipherText));\n\t\tout.push(cipher['final']());\n\t\tdecrypted = Buffer.concat(out);\n\t}\n\tvar tag = key.match(startRegex)[1];\n\treturn {\n\t\ttag: tag,\n\t\tdata: decrypted\n\t};\n};\n","'use strict';\n\nvar asn1 = require('./asn1');\nvar aesid = require('./aesid.json');\nvar fixProc = require('./fixProc');\nvar ciphers = require('browserify-aes');\nvar compat = require('pbkdf2');\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction decrypt(data, password) {\n\tvar salt = data.algorithm.decrypt.kde.kdeparams.salt;\n\tvar iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);\n\tvar algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];\n\tvar iv = data.algorithm.decrypt.cipher.iv;\n\tvar cipherText = data.subjectPrivateKey;\n\tvar keylen = parseInt(algo.split('-')[1], 10) / 8;\n\tvar key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');\n\tvar cipher = ciphers.createDecipheriv(algo, key, iv);\n\tvar out = [];\n\tout.push(cipher.update(cipherText));\n\tout.push(cipher['final']());\n\treturn Buffer.concat(out);\n}\n\nfunction parseKeys(buffer) {\n\tvar password;\n\tif (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n\t\tpassword = buffer.passphrase;\n\t\tbuffer = buffer.key;\n\t}\n\tif (typeof buffer === 'string') {\n\t\tbuffer = Buffer.from(buffer);\n\t}\n\n\tvar stripped = fixProc(buffer, password);\n\n\tvar type = stripped.tag;\n\tvar data = stripped.data;\n\tvar subtype, ndata;\n\tswitch (type) {\n\t\tcase 'CERTIFICATE':\n\t\t\tndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;\n\t\t\t// falls through\n\t\tcase 'PUBLIC KEY':\n\t\t\tif (!ndata) {\n\t\t\t\tndata = asn1.PublicKey.decode(data, 'der');\n\t\t\t}\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\tndata.subjectPrivateKey = ndata.subjectPublicKey;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'ec',\n\t\t\t\t\t\tdata: ndata\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tdata: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'ENCRYPTED PRIVATE KEY':\n\t\t\tdata = asn1.EncryptedPrivateKey.decode(data, 'der');\n\t\t\tdata = decrypt(data, password);\n\t\t\t// falls through\n\t\tcase 'PRIVATE KEY':\n\t\t\tndata = asn1.PrivateKey.decode(data, 'der');\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcurve: ndata.algorithm.curve,\n\t\t\t\t\t\tprivateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tparams: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'RSA PUBLIC KEY':\n\t\t\treturn asn1.RSAPublicKey.decode(data, 'der');\n\t\tcase 'RSA PRIVATE KEY':\n\t\t\treturn asn1.RSAPrivateKey.decode(data, 'der');\n\t\tcase 'DSA PRIVATE KEY':\n\t\t\treturn {\n\t\t\t\ttype: 'dsa',\n\t\t\t\tparams: asn1.DSAPrivateKey.decode(data, 'der')\n\t\t\t};\n\t\tcase 'EC PRIVATE KEY':\n\t\t\tdata = asn1.ECPrivateKey.decode(data, 'der');\n\t\t\treturn {\n\t\t\t\tcurve: data.parameters.value,\n\t\t\t\tprivateKey: data.privateKey\n\t\t\t};\n\t\tdefault: throw new Error('unknown key type ' + type);\n\t}\n}\nparseKeys.signature = asn1.signature;\n\nmodule.exports = parseKeys;\n","// Copyright Joyent, Inc. and other Node contributors.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a\r\n// copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n// persons to whom the Software is furnished to do so, subject to the\r\n// following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included\r\n// in all copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n'use strict';\r\n\r\n\r\nvar isWindows = process.platform === 'win32';\r\nvar util = require('util');\r\n\r\n\r\n// resolves . and .. elements in a path array with directory names there\r\n// must be no slashes or device names (c:\\) in the array\r\n// (so also no leading and trailing slashes - it does not distinguish\r\n// relative and absolute paths)\r\nfunction normalizeArray(parts, allowAboveRoot) {\r\n var res = [];\r\n for (var i = 0; i < parts.length; i++) {\r\n var p = parts[i];\r\n\r\n // ignore empty parts\r\n if (!p || p === '.')\r\n continue;\r\n\r\n if (p === '..') {\r\n if (res.length && res[res.length - 1] !== '..') {\r\n res.pop();\r\n } else if (allowAboveRoot) {\r\n res.push('..');\r\n }\r\n } else {\r\n res.push(p);\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n\r\n// returns an array with empty elements removed from either end of the input\r\n// array or the original array if no elements need to be removed\r\nfunction trimArray(arr) {\r\n var lastIndex = arr.length - 1;\r\n var start = 0;\r\n for (; start <= lastIndex; start++) {\r\n if (arr[start])\r\n break;\r\n }\r\n\r\n var end = lastIndex;\r\n for (; end >= 0; end--) {\r\n if (arr[end])\r\n break;\r\n }\r\n\r\n if (start === 0 && end === lastIndex)\r\n return arr;\r\n if (start > end)\r\n return [];\r\n return arr.slice(start, end + 1);\r\n}\r\n\r\n// Regex to split a windows path into three parts: [*, device, slash,\r\n// tail] windows-only\r\nvar splitDeviceRe =\r\n /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\r\n\r\n// Regex to split the tail part of the above into [*, dir, basename, ext]\r\nvar splitTailRe =\r\n /^([\\s\\S]*?)((?:\\.{1,2}|[^\\\\\\/]+?|)(\\.[^.\\/\\\\]*|))(?:[\\\\\\/]*)$/;\r\n\r\nvar win32 = {};\r\n\r\n// Function to split a filename into [root, dir, basename, ext]\r\nfunction win32SplitPath(filename) {\r\n // Separate device+slash from tail\r\n var result = splitDeviceRe.exec(filename),\r\n device = (result[1] || '') + (result[2] || ''),\r\n tail = result[3] || '';\r\n // Split the tail into dir, basename and extension\r\n var result2 = splitTailRe.exec(tail),\r\n dir = result2[1],\r\n basename = result2[2],\r\n ext = result2[3];\r\n return [device, dir, basename, ext];\r\n}\r\n\r\nfunction win32StatPath(path) {\r\n var result = splitDeviceRe.exec(path),\r\n device = result[1] || '',\r\n isUnc = !!device && device[1] !== ':';\r\n return {\r\n device: device,\r\n isUnc: isUnc,\r\n isAbsolute: isUnc || !!result[2], // UNC paths are always absolute\r\n tail: result[3]\r\n };\r\n}\r\n\r\nfunction normalizeUNCRoot(device) {\r\n return '\\\\\\\\' + device.replace(/^[\\\\\\/]+/, '').replace(/[\\\\\\/]+/g, '\\\\');\r\n}\r\n\r\n// path.resolve([from ...], to)\r\nwin32.resolve = function() {\r\n var resolvedDevice = '',\r\n resolvedTail = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1; i--) {\r\n var path;\r\n if (i >= 0) {\r\n path = arguments[i];\r\n } else if (!resolvedDevice) {\r\n path = process.cwd();\r\n } else {\r\n // Windows has the concept of drive-specific current working\r\n // directories. If we've resolved a drive letter but not yet an\r\n // absolute path, get cwd for that drive. We're sure the device is not\r\n // an unc path at this points, because unc paths are always absolute.\r\n path = process.env['=' + resolvedDevice];\r\n // Verify that a drive-local cwd was found and that it actually points\r\n // to our drive. If not, default to the drive's root.\r\n if (!path || path.substr(0, 3).toLowerCase() !==\r\n resolvedDevice.toLowerCase() + '\\\\') {\r\n path = resolvedDevice + '\\\\';\r\n }\r\n }\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail;\r\n\r\n if (device &&\r\n resolvedDevice &&\r\n device.toLowerCase() !== resolvedDevice.toLowerCase()) {\r\n // This path points to another device so it is not applicable\r\n continue;\r\n }\r\n\r\n if (!resolvedDevice) {\r\n resolvedDevice = device;\r\n }\r\n if (!resolvedAbsolute) {\r\n resolvedTail = tail + '\\\\' + resolvedTail;\r\n resolvedAbsolute = isAbsolute;\r\n }\r\n\r\n if (resolvedDevice && resolvedAbsolute) {\r\n break;\r\n }\r\n }\r\n\r\n // Convert slashes to backslashes when `resolvedDevice` points to an UNC\r\n // root. Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n resolvedDevice = normalizeUNCRoot(resolvedDevice);\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path,\r\n // but handle relative paths to be safe (might happen when process.cwd()\r\n // fails)\r\n\r\n // Normalize the tail path\r\n resolvedTail = normalizeArray(resolvedTail.split(/[\\\\\\/]+/),\r\n !resolvedAbsolute).join('\\\\');\r\n\r\n return (resolvedDevice + (resolvedAbsolute ? '\\\\' : '') + resolvedTail) ||\r\n '.';\r\n};\r\n\r\n\r\nwin32.normalize = function(path) {\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail,\r\n trailingSlash = /[\\\\\\/]$/.test(tail);\r\n\r\n // Normalize the tail path\r\n tail = normalizeArray(tail.split(/[\\\\\\/]+/), !isAbsolute).join('\\\\');\r\n\r\n if (!tail && !isAbsolute) {\r\n tail = '.';\r\n }\r\n if (tail && trailingSlash) {\r\n tail += '\\\\';\r\n }\r\n\r\n // Convert slashes to backslashes when `device` points to an UNC root.\r\n // Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n device = normalizeUNCRoot(device);\r\n }\r\n\r\n return device + (isAbsolute ? '\\\\' : '') + tail;\r\n};\r\n\r\n\r\nwin32.isAbsolute = function(path) {\r\n return win32StatPath(path).isAbsolute;\r\n};\r\n\r\nwin32.join = function() {\r\n var paths = [];\r\n for (var i = 0; i < arguments.length; i++) {\r\n var arg = arguments[i];\r\n if (!util.isString(arg)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (arg) {\r\n paths.push(arg);\r\n }\r\n }\r\n\r\n var joined = paths.join('\\\\');\r\n\r\n // Make sure that the joined path doesn't start with two slashes, because\r\n // normalize() will mistake it for an UNC path then.\r\n //\r\n // This step is skipped when it is very clear that the user actually\r\n // intended to point at an UNC path. This is assumed when the first\r\n // non-empty string arguments starts with exactly two slashes followed by\r\n // at least one more non-slash character.\r\n //\r\n // Note that for normalize() to treat a path as an UNC path it needs to\r\n // have at least 2 components, so we don't filter for that here.\r\n // This means that the user can use join to construct UNC paths from\r\n // a server name and a share name; for example:\r\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\')\r\n if (!/^[\\\\\\/]{2}[^\\\\\\/]/.test(paths[0])) {\r\n joined = joined.replace(/^[\\\\\\/]{2,}/, '\\\\');\r\n }\r\n\r\n return win32.normalize(joined);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// it will solve the relative path from 'from' to 'to', for instance:\r\n// from = 'C:\\\\orandea\\\\test\\\\aaa'\r\n// to = 'C:\\\\orandea\\\\impl\\\\bbb'\r\n// The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\r\nwin32.relative = function(from, to) {\r\n from = win32.resolve(from);\r\n to = win32.resolve(to);\r\n\r\n // windows is not case sensitive\r\n var lowerFrom = from.toLowerCase();\r\n var lowerTo = to.toLowerCase();\r\n\r\n var toParts = trimArray(to.split('\\\\'));\r\n\r\n var lowerFromParts = trimArray(lowerFrom.split('\\\\'));\r\n var lowerToParts = trimArray(lowerTo.split('\\\\'));\r\n\r\n var length = Math.min(lowerFromParts.length, lowerToParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (lowerFromParts[i] !== lowerToParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n if (samePartsLength == 0) {\r\n return to;\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < lowerFromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('\\\\');\r\n};\r\n\r\n\r\nwin32._makeLong = function(path) {\r\n // Note: this will *probably* throw somewhere.\r\n if (!util.isString(path))\r\n return path;\r\n\r\n if (!path) {\r\n return '';\r\n }\r\n\r\n var resolvedPath = win32.resolve(path);\r\n\r\n if (/^[a-zA-Z]\\:\\\\/.test(resolvedPath)) {\r\n // path is local filesystem path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\' + resolvedPath;\r\n } else if (/^\\\\\\\\[^?.]/.test(resolvedPath)) {\r\n // path is network UNC path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\UNC\\\\' + resolvedPath.substring(2);\r\n }\r\n\r\n return path;\r\n};\r\n\r\n\r\nwin32.dirname = function(path) {\r\n var result = win32SplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nwin32.basename = function(path, ext) {\r\n var f = win32SplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nwin32.extname = function(path) {\r\n return win32SplitPath(path)[3];\r\n};\r\n\r\n\r\nwin32.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir;\r\n var base = pathObject.base || '';\r\n if (!dir) {\r\n return base;\r\n }\r\n if (dir[dir.length - 1] === win32.sep) {\r\n return dir + base;\r\n }\r\n return dir + win32.sep + base;\r\n};\r\n\r\n\r\nwin32.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = win32SplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nwin32.sep = '\\\\';\r\nwin32.delimiter = ';';\r\n\r\n\r\n// Split a filename into [root, dir, basename, ext], unix version\r\n// 'root' is just a slash, or nothing.\r\nvar splitPathRe =\r\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\nvar posix = {};\r\n\r\n\r\nfunction posixSplitPath(filename) {\r\n return splitPathRe.exec(filename).slice(1);\r\n}\r\n\r\n\r\n// path.resolve([from ...], to)\r\n// posix version\r\nposix.resolve = function() {\r\n var resolvedPath = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\r\n var path = (i >= 0) ? arguments[i] : process.cwd();\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n resolvedPath = path + '/' + resolvedPath;\r\n resolvedAbsolute = path[0] === '/';\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path, but\r\n // handle relative paths to be safe (might happen when process.cwd() fails)\r\n\r\n // Normalize the path\r\n resolvedPath = normalizeArray(resolvedPath.split('/'),\r\n !resolvedAbsolute).join('/');\r\n\r\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\r\n};\r\n\r\n// path.normalize(path)\r\n// posix version\r\nposix.normalize = function(path) {\r\n var isAbsolute = posix.isAbsolute(path),\r\n trailingSlash = path && path[path.length - 1] === '/';\r\n\r\n // Normalize the path\r\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\r\n\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n\r\n return (isAbsolute ? '/' : '') + path;\r\n};\r\n\r\n// posix version\r\nposix.isAbsolute = function(path) {\r\n return path.charAt(0) === '/';\r\n};\r\n\r\n// posix version\r\nposix.join = function() {\r\n var path = '';\r\n for (var i = 0; i < arguments.length; i++) {\r\n var segment = arguments[i];\r\n if (!util.isString(segment)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (segment) {\r\n if (!path) {\r\n path += segment;\r\n } else {\r\n path += '/' + segment;\r\n }\r\n }\r\n }\r\n return posix.normalize(path);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// posix version\r\nposix.relative = function(from, to) {\r\n from = posix.resolve(from).substr(1);\r\n to = posix.resolve(to).substr(1);\r\n\r\n var fromParts = trimArray(from.split('/'));\r\n var toParts = trimArray(to.split('/'));\r\n\r\n var length = Math.min(fromParts.length, toParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (fromParts[i] !== toParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < fromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('/');\r\n};\r\n\r\n\r\nposix._makeLong = function(path) {\r\n return path;\r\n};\r\n\r\n\r\nposix.dirname = function(path) {\r\n var result = posixSplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nposix.basename = function(path, ext) {\r\n var f = posixSplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nposix.extname = function(path) {\r\n return posixSplitPath(path)[3];\r\n};\r\n\r\n\r\nposix.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\r\n var base = pathObject.base || '';\r\n return dir + base;\r\n};\r\n\r\n\r\nposix.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = posixSplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n allParts[1] = allParts[1] || '';\r\n allParts[2] = allParts[2] || '';\r\n allParts[3] = allParts[3] || '';\r\n\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nposix.sep = '/';\r\nposix.delimiter = ':';\r\n\r\n\r\nif (isWindows)\r\n module.exports = win32;\r\nelse /* posix */\r\n module.exports = posix;\r\n\r\nmodule.exports.posix = posix;\r\nmodule.exports.win32 = win32;\r\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","/*\n * readlineSync\n * https://github.com/anseki/readline-sync\n *\n * Copyright (c) 2018 anseki\n * Licensed under the MIT license.\n */\n\n'use strict';\n\nvar\n IS_WIN = process.platform === 'win32',\n\n ALGORITHM_CIPHER = 'aes-256-cbc',\n ALGORITHM_HASH = 'sha256',\n DEFAULT_ERR_MSG = 'The current environment doesn\\'t support interactive reading from TTY.',\n\n fs = require('fs'),\n TTY = process.binding('tty_wrap').TTY,\n childProc = require('child_process'),\n pathUtil = require('path'),\n\n defaultOptions = {\n /* eslint-disable key-spacing */\n prompt: '> ',\n hideEchoBack: false,\n mask: '*',\n limit: [],\n limitMessage: 'Input another, please.$<( [)limit(])>',\n defaultInput: '',\n trueValue: [],\n falseValue: [],\n caseSensitive: false,\n keepWhitespace: false,\n encoding: 'utf8',\n bufferSize: 1024,\n print: void 0,\n history: true,\n cd: false,\n phContent: void 0,\n preCheck: void 0\n /* eslint-enable key-spacing */\n },\n\n fdR = 'none', fdW, ttyR, isRawMode = false,\n extHostPath, extHostArgs, tempdir, salt = 0,\n lastInput = '', inputHistory = [], rawInput,\n _DBG_useExt = false, _DBG_checkOptions = false, _DBG_checkMethod = false;\n\nfunction getHostArgs(options) {\n // Send any text to crazy Windows shell safely.\n function encodeArg(arg) {\n return arg.replace(/[^\\w\\u0080-\\uFFFF]/g, function(chr) {\n return '#' + chr.charCodeAt(0) + ';';\n });\n }\n\n return extHostArgs.concat((function(conf) {\n var args = [];\n Object.keys(conf).forEach(function(optionName) {\n if (conf[optionName] === 'boolean') {\n if (options[optionName]) { args.push('--' + optionName); }\n } else if (conf[optionName] === 'string') {\n if (options[optionName]) {\n args.push('--' + optionName, encodeArg(options[optionName]));\n }\n }\n });\n return args;\n })({\n /* eslint-disable key-spacing */\n display: 'string',\n displayOnly: 'boolean',\n keyIn: 'boolean',\n hideEchoBack: 'boolean',\n mask: 'string',\n limit: 'string',\n caseSensitive: 'boolean'\n /* eslint-enable key-spacing */\n }));\n}\n\n// piping via files (for Node.js v0.10-)\nfunction _execFileSync(options, execOptions) {\n\n function getTempfile(name) {\n var filepath, suffix = '', fd;\n tempdir = tempdir || require('os').tmpdir();\n\n while (true) {\n filepath = pathUtil.join(tempdir, name + suffix);\n try {\n fd = fs.openSync(filepath, 'wx');\n } catch (e) {\n if (e.code === 'EEXIST') {\n suffix++;\n continue;\n } else {\n throw e;\n }\n }\n fs.closeSync(fd);\n break;\n }\n return filepath;\n }\n\n var hostArgs, shellPath, shellArgs, res = {}, exitCode, extMessage,\n pathStdout = getTempfile('readline-sync.stdout'),\n pathStderr = getTempfile('readline-sync.stderr'),\n pathExit = getTempfile('readline-sync.exit'),\n pathDone = getTempfile('readline-sync.done'),\n crypto = require('crypto'), shasum, decipher, password;\n\n shasum = crypto.createHash(ALGORITHM_HASH);\n shasum.update('' + process.pid + (salt++) + Math.random());\n password = shasum.digest('hex');\n decipher = crypto.createDecipher(ALGORITHM_CIPHER, password);\n\n hostArgs = getHostArgs(options);\n if (IS_WIN) {\n shellPath = process.env.ComSpec || 'cmd.exe';\n process.env.Q = '\"'; // The quote (\") that isn't escaped.\n // `()` for ignore space by echo\n shellArgs = ['/V:ON', '/S', '/C',\n '(%Q%' + shellPath + '%Q% /V:ON /S /C %Q%' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n '%Q%' + extHostPath + '%Q%' +\n hostArgs.map(function(arg) { return ' %Q%' + arg + '%Q%'; }).join('') +\n ' & (echo !ERRORLEVEL!)>%Q%' + pathExit + '%Q%%Q%) 2>%Q%' + pathStderr + '%Q%' +\n ' |%Q%' + process.execPath + '%Q% %Q%' + __dirname + '\\\\encrypt.js%Q%' +\n ' %Q%' + ALGORITHM_CIPHER + '%Q% %Q%' + password + '%Q%' +\n ' >%Q%' + pathStdout + '%Q%' +\n ' & (echo 1)>%Q%' + pathDone + '%Q%'];\n } else {\n shellPath = '/bin/sh';\n shellArgs = ['-c',\n // Use `()`, not `{}` for `-c` (text param)\n '(\"' + extHostPath + '\"' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n hostArgs.map(function(arg) { return \" '\" + arg.replace(/'/g, \"'\\\\''\") + \"'\"; }).join('') +\n '; echo $?>\"' + pathExit + '\") 2>\"' + pathStderr + '\"' +\n ' |\"' + process.execPath + '\" \"' + __dirname + '/encrypt.js\"' +\n ' \"' + ALGORITHM_CIPHER + '\" \"' + password + '\"' +\n ' >\"' + pathStdout + '\"' +\n '; echo 1 >\"' + pathDone + '\"'];\n }\n if (_DBG_checkMethod) { _DBG_checkMethod('_execFileSync', hostArgs); }\n try {\n childProc.spawn(shellPath, shellArgs, execOptions);\n } catch (e) {\n res.error = new Error(e.message);\n res.error.method = '_execFileSync - spawn';\n res.error.program = shellPath;\n res.error.args = shellArgs;\n }\n\n while (fs.readFileSync(pathDone, {encoding: options.encoding}).trim() !== '1') {} // eslint-disable-line no-empty\n if ((exitCode =\n fs.readFileSync(pathExit, {encoding: options.encoding}).trim()) === '0') {\n res.input =\n decipher.update(fs.readFileSync(pathStdout, {encoding: 'binary'}),\n 'hex', options.encoding) +\n decipher.final(options.encoding);\n } else {\n extMessage = fs.readFileSync(pathStderr, {encoding: options.encoding}).trim();\n res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n res.error.method = '_execFileSync';\n res.error.program = shellPath;\n res.error.args = shellArgs;\n res.error.extMessage = extMessage;\n res.error.exitCode = +exitCode;\n }\n\n fs.unlinkSync(pathStdout);\n fs.unlinkSync(pathStderr);\n fs.unlinkSync(pathExit);\n fs.unlinkSync(pathDone);\n\n return res;\n}\n\nfunction readlineExt(options) {\n var hostArgs, res = {}, extMessage,\n execOptions = {env: process.env, encoding: options.encoding};\n\n if (!extHostPath) {\n if (IS_WIN) {\n if (process.env.PSModulePath) { // Windows PowerShell\n extHostPath = 'powershell.exe';\n extHostArgs = ['-ExecutionPolicy', 'Bypass', '-File', __dirname + '\\\\read.ps1']; // eslint-disable-line no-path-concat\n } else { // Windows Script Host\n extHostPath = 'cscript.exe';\n extHostArgs = ['//nologo', __dirname + '\\\\read.cs.js']; // eslint-disable-line no-path-concat\n }\n } else {\n extHostPath = '/bin/sh';\n extHostArgs = [__dirname + '/read.sh']; // eslint-disable-line no-path-concat\n }\n }\n if (IS_WIN && !process.env.PSModulePath) { // Windows Script Host\n // ScriptPW (Win XP and Server2003) needs TTY stream as STDIN.\n // In this case, If STDIN isn't TTY, an error is thrown.\n execOptions.stdio = [process.stdin];\n }\n\n if (childProc.execFileSync) {\n hostArgs = getHostArgs(options);\n if (_DBG_checkMethod) { _DBG_checkMethod('execFileSync', hostArgs); }\n try {\n res.input = childProc.execFileSync(extHostPath, hostArgs, execOptions);\n } catch (e) { // non-zero exit code\n extMessage = e.stderr ? (e.stderr + '').trim() : '';\n res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n res.error.method = 'execFileSync';\n res.error.program = extHostPath;\n res.error.args = hostArgs;\n res.error.extMessage = extMessage;\n res.error.exitCode = e.status;\n res.error.code = e.code;\n res.error.signal = e.signal;\n }\n } else {\n res = _execFileSync(options, execOptions);\n }\n if (!res.error) {\n res.input = res.input.replace(/^\\s*'|'\\s*$/g, '');\n options.display = '';\n }\n\n return res;\n}\n\n/*\n display: string\n displayOnly: boolean\n keyIn: boolean\n hideEchoBack: boolean\n mask: string\n limit: string (pattern)\n caseSensitive: boolean\n keepWhitespace: boolean\n encoding, bufferSize, print\n*/\nfunction _readlineSync(options) {\n var input = '', displaySave = options.display,\n silent = !options.display &&\n options.keyIn && options.hideEchoBack && !options.mask;\n\n function tryExt() {\n var res = readlineExt(options);\n if (res.error) { throw res.error; }\n return res.input;\n }\n\n if (_DBG_checkOptions) { _DBG_checkOptions(options); }\n\n (function() { // open TTY\n var fsB, constants, verNum;\n\n function getFsB() {\n if (!fsB) {\n fsB = process.binding('fs'); // For raw device path\n constants = process.binding('constants');\n }\n return fsB;\n }\n\n if (typeof fdR !== 'string') { return; }\n fdR = null;\n\n if (IS_WIN) {\n // iojs-v2.3.2+ input stream can't read first line. (#18)\n // ** Don't get process.stdin before check! **\n // Fixed v5.1.0\n // Fixed v4.2.4\n // It regressed again in v5.6.0, it is fixed in v6.2.0.\n verNum = (function(ver) { // getVerNum\n var nums = ver.replace(/^\\D+/, '').split('.');\n var verNum = 0;\n if ((nums[0] = +nums[0])) { verNum += nums[0] * 10000; }\n if ((nums[1] = +nums[1])) { verNum += nums[1] * 100; }\n if ((nums[2] = +nums[2])) { verNum += nums[2]; }\n return verNum;\n })(process.version);\n if (!(verNum >= 20302 && verNum < 40204 || verNum >= 50000 && verNum < 50100 || verNum >= 50600 && verNum < 60200) &&\n process.stdin.isTTY) {\n process.stdin.pause();\n fdR = process.stdin.fd;\n ttyR = process.stdin._handle;\n } else {\n try {\n // The stream by fs.openSync('\\\\\\\\.\\\\CON', 'r') can't switch to raw mode.\n // 'CONIN$' might fail on XP, 2000, 7 (x86).\n fdR = getFsB().open('CONIN$', constants.O_RDWR, parseInt('0666', 8));\n ttyR = new TTY(fdR, true);\n } catch (e) { /* ignore */ }\n }\n\n if (process.stdout.isTTY) {\n fdW = process.stdout.fd;\n } else {\n try {\n fdW = fs.openSync('\\\\\\\\.\\\\CON', 'w');\n } catch (e) { /* ignore */ }\n if (typeof fdW !== 'number') { // Retry\n try {\n fdW = getFsB().open('CONOUT$', constants.O_RDWR, parseInt('0666', 8));\n } catch (e) { /* ignore */ }\n }\n }\n\n } else {\n if (process.stdin.isTTY) {\n process.stdin.pause();\n try {\n fdR = fs.openSync('/dev/tty', 'r'); // device file, not process.stdin\n ttyR = process.stdin._handle;\n } catch (e) { /* ignore */ }\n } else {\n // Node.js v0.12 read() fails.\n try {\n fdR = fs.openSync('/dev/tty', 'r');\n ttyR = new TTY(fdR, false);\n } catch (e) { /* ignore */ }\n }\n\n if (process.stdout.isTTY) {\n fdW = process.stdout.fd;\n } else {\n try {\n fdW = fs.openSync('/dev/tty', 'w');\n } catch (e) { /* ignore */ }\n }\n }\n })();\n\n (function() { // try read\n var atEol, limit,\n isCooked = !options.hideEchoBack && !options.keyIn,\n buffer, reqSize, readSize, chunk, line;\n rawInput = '';\n\n // Node.js v0.10- returns an error if same mode is set.\n function setRawMode(mode) {\n if (mode === isRawMode) { return true; }\n if (ttyR.setRawMode(mode) !== 0) { return false; }\n isRawMode = mode;\n return true;\n }\n\n if (_DBG_useExt || !ttyR ||\n typeof fdW !== 'number' && (options.display || !isCooked)) {\n input = tryExt();\n return;\n }\n\n if (options.display) {\n fs.writeSync(fdW, options.display);\n options.display = '';\n }\n if (options.displayOnly) { return; }\n\n if (!setRawMode(!isCooked)) {\n input = tryExt();\n return;\n }\n\n reqSize = options.keyIn ? 1 : options.bufferSize;\n // Check `allocUnsafe` to make sure of the new API.\n buffer = Buffer.allocUnsafe && Buffer.alloc ? Buffer.alloc(reqSize) : new Buffer(reqSize);\n\n if (options.keyIn && options.limit) {\n limit = new RegExp('[^' + options.limit + ']',\n 'g' + (options.caseSensitive ? '' : 'i'));\n }\n\n while (true) {\n readSize = 0;\n try {\n readSize = fs.readSync(fdR, buffer, 0, reqSize);\n } catch (e) {\n if (e.code !== 'EOF') {\n setRawMode(false);\n input += tryExt();\n return;\n }\n }\n if (readSize > 0) {\n chunk = buffer.toString(options.encoding, 0, readSize);\n rawInput += chunk;\n } else {\n chunk = '\\n';\n rawInput += String.fromCharCode(0);\n }\n\n if (chunk && typeof (line = (chunk.match(/^(.*?)[\\r\\n]/) || [])[1]) === 'string') {\n chunk = line;\n atEol = true;\n }\n\n // other ctrl-chars\n // eslint-disable-next-line no-control-regex\n if (chunk) { chunk = chunk.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, ''); }\n if (chunk && limit) { chunk = chunk.replace(limit, ''); }\n\n if (chunk) {\n if (!isCooked) {\n if (!options.hideEchoBack) {\n fs.writeSync(fdW, chunk);\n } else if (options.mask) {\n fs.writeSync(fdW, (new Array(chunk.length + 1)).join(options.mask));\n }\n }\n input += chunk;\n }\n\n if (!options.keyIn && atEol ||\n options.keyIn && input.length >= reqSize) { break; }\n }\n\n if (!isCooked && !silent) { fs.writeSync(fdW, '\\n'); }\n setRawMode(false);\n })();\n\n if (options.print && !silent) {\n options.print(displaySave + (options.displayOnly ? '' :\n (options.hideEchoBack ? (new Array(input.length + 1)).join(options.mask)\n : input) + '\\n'), // must at least write '\\n'\n options.encoding);\n }\n\n return options.displayOnly ? '' :\n (lastInput = options.keepWhitespace || options.keyIn ? input : input.trim());\n}\n\nfunction flattenArray(array, validator) {\n var flatArray = [];\n function _flattenArray(array) {\n if (array == null) {\n return;\n } else if (Array.isArray(array)) {\n array.forEach(_flattenArray);\n } else if (!validator || validator(array)) {\n flatArray.push(array);\n }\n }\n _flattenArray(array);\n return flatArray;\n}\n\nfunction escapePattern(pattern) {\n return pattern.replace(/[\\x00-\\x7f]/g, // eslint-disable-line no-control-regex\n function(s) { return '\\\\x' + ('00' + s.charCodeAt().toString(16)).substr(-2); });\n}\n\n// margeOptions(options1, options2 ... )\n// margeOptions(true, options1, options2 ... )\n// arg1=true : Start from defaultOptions and pick elements of that.\nfunction margeOptions() {\n var optionsList = Array.prototype.slice.call(arguments),\n optionNames, fromDefault;\n\n if (optionsList.length && typeof optionsList[0] === 'boolean') {\n fromDefault = optionsList.shift();\n if (fromDefault) {\n optionNames = Object.keys(defaultOptions);\n optionsList.unshift(defaultOptions);\n }\n }\n\n return optionsList.reduce(function(options, optionsPart) {\n if (optionsPart == null) { return options; }\n\n // ======== DEPRECATED ========\n if (optionsPart.hasOwnProperty('noEchoBack') &&\n !optionsPart.hasOwnProperty('hideEchoBack')) {\n optionsPart.hideEchoBack = optionsPart.noEchoBack;\n delete optionsPart.noEchoBack;\n }\n if (optionsPart.hasOwnProperty('noTrim') &&\n !optionsPart.hasOwnProperty('keepWhitespace')) {\n optionsPart.keepWhitespace = optionsPart.noTrim;\n delete optionsPart.noTrim;\n }\n // ======== /DEPRECATED ========\n\n if (!fromDefault) { optionNames = Object.keys(optionsPart); }\n optionNames.forEach(function(optionName) {\n var value;\n if (!optionsPart.hasOwnProperty(optionName)) { return; }\n value = optionsPart[optionName];\n switch (optionName) {\n // _readlineSync <- * * -> defaultOptions\n // ================ string\n case 'mask': // * *\n case 'limitMessage': // *\n case 'defaultInput': // *\n case 'encoding': // * *\n value = value != null ? value + '' : '';\n if (value && optionName !== 'limitMessage') { value = value.replace(/[\\r\\n]/g, ''); }\n options[optionName] = value;\n break;\n // ================ number(int)\n case 'bufferSize': // * *\n if (!isNaN(value = parseInt(value, 10)) && typeof value === 'number') {\n options[optionName] = value; // limited updating (number is needed)\n }\n break;\n // ================ boolean\n case 'displayOnly': // *\n case 'keyIn': // *\n case 'hideEchoBack': // * *\n case 'caseSensitive': // * *\n case 'keepWhitespace': // * *\n case 'history': // *\n case 'cd': // *\n options[optionName] = !!value;\n break;\n // ================ array\n case 'limit': // * * to string for readlineExt\n case 'trueValue': // *\n case 'falseValue': // *\n options[optionName] = flattenArray(value, function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number' ||\n type === 'function' || value instanceof RegExp;\n }).map(function(value) {\n return typeof value === 'string' ? value.replace(/[\\r\\n]/g, '') : value;\n });\n break;\n // ================ function\n case 'print': // * *\n case 'phContent': // *\n case 'preCheck': // *\n options[optionName] = typeof value === 'function' ? value : void 0;\n break;\n // ================ other\n case 'prompt': // *\n case 'display': // *\n options[optionName] = value != null ? value : '';\n break;\n // no default\n }\n });\n return options;\n }, {});\n}\n\nfunction isMatched(res, comps, caseSensitive) {\n return comps.some(function(comp) {\n var type = typeof comp;\n return type === 'string' ?\n (caseSensitive ? res === comp : res.toLowerCase() === comp.toLowerCase()) :\n type === 'number' ? parseFloat(res) === comp :\n type === 'function' ? comp(res) :\n comp instanceof RegExp ? comp.test(res) : false;\n });\n}\n\nfunction replaceHomePath(path, expand) {\n var homePath = pathUtil.normalize(\n IS_WIN ? (process.env.HOMEDRIVE || '') + (process.env.HOMEPATH || '') :\n process.env.HOME || '').replace(/[\\/\\\\]+$/, '');\n path = pathUtil.normalize(path);\n return expand ? path.replace(/^~(?=\\/|\\\\|$)/, homePath) :\n path.replace(new RegExp('^' + escapePattern(homePath) +\n '(?=\\\\/|\\\\\\\\|$)', IS_WIN ? 'i' : ''), '~');\n}\n\nfunction replacePlaceholder(text, generator) {\n var PTN_INNER = '(?:\\\\(([\\\\s\\\\S]*?)\\\\))?(\\\\w+|.-.)(?:\\\\(([\\\\s\\\\S]*?)\\\\))?',\n rePlaceholder = new RegExp('(\\\\$)?(\\\\$<' + PTN_INNER + '>)', 'g'),\n rePlaceholderCompat = new RegExp('(\\\\$)?(\\\\$\\\\{' + PTN_INNER + '\\\\})', 'g');\n\n function getPlaceholderText(s, escape, placeholder, pre, param, post) {\n var text;\n return escape || typeof (text = generator(param)) !== 'string' ? placeholder :\n text ? (pre || '') + text + (post || '') : '';\n }\n\n return text.replace(rePlaceholder, getPlaceholderText)\n .replace(rePlaceholderCompat, getPlaceholderText);\n}\n\nfunction array2charlist(array, caseSensitive, collectSymbols) {\n var values, group = [], groupClass = -1, charCode = 0, symbols = '', suppressed;\n function addGroup(groups, group) {\n if (group.length > 3) { // ellipsis\n groups.push(group[0] + '...' + group[group.length - 1]);\n suppressed = true;\n } else if (group.length) {\n groups = groups.concat(group);\n }\n return groups;\n }\n\n values = array.reduce(\n function(chars, value) { return chars.concat((value + '').split('')); }, [])\n .reduce(function(groups, curChar) {\n var curGroupClass, curCharCode;\n if (!caseSensitive) { curChar = curChar.toLowerCase(); }\n curGroupClass = /^\\d$/.test(curChar) ? 1 :\n /^[A-Z]$/.test(curChar) ? 2 : /^[a-z]$/.test(curChar) ? 3 : 0;\n if (collectSymbols && curGroupClass === 0) {\n symbols += curChar;\n } else {\n curCharCode = curChar.charCodeAt(0);\n if (curGroupClass && curGroupClass === groupClass &&\n curCharCode === charCode + 1) {\n group.push(curChar);\n } else {\n groups = addGroup(groups, group);\n group = [curChar];\n groupClass = curGroupClass;\n }\n charCode = curCharCode;\n }\n return groups;\n }, []);\n values = addGroup(values, group); // last group\n if (symbols) { values.push(symbols); suppressed = true; }\n return {values: values, suppressed: suppressed};\n}\n\nfunction joinChunks(chunks, suppressed) {\n return chunks.join(chunks.length > 2 ? ', ' : suppressed ? ' / ' : '/');\n}\n\nfunction getPhContent(param, options) {\n var text, values, resCharlist = {}, arg;\n if (options.phContent) {\n text = options.phContent(param, options);\n }\n if (typeof text !== 'string') {\n switch (param) {\n case 'hideEchoBack':\n case 'mask':\n case 'defaultInput':\n case 'caseSensitive':\n case 'keepWhitespace':\n case 'encoding':\n case 'bufferSize':\n case 'history':\n case 'cd':\n text = !options.hasOwnProperty(param) ? '' :\n typeof options[param] === 'boolean' ? (options[param] ? 'on' : 'off') :\n options[param] + '';\n break;\n // case 'prompt':\n // case 'query':\n // case 'display':\n // text = options.hasOwnProperty('displaySrc') ? options.displaySrc + '' : '';\n // break;\n case 'limit':\n case 'trueValue':\n case 'falseValue':\n values = options[options.hasOwnProperty(param + 'Src') ? param + 'Src' : param];\n if (options.keyIn) { // suppress\n resCharlist = array2charlist(values, options.caseSensitive);\n values = resCharlist.values;\n } else {\n values = values.filter(function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number';\n });\n }\n text = joinChunks(values, resCharlist.suppressed);\n break;\n case 'limitCount':\n case 'limitCountNotZero':\n text = options[options.hasOwnProperty('limitSrc') ?\n 'limitSrc' : 'limit'].length;\n text = text || param !== 'limitCountNotZero' ? text + '' : '';\n break;\n case 'lastInput':\n text = lastInput;\n break;\n case 'cwd':\n case 'CWD':\n case 'cwdHome':\n text = process.cwd();\n if (param === 'CWD') {\n text = pathUtil.basename(text);\n } else if (param === 'cwdHome') {\n text = replaceHomePath(text);\n }\n break;\n case 'date':\n case 'time':\n case 'localeDate':\n case 'localeTime':\n text = (new Date())['to' +\n param.replace(/^./, function(str) { return str.toUpperCase(); }) +\n 'String']();\n break;\n default: // with arg\n if (typeof (arg = (param.match(/^history_m(\\d+)$/) || [])[1]) === 'string') {\n text = inputHistory[inputHistory.length - arg] || '';\n }\n }\n }\n return text;\n}\n\nfunction getPhCharlist(param) {\n var matches = /^(.)-(.)$/.exec(param), text = '', from, to, code, step;\n if (!matches) { return null; }\n from = matches[1].charCodeAt(0);\n to = matches[2].charCodeAt(0);\n step = from < to ? 1 : -1;\n for (code = from; code !== to + step; code += step) { text += String.fromCharCode(code); }\n return text;\n}\n\n// cmd \"arg\" \" a r g \" \"\" 'a\"r\"g' \"a\"\"rg\" \"arg\nfunction parseCl(cl) {\n var reToken = new RegExp(/(\\s*)(?:(\"|')(.*?)(?:\\2|$)|(\\S+))/g), matches,\n taken = '', args = [], part;\n cl = cl.trim();\n while ((matches = reToken.exec(cl))) {\n part = matches[3] || matches[4] || '';\n if (matches[1]) {\n args.push(taken);\n taken = '';\n }\n taken += part;\n }\n if (taken) { args.push(taken); }\n return args;\n}\n\nfunction toBool(res, options) {\n return (\n (options.trueValue.length &&\n isMatched(res, options.trueValue, options.caseSensitive)) ? true :\n (options.falseValue.length &&\n isMatched(res, options.falseValue, options.caseSensitive)) ? false : res);\n}\n\nfunction getValidLine(options) {\n var res, forceNext, limitMessage,\n matches, histInput, args, resCheck;\n\n function _getPhContent(param) { return getPhContent(param, options); }\n function addDisplay(text) { options.display += (/[^\\r\\n]$/.test(options.display) ? '\\n' : '') + text; }\n\n options.limitSrc = options.limit;\n options.displaySrc = options.display;\n options.limit = ''; // for readlineExt\n options.display = replacePlaceholder(options.display + '', _getPhContent);\n\n while (true) {\n res = _readlineSync(options);\n forceNext = false;\n limitMessage = '';\n\n if (options.defaultInput && !res) { res = options.defaultInput; }\n\n if (options.history) {\n if ((matches = /^\\s*\\!(?:\\!|-1)(:p)?\\s*$/.exec(res))) { // `!!` `!-1` +`:p`\n histInput = inputHistory[0] || '';\n if (matches[1]) { // only display\n forceNext = true;\n } else { // replace input\n res = histInput;\n }\n // Show it even if it is empty (NL only).\n addDisplay(histInput + '\\n');\n if (!forceNext) { // Loop may break\n options.displayOnly = true;\n _readlineSync(options);\n options.displayOnly = false;\n }\n } else if (res && res !== inputHistory[inputHistory.length - 1]) {\n inputHistory = [res];\n }\n }\n\n if (!forceNext && options.cd && res) {\n args = parseCl(res);\n switch (args[0].toLowerCase()) {\n case 'cd':\n if (args[1]) {\n try {\n process.chdir(replaceHomePath(args[1], true));\n } catch (e) {\n addDisplay(e + '');\n }\n }\n forceNext = true;\n break;\n case 'pwd':\n addDisplay(process.cwd());\n forceNext = true;\n break;\n // no default\n }\n }\n\n if (!forceNext && options.preCheck) {\n resCheck = options.preCheck(res, options);\n res = resCheck.res;\n if (resCheck.forceNext) { forceNext = true; } // Don't switch to false.\n }\n\n if (!forceNext) {\n if (!options.limitSrc.length ||\n isMatched(res, options.limitSrc, options.caseSensitive)) { break; }\n if (options.limitMessage) {\n limitMessage = replacePlaceholder(options.limitMessage, _getPhContent);\n }\n }\n\n addDisplay((limitMessage ? limitMessage + '\\n' : '') +\n replacePlaceholder(options.displaySrc + '', _getPhContent));\n }\n return toBool(res, options);\n}\n\n// for dev\nexports._DBG_set_useExt = function(val) { _DBG_useExt = val; };\nexports._DBG_set_checkOptions = function(val) { _DBG_checkOptions = val; };\nexports._DBG_set_checkMethod = function(val) { _DBG_checkMethod = val; };\nexports._DBG_clearHistory = function() { lastInput = ''; inputHistory = []; };\n\n// ------------------------------------\n\nexports.setDefaultOptions = function(options) {\n defaultOptions = margeOptions(true, options);\n return margeOptions(true); // copy\n};\n\nexports.question = function(query, options) {\n /* eslint-disable key-spacing */\n return getValidLine(margeOptions(margeOptions(true, options), {\n display: query\n }));\n /* eslint-enable key-spacing */\n};\n\nexports.prompt = function(options) {\n var readOptions = margeOptions(true, options);\n readOptions.display = readOptions.prompt;\n return getValidLine(readOptions);\n};\n\nexports.keyIn = function(query, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions(margeOptions(true, options), {\n display: query,\n keyIn: true,\n keepWhitespace: true\n });\n /* eslint-enable key-spacing */\n\n // char list\n readOptions.limitSrc = readOptions.limit.filter(function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number';\n })\n .map(function(text) { return replacePlaceholder(text + '', getPhCharlist); });\n // pattern\n readOptions.limit = escapePattern(readOptions.limitSrc.join(''));\n\n ['trueValue', 'falseValue'].forEach(function(optionName) {\n readOptions[optionName] = readOptions[optionName].reduce(function(comps, comp) {\n var type = typeof comp;\n if (type === 'string' || type === 'number') {\n comps = comps.concat((comp + '').split(''));\n } else { comps.push(comp); }\n return comps;\n }, []);\n });\n\n readOptions.display = replacePlaceholder(readOptions.display + '',\n function(param) { return getPhContent(param, readOptions); });\n\n return toBool(_readlineSync(readOptions), readOptions);\n};\n\n// ------------------------------------\n\nexports.questionEMail = function(query, options) {\n if (query == null) { query = 'Input e-mail address: '; }\n /* eslint-disable key-spacing */\n return exports.question(query, margeOptions({\n // -------- default\n hideEchoBack: false,\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address\n limit: /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,\n limitMessage: 'Input valid e-mail address, please.',\n trueValue: null,\n falseValue: null\n }, options, {\n // -------- forced\n keepWhitespace: false,\n cd: false\n }));\n /* eslint-enable key-spacing */\n};\n\nexports.questionNewPassword = function(query, options) {\n /* eslint-disable key-spacing */\n var resCharlist, min, max,\n readOptions = margeOptions({\n // -------- default\n hideEchoBack: true,\n mask: '*',\n limitMessage: 'It can include: $\\n' +\n 'And the length must be: $',\n trueValue: null,\n falseValue: null,\n caseSensitive: true\n }, options, {\n // -------- forced\n history: false,\n cd: false,\n // limit (by charlist etc.),\n phContent: function(param) {\n return param === 'charlist' ? resCharlist.text :\n param === 'length' ? min + '...' + max : null;\n }\n }),\n // added: charlist, min, max, confirmMessage, unmatchMessage\n charlist, confirmMessage, unmatchMessage,\n limit, limitMessage, res1, res2;\n /* eslint-enable key-spacing */\n options = options || {};\n\n charlist = replacePlaceholder(\n options.charlist ? options.charlist + '' : '$', getPhCharlist);\n if (isNaN(min = parseInt(options.min, 10)) || typeof min !== 'number') { min = 12; }\n if (isNaN(max = parseInt(options.max, 10)) || typeof max !== 'number') { max = 24; }\n limit = new RegExp('^[' + escapePattern(charlist) +\n ']{' + min + ',' + max + '}$');\n resCharlist = array2charlist([charlist], readOptions.caseSensitive, true);\n resCharlist.text = joinChunks(resCharlist.values, resCharlist.suppressed);\n\n confirmMessage = options.confirmMessage != null ? options.confirmMessage :\n 'Reinput a same one to confirm it: ';\n unmatchMessage = options.unmatchMessage != null ? options.unmatchMessage :\n 'It differs from first one.' +\n ' Hit only the Enter key if you want to retry from first one.';\n\n if (query == null) { query = 'Input new password: '; }\n\n limitMessage = readOptions.limitMessage;\n while (!res2) {\n readOptions.limit = limit;\n readOptions.limitMessage = limitMessage;\n res1 = exports.question(query, readOptions);\n\n readOptions.limit = [res1, ''];\n readOptions.limitMessage = unmatchMessage;\n res2 = exports.question(confirmMessage, readOptions);\n }\n\n return res1;\n};\n\nfunction _questionNum(query, options, parser) {\n var validValue;\n function getValidValue(value) {\n validValue = parser(value);\n return !isNaN(validValue) && typeof validValue === 'number';\n }\n /* eslint-disable key-spacing */\n exports.question(query, margeOptions({\n // -------- default\n limitMessage: 'Input valid number, please.'\n }, options, {\n // -------- forced\n limit: getValidValue,\n cd: false\n // trueValue, falseValue, caseSensitive, keepWhitespace don't work.\n }));\n /* eslint-enable key-spacing */\n return validValue;\n}\nexports.questionInt = function(query, options) {\n return _questionNum(query, options, function(value) { return parseInt(value, 10); });\n};\nexports.questionFloat = function(query, options) {\n return _questionNum(query, options, parseFloat);\n};\n\nexports.questionPath = function(query, options) {\n /* eslint-disable key-spacing */\n var validPath, error = '',\n readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: '$Input valid path, please.' +\n '$<( Min:)min>$<( Max:)max>',\n history: true,\n cd: true\n }, options, {\n // -------- forced\n keepWhitespace: false,\n limit: function(value) {\n var exists, stat, res;\n value = replaceHomePath(value, true);\n error = ''; // for validate\n // mkdir -p\n function mkdirParents(dirPath) {\n dirPath.split(/\\/|\\\\/).reduce(function(parents, dir) {\n var path = pathUtil.resolve((parents += dir + pathUtil.sep));\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path);\n } else if (!fs.statSync(path).isDirectory()) {\n throw new Error('Non directory already exists: ' + path);\n }\n return parents;\n }, '');\n }\n\n try {\n exists = fs.existsSync(value);\n validPath = exists ? fs.realpathSync(value) : pathUtil.resolve(value);\n // options.exists default: true, not-bool: no-check\n if (!options.hasOwnProperty('exists') && !exists ||\n typeof options.exists === 'boolean' && options.exists !== exists) {\n error = (exists ? 'Already exists' : 'No such file or directory') +\n ': ' + validPath;\n return false;\n }\n if (!exists && options.create) {\n if (options.isDirectory) {\n mkdirParents(validPath);\n } else {\n mkdirParents(pathUtil.dirname(validPath));\n fs.closeSync(fs.openSync(validPath, 'w')); // touch\n }\n validPath = fs.realpathSync(validPath);\n }\n if (exists && (options.min || options.max ||\n options.isFile || options.isDirectory)) {\n stat = fs.statSync(validPath);\n // type check first (directory has zero size)\n if (options.isFile && !stat.isFile()) {\n error = 'Not file: ' + validPath;\n return false;\n } else if (options.isDirectory && !stat.isDirectory()) {\n error = 'Not directory: ' + validPath;\n return false;\n } else if (options.min && stat.size < +options.min ||\n options.max && stat.size > +options.max) {\n error = 'Size ' + stat.size + ' is out of range: ' + validPath;\n return false;\n }\n }\n if (typeof options.validate === 'function' &&\n (res = options.validate(validPath)) !== true) {\n if (typeof res === 'string') { error = res; }\n return false;\n }\n } catch (e) {\n error = e + '';\n return false;\n }\n return true;\n },\n // trueValue, falseValue, caseSensitive don't work.\n phContent: function(param) {\n return param === 'error' ? error :\n param !== 'min' && param !== 'max' ? null :\n options.hasOwnProperty(param) ? options[param] + '' : '';\n }\n });\n // added: exists, create, min, max, isFile, isDirectory, validate\n /* eslint-enable key-spacing */\n options = options || {};\n\n if (query == null) { query = 'Input path (you can \"cd\" and \"pwd\"): '; }\n\n exports.question(query, readOptions);\n return validPath;\n};\n\n// props: preCheck, args, hRes, limit\nfunction getClHandler(commandHandler, options) {\n var clHandler = {}, hIndex = {};\n if (typeof commandHandler === 'object') {\n Object.keys(commandHandler).forEach(function(cmd) {\n if (typeof commandHandler[cmd] === 'function') {\n hIndex[options.caseSensitive ? cmd : cmd.toLowerCase()] = commandHandler[cmd];\n }\n });\n clHandler.preCheck = function(res) {\n var cmdKey;\n clHandler.args = parseCl(res);\n cmdKey = clHandler.args[0] || '';\n if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n clHandler.hRes =\n cmdKey !== '_' && hIndex.hasOwnProperty(cmdKey) ?\n hIndex[cmdKey].apply(res, clHandler.args.slice(1)) :\n hIndex.hasOwnProperty('_') ? hIndex._.apply(res, clHandler.args) : null;\n return {res: res, forceNext: false};\n };\n if (!hIndex.hasOwnProperty('_')) {\n clHandler.limit = function() { // It's called after preCheck.\n var cmdKey = clHandler.args[0] || '';\n if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n return hIndex.hasOwnProperty(cmdKey);\n };\n }\n } else {\n clHandler.preCheck = function(res) {\n clHandler.args = parseCl(res);\n clHandler.hRes = typeof commandHandler === 'function' ?\n commandHandler.apply(res, clHandler.args) : true; // true for break loop\n return {res: res, forceNext: false};\n };\n }\n return clHandler;\n}\n\nexports.promptCL = function(commandHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: 'Requested command is not available.',\n caseSensitive: false,\n history: true\n }, options),\n // -------- forced\n // trueValue, falseValue, keepWhitespace don't work.\n // preCheck, limit (by clHandler)\n clHandler = getClHandler(commandHandler, readOptions);\n /* eslint-enable key-spacing */\n readOptions.limit = clHandler.limit;\n readOptions.preCheck = clHandler.preCheck;\n exports.prompt(readOptions);\n return clHandler.args;\n};\n\nexports.promptLoop = function(inputHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n trueValue: null,\n falseValue: null,\n caseSensitive: false,\n history: true\n }, options);\n /* eslint-enable key-spacing */\n while (true) { if (inputHandler(exports.prompt(readOptions))) { break; } }\n return;\n};\n\nexports.promptCLLoop = function(commandHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: 'Requested command is not available.',\n caseSensitive: false,\n history: true\n }, options),\n // -------- forced\n // trueValue, falseValue, keepWhitespace don't work.\n // preCheck, limit (by clHandler)\n clHandler = getClHandler(commandHandler, readOptions);\n /* eslint-enable key-spacing */\n readOptions.limit = clHandler.limit;\n readOptions.preCheck = clHandler.preCheck;\n while (true) {\n exports.prompt(readOptions);\n if (clHandler.hRes) { break; }\n }\n return;\n};\n\nexports.promptSimShell = function(options) {\n /* eslint-disable key-spacing */\n return exports.prompt(margeOptions({\n // -------- default\n hideEchoBack: false,\n history: true\n }, options, {\n // -------- forced\n prompt: (function() {\n return IS_WIN ?\n '$>' :\n // 'user@host:cwd$ '\n (process.env.USER || '') +\n (process.env.HOSTNAME ?\n '@' + process.env.HOSTNAME.replace(/\\..*$/, '') : '') +\n ':$$ ';\n })()\n }));\n /* eslint-enable key-spacing */\n};\n\nfunction _keyInYN(query, options, limit) {\n var res;\n if (query == null) { query = 'Are you sure? '; }\n if ((!options || options.guide !== false) && (query += '')) {\n query = query.replace(/\\s*:?\\s*$/, '') + ' [y/n]: ';\n }\n /* eslint-disable key-spacing */\n res = exports.keyIn(query, margeOptions(options, {\n // -------- forced\n hideEchoBack: false,\n limit: limit,\n trueValue: 'y',\n falseValue: 'n',\n caseSensitive: false\n // mask doesn't work.\n }));\n // added: guide\n /* eslint-enable key-spacing */\n return typeof res === 'boolean' ? res : '';\n}\nexports.keyInYN = function(query, options) { return _keyInYN(query, options); };\nexports.keyInYNStrict = function(query, options) { return _keyInYN(query, options, 'yn'); };\n\nexports.keyInPause = function(query, options) {\n if (query == null) { query = 'Continue...'; }\n if ((!options || options.guide !== false) && (query += '')) {\n query = query.replace(/\\s+$/, '') + ' (Hit any key)';\n }\n /* eslint-disable key-spacing */\n exports.keyIn(query, margeOptions({\n // -------- default\n limit: null\n }, options, {\n // -------- forced\n hideEchoBack: true,\n mask: ''\n }));\n // added: guide\n /* eslint-enable key-spacing */\n return;\n};\n\nexports.keyInSelect = function(items, query, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false\n }, options, {\n // -------- forced\n trueValue: null,\n falseValue: null,\n caseSensitive: false,\n // limit (by items),\n phContent: function(param) {\n return param === 'itemsCount' ? items.length + '' :\n param === 'firstItem' ? (items[0] + '').trim() :\n param === 'lastItem' ? (items[items.length - 1] + '').trim() : null;\n }\n }),\n // added: guide, cancel\n keylist = '', key2i = {}, charCode = 49 /* '1' */, display = '\\n';\n /* eslint-enable key-spacing */\n if (!Array.isArray(items) || !items.length || items.length > 35) {\n throw '`items` must be Array (max length: 35).';\n }\n\n items.forEach(function(item, i) {\n var key = String.fromCharCode(charCode);\n keylist += key;\n key2i[key] = i;\n display += '[' + key + '] ' + (item + '').trim() + '\\n';\n charCode = charCode === 57 /* '9' */ ? 97 /* 'a' */ : charCode + 1;\n });\n if (!options || options.cancel !== false) {\n keylist += '0';\n key2i['0'] = -1;\n display += '[0] ' +\n (options && options.cancel != null && typeof options.cancel !== 'boolean' ?\n (options.cancel + '').trim() : 'CANCEL') + '\\n';\n }\n readOptions.limit = keylist;\n display += '\\n';\n\n if (query == null) { query = 'Choose one from list: '; }\n if ((query += '')) {\n if (!options || options.guide !== false) {\n query = query.replace(/\\s*:?\\s*$/, '') + ' [$]: ';\n }\n display += query;\n }\n\n return key2i[exports.keyIn(display, readOptions).toLowerCase()];\n};\n\nexports.getRawInput = function() { return rawInput; };\n\n// ======== DEPRECATED ========\nfunction _setOption(optionName, args) {\n var options;\n if (args.length) { options = {}; options[optionName] = args[0]; }\n return exports.setDefaultOptions(options)[optionName];\n}\nexports.setPrint = function() { return _setOption('print', arguments); };\nexports.setPrompt = function() { return _setOption('prompt', arguments); };\nexports.setEncoding = function() { return _setOption('encoding', arguments); };\nexports.setMask = function() { return _setOption('mask', arguments); };\nexports.setBufferSize = function() { return _setOption('bufferSize', arguments); };\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\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\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\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'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var SvgPanZoom = require(\"./svg-pan-zoom.js\");\n\nmodule.exports = SvgPanZoom;\n","var SvgUtils = require(\"./svg-utilities\");\n\nmodule.exports = {\n enable: function(instance) {\n // Select (and create if necessary) defs\n var defs = instance.svg.querySelector(\"defs\");\n if (!defs) {\n defs = document.createElementNS(SvgUtils.svgNS, \"defs\");\n instance.svg.appendChild(defs);\n }\n\n // Check for style element, and create it if it doesn't exist\n var styleEl = defs.querySelector(\"style#svg-pan-zoom-controls-styles\");\n if (!styleEl) {\n var style = document.createElementNS(SvgUtils.svgNS, \"style\");\n style.setAttribute(\"id\", \"svg-pan-zoom-controls-styles\");\n style.setAttribute(\"type\", \"text/css\");\n style.textContent =\n \".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }\";\n defs.appendChild(style);\n }\n\n // Zoom Group\n var zoomGroup = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomGroup.setAttribute(\"id\", \"svg-pan-zoom-controls\");\n zoomGroup.setAttribute(\n \"transform\",\n \"translate(\" +\n (instance.width - 70) +\n \" \" +\n (instance.height - 76) +\n \") scale(0.75)\"\n );\n zoomGroup.setAttribute(\"class\", \"svg-pan-zoom-control\");\n\n // Control elements\n zoomGroup.appendChild(this._createZoomIn(instance));\n zoomGroup.appendChild(this._createZoomReset(instance));\n zoomGroup.appendChild(this._createZoomOut(instance));\n\n // Finally append created element\n instance.svg.appendChild(zoomGroup);\n\n // Cache control instance\n instance.controlIcons = zoomGroup;\n },\n\n _createZoomIn: function(instance) {\n var zoomIn = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomIn.setAttribute(\"id\", \"svg-pan-zoom-zoom-in\");\n zoomIn.setAttribute(\"transform\", \"translate(30.5 5) scale(0.015)\");\n zoomIn.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomIn.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n zoomIn.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n\n var zoomInBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomInBackground.setAttribute(\"x\", \"0\");\n zoomInBackground.setAttribute(\"y\", \"0\");\n zoomInBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomInBackground.setAttribute(\"height\", \"1400\");\n zoomInBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomIn.appendChild(zoomInBackground);\n\n var zoomInShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomInShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\"\n );\n zoomInShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomIn.appendChild(zoomInShape);\n\n return zoomIn;\n },\n\n _createZoomReset: function(instance) {\n // reset\n var resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, \"g\");\n resetPanZoomControl.setAttribute(\"id\", \"svg-pan-zoom-reset-pan-zoom\");\n resetPanZoomControl.setAttribute(\"transform\", \"translate(5 35) scale(0.4)\");\n resetPanZoomControl.setAttribute(\"class\", \"svg-pan-zoom-control\");\n resetPanZoomControl.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n resetPanZoomControl.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n\n var resetPanZoomControlBackground = document.createElementNS(\n SvgUtils.svgNS,\n \"rect\"\n ); // TODO change these background space fillers to rounded rectangles so they look prettier\n resetPanZoomControlBackground.setAttribute(\"x\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"y\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"width\", \"182\"); // larger than expected because the whole group is transformed to scale down\n resetPanZoomControlBackground.setAttribute(\"height\", \"58\");\n resetPanZoomControlBackground.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-background\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlBackground);\n\n var resetPanZoomControlShape1 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"d\",\n \"M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape1);\n\n var resetPanZoomControlShape2 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"d\",\n \"M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape2);\n\n return resetPanZoomControl;\n },\n\n _createZoomOut: function(instance) {\n // zoom out\n var zoomOut = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomOut.setAttribute(\"id\", \"svg-pan-zoom-zoom-out\");\n zoomOut.setAttribute(\"transform\", \"translate(30.5 70) scale(0.015)\");\n zoomOut.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomOut.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n zoomOut.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n\n var zoomOutBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomOutBackground.setAttribute(\"x\", \"0\");\n zoomOutBackground.setAttribute(\"y\", \"0\");\n zoomOutBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomOutBackground.setAttribute(\"height\", \"1400\");\n zoomOutBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomOut.appendChild(zoomOutBackground);\n\n var zoomOutShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomOutShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z\"\n );\n zoomOutShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomOut.appendChild(zoomOutShape);\n\n return zoomOut;\n },\n\n disable: function(instance) {\n if (instance.controlIcons) {\n instance.controlIcons.parentNode.removeChild(instance.controlIcons);\n instance.controlIcons = null;\n }\n }\n};\n","var SvgUtils = require(\"./svg-utilities\"),\n Utils = require(\"./utilities\");\n\nvar ShadowViewport = function(viewport, options) {\n this.init(viewport, options);\n};\n\n/**\n * Initialization\n *\n * @param {SVGElement} viewport\n * @param {Object} options\n */\nShadowViewport.prototype.init = function(viewport, options) {\n // DOM Elements\n this.viewport = viewport;\n this.options = options;\n\n // State cache\n this.originalState = { zoom: 1, x: 0, y: 0 };\n this.activeState = { zoom: 1, x: 0, y: 0 };\n\n this.updateCTMCached = Utils.proxy(this.updateCTM, this);\n\n // Create a custom requestAnimationFrame taking in account refreshRate\n this.requestAnimationFrame = Utils.createRequestAnimationFrame(\n this.options.refreshRate\n );\n\n // ViewBox\n this.viewBox = { x: 0, y: 0, width: 0, height: 0 };\n this.cacheViewBox();\n\n // Process CTM\n var newCTM = this.processCTM();\n\n // Update viewport CTM and cache zoom and pan\n this.setCTM(newCTM);\n\n // Update CTM in this frame\n this.updateCTM();\n};\n\n/**\n * Cache initial viewBox value\n * If no viewBox is defined, then use viewport size/position instead for viewBox values\n */\nShadowViewport.prototype.cacheViewBox = function() {\n var svgViewBox = this.options.svg.getAttribute(\"viewBox\");\n\n if (svgViewBox) {\n var viewBoxValues = svgViewBox\n .split(/[\\s\\,]/)\n .filter(function(v) {\n return v;\n })\n .map(parseFloat);\n\n // Cache viewbox x and y offset\n this.viewBox.x = viewBoxValues[0];\n this.viewBox.y = viewBoxValues[1];\n this.viewBox.width = viewBoxValues[2];\n this.viewBox.height = viewBoxValues[3];\n\n var zoom = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n\n // Update active state\n this.activeState.zoom = zoom;\n this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2;\n this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2;\n\n // Force updating CTM\n this.updateCTMOnNextFrame();\n\n this.options.svg.removeAttribute(\"viewBox\");\n } else {\n this.simpleViewBoxCache();\n }\n};\n\n/**\n * Recalculate viewport sizes and update viewBox cache\n */\nShadowViewport.prototype.simpleViewBoxCache = function() {\n var bBox = this.viewport.getBBox();\n\n this.viewBox.x = bBox.x;\n this.viewBox.y = bBox.y;\n this.viewBox.width = bBox.width;\n this.viewBox.height = bBox.height;\n};\n\n/**\n * Returns a viewbox object. Safe to alter\n *\n * @return {Object} viewbox object\n */\nShadowViewport.prototype.getViewBox = function() {\n return Utils.extend({}, this.viewBox);\n};\n\n/**\n * Get initial zoom and pan values. Save them into originalState\n * Parses viewBox attribute to alter initial sizes\n *\n * @return {CTM} CTM object based on options\n */\nShadowViewport.prototype.processCTM = function() {\n var newCTM = this.getCTM();\n\n if (this.options.fit || this.options.contain) {\n var newScale;\n if (this.options.fit) {\n newScale = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n } else {\n newScale = Math.max(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n }\n\n newCTM.a = newScale; //x-scale\n newCTM.d = newScale; //y-scale\n newCTM.e = -this.viewBox.x * newScale; //x-transform\n newCTM.f = -this.viewBox.y * newScale; //y-transform\n }\n\n if (this.options.center) {\n var offsetX =\n (this.options.width -\n (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) *\n 0.5,\n offsetY =\n (this.options.height -\n (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) *\n 0.5;\n\n newCTM.e = offsetX;\n newCTM.f = offsetY;\n }\n\n // Cache initial values. Based on activeState and fix+center opitons\n this.originalState.zoom = newCTM.a;\n this.originalState.x = newCTM.e;\n this.originalState.y = newCTM.f;\n\n return newCTM;\n};\n\n/**\n * Return originalState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getOriginalState = function() {\n return Utils.extend({}, this.originalState);\n};\n\n/**\n * Return actualState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getState = function() {\n return Utils.extend({}, this.activeState);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getZoom = function() {\n return this.activeState.zoom;\n};\n\n/**\n * Get zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getRelativeZoom = function() {\n return this.activeState.zoom / this.originalState.zoom;\n};\n\n/**\n * Compute zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.computeRelativeZoom = function(scale) {\n return scale / this.originalState.zoom;\n};\n\n/**\n * Get pan\n *\n * @return {Object}\n */\nShadowViewport.prototype.getPan = function() {\n return { x: this.activeState.x, y: this.activeState.y };\n};\n\n/**\n * Return cached viewport CTM value that can be safely modified\n *\n * @return {SVGMatrix}\n */\nShadowViewport.prototype.getCTM = function() {\n var safeCTM = this.options.svg.createSVGMatrix();\n\n // Copy values manually as in FF they are not itterable\n safeCTM.a = this.activeState.zoom;\n safeCTM.b = 0;\n safeCTM.c = 0;\n safeCTM.d = this.activeState.zoom;\n safeCTM.e = this.activeState.x;\n safeCTM.f = this.activeState.y;\n\n return safeCTM;\n};\n\n/**\n * Set a new CTM\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.setCTM = function(newCTM) {\n var willZoom = this.isZoomDifferent(newCTM),\n willPan = this.isPanDifferent(newCTM);\n\n if (willZoom || willPan) {\n // Before zoom\n if (willZoom) {\n // If returns false then cancel zooming\n if (\n this.options.beforeZoom(\n this.getRelativeZoom(),\n this.computeRelativeZoom(newCTM.a)\n ) === false\n ) {\n newCTM.a = newCTM.d = this.activeState.zoom;\n willZoom = false;\n } else {\n this.updateCache(newCTM);\n this.options.onZoom(this.getRelativeZoom());\n }\n }\n\n // Before pan\n if (willPan) {\n var preventPan = this.options.beforePan(this.getPan(), {\n x: newCTM.e,\n y: newCTM.f\n }),\n // If prevent pan is an object\n preventPanX = false,\n preventPanY = false;\n\n // If prevent pan is Boolean false\n if (preventPan === false) {\n // Set x and y same as before\n newCTM.e = this.getPan().x;\n newCTM.f = this.getPan().y;\n\n preventPanX = preventPanY = true;\n } else if (Utils.isObject(preventPan)) {\n // Check for X axes attribute\n if (preventPan.x === false) {\n // Prevent panning on x axes\n newCTM.e = this.getPan().x;\n preventPanX = true;\n } else if (Utils.isNumber(preventPan.x)) {\n // Set a custom pan value\n newCTM.e = preventPan.x;\n }\n\n // Check for Y axes attribute\n if (preventPan.y === false) {\n // Prevent panning on x axes\n newCTM.f = this.getPan().y;\n preventPanY = true;\n } else if (Utils.isNumber(preventPan.y)) {\n // Set a custom pan value\n newCTM.f = preventPan.y;\n }\n }\n\n // Update willPan flag\n // Check if newCTM is still different\n if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) {\n willPan = false;\n } else {\n this.updateCache(newCTM);\n this.options.onPan(this.getPan());\n }\n }\n\n // Check again if should zoom or pan\n if (willZoom || willPan) {\n this.updateCTMOnNextFrame();\n }\n }\n};\n\nShadowViewport.prototype.isZoomDifferent = function(newCTM) {\n return this.activeState.zoom !== newCTM.a;\n};\n\nShadowViewport.prototype.isPanDifferent = function(newCTM) {\n return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f;\n};\n\n/**\n * Update cached CTM and active state\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.updateCache = function(newCTM) {\n this.activeState.zoom = newCTM.a;\n this.activeState.x = newCTM.e;\n this.activeState.y = newCTM.f;\n};\n\nShadowViewport.prototype.pendingUpdate = false;\n\n/**\n * Place a request to update CTM on next Frame\n */\nShadowViewport.prototype.updateCTMOnNextFrame = function() {\n if (!this.pendingUpdate) {\n // Lock\n this.pendingUpdate = true;\n\n // Throttle next update\n this.requestAnimationFrame.call(window, this.updateCTMCached);\n }\n};\n\n/**\n * Update viewport CTM with cached CTM\n */\nShadowViewport.prototype.updateCTM = function() {\n var ctm = this.getCTM();\n\n // Updates SVG element\n SvgUtils.setCTM(this.viewport, ctm, this.defs);\n\n // Free the lock\n this.pendingUpdate = false;\n\n // Notify about the update\n if (this.options.onUpdatedCTM) {\n this.options.onUpdatedCTM(ctm);\n }\n};\n\nmodule.exports = function(viewport, options) {\n return new ShadowViewport(viewport, options);\n};\n","var Wheel = require(\"./uniwheel\"),\n ControlIcons = require(\"./control-icons\"),\n Utils = require(\"./utilities\"),\n SvgUtils = require(\"./svg-utilities\"),\n ShadowViewport = require(\"./shadow-viewport\");\n\nvar SvgPanZoom = function(svg, options) {\n this.init(svg, options);\n};\n\nvar optionsDefaults = {\n viewportSelector: \".svg-pan-zoom_viewport\", // Viewport selector. Can be querySelector string or SVGElement\n panEnabled: true, // enable or disable panning (default enabled)\n controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled)\n zoomEnabled: true, // enable or disable zooming (default enabled)\n dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled)\n mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled)\n preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events\n zoomScaleSensitivity: 0.1, // Zoom sensitivity\n minZoom: 0.5, // Minimum Zoom level\n maxZoom: 10, // Maximum Zoom level\n fit: true, // enable or disable viewport fit in SVG (default true)\n contain: false, // enable or disable viewport contain the svg (default false)\n center: true, // enable or disable viewport centering in SVG (default true)\n refreshRate: \"auto\", // Maximum number of frames per second (altering SVG's viewport)\n beforeZoom: null,\n onZoom: null,\n beforePan: null,\n onPan: null,\n customEventsHandler: null,\n eventsListenerElement: null,\n onUpdatedCTM: null\n};\n\nvar passiveListenerOption = { passive: true };\n\nSvgPanZoom.prototype.init = function(svg, options) {\n var that = this;\n\n this.svg = svg;\n this.defs = svg.querySelector(\"defs\");\n\n // Add default attributes to SVG\n SvgUtils.setupSvgAttributes(this.svg);\n\n // Set options\n this.options = Utils.extend(Utils.extend({}, optionsDefaults), options);\n\n // Set default state\n this.state = \"none\";\n\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Init shadow viewport\n this.viewport = ShadowViewport(\n SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector),\n {\n svg: this.svg,\n width: this.width,\n height: this.height,\n fit: this.options.fit,\n contain: this.options.contain,\n center: this.options.center,\n refreshRate: this.options.refreshRate,\n // Put callbacks into functions as they can change through time\n beforeZoom: function(oldScale, newScale) {\n if (that.viewport && that.options.beforeZoom) {\n return that.options.beforeZoom(oldScale, newScale);\n }\n },\n onZoom: function(scale) {\n if (that.viewport && that.options.onZoom) {\n return that.options.onZoom(scale);\n }\n },\n beforePan: function(oldPoint, newPoint) {\n if (that.viewport && that.options.beforePan) {\n return that.options.beforePan(oldPoint, newPoint);\n }\n },\n onPan: function(point) {\n if (that.viewport && that.options.onPan) {\n return that.options.onPan(point);\n }\n },\n onUpdatedCTM: function(ctm) {\n if (that.viewport && that.options.onUpdatedCTM) {\n return that.options.onUpdatedCTM(ctm);\n }\n }\n }\n );\n\n // Wrap callbacks into public API context\n var publicInstance = this.getPublicInstance();\n publicInstance.setBeforeZoom(this.options.beforeZoom);\n publicInstance.setOnZoom(this.options.onZoom);\n publicInstance.setBeforePan(this.options.beforePan);\n publicInstance.setOnPan(this.options.onPan);\n publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM);\n\n if (this.options.controlIconsEnabled) {\n ControlIcons.enable(this);\n }\n\n // Init events handlers\n this.lastMouseWheelEventTime = Date.now();\n this.setupHandlers();\n};\n\n/**\n * Register event handlers\n */\nSvgPanZoom.prototype.setupHandlers = function() {\n var that = this,\n prevEvt = null; // use for touchstart event to detect double tap\n\n this.eventListeners = {\n // Mouse down group\n mousedown: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n touchstart: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n\n // Mouse up group\n mouseup: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchend: function(evt) {\n return that.handleMouseUp(evt);\n },\n\n // Mouse move group\n mousemove: function(evt) {\n return that.handleMouseMove(evt);\n },\n touchmove: function(evt) {\n return that.handleMouseMove(evt);\n },\n\n // Mouse leave group\n mouseleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchcancel: function(evt) {\n return that.handleMouseUp(evt);\n }\n };\n\n // Init custom events handler if available\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.init({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n\n // Custom event handler may halt builtin listeners\n var haltEventListeners = this.options.customEventsHandler\n .haltEventListeners;\n if (haltEventListeners && haltEventListeners.length) {\n for (var i = haltEventListeners.length - 1; i >= 0; i--) {\n if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) {\n delete this.eventListeners[haltEventListeners[i]];\n }\n }\n }\n }\n\n // Bind eventListeners\n for (var event in this.eventListeners) {\n // Attach event to eventsListenerElement or SVG if not available\n (this.options.eventsListenerElement || this.svg).addEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Zoom using mouse wheel\n if (this.options.mouseWheelZoomEnabled) {\n this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true\n this.enableMouseWheelZoom();\n }\n};\n\n/**\n * Enable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.enableMouseWheelZoom = function() {\n if (!this.options.mouseWheelZoomEnabled) {\n var that = this;\n\n // Mouse wheel listener\n this.wheelListener = function(evt) {\n return that.handleMouseWheel(evt);\n };\n\n // Bind wheelListener\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.on(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n\n this.options.mouseWheelZoomEnabled = true;\n }\n};\n\n/**\n * Disable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.disableMouseWheelZoom = function() {\n if (this.options.mouseWheelZoomEnabled) {\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.off(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n this.options.mouseWheelZoomEnabled = false;\n }\n};\n\n/**\n * Handle mouse wheel event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseWheel = function(evt) {\n if (!this.options.zoomEnabled || this.state !== \"none\") {\n return;\n }\n\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Default delta in case that deltaY is not available\n var delta = evt.deltaY || 1,\n timeDelta = Date.now() - this.lastMouseWheelEventTime,\n divider = 3 + Math.max(0, 30 - timeDelta);\n\n // Update cache\n this.lastMouseWheelEventTime = Date.now();\n\n // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0)\n if (\"deltaMode\" in evt && evt.deltaMode === 0 && evt.wheelDelta) {\n delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY;\n }\n\n delta =\n -0.3 < delta && delta < 0.3\n ? delta\n : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider;\n\n var inversedScreenCTM = this.svg.getScreenCTM().inverse(),\n relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n inversedScreenCTM\n ),\n zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior\n\n this.zoomAtPoint(zoom, relativeMousePoint);\n};\n\n/**\n * Zoom in at a SVG point\n *\n * @param {SVGPoint} point\n * @param {Float} zoomScale Number representing how much to zoom\n * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value.\n * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%)\n */\nSvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) {\n var originalState = this.viewport.getOriginalState();\n\n if (!zoomAbsolute) {\n // Fit zoomScale in set bounds\n if (\n this.getZoom() * zoomScale <\n this.options.minZoom * originalState.zoom\n ) {\n zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom();\n } else if (\n this.getZoom() * zoomScale >\n this.options.maxZoom * originalState.zoom\n ) {\n zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom();\n }\n } else {\n // Fit zoomScale in set bounds\n zoomScale = Math.max(\n this.options.minZoom * originalState.zoom,\n Math.min(this.options.maxZoom * originalState.zoom, zoomScale)\n );\n // Find relative scale to achieve desired scale\n zoomScale = zoomScale / this.getZoom();\n }\n\n var oldCTM = this.viewport.getCTM(),\n relativePoint = point.matrixTransform(oldCTM.inverse()),\n modifier = this.svg\n .createSVGMatrix()\n .translate(relativePoint.x, relativePoint.y)\n .scale(zoomScale)\n .translate(-relativePoint.x, -relativePoint.y),\n newCTM = oldCTM.multiply(modifier);\n\n if (newCTM.a !== oldCTM.a) {\n this.viewport.setCTM(newCTM);\n }\n};\n\n/**\n * Zoom at center point\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.zoom = function(scale, absolute) {\n this.zoomAtPoint(\n scale,\n SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height),\n absolute\n );\n};\n\n/**\n * Zoom used by public instance\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoom = function(scale, absolute) {\n if (absolute) {\n scale = this.computeFromRelativeZoom(scale);\n }\n\n this.zoom(scale, absolute);\n};\n\n/**\n * Zoom at point used by public instance\n *\n * @param {Float} scale\n * @param {SVGPoint|Object} point An object that has x and y attributes\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) {\n if (absolute) {\n // Transform zoom into a relative value\n scale = this.computeFromRelativeZoom(scale);\n }\n\n // If not a SVGPoint but has x and y then create a SVGPoint\n if (Utils.getType(point) !== \"SVGPoint\") {\n if (\"x\" in point && \"y\" in point) {\n point = SvgUtils.createSVGPoint(this.svg, point.x, point.y);\n } else {\n throw new Error(\"Given point is invalid\");\n }\n }\n\n this.zoomAtPoint(scale, point, absolute);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getZoom = function() {\n return this.viewport.getZoom();\n};\n\n/**\n * Get zoom scale for public usage\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getRelativeZoom = function() {\n return this.viewport.getRelativeZoom();\n};\n\n/**\n * Compute actual zoom from public zoom\n *\n * @param {Float} zoom\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) {\n return zoom * this.viewport.getOriginalState().zoom;\n};\n\n/**\n * Set zoom to initial state\n */\nSvgPanZoom.prototype.resetZoom = function() {\n var originalState = this.viewport.getOriginalState();\n\n this.zoom(originalState.zoom, true);\n};\n\n/**\n * Set pan to initial state\n */\nSvgPanZoom.prototype.resetPan = function() {\n this.pan(this.viewport.getOriginalState());\n};\n\n/**\n * Set pan and zoom to initial state\n */\nSvgPanZoom.prototype.reset = function() {\n this.resetZoom();\n this.resetPan();\n};\n\n/**\n * Handle double click event\n * See handleMouseDown() for alternate detection method\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleDblClick = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Check if target was a control button\n if (this.options.controlIconsEnabled) {\n var targetClass = evt.target.getAttribute(\"class\") || \"\";\n if (targetClass.indexOf(\"svg-pan-zoom-control\") > -1) {\n return false;\n }\n }\n\n var zoomFactor;\n\n if (evt.shiftKey) {\n zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed\n } else {\n zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2;\n }\n\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.svg.getScreenCTM().inverse()\n );\n this.zoomAtPoint(zoomFactor, point);\n};\n\n/**\n * Handle click event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n Utils.mouseAndTouchNormalize(evt, this.svg);\n\n // Double click detection; more consistent than ondblclick\n if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) {\n this.handleDblClick(evt);\n } else {\n // Pan mode\n this.state = \"pan\";\n this.firstEventCTM = this.viewport.getCTM();\n this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n );\n }\n};\n\n/**\n * Handle mouse move event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseMove = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\" && this.options.panEnabled) {\n // Pan mode\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n ),\n viewportCTM = this.firstEventCTM.translate(\n point.x - this.stateOrigin.x,\n point.y - this.stateOrigin.y\n );\n\n this.viewport.setCTM(viewportCTM);\n }\n};\n\n/**\n * Handle mouse button release event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseUp = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\") {\n // Quit pan mode\n this.state = \"none\";\n }\n};\n\n/**\n * Adjust viewport size (only) so it will fit in SVG\n * Does not center image\n */\nSvgPanZoom.prototype.fit = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.min(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport size (only) so it will contain the SVG\n * Does not center image\n */\nSvgPanZoom.prototype.contain = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.max(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport pan (only) so it will be centered in SVG\n * Does not zoom/fit/contain image\n */\nSvgPanZoom.prototype.center = function() {\n var viewBox = this.viewport.getViewBox(),\n offsetX =\n (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5,\n offsetY =\n (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5;\n\n this.getPublicInstance().pan({ x: offsetX, y: offsetY });\n};\n\n/**\n * Update content cached BorderBox\n * Use when viewport contents change\n */\nSvgPanZoom.prototype.updateBBox = function() {\n this.viewport.simpleViewBoxCache();\n};\n\n/**\n * Pan to a rendered position\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.pan = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e = point.x;\n viewportCTM.f = point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Relatively pan the graph by a specified rendered position vector\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.panBy = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e += point.x;\n viewportCTM.f += point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Get pan vector\n *\n * @return {Object} {x: 0, y: 0}\n */\nSvgPanZoom.prototype.getPan = function() {\n var state = this.viewport.getState();\n\n return { x: state.x, y: state.y };\n};\n\n/**\n * Recalculates cached svg dimensions and controls position\n */\nSvgPanZoom.prototype.resize = function() {\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n this.svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Recalculate original state\n var viewport = this.viewport;\n viewport.options.width = this.width;\n viewport.options.height = this.height;\n viewport.processCTM();\n\n // Reposition control icons by re-enabling them\n if (this.options.controlIconsEnabled) {\n this.getPublicInstance().disableControlIcons();\n this.getPublicInstance().enableControlIcons();\n }\n};\n\n/**\n * Unbind mouse events, free callbacks and destroy public instance\n */\nSvgPanZoom.prototype.destroy = function() {\n var that = this;\n\n // Free callbacks\n this.beforeZoom = null;\n this.onZoom = null;\n this.beforePan = null;\n this.onPan = null;\n this.onUpdatedCTM = null;\n\n // Destroy custom event handlers\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.destroy({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n }\n\n // Unbind eventListeners\n for (var event in this.eventListeners) {\n (this.options.eventsListenerElement || this.svg).removeEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Unbind wheelListener\n this.disableMouseWheelZoom();\n\n // Remove control icons\n this.getPublicInstance().disableControlIcons();\n\n // Reset zoom and pan\n this.reset();\n\n // Remove instance from instancesStore\n instancesStore = instancesStore.filter(function(instance) {\n return instance.svg !== that.svg;\n });\n\n // Delete options and its contents\n delete this.options;\n\n // Delete viewport to make public shadow viewport functions uncallable\n delete this.viewport;\n\n // Destroy public instance and rewrite getPublicInstance\n delete this.publicInstance;\n delete this.pi;\n this.getPublicInstance = function() {\n return null;\n };\n};\n\n/**\n * Returns a public instance object\n *\n * @return {Object} Public instance object\n */\nSvgPanZoom.prototype.getPublicInstance = function() {\n var that = this;\n\n // Create cache\n if (!this.publicInstance) {\n this.publicInstance = this.pi = {\n // Pan\n enablePan: function() {\n that.options.panEnabled = true;\n return that.pi;\n },\n disablePan: function() {\n that.options.panEnabled = false;\n return that.pi;\n },\n isPanEnabled: function() {\n return !!that.options.panEnabled;\n },\n pan: function(point) {\n that.pan(point);\n return that.pi;\n },\n panBy: function(point) {\n that.panBy(point);\n return that.pi;\n },\n getPan: function() {\n return that.getPan();\n },\n // Pan event\n setBeforePan: function(fn) {\n that.options.beforePan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnPan: function(fn) {\n that.options.onPan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zoom and Control Icons\n enableZoom: function() {\n that.options.zoomEnabled = true;\n return that.pi;\n },\n disableZoom: function() {\n that.options.zoomEnabled = false;\n return that.pi;\n },\n isZoomEnabled: function() {\n return !!that.options.zoomEnabled;\n },\n enableControlIcons: function() {\n if (!that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = true;\n ControlIcons.enable(that);\n }\n return that.pi;\n },\n disableControlIcons: function() {\n if (that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = false;\n ControlIcons.disable(that);\n }\n return that.pi;\n },\n isControlIconsEnabled: function() {\n return !!that.options.controlIconsEnabled;\n },\n // Double click zoom\n enableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = true;\n return that.pi;\n },\n disableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = false;\n return that.pi;\n },\n isDblClickZoomEnabled: function() {\n return !!that.options.dblClickZoomEnabled;\n },\n // Mouse wheel zoom\n enableMouseWheelZoom: function() {\n that.enableMouseWheelZoom();\n return that.pi;\n },\n disableMouseWheelZoom: function() {\n that.disableMouseWheelZoom();\n return that.pi;\n },\n isMouseWheelZoomEnabled: function() {\n return !!that.options.mouseWheelZoomEnabled;\n },\n // Zoom scale and bounds\n setZoomScaleSensitivity: function(scale) {\n that.options.zoomScaleSensitivity = scale;\n return that.pi;\n },\n setMinZoom: function(zoom) {\n that.options.minZoom = zoom;\n return that.pi;\n },\n setMaxZoom: function(zoom) {\n that.options.maxZoom = zoom;\n return that.pi;\n },\n // Zoom event\n setBeforeZoom: function(fn) {\n that.options.beforeZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnZoom: function(fn) {\n that.options.onZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zooming\n zoom: function(scale) {\n that.publicZoom(scale, true);\n return that.pi;\n },\n zoomBy: function(scale) {\n that.publicZoom(scale, false);\n return that.pi;\n },\n zoomAtPoint: function(scale, point) {\n that.publicZoomAtPoint(scale, point, true);\n return that.pi;\n },\n zoomAtPointBy: function(scale, point) {\n that.publicZoomAtPoint(scale, point, false);\n return that.pi;\n },\n zoomIn: function() {\n this.zoomBy(1 + that.options.zoomScaleSensitivity);\n return that.pi;\n },\n zoomOut: function() {\n this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity));\n return that.pi;\n },\n getZoom: function() {\n return that.getRelativeZoom();\n },\n // CTM update\n setOnUpdatedCTM: function(fn) {\n that.options.onUpdatedCTM =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Reset\n resetZoom: function() {\n that.resetZoom();\n return that.pi;\n },\n resetPan: function() {\n that.resetPan();\n return that.pi;\n },\n reset: function() {\n that.reset();\n return that.pi;\n },\n // Fit, Contain and Center\n fit: function() {\n that.fit();\n return that.pi;\n },\n contain: function() {\n that.contain();\n return that.pi;\n },\n center: function() {\n that.center();\n return that.pi;\n },\n // Size and Resize\n updateBBox: function() {\n that.updateBBox();\n return that.pi;\n },\n resize: function() {\n that.resize();\n return that.pi;\n },\n getSizes: function() {\n return {\n width: that.width,\n height: that.height,\n realZoom: that.getZoom(),\n viewBox: that.viewport.getViewBox()\n };\n },\n // Destroy\n destroy: function() {\n that.destroy();\n return that.pi;\n }\n };\n }\n\n return this.publicInstance;\n};\n\n/**\n * Stores pairs of instances of SvgPanZoom and SVG\n * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom}\n *\n * @type {Array}\n */\nvar instancesStore = [];\n\nvar svgPanZoom = function(elementOrSelector, options) {\n var svg = Utils.getSvg(elementOrSelector);\n\n if (svg === null) {\n return null;\n } else {\n // Look for existent instance\n for (var i = instancesStore.length - 1; i >= 0; i--) {\n if (instancesStore[i].svg === svg) {\n return instancesStore[i].instance.getPublicInstance();\n }\n }\n\n // If instance not found - create one\n instancesStore.push({\n svg: svg,\n instance: new SvgPanZoom(svg, options)\n });\n\n // Return just pushed instance\n return instancesStore[\n instancesStore.length - 1\n ].instance.getPublicInstance();\n }\n};\n\nmodule.exports = svgPanZoom;\n","var Utils = require(\"./utilities\"),\n _browser = \"unknown\";\n\n// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser\nif (/*@cc_on!@*/ false || !!document.documentMode) {\n // internet explorer\n _browser = \"ie\";\n}\n\nmodule.exports = {\n svgNS: \"http://www.w3.org/2000/svg\",\n xmlNS: \"http://www.w3.org/XML/1998/namespace\",\n xmlnsNS: \"http://www.w3.org/2000/xmlns/\",\n xlinkNS: \"http://www.w3.org/1999/xlink\",\n evNS: \"http://www.w3.org/2001/xml-events\",\n\n /**\n * Get svg dimensions: width and height\n *\n * @param {SVGSVGElement} svg\n * @return {Object} {width: 0, height: 0}\n */\n getBoundingClientRectNormalized: function(svg) {\n if (svg.clientWidth && svg.clientHeight) {\n return { width: svg.clientWidth, height: svg.clientHeight };\n } else if (!!svg.getBoundingClientRect()) {\n return svg.getBoundingClientRect();\n } else {\n throw new Error(\"Cannot get BoundingClientRect for SVG.\");\n }\n },\n\n /**\n * Gets g element with class of \"viewport\" or creates it if it doesn't exist\n *\n * @param {SVGSVGElement} svg\n * @return {SVGElement} g (group) element\n */\n getOrCreateViewport: function(svg, selector) {\n var viewport = null;\n\n if (Utils.isElement(selector)) {\n viewport = selector;\n } else {\n viewport = svg.querySelector(selector);\n }\n\n // Check if there is just one main group in SVG\n if (!viewport) {\n var childNodes = Array.prototype.slice\n .call(svg.childNodes || svg.children)\n .filter(function(el) {\n return el.nodeName !== \"defs\" && el.nodeName !== \"#text\";\n });\n\n // Node name should be SVGGElement and should have no transform attribute\n // Groups with transform are not used as viewport because it involves parsing of all transform possibilities\n if (\n childNodes.length === 1 &&\n childNodes[0].nodeName === \"g\" &&\n childNodes[0].getAttribute(\"transform\") === null\n ) {\n viewport = childNodes[0];\n }\n }\n\n // If no favorable group element exists then create one\n if (!viewport) {\n var viewportId =\n \"viewport-\" + new Date().toISOString().replace(/\\D/g, \"\");\n viewport = document.createElementNS(this.svgNS, \"g\");\n viewport.setAttribute(\"id\", viewportId);\n\n // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes\n var svgChildren = svg.childNodes || svg.children;\n if (!!svgChildren && svgChildren.length > 0) {\n for (var i = svgChildren.length; i > 0; i--) {\n // Move everything into viewport except defs\n if (svgChildren[svgChildren.length - i].nodeName !== \"defs\") {\n viewport.appendChild(svgChildren[svgChildren.length - i]);\n }\n }\n }\n svg.appendChild(viewport);\n }\n\n // Parse class names\n var classNames = [];\n if (viewport.getAttribute(\"class\")) {\n classNames = viewport.getAttribute(\"class\").split(\" \");\n }\n\n // Set class (if not set already)\n if (!~classNames.indexOf(\"svg-pan-zoom_viewport\")) {\n classNames.push(\"svg-pan-zoom_viewport\");\n viewport.setAttribute(\"class\", classNames.join(\" \"));\n }\n\n return viewport;\n },\n\n /**\n * Set SVG attributes\n *\n * @param {SVGSVGElement} svg\n */\n setupSvgAttributes: function(svg) {\n // Setting default attributes\n svg.setAttribute(\"xmlns\", this.svgNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:xlink\", this.xlinkNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:ev\", this.evNS);\n\n // Needed for Internet Explorer, otherwise the viewport overflows\n if (svg.parentNode !== null) {\n var style = svg.getAttribute(\"style\") || \"\";\n if (style.toLowerCase().indexOf(\"overflow\") === -1) {\n svg.setAttribute(\"style\", \"overflow: hidden; \" + style);\n }\n }\n },\n\n /**\n * How long Internet Explorer takes to finish updating its display (ms).\n */\n internetExplorerRedisplayInterval: 300,\n\n /**\n * Forces the browser to redisplay all SVG elements that rely on an\n * element defined in a 'defs' section. It works globally, for every\n * available defs element on the page.\n * The throttling is intentionally global.\n *\n * This is only needed for IE. It is as a hack to make markers (and 'use' elements?)\n * visible after pan/zoom when there are multiple SVGs on the page.\n * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/\n * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62\n */\n refreshDefsGlobal: Utils.throttle(\n function() {\n var allDefs = document.querySelectorAll(\"defs\");\n var allDefsCount = allDefs.length;\n for (var i = 0; i < allDefsCount; i++) {\n var thisDefs = allDefs[i];\n thisDefs.parentNode.insertBefore(thisDefs, thisDefs);\n }\n },\n this ? this.internetExplorerRedisplayInterval : null\n ),\n\n /**\n * Sets the current transform matrix of an element\n *\n * @param {SVGElement} element\n * @param {SVGMatrix} matrix CTM\n * @param {SVGElement} defs\n */\n setCTM: function(element, matrix, defs) {\n var that = this,\n s =\n \"matrix(\" +\n matrix.a +\n \",\" +\n matrix.b +\n \",\" +\n matrix.c +\n \",\" +\n matrix.d +\n \",\" +\n matrix.e +\n \",\" +\n matrix.f +\n \")\";\n\n element.setAttributeNS(null, \"transform\", s);\n if (\"transform\" in element.style) {\n element.style.transform = s;\n } else if (\"-ms-transform\" in element.style) {\n element.style[\"-ms-transform\"] = s;\n } else if (\"-webkit-transform\" in element.style) {\n element.style[\"-webkit-transform\"] = s;\n }\n\n // IE has a bug that makes markers disappear on zoom (when the matrix \"a\" and/or \"d\" elements change)\n // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10\n // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/\n if (_browser === \"ie\" && !!defs) {\n // this refresh is intended for redisplaying the SVG during zooming\n defs.parentNode.insertBefore(defs, defs);\n // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG\n // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that\n // are located under any other element(s).\n window.setTimeout(function() {\n that.refreshDefsGlobal();\n }, that.internetExplorerRedisplayInterval);\n }\n },\n\n /**\n * Instantiate an SVGPoint object with given event coordinates\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n * @return {SVGPoint} point\n */\n getEventPoint: function(evt, svg) {\n var point = svg.createSVGPoint();\n\n Utils.mouseAndTouchNormalize(evt, svg);\n\n point.x = evt.clientX;\n point.y = evt.clientY;\n\n return point;\n },\n\n /**\n * Get SVG center point\n *\n * @param {SVGSVGElement} svg\n * @return {SVGPoint}\n */\n getSvgCenterPoint: function(svg, width, height) {\n return this.createSVGPoint(svg, width / 2, height / 2);\n },\n\n /**\n * Create a SVGPoint with given x and y\n *\n * @param {SVGSVGElement} svg\n * @param {Number} x\n * @param {Number} y\n * @return {SVGPoint}\n */\n createSVGPoint: function(svg, x, y) {\n var point = svg.createSVGPoint();\n point.x = x;\n point.y = y;\n\n return point;\n }\n};\n","// uniwheel 0.1.2 (customized)\n// A unified cross browser mouse wheel event handler\n// https://github.com/teemualap/uniwheel\n\nmodule.exports = (function(){\n\n //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel\n\n var prefix = \"\", _addEventListener, _removeEventListener, support, fns = [];\n var passiveOption = {passive: true};\n\n // detect event model\n if ( window.addEventListener ) {\n _addEventListener = \"addEventListener\";\n _removeEventListener = \"removeEventListener\";\n } else {\n _addEventListener = \"attachEvent\";\n _removeEventListener = \"detachEvent\";\n prefix = \"on\";\n }\n\n // detect available wheel event\n support = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\n document.onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\n\n\n function createCallback(element,callback) {\n\n var fn = function(originalEvent) {\n\n !originalEvent && ( originalEvent = window.event );\n\n // create a normalized event object\n var event = {\n // keep a ref to the original event object\n originalEvent: originalEvent,\n target: originalEvent.target || originalEvent.srcElement,\n type: \"wheel\",\n deltaMode: originalEvent.type == \"MozMousePixelScroll\" ? 0 : 1,\n deltaX: 0,\n delatZ: 0,\n preventDefault: function() {\n originalEvent.preventDefault ?\n originalEvent.preventDefault() :\n originalEvent.returnValue = false;\n }\n };\n\n // calculate deltaY (and deltaX) according to the event\n if ( support == \"mousewheel\" ) {\n event.deltaY = - 1/40 * originalEvent.wheelDelta;\n // Webkit also support wheelDeltaX\n originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX );\n } else {\n event.deltaY = originalEvent.detail;\n }\n\n // it's time to fire the callback\n return callback( event );\n\n };\n\n fns.push({\n element: element,\n fn: fn,\n });\n\n return fn;\n }\n\n function getCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns[i].fn;\n }\n }\n return function(){};\n }\n\n function removeCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns.splice(i,1);\n }\n }\n }\n\n function _addWheelListener(elem, eventName, callback, isPassiveListener ) {\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = createCallback(elem, callback);\n }\n\n elem[_addEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n }\n\n function _removeWheelListener(elem, eventName, callback, isPassiveListener ) {\n\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = getCallback(elem);\n }\n\n elem[_removeEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n\n removeCallback(elem);\n }\n\n function addWheelListener( elem, callback, isPassiveListener ) {\n _addWheelListener(elem, support, callback, isPassiveListener );\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _addWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener );\n }\n }\n\n function removeWheelListener(elem, callback, isPassiveListener){\n _removeWheelListener(elem, support, callback, isPassiveListener);\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _removeWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener);\n }\n }\n\n return {\n on: addWheelListener,\n off: removeWheelListener\n };\n\n})();\n","module.exports = {\n /**\n * Extends an object\n *\n * @param {Object} target object to extend\n * @param {Object} source object to take properties from\n * @return {Object} extended object\n */\n extend: function(target, source) {\n target = target || {};\n for (var prop in source) {\n // Go recursively\n if (this.isObject(source[prop])) {\n target[prop] = this.extend(target[prop], source[prop]);\n } else {\n target[prop] = source[prop];\n }\n }\n return target;\n },\n\n /**\n * Checks if an object is a DOM element\n *\n * @param {Object} o HTML element or String\n * @return {Boolean} returns true if object is a DOM element\n */\n isElement: function(o) {\n return (\n o instanceof HTMLElement ||\n o instanceof SVGElement ||\n o instanceof SVGSVGElement || //DOM2\n (o &&\n typeof o === \"object\" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === \"string\")\n );\n },\n\n /**\n * Checks if an object is an Object\n *\n * @param {Object} o Object\n * @return {Boolean} returns true if object is an Object\n */\n isObject: function(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n },\n\n /**\n * Checks if variable is Number\n *\n * @param {Integer|Float} n\n * @return {Boolean} returns true if variable is Number\n */\n isNumber: function(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n },\n\n /**\n * Search for an SVG element\n *\n * @param {Object|String} elementOrSelector DOM Element or selector String\n * @return {Object|Null} SVG or null\n */\n getSvg: function(elementOrSelector) {\n var element, svg;\n\n if (!this.isElement(elementOrSelector)) {\n // If selector provided\n if (\n typeof elementOrSelector === \"string\" ||\n elementOrSelector instanceof String\n ) {\n // Try to find the element\n element = document.querySelector(elementOrSelector);\n\n if (!element) {\n throw new Error(\n \"Provided selector did not find any elements. Selector: \" +\n elementOrSelector\n );\n return null;\n }\n } else {\n throw new Error(\"Provided selector is not an HTML object nor String\");\n return null;\n }\n } else {\n element = elementOrSelector;\n }\n\n if (element.tagName.toLowerCase() === \"svg\") {\n svg = element;\n } else {\n if (element.tagName.toLowerCase() === \"object\") {\n svg = element.contentDocument.documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"embed\") {\n svg = element.getSVGDocument().documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"img\") {\n throw new Error(\n 'Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.'\n );\n } else {\n throw new Error(\"Cannot get SVG.\");\n }\n return null;\n }\n }\n }\n\n return svg;\n },\n\n /**\n * Attach a given context to a function\n * @param {Function} fn Function\n * @param {Object} context Context\n * @return {Function} Function with certain context\n */\n proxy: function(fn, context) {\n return function() {\n return fn.apply(context, arguments);\n };\n },\n\n /**\n * Returns object type\n * Uses toString that returns [object SVGPoint]\n * And than parses object type from string\n *\n * @param {Object} o Any object\n * @return {String} Object type\n */\n getType: function(o) {\n return Object.prototype.toString\n .apply(o)\n .replace(/^\\[object\\s/, \"\")\n .replace(/\\]$/, \"\");\n },\n\n /**\n * If it is a touch event than add clientX and clientY to event object\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n */\n mouseAndTouchNormalize: function(evt, svg) {\n // If no clientX then fallback\n if (evt.clientX === void 0 || evt.clientX === null) {\n // Fallback\n evt.clientX = 0;\n evt.clientY = 0;\n\n // If it is a touch event\n if (evt.touches !== void 0 && evt.touches.length) {\n if (evt.touches[0].clientX !== void 0) {\n evt.clientX = evt.touches[0].clientX;\n evt.clientY = evt.touches[0].clientY;\n } else if (evt.touches[0].pageX !== void 0) {\n var rect = svg.getBoundingClientRect();\n\n evt.clientX = evt.touches[0].pageX - rect.left;\n evt.clientY = evt.touches[0].pageY - rect.top;\n }\n // If it is a custom event\n } else if (evt.originalEvent !== void 0) {\n if (evt.originalEvent.clientX !== void 0) {\n evt.clientX = evt.originalEvent.clientX;\n evt.clientY = evt.originalEvent.clientY;\n }\n }\n }\n },\n\n /**\n * Check if an event is a double click/tap\n * TODO: For touch gestures use a library (hammer.js) that takes in account other events\n * (touchmove and touchend). It should take in account tap duration and traveled distance\n *\n * @param {Event} evt\n * @param {Event} prevEvt Previous Event\n * @return {Boolean}\n */\n isDblClick: function(evt, prevEvt) {\n // Double click detected by browser\n if (evt.detail === 2) {\n return true;\n }\n // Try to compare events\n else if (prevEvt !== void 0 && prevEvt !== null) {\n var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms\n touchesDistance = Math.sqrt(\n Math.pow(evt.clientX - prevEvt.clientX, 2) +\n Math.pow(evt.clientY - prevEvt.clientY, 2)\n );\n\n return timeStampDiff < 250 && touchesDistance < 10;\n }\n\n // Nothing found\n return false;\n },\n\n /**\n * Returns current timestamp as an integer\n *\n * @return {Number}\n */\n now:\n Date.now ||\n function() {\n return new Date().getTime();\n },\n\n // From underscore.\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n throttle: function(func, wait, options) {\n var that = this;\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) {\n options = {};\n }\n var later = function() {\n previous = options.leading === false ? 0 : that.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n return function() {\n var now = that.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n context = this; // eslint-disable-line consistent-this\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n },\n\n /**\n * Create a requestAnimationFrame simulation\n *\n * @param {Number|String} refreshRate\n * @return {Function}\n */\n createRequestAnimationFrame: function(refreshRate) {\n var timeout = null;\n\n // Convert refreshRate to timeout\n if (refreshRate !== \"auto\" && refreshRate < 60 && refreshRate > 1) {\n timeout = Math.floor(1000 / refreshRate);\n }\n\n if (timeout === null) {\n return window.requestAnimationFrame || requestTimeout(33);\n } else {\n return requestTimeout(timeout);\n }\n }\n};\n\n/**\n * Create a callback that will execute after a given timeout\n *\n * @param {Function} timeout\n * @return {Function}\n */\nfunction requestTimeout(timeout) {\n return function(callback) {\n window.setTimeout(callback, timeout);\n };\n}\n","(function() {\r\n\t\r\n\t// VERSION\r\n\tvar version = { major: 0, minor: 3, patch: 4, status: \"beta\" };\r\n\r\n\r\n\r\n\t// IO FILE SYSTEM\r\n\t\r\n\t// Virtual file\r\n\tfunction TauFile(name, type, parent, text) {\r\n\t\ttext = text === undefined ? \"\" : text;\r\n\t\tthis.name = name;\r\n\t\tthis.type = type;\r\n\t\tthis.parent = parent;\r\n\t\tthis.text = text;\r\n\t\tthis.created = Date.now() / 1000;\r\n\t\tthis.modified = this.created;\r\n\t}\r\n\r\n\tTauFile.prototype.get = function(length, position) {\r\n\t\tif(position === this.text.length) {\r\n\t\t\treturn \"end_of_stream\";\r\n\t\t} else if(position > this.text.length) {\r\n\t\t\treturn \"end_of_stream\";\r\n\t\t} else {\r\n\t\t\treturn this.text.substring(position, position+length);\r\n\t\t}\r\n\t};\r\n\r\n\tTauFile.prototype.eof = function(position) {\r\n\t\treturn position === this.text.length;\r\n\t};\r\n\r\n\tTauFile.prototype.put = function(text, position) {\r\n\t\tif(position === \"end_of_stream\") {\r\n\t\t\tthis.text += text;\r\n\t\t\treturn true;\r\n\t\t} else if(position === \"past_end_of_stream\") {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\tthis.text = this.text.substring(0, position) + text + this.text.substring(position+text.length);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};\r\n\r\n\tTauFile.prototype.get_byte = function(position) {\r\n\t\tif(position === \"end_of_stream\")\r\n\t\t\treturn -1;\r\n\t\tvar index = Math.floor(position/2);\r\n\t\tif(this.text.length <= index)\r\n\t\t\treturn -1;\r\n\t\tvar code = codePointAt(this.text[Math.floor(position/2)], 0);\r\n\t\tif(position % 2 === 0)\r\n\t\t\treturn code & 0xff;\r\n\t\telse\r\n\t\t\treturn code / 256 >>> 0;\r\n\t};\r\n\r\n\tTauFile.prototype.put_byte = function(byte, position) {\r\n\t\tvar index = position === \"end_of_stream\" ? this.text.length : Math.floor(position/2);\r\n\t\tif(this.text.length < index)\r\n\t\t\treturn null;\r\n\t\tvar code = this.text.length === index ? -1 : codePointAt(this.text[Math.floor(position/2)], 0);\r\n\t\tif(position % 2 === 0) {\r\n\t\t\tcode = code / 256 >>> 0;\r\n\t\t\tcode = ((code & 0xff) << 8) | (byte & 0xff);\r\n\t\t} else {\r\n\t\t\tcode = code & 0xff;\r\n\t\t\tcode = ((byte & 0xff) << 8) | (code & 0xff);\r\n\t\t}\r\n\t\tif(this.text.length === index)\r\n\t\t\tthis.text += fromCodePoint(code);\r\n\t\telse \r\n\t\t\tthis.text = this.text.substring(0, index) + fromCodePoint(code) + this.text.substring(index+1);\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.flush = function() {\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.close = function() {\r\n\t\tthis.modified = Date.now() / 1000;\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.size = function() {\r\n\t\treturn this.text.length;\r\n\t};\r\n\r\n\t// Virtual directory\r\n\tfunction TauDirectory(name, parent) {\r\n\t\tthis.name = name;\r\n\t\tthis.parent = parent;\r\n\t\tthis.files = {};\r\n\t\tthis.length = 0;\r\n\t\tthis.created = Date.now() / 1000;\r\n\t\tthis.modified = this.created;\r\n\t}\r\n\r\n\tTauDirectory.prototype.lookup = function(file) {\r\n\t\tif(this.files.hasOwnProperty(file))\r\n\t\t\treturn this.files[file];\r\n\t\treturn null;\r\n\t};\r\n\r\n\tTauDirectory.prototype.push = function(name, file) {\r\n\t\tif(!this.files.hasOwnProperty(name))\r\n\t\t\tthis.length++;\r\n\t\tthis.files[name] = file;\r\n\t\tthis.modified = Date.now() / 1000;\r\n\t};\r\n\r\n\tTauDirectory.prototype.remove = function(name) {\r\n\t\tif(this.files.hasOwnProperty(name)) {\r\n\t\t\tthis.length--;\r\n\t\t\tdelete this.files[name];\r\n\t\t\tthis.modified = Date.now() / 1000;\r\n\t\t}\r\n\t};\r\n\r\n\tTauDirectory.prototype.empty = function() {\r\n\t\treturn this.length === 0;\r\n\t};\r\n\r\n\tTauDirectory.prototype.size = function() {\r\n\t\treturn 4096;\r\n\t};\r\n\r\n\t// Virtual file system for browser\r\n\ttau_file_system = {\r\n\t\t// Current files\r\n\t\tfiles: new TauDirectory(\"/\", \"/\", null),\r\n\t\t// Open file\r\n\t\topen: function(path, type, mode) {\r\n\t\t\tvar dirs = path.replace(/\\/$/, \"\").split(\"/\");\r\n\t\t\tvar dir = tau_file_system.files;\r\n\t\t\tvar name = dirs[dirs.length-1];\r\n\t\t\tfor(var i = 1; i < dirs.length-1; i++) {\r\n\t\t\t\tdir = dir.lookup(dirs[i]);\r\n\t\t\t\tif(!pl.type.is_directory(dir))\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tvar file = dir.lookup(name);\r\n\t\t\tif(file === null) {\r\n\t\t\t\tif(mode === \"read\")\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tfile = new TauFile(name, type, dir);\r\n\t\t\t\tdir.push(name, file);\r\n\t\t\t} else if(!pl.type.is_file(file)) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif(mode === \"write\")\r\n\t\t\t\tfile.text = \"\";\r\n\t\t\treturn file;\r\n\t\t},\r\n\t\t// Get item\r\n\t\tget: function(path) {\r\n\t\t\tvar dirs = path.replace(/\\/$/, \"\").split(\"/\");\r\n\t\t\tvar file = tau_file_system.files;\r\n\t\t\tfor(var i = 1; i < dirs.length; i++)\r\n\t\t\t\tif(pl.type.is_directory(file))\r\n\t\t\t\t\tfile = file.lookup(dirs[i]);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn null;\r\n\t\t\treturn file;\r\n\t\t}\r\n\t};\r\n\r\n\t// User input for browser\r\n\ttau_user_input = {\r\n\t\tbuffer: \"\",\r\n\t\tget: function( length, _ ) {\r\n\t\t\tvar text;\r\n\t\t\twhile( tau_user_input.buffer.length < length ) {\r\n\t\t\t\ttext = window.prompt();\r\n\t\t\t\tif( text.length === 0 )\r\n\t\t\t\t\treturn \"end_of_stream\";\r\n\t\t\t\tif( text ) {\r\n\t\t\t\t\ttau_user_input.buffer += text;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttext = tau_user_input.buffer.substr( 0, length );\r\n\t\t\ttau_user_input.buffer = tau_user_input.buffer.substr( length );\r\n\t\t\treturn text;\r\n\t\t},\r\n\t\teof: function(_) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t// User output for browser\r\n\ttau_user_output = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tconsole.log( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\r\n\t// User error for browser\r\n\ttau_user_error = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\t(console.error || console.log)( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\r\n\t// Virtual file system for Node.js\r\n\tnodejs_file_system = {\r\n\t\t// Open file\r\n\t\topen: function( path, type, mode ) {\r\n\t\t\tvar fd, fs = require('fs');\r\n\t\t\tif( mode === \"read\" && !fs.existsSync( path ) )\r\n\t\t\t\treturn null;\r\n\t\t\ttry {\r\n\t\t\t\tfd = fs.openSync( path, mode[0] );\r\n\t\t\t} catch(ex) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tget: function( length, position ) {\r\n\t\t\t\t\tvar buffer = new Buffer( length );\r\n\t\t\t\t\tfs.readSync( fd, buffer, 0, length, position );\r\n\t\t\t\t\tvar end_of_file = true;\r\n\t\t\t\t\tvar text = buffer.toString();\r\n\t\t\t\t\tfor(var i = 0; i < length && end_of_file; i++)\r\n\t\t\t\t\t\tend_of_file = text[i] === \"\\u0000\";\r\n\t\t\t\t\treturn end_of_file ? \"end_of_stream\" : buffer.toString();\r\n\t\t\t\t},\r\n\t\t\t\teof: function(position) {\r\n\t\t\t\t\tvar stats = fs.statSync(path)\r\n\t\t\t\t\treturn position === stats[\"size\"];\r\n\t\t\t\t},\r\n\t\t\t\tput: function( text, position ) {\r\n\t\t\t\t\tvar buffer = Buffer.from( text );\r\n\t\t\t\t\tif( position === \"end_of_stream\" )\r\n\t\t\t\t\t\tfs.writeSync( fd, buffer );\r\n\t\t\t\t\telse if( position === \"past_end_of_stream\" )\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfs.writeSync( fd, buffer, 0, buffer.length, position );\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tget_byte: function( position ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tvar buffer = Buffer.alloc(1);\r\n\t\t\t\t\t\tvar bytesRead = fs.readSync(fd, buffer, 0, 1, position);\r\n\t\t\t\t\t\t//var _text = buffer.toString(\"utf8\", 0, bytesRead);\r\n\t\t\t\t\t\tvar end_of_file = bytesRead < 1;\r\n\t\t\t\t\t\treturn end_of_file ? \"end_of_stream\" : buffer.readUInt8(0);\r\n\t\t\t\t\t} catch(ex) {\r\n\t\t\t\t\t\treturn \"end_of_stream\";\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tput_byte: function(byte, position) {\r\n\t\t\t\t\tvar buffer = Buffer.from([byte]);\r\n\t\t\t\t\tif(position === \"end_of_stream\")\r\n\t\t\t\t\t\tfs.writeSync(fd, buffer);\r\n\t\t\t\t\telse if(position === \"past_end_of_stream\")\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfs.writeSync(fd, buffer, 0, buffer.length, position);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tflush: function() {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tclose: function() {\r\n\t\t\t\t\tfs.closeSync( fd );\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n\r\n\t// User input for Node.js\r\n\tnodejs_user_input = {\r\n\t\tbuffer: \"\",\r\n\t\tget: function( length, _ ) {\r\n\t\t\tvar text;\r\n\t\t\tvar readlineSync = require('readline-sync');\r\n\t\t\twhile( nodejs_user_input.buffer.length < length )\r\n\t\t\t\tnodejs_user_input.buffer += readlineSync.question(\"\", {keepWhitespace: true}) + \"\\n\";\r\n\t\t\ttext = nodejs_user_input.buffer.substr( 0, length );\r\n\t\t\tnodejs_user_input.buffer = nodejs_user_input.buffer.substr( length );\r\n\t\t\treturn text;\r\n\t\t},\r\n\t\teof: function(length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t// User output for Node.js\r\n\tnodejs_user_output = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tprocess.stdout.write( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};\r\n\r\n\t// User error for Node.js\r\n\tnodejs_user_error = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tprocess.stderr.write( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPATITBILITY\r\n\t\r\n\tvar indexOf;\r\n\tif(!Array.prototype.indexOf) {\r\n\t\tindexOf = function(array, elem) {\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\tif(elem === array[i]) return i;\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\t} else {\r\n\t\tindexOf = function(array, elem) {\r\n\t\t\treturn array.indexOf(elem);\r\n\t\t};\r\n\t}\r\n\r\n\tvar reduce = function(array, fn) {\r\n\t\tif(array.length === 0) return undefined;\r\n\t\tvar elem = array[0];\r\n\t\tvar len = array.length;\r\n\t\tfor(var i = 1; i < len; i++) {\r\n\t\t\telem = fn(elem, array[i]);\r\n\t\t}\r\n\t\treturn elem;\r\n\t};\r\n\r\n\tvar map;\r\n\tif(!Array.prototype.map) {\r\n\t\tmap = function(array, fn) {\r\n\t\t\tvar a = [];\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\ta.push( fn(array[i]) );\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t};\r\n\t} else {\r\n\t\tmap = function(array, fn) {\r\n\t\t\treturn array.map(fn);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar filter;\r\n\tif(!Array.prototype.filter) {\r\n\t\tfilter = function(array, fn) {\r\n\t\t\tvar a = [];\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\tif(fn(array[i]))\r\n\t\t\t\t\ta.push( array[i] );\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t};\r\n\t} else {\r\n\t\tfilter = function(array, fn) {\r\n\t\t\treturn array.filter(fn);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar codePointAt;\r\n\tif(!String.prototype.codePointAt) {\r\n\t\tcodePointAt = function(str, i) {\r\n\t\t\treturn str.charCodeAt(i);\r\n\t\t};\r\n\t} else {\r\n\t\tcodePointAt = function(str, i) {\r\n\t\t\treturn str.codePointAt(i);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar fromCodePoint;\r\n\tif(!String.fromCodePoint) {\r\n\t\tfromCodePoint = function() {\r\n\t\t\treturn String.fromCharCode.apply(null, arguments);\r\n\t\t};\r\n\t} else {\r\n\t\tfromCodePoint = function() {\r\n\t\t\treturn String.fromCodePoint.apply(null, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tvar stringLength;\r\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\r\n\tif(Array.from)\r\n\t\tstringLength = function(str) {\r\n\t\t\treturn Array.from(str).length;\r\n\t\t};\r\n\telse\r\n\t\tstringLength = function(str) {\r\n\t\t\treturn str.replace(regexAstralSymbols, '_').length;\r\n\t\t};\r\n\r\n\t\r\n\t\r\n\t// PARSER\r\n\r\n\tvar ERROR = 0;\r\n\tvar SUCCESS = 1;\r\n\r\n\tvar regex_escape = /(\\\\a)|(\\\\b)|(\\\\d)|(\\\\e)|(\\\\f)|(\\\\n)|(\\\\r)|(\\\\s)|(\\\\t)|(\\\\v)|\\\\x([0-9a-fA-F]+)\\\\|\\\\([0-7]+)\\\\|(\\\\\\\\)|(\\\\')|('')|(\\\\\")|(\\\\`)|(\\\\.)|(.)/g;\r\n\tvar escape_map = {\"\\\\a\": 7, \"\\\\b\": 8, \"\\\\d\": 127, \"\\\\e\": 27, \"\\\\f\": 12, \"\\\\n\": 10, \"\\\\r\": 13, \"\\\\s\": 32, \"\\\\t\": 9, \"\\\\v\": 11};\r\n\tfunction escape(str) {\r\n\t\tvar stack = [];\r\n\t\tvar _error = false;\r\n\t\tstr.replace(regex_escape, function(match, a, b, d, e, f, n, r, s, t, v, hex, octal, back, single, dsingle, double, backquote, error, char) {\r\n\t\t\tswitch(true) {\r\n\t\t\t\tcase hex !== undefined:\r\n\t\t\t\t\tstack.push( parseInt(hex, 16) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase octal !== undefined:\r\n\t\t\t\t\tstack.push( parseInt(octal, 8) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase back !== undefined:\r\n\t\t\t\tcase single !== undefined:\r\n\t\t\t\tcase dsingle !== undefined:\r\n\t\t\t\tcase double !== undefined:\r\n\t\t\t\tcase backquote !== undefined:\r\n\t\t\t\t\tstack.push( codePointAt(match.substr(1),0) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase char !== undefined:\r\n\t\t\t\t\tstack.push( codePointAt(char,0) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase error !== undefined:\r\n\t\t\t\t\t_error = true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tstack.push(escape_map[match]);\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(_error)\r\n\t\t\treturn null;\r\n\t\treturn stack;\r\n\t}\r\n\r\n\t// Escape atoms\r\n\tfunction escapeAtom(str, quote) {\r\n\t\tvar atom = '';\r\n\t\tif( str === \"\\\\\" ) return null;\r\n\t\tif( str.length < 2 ) return str;\r\n\t\ttry {\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\([0-7]+)\\\\/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 8));\r\n\t\t\t});\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\x([0-9a-fA-F]+)\\\\/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 16));\r\n\t\t\t});\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\u([0-9a-fA-F]{4})/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 16));\r\n\t\t\t});\r\n\t\t} catch(error) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tfor( var i = 0; i < str.length; i++) {\r\n\t\t\tvar a = str.charAt(i);\r\n\t\t\tvar b = str.charAt(i+1);\r\n\t\t\tif( a === quote && b === quote ) {\r\n\t\t\t\ti++;\r\n\t\t\t\tatom += quote;\r\n\t\t\t} else if( a === '\\\\' ) {\r\n\t\t\t\tif( ['a','b','f','n','r','t','v',\"'\",'\"','\\\\','\\a','\\b','\\f','\\n','\\r','\\t','\\v'].indexOf(b) !== -1 ) {\r\n\t\t\t\t\ti += 1;\r\n\t\t\t\t\tswitch( b ) {\r\n\t\t\t\t\t\tcase 'a': atom += '\\a'; break;\r\n\t\t\t\t\t\tcase 'b': atom += '\\b'; break;\r\n\t\t\t\t\t\tcase 'f': atom += '\\f'; break;\r\n\t\t\t\t\t\tcase 'n': atom += '\\n'; break;\r\n\t\t\t\t\t\tcase 'r': atom += '\\r'; break;\r\n\t\t\t\t\t\tcase 't': atom += '\\t'; break;\r\n\t\t\t\t\t\tcase 'v': atom += '\\v'; break;\r\n\t\t\t\t\t\tcase \"'\": atom += \"'\"; break;\r\n\t\t\t\t\t\tcase '\"': atom += '\"'; break;\r\n\t\t\t\t\t\tcase '\\\\': atom += '\\\\'; break;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tatom += a;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn atom;\r\n\t}\r\n\t\r\n\t// Redo escape\r\n\tfunction redoEscape(str) {\r\n\t\tvar atom = '';\r\n\t\tfor( var i = 0; i < str.length; i++) {\r\n\t\t\tswitch( str.charAt(i) ) {\r\n\t\t\t\tcase \"'\": atom += \"\\\\'\"; break;\r\n\t\t\t\tcase '\\\\': atom += '\\\\\\\\'; break;\r\n\t\t\t\t//case '\\a': atom += '\\\\a'; break;\r\n\t\t\t\tcase '\\b': atom += '\\\\b'; break;\r\n\t\t\t\tcase '\\f': atom += '\\\\f'; break;\r\n\t\t\t\tcase '\\n': atom += '\\\\n'; break;\r\n\t\t\t\tcase '\\r': atom += '\\\\r'; break;\r\n\t\t\t\tcase '\\t': atom += '\\\\t'; break;\r\n\t\t\t\tcase '\\v': atom += '\\\\v'; break;\r\n\t\t\t\tdefault: atom += str.charAt(i); break;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn atom;\r\n\t}\r\n\r\n\t// String to num\r\n\tfunction convertNum(num) {\r\n\t\tvar n = num.substr(2);\r\n\t\tswitch(num.substr(0,2).toLowerCase()) {\r\n\t\t\tcase \"0x\":\r\n\t\t\t\treturn parseInt(n, 16);\r\n\t\t\tcase \"0b\":\r\n\t\t\t\treturn parseInt(n, 2);\r\n\t\t\tcase \"0o\":\r\n\t\t\t\treturn parseInt(n, 8);\r\n\t\t\tcase \"0'\":\r\n\t\t\t\treturn escape(n)[0];\r\n\t\t\tdefault:\r\n\t\t\t\treturn parseFloat(num);\r\n\t\t}\r\n\t}\r\n\r\n\t// Is graphic token\r\n\tfunction is_graphic_token(string) {\r\n\t\treturn /^[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+/.test(string);\r\n\t}\r\n\r\n\t// Regular expressions for tokens\r\n\tvar rules = {\r\n\t\twhitespace: /^\\s*(?:(?:%.*)|(?:\\/\\*(?:\\n|\\r|.)*?(?:\\*\\/|$))|(?:\\s+))\\s*/,\r\n\t\tvariable: /^(?:[A-Z_][a-zA-Z0-9_]*)/,\r\n\t\tatom: /^(\\!|,|;|[a-z][0-9a-zA-Z_]*|[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+|'(?:(?:'')|(?:\\\\\\\\)|(?:\\\\')|[^'])*')/,\r\n\t\tnumber: /^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\\\[abdefnrstv\\\\'\"`]|\\\\x?\\d+\\\\|[^\\\\])|\\d+(?:\\.\\d+(?:[eE][+-]?\\d+)?)?)/,\r\n\t\tstring: /^(?:\"([^\"]|\"\"|\\\\\")*\"|`([^`]|``|\\\\`)*`)/,\r\n\t\tl_brace: /^(?:\\[)/,\r\n\t\tr_brace: /^(?:\\])/,\r\n\t\tl_bracket: /^(?:\\{)/,\r\n\t\tr_bracket: /^(?:\\})/,\r\n\t\tbar: /^(?:\\|)/,\r\n\t\tl_paren: /^(?:\\()/,\r\n\t\tr_paren: /^(?:\\))/\r\n\t};\r\n\r\n\t// Replace chars of char_conversion session\r\n\tfunction replace( thread, text ) {\r\n\t\tif( thread.get_flag( \"char_conversion\" ).id === \"on\" ) {\r\n\t\t\treturn text.replace(/./g, function(char) {\r\n\t\t\t\treturn thread.get_char_conversion( char );\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn text;\r\n\t}\r\n\r\n\t// Tokenize strings\r\n\tfunction Tokenizer(thread) {\r\n\t\tthis.thread = thread;\r\n\t\tthis.text = \"\"; // Current text to be analized\r\n\t\tthis.tokens = []; // Consumed tokens\r\n\t}\r\n\r\n\tTokenizer.prototype.set_last_tokens = function(tokens) {\r\n\t\treturn this.tokens = tokens;\r\n\t};\r\n\r\n\tTokenizer.prototype.new_text = function(text) {\r\n\t\tthis.text = text;\r\n\t\tthis.tokens = [];\r\n\t};\r\n\r\n\tTokenizer.prototype.get_tokens = function(init) {\r\n\t\tvar text;\r\n\t\tvar len = 0; // Total length respect to text\r\n\t\tvar line = 0;\r\n\t\tvar start = 0;\r\n\t\tvar tokens = [];\r\n\t\tvar last_is_blank;\r\n\r\n\t\tif(init) {\r\n\t\t\tvar token = this.tokens[init-1];\r\n\t\t\tlen = token.len;\r\n\t\t\ttext = replace( this.thread, this.text.substr(token.len) );\r\n\t\t\tline = token.line;\r\n\t\t\tstart = token.start;\r\n\t\t}\r\n\t\telse\r\n\t\t\ttext = this.text;\r\n\r\n\r\n\t\t// If there is nothing to be analized, return null\r\n\t\tif(/^\\s*$/.test(text))\r\n\t\t\treturn null;\r\n\r\n\t\twhile(text !== \"\") {\r\n\t\t\tvar matches = [];\r\n\t\t\tlast_is_blank = false;\r\n\r\n\t\t\tif(/^\\n/.exec(text) !== null) {\r\n\t\t\t\tline++;\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tlen++;\r\n\t\t\t\ttext = text.replace(/\\n/, \"\");\r\n\t\t\t\tlast_is_blank = true;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var rule in rules) {\r\n\t\t\t\tif(rules.hasOwnProperty(rule)) {\r\n\t\t\t\t\tvar matchs = rules[rule].exec( text );\r\n\t\t\t\t\tif(matchs) {\r\n\t\t\t\t\t\tmatches.push({\r\n\t\t\t\t\t\t\tvalue: matchs[0],\r\n\t\t\t\t\t\t\tname: rule,\r\n\t\t\t\t\t\t\tmatches: matchs\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Lexical error\r\n\t\t\tif(!matches.length)\r\n\t\t\t\treturn this.set_last_tokens( [{ value: text, matches: [], name: \"lexical\", line: line, start: start }] );\r\n\r\n\t\t\tvar token = reduce( matches, function(a, b) {\r\n\t\t\t\treturn a.value.length >= b.value.length ? a : b;\r\n\t\t\t} );\r\n\r\n\t\t\ttoken.start = start;\r\n\t\t\ttoken.line = line;\r\n\r\n\t\t\ttext = text.replace(token.value, \"\");\r\n\t\t\tstart += token.value.length;\r\n\t\t\tlen += token.value.length;\r\n\r\n\t\t\tvar nl = (token.value.match(/\\n/g) || []).length;\r\n\t\t\tline += nl;\r\n\t\t\tif(nl > 0) \r\n\t\t\t\tstart = token.value.length - token.value.lastIndexOf(\"\\n\") - 1;\r\n\t\t\ttoken.line_count = line;\r\n\t\t\ttoken.line_position = start;\r\n\r\n\t\t\tswitch(token.name) {\r\n\t\t\t\tcase \"atom\":\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\tif(token.value.charAt(0) === \"'\") {\r\n\t\t\t\t\t\ttoken.value = escapeAtom( token.value.substring(1, token.value.length - 1), \"'\" );\r\n\t\t\t\t\t\tif( token.value === null ) {\r\n\t\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\t\ttoken.error = \"unknown_escape_sequence\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"number\":\r\n\t\t\t\t\tvar substr = token.value.substring(0,2);\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\ttoken.float = substr !== \"0x\" && substr !== \"0'\" && token.value.match(/[.eE]/) !== null;\r\n\t\t\t\t\ttoken.value = convertNum( token.value );\r\n\t\t\t\t\ttoken.blank = last_is_blank;\r\n\t\t\t\t\tif(!token.float && pl.flag.bounded.value.indicator === \"true/0\" && token.value > pl.flag.max_integer.value.value) {\r\n\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\ttoken.error = \"int_overflow\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tvar del = token.value.charAt(0);\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\ttoken.value = escapeAtom( token.value.substring(1, token.value.length - 1), del );\r\n\t\t\t\t\tif( token.value === null ) {\r\n\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\ttoken.error = \"unknown_escape_sequence\"\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"whitespace\":\r\n\t\t\t\t\tvar last = tokens[tokens.length-1];\r\n\t\t\t\t\tif(last) last.space = true;\r\n\t\t\t\t\tlast_is_blank = true;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase \"r_bracket\":\r\n\t\t\t\t\tif( tokens.length > 0 && tokens[tokens.length-1].name === \"l_bracket\" ) {\r\n\t\t\t\t\t\ttoken = tokens.pop();\r\n\t\t\t\t\t\ttoken.name = \"atom\";\r\n\t\t\t\t\t\ttoken.value = \"{}\";\r\n\t\t\t\t\t\ttoken.raw = \"{}\";\r\n\t\t\t\t\t\ttoken.space = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"r_brace\":\r\n\t\t\t\t\tif( tokens.length > 0 && tokens[tokens.length-1].name === \"l_brace\" ) {\r\n\t\t\t\t\t\ttoken = tokens.pop();\r\n\t\t\t\t\t\ttoken.name = \"atom\";\r\n\t\t\t\t\t\ttoken.value = \"[]\";\r\n\t\t\t\t\t\ttoken.raw = \"[]\";\r\n\t\t\t\t\t\ttoken.space = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\ttoken.len = len;\r\n\t\t\ttokens.push( token );\r\n\t\t\tlast_is_blank = false;\r\n\t\t}\r\n\r\n\t\tvar t = this.set_last_tokens( tokens );\r\n\t\treturn t.length === 0 ? null : t;\r\n\t};\r\n\r\n\t// Parse an expression\r\n\tfunction parseExpr(thread, tokens, start, priority, toplevel) {\r\n\t\tif(!tokens[start]) return {type: ERROR, value: pl.error.syntax(tokens[start-1], \"expression expected\", true)};\r\n\t\tvar error;\r\n\r\n\t\tif(priority === \"0\") {\r\n\t\t\tvar token = tokens[start];\r\n\t\t\tswitch(token.name) {\r\n\t\t\t\tcase \"number\":\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Num(token.value, token.float)};\r\n\t\t\t\tcase \"variable\":\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Var(token.value)};\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tvar str;\r\n\t\t\t\t\tswitch( thread.get_flag( \"double_quotes\" ).id ) {\r\n\t\t\t\t\t\tcase \"atom\":;\r\n\t\t\t\t\t\t\tstr = new Term( token.value, [] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"codes\":\r\n\t\t\t\t\t\t\tstr = new Term( \"[]\", [] );\r\n\t\t\t\t\t\t\tfor(var i = token.value.length-1; i >= 0; i-- )\r\n\t\t\t\t\t\t\t\tstr = new Term( \".\", [new pl.type.Num( codePointAt(token.value,i), false ), str] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"chars\":\r\n\t\t\t\t\t\t\tstr = new Term( \"[]\", [] );\r\n\t\t\t\t\t\t\tfor(var i = token.value.length-1; i >= 0; i-- )\r\n\t\t\t\t\t\t\t\tstr = new Term( \".\", [new pl.type.Term( token.value.charAt(i), [] ), str] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: str};\r\n\t\t\t\tcase \"l_paren\":\r\n\t\t\t\t\tvar expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true);\r\n\t\t\t\t\tif(expr.type !== SUCCESS) return expr;\r\n\t\t\t\t\tif(tokens[expr.len] && tokens[expr.len].name === \"r_paren\") {\r\n\t\t\t\t\t\texpr.len++;\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], \") or operator expected\", !tokens[expr.len])}\r\n\t\t\t\tcase \"l_bracket\":\r\n\t\t\t\t\tvar expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true);\r\n\t\t\t\t\tif(expr.type !== SUCCESS) return expr;\r\n\t\t\t\t\tif(tokens[expr.len] && tokens[expr.len].name === \"r_bracket\") {\r\n\t\t\t\t\t\texpr.len++;\r\n\t\t\t\t\t\texpr.value = new Term( \"{}\", [expr.value] );\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], \"} or operator expected\", !tokens[expr.len])}\r\n\t\t\t}\r\n\t\t\t// Compound term\r\n\t\t\tvar result = parseTerm(thread, tokens, start, toplevel);\r\n\t\t\tif(result.type === SUCCESS || result.derived)\r\n\t\t\t\treturn result;\r\n\t\t\t// List\r\n\t\t\tresult = parseList(thread, tokens, start);\r\n\t\t\tif(result.type === SUCCESS || result.derived)\r\n\t\t\t\treturn result;\r\n\t\t\t// Unexpected\r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], token.error || \"unexpected token\")};\r\n\t\t}\r\n\r\n\t\tvar max_priority = thread.__get_max_priority();\r\n\t\tvar next_priority = thread.__get_next_priority(priority);\r\n\t\tvar aux_start = start;\r\n\t\t\r\n\t\t// Prefix operators\r\n\t\tif(tokens[start].name === \"atom\" && tokens[start+1] && (tokens[start].space || tokens[start+1].name !== \"l_paren\")) {\r\n\t\t\tvar token = tokens[start++];\r\n\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\t\t\t\r\n\t\t\t// Associative prefix operator\r\n\t\t\tif(classes && classes.indexOf(\"fy\") > -1) {\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, start, priority, toplevel);\r\n\t\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\t\tif( token.value === \"-\" && !token.space && pl.type.is_number( expr.value ) ) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Num(-expr.value.value, expr.value.is_float),\r\n\t\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = expr;\r\n\t\t\t\t}\r\n\t\t\t// Non-associative prefix operator\r\n\t\t\t} else if(classes && classes.indexOf(\"fx\") > -1) {\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, start, next_priority, toplevel);\r\n\t\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t};\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = expr;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tstart = aux_start;\r\n\t\tvar expr = parseExpr(thread, tokens, start, next_priority, toplevel);\r\n\t\tif(expr.type === SUCCESS) {\r\n\t\t\tstart = expr.len;\r\n\t\t\tvar token = tokens[start];\r\n\t\t\tif(tokens[start] && (\r\n\t\t\t\ttokens[start].name === \"atom\" && thread.__lookup_operator_classes(priority, token.value) ||\r\n\t\t\t\ttokens[start].name === \"bar\" && thread.__lookup_operator_classes(priority, \"|\")\r\n\t\t\t) ) {\r\n\t\t\t\tvar next_priority_lt = next_priority;\r\n\t\t\t\tvar next_priority_eq = priority;\r\n\t\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\r\n\t\t\t\tif(classes.indexOf(\"xf\") > -1) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\tlen: ++expr.len,\r\n\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t};\r\n\t\t\t\t} else if(classes.indexOf(\"xfx\") > -1) {\r\n\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, start + 1, next_priority_lt, toplevel);\r\n\t\t\t\t\tif(expr2.type === SUCCESS) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\tlen: expr2.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(classes.indexOf(\"xfy\") > -1) {\r\n\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, start + 1, next_priority_eq, toplevel);\r\n\t\t\t\t\tif(expr2.type === SUCCESS) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\tlen: expr2.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(expr.type !== ERROR) {\r\n\t\t\t\t\twhile(true) {\r\n\t\t\t\t\t\tstart = expr.len;\r\n\t\t\t\t\t\tvar token = tokens[start];\r\n\t\t\t\t\t\tif(token && token.name === \"atom\" && thread.__lookup_operator_classes(priority, token.value)) {\r\n\t\t\t\t\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\t\t\t\t\t\t\tif( classes.indexOf(\"yf\") > -1 ) {\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\t\t\t\tlen: ++start,\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t} else if( classes.indexOf(\"yfx\") > -1 ) {\r\n\t\t\t\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, ++start, next_priority_lt, toplevel);\r\n\t\t\t\t\t\t\t\tif(expr2.type === ERROR) {\r\n\t\t\t\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstart = expr2.len;\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t} else { break; }\r\n\t\t\t\t\t\t} else { break; }\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\terror = {type: ERROR, value: pl.error.syntax(tokens[expr.len-1], \"operator expected\")};\r\n\t\t\t}\r\n\t\t\treturn expr;\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\r\n\t// Parse a compound term\r\n\tfunction parseTerm(thread, tokens, start, toplevel) {\r\n\t\tif(!tokens[start] || (tokens[start].name === \"atom\" && tokens[start].raw === \".\" && !toplevel && (tokens[start].space || !tokens[start+1] || tokens[start+1].name !== \"l_paren\")))\r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], \"unfounded token\")};\r\n\t\tvar atom = tokens[start];\r\n\t\tvar exprs = [];\r\n\t\tif(tokens[start].name === \"atom\" && tokens[start].raw !== \",\") {\r\n\t\t\tstart++;\r\n\t\t\tif(tokens[start-1].space) return {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)};\r\n\t\t\tif(tokens[start] && tokens[start].name === \"l_paren\") {\r\n\t\t\t\tif(tokens[start+1] && tokens[start+1].name === \"r_paren\") \r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1], \"argument expected\")};\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, ++start, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \"argument expected\", !tokens[start])};\r\n\t\t\t\t}\r\n\t\t\t\texprs.push(expr.value);\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t\twhile(tokens[start] && tokens[start].name === \"atom\" && tokens[start].value === \",\") {\r\n\t\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t\t}\r\n\t\t\t\t\texprs.push(expr.value);\r\n\t\t\t\t\tstart = expr.len;\r\n\t\t\t\t}\r\n\t\t\t\tif(tokens[start] && tokens[start].name === \"r_paren\") start++;\r\n\t\t\t\telse return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \", or ) expected\", !tokens[start])};\r\n\t\t\t}\r\n\t\t\treturn {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)};\r\n\t\t}\r\n\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], \"term expected\")};\r\n\t}\r\n\r\n\t// Parse a list\r\n\tfunction parseList(thread, tokens, start) {\r\n\t\tif(!tokens[start]) \r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], \"[ expected\")};\r\n\t\tif(tokens[start] && tokens[start].name === \"l_brace\") {\r\n\t\t\tvar expr = parseExpr(thread, tokens, ++start, \"999\", true);\r\n\t\t\tvar exprs = [expr.value];\r\n\t\t\tvar cons = undefined;\r\n\r\n\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\tif(tokens[start] && tokens[start].name === \"r_brace\") {\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Term(\"[]\", [])};\r\n\t\t\t\t}\r\n\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start], \"] expected\")};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tstart = expr.len;\r\n\r\n\t\t\twhile(tokens[start] && tokens[start].name === \"atom\" && tokens[start].value === \",\") {\r\n\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t}\r\n\t\t\t\texprs.push(expr.value);\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t}\r\n\t\t\tvar bar = false\r\n\t\t\tif(tokens[start] && tokens[start].name === \"bar\") {\r\n\t\t\t\tbar = true;\r\n\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t}\r\n\t\t\t\tcons = expr.value;\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t}\r\n\t\t\tif(tokens[start] && tokens[start].name === \"r_brace\")\r\n\t\t\t\treturn {type: SUCCESS, len: start+1, value: arrayToList(exprs, cons) };\r\n\t\t\telse\r\n\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], bar ? \"] expected\" : \", or | or ] expected\", !tokens[start])};\r\n\t\t}\r\n\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], \"list expected\")};\r\n\t}\r\n\r\n\t// Parse a rule\r\n\tfunction parseRule(thread, tokens, start) {\r\n\t\tvar line = tokens[start].line;\r\n\t\tvar expr = parseExpr(thread, tokens, start, thread.__get_max_priority(), false);\r\n\t\tvar rule = null;\r\n\t\tvar obj;\r\n\t\tif(expr.type !== ERROR) {\r\n\t\t\tstart = expr.len;\r\n\t\t\tif(tokens[start] && tokens[start].name === \"atom\" && tokens[start].raw === \".\") {\r\n\t\t\t\tstart++;\r\n\t\t\t\tif( pl.type.is_term(expr.value) ) {\r\n\t\t\t\t\tif(expr.value.indicator === \":-/2\") {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1]));\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else if(expr.value.indicator === \"-->/2\") {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1]));\r\n\t\t\t\t\t\trule = rule_to_dcg(rule, thread);\r\n\t\t\t\t\t\trule.body = body_conversion(rule.body);\r\n\t\t\t\t\t\tif(!pl.type.is_rule(rule))\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\t\ttype: ERROR\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: pl.type.is_rule( rule ) ? SUCCESS : ERROR\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value, null);\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( rule ) {\r\n\t\t\t\t\t\tvar singleton = rule.singleton_variables();\r\n\t\t\t\t\t\tif( singleton.length > 0 )\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.warning.singleton( singleton, rule.head.indicator, line ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn obj;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn { type: ERROR, value: pl.error.syntax(tokens[start], \"callable expected\") };\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn { type: ERROR, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \". or operator expected\") };\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\r\n\t// Parse a program\r\n\tfunction parseProgram(thread, string, options) {\r\n\t\tvar opts = {};\r\n\t\toptions = options ? options : {};\r\n\t\topts.success = options.success ? options.success : function(){};\r\n\t\topts.error = options.error ? options.error : function(){};\r\n\t\topts.from = options.from ? options.from : \"$tau-js\";\r\n\t\topts.reconsult = options.reconsult !== undefined ? options.reconsult : true;\r\n\t\topts.reconsulted = options.reconsulted === undefined ? {} : options.reconsulted;\r\n\t\topts.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\topts.initialization = options.initialization === undefined ? [] : options.initialization;\r\n\t\topts.current_token = options.current_token === undefined ? 0 : options.current_token;\r\n\t\topts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer;\r\n\t\topts.tokens = options.tokens === undefined ? null : options.tokens;\r\n\t\topts.string = string;\r\n\t\topts.term_expansion = false;\r\n\t\tvar reconsulted = opts.reconsulted;\r\n\t\tvar tokenizer = opts.tokenizer;\r\n\t\tvar tokens = opts.tokens;\r\n\t\tif(tokenizer === null) {\r\n\t\t\ttokenizer = new Tokenizer(thread);\r\n\t\t\ttokenizer.new_text(string);\r\n\t\t\topts.tokenizer = tokenizer;\r\n\t\t\ttokens = tokenizer.get_tokens(0);\r\n\t\t\topts.tokens = tokens;\r\n\t\t}\r\n\t\tvar n = opts.current_token;\r\n\t\twhile(tokens !== null && tokens[n]) {\r\n\t\t\tvar expr = parseRule(thread, tokens, n);\r\n\t\t\topts.current_token = expr.len;\r\n\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\tif(opts.error !== undefined)\r\n\t\t\t\topts.error(new Term(\"throw\", [expr.value]));\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\t// Term expansion\r\n\t\t\t\tvar context_module = opts.context_module;\r\n\t\t\t\tvar term_expansion = thread.session.modules[context_module].rules[\"term_expansion/2\"];\r\n\t\t\t\tif(term_expansion && term_expansion.length > 0) {\r\n\t\t\t\t\topts.term_expansion = true;\r\n\t\t\t\t\tvar n_thread = new Thread(thread.session);\r\n\t\t\t\t\tvar term = expr.value.body ? new Term(\":-\", [expr.value.head, expr.value.body]) : expr.value.head;\r\n\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\tterm = term.rename(thread.session);\r\n\t\t\t\t\tn_thread.query(context_module + \":term_expansion(\" + term.toString({quoted: true}) + \", X).\");\r\n\t\t\t\t\tn_thread.answer((function(thread, opts, reconsulted, expr) {\r\n\t\t\t\t\t\treturn function(answer) {\r\n\t\t\t\t\t\t\tif(answer && !pl.type.is_error(answer) && pl.type.is_term(answer.links['X'])) {\r\n\t\t\t\t\t\t\t\tvar term = answer.links['X'];\r\n\t\t\t\t\t\t\t\tvar rule = term.indicator === \":-/2\" ? new Rule(term.args[0], term.args[1]) : new Rule(term, null);\r\n\t\t\t\t\t\t\t\tparseProgramExpansion(thread, opts, reconsulted, {value: rule, len: expr.len, type: expr.type});\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tparseProgramExpansion(thread, opts, reconsulted, expr);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})(thread, opts, reconsulted, expr));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\topts.term_expansion = false;\r\n\t\t\t\t\tvar async = parseProgramExpansion(thread, opts, reconsulted, expr);\r\n\t\t\t\t\tif(async)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\tn = expr.len;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// run goals from initialization/1 directive\r\n\t\tvar callback = opts.success;\r\n\t\tvar nthread = new Thread(thread.session);\r\n\t\tfor(var i = opts.initialization.length-1; i > 0; i--) {\r\n\t\t\tvar next_callback = (function(init, callback) {\r\n\t\t\t\treturn function(answer) {\r\n\t\t\t\t\tif(answer === null) {\r\n\t\t\t\t\t\tnthread.answer();\r\n\t\t\t\t\t} else if(pl.type.is_error(answer)) {\r\n\t\t\t\t\t\topts.error(answer);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnthread.add_goal(init);\r\n\t\t\t\t\t\tnthread.answer(callback);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t})(opts.initialization[i], callback);\r\n\t\t\tcallback = next_callback;\r\n\t\t}\r\n\t\tif(opts.initialization.length > 0) {\r\n\t\t\tnthread.add_goal(opts.initialization[0]);\r\n\t\t\tnthread.answer(callback);\r\n\t\t} else {\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseGoalExpansion(thread, options, expr) {\r\n\t\tvar n_thread = new Thread( thread.session );\r\n\t\tn_thread.__goal_expansion = true;\r\n\t\tvar varterm = thread.next_free_variable();\r\n\t\tvar varhead = thread.next_free_variable();\r\n\t\tvar goal = varhead + \" = \" + expr.value.head + \", goal_expansion(\" + expr.value.body.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \", \" + varterm.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \").\";\r\n\t\tn_thread.query(goal);\r\n\t\tn_thread.answer(function(answer) {\r\n\t\t\tif(answer && !pl.type.is_error(answer) && answer.links[varterm]) {\r\n\t\t\t\texpr.value.head = answer.links[varhead];\r\n\t\t\t\texpr.value.body = body_conversion(answer.links[varterm]);\r\n\t\t\t\tparseGoalExpansion(thread, options, expr);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_rule(expr.value, options);\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction parseQueryExpansion(thread, term, options) {\r\n\t\tvar n_thread = new Thread(thread.session);\r\n\t\tn_thread.__goal_expansion = true;\r\n\t\tvar varterm = thread.next_free_variable();\r\n\t\tvar goal = \"goal_expansion(\" + term.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \", \" + varterm.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \").\";\r\n\t\tn_thread.query(goal);\r\n\t\tvar variables = n_thread.head_point().substitution.domain();\r\n\t\tn_thread.answer(function(answer) {\r\n\t\t\tif(answer && !pl.type.is_error(answer) && answer.links[varterm]) {\r\n\t\t\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\t\t\tif(variables[i] !== varterm.id && answer.links[variables[i]]) {\r\n\t\t\t\t\t\tvar subs = new Substitution();\r\n\t\t\t\t\t\tsubs.links[answer.links[variables[i]]] = variables[i];\r\n\t\t\t\t\t\tanswer.links[varterm] = answer.links[varterm].apply( subs );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tparseQueryExpansion(thread, body_conversion(answer.links[varterm]), options);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_goal(term);\r\n\t\t\t\toptions.success(term);\r\n\t\t\t\tparseQuery(thread, options.string, options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction parseProgramExpansion(thread, options, reconsulted, expr) {\r\n\t\tvar async = options.term_expansion === true;\r\n\t\tif(expr.value.body === null && expr.value.head.indicator === \"?-/1\") {\r\n\t\t\tasync = true;\r\n\t\t\tvar n_thread = new Thread(thread.session);\r\n\t\t\tn_thread.add_goal(expr.value.head.args[0]);\r\n\t\t\tn_thread.answer(function(answer) {\r\n\t\t\t\tif(pl.type.is_error(answer)) {\r\n\t\t\t\t\tthread.throw_warning(answer.args[0]);\r\n\t\t\t\t} else if(answer === false || answer === null) {\r\n\t\t\t\t\tthread.throw_warning(pl.warning.failed_goal(expr.value.head.args[0], expr.len));\r\n\t\t\t\t}\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t});\r\n\t\t} else if(expr.value.body === null && expr.value.head.indicator === \":-/1\") {\r\n\t\t\tvar result = thread.run_directive(expr.value.head.args[0], options);\r\n\t\t\tasync = async || (result === true);\r\n\t\t\tif(async)\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t} else {\r\n\t\t\tvar context_module = options.context_module;\r\n\t\t\tvar indicator = expr.value.head.indicator;\r\n\t\t\tif(expr.value.head.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = expr.value.head.args[0].id;\r\n\t\t\t\tindicator = expr.value.head.args[1].indicator;\r\n\t\t\t}\r\n\t\t\tif(!reconsulted.hasOwnProperty(context_module))\r\n\t\t\t\treconsulted[context_module] = {};\r\n\t\t\tif(options.reconsult !== false && reconsulted[context_module][indicator] !== true && !thread.is_multifile_predicate(indicator)) {\r\n\t\t\t\tvar get_module = thread.session.modules[context_module];\r\n\t\t\t\tif(context_module !== \"system\" && get_module && get_module.rules[indicator]) {\r\n\t\t\t\t\tget_module.rules[indicator] = filter(get_module.rules[indicator], function(rule) {\r\n\t\t\t\t\t\treturn rule.dynamic;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tget_module.update_indices_predicate(indicator);\r\n\t\t\t\t}\r\n\t\t\t\treconsulted[context_module][indicator] = true;\r\n\t\t\t}\r\n\t\t\tvar goal_expansion = thread.session.modules.user.rules[\"goal_expansion/2\"];\r\n\t\t\tif(expr.value.body !== null && goal_expansion && goal_expansion.length > 0) {\r\n\t\t\t\tasync = true;\r\n\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\tvar origin = {\r\n\t\t\t\t\thead: function() { return expr.value.head; },\r\n\t\t\t\t\tterm: function() { return expr.value.body; },\r\n\t\t\t\t\tset: function(h, p){\r\n\t\t\t\t\t\texpr.value.head = h;\r\n\t\t\t\t\t\texpr.value.body = p;\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tparseGoalExpansion(thread, options, expr, body_conversion(expr.value.body), origin.set, origin);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_rule(expr.value, options);\r\n\t\t\t\tif(async)\r\n\t\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn async;\r\n\t}\r\n\t\r\n\t// Parse a query\r\n\tfunction parseQuery(thread, string, options) {\r\n\t\tvar opts = {};\r\n\t\tvar callback = typeof options === \"function\" ? options : function(){};\r\n\t\toptions = options === undefined || typeof options === \"function\" ? {} : options;\r\n\t\topts.success = options.success === undefined ? callback : options.success;\r\n\t\topts.error = options.error === undefined ? callback : options.error;\r\n\t\topts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer;\r\n\t\topts.current_token = options.current_token === undefined ? 0 : options.current_token;\r\n\t\topts.string = string;\r\n\t\tvar tokenizer = opts.tokenizer;\r\n\t\tvar n = opts.current_token;\r\n\t\tif(tokenizer === null) {\r\n\t\t\ttokenizer = new Tokenizer(thread);\r\n\t\t\topts.tokenizer = tokenizer;\r\n\t\t\ttokenizer.new_text(string);\r\n\t\t}\r\n\t\tdo {\r\n\t\t\tvar tokens = tokenizer.get_tokens(n);\r\n\t\t\tif(tokens === null)\r\n\t\t\t\tbreak;\r\n\t\t\tvar expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false);\r\n\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\tvar expr_position = expr.len;\r\n\t\t\t\tn = expr.len + 1;\r\n\t\t\t\topts.current_token = n;\r\n\t\t\t\tif(tokens[expr_position] && tokens[expr_position].name === \"atom\" && tokens[expr_position].raw === \".\") {\r\n\t\t\t\t\texpr.value = body_conversion(expr.value);\r\n\t\t\t\t\t// Goal expansion\r\n\t\t\t\t\tvar goal_expansion = thread.session.modules.user.rules[\"goal_expansion/2\"];\r\n\t\t\t\t\tif(!thread.__goal_expansion && goal_expansion && goal_expansion.length > 0) {\r\n\t\t\t\t\t\tparseQueryExpansion(thread, expr.value, opts);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.add_goal(expr.value);\r\n\t\t\t\t\t\topts.success(expr.value);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar token = tokens[expr_position];\r\n\t\t\t\t\topts.error(\r\n\t\t\t\t\t\tnew Term(\"throw\", [\r\n\t\t\t\t\t\t\tpl.error.syntax(\r\n\t\t\t\t\t\t\t\ttoken ? token : tokens[expr_position-1],\r\n\t\t\t\t\t\t\t\ttoken && token.error ? token.error : \". or operator expected\",\r\n\t\t\t\t\t\t\t\t!token\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t])\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\topts.error(new Term(\"throw\", [expr.value]));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} while(true);\r\n\t}\r\n\r\n\r\n\t\r\n\t// UTILS\r\n\r\n\t// Rule to DCG\r\n\tfunction rule_to_dcg(rule, thread) {\r\n\t\tthread.session.renamed_variables = {};\r\n\t\trule = rule.rename(thread);\r\n\t\tvar begin = thread.next_free_variable();\r\n\t\tvar dcg = body_to_dcg( rule.body, begin, thread );\r\n\t\tif( dcg.error )\r\n\t\t\treturn dcg.value;\r\n\t\trule.body = dcg.value;\r\n\t\t// push-back lists\r\n\t\tif(rule.head.indicator === \",/2\") {\r\n\t\t\tvar terminals = rule.head.args[1];\r\n\t\t\trule.head = rule.head.args[0];\r\n\t\t\tvar last = thread.next_free_variable();\r\n\t\t\tvar pointer = terminals;\r\n\t\t\tif(!pl.type.is_list(pointer)) {\r\n\t\t\t\treturn pl.error.type(\"list\", pointer, \"DCG/0\");\r\n\t\t\t}\r\n\t\t\tif(pointer.indicator === \"[]/0\") {\r\n\t\t\t\tterminals = dcg.variable;\r\n\t\t\t} else {\r\n\t\t\t\twhile(pointer.indicator === \"./2\" && pl.type.is_list(pointer) && pointer.args[1].indicator !== \"[]/0\") {\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer))\r\n\t\t\t\t\treturn pl.error.instantiation(\"DCG/0\");\r\n\t\t\t\telse if(!pl.type.is_list(pointer))\r\n\t\t\t\t\treturn pl.error.type(\"list\", terminals, \"DCG/0\");\r\n\t\t\t\tpointer.args[1] = dcg.variable;\r\n\t\t\t}\r\n\t\t\trule.body = new Term(\",\", [rule.body, new Term(\"=\", [last, terminals])]);\r\n\t\t\trule.head = new Term(rule.head.id, rule.head.args.concat([begin, last]));\r\n\t\t} else {\r\n\t\t\t// replace first assignment\r\n\t\t\tvar first_assign = rule.body;\r\n\t\t\tif(pl.type.is_term(first_assign) && first_assign.indicator === \",/2\")\r\n\t\t\t\tfirst_assign = first_assign.args[0];\r\n\t\t\tif(pl.type.is_term(first_assign) && first_assign.indicator === \"=/2\" &&\r\n\t\t\t pl.type.is_variable(first_assign.args[0]) && first_assign.args[0] === begin) {\r\n\t\t\t\tbegin = first_assign.args[1];\r\n\t\t\t\trule.body = rule.body.replace(null);\r\n\t\t\t}\r\n\t\t\t// add first and last variables to the head\r\n\t\t\tif(rule.head.indicator === \":/2\")\r\n\t\t\t\trule.head = new Term(\":\", [\r\n\t\t\t\t\tnew Term(rule.head.args[0].id, []),\r\n\t\t\t\t\tnew Term(rule.head.args[1].id, rule.head.args[1].args.concat([begin, dcg.variable]))\r\n\t\t\t\t]);\r\n\t\t\telse\r\n\t\t\t\trule.head = new Term(rule.head.id, rule.head.args.concat([begin, dcg.variable]));\r\n\t\t}\r\n\t\treturn rule;\r\n\t}\r\n\r\n\t// Body to DCG\r\n\tfunction body_to_dcg(expr, last, thread) {\r\n\t\tvar free;\r\n\t\tif( pl.type.is_term( expr ) && expr.indicator === \"!/0\" ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [expr, new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \":/2\" ) {\r\n\t\t\tvar right = body_to_dcg(expr.args[1], last, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\":\", [expr.args[0], right.value]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \"\\\\+/1\" ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [new Term(expr.id, [left.value]), new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && (expr.indicator === \",/2\" || expr.indicator === \"->/2\") ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tvar right = body_to_dcg(expr.args[1], left.variable, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(expr.id, [left.value, right.value]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \";/2\" ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tvar right = body_to_dcg(expr.args[1], last, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [new Term(\";\", [left.value, right.value]), new Term(\"=\", [left.variable, right.variable])]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \"{}/1\" ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [expr.args[0], new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_empty_list( expr ) ) {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\"true\", []),\r\n\t\t\t\tvariable: last,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_list( expr ) ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\tvar pointer = expr;\r\n\t\t\tvar prev;\r\n\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\tprev = pointer;\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: pl.error.instantiation(\"DCG/0\"),\r\n\t\t\t\t\tvariable: last,\r\n\t\t\t\t\terror: true\r\n\t\t\t\t};\r\n\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: pl.error.type(\"list\", expr, \"DCG/0\"),\r\n\t\t\t\t\tvariable: last,\r\n\t\t\t\t\terror: true\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\tprev.args[1] = free;\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: new Term(\"=\", [last, expr]),\r\n\t\t\t\t\tvariable: free,\r\n\t\t\t\t\terror: false\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} else if( pl.type.is_callable( expr ) ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\texpr = new Term( expr.id, expr.args.concat([last,free]) );\r\n\t\t\treturn {\r\n\t\t\t\tvalue: expr,\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: pl.error.type( \"callable\", expr, \"DCG/0\" ),\r\n\t\t\t\tvariable: last,\r\n\t\t\t\terror: true\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\t\r\n\t// Body conversion\r\n\tfunction body_conversion( expr ) {\r\n\t\tif( pl.type.is_variable( expr ) )\r\n\t\t\treturn new Term( \"call\", [expr] );\r\n\t\telse if( pl.type.is_term( expr ) && [\",/2\", \";/2\", \"->/2\"].indexOf(expr.indicator) !== -1 )\r\n\t\t\treturn new Term( expr.id, [body_conversion( expr.args[0] ), body_conversion( expr.args[1] )] );\r\n\t\telse if( pl.type.is_term(expr) && expr.indicator === \":/2\" ) {\r\n\t\t\tvar body = body_conversion(expr.args[1]);\r\n\t\t\treturn new Term(\":\", [expr.args[0], body]);\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\t\r\n\t// List to Prolog list\r\n\tfunction arrayToList( array, cons ) {\r\n\t\tvar list = cons ? cons : new Term( \"[]\", [] );\r\n\t\tfor(var i = array.length-1; i >= 0; i-- )\r\n\t\t\tlist = new Term( \".\", [array[i], list] );\r\n\t\treturn list;\r\n\t}\r\n\r\n\t// Array difference\r\n\tfunction difference(xs, ys) {\r\n\t\tvar zs = [];\r\n\t\tfor(var i = 0; i < xs.length; i++) {\r\n\t\t\tif(indexOf(zs, xs[i]) === -1 && indexOf(ys, xs[i]) === -1)\r\n\t\t\t\tzs.push(xs[i]);\r\n\t\t}\r\n\t\treturn zs;\r\n\t}\r\n\t\r\n\t// Remove element from array\r\n\tfunction remove( array, element ) {\r\n\t\tfor( var i = array.length - 1; i >= 0; i-- ) {\r\n\t\t\tif( array[i] === element ) {\r\n\t\t\t\tarray.splice(i, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// Remove duplicate elements\r\n\tfunction nub( array ) {\r\n\t\tvar seen = {};\r\n\t\tvar unique = [];\r\n\t\tfor( var i = 0; i < array.length; i++ ) {\r\n\t\t\tif( !(array[i] in seen) ) {\r\n\t\t\t\tunique.push( array[i] );\r\n\t\t\t\tseen[array[i]] = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn unique;\r\n\t}\r\n\r\n\t// Retract a rule\r\n\tfunction retract(thread, point, indicator, rule, get_module) {\r\n\t\tif(get_module.rules[indicator]) {\r\n\t\t\tfor(var i = 0; i < get_module.rules[indicator].length; i++) {\r\n\t\t\t\tif(get_module.rules[indicator][i] === rule) {\r\n\t\t\t\t\tget_module.rules[indicator].splice(i, 1);\r\n\t\t\t\t\tget_module.update_indices_predicate(indicator);\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// call/n\r\n\tfunction callN(n) {\r\n\t\treturn function(thread, point, atom) {\r\n\t\t\tvar closure = atom.args[0], args = atom.args.slice(1, n);\r\n\t\t\tvar module_atom;\r\n\t\t\tif(pl.type.is_term(closure) && closure.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(closure.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", closure.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_atom = closure.args[0];\r\n\t\t\t\tclosure = closure.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(closure)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(closure)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", closure, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar goal = body_conversion(new Term(closure.id, closure.args.concat(args)));\r\n\t\t\t\tif(!pl.type.is_callable(goal)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(module_atom)\r\n\t\t\t\t\tgoal = new Term(\":\", [module_atom, goal]);\r\n\t\t\t\tthread.prepend([new State(point.goal.replace(goal), point.substitution, point)]);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\r\n\t// String to indicator\r\n\tfunction str_indicator( str ) {\r\n\t\tfor( var i = str.length - 1; i >= 0; i-- )\r\n\t\t\tif( str.charAt(i) === \"/\" )\r\n\t\t\t\treturn new Term( \"/\", [new Term( str.substring(0, i) ), new Num( parseInt(str.substring(i+1)), false )] );\r\n\t}\r\n\r\n\t// Greatest common divisor\r\n\tfunction gcd(a, b) {\r\n\t\tif(b === 0)\r\n\t\t\treturn a;\r\n\t\treturn Math.abs(gcd(b, a % b));\r\n\t}\r\n\t\r\n\t\r\n\r\n\t// PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tfunction Var( id ) {\r\n\t\tthis.id = id;\r\n\t\tthis.ground = false;\r\n\t}\r\n\t\r\n\t// Numbers\r\n\tfunction Num( value, is_float ) {\r\n\t\tthis.is_float = is_float !== undefined ? is_float : Math.trunc(value) !== value;\r\n\t\tthis.value = this.is_float ? value : Math.trunc(value);\r\n\t\tthis.index = this.value;\r\n\t\tthis.ground = true;\r\n\t}\r\n\t\r\n\t// Terms\r\n\tvar term_ref = 0;\r\n\tfunction Term( id, args, ref ) {\r\n\t\tterm_ref++;\r\n\t\tthis.ref = ref || term_ref;\r\n\t\tthis.id = id;\r\n\t\tthis.args = args || [];\r\n\t\tthis.indicator = id + \"/\" + this.args.length;\r\n\t\tthis.index = this.indicator;\r\n\t\tthis.ground = true;\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tif(this.args[i].hasOwnProperty(\"ground\") && this.args[i].ground === false) {\r\n\t\t\t\tthis.ground = false;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Streams\r\n\tvar stream_ref = 0;\r\n\tfunction Stream( stream, mode, alias, type, reposition, eof_action ) {\r\n\t\tthis.id = stream_ref++;\r\n\t\tthis.stream = stream;\r\n\t\tthis.mode = mode; // \"read\" or \"write\" or \"append\"\r\n\t\tthis.alias = alias;\r\n\t\tthis.type = type !== undefined ? type : \"text\"; // \"text\" or \"binary\"\r\n\t\tthis.reposition = reposition !== undefined ? reposition : true; // true or false\r\n\t\tthis.eof_action = eof_action !== undefined ? eof_action : \"eof_code\"; // \"error\" or \"eof_code\" or \"reset\"\r\n\t\tthis.position = this.mode === \"append\" ? \"end_of_stream\" : 0;\r\n\t\tthis.output = this.mode === \"write\" || this.mode === \"append\";\r\n\t\tthis.input = this.mode === \"read\";\r\n\t\tthis.line_position = 0;\r\n\t\tthis.line_count = 1;\r\n\t\tthis.char_count = 0;\r\n\t}\r\n\t\r\n\t// Substitutions\r\n\tfunction Substitution( links, attrs ) {\r\n\t\tlinks = links || {};\r\n\t\tattrs = attrs || {};\r\n\t\tthis.links = links;\r\n\t\tthis.attrs = attrs;\r\n\t}\r\n\t\r\n\t// States\r\n\tfunction State( goal, subs, parent ) {\r\n\t\tsubs = subs || new Substitution();\r\n\t\tparent = parent || null;\r\n\t\tthis.goal = goal;\r\n\t\tthis.substitution = subs;\r\n\t\tthis.parent = parent;\r\n\t}\r\n\t\r\n\t// Rules\r\n\tfunction Rule( head, body, dynamic ) {\r\n\t\tthis.head = head;\r\n\t\tthis.body = body;\r\n\t\tthis.dynamic = dynamic ? dynamic : false;\r\n\t}\r\n\r\n\t// Session\r\n\tfunction Session( limit ) {\r\n\t\tlimit = typeof limit === \"number\" && limit > 0 ? limit : null;\r\n\t\tthis.rename = 0;\r\n\t\tthis.modules = {};\r\n\t\tthis.modules.user = new Module(\"user\", {}, \"all\", {\r\n\t\t\tsession: this,\r\n\t\t\tdependencies: [\"system\"]\r\n\t\t});\r\n\t\tthis.modules.system = pl.modules.system;\r\n\t\tthis.rules = this.modules.user.rules;\r\n\t\tthis.total_threads = 0;\r\n\t\tthis.renamed_variables = {};\r\n\t\tthis.public_predicates = this.modules.user.public_predicates;\r\n\t\tthis.multifile_predicates = this.modules.user.multifile_predicates;\r\n\t\tthis.limit = limit;\r\n\t\tthis.streams = {\r\n\t\t\t\"user_input\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_input : tau_user_input,\r\n\t\t\t\t\"read\", \"user_input\", \"text\", false, \"reset\" ),\r\n\t\t\t\"user_output\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_output : tau_user_output,\r\n\t\t\t\t\"append\", \"user_output\", \"text\", false, \"reset\" ),\r\n\t\t\t\"user_error\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_error : tau_user_error,\r\n\t\t\t\t\"append\", \"user_error\", \"text\", false, \"reset\" ),\r\n\t\t};\r\n\t\tthis.file_system = nodejs_flag ? nodejs_file_system : tau_file_system;\r\n\t\tthis.standard_input = this.streams[\"user_input\"];\r\n\t\tthis.standard_output = this.streams[\"user_output\"];\r\n\t\tthis.standard_error = this.streams[\"user_error\"];\r\n\t\tthis.current_input = this.streams[\"user_input\"];\r\n\t\tthis.current_output = this.streams[\"user_output\"];\r\n\t\tthis.working_directory = \"/\"; // only for browser\r\n\t\tthis.format_success = function( state ) { return state.substitution; };\r\n\t\tthis.format_error = function( state ) { return state.goal; };\r\n\t\tthis.flag = {\t\r\n\t\t\tbounded: pl.flag.bounded.value,\r\n\t\t\tmax_integer: pl.flag.max_integer.value,\r\n\t\t\tmin_integer: pl.flag.min_integer.value,\r\n\t\t\tinteger_rounding_function: pl.flag.integer_rounding_function.value,\r\n\t\t\tchar_conversion: pl.flag.char_conversion.value,\r\n\t\t\tdebug: pl.flag.debug.value,\r\n\t\t\tmax_arity: pl.flag.max_arity.value,\r\n\t\t\tunknown: pl.flag.unknown.value,\r\n\t\t\tdouble_quotes: pl.flag.double_quotes.value,\r\n\t\t\toccurs_check: pl.flag.occurs_check.value,\r\n\t\t\tdialect: pl.flag.dialect.value,\r\n\t\t\tversion_data: pl.flag.version_data.value,\r\n\t\t\tnodejs: pl.flag.nodejs.value,\r\n\t\t\targv: pl.flag.argv.value\r\n\t\t};\r\n\t\tthis.__loaded_modules = [];\r\n\t\tthis.__char_conversion = {};\r\n\t\tthis.__operators = {\r\n\t\t\t1200: { \":-\": [\"fx\", \"xfx\"], \"-->\": [\"xfx\"], \"?-\": [\"fx\"] },\r\n\t\t\t1150: { \"meta_predicate\": [\"fx\"] },\r\n\t\t\t1100: { \";\": [\"xfy\"] },\r\n\t\t\t1050: { \"->\": [\"xfy\"], \"*->\": [\"xfy\"] },\r\n\t\t\t1000: { \",\": [\"xfy\"] },\r\n\t\t\t900: { \"\\\\+\": [\"fy\"] },\r\n\t\t\t700: {\r\n\t\t\t\t\"=\": [\"xfx\"], \"\\\\=\": [\"xfx\"], \"==\": [\"xfx\"], \"\\\\==\": [\"xfx\"],\r\n\t\t\t\t\"@<\": [\"xfx\"], \"@=<\": [\"xfx\"], \"@>\": [\"xfx\"], \"@>=\": [\"xfx\"],\r\n\t\t\t\t\"=..\": [\"xfx\"], \"is\": [\"xfx\"], \"=:=\": [\"xfx\"], \"=\\\\=\": [\"xfx\"],\r\n\t\t\t\t\"<\": [\"xfx\"], \"=<\": [\"xfx\"], \">\": [\"xfx\"], \">=\": [\"xfx\"]\r\n\t\t\t},\r\n\t\t\t600: { \":\": [\"xfy\"] },\r\n\t\t\t500: { \"+\": [\"yfx\"], \"-\": [\"yfx\"], \"/\\\\\": [\"yfx\"], \"\\\\/\": [\"yfx\"] },\r\n\t\t\t400: {\r\n\t\t\t\t\"*\": [\"yfx\"], \"/\": [\"yfx\"], \"//\": [\"yfx\"], \"rem\": [\"yfx\"],\r\n\t\t\t\t\"mod\": [\"yfx\"], \"<<\": [\"yfx\"], \">>\": [\"yfx\"], \"div\": [\"yfx\"]\r\n\t\t\t},\r\n\t\t\t200: { \"**\": [\"xfx\"], \"^\": [\"xfy\"], \"-\": [\"fy\"], \"+\": [\"fy\"], \"\\\\\": [\"fy\"] }\r\n\t\t};\r\n\t\tthis.thread = new Thread( this );\r\n\t}\r\n\t\r\n\t// Threads\r\n\tfunction Thread( session ) {\r\n\t\tthis.epoch = Date.now();\r\n\t\tthis.session = session;\r\n\t\tthis.session.total_threads++;\r\n\t\tthis.format_success = session.format_success;\r\n\t\tthis.format_error = session.format_error;\r\n\t\tthis.total_steps = 0;\r\n\t\tthis.cpu_time = 0;\r\n\t\tthis.points = [];\r\n\t\tthis.debugger = false;\r\n\t\tthis.debugger_states = [];\r\n\t\tthis.level = new Term(\"top_level\");\r\n\t\tthis.current_limit = this.session.limit;\r\n\t\tthis.has_limit = this.session.limit !== null;\r\n\t\tthis.warnings = [];\r\n\t\tthis.__calls = [];\r\n\t\tthis.__goal_expansion = false;\r\n\t\tthis.__stacks = {};\r\n\t}\r\n\t\r\n\t// Modules\r\n\tfunction Module(id, rules, exports, options) {\r\n\t\toptions = options === undefined ? {} : options;\r\n\t\toptions.public_predicates = options.public_predicates === undefined ? {} : options.public_predicates;\r\n\t\toptions.multifile_predicates = options.multifile_predicates === undefined ? {} : options.multifile_predicates;\r\n\t\toptions.meta_predicates = options.meta_predicates === undefined ? {} : options.meta_predicates;\r\n\t\toptions.session = options.session === undefined ? null : options.session;\r\n\t\toptions.dependencies = options.dependencies === undefined ? [] : options.dependencies;\r\n\t\tthis.id = id;\r\n\t\tthis.rules = rules;\r\n\t\tthis.indexed_clauses = {};\r\n\t\tthis.non_indexable_clauses = {};\r\n\t\tthis.public_predicates = options.public_predicates;\r\n\t\tthis.multifile_predicates = options.multifile_predicates;\r\n\t\tthis.meta_predicates = options.meta_predicates;\r\n\t\tthis.src_predicates = {};\r\n\t\tthis.dependencies = options.dependencies;\r\n\t\tthis.exports = exports;\r\n\t\tthis.is_library = options.session === null;\r\n\t\tthis.modules = {};\r\n\t\tif(options.session) {\r\n\t\t\toptions.session.modules[id] = this;\r\n\t\t\tfor(var i = 0; i < options.dependencies.length; i++) {\r\n\t\t\t\tvar lib = options.dependencies[i];\r\n\t\t\t\tif(!options.session.modules.hasOwnProperty(lib))\r\n\t\t\t\t\toptions.session.modules[lib] = pl.modules[lib];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tpl.modules[id] = this;\r\n\t\t}\r\n\t\tif(exports !== \"all\") {\r\n\t\t\tfor(var i = 0; i < exports.length; i++) {\r\n\t\t\t\tthis.public_predicates[exports[i]] =\r\n\t\t\t\t\toptions.public_predicates.hasOwnProperty(exports[i]) &&\r\n\t\t\t\t\toptions.public_predicates[exports[i]] === true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.update_indices_clauses();\r\n\t}\r\n\t\r\n\t// Check if a predicate is exported\r\n\tModule.prototype.exports_predicate = function(indicator) {\r\n\t\treturn this.exports === \"all\" || indexOf(this.exports, indicator) !== -1;\r\n\t};\r\n\r\n\t// Check if a predicate is public\r\n\tModule.prototype.is_public_predicate = function(indicator) {\r\n\t\treturn !this.public_predicates.hasOwnProperty(indicator) || this.public_predicates[indicator] === true;\r\n\t};\r\n\t\r\n\t// Check if a predicate is multifile\r\n\tModule.prototype.is_multifile_predicate = function( indicator ) {\r\n\t\treturn this.multifile_predicates.hasOwnProperty(indicator) && this.multifile_predicates[indicator] === true;\r\n\t};\r\n\r\n\t// Check if a predicate is a meta-predicate\r\n\tModule.prototype.is_meta_predicate = function( indicator ) {\r\n\t\tif(this.meta_predicates.hasOwnProperty(indicator))\r\n\t\t\treturn this.meta_predicates[indicator];\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Update indices of all predicates\r\n\tModule.prototype.update_indices_clauses = function() {\r\n\t\tthis.indexed_clauses = {};\r\n\t\tthis.non_indexable_clauses = {};\r\n\t\tfor(var indicator in this.rules)\r\n\t\t\tthis.update_indices_predicate(indicator);\r\n\t};\r\n\r\n\t// Update indices of a predicate\r\n\tModule.prototype.update_indices_predicate = function(indicator) {\r\n\t\tthis.indexed_clauses[indicator] = {};\r\n\t\tthis.non_indexable_clauses[indicator] = [];\r\n\t\tif(!Array.isArray(this.rules[indicator]))\r\n\t\t\treturn;\r\n\t\tfor(var i = 0; i < this.rules[indicator].length; i++) {\r\n\t\t\tvar clause = this.rules[indicator][i];\r\n\t\t\tthis.add_index_predicate(clause);\r\n\t\t}\r\n\t};\r\n\r\n\t// Add indexed cluuse to a predicate\r\n\tModule.prototype.add_index_predicate = function(clause) {\r\n\t\tvar indicator = clause.head.indicator;\r\n\t\tvar index = clause.head.args.length > 0 ? clause.head.args[0].index : undefined;\r\n\t\tif(index) {\r\n\t\t\tif(!this.indexed_clauses.hasOwnProperty(indicator))\r\n\t\t\t\tthis.indexed_clauses[indicator] = {};\r\n\t\t\tif(!this.indexed_clauses[indicator].hasOwnProperty(index)) {\r\n\t\t\t\tthis.indexed_clauses[indicator][index] = [];\r\n\t\t\t\tif(this.non_indexable_clauses.hasOwnProperty(indicator))\r\n\t\t\t\t\tfor(var j = 0; j < this.non_indexable_clauses[indicator].length; j++)\r\n\t\t\t\t\t\tthis.indexed_clauses[indicator][index].push(this.non_indexable_clauses[indicator][j]);\r\n\t\t\t}\r\n\t\t\tthis.indexed_clauses[indicator][index].push(clause);\r\n\t\t} else {\r\n\t\t\tif(!this.non_indexable_clauses.hasOwnProperty(indicator))\r\n\t\t\t\tthis.non_indexable_clauses[indicator] = [];\r\n\t\t\tthis.non_indexable_clauses[indicator].push(clause);\r\n\t\t\tfor(var index in this.indexed_clauses[indicator])\r\n\t\t\t\tthis.indexed_clauses[indicator][index].push(clause);\r\n\t\t}\r\n\t};\r\n\r\n\r\n\r\n\t// UNIFY PROLOG OBJECTS\r\n\r\n\t// Variables\r\n\tVar.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(occurs_check && indexOf(obj.variables(), this.id) !== -1 && !pl.type.is_variable(obj))\r\n\t\t\treturn null;\r\n\t\tvar links = {};\r\n\t\tlinks[this.id] = obj;\r\n\t\treturn new Substitution(links);\r\n\t};\r\n\r\n\t// Numbers\r\n\tNum.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(pl.type.is_number(obj) && this.value === obj.value && this.is_float === obj.is_float)\r\n\t\t\treturn new Substitution();\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Terms\r\n\tTerm.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(!pl.type.is_term(obj) && obj.unify !== undefined) {\r\n\t\t\treturn obj.unify(this, occurs_check);\r\n\t\t} else if(pl.type.is_term(obj) && this.indicator === obj.indicator) {\r\n\t\t\tvar subs = new Substitution();\r\n\t\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\t\tvar mgu = pl.unify(this.args[i].apply(subs), obj.args[i].apply(subs), occurs_check);\r\n\t\t\t\tif(mgu === null)\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tfor(var x in mgu.links)\r\n\t\t\t\t\tsubs.links[x] = mgu.links[x];\r\n\t\t\t\tsubs = subs.apply(mgu);\r\n\t\t\t}\r\n\t\t\treturn subs;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.unify = function(obj, _occurs_check) {\r\n\t\tif(pl.type.is_stream(obj) && this.id === obj.id)\r\n\t\t\treturn new Substitution();\r\n\t\treturn null;\r\n\t};\r\n\r\n\tStream.prototype.compare = function(obj) {\r\n\t\tif(this.id < obj.id)\r\n\t\t\treturn -1;\r\n\t\telse if(this.id === obj.id)\r\n\t\t\treturn 0;\r\n\t\telse\r\n\t\t\treturn 1;\r\n\t};\r\n\t\r\n\t\r\n\r\n\t// PROLOG OBJECTS TO STRING\r\n\t\r\n\t// Variables\r\n\tVar.prototype.toString = function( options ) {\r\n\t\toptions = options === undefined ? {} : options;\r\n\t\tif(options.variable_names) {\r\n\t\t\tvar pointer = options.variable_names;\r\n\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\tif(pl.type.is_term(head) && head.indicator === \"=/2\"\r\n\t\t\t\t&& pl.type.is_variable(head.args[1]) && head.args[1].id === this.id\r\n\t\t\t\t&& pl.type.is_atom(head.args[0]))\r\n\t\t\t\t\treturn head.args[0].id;\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.id;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.toString = function( _ ) {\r\n\t\tvar str = this.value.toString();\r\n\t\tvar e = str.indexOf(\"e\");\r\n\t\tif(e !== -1) {\r\n\t\t\tif(str.indexOf(\".\") !== -1)\r\n\t\t\t\treturn str;\r\n\t\t\telse\r\n\t\t\t\treturn str.replace(\"e\", \".0e\");\r\n\t\t}\r\n\t\treturn this.is_float && indexOf(str, \".\") === -1 ? this.value + \".0\" : str;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.toString = function( options, priority, from ) {\r\n\t\toptions = !options ? {} : options;\r\n\t\toptions.quoted = options.quoted === undefined ? false: options.quoted;\r\n\t\toptions.ignore_ops = options.ignore_ops === undefined ? false : options.ignore_ops;\r\n\t\toptions.numbervars = options.numbervars === undefined ? false : options.numbervars;\r\n\t\toptions.variable_names = options.variable_names === undefined ? false : options.variable_names;\r\n\t\tpriority = priority === undefined ? {priority: 1200, class: \"\", indicator: \"\"} : priority;\r\n\t\tfrom = from === undefined ? \"\" : from;\r\n\t\tvar arg_priority = {priority: 999, class: \"\", indicator: \"\"};\r\n\t\tif( options.numbervars && this.indicator === \"$VAR/1\" && pl.type.is_integer( this.args[0] ) && this.args[0].value >= 0 ) {\r\n\t\t\tvar i = this.args[0].value;\r\n\t\t\tvar number = Math.floor( i/26 );\r\n\t\t\tvar letter = i % 26;\r\n\t\t\treturn \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"[letter] + (number !== 0 ? number : \"\");\r\n\t\t}\r\n\t\tswitch( this.indicator ){\r\n\t\t\tcase \"[]/0\":\r\n\t\t\tcase \"{}/0\":\r\n\t\t\tcase \"!/0\":\r\n\t\t\t\treturn this.id;\r\n\t\t\tcase \"{}/1\":\r\n\t\t\t\tif( options.ignore_ops === false ) {\r\n\t\t\t\t\treturn \"{\" + this.args[0].toString( options ) + \"}\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn \"{}(\" + this.args[0].toString( options ) + \")\";\r\n\t\t\t\t}\r\n\t\t\tcase \"./2\":\r\n\t\t\t\tif( options.ignore_ops === false ) {\r\n\t\t\t\t\tvar list = \"[\" + this.args[0].toString( options, arg_priority );\r\n\t\t\t\t\tvar pointer = this.args[1];\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tlist += \",\" + pointer.args[0].toString( options, arg_priority );\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\t\tlist += \"|\" + pointer.toString( options, arg_priority );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist += \"]\";\r\n\t\t\t\t\treturn list;\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tvar id = this.id;\r\n\t\t\t\tvar operator = options.session ? options.session.lookup_operator( this.id, this.args.length ) : null;\r\n\t\t\t\tif( options.session === undefined || options.ignore_ops || operator === null ) {\r\n\t\t\t\t\tif( options.quoted && (! /^(!|[a-z][0-9a-zA-Z_]*|[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+)$/.test( id ) && id !== \"{}\" && id !== \"[]\" || indexOf([\".\",\",\",\";\"], id) !== -1 || id.substring(0,2) === \"/*\") )\r\n\t\t\t\t\t\tid = \"'\" + redoEscape(id) + \"'\";\r\n\t\t\t\t\tif( this.args.length === 0 && is_graphic_token(this.id) && priority.indicator !== \"\")\r\n\t\t\t\t\t\treturn \"(\" + id + \")\";\r\n\t\t\t\t\treturn id + (this.args.length > 0 ? \"(\" + map( this.args,\r\n\t\t\t\t\t\tfunction(x) { return x.toString(options, arg_priority); }\r\n\t\t\t\t\t).join(\",\") + \")\" : \"\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar priority_op = parseInt(operator.priority);\r\n\t\t\t\t\tvar priority_arg = parseInt(priority.priority);\r\n\t\t\t\t\tvar cond = priority_op > priority_arg || priority_op === priority_arg && (\r\n\t\t\t\t\t\toperator.class === \"xfx\" ||\r\n\t\t\t\t\t\toperator.class === \"xfy\" && this.indicator !== priority.indicator ||\r\n\t\t\t\t\t\toperator.class === \"yfx\" && this.indicator !== priority.indicator ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"yfx\" && from === \"right\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"xfy\" && from === \"left\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"xf\" && from === \"left\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"fx\" && from === \"right\");\r\n\t\t\t\t\toperator.indicator = this.indicator;\r\n\t\t\t\t\tvar lpar = cond ? \"(\" : \"\";\r\n\t\t\t\t\tvar rpar = cond ? \")\" : \"\";\r\n\t\t\t\t\tvar space = !(is_graphic_token(this.id) || this.id === \",\" || this.id === \";\")\r\n\t\t\t\t\t\t|| operator.class.length === 2\r\n\t\t\t\t\t\t|| operator.class.length === 3 && pl.type.is_number(this.args[1]) && this.args[1].value < 0 ? \" \" : \"\";\r\n\t\t\t\t\tif( this.args.length === 0 ) {\r\n\t\t\t\t\t\treturn lpar + this.id + rpar;\r\n\t\t\t\t\t} else if( [\"fy\",\"fx\"].indexOf( operator.class) !== -1 ) {\r\n\t\t\t\t\t\treturn lpar + id + space + this.args[0].toString( options, operator, \"right\" ) + rpar;\r\n\t\t\t\t\t} else if( [\"yf\",\"xf\"].indexOf( operator.class) !== -1 ) {\r\n\t\t\t\t\t\treturn lpar + this.args[0].toString( options, operator, \"left\" ) + space + id + rpar;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn lpar + this.args[0].toString( options, operator, \"left\" ) + space + this.id + space + this.args[1].toString( options, operator, \"right\" ) + rpar;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.toString = function( _ ) {\r\n\t\treturn \"(\" + this.id + \")\";\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.toString = function( options ) {\r\n\t\tvar str = \"{\";\r\n\t\tfor( var link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( str !== \"{\" ) {\r\n\t\t\t\tstr += \", \";\r\n\t\t\t}\r\n\t\t\tstr += link + \"/\" + this.links[link].toString( options );\r\n\t\t}\r\n\t\tstr += \"}\";\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.toString = function( options ) {\r\n\t\tif( this.goal === null ) {\r\n\t\t\treturn \"<\" + this.substitution.toString( options ) + \">\";\r\n\t\t} else {\r\n\t\t\treturn \"<\" + this.goal.toString( options ) + \", \" + this.substitution.toString( options ) + \">\";\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.toString = function( options ) {\r\n\t\tif( !this.body ) {\r\n\t\t\treturn this.head.toString( options ) + \".\";\r\n\t\t} else {\r\n\t\t\treturn this.head.toString( options, 1200, \"left\" ) + \" :- \" + this.body.toString( options, 1200, \"right\" ) + \".\";\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Session\r\n\tSession.prototype.toString = function( options ) {\r\n\t\tvar str = \"\";\r\n\t\tfor(var prop in this.modules) {\r\n\t\t\tif(this.modules.hasOwnProperty(prop) && this.modules[prop].is_library)\r\n\t\t\t\tstr += \":- use_module(library(\" + this.modules[prop] + \")).\\n\";\r\n\t\t}\r\n\t\tstr += \"\\n\";\r\n\t\tfor(var key in this.modules.user.rules) {\r\n\t\t\tif(!this.modules.user.rules.hasOwnProperty(key)) continue;\r\n\t\t\tfor(i = 0; i < this.modules.user.rules[key].length; i++) {\r\n\t\t\t\tstr += this.modules.user.rules[key][i].toString(options);\r\n\t\t\t\tstr += \"\\n\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// CLONE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.clone = function() {\r\n\t\treturn new Var( this.id );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.clone = function() {\r\n\t\treturn new Num( this.value, this.is_float );\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.clone = function() {\r\n\t\tvar term = new Term( this.id, map( this.args, function( arg ) {\r\n\t\t\treturn arg.clone();\r\n\t\t} ) );\r\n\t\tif(this.definition_module)\r\n\t\t\tterm.definition_module = this.definition_module;\r\n\t\treturn term;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.clone = function() {\r\n\t\treturn new Stream( this.stream, this.mode, this.alias, this.type, this.reposition, this.eof_action );\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.clone = function() {\r\n\t\tvar links = {};\r\n\t\tvar attrs = {};\r\n\t\tfor( var link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tlinks[link] = this.links[link].clone();\r\n\t\t}\r\n\t\tfor( var attr in this.attrs ) {\r\n\t\t\tif(!this.attrs.hasOwnProperty(attrs)) continue;\r\n\t\t\tattrs[attr] = {};\r\n\t\t\tfor( var m in this.attrs[attr] ) {\r\n\t\t\t\tif(!this.attrs[attr].hasOwnProperty(m)) continue;\r\n\t\t\t\tattrs[attr][m] = this.attrs[attr][m].clone();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, attrs );\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.clone = function() {\r\n\t\treturn new State( this.goal.clone(), this.substitution.clone(), this.parent );\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.clone = function() {\r\n\t\treturn new Rule( this.head.clone(), this.body !== null ? this.body.clone() : null );\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPARE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_variable( obj ) && this.id === obj.id;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_number( obj ) && this.value === obj.value && this.is_float === obj.is_float;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.equals = function( obj ) {\r\n\t\tif( !pl.type.is_term( obj ) || this.indicator !== obj.indicator ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor( var i = 0; i < this.args.length; i++ ) {\r\n\t\t\tif( !this.args[i].equals( obj.args[i] ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_stream( obj ) && this.id === obj.id;\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.equals = function( obj ) {\r\n\tvar link;\r\n\t\tif( !pl.type.is_substitution( obj ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor( link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( !obj.links[link] || !this.links[link].equals( obj.links[link] ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor( link in obj.links ) {\r\n\t\t\tif(!obj.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( !this.links[link] ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_state( obj ) && this.goal.equals( obj.goal ) && this.substitution.equals( obj.substitution ) && this.parent === obj.parent;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_rule( obj ) && this.head.equals( obj.head ) && (this.body === null && obj.body === null || this.body !== null && this.body.equals( obj.body ));\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// RENAME VARIABLES OF PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.rename = function( thread ) {\r\n\t\treturn thread.get_free_variable( this );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.rename = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.rename = function( thread ) {\r\n\t\t// ground\r\n\t\tif(this.ground)\r\n\t\t\treturn new Term(this.id, this.args);\r\n\t\t// list\r\n\t\tif(this.indicator === \"./2\") {\r\n\t\t\tvar arr = [];\r\n\t\t\tvar pointer = this;\r\n\t\t\twhile(pointer.indicator === \"./2\" && !pointer.ground) {\r\n\t\t\t\tvar app = pointer.args[0].rename(thread);\r\n\t\t\t\tarr.push(app);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar list = pointer.rename(thread);\r\n\t\t\tfor(var i = arr.length-1; i >= 0; i--)\r\n\t\t\t\tlist = new Term(\".\", [arr[i], list]);\r\n\t\t\treturn list;\r\n\t\t}\r\n\t\t// compound term\r\n\t\tvar args = [];\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tvar app = this.args[i].rename(thread);\r\n\t\t\targs.push(app);\r\n\t\t}\r\n\t\treturn new Term(this.id, args);\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.rename = function( thread ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.rename = function( thread ) {\r\n\t\treturn new Rule( this.head.rename( thread ), this.body !== null ? this.body.rename( thread ) : null );\r\n\t};\r\n\r\n\r\n\r\n\t// CHECK IF RENAME\r\n\r\n\t// Variables\r\n\tVar.prototype.is_rename = function(obj, links) {\r\n\t\tlinks = links || {};\r\n\t\tif(!pl.type.is_variable(obj)\r\n\t\t|| links.hasOwnProperty(this.id) && links[this.id] !== obj.id\r\n\t\t|| links.hasOwnProperty(obj.id) && links[obj.id] !== this.id)\r\n\t\t\treturn false;\r\n\t\tlinks[this.id] = obj.id;\r\n\t\tlinks[obj.id] = this.id;\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.is_rename = function(obj, _links) {\r\n\t\treturn this.equals(obj);\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.is_rename = function(obj, links) {\r\n\t\tlinks = links || {};\r\n\t\tif(!pl.type.is_term(obj) || this.indicator !== obj.indicator)\r\n\t\t\treturn false;\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tif(!pl.is_rename(this.args[i], obj.args[i], links))\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.is_rename = function(obj, _links) {\r\n\t\treturn this.equals(obj);\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// GET ID OF VARIABLES FROM PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.variables = function() {\r\n\t\treturn [this.id];\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.variables = function() {\r\n\t\treturn [];\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.variables = function() {\r\n\t\tif(this.ground)\r\n\t\t\treturn [];\r\n\t\treturn [].concat.apply( [], map( this.args, function( arg ) {\r\n\t\t\treturn arg.variables();\r\n\t\t} ) );\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.variables = function() {\r\n\t\treturn [];\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.variables = function() {\r\n\t\tif( this.body === null ) {\r\n\t\t\treturn this.head.variables();\r\n\t\t} else {\r\n\t\t\treturn this.head.variables().concat( this.body.variables() );\r\n\t\t}\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// APPLY SUBSTITUTIONS TO PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.apply = function( subs ) {\r\n\t\tif( subs.lookup( this.id ) ) {\r\n\t\t\treturn subs.lookup( this.id );\r\n\t\t}\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.apply = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.apply = function( subs ) {\r\n\t\t// ground atom\r\n\t\tif(this.ground)\r\n\t\t\treturn this;\r\n\t\t// list\r\n\t\tif(this.indicator === \"./2\") {\r\n\t\t\tvar arr = [];\r\n\t\t\tvar pointer = this;\r\n\t\t\twhile(pointer.indicator === \"./2\" && !pointer.ground) {\r\n\t\t\t\tvar app = pointer.args[0].apply(subs);\r\n\t\t\t\tarr.push(app);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar list = pointer.apply(subs);\r\n\t\t\tfor(var i = arr.length-1; i >= 0; i--)\r\n\t\t\t\tlist = new Term(\".\", [arr[i], list]);\r\n\t\t\treturn list;\r\n\t\t}\r\n\t\t// compound term\r\n\t\tvar args = [];\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tvar app = this.args[i].apply(subs);\r\n\t\t\targs.push(app);\r\n\t\t}\r\n\t\treturn new Term(this.id, args, this.ref);\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.apply = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.apply = function( subs ) {\r\n\t\treturn new Rule( this.head.apply( subs ), this.body !== null ? this.body.apply( subs ) : null );\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.apply = function( subs ) {\r\n\t\tvar link, links = {}, attr, attrs = {}, m;\r\n\t\tfor( link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tlinks[link] = this.links[link].apply(subs);\r\n\t\t}\r\n\t\tfor( attr in this.attrs ) {\r\n\t\t\tif(!this.attrs.hasOwnProperty(attr)) continue;\r\n\t\t\tattrs[attr] = {};\r\n\t\t\tfor( m in this.attrs[attr] ) {\r\n\t\t\t\tif(!this.attrs[attr].hasOwnProperty(m)) continue;\r\n\t\t\t\tattrs[attr][m] = this.attrs[attr][m].apply(subs);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, attrs );\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// SELECTION FUNCTION\r\n\t\r\n\t// Select term\r\n\tTerm.prototype.select = function() {\r\n\t\tvar pointer = this;\r\n\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \",/2\")\r\n\t\t\tpointer = pointer.args[0];\r\n\t\treturn pointer;\r\n\t};\r\n\t\r\n\t// Replace term\r\n\tTerm.prototype.replace = function( expr ) {\r\n\t\tif( this.indicator === \",/2\" ) {\r\n\t\t\tif( this.args[0].indicator === \",/2\" ) {\r\n\t\t\t\treturn new Term( \",\", [this.args[0].replace( expr ), this.args[1]] );\r\n\t\t\t} else {\r\n\t\t\t\treturn expr === null ? this.args[1] : new Term( \",\", [expr, this.args[1]] );\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn expr;\r\n\t\t}\r\n\t};\r\n\r\n\t// Search term\r\n\tTerm.prototype.search = function( expr ) {\r\n\t\tif(this == expr || this.ref === expr.ref)\r\n\t\t\treturn true;\r\n\t\tfor( var i = 0; i < this.args.length; i++ )\r\n\t\t\tif( pl.type.is_term( this.args[i] ) && this.args[i].search( expr ) )\r\n\t\t\t\treturn true;\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG SESSIONS AND THREADS\r\n\r\n\t// Push to a global stack\r\n\tSession.prototype.push_global_stack = function(stack, value) {\r\n\t\treturn this.thread.push_global_stack(stack, value);\r\n\t};\r\n\tThread.prototype.push_global_stack = function(stack, value) {\r\n\t\tif(!this.__stacks.hasOwnProperty(stack))\r\n\t\t\tthis.__stacks[stack] = [];\r\n\t\tthis.__stacks[stack].push(value);\r\n\t};\r\n\r\n\t// Pop all from a global stack\r\n\tSession.prototype.flush_global_stack = function(stack, tail) {\r\n\t\treturn this.thread.push_global_stack(stack, tail);\r\n\t};\r\n\tThread.prototype.flush_global_stack = function(stack, tail) {\r\n\t\tvar list = tail || new Term(\"[]\", []);\r\n\t\tif(this.__stacks.hasOwnProperty(stack)) {\r\n\t\t\twhile(this.__stacks[stack].length > 0)\r\n\t\t\t\tlist = new Term(\".\", [this.__stacks[stack].pop(), list]);\r\n\t\t\tdelete this.__stacks[stack];\r\n\t\t}\r\n\t\treturn list;\r\n\t};\r\n\r\n\t// Set max inferences\r\n\tSession.prototype.setMaxInferences = function(max) {\r\n\t\tthis.limit = typeof max === \"number\" && max > 0 ? max : null;\r\n\t};\r\n\tThread.prototype.setMaxInferences = function(max) {\r\n\t\tthis.session.setMaxInferences(max);\r\n\t\tthis.current_limit = this.session.limit;\r\n\t\tthis.has_limit = this.session.limit !== null;\r\n\t};\r\n\r\n\t// Format answer\r\n\tSession.prototype.format_answer = function(answer, options) {\r\n\t\treturn this.thread.format_answer(answer, options);\r\n\t};\r\n\tThread.prototype.format_answer = function(answer, options) {\r\n\t\treturn pl.format_answer(answer, this, options);\r\n\t};\r\n\r\n\t// Get current input\r\n\tSession.prototype.get_current_input = function() {\r\n\t\treturn this.current_input;\r\n\t};\r\n\tThread.prototype.get_current_input = function() {\r\n\t\treturn this.session.get_current_input();\r\n\t};\r\n\r\n\t// Get current output\r\n\tSession.prototype.get_current_output = function() {\r\n\t\treturn this.current_output;\r\n\t};\r\n\tThread.prototype.get_current_output = function() {\r\n\t\treturn this.session.get_current_output();\r\n\t};\r\n\r\n\t// Set current input\r\n\tSession.prototype.set_current_input = function( input ) {\r\n\t\tthis.current_input = input;\r\n\t};\r\n\tThread.prototype.set_current_input = function( input ) {\r\n\t\treturn this.session.set_current_input( input );\r\n\t};\r\n\r\n\t// Set current output\r\n\tSession.prototype.set_current_output = function( output ) {\r\n\t\tthis.current_output = output;\r\n\t};\r\n\tThread.prototype.set_current_output = function( output ) {\r\n\t\treturn this.session.set_current_output( output);\r\n\t};\r\n\r\n\t// Get stream by alias\r\n\tSession.prototype.get_stream_by_alias = function( alias ) {\r\n\t\treturn this.streams[alias];\r\n\t};\r\n\tThread.prototype.get_stream_by_alias = function( alias ) {\r\n\t\treturn this.session.get_stream_by_alias( alias );\r\n\t};\r\n\r\n\t// Open file\r\n\tSession.prototype.file_system_open = function( path, type, mode ) {\r\n\t\tif(this.get_flag(\"nodejs\").indicator === \"false/0\")\r\n\t\t\tpath = this.absolute_file_name(path);\r\n\t\treturn this.file_system.open( path, type, mode );\r\n\t};\r\n\tThread.prototype.file_system_open = function( path, type, mode ) {\r\n\t\treturn this.session.file_system_open( path, type, mode );\r\n\t};\r\n\r\n\t// Absolute file name\r\n\tSession.prototype.absolute_file_name = function(filename) {\r\n\t\tvar absolute;\r\n\t\t// node.js\r\n\t\tif(this.get_flag(\"nodejs\").indicator === \"true/0\") {\r\n\t\t\tvar path = require(\"path\");\r\n\t\t\tabsolute = filename;\r\n\t\t\tfor(var prop in process.env) {\r\n\t\t\t\tif(!process.env.hasOwnProperty(prop))\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tabsolute = absolute.replace(new RegExp(\"\\\\$\" + prop, \"g\"), process.env[prop]);\r\n\t\t\t}\r\n\t\t\treturn path.resolve(absolute);\r\n\t\t// browser\r\n\t\t} else {\r\n\t\t\tvar cwd = this.working_directory;\r\n\t\t\tif(filename[0] === \"/\")\r\n\t\t\t\tabsolute = filename;\r\n\t\t\telse\r\n\t\t\t\tabsolute = cwd + (cwd[cwd.length-1] === \"/\" ? filename : \"/\" + filename);\r\n\t\t\tabsolute = absolute.replace(/\\/\\.\\//g, \"/\");\r\n\t\t\tvar dirs = absolute.split(\"/\");\r\n\t\t\tvar dirs2 = [];\r\n\t\t\tfor(var i = 0; i < dirs.length; i++) {\r\n\t\t\t\tif(dirs[i] !== \"..\") {\r\n\t\t\t\t\tdirs2.push(dirs[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(dirs2.length !== 0)\r\n\t\t\t\t\t\tdirs2.pop();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tabsolute = dirs2.join(\"/\").replace(/\\/\\.$/, \"/\");\r\n\t\t}\r\n\t\treturn absolute;\r\n\t};\r\n\tThread.prototype.absolute_file_name = function(path, cwd) {\r\n\t\treturn this.session.absolute_file_name(path, cwd);\r\n\t};\r\n\r\n\t// Get conversion of the char\r\n\tSession.prototype.get_char_conversion = function( char ) {\r\n\t\treturn this.__char_conversion[char] || char;\r\n\t};\r\n\tThread.prototype.get_char_conversion = function( char ) {\r\n\t\treturn this.session.get_char_conversion( char );\r\n\t};\r\n\t\r\n\t// Parse an expression\r\n\tSession.prototype.parse = function( string ) {\r\n\t\treturn this.thread.parse( string );\r\n\t};\r\n\tThread.prototype.parse = function( string ) {\r\n\t\tvar tokenizer = new Tokenizer( this );\r\n\t\ttokenizer.new_text( string );\r\n\t\tvar tokens = tokenizer.get_tokens();\r\n\t\tif( tokens === null )\r\n\t\t\treturn false;\r\n\t\tvar expr = parseExpr(this, tokens, 0, this.__get_max_priority(), false);\r\n\t\tif( expr.len !== tokens.length )\r\n\t\t\treturn false;\r\n\t\treturn { value: expr.value, expr: expr, tokens: tokens };\r\n\t};\r\n\t\r\n\t// Get flag value\r\n\tSession.prototype.get_flag = function( flag ) {\r\n\t\treturn this.flag[flag];\r\n\t};\r\n\tThread.prototype.get_flag = function( flag ) {\r\n\t\treturn this.session.get_flag( flag );\r\n\t};\r\n\r\n\t// Add a rule\r\n\tSession.prototype.add_rule = function(rule, options) {\r\n\t\treturn this.thread.add_rule(rule, options);\r\n\t};\r\n\tThread.prototype.add_rule = function(rule, options) {\r\n\t\toptions = options ? options : {};\r\n\t\toptions.from = options.from ? options.from : \"$tau-js\";\r\n\t\tvar module_id, get_module;\r\n\t\tif(pl.type.is_term(rule.head) && rule.head.indicator === \":/2\") {\r\n\t\t\tif(!pl.type.is_atom(rule.head.args[0])) {\r\n\t\t\t\tthis.throw_warning(pl.error.type(\"module\", rule.head.args[0], \"top_level/0\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tmodule_id = rule.head.args[0].id;\r\n\t\t\trule.head = rule.head.args[1];\r\n\t\t}\r\n\t\tif(module_id) {\r\n\t\t\tget_module = this.session.modules[module_id];\r\n\t\t\tif(!pl.type.is_module(get_module)) {\r\n\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: this.session});\r\n\t\t\t\tthis.session.modules[module_id] = get_module;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tget_module = this.session.modules[options.context_module];\r\n\t\t}\r\n\t\tget_module.src_predicates[rule.head.indicator] = options.from;\r\n\t\tif(!get_module.rules.hasOwnProperty(rule.head.indicator)) {\r\n\t\t\tget_module.rules[rule.head.indicator] = [];\r\n\t\t}\r\n\t\tget_module.rules[rule.head.indicator].push(rule);\r\n\t\tif(!get_module.public_predicates.hasOwnProperty(rule.head.indicator))\r\n\t\t\tget_module.public_predicates[rule.head.indicator] = false;\r\n\t\t// update term indexing\r\n\t\tget_module.add_index_predicate(rule);\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Run a directive\r\n\tSession.prototype.run_directive = function(directive, options) {\r\n\t\treturn this.thread.run_directive(directive, options);\r\n\t};\r\n\tThread.prototype.run_directive = function(directive, options) {\r\n\t\tif(pl.type.is_directive(directive)) {\r\n\t\t\tif(pl.directive[directive.indicator])\r\n\t\t\t\treturn pl.directive[directive.indicator](this, directive, options);\r\n\t\t\telse\r\n\t\t\t\treturn pl.directive[directive.id + \"/*\"](this, directive, options);\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\t// Get maximum priority of the operators\r\n\tSession.prototype.__get_max_priority = function() {\r\n\t\treturn \"1200\";\r\n\t};\r\n\tThread.prototype.__get_max_priority = function() {\r\n\t\treturn this.session.__get_max_priority();\r\n\t};\r\n\t\r\n\t// Get next priority of the operators\r\n\tSession.prototype.__get_next_priority = function( priority ) {\r\n\t\tvar max = 0;\r\n\t\tpriority = parseInt( priority );\r\n\t\tfor( var key in this.__operators ) {\r\n\t\t\tif( !this.__operators.hasOwnProperty(key) ) continue;\r\n\t\t\tvar n = parseInt(key);\r\n\t\t\tif( n > max && n < priority ) max = n;\r\n\t\t}\r\n\t\treturn max.toString();\r\n\t};\r\n\tThread.prototype.__get_next_priority = function( priority ) {\r\n\t\treturn this.session.__get_next_priority( priority );\r\n\t};\r\n\t\r\n\t// Get classes of an operator\r\n\tSession.prototype.__lookup_operator_classes = function( priority, operator ) {\r\n\t\tif( this.__operators.hasOwnProperty( priority ) && this.__operators[priority][operator] instanceof Array ) {\r\n\t\t\treturn this.__operators[priority][operator] || false;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tThread.prototype.__lookup_operator_classes = function( priority, operator ) {\r\n\t\treturn this.session.__lookup_operator_classes( priority, operator );\r\n\t};\r\n\r\n\t// Get operator\r\n\tSession.prototype.lookup_operator = function( name, arity ) {\r\n\t\tfor(var p in this.__operators)\r\n\t\t\tif(this.__operators[p][name])\r\n\t\t\t\tfor(var i = 0; i < this.__operators[p][name].length; i++)\r\n\t\t\t\t\tif( this.__operators[p][name][i].length === arity+1 )\r\n\t\t\t\t\t\treturn {priority: p, class: this.__operators[p][name][i]};\r\n\t\treturn null;\r\n\t};\r\n\tThread.prototype.lookup_operator = function( name, arity ) {\r\n\t\treturn this.session.lookup_operator( name, arity );\r\n\t};\r\n\t\r\n\t// Throw a warning\r\n\tSession.prototype.throw_warning = function( warning ) {\r\n\t\tthis.thread.throw_warning( warning );\r\n\t};\r\n\tThread.prototype.throw_warning = function( warning ) {\r\n\t\tthis.warnings.push( warning );\r\n\t};\r\n\t\r\n\t// Get warnings\r\n\tSession.prototype.get_warnings = function() {\r\n\t\treturn this.thread.get_warnings();\r\n\t};\r\n\tThread.prototype.get_warnings = function() {\r\n\t\treturn this.warnings;\r\n\t};\r\n\r\n\t// Add a goal\r\n\tSession.prototype.add_goal = function( goal, unique ) {\r\n\t\tthis.thread.add_goal( goal, unique );\r\n\t};\r\n\tThread.prototype.add_goal = function( goal, unique, parent ) {\r\n\t\tparent = parent ? parent : null;\r\n\t\tif( unique === true )\r\n\t\t\tthis.points = [];\r\n\t\tvar vars = goal.variables();\r\n\t\tvar links = {};\r\n\t\tfor( var i = 0; i < vars.length; i++ )\r\n\t\t\tlinks[vars[i]] = new Var(vars[i]);\r\n\t\tthis.points.push( new State( goal, new Substitution(links), parent ) );\r\n\t};\r\n\r\n\t// Consult a program from a string\r\n\tSession.prototype.consult = function(program, options) {\r\n\t\treturn this.thread.consult(program, options);\r\n\t};\r\n\tThread.prototype.consult = function(program, options) {\r\n\t\tvar string = \"\", success = false;\r\n\t\tvar opts = {};\r\n\t\tvar callback = typeof options === \"function\" ? options : function(){};\r\n\t\toptions = options === undefined || typeof options === \"function\" ? {} : options;\r\n\t\topts.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\topts.text = options.text === undefined ? true : options.text;\r\n\t\topts.html = options.html === undefined ? true : options.html;\r\n\t\topts.url = options.url === undefined ? true : options.url;\r\n\t\topts.file = options.file === undefined ? true : options.file;\r\n\t\topts.script = options.script === undefined ? true : options.script;\r\n\t\topts.success = options.success === undefined ? callback : options.success;\r\n\t\topts.error = options.error === undefined ? callback : options.error;\r\n\t\t// string\r\n\t\tif(typeof program === \"string\") {\r\n\t\t\tstring = program;\r\n\t\t\t// script id\r\n\t\t\tif(opts.script && this.get_flag(\"nodejs\").indicator === \"false/0\" && program != \"\" && document.getElementById(string)) {\r\n\t\t\t\tvar script = document.getElementById(string);\r\n\t\t\t\tvar type = script.getAttribute(\"type\");\r\n\t\t\t\tif(type !== null && type.replace(/ /g, \"\").toLowerCase() === \"text/prolog\") {\r\n\t\t\t\t\tstring = script.text;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// file (node.js)\r\n\t\t\tif(!success && opts.file && this.get_flag(\"nodejs\").indicator === \"true/0\") {\r\n\t\t\t\tvar fs = require(\"fs\");\r\n\t\t\t\tvar thread = this;\r\n\t\t\t\tfs.readFile(program, function(error, data) {\r\n\t\t\t\t\tif(error) {\r\n\t\t\t\t\t\topts.file = false;\r\n\t\t\t\t\t\tthread.consult(program, opts);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tparseProgram(thread, data.toString(), opts);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// http request\r\n\t\t\tif(!success && this.get_flag(\"nodejs\").indicator === \"false/0\" && opts.url && program !== \"\" && !(/\\s/.test(program))) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tvar xhttp = new XMLHttpRequest();\r\n\t\t\t\t\tvar thread = this;\r\n\t\t\t\t\txhttp.onreadystatechange = function() {\r\n\t\t\t\t\t\tif(this.readyState == 4) {\r\n\t\t\t\t\t\t\tif(this.status == 200) {\r\n\t\t\t\t\t\t\t\tstring = xhttp.responseText;\r\n\t\t\t\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\t\t\t\tparseProgram(thread, string, opts);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\topts.url = false;\r\n\t\t\t\t\t\t\t\tthread.consult(program, opts);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\txhttp.open(\"GET\", program, true);\r\n\t\t\t\t\txhttp.send();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} catch(ex) {\r\n\t\t\t\t\topts.error(ex);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// text\r\n\t\t\tif(!success && opts.text) {\r\n\t\t\t\tsuccess = true;\r\n\t\t\t}\r\n\t\t// html\r\n\t\t} else if(opts.html && program.nodeName) {\r\n\t\t\tswitch(program.nodeName.toLowerCase()) {\r\n\t\t\t\tcase \"input\":\r\n\t\t\t\tcase \"textarea\":\r\n\t\t\t\t\tstring = program.value;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tstring = program.innerHTML;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\topts.error(pl.error.existence(\"source_sink\", new Term(string), \"top_level/0\"));\r\n\t\t}\r\n\t\tthis.warnings = [];\r\n\t\tparseProgram(this, string, opts);\r\n\t};\r\n\r\n\t// Query goal from a string (without ?-)\r\n\tSession.prototype.query = function(string, options) {\r\n\t\treturn this.thread.query(string, options);\r\n\t};\r\n\tThread.prototype.query = function(string, options) {\r\n\t\tthis.points = [];\r\n\t\tthis.debugger_states = [];\r\n\t\tthis.level = new Term(\"top_level\");\r\n\t\treturn parseQuery(this, string, options);\r\n\t};\r\n\t\r\n\t// Get first choice point\r\n\tSession.prototype.head_point = function() {\r\n\t\treturn this.thread.head_point();\r\n\t};\r\n\tThread.prototype.head_point = function() {\r\n\t\treturn this.points[this.points.length-1];\r\n\t};\r\n\t\r\n\t// Get free variable\r\n\tSession.prototype.get_free_variable = function( variable ) {\r\n\t\treturn this.thread.get_free_variable( variable );\r\n\t};\r\n\tThread.prototype.get_free_variable = function( variable ) {\r\n\t\tvar variables = [];\r\n\t\tif( variable.id === \"_\" || this.session.renamed_variables[variable.id] === undefined ) {\r\n\t\t\tthis.session.rename++;\r\n\t\t\tif( this.current_point )\r\n\t\t\t\tvariables = this.current_point.substitution.domain();\r\n\t\t\twhile( indexOf( variables, pl.format_variable( this.session.rename, variable.id ) ) !== -1 ) {\r\n\t\t\t\tthis.session.rename++;\r\n\t\t\t}\r\n\t\t\tif( variable.id === \"_\" ) {\r\n\t\t\t\treturn new Var( pl.format_variable( this.session.rename, variable.id ) );\r\n\t\t\t} else {\r\n\t\t\t\tthis.session.renamed_variables[variable.id] = pl.format_variable( this.session.rename, variable.id );\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Var( this.session.renamed_variables[variable.id] );\r\n\t};\r\n\t\r\n\t// Get next free variable\r\n\tSession.prototype.next_free_variable = function() {\r\n\t\treturn this.thread.next_free_variable();\r\n\t};\r\n\tThread.prototype.next_free_variable = function() {\r\n\t\tthis.session.rename++;\r\n\t\tvar variables = [];\r\n\t\tif( this.current_point )\r\n\t\t\tvariables = this.current_point.substitution.domain();\r\n\t\twhile( indexOf( variables, pl.format_variable( this.session.rename ) ) !== -1 ) {\r\n\t\t\tthis.session.rename++;\r\n\t\t}\r\n\t\treturn new Var( pl.format_variable( this.session.rename ) );\r\n\t};\r\n\t\r\n\t// Check if a predicate is public\r\n\tSession.prototype.is_public_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\treturn pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_public_predicate(indicator);\r\n\t};\r\n\tThread.prototype.is_public_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_public_predicate(indicator, module_id);\r\n\t};\r\n\t\r\n\t// Check if a predicate is multifile\r\n\tSession.prototype.is_multifile_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\treturn pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_multifile_predicate(indicator);\r\n\t};\r\n\tThread.prototype.is_multifile_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_multifile_predicate(indicator, module_id);\r\n\t};\r\n\r\n\t// Check if a predicate is a meta-predicate\r\n\tSession.prototype.is_meta_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\tif(pl.type.is_module(this.modules[module_id]))\r\n\t\t\treturn this.modules[module_id].is_meta_predicate(indicator);\r\n\t\treturn null;\r\n\t};\r\n\tThread.prototype.is_meta_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_meta_predicate(indicator, module_id);\r\n\t};\r\n\t\r\n\t// Insert states at the beginning\r\n\tSession.prototype.prepend = function( states ) {\r\n\t\treturn this.thread.prepend( states );\r\n\t};\r\n\tThread.prototype.prepend = function( states ) {\r\n\t\tfor(var i = states.length-1; i >= 0; i--)\r\n\t\t\tthis.points.push( states[i] );\r\n\t};\r\n\t\r\n\t// Remove the selected term and prepend the current state\r\n\tSession.prototype.success = function( point, parent ) {\r\n\t\treturn this.thread.success( point, parent );\r\n\t}\r\n\tThread.prototype.success = function( point, parent ) {\r\n\t\tvar parent = typeof parent === \"undefined\" ? point : parent;\r\n\t\tthis.prepend( [new State( point.goal.replace( null ), point.substitution, parent ) ] );\r\n\t};\r\n\t\r\n\t// Throw error\r\n\tSession.prototype.throw_error = function(error) {\r\n\t\treturn this.thread.throw_error(error);\r\n\t};\r\n\tThread.prototype.throw_error = function(error) {\r\n\t\tif(pl.type.is_variable(error))\r\n\t\t\terror = pl.error.instantiation(this.level.indicator);\r\n\t\tvar state = new State(\r\n\t\t\tnew Term(\"throw\", [error]),\r\n\t\t\tnew Substitution(),\r\n\t\t\tnull\r\n\t\t);\r\n\t\tstate.error = true;\r\n\t\tthis.prepend([state]);\r\n\t};\r\n\t\r\n\t// Get the module of a predicate\r\n\tSession.prototype.lookup_module = function(atom, context_module) {\r\n\t\treturn this.thread.lookup_module(atom, context_module);\r\n\t}\r\n\tThread.prototype.lookup_module = function(atom, context_module) {\r\n\t\tvar get_module = this.session.modules[context_module];\r\n\t\tif(!pl.type.is_module(get_module))\r\n\t\t\tget_module = this.session.modules.user;\r\n\t\tif(get_module.rules.hasOwnProperty(atom.indicator) && (\r\n\t\t\tget_module.exports_predicate(atom.indicator) ||\r\n\t\t\tget_module.rules.hasOwnProperty(this.level.indicator) ||\r\n\t\t\tcontext_module === get_module.id))\r\n\t\t\t\treturn get_module;\r\n\t\tget_module.modules.system = pl.modules.system;\r\n\t\tget_module.modules.user = this.session.modules.user;\r\n\t\tfor(var prop in get_module.modules) {\r\n\t\t\tif(!this.session.modules.hasOwnProperty(prop))\r\n\t\t\t\tcontinue;\r\n\t\t\tvar get_module = this.session.modules[prop];\r\n\t\t\tif(get_module.rules.hasOwnProperty(atom.indicator) && (\r\n\t\t\t\tget_module.exports_predicate(atom.indicator) ||\r\n\t\t\t\tget_module.rules.hasOwnProperty(this.level.indicator) ||\r\n\t\t\t\tcontext_module === get_module.id))\r\n\t\t\t\t\treturn get_module;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Expand a meta-predicate\r\n\tSession.prototype.expand_meta_predicate = function(atom, definition_module, context_module) {\r\n\t\treturn this.thread.expand_meta_predicate(atom, definition_module, context_module);\r\n\t};\r\n\tThread.prototype.expand_meta_predicate = function(atom, definition_module, context_module) {\r\n\t\tvar get_module = this.session.modules[definition_module];\r\n\t\tif(!get_module)\r\n\t\t\treturn;\r\n\t\tvar meta = get_module.is_meta_predicate(atom.indicator);\r\n\t\tif(!meta)\r\n\t\t\treturn;\r\n\t\tfor(var i = 0; i < meta.args.length; i++) {\r\n\t\t\tif(pl.type.is_integer(meta.args[i]) || pl.type.is_atom(meta.args[i]) && indexOf([\":\"], meta.args[i].id) !== -1) {\r\n\t\t\t\tif(!pl.type.is_term(atom.args[i]) || atom.args[i].indicator !== \":/2\") {\r\n\t\t\t\t\tatom.args[i] = new Term(\":\", [new Term(context_module), atom.args[i]]);\r\n\t\t\t\t}\r\n\t\t\t} else if(pl.type.is_atom(meta.args[i]) && meta.args[i].id === \"^\") {\r\n\t\t\t\tvar pointer_last = atom;\r\n\t\t\t\tvar pointer_index = i;\r\n\t\t\t\tvar pointer = atom.args[i];\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"^/2\") {\r\n\t\t\t\t\tpointer_last = pointer;\r\n\t\t\t\t\tpointer_index = 1;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(!pl.type.is_term(pointer) || pointer.indicator !== \":/2\") {\r\n\t\t\t\t\tpointer_last.args[pointer_index] = new Term(\":\", [new Term(context_module), pointer]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Resolution step\r\n\tSession.prototype.step = function() {\r\n\t\treturn this.thread.step();\r\n\t}\r\n\tThread.prototype.step = function() {\r\n\t\tif(this.points.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar asyn = false;\r\n\t\tvar point = this.points.pop();\r\n\t\tthis.current_point = point;\r\n\t\tif(this.debugger)\r\n\t\t\tthis.debugger_states.push(point);\r\n\t\tvar atom = pl.type.is_term(point.goal) ? point.goal.select() : point.goal;\r\n\t\tif(pl.type.is_term(atom) && (atom.indicator !== \":/2\" || pl.type.is_term(atom.args[1]))) {\r\n\t\t\tvar context_module = null;\r\n\t\t\tvar states = [];\r\n\t\t\tif(atom !== null) {\r\n\t\t\t\tthis.total_steps++;\r\n\t\t\t\tvar level = point;\r\n\t\t\t\twhile(level.parent !== null && level.parent.goal.search(atom))\r\n\t\t\t\t\tlevel = level.parent;\r\n\t\t\t\tif(level.parent === null) {\r\n\t\t\t\t\tthis.level = new Term(\"top_level\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.level = level.parent.goal.select();\r\n\t\t\t\t\tif(this.level.indicator === \":/2\")\r\n\t\t\t\t\t\tthis.level = this.level.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_term(atom) && atom.indicator === \":/2\") {\r\n\t\t\t\t\tcontext_module = atom.args[0];\r\n\t\t\t\t\tatom = atom.args[1];\r\n\t\t\t\t\tif(!pl.type.is_atom(context_module)) {\r\n\t\t\t\t\t\tthis.throw_error(pl.error.type(\"module\", context_module, this.level.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext_module = context_module.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(this.level.definition_module) {\r\n\t\t\t\t\t\tcontext_module = this.level.definition_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontext_module = \"user\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tatom.context_module = context_module;\r\n\t\t\t\tif(atom.indicator === \",/2\") {\r\n\t\t\t\t\tthis.prepend([new State(\r\n\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\":\", [new Term(context_module), atom.args[0]]),\r\n\t\t\t\t\t\t\tnew Term(\":\", [new Term(context_module), atom.args[1]])])),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.__call_indicator = atom.indicator;\r\n\t\t\t\tvar get_module = this.lookup_module(atom, context_module);\r\n\t\t\t\tatom.definition_module = pl.type.is_module(get_module) ? get_module.id : \"user\";\r\n\t\t\t\tthis.expand_meta_predicate(atom, atom.definition_module, context_module);\r\n\t\t\t\tvar clauses = null;\r\n\t\t\t\tif(get_module && atom.args.length > 0 && atom.args[0].index && get_module.indexed_clauses.hasOwnProperty(atom.indicator) && get_module.indexed_clauses[atom.indicator].hasOwnProperty(atom.args[0].index))\r\n\t\t\t\t\tclauses = get_module.indexed_clauses[atom.indicator][atom.args[0].index];\r\n\t\t\t\telse\r\n\t\t\t\t\tclauses = get_module === null ? null : get_module.rules[atom.indicator];\r\n\t\t\t\tif(clauses === null) {\r\n\t\t\t\t\tif(!this.session.modules.user.rules.hasOwnProperty(atom.indicator)) {\r\n\t\t\t\t\t\tif(this.get_flag(\"unknown\").id === \"error\") {\r\n\t\t\t\t\t\t\tthis.throw_error( pl.error.existence( \"procedure\", atom.indicator, this.level.indicator));\r\n\t\t\t\t\t\t} else if(this.get_flag(\"unknown\").id === \"warning\") {\r\n\t\t\t\t\t\t\tthis.throw_warning(\"unknown procedure \" + atom.indicator + \" (from \" + this.level.indicator + \")\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(clauses instanceof Function) {\r\n\t\t\t\t\tasyn = clauses(this, point, atom);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Goal expansion\r\n\t\t\t\t\tif(this.__goal_expansion && atom.indicator === \"goal_expansion/2\")\r\n\t\t\t\t\t\tclauses = clauses.concat(pl.builtin.rules[\"goal_expansion/2\"]);\r\n\t\t\t\t\tfor(var i = 0; i < clauses.length; i++) {\r\n\t\t\t\t\t\tthis.session.renamed_variables = {};\r\n\t\t\t\t\t\tvar clause = clauses[i].rename(this);\r\n\t\t\t\t\t\tvar occurs_check = this.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\t\tvar mgu = pl.unify(atom, clause.head, occurs_check);\r\n\t\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\t\tvar state = new State();\r\n\t\t\t\t\t\t\tstate.goal = point.goal.replace(clause.body);\r\n\t\t\t\t\t\t\tif(state.goal !== null)\r\n\t\t\t\t\t\t\t\tstate.goal = state.goal.apply(mgu);\r\n\t\t\t\t\t\t\tstate.substitution = point.substitution.apply(mgu);\r\n\t\t\t\t\t\t\tstate.parent = point;\r\n\t\t\t\t\t\t\tstates.push(state);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.prepend(states);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar term = pl.type.is_term(atom) && atom.indicator === \":/2\" ? atom.args[1] : atom;\r\n\t\t\tif(pl.type.is_variable(term))\r\n\t\t\t\tthis.throw_error(pl.error.instantiation(this.level.indicator));\r\n\t\t\telse\r\n\t\t\t\tthis.throw_error(pl.error.type(\"callable\", term, this.level.indicator));\r\n\t\t}\r\n\t\treturn asyn;\r\n\t};\r\n\t\r\n\t// Find next computed answer\r\n\tSession.prototype.answer = function(options) {\r\n\t\treturn this.thread.answer(options);\r\n\t};\r\n\tThread.prototype.answer = function(options) {\r\n\t\tvar opts = {};\r\n\t\toptions = options || function() {};\r\n\t\tif(typeof options === \"function\") {\r\n\t\t\topts = {\r\n\t\t\t\tsuccess: options,\r\n\t\t\t\terror: options,\r\n\t\t\t\tfail: options,\r\n\t\t\t\tlimit: options\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\topts.success = options.success === undefined ? function() {} : options.success;\r\n\t\t\topts.error = options.error === undefined ? function() {} : options.error;\r\n\t\t\topts.fail = options.fail === undefined ? function() {} : options.fail;\r\n\t\t\topts.limit = options.limit === undefined ? function() {} : options.limit;\r\n\t\t}\r\n\t\tthis.__calls.push(opts);\r\n\t\tif( this.__calls.length > 1 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.again();\r\n\t};\r\n\t\r\n\t// Find all computed answers\r\n\tSession.prototype.answers = function( callback, max, after ) {\r\n\t\treturn this.thread.answers( callback, max, after );\r\n\t}\r\n\tThread.prototype.answers = function( callback, max, after ) {\r\n\t\tvar answers = max === undefined ? 1000 : max;\r\n\t\tvar thread = this;\r\n\t\tif( answers <= 0 ) {\r\n\t\t\tif(after)\r\n\t\t\t\tafter();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.answer( function( answer ) {\r\n\t\t\tcallback( answer );\r\n\t\t\tif( answer !== false ) {\r\n\t\t\t\tsetTimeout( function() {\r\n\t\t\t\t\tthread.answers( callback, answers-1, after );\r\n\t\t\t\t}, 0 );\r\n\t\t\t} else if(after) {\r\n\t\t\t\tafter();\r\n\t\t\t}\r\n\t\t} );\r\n\t};\r\n\r\n\t// Again finding next computed answer\r\n\tSession.prototype.again = function(reset_limit) {\r\n\t\treturn this.thread.again(reset_limit);\r\n\t};\r\n\tThread.prototype.again = function(reset_limit) {\r\n\t\twhile(this.__calls.length > 0) {\r\n\t\t\tthis.warnings = [];\r\n\t\t\tif(reset_limit !== false)\r\n\t\t\t\tthis.current_limit = this.session.limit;\r\n\t\t\twhile((!this.has_limit || this.current_limit > 0) && this.points.length > 0 && this.head_point().goal !== null && !pl.type.is_error_state(this.head_point())) {\r\n\t\t\t\tif(this.has_limit)\r\n\t\t\t\t\tthis.current_limit--;\r\n\t\t\t\tvar t0 = Date.now();\r\n\t\t\t\tvar asyn = this.step();\r\n\t\t\t\tvar t1 = Date.now();\r\n\t\t\t\tthis.cpu_time += t1-t0;\r\n\t\t\t\tif(asyn === true)\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar call = this.__calls.shift();\r\n\t\t\t// limit of inferences\r\n\t\t\tif(this.has_limit && this.current_limit <= 0) {\r\n\t\t\t\t(function(call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.limit(null);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(call);\r\n\t\t\t// no answer\r\n\t\t\t} else if(this.points.length === 0) {\r\n\t\t\t\t(function(call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.fail(false);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(call);\r\n\t\t\t// error\r\n\t\t\t} else if(pl.type.is_error(this.head_point().goal)) {\r\n\t\t\t\tvar error = this.format_error(this.points.pop());\r\n\t\t\t\tthis.points = [];\r\n\t\t\t\t(function(error, call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.error(error);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(error, call);\r\n\t\t\t// computed answer\r\n\t\t\t} else {\r\n\t\t\t\tif(this.debugger)\r\n\t\t\t\t\tthis.debugger_states.push(this.head_point());\r\n\t\t\t\tvar answer = this.format_success(this.points.pop());\r\n\t\t\t\t(function(answer, call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.success(answer);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(answer, call);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Unfolding transformation\r\n\tSession.prototype.unfold = function( rule ) {\r\n\t\tif(rule.body === null)\r\n\t\t\treturn false;\r\n\t\tvar head = rule.head;\r\n\t\tvar body = rule.body;\r\n\t\tvar atom = body.select();\r\n\t\tvar thread = new Thread( this );\r\n\t\tvar unfolded = [];\r\n\t\tthread.add_goal( atom );\r\n\t\tthread.step();\r\n\t\tfor( var i = thread.points.length-1; i >= 0; i-- ) {\r\n\t\t\tvar point = thread.points[i];\r\n\t\t\tvar head2 = head.apply( point.substitution );\r\n\t\t\tvar body2 = body.replace( point.goal );\r\n\t\t\tif( body2 !== null )\r\n\t\t\t\tbody2 = body2.apply( point.substitution );\r\n\t\t\tunfolded.push( new Rule( head2, body2 ) );\r\n\t\t}\r\n\t\tvar rules = this.modules.user.rules[head.indicator];\r\n\t\tvar index = indexOf( rules, rule );\r\n\t\tif( unfolded.length > 0 && index !== -1 ) {\r\n\t\t\trules.splice.apply( rules, [index, 1].concat(unfolded) );\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tThread.prototype.unfold = function(rule) {\r\n\t\treturn this.session.unfold(rule);\r\n\t};\r\n\r\n\t\r\n\t\r\n\t// INTERPRET EXPRESSIONS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.interpret = function( thread ) {\r\n\t\treturn pl.error.instantiation( thread.level.indicator );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.interpret = function( thread ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.interpret = function( thread ) {\r\n\t\tif( pl.type.is_unitary_list( this ) ) {\r\n\t\t\treturn this.args[0].interpret( thread );\r\n\t\t} else {\r\n\t\t\treturn pl.operate( thread, this );\r\n\t\t}\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPARE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.compare = function( obj ) {\r\n\t\tif( this.id < obj.id ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.id > obj.id ) {\r\n\t\t\treturn 1;\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.compare = function( obj ) {\r\n\t\tif( this.value === obj.value && this.is_float === obj.is_float ) {\r\n\t\t\treturn 0;\r\n\t\t} else if( this.value < obj.value || this.value === obj.value && this.is_float && !obj.is_float ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.value > obj.value ) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.compare = function( obj ) {\r\n\t\tif( this.args.length < obj.args.length || this.args.length === obj.args.length && this.id < obj.id ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.args.length > obj.args.length || this.args.length === obj.args.length && this.id > obj.id ) {\r\n\t\t\treturn 1;\r\n\t\t} else {\r\n\t\t\tfor( var i = 0; i < this.args.length; i++ ) {\r\n\t\t\t\tvar arg = pl.compare( this.args[i], obj.args[i] );\r\n\t\t\t\tif( arg !== 0 ) {\r\n\t\t\t\t\treturn arg;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// SUBSTITUTIONS\r\n\t\r\n\t// Lookup variable\r\n\tSubstitution.prototype.lookup = function( variable ) {\r\n\t\tif( this.links[variable] ) {\r\n\t\t\treturn this.links[variable];\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Filter variables\r\n\tSubstitution.prototype.filter = function( predicate ) {\r\n\t\tvar links = {};\r\n\t\tfor( var id in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(id)) continue;\r\n\t\t\tvar value = this.links[id];\r\n\t\t\tif( predicate( id, value ) ) {\r\n\t\t\t\tlinks[id] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, this.attrs );\r\n\t};\r\n\t\r\n\t// Exclude variables\r\n\tSubstitution.prototype.exclude = function( variables ) {\r\n\t\tvar links = {};\r\n\t\tfor( var variable in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(variable)) continue;\r\n\t\t\tif( indexOf( variables, variable ) === -1 ) {\r\n\t\t\t\tlinks[variable] = this.links[variable];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, this.attrs );\r\n\t};\r\n\t\r\n\t// Add link\r\n\tSubstitution.prototype.add = function( variable, value ) {\r\n\t\tthis.links[variable] = value;\r\n\t};\r\n\t\r\n\t// Get domain\r\n\tSubstitution.prototype.domain = function( plain ) {\r\n\t\tvar f = plain === true ? function(x){return x;} : function(x){return new Var(x);};\r\n\t\tvar vars = [];\r\n\t\tfor( var x in this.links )\r\n\t\t\tvars.push( f(x) );\r\n\t\treturn vars;\r\n\t};\r\n\r\n\t// Get an attribute\r\n\tSubstitution.prototype.get_attribute = function( variable, module ) {\r\n\t\tif( this.attrs[variable] )\r\n\t\t\treturn this.attrs[variable][module];\r\n\t}\r\n\r\n\t// Set an attribute (in a new substitution)\r\n\tSubstitution.prototype.set_attribute = function( variable, module, value ) {\r\n\t\tvar subs = new Substitution( this.links );\r\n\t\tfor( var v in this.attrs ) {\r\n\t\t\tif( v === variable ) {\r\n\t\t\t\tsubs.attrs[v] = {};\r\n\t\t\t\tfor( var m in this.attrs[v] ) {\r\n\t\t\t\t\tsubs.attrs[v][m] = this.attrs[v][m];\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tsubs.attrs[v] = this.attrs[v];\r\n\t\t\t}\r\n\t\t}\r\n\t\tif( !subs.attrs[variable] ) {\r\n\t\t\tsubs.attrs[variable] = {};\r\n\t\t}\r\n\t\tsubs.attrs[variable][module] = value;\r\n\t\treturn subs;\r\n\t}\r\n\r\n\t// Check if a variables has attributes\r\n\tSubstitution.prototype.has_attributes = function( variable ) {\r\n\t\treturn this.attrs[variable] && this.attrs[variable] !== {};\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\t// GENERATE JAVASCRIPT CODE FROM PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Var(\"' + this.id.toString() + '\")';\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Num(' + this.value.toString() + ', ' + this.is_float.toString() + ')';\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Term(\"' + this.id.replace(/\"/g, '\\\\\"') + '\", [' + map( this.args, function( arg ) {\r\n\t\t\treturn arg.compile();\r\n\t\t} ) + '])';\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Rule(' + this.head.compile() + ', ' + (this.body === null ? 'null' : this.body.compile()) + ')';\r\n\t};\r\n\t\r\n\t// Sessions\r\n\tSession.prototype.compile = function() {\r\n\t\tvar str, obj = [], rules;\r\n\t\tfor( var _indicator in this.modules.user.rules ) {\r\n\t\t\tif(!this.modules.user.rules.hasOwnProperty(_indicator)) continue;\r\n\t\t\tvar indicator = this.modules.user.rules[_indicator];\r\n\t\t\trules = [];\r\n\t\t\tstr = \"\\\"\" + _indicator + \"\\\": [\";\r\n\t\t\tfor(var i = 0; i < indicator.length; i++) {\r\n\t\t\t\trules.push(indicator[i].compile());\r\n\t\t\t}\r\n\t\t\tstr += rules.join();\r\n\t\t\tstr += \"]\";\r\n\t\t\tobj.push( str );\r\n\t\t}\r\n\t\treturn \"{\" + obj.join() + \"};\";\r\n\t};\r\n\r\n\t// Module\r\n\tModule.prototype.compile = function() {\r\n\t\tvar length = 0;\r\n\t\tvar dependencies = 0;\r\n\t\tvar str = \"var pl;\\n\";\r\n\t\tstr += \"(function(pl) {\\n\";\r\n\t\t// name\r\n\t\tstr += \"\\tvar name = \\\"\" + this.id + \"\\\";\\n\";\r\n\t\t// predicates\r\n\t\tstr += \"\\tvar predicates = function() {\\n\";\r\n\t\tstr += \"\\t\\treturn {\\n\";\r\n\t\tfor(var prop in this.rules) {\r\n\t\t\tif(length > 0)\r\n\t\t\t\tstr += \",\\n\";\r\n\t\t\tstr += \"\\t\\t\\t\\\"\" + prop + \"\\\": \";\r\n\t\t\tif(typeof this.rules[prop] === \"function\") {\r\n\t\t\t\tstr += this.rules[prop];\r\n\t\t\t} else {\r\n\t\t\t\tstr += \"[\\n\";\r\n\t\t\t\tfor(var i = 0; i < this.rules[prop].length; i++) {\r\n\t\t\t\t\tstr += \"\\t\\t\\t\\t\" + this.rules[prop][i].compile();\r\n\t\t\t\t\tif(i < this.rules[prop].length-1)\r\n\t\t\t\t\t\tstr += \",\";\r\n\t\t\t\t\tstr += \"\\n\";\r\n\t\t\t\t}\r\n\t\t\t\tstr += \"\\t\\t\\t]\";\r\n\t\t\t}\r\n\t\t\tlength++;\r\n\t\t}\r\n\t\tstr += \"\\n\\t\\t};\\n\";\r\n\t\tstr += \"\\t};\\n\";\r\n\t\t// exports\r\n\t\tstr += \"\\tvar exports = [\";\r\n\t\tfor(var i = 0; i < this.exports.length; i++) {\r\n\t\t\tif(i > 0)\r\n\t\t\t\tstr += \", \";\r\n\t\t\tstr += \"\\\"\" + this.exports[i] + \"\\\"\";\r\n\t\t}\r\n\t\tstr += \"];\\n\";\r\n\t\t// options\r\n\t\tstr += \"\\tvar options = function() {\\n\";\r\n\t\tstr += \"\\t\\treturn {\\n\";\r\n\t\t// dependencies\r\n\t\tstr += \"\\t\\t\\tdependencies: [\";\r\n\t\tfor(var prop in this.modules) {\r\n\t\t\tif(dependencies > 0)\r\n\t\t\t\tstr += \", \";\r\n\t\t\tstr += \"\\\"\" + prop + \"\\\"\";\r\n\t\t\tdependencies++;\r\n\t\t}\r\n\t\tstr += \"]\\n\";\r\n\t\tstr += \"\\t\\t};\\n\";\r\n\t\tstr += \"};\\n\";\r\n\t\t// fixed code\r\n\t\tstr += \"\\tif(typeof module !== 'undefined') {\\n\";\r\n\t\tstr += \"\\t\\tmodule.exports = function(p) {\\n\";\r\n\t\tstr += \"\\t\\t\\tpl = p;\\n\";\r\n\t\tstr += \"\\t\\t\\tnew pl.type.Module(name, predicates(), exports, options());\\n\";\r\n\t\tstr += \"\\t\\t};\\n\";\r\n\t\tstr += \"\\t} else {\\n\";\r\n\t\tstr += \"\\t\\tnew pl.type.Module(name, predicates(), exports, options());\\n\";\r\n\t\tstr += \"\\t}\\n\";\r\n\t\tstr += \"})(pl);\\n\";\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG TO JAVASCRIPT\r\n\tVar.prototype.toJavaScript = function() {\r\n\t\treturn this.toString();\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.toJavaScript = function() {\r\n\t\treturn this.value;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.toJavaScript = function(options) {\r\n\t\t// Atom => String\r\n\t\tif( this.args.length === 0 && this.indicator !== \"[]/0\" ) {\r\n\t\t\treturn this.toString(options);\r\n\t\t} else if( pl.type.is_list( this ) ) {\r\n\t\t\t// List => Array\r\n\t\t\tvar all_obj = true;\r\n\t\t\tvar arr = [];\r\n\t\t\tvar obj = {};\r\n\t\t\tvar pointer = this;\r\n\t\t\tvar value;\r\n\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\tvalue = pointer.args[0].toJavaScript(options);\r\n\t\t\t\tarr.push( value );\r\n\t\t\t\tall_obj = all_obj && pl.type.is_term(pointer.args[0]) && pointer.args[0].indicator === \"-/2\" && pl.type.is_atom(pointer.args[0].args[0]);\r\n\t\t\t\tif(all_obj)\r\n\t\t\t\t\tobj[pointer.args[0].args[0].id] = pointer.args[0].args[1].toJavaScript(options);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tif( pointer.indicator === \"[]/0\" )\r\n\t\t\t\treturn all_obj && arr.length > 0 ? obj : arr;\r\n\r\n\t\t}\r\n\t\treturn this.toString(options);\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// RULES\r\n\t\r\n\t// Return singleton variables in the session\r\n\tRule.prototype.singleton_variables = function(include_named) {\r\n\t\tinclude_named = include_named || false;\r\n\t\tvar variables = this.head.variables();\r\n\t\tvar count = {};\r\n\t\tvar singleton = [];\r\n\t\tif(this.body !== null)\r\n\t\t\tvariables = variables.concat(this.body.variables());\r\n\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\tif(count[variables[i]] === undefined)\r\n\t\t\t\tcount[variables[i]] = 0;\r\n\t\t\tcount[variables[i]]++;\r\n\t\t}\r\n\t\tfor(var key in count) {\r\n\t\t\tif(!count.hasOwnProperty(key))\r\n\t\t\t\tcontinue;\r\n\t\t\tif(count[key] === 1) {\r\n\t\t\t\tvar charcode = codePointAt(key, 1);\r\n\t\t\t\tif(!include_named || key === \"_\")\r\n\t\t\t\t\tif(key === \"_\" || key[0] === \"_\" && (charcode === 95 || charcode >= 65 && charcode <= 90))\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\tsingleton.push(key);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn singleton;\r\n\t};\r\n\r\n\r\n\r\n\t// NODEJS\r\n\r\n\tvar nodejs_flag = typeof process !== 'undefined' && !process.browser\r\n\r\n\tvar nodejs_arguments = nodejs_flag ?\r\n\t\tarrayToList( map(process.argv.slice(1), function(arg) { return new Term( arg ); })) :\r\n\t\tnew Term(\"[]\", []);\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG\r\n\r\n\tvar pl = {\r\n\t\t\r\n\t\t// Environment\r\n\t\t__env: nodejs_flag ? global : window,\r\n\t\t\r\n\t\t// Modules\r\n\t\tmodules: {},\r\n\t\t\r\n\t\t// Version\r\n\t\tversion: version,\r\n\t\t\r\n\t\t// Parser\r\n\t\tparser: {\r\n\t\t\ttokenizer: Tokenizer,\r\n\t\t\texpression: parseExpr\r\n\t\t},\r\n\t\t\r\n\t\t// Utils\r\n\t\tutils: {\r\n\t\t\t\r\n\t\t\t// String to indicator\r\n\t\t\tstr_indicator: str_indicator,\r\n\t\t\t// Code point at\r\n\t\t\tcodePointAt: codePointAt,\r\n\t\t\t// From code point\r\n\t\t\tfromCodePoint: fromCodePoint,\r\n\t\t\t// Length of string\r\n\t\t\tstringLength: stringLength\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Statistics\r\n\t\tstatistics: {\r\n\t\t\t\r\n\t\t\t// Number of created terms\r\n\t\t\tgetCountTerms: function() {\r\n\t\t\t\treturn term_ref;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// JavaScript to Prolog\r\n\t\tfromJavaScript: {\r\n\t\t\t\r\n\t\t\t// Type testing\r\n\t\t\ttest: {\r\n\t\t\t\t\r\n\t\t\t\t// Boolean\r\n\t\t\t\tboolean: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj === true || obj === false;\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Number\r\n\t\t\t\tnumber: function( obj, tobj ) {\r\n\t\t\t\t\treturn typeof obj === \"number\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// String\r\n\t\t\t\tstring: function( obj, tobj ) {\r\n\t\t\t\t\treturn typeof obj === \"string\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// List\r\n\t\t\t\tlist: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj instanceof Array;\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Variable\r\n\t\t\t\tvariable: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj === undefined;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Object\r\n\t\t\t\tobject: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\treturn tobj && !(obj instanceof Array) && typeof obj === \"object\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Any\r\n\t\t\t\tany: function( _, tobj ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Function conversion\r\n\t\t\tconversion: {\r\n\t\t\t\t\r\n\t\t\t\t// Bolean\r\n\t\t\t\tboolean: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Term( obj ? \"true\" : \"false\", [] );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Number\r\n\t\t\t\tnumber: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Num( obj, obj % 1 !== 0 );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// String\r\n\t\t\t\tstring: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Term( obj, [] );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// List\r\n\t\t\t\tlist: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\tvar arr = [];\r\n\t\t\t\t\tvar elem;\r\n\t\t\t\t\tfor( var i = 0; i < obj.length; i++ ) {\r\n\t\t\t\t\t\telem = pl.fromJavaScript.apply( obj[i], tobj );\r\n\t\t\t\t\t\tif( elem === undefined )\r\n\t\t\t\t\t\t\treturn undefined;\r\n\t\t\t\t\t\tarr.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn arrayToList( arr );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Variable\r\n\t\t\t\tvariable: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Var( \"_\" );\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Object\r\n\t\t\t\tobject: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\tvar list = new Term(\"[]\", []);\r\n\t\t\t\t\tvar arr = [];\r\n\t\t\t\t\tfor(var prop in obj) {\r\n\t\t\t\t\t\tif(!obj.hasOwnProperty(prop)) continue;\r\n\t\t\t\t\t\tarr.push(new Term(\"-\", [\r\n\t\t\t\t\t\t\tpl.fromJavaScript.apply(prop, tobj),\r\n\t\t\t\t\t\t\tpl.fromJavaScript.apply(obj[prop], tobj)\r\n\t\t\t\t\t\t]));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn arrayToList(arr);\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Any\r\n\t\t\t\tany: function( obj, tobj ) {\r\n\t\t\t\t\treturn undefined;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Transform object\r\n\t\t\tapply: function( obj, tobj ) {\r\n\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\tfor( var i in pl.fromJavaScript.test )\r\n\t\t\t\t\tif( i !== \"any\" && pl.fromJavaScript.test[i]( obj, tobj ) )\r\n\t\t\t\t\t\treturn pl.fromJavaScript.conversion[i]( obj, tobj );\r\n\t\t\t\treturn pl.fromJavaScript.conversion.any( obj, tobj );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Types\r\n\t\ttype: {\r\n\t\t\t\r\n\t\t\t// Objects\r\n\t\t\tVar: Var,\r\n\t\t\tNum: Num,\r\n\t\t\tTerm: Term,\r\n\t\t\tRule: Rule,\r\n\t\t\tState: State,\r\n\t\t\tStream: Stream,\r\n\t\t\tModule: Module,\r\n\t\t\tThread: Thread,\r\n\t\t\tSession: Session,\r\n\t\t\tSubstitution: Substitution,\r\n\t\t\tFile: TauFile,\r\n\t\t\tDirectory: TauDirectory,\r\n\t\t\t\r\n\t\t\t// Order\r\n\t\t\torder: [Var, Num, Term, Stream],\r\n\t\t\t\r\n\t\t\t// Compare types\r\n\t\t\tcompare: function( x, y ) {\r\n\t\t\t\tvar ord_x = indexOf( pl.type.order, x.constructor );\r\n\t\t\t\tvar ord_y = indexOf( pl.type.order, y.constructor );\r\n\t\t\t\tif( ord_x < ord_y ) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else if( ord_x > ord_y ) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif( x.constructor === Num )\r\n\t\t\t\t\t\tif( x.is_float && y.is_float )\r\n\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\telse if( x.is_float )\r\n\t\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t\telse if( y.is_float )\r\n\t\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a substitution\r\n\t\t\tis_substitution: function( obj ) {\r\n\t\t\t\treturn obj instanceof Substitution;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a state\r\n\t\t\tis_state: function( obj ) {\r\n\t\t\t\treturn obj instanceof State;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a rule\r\n\t\t\tis_rule: function( obj ) {\r\n\t\t\t\treturn obj instanceof Rule;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a variable\r\n\t\t\tis_variable: function( obj ) {\r\n\t\t\t\treturn obj instanceof Var;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream\r\n\t\t\tis_stream: function( obj ) {\r\n\t\t\t\treturn obj instanceof Stream;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an anonymous variable\r\n\t\t\tis_anonymous_var: function( obj ) {\r\n\t\t\t\treturn obj instanceof Var && obj.id === \"_\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a callable term\r\n\t\t\tis_callable: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term\r\n\t\t\t\t&& (indexOf([\",/2\",\";/2\",\"->/2\"], obj.indicator) === -1\r\n\t\t\t\t|| pl.type.is_callable(obj.args[0]) && pl.type.is_callable(obj.args[1]))\r\n\t\t\t\t|| obj instanceof Var;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a number\r\n\t\t\tis_number: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an integer\r\n\t\t\tis_integer: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a float\r\n\t\t\tis_float: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && obj.is_float;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a term\r\n\t\t\tis_term: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an atom\r\n\t\t\tis_atom: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a ground term\r\n\t\t\tis_ground: function( obj ) {\r\n\t\t\t\tif( obj instanceof Var ) return false;\r\n\t\t\t\tif( obj instanceof Term )\r\n\t\t\t\t\tfor( var i = 0; i < obj.args.length; i++ )\r\n\t\t\t\t\t\tif( !pl.type.is_ground( obj.args[i] ) )\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\treturn true;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is atomic\r\n\t\t\tis_atomic: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 || obj instanceof Num;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is compound\r\n\t\t\tis_compound: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length > 0;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a list\r\n\t\t\tis_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (obj.indicator === \"[]/0\" || obj.indicator === \"./2\");\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an empty list\r\n\t\t\tis_empty_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a non empty list\r\n\t\t\tis_non_empty_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"./2\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a fully list\r\n\t\t\tis_fully_list: function( obj ) {\r\n\t\t\t\twhile( obj instanceof Term && obj.indicator === \"./2\" ) {\r\n\t\t\t\t\tobj = obj.args[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn obj instanceof Var || obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a instantiated list\r\n\t\t\tis_instantiated_list: function( obj ) {\r\n\t\t\t\twhile( obj instanceof Term && obj.indicator === \"./2\" ) {\r\n\t\t\t\t\tobj = obj.args[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an unitary list\r\n\t\t\tis_unitary_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"./2\" && obj.args[1] instanceof Term && obj.args[1].indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a character\r\n\t\t\tis_character: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 && (obj.id.length === 1 || obj.id.length > 0 && obj.id.length <= 2 && codePointAt( obj.id, 0 ) >= 65536);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a in_character\r\n\t\t\tis_in_character: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (obj.indicator === \"end_of_file/0\"\r\n\t\t\t\t|| obj.id.length === 1\r\n\t\t\t\t|| obj.id.length > 0 && obj.id.length <= 2 && codePointAt(obj.id, 0) >= 65536);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a character_code\r\n\t\t\tis_character_code: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 1114111;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a in_character_code\r\n\t\t\tis_in_character_code: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 1114111;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a byte\r\n\t\t\tis_byte: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 255;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a in_byte\r\n\t\t\tis_in_byte: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 255;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an operator\r\n\t\t\tis_operator: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && pl.arithmetic.evaluation[obj.indicator];\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a directive\r\n\t\t\tis_directive: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (pl.directive[obj.indicator] !== undefined || pl.directive[obj.id + \"/*\"] !== undefined);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a built-in predicate\r\n\t\t\tis_builtin: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && pl.builtin.rules.hasOwnProperty(obj.indicator) && obj.indicator !== \"goal_expansion/2\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an error\r\n\t\t\tis_error: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"throw/1\";\r\n\t\t\t},\r\n\r\n\t\t\t// Is an error state\r\n\t\t\tis_error_state: function( obj ) {\r\n\t\t\t\treturn pl.type.is_state( obj ) && obj.error && obj.error === true;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a predicate indicator\r\n\t\t\tis_predicate_indicator: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"//2\" && obj.args[0] instanceof Term && obj.args[0].args.length === 0 && obj.args[1] instanceof Num && obj.args[1].is_float === false;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a flag\r\n\t\t\tis_flag: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 && pl.flag[obj.id] !== undefined;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a valid value for a flag\r\n\t\t\tis_value_flag: function( flag, obj ) {\r\n\t\t\t\tif( !pl.type.is_flag( flag ) ) return false;\r\n\t\t\t\tfor( var value in pl.flag[flag.id].allowed ) {\r\n\t\t\t\t\tif(!pl.flag[flag.id].allowed.hasOwnProperty(value)) continue;\r\n\t\t\t\t\tif( pl.flag[flag.id].allowed[value].equals( obj ) ) return true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a io mode\r\n\t\t\tis_io_mode: function( obj ) {\r\n\t\t\t\treturn pl.type.is_atom( obj ) && [\"read\",\"write\",\"append\"].indexOf( obj.id ) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream option\r\n\t\t\tis_stream_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"alias/1\" && pl.type.is_atom(obj.args[0]) ||\r\n\t\t\t\t\tobj.indicator === \"reposition/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"type/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"text\" || obj.args[0].id === \"binary\") ||\r\n\t\t\t\t\tobj.indicator === \"eof_action/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"error\" || obj.args[0].id === \"eof_code\" || obj.args[0].id === \"reset\")\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream position\r\n\t\t\tis_stream_position: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term(obj) && (\r\n\t\t\t\t\tobj.indicator === \"end_of_stream/0\" ||\r\n\t\t\t\t\tobj.indicator === \"past_end_of_stream/0\" ||\r\n\t\t\t\t\tobj.indicator === \"position/3\"\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[0])\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[1])\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[2])\r\n\t\t\t\t)\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream property\r\n\t\t\tis_stream_property: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"input/0\" || \r\n\t\t\t\t\tobj.indicator === \"output/0\" || \r\n\t\t\t\t\tobj.indicator === \"alias/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) ||\r\n\t\t\t\t\tobj.indicator === \"file_name/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) ||\r\n\t\t\t\t\tobj.indicator === \"reposition/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\")) ||\r\n\t\t\t\t\tobj.indicator === \"type/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"text\" || obj.args[0].id === \"binary\")) ||\r\n\t\t\t\t\tobj.indicator === \"mode/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"read\" || obj.args[0].id === \"write\" || obj.args[0].id === \"append\")) ||\r\n\t\t\t\t\tobj.indicator === \"eof_action/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"error\" || obj.args[0].id === \"eof_code\" || obj.args[0].id === \"reset\")) ||\r\n\t\t\t\t\tobj.indicator === \"end_of_stream/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"at\" || obj.args[0].id === \"past\" || obj.args[0].id === \"not\")) ||\r\n\t\t\t\t\tobj.indicator === \"position/1\"\r\n\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0]) || pl.type.is_term(obj.args[0]) && obj.args[0].indicator === \"position/3\"\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[0]) || pl.type.is_integer(obj.args[0].args[0]))\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[1]) || pl.type.is_integer(obj.args[0].args[1]))\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[2]) || pl.type.is_integer(obj.args[0].args[2])))\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a streamable term\r\n\t\t\tis_streamable: function( obj ) {\r\n\t\t\t\treturn obj.__proto__.stream !== undefined;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a read option\r\n\t\t\tis_read_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && [\"variables/1\",\"variable_names/1\",\"singletons/1\"].indexOf( obj.indicator ) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a write option\r\n\t\t\tis_write_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"quoted/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"ignore_ops/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"numbervars/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"variable_names/1\" && pl.type.is_fully_list(obj.args[0])\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a close option\r\n\t\t\tis_close_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) &&\r\n\t\t\t\t\tobj.indicator === \"force/1\" &&\r\n\t\t\t\t\tpl.type.is_atom(obj.args[0]) &&\r\n\t\t\t\t\t(obj.args[0].id === \"true\" || obj.args[0].id === \"false\");\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a modifiable flag\r\n\t\t\tis_modifiable_flag: function( obj ) {\r\n\t\t\t\treturn pl.type.is_flag( obj ) && pl.flag[obj.id].changeable;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a module\r\n\t\t\tis_module: function( obj ) {\r\n\t\t\t\treturn obj instanceof Module;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a virtual file\r\n\t\t\tis_file: function( obj ) {\r\n\t\t\t\treturn obj instanceof TauFile;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a virtual directory\r\n\t\t\tis_directory: function( obj ) {\r\n\t\t\t\treturn obj instanceof TauDirectory;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a predicate property\r\n\t\t\tis_predicate_property: function(obj) {\r\n\t\t\t\treturn pl.type.is_term(obj) && (\r\n\t\t\t\t\tobj.indicator === \"built_in/0\" ||\r\n\t\t\t\t\tobj.indicator === \"static/0\" ||\r\n\t\t\t\t\tobj.indicator === \"dynamic/0\" ||\r\n\t\t\t\t\tobj.indicator === \"native_code/0\" ||\r\n\t\t\t\t\tobj.indicator === \"multifile/0\" ||\r\n\t\t\t\t\tobj.indicator === \"meta_predicate/1\"\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a meta-argument specifier\r\n\t\t\tis_meta_argument_specifier: function(obj) {\r\n\t\t\t\treturn pl.type.is_integer(obj) && obj.value >= 0 ||\r\n\t\t\t\t\tpl.type.is_atom(obj) && indexOf([\"+\", \"-\", \"?\", \"*\", \"^\", \":\", \"//\"], obj.id) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a time property\r\n\t\t\tis_time_property: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term(obj) && obj.args.length === 1 \r\n\t\t\t\t&& (pl.type.is_variable(obj.args[0]) || pl.type.is_integer(obj.args[0]))\r\n\t\t\t\t&& indexOf([\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\", \"weekday\"], obj.id) !== -1;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t},\r\n\r\n\t\t// Arithmetic functions\r\n\t\tarithmetic: {\r\n\t\t\t\r\n\t\t\t// Evaluation\r\n\t\t\tevaluation: {\r\n\t\t\t\t\"e/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Math.E; }\r\n\t\t\t\t},\r\n\t\t\t\t\"pi/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Math.PI; }\r\n\t\t\t\t},\r\n\t\t\t\t\"tau/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return 2*Math.PI; }\r\n\t\t\t\t},\r\n\t\t\t\t\"epsilon/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Number.EPSILON; }\r\n\t\t\t\t},\r\n\t\t\t\t\"+/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"-/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return -x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"\\\\/1\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return ~x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"abs/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.abs( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sign/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sign( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float_integer_part/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float_fractional_part/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return x - parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseFloat( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"floor/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.floor( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"truncate/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"round/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.round( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"ceiling/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.ceil( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sin/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sin( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"cos/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.cos( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"tan/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.tan( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"asin/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.asin(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"acos/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.acos(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atan/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.atan( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atan2/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x === 0 && y === 0 ? pl.error.evaluation(\"undefined\", thread.__call_indicator) : Math.atan2(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"acosh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x >= 1 ? Math.acosh(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"asinh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.asinh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atanh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) < 1 ? Math.atanh(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"cosh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.cosh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sinh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sinh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"tanh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.tanh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"exp/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.exp( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sqrt/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x >= 0 ? Math.sqrt( x ) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x > 0 ? Math.log( x ) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x > 0 && y > 0 ? Math.log(y)/Math.log(x) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log10/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x > 0 ? Math.log(x)/Math.log(10) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"+/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x + y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"-/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x - y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"*/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x * y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"//2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x / y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"///2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? Math.trunc( x / y ) : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"div/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? Math.floor( x / y ) : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"**/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation(\"zero_divisor\", thread.__call_indicator) : Math.pow(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"^/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation(\"zero_divisor\", thread.__call_indicator) : Math.pow(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"<>/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x >> y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"/\\\\/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x & y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"\\\\//2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x | y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"xor/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x ^ y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"rem/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x % y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"mod/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x - Math.floor( x / y ) * y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"max/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return Math.max( x, y ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"min/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return Math.min( x, y ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"gcd/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return gcd(x, y); }\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Directives\r\n\t\tdirective: {\r\n\t\t\t\r\n\t\t\t// dynamic/1\r\n\t\t\t\"dynamic/1\": function( thread, atom, options ) {\r\n\t\t\t\tvar indicators = atom.args[0];\r\n\t\t\t\tif(!pl.type.is_list(indicators))\r\n\t\t\t\t\tindicators = arrayToList([indicators]);\r\n\t\t\t\tvar pointer = indicators;\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tindicator = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( indicator ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_compound( indicator ) || indicator.indicator !== \"//2\" ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t\t} else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_atom( indicator.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", indicator.args[0], atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_integer( indicator.args[1] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", indicator.args[1], atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar key = indicator.args[0].id + \"/\" + indicator.args[1].value;\r\n\t\t\t\t\t\tvar get_module = thread.session.modules[options.context_module];\r\n\t\t\t\t\t\tget_module.public_predicates[key] = true;\r\n\t\t\t\t\t\tif( !get_module.rules[key] )\r\n\t\t\t\t\t\tget_module.rules[key] = [];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// dynamic/[2..]\r\n\t\t\t\"dynamic/*\": function( thread, atom ) {\r\n\t\t\t\tfor(var i = 0; i < atom.args.length; i++) {\r\n\t\t\t\t\tpl.directive[\"dynamic/1\"](thread, new Term(\"dynamic\", [atom.args[i]]));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// multifile/1\r\n\t\t\t\"multifile/1\": function( thread, atom, options ) {\r\n\t\t\t\tvar indicator = atom.args[0];\r\n\t\t\t\tif( pl.type.is_variable( indicator ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_compound( indicator ) || indicator.indicator !== \"//2\" ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t} else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( indicator.args[0] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", indicator.args[0], atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_integer( indicator.args[1] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", indicator.args[1], atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar predicate_indicator = atom.args[0].args[0].id + \"/\" + atom.args[0].args[1].value;\r\n\t\t\t\t\tvar get_module = thread.session.modules[options.context_module];\r\n\t\t\t\t\tget_module.multifile_predicates[predicate_indicator] = true;\r\n\t\t\t\t\tif(!get_module.rules.hasOwnProperty(predicate_indicator)) {\r\n\t\t\t\t\t\tget_module.rules[predicate_indicator] = [];\r\n\t\t\t\t\t\tget_module.public_predicates[predicate_indicator] = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// meta_predicate/1\r\n\t\t\t\"meta_predicate/1\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\tvar head = atom.args[0];\r\n\t\t\t\tif( pl.type.is_variable(head) ) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfor(var i = 0; i < head.args.length; i++) {\r\n\t\t\t\t\t\tvar arg = head.args[i];\r\n\t\t\t\t\t\tif(!pl.type.is_meta_argument_specifier(arg)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"meta_argument_specifier\", arg, atom.indicator));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.session.modules[options.context_module].meta_predicates[head.indicator] = head;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// set_prolog_flag\r\n\t\t\t\"set_prolog_flag/2\": function( thread, atom ) {\r\n\t\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\t\tif( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_flag( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_modifiable_flag( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.permission( \"modify\", \"flag\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_value_flag( flag, value ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.domain( \"flag_value\", new Term( \"+\", [flag, value] ), atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.session.flag[flag.id] = value;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// module/2\r\n\t\t\t\"module/2\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\toptions.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\t\t\tvar module_id = atom.args[0], exports = atom.args[1];\r\n\t\t\t\tif(pl.type.is_variable(module_id) || pl.type.is_variable(exports)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_atom(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"atom\", module_id, atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_list(exports)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"list\", exports, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id.indicator])) {\r\n\t\t\t\t\t\tvar pointer = exports;\r\n\t\t\t\t\t\tvar indicators = [];\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar predicate = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_predicate_indicator(predicate)) {\r\n\t\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"predicate_indicator\", predicate, atom.indicator));\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tindicators.push(predicate.args[0].id + \"/\" + predicate.args[1].value);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\t\t} else if(!pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"list\", exports, atom.indicator));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar new_module = new Module(module_id.id, {}, indicators, {\r\n\t\t\t\t\t\t\tsession: thread.session\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthread.session.modules[module_id.id] = new_module;\r\n\t\t\t\t\t\tthread.session.modules[options.context_module].modules[module_id.id] = new_module;\r\n\t\t\t\t\t\toptions.context_module = module_id.id;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_warning(pl.error.permission(\"create\", \"module\", module_id, atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// use_module/1\r\n\t\t\t\"use_module/1\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\toptions.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\t\t\tvar module_id = atom.args[0];\r\n\t\t\t\tif(pl.type.is_variable(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_term(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"term\", module_id, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(module_id.indicator === \"library/1\") {\r\n\t\t\t\t\t\tvar name = module_id.args[0].id;\r\n\t\t\t\t\t\tvar get_module = pl.modules[name];\r\n\t\t\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\t\t\tif(!thread.session.modules[options.context_module].modules.hasOwnProperty(name)) {\r\n\t\t\t\t\t\t\t\tthread.session.modules[name] = get_module;\r\n\t\t\t\t\t\t\t\tthread.session.modules[options.context_module].modules[name] = get_module;\r\n\t\t\t\t\t\t\t\tfor(var i = 0; i < get_module.dependencies.length; i++) {\r\n\t\t\t\t\t\t\t\t\tvar term = new Term(\"use_module\", [new Term(\"library\", [new Term(get_module.dependencies[i])])]);\r\n\t\t\t\t\t\t\t\t\tpl.directive[\"use_module/1\"](thread, term, {\r\n\t\t\t\t\t\t\t\t\t\tcontext_module: name\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.existence(\"module\", module_id, atom.indicator));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar name = module_id.id;\r\n\t\t\t\t\t\tthread.consult(name, {\r\n\t\t\t\t\t\t\tcontext_module: options.context_module,\r\n\t\t\t\t\t\t\ttext: false,\r\n\t\t\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\terror: function() {\r\n\t\t\t\t\t\t\t\toptions.error(pl.error.existence(\"module\", module_id, atom.indicator));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// char_conversion/2\r\n\t\t\t\"char_conversion/2\": function(thread, atom, options) {\r\n\t\t\t\tvar inchar = atom.args[0], outchar = atom.args[1];\r\n\t\t\t\tif(pl.type.is_variable(inchar) || pl.type.is_variable(outchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_character(inchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"character\", inchar, atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_character(outchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"character\", outchar, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(inchar.id === outchar.id) {\r\n\t\t\t\t\t\tdelete thread.session.__char_conversion[inchar.id];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.session.__char_conversion[inchar.id] = outchar.id;\r\n\t\t\t\t\t}\r\n\t\t\t\t\toptions.tokens = options.tokenizer.get_tokens(options.current_token);\r\n\t\t\t\t\toptions.current_token = 0;\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// op/3\r\n\t\t\t\"op/3\": function( thread, atom ) {\r\n\t\t\t\tvar priority = atom.args[0], type = atom.args[1], operators = atom.args[2];\r\n\t\t\t\tif(pl.type.is_atom(operators))\r\n\t\t\t\t\toperators = new Term(\".\", [operators, new Term(\"[]\")]);\r\n\t\t\t\tif( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_integer( priority ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( type ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", type, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_list( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t} else if( pl.type.is_empty_list( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operators, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar pointer = operators;\r\n\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\tvar operator = pointer.args[0];\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\tif( pl.type.is_variable( operator ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t} else if( !pl.type.is_atom( operator ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( priority.value < 0 || priority.value > 1200 ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \",\" ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"{}\" ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"[]\" ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"|\" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"].indexOf( type.id ) === -1 ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.domain( \"operator_specifier\", type, atom.indicator ) );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar fix = { prefix: null, infix: null, postfix: null };\r\n\t\t\t\t\t\t\tfor( var p in thread.session.__operators ) {\r\n\t\t\t\t\t\t\t\tif(!thread.session.__operators.hasOwnProperty(p)) continue;\r\n\t\t\t\t\t\t\t\tvar classes = thread.session.__operators[p][operator.id];\r\n\t\t\t\t\t\t\t\tif( classes ) {\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"fx\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fx\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"fy\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fy\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"xf\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"yf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"yf\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfx\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfy\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfy\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"yfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"yfx\" }; }\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar current_class;\r\n\t\t\t\t\t\t\tswitch( type.id ) {\r\n\t\t\t\t\t\t\t\tcase \"fy\": case \"fx\": current_class = \"prefix\"; break;\r\n\t\t\t\t\t\t\t\tcase \"yf\": case \"xf\": current_class = \"postfix\"; break;\r\n\t\t\t\t\t\t\t\tdefault: current_class = \"infix\"; break;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(fix.infix && current_class === \"postfix\" || fix.postfix && current_class === \"infix\") {\r\n\t\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif( fix[current_class] ) {\r\n\t\t\t\t\t\t\t\t\tremove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type );\r\n\t\t\t\t\t\t\t\t\tif( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) {\r\n\t\t\t\t\t\t\t\t\t\tdelete thread.session.__operators[fix[current_class].priority][operator.id];\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif( priority.value > 0 ) {\r\n\t\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {};\r\n\t\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = [];\r\n\t\t\t\t\t\t\t\t\tthread.session.__operators[priority.value][operator.id].push( type.id );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// initialization/1\r\n\t\t\t\"initialization/1\": function(thread, atom, options) {\r\n\t\t\t\tvar goal = atom.args[0];\r\n\t\t\t\toptions.initialization.push(goal);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Flags\r\n\t\tflag: {\r\n\t\t\t\r\n\t\t\t// Bounded numbers\r\n\t\t\tbounded: {\r\n\t\t\t\tallowed: [new Term( \"true\" ), new Term( \"false\" )],\r\n\t\t\t\tvalue: new Term( \"true\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Maximum integer\r\n\t\t\tmax_integer: {\r\n\t\t\t\tallowed: [new Num( Number.MAX_SAFE_INTEGER )],\r\n\t\t\t\tvalue: new Num( Number.MAX_SAFE_INTEGER ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Minimum integer\r\n\t\t\tmin_integer: {\r\n\t\t\t\tallowed: [new Num( Number.MIN_SAFE_INTEGER )],\r\n\t\t\t\tvalue: new Num( Number.MIN_SAFE_INTEGER ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Rounding function\r\n\t\t\tinteger_rounding_function: {\r\n\t\t\t\tallowed: [new Term( \"down\" ), new Term( \"toward_zero\" )],\r\n\t\t\t\tvalue: new Term( \"toward_zero\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Character conversion\r\n\t\t\tchar_conversion: {\r\n\t\t\t\tallowed: [new Term( \"on\" ), new Term( \"off\" )],\r\n\t\t\t\tvalue: new Term( \"on\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Debugger\r\n\t\t\tdebug: {\r\n\t\t\t\tallowed: [new Term( \"on\" ), new Term( \"off\" )],\r\n\t\t\t\tvalue: new Term( \"off\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Maximum arity of predicates\r\n\t\t\tmax_arity: {\r\n\t\t\t\tallowed: [new Term( \"unbounded\" )],\r\n\t\t\t\tvalue: new Term( \"unbounded\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Unkwnow predicates behavior\r\n\t\t\tunknown: {\r\n\t\t\t\tallowed: [new Term( \"error\" ), new Term( \"fail\" ), new Term( \"warning\" )],\r\n\t\t\t\tvalue: new Term( \"error\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Double quotes behavior\r\n\t\t\tdouble_quotes: {\r\n\t\t\t\tallowed: [new Term( \"chars\" ), new Term( \"codes\" ), new Term( \"atom\" )],\r\n\t\t\t\tvalue: new Term( \"chars\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Occurs check behavior\r\n\t\t\toccurs_check: {\r\n\t\t\t\tallowed: [new Term( \"false\" ), new Term( \"true\" )],\r\n\t\t\t\tvalue: new Term( \"false\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Dialect\r\n\t\t\tdialect: {\r\n\t\t\t\tallowed: [new Term( \"tau\" )],\r\n\t\t\t\tvalue: new Term( \"tau\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Version\r\n\t\t\tversion_data: {\r\n\t\t\t\tallowed: [new Term( \"tau\", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] )],\r\n\t\t\t\tvalue: new Term( \"tau\", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// NodeJS\r\n\t\t\tnodejs: {\r\n\t\t\t\tallowed: [new Term( \"true\" ), new Term( \"false\" )],\r\n\t\t\t\tvalue: new Term( nodejs_flag ? \"true\" : \"false\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\r\n\t\t\t// Arguments\r\n\t\t\targv: {\r\n\t\t\t\tallowed: [nodejs_arguments],\r\n\t\t\t\tvalue: nodejs_arguments,\r\n\t\t\t\tchangeble: false\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Unify\r\n\t\tunify: function(t1, t2, occurs_check) {\r\n\t\t\toccurs_check = occurs_check === undefined ? false : occurs_check;\r\n\t\t\tvar left = Array.isArray(t1) ? t1 : [t1];\r\n\t\t\tvar right = Array.isArray(t2) ? t2 : [t2];\r\n\t\t\tif(left.length !== right.length)\r\n\t\t\t\treturn null;\r\n\t\t\tvar subs = new Substitution();\r\n\t\t\twhile(left.length > 0) {\r\n\t\t\t\tvar s = left.pop();\r\n\t\t\t\tvar t = right.pop();\r\n\t\t\t\tif(pl.type.is_variable(s))\r\n\t\t\t\t\ts = s.apply(subs);\r\n\t\t\t\tif(pl.type.is_variable(t))\r\n\t\t\t\t\tt = t.apply(subs);\r\n\t\t\t\t// same object\r\n\t\t\t\tif(s == t)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t// compound terms\r\n\t\t\t\tif(pl.type.is_term(s) && pl.type.is_term(t)) {\r\n\t\t\t\t\tif(s.indicator !== t.indicator)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\tfor(var i = s.args.length-1; i >= 0; i--) {\r\n\t\t\t\t\t\tleft.push(s.args[i]);\r\n\t\t\t\t\t\tright.push(t.args[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t// numbers\r\n\t\t\t\t} else if(pl.type.is_number(s) && pl.type.is_number(t)) {\r\n\t\t\t\t\tif(s.value !== t.value || s.is_float !== t.is_float)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t// variable - term\r\n\t\t\t\t} else if(pl.type.is_variable(s)) {\r\n\t\t\t\t\tt = t.apply(subs);\r\n\t\t\t\t\t// x = x\r\n\t\t\t\t\tif(pl.type.is_variable(t) && s.id === t.id)\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t// occurs check\r\n\t\t\t\t\tif(occurs_check === true && indexOf(t.variables(), s.id) !== -1)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t// anonymous variable\r\n\t\t\t\t\tif(s.id !== \"_\")\r\n\t\t\t\t\t\tsubs.add(s.id, t);\r\n\t\t\t\t// term - variable\r\n\t\t\t\t} else if(pl.type.is_variable(t)) {\r\n\t\t\t\t\tleft.push(t);\r\n\t\t\t\t\tright.push(s);\r\n\t\t\t\t// user-defined terms\r\n\t\t\t\t} else if(s.unify !== undefined) {\r\n\t\t\t\t\tvar user_subs = s.apply(subs).unify(t.apply(subs), occurs_check);\r\n\t\t\t\t\tif(user_subs == null)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\tfor(var i in user_subs.links)\r\n\t\t\t\t\t\tsubs.add(i, user_subs.links[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn subs.apply(subs);\r\n\t\t},\r\n\r\n\t\t// Is rename\r\n\t\tis_rename: function(obj1, obj2, links) {\r\n\t\t\tlinks = links || {};\r\n\t\t\tif(obj1.is_rename && obj2.is_rename)\r\n\t\t\t\treturn obj1.is_rename(obj2, links);\r\n\t\t\telse if(obj1.equals && obj2.equals)\r\n\t\t\t\treturn obj1.equals(obj2);\r\n\t\t\telse\r\n\t\t\t\treturn false;\r\n\t\t},\r\n\t\t\r\n\t\t// Compare\r\n\t\tcompare: function( obj1, obj2 ) {\r\n\t\t\tvar type = pl.type.compare( obj1, obj2 );\r\n\t\t\treturn type !== 0 ? type : obj1.compare( obj2 );\r\n\t\t},\r\n\t\t\r\n\t\t// Arithmetic comparison\r\n\t\tarithmetic_compare: function( thread, obj1, obj2 ) {\r\n\t\t\tvar expr1 = obj1.interpret( thread );\r\n\t\t\tif( !pl.type.is_number( expr1 ) ) {\r\n\t\t\t\treturn expr1;\r\n\t\t\t} else {\r\n\t\t\t\tvar expr2 = obj2.interpret( thread );\r\n\t\t\t\tif( !pl.type.is_number( expr2 ) ) {\r\n\t\t\t\t\treturn expr2;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn expr1.value < expr2.value ? -1 : (expr1.value > expr2.value ? 1 : 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Operate\r\n\t\toperate: function( thread, obj ) {\r\n\t\t\tif( pl.type.is_operator( obj ) ) {\r\n\t\t\t\tvar op = pl.type.is_operator( obj );\r\n\t\t\t\tvar args = [], value;\r\n\t\t\t\tvar type = false;\r\n\t\t\t\tfor( var i = 0; i < obj.args.length; i++ ) {\r\n\t\t\t\t\tvalue = obj.args[i].interpret( thread );\r\n\t\t\t\t\tif( !pl.type.is_number( value ) ) {\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t} else if( op.type_args !== null && value.is_float !== op.type_args ) {\r\n\t\t\t\t\t\treturn pl.error.type( op.type_args ? \"float\" : \"integer\", value, thread.__call_indicator );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\targs.push( value.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttype = type || value.is_float;\r\n\t\t\t\t}\r\n\t\t\t\targs.push( thread );\r\n\t\t\t\tvalue = pl.arithmetic.evaluation[obj.indicator].fn.apply( this, args );\r\n\t\t\t\tif(obj.indicator === \"^/2\" && !type && value !== parseInt(value, 10))\r\n\t\t\t\t\treturn pl.error.type( \"float\", new Num(args[0],false), thread.__call_indicator );\r\n\t\t\t\ttype = op.type_result === null ? type : op.type_result;\r\n\t\t\t\tif( pl.type.is_term( value ) ) {\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t} else if( value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY ) {\r\n\t\t\t\t\treturn pl.error.evaluation( \"float_overflow\", thread.__call_indicator );\r\n\t\t\t\t} else if( type === false && thread.get_flag( \"bounded\" ).id === \"true\" && (value > thread.get_flag( \"max_integer\" ).value || value < thread.get_flag( \"min_integer\" ).value) ) {\r\n\t\t\t\t\treturn pl.error.evaluation( \"int_overflow\", thread.__call_indicator );\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Num( value, type );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn pl.error.type( \"evaluable\", str_indicator(obj.indicator), thread.__call_indicator );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Errors\r\n\t\terror: {\r\n\t\t\t\r\n\t\t\t// Existence error\r\n\t\t\texistence: function( type, object, indicator ) {\r\n\t\t\t\tif( typeof object === \"string\" )\r\n\t\t\t\t\tobject = str_indicator( object );\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"existence_error\", [new Term( type ), object] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Type error\r\n\t\t\ttype: function( expected, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"type_error\", [new Term( expected ), found] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Instantation error\r\n\t\t\tinstantiation: function( indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"instantiation_error\" ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Uninstantation error\r\n\t\t\tuninstantiation: function( found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"uninstantiation_error\", [new Term( found )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Domain error\r\n\t\t\tdomain: function( expected, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"domain_error\", [new Term( expected ), found]), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Representation error\r\n\t\t\trepresentation: function( flag, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"representation_error\", [new Term( flag )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Permission error\r\n\t\t\tpermission: function( operation, type, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"permission_error\", [new Term( operation ), new Term( type ), found] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Evaluation error\r\n\t\t\tevaluation: function( error, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"evaluation_error\", [new Term( error )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Syntax error\r\n\t\t\tsyntax: function( token, expected, last ) {\r\n\t\t\t\ttoken = token || {value: \"\", line: 0, column: 0, matches: [\"\"], start: 0};\r\n\t\t\t\tvar position = last && token.matches.length > 0 ? token.start + token.matches[0].length : token.start;\r\n\t\t\t\tvar found = last ? new Term(\"token_not_found\") : new Term(\"found\", [new Term(token.value.toString())]);\r\n\t\t\t\tvar info = new Term( \".\", [new Term( \"line\", [new Num(token.line+1)] ), new Term( \".\", [new Term( \"column\", [new Num(position)] ), new Term( \".\", [found, new Term( \"[]\", [] )] )] )] );\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"syntax_error\", [new Term( expected )] ), info] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Syntax error by predicate\r\n\t\t\tsyntax_by_predicate: function( expected, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"syntax_error\", [new Term( expected ) ] ), str_indicator( indicator )] );\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Warnings\r\n\t\twarning: {\r\n\t\t\t\r\n\t\t\t// Singleton variables\r\n\t\t\tsingleton: function( variables, rule, line ) {\r\n\t\t\t\tvar list = new Term( \"[]\" );\r\n\t\t\t\tfor( var i = variables.length-1; i >= 0; i-- )\r\n\t\t\t\t\tlist = new Term( \".\", [new Var(variables[i]), list] );\r\n\t\t\t\treturn new Term( \"warning\", [new Term( \"singleton_variables\", [list, str_indicator(rule)]), new Term(\".\",[new Term( \"line\", [ new Num( line, false ) ]), new Term(\"[]\")])] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Failed goal\r\n\t\t\tfailed_goal: function( goal, line ) {\r\n\t\t\t\treturn new Term( \"warning\", [new Term( \"failed_goal\", [goal]), new Term(\".\",[new Term( \"line\", [ new Num( line, false ) ]), new Term(\"[]\")])] );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t\r\n\t\t// Format of renamed variables\r\n\t\tformat_variable: function( id, variable ) {\r\n\t\t\tvar charcode = variable && variable.length > 0 ? codePointAt(variable, 1) : 0;\r\n\t\t\tif(variable === \"_\" || variable && variable[0] === \"_\" && (charcode === 95 || charcode >= 65 && charcode <= 90))\r\n\t\t\t\treturn \"__\" + id;\r\n\t\t\treturn \"_\" + id;\r\n\t\t},\r\n\t\t\r\n\t\t// Format of computed answers\r\n\t\tformat_answer: function( answer, thread, options ) {\r\n\t\t\tif( thread instanceof Session )\r\n\t\t\t\tthread = thread.thread;\r\n\t\t\tvar options = options ? options : {};\r\n\t\t\toptions.session = thread ? thread.session : undefined;\r\n\t\t\tif( pl.type.is_error( answer ) ) {\r\n\t\t\t\treturn \"uncaught exception: \" + answer.args[0].toString(options);\r\n\t\t\t} else if( answer === false ) {\r\n\t\t\t\treturn \"false\";\r\n\t\t\t} else if( answer === null ) {\r\n\t\t\t\treturn \"limit exceeded\";\r\n\t\t\t} else {\r\n\t\t\t\tvar i = 0;\r\n\t\t\t\tvar str = \"\";\r\n\t\t\t\tif( pl.type.is_substitution( answer ) ) {\r\n\t\t\t\t\tvar dom = answer.domain( true );\r\n\t\t\t\t\tfor( var link in answer.links ){\r\n\t\t\t\t\t\tif( !answer.links.hasOwnProperty(link) ) continue;\r\n\t\t\t\t\t\tif( pl.type.is_variable(answer.links[link]) ) {\r\n\t\t\t\t\t\t\tvar links = {};\r\n\t\t\t\t\t\t\tlinks[answer.links[link].id] = new Var(link);\r\n\t\t\t\t\t\t\tanswer = answer.apply( new Substitution(links) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tanswer = answer.filter( function( id, value ) {\r\n\t\t\t\t\t\treturn !pl.type.is_variable( value ) ||\r\n\t\t\t\t\t\t\tpl.type.is_variable( value ) && answer.has_attributes( id ) ||\r\n\t\t\t\t\t\t\tindexOf( dom, value.id ) !== -1 && id !== value.id;\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t\tfor( var link in answer.links ) {\r\n\t\t\t\t\tif(!answer.links.hasOwnProperty(link))\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tif( pl.type.is_variable( answer.links[link] ) && link === answer.links[link].id ) {\r\n\t\t\t\t\t\tvar attrs = answer.attrs[link];\r\n\t\t\t\t\t\tfor( var module in attrs ) {\r\n\t\t\t\t\t\t\tif(!attrs.hasOwnProperty(module))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\tif( str !== \"\" )\r\n\t\t\t\t\t\t\t\tstr += \", \";\r\n\t\t\t\t\t\t\tstr += \"put_attr(\" + link + \", \" + module + \", \" + attrs[module].toString(options) + \")\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\tif( str !== \"\" )\r\n\t\t\t\t\t\t\tstr += \", \";\r\n\t\t\t\t\t\tstr += link.toString( options ) + \" = \" +\r\n\t\t\t\t\t\t\tanswer.links[link].toString( options, {priority: \"700\", class: \"xfx\", indicator: \"=/2\"}, \"right\" );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( i === 0 ) {\r\n\t\t\t\t\treturn \"true\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn str;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Flatten default errors\r\n\t\tflatten_error: function( error ) {\r\n\t\t\tif( !pl.type.is_error( error ) ) return null;\r\n\t\t\terror = error.args[0];\r\n\t\t\tvar obj = {};\r\n\t\t\tobj.type = error.args[0].id;\r\n\t\t\tobj.thrown = obj.type === \"syntax_error\" ? null : error.args[1].id;\r\n\t\t\tobj.expected = null;\r\n\t\t\tobj.found = null;\r\n\t\t\tobj.representation = null;\r\n\t\t\tobj.existence = null;\r\n\t\t\tobj.existence_type = null;\r\n\t\t\tobj.line = null;\r\n\t\t\tobj.column = null;\r\n\t\t\tobj.permission_operation = null;\r\n\t\t\tobj.permission_type = null;\r\n\t\t\tobj.evaluation_type = null;\r\n\t\t\tif( obj.type === \"type_error\" || obj.type === \"domain_error\" ) {\r\n\t\t\t\tobj.expected = error.args[0].args[0].id;\r\n\t\t\t\tobj.found = error.args[0].args[1].toString();\r\n\t\t\t} else if( obj.type === \"syntax_error\" ) {\r\n\t\t\t\tif( error.args[1].indicator === \"./2\" ) {\r\n\t\t\t\t\tobj.expected = error.args[0].args[0].id;\r\n\t\t\t\t\tobj.found = error.args[1].args[1].args[1].args[0];\r\n\t\t\t\t\tobj.found = obj.found.id === \"token_not_found\" ? obj.found.id : obj.found.args[0].id;\r\n\t\t\t\t\tobj.line = error.args[1].args[0].args[0].value;\r\n\t\t\t\t\tobj.column = error.args[1].args[1].args[0].args[0].value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tobj.thrown = error.args[1].id;\r\n\t\t\t\t}\r\n\t\t\t} else if( obj.type === \"permission_error\" ) {\r\n\t\t\t\tobj.found = error.args[0].args[2].toString();\r\n\t\t\t\tobj.permission_operation = error.args[0].args[0].id;\r\n\t\t\t\tobj.permission_type = error.args[0].args[1].id;\r\n\t\t\t} else if( obj.type === \"evaluation_error\" ) {\r\n\t\t\t\tobj.evaluation_type = error.args[0].args[0].id;\r\n\t\t\t} else if( obj.type === \"representation_error\" ) {\r\n\t\t\t\tobj.representation = error.args[0].args[0].id;\r\n\t\t\t} else if( obj.type === \"existence_error\" ) {\r\n\t\t\t\tobj.existence = error.args[0].args[1].toString();\r\n\t\t\t\tobj.existence_type = error.args[0].args[0].id;\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t},\r\n\t\t\r\n\t\t// Create new session\r\n\t\tcreate: function( limit ) {\r\n\t\t\treturn new pl.type.Session( limit );\r\n\t\t}\r\n\t\t\r\n\t};\r\n\r\n\t// Built-in predicates\r\n\tpl.builtin = new Module(\"system\", {\r\n\r\n\t\t// TERM AND GOAL EXPANSION\r\n\r\n\t\t// goal_expansion/2\r\n\t\t\"goal_expansion/2\": [\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\",\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\",\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\";\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\";\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"->\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\"->\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"catch\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"catch\", [new Var(\"X_\"),new Var(\"Y\"),new Var(\"Z_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Z\"),new Var(\"Z_\")]),new Term(\"=\", [new Var(\"Z_\"),new Var(\"Z\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X_\"),new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"Z\"),new Var(\"Z_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"\\\\+\", [new Var(\"X\")]),new Term(\"\\\\+\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"once\", [new Var(\"X\")]),new Term(\"once\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"findall\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"setof\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"bagof\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\")]),new Term(\"call\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\"[]\", [])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\"[]\", [])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\"[]\", [])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\"[]\", [])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\"[]\", [])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\"),new Var(\"A6\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\".\", [new Var(\"A6\"),new Term(\"[]\", [])])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\"),new Var(\"A6\"),new Var(\"A7\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\".\", [new Var(\"A6\"),new Term(\".\", [new Var(\"A7\"),new Term(\"[]\", [])])])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])]))\r\n\t\t],\r\n\r\n\r\n\r\n\t\t// SYSTEM PREDICATES ($)\r\n\r\n\t\t// '$push_global_stack'/2\r\n\t\t\"$push_global_stack/2\": function(thread, point, atom) {\r\n\t\t\tvar stack = atom.args[0], value = atom.args[1];\r\n\t\t\tif(!pl.type.is_variable(stack)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.push_global_stack(stack.id, value);\r\n\t\t\t\tthread.success(point);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// '$flush_global_stack'/3\r\n\t\t\"$flush_global_stack/3\": function(thread, point, atom) {\r\n\t\t\tvar stack = atom.args[0], list = atom.args[1], tail = atom.args[2];\r\n\t\t\tif(!pl.type.is_variable(stack)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar values = thread.flush_global_stack(stack.id, tail);\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [list, values])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// '$free_variable_set'/3\r\n\t\t\"$free_variable_set/3\": function(thread, point, atom) {\r\n\t\t\tvar goal_in = atom.args[0], goal_out = atom.args[1], vars = atom.args[2];\r\n\t\t\tvar bv = [];\r\n\t\t\tvar pointer = goal_in;\r\n\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"^/2\") {\r\n\t\t\t\tbv = bv.concat(pointer.args[0].variables());\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar gv = pointer.variables();\r\n\t\t\tvar fv = arrayToList(map(difference(gv, bv), function(v) {\r\n\t\t\t\treturn new Var(v);\r\n\t\t\t}));\r\n\t\t\tthread.prepend([\r\n\t\t\t\tnew State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"=\", [goal_out, pointer]),\r\n\t\t\t\t\t\tnew Term(\"=\", [vars, fv]) \r\n\t\t\t\t\t])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)\r\n\t\t\t]);\r\n\t\t},\r\n\r\n\t\t// '$member'/2\r\n\t\t\"$member/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Term(\".\", [new pl.type.Var(\"X\"),new pl.type.Var(\"_\")])]), null),\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Term(\".\", [new pl.type.Var(\"_\"),new pl.type.Var(\"Xs\")])]), new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Var(\"Xs\")]))\r\n\t\t],\r\n\r\n\t\t// '$bind_bagof_keys/2'/2\r\n\t\t\"$bind_bagof_keys/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Term(\"[]\", []),new pl.type.Var(\"_\")]), null),\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Term(\".\", [new pl.type.Term(\"-\", [new pl.type.Var(\"Key\"),new pl.type.Var(\"_\")]),new pl.type.Var(\"Bag\")]),new pl.type.Var(\"Vars\")]), new pl.type.Term(\",\", [new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Key\"),new pl.type.Var(\"Vars\"),new pl.type.Var(\"_\")]),new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Bag\"),new pl.type.Var(\"Vars\")])]))\r\n\t\t],\r\n\r\n\t\t// '$findall'/4\r\n\t\t\"$findall/4\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$findall\", [new pl.type.Var(\"Template0\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Instances\"),new pl.type.Var(\"Tail\")]), new pl.type.Term(\";\", [new pl.type.Term(\",\", [new pl.type.Term(\"copy_term\", [new pl.type.Term(\"-\", [new pl.type.Var(\"Template0\"),new pl.type.Var(\"Goal0\")]),new pl.type.Term(\"-\", [new pl.type.Var(\"Template1\"),new pl.type.Var(\"Goal1\")])]),new pl.type.Term(\",\", [new pl.type.Term(\"call\", [new pl.type.Var(\"Goal1\")]),new pl.type.Term(\",\", [new pl.type.Term(\"copy_term\", [new pl.type.Var(\"Template1\"),new pl.type.Var(\"Template2\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$push_global_stack\", [new pl.type.Var(\"Var\"),new pl.type.Var(\"Template2\")]),new pl.type.Term(\"false\", [])])])])]),new pl.type.Term(\"$flush_global_stack\", [new pl.type.Var(\"Var\"),new pl.type.Var(\"Instances\"),new pl.type.Var(\"Tail\")])]))\r\n\t\t],\r\n\r\n\t\t// '$bagof'/3\r\n\t\t\"$bagof/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bagof\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Answer\")]), new pl.type.Term(\",\", [new pl.type.Term(\"$free_variable_set\", [new pl.type.Term(\"^\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"FV\")]),new pl.type.Term(\",\", [new pl.type.Term(\"findall\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Template\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"Answers\"),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\",\", [new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"_\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keygroup\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"KeyGroups\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keysort\", [new pl.type.Var(\"KeyGroups\"),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\"$member\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Answer\")]),new pl.type.Var(\"KeySorted\")])])])])])]))\r\n\t\t],\r\n\r\n\t\t// '$setof'/3\r\n\t\t\"$setof/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$setof\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Answer\")]), new pl.type.Term(\",\", [new pl.type.Term(\"$free_variable_set\", [new pl.type.Term(\"^\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"FV\")]),new pl.type.Term(\",\", [new pl.type.Term(\"findall\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Template\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"Answers\"),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\",\", [new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"_\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keygroup\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"KeyGroups\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keysort\", [new pl.type.Var(\"KeyGroups\"),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$member\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Unsorted\")]),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\"sort\", [new pl.type.Var(\"Unsorted\"),new pl.type.Var(\"Answer\")])])])])])])]))\r\n\t\t],\r\n\r\n\t\t// '$if/3'\r\n\t\t\"$if/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$if\", [new pl.type.Var(\"If\"),new pl.type.Var(\"Then\"),new pl.type.Var(\"Else\")]), new pl.type.Term(\";\", [new pl.type.Term(\",\", [new pl.type.Term(\"call\", [new pl.type.Var(\"If\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$push_global_stack\", [new pl.type.Var(\"Stack\"),new pl.type.Var(\"_\")]),new pl.type.Term(\"call\", [new pl.type.Var(\"Then\")])])]),new pl.type.Term(\",\", [new pl.type.Term(\"$flush_global_stack\", [new pl.type.Var(\"Stack\"),new pl.type.Term(\"[]\", []),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\"call\", [new pl.type.Var(\"Else\")])])]))\r\n\t\t],\r\n\r\n\r\n\t\t// ATTRIBUTED VARIABLES\r\n\t\t\r\n\t\t//put_attr/3\r\n\t\t\"put_attr/3\": function( thread, point, atom ) {\r\n\t\t\tvar variable = atom.args[0], module = atom.args[1], value = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable(variable) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"variable\", variable, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom(module) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", module, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar subs = point.substitution.set_attribute( variable.id, module, value );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace(null), subs, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// get_attr/3\r\n\t\t\"get_attr/3\": function( thread, point, atom ) {\r\n\t\t\tvar variable = atom.args[0], module = atom.args[1], value = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable(variable) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"variable\", variable, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom(module) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", module, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar attr = point.substitution.get_attribute( variable.id, module );\r\n\t\t\t\tif( attr ) {\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term(\"=\", [value, attr]) ),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t\r\n\t\t// INPUT AND OUTPUT\r\n\t\t\r\n\t\t// op/3\r\n\t\t\"op/3\": function( thread, point, atom ) {\r\n\t\t\tvar priority = atom.args[0], type = atom.args[1], operators = atom.args[2];\r\n\t\t\tif(pl.type.is_atom(operators))\r\n\t\t\t\toperators = new Term(\".\", [operators, new Term(\"[]\")]);\r\n\t\t\tif( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( priority ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( type ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", type, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_empty_list( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operators, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar pointer = operators;\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tvar operator = pointer.args[0];\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\tif( pl.type.is_variable( operator ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_atom( operator ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( priority.value < 0 || priority.value > 1200 ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \",\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"{}\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"[]\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"|\" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"].indexOf( type.id ) === -1 ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"operator_specifier\", type, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar fix = { prefix: null, infix: null, postfix: null };\r\n\t\t\t\t\t\tfor( var p in thread.session.__operators ) {\r\n\t\t\t\t\t\t\tif(!thread.session.__operators.hasOwnProperty(p)) continue;\r\n\t\t\t\t\t\t\tvar classes = thread.session.__operators[p][operator.id];\r\n\t\t\t\t\t\t\tif( classes ) {\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"fx\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fx\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"fy\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fy\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"xf\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"yf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"yf\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfx\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfy\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfy\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"yfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"yfx\" }; }\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar current_class;\r\n\t\t\t\t\t\tswitch( type.id ) {\r\n\t\t\t\t\t\t\tcase \"fy\": case \"fx\": current_class = \"prefix\"; break;\r\n\t\t\t\t\t\t\tcase \"yf\": case \"xf\": current_class = \"postfix\"; break;\r\n\t\t\t\t\t\t\tdefault: current_class = \"infix\"; break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(fix.infix && current_class === \"postfix\" || fix.postfix && current_class === \"infix\") {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif( fix[current_class] ) {\r\n\t\t\t\t\t\t\t\tremove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type );\r\n\t\t\t\t\t\t\t\tif( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) {\r\n\t\t\t\t\t\t\t\t\tdelete thread.session.__operators[fix[current_class].priority][operator.id];\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif( priority.value > 0 ) {\r\n\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {};\r\n\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = [];\r\n\t\t\t\t\t\t\t\tthread.session.__operators[priority.value][operator.id].push( type.id );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_op/3\r\n\t\t\"current_op/3\": function( thread, point, atom ) {\r\n\t\t\tvar priority = atom.args[0], specifier = atom.args[1], operator = atom.args[2];\r\n\t\t\tvar points = [];\r\n\t\t\tif( !pl.type.is_variable( priority ) && !pl.type.is_integer( priority ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( priority ) && ( priority.value < 0 || priority.value > 1200 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( specifier ) && !pl.type.is_atom( specifier ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", specifier, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_atom( specifier ) && indexOf( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"], specifier.id ) === -1 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"operator_specifier\", specifier, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( operator ) && !pl.type.is_atom( operator ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tfor( var p in thread.session.__operators )\r\n\t\t\t\t\tfor( var o in thread.session.__operators[p] )\r\n\t\t\t\t\t\tfor( var i = 0; i < thread.session.__operators[p][o].length; i++ )\r\n\t\t\t\t\t\t\tpoints.push( new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\t\t\t\tnew Term( \",\", [\r\n\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Num( p, false ), priority] ),\r\n\t\t\t\t\t\t\t\t\t\tnew Term( \",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Term( thread.session.__operators[p][o][i], [] ), specifier] ),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Term( o, [] ), operator] )\r\n\t\t\t\t\t\t\t\t\t\t] )\r\n\t\t\t\t\t\t\t\t\t] )\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t) );\r\n\t\t\t\tthread.prepend( points );\r\n\t\t\t}\r\n\t\t},\r\n\t\r\n\r\n\r\n\t\t// LOGIC AND CONTROL STRUCTURES\r\n\t\r\n\t\t// ;/2 (disjunction)\r\n\t\t\";/2\": function(thread, point, atom) {\r\n\t\t\tvar left = atom.args[0], right = atom.args[1];\r\n\t\t\tvar context_left = left.args[0];\r\n\t\t\tvar free_left = left.indicator === \":/2\" ? left.args[1] : left;\r\n\t\t\t// if then else\r\n\t\t\tif(pl.type.is_term(free_left) && free_left.indicator === \"->/2\") {\r\n\t\t\t\tvar cond = left.indicator === \":/2\" ? new Term(\":\", [context_left, new Term(\"call\", [free_left.args[0]])]) : free_left.args[0];\r\n\t\t\t\tvar then = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[1]]) : free_left.args[1];\r\n\t\t\t\tvar otherwise = right;\r\n\t\t\t\tvar goal_fst = point.goal.replace(new Term( \",\", [cond, new Term(\",\", [new Term(\"!\"), then])] ) );\r\n\t\t\t\tvar goal_snd = point.goal.replace(new Term( \",\", [new Term(\"!\"), otherwise]));\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(goal_fst, point.substitution, point),\r\n\t\t\t\t\tnew State(goal_snd, point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t// soft-cut\r\n\t\t\t} else if(pl.type.is_term(free_left) && free_left.indicator === \"*->/2\") {\r\n\t\t\t\tvar cond = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[0]]) : free_left.args[0];\r\n\t\t\t\tvar then = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[1]]) : free_left.args[1];\r\n\t\t\t\tvar otherwise = right;\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$if\", [cond, then, otherwise])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t// otherwise\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(point.goal.replace(left), point.substitution, point),\r\n\t\t\t\t\tnew State(point.goal.replace(right), point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// !/0 (cut)\r\n\t\t\"!/0\": function( thread, point, atom ) {\r\n\t\t\tvar parent_cut, last_cut, states = [];\r\n\t\t\tparent_cut = point;\r\n\t\t\tlast_cut = null;\r\n\t\t\twhile( parent_cut.parent !== null && parent_cut.parent.goal.search( atom ) ) {\r\n\t\t\t\tlast_cut = parent_cut;\r\n\t\t\t\tparent_cut = parent_cut.parent;\r\n\t\t\t\tif(parent_cut.goal !== null) {\r\n\t\t\t\t\tvar selected = parent_cut.goal.select();\r\n\t\t\t\t\tif(selected && selected.indicator === \":/2\")\r\n\t\t\t\t\t\tselected = selected.args[1];\r\n\t\t\t\t\tif( selected && selected.id === \"call\" && selected.search(atom) ) {\r\n\t\t\t\t\t\tparent_cut = last_cut;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar setup_call_cleanup = null;\r\n\t\t\tfor( var i = thread.points.length-1; i >= 0; i-- ) {\r\n\t\t\t\tvar state = thread.points[i];\r\n\t\t\t\tvar node = state.parent;\r\n\t\t\t\twhile( node !== null && node !== parent_cut.parent ) {\r\n\t\t\t\t\tnode = node.parent;\r\n\t\t\t\t}\r\n\t\t\t\tif( node === null && node !== parent_cut.parent )\r\n\t\t\t\t\tstates.push( state );\r\n\t\t\t\telse if(state.setup_call_cleanup_goal)\r\n\t\t\t\t\tsetup_call_cleanup = state.setup_call_cleanup_goal\r\n\t\t\t}\r\n\t\t\tthread.points = states.reverse();\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(setup_call_cleanup),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\t\t\r\n\t\t// \\+ (negation)\r\n\t\t\"\\\\+/1\": function( thread, point, atom ) {\r\n\t\t\tvar goal = atom.args[0];\r\n\t\t\tif( pl.type.is_variable( goal ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_callable( goal ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"callable\", goal, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// TRANSPARENT VERSION OF THE NEGATION\r\n\t\t\t\t/*var neg_thread;\r\n\t\t\t\tif(point.negation_thread) {\r\n\t\t\t\t\tneg_thread = point.negation_thread;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tneg_thread = new Thread( thread.session );\r\n\t\t\t\t\tneg_thread.add_goal( goal );\r\n\t\t\t\t\tpoint.negation_thread = neg_thread;\r\n\t\t\t\t}\r\n\t\t\t\tneg_thread.answer( function( answer ) {\r\n\t\t\t\t\tif(answer === false) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t} else if(pl.type.is_error( answer )) {\r\n\t\t\t\t\t\tthread.throw_error( answer.args[0] );\r\n\t\t\t\t\t} else if(answer === null) {\r\n\t\t\t\t\t\tthread.prepend( [point] );\r\n\t\t\t\t\t\tthread.current_limit = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.again( answer !== null );\r\n\t\t\t\t} );\r\n\t\t\t\treturn true;*/\r\n\t\t\t\t\r\n\t\t\t\t// '\\+'(X) :- call(X), !, fail.\r\n\t\t\t\t// '\\+'(_).\r\n\t\t\t\tthread.prepend( [\r\n\t\t\t\t\tnew State( point.goal.replace( new Term( \",\", [new Term( \",\", [ new Term( \"call\", [goal] ), new Term( \"!\", [] ) ] ), new Term( \"fail\", [] ) ] ) ), point.substitution, point ),\r\n\t\t\t\t\tnew State( point.goal.replace( null ), point.substitution, point )\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ->/2 (implication)\r\n\t\t\"->/2\": function( thread, point, atom ) {\r\n\t\t\tvar cond = atom.args[0], then = atom.args[1];\r\n\t\t\tvar goal = point.goal.replace(new Term(\",\", [\r\n\t\t\t\tnew Term(\"call\", [cond]),\r\n\t\t\t\tnew Term(\",\", [new Term(\"!\"), then])\r\n\t\t\t]));\r\n\t\t\tthread.prepend( [new State( goal, point.substitution, point )] );\r\n\t\t},\r\n\r\n\t\t// *->/2 (soft-cut)\r\n\t\t\"*->/2\": function(thread, point, atom) {\r\n\t\t\tvar cond = atom.args[0], then = atom.args[1];\r\n\t\t\tvar goal = point.goal.replace(new Term(\",\", [\r\n\t\t\t\tnew Term(\"call\", [cond]), then]));\r\n\t\t\tthread.prepend([new State(goal, point.substitution, point)]);\r\n\t\t},\r\n\t\t\r\n\t\t// fail/0\r\n\t\t\"fail/0\": function( _1, _2, _3 ) {},\r\n\t\t\r\n\t\t// false/0\r\n\t\t\"false/0\": function( _1, _2, _3 ) {},\r\n\t\t\r\n\t\t// true/0\r\n\t\t\"true/0\": function( thread, point, _ ) {\r\n\t\t\tthread.success( point );\r\n\t\t},\r\n\t\t\r\n\t\t// call/1..8\r\n\t\t\"call/1\": callN(1),\r\n\t\t\"call/2\": callN(2),\r\n\t\t\"call/3\": callN(3),\r\n\t\t\"call/4\": callN(4),\r\n\t\t\"call/5\": callN(5),\r\n\t\t\"call/6\": callN(6),\r\n\t\t\"call/7\": callN(7),\r\n\t\t\"call/8\": callN(8),\r\n\t\t\r\n\t\t// once/1\r\n\t\t\"once/1\": function( thread, point, atom ) {\r\n\t\t\tvar goal = atom.args[0];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \",\", [new Term( \"call\", [goal] ), new Term( \"!\", [] )] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// forall/2\r\n\t\t\"forall/2\": function( thread, point, atom ) {\r\n\t\t\tvar generate = atom.args[0], test = atom.args[1];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"\\\\+\", [new Term( \",\", [new Term( \"call\", [generate] ), new Term( \"\\\\+\", [new Term( \"call\", [test] )] )] )] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// repeat/0\r\n\t\t\"repeat/0\": function( thread, point, _ ) {\r\n\t\t\tthread.prepend( [new State( point.goal.replace( null ), point.substitution, point ), point] );\r\n\t\t},\r\n\r\n\t\t// EXCEPTIONS\r\n\t\t\r\n\t\t// throw/1\r\n\t\t\"throw/1\": function( thread, point, atom ) {\r\n\t\t\tvar error = atom.args[0];\r\n\t\t\tif(pl.type.is_variable(error)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(thread.level.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tfor(var i = 0; i < thread.points.length; i++) {\r\n\t\t\t\t\tvar state = thread.points[i];\r\n\t\t\t\t\tif(state.setup_call_cleanup_catch) {\r\n\t\t\t\t\t\tthread.points = [new State(\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"catch\", [\r\n\t\t\t\t\t\t\t\t\tstate.setup_call_cleanup_catch,\r\n\t\t\t\t\t\t\t\t\tnew Var(\"_\"),\r\n\t\t\t\t\t\t\t\t\tnew Term(\"throw\", [error])\r\n\t\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\t\tnew Term(\"throw\", [error])\r\n\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t)];\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tthread.throw_error(error);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// catch/3\r\n\t\t\"catch/3\": function(thread, point, atom) {\r\n\t\t\tvar goal = atom.args[0], catcher = atom.args[1], recover = atom.args[2];\r\n\t\t\tvar nthread;\r\n\t\t\tif(!point.catch) {\r\n\t\t\t\tnthread = new Thread(thread.session);\r\n\t\t\t\tnthread.debugger = thread.debugger;\r\n\t\t\t\tnthread.format_success = function(state) { return state.substitution; };\r\n\t\t\t\tnthread.format_error = function(state) { return state.goal; };\r\n\t\t\t\tnthread.add_goal(goal, true, point);\r\n\t\t\t\tpoint.catch = nthread;\r\n\t\t\t} else {\r\n\t\t\t\tnthread = point.catch;\r\n\t\t\t}\r\n\t\t\tvar callback = function(answer) {\r\n\t\t\t\tif(pl.type.is_error(answer)) {\r\n\t\t\t\t\tvar occurs_check = thread.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\tvar state = new State();\r\n\t\t\t\t\tvar mgu = pl.unify(answer.args[0], catcher, occurs_check);\r\n\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\tstate.substitution = point.substitution.apply(mgu);\r\n\t\t\t\t\t\tstate.goal = point.goal.replace(recover).apply(mgu);\r\n\t\t\t\t\t\tstate.parent = point;\r\n\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(answer.args[0]);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(answer !== false && answer !== null) {\r\n\t\t\t\t\tvar state = answer === null ? [] : new State(\r\n\t\t\t\t\t\tpoint.goal.apply(answer).replace(null),\r\n\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t);\r\n\t\t\t\t\tthread.prepend([state, point]);\r\n\t\t\t\t} else if(answer === null) {\r\n\t\t\t\t\tthread.prepend([point]);\r\n\t\t\t\t\tif(thread.has_limit)\r\n\t\t\t\t\t\tthread.current_limit = 0;\r\n\t\t\t\t}\r\n\t\t\t\tthread.again(answer !== null);\r\n\t\t\t};\r\n\t\t\tnthread.answer(callback);\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t// call_cleanup/2\r\n\t\t\"call_cleanup/2\": function(thread, point, atom) {\r\n\t\t\tvar call = atom.args[0], cleanup = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(call) || pl.type.is_variable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(call)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", call, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", cleanup, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar nthread, callback;\r\n\t\t\t\tif(point.hasOwnProperty(\"setup_call_cleanup_thread\")) {\r\n\t\t\t\t\tnthread = point.setup_call_cleanup_thread;\r\n\t\t\t\t\tcallback = point.setup_call_cleanup_callback;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar goal = new Term(\"call\", [call]);\r\n\t\t\t\t\tnthread = new Thread(thread.session);\r\n\t\t\t\t\tnthread.add_goal(goal, true, point);\r\n\t\t\t\t\tcallback = function(answer) {\r\n\t\t\t\t\t\tif(answer === null) {\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal,\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tstate.setup_call_cleanup_thread = nthread;\r\n\t\t\t\t\t\t\tstate.setup_call_cleanup_callback = callback;\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else if(answer === false) {\r\n\t\t\t\t\t\t\tvar cleanup_and_fail = new Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup]),\r\n\t\t\t\t\t\t\t\tnew Term(\"fail\")\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(cleanup_and_fail),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else if(pl.type.is_error(answer)) {\r\n\t\t\t\t\t\t\tvar cleanup_and_throw = new Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup]),\r\n\t\t\t\t\t\t\t\tanswer\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(cleanup_and_throw),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif(nthread.points.length === 0) {\r\n\t\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup])\r\n\t\t\t\t\t\t\t\t\t).apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tvar state1 = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.apply(answer).replace(null),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tvar state2 = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal,\r\n\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_thread = nthread;\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_callback = callback;\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_goal = cleanup.apply(answer);\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_catch = cleanup;\r\n\t\t\t\t\t\t\t\tthread.prepend([state1, state2]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnthread.answer(callback);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// setup_call_cleanup/3\r\n\t\t\"setup_call_cleanup/3\": function(thread, point, atom) {\r\n\t\t\tvar setup = atom.args[0], call = atom.args[1], cleanup = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(setup) || pl.type.is_variable(call) || pl.type.is_variable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(setup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", setup, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(call)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", call, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", cleanup, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"once\", [setup]),\r\n\t\t\t\t\t\tnew Term(\"call_cleanup\", [call, cleanup])\r\n\t\t\t\t\t])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// UNIFICATION\r\n\t\t\r\n\t\t// =/2 (unification)\r\n\t\t\"=/2\": function( thread, point, atom ) {\r\n\t\t\tvar occurs_check = thread.get_flag( \"occurs_check\" ).indicator === \"true/0\";\r\n\t\t\tvar state = new State();\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], occurs_check );\r\n\t\t\tif( mgu !== null ) {\r\n\t\t\t\tstate.goal = point.goal.apply( mgu ).replace( null );\r\n\t\t\t\tstate.substitution = point.substitution.apply( mgu );\r\n\t\t\t\tstate.parent = point;\r\n\t\t\t\tthread.prepend( [state] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// unify_with_occurs_check/2\r\n\t\t\"unify_with_occurs_check/2\": function( thread, point, atom ) {\r\n\t\t\tvar state = new State();\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], true );\r\n\t\t\tif( mgu !== null ) {\r\n\t\t\t\tstate.goal = point.goal.apply( mgu ).replace( null );\r\n\t\t\t\tstate.substitution = point.substitution.apply( mgu );\r\n\t\t\t\tstate.parent = point;\r\n\t\t\t\tthread.prepend( [state] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// \\=/2\r\n\t\t\"\\\\=/2\": function( thread, point, atom ) {\r\n\t\t\tvar occurs_check = thread.get_flag( \"occurs_check\" ).indicator === \"true/0\";\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], occurs_check );\r\n\t\t\tif( mgu === null ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// subsumes_term/2\r\n\t\t/*\r\n\t\tsubsumes_term(General, Specific) :-\r\n\t\t\t\\+ \\+ (\r\n\t\t\tterm_variables(Specific, Vars1),\r\n\t\t\tunify_with_occurs_check(General, Specific),\r\n\t\t\tterm_variables(Vars1, Vars2),\r\n\t\t\tVars1 == Vars2\r\n\t\t).\r\n\t\t*/\r\n\t\t\"subsumes_term/2\": function( thread, point, atom ) {\r\n\t\t\tvar general = atom.args[0], specific = atom.args[1];\r\n\t\t\tvar vars1 = thread.next_free_variable();\r\n\t\t\tvar vars2 = thread.next_free_variable();\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"\\\\+\", [\r\n\t\t\t\t\tnew Term(\"\\\\+\", [\r\n\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\"term_variables\", [specific, vars1]),\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"unify_with_occurs_check\", [general, specific]),\r\n\t\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\t\tnew Term(\"term_variables\", [vars1, vars2]),\r\n\t\t\t\t\t\t\t\t\tnew Term(\"==\", [vars1, vars2])\r\n\t\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t])\r\n\t\t\t\t\t])\r\n\t\t\t\t])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\t\t\r\n\t\t// ALL SOLUTIONS\r\n\r\n\t\t// findall/3\r\n\t\t\"findall/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tvar tail = new Term(\"[]\", []);\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"findall\", [template, goal, instances, tail])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\r\n\t\t// findall/4\r\n\t\t\"findall/4\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2], tail = atom.args[3];\r\n\t\t\tvar proper_goal = goal;\r\n\t\t\tif(pl.type.is_term(goal) && goal.indicator === \":/2\")\r\n\t\t\t\tproper_goal = goal.args[1];\r\n\t\t\tif(pl.type.is_variable(proper_goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(proper_goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(tail) && !pl.type.is_list(tail)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", tail, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$findall\", [template, goal, instances, tail])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// bagof/3\r\n\t\t\"bagof/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error( pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$bagof\", [template, goal, instances])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// setof/3\r\n\t\t\"setof/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error( pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$setof\", [template, goal, instances])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TERM CREATION AND DECOMPOSITION\r\n\t\t\r\n\t\t// functor/3\r\n\t\t\"functor/3\": function( thread, point, atom ) {\r\n\t\t\tvar subs;\r\n\t\t\tvar term = atom.args[0], name = atom.args[1], arity = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( term ) && (pl.type.is_variable( name ) || pl.type.is_variable( arity )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( arity ) && !pl.type.is_integer( arity ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[2], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( name ) && !pl.type.is_atomic( name ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) && !pl.type.is_atom( name ) && pl.type.is_integer( arity ) && arity.value > 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) && pl.type.is_integer( arity ) && arity.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[2], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) ) {\r\n\t\t\t\tif( atom.args[2].value >= 0 ) {\r\n\t\t\t\t\tvar args = [];\r\n\t\t\t\t\tfor( var i = 0; i < arity.value; i++ )\r\n\t\t\t\t\t\targs.push( thread.next_free_variable() );\r\n\t\t\t\t\tvar functor = pl.type.is_number( name ) ? name : new Term( name.id, args );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [term, functor] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar id = pl.type.is_number( term ) ? term : new Term( term.id, [] );\r\n\t\t\t\tvar length = pl.type.is_number( term ) ? new Num( 0, false ) : new Num( term.args.length, false );\r\n\t\t\t\tvar goal = new Term( \",\", [new Term( \"=\", [id, name] ), new Term( \"=\", [length, arity] )] );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// arg/3\r\n\t\t\"arg/3\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) || pl.type.is_variable( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( atom.args[0].value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_compound( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"compound\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar n = atom.args[0].value;\r\n\t\t\t\tif( n > 0 && n <= atom.args[1].args.length ) {\r\n\t\t\t\t\tvar goal = new Term( \"=\", [atom.args[1].args[n-1], atom.args[2]] );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =../2 (univ)\r\n\t\t\"=../2\": function( thread, point, atom ) {\r\n\t\t\tvar list;\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) && (pl.type.is_variable( atom.args[1] )\r\n\t\t\t|| pl.type.is_non_empty_list( atom.args[1] ) && pl.type.is_variable( atom.args[1].args[0] )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_fully_list( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( atom.args[0] ) && pl.type.is_empty_list( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"non_empty_list\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tif( pl.type.is_term( atom.args[0] ) && atom.args[0].args.length > 0 ) {\r\n\t\t\t\t\tlist = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = atom.args[0].args.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist = new Term( \".\", [atom.args[0].args[i], list] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist = new Term( \".\", [new Term( atom.args[0].id ), list] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlist = new Term( \".\", [atom.args[0], new Term( \"[]\" )] );\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, atom.args[1]] ) ), point.substitution, point )] );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[1] ) ) {\r\n\t\t\t\tvar args = [];\r\n\t\t\t\tlist = atom.args[1].args[1];\r\n\t\t\t\twhile( list.indicator === \"./2\" ) {\r\n\t\t\t\t\targs.push( list.args[0] );\r\n\t\t\t\t\tlist = list.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( atom.args[0] ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( args.length === 0 && pl.type.is_compound( atom.args[1].args[0] ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atom.args[1].args[0], atom.indicator ) );\r\n\t\t\t\t} else if( args.length > 0 && (pl.type.is_compound( atom.args[1].args[0] ) || pl.type.is_number( atom.args[1].args[0] )) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[1].args[0], atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif( args.length === 0 ) {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom.args[1].args[0], atom.args[0]], point ) ), point.substitution, point )] );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( atom.args[1].args[0].id, args ), atom.args[0]] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// copy_term/2\r\n\t\t\"copy_term/2\": function(thread, point, atom) {\r\n\t\t\tvar original_term = atom.args[0], renamed_term = atom.args[1];\r\n\t\t\tthread.session.renamed_variables = {};\r\n\t\t\tvar new_term = original_term.rename(thread);\r\n\t\t\tthread.session.renamed_variables = {};\r\n\t\t\tthread.prepend([\r\n\t\t\t\tnew State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [renamed_term, new_term])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t},\r\n\t\t\r\n\t\t// term_variables/2\r\n\t\t\"term_variables/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Term\"),new pl.type.Var(\"Vars\")]), new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Term\"),new pl.type.Var(\"Vars\"),new pl.type.Term(\"[]\", [])]))\r\n\t\t],\r\n\r\n\t\t// term_variables/3\r\n\t\t\"term_variables/3\": function(thread, point, atom) {\r\n\t\t\tvar term = atom.args[0], vars = atom.args[1], tail = atom.args[2];\r\n\t\t\tif( !pl.type.is_fully_list( vars ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", vars, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar list = arrayToList(map(nub(term.variables()), function(v) {\r\n\t\t\t\t\treturn new Var(v);\r\n\t\t\t\t}), tail);\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [vars, list])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// numbervars/3\r\n\t\t\"numbervars/3\": function(thread, point, atom) {\r\n\t\t\tvar term = atom.args[0], start = atom.args[1], end = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(start)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_integer(start)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", start, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(end) && !pl.type.is_integer(end)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", end, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar variables = nub(term.variables());\r\n\t\t\t\tvar value = start.value;\r\n\t\t\t\tvar unif_body = new Term(\"true\");\r\n\t\t\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\t\t\tunif_body = new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"=\", [\r\n\t\t\t\t\t\t\tnew Var(variables[i]),\r\n\t\t\t\t\t\t\tnew Term(\"$VAR\", [new Num(value, false)])]),\r\n\t\t\t\t\t\t\tunif_body]);\r\n\t\t\t\t\tvalue++;\r\n\t\t\t\t}\r\n\t\t\t\tvar unif_end = new Term(\"=\", [end, new Num(value, false)]);\r\n\t\t\t\tif(pl.type.is_variable(end) || end.value === value) {\r\n\t\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [unif_body, unif_end])),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// CLAUSE RETRIEVAL AND INFORMATION\r\n\t\t\r\n\t\t// clause/2\r\n\t\t\"clause/2\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0], body = atom.args[1];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(head.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", head.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(body) && !pl.type.is_callable(body)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t} else if(head.indicator === \",/2\" || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\tthread.throw_error(pl.error.permission(\"access\", \"private_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t} else if(pl.type.is_module(get_module) && get_module.rules[head.indicator]) {\r\n\t\t\t\tif(get_module.is_public_predicate(head.indicator)) {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tif(typeof get_module.rules[head.indicator] === \"function\") {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor(var i = 0; i < get_module.rules[head.indicator].length; i++) {\r\n\t\t\t\t\t\tvar rule = get_module.rules[head.indicator][i];\r\n\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\trule = rule.rename(thread);\r\n\t\t\t\t\t\tif(rule.body === null)\r\n\t\t\t\t\t\t\trule.body = new Term(\"true\");\r\n\t\t\t\t\t\tvar goal = new Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\"=\", [rule.head, head]),\r\n\t\t\t\t\t\t\tnew Term(\"=\", [rule.body, body])\r\n\t\t\t\t\t\t]);\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(goal), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"access\", \"private_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_predicate/1\r\n\t\t\"current_predicate/1\": function(thread, point, atom) {\r\n\t\t\tvar indicator = atom.args[0];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(indicator) && indicator.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(indicator.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", indicator.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = indicator.args[0].id;\r\n\t\t\t\tindicator = indicator.args[1];\r\n\t\t\t} else {\r\n\t\t\t\tmodule_id = \"user\";\r\n\t\t\t}\r\n\t\t\tif(!pl.type.is_variable(indicator) && (!pl.type.is_compound(indicator) || indicator.indicator !== \"//2\")) {\r\n\t\t\t\tthread.throw_error(pl.error.type( \"predicate_indicator\", indicator, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable( indicator ) && !pl.type.is_variable(indicator.args[0]) && !pl.type.is_atom(indicator.args[0])) {\r\n\t\t\t\tthread.throw_error(pl.error.type( \"atom\", indicator.args[0], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(indicator) && !pl.type.is_variable(indicator.args[1]) && !pl.type.is_integer(indicator.args[1])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", indicator.args[1], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(indicator) && pl.type.is_integer(indicator.args[1]) && indicator.args[1].value < 0) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"not_less_than_zero\", indicator.args[1], atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\tfor(var prop in get_module.rules) {\r\n\t\t\t\t\t\tif(!get_module.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tvar predicate = str_indicator(prop);\r\n\t\t\t\t\t\tvar goal = new Term(\"=\", [predicate, indicator]);\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(goal), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// current_module/1\r\n\t\t\"current_module/1\": function(thread, point, atom) {\r\n\t\t\tvar module_id = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(module_id) && !pl.type.is_atom(module_id)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", module_id, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_variable(module_id)) {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tfor(var prop in thread.session.modules) {\r\n\t\t\t\t\t\tif(!thread.session.modules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tstates.push(new State(\r\n\t\t\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [module_id, new Term(prop)])),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(thread.session.modules.hasOwnProperty(module_id.id))\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// predicate_property/2\r\n\t\t\"predicate_property/2\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0], property = atom.args[1];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(head.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", head.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tif(!pl.type.is_variable(head) && !pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(property) && !pl.type.is_predicate_property(property)) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"predicate_property\", property, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar get_module = module_id ? thread.session.modules[module_id] : thread.session.modules.user;\r\n\t\t\t\tvar points = [];\r\n\t\t\t\t// all predicates\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\t// built-in predicates (built_in + static + native_code + meta_predicate?)\r\n\t\t\t\t\tif(!module_id) {\r\n\t\t\t\t\t\tfor(var prop in pl.builtin.rules) {\r\n\t\t\t\t\t\t\tif(!pl.builtin.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tvar indicator = str_indicator(prop);\r\n\t\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < indicator.args[1].value; i++)\r\n\t\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\t\tvar unif_head = new Term(indicator.args[0].id, args);\r\n\t\t\t\t\t\t\tvar current_properties = [\r\n\t\t\t\t\t\t\t\tnew Term(\"static\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"built_in\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"native_code\")\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t\tif(pl.builtin.meta_predicates.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\t\tpl.builtin.meta_predicates[prop]\r\n\t\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\t\t// all predicates, one property / all properties\r\n\t\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// user-defined predicates\r\n\t\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\t\tfor(var prop in get_module.rules) {\r\n\t\t\t\t\t\t\tif(!get_module.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tvar indicator = str_indicator(prop);\r\n\t\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < indicator.args[1].value; i++)\r\n\t\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\t\tvar unif_head = new Term(indicator.args[0].id, args);\r\n\t\t\t\t\t\t\tvar current_properties = [];\r\n\t\t\t\t\t\t\tif(thread.is_public_predicate(prop, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"dynamic\"));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"static\"));\r\n\t\t\t\t\t\t\tif(get_module.rules[prop] instanceof Function)\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"native_code\"));\r\n\t\t\t\t\t\t\tif(thread.is_multifile_predicate(prop, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"multifile\"));\r\n\t\t\t\t\t\t\tif(get_module.meta_predicates.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\t\tget_module.meta_predicates[prop]\r\n\t\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\t\t// all predicates, one property / all properties\r\n\t\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t// one predicate\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar builtin = !module_id && pl.type.is_builtin(head);\r\n\t\t\t\t\tvar predicate = builtin ? pl.builtin.rules[head.indicator] : get_module.rules[head.indicator];\r\n\t\t\t\t\tget_module = builtin ? pl.builtin : get_module;\r\n\t\t\t\t\tif(predicate) {\r\n\t\t\t\t\t\tvar current_properties;\r\n\t\t\t\t\t\tif(builtin) {\r\n\t\t\t\t\t\t\tcurrent_properties = [\r\n\t\t\t\t\t\t\t\tnew Term(\"static\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"built_in\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"native_code\")\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcurrent_properties = [];\r\n\t\t\t\t\t\t\tif(thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"dynamic\"));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"static\"));\r\n\t\t\t\t\t\t\tif(predicate instanceof Function)\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"native_code\"));\r\n\t\t\t\t\t\t\tif(thread.is_multifile_predicate(head.indicator, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"multifile\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(get_module.meta_predicates.hasOwnProperty(head.indicator))\r\n\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\tget_module.meta_predicates[head.indicator]\r\n\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\tfor(var i = 0; i < head.args.length; i++)\r\n\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\tvar unif_head = new Term(head.id, args);\r\n\t\t\t\t\t\t// one predicate, one property / all properties\r\n\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(points);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// listing/0\r\n\t\t\"listing/0\": function( thread, point, atom ) {\r\n\t\t\tvar context_module = atom.context_module ? atom.context_module : \"user\";\r\n\t\t\tvar rules = {};\r\n\t\t\tif(pl.type.is_module(thread.session.modules[context_module])) {\r\n\t\t\t\trules = thread.session.modules[context_module].rules;\r\n\t\t\t}\r\n\t\t\tvar str = \"\";\r\n\t\t\tfor(var indicator in rules) {\r\n\t\t\t\tif(!rules.hasOwnProperty(indicator)) continue;\r\n\t\t\t\tvar predicate = rules[indicator];\r\n\t\t\t\tstr += \"% \" + indicator + \"\\n\";\r\n\t\t\t\tif(predicate instanceof Array) {\r\n\t\t\t\t\tfor(var i = 0; i < predicate.length; i++)\r\n\t\t\t\t\t\tstr += predicate[i].toString( {session: thread.session} ) + \"\\n\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstr += \"/*\\n\" + predicate.toString() + \"\\n*/\";\r\n\t\t\t\t}\r\n\t\t\t\tstr += \"\\n\";\r\n\t\t\t}\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"write\", [new Term(str, [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// listing/1\r\n\t\t\"listing/1\": function( thread, point, atom ) {\r\n\t\t\tvar indicator = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(indicator.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = indicator.args[0].id;\r\n\t\t\t\tindicator = indicator.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(indicator)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_predicate_indicator(indicator)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar rules = {};\r\n\t\t\t\tif(pl.type.is_module(thread.session.modules[context_module])) {\r\n\t\t\t\t\trules = thread.session.modules[context_module].rules;\r\n\t\t\t\t}\r\n\t\t\t\tvar str = \"\";\r\n\t\t\t\tvar str_indicator = indicator.args[0].id + \"/\" + indicator.args[1].value;\r\n\t\t\t\tif(rules.hasOwnProperty(str_indicator)) {\r\n\t\t\t\t\tvar predicate = rules[str_indicator];\r\n\t\t\t\t\tif(predicate instanceof Array) {\r\n\t\t\t\t\t\tfor(var i = 0; i < predicate.length; i++)\r\n\t\t\t\t\t\t\tstr += predicate[i].toString( {session: thread.session} ) + \"\\n\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstr += \"/*\\n\" + predicate.toString() + \"\\n*/\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstr += \"\\n\";\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"write\", [new Term(str, [])])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// LIST OPERATIONS\r\n\r\n\t\t// sort/2\r\n\t\t\"sort/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar arr = [];\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tarr.push( pointer.args[0] );\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar sorted_arr = arr.sort( pl.compare );\r\n\t\t\t\t\tfor( var i = sorted_arr.length-1; i > 0; i-- ) {\r\n\t\t\t\t\t\tif( sorted_arr[i].equals(sorted_arr[i-1]) )\r\n\t\t\t\t\t\t\tsorted_arr.splice(i,1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar sorted_list = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = sorted_arr.length-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tsorted_list = new Term( \".\", [sorted_arr[i], sorted_list] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [sorted_list, expected] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// keysort/2\r\n\t\t\"keysort/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar arr = [];\r\n\t\t\t\tvar elem;\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\telem = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( elem ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_term( elem ) || elem.indicator !== \"-/2\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"pair\", elem, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telem.args[0].pair = elem.args[1];\r\n\t\t\t\t\tarr.push( elem.args[0] );\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_variable(expected)) {\r\n\t\t\t\t\t\tvar pointer = expected;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== \"-/2\")) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"pair\", head, atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar sorted_arr = arr.sort( pl.compare );\r\n\t\t\t\t\tvar sorted_list = new pl.type.Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = sorted_arr.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tsorted_list = new pl.type.Term( \".\", [new pl.type.Term( \"-\", [sorted_arr[i], sorted_arr[i].pair] ), sorted_list] );\r\n\t\t\t\t\t\tdelete sorted_arr[i].pair;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new pl.type.State( point.goal.replace( new pl.type.Term( \"=\", [sorted_list, expected] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// keygroup\r\n\t\t\"keygroup/2\": function(thread, point, atom) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(list)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(expected) && !pl.type.is_fully_list(expected)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", expected, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar keys = [];\r\n\t\t\t\tvar values = [];\r\n\t\t\t\tvar pointer = list\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tvar elem = pointer.args[0];\r\n\t\t\t\t\tif(pl.type.is_variable(elem)) {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(!pl.type.is_term(elem) || elem.indicator !== \"-/2\") {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.type(\"pair\", elem, atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar key = elem.args[0], value = elem.args[1];\r\n\t\t\t\t\tvar index = -1;\r\n\t\t\t\t\tfor(var i = 0; i < keys.length; i++) {\r\n\t\t\t\t\t\tif(pl.compare(key, keys[i]) === 0) {\r\n\t\t\t\t\t\t\tindex = i;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(index === -1) {\r\n\t\t\t\t\t\tindex = keys.length;\r\n\t\t\t\t\t\tkeys.push(key);\r\n\t\t\t\t\t\tvalues.push([]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalues[index].push(value);\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"list\", list, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_variable(expected)) {\r\n\t\t\t\t\t\tvar pointer = expected;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== \"-/2\")) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"pair\", head, atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"list\", expected, atom.indicator));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgroup = new Term(\"[]\", []);\r\n\t\t\t\t\tfor(var i = keys.length-1; i >= 0; i--)\r\n\t\t\t\t\t\tgroup = new Term(\".\", [new Term(\"-\", [keys[i], arrayToList(values[i])]), group]);\r\n\t\t\t\t\tthread.prepend([\r\n\t\t\t\t\t\tnew State(\r\n\t\t\t\t\t\t\tpoint.goal.replace(new pl.type.Term(\"=\", [expected, group])),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// CLAUSE CREATION AND DESTRUCTION\r\n\t\t\r\n\t\t// asserta/1\r\n\t\t\"asserta/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(clause) && clause.indicator === \":/2\") {\r\n\t\t\t\tmodule_id = clause.args[0].id;\r\n\t\t\t\tclause = clause.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, get_module;\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = body_conversion(clause.args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = null;\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else if(body !== null && !pl.type.is_callable(body)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t\t} else if((!pl.type.is_module(thread.session.modules[module_id])\r\n\t\t\t\t|| thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id])) {\r\n\t\t\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: thread.session});\r\n\t\t\t\t\t\tthread.session.modules[module_id] = get_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tget_module = thread.session.modules[module_id];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(get_module.rules[head.indicator] === undefined)\r\n\t\t\t\t\t\tget_module.rules[head.indicator] = [];\r\n\t\t\t\t\tget_module.public_predicates[head.indicator] = true;\r\n\t\t\t\t\tget_module.rules[head.indicator] = [new Rule(head, body, true)].concat(get_module.rules[head.indicator]);\r\n\t\t\t\t\tget_module.update_indices_predicate(head.indicator);\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// assertz/1\r\n\t\t\"assertz/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(clause) && clause.indicator === \":/2\") {\r\n\t\t\t\tmodule_id = clause.args[0].id;\r\n\t\t\t\tclause = clause.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, get_module;\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = body_conversion(clause.args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = null;\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else if(body !== null && !pl.type.is_callable(body)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t\t} else if((!pl.type.is_module(thread.session.modules[module_id])\r\n\t\t\t\t|| thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id])) {\r\n\t\t\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: thread.session});\r\n\t\t\t\t\t\tthread.session.modules[module_id] = get_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tget_module = thread.session.modules[module_id];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(get_module.rules[head.indicator] === undefined)\r\n\t\t\t\t\t\tget_module.rules[head.indicator] = [];\r\n\t\t\t\t\tget_module.public_predicates[head.indicator] = true;\r\n\t\t\t\t\tget_module.rules[head.indicator].push(new Rule(head, body, true));\r\n\t\t\t\t\tget_module.update_indices_predicate(head.indicator);\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// retract/1\r\n\t\t\"retract/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, module_atom, module_id;\r\n\t\t\t\tif(clause.indicator === \":/2\") {\r\n\t\t\t\t\tmodule_atom = clause.args[0];\r\n\t\t\t\t\tclause = clause.args[1];\r\n\t\t\t\t\tif(!pl.type.is_atom(module_atom)) {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", module_atom, atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmodule_atom = new Term(\"user\");\r\n\t\t\t\t}\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = clause.args[1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = new Term(\"true\");\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = module_atom.id;\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(!pl.type.is_module(get_module))\r\n\t\t\t\t\treturn;\r\n\t\t\t\tif(!point.retract) {\r\n\t\t\t\t\tif(thread.is_public_predicate(head.indicator, module_id)\r\n\t\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\t\tif(get_module.rules[head.indicator] !== undefined) {\r\n\t\t\t\t\t\t\tvar states = [];\r\n\t\t\t\t\t\t\tif(typeof get_module.rules[head.indicator] === \"function\") {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfor(var i = 0; i < get_module.rules[head.indicator].length; i++) {\r\n\t\t\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\t\t\tvar orule = get_module.rules[head.indicator][i];\r\n\t\t\t\t\t\t\t\tvar rule = orule.rename(thread);\r\n\t\t\t\t\t\t\t\tif(rule.body === null)\r\n\t\t\t\t\t\t\t\t\trule.body = new Term(\"true\", []);\r\n\t\t\t\t\t\t\t\tvar occurs_check = thread.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\t\t\t\tvar mgu = pl.unify(new Term(\",\", [head, body]), new Term(\",\", [rule.head, rule.body]), occurs_check);\r\n\t\t\t\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\":\", [\r\n\t\t\t\t\t\t\t\t\t\t\t\tmodule_atom,\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"retract\", [new Term(\":-\", [head, body])]),\r\n\t\t\t\t\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, rule.head]),\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [body, rule.body])\r\n\t\t\t\t\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t\t\t\t\t])), point.substitution, point);\r\n\t\t\t\t\t\t\t\t\tstate.retract = orule;\r\n\t\t\t\t\t\t\t\t\tstates.push(state);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tretract(thread, point, head.indicator, point.retract, get_module);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// retractall/1\r\n\t\t\"retractall/1\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!thread.is_public_predicate(head.indicator, context_module)\r\n\t\t\t|| head.indicator === \",/2\"\r\n\t\t\t|| thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(point.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\":\", [\r\n\t\t\t\t\t\t\tnew Term(context_module),\r\n\t\t\t\t\t\t\tnew Term(\"retract\", [new pl.type.Term(\":-\", [head, new Var(\"_\")])])\r\n\t\t\t\t\t\t]),\r\n\t\t\t\t\t\tnew Term(\"fail\", [])\r\n\t\t\t\t\t])), point.substitution, point),\r\n\t\t\t\t\tnew State(point.goal.replace(null), point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// abolish/1\r\n\t\t\"abolish/1\": function(thread, point, atom) {\r\n\t\t\tvar predicate = atom.args[0];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(predicate) && predicate.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(predicate.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", predicate.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = predicate.args[0].id;\r\n\t\t\t\tpredicate = predicate.args[1];\r\n\t\t\t} else {\r\n\t\t\t\tmodule_id = \"user\";\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(predicate) || pl.type.is_term(predicate) && predicate.indicator === \"//2\"\r\n\t\t\t&& (pl.type.is_variable(predicate.args[0]) || pl.type.is_variable(predicate.args[1]))) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_term(predicate) || predicate.indicator !== \"//2\") {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"predicate_indicator\", predicate, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_atom(predicate.args[0])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", predicate.args[0], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_integer(predicate.args[1])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", predicate.args[1], atom.indicator));\r\n\t\t\t} else if(predicate.args[1].value < 0) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"not_less_than_zero\", predicate.args[1], atom.indicator));\r\n\t\t\t} else if(pl.type.is_number(thread.get_flag(\"max_arity\")) && predicate.args[1].value > thread.get_flag(\"max_arity\").value) {\r\n\t\t\t\tthread.throw_error(pl.error.representation(\"max_arity\", atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\tvar indicator = predicate.args[0].id + \"/\" + predicate.args[1].value;\r\n\t\t\t\t\tif(thread.is_public_predicate(indicator, module_id)\r\n\t\t\t\t\t&& indicator !== \",/2\"\r\n\t\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(indicator)) {\r\n\t\t\t\t\t\tdelete get_module.rules[indicator];\r\n\t\t\t\t\t\tdelete get_module.indexed_clauses[indicator];\r\n\t\t\t\t\t\tdelete get_module.non_indexable_clauses[indicator];\r\n\t\t\t\t\t\tdelete get_module.public_predicates[indicator];\r\n\t\t\t\t\t\tdelete get_module.multifile_predicates[indicator];\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", atom.args[0], atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ATOM PROCESSING\r\n\t\t\r\n\t\t// atom_length/2\r\n\t\t\"atom_length/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[1] ) && !pl.type.is_integer( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( atom.args[1] ) && atom.args[1].value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar length = new Num( stringLength(atom.args[0].id), false );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [length, atom.args[1]] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_concat/3\r\n\t\t\"atom_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar str, goal, start = atom.args[0], end = atom.args[1], whole = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( whole ) && (pl.type.is_variable( start ) || pl.type.is_variable( end )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( start ) && !pl.type.is_atom( start ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", start, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( end ) && !pl.type.is_atom( end ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", end, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( whole ) && !pl.type.is_atom( whole ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", whole, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar v1 = pl.type.is_variable( start );\r\n\t\t\t\tvar v2 = pl.type.is_variable( end );\r\n\t\t\t\t//var v3 = pl.type.is_variable( whole );\r\n\t\t\t\tif( !v1 && !v2 ) {\r\n\t\t\t\t\tgoal = new Term( \"=\", [whole, new Term( start.id + end.id )] );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t} else if( v1 && !v2 ) {\r\n\t\t\t\t\tstr = whole.id.substr( 0, whole.id.length - end.id.length );\r\n\t\t\t\t\tif( str + end.id === whole.id ) {\r\n\t\t\t\t\t\tgoal = new Term( \"=\", [start, new Term( str )] );\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if( v2 && !v1 ) {\r\n\t\t\t\t\tstr = whole.id.substr( start.id.length );\r\n\t\t\t\t\tif( start.id + str === whole.id ) {\r\n\t\t\t\t\t\tgoal = new Term( \"=\", [end, new Term( str )] );\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tfor( var i = 0; i <= whole.id.length; i++ ) {\r\n\t\t\t\t\t\tvar atom1 = new Term( whole.id.substr( 0, i ) );\r\n\t\t\t\t\t\tvar atom2 = new Term( whole.id.substr( i ) );\r\n\t\t\t\t\t\tgoal = new Term( \",\", [new Term( \"=\", [atom1, start] ), new Term( \"=\", [atom2, end] )] );\r\n\t\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( states );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// sub_atom/5\r\n\t\t\"sub_atom/5\": function( thread, point, atom ) {\r\n\t\t\tvar i, atom1 = atom.args[0], before = atom.args[1], length = atom.args[2], after = atom.args[3], subatom = atom.args[4];\r\n\t\t\tif( pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( before ) && !pl.type.is_integer( before ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", before, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( length ) && !pl.type.is_integer( length ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", length, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( after ) && !pl.type.is_integer( after ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", after, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( before ) && before.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", before, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( length ) && length.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", length, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( after ) && after.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", after, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( subatom ) && !pl.type.is_atom( subatom ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", subatom, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar bs = [], ls = [], as = [];\r\n\t\t\t\tif( pl.type.is_variable( before ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tbs.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tbs.push( before.value );\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( length ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tls.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tls.push( length.value );\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( after ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tas.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tas.push( after.value );\r\n\t\t\t\t}\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor( var _i in bs ) {\r\n\t\t\t\t\tif(!bs.hasOwnProperty(_i)) continue;\r\n\t\t\t\t\ti = bs[_i];\r\n\t\t\t\t\tfor( var _j in ls ) {\r\n\t\t\t\t\t\tif(!ls.hasOwnProperty(_j)) continue;\r\n\t\t\t\t\t\tvar j = ls[_j];\r\n\t\t\t\t\t\tvar k = atom1.id.length - i - j;\r\n\t\t\t\t\t\tif( indexOf( as, k ) !== -1 ) {\r\n\t\t\t\t\t\tif( i+j+k === atom1.id.length ) {\r\n\t\t\t\t\t\t\t\tvar str = atom1.id.substr( i, j );\r\n\t\t\t\t\t\t\t\tif( atom1.id === atom1.id.substr( 0, i ) + str + atom1.id.substr( i+j, k ) ) {\r\n\t\t\t\t\t\t\t\t\tvar pl1 = new Term( \"=\", [new Term( str ), subatom] );\r\n\t\t\t\t\t\t\t\t\tvar pl2 = new Term( \"=\", [before, new Num( i )] );\r\n\t\t\t\t\t\t\t\t\tvar pl3 = new Term( \"=\", [length, new Num( j )] );\r\n\t\t\t\t\t\t\t\t\tvar pl4 = new Term( \"=\", [after, new Num( k )] );\r\n\t\t\t\t\t\t\t\t\tvar goal = new Term( \",\", [ new Term( \",\", [ new Term( \",\", [pl2, pl3] ), pl4] ), pl1] );\r\n\t\t\t\t\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_chars/2\r\n\t\t\"atom_chars/2\": function( thread, point, atom ) {\r\n\t\t\tvar atom1 = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( !pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\t\tif(!pl.type.is_variable(list)) {\r\n\t\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tif(!pl.type.is_character(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"character\", pointer.args[0], atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar list1 = new Term( \"[]\" );\r\n\t\t\t\t\tvar unilen = stringLength(atom1.id);\r\n\t\t\t\t\tfor( var i = unilen-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist1 = new Term( \".\", [new Term( atom1.id.charAt( i ) ), list1] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list1] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\t\t\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar v = pl.type.is_variable( atom1 );\r\n\t\t\t\t\tvar str = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) && v ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"character\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += pointer.args[0].id;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) && v ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( str ), atom1] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_codes/2\r\n\t\t\"atom_codes/2\": function( thread, point, atom ) {\r\n\t\t\tvar atom1 = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( !pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\t\tif(!pl.type.is_variable(list)) {\r\n\t\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tif(!pl.type.is_character_code(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"integer\", pointer.args[0], atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar list1 = new Term( \"[]\" );\r\n\t\t\t\t\tvar unilen = stringLength(atom1.id);\r\n\t\t\t\t\tfor( var i = unilen-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist1 = new Term( \".\", [new Num( codePointAt(atom1.id,i), false ), list1] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list1] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\t\t\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar v = pl.type.is_variable( atom1 );\r\n\t\t\t\t\tvar str = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character_code( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) && v ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += fromCodePoint( pointer.args[0].value );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) && v ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( str ), atom1] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// char_code/2\r\n\t\t\"char_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar char = atom.args[0], code = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( char ) && pl.type.is_variable( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( code ) ) {\r\n\t\t\t\t\tvar code1 = new Num( codePointAt(char.id,0 ), false );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [code1, code] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar char1 = new Term( fromCodePoint( code.value ) );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [char1, char] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number_chars/2\r\n\t\t\"number_chars/2\": function( thread, point, atom ) {\r\n\t\t\tvar str, num = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", num, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar isvar = pl.type.is_variable( num );\r\n\t\t\t\tif( !pl.type.is_variable( list ) ) {\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar total = true;\r\n\t\t\t\t\tstr = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\ttotal = false;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"character\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += pointer.args[0].id;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal = total && pl.type.is_empty_list( pointer );\r\n\t\t\t\t\tif( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !total && isvar ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( total ) {\r\n\t\t\t\t\t\tif( pl.type.is_variable( pointer ) && isvar ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar expr = thread.parse( str );\r\n\t\t\t\t\t\t\tvar num2 = expr.value;\r\n\t\t\t\t\t\t\tif( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax_by_predicate( \"parseable_number\", atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [num, num2] ) ), point.substitution, point )] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( !isvar ) {\r\n\t\t\t\t\tstr = num.toString();\r\n\t\t\t\t\tvar list2 = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = str.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist2 = new Term( \".\", [ new Term( str.charAt( i ) ), list2 ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list2] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number_codes/2\r\n\t\t\"number_codes/2\": function( thread, point, atom ) {\r\n\t\t\tvar str, num = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", num, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar isvar = pl.type.is_variable( num );\r\n\t\t\t\tif( !pl.type.is_variable( list ) ) {\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar total = true;\r\n\t\t\t\t\tstr = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character_code( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\ttotal = false;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += fromCodePoint( pointer.args[0].value );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal = total && pl.type.is_empty_list( pointer );\r\n\t\t\t\t\tif( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !total && isvar ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( total ) {\r\n\t\t\t\t\t\tif( pl.type.is_variable( pointer ) && isvar ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar expr = thread.parse( str );\r\n\t\t\t\t\t\t\tvar num2 = expr.value;\r\n\t\t\t\t\t\t\tif( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax_by_predicate( \"parseable_number\", atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [num, num2] ) ), point.substitution, point )] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( !isvar ) {\r\n\t\t\t\t\tstr = num.toString();\r\n\t\t\t\t\tvar list2 = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = str.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist2 = new Term( \".\", [ new Num( codePointAt(str,i), false ), list2 ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list2] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// upcase_atom/2\r\n\t\t\"upcase_atom/2\": function( thread, point, atom ) {\r\n\t\t\tvar original = atom.args[0], upcase = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", original, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( upcase ) && !pl.type.is_atom( upcase ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", upcase, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [upcase, new Term( original.id.toUpperCase(), [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// downcase_atom/2\r\n\t\t\"downcase_atom/2\": function( thread, point, atom ) {\r\n\t\t\tvar original = atom.args[0], downcase = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", original, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( downcase ) && !pl.type.is_atom( downcase ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", downcase, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [downcase, new Term( original.id.toLowerCase(), [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atomic_concat/3\r\n\t\t\"atomic_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar atomic1 = atom.args[0], atomic2 = atom.args[1], concat = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( atomic1 ) || pl.type.is_variable( atomic2 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atomic( atomic1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atomic1, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atomic( atomic2 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atomic2, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", concat, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar id = \"\";\r\n\t\t\t\tif( pl.type.is_atom( atomic1 ) ) {\r\n\t\t\t\t\tid += atomic1.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tid += \"\" + atomic1.value;\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_atom( atomic2 ) ) {\r\n\t\t\t\t\tid += atomic2.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tid += \"\" + atomic2.value;\r\n\t\t\t\t}\r\n\t\t\t\tvar atom = new Term(id, []);\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom, concat] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// atomic_list_concat/2\r\n\t\t\"atomic_list_concat/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], concat = atom.args[1];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"atomic_list_concat\", [list, new Term( \"\", [] ), concat] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// atomic_list_concat/3\r\n\t\t\"atomic_list_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], separator = atom.args[1], concat = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( separator ) || pl.type.is_variable( list ) && pl.type.is_variable( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( separator ) && !pl.type.is_number( separator ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", separator, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", concat, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar id = \"\";\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pl.type.is_term( pointer ) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_atom( pointer.args[0] ) && !pl.type.is_number( pointer.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( id !== \"\" )\r\n\t\t\t\t\t\tid += separator.id;\r\n\t\t\t\t\tif( pl.type.is_atom( pointer.args[0] ) )\r\n\t\t\t\t\t\tid += pointer.args[0].id;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tid += \"\" + pointer.args[0].value;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tid = new Term( id, [] );\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_term( pointer ) || pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [id, concat] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TERM COMPARISON\r\n\t\t\r\n\t\t\"@=/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.compare( atom.args[0], atom.args[1] ) > 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t\"@>=/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.compare( atom.args[0], atom.args[1] ) >= 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t\"compare/3\": function( thread, point, atom ) {\r\n\t\t\tvar order = atom.args[0], left = atom.args[1], right = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable( order ) && !pl.type.is_atom( order ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", order, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_atom( order ) && [\"<\", \">\", \"=\"].indexOf( order.id ) === -1 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"order\", order, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar compare = pl.compare( left, right );\r\n\t\t\t\tcompare = compare === 0 ? \"=\" : (compare === -1 ? \"<\" : \">\");\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [order, new Term( compare, [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// EVALUATION\r\n\t\t\r\n\t\t// is/2\r\n\t\t\"is/2\": function( thread, point, atom ) {\r\n\t\t\tvar op = atom.args[1].interpret( thread );\r\n\t\t\tif( !pl.type.is_number( op ) ) {\r\n\t\t\t\tthread.throw_error( op );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom.args[0], op], atom.indicator ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// between/3\r\n\t\t\"between/3\": function( thread, point, atom ) {\r\n\t\t\tvar lower = atom.args[0], upper = atom.args[1], bet = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( lower ) || pl.type.is_variable( upper ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( lower ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", lower, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( upper ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", upper, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( bet ) && !pl.type.is_integer( bet ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", bet, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( bet ) ) {\r\n\t\t\t\t\tif( lower.value <= upper.value ) {\r\n\t\t\t\t\t\tvar states = [new State( point.goal.replace( new Term( \"=\", [bet, lower] ) ), point.substitution, point )];\r\n\t\t\t\t\t\tstates.push( new State( point.goal.replace( new Term( \"between\", [new Num( lower.value+1, false ), upper, bet] ) ), point.substitution, point ) );\r\n\t\t\t\t\t\tthread.prepend( states );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if( lower.value <= bet.value && upper.value >= bet.value ) {\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// succ/2\r\n\t\t\"succ/2\": function( thread, point, atom ) {\r\n\t\t\tvar n = atom.args[0], m = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( n ) && pl.type.is_variable( m ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( n ) && !pl.type.is_integer( n ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", n, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( m ) && !pl.type.is_integer( m ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", m, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( n ) && n.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", n, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( m ) && m.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", m, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( m ) || m.value > 0 ) {\r\n\t\t\t\t\tif( pl.type.is_variable( n ) ) {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [n, new Num( m.value-1, false )] ) ), point.substitution, point )] );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [m, new Num( n.value+1, false )] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =:=/2\r\n\t\t\"=:=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp === 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =\\=/2\r\n\t\t\"=\\\\=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp !== 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// /2\r\n\t\t\">/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp > 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// >=/2\r\n\t\t\">=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp >= 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TYPE TEST\r\n\t\t\r\n\t\t// var/1\r\n\t\t\"var/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom/1\r\n\t\t\"atom/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_atom( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atomic/1\r\n\t\t\"atomic/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_atomic( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// compound/1\r\n\t\t\"compound/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_compound( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// integer/1\r\n\t\t\"integer/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_integer( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// float/1\r\n\t\t\"float/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_float( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number/1\r\n\t\t\"number/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_number( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// nonvar/1\r\n\t\t\"nonvar/1\": function( thread, point, atom ) {\r\n\t\t\tif( !pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ground/1\r\n\t\t\"ground/1\": function( thread, point, atom ) {\r\n\t\t\tif( atom.variables().length === 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// acyclic_term/1\r\n\t\t\"acyclic_term/1\": function( thread, point, atom ) {\r\n\t\t\tvar test = point.substitution.apply( point.substitution );\r\n\t\t\tvar variables = atom.args[0].variables();\r\n\t\t\tfor( var i = 0; i < variables.length; i++ )\r\n\t\t\t\tif( point.substitution.links[variables[i]] !== undefined && !point.substitution.links[variables[i]].equals( test.links[variables[i]] ) )\r\n\t\t\t\t\treturn;\r\n\t\t\tthread.success( point );\r\n\t\t},\r\n\t\t\r\n\t\t// callable/1\r\n\t\t\"callable/1\": function( thread, point, atom ) {\r\n\t\t\tvar callable = atom.args[0];\r\n\t\t\tif(pl.type.is_term(callable)) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// is_list/1\r\n\t\t\"is_list/1\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0];\r\n\t\t\twhile( pl.type.is_term( list ) && list.indicator === \"./2\" )\r\n\t\t\t\tlist = list.args[1];\r\n\t\t\tif( pl.type.is_term( list ) && list.indicator === \"[]/0\" )\r\n\t\t\t\tthread.success( point );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// STREAM SELECTION AND CONTROL\r\n\r\n\t\t// current_input/1\r\n\t\t\"current_input/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(stream)\r\n\t\t\t&& (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias)\r\n\t\t\t\t\t\t\t\t\t\t && !thread.get_stream_by_alias(stream.id))\r\n\t\t\t&& (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) {\r\n\t\t\t\tthread.throw_error( pl.error.domain(\"stream\", stream, atom.indicator) );\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_atom(stream))\r\n\t\t\t\t\tstream = thread.get_stream_by_alias(stream.id);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [stream, thread.get_current_input()])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// current_output/1\r\n\t\t\"current_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(stream)\r\n\t\t\t&& (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias)\r\n\t\t\t\t\t\t\t\t\t\t && !thread.get_stream_by_alias(stream.id))\r\n\t\t\t&& (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) {\r\n\t\t\t\tthread.throw_error( pl.error.domain(\"stream\", stream, atom.indicator) );\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_atom(stream))\r\n\t\t\t\t\tstream = thread.get_stream_by_alias( stream.id );\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [stream, thread.get_current_output()])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_input/1\r\n\t\t\"set_input/1\": function( thread, point, atom ) {\r\n\t\t\tvar input = atom.args[0];\r\n\t\t\tvar stream = pl.type.is_stream( input ) ? input : thread.get_stream_by_alias( input.id );\r\n\t\t\tif( pl.type.is_variable( input ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( input ) && !pl.type.is_atom( input ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", input, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(input.alias)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& !thread.get_stream_by_alias(input.id) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", input, atom.indicator ) );\r\n\t\t\t} else if( stream.output === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", input, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.set_current_input( stream );\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_output/1\r\n\t\t\"set_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar output = atom.args[0];\r\n\t\t\tvar stream = pl.type.is_stream( output ) ? output : thread.get_stream_by_alias( output.id );\r\n\t\t\tif( pl.type.is_variable( output ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( output ) && !pl.type.is_atom( output ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", output, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(output.alias)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& !thread.get_stream_by_alias(output.id) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", output, atom.indicator ) );\r\n\t\t\t} else if( stream.input === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", output, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.set_current_output( stream );\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// open/3\r\n\t\t\"open/3\": function( thread, point, atom ) {\r\n\t\t\tvar dest = atom.args[0], mode = atom.args[1], stream = atom.args[2];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"open\", [dest, mode, stream, new Term(\"[]\", [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// open/4\r\n\t\t\"open/4\": function( thread, point, atom ) {\r\n\t\t\tvar dest = atom.args[0], mode = atom.args[1], stream = atom.args[2], options = atom.args[3];\r\n\t\t\tif( pl.type.is_variable( dest ) || pl.type.is_variable( mode ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( mode ) && !pl.type.is_atom( mode ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", mode, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.uninstantiation( stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( dest ) && !pl.type.is_streamable( dest ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_io_mode( mode ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"io_mode\", mode, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_stream_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"stream_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0].id;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar alias = obj_options[\"alias\"];\r\n\t\t\t\t\tif( alias && thread.get_stream_by_alias(alias) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"open\", \"source_sink\", new Term(\"alias\", [new Term(alias, [])]), atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !obj_options[\"type\"] )\r\n\t\t\t\t\t\tobj_options[\"type\"] = \"text\";\r\n\t\t\t\t\tvar file;\r\n\t\t\t\t\tif( pl.type.is_atom( dest ) )\r\n\t\t\t\t\t\tfile = thread.file_system_open( dest.id, obj_options[\"type\"], mode.id );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfile = dest.stream( obj_options[\"type\"], mode.id );\r\n\t\t\t\t\tif( file === false ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"open\", \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( file === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.existence( \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar newstream = new Stream(\r\n\t\t\t\t\t\tfile, mode.id,\r\n\t\t\t\t\t\tobj_options[\"alias\"],\r\n\t\t\t\t\t\tobj_options[\"type\"],\r\n\t\t\t\t\t\tobj_options[\"reposition\"] === \"true\",\r\n\t\t\t\t\t\tobj_options[\"eof_action\"] );\r\n\t\t\t\t\tif( alias )\r\n\t\t\t\t\t\tthread.session.streams[alias] = newstream;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.session.streams[newstream.id] = newstream;\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [stream, newstream] ) ),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// close/1\r\n\t\t\"close/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"close\", [stream, new Term(\"[]\", [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// close/2\r\n\t\t\"close/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], options = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_close_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"close_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0].id === \"true\";\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(stream2 === thread.session.standard_input || stream2 === thread.session.standard_output || stream2 === thread.session.standard_error) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( stream2 === thread.session.current_input ) {\r\n\t\t\t\t\t\tthread.session.current_input = thread.session.standard_input;\r\n\t\t\t\t\t} else if( stream2 === thread.session.current_output ) {\r\n\t\t\t\t\t\tthread.session.current_output = thread.session.standard_output;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( stream2.alias !== null && stream2.alias !== undefined )\r\n\t\t\t\t\t\tdelete thread.session.streams[stream2.alias];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tdelete thread.session.streams[stream2.id];\r\n\t\t\t\t\tif( stream2.output )\r\n\t\t\t\t\t\tstream2.stream.flush();\r\n\t\t\t\t\tvar closed = stream2.stream.close();\r\n\t\t\t\t\tstream2.stream = null;\r\n\t\t\t\t\tif( obj_options.force === true || closed === true ) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// flush_output/0\r\n\t\t\"flush_output/0\": [\r\n\t\t\tnew Rule(new Term(\"flush_output\", []), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"flush_output\", [new Var(\"S\")])]))\r\n\t\t],\r\n\r\n\t\t// flush_output/1\r\n\t\t\"flush_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tstream2.stream.flush();\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// stream_property/2\r\n\t\t\"stream_property/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], property = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && (!pl.type.is_stream( stream2 ) || stream2.stream === null) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( property ) && !pl.type.is_stream_property( property ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_property\", property, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar streams = [];\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar propvar = pl.type.is_variable(property);\r\n\t\t\t\tif( !pl.type.is_variable( stream ) )\r\n\t\t\t\t\tstreams.push( stream2 );\r\n\t\t\t\telse\r\n\t\t\t\t\tfor( var key in thread.session.streams )\r\n\t\t\t\t\t\tstreams.push( thread.session.streams[key] );\r\n\t\t\t\tfor( var i = 0; i < streams.length; i++ ) {\r\n\t\t\t\t\tvar properties = [];\r\n\t\t\t\t\t// file_name/1\r\n\t\t\t\t\tif( (propvar || property.indicator === \"file_name/1\") && streams[i].filename )\r\n\t\t\t\t\t\tproperties.push( new Term( \"file_name\", [new Term(streams[i].file_name, [])] ) );\r\n\t\t\t\t\t// mode/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"mode/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"mode\", [new Term(streams[i].mode, [])] ) );\r\n\t\t\t\t\t// input/0 or output/0\r\n\t\t\t\t\tif(propvar || property.indicator === \"input/0\" || property.indicator === \"output/0\")\r\n\t\t\t\t\t\tproperties.push( new Term( streams[i].input ? \"input\" : \"output\", [] ) );\r\n\t\t\t\t\t// alias/1\r\n\t\t\t\t\tif( (propvar || property.indicator === \"alias/1\") && streams[i].alias )\r\n\t\t\t\t\t\tproperties.push( new Term( \"alias\", [new Term(streams[i].alias, [])] ) );\r\n\t\t\t\t\t// position/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"position/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"position\", [\r\n\t\t\t\t\t\t\tnew Term(\"position\", [\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].char_count, false),\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].line_count, false),\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].line_position, false)\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t] ) );\r\n\t\t\t\t\t// end_of_stream/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"end_of_stream/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"end_of_stream\", [new Term(\r\n\t\t\t\t\t\t\tstreams[i].position === \"end_of_stream\" || streams[i].stream.eof && streams[i].stream.eof(streams[i].position) ? \"at\" :\r\n\t\t\t\t\t\t\tstreams[i].position === \"past_end_of_stream\" ? \"past\" :\r\n\t\t\t\t\t\t\t\"not\", [])] ) );\r\n\t\t\t\t\t// eof_action/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"eof_action/1\")\t\r\n\t\t\t\t\t\tproperties.push( new Term( \"eof_action\", [new Term(streams[i].eof_action, [])] ) );\r\n\t\t\t\t\t// reposition/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"reposition/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"reposition\", [new Term(streams[i].reposition ? \"true\" : \"false\", [])] ) );\r\n\t\t\t\t\t// type/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"type/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"type\", [new Term(streams[i].type, [])] ) );\r\n\t\t\t\t\tfor( var j = 0; j < properties.length; j++ ) {\r\n\t\t\t\t\t\tstates.push( new State(\r\n\t\t\t\t\t\t\tpoint.goal.replace( new Term( \",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [pl.type.is_variable( stream ) ? stream : stream2, streams[i]]),\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [property, properties[j]])]) ),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t) );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// stream_position_data\r\n\t\t\"stream_position_data/3\": function(thread, point, atom) {\r\n\t\t\tvar field = atom.args[0], position = atom.args[1], value = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(position)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_term(position) || position.indicator !== \"position/3\") {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"stream_position\", position, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(field) && !pl.type.is_atom(field)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", field, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(value) && !pl.type.is_integer(value)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", value, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar fields = [\"char_count\", \"line_count\", \"line_position\"];\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar data_pos = {char_count: 0, line_count: 1, line_position: 2};\r\n\t\t\t\tif(pl.type.is_variable(field)) {\r\n\t\t\t\t\tfor(var i = 0; i < fields.length; i++) {\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [new Term(fields[i]), field]),\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [value, position.args[data_pos[fields[i]]]])\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(data_pos.hasOwnProperty(field.id)) {\r\n\t\t\t\t\tstates.push(new State(point.goal.replace(\r\n\t\t\t\t\t\tnew Term(\"=\", [value, position.args[data_pos[field.id]]])\r\n\t\t\t\t\t), point.substitution, point));\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(states);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// at_end_of_stream/0\r\n\t\t\"at_end_of_stream/0\": [\r\n\t\t\tnew Rule(new Term(\"at_end_of_stream\", []), new pl.type.Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\",\", [new Term(\"stream_property\", [new Var(\"S\"),new Term(\"end_of_stream\", [new Var(\"E\")])]),new Term(\",\", [new Term(\"!\", []),new Term(\";\", [new Term(\"=\", [new Var(\"E\"),new Term(\"at\", [])]),new Term(\"=\", [new Var(\"E\"),new Term(\"past\", [])])])])])]))\r\n\t\t],\r\n\r\n\t\t// at_end_of_stream/1\r\n\t\t\"at_end_of_stream/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar e = thread.next_free_variable();\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\tnew Term(\",\", [new Term(\"stream_property\", [stream2,new Term(\"end_of_stream\", [e])]),\r\n\t\t\t\t\t\tnew Term(\",\", [new Term(\"!\", []),new Term(\";\", [new Term(\"=\", [e,new Term(\"at\", [])]),\r\n\t\t\t\t\t\tnew Term(\"=\", [e,new Term(\"past\", [])])])])])\r\n\t\t\t\t\t),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_stream_position/2\r\n\t\t\"set_stream_position/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], position = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( position ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream_position( position ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_position\", position, atom.indicator ) );\r\n\t\t\t} else if( stream2.reposition === false ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"reposition\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( position.indicator === \"position/3\" ) {\r\n\t\t\t\t\tstream2.position = position.args[0].value;\r\n\t\t\t\t\tstream2.char_count = position.args[0].value;\r\n\t\t\t\t\tstream2.line_count = position.args[1].value;\r\n\t\t\t\t\tstream2.line_position = position.args[2].value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream2.position = position.id;\r\n\t\t\t\t}\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// CHARACTER INPUT OUTPUT\r\n\t\t\r\n\t\t// get_char/1\r\n\t\t\"get_char/1\": [\r\n\t\t\tnew Rule(new Term(\"get_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// get_char/2\r\n\t\t\"get_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_char;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_char = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_char === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_char === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t\tif(stream_char === \"\\n\") {\r\n\t\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Term(stream_char,[]), char] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// get_code/1\r\n\t\t\"get_code/1\": [\r\n\t\t\tnew Rule(new Term(\"get_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// get_code/2\r\n\t\t\"get_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"in_character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_code;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_code = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_code === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_code === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream_code = codePointAt( stream_code, 0 );\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t\tif(stream_code === 10) {\r\n\t\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_code, false), code] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// peek_char/1\r\n\t\t\"peek_char/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_char/2\r\n\t\t\"peek_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_char;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_char = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_char === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_char === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Term(stream_char,[]), char] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// peek_code/1\r\n\t\t\"peek_code/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_code/2\r\n\t\t\"peek_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"in_character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_code;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_code = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_code === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_code === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream_code = codePointAt( stream_code, 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_code, false), code] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_char/1\r\n\t\t\"put_char/1\": [\r\n\t\t\tnew Rule(new Term(\"put_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// put_char/2\r\n\t\t\"put_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put( char.id, stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tif(char.id === \"\\n\") {\r\n\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_code/1\r\n\t\t\"put_code/1\": [\r\n\t\t\tnew Rule(new Term(\"put_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// put_code/2\r\n\t\t\"put_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put( fromCodePoint( code.value ), stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tif(code.value === 10) {\r\n\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// nl/0\r\n\t\t\"nl/0\": [\r\n\t\t\tnew Rule(new Term(\"nl\"), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_char\", [new Var(\"S\"),new Term(\"\\n\")])]))\r\n\t\t],\r\n\r\n\t\t// nl/1\r\n\t\t\"nl/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"put_char\", [stream, new Term(\"\\n\", [])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// BYTE INPUT/OUTPUT\r\n\r\n\t\t// get_byte/1\r\n\t\t\"get_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"get_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// get_byte/2\r\n\t\t\"get_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_byte;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_byte = stream2.stream.get_byte( stream2.position );\r\n\t\t\t\t\tif( stream_byte === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"byte\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_byte === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_byte,false), byte] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// peek_byte/1\r\n\t\t\"peek_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_byte/2\r\n\t\t\"peek_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_byte;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_byte = stream2.stream.get_byte( stream2.position );\r\n\t\t\t\t\tif( stream_byte === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"byte\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_byte === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_byte,false), byte] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_byte/1\r\n\t\t\"put_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"put_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// put_byte/2\r\n\t\t\"put_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put_byte( byte.value, stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TERM INPUT/OUTPUT\r\n\r\n\t\t// read/1\r\n\t\t\"read/1\": [\r\n\t\t\tnew Rule(new Term(\"read\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Term(\"[]\")])]))\r\n\t\t],\r\n\r\n\t\t// read/2\r\n\t\t\"read/2\": [\r\n\t\t\tnew Rule(new Term(\"read\", [new Var(\"S\"), new Var(\"T\")]), new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Term(\"[]\")]))\r\n\t\t],\r\n\r\n\t\t// read_term/2\r\n\t\t\"read_term/2\": [\r\n\t\t\tnew Rule(new Term(\"read_term\", [new Var(\"T\"),new Var(\"O\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Var(\"O\")])]))\r\n\t\t],\r\n\r\n\t\t// read_term/3\r\n\t\t\"read_term/3\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1], options = atom.args[2];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"eof_code\" ) {\r\n\t\t\t\texpr = {\r\n\t\t\t\t\tvalue: new Term(\"end_of_file\", []),\r\n\t\t\t\t\ttype: SUCCESS,\r\n\t\t\t\t\tlen: -1\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_read_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"read_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0];\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar char, tokenizer, expr;\r\n\t\t\t\t\tvar text = \"\";\r\n\t\t\t\t\tvar tokens = [];\r\n\t\t\t\t\tvar last_token = null;\r\n\t\t\t\t\tvar lexical_error = false;\r\n\t\t\t\t\t// Get term\r\n\t\t\t\t\twhile( last_token === null || lexical_error || last_token.name !== \"atom\" || last_token.value !== \".\" || tokens.length > 0 && expr.type === ERROR ) {\r\n\t\t\t\t\t\tchar = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\t\twhile(char !== null && char !== \".\" && char !== \"end_of_stream\" && char !== \"past_end_of_stream\") {\r\n\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\ttext += char;\r\n\t\t\t\t\t\t\tchar = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif( char === null ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else if( char === \"end_of_stream\" || char === \"past_end_of_stream\" ) {\r\n\t\t\t\t\t\t\tif(tokens === null || tokens.length === 0) {\r\n\t\t\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new Term(\"end_of_file\", []),\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS,\r\n\t\t\t\t\t\t\t\t\tlen: -1\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t} else if(expr) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( last_token, \"unexpected end of file\", false ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( last_token, \"token not found\", true ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if(char === \".\") {\r\n\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\ttext += char;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttokenizer = new Tokenizer( thread );\r\n\t\t\t\t\t\ttokenizer.new_text( text );\r\n\t\t\t\t\t\ttokens = tokenizer.get_tokens();\r\n\t\t\t\t\t\tnum_token = tokens !== null && tokens.length > 1 ? tokens[tokens.length-2] : null;\r\n\t\t\t\t\t\tlast_token = tokens !== null && tokens.length > 0 ? tokens[tokens.length-1] : null;\r\n\t\t\t\t\t\tif(tokens === null)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tlexical_error = false;\r\n\t\t\t\t\t\tfor(var i = 0; i < tokens.length && !lexical_error; i++)\r\n\t\t\t\t\t\t\tlexical_error = tokens[i].name === \"lexical\";\r\n\t\t\t\t\t\tif(lexical_error)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\texpr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false);\r\n\t\t\t\t\t\tif(num_token && num_token.name === \"number\" && !num_token.float && !num_token.blank && last_token.value === \".\") {\r\n\t\t\t\t\t\t\tvar next_char = stream2.stream.get(1, stream2.position);\r\n\t\t\t\t\t\t\tif(next_char >= '0' && next_char <= '9') {\r\n\t\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\t\ttext += next_char;\r\n\t\t\t\t\t\t\t\tlast_token = null;\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(last_token) {\r\n\t\t\t\t\t\tif(last_token.line_position === last_token.len)\r\n\t\t\t\t\t\t\tstream2.line_position += last_token.line_position;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tstream2.line_position = last_token.line_position;\r\n\t\t\t\t\t\tstream2.line_count += last_token.line_count;\r\n\t\t\t\t\t\tstream2.char_count += last_token.len;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Succeed analyzing term\r\n\t\t\t\t\tif( expr.type === SUCCESS && (expr.len === -1 || expr.len === tokens.length-1 && last_token.value === \".\" )) {\r\n\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\texpr = expr.value.rename( thread );\r\n\t\t\t\t\t\tvar eq = new Term( \"=\", [term, expr] );\r\n\t\t\t\t\t\t// Variables\r\n\t\t\t\t\t\tif( obj_options.variables ) {\r\n\t\t\t\t\t\t\tvar vars = arrayToList( map( nub( expr.variables() ), function(v) { return new Var(v); } ) );\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.variables, vars] )] )\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Variable names\r\n\t\t\t\t\t\tif( obj_options.variable_names ) {\r\n\t\t\t\t\t\t\tvar vars = nub(expr.variables());\r\n\t\t\t\t\t\t\tvar plvars = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < vars.length; i++) {\r\n\t\t\t\t\t\t\t\tvar v = vars[i];\r\n\t\t\t\t\t\t\t\tfor( var prop in thread.session.renamed_variables ) {\r\n\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables.hasOwnProperty( prop ) ) {\r\n\t\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables[ prop ] === v ) {\r\n\t\t\t\t\t\t\t\t\t\t\tplvars.push(new Term( \"=\", [new Term( prop, []), new Var(v)] ));\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplvars = arrayToList(plvars);\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.variable_names, plvars] )] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Singletons\r\n\t\t\t\t\t\tif( obj_options.singletons ) {\r\n\t\t\t\t\t\t\tvar vars = nub(new Rule(expr, null).singleton_variables(true));\r\n\t\t\t\t\t\t\tvar plvars = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < vars.length; i++) {\r\n\t\t\t\t\t\t\t\tvar v = vars[i];\r\n\t\t\t\t\t\t\t\tfor( var prop in thread.session.renamed_variables ) {\r\n\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables.hasOwnProperty( prop ) ) {\r\n\t\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables[ prop ] === v ) {\r\n\t\t\t\t\t\t\t\t\t\t\tplvars.push(new Term( \"=\", [new Term( prop, []), new Var(v)] ));\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplvars = arrayToList(plvars);\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.singletons, plvars] )] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( eq ), point.substitution, point )] );\r\n\t\t\t\t\t// Failed analyzing term\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif( expr.type === SUCCESS )\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( tokens[expr.len], \"unexpected token\", false ) );\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tthread.throw_error( expr.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// write/1\r\n\t\t\"write/1\": [\r\n\t\t\tnew Rule(new Term(\"write\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write/2\r\n\t\t\"write/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"false\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"false\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"true\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\t\t\r\n\t\t// writeq/1\r\n\t\t\"writeq/1\": [\r\n\t\t\tnew Rule(new Term(\"writeq\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"writeq\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// writeq/2\r\n\t\t\"writeq/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"true\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"false\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"true\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\t\t\r\n\t\t// write_canonical/1\r\n\t\t\"write_canonical/1\": [\r\n\t\t\tnew Rule(new Term(\"write_canonical\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write_canonical\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write_canonical/2\r\n\t\t\"write_canonical/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"true\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"true\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"false\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// write_term/2\r\n\t\t\"write_term/2\": [\r\n\t\t\tnew Rule(new Term(\"write_term\", [new Var(\"T\"),new Var(\"O\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write_term\", [new Var(\"S\"),new Var(\"T\"),new Var(\"O\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write_term/3\r\n\t\t\"write_term/3\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1], options = atom.args[2];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_write_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"write_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(property.indicator === \"variable_names/1\")\r\n\t\t\t\t\t\tobj_options[property.id] = property.args[0];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tobj_options[property.id] = property.args[0].id === \"true\";\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tobj_options.session = thread.session;\r\n\t\t\t\t\tvar text = term.toString( obj_options );\r\n\t\t\t\t\tstream2.stream.put( text, stream2.position );\r\n\t\t\t\t\tif( typeof stream2.position === \"number\" )\r\n\t\t\t\t\t\tstream2.position += text.length;\r\n\t\t\t\t\tvar nl = (text.match(/\\n/g) || []).length;\r\n\t\t\t\t\tstream2.line_count += nl;\r\n\t\t\t\t\tif(nl > 0)\r\n\t\t\t\t\t\tstream2.line_position = text.length - text.lastIndexOf(\"\\n\") - 1;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tstream2.line_position += text.length;\r\n\t\t\t\t\tstream2.char_count += text.length;\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// IMPLEMENTATION DEFINED HOOKS\r\n\t\t\r\n\t\t// halt/0\r\n\t\t\"halt/0\": function( thread, point, _ ) {\r\n\t\t\tif( thread.get_flag(\"nodejs\").indicator === \"true/0\" )\r\n\t\t\t\tprocess.exit();\r\n\t\t\tthread.points = [];\r\n\t\t},\r\n\t\t\r\n\t\t// halt/1\r\n\t\t\"halt/1\": function( thread, point, atom ) {\r\n\t\t\tvar int = atom.args[0];\r\n\t\t\tif( pl.type.is_variable( int ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( int ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", int, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( thread.get_flag(\"nodejs\").indicator === \"true/0\" )\r\n\t\t\t\t\tprocess.exit(int.value);\r\n\t\t\t\tthread.points = [];\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_prolog_flag/2\r\n\t\t\"current_prolog_flag/2\": function( thread, point, atom ) {\r\n\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\tif( !pl.type.is_variable( flag ) && !pl.type.is_atom( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( flag ) && !pl.type.is_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor( var name in pl.flag ) {\r\n\t\t\t\t\tif(!pl.flag.hasOwnProperty(name)) continue;\r\n\t\t\t\t\tvar goal = new Term( \",\", [new Term( \"=\", [new Term( name ), flag] ), new Term( \"=\", [thread.get_flag(name), value] )] );\r\n\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// set_prolog_flag/2\r\n\t\t\"set_prolog_flag/2\": function( thread, point, atom ) {\r\n\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_modifiable_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"flag\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_value_flag( flag, value ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"flag_value\", new Term( \"+\", [flag, value] ), atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.session.flag[flag.id] = value;\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// LOAD PROLOG SOURCE FILES\r\n\r\n\t\t// consult/1\r\n\t\t\"consult/1\": function(thread, point, atom) {\r\n\t\t\tvar src = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(src.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = src.args[0].id;\r\n\t\t\t\tsrc = src.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(src)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_atom(src)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", src, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif(thread.consult(src.id, {\r\n\t\t\t\t\tcontext_module: context_module,\r\n\t\t\t\t\ttext: false,\r\n\t\t\t\t\thtml: false,\r\n\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: function(err) {\r\n\t\t\t\t\t\tthread.throw_error(err);\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TIME AND DATES\r\n\r\n\t\t// get_time/1\r\n\t\t\"get_time/1\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(time) && !pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar current = new Num(Date.now(), true);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [time, current] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_property\r\n\t\t\"time_property/2\": function(thread, point, atom) {\r\n\t\t\tvar time = atom.args[0], property = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(time) && !pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"number\", time, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(property) && !pl.type.is_time_property(property)) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"time_property\", property, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar props;\r\n\t\t\t\tif(pl.type.is_variable(property)) {\r\n\t\t\t\t\tprops = [\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\", \"weekday\"];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tprops = [property.id];\r\n\t\t\t\t}\r\n\t\t\t\tvar date = new Date(time.value);\r\n\t\t\t\tvar value;\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor(var i = 0; i < props.length; i++) {\r\n\t\t\t\t\tswitch(props[i]) {\r\n\t\t\t\t\t\tcase \"year\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"year\", [new Num(date.getFullYear(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"month\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"month\", [new Num(date.getMonth(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"day\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"day\", [new Num(date.getDate(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"hours\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"hours\", [new Num(date.getHours(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"minutes\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"minutes\", [new Num(date.getMinutes(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"seconds\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"seconds\", [new Num(date.getSeconds(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"milliseconds\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"milliseconds\", [new Num(date.getMilliseconds(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"weekday\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"weekday\", [new Num(date.getDay(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstates.push(new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [property, value] ) ), \r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t));\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(states);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_year/2\r\n\t\t\"time_year/2\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0], year = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_variable(year) && !pl.type.is_integer(year)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", year, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar value = new Num(new Date(time.value).getFullYear(), false);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [year, value] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_month/2\r\n\t\t\"time_month/2\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0], month = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_variable(month) && !pl.type.is_integer(month)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", month, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar value = new Num(new Date(time.value).getMonth(), false);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [month, value] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// GRAMMARS\r\n\r\n\t\t// phrase/3\r\n\t\t\"phrase/3\": function( thread, point, atom ) {\r\n\t\t\tvar grbody = atom.args[0], s0 = atom.args[1], s = atom.args[2];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(grbody.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = grbody.args[0].id;\r\n\t\t\t\tgrbody = grbody.args[1];\r\n\t\t\t}\r\n\t\t\tif( pl.type.is_variable( grbody ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_callable( grbody ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"callable\", grbody, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar goal = body_to_dcg( grbody.clone(), s0, thread );\r\n\t\t\t\tgoal.value = new Term(\":\", [new Term(context_module), new Term(\"call\", [goal.value])]);\r\n\t\t\t\tif(goal !== null) {\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \",\", [goal.value, new Term(\"=\", [goal.variable, s])] ) ), \r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// phrase/2\r\n\t\t\"phrase/2\": function( thread, point, atom ) {\r\n\t\t\tvar grbody = atom.args[0], s0 = atom.args[1];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"phrase\", [grbody, s0, new Term(\"[]\", [])] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TAU PROLOG INFORMATION\r\n\r\n\t\t// version/0\r\n\t\t\"version/0\": function( thread, point, atom ) {\r\n\t\t\tvar msg = \"Welcome to Tau Prolog version \" + version.major + \".\" + version.minor + \".\" + version.patch + \"\\n\";\r\n\t\t\tmsg += \"Tau Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.\\n\";\r\n\t\t\tmsg += \"Please run ?- license. for legal details.\\n\";\r\n\t\t\tmsg += \"For online help and background, visit http:/tau-prolog.org\";\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"write\", [new Term( msg, [] )] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// license/0\r\n\t\t\"license/0\": function( thread, point, atom ) {\r\n\t\t\tvar msg = \"Tau Prolog. A Prolog interpreter in JavaScript.\\n\";\r\n\t\t\tmsg += \"Copyright (C) 2017 - 2022 José Antonio Riaza Valverde\\n\\n\";\r\n\t\t\tmsg += \"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\";\r\n\t\t\tmsg += \"1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\";\r\n\t\t\tmsg += \"2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\";\r\n\t\t\tmsg += \"3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\n\";\r\n\t\t\tmsg += \"THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\\n\";\r\n\t\t\tmsg += \"You should have received a copy of the BSD 3-Clause License along with this program. If not, see https://opensource.org/licenses/BSD-3-Clause\";\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"write\", [new Term( msg, [] )] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t}\r\n\r\n\t}, \"all\", {\r\n\t\tmeta_predicates: {\r\n\t\t\t// '$findall'(?, 0, -, ?)\r\n\t\t\t\"$findall/4\": new Term(\"$findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\"), new Term(\"?\")]),\r\n\t\t\t// '$bagof'(?, ^, -)\r\n\t\t\t\"$bagof/3\": new Term(\"$bagof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// '$setof'(?, ^, -)\r\n\t\t\t\"$setof/3\": new Term(\"$setof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// '$if'(0, 0, 0)\r\n\t\t\t\"$if/3\": new Term(\"$if\", [new Num(0, false), new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0;0)\r\n\t\t\t\";/2\": new Term(\";\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0->0)\r\n\t\t\t\"->/2\": new Term(\"->\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0->0)\r\n\t\t\t\"*->/2\": new Term(\"*->\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (\\+0)\r\n\t\t\t\"\\\\+/1\": new Term(\"\\\\+\", [new Num(0, false)]),\r\n\t\t\t// abolish(:)\r\n\t\t\t\"abolish/1\": new Term(\"abolish\", [new Term(\":\")]),\r\n\t\t\t// asserta(:)\r\n\t\t\t\"asserta/1\": new Term(\"asserta\", [new Term(\":\")]),\r\n\t\t\t// assertz(:)\r\n\t\t\t\"assertz/1\": new Term(\"assertz\", [new Term(\":\")]),\r\n\t\t\t// bagof(?, ^, -)\r\n\t\t\t\"bagof/3\": new Term(\"bagof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// call(0)\r\n\t\t\t\"call/1\": new Term(\"call\", [new Num(0, false)]),\r\n\t\t\t// call(1, ?)\r\n\t\t\t\"call/2\": new Term(\"call\", [new Num(1, false), new Term(\"?\")]),\r\n\t\t\t// call(2, ?, ?)\r\n\t\t\t\"call/3\": new Term(\"call\", [new Num(2, false), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(3, ?, ?, ?)\r\n\t\t\t\"call/4\": new Term(\"call\", [new Num(3, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(4, ?, ?, ?, ?)\r\n\t\t\t\"call/5\": new Term(\"call\", [new Num(4, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(5, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/6\": new Term(\"call\", [new Num(5, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(6, ?, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/7\": new Term(\"call\", [new Num(6, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(7, ?, ?, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/8\": new Term(\"call\", [new Num(6, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call_cleanup(0, 0)\r\n\t\t\t\"call_cleanup/2\": new Term(\"call_cleanup\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// catch(0, ?, 0)\r\n\t\t\t\"catch/3\": new Term(\"catch\", [new Num(0, false), new Term(\"?\"), new Num(0, false)]),\r\n\t\t\t// consult(:)\r\n\t\t\t\"consult/1\": new Term(\"consult\", [new Term(\":\")]),\r\n\t\t\t// clause(:, ?)\r\n\t\t\t\"clause/2\": new Term(\"clause\", [new Term(\":\"), new Term(\"?\")]),\r\n\t\t\t// current_predicate(?, :)\r\n\t\t\t\"current_predicate/2\": new Term(\"current_predicate\", [new Term(\"?\"), new Term(\":\")]),\r\n\t\t\t// findall(?, 0, -)\r\n\t\t\t\"findall/3\": new Term(\"findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\")]),\r\n\t\t\t// findall(?, 0, -, ?)\r\n\t\t\t\"findall/4\": new Term(\"findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\"), new Term(\"?\")]),\r\n\t\t\t// forall(0, 0)\r\n\t\t\t\"forall/2\": new Term(\"forall\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// listing(:)\r\n\t\t\t\"listing/1\": new Term(\"listing\", [new Term(\":\")]),\r\n\t\t\t// once(0)\r\n\t\t\t\"once/1\": new Term(\"once\", [new Num(0, false)]),\r\n\t\t\t// phrase(:, ?)\r\n\t\t\t\"phrase/2\": new Term(\"phrase\", [new Term(\":\"),new Term(\"?\")]),\r\n\t\t\t// phrase(:, ?, ?)\r\n\t\t\t\"phrase/3\": new Term(\"phrase\", [new Term(\":\"),new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// retract(:)\r\n\t\t\t\"retract/1\": new Term(\"retract\", [new Term(\":\")]),\r\n\t\t\t// retractall(:)\r\n\t\t\t\"retractall/1\": new Term(\"retractall\", [new Term(\":\")]),\r\n\t\t\t// setup_call_cleanup(0, 0, 0)\r\n\t\t\t\"setup_call_cleanup/3\": new Term(\"setup_call_cleanup\", [new Num(0, false), new Num(0, false), new Num(0, false)]),\r\n\t\t\t// setof(?, ^, -)\r\n\t\t\t\"setof/3\": new Term(\"setof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")])\r\n\t\t}\r\n\t});\r\n\r\n\tif( typeof module !== 'undefined' ) {\r\n\t\tmodule.exports = pl;\r\n\t} else {\r\n\t\twindow.pl = pl;\r\n\t}\r\n\t\r\n})();\r\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\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\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\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()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\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 isObject(re) && 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 isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (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 = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","var indexOf = function (xs, item) {\n if (xs.indexOf) return xs.indexOf(item);\n else for (var i = 0; i < xs.length; i++) {\n if (xs[i] === item) return i;\n }\n return -1;\n};\nvar Object_keys = function (obj) {\n if (Object.keys) return Object.keys(obj)\n else {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n }\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nvar defineProp = (function() {\n try {\n Object.defineProperty({}, '_', {});\n return function(obj, name, value) {\n Object.defineProperty(obj, name, {\n writable: true,\n enumerable: false,\n configurable: true,\n value: value\n })\n };\n } catch(e) {\n return function(obj, name, value) {\n obj[name] = value;\n };\n }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n if (!(this instanceof Script)) return new Script(code);\n this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n if (!(context instanceof Context)) {\n throw new TypeError(\"needs a 'context' argument.\");\n }\n \n var iframe = document.createElement('iframe');\n if (!iframe.style) iframe.style = {};\n iframe.style.display = 'none';\n \n document.body.appendChild(iframe);\n \n var win = iframe.contentWindow;\n var wEval = win.eval, wExecScript = win.execScript;\n\n if (!wEval && wExecScript) {\n // win.eval() magically appears when this is called in IE:\n wExecScript.call(win, 'null');\n wEval = win.eval;\n }\n \n forEach(Object_keys(context), function (key) {\n win[key] = context[key];\n });\n forEach(globals, function (key) {\n if (context[key]) {\n win[key] = context[key];\n }\n });\n \n var winKeys = Object_keys(win);\n\n var res = wEval.call(win, this.code);\n \n forEach(Object_keys(win), function (key) {\n // Avoid copying circular objects like `top` and `window` by only\n // updating existing context properties or new properties in the `win`\n // that was only introduced after the eval.\n if (key in context || indexOf(winKeys, key) === -1) {\n context[key] = win[key];\n }\n });\n\n forEach(globals, function (key) {\n if (!(key in context)) {\n defineProp(context, key, win[key]);\n }\n });\n \n document.body.removeChild(iframe);\n \n return res;\n};\n\nScript.prototype.runInThisContext = function () {\n return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n var ctx = Script.createContext(context);\n var res = this.runInContext(ctx);\n\n if (context) {\n forEach(Object_keys(ctx), function (key) {\n context[key] = ctx[key];\n });\n }\n\n return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n exports[name] = Script[name] = function (code) {\n var s = Script(code);\n return s[name].apply(s, [].slice.call(arguments, 1));\n };\n});\n\nexports.isContext = function (context) {\n return context instanceof Context;\n};\n\nexports.createScript = function (code) {\n return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n var copy = new Context();\n if(typeof context === 'object') {\n forEach(Object_keys(context), function (key) {\n copy[key] = context[key];\n });\n }\n return copy;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HistoryGraph = void 0;\nrequire(\"d3-transition\");\nconst d3_color_1 = require(\"d3-color\");\nconst d3_scale_1 = require(\"d3-scale\");\nconst d3_scale_chromatic_1 = require(\"d3-scale-chromatic\");\nconst d3_selection_1 = require(\"d3-selection\");\nconst d3_zoom_1 = require(\"d3-zoom\");\nconst fs = require(\"file-saver\");\nclass HistoryGraph {\n constructor(graphId, div, config = {}) {\n this.nodes = [];\n this.versionNodes = [];\n this.edges = [];\n this.maxX = 0;\n this.maxY = 0;\n this.maxId = 0;\n this.i = 0;\n var defaultConfig = {\n customSelectNode: (g, d) => false,\n customCtrlClick: (g, d) => false,\n customForm: (g, form) => null,\n customSize: (g) => [g.config.width, g.config.height],\n customWindowTabCommand: (trialIdSimplified, trialId, command) => false,\n hintMessage: \"Ctrl+Shift click or ⌘+Shift click to diff trials\",\n width: 200,\n height: 100,\n radius: 20,\n moveX: 20,\n moveY: 25,\n moveY2: 10,\n spacing: 17,\n margin: 50,\n fontSize: 10,\n useTooltip: false,\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.graphId = graphId;\n this.zoom = (0, d3_zoom_1.zoom)()\n .on(\"zoom\", (event) => {\n return this.zoomFunction(event);\n })\n .on(\"start\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"move\"))\n .on(\"end\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"auto\"))\n .wheelDelta(function () {\n const e = event;\n return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000;\n });\n this.div = (0, d3_selection_1.select)(div);\n let form = (0, d3_selection_1.select)(div)\n .append(\"form\")\n .classed(\"history-toolbar\", true);\n this.svg = (0, d3_selection_1.select)(div)\n .append(\"div\")\n .append(\"svg\")\n .attr(\"width\", this.config.width)\n .attr(\"height\", this.config.height)\n .call(this.zoom)\n .on(\"mouseup\", () => this.svgMouseUp());\n this.state = {\n selectedNode: null,\n mouseDownNode: null,\n justScale: false\n };\n // Tooltip\n this.tooltipDiv = (0, d3_selection_1.select)(\"body\").append(\"div\")\n .classed(\"now-tooltip now-history-tooltip\", true)\n .style(\"opacity\", 0)\n .style(\"max-width\", \"250px\")\n .on(\"mouseout\", () => {\n this.closeTooltip();\n });\n this.createToolbar(form);\n this.createMarker('end-arrow', 'endarrow', '#000');\n this.g = this.svg.append(\"g\")\n .attr(\"id\", this._graphId())\n .attr(\"transform\", \"translate(0,0)\")\n .classed('HistoryGraph', true);\n }\n createToolbar(form) {\n let formdiv = form.append(\"div\")\n .classed(\"buttons\", true);\n this.config.customForm(this, formdiv);\n // Reset zoom\n formdiv.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + this.graphId + \"-history-zoom\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Restore zoom\")\n .on(\"click\", () => this.restorePosition())\n .append(\"i\")\n .classed(\"fa fa-eye\", true);\n // Toggle Tooltips\n let tooltipsToggle = formdiv.append(\"input\")\n .attr(\"id\", \"history-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-tooltips\")\n .attr(\"value\", \"show\")\n .property(\"checked\", this.config.useTooltip)\n .on(\"change\", () => {\n this.closeTooltip();\n this.config.useTooltip = tooltipsToggle.property(\"checked\");\n });\n formdiv.append(\"label\")\n .attr(\"for\", \"history-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"title\", \"Show tooltips on mouse hover\")\n .append(\"i\")\n .classed(\"fa fa-comment\", true);\n // Download SVG\n formdiv.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + this.graphId + \"-download\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Download graph SVG\")\n .on(\"click\", () => {\n this.download();\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n // Set Font Size\n let fontToggle = formdiv.append(\"input\")\n .attr(\"id\", \"history-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-fonts\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = fontToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n fontSize.style(\"display\", display);\n });\n formdiv.append(\"label\")\n .attr(\"for\", \"history-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"title\", \"Set font size\")\n .append(\"i\")\n .classed(\"fa fa-font\", true);\n let fontSize = formdiv.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.fontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node font size\")\n .on(\"change\", () => {\n this.config.fontSize = fontSize.property(\"value\");\n this.svg.selectAll(\"text.trial-id\")\n .attr(\"font-size\", this.config.fontSize);\n });\n // Submit\n formdiv.append(\"input\")\n .attr(\"type\", \"submit\")\n .attr(\"name\", \"prevent-enter\")\n .attr(\"onclick\", \"return false;\")\n .style(\"display\", \"none\");\n formdiv.append(\"div\");\n formdiv.append(\"div\")\n .text(this.config.hintMessage)\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n }\n load(data) {\n let nodes = [], otherNodes = [], edges = [], spacing = this.config.spacing, margin = this.config.margin;\n let spacing2 = 2 * spacing, spacing4 = 4 * spacing, start = margin, max = 0, id = 0, last = data.nodes.length - 1, tid = 0, useVersion = false;\n let levels = [];\n for (var i = 0; i <= last; i++) {\n let node = data.nodes[i];\n var previous = levels[node.level];\n if (previous == undefined) {\n previous = -1;\n }\n var trials = node.trials;\n if (trials == undefined) {\n trials = [];\n }\n levels[node.level] = Math.max(previous, trials.length);\n }\n let levelsy = [];\n var current = margin;\n for (var i = 0; i <= levels.length; i++) {\n levelsy[i] = current;\n current += spacing2 + levels[i] * spacing2;\n }\n for (var i = 0; i <= last; i++) {\n let node = data.nodes[i];\n let x = start + spacing4 * id;\n let y = levelsy[node.level];\n var new_node = {\n id: id,\n display: node.display,\n x: x,\n y: y,\n title: node.id.toString(),\n info: node,\n radius: this.config.radius,\n gradient: false,\n status: node.status\n };\n nodes.push(new_node);\n if (typeof (node.trials) != \"undefined\") {\n useVersion = true;\n for (var j = 0; j < node.trials.length; j++) {\n let trialNode = node.trials[j];\n let ny = y + (j + 1) * spacing2 + spacing;\n otherNodes.push({\n id: tid,\n display: trialNode.display,\n x: x + this.config.radius / 2,\n y: ny,\n title: trialNode.id.toString(),\n info: trialNode,\n tooltip: trialNode.tooltip,\n radius: this.config.radius / 2,\n gradient: true,\n status: trialNode.status\n });\n tid += 1;\n max = Math.max(max, y);\n }\n }\n else {\n new_node.tooltip = node.tooltip;\n }\n max = Math.max(max, y);\n this.maxX = x;\n id += 1;\n }\n max += spacing2;\n this.maxY = max;\n this.maxId = Math.max(tid, id);\n for (var i = 0; i < data.edges.length; i++) {\n let edge = Object.assign({}, data.edges[i]);\n edge.id = edge.source + \"-\" + edge.target;\n edge.source = nodes[edge.source];\n edge.target = nodes[edge.target];\n if (edge.source != edge.target) {\n edges.push(edge);\n }\n }\n if (useVersion) {\n this.nodes = otherNodes;\n this.versionNodes = nodes;\n }\n else {\n this.nodes = nodes;\n this.versionNodes = [];\n }\n this.edges = edges;\n this.updateWindow();\n this.restorePosition();\n this.update();\n this.menuOnRightClick();\n return nodes;\n }\n updateWindow() {\n let size = this.config.customSize(this);\n this.config.width = size[0];\n this.config.height = size[1];\n this.svg\n .attr(\"width\", size[0])\n .attr(\"height\", size[1]);\n }\n update() {\n var nodes = this.g.selectAll('g.node')\n .data(this.nodes, (d) => d.id);\n var edges = this.g.selectAll('g.link')\n .data(this.edges, (d) => d.id);\n var version = this.g.selectAll('g.version')\n .data(this.versionNodes, (d) => d.id);\n this.updateNodes(nodes);\n this.updateVersionNodes(version);\n this.updateLinks(edges);\n }\n restorePosition() {\n let scale = this.config.height / this.maxY;\n if (scale <= 1.0) {\n this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity\n .translate(this.config.width\n - this.maxX * scale\n - this.config.margin, 0)\n .scale(scale));\n }\n else {\n this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity\n .scale(1)\n .translate(this.config.width\n - this.maxX\n - this.config.margin, 0));\n }\n this.state.justScale = false;\n }\n selectNode(node) {\n this.state.selectedNode = node;\n this.config.customSelectNode(this, node);\n this.svg.selectAll('.node[attr-trial=\"' + node.title + '\"] > rect')\n .attr('stroke', 'rgb(200, 238, 241)')\n .classed('selected', true);\n }\n selectTrial(trialId) {\n for (var node of this.nodes) {\n if (node.title == trialId) {\n this.selectNode(node);\n return;\n }\n }\n }\n download(name) {\n var isFileSaverSupported = false;\n try {\n isFileSaverSupported = !!new Blob();\n }\n catch (e) {\n alert(\"blob not supported\");\n }\n name = (name === undefined) ? \"history.svg\" : name;\n let gnode = this.g.node();\n var bbox = gnode.getBBox();\n var width = this.svg.attr(\"width\"), height = this.svg.attr(\"height\");\n this.g.attr(\"transform\", \"translate(\" + (-bbox.x + 5) + \", \" + (-bbox.y + 5) + \")\");\n let svgNode = this.svg\n .attr(\"title\", \"Trial\")\n .attr(\"version\", 1.1)\n .attr(\"width\", bbox.width + 10)\n .attr(\"height\", bbox.height + 10)\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node();\n var html = svgNode.parentNode.innerHTML;\n html = ' {\n if (this.state.selectedNode == null) {\n return false;\n }\n return cd.id === this.state.selectedNode.id;\n }).select('rect')\n .classed('selected', false)\n .attr(\"stroke\", \"#000\");\n this.state.selectedNode = null;\n }\n nodeMouseDown(event, d3node, d) {\n event.stopPropagation();\n this.state.mouseDownNode = d;\n this.closeTooltip();\n }\n nodeMouseUp(event, d3node, d) {\n event.stopPropagation();\n if (!this.state.mouseDownNode) {\n return;\n }\n if (this.state.justScale) {\n this.state.justScale = false;\n }\n else {\n if (event.ctrlKey || event.shiftKey || event.altKey) {\n this.config.customCtrlClick(this, d);\n return;\n }\n if (this.state.selectedNode) {\n this.unselectNode();\n }\n d3node\n .attr('stroke', 'rgb(200, 238, 241)')\n .classed('selected', true);\n this.state.selectedNode = d;\n this.config.customSelectNode(this, d);\n }\n this.state.mouseDownNode = null;\n }\n svgMouseUp() {\n if (this.state.justScale) {\n this.state.justScale = false;\n }\n }\n updateVersionNodes(nodes) {\n var nodeEnter = nodes.enter().append(\"g\")\n .classed(\"version\", true)\n .attr(\"attr-trialid\", (d) => d.title)\n .attr(\"transform\", (d) => {\n return \"translate(\" + 0 + \",\" + 0 + \")\";\n });\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n })\n .attr('width', (d) => 2 * d.radius)\n .attr('height', (d) => 2 * d.radius)\n .attr('rx', 0)\n .attr('ry', 0)\n //.attr('r', )\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\")\n .attr(\"fill\", \"#F6FBFF\")\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\");\n nodeEnter.append('text')\n .classed('trial-id', true)\n .attr('font-family', 'sans-serif')\n .attr('font-size', this.config.fontSize + 'px')\n .attr('pointer-events', 'none')\n .attr('x', (d) => d.radius)\n .attr('y', (d) => d.radius + 4)\n .attr('stroke', '#000')\n .attr('text-anchor', 'middle')\n //.attr('font-weight', 'bold')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }).text((d) => d.display);\n nodeEnter.merge(nodes); // nodeUpdate\n nodes.exit().remove(); // nodeExit\n }\n updateNodes(nodes) {\n let self = this;\n var nodeEnter = nodes.enter().append(\"g\")\n .classed(\"node\", true)\n .attr(\"attr-trialid\", (d) => d.title)\n .attr(\"cursor\", \"pointer\")\n .attr(\"transform\", (d) => {\n return \"translate(\" + 0 + \",\" + 0 + \")\";\n });\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n })\n .attr('cursor', 'pointer')\n .attr('title', (d) => d.info.display)\n .attr('width', (d) => 2 * d.radius)\n .attr('height', (d) => 2 * d.radius)\n .attr('rx', (d) => 2 * d.radius)\n .attr('ry', (d) => 2 * d.radius)\n //.attr('r', )\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\")\n .attr(\"fill\", function (d) {\n var proportion = Math.round(200 * (1.0 - (parseInt(d.title) / self.maxId)) + 50);\n if (d.status === 'unfinished') {\n return d.gradient ? (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString() : \"rgb(238, 200, 241)\";\n }\n if (d.status === 'finished') {\n return d.gradient ? (0, d3_color_1.rgb)(proportion, proportion, proportion, 255).toString() : \"#F6FBFF\";\n }\n if (d.status === 'backup') {\n return d.gradient ? (0, d3_color_1.rgb)(255, 255, proportion, 255).toString() : \"rgb(241, 238, 200)\";\n }\n return '#666';\n })\n .attr(\"stroke\", function (d) {\n return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : \"#000\";\n })\n .attr(\"stroke-width\", \"2.5px\")\n .on('mousedown', function (event, d) {\n self.nodeMouseDown(event, (0, d3_selection_1.select)(this), d);\n }).on('click', function (event, d) {\n self.nodeMouseUp(event, (0, d3_selection_1.select)(this), d);\n }).on('mouseover', function (event, d) {\n if (!self.state.mouseDownNode && self.config.useTooltip) {\n self.closeTooltip();\n self.showTooltip(event, d);\n }\n (0, d3_selection_1.select)(this)\n .attr('stroke', 'rgb(200, 238, 241)');\n }).on('mouseout', function (event, d) {\n (0, d3_selection_1.select)(this)\n .attr(\"stroke\", (d) => {\n return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : \"#000\";\n });\n })\n .classed(\"custom-menu\", true);\n nodeEnter.append('text')\n .classed('trial-id', true)\n .attr('font-family', 'sans-serif')\n .attr('font-size', this.config.fontSize + 'px')\n .attr('pointer-events', 'none')\n .attr('x', (d) => d.radius)\n .attr('y', (d) => d.radius + 4)\n .attr('stroke', '#000')\n .attr('text-anchor', 'middle')\n //.attr('font-weight', 'bold')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }).text((d) => d.gradient ? \"\" : d.display);\n nodeEnter.merge(nodes); // nodeUpdate\n nodes.exit().remove(); // nodeExit\n }\n updateLinks(link) {\n // Enter any new links\n let colors = (0, d3_scale_1.scaleOrdinal)(d3_scale_chromatic_1.schemeCategory10);\n var linkEnter = link.enter().insert('path', 'g')\n .classed('link', true)\n .attr('cursor', 'crosshair')\n .attr('fill', 'none')\n .attr('stroke', '#000')\n .attr('stroke-width', '4px');\n linkEnter\n .attr(\"d\", (d) => {\n var deltaX = d.target.x - d.source.x, deltaY = d.target.y - d.source.y, dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY), normX = deltaX / dist, normY = deltaY / dist, sourcePadding = this.config.radius - 5, targetPadding = this.config.radius + (d.right ? 3 : -5), sourceX = d.source.x + this.config.radius + (sourcePadding * normX), sourceY = d.source.y + this.config.radius + (sourcePadding * normY), targetX = d.target.x + this.config.radius - (targetPadding * normX), targetY = d.target.y + this.config.radius - (targetPadding * normY);\n var step = 0;\n if (d.level > 0) {\n step += this.config.moveY;\n step += (d.level - 1) * this.config.moveY2;\n }\n return `M ${sourceX}, ${sourceY}\n C ${(sourceX - this.config.moveX / 2)} ${sourceY}\n ${(sourceX - this.config.moveX / 2)} ${(sourceY + 3 * step / 4)}\n ${(sourceX - this.config.moveX)} ${(sourceY + step)}\n L ${(sourceX - this.config.moveX)} ${(sourceY + step)}\n ${(targetX + this.config.moveX)} ${(sourceY + step)}\n C ${(targetX + this.config.moveX / 2)} ${(sourceY + 3 * step / 4)}\n ${(targetX + this.config.moveX / 2)} ${sourceY}\n ${targetX}, ${targetY}`;\n })\n .attr('marker-end', (d) => {\n return d.right ? 'url(#end-arrow)' : '';\n })\n .attr('stroke', (d) => {\n return (0, d3_color_1.rgb)(colors(d.level.toString())).darker().toString();\n });\n // Update\n linkEnter.merge(link); // linkUpdate\n // Remove any exiting links\n link.exit().remove(); // linkExit\n }\n zoomFunction(event) {\n this.state.justScale = true;\n this.closeTooltip();\n this.transform = event.transform;\n this.g.attr(\"transform\", event.transform);\n }\n _graphId() {\n return \"history-graph-\" + this.graphId;\n }\n menuOnRightClick() {\n let rightClickMenu = document.getElementById(\"context-menu\");\n // Set up an event handler for the documnt right click\n document.addEventListener(\"contextmenu\", function (event) {\n var _a;\n //open right click menu\n let target = event.target;\n if (target && target.classList.contains(\"custom-menu\")) {\n event.preventDefault();\n if (rightClickMenu) {\n rightClickMenu.setAttribute(\"selected-trial\", (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute(\"attr-trialid\"));\n rightClickMenu.setAttribute(\"selected-trial-simplified\", target.getAttribute(\"title\"));\n rightClickMenu.style.top = (event.pageY - 10).toString();\n rightClickMenu.style.left = (event.pageX - 90).toString();\n rightClickMenu.style.display = \"block\";\n rightClickMenu.classList.add(\"show\");\n }\n }\n });\n // close the menu\n document.addEventListener(\"click\", function (event) {\n if (rightClickMenu) {\n rightClickMenu.style.display = \"none\";\n rightClickMenu.classList.remove(\"show\");\n }\n });\n }\n}\nexports.HistoryGraph = HistoryGraph;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./structures\"), exports);\n__exportStar(require(\"./graph\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel .lm-AccordionPanel-title {\n box-sizing: border-box;\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n min-height: 22px;\n max-height: 22px;\n min-width: 35px;\n line-height: 20px;\n margin: 0px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\n background: #dbdbdb;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\n border: 1px solid lightskyblue;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title.lm-mod-expanded\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\\\f0d8';\n font-family: FontAwesome;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\\\f0d7';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\n padding: 0px 5px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/accordionpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,sBAAsB;EACtB,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,WAAW;AACb;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;;;EAGE,8BAA8B;AAChC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title {\\n box-sizing: border-box;\\n padding: 0px 10px;\\n background: #e5e5e5;\\n border: 1px solid #c0c0c0;\\n border-bottom: none;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n min-height: 22px;\\n max-height: 22px;\\n min-width: 35px;\\n line-height: 20px;\\n margin: 0px;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\\n background: #dbdbdb;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\\n border: 1px solid lightskyblue;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title.lm-mod-expanded\\n .lm-AccordionPanel-titleCollapser:before {\\n content: '\\\\f0d8';\\n font-family: FontAwesome;\\n}\\n\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title\\n .lm-AccordionPanel-titleCollapser:before {\\n content: '\\\\f0d7';\\n font-family: FontAwesome;\\n position: absolute;\\n right: 10px;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\\n padding: 0px 5px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n font-family: sans-serif;\n background: #f5f5f5;\n}\n\n.lm-CommandPalette-search {\n padding: 8px;\n}\n\n.lm-CommandPalette-wrapper {\n padding: 4px 6px;\n background: white;\n border: 1px solid #e0e0e0;\n position: relative;\n}\n\n.lm-CommandPalette-input {\n width: 92%;\n border: none;\n outline: none;\n font-size: 16px;\n}\n\n.lm-CommandPalette-header {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n background: #e1e1e1;\n cursor: pointer;\n}\n\n.lm-CommandPalette-header:hover::before {\n content: '\\\\2026'; /* ellipsis */\n float: right;\n margin-right: 4px;\n}\n\n.lm-CommandPalette-header > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item {\n padding: 4px 8px;\n color: #757575;\n font-size: 13px;\n font-weight: 500;\n}\n\n.lm-CommandPalette-emptyMessage {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n text-align: center;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-CommandPalette-item.lm-mod-active {\n background: #7fdbff;\n}\n\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\n background: #e5e5e5;\n}\n\n.lm-CommandPalette-itemIcon {\n display: none;\n}\n\n.lm-CommandPalette-itemLabel > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled mark {\n color: rgba(0, 0, 0, 0.4);\n}\n\n.lm-CommandPalette-itemCaption {\n color: #9e9e9e;\n font-size: 11px;\n font-weight: 400;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,gBAAgB,EAAE,aAAa;EAC/B,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n font-family: sans-serif;\\n background: #f5f5f5;\\n}\\n\\n.lm-CommandPalette-search {\\n padding: 8px;\\n}\\n\\n.lm-CommandPalette-wrapper {\\n padding: 4px 6px;\\n background: white;\\n border: 1px solid #e0e0e0;\\n position: relative;\\n}\\n\\n.lm-CommandPalette-input {\\n width: 92%;\\n border: none;\\n outline: none;\\n font-size: 16px;\\n}\\n\\n.lm-CommandPalette-header {\\n padding: 4px;\\n color: #757575;\\n font-size: 12px;\\n font-weight: 600;\\n background: #e1e1e1;\\n cursor: pointer;\\n}\\n\\n.lm-CommandPalette-header:hover::before {\\n content: '\\\\2026'; /* ellipsis */\\n float: right;\\n margin-right: 4px;\\n}\\n\\n.lm-CommandPalette-header > mark {\\n background-color: transparent;\\n font-weight: bold;\\n}\\n\\n.lm-CommandPalette-item {\\n padding: 4px 8px;\\n color: #757575;\\n font-size: 13px;\\n font-weight: 500;\\n}\\n\\n.lm-CommandPalette-emptyMessage {\\n padding: 4px;\\n color: #757575;\\n font-size: 12px;\\n font-weight: 600;\\n text-align: center;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled {\\n color: rgba(0, 0, 0, 0.25);\\n}\\n\\n.lm-CommandPalette-item.lm-mod-active {\\n background: #7fdbff;\\n}\\n\\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\\n background: #e5e5e5;\\n}\\n\\n.lm-CommandPalette-itemIcon {\\n display: none;\\n}\\n\\n.lm-CommandPalette-itemLabel > mark {\\n background-color: transparent;\\n font-weight: bold;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled mark {\\n color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.lm-CommandPalette-itemCaption {\\n color: #9e9e9e;\\n font-size: 11px;\\n font-weight: 400;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DataGrid {\n min-width: 64px;\n min-height: 64px;\n border: 1px solid #a0a0a0;\n}\n\n.lm-DataGrid-scrollCorner {\n background-color: #f0f0f0;\n}\n\n.lm-DataGrid-scrollCorner::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n background-color: #a0a0a0;\n}\n\n.lm-DataGrid-cellEditorOccluder {\n pointer-events: none;\n position: absolute;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorContainer {\n pointer-events: auto;\n position: absolute;\n background-color: #ffffff;\n box-sizing: border-box;\n box-shadow: 0px 0px 6px #006bf7;\n border: 2px solid #006bf7;\n}\n\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\n box-shadow: 0px 0px 6px red;\n border: 2px solid red;\n}\n\n.lm-DataGrid-cellEditorContainer > form {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorWidget {\n width: 100%;\n height: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n.lm-DataGrid-cellEditorInput {\n background-color: #ffffff;\n border: 0;\n}\n\n.lm-DataGrid-cellEditorCheckbox {\n margin: 0;\n}\n\n.lm-DataGrid-notification {\n position: absolute;\n display: flex;\n overflow: visible;\n animation: fade-in 300ms ease-out;\n}\n\n.lm-DataGrid-notificationContainer {\n box-shadow: 0px 2px 5px #999999;\n border-radius: 3px;\n background-color: white;\n color: black;\n border: 1px solid black;\n font-family: sans-serif;\n font-size: 13px;\n padding: 4px;\n}\n\n@keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n opacity: 1;\n }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/datagrid.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E;;AAE9E;EACE,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,yBAAyB;EACzB,sBAAsB;EACtB,+BAA+B;EAC/B,yBAAyB;AAC3B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,yBAAyB;EACzB,SAAS;AACX;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,iCAAiC;AACnC;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,uBAAuB;EACvB,YAAY;EACZ,uBAAuB;EACvB,uBAAuB;EACvB,eAAe;EACf,YAAY;AACd;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,YAAY;EACd;EACA;IACE,UAAU;EACZ;AACF\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) 2014-2018, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DataGrid {\\n min-width: 64px;\\n min-height: 64px;\\n border: 1px solid #a0a0a0;\\n}\\n\\n.lm-DataGrid-scrollCorner {\\n background-color: #f0f0f0;\\n}\\n\\n.lm-DataGrid-scrollCorner::after {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 1px;\\n height: 1px;\\n background-color: #a0a0a0;\\n}\\n\\n.lm-DataGrid-cellEditorOccluder {\\n pointer-events: none;\\n position: absolute;\\n overflow: hidden;\\n}\\n\\n.lm-DataGrid-cellEditorContainer {\\n pointer-events: auto;\\n position: absolute;\\n background-color: #ffffff;\\n box-sizing: border-box;\\n box-shadow: 0px 0px 6px #006bf7;\\n border: 2px solid #006bf7;\\n}\\n\\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\\n box-shadow: 0px 0px 6px red;\\n border: 2px solid red;\\n}\\n\\n.lm-DataGrid-cellEditorContainer > form {\\n width: 100%;\\n height: 100%;\\n overflow: hidden;\\n}\\n\\n.lm-DataGrid-cellEditorWidget {\\n width: 100%;\\n height: 100%;\\n outline: none;\\n box-sizing: border-box;\\n}\\n\\n.lm-DataGrid-cellEditorInput {\\n background-color: #ffffff;\\n border: 0;\\n}\\n\\n.lm-DataGrid-cellEditorCheckbox {\\n margin: 0;\\n}\\n\\n.lm-DataGrid-notification {\\n position: absolute;\\n display: flex;\\n overflow: visible;\\n animation: fade-in 300ms ease-out;\\n}\\n\\n.lm-DataGrid-notificationContainer {\\n box-shadow: 0px 2px 5px #999999;\\n border-radius: 3px;\\n background-color: white;\\n color: black;\\n border: 1px solid black;\\n font-family: sans-serif;\\n font-size: 13px;\\n padding: 4px;\\n}\\n\\n@keyframes fade-in {\\n 0% {\\n opacity: 0;\\n }\\n 50% {\\n opacity: 0.7;\\n }\\n 100% {\\n opacity: 1;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel-overlay {\\n background: rgba(255, 255, 255, 0.6);\\n border: 1px dashed black;\\n transition-property: top, left, right, bottom;\\n transition-duration: 150ms;\\n transition-timing-function: ease;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../dragdrop/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../widgets/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./datagrid.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) 2014-2018, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n@import '@lumino/dragdrop/style/index.css';\\n@import '@lumino/widgets/style/index.css';\\n@import './accordionpanel.css';\\n@import './commandpalette.css';\\n@import './datagrid.css';\\n@import './dockpanel.css';\\n@import './menu.css';\\n@import './menubar.css';\\n@import './scrollbar.css';\\n@import './tabbar.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n padding: 3px 0px;\n background: white;\n color: rgba(0, 0, 0, 0.87);\n border: 1px solid #c0c0c0;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-Menu-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-Menu-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-Menu-itemIcon {\n width: 21px;\n padding: 4px 2px;\n}\n\n.lm-Menu-itemLabel {\n padding: 4px 35px 4px 2px;\n}\n\n.lm-Menu-itemMnemonic {\n text-decoration: underline;\n}\n\n.lm-Menu-itemShortcut {\n padding: 4px 0px;\n}\n\n.lm-Menu-itemSubmenuIcon {\n width: 16px;\n padding: 4px 0px;\n}\n\n.lm-Menu-item[data-type='separator'] > div {\n padding: 0;\n height: 9px;\n}\n\n.lm-Menu-item[data-type='separator'] > div::after {\n content: '';\n display: block;\n position: relative;\n top: 4px;\n border-top: 1px solid #dddddd;\n}\n\n.lm-Menu-itemIcon::before,\n.lm-Menu-itemSubmenuIcon::before {\n font-family: FontAwesome;\n}\n\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\n content: '\\\\f00c';\n}\n\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\n content: '\\\\f0da';\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;EAC1B,yBAAyB;EACzB;;;cAGY;EACZ,0CAA0C;AAC5C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,WAAW;AACb;;AAEA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,6BAA6B;AAC/B;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n padding: 3px 0px;\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n border: 1px solid #c0c0c0;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\\n}\\n\\n.lm-Menu-item.lm-mod-active {\\n background: #e5e5e5;\\n}\\n\\n.lm-Menu-item.lm-mod-disabled {\\n color: rgba(0, 0, 0, 0.25);\\n}\\n\\n.lm-Menu-itemIcon {\\n width: 21px;\\n padding: 4px 2px;\\n}\\n\\n.lm-Menu-itemLabel {\\n padding: 4px 35px 4px 2px;\\n}\\n\\n.lm-Menu-itemMnemonic {\\n text-decoration: underline;\\n}\\n\\n.lm-Menu-itemShortcut {\\n padding: 4px 0px;\\n}\\n\\n.lm-Menu-itemSubmenuIcon {\\n width: 16px;\\n padding: 4px 0px;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div {\\n padding: 0;\\n height: 9px;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div::after {\\n content: '';\\n display: block;\\n position: relative;\\n top: 4px;\\n border-top: 1px solid #dddddd;\\n}\\n\\n.lm-Menu-itemIcon::before,\\n.lm-Menu-itemSubmenuIcon::before {\\n font-family: FontAwesome;\\n}\\n\\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\\n content: '\\\\f00c';\\n}\\n\\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\\n content: '\\\\f0da';\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n padding-left: 5px;\n background: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n border-bottom: 1px solid #dddddd;\n font:\n 13px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-MenuBar-menu {\n transform: translateY(-1px);\n}\n\n.lm-MenuBar-item {\n padding: 4px 8px;\n border-left: 1px solid transparent;\n border-right: 1px solid transparent;\n}\n\n.lm-MenuBar-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\n z-index: 10001;\n background: white;\n border-left: 1px solid #c0c0c0;\n border-right: 1px solid #c0c0c0;\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-MenuBar-item:focus-visible {\n outline: 2px solid #333;\n outline-offset: -2px;\n}\n\n.lm-MenuBar-item[aria-disabled='true'] {\n color: rgba(0, 0, 0, 0.37);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/menubar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,iBAAiB;EACjB,mBAAmB;EACnB,0BAA0B;EAC1B,gCAAgC;EAChC;;;cAGY;AACd;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,kCAAkC;EAClC,mCAAmC;AACrC;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,iBAAiB;EACjB,8BAA8B;EAC9B,+BAA+B;EAC/B,0CAA0C;AAC5C;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,0BAA0B;AAC5B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n padding-left: 5px;\\n background: #fafafa;\\n color: rgba(0, 0, 0, 0.87);\\n border-bottom: 1px solid #dddddd;\\n font:\\n 13px Helvetica,\\n Arial,\\n sans-serif;\\n}\\n\\n.lm-MenuBar-menu {\\n transform: translateY(-1px);\\n}\\n\\n.lm-MenuBar-item {\\n padding: 4px 8px;\\n border-left: 1px solid transparent;\\n border-right: 1px solid transparent;\\n}\\n\\n.lm-MenuBar-item.lm-mod-active {\\n background: #e5e5e5;\\n}\\n\\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\\n z-index: 10001;\\n background: white;\\n border-left: 1px solid #c0c0c0;\\n border-right: 1px solid #c0c0c0;\\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\\n}\\n\\n.lm-MenuBar-item:focus-visible {\\n outline: 2px solid #333;\\n outline-offset: -2px;\\n}\\n\\n.lm-MenuBar-item[aria-disabled='true'] {\\n color: rgba(0, 0, 0, 0.37);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/caretleft.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"../images/caretright.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"../images/caretup.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"../images/caretdown.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n min-height: 16px;\n max-height: 16px;\n min-width: 45px;\n border-top: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n min-width: 16px;\n max-width: 16px;\n min-height: 45px;\n border-left: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar-button {\n background-color: #f0f0f0;\n background-position: center center;\n min-height: 15px;\n max-height: 15px;\n min-width: 15px;\n max-width: 15px;\n}\n\n.lm-ScrollBar-button:hover {\n background-color: #dadada;\n}\n\n.lm-ScrollBar-button.lm-mod-active {\n background-color: #cdcdcd;\n}\n\n.lm-ScrollBar-track {\n background: #f0f0f0;\n}\n\n.lm-ScrollBar-thumb {\n background: #cdcdcd;\n}\n\n.lm-ScrollBar-thumb:hover {\n background: #bababa;\n}\n\n.lm-ScrollBar-thumb.lm-mod-active {\n background: #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\n height: 100%;\n min-width: 15px;\n border-left: 1px solid #a0a0a0;\n border-right: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\n width: 100%;\n min-height: 15px;\n border-top: 1px solid #a0a0a0;\n border-bottom: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___});\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___});\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___});\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___});\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,8BAA8B;AAChC;;AAEA;EACE,yBAAyB;EACzB,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,gCAAgC;AAClC;;AAEA;;EAEE,yDAA8C;AAChD;;AAEA;;EAEE,yDAA+C;AACjD;;AAEA;;EAEE,yDAA4C;AAC9C;;AAEA;;EAEE,yDAA8C;AAChD\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n min-height: 16px;\\n max-height: 16px;\\n min-width: 45px;\\n border-top: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n min-width: 16px;\\n max-width: 16px;\\n min-height: 45px;\\n border-left: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar-button {\\n background-color: #f0f0f0;\\n background-position: center center;\\n min-height: 15px;\\n max-height: 15px;\\n min-width: 15px;\\n max-width: 15px;\\n}\\n\\n.lm-ScrollBar-button:hover {\\n background-color: #dadada;\\n}\\n\\n.lm-ScrollBar-button.lm-mod-active {\\n background-color: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-track {\\n background: #f0f0f0;\\n}\\n\\n.lm-ScrollBar-thumb {\\n background: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-thumb:hover {\\n background: #bababa;\\n}\\n\\n.lm-ScrollBar-thumb.lm-mod-active {\\n background: #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\\n height: 100%;\\n min-width: 15px;\\n border-left: 1px solid #a0a0a0;\\n border-right: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\\n width: 100%;\\n min-height: 15px;\\n border-top: 1px solid #a0a0a0;\\n border-bottom: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n .lm-ScrollBar-button[data-action='decrement'] {\\n background-image: url(../images/caretleft.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n .lm-ScrollBar-button[data-action='increment'] {\\n background-image: url(../images/caretright.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n .lm-ScrollBar-button[data-action='decrement'] {\\n background-image: url(../images/caretup.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n .lm-ScrollBar-button[data-action='increment'] {\\n background-image: url(../images/caretdown.png);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.lm-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab {\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n flex: 0 1 125px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n padding: 0px;\n border: 0px;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n background: white;\n}\n\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\n background: #f0f0f0;\n}\n\n.lm-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabLabel,\n.lm-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n.lm-TabBar .lm-TabBar-addButton {\n padding: 0px 6px;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\n content: '\\\\f00d';\n font-family: FontAwesome;\n}\n\n.lm-TabBar .lm-TabBar-addButton:before {\n content: '\\\\f067';\n font-family: FontAwesome;\n}\n\n.lm-TabBar-tab.lm-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX;;;cAGY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;AAEA;;;EAGE,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;AAC5C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar {\\n min-height: 24px;\\n max-height: 24px;\\n}\\n\\n.lm-TabBar-content {\\n min-width: 0;\\n min-height: 0;\\n align-items: flex-end;\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-TabBar-tab {\\n padding: 0px 10px;\\n background: #e5e5e5;\\n border: 1px solid #c0c0c0;\\n border-bottom: none;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n flex: 0 1 125px;\\n min-height: 20px;\\n max-height: 20px;\\n min-width: 35px;\\n margin-left: -1px;\\n line-height: 20px;\\n}\\n\\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\\n padding: 0px;\\n border: 0px;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n}\\n\\n.lm-TabBar-tab.lm-mod-current {\\n background: white;\\n}\\n\\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\\n background: #f0f0f0;\\n}\\n\\n.lm-TabBar-tab:first-child {\\n margin-left: 0;\\n}\\n\\n.lm-TabBar-tab.lm-mod-current {\\n min-height: 23px;\\n max-height: 23px;\\n transform: translateY(1px);\\n}\\n\\n.lm-TabBar-tabIcon,\\n.lm-TabBar-tabLabel,\\n.lm-TabBar-tabCloseIcon {\\n display: inline-block;\\n}\\n\\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\\n margin-left: 4px;\\n}\\n\\n.lm-TabBar .lm-TabBar-addButton {\\n padding: 0px 6px;\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\\n content: '\\\\f00d';\\n font-family: FontAwesome;\\n}\\n\\n.lm-TabBar .lm-TabBar-addButton:before {\\n content: '\\\\f067';\\n font-family: FontAwesome;\\n}\\n\\n.lm-TabBar-tab.lm-mod-drag-image {\\n min-height: 23px;\\n max-height: 23px;\\n min-width: 125px;\\n border: none;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-cursor-backdrop {\n top: 0px;\n left: 0px;\n position: fixed;\n width: 200px;\n height: 200px;\n margin-top: -100px;\n margin-left: -100px;\n will-change: transform;\n z-index: 100;\n scrollbar-width: none;\n -ms-overflow-style: none;\n overflow: scroll;\n}\n\n.lm-cursor-backdrop::after {\n content: '';\n height: 1200px;\n width: 1200px;\n display: block;\n}\n\n.lm-cursor-backdrop::-webkit-scrollbar {\n display: none;\n}\n\n.lm-mod-drag-image {\n top: 0px;\n left: 0px;\n will-change: transform;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/dragdrop/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,QAAQ;EACR,SAAS;EACT,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,wBAAwB;EACxB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,SAAS;EACT,sBAAsB;AACxB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-cursor-backdrop {\\n top: 0px;\\n left: 0px;\\n position: fixed;\\n width: 200px;\\n height: 200px;\\n margin-top: -100px;\\n margin-left: -100px;\\n will-change: transform;\\n z-index: 100;\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n overflow: scroll;\\n}\\n\\n.lm-cursor-backdrop::after {\\n content: '';\\n height: 1200px;\\n width: 1200px;\\n display: block;\\n}\\n\\n.lm-cursor-backdrop::-webkit-scrollbar {\\n display: none;\\n}\\n\\n.lm-mod-drag-image {\\n top: 0px;\\n left: 0px;\\n will-change: transform;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\n /* Title is rotated for horizontal accordion panel using CSS */\n display: block;\n transform-origin: top left;\n transform: rotate(-90deg) translate(-100%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/accordionpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\\n /* Title is rotated for horizontal accordion panel using CSS */\\n display: block;\\n transform-origin: top left;\\n transform: rotate(-90deg) translate(-100%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n display: flex;\n flex-direction: column;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-CommandPalette-search {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-content {\n flex: 1 1 auto;\n margin: 0;\n padding: 0;\n min-height: 0;\n overflow: auto;\n list-style-type: none;\n}\n\n.lm-CommandPalette-header {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-CommandPalette-item {\n display: flex;\n flex-direction: row;\n}\n\n.lm-CommandPalette-itemIcon {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemContent {\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.lm-CommandPalette-itemShortcut {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemLabel {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-close-icon {\n border: 1px solid transparent;\n background-color: transparent;\n position: absolute;\n z-index: 1;\n right: 3%;\n top: 0;\n bottom: 0;\n margin: auto;\n padding: 7px 0;\n display: none;\n vertical-align: middle;\n outline: 0;\n cursor: pointer;\n}\n.lm-close-icon:after {\n content: 'X';\n display: block;\n width: 15px;\n height: 15px;\n text-align: center;\n color: #000;\n font-weight: normal;\n font-size: 12px;\n cursor: pointer;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;EAC7B,6BAA6B;EAC7B,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACZ,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,eAAe;AACjB;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,eAAe;AACjB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n display: flex;\\n flex-direction: column;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-CommandPalette-search {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-content {\\n flex: 1 1 auto;\\n margin: 0;\\n padding: 0;\\n min-height: 0;\\n overflow: auto;\\n list-style-type: none;\\n}\\n\\n.lm-CommandPalette-header {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n\\n.lm-CommandPalette-item {\\n display: flex;\\n flex-direction: row;\\n}\\n\\n.lm-CommandPalette-itemIcon {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemContent {\\n flex: 1 1 auto;\\n overflow: hidden;\\n}\\n\\n.lm-CommandPalette-itemShortcut {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemLabel {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n\\n.lm-close-icon {\\n border: 1px solid transparent;\\n background-color: transparent;\\n position: absolute;\\n z-index: 1;\\n right: 3%;\\n top: 0;\\n bottom: 0;\\n margin: auto;\\n padding: 7px 0;\\n display: none;\\n vertical-align: middle;\\n outline: 0;\\n cursor: pointer;\\n}\\n.lm-close-icon:after {\\n content: 'X';\\n display: block;\\n width: 15px;\\n height: 15px;\\n text-align: center;\\n color: #000;\\n font-weight: normal;\\n font-size: 12px;\\n cursor: pointer;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel {\n z-index: 0;\n}\n\n.lm-DockPanel-widget {\n z-index: 0;\n}\n\n.lm-DockPanel-tabBar {\n z-index: 1;\n}\n\n.lm-DockPanel-handle {\n z-index: 2;\n}\n\n.lm-DockPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-DockPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal'] {\n cursor: ew-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='vertical'] {\n cursor: ns-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-DockPanel-handle[data-orientation='vertical']:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n\n.lm-DockPanel-overlay {\n z-index: 3;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n.lm-DockPanel-overlay.lm-mod-hidden {\n display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B;;AAEA;EACE,UAAU;EACV,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel {\\n z-index: 0;\\n}\\n\\n.lm-DockPanel-widget {\\n z-index: 0;\\n}\\n\\n.lm-DockPanel-tabBar {\\n z-index: 1;\\n}\\n\\n.lm-DockPanel-handle {\\n z-index: 2;\\n}\\n\\n.lm-DockPanel-handle.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-DockPanel-handle:after {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n content: '';\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal'] {\\n cursor: ew-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical'] {\\n cursor: ns-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\\n left: 50%;\\n min-width: 8px;\\n transform: translateX(-50%);\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical']:after {\\n top: 50%;\\n min-height: 8px;\\n transform: translateY(-50%);\\n}\\n\\n.lm-DockPanel-overlay {\\n z-index: 3;\\n box-sizing: border-box;\\n pointer-events: none;\\n}\\n\\n.lm-DockPanel-overlay.lm-mod-hidden {\\n display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./widget.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./splitpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabpanel.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n@import './widget.css';\\n@import './accordionpanel.css';\\n@import './commandpalette.css';\\n@import './dockpanel.css';\\n@import './menu.css';\\n@import './menubar.css';\\n@import './scrollbar.css';\\n@import './splitpanel.css';\\n@import './tabbar.css';\\n@import './tabpanel.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n z-index: 10000;\n position: absolute;\n white-space: nowrap;\n overflow-x: hidden;\n overflow-y: auto;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-Menu-content {\n margin: 0;\n padding: 0;\n display: table;\n list-style-type: none;\n}\n\n.lm-Menu-item {\n display: table-row;\n}\n\n.lm-Menu-item.lm-mod-hidden,\n.lm-Menu-item.lm-mod-collapsed {\n display: none !important;\n}\n\n.lm-Menu-itemIcon,\n.lm-Menu-itemSubmenuIcon {\n display: table-cell;\n text-align: center;\n}\n\n.lm-Menu-itemLabel {\n display: table-cell;\n text-align: left;\n}\n\n.lm-Menu-itemShortcut {\n display: table-cell;\n text-align: right;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;;EAEE,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n z-index: 10000;\\n position: absolute;\\n white-space: nowrap;\\n overflow-x: hidden;\\n overflow-y: auto;\\n outline: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-Menu-content {\\n margin: 0;\\n padding: 0;\\n display: table;\\n list-style-type: none;\\n}\\n\\n.lm-Menu-item {\\n display: table-row;\\n}\\n\\n.lm-Menu-item.lm-mod-hidden,\\n.lm-Menu-item.lm-mod-collapsed {\\n display: none !important;\\n}\\n\\n.lm-Menu-itemIcon,\\n.lm-Menu-itemSubmenuIcon {\\n display: table-cell;\\n text-align: center;\\n}\\n\\n.lm-Menu-itemLabel {\\n display: table-cell;\\n text-align: left;\\n}\\n\\n.lm-Menu-itemShortcut {\\n display: table-cell;\\n text-align: right;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-MenuBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n list-style-type: none;\n}\n\n.lm-MenuBar-item {\n box-sizing: border-box;\n}\n\n.lm-MenuBar-itemIcon,\n.lm-MenuBar-itemLabel {\n display: inline-block;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/menubar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,qBAAqB;AACvB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n outline: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-MenuBar-content {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex-direction: row;\\n list-style-type: none;\\n}\\n\\n.lm-MenuBar-item {\\n box-sizing: border-box;\\n}\\n\\n.lm-MenuBar-itemIcon,\\n.lm-MenuBar-itemLabel {\\n display: inline-block;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n flex-direction: row;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n flex-direction: column;\n}\n\n.lm-ScrollBar-button {\n box-sizing: border-box;\n flex: 0 0 auto;\n}\n\n.lm-ScrollBar-track {\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.lm-ScrollBar-thumb {\n box-sizing: border-box;\n position: absolute;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;AACpB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-ScrollBar {\\n display: flex;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n flex-direction: row;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n flex-direction: column;\\n}\\n\\n.lm-ScrollBar-button {\\n box-sizing: border-box;\\n flex: 0 0 auto;\\n}\\n\\n.lm-ScrollBar-track {\\n box-sizing: border-box;\\n position: relative;\\n overflow: hidden;\\n flex: 1 1 auto;\\n}\\n\\n.lm-ScrollBar-thumb {\\n box-sizing: border-box;\\n position: absolute;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-SplitPanel-child {\n z-index: 0;\n}\n\n.lm-SplitPanel-handle {\n z-index: 1;\n}\n\n.lm-SplitPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-SplitPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\n cursor: ew-resize;\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\n cursor: ns-resize;\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/splitpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-SplitPanel-child {\\n z-index: 0;\\n}\\n\\n.lm-SplitPanel-handle {\\n z-index: 1;\\n}\\n\\n.lm-SplitPanel-handle.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-SplitPanel-handle:after {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n content: '';\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\\n cursor: ew-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\\n cursor: ns-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\\n left: 50%;\\n min-width: 8px;\\n transform: translateX(-50%);\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\\n top: 50%;\\n min-height: 8px;\\n transform: translateY(-50%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] {\n flex-direction: row;\n align-items: flex-end;\n}\n\n.lm-TabBar[data-orientation='vertical'] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n.lm-TabBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex: 1 1 auto;\n list-style-type: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\n flex-direction: row;\n}\n\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\n flex-direction: column;\n}\n\n.lm-TabBar-tab {\n display: flex;\n flex-direction: row;\n box-sizing: border-box;\n overflow: hidden;\n touch-action: none; /* Disable native Drag/Drop */\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabCloseIcon {\n flex: 0 0 auto;\n}\n\n.lm-TabBar-tabLabel {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n}\n\n.lm-TabBar-tab.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar-addButton.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\n position: relative;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\n left: 0;\n transition: left 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\n top: 0;\n transition: top 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\n transition: none;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n background: inherit;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB,EAAE,6BAA6B;AACnD;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,OAAO;EACP,2BAA2B;AAC7B;;AAEA;EACE,MAAM;EACN,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;EACtB,mBAAmB;AACrB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar {\\n display: flex;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] {\\n flex-direction: row;\\n align-items: flex-end;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] {\\n flex-direction: column;\\n align-items: flex-end;\\n}\\n\\n.lm-TabBar-content {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex: 1 1 auto;\\n list-style-type: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\\n flex-direction: row;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\\n flex-direction: column;\\n}\\n\\n.lm-TabBar-tab {\\n display: flex;\\n flex-direction: row;\\n box-sizing: border-box;\\n overflow: hidden;\\n touch-action: none; /* Disable native Drag/Drop */\\n}\\n\\n.lm-TabBar-tabIcon,\\n.lm-TabBar-tabCloseIcon {\\n flex: 0 0 auto;\\n}\\n\\n.lm-TabBar-tabLabel {\\n flex: 1 1 auto;\\n overflow: hidden;\\n white-space: nowrap;\\n}\\n\\n.lm-TabBar-tabInput {\\n user-select: all;\\n width: 100%;\\n box-sizing: border-box;\\n}\\n\\n.lm-TabBar-tab.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-TabBar-addButton.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\\n position: relative;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\\n left: 0;\\n transition: left 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\\n top: 0;\\n transition: top 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\\n transition: none;\\n}\\n\\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\\n user-select: all;\\n width: 100%;\\n box-sizing: border-box;\\n background: inherit;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabPanel-tabBar {\n z-index: 1;\n}\n\n.lm-TabPanel-stackedPanel {\n z-index: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/tabpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabPanel-tabBar {\\n z-index: 1;\\n}\\n\\n.lm-TabPanel-stackedPanel {\\n z-index: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Widget {\n box-sizing: border-box;\n position: relative;\n}\n\n.lm-Widget.lm-mod-hidden {\n display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/widget.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Widget {\\n box-sizing: border-box;\\n position: relative;\\n}\\n\\n.lm-Widget.lm-mod-hidden {\\n display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.history-toolbar {\n float: left;\n overflow: none;\n z-index: 3;\n position: absolute;\n}\n\n.history-toolbar .buttons {\n height: 30px;\n display: inline-block;\n margin-left: 8px;\n}\n\n.history-toolbar .buttons > input {\n height: 30px;\n}\n\n.history-toolbar .buttons > input[type=checkbox] {\n display: none\n}\n\n.history-toolbar .buttons > label, .history-toolbar > div > a {\n margin: 8px 8px 8px 0;\n}\n\n.history-toolbar .buttons > input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.history-toolbar .buttons > a.toollink,\n.history-toolbar .buttons > a.toollink:link,\n.history-toolbar .buttons > a.toollink:visited {\n color: black;\n}\n\n.history-toolbar .buttons > a.toollink:active {\n color: blue;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../history/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,WAAW;IACX,cAAc;IACd,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;IAGI,YAAY;AAChB;;AAEA;IACI,WAAW;AACf\",\"sourcesContent\":[\".history-toolbar {\\n float: left;\\n overflow: none;\\n z-index: 3;\\n position: absolute;\\n}\\n\\n.history-toolbar .buttons {\\n height: 30px;\\n display: inline-block;\\n margin-left: 8px;\\n}\\n\\n.history-toolbar .buttons > input {\\n height: 30px;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox] {\\n display: none\\n}\\n\\n.history-toolbar .buttons > label, .history-toolbar > div > a {\\n margin: 8px 8px 8px 0;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox] + label {\\n display:inline-block;\\n color: black;\\n cursor: pointer;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\\n color: blue;\\n}\\n\\n.history-toolbar .buttons > a.toollink,\\n.history-toolbar .buttons > a.toollink:link,\\n.history-toolbar .buttons > a.toollink:visited {\\n color: black;\\n}\\n\\n.history-toolbar .buttons > a.toollink:active {\\n color: blue;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_5___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_6___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_7___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*!\n * Bootstrap v4.0.0 (https://getbootstrap.com)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\\\2014 \\\\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\"\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___})}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_2___})}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(${___CSS_LOADER_URL_REPLACEMENT_3___}) no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_4___})}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_5___})}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_6___})}.carousel-control-next-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_7___})}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\n/*# sourceMappingURL=bootstrap.min.css.map */`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/bootstrap.min.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;EAKE,CAAC,MAAM,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC,YAAY,CAAC,cAAc,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,eAAe,CAAC,cAAc,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,oKAAoK,CAAC,sGAAsG,CAAC,mBAAmB,qBAAqB,CAAC,KAAK,sBAAsB,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,4BAA4B,CAAC,uCAAuC,CAAC,cAAc,kBAAkB,CAAC,6EAA6E,aAAa,CAAC,KAAK,QAAQ,CAAC,uJAAuJ,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,eAAe,CAAC,qBAAqB,CAAC,sBAAsB,mBAAmB,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,YAAY,CAAC,mBAAmB,CAAC,EAAE,YAAY,CAAC,kBAAkB,CAAC,sCAAsC,yBAAyB,CAAC,wCAAwC,CAAC,gCAAgC,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,kBAAkB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,SAAS,YAAY,CAAC,kBAAkB,CAAC,wBAAwB,eAAe,CAAC,GAAG,eAAe,CAAC,GAAG,mBAAmB,CAAC,aAAa,CAAC,WAAW,eAAe,CAAC,IAAI,iBAAiB,CAAC,SAAS,kBAAkB,CAAC,MAAM,aAAa,CAAC,QAAQ,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,aAAa,CAAC,IAAI,SAAS,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,oCAAoC,CAAC,QAAQ,aAAa,CAAC,yBAAyB,CAAC,8BAA8B,aAAa,CAAC,oBAAoB,CAAC,wEAAwE,aAAa,CAAC,oBAAoB,CAAC,oCAAoC,SAAS,CAAC,kBAAkB,+BAA+B,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,kBAAkB,CAAC,aAAa,CAAC,4BAA4B,CAAC,OAAO,eAAe,CAAC,IAAI,qBAAqB,CAAC,iBAAiB,CAAC,eAAe,eAAe,CAAC,MAAM,wBAAwB,CAAC,QAAQ,kBAAkB,CAAC,qBAAqB,CAAC,aAAa,CAAC,eAAe,CAAC,mBAAmB,CAAC,GAAG,kBAAkB,CAAC,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,eAAe,CAAC,aAAa,kBAAkB,CAAC,yCAAyC,CAAC,sCAAsC,QAAQ,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,aAAa,gBAAgB,CAAC,cAAc,mBAAmB,CAAC,qDAAqD,yBAAyB,CAAC,wHAAwH,SAAS,CAAC,iBAAiB,CAAC,uCAAuC,qBAAqB,CAAC,SAAS,CAAC,+EAA+E,0BAA0B,CAAC,SAAS,aAAa,CAAC,eAAe,CAAC,SAAS,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,aAAa,CAAC,kBAAkB,CAAC,SAAS,uBAAuB,CAAC,kFAAkF,WAAW,CAAC,cAAc,mBAAmB,CAAC,uBAAuB,CAAC,qFAAqF,uBAAuB,CAAC,6BAA6B,YAAY,CAAC,yBAAyB,CAAC,OAAO,oBAAoB,CAAC,QAAQ,iBAAiB,CAAC,cAAc,CAAC,SAAS,YAAY,CAAC,SAAS,sBAAsB,CAAC,0CAA0C,mBAAmB,CAAC,mBAAmB,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,gBAAgB,CAAC,OAAO,cAAc,CAAC,OAAO,iBAAiB,CAAC,OAAO,gBAAgB,CAAC,OAAO,iBAAiB,CAAC,OAAO,cAAc,CAAC,MAAM,iBAAiB,CAAC,eAAe,CAAC,WAAW,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC,kBAAkB,CAAC,QAAQ,CAAC,mCAAmC,CAAC,aAAa,aAAa,CAAC,eAAe,CAAC,WAAW,YAAY,CAAC,wBAAwB,CAAC,eAAe,cAAc,CAAC,eAAe,CAAC,aAAa,cAAc,CAAC,eAAe,CAAC,kBAAkB,oBAAoB,CAAC,mCAAmC,kBAAkB,CAAC,YAAY,aAAa,CAAC,wBAAwB,CAAC,YAAY,kBAAkB,CAAC,iBAAiB,CAAC,mBAAmB,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,2BAA2B,qBAAqB,CAAC,WAAW,cAAc,CAAC,WAAW,CAAC,eAAe,cAAc,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,oBAAoB,CAAC,YAAY,mBAAmB,CAAC,aAAa,CAAC,gBAAgB,aAAa,CAAC,aAAa,CAAC,kBAAkB,0FAA0F,CAAC,KAAK,eAAe,CAAC,aAAa,CAAC,qBAAqB,CAAC,OAAO,aAAa,CAAC,IAAI,mBAAmB,CAAC,eAAe,CAAC,UAAU,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,QAAQ,SAAS,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,aAAa,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC,gBAAgB,gBAAgB,CAAC,iBAAiB,CAAC,WAAW,UAAU,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,yBAAyB,WAAW,eAAe,CAAC,CAAC,yBAAyB,WAAW,eAAe,CAAC,CAAC,yBAAyB,WAAW,eAAe,CAAC,CAAC,0BAA0B,WAAW,gBAAgB,CAAC,CAAC,iBAAiB,UAAU,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,YAAY,cAAc,CAAC,aAAa,CAAC,2CAA2C,eAAe,CAAC,cAAc,CAAC,sqBAAsqB,iBAAiB,CAAC,UAAU,CAAC,cAAc,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,KAAK,yBAAyB,CAAC,YAAY,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,OAAO,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,OAAO,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,QAAQ,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,QAAQ,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC,aAAa,2BAA2B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,4BAA4B,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,qBAAqB,CAAC,UAAU,sBAAsB,CAAC,UAAU,eAAe,CAAC,UAAU,sBAAsB,CAAC,UAAU,sBAAsB,CAAC,UAAU,eAAe,CAAC,UAAU,sBAAsB,CAAC,UAAU,sBAAsB,CAAC,UAAU,eAAe,CAAC,WAAW,sBAAsB,CAAC,WAAW,sBAAsB,CAAC,yBAAyB,QAAQ,yBAAyB,CAAC,YAAY,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,kBAAkB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,WAAW,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,WAAW,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC,gBAAgB,2BAA2B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,eAAe,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,4BAA4B,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,aAAa,CAAC,aAAa,qBAAqB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,aAAa,sBAAsB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,aAAa,sBAAsB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,cAAc,sBAAsB,CAAC,cAAc,sBAAsB,CAAC,CAAC,yBAAyB,QAAQ,yBAAyB,CAAC,YAAY,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,kBAAkB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,WAAW,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,WAAW,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC,gBAAgB,2BAA2B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,eAAe,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,4BAA4B,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,aAAa,CAAC,aAAa,qBAAqB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,aAAa,sBAAsB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,aAAa,sBAAsB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,cAAc,sBAAsB,CAAC,cAAc,sBAAsB,CAAC,CAAC,yBAAyB,QAAQ,yBAAyB,CAAC,YAAY,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,kBAAkB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,WAAW,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,WAAW,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC,gBAAgB,2BAA2B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,eAAe,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,4BAA4B,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,aAAa,CAAC,aAAa,qBAAqB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,aAAa,sBAAsB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,aAAa,sBAAsB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,cAAc,sBAAsB,CAAC,cAAc,sBAAsB,CAAC,CAAC,0BAA0B,QAAQ,yBAAyB,CAAC,YAAY,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,kBAAkB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,kBAAkB,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,WAAW,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,WAAW,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,cAAc,CAAC,gBAAgB,2BAA2B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,eAAe,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,OAAO,CAAC,YAAY,4BAA4B,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,4BAA4B,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,aAAa,CAAC,aAAa,qBAAqB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,aAAa,sBAAsB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,aAAa,sBAAsB,CAAC,aAAa,sBAAsB,CAAC,aAAa,eAAe,CAAC,cAAc,sBAAsB,CAAC,cAAc,sBAAsB,CAAC,CAAC,OAAO,UAAU,CAAC,cAAc,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,oBAAoB,cAAc,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,gBAAgB,qBAAqB,CAAC,+BAA+B,CAAC,mBAAmB,4BAA4B,CAAC,cAAc,qBAAqB,CAAC,0BAA0B,aAAa,CAAC,gBAAgB,wBAAwB,CAAC,sCAAsC,wBAAwB,CAAC,kDAAkD,uBAAuB,CAAC,yCAAyC,gCAAgC,CAAC,4BAA4B,iCAAiC,CAAC,mDAAmD,wBAAwB,CAAC,kCAAkC,wBAAwB,CAAC,0EAA0E,wBAAwB,CAAC,yDAAyD,wBAAwB,CAAC,oCAAoC,wBAAwB,CAAC,8EAA8E,wBAAwB,CAAC,mDAAmD,wBAAwB,CAAC,kCAAkC,wBAAwB,CAAC,0EAA0E,wBAAwB,CAAC,0CAA0C,wBAAwB,CAAC,+BAA+B,wBAAwB,CAAC,oEAAoE,wBAAwB,CAAC,mDAAmD,wBAAwB,CAAC,kCAAkC,wBAAwB,CAAC,0EAA0E,wBAAwB,CAAC,gDAAgD,wBAAwB,CAAC,iCAAiC,wBAAwB,CAAC,wEAAwE,wBAAwB,CAAC,6CAA6C,wBAAwB,CAAC,gCAAgC,wBAAwB,CAAC,sEAAsE,wBAAwB,CAAC,0CAA0C,wBAAwB,CAAC,+BAA+B,wBAAwB,CAAC,oEAAoE,wBAAwB,CAAC,gDAAgD,iCAAiC,CAAC,iCAAiC,iCAAiC,CAAC,wEAAwE,iCAAiC,CAAC,sBAAsB,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,uBAAuB,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,YAAY,UAAU,CAAC,wBAAwB,CAAC,mDAAmD,oBAAoB,CAAC,2BAA2B,QAAQ,CAAC,oDAAoD,sCAAsC,CAAC,uCAAuC,uCAAuC,CAAC,4BAA4B,qBAAqB,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,gCAAgC,CAAC,2CAA2C,CAAC,qCAAqC,QAAQ,CAAC,CAAC,4BAA4B,qBAAqB,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,gCAAgC,CAAC,2CAA2C,CAAC,qCAAqC,QAAQ,CAAC,CAAC,4BAA4B,qBAAqB,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,gCAAgC,CAAC,2CAA2C,CAAC,qCAAqC,QAAQ,CAAC,CAAC,6BAA6B,qBAAqB,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,gCAAgC,CAAC,2CAA2C,CAAC,qCAAqC,QAAQ,CAAC,CAAC,kBAAkB,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,gCAAgC,CAAC,2CAA2C,CAAC,kCAAkC,QAAQ,CAAC,cAAc,aAAa,CAAC,UAAU,CAAC,sBAAsB,CAAC,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,oEAAoE,CAAC,0BAA0B,4BAA4B,CAAC,QAAQ,CAAC,oBAAoB,aAAa,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,SAAS,CAAC,0CAA0C,CAAC,yCAAyC,aAAa,CAAC,SAAS,CAAC,gCAAgC,aAAa,CAAC,SAAS,CAAC,oCAAoC,aAAa,CAAC,SAAS,CAAC,qCAAqC,aAAa,CAAC,SAAS,CAAC,2BAA2B,aAAa,CAAC,SAAS,CAAC,+CAA+C,wBAAwB,CAAC,SAAS,CAAC,gDAAgD,0BAA0B,CAAC,qCAAqC,aAAa,CAAC,qBAAqB,CAAC,uCAAuC,aAAa,CAAC,UAAU,CAAC,gBAAgB,+BAA+B,CAAC,kCAAkC,CAAC,eAAe,CAAC,iBAAiB,CAAC,eAAe,CAAC,mBAAmB,6BAA6B,CAAC,gCAAgC,CAAC,iBAAiB,CAAC,eAAe,CAAC,mBAAmB,8BAA8B,CAAC,iCAAiC,CAAC,iBAAiB,CAAC,eAAe,CAAC,wBAAwB,aAAa,CAAC,UAAU,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,eAAe,CAAC,eAAe,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,kvBAAkvB,eAAe,CAAC,cAAc,CAAC,+OAA+O,oBAAoB,CAAC,iBAAiB,CAAC,eAAe,CAAC,mBAAmB,CAAC,2bAA2b,4BAA4B,CAAC,+OAA+O,kBAAkB,CAAC,iBAAiB,CAAC,eAAe,CAAC,mBAAmB,CAAC,2bAA2b,2BAA2B,CAAC,YAAY,kBAAkB,CAAC,WAAW,aAAa,CAAC,iBAAiB,CAAC,UAAU,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,uCAAuC,iBAAiB,CAAC,gBAAgB,CAAC,YAAY,iBAAiB,CAAC,aAAa,CAAC,oBAAoB,CAAC,kBAAkB,iBAAiB,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,6CAA6C,aAAa,CAAC,kBAAkB,eAAe,CAAC,mBAAmB,0BAA0B,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,cAAc,CAAC,mBAAmB,CAAC,qCAAqC,eAAe,CAAC,YAAY,CAAC,qBAAqB,CAAC,aAAa,CAAC,gBAAgB,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC,eAAe,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,mCAAmC,CAAC,mBAAmB,CAAC,sHAAsH,oBAAoB,CAAC,8IAA8I,oBAAoB,CAAC,0CAA0C,CAAC,wWAAwW,aAAa,CAAC,sGAAsG,aAAa,CAAC,kMAAkM,aAAa,CAAC,sHAAsH,aAAa,CAAC,sIAAsI,wBAAwB,CAAC,kNAAkN,aAAa,CAAC,sJAAsJ,wBAAwB,CAAC,kJAAkJ,yDAAyD,CAAC,0GAA0G,oBAAoB,CAAC,0HAA0H,oBAAoB,CAAC,sMAAsM,aAAa,CAAC,sHAAsH,0CAA0C,CAAC,kBAAkB,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,mCAAmC,CAAC,mBAAmB,CAAC,8HAA8H,oBAAoB,CAAC,sJAAsJ,oBAAoB,CAAC,0CAA0C,CAAC,wYAAwY,aAAa,CAAC,0GAA0G,aAAa,CAAC,kNAAkN,aAAa,CAAC,0HAA0H,aAAa,CAAC,0IAA0I,wBAAwB,CAAC,kOAAkO,aAAa,CAAC,0JAA0J,wBAAwB,CAAC,sJAAsJ,yDAAyD,CAAC,8GAA8G,oBAAoB,CAAC,8HAA8H,oBAAoB,CAAC,sNAAsN,aAAa,CAAC,0HAA0H,0CAA0C,CAAC,aAAa,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,6BAA6B,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,yBAAyB,UAAU,CAAC,yBAAyB,mBAAmB,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,eAAe,CAAC,yBAAyB,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,6BAA6B,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,eAAe,CAAC,2BAA2B,oBAAoB,CAAC,UAAU,CAAC,qBAAqB,CAAC,qCAAqC,oBAAoB,CAAC,0BAA0B,UAAU,CAAC,yBAAyB,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,UAAU,CAAC,cAAc,CAAC,+BAA+B,iBAAiB,CAAC,YAAY,CAAC,mBAAmB,CAAC,aAAa,CAAC,6BAA6B,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,mCAAmC,eAAe,CAAC,CAAC,KAAK,oBAAoB,CAAC,eAAe,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,cAAc,CAAC,eAAe,CAAC,oBAAoB,CAAC,6HAA6H,CAAC,sBAAsB,oBAAoB,CAAC,sBAAsB,SAAS,CAAC,0CAA0C,CAAC,4BAA4B,WAAW,CAAC,mCAAmC,cAAc,CAAC,oFAAoF,qBAAqB,CAAC,uCAAuC,mBAAmB,CAAC,aAAa,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,mBAAmB,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sCAAsC,yCAAyC,CAAC,4CAA4C,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,uIAAuI,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,yJAAyJ,yCAAyC,CAAC,eAAe,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,qBAAqB,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,0CAA0C,2CAA2C,CAAC,gDAAgD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,6IAA6I,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,+JAA+J,2CAA2C,CAAC,aAAa,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,mBAAmB,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sCAAsC,yCAAyC,CAAC,4CAA4C,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,uIAAuI,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,yJAAyJ,yCAAyC,CAAC,UAAU,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gBAAgB,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gCAAgC,0CAA0C,CAAC,sCAAsC,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,8HAA8H,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gJAAgJ,0CAA0C,CAAC,aAAa,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,mBAAmB,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sCAAsC,yCAAyC,CAAC,4CAA4C,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,uIAAuI,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,yJAAyJ,yCAAyC,CAAC,YAAY,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,kBAAkB,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,oCAAoC,yCAAyC,CAAC,0CAA0C,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,oIAAoI,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sJAAsJ,yCAAyC,CAAC,WAAW,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,iBAAiB,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,kCAAkC,2CAA2C,CAAC,wCAAwC,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,iIAAiI,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,mJAAmJ,2CAA2C,CAAC,UAAU,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gBAAgB,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gCAAgC,wCAAwC,CAAC,sCAAsC,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,8HAA8H,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gJAAgJ,wCAAwC,CAAC,qBAAqB,aAAa,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,2BAA2B,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sDAAsD,yCAAyC,CAAC,4DAA4D,aAAa,CAAC,4BAA4B,CAAC,+JAA+J,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,iLAAiL,yCAAyC,CAAC,uBAAuB,aAAa,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,6BAA6B,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,0DAA0D,2CAA2C,CAAC,gEAAgE,aAAa,CAAC,4BAA4B,CAAC,qKAAqK,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,uLAAuL,2CAA2C,CAAC,qBAAqB,aAAa,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,2BAA2B,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sDAAsD,yCAAyC,CAAC,4DAA4D,aAAa,CAAC,4BAA4B,CAAC,+JAA+J,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,iLAAiL,yCAAyC,CAAC,kBAAkB,aAAa,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,wBAAwB,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gDAAgD,0CAA0C,CAAC,sDAAsD,aAAa,CAAC,4BAA4B,CAAC,sJAAsJ,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,wKAAwK,0CAA0C,CAAC,qBAAqB,aAAa,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,2BAA2B,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sDAAsD,yCAAyC,CAAC,4DAA4D,aAAa,CAAC,4BAA4B,CAAC,+JAA+J,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,iLAAiL,yCAAyC,CAAC,oBAAoB,aAAa,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,0BAA0B,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,oDAAoD,yCAAyC,CAAC,0DAA0D,aAAa,CAAC,4BAA4B,CAAC,4JAA4J,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,8KAA8K,yCAAyC,CAAC,mBAAmB,aAAa,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,yBAAyB,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,kDAAkD,2CAA2C,CAAC,wDAAwD,aAAa,CAAC,4BAA4B,CAAC,yJAAyJ,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,2KAA2K,2CAA2C,CAAC,kBAAkB,aAAa,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,wBAAwB,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gDAAgD,wCAAwC,CAAC,sDAAsD,aAAa,CAAC,4BAA4B,CAAC,sJAAsJ,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,wKAAwK,wCAAwC,CAAC,UAAU,eAAe,CAAC,aAAa,CAAC,4BAA4B,CAAC,gBAAgB,aAAa,CAAC,yBAAyB,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,gCAAgC,yBAAyB,CAAC,wBAAwB,CAAC,eAAe,CAAC,sCAAsC,aAAa,CAAC,2BAA2B,kBAAkB,CAAC,iBAAiB,CAAC,eAAe,CAAC,mBAAmB,CAAC,2BAA2B,oBAAoB,CAAC,iBAAiB,CAAC,eAAe,CAAC,mBAAmB,CAAC,WAAW,aAAa,CAAC,UAAU,CAAC,sBAAsB,gBAAgB,CAAC,sFAAsF,UAAU,CAAC,MAAM,SAAS,CAAC,8BAA8B,CAAC,WAAW,SAAS,CAAC,UAAU,YAAY,CAAC,eAAe,aAAa,CAAC,iBAAiB,iBAAiB,CAAC,oBAAoB,uBAAuB,CAAC,YAAY,iBAAiB,CAAC,QAAQ,CAAC,eAAe,CAAC,2BAA2B,CAAC,kBAAkB,iBAAiB,CAAC,wBAAwB,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,UAAU,CAAC,qBAAqB,CAAC,mCAAmC,CAAC,eAAe,CAAC,kCAAkC,CAAC,8BAA8B,aAAa,CAAC,eAAe,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,eAAe,CAAC,kBAAkB,CAAC,cAAc,CAAC,aAAa,CAAC,eAAe,CAAC,eAAe,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,gCAAgC,CAAC,oBAAoB,CAAC,uBAAuB,YAAY,CAAC,qBAAqB,CAAC,gCAAgC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,UAAU,CAAC,YAAY,CAAC,mCAAmC,CAAC,wBAAwB,CAAC,kCAAkC,CAAC,sCAAsC,aAAa,CAAC,0BAA0B,YAAY,CAAC,mBAAmB,CAAC,mCAAmC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,UAAU,CAAC,iCAAiC,CAAC,oCAAoC,CAAC,sBAAsB,CAAC,yCAAyC,aAAa,CAAC,mCAAmC,gBAAgB,CAAC,yBAAyB,YAAY,CAAC,oBAAoB,CAAC,kCAAkC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,UAAU,CAAC,kCAAkC,YAAY,CAAC,mCAAmC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,UAAU,CAAC,iCAAiC,CAAC,uBAAuB,CAAC,oCAAoC,CAAC,wCAAwC,aAAa,CAAC,mCAAmC,gBAAgB,CAAC,kBAAkB,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,4BAA4B,CAAC,eAAe,aAAa,CAAC,UAAU,CAAC,qBAAqB,CAAC,UAAU,CAAC,eAAe,CAAC,aAAa,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,QAAQ,CAAC,0CAA0C,aAAa,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,4CAA4C,UAAU,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,gDAAgD,aAAa,CAAC,4BAA4B,CAAC,oBAAoB,aAAa,CAAC,iBAAiB,aAAa,CAAC,oBAAoB,CAAC,eAAe,CAAC,iBAAiB,CAAC,aAAa,CAAC,kBAAkB,CAAC,+BAA+B,iBAAiB,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,yCAAyC,iBAAiB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,qDAAqD,SAAS,CAAC,mKAAmK,SAAS,CAAC,4PAA4P,gBAAgB,CAAC,aAAa,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,0BAA0B,UAAU,CAAC,4BAA4B,aAAa,CAAC,mGAAmG,yBAAyB,CAAC,4BAA4B,CAAC,+EAA+E,wBAAwB,CAAC,2BAA2B,CAAC,uBAAuB,sBAAsB,CAAC,qBAAqB,CAAC,8BAA8B,aAAa,CAAC,yEAAyE,qBAAqB,CAAC,oBAAoB,CAAC,yEAAyE,oBAAoB,CAAC,mBAAmB,CAAC,oBAAoB,2BAA2B,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,wDAAwD,UAAU,CAAC,gJAAgJ,eAAe,CAAC,aAAa,CAAC,qHAAqH,4BAA4B,CAAC,2BAA2B,CAAC,iGAAiG,wBAAwB,CAAC,yBAAyB,CAAC,yDAAyD,eAAe,CAAC,gMAAgM,iBAAiB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,aAAa,iBAAiB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,yBAAyB,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,UAAU,CAAC,iFAAiF,iBAAiB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,mGAAmG,SAAS,CAAC,iXAAiX,gBAAgB,CAAC,yFAAyF,yBAAyB,CAAC,4BAA4B,CAAC,2FAA2F,wBAAwB,CAAC,2BAA2B,CAAC,0BAA0B,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,oIAAoI,yBAAyB,CAAC,4BAA4B,CAAC,sIAAsI,wBAAwB,CAAC,2BAA2B,CAAC,yCAAyC,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,mDAAmD,iBAAiB,CAAC,SAAS,CAAC,4VAA4V,gBAAgB,CAAC,qBAAqB,iBAAiB,CAAC,oBAAoB,gBAAgB,CAAC,kBAAkB,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,eAAe,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,2EAA2E,YAAY,CAAC,6XAA6X,yBAAyB,CAAC,4BAA4B,CAAC,+WAA+W,wBAAwB,CAAC,2BAA2B,CAAC,gBAAgB,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,uBAAuB,0BAA0B,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,sBAAsB,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,4DAA4D,UAAU,CAAC,wBAAwB,CAAC,0DAA0D,yDAAyD,CAAC,2DAA2D,UAAU,CAAC,wBAAwB,CAAC,qDAAqD,aAAa,CAAC,6DAA6D,wBAAwB,CAAC,sBAAsB,eAAe,CAAC,8BAA8B,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,mBAAmB,CAAC,UAAU,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,6BAA6B,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,2BAA2B,CAAC,iCAAiC,CAAC,uBAAuB,CAAC,+CAA+C,oBAAoB,CAAC,6EAA6E,wBAAwB,CAAC,4EAA4E,wDAAyN,CAAC,mFAAmF,wBAAwB,CAAC,kFAAkF,wDAAsK,CAAC,sFAAsF,mCAAmC,CAAC,4FAA4F,mCAAmC,CAAC,4CAA4C,iBAAiB,CAAC,0EAA0E,wBAAwB,CAAC,yEAAyE,wDAAmK,CAAC,mFAAmF,mCAAmC,CAAC,eAAe,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,CAAC,sCAAsC,CAAC,eAAe,CAAC,aAAa,CAAC,qBAAqB,CAAC,qFAAoN,CAAC,wBAAwB,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,eAAe,CAAC,qBAAqB,oBAAoB,CAAC,SAAS,CAAC,wEAAwE,CAAC,gCAAgC,aAAa,CAAC,qBAAqB,CAAC,8DAA8D,WAAW,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,wBAAwB,aAAa,CAAC,wBAAwB,CAAC,2BAA2B,SAAS,CAAC,kBAAkB,4BAA4B,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,aAAa,CAAC,kBAAkB,2BAA2B,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,cAAc,CAAC,aAAa,iBAAiB,CAAC,oBAAoB,CAAC,UAAU,CAAC,0BAA0B,CAAC,eAAe,CAAC,mBAAmB,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,0BAA0B,CAAC,QAAQ,CAAC,SAAS,CAAC,8CAA8C,oBAAoB,CAAC,0CAA0C,CAAC,sDAAsD,oBAAoB,CAAC,sDAAsD,gBAAgB,CAAC,mBAAmB,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,sBAAsB,CAAC,eAAe,CAAC,aAAa,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,0BAA0B,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,0CAA0C,CAAC,sBAAsB,CAAC,eAAe,CAAC,aAAa,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,6BAA6B,CAAC,+BAA+B,CAAC,KAAK,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,UAAU,aAAa,CAAC,kBAAkB,CAAC,gCAAgC,oBAAoB,CAAC,mBAAmB,aAAa,CAAC,UAAU,+BAA+B,CAAC,oBAAoB,kBAAkB,CAAC,oBAAoB,4BAA4B,CAAC,6BAA6B,CAAC,8BAA8B,CAAC,oDAAoD,oCAAoC,CAAC,6BAA6B,aAAa,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,8DAA8D,aAAa,CAAC,qBAAqB,CAAC,iCAAiC,CAAC,yBAAyB,eAAe,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,qBAAqB,oBAAoB,CAAC,uDAAuD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC,yBAAyB,yBAAyB,CAAC,YAAY,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,iBAAiB,CAAC,uBAAuB,YAAY,CAAC,qBAAqB,aAAa,CAAC,QAAQ,iBAAiB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,4CAA4C,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,6BAA6B,CAAC,cAAc,oBAAoB,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,wCAAwC,oBAAoB,CAAC,YAAY,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,cAAc,CAAC,eAAe,CAAC,eAAe,CAAC,sBAAsB,eAAe,CAAC,cAAc,CAAC,2BAA2B,eAAe,CAAC,UAAU,CAAC,aAAa,oBAAoB,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,iBAAiB,4BAA4B,CAAC,eAAe,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,WAAW,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,gBAAgB,qBAAqB,CAAC,iBAAiB,CAAC,aAAa,CAAC,4BAA4B,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,4CAA4C,oBAAoB,CAAC,8CAA8C,cAAc,CAAC,qBAAqB,oBAAoB,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,CAAC,UAAU,CAAC,kCAAkC,CAAC,yBAAyB,CAAC,4BAA4B,gEAAgE,eAAe,CAAC,cAAc,CAAC,CAAC,yBAAyB,kBAAkB,6BAA6B,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,8BAA8B,6BAA6B,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,6CAA6C,iBAAiB,CAAC,mDAAmD,OAAO,CAAC,SAAS,CAAC,wCAAwC,mBAAmB,CAAC,kBAAkB,CAAC,gEAAgE,oBAAoB,CAAC,gBAAgB,CAAC,mCAAmC,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,4BAA4B,CAAC,eAAe,CAAC,kCAAkC,YAAY,CAAC,yCAAyC,QAAQ,CAAC,WAAW,CAAC,CAAC,4BAA4B,gEAAgE,eAAe,CAAC,cAAc,CAAC,CAAC,yBAAyB,kBAAkB,6BAA6B,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,8BAA8B,6BAA6B,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,6CAA6C,iBAAiB,CAAC,mDAAmD,OAAO,CAAC,SAAS,CAAC,wCAAwC,mBAAmB,CAAC,kBAAkB,CAAC,gEAAgE,oBAAoB,CAAC,gBAAgB,CAAC,mCAAmC,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,4BAA4B,CAAC,eAAe,CAAC,kCAAkC,YAAY,CAAC,yCAAyC,QAAQ,CAAC,WAAW,CAAC,CAAC,4BAA4B,gEAAgE,eAAe,CAAC,cAAc,CAAC,CAAC,yBAAyB,kBAAkB,6BAA6B,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,8BAA8B,6BAA6B,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,6CAA6C,iBAAiB,CAAC,mDAAmD,OAAO,CAAC,SAAS,CAAC,wCAAwC,mBAAmB,CAAC,kBAAkB,CAAC,gEAAgE,oBAAoB,CAAC,gBAAgB,CAAC,mCAAmC,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,4BAA4B,CAAC,eAAe,CAAC,kCAAkC,YAAY,CAAC,yCAAyC,QAAQ,CAAC,WAAW,CAAC,CAAC,6BAA6B,gEAAgE,eAAe,CAAC,cAAc,CAAC,CAAC,0BAA0B,kBAAkB,6BAA6B,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,8BAA8B,6BAA6B,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,6CAA6C,iBAAiB,CAAC,mDAAmD,OAAO,CAAC,SAAS,CAAC,wCAAwC,mBAAmB,CAAC,kBAAkB,CAAC,gEAAgE,oBAAoB,CAAC,gBAAgB,CAAC,mCAAmC,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,4BAA4B,CAAC,eAAe,CAAC,kCAAkC,YAAY,CAAC,yCAAyC,QAAQ,CAAC,WAAW,CAAC,CAAC,eAAe,6BAA6B,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,0DAA0D,eAAe,CAAC,cAAc,CAAC,2BAA2B,6BAA6B,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,0CAA0C,iBAAiB,CAAC,gDAAgD,OAAO,CAAC,SAAS,CAAC,qCAAqC,mBAAmB,CAAC,kBAAkB,CAAC,0DAA0D,oBAAoB,CAAC,gBAAgB,CAAC,gCAAgC,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,4BAA4B,CAAC,eAAe,CAAC,+BAA+B,YAAY,CAAC,sCAAsC,QAAQ,CAAC,WAAW,CAAC,4BAA4B,oBAAoB,CAAC,oEAAoE,oBAAoB,CAAC,oCAAoC,oBAAoB,CAAC,oFAAoF,oBAAoB,CAAC,6CAA6C,oBAAoB,CAAC,0KAA0K,oBAAoB,CAAC,8BAA8B,oBAAoB,CAAC,2BAA2B,CAAC,mCAAmC,wDAAoQ,CAAC,2BAA2B,oBAAoB,CAAC,6BAA6B,oBAAoB,CAAC,sEAAsE,oBAAoB,CAAC,2BAA2B,UAAU,CAAC,kEAAkE,UAAU,CAAC,mCAAmC,0BAA0B,CAAC,kFAAkF,2BAA2B,CAAC,4CAA4C,2BAA2B,CAAC,sKAAsK,UAAU,CAAC,6BAA6B,0BAA0B,CAAC,iCAAiC,CAAC,kCAAkC,wDAA0Q,CAAC,0BAA0B,0BAA0B,CAAC,4BAA4B,UAAU,CAAC,oEAAoE,UAAU,CAAC,MAAM,iBAAiB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,WAAW,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,iCAAiC,CAAC,oBAAoB,CAAC,SAAS,cAAc,CAAC,aAAa,CAAC,2DAA2D,6BAA6B,CAAC,8BAA8B,CAAC,yDAAyD,iCAAiC,CAAC,gCAAgC,CAAC,WAAW,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,eAAe,CAAC,YAAY,oBAAoB,CAAC,eAAe,mBAAmB,CAAC,eAAe,CAAC,sBAAsB,eAAe,CAAC,iBAAiB,oBAAoB,CAAC,sBAAsB,mBAAmB,CAAC,aAAa,sBAAsB,CAAC,eAAe,CAAC,gCAAgC,CAAC,wCAAwC,CAAC,yBAAyB,uDAAuD,CAAC,sDAAsD,YAAY,CAAC,aAAa,sBAAsB,CAAC,gCAAgC,CAAC,qCAAqC,CAAC,wBAAwB,uDAAuD,CAAC,kBAAkB,qBAAqB,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,eAAe,CAAC,mBAAmB,qBAAqB,CAAC,oBAAoB,CAAC,kBAAkB,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,UAAU,UAAU,CAAC,gCAAgC,CAAC,cAAc,UAAU,CAAC,yCAAyC,CAAC,0CAA0C,CAAC,iBAAiB,UAAU,CAAC,6CAA6C,CAAC,4CAA4C,CAAC,WAAW,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,iBAAiB,kBAAkB,CAAC,yBAAyB,WAAW,6BAA6B,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,iBAAiB,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,eAAe,CAAC,WAAW,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,YAAY,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,kBAAkB,kBAAkB,CAAC,yBAAyB,YAAY,6BAA6B,CAAC,4BAA4B,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,kBAAkB,kBAAkB,CAAC,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,wBAAwB,aAAa,CAAC,aAAa,CAAC,8BAA8B,yBAAyB,CAAC,4BAA4B,CAAC,uFAAuF,yBAAyB,CAAC,0FAA0F,4BAA4B,CAAC,6BAA6B,wBAAwB,CAAC,2BAA2B,CAAC,qFAAqF,wBAAwB,CAAC,wFAAwF,2BAA2B,CAAC,6BAA6B,oBAAoB,CAAC,qFAAqF,6BAA6B,CAAC,8BAA8B,CAAC,wFAAwF,iCAAiC,CAAC,gCAAgC,CAAC,sEAAsE,eAAe,CAAC,iVAAiV,eAAe,CAAC,CAAC,oBAAoB,oBAAoB,CAAC,yBAAyB,cAAc,sBAAsB,CAAC,mBAAmB,CAAC,cAAc,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,oBAAoB,oBAAoB,CAAC,UAAU,CAAC,CAAC,YAAY,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,eAAe,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,0CAA0C,oBAAoB,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC,gDAAgD,yBAAyB,CAAC,gDAAgD,oBAAoB,CAAC,wBAAwB,aAAa,CAAC,YAAY,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,cAAc,CAAC,eAAe,CAAC,oBAAoB,CAAC,WAAW,iBAAiB,CAAC,aAAa,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,iBAAiB,aAAa,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,iBAAiB,SAAS,CAAC,SAAS,CAAC,0CAA0C,CAAC,yCAAyC,cAAc,CAAC,kCAAkC,aAAa,CAAC,6BAA6B,CAAC,gCAAgC,CAAC,iCAAiC,8BAA8B,CAAC,iCAAiC,CAAC,6BAA6B,SAAS,CAAC,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,+BAA+B,aAAa,CAAC,mBAAmB,CAAC,WAAW,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,0BAA0B,qBAAqB,CAAC,iBAAiB,CAAC,eAAe,CAAC,iDAAiD,4BAA4B,CAAC,+BAA+B,CAAC,gDAAgD,6BAA6B,CAAC,gCAAgC,CAAC,0BAA0B,oBAAoB,CAAC,iBAAiB,CAAC,eAAe,CAAC,iDAAiD,4BAA4B,CAAC,+BAA+B,CAAC,gDAAgD,6BAA6B,CAAC,gCAAgC,CAAC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,aAAa,CAAC,eAAe,CAAC,aAAa,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,aAAa,YAAY,CAAC,YAAY,iBAAiB,CAAC,QAAQ,CAAC,YAAY,kBAAkB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,eAAe,UAAU,CAAC,wBAAwB,CAAC,sDAAsD,UAAU,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,iBAAiB,UAAU,CAAC,wBAAwB,CAAC,0DAA0D,UAAU,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,eAAe,UAAU,CAAC,wBAAwB,CAAC,sDAAsD,UAAU,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,YAAY,UAAU,CAAC,wBAAwB,CAAC,gDAAgD,UAAU,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,eAAe,aAAa,CAAC,wBAAwB,CAAC,sDAAsD,aAAa,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,cAAc,UAAU,CAAC,wBAAwB,CAAC,oDAAoD,UAAU,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,aAAa,aAAa,CAAC,wBAAwB,CAAC,kDAAkD,aAAa,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,YAAY,UAAU,CAAC,wBAAwB,CAAC,gDAAgD,UAAU,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,WAAW,iBAAiB,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,yBAAyB,WAAW,iBAAiB,CAAC,CAAC,iBAAiB,eAAe,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,iBAAiB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,eAAe,aAAa,CAAC,YAAY,eAAe,CAAC,mBAAmB,kBAAkB,CAAC,0BAA0B,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,eAAe,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,kBAAkB,wBAAwB,CAAC,2BAA2B,aAAa,CAAC,iBAAiB,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,oBAAoB,wBAAwB,CAAC,6BAA6B,aAAa,CAAC,eAAe,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,kBAAkB,wBAAwB,CAAC,2BAA2B,aAAa,CAAC,YAAY,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,eAAe,wBAAwB,CAAC,wBAAwB,aAAa,CAAC,eAAe,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,kBAAkB,wBAAwB,CAAC,2BAA2B,aAAa,CAAC,cAAc,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,iBAAiB,wBAAwB,CAAC,0BAA0B,aAAa,CAAC,aAAa,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,gBAAgB,wBAAwB,CAAC,yBAAyB,aAAa,CAAC,YAAY,aAAa,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,eAAe,wBAAwB,CAAC,wBAAwB,aAAa,CAAC,wCAAwC,KAAK,0BAA0B,CAAC,GAAG,uBAAuB,CAAC,CAAC,gCAAgC,KAAK,0BAA0B,CAAC,GAAG,uBAAuB,CAAC,CAAC,UAAU,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,cAAc,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,UAAU,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,yBAAyB,CAAC,sBAAsB,iLAAiL,CAAC,yBAAyB,CAAC,uBAAuB,yDAAyD,CAAC,iDAAiD,CAAC,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,YAAY,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,cAAc,CAAC,eAAe,CAAC,wBAAwB,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,4DAA4D,aAAa,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,+BAA+B,aAAa,CAAC,wBAAwB,CAAC,iBAAiB,iBAAiB,CAAC,aAAa,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,iCAAiC,CAAC,6BAA6B,6BAA6B,CAAC,8BAA8B,CAAC,4BAA4B,eAAe,CAAC,iCAAiC,CAAC,gCAAgC,CAAC,8CAA8C,SAAS,CAAC,oBAAoB,CAAC,oDAAoD,aAAa,CAAC,qBAAqB,CAAC,wBAAwB,SAAS,CAAC,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,mCAAmC,cAAc,CAAC,aAAa,CAAC,eAAe,CAAC,2DAA2D,YAAY,CAAC,yDAAyD,eAAe,CAAC,yBAAyB,aAAa,CAAC,wBAAwB,CAAC,4GAA4G,aAAa,CAAC,wBAAwB,CAAC,uDAAuD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,2BAA2B,aAAa,CAAC,wBAAwB,CAAC,gHAAgH,aAAa,CAAC,wBAAwB,CAAC,yDAAyD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,yBAAyB,aAAa,CAAC,wBAAwB,CAAC,4GAA4G,aAAa,CAAC,wBAAwB,CAAC,uDAAuD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sBAAsB,aAAa,CAAC,wBAAwB,CAAC,sGAAsG,aAAa,CAAC,wBAAwB,CAAC,oDAAoD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,yBAAyB,aAAa,CAAC,wBAAwB,CAAC,4GAA4G,aAAa,CAAC,wBAAwB,CAAC,uDAAuD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,wBAAwB,aAAa,CAAC,wBAAwB,CAAC,0GAA0G,aAAa,CAAC,wBAAwB,CAAC,sDAAsD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,uBAAuB,aAAa,CAAC,wBAAwB,CAAC,wGAAwG,aAAa,CAAC,wBAAwB,CAAC,qDAAqD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,sBAAsB,aAAa,CAAC,wBAAwB,CAAC,sGAAsG,aAAa,CAAC,wBAAwB,CAAC,oDAAoD,UAAU,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,OAAO,WAAW,CAAC,gBAAgB,CAAC,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,wBAAwB,CAAC,UAAU,CAAC,0BAA0B,UAAU,CAAC,oBAAoB,CAAC,WAAW,CAAC,qCAAqC,cAAc,CAAC,aAAa,SAAS,CAAC,4BAA4B,CAAC,QAAQ,CAAC,uBAAuB,CAAC,YAAY,eAAe,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,mBAAmB,iBAAiB,CAAC,eAAe,CAAC,cAAc,iBAAiB,CAAC,UAAU,CAAC,YAAY,CAAC,mBAAmB,CAAC,0BAA0B,yCAAyC,CAAC,iCAAiC,CAAC,gEAAgE,CAAC,mCAAmC,CAAC,2BAA2B,CAAC,0BAA0B,gCAAgC,CAAC,wBAAwB,CAAC,uBAAuB,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,eAAe,iBAAiB,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,UAAU,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,+BAA+B,CAAC,mBAAmB,CAAC,SAAS,CAAC,gBAAgB,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC,qBAAqB,SAAS,CAAC,qBAAqB,UAAU,CAAC,cAAc,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,6BAA6B,CAAC,YAAY,CAAC,+BAA+B,CAAC,4BAA4B,CAAC,6BAA6B,CAAC,qBAAqB,YAAY,CAAC,6BAA6B,CAAC,aAAa,eAAe,CAAC,eAAe,CAAC,YAAY,iBAAiB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,YAAY,CAAC,cAAc,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,YAAY,CAAC,4BAA4B,CAAC,iCAAiC,kBAAkB,CAAC,gCAAgC,mBAAmB,CAAC,yBAAyB,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,yBAAyB,cAAc,eAAe,CAAC,mBAAmB,CAAC,uBAAuB,qCAAqC,CAAC,UAAU,eAAe,CAAC,CAAC,yBAAyB,UAAU,eAAe,CAAC,CAAC,SAAS,iBAAiB,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,uJAAuJ,CAAC,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC,eAAe,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,eAAe,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,SAAS,CAAC,cAAc,UAAU,CAAC,gBAAgB,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,wBAAwB,iBAAiB,CAAC,UAAU,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,mDAAmD,eAAe,CAAC,iEAAiE,QAAQ,CAAC,iFAAiF,KAAK,CAAC,0BAA0B,CAAC,qBAAqB,CAAC,uDAAuD,eAAe,CAAC,qEAAqE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,qFAAqF,OAAO,CAAC,gCAAgC,CAAC,uBAAuB,CAAC,yDAAyD,eAAe,CAAC,uEAAuE,KAAK,CAAC,uFAAuF,QAAQ,CAAC,0BAA0B,CAAC,wBAAwB,CAAC,qDAAqD,eAAe,CAAC,mEAAmE,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,mFAAmF,MAAM,CAAC,gCAAgC,CAAC,sBAAsB,CAAC,eAAe,eAAe,CAAC,oBAAoB,CAAC,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,SAAS,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,eAAe,CAAC,uJAAuJ,CAAC,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC,eAAe,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,eAAe,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,+BAA+B,CAAC,mBAAmB,CAAC,gBAAgB,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC,+CAA+C,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,mDAAmD,mBAAmB,CAAC,iEAAiE,+BAA+B,CAAC,gKAAgK,0BAA0B,CAAC,iFAAiF,QAAQ,CAAC,gCAAgC,CAAC,+EAA+E,UAAU,CAAC,qBAAqB,CAAC,uDAAuD,iBAAiB,CAAC,qEAAqE,6BAA6B,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,wKAAwK,gCAAgC,CAAC,qFAAqF,MAAM,CAAC,kCAAkC,CAAC,mFAAmF,QAAQ,CAAC,uBAAuB,CAAC,yDAAyD,gBAAgB,CAAC,uEAAuE,4BAA4B,CAAC,4KAA4K,gCAAgC,CAAC,uFAAuF,KAAK,CAAC,mCAAmC,CAAC,qFAAqF,OAAO,CAAC,wBAAwB,CAAC,yGAAyG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC,+BAA+B,CAAC,qDAAqD,kBAAkB,CAAC,mEAAmE,8BAA8B,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,oKAAoK,gCAAgC,CAAC,mFAAmF,OAAO,CAAC,iCAAiC,CAAC,iFAAiF,SAAS,CAAC,sBAAsB,CAAC,gBAAgB,oBAAoB,CAAC,eAAe,CAAC,cAAc,CAAC,aAAa,CAAC,wBAAwB,CAAC,+BAA+B,CAAC,wCAAwC,CAAC,yCAAyC,CAAC,sBAAsB,YAAY,CAAC,cAAc,oBAAoB,CAAC,aAAa,CAAC,UAAU,iBAAiB,CAAC,gBAAgB,iBAAiB,CAAC,UAAU,CAAC,eAAe,CAAC,eAAe,iBAAiB,CAAC,YAAY,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,UAAU,CAAC,qCAAqC,CAAC,6BAA6B,CAAC,wDAAwD,CAAC,kCAAkC,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,8DAA8D,aAAa,CAAC,wCAAwC,iBAAiB,CAAC,KAAK,CAAC,+EAA+E,+BAA+B,CAAC,uBAAuB,CAAC,mFAAmF,+EAA+E,oCAAoC,CAAC,4BAA4B,CAAC,CAAC,gDAAgD,kCAAkC,CAAC,0BAA0B,CAAC,mFAAmF,gDAAgD,uCAAuC,CAAC,+BAA+B,CAAC,CAAC,+CAA+C,mCAAmC,CAAC,2BAA2B,CAAC,mFAAmF,+CAA+C,wCAAwC,CAAC,gCAAgC,CAAC,CAAC,8CAA8C,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAAC,oHAAoH,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,MAAM,CAAC,uBAAuB,OAAO,CAAC,wDAAwD,oBAAoB,CAAC,UAAU,CAAC,WAAW,CAAC,8CAA8C,CAAC,yBAAyB,CAAC,4BAA4B,wDAA+M,CAAC,4BAA4B,wDAA+M,CAAC,qBAAqB,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,YAAY,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,cAAc,CAAC,gBAAgB,CAAC,eAAe,CAAC,eAAe,CAAC,wBAAwB,iBAAiB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,eAAe,CAAC,kBAAkB,CAAC,qCAAqC,CAAC,gCAAgC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,+BAA+B,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,6BAA6B,qBAAqB,CAAC,kBAAkB,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,UAAU,CAAC,iBAAiB,CAAC,gBAAgB,iCAAiC,CAAC,WAAW,4BAA4B,CAAC,cAAc,+BAA+B,CAAC,cAAc,+BAA+B,CAAC,mBAAmB,oCAAoC,CAAC,gBAAgB,iCAAiC,CAAC,YAAY,kCAAkC,CAAC,sFAAsF,kCAAkC,CAAC,cAAc,kCAAkC,CAAC,8FAA8F,kCAAkC,CAAC,YAAY,kCAAkC,CAAC,sFAAsF,kCAAkC,CAAC,SAAS,kCAAkC,CAAC,0EAA0E,kCAAkC,CAAC,YAAY,kCAAkC,CAAC,sFAAsF,kCAAkC,CAAC,WAAW,kCAAkC,CAAC,kFAAkF,kCAAkC,CAAC,UAAU,kCAAkC,CAAC,8EAA8E,kCAAkC,CAAC,SAAS,kCAAkC,CAAC,0EAA0E,kCAAkC,CAAC,UAAU,+BAA+B,CAAC,gBAAgB,sCAAsC,CAAC,QAAQ,kCAAkC,CAAC,YAAY,sCAAsC,CAAC,cAAc,wCAAwC,CAAC,eAAe,yCAAyC,CAAC,aAAa,uCAAuC,CAAC,UAAU,kBAAkB,CAAC,cAAc,sBAAsB,CAAC,gBAAgB,wBAAwB,CAAC,iBAAiB,yBAAyB,CAAC,eAAe,uBAAuB,CAAC,gBAAgB,8BAA8B,CAAC,kBAAkB,8BAA8B,CAAC,gBAAgB,8BAA8B,CAAC,aAAa,8BAA8B,CAAC,gBAAgB,8BAA8B,CAAC,eAAe,8BAA8B,CAAC,cAAc,8BAA8B,CAAC,aAAa,8BAA8B,CAAC,cAAc,2BAA2B,CAAC,SAAS,8BAA8B,CAAC,aAAa,uCAAuC,CAAC,wCAAwC,CAAC,eAAe,wCAAwC,CAAC,2CAA2C,CAAC,gBAAgB,2CAA2C,CAAC,0CAA0C,CAAC,cAAc,uCAAuC,CAAC,0CAA0C,CAAC,gBAAgB,2BAA2B,CAAC,WAAW,yBAAyB,CAAC,iBAAiB,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,sBAAsB,CAAC,UAAU,wBAAwB,CAAC,gBAAgB,8BAA8B,CAAC,SAAS,uBAAuB,CAAC,SAAS,uBAAuB,CAAC,aAAa,2BAA2B,CAAC,cAAc,4BAA4B,CAAC,QAAQ,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,eAAe,oCAAoC,CAAC,oCAAoC,CAAC,6BAA6B,CAAC,yBAAyB,WAAW,sBAAsB,CAAC,aAAa,wBAAwB,CAAC,mBAAmB,8BAA8B,CAAC,YAAY,uBAAuB,CAAC,YAAY,uBAAuB,CAAC,gBAAgB,2BAA2B,CAAC,iBAAiB,4BAA4B,CAAC,WAAW,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,kBAAkB,oCAAoC,CAAC,oCAAoC,CAAC,6BAA6B,CAAC,CAAC,yBAAyB,WAAW,sBAAsB,CAAC,aAAa,wBAAwB,CAAC,mBAAmB,8BAA8B,CAAC,YAAY,uBAAuB,CAAC,YAAY,uBAAuB,CAAC,gBAAgB,2BAA2B,CAAC,iBAAiB,4BAA4B,CAAC,WAAW,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,kBAAkB,oCAAoC,CAAC,oCAAoC,CAAC,6BAA6B,CAAC,CAAC,yBAAyB,WAAW,sBAAsB,CAAC,aAAa,wBAAwB,CAAC,mBAAmB,8BAA8B,CAAC,YAAY,uBAAuB,CAAC,YAAY,uBAAuB,CAAC,gBAAgB,2BAA2B,CAAC,iBAAiB,4BAA4B,CAAC,WAAW,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,kBAAkB,oCAAoC,CAAC,oCAAoC,CAAC,6BAA6B,CAAC,CAAC,0BAA0B,WAAW,sBAAsB,CAAC,aAAa,wBAAwB,CAAC,mBAAmB,8BAA8B,CAAC,YAAY,uBAAuB,CAAC,YAAY,uBAAuB,CAAC,gBAAgB,2BAA2B,CAAC,iBAAiB,4BAA4B,CAAC,WAAW,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,kBAAkB,oCAAoC,CAAC,oCAAoC,CAAC,6BAA6B,CAAC,CAAC,aAAa,cAAc,sBAAsB,CAAC,gBAAgB,wBAAwB,CAAC,sBAAsB,8BAA8B,CAAC,eAAe,uBAAuB,CAAC,eAAe,uBAAuB,CAAC,mBAAmB,2BAA2B,CAAC,oBAAoB,4BAA4B,CAAC,cAAc,6BAA6B,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,qBAAqB,oCAAoC,CAAC,oCAAoC,CAAC,6BAA6B,CAAC,CAAC,kBAAkB,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,0BAA0B,aAAa,CAAC,UAAU,CAAC,2IAA2I,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,gCAAgC,sBAAsB,CAAC,gCAAgC,kBAAkB,CAAC,+BAA+B,eAAe,CAAC,+BAA+B,gBAAgB,CAAC,UAAU,uCAAuC,CAAC,sCAAsC,CAAC,gCAAgC,CAAC,4BAA4B,CAAC,aAAa,qCAAqC,CAAC,sCAAsC,CAAC,mCAAmC,CAAC,+BAA+B,CAAC,kBAAkB,uCAAuC,CAAC,uCAAuC,CAAC,wCAAwC,CAAC,oCAAoC,CAAC,qBAAqB,qCAAqC,CAAC,uCAAuC,CAAC,2CAA2C,CAAC,uCAAuC,CAAC,WAAW,4BAA4B,CAAC,wBAAwB,CAAC,aAAa,8BAA8B,CAAC,0BAA0B,CAAC,mBAAmB,oCAAoC,CAAC,gCAAgC,CAAC,uBAAuB,gCAAgC,CAAC,6BAA6B,CAAC,oCAAoC,CAAC,qBAAqB,8BAA8B,CAAC,2BAA2B,CAAC,kCAAkC,CAAC,wBAAwB,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,yBAAyB,kCAAkC,CAAC,+BAA+B,CAAC,uCAAuC,CAAC,wBAAwB,kCAAkC,CAAC,sCAAsC,CAAC,mBAAmB,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,iBAAiB,+BAA+B,CAAC,4BAA4B,CAAC,8BAA8B,CAAC,oBAAoB,kCAAkC,CAAC,+BAA+B,CAAC,4BAA4B,CAAC,sBAAsB,oCAAoC,CAAC,iCAAiC,CAAC,8BAA8B,CAAC,qBAAqB,mCAAmC,CAAC,gCAAgC,CAAC,6BAA6B,CAAC,qBAAqB,kCAAkC,CAAC,kCAAkC,CAAC,mBAAmB,gCAAgC,CAAC,gCAAgC,CAAC,sBAAsB,mCAAmC,CAAC,8BAA8B,CAAC,uBAAuB,oCAAoC,CAAC,qCAAqC,CAAC,sBAAsB,uCAAuC,CAAC,oCAAoC,CAAC,uBAAuB,oCAAoC,CAAC,+BAA+B,CAAC,iBAAiB,kCAAkC,CAAC,yBAAyB,CAAC,kBAAkB,mCAAmC,CAAC,+BAA+B,CAAC,gBAAgB,iCAAiC,CAAC,6BAA6B,CAAC,mBAAmB,oCAAoC,CAAC,2BAA2B,CAAC,qBAAqB,sCAAsC,CAAC,6BAA6B,CAAC,oBAAoB,qCAAqC,CAAC,4BAA4B,CAAC,yBAAyB,aAAa,uCAAuC,CAAC,sCAAsC,CAAC,gCAAgC,CAAC,4BAA4B,CAAC,gBAAgB,qCAAqC,CAAC,sCAAsC,CAAC,mCAAmC,CAAC,+BAA+B,CAAC,qBAAqB,uCAAuC,CAAC,uCAAuC,CAAC,wCAAwC,CAAC,oCAAoC,CAAC,wBAAwB,qCAAqC,CAAC,uCAAuC,CAAC,2CAA2C,CAAC,uCAAuC,CAAC,cAAc,4BAA4B,CAAC,wBAAwB,CAAC,gBAAgB,8BAA8B,CAAC,0BAA0B,CAAC,sBAAsB,oCAAoC,CAAC,gCAAgC,CAAC,0BAA0B,gCAAgC,CAAC,6BAA6B,CAAC,oCAAoC,CAAC,wBAAwB,8BAA8B,CAAC,2BAA2B,CAAC,kCAAkC,CAAC,2BAA2B,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,4BAA4B,kCAAkC,CAAC,+BAA+B,CAAC,uCAAuC,CAAC,2BAA2B,kCAAkC,CAAC,sCAAsC,CAAC,sBAAsB,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,oBAAoB,+BAA+B,CAAC,4BAA4B,CAAC,8BAA8B,CAAC,uBAAuB,kCAAkC,CAAC,+BAA+B,CAAC,4BAA4B,CAAC,yBAAyB,oCAAoC,CAAC,iCAAiC,CAAC,8BAA8B,CAAC,wBAAwB,mCAAmC,CAAC,gCAAgC,CAAC,6BAA6B,CAAC,wBAAwB,kCAAkC,CAAC,kCAAkC,CAAC,sBAAsB,gCAAgC,CAAC,gCAAgC,CAAC,yBAAyB,mCAAmC,CAAC,8BAA8B,CAAC,0BAA0B,oCAAoC,CAAC,qCAAqC,CAAC,yBAAyB,uCAAuC,CAAC,oCAAoC,CAAC,0BAA0B,oCAAoC,CAAC,+BAA+B,CAAC,oBAAoB,kCAAkC,CAAC,yBAAyB,CAAC,qBAAqB,mCAAmC,CAAC,+BAA+B,CAAC,mBAAmB,iCAAiC,CAAC,6BAA6B,CAAC,sBAAsB,oCAAoC,CAAC,2BAA2B,CAAC,wBAAwB,sCAAsC,CAAC,6BAA6B,CAAC,uBAAuB,qCAAqC,CAAC,4BAA4B,CAAC,CAAC,yBAAyB,aAAa,uCAAuC,CAAC,sCAAsC,CAAC,gCAAgC,CAAC,4BAA4B,CAAC,gBAAgB,qCAAqC,CAAC,sCAAsC,CAAC,mCAAmC,CAAC,+BAA+B,CAAC,qBAAqB,uCAAuC,CAAC,uCAAuC,CAAC,wCAAwC,CAAC,oCAAoC,CAAC,wBAAwB,qCAAqC,CAAC,uCAAuC,CAAC,2CAA2C,CAAC,uCAAuC,CAAC,cAAc,4BAA4B,CAAC,wBAAwB,CAAC,gBAAgB,8BAA8B,CAAC,0BAA0B,CAAC,sBAAsB,oCAAoC,CAAC,gCAAgC,CAAC,0BAA0B,gCAAgC,CAAC,6BAA6B,CAAC,oCAAoC,CAAC,wBAAwB,8BAA8B,CAAC,2BAA2B,CAAC,kCAAkC,CAAC,2BAA2B,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,4BAA4B,kCAAkC,CAAC,+BAA+B,CAAC,uCAAuC,CAAC,2BAA2B,kCAAkC,CAAC,sCAAsC,CAAC,sBAAsB,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,oBAAoB,+BAA+B,CAAC,4BAA4B,CAAC,8BAA8B,CAAC,uBAAuB,kCAAkC,CAAC,+BAA+B,CAAC,4BAA4B,CAAC,yBAAyB,oCAAoC,CAAC,iCAAiC,CAAC,8BAA8B,CAAC,wBAAwB,mCAAmC,CAAC,gCAAgC,CAAC,6BAA6B,CAAC,wBAAwB,kCAAkC,CAAC,kCAAkC,CAAC,sBAAsB,gCAAgC,CAAC,gCAAgC,CAAC,yBAAyB,mCAAmC,CAAC,8BAA8B,CAAC,0BAA0B,oCAAoC,CAAC,qCAAqC,CAAC,yBAAyB,uCAAuC,CAAC,oCAAoC,CAAC,0BAA0B,oCAAoC,CAAC,+BAA+B,CAAC,oBAAoB,kCAAkC,CAAC,yBAAyB,CAAC,qBAAqB,mCAAmC,CAAC,+BAA+B,CAAC,mBAAmB,iCAAiC,CAAC,6BAA6B,CAAC,sBAAsB,oCAAoC,CAAC,2BAA2B,CAAC,wBAAwB,sCAAsC,CAAC,6BAA6B,CAAC,uBAAuB,qCAAqC,CAAC,4BAA4B,CAAC,CAAC,yBAAyB,aAAa,uCAAuC,CAAC,sCAAsC,CAAC,gCAAgC,CAAC,4BAA4B,CAAC,gBAAgB,qCAAqC,CAAC,sCAAsC,CAAC,mCAAmC,CAAC,+BAA+B,CAAC,qBAAqB,uCAAuC,CAAC,uCAAuC,CAAC,wCAAwC,CAAC,oCAAoC,CAAC,wBAAwB,qCAAqC,CAAC,uCAAuC,CAAC,2CAA2C,CAAC,uCAAuC,CAAC,cAAc,4BAA4B,CAAC,wBAAwB,CAAC,gBAAgB,8BAA8B,CAAC,0BAA0B,CAAC,sBAAsB,oCAAoC,CAAC,gCAAgC,CAAC,0BAA0B,gCAAgC,CAAC,6BAA6B,CAAC,oCAAoC,CAAC,wBAAwB,8BAA8B,CAAC,2BAA2B,CAAC,kCAAkC,CAAC,2BAA2B,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,4BAA4B,kCAAkC,CAAC,+BAA+B,CAAC,uCAAuC,CAAC,2BAA2B,kCAAkC,CAAC,sCAAsC,CAAC,sBAAsB,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,oBAAoB,+BAA+B,CAAC,4BAA4B,CAAC,8BAA8B,CAAC,uBAAuB,kCAAkC,CAAC,+BAA+B,CAAC,4BAA4B,CAAC,yBAAyB,oCAAoC,CAAC,iCAAiC,CAAC,8BAA8B,CAAC,wBAAwB,mCAAmC,CAAC,gCAAgC,CAAC,6BAA6B,CAAC,wBAAwB,kCAAkC,CAAC,kCAAkC,CAAC,sBAAsB,gCAAgC,CAAC,gCAAgC,CAAC,yBAAyB,mCAAmC,CAAC,8BAA8B,CAAC,0BAA0B,oCAAoC,CAAC,qCAAqC,CAAC,yBAAyB,uCAAuC,CAAC,oCAAoC,CAAC,0BAA0B,oCAAoC,CAAC,+BAA+B,CAAC,oBAAoB,kCAAkC,CAAC,yBAAyB,CAAC,qBAAqB,mCAAmC,CAAC,+BAA+B,CAAC,mBAAmB,iCAAiC,CAAC,6BAA6B,CAAC,sBAAsB,oCAAoC,CAAC,2BAA2B,CAAC,wBAAwB,sCAAsC,CAAC,6BAA6B,CAAC,uBAAuB,qCAAqC,CAAC,4BAA4B,CAAC,CAAC,0BAA0B,aAAa,uCAAuC,CAAC,sCAAsC,CAAC,gCAAgC,CAAC,4BAA4B,CAAC,gBAAgB,qCAAqC,CAAC,sCAAsC,CAAC,mCAAmC,CAAC,+BAA+B,CAAC,qBAAqB,uCAAuC,CAAC,uCAAuC,CAAC,wCAAwC,CAAC,oCAAoC,CAAC,wBAAwB,qCAAqC,CAAC,uCAAuC,CAAC,2CAA2C,CAAC,uCAAuC,CAAC,cAAc,4BAA4B,CAAC,wBAAwB,CAAC,gBAAgB,8BAA8B,CAAC,0BAA0B,CAAC,sBAAsB,oCAAoC,CAAC,gCAAgC,CAAC,0BAA0B,gCAAgC,CAAC,6BAA6B,CAAC,oCAAoC,CAAC,wBAAwB,8BAA8B,CAAC,2BAA2B,CAAC,kCAAkC,CAAC,2BAA2B,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,4BAA4B,kCAAkC,CAAC,+BAA+B,CAAC,uCAAuC,CAAC,2BAA2B,kCAAkC,CAAC,sCAAsC,CAAC,sBAAsB,iCAAiC,CAAC,8BAA8B,CAAC,gCAAgC,CAAC,oBAAoB,+BAA+B,CAAC,4BAA4B,CAAC,8BAA8B,CAAC,uBAAuB,kCAAkC,CAAC,+BAA+B,CAAC,4BAA4B,CAAC,yBAAyB,oCAAoC,CAAC,iCAAiC,CAAC,8BAA8B,CAAC,wBAAwB,mCAAmC,CAAC,gCAAgC,CAAC,6BAA6B,CAAC,wBAAwB,kCAAkC,CAAC,kCAAkC,CAAC,sBAAsB,gCAAgC,CAAC,gCAAgC,CAAC,yBAAyB,mCAAmC,CAAC,8BAA8B,CAAC,0BAA0B,oCAAoC,CAAC,qCAAqC,CAAC,yBAAyB,uCAAuC,CAAC,oCAAoC,CAAC,0BAA0B,oCAAoC,CAAC,+BAA+B,CAAC,oBAAoB,kCAAkC,CAAC,yBAAyB,CAAC,qBAAqB,mCAAmC,CAAC,+BAA+B,CAAC,mBAAmB,iCAAiC,CAAC,6BAA6B,CAAC,sBAAsB,oCAAoC,CAAC,2BAA2B,CAAC,wBAAwB,sCAAsC,CAAC,6BAA6B,CAAC,uBAAuB,qCAAqC,CAAC,4BAA4B,CAAC,CAAC,YAAY,oBAAoB,CAAC,aAAa,qBAAqB,CAAC,YAAY,oBAAoB,CAAC,yBAAyB,eAAe,oBAAoB,CAAC,gBAAgB,qBAAqB,CAAC,eAAe,oBAAoB,CAAC,CAAC,yBAAyB,eAAe,oBAAoB,CAAC,gBAAgB,qBAAqB,CAAC,eAAe,oBAAoB,CAAC,CAAC,yBAAyB,eAAe,oBAAoB,CAAC,gBAAgB,qBAAqB,CAAC,eAAe,oBAAoB,CAAC,CAAC,0BAA0B,eAAe,oBAAoB,CAAC,gBAAgB,qBAAqB,CAAC,eAAe,oBAAoB,CAAC,CAAC,iBAAiB,yBAAyB,CAAC,mBAAmB,2BAA2B,CAAC,mBAAmB,2BAA2B,CAAC,gBAAgB,wBAAwB,CAAC,iBAAiB,iCAAiC,CAAC,yBAAyB,CAAC,WAAW,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,2DAA2D,YAAY,uBAAuB,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,SAAS,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,QAAQ,CAAC,mDAAmD,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,cAAc,CAAC,MAAM,mBAAmB,CAAC,MAAM,mBAAmB,CAAC,MAAM,mBAAmB,CAAC,OAAO,oBAAoB,CAAC,MAAM,oBAAoB,CAAC,MAAM,oBAAoB,CAAC,MAAM,oBAAoB,CAAC,OAAO,qBAAqB,CAAC,QAAQ,wBAAwB,CAAC,QAAQ,yBAAyB,CAAC,KAAK,kBAAkB,CAAC,YAAY,sBAAsB,CAAC,YAAY,wBAAwB,CAAC,YAAY,yBAAyB,CAAC,YAAY,uBAAuB,CAAC,KAAK,uBAAuB,CAAC,YAAY,2BAA2B,CAAC,YAAY,6BAA6B,CAAC,YAAY,8BAA8B,CAAC,YAAY,4BAA4B,CAAC,KAAK,sBAAsB,CAAC,YAAY,0BAA0B,CAAC,YAAY,4BAA4B,CAAC,YAAY,6BAA6B,CAAC,YAAY,2BAA2B,CAAC,KAAK,qBAAqB,CAAC,YAAY,yBAAyB,CAAC,YAAY,2BAA2B,CAAC,YAAY,4BAA4B,CAAC,YAAY,0BAA0B,CAAC,KAAK,uBAAuB,CAAC,YAAY,2BAA2B,CAAC,YAAY,6BAA6B,CAAC,YAAY,8BAA8B,CAAC,YAAY,4BAA4B,CAAC,KAAK,qBAAqB,CAAC,YAAY,yBAAyB,CAAC,YAAY,2BAA2B,CAAC,YAAY,4BAA4B,CAAC,YAAY,0BAA0B,CAAC,KAAK,mBAAmB,CAAC,YAAY,uBAAuB,CAAC,YAAY,yBAAyB,CAAC,YAAY,0BAA0B,CAAC,YAAY,wBAAwB,CAAC,KAAK,wBAAwB,CAAC,YAAY,4BAA4B,CAAC,YAAY,8BAA8B,CAAC,YAAY,+BAA+B,CAAC,YAAY,6BAA6B,CAAC,KAAK,uBAAuB,CAAC,YAAY,2BAA2B,CAAC,YAAY,6BAA6B,CAAC,YAAY,8BAA8B,CAAC,YAAY,4BAA4B,CAAC,KAAK,sBAAsB,CAAC,YAAY,0BAA0B,CAAC,YAAY,4BAA4B,CAAC,YAAY,6BAA6B,CAAC,YAAY,2BAA2B,CAAC,KAAK,wBAAwB,CAAC,YAAY,4BAA4B,CAAC,YAAY,8BAA8B,CAAC,YAAY,+BAA+B,CAAC,YAAY,6BAA6B,CAAC,KAAK,sBAAsB,CAAC,YAAY,0BAA0B,CAAC,YAAY,4BAA4B,CAAC,YAAY,6BAA6B,CAAC,YAAY,2BAA2B,CAAC,QAAQ,qBAAqB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,0BAA0B,CAAC,yBAAyB,QAAQ,kBAAkB,CAAC,kBAAkB,sBAAsB,CAAC,kBAAkB,wBAAwB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,uBAAuB,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,QAAQ,qBAAqB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,0BAA0B,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,qBAAqB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,0BAA0B,CAAC,QAAQ,mBAAmB,CAAC,kBAAkB,uBAAuB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,wBAAwB,CAAC,QAAQ,wBAAwB,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,+BAA+B,CAAC,kBAAkB,6BAA6B,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,QAAQ,wBAAwB,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,+BAA+B,CAAC,kBAAkB,6BAA6B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,WAAW,qBAAqB,CAAC,wBAAwB,yBAAyB,CAAC,wBAAwB,2BAA2B,CAAC,wBAAwB,4BAA4B,CAAC,wBAAwB,0BAA0B,CAAC,CAAC,yBAAyB,QAAQ,kBAAkB,CAAC,kBAAkB,sBAAsB,CAAC,kBAAkB,wBAAwB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,uBAAuB,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,QAAQ,qBAAqB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,0BAA0B,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,qBAAqB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,0BAA0B,CAAC,QAAQ,mBAAmB,CAAC,kBAAkB,uBAAuB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,wBAAwB,CAAC,QAAQ,wBAAwB,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,+BAA+B,CAAC,kBAAkB,6BAA6B,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,QAAQ,wBAAwB,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,+BAA+B,CAAC,kBAAkB,6BAA6B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,WAAW,qBAAqB,CAAC,wBAAwB,yBAAyB,CAAC,wBAAwB,2BAA2B,CAAC,wBAAwB,4BAA4B,CAAC,wBAAwB,0BAA0B,CAAC,CAAC,yBAAyB,QAAQ,kBAAkB,CAAC,kBAAkB,sBAAsB,CAAC,kBAAkB,wBAAwB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,uBAAuB,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,QAAQ,qBAAqB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,0BAA0B,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,qBAAqB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,0BAA0B,CAAC,QAAQ,mBAAmB,CAAC,kBAAkB,uBAAuB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,wBAAwB,CAAC,QAAQ,wBAAwB,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,+BAA+B,CAAC,kBAAkB,6BAA6B,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,QAAQ,wBAAwB,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,+BAA+B,CAAC,kBAAkB,6BAA6B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,WAAW,qBAAqB,CAAC,wBAAwB,yBAAyB,CAAC,wBAAwB,2BAA2B,CAAC,wBAAwB,4BAA4B,CAAC,wBAAwB,0BAA0B,CAAC,CAAC,0BAA0B,QAAQ,kBAAkB,CAAC,kBAAkB,sBAAsB,CAAC,kBAAkB,wBAAwB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,uBAAuB,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,QAAQ,qBAAqB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,0BAA0B,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,qBAAqB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,0BAA0B,CAAC,QAAQ,mBAAmB,CAAC,kBAAkB,uBAAuB,CAAC,kBAAkB,yBAAyB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,wBAAwB,CAAC,QAAQ,wBAAwB,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,+BAA+B,CAAC,kBAAkB,6BAA6B,CAAC,QAAQ,uBAAuB,CAAC,kBAAkB,2BAA2B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,4BAA4B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,QAAQ,wBAAwB,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,8BAA8B,CAAC,kBAAkB,+BAA+B,CAAC,kBAAkB,6BAA6B,CAAC,QAAQ,sBAAsB,CAAC,kBAAkB,0BAA0B,CAAC,kBAAkB,4BAA4B,CAAC,kBAAkB,6BAA6B,CAAC,kBAAkB,2BAA2B,CAAC,WAAW,qBAAqB,CAAC,wBAAwB,yBAAyB,CAAC,wBAAwB,2BAA2B,CAAC,wBAAwB,4BAA4B,CAAC,wBAAwB,0BAA0B,CAAC,CAAC,cAAc,4BAA4B,CAAC,aAAa,4BAA4B,CAAC,eAAe,eAAe,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,WAAW,yBAAyB,CAAC,YAAY,0BAA0B,CAAC,aAAa,2BAA2B,CAAC,yBAAyB,cAAc,yBAAyB,CAAC,eAAe,0BAA0B,CAAC,gBAAgB,2BAA2B,CAAC,CAAC,yBAAyB,cAAc,yBAAyB,CAAC,eAAe,0BAA0B,CAAC,gBAAgB,2BAA2B,CAAC,CAAC,yBAAyB,cAAc,yBAAyB,CAAC,eAAe,0BAA0B,CAAC,gBAAgB,2BAA2B,CAAC,CAAC,0BAA0B,cAAc,yBAAyB,CAAC,eAAe,0BAA0B,CAAC,gBAAgB,2BAA2B,CAAC,CAAC,gBAAgB,kCAAkC,CAAC,gBAAgB,kCAAkC,CAAC,iBAAiB,mCAAmC,CAAC,mBAAmB,yBAAyB,CAAC,oBAAoB,yBAAyB,CAAC,kBAAkB,yBAAyB,CAAC,aAAa,2BAA2B,CAAC,YAAY,oBAAoB,CAAC,cAAc,uBAAuB,CAAC,0CAA0C,uBAAuB,CAAC,gBAAgB,uBAAuB,CAAC,8CAA8C,uBAAuB,CAAC,cAAc,uBAAuB,CAAC,0CAA0C,uBAAuB,CAAC,WAAW,uBAAuB,CAAC,oCAAoC,uBAAuB,CAAC,cAAc,uBAAuB,CAAC,0CAA0C,uBAAuB,CAAC,aAAa,uBAAuB,CAAC,wCAAwC,uBAAuB,CAAC,YAAY,uBAAuB,CAAC,sCAAsC,uBAAuB,CAAC,WAAW,uBAAuB,CAAC,oCAAoC,uBAAuB,CAAC,YAAY,uBAAuB,CAAC,WAAW,UAAU,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,QAAQ,CAAC,SAAS,4BAA4B,CAAC,WAAW,2BAA2B,CAAC,aAAa,mBAAmB,0BAA0B,CAAC,yBAAyB,CAAC,YAAY,yBAAyB,CAAC,mBAAmB,4BAA4B,CAAC,IAAI,8BAA8B,CAAC,eAAe,qBAAqB,CAAC,uBAAuB,CAAC,MAAM,0BAA0B,CAAC,OAAO,uBAAuB,CAAC,QAAQ,SAAS,CAAC,QAAQ,CAAC,MAAM,sBAAsB,CAAC,MAAM,OAAO,CAAC,KAAK,yBAAyB,CAAC,WAAW,yBAAyB,CAAC,QAAQ,YAAY,CAAC,OAAO,qBAAqB,CAAC,OAAO,kCAAkC,CAAC,oBAAoB,+BAA+B,CAAC,sCAAsC,+BAA+B,CAAC;AAC3u6I,4CAA4C\",\"sourcesContent\":[\"/*!\\n * Bootstrap v4.0.0 (https://getbootstrap.com)\\n * Copyright 2011-2018 The Bootstrap Authors\\n * Copyright 2011-2018 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\\\"-1\\\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\\\"\\\\2014 \\\\00A0\\\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\\\"\\\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\\\"\\\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\\\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\\\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\\\"1\\\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\\\"Browse\\\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\\\"Browse\\\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\\\"\\\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\\\"/\\\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\\\"\\\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\\\")}.carousel-control-next-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\\\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\\\"\\\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\\\"\\\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\\\" (\\\" attr(title) \\\")\\\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\\n/*# sourceMappingURL=bootstrap.min.css.map */\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.history-content,\n.history-content .sub-content,\n.history-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.history-content .filter .internal {\n margin: 4px 8px;\n}\n\n.history-content .filter {\n}\n\n.history-content .filter input, .history-content .filter label {\n vertical-align: top;\n display: inline-block;\n}\n\n\n.history-content .graph-attr {\n\tdisplay: inline-block;\n\tmargin-right: 5px;\n}\n\n.history-content .graph-attr input, .history-content .graph-attr label {\n vertical-align: middle;\n display: inline-block;\n}\n\n.history-content .select-style {\n width: 170px;\n margin-right: 5px;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/history.css\"],\"names\":[],\"mappings\":\"AAEA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,eAAe;AACnB;;AAEA;AACA;;AAEA;IACI,mBAAmB;IACnB,qBAAqB;AACzB;;;AAGA;CACC,qBAAqB;CACrB,iBAAiB;AAClB;;AAEA;IACI,sBAAsB;IACtB,qBAAqB;AACzB;;AAEA;IACI,YAAY;IACZ,iBAAiB;AACrB\",\"sourcesContent\":[\"@import '~@noworkflow/history/style/index.css';\\n\\n.history-content,\\n.history-content .sub-content,\\n.history-content .sub-content > div {\\n overflow: hidden !important;\\n}\\n\\n.history-content .filter .internal {\\n margin: 4px 8px;\\n}\\n\\n.history-content .filter {\\n}\\n\\n.history-content .filter input, .history-content .filter label {\\n vertical-align: top;\\n display: inline-block;\\n}\\n\\n\\n.history-content .graph-attr {\\n\\tdisplay: inline-block;\\n\\tmargin-right: 5px;\\n}\\n\\n.history-content .graph-attr input, .history-content .graph-attr label {\\n vertical-align: middle;\\n display: inline-block;\\n}\\n\\n.history-content .select-style {\\n width: 170px;\\n margin-right: 5px;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../utils/style/shared.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../node_modules/css-loader/dist/cjs.js!../../trial/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../node_modules/css-loader/dist/cjs.js!./panel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../node_modules/css-loader/dist/cjs.js!./history.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../node_modules/css-loader/dist/cjs.js!./trial.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `body {\n font-family: \"Verdana\", \"Geneva\", \"sans-serif\";\n}\n\n.loading {\n font-size: 40px;\n}\n\n/* Link Button */\n\na.link-button {\n text-decoration: none;\n display:inline-block;\n padding: 4px 0;\n /*padding: 4px 12px;*/\n margin-bottom: 0;\n font-size: 14px;\n width: 100px;\n line-height: 15px;\n color: #333;\n text-align: center;\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\n vertical-align: middle;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\n background-repeat: repeat-x;\n border: 1px solid #ccc;\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\n border-bottom-color: #b3b3b3;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n}\n\na.link-button:active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n background-color:#e0e0e0;\n}\n\n.hide-toolbar {\n overflow: hidden;\n max-height: 0;\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 0;\n margin-bottom: 0;\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.show-toolbar {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n /*max-height: 1000px;\n overflow: hidden;*/\n}\n\n.visible {\n border-bottom: 1px solid black;\n}\n\n.info-filter input, .info-filter select {\n display: block;\n width: 250px;\n margin: 7px 0;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/index.css\"],\"names\":[],\"mappings\":\"AAQA;EACE,8CAA8C;AAChD;;AAEA;EACE,eAAe;AACjB;;AAEA,gBAAgB;;AAEhB;EACE,qBAAqB;EACrB,oBAAoB;EACpB,cAAc;CACf,qBAAqB;EACpB,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,kBAAkB;EAClB,6CAA6C;EAC7C,sBAAsB;EACtB,eAAe;EACf,yBAAyB;EACzB,wDAAwD;EACxD,4EAA4E;EAC5E,2DAA2D;EAC3D,sDAAsD;EACtD,yDAAyD;EACzD,2BAA2B;EAC3B,sBAAsB;EACtB,qCAAqC;EACrC,8DAA8D;EAC9D,4BAA4B;EAC5B,oHAAoH;EACpH,iEAAiE;EACjE,kFAAkF;EAClF,+EAA+E;EAC/E,0EAA0E;AAC5E;;AAEA;EACE,sBAAsB;EACtB,UAAU;EACV,+EAA+E;EAC/E,4EAA4E;EAC5E,uEAAuE;EACvE,wBAAwB;AAC1B;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,2DAA2D;IAC3D,8DAA8D;IAC9D,yDAAyD;IACzD,sDAAsD;AAC1D;;AAEA;IACI,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,wCAAwC;IACxC,2CAA2C;IAC3C,sCAAsC;IACtC,mCAAmC;IACnC;sBACkB;AACtB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;AACf\",\"sourcesContent\":[\"@import '~@noworkflow/utils/style/shared.css';\\n@import '~@noworkflow/history/style/index.css';\\n@import '~@noworkflow/trial/style/index.css';\\n@import './panel.css';\\n@import './history.css';\\n@import './trial.css';\\n\\n\\nbody {\\n font-family: \\\"Verdana\\\", \\\"Geneva\\\", \\\"sans-serif\\\";\\n}\\n\\n.loading {\\n font-size: 40px;\\n}\\n\\n/* Link Button */\\n\\na.link-button {\\n text-decoration: none;\\n display:inline-block;\\n padding: 4px 0;\\n /*padding: 4px 12px;*/\\n margin-bottom: 0;\\n font-size: 14px;\\n width: 100px;\\n line-height: 15px;\\n color: #333;\\n text-align: center;\\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\\n vertical-align: middle;\\n cursor: pointer;\\n background-color: #f5f5f5;\\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\\n background-repeat: repeat-x;\\n border: 1px solid #ccc;\\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\\n border-bottom-color: #b3b3b3;\\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n}\\n\\na.link-button:active {\\n background-image: none;\\n outline: 0;\\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n background-color:#e0e0e0;\\n}\\n\\n.hide-toolbar {\\n overflow: hidden;\\n max-height: 0;\\n padding-top: 0;\\n padding-bottom: 0;\\n margin-top: 0;\\n margin-bottom: 0;\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n}\\n\\n.show-toolbar {\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: ease-in;\\n -webkit-transition-timing-function: ease-in;\\n -o-transition-timing-function: ease-in;\\n transition-timing-function: ease-in;\\n /*max-height: 1000px;\\n overflow: hidden;*/\\n}\\n\\n.visible {\\n border-bottom: 1px solid black;\\n}\\n\\n.info-filter input, .info-filter select {\\n display: block;\\n width: 250px;\\n margin: 7px 0;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../../node_modules/@lumino/default-theme/style/index.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.p-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.p-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #C0C0C0;\n}\n\n\n.p-TabBar-tab {\n padding: 0px 10px;\n background: #E5E5E5;\n border: 1px solid #C0C0C0;\n border-bottom: none;\n font: 12px Helvetica, Arial, sans-serif;\n flex: 0 1 180px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n background: white;\n}\n\n\n.p-TabBar-tab:hover:not(.p-mod-current) {\n background: #F0F0F0;\n}\n\n\n.p-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n\n.p-TabBar-tabIcon,\n.p-TabBar-tabLabel,\n.p-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\n content: '\\\\f00d';\n font-family: FontAwesome;\n}\n\n\n.p-TabBar-tab.p-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n transform: translateX(-40%) translateY(-58%);\n}\n\n.p-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n\n.content {\n min-width: 50px;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n padding: 8px;\n border: 1px solid #C0C0C0;\n border-top: none;\n background: white;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.content > div {\n flex: 1 1 auto;\n overflow: auto;\n}\n\nbody {\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n}\n\n#main {\n flex: 1 1 auto;\n}\n\n\n.side-info {\n margin: 5px;\n font-size: 14px;\n}\n\n.side-info .main h1 {\n margin: 0;\n}\n\n.side-info .main h3 {\n margin: 0 0 8px 0;\n}\n\n.side-info .attr {\n display: block;\n margin: 3px 0;\n}\n\n.side-info .desc {\n font-weight: bold;\n}\n\n.side-info .fold {\n margin-top: 15px;\n font-size: 2em;\n}\n\n.side-info .fold:hover {\n cursor: pointer;\n}\n\n.side-info .fold span {\n padding-left: 7px;\n}\n\n.side-info .show-all {\n color: rgb(50, 38, 41);\n float: right;\n margin-right: 10px;\n}\n\n.side-info ul.mod-list,\n.side-info ul.env-list,\n.side-info ul.fac-list {\n padding: 0;\n margin: 0;\n list-style-type: none;\n}\n\n.side-info ul.mod-list li,\n.side-info ul.fac-list li {\n border-left: 3px solid black;\n margin: 6px 4px;\n padding: 1px 3px;\n}\n\n.side-info ul.env-list li {\n margin: 3px;\n font-size: 0.8em;\n}\n\n.side-info ul.env-list li .key {\n font-weight: bold;\n}\n\n.side-info ul.mod-list li .version,\n.side-info ul.fac-list li .mode,\n.side-info ul.fac-list li .buffering {\n float: right;\n margin-left: 20px;\n}\n\n.side-info .clear {\n clear: both;\n}\n\n.hash {\n font-size: 12px;\n color: #666;\n}\n\n.dbefore {\n color: red !important;\n}\n\n.dafter {\n color: green !important;\n}\n\n.dbefore::before {\n color: red !important;\n content: ' - ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.dafter::before {\n color: green !important;\n content: ' + ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.libefore {\n border-left: 3px solid red !important;\n color: red !important;\n}\n\n.liafter {\n border-left: 3px solid green !important;\n color: green !important;\n}\n\n.connection-error:hover {\n cursor: pointer;\n}\n\n.error-text {\n font-size: 15px;\n margin-left: 3px;\n vertical-align: middle;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/panel.css\"],\"names\":[],\"mappings\":\";AAIA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;;AAGA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,uCAAuC;EACvC,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;;AAGA;EACE,iBAAiB;AACnB;;;AAGA;EACE,mBAAmB;AACrB;;;AAGA;EACE,cAAc;AAChB;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;;AAGA;;;EAGE,qBAAqB;AACvB;;;AAGA;EACE,gBAAgB;AAClB;;;AAGA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;EAC1C,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,0CAA0C;AAC5C;;AAEA;EACE,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,SAAS;EACT,UAAU;EACV,gBAAgB;;AAElB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;AACpB;;AAEA;;;EAGE,UAAU;EACV,SAAS;EACT,qBAAqB;AACvB;;AAEA;;EAEE,4BAA4B;EAC5B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;EAGE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,WAAW;AACb;;AAEA;IACI,eAAe;IACf,WAAW;AACf;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,uBAAuB;EACvB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,qCAAqC;EACrC,qBAAqB;AACvB;;AAEA;EACE,uCAAuC;EACvC,uBAAuB;AACzB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,sBAAsB;AACxB\",\"sourcesContent\":[\"\\n@import '~@lumino/default-theme/style/index.css';\\n\\n\\n.p-TabBar {\\n min-height: 24px;\\n max-height: 24px;\\n}\\n\\n.p-TabBar-content {\\n min-width: 0;\\n min-height: 0;\\n align-items: flex-end;\\n border-bottom: 1px solid #C0C0C0;\\n}\\n\\n\\n.p-TabBar-tab {\\n padding: 0px 10px;\\n background: #E5E5E5;\\n border: 1px solid #C0C0C0;\\n border-bottom: none;\\n font: 12px Helvetica, Arial, sans-serif;\\n flex: 0 1 180px;\\n min-height: 20px;\\n max-height: 20px;\\n min-width: 35px;\\n margin-left: -1px;\\n line-height: 20px;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-current {\\n background: white;\\n}\\n\\n\\n.p-TabBar-tab:hover:not(.p-mod-current) {\\n background: #F0F0F0;\\n}\\n\\n\\n.p-TabBar-tab:first-child {\\n margin-left: 0;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-current {\\n min-height: 23px;\\n max-height: 23px;\\n transform: translateY(1px);\\n}\\n\\n\\n.p-TabBar-tabIcon,\\n.p-TabBar-tabLabel,\\n.p-TabBar-tabCloseIcon {\\n display: inline-block;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\\n margin-left: 4px;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\\n content: '\\\\f00d';\\n font-family: FontAwesome;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-drag-image {\\n min-height: 23px;\\n max-height: 23px;\\n min-width: 125px;\\n border: none;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\\n transform: translateX(-40%) translateY(-58%);\\n}\\n\\n.p-DockPanel-overlay {\\n background: rgba(255, 255, 255, 0.6);\\n border: 1px dashed black;\\n transition-property: top, left, right, bottom;\\n transition-duration: 150ms;\\n transition-timing-function: ease;\\n}\\n\\n.content {\\n min-width: 50px;\\n min-height: 50px;\\n display: flex;\\n flex-direction: column;\\n padding: 8px;\\n border: 1px solid #C0C0C0;\\n border-top: none;\\n background: white;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\\n}\\n\\n.content > div {\\n flex: 1 1 auto;\\n overflow: auto;\\n}\\n\\nbody {\\n display: flex;\\n flex-direction: column;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n margin: 0;\\n padding: 0;\\n overflow: hidden;\\n\\n}\\n\\n#main {\\n flex: 1 1 auto;\\n}\\n\\n\\n.side-info {\\n margin: 5px;\\n font-size: 14px;\\n}\\n\\n.side-info .main h1 {\\n margin: 0;\\n}\\n\\n.side-info .main h3 {\\n margin: 0 0 8px 0;\\n}\\n\\n.side-info .attr {\\n display: block;\\n margin: 3px 0;\\n}\\n\\n.side-info .desc {\\n font-weight: bold;\\n}\\n\\n.side-info .fold {\\n margin-top: 15px;\\n font-size: 2em;\\n}\\n\\n.side-info .fold:hover {\\n cursor: pointer;\\n}\\n\\n.side-info .fold span {\\n padding-left: 7px;\\n}\\n\\n.side-info .show-all {\\n color: rgb(50, 38, 41);\\n float: right;\\n margin-right: 10px;\\n}\\n\\n.side-info ul.mod-list,\\n.side-info ul.env-list,\\n.side-info ul.fac-list {\\n padding: 0;\\n margin: 0;\\n list-style-type: none;\\n}\\n\\n.side-info ul.mod-list li,\\n.side-info ul.fac-list li {\\n border-left: 3px solid black;\\n margin: 6px 4px;\\n padding: 1px 3px;\\n}\\n\\n.side-info ul.env-list li {\\n margin: 3px;\\n font-size: 0.8em;\\n}\\n\\n.side-info ul.env-list li .key {\\n font-weight: bold;\\n}\\n\\n.side-info ul.mod-list li .version,\\n.side-info ul.fac-list li .mode,\\n.side-info ul.fac-list li .buffering {\\n float: right;\\n margin-left: 20px;\\n}\\n\\n.side-info .clear {\\n clear: both;\\n}\\n\\n.hash {\\n font-size: 12px;\\n color: #666;\\n}\\n\\n.dbefore {\\n color: red !important;\\n}\\n\\n.dafter {\\n color: green !important;\\n}\\n\\n.dbefore::before {\\n color: red !important;\\n content: ' - ';\\n font-family: \\\"Courier New\\\", Courier, monospace;\\n}\\n\\n.dafter::before {\\n color: green !important;\\n content: ' + ';\\n font-family: \\\"Courier New\\\", Courier, monospace;\\n}\\n\\n.libefore {\\n border-left: 3px solid red !important;\\n color: red !important;\\n}\\n\\n.liafter {\\n border-left: 3px solid green !important;\\n color: green !important;\\n}\\n\\n.connection-error:hover {\\n cursor: pointer;\\n}\\n\\n.error-text {\\n font-size: 15px;\\n margin-left: 3px;\\n vertical-align: middle;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trial-content,\n.trial-content .sub-content,\n.trial-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.trial-content .graphselector .graph-attr:first-child label {\n margin-right: 17px;\n}\n\n.trial-content .graphselector {\n width: 100%;\n padding-left: 8px;\n}\n\n.trial-content .graphselector .use-cache {\n margin-top: 10px;\n margin-left: 0px;\n}\n\n.trial-content .graphselector a.link-button {\n margin-top: 10px;\n width: 273px;\n}\n\n.trial-content .toggle-label {\n margin-right: 5px;\n}\n\n.graphselector > div:first-child {\n margin-top: 8px;\n}\n\n.graphselector > a:last-child {\n margin-bottom: 8px;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/trial.css\"],\"names\":[],\"mappings\":\"AAAA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,YAAY;AAChB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,kBAAkB;AACtB\",\"sourcesContent\":[\".trial-content,\\n.trial-content .sub-content,\\n.trial-content .sub-content > div {\\n overflow: hidden !important;\\n}\\n\\n.trial-content .graphselector .graph-attr:first-child label {\\n margin-right: 17px;\\n}\\n\\n.trial-content .graphselector {\\n width: 100%;\\n padding-left: 8px;\\n}\\n\\n.trial-content .graphselector .use-cache {\\n margin-top: 10px;\\n margin-left: 0px;\\n}\\n\\n.trial-content .graphselector a.link-button {\\n margin-top: 10px;\\n width: 273px;\\n}\\n\\n.trial-content .toggle-label {\\n margin-right: 5px;\\n}\\n\\n.graphselector > div:first-child {\\n margin-top: 8px;\\n}\\n\\n.graphselector > a:last-child {\\n margin-bottom: 8px;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trial-toolbar {\n margin: 5px;\n float: left;\n overflow: none;\n width: 375px;\n height: 30px;\n z-index: 3;\n position: absolute;\n}\n\n.trial-toolbar input {\n height: 30px;\n}\n\n.trial-toolbar input[type=checkbox] {\n display: none\n}\n\n.trial-toolbar label, .trial-toolbar a {\n margin-right: 8px;\n margin-top: 8px;\n}\n\n.trial-toolbar input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.trial-toolbar input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.trial-toolbar a.toollink,\n.trial-toolbar a.toollink:link,\n.trial-toolbar a.toollink:visited {\n color: black;\n}\n\n.trial-toolbar a.toollink:active {\n color: blue;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../trial/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,WAAW;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\".trial-toolbar {\\n margin: 5px;\\n float: left;\\n overflow: none;\\n width: 375px;\\n height: 30px;\\n z-index: 3;\\n position: absolute;\\n}\\n\\n.trial-toolbar input {\\n height: 30px;\\n}\\n\\n.trial-toolbar input[type=checkbox] {\\n display: none\\n}\\n\\n.trial-toolbar label, .trial-toolbar a {\\n margin-right: 8px;\\n margin-top: 8px;\\n}\\n\\n.trial-toolbar input[type=checkbox] + label {\\n display:inline-block;\\n color: black;\\n cursor: pointer;\\n}\\n\\n.trial-toolbar input[type=checkbox]:checked + label {\\n color: blue;\\n}\\n\\n.trial-toolbar a.toollink,\\n.trial-toolbar a.toollink:link,\\n.trial-toolbar a.toollink:visited {\\n color: black;\\n}\\n\\n.trial-toolbar a.toollink:active {\\n color: blue;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `div.now-tooltip {\n position: absolute;\n left: 1px;\n right: 1px;\n max-height: 200px;\n max-width: 400px;\n overflow: auto;\n padding: 5px;\n padding-bottom: 10px;\n font: 12px sans-serif;\n background: #DDD;\n border: 0px;\n border-radius: 8px;\n z-index: 2000;\n}\n\n.now-tooltip.hidden {\n display: none;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./../utils/style/shared.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,kBAAkB;IAClB,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,aAAa;AACjB;;AAEA;IACI,aAAa;AACjB\",\"sourcesContent\":[\"div.now-tooltip {\\n position: absolute;\\n left: 1px;\\n right: 1px;\\n max-height: 200px;\\n max-width: 400px;\\n overflow: auto;\\n padding: 5px;\\n padding-bottom: 10px;\\n font: 12px sans-serif;\\n background: #DDD;\\n border: 0px;\\n border-radius: 8px;\\n z-index: 2000;\\n}\\n\\n.now-tooltip.hidden {\\n display: none;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n options = {};\n }\n if (!url) {\n return url;\n }\n url = String(url.__esModule ? url.default : url);\n\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n if (options.hash) {\n url += options.hash;\n }\n\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n return url;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n export default content && content.locals ? content.locals : undefined;\n","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TrialGraph = void 0;\nrequire(\"d3-transition\");\nconst d3_color_1 = require(\"d3-color\");\nconst d3_hierarchy_1 = require(\"d3-hierarchy\");\nconst d3_selection_1 = require(\"d3-selection\");\nconst d3_zoom_1 = require(\"d3-zoom\");\nconst fs = require(\"file-saver\");\nconst utils_1 = require(\"@noworkflow/utils\");\nclass TrialGraph {\n constructor(graphId, div, config = {}, showDiffFunction, nowVisPanel) {\n if (showDiffFunction && nowVisPanel) {\n this.showDiffFunction = showDiffFunction;\n this.nowVisPanel = nowVisPanel;\n }\n this.i = 0;\n let defaultConfig = {\n customSize: function (g) {\n return [\n g.config.width,\n g.config.height,\n ];\n },\n customMouseOver: (g, d) => false,\n customMouseOut: (g, d) => false,\n customForm: (g, form) => null,\n customLoadTooltip: (g, div, text, trialid, aid) => null,\n duration: 750,\n top: 50,\n right: 30,\n bottom: 80,\n left: 30,\n width: 900,\n height: 500,\n useTooltip: false,\n fontSize: 10,\n labelFontSize: 10,\n nodeSizeX: 47,\n nodeSizeY: 100,\n queryTooltip: false\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.graphId = graphId;\n this.zoom = (0, d3_zoom_1.zoom)()\n .on(\"zoom\", (event) => {\n return this.zoomFunction(event);\n })\n .on(\"start\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"move\"))\n .on(\"end\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"auto\"))\n .wheelDelta(function () {\n const e = event;\n return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000;\n });\n this.div = (0, d3_selection_1.select)(div);\n this.form = this.div\n .append(\"form\")\n .classed(\"trial-toolbar\", true);\n this.svg = (0, d3_selection_1.select)(div)\n .append(\"div\")\n .append(\"svg\")\n .attr(\"width\", this.config.width)\n .attr(\"height\", this.config.height)\n .call(this.zoom);\n this.createMarker('end', 'enormal', 'black');\n this.createMarker('endbefore', 'ebefore', 'red');\n this.createMarker('endafter', 'eafter', 'green');\n this.g = this.svg.append(\"g\")\n .attr(\"id\", this._graphId())\n .attr(\"transform\", \"translate(0,0)\")\n .classed('TrialGraph', true);\n this.tree = (0, d3_hierarchy_1.tree)()\n .nodeSize([\n this.config.nodeSizeX,\n this.config.nodeSizeY\n ]);\n // Tooltip\n this.tooltipDiv = (0, d3_selection_1.select)(\"body\").append(\"div\")\n .attr(\"class\", \"now-tooltip now-trial-tooltip\")\n .style(\"opacity\", 0)\n .on(\"mouseout\", () => {\n this.closeTooltip();\n });\n // Zoom\n this.svg\n .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top));\n this.activationStorage = {};\n }\n init(data, t1, t2) {\n this.t1 = t1;\n this.t2 = t2;\n // **Toolbar**\n this.createToolbar(this.form);\n // **Graph**\n this.minDuration = data.min_duration;\n this.maxDuration = data.max_duration;\n this.totalDuration = {};\n this.totalDuration[t1] = this.maxDuration[t1] - this.minDuration[t1];\n this.totalDuration[t2] = this.maxDuration[t2] - this.minDuration[t2];\n this.maxTotalDuration = Math.max(this.totalDuration[t1], this.totalDuration[t2]);\n this.colors = data.colors;\n if (!data.root)\n return;\n this.root = (0, d3_hierarchy_1.hierarchy)(data.root, function (d) { return d.children; });\n this.root.x0 = 0;\n this.root.y0 = (this.config.width) / 2;\n this.alledges = data.edges;\n this.update(this.root);\n }\n createToolbar(form) {\n let self = this;\n form = form.append(\"div\")\n .classed(\"buttons buttonsGraph\", true);\n this.config.customForm(this, form);\n // Reset zoom\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"trial-\" + this.graphId + \"-restore-zoom\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Restore zoom\")\n .on(\"click\", () => this.restorePosition())\n .append(\"i\")\n .classed(\"fa fa-eye\", true);\n // Toggle Tooltips\n let tooltipsToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-tooltips\")\n .attr(\"value\", \"show\")\n .property(\"checked\", this.config.useTooltip)\n .on(\"change\", () => {\n this.closeTooltip();\n this.config.useTooltip = tooltipsToggle.property(\"checked\");\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"title\", \"Show tooltips on mouse hover\")\n .append(\"i\")\n .classed(\"fa fa-comment\", true);\n // Download SVG\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"trial-\" + this.graphId + \"-download\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Download graph SVG\")\n .on(\"click\", () => {\n this.download();\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n // Set Font Size\n let fontToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-fonts\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = fontToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n fontSize.style(\"display\", display);\n labelFontSize.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"title\", \"Set font size\")\n .append(\"i\")\n .classed(\"fa fa-font\", true);\n let fontSize = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.fontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node font size\")\n .on(\"change\", () => {\n this.config.fontSize = fontSize.property(\"value\");\n this.svg.selectAll(\".node text\").attr(\"font-size\", this.config.fontSize);\n });\n let labelFontSize = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.labelFontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Arrow font size\")\n .on(\"change\", () => {\n this.config.labelFontSize = labelFontSize.property(\"value\");\n this.svg.selectAll(\"text.label_text\").attr(\"font-size\", this.config.labelFontSize);\n });\n // Set distances\n let setDistances = function () {\n self.config.nodeSizeX = distanceX.property(\"value\");\n self.config.nodeSizeY = distanceY.property(\"value\");\n self.wrapText();\n self.tree\n .nodeSize([\n self.config.nodeSizeX,\n self.config.nodeSizeY\n ]);\n self.update(self.root);\n };\n // Set Distance X\n let distanceXToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-distance-x\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-distance-x\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = distanceXToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n distanceX.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-distance-x\")\n .attr(\"title\", \"Set horizontal distance\")\n .append(\"i\")\n .classed(\"fa fa-arrows-h\", true);\n let distanceX = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.nodeSizeX)\n .style(\"width\", \"65px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node horizontal distance\")\n .on(\"change\", setDistances);\n // Set Distance Y\n let distanceYToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-distance-y\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-distance-y\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = distanceYToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n distanceY.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-distance-y\")\n .attr(\"title\", \"Set vertical distance\")\n .append(\"i\")\n .classed(\"fa fa-arrows-v\", true);\n let distanceY = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.nodeSizeY)\n .style(\"width\", \"65px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node vertical distance\")\n .on(\"change\", setDistances);\n // Submit\n form.append(\"input\")\n .attr(\"type\", \"submit\")\n .attr(\"name\", \"prevent-enter\")\n .attr(\"onclick\", \"return false;\")\n .style(\"display\", \"none\");\n }\n load(data, t1, t2) {\n this.init(data, t1, t2);\n this.updateWindow();\n }\n restorePosition() {\n this.wrapText();\n this.svg\n .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top));\n }\n updateWindow() {\n let size = this.config.customSize(this);\n this.config.width = size[0];\n this.config.height = size[1];\n this.svg\n .attr(\"width\", size[0])\n .attr(\"height\", size[1]);\n }\n update(source) {\n let treeData = this.tree(this.root);\n this.nodes = treeData.descendants();\n var node = this.g.selectAll('g.node')\n .data(this.nodes, (d) => { return d.id || (d.id = ++this.i); });\n let validNodes = {};\n this.nodes.forEach((node) => {\n validNodes[node.data.index] = node;\n });\n var edges = this.alledges.filter((edge) => {\n let source = validNodes[edge.source];\n let target = validNodes[edge.target];\n if (source == undefined || target == undefined) {\n return false;\n }\n return true;\n }).map((edge) => {\n let source = validNodes[edge.source];\n let target = validNodes[edge.target];\n var copy = Object.assign({}, edge);\n copy.id = edge.source + \"-\" + edge.target;\n copy.source = source;\n copy.target = target;\n return copy;\n });\n this.updateNodes(source, node);\n this.updateLinks(source, edges);\n this.updateLinkLabels(edges);\n // Store old positions for transition\n this.nodes.forEach(function (d, i) {\n d.x0 = d.x;\n d.y0 = d.y;\n });\n this.wrapText();\n }\n download(name) {\n var isFileSaverSupported = false;\n try {\n isFileSaverSupported = !!new Blob();\n }\n catch (e) {\n alert(\"blob not supported\");\n }\n name = (name === undefined) ? \"trial.svg\" : name;\n let gnode = this.g.node();\n var bbox = gnode.getBBox();\n var width = this.svg.attr(\"width\"), height = this.svg.attr(\"height\");\n this.g.attr(\"transform\", \"translate(\" + (-bbox.x + 5) + \", \" + (-bbox.y + 5) + \")\");\n let svgNode = this.svg\n .attr(\"title\", \"Trial\")\n .attr(\"version\", 1.1)\n .attr(\"width\", bbox.width + 10)\n .attr(\"height\", bbox.height + 10)\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node();\n var html = svgNode.parentNode.innerHTML;\n html = ' 1 || activations[trial_ids[1]].length > 1);\n let modal;\n let modalBody;\n let button;\n if (showModal) {\n modal = (0, d3_selection_1.select)(document.getElementById(\"main\"))\n .append(\"div\").classed(\"modal fade show\", true)\n .attr(\"id\", \"functionDiffModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"functionDiffModalLabel\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"false\")\n .style(\"display\", \"block\");\n let modalDialog = modal.append(\"div\").classed(\"modal-dialog\", true).attr(\"role\", \"document\");\n let modalContent = modalDialog.append(\"div\").classed(\"modal-content\", true);\n let modalHeader = modalContent.append(\"div\").classed(\"modal-header\", true);\n modalHeader.append(\"h5\").classed(\"modal-title\", true).attr(\"id\", \"functionDiffModalLabel\").text(\"Select a function activation: \");\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"data-dismiss\", \"modal\").attr(\"aria-label\", \"Close\")\n .append(\"span\").attr(\"aria-hidden\", \"true\").html(\"×\").on(\"click\", () => modal.remove());\n modalBody = modalContent.append(\"div\").classed(\"modal-body\", true);\n modalBody.append(\"p\").text(\"This function was called multipled times. Select the activations you want to see their diff\").style(\"font-weight\", \"bold\");\n button = modalContent.append(\"div\").classed(\"modal-footer\", true).append(\"button\").classed(\"btn btn-primary\", true).text(\"Confirm\");\n }\n let compareFunctionCallsUrl = \"commands/diff\";\n let windowLabel = \"Diff\";\n for (let i = 0; i < trial_ids.length; i++) {\n let trial = trial_ids[i];\n if (showModal) {\n let trialNumber = i == 0 ? \"first\" : \"second\";\n modalBody.append(\"span\").text(\"Select the \" + trialNumber + \" trial activation: \");\n let select = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"functionTrial\" + trial).attr(\"id\", \"functionTrial\" + trial);\n for (let activation in activations[trial]) {\n fetch(\"/diff/getFunctionActivationArguments/\" + trial + \"/\" + activations[trial][activation], {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n select.append(\"option\").attr(\"value\", activations[trial][activation]).text(activations[trial][activation] + \" params: \" + json.function_params.toString());\n });\n });\n }\n modalBody.append(\"br\");\n }\n else {\n if (compareFunctionCallsUrl.length > 0)\n compareFunctionCallsUrl += \"/\";\n compareFunctionCallsUrl += trial + \"/\";\n compareFunctionCallsUrl += activations[trial];\n windowLabel += \" trial \" + trial + \" activation_id \" + activations[trial];\n }\n }\n if (showModal) {\n button === null || button === void 0 ? void 0 : button.on(\"click\", () => {\n let firstTrialActivation = document.getElementById(\"functionTrial\" + trial_ids[0]).selectedOptions[0].value;\n let secondTrialActivation = document.getElementById(\"functionTrial\" + trial_ids[1]).selectedOptions[0].value;\n compareFunctionCallsUrl += \"/\" + trial_ids[0] + \"/\" + firstTrialActivation + \"/\" + trial_ids[1] + \"/\" + secondTrialActivation;\n windowLabel += \" trial \" + trial_ids[0] + \" activation_id \" + firstTrialActivation + \" trial \" + trial_ids[1] + \" activation_id \" + secondTrialActivation;\n makeRequest(this.showDiffFunction, this.nowVisPanel);\n modal.remove();\n });\n }\n else {\n makeRequest(this.showDiffFunction, this.nowVisPanel);\n }\n function makeRequest(showDiffFunction, nowVisPanel) {\n fetch(compareFunctionCallsUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n if (showDiffFunction)\n showDiffFunction(json, windowLabel, nowVisPanel);\n });\n });\n }\n }\n closeTooltip() {\n this.tooltipDiv.transition()\n .duration(500)\n .style(\"opacity\", 0);\n this.tooltipDiv.classed(\"hidden\", true);\n }\n showTooltip(event, d, trial_id) {\n var self = this;\n this.tooltipDiv.classed(\"hidden\", false);\n this.tooltipDiv.transition()\n .duration(200)\n .style(\"opacity\", 0.9);\n if (this.config.queryTooltip) {\n var string = d.tooltip[trial_id];\n var regexp = (/T(.*) - (\\d*)
        Line \\d*?
        /g);\n var match = regexp.exec(string);\n this.tooltipDiv.html(\"\")\n .style(\"left\", (event.pageX - 3) + \"px\")\n .style(\"top\", (event.pageY - 28) + \"px\");\n while (match != null) {\n var div = document.createElement(\"div\");\n //var div2 = document.createElement(\"div\");\n this.tooltipDiv.append(() => div);\n //this.tooltipDiv.append(() => div2);\n var aid = match[2];\n if (aid in self.activationStorage) {\n this.updateTooltipDiv(aid, div);\n }\n else {\n self.config.customLoadTooltip(self, div, match[0], match[1], match[2]);\n }\n match = regexp.exec(string);\n }\n }\n else {\n this.tooltipDiv.html(d.tooltip[trial_id])\n .style(\"left\", (event.pageX - 3) + \"px\")\n .style(\"top\", (event.pageY - 28) + \"px\");\n }\n }\n updateTooltipDiv(activationId, div) {\n var data = this.activationStorage[activationId];\n var title = data.id + \" - \" + data.name;\n if (data.hash != \"\") {\n title = '' + title + \"\";\n }\n var result = [\n ' ' + title + '',\n ' Line: ' + data.line + \"\",\n ' Start: ' + data.start + \"\",\n ' Finish: ' + data.finish + \"\",\n ' Duration: ' + data.duration + \"ns\",\n ' Return: ' + data.return_value + \"\",\n ];\n // ToDo: parameters and globals\n div.outerHTML = result.join(\"
        \") + \"

        \";\n }\n createMarker(name, cls, fill) {\n this.svg.append(\"svg:defs\").selectAll(\"marker\")\n .data([name])\n .enter().append(\"svg:marker\")\n .attr(\"id\", this.graphId + \"-\" + name)\n .attr(\"viewBox\", \"0 -5 10 10\")\n .attr(\"refX\", 10)\n .attr(\"refY\", 0)\n .attr(\"markerWidth\", 6)\n .attr(\"markerHeight\", 6)\n .attr(\"orient\", \"auto\")\n .append(\"svg:path\")\n .classed(cls, true)\n .attr(\"fill\", fill)\n .attr(\"d\", \"M0,-5L10,0L0,5\");\n }\n defaultNodeStroke(d) {\n let color = this.colors[d.data.trial_ids[0]];\n if (d.data.trial_ids.length > 1 || color == 0) {\n return \"#000\";\n }\n if (color == 1) {\n return \"red\";\n }\n return \"green\";\n }\n nodeClick(d) {\n if (d.children) {\n d._children = d.children;\n delete d.children;\n }\n else {\n d.children = d._children;\n delete d._children;\n }\n this.update(d);\n }\n updateNodes(source, node) {\n let self = this;\n var nodeEnter = node.enter().append('g')\n .attr(\"id\", (d) => {\n return \"node-\" + this.graphId + \"-\" + d.data.index;\n })\n .attr('class', 'node')\n .attr(\"cursor\", \"pointer\")\n .attr('transform', (d) => {\n return \"translate(\" + source.x + \",\" + source.y + \")\";\n })\n .on('click', (event, d) => {\n let activations = d.data.activations;\n if (event.ctrlKey && Object.keys(activations).length > 1) {\n self.getFunctionDiff(activations, d.data.trial_ids);\n }\n else {\n this.nodeClick(d);\n }\n })\n .on('mouseover', function (event, d) {\n if (self.config.useTooltip) {\n self.closeTooltip();\n if ((0, d3_selection_1.pointers)(event)[0][0] < 10) {\n self.showTooltip(event, d.data, self.t1);\n }\n else {\n self.showTooltip(event, d.data, self.t2);\n }\n }\n self.config.customMouseOver(self, d);\n return false;\n }).on('mouseout', function (event, d) {\n self.config.customMouseOut(self, d);\n });\n /* nodeEnter.attr(\"activations_ids\", (d:VisibleTrialNode)=>{\n let activations = d.data.activations;\n let attrValue = \"\";\n for(let trial in activations){\n if(attrValue.length > 0) attrValue+= \"/\";\n attrValue += trial + \"/\";\n attrValue += activations[trial];\n }\n return attrValue;\n }); */\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr('class', 'node')\n .attr('rx', 1e-6)\n .attr('ry', 1e-6)\n .attr('width', 1e-6)\n .attr('height', 1e-6)\n .attr(\"stroke\", (d) => this.defaultNodeStroke(d))\n .attr(\"stroke-width\", \"3px\")\n .attr(\"fill\", (d) => {\n if (d.data.trial_ids.length == 1) {\n return this.calculateColor(d.data, this.t1);\n }\n var grad = this.svg.append(\"svg:defs\")\n .append(\"linearGradient\")\n .attr(\"id\", \"grad-\" + this.graphId + \"-\" + d.data.index)\n .attr(\"x1\", \"100%\")\n .attr(\"x2\", \"0%\")\n .attr(\"y1\", \"0%\")\n .attr(\"y2\", \"0%\");\n grad.append(\"stop\")\n .attr(\"offset\", \"50%\")\n .attr(\"stop-color\", this.calculateColor(d.data, this.t2));\n grad.append(\"stop\")\n .attr(\"offset\", \"50%\")\n .attr(\"stop-color\", this.calculateColor(d.data, this.t1));\n return \"url(#grad-\" + this.graphId + \"-\" + d.data.index + \")\";\n });\n // Text for new nodes\n nodeEnter.append('text')\n .attr(\"dy\", \".35em\")\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"font-size\", this.config.fontSize + \"px\")\n .attr(\"pointer-events\", \"none\")\n .attr(\"fill\", \"#000\")\n .attr(\"y\", 24)\n .attr(\"x\", 10)\n .attr(\"text-anchor\", \"middle\")\n .each(function (d) {\n const textLabel = (0, d3_selection_1.select)(this);\n const name = d.data.name.split('
        ');\n if (name.length > 1) {\n textLabel.append(\"tspan\")\n .attr(\"x\", \"10\")\n .attr(\"dy\", \".35em\")\n .attr(\"font-weight\", \"bold\")\n .text(name[0]);\n textLabel.append(\"tspan\")\n .attr(\"x\", \"10\")\n .attr(\"dy\", \"1em\")\n .text(name[1]);\n textLabel.attr(\"class\", \"nowrap\");\n }\n else {\n return textLabel.text(d.data.name);\n }\n });\n nodeEnter.append(\"path\")\n .attr(\"stroke\", \"#000\")\n .attr(\"d\", function (d) {\n if (d.data.trial_ids.length > 1) {\n return \"M10,\" + 0 +\n \"L10,\" + 20;\n }\n return \"M0,0L0,0\";\n });\n // Update\n var nodeUpdate = nodeEnter.merge(node);\n // Transition to proper position\n nodeUpdate.transition()\n .duration(this.config.duration)\n .attr(\"transform\", (d) => {\n let color = this.colors[d.data.trial_ids[0]];\n d.dy = 0;\n if (color == 1) {\n d.dy = -40;\n }\n else if (color == 2) {\n d.dy = 40;\n }\n return \"translate(\" + (d.x - 10) + \",\" + (d.y + d.dy - 10) + \")\";\n });\n // Update the node attributes and style\n nodeUpdate.select('rect.node')\n .attr('width', 20)\n .attr('height', 20)\n .attr('rx', 20)\n .attr('ry', 20)\n .attr(\"rx\", (d) => {\n return d._children ? 0 : 20;\n })\n .attr(\"ry\", (d) => {\n return d._children ? 0 : 20;\n })\n .attr('cursor', 'pointer');\n // Remove exiting nodes\n var nodeExit = node.exit().transition()\n .duration(this.config.duration)\n .attr(\"transform\", function (d) {\n return \"translate(\" + source.x + \",\" + source.y + \")\";\n })\n .remove();\n // Reduce node rects size to 0 on exit\n nodeExit.select('rect')\n .attr('rx', 1e-6)\n .attr('ry', 1e-6)\n .attr('width', 1e-6)\n .attr('height', 1e-6);\n // Reduce opacity of labels on exit\n nodeExit.select('text')\n .style('fill-opacity', 1e-6);\n }\n updateLinks(source, edges) {\n var link = this.g.selectAll('path.link')\n .data(edges, (d) => d.id);\n // Enter any new links at the parent's previous position.\n var linkEnter = link.enter().insert('path', \"g\")\n .attr(\"class\", \"link\")\n .attr(\"id\", (d, i) => {\n return \"pathId-\" + this.graphId + \"-\" + d.id;\n })\n .attr(\"fill\", \"none\")\n .attr(\"stroke-width\", \"1.5px\")\n .attr('d', (d) => {\n var o = { y: source.y0, x: source.x0 };\n if (d.source.dy == undefined) {\n d.source.dy = 0;\n }\n if (d.target.dy == undefined) {\n d.target.dy = 0;\n }\n let ox = source.x0 || 0, oy = source.y0 || 0, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1;\n if (d.type === 'initial' || d.type === 'call' || d.type == 'return') {\n // Initial\n return (0, utils_1.diagonal)(o, o);\n }\n else if (dx === 0 && dy === 0) {\n // Loop\n return `M ${ox}, ${oy}\n A 15,20\n -45,1,1\n ${ox + 5},${oy + 8}`;\n }\n //return diagonal(d.source, d.target);\n return (0, utils_1.diagonal)(o, o);\n })\n .attr(\"marker-end\", (d) => {\n let count = 0;\n for (let trial_id in d.count) {\n if (trial_id == this.t1.toString()) {\n count += 1;\n }\n if (trial_id == this.t2.toString()) {\n count += 2;\n }\n }\n if (count == 0 || count == 3) { // Single trial or diff\n return \"url(#\" + this.graphId + \"-end)\";\n }\n if (count == 1) { // First trial\n return \"url(#\" + this.graphId + \"-endbefore)\";\n }\n if (count == 2) { // Second trial\n return \"url(#\" + this.graphId + \"-endafter)\";\n }\n return \"\";\n })\n .attr('stroke', (d) => {\n if (d.type === 'sequence') {\n return '#07F';\n }\n return '#666';\n })\n .attr('stroke-dasharray', (d) => {\n if (d.type === 'return') {\n return '10,2';\n }\n return 'none';\n });\n // UPDATE\n var linkUpdate = linkEnter.merge(link);\n // Transition back to the parent element position\n linkUpdate.transition()\n .duration(this.config.duration)\n .attr('d', (d) => {\n if (d.source.dy == undefined) {\n d.source.dy = 0;\n }\n if (d.target.dy == undefined) {\n d.target.dy = 0;\n }\n let sd = d.source.data, td = d.target.data, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1, theta = Math.atan(dx / dy), phi = Math.atan(dy / dx), r = 10 + 2, sin_theta = r * Math.sin(theta), cos_theta = r * Math.cos(theta), sin_phi = r * Math.sin(phi), cos_phi = r * Math.cos(phi), m1 = (y2 > y1) ? 1 : -1, m2 = (x2 > x1) ? -1 : 1;\n if (d.type === 'initial') {\n // Initial\n return `M ${(x2 - 20)},${(y2 - 20)}\n L ${(x2 - r / 2.0)},${(y2 - r / 2.0)}`;\n }\n else if (d.type === 'call' || d.type == 'return') {\n // Call/Return\n x1 += m1 * sin_theta;\n x2 += m2 * cos_phi;\n y1 += m1 * cos_theta;\n y2 += m2 * sin_phi;\n if (dx === 0) {\n if (y1 > y2) {\n //y1 -= 10\n y2 += 20;\n }\n else {\n //y1 += 10\n y2 -= 20;\n }\n }\n return `M ${x1}, ${y1}\n L ${x2}, ${y2}`;\n }\n else if (dx === 0 && dy === 0) {\n // Loop\n return `M ${x1}, ${y1}\n A 15,20\n -45,1,1\n ${x2 + 5},${y2 + 8}`;\n }\n else if (sd.parent_index == td.parent_index) {\n // Same caller\n if (dy === 0 && sd.children_index == td.children_index - 1) {\n // Immediate sequence\n return `M ${x1}, ${y1}\n L ${(x2 + m2 * cos_phi)}, ${y2}`;\n }\n else {\n let sign = -1;\n if (y1 < y2) {\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n y2 -= r;\n sign = -1;\n }\n else if (y2 < y1) {\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n y2 += r;\n sign = 1;\n }\n else if (x1 >= x2) {\n y1 += r;\n y2 += r;\n sign = 2;\n }\n else {\n y1 -= r;\n y2 -= r;\n sign = -1;\n }\n return `M ${x1}, ${y1}\n C ${(x1 + x2) / 2} ${y1 + r * sign},\n ${(x1 + x2) / 2} ${y2 + r * sign},\n ${x2} ${y2}`;\n }\n }\n // Other caller\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n x2 += m2 * cos_phi;\n y2 += m2 * sin_phi;\n return `M ${x1} ${y1}\n C ${(x1 + x2) / 2} ${y1},\n ${(x1 + x2) / 2} ${y2},\n ${x2} ${y2}`;\n });\n // Remove any exiting links\n link.exit() //.transition()\n .attr('d', function (d) {\n return (0, utils_1.diagonal)(d.source, d.target);\n })\n .remove(); // linkExit\n }\n updateLinkLabels(edges) {\n var labelPath = this.g.selectAll(\".label_text\")\n .data(edges, (d) => d.id);\n var labelEnter = labelPath.enter().append(\"text\")\n .attr(\"class\", \"label_text\")\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"font-size\", this.config.labelFontSize + \"px\")\n .attr(\"pointer-events\", \"none\")\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"dx\", (d) => {\n if (d.source.x == d.target.x) {\n return 29;\n }\n return (Math.abs(d.source.x - d.target.x) - 10) / 2;\n })\n .attr(\"dy\", -3)\n .attr(\"id\", (d, i) => {\n return \"pathlabel-\" + this.graphId + \"-\" + d.id;\n })\n .append(\"textPath\")\n .attr(\"xlink:href\", (d, i) => {\n return \"#pathId-\" + this.graphId + \"-\" + d.id;\n })\n .text((d) => {\n if (d.type === 'initial') {\n return '';\n }\n if (this.t1 == this.t2 || !d.count[this.t2]) {\n return d.count[this.t1].toString();\n }\n else if (!d.count[this.t1]) {\n return d.count[this.t2].toString();\n }\n return d.count[this.t1] + ', ' + d.count[this.t2];\n });\n labelEnter.merge(labelPath);\n labelPath.exit().remove();\n }\n zoomFunction(event) {\n this.closeTooltip();\n this.transform = event.transform;\n this.g.attr(\"transform\", event.transform);\n }\n _graphId() {\n return \"trial-graph-\" + this.graphId;\n }\n}\nexports.TrialGraph = TrialGraph;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./structures\"), exports);\n__exportStar(require(\"./graph\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diagonal = diagonal;\n/**\n * Create diagonal line between two nodes\n */\nfunction diagonal(s, d) {\n if (s.dy == undefined) {\n s.dy = 0;\n }\n if (d.dy == undefined) {\n d.dy = 0;\n }\n let path = `M ${s.x} ${(s.y + s.dy)}\n C ${(s.x + d.x) / 2} ${(s.y + s.dy)},\n ${(s.x + d.x) / 2} ${(d.y + d.dy)},\n ${d.x} ${(d.y + d.dy)}`;\n return path;\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./d3svg\"), exports);\n__exportStar(require(\"./random\"), exports);\n__exportStar(require(\"./text\"), exports);\n__exportStar(require(\"./web\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.makeid = makeid;\nfunction makeid() {\n var text = \"\";\n var possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n for (var i = 0; i < 5; i++)\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n return text;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrap = wrap;\nconst d3_selection_1 = require(\"d3-selection\");\nfunction wrap(text, width) {\n text.each(function () {\n var text = (0, d3_selection_1.select)(this), words = text.text().split(/(?=_)/).reverse(), word, line = [], lineNumber = 0, lineHeight = 1.1, // ems\n y = text.attr(\"y\"), dy = parseFloat(text.attr(\"dy\")), tspan = text.text(null).append(\"tspan\").attr(\"x\", 10).attr(\"y\", y).attr(\"dy\", dy + \"em\");\n while (word = words.pop()) {\n line.push(word);\n tspan.text(line.join(\"\"));\n if (tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\"\"));\n line = [word];\n tspan = text.append(\"tspan\").attr(\"x\", 10).attr(\"y\", y).attr(\"dy\", ++lineNumber * lineHeight + dy + \"em\").text(word);\n }\n }\n });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.json = json;\nconst d3_fetch_1 = require(\"d3-fetch\");\nfunction json(innertext, sub, url, fn) {\n let i = document.createElement('i');\n i.classList.add(\"loading\");\n i.classList.add(\"fa\");\n i.classList.add(\"fa-spinner\");\n i.classList.add(\"fa-pulse\");\n sub.innerHTML = \"\";\n sub.appendChild(i);\n sub.onclick = function () {\n json(innertext, sub, url, fn);\n };\n (0, d3_fetch_1.json)(url).then(function (data) {\n sub.onclick = function () {\n };\n fn(data);\n }).catch(function (error) {\n i.classList.remove(\"fa-spinner\");\n i.classList.remove(\"fa-pulse\");\n i.classList.add(\"fa-refresh\");\n i.classList.add(\"connection-error\");\n let text = document.createElement('span');\n text.classList.add(\"error-text\");\n text.innerHTML = innertext;\n i.appendChild(text);\n });\n}\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without 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\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n Object.defineProperty(obj, name, {\n value: val,\n enumerable: false,\n writable: true,\n configurable: true\n });\n}\nif (!String.prototype.startsWith) {\n defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n });\n}\nif (!String.prototype.endsWith) {\n defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n var subjectString = this;\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n });\n}\nif (!String.prototype.repeat) {\n defineProp(String.prototype, \"repeat\", function (count) {\n var result = \"\";\n var string = this;\n while (count > 0) {\n if (count & 1)\n result += string;\n if ((count >>= 1))\n string += string;\n }\n return result;\n });\n}\nif (!String.prototype.includes) {\n defineProp(String.prototype, \"includes\", function (str, position) {\n return this.indexOf(str, position) != -1;\n });\n}\nif (!Object.assign) {\n Object.assign = function (target) {\n if (target === undefined || target === null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n Object.keys(source).forEach(function (key) {\n output[key] = source[key];\n });\n }\n }\n return output;\n };\n}\nif (!Object.values) {\n Object.values = function (o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n };\n}\nif (!Array.prototype.find) {\n defineProp(Array.prototype, \"find\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return kValue;\n }\n }\n });\n}\nif (!Array.prototype.findIndex) {\n defineProp(Array.prototype, \"findIndex\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return k;\n }\n }\n });\n}\nif (!Array.prototype.includes) {\n defineProp(Array.prototype, \"includes\", function (item, position) {\n return this.indexOf(item, position) != -1;\n });\n}\nif (!Array.prototype.fill) {\n defineProp(Array.prototype, \"fill\", function (value) {\n var O = this;\n var len = O.length >>> 0;\n var start = arguments[1];\n var relativeStart = start >> 0;\n var k = relativeStart < 0\n ? Math.max(len + relativeStart, 0)\n : Math.min(relativeStart, len);\n var end = arguments[2];\n var relativeEnd = end === undefined ? len : end >> 0;\n var final = relativeEnd < 0\n ? Math.max(len + relativeEnd, 0)\n : Math.min(relativeEnd, len);\n while (k < final) {\n O[k] = value;\n k++;\n }\n return O;\n });\n}\nif (!Array.of) {\n defineProp(Array, \"of\", function () {\n return Array.prototype.slice.call(arguments);\n });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n if (count >>= 1)\n string += string;\n }\n return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\nexports.copyArray = function (array) {\n var copy = [];\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else\n copy[i] = array[i];\n }\n return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n};\nexports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\nexports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/ 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n }\n else if (exports.isLinux) {\n return exports.OS.LINUX;\n }\n else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n }\n else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n }\n else if (n === \"ref\") {\n if (refs)\n refs[val] = el;\n }\n else if (n === \"style\") {\n if (typeof val == \"string\")\n el.style.cssText = val;\n }\n else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\nexports.getDocumentHead = function (doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n }\n else {\n exports.removeCssClass(node, className);\n }\n};\nexports.hasCssString = function (id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) {\n return true;\n }\n }\n }\n};\nexports.removeElementById = function (id, doc) {\n doc = doc || document;\n if (doc.getElementById(id)) {\n doc.getElementById(id).remove();\n }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n strictCSP = value;\n if (value == false)\n insertPendingStyles();\n else if (!cssCache)\n cssCache = [];\n};\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function (item) {\n importCssString(item[0], item[1]);\n });\n}\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n }\n else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP)\n return;\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n }\n else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (doc) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = (doc && doc.documentElement) || (document && document.documentElement);\n if (!body)\n return 0;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n if (noScrollbar === withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\nif (useragent.isChromeOS)\n exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n}\nelse {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\nexports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\nexports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n if (typeof e != \"object\" || !e)\n e = {};\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n };\nEventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++)\n listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n var _self = this;\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n callback.apply(null, arguments);\n });\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = { _disabled_: {} };\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n }\n else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\nEventEmitter.on =\n EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\nEventEmitter.off =\n EventEmitter.removeListener =\n EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n };\nEventEmitter.removeAllListeners = function (eventName) {\n if (!eventName)\n this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry)\n this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers)\n this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n var e = new Error(msg);\n e[\"data\"] = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/default_english_messages\",[\"require\",\"exports\",\"module\"], function(require, exports, module){var defaultEnglishMessages = {\n \"autocomplete.popup.aria-roledescription\": \"Autocomplete suggestions\",\n \"autocomplete.popup.aria-label\": \"Autocomplete suggestions\",\n \"autocomplete.popup.item.aria-roledescription\": \"item\",\n \"autocomplete.loading\": \"Loading...\",\n \"editor.scroller.aria-roledescription\": \"editor\",\n \"editor.scroller.aria-label\": \"Editor content, press Enter to start editing, press Escape to exit\",\n \"editor.gutter.aria-roledescription\": \"editor gutter\",\n \"editor.gutter.aria-label\": \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\",\n \"error-marker.good-state\": \"Looks good!\",\n \"prompt.recently-used\": \"Recently used\",\n \"prompt.other-commands\": \"Other commands\",\n \"prompt.no-matching-commands\": \"No matching commands\",\n \"search-box.find.placeholder\": \"Search for\",\n \"search-box.find-all.text\": \"All\",\n \"search-box.replace.placeholder\": \"Replace with\",\n \"search-box.replace-next.text\": \"Replace\",\n \"search-box.replace-all.text\": \"All\",\n \"search-box.toggle-replace.title\": \"Toggle Replace mode\",\n \"search-box.toggle-regexp.title\": \"RegExp Search\",\n \"search-box.toggle-case.title\": \"CaseSensitive Search\",\n \"search-box.toggle-whole-word.title\": \"Whole Word Search\",\n \"search-box.toggle-in-selection.title\": \"Search In Selection\",\n \"search-box.search-counter\": \"$0 of $1\",\n \"text-input.aria-roledescription\": \"editor\",\n \"text-input.aria-label\": \"Cursor at row $0\",\n \"gutter.code-folding.range.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.closed.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.open.aria-label\": \"Toggle code folding, row $0\",\n \"gutter.code-folding.closed.title\": \"Unfold code\",\n \"gutter.code-folding.open.title\": \"Fold code\",\n \"gutter.annotation.aria-label.error\": \"Error, read annotations row $0\",\n \"gutter.annotation.aria-label.warning\": \"Warning, read annotations row $0\",\n \"gutter.annotation.aria-label.info\": \"Info, read annotations row $0\",\n \"inline-fold.closed.title\": \"Unfold code\",\n \"gutter-tooltip.aria-label.error.singular\": \"error\",\n \"gutter-tooltip.aria-label.error.plural\": \"errors\",\n \"gutter-tooltip.aria-label.warning.singular\": \"warning\",\n \"gutter-tooltip.aria-label.warning.plural\": \"warnings\",\n \"gutter-tooltip.aria-label.info.singular\": \"information message\",\n \"gutter-tooltip.aria-label.info.plural\": \"information messages\",\n \"gutter.annotation.aria-label.security\": \"Security finding, read annotations row $0\",\n \"gutter.annotation.aria-label.hint\": \"Suggestion, read annotations row $0\",\n \"gutter-tooltip.aria-label.security.singular\": \"security finding\",\n \"gutter-tooltip.aria-label.security.plural\": \"security findings\",\n \"gutter-tooltip.aria-label.hint.singular\": \"suggestion\",\n \"gutter-tooltip.aria-label.hint.plural\": \"suggestions\",\n \"editor.tooltip.disable-editing\": \"Editing is disabled\"\n};\nexports.defaultEnglishMessages = defaultEnglishMessages;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\",\"ace/lib/default_english_messages\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar defaultEnglishMessages = require(\"./default_english_messages\").defaultEnglishMessages;\nvar optionsProvider = {\n setOptions: function (optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function (optionNames) {\n var result = {};\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n }\n else if (!Array.isArray(optionNames)) {\n optionNames = Object.keys(optionNames);\n }\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function (name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function (name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\nvar messages;\nvar nlsPlaceholders;\nvar AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\n messages = defaultEnglishMessages;\n nlsPlaceholders = \"dollarSigns\";\n }\n AppConfig.prototype.defineOptions = function (obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = { forwardTo: opt };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n AppConfig.prototype.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n AppConfig.prototype.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions)\n if (this.$defaultOptions[path][name])\n break;\n if (!this.$defaultOptions[path][name])\n return false;\n }\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n AppConfig.prototype.setMessages = function (value, options) {\n messages = value;\n if (options && options.placeholders) {\n nlsPlaceholders = options.placeholders;\n }\n };\n AppConfig.prototype.nls = function (key, defaultString, params) {\n if (!messages[key]) {\n warn(\"No message found for the key '\" + key + \"' in messages with id \" + messages.$id + \", trying to find a translation for the default string '\" + defaultString + \"'.\");\n if (!messages[defaultString]) {\n warn(\"No message found for the default string '\" + defaultString + \"' in the provided messages. Falling back to the default English message.\");\n }\n }\n var translated = messages[key] || messages[defaultString] || defaultString;\n if (params) {\n if (nlsPlaceholders === \"dollarSigns\") {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, dollarMatch) {\n if (dollarMatch == \"$\")\n return \"$\";\n return params[dollarMatch];\n });\n }\n if (nlsPlaceholders === \"curlyBrackets\") {\n translated = translated.replace(/\\{([^\\}]+)\\}/g, function (_, curlyBracketMatch) {\n return params[curlyBracketMatch];\n });\n }\n }\n return translated;\n };\n return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n background: #f0f0f0;\\n color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n color: black;\\n}\\n \\n.ace-tm .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n background-color: rgba(255, 0, 0, 0.1);\\n color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n};\nexports.get = function (key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\nexports.set = function (key, value) {\n if (options.hasOwnProperty(key))\n options[key] = value;\n else if (this.setDefaultValue(\"\", key, value) == false)\n throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\")\n dom.useStrictCSP(value);\n};\nexports.all = function () {\n return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n }\n else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n return cb(null, require(\"./theme/textmate\"));\n if (customLoader)\n return customLoader(moduleName, cb);\n console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n var loadedModule;\n if (Array.isArray(moduleId)) {\n var moduleType = moduleId[0];\n var moduleName = moduleId[1];\n }\n else if (typeof moduleId == \"string\") {\n var moduleName = moduleId;\n }\n var load = function (module) {\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1)\n return;\n var afterLoad = function () {\n loader(moduleName, function (err, module) {\n if (module)\n exports.$loaded[moduleName] = module;\n exports._emit(\"load.module\", { name: moduleName, module: module });\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n };\n if (exports.dynamicModules[moduleName]) {\n exports.dynamicModules[moduleName]().then(function (module) {\n if (module.default) {\n load(module.default);\n }\n else {\n load(module);\n }\n });\n }\n else {\n try {\n loadedModule = this.$require(moduleName);\n }\n catch (e) { }\n load(loadedModule || exports.$loaded[moduleName]);\n }\n};\nexports.$require = function (moduleName) {\n if (typeof module[\"require\"] == \"function\") {\n var req = \"require\";\n return module[req](moduleName);\n }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n if (!options.basePath && !options.workerPath\n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n reportErrorIfPathIsNotConfigured = function () { };\n }\n};\nexports.version = \"1.43.2\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n require([moduleName], function(module) {\n cb(null, module);\n });\n});\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n config.init = init;\n config.$require = require;\n ace.require = require;\n\n if (typeof define === \"function\")\n ace.define = define;\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n if (currentScript && currentScript.src) {\n scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n }\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n Range.prototype.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n Range.prototype.compareRange = function (range) {\n var cmp, end = range.end, start = range.start;\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n }\n else if (cmp == 0) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (cmp == -1) {\n return -2;\n }\n else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n }\n else if (cmp == 1) {\n return 42;\n }\n else {\n return 0;\n }\n }\n };\n Range.prototype.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n Range.prototype.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n Range.prototype.intersects = function (range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n Range.prototype.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n Range.prototype.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n Range.prototype.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n }\n else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n Range.prototype.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n }\n else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n Range.prototype.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n if (row < this.start.row)\n return -1;\n if (row > this.end.row)\n return 1;\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n return 0;\n };\n Range.prototype.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = { row: lastRow + 1, column: 0 };\n else if (this.end.row < firstRow)\n var end = { row: firstRow, column: 0 };\n if (this.start.row > lastRow)\n var start = { row: lastRow + 1, column: 0 };\n else if (this.start.row < firstRow)\n var start = { row: firstRow, column: 0 };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = { row: row, column: column };\n else\n var end = { row: row, column: column };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.isEmpty = function () {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n Range.prototype.isMultiLine = function () {\n return (this.start.row !== this.end.row);\n };\n Range.prototype.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n Range.prototype.collapseRows = function () {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n Range.prototype.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n Range.prototype.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n return Range;\n}());\nRange.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n \"control\": 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n '-13': \"NumpadEnter\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n};\nvar codeToKeyCode = {\n Command: 224,\n Backspace: 8,\n Tab: 9,\n Return: 13,\n Enter: 13,\n Pause: 19,\n Escape: 27,\n PageUp: 33,\n PageDown: 34,\n End: 35,\n Home: 36,\n Insert: 45,\n Delete: 46,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Backquote: 192,\n Minus: 189,\n Equal: 187,\n BracketLeft: 219,\n Backslash: 220,\n BracketRight: 221,\n Semicolon: 186,\n Quote: 222,\n Comma: 188,\n Period: 190,\n Slash: 191,\n Space: 32,\n NumpadAdd: 107,\n NumpadDecimal: 110,\n NumpadSubtract: 109,\n NumpadDivide: 111,\n NumpadMultiply: 106\n};\nfor (var i = 0; i < 10; i++) {\n codeToKeyCode[\"Digit\" + i] = 48 + i;\n codeToKeyCode[\"Numpad\" + i] = 96 + i;\n Keys.PRINTABLE_KEYS[48 + i] = \"\" + i;\n Keys.FUNCTION_KEYS[96 + i] = \"Numpad\" + i;\n}\nfor (var i = 65; i < 91; i++) {\n var chr = String.fromCharCode(i + 32);\n codeToKeyCode[\"Key\" + chr.toUpperCase()] = i;\n Keys.PRINTABLE_KEYS[i] = chr;\n}\nfor (var i = 1; i < 13; i++) {\n codeToKeyCode[\"F\" + i] = 111 + i;\n Keys.FUNCTION_KEYS[111 + i] = \"F\" + i;\n}\nvar modifiers = {\n Shift: 16,\n Control: 17,\n Alt: 18,\n Meta: 224\n};\nfor (var mod in modifiers) {\n codeToKeyCode[mod] = codeToKeyCode[mod + \"Left\"]\n = codeToKeyCode[mod + \"Right\"] = modifiers[mod];\n}\nexports.$codeToKeyCode = codeToKeyCode;\nKeys.PRINTABLE_KEYS[173] = '-';\nfor (var j in Keys.FUNCTION_KEYS) {\n var name = Keys.FUNCTION_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\nfor (var j in Keys.PRINTABLE_KEYS) {\n var name = Keys.PRINTABLE_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\noop.mixin(Keys, Keys.MODIFIER_KEYS);\noop.mixin(Keys, Keys.PRINTABLE_KEYS);\noop.mixin(Keys, Keys.FUNCTION_KEYS);\nKeys.enter = Keys[\"return\"];\nKeys.escape = Keys.esc;\nKeys.del = Keys[\"delete\"];\n(function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n Keys.KEY_MODS[i] = mods.filter(function (x) {\n return i & Keys.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n})();\nKeys.KEY_MODS[0] = \"\";\nKeys.KEY_MODS[-1] = \"input-\";\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function () { }, {\n get passive() {\n activeListenerOptions = { passive: false };\n return true;\n }\n });\n }\n catch (e) { }\n}\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\nexports.stopPropagation = function (e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function (e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.15;\n var deltaX = e.deltaX || 0;\n var deltaY = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = deltaX * factor;\n e.wheelY = deltaY * factor;\n break;\n case e.DOM_DELTA_LINE:\n var linePixels = 15;\n e.wheelX = deltaX * linePixels;\n e.wheelY = deltaY * linePixels;\n break;\n case e.DOM_DELTA_PAGE:\n var pagePixels = 150;\n e.wheelX = deltaX * pagePixels;\n e.wheelY = deltaY * pagePixels;\n break;\n }\n callback(e);\n }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n }\n else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n }\n else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\nfunction getModifierHash(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n}\nexports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n if (!keyCode && e.code) {\n keyCode = keys.$codeToKeyCode[e.code] || keyCode;\n }\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = e.location;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n }\n else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (!hashId && keyCode === 13) {\n if (e.location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n var listener = function (e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n }\n else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window[\"mozRequestAnimationFrame\"]\n || window[\"webkitRequestAnimationFrame\"]\n || window[\"msRequestAnimationFrame\"]\n || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n lineMode: false,\n pasteCancelled: function () {\n if ($cancelT && $cancelT > Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function () {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput = /** @class */ (function () {\n function TextInput(parentNode, host) {\n var _this = this;\n this.host = host;\n this.text = dom.createElement(\"textarea\");\n this.text.className = \"ace_text-input\";\n this.text.setAttribute(\"wrap\", \"off\");\n this.text.setAttribute(\"autocorrect\", \"off\");\n this.text.setAttribute(\"autocapitalize\", \"off\");\n this.text.setAttribute(\"spellcheck\", \"false\");\n this.text.style.opacity = \"0\";\n parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false;\n this.pasted = false;\n this.inComposition = false;\n this.sendingText = false;\n this.tempStyle = '';\n if (!isMobile)\n this.text.style.fontSize = \"1px\";\n this.commandMode = false;\n this.ignoreFocusEvents = false;\n this.lastValue = \"\";\n this.lastSelectionStart = 0;\n this.lastSelectionEnd = 0;\n this.lastRestoreEnd = 0;\n this.rowStart = Number.MAX_SAFE_INTEGER;\n this.rowEnd = Number.MIN_SAFE_INTEGER;\n this.numberOfExtraLines = 0;\n try {\n this.$isFocused = document.activeElement === this.text;\n }\n catch (e) {\n }\n this.cancelComposition = this.cancelComposition.bind(this);\n this.setAriaOptions({ role: \"textbox\" });\n event.addListener(this.text, \"blur\", function (e) {\n if (_this.ignoreFocusEvents)\n return;\n host.onBlur(e);\n _this.$isFocused = false;\n }, host);\n event.addListener(this.text, \"focus\", function (e) {\n if (_this.ignoreFocusEvents)\n return;\n _this.$isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n }\n catch (e) {\n }\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(_this.resetSelection.bind(_this));\n else\n _this.resetSelection();\n }, host); this.$focusScroll = false;\n host.on(\"beforeEndOperation\", function () {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (_this.inComposition && isUserAction) {\n _this.lastValue = _this.text.value = \"\";\n _this.onCompositionEnd();\n }\n _this.resetSelection();\n });\n host.on(\"changeSelection\", this.setAriaLabel.bind(this));\n this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection;\n if (this.$isFocused)\n host.onFocus();\n this.inputHandler = null;\n this.afterContextMenu = false;\n event.addCommandKeyListener(this.text, function (e, hashId, keyCode) {\n if (_this.inComposition)\n return;\n return host.onCommandKey(e, hashId, keyCode);\n }, host);\n event.addListener(this.text, \"select\", this.onSelect.bind(this), host);\n event.addListener(this.text, \"input\", this.onInput.bind(this), host);\n event.addListener(this.text, \"cut\", this.onCut.bind(this), host);\n event.addListener(this.text, \"copy\", this.onCopy.bind(this), host);\n event.addListener(this.text, \"paste\", this.onPaste.bind(this), host);\n if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n switch (e.keyCode) {\n case 67:\n _this.onCopy(e);\n break;\n case 86:\n _this.onPaste(e);\n break;\n case 88:\n _this.onCut(e);\n break;\n }\n }, host);\n }\n this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this\n event.addListener(this.text, \"compositionstart\", this.onCompositionStart.bind(this), host);\n event.addListener(this.text, \"compositionupdate\", this.onCompositionUpdate.bind(this), host);\n event.addListener(this.text, \"keyup\", this.onKeyup.bind(this), host);\n event.addListener(this.text, \"keydown\", this.syncComposition.bind(this), host);\n event.addListener(this.text, \"compositionend\", this.onCompositionEnd.bind(this), host);\n this.closeTimeout;\n event.addListener(this.text, \"mouseup\", this.$onContextMenu.bind(this), host);\n event.addListener(this.text, \"mousedown\", function (e) {\n e.preventDefault();\n _this.onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", this.$onContextMenu.bind(this), host);\n event.addListener(this.text, \"contextmenu\", this.$onContextMenu.bind(this), host);\n if (isIOS)\n this.addIosSelectionHandler(parentNode, host, this.text);\n }\n TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) {\n var _this = this;\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout)\n clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function (e) {\n if (document.activeElement !== text)\n return;\n if (typing || _this.inComposition || host.$mouseHandler.isMousePressed)\n return;\n if (_this.copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n }\n else if (selectionStart == 1) {\n key = KEYS.home;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n }\n else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n }\n else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart\n && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n key = KEYS.left;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n }\n else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd\n && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n key = KEYS.right;\n }\n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n _this.lastSelectionStart = selectionStart;\n _this.lastSelectionEnd = selectionEnd;\n _this.resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n };\n TextInput.prototype.onContextMenuClose = function () {\n var _this = this;\n clearTimeout(this.closeTimeout);\n this.closeTimeout = setTimeout(function () {\n if (_this.tempStyle) {\n _this.text.style.cssText = _this.tempStyle;\n _this.tempStyle = '';\n }\n _this.host.renderer.$isMousePressed = false;\n if (_this.host.renderer.$keepTextAreaAtCursor)\n _this.host.renderer.$moveTextAreaToCursor();\n }, 0);\n };\n TextInput.prototype.$onContextMenu = function (e) {\n this.host.textInput.onContextMenu(e);\n this.onContextMenuClose();\n };\n TextInput.prototype.onKeyup = function (e) {\n if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) {\n if (!this.inComposition)\n this.lastValue = this.text.value;\n this.lastSelectionStart = this.lastSelectionEnd = -1;\n this.resetSelection();\n }\n this.syncComposition();\n };\n TextInput.prototype.cancelComposition = function () {\n this.ignoreFocusEvents = true;\n this.text.blur();\n this.text.focus();\n this.ignoreFocusEvents = false;\n };\n TextInput.prototype.onCompositionStart = function (e) {\n if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly)\n return;\n this.inComposition = {};\n if (this.commandMode)\n return;\n if (e.data)\n this.inComposition.useTextareaForIME = false;\n setTimeout(this.onCompositionUpdate.bind(this), 0);\n this.host._signal(\"compositionStart\");\n this.host.on(\"mousedown\", this.cancelComposition); //TODO:\n var range = this.host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n this.inComposition.markerRange = range;\n this.inComposition.selectionStart = this.lastSelectionStart;\n this.host.onCompositionStart(this.inComposition);\n if (this.inComposition.useTextareaForIME) {\n this.lastValue = this.text.value = \"\";\n this.lastSelectionStart = 0;\n this.lastSelectionEnd = 0;\n }\n else {\n if (this.text.msGetInputContext)\n this.inComposition.context = this.text.msGetInputContext();\n if (this.text.getInputContext)\n this.inComposition.context = this.text.getInputContext();\n }\n };\n TextInput.prototype.onCompositionUpdate = function () {\n if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly)\n return;\n if (this.commandMode)\n return this.cancelComposition();\n if (this.inComposition.useTextareaForIME) {\n this.host.onCompositionUpdate(this.text.value);\n }\n else {\n var data = this.text.value;\n this.sendText(data);\n if (this.inComposition.markerRange) {\n if (this.inComposition.context) {\n this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset;\n }\n this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column\n + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd;\n }\n }\n };\n TextInput.prototype.onCompositionEnd = function (e) {\n if (!this.host.onCompositionEnd || this.host.$readOnly)\n return;\n this.inComposition = false;\n this.host.onCompositionEnd();\n this.host.off(\"mousedown\", this.cancelComposition);\n if (e)\n this.onInput();\n };\n TextInput.prototype.onCut = function (e) {\n this.doCopy(e, true);\n };\n TextInput.prototype.onCopy = function (e) {\n this.doCopy(e, false);\n };\n TextInput.prototype.onPaste = function (e) {\n var data = this.handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n this.host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(this.resetSelection);\n event.preventDefault(e);\n }\n else {\n this.text.value = \"\";\n this.pasted = true;\n }\n };\n TextInput.prototype.doCopy = function (e, isCut) {\n var _this = this;\n var data = this.host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n if (this.handleClipboardData(e, data)) {\n if (isIOS) {\n this.resetSelection(data);\n this.copied = data;\n setTimeout(function () {\n _this.copied = false;\n }, 10);\n }\n isCut ? this.host.onCut() : this.host.onCopy();\n event.preventDefault(e);\n }\n else {\n this.copied = true;\n this.text.value = data;\n this.text.select();\n setTimeout(function () {\n _this.copied = false;\n _this.resetSelection();\n isCut ? _this.host.onCut() : _this.host.onCopy();\n });\n }\n };\n TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window[\"clipboardData\"];\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n }\n else {\n return clipboardData.getData(mime);\n }\n }\n catch (e) {\n if (!forceIEMime)\n return this.handleClipboardData(e, data, true);\n }\n };\n TextInput.prototype.onInput = function (e) {\n if (this.inComposition)\n return this.onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\")\n return this.host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\")\n return this.host.execCommand(\"redo\");\n }\n var data = this.text.value;\n var inserted = this.sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart\n < 1 && this.lastSelectionStart == this.lastSelectionEnd) {\n this.resetSelection();\n }\n };\n TextInput.prototype.sendText = function (value, fromInput) {\n if (this.afterContextMenu)\n this.afterContextMenu = false;\n if (this.pasted) {\n this.resetSelection();\n if (value)\n this.host.onPaste(value);\n this.pasted = false;\n return \"\";\n }\n else {\n var selectionStart = this.text.selectionStart;\n var selectionEnd = this.text.selectionEnd;\n var extendLeft = this.lastSelectionStart;\n var extendRight = this.lastValue.length - this.lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n while (extendLeft > 0 && this.lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1\n && this.lastValue[this.lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n this.sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) {\n this.host.onTextInput(inserted);\n }\n else {\n this.host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n this.sendingText = false;\n this.lastValue = value;\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n this.lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n TextInput.prototype.onSelect = function (e) {\n var _this = this;\n if (this.inComposition)\n return;\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value\n === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd;\n };\n if (this.copied) {\n this.copied = false;\n }\n else if (isAllSelected(this.text)) {\n this.host.selectAll();\n this.resetSelection();\n }\n else if (isMobile && this.text.selectionStart != this.lastSelectionStart) {\n this.resetSelection();\n }\n };\n TextInput.prototype.$resetSelectionIOS = function (value) {\n if (!this.$isFocused || (this.copied && !value) || this.sendingText)\n return;\n if (!value)\n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != this.text.value)\n this.text.value = this.lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1));\n if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) {\n this.text.setSelectionRange(selectionStart, selectionEnd);\n }\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n };\n TextInput.prototype.$resetSelection = function () {\n var _this = this;\n if (this.inComposition || this.sendingText)\n return;\n if (!this.$isFocused && !this.afterContextMenu)\n return;\n this.inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n var positionToSelection = function (row, column) {\n var selection = column;\n for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) {\n selection += _this.host.session.getLine(row - i).length + 1;\n }\n return selection;\n };\n if (this.host.session) {\n var selection = this.host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n if (row === this.rowEnd + 1) {\n this.rowStart = this.rowEnd + 1;\n this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines;\n }\n else if (row === this.rowStart - 1) {\n this.rowEnd = this.rowStart - 1;\n this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines;\n }\n else if (row < this.rowStart - 1 || row > this.rowEnd + 1) {\n this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0;\n this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2\n * this.numberOfExtraLines;\n }\n var lines = [];\n for (var i = this.rowStart; i <= this.rowEnd; i++) {\n lines.push(this.host.session.getLine(i));\n }\n line = lines.join('\\n');\n selectionStart = positionToSelection(range.start.row, range.start.column);\n selectionEnd = positionToSelection(range.end.row, range.end.column);\n if (range.start.row < this.rowStart) {\n var prevLine = this.host.session.getLine(this.rowStart - 1);\n selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row > this.rowEnd) {\n var nextLine = this.host.session.getLine(this.rowEnd + 1);\n selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n }\n else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n var newValue = line + \"\\n\\n\";\n if (newValue != this.lastValue) {\n this.text.value = this.lastValue = newValue;\n this.lastSelectionStart = this.lastSelectionEnd = newValue.length;\n }\n }\n if (this.afterContextMenu) {\n this.lastSelectionStart = this.text.selectionStart;\n this.lastSelectionEnd = this.text.selectionEnd;\n }\n if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd\n != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n this.text.setSelectionRange(selectionStart, selectionEnd);\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n }\n catch (e) {\n }\n }\n this.inComposition = false;\n };\n TextInput.prototype.setHost = function (newHost) {\n this.host = newHost;\n };\n TextInput.prototype.setNumberOfExtraLines = function (number) {\n this.rowStart = Number.MAX_SAFE_INTEGER;\n this.rowEnd = Number.MIN_SAFE_INTEGER;\n if (number < 0) {\n this.numberOfExtraLines = 0;\n return;\n }\n this.numberOfExtraLines = number;\n };\n TextInput.prototype.setAriaLabel = function () {\n var ariaLabel = \"\";\n if (this.host.$textInputAriaLabel) {\n ariaLabel += \"\".concat(this.host.$textInputAriaLabel, \", \");\n }\n if (this.host.session) {\n var row = this.host.session.selection.cursor.row;\n ariaLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n }\n this.text.setAttribute(\"aria-label\", ariaLabel);\n };\n TextInput.prototype.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n this.text.setAttribute(\"aria-haspopup\", \"true\");\n this.text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n this.text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n }\n else {\n this.text.setAttribute(\"aria-haspopup\", \"false\");\n this.text.setAttribute(\"aria-autocomplete\", \"both\");\n this.text.removeAttribute(\"aria-activedescendant\");\n }\n if (options.role) {\n this.text.setAttribute(\"role\", options.role);\n }\n if (options.setLabel) {\n this.text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n this.setAriaLabel();\n }\n };\n TextInput.prototype.focus = function () {\n var _this = this;\n this.setAriaOptions({\n setLabel: this.host.renderer.enableKeyboardAccessibility\n });\n if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return this.text.focus({ preventScroll: true });\n var top = this.text.style.top;\n this.text.style.position = \"fixed\";\n this.text.style.top = \"0px\";\n try {\n var isTransformed = this.text.getBoundingClientRect().top != 0;\n }\n catch (e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = this.text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", \"true\");\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode()[\"host\"];\n else\n t = t.parentElement;\n }\n }\n this.text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function () {\n _this.text.style.position = \"\";\n if (_this.text.style.top == \"0px\")\n _this.text.style.top = top;\n }, 0);\n };\n TextInput.prototype.blur = function () {\n this.text.blur();\n };\n TextInput.prototype.isFocused = function () {\n return this.$isFocused;\n };\n TextInput.prototype.setInputHandler = function (cb) {\n this.inputHandler = cb;\n };\n TextInput.prototype.getInputHandler = function () {\n return this.inputHandler;\n };\n TextInput.prototype.getElement = function () {\n return this.text;\n };\n TextInput.prototype.setCommandMode = function (value) {\n this.commandMode = value;\n this.text.readOnly = false;\n };\n TextInput.prototype.setReadOnly = function (readOnly) {\n if (!this.commandMode)\n this.text.readOnly = readOnly;\n };\n TextInput.prototype.setCopyWithEmptySelection = function (value) {\n };\n TextInput.prototype.onContextMenu = function (e) {\n this.afterContextMenu = true;\n this.resetSelection();\n this.host._emit(\"nativecontextmenu\", {\n target: this.host,\n domEvent: e\n });\n this.moveToMouse(e, true);\n };\n TextInput.prototype.moveToMouse = function (e, bringToFront) {\n var _this = this;\n if (!this.tempStyle)\n this.tempStyle = this.text.style.cssText;\n this.text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth\n * 0.5 + \"px;\";\n var rect = this.host.container.getBoundingClientRect();\n var style = dom.computedStyle(this.host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(style.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - this.text.clientHeight - 2;\n var move = function (e) {\n dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n move(e);\n if (e.type != \"mousedown\")\n return;\n this.host.renderer.$isMousePressed = true;\n clearTimeout(this.closeTimeout);\n if (useragent.isWin)\n event.capture(this.host.container, move, this.onContextMenuClose.bind(this));\n };\n TextInput.prototype.destroy = function () {\n if (this.text.parentElement)\n this.text.parentElement.removeChild(this.text);\n };\n return TextInput;\n}());\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n DefaultHandlers.prototype.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent)\n return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n DefaultHandlers.prototype.select = function () {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n }\n else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n }\n else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n }\n else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n };\n DefaultHandlers.prototype.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n DefaultHandlers.prototype.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n }\n else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n DefaultHandlers.prototype.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n }\n else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n DefaultHandlers.prototype.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n DefaultHandlers.prototype.onMouseWheel = function (ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n var editor = this.editor;\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n if (canScroll) {\n prevScroll.allowed = t;\n }\n else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0)\n return { cursor: range.start, anchor: range.end };\n else\n return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n event.stopPropagation();\n var target = event.currentTarget;\n var contentOverflows = target.scrollHeight > target.clientHeight;\n if (!contentOverflows) {\n event.preventDefault();\n }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n Tooltip.prototype.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = CLASSNAME;\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n Tooltip.prototype.getElement = function () {\n return this.$element || this.$init();\n };\n Tooltip.prototype.setText = function (text) {\n this.getElement().textContent = text;\n };\n Tooltip.prototype.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n Tooltip.prototype.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n Tooltip.prototype.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n Tooltip.prototype.setTheme = function (theme) {\n this.$element.className = CLASSNAME + \" \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n };\n Tooltip.prototype.show = function (text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n Tooltip.prototype.hide = function (e) {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.getElement().className = CLASSNAME;\n this.isOpen = false;\n }\n };\n Tooltip.prototype.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n Tooltip.prototype.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n Tooltip.prototype.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n function PopupManager() {\n this.popups = [];\n }\n PopupManager.prototype.addPopup = function (popup) {\n this.popups.push(popup);\n this.updatePopups();\n };\n PopupManager.prototype.removePopup = function (popup) {\n var index = this.popups.indexOf(popup);\n if (index !== -1) {\n this.popups.splice(index, 1);\n this.updatePopups();\n }\n };\n PopupManager.prototype.updatePopups = function () {\n var e_1, _a, e_2, _b;\n this.popups.sort(function (a, b) { return b.priority - a.priority; });\n var visiblepopups = [];\n try {\n for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n var popup = _d.value;\n var shouldDisplay = true;\n try {\n for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n var visiblePopup = visiblepopups_1_1.value;\n if (this.doPopupsOverlap(visiblePopup, popup)) {\n shouldDisplay = false;\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (shouldDisplay) {\n visiblepopups.push(popup);\n }\n else {\n popup.hide();\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n var rectA = popupA.getElement().getBoundingClientRect();\n var rectB = popupB.getElement().getBoundingClientRect();\n return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n > rectB.top);\n };\n return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n __extends(HoverTooltip, _super);\n function HoverTooltip(parentNode) {\n if (parentNode === void 0) { parentNode = document.body; }\n var _this = _super.call(this, parentNode) || this;\n _this.timeout = undefined;\n _this.lastT = 0;\n _this.idleTime = 350;\n _this.lastEvent = undefined;\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.waitForHover = _this.waitForHover.bind(_this);\n _this.hide = _this.hide.bind(_this);\n var el = _this.getElement();\n el.style.whiteSpace = \"pre-wrap\";\n el.style.pointerEvents = \"auto\";\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n el.tabIndex = -1;\n el.addEventListener(\"blur\", function () {\n if (!el.contains(document.activeElement))\n this.hide();\n }.bind(_this));\n el.addEventListener(\"wheel\", preventParentScroll);\n return _this;\n }\n HoverTooltip.prototype.addToEditor = function (editor) {\n editor.on(\"mousemove\", this.onMouseMove);\n editor.on(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, true);\n };\n HoverTooltip.prototype.removeFromEditor = function (editor) {\n editor.off(\"mousemove\", this.onMouseMove);\n editor.off(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, true);\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n };\n HoverTooltip.prototype.onMouseMove = function (e, editor) {\n this.lastEvent = e;\n this.lastT = Date.now();\n var isMousePressed = editor.$mouseHandler.isMousePressed;\n if (this.isOpen) {\n var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n if (!this.range\n || !this.range.contains(pos.row, pos.column)\n || isMousePressed\n || this.isOutsideOfText(this.lastEvent)) {\n this.hide();\n }\n }\n if (this.timeout || isMousePressed)\n return;\n this.lastEvent = e;\n this.timeout = setTimeout(this.waitForHover, this.idleTime);\n };\n HoverTooltip.prototype.waitForHover = function () {\n if (this.timeout)\n clearTimeout(this.timeout);\n var dt = Date.now() - this.lastT;\n if (this.idleTime - dt > 10) {\n this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n return;\n }\n this.timeout = null;\n if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n this.$gatherData(this.lastEvent, this.lastEvent.editor);\n }\n };\n HoverTooltip.prototype.isOutsideOfText = function (e) {\n var editor = e.editor;\n var docPos = e.getDocumentPosition();\n var line = editor.session.getLine(docPos.row);\n if (docPos.column == line.length) {\n var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n if (clippedPos.column != screenPos.column\n || clippedPos.row != screenPos.row) {\n return true;\n }\n }\n return false;\n };\n HoverTooltip.prototype.setDataProvider = function (value) {\n this.$gatherData = value;\n };\n HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n var MARGIN = 10;\n if (startingEvent && startingEvent != this.lastEvent)\n return;\n if (this.isOpen && document.activeElement == this.getElement())\n return;\n var renderer = editor.renderer;\n if (!this.isOpen) {\n popupManager.addPopup(this);\n this.$registerCloseEvents();\n this.setTheme(renderer.theme);\n }\n this.isOpen = true;\n this.addMarker(range, editor.session);\n this.range = Range.fromPoints(range.start, range.end);\n var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n var rect = renderer.scroller.getBoundingClientRect();\n if (position.pageX < rect.left)\n position.pageX = rect.left;\n var element = this.getElement();\n element.innerHTML = \"\";\n element.appendChild(domNode);\n element.style.maxHeight = \"\";\n element.style.display = \"block\";\n var labelHeight = element.clientHeight;\n var labelWidth = element.clientWidth;\n var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight;\n var isAbove = true;\n if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) {\n isAbove = false;\n }\n element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + \"px\";\n element.style.top = isAbove ? \"\" : position.pageY + renderer.lineHeight + \"px\";\n element.style.bottom = isAbove ? window.innerHeight - position.pageY + \"px\" : \"\";\n element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + \"px\";\n };\n HoverTooltip.prototype.addMarker = function (range, session) {\n if (this.marker) {\n this.$markerSession.removeMarker(this.marker);\n }\n this.$markerSession = session;\n this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n };\n HoverTooltip.prototype.hide = function (e) {\n if (!e && document.activeElement == this.getElement())\n return;\n if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n return;\n this.lastEvent = null;\n if (this.timeout)\n clearTimeout(this.timeout);\n this.timeout = null;\n this.addMarker(null);\n if (this.isOpen) {\n this.$removeCloseEvents();\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n popupManager.removePopup(this);\n }\n };\n HoverTooltip.prototype.$registerCloseEvents = function () {\n window.addEventListener(\"keydown\", this.hide, true);\n window.addEventListener(\"wheel\", this.hide, true);\n window.addEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.$removeCloseEvents = function () {\n window.removeEventListener(\"keydown\", this.hide, true);\n window.removeEventListener(\"wheel\", this.hide, true);\n window.removeEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.onMouseOut = function (e) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.lastEvent = null;\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n if (!e.relatedTarget.classList.contains(\"ace_content\"))\n this.hide();\n };\n return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/tooltip\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nvar nls = require(\"../config\").nls;\nvar GUTTER_TOOLTIP_LEFT_OFFSET = 5;\nvar GUTTER_TOOLTIP_TOP_OFFSET = 3;\nexports.GUTTER_TOOLTIP_LEFT_OFFSET = GUTTER_TOOLTIP_LEFT_OFFSET;\nexports.GUTTER_TOOLTIP_TOP_OFFSET = GUTTER_TOOLTIP_TOP_OFFSET;\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor, true);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\")\n return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n tooltip.showTooltip(row);\n if (!tooltip.isOpen)\n return;\n editor.on(\"mousewheel\", hideTooltip);\n editor.on(\"changeSession\", hideTooltip);\n window.addEventListener(\"keydown\", hideTooltip, true);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterRow = mouseEvent.getGutterRow();\n var gutterCell = gutter.$lines.get(gutterRow);\n if (gutterCell) {\n var gutterElement = gutterCell.element.querySelector(\".ace_gutter_annotation\");\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = (rect.right - GUTTER_TOOLTIP_LEFT_OFFSET) + \"px\";\n style.top = (rect.bottom - GUTTER_TOOLTIP_TOP_OFFSET) + \"px\";\n }\n else {\n moveTooltip(mouseEvent);\n }\n }\n }\n function hideTooltip(e) {\n if (e && e.type === \"keydown\" && (e.ctrlKey || e.metaKey))\n return;\n if (e && e.type === \"mouseout\" && (!e.relatedTarget || tooltip.getElement().contains(e.relatedTarget)))\n return;\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltip.isOpen) {\n tooltip.hideTooltip();\n editor.off(\"mousewheel\", hideTooltip);\n editor.off(\"changeSession\", hideTooltip);\n window.removeEventListener(\"keydown\", hideTooltip, true);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\") || dom.hasCssClass(target, \"ace_custom-widget\"))\n return hideTooltip();\n if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltip.isOpen)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip(e);\n }, 50);\n }, editor);\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n __extends(GutterTooltip, _super);\n function GutterTooltip(editor, isHover) {\n if (isHover === void 0) { isHover = false; }\n var _this = _super.call(this, editor.container) || this;\n _this.id = \"gt\" + (++GutterTooltip.$uid);\n _this.editor = editor;\n _this.visibleTooltipRow;\n var el = _this.getElement();\n el.setAttribute(\"role\", \"tooltip\");\n el.setAttribute(\"id\", _this.id);\n el.style.pointerEvents = \"auto\";\n if (isHover) {\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n }\n return _this;\n }\n GutterTooltip.prototype.onMouseOut = function (e) {\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n this.hideTooltip();\n };\n GutterTooltip.prototype.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n get: function () {\n return {\n error: {\n singular: nls(\"gutter-tooltip.aria-label.error.singular\", \"error\"),\n plural: nls(\"gutter-tooltip.aria-label.error.plural\", \"errors\")\n },\n security: {\n singular: nls(\"gutter-tooltip.aria-label.security.singular\", \"security finding\"),\n plural: nls(\"gutter-tooltip.aria-label.security.plural\", \"security findings\")\n },\n warning: {\n singular: nls(\"gutter-tooltip.aria-label.warning.singular\", \"warning\"),\n plural: nls(\"gutter-tooltip.aria-label.warning.plural\", \"warnings\")\n },\n info: {\n singular: nls(\"gutter-tooltip.aria-label.info.singular\", \"information message\"),\n plural: nls(\"gutter-tooltip.aria-label.info.plural\", \"information messages\")\n },\n hint: {\n singular: nls(\"gutter-tooltip.aria-label.hint.singular\", \"suggestion\"),\n plural: nls(\"gutter-tooltip.aria-label.hint.plural\", \"suggestions\")\n }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var _a;\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = {\n displayText: Array.from(annotationsInRow.displayText),\n type: Array.from(annotationsInRow.type)\n };\n else\n annotation = { displayText: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] };\n var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 };\n var mostSevereAnnotationTypeInFold;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!gutter.$annotations[i])\n continue;\n for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n var annotationType = gutter.$annotations[i].type[j];\n annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n if (!mostSevereAnnotationTypeInFold ||\n severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) {\n mostSevereAnnotationTypeInFold = annotationType;\n }\n }\n }\n if ([\"error\", \"security\", \"warning\"].includes(mostSevereAnnotationTypeInFold)) {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.displayText.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationTypeInFold + \"_fold\");\n }\n }\n if (annotation.displayText.length === 0)\n return this.hideTooltip();\n var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.displayText.length; i++) {\n var lineElement = dom.createElement(\"span\");\n var iconElement = dom.createElement(\"span\");\n (_a = iconElement.classList).add.apply(_a, [\"ace_\".concat(annotation.type[i]), iconClassName]);\n iconElement.setAttribute(\"aria-label\", \"\".concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular));\n iconElement.setAttribute(\"role\", \"img\");\n iconElement.appendChild(dom.createTextNode(\" \"));\n lineElement.appendChild(iconElement);\n lineElement.appendChild(dom.createTextNode(annotation.displayText[i]));\n lineElement.appendChild(dom.createElement(\"br\"));\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(lineElement);\n }\n var tooltipElement = this.getElement();\n dom.removeChildren(tooltipElement);\n annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); });\n tooltipElement.setAttribute(\"aria-live\", \"polite\");\n if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n var annotationNode = this.$findLinkedAnnotationNode(row);\n if (annotationNode) {\n annotationNode.setAttribute(\"aria-describedby\", this.id);\n }\n this.show();\n this.visibleTooltipRow = row;\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) {\n var cell = this.$findCellByRow(row);\n if (cell) {\n var element = cell.element;\n if (element.childNodes.length > 2) {\n return element.childNodes[2];\n }\n }\n };\n GutterTooltip.prototype.$findCellByRow = function (row) {\n return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; });\n };\n GutterTooltip.prototype.hideTooltip = function () {\n if (!this.isOpen) {\n return;\n }\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n if (this.visibleTooltipRow != undefined) {\n var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow);\n if (annotationNode) {\n annotationNode.removeAttribute(\"aria-describedby\");\n }\n }\n this.visibleTooltipRow = undefined;\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = [\"error\", \"security\", \"warning\", \"info\", \"hint\"];\n try {\n for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n var annotationType = annotationTypes_1_1.value;\n if (!annotations[annotationType].length)\n continue;\n var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return summary.join(\", \");\n };\n return GutterTooltip;\n}(Tooltip));\nGutterTooltip.$uid = 0;\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n }\n MouseEvent.prototype.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n MouseEvent.prototype.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n MouseEvent.prototype.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n MouseEvent.prototype.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n MouseEvent.prototype.getGutterRow = function () {\n var documentRow = this.getDocumentPosition().row;\n var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n return screenRow - screenTopRow;\n };\n MouseEvent.prototype.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n MouseEvent.prototype.getButton = function () {\n return event.getButton(this.domEvent);\n };\n MouseEvent.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n MouseEvent.prototype.getAccelKey = function () {\n return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n };\n return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && canExecuteCommand(\"selectall\") && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && canExecuteCommand(\"copy\") && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && canExecuteCommand(\"cut\") && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && canExecuteCommand(\"paste\") && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && canExecuteCommand(\"undo\") && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n canExecuteCommand(\"find\") && [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n canExecuteCommand(\"openCommandPalette\") && [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var canExecuteCommand = function (/** @type {string} */ cmd) {\n return editor.commands.canExecute(cmd, editor);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPalette\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!editor.getOption(\"enableMobileMenu\")) {\n if (contextMenu) {\n hideContextMenu();\n }\n return;\n }\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, //@ts-expect-error TODO: seems mistyping - should be boolean\n editor);\n }\n MouseHandler.prototype.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n MouseHandler.prototype.setState = function (state) {\n this.state = state;\n };\n MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var continueCapture = true;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n continueCapture = false;\n if (editor.session)\n onCaptureUpdate();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureUpdate = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n var onCaptureInterval = function () {\n if (continueCapture) {\n onCaptureUpdate();\n event.nextFrame(onCaptureInterval);\n }\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n onCaptureInterval();\n };\n MouseHandler.prototype.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n MouseHandler.prototype.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n }\n return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n }\n KeyBinding.prototype.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n KeyBinding.prototype.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n KeyBinding.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n KeyBinding.prototype.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n KeyBinding.prototype.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n }\n BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n BidiHandler.prototype.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n BidiHandler.prototype.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n BidiHandler.prototype.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n BidiHandler.prototype.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n BidiHandler.prototype.markAsDirty = function () {\n this.currentRow = null;\n };\n BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n BidiHandler.prototype.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n BidiHandler.prototype.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n BidiHandler.prototype.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n BidiHandler.prototype.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n BidiHandler.prototype.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n BidiHandler.prototype.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n }\n Selection.prototype.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n Selection.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n Selection.prototype.getCursor = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n Selection.prototype.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n Selection.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n Selection.prototype.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n Selection.prototype.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n Selection.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n Selection.prototype.setRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n Selection.prototype.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n Selection.prototype.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n Selection.prototype.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n Selection.prototype.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n Selection.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n Selection.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n Selection.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n Selection.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n Selection.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n Selection.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n Selection.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n Selection.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n Selection.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n Selection.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n Selection.prototype.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n Selection.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n Selection.prototype.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n Selection.prototype.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n Selection.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n Selection.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n Selection.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n Selection.prototype.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n Selection.prototype.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n Selection.prototype.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n Selection.prototype.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n Selection.prototype.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n Selection.prototype.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n Selection.prototype.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n Selection.prototype.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n Selection.prototype.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n Selection.prototype.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n Selection.prototype.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n Selection.prototype.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n Selection.prototype.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n Selection.prototype.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n Selection.prototype.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n Selection.prototype.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n Selection.prototype.toJSON = function () {\n if (this.rangeCount) { var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else { var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n Selection.prototype.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n Selection.prototype.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\n this.splitRegex;\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n }\n Tokenizer.prototype.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n Tokenizer.prototype.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n Tokenizer.prototype.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = /**@type{string}*/ (startState) || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state[\"processed\"] = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (includeName === \"$self\")\n includeName = \"start\";\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n }\n TokenIterator.prototype.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentTokenRow = function () {\n return this.$row;\n };\n TokenIterator.prototype.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n TokenIterator.prototype.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n TokenIterator.prototype.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n options = options || {};\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n var token = session.getTokenAt(cursor.row, cursor.column);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (token && /(?:string)\\.quasi|\\.xml/.test(token.type)) {\n var excludeTokens = [\n /tag\\-(?:open|name)/, /attribute\\-name/\n ];\n if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\\.quasi/.test(token.type)\n && token.value[cursor.column - token.start - 1] !== '$')\n return;\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(rightChar);\n var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n if (options.closeDocComment !== false) {\n this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n if (cursor.column === 0) {\n return;\n }\n var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\n var tokens = session.getTokens(cursor.row);\n var index = 0;\n for (var i = 0; i < tokens.length; i++) {\n index += tokens[i].value.length;\n var currentToken = tokens[i];\n if (index >= cursor.column) {\n if (index === cursor.column) {\n if (!/\\.doc/.test(currentToken.type)) {\n return;\n }\n if (/\\*\\//.test(currentToken.value)) {\n var nextToken = tokens[i + 1];\n if (!nextToken || !/\\.doc/.test(nextToken.type)) {\n return;\n }\n }\n }\n var cursorPosInToken = cursor.column - (index - currentToken.value.length);\n var closeDocPos = currentToken.value.indexOf(\"*/\");\n var openDocPos = currentToken.value.indexOf(\"/**\", closeDocPos > -1 ? closeDocPos + 2 : 0);\n if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) {\n return;\n }\n if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos\n && cursorPosInToken <= openDocPos || !/\\.doc/.test(currentToken.type)) {\n return;\n }\n break;\n }\n }\n var indent = this.$getIndent(line);\n if (/\\s*\\*/.test(nextLine)) {\n if (/^\\s*\\*/.test(line)) {\n return {\n text: text + indent + \"* \",\n selection: [1, 2 + indent.length, 1, 2 + indent.length]\n };\n }\n else {\n return {\n text: text + indent + \" * \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n }\n if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n return {\n text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n selection: [1, 4 + indent.length, 1, 4 + indent.length]\n };\n }\n }\n });\n }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n var _loop_1 = function (i) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] =\n function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this_1));\n };\n var this_1 = this;\n for (var i = 0; i < delegations.length; i++) {\n _loop_1(i);\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer[\"rules\"];\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n LineWidgets.prototype.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n return 1 + h;\n }\n else {\n return this[\"$wrapData\"][row].length + 1 + h;\n }\n };\n LineWidgets.prototype.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n LineWidgets.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n LineWidgets.prototype.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n LineWidgets.prototype.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n LineWidgets.prototype.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n LineWidgets.prototype.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n LineWidgets.prototype.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n LineWidgets.prototype.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n LineWidgets.prototype.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.text && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.textContent = w.text;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n if (w.className) {\n dom.addCssClass(w.el, w.className);\n }\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = \"5\";\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = \"3\";\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n LineWidgets.prototype.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n LineWidgets.prototype.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n LineWidgets.prototype.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n LineWidgets.prototype.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n LineWidgets.prototype.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n function Anchor(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof row != \"number\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n }\n Anchor.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n Anchor.prototype.getDocument = function () {\n return this.document;\n };\n Anchor.prototype.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n Anchor.prototype.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n Anchor.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n Anchor.prototype.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n Anchor.prototype.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n function Document(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n }\n Document.prototype.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n Document.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n Document.prototype.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n Document.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n Document.prototype.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n };\n Document.prototype.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n Document.prototype.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n Document.prototype.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n Document.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n Document.prototype.getLength = function () {\n return this.$lines.length;\n };\n Document.prototype.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n Document.prototype.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n Document.prototype.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n Document.prototype.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n Document.prototype.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n Document.prototype.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n Document.prototype.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n Document.prototype.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n Document.prototype.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n Document.prototype.pos = function (row, column) {\n return { row: row, column: column };\n };\n Document.prototype.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n Document.prototype.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n Document.prototype.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n Document.prototype.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n Document.prototype.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n Document.prototype.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n Document.prototype.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n Document.prototype.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n Document.prototype.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n Document.prototype.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n Document.prototype.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n Document.prototype.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n Document.prototype.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n Document.prototype.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n Document.prototype.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n function BackgroundTokenizer(tokenizer, session) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n }\n BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n BackgroundTokenizer.prototype.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n BackgroundTokenizer.prototype.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n BackgroundTokenizer.prototype.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n BackgroundTokenizer.prototype.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n BackgroundTokenizer.prototype.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n BackgroundTokenizer.prototype.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n function SearchHighlight(regExp, clazz, type) {\n if (type === void 0) { type = \"text\"; }\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type;\n this.docLen = 0;\n }\n SearchHighlight.prototype.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow;\n var end = config.lastRow;\n var renderedMarkerRanges = {};\n var _search = session.$editor && session.$editor.$search;\n var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions());\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null || session.getValue().length != this.docLen) {\n if (mtSearch) {\n ranges = [];\n var match = _search.$multiLineForward(session, this.regExp, i, end);\n if (match) {\n var end_row = match.endRow <= end ? match.endRow - 1 : end;\n if (end_row > i)\n i = end_row;\n ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol));\n }\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n }\n else {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n }\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n if (ranges.length === 0)\n continue;\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n this.docLen = session.getValue().length;\n };\n return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\n this.$keepRedoStack;\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n }\n UndoManager.prototype.addSession = function (session) {\n this.$session = session;\n };\n UndoManager.prototype.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n UndoManager.prototype.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n UndoManager.prototype.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n UndoManager.prototype.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n UndoManager.prototype.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n UndoManager.prototype.getRevision = function () {\n return this.$rev;\n };\n UndoManager.prototype.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n UndoManager.prototype.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n UndoManager.prototype.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n UndoManager.prototype.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n UndoManager.prototype.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n UndoManager.prototype.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n UndoManager.prototype.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n UndoManager.prototype.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n UndoManager.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n UndoManager.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n };\n UndoManager.prototype.fromJSON = function (json) {\n this.reset();\n this.$undoStack = json.$undoStack;\n this.$redoStack = json.$redoStack;\n };\n UndoManager.prototype.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n FoldLine.prototype.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n FoldLine.prototype.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n FoldLine.prototype.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n FoldLine.prototype.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n FoldLine.prototype.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n FoldLine.prototype.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n FoldLine.prototype.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n FoldLine.prototype.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n FoldLine.prototype.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n }\n RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n RangeList.prototype.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n RangeList.prototype.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n RangeList.prototype.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n RangeList.prototype.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n RangeList.prototype.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n RangeList.prototype.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n RangeList.prototype.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n RangeList.prototype.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n RangeList.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n RangeList.prototype.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n RangeList.prototype.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n RangeList.prototype.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n __extends(Fold, _super);\n function Fold(range, placeholder) {\n var _this = _super.call(this) || this;\n _this.foldLine = null;\n _this.placeholder = placeholder;\n _this.range = range;\n _this.start = range.start;\n _this.end = range.end;\n _this.sameRow = range.start.row == range.end.row;\n _this.subFolds = _this.ranges = [];\n return _this;\n }\n Fold.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n Fold.prototype.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n Fold.prototype.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n Fold.prototype.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n Fold.prototype.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (tryToUnfold) {\n var foldLine = this.getFoldLine(cursor.row);\n if (foldLine)\n this.expandFolds(foldLine.folds);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start|\\\\.doc\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator = new TokenIterator(this, row, column);\n var initState = this.getState(iterator.$row);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (initState.toString() !== state.toString())\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n if (range.start.row == range.end.row && range.start.column > range.end.column)\n return;\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n if (e instanceof MouseEvent)\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos, isBackwards) {\n var line = this.getLine(pos.row);\n var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n var chr = !isBackwards && line.charAt(pos.column - 1);\n var match = chr && chr.match(bracketsRegExp);\n if (!match) {\n chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(bracketsRegExp);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n .replace(/-close\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n .replace(/-open\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for \")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/line_widgets\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n function EditSession(text, mode) { this.doc;\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$editor = null;\n this.prevOp = {};\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.$gutterCustomWidgets = {};\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(/**@type{string}*/ (text));\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.selection.on(\"changeCursor\", this.$onSelectionChange);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n this.$initOperationListeners();\n }\n EditSession.prototype.$initOperationListeners = function () {\n var _this = this;\n this.curOp = null;\n this.on(\"change\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.docChanged = true;\n }, true);\n this.on(\"changeSelection\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.selectionChanged = true;\n }, true);\n this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n };\n EditSession.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command) {\n return;\n }\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n commandEvent = {};\n }\n this.$operationResetTimer.schedule();\n this.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n this._signal(\"startOperation\", commandEvent);\n };\n EditSession.prototype.endOperation = function (e) {\n if (this.curOp) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n this._signal(\"endOperation\", e);\n return;\n }\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\") {\n return;\n }\n var currentSelection = this.selection.toJSON();\n this.curOp.selectionAfter = currentSelection;\n this.$lastSel = this.selection.toJSON();\n this.getUndoManager().addSelection(currentSelection);\n this._signal(\"beforeEndOperation\");\n this.prevOp = this.curOp;\n this.curOp = null;\n this._signal(\"endOperation\", e);\n }\n };\n EditSession.prototype.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n EditSession.prototype.getDocument = function () {\n return this.doc;\n };\n Object.defineProperty(EditSession.prototype, \"widgetManager\", {\n get: function () {\n var widgetManager = new LineWidgets(this);\n this.widgetManager = widgetManager;\n if (this.$editor)\n widgetManager.attach(this.$editor);\n return widgetManager;\n },\n set: function (value) {\n Object.defineProperty(this, \"widgetManager\", {\n writable: true,\n enumerable: true,\n configurable: true,\n value: value,\n });\n },\n enumerable: false,\n configurable: true\n });\n EditSession.prototype.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n EditSession.prototype.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n EditSession.prototype.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n EditSession.prototype.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n EditSession.prototype.onSelectionChange = function () {\n this._signal(\"changeSelection\");\n };\n EditSession.prototype.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n EditSession.fromJSON = function (session) {\n if (typeof session == \"string\")\n session = JSON.parse(session);\n var undoManager = new UndoManager();\n undoManager.$undoStack = session.history.undo;\n undoManager.$redoStack = session.history.redo;\n undoManager.mark = session.history.mark;\n undoManager.$rev = session.history.rev;\n var editSession = new EditSession(session.value);\n session.folds.forEach(function (fold) {\n editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n });\n editSession.setAnnotations(session.annotations);\n editSession.setBreakpoints(session.breakpoints);\n editSession.setMode(session.mode);\n editSession.setScrollLeft(session.scrollLeft);\n editSession.setScrollTop(session.scrollTop);\n editSession.setUndoManager(undoManager);\n editSession.selection.fromJSON(session.selection);\n return editSession;\n };\n EditSession.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (fold) {\n return fold.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n };\n EditSession.prototype.toString = function () {\n return this.doc.getValue();\n };\n EditSession.prototype.getSelection = function () {\n return this.selection;\n };\n EditSession.prototype.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n EditSession.prototype.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n EditSession.prototype.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n EditSession.prototype.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n EditSession.prototype.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n EditSession.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n EditSession.prototype.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n EditSession.prototype.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n EditSession.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n EditSession.prototype.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n EditSession.prototype.getTabSize = function () {\n return this.$tabSize;\n };\n EditSession.prototype.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n EditSession.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n EditSession.prototype.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n EditSession.prototype.getOverwrite = function () {\n return this.$overwrite;\n };\n EditSession.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n EditSession.prototype.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.removeGutterCustomWidget = function (row) {\n if (this.$editor) {\n this.$editor.renderer.$gutterLayer.$removeCustomWidget(row);\n }\n };\n EditSession.prototype.addGutterCustomWidget = function (row, attributes) {\n if (this.$editor) {\n this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes);\n }\n };\n EditSession.prototype.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n };\n EditSession.prototype.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n EditSession.prototype.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n EditSession.prototype.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n EditSession.prototype.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n EditSession.prototype.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n EditSession.prototype.getAnnotations = function () {\n return this.$annotations || [];\n };\n EditSession.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n EditSession.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n EditSession.prototype.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n EditSession.prototype.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n EditSession.prototype.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n EditSession.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n EditSession.prototype.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n EditSession.prototype.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.destroyed) {\n return;\n }\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n EditSession.prototype.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n EditSession.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n EditSession.prototype.getMode = function () {\n return this.$mode;\n };\n EditSession.prototype.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n EditSession.prototype.getScrollTop = function () {\n return this.$scrollTop;\n };\n EditSession.prototype.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n EditSession.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n EditSession.prototype.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n EditSession.prototype.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n EditSession.prototype.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n EditSession.prototype.getLine = function (row) {\n return this.doc.getLine(row);\n };\n EditSession.prototype.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n EditSession.prototype.getLength = function () {\n return this.doc.getLength();\n };\n EditSession.prototype.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n EditSession.prototype.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n EditSession.prototype.remove = function (range) {\n return this.doc.remove(range);\n };\n EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n EditSession.prototype.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n EditSession.prototype.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n EditSession.prototype.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n EditSession.prototype.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n EditSession.prototype.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n EditSession.prototype.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n EditSession.prototype.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n EditSession.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n EditSession.prototype.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n EditSession.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n EditSession.prototype.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n EditSession.prototype.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n EditSession.prototype.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n EditSession.prototype.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n EditSession.prototype.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n EditSession.prototype.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n else\n pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n EditSession.prototype.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n EditSession.prototype.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n EditSession.prototype.getPrecedingCharacter = function () {\n var pos = this.selection.getCursor();\n if (pos.column === 0) {\n return pos.row === 0 ? \"\" : this.doc.getNewLineCharacter();\n }\n var currentLine = this.getLine(pos.row);\n return currentLine[pos.column - 1];\n };\n EditSession.prototype.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.endOperation();\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n if (this.selection) {\n this.selection.off(\"changeCursor\", this.$onSelectionChange);\n this.selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.selection.detach();\n };\n return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n min: null,\n max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n function Search() {\n this.$options = {};\n }\n Search.prototype.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n Search.prototype.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n Search.prototype.setOptions = function (options) {\n this.$options = options;\n };\n Search.prototype.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n Search.prototype.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var matches, i = 0; i < lines.length; i++) {\n if (this.$isMultilineSearch(options)) {\n var lng = lines.length - 1;\n matches = this.$multiLineForward(session, re, i, lng);\n if (matches) {\n var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng;\n if (end_row > i)\n i = end_row;\n ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol));\n }\n }\n else {\n matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n Search.prototype.parseReplaceString = function (replaceString) {\n var CharCode = {\n DollarSign: 36,\n Ampersand: 38,\n Digit0: 48,\n Digit1: 49,\n Digit9: 57,\n Backslash: 92,\n n: 110,\n t: 116\n };\n var replacement = '';\n for (var i = 0, len = replaceString.length; i < len; i++) {\n var chCode = replaceString.charCodeAt(i);\n if (chCode === CharCode.Backslash) {\n i++;\n if (i >= len) {\n replacement += \"\\\\\";\n break;\n }\n var nextChCode = replaceString.charCodeAt(i);\n switch (nextChCode) {\n case CharCode.Backslash:\n replacement += \"\\\\\";\n break;\n case CharCode.n:\n replacement += \"\\n\";\n break;\n case CharCode.t:\n replacement += \"\\t\";\n break;\n }\n continue;\n }\n if (chCode === CharCode.DollarSign) {\n i++;\n if (i >= len) {\n replacement += \"$\";\n break;\n }\n var nextChCode_1 = replaceString.charCodeAt(i);\n if (nextChCode_1 === CharCode.DollarSign) {\n replacement += \"$$\";\n continue;\n }\n if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) {\n replacement += \"$&\";\n continue;\n }\n if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) {\n replacement += \"$\" + replaceString[i];\n continue;\n }\n }\n replacement += replaceString[i];\n }\n return replacement || replaceString;\n };\n Search.prototype.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var mtSearch = this.$isMultilineSearch(options);\n if (mtSearch)\n input = input.replace(/\\r\\n|\\r|\\n/g, \"\\n\");\n var match = re.exec(input);\n if (!match || (!mtSearch && match[0].length != input.length))\n return null;\n replacement = options.regExp\n ? this.parseReplaceString(replacement)\n : replacement.replace(/\\$/g, \"$$$$\");\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n try {\n new RegExp(needle, \"u\");\n options.$supportsUnicodeFlag = true;\n modifier += \"u\";\n }\n catch (e) {\n options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n }\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n Search.prototype.$isMultilineSearch = function (options) {\n return options.re && /\\\\r\\\\n|\\\\r|\\\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine;\n };\n Search.prototype.$multiLineForward = function (session, re, start, last) {\n var line, chunk = chunkEnd(session, start);\n for (var row = start; row <= last;) {\n for (var i = 0; i < chunk; i++) {\n if (row > last)\n break;\n var next = session.getLine(row++);\n line = line == null ? next : line + \"\\n\" + next;\n }\n var match = re.exec(line);\n re.lastIndex = 0;\n if (match) {\n var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n var matchedText = match[0].split(\"\\n\");\n var startRow = start + beforeMatch.length - 1;\n var startCol = beforeMatch[beforeMatch.length - 1].length;\n var endRow = startRow + matchedText.length - 1;\n var endCol = matchedText.length == 1\n ? startCol + matchedText[0].length\n : matchedText[matchedText.length - 1].length;\n return {\n startRow: startRow,\n startCol: startCol,\n endRow: endRow,\n endCol: endCol\n };\n }\n }\n return null;\n };\n Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) {\n var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex;\n for (var row = start; row >= first;) {\n for (var i = 0; i < chunk && row >= first; i++) {\n var next = session.getLine(row--);\n line = line == null ? next : next + \"\\n\" + line;\n }\n var match = multiLineBackwardMatch(line, re, endMargin);\n if (match) {\n var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n var matchedText = match[0].split(\"\\n\");\n var startRow = row + beforeMatch.length;\n var startCol = beforeMatch[beforeMatch.length - 1].length;\n var endRow = startRow + matchedText.length - 1;\n var endCol = matchedText.length == 1\n ? startCol + matchedText[0].length\n : matchedText[matchedText.length - 1].length;\n return {\n startRow: startRow,\n startCol: startCol,\n endRow: endRow,\n endCol: endCol\n };\n }\n }\n return null;\n };\n Search.prototype.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var mtSearch = this.$isMultilineSearch(options);\n var mtForward = this.$multiLineForward;\n var mtBackward = this.$multiLineBackward;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var supportsUnicodeFlag = re.unicode;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n if (mtSearch) {\n var pos = mtBackward(session, re, endIndex, row, firstRow);\n if (!pos)\n return false;\n if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n return true;\n }\n else {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n re.lastIndex = startIndex;\n if (mtSearch) {\n var pos = mtForward(session, re, row, lastRow);\n if (pos) {\n var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow;\n if (end_row > row)\n row = end_row;\n }\n if (!pos)\n return false;\n if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n return true;\n }\n else {\n var line = session.getLine(row);\n var last;\n var m;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n if (last >= line.length)\n return false;\n }\n }\n }\n };\n }\n return { forEach: forEach };\n };\n return Search;\n}());\nfunction addWordBoundary(needle, options) {\n var supportsLookbehind = lang.supportsLookbehind();\n function wordBoundary(c, firstChar) {\n if (firstChar === void 0) { firstChar = true; }\n var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n if (wordRegExp.test(c) || options.regExp) {\n if (supportsLookbehind && options.$supportsUnicodeFlag) {\n if (firstChar)\n return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n }\n return \"\\\\b\";\n }\n return \"\";\n }\n var needleArray = Array.from(needle);\n var firstChar = needleArray[0];\n var lastChar = needleArray[needleArray.length - 1];\n return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nfunction multiLineBackwardMatch(line, re, endMargin) {\n var match = null;\n var from = 0;\n while (from <= line.length) {\n re.lastIndex = from;\n var newMatch = re.exec(line);\n if (!newMatch)\n break;\n var end = newMatch.index + newMatch[0].length;\n if (end > line.length - endMargin)\n break;\n if (!match || end > match.index + match[0].length)\n match = newMatch;\n from = newMatch.index + 1;\n }\n return match;\n}\nfunction chunkEnd(session, start) {\n var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row;\n return targetLine + 1;\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n function MultiHashHandler(config, platform) {\n this.$init(config, platform, false);\n }\n MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = $singleCommand;\n };\n MultiHashHandler.prototype.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n MultiHashHandler.prototype.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n MultiHashHandler.prototype.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n MultiHashHandler.prototype.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n MultiHashHandler.prototype.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n MultiHashHandler.prototype._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n MultiHashHandler.prototype.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n MultiHashHandler.prototype.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n return MultiHashHandler;\n}());\nfunction getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n __extends(HashHandler, _super);\n function HashHandler(config, platform) {\n var _this = _super.call(this, config, platform) || this;\n _this.$singleCommand = true;\n return _this;\n }\n return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager(platform, commands) {\n var _this = _super.call(this, commands, platform) || this;\n _this.byName = _this.commands;\n _this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n return _this;\n }\n CommandManager.prototype.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n var e = { editor: editor, command: command, args: args };\n if (!this.canExecute(command, editor)) {\n this._signal(\"commandUnavailable\", e);\n return false;\n }\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n CommandManager.prototype.canExecute = function (command, editor) {\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n return true;\n };\n CommandManager.prototype.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n CommandManager.prototype.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n CommandManager.prototype.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"openlink\",\n bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n exec: function (editor) { editor.openLink(); }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (editor) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\nvar GutterKeyboardHandler = /** @class */ (function () {\n function GutterKeyboardHandler(editor) {\n this.editor = editor;\n this.gutterLayer = editor.renderer.$gutterLayer;\n this.element = editor.renderer.$gutter;\n this.lines = editor.renderer.$gutterLayer.$lines;\n this.activeRowIndex = null;\n this.activeLane = null;\n this.annotationTooltip = new GutterTooltip(this.editor);\n }\n GutterKeyboardHandler.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n if (this.annotationTooltip.isOpen) {\n e.preventDefault();\n if (e.keyCode === keys[\"escape\"])\n this.annotationTooltip.hideTooltip();\n return;\n }\n if (e.target === this.element) {\n if (e.keyCode != keys[\"enter\"]) {\n return;\n }\n e.preventDefault();\n var row = this.editor.getCursorPosition().row;\n if (!this.editor.isRowVisible(row))\n this.editor.scrollToLine(row, true, true);\n setTimeout(\n function () {\n var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null)\n return;\n var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index);\n if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) {\n this.activeLane = \"fold\";\n this.activeRowIndex = nearestFoldLaneWidgetIndex;\n if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) {\n this.$focusCustomWidget(this.activeRowIndex);\n return;\n }\n else {\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n else {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }.bind(this), 10);\n return;\n }\n this.$handleGutterKeyboardInteraction(e);\n setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n }.bind(this), 10);\n };\n GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === keys[\"tab\"]) {\n e.preventDefault();\n return;\n }\n if (e.keyCode === keys[\"escape\"]) {\n e.preventDefault();\n this.$blurGutter();\n this.element.focus();\n this.lane = null;\n return;\n }\n if (e.keyCode === keys[\"up\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"down\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"left\"]) {\n e.preventDefault();\n this.$switchLane(\"annotation\");\n return;\n }\n if (e.keyCode === keys[\"right\"]) {\n e.preventDefault();\n this.$switchLane(\"fold\");\n return;\n }\n if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n var row = this.$rowIndexToRow(this.activeRowIndex);\n var customWidget = this.editor.session.$gutterCustomWidgets[row];\n if (customWidget) {\n if (customWidget.callbacks && customWidget.callbacks.onClick) {\n customWidget.callbacks.onClick(e, row);\n }\n }\n else if (this.gutterLayer.session.foldWidgets[row] === 'start') {\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(\n function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== row) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(row);\n this.$focusFoldWidget(this.activeRowIndex);\n }\n }.bind(this), 10);\n break;\n }\n else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n break;\n }\n return;\n case \"annotation\":\n var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n break;\n }\n return;\n }\n };\n GutterKeyboardHandler.prototype.$blurGutter = function () {\n if (this.activeRowIndex !== null) {\n switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\n return;\n };\n GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = !!this.$getCustomWidget(index);\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[1];\n };\n GutterKeyboardHandler.prototype.$getCustomWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[3];\n };\n GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) {\n if (this.$isCustomWidgetVisible(index))\n return index;\n if (this.$isFoldWidgetVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isCustomWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i))\n return index + i;\n if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n if (this.$isAnnotationVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n if (index == null)\n return;\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n foldWidget.focus();\n };\n GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) {\n if (index == null)\n return;\n var customWidget = this.$getCustomWidget(index);\n if (customWidget) {\n customWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n customWidget.focus();\n }\n };\n GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n if (index == null)\n return;\n var annotation = this.$getAnnotation(index);\n annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n annotation.focus();\n };\n GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n foldWidget.blur();\n };\n GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) {\n var customWidget = this.$getCustomWidget(index);\n if (customWidget) {\n customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n customWidget.blur();\n }\n };\n GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n var annotation = this.$getAnnotation(index);\n annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n annotation.blur();\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n if (this.$isFoldWidgetVisible(index)) {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n else {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n if (this.$isFoldWidgetVisible(index)) {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n else {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) {\n if (num1 === null)\n return num2;\n if (num2 === null)\n return num1;\n return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2;\n };\n GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n switch (desinationLane) {\n case \"annotation\":\n if (this.activeLane === \"annotation\") {\n break;\n }\n var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n if (annotationIndex == null) {\n break;\n }\n this.activeLane = \"annotation\";\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex);\n if (foldLaneWidgetIndex === null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldLaneWidgetIndex;\n if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n else {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n break;\n }\n return;\n };\n GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n var cell = this.lines.get(index);\n if (cell)\n return cell.row;\n return null;\n };\n GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n for (var i = 0; i < this.lines.getLength(); i++) {\n var cell = this.lines.get(i);\n if (cell.row == row)\n return i;\n }\n return null;\n };\n return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n this.gutterKeyboardHandler = gutterKeyboardHandler;\n this.domEvent = domEvent;\n }\n GutterKeyboardEvent.prototype.getKey = function () {\n return keys.keyCodeToString(this.domEvent.keyCode);\n };\n GutterKeyboardEvent.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n };\n GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"annotation\";\n };\n GutterKeyboardEvent.prototype.isInFoldLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"fold\";\n };\n return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar event = require(\"./lib/event\");\nvar HoverTooltip = require(\"./tooltip\").HoverTooltip;\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) {\n this.id = \"editor\" + (++Editor.$uid); this.session;\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n }\n Editor.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n this.session.startOperation(commandEvent);\n };\n Editor.prototype.endOperation = function (e) {\n this.session.endOperation(e);\n };\n Editor.prototype.onStartOperation = function (commandEvent) {\n this.curOp = this.session.curOp;\n this.curOp.scrollTop = this.renderer.scrollTop;\n this.prevOp = this.session.prevOp;\n if (!commandEvent) {\n this.previousCommand = null;\n }\n };\n Editor.prototype.onEndOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n return;\n }\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n this.$lastSel = this.session.selection.toJSON();\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n Editor.prototype.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n Editor.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n Editor.prototype.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.session.off(\"startOperation\", this.$onStartOperation);\n this.session.off(\"endOperation\", this.$onEndOperation);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.$onStartOperation = this.onStartOperation.bind(this);\n this.session.on(\"startOperation\", this.$onStartOperation);\n this.$onEndOperation = this.onEndOperation.bind(this);\n this.session.on(\"endOperation\", this.$onEndOperation);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n if (oldSession)\n oldSession.$editor = null;\n session && session._signal(\"changeEditor\", { editor: this });\n if (session)\n session.$editor = this;\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n Editor.prototype.getSession = function () {\n return this.session;\n };\n Editor.prototype.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n Editor.prototype.getValue = function () {\n return this.session.getValue();\n };\n Editor.prototype.getSelection = function () {\n return this.selection;\n };\n Editor.prototype.resize = function (force) {\n this.renderer.onResize(force);\n };\n Editor.prototype.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n Editor.prototype.getTheme = function () {\n return this.renderer.getTheme();\n };\n Editor.prototype.setStyle = function (style, incluude) {\n this.renderer.setStyle(style, incluude);\n };\n Editor.prototype.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n Editor.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n Editor.prototype.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n Editor.prototype.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var handler = self.getKeyboardHandler();\n var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges) {\n ranges = [\n tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName,\n tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName\n ];\n }\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n Editor.prototype.focus = function () {\n this.textInput.focus();\n };\n Editor.prototype.isFocused = function () {\n return this.textInput.isFocused();\n };\n Editor.prototype.blur = function () {\n this.textInput.blur();\n };\n Editor.prototype.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n Editor.prototype.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n Editor.prototype.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n Editor.prototype.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n Editor.prototype.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n Editor.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n Editor.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n Editor.prototype.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n Editor.prototype.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n Editor.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n Editor.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n Editor.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n Editor.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n Editor.prototype.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n Editor.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n Editor.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n Editor.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n Editor.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n Editor.prototype.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n Editor.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n Editor.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n Editor.prototype.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n Editor.prototype.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n Editor.prototype.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n Editor.prototype.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n Editor.prototype.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var ranges = this.selection.isEmpty()\n ? [new Range(0, 0, session.doc.getLength() - 1, 0)]\n : this.selection.getAllRanges();\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var tab = session.getTabString();\n for (var i = 0; i < ranges.length; i++) {\n var startRow = ranges[i].start.row;\n var endRow = ranges[i].end.row;\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n var line = session.getLine(row);\n var currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n var range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n }\n };\n Editor.prototype.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n Editor.prototype.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n Editor.prototype.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n Editor.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n Editor.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n Editor.prototype.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n Editor.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n Editor.prototype.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n Editor.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n Editor.prototype.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n Editor.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n Editor.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n Editor.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n Editor.prototype.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n Editor.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n Editor.prototype.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n Editor.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n Editor.prototype.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n Editor.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n Editor.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n Editor.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n Editor.prototype.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n Editor.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n Editor.prototype.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n Editor.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n Editor.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n Editor.prototype.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n Editor.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n Editor.prototype.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n Editor.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n Editor.prototype.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n Editor.prototype.setGhostText = function (text, position) {\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n this.renderer.removeGhostText();\n };\n Editor.prototype.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n Editor.prototype.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n Editor.prototype.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n Editor.prototype.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n Editor.prototype.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n Editor.prototype.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n Editor.prototype.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n Editor.prototype.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n Editor.prototype.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n Editor.prototype.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n Editor.prototype.findLinkAt = function (row, column) {\n var e_1, _a;\n var line = this.session.getLine(row);\n var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n var columnPosition = column;\n if (columnPosition < 0)\n columnPosition = 0;\n var previousPosition = 0, currentPosition = 0, match;\n try {\n for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n var item = wordParts_1_1.value;\n currentPosition = previousPosition + item.length;\n if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n }\n previousPosition = currentPosition;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return match;\n };\n Editor.prototype.openLink = function () {\n var cursor = this.selection.getCursor();\n var url = this.findLinkAt(cursor.row, cursor.column);\n if (url)\n window.open(url, '_blank');\n return url != null;\n };\n Editor.prototype.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n Editor.prototype.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range));\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n Editor.prototype.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n Editor.prototype.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n Editor.prototype.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n Editor.prototype.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n Editor.prototype.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n Editor.prototype.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n Editor.prototype.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n Editor.prototype.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n Editor.prototype.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n Editor.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n Editor.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n Editor.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n Editor.prototype.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n Editor.prototype.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n Editor.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n Editor.prototype.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n Editor.prototype.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n Editor.prototype.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n Editor.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n Editor.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n Editor.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n Editor.prototype.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n Editor.prototype.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n Editor.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n Editor.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n Editor.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n };\n Editor.prototype.selectAll = function () {\n this.selection.selectAll();\n };\n Editor.prototype.clearSelection = function () {\n this.selection.clearSelection();\n };\n Editor.prototype.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n Editor.prototype.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n Editor.prototype.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n Editor.prototype.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n Editor.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n Editor.prototype.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n Editor.prototype.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n Editor.prototype.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n Editor.prototype.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.destroy = function () {\n this.destroyed = true;\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = [];\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n Editor.prototype.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n Editor.prototype.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"ace/ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (/**@type{boolean}*/ readOnly) {\n var _this = this;\n this.textInput.setReadOnly(readOnly);\n if (this.destroyed)\n return;\n this.$resetCursorStyle();\n if (!this.$readOnlyCallback) {\n this.$readOnlyCallback = function (e) {\n var shouldShow = false;\n if (e && e.type == \"keydown\") {\n if (e && e.key && !e.ctrlKey && !e.metaKey) {\n if (e.key == \" \")\n e.preventDefault();\n shouldShow = e.key.length == 1;\n }\n if (!shouldShow)\n return;\n }\n else if (e && e.type !== \"exec\") {\n shouldShow = true;\n }\n if (shouldShow) {\n if (!_this.hoverTooltip) {\n _this.hoverTooltip = new HoverTooltip();\n }\n var domNode = dom.createElement(\"div\");\n domNode.textContent = nls(\"editor.tooltip.disable-editing\", \"Editing is disabled\");\n if (!_this.hoverTooltip.isOpen) {\n _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode);\n }\n }\n else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) {\n _this.hoverTooltip.hide();\n }\n };\n }\n var textArea = this.textInput.getElement();\n if (readOnly) {\n event.addListener(textArea, \"keydown\", this.$readOnlyCallback, this);\n this.commands.on(\"exec\", this.$readOnlyCallback);\n this.commands.on(\"commandUnavailable\", this.$readOnlyCallback);\n }\n else {\n event.removeListener(textArea, \"keydown\", this.$readOnlyCallback);\n this.commands.off(\"exec\", this.$readOnlyCallback);\n this.commands.off(\"commandUnavailable\", this.$readOnlyCallback);\n if (this.hoverTooltip) {\n this.hoverTooltip.destroy();\n this.hoverTooltip = null;\n }\n }\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var hasValue = this.session && (this.renderer.$composition ||\n this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n if (hasValue && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!hasValue && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!hasValue && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (value) {\n var blurCommand = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (editor) {\n editor.blur();\n editor.renderer.scroller.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n e.preventDefault();\n var row = this.getCursorPosition().row;\n if (!this.isRowVisible(row))\n this.scrollToLine(row, true, true);\n this.focus();\n }\n };\n var gutterKeyboardHandler;\n if (value) {\n this.renderer.enableKeyboardAccessibility = true;\n this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n this.renderer.scroller.setAttribute(\"tabindex\", 0);\n this.renderer.scroller.setAttribute(\"role\", \"group\");\n this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor.scroller.aria-roledescription\", \"editor\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"editor.scroller.aria-label\", \"Editor content, press Enter to start editing, press Escape to exit\"));\n this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n this.renderer.$gutter.setAttribute(\"role\", \"group\");\n this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor.gutter.aria-roledescription\", \"editor gutter\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"editor.gutter.aria-label\", \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-hidden\", true);\n if (!gutterKeyboardHandler)\n gutterKeyboardHandler = new GutterKeyboardHandler(this);\n gutterKeyboardHandler.addListener();\n this.textInput.setAriaOptions({\n setLabel: true\n });\n }\n else {\n this.renderer.enableKeyboardAccessibility = false;\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.textInput.setNumberOfExtraLines(0);\n this.renderer.scroller.setAttribute(\"tabindex\", -1);\n this.renderer.scroller.removeAttribute(\"role\");\n this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.removeAttribute(\"aria-label\");\n this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\n this.renderer.content.removeAttribute(\"aria-hidden\");\n this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n this.renderer.$gutter.removeAttribute(\"role\");\n this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n this.renderer.$gutter.removeAttribute(\"aria-label\");\n this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n if (gutterKeyboardHandler)\n gutterKeyboardHandler.removeListener();\n }\n },\n initialValue: false\n },\n textInputAriaLabel: {\n set: function (val) { this.$textInputAriaLabel = val; },\n initialValue: \"\"\n },\n enableMobileMenu: {\n set: function (val) { this.$enableMobileMenu = val; },\n initialValue: true\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, /**@type{Editor}*/ editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (/**@type{Editor}*/ editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (/**@type{Editor}*/ editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n }\n Lines.prototype.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n Lines.prototype.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n Lines.prototype.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n Lines.prototype.getLength = function () {\n return this.cells.length;\n };\n Lines.prototype.get = function (index) {\n return this.cells[index];\n };\n Lines.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n Lines.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n Lines.prototype.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n Lines.prototype.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n Lines.prototype.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n Lines.prototype.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n Lines.prototype.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n }\n Gutter.prototype.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n Gutter.prototype.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n Gutter.prototype.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n Gutter.prototype.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] };\n var annoText = annotation.text;\n var displayAnnoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n rowInfo.displayText.push(displayAnnoText);\n }\n var className = annotation.className;\n if (className) {\n rowInfo.className = className;\n }\n else if (annoType === \"error\") {\n rowInfo.className = \" ace_error\";\n }\n else if (annoType === \"security\" && !/\\bace_error\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_security\";\n }\n else if (annoType === \"warning\" && !/\\bace_(error|security)\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_warning\";\n }\n else if (annoType === \"info\" && !rowInfo.className) {\n rowInfo.className = \" ace_info\";\n }\n else if (annoType === \"hint\" && !rowInfo.className) {\n rowInfo.className = \" ace_hint\";\n }\n }\n };\n Gutter.prototype.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n Gutter.prototype.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n Gutter.prototype.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n Gutter.prototype.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n Gutter.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var annotationNode = element.childNodes[2];\n var customWidget = element.childNodes[3];\n var annotationIconNode = annotationNode.firstChild;\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var lineHeight = config.lineHeight + \"px\";\n var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n var rowText = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row] && row !== foldStart)\n className += this.$annotations[row].className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var foldClass = \"ace_fold-widget ace_\" + c;\n var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n if (isClosedFold) {\n foldClass += \" ace_closed\";\n var foldAnnotationClass = \"\";\n var annotationInFold = false;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!this.$annotations[i])\n continue;\n if (this.$annotations[i].className === \" ace_error\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_error_fold\";\n break;\n }\n if (this.$annotations[i].className === \" ace_security\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_security_fold\";\n }\n else if (this.$annotations[i].className === \" ace_warning\" &&\n foldAnnotationClass !== \" ace_security_fold\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n }\n }\n className += foldAnnotationClass;\n }\n else\n foldClass += \" ace_open\";\n if (foldWidget.className != foldClass)\n foldWidget.className = foldClass;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n foldWidget.setAttribute(\"role\", \"button\");\n foldWidget.setAttribute(\"tabindex\", \"-1\");\n var foldRange = session.getFoldWidgetRange(row);\n if (foldRange)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.range.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n foldRange.start.row + 1,\n foldRange.end.row + 1\n ]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.closed.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n fold.start.row + 1,\n fold.end.row + 1\n ]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.open.aria-label\", \"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.closed.title\", \"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.open.title\", \"Fold code\"));\n }\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n foldWidget.setAttribute(\"tabindex\", \"0\");\n foldWidget.removeAttribute(\"role\");\n foldWidget.removeAttribute(\"aria-label\");\n }\n }\n var customWidgetAttributes = this.session.$gutterCustomWidgets[row];\n if (customWidgetAttributes) {\n this.$addCustomWidget(row, customWidgetAttributes, cell);\n }\n else if (customWidget) {\n this.$removeCustomWidget(row, cell);\n }\n if (annotationInFold && this.$showFoldedAnnotations) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n annotationIconNode.className += foldAnnotationClass;\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (foldAnnotationClass) {\n case \" ace_error_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else if (this.$annotations[row]) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n if (this.$useSvgGutterIcons)\n annotationIconNode.className += this.$annotations[row].className;\n else\n element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (this.$annotations[row].className) {\n case \" ace_error\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n case \" ace_info\":\n ariaLabel = nls(\"gutter.annotation.aria-label.info\", \"Info, read annotations row $0\", [rowText]);\n break;\n case \" ace_hint\":\n ariaLabel = nls(\"gutter.annotation.aria-label.hint\", \"Suggestion, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n annotationNode.removeAttribute(\"aria-label\");\n annotationNode.removeAttribute(\"role\");\n annotationNode.setAttribute(\"tabindex\", \"0\");\n }\n if (rowText !== textNode.data) {\n textNode.data = rowText;\n }\n if (element.className != className)\n element.className = className;\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = rowText;\n if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\" && !customWidgetAttributes)\n cell.element.setAttribute(\"aria-hidden\", true);\n else\n cell.element.setAttribute(\"aria-hidden\", false);\n return cell;\n };\n Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n Gutter.prototype.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n Gutter.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n Gutter.prototype.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n Gutter.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n Gutter.prototype.$hideFoldWidget = function (row, cell) {\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var foldWidget = rowCell.element.childNodes[1];\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n };\n Gutter.prototype.$showFoldWidget = function (row, cell) {\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var foldWidget = rowCell.element.childNodes[1];\n if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) {\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n }\n }\n };\n Gutter.prototype.$getGutterCell = function (row) {\n var cells = this.$lines.cells;\n var visibileRow = this.session.documentToScreenRow(row, 0);\n return cells[row - this.config.firstRowScreen - (row - visibileRow)];\n };\n Gutter.prototype.$addCustomWidget = function (row, _a, cell) {\n var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks;\n this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks };\n this.$hideFoldWidget(row, cell);\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n if (customWidget) {\n customWidget.remove();\n }\n customWidget = dom.createElement(\"span\");\n customWidget.className = \"ace_custom-widget \".concat(className);\n customWidget.setAttribute(\"tabindex\", \"-1\");\n customWidget.setAttribute(\"role\", 'button');\n customWidget.setAttribute(\"aria-label\", label);\n customWidget.setAttribute(\"title\", title);\n dom.setStyle(customWidget.style, \"display\", \"inline-block\");\n dom.setStyle(customWidget.style, \"height\", \"inherit\");\n if (callbacks && callbacks.onClick) {\n customWidget.addEventListener(\"click\", function (e) {\n callbacks.onClick(e, row);\n e.stopPropagation();\n });\n }\n rowCell.element.appendChild(customWidget);\n }\n };\n Gutter.prototype.$removeCustomWidget = function (row, cell) {\n delete this.session.$gutterCustomWidgets[row];\n this.$showFoldWidget(row, cell);\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n if (customWidget) {\n rowCell.element.removeChild(customWidget);\n }\n }\n };\n Gutter.prototype.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n Gutter.prototype.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = \"\";\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n var annotationNode = dom.createElement(\"span\");\n element.appendChild(annotationNode);\n var annotationIconNode = dom.createElement(\"span\");\n annotationNode.appendChild(annotationIconNode);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n }\n Marker.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Marker.prototype.setSession = function (session) {\n this.session = session;\n };\n Marker.prototype.setMarkers = function (markers) {\n this.markers = markers;\n };\n Marker.prototype.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n Marker.prototype.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n Marker.prototype.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:\" + padding + \"px;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:\" + padding + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n }\n Text.prototype.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n Text.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n Text.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n Text.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n Text.prototype.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", \n function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n Text.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n Text.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n Text.prototype.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n Text.prototype.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n Text.prototype.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n Text.prototype.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n Text.prototype.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n Text.prototype.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break; var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n Text.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n Text.prototype.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069\\u2060\\u2061\\u2062\\u2063\\u2064\\u206A\\u206B\\u206B\\u206C\\u206D\\u206E\\u206F]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n var text = self.$tabStrings[tabSize].cloneNode(true);\n text[\"charCount\"] = 1;\n valueFragment.appendChild(text);\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!isTextToken(token.type)) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") {\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.setAttribute(\"title\", nls(\"inline-fold.closed.title\", \"Unfold code\"));\n }\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n Text.prototype.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n Text.prototype.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n Text.prototype.$clearActiveIndentGuide = function () {\n var activeIndentGuides = this.element.querySelectorAll(\".ace_indent-guide-active\");\n for (var i = 0; i < activeIndentGuides.length; i++) {\n activeIndentGuides[i].classList.remove(\"ace_indent-guide-active\");\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var element = cell.element;\n if (cell.element.classList && cell.element.classList.contains(\"ace_line_group\")) {\n if (cell.element.childNodes.length > 0) {\n element = cell.element.childNodes[0];\n }\n else {\n return;\n }\n }\n var childNodes = element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n Text.prototype.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row < this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n Text.prototype.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n var text = this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element);\n text[\"charCount\"] = 0; // not to take into account when we are counting columns\n lineEl.appendChild(text);\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n Text.prototype.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"\" : \"\";\n parent.appendChild(overflowEl);\n };\n Text.prototype.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n Text.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n }\n Cursor.prototype.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n Cursor.prototype.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n Cursor.prototype.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n Cursor.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Cursor.prototype.setSession = function (session) {\n this.session = session;\n };\n Cursor.prototype.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n Cursor.prototype.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n Cursor.prototype.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n Cursor.prototype.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = /**@this{Cursor}*/ function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n Cursor.prototype.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n Cursor.prototype.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n Cursor.prototype.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n Cursor.prototype.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n Cursor.prototype.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n function Scrollbar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n }\n Scrollbar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n _this.width = dom.scrollbarWidth(parent.ownerDocument);\n _this.inner.style.width =\n _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.height = renderer.$scrollbarWidth;\n _this.inner.style.height =\n _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n return _this;\n }\n HScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n HScrollBar.prototype.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n function ScrollBar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n ScrollBar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n _this.parent = parent;\n _this.width = _this.VScrollWidth;\n _this.renderer = renderer;\n _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n VScrollBar.prototype.getHeight = function () {\n return this.height;\n };\n VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n VScrollBar.prototype.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.scrollWidth = 0;\n _this.height = _this.HScrollHeight;\n _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n _this.renderer = renderer;\n return _this;\n }\n HScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n HScrollBar.prototype.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n }\n RenderLoop.prototype.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n RenderLoop.prototype.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n function FontMetrics(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n }\n FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n FontMetrics.prototype.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n FontMetrics.prototype.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n FontMetrics.prototype.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n FontMetrics.prototype.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n FontMetrics.prototype.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n FontMetrics.prototype.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n FontMetrics.prototype.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n FontMetrics.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n FontMetrics.prototype.$getZoom = function (element) {\n if (!element || !element.parentElement)\n return 1;\n return (Number(window.getComputedStyle(element)[\"zoom\"]) || 1) * this.$getZoom(element.parentElement);\n };\n FontMetrics.prototype.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n padding: 3px 4px;\\n position: fixed;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre-wrap;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n overflow: auto;\\n max-width: min(33em, 66vw);\\n overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget, .ace_custom-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_custom-widget {\\n background: none;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n position: relative;\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n z-index: 1;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n}\\n\\n.ace_ghost_text_container > div {\\n white-space: pre;\\n}\\n\\n.ghost_text_line_wrapped::after {\\n content: \\\"\\u21A9\\\";\\n position: absolute;\\n}\\n\\n.ace_lineWidgetContainer.ace_ghost_text {\\n margin: 0px 4px\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}\\n\\n.ace_hidden_token {\\n display: none;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n function Decorator(scrollbarV, renderer) {\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\",\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\",\n };\n this.setScrollBarV(scrollbarV);\n }\n Decorator.prototype.$createCanvas = function () {\n this.canvas = dom.createElement(\"canvas\");\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = \"7\";\n this.canvas.style.position = \"absolute\";\n };\n Decorator.prototype.setScrollBarV = function (scrollbarV) {\n this.$createCanvas();\n this.scrollbarV = scrollbarV;\n scrollbarV.element.appendChild(this.canvas);\n this.setDimensions();\n };\n Decorator.prototype.$updateDecorators = function (config) {\n if (typeof this.canvas.getContext !== \"function\") {\n return;\n }\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n this.setDimensions(config);\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item[\"priority\"] = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var offset1 = this.getVerticalOffsetForRow(row);\n var offset2 = offset1 + this.lineHeight;\n var y1 = Math.round(this.heightRatio * offset1);\n var y2 = Math.round(this.heightRatio * offset2);\n var ycenter = Math.round((y1 + y2) / 2);\n var halfHeight = (y2 - ycenter);\n if (halfHeight < this.halfMinDecorationHeight) {\n halfHeight = this.halfMinDecorationHeight;\n }\n if (ycenter - halfHeight < 0) {\n ycenter = halfHeight;\n }\n if (ycenter + halfHeight > this.canvasHeight) {\n ycenter = this.canvasHeight - halfHeight;\n }\n var from = ycenter - halfHeight;\n var to = ycenter + halfHeight;\n var zoneHeight = to - from;\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.getVerticalOffsetForRow = function (row) {\n row = row | 0;\n var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight;\n return offset;\n };\n Decorator.prototype.setDimensions = function (config) {\n config = config || this.renderer.layerConfig;\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n this.canvasWidth = this.scrollbarV.width || this.canvasWidth;\n this.setZoneWidth();\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n if (this.maxHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n };\n Decorator.prototype.setZoneWidth = function () {\n this.oneZoneWidth = this.canvasWidth;\n };\n Decorator.prototype.destroy = function () {\n this.canvas.parentNode.removeChild(this.canvas);\n };\n return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar isTextToken = require(\"./layer/text_util\").isTextToken;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n function VirtualRenderer(container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n this.$addResizeObserver();\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n }\n VirtualRenderer.prototype.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n VirtualRenderer.prototype.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n VirtualRenderer.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n VirtualRenderer.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n VirtualRenderer.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n VirtualRenderer.prototype.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n VirtualRenderer.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n VirtualRenderer.prototype.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!height && this.$maxLines && this.lineHeight > 1) {\n if (!el.style.height || el.style.height == \"0px\") {\n el.style.height = \"1px\";\n height = el.clientHeight || el.scrollHeight;\n }\n }\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (this.$resizeTimer)\n this.$resizeTimer.cancel();\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n VirtualRenderer.prototype.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n VirtualRenderer.prototype.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n VirtualRenderer.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n VirtualRenderer.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n VirtualRenderer.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n this.setOption(\"printMarginColumn\", printMarginColumn);\n };\n VirtualRenderer.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n VirtualRenderer.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n VirtualRenderer.prototype.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n VirtualRenderer.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n VirtualRenderer.prototype.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n VirtualRenderer.prototype.getContainerElement = function () {\n return this.container;\n };\n VirtualRenderer.prototype.getMouseEventTarget = function () {\n return this.scroller;\n };\n VirtualRenderer.prototype.getTextAreaContainer = function () {\n return this.container;\n };\n VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n VirtualRenderer.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n VirtualRenderer.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n VirtualRenderer.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n VirtualRenderer.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n VirtualRenderer.prototype.freeze = function () {\n this.$frozen = true;\n };\n VirtualRenderer.prototype.unfreeze = function () {\n this.$frozen = false;\n };\n VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n if (this.enableKeyboardAccessibility)\n this.scroller.className += this.keyboardFocusClassName;\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n VirtualRenderer.prototype.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n VirtualRenderer.prototype.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1) {\n this.$autosize();\n hideScrollbars = size.height <= 2 * this.lineHeight;\n }\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n if (offset < 0 && firstRowScreen > 0) {\n firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight));\n offset = this.scrollTop - firstRowScreen * lineHeight;\n }\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n VirtualRenderer.prototype.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n VirtualRenderer.prototype.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n VirtualRenderer.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n VirtualRenderer.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n this._rows = rows;\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n VirtualRenderer.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n VirtualRenderer.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var newLeft = pos.left;\n var newTop = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n if (this.$scrollAnimation) {\n this.$stopAnimation = true;\n }\n var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (currentTop + topMargin > newTop) {\n if (offset && currentTop + topMargin > newTop + this.lineHeight)\n newTop -= offset * this.$size.scrollerHeight;\n if (newTop === 0)\n newTop = -this.scrollMargin.top;\n this.session.setScrollTop(newTop);\n }\n else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n newTop += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var currentLeft = this.scrollLeft;\n var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n if (newLeft - twoCharsWidth < currentLeft) {\n newLeft -= twoCharsWidth;\n if (newLeft < this.$padding + twoCharsWidth) {\n newLeft = -this.scrollMargin.left;\n }\n this.session.setScrollLeft(newLeft);\n }\n else {\n newLeft += twoCharsWidth;\n if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n }\n };\n VirtualRenderer.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n VirtualRenderer.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n VirtualRenderer.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n VirtualRenderer.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n VirtualRenderer.prototype.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n function endAnimation() {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n _self.$stopAnimation = false;\n callback && callback();\n }\n this.$timer = setInterval(function () {\n if (_self.$stopAnimation) {\n endAnimation();\n return;\n }\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n endAnimation();\n }\n }, 10);\n };\n VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n VirtualRenderer.prototype.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n VirtualRenderer.prototype.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n VirtualRenderer.prototype.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n VirtualRenderer.prototype.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n VirtualRenderer.prototype.setGhostText = function (text, position) {\n var cursor = this.session.selection.cursor;\n var insertPosition = position || { row: cursor.row, column: cursor.column };\n this.removeGhostText();\n var textChunks = this.$calculateWrappedTextChunks(text, insertPosition);\n this.addToken(textChunks[0].text, \"ghost_text\", insertPosition.row, insertPosition.column);\n this.$ghostText = {\n text: text,\n position: {\n row: insertPosition.row,\n column: insertPosition.column\n }\n };\n var widgetDiv = dom.createElement(\"div\");\n if (textChunks.length > 1) {\n var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column);\n var lastLineDiv;\n textChunks.slice(1).forEach(function (el) {\n var chunkDiv = dom.createElement(\"div\");\n var chunkSpan = dom.createElement(\"span\");\n chunkSpan.className = \"ace_ghost_text\";\n if (el.wrapped)\n chunkDiv.className = \"ghost_text_line_wrapped\";\n if (el.text.length === 0)\n el.text = \" \";\n chunkSpan.appendChild(dom.createTextNode(el.text));\n chunkDiv.appendChild(chunkSpan);\n widgetDiv.appendChild(chunkDiv);\n lastLineDiv = chunkDiv;\n });\n hiddenTokens.forEach(function (token) {\n var element = dom.createElement(\"span\");\n if (!isTextToken(token.type))\n element.className = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n element.appendChild(dom.createTextNode(token.value));\n lastLineDiv.appendChild(element);\n });\n this.$ghostTextWidget = {\n el: widgetDiv,\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text_container\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n var el = this.container;\n var height = el.getBoundingClientRect().height;\n var ghostTextHeight = textChunks.length * this.lineHeight;\n var fitsY = ghostTextHeight < (height - pixelPosition.top);\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textChunks.length - 1) * this.lineHeight);\n }\n else {\n this.scrollToRow(insertPosition.row);\n }\n }\n };\n VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth) - 2;\n limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small\n var textLines = text.split(/\\r?\\n/);\n var textChunks = [];\n for (var i = 0; i < textLines.length; i++) {\n var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column);\n var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize);\n if (wrapSplits.length > 0) {\n var start = 0;\n wrapSplits.push(textLines[i].length);\n for (var j = 0; j < wrapSplits.length; j++) {\n var textSlice = textLines[i].slice(start, wrapSplits[j]);\n textChunks.push({ text: textSlice, wrapped: true });\n start = wrapSplits[j];\n }\n }\n else {\n textChunks.push({ text: textLines[i], wrapped: false });\n }\n }\n return textChunks;\n };\n VirtualRenderer.prototype.removeGhostText = function () {\n if (!this.$ghostText)\n return;\n var position = this.$ghostText.position;\n this.removeExtraToken(position.row, position.column);\n if (this.$ghostTextWidget) {\n this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n this.$ghostTextWidget = null;\n }\n this.$ghostText = null;\n };\n VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null || !tokens.length) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) {\n var tokens = this.session.getTokens(row);\n var l = 0;\n var hasPassedCursor = false;\n var hiddenTokens = [];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (token.type === \"ghost_text\")\n continue;\n if (hasPassedCursor) {\n hiddenTokens.push({ type: token.type, value: token.value });\n token.type = \"hidden_token\";\n continue;\n }\n if (l === column) {\n hasPassedCursor = true;\n }\n }\n this.updateLines(row, row);\n return hiddenTokens;\n };\n VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n this.session.bgTokenizer.lines[row] = null;\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n if (useragent.isSafari && _self.scroller) {\n _self.scroller.style.background = \"red\";\n _self.scroller.style.background = \"\";\n }\n }\n };\n VirtualRenderer.prototype.getTheme = function () {\n return this.$themeId;\n };\n VirtualRenderer.prototype.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n VirtualRenderer.prototype.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n VirtualRenderer.prototype.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n VirtualRenderer.prototype.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n VirtualRenderer.prototype.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n this.setOption(\"useResizeObserver\", false);\n };\n VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n if (!this.$scrollDecorator) {\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.$scrollDecorator.setScrollBarV(this.scrollBarV);\n this.$scrollDecorator.$updateDecorators();\n }\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n VirtualRenderer.prototype.$addResizeObserver = function () {\n if (!window.ResizeObserver || this.$resizeObserver)\n return;\n var self = this;\n this.$resizeTimer = lang.delayedCall(function () {\n if (!self.destroyed)\n self.onResize();\n }, 50);\n this.$resizeObserver = new window.ResizeObserver(function (e) {\n var w = e[0].contentRect.width;\n var h = e[0].contentRect.height;\n if (Math.abs(self.$size.width - w) > 1\n || Math.abs(self.$size.height - h) > 1) {\n self.$resizeTimer.delay();\n }\n else {\n self.$resizeTimer.cancel();\n }\n });\n this.$resizeObserver.observe(this.container);\n };\n return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (value) {\n if (!value && this.$resizeObserver) {\n this.$resizeObserver.disconnect();\n this.$resizeTimer.cancel();\n this.$resizeTimer = this.$resizeObserver = null;\n }\n else if (value && !this.$resizeObserver) {\n this.$addResizeObserver();\n }\n }\n },\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n useSvgGutterIcons: {\n set: function (value) {\n this.$gutterLayer.$useSvgGutterIcons = value;\n },\n initialValue: false\n },\n showFoldedAnnotations: {\n set: function (value) {\n this.$gutterLayer.$showFoldedAnnotations = value;\n },\n initialValue: false\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker.onerror = function(e) {\n e.preventDefault();\n };\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n PlaceHolder.prototype.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n PlaceHolder.prototype.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n PlaceHolder.prototype.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n PlaceHolder.prototype.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n PlaceHolder.prototype.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n PlaceHolder.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n PlaceHolder.prototype.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp_1.start.row;\n range.start.column = tmp_1.start.column;\n range.end.row = tmp_1.end.row;\n range.end.column = tmp_1.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){/**\n * ## Error Marker extension\n *\n * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips\n * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with\n * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity.\n *\n * @module\n */\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n displayText: [nls(\"error-marker.good-state\", \"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n gutterAnno.displayText.forEach(function (annoTextLine, i) {\n el.appendChild(dom.createTextNode(annoTextLine));\n if (i < gutterAnno.displayText.length - 1) {\n el.appendChild(dom.createElement(\"br\"));\n }\n });\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n editor.on(\"destroy\", function () {\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nvar version = exports.config.version;\nexports.version = version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n ","ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\nvar VARIABLES = {\n CURRENT_WORD: function (editor) {\n return editor.session.getTextRange(editor.session.getWordRange());\n },\n SELECTION: function (editor, name, indentation) {\n var text = editor.session.getTextRange();\n if (indentation)\n return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n return text;\n },\n CURRENT_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row);\n },\n PREV_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row - 1);\n },\n LINE_INDEX: function (editor) {\n return editor.getCursorPosition().row;\n },\n LINE_NUMBER: function (editor) {\n return editor.getCursorPosition().row + 1;\n },\n SOFT_TABS: function (editor) {\n return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function (editor) {\n return editor.session.getTabSize();\n },\n CLIPBOARD: function (editor) {\n return clipboard.getText && clipboard.getText();\n },\n FILENAME: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n },\n FILENAME_BASE: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function (editor) {\n return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function (editor) { return \"/not implemented.txt\"; },\n WORKSPACE_NAME: function () { return \"Unknown\"; },\n FULLNAME: function () { return \"Unknown\"; },\n BLOCK_COMMENT_START: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.end || \"\";\n },\n LINE_COMMENT: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.lineCommentStart || \"\";\n },\n CURRENT_YEAR: date.bind(null, { year: \"numeric\" }),\n CURRENT_YEAR_SHORT: date.bind(null, { year: \"2-digit\" }),\n CURRENT_MONTH: date.bind(null, { month: \"numeric\" }),\n CURRENT_MONTH_NAME: date.bind(null, { month: \"long\" }),\n CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: \"short\" }),\n CURRENT_DATE: date.bind(null, { day: \"2-digit\" }),\n CURRENT_DAY_NAME: date.bind(null, { weekday: \"long\" }),\n CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: \"short\" }),\n CURRENT_HOUR: date.bind(null, { hour: \"2-digit\", hour12: false }),\n CURRENT_MINUTE: date.bind(null, { minute: \"2-digit\" }),\n CURRENT_SECOND: date.bind(null, { second: \"2-digit\" })\n};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = /** @class */ (function () {\n function SnippetManager() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.variables = VARIABLES;\n }\n SnippetManager.prototype.getTokenizer = function () {\n return SnippetManager[\"$tokenizer\"] || this.createTokenizer();\n };\n SnippetManager.prototype.createTokenizer = function () {\n function TabstopToken(str) {\n str = str.substr(1);\n if (/^\\d+$/.test(str))\n return [{ tabstopId: parseInt(str, 10) }];\n return [{ text: str }];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n var formatMatcher = {\n regex: \"/(\" + escape(\"/\") + \"+)/\",\n onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.fmtString = true;\n ts.guard = val.slice(1, -1);\n ts.flag = \"\";\n return \"\";\n },\n next: \"formatString\"\n };\n SnippetManager[\"$tokenizer\"] = new Tokenizer({\n start: [\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n }\n else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n }\n return [val];\n } },\n { regex: /}/, onMatch: function (val, state, stack) {\n return [stack.length ? stack.shift() : val];\n } },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken },\n { regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function (str, state, stack) {\n var t = TabstopToken(str.substr(1));\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\" },\n { regex: /\\n/, token: \"newline\", merge: false }\n ],\n snippetVar: [\n { regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function (val, state, stack) {\n var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n return operator.length == 2 ? operator[1] : \"\\x00\";\n }).split(\"\\x00\").map(function (value) {\n return { value: value };\n });\n stack[0].choices = choices;\n return [choices[0]];\n }, next: \"start\" },\n formatMatcher,\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\" }\n ],\n formatString: [\n { regex: /:/, onMatch: function (val, state, stack) {\n if (stack.length && stack[0].expectElse) {\n stack[0].expectElse = false;\n stack[0].ifEnd = { elseEnd: stack[0] };\n return [stack[0].ifEnd];\n }\n return \":\";\n } },\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length)\n val = ch;\n else if (\"`$\\\\\".indexOf(ch) != -1)\n val = ch;\n else if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\t\";\n else if (\"ulULE\".indexOf(ch) != -1)\n val = { changeCase: ch, local: ch > \"a\" };\n return [val];\n } },\n { regex: \"/\\\\w*}\", onMatch: function (val, state, stack) {\n var next = stack.shift();\n if (next)\n next.flag = val.slice(1, -1);\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: function (val, state, stack) {\n return [{ text: val.slice(1) }];\n } },\n { regex: /\\${\\w+/, onMatch: function (val, state, stack) {\n var token = { text: val.slice(2) };\n stack.unshift(token);\n return [token];\n }, next: \"formatStringVar\" },\n { regex: /\\n/, token: \"newline\", merge: false },\n { regex: /}/, onMatch: function (val, state, stack) {\n var next = stack.shift();\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" }\n ],\n formatStringVar: [\n { regex: /:\\/\\w+}/, onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.formatFunction = val.slice(2, -1);\n return [stack.shift()];\n }, next: \"formatString\" },\n formatMatcher,\n { regex: /:[\\?\\-+]?/, onMatch: function (val, state, stack) {\n if (val[1] == \"+\")\n stack[0].ifEnd = stack[0];\n if (val[1] == \"?\")\n stack[0].expectElse = true;\n }, next: \"formatString\" },\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\" }\n ]\n });\n return SnippetManager[\"$tokenizer\"];\n };\n SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n return x.value || x;\n });\n };\n SnippetManager.prototype.getVariableValue = function (editor, name, indentation) {\n if (/^\\d+$/.test(name))\n return (this.variables.__ || {})[name] || \"\";\n if (/^[A-Z]\\d+$/.test(name))\n return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n name = name.replace(/^TM_/, \"\");\n if (!this.variables.hasOwnProperty(name))\n return \"\";\n var value = this.variables[name];\n if (typeof value == \"function\")\n value = this.variables[name](editor, name, indentation);\n return value == null ? \"\" : value;\n };\n SnippetManager.prototype.tmStrFormat = function (str, ch, editor) {\n if (!ch.fmt)\n return str;\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n var _self = this;\n var formatted = str.replace(re, function () {\n var oldArgs = _self.variables.__;\n _self.variables.__ = [].slice.call(arguments);\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n }\n else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n }\n else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n }\n else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n _self.variables.__ = oldArgs;\n return fmtParts.join(\"\");\n });\n return formatted;\n };\n SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) {\n if (ch.formatFunction == \"upcase\")\n return str.toUpperCase();\n if (ch.formatFunction == \"downcase\")\n return str.toLowerCase();\n return str;\n };\n SnippetManager.prototype.resolveVariables = function (snippet, editor) {\n var result = [];\n var indentation = \"\";\n var afterNewLine = true;\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n if (ch == \"\\n\") {\n afterNewLine = true;\n indentation = \"\";\n }\n else if (afterNewLine) {\n indentation = /^\\t*/.exec(ch)[0];\n afterNewLine = /\\S/.test(ch);\n }\n continue;\n }\n if (!ch)\n continue;\n afterNewLine = false;\n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1)\n j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\n }\n if (ch.text) {\n var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n if (ch.fmtString)\n value = this.tmStrFormat(value, ch, editor);\n if (ch.formatFunction)\n value = this.tmFormatFunction(value, ch, editor);\n if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n }\n else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n }\n else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n }\n else if (ch.tabstopId != null) {\n result.push(ch);\n }\n else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) {\n var processedSnippet = processSnippetText.call(this, editor, snippetText);\n return processedSnippet.text;\n };\n SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var processedSnippet = processSnippetText.call(this, editor, snippetText, options);\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, processedSnippet.text);\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId);\n };\n SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText, options);\n editor.forEachSelection(function () {\n self.insertSnippetForSelection(editor, snippetText, options);\n }, null, { keepOrder: true });\n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n SnippetManager.prototype.$getScope = function (editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp)\n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n return scope;\n };\n SnippetManager.prototype.getActiveScopes = function (editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n SnippetManager.prototype.expandWithTab = function (editor, options) {\n var self = this;\n var result = editor.forEachSelection(function () {\n return self.expandSnippetForSelection(editor, options);\n }, null, { keepOrder: true });\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n SnippetManager.prototype.expandSnippetForSelection = function (editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n SnippetManager.prototype.register = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n if (!snippets)\n snippets = [];\n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n }\n else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n if (s.prefix)\n s.tabTrigger = s.prefix;\n if (!s.content && s.body)\n s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n }\n else {\n Object.keys(snippets).forEach(function (key) {\n addSnippet(snippets[key]);\n });\n }\n this._signal(\"registerSnippets\", { scope: scope });\n };\n SnippetManager.prototype.unregister = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope || scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope || scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n SnippetManager.prototype.parseSnippetFile = function (str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], /**@type{Snippet}*/ snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n }\n catch (e) { }\n }\n if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n }\n else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n }\n else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n }\n else if (key) {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n SnippetManager.prototype.getSnippetByName = function (name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n return SnippetManager;\n}());\noop.implement(SnippetManager.prototype, EventEmitter);\nvar processSnippetText = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function (x) {\n if (x == \"\\n\" && !options.excludeExtraIndent)\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function (p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n ts.parents = {};\n }\n if (ts.indexOf(p) !== -1)\n return;\n if (p.choices && !ts.choices)\n ts.choices = p.choices;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function (t) { return typeof t === \"object\"; });\n if (isNested && !ts.value) {\n ts.value = value;\n }\n else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function (ts) { ts.length = 0; });\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || { tabstopId: p.tabstopId };\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var ts = tabstops[id];\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p) {\n delete expanding[id];\n Object.keys(expanding).forEach(function (parentId) {\n ts.parents[parentId] = true;\n });\n }\n continue;\n }\n expanding[id] = p;\n var value = ts.value;\n if (typeof value !== \"string\")\n value = copyValue(value);\n else if (p.fmt)\n value = this.tmStrFormat(value, p, editor);\n tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function (t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1) {\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n }\n else\n column += t.length;\n text += t;\n }\n else if (t) {\n if (!t.start)\n t.start = { row: row, column: column };\n else\n t.end = { row: row, column: column };\n }\n });\n return {\n text: text,\n tabstops: tabstops,\n tokens: tokens\n };\n};\nvar TabstopManager = /** @class */ (function () {\n function TabstopManager(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n }\n TabstopManager.prototype.attach = function (editor) {\n this.$openTabstops = null;\n this.selectedTabstop = null;\n this.editor = editor;\n this.session = editor.session;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n TabstopManager.prototype.detach = function () {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges.length = 0;\n this.tabstops.length = 0;\n this.selectedTabstop = null;\n this.editor.off(\"change\", this.$onChange);\n this.editor.off(\"changeSelection\", this.$onChangeSelection);\n this.editor.off(\"changeSession\", this.$onChangeSession);\n this.editor.commands.off(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.session = null;\n this.editor = null;\n };\n TabstopManager.prototype.onChange = function (delta) {\n var isRemove = delta.action[0] == \"r\";\n var selectedTabstop = this.selectedTabstop || {};\n var parents = selectedTabstop.parents || {};\n var tabstops = this.tabstops.slice();\n for (var i = 0; i < tabstops.length; i++) {\n var ts = tabstops[i];\n var active = ts == selectedTabstop || parents[ts.index];\n ts.rangeList.$bias = active ? 0 : 1;\n if (delta.action == \"remove\" && ts !== selectedTabstop) {\n var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n for (var j = 0; j < toRemove.length; j++)\n this.removeRange(toRemove[j]);\n }\n ts.rangeList.$onChange(delta);\n }\n var session = this.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n this.detach();\n };\n TabstopManager.prototype.updateLinkedFields = function () {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n return;\n this.$inChange = true;\n var session = this.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = 0; i < ts.length; i++) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var original = range.original;\n var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n TabstopManager.prototype.onAfterExec = function (e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n TabstopManager.prototype.onChangeSelection = function () {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = 0; i < this.ranges.length; i++) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n TabstopManager.prototype.onChangeSession = function () {\n this.detach();\n };\n TabstopManager.prototype.tabNext = function (dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n this.updateTabstopMarkers();\n if (index === 0) {\n this.detach();\n }\n };\n TabstopManager.prototype.selectTabstop = function (index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (ts.choices)\n range.cursor = range.start;\n if (!this.editor.inVirtualSelectionMode) {\n var sel = this.editor.multiSelect;\n sel.toSingleRange(range);\n for (var i = 0; i < ts.length; i++) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n }\n else {\n this.editor.selection.fromOrientedRange(range);\n }\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n if (this.selectedTabstop && this.selectedTabstop.choices)\n this.editor.execCommand(\"startAutocomplete\", { matches: this.selectedTabstop.choices });\n };\n TabstopManager.prototype.addTabstops = function (tabstops, start, end) {\n var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n var snippetId = this.snippetId = (this.snippetId || 0) + 1;\n tabstops.forEach(function (ts, index) {\n var dest = this.$openTabstops[index] || ts;\n dest.snippetId = snippetId;\n for (var i = 0; i < ts.length; i++) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString || (dest.firstNonLinked && useLink)) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n }\n else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n dest.rangeList = dest.rangeList || new RangeList();\n dest.rangeList.$bias = 0;\n dest.rangeList.addList(dest);\n }, this);\n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n TabstopManager.prototype.addTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n TabstopManager.prototype.removeTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n TabstopManager.prototype.updateTabstopMarkers = function () {\n if (!this.selectedTabstop)\n return;\n var currentSnippetId = this.selectedTabstop.snippetId;\n if (this.selectedTabstop.index === 0) {\n currentSnippetId--;\n }\n this.tabstops.forEach(function (ts) {\n if (ts.snippetId === currentSnippetId)\n this.addTabstopMarkers(ts);\n else\n this.removeTabstopMarkers(ts);\n }, this);\n };\n TabstopManager.prototype.removeRange = function (range) {\n var i = range.tabstop.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1)\n this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n this.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n return TabstopManager;\n}());\nTabstopManager.prototype.keyboardHandler = new HashHandler();\nTabstopManager.prototype.keyboardHandler.bindKeys({\n \"Tab\": function (editor) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n return;\n editor.tabstopManager.tabNext(1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Shift-Tab\": function (editor) {\n editor.tabstopManager.tabNext(-1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Esc\": function (editor) {\n editor.tabstopManager.detach();\n }\n});\nvar movePoint = function (point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\ndom.importCssString(\"\\n.ace_snippet-marker {\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n background: rgba(194, 193, 208, 0.09);\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\n position: absolute;\\n}\", \"snippets.css\", false);\nexports.snippetManager = new SnippetManager();\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.insertSnippet = function (content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function (options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\nvar nls = require(\"../config\").nls;\nvar userAgent = require(\"./../lib/useragent\");\nvar getAriaId = function (index) {\n return \"suggest-aria-id:\".concat(index);\n};\nvar popupAriaRole = userAgent.isSafari ? \"menu\" : \"listbox\";\nvar optionAriaRole = userAgent.isSafari ? \"menuitem\" : \"option\";\nvar ariaActiveState = userAgent.isSafari ? \"aria-current\" : \"aria-selected\";\nvar $singleLineEditor = function (el) {\n var renderer = new Renderer(el);\n renderer.$maxLines = 4;\n var editor = new Editor(renderer);\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n editor.$mouseHandler.$focusTimeout = 0;\n editor.$highlightTagPending = true;\n return editor;\n};\nvar AcePopup = /** @class */ (function () {\n function AcePopup(parentNode) {\n var el = dom.createElement(\"div\");\n var popup = $singleLineEditor(el);\n if (parentNode) {\n parentNode.appendChild(el);\n }\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n popup.renderer.$textLayer.element.setAttribute(\"role\", popupAriaRole);\n popup.renderer.$textLayer.element.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.aria-roledescription\", \"Autocomplete suggestions\"));\n popup.renderer.$textLayer.element.setAttribute(\"aria-label\", nls(\"autocomplete.popup.aria-label\", \"Autocomplete suggestions\"));\n popup.renderer.textarea.setAttribute(\"aria-hidden\", \"true\");\n popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n var noop = function () { };\n popup.focus = noop;\n popup.$isFocused = true;\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = \"0\";\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n popup.on(\"mousedown\", function (e) {\n var pos = e.getDocumentPosition();\n popup.selection.moveToPosition(pos);\n selectionMarker.start.row = selectionMarker.end.row = pos.row;\n e.stop();\n });\n var lastMouseEvent;\n var hoverMarker = new Range(-1, 0, -1, Infinity);\n var selectionMarker = new Range(-1, 0, -1, Infinity);\n selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n popup.setSelectOnHover = function (val) {\n if (!val) {\n hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n }\n else if (hoverMarker.id) {\n popup.session.removeMarker(hoverMarker.id);\n hoverMarker.id = null;\n }\n };\n popup.setSelectOnHover(false);\n popup.on(\"mousemove\", function (e) {\n if (!lastMouseEvent) {\n lastMouseEvent = e;\n return;\n }\n if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n return;\n }\n lastMouseEvent = e;\n lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n popup.isMouseOver = true;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (hoverMarker.start.row != row) {\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row);\n }\n });\n popup.renderer.on(\"beforeRender\", function () {\n if (lastMouseEvent && hoverMarker.start.row != -1) {\n lastMouseEvent.$pos = null;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row, true);\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var t = popup.renderer.$textLayer;\n for (var row = t.config.firstRow, l = t.config.lastRow; row <= l; row++) {\n var popupRowElement = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n popupRowElement.setAttribute(\"role\", optionAriaRole);\n popupRowElement.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.item.aria-roledescription\", \"item\"));\n popupRowElement.setAttribute(\"aria-setsize\", popup.data.length);\n popupRowElement.setAttribute(\"aria-describedby\", \"doc-tooltip\");\n popupRowElement.setAttribute(\"aria-posinset\", row + 1);\n var rowData = popup.getData(row);\n if (rowData) {\n var ariaLabel = \"\".concat(rowData.caption || rowData.value).concat(rowData.meta ? \", \".concat(rowData.meta) : '');\n popupRowElement.setAttribute(\"aria-label\", ariaLabel);\n }\n var highlightedSpans = popupRowElement.querySelectorAll(\".ace_completion-highlight\");\n highlightedSpans.forEach(function (span) {\n span.setAttribute(\"role\", \"mark\");\n });\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var row = popup.getRow();\n var t = popup.renderer.$textLayer;\n var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n var el = document.activeElement; // Active element is textarea of main editor\n if (selected !== popup.selectedNode && popup.selectedNode) {\n dom.removeCssClass(popup.selectedNode, \"ace_selected\");\n popup.selectedNode.removeAttribute(ariaActiveState);\n popup.selectedNode.removeAttribute(\"id\");\n }\n el.removeAttribute(\"aria-activedescendant\");\n popup.selectedNode = selected;\n if (selected) {\n var ariaId = getAriaId(row);\n dom.addCssClass(selected, \"ace_selected\");\n selected.id = ariaId;\n t.element.setAttribute(\"aria-activedescendant\", ariaId);\n el.setAttribute(\"aria-activedescendant\", ariaId);\n selected.setAttribute(ariaActiveState, \"true\");\n }\n });\n var hideHoverMarker = function () { setHoverMarker(-1); };\n var setHoverMarker = function (row, suppressRedraw) {\n if (row !== hoverMarker.start.row) {\n hoverMarker.start.row = hoverMarker.end.row = row;\n if (!suppressRedraw)\n popup.session._emit(\"changeBackMarker\");\n popup._emit(\"changeHoverMarker\");\n }\n };\n popup.getHoveredRow = function () {\n return hoverMarker.start.row;\n };\n event.addListener(popup.container, \"mouseout\", function () {\n popup.isMouseOver = false;\n hideHoverMarker();\n });\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\n popup.session.doc.getLength = function () {\n return popup.data.length;\n };\n popup.session.doc.getLine = function (i) {\n var data = popup.data[i];\n if (typeof data == \"string\")\n return data;\n return (data && data.value) || \"\";\n };\n var bgTokenizer = popup.session.bgTokenizer;\n bgTokenizer.$tokenizeRow = function (row) {\n var data = popup.data[row];\n var tokens = [];\n if (!data)\n return tokens;\n if (typeof data == \"string\")\n data = { value: data };\n var caption = data.caption || data.value || data.name;\n function addToken(value, className) {\n value && tokens.push({\n type: (data.className || \"\") + (className || \"\"),\n value: value\n });\n }\n var lower = caption.toLowerCase();\n var filterText = (popup.filterText || \"\").toLowerCase();\n var lastIndex = 0;\n var lastI = 0;\n for (var i = 0; i <= filterText.length; i++) {\n if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n var sub = filterText.slice(lastI, i);\n lastI = i;\n var index = lower.indexOf(sub, lastIndex);\n if (index == -1)\n continue;\n addToken(caption.slice(lastIndex, index), \"\");\n lastIndex = index + sub.length;\n addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n }\n }\n addToken(caption.slice(lastIndex, caption.length), \"\");\n tokens.push({ type: \"completion-spacer\", value: \" \" });\n if (data.meta)\n tokens.push({ type: \"completion-meta\", value: data.meta });\n if (data.message)\n tokens.push({ type: \"completion-message\", value: data.message });\n return tokens;\n };\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\n popup.session.$computeWidth = function () {\n return this.screenWidth = 0;\n };\n popup.isOpen = false;\n popup.isTopdown = false;\n popup.autoSelect = true;\n popup.filterText = \"\";\n popup.isMouseOver = false;\n popup.data = [];\n popup.setData = function (list, filterText) {\n popup.filterText = filterText || \"\";\n popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n popup.data = list || [];\n popup.setRow(0);\n };\n popup.getData = function (row) {\n return popup.data[row];\n };\n popup.getRow = function () {\n return selectionMarker.start.row;\n };\n popup.setRow = function (line) {\n line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line));\n if (selectionMarker.start.row != line) {\n popup.selection.clearSelection();\n selectionMarker.start.row = selectionMarker.end.row = line || 0;\n popup.session._emit(\"changeBackMarker\");\n popup.moveCursorTo(line || 0, 0);\n if (popup.isOpen)\n popup._signal(\"select\");\n }\n };\n popup.on(\"changeSelection\", function () {\n if (popup.isOpen)\n popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\n });\n popup.hide = function () {\n this.container.style.display = \"none\";\n popup.anchorPos = null;\n popup.anchor = null;\n if (popup.isOpen) {\n popup.isOpen = false;\n this._signal(\"hide\");\n }\n };\n popup.tryShow = function (pos, lineHeight, anchor, forceShow) {\n if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor &&\n popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left &&\n popup.anchor === anchor) {\n return true;\n }\n var el = this.container;\n var scrollBarSize = this.renderer.scrollBar.width || 10;\n var screenHeight = window.innerHeight - scrollBarSize;\n var screenWidth = window.innerWidth - scrollBarSize;\n var renderer = this.renderer;\n var maxH = renderer.$maxLines * lineHeight * 1.4;\n var dims = { top: 0, bottom: 0, left: 0 };\n var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight;\n var spaceAbove = pos.top - 3 * this.$borderSize;\n if (!anchor) {\n if (spaceAbove <= spaceBelow || spaceBelow >= maxH) {\n anchor = \"bottom\";\n }\n else {\n anchor = \"top\";\n }\n }\n if (anchor === \"top\") {\n dims.bottom = pos.top - this.$borderSize;\n dims.top = dims.bottom - maxH;\n }\n else if (anchor === \"bottom\") {\n dims.top = pos.top + lineHeight + this.$borderSize;\n dims.bottom = dims.top + maxH;\n }\n var fitsX = dims.top >= 0 && dims.bottom <= screenHeight;\n if (!forceShow && !fitsX) {\n return false;\n }\n if (!fitsX) {\n if (anchor === \"top\") {\n renderer.$maxPixelHeight = spaceAbove;\n }\n else {\n renderer.$maxPixelHeight = spaceBelow;\n }\n }\n else {\n renderer.$maxPixelHeight = null;\n }\n if (anchor === \"top\") {\n el.style.top = \"\";\n el.style.bottom = (screenHeight + scrollBarSize - dims.bottom) + \"px\";\n popup.isTopdown = false;\n }\n else {\n el.style.top = dims.top + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n el.style.display = \"\";\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n el.style.left = left + \"px\";\n el.style.right = \"\";\n if (!popup.isOpen) {\n popup.isOpen = true;\n this._signal(\"show\");\n lastMouseEvent = null;\n }\n popup.anchorPos = pos;\n popup.anchor = anchor;\n return true;\n };\n popup.show = function (pos, lineHeight, topdownOnly) {\n this.tryShow(pos, lineHeight, topdownOnly ? \"bottom\" : undefined, true);\n };\n popup.goTo = function (where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n switch (where) {\n case \"up\":\n row = row <= 0 ? max : row - 1;\n break;\n case \"down\":\n row = row >= max ? -1 : row + 1;\n break;\n case \"start\":\n row = 0;\n break;\n case \"end\":\n row = max;\n break;\n }\n this.setRow(row);\n };\n popup.getTextLeftOffset = function () {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n return popup;\n }\n return AcePopup;\n}());\ndom.importCssString(\"\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #CAD6FA;\\n z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid #abbffe;\\n margin-top: -1px;\\n background: rgba(233,233,253,0.4);\\n position: absolute;\\n z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid rgba(109, 150, 13, 0.8);\\n background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n opacity: 0.5;\\n margin-left: 0.9em;\\n}\\n.ace_completion-message {\\n margin-left: 0.9em;\\n color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n width: 300px;\\n z-index: 200000;\\n border: 1px lightgray solid;\\n position: fixed;\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n line-height: 1.4;\\n background: #fefefe;\\n color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n border: 1px #484747 solid;\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n line-height: 1.4;\\n background: #25282c;\\n color: #c1c1c1;\\n}\\n.ace_autocomplete .ace_text-layer {\\n width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n display: flex;\\n align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n min-width: 0;\\n flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n flex: 0 1 auto;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0px;\\n height: 2px;\\n width: 8%;\\n background: blue;\\n z-index: 100;\\n animation: ace_progress 3s infinite linear;\\n animation-delay: 300ms;\\n transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n 0% { transform: translateX(-100%) scaleX(1) }\\n 50% { transform: translateX(625%) scaleX(2) } \\n 100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n .ace_autocomplete.ace_loading:after {\\n transform: translateX(625%) scaleX(2);\\n animation: none;\\n }\\n}\\n\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\nexports.getAriaId = getAriaId;\n\n});\n\nace.define(\"ace/autocomplete/inline_screenreader\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar AceInlineScreenReader = /** @class */ (function () {\n function AceInlineScreenReader(editor) {\n this.editor = editor;\n this.screenReaderDiv = document.createElement(\"div\");\n this.screenReaderDiv.classList.add(\"ace_screenreader-only\");\n this.editor.container.appendChild(this.screenReaderDiv);\n }\n AceInlineScreenReader.prototype.setScreenReaderContent = function (content) {\n if (!this.popup && this.editor.completer && /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup) {\n this.popup = /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup;\n this.popup.renderer.on(\"afterRender\", function () {\n var row = this.popup.getRow();\n var t = this.popup.renderer.$textLayer;\n var selected = t.element.childNodes[row - t.config.firstRow];\n if (selected) {\n var idString = \"doc-tooltip \";\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n idString += \"ace-inline-screenreader-line-\".concat(lineIndex, \" \");\n }\n selected.setAttribute(\"aria-describedby\", idString);\n }\n }.bind(this));\n }\n while (this.screenReaderDiv.firstChild) {\n this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);\n }\n this._lines = content.split(/\\r\\n|\\r|\\n/);\n var codeElement = this.createCodeBlock();\n this.screenReaderDiv.appendChild(codeElement);\n };\n AceInlineScreenReader.prototype.destroy = function () {\n this.screenReaderDiv.remove();\n };\n AceInlineScreenReader.prototype.createCodeBlock = function () {\n var container = document.createElement(\"pre\");\n container.setAttribute(\"id\", \"ace-inline-screenreader\");\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n var codeElement = document.createElement(\"code\");\n codeElement.setAttribute(\"id\", \"ace-inline-screenreader-line-\".concat(lineIndex));\n var line = document.createTextNode(this._lines[lineIndex]);\n codeElement.appendChild(line);\n container.appendChild(codeElement);\n }\n return container;\n };\n return AceInlineScreenReader;\n}());\nexports.AceInlineScreenReader = AceInlineScreenReader;\n\n});\n\nace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete/inline_screenreader\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar AceInlineScreenReader = require(\"./inline_screenreader\").AceInlineScreenReader;\nvar AceInline = /** @class */ (function () {\n function AceInline() {\n this.editor = null;\n }\n AceInline.prototype.show = function (editor, completion, prefix) {\n prefix = prefix || \"\";\n if (editor && this.editor && this.editor !== editor) {\n this.hide();\n this.editor = null;\n this.inlineScreenReader = null;\n }\n if (!editor || !completion) {\n return false;\n }\n if (!this.inlineScreenReader) {\n this.inlineScreenReader = new AceInlineScreenReader(editor);\n }\n var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value;\n if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) {\n return false;\n }\n this.editor = editor;\n this.inlineScreenReader.setScreenReaderContent(displayText);\n displayText = displayText.slice(prefix.length);\n if (displayText === \"\") {\n editor.removeGhostText();\n }\n else {\n editor.setGhostText(displayText);\n }\n return true;\n };\n AceInline.prototype.isOpen = function () {\n if (!this.editor) {\n return false;\n }\n return !!this.editor.renderer.$ghostText;\n };\n AceInline.prototype.hide = function () {\n if (!this.editor) {\n return false;\n }\n this.editor.removeGhostText();\n return true;\n };\n AceInline.prototype.destroy = function () {\n this.hide();\n this.editor = null;\n if (this.inlineScreenReader) {\n this.inlineScreenReader.destroy();\n this.inlineScreenReader = null;\n }\n };\n return AceInline;\n}());\nexports.AceInline = AceInline;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.parForEach = function (array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0)\n callback();\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function (result, err) {\n completed++;\n if (completed === arLength)\n callback(result, err);\n });\n }\n};\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\nexports.retrievePrecedingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos - 1; i >= 0; i--) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf.reverse().join(\"\");\n};\nexports.retrieveFollowingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf;\n};\nexports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function (completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function (identifierRegex) {\n if (!prefix && identifierRegex)\n prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\nexports.triggerAutocomplete = function (editor, previousChar) {\n var previousChar = previousChar == null\n ? editor.session.getPrecedingCharacter()\n : previousChar;\n return editor.completers.some(function (completer) {\n if (completer.triggerCharacters && Array.isArray(completer.triggerCharacters)) {\n return completer.triggerCharacters.includes(previousChar);\n }\n });\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/inline\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\",\"ace/lib/event\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar AceInline = require(\"./autocomplete/inline\").AceInline;\nvar getAriaId = require(\"./autocomplete/popup\").getAriaId;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\nvar event = require(\"./lib/event\");\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar destroyCompleter = function (e, editor) {\n editor.completer && editor.completer.destroy();\n};\nvar Autocomplete = /** @class */ (function () {\n function Autocomplete() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.autoShown = false;\n this.exactMatch = false;\n this.inlineEnabled = false;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n this.parentNode = null;\n this.setSelectOnHover = false;\n this.hasSeen = new Set();\n this.showLoadingState = false;\n this.stickySelectionDelay = 500;\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n this.onLayoutChange = this.onLayoutChange.bind(this);\n this.changeTimer = lang.delayedCall(function () {\n this.updateCompletions(true);\n }.bind(this));\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50);\n this.stickySelectionTimer = lang.delayedCall(function () {\n this.stickySelection = true;\n }.bind(this), this.stickySelectionDelay);\n this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () {\n var initialPosition = this.completionProvider && this.completionProvider.initialPosition;\n if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0)\n return;\n this.completions = new FilteredList(Autocomplete.completionsForLoading);\n this.openPopup(this.editor, initialPosition.prefix, false);\n this.popup.renderer.setStyle(\"ace_loading\", true);\n }.bind(this), this.stickySelectionDelay);\n }\n Object.defineProperty(Autocomplete, \"completionsForLoading\", {\n get: function () {\n return [{\n caption: config.nls(\"autocomplete.loading\", \"Loading...\"),\n value: \"\"\n }];\n },\n enumerable: false,\n configurable: true\n });\n Autocomplete.prototype.$init = function () {\n this.popup = new AcePopup(this.parentNode || document.body || document.documentElement);\n this.popup.on(\"click\", function (e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.$onPopupShow.bind(this));\n this.popup.on(\"hide\", this.$onHidePopup.bind(this));\n this.popup.on(\"select\", this.$onPopupChange.bind(this));\n event.addListener(this.popup.container, \"mouseout\", this.mouseOutListener.bind(this));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n this.popup.renderer.on(\"afterRender\", this.$onPopupRender.bind(this));\n return this.popup;\n };\n Autocomplete.prototype.$initInline = function () {\n if (!this.inlineEnabled || this.inlineRenderer)\n return;\n this.inlineRenderer = new AceInline();\n return this.inlineRenderer;\n };\n Autocomplete.prototype.getPopup = function () {\n return this.popup || this.$init();\n };\n Autocomplete.prototype.$onHidePopup = function () {\n if (this.inlineRenderer) {\n this.inlineRenderer.hide();\n }\n this.hideDocTooltip();\n this.stickySelectionTimer.cancel();\n this.popupTimer.cancel();\n this.stickySelection = false;\n };\n Autocomplete.prototype.$seen = function (completion) {\n if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === \"function\") {\n completion.completer.onSeen(this.editor, completion);\n this.hasSeen.add(completion);\n }\n };\n Autocomplete.prototype.$onPopupChange = function (hide) {\n if (this.inlineRenderer && this.inlineEnabled) {\n var completion = hide ? null : this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n if (this.popup.isMouseOver && this.setSelectOnHover) {\n this.tooltipTimer.call(null, null);\n return;\n }\n this.popupTimer.schedule();\n this.tooltipTimer.schedule();\n }\n else {\n this.popupTimer.call(null, null);\n this.tooltipTimer.call(null, null);\n }\n };\n Autocomplete.prototype.$updateGhostText = function (completion) {\n var row = this.base.row;\n var column = this.base.column;\n var cursorColumn = this.editor.getCursorPosition().column;\n var prefix = this.editor.session.getLine(row).slice(column, cursorColumn);\n if (!this.inlineRenderer.show(this.editor, completion, prefix)) {\n this.inlineRenderer.hide();\n }\n else {\n this.$seen(completion);\n }\n };\n Autocomplete.prototype.$onPopupRender = function () {\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) {\n for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) {\n var completion = this.popup.getData(i);\n if (completion && (!inlineEnabled || completion.hideInlinePreview)) {\n this.$seen(completion);\n }\n }\n }\n };\n Autocomplete.prototype.$onPopupShow = function (hide) {\n this.$onPopupChange(hide);\n this.stickySelection = false;\n if (this.stickySelectionDelay >= 0)\n this.stickySelectionTimer.schedule(this.stickySelectionDelay);\n };\n Autocomplete.prototype.observeLayoutChanges = function () {\n if (this.$elements || !this.editor)\n return;\n window.addEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.addEventListener(\"wheel\", this.mousewheelListener);\n var el = this.editor.container.parentNode;\n var elements = [];\n while (el) {\n elements.push(el);\n el.addEventListener(\"scroll\", this.onLayoutChange, { passive: true });\n el = el.parentNode;\n }\n this.$elements = elements;\n };\n Autocomplete.prototype.unObserveLayoutChanges = function () {\n var _this = this;\n window.removeEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.removeEventListener(\"wheel\", this.mousewheelListener);\n this.$elements && this.$elements.forEach(function (el) {\n el.removeEventListener(\"scroll\", _this.onLayoutChange, { passive: true });\n });\n this.$elements = null;\n };\n Autocomplete.prototype.onLayoutChange = function () {\n if (!this.popup.isOpen)\n return this.unObserveLayoutChanges();\n this.$updatePopupPosition();\n this.updateDocTooltip();\n };\n Autocomplete.prototype.$updatePopupPosition = function () {\n var editor = this.editor;\n var renderer = editor.renderer;\n var lineHeight = renderer.layerConfig.lineHeight;\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n var posGhostText = {\n top: pos.top,\n left: pos.left\n };\n if (renderer.$ghostText && renderer.$ghostTextWidget) {\n if (this.base.row === renderer.$ghostText.position.row) {\n posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight;\n }\n }\n var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight;\n var lowestPosition = editorContainerBottom < posGhostText.top ?\n { top: editorContainerBottom, left: posGhostText.left } :\n posGhostText;\n if (this.popup.tryShow(lowestPosition, lineHeight, \"bottom\")) {\n return;\n }\n if (this.popup.tryShow(pos, lineHeight, \"top\")) {\n return;\n }\n this.popup.show(pos, lineHeight);\n };\n Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) {\n this.$firstOpenTimer.cancel();\n if (!this.popup)\n this.$init();\n if (this.inlineEnabled && !this.inlineRenderer)\n this.$initInline();\n this.popup.autoSelect = this.autoSelect;\n this.popup.setSelectOnHover(this.setSelectOnHover);\n var oldRow = this.popup.getRow();\n var previousSelectedItem = this.popup.data[oldRow];\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n if (this.editor.textInput.setAriaOptions) {\n this.editor.textInput.setAriaOptions({\n activeDescendant: getAriaId(this.popup.getRow()),\n inline: this.inlineEnabled\n });\n }\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n var newRow;\n if (this.stickySelection)\n newRow = this.popup.data.indexOf(previousSelectedItem);\n if (!newRow || newRow === -1)\n newRow = 0;\n this.popup.setRow(this.autoSelect ? newRow : -1);\n if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow])\n this.$onPopupChange();\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (newRow === oldRow && inlineEnabled) {\n var completion = this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n }\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n this.$updatePopupPosition();\n if (this.tooltipNode) {\n this.updateDocTooltip();\n }\n }\n this.changeTimer.cancel();\n this.observeLayoutChanges();\n };\n Autocomplete.prototype.detach = function () {\n if (this.editor) {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n }\n this.$firstOpenTimer.cancel();\n this.changeTimer.cancel();\n this.hideDocTooltip();\n if (this.completionProvider) {\n this.completionProvider.detach();\n }\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n if (this.popup && this.popup.renderer) {\n this.popup.renderer.off(\"afterRender\", this.$onPopupRender);\n }\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completionProvider = this.completions = this.base = null;\n this.unObserveLayoutChanges();\n };\n Autocomplete.prototype.changeListener = function (e) {\n var cursor = this.editor.selection.lead;\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n if (this.activated)\n this.changeTimer.schedule();\n else\n this.detach();\n };\n Autocomplete.prototype.blurListener = function (e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n if (el != text && el.parentNode != container && !fromTooltip\n && el != this.tooltipNode && e.relatedTarget != text) {\n this.detach();\n }\n };\n Autocomplete.prototype.mousedownListener = function (e) {\n this.detach();\n };\n Autocomplete.prototype.mousewheelListener = function (e) {\n if (this.popup && !this.popup.isMouseOver)\n this.detach();\n };\n Autocomplete.prototype.mouseOutListener = function (e) {\n if (this.popup.isOpen)\n this.$updatePopupPosition();\n };\n Autocomplete.prototype.goTo = function (where) {\n this.popup.goTo(where);\n };\n Autocomplete.prototype.insertMatch = function (data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n if (data.value === \"\") // Explicitly given nothing to insert, e.g. \"No suggestion state\"\n return this.detach();\n var completions = this.completions;\n var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options);\n if (this.completions == completions)\n this.detach();\n return result;\n };\n Autocomplete.prototype.showPopup = function (editor, options) {\n if (this.editor)\n this.detach();\n this.activated = true;\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\n }\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n this.updateCompletions(false, options);\n };\n Autocomplete.prototype.getCompletionProvider = function (initialPosition) {\n if (!this.completionProvider)\n this.completionProvider = new CompletionProvider(initialPosition);\n return this.completionProvider;\n };\n Autocomplete.prototype.gatherCompletions = function (editor, callback) {\n return this.getCompletionProvider().gatherCompletions(editor, callback);\n };\n Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({ start: this.base, end: pos });\n if (prefix == this.completions.filterText)\n return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length)\n return this.detach();\n if (this.completions.filtered.length == 1\n && this.completions.filtered[0].value == prefix\n && !this.completions.filtered[0].snippet)\n return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n if (options && options.matches) {\n var pos = this.editor.getSelectionRange().start;\n this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n this.base.$insertRight = true;\n this.completions = new FilteredList(options.matches);\n this.getCompletionProvider().completions = this.completions;\n return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n var session = this.editor.getSession();\n var pos = this.editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(this.editor);\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n var completionOptions = {\n exactMatch: this.exactMatch,\n ignoreCaption: this.ignoreCaption\n };\n this.getCompletionProvider({\n prefix: prefix,\n pos: pos\n }).provideCompletions(this.editor, completionOptions, \n function (err, completions, finished) {\n var filtered = completions.filtered;\n var prefix = util.getCompletionPrefix(this.editor);\n this.$firstOpenTimer.cancel();\n if (finished) {\n if (!filtered.length) {\n var emptyMessage = !this.autoShown && this.emptyMessage;\n if (typeof emptyMessage == \"function\")\n emptyMessage = this.emptyMessage(prefix);\n if (emptyMessage) {\n var completionsForEmpty = [{\n caption: emptyMessage,\n value: \"\"\n }\n ];\n this.completions = new FilteredList(completionsForEmpty);\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_loading\", false);\n this.popup.renderer.setStyle(\"ace_empty-message\", true);\n return;\n }\n return this.detach();\n }\n if (filtered.length == 1 && filtered[0].value == prefix\n && !filtered[0].snippet)\n return this.detach();\n if (this.autoInsert && !this.autoShown && filtered.length == 1)\n return this.insertMatch(filtered[0]);\n }\n this.completions = !finished && this.showLoadingState ?\n new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) :\n completions;\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_empty-message\", false);\n this.popup.renderer.setStyle(\"ace_loading\", !finished);\n }.bind(this));\n if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) {\n this.$firstOpenTimer.delay(this.stickySelectionDelay / 2);\n }\n };\n Autocomplete.prototype.cancelContextMenu = function () {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n Autocomplete.prototype.updateDocTooltip = function () {\n var popup = this.popup;\n var all = this.completions && this.completions.filtered;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen)\n return this.hideDocTooltip();\n var completersLength = this.editor.completers.length;\n for (var i = 0; i < completersLength; i++) {\n var completer = this.editor.completers[i];\n if (completer.getDocTooltip && selected.completerId === completer.id) {\n doc = completer.getDocTooltip(selected);\n break;\n }\n }\n if (!doc && typeof selected != \"string\")\n doc = selected;\n if (typeof doc == \"string\")\n doc = { docText: doc };\n if (!doc || !(doc.docHTML || doc.docText))\n return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n Autocomplete.prototype.showDocTooltip = function (item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.style.margin = \"0\";\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.style.overscrollBehavior = \"contain\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n this.tooltipNode.id = \"doc-tooltip\";\n this.tooltipNode.setAttribute(\"role\", \"tooltip\");\n this.tooltipNode.addEventListener(\"wheel\", preventParentScroll);\n }\n var theme = this.editor.renderer.theme;\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n }\n else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n if (!tooltipNode.parentNode)\n this.popup.container.appendChild(this.tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n var targetWidth = 400;\n var targetHeight = 300;\n var scrollBarSize = popup.renderer.scrollBar.width || 10;\n var leftSize = rect.left;\n var rightSize = window.innerWidth - rect.right - scrollBarSize;\n var topSize = popup.isTopdown ? rect.top : window.innerHeight - scrollBarSize - rect.bottom;\n var scores = [\n Math.min(rightSize / targetWidth, 1),\n Math.min(leftSize / targetWidth, 1),\n Math.min(topSize / targetHeight * 0.9),\n ];\n var max = Math.max.apply(Math, scores);\n var tooltipStyle = tooltipNode.style;\n tooltipStyle.display = \"block\";\n if (max == scores[0]) {\n tooltipStyle.left = (rect.right + 1) + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.maxWidth = targetWidth * max + \"px\";\n tooltipStyle.top = rect.top + \"px\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n }\n else if (max == scores[1]) {\n tooltipStyle.right = window.innerWidth - rect.left + \"px\";\n tooltipStyle.left = \"\";\n tooltipStyle.maxWidth = targetWidth * max + \"px\";\n tooltipStyle.top = rect.top + \"px\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n }\n else if (max == scores[2]) {\n tooltipStyle.left = window.innerWidth - rect.left + \"px\";\n tooltipStyle.maxWidth = Math.min(targetWidth, window.innerWidth) + \"px\";\n if (popup.isTopdown) {\n tooltipStyle.top = rect.bottom + \"px\";\n tooltipStyle.left = rect.left + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.bottom, targetHeight) + \"px\";\n }\n else {\n tooltipStyle.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n tooltipStyle.left = rect.left + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(popup.container.offsetTop, targetHeight) + \"px\";\n }\n }\n };\n Autocomplete.prototype.hideDocTooltip = function () {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode)\n return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el)\n this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode)\n el.parentNode.removeChild(el);\n };\n Autocomplete.prototype.onTooltipClick = function (e) {\n var a = e.target;\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n a = a.parentNode;\n }\n };\n Autocomplete.prototype.destroy = function () {\n this.detach();\n if (this.popup) {\n this.popup.destroy();\n var el = this.popup.container;\n if (el && el.parentNode)\n el.parentNode.removeChild(el);\n }\n if (this.editor && this.editor.completer == this) {\n this.editor.off(\"destroy\", destroyCompleter);\n this.editor.completer = null;\n }\n this.inlineRenderer = this.popup = this.editor = null;\n };\n Autocomplete.for = function (editor) {\n if (editor.completer instanceof Autocomplete) {\n return editor.completer;\n }\n if (editor.completer) {\n editor.completer.destroy();\n editor.completer = null;\n }\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete[\"$sharedInstance\"])\n Autocomplete[\"$sharedInstance\"] = new Autocomplete();\n editor.completer = Autocomplete[\"$sharedInstance\"];\n }\n else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", destroyCompleter);\n }\n return editor.completer;\n };\n return Autocomplete;\n}());\nAutocomplete.prototype.commands = {\n \"Up\": function (editor) { editor.completer.goTo(\"up\"); },\n \"Down\": function (editor) { editor.completer.goTo(\"down\"); },\n \"Ctrl-Up|Ctrl-Home\": function (editor) { editor.completer.goTo(\"start\"); },\n \"Ctrl-Down|Ctrl-End\": function (editor) { editor.completer.goTo(\"end\"); },\n \"Esc\": function (editor) { editor.completer.detach(); },\n \"Return\": function (editor) { return editor.completer.insertMatch(); },\n \"Shift-Return\": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); },\n \"Tab\": function (editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager)\n editor.completer.goTo(\"down\");\n else\n return result;\n },\n \"Backspace\": function (editor) {\n editor.execCommand(\"backspace\");\n var prefix = util.getCompletionPrefix(editor);\n if (!prefix && editor.completer)\n editor.completer.detach();\n },\n \"PageUp\": function (editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function (editor) { editor.completer.popup.gotoPageDown(); }\n};\nAutocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function (editor, options) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.autoSelect = true;\n completer.autoShown = false;\n completer.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar CompletionProvider = /** @class */ (function () {\n function CompletionProvider(initialPosition) {\n this.initialPosition = initialPosition;\n this.active = true;\n }\n CompletionProvider.prototype.insertByIndex = function (editor, index, options) {\n if (!this.completions || !this.completions.filtered) {\n return false;\n }\n return this.insertMatch(editor, this.completions.filtered[index], options);\n };\n CompletionProvider.prototype.insertMatch = function (editor, data, options) {\n if (!data)\n return false;\n editor.startOperation({ command: { name: \"insertMatch\" } });\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(editor, data);\n }\n else {\n if (!this.completions)\n return false;\n var replaceBefore = this.completions.filterText.length;\n var replaceAfter = 0;\n if (data.range && data.range.start.row === data.range.end.row) {\n replaceBefore -= this.initialPosition.prefix.length;\n replaceBefore += this.initialPosition.pos.column - data.range.start.column;\n replaceAfter += data.range.end.column - this.initialPosition.pos.column;\n }\n if (replaceBefore || replaceAfter) {\n var ranges;\n if (editor.selection.getAllRanges) {\n ranges = editor.selection.getAllRanges();\n }\n else {\n ranges = [editor.getSelectionRange()];\n }\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= replaceBefore;\n range.end.column += replaceAfter;\n editor.session.remove(range);\n }\n }\n if (data.snippet) {\n snippetManager.insertSnippet(editor, data.snippet);\n }\n else {\n this.$insertString(editor, data);\n }\n if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == \"function\") {\n data.completer.onInsert(editor, data);\n }\n if (data.command && data.command === \"startAutocomplete\") {\n editor.execCommand(data.command);\n }\n }\n editor.endOperation();\n return true;\n };\n CompletionProvider.prototype.$insertString = function (editor, data) {\n var text = data.value || data;\n editor.execCommand(\"insertstring\", text);\n };\n CompletionProvider.prototype.gatherCompletions = function (editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(editor);\n var matches = [];\n this.completers = editor.completers;\n var total = editor.completers.length;\n editor.completers.forEach(function (completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function (err, results) {\n if (completer.hideInlinePreview)\n results = results.map(function (result) {\n return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview });\n });\n if (!err && results)\n matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: (--total === 0)\n });\n });\n });\n return true;\n };\n CompletionProvider.prototype.provideCompletions = function (editor, options, callback) {\n var processResults = function (results) {\n var prefix = results.prefix;\n var matches = results.matches;\n this.completions = new FilteredList(matches);\n if (options.exactMatch)\n this.completions.exactMatch = true;\n if (options.ignoreCaption)\n this.completions.ignoreCaption = true;\n this.completions.setFilter(prefix);\n if (results.finished || this.completions.filtered.length)\n callback(null, this.completions, results.finished);\n }.bind(this);\n var isImmediate = true;\n var immediateResults = null;\n this.gatherCompletions(editor, function (err, results) {\n if (!this.active) {\n return;\n }\n if (err) {\n callback(err, [], true);\n this.detach();\n }\n var prefix = results.prefix;\n if (prefix.indexOf(results.prefix) !== 0)\n return;\n if (isImmediate) {\n immediateResults = results;\n return;\n }\n processResults(results);\n }.bind(this));\n isImmediate = false;\n if (immediateResults) {\n var results = immediateResults;\n immediateResults = null;\n processResults(results);\n }\n };\n CompletionProvider.prototype.detach = function () {\n this.active = false;\n this.completers && this.completers.forEach(function (completer) {\n if (typeof completer.cancel === \"function\") {\n completer.cancel();\n }\n });\n };\n return CompletionProvider;\n}());\nvar FilteredList = /** @class */ (function () {\n function FilteredList(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n this.ignoreCaption = false;\n }\n FilteredList.prototype.setFilter = function (str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n var matches = this.filtered;\n else\n var matches = this.all;\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function (a, b) {\n return b.exactMatch - a.exactMatch || b.$score - a.$score\n || (a.caption || a.value).localeCompare(b.caption || b.value);\n });\n var prev = null;\n matches = matches.filter(function (item) {\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev)\n return false;\n prev = caption;\n return true;\n });\n this.filtered = matches;\n };\n FilteredList.prototype.filterCompletions = function (items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n loop: for (var i = 0, item; item = items[i]; i++) {\n if (item.skipFilter) {\n item.$score = item.score;\n results.push(item);\n continue;\n }\n var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet;\n if (!caption)\n continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n }\n else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n }\n else {\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n if (index < 0)\n continue loop;\n distance = index - lastIndex - 1;\n if (distance > 0) {\n if (lastIndex === -1)\n penalty += 10;\n penalty += distance;\n matchMask = matchMask | (1 << j);\n }\n lastIndex = index;\n }\n }\n }\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.$score = (item.score || 0) - penalty;\n results.push(item);\n }\n return results;\n };\n return FilteredList;\n}());\nexports.Autocomplete = Autocomplete;\nexports.CompletionProvider = CompletionProvider;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/marker_group\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar MarkerGroup = /** @class */ (function () {\n function MarkerGroup(session, options) {\n if (options)\n this.markerType = options.markerType;\n this.markers = [];\n this.session = session;\n session.addDynamicMarker(this);\n }\n MarkerGroup.prototype.getMarkerAtPosition = function (pos) {\n return this.markers.find(function (marker) {\n return marker.range.contains(pos.row, pos.column);\n });\n };\n MarkerGroup.prototype.markersComparator = function (a, b) {\n return a.range.start.row - b.range.start.row;\n };\n MarkerGroup.prototype.setMarkers = function (markers) {\n this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS);\n this.session._signal(\"changeBackMarker\");\n };\n MarkerGroup.prototype.update = function (html, markerLayer, session, config) {\n if (!this.markers || !this.markers.length)\n return;\n var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow;\n var foldLine;\n var markersOnOneLine = 0;\n var lastRow = 0;\n for (var i = 0; i < this.markers.length; i++) {\n var marker = this.markers[i];\n if (marker.range.end.row < visibleRangeStartRow)\n continue;\n if (marker.range.start.row > visibleRangeEndRow)\n continue;\n if (marker.range.start.row === lastRow) {\n markersOnOneLine++;\n }\n else {\n lastRow = marker.range.start.row;\n markersOnOneLine = 0;\n }\n if (markersOnOneLine > 200) {\n continue;\n }\n var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow);\n if (markerVisibleRange.start.row === markerVisibleRange.end.row\n && markerVisibleRange.start.column === markerVisibleRange.end.column) {\n continue; // visible range is empty\n }\n var screenRange = markerVisibleRange.toScreenRange(session);\n if (screenRange.isEmpty()) {\n foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine);\n if (foldLine && foldLine.end.row > markerVisibleRange.end.row) {\n visibleRangeStartRow = foldLine.end.row;\n }\n continue;\n }\n if (this.markerType === \"fullLine\") {\n markerLayer.drawFullLineMarker(html, screenRange, marker.className, config);\n }\n else if (screenRange.isMultiLine()) {\n if (this.markerType === \"line\")\n markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config);\n else\n markerLayer.drawTextMarker(html, screenRange, marker.className, config);\n }\n else {\n markerLayer.drawSingleLineMarker(html, screenRange, marker.className + \" ace_br15\", config);\n }\n }\n };\n return MarkerGroup;\n}());\nMarkerGroup.prototype.MAX_MARKERS = 10000;\nexports.MarkerGroup = MarkerGroup;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){var Range = require(\"../range\").Range;\nvar splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\nfunction getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({\n row: 0,\n column: 0\n }, pos));\n return textBefore.split(splitRegex).length - 1;\n}\nfunction wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n var currentWord = words[prefixPos];\n words.forEach(function (word, idx) {\n if (!word || word === currentWord)\n return;\n var distance = Math.abs(prefixPos - idx);\n var score = words.length - distance;\n if (wordScores[word]) {\n wordScores[word] = Math.max(score, wordScores[word]);\n }\n else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n}\nexports.getCompletions = function (editor, session, pos, prefix, callback) {\n var wordScore = wordDistance(session, pos);\n var wordList = Object.keys(wordScore);\n callback(null, wordList.map(function (word) {\n return {\n caption: word,\n value: word,\n score: wordScore[word],\n meta: \"local\"\n };\n }));\n};\n\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/marker_group\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * ## Language Tools extension for Ace Editor\n *\n * Provides autocompletion, snippets, and language intelligence features for the Ace code editor.\n * This extension integrates multiple completion providers including keyword completion, snippet expansion,\n * and text-based completion to enhance the coding experience with contextual suggestions and automated code generation.\n *\n * **Configuration Options:**\n * - `enableBasicAutocompletion`: Enable/disable basic completion functionality\n * - `enableLiveAutocompletion`: Enable/disable real-time completion suggestions\n * - `enableSnippets`: Enable/disable snippet expansion with Tab key\n * - `liveAutocompletionDelay`: Delay before showing live completion popup\n * - `liveAutocompletionThreshold`: Minimum prefix length to trigger completion\n *\n * **Usage:**\n * ```javascript\n * editor.setOptions({\n * enableBasicAutocompletion: true,\n * enableLiveAutocompletion: true,\n * enableSnippets: true\n * });\n * ```\n *\n * @module\n */\n\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\nvar MarkerGroup = require(\"../marker_group\").MarkerGroup;\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n if (session.$mode.completer) {\n return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n }\n var state = editor.session.getState(pos.row);\n var completions = session.$mode.getCompletions(state, session, pos, prefix);\n completions = completions.map(function (el) {\n el.completerId = keyWordCompleter.id;\n return el;\n });\n callback(null, completions);\n },\n id: \"keywordCompleter\"\n};\nvar transformSnippetTooltip = function (str) {\n var record = {};\n return str.replace(/\\${(\\d+)(:(.*?))?}/g, function (_, p1, p2, p3) {\n return (record[p1] = p3 || '');\n }).replace(/\\$(\\d+?)/g, function (_, p1) {\n return record[p1];\n });\n};\nvar snippetCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n var scopes = [];\n var token = session.getTokenAt(pos.row, pos.column);\n if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n scopes.push('html-tag');\n else\n scopes = snippetManager.getActiveScopes(editor);\n var snippetMap = snippetManager.snippetMap;\n var completions = [];\n scopes.forEach(function (scope) {\n var snippets = snippetMap[scope] || [];\n for (var i = snippets.length; i--;) {\n var s = snippets[i];\n var caption = s.name || s.tabTrigger;\n if (!caption)\n continue;\n completions.push({\n caption: caption,\n snippet: s.content,\n meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n completerId: snippetCompleter.id\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function (item) {\n if (item.snippet && !item.docHTML) {\n item.docHTML = [\n \"\", lang.escapeHTML(item.caption), \"\", \"
        \",\n lang.escapeHTML(transformSnippetTooltip(item.snippet))\n ].join(\"\");\n }\n },\n id: \"snippetCompleter\"\n};\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function (val) {\n completers.length = 0;\n if (val)\n completers.push.apply(completers, val);\n};\nexports.addCompleter = function (completer) {\n completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\nvar expandSnippet = {\n name: \"expandSnippet\",\n exec: function (editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n};\nvar onChangeMode = function (e, editor) {\n loadSnippetsForMode(editor.session.$mode);\n};\nvar loadSnippetsForMode = function (mode) {\n if (typeof mode == \"string\")\n mode = config.$modes[mode];\n if (!mode)\n return;\n if (!snippetManager.files)\n snippetManager.files = {};\n loadSnippetFile(mode.$id, mode.snippetFileId);\n if (mode.modes)\n mode.modes.forEach(loadSnippetsForMode);\n};\nvar loadSnippetFile = function (id, snippetFilePath) {\n if (!snippetFilePath || !id || snippetManager.files[id])\n return;\n snippetManager.files[id] = {};\n config.loadModule(snippetFilePath, function (m) {\n if (!m)\n return;\n snippetManager.files[id] = m;\n if (!m.snippets && m.snippetText)\n m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n snippetManager.register(m.snippets || [], m.scope);\n if (m.includeScopes) {\n snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n m.includeScopes.forEach(function (x) {\n loadSnippetsForMode(\"ace/mode/\" + x);\n });\n }\n });\n};\nvar doLiveAutocomplete = function (e) {\n var editor = e.editor;\n var hasCompleter = editor.completer && editor.completer.activated;\n if (e.command.name === \"backspace\") {\n if (hasCompleter && !util.getCompletionPrefix(editor))\n editor.completer.detach();\n }\n else if (e.command.name === \"insertstring\" && !hasCompleter) {\n lastExecEvent = e;\n var delay = e.editor.$liveAutocompletionDelay;\n if (delay) {\n liveAutocompleteTimer.delay(delay);\n }\n else {\n showLiveAutocomplete(e);\n }\n }\n};\nvar lastExecEvent;\nvar liveAutocompleteTimer = lang.delayedCall(function () {\n showLiveAutocomplete(lastExecEvent);\n}, 0);\nvar showLiveAutocomplete = function (e) {\n var editor = e.editor;\n var prefix = util.getCompletionPrefix(editor);\n var previousChar = e.args;\n var triggerAutocomplete = util.triggerAutocomplete(editor, previousChar);\n if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) {\n var completer = Autocomplete.for(editor);\n completer.autoShown = true;\n completer.showPopup(editor);\n }\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function (val) {\n if (val) {\n Autocomplete.for(this);\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.addCommand(Autocomplete.startCommand);\n }\n else {\n this.commands.removeCommand(Autocomplete.startCommand);\n }\n },\n value: false\n },\n enableLiveAutocompletion: {\n set: function (val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.on('afterExec', doLiveAutocomplete);\n }\n else {\n this.commands.off('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n liveAutocompletionDelay: {\n initialValue: 0\n },\n liveAutocompletionThreshold: {\n initialValue: 0\n },\n enableSnippets: {\n set: function (val) {\n if (val) {\n this.commands.addCommand(expandSnippet);\n this.on(\"changeMode\", onChangeMode);\n onChangeMode(null, this);\n }\n else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\n});\nexports.MarkerGroup = MarkerGroup;\n\n}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SqlHighlightRules = function () {\n var keywords = (\"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|\" +\n \"when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|\" +\n \"foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct|is|in|\" +\n \"all|alter|any|array|at|authorization|between|both|cast|check|collate|column|commit|constraint|\" +\n \"cube|current|current_date|current_time|current_timestamp|current_user|describe|escape|except|\" +\n \"exists|external|extract|fetch|filter|for|full|function|global|grouping|intersect|interval|\" +\n \"into|leading|like|local|no|of|only|out|overlaps|partition|position|range|revoke|rollback|rollup|\" +\n \"row|rows|session_user|set|some|start|tablesample|time|to|trailing|truncate|unique|unknown|\" +\n \"user|using|values|window|with\");\n var builtinConstants = (\"true|false\");\n var builtinFunctions = (\"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|\" +\n \"coalesce|ifnull|isnull|nvl\");\n var dataTypes = (\"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|\" +\n \"money|real|number|integer|string\");\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": builtinFunctions,\n \"keyword\": keywords,\n \"constant.language\": builtinConstants,\n \"storage.type\": dataTypes\n }, \"identifier\", true);\n this.$rules = {\n \"start\": [{\n token: \"comment\",\n regex: \"--.*$\"\n }, {\n token: \"comment\",\n start: \"/\\\\*\",\n end: \"\\\\*/\"\n }, {\n token: \"string\", // \" string\n regex: '\".*?\"'\n }, {\n token: \"string\", // ' string\n regex: \"'.*?'\"\n }, {\n token: \"string\", // ` string (apache drill)\n regex: \"`.*?`\"\n }, {\n token: \"constant.numeric\", // float\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: keywordMapper,\n regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n }, {\n token: \"keyword.operator\",\n regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n }, {\n token: \"paren.lparen\",\n regex: \"[\\\\(]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\)]\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }]\n };\n this.normalizeRules();\n};\noop.inherits(SqlHighlightRules, TextHighlightRules);\nexports.SqlHighlightRules = SqlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n return fw;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n }\n else if (foldStyle != \"all\")\n range = null;\n }\n return range;\n }\n if (foldStyle === \"markbegin\")\n return;\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n }\n else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n }\n else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m)\n continue;\n if (m[1])\n depth--;\n else\n depth++;\n if (!depth)\n break;\n }\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\",\"ace/mode/folding/sql\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlHighlightRules = require(\"./sql_highlight_rules\").SqlHighlightRules;\nvar SqlFoldMode = require(\"./folding/sql\").FoldMode;\nvar Mode = function () {\n this.HighlightRules = SqlHighlightRules;\n this.foldingRules = new SqlFoldMode();\n this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.lineCommentStart = \"--\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.$id = \"ace/mode/sql\";\n this.snippetFileId = \"ace/snippets/sql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/sql\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n}); (function() {\n ace.require([\"ace/theme/textmate\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/*!\nViz.js 3.8.0\nCopyright (c) 2023 Michael Daines\n\nThis distribution contains other software in object code form:\nGraphviz https://www.graphviz.org\nExpat https://libexpat.github.io\n*/var A=function(){var A,I,g,Q,B,C,E,D,w,i,o,G=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},M=new Promise(((I,g)=>{A=I})),R=A=>console.log(A);function F(A){throw A}function y(){var A=o.buffer;g=new Int8Array(A),Q=new Int16Array(A),C=new Uint8Array(A),B=new Int32Array(A),E=new Uint32Array(A),D=new Float32Array(A),w=new Float64Array(A),i=new BigInt64Array(A),new BigUint64Array(A)}G.agerrMessages=[],G.stderrMessages=[],I=A=>G.stderrMessages.push(A);var s=\"undefined\"!=typeof TextDecoder?new TextDecoder:void 0,h=(A,I,g)=>{for(var Q=I+g,B=I;A[B]&&!(B>=Q);)++B;if(B-I>16&&A.buffer&&s)return s.decode(A.subarray(I,B));for(var C=\"\";I>10,56320|1023&i)}}else C+=String.fromCharCode((31&E)<<6|D)}else C+=String.fromCharCode(E)}return C},K=(A,I)=>A?h(C,A,I):\"\";class N{constructor(A){this.excPtr=A,this.ptr=A-24}set_type(A){E[this.ptr+4>>2]=A}get_type(){return E[this.ptr+4>>2]}set_destructor(A){E[this.ptr+8>>2]=A}get_destructor(){return E[this.ptr+8>>2]}set_caught(A){A=A?1:0,g[this.ptr+12]=A}get_caught(){return 0!=g[this.ptr+12]}set_rethrown(A){A=A?1:0,g[this.ptr+13]=A}get_rethrown(){return 0!=g[this.ptr+13]}init(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I)}set_adjusted_ptr(A){E[this.ptr+16>>2]=A}get_adjusted_ptr(){return E[this.ptr+16>>2]}get_exception_ptr(){if(T(this.get_type()))return E[this.excPtr>>2];var A=this.get_adjusted_ptr();return 0!==A?A:this.excPtr}}var k={isAbs:A=>\"/\"===A.charAt(0),splitPath:A=>/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(A).slice(1),normalizeArray:(A,I)=>{for(var g=0,Q=A.length-1;Q>=0;Q--){var B=A[Q];\".\"===B?A.splice(Q,1):\"..\"===B?(A.splice(Q,1),g++):g&&(A.splice(Q,1),g--)}if(I)for(;g;g--)A.unshift(\"..\");return A},normalize:A=>{var I=k.isAbs(A),g=\"/\"===A.substr(-1);return(A=k.normalizeArray(A.split(\"/\").filter((A=>!!A)),!I).join(\"/\"))||I||(A=\".\"),A&&g&&(A+=\"/\"),(I?\"/\":\"\")+A},dirname:A=>{var I=k.splitPath(A),g=I[0],Q=I[1];return g||Q?(Q&&(Q=Q.substr(0,Q.length-1)),g+Q):\".\"},basename:A=>{if(\"/\"===A)return\"/\";var I=(A=(A=k.normalize(A)).replace(/\\/$/,\"\")).lastIndexOf(\"/\");return-1===I?A:A.substr(I+1)},join:function(){for(var A=arguments.length,I=new Array(A),g=0;gk.normalize(A+\"/\"+I)},L=A=>(L=(()=>{if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues)return A=>crypto.getRandomValues(A);F(\"initRandomDevice\")})())(A),U={resolve:function(){for(var A=\"\",I=!1,g=arguments.length-1;g>=-1&&!I;g--){var Q=g>=0?g<0||arguments.length<=g?void 0:arguments[g]:r.cwd();if(\"string\"!=typeof Q)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!Q)return\"\";A=Q+\"/\"+A,I=k.isAbs(Q)}return(I?\"/\":\"\")+(A=k.normalizeArray(A.split(\"/\").filter((A=>!!A)),!I).join(\"/\"))||\".\"},relative:(A,I)=>{function g(A){for(var I=0;I=0&&\"\"===A[g];g--);return I>g?[]:A.slice(I,g-I+1)}A=U.resolve(A).substr(1),I=U.resolve(I).substr(1);for(var Q=g(A.split(\"/\")),B=g(I.split(\"/\")),C=Math.min(Q.length,B.length),E=C,D=0;D{for(var I=0,g=0;g=55296&&Q<=57343?(I+=4,++g):I+=3}return I},J=(A,I,g,Q)=>{if(!(Q>0))return 0;for(var B=g,C=g+Q-1,E=0;E=55296&&D<=57343)D=65536+((1023&D)<<10)|1023&A.charCodeAt(++E);if(D<=127){if(g>=C)break;I[g++]=D}else if(D<=2047){if(g+1>=C)break;I[g++]=192|D>>6,I[g++]=128|63&D}else if(D<=65535){if(g+2>=C)break;I[g++]=224|D>>12,I[g++]=128|D>>6&63,I[g++]=128|63&D}else{if(g+3>=C)break;I[g++]=240|D>>18,I[g++]=128|D>>12&63,I[g++]=128|D>>6&63,I[g++]=128|63&D}}return I[g]=0,g-B};function c(A,I,g){var Q=g>0?g:Y(A)+1,B=new Array(Q),C=J(A,B,0,B.length);return I&&(B.length=C),B}var a={ttys:[],init(){},shutdown(){},register(A,I){a.ttys[A]={input:[],output:[],ops:I},r.registerDevice(A,a.stream_ops)},stream_ops:{open(A){var I=a.ttys[A.node.rdev];if(!I)throw new r.ErrnoError(43);A.tty=I,A.seekable=!1},close(A){A.tty.ops.fsync(A.tty)},fsync(A){A.tty.ops.fsync(A.tty)},read(A,I,g,Q,B){if(!A.tty||!A.tty.ops.get_char)throw new r.ErrnoError(60);for(var C=0,E=0;E(()=>{if(!S.length){var A=null;if(\"undefined\"!=typeof window&&\"function\"==typeof window.prompt&&null!==(A=window.prompt(\"Input: \"))&&(A+=\"\\n\"),!A)return null;S=c(A,!0)}return S.shift()})(),put_char(A,I){null===I||10===I?(R(h(A.output,0)),A.output=[]):0!=I&&A.output.push(I)},fsync(A){A.output&&A.output.length>0&&(R(h(A.output,0)),A.output=[])},ioctl_tcgets:A=>({c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ioctl_tcsets:(A,I,g)=>0,ioctl_tiocgwinsz:A=>[24,80]},default_tty1_ops:{put_char(A,g){null===g||10===g?(I(h(A.output,0)),A.output=[]):0!=g&&A.output.push(g)},fsync(A){A.output&&A.output.length>0&&(I(h(A.output,0)),A.output=[])}}},H=A=>{A=((A,I)=>Math.ceil(A/I)*I)(A,65536);var I=z(65536,A);return I?((A,I)=>(C.fill(0,A,A+I),A))(I,A):0},Z={ops_table:null,mount:A=>Z.createNode(null,\"/\",16895,0),createNode(A,I,g,Q){if(r.isBlkdev(g)||r.isFIFO(g))throw new r.ErrnoError(63);Z.ops_table||={dir:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr,lookup:Z.node_ops.lookup,mknod:Z.node_ops.mknod,rename:Z.node_ops.rename,unlink:Z.node_ops.unlink,rmdir:Z.node_ops.rmdir,readdir:Z.node_ops.readdir,symlink:Z.node_ops.symlink},stream:{llseek:Z.stream_ops.llseek}},file:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr},stream:{llseek:Z.stream_ops.llseek,read:Z.stream_ops.read,write:Z.stream_ops.write,allocate:Z.stream_ops.allocate,mmap:Z.stream_ops.mmap,msync:Z.stream_ops.msync}},link:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr,readlink:Z.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr},stream:r.chrdev_stream_ops}};var B=r.createNode(A,I,g,Q);return r.isDir(B.mode)?(B.node_ops=Z.ops_table.dir.node,B.stream_ops=Z.ops_table.dir.stream,B.contents={}):r.isFile(B.mode)?(B.node_ops=Z.ops_table.file.node,B.stream_ops=Z.ops_table.file.stream,B.usedBytes=0,B.contents=null):r.isLink(B.mode)?(B.node_ops=Z.ops_table.link.node,B.stream_ops=Z.ops_table.link.stream):r.isChrdev(B.mode)&&(B.node_ops=Z.ops_table.chrdev.node,B.stream_ops=Z.ops_table.chrdev.stream),B.timestamp=Date.now(),A&&(A.contents[I]=B,A.timestamp=B.timestamp),B},getFileDataAsTypedArray:A=>A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array(0),expandFileStorage(A,I){var g=A.contents?A.contents.length:0;if(!(g>=I)){I=Math.max(I,g*(g<1048576?2:1.125)>>>0),0!=g&&(I=Math.max(I,256));var Q=A.contents;A.contents=new Uint8Array(I),A.usedBytes>0&&A.contents.set(Q.subarray(0,A.usedBytes),0)}},resizeFileStorage(A,I){if(A.usedBytes!=I)if(0==I)A.contents=null,A.usedBytes=0;else{var g=A.contents;A.contents=new Uint8Array(I),g&&A.contents.set(g.subarray(0,Math.min(I,A.usedBytes))),A.usedBytes=I}},node_ops:{getattr(A){var I={};return I.dev=r.isChrdev(A.mode)?A.id:1,I.ino=A.id,I.mode=A.mode,I.nlink=1,I.uid=0,I.gid=0,I.rdev=A.rdev,r.isDir(A.mode)?I.size=4096:r.isFile(A.mode)?I.size=A.usedBytes:r.isLink(A.mode)?I.size=A.link.length:I.size=0,I.atime=new Date(A.timestamp),I.mtime=new Date(A.timestamp),I.ctime=new Date(A.timestamp),I.blksize=4096,I.blocks=Math.ceil(I.size/I.blksize),I},setattr(A,I){void 0!==I.mode&&(A.mode=I.mode),void 0!==I.timestamp&&(A.timestamp=I.timestamp),void 0!==I.size&&Z.resizeFileStorage(A,I.size)},lookup(A,I){throw r.genericErrors[44]},mknod:(A,I,g,Q)=>Z.createNode(A,I,g,Q),rename(A,I,g){if(r.isDir(A.mode)){var Q;try{Q=r.lookupNode(I,g)}catch(A){}if(Q)for(var B in Q.contents)throw new r.ErrnoError(55)}delete A.parent.contents[A.name],A.parent.timestamp=Date.now(),A.name=g,I.contents[g]=A,I.timestamp=A.parent.timestamp},unlink(A,I){delete A.contents[I],A.timestamp=Date.now()},rmdir(A,I){var g=r.lookupNode(A,I);for(var Q in g.contents)throw new r.ErrnoError(55);delete A.contents[I],A.timestamp=Date.now()},readdir(A){var I=[\".\",\"..\"];for(var g of Object.keys(A.contents))I.push(g);return I},symlink(A,I,g){var Q=Z.createNode(A,I,41471,0);return Q.link=g,Q},readlink(A){if(!r.isLink(A.mode))throw new r.ErrnoError(28);return A.link}},stream_ops:{read(A,I,g,Q,B){var C=A.node.contents;if(B>=A.node.usedBytes)return 0;var E=Math.min(A.node.usedBytes-B,Q);if(E>8&&C.subarray)I.set(C.subarray(B,B+E),g);else for(var D=0;D0||Q+I(Z.stream_ops.write(A,I,0,Q,g,!1),0)}},d=(A,I)=>{var g=0;return A&&(g|=365),I&&(g|=146),g},r={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(A){this.name=\"ErrnoError\",this.errno=A}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(A){this.node=A}get isRead(){return 1!=(2097155&this.flags)}get isWrite(){return 0!=(2097155&this.flags)}get isAppend(){return 1024&this.flags}get flags(){return this.shared.flags}set flags(A){this.shared.flags=A}get position(){return this.shared.position}set position(A){this.shared.position=A}},FSNode:class{constructor(A,I,g,Q){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=r.nextInode++,this.name=I,this.mode=g,this.node_ops={},this.stream_ops={},this.rdev=Q,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(A){A?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(A){A?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return r.isDir(this.mode)}get isDevice(){return r.isChrdev(this.mode)}},lookupPath(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(A=U.resolve(A)))return{path:\"\",node:null};if(I=Object.assign({follow_mount:!0,recurse_count:0},I),I.recurse_count>8)throw new r.ErrnoError(32);for(var g=A.split(\"/\").filter((A=>!!A)),Q=r.root,B=\"/\",C=0;C40)throw new r.ErrnoError(32)}}return{path:B,node:Q}},getPath(A){for(var I;;){if(r.isRoot(A)){var g=A.mount.mountpoint;return I?\"/\"!==g[g.length-1]?`${g}/${I}`:g+I:g}I=I?`${A.name}/${I}`:A.name,A=A.parent}},hashName(A,I){for(var g=0,Q=0;Q>>0)%r.nameTable.length},hashAddNode(A){var I=r.hashName(A.parent.id,A.name);A.name_next=r.nameTable[I],r.nameTable[I]=A},hashRemoveNode(A){var I=r.hashName(A.parent.id,A.name);if(r.nameTable[I]===A)r.nameTable[I]=A.name_next;else for(var g=r.nameTable[I];g;){if(g.name_next===A){g.name_next=A.name_next;break}g=g.name_next}},lookupNode(A,I){var g=r.mayLookup(A);if(g)throw new r.ErrnoError(g);for(var Q=r.hashName(A.id,I),B=r.nameTable[Q];B;B=B.name_next){var C=B.name;if(B.parent.id===A.id&&C===I)return B}return r.lookup(A,I)},createNode(A,I,g,Q){var B=new r.FSNode(A,I,g,Q);return r.hashAddNode(B),B},destroyNode(A){r.hashRemoveNode(A)},isRoot:A=>A===A.parent,isMountpoint:A=>!!A.mounted,isFile:A=>32768==(61440&A),isDir:A=>16384==(61440&A),isLink:A=>40960==(61440&A),isChrdev:A=>8192==(61440&A),isBlkdev:A=>24576==(61440&A),isFIFO:A=>4096==(61440&A),isSocket:A=>49152==(49152&A),flagsToPermissionString(A){var I=[\"r\",\"w\",\"rw\"][3&A];return 512&A&&(I+=\"w\"),I},nodePermissions:(A,I)=>r.ignorePermissions||(!I.includes(\"r\")||292&A.mode)&&(!I.includes(\"w\")||146&A.mode)&&(!I.includes(\"x\")||73&A.mode)?0:2,mayLookup(A){if(!r.isDir(A.mode))return 54;var I=r.nodePermissions(A,\"x\");return I||(A.node_ops.lookup?0:2)},mayCreate(A,I){try{r.lookupNode(A,I);return 20}catch(A){}return r.nodePermissions(A,\"wx\")},mayDelete(A,I,g){var Q;try{Q=r.lookupNode(A,I)}catch(A){return A.errno}var B=r.nodePermissions(A,\"wx\");if(B)return B;if(g){if(!r.isDir(Q.mode))return 54;if(r.isRoot(Q)||r.getPath(Q)===r.cwd())return 10}else if(r.isDir(Q.mode))return 31;return 0},mayOpen:(A,I)=>A?r.isLink(A.mode)?32:r.isDir(A.mode)&&(\"r\"!==r.flagsToPermissionString(I)||512&I)?31:r.nodePermissions(A,r.flagsToPermissionString(I)):44,MAX_OPEN_FDS:4096,nextfd(){for(var A=0;A<=r.MAX_OPEN_FDS;A++)if(!r.streams[A])return A;throw new r.ErrnoError(33)},getStreamChecked(A){var I=r.getStream(A);if(!I)throw new r.ErrnoError(8);return I},getStream:A=>r.streams[A],createStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return A=Object.assign(new r.FSStream,A),-1==I&&(I=r.nextfd()),A.fd=I,r.streams[I]=A,A},closeStream(A){r.streams[A]=null},dupStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;var g=r.createStream(A,I);return g.stream_ops?.dup?.(g),g},chrdev_stream_ops:{open(A){var I=r.getDevice(A.node.rdev);A.stream_ops=I.stream_ops,A.stream_ops.open?.(A)},llseek(){throw new r.ErrnoError(70)}},major:A=>A>>8,minor:A=>255&A,makedev:(A,I)=>A<<8|I,registerDevice(A,I){r.devices[A]={stream_ops:I}},getDevice:A=>r.devices[A],getMounts(A){for(var I=[],g=[A];g.length;){var Q=g.pop();I.push(Q),g.push(...Q.mounts)}return I},syncfs(A,g){\"function\"==typeof A&&(g=A,A=!1),r.syncFSRequests++,r.syncFSRequests>1&&I(`warning: ${r.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var Q=r.getMounts(r.root.mount),B=0;function C(A){return r.syncFSRequests--,g(A)}function E(A){if(A)return E.errored?void 0:(E.errored=!0,C(A));++B>=Q.length&&C(null)}Q.forEach((I=>{if(!I.type.syncfs)return E(null);I.type.syncfs(I,A,E)}))},mount(A,I,g){var Q,B=\"/\"===g,C=!g;if(B&&r.root)throw new r.ErrnoError(10);if(!B&&!C){var E=r.lookupPath(g,{follow_mount:!1});if(g=E.path,Q=E.node,r.isMountpoint(Q))throw new r.ErrnoError(10);if(!r.isDir(Q.mode))throw new r.ErrnoError(54)}var D={type:A,opts:I,mountpoint:g,mounts:[]},w=A.mount(D);return w.mount=D,D.root=w,B?r.root=w:Q&&(Q.mounted=D,Q.mount&&Q.mount.mounts.push(D)),w},unmount(A){var I=r.lookupPath(A,{follow_mount:!1});if(!r.isMountpoint(I.node))throw new r.ErrnoError(28);var g=I.node,Q=g.mounted,B=r.getMounts(Q);Object.keys(r.nameTable).forEach((A=>{for(var I=r.nameTable[A];I;){var g=I.name_next;B.includes(I.mount)&&r.destroyNode(I),I=g}})),g.mounted=null;var C=g.mount.mounts.indexOf(Q);g.mount.mounts.splice(C,1)},lookup:(A,I)=>A.node_ops.lookup(A,I),mknod(A,I,g){var Q=r.lookupPath(A,{parent:!0}).node,B=k.basename(A);if(!B||\".\"===B||\"..\"===B)throw new r.ErrnoError(28);var C=r.mayCreate(Q,B);if(C)throw new r.ErrnoError(C);if(!Q.node_ops.mknod)throw new r.ErrnoError(63);return Q.node_ops.mknod(Q,B,I,g)},create:(A,I)=>(I=void 0!==I?I:438,I&=4095,I|=32768,r.mknod(A,I,0)),mkdir:(A,I)=>(I=void 0!==I?I:511,I&=1023,I|=16384,r.mknod(A,I,0)),mkdirTree(A,I){for(var g=A.split(\"/\"),Q=\"\",B=0;B(void 0===g&&(g=I,I=438),I|=8192,r.mknod(A,I,g)),symlink(A,I){if(!U.resolve(A))throw new r.ErrnoError(44);var g=r.lookupPath(I,{parent:!0}).node;if(!g)throw new r.ErrnoError(44);var Q=k.basename(I),B=r.mayCreate(g,Q);if(B)throw new r.ErrnoError(B);if(!g.node_ops.symlink)throw new r.ErrnoError(63);return g.node_ops.symlink(g,Q,A)},rename(A,I){var g,Q,B=k.dirname(A),C=k.dirname(I),E=k.basename(A),D=k.basename(I);if(g=r.lookupPath(A,{parent:!0}).node,Q=r.lookupPath(I,{parent:!0}).node,!g||!Q)throw new r.ErrnoError(44);if(g.mount!==Q.mount)throw new r.ErrnoError(75);var w,i=r.lookupNode(g,E),o=U.relative(A,C);if(\".\"!==o.charAt(0))throw new r.ErrnoError(28);if(\".\"!==(o=U.relative(I,B)).charAt(0))throw new r.ErrnoError(55);try{w=r.lookupNode(Q,D)}catch(A){}if(i!==w){var G=r.isDir(i.mode),M=r.mayDelete(g,E,G);if(M)throw new r.ErrnoError(M);if(M=w?r.mayDelete(Q,D,G):r.mayCreate(Q,D))throw new r.ErrnoError(M);if(!g.node_ops.rename)throw new r.ErrnoError(63);if(r.isMountpoint(i)||w&&r.isMountpoint(w))throw new r.ErrnoError(10);if(Q!==g&&(M=r.nodePermissions(g,\"w\")))throw new r.ErrnoError(M);r.hashRemoveNode(i);try{g.node_ops.rename(i,Q,D),i.parent=Q}catch(A){throw A}finally{r.hashAddNode(i)}}},rmdir(A){var I=r.lookupPath(A,{parent:!0}).node,g=k.basename(A),Q=r.lookupNode(I,g),B=r.mayDelete(I,g,!0);if(B)throw new r.ErrnoError(B);if(!I.node_ops.rmdir)throw new r.ErrnoError(63);if(r.isMountpoint(Q))throw new r.ErrnoError(10);I.node_ops.rmdir(I,g),r.destroyNode(Q)},readdir(A){var I=r.lookupPath(A,{follow:!0}).node;if(!I.node_ops.readdir)throw new r.ErrnoError(54);return I.node_ops.readdir(I)},unlink(A){var I=r.lookupPath(A,{parent:!0}).node;if(!I)throw new r.ErrnoError(44);var g=k.basename(A),Q=r.lookupNode(I,g),B=r.mayDelete(I,g,!1);if(B)throw new r.ErrnoError(B);if(!I.node_ops.unlink)throw new r.ErrnoError(63);if(r.isMountpoint(Q))throw new r.ErrnoError(10);I.node_ops.unlink(I,g),r.destroyNode(Q)},readlink(A){var I=r.lookupPath(A).node;if(!I)throw new r.ErrnoError(44);if(!I.node_ops.readlink)throw new r.ErrnoError(28);return U.resolve(r.getPath(I.parent),I.node_ops.readlink(I))},stat(A,I){var g=r.lookupPath(A,{follow:!I}).node;if(!g)throw new r.ErrnoError(44);if(!g.node_ops.getattr)throw new r.ErrnoError(63);return g.node_ops.getattr(g)},lstat:A=>r.stat(A,!0),chmod(A,I,g){var Q;\"string\"==typeof A?Q=r.lookupPath(A,{follow:!g}).node:Q=A;if(!Q.node_ops.setattr)throw new r.ErrnoError(63);Q.node_ops.setattr(Q,{mode:4095&I|-4096&Q.mode,timestamp:Date.now()})},lchmod(A,I){r.chmod(A,I,!0)},fchmod(A,I){var g=r.getStreamChecked(A);r.chmod(g.node,I)},chown(A,I,g,Q){var B;\"string\"==typeof A?B=r.lookupPath(A,{follow:!Q}).node:B=A;if(!B.node_ops.setattr)throw new r.ErrnoError(63);B.node_ops.setattr(B,{timestamp:Date.now()})},lchown(A,I,g){r.chown(A,I,g,!0)},fchown(A,I,g){var Q=r.getStreamChecked(A);r.chown(Q.node,I,g)},truncate(A,I){if(I<0)throw new r.ErrnoError(28);var g;\"string\"==typeof A?g=r.lookupPath(A,{follow:!0}).node:g=A;if(!g.node_ops.setattr)throw new r.ErrnoError(63);if(r.isDir(g.mode))throw new r.ErrnoError(31);if(!r.isFile(g.mode))throw new r.ErrnoError(28);var Q=r.nodePermissions(g,\"w\");if(Q)throw new r.ErrnoError(Q);g.node_ops.setattr(g,{size:I,timestamp:Date.now()})},ftruncate(A,I){var g=r.getStreamChecked(A);if(0==(2097155&g.flags))throw new r.ErrnoError(28);r.truncate(g.node,I)},utime(A,I,g){var Q=r.lookupPath(A,{follow:!0}).node;Q.node_ops.setattr(Q,{timestamp:Math.max(I,g)})},open(A,I,g){if(\"\"===A)throw new r.ErrnoError(44);var Q;if(g=64&(I=\"string\"==typeof I?(A=>{var I={r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090}[A];if(void 0===I)throw new Error(`Unknown file open mode: ${A}`);return I})(I):I)?4095&(g=void 0===g?438:g)|32768:0,\"object\"==typeof A)Q=A;else{A=k.normalize(A);try{Q=r.lookupPath(A,{follow:!(131072&I)}).node}catch(A){}}var B=!1;if(64&I)if(Q){if(128&I)throw new r.ErrnoError(20)}else Q=r.mknod(A,g,0),B=!0;if(!Q)throw new r.ErrnoError(44);if(r.isChrdev(Q.mode)&&(I&=-513),65536&I&&!r.isDir(Q.mode))throw new r.ErrnoError(54);if(!B){var C=r.mayOpen(Q,I);if(C)throw new r.ErrnoError(C)}512&I&&!B&&r.truncate(Q,0),I&=-131713;var E=r.createStream({node:Q,path:r.getPath(Q),flags:I,seekable:!0,position:0,stream_ops:Q.stream_ops,ungotten:[],error:!1});return E.stream_ops.open&&E.stream_ops.open(E),!G.logReadFiles||1&I||(r.readFiles||(r.readFiles={}),A in r.readFiles||(r.readFiles[A]=1)),E},close(A){if(r.isClosed(A))throw new r.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(A){throw A}finally{r.closeStream(A.fd)}A.fd=null},isClosed:A=>null===A.fd,llseek(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new r.ErrnoError(70);if(0!=g&&1!=g&&2!=g)throw new r.ErrnoError(28);return A.position=A.stream_ops.llseek(A,I,g),A.ungotten=[],A.position},read(A,I,g,Q,B){if(Q<0||B<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(1==(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.read)throw new r.ErrnoError(28);var C=void 0!==B;if(C){if(!A.seekable)throw new r.ErrnoError(70)}else B=A.position;var E=A.stream_ops.read(A,I,g,Q,B);return C||(A.position+=E),E},write(A,I,g,Q,B,C){if(Q<0||B<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(0==(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.write)throw new r.ErrnoError(28);A.seekable&&1024&A.flags&&r.llseek(A,0,2);var E=void 0!==B;if(E){if(!A.seekable)throw new r.ErrnoError(70)}else B=A.position;var D=A.stream_ops.write(A,I,g,Q,B,C);return E||(A.position+=D),D},allocate(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(I<0||g<=0)throw new r.ErrnoError(28);if(0==(2097155&A.flags))throw new r.ErrnoError(8);if(!r.isFile(A.node.mode)&&!r.isDir(A.node.mode))throw new r.ErrnoError(43);if(!A.stream_ops.allocate)throw new r.ErrnoError(138);A.stream_ops.allocate(A,I,g)},mmap(A,I,g,Q,B){if(0!=(2&Q)&&0==(2&B)&&2!=(2097155&A.flags))throw new r.ErrnoError(2);if(1==(2097155&A.flags))throw new r.ErrnoError(2);if(!A.stream_ops.mmap)throw new r.ErrnoError(43);return A.stream_ops.mmap(A,I,g,Q,B)},msync:(A,I,g,Q,B)=>A.stream_ops.msync?A.stream_ops.msync(A,I,g,Q,B):0,ioctl(A,I,g){if(!A.stream_ops.ioctl)throw new r.ErrnoError(59);return A.stream_ops.ioctl(A,I,g)},readFile(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(I.flags=I.flags||0,I.encoding=I.encoding||\"binary\",\"utf8\"!==I.encoding&&\"binary\"!==I.encoding)throw new Error(`Invalid encoding type \"${I.encoding}\"`);var g,Q=r.open(A,I.flags),B=r.stat(A).size,C=new Uint8Array(B);return r.read(Q,C,0,B,0),\"utf8\"===I.encoding?g=h(C,0):\"binary\"===I.encoding&&(g=C),r.close(Q),g},writeFile(A,I){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};g.flags=g.flags||577;var Q=r.open(A,g.flags,g.mode);if(\"string\"==typeof I){var B=new Uint8Array(Y(I)+1),C=J(I,B,0,B.length);r.write(Q,B,0,C,void 0,g.canOwn)}else{if(!ArrayBuffer.isView(I))throw new Error(\"Unsupported data type\");r.write(Q,I,0,I.byteLength,void 0,g.canOwn)}r.close(Q)},cwd:()=>r.currentPath,chdir(A){var I=r.lookupPath(A,{follow:!0});if(null===I.node)throw new r.ErrnoError(44);if(!r.isDir(I.node.mode))throw new r.ErrnoError(54);var g=r.nodePermissions(I.node,\"x\");if(g)throw new r.ErrnoError(g);r.currentPath=I.path},createDefaultDirectories(){r.mkdir(\"/tmp\"),r.mkdir(\"/home\"),r.mkdir(\"/home/web_user\")},createDefaultDevices(){r.mkdir(\"/dev\"),r.registerDevice(r.makedev(1,3),{read:()=>0,write:(A,I,g,Q,B)=>Q}),r.mkdev(\"/dev/null\",r.makedev(1,3)),a.register(r.makedev(5,0),a.default_tty_ops),a.register(r.makedev(6,0),a.default_tty1_ops),r.mkdev(\"/dev/tty\",r.makedev(5,0)),r.mkdev(\"/dev/tty1\",r.makedev(6,0));var A=new Uint8Array(1024),I=0,g=()=>(0===I&&(I=L(A).byteLength),A[--I]);r.createDevice(\"/dev\",\"random\",g),r.createDevice(\"/dev\",\"urandom\",g),r.mkdir(\"/dev/shm\"),r.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){r.mkdir(\"/proc\");var A=r.mkdir(\"/proc/self\");r.mkdir(\"/proc/self/fd\"),r.mount({mount(){var I=r.createNode(A,\"fd\",16895,73);return I.node_ops={lookup(A,I){var g=+I,Q=r.getStreamChecked(g),B={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>Q.path}};return B.parent=B,B}},I}},{},\"/proc/self/fd\")},createStandardStreams(){G.stdin?r.createDevice(\"/dev\",\"stdin\",G.stdin):r.symlink(\"/dev/tty\",\"/dev/stdin\"),G.stdout?r.createDevice(\"/dev\",\"stdout\",null,G.stdout):r.symlink(\"/dev/tty\",\"/dev/stdout\"),G.stderr?r.createDevice(\"/dev\",\"stderr\",null,G.stderr):r.symlink(\"/dev/tty1\",\"/dev/stderr\"),r.open(\"/dev/stdin\",0),r.open(\"/dev/stdout\",1),r.open(\"/dev/stderr\",1)},staticInit(){[44].forEach((A=>{r.genericErrors[A]=new r.ErrnoError(A),r.genericErrors[A].stack=\"\"})),r.nameTable=new Array(4096),r.mount(Z,{},\"/\"),r.createDefaultDirectories(),r.createDefaultDevices(),r.createSpecialDirectories(),r.filesystems={MEMFS:Z}},init(A,I,g){r.init.initialized=!0,G.stdin=A||G.stdin,G.stdout=I||G.stdout,G.stderr=g||G.stderr,r.createStandardStreams()},quit(){r.init.initialized=!1;for(var A=0;Athis.length-1||A<0)){var I=A%this.chunkSize,g=A/this.chunkSize|0;return this.getter(g)[I]}}setDataGetter(A){this.getter=A}cacheLength(){var A=new XMLHttpRequest;if(A.open(\"HEAD\",Q,!1),A.send(null),!(A.status>=200&&A.status<300||304===A.status))throw new Error(\"Couldn't load \"+Q+\". Status: \"+A.status);var I,g=Number(A.getResponseHeader(\"Content-length\")),B=(I=A.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===I,C=(I=A.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===I,E=1048576;B||(E=g);var D=this;D.setDataGetter((A=>{var I=A*E,B=(A+1)*E-1;if(B=Math.min(B,g-1),void 0===D.chunks[A]&&(D.chunks[A]=((A,I)=>{if(A>I)throw new Error(\"invalid range (\"+A+\", \"+I+\") or no bytes requested!\");if(I>g-1)throw new Error(\"only \"+g+\" bytes available! programmer error!\");var B=new XMLHttpRequest;if(B.open(\"GET\",Q,!1),g!==E&&B.setRequestHeader(\"Range\",\"bytes=\"+A+\"-\"+I),B.responseType=\"arraybuffer\",B.overrideMimeType&&B.overrideMimeType(\"text/plain; charset=x-user-defined\"),B.send(null),!(B.status>=200&&B.status<300||304===B.status))throw new Error(\"Couldn't load \"+Q+\". Status: \"+B.status);return void 0!==B.response?new Uint8Array(B.response||[]):c(B.responseText||\"\",!0)})(I,B)),void 0===D.chunks[A])throw new Error(\"doXHR failed!\");return D.chunks[A]})),!C&&g||(E=g=1,g=this.getter(0).length,E=g,R(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=g,this._chunkSize=E,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(\"undefined\"!=typeof XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var D={isDevice:!1,contents:new E}}else D={isDevice:!1,url:Q};var w=r.createFile(A,I,D,B,C);D.contents?w.contents=D.contents:D.url&&(w.contents=null,w.url=D.url),Object.defineProperties(w,{usedBytes:{get:function(){return this.contents.length}}});var i={};function o(A,I,g,Q,B){var C=A.node.contents;if(B>=C.length)return 0;var E=Math.min(C.length-B,Q);if(C.slice)for(var D=0;D{var I=w.stream_ops[A];i[A]=function(){return r.forceLoadFile(w),I(...arguments)}})),i.read=(A,I,g,Q,B)=>(r.forceLoadFile(w),o(A,I,g,Q,B)),i.mmap=(A,I,Q,B,C)=>{r.forceLoadFile(w);var E=H(I);if(!E)throw new r.ErrnoError(48);return o(A,g,E,I,Q),{ptr:E,allocated:!0}},w.stream_ops=i,w}},q={DEFAULT_POLLMASK:5,calculateAt(A,I,g){if(k.isAbs(I))return I;var Q;-100===A?Q=r.cwd():Q=q.getStreamFromFD(A).path;if(0==I.length){if(!g)throw new r.ErrnoError(44);return Q}return k.join2(Q,I)},doStat(A,I,g){var Q=A(I);B[g>>2]=Q.dev,B[g+4>>2]=Q.mode,E[g+8>>2]=Q.nlink,B[g+12>>2]=Q.uid,B[g+16>>2]=Q.gid,B[g+20>>2]=Q.rdev,i[g+24>>3]=BigInt(Q.size),B[g+32>>2]=4096,B[g+36>>2]=Q.blocks;var C=Q.atime.getTime(),D=Q.mtime.getTime(),w=Q.ctime.getTime();return i[g+40>>3]=BigInt(Math.floor(C/1e3)),E[g+48>>2]=C%1e3*1e3,i[g+56>>3]=BigInt(Math.floor(D/1e3)),E[g+64>>2]=D%1e3*1e3,i[g+72>>3]=BigInt(Math.floor(w/1e3)),E[g+80>>2]=w%1e3*1e3,i[g+88>>3]=BigInt(Q.ino),0},doMsync(A,I,g,Q,B){if(!r.isFile(I.node.mode))throw new r.ErrnoError(43);if(2&Q)return 0;var E=C.slice(A,A+g);r.msync(I,E,B,g,Q)},getStreamFromFD:A=>r.getStreamChecked(A),varargs:void 0,getStr:A=>K(A)};function t(){var A=B[+q.varargs>>2];return q.varargs+=4,A}var W=t;var l=A=>A<-9007199254740992||A>9007199254740992?NaN:Number(A);var b=(A,I,g)=>J(A,C,I,g),x=A=>{var I=(A-o.buffer.byteLength+65535)/65536;try{return o.grow(I),y(),1}catch(A){}},m={},n=()=>{if(!n.strings){var A={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:\"./this.program\"};for(var I in m)void 0===m[I]?delete A[I]:A[I]=m[I];var g=[];for(var I in A)g.push(`${I}=${A[I]}`);n.strings=g}return n.strings},O=A=>{throw`exit(${A})`};var V=A=>X(A);r.createPreloadedFile=(A,I,g,Q,B,C,E,D,w,i)=>{var o=I?U.resolve(k.join2(A,I)):A,G=getUniqueRunDependency(`cp ${o}`);function M(g){!function(g){i?.(),D||((A,I,g,Q,B,C)=>{r.createDataFile(A,I,g,Q,B,C)})(A,I,g,Q,B,w),C?.(),removeRunDependency(G)}(g)}addRunDependency(G),\"string\"==typeof g?((A,I,g,Q)=>{var B=Q?\"\":getUniqueRunDependency(`al ${A}`);readAsync(A).then((A=>{I(new Uint8Array(A)),B&&removeRunDependency(B)}),(I=>{if(!g)throw`Loading data file \"${A}\" failed.`;g()})),B&&addRunDependency(B)})(g,M,E):M(g)},r.staticInit();var z,j,X,e,T,p={a:(A,I,g,Q)=>{F(`Assertion failed: ${K(A)}, at: `+[I?K(I):\"unknown filename\",g,Q?K(Q):\"unknown function\"])},b:(A,I,g)=>{throw new N(A).init(I,g),A},v:function(A,I,g,Q){try{if(I=q.getStr(I),I=q.calculateAt(A,I),-8&g)return-28;var B=r.lookupPath(I,{follow:!0}).node;if(!B)return-44;var C=\"\";return 4&g&&(C+=\"r\"),2&g&&(C+=\"w\"),1&g&&(C+=\"x\"),C&&r.nodePermissions(B,C)?-2:0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},f:function(A,I,g){q.varargs=g;try{var B=q.getStreamFromFD(A);switch(I){case 0:if((C=t())<0)return-28;for(;r.streams[C];)C++;return r.dupStream(B,C).fd;case 1:case 2:case 13:case 14:return 0;case 3:return B.flags;case 4:var C=t();return B.flags|=C,0;case 12:C=W();return Q[C+0>>1]=2,0}return-28}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},u:function(A,I){try{var g=q.getStreamFromFD(A);return q.doStat(r.stat,g.path,I)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},k:function(A,I,C){q.varargs=C;try{var E=q.getStreamFromFD(A);switch(I){case 21509:case 21510:case 21511:case 21512:case 21524:case 21515:return E.tty?0:-59;case 21505:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcgets){var D=E.tty.ops.ioctl_tcgets(E),w=W();B[w>>2]=D.c_iflag||0,B[w+4>>2]=D.c_oflag||0,B[w+8>>2]=D.c_cflag||0,B[w+12>>2]=D.c_lflag||0;for(var i=0;i<32;i++)g[w+i+17]=D.c_cc[i]||0;return 0}return 0;case 21506:case 21507:case 21508:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcsets){w=W();var o=B[w>>2],G=B[w+4>>2],M=B[w+8>>2],R=B[w+12>>2],F=[];for(i=0;i<32;i++)F.push(g[w+i+17]);return E.tty.ops.ioctl_tcsets(E.tty,I,{c_iflag:o,c_oflag:G,c_cflag:M,c_lflag:R,c_cc:F})}return 0;case 21519:if(!E.tty)return-59;w=W();return B[w>>2]=0,0;case 21520:return E.tty?-28:-59;case 21531:w=W();return r.ioctl(E,I,w);case 21523:if(!E.tty)return-59;if(E.tty.ops.ioctl_tiocgwinsz){var y=E.tty.ops.ioctl_tiocgwinsz(E.tty);w=W();Q[w>>1]=y[0],Q[w+2>>1]=y[1]}return 0;default:return-28}}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},s:function(A,I,g,Q){try{I=q.getStr(I);var B=256&Q,C=4096&Q;return Q&=-6401,I=q.calculateAt(A,I,C),q.doStat(B?r.lstat:r.stat,I,g)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},h:function(A,I,g,Q){q.varargs=Q;try{I=q.getStr(I),I=q.calculateAt(A,I);var B=Q?t():0;return r.open(I,g,B).fd}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},t:function(A,I){try{return A=q.getStr(A),q.doStat(r.stat,A,I)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},j:()=>{F(\"\")},n:function(A,I,g,Q,C,D,w){C=l(C);try{if(isNaN(C))return 61;var i=q.getStreamFromFD(Q),o=r.mmap(i,A,C,I,g),G=o.ptr;return B[D>>2]=o.allocated,E[w>>2]=G,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},o:function(A,I,g,Q,B,C){C=l(C);try{var E=q.getStreamFromFD(B);2&g&&q.doMsync(A,E,I,Q,C)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},l:(A,I,g,Q)=>{var C=(new Date).getFullYear(),D=new Date(C,0,1),w=new Date(C,6,1),i=D.getTimezoneOffset(),o=w.getTimezoneOffset(),G=Math.max(i,o);E[A>>2]=60*G,B[I>>2]=Number(i!=o);var M=A=>{var I=A>=0?\"-\":\"+\",g=Math.abs(A);return`UTC${I}${String(Math.floor(g/60)).padStart(2,\"0\")}${String(g%60).padStart(2,\"0\")}`},R=M(i),F=M(o);oDate.now(),m:A=>{var I=C.length,g=2147483648;if((A>>>=0)>g)return!1;for(var Q,B,E=1;E<=4;E*=2){var D=I*(1+.2/E);D=Math.min(D,A+100663296);var w=Math.min(g,(Q=Math.max(A,D))+((B=65536)-Q%B)%B);if(x(w))return!0}return!1},q:(A,I)=>{var Q=0;return n().forEach(((B,C)=>{var D=I+Q;E[A+4*C>>2]=D,((A,I)=>{for(var Q=0;Q{var g=n();E[A>>2]=g.length;var Q=0;return g.forEach((A=>Q+=A.length+1)),E[I>>2]=Q,0},g:O,c:function(A){try{var I=q.getStreamFromFD(A);return r.close(I),0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},e:function(A,I,Q,B){try{var C=((A,I,Q,B)=>{for(var C=0,D=0;D>2],i=E[I+4>>2];I+=8;var o=r.read(A,g,w,i,B);if(o<0)return-1;if(C+=o,o>2]=C,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},p:function(A,I,g,Q){I=l(I);try{if(isNaN(I))return 61;var B=q.getStreamFromFD(A);return r.llseek(B,I,g),i[Q>>3]=BigInt(B.position),B.getdents&&0===I&&0===g&&(B.getdents=null),0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},d:function(A,I,Q,B){try{var C=((A,I,Q,B)=>{for(var C=0,D=0;D>2],i=E[I+4>>2];I+=8;var o=r.write(A,g,w,i,B);if(o<0)return-1;C+=o,void 0!==B&&(B+=o)}return C})(q.getStreamFromFD(A),I,Q);return E[B>>2]=C,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},w:function(A){return G.agerrMessages.push(K(A)),0}};G.ccall=(A,I,Q,B,C)=>{var E={string:A=>{var I=0;return null!=A&&0!==A&&(I=(A=>{var I=Y(A)+1,g=V(I);return b(A,g,I),g})(A)),I},array:A=>{var I,Q,B=V(A.length);return I=A,Q=B,g.set(I,Q),B}};var D=(A=>G[\"_\"+A])(A),w=[],i=0;if(B)for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:\"i8\";switch(I.endsWith(\"*\")&&(I=\"*\"),I){case\"i1\":case\"i8\":return g[A];case\"i16\":return Q[A>>1];case\"i32\":return B[A>>2];case\"i64\":return i[A>>3];case\"float\":return D[A>>2];case\"double\":return w[A>>3];case\"*\":return E[A>>2];default:F(`invalid type for getValue: ${I}`)}},G.PATH=k,G.UTF8ToString=K,G.stringToUTF8=b,G.lengthBytesUTF8=Y,G.FS=r;var v={a:p};return WebAssembly.instantiate(G.wasm,v).then((I=>{var g=I.instance.exports;G._viz_set_y_invert=g.z,G._viz_set_reduce=g.A,G._viz_get_graphviz_version=g.B,G._viz_get_plugin_list=g.C,G._viz_create_graph=g.D,G._viz_read_one_graph=g.E,G._viz_string_dup=g.F,G._viz_string_dup_html=g.G,G._viz_string_free=g.H,G._viz_add_node=g.I,G._viz_add_edge=g.J,G._viz_add_subgraph=g.K,G._viz_set_default_graph_attribute=g.L,G._viz_set_default_node_attribute=g.M,G._viz_set_default_edge_attribute=g.N,G._viz_set_attribute=g.O,G._viz_free_graph=g.P,G._viz_render_graph=g.Q,G._free=g.S,G._malloc=g.T,z=g.U,j=g.V,X=g.W,e=g.X,T=g.Y,o=g.x,y(),function(A){A.y(),G.noFSInit||r.init.initialized||r.init(),r.ignorePermissions=!1}(g),A(G)})),M};const I=[[/^Error: (.*)/,\"error\"],[/^Warning: (.*)/,\"warning\"]];function g(A){return function(A){const I=[];let g;for(let Q=0;Q{for(let g=0;g{A.ccall(\"viz_set_default_graph_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}));if(g.nodeAttributes)for(const[B,C]of Object.entries(g.nodeAttributes))Q(A,I,C,(g=>{A.ccall(\"viz_set_default_node_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}));if(g.edgeAttributes)for(const[B,C]of Object.entries(g.edgeAttributes))Q(A,I,C,(g=>{A.ccall(\"viz_set_default_edge_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}))}function C(A,I,g,B){for(const[C,E]of Object.entries(B))Q(A,I,E,(I=>{A.ccall(\"viz_set_attribute\",\"number\",[\"number\",\"string\",\"number\"],[g,C,I])}))}function E(A,I,g){B(A,I,g),g.nodes&&g.nodes.forEach((g=>{const Q=A.ccall(\"viz_add_node\",\"number\",[\"number\",\"string\"],[I,String(g.name)]);g.attributes&&C(A,I,Q,g.attributes)})),g.edges&&g.edges.forEach((g=>{const Q=A.ccall(\"viz_add_edge\",\"number\",[\"number\",\"string\",\"string\"],[I,String(g.tail),String(g.head)]);g.attributes&&C(A,I,Q,g.attributes)})),g.subgraphs&&g.subgraphs.forEach((g=>{const Q=A.ccall(\"viz_add_subgraph\",\"number\",[\"number\",\"string\"],[I,String(g.name)]);E(A,Q,g)}))}function D(A,I,g){const Q=A.ccall(\"viz_create_graph\",\"number\",[\"string\",\"number\",\"number\"],[I.name,void 0===I.directed||I.directed,void 0!==I.strict&&I.strict]);return E(A,Q,I),Q}function w(A,I,Q){let C,E,w;try{if(A.agerrMessages=[],A.stderrMessages=[],w=function(A,I){return I?I.map((I=>{if(\"string\"!=typeof I.name)throw new Error(\"image name must be a string\");if(\"number\"!=typeof I.width&&\"string\"!=typeof I.width)throw new Error(\"image width must be a number or string\");if(\"number\"!=typeof I.height&&\"string\"!=typeof I.height)throw new Error(\"image height must be a number or string\");const g=A.PATH.join(\"/\",I.name),Q=`\\n\\n`;return A.FS.createPath(\"/\",A.PATH.dirname(g)),A.FS.writeFile(g,Q),g})):[]}(A,Q.images),\"string\"==typeof I)C=function(A,I,g){let Q;try{const g=A.lengthBytesUTF8(I);return Q=A.ccall(\"malloc\",\"number\",[\"number\"],[g+1]),A.stringToUTF8(I,Q,g+1),A.ccall(\"viz_read_one_graph\",\"number\",[\"number\"],[Q])}finally{Q&&A.ccall(\"free\",\"number\",[\"number\"],[Q])}}(A,I);else{if(\"object\"!=typeof I)throw new Error(\"input must be a string or object\");C=D(A,I)}return 0===C?{status:\"failure\",output:void 0,errors:g(A)}:(B(A,C,Q),A.ccall(\"viz_set_y_invert\",\"number\",[\"number\"],[Q.yInvert?1:0]),A.ccall(\"viz_set_reduce\",\"number\",[\"number\"],[Q.reduce?1:0]),E=A.ccall(\"viz_render_graph\",\"number\",[\"number\",\"string\",\"string\"],[C,Q.format,Q.engine]),0===E?{status:\"failure\",output:void 0,errors:g(A)}:{status:\"success\",output:A.UTF8ToString(E),errors:g(A)})}catch(I){if(/^exit\\(\\d+\\)/.test(I))return{status:\"failure\",output:void 0,errors:g(A)};throw I}finally{C&&A.ccall(\"viz_free_graph\",\"number\",[\"number\"],[C]),E&&A.ccall(\"free\",\"number\",[\"number\"],[E]),w&&function(A,I){for(const g of I)A.FS.analyzePath(g).exists&&A.FS.unlink(g)}(A,w)}}function i(A,I){const g=A.ccall(\"viz_get_plugin_list\",\"number\",[\"string\"],[I]);if(0==g)throw new Error(`couldn't get plugin list: ${I}`);const Q=[];let B,C=g;for(;B=A.getValue(C,\"*\");)Q.push(A.UTF8ToString(B)),A.ccall(\"free\",\"number\",[\"number\"],[B]),C+=4;return A.ccall(\"free\",\"number\",[\"number\"],[g]),Q}class o{constructor(A){this.module=A}get graphvizVersion(){return function(A){const I=A.ccall(\"viz_get_graphviz_version\",\"number\",[],[]);return A.UTF8ToString(I)}(this.module)}get formats(){return i(this.module,\"device\")}get engines(){return i(this.module,\"layout\")}render(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return w(this.module,A,{format:\"dot\",engine:\"dot\",...I})}renderString(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.render(A,I);if(\"success\"!==g.status)throw new Error(g.errors.find((A=>\"error\"==A.level))?.message||\"render failed\");return g.output}renderSVGElement(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:\"svg\"});return(new DOMParser).parseFromString(g,\"image/svg+xml\").documentElement}renderJSON(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:\"json\"});return JSON.parse(g)}}const G=\"AGFzbQEAAAABkgdzYAJ/fwF/YAF/AGABfwF/YAN/f38Bf2ACf38AYAN/f38AYAR/f39/AX9gBX9/f39/AX9gBH9/f38AYAV/f39/fwBgBn9/f39/fwF/YAZ/f39/f38AYAAAYAABf2AIf39/f39/f38Bf2AHf39/f39/fwF/YAJ/fwF8YAF8AXxgB39/f39/f38AYAd/f39/fHx/AGADf39/AXxgAX8BfGACf3wAYAR8fHx/AXxgAnx8AXxgA398fABgA39/fgF/YAl/f39/f39/f38AYAV/fn5+fgBgBH9/f3wAYAR/f3x8AX9gCn9/f39/f39/f38Bf2ADfHx8AXxgA39/fgBgAAF8YAR/f39/AXxgA39+fwF+YAJ/fgF/YAN/f3wAYAV/f39/fgF/YAR/fn5/AGAEf398fwBgAnx/AXxgBH9/f3wBf2ADfHx/AXxgA398fwBgCH9/f39/f39/AGACf3wBf2AFf39/f3wBf2ALf39/f39/f39/f38Bf2AFf39+f38AYAR/f3x/AX9gAn9+AGAFf39/f3wAYAN/f3wBf2ABfwF+YAZ/fHx8fHwBfGAHf39/fHx/fwBgBX9/fH9/AX9gA39/fwF+YAx/f39/f39/f39/f38Bf2ACfX0BfWACf38BfmAGf39/fH9/AGAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgCn9/f39/f39/f38AYAR/f39/AX5gBn98f39/fwF/YAd/f39/f35+AX9gBn9/f39+fgF/YAd/f39/fn9/AX9gBn9/f39/fgF/YAR/fn9/AX9gBH9/fHwBfGAFf398f38AYAl/f39/f39/f38Bf2AEf398fABgBn9/f3x/fwF/YAJ/fQF/YAR+fn5+AX9gCH9/f398fHx/AGADf31/AGACfn8Bf2ABfAF/YAZ/fX9/f38AYAR/f31/AGACfn4BfWACf30AYAR/f39+AX5gBnx8fH9/fwBgBH98fHwAYAJ+fgF8YAJ8fwF/YAV/f398fwBgBn9/f3x8fwBgA398fAF/YAd/fHx8fHx8AGAEf3x/fwF/YAp/fH9/f39/f39/AGAFf39/f38BfGAHf39/f3x/fwF/YAV/f31/fwBgA3x8fAF/YAV/f3x8fABgA39/fwF9YAN+fn4Bf2AEf35+fgBgA39+fwF/YAABfmABfwF9YAN/fn4Bf2AGfHx/fHx/AGAEfHx8fAF8YAR/fH9/AAKLARcBYQFhAAgBYQFiAAUBYQFjAAIBYQFkAAYBYQFlAAYBYQFmAAMBYQFnAAEBYQFoAAYBYQFpACIBYQFqAAwBYQFrAAMBYQFsAAgBYQFtAAIBYQFuAEcBYQFvAEgBYQFwAEkBYQFxAAABYQFyAAABYQFzAAYBYQF0AAABYQF1AAABYQF2AAYBYQF3AAIDlRSTFAEAAAIABQMCBgMCAgAYAgwEAAAAAgAFBgIRBBgDAgIFAgIEGwQAAAAAAggCABEEAAABAwYEAgIGGAYDB0oFAgIRBAQEAAAAAgIGAgQBAQ0BHAUAAgMCAAwABQICAwMCFgEDAgMDBAICAAAEAgAGCAMCAgAiAwUEDAMDAgIACAEEAgIAHAYzCQQCFAIFAgIGDRgBGAAASwIECAQoHAkEAwQCBAUBCQIEAgwCAgMABQEjAgAEBAMiAwIEAAQEBwIEEAMEBAUDBAQEAikAAAIABQICBA8CBAIEAgIEBAQEBQMDAgMCAggEBAEDFggFBQUJBAEANAIDAgQEAwMBBgMEBAUWFSMHAgIBAAQHBwYDAgAFFhURCgEBAgkBAgAACwcCCAAEAAAUBAMATAIODggAAAIAAwMBARkAAjUTAQUEBQE2CAQZEAkJBAgBAgQEBAIAAggCBRwqAgMFAQACAAMABQEGACsFNwFNAk4BBAMBAB1PBAQLACsAARAHAgIABAQKCgAAAgIoUAICAwMAAgcABAIAAAECAQkBHQMEBQIABQQFEAYGBQIBBDZRIg5SCAACBAIEAgUAAB8CHwICBAIAAwQCUwAAAAICAgEBBwIlBwMDEBAQAggNBAICBQECAgEBAwEEBQEBAQEJAQQCAQEBAQwCCAIFBQEHBCkIAAIAAQcABQAFBAgDAAACAANULBgIEQAAAgAOBQECBQQHDQYEAgADBgUEAgMKAAABAA0CAQIJAQAABAMBAgIEBAUDCAYEBAAEKgANAAIFBAItBRIFBQECAQEIBR0ICAQQABUFFAEBAQAUHQABARBVHgQEBFYICDgEOAAFCB4CBAgJCAkEAgICCAEEAgIEAwgADwAPAAIBBQAFBAIBAARXAlgEBlkAAAEEEgQGAhEGAQYGCgAGHwEAAAYGAgIFAwIFBQQCBAANBwUCBwQEBQEGAQIAGQAACQkIAAgCDQEEAQQHBQEEARsEBQQEAwMEAwBaCgoDBQMSOQADDQICAAUBAAABAQUBAQEFAgIDAAIBLgEELQEBAQUBAgQIEiMCAAICAQEACQIBBgwBAQYHLwM6BgIAAgIEBAUUDgAAAAAGBAEEAQcEAgEBCQEBAwQBBQQKBQQFBQMEAgIEAAUAAgAABQEFDQIEBQVbCgkOBgYOBQsFCAABBQQ7AgIDBAIAAgAJBAQBAgEDPAkDPAkCAgICBQAGAS8CADQEAAJcAAcAAwgBAgACCQUDAAIRPQJdEQIRAQ8DBgYEAwIABgYGBgEGAgQHAgIAAAACBwQNDAEFBAQlIQAEBQIBBj4EBAUIBQAAAA8AAgoCBwUJAAAABAwEDQAEXgAIBwQDBAAFXwQACAQCAQIGBgENAQAFYAEABQEBAwMEAwIBBQMEAAgEAAYEAQ0BAwQAAAIABAUIBgQBDAQPAAQFYRkBAz8XOT8EAAYZAwsDAgYFBAIEAAYBBAICAAINEgAFAQAEAQAWAQMDBAAHCAEGABIEAQQEBAgECAUDCAQLCAgCBQgAAQIBFQEFAggCBAUBFQQIAwsLCQIDAQQBAQQGCAEEEAQEBAIECRYBAQEJBgQBBAESBBYEDQEFAwACAQwAA2I6MwULYxsrBQIABQgCCgQHAAQBARQEAQMAZAQEBAwFBAMAAwgABgQEGQEEAwgILAMECAoEAQMIBWUFCAEJEAgICQkBBwMBAwgjAAEIZgYJCGcEBwUAAAIBAwUBAAwEAQYAAwEAAAEMBQIEAgIGAAQEAgUAFWgALQUEAQIBBAQBBAAEAQsBAQQEBAUACAEFCwMDAwpACkAGBgsABSYPAgYIDw4GKQoCBQcFAQIAAAguBQUuAjsBAgECBAIEAQUCAgUCAgUCAwUCAQEEAgIHDg4HDgQOAgcOAAIAAQEBAQQJAgEBBAQCAwNBQgQDQUICAgIJAAQxBAECAgMFBDEEBAQABAsJCwsCCQsLAgMSEgEDEhIQDQoBAwEIFGlDAQYKBkMGBgEABQIGAQIHAAACAgIEAgIAAQAAAgQFAgUIBQgEAQACBQQFAAQCAgEEAgACAQACAgICAAEcagAEAAMEIQMIAQIPKhEsBAQ+CBwoAWsABAQEAgUCAz0mBGwECAICAQIREW0IAQQBAQcvAwEBBgYGBwMGBgYHAAADBgYGBwQGHwMxAh8IAAIZBgQPBAo3AgQBAggPAARuAQMCCgcPAQoGBgEAAAIGAQABAQIBBAAAAAADAwMBAxoAAAADBAEEAgAECCUEAQEEAQwDAgwBAAMABQQFCAUCBQQCBAQEbwklAAIAASEaAgUJAQMMBAIEAQgAAAwMAgAAAgIFBAEFBAQBAwsMCA0MDAMHBAAAAAMEAxABAAsICAQGFAMIBQkECQYGBAgHAAABAAACASYFBQQAAgEWAAAKAwEEAQUBAQMAAgAEAAEEAAACBAAIBQAFAgACAwEDFQECGHABJgUVBQADAAAEAgUBBwQFAQUFBQEAAAkECQU1cQMHDQQFAgEBBAIEAQkFBQgAAQgDDA0EBgIGBAEDBAEdBQYFBgIAAQQBBQcFBQUVDQECAgEBDQAEAQENAQwBBAMUBQQFBgQJcgMAAgQEAgMFBQQFBAUFAQICAgICAgIXExMXExcTExcTFxMXEwAAAAMAAAQAAQAACAgIAQgICAgEBQgIBQUBAQEBBAIFCAgFBQEBAAEBAQEBAQEIAQEBBQgIBQUBAQEBBAUICAUFAQkBAQEBCAEBAQkEBQgIBQUJAQEBCAEBAQkBAQUICAUEBQEBAQEBAQUIAAgFBQEBAQEBCAEBAQEBAQAABAUBAQACAAEBAwAeHgMAAAEBAgADAAAAAAAAAAABAQ0AAAABAwEBAQABAQ0CAQACAgICCwsLCQkJAwgICAMDAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECBAQEBAQEAgIBAQIHAgcODgEHBwMGAwADAAEHAwYDAAMABgYGAwELCwpFCkUPDw8PDw8OAQoKCgoKDgoKCgoKB0YwJwEHJwcHAAdGMCcHJwcHCgoKCgoKCgoKCgoKCgoKCgoBCgMIAQcDCAcBAQIIATIAAAICAgUBAgUDAgUCAwgyAwEAAwMERAEkAyQDAgcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBggDAAYAAAYGBgYGBgYHBwcGCAMABgAABgYGAwYGBgYAAAAAAAAABwcHBwYDAAYAAAYGBgYGBgYDBgYDBgYIBwcAAAAGBgYBBgYDAwMBBQUAAQUDAgADAAAFGiEaBwAAAAAAAAUFAQAAAAIFBQABAAEAAAAAAAAFAAEABAQABAAEBwAIAQQEBAAEAAgBAQEBAQABAQAAAAAAAQEBAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBAUgICAgAQABBAcBcAHLBssGBQcBAYQCgIACBggBfwFB8LwPCweJARwBeAIAAXkAvwgBegCpFAFBAKwSAUIA5hABQwDZEAFEANAQAUUAzBABRgC1EAFHAPAPAUgA0w8BSQCoFAFKAIAUAUsA9RMBTADbEwFNANATAU4AyBMBTwCyEwFQAKsTAVEA/xIBUgEAAVMAFwFUAEIBVQCnEgFWAPQQAVcA8xABWADyEAFZAPkQCfMMAQBBAQvKBhbXEIoKyxDGEOgPgQStCMMT3Q2gEp0SmhLaBtgQ6hDsEM8QzhDlEOQQ8RDwEIoShhLnEdcR7hDtEOwR9RDvEBfSCusQ6RDoEOcQvQrSENMQjgXjEOIQ4RDgEN8Q3hDdENwQrQicCtsQ2hCOCtQQ1hDVEJgBmAGOCtEQ8grsAs0QnQnKEMkQ3wxjxRDBEMIQiwm/EMQQwxCoBsAQmQYZvRC8ELsQuhC5ELgQtxC2ELQQsxDdDbIQsRD2BLAQrxCgBq4QoAatEKAGrBCrEKoQqRCoEKcQ+gimEKUQpBCjEKIQoRCgEJ8QnhCdEJ4G+AieBvgIngacEJsQmhCZEJgQlxCWEJUQlBCTEJIQkRD9A5AQ/QOPEP0DjhD9A40Q/QOMEIsQihCJEIgQhxCGEIUQhBCDEIIQgRCAEP8P/g/9D/wP+gj7D/oP+Q/4D/cP9g/1D/QP8w/yD/EP7w/uD+0P7A/rD+oP6Q/nD+YP5Q/kD+MP4g/hD+AP3w/eD90P2A/cD9sP2g/ZD9cP1g++ENUP1A8x0g/RD9APzw/OD80PzA/LD8oPyQ/ID8cPxg/FD8QPww/KCMIPwQ/AD78Pvg/KCL0PvA//Bc4Euw+6D7kPuA+3D7YPtQ+0D7MPsg+xD7APrw+uD6cUphSlFKQUoxSiFKEUoBT/BZ8UnhSdFJwUmxSaFJkUmBSXFJYUlRSUFJMUkhSRFJAUjxSOFI0UjBSLFIoUiRSIFIcUhhSFFIQUgxSCFIEU/xP2BP4T/RP8E9IK+xP6E/kT+BP0E/MT8hPxE/cT8BPvE+4Tzg7tE+wT6xPoE+cT5hPlE+QT9hPjE+IT4RPqE+kT4BPfE/8F3hPdE9wT2hPZE9gTrQjXE9YT1ROYAZgB1BPTE9IT0RO5Ac4TzRPME8sTyRPuB8oT4Q3HE8YTxRPEE8ITwRPAE78TvhO9E7wTuxO6E7kTuBO3E7YTtRO0E7gNsxOxE7ATrxOuEz1CrRPPB+gMwwesE+YMxAfNB6oT5wzrDKkTxQeoE/AMpxOmE6UTpBOjE6IToROgE58TnhOdE5wTmxOaE5kTmBOXE5YTlROUE5MTkhORE5AT7AyPE44TjROME4sTihOJE98MiBOHE4YThROEE/ES8BLvEu4S7RLsEusS6hLpEugS5xLmEuUS5BLjEuISgxOCE4ETgBP+Ev0S/BL7EvoS+RL4EvcS9hL1EvQS8xLyEuES4BLfEs4O3RLHEtAM3BLbEtoS2RLYEtcS1hLVEtQS0xLSEtES0BLPEs4SzRLMEssSwhLeEroStBKzEsoSyRLEEsgSxhLFEsMSwRLAEr8SvhK9ErwSuxK5ErgStxK2ErUSshKvEq4SsBKxEp8DmAGtEqsSqhKpEqgSqgemEqgHpRKkEqMSmAGYAaISoRKfEpwMnhKcDKUHlgycEpsSnweTEpQSkhKXEpYSlRKeB4cMkRKQEp0HjxLgA+AD4APgA6ILohGgEZ4RnBGaEZgRlhGUEZIRkBGOEYwRihGIEacLyRG5Bp8LvRG8EbsRuhG5EaALuBG3EbYRrAu0EbMRshGxEbARmAGvEa4RkwutEasRqhGpEacRpRGSC6wRmRKYEqgRphGkEewCY2PIEccRxhHFEcQRwxHCEcERoAvAEb8RvhFjnQudC5UEzgTOBLURzgRjmguYC5UEmAGYAZcLlwVjmguYC5UEmAGYAZcLlwVjlguVC5UEmAGYAZQLlwVjlguVC5UEmAGYAZQLlwXsAmOOEo0SjBLsAmOLEokSiBJjhxKFEoQSgxLlC+ULghKBEoAS/xH+EWP9EfwR+xH6EdsL2wv5EfgR9xH2EfURY/QR8xHyEfER8BHvEe4R7RFj6xHqEekR6BHmEeUR5BHjEewCY9EL4hHhEeAR3xHeEd0RoxGfEZsRjxGLEZcRkxHsAmPRC9wR2xHaEdkR2BHWEaERnRGZEY0RiRGVEZERiQeQC9URiQeQC9QRY5wFnAXtAe0B7QHFC5gB4wLjAmOcBZwF7QHtAe0BxQuYAeMC4wJjmwWbBe0B7QHtAcQLmAHjAuMCY5sFmwXtAe0B7QHEC5gB4wLjAmPTEdIRY9ER0BFjzxHOEWPNEcwRY60LyxGoB2OtC8oRqAfsAoYRjgHsAmPgA+ADhRFjhBH6EP0QgxFj+xD+EIIRY/wQ/xCBEWOAEWP3EGP2EGP4EPEKhxHxCgrHyzKTFO4LAQd/AkAgAEUNACAAQQhrIgMgAEEEaygCACIBQXhxIgBqIQUCQCABQQFxDQAgAUECcUUNASADIAMoAgAiAWsiA0GwqAsoAgBJDQEgACABaiEAAkACQAJAQbSoCygCACADRwRAIAMoAgwhAiABQf8BTQRAIAIgAygCCCIERw0CQaCoC0GgqAsoAgBBfiABQQN2d3E2AgAMBQsgAygCGCEGIAIgA0cEQCADKAIIIgEgAjYCDCACIAE2AggMBAsgAygCFCIBBH8gA0EUagUgAygCECIBRQ0DIANBEGoLIQQDQCAEIQcgASICQRRqIQQgAigCFCIBDQAgAkEQaiEEIAIoAhAiAQ0ACyAHQQA2AgAMAwsgBSgCBCIBQQNxQQNHDQNBqKgLIAA2AgAgBSABQX5xNgIEIAMgAEEBcjYCBCAFIAA2AgAPCyAEIAI2AgwgAiAENgIIDAILQQAhAgsgBkUNAAJAIAMoAhwiAUECdEHQqgtqIgQoAgAgA0YEQCAEIAI2AgAgAg0BQaSoC0GkqAsoAgBBfiABd3E2AgAMAgsgBkEQQRQgBigCECADRhtqIAI2AgAgAkUNAQsgAiAGNgIYIAMoAhAiAQRAIAIgATYCECABIAI2AhgLIAMoAhQiAUUNACACIAE2AhQgASACNgIYCyADIAVPDQAgBSgCBCIBQQFxRQ0AAkACQAJAAkAgAUECcUUEQEG4qAsoAgAgBUYEQEG4qAsgAzYCAEGsqAtBrKgLKAIAIABqIgA2AgAgAyAAQQFyNgIEIANBtKgLKAIARw0GQaioC0EANgIAQbSoC0EANgIADwtBtKgLKAIAIAVGBEBBtKgLIAM2AgBBqKgLQaioCygCACAAaiIANgIAIAMgAEEBcjYCBCAAIANqIAA2AgAPCyABQXhxIABqIQAgBSgCDCECIAFB/wFNBEAgBSgCCCIEIAJGBEBBoKgLQaCoCygCAEF+IAFBA3Z3cTYCAAwFCyAEIAI2AgwgAiAENgIIDAQLIAUoAhghBiACIAVHBEAgBSgCCCIBIAI2AgwgAiABNgIIDAMLIAUoAhQiAQR/IAVBFGoFIAUoAhAiAUUNAiAFQRBqCyEEA0AgBCEHIAEiAkEUaiEEIAIoAhQiAQ0AIAJBEGohBCACKAIQIgENAAsgB0EANgIADAILIAUgAUF+cTYCBCADIABBAXI2AgQgACADaiAANgIADAMLQQAhAgsgBkUNAAJAIAUoAhwiAUECdEHQqgtqIgQoAgAgBUYEQCAEIAI2AgAgAg0BQaSoC0GkqAsoAgBBfiABd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAI2AgAgAkUNAQsgAiAGNgIYIAUoAhAiAQRAIAIgATYCECABIAI2AhgLIAUoAhQiAUUNACACIAE2AhQgASACNgIYCyADIABBAXI2AgQgACADaiAANgIAIANBtKgLKAIARw0AQaioCyAANgIADwsgAEH/AU0EQCAAQXhxQcioC2ohAQJ/QaCoCygCACIEQQEgAEEDdnQiAHFFBEBBoKgLIAAgBHI2AgAgAQwBCyABKAIICyEAIAEgAzYCCCAAIAM2AgwgAyABNgIMIAMgADYCCA8LQR8hAiAAQf///wdNBEAgAEEmIABBCHZnIgFrdkEBcSABQQF0a0E+aiECCyADIAI2AhwgA0IANwIQIAJBAnRB0KoLaiEHAn8CQAJ/QaSoCygCACIBQQEgAnQiBHFFBEBBpKgLIAEgBHI2AgBBGCECIAchBEEIDAELIABBGSACQQF2a0EAIAJBH0cbdCECIAcoAgAhBANAIAQiASgCBEF4cSAARg0CIAJBHXYhBCACQQF0IQIgASAEQQRxakEQaiIHKAIAIgQNAAtBGCECIAEhBEEICyEAIAMiAQwBCyABKAIIIgQgAzYCDEEIIQIgAUEIaiEHQRghAEEACyEFIAcgAzYCACACIANqIAQ2AgAgAyABNgIMIAAgA2ogBTYCAEHAqAtBwKgLKAIAQQFrIgBBfyAAGzYCAAsLfgECfyMAQSBrIgIkAAJAIABBACAArSABrX5CIIinG0UEQEEAIAAgACABEEYiAxsNASACQSBqJAAgAw8LIAIgATYCBCACIAA2AgBB6PoGKAIAQdrdAyACEB0aECYACyACIAAgAWw2AhBB6PoGKAIAQandAyACQRBqEB0aECYACxcAQQFBfyAAIAEgARA3IgAQkwIgAEYbCyUBAX8gACgCLCIAQQBBgAEgACgCABEDACIABH8gACgCEAVBAAsLNAEBfwJAIAAgARDkASIBRQ0AIAAoAiwiACABQQggACgCABEDACIARQ0AIAAoAhAhAgsgAgtvAQF/IwBBIGsiAyQAIANCADcDGCADQgA3AxAgAyACNgIMAkAgA0EQaiABIAIQ7QgiAUEASARAIANB5JQLKAIAEKMBNgIAQZPzAyADEDEMAQsgACADQRBqIgAQ3QQgARCTAhogABBmCyADQSBqJAALJAEBfyMAQRBrIgMkACADIAI2AgwgACABIAIQpgwgA0EQaiQAC6QBAQN/IwBBEGsiAiQAAkAgABArIgMgACgCAEEDcSAAKQMIEMwNIgEEfyABKAIYBUEACyIBDQAgAygCTCIBKAIAKAIQIgMEQCABKAIIIAAoAgBBA3EgACkDCCADERoAIgENAQtBACEBIAAoAgBBA3FBAkYNACACIAApAwg3AwggAkElNgIAQcCTCyEBQcCTC0EgQfIWIAIQpQEaCyACQRBqJAAgAQvYBAEFfyMAQTBrIgckAAJAIAANAEGQkwsoAgAiAA0AIAdBkMcKKAIANgIUQZCTC0EAIAdBFGpBABDNASIANgIACwJAAkAgAwRAIAAQNCEGIABBARCyAhoCQAJAIAAgARCkAyIEIAIQ8AciBQRAAkAgACAGRg0AIAJFDQYgAkHcFxBDDQBBtYcEQQAQJwsgAQ0BIABBACACEOgNIgZFDQEgABByIQQDQCAERQ0CIARBARCyAigCECIIIAIQ8AdFBEAgCCAEEDQgAiAEIAYQPiAGKAIQQQAQsQRBASAIKAIAEQMAGgsgBBBxIQQMAAsACyAHIAI2AiAgBCAHQRhqQQQgBCgCABEDACIFBEAgBCAAIAIgAyAFKAIQIAEQsQQiBUEBIAQoAgARAwAaDAILIAYgARCkAyIEIAAgAiADIAQQhwEgARCxBCIFQQEgBCgCABEDABoCQAJAAkACQCABDgQAAQICAwsgBiAGQdcCIAVBARDkAxoMBAsgBhAaIQQDQCAERQ0EIAAgBCAFEO4HIAYgBBAbIQQMAAsACyAGEBohAgNAIAJFDQMgBiACECkhBANAIAQEQCAAIAQgBRDuByAGIAQQLCEEDAELCyAGIAIQGyECDAALAAsgB0HEAjYCBCAHQZC5ATYCAEHo+gYoAgBB1rEEIAcQHRoQbgALIAAgBSgCDBCJARogBSAAIAMQqgE2AgwLIAEgBUVyRQRAIAAgBSADEGgLIAAgACAFELwNDAELIAAgASACEOgNIQULIAdBMGokACAFDwtBhdEBQb/8AEEMQcc7EAAACzMBAX8gAgRAIAAhAwNAIAMgAS0AADoAACADQQFqIQMgAUEBaiEBIAJBAWsiAg0ACwsgAAsUACAAECUEQCAALQAPDwsgACgCBAsVACAAEKEBBEAgACgCBA8LIAAQmQMLJgAgACABEPEHIgFFBEBBAA8LIAAQ5gEoAgwgASgCEEECdGooAgALQwAgACAAIAGlIAG9Qv///////////wCDQoCAgICAgID4/wBWGyABIAC9Qv///////////wCDQoCAgICAgID4/wBYGwsuACAALQAPIgBBAWpB/wFxQRFPBEBB/bIDQY/9AEHIAEG4lwEQAAALIABB/wFHCwcAQQEQBgALCwAgACABQQAQ/wYLPAEBf0EHIQICQAJAAkAgAEEoag4IAgICAgAAAAABC0EIDwsgAEF/RyABQX1NckUEQEEADwtBHSECCyACC0IBAX8gACABEOQBIgFFBEBBAA8LIAAoAjQgASgCIBDYASAAKAI0IgJBAEGAASACKAIAEQMAIAEgACgCNBDxAjYCIAtvAQJ/IAAtAAAiAgR/AkADQCABLQAAIgNFDQECQCACIANGDQAgAhD3ASABLQAAEPcBRg0AIAAtAAAhAgwCCyABQQFqIQEgAC0AASECIABBAWohACACDQALQQAhAgsgAgVBAAsQ9wEgAS0AABD3AWsLLAACQAJAAkAgACgCAEEDcUEBaw4DAQAAAgsgACgCKCEACyAAKAIYIQALIAALVQECfyAAIAFBMEEAIAEoAgBBA3FBA0cbaigCKBDkASIDBEAgACgCNCADKAIgENgBIAAoAjQiAiABQQggAigCABEDACECIAMgACgCNBDxAjYCIAsgAgsqAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAkGEBEEAEK0HGiADQRBqJAALkwEBAn8gABArIQUCQCAAIAFBABBrIgQgAkVyDQAgAhDjASIEIAUgARCqATYCAAJAIAAoAhAiAkUEQCAEIAQ2AgQMAQsgAiACKAIEIgVGBEAgAiAENgIEIAQgAjYCBAwBCyAEIAU2AgQgAiAENgIECyAALQAAQQRxDQAgACAEQQAQ3gcLIAMEQCAAIAFBARBrGgsgBAscAQF/IAAQoQEEQCAAKAIAIAAQ6AIaEKYFCyAAC6QBAwF8AX4BfyAAvSICQjSIp0H/D3EiA0GyCE0EfCADQf0HTQRAIABEAAAAAAAAAACiDwsCfCAAmSIARAAAAAAAADBDoEQAAAAAAAAww6AgAKEiAUQAAAAAAADgP2QEQCAAIAGgRAAAAAAAAPC/oAwBCyAAIAGgIgAgAUQAAAAAAADgv2VFDQAaIABEAAAAAAAA8D+gCyIAmiAAIAJCAFMbBSAACwsLACAAIAFBARD/BgtDACAAIAAgAaQgAb1C////////////AINCgICAgICAgPj/AFYbIAEgAL1C////////////AINCgICAgICAgPj/AFgbCykBAX8gAgRAIAAhAwNAIAMgAToAACADQQFqIQMgAkEBayICDQALCyAAC0IAIABFBEBBAA8LAn8CQAJAAkAgACgCAEEDcUEBaw4DAQAAAgsgACgCKEEYagwCCyAAQRhqDAELIABByABqCygCAAspACAAKAIwEKIDQQBIBEBB+sgBQZa7AUGgAUHzMBAAAAsgACgCMBCiAwtgAQJ/AkAgACgCPCIDRQ0AIAMoAmwiBEUNACAAKAIQKAKYAUUNACAALQCZAUEgcQRAIAAgASACIAQRBQAPCyAAIAAgASACQRAQGCACEJICIgAgAiADKAJsEQUAIAAQFwsLfQEDfwJAAkAgACIBQQNxRQ0AIAEtAABFBEBBAA8LA0AgAUEBaiIBQQNxRQ0BIAEtAAANAAsMAQsDQCABIgJBBGohAUGAgoQIIAIoAgAiA2sgA3JBgIGChHhxQYCBgoR4Rg0ACwNAIAIiAUEBaiECIAEtAAANAAsLIAEgAGsLFwEBf0EPIQEgABAlBH9BDwUgACgCCAsLkAEBA38CQCAAECIiAiABSQRAIwBBEGsiBCQAIAEgAmsiAgRAIAIgABBVIgMgABAiIgFrSwRAIAAgAyACIANrIAFqIAEgARCQBwsgASAAEEAiA2ogAkEAEPgKIAAgASACaiIAEJMDIARBADoADyAAIANqIARBD2oQyQELIARBEGokAAwBCyAAIAAQQCABEI0LCwu9FwMKfwR8AX4jAEFAaiINJAADQCAGIQ4CfwJAAkACQCAFIgZBAEwNACANIAApAAAiFzcDICAGIBdCIIinTw0BQQEgBkEHcXQiBSAGQQN2IgsgDUEgaiAXpyIKIBdCgICAgJAEVCIMG2otAABxDQAgAygCBCEJIAAgCiAMGyALaiILIAstAAAgBXI6AAACQCAJIAZByABsaiIKKwMQIhMgCisDICIUREivvJry13o+oGRFDQAgAiAKKAIAQThsaiIFKwMAIhUgBSsDEKGZREivvJry13o+ZUUNACACIAooAgRBOGxqIgUrAwAiFiAFKwMQoZlESK+8mvLXej5lRQ0AIA1CADcDMCANQgA3AyggDUIANwMgAkAgBwRAIA0gEzkDMCANIBQ5AyAgDSAWmjkDKCAVmiETDAELIA0gFjkDMCANIBQ5AyggDSAVOQMgCyANIBM5AzggDSANKQMoNwMIIA0gDSkDMDcDECANIA0pAzg3AxggDSANKQMgNwMAIAEgDRCABAsCQCAKKAIoIg9BAEoNACAKKAIsQQBKDQACQCAKKAIwQQBMDQAgCigCNCIIQQBMDQAgCkEwaiEFIApBNGohCyADKAIEIAhByABsaigCACEMIAooAgAhCSAIIA5GBEAgBCAJIAwQtQEgACABIAIgAyAEIAsoAgAgBiAHQQEQOiEEQQEMBgsgBCAMIAkQtQEgACABIAIgAyAEIAooAjAgBiAHQQEQOiEEIAshBUEBDAULIAAgASACIAMgBCAPIAYgB0ECEDogACABIAIgAyAEIAooAiwgBiAHQQIQOiAAIAEgAiADIAQgCigCMCAGIAdBARA6IApBNGohBUEBDAQLIApBKGohCwJAIAooAjAiEUEASiIMDQAgCigCNEEASg0AAkAgD0EATA0AIAooAiwiCUEATA0AIApBLGohBSADKAIEIA9ByABsaigCBCEIIAooAgQhDCAJIA5GBEAgBCAIIAwQtQEgACABIAIgAyAEIAooAiwgBiAHQQIQOiEEIAshBUECDAYLIAQgDCAIELUBIAAgASACIAMgBCALKAIAIAYgB0ECEDohBEECDAULIApBNGohBSAAIAEgAiADIAQgDyAGIAdBAhA6IAAgASACIAMgBCAKKAIsIAYgB0ECEDogACABIAIgAyAEIAooAjAgBiAHQQEQOkEBDAQLIAoiCUEwaiEFIAlBLGohCiAJKAIsIRACQCAPQQBKBEAgEEEATA0BAkAgEUEATA0AIAkoAjQiEUEATA0AIAlBNGohDCADKAIEIhIgD0HIAGxqKAIEIQ8gEiARQcgAbGooAgAhEiAIQQJGIA4gEUZxRSAIQQFHIA4gEEdycUUEQCAEIA8gEhC1ASEOIAAgASACIAMgBCAKKAIAIAYgB0ECEDogACABIAIgAyAEIAwoAgAgBiAHQQEQOiAAIAEgAiADIA4gCygCACAGIAdBAhA6IA4hBEEBDAcLIAQgEiAPELUBIQUgACABIAIgAyAEIAsoAgAgBiAHQQIQOiAAIAEgAiADIAQgCSgCMCAGIAdBARA6IAAgASACIAMgBSAKKAIAIAYgB0ECEDogBSEEIAwhBUEBDAYLAkAgCSsDICACIAkoAgBBOGxqIgUrAxihmURIr7ya8td6PmVFDQAgCSsDGCAFKwMQoZlESK+8mvLXej5lRQ0AIAMoAgQgD0HIAGxqKAIEIQogBSgCLCEFIAhBAUcgDiAPR3JFBEAgBCAFIAoQtQEhCyAAIAEgAiADIAQgCSgCKCAGIAdBAhA6IAAgASACIAMgCyAJKAIwIAYgB0EBEDogACABIAIgAyALIAkoAiwgBiAHQQIQOiAJQTRqIQUgCyEEQQEMBwsgBCAKIAUQtQEgACABIAIgAyAEIAkoAiwgBiAHQQIQOiAAIAEgAiADIAQgCSgCMCAGIAdBARA6IAAgASACIAMgBCAJKAI0IAYgB0EBEDohBCALIQVBAgwGCyADKAIEIA9ByABsaigCBCEFIAkoAgQhDCAIQQFHIA4gEEdyRQRAIAQgBSAMELUBIQUgACABIAIgAyAEIAkoAiwgBiAHQQIQOiAAIAEgAiADIAUgCSgCNCAGIAdBARA6IAAgASACIAMgBSAJKAIwIAYgB0EBEDogBSEEIAshBUECDAYLIAQgDCAFELUBIAAgASACIAMgBCAJKAIoIAYgB0ECEDogACABIAIgAyAEIAkoAjAgBiAHQQEQOiAAIAEgAiADIAQgCSgCNCAGIAdBARA6IQQgCiEFQQIMBQsgEEEATA0BCyAMRQRAIAkoAgAhDCAJKwMQIRMMAwsgCSgCACEMIAkrAxAhEyAJKAI0IhBBAEwNAiAJQTRqIQsCQCATIAIgDEE4bGoiCisDCKGZREivvJry13o+ZUUNACAJKwMIIAorAwChmURIr7ya8td6PmVFDQAgAygCBCAQQcgAbGooAgAhCiAIQQJGIA4gEUZxRQRAIAQgDCAKELUBIAAgASACIAMgBCAJKAIsIAYgB0ECEDogACABIAIgAyAEIAkoAjQgBiAHQQEQOiAAIAEgAiADIAQgCSgCKCAGIAdBAhA6IQRBAQwFCyAEIAogDBC1ASEFIAAgASACIAMgBCAJKAIwIAYgB0EBEDogACABIAIgAyAFIAkoAiggBiAHQQIQOiAAIAEgAiADIAUgCSgCLCAGIAdBAhA6IAUhBCALIQVBAQwECyADKAIEIBBByABsaigCACEKIAIgCSgCBEE4bGooAiwhDCAIQQJHIA4gEEdyRQRAIAQgDCAKELUBIQsgACABIAIgAyAEIAkoAjQgBiAHQQEQOiAAIAEgAiADIAsgCSgCLCAGIAdBAhA6IAAgASACIAMgCyAJKAIoIAYgB0ECEDogCyEEQQEMBAsgBCAKIAwQtQEgACABIAIgAyAEIAkoAiggBiAHQQIQOiAAIAEgAiADIAQgCSgCMCAGIAdBARA6IAAgASACIAMgBCAJKAIsIAYgB0ECEDohBCALIQVBAQwDCyANQUBrJAAPC0HdqQNB5PoAQcIAQcEhEAAACwJAAkACQCATIAIgDEE4bGoiCysDCKGZREivvJry13o+ZUUNACAJKwMIIAsrAwChmURIr7ya8td6PmVFDQAgCSsDICACIAkoAgQiDkE4bGoiECsDCKGZREivvJry13o+ZUUNACAJKwMYIBArAwChmURIr7ya8td6PmUNAQsCQCATIAIgCSgCBEE4bGoiDisDGKGZREivvJry13o+ZUUNACAJKwMIIA4rAxChmURIr7ya8td6PmVFDQAgCSsDICALKwMYoZlESK+8mvLXej5lRQ0AIAkrAxggCysDEKGZREivvJry13o+ZQ0CCyAAIAEgAiADIAQgDyAGIAdBAhA6IAAgASACIAMgBCAJKAIwIAYgB0EBEDogACABIAIgAyAEIAkoAiwgBiAHQQIQOiAJQTRqIQVBAQwCCyAIQQFGBEAgBCAMIA4QtQEhCyAAIAEgAiADIAQgCSgCKCAGIAdBAhA6IAAgASACIAMgBCAJKAIsIAYgB0ECEDogACABIAIgAyALIAkoAjQgBiAHQQEQOiALIQRBAQwCCyAEIA4gDBC1ASEFIAAgASACIAMgBCAJKAI0IAYgB0EBEDogACABIAIgAyAEIAkoAjAgBiAHQQEQOiAAIAEgAiADIAUgCSgCKCAGIAdBAhA6IAUhBCAKIQVBAgwBCyALKAIsIQsgDigCLCEOIAhBAUYEQCAEIAsgDhC1ASELIAAgASACIAMgBCAJKAIoIAYgB0ECEDogACABIAIgAyAEIAkoAiwgBiAHQQIQOiAAIAEgAiADIAsgCSgCNCAGIAdBARA6IAshBEEBDAELIAQgDiALELUBIQUgACABIAIgAyAEIAkoAjQgBiAHQQEQOiAAIAEgAiADIAQgCSgCMCAGIAdBARA6IAAgASACIAMgBSAJKAIoIAYgB0ECEDogBSEEIAohBUECCyEIIAUoAgAhBQwACwALIAADQCABQQBMRQRAIABB3MADEBkaIAFBAWshAQwBCwsLCQAgABBAIAFqC4IIAQt/IABFBEAgARBCDwsgAUFATwRAQeSUC0EwNgIAQQAPCwJ/QRAgAUELakF4cSABQQtJGyEFIABBCGsiBCgCBCIJQXhxIQgCQCAJQQNxRQRAIAVBgAJJDQEgBUEEaiAITQRAIAQhAiAIIAVrQYCsCygCAEEBdE0NAgtBAAwCCyAEIAhqIQYCQCAFIAhNBEAgCCAFayIDQRBJDQEgBCAJQQFxIAVyQQJyNgIEIAQgBWoiAiADQQNyNgIEIAYgBigCBEEBcjYCBCACIAMQsgUMAQtBuKgLKAIAIAZGBEBBrKgLKAIAIAhqIgggBU0NAiAEIAlBAXEgBXJBAnI2AgQgBCAFaiIDIAggBWsiAkEBcjYCBEGsqAsgAjYCAEG4qAsgAzYCAAwBC0G0qAsoAgAgBkYEQEGoqAsoAgAgCGoiAyAFSQ0CAkAgAyAFayICQRBPBEAgBCAJQQFxIAVyQQJyNgIEIAQgBWoiCCACQQFyNgIEIAMgBGoiAyACNgIAIAMgAygCBEF+cTYCBAwBCyAEIAlBAXEgA3JBAnI2AgQgAyAEaiICIAIoAgRBAXI2AgRBACECQQAhCAtBtKgLIAg2AgBBqKgLIAI2AgAMAQsgBigCBCIDQQJxDQEgA0F4cSAIaiIKIAVJDQEgCiAFayEMIAYoAgwhBwJAIANB/wFNBEAgBigCCCICIAdGBEBBoKgLQaCoCygCAEF+IANBA3Z3cTYCAAwCCyACIAc2AgwgByACNgIIDAELIAYoAhghCwJAIAYgB0cEQCAGKAIIIgIgBzYCDCAHIAI2AggMAQsCQCAGKAIUIgIEfyAGQRRqBSAGKAIQIgJFDQEgBkEQagshCANAIAghAyACIgdBFGohCCACKAIUIgINACAHQRBqIQggBygCECICDQALIANBADYCAAwBC0EAIQcLIAtFDQACQCAGKAIcIgNBAnRB0KoLaiICKAIAIAZGBEAgAiAHNgIAIAcNAUGkqAtBpKgLKAIAQX4gA3dxNgIADAILIAtBEEEUIAsoAhAgBkYbaiAHNgIAIAdFDQELIAcgCzYCGCAGKAIQIgIEQCAHIAI2AhAgAiAHNgIYCyAGKAIUIgJFDQAgByACNgIUIAIgBzYCGAsgDEEPTQRAIAQgCUEBcSAKckECcjYCBCAEIApqIgIgAigCBEEBcjYCBAwBCyAEIAlBAXEgBXJBAnI2AgQgBCAFaiIDIAxBA3I2AgQgBCAKaiICIAIoAgRBAXI2AgQgAyAMELIFCyAEIQILIAILIgIEQCACQQhqDwsgARBCIgRFBEBBAA8LIAQgAEF8QXggAEEEaygCACICQQNxGyACQXhxaiICIAEgASACSxsQIBogABAXIAQLQwECfyAAEOYBAkAgASgCECIDQQBOBEAgABDTBSADSg0BC0HvnANBkLkBQdADQY0hEAAACygCDCABKAIQQQJ0aigCAAuCAQECfyMAQSBrIgIkAAJAIABBACAArSABrX5CIIinG0UEQCAARSABRXIgACABEEYiA3JFDQEgAkEgaiQAIAMPCyACIAE2AgQgAiAANgIAQej6BigCAEHa3QMgAhAdGhAmAAsgAiAAIAFsNgIQQej6BigCAEGp3QMgAkEQahAdGhAmAAsSACAAEKEBBEAgACgCAA8LIAALwAEBBX8jAEEwayIEJAACQCAAKAI8IgVFDQAgBSgCZEUNACAAKAIQIgYoApgBRQ0AIANBBHEiBwRAIARBCGogBkEQaiIIQSgQIBogCCAGQThqQSgQIBogA0F7cSEDCwJAIAAtAJkBQSBxBEAgACABIAIgAyAFKAJkEQgADAELIAAgACABIAJBEBAYIAIQkgIiASACIAMgBSgCZBEIACABEBcLIAdFDQAgACgCEEEQaiAEQQhqQSgQIBoLIARBMGokAAu9KAELfyMAQRBrIgokAAJAAkACQAJAAkACQAJAAkACQAJAIABB9AFNBEBBoKgLKAIAIgRBECAAQQtqQfgDcSAAQQtJGyIGQQN2IgB2IgFBA3EEQAJAIAFBf3NBAXEgAGoiAkEDdCIBQcioC2oiACABQdCoC2ooAgAiASgCCCIFRgRAQaCoCyAEQX4gAndxNgIADAELIAUgADYCDCAAIAU2AggLIAFBCGohACABIAJBA3QiAkEDcjYCBCABIAJqIgEgASgCBEEBcjYCBAwLCyAGQaioCygCACIITQ0BIAEEQAJAQQIgAHQiAkEAIAJrciABIAB0cWgiAUEDdCIAQcioC2oiAiAAQdCoC2ooAgAiACgCCCIFRgRAQaCoCyAEQX4gAXdxIgQ2AgAMAQsgBSACNgIMIAIgBTYCCAsgACAGQQNyNgIEIAAgBmoiByABQQN0IgEgBmsiBUEBcjYCBCAAIAFqIAU2AgAgCARAIAhBeHFByKgLaiEBQbSoCygCACECAn8gBEEBIAhBA3Z0IgNxRQRAQaCoCyADIARyNgIAIAEMAQsgASgCCAshAyABIAI2AgggAyACNgIMIAIgATYCDCACIAM2AggLIABBCGohAEG0qAsgBzYCAEGoqAsgBTYCAAwLC0GkqAsoAgAiC0UNASALaEECdEHQqgtqKAIAIgIoAgRBeHEgBmshAyACIQEDQAJAIAEoAhAiAEUEQCABKAIUIgBFDQELIAAoAgRBeHEgBmsiASADIAEgA0kiARshAyAAIAIgARshAiAAIQEMAQsLIAIoAhghCSACIAIoAgwiAEcEQCACKAIIIgEgADYCDCAAIAE2AggMCgsgAigCFCIBBH8gAkEUagUgAigCECIBRQ0DIAJBEGoLIQUDQCAFIQcgASIAQRRqIQUgACgCFCIBDQAgAEEQaiEFIAAoAhAiAQ0ACyAHQQA2AgAMCQtBfyEGIABBv39LDQAgAEELaiIBQXhxIQZBpKgLKAIAIgdFDQBBHyEIQQAgBmshAyAAQfT//wdNBEAgBkEmIAFBCHZnIgBrdkEBcSAAQQF0a0E+aiEICwJAAkACQCAIQQJ0QdCqC2ooAgAiAUUEQEEAIQAMAQtBACEAIAZBGSAIQQF2a0EAIAhBH0cbdCECA0ACQCABKAIEQXhxIAZrIgQgA08NACABIQUgBCIDDQBBACEDIAEhAAwDCyAAIAEoAhQiBCAEIAEgAkEddkEEcWooAhAiAUYbIAAgBBshACACQQF0IQIgAQ0ACwsgACAFckUEQEEAIQVBAiAIdCIAQQAgAGtyIAdxIgBFDQMgAGhBAnRB0KoLaigCACEACyAARQ0BCwNAIAAoAgRBeHEgBmsiAiADSSEBIAIgAyABGyEDIAAgBSABGyEFIAAoAhAiAQR/IAEFIAAoAhQLIgANAAsLIAVFDQAgA0GoqAsoAgAgBmtPDQAgBSgCGCEIIAUgBSgCDCIARwRAIAUoAggiASAANgIMIAAgATYCCAwICyAFKAIUIgEEfyAFQRRqBSAFKAIQIgFFDQMgBUEQagshAgNAIAIhBCABIgBBFGohAiAAKAIUIgENACAAQRBqIQIgACgCECIBDQALIARBADYCAAwHCyAGQaioCygCACIFTQRAQbSoCygCACEAAkAgBSAGayIBQRBPBEAgACAGaiICIAFBAXI2AgQgACAFaiABNgIAIAAgBkEDcjYCBAwBCyAAIAVBA3I2AgQgACAFaiIBIAEoAgRBAXI2AgRBACECQQAhAQtBqKgLIAE2AgBBtKgLIAI2AgAgAEEIaiEADAkLIAZBrKgLKAIAIgJJBEBBrKgLIAIgBmsiATYCAEG4qAtBuKgLKAIAIgAgBmoiAjYCACACIAFBAXI2AgQgACAGQQNyNgIEIABBCGohAAwJC0EAIQAgBkEvaiIDAn9B+KsLKAIABEBBgKwLKAIADAELQYSsC0J/NwIAQfyrC0KAoICAgIAENwIAQfirCyAKQQxqQXBxQdiq1aoFczYCAEGMrAtBADYCAEHcqwtBADYCAEGAIAsiAWoiBEEAIAFrIgdxIgEgBk0NCEHYqwsoAgAiBQRAQdCrCygCACIIIAFqIgkgCE0gBSAJSXINCQsCQEHcqwstAABBBHFFBEACQAJAAkACQEG4qAsoAgAiBQRAQeCrCyEAA0AgBSAAKAIAIghPBEAgCCAAKAIEaiAFSw0DCyAAKAIIIgANAAsLQQAQ1wMiAkF/Rg0DIAEhBEH8qwsoAgAiAEEBayIFIAJxBEAgASACayACIAVqQQAgAGtxaiEECyAEIAZNDQNB2KsLKAIAIgAEQEHQqwsoAgAiBSAEaiIHIAVNIAAgB0lyDQQLIAQQ1wMiACACRw0BDAULIAQgAmsgB3EiBBDXAyICIAAoAgAgACgCBGpGDQEgAiEACyAAQX9GDQEgBkEwaiAETQRAIAAhAgwEC0GArAsoAgAiAiADIARrakEAIAJrcSICENcDQX9GDQEgAiAEaiEEIAAhAgwDCyACQX9HDQILQdyrC0HcqwsoAgBBBHI2AgALIAEQ1wMiAkF/RkEAENcDIgBBf0ZyIAAgAk1yDQUgACACayIEIAZBKGpNDQULQdCrC0HQqwsoAgAgBGoiADYCAEHUqwsoAgAgAEkEQEHUqwsgADYCAAsCQEG4qAsoAgAiAwRAQeCrCyEAA0AgAiAAKAIAIgEgACgCBCIFakYNAiAAKAIIIgANAAsMBAtBsKgLKAIAIgBBACAAIAJNG0UEQEGwqAsgAjYCAAtBACEAQeSrCyAENgIAQeCrCyACNgIAQcCoC0F/NgIAQcSoC0H4qwsoAgA2AgBB7KsLQQA2AgADQCAAQQN0IgFB0KgLaiABQcioC2oiBTYCACABQdSoC2ogBTYCACAAQQFqIgBBIEcNAAtBrKgLIARBKGsiAEF4IAJrQQdxIgFrIgU2AgBBuKgLIAEgAmoiATYCACABIAVBAXI2AgQgACACakEoNgIEQbyoC0GIrAsoAgA2AgAMBAsgAiADTSABIANLcg0CIAAoAgxBCHENAiAAIAQgBWo2AgRBuKgLIANBeCADa0EHcSIAaiIBNgIAQayoC0GsqAsoAgAgBGoiAiAAayIANgIAIAEgAEEBcjYCBCACIANqQSg2AgRBvKgLQYisCygCADYCAAwDC0EAIQAMBgtBACEADAQLQbCoCygCACACSwRAQbCoCyACNgIACyACIARqIQVB4KsLIQACQANAIAUgACgCACIBRwRAIAAoAggiAA0BDAILCyAALQAMQQhxRQ0DC0HgqwshAANAAkAgAyAAKAIAIgFPBEAgASAAKAIEaiIFIANLDQELIAAoAgghAAwBCwtBrKgLIARBKGsiAEF4IAJrQQdxIgFrIgc2AgBBuKgLIAEgAmoiATYCACABIAdBAXI2AgQgACACakEoNgIEQbyoC0GIrAsoAgA2AgAgAyAFQScgBWtBB3FqQS9rIgAgACADQRBqSRsiAUEbNgIEIAFB6KsLKQIANwIQIAFB4KsLKQIANwIIQeirCyABQQhqNgIAQeSrCyAENgIAQeCrCyACNgIAQeyrC0EANgIAIAFBGGohAANAIABBBzYCBCAAQQhqIABBBGohACAFSQ0ACyABIANGDQAgASABKAIEQX5xNgIEIAMgASADayICQQFyNgIEIAEgAjYCAAJ/IAJB/wFNBEAgAkF4cUHIqAtqIQACf0GgqAsoAgAiAUEBIAJBA3Z0IgJxRQRAQaCoCyABIAJyNgIAIAAMAQsgACgCCAshASAAIAM2AgggASADNgIMQQwhAkEIDAELQR8hACACQf///wdNBEAgAkEmIAJBCHZnIgBrdkEBcSAAQQF0a0E+aiEACyADIAA2AhwgA0IANwIQIABBAnRB0KoLaiEBAkACQEGkqAsoAgAiBUEBIAB0IgRxRQRAQaSoCyAEIAVyNgIAIAEgAzYCAAwBCyACQRkgAEEBdmtBACAAQR9HG3QhACABKAIAIQUDQCAFIgEoAgRBeHEgAkYNAiAAQR12IQUgAEEBdCEAIAEgBUEEcWoiBCgCECIFDQALIAQgAzYCEAsgAyABNgIYQQghAiADIgEhAEEMDAELIAEoAggiACADNgIMIAEgAzYCCCADIAA2AghBACEAQRghAkEMCyADaiABNgIAIAIgA2ogADYCAAtBrKgLKAIAIgAgBk0NAEGsqAsgACAGayIBNgIAQbioC0G4qAsoAgAiACAGaiICNgIAIAIgAUEBcjYCBCAAIAZBA3I2AgQgAEEIaiEADAQLQeSUC0EwNgIAQQAhAAwDCyAAIAI2AgAgACAAKAIEIARqNgIEIAJBeCACa0EHcWoiCCAGQQNyNgIEIAFBeCABa0EHcWoiBCAGIAhqIgNrIQcCQEG4qAsoAgAgBEYEQEG4qAsgAzYCAEGsqAtBrKgLKAIAIAdqIgA2AgAgAyAAQQFyNgIEDAELQbSoCygCACAERgRAQbSoCyADNgIAQaioC0GoqAsoAgAgB2oiADYCACADIABBAXI2AgQgACADaiAANgIADAELIAQoAgQiAEEDcUEBRgRAIABBeHEhCSAEKAIMIQICQCAAQf8BTQRAIAQoAggiASACRgRAQaCoC0GgqAsoAgBBfiAAQQN2d3E2AgAMAgsgASACNgIMIAIgATYCCAwBCyAEKAIYIQYCQCACIARHBEAgBCgCCCIAIAI2AgwgAiAANgIIDAELAkAgBCgCFCIABH8gBEEUagUgBCgCECIARQ0BIARBEGoLIQEDQCABIQUgACICQRRqIQEgACgCFCIADQAgAkEQaiEBIAIoAhAiAA0ACyAFQQA2AgAMAQtBACECCyAGRQ0AAkAgBCgCHCIAQQJ0QdCqC2oiASgCACAERgRAIAEgAjYCACACDQFBpKgLQaSoCygCAEF+IAB3cTYCAAwCCyAGQRBBFCAGKAIQIARGG2ogAjYCACACRQ0BCyACIAY2AhggBCgCECIABEAgAiAANgIQIAAgAjYCGAsgBCgCFCIARQ0AIAIgADYCFCAAIAI2AhgLIAcgCWohByAEIAlqIgQoAgQhAAsgBCAAQX5xNgIEIAMgB0EBcjYCBCADIAdqIAc2AgAgB0H/AU0EQCAHQXhxQcioC2ohAAJ/QaCoCygCACIBQQEgB0EDdnQiAnFFBEBBoKgLIAEgAnI2AgAgAAwBCyAAKAIICyEBIAAgAzYCCCABIAM2AgwgAyAANgIMIAMgATYCCAwBC0EfIQIgB0H///8HTQRAIAdBJiAHQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgAyACNgIcIANCADcCECACQQJ0QdCqC2ohAAJAAkBBpKgLKAIAIgFBASACdCIFcUUEQEGkqAsgASAFcjYCACAAIAM2AgAMAQsgB0EZIAJBAXZrQQAgAkEfRxt0IQIgACgCACEBA0AgASIAKAIEQXhxIAdGDQIgAkEddiEBIAJBAXQhAiAAIAFBBHFqIgUoAhAiAQ0ACyAFIAM2AhALIAMgADYCGCADIAM2AgwgAyADNgIIDAELIAAoAggiASADNgIMIAAgAzYCCCADQQA2AhggAyAANgIMIAMgATYCCAsgCEEIaiEADAILAkAgCEUNAAJAIAUoAhwiAUECdEHQqgtqIgIoAgAgBUYEQCACIAA2AgAgAA0BQaSoCyAHQX4gAXdxIgc2AgAMAgsgCEEQQRQgCCgCECAFRhtqIAA2AgAgAEUNAQsgACAINgIYIAUoAhAiAQRAIAAgATYCECABIAA2AhgLIAUoAhQiAUUNACAAIAE2AhQgASAANgIYCwJAIANBD00EQCAFIAMgBmoiAEEDcjYCBCAAIAVqIgAgACgCBEEBcjYCBAwBCyAFIAZBA3I2AgQgBSAGaiIEIANBAXI2AgQgAyAEaiADNgIAIANB/wFNBEAgA0F4cUHIqAtqIQACf0GgqAsoAgAiAUEBIANBA3Z0IgJxRQRAQaCoCyABIAJyNgIAIAAMAQsgACgCCAshASAAIAQ2AgggASAENgIMIAQgADYCDCAEIAE2AggMAQtBHyEAIANB////B00EQCADQSYgA0EIdmciAGt2QQFxIABBAXRrQT5qIQALIAQgADYCHCAEQgA3AhAgAEECdEHQqgtqIQECQAJAIAdBASAAdCICcUUEQEGkqAsgAiAHcjYCACABIAQ2AgAgBCABNgIYDAELIANBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhAQNAIAEiAigCBEF4cSADRg0CIABBHXYhASAAQQF0IQAgAiABQQRxaiIHKAIQIgENAAsgByAENgIQIAQgAjYCGAsgBCAENgIMIAQgBDYCCAwBCyACKAIIIgAgBDYCDCACIAQ2AgggBEEANgIYIAQgAjYCDCAEIAA2AggLIAVBCGohAAwBCwJAIAlFDQACQCACKAIcIgFBAnRB0KoLaiIFKAIAIAJGBEAgBSAANgIAIAANAUGkqAsgC0F+IAF3cTYCAAwCCyAJQRBBFCAJKAIQIAJGG2ogADYCACAARQ0BCyAAIAk2AhggAigCECIBBEAgACABNgIQIAEgADYCGAsgAigCFCIBRQ0AIAAgATYCFCABIAA2AhgLAkAgA0EPTQRAIAIgAyAGaiIAQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDAELIAIgBkEDcjYCBCACIAZqIgUgA0EBcjYCBCADIAVqIAM2AgAgCARAIAhBeHFByKgLaiEAQbSoCygCACEBAn9BASAIQQN2dCIHIARxRQRAQaCoCyAEIAdyNgIAIAAMAQsgACgCCAshBCAAIAE2AgggBCABNgIMIAEgADYCDCABIAQ2AggLQbSoCyAFNgIAQaioCyADNgIACyACQQhqIQALIApBEGokACAAC0oBAn8CQCAALQAAIgJFIAIgAS0AACIDR3INAANAIAEtAAEhAyAALQABIgJFDQEgAUEBaiEBIABBAWohACACIANGDQALCyACIANrC8IBAgF8An8jAEEQayICJAACfCAAvUIgiKdB/////wdxIgNB+8Ok/wNNBEBEAAAAAAAA8D8gA0GewZryA0kNARogAEQAAAAAAAAAABCkBAwBCyAAIAChIANBgIDA/wdPDQAaIAAgAhC9ByEDIAIrAwghACACKwMAIQECQAJAAkACQCADQQNxQQFrDgMBAgMACyABIAAQpAQMAwsgASAAQQEQowSaDAILIAEgABCkBJoMAQsgASAAQQEQowQLIAJBEGokAAsLACAAIAFBEBDiCgtaAgF/AX4CQAJ/QQAgAEUNABogAK0gAa1+IgOnIgIgACABckGAgARJDQAaQX8gAiADQiCIpxsLIgIQQiIARQ0AIABBBGstAABBA3FFDQAgAEEAIAIQMxoLIAALNwACQCAABEAgAUUNASAAIAEQQ0UPC0GF0QFBv/wAQQxBxzsQAAALQdPQAUG//ABBDUHHOxAAAAsWACAAKAIAIgBBqK8LRwRAIAAQmQULCyQBAX8jAEEQayIDJAAgAyACNgIMIAAgASACEKMMIANBEGokAAtCAQF/IAEgAmwhBCAEAn8gAygCTEEASARAIAAgBCADELcHDAELIAAgBCADELcHCyIARgRAIAJBACABGw8LIAAgAW4LDAAgACABQRxqEKULCxkBAX8jAEEQayIBJAAgABCBDCABQRBqJAALCABBASAAEBgLiQEBAn8jAEGgAWsiBCQAIAQgACAEQZ4BaiABGyIFNgKUASAEIAFBAWsiAEEAIAAgAU0bNgKYASAEQQBBkAEQMyIAQX82AkwgAEGGBDYCJCAAQX82AlAgACAAQZ8BajYCLCAAIABBlAFqNgJUIAVBADoAACAAIAIgA0GEBEGFBBCtByAAQaABaiQAC64CAwJ/AnwEfiMAQSBrIgIkAAJAIACZIgQgAZkiBSAEvSAFvVQiAxsiAb0iBkI0iCIHQv8PUQ0AIAUgBCADGyEAAkAgBlANACAAvSIIQjSIIglC/w9RDQAgCacgB6drQcEATgRAIAQgBaAhAQwCCwJ8IAhCgICAgICAgPDfAFoEQCABRAAAAAAAADAUoiEBIABEAAAAAAAAMBSiIQBEAAAAAAAAsGsMAQtEAAAAAAAA8D8gBkL/////////5yNWDQAaIAFEAAAAAAAAsGuiIQEgAEQAAAAAAACwa6IhAEQAAAAAAAAwFAsgAkEYaiACQRBqIAAQvwwgAkEIaiACIAEQvwwgAisDACACKwMQoCACKwMIoCACKwMYoJ+iIQEMAQsgACEBCyACQSBqJAAgAQtSAQF/IwBBEGsiBCQAAkAgAUUNACAAIAEQPiIARQ0AIAAtAABFDQAgAiAAIARBDGoQrgciASADIAEgA0obIAAgBCgCDEYbIQILIARBEGokACACCxwAIAAgASACEHoiAAR/IAAgAiAALQAAGwUgAgsLigUCA38CfiMAQeAAayIFJAACQAJAAkACQCAAQQIgAyAFQdgAakEAEKMDRQRAIAMNAiAEBEAgABDPBUUNBAsgBUIANwNQIAVCADcDSAwBCyAFQgA3A0ggBSAFKQNYNwNQIAVBAjYCSAsgBUFAayAFKQNQNwMAIAUgBSkDSDcDOCAAIAEgAiAFQThqEPcCIgYNAiAAENwNBEAgBSAFKQNQNwMwIAUgBSkDSDcDKCAAIAIgASAFQShqEPcCIgYNAwsgBEUNACAAEDQgBSAFKQNQNwMgIAUgBSkDSDcDGCABIAIgBUEYahD3AiIGRQRAIAAQ3A1FDQEgABA0IAUgBSkDUDcDECAFIAUpA0g3AwggAiABIAVBCGoQ9wIiBkUNAQsgACAGEOsHDAILIAQNAEEAIQYMAQtBACEGIwBBIGsiBCQAIARCADcDGCAEQgA3AxACfyAAEM8FBEAgBCAEKQMYNwMIIARBADYCECAEIAQpAxA3AwBBACAAIAEgAiAEEPcCDQEaCyAALQAYQQRxRSABIAJHcgsgBEEgaiQARQ0AIABBAiADIAVB2ABqQQEQowNFDQAgAEECAn8gBSkDWCEIIAAgAUEBEHsaIAAgAkEBEHsaQeAAEOMBIQMgAEECEOkHIglCgICAgAFUBEAgAyAINwM4IAMgCDcDCCADIAE2AlggAyACNgIoIAMgCadBBHQiASADKAIwQQxxckEDcjYCMCADIAMoAgBBDHEgAXJBAnI2AgAgACADEOsHIAAtABhBIHEEQCADQYzHCigCAEEQQQAQLhogACADENQFCyAAIAMQ4AcgAwwBC0GXpQNB6LwBQc4BQbacARAAAAsiBhDNBQsgBUHgAGokACAGC1YBAX8jAEEQayIEJAACQCAARSABRXINACAAIAEQPiIARQ0AIAAtAABFDQAgAiADIAAgBEEMahDWASICIAIgA2MbIAAgBCgCDEYbIQILIARBEGokACACC4UCAQN/IwBBEGsiAyQAIAMgAjYCBCADIAI2AgwgAyACNgIIAkACQAJAQQBBACABIAIQTiICQQBIDQAgAkEBaiEFIAIgABA4IAAQIWsiBE8EQCAAIAUgBGsQ0QELIAAQISEEIAIgABAlBH8gACAEagUgACgCACAEagsgBSABIAMoAgwQTiIBRyABQQBOcQ0BIAFBAEwNACAAECUEQCABQYACTw0DIAAgAC0ADyABajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAWo2AgQLIANBEGokAA8LQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALGwEBf0EKIQEgABChAQR/IAAQ6AJBAWsFQQoLC9MBAgN/An4CQCAAKQNwIgRQRSAEIAApA3ggACgCBCIBIAAoAiwiAmusfCIFV3FFBEAgABC8BSIDQQBODQEgACgCLCECIAAoAgQhAQsgAEJ/NwNwIAAgATYCaCAAIAUgAiABa6x8NwN4QX8PCyAFQgF8IQUgACgCBCEBIAAoAgghAgJAIAApA3AiBFANACAEIAV9IgQgAiABa6xZDQAgASAEp2ohAgsgACACNgJoIAAgBSAAKAIsIgAgAWusfDcDeCAAIAFPBEAgAUEBayADOgAACyADC8oBAgJ/AXwjAEEQayIBJAACQCAAvUIgiKdB/////wdxIgJB+8Ok/wNNBEAgAkGAgMDyA0kNASAARAAAAAAAAAAAQQAQowQhAAwBCyACQYCAwP8HTwRAIAAgAKEhAAwBCyAAIAEQvQchAiABKwMIIQAgASsDACEDAkACQAJAAkAgAkEDcUEBaw4DAQIDAAsgAyAAQQEQowQhAAwDCyADIAAQpAQhAAwCCyADIABBARCjBJohAAwBCyADIAAQpASaIQALIAFBEGokACAACwsAIAAgAUE4EOIKC3sBA38CQCABEP0KIQIgABCOByEDIAAQIiEEIAIgA00EQCAAEEAiAyABIAIQggwjAEEQayIBJAAgABAiGiAAIAIQkwMgAUEANgIMIAMgAkECdGogAUEMahDSASABQRBqJAAMAQsgACADIAIgA2sgBEEAIAQgAiABEPYKCwtPAQN/AkAgARA3IQIgABBVIQMgABAiIQQgAiADTQRAIAAQQCIDIAEgAhCEDCAAIAMgAhCNCwwBCyAAIAMgAiADayAEQQAgBCACIAEQ+QoLCxAAIAAQ+AsgARD4C3NBAXMLEAAgABD5CyABEPkLc0EBcwsSACAAIAFB2yFBNUGG/AAQjwMLDQAgABA0KAIQKAK8AQvOBAEGfwJAAkACQCAAKAIEIgJFDQAgACgCECIBRQRAIAAgAjYCACAAIAIoAgA2AgQgAkEANgIAIAAgACgCACIBQQhqIgI2AhAgASgCBCEBIAAgAjYCDCAAIAEgAmo2AggMAgsgAigCBCAAKAIIIAFrTA0AIAIoAgAhASACIAAoAgA2AgAgACgCBCECIAAgATYCBCAAIAI2AgAgAkEIaiAAKAIQIgEgACgCCCABaxAgGiAAKAIQIQIgACAAKAIAIgFBCGoiAzYCECAAIAMgACgCDCACa2o2AgwgACADIAEoAgRqNgIIDAELIAAoAgghASAAKAIAIgRFIAAoAhAiBiAEQQhqR3JFBEBBACECIAEgBmtBAXQiBUEASA0CIAVFDQIgBUEIaiIBQQAgAUEAShsiA0UNAiAAKAIMIQEgBCADIAAoAhQoAgQRAAAiA0UNAiAAIAM2AgAgAyAFNgIEIAAgACgCAEEIaiICNgIQIAAgAiABIAZrajYCDCAAIAIgBWo2AggMAQtBACECIAEgBmsiAUEASA0BQYAIIQQgAUGACE8EQCABQQF0IgRBAEgNAgsgBEEIaiIBQQAgAUEAShsiAUUNASABIAAoAhQoAgARAgAiA0UNASADIAQ2AgQgAyAAKAIANgIAIAAgAzYCAAJ/IAAoAgwiAiAAKAIQIgFGBEAgAgwBCyADQQhqIAEgAiABaxAgGiAAKAIQIQIgACgCDAshASAAIANBCGoiAzYCECAAIAMgASACa2o2AgwgACADIARqNgIIC0EBIQILIAILvwEBAn8jAEEgayIEJAACQAJAIAFBfyADbiIFSQRAIAIgBUsNAQJAIAIgA2wiAkUEQCAAEBdBACEADAELIAAgAhA9IgBFDQMgAiABIANsIgFNDQAgACABakEAIAIgAWsQMxoLIARBIGokACAADwtBkbQDQd79AEHNAEGTswEQAAALIAQgAzYCBCAEIAI2AgBB6PoGKAIAQdrdAyAEEB0aECYACyAEIAI2AhBB6PoGKAIAQandAyAEQRBqEB0aECYAC0ABAn8jAEEQayIBJAAgABCkASICRQRAIAEgABA3QQFqNgIAQej6BigCAEGp3QMgARAdGhAmAAsgAUEQaiQAIAILKAEBfyMAQRBrIgIkACACIAE6AA8gACACQQ9qQQEQkwIaIAJBEGokAAsGACAAEBcLIAAgAARAIAAoAhQQFyAAKAIYEBcgACgCHBAXIAAQFwsL7wIBBn9BpK8LLQAABEBBoK8LKAIADwsjAEEgayICJAACQAJAA0AgAkEIaiIEIABBAnQiA2oCf0EBIAB0Qf////8HcSIFQQFyRQRAIAMoAgAMAQsgAEGG2AFB5fQEIAUbELMHCyIDNgIAIANBf0YNASAAQQFqIgBBBkcNAAtBABD2C0UEQEHI+QYhASAEQcj5BkEYEMIBRQ0CQeD5BiEBIARB4PkGQRgQwgFFDQJBACEAQcCsCy0AAEUEQANAIABBAnRBkKwLaiAAQeX0BBCzBzYCACAAQQFqIgBBBkcNAAtBwKwLQQE6AABBqKwLQZCsCygCADYCAAtBkKwLIQEgAkEIaiIAQZCsC0EYEMIBRQ0CQaisCyEBIABBqKwLQRgQwgFFDQJBGBBCIgFFDQELIAEgAikCCDcCACABIAIpAhg3AhAgASACKQIQNwIIDAELQQAhAQsgAkEgaiQAQaSvC0EBOgAAQaCvCyABNgIAIAELFQAgAC0AD0H/AUYEQCAAKAIAEBcLC78KAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhEIAIQFQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAuEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyALQv///////z9YBEAgBUHQAGogASANIAEgDSANUCIGG3kgBkEGdK18pyIGQQ9rELEBQRAgBmshBiAFKQNYIg1CIIghDiAFKQNQIQELIAJC////////P1YNACAFQUBrIAMgDCADIAwgDFAiCBt5IAhBBnStfKciCEEPaxCxASAGIAhrQRBqIQYgBSkDSCEMIAUpA0AhAwsgA0IPhiILQoCA/v8PgyICIAFCIIgiBH4iECAL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IAUgAWtBBHRqIgAgAiAFQQR0aiIDKQMANwMAIAAgAykDCDcDCCAGIAMpAwg3AyggBiADKQMANwMgIAVBAWoiAyAJTw0AIAgoAgAgAyABa0EEdGoiACACIANBBHRqIgMpAwA3AwAgACADKQMINwMIIAYgAykDCDcDOCAGIAMpAwA3AzAgCCgCACAFQQJqIgMgAWtBBHRqIgAgAiADQQR0aiIDKQMANwMAIAAgAykDCDcDCCAEIAMpAwg3AwggBCADKQMANwMAIAYgAiAFQQNqIgVBBHRqIgApAwg3A1ggBiAAKQMANwNQIA4oAhBBEGogBkEgahD5BQwBCwsgCCAHIAFrQQRqNgIEIAZBgAFqJAALcwEBfyAAECEgABA4TwRAIABBARDrAQsgABAhIQICQCAAECUEQCAAIAJqIAE6AAAgACAALQAPQQFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAAKAIAIAJqIAE6AAAgACAAKAIEQQFqNgIECwsyACAAQQAQlAICQCAAECUEQCAAQQA6AA8MAQsgAEEANgIECyAAECUEfyAABSAAKAIACwtEAgJ/AXwgAEEAIABBAEobIQADQCAAIANGRQRAIAEgA0EDdCIEaisDACACIARqKwMAoiAFoCEFIANBAWohAwwBCwsgBQsKACAALQALQQd2CxgAIAAtAABBIHFFBEAgASACIAAQtwcaCwsdACAAQQAgAEGZAU0bQQF0QfCJB2ovAQBB9PoGagsgAQJ/IAAQN0EBaiIBEEIiAkUEQEEADwsgAiAAIAEQIAslAQF/IwBBEGsiBCQAIAQgAzYCDCAAIAEgAiADEE4gBEEQaiQACykBAX5BuJYLQbiWCykDAEKt/tXk1IX9qNgAfkIBfCIANwMAIABCIYinC6sDAgV/AX4gAL1C////////////AINCgYCAgICAgPj/AFQgAb1C////////////AINCgICAgICAgPj/AFhxRQRAIAAgAaAPCyABvSIHQiCIpyICQYCAwP8DayAHpyIFckUEQCAAEL0FDwsgAkEedkECcSIGIAC9IgdCP4inciEDAkAgB0IgiKdB/////wdxIgQgB6dyRQRAAkACQCADQQJrDgIAAQMLRBgtRFT7IQlADwtEGC1EVPshCcAPCyACQf////8HcSICIAVyRQRARBgtRFT7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IAMgBUEEdGoiASAHIAVB4ABsaiIGKQMINwMIIAEgBikDADcDACAFQQFqIQUMAAsACwJAIARFDQBBACEFA0AgBUEERg0BIAQgBUEEdCIBaiIDIAdBAyAFa0HgAGxqIAFqIgEpAwg3AwggAyABKQMANwMAIAVBAWohBQwACwALIAAgBykDoAI3AwAgACAHKQOoAjcDCCAHQcAEaiQABSAHIAVBBHQiBmoiCCABIAZqIgYpAwA3AwAgCCAGKQMINwMIIAVBAWohBQwBCwsLPwECfwNAIAAoAhAiAigC8AEiAUUgACABRnJFBEAgASIAKAIQKALwASIBRQ0BIAIgATYC8AEgASEADAELCyAAC14BAX8jAEEgayICJAAgAiAAKAIANgIIIAIgACgCBDYCDCACIAAoAgg2AhAgAEIANwIEIAIgACsDEDkDGCAAIAEQlgEgASACQQhqIgAQlgEgAEEEchDFASACQSBqJAALoQEBAn8CQCAAECJFIAIgAWtBBUhyDQAgASACEJ0FIAJBBGshBCAAEEAiAiAAECJqIQUCQANAAkAgAiwAACEAIAEgBE8NACAAQQBMIABB/wBOckUEQCABKAIAIAIsAABHDQMLIAFBBGohASACIAUgAmtBAUpqIQIMAQsLIABBAEwgAEH/AE5yDQEgAiwAACAEKAIAQQFrSw0BCyADQQQ2AgALC4QBAQJ/IwBBEGsiAiQAIAAQoQEEQCAAKAIAIAAQ6AIaEKYFCyABECIaIAEQoQEhAyAAIAEoAgg2AgggACABKQIANwIAIAFBABDKASACQQA6AA8gASACQQ9qEMkBAkAgACABRiIBIANyRQ0ACyAAEKEBIAFyRQRAIAAQmQMaCyACQRBqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLzgkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCUKAgICAgIDA//8AVCAJQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAKQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBRshBEIAIAEgBRshAwwCCyADIAlCgICAgICAwP//AIWEUA0BIAEgCoRQBEAgAyAJhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAJhFBFDQAgASEDIAIhBAwBCyADIAEgASADVCAJIApWIAkgClEbIggbIQogBCACIAgbIgxC////////P4MhCSACIAQgCBsiC0IwiKdB//8BcSEHIAxCMIinQf//AXEiBUUEQCAGQeAAaiAKIAkgCiAJIAlQIgUbeSAFQQZ0rXynIgVBD2sQsQEgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAtC////////P4MhASAHBH4gAQUgBkHQAGogAyABIAMgASABUCIHG3kgB0EGdK18pyIHQQ9rELEBQRAgB2shByAGKQNQIQMgBikDWAtCA4YgA0I9iIRCgICAgICAgASEIQEgCUIDhiAKQj2IhCACIASFIQQCfiADQgOGIgIgBSAHRg0AGiAFIAdrIgdB/wBLBEBCACEBQgEMAQsgBkFAayACIAFBgAEgB2sQsQEgBkEwaiACIAEgBxCbAyAGKQM4IQEgBikDMCAGKQNAIAYpA0iEQgBSrYQLIQlCgICAgICAgASEIQsgCkIDhiEKAkAgBEIAUwRAQgAhA0IAIQQgCSAKhSABIAuFhFANAiAKIAl9IQIgCyABfSAJIApWrX0iBEL/////////A1YNASAGQSBqIAIgBCACIAQgBFAiBxt5IAdBBnStfKdBDGsiBxCxASAFIAdrIQUgBikDKCEEIAYpAyAhAgwBCyAJIAp8IgIgCVStIAEgC3x8IgRCgICAgICAgAiDUA0AIAlCAYMgBEI/hiACQgGIhIQhAiAFQQFqIQUgBEIBiCEECyAMQoCAgICAgICAgH+DIQMgBUH//wFOBEAgA0KAgICAgIDA//8AhCEEQgAhAwwBC0EAIQcCQCAFQQBKBEAgBSEHDAELIAZBEGogAiAEIAVB/wBqELEBIAYgAiAEQQEgBWsQmwMgBikDACAGKQMQIAYpAxiEQgBSrYQhAiAGKQMIIQQLIARCPYYgAkIDiIQhASAEQgOIQv///////z+DIAetQjCGhCADhCEEAkACQCACp0EHcSIFQQRHBEAgBCABIAEgBUEES618IgNWrXwhBAwBCyAEIAEgASABQgGDfCIDVq18IQQMAQsgBUUNAQsLIAAgAzcDACAAIAQ3AwggBkHwAGokAAtrAQF/IwBBgAJrIgUkACAEQYDABHEgAiADTHJFBEAgBSABIAIgA2siA0GAAiADQYACSSIBGxAzGiABRQRAA0AgACAFQYACEKIBIANBgAJrIgNB/wFLDQALCyAAIAUgAxCiAQsgBUGAAmokAAtZAQF/AkACQAJAAkAgASgCACICQQNxBH8gAgUgACABKAJERw0EIAEoAgALQQNxQQFrDgMAAQECCyAAIAEQsAQPCyAAIAEQ6gcPCyABEJUBDwtB3/kAQQAQMQvGBAIRfwJ8QbySC0G8kgsoAgBBAWoiDjYCAEGwkgsoAgAiBSACQThsaiEGIAUgAUE4bGoiCEEQaiEMRAAAAAAAABDAIRQDQCADQQRGRQRAAkAgDCADQQJ0aigCACIEQQBMDQAgCCAFIARBOGxqIAYQgA4iFSAUZEUNACAVIRQgAyEHCyADQQFqIQMMAQsLIAZBEGohD0QAAAAAAAAQwCEUQQAhA0EAIQQDQCADQQRGRQRAAkAgDyADQQJ0aigCACIKQQBMDQAgBiAFIApBOGxqIAgQgA4iFSAUZEUNACAVIRQgAyEECyADQQFqIQMMAQsLIAZBIGoiECAEQQJ0aigCACELIAhBIGoiESAHQQJ0IhJqKAIAIQVBuJILQbiSCygCACIEQQJqIgc2AgBBrJILKAIAIgMgBEEBaiIEQQR0aiIKIAE2AgAgAyAHQQR0aiIJIAI2AgAgCiADIAVBBHRqIhMoAgQiDTYCBCADIA1BBHRqIAQ2AgggCiAHNgIIIAkgBDYCBCAJIAMgC0EEdGoiCSgCCCINNgIIIAMgDUEEdGogBzYCBCATIAs2AgQgCSAFNgIIIAYoAjAhCyAIKAIwIQkgDCASaiACNgIAIBEgCUECdCICaiAENgIAIAIgDGogAyAKKAIEQQR0aigCADYCACAQIAtBAnQiAmogBzYCACACIA9qIAE2AgAgCCAIKAIwQQFqNgIwIAYgBigCMEEBajYCMEG0kgsoAgAiASAAQQJ0aiAFNgIAIAEgDkECdGogBDYCACAOC5kBAQJ/IAACfyAAKAIEIgIgACgCCEkEQCACIAEoAgA2AgAgAkEEagwBCyMAQSBrIgMkACADQQxqIAAgACgCBCAAKAIAa0ECdUEBahDxBCAAKAIEIAAoAgBrQQJ1IABBCGoQtwYiAigCCCABKAIANgIAIAIgAigCCEEEajYCCCAAIAIQrQkgACgCBCACELYGIANBIGokAAs2AgQLEQAgAEECQQRBgICAgAQQ/QYLCQAgACABNgIECyQAIAAgASACQQJ0aigCACgCACIBKQMANwMAIAAgASkDCDcDCAtBAQF/IAAEQCAAKAIAEBcgACgCSCEBAkAgAC0AUkEBRgRAIAFFDQEgAUEBEKwIDAELIAEgACgCTBD4DgsgABAXCwsqAQF/AkAgACgCPCIFRQ0AIAUoAkgiBUUNACAAIAEgAiADIAQgBREJAAsLKAAgAEEAEM8BAkAgABAlBEAgAEEAOgAPDAELIABBADYCBAsgABDnBAsRACAAIAEgASgCACgCFBEEAAsPACAAIAAoAgAoAhARAgALBgAQjgEACwsAIABB2LALEKUCCwsAIABB4LALEKUCC0MBA38CQCACRQ0AA0AgAC0AACIEIAEtAAAiBUYEQCABQQFqIQEgAEEBaiEAIAJBAWsiAg0BDAILCyAEIAVrIQMLIAMLQQICfwF8IwBBEGsiAiQAIAAgAkEMahDWASEEAkAgACACKAIMIgNGBEBBACEDDAELIAEgBDkDAAsgAkEQaiQAIAMLPgAgAQRAIAACfyABIAIQkwEiAgRAIAIgAWsMAQsgARA3CzYCBCAAIAE2AgAPC0GQzwFBgPsAQRxBhRYQAAALVwEBfyAAKAIEIgAEQCAAIAAoAgQiAUEBazYCBCABRQRAIAAgACgCACgCCBEBAAJAIABBCGoiASgCAARAIAEQjAdBf0cNAQsgACAAKAIAKAIQEQEACwsLC2QCAn8CfCABQQAgAUEAShshBSAAIAEgA2xBA3RqIQMgACABIAJsQQN0aiEAA0AgBCAFRkUEQCAAIARBA3QiAWorAwAgASADaisDAKEiByAHoiAGoCEGIARBAWohBAwBCwsgBp8LHgAgAEUEQEGDzwFBm/sAQRVBiIgBEAAACyAAKAIECxEAIAAgASAAKAIAKAIsEQAACwwAIAAgAS0AADoAAAslACAAIAAtAAtBgAFxIAFB/wBxcjoACyAAIAAtAAtB/wBxOgALCysBAX4CfyABrCEDIAAoAkxBAEgEQCAAIAMgAhDBDAwBCyAAIAMgAhDBDAsLdgEBfkGIygpBlMoKMwEAQY7KCjUBAEGSygozAQBCIIaEQYjKCjUBAEGMygozAQBCIIaEfnwiAD0BAEGMygogAEIgiD0BAEGKygogAEIQiD0BACAAQv///////z+DQgSGQoCAgICAgID4P4S/RAAAAAAAAPC/oAvVAQEEfyMAQRBrIgUkAEHIABDqAyIGAn8gAkUEQEG8yAohBEGIyQoMAQsgAigCACIEQbzICiAEGyEEIAIoAgQiA0GIyQogAxsLNgIEIAYgBDYCAEHQABDqAyIDIAY2AkwgAyADKAIAQXxxNgIAIAMgASgCACIBNgIYIAMgAUEIcjoAGCADIAM2AkggAyACIAQoAgARAAAhASADKAJMIAE2AgggA0EAIAAgBUEIakEBEKMDBEAgAyAFKQMINwMICyADEN8NIgBBACAAEM0FIAVBEGokACAACzEBAX9BASEBAkAgACgCSCAARg0AIAAQHkG0N0EHEPgBRQ0AIABBtDcQIxBqIQELIAELcwEBfyAAECEgABA4TwRAIABBARC4AgsgABAhIQICQCAAECUEQCAAIAJqIAE6AAAgACAALQAPQQFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAAKAIAIAJqIAE6AAAgACAAKAIEQQFqNgIECwsTACAAIAFBhiJB2QBB1bsBEI8DC5ICAQR/IwBBIGsiBCQAIAAQOCIDIAFqIgEgA0EBdEGACCADGyICIAEgAksbIQEgABAhIQUCQAJAAkACQCAALQAPQf8BRgRAIANBf0YNAiAAKAIAIQIgAUUEQCACEBdBACECDAILIAIgARA9IgJFDQMgASADTQ0BIAIgA2pBACABIANrEDMaDAELQQAgASABQQEQRiICGw0DIAIgACAFECAaIAAgBTYCBAsgAEH/AToADyAAIAE2AgggACACNgIAIARBIGokAA8LQZG0A0He/QBBzQBBk7MBEAAACyAEIAE2AgBB6PoGKAIAQandAyAEEB0aECYACyAEIAE2AhBB6PoGKAIAQandAyAEQRBqEB0aECYACwwAIAAgASgCADYCAAtDAQF/IwBBEGsiBSQAIAUgAjYCDCAFIAQ2AgggBUEEaiAFQQxqEIgCIAAgASADIAUoAggQTiEAEIcCIAVBEGokACAACwkAIAAQQBCUBwt/AgJ/AX4jAEEQayIDJAAgAAJ+IAFFBEBCAAwBCyADIAEgAUEfdSICcyACayICrUIAIAJnIgJB0QBqELEBIAMpAwhCgICAgICAwACFQZ6AASACa61CMIZ8IAFBgICAgHhxrUIghoQhBCADKQMACzcDACAAIAQ3AwggA0EQaiQACy4CAX8BfCMAQRBrIgIkACACIAAgAUEBELAHIAIpAwAgAikDCBCrByACQRBqJAALXwECfyACRQRAQQAPCyAALQAAIgMEfwJAA0AgAyABLQAAIgRHIARFcg0BIAJBAWsiAkUNASABQQFqIQEgAC0AASEDIABBAWohACADDQALQQAhAwsgAwVBAAsgAS0AAGsL/QEBBH8gACgCCCECIAAoAgwoAgAhBQJAAn8gAUUEQCACKAIAIgRBgCBxRQ0CIAIoAgQMAQsgAigCEA0BIAIoAgAhBCABCyEDIAIgBEH/X3E2AgACQCAEQQFxBEAgAkEANgIEIAFFBEAgAigCCCIBIAIoAgxBAnRqIQIDQCABIAJPDQMgASgCACIABEAgASADNgIAIAAoAgAhAyAAQQA2AgALIAFBBGohAQwACwALIAJBADYCEANAIANFDQIgAygCACAAIANBICAFEQMAGiEDDAALAAsgAiAEQQxxBH8gAwUgAiADNgIIQQALNgIEIAEEQCAAKAIIQX82AhALCwsLkwEBBH8gABArIQMgACABQQAQayICRQRADwsgACgCECIFIQECQANAIAEoAgQiBCACRg0BIAQiASAFRw0AC0GQwAFB2L0BQYIBQcO1ARAAAAsgASACKAIENgIEAkAgAC0AAEEDcUUEQCAEIAAgAhC4DQwBCyADEDQgAEHtAiACQQAQ5AMaCyADIAIoAgAQiQEaIAIQFwuFAgEDfyMAQRBrIgMkACADIAI2AgQgAyACNgIMIAMgAjYCCAJAAkACQEEAQQAgASACEE4iAkEASA0AIAJBAWohBSACIAAQOCAAECFrIgRPBEAgACAFIARrEOsBCyAAECEhBCACIAAQJQR/IAAgBGoFIAAoAgAgBGoLIAUgASADKAIMEE4iAUcgAUEATnENASABQQBMDQAgABAlBEAgAUGAAk8NAyAAIAAtAA8gAWo6AA8gABAhQRBJDQFBv64DQY/9AEHEAUHZHRAAAAsgACAAKAIEIAFqNgIECyADQRBqJAAPC0HNlgNBj/0AQb8BQdkdEAAAC0HSyQFBj/0AQcIBQdkdEAAACw4AIAAgASACEP4FENQIC7cCAQN/IwBBEGsiAyQAIAAoAjwhBCAAKAIQIgIgATYCqAECQCABRSAERXINAANAIAEoAgAiAEUNASABQQRqIQEgAEHeqAEQaQRAIAJBAzYCmAEMAQsgAEGkrwEQaQRAIAJBATYCmAEMAQsgAEHWqQEQaQRAIAJBAjYCmAEMAQsCQCAAQdUtEGlFBEAgAEG/mwEQaUUNAQsgAkEANgKYAQwBCyAAQcWnARBpBEAgAkKAgICAgICAgMAANwOgAQwBCyAAQc73ABBpBEADQCAALQAAIABBAWohAA0ACyACIAAQqAI5A6ABDAELIABB2q4BEGkEQCACQQE2ApwBDAELIABB2K4BEGkEQCACQQA2ApwBDAELIABB/awBEGkNACADIAA2AgBBnooEIAMQJwwACwALIANBEGokAAtoAQJ/IwBBEGsiAiQAIAJCADcDCCACQgA3AwAgAiABKwMAEOsIIAAgAhDdBCIDIAMQNxCTAhogAEHhwANBARCTAhogAiABKwMIEOsIIAAgAhDdBCIAIAAQNxCTAhogAhBmIAJBEGokAAsUACAAIAFBzaUBQcUAQeW4ARD6BgsRACAAQQNBCEGAgICAAhD9Bgs9AQJ/IABBACAAQQBKGyEAA0AgACAERkUEQCADIARBA3QiBWogASAFaisDACACojkDACAEQQFqIQQMAQsLC+YDAQV/IwBBEGsiAyQAIAMgACgCACIEQQhrKAIAIgI2AgwgAyAAIAJqNgIEIAMgBEEEaygCADYCCCADKAIIIgQgAUEAEIsBIQIgAygCBCEFAkAgAgRAIAMoAgwhACMAQUBqIgEkACABQUBrJABBACAFIAAbIQIMAQsjAEFAaiICJAAgACAFTgRAIAJCADcCHCACQgA3AiQgAkIANwIsIAJCADcCFCACQQA2AhAgAiABNgIMIAIgBDYCBCACQQA2AjwgAkKBgICAgICAgAE3AjQgAiAANgIIIAQgAkEEaiAFIAVBAUEAIAQoAgAoAhQRCwAgAEEAIAIoAhwbIQYLIAJBQGskACAGIgINACMAQUBqIgIkACACQQA2AhAgAkGU7Qc2AgwgAiAANgIIIAIgATYCBEEAIQAgAkEUakEAQScQMxogAkEANgI8IAJBAToAOyAEIAJBBGogBUEBQQAgBCgCACgCGBEJAAJAAkACQCACKAIoDgIAAQILIAIoAhhBACACKAIkQQFGG0EAIAIoAiBBAUYbQQAgAigCLEEBRhshAAwBCyACKAIcQQFHBEAgAigCLA0BIAIoAiBBAUcNASACKAIkQQFHDQELIAIoAhQhAAsgAkFAayQAIAAhAgsgA0EQaiQAIAILEgAgACABQc4hQRVBm/sAEI8DCxgAQQEgABBGIgBFBEBBgpUBQQAQMQsgAAsgACAAIAEoAhhGBEAgAUEcag8LIAAoAjAgASkDCBDGDQsYACAAIAEQ8QciAUUEQA8LIAAgASACEGgLDwAgAEGMxwooAgBBABBrCwkAIABBKBDhCguJAQEBfyMAQSBrIgIkACACIAEpAwg3AwggAiABKQMANwMAIAJBEGogAkHckAsoAgBB2gBsELQDIAEgAikDGDcDCCABIAIpAxA3AwAgASABKwMAQeiQCysDAKE5AwAgASABKwMIQfCQCysDAKE5AwggACABKQMANwMAIAAgASkDCDcDCCACQSBqJAAL3QMDB38EfAF+IwBB0ABrIgckACACKAIIIgtBACALQQBKGyEMIAG3IQ4gALchDyACKAIEIQgCQANAIAkgDEcEQCAHIAgpAwg3A0ggCCkDACESIAcgBysDSCAOoDkDSCAHIAcpA0g3AzggByASNwNAIAcgBysDQCAPoDkDQCAHIAcpA0A3AzAjAEEgayIKJAAgCiAHKQM4NwMYIAogBykDMDcDECADIApBCGpBBCADKAIAEQMAIApBIGokAARAQQAhCAwDBSAJQQFqIQkgCEEQaiEIDAILAAsLIAYgAigCDEEFdGoiBisDCBAwIRAgBisDACERIAQgASAFbLcgEKE5AwggBCAAIAVstyAREDChOQMAIAIoAgQhCEEAIQkDQCAJIAxHBEAgByAIKQMINwNIIAgpAwAhEiAHIAcrA0ggDqA5A0ggByAHKQNINwMoIAcgEjcDQCAHIAcrA0AgD6A5A0AgByAHKQNANwMgIAMgB0EgahDoDiAJQQFqIQkgCEEQaiEIDAELC0EBIQhBgIsLLQAAQQJJDQAgBCsDACEOIAcgBCsDCDkDGCAHIA45AxAgByABNgIIIAcgADYCBCAHIAs2AgBB6PoGKAIAQaXlBCAHEC0LIAdB0ABqJAAgCAucAQEBfyAAECEgABA4TwRAIABBARDrAQsgABAhIQECQCAAECUEQCAAIAFqQQA6AAAgACAALQAPQQFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAAKAIAIAFqQQA6AAAgACAAKAIEQQFqNgIECwJAIAAQJQRAIABBADoADwwBCyAAQQA2AgQLIAAQJQR/IAAFIAAoAgALC3YBAn8gASAAEDgiAWoiAiABQQF0QYAIIAEbIgMgAiADSxshAiAAECEhAwJAIAAtAA9B/wFGBEAgACgCACABIAJBARBgIQEMAQsgAkEBEBgiASAAIAMQIBogACADNgIECyAAQf8BOgAPIAAgAjYCCCAAIAE2AgALPQEDfyMAQRBrIgEkACABIAA2AgwgASgCDCICKAIAIgMEQCACIAM2AgQgAigCCBogAxAXCyABQRBqJAAgAAsHACAAEEwaCw8AIAAgACgCACgCDBECAAsHACAAECJFCxEAIAAgASABKAIAKAIcEQQACxEAIAAgASABKAIAKAIYEQQACy4AIAAgACgCCEGAgICAeHEgAUH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AggLCQAgACABNgIACwsAIAAgASACEKcFCxMAIAAgASACIAAoAgAoAgwRAwALIwEBfyACQQBOBH8gACgCCCACQQJ0aigCACABcUEARwVBAAsLEwAgAEEgciAAIABBwQBrQRpJGwuCAQECfyACRQRAQQAPCyAALQAAIgMEfwJAA0AgAS0AACIERQ0BIAJBAWsiAkUNAQJAIAMgBEYNACADEPcBIAEtAAAQ9wFGDQAgAC0AACEDDAILIAFBAWohASAALQABIQMgAEEBaiEAIAMNAAtBACEDCyADBUEACxD3ASABLQAAEPcBawtBAQJ/AkAgACgCECICKAKoASIBBEAgACABRg0BIAEQ+QEhASAAKAIQIAE2AqgBIAEPCyACIAA2AqgBIAAhAQsgAQsKACAALQAYQQFxC+8GAgh/BHwjAEFAaiIEJAACQCACKAIgIgYEQCAAQgA3AwggACAGKQMYNwMYIAAgBikDEDcDECABKAIEIQUDQCAFIAhGBEAgACAJNgIAIARBEGoiCCACENsFIAEoAhgiASABKAIAIAgQng4iAUUNAyABIQgDQCAIBEACQCAIKAIEKAIQIgogAkYNACAEIAoQ/wcgBEEQaiILIAQQ6QMiDUQAAAAAAAAAAGQEQAJAIANBBSACIAoQmw4iBSAFQQBIG0ECdGoiBigCACIFBEAgBEEwaiIHIAUQ/wcgCyAHEOkDIgxEAAAAAAAAAAAgDCANZBshDAJAIAYoAgAiBSgCIEUNACAEQSBqIAUQ2wUgBCAEKQIoNwM4IAQgBCkCIDcDMCALIAcQ6QMiDyANZEUNACAPIAwQJCEMCyAMRAAAAAAAAAAAZA0BCyAGIAo2AgAgDSEMCyAJQQFqIQkgDCAOoCEOCyAKKAIgIgVFDQAgBS0AJEUNACAEQTBqIgsgChDbBSAEIAQpAjg3AwggBCAEKQIwNwMAIARBEGoiBiAEEOkDIg1EAAAAAAAAAABkRQ0AAkAgA0EFIAIgChCbDiIFIAVBAEgbQQJ0aiIHKAIAIgUEQCALIAUQ/wcgBiALEOkDIgxEAAAAAAAAAAAgDCANZBshDAJAIAcoAgAiBSgCIEUNACAEQSBqIAUQ2wUgBCAEKQIoNwM4IAQgBCkCIDcDMCAGIAsQ6QMiDyANZEUNACAPIAwQJCEMCyAMRAAAAAAAAAAAZA0BCyAHIAo2AgAgDSEMCyAMIA6gIQ4gCUEBaiEJCyAIKAIAIQgMAQUgACAOOQMIIAAgCTYCAANAIAEoAgAgARAXIgENAAsMBQsACwALAkACQCABKAIAIAhBKGxqIgcgAkYNACAHKwMQIgxEAAAAAAAAAABkBEAgBysDGEQAAAAAAAAAAGQNAQsgDEQAAAAAAAAAAGINASAHKwMYRAAAAAAAAAAAYg0BIAcrAwAiDSAGKwMQIgxkRQ0AIA0gDCAGKwMAoGNFDQAgBysDCCINIAYrAxgiDGRFDQAgDSAMIAYrAwigY0UNACAJQQFqIQkLIAhBAWohCAwBCwsgACAJNgIAQaeTA0HSuAFBqQFBuv8AEAAAC0G28ABB0rgBQcYCQcIrEAAACyAEQUBrJAALZQEBfwJAIAErAwAgASsDEGNFDQAgASsDCCABKwMYY0UNACAAIAAoAlAiAkEBajYCUCAAKAJUIAJBBXRqIgAgASkDGDcDGCAAIAEpAxA3AxAgACABKQMINwMIIAAgASkDADcDAAsLoQEBAn8CQAJAIAEQNyICRQ0AIAIgABA4IAAQIWtLBEAgACACEOsBCyAAECEhAyAAECUEQCAAIANqIAEgAhAgGiACQYACTw0CIAAgAC0ADyACajoADyAAECFBEEkNAUG/rgNBj/0AQfABQY/qABAAAAsgACgCACADaiABIAIQIBogACAAKAIEIAJqNgIECw8LQevJAUGP/QBB7gFBj+oAEAAAC14AIABFBEBBx9ABQZe5AUHuAEG+nAEQAAALIABBMEEAIAAoAgBBA3FBA0cbaigCKCgCEEHIAWogABDQBCAAQVBBACAAKAIAQQNxQQJHG2ooAigoAhBBwAFqIAAQ0AQLGwAgACABIAJBBEECQYCAgIAEQf////8DEOQKCxUAIAAoAjwEQCAAKAIQIAE5A6ABCwtkAQJ/AkAgACgCPCIERQ0AIAQoAmgiBUUNACAAKAIQKAKYAUUNACAALQCZAUEgcQRAIAAgASACIAMgBREIAA8LIAAgACABIAJBEBAYIAIQkgIiACACIAMgBCgCaBEIACAAEBcLC24BAX8jAEFAaiIDJAAgAyABKQMANwMAIAMgASkDCDcDCCADIAEpAxg3AyggAyABKQMQNwMgIAMgAysDCDkDOCADIAMrAwA5AxAgAyADKwMgOQMwIAMgAysDKDkDGCAAIANBBCACEEEgA0FAayQAC18BA38jAEEQayIDJABB5fQEIQUDQCACIARGBEAgA0EQaiQABSAAIAUQGRogAyABIARBBHRqIgUpAwg3AwggAyAFKQMANwMAIAAgAxDdASAEQQFqIQRB4cADIQUMAQsLCzoBAn8gAEEAIABBAEobIQADQCAAIANGRQRAIAIgA0EDdCIEaiABIARqKwMAOQMAIANBAWohAwwBCwsL0wEBBH8jAEEQayIHJAAgAARAAkAgACgCBCIFIAAoAghHBEAgACgCACEGDAELAkAgByAFQQF0QQEgBRsiBUH/////A0sEf0HEAAUgACgCACAFQQJ0ED0iBg0BQTALEKMBNgIAQej6BigCAEG79AMgBxAdGhAmAAsgBiAAKAIIIghBAnRqQQAgBSAIa0ECdBAzGiAAIAU2AgggACAGNgIAIAAoAgQhBQsgBiAFQQJ0aiABNgIAIAAgBUEBajYCBCAHQRBqJAAPC0GDzwEgBCADIAIQAAALEwAgACABQf6kAUEVQZv7ABCFAgsSACAAKAIAIgAEQCAAEO0LGgsLEQAgACABKAIAEO0LNgIAIAALQQEBfyAAIAE3A3AgACAAKAIsIAAoAgQiAmusNwN4IAAgAVAgACgCCCIAIAJrrCABV3IEfyAABSACIAGnags2AmgLhQEBA38DQCAAIgJBAWohACACLAAAIgEQxgINAAtBASEDAkACQAJAIAFB/wFxQStrDgMBAgACC0EAIQMLIAAsAAAhASAAIQILQQAhACABQTBrIgFBCU0EQANAIABBCmwgAWshACACLAABIAJBAWohAkEwayIBQQpJDQALC0EAIABrIAAgAxsLGgBBzJQLIAA2AgAgASACEH9BzJQLQQA2AgALCgAgACgCAEEDcQuhAgEDfyMAQRBrIgQkAAJAAkAgAEHQLhAjIgJFDQAgAi0AACIDRQ0BAkAgA0EwRwRAIANBMWtB/wFxQQlJDQEgAkHHqQEQKkUEQEEEIQMMBAsgAkG6owEQKkUEQEEMIQMMBAtBAiEDIAJB+pMBECpFDQMgAkHPlwEQKkUNAyACQaGWARAqRQRAQQAhAwwECyACQYzeABAqRQ0DIAJBnN4AECpFBEBBCCEDDAQLIAJB8JYBECpFBEBBBiEDDAQLIAJBq5cBECpFDQEgAkHfigEQKkUNAUEKIQMgAkGKLhAqRQ0DIAQgAjYCAEGysAQgBBAnDAILQQIhAwwCC0EKIQMMAQsgASEDCyAAKAIQIgAgAC8BiAEgA3I7AYgBIARBEGokAAu9AgICfwN8IwBBQGoiAiQAIAAoAhAiACgCdCEDIAIgACkDKDcDGCACIAApAyA3AxAgAiAAKQMYNwMIIAIgACkDEDcDACABKwM4IgQgAUEgQRggA0EBcSIDG2orAwBEAAAAAAAA4D+iIgWgIQYgBCAFoSIEIAIrAwBjBEAgAiAEOQMACyABQRhBICADG2orAwAhBSABKwNAIQQgAisDECAGYwRAIAIgBjkDEAsgBCAFRAAAAAAAAOA/oiIFoCEGIAQgBaEiBCACKwMIYwRAIAIgBDkDCAsgAisDGCAGYwRAIAIgBjkDGAsgAiACKQMANwMgIAIgAikDGDcDOCACIAIpAxA3AzAgAiACKQMINwMoIAAgAikDODcDKCAAIAIpAzA3AyAgACACKQMoNwMYIAAgAikDIDcDECACQUBrJAALSgEDfwNAIAEgBEcEQCAAEN0DIQUgABDHDARAQQAPBSAEQQFqIQQgBSADQQh0ciEDDAILAAsLIANBAE4EfyACIAM2AgBBAQVBAAsLTQEDfwNAIAEgA0cEQCAAEN0DIQUgABDHDARAQQAPBSAFIANBA3R0IARyIQQgA0EBaiEDDAILAAsLIARBAE4EfyACIAQ2AgBBAQVBAAsLIgEBfwJAIAAoAjwiAUUNACABKAJMIgFFDQAgACABEQEACwvMAQICfwV8IAArA+ACIgYgACsDkASiIQcgBiAAKwOIBKIhBiAAKwOABCEIIAArA/gDIQkCQCAAKALoAkUEQANAIAMgBEYNAiACIARBBHQiAGoiBSAGIAkgACABaiIAKwMAoKI5AwAgBSAHIAggACsDCKCiOQMIIARBAWohBAwACwALA0AgAyAERg0BIAEgBEEEdCIAaiIFKwMIIQogACACaiIAIAcgCSAFKwMAoKI5AwggACAGIAggCqCaojkDACAEQQFqIQQMAAsACyACC8ACAQN/IwBBEGsiBSQAAkACQAJAAkAgAUUgAkVyRQRAIAAtAJkBQQRxDQECQAJ/IAAoAgAoAmwiAwRAIAAgASACIAMRAwAMAQsgACgCKCIDBEAgAiAAKAIsIAAoAjAiBEF/c2pLBEAgACACIARqQQFqIgQ2AiwgACADIAQQPSIDNgIoIANFDQYgACgCMCEECyADIARqIAEgAhAgGiAAIAAoAjAgAmoiATYCMCAAKAIoIAFqQQA6AAAMAgsgACgCJCIDRQ0FIAFBASACIAMQSgsgAkcNBQsgAiEDCyAFQRBqJAAgAw8LQebRBEEAIAAoAgwoAhARBAAQJgALQYWiBEEAIAAoAgwoAhARBAAQJgALQanQAUGpvQFBzgBB7wgQAAALIAAoAgwoAhAhACAFIAI2AgBB+rQEIAUgABEEABAmAAtzAQF/IAAQISAAEDhPBEAgAEEBENEBCyAAECEhAgJAIAAQJQRAIAAgAmogAToAACAAIAAtAA9BAWo6AA8gABAhQRBJDQFBv64DQY/9AEGIAkG4sgEQAAALIAAoAgAgAmogAToAACAAIAAoAgRBAWo2AgQLC3wCAn8DfCMAQSBrIgIkACABBEBBqr4BIQMgASsDACEEIAErAwghBSABKwMQIQYgAiAAKAIQKAIEIgFBA00EfyABQQJ0QYD5BGooAgAFQaq+AQs2AhggAiAGOQMQIAIgBTkDCCACIAQ5AwAgAEG6+AMgAhAcCyACQSBqJAAL6wEBAn8gAS0ABEEBRgRAIAAQuwQhAAsgAkEiEGIgACEEA0ACQAJAAkACQAJAAkACQAJAAkAgBC0AACIDDg4IBgYGBgYGBgEFAwYCBAALAkAgA0HcAEcEQCADQS9GDQEgA0EiRw0HIAJB3bUDEBkaDAgLIAJB8cQBEBkaDAcLIAJBlpcDEBkaDAYLIAJBn78BEBkaDAULIAJB8oUBEBkaDAQLIAJBmeoAEBkaDAMLIAJBtDsQGRoMAgsgAkGTJhAZGgwBCyACIAPAEGILIARBAWohBAwBCwsgAkEiEGIgAS0ABEEBRgRAIAAQFwsLMgEBfyMAQRBrIgIkACACIAE5AwAgAEHDhgEgAhCMASAAEKcGIABBIBDPASACQRBqJAALMQEBfyAAKAIEIgEoAiArAxAgASsDGKAgACsDCKEgACgCACIAKAIgKwMQIAArAxigoQsYACAAIAEgAiADEMYBRBZW556vA9I8ECQLUAEBf0EIIQUCQAJAAkACQCADQQFrDgQDAAIBAgtBECEFDAILQQQhBQwBC0EAIQULIAAgASADIAUgBBDXCSEAIAJBAEoEQCAAIAIQ1gkLIAALnAEBAX8gABAhIAAQOE8EQCAAQQEQuAILIAAQISEBAkAgABAlBEAgACABakEAOgAAIAAgAC0AD0EBajoADyAAECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgACgCACABakEAOgAAIAAgACgCBEEBajYCBAsCQCAAECUEQCAAQQA6AA8MAQsgAEEANgIECyAAECUEfyAABSAAKAIACwsRACAAQQRBEEGAgICAARD9BgssAQF/Qej6BigCACEBA0AgAEEATEUEQEHcwAMgARCDARogAEEBayEADAELCwsLACAAIAE2AgAgAAuEAQECfyMAQRBrIgIkACAAEKEBBEAgACgCACAAEOgCGhCUBAsgARAiGiABEKEBIQMgACABKAIINgIIIAAgASkCADcCACABQQAQygEgAkEANgIMIAEgAkEMahDSAQJAIAAgAUYiASADckUNAAsgABChASABckUEQCAAEJkDGgsgAkEQaiQAC7gBAQJ/IwBBEGsiBSQAIAUgATYCDEEAIQECQCACAn9BBiAAIAVBDGoQWw0AGkEEIANBwAAgABB9IgYQ9QFFDQAaIAMgBhDLAyEBA0ACQCAAEJEBGiABQTBrIQEgACAFQQxqEFsgBEECSHINACADQcAAIAAQfSIGEPUBRQ0DIARBAWshBCADIAYQywMgAUEKbGohAQwBCwsgACAFQQxqEFtFDQFBAgsgAigCAHI2AgALIAVBEGokACABC7gBAQJ/IwBBEGsiBSQAIAUgATYCDEEAIQECQCACAn9BBiAAIAVBDGoQXA0AGkEEIANBwAAgABB+IgYQ9gFFDQAaIAMgBhDMAyEBA0ACQCAAEJIBGiABQTBrIQEgACAFQQxqEFwgBEECSHINACADQcAAIAAQfiIGEPYBRQ0DIARBAWshBCADIAYQzAMgAUEKbGohAQwBCwsgACAFQQxqEFxFDQFBAgsgAigCAHI2AgALIAVBEGokACABC5UBAQN/IwBBEGsiBCQAIAQgATYCDCAEIAM2AgggBEEEaiAEQQxqEIgCIAQoAgghAyMAQRBrIgEkACABIAM2AgwgASADNgIIQX8hBQJAQQBBACACIAMQTiIDQQBIDQAgACADQQFqIgMQQiIANgIAIABFDQAgACADIAIgASgCDBBOIQULIAFBEGokABCHAiAEQRBqJAAgBQtjACACKAIEQbABcSICQSBGBEAgAQ8LAkAgAkEQRw0AAkACQCAALQAAIgJBK2sOAwABAAELIABBAWoPCyACQTBHIAEgAGtBAkhyDQAgAC0AAUEgckH4AEcNACAAQQJqIQALIAALLgACQCAAKAIEQcoAcSIABEAgAEHAAEYEQEEIDwsgAEEIRw0BQRAPC0EADwtBCgtGAQF/IAAoAgAhAiABEGwhACACQQhqIgEQwAIgAEsEfyABIAAQkgMoAgBBAEcFQQALRQRAEI4BAAsgAkEIaiAAEJIDKAIAC30BAn8jAEEQayIEJAAjAEEgayIDJAAgA0EYaiABIAEgAmoQqQUgA0EQaiADKAIYIAMoAhwgABCFDCADIAEgAygCEBCoBTYCDCADIAAgAygCFBCYAzYCCCAEQQhqIANBDGogA0EIahD0ASADQSBqJAAgBCgCDBogBEEQaiQAC+MBAgR+An8jAEEQayIGJAAgAb0iBUL/////////B4MhAiAAAn4gBUI0iEL/D4MiA1BFBEAgA0L/D1IEQCACQgSIIQQgA0KA+AB8IQMgAkI8hgwCCyACQgSIIQRC//8BIQMgAkI8hgwBCyACUARAQgAhA0IADAELIAYgAkIAIAWnZ0EgaiACQiCIp2cgAkKAgICAEFQbIgdBMWoQsQFBjPgAIAdrrSEDIAYpAwhCgICAgICAwACFIQQgBikDAAs3AwAgACAFQoCAgICAgICAgH+DIANCMIaEIASENwMIIAZBEGokAAsJACAAQQAQ1gELrgIDAXwBfgF/IAC9IgJCIIinQf////8HcSIDQYCAwP8DTwRAIAKnIANBgIDA/wNrckUEQEQAAAAAAAAAAEQYLURU+yEJQCACQgBZGw8LRAAAAAAAAAAAIAAgAKGjDwsCfCADQf////4DTQRARBgtRFT7Ifk/IANBgYCA4wNJDQEaRAdcFDMmppE8IAAgACAAohCmBKKhIAChRBgtRFT7Ifk/oA8LIAJCAFMEQEQYLURU+yH5PyAARAAAAAAAAPA/oEQAAAAAAADgP6IiAJ8iASABIAAQpgSiRAdcFDMmppG8oKChIgAgAKAPC0QAAAAAAADwPyAAoUQAAAAAAADgP6IiAJ8iASAAEKYEoiAAIAG9QoCAgIBwg78iACAAoqEgASAAoKOgIACgIgAgAKALC4cEAwN/An4BfSMAQSBrIgYkAAJAAkACQAJAIAFBBGoiAUEFTwRAQQEhByAFQQJGDQIMAQtBASEHQR0gAXZBAXEgBUECRnINAQsgACAGQRxqEMMFIgEoAuQDDQFBACEHIAFBiARBgARBiAQgACABRhsgBRtqIgApAwAiCSADIAJrIgisIgpCf4VWDQAgACAJIAp8NwMAIAEpA4AEIQkgASkDiAQhCiABEP4MIQtBASEHIAEpA5gEIAkgCnxYBEAgCyABKgKUBF8hBwsgASgCkARBAkkNACABQeX0BBD9DCABKALkAw0CIAZBCjYCECAGQeX0BDYCFCAGIAYoAhw2AgggBiAENgIMIAZB/swBQZXMASAFGzYCBCAGIAg2AgBBACEFQej6BigCACIAQZqtAyAGEB0aAkACQAJAIAhBGUgNACABKAKQBEEDTw0AA0AgBUEKRg0CIAIgBWotAAAQ0AcgABCDARogBUEBaiEFDAALAAsDQCACIANPDQIgAi0AABDQByAAEIMBGiACQQFqIQIMAAsAC0HsxAFBBEEBIAAQShogA0EKayEBA0AgASADTw0BIAEtAAAQ0AcgABCDARogAUEBaiEBDAALAAtBuvAEQQJBASAAEEoaCyAGQSBqJAAgBw8LQf83QZG8AUHQPUG0qgEQAAALQf83QZG8AUGbPUGohQEQAAALWwEDfyAAKAIAIQECQCAAKAIEIgJFBEAgACABNgIEDAELA0AgAUUNASABKAIAIAEgAjYCACAAIAE2AgQgASECIQEMAAsACyAAQQA2AhAgAEEANgIAIABCADcCCAspAQF/IwBBEGsiASQAIAEgADYCAEHo+gYoAgBByfYDIAEQHRpBAhAGAAsXACAARQRAQQAPCyAAQQxrKQMAQj+Ipwu3AQECfyADIANBH3UiBXMgBWshBQJAAkACQCABDgQAAQEBAgsgACACIAUgBBAuGiADQQBODQEgABByIQEDQCABRQ0CIAFBACACIAMgBBCuAiABEHEhAQwACwALIAAQGiEDIAFBAUchBgNAIANFDQECQCAGRQRAIAMgAiAFIAQQLhoMAQsgACADECkhAQNAIAFFDQEgASACIAUgBBAuGiAAIAEQLCEBDAALAAsgACADEBshAwwACwALCxEAIAAoAgAQ0A0gAEIANwIACy4BAn8gABAaIQEDQCABBEAgACABQQBBARDoByACaiECIAAgARAbIQEMAQsLIAILQgEBfyAAIAEQ5AEiAUUEQEEADwsgACgCNCABKAIcENgBIAAoAjQiAkEAQYABIAIoAgARAwAgASAAKAI0EPECNgIcC3cBAn8gAEH8xgpBABBrIgIgAUVyBH8gAgUgABA0IgEgAUHWAkEAQQEQ5AMaIAEQGiEDA0AgAwRAIAAgAxDUBSABIAMQKSECA0AgAgRAIAAgAhDUBSABIAIQLCECDAELCyABIAMQGyEDDAELCyAAQfzGCkEAEGsLC/0DAQd/IAVBGEEUIAAtAAAbaigCACAAEKgDIgYoAiQgACgCKCABKAIoENgFIARBACAEQQBKG0EBaiEMQQEhCwNAIAsgDEZFBEAgACIEIAIQpwMhACABIgcgAxCnAyEBAn8gBC0AAEUEQCAFKAIYIAAQqAMhCSAHKAIoIQcgBCgCKCEIIAYoAiQhBiAAKwMIIAQrAxBhBEAgBCgCICAGIAggBxDmAyEGIAkoAiQhBEEBRgRAIAAgASAGGyEHIAEgACAGGyEIIAkMAwsgASAAIAYbIQcgACABIAYbIQggCQwCCyAEKAIkIAYgCCAHEOYDIQYgCSgCJCEEQQFGBEAgASAAIAYbIQcgACABIAYbIQggCQwCCyAAIAEgBhshByABIAAgBhshCCAJDAELIAUoAhQgABCoAyEJIAcoAighByAEKAIoIQggBigCJCEGAn8gACsDCCAEKwMQYQRAIAQoAiAgBiAIIAcQ5gMhBiAJKAIkIQRBAkYEQCAAIAEgBhshCCABIAAgBhsMAgsgASAAIAYbIQggACABIAYbDAELIAQoAiQgBiAIIAcQ5gMhBiAJKAIkIQRBAkYEQCABIAAgBhshCCAAIAEgBhsMAQsgACABIAYbIQggASAAIAYbCyEHIAkLIQYgBCAIKAIoIAcoAigQ2AUgC0EBaiELDAELCwupAQECfyMAQTBrIgUkACAAIAVBLGoQrgchBgJ/IAAgBSgCLEYEQCAFIAA2AgQgBSABNgIAQbarASAFECdBAQwBCyADIAZIBEAgBSADNgIYIAUgADYCFCAFIAE2AhBB/KsBIAVBEGoQJ0EBDAELIAIgBkoEQCAFIAI2AiggBSAANgIkIAUgATYCIEHVqwEgBUEgahAnQQEMAQsgBCAGNgIAQQALIAVBMGokAAukAQEDf0HAABDNBCICIAIoAgBBfHFBAXI2AgAgAkHAAhDNBCIBNgIQIAIgABA0NgIYIAFCgICAgICAgPg/NwNgIAFBAToArAEgAUKAgICAgICA+D83A1ggAUEBNgLsASABQoCAgICAgID4PzcDUCABQQA2AsQBQQVBBBDNAiEDIAFBADYCzAEgASADNgLAASABQQVBBBDNAjYCyAEgACACELkIIAILegECfyABIAAgAygCABEAACEFIAIgASADKAIAEQAAIQQCQCAFRQRAIARFBEAPCyABIAIQrgEgASAAIAMoAgARAABFDQEgACABEK4BDAELIAQEQCAAIAIQrgEMAQsgACABEK4BIAIgASADKAIAEQAARQ0AIAEgAhCuAQsLkwMBC38gARA3IQIjAEEQayIKJAACQCAKQQhqIAAQrQUiDC0AAEEBRw0AIAAgACgCAEEMaygCAGoiBSgCGCEDIAEgAmoiCyABIAUoAgRBsAFxQSBGGyEJIAUoAkwiAkF/RgRAIwBBEGsiBCQAIARBDGoiByAFEEsgB0HgsAsQpQIiAkEgIAIoAgAoAhwRAAAhAiAHEEggBEEQaiQAIAUgAjYCTAsgAsAhB0EAIQIjAEEQayIIJAACQCADRQ0AIAUoAgwhBiAJIAFrIgRBAEoEQCADIAEgBCADKAIAKAIwEQMAIARHDQELIAYgCyABayIBa0EAIAEgBkgbIgZBAEoEQCAIQQRqIgQgBiAHEPcKIAMgCCgCBCAEIAgsAA9BAEgbIAYgAygCACgCMBEDACAEEC8aIAZHDQELIAsgCWsiAUEASgRAIAMgCSABIAMoAgAoAjARAwAgAUcNAQsgBUEANgIMIAMhAgsgCEEQaiQAIAINACAAIAAoAgBBDGsoAgBqQQUQtQkLIAwQrAUgCkEQaiQAIAAL6QEBBH8jAEEQayIEJAAgABA4IgMgAWoiASADQQF0QYAIIAMbIgIgASACSxshASAAECEhBQJAAkACQCAALQAPQf8BRgRAIANBf0YNAiAAKAIAIQIgAUUEQCACEBdBACECDAILIAIgARA9IgJFDQMgASADTQ0BIAIgA2pBACABIANrEDMaDAELIAFBARAYIgIgACAFECAaIAAgBTYCBAsgAEH/AToADyAAIAE2AgggACACNgIAIARBEGokAA8LQZG0A0He/QBBzQBBk7MBEAAACyAEIAE2AgBB6PoGKAIAQandAyAEEB0aECYAC6ALAQ9/AkAgAEUNAAJAAkACQAJAAkACQAJAIAAoAiBFBEBBASEDIAAoAiQiAkECcQ0HIAJBAXFBACABGw0HIAAoAgAgACgCBEcNCEEAIQMgABDDBiINRQ0HQQAhAiAAKAIAIgRBACAEQQBKGyEPIA0oAhghDCANKAIUIQkgACgCGCEQIAAoAhQhCiAEQQQQPyEHA0AgAiAPRkUEQCAHIAJBAnRqQX82AgAgAkEBaiECDAELCwJAQQggACgCECABG0EBaw4IAAQHAwcHBwIHC0F/IAQgBEEASBtBAWohBCANKAIcIQ4gACgCHCELQQAhAgNAIAIgBEYEQANAIAUgD0YNByAKIAVBAnQiA2ooAgAiBCAKIAVBAWoiBUECdCIGaigCACICIAIgBEgbIQggBCECA0AgAiAIRkUEQCAHIBAgAkECdGooAgBBAnRqIAI2AgAgAkEBaiECDAELCyADIAlqKAIAIgMgBiAJaigCACICIAIgA0gbIQYgAyECA0AgAiAGRwRAIAJBAnQhCCACQQFqIQIgBCAHIAggDGooAgBBAnRqKAIATA0BDAoLCwNAIAMgBkYNASADQQN0IANBAnQhBCADQQFqIQMgDmorAwAgCyAHIAQgDGooAgBBAnRqKAIAQQN0aisDAKGZREivvJry13o+ZEUNAAsMCAsACyACQQJ0IQMgAkEBaiECIAMgCmooAgAgAyAJaigCAEYNAAsMBQtB+ssBQZq2AUGnAUHKswEQAAALA0AgAyAPRg0DIAogA0ECdGooAgAiBSAKIANBAWoiBEECdGooAgAiAiACIAVIGyEGIAUhAgNAIAIgBkZFBEAgByAQIAJBAnRqKAIAQQJ0aiACNgIAIAJBAWohAgwBCwsgCSADQQJ0aigCACICIAkgBEECdGooAgAiAyACIANKGyEDA0AgAiADRgRAIAQhAwwCCyACQQJ0IQYgAkEBaiECIAUgByAGIAxqKAIAQQJ0aigCAEwNAAsLDAMLIA0oAhwhDiAAKAIcIQsDQCAFIA9GDQIgCiAFQQJ0IgNqKAIAIgQgCiAFQQFqIgVBAnQiBmooAgAiAiACIARIGyEIIAQhAgNAIAIgCEZFBEAgByAQIAJBAnRqKAIAQQJ0aiACNgIAIAJBAWohAgwBCwsgAyAJaigCACIDIAYgCWooAgAiAiACIANIGyEGIAMhAgNAIAIgBkcEQCACQQJ0IQggAkEBaiECIAQgByAIIAxqKAIAQQJ0aigCAEwNAQwFCwsDQCADIAZGDQEgA0ECdCECIANBAWohAyACIA5qKAIAIAsgByACIAxqKAIAQQJ0aigCAEECdGooAgBGDQALCwwCC0F/IAQgBEEASBtBAWohBCANKAIcIQYgACgCHCEOQQAhAgNAIAIgBEYEQANAIAUgD0YNAyAKIAVBAnQiBGooAgAiAyAKIAVBAWoiBUECdCILaigCACICIAIgA0gbIQggAyECA0AgAiAIRkUEQCAHIBAgAkECdGooAgBBAnRqIAI2AgAgAkEBaiECDAELCyAEIAlqKAIAIgQgCSALaigCACICIAIgBEgbIQsgBCECA0AgAiALRwRAIAJBAnQhCCACQQFqIQIgAyAHIAggDGooAgBBAnRqKAIATA0BDAYLCwNAIAQgC0YNAUEAIQMgBiAEQQR0aisDACAOIAcgDCAEQQJ0aigCAEECdGooAgAiAkEEdGorAwChmURIr7ya8td6PmQNBiAEQQF0IQggBEEBaiEEIAYgCEEDdGorAwggDiACQQR0aisDCKGZREivvJry13o+ZEUNAAsMBQsACyACQQJ0IQMgAkEBaiECIAMgCmooAgAgAyAJaigCAEYNAAsMAQtBASEDIAAgACgCJEEBQQMgARtyNgIkDAELQQAhAwsgBxAXIA0QZAsgAw8LQQALPgACQCAABEAgAUUNASAAIAEgARA3ENcBRQ8LQaHPAUHW/ABBDEH79gAQAAALQc7OAUHW/ABBDUH79gAQAAALRQICfwF8IABBACAAQQBKGyEAA0AgACADRkUEQCAFIAEgA0ECdCIEaioCACACIARqKgIAlLugIQUgA0EBaiEDDAELCyAFC10CAXwCfyAAIQMgASEEA0AgAwRAIANBAWshAyACIAQrAwCgIQIgBEEIaiEEDAELCyACIAC3oyECA0AgAARAIAEgASsDACACoTkDACAAQQFrIQAgAUEIaiEBDAELCwuUAQIDfAF/IAArAwAhAwJ/IAAgACgCECIGKAIERgRAIAYoAgAMAQsgAEEYagsiBisDACEEAkAgAkUNACABIAEoAhAiAigCBEYEQCACKAIAIQEMAQsgAUEYaiEBCyABKwMAIQUgAyAEYQRAIAMgBWIEQEEADwsgACsDCCABKwMIIAYrAwgQmApBf0cPCyADIAUgBBCYCgtBAQF/IAEgACgCBCICTwRAQd2pA0Hk+gBBwgBBwSEQAAALIAFBA3YgACAAKAIAIAJBIUkbai0AACABQQdxdkEBcQtFACABQQ9GBEAgCA8LAkAgASAHRgRAIAYhAiAFIQMMAQtBfyECQc4DIQMgAUEcRw0AIAAoAhANAEE7DwsgACADNgIAIAILEAAgACgCBCAAKAIAa0ECdQu6AwEDfyMAQRBrIggkACAIIAI2AgggCCABNgIMIAhBBGoiASADEEsgARDAASEJIAEQSCAEQQA2AgBBACEBAkADQCAGIAdGIAFyDQECQCAIQQxqIAhBCGoQWw0AAkAgCSAGKAIAEMsDQSVGBEAgBkEEaiAHRg0CQQAhAgJ/AkAgCSAGKAIEEMsDIgFBxQBGDQBBBCEKIAFB/wFxQTBGDQAgAQwBCyAGQQhqIAdGDQNBCCEKIAEhAiAJIAYoAggQywMLIQEgCCAAIAgoAgwgCCgCCCADIAQgBSABIAIgACgCACgCJBEOADYCDCAGIApqQQRqIQYMAQsgCUEBIAYoAgAQ9QEEQANAIAcgBkEEaiIGRwRAIAlBASAGKAIAEPUBDQELCwNAIAhBDGoiASAIQQhqEFsNAiAJQQEgARB9EPUBRQ0CIAEQkQEaDAALAAsgCSAIQQxqIgEQfRCZASAJIAYoAgAQmQFGBEAgBkEEaiEGIAEQkQEaDAELIARBBDYCAAsgBCgCACEBDAELCyAEQQQ2AgALIAhBDGogCEEIahBbBEAgBCAEKAIAQQJyNgIACyAIKAIMIAhBEGokAAu6AwEDfyMAQRBrIggkACAIIAI2AgggCCABNgIMIAhBBGoiASADEEsgARDBASEJIAEQSCAEQQA2AgBBACEBAkADQCAGIAdGIAFyDQECQCAIQQxqIAhBCGoQXA0AAkAgCSAGLAAAEMwDQSVGBEAgBkEBaiAHRg0CQQAhAgJ/AkAgCSAGLAABEMwDIgFBxQBGDQBBASEKIAFB/wFxQTBGDQAgAQwBCyAGQQJqIAdGDQNBAiEKIAEhAiAJIAYsAAIQzAMLIQEgCCAAIAgoAgwgCCgCCCADIAQgBSABIAIgACgCACgCJBEOADYCDCAGIApqQQFqIQYMAQsgCUEBIAYsAAAQ9gEEQANAIAcgBkEBaiIGRwRAIAlBASAGLAAAEPYBDQELCwNAIAhBDGoiASAIQQhqEFwNAiAJQQEgARB+EPYBRQ0CIAEQkgEaDAALAAsgCSAIQQxqIgEQfhCiBSAJIAYsAAAQogVGBEAgBkEBaiEGIAEQkgEaDAELIARBBDYCAAsgBCgCACEBDAELCyAEQQQ2AgALIAhBDGogCEEIahBcBEAgBCAEKAIAQQJyNgIACyAIKAIMIAhBEGokAAsWACAAIAEgAiADIAAoAgAoAjARBgAaCwcAIAAgAUYLLAEBfyAAIAEQtgwiAkEBahBCIgEEQCABIAAgAhAgGiABIAJqQQA6AAALIAELEAAgAEEgRiAAQQlrQQVJcgssACABQQAQxwUaQcyUCyAANgIAQQEhACABEHkEf0EBBUHMlAtBADYCAEEACwvDAQEEfyMAQRBrIgQkAAJAIAAgAUEwQQAgASgCAEEDcUEDRxtqKAIoIAIQeyIDRSAAIAFBUEEAIAEoAgBBA3FBAkcbaigCKCACEHsiBkVyDQAgBCABKQMINwMIIAQgASkDADcDAAJAIAAgAyAGIAQQ9wIiAyACRXJFBEAgACABEOsHIAEhAwwBCyADRQ0BCyADKAIAQQNxIgAgASgCAEEDcUYEQCADIQUMAQsgA0FQQTAgAEEDRhtqIQULIARBEGokACAFCzYAIAAgARCkAyIARQRAQQAPCyAAKAIAIQEgAgRAIAAgAkEIIAERAwAPCyAAQQBBgAEgAREDAAtGACAAKAIQKAKQARAXIAAQ3gUgACgCECgCYBC6ASAAKAIQKAJsELoBIAAoAhAoAmQQugEgACgCECgCaBC6ASAAQfklENkBC6UMAgp/CXwCQCAAEDVFBEAgACgCECgCtAFFDQELRAAAwP///99BIQ5EAADA////38EhDSAAEBohAkQAAMD////fwSEPRAAAwP///99BIRADQAJAAkACQCACRQRAIAAoAhAiACgCtAEiAUEAIAFBAEobQQFqIQNBASEBDAELIA0gAigCECIBKAKUASIDKwMIRAAAAAAAAFJAoiIRIAErA1BEAAAAAAAA4D+iIgugIgwgDCANYxshDCAPIAMrAwBEAAAAAAAAUkCiIg0gASsDWCABKwNgoEQAAAAAAADgP6IiEqAiEyAPIBNkGyEPIA4gESALoSIRIA4gEWMbIQ4gECANIBKhIg0gDSAQZBshECABKAJ8IgFFDQEgAS0AUUEBRw0BIAErA0AiDSABQRhBICAAKAIQLQB0QQFxIgMbaisDAEQAAAAAAADgP6IiEaEiCyAOIAsgDmMbIQ4gASsDOCILIAFBIEEYIAMbaisDAEQAAAAAAADgP6IiEqAiEyAPIA8gE2MbIQ8gCyASoSILIBAgCyAQYxshECANIBGgIg0gDGRFDQEMAgsDQCABIANGRQRAIA0gACgCuAEgAUECdGooAgAoAhAiAisDKCIMIAwgDWMbIQ0gDyACKwMgIgwgDCAPYxshDyAOIAIrAxgiDCAMIA5kGyEOIBAgAisDECIMIAwgEGQbIRAgAUEBaiEBDAELCwJAAkAgACgCDCIBRQ0AIAEtAFFBAUcNACABKwNAIgwgAUEYQSAgAC0AdEEBcSICG2orAwBEAAAAAAAA4D+iIhGhIgsgDiALIA5jGyEOIAErAzgiCyABQSBBGCACG2orAwBEAAAAAAAA4D+iIhKgIhMgDyAPIBNjGyEPIAsgEqEiCyAQIAsgEGMbIRAgDCARoCIMIA1kDQELIA0hDAsgACAMOQMoIAAgDzkDICAAIA45AxggACAQOQMQDAMLIAwhDQsgACACECkhAwNAAkACQAJAIAMEQCADKAIQIgUoAggiBkUNAyAGKAIEIQdBACEEA0ACQAJAIAQgB0cEQCAGKAIAIARBMGxqIggoAgQhCUEAIQEMAQsgBSgCYCIBDQEMBAsDQCABIAlGRQRAIA0gCCgCACABQQR0aiIKKwMIIgwgDCANYxshDSAPIAorAwAiESAPIBFkGyEPIA4gDCAMIA5kGyEOIBAgESAQIBFjGyEQIAFBAWohAQwBCwsgBEEBaiEEDAELCyABLQBRQQFHDQEgASsDQCIMIAFBGEEgIAAoAhAtAHRBAXEiBBtqKwMARAAAAAAAAOA/oiIRoSILIA4gCyAOYxshDiABKwM4IgsgAUEgQRggBBtqKwMARAAAAAAAAOA/oiISoCITIA8gDyATYxshDyALIBKhIgsgECALIBBjGyEQIAwgEaAiDCANZEUNAQwCCyAAIAIQGyECDAQLIA0hDAsCQAJAIAUoAmQiAUUNACABLQBRQQFHDQAgASsDQCINIAFBGEEgIAAoAhAtAHRBAXEiBBtqKwMARAAAAAAAAOA/oiIRoSILIA4gCyAOYxshDiABKwM4IgsgAUEgQRggBBtqKwMARAAAAAAAAOA/oiISoCITIA8gDyATYxshDyALIBKhIgsgECALIBBjGyEQIA0gEaAiDSAMZA0BCyAMIQ0LAkACQCAFKAJoIgFFDQAgAS0AUUEBRw0AIAErA0AiDCABQRhBICAAKAIQLQB0QQFxIgQbaisDAEQAAAAAAADgP6IiEaEiCyAOIAsgDmMbIQ4gASsDOCILIAFBIEEYIAQbaisDAEQAAAAAAADgP6IiEqAiEyAPIA8gE2MbIQ8gCyASoSILIBAgCyAQYxshECAMIBGgIgwgDWQNAQsgDSEMCwJAIAUoAmwiAUUNACABLQBRQQFHDQAgASsDQCINIAFBGEEgIAAoAhAtAHRBAXEiBRtqKwMARAAAAAAAAOA/oiIRoSILIA4gCyAOYxshDiABKwM4IgsgAUEgQRggBRtqKwMARAAAAAAAAOA/oiISoCITIA8gDyATYxshDyALIBKhIgsgECALIBBjGyEQIA0gEaAiDSAMZA0BCyAMIQ0LIAAgAxAsIQMMAAsACwALCy4BAX9BGBBNIgMgAjkDECADIAE5AwggACADQQEgACgCABEDACADRwRAIAMQFwsLPwECfyMAQRBrIgIkACAAIAEQRiIDRQRAIAIgACABbDYCAEHo+gYoAgBBqd0DIAIQHRoQJgALIAJBEGokACADC1QBA38jAEEQayIBJABBuIgLKAIAAkAgAEUNACAAEKQBIgINACABIAAQN0EBajYCAEHo+gYoAgBBqd0DIAEQHRoQJgALQbiICyACNgIAIAFBEGokAAutBAEKfAJAAkAgASsDACIFIAIrAwAiBmEEQCABKwMIIAIrAwhhDQELIAYgAysDACIIYgRAIAIrAwghBwwCCyACKwMIIgcgAysDCGINAQsgACACKQMANwMAIAAgAikDCDcDCCAAIAIpAwA3AxAgACACKQMINwMYIAAgAikDADcDICAAIAIpAwg3AygPCyAGIAWhIgUgBSAHIAErAwihIgkQTyILoyIMEKkCIQUgCCAGoSIIIAggAysDCCAHoSIIEE8iDaMiDhCpAiIKIAqaIAhEAAAAAAAAAABkG0QYLURU+yEJwKAgBSAFmiAJRAAAAAAAAAAAZBuhIgVEGC1EVPshGUBEAAAAAAAAAAAgBUQYLURU+yEJwGUboCIKRAAAAAAAAAAAZiAKRBgtRFT7IQlAZXFFBEBB17QDQZC4AUHqA0H8lQEQAAALIAREAAAAAAAA4D+iIgQgDKIgB6AhBSAGIAQgCSALoyILoqEhCSAEIA6iIAegIQcgBiAEIAggDaOioSEGRAAAAAAAAPA/IApEAAAAAAAA4D+iIggQV6NEAAAAAAAAEEBkBEAgACAHOQMoIAAgBjkDICAAIAU5AxggACAJOQMQIAAgBSAHoEQAAAAAAADgP6I5AwggACAJIAagRAAAAAAAAOA/ojkDAA8LIAAgBzkDKCAAIAY5AyAgACAFOQMYIAAgCTkDECAAIAQgCBCsDKMiBCALoiAFoDkDCCAAIAQgDKIgCaA5AwAL0QMDB38CfAF+IwBBQGoiByQAIAAoAhAiCigCDCELIAogATYCDCAAIAAoAgAoAsgCENwBIAAgBRCAAiADIAMrAwggAisDCKEiDkQtQxzr4jYaP0QtQxzr4jYavyAORAAAAAAAAAAAZhugRAAAAAAAACRAIAMrAwAgAisDAKEiDyAOEE9ELUMc6+I2Gj+goyIOojkDCCADIA9ELUMc6+I2Gj9ELUMc6+I2Gr8gD0QAAAAAAAAAAGYboCAOojkDAANAAkAgCEEERg0AIAYgCEEDdHYiAUH/AXEiDEUNACAHIAMpAwg3AzggByADKQMANwMwIAcgAikDCDcDKCAHIAIpAwA3AyAgAUEPcSENQQAhAQJAA0AgAUEIRg0BIAFBGGwhCSABQQFqIQEgDSAJQbCABWoiCSgCAEcNAAsgByAJKwMIIASiIg4gBysDOKI5AzggByAHKwMwIA6iOQMwIAcgAikDCDcDGCACKQMAIRAgByAHKQM4NwMIIAcgEDcDECAHIAcpAzA3AwAgB0EgaiAAIAdBEGogByAEIAUgDCAJKAIQERMACyACIAcpAyA3AwAgAiAHKQMoNwMIIAhBAWohCAwBCwsgCiALNgIMIAdBQGskAAsSACAAQeOeAUHFAEHluAEQkgULHAAgACgCECgCDEECdEGQ+ARqKAIAIAEgAhCHCQssAQF8IAAgASsDABCXAiAAQciQCysDACABKwMIIgKhIAJB2IsLLQAAGxCXAgvgAQIFfwJ8IwBBEGsiBCQAIAIoAgAhBSABQQRqIgchBiAHIQIgAAJ/AkAgASgCBCIDRQ0AIAUrAwghCANAIAggAyICKAIQIgMrAwgiCWNFIAMgBU0gCCAJZHJxRQRAIAIhBiACKAIAIgMNAQwCCyADIAVJIAggCWRyRQRAIAIhA0EADAMLIAIoAgQiAw0ACyACQQRqIQYLQRQQggEhAyAEIAc2AgggAyAFNgIQIARBAToADCABIAIgBiADEO0EIARBADYCBCAEQQRqEKEJQQELOgAEIAAgAzYCACAEQRBqJAALEgAgAARAIAAoAgAQFyAAEBcLC4cBAQV/IABBACAAQQBKGyEGIAFBACABQQBKGyEHIABBBBAYIQUgACABbEEIEBghBCABQQN0IQEDQCADIAZGRQRAIAUgA0ECdGogBDYCAEEAIQADQCAAIAdGRQRAIAQgAEEDdGogAjkDACAAQQFqIQAMAQsLIANBAWohAyABIARqIQQMAQsLIAUL1QECBn8EfSABQQAgAUEAShshCANAIAQgCEYEQANAIAYgCEZFBEAgACAFQQJ0aioCACACIAZBAnQiCWoqAgAiC5RDAAAAAJIhCiAGQQFqIgYhBANAIAVBAWohBSABIARGRQRAIAIgBEECdCIHaioCACEMIAMgB2oiByAAIAVBAnRqKgIAIg0gC5QgByoCAJI4AgAgDSAMlCAKkiEKIARBAWohBAwBCwsgAyAJaiIEIAogBCoCAJI4AgAMAQsLBSADIARBAnRqQQA2AgAgBEEBaiEEDAELCwtdAgF9An8gACEDIAEhBANAIAMEQCADQQFrIQMgAiAEKgIAkiECIARBBGohBAwBCwsgAiAAspUhAgNAIAAEQCABIAEqAgAgApM4AgAgAEEBayEAIAFBBGohAQwBCwsLpQQCCHwFfyMAQRBrIg4kACACIAArAwgiCKEiByABIAArAwAiCaEiBaMhBkGc2QooAgAgACgCEEHgAGxqIg0oAlwhAANAAkACQAJAAkACQCAAIAtGBEAgACELDAELIA0oAlggC0EEdGoiDCsACCEDIAEgDCsAACIKYSACIANhcQ0BIAMgCKEhBCAKIAmhIQMCQCAFRAAAAAAAAAAAZgRAIANEAAAAAAAAAABjDQIgBUQAAAAAAAAAAGQEQCADRAAAAAAAAAAAZEUNAiAGIAQgA6MiBGMNAyADIAVkRSAEIAZjcg0HDAMLIANEAAAAAAAAAABkBEAgB0QAAAAAAAAAAGVFDQcMAwsgBCAHZARAIAREAAAAAAAAAABlDQcMAwsgB0QAAAAAAAAAAGVFDQYMAgsgA0QAAAAAAAAAAGYNBSAGIAQgA6MiBGMNASADIAVjRQ0FIAQgBmNFDQEMBQsgBEQAAAAAAAAAAGRFDQQLIABB/////wBPDQEgDSgCWCAAQQR0IgxBEGoiDxA9IgBFDQIgACAMaiIMQgA3AAAgDEIANwAIIA0gADYCWCAAIAtBBHRqIgBBEGogACANKAJcIgwgC2tBBHQQjwEaIAAgAjkDCCAAIAE5AwAgDSAMQQFqNgJcCyAOQRBqJAAPC0GRtANB3v0AQc0AQZOzARAAAAsgDiAPNgIAQej6BigCAEGp3QMgDhAdGhAmAAsgC0EBaiELDAALAAslAQF8IAArAwAgASsDAKEiAiACoiAAKwMIIAErAwihIgIgAqKgC+cBAQN/IAJBACACQQBKGyEHQbj5B0H4yQooAgAQfyEFIAEhAgNAIAYgB0ZFBEAgAiACKAIQNgIIIAUgAkEBIAUoAgARAwAaIAZBAWohBiACQTBqIQIMAQsLAn8gBARAIAUgA0ExEKkKDAELIAAgBSADQTEQpwoLIgNBAkH/////BxCvAxpBACECA0AgAiAHRkUEQCABKAIQIQAgASABKAIYKAIQKAL0ASIENgIQIAEgBCAAayIAIAEoAiRqNgIkIAEgASgCLCAAajYCLCACQQFqIQIgAUEwaiEBDAELCyADEKYKIAUQeRoL5wEBA38gAkEAIAJBAEobIQdBuPkHQfjJCigCABB/IQUgASECA0AgBiAHRkUEQCACIAIoAgw2AgggBSACQQEgBSgCABEDABogBkEBaiEGIAJBMGohAgwBCwsCfyAEBEAgBSADQTAQqQoMAQsgACAFIANBMBCnCgsiA0ECQf////8HEK8DGkEAIQIDQCACIAdGRQRAIAEoAgwhACABIAEoAhgoAhAoAvQBIgQ2AgwgASAEIABrIgAgASgCIGo2AiAgASABKAIoIABqNgIoIAJBAWohAiABQTBqIQEMAQsLIAMQpgogBRB5GgvPAQICfwF8IwBBIGsiAiQAAkAgAUHu2gAQIyIDBEAgAyAARAAAAAAAAPA/RAAAAAAAAAAAEI0FDQELIAFB7doAECMiAQRAIAEgAESamZmZmZnpP0QAAAAAAAAQQBCNBQ0BCyAAQQE6ABAgAEKAgICAgICAiMAANwMAIABCgICAgICAgIjAADcDCAtBgIsLLQAABEAgAC0AECEBIAArAwAhBCACIAArAwg5AxAgAiAEOQMIIAIgATYCAEHo+gYoAgBBguYEIAIQLQsgAkEgaiQAC9IBAgN/BHwjAEEgayIEJAAgBCACNgIQIAQgATYCDCAAKAIAIgAgBEEMakEEIAAoAgARAwAhACAEQSBqJAAgA0UgAEVyRQRAIABBCGohAANAIAMoAgAhASAAIQIDQCACKAIAIgIEQCACKAIAIgQoAhAoApQBIgUrAwAgASgCECgClAEiBisDAKEiByAHoiAFKwMIIAYrAwihIgggCKKgIglByNcKKwMAIgogCqJjBEAgASAEIAcgCCAJELwKCyACQQRqIQIMAQsLIAMoAgQiAw0ACwsLBwAgABB5GgsPACAAIAAoAgAoAiQRAgALEQAgACABIAEoAgAoAiARBAALEQAgACABIAEoAgAoAiwRBAALDAAgAEGChoAgNgAACxEAIAAQQCAAECJBAnRqEJQHCw0AIAAoAgAgASgCAEcLDgAgABBAIAAQImoQlAcLFgAgACABIAIgAyAAKAIAKAIgEQYAGgsOACAAKAIIQf////8HcQuAAQECfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAEgASACQQJ0ahCpBSADQRBqIAMoAhggAygCHCAAEIMMIAMgASADKAIQEKgFNgIMIAMgACADKAIUEJgDNgIIIARBCGogA0EMaiADQQhqEPQBIANBIGokACAEKAIMGiAEQRBqJAALRQEBfyMAQRBrIgUkACAFIAEgAiADIARCgICAgICAgICAf4UQsgEgBSkDACEBIAAgBSkDCDcDCCAAIAE3AwAgBUEQaiQAC6gBAAJAIAFBgAhOBEAgAEQAAAAAAADgf6IhACABQf8PSQRAIAFB/wdrIQEMAgsgAEQAAAAAAADgf6IhAEH9FyABIAFB/RdPG0H+D2shAQwBCyABQYF4Sg0AIABEAAAAAAAAYAOiIQAgAUG4cEsEQCABQckHaiEBDAELIABEAAAAAAAAYAOiIQBB8GggASABQfBoTRtBkg9qIQELIAAgAUH/B2qtQjSGv6ILBAAgAAtaAQJ/IwBBEGsiAyQAIAMgATYCDCADIANBC2oiBDYCBCAAIANBDGoiASACIANBBGogASAAKAI4EQcAGiADKAIEIQAgAywACyEBIANBEGokAEF/IAEgACAERhsLPwAgAEEAEMMFIgAoAuQDBEBB/zdBkbwBQao+QciTARAAAAsgACABQYvVASACEPoMIAAgACgCpARBAWs2AqQECwsAIABBv8IEEP0MC7QBAQF/IAAoAggtAAFBEHEEQCAAQQAQ2AELAkAgAQRAIAEoAggtAAFBEHEEQCABQQAQ2AELIAEoAgwgACgCDEcNAQsgASECA0AgAgRAIAAgAkYNAiACKAIUIQIMAQsLIAAoAhQiAgRAIAIgAigCEEEBazYCEAsgAEIANwIUIAFFBEAgACAAKAIMKAIANgIAIAIPCyAAQfICNgIAIAAgATYCFCABIAEoAhBBAWo2AhAgAQ8LQQALlAEBA38CQCAAKAIIIgEoAgAiAkEMcQRAIAEoAgQhAgwBCyACQQFxBEAgABCIASECIAAoAggiAygCCCIBIAMoAgxBAnRqIQMDQCABIANPDQIgAUEANgIAIAFBBGohAQwACwALIAEoAgghAiABQQA2AggLIAAoAggiAEEANgIQIABBADYCBCAAIAAoAgBB/19xNgIAIAILxQIBCH8jAEEgayICJAACQCAAIAJBHGoQyAUiAEUNACACKAIcIgVBAEwNAANAIAAtAAAiA0UNASADQS1HBEAgAEEBaiEADAELCyACQgA3AxAgAkIANwMIIABBAWohBkEAIQMDQCAEIAVIBEAgAyAGaiIHLAAAIggEQCACQQhqIAgQlA0CQCAHLQAAQdwARgRAIANFDQEgACADai0AAEHcAEcNAQsgBEEBaiEECyADQQFqIQMMAgUgAkEIahBmQQAhBAwDCwALCyABIwBBEGsiASQAAkAgAkEIaiIAECUEQCAAIAAQISIFEMUCIgQNASABIAVBAWo2AgBB6PoGKAIAQandAyABEB0aECYACyAAQQAQlA0gACgCACEECyAAQgA3AgAgAEIANwIIIAFBEGokACAENgIAIAMgBmohBAsgAkEgaiQAIAQLHAAgACABIAAgAhCqASIBQQEQygUgACABEIkBGgs9AQF/QdCUCygCACECA0AgAkEATARAQQAPCyACQQFrIQIgAUHk9AQgACgCTCgCBCgCBBEAAEF/Rw0AC0F/C4UCAQN/IwBBEGsiAyQAIAMgAjYCBCADIAI2AgwgAyACNgIIAkACQAJAQQBBACABIAIQTiICQQBIDQAgAkEBaiEFIAIgABA4IAAQIWsiBE8EQCAAIAUgBGsQ2gcLIAAQISEEIAIgABAlBH8gACAEagUgACgCACAEagsgBSABIAMoAgwQTiIBRyABQQBOcQ0BIAFBAEwNACAAECUEQCABQYACTw0DIAAgAC0ADyABajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAWo2AgQLIANBEGokAA8LQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALuQEBAn8CQAJAIAAQNyIBRQ0AIAFBrJQLEDhBrJQLECFrSwRAQayUCyABENoHC0GslAsQISECQayUCxAlBEAgAkGslAtqIAAgARAgGiABQYACTw0CQbuUC0G7lAstAAAgAWo6AABBrJQLECFBEEkNAUG/rgNBj/0AQfABQY/qABAAAAtBrJQLKAIAIAJqIAAgARAgGkGwlAtB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AEHojgtBATsBACABKAI0KAIQLQBzIQIjAEEQayIEJAACfyACQQNPBEAgBCACNgIAQYa3BCAEEDFB7+sBDAELIAJBAnRBkIIFaigCAAshCCAEQRBqJABBwI4LAn8CQAJAQbAEEEIiAkUNACACQfMCNgIQIAJB9AI2AgwgAkEQNgKEAyACQQA2AiAgAkEANgIIIAJBITYCFCACQYACEEIiBDYCkAMgBEUNASACQYAIIAIoAgwRAgAiBDYCOCAERQRAIAIoApADIAIoAhQRAQAgAiACKAIUEQEADAELIAJBDGohBiACIARBgAhqNgI8AkBBACIERQRAQbwBIAIoAgwRAgAiBEUNASAEQgA3AlAgBEIANwJoIAQgBjYCZCAEIAY2AnwgBEIANwIIIARBADoABCAEQgA3AhwgBEEAOgAYIAQgBjYCECAEQQA2AgAgBEIANwIwIARBADoALCAEIAY2AiQgBEEANgIUIARBADYCYCAEQgA3AlggBEIANwJwIARBADYCeCAEQgA3AkQgBEEAOgBAIAQgBjYCOCAEQQA2AiggBEEANgI8IAQgBjYCTCAEQgA3AowBIARBADoAiAEgBEIBNwKAASAEIAY2ApQBIARCADcCmAEgBEEAOgCgASAEQgA3AqQBIARCADcCrAEgBEIANwK0AQsgAkEANgKAAyACIAQ2AuwCIAJBADYC+AIgAkEANgK4AiACQgA3A9gDIAJBIToA4AMgAkEANgKAAiACQQA2AogBIAJBADsB9AEgAkIANwKoAyACQQA2AvABIAJCADcClAMgAiAGNgK8AyACQgA3AsADIAJCADcCsAMgAkEANgK4AyACQQA6AJwDIAJBADYC0AMgAkIANwLIAyACIAY2AtQDQQAhBCACQfUCNgKgAiACQcsDNgKIAiACQQA2ApwCIAJCgICAgBA3ApQCIAgEQANAIAQgCGogBEEBaiEELQAADQALIAQgAigCDBECACIGBEAgBiAIIAQQIBoLIAIgBjYC8AELIAJBADYC8AIgAkGgAWogAkGcAWpBABDDBxogAkIANwMAIAJBQGtBAEHAABAzGiACQgA3AowBIAJBADYChAEgAkIANwKUASACQgA3A6ADIAJBADYCNCACQQE6ADAgAkEANgIsIAJCADcCJCACQgA3AqQCIAJCADcCrAIgAkEANgK0AiACIAIoAggi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NwMYIAEgACkDEDcDECABIAApAwg3AwggASAAKQMANwMAAkAgAkUNAAJAIAEoAgQNACACKAIEIgBFDQAgASAANgIECwJAIAErAxBEAAAAAAAAAABjRQ0AIAIrAxAiBEQAAAAAAAAAAGZFDQAgASAEOQMQCwJAIAEoAgANACACKAIAIgBFDQAgASAANgIACyACKAIYQf8AcSIARQ0AIAEgASgCGCAAcjYCGAsgA0GgjwsoAgAoAogBIgAgAUEBIAAoAgARAwA2AgAgA0GcjwsoAgA2AgRBnI8LIAM2AgAgAUEgaiQAC8EBAQJ/AkACQCABIAAoAhAiAigCsAEiA0cEQCAAIAEoAhAiACgCsAFHDQELQZiIBEEAECcMAQsgA0UEQCACIAE2ArABIAIoAqwBIgMgACgCrAFKBEAgACADNgKsAQsDQCABRQ0CIAEoAhAiACAALwGoASACLwGoAWo7AagBIAAgAC8BmgEgAi8BmgFqOwGaASAAIAAoApwBIAIoApwBajYCnAEgACgCsAEhAQwACwALQbjOAUGXuQFBqQJBmg8QAAALC2oBAX8jAEEgayIDJAAgA0IANwMYIANCADcDCCADQoCAgICAgID4v383AxAgAyACNgIYIANCADcDACABBEAgA0HAmgpBAyABQbnZARDGBAsgACgCiAEiACADQQEgACgCABEDACADQSBqJAALaQEBf0HUigsoAgAhAQJAIAAEQEHUigsgAUEBajYCACABDQFB0IoLQQAQsgcQYTYCAEGG2AEQsgcaDwsgAUEATA0AQdSKCyABQQFrIgA2AgAgAA0AQdCKCygCABCyBxpB0IoLKAIAEBcLC0IBAn8jAEEQayICJAAgASgCECEDIAIgACgCECkCyAE3AwggAiADKQLAATcDACAAIAJBCGogASACENsIIAJBEGokAAtOAQF/AkAgACgCPCIERQ0AIAAoAkQgASAAKAIQQeAAaiIBEOUIIAQoAlwiBEUNACAAIAEgBBEEAAsgACgCECIAIAM5A5ABIAAgAjYCiAELngQCA38BfCMAQbABayICJAAgAkIANwOoASACQgA3A6ABAkACQAJAAkACQCAAKAIgIgNBAWsOBAECAgACCyAAKAIAIgBB1K0BEENFBEAgAkG1sAE2AjAgAiABuzkDOCACQaABakGLhgEgAkEwahBUDAQLIABB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C0GDzwEgBCADIAIQAAALQf2qAyAEIAMgAhAAAAsKACAAQQhqEMkDCyMBAX8jAEEQayIBJAAgASAANgIMIAFBDGoQiAsgAUEQaiQACw0AIAAoAgAgAUECdGoLGQAgABChAQRAIAAgARC4AQ8LIAAgARDKAQthAQF/IwBBEGsiAiQAIAIgADYCDAJAIAAgAUYNAANAIAIgAUEBayIBNgIIIAAgAU8NASACKAIMIAIoAggQyAsgAiACKAIMQQFqIgA2AgwgAigCCCEBDAALAAsgAkEQaiQAC7EBAQN/IwBBEGsiByQAAkACQCAARQ0AIAQoAgwhBiACIAFrQQJ1IghBAEoEQCAAIAEgCBDVAyAIRw0BCyAGIAMgAWtBAnUiAWtBACABIAZIGyIBQQBKBEAgACAHQQRqIAEgBRDSCyIFEEAgARDVAyEGIAUQdRogASAGRw0BCyADIAJrQQJ1IgFBAEoEQCAAIAIgARDVAyABRw0BCyAEENULDAELQQAhAAsgB0EQaiQAIAALqAEBA38jAEEQayIHJAACQAJAIABFDQAgBCgCDCEGIAIgAWsiCEEASgRAIAAgASAIENUDIAhHDQELIAYgAyABayIBa0EAIAEgBkgbIgFBAEoEQCAAIAdBBGogASAFENYLIgUQQCABENUDIQYgBRAvGiABIAZHDQELIAMgAmsiAUEASgRAIAAgAiABENUDIAFHDQELIAQQ1QsMAQtBACEACyAHQRBqJAAgAAsOACAAIAEoAgA2AgAgAAsKACAAIAEgAGtqCwsAIAAtAAtB/wBxCwgAIABB/wFxC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQCAAIAJUIAEgA1MgASADURsEQEF/DwsgACAChSABIAOFhEIAUg8LIAAgAlYgASADVSABIANRGwRAQX8PCyAAIAKFIAEg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IAErA0ihOQNoIA8gASsDUDkDcCAPIAUgASsDWKE5A3ggDyABKQNoNwOIASAPIAEpA2A3A4ABIAAgASACIAQQgQIgACAPQSBqQQdBABCBAgwCCyAQQQRxBEAgDyAQNgIMIA8gEDYCICABIAIgD0EMakEBEJUIIRIgAkEGbEECakEQEBghEUEAIQMDQCACIANGRQRAIBEgE0EEdGoiASASIANBBnRqIhApAwA3AwAgASAQKQMINwMIIAEgECkDGDcDGCABIBApAxA3AxAgASAQKQMYNwMoIAEgECkDEDcDICABIBApAyg3AzggASAQKQMgNwMwIAFBQGsgECkDIDcDACABIBApAyg3A0ggASAQKQM4NwNYIAEgECkDMDcDUCADQQFqIQMgE0EGaiETDAELCyARIBNBBHRqIgEgESkDADcDACABIBEpAwg3AwggESATQQFyIgFBBHRqIgIgESkDGDcDCCACIBEpAxA3AwAgACARQRBqIAEgBBCBAiAREBcgEhAXDAILIA9B1gU2AgQgD0HcuAE2AgBB6PoGKAIAQdaxBCAPEB0aEG4ACyAPIAMoAgA2AhAgASACIA9BEGpBABCVCCEQAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCARQQFrDhkAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGQsgAkEBaiITQRAQGCERQQEhAwNAIAIgA0YEQCARIBAgAkEwbGoiAUEYaikDADcDCCARIAEpAxA3AwAgESACQQR0aiIDIAFBEGsiAkEIaikDADcDCCADIAIpAwA3AwAgACARIBMgBBBBIBEQFyAPIAIpAwg3AyggDyACKQMANwMgIA8gASkDGDcDOCAPIAEpAxA3AzAgDyAPKwMwIA8rAyAgASsDAKGgOQNAIA8gDysDOCAPKwMoIAErAwihoDkDSCAAIA9BMGpBAhA2IA8gDykDSDcDOCAPIA8pA0A3AzAgACAPQSBqQQIQNgwaBSARIANBBHQiEmoiFCABIBJqIhIpAwA3AwAgFCASKQMINwMIIANBAWohAwwBCwALAAsgAkECaiIDQRAQGCICIAEpAwg3AwggAiABKQMANwMAIAIgECkDIDcDECACIBApAyg3AxggAiAQKwMgIBArAzAiBiAQKwNAoUQAAAAA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ADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwsAIABBmLELEKUCCxQAIABB3wBxIAAgAEHhAGtBGkkbCxsBAX8gAUEBEPoLIQIgACABNgIEIAAgAjYCAAskACAAQQtPBH8gAEEIakF4cSIAIABBAWsiACAAQQtGGwVBCgsLJAECfyMAQRBrIgIkACAAIAEQpAUhAyACQRBqJAAgASAAIAMbCxMAIAAgASACIAAoAgAoAjARAwALZwIBfwF+IwBBEGsiAiQAIAACfiABRQRAQgAMAQsgAiABrUIAQfAAIAFnIgFBH3NrELEBIAIpAwhCgICAgICAwACFQZ6AASABa61CMIZ8IQMgAikDAAs3AwAgACADNwMIIAJBEGokAAtSAQJ/QdTNCigCACIBIABBB2pBeHEiAmohAAJAIAJBACAAIAFNG0UEQCAAPwBBEHRNDQEgABAMDQELQeSUC0EwNgIAQX8PC0HUzQogADYCACABC38CAX4DfwJAIABCgICAgBBUBEAgACECDAELA0AgAUEBayIBIAAgAEIKgCICQgp+fadBMHI6AAAgAEL/////nwFWIAIhAA0ACwsgAlBFBEAgAqchAwNAIAFBAWsiASADIANBCm4iBEEKbGtBMHI6AAAgA0EJSyAEIQMNAAsLIAELtQEBA38jAEEgayIDJAACQAJAIAEsAAAiAgRAIAEtAAENAQsgACACELYFIQEMAQsgA0EAQSAQMxogAS0AACICBEADQCADIAJBA3ZBHHFqIgQgBCgCAEEBIAJ0cjYCACABLQABIQIgAUEBaiEBIAINAAsLIAAiAS0AACICRQ0AA0AgAyACQQN2QRxxaigCACACdkEBcQ0BIAEtAAEhAiABQQFqIQEgAg0ACwsgA0EgaiQAIAEgAGsL3AEBAn8CQAJAIAEgACIDc0EDcQRAIAEtAAAhAgwBCyABQQNxBEADQCADIAEtAAAiAjoAACACRQ0DIANBAWohAyABQQFqIgFBA3ENAAsLQYCChAggASgCACICayACckGAgYKEeHFBgIGChHhHDQADQCADIAI2AgAgA0EEaiEDIAEoAgQhAiABQQRqIQEgAkGAgoQIIAJrckGAgYKEeHFBgIGChHhGDQALCyADIAI6AAAgAkH/AXFFDQADQCADIAEtAAEiAjoAASAD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An9BuAIQ8gMiASAAKAIQIgI2AgAgACABNgIQIAIEQCABQRBqIAJBEGpBKBAgGiABQThqIAJBOGpBKBAgGiABIAIoApgBNgKYASABIAIoApwBNgKcASABIAIrA6ABOQOgASABIAIoAogBNgKIASABQeAAaiACQeAAakEoECAaIAEPCyABQoCAgICAgID4PzcDoAEgAUIDNwOYASABC7kBAQN/IAAgAEEwaiICIAAoAgBBA3FBA0YbKAIoKAIQIgEoAuABIAEoAuQBIgFBAWogAUECahD/ASEBIAAgAiAAKAIAQQNxQQNGGygCKCgCECABNgLgASAAIAIgACgCAEEDcUEDRhsoAigoAhAiASABKALkASIDQQFqNgLkASABKALgASADQQJ0aiAANgIAIAAgAiAAKAIAQQNxQQNGGygCKCgCECIAKALgASAAKALkAUECdGpBADYCAAsRACAAQYafAUEZQby4ARCSBQv+AgICfwF+IwBB0ABrIgMkAAJ/QQAgAkUNABogA0HIAGogAkE6EMQBIAAgAUECdGpBQGsoAgAhAgJAIAMoAkwiBCADKAJIai0AAEE6RgRAQQEhACACIQEDQCABBEAgA0FAayABKAIEQToQxAECQCAEBEAgAyADKQJINwMwIAMgAykCQDcDKCADQTBqIANBKGoQkAZFDQELIAEoAgQhACADIAEoAgwoAgg2AiQgAyAANgIgQZCIC0GMMyADQSBqEIwBQQAhAAsgASgCACEBDAELCyAAQQFxRQ0BCyADQgA3A0BBASEAQQAhAQNAIAIEQCADQThqIAIoAgRBOhDEAQJAIAEEQCADIAMpA0A3AxggAyADKQM4NwMQIANBGGogA0EQahCQBg0BCyADIAMpAzhCIIk3AwBBkIgLQbAyIAMQjAFBACEACyADIAMpAzgiBTcDQCAFpyEBIAIoAgAhAgwBCwtB5fQEIABBAXENARoLQZCICxCbAgsgA0HQAGokAAtaAQJ/IAAoApgBIQEDQCABBEAgASgCBCABKALIBBAXIAEoAswEEBcgARAXIQEMAQsLQYiIC0EANgIAQYyIC0EANgIAIABBADYCuAEgAEIANwOYASAAQQA2AhwLMQEBfwJAIAFFDQAgAS0AAEUNACAAKAI8IgJFDQAgAigCcCICRQ0AIAAgASACEQQACwutAQICfwJ8IwBBIGsi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AgALIARBAWohBAwBCwsgBRAXIAcQFyAJQRBqJAAFIAlBCGogBCAHIAMQlwogBEEBayEEDAELCwUgAyAEQQJ0IgYgCigCBGooAgBBAnRqAn8gCigCCCAGaioCACITi0MAAABPXQRAIBOoDAELQYCAgIB4CzYCACAEQQFqIQQMAQsLBSADIARBAnRqQf////8HNgIAIARBAWohBAwBCwsLMAEBf0GA2QoQ5wYiAkEANgIgIAIgAToAECACIAA2AgggAkEANgIUIAJBADYCDCACCw8AIAAgAEGw3AAQIxCsCgsUACAAIAFBryVBFUGb+wBBAhD5BgsJACAAQQQQ/wsLCwAgBCACNgIAQQMLdAECfyMAQSBrIgIkAAJAIACtIAGtfkIgiFAEQCAAIAEQRiIDRQ0BIAJBIGokACADDwsgAiABNgIEIAIgADYCAEHo+gYoAgBB2t0DIAIQHRoQJgALIAIgACABbDYCEEHo+gYoAgBBqd0DIAJBEGoQHRoQJgALOQECfyMAQRBrIgMkACADQQxqIgQgARBLIAIgBBDOAyIBEL4BNgIAIAAgARC9ASAEEEggA0EQaiQACzcBAn8jAEEQayICJAAgAkEMaiIDIAAQSyADEMABQaC2B0G6tgcgARDDAiADEEggAkEQaiQAIAELOQECfyMAQRBrIgMkACADQQxqIgQgARBLIAIgBBDQAyIBEL4BOgAAIAAgARC9ASAEEEggA0EQaiQAC6cBAQR/IwBBEGsiBSQAIAEQNyECIwBBEGsiAyQAAkAgAkH3////B00EQAJAIAIQpQUEQCAAIAIQygEgACEEDAELIANBCGogAhDTA0EBahDSAyADKAIMGiAAIAMoAggiBBDzASAAIAMoAgwQ8gEgACACELgBCyAEIAEgAhCmAiADQQA6AAcgAiAEaiADQQdqEMkBIANBEGokAAwBCxC/AQALIAVBEGokAAsXACAAIAM2AhAgACACNgIMIAAgATYCCAsSACAAIAEgAkL/////DxC0BacLawEBfwJAIABFBEBBmKgLKAIAIgBFDQELIAAgARC1BSAAaiICLQAARQRAQZioC0EANgIAQQAPCyACIAEQ2QMgAmoiAC0AAARAQZioCyAAQQFqNgIAIABBADoAACACDwtBmKgLQQA2AgALIAIL5AoBDX8gASwAACICRQRAIAAPCwJAIAAg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AysDEDkDmAEgBCALOQOQASABQbTdBCAEQZABahAcIAEgAigCABA7IARB4wBB8gAgAygCGCIGQQFGG0HsACAGGzYCgAEgAUG53wQgBEGAAWoQHCABIAIoAgAQOyAEIAMrAyA5A3AgAUH43AQgBEHwAGoQHCABIAIoAgAQOyABQfu+AxAZGiADKAIoIAIgARCWAiABQQoQYgwHCyAEQcMAQeMAIAZBCEYbNgKgASABQazfBCAEQaABahAcIAEgAigCABA7IAFB4N4EQQAQHCABIAIoAgAQOyABQZS/AxAZGiADKAIIIAIgARCWAiABQQoQYgwGCyAEQcMAQeMAIAZBDUYbNgKQAiABQazfBCAEQZACahAcIAEgAigCABA7AkACQAJAIAMoAggOAgABAgsgAUHg3gRBABAcIAEgAigCABA7IAFBlL8DEBkaIAMoAhAgAiABEJYCIAFBChBiDAcLIAFBut4EQQAQHCABIAIoAgAQOyABIAIoAgAQOyADKwMQIQsgBCADKwMYOQOIAiAEIAs5A4ACIAFB4N0EIARBgAJqEBwgASACKAIAEDsgAysDICELIAQgAysDKDkD+AEgBCALOQPwASABQcrdBCAEQfABahAcIAEgAigCABA7IAEgAygCMCADKAI0IAIQ/ggMBgsgAUHN3gRBABAcIAEgAigCABA7IAEgAigCABA7IAMrAxAhCyADKwMYIQwgBCADKwMgOQPgASAEIAw5A9gBIAQgCzkD0AEgAUGS3gQgBEHQAWoQHCABIAIoAgAQOyADKwMoIQsgAysDMCEMIAQgAysDODkDwAEgBCAMOQO4ASAEIAs5A7ABIAFB9t0EIARBsAFqEBwgASACKAIAEDsgASADKAJAIAMoAkQgAhD+CAwFCyABQe3fBEEAEBwgASACKAIAEDsgBCADKwMIOQOgAiABQYndBCAEQaACahAcIAEgAigCABA7IAFBsb8DEBkaIAMoAhAgAiABEJYCIAFBChBiDAQLIAFB1d8EQQAQHCABIAIoAgAQOyABQae/AxAZGiADKAIIIAIgARCWAiABQQoQYgwDCyABQa7eBEEAEBwgASACKAIAEDsgBCADKAIINgKwAiABQaq6BCAEQbACahAcDAILIARBtAI2AhQgBEHsuQE2AhBB6PoGKAIAQdaxBCAEQRBqEB0aEG4ACyAEQeUAQcUA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DAALAAsgAhCTCCIBDQBBpJELQaSRCygCACIDQQFqIgE2AgAgA0H/////A08NAUGgkQsoAgAgAUECdCIBED0iBUUNAiABIANBAnQiBksEQCAFIAZqQQA2AAALQaCRCyAFNgIAQRAQTSEBQaCRCygCACADQQJ0aiABNgIAIAFBuJwKKQMANwIIIAFBsJwKKQMANwIAIAEgAhCkATYCAEEBIQMCQEH0igsoAgANACACQefrABBHDQAgASgCACECQQAhAyAEQbCcCigCADYCECAEIAI2AhRB4+0DIARBEGoQJwsgASADOgAMCyAEQSBqJAAgAQwCC0GRtANB3v0AQc0AQZOzARAAAAsgBCABNgIAQej6BigCAEGp3QMgBBAdGhAmAAshASAAKAIQIAE2AgggAEHMjAsoAgAQPiEBIABBvIwLKAIARAAAAAAAACxARAAAAAAAAPA/EFMhByAAQcCMCygCAEG16QAQUSECIABBxIwLKAIAQe30ABBRIQQgARCtAiEDIAAgASAAEP4CQQJGQQJ0IANBAEdBAXRyIAcgAiAEEP8CIQEgACgCECABNgJ4AkBB0IwLKAIAIgFFDQAgACABED4iAUUNACABLQAARQ0AIAAgASABEK0CQQBHQQF0IAcgAiAEEP8CIQEgACgCECABNgJ8IAAQKygCECIBIAEtAHFBEHI6AHELIABB3IwLKAIAQQBBABBQIQEgACgCECICQf8BIAEgAUH/AU4bOgCgASAAIAIoAggoAgQoAgARAQAL0wIBA38jAEEQayIDJAACQCAARQ0AIAAtAABFDQBBhIsLKAIAIgIEQEHIkQstAAANASADIAI2AgBB3OsEIAMQJ0HIkQtBAToAAAwBC0HMkQsoAgAhAkH4igsoAgAEQCACRQRAQdCRCygCABAXQcyRC0H4igsoAgAiATYCAEHQkQsgARC4DjYCAAtBACEBA0AgAUEDRgRAQdCRCygCACAAELcOIQEMAwUgACABQfTcAWosAAAgABA3QQFqEL0MIgJBAWogACACGyEAIAFBAWohAQwBCwALAAtB0JELKAIAIQECQCACQfyKCygCAEYNACABEBdBACEBQcyRC0H8igsoAgAiAjYCAEHQkQtBADYCACACRQ0AIAItAABFDQBB0JELIAIQuA4iATYCAAsgAUUgAC0AAEEvRnJFBEAgASAAELcO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sIEIaiIDKwMAYgR/IAMgBjkDACABQSBqIgJBo6MDEIgDIAEgACgCECsDoAE5AxAgAkG+hgEgAUEQahCMASACEKcGIAJBKRDPASAAQb69AyACELwBENICIAAoAhAFIAILKAKoASIERQ0AA0AgBCgCACIDRQ0BIARBBGohBCADQdquARBpDQAgA0HFpwEQaQ0AIANBzvcAEGkNACABQSBqIAMQiAMDQCADLQAAIANBAWoiAiEDDQALIAItAAAEQCABQSBqQSgQzwFB5fQEIQMDQCACLQAABEAgASACNgIEIAEgAzYCACABQSBqQboyIAEQjAEDQCACLQAAIAJBAWohAg0AC0G+mAMhAwwBBSABQSBqQSkQzwELCwsgAEG+vQMgAUEgahC8ARDSAgwACwALIAFBIGoQZiABQTBqJAALawECfyMAQRBrIgMkACADQgA3AwggA0IANwMAA0ACQCACLQAAIgRB3ABHBEAgBA0BIAAgASADELwBEGggAxBmIANBEGokAA8LIANB3AAQzwEgAi0AACEECyADIATAEM8BIAJBAWohAgwACwALkgIBBX8gABDnBCEDIAAQISEBAkACQAJAA0AgASICRQ0BIAMgAUEBayIBai0AAEEuRw0ACyAAECEhAQNAIAFBAWshBSABIAJHBEAgAyAFai0AAEEwRw0CCwJAIAAQJQRAIAAtAA8iBEUNBCAAIARBAWs6AA8MAQsgACAAKAIEQQFrNgIECyABIAJHIAUhAQ0ACyAAECEiAUECSQ0AIAEgA2oiAUECayICLQAAQS1HDQAgAUEBay0AAEEwRw0AIAJBMDoAACAAECUEQCAALQAPIgFFDQMgACABQQFrOgAPDwsgACAAKAIEQQFrNgIECw8LQZKJA0GP/QBB5AJB6ioQAAALQZKJA0GP/QBB+gJB6ioQAAALXQEEfyAAQbz6BzYCAEHU7QpBADYCACAAQQRqIgJBBGohBCACKAIAIQEDQCABIARHBEAgASgCECIDBEAgAxCQCRoLIAMQFyABEJcBIQEMAQsLIAIgAigCBBCpBiAACx8AIAEEQCAAIAEoAgAQqQYgACABKAIEEKkGIAEQFwsLVwEBfyADQQA6ABxByAAQggEiBEEAELMGGiABIAQ2AgAgACAEIAMoAgAgAygCBBDqBEHIABCCASIBQQAQswYaIAIgATYCACAA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AkACQCAAKAIQQQFrDggAAQQCBAQEAwQLIARBACAEQQBKGyEMIA0oAhwhBCABKAIcIQMgACgCHCERQQAhAANAIAAgDEYNBCAPIABBAWoiAUECdCIIaiEKIA8gAEECdCIFaigCACEAA0AgACAKKAIATkUEQCAJIBQgAEECdGooAgAiB0ECdGogAjYCACAQIAJBAnRqIAc2AgAgBCACQQN0aiARIABBA3RqKwMAOQMAIABBAWohACACQQFqIQIMAQsLIAUgC2ohCiAIIA5qIQcgBSAOaigCACEAA0AgACAHKAIATkUEQAJAIAkgEyAAQQJ0aigCACIFQQJ0aigCACIGIAooAgBIBEAgECACQQJ0aiAFNgIAIAQgAkEDdGogAyAAQQN0aisDADkDACACQQFqIQIMAQsgBCAGQQN0aiIFIAMgAEEDdGorAwAgBSsDAKA5AwALIABBAWohAAwBCwsgCCALaiACNgIAIAEhAAwACwALIARBACAEQQBKGyEMIA0oAhwhBCABKAIcIQggACgCHCERQQAhAANAIAAgDEYNAyAPIABBAWoiAUECdCIFaiEKIA8gAEECdCIDaigCACEAA0AgACAKKAIATkUEQCAJIBQgAEECdGooAgAiB0ECdGogAjYCACAQIAJBAnRqIAc2AgAgBCACQQR0aiIHIBEgAEEEdGoiBisDADkDACAHIAYrAwg5AwggAEEBaiEAIAJBAWohAgwBCwsgAyALaiEKIAUgDmohByADIA5qKAIAIQADQCAAIAcoAgBORQRAAkAgCSATIABBAnRqKAIAIgNBAnRqKAIAIgYgCigCAEgEQCAQIAJBAnRqIAM2AgAgBCACQQR0aiIDIAggAEEEdGoiBisDADkDACADIAYrAwg5AwggAkEBaiECDAELIAQgBkEEdGoiAyAIIABBBHRqIgYrAwAgAysDAKA5AwAgAyAGKwMIIAMrAwigOQMICyAAQQFqIQAMAQsLIAUgC2ogAjYCACABIQAMAAsACyAEQQAgBEEAShshDCANKAIcIQQgASgCHCEDIAAoAhwhEUEAIQADQCAAIAxGDQIgDyAAQQFqIgFBAnQiCGohCiAPIABBAnQiBWooAgAhAANAIAAgCigCAE5FBEAgCSAUIABBAnQiB2ooAgAiBkECdGogAjYCACAQIAJBAnQiEmogBjYCACAEIBJqIAcgEWooAgA2AgAgAEEBaiEAIAJBAWohAgwBCwsgBSALaiEKIAggDmohByAFIA5qKAIAIQADQCAAIAcoAgBORQRAAkAgCSATIABBAnQiBWooAgAiBkECdGooAgAiEiAKKAIASARAIBAgAkECdCISaiAGNgIAIAQgEmogAyAFaigCADYCACACQQFqIQIMAQsgBCASQQJ0aiIGIAYoAgAgAyAFaigCAGo2AgALIABBAWohAAwBCwsgCCALaiACNgIAIAEhAAwACwALIARBACAEQQBKGyEIQQAhAANAIAAgCEYNASAPIABBAWoiAUECdCIEaiEFIA8gAEECdCIDaigCACEAA0AgACAFKAIATkUEQCAJIBQgAEECdGooAgAiDEECdGogAjYCACAQIAJBAnRqIAw2AgAgAEEBaiEAIAJBAWohAgwBCwsgAyALaiEFIAQgDmohDCADIA5qKAIAIQADQCAAIAwoAgBORQRAIAkgEyAAQQJ0aigCACIDQQJ0aigCACAFKAIASARAIBAgAkECdGogAzYCACACQQFqIQILIABBAWohAAwBCwsgBCALaiACNgIAIAEhAAwACwALIA0gAjYCCAsgCRAXCyANDwtBvdgBQZq2AUHGBUG5sAEQAAALQeDLAUGatgFBxwVBubABEAAAC0G7lQFBmrYBQcgFQbmwARAAAAvMCAIQfwF8AkAgAEUNACAAKAIgRQRAIAAoAhghDSAAKAIUIQcgACgCBCIIIAAoAgAiAiAAKAIIIgEgACgCEEEAEJoCIgkgATYCCCAJKAIYIQ4gCSgCFCEDQX8gCCAIQQBIG0EBaiEKQQAhAQNAIAEgCkYEQEEAIQEgAkEAIAJBAEobIQogA0EEaiEGA0ACQCABIApGBEBBACEBIAhBACAIQQBKGyECA0AgASACRg0CIAFBAnQhBiADIAFBAWoiAUECdGoiBCAEKAIAIAMgBmooAgBqNgIADAALAAsgByABQQFqIgJBAnRqIQQgByABQQJ0aigCACEBA0AgBCgCACABTARAIAIhAQwDBSAGIA0gAUECdGooAgBBAnRqIgsgCygCAEEBajYCACABQQFqIQEMAQsACwALC0EAIQICQAJAAkACQAJAAkAgACgCEEEBaw4IAAEEAgQEBAMECyAJKAIcIQYgACgCHCEEA0AgAiAKRg0FIAcgAkEBaiIAQQJ0aiEL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CyAGKAIQIgAoAmAiAgRAIAYgAkHX2QAQiwQgBigCECEACyAAKAJsIgIEQCAGIAJBvNkAEIsEIAYoAhAhAAsgACgCZCICBH8gBiACQdLZABCLBCAGKAIQBSAACygCaCIABEAgBiAAQcrZABCLBAsgB0EBaiEHCyABIAYQLCEGDAELCyABIAkQGyEJDAELCyAHRQRAQQAhBQwBC0ECQQEgARCwAiAHRhshBQtBACEGQQAhBCABKAIQKAIIIgAoAlgiDQRAIABBADYCVEEBIQQLAkAgDQ0AQYyLCygCAEEBRw0AIAEQkgRFDQBBASEGIAEoAhAoAgwiAEUNACAAQQA6AFELIAEQywIgDQRAIAEoAhAhCUQAAAAAAAAAACEVRAAAAAAAAAAAIRZBACELQQAhD0EAIQ4jAEFAaiIHJAAgASgCECIAKAKQASEQIANB2ABqIgIgACkDEDcDACACIAApAyg3AxggAiAAKQMgNwMQIAIgACkDGDcDCAJAIAAoAggoAlgiDEUNAAJAIAIrAwAgAisDEGINACACKwMIIAIrAxhiDQAgAkL/////////dzcDGCACQv/////////3/wA3AwAgAkL/////////9/8ANwMIIAJC/////////3c3AxALIAwoAgghAANAIAsgDCgCAE8NASAHQgA3AzggB0IANwMwIAdCADcDKCAHQgA3AyACQAJAAkACQAJAAkACQAJAIAAoAgAOEAAAAQECAgMEBwcFBwcHBwYHCyAAIAArAxAiFyAAKwMgIhigIhM5A2ggACAAKwMIIhsgACsDGCIcoCIUOQNgIAAgFyAYoSIXOQNYIAAgGyAcoSIYOQNQIAIgAisDACAYEDIgFBAyOQMAIAIgAisDGCAXECQgExAkOQMYIAIgAisDCCAXEDIgExAyOQMIIAIgAisDECAYECQgFBAkOQMQDAYLIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAULIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAQLIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAMLIABBOBDyAzYC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aisDADkDACACIAYgBEEQaiIEaisDCCABIARqKwMIECQ5AwggAEEBayEEIAANAAsLQQAhBEQAAAAAAADwfyEJQQAhAgNAIAIgA0YEQAJAIAlEAAAAAAAA8H9jIAlEAAAAAAAA8H9kckUNACABIARBBHRqIgArAwghCSAAKwMAIQogARAXDAQLBSABIAJBBHRqIgArAwAgACsDCKIiCiAJIAkgCmQiABshCSACIAQgABshBCACQQFqIQIMAQsLQdXRAUHDtwFB7gVBkMUBEAAAC0GEkQNBw7cBQcQGQYcYEAAACyAGEBdBgIsLLQAABEAgBSAJOQMYIAUgCjkDEEHo+gYoAgBB9vAEIAVBEGoQLQsgByEADAELIAkhCgtBACEDQQEhASAIIQIDQCAAIANGDQIgAigCQCgCECgClAEiBCAKIAIrAwCiOQMAIAQgCSACKwMIojkDCCADQQFqIQMgAkHIAGohAgwACwALQQAhAQsgCBAXIAVBgAFqJAAgAQv4EQIZfwx8IwBBMGsiAyQAQZzZCigCACEFQdDYCigCACECA0AgAiAPRgRAA0AgAkEBayALTQRAQYCLCy0AAEEBSwRAIAMgEjYCJCADIAA2AiBB6PoGKAIAQZfRAyADQSBqEB0aCyADQTBqJAAgEg8LQZzZCigCACALQeAAbGohByALQQFqIg8hCwNAIAIgC00EQCAPIQsMAgUgAyAHKQMQNwMYIAMgBykDCDcDECADQZzZCigCACALQeAAbGoiCCkDEDcDCCADIAgpAwg3AwBBACECQQAhBiMAQbAEayIBJAAgASADKQMYNwOoAyABIAMpAxA3A6ADIAEgBykDMDcDmAMgASAHKQMoNwOQAyABQeADaiABQaADaiABQZADahCLBSABIAMpAxg3A4gDIAEgAykDEDcDgAMgASAHKQNANwP4AiABIAcpAzg3A/ACIAFB0ANqIAFBgANqIAFB8AJqEIsFIAEgAykDCDcD6AIgASADKQMANwPgAiABIAgpAzA3A9gCIAEgCCkDKDcD0AIgAUHAA2ogAUHgAmogAUHQAmoQiwUgASADKQMINwPIAiABIAMpAwA3A8ACIAEgCCkDQDcDuAIgASAIKQM4NwOwAiABQbADaiABQcACaiABQbACahCLBQJAIAErA+ADIAErA7ADZUUNACABKwPAAyABKwPQA2VF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NgIkIAAgACgCODYCFA8LAkACQCAAKAIUIAAoAjhHDQAgACgCECABRw0AIAAoAhhBAkcNASAAIAI2AhgPCyAAQQE6ADYgAEECNgIYIAAgA0EBajYCJAsLswEBA38jAEEQayICJAAgAiABNgIMAkACQAJ/IAAQoQEiBEUEQEEBIQEgABCZAwwBCyAAEOgCQQFrIQEgACgCBAsiAyABRgRAIAAgAUEBIAEgARC4CyAAEEAaDAELIAAQQBogBA0AIAAiASADQQFqEMoBDAELIAAoAgAhASAAIANBAWoQuAELIAEgA0ECdGoiACACQQxqENIBIAJBADYCCCAAQQRqIAJBCGoQ0gEgAkEQaiQACw0AIAAgASACQn8QtAULBwAgAEEMagsXACAAKAIIEGVHBEAgACgCCBDvCwsgAAs2AQF/IwBBEGsiAyQAIAMgAjYCDCADQQhqIANBDGoQiAIgACABEKwHIQAQhwIgA0EQaiQAIAALHAAgACgCCCABQQEQexogASgCECgCgAEgADYCDAsTACAAIAAoAgBBAWsiADYCACAACzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAIgAigCDCABQQJ0ajYCDCACKAIMIAJBEGokAAsbAQF/QQEhASAAEKEBBH8gABDoAkEBawVBAQsLMAEBfyMAQRBrIgIkACACIAAoAgA2AgwgAiACKAIMIAFqNgIMIAIoAgwgAkEQaiQAC9ABAQN/IwBBEGsiBSQAAkAgAkH3////ByABa00EQCAAEEAhBiAFQQRqIgcgAUHz////A0kEfyAFIAFBAXQ2AgwgBSABIAJqNgIEIAcgBUEMahDUAygCABDTA0EBagVB9////wcLENIDIAUoAgQhAiAFKAIIGiAEBEAgAiAGIAQQpgILIAMgBEcEQCACIARqIAQgBmogAyAEaxCmAgsgAUEKRwRAIAYQpgULIAAgAhDzASAAIAUoAggQ8gEgBUEQaiQADAELEL8BAAsgACADELgBC8YBAQR/IwBBEGsiBCQAAkAgARChAUUEQCAAIAEoAgg2AgggACABKQIANwIAIAAQmQMaDAELIAEoAgAhBSABKAIEIQIjAEEQayIDJAACQAJAAkAgAhClBQRAIAAiASACEMoBDAELIAJB9////wdLDQEgA0EIaiACENMDQQFqENIDIAMoAgwaIAAgAygCCCIB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AGutIQMCQCAAQv//////////D4MiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgQbIQAgBK0gA3wMAQsgACAChFAgA0L//wFSckUEQCACQgSGIABCPIiEQoCAgICAgIAEhCEAQv8PDAELIARB/ocBSwRAQgAhAEL/DwwBC0GA+ABBgfgAIANQIgcbIgggBGsiBkHwAEoEQEIAIQBCAAwBCyAFQRBqIAAgAiACQoCAgICAgMAAhCAHGyICQYABIAZrELEBIAUgACACIAYQmwMgBSkDCEIEhiAFKQMAIgJCPIiEIQACQCAEIAhHIAUpAxAgBSkDGIRCAFJxrSACQv//////////D4OEIgJCgYCAgICAgIAIWgRAIABCAXwhAAwBCyACQoCAgICAgICACFINACAAQgGDIAB8IQALIABCgICAgICAgAiFIAAgAEL/////////B1YiBBshACAErQshAiAFQSBqJAAgAUKAgICAgICAgIB/gyACQjSGhCAAhL8LiQIAAkAgAAR/IAFB/wBNDQECQEGUlgsoAgAoAgBFBEAgAUGAf3FBgL8DRg0DDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIPCyABQYBAcUGAwANHIAFBgLADT3FFBEAgACABQT9xQYABcjoAAiAAIAFBDHZB4AFyOgAAIAAgAUEGdkE/cUGAAXI6AAFBAw8LIAFBgIAEa0H//z9NBEAgACABQT9xQYABcjoAAyAAIAFBEnZB8AFyOgAAIAAgAUEGdkE/cUGAAXI6AAIgACABQQx2QT9xQYABcjoAAUEEDwsLQeSUC0EZNgIAQX8FQQELDwsgACABOgAAQQELwgIBBH8jAEHQAWsiBSQAIAUgAjYCzAEgBUGgAWoiAkEAQSgQMxogBSAFKALMATYCyAECQEEAIAEgBUHIAWogBUHQAGogAiADIAQQqgxBAEgEQEF/IQQMAQsgACgCTEEASCAAIAAoAgAiCEFfcTYCAAJ/AkACQCAAKAIwRQRAIABB0AA2AjAgAEEANgIcIABCADcDECAAKAIsIQYgACAFNgIsDAELIAAoAhANAQtBfyAAELkHDQEaCyAAIAEgBUHIAWogBUHQAGogBUGgAWog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IANByABsakF/NgIsIABBfzYCLCACIAVByABsaiAENgIwDwsCQCACIAhByABsaiIFKAIwIgdBAEwNACAFKAI0QQBMDQACQCACIAdByABsaigCBCIFQQBMDQAgBSABIABBEGoQtwQNACAGQX82AiggAiADQcgAbGpBfzYCLCACIARByABsaiIAQX82AiwgAiAAKAIoQcgAbGogBDYCNA8LIAIgBEHIAGxqQn83AyggAiADQcgAbGpBfzYCLCACIAYoAihByABsaiADNgIwDwsgAiAIQcgAbGoiACAENgI0IAAgAzYCMAtDAQJ8IAArAwgiAiABKwMIIgNESK+8mvLXej6gZARAQQEPCyADREivvJry13q+oCACZARAQQAPCyAAKwMAIAErAwBmC1UCAnwBfyABQQAgAUEAShshASAAtyIDIQIDQCABIARGRQRAIARBAWohBCACEMAHIQIMAQsLIAMgAqObIgKZRAAAAAAAAOBBYwRAIAKqDwtBgICAgHgLXgEBfyAAKwMIIAErAwhhBEACQCAAKwMQIAErAxBiDQAgACsDGCABKwMYYg0AIAAoAiAgASgCIEcNACAAKAIkIAEoAiRGIQILIAIPC0H5oQFB5LkBQakGQanvABAAAAvMTwMZfwp8AX4jAEHwAWsiCyQAIAAQsAJBCBAYIRhBqIsLLQAAQQFGBEAQ7AMhGQsgAEHevgEQIyECQaiSC0EANgIAAkAgAkUNACACLQAAIgpFDQADQAJAQaiSCwJ/AkACQAJAAkAgCkH/AXEiA0HtAGsOBwEFBQUFAgMAC0EIIANB4wBGDQMaIANB6QBHBEAgAw0FDAcLQRIMAwtBAQwCC0EEDAELQQILIARyIgQ2AgALIAJBAWoiAi0AACEKDAALAAsgAQRAQdbSBEEAECcLAn8jAEHQAmsiBSQAQQFBHBAYIhYgABA1Igk2AgQgFiAJQcgAEBgiATYCDET////////vfyEkRP///////+//ISAgABAaIQNE////////7/8hIkT////////vfyEjIAEhAgNAIAMEQCADKAIQIgQrAxAhHyAEKwNgISEgBCsDWCEdIAQrAxghHCAEKwNQIRsgAiACKAIAQQFyNgIAIAIgHCAbRAAAAAAAAOA/okQAAAAAAADwPxAkIhugIh45A0AgAiAcIBuhIhw5AzAgAiAfIB0gIaBE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Ai0AAEEEcUUEQANAAkAgAiIAKAIkKAIIIgJFDQAgAigCFCICRQ0AIAItAABBAXFFDQELC0EwEE0iCCAANgIoIAggACsDKDkDCCAAKAIAIQogACECA0ACQCACIgMgCkEEcjYCACACKAIkKAIAIgJFDQAgAigCGCICRQ0AIAIoAgAiCkEBcUUNAQsLIAggAysDODkDECAEIAggACsDMBCTDgsgAUEBaiEBDAELCyANIAQ2AhRBACEBQbTGCkHsyQooAgAQfyEEA0AgDSgCACABSgRAIA0oAgggAUHIAGxqIgItAABBAnFFBEADQAJAIAIiACgCJCgCDCICRQ0AIAIoAhQiAkUNACACLQAAQQFxRQ0BCwtBMBBNIgggADYCKCAIIAArAzA5AwggACgCACEKIAAhAgNAAkAgAiIDIApBAnI2AgAgAigCJCgCBCICRQ0AIAIoAhgiAkUNACACKAIAIgpBAXFFDQELCyAIIAMrA0A5AxAgBCAIIAArAygQkw4LIAFBAWohAQwBCwsgDSAENgIYQQAhAgNAIAIgF0cEQCAPIAJBA3RqIgAoAgQhCCAAKAIAIQNBACEEA0AgAyAERgRAIAJBAWohAgwDBSAIIARBOGxqIgYgDUEYQRQgBi0AABtqKAIAIAYQqAMiDigCHCIANgIoAkAgDigCICAARwRAIA4oAhghAQwBCwJAIAsgAEEBdEEBIAAbIgpB/////wNLBH9BxAAFIA4oAhggCkECdBA9IgENAUEwCxCjATYCsAEgBUG79AMgC0GwAWoQHRoQJgALIAEgDigCICIAQQJ0akEAIAogAGtBAnQQMxogDiAKNgIgIA4gATYCGCAOKAIcIQALIAEgAEECdGogBjYCACAOIABBAWo2AhwgBEEBaiEEDAELAAsACwsgDSgCFBCSDiANKAIYEJIOIA0oAhQQkQ4NACANKAIYEJEODQAgDSgCFCANEJAODQAgDSgCGCANEJAODQAgDSgCFBCODiANKAIYEI4OQQAhAkGokgstAABBBHEEQEHO8QQgBRCDARogC0KKgICAoAE3A6ABIAVBtqEEIAtBoAFqEB0aQfz4AyAFEIMBGgNAIA0oAgQgAkwEQEEAIQFE////////738hHUT////////v/yEgRP///////+//IR9E////////738hGwNAIAEgF0YEQAJAQeP4AyAFEIMBGkEAIQIgC0FAayEAA0AgAiANKAIATg0BIA0oAgggAkHIAGxqIgErAyghJCABKwMwISEgASsDOCEeIAsgASsDQCIcOQNIIAAgHjkDACALICE5AzggCyAkOQMwIAVBqYEEIAtBMGoQLSACQQFqIQIgICAcECQhICAfIB4QJCEfIB0gIRAyIR0gGyAkEDIhGwwACwALBSAYIAFBA3QiAGooAgQiBEEwQQAgBCgCAEEDcUEDRxtqKAIoKAIQKAKAASECIAAgD2oiACgAACEDAkAgACgABCIILQAAQQFGBEAgAisDQCACKwMwoEQAAAAAAADgP6IhHiAIIA0Q6AMhHAwBCyACKwM4IAIrAyigRAAAAAAAAOA/oiEcIAggDRDnAyEeCyALIB45A5gBIAsgHDkDkAEgBUHi/AMgC0GQAWoQLUEBIQJBASADIANBAU0bIQMgICAeECQhICAfIBwQJCEfIB0gHhAyIR0gGyAcEDIhGwJAA0AgAiADRgRAAkAgBEFQQQAgBCgCAEEDcUECRxtqKAIoKAIQKAKAASECIAggA0E4bGpBOGsiAC0AAEUNACACKwNAIAIrAzCgRAAAAAAAAOA/oiEeIAAgDRDoAyEcDAMLBQJAIAggAkE4bGoiAC0AAEEBRgRAIAAgDRDoAyEcDAELIAAgDRDnAyEeCyALIB45A4gBIAsgHDkDgAEgBUH8/AMgC0GAAWoQLSACQQFqIQIgICAeECQhICAfIBwQJCEfIB0gHhAyIR0gGyAcEDIhGwwBCwsgAisDOCACKwMooEQAAAAAAADgP6IhHCAAIA0Q5wMhHgsgCyAeOQN4IAsgHDkDcCAFQZCkBCALQfAAahAtIAFBAWohASAgIB4QJCEgIB8gHBAkIR8gHSAeEDIhHSAbIBwQMiEbDAELCyALICBEAAAAAAAAJECgOQNoIAsgH0QAAAAAAAAkQKA5A2AgCyAdRAAAAAAAACRAoDkDWCALIBtEAAAAAAAAJECgOQNQIAVBipwEIAtB0ABqEC0FIA0oAgwgAkHIAGxqIgArAyghHCAAKwMwIR0gACsDOCEbIAsgACsDQDkDKCALIBs5AyAgCyAdOQMYIAsgHDkDECAFQeKnBCALQRBqEC0gAkEBaiECDAELCwtBACEEQQAhAUEAIQIDQCACIBdHBEAgGCACQQN0IghqKAIEIgkgCUEwayIWIAkoAgBBA3EiAEECRhsoAigoAhAiAysAGCEfIAkoAhAiCisAQCAJIAlBMGoiDiAAQQNGGygCKCgCECIAKwAYIR4gCisAGCEcIAArABAhHSAKKwAQIRsgCCAPaiIAKAIEIRQgH6AhICAKKwA4IAMrABCgIR8gBCAAKAIAIghBA2xBAWoiA0kEQCABEBcgAyIEQRAQGCEBCyABAnwgFC0AAEEBRgRAIBwgHqAhHiAUIA0Q6AMMAQsgFCANEOcDIR4gGyAdoAsiHDkDECABIB45AxggASABKQMQNwMAIAEgASkDGDcDCEEBIQBBASAIIAhBAU0bIgZBOGwhCEECIQoCQANAIAAgBkYEQCAIIBRqQThrIgAtAAAEQCAAIA0Q6AMhHwwDCwUCQCAUIABBOGxqIhAtAABBAUYEQCAQIA0Q6AMhHAwBCyAQIA0Q5wMhHgsgASAKQQR0aiIQIBw5AwAgECAeOQMIIBAgECkDACIlNwMQIBAgJTcDICAQIBApAwgiJTcDGCAQICU3AyggAEEBaiEAIApBA2ohCgwBCwsgACANEOcDISALIAEgCkEEdGoiACAgOQMYIAAgHzkDECAAIAApAxg3AwggACAAKQMQNwMAQYCLCy0AAEECTwRAIAkgDiAJKAIAQQNxQQNGGygCKBAeIQAgCyAJIBYgCSgCAEEDcUECRhsoAigQHjYCBCALIAA2AgAgBUHO5QMgCxAdGgsgCSAJIBYgCSgCAEEDcUECRhsoAiggASADQajGChCdASACQQFqIQIMAQsLIAEQFwtBACECQaiLCy0AAEEBRgRAIBkQ3wILA0AgAiAXRwRAIA8gAkEDdGooAgQQFyACQQFqIQIMAQsLIA8QFyANKAIIKAIkEBcgDSgCDCgCJBAXIA0oAggQFyANKAIMEBcgDSgCECIAKAIQKAIcEBcgACgCEBAXIAAoAhQQFyAAEBcgDSgCFBB5GiANKAIYEHkaIA0QFyAYEBcgC0HwAWokAA8LIAAgARAbIQEMAAsAC18BBH9BpJILKAIAIgBBACAAQQBKG0EBaiEBQfSRCygCACECQQEhAAJAA0AgACABRg0BIAIgAEECdGooAgAoAgQgAEYgAEEBaiEADQALQZSXA0HpvQFBOEHb9AAQAAALC6oBAQJ8IAACfyABKwMAIgKZRAAAAAAAAOBBYwRAIAKqDAELQYCAgIB4CzYCACAAAn8gASsDCCIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAs2AgQgAAJ/IAIgASsDEKAiAplEAAAAAAAA4EFjBEAgAqoMAQtBgICAgHgLNgIIIAACfyADIAErAxigIgKZRAAAAAAAAOBBYwRAIAKqDAELQYCAgIB4CzYCDAtDAQJ/IwBBEGsiACQAQQFBiAoQRiIBRQRAIABBiAo2AgBB6PoGKAIAQandAyAAEB0aECYACyABEKMOIABBEGokACABC1oBAX8gAEUgAUVyRQRAAkAgACgCACABKAIISg0AIAEoAgAgACgCCEoNACAAKAIEIAEoAgxKDQAgASgCBCAAKAIMTCECCyACDwtBoTRBx7wBQe0AQbjcABAAAAvHAQEGfyAABEAgACgCACEEAkAgACgCCCICIAAoAgwiBUcEQCAAKAIEIQMMAQsgACAEIAIgAkEBdEEBIAIbIgVBBBBgIgQ2AgAgACgCDCIGIAAoAggiAiAAKAIEIgNqSQRAIANBAnQhByAEIAUgBiADayIGayIDQQJ0aiAEIAdqIAZBAnQQjwEaIAAgAzYCBAsgACAFNgIMCyAEIAIgA2ogBXBBAnRqIAE2AgAgACACQQFqNgIIDwtBx88BQcX9AEE1Qdj4ABAAAAufAwIGfAN/IARBAXEhDAJAIAJBAkYEQCAAKwMIIgYgACsDGCAGoSIFoCEHIAYgBaEhBiAAKwMAIgUgACsDECAFoSIIoCEKIAUgCKEhCAwBCyAAKwMAIgohCCAAKwMIIgchBgNAIAIgC0YNASAAIAtBBHRqIg0rAwgiBSAHIAUgB2QbIQcgDSsDACIJIAogCSAKZBshCiAFIAYgBSAGYxshBiAJIAggCCAJZBshCCALQQFqIQsMAAsACyAEQQJxIQAgBiAHIAahRAAAAAAAAOA/oqAhBSAIIAogCKFEAAAAAAAA4D+ioCEJAn8gDARAIAEgCTkDACABIAUgBZogABs5AwggASAJIAihIAUgBqEQTyIDRAAAAAAAANA/ojkDEEEYDAELIAcgBaEhByAKIAmhIQggAxBEIQogAxBXIQMCfCAABEAgByADoiIDIAWgIQYgBSADoQwBCyAFIAahmiADoiAFoSEGIAcgA6IgBaELIQcgASAGOQMYIAEgBzkDCCABIAkgCCAKoiIDoTkDACADIAmgIQNBEAsgAWogAzkDAAv/AwEFfyMAQTBrIgMkACABQdiRCygCAEcEQEHYkQsgATYCAEHckQtBADoAAAsgA0IANwMgIANCADcDGANAIAMgAEEBaiIENgIsIAAtAAAiAgRAAkACQAJAAkACfyACQcABTwRAQQEgAkHgAUkNARpBAiACQfABSQ0BGkEDIAJB+AFJDQEaQdyRCy0AAEUEQCADIAEQHjYCEEGcxAQgA0EQahAnQdyRC0EBOgAACyACIANBGGoQqA4hAkF/DAELIAJBJkYNAUEACyEFQQAhACAFQQAgBUEAShshBgNAIAAgBkYNAyAELQAAQcABcUGAAUcNAiADQRhqIALAEJ4BIABBAWohACAELQAAIQIgBEEBaiEEDAALAAsgA0EsahCnDiICRQRAQSYhAgwDCyACQf4ATQ0CIAJB/g9NBEAgA0EYaiACQQZ2QUByEJ4BIAJBP3FBgH9yIQIMAwsgA0EYaiIAIAJBDHZBYHIQngEgACACQQZ2QT9xQYB/chCeASACQT9xQYB/ciECDAILIAMgBDYCLEHckQstAABFBEAgAyABEB42AgQgAyAFQQFqNgIAQa/DBCADECdB3JELQQE6AAALIAJB/wFxIANBGGoQqA4hAgwBCyADIAQ2AiwLIANBGGogAsAQngEgAygCLCEADAELCyADQRhqELIDIANBMGokAAu1AQEEfyMAQSBrIgQkACAEIAI2AhQgBCABNgIQIAQgAyADQTBqIgYgAygCAEEDcSIFQQNGGygCKDYCGCAEIAMgA0EwayIHIAVBAkYbKAIoNgIcIAAgBEEIaiIFQQEgACgCABEDABogBCABNgIUIAQgAjYCECAEIAMgByADKAIAQQNxIgFBAkYbKAIoNgIYIAQgAyAGIAFBA0YbKAIoNgIcIAAgBUEBIAAoAgARAwAaIARBIGokAAszAQF/AkAgBA0AQQAhBCABEIwCIgVBAksNACAAIAUgAkHl9AQQHyEECyABIAQgAxBoIAQLTAAgASAAQdCNCygCAEQAAAAAAAAsQEQAAAAAAADwPxBTOQMAIAEgAEHUjQsoAgBBtekAEFE2AgggASAAQdiNCygCAEHt9AAQUTYCDAs8AQJ/A0ACQCABIANBAnRqKAIAIgRFDQAgAARAIAAgBBBDRQ0BCyADQQFqIQMMAQsLIAIgA0ECdGooAgALMwAgACABKAIQKAKUASIBKwMARAAAAAAAAFJAojkDACAAIAErAwhEAAAAAAAAUkCiOQMIC2UBAn8CQCAARQ0AIAAsAAAiA0UNAAJAIABB+pMBECpFDQAgAEGM3gAQKkUNAEEBIQIgAEHfigEQKkUNACAAQYouECpFDQAgASECIANBMGtBCUsNACAAEIoCQQBHIQILIAIPCyABC5QGAgl/AXwjAEEgayIFJAAgBUEANgIcAkAgAigCBCIGBEAgBigCACIDRQ0BIAYoAghFBEACQAJAQayRCygCACIERQ0AIAQgAxAqDQBBsJELKAIAIQQMAQsgBBAXQayRCyADEGEiAzYCAEGwkQsgA0HwuQpBI0EkQcACEOEDIgQ2AgALIAYgBDYCCAtBACEEQYCLCy0AAARAIAVBHGpBACAGKAIAELcIGyEEC0EAIQMCQCABKAKMASIBRQ0AIAEoAgAiAUUNACACIAQgAREAACEDCwJAAkAgA0UEQCACKAIEIgEoAhghAyABKwMQIQwgAkIANwMgIAJCADcDECACQgA3AwggAiAMRDMzMzMzM/M/ojkDKCACIAxEmpmZmZmZuT+iOQMYIAIgDAJ8IAEoAgAhASACKAIAIQkgA0EBcSEHIANBAnFBAXYhAyMAQSBrIggkAAJAAkACQCABBEAgCUUNASABEL4OIgpBkAZBkAIgAxtBkARBECADGyAHG2ohC0EAIQcDQCAJLQAAIgFFDQMCQCABwEEATgRAIAEhAwwBC0EgIQNBtJELLQAADQBBtJELQQE6AAAgCCABNgIQQYD7AyAIQRBqECcLAkAgCyADQQF0ai4BACIBQX9GBEBBACEBQbWRCy0AAA0BQbWRC0EBOgAAIAggAzYCAEG/0AQgCBAnDAELIAFBAEgNBQsgCUEBaiEJIAEgB2ohBwwACwALQaiYAUHstgFBwAZBjhsQAAALQawXQey2AUHBBkGOGxAAAAsgCisDCCEMIAhBIGokACAHuCAMowwBC0H3kQNB7LYBQboGQYLyABAAAAuiOQMgIARFDQIgBEGlxAE2AgAMAQsgBEUNAQsgBigCACEBQej6BigCACEDIAUoAhwiBARAIAUgBDYCFCAFIAE2AhAgA0Gs8gMgBUEQahAdGgwBCyAFIAE2AgAgA0GN7QQgBRAdGgsgACACKQMgNwMAIAAgAikDKDcDCCAFQSBqJAAPC0HOHUGMugFB1QBB1YgBEAAAC0GymAFBjLoBQdgAQdWIARAAAAvHFwIIfw18IwBBgP0AayIHJAACQAJAAkACQAJAAkAgACABQQJ0aigCACIJKAIQIgYtACwNACAGLQBUDQAgBi0AMSEIIAYtAFkhCgwBCyAGLQAxIghBCHENASAGLQBZIgpBCHENASAIQQVxRQ0AIAggCkYNAgtBAUF/IAlBMEEAIAkoAgBBA3FBA0cbaigCKCIMKAIQIgkrAxgiDiAGKwMYoCIRIA4gBisDQKAiEmYiCxsgCSsDECITIAYrAzigIRcgEyAGKwMQoCEVIAkrA2AhDiAIIAoQ5QUhCCAERAAAAAAAAOA/oiACuKNEAAAAAAAAAEAQJCEPIBEgEqBEAAAAAAAA4D+iIRhEAAAAAAAAAAAhBCAOIBMgDqAiECAXoUQAAAAAAAAIQKIQMiEUIA4gECAVoUQAAAAAAAAIQKIQMiEQQX9BASALGyAIQcEARyAIQSBHcSARIBJichu3IA+iIRZBACEIA0AgAiAIRg0EIAAgAUECdGooAgAhBiAHIBMgDiADoCIOoCIPOQNAIAcgGDkDOCAHIA85AzAgByAPOQMgIAcgEjkDaCAHIBIgFiAEoCIEoSIPOQNYIAcgFzkDYCAHIBcgFCADoCIURAAAAAAAAAhAo6A5A1AgByAPOQNIIAcgETkDCCAHIBEgBKAiDzkDKCAHIA85AxggByAVOQMAIAcgFSAQIAOgIhBEAAAAAAAACECjoDkDEAJAIAYoAhAoAmBFDQAgBkEwQQAgBigCAEEDcUEDRxtqKAIoECshCiAGKAIQKAJgIgkgCUEgQRggCigCECgCdEEBcRtqKwMAIg9EAAAAAAAA4D+iIA4gDCgCECIKKwMQoKA5AzggCisDGCEZIAlBAToAUSAJIBk5A0AgAyAPY0UNACAOIA8gA6GgIQ4LIAFBAWohASAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCAHQQcgBRCdASAIQQFqIQgMAAsACyAIQQJxDQEgBi0AWSIKQQJxDQFBAUF/IAlBMEEAIAkoAgBBA3FBA0cbaigCKCIMKAIQIgkrAxgiDiAGKwMYoCIRIA4gBisDQKAiEmYiCxsgCSsDECITIAYrAzigIRcgEyAGKwMQoCEVIAkrA1ghDiAIIAoQ5QUhCCAERAAAAAAAAOA/oiACuKNEAAAAAAAAAEAQJCEPIBEgEqBEAAAAAAAA4D+iIRhEAAAAAAAAAAAhBCAOIBcgDqAgE6FEAAAAAAAACECiEDIhFCAOIBUgDqAgE6FEAAAAAAAACECiEDIhEEF/QQEgCxsgCEHDAEcgCEEMR3EgESASYnIbtyAPoiEWQQAhCANAIAIgCEYNAyAAIAFBAnRqKAIAIQYgByATIA4gA6AiDqEiDzkDQCAHIBg5AzggByAPOQMwIAcgDzkDICAHIBI5A2ggByASIBYgBKAiBKEiDzkDWCAHIBc5A2AgByAXIBQgA6AiFEQAAAAAAAAIQKOhOQNQIAcgDzkDSCAHIBE5AwggByARIASgIg85AyggByAPOQMYIAcgFTkDACAHIBUgECADoCIQRAAAAAAAAAhAo6E5AxACQCAGKAIQKAJgRQ0AIAZBMEEAIAYoAgBBA3FBA0cbaigCKBArIQogBigCECgCYCIJIAwoAhAiCysDECAOoSAJQSBBGCAKKAIQKAJ0QQFxG2orAwAiD0QAAAAAAADgv6KgOQM4IAsrAxghGSAJQQE6AFEgCSAZOQNAIAMgD2NFDQAgDiAPIAOhoCEOCyABQQFqIQEgBiAGQVBBACAGKAIAQQNxQQJHG2ooAiggB0EHIAUQnQEgCEEBaiEIDAALAAsgCEEEcQ0AIAhBAXEEQCAJQTBBACAJKAIAQQNxQQNHG2ooAigiDCgCECIJKwMYIRQgCSsDUCAGKwNAIRMgBisDGCEVIAggChDlBSEIIAkrAxAiDiAGKwMQoCIRIA4gBisDOKAiEqBEAAAAAAAA4D+iIRhEAAAAAAAAAAAhDiADRAAAAAAAAOA/oiACuKNEAAAAAAAAAEAQJCEPRAAAAAAAAOA/oiIDIAMgFCAToCIToCAUoUQAAAAAAAAIQKIQMiEXIAMgAyAUIBWgIhWgIBShRAAAAAAAAAhAohAyIRAgD0EAQQFBfyARIBJmGyIGayAGIAhBwwBGG7eiIRZBACEIA0AgAiAIRg0DIAAgAUECdGooAgAhBiAHIBQgAyAEoCIDoSIPOQNIIAcgDzkDOCAHIBg5AzAgByAPOQMoIAcgEzkDaCAHIBMgFyAEoCIXRAAAAAAAAAhAo6E5A1ggByASOQNgIAcgEiAWIA6gIg6hIg85A1AgByAPOQNAIAcgETkDACAHIBEgDqAiDzkDICAHIBU5AwggByAVIBAgBKAiEEQAAAAAAAAIQKOhOQMYIAcgDzkDEAJAIAYoAhAoAmBFDQAgBkEwQQAgBigCAEEDcUEDRxtqKAIoECshCiAGKAIQKAJgIgkgDCgCECILKwMYIAOhIAlBGEEgIAooAhAoAnRBAXEbaisDACIPRAAAAAAAAOC/oqA5A0AgCysDECEZIAlBAToAUSAJIBk5AzggBCAPY0UNACADIA8gBKGgIQMLIAFBAWohASAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCAHQQcgBRCdASAIQQFqIQgMAAsAC0GUlwNB97gBQbsJQf+cARAAAAsjAEGA/QBrIggkAEQAAAAAAADwP0QAAAAAAADwvyAAIAFBAnRqKAIAIglBMEEAIAkoAgBBA3FBA0cbaigCKCIMKAIQIgYrAxAiDiAJKAIQIgkrAxCgIhQgDiAJKwM4oCISZhshESAGKwNQRAAAAAAAAOA/oiETIAYrAxgiFyAJKwNAoCEVIBcgCSsDGKAhDyAJLQAxIAktAFkQ5QUhCSADRAAAAAAAAOA/oiACuKNEAAAAAAAAAEAQJCEDAkACQAJAAkACQAJAAkACQAJAAkACQCAJQSVrDg8FAQoKAgoKCgoKBQMKCgUACwJAIAlByQBrDg0GCQkKCgoKCgoKBwgJAAsCQCAJQQ5rDgIFAAQLIBEgAyAGKwNgIBIgDqGhoKIhEAwJCyARIAMgBisDWCAOIBKhoaCiIRAMCAsgESADIAYrA2AgFCAOoaGgoiEQDAcLIBEgAyAGKwNgIBQgDqGhoKIhEAwGCyAJQTlrQQJPDQULIBEgBisDWCAOIBShoSAGKwNgIBIgDqGhoEQAAAAAAAAIQKOiIRAMBAsgESADIAYrA1ggDiAUoaGgoiEQDAMLIBEgBisDWCAOIBShoaIhEAwCCyARIAMgBisDWCAOIBShoSAGKwNgIBIgDqGhoEQAAAAAAADgP6KgoiEQDAELIBEgAyADoCAGKwNYIA4gFKGhIAYrA2AgEiAOoaGgRAAAAAAAAOA/oqCiIRALIBQgEqBEAAAAAAAA4D+iIRkgEyAXIBOgIhggFaFEAAAAAAAACECiEDIhDiATIBggD6FEAAAAAAAACECiEDIhGEEAIQkDQCACIAlHBEAgACABQQJ0aigCACEGIAggFyATIASgIhOgIhY5A0ggCCAWOQM4IAggGTkDMCAIIBY5AyggCCAVOQNoIAggFSAOIASgIg5EAAAAAAAACECjoDkDWCAIIBI5A2AgCCASIBEgA6IgEKAiEKEiFjkDUCAIIBY5A0AgCCAUOQMAIAggFCAQoCIWOQMgIAggDzkDCCAIIA8gGCAEoCIYRAAAAAAAAAhAo6A5AxggCCAWOQMQAkAgBigCECgCYEUNACAGQTBBACAGKAIAQQNxQQNHG2ooAigQKyELIAYoAhAoAmAiCiAKQRhBICALKAIQKAJ0QQFxG2orAwAiFkQAAAAAAADgP6IgEyAMKAIQIgsrAxigoDkDQCALKwMQIRogCkEBOgBRIAogGjkDOCAEIBZjRQ0AIBMgFiAEoaAhEwsgAUEBaiEBIAYgBkFQQQAgBigCAEEDcUECRxtqKAIoIAhBByAFEJ0BIAlBAWohCQwBCwsgCEGA/QBqJAALIAdBgP0AaiQAC58EARF/IAAoAhAiBCgC7AEhByAEKALoASECA0AgAiAHSgRAAkADQCAEKALoASECQQAhCwNAIAQoAuwBIQMCQANAIAIgA0oNASAEKALEASIFIAJBBnQiDGoiBy0AMEUEQCACQQFqIQIMAQsLQQAhDSAHQQA6ADAgAkEBaiEHQdDOCigCACEQIAJBAWtBBnQhDkEAIQoDQCAFIAdBBnQiD2ohESAFIAxqIhIoAgBBAWshBQJAA0AgBSAKTA0BIBIoAgQiAyAKQQJ0aigCACIIKAIQKAL4ASADIApBAWoiCkECdGooAgAiAygCECgC+AFODQYgACAIIAMQxw4NAAJ/IAJBAEwEQEEAIQZBAAwBCyAIIAMQjw4hBiADIAgQjw4LIQkgESgCAEEASgRAIAggAxCMDiAGaiEGIAMgCBCMDiAJaiEJCyABRSAGIAlHIAZBAExyciAGIAlMcQ0ACyAIIAMQkAggECgCECgCxAEiAyAMakEAOgAxIAAoAhAiBCgCxAEiBSAMakEBOgAwIAIgBCgC6AFKBEAgAyAOakEAOgAxIAUgDmpBAToAMAsgBiAJayANaiENIAQoAuwBIAJMDQEgAyAPakEAOgAxIAUgD2pBAToAMAwBCwsgCyANaiELIAchAgwBCwsgC0EASg0ACw8LBSAEKALEASACQQZ0akEBOgAwIAJBAWohAgwBCwtBl5kDQZm4AUGIBUG32gAQAAAL+gEBBH8jAEEQayIEJAADQCAAIgMoAhAiAigCeCIABEAgAi0AcA0BCwsgAigCCCIARQRAQQFBKBAYIQAgAygCECAANgIICwJAIAAoAgQiAkHVqtUqSQRAIAAoAgAgAkEwbCICQTBqIgUQPSIARQ0BIAAgAmpBAEEwEDMaIAMoAhAoAggiAyAANgIAIAMgAygCBCIDQQFqNgIEIAFBEBAYIQIgACADQTBsaiIAIAE2AgQgACACNgIAIABBCGpBAEEoEDMaIARBEGokACAADwtBkbQDQd79AEHNAEGTswEQAAALIAQgBTYCAEHo+gYoAgBBqd0DIAQQHRoQJgAL0AECBX8BfCMAQUBqIgUkACABKAIQIgYrA2AhCQNAIARBBEZFBEAgBSAEQQR0IgdqIgggAiAHaiIHKwMAIAYrAxChOQMAIAggBysDCCAGKwMYoTkDCCAEQQFqIQQMAQsLIAAgBigCCCgCBCgCDCAFIAMQ6AUgASgCECEAQQAhBANAIARBBEZFBEAgAiAEQQR0IgFqIgMgASAFaiIBKwMAIAArAxCgOQMAIAMgASsDCCAAKwMYoDkDCCAEQQFqIQQMAQsLIAAgCTkDYCAFQUBrJAALcQEEfyAAKAIQIgIoAvgBIQMgAiABKAIQKAL4ASIENgL4ASACKAL0AUEGdCICQdDOCigCACIFKAIQKALEAWooAgQgBEECdGogADYCACABKAIQIAM2AvgBIAUoAhAoAsQBIAJqKAIEIANBAnRqIAE2AgALCgAgAEHyDRDIDgtHAQF/A0AgASAAKAIwTkUEQCAAKAI4IAFBAnRqKAIAEJIIIAFBAWohAQwBCwsgACgCPBAXIAAoAjQQugEgACgCOBAXIAAQFwtYAQF/QaCRCygCAAR/A0BBpJELKAIAIAFNBEBBAA8LQaCRCygCACABQQJ0aigCACgCACAAEEdFBEAgAUEBaiEBDAELC0GgkQsoAgAgAUECdGooAgAFQQALC70KARF/IwBBEGsiDyQAQcgAEE0hC0GokQsoAgAhBCAAKAIQKAJ4IQxBASEFA0ACQAJAAkACQCAELQAAIgpB3ABHBEAgCg0BDAQLIARBAWohByAELQABIgpB+wBrQQNJDQEgByEEIApB3ABGDQELAkACQAJAAkAgCkH7AGsOAwIBAAELIAlBAWshCQwCCyAKQfwARyAJcg0BIAVBAWohBUEAIQkMAwsgCUEBaiEJCyAJQQBIDQIMAQsgByEECyAEQQFqIQQMAQsLIAVBBBAYIQcgCyABOgBAIAsgBzYCOCADQQFqIREgAUEBcyESIANBAWshE0GokQsoAgAhBCACQQFzIRRBACEHIAMhAUEAIQJBACEFQQAhCQJAA0BBASEKAkACQAJAAkACQAJAAkACQAJAA0AgCkEBcUUNBiAELQAAIgZBAWtB/wFxQR5NBEBBASEKQaiRCyAEQQFqIgQ2AgAMAQsCQAJAAkAgBkH7AGsOAwECAgALAkACQAJAIAZBPGsOAwEJAgALIAZFDQMgBkHcAEcNCCAELQABIgZB+wBrQQNJDQcgBkE8aw4DBwYHBQsgBUEGcQ0MIAwtAFINByAFQRJyIQUgAyIHIRAMCwsgDC0AUg0GIAVBEHFFDQsCQCAHIBFNDQAgB0EBayICIBBGDQAgAiAHIAItAABBIEYbIQcLIAdBADoAACADEKQBIgJFDQkgBUFvcSEFQaiRCygCACEEDAoLQaiRCyAEQQFqNgIAIAUNCiAELQABRQ0KIAAgEkEAIAMQlAghBiALKAI4IAlBAnRqIAY2AgBBASEKIAlBAWohCUGokQsoAgAhBEEEIQUgBg0BDAoLIAZFIBRxIAVBEHFyDQkgBUEEcUUEQEHIABBNIQ0gCygCOCAJQQJ0aiANNgIAIAlBAWohCQsgAgRAIA0gAjYCPAsgBUEFcUUEQCADIAhqQSA6AAAgBUEBciEFIAhBAWohCAsgBUEBcQRAIAMgCGohBAJAIAhBAkgNACABIARBAWsiAkYNACACIAQgAi0AAEEgRhshBAtBACEIIARBADoAACAAIANBAkEAIAwtAFIbIAwrAxAgDCgCBCAMKAIIEP8CIQEgDUEBOgBAIA0gATYCNCADIQELQQAhAkEAIQpBqJELKAIAIgQtAAAiBkUNAAsgBkH9AEYNBEEAIQUMBwsgBkUNAiAGQSBHDQAgDC0AUkEBRg0AQQEhDgwBCyADIAhqQdwAOgAAIAVBCXIhBSAIQQFqIQgLQaiRCyAEQQFqIgQ2AgALIAVBBHEEQCAELQAAQSBHDQULIAVBGHFFBEAgBSAFQQlyIAQtAABBIEYbIQULAkAgBUEIcQRAIAMgCGohCgJAAkAgDiAELQAAIgZBIEdyDQAgCkEBay0AAEEgRw0AIAwtAFJBAUcNAQsgCiAGOgAAIAhBAWohCAsgCCATaiABIA4bIQEMAQsgBUEQcUUNAAJAIA4gBC0AACIGQSBHckUEQCADIAdGDQEgB0EBay0AAEEgRg0BCyAHIAY6AAAgB0EBaiEHQaiRCygCACEECyAHQQFrIBAgDhshEAtBqJELIARBAWoiBDYCAANAIAQtAAAiBkHAAXFBgAFHDQZBqJELIARBAWoiBDYCACADIAhqIAY6AAAgCEEBaiEIDAALAAtBqJELIARBAWo2AgALIAsgCTYCMAwECyAPIAMQN0EBajYCAEHo+gYoAgBBqd0DIA8QHRoQJgALQaiRCyAEQQFqIgQ2AgAMAQsLIAsQkgggAhAXQQAhCwsgD0EQaiQAIAsLrgQCBn8IfEQAAAAAAAAoQCERIAFBAnRBBGpBEBAYIQUDQCABIARGBEACQCACKAIAQQx2Qf8AcUEBayEIQQAhBEEAIQIDQCACIQYgASAERg0BIBEgACAEQQFqIgdBACABIAdLG0EEdGoiCSsDACAAIARBBHRqIgIrAwAiDKEiDyAJKwMIIAIrAwgiDaEiEBBPoyEKAkACQAJAIAgOBQECAgAAAgsgCkQAAAAAAAAIQKMhCgwBCyAKRAAAAAAAAOA/oiEKCyAMIQ4gDSELIAMEQCAKRAAAAAAAAOA/oiIOIBCiIA2gIQsgDiAPoiAMoCEOCyAFIAZBBHRqIgIgCzkDCCACIA45AwAgAkQAAAAAAADwPyAKoSILIBCiIA2gOQMoIAIgCyAPoiAMoDkDICACIAogEKIgDaA5AxggAiAKIA+iIAygOQMQIAZBA2ohAiAHIQQgA0UNACAFIAJBBHRqIgIgCkQAAAAAAADgv6JEAAAAAAAA8D+gIgsgEKIgDaA5AwggAiALIA+iIAygOQMAIAZBBGohAgwACwALBSARIAAgBEEBaiIHQQAgASAHSxtBBHRqIgYrAwAgACAEQQR0aiIEKwMAoSAGKwMIIAQrAwihEE9EAAAAAAAACECjEDIhESAHIQQMAQsLIAUgBkEEdGoiACAFKQMANwMAIAAgBSkDCDcDCCAAIAUpAxA3AxAgACAFKQMYNwMYIAAgBSkDIDcDICAAIAUpAyg3AyggBQt0AQJ/IAAEQANAIAAoAgQgAUsEQCAAKAIAIAFBAnRqKAIAIgIEQCACQQA2AgQgAigCABAXCyACEBcgAUEBaiEBDAELCyAAQQA2AgQgACgCABAXIABBADYCCCAAQgA3AgAPC0GDzwFBnroBQf8FQfqeARAAAAsIAEEBQQwQGAuBAQEGfyAAKAIQIgMoAuwBIQQgAygC6AEhAQNAIAEgBEpFBEBBACEAIAMoAsQBIAFBBnRqIgUoAgAiAkEAIAJBAEobIQIDQCAAIAJGRQRAIAUoAgQgAEECdGooAgAoAhAiBiAGKAL4Abc5AxAgAEEBaiEADAELCyABQQFqIQEMAQsLC/MCAQN/QQEhBCAAIgIhAwJAAkACQCABDgICAQALAkADQCACIgEtAAAiA0UNASABQQFqIQIgA0H/AEkNACABQQJqIQJBACEEIANB/AFxQcABRg0ACyAAIQNBjJELLQAADQJB1vkDQQAQJ0GMkQtBAToAAAwCCyAAIQMgBA0BCyAAIQEjAEEQayICJAAgAkIANwMIIAJCADcDAANAIAEtAAAiAwRAIANB/wBJBH8gAUEBagUgAS0AAUE/cSADQQZ0ciEDIAFBAmoLIQEgAiADwBCeAQwBCwsgAhCyAyACQRBqJAAhAwtBKCEBIAMhAgJAA0ACQCABwBDtBQJAIAItAAAiAUEoa0ECSSABQdwARnJFBEAgAQ0BQSkQ7QUgACADRwRAIAMQFwtBABDtBRDCBEUNAkGLkQtBADoAAAwEC0HcABDtBSACLQAAIQELIAJBAWohAgwBCwtBgJELQQA2AgALEMIEIQBB/JALQfyQCygCACAAGwupAgEDfyMAQaAIayIFJAACQAJAAkAgAUUNAEEBIQQDQCAEQQFxRQ0CIAEgA0ECdGooAgAiBEUNASADQQFqIQMgBC0AAEEARyEEDAALAAsDQCACKAIAIgQEQCAAIAQQGRogAEHi9AQQGRogAkEEaiECDAELCyABRQ0BC0EAIQQDQCABIARBAnRqKAIAIgJFDQECQCACLQAARQ0AIAIQ4QUiA0UEQCAFIAI2AgBBsu4DIAUQJwwBCyADQcU7EKAEIgIEQANAIAVBIGoiA0EAQYAIEDMaIAAgAyADQQFBgAggAhC7BSIDEJMCGiADQf8HSw0ACyAAQeL0BBAZGiACEN8DDAELIAUgAzYCEEGW7gMgBUEQahAnCyAEQQFqIQQMAAsACyAFQaAIaiQACzYBAX8jAEEgayIDJAAgAyACOQMYIAMgATkDECAAIANBCGpBBCAAKAIAEQMAIANBIGokAEEARwvsAQEHf0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEJwIIAFBAWohAQwBCwsCQCACKAKMAkUNACACKALoASEBA0AgASACKALsAUoNASAAIAFBAnQiBCACKAKMAmooAgAiAkF/ELkOIQMgACACQQEQuQ4hBSAAKAIQKAKMAiAEaiADNgIAIAAQXiEEIAFBBnQiBiAAKAIQIgIoAsQBaiIHIAQoAhAoAsQBIAZqKAIEIAMoAhAoAvgBIgNBAnRqNgIEIAcgBSgCECgC+AEgA2tBAWo2AgAgAUEBaiEBDAALAAsLGAEBfyAAIAEQqgEiARDiAyAAIAEQiQEaC0wBAXwgACABQeHAAyACKwMARAAAAAAAAFJAoxCuAyAAIAFB4cADQciQCysDACACKwMIIgOhIANB2IsLLQAAG0QAAAAAAABSQKMQrgML1gIBCn9BwJALKAIAIQVBvJALKAIAIQYDQCAAKAIQIgMoAsABIARBAnRqKAIAIgEEQCABQTBBACABKAIAQQNxIgdBA0cbaigCKCIIKAIQIgkoArACIQICQCABKAIQIgooAqQBQQBIBEAgAiAFTCACIAZOcQ0BIAFBUEEAIAdBAkcbaigCKCgCECgC9AEgCSgC9AEgCigCrAFqayIDQbiQCygCAE4EQEG0kAsoAgANAgtBuJALIAM2AgBBtJALIAE2AgAMAQsgAiADKAKwAk4NACAIEJ8ICyAEQQFqIQQMAQUCQEG4kAsoAgAhBEEAIQEDQCADKAKgAiABQQJ0aigCACICRSAEQQBMcg0BIAJBUEEAIAIoAgBBA3FBAkcbaigCKCICKAIQKAKwAiADKAKwAkgEQCACEJ8IQbiQCygCACEEIAAoAhAhAwsgAUEBaiEBDAALAAsLCwvWAgEKf0HAkAsoAgAhBUG8kAsoAgAhBgNAIAAoAhAiAygCyAEgBEECdGooAgAiAQRAIAFBUEEAIAEoAgBBA3EiB0ECRxtqKAIoIggoAhAiCSgCsAIhAgJAIAEoAhAiCigCpAFBAEgEQCACIAVMIAIgBk5xDQEgCSgC9AEgAUEwQQAgB0EDRxtqKAIoKAIQKAL0ASAKKAKsAWprIgNBuJALKAIATgRAQbSQCygCAA0CC0G4kAsgAzYCAEG0kAsgATYCAAwBCyACIAMoArACTg0AIAgQoAgLIARBAWohBAwBBQJAQbiQCygCACEEQQAhAQNAIAMoApgCIAFBAnRqKAIAIgJFIARBAExyDQEgAkEwQQAgAigCAEEDcUEDRxtqKAIoIgIoAhAoArACIAMoArACSARAIAIQoAhBuJALKAIAIQQgACgCECEDCyABQQFqIQEMAAsACwsLC8gOAhh/AnwjAEEgayILJABB/////wchAyABQQJOBEAgAhDDBCEDIAAQmAgLQQMgASABQQNMGyEWQej6BigCACEXIAMhCQNAAkAgASAWRg0AQbiLCygCACEEAkAgAUECRwRAIAAQXiAARgRAIAAgASACENsOCyABRQRAIAAQ1Q4LQQQgBCAEQQROGyEEIAAQ0Q4gAhDDBCIDIAlKDQEgABCYCCADIQkMAQsgAyAJSgRAIAAQzQ4LIAkhAwtBACEPIARBACAEQQBKGyEYQQAhEANAAkACQCAPIBhGDQBBgIsLLQAABEAgCyAJNgIQIAsgAzYCDCALIBA2AgggCyAPNgIEIAsgATYCACAXQeezBCALEB0aCyADRSAQQdjOCigCAE5yDQAgACgCECEDAn8gD0EBcSIZRQRAIANB7AFqIQRBASETIAMoAugBIgMgA0HQzgooAgAoAhAoAugBTGoMAQsgA0HoAWohBEF/IRMgAygC7AEiAyADQdDOCigCACgCECgC7AFOawshEiAQQQFqIRAgD0ECcSEUIAQoAgAgE2ohGgNAIBIgGkYNAkEAIQpB3M4KKAIAIgVBBGshCCAAKAIQKALEASIDIBJBBnQiFWooAgQhDANAIAMgFWoiESgCACIHIApMBEBBACEKIAdBACAHQQBKGyENQQAhBgNAAkACfwJAIAYgDUcEQCAMIAZBAnRqKAIAKAIQIgUoAswBDQMgBSgCxAENAyAFAnwgBSgC3AEEQCAFKALYASIOKAIAIgNBMEEAIAMoAgBBA3FBA0cbaigCKCEDQQEhBANAIA4gBEECdGooAgAiCARAIAhBMEEAIAgoAgBBA3FBA0cbaigCKCIIIAMgCCgCECgC+AEgAygCECgC+AFKGyEDIARBAWohBAwBCwsgAygCECsDgAIiG0QAAAAAAAAAAGZFDQMgG0QAAAAAAADwP6AMAQsgBSgC1AFFDQIgBSgC0AEiDigCACIDQVBBACADKAIAQQNxQQJHG2ooAighA0EBIQQDQCAOIARBAnRqKAIAIggEQCAIQVBBACAIKAIAQQNxQQJHG2ooAigiCCADIAgoAhAoAvgBIAMoAhAoAvgBSBshAyAEQQFqIQQMAQsLIAMoAhArA4ACIhtEAAAAAAAAAABkRQ0CIBtEAAAAAAAA8L+gCzkDgAJBAAwCC0EAIQhBAEF8IApBAXEbQQAgFBshDSARKAIEIgYgB0ECdGohBANAAkAgB0EASgRAIAdBAWshByAGIQMDQCADIARPDQIDQCADIARPDQMgAygCACIRKAIQKwOAAiIbRAAAAAAAAAAAYwRAIANBBGohAwwBBUEAIQUDQCADQQRqIgMgBE8NBSADKAIAIQwgBSIKQQFxBEBBASEFIAwoAhAoAugBDQELIAAgESAMEMcODQMgDCgCECIFKwOAAiIcRAAAAAAAAAAAZkUEQCAFKALoAUEARyAKciEFDAELCyAbIBxkIBRFIBsgHGZxckUNAiARIAwQkAggCEEBaiEIDAILAAsACwALAkAgCEUNAEHQzgooAgAoAhAoAsQBIBVqIgNBADoAMSASQQBMDQAgA0EPa0EAOgAACyASIBNqIRIMCAsgBCANaiEEDAALAAtBAQsgCnIhCgsgBkEBaiEGDAALAAUgDCAKQQJ0aigCACIRKAIQIQcCQCAZRQRAIAcoAsABIQ1BACEDQQAhBgNAIA0gBkECdGooAgAiBEUNAiAEKAIQIg4uAZoBQQBKBEAgBSADQQJ0aiAOLQAwIARBMEEAIAQoAgBBA3FBA0cbaigCKCgCECgC+AFBCHRyNgIAIANBAWohAwsgBkEBaiEGDAALAAsgBygCyAEhDUEAIQNBACEGA0AgDSAGQQJ0aigCACIERQ0BIAQoAhAiDi4BmgFBAEoEQCAFIANBAnRqIA4tAFggBEFQQQAgBCgCAEEDcUECRxtqKAIoKAIQKAL4AUEIdHI2AgAgA0EBaiEDCyAGQQFqIQYMAAsAC0QAAAAAAADwvyEbAkACQAJAAkAgAw4DAwABAgsgBSgCALchGwwCCyAFKAIEIAUoAgBqQQJttyEbDAELIAUgA0EEQQgQlAEgA0EBdiEGAnwgA0EBcQRAIAUgBkECdGooAgC3DAELIAUgBkECdGoiB0EEaygCACIGIAUoAgBrIgQgCCADQQJ0aigCACAHKAIAIgNrIgdGBEAgAyAGakECbbcMAQsgBrcgB7eiIAO3IAS3oqAgBCAHarejCyEbIBEoAhAhBwsgByAbOQOAAiAKQQFqIQogACgCECgCxAEhAwwBCwALAAsACyABQQFqIQEgAw0DQQAhAwwCCyAAIBRBAEcQjQggCSACEMMEIgNOBEAgABCYCEEAIBAgA7cgCbdE16NwPQrX7z+iYxshECADIQkLIA9BAWohDwwACwALCyADIAlKBEAgABDNDgsgCUEASgRAIABBABCNCCACEMMEIQkLIAtBIGokACAJC+wBAQR/AkACQCAAKAIQIgMoAqgCIAFHDQAgAygCrAIgAkcNACADKAKwAiECDAELIAMgAjYCrAIgAyABNgKoAgNAIAMoAqACIAZBAnRqKAIAIgQEQCABIARHBEAgBEFQQQAgBCgCAEEDcUECRxtqKAIoIAQgAhCiCCECIAAoAhAhAwsgBkEBaiEGDAEFA0ACQCADKAKYAiAFQQJ0aigCACIERQ0AIAEgBEcEQCAEQTBBACAEKAIAQQNxQQNHG2ooAiggBCACEKIIIQIgACgCECEDCyAFQQFqIQUMAQsLCwsgAyACNgKwAgsgAkEBagufAwEGfwNAAkAgACgCECIFKAKgAiACQQJ0aigCACIERQRAA0AgBSgCmAIgA0ECdGooAgAiAkUNAiABIAJHBEAgAkEwQQAgAigCAEEDcUEDRxtqKAIoIAIQowggACgCECEFCyADQQFqIQMMAAsACyABIARHBEAgBEFQQQAgBCgCAEEDcUECRxtqKAIoIAQQowgLIAJBAWohAgwBCwsCQAJAIAEEQEEBIQIgASABQTBBACABKAIAQQNxIgBBA0cbaigCKCIFKAIQIgQoAqgCRwRAIAFBUEEAIABBAkcbaigCKCIFKAIQIQRBfyECCyAEKALIASEGQQAhAEEAIQMDQAJAIAYgA0ECdGooAgAiB0UEQCAEKALAASEEQQAhAwNAIAQgA0ECdGooAgAiBkUNAiAGIAUgAhDxDiIGQQBIIAAgACAGaiIASkcNBiADQQFqIQMMAAsACyAHIAUgAhDxDiIHQQBIIAAgACAHaiIASkcNAyADQQFqIQMMAQsLIAEoAhAgADYCoAELDwtB+f8DQQAQMRAmAAtB+f8DQQAQMRAmAAvGAQEEfyAAKAIQIgQgAjYCrAIgBCABNgKoAgNAIAQoAqACIAZBAnRqKAIAIgMEQCABIANHBEAgA0FQQQAgAygCAEEDcUECRxtqKAIoIAMgAhCkCCECIAAoAhAhBAsgBkEBaiEGDAEFA0ACQCAEKAKYAiAFQQJ0aigCACIDRQ0AIAEgA0cEQCADQTBBACADKAIAQQNxQQNHG2ooAiggAyACEKQIIQIgACgCECEECyAFQQFqIQUMAQsLCwsgBCACNgKwAiACQQFqC44EAQR/AkACQAJ/QbalBCAAKAIQIgIoAqQBQQBODQAaQbCQCygCACIBQQBIDQIgAiABNgKkAUGwkAsgAUEBajYCAEGskAsoAgAgAUECdGogADYCACAAIABBMGoiAiAAKAIAQQNxIgFBA0YbKAIoIgQoAhAoArABRQRAQaiQC0GokAsoAgAiAUEBajYCAEGkkAsoAgAgAUECdGogBDYCACAAKAIAQQNxIQELIAAgAiAAIABBMGsiBCABQQJGGygCKCIDKAIQKAKwAQR/IAEFQaiQC0GokAsoAgAiAUEBajYCAEGkkAsoAgAgAUECdGogAzYCACAAKAIAQQNxC0EDRhsoAigiAigCECIBQQE2ArABIAEgASgCpAIiA0EBajYCpAIgASgCoAIgA0ECdGogADYCAEEAIQEgAigCECIDKAKgAiADKAKkAkECdGpBADYCAEHe0QMgAigCECICKALIASACKAKkAkECdGpBBGsoAgBFDQAaIAAgBCAAKAIAQQNxQQJGGygCKCIEKAIQIgJBATYCsAEgAiACKAKcAiIDQQFqNgKcAiACKAKYAiADQQJ0aiAANgIAIAQoAhAiACgCmAIgACgCnAJBAnRqQQA2AgAgBCgCECIAKALAASAAKAKcAkECdGpBBGsoAgANAUGB0gMLQQAQMUF/IQELIAEPC0HIxwFBxbgBQTtB4JwBEAAAC6ICAQN/IwBBIGsiAiQAAkBB9IsLKAIAIgFB6IwLKAIAckUNACAAIAFBABB6IgEEQCABQeoXEGkEQCAAQQEQ/g0MAgsgAUH55AAQaQRAIABBABD+DQwCCyABLQAARQ0BIAIgATYCEEGH1gQgAkEQahAxDAELIAAQciEBA0AgAQRAIAEQzgFFBEAgARCmCAsgARBxIQEMAQsLQeiMCygCAEUNACAAEBohAQNAIAFFDQECQCABQeiMCygCAEEAEHoiA0UNACADQeoXEGkEQCAAIAFBARD4BwwBCyADQfnkABBpBEAgACABQQAQ+AcMAQsgAy0AAEUNACACIAEQHjYCBCACIAM2AgBBitwEIAIQMQsgACABEBshAQwACwALIAJBIGokAAu4AQEEfyAAKAIQIgQgBCgC9AEgAmo2AvQBA0AgBCgCmAIgA0ECdGooAgAiBQRAIAEgBUEwQQAgBSgCAEEDcUEDRxtqKAIoIgVHBEAgBSAAIAIQpwggACgCECEECyADQQFqIQMMAQUDQAJAIAQoAqACIAZBAnRqKAIAIgNFDQAgASADQVBBACADKAIAQQNxQQJHG2ooAigiA0cEQCADIAAgAhCnCCAAKAIQIQQLIAZBAWohBgwBCwsLCwvyBAEGfyAAEMUEIQcCQCACBEAgAkFQQQAgAigCAEEDcSIDQQJHG2ooAigoAhAoAvQBIAIoAhAoAqwBIAJBMEEAIANBA0cbaigCKCgCECgC9AFqRg0BCwNAIAAoAhAiBCgCyAEgBUECdGooAgAiAwRAIAMoAgBBA3EhBAJAIAMoAhAoAqQBQQBOBEAgA0FQQQAgBEECRxtqKAIoIgMgAUYNASADIAAgAhCoCCECDAELIAMgA0EwayIIIARBAkYbKAIoEMUEIAdGDQAgAgRAIAMgCCADKAIAQQNxIgRBAkYbKAIoKAIQKAL0ASADQTBBACAEQQNHG2ooAigoAhAoAvQBIAMoAhAoAqwBamsgAkFQQQAgAigCAEEDcSIEQQJHG2ooAigoAhAoAvQBIAJBMEEAIARBA0cbaigCKCgCECgC9AEgAigCECgCrAFqa04NAQsgAyECCyAFQQFqIQUMAQUDQCAEKALAASAGQQJ0aigCACIDRQ0DIAMoAgBBA3EhBQJAIAMoAhAoAqQBQQBOBEAgA0EwQQAgBUEDRxtqKAIoIgMgAUYNASADIAAgAhCoCCECDAELIAMgA0EwaiIEIAVBA0YbKAIoEMUEIAdGDQAgAgRAIANBUEEAIAMoAgBBA3EiBUECRxtqKAIoKAIQKAL0ASADIAQgBUEDRhsoAigoAhAoAvQBIAMoAhAoAqwBamsgAkFQQQAgAigCAEEDcSIFQQJHG2ooAigoAhAoAvQBIAJBMEEAIAVBA0cbaigCKCgCECgC9AEgAigCECgCrAFqa04NAQsgAyECCyAGQQFqIQYgACgCECEEDAALAAsACwALIAILzgEBBX8gACgCBCEFIAAoAgAhAyABIQADQCABQQF0IgJBAmohBCAFIAJBAXIiAksEQCACIAEgAyACQQJ0aigCACgCBCADIAFBAnRqKAIAKAIESBshAAsgBCAFSQRAIAQgACADIARBAnRqKAIAKAIEIAMgAEECdGooAgAoAgRIGyEACyAAIAFHBEAgAyABQQJ0aiIEKAIAIQIgBCADIABBAnRqIgYoAgA2AgAgBiACNgIAIAQoAgAgATYCCCACIAA2AgggACEBIAAgBUkNAQsLC/0CAQl/IAAoAhAiBSABNgKoAkEBIQMDQAJAAkACQAJAIAUoAsABIARBAnRqKAIAIgJFBEADQCAFKALIASAGQQJ0aigCACICRQ0DAkAgAigCECIEKAKkAUEATg0AIAIgAkEwayIHIAIoAgBBA3EiCEECRhsoAigoAhAiCSgCqAINACAJKAL0ASAEKAKsASACQTBBACAIQQNHG2ooAigoAhAoAvQBakcNACACEKUIDQMgAiAHIAIoAgBBA3FBAkYbKAIoIAEQqgggA2ohAyAAKAIQIQULIAZBAWohBgwACwALIAIoAhAiBygCpAFBAE4NAyACIAJBMGoiCCACKAIAQQNxIglBA0YbKAIoKAIQIgooAqgCDQMgAkFQQQAgCUECRxtqKAIoKAIQKAL0ASAHKAKsASAKKAL0AWpHDQMgAhClCEUNAgtBfyEDCyADDwsgAiAIIAIoAgBBA3FBA0YbKAIoIAEQqgggA2ohAyAAKAIQIQULIARBAWohBAwACwALnwICA38CfCMAQRBrIgUkACABIAEoAkggASgCTCIEQQFqIARBAmpBOBBgIgQ2AkggBCABKAJMIgZBOGxqIgQgAzoAMCAEIAI2AgACfAJAIAJFDQAgAi0AAEUNAEHwjwsgASgCBDYCAEGAkAsgASsDEDkDACAEIAAoAogBIgJB8I8LQQEgAigCABEDADYCBCAFIAAgBBCLCCAFKwMIIQcgASgCTCEGIAUrAwAMAQsgBAJ/IAErAxBEMzMzMzMz8z+iIgiZRAAAAAAAAOBBYwRAIAiqDAELQYCAgIB4C7ciBzkDKEQAAAAAAAAAAAshCCABIAZBAWo2AkwgASAHIAErAyCgOQMgIAEgASsDGCIHIAggByAIZBs5AxggBUEQaiQAC6YBAQN/IAAoAgAhAgJAAkACQAJAIAAtAARBAWsOAwACAQILIAIoAlQhAwJAIAIoAmRBf0YEQCADEHkaDAELIAIoAlwQFyACKAJgEBcDQCADKAIAIgQEQCAEQdgAakEAEKwIIAQQ7wUgBBAXIANBBGohAwwBCwsgAigCVBAXCyACEO8FIAIQFwwCCyACKAIgEBcgAhAXDAELIAIQhA8LIAEEQCAAEBcLCxkAQX8gACgCACIAIAEoAgAiAUogACABSBsLuAIBBX8gASgCECIEQQE2AgggBCgCFCgCECgC+AEhBCADIAIQNUECdGogBDYCACACIAFBARB7GiAAIAEQKSEEA0AgBARAIAUgBEFQQQAgBCgCAEEDcSIGQQJHG2ooAigiBygCECIIKAIUKAIQKAL4ASAEQTBBACAGQQNHG2ooAigoAhAoAhQoAhAoAvgBSmohBSAIKAIIRQRAIAAgByACIAMQrgggBWohBQsgACAEECwhBAwBCwsgACABELECIQQDQCAEBEAgBSAEQVBBACAEKAIAQQNxIgFBAkcbaigCKCgCECgCFCgCECgC+AEgBEEwQQAgAUEDRxtqKAIoIgEoAhAiBigCFCgCECgC+AFKaiEFIAYoAghFBEAgACABIAIgAxCuCCAFaiEFCyAAIAQQ+AIhBAwBCwsgBQvxBQEJfyMAQUBqIgIkACACQQA2AhhBxM4KQQFBxM4KKAIAQQFqIgUgBUEBTRs2AgAgAkIANwMQIAAoAhBBADYC3AEgABAaIQUgAUEATCEJAkACQANAIAUEQAJAAkACQCAJDQAgBSgCECIBKALoASIERQ0AIAQoAhAoAowCIAEoAvQBQQJ0aigCACEBDAELIAUiARCtASABRw0BCyABKAIQKAKwAUHEzgooAgBGDQAgACgCEEEANgLAAUHIzgpBADYCACACQRBqIAEQlQ8DQAJAIAIoAhQiAUUNACACKAIQIAFBAnRqQQRrKAIAIQQgAiABQQFrNgIUIARFDQBBxM4KKAIAIgMgBCgCECIBKAKwAUYNASABIAM2ArABQcjOCigCACIDIAAgAxsoAhBBuAFBwAEgAxtqIAQ2AgAgASADNgK8AUHIzgogBDYCACABQQA2ArgBIAIgBCgCECIBKQPIATcDICACIAEpA8ABNwMoIAIgASkD0AE3AzAgAiABKQPYATcDOEEDIQMDQCADQQBIDQICQCACQSBqIANBA3RqIgEoAgAiBkUNACABKAIEIgFFDQAgBiABQQFrIgdBAnRqIQYDQCAHQX9GDQEgBCAGKAIAIghBUEEAIAgoAgBBA3EiCkECRxtqKAIoIgFGBEAgCEEwQQAgCkEDRxtqKAIoIQELAkAgASgCECgCsAFBxM4KKAIARg0AIAEQrQEgAUcNACACQRBqIAEQlQ8LIAZBBGshBiAHQQFrIQcMAAsACyADQQFrIQMMAAsACwsgACgCECIBIAEoAtwBIgRBAWoiAzYC3AEgBEH/////A08NAyABKALYASADQQJ0IgMQPSIBRQ0EIAAoAhAiAyABNgLYASABIARBAnRqIAMoAsABNgIACyAAIAUQGyEFDAELCyACQQA2AhQgAigCEBAXIAJBQGskAA8LQZG0A0He/QBBzQBBk7MBEAAACyACIAM2AgBB6PoGKAIAQandAyACEB0aECYAC4gBAQF/IAAEQAJAIAAoAhAoAngiAUUNACABKAIQIgEoArABIABHDQAgAUEANgKwAQsgAEEwQQAgACgCAEEDcUEDRxtqKAIoKAIQQdABaiAAENAEIABBUEEAIAAoAgBBA3FBAkcbaigCKCgCEEHYAWogABDQBA8LQcfQAUGXuQFB4gFBz5wBEAAAC10BBH9BwI4LKAIAIgAEfwJAIAAoAqgCIgFFDQAgASAAKAKwAiICSQ0AIAAoApwBIgMgAiABIABBoANqIAMoAjARCAAgACAAKAKoAjYCsAILIAAoAqADQQFqBUEACwtJAQF/IwBBEGsiASQAAkAgAEHI4QAQIyIARQ0AIAEgAUEIajYCACAAQeeEASABEElBAEwNAEGwiwsgASsDCDkDAAsgAUEQaiQAC4EBAQF/AkAgAUGD7gAQRw0AIAEhAwNAIAMsAAAhAiADQQFqIQMgAkE6a0F1Sw0ACyACRQRAIAEQigIPC0F/IQIgACgCrAJFDQBBASEDA38gAyAAKAKwAkoNASABIAAoAqwCIANBAnRqKAIAEEcEfyADBSADQQFqIQMMAQsLIQILIAILFAAgACABQfClAUG9CEGCuAEQhQIL9C0DCn8KfAF+IwBBgARrIgMkAEGAiwstAAAEQEG4kQsQqAELAkACQCABQewlQQBBARAuBEAgASgCECgCCA0BC0GV8QRBABAxQX8hAkGAiwstAABFDQEgARAeIQAgAxCKATkDCCADIAA2AgBB6PoGKAIAQaDTBCADEC0MAQsgARAaIQcCQANAIAcEQCAHKAIQIgIgAisDECIMIAIrA1ihOQMwIAIgDCACKwNgoDkDQCACIAIrAxgiEiACKwNQRAAAAAAAAOA/oiIMoTkDOCACIBIgDKA5A0ggASAHECkhBgNAIAYEQCAGKAIQKAIIIggEQCAIKAIERQ0FIANBsANqIAgoAgAiBEEwECAaIANB4AJqIgIgBEEwECAaIANBkANqIAIQow8gAysDqAMhECADKwOgAyEOIAMrA5gDIQ0gAysDkAMhD0EAIQIDQCAIKAIEIAJLBEAgAgRAIANBsANqIAgoAgAgAkEwbGoiBUEwECAaIANBsAJqIgQgBUEwECAaIANBkANqIAQQow8gECADKwOoAyIMIAwgEGMbIRAgDiADKwOgAyIMIAwgDmMbIQ4gDSADKwOYAyIMIAwgDWQbIQ0gDyADKwOQAyIMIAwgD2QbIQ8LIAMoArgDBEAgAyADKQPIAzcDqAIgAyADKQPAAzcDoAIgAyADKAKwAyIEKQMINwOYAiADIAQpAwA3A5ACIANBkANqIANBoAJqIANBkAJqELYDIBAgAysDqAMiDCAMIBBjGyEQIA4gAysDoAMiDCAMIA5jGyEOIA0gAysDmAMiDCAMIA1kGyENIA8gAysDkAMiDCAMIA9kGyEPCyADKAK8AwRAIAMgAykD2AM3A4gCIAMgAykD0AM3A4ACIAMgAygCsAMgAygCtANBBHRqQRBrIgQpAwg3A/gBIAMgBCkDADcD8AEgA0GQA2ogA0GAAmogA0HwAWoQtgMgECADKwOoAyIMIAwgEGMbIRAgDiADKwOgAyIMIAwgDmMbIQ4gDSADKwOYAyIMIAwgDWQbIQ0gDyADKwOQAyIMIAwgD2QbIQ8LIAJBAWohAgwBCwsgCCAQOQMgIAggDjkDGCAIIA05AxAgCCAPOQMICyABIAYQLCEGDAELCyABIAcQGyEHDAELCyAAQQA6AJ0CIAAgATYCoAECQCABQavkABAjIgJFDQAgAyADQZADajYC5AEgAyADQbADajYC4AEgAkHThAEgA0HgAWoQSSICQQBMDQAgACADKwOwA0QAAAAAAABSQKIiDDkDwAEgACAMOQPIASACQQFHBEAgACADKwOQA0QAAAAAAABSQKI5A8gBCyAAQQE6AJ0CCyAAQQA6AJwCAkAgAUHusAEQIyICRQ0AIAMgA0GQA2o2AtQBIAMgA0GwA2o2AtABIAJB04QBIANB0AFqEEkiAkEATA0AIAAgAysDsANEAAAAAAAAUkCiIgw5A9ABIAAgDDkD2AEgAkEBRwRAIAAgAysDkANEAAAAAAAAUkCiOQPYAQsgAEEBOgCcAgsgAEEAOgCeAiAAIAEoAhAoAggiAikDMDcD4AEgACACKQM4NwPoAQJAIAEoAhAoAggiAisDMET8qfHSTWJQP2RFDQAgAisDOET8qfHSTWJQP2RFDQAgAEEBOgCeAgsgAi0AUSECIABB0tEBNgK8ASAAQdoAQQAgAhs2ApgCAkAgAUGQNxAjIgJFDQAgAi0AAEUNACAAIAI2ArwBCyAAIAEoAhAiAikDEDcD+AEgACACKQMoNwOQAiAAIAIpAyA3A4gCIAAgAikDGDcDgAJB+IsLIAFBAEHuL0EAEB82AgBB/IsLIAFBAEG+9wBBABAfNgIAIABBAEHAjAsoAgBBtekAEFE2ArgCQQBBvIwLKAIARAAAAAAAACxARAAAAAAAAPA/EFMhDCAAQdyWCjYCyAIgACAMOQPAAiAAIAEQHjYCtAEgACgCqAIQFyAAQQA2AqgCIAAoAqwCEBcgAEEANgKsAiAAKAK0AhAXIABBADYCtAICQAJAIAFBrCkQIyIFBEAgACABQdPaABAjIgJB38ADIAIbNgKgAiAAIAFBxtoAECMiAkG+mAMgAhsiBDYCpAIgACgCoAIiAiAEENkDIAJqIgJBACACLQAAGyICBEAgAyACLAAANgLAAUGF1wQgA0HAAWoQJyAAQeX0BDYCpAILIAAgBRBhNgKoAiADQQA2ArgDIANCADcDsAMgA0GwA2pBABC0CCAAKAKoAiECA0AgAiAAKAKgAhCdBCICBEAgA0GwA2ogAhC0CEEAIQIMAQsLIAMoArQDIgJBAWsiBEEASA0CAn8gAkEBTQRAIAMoArADDAELIANBsANqQQAQtAggA0EANgK4AyADKAKwAyECIANCADcDsAMgACACNgKsAkEACyADQQA2ArQDEBcgACAENgKwAiABQdgjECMiBUUNASAFLQAARQ0BQQAhBiAAKAKwAkECakEEED8hB0EBIQIDQCAAKAKwAiIEIAJOBEAgACACIAQgBRCiDwRAIAcgBkEBaiIGQQJ0aiACNgIACyACQQFqIQIMAQsLAkAgBgRAIAcgBjYCACAHIAZBAnRqIARBAWo2AgQMAQsgAyAFNgKwAUHD2AQgA0GwAWoQJyAHEBdBACEHCyAAIAc2ArQCDAELIABBATYCsAILQQEQgwNB8IEFKAIAIQsgACAAKAKYASICNgKcAQNAAkACQAJAIAIEQAJ/IAAoAjwiBEUEQEEAIQZBAAwBCyAEKAIMIQYgBCgCCAshBCACIAY2AhggAiAENgIUIAIgADYCDCAAKAKwASEEIAIgCzYC2AQgAkGwlQo2AtQEIAIgBDYCHCABKAIQKAIIRQRAQd+iBEEAEDFBABCDA0F/IQJBgIsLLQAARQ0IIAEQHiEAIAMQigE5AyggAyAANgIgQej6BigCAEGg0wQgA0EgahAtDAgLIAIgAiACKAI0ENwEIgQ2AjhBASEGAkAgBEEVRg0AIARB5wdGBEAgAyACKAI0NgKgAUHRowQgA0GgAWoQMUEAEIMDQX8hAkGAiwstAABFDQkgARAeIQAgAxCKATkDmAEgAyAANgKQAUHo+gYoAgBBoNMEIANBkAFqEC0MCQsCQCABQY85ECMiBEUNACAEQaIYEENFDQEgBEGXGBBDDQBBECEGDAELQQAhBgsgAiACKAKYASAGcjYCmAECQCAAKAK4ASIEBEAgBC0AmAFBIHEEQCACKAI0IAQoAjQQQ0UNAgsgBBD6AyAAQQA2AhwgAEEANgK4AQtB2IoLQQA2AgAMAgtB2IoLKAIAIgRFDQEgBCACNgIIIAIgBCgCJDYCJAwCC0EAIQJBABCDA0GAiwstAABFDQYgARAeIQAgAxCKATkDGCADIAA2AhBB6PoGKAIAQaDTBCADQRBqEC0MBgsgAigCPCEGQQEhByMAQUBqIgkkACACKAIAIQUCfwJAAkACQCACKAJMIgRFDQAgBCgCACIERQ0AIAIgBBEBAAwBCyACKAIoDQAgAigCJA0AAkAgBS0ADUUEQCACKAIgIQUMAQtB+IcLIAIoAhQiBEHGFiAEGxDfBCACKAIYIgQEQCAJIARBAWo2AjBB+IcLQc6xASAJQTBqEN4EC0H4hwtBLhCUAiACKAI0IgoQNyAKaiIEIQUDQCAFLQAAQTpGBEAgCSAFQQFqNgIkIAkgBUF/cyAEajYCIEH4hwtBnpcDIAlBIGoQ3gQgBSEECyAFIApHIAVBAWshBQ0ACyAJIAo2AhQgCSAEIAprNgIQQfiHC0GxMiAJQRBqEN4EIAJB+IcLEN0EIgU2AiALIAUEQCACIAVBpBYQoAQiBDYCJCAEDQEgAigCDCgCECEFIAIoAiAhBCAJQeSUCygCABCjATYCBCAJIAQ2AgBB+PQDIAkgBREEAAwCCyACQfD6BigCADYCJAtBACACLQCZAUEEcUUNARpB5tEEQQAgAigCDCgCEBEEAAtBAQshBCAJQUBrJAACQCAEDQBBACEHIAZFDQAgBigCACIERQ0AIAIgBBEBAAsgBw0BIAAgAjYCuAELIAJBoJYKNgJoIAJBADYCCAJAIAIoAgAiBS0AnAJBAUYEQCACIAUpA9ABNwPwASACIAUpA9gBNwP4AQwBCyACKAI4QawCRgRAIAIgAigCRCsDCCIMOQP4ASACIAw5A/ABDAELIAJCgICAgICAgIjAADcD8AEgAkKAgICAgICAiMAANwP4AQsCQCAFLQCdAkEBRgRAIAIgBSkDwAE3A6ADIAIgBSkDyAE3A6gDDAELIAIoAjgiBEEeS0EBIAR0QZiAgIMEcUVyRQRAIAJCgICAgICAgKHAADcDoAMgAkKAgICAgICAocAANwOoAwwBCyAEQawCRgRAIAIgAigCVCIEKQMINwOgAyACIAQpAxA3A6gDDAELIAJCADcDoAMgAkIANwOoAwsCQCABKAIQKAIIKwMYIgxEAAAAAAAAAABiBEAgAiAMOQOwAyACIAw5A7gDDAELAkAgBSgCuAEiBEUNACAELQCAAUEBRw0AIAIgBCkDcDcDsAMgAiAEKQN4NwO4AwwBCyACKAI4QawCRgRAIAIgAigCVCIEKQMoNwOwAyACIAQpAzA3A7gDDAELIAJCgICAgICAgKzAADcDsAMgAkKAgICAgICArMAANwO4AwsgBSsDgAIhFSAFKwOIAiEUIAUrA5ACIQ8gAiAFKwP4ASIRIAIrA/ABIhKhIhM5A9ABIAIgDyACKwP4ASIMoCINOQPoASACIBQgEqAiEjkD4AEgAiAVIAyhIgw5A9gBIANCgICAgICAgPg/NwP4AyANIAyhIQ4gEiAToSENRAAAAAAAAPA/IRACQCABKAIQKAIIIgQrA0AiEkT8qfHSTWJQP2RFDQAgBCsDSCIMRPyp8dJNYlA/ZEUNACASIBIgDSANRPyp8dJNYlA/ZRsiDWMgDCAMIA4gDkT8qfHSTWJQP2UbIg5jckUEQCANIBJjRQ0BIAQtAFBBAXFFIAwgDmRFcg0BCyADIBIgDaMgDCAOoxAyIhA5A/gDCyADIA8gFaBEAAAAAAAA4D+iIg85A+gDIAMgFCARoEQAAAAAAADgP6IiETkD8AMgAiAFKAKYAjYC6AIgAyAQIA6iIg45A5ADIAMgECANoiINOQOwAyABQZgaECMiBARAIAMgBBA3QQFqEPIDIgU2AowBIAMgA0H4A2o2AogBIAMgA0GQA2o2AoQBIAMgA0GwA2o2AoABAkAgBEH0owMgA0GAAWoQSUEERgRAIAEoAkggBUEAEHMiBEUNASAEKAIQIgQrAxghDyAEKwMQIREMAQsgAyAFNgJsIAMgA0HnA2o2AnAgAyADQbADajYCYCADIANBkANqNgJkIAMgA0H4A2o2AmggBEGKvgEgA0HgAGoQSUEERgRAIAEoAkggBUEAEHMiBEUNASAEKAIQIgQrAxghDyAEKwMQIREMAQsgAyADQegDajYCUCADIANB8ANqNgJMIAMgA0H4A2o2AkggAyADQZADajYCRCADIANBsANqNgJAIARBx4QBIANBQGsQSRogAysD6AMhDyADKwPwAyERCyAFEBcgAysD+AMhECADKwOQAyEOIAMrA7ADIQ0LIAIgDjkD+AIgAiANOQPwAiACIBA5A+ACIAIgDzkD2AIgAiAROQPQAiANIA4gAigC6AIiBBshDyAOIA0gBBshECACKwOoAyENIAIrA6ADIQ4CQAJAIAIoAgAiBS0AngJBAUcNACACLQCYAUEgcUUNACAFKwPoASANIA2goSERAkAgAiAFKwPgASAOIA6goSITRC1DHOviNho/YwR/QQEFIAICfyAQIBOjIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CyIGNgKkASAQIAa3IBOioUQtQxzr4jYaP2RFDQEgBkEBagsiBjYCpAELAkAgAiARRC1DHOviNho/YwR/QQEFIAICfyAPIBGjIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CyIHNgKoASAPIAe3IBGioUQtQxzr4jYaP2RFDQEgB0EBagsiBzYCqAELIAIgBiAHbDYCzAEgDyAREDIhDyAQIBMQMiEQDAELAnwgAigCREUEQEQAAAAAAAAAACERRAAAAAAAAAAADAELIAIoAlQiBCsDGCAEKwMgIA0gDaChRAAAAAAAAAAAECQhESAOIA6goUQAAAAAAAAAABAkCyACQQE2AswBIAJCgYCAgBA3AqQBIBEgDxAkIREgEBAkIRMLIAJCADcCrAEgAkIANwK0ASACQgA3ArwBIAICfyAOIA6gIBOgIAIrA7ADokQAAAAAAABSQKMiDEQAAAAAAADgP0QAAAAAAADgvyAMRAAAAAAAAAAAZhugIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CzYCwAMgAgJ/IA0gDaAgEaAgAisDuAOiRAAAAAAAAFJAoyIMRAAAAAAAAOA/RAAAAAAAAOC/IAxEAAAAAAAAAABmG6AiDJlEAAAAAAAA4EFjBEAgDKoMAQtBgICAgHgLNgLEAyADQbADaiIEIAIgBSgCvAEsAAAQoQ8gAiADKQOwAzcCtAEgBCACIAUoArwBLAABEKEPIAIgAykDsAMiFjcCvAECQCACKAK0ASAWp2oiBCAEQR91IgRzIARrQQFGBEAgAigCuAEgFkIgiKdqIgQgBEEfdSIEcyAEa0EBRg0BCyACQgE3ArwBIAJCgICAgBA3ArQBIAMgBSgCvAE2AjBBo6oEIANBMGoQJwtEAAAAAAAAAAAhEgJ8RAAAAAAAAAAAIAEoAhAoAggtAFJBAUcNABogEyAQoUQAAAAAAADgP6JEAAAAAAAAAAAgECATYxshEkQAAAAAAAAAACAPIBFjRQ0AGiARIA+hRAAAAAAAAOA/ogshDAJAIAIoAugCIgZFBEAgDiETIA0hDiAQIREgDyEQIAwhDSASIQwMAQsgDSETIA8hESASIQ0LIAIgDiANoCIUOQOIAyACIBMgDKAiDjkDgAMgAiAQIBSgIg85A5gDIAIgESAOoCITOQOQAyACIBAgAisD4AIiDKM5A8gCIAIgESAMozkDwAIgAgJ/IA4gAisDsAMiDaJEAAAAAAAAUkCjIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAsiBzYCyAMgAgJ/IBQgAisDuAMiEqJEAAAAAAAAUkCjIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAsiCDYCzAMgAgJ/IA8gEqJEAAAAAAAAUkCjIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAsiBTYC1AMgAgJ/IBMgDaJEAAAAAAAAUkCjIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAsiBDYC0AMgBgRAIAIgEzkDmAMgAiAPOQOQAyACIA45A4gDIAIgFDkDgAMgAiAFrSAErUIghoQ3A9ADIAIgCK0gB61CIIaENwPIAwsgAi0AmAFBgAFxRQRAIAIgARCqDwtB2IoLIAI2AgALAkAgACgCnAEiBCgCBCICRQ0AIAIoAjQNACACIAQoAjQ2AjQLIAAgAjYCnAEMAAsAC0GYyAFBgrgBQd8IQaYpEAAAC0GIkANBgrgBQekdQeK+ARAAAAsgA0GABGokACACC7MBAQJ/IwBBkAFrIgIkAAJAIAAQqw8EQCABKAIQQQFGBEAgAUEANgIQIAEgACkDADcDACABIAApAwg3AwgLIAIgACkAODcDWCACIAApADA3A1BBGBDyAyIAQQA2AhAgACACKQNQNwMAIAAgAikDWDcDCCABIAA2AhAMAQsgAiAARAAAAAAAAOA/IAJB0ABqIgAgAkEQaiIDEKwBIAMgACABELYIELYIIQALIAJBkAFqJAAgAAtaAQN/QbyICygCACIBRQRAQbyIC0HElgpB7MkKKAIAEH8iATYCAAsgASAAQQQgASgCABEDACIBRQRAQbyICygCACICKAIAIQMgAiAAEGFBASADEQMAGgsgAUULRwEEfyABQRAQPyEDA38gASACRgR/IAMFIAMgAkEEdGoiBCAAIAJBGGxqIgUrAwA5AwAgBCAFKwMIOQMIIAJBAWohAgwBCwsLVgECfyABKAIQIgIgACgCECIDKALAASIANgK4ASAABEAgACgCECABNgK8AQsgAyABNgLAASACQQA2ArwBIAAgAUYEQEGqnANBl7kBQbwBQbifARAAAAsLmwEBBX8jAEEQayIDJAAgAkHdhQEQIyEEIAJBg9oAECMhBSACQbohECMhBiADQgA3AwggA0IANwMAIAEEfyABKAIABUEACyEBAkAgBARAIAQtAAANAQsgAkH4zQEQIyEECyAAIAIgAxD8BSEHIAAgASAEIAUEfyAFIAIQyAQFQQALIgEgBiAHIAIQwQgaIAEQFyADEGYgA0EQaiQAC+wBAgV8AX9BASACIAJBAU0bIQkgASsDCCIFIQYgASsDACIHIQhBASECA0AgAiAJRkUEQAJAIAggASsDGCIEZARAIAQhCAwBCyAEIAdkRQ0AIAQhBwsCQCAGIAErAyAiBGQEQCAEIQYMAQsgBCAFZEUNACAEIQULIAFBGGohASACQQFqIQIMAQsLIAAgBzkDECAAIAg5AwAgACAFOQMYIAAgBjkDCCADIAMrAxAgCBAkIAcQJDkDECADIAMrAxggBhAkIAUQJDkDGCADIAMrAwAgCBAyIAcQMjkDACADIAMrAwggBhAyIAUQMjkDCAvHAwIDfwR8IwBB0ABrIgQkACAAKAIQKwOgASEIAkAgAkEAIARBxABqEPsFIgZBAWtBAkkNAEEwIQIgBEEwaiEFAkAgAwRAIAQgASkDIDcDACAEIAEpAyg3AwggBCABKQM4NwMYIAQgASkDMDcDECAEIAEpAwg3AyggBCABKQMANwMgQRAhAgwBCyAEIAEpAwA3AwAgBCABKQMINwMIIAQgASkDGDcDGCAEIAEpAxA3AxAgBCABKQMoNwMoIAQgASkDIDcDIAsgBSABIAJqIgEpAwA3AwAgBSABKQMINwMIIAQrAxAhCSAEIAQrAwAiBzkDECAEIAc5AyAgCEQAAAAAAADgP2QEQCAARAAAAAAAAOA/EIACCyAJIAehIQogBCgCTCEBA0AgASgCACICRQRAIAhEAAAAAAAA4D9kBEAgACAIEIACCyAEQcQAahDMBAwCCyABKwMIRAAAAAAAAAAAZUUEQCAAIAIQWCAJIQcgASgCGARAIAogASsDCKIgBCsDAKAhBwsgBCAHOQMQIAQgBzkDICAAIARBBEEBEEEgBCAEKwMQIgc5AzAgBCAHOQMACyABQRhqIQEMAAsACyAEQdAAaiQAIAYLdgECfyABIAAQOCIBaiICIAFBAXRBgAggARsiAyACIANLGyECIAAQISEDAkAgAC0AD0H/AUYEQCAAKAIAIAEgAkEBEGAhAQwBCyACQQEQPyIBIAAgAxAgGiAAIAM2AgQLIABB/wE6AA8gACACNgIIIAAgATYCAAtzAQF/IAAQISAAEDhPBEAgAEEBEL0ICyAAECEhAQJAIAAQJQRAIAAgAWpBADoAACAAIAAtAA9BAWo6AA8gABAhQRBJDQFBv64DQY/9AEGIAkG4sgEQAAALIAAoAgAgAWpBADoAACAAIAAoAgRBAWo2AgQLC4wBAQJ/IwBBEGsiACQAAkAgAEEMaiAAQQhqEBENAEHolAsgACgCDEECdEEEahBCIgE2AgAgAUUNACAAKAIIEEIiAQRAQeiUCygCACAAKAIMQQJ0akEANgIAQeiUCygCACABEBBFDQELQeiUC0EANgIACyAAQRBqJABBlJYLQYyVCzYCAEHMlQtBKjYCAAuMAQECfyMAQSBrIgIkAAJAIAAoAqABIgNBAkgNACAALQCYAUHAAHFFDQAgAiAAKAIAKAKsAiADQQJ0aigCADYCECABQbHCASACQRBqEPADCyAAKALIASEDIAAoAsQBIgBBAEwgA0EATHFFBEAgAiADNgIEIAIgADYCACABQbXCASACEPADCyACQSBqJAAL6wEBAX8gACgCECEHIAFFIAAoApgBIgBBgIACcUVyRQRAIAcgATYCyAELQQAhAQJAIABBgIAEcUUNACAHIAUgBhCAATYC3AEgAkUNACACLQAARQ0AIAcgAiAGEIABNgLYAUEBIQELAkAgAEGAgIACcUUNAAJAIANFDQAgAy0AAEUNACAHIAMgBhCAATYC7AFBASEBIAcgBy8BjAJBAXI7AYwCDAELIAcoAsgBIgJFDQAgByACEGE2AuwBQQEhAQsCQCAERSAAQYCAgARxRXINACAELQAARQ0AIAcgBCAGEIABNgL8AUEBIQELIAELzgEBBX8jAEEgayIDJAAgACgCECIEKAK0ASICQQAgAkEAShtBAWohBkEBIQUCQANAIAUgBkcEQCAEKAK4ASAFQQJ0aigCACADIAEpAxg3AxggAyABKQMQNwMQIAMgASkDCDcDCCADIAEpAwA3AwAgBUEBaiEFIAMQwggiAkUNAQwCCwsCQCABKwMQIAQrAxBmRQ0AIAQrAyAgASsDAGZFDQAgASsDGCAEKwMYZkUNACAAIQIgBCsDKCABKwMIZg0BC0EAIQILIANBIGokACACCzsBAX8CQCABQQBB3YUBQQAQHyICRQRAIAFBAEH4zQFBABAfIgJFDQELIAAgASACED4gARCAATYCzAQLCxUAIAAgASACQbwiQasBQZy8ARDgCguXAQEBfyMAQeAAayIHJAAgByACOQNYIAcgBykDWDcDKCAHIAE5A1AgByAHKQNQNwMgIAAgB0EgahDPBCAHIAQ5A0ggByAHKQNINwMYIAcgAzkDQCAHIAcpA0A3AxAgACAHQRBqEM8EIAcgBjkDOCAHIAcpAzg3AwggByAFOQMwIAcgBykDMDcDACAAIAcQzwQgB0HgAGokAAtSAQF/IwBBEGsiAyQAIABFBEBBg88BQZy8AUGrAUHjiAEQAAALIAMgACAAKAIEQQFrEMQIIAAgAysDACADKwMIIAEgAiABIAIQxQggA0EQaiQAC5wBAQV/IABBMEEAIAAoAgBBA3FBA0cbaigCKCgCECICKALgASEEIAIoAuQBIQMCQANAIAEgA0cEQCABQQJ0IQUgAUEBaiEBIAQgBWooAgAgAEcNAQwCCwsgAiAEIANBAWogA0ECahD/ASIBNgLgASACIAIoAuQBIgJBAWoiAzYC5AEgASACQQJ0aiAANgIAIAEgA0ECdGpBADYCAAsLrgIBA38jAEEQayIDJAAgAyACNgIEIAMgATYCACMAQRBrIgEkACABIAM2AgQgASADNgIMIAEgAzYCCAJAAkACQAJAQQBBAEGbMyADEE4iBUEASA0AIAVBAWohAiAFIAAQOCAAECFrIgRPBEAgACACIARrENEBCyAAECEhBCAFIAAQJQR/IAAgBGoFIAAoAgAgBGoLIAJBmzMgASgCDBBOIgJHIAJBAE5xDQEgAkEATA0AIAAQJQRAIAJBgAJPDQMgACAALQAPIAJqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBxAFB2R0QAAALIAAgACgCBCACajYCBAsgAUEQaiQADAILQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALIAAQnwEgA0EQaiQAC5gEAwF/CXwBfiMAQZABayIGJAAgAisDACIIRAAAAAAAAAhAoyEKIAIrAwgiCUQAAAAAAADgv6IhByAIRAAAAAAAAOC/oiELIAlEAAAAAAAACMCjIQwCQCAEQYABcQRAIAZCADcDiAEgBkIANwOAAQwBCyAGIAcgCqE5A4gBIAYgCyAMoTkDgAELIAErAwghDSABKwMAIQ4CQCAEQcAAcQRAIAZCADcDeCAGQgA3A3AMAQsgBiAHIAqgOQN4IAYgDCALoDkDcAsgBiAJmjkDaCAGIAYpA4gBNwMoIAYgBikDeDcDCCAGIAYpA2g3AxggBiAImjkDYCAGIAYpA4ABNwMgIAYgBikDcDcDACAGIAYpA2A3AxAgBkEwaiAGQSBqIAZBEGogBiADEM8CIAYrAzAhByABIA0gCSAGKwM4oCIDoTkDCCABIA4gCCAHoCIHoTkDACAAIAkgDaAgA6EiCzkDCCAAIAggDqAgB6EiDzkDACAFIAApAwg3A0ggBSAAKQMANwNAIAUgACkDCDcDCCAAKQMAIRAgBSAKIAlEAAAAAAAA4D+iIA2gIAOhIgmgOQMYIAUgDCAOIAhEAAAAAAAA4D+ioCAHoSIIoDkDECAFIBA3AwAgBSABKQMINwMoIAUgASkDADcDICAFIAkgCqE5AzggBSAIIAyhOQMwIAAgCyADoTkDCCAAIA8gB6E5AwAgBkGQAWokAAseACAAIAGiRAAAAAAAACRAoiACRAAAAAAAAOA/oqAL7A4DBH8SfAF+IwBB0AJrIgckAETNzMzMzMzcPyENIANEAAAAAAAAEECiIgsgBGNFIAVBIHEiCEVyRQRAIAQgC6NEzczMzMzM3D+iIQ0LAnxEAAAAAAAAAAAgBEQAAAAAAADwP2RFDQAaRAAAAAAAAAAAIAhFDQAaIAREAAAAAAAA8L+gRJqZmZmZmak/oiADowshC0QAAAAAAAAAACANIAIrAwAiEKIiFCAFQYABcSIJGyEMRAAAAAAAAAAAIBSaIAVBwABxIgobIQ5EAAAAAAAAAAAgDSACKwMIIhKaIgOiIhUgCRshD0QAAAAAAAAAACAVmiAKGyERIBIgASsDCCIYoCEZIBAgASsDACIaoCEbIAsgEKIhDSASRAAAAAAAAOA/oiAYoCEWIBBEAAAAAAAA4D+iIBqgIRcgCyADoiETIAACfAJ8AkACfAJAIAhFBEAgByAMOQPIAiAHIA85A8ACIAcgDjkDuAIgByAROQOwAiAHIAIpAwg3A6gCIAcgAikDADcDoAJEAAAAAAAAAAAhDCAQRAAAAAAAAAAAYQRARAAAAAAAAAAAIQ5EAAAAAAAAAAAhC0QAAAAAAAAAACASRAAAAAAAAAAAYQ0FGgsgBysDqAIhAyAHKwOgAiELDAELIAcgDjkDyAIgByAROQPAAiAHIAw5A7gCIAcgDzkDsAIgByADOQOoAiAHIBCaIgs5A6ACRAAAAAAAAAAAIQwgEEQAAAAAAAAAAGINAEQAAAAAAAAAACEORAAAAAAAAAAAIRFEAAAAAAAAAAAgEkQAAAAAAAAAAGENARoLIAsgCyADEE8iDKMiDxCpAiIOIA6aIANEAAAAAAAAAABkGyEcIAMgDKMhEQJ8AkAgBUHgAHFB4ABHBEAgCEEARyICIAlFcg0BCyAHIAcpA8gCNwO4ASAHIAcpA6gCNwOoASAHIAcpA7gCNwOYASAHIAcpA8ACNwOwASAHIAcpA6ACNwOgASAHIAcpA7ACNwOQASAHQfABaiAHQbABaiAHQaABaiAHQZABaiAEEM8CIBEgBysDkAIgC6EiCyAHKwOYAiADoSIDEE8iDCALIAyjEKkCIgsgC5ogA0QAAAAAAAAAAGQbIByhEESiIgOiIQ4gDyADogwBCyAFQaABcUGgAUdBACAKRSACchtFBEAgByAHKQPIAjcDiAEgByAHKQOoAjcDeCAHIAcpA7gCNwNoIAcgBykDwAI3A4ABIAcgBykDoAI3A3AgByAHKQOwAjcDYCAHQfABaiAHQYABaiAHQfAAaiAHQeAAaiAEEM8CIBEgBysDgAIgC6EiCyAHKwOIAiADoSIDEE8iDCALIAyjEKkCIgsgC5ogA0QAAAAAAAAAAGQbIByhEESiIgOiIQ4gDyADogwBCyAHIAcpA8gCNwNYIAcgBykDqAI3A0ggByAHKQO4AjcDOCAHIAcpA8ACNwNQIAcgBykDoAI3A0AgByAHKQOwAjcDMCAHQfABaiAHQdAAaiAHQUBrIAdBMGogBBDPAiAHKwP4ASADoSEOIAcrA/ABIAuhCyEMIAhFDQEgBEQAAAAAAADgP6IiAyARoiERIAMgD6ILIQ8gASAYIA6hOQMIIAEgGiAMoTkDACAAIBkgDqEiAzkDCCAAIBsgDKEiBDkDACAGIAEpAwg3A4gBIAYgASkDADcDgAEgBiABKQMANwMAIAYgASkDCDcDCCAGIAMgDaE5AzggBiAEIBOhOQMwIAYgFiANoTkDKCAGIBcgE6E5AyAgBiADIBShOQMYIAYgBCAVoTkDECAGIAApAwA3A0AgBiAAKQMINwNIIAYgFCADoDkDeCAGIBUgBKA5A3AgBiANIBagOQNoIAYgEyAXoDkDYCAGIA0gA6A5A1ggBiATIASgOQNQIAAgBCAPoTkDACADIBGhDAILIAcgDSAWIBmhoDkD6AEgByATIBcgG6GgOQPgASAHQgA3A9gBIAdCADcD0AEgByAUIBKhIgM5A8gBIAcgBykD6AE3AyggByAHKQPIATcDGCAHIAcpA+ABNwMgIAcgFSAQoSILOQPAASAHIAcpA8ABNwMQIAdCADcDCCAHQgA3AwAgB0HwAWogB0EgaiAHQRBqIAcgBBDPAiARIAcrA4ACIAuhIgQgBCAHKwOIAiADoSIDEE8iBKMQqQIiCyALmiADRAAAAAAAAAAAZBsgHKEQRCAEmqIiA6IhCyAPIAOiCyEDIAAgGSALoCISOQMIIAAgGyADoCIPOQMAIAYgACkDCDcDiAEgBiAAKQMANwOAASAGIAApAwg3AwggACkDACEdIAYgFCAYIAugIgSgOQN4IAYgFSAaIAOgIhCgOQNwIAYgDSAWoDkDaCAGIBMgF6A5A2AgBiALIASgIgs5A1ggBiADIBCgIgM5A1AgBiALOQNIIAYgAzkDQCAGIAs5AzggBiADOQMwIAYgFiANoTkDKCAGIBcgE6E5AyAgBiAEIBShOQMYIAYgECAVoTkDECAGIB03AwAgACAMIA+gOQMAIA4gEqALOQMIIAdB0AJqJAALzgkCA38MfCMAQfABayIGJABEAAAAAAAAAAAgA0QAAAAAAADQP6JEZmZmZmZm1j+iRGZmZmZmZtY/IANEAAAAAAAAEEBkGyIKIAIrAwAiDqIiEiAEQcAAcSIHGyENRAAAAAAAAAAAIAogAisDCCIQmiILoiITIAcbIQ9EAAAAAAAAAAAgEpogBEGAAXEiCBshCkQAAAAAAAAAACATmiAIGyEJAkAgBEEgcSIEBEAgBiACKQMINwPIASAGIAIpAwA3A8ABIA8hCyANIQwMAQsgBiALOQPIASAGIA6aOQPAASAJIQsgCiEMIA8hCSANIQoLIAErAwghDSABKwMAIQ8gBiAMOQPoASAGIAs5A+ABIAYgCjkD2AEgBiAJOQPQAUQAAAAAAAAAACEKAnwgDkQAAAAAAAAAAGEEQEQAAAAAAAAAACEJRAAAAAAAAAAAIQtEAAAAAAAAAAAgEEQAAAAAAAAAAGENARoLIAYrA8ABIgkgCSAGKwPIASIKEE8iC6MiDBCpAiIRIBGaIApEAAAAAAAAAABkGyERIAogC6MhCwJ8IAcEQCAGIAYpA+gBNwOIASAGIAYpA8gBNwN4IAYgBikD2AE3A2ggBiAGKQPgATcDgAEgBiAGKQPAATcDcCAGIAYpA9ABNwNgIAZBkAFqIAZBgAFqIAZB8ABqIAZB4ABqIAMQzwIgCyAGKwOgASAJoSIJIAYrA6gBIAqhIgoQTyIUIAkgFKMQqQIiCSAJmiAKRAAAAAAAAAAAZBsgEaEQRKIiCaIhCiAMIAmiDAELIAgEQCAGIAYpA+gBNwNYIAYgBikDyAE3A0ggBiAGKQPYATcDOCAGIAYpA+ABNwNQIAYgBikDwAE3A0AgBiAGKQPQATcDMCAGQZABaiAGQdAAaiAGQUBrIAZBMGogAxDPAiALIAYrA7ABIAmhIgkgBisDuAEgCqEiChBPIhQgCSAUoxCpAiIJIAmaIApEAAAAAAAAAABkGyARoRBEoiIJoiEKIAwgCaIMAQsgBiAGKQPoATcDKCAGIAYpA8gBNwMYIAYgBikD2AE3AwggBiAGKQPgATcDICAGIAYpA8ABNwMQIAYgBikD0AE3AwAgBkGQAWogBkEgaiAGQRBqIAYgAxDPAiAGKwOYASAKoSEKIAYrA5ABIAmhCyEJIANEAAAAAAAA4D+iIgMgC6IhCyADIAyiCyEMIBAgDaAhECAOIA+gIQ4gBUFAayECAnwgBARAIAEgDSALoCIDOQMIIAEgDyAMoCINOQMAIAAgECALoCILOQMIIAAgDiAMoCIMOQMAIAIgASkDCDcDCCACIAEpAwA3AwAgBSABKQMINwMIIAUgASkDADcDACAFIAApAwg3AyggBSAAKQMANwMgIAkgDKAhCSAKIAugDAELIAEgDSAKoTkDCCABIA8gCaE5AwAgACAQIAqhIgM5AwggACAOIAmhIg05AwAgAiAAKQMINwMIIAIgACkDADcDACAFIAApAwg3AwggBSAAKQMANwMAIAUgASkDCDcDKCAFIAEpAwA3AyAgDSAMoSEJIAMgC6ELIQogBSASIAOgOQM4IAUgEyANoDkDMCAFIAMgEqE5AxggBSANIBOhOQMQIAAgCjkDCCAAIAk5AwAgBkHwAWokAAv3AQEGfyMAQRBrIgQkAANAIAEgAjYCACAAIQIDQAJAIAItAABFIAMiBUEDSnJFBEAgBEEANgIMIAIgAkGA/wQgBEEMahCDBiIARgRAA0AgACAAQZD/BCAEQQxqIgcQgwYiA0cgAyEADQALIABBwP8EIAcQgwYhAAsgBCgCDCIDIANBD3FFIANBAEdxciIGDQEgBCACNgIAQdOKBCAEECcLIARBEGokAA8LIAZBCEciB0UEQEEDIQMgACECIAVBA0YNAQsgBSAHckUEQEEAIQMgACECIAAtAABFDQELCyAFQQFqIQMgASgCACAGIAVBA3R0ciECDAALAAslACABRQRAQc7OAUHW/ABBDUH79gAQAAALIAAgASABEDcQ1wFFC5AFAhB/BHwgACABIAIgAxDVCCILRQRAQQEPCyADLQAMIQ4CQCAARQ0AA0AgACAGRg0BIAsgBkEEdGoiAysDCCIURAAAAAAAAFJAoyEWIAMrAwAiFUQAAAAAAABSQKMhFyACIAEgBkECdGooAgAiCSACGyEMIAkQGiEHA0ACQCAHBEAgBygCECIDKAKUASIFIBcgBSsDAKA5AwAgBSAWIAUrAwigOQMIIAMgFSADKwMQoDkDECADIBQgAysDGKA5AxggAygCfCIDBEAgAyAVIAMrAzigOQM4IAMgFCADKwNAoDkDQAsgDkUNASAMIAcQKSEFA0AgBUUNAiAFKAIQIgMoAmAiBARAIAQgFSAEKwM4oDkDOCAEIBQgBCsDQKA5A0ALIAMoAmwiBARAIAQgFSAEKwM4oDkDOCAEIBQgBCsDQKA5A0ALIAMoAmQiBARAIAQgFSAEKwM4oDkDOCAEIBQgBCsDQKA5A0ALIAMoAmgiBARAIAQgFSAEKwM4oDkDOCAEIBQgBCsDQKA5A0ALAkAgAygCCCINRQ0AIA0oAgQhD0EAIQQDQCAEIA9GDQEgDSgCACAEQTBsaiIDKAIMIRAgAygCCCERIAMoAgQhEiADKAIAIRNBACEIA0AgCCASRgRAIBEEQCADIBUgAysDEKA5AxAgAyAUIAMrAxigOQMYCyAQBEAgAyAVIAMrAyCgOQMgIAMgFCADKwMooDkDKAsgBEEBaiEEDAIFIBMgCEEEdGoiCiAVIAorAwCgOQMAIAogFCAKKwMIoDkDCCAIQQFqIQgMAQsACwALAAsgDCAFECwhBQwACwALIAkgFSAUENAIIAZBAWohBgwCCyAJIAcQGyEHDAALAAsACyALEBdBAAuoAQECfyAAKAIQIgMgAysDKCACoDkDKCADIAMrAyAgAaA5AyAgAyADKwMYIAKgOQMYIAMgAysDECABoDkDEAJAIAMoAgwiBEUNACAELQBRQQFHDQAgBCAEKwM4IAGgOQM4IAQgBCsDQCACoDkDQAtBASEEA0AgBCADKAK0AUpFBEAgAygCuAEgBEECdGooAgAgASACENAIIARBAWohBCAAKAIQIQMMAQsLC/QJAhJ/BHwjAEEQayIOJAAgAEEQEBghESACKAIEIQcCQCACKAIcQQFxIg8EQCAHQQBKBEAgACAHakEBayAHbiEJDAILAn8gALifmyIVRAAAAAAAAPBBYyAVRAAAAAAAAAAAZnEEQCAVqwwBC0EACyIHIABqQQFrIAduIQkMAQsgB0EASgRAIAciCSAAakEBayAHbiEHDAELAn8gALifmyIVRAAAAAAAAPBBYyAVRAAAAAAAAAAAZnEEQCAVqwwBC0EACyIJIABqQQFrIAluIQcLQYCLCy0AAARAIA4gCTYCCCAOIAc2AgQgDkHmNkHcNiAPGzYCAEHo+gYoAgBB+9oDIA4QHRoLIAlBAWoiCkEIEBghDCAHQQFqQQgQGCELIABBGBAYIhIhBQNAIAAgA0YEQEEAIQMgAEEEEBghDQNAIAAgA0YEQAJAAkAgAigCGCIDBEBBrIgLKAIAQbCICygCAHINAkGwiAsgAzYCAEGsiAtB0QE2AgAgAEECTwRAIA0gAEEEQdIBEJQBC0GwiAtBADYCAEGsiAtBADYCAAwBCyACLQAcQcAAcQ0AIA0gAEEEQdMBEJQBC0EAIQNBACEEQQAhBQNAIAAgBUYEQEQAAAAAAAAAACEVA0AgAyAKRgRARAAAAAAAAAAAIRUgByEDBSAMIANBA3RqIgQrAwAhFiAEIBU5AwAgA0EBaiEDIBUgFqAhFQwBCwsDQCADBEAgCyADQQN0aiIEIBU5AwAgA0EBayEDIBUgBEEIaysDAKAhFQwBCwsgCyAVOQMAIAtBCGohCCAMQQhqIRBBACEEQQAhBkEAIQMDQCAAIANGRQRAIAEgDSADQQJ0aigCACgCECITQQV0aiEFAnwgAigCHCIKQQRxBEAgDCAEQQN0aisDAAwBCyAFKwMQIRUgBSsDACEWIApBCHEEQCAQIARBA3RqKwMAIBUgFqGhDAELIAwgBEEDdGoiFCsDACAUKwMIoCAVoSAWoUQAAAAAAADgP6ILIRUgBSsDGCEWIAUrAwghFyARIBNBBHRqIgUgFRAwOQMAIAUCfCAKQRBxBEAgCyAGQQN0aisDACAWIBehoQwBCyAKQSBxBEAgCCAGQQN0aisDAAwBCyALIAZBA3RqIgorAwAgCisDCKAgFqEgF6FEAAAAAAAA4D+iCxAwOQMIAkAgD0UEQEEAIARBAWoiBCAEIAlGIgUbIQQgBSAGaiEGDAELQQAgBkEBaiIGIAYgB0YiBRshBiAEIAVqIQQLIANBAWohAwwBCwsgEhAXIA0QFyAMEBcgCxAXIA5BEGokACARDwUgDCAEQQN0aiIIIAgrAwAgDSAFQQJ0aigCACIIKwMAECQ5AwAgCyAGQQN0aiIQIBArAwAgCCsDCBAkOQMAAkAgD0UEQEEAIARBAWoiBCAEIAlGIggbIQQgBiAIaiEGDAELQQAgBkEBaiIGIAYgB0YiCBshBiAEIAhqIQQLIAVBAWohBQwBCwALAAtByaUDQbn7AEEnQYMaEAAABSANIANBAnRqIBIgA0EYbGo2AgAgA0EBaiEDDAELAAsABSABIANBBXRqIgQrAxAhFSAEKwMAIRYgBCsDGCEXIAQrAwghGCACKAIIIQQgBSADNgIQIAUgFyAYoSAEuCIXoDkDCCAFIBUgFqEgF6A5AwAgBUEYaiEFIANBAWohAwwBCwALAAuKBQIKfAJ/IwBBIGsiECQAIAArAwAhCyAAKwMQIQwgACsDCCENIAArAxghDhDsAyEAIAQrAwgiByADuCIGoSEIIAcgDhAwoCANEDAgBCsDACIPIAwQMKAgCxAwoSAGoCEKoSAGoCEJIAggArijIAhEAAAAAAAA8D+gIAK4o0QAAAAAAADwv6AgCEQAAAAAAAAAAGYbEDAhCAJ8IA8gBqEiBkQAAAAAAAAAAGYEQCAGIAK4owwBCyAGRAAAAAAAAPA/oCACuKNEAAAAAAAA8L+gCxAwIQcgCSACuKMgCUQAAAAAAADwP6AgArijRAAAAAAAAPC/oCAJRAAAAAAAAAAAZhsQMCEJIAogArijIApEAAAAAAAA8D+gIAK4o0QAAAAAAADwv6AgCkQAAAAAAAAAAGYbEDAhCgNAIAghBiAHIAplBEADQCAGIAllBEAgACAHIAYQzAIgBkQAAAAAAADwP6AhBgwBCwsgB0QAAAAAAADwP6AhBwwBCwsgASAAEOcONgIEIAEgABCHASIRNgIIIAECfyAMIAuhIANBAXS4IgagIAK4IgijmyIHmUQAAAAAAADgQWMEQCAHqgwBC0GAgICAeAsiAgJ/IA4gDaEgBqAgCKObIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyIDajYCAEEAIQQCQEGAiwstAABBA0kNACAQIAM2AhwgECACNgIYIBAgETYCFCAQIAU2AhBB6PoGKAIAIgJBtrkEIBBBEGoQHRoDQCAEIAEoAghODQEgASgCBCAEQQR0aiIDKwMAIQYgECADKwMIOQMIIBAgBjkDACACQZeBBCAQEC0gBEEBaiEEDAALAAsgABDfAiAQQSBqJAAL2wMCAn8HfCMAQfAAayIDJAAgAkEBdLghByAAuCEIQQAhAgN/IAAgAkYEfwJAIAYgBqIgCEQAAAAAAABZQKJEAAAAAAAA8L+gIgdEAAAAAAAAEMCiIAmioCIFRAAAAAAAAAAAYwRAIAMgBTkDAEHd5wQgAxAxQX8hAgwBC0EBAn8gBZ8iCiAGoSAHIAegIgujIgiZRAAAAAAAAOBBYwRAIAiqDAELQYCAgIB4CyICIAJBAU0bIQJBgIsLLQAAQQNJDQBBm58EQRtBAUHo+gYoAgAiARBKGiADIAo5A2AgAyAFOQNYIAMgCTkDUCADIAc5A0AgAyAGOQNIIAFBj50EIANBQGsQLSADIAaaIAqhIAujIgU5AzggAwJ/IAWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CzYCMCADIAI2AiAgAyAIOQMoIAFBo+YEIANBIGoQLSADIAkgByAIoiAIoiAGIAiioKA5AxAgAyAJIAcgBaIgBaIgBiAFoqCgOQMYIAFBjZ8EIANBEGoQLQsgA0HwAGokACACBSAJIAEgAkEFdGoiBCsDECAEKwMAoSAHoCIFIAQrAxggBCsDCKEgB6AiCqKhIQkgBiAFIAqgoSEGIAJBAWohAgwBCwsL8AIBA38gACAAQTBqIgIgACgCAEEDcUEDRhsoAigoAhAiASgCyAEgASgCzAEiAUEBaiABQQJqEP8BIQEgACACIAAoAgBBA3FBA0YbKAIoKAIQIAE2AsgBIAAgAiAAKAIAQQNxQQNGGygCKCgCECIBIAEoAswBIgNBAWo2AswBIAEoAsgBIANBAnRqIAA2AgAgACACIAAoAgBBA3FBA0YbKAIoKAIQIgIoAsgBIAIoAswBQQJ0akEANgIAIAAgAEEwayICIAAoAgBBA3FBAkYbKAIoKAIQIgEoAsABIAEoAsQBIgFBAWogAUECahD/ASEBIAAgAiAAKAIAQQNxQQJGGygCKCgCECABNgLAASAAIAIgACgCAEEDcUECRhsoAigoAhAiASABKALEASIDQQFqNgLEASABKALAASADQQJ0aiAANgIAIAAgAiAAKAIAQQNxQQJGGygCKCgCECICKALAASACKALEAUECdGpBADYCACAAC5wfAxF/DXwBfiMAQdACayIFJAACQAJAIABFDQAgAygCEEEDTQRAQej6BigCACENIAMoAhQhDgNAAkAgACAGRgRAQQAhBiAAQSAQGCEPDAELIAEgBkECdGooAgAiBxDLAgJAIA5FDQAgBiAOai0AAEEBRw0AIAcoAhAiCCsDECAIKwMYIAgrAyAgCCsDKBAwIRcQMCEYEDAhGhAwIRsCfCAERQRAIBchGSAYIRUgGiEWIBsMAQsgFyAZECQhGSAYIBUQJCEVIBogFhAyIRYgGyAcEDILIRwgBEEBaiEEC0GAiwstAABBA08EQCAHEB4hCCAHKAIQIgcrAxAhFyAHKwMYIRggBysDICEaIAUgBysDKDkDgAIgBSAaOQP4ASAFIBg5A/ABIAUgFzkD6AEgBSAINgLgASANQa+MBCAFQeABahAtCyAGQQFqIQYMAQsLA0AgACAGRwRAIA8gBkEFdGoiBCABIAZBAnRqKAIAKAIQIgcpAxA3AwAgBCAHKQMoNwMYIAQgBykDIDcDECAEIAcpAxg3AwggBkEBaiEGDAELCyAAIA8gAygCCBDTCCEIQYCLCy0AAARAIAUgCDYC0AEgDUHtuQQgBUHQAWoQHRoLIAhBAEwEQCAPEBcMAgsgBUIANwOoAiAFQgA3A6ACIA4EQCAFIBkgFqBEAAAAAAAA4D+iEDAiIDkDqAIgBSAVIBygRAAAAAAAAOA/ohAwIiE5A6ACCyAIuCEWIABBEBAYIREDQAJAAkACQCAAIAxHBEAgASAMQQJ0aigCACEGIBEgDEEEdGoiCiAMNgIMIAMoAhBBA0YEQCAGKAIQIQQgAygCCCEHIAYQHiEGIAUgBCkDKDcDeCAFIAQpAyA3A3AgBSAEKQMYNwNoIAQpAxAhIiAFIAUpA6gCNwNYIAUgIjcDYCAFIAUpA6ACNwNQIAVB4ABqIAogCCAHIAVB0ABqIAYQ0ggMBAsgAiAGIAIbIQsgAy0ADCESIAMoAgghExDsAyEJICAgBigCECIEKwMYEDChIRsgISAEKwMQEDChIRwgAygCEEEBRw0BQQAhByAGEDVBBBAYIRQgBhAaIQQDQCAEBEAgFCAHQQJ0aiAEKAIQIhAoAoABNgIAIBBBADYCgAEgB0EBaiEHIAYgBBAbIQQMAQUgE7ghHUEBIQcDQCAGKAIQIgQoArQBIAdOBEAgBCgCuAEgB0ECdGooAgAiECgCECIEKwMgIAQrAxAQMCEXEDAhFSAEKwMYIRkCQCAVIBdkRSAEKwMoEDAiGCAZEDAiGWRFcg0AIBwgFaAgHaAhFSAbIBigIB2gIRggGyAZoCAdoSIZIBajIBlEAAAAAAAA8D+gIBajRAAAAAAAAPC/oCAZRAAAAAAAAAAAZhsQMCEZAnwgHCAXoCAdoSIXRAAAAAAAAAAAZgRAIBcgFqMMAQsgF0QAAAAAAADwP6AgFqNEAAAAAAAA8L+gCxAwIRcgGCAWoyAYRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgGEQAAAAAAAAAAGYbEDAhGCAVIBajIBVEAAAAAAAA8D+gIBajRAAAAAAAAPC/oCAVRAAAAAAAAAAAZhsQMCEaA0AgGSEVIBcgGmUEQANAIBUgGGUEQCAJIBcgFRDMAiAVRAAAAAAAAPA/oCEVDAELCyAXRAAAAAAAAPA/oCEXDAEFIBAQGiEEA0AgBEUNAyAEKAIQIBA2AugBIBAgBBAbIQQMAAsACwALAAsgB0EBaiEHDAELCyAGEBohBwNAIAcEQCAFQcACaiAHEIkIIBsgBSsDyAIQMKAhGCAcIAUrA8ACEDCgIRoCQCAHKAIQIgQoAugBRQRAIBggBCsDUEQAAAAAAADgP6IgHaAQMCIeoSEVAnwgGiAEKwNYIAQrA2CgRAAAAAAAAOA/oiAdoBAwIh+hIhlEAAAAAAAAAABmBEAgGSAWowwBCyAZRAAAAAAAAPA/oCAWo0QAAAAAAADwv6ALIBUgFqMgFUQAAAAAAADwP6AgFqNEAAAAAAAA8L+gIBVEAAAAAAAAAABmGxAwIRkQMCEXIBggHqAiFSAWoyAVRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgFUQAAAAAAAAAAGYbEDAhHiAaIB+gIhUgFqMgFUQAAAAAAADwP6AgFqNEAAAAAAAA8L+gIBVEAAAAAAAAAABmGxAwIR8CfANAAkAgGSEVIBcgH2UEQANAIBUgHmUEQCAJIBcgFRDMAiAVRAAAAAAAAPA/oCEVDAELCyAXRAAAAAAAAPA/oCEXDAIFIBpEAAAAAAAAAABmRQ0BIBogFqMMAwsACwsgGkQAAAAAAADwP6AgFqNEAAAAAAAA8L+gCyEVIAUgGCAWoyAYRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgGEQAAAAAAAAAAGYbEDA5A7gCIAUgFRAwOQOwAiALIAcQKSEEA0AgBEUNAiAFIAUpA7gCNwOoASAFIAUpA7ACNwOgASAEIAVBoAFqIAkgHCAbIAggEkEBcRCHBiALIAQQLCEEDAALAAsgBSAYIBajIBhEAAAAAAAA8D+gIBajRAAAAAAAAPC/oCAYRAAAAAAAAAAAZhsQMDkDuAIgBSAaIBajIBpEAAAAAAAA8D+gIBajRAAAAAAAAPC/oCAaRAAAAAAAAAAAZhsQMDkDsAIgCyAHECkhBANAIARFDQEgBygCECgC6AEgBEFQQQAgBCgCAEEDcUECRxtqKAIoKAIQKALoAUcEQCAFIAUpA7gCNwO4ASAFIAUpA7ACNwOwASAEIAVBsAFqIAkgHCAbIAggEkEBcRCHBgsgCyAEECwhBAwACwALIAYgBxAbIQcMAQsLQQAhByAGEBohBANAIAQEQCAEKAIQIBQgB0ECdGooAgA2AoABIAdBAWohByAGIAQQGyEEDAELCyAUEBcMBAsACwALQQAhBiAAQQQQGCEBAkADQCAAIAZGBEACQCABIABBBEHQARCUARDsAyEKIABBEBAYIQIgDg0AQQAhBgNAIAAgBkYNBCAGIAEgBkECdGooAgAiBCAKIAIgBCgCDEEEdGogCCADKAIIIA8QhgYgBkEBaiEGDAALAAsFIAEgBkECdGogESAGQQR0ajYCACAGQQFqIQYMAQsLICCaIRUgIZohGUEAIQdBACEJA0AgACAJRgRAA0AgACAHRg0DIAcgDmotAABFBEAgByABIAdBAnRqKAIAIgYgCiACIAYoAgxBBHRqIAggAygCCCAPEIYGCyAHQQFqIQcMAAsABQJAIAkgDmotAABBAUcNACABIAlBAnRqKAIAIgQoAgQhBiAEKAIIIQsgAiAEKAIMQQR0aiIEIBU5AwggBCAZOQMAQQAhBCALQQAgC0EAShshDANAIAQgDEcEQCAFIAYpAwg3A0ggBSAGKQMANwNAIAogBUFAaxDoDiAEQQFqIQQgBkEQaiEGDAELC0GAiwstAABBAkkNACAFIBU5AzAgBSAZOQMoIAUgCzYCICANQYflBCAFQSBqEC0LIAlBAWohCQwBCwALAAsgARAXQQAhBgNAIAAgBkYEQCAREBcgChDfAiAPEBdBACEGQYCLCy0AAEEBTQ0IA0AgACAGRg0JIAIgBkEEdGoiASsDACEVIAUgASsDCDkDECAFIBU5AwggBSAGNgIAIA1BnJsEIAUQLSAGQQFqIQYMAAsABSARIAZBBHRqKAIEEBcgBkEBaiEGDAELAAsACyATuCEdIAYQGiEHA0AgB0UNASAFQcACaiAHEIkIIBsgBSsDyAIQMKAiGCAHKAIQIgQrA1BEAAAAAAAA4D+iIB2gEDAiHqEhFQJ8IBwgBSsDwAIQMKAiGiAEKwNYIAQrA2CgRAAAAAAAAOA/oiAdoBAwIh+hIhlEAAAAAAAAAABmBEAgGSAWowwBCyAZRAAAAAAAAPA/oCAWo0QAAAAAAADwv6ALIBUgFqMgFUQAAAAAAADwP6AgFqNEAAAAAAAA8L+gIBVEAAAAAAAAAABmGxAwIRkQMCEXIBggHqAiFSAWoyAVRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgFUQAAAAAAAAAAGYbEDAhHiAaIB+gIhUgFqMgFUQAAAAAAADwP6AgFqNEAAAAAAAA8L+gIBVEAAAAAAAAAABmGxAwIR8CfANAAkAgGSEVIBcgH2UEQANAIBUgHmUEQCAJIBcgFRDMAiAVRAAAAAAAAPA/oCEVDAELCyAXRAAAAAAAAPA/oCEXDAIFIBpEAAAAAAAAAABmRQ0BIBogFqMMAwsACwsgGkQAAAAAAADwP6AgFqNEAAAAAAAA8L+gCyEVIAUgGCAWoyAYRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgGEQAAAAAAAAAAGYbEDA5A7gCIAUgFRAwOQOwAiALIAcQKSEEA0AgBARAIAUgBSkDuAI3A8gBIAUgBSkDsAI3A8ABIAQgBUHAAWogCSAcIBsgCCASQQFxEIcGIAsgBBAsIQQMAQsLIAYgBxAbIQcMAAsACyAKIAkQ5w42AgQgCiAJEIcBNgIIAn8gBigCECIEKwMgIAQrAxChIBNBAXS4IhWgIBajmyIZmUQAAAAAAADgQWMEQCAZqgwBC0GAgICAeAshByAKIAcCfyAEKwMoIAQrAxihIBWgIBajmyIVmUQAAAAAAADgQWMEQCAVqgwBC0GAgICAeAsiBGo2AgACQEGAiwstAABBA0kNACAGEB4hBiAKKAIIIQsgBSAENgKcASAFIAc2ApgBIAUgCzYClAEgBSAGNgKQASANQba5BCAFQZABahAdGkEAIQQDQCAEIAooAghODQEgCigCBCAEQQR0aiIGKwMAIRUgBSAGKwMIOQOIASAFIBU5A4ABIA1Bl4EEIAVBgAFqEC0gBEEBaiEEDAALAAsgCRDfAgsgDEEBaiEMDAALAAsgAEEgEBghBANAIAAgBkYEQEEAIQICQCADKAIQQQRHDQACQCADLQAcQQJxRQ0AIAMgAEEEEBg2AhhBACEGA0AgACAGRg0BAkAgASAGQQJ0IgJqKAIAQaYWECMiB0UNACAFIAVBwAJqNgKQAiAHQbWyASAFQZACahBJQQBMDQAgBSgCwAIiB0EASA0AIAMoAhggAmogBzYCAAsgBkEBaiEGDAALAAsgACAEIAMQ0QghAiADLQAcQQJxRQ0AIAMoAhgQFwsgBBAXDAMFIAEgBkECdGooAgAiBxDLAiAEIAZBBXRqIgIgBygCECIHKQMQNwMAIAIgBykDKDcDGCACIAcpAyA3AxAgAiAHKQMYNwMIIAZBAWohBgwBCwALAAtBACECCyAFQdACaiQAIAILzwEBA38gABByIQMDQCADBEACQCADQbzeAEEAEGstAAgNAEEAIQQgAxAaIQADQCAABEAgASAAEB5BABBzIgUEQCAERQRAIAEgAxAeQQEQkAEhBAsgBCAFQQEQexoLIAMgABAbIQAMAQsLIAJFIARyRQRAIAEgAxAeQQEQkAEhBAsgBEUNACAEIAMQoQMaIAMgBBDSBSAEEM4BBEAgBEGSggFBDEEAEC4gAzYCCAtBASEAIAMgBCACBH9BAQUgAxDOAQsQ1ggLIAMQcSEDDAELCwvXAQEGfyMAQRBrIgMkAEHo+gYoAgAhBSABEHIhAgNAIAIEQAJAIAIQzgEEQCAAIAIQHkEBEHMiBEHI3gBBEEEBEC4aIAQoAhAgAjYCDCACEBohAQNAIAFFDQIgAUHI3gBBABBrKAIMBEAgARAeIQYgAhAeIQcgAyABQcjeAEEAEGsoAgwQHjYCCCADIAc2AgQgAyAGNgIAIAVBre8EIAMQHRoLIAFByN4AQQAQayAENgIMIAIgARAbIQEMAAsACyAAIAIQ1wgLIAIQcSECDAELCyADQRBqJAALKAAgAEGSggFBABBrIgBFBEBBlNkAQby4AUGYA0H0FxAAAAsgACgCCAvNAQEEfyMAQRBrIgQkACABQQEgACgCEBEAABoCQCAAKAIEIgIgACgCCEcEQCAAKAIAIQMMAQsCQCAEIAJBAXRBASACGyICQf////8DSwR/QcQABSAAKAIAIAJBAnQQPSIDDQFBMAsQowE2AgBB6PoGKAIAQbv0AyAEEB0aECYACyADIAAoAggiBUECdGpBACACIAVrQQJ0EDMaIAAgAjYCCCAAIAM2AgAgACgCBCECCyADIAJBAnRqIAE2AgAgACACQQFqNgIEIARBEGokAAtCAQJ/IwBBEGsiAiQAIAEoAhAhAyACIAAoAhApAtABNwMIIAIgAykC2AE3AwAgACACQQhqIAEgAhDbCCACQRBqJAALrQEBA38CQAJAIAEoAgQiBUUNACADKAIEIgZFDQAgBSAGTwRAIAMoAgAhAkEAIQEDQCACIAFBAnRqKAIAIgRFDQMgAUEBaiEBIARBMEEAIAQoAgBBA3FBA0cbaigCKCAARw0ACwwBCyABKAIAIQBBACEBA0AgACABQQJ0aigCACIERQ0CIAFBAWohASAEQVBBACAEKAIAQQNxQQJHG2ooAiggAkcNAAsLIAQPC0EAC1QBAX8gACgCACEBA0ACQCABLQAAIgFFBEAgABCLBiIBRQ0BCyABQf8BcUEJayIBQRdLQQEgAXRBn4CABHFFcg0AIAAgACgCAEEBaiIBNgIADAELCwvRAgEFfyMAQRBrIgUkAAJAAkAgABAhIAAQOE8EQCAAEDgiBEEBaiICIARBAXRBgAggBBsiAyACIANLGyECIAAQISEGAkAgAC0AD0H/AUYEQCAEQX9GDQMgACgCACEDIAJFBEAgAxAXQQAhAwwCCyADIAIQPSIDRQ0EIAIgBE0NASADIARqQQAgAiAEaxAzGgwBCyACQQEQGCIDIAAgBhAgGiAAIAY2AgQLIABB/wE6AA8gACACNgIIIAAgAzYCAAsgABAhIQICQCAAECUEQCAAIAJqIAE6AAAgACAALQAPQQFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAAKAIAIAJqIAE6AAAgACAAKAIEQQFqNgIECyAFQRBqJAAPC0GRtANB3v0AQc0AQZOzARAAAAsgBSACNgIAQej6BigCAEGp3QMgBRAdGhAmAAuhAgEDfyMAQSBrIgIkAAJAAkAgAARAIAAoAggiAUUNASABLQAARQ0CAn8CQCAAKAIUIgNFBEAgARDhBSIBRQRAIAIgACgCCDYCAEHCpgQgAhAnQQAMAwsgACABQbG+ARCgBCIDNgIUIANFBEBB5JQLKAIAEKMBIQAgAiABNgIUIAIgADYCEEGs7AMgAkEQahAnQQAMAwtBpIgLKAIAIgFBMkgNASAAQQE6ABFBAQwCCyADQQBBABDLARpBASAAKAIUDQEaQf+FAUG5vAFBiQVB4SgQAAALQaSICyABQQFqNgIAQQELIAJBIGokAA8LQb8mQbm8AUH0BEHhKBAAAAtBvZgBQbm8AUH1BEHhKBAAAAtB1cQBQbm8AUH2BEHhKBAAAAtXAQJ/AkAgAARAIAAtAABFDQFBoIgLKAIAIgEEfyABIABBgAQgASgCABEDAAVBAAsPC0GRmQFBubwBQeQEQcekARAAAAtB2cQBQbm8AUHlBEHHpAEQAAALRAECfwJAIAAoAgAgASgCACAAKAIEIgAgASgCBCICIAAgAkkiAxsQ1wEiAQ0AQQEhASAAIAJLDQBBf0EAIAMbIQELIAELHgAgAEUEQEGDzwFB7fsAQQhBs4gBEAAACyAAKAIECwgAQYADEOUKC50QAgZ/CnwjAEGAAWsiByQAAkAgAQRAIAEtAAAEQCAAKAI8IQggARDfCCIJRQRAIAEQkwhFIAhFcg0DIAgoAnQiBUUNAyAAIAEgAiADIAQgBREJAAwDCyAHIAApA7gDNwNIIAcgACkDsAM3A0AgB0FAayEBAkAgCUUEQCAHQn83AmAMAQsgASsDCCENIAcCfyAJKwMwRAAAAAAAAFJAoiAJKAJAIgq3Ig4gASsDACAKG6MiEJlEAAAAAAAA4EFjBEAgEKoMAQtBgICAgHgLNgJgIAcCfyAJKwM4RAAAAAAAAFJAoiAOIA0gChujIg2ZRAAAAAAAAOBBYwRAIA2qDAELQYCAgIB4CzYCZAsgBygCYCIKQQBMIAcoAmQiC0EATHENAiAHIAIpAwg3A3ggByACKQMANwNwIAcgAikDCDcDaCAHIAIpAwA3A2BBASADIANBAU0bIQMgBysDeCERIAcrA2ghEiAHKwNwIRAgBysDYCEOQQEhAQNAIAEgA0YEQCAHIBI5A2ggByAROQN4IBEgEqEhFSALtyENIAcgDjkDYCAHIBA5A3AgECAOoSEUIAq3IQ8CQCAFLQAARQ0AIBQgD6MhFgJAIAVB1fcAECpFDQAgFSANoyETAkAgBUHOHxAqBEAgBUH29gAQKkUNASAFEGpFDQMgEyAWZARAIBYgDaIhDQwDCyATIA2iIQ0gEyAPoiEPDAMLIBMgDaIhDQwCCyATIA2iIQ0LIBYgD6IhDwtBBCEBAkAgBi0AAEUNACAGQczsABAqRQRAQQAhAQwBCyAGQb6yARAqRQRAQQEhAQwBCyAGQf80ECpFBEBBAiEBDAELIAZB5e0AECpFBEBBAyEBDAELIAZBx7MBECpFDQAgBkGFNxAqRQRAQQUhAQwBCyAGQb3wABAqRQRAQQYhAQwBCyAGQYq2ARAqRQRAQQchAQwBC0EEQQggBkHwOhAqGyEBCyAPIBRjBEAgBwJ8AkAgAUEISw0AQQEgAXQiAkHJAHFFBEAgAkGkAnFFDQEgByAUIA+hIA6gIg45A2ALIA8gDqAMAQsgByAUIA+hRAAAAAAAAOA/oiIPIA6gIg45A2AgECAPoQsiEDkDcAsCQCANIBVjRQ0AAkACQAJAIAEOCQAAAAICAgEBAQILIAcgESANoTkDaAwCCyAHIA0gEqAiDzkDaCAHIA8gDaE5A3gMAQsgByARIBUgDaFEAAAAAAAA4D+iIg2hOQN4IAcgDSASoDkDaAsgAC0AmQFBIHFFBEAgByAHKQNoNwM4IAcgBykDYDcDMCAHQdAAaiIBIAAgB0EwahCYBiAHIAcpA1g3A2ggByAHKQNQNwNgIAcgBykDeDcDKCAHIAcpA3A3AyAgASAAIAdBIGoQmAYgByAHKQNYNwN4IAcgBykDUDcDcCAHKwNwIRAgBysDYCEOCyAOIBBkBEAgByAOOQNwIAcgEDkDYAsgBysDaCINIAcrA3giDmQEQCAHIA05A3ggByAOOQNoCyAIRQ0EIAAoAkghAiAHIAcpA3g3AxggByAHKQNwNwMQIAcgBykDaDcDCCAHIAcpA2A3AwAjAEHQAGsiASQAIAFCADcDSCABQgA3A0ACQAJAAkACQCAABEAgCUUNASAJKAIIIgNFDQIgAy0AAEUNAyAJKAIcIQMgASACNgI0IAEgAzYCMCABQUBrIQIjAEEQayIDJAAgAyABQTBqIgU2AgQgAyAFNgIMIAMgBTYCCAJAAkACQAJAQQBBAEGNMyAFEE4iBkEASA0AIAZBAWohBSAGIAIQOCACECFrIghPBEAgAiAFIAhrENEBCyACECEhCCAGIAIQJQR/IAIgCGoFIAIoAgAgCGoLIAVBjTMgAygCDBBOIgVHIAVBAE5xDQEgBUEATA0AIAIQJQRAIAVBgAJPDQMgAiACLQAPIAVqOgAPIAIQIUEQSQ0BQb+uA0GP/QBBxAFB2R0QAAALIAIgAigCBCAFajYCBAsgA0EQaiQADAILQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALIAIQISACEDhPBEAgAkEBENEBCyABQUBrIgIQISEDAkAgAhAlBEAgAiADakEAOgAAIAEgAS0AT0EBajoATyACECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgASgCQCADakEAOgAAIAEgASgCREEBajYCRAsCQCABQUBrECUEQCABQQA6AE8MAQsgAUEANgJECyABQUBrIgIQJSEDAkAgACgCAEEEIAIgASgCQCADGyICQQAQuQMiAwRAIAAgAygCECIDKAIMIgI2AlwgACADKAIANgJgDAELIAEgAjYCIEHD7AQgAUEgahAnIAAoAlwhAgsCQCACRQ0AIAIoAgAiAkUNACABIAcpAxg3AxggASAHKQMQNwMQIAEgBykDCDcDCCABIAcpAwA3AwAgACAJIAEgBCACEQgACyABLQBPQf8BRgRAIAEoAkAQFwsgAUHQAGokAAwEC0HBvgFB77wBQTFBqJ0BEAAAC0G/JkHvvAFBMkGonQEQAAALQb2YAUHvvAFBM0GonQEQAAALQdXEAUHvvAFBNEGonQEQAAALDAQFIBEgAiABQQR0aiIMKwMIIg0gDSARYxshESAQIAwrAwAiDyAPIBBjGyEQIBIgDSANIBJkGyESIA4gDyAOIA9jGyEOIAFBAWohAQwBCwALAAtB2cQBQbK5AUGtBUHplQEQAAALQZGZAUGyuQFBrAVB6ZUBEAAACyAHQYABaiQAC+EBAQZ/IABBMEEAIAAoAgBBA3EiAkEDRxtqIQUgAEFQQQAgAkECRxtqKAIoKAIQKALAASEGQQAhAANAIAYgA0ECdGooAgAiAgRAAkAgAkEwQQAgAigCAEEDcUEDRxtqKAIoKAIQKAL4ASIHIAUoAigoAhAoAvgBayABbEEATA0AIAIoAhAiBCgCCEUEQCAEKAJ4IgRFDQEgBCgCECgCCEUNAQsgAARAIABBMEEAIAAoAgBBA3FBA0cbaigCKCgCECgC+AEgB2sgAWxBAEwNAQsgAiEACyADQQFqIQMMAQsLIAALuhsDCH8JfAF+IwBBMGsiByQAIAJBBDYCICACIAE2AgAgASEEIwBBIGsiBiQAIAZCADcDGCAGQgA3AxADQCAELQAAIgMEQCAGQRBqIANBIGogAyADwEHBAGtBGkkbwBCUAiAEQQFqIQQMAQsLAkAgBkEQaiIEECUEQCAEIAQQISIDEMUCIgQNASAGIANBAWo2AgBB6PoGKAIAQandAyAGEB0aECYACyAGQRBqQQAQlAIgBigCECEECyAGQSBqJAAgBAJAIAAoAhAiBgRAIAQgBiAAKAIUQQRBygEQ4QMNAQsgASEEIAAoAhghCCMAQdABayIDJAAgAiAINgIgA0AgBCIAQQFqIQQgAC0AACIFQSBGDQALIANB/wE2AngCQAJAAkACQAJAAkACQCAFQSNGBEAgAyADQfgAajYCbCADIANB/ABqNgJoIAMgA0GAAWo2AmQgAyADQYQBajYCYCAAQdwSIANB4ABqEElBAkoNASAALQAAIQULAkACQCAFQf8BcUEjRw0AQSMhBSAAEDdBBEcNACADIANB/ABqNgJYIAMgA0GAAWo2AlQgAyADQYQBajYCUCAAQeoSIANB0ABqEElBA0YNASAALQAAIQULIAVB/wFxQS5HIAXAQTBrQQlLcQ0DIANCADcDyAEgA0IANwPAASAAIQYDQCAFQf8BcSIKRQ0DIANBwAFqQSAgBSAKQSxGG8AQlAIgBi0AASEFIAZBAWohBgwACwALIAMgAygChAEiAEEEdCAAcjYChAEgAyADKAKAASIAQQR0IAByNgKAASADIAMoAnwiAEEEdCAAcjYCfAtBACEAAkACQAJAAkAgCA4GAAYBAgkJAwsgAygChAG4RAAAAAAA4G9AoyINIAMoAoABuEQAAAAAAOBvQKMiDiADKAJ8uEQAAAAAAOBvQKMiDxAkECQhCyADKAJ4uEQAAAAAAOBvQKMhEgJAIAtEAAAAAAAAAABkRQ0AIAsgDSAOIA8QMhAyoSIQIAujIhFEAAAAAAAAAABkRQ0AAnwgCyAPoSAQoyIMIAsgDqEgEKMiE6EgC70iFCANvVENABogCyANoSAQoyINRAAAAAAAAABAoCAMoSAUIA69UQ0AGkQAAAAAAAAAACAPvSAUUg0AGiATRAAAAAAAABBAoCANoQtEAAAAAAAATkCiIgxEAAAAAAAAAABjRQ0AIAxEAAAAAACAdkCgIQwLIAIgEjkDGCACIAs5AxAgAiAROQMIIAIgDEQAAAAAAIB2QKM5AwAMCAsgAiADKAKEAUH//wNsQf8BbjYCACACIAMoAoABQf//A2xB/wFuNgIEIAIgAygCfEH//wNsQf8BbjYCCCACIAMoAnhB//8DbEH/AW42AgwMBwsgAiADKAKEAbhEAAAAAADgb0CjOQMAIAIgAygCgAG4RAAAAAAA4G9AozkDCCACIAMoAny4RAAAAAAA4G9AozkDECACIAMoAni4RAAAAAAA4G9AozkDGAwGCyADQZgCNgIEIANBhrwBNgIAQej6BigCAEHWsQQgAxAdGhBuAAsgA0KAgICAgICA+D83A6ABIANBwAFqEJ8BIAMgA0GgAWo2AkwgAyADQagBajYCSCADIANBsAFqNgJEIAMgA0G4AWo2AkBBuoQBIANBQGsQSUEDTgRAIAMgAysDuAFEAAAAAAAA8D8QMkQAAAAAAAAAABAkIgs5A7gBIAMgAysDsAFEAAAAAAAA8D8QMkQAAAAAAAAAABAkIgw5A7ABIAMgAysDqAFEAAAAAAAA8D8QMkQAAAAAAAAAABAkIg05A6gBIAMgAysDoAFEAAAAAAAA8D8QMkQAAAAAAAAAABAkIg45A6ABAkACQAJAAkACQAJAIAgOBgQAAQIFBQMLIAsgDCANIANBmAFqIANBkAFqIANBiAFqEIAGIAICfyADKwOYAUQAAAAAAOBvQKIiC0QAAAAAAADwQWMgC0QAAAAAAAAAAGZxBEAgC6sMAQtBAAs6AAAgAgJ/IAMrA5ABRAAAAAAA4G9AoiILRAAAAAAAAPBBYyALRAAAAAAAAAAAZnEEQCALqwwBC0EACzoAASACAn8gAysDiAFEAAAAAADgb0CiIgtEAAAAAAAA8EFjIAtEAAAAAAAAAABmcQRAIAurDAELQQALOgACIAICfyADKwOgAUQAAAAAAOBvQKIiC0QAAAAAAADwQWMgC0QAAAAAAAAAAGZxBEAgC6sMAQtBAAs6AAMMBAsgCyAMIA0gA0GYAWogA0GQAWogA0GIAWoQgAYgAgJ/IAMrA5gBRAAAAADg/+9AoiILmUQAAAAAAADgQWMEQCALqgwBC0GAgICAeAs2AgAgAgJ/IAMrA5ABRAAAAADg/+9AoiILmUQAAAAAAADgQWMEQCALqgwBC0GAgICAeAs2AgQgAgJ/IAMrA4gBRAAAAADg/+9AoiILmUQAAAAAAADgQWMEQCALqgwBC0GAgICAeAs2AgggAgJ/IAMrA6ABRAAAAADg/+9AoiILmUQAAAAAAADgQWMEQCALqgwBC0GAgICAeAs2AgwMAwsgCyAMIA0gA0GYAWogA0GQAWogA0GIAWoQgAYgAiADKwOYATkDACACIAMrA5ABOQMIIAIgAysDiAE5AxAgAiADKwOgATkDGAwCCyADQcwCNgI0IANBhrwBNgIwQej6BigCAEHWsQQgA0EwahAdGhBuAAsgAiAOOQMYIAIgDTkDECACIAw5AwggAiALOQMACyADQcABahBmQQAhAAwFCyADQcABahBmCyAAQe30ABBDRQ0BIABBz5EBEENFDQEgAEHyDRBDRQ0BIANCADcDyAEgA0IANwPAAQJAIAAtAABBL0YEQCAEQS8QkwEiBkUEQCAEIQAMAgsgBC0AAEEvRgRAAkBBuIgLKAIAIgRFDQAgBC0AAEUNAEGZlwMgBEEDEPgBRQ0AIANBwAFqIAQgAEECahDICCEADAMLIABBAmohAAwCCyAAIAZBAWpBmZcDIARBBBD4ARshAAwBC0G4iAsoAgAiBEUNACAELQAARQ0AQZmXAyAEQQMQ+AFFDQAgA0HAAWogBCAAEMgIIQALIAAQpAEhACADQcABahBmDAILIAIgAygChAE6AAAgAiADKAKAAToAASACIAMoAnw6AAIgAiADKAJ4OgADDAILIAAQpAEhAAsgAEUEQEF/IQAMAQsCQEG0iAsoAgAiBQRAIAUoAgAgABAqRQ0BC0G0iAsgAEHAqQhB0xNBDEHlARDhAyIFNgIACyAAEBcgBQRAQQAhAAJAAkACQAJAAkAgCA4GAAECAwYGBAsgAiAFLQAEuEQAAAAAAOBvQKM5AwAgAiAFLQAFuEQAAAAAAOBvQKM5AwggAiAFLQAGuEQAAAAAAOBvQKM5AxAgAiAFLQAKuEQAAAAAAOBvQKM5AxgMBQsgAiAFLQAHOgAAIAIgBS0ACDoAASACIAUtAAk6AAIgAiAFLQAKOgADDAQLIAIgBS0AB0GBAmw2AgAgAiAFLQAIQYECbDYCBCACIAUtAAlBgQJsNgIIIAIgBS0ACkGBAmw2AgwMAwsgAiAFLQAHuEQAAAAAAOBvQKM5AwAgAiAFLQAIuEQAAAAAAOBvQKM5AwggAiAFLQAJuEQAAAAAAOBvQKM5AxAgAiAFLQAKuEQAAAAAAOBvQKM5AxgMAgsgA0H8AjYCJCADQYa8ATYCIEHo+gYoAgBB1rEEIANBIGoQHRoQbgALQQEhAAJAAkACQAJAAkAgCA4GAAECAwUFBAsgAkIANwMAIAJCgICAgICAgPg/NwMYIAJCADcDECACQgA3AwgMBAsgAkGAgIB4NgIADAMLIAJCgICAgPD/PzcDCCACQgA3AwAMAgsgAkIANwMAIAJCgICAgICAgPg/NwMYIAJCADcDECACQgA3AwgMAQsgA0GZAzYCFCADQYa8ATYCEEHo+gYoAgBB1rEEIANBEGoQHRoQbgALIANB0AFqJAACQAJAIAAOAgIAAQsgB0IANwMoIAdCADcDICAHIAE2AhAgB0EgaiEAIwBBEGsiAiQAIAIgB0EQaiIENgIEIAIgBDYCDCACIAQ2AggCQAJAAkACQEEAQQBBgDQgBBBOIgZBAEgNACAGQQFqIQQgBiAAEDggABAhayIDTwRAIAAgBCADaxC4AgsgABAhIQMgBiAAECUEfyAAIANqBSAAKAIAIANqCyAEQYA0IAIoAgwQTiIERyAEQQBOcQ0BIARBAEwNACAAECUEQCAEQYACTw0DIAAgAC0ADyAEajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgBGo2AgQLIAJBEGokAAwCC0HNlgNBj/0AQb8BQdkdEAAAC0HSyQFBj/0AQcIBQdkdEAAACyAAECEgABA4TwRAIABBARC4AgsgB0EgaiIAECEhAgJAIAAQJQRAIAAgAmpBADoAACAHIActAC9BAWo6AC8gABAhQRBJDQFBv64DQY/9AEGIAkG4sgEQAAALIAcoAiAgAmpBADoAACAHIAcoAiRBAWo2AiQLAkAgB0EgahAlBEAgB0EAOgAvDAELIAdBADYCJAsgB0EgaiIAECUhAiAAIAcoAiAgAhsQtwgEQCAHIAE2AgBB5NMEIAcQJwsgBy0AL0H/AUcNASAHKAIgEBcMAQtB1+gEQQAQMQsQFyAHQTBqJAALIgEBfwJAIAAoAjwiAUUNACABKAJUIgFFDQAgACABEQEACwvhAQEGfyAAQVBBACAAKAIAQQNxIgJBAkcbaiEFIABBMEEAIAJBA0cbaigCKCgCECgCyAEhBkEAIQADQCAGIANBAnRqKAIAIgIEQAJAIAJBUEEAIAIoAgBBA3FBAkcbaigCKCgCECgC+AEiByAFKAIoKAIQKAL4AWsgAWxBAEwNACACKAIQIgQoAghFBEAgBCgCeCIERQ0BIAQoAhAoAghFDQELIAAEQCAAQVBBACAAKAIAQQNxQQJHG2ooAigoAhAoAvgBIAdrIAFsQQBMDQELIAIhAAsgA0EBaiEDDAELCyAACyQBAX8CQCAAKAI8IgJFDQAgAigCUCICRQ0AIAAgASACEQQACwsiAQF/AkAgACgCPCIBRQ0AIAEoAjQiAUUNACAAIAERAQALC0oCAXwBfwJAIAEoAhAiASsDECICIAAoAhAiACsDEGZFDQAgAiAAKwMgZUUNACABKwMYIgIgACsDGGZFDQAgAiAAKwMoZSEDCyADC4wEAQZ/IwBBIGsiBCQAAkACQAJAIAFEAAA0JvVrDMNjBEAgAEGAqQgQ3wQMAQsgAUQAADQm9WsMQ2QEQCAAQYGpCBDfBAwBCyAEIAE5AxAgAEGFhgEgBEEQahDeBCAAEOcEIQUgABAhIQICQANAIAIiA0UNASAFIAJBAWsiAmotAABBLkcNAAsgABAhIQIDQCACQQFrIQcgAiADRwRAIAUgB2otAABBMEcNAgsCQCAAECUEQCAALQAPIgZFDQUgACAGQQFrOgAPDAELIAAgACgCBEEBazYCBAsgAiADRyAHIQINAAsgABAhIgJBAkkNACACIAVqIgJBAmsiAy0AAEEtRw0AIAJBAWstAABBMEcNACADQTA6AAAgABAlBEAgAC0ADyICRQ0EIAAgAkEBazoADwwBCyAAIAAoAgRBAWs2AgQLAkAgABAlBEAgACAAECEiAxDFAiICDQEgBCADQQFqNgIAQej6BigCAEGp3QMgBBAdGhAmAAsgAEEAEJQCIAAoAgAhAgsgAEIANwIAIABCADcCCAJAIAJBo5gDELoCBEAgAiACQQFqIAIQNxCPARoMAQsgAkGimAMQugJFDQAgAkEBaiIDIAJBAmogAxA3EI8BGgsgACACEN8EIAIQFwsgBEEgaiQADwtBkokDQY/9AEHkAkHqKhAAAAtBkokDQY/9AEH6AkHqKhAAAAuHAQEBfyAALQCZAUEEcUUEQAJAIAAoAkwiAUUNACABKAIIIgFFDQAgACABEQEADwsgABCZBhoCQCAAKAIgRQ0AIAAoAiQiAUHw+gYoAgBGDQAgAC0AkAENACABBEAgARDfAyAAQQA2AiQLIABBADYCIAsPC0Gj0gNBACAAKAIMKAIQEQQAECYAC4cCAQN/IwBBEGsiAyQAIAMgAjYCDCADIAI2AggCQAJAAkBBAEEAIAEgAhBOIgRBAEgEQCAEIQIMAQsgBEEBaiECIAQgABA4IAAQIWsiBU8EQCAAIAIgBWsQ0QELIAAQISEFIAQgABAlBH8gACAFagUgACgCACAFagsgAiABIAMoAgwQTiICRyACQQBOcQ0BIAJBAEwNACAAECUEQCACQYACTw0DIAAgAC0ADyACajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAmo2AgQLIANBEGokACACDwtBzZYDQY/9AEG/AUHZHRAAAAtB0skBQY/9AEHCAUHZHRAAAAvGAgEFfwJAIAEoAhAiAS0ArAFFBEAgASgC6AEiAyEEDAELIAEoAsgBKAIAKAIQKAJ4IgFBUEEAIAEoAgBBA3EiA0ECRxtqKAIoKAIQKALoASEEIAFBMEEAIANBA0cbaigCKCgCECgC6AEhAwsgAigCECIBLQCsAUUEQCABKALoASIBQQAgACABRxsiAEEAIAAgBEcbQQAgACADRxtBACAAGw8LAkACQCABKALIASgCACgCECgCeCIGQTBBACAGKAIAQQNxIgdBA0cbaigCKCgCECgC6AEiAUEAIAAgAUcbIgVFIAMgBUZyIAQgBUZyRQRAIAUgAhDqCA0BCyAGQVBBACAHQQJHG2ooAigoAhAoAugBIgFBACAAIAFHGyIARSAAIANGcg0BQQAhASAAIARGDQAgAEEAIAAgAhDqCBshAQsgAQ8LQQALZwECfyMAQRBrIgMkAANAAkAgAS0AACICQdwARwRAIAIEQCACwCICQQBOBEAgACACEGIMAwsgAyACNgIAIABBk98AIAMQHAwCCyADQRBqJAAPCyAAQfHEARAZGgsgAUEBaiEBDAALAAtLACAAQQEgAUEAELkDIgFFBEBB5wcPCyAAIAEoAhAiASgCBDYCsAEgACABKAIMNgKkASAAIAEoAgA2AqgBIAAgASgCEDYCrAFBrAILnwQBCH8gACgCECgCxAEgASgCECIIKAL0AUEGdGohCSAIKAL4ASIKIQcCQANAAkAgBCAHaiIHQQBIDQAgByAJKAIATg0AAkACQCAJKAIEIAdBAnRqKAIAIgsoAhAiAS0ArAEOAgQAAQsgASgCeA0DCyABKAL4ASEMAkAgASgCzAFBAUcEQCAIKALMAUEBRw0EDAELIANFDQAgASgCyAEoAgAhAEEAIQYgAyEFA0AgBkECRg0BIABBUEEAIAAoAgBBA3FBAkcbaigCKCIAIAVBUEEAIAUoAgBBA3FBAkcbaigCKCIFRg0BIAogDEggACgCECIAKAL4ASAFKAIQIgUoAvgBTEYNAyAAKALMAUEBRw0BIAAtAKwBRQ0BIAUoAswBQQFHDQEgBS0ArAFFDQEgACgCyAEoAgAhACAGQQFqIQYgBSgCyAEoAgAhBQwACwALIAJFDQIgASgCxAFBAUcNAiABKALAASgCACEBQQAhBSACIQADQCAFQQJGDQMgAUEwQQAgASgCAEEDcUEDRxtqKAIoIgEgAEEwQQAgACgCAEEDcUEDRxtqKAIoIgZGDQMgCiAMSCABKAIQIgAoAvgBIAYoAhAiBigC+AFMRg0CIAAoAsQBQQFHDQMgAC0ArAFFDQMgBigCxAFBAUcNAyAGLQCsAUUNAyAAKALAASgCACEBIAVBAWohBSAGKALAASgCACEADAALAAsLQQAhCwsgCwu4AQIDfwF8IwBBMGsiBCQAA0AgAiAFRgRAIAMEQCABKwMAIQcgBCABKwMIOQMIIAQgBzkDACAAQdGdAyAEEBwLIABB4vQEEBkaIARBMGokAAUCQCAFRQRAIAErAwAhByAEIAErAwg5AxggBCAHOQMQIABBo50DIARBEGoQHAwBCyABIAVBBHRqIgYrAwAhByAEIAYrAwg5AyggBCAHOQMgIABB0Z0DIARBIGoQHAsgBUEBaiEFDAELCwtzAQF/IAAQISAAEDhPBEAgAEEBENEBCyAAECEhAQJAIAAQJQRAIAAgAWpBADoAACAAIAAtAA9BAWo6AA8gABAhQRBJDQFBv64DQY/9AEGIAkG4sgEQAAALIAAoAgAgAWpBADoAACAAIAAoAgRBAWo2AgQLCyQAIAAgASACQQBBARBSIgBB+SVBuAFBARAuGiADIAAQ0gUgAAuuBAEFfyMAQSBrIgIkACAAIAEQHkEBEHMiBUGGJkHAAkEBEC4aIAEgBRDSBQJAIAEQ/gJBAkcNACACQgA3AxggAkIANwMQIAIgASgCECgCeCgCADYCACACQRBqIQAjAEEQayIBJAAgASACNgIEIAEgAjYCDCABIAI2AggCQAJAAkACQEEAQQBBjAggAhBOIgZBAEgNACAGQQFqIQMgBiAAEDggABAhayIETwRAIAAgAyAEaxDrAQsgABAhIQQgBiAAECUEfyAAIARqBSAAKAIAIARqCyADQYwIIAEoAgwQTiIDRyADQQBOcQ0BIANBAEwNACAAECUEQCADQYACTw0DIAAgAC0ADyADajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgA2o2AgQLIAFBEGokAAwCC0HNlgNBj/0AQb8BQdkdEAAAC0HSyQFBj/0AQcIBQdkdEAAACyAAECEgABA4TwRAIABBARDrAQsgAkEQaiIAECEhAQJAIAAQJQRAIAAgAWpBADoAACACIAItAB9BAWo6AB8gABAhQRBJDQFBv64DQY/9AEGIAkG4sgEQAAALIAIoAhAgAWpBADoAACACIAIoAhRBAWo2AhQLAkAgAkEQahAlBEAgAkEAOgAfDAELIAJBADYCFAsgAkEQaiIAECUhASAFQarwACAAIAIoAhAgARsQ5QEgAi0AH0H/AUcNACACKAIQEBcLIAJBIGokACAFC4ACAgF/BHwjAEEgayIHJAAgByAAIAEgA0EAIAQQiQMgBSAHKQMYNwMYIAUgBykDEDcDECAFIAcpAwg3AwggBSAHKQMANwMAIAVBATYCMCAFKwMQIQggBSsDACEJAkAgBgRAIAIgBEECIAVBABDnBQwBCyACIARBAiAFQQAQ5gULAkAgCCAJZEUNACADKAIQIgErAxggACgCECgCxAEgASgC9AFBBnRqKwMYoSIKIAVBOGoiASAFKAI0IgBBBXRqQRhrKwMAIgtjRQ0AIAUgAEEBajYCNCABIABBBXRqIgAgCzkDGCAAIAg5AxAgACAKOQMIIAAgCTkDAAsgB0EgaiQAC78BAQN/IwBBIGsiAiQAAkACQAJAAkACQCABKAIgQQFrDgQBAgIAAgsgASgCACIBQan5BBBDDQIgAEGc+QQQGRoMAwsgAS0AA0UEQCAAQZz5BBAZGgwDCyABLQAAIQMgAS0AASEEIAIgAS0AAjYCGCACIAQ2AhQgAiADNgIQIABBzhIgAkEQahAcDAILIAJBhgE2AgQgAkGeuwE2AgBB6PoGKAIAQdaxBCACEB0aEG4ACyAAIAEQGRoLIAJBIGokAAsLACAAQbefBBAZGgsnAQF/IwBBEGsiAiQAIAJBADYCDCABIAJBDGogABC5BCACQRBqJAALJQEBfyMAQRBrIgIkACACIAE2AgAgAEG69gMgAhAcIAJBEGokAAsNACAAIAFB9oYBEO4KC4gBAgN/AXwjAEEgayIEJAADQCACIAVGBEAgAwRAIAErAwAhByAEIAErAwg5AwggBCAHOQMAIABB9oYBIAQQHAsgAEHi9AQQGRogBEEgaiQABSABIAVBBHRqIgYrAwAhByAEIAYrAwg5AxggBCAHOQMQIABB9oYBIARBEGoQHCAFQQFqIQUMAQsLC5oCAgR/A3wgAEFQQQAgACgCAEEDcUECRxtqIQJBACEAA0ACQCACKAIoIgQoAhAtAKwBQQFHDQAgBEG89QcoAgARAgANACAAIAEoAlAiAiAAIAJLGyEFA0AgACAFRg0BIAQoAhAiAisDGCIGIAEoAlQgAEEFdGoiAysDCGMEQCAAQQFqIQAMAQsLAkAgAysDGCAGYw0AIAMrAxAhBiADKwMAIQcgAigCeARAIAIgBjkDECACIAYgB6E5A1ggAiAGIAIrA2CgIAahOQNgDAELIAIgByAGoEQAAAAAAADgP6IiCDkDECACIAYgCKE5A2AgAiAIIAehOQNYCyACKALIASgCACICQVBBACACKAIAQQNxQQJHG2ohAgwBCwsLiwEBA38jAEEQayIEJAAgAEGAxQFBABAcIAFBACABQQBKGyEFQQAhAQNAIAEgBUcEQCABBEAgAEG+mANBABAcCyAEIAIgAUEDdGoiBioCALs5AwAgAEGEvwMgBBAcIAYoAgQgAyAAEJYCIABB/QAQYiABQQFqIQEMAQsLIABBqMAEQQAQHCAEQRBqJAALNQAgACABQQAgAhCBCSAAEHIhAANAIAAEQCABQfbfBBAZGiAAIAEgAhD/CCAAEHEhAAwBCwsLnAIBBX8jAEEgayIEJAACQAJAAkAgABA0IABGDQAgAEGxqQFBABBrIAE2AgggABAeIgNFDQEgAUEBaiEBIANBtDdBBxDXAQ0AIAAQHiEDIABBsakBQQAQaygCCCEGIAIgA0GABCACKAIAEQMAIgUEQCAFKAIMIAZGDQEgBCADNgIQQa/tBCAEQRBqECcMAQtBAUEQEJYEIQUgAxCkASIHRQ0CIAUgBjYCDCAFIAc2AgggAiAFQQEgAigCABEDABoLIAAQciEAA0AgAARAIAAgASACEIAJIQEgABBxIQAMAQsLIARBIGokACABDwtBoc8BQdb8AEEMQfv2ABAAAAsgBCADEDdBAWo2AgBB6PoGKAIAQandAyAEEB0aECYAC84OAQh/IwBBsAFrIgYkACACBEBB9IUIQezJCigCABB/IQogAEEBQbGpAUEMQQAQrgIgAEECQbGpAUEMQQAQrgIgAEEAQbGpAUF0QQAQrgIgAEEAIAoQgAkhCyAAEBohCANAIAgEQAJAIAgoAhAtAIYBQQFGBEAgCiAIEB5BgAQgCigCABEDACIFRQRAQX8hBAwCCyAFKAIMIQQMAQsgCSALaiEEIAlBAWohCQsgCEGxqQFBABBrIAQ2AgggACAIECkhBANAIAQEQCAEQbGpAUEAEGsgBzYCCCAHQQFqIQcgACAEECwhBAwBCwsgACAIEBshCAwBCwsgChB5GgsgAyADKAIAIgVBAWo2AgAgASAFEDsgAUGTywMQGRogABAeIAEgAygCABA7IAFBnr8DEBkaIAMgARCWAgJAIAIEQCABQfbfBBAZGiABIAMoAgAQOyAGQd+KAUH6kwEgABD6ARs2ApABIAFB59wEIAZBkAFqEBwgASADKAIAEDsgBkHfigFB+pMBIAAQzwUbNgKAASABQZQ0IAZBgAFqEBwgACABIAMQ5QQgAUH23wQQGRogASADKAIAEDsgBiALNgJwIAFBjbIBIAZB8ABqEBwMAQsgACABIAMQ5QQgAUH23wQQGRogASADKAIAEDsgBiAAQbGpAUEAEGsoAgg2AqABIAFBobIBIAZBoAFqEBwLAkAgABByIgVFDQAgAUH23wQQGRogAyADKAIAIgRBAWo2AgAgASAEEDsCQCACBEAgAUGzwAQQGRoMAQsgAUHBwAQQGRogASADKAIAEDsLQeX0BCEHIAUhBANAIAQEQCABIAcQGRoCQCACBEAgBCABIAMQ/wgMAQsgBiAEQbGpAUEAEGsoAgg2AmAgAUG1sgEgBkHgAGoQHAtB9t8EIQcgBBBxIQQMAQsLIAINACADIAMoAgBBAWs2AgAgAUHi9AQQGRogASADKAIAEDsgAUHvxAEQGRoLIAAQGiEEAkACQAJAA0AgBARAIAQoAhAtAIYBQQFHDQIgACAEEBshBAwBCwsgBUUgAkVyDQIMAQsgAUH23wQQGRoCQCACBEAgBQ0BIAMgAygCACIFQQFqNgIAIAEgBRA7IAFBs8AEEBkaDAELIAMgAygCACIFQQFqNgIAIAEgBRA7IAFB3cAEEBkaIAEgAygCABA7C0Hl9AQhByAAEBohBANAIARFDQECQCAEKAIQLQCGAQ0AIAEgBxAZGiACBEAgAyADKAIAIgVBAWo2AgAgASAFEDsgAUGTywMQGRogASADKAIAEDsgBiAEQbGpAUEAEGsoAgg2AkAgAUGm3QQgBkFAaxAcIAEgAygCABA7IAFBnr8DEBkaIAQQHiADIAEQlgIgBCABIAMQ5QQgAUHi9AQQGRogAyADKAIAQQFrIgU2AgAgASAFEDsgAUGwCBAZGkH23wQhBwwBCyAGIARBsakBQQAQaygCCDYCUCABQbWyASAGQdAAahAcQb6YAyEHCyAAIAQQGyEEDAALAAsgAyADKAIAQQFrNgIAIAFB4vQEEBkaIAEgAygCABA7IAFB78QBEBkaC0EAIQcgABAaIQgDQAJAIAhFBEAgB0UNAUEAIQggB0EEEJYEIQkgABAaIQUDQCAFRQRAIAkgB0EEQdwAEJQBIAFB9t8EEBkaIAMgAygCACIAQQFqNgIAIAEgABA7IAFB0cAEEBkaIAJFBEAgASADKAIAEDsLQQAhBANAIAQgB0YEQCAJEBcgAyADKAIAQQFrNgIAIAFB4vQEEBkaIAEgAygCABA7IAFB78QBEBkaDAUFAkAgBgJ/AkACQCAEBEAgCSAEQQJ0aiEAIAJFDQIgAUH23wQQGRogACgCACEADAELIAkoAgAiACACRQ0CGgsgAyADKAIAIgVBAWo2AgAgASAFEDsgAUGTywMQGRogASADKAIAEDsgBiAAQbGpAUEAEGsoAgg2AiAgAUGm3QQgBkEgahAcIAEgAygCABA7IAYgAEEwQQAgACgCAEEDcUEDRxtqKAIoQbGpAUEAEGsoAgg2AhAgAUGZ3QQgBkEQahAcIAEgAygCABA7IAYgAEFQQQAgACgCAEEDcUECRxtqKAIoQbGpAUEAEGsoAgg2AgAgAUGtsgEgBhAcIAAgASADEOUEIAFB4vQEEBkaIAMgAygCAEEBayIANgIAIAEgABA7IAFBsAgQGRoMAgsgAUG+mAMQGRogACgCAAtBsakBQQAQaygCCDYCMCABQbWyASAGQTBqEBwLIARBAWohBAwBCwALAAsgACAFECkhBANAIAQEQCAJIAhBAnRqIAQ2AgAgCEEBaiEIIAAgBBAsIQQMAQUgACAFEBshBQwCCwALAAsACyAAIAgQKSEEA0AgBARAIAdBAWohByAAIAQQLCEEDAEFIAAgCBAbIQgMAwsACwALCyABQeL0BBAZGiADIAMoAgBBAWsiADYCACABIAAQOyABQbnKA0GwCCACGxAZGiAGQbABaiQAC4MBAQF/IAAgACgCAEF3cTYCACAAEHIhAgNAIAIEQCACQQAQggkgAhBxIQIMAQsLAkAgAUUNACAAEBohAQNAIAFFDQEgASABKAIAQXdxNgIAIAAgARApIQIDQCACBEAgAiACKAIAQXdxNgIAIAAgAhAsIQIMAQsLIAAgARAbIQEMAAsACwuIBwIEfwJ8IwBB4ABrIgYkACABQX8Q5wghByABQQEQ5wghAQJAIAcEQCAHEKoDRQ0BCyABBEAgARCqA0UNAQsgAkF/EOQIIQEgAkEBEOQIIQIgAQRAIAEQqgNFDQELIAIEQCACEKoDRQ0BCyADQThqIQdBACEBA0AgAygCNCABTARAIAAoAlAiAkEBaiIHIAUQ4QhqIghBA2shCUEAIQECQAJAA0ACQCAFEOEIIAFNBEAgBEE4aiEDIAQoAjQhBQwBCyAFRQ0DIAUoAgQgAU0NAiAGIAUoAgAgAUEFdGoiAykDGDcDOCAGIAMpAxA3AzAgBiADKQMINwMoIAYgAykDADcDICAAIAZBIGoQ/AEgAUEBaiEBDAELCwNAIAVBAExFBEAgBiADIAVBAWsiBUEFdGoiASkDGDcDWCAGIAEpAxA3A1AgBiABKQMINwNIIAYgASkDADcDQCAAIAZBQGsQ/AEMAQsLIAIgCEECayIBIAEgAkkbIQQgAiEBA0AgASAERgRAQQEgACgCUCIBIAFBAU0bQQFrIQhBACEFA0AgBSIBIAhGDQcgACgCVCIEIAFBAWoiBUEFdGohAyAEIAFBBXRqIQQgASAHa0EBcSABIAdJIAEgCUtyckUEQCAEKwMARAAAAAAAADBAoCIKIAMrAxBkBEAgAyAKOQMQCyAEKwMQRAAAAAAAADDAoCIKIAMrAwBjRQ0BIAMgCjkDAAwBCyABIAJrQQFxIAUgB0kgASAJT3JyDQAgAysDECIKIAQrAwBEAAAAAAAAMECgYwRAIAQgCkQAAAAAAAAwwKA5AwALIAMrAwAiCiAEKwMQRAAAAAAAADDAoGRFDQAgBCAKRAAAAAAAADBAoDkDEAwACwAFIAAoAlQgAUEFdGoiAysDACEKAkACQCABIAdrQQFxRQRAIAogAysDECILZg0BDAILIAMrAxAiCyAKRAAAAAAAADBAoGNFDQELIAMgCiALoEQAAAAAAADgP6IiCkQAAAAAAAAgQKA5AxAgAyAKRAAAAAAAACDAoDkDAAsgAUEBaiEBDAELAAsAC0H9qgNB7fsAQQhBjyIQAAALQYPPAUHt+wBBCEGPIhAAAAUgBiAHIAFBBXRqIgIpAxg3AxggBiACKQMQNwMQIAYgAikDCDcDCCAGIAIpAwA3AwAgACAGEPwBIAFBAWohAQwBCwALAAsgBkHgAGokAAt/AQJ/IwBBIGsiBCQAIAAoAhAoAgwgBCADNgIUIAQgATYCEEECdEGQ+ARqKAIAIgFBwroDIARBEGoQjAFBACEAA0AgACADRgRAIARBIGokAAUgBCACIABBBHRqIgUpAwg3AwggBCAFKQMANwMAIAEgBBDTAiAAQQFqIQAMAQsLC40FAgN/BnwjAEGQAWsiBCQAAkACQEHg7gooAgAvAShBDU0EQCAAEKQGDAELIAAoAhAiBSgCiAG3RBgtRFT7IQlAokQAAAAAAIBmQKMhByAEQgA3A0ggBEIANwNAAkAgAUECRgRAIAIgBEHwAGogAyAHQQIQgwggBEFAayICQdsAEM8BIAQgBCkDeDcDGCAEIAQpA3A3AxAgAiAEQRBqENMCIAQgBCkDiAE3AwggBCAEKQOAATcDACACIAQQ0wIMAQsgAiAEQfAAaiADRAAAAAAAAAAAQQMQgwggBCsDcCEIIAQrA4gBIQkCfCAFKAKIAUUEQCAJRAAAAAAAANA/oiEKIAQrA3giCyEMIAgMAQsgCUQAAAAAAADQP6IiCiAHEFeiIAQrA3giC6AhDCAKIAcQRKIgCKALIQcgBCAMOQNoIAQgCzkDWCAEIAc5A2AgBCAIOQNQIARBQGsiAkEoEM8BIAQgBCkDaDcDOCAEIAQpA2A3AzAgAiAEQTBqENMCIAIgChCXAiAEIAQpA1g3AyggBCAEKQNQNwMgIAIgBEEgahDTAiACIAkQlwILIARBQGsiBkG6vwMQiAMgBUE4aiECIARBQGsiAwJ8IAUrA5ABIgdEAAAAAAAAAABkBEAgBiAHIAIQogYgBSsDkAEMAQsgBEFAa0QAAAAAAAAAACACEKIGRAAAAAAAAPA/CyAFQeAAahCiBgJAIAMQIUUNACADECUEQCAELQBPIgJFDQMgBCACQQFrOgBPDAELIAQgBCgCREEBazYCRAsgBEFAayICQd0AQSkgAUECRhsQzwEgAEHQvQMgAhC8ARDSAiACEGYLIARBkAFqJAAPC0GSiQNBj/0AQfYAQYvZABAAAAuEAQEGfyMAQRBrIgEkAANAAkACQCAAIAJqLQAAIgQEQCAEwCIFQTBrQQlLDQIgA0H//wNxIgYgBEF/c0HxAXJB//8DcUEKbk0NASABIAA2AgBBmv8AIAEQJwsgAUEQaiQAIANB//8DcQ8LIAUgBkEKbGpB0P8DaiEDCyACQQFqIQIMAAsACzoBAn8jAEEQayIDJAAgAhA3IQQgAyACNgIIIAMgBDYCBCADIAE2AgAgAEH4ugMgAxCMASADQRBqJAALzQEBAn8gACABKAIgIANBBXRqIgRBEGopAwA3AxAgACAEKQMANwMAIAAgBCkDGDcDGCAAIAQpAwg3AwggACsDACAAKwMQYQRAIAIoAhAoAsQBIANBBnRqIgIoAgQoAgAhAyACKAJEKAIAIQUgACABKwMAOQMAIAAgBSgCECsDGCACKwNYoDkDCCAAIAErAwg5AxAgACADKAIQKwMYIAIrAxChOQMYIAQgACkDEDcDECAEIAApAwg3AwggBCAAKQMANwMAIAQgACkDGDcDGAsL6gEBCH8gAEHnowMQtwIhAiABKAIAIQYjAEEQayIDJAAgA0EIaiIEIAIQrQUaAkAgBC0AAEUNACACIAIoAgBBDGsoAgBqIgUoAgQaIANBBGoiBCAFEEsgBBCVDCEFIAQQSCADIAIQlAwhByACIAIoAgBBDGsoAgBqIggQkwwhCSADIAUgBygCACAIIAkgBiAFKAIAKAIQEQcANgIEIAQQqwVFDQAgAiACKAIAQQxrKAIAakEFEK4FCyADQQhqEKwFIANBEGokACACQdPaARC3AiABKAIgKwMQIAErAxigEKQHQaGjAxC3AhogAAstAQF/IAAoAgAiAQRAIAAgATYCBCAAKAIIGiABEBcgAEEANgIIIABCADcCAAsLGQAgAEGk+gc2AgAgAEEkahDsARogABCoBguBAwIKfwF8IwBBIGsiAiQAIABBCGohBCAAKAIEIQEDQCABIARHBEAgASgCECIDIAMQlgkiCzkDICADIAsgAysDGKM5AxAgARCXASEBDAELCyAAQQA2AiAgAEEkaiEHIABBCGohCCAAQQRqIQQgACgCBCEDAkADQCADIAhHBEAgAiADKAIQEJIJIgE2AhwCQCABRQ0AIAErAxBESK+8mvLXer5jRQ0AIAAgACgCIEEBajYCICABKAIAKAIgIQUgAkEANgIYIAJBADYCFCABKAIAKAIgIAEoAgQoAiBHDQMgBSsDECELIAUgAkEYaiIJIAJBFGoiCiABEKoGIAIoAhQiASALOQMQIAIoAhgiBiALOQMQIAYgCyAGKwMYojkDICABIAErAxAgASsDGKI5AyAgAkEMaiIBIAQgCRC6AyABIAQgChC6AyAFQQE6ACggByACQRxqELYBCyADEJcBIQMMAQsLIAQQ6QQgAkEgaiQADwtBqvQAQfLYAEHvAUHJLRAAAAuOAQIDfAR/IABBBGohBiAAKAIAIQADfCAAIAZGBHwgAQUgAUQAAAAAAAAAACEBIAAoAhAiBCgCBCEHIAQoAgAhBAN8IAQgB0YEfCABBSAEKAIAIgUrAxAgBSgCICsDECAFKwMYoCAFKwMIoSICoiACoiABoCEBIARBBGohBAwBCwugIQEgABCXASEADAELCwuaAgIGfwN8QdTtCkHU7QooAgBBAWoiAjYCACAAIAI2AiwgABCyBgNAAkAgABCwBiICRQ0AIAIQmAJEAAAAAAAAAABjRQ0AIABBMGoQggQgAigCACIBKAIgIgMoAjAgAygCNEYEQCADELIGIAIoAgAhAQsgAisDCCEHIAErAxghCCACKAIEKwMYIQkgACgCACEBIAAoAgQhBCADKAIAIQUgAygCBCEGQdTtCkHU7QooAgBBAWo2AgAgACADIAQgAWsgBiAFa0kiBBshASADIAAgBBsiACABIAIgCSAIoSAHoSIHmiAHIAQbEOwEIAAQsAYaIAEQsAYaIABBMGogAUEwahCTCSAAQdTtCigCADYCLCABQQE6ACgMAQsLC+wBAQN/IwBBEGsiAyQAIAMgATYCDCABQQE6ACQgASgCOCEEIAEoAjQhAQNAIAEgBEcEQCABKAIAKAIEIgUtACRFBEAgACAFIAIQjwkLIAFBBGohAQwBCwsjAEEQayIBJAAgAUEBNgIIIAFBDBCCATYCDCABKAIMIgBBADYCBCAAQQA2AgAgACADKAIMNgIIIAEoAgwhACABQQA2AgwgASgCDCIEBEAgASgCCBogBBAXCyABQRBqJAAgACACNgIAIAAgAigCBCIBNgIEIAEgADYCACACIAA2AgQgAiACKAIIQQFqNgIIIANBEGokAAsZACAAQTxqEOwBGiAAQTBqEOwBGiAAEOwBC34BAn8CQCADQQJIDQAgACADQQJrQQF2IgNBAnRqIgQoAgAgAUEEayIBKAIAIAIoAgARAABFDQAgASgCACEFA0ACQCABIAQiASgCADYCACADRQ0AIAAgA0EBa0EBdiIDQQJ0aiIEKAIAIAUgAigCABEAAA0BCwsgASAFNgIACwtEAQF/IwBBEGsiASQAIAFBADYCDCAAIAAoAgAoAgBBABDrBCAAIAAoAgAoAgBBACABQQxqEKwGGiABKAIMIAFBEGokAAvNBAEJfyAAIgIoAgQhBiABKAIAIgAhAyABKAIEIQEjAEEgayIJJAACQCABIABrQQJ1IgRBAEwNACAEIAIoAgggAigCBCIAa0ECdUwEQAJAIAQgACAGayIFQQJ1IghMBEAgAyAEQQJ0aiEHDAELIAEgAyAFaiIHayEFIAEgB0cEQCAAIAcgBRCPARoLIAIgACAFajYCBCAIQQBMDQILIAAhBSAGIAIoAgQiASAGIARBAnRqIgprIghqIQQgASEAA0AgBCAFTwRAIAIgADYCBCABIApHBEAgASAIayAGIAgQjwEaCwUgACAEKAIANgIAIABBBGohACAEQQRqIQQMAQsLIAMgB0YNASAGIAMgByADaxCPARoMAQsgCUEMaiACIAAgAigCAGtBAnUgBGoQ8QQgBiACKAIAa0ECdSACQQhqELcGIgEoAggiACAEQQJ0aiEFA0AgACAFRwRAIAAgAygCADYCACADQQRqIQMgAEEEaiEADAELCyABIAA2AgggAigCACEFIAYhACABKAIEIQMDQCAAIAVHBEAgA0EEayIDIABBBGsiACgCADYCAAwBCwsgASADNgIEIAIoAgQiBCAGayEAIAEoAgghBSAEIAZHBEAgBSAGIAAQjwEaIAEoAgQhAwsgASAAIAVqNgIIIAIoAgAhACACIAM2AgAgASAANgIEIAIoAgQhACACIAEoAgg2AgQgASAANgIIIAIoAgghACACIAEoAgw2AgggASAANgIMIAEgASgCBDYCACABELYGCyAJQSBqJAAgAhCVCQtjAgJ/AXwgAigCBCIDKwMYIAIoAgAiBCsDGKEgAisDCKEhBSADKAIgIQMgBCgCICEEIAAoAgQgACgCAGsgASgCBCABKAIAa0kEQCADIAQgAiAFEOwEDwsgBCADIAIgBZoQ7AQL4gIBCX8gACgCACEFIAAoAgQhACMAQRBrIgMkACADQccANgIMAkAgACAFa0ECdSIGQQJIDQAgBkECa0EBdiEIA0AgCEEASA0BIAUgCEECdGohBAJAIAZBAkgNACAGQQJrQQF2IgkgBCAFayIAQQJ1SA0AIAUgAEEBdSIBQQFyIgJBAnRqIQAgBiABQQJqIgFKBEAgASACIAAoAgAgACgCBCADKAIMEQAAIgEbIQIgAEEEaiAAIAEbIQALIAAoAgAgBCgCACADKAIMEQAADQAgBCgCACEBA0ACQCAEIAAiBCgCADYCACACIAlKDQAgBSACQQF0IgdBAXIiAkECdGohACAGIAdBAmoiB0oEQCAHIAIgACgCACAAKAIEIAMoAgwRAAAiBxshAiAAQQRqIAAgBxshAAsgACgCACABIAMoAgwRAABFDQELCyAEIAE2AgALIAhBAWshCAwACwALIANBEGokAAtGAgF8An8gACgCBCEDIAAoAgAhAAN8IAAgA0YEfCABBSAAKAIAIgIrAwggAisDGKEgAisDEKIgAaAhASAAQQRq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QAJAIABBAEoEQCAHIABBAWsiAUECdGohCkQAAAAAAAAAACETA0AgACADTg0CIABBA3QiCCAJIAooAgBBAnRqKAIAaisDACAGIAhqKwMAoiAToCETIABBAWohAAwACwALDAELIAYgAUEDdCIAaiIIIAgrAwAgE6EgCSAKKAIAQQJ0aigCACAAaisDAKM5AwAgASEADAELCyAFQQFqIQUMAQsLIAQQF0EAIQVBASEOA0AgAyAFRg0DIAIgBUECdGohAUEAIQADQCAAIAVHBEAgASgCACAAQQN0aiIEKwMAIRMgBCACIABBAnRqKAIAIAVBA3RqIgQrAwA5AwAgBCATOQMAIABBAWohAAwBCwsgBUEBaiEFDAALAAsgDEEINgIEIAwgAzYCAEHo+gYoAgBB2t0DIAwQHRoQJgALIAwgA0EDdDYCEEHo+gYoAgBBqd0DIAxBEGoQHRoQJgALIAxBIGokACAOCyAAIAAEQCAAKAIEEBcgACgCCBAXIAAoAhAQFyAAEBcLCy0BAnxBfyACIAAoAgBBA3RqKwMAIgMgAiABKAIAQQN0aisDACIEZCADIARjGwtdAEGg2QooAgBBpNkKKAIAckUEQEGk2QogAzYCAEGg2QogAjYCACABQQJPBEAgACABQQRBNhCUAQtBpNkKQQA2AgBBoNkKQQA2AgAPC0HJpQNBufsAQSdBgxoQAAALXgICfwJ8IAFBACABQQBKGyEBIANBA3QhAyACQQN0IQIDQCABIARGRQRAIAAgBEECdGooAgAiBSACaisDACADIAVqKwMAoSIHIAeiIAagIQYgBEEBaiEEDAELCyAGnwt3AQV/IAFBACABQQBKGyEFIAEgAWwQtwEhBiABELcBIQQDfyADIAVGBH8DQCACIAVGRQRAIAIgACABIAQgAkECdGooAgAQkAQgAkEBaiECDAELCyAEBSAEIANBAnRqIAYgASADbEECdGo2AgAgA0EBaiEDDAELCwujBAEFfyAAEBohAQNAIAEEQCABQYYmQcACQQEQLhogARDgBSABIAEQKygCECgCdEEBcRC6BCABKAIQQQA2AsQBQQVBBBAYIQMgASgCECICQQA2AswBIAIgAzYCwAFBBUEEEBghAyABKAIQIgJBADYC3AEgAiADNgLIAUEDQQQQGCEDIAEoAhAiAkEANgLUASACIAM2AtgBQQNB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IAEgAEEBEL0CQX9HBEAgByEMIAYhDgwDCyANIAogASAAQQAQvQJBf0YiABshDiALIAggABshDAwCCyAJIQwgBSEOIAAgAUEBEL0CQX9GDQJBACEPIAshDCANIQ4gCCEHIAohBiABIABBABC9AkF/Rw0EDAILIAggC6EgBSAKoaIgCiANoSAJIAihomEEQCACIAk5AwAMAwsgAiAHOQMAIAYhBQwCCyAJIQcgBSEGCyACIAwgB6BEAAAAAAAA4D+iOQMAIA4gBqBEAAAAAAAA4D+iIQULIAMgBTkDAEEBIQ8LIA8L9gECCHwBfyAAKwMIIQMgACsDACEEIAErAwghBSABKwMAIQYCfyAAIAAoAhAiCygCBEYEQCALKAIADAELIABBGGoLIgsrAwghCCALKwMAIQcCfyABIAEoAhAiACgCBEYEQCAAKAIADAELIAFBGGoLIgArAwghCSAAKwMAIQogAkF/IAcgBKEiByAFIAOhoiAGIAShIAggA6EiBaKhIgZEAAAAAAAAAABkIAZEAAAAAAAAAABjGyIANgIAIAJBfyAHIAkgA6GiIAogBKEgBaKhIgNEAAAAAAAAAABkIANEAAAAAAAAAABjGyIBNgIEIAIgACABbDYCCAtNAQJ8An9BASAAKAIAIgArAwAiAiABKAIAIgErAwAiA2QNABpBfyACIANjDQAaQQEgACsDCCICIAErAwgiA2QNABpBf0EAIAIgA2MbCwvfDgMUfwp8AX4jAEHwAGsiAyQAIAFBACABQQBKGyESIAFBKBAYIQ8DQCACIBJGRQRAIAAgAkECdGooAgAoAgQgDGohDCACQQFqIQIMAQsLIAxBGBAYIhBBGGshBQNAIAggEkcEQCAPIAhBKGxqIgQgECAGQRhsajYCACAAIAhBAnRqKAIAIg0oAgQhCkEAIQJE////////738hFkT////////v/yEXRP///////+//IRlE////////738hGANAIAIgCkYEQCAEIBc5AyAgBCAZOQMYIAQgFjkDECAEIBg5AwggBCAFIAZBGGxqNgIEIAhBAWohCAwDBSANKAIAIAJBBHRqIgcrAwAhGiAHKwMIIRsgECAGQRhsaiIHQQA2AhQgByAENgIQIAcgGzkDCCAHIBo5AwAgAkEBaiECIAZBAWohBiAXIBsQJCEXIBkgGhAkIRkgFiAbEDIh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C0IBAnwgACABIAEoAhAoApQBIgErAwAgACgCECgClAEiACsDAKEiAiABKwMIIAArAwihIgMgAiACoiADIAOioBC8CgvyAQEGf0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEMEKIAFBAWohAQwBCwsgABAaIQIDQCACBEAgAigCECIBKALoAUUEQCABIAA2AugBCyAAIAIQKSEDA0AgAwRAAkAgAygCECgCsAEiAUUNAANAIAEgAUEwayIFIAEoAgBBA3EiBkECRhsoAigoAhAiBC0ArAFBAUcNASABIAUgBCgC6AEEfyAGBSAEIAA2AugBIAEoAgBBA3ELQQJGGygCKCgCECgCyAEoAgAiAQ0ACwsgACADECwhAwwBCwsgACACEBshAgwBCwsLNAECf0EBQRAQGCIBQQA2AgwgASAAQRQQGCICNgIAIAEgAjYCBCABIAIgAEEUbGo2AgggAQsNACAAKAIQKAKMARAXC0gBAn8gACgCECICKAKwASACLgGoASICIAJBAWoQ/wEiAyACQQJ0aiABNgIAIAAoAhAiACADNgKwASAAIAAvAagBQQFqOwGoAQsUACAAIAFBkqUBQZQCQeO2ARCFAgujAQICfwN8IAAoAhAiAigCjAEiASsDCCEDIAErAxAhBCABKwMYIQUgAiABKwMgRAAAAAAAAFJAojkDKCACIAVEAAAAAAAAUkCiOQMgIAIgBEQAAAAAAABSQKI5AxggAiADRAAAAAAAAFJAojkDEEEBIQEDQCABIAIoArQBSkUEQCACKAK4ASABQQJ0aigCABDGCiABQQFqIQEgACgCECECDAELCwvvAQIDfwJ8IAAoAhAoAowBIgIrAxAhBSACKwMIIQYCQCAAIAFGDQAgABAaIQIDQCACRQ0BIAAgAigCECIDKALoAUYEQCADKAKUASIDIAYgAysDAKA5AwAgAyAFIAMrAwigOQMICyAAIAIQGyECDAALAAtBASEDA0AgACgCECICKAK0ASADTgRAIAIoArgBIANBAnRqKAIAIQQgACABRwRAIAQoAhAoAowBIgIgBSACKwMgoDkDICACIAYgAisDGKA5AxggAiAFIAIrAxCgOQMQIAIgBiACKwMIoDkDCAsgBCABEMcKIANBAWohAwwBCwsLoUsDGH8OfAF+IwBBsAFrIggkAEGAiwstAAAEQCAIIAAQHjYCcEHo+gYoAgBBpOQDIAhB8ABqEB0aCyAAEBohAgNAIAIEQCACKAIQQQA2ArgBIAAgAhAbIQIMAQsLQYCLCy0AAEECTwRAIAEoAhAhAiAIIAAQHjYCZCAIIAI2AmBB6PoGKAIAQcHsAyAIQeAAahAdGgsgASABKAIQQQFqNgIQIAhBqMgKKAIANgJcQc6pASAIQdwAakEAEM0BIgpB7CVBmAJBARAuGkE4EE0hAiAKKAIQIAI2AowBIAAQNCECIAooAhAgAigCEC8BsAE7AbABIAAgCkGw3AAQ8AYgACAKQe7aABDwBiAAIApB09IBEPAGIAhBmAFqIQYgCEGQAWohDCAIQYgBaiEDQQEhEANAIAAoAhAiAigCtAEgEE4EQCACKAK4ASAQQQJ0aigCACILEMcEIAogCxAeEO8GIgQoAhAiAiARNgKIASACIAs2AugBAkACQCABKAIEIgJFBEBE////////738hHET////////v/yEbDAELRP///////+9/IRxE////////7/8hGyALIAIQPiIFLQAARQ0AIAsgASgCAEcEQCAFIAsoAkQgAhA+EENFDQELIAhBADoArAEgCCADNgJEIAggDDYCSCAIIAY2AkwgCCAIQawBajYCUCAIIAhBgAFqNgJAIAVB+L0BIAhBQGsQSUEETgRAIAgrA5gBIRsgCCsDkAEhHSAIKwOIASEcIAgrA4ABIRpBkIsLKwMAIh5EAAAAAAAAAABkBEAgGyAeoyEbIB0gHqMhHSAcIB6jIRwgGiAeoyEaCyAEKAIQQQNBAkEBIAgtAKwBIgJBP0YbIAJBIUYbOgCHAQwCCyALEB4hAiAIIAU2AjQgCCACNgIwQbveAyAIQTBqECcLRP///////+//IR1E////////738hGgsgEUEBaiERIAsQGiECA0AgAgRAIAIoAhAgBDYCuAEgCyACEBshAgwBCwsgBCgCECICLQCHAQRAIAIoApQBIgIgGyAcoEQAAAAAAADgP6I5AwggAiAdIBqgRAAAAAAAAOA/ojkDAAsgEEEBaiEQDAELCyAAEBohAgJ/AkADQCACBEACQCACKAIQIgwoArgBDQACQCAMKALoASIDRQ0AIAMgACgCECgCjAEoAjBGDQAgAhAeIQEgABAeIQAgCCACKAIQKALoARAeNgIoIAgg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EL0BIAYgARCwASABEC8aIAEgABDxASAHIAEQnwIgARB1GiAAEOACDAELIAIQtQshAAJAIAEEQCAKQQRqIgEgABDiAiADIAooAgQ2AAAgASAAEOECDAELIApBBGoiASAAEJoFIAMgCigCBDYAACABIAAQ8AELIAggARCfAiABEHUaIAQgABDuATYCACAFIAAQvgE2AgAgCkEEaiIBIAAQvQEgBiABELABIAEQLxogASAAEPEBIAcgARCfAiABEHUaIAAQ4AILNgIAIApBEGokAAsmAQF/IAFBADYCBCAAKAIEIgJBBGogACACGyABNgIAIAAgATYCBAujAQEDfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAAgARCHCyADQRBqIAMoAhggAygCHCACEIUMIAMoAhAhBSMAQRBrIgEkACABIAA2AgwgAUEMaiIAIAUgABCJC2sQjwchACABQRBqJAAgAyAANgIMIAMgAiADKAIUEJgDNgIIIARBCGogA0EMaiADQQhqEPQBIANBIGokACAEKAIMIARBEGokAAvWBQEKfyMAQRBrIhQkACACIAA2AgAgA0GABHEhFgNAIBVBBEYEQCANECJBAUsEQCAUIA0Q1AE2AgwgAiAUQQxqQQEQjwcgDRDmAiACKAIAELILNgIACyADQbABcSIDQRBHBEAgASADQSBGBH8gAigCAAUgAAs2AgALIBRBEGokAAUCQAJAAkACQAJAAkAgCCAVai0AAA4FAAEDAgQFCyABIAIoAgA2AgAMBAsgASACKAIANgIAIAZBIBCZASEPIAIgAigCACIQQQFqNgIAIBAgDzoAAAwDCyANEO8BDQIgDUEAEDwtAAAhDyACIAIoAgAiEEEBajYCACAQIA86AAAMAgsgDBDvASAWRXINASACIAwQ1AEgDBDmAiACKAIAELILNgIADAELIAIoAgAgBCAHaiIEIREDQAJAIAUgEU0NACAGQcAAIBEsAAAQ9gFFDQAgEUEBaiERDAELCyAOIg9BAEoEQANAIA9FIAQgEU9yRQRAIA9BAWshDyARQQFrIhEtAAAhECACIAIoAgAiEkEBajYCACASIBA6AAAMAQsLIA8EfyAGQTAQmQEFQQALIRIDQCACIAIoAgAiEEEBajYCACAPQQBKBEAgECASOgAAIA9BAWshDwwBCwsgECAJOgAACwJAIAQg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BQRAIAZBDWogBkEOahDICwsgAiABIAEgAigCABD8CyAGQQxqIAMgACgCABDxCyABajYCACAGQRBqJAALQgAgASACIAMgBEEEEKACIQEgAy0AAEEEcUUEQCAAIAFB0A9qIAFB7A5qIAEgAUHkAEkbIAFBxQBIG0HsDms2AgALC0AAIAIgAyAAQQhqIAAoAggoAgQRAgAiACAAQaACaiAFIARBABChBSAAayIAQZ8CTARAIAEgAEEMbUEMbzYCAAsLQAAgAiADIABBCGogACgCCCgCABECACIAIABBqAFqIAUgBEEAEKEFIABrIgBBpwFMBEAgASAAQQxtQQdvNgIACws1AQF/IAAoAhAiAS0AtQFBB0cEQCAAEK0BDwsgASgC6AEoAhAoAowCIAEoAvQBQQJ0aigCAAtCACABIAIgAyAEQQQQoQIhASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBECACIAIABBoAJqIAUgBEEAEKMFIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQIAIgAgAEGoAWogBSAEQQAQowUgAGsiAEGnAUwEQCABIABBDG1BB282AgALCwQAQQIL3gEBBX8jAEEQayIHJAAjAEEQayIDJAAgACEEAkAgAUH3////A00EQAJAIAEQlgUEQCAEIAEQygEMAQsgA0EIaiABEMcDQQFqEMYDIAMoAgwaIAQgAygCCCIAEPMBIAQgAygCDBDyASAEIAEQuAELIwBBEGsiBSQAIAUgAjYCDCAAIQIgASEGA0AgBgRAIAIgBSgCDDYCACAGQQFrIQYgAkEEaiECDAELCyAFQRBqJAAgA0EANgIEIAAgAUECdGogA0EEahDSASADQRBqJAAMAQsQvwEACyAHQRBqJAAgBAvABQEOfyMAQRBrIgskACAGEMABIQogC0EEaiAGEM4DIg4QvQEgBSADNgIAAkACQCAAIgctAAAiBkEraw4DAAEAAQsgCiAGwBDIASEGIAUgBSgCACIIQQRqNgIAIAggBjYCACAAQQFqIQcLAkACQCACIAciBmtBAUwNACAGLQAAQTBHDQAgBi0AAUEgckH4AEcNACAKQTAQyAEhCCAFIAUoAgAi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IAAgAxsLDgBBACAAIABBfxDEAhsLsAEBA38CQCABIAIQ/QshBCMAQRBrIgMkACAEQff///8HTQRAAkAgBBClBQRAIAAgBBDKASAAIQUMAQsgA0EIaiAEENMDQQFqENIDIAMoAgwaIAAgAygCCCIFEPMBIAAgAygCDBDyASAAIAQQuAELA0AgASACRwRAIAUgARDJASAFQQFqIQUgAUEBaiEBDAELCyADQQA6AAcgBSADQQdqEMkBIANBEGokAAwBCxC/AQALCw8AIAAgACgCGCABajYCGAsXACAAIAI2AhwgACABNgIUIAAgATYCGAuHAQEDfwJAIABFIAFFcg0AIABBMEEAIAAoAgBBA3EiA0EDRxtqKAIoIAFBMEEAIAEoAgBBA3EiBEEDRxtqKAIoRw0AIABBUEEAIANBAkcbaigCKCABQVBBACAEQQJHG2ooAihHDQAgACgCECgCYCABKAIQKAJgRw0AIAAgARCoBEEARyECCyACC1cBAn8CQCAAKAIAIgJFDQACfyACKAIYIgMgAigCHEYEQCACIAEgAigCACgCNBEAAAwBCyACIANBBGo2AhggAyABNgIAIAELQX8QxAJFDQAgAEEANgIACwsxAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEEajYCDCABKAIACycBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASgCAAurBAEIfyMAQeAAayICJAAgAkEANgJYIAJCADcDUCACQQA2AkggAkIANwNAQYiOCyAAQQJBk7EBQQAQHzYCAEGMjgsgAEECQb7uAEEAEB8iATYCACABQYiOCygCAHIEQCACQSRqIQYgAkE0aiEHIAAQGiEEA0AgBARAIAAgBBBvIQEDQCABBEACQCABQVBBACABKAIAQQNxIgNBAkcbaigCKCIFIAEgAUEwaiIIIANBA0YbKAIoRg0AAkACQCAEIAVHDQBBiI4LKAIAIgVFDQAgASAFED4iAy0AAA0BIAEoAgBBA3EhAwsgASAIIANBA0YbKAIoIARHDQFBjI4LKAIAIgNFDQEgASADED4iAy0AAEUNASACQUBrIAEgAxCADAwBCyACQdAAaiABIAMQgAwLIAAgASAEEHQhAQwBBUEAIQEDQCACKAJUIAFNBEAgAkHQAGoQowdBACEBA0AgAigCRCABTQRAIAJBQGsQowcgACAEEBshBAwHCyACQUBrIgMgARChBygCCEECTwRAIAJBIGogAyABEKAHIAIgBigCCDYCGCACIAYpAgA3AxAgBCACQRBqEIYMCyABQQFqIQEMAAsACyACQdAAaiIDIAEQoQcoAghBAk8EQCACQTBqIAMgARCgByACIAcoAgg2AgggAiAHKQIANwMAIAQgAhCGDAsgAUEBaiEBDAALAAsACwALCyACQdAAahD7CyACQUBrEPsLCyACQeAAaiQACycBAX8CQCAAKAIAIgJFDQAgAiABEJcMQX8QxAJFDQAgAEEANgIACwtTAQN/AkBBfyAAKAJMEMQCRQRAIAAoAkwhAAwBCyAAIwBBEGsiASQAIAFBDGoiAiAAEEsgAhDBAUEgEJkBIQAgAhBIIAFBEGokACAANgJMCyAAwAsaACAAIAEgASgCAEEMaygCAGooAhg2AgAgAAsLACAAQaCuCxClAgsJACAAEKUHEBcLPQEBfyAAKAIYIgIgACgCHEYEQCAAIAEQmgMgACgCACgCNBEAAA8LIAAgAkEBajYCGCACIAE6AAAgARCaAws0AQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEBajYCDCABLAAAEJoDCyoBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASwAABCaAwsPACAAIAAoAgAoAhgRAgALCAAgACgCEEULBABBfwsIACAAEJ0HGgu+DwIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQogAkL///////8/gyELIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQgCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAIQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg1CgICAgICAwP//AFQgDUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDUKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASANhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyANQv///////z9YBEAgBUHAAmogASALIAEgCyALUCIGG3kgBkEGdK18pyIGQQ9rELEBQRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQsQEgBiAHakEQayEGIAUpA7gCIQogBSkDsAIhAwsgBUGgAmogCkKAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQmgEgBUGQAmpCACAFKQOoAn1CACAEQgAQmgEgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQmgEgBUHwAWogBEIAQgAgBSkDiAJ9QgAQmgEgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQmgEgBUHQAWogBEIAQgAgBSkD6AF9QgAQmgEgBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQmgEgBUGwAWogBEIAQgAgBSkDyAF9QgAQmgEgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQmgEgBUGQAWogA0IPhkIAIAJCABCaASAFQfAAaiACQgBCACAFKQOoASAFKQOgASINIAUpA5gBfCIEIA1UrXwgBEIBVq18fUIAEJoBIAVBgAFqQgEgBH1CACACQgAQmgEgBiAJIAhraiEGAn8gBSkDcCITQgGGIg4gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgC0KAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiINQiCIIgogECAUVq0gDiAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig4gEVStIA4gDiATQv////8PgyITIAFCP4giFyALQgGGhEL/////D4MiC358Ig5WrXwgBCAQfnwgBCATfiIRIAsgEH58Ig8gEVStQiCGIA9CIIiEfCAOIA4gD0IghnwiDlatfCAOIA4gFEL/////D4MiFCALfiIRIAIgCn58Ig8gEVStIA8gDyATIA1C/v///w+DIhF+fCIPVq18fCIOVq18IA4gBCAUfiIYIBAgEX58IgQgAiALfnwiCyAKIBN+fCIQQiCIIAsgEFatIAQgGFStIAQgC1atfHxCIIaEfCIEIA5UrXwgBCAPIAIgEX4iAiAKIBR+fCIKQiCIIAIgClatQiCGhHwiAiAPVK0gAiAQQiCGfCACVK18fCICIARUrXwiBEL/////////AFgEQCAWIBeEIRUgBUHQAGogAiAEIAMgEhCaASABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhCaASABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEJsDIAVBMGogDSAVIAZB8ABqELEBIAVBIGogAyASIAUpA0AiAiAFKQNIIgoQmgEgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIg1UrX0hASAEIA19CyEEIAVBEGogAyASQgNCABCaASAFIAMgEkIFQgAQmgEgCiACIAIgAyAEIAJCAYMiBHwiA1QgASADIARUrXwiASASViABIBJRG618IgJWrXwiBCACIAIgBEKAgICAgIDA//8AVCADIAUpAxBWIAEgBSkDGCIEViABIARRG3GtfCICVq18IgQgAiAEQoCAgICAgMD//wBUIAMgBSkDAFYgASAFKQMIIgNWIAEgA1Ebca18IgEgAlStfCAMhCEMCyAAIAE3AwAgACAMNwMIIAVB0AJqJAALwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCAB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aiQAIANBkAFqJAAgDgv7AQEFfyABEBohAwNAIAMEQCABIAMQGyEEIAMoAhAtALUBBEAgASADELQBIAQhAwwCBUEBIQIDQAJAIAAoAhAiBSgCtAEiBiACSgR/IAUoArgBIAJBAnRqKAIAIAMQqwFFDQEgACgCECgCtAEFIAYLIAJKBEAgASADELQBCyADKAIQQQA2AugBIAQhAwwECyACQQFqIQIMAAsACwALCyABEBohAANAIAAEQCABEF4gABApIQIDQCACBEAgASACQVBBACACKAIAQQNxQQJHG2ooAigQqwEEQCABIAJBARDIAhoLIAEQXiACECwhAgwBCwsgASAAEBshAAwBCwsLQwACQCAARQ0AAkACQAJAAkAgAUECag4GAAECAgQDBAsgACACPAAADwsgACACPQEADwsgACACPgIADwsgACACNwMACwsPACAAIAEgAkEAQQAQrQcLvAIAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACAkKCAkBAgMECgkKCggJBQYHCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAErAwA5AwAPCyAAIAIgAxEEAAsPCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAPCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwALNwEBfyAAKAIEIQEDQCABQX9GBEAgAEEANgIEBSAAKAIAIAFBAnRqQQA2AgAgAUEBayEBDAELCwtvAQV/IAAoAgAiAywAAEEwayIBQQlLBEBBAA8LA0BBfyEEIAJBzJmz5gBNBEBBfyABIAJBCmwiBWogASAFQf////8Hc0sbIQQLIAAgA0EBaiIFNgIAIAMsAAEgBCECIAUhA0EwayIBQQpJDQALIAIL+RICEn8BfiMAQUBqIggkACAIIAE2AjwgCEEnaiEWIAhBKGohEQJAAkACQAJAA0BBACEHA0AgASENIAcgDkH/////B3NKDQIgByAOaiEOAkACQAJAAkAgASIHLQAAIgsEQANAAkACQCALQf8BcSIBRQRAIAchAQwBCyABQSVHDQEgByELA0AgCy0AAUElRwRAIAshAQwCCyAHQQFqIQcgCy0AAiALQQJqIgEhC0ElRg0ACwsgByANayIHIA5B/////wdzIhdKDQkgAARAIAAgDSAHEKIBCyAHDQcgCCABNgI8IAFBAWohB0F/IRACQCABLAABQTBrIgpBCUsNACABLQACQSRHDQAgAUEDaiEHQQEhEiAKIRALIAggBzYCPEEAIQwCQCAHLAAAIgtBIGsiAUEfSwRAIAchCgwBCyAHIQpBASABdCIBQYnRBHFFDQADQCAIIAdBAWoiCjYCPCABIAxyIQwgBywAASILQSBrIgFBIE8NASAKIQdBASABdCIBQYnRBHENAAsLAkAgC0EqRgRAAn8CQCAKLAABQTBrIgFBCUsNACAKLQACQSRHDQACfyAARQRAIAQgAUECdGpBCjYCAEEADAELIAMgAUEDdGooAgALIQ8gCkEDaiEBQQEMAQsgEg0GIApBAWohASAARQRAIAggATYCPEEAIRJBACEPDAMLIAIgAigCACIHQQRqNgIAIAcoAgAhD0EACyESIAggATYCPCAPQQBODQFBACAPayEPIAxBgMAAciEMDAELIAhBPGoQqQwiD0EASA0KIAgoAjwhAQtBACEHQX8hCQJ/QQAgAS0AAEEuRw0AGiABLQABQSpGBEACfwJAIAEsAAJBMGsiCkEJSw0AIAEtAANBJEcNACABQQRqIQECfyAARQRAIAQgCkECdGpBCjYCAEEADAELIAMgCkEDdGooAgALDAELIBINBiABQQJqIQFBACAARQ0AGiACIAIoAgAiCkEEajYCACAKKAIACyEJIAggATYCPCAJQQBODAELIAggAUEBajYCPCAIQTxqEKkMIQkgCCgCPCEBQQELIRMDQCAHIRRBHCEKIAEiGCwAACIHQfsAa0FGSQ0LIAFBAWohASAHIBRBOmxqQb+MB2otAAAiB0EBa0EISQ0ACyAIIAE2AjwCQCAHQRtHBEAgB0UNDCAQQQBOBEAgAEUEQCAEIBBBAnRqIAc2AgAMDAsgCCADIBBBA3RqKQMANwMwDAILIABFDQggCEEwaiAHIAIgBhCnDAwBCyAQQQBODQtBACEHIABFDQgLIAAtAABBIHENCyAMQf//e3EiCyAMIAxBgMAAcRshDEEAIRBB9RIhFSARIQoCQAJAAn8CQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIBgsAAAiB0FTcSAHIAdBD3FBA0YbIAcgFBsiB0HYAGsOIQQWFhYWFhYWFhAWCQYQEBAWBhYWFhYCBQMWFgoWARYWBAALAkAgB0HBAGsOBxAWCxYQEBAACyAHQdMARg0LDBULIAgpAzAhGUH1EgwFC0EAIQcCQAJAAkACQAJAAkACQCAUQf8BcQ4IAAECAwQcBQYcCyAIKAIwIA42AgAMGwsgCCgCMCAONgIADBoLIAgoAjAgDqw3AwAMGQsgCCgCMCAOOwEADBgLIAgoAjAgDjoAAAwXCyAIKAIwIA42AgAMFgsgCCgCMCAOrDcDAAwVC0EIIAkgCUEITRshCSAMQQhyIQxB+AAhBwsgESEBIAdBIHEhCyAIKQMwIhlQRQRAA0AgAUEBayIBIBmnQQ9xQdCQB2otAAAgC3I6AAAgGUIPViAZQgSIIRkNAAsLIAEhDSAMQQhxRSAIKQMwUHINAyAHQQR2QfUSaiEVQQIhEAwDCyARIQEgCCkDMCIZUEUEQANAIAFBAWsiASAZp0EHcUEwcjoAACAZQgdWIBlCA4ghGQ0ACwsgASENIAxBCHFFDQIgCSARIAFrIgFBAWogASAJSBshCQwCCyAIKQMwIhlCAFMEQCAIQgAgGX0iGTcDMEEBIRBB9RIMAQsgDEGAEHEEQEEBIRBB9hIMAQtB9xJB9RIgDEEBcSIQGwshFSAZIBEQ2AMhDQsgEyAJQQBIcQ0RIAxB//97cSAMIBMbIQwgCCkDMCIZQgBSIAlyRQRAIBEhDUEAIQkMDgsgCSAZUCARIA1raiIBIAEgCUgbIQkMDQsgCCkDMCEZDAsLIAgoAjAiAUHPnAMgARsiDUH/////ByAJIAlB/////wdPGxC2DCIBIA1qIQogCUEATgRAIAshDCABIQkMDAsgCyEMIAEhCSAKLQAADQ8MCwsgCCkDMCIZUEUNAUIAIRkMCQsgCQRAIAgoAjAMAgtBACEHIABBICAPQQAgDBCzAQwCCyAIQQA2AgwgCCAZPgIIIAggCEEIaiIHNgIwQX8hCSAHCyELQQAhBwNAAkAgCygCACINRQ0AIAhBBGogDRCiDCINQQBIDQ8gDSAJIAdrSw0AIAtBBGohCyAHIA1qIgcgCUkNAQsLQT0hCiAHQQBIDQwgAEEgIA8gByAMELMBIAdFBEBBACEHDAELQQAhCiAIKAIwIQsDQCALKAIAIg1FDQEgCEEEaiIJIA0QogwiDSAKaiIKIAdLDQEgACAJIA0QogEgC0EEaiELIAcgCksNAAsLIABBICAPIAcgDEGAwABzELMBIA8gByAHIA9IGyEHDAgLIBMgCUEASHENCUE9IQogACAIKwMwIA8gCSAMIAcgBRFEACIHQQBODQcMCgsgBy0AASELIAdBAWohBwwACwALIAANCSASRQ0DQQEhBwNAIAQgB0ECdGooAgAiAARAIAMgB0EDdGogACACIAYQpwxBASEOIAdBAWoiB0EKRw0BDAsLCyAHQQpPBEBBASEODAoLA0AgBCAHQQJ0aigCAA0BQQEhDiAHQQFqIgdBCkcNAAsMCQtBHCEKDAYLIAggGTwAJ0EBIQkgFiENIAshDAsgCSAKIA1rIgsgCSALShsiASAQQf////8Hc0oNA0E9IQogDyABIBBqIgkgCSAPSBsiByAXSg0EIABBICAHIAkgDBCzASAAIBUgEBCiASAAQTAgByAJIAxBgIAEcxCzASAAQTAgASALQQAQswEgACANIAsQogEgAEEgIAcgCSAMQYDAAHMQswEgCCgCPCEBDAELCwtBACEODAMLQT0hCgtB5JQLIAo2AgALQX8hDgsgCEFAayQAIA4LfwIBfwF+IAC9IgNCNIinQf8PcSICQf8PRwR8IAJFBEAgASAARAAAAAAAAAAAYQR/QQAFIABEAAAAAAAA8EOiIAEQqwwhACABKAIAQUBqCzYCACAADwsgASACQf4HazYCACADQv////////+HgH+DQoCAgICAgIDwP4S/BSAACwuEAQECfyMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAgPIDSQ0BIABEAAAAAAAAAABBABCtDCEADAELIAJBgIDA/wdPBEAgACAAoSEADAELIAAgARC9ByECIAErAwAgASsDCCACQQFxEK0MIQALIAFBEGokACAAC58DAwJ8AX4CfyAAvSIFQoCAgICA/////wCDQoGAgIDwhOXyP1QiBkUEQEQYLURU+yHpPyAAmaFEB1wUMyamgTwgASABmiAFQgBZ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ACAFQTBqIAEgAkIAQgAQZyAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ggBkEBayEGIARCAYYhBCAJQgGGhCIJQoCAgICAgMAAVA0ACwsgCEGAgAJxIQcgBkEATARAIAVBQGsgBCAJQv///////z+DIAZB+ABqIAdyrUIwhoRCAEKAgICAgIDAwz8QZyAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQZyAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBnQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBnIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBnQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBnIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAtqAQJ/IAAoAhAiASABKAKIAigCECgC9AEiAiABKALoAWo2AugBIAEgAiABKALsAWo2AuwBQQEhAgNAIAIgASgCtAFKRQRAIAEoArgBIAJBAnRqKAIAELQMIAJBAWohAiAAKAIQIQEMAQsLCzwAIAAgATcDACAAIAJC////////P4MgAkKAgICAgIDA//8Ag0IwiKcgA0IwiKdBgIACcXKtQjCGhDcDCAsXAQF/IABBACABEKADIgIgAGsgASACGwvfAgEEfyABEHIhAwNAIAMEQEEHIQQCQAJAIAMQzgFFBEAgA0GO9AAQI0HQ9QdB8PUHEIgIIQQgAygCECAEOgCSAiAERQ0BCwJAIARBB0cNAEGkiwsoAgBB5ABHDQAgACADEK4MDAILIAMQGiICRQ0BIAQhBSACIQEDQCABKAIQIAU6ALUBIAMgARAbIgEEQCACIAEQ4gUaIAIoAhAtALUBIQUMAQsLAkACQAJA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QQAgASgCAEEDcUEDRxtqKAIoIgIQrQEgAkYEQCABEMEHIAMoAhAhAQwBCwtB2KEDQe26AUHUAkGaMBAAAAsgAEEAEK8IQQAhAgNAIAAoAhAiASgC3AEgAksEQCABIAEoAtgBIAJBAnRqKAIAIgE2AsABIAEhAwNAIAMEQCADKAIQIgNBADYCsAEgAygCuAEhAwwBCwsDQCABBEAgARDUDCABKAIQKAK4ASEBDAELCyACQQFqIQIMAQsLAkAgACgCECIBKALkAUUEQCABKALgAUUNAQsgABAaIQFBACEDA0AgAQRAAkAgARCtASABRw0AAkAgASgCECICKALMAQ0AIAAoAhAoAuQBIgRFIAEgBEZyDQAgASAEQQAQ2wEiAygCECICQQA2ApwBIAIgCjYCrAEgASgCECECCyACKALEAQ0AIAAoAhAoAuABIgJFIAEgAkZyDQAgAiABQQAQ2wEiAygCECICQQA2ApwBIAIgCzYCrAELIAAgARAbIQEMAQsLIANFDQAgAEEAEK8ICyAAQf3oAhAjIgEEfyAAEDUgARCoAhDRDAVB/////wcLIQJBACEBA0AgASAAKAIQIgMoAtwBSQRAIAMgAygC2AEgAUECdGooAgA2AsABIAAgAygCtAFFIAIQrwMaIAFBAWohAQwBCwsgABAaIQEgACgCECEDAkAgAQRAIANC/////3c3A+gBA0AgAQRAAkAgASABEK0BIgJGBEAgASgCECIDKAL0ASECDAELIAEoAhAiAyADKAL0ASACKAIQKAL0AWoiAjYC9AELIAIgACgCECIEKALsAUoEQCAEIAI2AuwBCyACIAQoAugBSARAIAQgAjYC6AELIAMtALUBIgNFIANBBkZyRQRAIAEQug4LIAAgARAbIQEMAQsLIAAQXiAARw0BQaSLCygCAEHkAEYEQEEBIQEDQCABIAAoAhAiAygCtAFKDQMgAygCuAEgAUECdGooAgAQtAwgAUEBaiEBDAALAAsgABBeEHIhAQNAIAFFDQIgASgCEC0AkgJBB0YEQCAAIAEQrgwLIAEQcSEBDAALAAsgA0IANwPoAQtBACECA38gACgCECIBKALcASACTQR/IAAQGgUgASABKALYASACQQJ0aigCACIBNgLAAQNAIAEEQCABKAIQQcABahCoDCABKAIQQcgBahCoDCABKAIQIgFBADYC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LQACIQACfyABLAADIgFFBEAgACAGai0AAAwBCyABIADAECgLQf8BcSIAQR5LQQEgAHRBgJzAgQRxRXINAUEbDwsgBCABNgIAC0EADwsgAUECaiECDAELC0F+C3IBAX8Cf0EAIAEoAhAiAS0ArAFBAUcNABogASgCkAIoAgAhAgNAIAIiASgCECgCeCICDQALQQAgACABQTBBACABKAIAQQNxQQNHG2ooAigQqwENABogACABQVBBACABKAIAQQNxQQJHG2ooAigQqwFFCwsEAEEAC4EBAQJ/IAJBCzYCAEEBIQMCQCABIABrQQNHDQAgAC0AACIBQfgARgR/QQAFIAFB2ABHDQFBAQshASAALQABIgRB7QBHBEAgBEHNAEcNAUEBIQELIAAtAAIiAEHsAEcEQCAAQcwARw0BQQAPC0EAIQMgAQ0AIAJBDDYCAEEBIQMLIAML5AMBBX9BASEEAkAgAiABayIFQQBMDQACQAJAAkACQAJAAkACQAJAIABByABqIgggAS0AAGotAAAiB0EFaw4UAgMEBgEBBgYGBgYGBgYGBgEFBgUACyAHQR5HDQULQRYhBgwECyAFQQFGDQQgACABIAAoAuACEQAADQMgACABIAAoAtQCEQAARQ0DQQIhBAwCCyAFQQNJDQMgACABIAAoAuQCEQAADQIgACABIAAoAtgCEQAARQ0CQQMhBAwBCyAFQQRJDQIgACABIAAoAugCEQAADQEgACABIAAoAtwCEQAARQ0BQQQhBAsgASAEaiEBA0AgAiABayIFQQBMDQNBASEEAkACQAJAIAggAS0AAGotAAAiB0ESaw4KAgQEBAEEAQEBAQALAkACQAJAIAdBBWsOAwABAgYLIAVBAUYNBiAAIAEgACgC4AIRAAANBSAAIAEgACgCyAIRAABFDQVBAiEEDAILIAVBA0kNBSAAIAEgACgC5AIRAAANBCAAIAEgACgCzAIRAABFDQRBAyEEDAELIAVBBEkNBCAAIAEgACgC6AIRAAANAyAAIAEgACgC0AIRAABFDQNBBCEECyABIARqIQEMAQsLIAFBAWohAUEcIQYLIAMgATYCACAGDwtBfg8LQX8LtAYBB38jAEEQayIHJABBASEFQX8hCAJAIAIgAWsiBEEATA0AAkACQAJAAkACQAJAAkACQCAAQcgAaiIKIAEtAABqLQAAIgZB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ECIDKAK0AUpFBEAgAygCuAEgBEECdGooAgAgASACEO8MIARBAWohBAwBCwsgAyADKwMQIAGiOQMQIAMgAysDGCACojkDGCADIAMrAyAgAaI5AyAgAyADKwMoIAKiOQMoCzsBAX9BASEEAkAgAEEBIAAoApwBIAEgAiADIAAtAOwDRUEBEKsEIgFFBEAgABDIB0UNAQsgASEECyAEC+IEAgh/BHxBASECA0AgAiAAKAIQIgMoArQBSkUEQCADKAK4ASACQQJ0aigCACABEPEMIAJBAWohAgwBCwsgABBeIQIgACgCECEDAkAgACACRgRAIAMoAuwBIQVEAADA////38EhCkQAAMD////fQSELIAMoAugBIgghBANAIAQgBUoEQCADKAK0ASIAQQAgAEEAShtBAWohAEEBIQIDQCAAIAJGDQQgCiADKAK4ASACQQJ0aigCACgCECIEKwMgRAAAAAAAACBAoCIMIAogDGQbIQogCyAEKwMQRAAAAAAAACDAoCIMIAsgDGMbIQsgAkEBaiECDAALAAUCQCADKALEASAEQQZ0aiIAKAIAIgZFDQBBASECIAAoAgQiBygCACIARQ0AA0AgACgCECIALQCsASIJRSACIAZOckUEQCAHIAJBAnRqKAIAIQAgAkEBaiECDAELCyAJDQAgBkECayECIAArAxAgACsDWKEhDCAHIAZBAnRqQQRrIQADQCAAKAIAKAIQIgAtAKwBBEAgByACQQJ0aiEAIAJBAWshAgwBCwsgCiAAKwMQIAArA2CgIg0gCiANZBshCiALIAwgCyAMYxshCwsgBEEBaiEEDAELAAsACyADKALoASEIIAMoAuwBIQUgAygChAIoAhAoAvQBtyEKIAMoAoACKAIQKAL0AbchCwsgASgCECgCxAEiACAFQQZ0aigCBCgCACgCECsDGCEMIAAgCEEGdGooAgQoAgAoAhArAxghDSADIAo5AyAgAyALOQMQIAMgDSADKwOAAaA5AyggAyAMIAMrA3ihOQMYC6UFAQZ/IwBBEGsiByQAIAcgAigCACIINgIMAn8gASAAKAKcAUYEQCAAIAg2AqgCIABBqAJqIQogAEGsAmoMAQsgACgCtAIiCkEEagshDCAKIAg2AgAgAkEANgIAAkACQANAIAcgBygCDCIINgIIIAAgASAIIAMgB0EIaiABKAIIEQYA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eCADIAApAwA3A3AgAyABKQMINwNoIAMgASkDADcDYCADQeABaiADQfAAaiADQeAAahC2AwJAIAUgAysD4AFmRQ0AIAMgACkDCDcDWCADIAApAwA3A1AgAyABKQMINwNIIAMgASkDADcDQCADQcABaiADQdAAaiADQUBrELYDIAMrA9ABIAIrAwBmRQ0AIAIrAxggAyAAKQMINwM4IAMgACkDADcDMCADIAEpAwg3AyggAyABKQMANwMgIANBoAFqIANBMGogA0EgahC2AyADKwOoAWZFDQAgAyAAKQMINwMYIAMgACkDADcDECADIAEpAwg3AwggAyABKQMANwMAIANBgAFqIANBEGogAxC2AyADKwOYASACKwMIZiEECyADQYACaiQAIAQLagICfAF/AkAgASsDECAAKwA4IgIgACsDGEQAAAAAAADgP6IiA6FmRQ0AIAErAwAgAyACoGVFDQAgASsDGCAAKwBAIgIgACsDIEQAAAAAAADgP6IiA6FmRQ0AIAErAwggAyACoGUhBAsgBAv7AgEGfyMAQRBrIgYkAAJAAkACQCAAKAIAIgMtAABBI0YEQCADLQABIgJB3wFxQdgARgRAQQIhAQNAIAFBCEYNAwJAIAEgA2otAAAiAkHBAGtB/wFxQQZJBEBBSSEFDAELIAJB4QBrQf8BcUEGSQRAQal/IQUMAQtBUCEFIAJBMGtB/wFxQQlLDQULIAIgBWoiAiAEQQR0aiEEIAFBAWohAQwACwALQQEhAQNAIAFBCEYNAiABIANqLQAAIgJBMGtB/wFxQQlLDQMgAUEBaiEBIARBCmwgAmpBMGshBAwACwALIAYgAzYCCANAIAYgATYCDCABQQhGDQMgASADaiIFLQAAIgJFBEAgAiEEDAQLIAJBO0YEQCAGQQhqQbDqBUH8AUEIQcQCEOEDIgJFDQQgBUEBaiEDIAIoAgQhBAwEBSABQQFqIQEMAQsACwALQQghAQsgAkE7RwRAQQAhBAwBCyABIANqQQFqIQMLIAAgAzYCACAGQRBqJAAgBAtjAQN/IwBBEGsiAiQAIAJBADoADyACIAA6AA4gAkEOahC7BCIEEDchACAEIQMDQCAAQQJJRQRAIAEgAywAABCeASADQQFqIQMgAEEBayEADAELCyADLQAAIAQQFyACQRBqJAALlAQBBn8jAEHwAGsiAiQAIAEoAhAoAvQBIgNBBnQiBCAAKAIQKALEAWoiBSgCACEGAkACQCAFKAIIQQBMBEAgABAeIQAgARAeIQEgAiAGNgIQIAIgAzYCDCACIAE2AgggAiAANgIEIAJBpQk2AgBBhdEEIAIQMQwBCyAFKAIEIAZBAnRqIAE2AgAgASgCECAGNgL4ASAAKAIQIgUoAsQBIARqIgAgACgCACIEQQFqNgIAIAQgACgCCE4NASADQQZ0IgRB0M4KKAIAKAIQKALEAWooAggiByAGSARAIAEQHiEAIAEoAhAoAvgBIQEgAkHQzgooAgAoAhAoAsQBIARqKAIINgIwIAJBuQk2AiAgAiAANgIkIAIgATYCKCACIAM2AixB1L0EIAJBIGoQMQwBCyAFKALsASEEIAUoAugBIgUgA0wgAyAETHFFBEAgAiAENgJMIAIgBTYCSCACIAM2AkQgAkG+CTYCQEGNvwQgAkFAaxAxDAELIAAoAgQgBkECdGogACgCDCAHQQJ0ak0NACABEB4hAEHQzgooAgAoAhAoAsQBIANBBnRqKAIIIQYgASgCECgC+AEhASACIAM2AmAgAiADNgJkIAIgBjYCaCACQcQJNgJQIAIgAzYCVCACIAA2AlggAiABNgJcQZ2+BCACQdAAahAxCyACQfAAaiQADwtB6+kAQZm4AUGsCUHy8wAQAAALtQEBAn8gABArIQICQAJAIAAoAhAtAIYBQQFHDQAgASAAQQEQexogABAeQToQkwEiAEUNASACIABBAWoiAUEAEHMiAA0AIAIgAUEBEHMiAEGGJkHAAkEBEC4aIAAoAhBBAToAhgEgAkEBQQAQyQIhAQNAIAFFDQEgACABED4gASgCDCIDRwRAIAAgASADEGgLIAJBASABEMkCIQEMAAsACyAADwtBkZkBQcq4AUHfB0GRzQEQAAALpQMBB38CQAJAIABB1N4AQQAQayICRQ0AIAIoAggiA0UNACAAQeQwQQEQkAEiBUHsJUGYAkEBEC4aIANBBBAYIQcgABAaIQIDQCACBEAgACACECkhAQNAIAEEQCABKAIQLQBxBEAgByAEQQJ0aiABNgIAIARBAWohBAsgACABECwhAQwBCwsgACACEBshAgwBCwsgAyAERw0BIANBACADQQBKGyEEQQAhAwNAIAMgBEZFBEAgByADQQJ0aigCACIGQVBBACAGKAIAQQNxIgFBAkcbaigCKCECIAYgBkEwQQAgAUEDRxtqKAIoIAUQqg4gAiAFEKoOELwEKAIQIgIgBigCECIBKAIINgIIIAFBADYCCCACIAEoAmA2AmAgAUEANgJgIAIgASgCbDYCbCABQQA2AmwgAiABKAJkNgJkIAFBADYCZCACIAEoAmg2AmggAUEANgJoIAYQygIgA0EBaiEDDAELCyAHEBcgBRAaIQEDQCABBEAgBSABEBsgARD8AiAAIAEQtAEhAQwBCwsgBRCVAQsPC0HoHkHKuAFBoAhBuTAQAAALlwEBBX8jAEEQayIEJABBASECA0AgAiAAKAIQIgMoArQBSkUEQAJAIAEgAygCuAEgAkECdGooAgAiAxAeIgVBgAQgASgCABEDAARAIAQgBTYCAEG3qgQgBBAnDAELQRAQTSIGIAM2AgwgBiAFNgIIIAEgBkEBIAEoAgARAwAaCyADIAEQrA4gAkEBaiECDAELCyAEQRBqJAALYgECfwJ/AkAgASgCECIBLQCsAUEBRw0AIAEoAsQBQQFHDQAgASgCzAFBAUcNACABKALIASEBA0AgASgCACICKAIQIgNB+ABqIQEgAy0AcA0AC0EBIAAgAhCrAQ0BGgtBAAsLTQECfyABEB4iAwRAAkAgA0G0N0EHENcBDQAgACABEB5BgAQgACgCABEDACIARQ0AIAAoAgwhAgsgAg8LQaHPAUHW/ABBDEH79gAQAAALGAAgAEHAxQpB7MkKKAIAEH8iABCsDiAAC/IBAgN/BnwgACABKAIsIAEoAggiAyABKAIEIgFBAWsiAkEAIAEgAk8bbEEEdGoiAikDADcDECAAIAIpAwg3AxggACACKQMINwMIIAAgAikDADcDAEEBIAMgA0EBTRshAyAAKwMYIQUgACsDCCEGIAArAxAhByAAKwMAIQhBASEBA0AgASADRgRAIAAgBTkDGCAAIAY5AwggACAHOQMQIAAgCDkDAAUgBSACIAFBBHRqIgQrAwgiCSAFIAlkGyEFIAcgBCsDACIKIAcgCmQbIQcgBiAJIAYgCWMbIQYgCCAKIAggCmMbIQggAUEBaiEBDAELCwsqAQF/AkAgAUUNACAAIAEQPiIARQ0AIAAtAABFDQAgABBqQQFzIQILIAILUQEBfwJAAkAgA0UNACADQToQkwEiBEUNACAEQQA6AAAgACACIAMgBEEBaiIDIAERCAAgBEE6OgAADAELIAAgAiADQQAgAREIAAsgACADNgIkC1oAIAEoAghFBEAgACABEIcICyACIABBoI4LKAIAIAErAwBEAAAAAAAA8D8QUzkDACACIABBpI4LKAIAIAEoAggQUTYCCCACIABBqI4LKAIAIAEoAgwQUTYCDAsdAQF/IAEoAhAtAKwBBH9BAAUgACABEKsBQQBHCwuXBAIIfAh/IwBBQGoiDCQAIAEoAgAhDyACKwMIIQYgAisDACEHIAEoAgQhEESxoRYq087SRyEDQX8hDUF/IQIDQAJAIAsgEEYEQCAPIA1BMGxqIgEoAgAgAiACIAEoAgRBAWtGayIBIAFBA3BrQQR0aiECQQAhAQwBCyAPIAtBMGxqIgEoAgQhESABKAIAIRJBACEBA0AgASARRgRAIAtBAWohCwwDBSASIAFBBHRqIg4rAwAgB6EiBCAEoiAOKwMIIAahIgQgBKKgIgQgAyACQX9GIAMgBGRyIg4bIQMgASACIA4bIQIgCyANIA4bIQ0gAUEBaiEBDAELAAsACwsDQCABQQRGRQRAIAwgAUEEdCILaiINIAIgC2oiCysDADkDACANIAsrAwg5AwggAUEBaiEBDAELCyAMKwMwIAehIgMgA6IgDCsDOCAGoSIDIAOioCEEIAwrAwAgB6EiAyADoiAMKwMIIAahIgMgA6KgIQhEAAAAAAAAAAAhA0QAAAAAAADwPyEJA0AgACAMIAkgA6BEAAAAAAAA4D+iIgpBAEEAEKwBIAggBKGZRAAAAAAAAPA/YyAJIAOhmUTxaOOItfjkPmNyRQRAIAggACsDACAHoSIFIAWiIAArAwggBqEiBSAFoqAiBSAEIAhkIgEbIQggBSAEIAEbIQQgAyAKIAEbIQMgCiAJIAEbIQkMAQsLIAxBQGskAAsyACAAQQAQngECQCAAECUEQCAAQQA6AA8MAQsgAEEANgIECyAAECUEfyAABSAAKAIACwt+AQN/IwBBEGsiAiQAA0ACQEEAIQMgAEUNACAAKAIAIgRFDQAgACgCBCEDIAIgATYCDCACQZyXAzYCCCACIAQ2AgQgAiADNgIAQeCRC0G2MiACENoBIABBCGohAEGcf0HgkQsQtg4iA0EEQQAQFRCeAw0BCwsgAkEQaiQAIAML7wEBBX9BAUEIEBghBQJAIAAEQANAIAFBAUYEQEEAIQEgACECA0AgAkH23AEQ2QMhAwNAIAJFDQUgAUECaiEEIAFBA3QgBSABQQFqIgEgBEEIEGAiBWogAq0gA61CIIaENwIAIAIgA2ohBEEAIQJBACEDIAQgABA3IABqRg0ACyAEQfbcARC1BSAEaiECDAALAAsgAUH23AFqIAFB99wBaiECIAFBAWohAS0AACEDA0AgAi0AACIERQ0BIAJBAWohAiADIARHDQALC0GOqgNBqf0AQTVB4PIAEAAAC0H1zgFBqf0AQS1B4PIAEAAACyAFC/EBAQN/IAJBAE4hBSABIQMCQAJAA0AgAyEEIAFFDQECQAJ/IAVFBEAgASgCECIBKAL4ASIDQQBMDQJB0M4KKAIAKAIQKALEASABKAL0AUEGdGooAgQgA0ECdGpBBGsMAQtB0M4KKAIAKAIQKALEASABKAIQIgEoAvQBQQZ0aigCBCABKAL4ASIDQQJ0akEEagsoAgAiAUUNACABKAIQKAL4ASADayACbEEATA0DIAEhAyAAIAEQtA4NASABIAQgACABEK0OGyEDDAELCyAEDwtBzhZBmbgBQfIGQfM2EAAAC0GejwNBmbgBQfgGQfM2EAAACxcAIAAoAhAiAEEAOgC1ASAAQgE3AuwBCxIAIAEEfyAAIAEQPhBqBSACCwtPAQF8QZCLCysDACIBRAAAAAAAAAAAZAR8IAEFRAAAAAAAAFJAIAAgAEEAQdObAUEAEB9EAAAAAAAA8L9EAAAAAAAAAAAQUyIBIAG9UBsLCz0BAn8gABDBDkEBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEL0OIAFBAWohAQwBCwsL+QYBDX8jAEEwayICJAACQAJAAkADQCAFQQtHBEAgAEUNAyAALQAARQ0DIAVBkAhsQYCRBWoiBygCACIIRQ0EIAgoAgAiBEUNBEEAIQkgABA3IQoDQCAEBEBBACEBIAQQNyELQQAhAwJAA0AgACABaiEGAkACQANAIAEgCkYgAyALRnINAiAGLAAAIgxBX3FBwQBrQRlLDQEgAyAEaiwAACINQV9xQcEAa0EaTwRAIANBAWohAwwBCwsgDBD3ASANEPcBRw0DIANBAWohAwsgAUEBaiEBDAELCwNAIAEgCkcEQCAAIAFqIAFBAWohASwAAEFfcUHBAGtBGk8NAQwCCwsDQCADIAtGDQYgAyAEaiADQQFqIQMsAABBX3FBwQBrQRlLDQALCyAIIAlBAWoiCUECdGooAgAhBAwBCwsgBUEBaiEFDAELCyACQgA3AyggAkIANwMgIAIgADYCECACQSBqIQAjAEEQayIDJAAgAyACQRBqIgE2AgQgAyABNgIMIAMgATYCCAJAAkACQAJAQQBBAEHb4gMgARBOIgRBAEgNACAEQQFqIQEgBCAAEDggABAhayIFTwRAIAAgASAFaxDRAQsgABAhIQUgBCAAECUEfyAAIAVqBSAAKAIAIAVqCyABQdviAyADKAIMEE4iAUcgAUEATnENASABQQBMDQAgABAlBEAgAUGAAk8NAyAAIAAtAA8gAWo6AA8gABAhQRBJDQFBv64DQY/9AEHEAUHZHRAAAAsgACAAKAIEIAFqNgIECyADQRBqJAAMAgtBzZYDQY/9AEG/AUHZHRAAAAtB0skBQY/9AEHCAUHZHRAAAAsgABAhIAAQOE8EQCAAQQEQ0QELIAJBIGoiABAhIQMCQCAAECUEQCAAIANqQQA6AAAgAiACLQAvQQFqOgAvIAAQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyACKAIgIANqQQA6AAAgAiACKAIkQQFqNgIkCwJAIAJBIGoQJQRAIAJBADoALwwBCyACQQA2AiQLIAJBIGoiABAlIQMgACACKAIgIAMbIgAQtwgEQCACIAA2AgBBnjQgAhAnCyACLQAvQf8BRgRAIAIoAiAQFwtB/i4Qvg4hBwsgAkEwaiQAIAcPC0GLngNB7LYBQfAFQfaJARAAAAtBj9EBQey2AUHxBUH2iQEQAAALRwEBfAJAIABEAAAAAAAAAABhIAFEAAAAAAAAAABhcQ0AIAAgARCnASICRAAAAAAAAAAAZg0AIAJEGC1EVPshGUCgIQILIAILJgAgBCADIAIbIgMQVyEEIAUgASADEESiIACgIAEgBKIgAKAQ4wULXQECfwJAIAAoAhAiASgCjAJFDQAgASgC6AEhAgNAIAIgASgC7AFKDQEgASgCjAIgAkECdGogASgCxAEgAkEGdGooAgQoAgA2AgAgAkEBaiECIAAoAhAhAQwACwALC50CAgN/AnwjAEEQayIEJAAgAARAIAErAwghBiABKwMAIQcCQCAAKAIEIgEgACgCCEcEQCAAKAIAIQMMAQsCQCAEIAFBAXRBASABGyIBQf///x9LBH9BxAAFIAAoAgAgAUEGdBA9IgMNAUEwCxCjATYCAEHo+gYoAgBBu/QDIAQQHRoQJgALIAMgACgCCCIFQQZ0akEAIAEgBWtBBnQQMxogACABNgIIIAAgAzYCACAAKAIEIQELIAMgAUEGdGoiAUIANwMgIAFBADoAGCABIAI5AxAgASAGOQMIIAEgBzkDACABQgA3AzggAUIANwMoIAFBADoAMCAAIAAoAgRBAWo2AgQgBEEQaiQADwtBg88BQaq5AUHfAEGqpgEQAAALwQUCB3wIfyMAQTBrIgokAAJ/IAIoAhAoAggiCygCACIMKAIIBEAgDEEQaiENIAxBGGoMAQsgDCgCACINQQhqCysDACEEAkAgDSsDACIDIAwgCygCBCINQTBsaiICQSRrKAIARQRAIAJBMGsoAgAgAkEsaygCAEEEdGohAgsgAkEQaysDACIHoSIFIAWiIAQgAkEIaysDACIFoSIGIAaioESN7bWg98awPmMEQCAAIAQ5AwggACADOQMADAELIAEoAhAvAYgBQQ5xIgFBCkYgAUEERnJFBEBBACEBRAAAAAAAAAAAIQMDQAJAIAEgDUYEQCADRAAAAAAAAOA/oiEDQQAhAQwBCyAMIAFBMGxqIgIoAgQhDyACKAIAIQ5BAyECQQAhCwNAIAIgD08EQCABQQFqIQEMAwUgAyAOIAtBBHRqIhArAwAgDiACQQR0aiIRKwMAoSIDIAOiIBArAwggESsDCKEiAyADoqCfoCEDIAJBA2ohAiALQQNqIQsMAQsACwALCwNAAkACQCABIA1HBEAgDCABQTBsaiICKAIEIQ8gAigCACEOQQMhAkEAIQsDQCACIA9PDQMgDiALQQR0aiIQKwMAIgcgDiACQQR0aiIRKwMAIgWhIgQgBKIgECsDCCIGIBErAwgiCKEiBCAEoqCfIgQgA2YNAiACQQNqIQIgC0EDaiELIAMgBKEhAwwACwALIApBjwo2AgQgCkH3uAE2AgBB6PoGKAIAQdaxBCAKEB0aEG4ACyAAIAggA6IgBiAEIAOhIgaioCAEozkDCCAAIAUgA6IgByAGoqAgBKM5AwAMAwsgAUEBaiEBDAALAAsgCiAEIAWgRAAAAAAAAOA/ojkDKCAKIAopAyg3AxggCiADIAegRAAAAAAAAOA/ojkDICAKIAopAyA3AxAgACALIApBEGoQtQ4LIApBMGokAAuTAgIFfwR8IAAoAhAiAygCwAEhAkEAIQADfCACIABBAnRqKAIAIgEEfCAAQQFqIQAgBiABQTBBACABKAIAQQNxQQNHG2ooAigoAhArAxCgIQYMAQUgAygCyAEhBEEAIQEDQCAEIAFBAnRqKAIAIgUEQCABQQFqIQEgByAFQVBBACAFKAIAQQNxQQJHG2ooAigoAhArAxCgIQcMAQsLIAMrAxgiCCACKAIAIgJBMEEAIAIoAgBBA3FBA0cbaigCKCgCECsDGKEgAysDECIJIAYgALijoRCnASAEKAIAIgBBUEEAIAAoAgBBA3FBAkcbaigCKCgCECsDGCAIoSAHIAG4oyAJoRCnAaBEAAAAAAAA4D+iCwsL8wICBH8GfCMAQSBrIgMkACACKAI0IgQEQCABKAIQIgUrABAhByACKwAQIQggAisAICEJIAQgAisAKCACKwAYoEQAAAAAAADgP6IgBSsAGKA5A0AgBCAHIAkgCKBEAAAAAAAA4D+ioDkDOCAAQQogBBCxAyAAIAEQ6QUaCyABKAIQIgQrAxghByAEKwMQIQhBACEEA0AgAigCMCAESgRAIAQEQCACKAI4IARBAnRqIgYoAgAhBQJ8IAItAEAEQCADIAUpAxA3AwAgAyAFKQMYNwMIIAYoAgArAyghCSADKwMAIgohCyADKwMIDAELIAMgBSkDIDcDECADIAUpAyg3AxggBigCACsDECELIAMrAxAhCiADKwMYIgkLIQwgAyAHIAmgOQMYIAMgCCAKoDkDECADIAcgDKA5AwggAyAIIAugOQMAIAAgA0ECEDYLIAAgASACKAI4IARBAnRqKAIAEMUOIARBAWohBAwBCwsgA0EgaiQAC1MBAn8CQCAAKAI8IgJFDQAgAiABEEdFDQAgAA8LQQAhAgNAIAAoAjAgAkwEQEEADwsgAkECdCACQQFqIQIgACgCOGooAgAgARDGDiIDRQ0ACyADC9EBAQR/IAIoAhAiBigC6AEhAyABKAIQIgQoAugBIQUCQAJAAkBBzM4KLQAARQRAIAVFIANFciADIAVGcg0BIAQtALUBQQdGBEAgBC0ArAFBAUYNBAsgBi0AtQFBB0cNAiAGLQCsAUEBRg0DDAILIAMgBUcNAQsgACgCECIDKALEASAEKAL0AUEGdGooAjgiAEUNASAAKAIIIAAoAgQgAiABIAMtAHRBAXEiABsoAhAoAqwCbGogASACIAAbKAIQKAKsAmotAABBAEcPC0EBDwtBAAs3AQF/IABBmIwLKAIAQeX0BBBRIgItAAAEfyACBSAAQZSMCygCAEHl9AQQUSIAIAEgAC0AABsLC+oEAQZ/AkAgAEHYjAsoAgBB5fQEEFEiAi0AAEUEQAwBCyACEO4DIgchAgNAIAIoAgAiBkUNASAGQdquARBHBEAgAkEEaiECIARBAXIhBAwBCyACIQMgBkGDsAEQRwRAA0AgAyADKAIEIgU2AgAgA0EEaiEDIAUNAAsgBEEEciEEDAELIAZBnS0QRwRAA0AgAyADKAIEIgU2AgAgA0EEaiEDIAUNAAsgBEEIciEEDAELIAZB1S0QRwRAIAJBBGohAiAEQSByIQQMAQsgBkHm8QAQRwRAA0AgAyADKAIEIgU2AgAgA0EEaiEDIAUNAAsgBEEDciEEDAELAkAgBkHYrQEQR0UNACAAKAIQKAIIKAIIIgVFDQAgBSgCCEEERw0AIAUrAxAQugeZRAAAAAAAAOA/Y0UNACAFKQMYQgBSDQAgBSkDIEIAUg0AA0AgAyADKAIEIgU2AgAgA0EEaiEDIAUNAAsgBEHAAHIhBAwBCwJAIAZB8K8BEEdFDQAgACgCECgCCCgCCCIFRQ0AIAUoAghBAksNAANAIAMgAygCBCIFNgIAIANBBGohAyAFDQALIARBgARyIQQMAQsgAkEEaiECDAALAAsgASAAKAIQKAIIKAIIIgAEfyAEQYDgH3FFIAAoACgiAEGA4B9xRXJFBEBBsZQDQdy4AUG7A0H8NhAAAAsgACAEciICQYDgH3EgAEEBcSAEQQFxcnIgAkECcXIgAkEEcXIgAkEIcXIgAkEQcXIgAkEgcXIgAkHAAHFyIAJBgAFxciACQYACcXIgAkGABHFyIAJBgAhxciACQYAQcXIFIAQLNgIAIAcLpgECAX8EfCMAQSBrIgIkACABKAIQIgErABAhAyABKwNgIQUgAiABKwNQRAAAAAAAAOg/okQAAAAAAADgP6IiBCABKwAYoCIGOQMYIAIgBjkDCCACIAMgBUR8YTJVMCrlP6IiA6AiBTkDACACIAUgAyADoKE5AxAgACACQQIQNiACIAIrAwggBCAEoKEiBDkDGCACIAQ5AwggACACQQIQNiACQSBqJAALDAAgAEE6EJMBQQBHC2AAIABBADYCACACIAAQyQ4iAARAIAEgABDcAQsCQEGYjQsoAgAiAEUNACACIAAQPiIARQ0AIAAtAABFDQAgASACQZiNCygCAEQAAAAAAADwP0QAAAAAAAAAABBTEIACCwv+AQIJfwF8IAAoAhAiASgC7AEhBSABKALoASIDIQIDQCACIAVKBEADQAJAIAMgBUoNACADQQZ0IgJB0M4KKAIAKAIQKALEAWpBADoAMSABKALEASACaiIBKAIEIAEoAgBBBEEJEJQBIANBAWohAyAAKAIQIgEoAuwBIQUMAQsLBUEAIQQgASgCxAEgAkEGdGoiBygCACIGQQAgBkEAShshCANAIAQgCEZFBEACfyAHKAIEIARBAnRqKAIAKAIQIgkrAxAiCplEAAAAAAAA4EFjBEAgCqoMAQtBgICAgHgLIQYgCSAGNgL4ASAEQQFqIQQMAQsLIAJBAWohAgwBCwsLBABBAAswAQF/IwBBEGsiAiQAIAAQHiEAIAIgATYCBCACIAA2AgBBk6kEIAIQJyACQRBqJAALfAAgAEIANwMAIABCADcDCAJAAkACQAJAIAJBAWsOAwIBAwALIAAgASkDADcDACAAIAEpAwg3AwgPCyAAIAErAwA5AwAgACABKwMImjkDCA8LIAAgASsDADkDCCAAIAErAwiaOQMADwsgACABKwMAOQMIIAAgASsDCDkDAAvGBwELfyMAQRBrIgQkACAEQQA2AgggBEIANwMAAkAgACgCECIDLQDwAUEBRw0AIAMoAugBIQkDQAJAAkACQCADKALsASAJTgRAIAlBBnQiCCADKALEAWoiBSgCACICRQ0CQQAhASACQQAgAkEAShshAiAFKAIEIgUoAgAoAhAoAvgBIQsDQCABIAJGRQRAIAUgAUECdGooAgAoAhBBADYCsAEgAUEBaiEBDAELC0EAIQUgBEEANgIEA0AgBSADKALEASAIaiIBKAIAIgJODQIgASgCBCIBIAVBAnRqIAEgAkECdGogBUF/c0ECdGogAy0AdEEBcRsoAgAhA0EAIQZBACEHQQAhAgNAIAMoAhAiASgC3AEgAk0EQEEAIQIDQCABKALUASACTQRAAkAgBiAHckUEQCAEIAMQ8Q0MAQsgASgCsAEgB3INACAAIAMgBCAJEOsNCyAFQQFqIQUgACgCECEDDAQFIAAgASgC0AEgAkECdGooAgAQ1QUgBmohBiADKAIQIQEgAkEBaiECDAELAAsABSAAIAEoAtgBIAJBAnRqKAIAENUFIAdqIQcgAkEBaiECDAELAAsACwALIARBADYCBCAEKAIAEBcMBAsCQCAEKAIEIgJFDQBBACEBAkAgAy0AdEEBcQ0AA0AgASACQQF2Tw0BIAQgARDvByECIAQgASAEIAFBf3MiAyAEKAIEahDvBxDkDSAEIAQoAgQgA2ogAhDkDSABQQFqIQEgBCgCBCECDAALAAtBACEKQQAhAQNAIAEgACgCECIDKALEASIGIAhqKAIAIgdORQRAIAQgARDvByECIAAoAhAoAsQBIAhqKAIEIAFBAnRqIAI2AgAgAigCECABIAtqNgL4ASABQQFqIQEMAQsLA0AgByAKTA0BQQAhAiAGIAhqKAIEIApBAnRqKAIAIgsoAhAoAtABIgUEQANAAkAgACgCECEDIAUgAkECdGooAgAiAUUNACABQTBBACABKAIAQQNxIgZBA0cbaigCKCgCECgC+AEhByABQVBBACAGQQJHG2ooAigoAhAoAvgBIQYCQAJAIAMtAHRBAXFFBEAgBiAHSA0BDAILIAYgB0wNAQsgACABENUFDQcgARCwCCAAIAEQ4g0gAkEBayECIAsoAhAoAtABIQULIAJBAWohAgwBCwsgAygCxAEiBiAIaigCACEHCyAKQQFqIQoMAAsAC0HQzgooAgAoAhAoAsQBIAhqQQA6ADELIAlBAWohCQwBCwtB4Z4DQZm4AUH8CkGlORAAAAsgBEEQaiQAC7ECAgl/AnwjAEEQayIFJAAgACACOgBBIAErAwghDCAAIAErAwAiDTkDECAAIAw5AyggACAMIAArAwihOQMYIAAgDSAAKwMAoDkDICAAKAIwIgRBACAEQQBKGyEHQQ5BDyAEQQFrIgYbIQhBDUEPIAYbIQkDQCADIAdGRQRAAn9BACACRQ0AGiAALQBABEAgCSADRQ0BGkEHQQUgAyAGRhsMAQsgCCADRQ0AGkELQQogAyAGRhsLIQQgA0ECdCIKIAAoAjhqKAIAIAUgASkDCDcDCCAFIAEpAwA3AwAgBSACIARxENIOIAAoAjggCmooAgAhBAJAIAAtAEAEQCABIAErAwAgBCsDAKA5AwAMAQsgASABKwMIIAQrAwihOQMICyADQQFqIQMMAQsLIAVBEGokAAvxAgIFfAN/IwBBIGsiCCQAIAFBCGorAwAhBSAAKwMAIQQgASsDACEGIAAgASkDADcDACAAKwMIIQMgACABKQMINwMIIAUgA6EhAyAGIAShIQQgACgCNCIBRSACckUEQCABIAQgASsDKKA5AyggASADIAErAzCgOQMwCwJAIAAoAjAiCUUNACAEIAMgAC0AQBsgCbejIQdBACEBA0AgASAJTg0BAn8gByABuKIiA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLIQkCfyAHIAFBAWoiCriiIgOZRAAAAAAAAOBBYwRAIAOqDAELQYCAgIB4CyAJayEJIAAoAjggAUECdGooAgAhAQJ8IAAtAEAEQCAFIQQgASsDACAJt6AMAQsgASsDCCAJt6AhBCAGCyEDIAggBDkDGCAIIAgpAxg3AwggCCADOQMQIAggCCkDEDcDACABIAggAhDTDiAAKAIwIQkgCiEBDAALAAsgCEEgaiQAC4wDAgR8An8jAEEgayIHJAACQCACKAI0IggEQCAIKwMYIgREAAAAAAAAAABkIAgrAyAiA0QAAAAAAAAAAGRyRQ0BIAFBq+QAECMiAQRAIAcgB0EYajYCBCAHIAdBCGo2AgAgAUHThAEgBxBJIgFBAEoEQCAHKwMIRAAAAAAAAFJAoiIFIAWgIgUgBKAhBCABQQFHBEAgBysDGEQAAAAAAABSQKIiBSAFoCADoCEDDAQLIAUgA6AhAwwDCyADRAAAAAAAACBAoCEDIAREAAAAAAAAMECgIQQMAgsgA0QAAAAAAAAgQKAhAyAERAAAAAAAADBAoCEEDAELQQAhCANAIAggAigCME5FBEAgB0EIaiABIAIoAjggCEECdGooAgAQ1A4gBysDECEFIAcrAwghBgJ8IAItAEAEQCAGIASgIQQgAyAFECQMAQsgBCAGECQhBCAFIAOgCyEDIAhBAWohCAwBCwsLIAAgAzkDCCAAIAQ5AwAgAiAAKQMANwMAIAIgACkDCDcDCCAHQSBqJAALnwIBB38gACgCECIEKALoASEFA0BBACEBQQAhBiAFIAQoAuwBSkUEQANAIAEgBUEGdCIHIAQoAsQBaiICKAIAIgNORQRAIAIoAgQgAUECdGooAgAoAhAiAiABNgKsAiACQQA6ALQBIAJBADYCsAEgAigC1AFFIAZyRQRAQQFBDBAYIgIgAzYCBCACIAM2AgAgAiADIANsQQEQGDYCCCAAKAIQIgQoAsQBIAdqIAI2AjhBASEGCyABQQFqIQEMAQsLQQAhAQJAIAZFDQADQCABIAQoAsQBIAdqIgMoAgBODQEgAygCBCABQQJ0aigCACIDKAIQKAKwAUUEQCAAIAMQ9g0gACgCECEECyABQQFqIQEMAAsACyAFQQFqIQUMAQsLC0UBA38gAARAA0AgAyICIAAoAgQiBEkEQCACQQFqIQMgACACEL4EIAFHDQELCyACIARJDwtB3s8BQZ66AUH2BUHaKxAAAAsTACAAIAFBpyJB/wVBnroBEI8DC4wEAQR/IwBBEGsiByQAAkACQAJAIAIgARDWDgRAIAEgA0cNASACEOsFIQADQCAERQRAQYPPAUGeugFB/wVBvogBEAAACyAGIAQoAgRJBEBBACEBIAQgBhDXDiIDEOsFIABGBEADQCAAIAFGDQUgAyABEL4EIQUgAUEBaiEBIAIgBRDWDg0ACwsgBkEBaiEGDAELCxCXCCEAIAJFDQIgAigCCEEEEBggAigCCCEDIAIoAgAgAigCBCIBQQJ0ECAhAiAAIAM2AgggACABNgIEIAAgAjYCACAEIAAQ2Q4MAQsgAkUNAgJAIAIoAgQiBSACKAIIRwRAIAIoAgAhBgwBCwJAIAcgBUEBdEEBIAUbIgVB/////wNLBH9BxAAFIAIoAgAgBUECdBA9IgYNAUEwCxCjATYCAEHo+gYoAgBBu/QDIAcQHRoQJgALIAYgAigCCCIIQQJ0akEAIAUgCGtBAnQQMxogAiAFNgIIIAIgBjYCACACKAIEIQULIAYgBUECdGogATYCACACIAVBAWo2AgQgACABECkhAQNAIAEEQCAAIAFBUEEAIAEoAgBBA3FBAkcbaigCKCACIAMgBBDYDiAAIAEQLCEBDAELCyACKAIEIgBFDQAgAiAAQQFrNgIECyAHQRBqJAAPC0HC0AFBnroBQfYFQf0MEAAAC0GDzwFBnroBQfYFQZmmARAAAAsUACAAIAFBh6YBQf8FQZ66ARCFAgv+DAMJfwl8AX4jAEHgAWsiBSQAIAEoAgAiByAHQTBrIgogBygCAEEDcSIGQQJGGygCKCEJIAdBMEEAIAZBA0cbaigCKCgCECIIKwAQIQ4gBygCECIGKwAQIQ8gBSAGKwAYIAgrABigIhQ5A6gBIAUgBSkDqAE3A7gBIAUgDyAOoCIPOQOgASAFIAUpA6ABNwOwASAJKAIQIggrABAhDiAGKwA4IRAgBSAGKwBAIAgrABigIhI5A9gBIAUgECAOoCIQOQPQASAFIAUpA9gBNwPIASAFIAUpA9ABNwPAAQJAAkAgAkEBRwRAQaiLCy0AAEEBRw0BCwJAIANBBEcNACAFQQA2AmggBUEANgIoIAVCADcDICAFQgA3A2AgABAaIQYDQCAGBEAgBUHgAGoQlwgiARDZDiAAIAYgASAGIAVBIGoQ2A4gACAGEBshBgwBCwsgB0EoaiEMIAVB4ABqEJYIQQAhAUEAIQkDQCAFKAIkIAFLBEACQCAFQSBqIAEQ1w4iCBDrBSICQQNJDQAgCQRAIAkoAgQgAk0NAQtBACEDIAxBUEEAIAcoAgBBA3EiAkECRxtqKAIAIQsgDEEwQQAgAkEDRxtqKAIAIQ0gCBDrBSECA0ACQCACIAMiBkYEQCACIQYMAQsgBkEBaiEDIAggBiACIAYbQQFrEL4EIA1HIAggBhC+BCALR3INAQsLIAggCSACIAZLGyEJCyABQQFqIQEMAQsLAnwgCQRAQQAhBkQAAAAAAAAAACEOA0AgCSgCBCAGTQRAIA4gEaMhDiAFQSBqEJYIIBMgEaMMAwUgEUQAAAAAAADwP6AhESAOIAkgBhC+BCgCECIAKwMYoCEOIBMgACsDEKAhEyAGQQFqIQYMAQsACwALIAVBIGoQlgggACgCECIAKwMYIAArAyigRAAAAAAAAOA/oiEOIAArAxAgACsDIKBEAAAAAAAA4D+iCyAQIA+gRAAAAAAAAOA/oiIRoSITIA4gEiAUoEQAAAAAAADgP6IiFaEiFhBPIg5EAAAAAAAAAABhDQAgBSAVIBYgDqMgECAPoSIPIA+iIBIgFKEiDyAPoqCfRAAAAAAAABRAoyIPoqEiEDkDyAEgBSARIBMgDqMgD6KhIg45A7ABIAUgDjkDwAEgBSAQOQO4AQsgByAHIAogBygCAEEDcUECRhsoAiggBUGgAWpBBCAEEJ0BIAcQqwMMAQsCQAJ8IA8gEKEiDiAOoiAUIBKhIhEgEaKgRI3ttaD3xrA+YwRAIAUgBSkDoAE3A7ABIAUgBSkDqAE3A7gBIAUgBSkD0AE3A8ABIAUgBSkD2AE3A8gBRAAAAAAAAAAAIQ5EAAAAAAAAAAAMAQsgAkEBayIGQQBIDQEgBSASIBAgD6EiDiAAKAJIKAIQKAL4ASIAIAZsQQJttyIToiARIA4QTyISoyIVoDkDyAEgBSAQIBEgE6IgEqMiEKA5A8ABIAUgFCAVoDkDuAEgBSAPIBCgOQOwASAOQQAgAGu3Ig+iIBKjIQ4gESAPoiASowshDyAFQUBrIQhBACEHIANBBkchDANAIAIgB0YNAkEAIQYCQCAJIAEgB0ECdGooAgAiACAAQTBrIgMgACgCAEEDcUECRhsoAihGBEADQCAGQQRGDQIgBkEEdCIKIAVB4ABqaiILIAVBoAFqIApqIgopAwg3AwggCyAKKQMANwMAIAZBAWohBgwACwALA0AgBkEERg0BQQAgBmtBBHQgBWoiCiAFQaABaiAGQQR0aiILKQMINwOYASAKIAspAwA3A5ABIAZBAWohBgwACwALAkAgDEUEQCAFIAUpA2A3AyAgBSkDaCEXIAUgBSkDcDcDMCAFIBc3AyggBSAFKQN4NwM4IAggBSkDgAE3AwAgCCAFKQOIATcDCCAFIAUpA5gBNwNYIAUgBSkDkAE3A1AgBUEENgIUIAUgBUEgajYCECAFIAUpAhA3AwggBUEIaiAFQRhqELQEIAAgACADIAAoAgBBA3FBAkYbKAIoIAUoAhggBSgCHCAEEJ0BDAELIAAgACADIAAoAgBBA3FBAkYbKAIoIAVB4ABqQQQgBBCdAQsgABCrAyAFIA4gBSsDuAGgOQO4ASAFIA8gBSsDsAGgOQOwASAFIA8gBSsDwAGgOQPAASAFIA4gBSsDyAGgOQPIASAHQQFqIQcMAAsAC0HixwFBnroBQdkHQacwEAAACyAFQeABaiQAC9EGAQl/IwBBEGsiBSQAIAVCADcDCCAFQgA3AwAgACgCECIGQcABaiEDA0AgAygCACIEBEAgBCgCECIEQQA2ArABIARBuAFqIQMMAQsLIAYoAuwBIQQgBigC6AEhAwNAIAMgBEwEQCAGKALEASADQQZ0akEANgIAIANBAWohAwwBCwsgABA0IQQgACgCECgCwAEhAwJAIAAgBEYiBgRAIAMhBAwBCwNAIAMiBCgCECgCuAEiAw0ACwtByAFBwAEgARshC0G4AUG8ASAGGyEKQQAhBgNAAkAgBARAIAQoAhAiAyALaigCACgCAA0BIAMoArABDQEgA0EBNgKwASAFIAQQgggDQCAFKAIIIgZFBEBBACEGDAMLIAUoAgAgBSgCBCIDQQJ0aigCACEIIAUgBkEBayIGNgIIIAUgA0EBaiAFKAIMcDYCBCAIRQ0CIAgoAhAtALUBQQdHBEAgACAIEKkOIAUgCCABEKIOBSABQQFqIgMgCCgCECgC6AEiCCgCECIJLACRAkcEQCAJKALoASEHA0AgCSgC7AEiBiAHTgRAIAAgCSgCjAIgB0ECdGooAgAQqQ4gB0EBaiEHIAgoAhAhCQwBCwsgCSgC6AEhBwNAIAYgB04EQCAFIAkoAowCIAdBAnRqKAIAIAEQog4gB0EBaiEHIAgoAhAiCSgC7AEhBgwBCwsgCSADOgCRAgsLDAALAAsCQCAGBEAgBSgCACAFKAIEIgRBAnRqKAIAIAUgBkEBazYCCCAFIARBAWogBSgCDHA2AgQNAQtB0M4KKAIAIQsgACgCECIDKALoASEBA0AgAygC7AEgAU4EQCABQQZ0IgQgCygCECgCxAFqQQA6ADECQCADLQB0QQFxRQ0AIAMoAsQBIARqIgooAgAiBEEATA0AIARBAWsiBkEBdkEBaiEEIAooAgQhCkEAIQMDQCADIARHBEAgCiADQQJ0aigCACAKIAYgA2tBAnRqKAIAEJAIIANBAWohAwwBCwsgACgCECEDCyABQQFqIQEMAQsLAkAgABBeIABHDQAgAhDDBEEATA0AIABBABCNCAsgBSgCABAXIAVBEGokAA8LQYnOAUGZuAFB/wlBsy0QAAALIAQoAhAgCmooAgAhBAwACwAL9QICBXwFfyABuCAEoiEIA0AgAyAKQQNqIg1LBEAgAiANQQR0aiEORAAAAAAAAAAAIQcgAiAKQQR0aiELA0AgByAIZUUEQCANIQoMAwsgByAIoyIEIAQgBCAOKwMIIAsrAygiBaGiIAWgIAQgBSALKwMYIgWhoiAFoCIGoaIgBqAgBCAGIAQgBSALKwMIIgWhoiAFoCIFoaIgBaAiBaGiIAWgIQUgBCAEIAQgDisDACALKwMgIgahoiAGoCAEIAYgCysDECIGoaIgBqAiCaGiIAmgIAQgCSAEIAYgCysDACIEoaIgBKAiBKGiIASgIgShoiAEoCEEQQAhCgNAIAEgCkYEQCAHRAAAAAAAAPA/oCEHDAIFAkAgBSAAIApBBXRqIgwrAxhELUMc6+I2Gj+gZUUNACAFIAwrAwhELUMc6+I2Gr+gZkUNACAMIAwrAwAgBBAyOQMAIAwgDCsDECAEECQ5AxALIApBAWohCgwBCwALAAsACwsLjAECAXwBfwJAIAEgAmUgACADZnIEfEQAAAAAAAAAAAUgACACZUUgASADZkVyRQRAIAEgAKEPCyAAIAJmIgVFIAEgA2VFckUEQCADIAKhDwsgBUUgACADZUVyRQRAIAMgAKEPCyABIAJmRSABIANlRXINASABIAKhCw8LQezqAkGeugFBzQRBsNwAEAAAC5EcAhd/CHwjAEHQAWsiBSQAIAFBADYCAEGYkQtBmJELKAIAQQFqNgIAQZyRCyAAKAJQIgxBnJELKAIAajYCACAAQdgAaiEDAkACQAJAA0AgAygCACIORQ0BIA4oAhAiBEH4AGohAyAELQBwDQALIAAoAlQhB0EAIQMCQANAIAMgDEYEQAJAIAcrAwAgBysDEGQNACAHKwMIIAcrAxhkDQBBASAUIBRBAU0bQQFrIRhB6PoGKAIAIRVBACEDDAMLBQJAIAcgA0EFdGoiBisDCCAGKwMYoZlEexSuR+F6hD9jDQAgBisDACAGKwMQoZlEexSuR+F6hD9jDQAgByAUQQV0aiIEIAYpAwA3AwAgBCAGKQMYNwMYIAQgBikDEDcDECAEIAYpAwg3AwggFEEBaiEUCyADQQFqIQMMAQsLQcqoBEEAEDEgABDABAwDCwNAIAMgGEcEQAJAIAcgA0EBaiIWQQV0aiIPKwMAIh0gDysDECIcZEUEQCAPKwMIIiEgDysDGCIeZEUNAQsgBSAWNgJQQZuoBCAFQdAAahAxIAAQwARBACEIDAULIA9BEGohESAPQRhqIRAgD0EIaiESIAcgA0EFdGoiC0EIaiETIAtBGGohDSALQRBqIQoCQAJAAkAgCysDCCIbIB5kIhcgCysDGCIaICFjIgkgCysDACIgIBxkIgYgCysDECIfIB1jIgRqamoiCEUNAEGAiwstAABFDQAgBSAWNgJkIAUgAzYCYCAVQeuHBCAFQeAAahAdGiAAEMAEDAELIAhFDQELAkACQCAEBEAgCiEDIA8hBAwBCyAcICBjBEBBACEGIAshAyARIQQMAQsgGiAhYwRAQQAhBiANIQMgEiEEQQAhCQwBC0EAIQYgEyEDIBAhBEEAIQlBACEXIBsgHmRFDQELIAMrAwAhGiADIAQrAwA5AwAgBCAaOQMACyAIQQFrIRlBACEDA0AgAyAZRkUEQAJAAkAgBkEBRgRAIAshBiARIQgMAQsgCUEBRkEAIQkEQCANIQYgEiEIDAELIBdFIBMhBiAQIQhBACEXDQELIAggBisDACAIKwMAoEQAAAAAAADgP6JEAAAAAAAA4D+gIho5AwAgBiAaOQMACyADQQFqIQNBACEGDAELCyAPKwMQIRwgDysDACEdIAsrAxAhHyALKwMAISALIBYhAyAgIB8gHSAcEN0OIhtEAAAAAAAAAABkRSATKwMAIA0rAwAgEisDACAQKwMAEN0OIhpEAAAAAAAAAABkRXINAQJAIBogG2QEQCALKwMQIh4gCysDACIboSAPKwMQIh8gDysDACIaoWQEQCAeIB9jRQRAIAsgHzkDAAwDCyAKIBo5AwAMAgsgHiAfYwRAIA8gHjkDAAwCCyARIBs5AwAMAQsgDSsDACIeIBMrAwAiG6EgECsDACIfIBIrAwAiGqFkBEAgHiAfYwRAIA0gGjkDAAwCCyATIB85AwAMAQsgHiAfYwRAIBIgHjkDAAwBCyAQIBs5AwALDAELCwJAAkAgACsDACIcIAcrAwAiHWMNACAcIAcrAxBkDQAgACsDCCIaIAcrAwhjDQAgGiAHKwMYZEUNAQtBgIsLLQAABEBBls4DQSpBASAVEEoaIAAQwAQgACsDACEcIAcrAwAhHQsgBysDECEaIAAgHCAdECQgGhAyOQMAIAcrAxghGiAAIAArAwggBysDCBAkIBoQMjkDCAsCQAJAIAArAygiHCAHIBRBBXRqIgRBIGsiAysDACIdYw0AIBwgBEEQaysDAGQNACAAKwMwIhogBEEYaysDAGMNACAaIARBCGsrAwBkRQ0BC0GAiwstAAAEQEHBzgNBJ0EBIBUQShogABDABCAAKwMoIRwgAysDACEdCyAEQRBrKwMAIRogACAcIB0QJCAaEDI5AyggBEEIaysDACEaIAAgACsDMCAEQRhrKwMAECQgGhAyOQMwC0EAIQggDEEDdEEQEBghCiAMQQJJDQEgBysDCCAHKwMoZEUNAQNAIAggDEYEQEEBIQgMAwUgByAIQQV0aiIDKwMYIRogAyADKwMImjkDGCADIBqaOQMIIAhBAWohCAwBCwALAAtB2KUEQQAQMQwBCyAOIA5BMGoiEyAOKAIAQQNxIgNBA0YbKAIoIA4gDkEwayISIANBAkYbKAIoRwRAIApBGGohDSAHQRhrIRFBACEJQQAhBANAAkAgDCAEIgNGBEAgB0E4ayERIAwhAwwBC0EAIQtBACEGIA0gCUEEdGoCfyADBEBBf0EBIAcgA0EFdCIEaisDCCAEIBFqKwMAZBshBgsgDCADQQFqIgRLBEBBAUF/IAcgBEEFdGorAwggByADQQV0aisDCGQbIQsLAkAgBiALRwRAIAcgA0EFdGohECALQX9HIAZBAUdxDQEgCiAJQQR0aiIDIBArAwAiGzkDACAQKwMYIRogAyAbOQMQIAMgGjkDCCAQQQhqDAILAkACQCAGQQFqDgIFAAELIAogCUEEdGoiBiAHIANBBXRqIgMrAwAiGzkDACADKwMYIRogBiAbOQMQIAYgGjkDCCADQQhqDAILIAoQFyAFQYIDNgJIIAUgBjYCRCAFIAY2AkBBpLcEIAVBQGsQMUEAIQgMBQsgCiAJQQR0aiIDIBArAxAiGzkDACAQKwMIIRogAyAbOQMQIAMgGjkDCCAQQRhqCysDADkDACAJQQJqIQkMAQsLA0ACfwJAIAMEQCADQQFrIQZBACELQQAhBCADIAxJBEBBf0EBIAcgBkEFdGorAwggByADQQV0aisDCGQbIQQLIAYEQEEBQX8gESADQQV0aisDACAHIAZBBXRqKwMIZBshCwsgBCALRwRAIAcgBkEFdGohDSALQX9HIARBAUdxRQRAIAogCUEEdGoiAyANKwMAIhs5AwAgDSsDGCEaIAMgGzkDECADIBo5AwggAyANKwMIOQMYDAMLIAogCUEEdGoiAyANKwMQIhs5AwAgDSsDCCEaIAMgGzkDECADIBo5AwggAyANKwMYOQMYDAILAkACQAJAIARBAWoOAgABAgsgCiAJQQR0aiIEIAcgBkEFdGoiAysDECIbOQMAIAMrAwghGiAEIBs5AxAgBCAaOQMIIAQgAysDGCIbOQMYIAQgAysDACIaOQMwIAQgGzkDKCAEIBo5AyAgBCADKwMIOQM4IAlBBGoMBAsgCiAJQQR0aiIEIAcgBkEFdGoiAysDECIbOQMAIAMrAwghGiAEIBs5AxAgBCAaOQMIIAQgAysDGDkDGAwCCyAKEBcgBUGkAzYCOCAFIAQ2AjQgBSAENgIwQaS3BCAFQTBqEDFBACEIDAULAkAgCEUNAEEAIQMDQCADIAxGBEBBACEDA0AgAyAJRg0DIAogA0EEdGoiBCAEKwMImjkDCCADQQFqIQMMAAsABSAHIANBBXRqIgQrAxghGiAEIAQrAwiaOQMYIAQgGpo5AwggA0EBaiEDDAELAAsAC0EAIQMDQCADIAxGBEACQCAFIAk2AswBIAUgCjYCyAEgBSAAKwMAOQOQASAFIAArAwg5A5gBIAUgACsDKDkDoAEgBSAAKwMwOQOoAUEAIQggBUHIAWogBUGQAWogBUHAAWoQ9w1BAEgEQCAKEBdB27AEQQAQMQwICyACBEAgBSAFKQLAATcDKCAFQShqIAVBuAFqELQEDAELIAUoAswBQSAQGCEIIAUoAswBIQZBACEDA0AgAyAGRgRARAAAAAAAAAAAIRxEAAAAAAAAAAAhHUQAAAAAAAAAACEgIAAtAB0EQCAAKwMQIhoQVyEgIBoQRCEdCyAFICA5A3ggBSAdOQNwRAAAAAAAAAAAIR0gAC0ARUEBRgRAIAArAzgiGhBXmiEdIBoQRJohHAsgBSAdOQOIASAFIBw5A4ABIAUgBSkCwAE3AyAgCCAGIAVBIGogBUHwAGogBUG4AWoQ9wcgCBAXQQBODQIgChAXQQAhCEGCsQRBABAxDAkFIAggA0EFdGoiBCAKIANBBHRqIgIpAwA3AwAgBCACKQMINwMIIAQgCiADQQFqIgNBACADIAZHG0EEdGoiAikDADcDECAEIAIpAwg3AxgMAQsACwALBSAHIANBBXRqIgRC/////////3c3AxAgBEL/////////9/8ANwMAIANBAWohAwwBCwsCQCAFKAK8ASIRQRAQRiIIBEBBACEJIAUoArgBIQRBASEGQQAhAwNAIAMgEUYEQEQAAAAAAAAkQCEcA0AgBkEBcUUgCUEOS3INBCAHIAwgCCAFKAK8ASAcENwOQQAhAwNAAkACQCADIAxGBEAgDCEDDAELIAcgA0EFdGoiACkDAEL/////////9/8AUgRAIAApAxBC/////////3dSDQILIBwgHKAhHAsgCUEBaiEJIAMgDEchBgwCCyADQQFqIQMMAAsACwAFIAggA0EEdCIAaiICIAAgBGoiACkDADcDACACIAApAwg3AwggA0EBaiEDDAELAAsACyAKEBdBACEIQYHaA0EAEDEMBQsgBkEBcQRAIA4gEyAOKAIAQQNxQQNGGygCKBAeIQAgBSAOIBIgDigCAEEDcUECRhsoAigQHjYCFCAFIAA2AhBB7NQEIAVBEGoQJyAFIAUpAsABNwMIIAVBCGogBUHoAGoQtAQgByAMIAUoAmggBSgCbEQAAAAAAAAkQBDcDgsgASAFKAK8ATYCACAKEBcMBAsgCUECagshCSAGIQMMAAsACyAKEBcgBSAOIBIgDigCAEEDcUECRhsoAigQHjYCAEHM5AMgBRAxQQAhCAsgBUHQAWokACAIC6sDAQN/IwBB4ABrIgUkACAFIAArAwA5AzAgBSAAKwMIOQM4IAUgASsDADkDQCAFIAErAwg5A0hBACEBAkAgAiAFQTBqIAVB2ABqEPcNQQBIDQACQCAEBEAgBSAFKQJYNwMIIAVBCGogBUHQAGoQtAQMAQsgAigCBEEgEBghASACKAIAIQYgAigCBCECQQAhAANAIAAgAkYEQCAFQgA3AyggBUIANwMgIAVCADcDGCAFQgA3AxAgBSAFKQJYNwMAIAEgAiAFIAVBEGogBUHQAGoQ9wcgARAXQQBODQJBACEBDAMFIAEgAEEFdGoiBCAGIABBBHRqIgcpAwA3AwAgBCAHKQMINwMIIAQgBiAAQQFqIgBBACAAIAJHG0EEdGoiBykDADcDECAEIAcpAwg3AxgMAQsACwALIAUoAlQiAkEQEEYiAQRAQQAhACAFKAJQIQQDQCAAIAJGBEAgAyACNgIADAMFIAEgAEEEdCIGaiIHIAQgBmoiBikDADcDACAHIAYpAwg3AwggAEEBaiEADAELAAsAC0EAIQFBgdoDQQAQMQsgBUHgAGokACABCxUBAX8QwgQhAEEPQYSRCygCACAAGwuBAgEBfyABKAJEIQEDQCABLQAAIgIEQAJAAkAgAUGj1AFBBRD4AUUNACABQabNAUEHEPgBRQ0AIAFB9tYBQQUQ+AFFDQAgAUGjzAFBCRD4AQ0BCwJAA0ACQAJAAkAgAkEKaw4EBAEBAgALIAJFDQMLIAEtAAEhAiABQQFqIQEMAQsLIAEtAAFBCkcNACABQQJqIQEMAwsgASACQQBHaiEBDAILAn8CQANAAkACQAJAIAJBCmsOBAQBAQIACyACRQ0DCyAAIALAEGIgAS0AASECIAFBAWohAQwBCwtBAiABLQABQQpGDQEaCyACQQBHCyECIABBChBiIAEgAmohAQwBCwsLiwIBBX8jAEHwAGsiAyQAQQEhBANAIAQgASgCECIFKAK0AUpFBEAgBSgCuAEgBEECdGooAgAhBSADQSBqIgYgAkEoECAaIANByABqIgcgBSAGEOIOIAIgB0EoECAaIARBAWohBAwBCwsCQCABEDQgAUYNACABKAIQKAIMIgFFDQAgAS0AUUEBRw0AIAIoAiAhBCADIAIpAwg3AwggAyACKQMQNwMQIAMgAikDGDcDGCADIAIpAwA3AwAgA0HIAGogASAEIAMQ6wMgAiADKQNgNwMYIAIgAykDWDcDECACIAMpA1A3AwggAiADKQNINwMAIAIgBEEoajYCIAsgACACQSgQIBogA0HwAGokAAtfAQN/AkAgABA0IABGDQAgACgCECgCDCIBRQ0AIAEtAFEhAgtBASEBA38gACgCECIDKAK0ASABSAR/IAIFIAMoArgBIAFBAnRqKAIAEOMOIAJqIQIgAUEBaiEBDAELCwuTAgIDfwN8AkAgABA0IABGDQAgACgCECIBKAIMIgJFDQAgAi0AUQ0AAn8gAS0AkwIiA0EBcQRAIAErAyggASsDWEQAAAAAAADgv6KgIQUgAUHQAGoMAQsgASsDGCABKwM4RAAAAAAAAOA/oqAhBSABQTBqCysDACEEAnwgA0EEcQRAIAErAyAgBEQAAAAAAADgv6KgDAELIAErAxAhBiAERAAAAAAAAOA/oiAGoCADQQJxDQAaIAYgASsDIKBEAAAAAAAA4D+iCyEEIAJBAToAUSACIAU5A0AgAiAEOQM4C0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEOQOIAFBAWohAQwBCwsLlQICA38CfAJAIAAQNCAARg0AIAAoAhAiASgCDCICRQ0AIAItAFENAAJ/IAEtAJMCIgNBAXEEQCABKwMgIAErA0BEAAAAAAAA4L+ioCEFIAFByABqDAELIAErAxAgASsDYEQAAAAAAADgP6KgIQUgAUHoAGoLKwMAIQQCfCADQQRxBEAgBEQAAAAAAADgP6IgASsDGKAMAQsgA0ECcQRAIAErAyggBEQAAAAAAADgv6KgDAELIAErAxggASsDKKBEAAAAAAAA4D+iCyEEIAJBAToAUSACIAQ5A0AgAiAFOQM4C0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEOUOIAFBAWohAQwBCwsLogMCA38EfCMAQbABayICJAAgAkGgAWogACgCECIDKwMoIQYgAysDICEHIAMrAxghBSADKwMQIQgCfyABQQFrQQFNBEAgAiAGOQOIASACIAIpA4gBNwMoIAIgCDkDgAEgAiACKQOAATcDICACQZABaiACQSBqEOgBIAIgBzkDcCACQfAAagwBCyACIAU5A2ggAiACKQNoNwM4IAIgCDkDYCACIAIpA2A3AzAgAkGQAWogAkEwahDoASACIAc5A1AgBiEFIAJB0ABqCyIDQQhqIAU5AwAgAiADKQMINwMYIAIgAykDADcDECACQRBqEOgBIAAoAhAiAyACKQOQATcDECADIAIpA6gBNwMoIAMgAikDoAE3AyAgAyACKQOYATcDGCAAKAIQKAIMIgMEQCACIANBQGsiBCkDADcDCCACIAMpAzg3AwAgAkFAayACEOgBIAQgAikDSDcDACADIAIpA0A3AzgLQQEhAwNAIAMgACgCECIEKAK0AUpFBEAgBCgCuAEgA0ECdGooAgAgARDmDiADQQFqIQMMAQsLIAJBsAFqJAALSAECfyAAEIcBQRAQGCECIAAQiAEhACACIQEDQCAABEAgASAAKQMINwMAIAEgACkDEDcDCCABQRBqIQEgACgCACEADAELCyACCzQBAX9BGBBNIgIgASkDCDcDECACIAEpAwA3AwggACACQQEgACgCABEDACACRwRAIAIQFwsLIwEBfyMAQRBrIgEkACAAIAFBDmogAUEPahDsDiABQRBqJAALsQMCA38EfCMAQeAAayIFJAAgBUIANwNYIAVCADcDUCAAKAIQIgYrAxAhCgJ8QdiLCy0AAEEBRgRAQciQCysDACIJIAYrAyihIQggCSAGKwMYoQwBCyAGKwMoIQggBisDGAshCSAGKwMgIQsgBSAIOQNIIAVBQGsgCzkDACAFIAk5AzggBSAKOQMwIAVB0ABqIgdB1oMBIAVBMGoQVCAAIAEgBxCfARBoAkAgACgCECgCDCIGRQ0AIAYoAgAtAABFDQAgBisDQCEIIAUg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DAELIAIgA8AQngEgAiAELAABIgMQngEgA0UNASAEQQJqCyIELQAAIQMMAQsLIAIQIQRAIAAgASACELIDQe4AEKsICyACLQAPQf8BRgRAIAIoAgAQFwsgASABQRhqIgApAwA3AyggASAAKQMINwMwCyACQRBqJAALogIBBX8gACgCECgCwAEhAwNAIAMiASgCECgCuAEiAwRAIAAgASADQQBBABBSDQEgACABIANBAEEBEFIiBEH5JUG4AUEBEC4aIAQoAhBBADYCrAEgASgCECICKALIASACKALMASICQQFqIAJBAmpBBBBgIQUgASgCECICIAU2AsgBIAIgAigCzAEiAkEBajYCzAEgBSACQQJ0aiAENgIAIAEoAhAiASgCyAEgASgCzAFBAnRqQQA2AgAgAygCECIBKALAASABKALEASIBQQFqIAFBAmpBBBBgIQIgAygCECIBIAI2AsABIAEgASgCxAEiAUEBajYCxAEgAiABQQJ0aiAENgIAIAMoAhAiASgCwAEgASgCxAFBAnRqQQA2AgAMAQsLC9oCAQJ/IANEAADA////30FkIQVB/////wcCf0QAAAAAAADgwSADIANEAAAAAAAA4MFlGyIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsgBRshBCAAIAEgAkEAQQAQUiIFBEAgBSgCECIAIAAoAqwBIgAgBCAAIARKGzYCrAEPCyAAIAEgAkEAQQEQUiIAQfklQbgBQQEQLhogACgCECAENgKsASABKAIQIgQoAsgBIAQoAswBIgRBAWogBEECakEEEGAhBCABKAIQIgEgBDYCyAEgASABKALMASIBQQFqIgU2AswBIAQgAUECdGogADYCACAEIAVBAnRqQQA2AgAgAigCECIBKALAASABKALEASIBQQFqIAFBAmpBBBBgIQEgAigCECICIAE2AsABIAIgAigCxAEiAkEBaiIENgLEASABIAJBAnRqIAA2AgAgASAEQQJ0akEANgIAC/AHAgl/CXwjAEHwAGsiAyQAIANCADcDMCADQgA3AyggA0IANwMgIANCADcDGCABKAIEIQREAAAAAAAA8L8hDQNAAkAgBCAHRg0AIAEoAgAgB0EFdGoiBigCBEEBSw0AAkACQCAGKAIAKAIEIgYEQCAGLQAYQf8AcQ0DIAYrAxAiDEQAAAAAAAAAAGRFBEAgAisDICEMCyADIAw5AyggBigCACIGRQ0BDAILIAMgAisDICIMOQMoCyACKAIQIQYLIAMgBjYCGAJAIAdFBEAgDCENDAELIAwgDWINAQsCQCAFRQRAIAYhBQwBCyAGIAUQQw0BCyAHQQFqIQcMAQsLIAEgBCAHTSIKOgAIQQAhBkQAAAAAAAAAACENA0AgBCAGTUUEQCABKAIAIQVBACEHRAAAAAAAAAAAIQwgBkEFdCEIRAAAAAAAAAAAIQ9EAAAAAAAAAAAhEEQAAAAAAAAAACENAkACQANAIAUgCGoiBCgCBCAHTQRAAkAgBCAPOQMQIApFDQMgBg0AIAUgDDkDGCANIQwMBAsFIAMgB0E4bCIJIAQoAgBqKAIAIAIoAjAQgAE2AjgCQCABKAIAIAhqIgQoAgAgCWooAgQiBQRAIAMgBSgCGEH/AHEiBQR/IAUFIAIoAihB/wBxCyADKAIwQYB/cXI2AjAgAyAEKAIAIAlqKAIEIgQrAxAiDkQAAAAAAAAAAGQEfCAOBSACKwMgCzkDKCADIAQoAgAiBQR/IAUFIAIoAhALNgIYIAQoAgQiBQRAIAMgBTYCHAwCCyADIAIoAhQ2AhwMAQsgAyACKwMgOQMoIAMgAigCEDYCGCADIAIoAhQ2AhwgAyADKAIwQYB/cSACKAIoQf8AcXI2AjALIAMgACgCiAEiBSADQRhqQQEgBSgCABEDADYCPCADQQhqIAAgA0E4ahCLCCADKwMQIQ4gAysDCCEUIAEoAgAgCGooAgAgCWooAgAQFyADKAI4IQsgASgCACIFIAhqKAIAIAlqIgQgFDkDICAEIAs2AgAgBCADKwNIOQMQIAQgAysDUDkDGCAEIAMoAjw2AgQgBCADKAJANgIIIAQgAygCRDYCDCAOIA0gDSAOYxshDSADKwNQIg4gECAOIBBkGyEQIAMrAygiDiAMIAwgDmMbIQwgB0EBaiEHIA8gFKAhDwwBCwsgBCANOQMYIA0hDAwBCyAGRQRAIAUgDCAQoTkDGAwBCyAEIBEgDKAgE6EgEKE5AxgLIA8gEiAPIBJkGyESIAZBAWohBiARIAygIREgEyAEKwMYoCETIAEoAgQhBAwBCwsgASASOQMgIAEgDSARIARBAUYbOQMoIANB8ABqJAAL1gMBA39BASEEA0AgBCAAKAIQIgUoArQBSkUEQCAFKAK4ASAEQQJ0aigCACABIAIgAxD/DiEDIARBAWohBAwBCwsCQCAAEF4gAEYNACABQQAgAkECdBAzIQUgABAaIQIDQCACBEAgBSACKAIQKAL0AUECdGpBATYCACAAIAIQKSEBA0AgAQRAIAFBKGohBiACKAIQKAL0ASEEA0AgBCAGQVBBACABKAIAQQNxQQJHG2ooAgAoAhAoAvQBTkUEQCAFIARBAWoiBEECdGpBATYCAAwBCwsgACABECwhAQwBCwsgACACEBshAgwBCwsgACgCECIBKALoASEEA0AgBCABKALsAUoNASAFIARBAnRqKAIARQRAIANFBEAgABBeQejzAEEBEJABIQMLIANBAEEBEHMiAkGGJkHAAkEBEC4aIAIoAhAiAUKAgICAgICA8D83A2AgASAENgL0ASABQoCAgICAgIDwPzcDWCABQQE2AuwBIAFCgICAgICAgPg/NwNQIAFBADYCxAFBBUEEEBghASACKAIQIgZBADYCzAEgBiABNgLAAUEFQQQQGCEBIAIoAhAgATYCyAEgACACQQEQexogACgCECEBCyAEQQFqIQQMAAsACyADC+oPAgh/B3wjAEFAaiIEJAAgACgCVCEJAkAgACgCUCIDRQ0AIAMoAhgiA0UNACAAKAIYDQAgACADEGE2AhgLIAAvASQhAyABKwMAIQ4gASsDECENIAArA0AhCyABKwMYIg8gASsDCCIQoSAAKwNIIhGhRAAAAAAAAAAAECQhDCANIA6hIAuhRAAAAAAAAAAAECQhCwJAIANBAXFFDQAgC0QAAAAAAAAAAGQEQAJAAkACQAJAIANBBnFBAmsOAwECAAILIAEgDiARoDkDEAwCCyABIA4gC6AiDjkDACABIA0gC6A5AxAMAQsgASANIAtEAAAAAAAA4D+iIguhOQMQIAEgDiALoCIOOQMAC0QAAAAAAAAAACELCyAMRAAAAAAAAAAAZEUNACABAnwCQCADQRhxIgNBCEcEQCADQRBHDQEgESAQoAwCCyABIBAgDKAiDDkDCCARIAygDAELIAEgECAMRAAAAAAAAOA/oiIMoDkDCCAPIAyhCyIPOQMYRAAAAAAAAAAAIQwLAn8gCyALIAAoAmgiA7giC6MiDSALoqEiC0QAAAAAAADgP0QAAAAAAADgvyALRAAAAAAAAAAAZhugIguZRAAAAAAA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iAEhAANAIABFDQIgAyACQThsaiAAQQhqQTgQIBogAkEBaiECIAAoAgAhAAwACwALQTgQTSEAIAFBATYCDCABIAA2AghB5fQEEKQBIgJFDQEgACACNgIAIABBnI8LKAIAKAIANgIECyAFQQBBwAAgBSgCABEDABpBlI8LKAIAIgAgAUEBIAAoAgARAwAaIARBEGokAA8LIARBATYCAEHo+gYoAgBBqd0DIAQQHRoQJgAL0QIBBX8jAEEQayIEJAACQAJAIAAQISAAEDhPBEAgABA4IgNBAWoiASADQQF0QYAIIAMbIgIgASACSxshASAAECEhBQJAIAAtAA9B/wFGBEAgA0F/Rg0DIAAoAgAhAiABRQRAIAIQF0EAIQIMAgsgAiABED0iAkUNBCABIANNDQEgAiADakEAIAEgA2sQMxoMAQsgAUEBEBgiAiAAIAUQIBogACAFNgIECyAAQf8BOgAPIAAgATYCCCAAIAI2AgALIAAQISEBAkAgABAlBEAgACABakEAOgAAIAAgAC0AD0EBajoADyAAECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgACgCACABakEAOgAAIAAgACgCBEEBajYCBAsgBEEQaiQADwtBkbQDQd79AEHNAEGTswEQAAALIAQgATYCAEHo+gYoAgBBqd0DIAQQHRoQJgALuwEBBn9BlI8LKAIAIQFBMBBNIQJBkI8LKAIAEIcBBEBBABCRDwsgAiABEIcBIgA2AgQCQCAARQ0AIAIgAEEgEBgiBTYCACABQQBBgAEgASgCABEDACEAA0AgAEUNASAFIANBBXRqIgQgACkDCDcDACAEIAApAyA3AxggBCAAKQMYNwMQIAQgACkDEDcDCCADQQFqIQMgASAAQQggASgCABEDACEADAALAAsgAUEAQcAAIAEoAgARAwAaIAILGAEBf0EIEE0iAiAANgIAIAIgAToABCACC+oBAQR/IwBBEGsiBCQAIAEoAhBBxM4KKAIAQQFqNgKwASAABEACQCAAKAIEIgIgACgCCEcEQCAAKAIAIQMMAQsCQCAEIAJBAXRBASACGyICQf////8DSwR/QcQABSAAKAIAIAJBAnQQPSIDDQFBMAsQowE2AgBB6PoGKAIAQbv0AyAEEB0aECYACyADIAAoAggiBUECdGpBACACIAVrQQJ0EDMaIAAgAjYC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ajYCHAsCQAJAAkACQCAJQQFxBEAgABCXBiABEBohAgNAIAIEQCAAIAIQ7QMgASACEBshAgwBCwsgABCWBiAAEJUGIAEQGiEDA0AgA0UNAiABIAMQKSECA0AgAgRAIAAgAhDKBCABIAIQLCECDAELCyABIAMQGyEDDAALAAsgCUEQcQRAIAAQlQYgARAaIQMDQCADBEAgASADECkhAgNAIAIEQCAAIAIQygQgASACECwhAgwBCwsgASADEBshAwwBCwsgABDpCCAAEJcGIAEQGiECA0AgAkUNBCAAIAIQ7QMgASACEBshAgwACwALIAlBCHFFDQEgABCXBiABEBohBQNAQQEhAiAFBEACQANAIAEoAhAiAygCtAEgAk4EQCACQQJ0IAJBAWohAiADKAK4AWooAgAgBRCrAUUNAQwCCwsgACAFEO0DCyABIAUQGyEFDAELCyAAEJYGIAAQlQYgARAaIQYDQCAGRQ0BIAEgBhApIQUDQEEBIQIgBQRAAkADQCABKAIQIgMoArQBIAJOBEAgAkECdCACQQFqIQIgAygCuAFqKAIAIAUQqwFFDQEMAgsLIAAgBRDKBAsgASAFECwhBQwBCwsgASAGEBshBgwACwALIAAQ6QgMAgsgARAaIQMDQCADRQ0CIAAgAxDtAyABIAMQKSECA0AgAgRAIAAgAkFQQQAgAigCAEEDcUECRxtqKAIoEO0DIAAgAhDKBCABIAIQLCECDAELCyABIAMQGyEDDAALAAsgABCWBgsgEARAIAAgASAJEPgFCwJAIAAoAjwiAkUNACACKAIcIgJFDQAgACACEQEACyALBEAgByALNgLcAQsgBEGgAWoQZiAPEM4CEBcgDxAXIAAgACgAxAEgACgAvAFqIgKtIAAoAMgBIAAoAMABaiIDrUIghoQ3AsQBIAAQqA8NAAJAIAAoArgBIgUEQCAAKAKsASECDAELIAAoArABIQMLIAAgACgAtAEgAmoiAq0gAyAFaq1CIIaENwLEAQwACwALCwJAIAAoAjwiAUUNACABKAIMIgFFDQAgACABEQEACwJAIAAoAkwiAUUNACABKAIEIgFFDQAgACABEQEACyAAEJkGGiAAEPEDIARB4AFqJAALywECAX8CfCMAQeAAayIBJAAgASAAKQMINwNYIAEgACkDADcDUCABIAApAzg3A0ggASAAKQMwNwNAIAEgACkDGDcDOCABIAApAxA3AzAgAUHQAGogAUFAayABQTBqEJ4PIAEgACkDCDcDKCABIAApAwA3AyAgASAAKQM4NwMYIAEgACkDMDcDECABIAApAyg3AwggASAAKQMgNwMAIAFBIGogAUEQaiABEJ4PIQMgAUHgAGokAEQAAAAAAAAQQGMgA0QAAAAAAAAQQGNxC9IPAhd8B38jAEEwayIcJAAgACgCECsDoAEhECACQQAgHEEkahD7BSIgQQFrQQJPBEAgASsAACEDIAErABAhBiAcIAErABgiBCABKwAIoEQAAAAAAADgP6IiCTkDGCAcIAYgA6BEAAAAAAAA4D+iIgM5AxAgEEQAAAAAAADgP2QEQCAARAAAAAAAAOA/EIACCyAEIAmhIQggBiADoSEGIBwoAiwhAUQAAAAAAAAAACEDA0AgASgCACICBEAgASsDCEQAAAAAAAAAAGVFBEAgACACEFggASgCGAR8IAErAwhEGC1EVPshGUCiIAOgBUQYLURU+yEZQAshCSAcIBwpAxg3AwggHCAcKQMQNwMAIAACf0EAIQIjAEFAaiIbJAAgAxBEIQUgAxBXIBwrAwghESAcKwMAIRIgCKMgBSAGoxCnASEFQQFBCBBGIh4EQCAJEEQhBCAJEFcgCKMgBCAGoxCnASIEIAWhRBgtRFT7IRlAo5xEGC1EVPshGcCiIASgIgREGC1EVPshGUCgIAQgBCAFoUQYLURU+yEJQGMbIAQgCSADoUQYLURU+yEJQGQbIAWhIRUgCCAGoyIDIANE5scEoWHWoL9EfrDnxk8+mL8gA0QAAAAAAADQP2MiGhuiRMdpZxwT94K/RAcjm1Atx6Q/IBoboKJEKn9r5S1wXL9EPhjCe1i5kb8gGhugIANE5FdiVAiadT9ELXx9rUuNxj8gGhugoyEWIAMgA0TlqVhGNMuxv0SgeISJ9fyPPyAaG6JEjwDJz6Fnpr9EaTUk7rH0kb8gGhugokRctcb7zLSIP0S4zTN6Xr9qPyAaG6AgA0RNpI9UOrOQP0SSPq2iPzTNvyAaG6CjIRcgAyADRPpEniRdM9C/RLu0hvfBnpM/IBobokQB8Jk2LcJeP0QXqHtTR32gvyAaG6CiRA2cfS/PlJc/RCErruBtlIs/IBoboCADRIm1+BQA44k/RDNz3ITWHrW/IBoboKMhGCADIANEHJYGflTDxL9EH60gvCzckD8gGhuiRKVJKej24iNARCgs8YCyySNAIBoboKJEqdkDrcCQwT9EI1rhTAKKtz8gGhugIANECMSQQZNpiT9ESKNlUZYpfz8gGhugoyEZIAMgA0SBzM6idyrkv0S2gTtQpzyuPyAaG6JE0a3X9KCgyD9EUUzeADPfub8gGhugokRq3zcZsD+EP0T1dpX/2gumPyAaG6AgA0S+ypAZXv+EP0TUpTW8D/aUPyAaG6CjIQsgAyADRLDjv0AQIO2/RE0uxsA6js0/IBobokStodReRNvYP0RZayi1F9HcvyAaG6CiRDuhfOZRlnY/RAM/qmG/J8w/IBoboCADRNNucPl6hHs/RKZHUz2Zf9o/IBoboKMhDSADIANEn+V5cHfW+b9E2v8Aa9WuwT8gGhuiRH79EBssnOY/RE4oRMAhVPe/IBoboKJEluzYCMTrzD9EqkiFsYUg9T8gGhugIANEzc6idyrg0D9EnWhXIeUn9j8gGhugoyEOIAMgA0RRoE/kSdIOQETR8YdVcgS3PyAaG6JEtMh2vp86NcBEldQJaCI8M8AgGhugokQ6It+l1CXVv0RkIxCv63cQwCAaG6AgA0Tzgj5Hmi6KP0SnIarwZ3jHPyAaG6CjIQ8gAyADRPyp8dJNYlA/okTsUbgehesTQKCiROXQItv5fso/oCADRFOWIY51cXs/oKMgBqIhCkEBIR0DQCAVIB24oyEMAkAgAkEBcSAdQf8HS3JFBEBBACEfQQEhGiAFIQNBACECIAxEGC1EVPsh+T9lRQ0BA0AgGkEBcUUEQCAaIQIMAwsgGiECIB0gH00NAiADIAwgA6AiBKBEAAAAAAAA4D+iIgdEAAAAAAAAEECiEEQhEyAHIAegEEQhFCAKIAdEAAAAAAAAGECiEEQiByAWoiATIBeiIBQgGKIgGaCgoCAEIAOhoiAHIAuiIBMgDaIgFCAOoiAPoKCgoBDIDKJE8WjjiLX45D5lIRogH0EBaiEfIAQhAwwACwALQQAhGiAbQQA2AiggG0IANwMgIBsgETkDOCAbIBspAzg3AxggGyASOQMwIBsgGykDMDcDECAFEFchCiAFEEQhByAbQSBqIgIgG0EQahDPBCACIBIgByAGoqAiAyARIAogCKKgIgsQxgggDEQAAAAAAADgP6IQrAwhBCAMEFcgBCAERAAAAAAAAAhAoqJEAAAAAAAAEECgn0QAAAAAAADwv6CiRAAAAAAAAAhAoyINmiEOIAogBpoiCqIhDyAHIAiiIQQDQCAaIB1HBEAgG0EgaiANIA+iIAOgIA0gBKIgC6AgDiAMIAWgIgUQVyIHIAqiIg+iIBIgBRBEIgQgBqKgIgOgIA4gBCAIoiIEoiARIAcgCKKgIgugIAMgCxDFCCAaQQFqIRoMAQsLIBtBMGogG0EgaiICQQAQxAggAiAbKwMwIBsrAzgQxgggHiAbKAIkNgIEIB4gGygCIDYCACAbQUBrJAAgHgwDCyAdQQF0IR0MAAsACyAbQQg2AgBB6PoGKAIAQandAyAbEB0aECYACyICKAIAIAIoAgRBARCBAiACKAIAEBcgAhAXIAkhAwsgAUEYaiEBDAEFIBBEAAAAAAAA4D9kBEAgACAQEIACCyAcQSRqEMwECwsLIBxBMGokACAgC50BAQF/AkACQCACRQ0AIAIgABA4IAAQIWtLBEAgACACEL0ICyAAECEhAyAAECUEQCAAIANqIAEgAhAgGiACQYACTw0CIAAgAC0ADyACajoADyAAECFBEEkNAUG/rgNBj/0AQfABQY/qABAAAAsgACgCACADaiABIAIQIBogACAAKAIEIAJqNgIECw8LQevJAUGP/QBB7gFBj+oAEAAAC9cCAQd/AkAgACgCACIDKAKYASIFRQ0AIAMoApwBDQAgA0EANgKYASADKAK4ASEJIANBADYCuAEgBSEICyADKAKgASEFIwBBEGsiByQAAkAgAyABEJEGRQRAIAcgA0EDIAEQ9gM2AgQgByABNgIAQcfjAyAHEDEMAQsgAygCnAEiBiAGIAYoAjQQ3AQ2AjgCQCAFQewlQQBBARAuBEAgBSgCECgCCA0BCyAGLQCbAUEEcQ0AQfSiBEEAEDEMAQsCQCADKAKYASIERQRAIAMQ2wQiBDYCnAEgAyAENgKYAQwBC0GIiAsoAgAiAUUNACABKAIEIgQNABDbBCEEQYiICygCACAENgIEC0GIiAsgBDYCACAEIAM2AgAgBCACNgIgIAMgBRC1CBogBhD6AyAGEOwIIAMQ9wMLIAdBEGokACAIBEAgACgCACIAIAk2ArgBIAAgCDYCmAELCxUAIAAoAgAiACAAKAKgASABEIkGGgvlAQEDfyAAKAIAIQMCQAJAIAFFBEBB7PoGKAIAQQAQ4wchAQwBCyABQcU7EKAEIgRFDQEgBEEAEOMHIQEgBBDfAwsgAUUNACADKAKgASIEBEACQCADKAKkASIFRQ0AIAUoAgQiBUUNACAEIAURAQAgAygCoAEhBAsgBBCbDyADKAKgARCVAQsgAUEAQewlQZgCQQEQrgIgAUEBQYYmQcACQQEQrgIgAUECQfklQbgBQQEQrgIgAyABNgKgASABKAIQIAM2ApABIAMgASACEIkGQX9GDQAgAEIANwPABCAAQQE6AJkECwuNAgIEfAJ/IwBBEGsiBiQAIAErAwAgACsDsAShIAArA4gEoyIDmUQtQxzr4jYaP2MgASsDCCAAKwO4BKEgACsDkASjIgSZRC1DHOviNho/Y3FFBEAgAEGwBGohBwJAAkACQCAALQCdBA4DAAIBAgsgBiABKQMINwMIIAYgASkDADcDACAAIAYQ/QUMAQsgACsD0AIhBSAAKwPgAiECAnwgACgC6AIEQCAAIAUgBCACo6E5A9ACIAMgAqMgACsD2AKgDAELIAAgBSADIAKjoTkD0AIgACsD2AIgBCACo6ELIQIgAEEBOgCZBCAAIAI5A9gCCyAHIAEpAwA3AwAgByABKQMINwMICyAGQRBqJAALEgAgAEEAOgCdBCAAQQA6AJoEC8sIAgN/A3wjAEEgayIEJAACQAJAAkACQAJAAkACQCABQQFrDgUAAQIDBAYLIAQgAikDCDcDCCAEIAIpAwA3AwAgACAEEP0FAkAgACgCxAQiAUUNAAJAAkACQCABEIwCDgMAAQIDCyABKAIQIgEgAS0AcEH5AXFBBHI6AHAMAgsgASgCECIBIAEtAIUBQfkBcUEEcjoAhQEMAQsgASgCECIBIAEtAHRB+QFxQQRyOgB0CyAAKALMBBAXIABBADYCzAQgACAAKALABCIBNgLEBAJAIAFFDQACQAJAAkAgARCMAg4DAAECAwsgASgCECIDIAMtAHBBAnI6AHAgACABEMMIDAILIAEoAhAiAyADLQCFAUECcjoAhQEgARArQQFB3YUBQQAQHyIDRQRAIAEQK0EBQfjNAUEAEB8iA0UNAgsgACABIAMQPiABEIABNgLMBAwBCyABKAIQIgMgAy0AdEECcjoAdCABIAFBMGsiBSABKAIAQQNxQQJGGygCKBArQQJB3YUBQQAQHyIDRQRAIAEgBSABKAIAQQNxQQJGGygCKBArQQJB+M0BQQAQHyIDRQ0BCyAAIAEgAxA+IAEQgAE2AswECyAAQQE6AJ0EIABBAToAmgQMBAsgAEECOgCdBCAAQQE6AJoEDAMLIAQgAikDCDcDGCAEIAIpAwA3AxAgACAEQRBqEP0FIABBAzoAnQQgAEEBOgCaBAwCCyAAQQA6AJgEAn8gACgC6AIEQCAAIAArA9ACIAIrAwggACgCxAO4RAAAAAAAAOA/oqFEoJmZmZmZub+iIAArA+ACIgYgACsDkASio6A5A9ACIAIrAwAgACgCwAO4RAAAAAAAAOA/oqEhByAAQYgEagwBCyAAIAArA9ACIAIrAwAgACgCwAO4RAAAAAAAAOA/oqFEoJmZmZmZuT+iIAArA+ACIgYgACsDiASio6A5A9ACIAIrAwggACgCxAO4RAAAAAAAAOA/oqEhByAAQZAEagsrAwAhCCAAIAZEmpmZmZmZ8T+iOQPgAiAAIAArA9gCIAdEoJmZmZmZuT+iIAYgCKKjoDkD2AIMAQsgAEEAOgCYBCAAIAArA+ACRJqZmZmZmfE/oyIGOQPgAgJ/IAAoAugCBEAgACAAKwPQAiACKwMIIAAoAsQDuEQAAAAAAADgP6KhRKCZmZmZmbk/oiAGIAArA5AEoqOgOQPQAiACKwMAIAAoAsADuEQAAAAAAADgP6KhIQcgAEGIBGoMAQsgACAAKwPQAiACKwMAIAAoAsADuEQAAAAAAADgP6KhRKCZmZmZmbm/oiAGIAArA4gEoqOgOQPQAiACKwMIIAAoAsQDuEQAAAAAAADgP6KhIQcgAEGQBGoLIQEgACAAKwPYAiAHRKCZmZmZmbm/oiAGIAErAwCio6A5A9gCCyAAQQE6AJkECyAAIAIpAwA3A7AEIAAgAikDCDcDuAQgBEEgaiQAC0kBAn8gACgCACgCoAEhASAAKALEBEUEQCAAIAE2AsQEIAEoAhAiAiACLQBwQQJyOgBwIAAgARDDCAsgACABEKoPIABBAToAnAQLYQIBfwJ8IAAgAC0AmAQiAUEBczoAmAQgAUUEQCAAQgA3A9ACIABBAToAmQQgAEIANwPYAiAAIAAoAsADIgG4IAG3oyICIAAoAsQDIgC4IAC3oyIDIAIgA2MbOQPgAgtBAAsjACAAQYACOwGYBCAAIAArA+ACRJqZmZmZmfE/ozkD4AJBAAsjACAAQYACOwGYBCAAIAArA+ACRJqZmZmZmfE/ojkD4AJBAAsqACAAQYACOwGYBCAAIAArA9gCRAAAAAAAACRAIAArA+ACo6A5A9gCQQALKgAgAEGAAjsBmAQgACAAKwPYAkQAAAAAAAAkwCAAKwPgAqOgOQPYAkEACyoAIABBgAI7AZgEIAAgACsD0AJEAAAAAAAAJMAgACsD4AKjoDkD0AJBAAsqACAAQYACOwGYBCAAIAArA9ACRAAAAAAAACRAIAArA+ACo6A5A9ACQQALEQAgACABokQAAAAAAAAkQKILYgAjAEEgayIGJAAgACACKwMAIAMrAwCgOQMAIAAgAisDCCADKwMIoDkDCCAGIAIpAwg3AwggBiACKQMANwMAIAYgACkDCDcDGCAGIAApAwA3AxAgASAGQQIQNiAGQSBqJAAL0gQCAn8FfCMAQfAAayIHJAAgByACKQMINwMYIAcgAikDADcDECAFRAAAAAAAAOA/oiIKRAAAAAAAANA/okQAAAAAAADgPyAFRAAAAAAAABBAZBshCyADKwMIIQkgAAJ8IAZBIHEiCARAIAMrAwAhBSACKwMADAELIAIrAwAiBCADKwMAIgVEAAAAAAAAAABhIAlEAAAAAAAAAABhcQ0AGiACIAIrAwggCiAJIAWaIAmaEE8iDKOioDkDCCAEIAogBSAMo6KgCyIEIAWgOQMAIAAgAisDCCIKIAmgOQMIIAcgACkDCDcDKCAHIAApAwA3AyAgByAKIAsgBaIiBaEgCyAJmqIiCaEiCzkDaCAHIAUgBCAJoaA5A2AgByAFIAqgIAmhIgo5AzggByAFIAQgCaCgOQMwIAUgCURmZmZmZmbuv6IgBKCgIQwgBSAJRGZmZmZmZu4/oiAEoKAhDSAFRAAAAAAAABBAokQAAAAAAAAIQKMhBCAJRAAAAAAAABDAokQAAAAAAAAIQKMhBQJ8IAgEQCALIAWgIQkgBCAMoCELIAogBaAhCiAEIA2gDAELIAsgBaEhCSAMIAShIQsgCiAFoSEKIA0gBKELIQUgByAJOQNYIAcgCzkDUCAHIAo5A0ggByAFOQNAIAEgB0EQakECEDYCQCAGQcAAcQRAIAcgB0EwaiIARAAAAAAAAOA/QQAgABCsAQwBCyAGQYABcUUNACAHIAdBMGoiAEQAAAAAAADgPyAAQQAQrAELIAEgB0EwakEEQQAQgQIgB0HwAGokAAsUACAAIAGiRAAAAAAAACRAoiACoAuLAgIBfwd8IwBBIGsiByQAIAIrAwAhBAJAIAMrAwAiCUQAAAAAAAAAAGIgAysDCCIKRAAAAAAAAAAAYnJFBEAgAisDCCEFDAELIAIrAwggBUQAAAAAAADgP6IiCCAKmiIFIAmaIgsgBRBPIgyjoiINoSEFIAQgCCALIAyjoiILoSEECyAHIAkgChBPRAAAAAAAAOA/oiIIIApEAAAAAAAA4D+iIAWgIgygOQMYIAcgCCAJRAAAAAAAAOA/oiAEoCIOoDkDECAHIAwgCKE5AwggByAOIAihOQMAIAEgByAGQX9zQQR2QQFxEPkDIAAgCiAFoCANoTkDCCAAIAkgBKAgC6E5AwAgB0EgaiQAC50CAQF/IwBBoAFrIgQkACAEQgA3A0ggBEIANwNAIARCADcDOCAEQgA3AxggBEIANwMIIAQgACABokQAAAAAAAAkQKI5AzAgBEIANwMQIAQgBCkDMDcDACAEQSBqIARBEGogBCACIAMgBEHQAGoQyQgCQAJAIAQrAyBEAAAAAAAA4D+iIgBEAAAAAAAAAABkBEAgBCsDaCAEKwOIAaEiAUQAAAAAAAAAAGRFDQEgACABoiAEKwOAASAEKwNwoZmjIgFEAAAAAAAAAABkRQ0CIARBoAFqJAAgACAAoCAAIAKiIAGjoQ8LQcivA0GQuAFBjgpBm6QBEAAAC0GssANBkLgBQZEKQZukARAAAAtB9q8DQZC4AUGVCkGbpAEQAAALqQEBAX8jAEHwAGsiByQAIAcgAikDCDcDGCAHIAIpAwA3AxAgByADKQMINwMIIAcgAykDADcDACAAIAdBEGogByAFIAYgB0EgahDJCAJAIAZBwABxBEAgASAHQUBrQQMgBkF/c0EEdkEBcRBBDAELIAZBf3NBBHZBAXEhACAGQYABcQRAIAEgB0EgakEDIAAQQQwBCyABIAdBIGpBBCAAEEELIAdB8ABqJAAL8gMCBH8KfCMAQUBqIgckACADKwMIIgQgAisDCCIMoCERIAMrAwAiCyACKwMAIhCgIRIgC0SamZmZmZnZP6IhDSAERJqZmZmZmdm/oiEOIAREmpmZmZmZ6T+iIAygIRMgC0SamZmZmZnpP6IgEKAhFAJ8IAtEAAAAAAAAAABhBEBEAAAAAAAAAAAgBEQAAAAAAAAAAGENARoLIAVEAAAAAAAA4D+iIgUgBJoiBCALmiILIAQQTyIEo6IhDyAFIAsgBKOiCyEFIAIgDCAPoSILOQMIIAIgECAFoSIMOQMAIAAgESAPoTkDCCAAIBIgBaE5AwAgByANIBMgD6EiBKA5AzggByAOIBQgBaEiBaA5AzAgByAEIA2hOQMoIAcgBSAOoTkDICAHIAsgDaE5AxggByAMIA6hOQMQIAcgDSALoDkDCCAHIA4gDKA5AwAgB0EQaiEIAkACfyAGQcAAcQRAIAdBOGohCSAHQTBqIQogBwwBCyAGQYABcUUNASAHQShqIQkgB0EgaiEKIAgLIgMgAikDADcDACADIAIpAwg3AwggCiAFOQMAIAkgBDkDAAsgASAHQQQgBkF/c0EEdkEBcRBBIAcgBDkDCCAHIAU5AwAgCCAAKQMINwMIIAggACkDADcDACABIAdBAhA2IAdBQGskAAtQACAAIAGiRAAAAAAAACRAoiIARJqZmZmZmcm/oiACRAAAAAAAAOA/oiIBoCAAIABEmpmZmZmZ2b+iIAGgIgGgoCAAIAFEAAAAAAAAAABkGwuaBAIDfwt8IwBBQGoiByQAIAMrAwghBCAAIAMrAwAiCiACKwMAIgugIhI5AwAgACAEIAIrAwgiDaAiEzkDCCALIApEMzMzMzMz4z+ioCEOIAsgCkSamZmZmZnJP6KgIQwgDSAERDMzMzMzM+M/oqAhDyANIAREmpmZmZmZyT+ioCEQAkAgCiAEEE8iEUQAAAAAAAAAAGRFDQAgEUSamZmZmZnJv6IgBUQAAAAAAADgP6KgIhFEAAAAAAAAAABkRQ0AIAIgDSARIASaIgUgCpoiDSAFEE8iFKOiIgWhOQMIIAIgCyARIA0gFKOiIguhOQMAIAAgEyAFoTkDCCAAIBIgC6E5AwAgDyAFoSEPIA4gC6EhDiAQIAWhIRAgDCALoSEMCyAHIAogD6A5AzggByAOIAShOQMwIAcgDyAKoTkDKCAHIAQgDqA5AyAgByAQIAqhOQMYIAcgBCAMoDkDECAHIAogEKA5AwggByAMIAShOQMAIAdBEGohAwJAAn8gBkHAAHEEQCAHQTBqIQggB0EIciEJIAcgDDkDACAHQThqDAELIAZBgAFxRQ0BIAdBIGohCCAHQRhqIQkgByAMOQMQIAdBKGoLIAkgEDkDACAIIA45AwAgDzkDAAsgASAHQQRBARBBIAcgAikDCDcDCCAHIAIpAwA3AwAgAyAAKQMINwMIIAMgACkDADcDACABIAdBAhA2IAdBQGskAAvTAgIBfwJ8IwBB4AFrIgQkACAEQgA3A0ggBEIANwNAIARCADcDOCAEQgA3AxggBEIANwMIIAQgACABokQAAAAAAAAkQKI5AzAgBEIANwMQIAQgBCkDMDcDACAEQSBqIARBEGogBCABIAIgAyAEQdAAahDLCAJAAkACQCAEKwMgIgBEAAAAAAAAAABkBEAgACAEKwOAASAEKwNgIgWhoCIBRAAAAAAAAAAAZEUNASAEKwPIASAEKwNooSIGRAAAAAAAAAAAZEUNAiAGIAGiIAUgBCsDUKGZoyIFRAAAAAAAAAAAZEUNAyAEQeABaiQAIAAgAkQAAAAAAADgP6IgASACoiAFoyADQSBxG6EPC0HIrwNBkLgBQcQKQbETEAAAC0GSqANBkLgBQcYKQbETEAAAC0GssANBkLgBQckKQbETEAAAC0H2rwNBkLgBQc0KQbETEAAAC5UBAQF/IwBBsAFrIgckACAHIAIpAwg3AxggByACKQMANwMQIAcgAykDCDcDCCAHIAMpAwA3AwAgACAHQRBqIAcgBCAFIAYgB0EgaiIAEMsIAkAgBkHAAHEEQCABIABBBUEBEEEMAQsgBkGAAXEEQCABIAdB4ABqQQVBARBBDAELIAEgB0EgakEIQQEQQQsgB0GwAWokAAuhAgEBfyMAQaABayIEJAAgBEIANwNIIARCADcDQCAEQgA3AzggBEIANwMYIARCADcDCCAEIAAgAaJEAAAAAAAAJECiOQMwIARCADcDECAEIAQpAzA3AwAgBEEgaiAEQRBqIAQgAiADIARB0ABqEMwIAkACQCAEKwMgIgBEAAAAAAAAAABkBEAgBCsDiAEgBCsDaKEiAUQAAAAAAAAAAGRFDQEgACABoiAEKwNgIAQrA3ChmaMiAUQAAAAAAAAAAGRFDQIgBEGgAWokACAAIAAgAqIgAaMgAkQAAAAAAADgP6IgA0EgcRuhDwtByK8DQZC4AUG/CUHM8QAQAAALQaywA0GQuAFBwglBzPEAEAAAC0H2rwNBkLgBQcYJQczxABAAAAuoAQEBfyMAQfAAayIHJAAgByACKQMINwMYIAcgAikDADcDECAHIAMpAwg3AwggByADKQMANwMAIAAgB0EQaiAHIAUgBiAHQSBqIgAQzAgCQCAGQcAAcQRAIAEgAEEDIAZBf3NBBHZBAXEQQQwBCyAGQX9zQQR2QQFxIQAgBkGAAXEEQCABIAdBQGtBAyAAEEEMAQsgASAHQTBqQQMgABBBCyAHQfAAaiQACzMBAXwgACgCBCsDACABKwMAIAAoAgAiACsDAKEiAiACoiABKwMIIAArAwihIgIgAqKgZgs2AQJ8QQFBf0EAIAAoAgAiACsDCCAAKwMAoCICIAEoAgAiACsDCCAAKwMAoCIDZBsgAiADYxsLEQAgACABQbCIC0GsiAsQ/AYLNgBBAUF/QQAgAiAAKAIAKAIQQQJ0aigCACIAIAIgASgCACgCEEECdGooAgAiAUkbIAAgAUsbCx8AQX8gASgCACgCACIBIAAoAgAoAgAiAEogACABShsLIAEBfyAAKAIQIgAtAAggAUEATgRAIAAgAToACAtBAEcLCwAgASAAQQEQexoLJQEBfyAAKAIQIgAoArABIAFBAE4EQCAAIAFBAEc2ArABC0EARwszAQF/IAAoAhQiAQRAIAEQ3wMLAkAgACgCREUNACAAKAJMIgFFDQAgACABEQEACyAAEBcLCQAgACABEIkBCwsAIAAgASgCABBDC44BAgF/BHwjAEEwayIDJAAgAyABKAIIIgQ2AiQgAyAENgIgIABB6O0EIANBIGoQHCACKwMAIQUgAisDECEGIAIrAwghByACKwMYIQggAyABKAIINgIQIAMgCCAHoEQAAAAAAADgP6I5AwggAyAGIAWgRAAAAAAAAOA/ojkDACAAQY/rBCADEBwgA0EwaiQACwIAC90DAgF/AnwjAEGgAWsiBCQAAkACQCAABEAgAUUNASABKAIIRQ0CIAEoAkQEQCAEIAIpAwA3A2AgBCACKQMINwNoIAQgAikDGDcDiAEgBCACKQMQNwOAASAEIAQrA2giBTkDmAEgBCAEKwNgIgY5A3AgBCAEKwOAATkDkAEgBCAEKwOIATkDeCADBEBBACECIABBuL0DQQAQHANAIAJBBEZFBEAgBCAEQeAAaiACQQR0aiIDKwMAOQNQIAQgAysDCDkDWCAAQaG8AyAEQdAAahAcIAJBAWohAgwBCwsgBCAFOQNIIAQgBjkDQCAAQaG8AyAEQUBrEBwgBCABKAIINgI0IARBBDYCMCAAQe3sAyAEQTBqEBwLQQAhAiAAQbi9A0EAEBwDQCACQQRGRQRAIAQgBEHgAGogAkEEdGoiAysDADkDICAEIAMrAwg5AyggAEGhvAMgBEEgahAcIAJBAWohAgwBCwsgBCAFOQMYIAQgBjkDECAAQaG8AyAEQRBqEBwgBCABKAIINgIEIARBBDYCACAAQY7tAyAEEBwLIARBoAFqJAAPC0HBvgFBprwBQdABQcW+ARAAAAtBvyZBprwBQdEBQcW+ARAAAAtBvZgBQaa8AUHSAUHFvgEQAAAL8QEBBH8gACgCRCEEIAAoAkghASMAQRBrIgMkACADQQA2AgwCQCABQQACf0GolQsoAgAiAARAIANBDGohAgNAIAAgBCAAKAIARg0CGiACBEAgAiAANgIACyAAKAIkIgANAAsLQQALIgAbRQRAQWQhAQwBCyABIAAoAgRHBEBBZCEBDAELIAMoAgwiAkEkakGolQsgAhsgACgCJDYCACAAKAIQIgJBIHFFBEAgBCABIAAoAiAgAiAAKAIMIAApAxgQDhoLIAAoAggEQCAAKAIAEBcLQQAhASAALQAQQSBxDQAgABAXCyADQRBqJAAgARCeAxoLiAQCBH8CfCMAQYABayIDJAACQAJAIAAEQCABRQ0BIAEoAghFDQICQAJAIAEoAkQEQCABKAJMIgRBwQFGDQEgASAEEQEAIAFBADYCTCABQgA3AkQLIAEQ3ghFDQEgASgCFBDEDCEGAkAgASgCGEF+cUEGRgRAIAYgA0EgahDADCABIAMoAjgiBDYCSAJ/IARB/////wdPBEBB5JQLQTA2AgBBfwwBC0FBAn8CQCAEQQFBASAGQgBBKBBCIgVBCGogBRANIgdBAE4EQCAFIAY2AgwMAQsgBRAXIAcMAQsgBUEBNgIgIAVCADcDGCAFQQE2AhAgBSAENgIEIAVBqJULKAIANgIkQaiVCyAFNgIAIAUoAgALIgQgBEFBRhsQngMLIQQgAUEBOgAQIAEgBEEAIARBf0cbIgQ2AkQMAQsgASgCRCEECyAEBEAgAUHBATYCTAsgARCPBiABKAJERQ0BCyABKwMgIQggAisDACEJIAMgAisDCCABKwMooTkDGCADIAkgCKE5AxAgAEGFhwQgA0EQahAcAkAgAS0AEEEBRgRAIAAgARDhDgwBCyADIAEoAgw2AgAgAEG7sgQgAxAcCyAAQciiBEEAEBwLIANBgAFqJAAPC0HBvgFBprwBQZIBQbMqEAAAC0G/JkGmvAFBkwFBsyoQAAALQb2YAUGmvAFBlAFBsyoQAAALgAIAIwBBEGsiAiQAAkACQAJAAkAgAARAIAAoAhAiA0UNASABRQ0CIAEoAghFDQMgAygCCEUNBCAAQdXKA0EAEBwgAEHeygNBABAcIABBvMoDQQAQHCAAQdPMBEEAEBwgAEG5zwRBABAcIABB38IDQQAQHCACIAEoAgg2AgAgAEG4wgMgAhAcIABB4cIDQQAQHCAAQbnKA0EAEBwgAkEQaiQADwtBwb4BQaa8AUHyAEGm7QAQAAALQZL1AEGmvAFB8wBBpu0AEAAAC0G/JkGmvAFB9ABBpu0AEAAAC0G9mAFBprwBQfUAQabtABAAAAtBveoAQaa8AUH3AEGm7QAQAAALxQIBBHwjAEGgAWsiAyQAAkACQCAABEAgAUUNASABKAIIIgFFDQIgAyABNgKcASADQQA2ApgBIANCgICAgNAANwOQASADQgA3A4gBIANCADcDgAEgA0IANwN4IANBADYCcCADQoGAgIBwNwNoIANCgICAgHA3A2AgA0IANwNYIANCgoCAgNAANwNQIABBifEDIANB0ABqEBwgAisDGCEFIAIrAxAhBiACKwMAIQQgAyACKwMIIgc5A0ggA0FAayAEOQMAIAMgBzkDOCADIAY5AzAgAyAFOQMoIAMgBjkDICADIAU5AxggAyAEOQMQIAMgBzkDCCADIAQ5AwAgAEGwmgQgAxAcIANBoAFqJAAPC0HBvgFBprwBQdwAQbWCARAAAAtBvyZBprwBQd0AQbWCARAAAAtBvZgBQaa8AUHeAEG1ggEQAAALzgIBBHwjAEHgAGsiAyQAAkACQCAABEAgAUUNASABKAIIRQ0CIAIrAwghBCACKwMYIQUgAisDECIGIAIrAwAiB6AgBiAHoSIHoUQAAAAAAADgP6IhBiAAQba3AxAZGiAAIAEoAggQGRogBSAEoCAFIAShIgWgRAAAAAAAAOC/oiEEAkAgACgC6AIEQCADIAQ5A1ggAyAGOQNQIAMgBzkDSCADIAU5A0AgAEG3sQMgA0FAaxAcIAAoAugCIQEgAyAEOQMwIAMgBjkDKCADIAE2AiAgAEH3uAMgA0EgahAcDAELIAMgBDkDGCADIAY5AxAgAyAFOQMIIAMgBzkDACAAQeiwAyADEBwLIABBtccEEBkaIANB4ABqJAAPC0HBvgFBprwBQTBBgf4AEAAAC0G/JkGmvAFBMUGB/gAQAAALQb2YAUGmvAFBMkGB/gAQAAALLgEBfyMAQRBrIgIkACACIAE2AgQgAkGd+gQ2AgAgAEGb5gMgAhAcIAJBEGokAAsNACAAIAEgAkEAEPIIC6MCAgZ/AnwjAEHwAGsiBCQAIAQgASsDACILOQNgIAErAwghCiAEIAs5AxAgBCAKOQNoIAQgCjkDGCAAQaOdAyAEQRBqEBxBACEDA0AgA0EDaiIHIAJPRQRAIAQgBCkDYDcDMCAEIAQpA2g3AzggASADQQR0aiEIQQEhA0EBIQUDQCAFQQRGRQRAIAVBBHQiBiAEQTBqaiIJIAYgCGoiBisDADkDACAJIAYrAwg5AwggBUEBaiEFDAELCwNAIANBB0ZFBEAgBEEgaiAEQTBqIAO4RAAAAAAAABhAo0EAQQAQrAEgBCAEKwMgOQMAIAQgBCsDKDkDCCAAQbidAyAEEBwgA0EBaiEDDAELCyAHIQMMAQsLIABB4vQEEBkaIARB8ABqJAALDQAgACABIAJBARDyCAueAQIBfwR8IwBBMGsiAyQAIAErAxAhBiABKwMYIQUgASsDACEEIAMgASsDCCIHRAAAAAAAAFJAozkDICADIAREAAAAAAAAUkCjOQMYIAMgBSAHoSIFIAWgRAAAAAAAAFJAozkDECADQcW7A0Hl9AQgAhs2AgAgAyAGIAShIgQgBKBEAAAAAAAAUkCjOQMIIABBnMsEIAMQHCADQTBqJAALhwQCBX8GfCMAQUBqIgMkACACKwMgIQkCfAJAIAItADAiBEHyAEcEQCAEQewARw0BIAErAwAMAgsgASsDACAJoQwBCyABKwMAIAlEAAAAAAAA4L+ioAshCyABKwMIIQwgAigCBCIBKwMQIgohCAJAIAEoAgAiBEUNAEHohwsoAgAiAQRAIAEgBBBDRQ0BCyAEEDchBQNAQQAhAQJAAkAgAwJ/AkADQCABQSFGDQEgAUEDdCIHQcT6BGooAgAiBkUNAyABQQFqIQEgBCAGIAUgBhA3IgYgBSAGSRsQ1wEgBSAGR3INAAsgB0HA+gRqDAELIAMgBDYCOCADIAU2AjQgA0Gg+gQ2AjBB0tQDIANBMGoQMSAEQS0gBRC9DCIBDQJB+swBCzYCICAAQa/kAyADQSBqEBxB6IcLIAIoAgQiASgCADYCACABKwMQIQgMAwtB09ABQYD7AEHlAEHYOxAAAAsgASAEayEFDAALAAtB8IcLKwMAIQ0gCEQAAAAAAADwPxAkIgggDaGZRAAAAAAAAOA/ZARAIAMgCDkDECADQeCHCysDADkDGCAAQb7QAyADQRBqEBxB8IcLIAg5AwALIABBIhBiIAAgAigCABDvCCADIAwgCkQAAAAAAABrQKOgOQMIIAMgCyAJRAAAAAAAAGJAo6A5AwAgAEHPywQgAxAcIANBQGskAAsMACAAQYXDBEEAEBwL6AsDBn8JfAJ+IwBB4ANrIgEkACAAKALUAyECIAAoAtADIQMgACgCzAMhBCAAKALIAyEFAkBB3IcLLQAADQAgACgC6AIiBkUgBkHaAEZyDQAgAUHP4gA2AtQDIAFBoPoENgLQA0GyqQQgAUHQA2oQJ0HchwtBAToAAAsgASADtyAFt6FEAAAAAAAAUkCjIgcgArcgBLehRAAAAAAAAFJAoyIJIAAoAugCQdoARiICGyINOQPIAyABIAkgByACGyIJOQPAAyAAQYWXBCABQcADahAcIAFBnfoENgKwAyAAQf32AyABQbADahAcQeCHC0QAAAAAAAAkQCAJRAAAAAAAAAAAZAR8An8CfAJAAn8CQCAJIge9IhBC/////////wdXBEBEAAAAAAAA8L8gByAHoqMgB0QAAAAAAAAAAGENBBogEEIAWQ0BIAcgB6FEAAAAAAAAAACjDAQLIBBC//////////f/AFYNAkGBeCECIBBCIIgiEUKAgMD/A1IEQCARpwwCC0GAgMD/AyAQpw0BGkQAAAAAAAAAAAwDC0HLdyECIAdEAAAAAAAAUEOivSIQQiCIpwtB4r4laiIDQRR2IAJqtyIORABgn1ATRNM/oiIIIBBC/////w+DIANB//8/cUGewZr/A2qtQiCGhL9EAAAAAAAA8L+gIgcgByAHRAAAAAAAAOA/oqIiC6G9QoCAgIBwg78iDEQAACAVe8vbP6IiCqAiDyAKIAggD6GgIAcgB0QAAAAAAAAAQKCjIgggCyAIIAiiIgogCqIiCCAIIAhEn8Z40Amawz+iRK94jh3Fccw/oKJEBPqXmZmZ2T+goiAKIAggCCAIRERSPt8S8cI/okTeA8uWZEbHP6CiRFmTIpQkSdI/oKJEk1VVVVVV5T+goqCgoiAHIAyhIAuhoCIHRAAAIBV7y9s/oiAORDYr8RHz/lk9oiAHIAygRNWtmso4lLs9oqCgoKAhBwsgBwsiB5lEAAAAAAAA4EFjBEAgB6oMAQtBgICAgHgLIQIgB0QAAAAAAAAIQCACt6GgBUQAAAAAAAAIQAsQqQEiBzkDACABIAc5A6ADIAEgBzkDqAMgAEGwmwQgAUGgA2oQHCABQZ36BDYCkAMgAEGtiAQgAUGQA2oQHCABQZ36BDYCgAMgAEH+zAQgAUGAA2oQHCABQZ36BDYC8AIgAEHlzQMgAUHwAmoQHCABQZ36BDYC4AIgAEGV2gMgAUHgAmoQHCABQZ36BDYC0AIgAEHozwQgAUHQAmoQHCABQZ36BDYCwAIgAEHUugQgAUHAAmoQHCABQZ36BDYCsAIgAEG6zQQgAUGwAmoQHCABQZ36BDYCoAIgAEGKzQMgAUGgAmoQHCABQZ36BDYCkAIgAEGjhAQgAUGQAmoQHCABQZ36BDYCgAIgAEGozgQgAUGAAmoQHCABQZ36BDYC8AEgAEHX2gMgAUHwAWoQHCAAQcLBBEEAEBwgAUGd+gQ2AuABIABB3aAEIAFB4AFqEBwgAUGd+gQ2AtABIABBtaAEIAFB0AFqEBwgAEGwygRBABAcIAFBnfoENgLAASAAQfHeBCABQcABahAcIAFBnfoENgKwASAAQdvJBCABQbABahAcIAFBnfoENgKgASAAQZXJBCABQaABahAcIABB6cAEQQAQHCABQZ36BDYCkAEgAEGn/gMgAUGQAWoQHCABQZ36BDYCgAEgAEGQ/wMgAUGAAWoQHCABQZ36BDYCcCAAQZbLAyABQfAAahAcIAFBnfoENgJgIABB4NMDIAFB4ABqEBwgAUGd+gQ2AlAgAEG9ywMgAUHQAGoQHCABQZ36BDYCQCAAQYfTAyABQUBrEBwgAEGlhgRBABAcIAFBnfoENgIwIABBtNIDIAFBMGoQHCABQZ36BDYCICAAQcL9AyABQSBqEBwgAUGd+gQ2AhAgAEGSuwQgAUEQahAcIAEgCTkDCCABIA05AwAgAEHbngQgARAcIABBq8AEQQAQHCAAQcTpBEEAEBwgAUHgA2okAAsnAQF/IwBBEGsiASQAIAFBmPoENgIAIABB0cIEIAEQHCABQRBqJAALiAECA38BfiMAQTBrIgEkACAAKAIQIQIgACgCDCgCACIDKQIAIQQgASADKAIINgIsIAEgBDcCJCABQZj6BDYCICAAQYfiBCABQSBqEBwgASACKAIIEB42AhQgAUGY+gQ2AhAgAEGK9AMgAUEQahAcIAFBmPoENgIAIABB05sEIAEQHCABQTBqJAALJQEBfyMAQRBrIgIkACACIAE2AgAgAEGZ8gMgAhAcIAJBEGokAAtzAQN/A0AgACIBKAIQKAJ4IgANAAsCf0EAIAFBUEEAIAEoAgBBA3EiAEECRxtqKAIoKAIQIgIoAvQBIgMgAUEwQQAgAEEDRxtqKAIoKAIQIgEoAvQBIgBKDQAaQQEgACADSg0AGiACKAL4ASABKAL4AUgLC5IDAgR/BHwjAEHAAWsiAyQAIABBiaMEEBkaQdiHC0HUhwsoAgBBBms2AgAgA0GYAWoiBSAAKAIQQRBqQSgQIBogBUMAAAAAEIYDIQUgAyACNgKUASADQZuXATYCkAEgAEHH3AQgA0GQAWoQHANAIAIgBEYEQCAAQYbPBBAZGiAAKwPoAyEHIAArA/ADIQggA0KAgICAgICA+D83A2AgAyAIOQNYIAMgBzkDUCAAQZPGBCADQdAAahAcIANBQGsgACgC6AKyuzkDACADQgA3AzggA0IANwMwIABB78UEIANBMGoQHCADQdiHCygCADYCICADQgA3AxAgA0IANwMYIABBjscEIANBEGoQHCADIAU2AgAgAEHjwAMgAxAcIAUQFyADQcABaiQABSABIARBBHRqIgYrAwAhByAGKwMIIQggACsD+AMhCSAAKwOABCEKIAMgACgCECsDoAE5A4gBIANCADcDgAEgAyAIIAqgOQN4IAMgByAJoDkDcCAAQeqYBCADQfAAahAcIARBAWohBAwBCwsLvQQCBH8EfCMAQYACayIEJAAgAEGJ/AMQGRpBACEDQdiHC0HUhwsoAgBBBGs2AgAgBEHIAWoiBSAAKAIQQThqQSgQIBogBUMAAAAAEIYDIQcgBEIANwP4ASAEQamXATYCwAEgBCACQQJqNgLEASAEQgA3A/ABIARB8AFqQcfcBCAEQcABahBUA0AgAiADRwRAIAEgA0EEdGoiBisDACEIIAYrAwghCSAAKwP4AyEKIAArA4AEIQsgBCAAKAIQKwOgATkDuAEgBEIANwOwASAEIAkgC6A5A6gBIAQgCCAKoDkDoAEgBEHwAWpB6pgEIARBoAFqEFQgA0EBaiEFIAMEQCAFIgMgAkcNAgsgACsD+AMhCCAGKwMAIQkgACsDgAQhCiAGKwMIIQsgBCAAKAIQKwOgATkDmAEgBEIANwOQASAEIAsgCqA5A4gBIAQgCSAIoDkDgAEgBEHwAWpB6pgEIARBgAFqEFQgBSEDDAELCyAEIARB8AFqIgEQ4AQ2AnAgAEGAzwQgBEHwAGoQHCAAKwPoAyEIIAArA/ADIQkgBEKAgICAgICA+D83A2AgBCAJOQNYIAQgCDkDUCAAQZPGBCAEQdAAahAcIARBQGsgACgC6AKyuzkDACAEQgA3AzggBEIANwMwIABB78UEIARBMGoQHCAEQdiHCygCAEECazYCICAEQgA3AxAgBEIANwMYIABBjscEIARBEGoQHCAEIAc2AgAgAEHjwAMgBBAcIAcQFyABEGYgBEGAAmokAAvWBgIEfwR8IwBBoANrIgQkACAAQer/AxAZGkHYhwtB1IcLKAIAQQJrNgIAIARB+AJqIgYgACgCEEEQakEoECAaIAZDAAAAABCGAyEGIAQgAkEBajYC9AIgBEGblwE2AvACIABBx9wEIARB8AJqEBwDQCACIAVGBEACQCAAKwP4AyEIIAErAwAhCSAAKwOABCEKIAErAwghCyAEIAAoAhArA6ABOQPIAiAEQgA3A8ACIAQgCyAKoDkDuAIgBCAJIAigOQOwAiAAQeqYBCAEQbACahAcIABBms8EEBkaIAArA+gDIQggACsD8AMhCSAEQoCAgICAgID4PzcDoAIgBCAJOQOYAiAEIAg5A5ACIABBk8YEIARBkAJqEBwgBCAAKALoArK7OQOAAiAEQgA3A/gBIARCADcD8AEgAEHvxQQgBEHwAWoQHEEAIQUgBEHYhwsoAgBBAms2AuABIARCADcD0AEgBEIANwPYASAAQY7HBCAEQdABahAcIAQgBjYCwAEgAEHjwAMgBEHAAWoQHCAGEBcgA0UNACAEQZgBaiIDIAAoAhBBOGpBKBAgGiADQwAAgD4QhgMhAyAEIAI2ApABIABBt9wEIARBkAFqEBwDQCACIAVGBEAgAEHZwAMQGRogACsD6AMhCCAAKwPwAyEJIARCgICAgICAgPg/NwNgIAQgCTkDWCAEIAg5A1AgAEGTxgQgBEHQAGoQHCAEQUBrIAAoAugCsrs5AwAgBEIANwM4IARCADcDMCAAQe/FBCAEQTBqEBwgBEHYhwsoAgBBAms2AiAgBEIANwMQIARCADcDGCAAQY7HBCAEQRBqEBwgBCADNgIAIABB48ADIAQQHCADEBcFIAEgBUEEdGoiBisDACEIIAYrAwghCSAAKwP4AyEKIAArA4AEIQsgBEIANwOAASAEIAkgC6A5A3ggBCAIIAqgOQNwIABBlNkBIARB8ABqEBwgBUEBaiEFDAELCwsFIAEgBUEEdGoiBysDACEIIAcrAwghCSAAKwP4AyEKIAArA4AEIQsgBCAAKAIQKwOgATkD6AIgBEIANwPgAiAEIAkgC6A5A9gCIAQgCCAKoDkD0AIgAEHqmAQgBEHQAmoQHCAFQQFqIQUMAQsLIARBoANqJAALugUDAn8JfAJ9IwBB8AJrIgMkACAAQcehBBAZGkHYhwtB1IcLKAIAQQZrNgIAIAArA4AEIQsgACsD+AMhDCAAKAIQIgQrA6ABIQUgACsD6AMhBiABKwMAIQcgASsDECEIIAArA/ADIQkgASsDCCEKIAErAxghDSADQbgCaiIBIARBEGpBKBAgGiABQwAAAAAQhgMhASADQgA3A+gCIANCgICAgICAgPg/NwOgAiADQgA3A+ACIAMgBSAGIAggB6GitiIOIAkgDSAKoaK2Ig+SuyIFo0QAAAAAAADgP6JEAAAAAAAAFECitrs5A6gCIANB4AJqIgRB1pgEIANBoAJqEFQgAyAPuyIIOQOQAiADIAVEAAAAAAAA0D+iOQOIAiADIA67IgU5A4ACIARBk8YEIANBgAJqEFQgAyAAKALoArK7OQPwASADQgA3A+gBIANCgICAgICAoKvAADcD4AEgBEHvxQQgA0HgAWoQVCADQdiHCygCADYC0AEgAyAGIAcgDKCitrsiBjkDwAEgAyAJIAogC6CitrsiBzkDyAEgBEGOxwQgA0HAAWoQVCADIAE2ArABIARB48ADIANBsAFqEFQgACAEEOAEEBkaIAEQFyACBEAgA0GIAWoiASAAKAIQQThqQSgQIBogAUMAAAAAEIYDIQEgA0IANwOAASADQgA3A3ggA0IANwNwIABBm9AEIANB8ABqEBwgA0KAgICAgICA+D83A2AgAyAIOQNYIAMgBTkDUCAAQZPGBCADQdAAahAcIANBQGsgACgC6AKyuzkDACADQgA3AzggA0IANwMwIABB78UEIANBMGoQHCADQdiHCygCADYCICADIAY5AxAgAyAHOQMYIABBjscEIANBEGoQHCADIAE2AgAgAEHjwAMgAxAcIAEQFwsgA0HgAmoQZiADQfACaiQAC+gDAgN/BnwjAEHQAWsiAyQAIAIoAgAhBCACKAIEIgUrAxAhBiADIAUoAgA2ArABIAMgBjkDqAEgAyAENgKgASAAQc7xAyADQaABahAcQdiHC0HUhwsoAgBBCWs2AgACfCABKwMAIgYgAi0AMCIEQewARg0AGiAEQfIARgRAIAYgAisDIKEMAQsgBiACKwMgRAAAAAAAAOC/oqALIQYgACsD8AMhByAAKwOABCEIIAErAwghCSAAKwPoAyEKIAArA/gDIQsgA0H4AGoiASAAKAIQQRBqQSgQIBogAUMAAAAAEIYDIQEgA0IANwPIASADQgA3A8ABIAIoAgQoAgAhBCACKAIAIQUgA0IANwNwIANCgICAgICAgOg/NwNoIAMgBTYCZCADIAQ2AmAgA0HAAWoiBEGNzwMgA0HgAGoQVCADIAIoAgQrAxAgACsD6AOiOQNQIARBxpgEIANB0ABqEFQgA0FAayAAKALoArK7OQMAIANCADcDOCADQgA3AzAgBEHvxQQgA0EwahBUIANB2IcLKAIANgIgIAMgCiAGIAugojkDECADIAcgCSAIoKI5AxggBEGOxwQgA0EQahBUIAMgATYCACAEQePAAyADEFQgACAEEOAEEBkaIAQQZiABEBcgA0HQAWokAAscACAAQeOkBBAZGkHUhwtB1IcLKAIAQQVqNgIACxwAIABB0aQEEBkaQdSHC0HUhwsoAgBBBWs2AgALCQAgACABELUNCwsAIABB/KYEEBkaCy0BAX8jAEEQayIBJAAgASAAKAIQKAIIEB42AgAgAEGl9AMgARAcIAFBEGokAAsLACAAQc36AxAZGgscACAAQbj6AxAZGkHUhwtB1IcLKAIAQQJrNgIACwsAIABBsqYEEBkaCwsAIABBoKYEEBkaCwsAIABBxfkDEBkaCz8BAX8jAEEQayIEJAAgBCADNgIIIAQgATYCACAE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AGtBGUsNAEEAIQEgBEGhlgEQKkUNACAEQfqTARAqRQ0AQQEhASAEQdnxABAqRQ0AIARB34oBECpFDQAgBEGKLhAqRQ0AQQFBAiAEQf4ZECobIQELIAIgATYCPCAAQdENECMQaiEBIAIgAi0ALEH7AXFBBEEAIAEbcjoALCACIABB/vIAECNBARCKCDoAOCACIAAgAEEAQc/iAEEAEB9EAAAAAAAAAABE////////7/8QUzkDSCACIAAgAEEAQf2XAUEAEB9BAEEAEFAiATYCUCABQQVOBEAgAyABNgIgQfyJBCADQSBqECcgAkEANgJQCyAAIANB6ABqELEKIANCnI7H4/G4nNY/NwNgIANCnI7H4/G4nNY/NwNYAkAgAygCaEESRyAFQQJHckUEQCACIAMoAnA2AjQgAiADKwN4OQNAIANBMGogABDdAkEBIQYgAy0AQEEBcUUNASADKwMwIQggAyADKwM4RAAAAAAAAFJAozkDYCADIAhEAAAAAAAAUkCjOQNYDAELIAJBfzYCNCAFQQJHIQYLQYCLCy0AAARAIwBB4AFrIgEkAEGMzARBG0EBQej6BigCACIEEEoaIAEgAisDADkD0AEgBEHtlwQgAUHQAWoQLSACLQAsIQUgASACKAIoNgLEASABIAVBAXE2AsABIARBm7gEIAFBwAFqEB0aIAIrAwghCCABQpqz5syZs+bkPzcDuAEgASAIOQOwASAEQYqYBCABQbABahAtIAEgAigCEDYCoAEgBEGntAQgAUGgAWoQHRogASACKAIUNgKUASABQS02ApABIARBk7UEIAFBkAFqEB0aIAEgAigCGDYCgAEgAUL808aX3cmYqD83A3ggAUKz5syZs+bM8T83A3AgBEHAtAQgAUHwAGoQLSACKwMgIQggASACLQAsQQF2QQFxNgJgIAEgCDkDWCABQs2Zs+bMmbP2PzcDUCAEQdi2BCABQdAAahAtIAItACwhBSABIAIrA0g5A0ggAUEANgJEIAEgBUECdkEBcTYCQCAEQbiXBCABQUBrEC0gAigCMCEFIAIoAjQhByACKwNAIQggASACLQA4NgIwIAEgCDkDKCABIAc2AiQgASAFQQJ0QYD3BGooAgA2AiAgBEGXtgQgAUEgahAtIAEgAigCPEECdEGg9wRqKAIANgIQIARBgu4DIAFBEGoQHRogASAC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KAIsIgZKDQBBASECIAAoAigiByABKAIgIghIDQAgACgCDCABKAIMayABKAIoIAcgCCAAKAIgamtqQQJtaiAEIAZqIAMgBWprQQJtIAEoAhAiASAAKAIQIgBrIAAgAWsgACABShtqTCECCyACCyABAX8gACgCICABKAIoTAR/IAEoAiAgACgCKEwFQQALCyABAX8gACgCJCABKAIsTAR/IAEoAiQgACgCLEwFQQALC0gBAnwCf0F/IAAoAgAiACsDCCICIAEoAgAiASsDCCIDYw0AGkEBIAIgA2QNABpBfyAAKwMAIgIgASsDACIDYw0AGiACIANkCwtOAQJ/IAAQGiIBBEADQCABBEAgACABECkhAgNAIAIEQCACEMoCIAAgAhAsIQIMAQsLIAEQ/AIgACABEBshAQwBCwsgACgCECgCmAEQFwsL1wYCCX8BfCMAQdAAayICJAAgABA1BEAgACIBQQIQjQIgABA0KAIQQQI7AbABQbyLC0ECOwEAIAAQNSIAQTgQGCEFIABBAWpBBBAYIQAgASgCECAANgKYASABEBohAANAIAAEQCAAEIwEIAAoAhAgBSADQThsajYCgAEgASgCECgCmAEgA0ECdGogADYCACADQQFqIQMgASAAEBshAAwBCwsgARAaIQMDQCADBEAgASADECkhAANAIAAEQCAAQfklQbgBQQEQLhogABCpAyAAQaCNCygCAEQAAAAAAADwP0QAAAAAAAAAABBTIQogACgCECAKOQOAASABIAAQLCEADAELCyABIAMQGyEDDAELCwJ/QQEgAUGsGxAjIgBFDQAaIAAtAAAEQEEBIAEgAEEAEHMiBA0BGiACIAA2AhBBpJcDIAJBEGoQJ0GMpwRBABB8C0EAIQRBAAshCCABQQFBrBtBABAfIQMCQCABQeqbARAjIgBFDQAgAC0AAEUNACACIAJByABqNgIEIAIgAkFAazYCACAAQdOEASACEElBAUcNACACIAIrA0A5A0gLIAEQNQRAIAEgAkE8ahCIBiEHAkAgAigCPEEBRgRAAkAgBCIADQAgAwRAIAEgAxC1CiIADQELQQAhAAsgBCABIAAQugoiBSAEGyEGIANFIAByRQRAIAUgA0HuiAMQaAsgBCAGIAgbIQQgARAaIgAoAhAoAoABEBcgACgCEEEANgKAASABEJIEGgwBCyABQQJB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IQgLA0AgCSIFIAgiBkcEQCADQdAAaiIIIAVBACACIAEQkQUgCCAGIARBACABEJEFIAYoAhAoAowBKAIwIQggBSgCECgCjAEoAjAhCSAFIQIgBiEEDAELCyADQdAAaiIFIAYgBCACIAEQkQUgAygCVEEASA0BAkACQCAFEPQGIAMoAlQQnQoEQCAHIQIgBRD0BiADKAJUEPoNIgsNAkEAIQtB1t8DQQAQJwwBCyAMDQAgA0E4aiAAEN0CIABBCEEIENIEIQJB+OADQQAQJyABKwMAIg0gArciDmYgDiABKwMIIg9lcgRAIAMgDzkDMCADIA05AyggAyACNgIgQaDjBCADQSBqEHwMAQsgAysDOCIQIA1lIAMrA0AiDiAPZXJFDQAgAyAPOQMYIAMgDTkDECADIA45AwggAyAQOQMAQdLjBCADEHwLQQEhDAwECwNAIAJFDQQgAigCECADQThqIAIgC0EAEPUJIAMpAzg3A5ABIAMoAlRBAEgNAyACIANB0ABqEPQGIAMoAlRBABD0CSACKAIQKAKwASECDAALAAsgACAKEBshCgwGC0HbyAFBgbkBQeEBQcowEAAAC0HbyAFBgbkBQYECQcowEAAACyADQdAAaiICRQRAQYPPAUGBuQFBIUGrngEQAAALIAJBADYCBCACKAIAEBcgAkEANgIIIAJCADcCAAsgACAHECwhBwwACwALCyALBEAgCxD5DQsgA0HgAGokACAMC1sBAn8gABAaIQEDQCABBEAgACABECkhAgNAIAIEQCACEMoCIAAgAhAsIQIMAQsLIAEQ/AIgACABEBshAQwBCwsgABDMCiAAKAIQKAKYARAXIAAoAhAoAowBEBcLSAECfyAAEBohAQNAIAEEQCAAIAEQKSECA0AgAgRAIAIQygIgACACECwhAgwBBSABEPwCIAAgARAbIQEMAwsACwALCyAAEM0KC5YCAQN/IABBAhCNAiAAKAIQQQI7AbABQbyLC0ECOwEAIAAQGiEBA0AgAQRAIAEQjAQgACABEBshAQwBCwsgABAaIQIDQCACBEAgACACECkhAQNAIAEEQCABQfklQbgBQQEQLhogARCpAyAAIAEQLCEBDAELCyAAIAIQGyECDAELCyAAQQAQ9QYgAEEAENAKIABBABDPCgJAIAAoAhAiASgCCCgCVARAIAAQGiEBA0AgAQRAIAEoAhAiAigClAEiAyACKwMQRAAAAAAAAFJAozkDACADIAIrAxhEAAAAAAAAUkCjOQMIIAAgARAbIQEMAQsLIABBARCBBQwBCyABLwGIAUEOcSIBRQ0AIAAgARCCBQsgABCtAwtGAQF/IwBBEGsiASQAQQFBDBBGIgJFBEAgAUEMNgIAQej6BigCAEGp3QMgARAdGhAmAAsgAiAAKAIINgIIIAFBEGokACACC64BAQR/IAAQGiIDBEAgACgCECgCjAEiBBAaIQIDQCACBEAgBCACECkhAQNAIAEEQCABKAIQKAJ8EBcgBCABECwhAQwBCwsgAigCECgCgAEQFyACKAIQKAKUARAXIAQgAhAbIQIMAQsLIAQQlQEDQCADBEAgACADECkhAQNAIAEEQCABEMoCIAAgARAsIQEMAQsLIAMQ/AIgACADEBshAwwBCwsgACgCECgCmAEQFwsL3ggCCH8BfCAAEDUEQCAAQQIQjQIgABA0KAIQQQI7AbABQbyLC0ECOwEAIAAQNUEEEBghAiAAEDVBAWpBBBAYIQEgACgCECABNgKYASAAEBohAQNAIAEEQCABEIwEIAEoAhAgAiADQQJ0IgRqNgKAASAAKAIQKAKYASAEaiABNgIAIANBAWohAyAAIAEQGyEBDAELCyAAEBohAwNAIAMEQCAAIAMQKSEBA0AgAQRAIAFB+SVBuAFBARAuGiABEKkDIAFBoI0LKAIARAAAAAAAAPA/RAAAAAAAAAAAEFMhCSABKAIQIAk5A4ABIAAgARAsIQEMAQsLIAAgAxAbIQMMAQsLIwBBMGsiAyQAAkAgABA1RQ0AIANBsMgKKAIANgIIQc6pASADQQhqQQAQzQEiBEHc3gBBmAJBARAuGiAAKAIQIAQ2AowBIAAQGiEBA0AgAQRAIAEoAhAoAoABKAIARQRAIAQgARAeQQEQcyIFQYYmQcACQQEQLhpBKBBNIQIgBSgCECACNgKAAUG8iwsvAQBBCBAYIQYgBSgCECICIAY2ApQBIAIgASgCECIGKwNYOQNYIAIgBisDYDkDYCACIAYrA1A5A1AgAigCgAEgATYCACABKAIQKAKAASAFNgIACyAAIAEQGyEBDAELCyAAEBohAgNAIAIEQCAAIAIQKSEBA0AgAQRAIAFBMEEAIAEoAgBBA3EiBUEDRxtqKAIoKAIQKAKAASgCACIGIAFBUEEAIAVBAkcbaigCKCgCECgCgAEoAgAiBUcEQCAEIAYgBUEAQQEQUkH5JUG4AUEBEC4aCyAAIAEQLCEBDAELCyAAIAIQGyECDAELCyAEIANBDGoQiAYhBUEAIQYDfyADKAIMIAZNBH8gBBAaBSAFIAZBAnRqKAIAIggQGiECA0AgAgRAIAAgAigCECgCgAEoAgAQKSEBA0AgAQRAIAFBUEEAIAEoAgBBA3FBAkcbaigCKCgCECgCgAEoAgAiByACRwRAIAQgAiAHQQBBARBSIgdB+SVBuAFBARAuGiAIIAdBARDIAhoLIAAgARAsIQEMAQsLIAggAhAbIQIMAQsLIAZBAWohBgwBCwshAgNAAkAgAgRAIAQgAhApIQEDQCABRQ0CQQQQTSEGIAEoAhAgBjYCfCAEIAEQLCEBDAALAAsgAygCDCECQQAhASADQQA2AiwgBSgCACEEAkAgAkEBRgRAIAQgACADQSxqENUKIAUoAgAQ1AogABCSBBoMAQsgBCgCSCEEIABBAkEIIANBDGoQuAMaA0AgASACRgRAIAIgBSAEIANBDGoQ0wRBACEBA0AgASACRg0DIAUgAUECdGooAgAQ1AogAUEBaiEBDAALAAUgBSABQQJ0aigCACIGIAAgA0EsahDVCiAGEJIEGiABQQFqIQEMAQsACwALIAUQFwwCCyAEIAIQGyECDAALAAsgA0EwaiQAIAAQGigCECgCgAEQFyAAEI0DIAAQrQMLCwQAIwALEAAjACAAa0FwcSIAJAAgAAsGACAAJAALLABBAUF/QQAgACgCACgCECgC+AEiACABKAIAKAIQKAL4ASIBShsgACABSBsLBgBBkfcACwYAQZ+zAQsGAEH24QALFwAgAEUEQEEADwsgAEGk7gcQ4QFBAEcLHAAgACABKAIIIAUQiwEEQCABIAIgAyAEEIIHCws5ACAAIAEoAgggBRCLAQRAIAEgAiADIAQQggcPCyAAKAIIIgAgASACIAMgBCAFIAAoAgAoAhQRCwALkwIBBn8gACABKAIIIAUQiwEEQCABIAIgAyAEEIIHDwsgAS0ANSAAKAIMIQYgAUEAOgA1IAEtADQgAUEAOgA0IABBEGoiCSABIAIgAyAEIAUQgAcgAS0ANCIKciEIIAEtADUiC3IhBwJAIAZBAkgNACAJIAZBA3RqIQkgAEEYaiEGA0AgAS0ANg0BAkAgCkEBcQRAIAEoAhhBAUYNAyAALQAIQQJxDQEMAwsgC0EBcUUNACAALQAIQQFxRQ0CCyABQQA7ATQgBiABIAIgAyAEIAUQgAcgAS0ANSILIAdyQQFxIQcgAS0ANCIKIAhyQQFxIQggBkEIaiIGIAlJDQALCyABIAdBAXE6ADUgASAIQQFxOgA0C5QBACAAIAEoAgggBBCLAQRAIAEgAiADEIEHDwsCQCAAIAEoAgAgBBCLAUUNAAJAIAIgASgCEEcEQCABKAIUIAJHDQELIANBAUcNASABQQE2AiAPCyABIAI2AhQgASADNgIgIAEgASgCKEEBajYCKAJAIAEoAiRBAUcNACABKAIYQQJHDQAgAUEBOgA2CyABQQQ2AiwLC/gBACAAIAEoAgggBBCLAQRAIAEgAiADEIEHDwsCQCAAIAEoAgAgBBCLAQRAAkAgAiABKAIQRwRAIAEoAhQgAkcNAQsgA0EBRw0CIAFBATYCIA8LIAEgAzYCIAJAIAEoAixBBEYNACABQQA7ATQgACgCCCIAIAEgAiACQQEgBCAAKAIAKAIUEQsAIAEtADVBAUYEQCABQQM2AiwgAS0ANEUNAQwDCyABQQQ2AiwLIAEgAjYCFCABIAEoAihBAWo2AiggASgCJEEBRw0BIAEoAhhBAkcNASABQQE6ADYPCyAAKAIIIgAgASACIAMgBCAAKAIAKAIYEQkACwuxBAEDfyAAIAEoAgggBBCLAQRAIAEgAiADEIEHDwsCQAJAIAAgASgCACAEEIsBBEACQCACIAEoAhBHBEAgASgCFCACRw0BCyADQQFHDQMgAUEBNgIgDwsgASADNgIgIAEoAixBBEYNASAAQRBqIgUgACgCDEEDdGohB0EAIQMDQAJAAkAgAQJ/AkAgBSAHTw0AIAFBADsBNCAFIAEgAiACQQEgBBCAByABLQA2DQAgAS0ANUEBRw0DIAEtADRBAUYEQCABKAIYQQFGDQNBASEDQQEhBiAALQAIQQJxRQ0DDAQLQQEhAyAALQAIQQFxDQNBAwwBC0EDQQQgAxsLNgIsIAYNBQwECyABQQM2AiwMBAsgBUEIaiEFDAALAAsgACgCDCEFIABBEGoiBiABIAIgAyAEEJMFIAVBAkgNASAGIAVBA3RqIQYgAEEYaiEFAkAgACgCCCIAQQJxRQRAIAEoAiRBAUcNAQsDQCABLQA2DQMgBSABIAIgAyAEEJMFIAVBCGoiBSAGSQ0ACwwCCyAAQQFxRQRAA0AgAS0ANg0DIAEoAiRBAUYNAyAFIAEgAiADIAQQkwUgBUEIaiIFIAZJDQAMAwsACwNAIAEtADYNAiABKAIkQQFGBEAgASgCGEEBRg0DCyAFIAEgAiADIAQQkwUgBUEIaiIFIAZJDQALDAELIAEgAjYCFCABIAEoAihBAWo2AiggASgCJEEBRw0AIAEoAhhBAkcNACABQQE6ADYLC50FAQR/IwBBQGoiBCQAAkAgAUGA8AdBABCLAQRAIAJBADYCAEEBIQUMAQsCQCAAIAEgAC0ACEEYcQR/QQEFIAFFDQEgAUH07QcQ4QEiA0UNASADLQAIQRhxQQBHCxCLASEGCyAGBEBBASEFIAIoAgAiAEUNASACIAAoAgA2AgAMAQsCQCABRQ0AIAFBpO4HEOEBIgZFDQEgAigCACIBBEAgAiABKAIANgIACyAGKAIIIgMgACgCCCIBQX9zcUEHcSADQX9zIAFxQeAAcXINAUEBIQUgACgCDCAGKAIMQQAQiwENASAAKAIMQfTvB0EAEIsBBEAgBigCDCIARQ0CIABB2O4HEOEBRSEFDAILIAAoAgwiA0UNAEEAIQUgA0Gk7gcQ4QEiAQRAIAAtAAhBAXFFDQICfyAGKAIMIQBBACECAkADQEEAIABFDQIaIABBpO4HEOEBIgNFDQEgAygCCCABKAIIQX9zcQ0BQQEgASgCDCADKAIMQQAQiwENAhogAS0ACEEBcUUNASABKAIMIgBFDQEgAEGk7gcQ4QEiAQRAIAMoAgwhAAwBCwsgAEGU7wcQ4QEiAEUNACAAIAMoAgwQ9AohAgsgAgshBQwCCyADQZTvBxDhASIBBEAgAC0ACEEBcUUNAiABIAYoAgwQ9AohBQwCCyADQcTtBxDhASIBRQ0BIAYoAgwiAEUNASAAQcTtBxDhASIARQ0BIAIoAgAhAyAEQQhqQQBBOBAzGiAEIANBAEc6ADsgBEF/NgIQIAQgATYCDCAEIAA2AgQgBEEBNgI0IAAgBEEEaiADQQEgACgCACgCHBEIACAEKAIcIgBBAUYEQCACIAQoAhRBACADGzYCAAsgAEEBRiEFDAELQQAhBQsgBEFAayQAIAULcAECfyAAIAEoAghBABCLAQRAIAEgAiADEIUHDwsgACgCDCEEIABBEGoiBSABIAIgAxD1CgJAIARBAkgNACAFIARBA3RqIQQgAEEYaiEAA0AgACABIAIgAxD1CiABLQA2DQEgAEEIaiIAIARJDQALCwszACAAIAEoAghBABCLAQRAIAEgAiADEIUHDwsgACgCCCIAIAEgAiADIAAoAgAoAhwRCAALGgAgACABKAIIQQAQiwEEQCABIAIgAxCFBwsLogEBAX8jAEFAaiIDJAACf0EBIAAgAUEAEIsBDQAaQQAgAUUNABpBACABQcTtBxDhASIBRQ0AGiADQQhqQQBBOBAzGiADQQE6ADsgA0F/NgIQIAMgADYCDCADIAE2AgQgA0EBNgI0IAEgA0EEaiACKAIAQQEgASgCACgCHBEIACADKAIcIgBBAUYEQCACIAMoAhQ2AgALIABBAUYLIANBQGskAAsLACAAIAFBABCLAQsDAAALBwAgACgCBAsJAEGosgsQdRoLJQBBtLILLQAARQRAQaiyC0GowwcQyANBtLILQQE6AAALQaiyCwsJAEGYsgsQLxoLJQBBpLILLQAARQRAQZiyC0HU3AAQmgRBpLILQQE6AAALQZiyCwsJAEGIsgsQdRoLJQBBlLILLQAARQRAQYiyC0HUwgcQyANBlLILQQE6AAALQYiyCwsJAEH4sQsQLxoLJQBBhLILLQAARQRAQfixC0GkxQEQmgRBhLILQQE6AAALQfixCwsJAEHosQsQdRoLJQBB9LELLQAARQRAQeixC0GwwgcQyANB9LELQQE6AAALQeixCwsJAEHkzQoQLxoLGgBB5bELLQAARQRAQeWxC0EBOgAAC0HkzQoLCQBB2LELEHUaCyUAQeSxCy0AAEUEQEHYsQtBjMIHEMgDQeSxC0EBOgAAC0HYsQsLCQBB2M0KEC8aCxoAQdWxCy0AAEUEQEHVsQtBAToAAAtB2M0KCxsAQbi6CyEAA0AgAEEMaxB1IgBBoLoLRw0ACwtUAEHUsQstAAAEQEHQsQsoAgAPC0G4ugstAABFBEBBuLoLQQE6AAALQaC6C0Gg6wcQWUGsugtBrOsHEFlB1LELQQE6AABB0LELQaC6CzYCAEGgugsLGwBBmLoLIQADQCAAQQxrEC8iAEGAugtHDQALC1QAQcyxCy0AAARAQcixCygCAA8LQZi6Cy0AAEUEQEGYugtBAToAAAtBgLoLQc/NARBaQYy6C0HCzQEQWkHMsQtBAToAAEHIsQtBgLoLNgIAQYC6CwsbAEHwuQshAANAIABBDGsQdSIAQdC3C0cNAAsLsAIAQcSxCy0AAARAQcCxCygCAA8LQfC5Cy0AAEUEQEHwuQtBAToAAAtB0LcLQZjnBxBZQdy3C0G45wcQWUHotwtB3OcHEFlB9LcLQfTnBxBZQYC4C0GM6AcQWUGMuAtBnOgHEFlBmLgLQbDoBxBZQaS4C0HE6AcQWUGwuAtB4OgHEFlBvLgLQYjpBxBZQci4C0Go6QcQWUHUuAtBzOkHEFlB4LgLQfDpBxBZQey4C0GA6gcQWUH4uAtBkOoHEFlBhLkLQaDqBxBZQZC5C0GM6AcQWUGcuQtBsOoHEFlBqLkLQcDqBxBZQbS5C0HQ6gcQWUHAuQtB4OoHEFlBzLkLQfDqBxBZQdi5C0GA6wcQWUHkuQtBkOsHEFlBxLELQQE6AABBwLELQdC3CzYCAEHQtwsLGwBBwLcLIQADQCAAQQxrEC8iAEGgtQtHDQALC6ICAEG8sQstAAAEQEG4sQsoAgAPC0HAtwstAABFBEBBwLcLQQE6AAALQaC1C0GFDBBaQay1C0H8CxBaQbi1C0G8+gAQWkHEtQtBh+4AEFpB0LULQesQEFpB3LULQZyWARBaQei1C0GPDRBaQfS1C0GQGBBaQYC2C0HYOhBaQYy2C0GhOhBaQZi2C0HPOhBaQaS2C0HiOhBaQbC2C0Hn6QAQWkG8tgtB2r4BEFpByLYLQbA7EFpB1LYLQb01EFpB4LYLQesQEFpB7LYLQZrgABBaQfi2C0HI7AAQWkGEtwtB1P4AEFpBkLcLQZXbABBaQZy3C0GmJBBaQai3C0G0FhBaQbS3C0H8tQEQWkG8sQtBAToAAEG4sQtBoLULNgIAQaC1CwsbAEGYtQshAANAIABBDGsQdSIAQfCzC0cNAAsLzAEAQbSxCy0AAARAQbCxCygCAA8LQZi1Cy0AAEUEQEGYtQtBAToAAAtB8LMLQcTkBxBZQfyzC0Hg5AcQWUGItAtB/OQHEFlBlLQLQZzlBxBZQaC0C0HE5QcQWUGstAtB6OUHEFlBuLQLQYTmBxBZQcS0C0Go5gcQWUHQtAtBuOYHEFlB3LQLQcjmBxBZQei0C0HY5gcQWUH0tAtB6OYHEFlBgLULQfjmBxBZQYy1C0GI5wcQWUG0sQtBAToAAEGwsQtB8LMLNgIAQfCzCwsbAEHoswshAANAIABBDGsQLyIAQcCyC0cNAAsLwwEAQayxCy0AAARAQaixCygCAA8LQeizCy0AAEUEQEHoswtBAToAAAtBwLILQdYQEFpBzLILQd0QEFpB2LILQbsQEFpB5LILQcMQEFpB8LILQbIQEFpB/LILQeQQEFpBiLMLQc0QEFpBlLMLQZbgABBaQaCzC0H64wAQWkGsswtBqY8BEFpBuLMLQbGwARBaQcSzC0H5FhBaQdCzC0G29QAQWkHcswtB6CUQWkGssQtBAToAAEGosQtBwLILNgIAQcCyCwsLACAAQfTBBxDIAwsLACAAQfqTARCaBAsLACAAQeDBBxDIAwsLACAAQd+KARCaBAsMACAAIAFBEGoQkQcLDAAgACABQQxqEJEHCwcAIAAsAAkLBwAgACwACAsJACAAEJILEBcLCQAgABCTCxAXCxUAIAAoAggiAEUEQEEBDwsgABCbCwuOAQEGfwNAAkAgAiADRiAEIAhNcg0AQQEhByAAKAIIIQUjAEEQayIGJAAgBiAFNgIMIAZBCGogBkEMahCIAkEAIAIgAyACayABQfytCyABGxCzBSEFEIcCIAZBEGokAAJAAkAgBUECag4DAgIBAAsgBSEHCyAIQQFqIQggByAJaiEJIAIgB2ohAgwBCwsgCQtIAQJ/IAAoAgghAiMAQRBrIgEkACABIAI2AgwgAUEIaiABQQxqEIgCEIcCIAFBEGokACAAKAIIIgBFBEBBAQ8LIAAQmwtBAUYLiQEBAn8jAEEQayIGJAAgBCACNgIAAn9BAiAGQQxqIgVBACAAKAIIEIoHIgBBAWpBAkkNABpBASAAQQFrIgIgAyAEKAIAa0sNABoDfyACBH8gBS0AACEAIAQgBCgCACIBQQFqNgIAIAEgADoAACACQQFrIQIgBUEBaiEFDAEFQQALCwsgBkEQaiQAC8gGAQ1/IwBBEGsiESQAIAIhCANAAkAgAyAIRgRAIAMhCAwBCyAILQAARQ0AIAhBAWohCAwBCwsgByAFNgIAIAQgAjYCAANAAkACfwJAIAIgA0YgBSAGRnINACARIAEpAgA3AwggACgCCCEJIwBBEGsiECQAIBAgCTYCDCAQQQhqIBBBDGoQiAIgCCACayEOQQAhCiMAQZAIayIMJAAgDCAEKAIAIgk2AgwgBSAMQRBqIAUbIQ8CQAJAAkAgCUUgBiAFa0ECdUGAAiAFGyINRXJFBEADQCAOQYMBSyAOQQJ2IgsgDU9yRQRAIAkhCwwECyAPIAxBDGogCyANIAsgDUkbIAEQ7gshEiAMKAIMIQsgEkF/RgRAQQAhDUF/IQoMAwsgDSASQQAgDyAMQRBqRxsiFGshDSAPIBRBAnRqIQ8gCSAOaiALa0EAIAsbIQ4gCiASaiEKIAtFDQIgCyEJIA0NAAwCCwALIAkhCwsgC0UNAQsgDUUgDkVyDQAgCiEJA0ACQAJAIA8gCyAOIAEQswUiCkECakECTQRAAkACQCAKQQFqDgIGAAELIAxBADYCDAwCCyABQQA2AgAMAQsgDCAMKAIMIApqIgs2AgwgCUEBaiEJIA1BAWsiDQ0BCyAJIQoMAgsgD0EEaiEPIA4gCmshDiAJIQogDg0ACwsgBQRAIAQgDCgCDDYCAAsgDEGQCGokABCHAiAQQRBqJAACQAJAAkACQCAKQX9GBEADQCAHIAU2AgAgAiAEKAIARg0GQQEhBgJAAkACQCAFIAIgCCACayARQQhqIAAoAggQnAsiAUECag4DBwACAQsgBCACNgIADAQLIAEhBgsgAiAGaiECIAcoAgBBBGohBQwACwALIAcgBygCACAKQQJ0aiIFNgIAIAUgBkYNAyAEKAIAIQIgAyAIRgRAIAMhCAwICyAFIAJBASABIAAoAggQnAtFDQELQQIMBAsgByAHKAIAQQRqNgIAIAQgBCgCAEEBaiICNgIAIAIhCANAIAMgCEYEQCADIQgMBgsgCC0AAEUNBSAIQQFqIQgMAAsACyAEIAI2AgBBAQwCCyAEKAIAIQILIAIgA0cLIBFBEGokAA8LIAcoAgAhBQwACwALpgUBDH8jAEEQayIPJAAgAiEIA0ACQCADIAhGBEAgAyEIDAELIAgoAgBFDQAgCEEEaiEIDAELCyAHIAU2AgAgBCACNgIAAkADQAJAAkAgAiADRiAFIAZGcgR/IAIFIA8gASkCADcDCEEBIRAgACgCCCEJIwBBEGsiDiQAIA4gCTYCDCAOQQhqIA5BDGoQiAIgBSEJIAYgBWshCkEAIQwjAEEQayIRJAACQCAEKAIAIgtFIAggAmtBAnUiEkVyDQAgCkEAIAUbIQoDQCARQQxqIAkgCkEESRsgCygCABCsByINQX9GBEBBfyEMDAILIAkEfyAKQQNNBEAgCiANSQ0DIAkgEUEMaiANECAaCyAKIA1rIQogCSANagVBAAshCSALKAIARQRAQQAhCwwCCyAMIA1qIQwgC0EEaiELIBJBAWsiEg0ACwsgCQRAIAQgCzYCAAsgEUEQaiQAEIcCIA5BEGokAAJAAkACQAJAIAxBAWoOAgAIAQsgByAFNgIAA0AgAiAEKAIARg0CIAUgAigCACAAKAIIEIoHIgFBf0YNAiAHIAcoAgAgAWoiBTYCACACQQRqIQIMAAsACyAHIAcoAgAgDGoiBTYCACAFIAZGDQEgAyAIRgRAIAQoAgAhAiADIQgMBgsgD0EEaiICQQAgACgCCBCKByIIQX9GDQQgBiAHKAIAayAISQ0GA0AgCARAIAItAAAhBSAHIAcoAgAiCUEBajYCACAJIAU6AAAgCEEBayEIIAJBAWohAgwBCwsgBCAEKAIAQQRqIgI2AgAgAiEIA0AgAyAIRgRAIAMhCAwFCyAIKAIARQ0EIAhBBGohCAwACwALIAQgAjYCAAwDCyAEKAIACyADRyEQDAMLIAcoAgAhBQwBCwtBAiEQCyAPQRBqJAAgEAsJACAAEKwLEBcLMwAjAEEQayIAJAAgACAENgIMIAAgAyACazYCCCAAQQxqIABBCGoQiAwoAgAgAEEQaiQACzQAA0AgASACRkUEQCAEIAMgASwAACIAIABBAEgbOgAAIARBAWohBCABQQFqIQEMAQsLIAELDAAgAiABIAFBAEgbCyoAA0AgASACRkUEQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohAQwBCwsgAQsPACAAIAEgAkGQqgcQ3woLHgAgAUEATgR/QZCqBygCACABQQJ0aigCAAUgAQvACw8AIAAgASACQYSeBxDfCgseACABQQBOBH9BhJ4HKAIAIAFBAnRqKAIABSABC8ALCQAgABCfCxAXCzUAA0AgASACRkUEQCAEIAEoAgAiACADIABBgAFJGzoAACAEQQFqIQQgAUEEaiEBDAELCyABCw4AIAEgAiABQYABSRvACyoAA0AgASACRkUEQCADIAEsAAA2AgAgA0EEaiEDIAFBAWohAQwBCwsgAQsPACAAIAEgAkGQqgcQ3goLHgAgAUH/AE0Ef0GQqgcoAgAgAUECdGooAgAFIAELCw8AIAAgASACQYSeBxDeCgseACABQf8ATQR/QYSeBygCACABQQJ0aigCAAUgAQsLOgADQAJAIAIgA0YNACACKAIAIgBB/wBLDQAgAEECdEHguAdqKAIAIAFxRQ0AIAJBBGohAgwBCwsgAgs6AANAAkAgAiADRg0AIAIoAgAiAEH/AE0EQCAAQQJ0QeC4B2ooAgAgAXENAQsgAkEEaiECDAELCyACC0kBAX8DQCABIAJGRQRAQQAhACADIAEoAgAiBEH/AE0EfyAEQQJ0QeC4B2ooAgAFQQALNgIAIANBBGohAyABQQRqIQEMAQsLIAELJQBBACEAIAJB/wBNBH8gAkECdEHguAdqKAIAIAFxQQBHBUEACwsJACAAEKcLEBcLxAEAIwBBEGsiAyQAAkAgBRChAUUEQCAAIAUoAgg2AgggACAFKQIANwIAIAAQmQMaDAELIAUoAgAhAiAFKAIEIQUjAEEQayIEJAACQAJAAkAgBRCWBQRAIAAiASAFEMoBDAELIAVB9////wNLDQEgBEEIaiAFEMcDQQFqEMYDIAQoAgwaIAAgBCgCCCIBEPMBIAAgBCgCDBDyASAAIAUQuAELIAEgAiAFQQFqEOkCIARBEGokAAwBCxC/AQALCyADQRBqJAALCQAgACAFEJEHC4cDAQh/IwBB4ANrIgAkACAAQdwDaiIGIAMQSyAGEMABIQogBRAiBEAgBUEAEKAFKAIAIApBLRDIAUYhCwsgAiALIABB3ANqIABB2ANqIABB1ANqIABB0ANqIABBxANqEEwiDCAAQbgDahBMIgYgAEGsA2oQTCIHIABBqANqELALIABBITYCECAAQQhqQQAgAEEQaiICEHghCAJAAn8gBRAiIAAoAqgDSgRAIAUQIiEJIAAoAqgDIQ0gBxAiIAkgDWtBAXRqIAYQImogACgCqANqQQFqDAELIAcQIiAGECJqIAAoAqgDakECagsiCUHlAEkNACAIIAlBAnQQQhCNASAIKAIAIgINABCOAQALIAIgAEEEaiAAIAMoAgQgBRBAIAUQQCAFECJBAnRqIAogCyAAQdgDaiAAKALUAyAAKALQAyAMIAYgByAAKAKoAxCvCyABIAIgACgCBCAAKAIAIAMgBBCVAyAIEHcgBxB1GiAGEHUaIAwQLxogAEHcA2oQSCAAQeADaiQAC8cEAQt/IwBBoAhrIgAkACAAIAU3AxAgACAGNwMYIAAgAEGwB2oiBzYCrAcgB0HkAEH1hQEgAEEQahClASEHIABBITYCkAQgAEGIBGpBACAAQZAEaiIJEHghDiAAQSE2ApAEIABBgARqQQAgCRB4IQoCQCAHQeQATwRAEGUhByAAIAU3AwAgACAGNwMIIABBrAdqIAdB9YUBIAAQogIiB0F/Rg0BIA4gACgCrAcQjQEgCiAHQQJ0EEIQjQEgChCrBQ0BIAooAgAhCQsgAEH8A2oiCCADEEsgCBDAASIRIAAoAqwHIgggByAIaiAJEMMCIAdBAEoEQCAAKAKsBy0AAEEtRiEPCyACIA8gAEH8A2ogAEH4A2ogAEH0A2ogAEHwA2ogAEHkA2oQTCIQIABB2ANqEEwiCCAAQcwDahBMIgsgAEHIA2oQsAsgAEEhNgIwIABBKGpBACAAQTBqIgIQeCEMAn8gACgCyAMiDSAHSARAIAsQIiAHIA1rQQF0aiAIECJqIAAoAsgDakEBagwBCyALECIgCBAiaiAAKALIA2pBAmoLIg1B5QBPBEAgDCANQQJ0EEIQjQEgDCgCACICRQ0BCyACIABBJGogAEEgaiADKAIEIAkgCSAHQQJ0aiARIA8gAEH4A2ogACgC9AMgACgC8AMgECAIIAsgACgCyAMQrwsgASACIAAoAiQgACgCICADIAQQlQMgDBB3IAsQdRogCBB1GiAQEC8aIABB/ANqEEggChB3IA4QdyAAQaAIaiQADwsQjgEAC/8CAQh/IwBBsAFrIgAkACAAQawBaiIGIAMQSyAGEMEBIQogBRAiBEAgBUEAEDwtAAAgCkEtEJkBQf8BcUYhCwsgAiALIABBrAFqIABBqAFqIABBpwFqIABBpgFqIABBmAFqEEwiDCAAQYwBahBMIgYgAEGAAWoQTCIHIABB/ABqELQLIABBITYCECAAQQhqQQAgAEEQaiICEHghCAJAAn8gBRAiIAAoAnxKBEAgBRAiIQkgACgCfCENIAcQIiAJIA1rQQF0aiAGECJqIAAoAnxqQQFqDAELIAcQIiAGECJqIAAoAnxqQQJqCyIJQeUASQ0AIAggCRBCEI0BIAgoAgAiAg0AEI4BAAsgAiAAQQRqIAAgAygCBCAFEEAgBRBAIAUQImogCiALIABBqAFqIAAsAKcBIAAsAKYBIAwgBiAHIAAoAnwQswsgASACIAAoAgQgACgCACADIAQQlgMgCBB3IAcQLxogBhAvGiAMEC8aIABBrAFqEEggAEGwAWokAAu+BAELfyMAQcADayIAJAAgACAFNwMQIAAgBjcDGCAAIABB0AJqIgc2AswCIAdB5ABB9YUBIABBEGoQpQEhByAAQSE2AuABIABB2AFqQQAgAEHgAWoiCRB4IQ4gAEEhNgLgASAAQdABakEAIAkQeCEKAkAgB0HkAE8EQBBlIQcgACAFNwMAIAAgBjcDCCAAQcwCaiAHQfWFASAAEKICIgdBf0YNASAOIAAoAswCEI0BIAogBxBCEI0BIAoQqwUNASAKKAIAIQkLIABBzAFqIgggAxBLIAgQwQEiESAAKALMAiIIIAcgCGogCRDnAiAHQQBKBEAgACgCzAItAABBLUYhDwsgAiAPIABBzAFqIABByAFqIABBxwFqIABBxgFqIABBuAFqEEwiECAAQawBahBMIgggAEGgAWoQTCILIABBnAFqELQLIABBITYCMCAAQShqQQAgAEEwaiICEHghDAJ/IAAoApwBIg0gB0gEQCALECIgByANa0EBdGogCBAiaiAAKAKcAWpBAWoMAQsgCxAiIAgQImogACgCnAFqQQJqCyINQeUATwRAIAwgDRBCEI0BIAwoAgAiAkUNAQsgAiAAQSRqIABBIGogAygCBCAJIAcgCWogESAPIABByAFqIAAsAMcBIAAsAMYBIBAgCCALIAAoApwBELMLIAEgAiAAKAIkIAAoAiAgAyAEEJYDIAwQdyALEC8aIAgQLxogEBAvGiAAQcwBahBIIAoQdyAOEHcgAEHAA2okAA8LEI4BAAu6BQEEfyMAQcADayIAJAAgACACNgK4AyAAIAE2ArwDIABBpwQ2AhQgAEEYaiAAQSBqIABBFGoiBxB4IQogAEEQaiIBIAQQSyABEMABIQggAEEAOgAPIABBvANqIAIgAyABIAQoAgQgBSAAQQ9qIAggCiAHIABBsANqELsLBEAjAEEQayIBJAAgBhAiGgJAIAYQoQEEQCAGKAIAIAFBADYCDCABQQxqENIBIAZBABC4AQwBCyABQQA2AgggBiABQQhqENIBIAZBABDKAQsgAUEQaiQAIAAtAA9BAUYEQCAGIAhBLRDIARCGBwsgCEEwEMgBIQEgCigCACECIAAoAhQiA0EEayEEA0ACQCACIARPDQAgAigCACABRw0AIAJBBGohAgwBCwsjAEEQayIIJAAgBhAiIQEgBhCOByEEAkAgAiADELkLIgdFDQAgBhBAIAYQQCAGECJBAnRqQQRqIAIQjAtFBEAgByAEIAFrSwRAIAYgBCABIARrIAdqIAEgARC4CwsgBhBAIAFBAnRqIQQDQCACIANHBEAgBCACENIBIAJBBGohAiAEQQRqIQQMAQsLIAhBADYCBCAEIAhBBGoQ0gEgBiABIAdqEJMDDAELIwBBEGsiBCQAIAhBBGoiASACIAMQ7AsgBEEQaiQAIAEQQCEHIAEQIiECIwBBEGsiBCQAAkAgAiAGEI4HIgkgBhAiIgNrTQRAIAJFDQEgBhBAIgkgA0ECdGogByACEOkCIAYgAiADaiICEJMDIARBADYCDCAJIAJBAnRqIARBDGoQ0gEMAQsgBiAJIAIgCWsgA2ogAyADQQAgAiAHEPYKCyAEQRBqJAAgARB1GgsgCEEQaiQACyAAQbwDaiAAQbgDahBbBEAgBSAFKAIAQQJyNgIACyAAKAK8AyAAQRBqEEggChB3IABBwANqJAAL2gMBA38jAEHwBGsiACQAIAAgAjYC6AQgACABNgLsBCAAQacENgIQIABByAFqIABB0AFqIABBEGoiARB4IQcgAEHAAWoiCCAEEEsgCBDAASEJIABBADoAvwECQCAAQewEaiACIAMgCCAEKAIEIAUgAEG/AWogCSAHIABBxAFqIABB4ARqELsLRQ0AIABBz90BKAAANgC3ASAAQcjdASkAADcDsAEgCSAAQbABaiAAQboBaiAAQYABahDDAiAAQSE2AhAgAEEIakEAIAEQeCEDIAEhBAJAIAAoAsQBIAcoAgBrIgFBiQNOBEAgAyABQQJ1QQJqEEIQjQEgAygCAEUNASADKAIAIQQLIAAtAL8BQQFGBEAgBEEtOgAAIARBAWohBAsgBygCACECA0AgACgCxAEgAk0EQAJAIARBADoAACAAIAY2AgAgAEEQakH7hQEgABBJQQFHDQAgAxB3DAQLBSAEIABBsAFqIABBgAFqIgEgAUEoaiACEJYHIAFrQQJ1ai0AADoAACAEQQFqIQQgAkEEaiECDAELCxCOAQALEI4BAAsgAEHsBGogAEHoBGoQWwRAIAUgBSgCAEECcjYCAAsgACgC7AQgAEHAAWoQSCAHEHcgAEHwBGokAAudBQEEfyMAQZABayIAJAAgACACNgKIASAAIAE2AowBIABBpwQ2AhQgAEEYaiAAQSBqIABBFGoiCBB4IQogAEEQaiIBIAQQSyABEMEBIQcgAEEAOgAPIABBjAFqIAIgAyABIAQoAgQgBSAAQQ9qIAcgCiAIIABBhAFqEMMLBEAjAEEQayIBJAAgBhAiGgJAIAYQoQEEQCAGKAIAIAFBADoADyABQQ9qEMkBIAZBABC4AQwBCyABQQA6AA4gBiABQQ5qEMkBIAZBABDKAQsgAUEQaiQAIAAtAA9BAUYEQCAGIAdBLRCZARCUBQsgB0EwEJkBIAooAgAhAiAAKAIUIgdBAWshA0H/AXEhAQNAAkAgAiADTw0AIAItAAAgAUcNACACQQFqIQIMAQsLIwBBEGsiAyQAIAYQIiEBIAYQVSEEAkAgAiAHEP0LIghFDQAgBhBAIAYQQCAGECJqQQFqIAIQjAtFBEAgCCAEIAFrSwRAIAYgBCABIARrIAhqIAEgARCQBwsgBhBAIAFqIQQDQCACIAdHBEAgBCACEMkBIAJBAWohAiAEQQFqIQQMAQsLIANBADoADyAEIANBD2oQyQEgBiABIAhqEJMDDAELIAMgAiAHIAYQogciBxBAIQggBxAiIQEjAEEQayIEJAACQCABIAYQVSIJIAYQIiICa00EQCABRQ0BIAYQQCIJIAJqIAggARCmAiAGIAEgAmoiARCTAyAEQQA6AA8gASAJaiAEQQ9qEMkBDAELIAYgCSABIAlrIAJqIAIgAkEAIAEgCBD5CgsgBEEQaiQAIAcQLxoLIANBEGokAAsgAEGMAWogAEGIAWoQXARAIAUgBSgCAEECcjYCAAsgACgCjAEgAEEQahBIIAoQdyAAQZABaiQAC9ADAQN/IwBBkAJrIgAkACAAIAI2AogCIAAgATYCjAIgAEGnBDYCECAAQZgBaiAAQaABaiAAQRBqIgEQeCEHIABBkAFqIgggBBBLIAgQwQEhCSAAQQA6AI8BAkAgAEGMAmogAiADIAggBCgCBCAFIABBjwFqIAkgByAAQZQBaiAAQYQCahDDC0UNACAAQc/dASgAADYAhwEgAEHI3QEpAAA3A4ABIAkgAEGAAWogAEGKAWogAEH2AGoQ5wIgAEEhNgIQIABBCGpBACABEHghAyABIQQCQCAAKAKUASAHKAIAayIBQeMATgRAIAMgAUECahBCEI0BIAMoAgBFDQEgAygCACEECyAALQCPAUEBRgRAIARBLToAACAEQQFqIQQLIAcoAgAhAgNAIAAoApQBIAJNBEACQCAEQQA6AAAgACAGNgIAIABBEGpB+4UBIAAQSUEBRw0AIAMQdwwECwUgBCAAQfYAaiIBIAFBCmogAhCZByAAayAAai0ACjoAACAEQQFqIQQgAkEBaiECDAELCxCOAQALEI4BAAsgAEGMAmogAEGIAmoQXARAIAUgBSgCAEECcjYCAAsgACgCjAIgAEGQAWoQSCAHEHcgAEGQAmokAAuWAwEEfyMAQaADayIIJAAgCCAIQaADaiIDNgIMIwBBkAFrIgckACAHIAdBhAFqNgIcIABBCGogB0EgaiICIAdBHGogBCAFIAYQyQsgB0IANwMQIAcgAjYCDCAIQRBqIgIgCCgCDBDHCyEFIAAoAgghACMAQRBrIgQkACAEIAA2AgwgBEEIaiAEQQxqEIgCIAIgB0EMaiAFIAdBEGoQ7gshABCHAiAEQRBqJAAgAEF/RgRAEI4BAAsgCCACIABBAnRqNgIMIAdBkAFqJAAgCCgCDCEEIwBBEGsiBiQAIAZBCGojAEEgayIAJAAgAEEYaiACIAQQqQUgAEEMaiAAQRBqIAAoAhghBSAAKAIcIQojAEEQayIEJAAgBCAFNgIIIAQgATYCDANAIAUgCkcEQCAEQQxqIAUoAgAQjgwgBCAFQQRqIgU2AggMAQsLIARBCGogBEEMahD0ASAEQRBqJAAgACACIAAoAhAQqAU2AgwgACAAKAIUNgIIIABBCGoQ9AEgAEEgaiQAIAYoAgwgBkEQaiQAIAMkAAuCAgEEfyMAQYABayICJAAgAiACQfQAajYCDCAAQQhqIAJBEGoiAyACQQxqIAQgBSAGEMkLIAIoAgwhBCMAQRBrIgYkACAGQQhqIwBBIGsiACQAIABBGGogAyAEEKkFIABBDGogAEEQaiAAKAIYIQUgACgCHCEKIwBBEGsiBCQAIAQgBTYCCCAEIAE2AgwDQCAFIApHBEAgBEEMaiAFLAAAEJIMIAQgBUEBaiIFNgIIDAELCyAEQQhqIARBDGoQ9AEgBEEQaiQAIAAgAyAAKAIQEKgFNgIMIAAgACgCFDYCCCAAQQhqEPQBIABBIGokACAGKAIMIAZBEGokACACQYABaiQAC+8MAQF/IwBBMGsiByQAIAcgATYCLCAEQQA2AgAgByADEEsgBxDAASEIIAcQSAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAGQcEAaw45AAEXBBcFFwYHFxcXChcXFxcODxAXFxcTFRcXFxcXFxcAAQIDAxcXARcIFxcJCxcMFw0XCxcXERIUFgsgACAFQRhqIAdBLGogAiAEIAgQzAsMGAsgACAFQRBqIAdBLGogAiAEIAgQywsMFwsgAEEIaiAAKAIIKAIMEQIAIQEgByAAIAcoAiwgAiADIAQgBSABEEAgARBAIAEQIkECdGoQwQI2AiwMFgsgB0EsaiACIAQgCEECEKACIQACQCAEKAIAIgFBBHEgAEEBa0EeS3JFBEAgBSAANgIMDAELIAQgAUEEcjYCAAsMFQsgB0H4tgcpAwA3AxggB0HwtgcpAwA3AxAgB0HotgcpAwA3AwggB0HgtgcpAwA3AwAgByAAIAEgAiADIAQgBSAHIAdBIGoQwQI2AiwMFAsgB0GYtwcpAwA3AxggB0GQtwcpAwA3AxAgB0GItwcpAwA3AwggB0GAtwcpAwA3AwAgByAAIAEgAiADIAQgBSAHIAdBIGoQwQI2AiwMEwsgB0EsaiACIAQgCEECEKACIQACQCAEKAIAIgFBBHEgAEEXSnJFBEAgBSAANgIIDAELIAQgAUEEcjYCAAsMEgsgB0EsaiACIAQgCEECEKACIQACQCAEKAIAIgFBBHEgAEEBa0ELS3JFBEAgBSAANgIIDAELIAQgAUEEcjYCAAsMEQsgB0EsaiACIAQgCEEDEKACIQACQCAEKAIAIgFBBHEgAEHtAkpyRQRAIAUgADYCHAwBCyAEIAFBBHI2AgALDBALIAdBLGogAiAEIAhBAhCgAiEAAkAgBCgCACIBQQRxIABBAWsiAEELS3JFBEAgBSAANgIQDAELIAQgAUEEcjYCAAsMDwsgB0EsaiACIAQgCEECEKACIQACQCAEKAIAIgFBBHEgAEE7SnJFBEAgBSAANgIEDAELIAQgAUEEcjYCAAsMDgsgB0EsaiEAIwBBEGsiASQAIAEgAjYCDANAAkAgACABQQxqEFsNACAIQQEgABB9EPUBRQ0AIAAQkQEaDAELCyAAIAFBDGoQWwRAIAQgBCgCAEECcjYCAAsgAUEQaiQADA0LIAdBLGohAQJAIABBCGogACgCCCgCCBECACIAECJBACAAQQxqECJrRgRAIAQgBCgCAEEEcjYCAAwBCyABIAIgACAAQRhqIAggBEEAEKEFIgIgAEcgBSgCCCIBQQxHckUEQCAFQQA2AggMAQsgAiAAa0EMRyABQQtKckUEQCAFIAFBDGo2AggLCwwMCyAHQaC3B0EsECAiBiAAIAEgAiADIAQgBSAGIAZBLGoQwQI2AiwMCwsgB0HgtwcoAgA2AhAgB0HYtwcpAwA3AwggB0HQtwcpAwA3AwAgByAAIAEgAiADIAQgBSAHIAdBFGoQwQI2AiwMCgsgB0EsaiACIAQgCEECEKACIQACQCAEKAIAIgFBBHEgAEE8SnJFBEAgBSAANgIADAELIAQgAUEEcjYCAAsMCQsgB0GIuAcpAwA3AxggB0GAuAcpAwA3AxAgB0H4twcpAwA3AwggB0HwtwcpAwA3AwAgByAAIAEgAiADIAQgBSAHIAdBIGoQwQI2AiwMCAsgB0EsaiACIAQgCEEBEKACIQACQCAEKAIAIgFBBHEgAEEGSnJFBEAgBSAANgIYDAELIAQgAUEEcjYCAAsMBwsgACABIAIgAyAEIAUgACgCACgCFBEKAAwHCyAAQQhqIAAoAggoAhgRAgAhASAHIAAgBygCLCACIAMgBCAFIAEQQCABEEAgARAiQQJ0ahDBAjYCLAwFCyAFQRRqIAdBLGogAiAEIAgQygsMBAsgB0EsaiACIAQgCEEEEKACIQAgBC0AAEEEcUUEQCAFIABB7A5rNgIUCwwDCyAGQSVGDQELIAQgBCgCAEEEcjYCAAwBCyMAQRBrIgAkACAAIAI2AgwCQCAEAn9BBiAHQSxqIgEgAEEMaiICEFsNABpBBCAIIAEQfRDLA0ElRw0AGiABEJEBIAIQW0UNAUECCyAEKAIAcjYCAAsgAEEQaiQACyAHKAIsCyAHQTBqJAALZAECfyAAEBoiAQRAIAEoAhAoAoABEBcDQCABBEAgACABECkhAgNAIAIEQCACEMoCIAAgAhAsIQIMAQsLIAEQ/AIgACABEBshAQwBCwsgACgCECgCmAEQFyAAKAIQKAK4ARAXCwtJAQJ/IwBBEGsiBiQAIAYgATYCDCAGQQhqIgcgAxBLIAcQwAEhASAHEEggBUEUaiAGQQxqIAIgBCABEMoLIAYoAgwgBkEQaiQAC0sBAn8jAEEQayIGJAAgBiABNgIMIAZBCGoiByADEEsgBxDAASEBIAcQSCAAIAVBEGogBkEMaiACIAQgARDLCyAGKAIMIAZBEGokAAtLAQJ/IwBBEGsiBiQAIAYgATYCDCAGQQhqIgcgAxBLIAcQwAEhASAHEEggACAFQRhqIAZBDGogAiAEIAEQzAsgBigCDCAGQRBqJAALMQAgACABIAIgAyAEIAUgAEEIaiAAKAIIKAIUEQIAIgAQQCAAEEAgABAiQQJ0ahDBAgtZAQF/IwBBIGsiBiQAIAZBiLgHKQMANwMYIAZBgLgHKQMANwMQIAZB+LcHKQMANwMIIAZB8LcHKQMANwMAIAAgASACIAMgBCAFIAYgBkEgaiIBEMECIAEkAAuLDAEBfyMAQRBrIgckACAHIAE2AgwgBEEANgIAIAcgAxBLIAcQwQEhCCAHEEgCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBkHBAGsOOQABFwQXBRcGBxcXFwoXFxcXDg8QFxcXExUXFxcXFxcXAAECAwMXFwEXCBcXCQsXDBcNFwsXFxESFBYLIAAgBUEYaiAHQQxqIAIgBCAIENALDBgLIAAgBUEQaiAHQQxqIAIgBCAIEM8LDBcLIABBCGogACgCCCgCDBECACEBIAcgACAHKAIMIAIgAyAEIAUgARBAIAEQQCABECJqEMICNgIMDBYLIAdBDGogAiAEIAhBAhChAiEAAkAgBCgCACIBQQRxIABBAWtBHktyRQRAIAUgADYCDAwBCyAEIAFBBHI2AgALDBULIAdCpdq9qcLsy5L5ADcDACAHIAAgASACIAMgBCAFIAcgB0EIahDCAjYCDAwUCyAHQqWytanSrcuS5AA3AwAgByAAIAEgAiADIAQgBSAHIAdBCGoQwgI2AgwMEwsgB0EMaiACIAQgCEECEKECIQACQCAEKAIAIgFBBHEgAEEXSnJFBEAgBSAANgIIDAELIAQgAUEEcjYCAAsMEgsgB0EMaiACIAQgCEECEKECIQACQCAEKAIAIgFBBHEgAEEBa0ELS3JFBEAgBSAANgIIDAELIAQgAUEEcjYCAAsMEQsgB0EMaiACIAQgCEEDEKECIQACQCAEKAIAIgFBBHEgAEHtAkpyRQRAIAUgADYCHAwBCyAEIAFBBHI2AgALDBALIAdBDGogAiAEIAhBAhChAiEAAkAgBCgCACIBQQRxIABBAWsiAEELS3JFBEAgBSAANgIQDAELIAQgAUEEcjYCAAsMDwsgB0EMaiACIAQgCEECEKECIQACQCAEKAIAIgFBBHEgAEE7SnJFBEAgBSAANgIEDAELIAQgAUEEcjYCAAsMDgsgB0EMaiEAIwBBEGsiASQAIAEgAjYCDANAAkAgACABQQxqEFwNACAIQQEgABB+EPYBRQ0AIAAQkgEaDAELCyAAIAFBDGoQXARAIAQgBCgCAEECcjYCAAsgAUEQaiQADA0LIAdBDGohAQJAIABBCGogACgCCCgCCBECACIAECJBACAAQQxqECJrRgRAIAQgBCgCAEEEcjYCAAwBCyABIAIgACAAQRhqIAggBEEAEKMFIgIgAEcgBSgCCCIBQQxHckUEQCAFQQA2AggMAQsgAiAAa0EMRyABQQtKckUEQCAFIAFBDGo2AggLCwwMCyAHQci2BygAADYAByAHQcG2BykAADcDACAHIAAgASACIAMgBCAFIAcgB0ELahDCAjYCDAwLCyAHQdC2By0AADoABCAHQcy2BygAADYCACAHIAAgASACIAMgBCAFIAcgB0EFahDCAjYCDAwKCyAHQQxqIAIgBCAIQQIQoQIhAAJAIAQoAgAiAUEEcSAAQTxKckUEQCAFIAA2AgAMAQsgBCABQQRyNgIACwwJCyAHQqWQ6anSyc6S0wA3AwAgByAAIAEgAiADIAQgBSAHIAdBCGoQwgI2AgwMCAsgB0EMaiACIAQgCEEBEKECIQACQCAEKAIAIgFBBHEgAEEGSnJFBEAgBSAANgIYDAELIAQgAUEEcjYCAAsMBwsgACABIAIgAyAEIAUgACgCACgCFBEKAAwHCyAAQQhqIAAoAggoAhgRAgAhASAHIAAgBygCDCACIAMgBCAFIAEQQCABEEAgARAiahDCAjYCDAwFCyAFQRRqIAdBDGogAiAEIAgQzgsMBAsgB0EMaiACIAQgCEEEEKECIQAgBC0AAEEEcUUEQCAFIABB7A5rNgIUCwwDCyAGQSVGDQELIAQgBCgCAEEEcjYCAAwBCyMAQRBrIgAkACAAIAI2AgwCQCAEAn9BBiAHQQxqIgEgAEEMaiICEFwNABpBBCAIIAEQfhDMA0ElRw0AGiABEJIBIAIQXEUNAUECCyAEKAIAcjYCAAsgAEEQaiQACyAHKAIMCyAHQRBqJAALSQECfyMAQRBrIgYkACAGIAE2AgwgBkEIaiIHIAMQSyAHEMEBIQEgBxBIIAVBFGogBkEMaiACIAQgARDOCyAGKAIMIAZBEGokAAtLAQJ/IwBBEGsiBiQAIAYgATYCDCAGQQhqIgcgAxBLIAcQwQEhASAHEEggACAFQRBqIAZBDGogAiAEIAEQzwsgBigCDCAGQRBqJAALSwECfyMAQRBrIgYkACAGIAE2AgwgBkEIaiIHIAMQSyAHEMEBIQEgBxBIIAAgBUEYaiAGQQxqIAIgBCABENALIAYoAgwgBkEQaiQACy4AIAAgASACIAMgBCAFIABBCGogACgCCCgCFBECACIAEEAgABBAIAAQImoQwgILPAEBfyMAQRBrIgYkACAGQqWQ6anSyc6S0wA3AwggACABIAIgAyAEIAUgBkEIaiAGQRBqIgEQwgIgASQAC48BAQV/IwBB0AFrIgAkABBlIQYgACAENgIAIABBsAFqIgcgByAHQRQgBkHd3AAgABDTASIIaiIEIAIQowIhBiAAQRBqIgUgAhBLIAUQwAEgBRBIIAcgBCAFEMMCIAEgBSAIQQJ0IAVqIgEgBiAAa0ECdCAAakGwBWsgBCAGRhsgASACIAMQlQMgAEHQAWokAAuEBAEHfwJ/IwBBoANrIgYkACAGQiU3A5gDIAZBmANqIgdBAXJB0NIBIAIoAgQQngUhCCAGIAZB8AJqIgk2AuwCEGUhAAJ/IAgEQCACKAIIIQogBkFAayAFNwMAIAYgBDcDOCAGIAo2AjAgCUEeIAAgByAGQTBqENMBDAELIAYgBDcDUCAGIAU3A1ggBkHwAmpBHiAAIAZBmANqIAZB0ABqENMBCyEAIAZBITYCgAEgBkHkAmpBACAGQYABahB4IQkgBkHwAmohBwJAIABBHk4EQBBlIQACfyAIBEAgAigCCCEHIAYgBTcDECAGIAQ3AwggBiAHNgIAIAZB7AJqIAAgBkGYA2ogBhCiAgwBCyAGIAQ3AyAgBiAFNwMoIAZB7AJqIAAgBkGYA2ogBkEgahCiAgsiAEF/Rg0BIAkgBigC7AIQjQEgBigC7AIhBwsgByAAIAdqIgsgAhCjAiEMIAZBITYCgAEgBkH4AGpBACAGQYABaiIHEHghCAJAIAYoAuwCIgogBkHwAmpGBEAgByEADAELIABBA3QQQiIARQ0BIAggABCNASAGKALsAiEKCyAGQewAaiIHIAIQSyAKIAwgCyAAIAZB9ABqIAZB8ABqIAcQ0wsgBxBIIAEgACAGKAJ0IAYoAnAgAiADEJUDIAgQdyAJEHcgBkGgA2okAAwBCxCOAQALC+ADAQd/An8jAEHwAmsiBSQAIAVCJTcD6AIgBUHoAmoiBkEBckHl9AQgAigCBBCeBSEHIAUgBUHAAmoiCDYCvAIQZSEAAn8gBwRAIAIoAgghCSAFIAQ5AyggBSAJNgIgIAhBHiAAIAYgBUEgahDTAQwBCyAFIAQ5AzAgBUHAAmpBHiAAIAVB6AJqIAVBMGoQ0wELIQAgBUEhNgJQIAVBtAJqQQAgBUHQAGoQeCEIIAVBwAJqIQYCQCAAQR5OBEAQZSEAAn8gBwRAIAIoAgghBiAFIAQ5AwggBSAGNgIAIAVBvAJqIAAgBUHoAmogBRCiAgwBCyAFIAQ5AxAgBUG8AmogACAFQegCaiAFQRBqEKICCyIAQX9GDQEgCCAFKAK8AhCNASAFKAK8AiEGCyAGIAAgBmoiCiACEKMCIQsgBUEhNgJQIAVByABqQQAgBUHQAGoiBhB4IQcCQCAFKAK8AiIJIAVBwAJqRgRAIAYhAAwBCyAAQQN0EEIiAEUNASAHIAAQjQEgBSgCvAIhCQsgBUE8aiIGIAIQSyAJIAsgCiAAIAVBxABqIAVBQGsgBhDTCyAGEEggASAAIAUoAkQgBSgCQCACIAMQlQMgBxB3IAgQdyAFQfACaiQADAELEI4BAAsLEQAgACABIAIgAyAEQQAQ2woL4gICBH8BfEGQjAsgAEEBQYKWAUGqERAfNgIAIABBAhCNAiAAKAIQQQI7AbABQbyLC0ECOwEAIABBABCSByAAEDUQtwEhBCAAEDVBAWoQtwEhASAAKAIQIAE2ApgBIAAQGiEBA0AgAQRAIAFBhiZBwAJBARAuGiABKAIQIAQgA0ECdCICajYCgAEgACgCECgCmAEgAmogATYCACABQYKWAUGqERDlASAAIAEQKSECA0AgAgRAIAJB+SVBwAJBARAuGiAAIAIQLCECDAELCyADQQFqIQMgACABEBshAQwBCwsCQCAAEDVFBEAgACgCECgCtAFFDQELIABBAUG4wQFBABAfIQEgACAAQQBBuMEBQQAQHyABIABBAEGGIEEAEB8Q6QsiAUIANwMQIAFCADcDGCABIAErAwBEmpmZmZmZuT+gnyIFOQMoIAEgBTkDICABEOMLIAEQ3gsgARDcCyAAEK0DCwsRACAAIAEgAiADIARBABDaCgsRACAAIAEgAiADIARBARDbCgsRACAAIAEgAiADIARBARDaCgvNAQEBfyMAQSBrIgUkACAFIAE2AhwCQCACKAIEQQFxRQRAIAAgASACIAMgBCAAKAIAKAIYEQcAIQIMAQsgBUEQaiIAIAIQSyAAEM4DIQEgABBIAkAgBARAIAAgARDxAQwBCyAFQRBqIAEQ8AELIAUgBUEQahDUATYCDANAIAUgBUEQaiIAEOQCNgIIIAVBDGoiASAFQQhqEOUCBEAgBUEcaiABIgAoAgAoAgAQjgwgABCTBwwBBSAFKAIcIQIgABB1GgsLCyAFQSBqJAAgAgsmAQJ8QQFBf0EAIAAoAgArAwAiAiABKAIAKwMAIgNkGyACIANjGwuHAQEFfyMAQeAAayIAJAAQZSEGIAAgBDYCACAAQUBrIgcgByAHQRQgBkHd3AAgABDTASIIaiIEIAIQowIhBiAAQRBqIgUgAhBLIAUQwQEgBRBIIAcgBCAFEOcCIAEgBSAFIAhqIgEgBiAAayAAakEwayAEIAZGGyABIAIgAxCWAyAAQeAAaiQAC4QEAQd/An8jAEGAAmsiBiQAIAZCJTcD+AEgBkH4AWoiB0EBckHQ0gEgAigCBBCeBSEIIAYgBkHQAWoiCTYCzAEQZSEAAn8gCARAIAIoAgghCiAGQUBrIAU3AwAgBiAENwM4IAYgCjYCMCAJQR4gACAHIAZBMGoQ0wEMAQsgBiAENwNQIAYgBTcDWCAGQdABakEeIAAgBkH4AWogBkHQAGoQ0wELIQAgBkEhNgKAASAGQcQBakEAIAZBgAFqEHghCSAGQdABaiEHAkAgAEEeTgRAEGUhAAJ/IAgEQCACKAIIIQcgBiAFNwMQIAYgBDcDCCAGIAc2AgAgBkHMAWogACAGQfgBaiAGEKICDAELIAYgBDcDICAGIAU3AyggBkHMAWogACAGQfgBaiAGQSBqEKICCyIAQX9GDQEgCSAGKALMARCNASAGKALMASEHCyAHIAAgB2oiCyACEKMCIQwgBkEhNgKAASAGQfgAakEAIAZBgAFqIgcQeCEIAkAgBigCzAEiCiAGQdABakYEQCAHIQAMAQsgAEEBdBBCIgBFDQEgCCAAEI0BIAYoAswBIQoLIAZB7ABqIgcgAhBLIAogDCALIAAgBkH0AGogBkHwAGogBxDXCyAHEEggASAAIAYoAnQgBigCcCACIAMQlgMgCBB3IAkQdyAGQYACaiQADAELEI4BAAsL4AMBB38CfyMAQdABayIFJAAgBUIlNwPIASAFQcgBaiIGQQFyQeX0BCACKAIEEJ4FIQcgBSAFQaABaiIINgKcARBlIQACfyAHBEAgAigCCCEJIAUgBDkDKCAFIAk2AiAgCEEeIAAgBiAFQSBqENMBDAELIAUgBDkDMCAFQaABakEeIAAgBUHIAWogBUEwahDTAQshACAFQSE2AlAgBUGUAWpBACAFQdAAahB4IQggBUGgAWohBgJAIABBHk4EQBBlIQACfyAHBEAgAigCCCEGIAUgBDkDCCAFIAY2AgAgBUGcAWogACAFQcgBaiAFEKICDAELIAUgBDkDECAFQZwBaiAAIAVByAFqIAVBEGoQogILIgBBf0YNASAIIAUoApwBEI0BIAUoApwBIQYLIAYgACAGaiIKIAIQowIhCyAFQSE2AlAgBUHIAGpBACAFQdAAaiIGEHghBwJAIAUoApwBIgkgBUGgAWpGBEAgBiEADAELIABBAXQQQiIARQ0BIAcgABCNASAFKAKcASEJCyAFQTxqIgYgAhBLIAkgCyAKIAAgBUHEAGogBUFAayAGENcLIAYQSCABIAAgBSgCRCAFKAJAIAIgAxCWAyAHEHcgCBB3IAVB0AFqJAAMAQsQjgEACwsRACAAIAEgAiADIARBABDdCgsRACAAIAEgAiADIARBABDcCgsRACAAIAEgAiADIARBARDdCgsRACAAIAEgAiADIARBARDcCgvNAQEBfyMAQSBrIgUkACAFIAE2AhwCQCACKAIEQQFxRQRAIAAgASACIAMgBCAAKAIAKAIYEQcAIQIMAQsgBUEQaiIAIAIQSyAAENADIQEgABBIAkAgBARAIAAgARDxAQwBCyAFQRBqIAEQ8AELIAUgBUEQahDUATYCDANAIAUgBUEQaiIAEOYCNgIIIAVBDGoiASAFQQhqEOUCBEAgBUEcaiABIgAoAgAsAAAQkgwgABCVBwwBBSAFKAIcIQIgABAvGgsLCyAFQSBqJAAgAgvmAgEBfyMAQcACayIAJAAgACACNgK4AiAAIAE2ArwCIABBxAFqEEwhBiAAQRBqIgIgAxBLIAIQwAFBoLYHQbq2ByAAQdABahDDAiACEEggAEG4AWoQTCIDIAMQVRA5IAAgA0EAEDwiATYCtAEgACACNgIMIABBADYCCANAAkAgAEG8AmogAEG4AmoQWw0AIAAoArQBIAMQIiABakYEQCADECIhAiADIAMQIkEBdBA5IAMgAxBVEDkgACACIANBABA8IgFqNgK0AQsgAEG8AmoiAhB9QRAgASAAQbQBaiAAQQhqQQAgBiAAQRBqIABBDGogAEHQAWoQzQMNACACEJEBGgwBCwsgAyAAKAK0ASABaxA5IAMQQBBlIAAgBTYCACAAEN0LQQFHBEAgBEEENgIACyAAQbwCaiAAQbgCahBbBEAgBCAEKAIAQQJyNgIACyAAKAK8AiADEC8aIAYQLxogAEHAAmokAAvPAwEBfiMAQYADayIAJAAgACACNgL4AiAAIAE2AvwCIABB3AFqIAMgAEHwAWogAEHsAWogAEHoAWoQmAcgAEHQAWoQTCIBIAEQVRA5IAAgAUEAEDwiAjYCzAEgACAAQSBqNgIcIABBADYCGCAAQQE6ABcgAEHFADoAFgNAAkAgAEH8AmogAEH4AmoQWw0AIAAoAswBIAEQIiACakYEQCABECIhAyABIAEQIkEBdBA5IAEgARBVEDkgACADIAFBABA8IgJqNgLMAQsgAEH8AmoiAxB9IABBF2ogAEEWaiACIABBzAFqIAAoAuwBIAAoAugBIABB3AFqIABBIGogAEEcaiAAQRhqIABB8AFqEJcHDQAgAxCRARoMAQsLAkAgAEHcAWoQIkUNACAALQAXQQFHDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALMASAEEN8LIAApAwAhBiAFIAApAwg3AwggBSAGNwMAIABB3AFqIABBIGogACgCHCAEEK8BIABB/AJqIABB+AJqEFsEQCAEIAQoAgBBAnI2AgALIAAoAvwCIAEQLxogAEHcAWoQLxogAEGAA2okAAu4AwAjAEHwAmsiACQAIAAgAjYC6AIgACABNgLsAiAAQcwBaiADIABB4AFqIABB3AFqIABB2AFqEJgHIABBwAFqEEwiASABEFUQOSAAIAFBABA8IgI2ArwBIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABB7AJqIABB6AJqEFsNACAAKAK8ASABECIgAmpGBEAgARAiIQMgASABECJBAXQQOSABIAEQVRA5IAAgAyABQQAQPCICajYCvAELIABB7AJqIgMQfSAAQQdqIABBBmogAiAAQbwBaiAAKALcASAAKALYASAAQcwBaiAAQRBqIABBDGogAEEIaiAAQeABahCXBw0AIAMQkQEaDAELCwJAIABBzAFqECJFDQAgAC0AB0EBRw0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCvAEgBBDgCzkDACAAQcwBaiAAQRBqIAAoAgwgBBCvASAAQewCaiAAQegCahBbBEAgBCAEKAIAQQJyNgIACyAAKALsAiABEC8aIABBzAFqEC8aIABB8AJqJAALuAMAIwBB8AJrIgAkACAAIAI2AugCIAAgATYC7AIgAEHMAWogAyAAQeABaiAAQdwBaiAAQdgBahCYByAAQcABahBMIgEgARBVEDkgACABQQAQPCICNgK8ASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGA0ACQCAAQewCaiAAQegCahBbDQAgACgCvAEgARAiIAJqRgRAIAEQIiEDIAEgARAiQQF0EDkgASABEFUQOSAAIAMgAUEAEDwiAmo2ArwBCyAAQewCaiIDEH0gAEEHaiAAQQZqIAIgAEG8AWogACgC3AEgACgC2AEgAEHMAWogAEEQaiAAQQxqIABBCGogAEHgAWoQlwcNACADEJEBGgwBCwsCQCAAQcwBahAiRQ0AIAAtAAdBAUcNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArwBIAQQ4Qs4AgAgAEHMAWogAEEQaiAAKAIMIAQQrwEgAEHsAmogAEHoAmoQWwRAIAQgBCgCAEECcjYCAAsgACgC7AIgARAvGiAAQcwBahAvGiAAQfACaiQAC5kDAQJ/IwBB0AJrIgAkACAAIAI2AsgCIAAgATYCzAIgAxCkAiEGIAMgAEHQAWoQmAQhByAAQcQBaiADIABBxAJqEJcEIABBuAFqEEwiASABEFUQOSAAIAFBABA8IgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqEFsNACAAKAK0ASABECIgAmpGBEAgARAiIQMgASABECJBAXQQOSABIAEQVRA5IAAgAyABQQAQPCICajYCtAELIABBzAJqIgMQfSAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxDNAw0AIAMQkQEaDAELCwJAIABBxAFqECJFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK0ASAEIAYQ4gs3AwAgAEHEAWogAEEQaiAAKAIMIAQQrwEgAEHMAmogAEHIAmoQWwRAIAQgBCgCAEECcjYCAAsgACgCzAIgARAvGiAAQcQBahAvGiAAQdACaiQAC5kDAQJ/IwBB0AJrIgAkACAAIAI2AsgCIAAgATYCzAIgAxCkAiEGIAMgAEHQAWoQmAQhByAAQcQBaiADIABBxAJqEJcEIABBuAFqEEwiASABEFUQOSAAIAFBABA8IgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqEFsNACAAKAK0ASABECIgAmpGBEAgARAiIQMgASABECJBAXQQOSABIAEQVRA5IAAgAyABQQAQPCICajYCtAELIABBzAJqIgMQfSAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxDNAw0AIAMQkQEaDAELCwJAIABBxAFqECJFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK0ASAEIAYQ5gs7AQAgAEHEAWogAEEQaiAAKAIMIAQQrwEgAEHMAmogAEHIAmoQWwRAIAQgBCgCAEECcjYCAAsgACgCzAIgARAvGiAAQcQBahAvGiAAQdACaiQAC5kDAQJ/IwBB0AJrIgAkACAAIAI2AsgCIAAgATYCzAIgAxCkAiEGIAMgAEHQAWoQmAQhByAAQcQBaiADIABBxAJqEJcEIABBuAFqEEwiASABEFUQOSAAIAFBABA8IgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqEFsNACAAKAK0ASABECIgAmpGBEAgARAiIQMgASABECJBAXQQOSABIAEQVRA5IAAgAyABQQAQPCICajYCtAELIABBzAJqIgMQfSAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxDNAw0AIAMQkQEaDAELCwJAIABBxAFqECJFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK0ASAEIAYQ5ws3AwAgAEHEAWogAEEQaiAAKAIMIAQQrwEgAEHMAmogAEHIAmoQWwRAIAQgBCgCAEECcjYCAAsgACgCzAIgARAvGiAAQcQBahAvGiAAQdACaiQAC5kDAQJ/IwBB0AJrIgAkACAAIAI2AsgCIAAgATYCzAIgAxCkAiEGIAMgAEHQAWoQmAQhByAAQcQBaiADIABBxAJqEJcEIABBuAFqEEwiASABEFUQOSAAIAFBABA8IgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqEFsNACAAKAK0ASABECIgAmpGBEAgARAiIQMgASABECJBAXQQOSABIAEQVRA5IAAgAyABQQAQPCICajYCtAELIABBzAJqIgMQfSAGIAIgAEG0AWogAEEIaiAAKALEAiAAQcQBaiAAQRBqIABBDGogBxDNAw0AIAMQkQEaDAELCwJAIABBxAFqECJFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK0ASAEIAYQ6As2AgAgAEHEAWogAEEQaiAAKAIMIAQQrwEgAEHMAmogAEHIAmoQWwRAIAQgBCgCAEECcjYCAAsgACgCzAIgARAvGiAAQcQBahAvGiAAQdACaiQAC+0BAQF/IwBBIGsiBiQAIAYgATYCHAJAIAMoAgRBAXFFBEAgBkF/NgIAIAAgASACIAMgBCAGIAAoAgAoAhARCgAhAQJAAkACQCAGKAIADgIAAQILIAVBADoAAAwDCyAFQQE6AAAMAgsgBUEBOgAAIARBBDYCAAwBCyAGIAMQSyAGEMABIQEgBhBIIAYgAxBLIAYQzgMhACAGEEggBiAAEPEBIAZBDHIgABDwASAFIAZBHGogAiAGIAZBGGoiAyABIARBARChBSAGRjoAACAGKAIcIQEDQCADQQxrEHUiAyAGRw0ACwsgBkEgaiQAIAEL5gIBAX8jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcQBahBMIQYgAEEQaiICIAMQSyACEMEBQaC2B0G6tgcgAEHQAWoQ5wIgAhBIIABBuAFqEEwiAyADEFUQOSAAIANBABA8IgE2ArQBIAAgAjYCDCAAQQA2AggDQAJAIABB/AFqIABB+AFqEFwNACAAKAK0ASADECIgAWpGBEAgAxAiIQIgAyADECJBAXQQOSADIAMQVRA5IAAgAiADQQAQPCIBajYCtAELIABB/AFqIgIQfkEQIAEgAEG0AWogAEEIakEAIAYgAEEQaiAAQQxqIABB0AFqEM8DDQAgAhCSARoMAQsLIAMgACgCtAEgAWsQOSADEEAQZSAAIAU2AgAgABDdC0EBRwRAIARBBDYCAAsgAEH8AWogAEH4AWoQXARAIAQgBCgCAEECcjYCAAsgACgC/AEgAxAvGiAGEC8aIABBgAJqJAALzwMBAX4jAEGQAmsiACQAIAAgAjYCiAIgACABNgKMAiAAQdABaiADIABB4AFqIABB3wFqIABB3gFqEJsHIABBxAFqEEwiASABEFUQOSAAIAFBABA8IgI2AsABIAAgAEEgajYCHCAAQQA2AhggAEEBOgAXIABBxQA6ABYDQAJAIABBjAJqIABBiAJqEFwNACAAKALAASABECIgAmpGBEAgARAiIQMgASABECJBAXQQOSABIAEQVRA5IAAgAyABQQAQPCICajYCwAELIABBjAJqIgMQfiAAQRdqIABBFmogAiAAQcABaiAALADfASAALADeASAAQdABaiAAQSBqIABBHGogAEEYaiAAQeABahCaBw0AIAMQkgEaDAELCwJAIABB0AFqECJFDQAgAC0AF0EBRw0AIAAoAhwiAyAAQSBqa0GfAUoNACAAIANBBGo2AhwgAyAAKAIYNgIACyAAIAIgACgCwAEgBBDfCyAAKQMAIQYgBSAAKQMINwMIIAUgBjcDACAAQdABaiAAQSBqIAAoAhwgBBCvASAAQYwCaiAAQYgCahBcBEAgBCAEKAIAQQJyNgIACyAAKAKMAiABEC8aIABB0AFqEC8aIABBkAJqJAALuAMAIwBBgAJrIgAkACAAIAI2AvgBIAAgATYC/AEgAEHAAWogAyAAQdABaiAAQc8BaiAAQc4BahCbByAAQbQBahBMIgEgARBVEDkgACABQQAQPCICNgKwASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGA0ACQCAAQfwBaiAAQfgBahBcDQAgACgCsAEgARAiIAJqRgRAIAEQIiEDIAEgARAiQQF0EDkgASABEFUQOSAAIAMgAUEAEDwiAmo2ArABCyAAQfwBaiIDEH4gAEEHaiAAQQZqIAIgAEGwAWogACwAzwEgACwAzgEgAEHAAWogAEEQaiAAQQxqIABBCGogAEHQAWoQmgcNACADEJIBGgwBCwsCQCAAQcABahAiRQ0AIAAtAAdBAUcNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArABIAQQ4As5AwAgAEHAAWogAEEQaiAAKAIMIAQQrwEgAEH8AWogAEH4AWoQXARAIAQgBCgCAEECcjYCAAsgACgC/AEgARAvGiAAQcABahAvGiAAQYACaiQAC7gDACMAQYACayIAJAAgACACNgL4ASAAIAE2AvwBIABBwAFqIAMgAEHQAWogAEHPAWogAEHOAWoQmwcgAEG0AWoQTCIBIAEQVRA5IAAgAUEAEDwiAjYCsAEgACAAQRBqNgIMIABBADYCCCAAQQE6AAcgAEHFADoABgNAAkAgAEH8AWogAEH4AWoQXA0AIAAoArABIAEQIiACakYEQCABECIhAyABIAEQIkEBdBA5IAEgARBVEDkgACADIAFBABA8IgJqNgKwAQsgAEH8AWoiAxB+IABBB2ogAEEGaiACIABBsAFqIAAsAM8BIAAsAM4BIABBwAFqIABBEGogAEEMaiAAQQhqIABB0AFqEJoHDQAgAxCSARoMAQsLAkAgAEHAAWoQIkUNACAALQAHQQFHDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAKwASAEEOELOAIAIABBwAFqIABBEGogACgCDCAEEK8BIABB/AFqIABB+AFqEFwEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAEQLxogAEHAAWoQLxogAEGAAmokAAuOAwEBfyMAQYACayIAJAAgACACNgL4ASAAIAE2AvwBIAMQpAIhBiAAQcQBaiADIABB9wFqEJkEIABBuAFqEEwiASABEFUQOSAAIAFBABA8IgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABB/AFqIABB+AFqEFwNACAAKAK0ASABECIgAmpGBEAgARAiIQMgASABECJBAXQQOSABIAEQVRA5IAAgAyABQQAQPCICajYCtAELIABB/AFqIgMQfiAGIAIgAEG0AWogAEEIaiAALAD3ASAAQcQBaiAAQRBqIABBDGpBoLYHEM8DDQAgAxCSARoMAQsLAkAgAEHEAWoQIkUNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhDiCzcDACAAQcQBaiAAQRBqIAAoAgwgBBCvASAAQfwBaiAAQfgBahBcBEAgBCAEKAIAQQJyNgIACyAAKAL8ASABEC8aIABBxAFqEC8aIABBgAJqJAALjgMBAX8jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASADEKQCIQYgAEHEAWogAyAAQfcBahCZBCAAQbgBahBMIgEgARBVEDkgACABQQAQPCICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQfwBaiAAQfgBahBcDQAgACgCtAEgARAiIAJqRgRAIAEQIiEDIAEgARAiQQF0EDkgASABEFUQOSAAIAMgAUEAEDwiAmo2ArQBCyAAQfwBaiIDEH4gBiACIABBtAFqIABBCGogACwA9wEgAEHEAWogAEEQaiAAQQxqQaC2BxDPAw0AIAMQkgEaDAELCwJAIABBxAFqECJFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK0ASAEIAYQ5gs7AQAgAEHEAWogAEEQaiAAKAIMIAQQrwEgAEH8AWogAEH4AWoQXARAIAQgBCgCAEECcjYCAAsgACgC/AEgARAvGiAAQcQBahAvGiAAQYACaiQAC44DAQF/IwBBgAJrIgAkACAAIAI2AvgBIAAgATYC/AEgAxCkAiEGIABBxAFqIAMgAEH3AWoQmQQgAEG4AWoQTCIBIAEQVRA5IAAgAUEAEDwiAjYCtAEgACAAQRBqNgIMIABBADYCCANAAkAgAEH8AWogAEH4AWoQXA0AIAAoArQBIAEQIiACakYEQCABECIhAyABIAEQIkEBdBA5IAEgARBVEDkgACADIAFBABA8IgJqNgK0AQsgAEH8AWoiAxB+IAYgAiAAQbQBaiAAQQhqIAAsAPcBIABBxAFqIABBEGogAEEMakGgtgcQzwMNACADEJIBGgwBCwsCQCAAQcQBahAiRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCtAEgBCAGEOcLNwMAIABBxAFqIABBEGogACgCDCAEEK8BIABB/AFqIABB+AFqEFwEQCAEIAQoAgBBAnI2AgALIAAoAvwBIAEQLxogAEHEAWoQLxogAEGAAmokAAuOAwEBfyMAQYACayIAJAAgACACNgL4ASAAIAE2AvwBIAMQpAIhBiAAQcQBaiADIABB9wFqEJkEIABBuAFqEEwiASABEFUQOSAAIAFBABA8IgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABB/AFqIABB+AFqEFwNACAAKAK0ASABECIgAmpGBEAgARAiIQMgASABECJBAXQQOSABIAEQVRA5IAAgAyABQQAQPCICajYCtAELIABB/AFqIgMQfiAGIAIgAEG0AWogAEEIaiAALAD3ASAAQcQBaiAAQRBqIABBDGpBoLYHEM8DDQAgAxCSARoMAQsLAkAgAEHEAWoQIkUNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhDoCzYCACAAQcQBaiAAQRBqIAAoAgwgBBCvASAAQfwBaiAAQfgBahBcBEAgBCAEKAIAQQJyNgIACyAAKAL8ASABEC8aIABBxAFqEC8aIABBgAJqJAALGQBBjIsLQQI2AgAgABDaBkGMiwtBADYCAAvtAQEBfyMAQSBrIgYkACAGIAE2AhwCQCADKAIEQQFxRQRAIAZBfzYCACAAIAEgAiADIAQgBiAAKAIAKAIQEQoAIQECQAJAAkAgBigCAA4CAAECCyAFQQA6AAAMAwsgBUEBOgAADAILIAVBAToAACAEQQQ2AgAMAQsgBiADEEsgBhDBASEBIAYQSCAGIAMQSyAGENADIQAgBhBIIAYgABDxASAGQQxyIAAQ8AEgBSAGQRxqIAIgBiAGQRhqIgMgASAEQQEQowUgBkY6AAAgBigCHCEBA0AgA0EMaxAvIgMgBkcNAAsLIAZBIGokACABC0ABAX9BACEAA38gASACRgR/IAAFIAEoAgAgAEEEdGoiAEGAgICAf3EiA0EYdiADciAAcyEAIAFBBGohAQwBCwsLGwAjAEEQayIBJAAgACACIAMQ7AsgAUEQaiQACxkAQYyLC0EBNgIAIAAQ2gZBjIsLQQA2AgALVAECfwJAA0AgAyAERwRAQX8hACABIAJGDQIgASgCACIFIAMoAgAiBkgNAiAFIAZKBEBBAQ8FIANBBGohAyABQQRqIQEMAgsACwsgASACRyEACyAAC0ABAX9BACEAA38gASACRgR/IAAFIAEsAAAgAEEEdGoiAEGAgICAf3EiA0EYdiADciAAcyEAIAFBAWohAQwBCwsLGwAjAEEQayIBJAAgACACIAMQigwgAUEQaiQAC14BA38gASAEIANraiEFAkADQCADIARHBEBBfyEAIAEgAkYNAiABLAAAIgYgAywAACIHSA0CIAYgB0oEQEEBDwUgA0EBaiEDIAFBAWohAQwCCwALCyACIAVHIQALIAALCQAgABCdBxAXCxMAIAAgACgCAEEMaygCAGoQhwwLEwAgACAAKAIAQQxrKAIAahCeBwsaACAAIAEgAikDCEEAIAMgASgCACgCEBEyAAsJACAAEJ8HEBcLlAICAX8DfiABKAIYIAEoAixLBEAgASABKAIYNgIsC0J/IQgCQCAEQRhxIgVFIANBAUYgBUEYRnFyDQAgASgCLCIFBEAgBSABQSBqEEBrrCEGCwJAAkACQCADDgMCAAEDCyAEQQhxBEAgASgCDCABKAIIa6whBwwCCyABKAIYIAEoAhRrrCEHDAELIAYhBwsgAiAHfCICQgBTIAIgBlVyDQAgBEEIcSEDAkAgAlANACADBEAgASgCDEUNAgsgBEEQcUUNACABKAIYRQ0BCyADBEAgASABKAIIIAEoAgggAqdqIAEoAiwQmwQLIARBEHEEQCABIAEoAhQgASgCHBCMDCABIAKnEIsMCyACIQgLIAAgCBCnBwv/AQEJfyMAQRBrIgMkAAJ/IAFBfxDEAkUEQCAAKAIMIQQgACgCCCEFIAAoAhggACgCHEYEQEF/IAAtADBBEHFFDQIaIAAoAhghBiAAKAIUIQcgACgCLCEIIAAoAhQhCSAAQSBqIgJBABCUBSACIAIQVRA5IAAgAhBAIgogAhAiIApqEIwMIAAgBiAHaxCLDCAAIAAoAhQgCCAJa2o2AiwLIAMgACgCGEEBajYCDCAAIANBDGogAEEsahDUAygCADYCLCAALQAwQQhxBEAgACAAQSBqEEAiAiACIAQgBWtqIAAoAiwQmwQLIAAgAcAQlwwMAQsgARCJDAsgA0EQaiQAC5gBACAAKAIYIAAoAixLBEAgACAAKAIYNgIsCwJAIAAoAgggACgCDE8NACABQX8QxAIEQCAAIAAoAgggACgCDEEBayAAKAIsEJsEIAEQiQwPCyAALQAwQRBxRQRAIAHAIAAoAgxBAWssAAAQxAJFDQELIAAgACgCCCAAKAIMQQFrIAAoAiwQmwQgACgCDCABwDoAACABDwtBfwtlACAAKAIYIAAoAixLBEAgACAAKAIYNgIsCwJAIAAtADBBCHFFDQAgACgCECAAKAIsSQRAIAAgACgCCCAAKAIMIAAoAiwQmwQLIAAoAgwgACgCEE8NACAAKAIMLAAAEJoDDwtBfwsHACAAKAIMCwcAIAAoAggLEgAgAUHetQEgAigCCEEBEC4aCxMAIAAgACgCAEEMaygCAGoQlgwLEwAgACAAKAIAQQxrKAIAahClBwsSACABQe21ASACKAIEQQEQLhoLrwEBBH8jAEEQayIFJAADQAJAIAIgBEwNACAAKAIYIgMgACgCHCIGTwRAIAAgASwAABCaAyAAKAIAKAI0EQAAQX9GDQEgBEEBaiEEIAFBAWohAQUgBSAGIANrNgIMIAUgAiAEazYCCCAFQQxqIAVBCGoQpgchAyAAKAIYIAEgAygCACIDEKYCIAAgAyAAKAIYajYCGCADIARqIQQgASADaiEBCwwBCwsgBUEQaiQAIAQLLwAgACAAKAIAKAIkEQIAQX9GBEBBfw8LIAAgACgCDCIAQQFqNgIMIAAsAAAQmgMLEgAgAUHOtQEgAigCAEEBEC4aCwQAQX8LvgEBBH8jAEEQayIEJAADQAJAIAIgBUwNAAJAIAAoAgwiAyAAKAIQIgZJBEAgBEH/////BzYCDCAEIAYgA2s2AgggBCACIAVrNgIEIARBDGogBEEIaiAEQQRqEKYHEKYHIQMgASAAKAIMIAMoAgAiAxCmAiAAIAAoAgwgA2o2AgwMAQsgACAAKAIAKAIoEQIAIgNBf0YNASABIAPAOgAAQQEhAwsgASADaiEBIAMgBWohBQwBCwsgBEEQaiQAIAULCQAgAEJ/EKcHCwkAIABCfxCnBwsEACAACwwAIAAQqgcaIAAQFwsWACAAQQhNBEAgARBCDwsgACABEKAMC1QBAn8gASAAKAJUIgEgAUEAIAJBgAJqIgMQoAMiBCABayADIAQbIgMgAiACIANLGyICECAaIAAgASADaiIDNgJUIAAgAzYCCCAAIAEgAmo2AgQgAguoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECAaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECAaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCykAIAEgASgCAEEHakF4cSIBQRBqNgIAIAAgASkDACABKQMIEKsHOQMAC6IYAxJ/AXwDfiMAQbAEayIMJAAgDEEANgIsAkAgAb0iGUIAUwRAQQEhEEH/EiETIAGaIgG9IRkMAQsgBEGAEHEEQEEBIRBBghMhEwwBC0GFE0GAEyAEQQFxIhAbIRMgEEUhFQsCQCAZQoCAgICAgID4/wCDQoCAgICAgID4/wBRBEAgAEEgIAIgEEEDaiIDIARB//97cRCzASAAIBMgEBCiASAAQYzpAEG+zQEgBUEgcSIFG0GshAFBqdQBIAUbIAEgAWIbQQMQogEgAEEgIAIgAyAEQYDAAHMQswEgAyACIAIgA0gbIQoMAQsgDEEQaiERAkACfwJAIAEgDEEsahCrDCIBIAGgIgFEAAAAAAAAAABiBEAgDCAMKAIsIgZBAWs2AiwgBUEgciIOQeEARw0BDAMLIAVBIHIiDkHhAEYNAiAMKAIsIQlBBiADIANBAEgbDAELIAwgBkEdayIJNgIsIAFEAAAAAAAAsEGiIQFBBiADIANBAEgbCyELIAxBMGpBoAJBACAJQQBOG2oiDSEHA0AgBwJ/IAFEAAAAAAAA8EFjIAFEAAAAAAAAAABmcQRAIAGrDAELQQALIgM2AgAgB0EEaiEHIAEgA7ihRAAAAABlzc1BoiIBRAAAAAAAAAAAYg0ACwJAIAlBAEwEQCAJIQMgByEGIA0hCAwBCyANIQggCSEDA0BBHSADIANBHU8bIQMCQCAHQQRrIgYgCEkNACADrSEbQgAhGQNAIAYgGUL/////D4MgBjUCACAbhnwiGiAaQoCU69wDgCIZQoCU69wDfn0+AgAgBkEEayIGIAhPDQALIBpCgJTr3ANUDQAgCEEEayIIIBk+AgALA0AgCCAHIgZJBEAgBkEEayIHKAIARQ0BCwsgDCAMKAIsIANrIgM2AiwgBiEHIANBAEoNAAsLIANBAEgEQCALQRlqQQluQQFqIQ8gDkHmAEYhEgNAQQlBACADayIDIANBCU8bIQoCQCAGIAhNBEAgCCgCAEVBAnQhBwwBC0GAlOvcAyAKdiEUQX8gCnRBf3MhFkEAIQMgCCEHA0AgByADIAcoAgAiFyAKdmo2AgAgFiAXcSAUbCEDIAdBBGoiByAGSQ0ACyAIKAIARUECdCEHIANFDQAgBiADNgIAIAZBBGohBgsgDCAMKAIsIApqIgM2AiwgDSAHIAhqIgggEhsiByAPQQJ0aiAGIAYgB2tBAnUgD0obIQYgA0EASA0ACwtBACEDAkAgBiAITQ0AIA0gCGtBAnVBCWwhA0EKIQcgCCgCACIKQQpJDQADQCADQQFqIQMgCiAHQQpsIgdPDQALCyALIANBACAOQeYARxtrIA5B5wBGIAtBAEdxayIHIAYgDWtBAnVBCWxBCWtIBEAgDEEwakGEYEGkYiAJQQBIG2ogB0GAyABqIgpBCW0iD0ECdGohCUEKIQcgCiAPQQlsayIKQQdMBEADQCAHQQpsIQcgCkEBaiIKQQhHDQALCwJAIAkoAgAiEiASIAduIg8gB2xrIgpFIAlBBGoiFCAGRnENAAJAIA9BAXFFBEBEAAAAAAAAQEMhASAHQYCU69wDRyAIIAlPcg0BIAlBBGstAABBAXFFDQELRAEAAAAAAEBDIQELRAAAAAAAAOA/RAAAAAAAAPA/RAAAAAAAAPg/IAYgFEYbRAAAAAAAAPg/IAogB0EBdiIURhsgCiAUSRshGAJAIBUNACATLQAAQS1HDQAgGJohGCABmiEBCyAJIBIgCmsiCjYCACABIBigIAFhDQAgCSAHIApqIgM2AgAgA0GAlOvcA08EQANAIAlBADYCACAIIAlBBGsiCUsEQCAIQQRrIghBADYCAAsgCSAJKAIAQQFqIgM2AgAgA0H/k+vcA0sNAAsLIA0gCGtBAnVBCWwhA0EKIQcgCCgCACIKQQpJDQADQCADQQFqIQMgCiAHQQpsIgdPDQALCyAJQQRqIgcgBiAGIAdLGyEGCwNAIAYiByAITSIKRQRAIAZBBGsiBigCAEUNAQsLAkAgDkHnAEcEQCAEQQhxIQkMAQsgA0F/c0F/IAtBASALGyIGIANKIANBe0pxIgkbIAZqIQtBf0F+IAkbIAVqIQUgBEEIcSIJDQBBdyEGAkAgCg0AIAdBBGsoAgAiDkUNAEEKIQpBACEGIA5BCnANAANAIAYiCUEBaiEGIA4gCkEKbCIKcEUNAAsgCUF/cyEGCyAHIA1rQQJ1QQlsIQogBUFfcUHGAEYEQEEAIQkgCyAGIApqQQlrIgZBACAGQQBKGyIGIAYgC0obIQsMAQtBACEJIAsgAyAKaiAGakEJayIGQQAgBkEAShsiBiAGIAtKGyELC0F/IQogC0H9////B0H+////ByAJIAtyIhIbSg0BIAsgEkEAR2pBAWohDgJAIAVBX3EiFUHGAEYEQCADIA5B/////wdzSg0DIANBACADQQBKGyEGDAELIBEgAyADQR91IgZzIAZrrSARENgDIgZrQQFMBEADQCAGQQFrIgZBMDoAACARIAZrQQJIDQALCyAGQQJrIg8gBToAACAGQQFrQS1BKyADQQBIGzoAACARIA9rIgYgDkH/////B3NKDQILIAYgDmoiAyAQQf////8Hc0oNASAAQSAgAiADIBBqIgMgBBCzASAAIBMgEBCiASAAQTAgAiADIARBgIAEcxCzAQJAAkACQCAVQcYARgRAIAxBEGpBCXIhBSANIAggCCANSxsiCSEIA0AgCDUCACAFENgDIQYCQCAIIAlHBEAgBiAMQRBqTQ0BA0AgBkEBayIGQTA6AAAgBiAMQRBqSw0ACwwBCyAFIAZHDQAgBkEBayIGQTA6AAALIAAgBiAFIAZrEKIBIAhBBGoiCCANTQ0ACyASBEAgAEGkmANBARCiAQsgC0EATCAHIAhNcg0BA0AgCDUCACAFENgDIgYgDEEQaksEQANAIAZBAWsiBkEwOgAAIAYgDEEQaksNAAsLIAAgBkEJIAsgC0EJThsQogEgC0EJayEGIAhBBGoiCCAHTw0DIAtBCUogBiELDQALDAILAkAgC0EASA0AIAcgCEEEaiAHIAhLGyENIAxBEGpBCXIhBSAIIQcDQCAFIAc1AgAgBRDYAyIGRgRAIAZBAWsiBkEwOgAACwJAIAcgCEcEQCAGIAxBEGpNDQEDQCAGQQFrIgZBMDoAACAGIAxBEGpLDQALDAELIAAgBkEBEKIBIAZBAWohBiAJIAtyRQ0AIABBpJgDQQEQogELIAAgBiAFIAZrIgYgCyAGIAtIGxCiASALIAZrIQsgB0EEaiIHIA1PDQEgC0EATg0ACwsgAEEwIAtBEmpBEkEAELMBIAAgDyARIA9rEKIBDAILIAshBgsgAEEwIAZBCWpBCUEAELMBCyAAQSAgAiADIARBgMAAcxCzASADIAIgAiADSBshCgwBCyATIAVBGnRBH3VBCXFqIQgCQCADQQtLDQBBDCADayEGRAAAAAAAADBAIRgDQCAYRAAAAAAAADBAoiEYIAZBAWsiBg0ACyAILQAAQS1GBEAgGCABmiAYoaCaIQEMAQsgASAYoCAYoSEBCyARIAwoAiwiBiAGQR91IgZzIAZrrSARENgDIgZGBEAgBkEBayIGQTA6AAALIBBBAnIhCyAFQSBxIQ0gDCgCLCEHIAZBAmsiCSAFQQ9qOgAAIAZBAWtBLUErIAdBAEgbOgAAIARBCHEhBiAMQRBqIQcDQCAHIgUCfyABmUQAAAAAAADgQWMEQCABqgwBC0GAgICAeAsiB0HQkAdqLQAAIA1yOgAAIAYgA0EASnJFIAEgB7ehRAAAAAAAADBAoiIBRAAAAAAAAAAAYXEgBUEBaiIHIAxBEGprQQFHckUEQCAFQS46AAEgBUECaiEHCyABRAAAAAAAAAAAYg0AC0F/IQpB/f///wcgCyARIAlrIgZqIg1rIANIDQAgAEEgIAIgDSADQQJqIAcgDEEQaiIHayIFIAVBAmsgA0gbIAUgAxsiCmoiAyAEELMBIAAgCCALEKIBIABBMCACIAMgBEGAgARzELMBIAAgByAFEKIBIABBMCAKIAVrQQBBABCzASAAIAkgBhCiASAAQSAgAiADIARBgMAAcxCzASADIAIgAiADSBshCgsgDEGwBGokACAKCwsAQYGLCyAAOgAACwQAQgAL1AIBB38jAEEgayIDJAAgAyAAKAIcIgQ2AhAgACgCFCEFIAMgAjYCHCADIAE2AhggAyAFIARrIgE2AhQgASACaiEFIANBEGohAUECIQcCfwJAAkACQCAAKAI8IAFBAiADQQxqEAMQnQMEQCABIQQMAQsDQCAFIAMoAgwiBkYNAiAGQQBIBEAgASEEDAQLIAEgBiABKAIEIghLIglBA3RqIgQgBiAIQQAgCRtrIgggBCgCAGo2AgAgAUEMQQQgCRtqIgEgASgCACAIazYCACAFIAZrIQUgACgCPCAEIgEgByAJayIHIANBDGoQAxCdA0UNAAsLIAVBf0cNAQsgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCECACDAELIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAQQAgB0ECRg0AGiACIAQoAgRrCyADQSBqJAALOwEBfyAAKAI8IwBBEGsiACQAIAEgAkH/AXEgAEEIahAPEJ0DIQIgACkDCCEBIABBEGokAEJ/IAEgAhsL1wEBBH8jAEEgayIEJAAgBCABNgIQIAQgAiAAKAIwIgNBAEdrNgIUIAAoAiwhBiAEIAM2AhwgBCAGNgIYQSAhAwJAAkAgACAAKAI8IARBEGpBAiAEQQxqEAQQnQMEf0EgBSAEKAIMIgNBAEoNAUEgQRAgAxsLIAAoAgByNgIADAELIAQoAhQiBiADIgVPDQAgACAAKAIsIgM2AgQgACADIAUgBmtqNgIIIAAoAjAEQCAAIANBAWo2AgQgASACakEBayADLQAAOgAACyACIQULIARBIGokACAFCwwAIAAoAjwQAhCdAwtsAEERIQICQAJAAkACQCABQQ9rDgMDAgEACyABQRtHDQEgAEERNgIIIABB4wM2AgBBEw8LIABB0QNB5QMgACgCEBs2AgBBFA8LAkAgAUEcRw0AIAAoAhANAEE7DwsgAEHOAzYCAEF/IQILIAILGAAgACABIAIgAyAEQfwDQRVBG0EREL8CC0UAIAFBD0YEQEERDwsgAUEbRgRAIABBETYCCCAAQeMDNgIAQRMPCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBzgM2AgBBfwtbAAJ/QScgAUEPRg0AGgJAIAFBFUcEQCABQSRHDQEgAEEnNgIIIABB4wM2AgBBLg8LIABB+gM2AgBBJw8LIAFBHEYEQEE7IAAoAhBFDQEaCyAAQc4DNgIAQX8LCxYAIAAgASACIAMgBEEnQfsDQTMQ/gYLpAEAAkACQAJAAkACQAJAAkACQAJAIAFBF2sOCgEGBgYGBgYCAwQAC0EnIQIgAUEPaw4EBgUFBwQLIAAgACgCBEEBajYCBEEsDwsgAEH3AzYCAEE1DwsgAEH3AzYCAEE0DwsgAEH3AzYCAEE2DwsgAUEpRg0CCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBzgM2AgBBfyECCyACDwsgAEH3AzYCAEEzC4ABAEEnIQICQAJAAkACQAJAIAFBFWsOBAECAgQACyABQQ9GDQIgAUEkRw0BIABBJzYCCCAAQeMDNgIAQS4PCyAAQfoDNgIAQScPCyABQRxGBEBBOyECIAAoAhBFDQELIABBzgM2AgBBfyECCyACDwsgAEEnNgIIIABB4wM2AgBBLQuWAgACfwJAAkACQAJAAkACQAJAIAFBI2sOBAIBAwQACwJAAkAgAUEVaw4EBgcHAQALIAFBD0cNBkEnDwsgACAAKAIEQQFrIgI2AgRBLSACDQYaIABBJzYCCCAAQeMDNgIAQS0PCyAAIAAoAgRBAWsiAjYCBEEuIAINBRogAEEnNgIIIABB4wM2AgBBLg8LIAAgACgCBEEBayICNgIEQS8gAg0EGiAAQSc2AgggAEHjAzYCAEEvDwsgACAAKAIEQQFrIgI2AgRBMCACDQMaIABBJzYCCCAAQeMDNgIAQTAPCyAAQfkDNgIAQTIPCyAAQfkDNgIAQTEPCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBzgM2AgBBfwsLvQEBAn9BMyEFQfcDIQYCQAJAAkACQAJAAkACQAJAAkAgAUESaw4PCAcBBwcCBwcHBwcHAwQFAAsgAUEPRw0FQScPCyAEIAIgBCgCQGogA0HB0AYgBCgCGBEGAEUNBUErIQVB+AMhBgwGCyAAQQI2AgRBLCEFQfkDIQYMBQtBNSEFDAQLQTQhBQwDC0E2IQUMAgsgAUEpRg0BC0F/IQVBzgMhBiABQRxHDQAgACgCEA0AQTsPCyAAIAY2AgAgBQsSACAAIAEgAiADIARB9AMQ7AoLEgAgACABIAIgAyAEQfIDEOwKCxYAIAAgASACIAMgBEEhQfYDQSAQ6QoLGAAgACABIAIgAyAEQd0DQSZBG0EhEL8CC1YAQR8hAkH1AyEEQSEhAwJAAkACQAJAIAFBD2sOBQMBAQICAAsgAUEpRg0BC0F/IQJBzgMhBCABQRxHDQAgACgCEA0AQTsPCyAAIAQ2AgAgAiEDCyADC0cAQSEhAiABQQ9GBEBBIQ8LQfQDIQMCfwJAIAFBF0YNAEF/IQJBzgMhAyABQRxHDQBBOyAAKAIQRQ0BGgsgACADNgIAIAILC7oBAQF/IAFBD0YEQEEhDwtB3QMhBQJAIAFBG0YEQEElIQQMAQsCQCABQRRHDQAgBCACIAQoAkBqIANBoNAGIAQoAhgRBgAEQEEjIQQMAgsgBCACIAQoAkBqIANBqNAGIAQoAhgRBgAEQEEkIQQMAgsgBCACIAQoAkBqIANBsdAGIAQoAhgRBgBFDQBBISEEQfMDIQUMAQtBfyEEQc4DIQUgAUEcRw0AIAAoAhANAEE7DwsgACAFNgIAIAQLvwEBAn9BISEFAkACQAJAAkACQCABQQ9rDgQDAgIAAQtBACEFAkADQCAEKAIYIQYgBUEIRg0BIAQgAiADIAVBAnRB0M8GaigCACAGEQYARQRAIAVBAWohBQwBCwsgAEHwAzYCACAFQRdqDwsgBCACIANBrc8GIAYRBgBFDQEgAEHxAzYCAEEhDwsgAUEXRg0CCyABQRxGBEBBOyEFIAAoAhBFDQELIABBzgM2AgBBfyEFCyAFDwsgAEHyAzYCAEEhC08AQQshAgJAAkACQCABQQ9rDgQCAQEAAQsgAEELNgIIIABB4wM2AgBBEA8LAkAgAUEcRw0AIAAoAhANAEE7DwsgAEHOAzYCAEF/IQILIAILdAEBf0ELIQUCQAJAAkACQAJAIAFBD2sOBAQBAgABCyAEIAIgA0HFzwYgBCgCGBEGAEUNAEHvAyEEDAILQX8hBUHOAyEEIAFBHEcNASAAKAIQDQFBOw8LQdEDQeUDIAAoAhAbIQRBDyEFCyAAIAQ2AgALIAULGAAgACABIAIgAyAEQeUDQTpBGUEAEL8CC0wAAn9BACABQQ9GDQAaIAFBGUYEQCAAQeUDNgIAIAAgACgCDEEBajYCDEEADwsgAUEcRgRAQTsgACgCEEUNARoLIABBzgM2AgBBfwsLewEBfwJAAkACQAJAIAFBD2sOBAIBAQABCyAEIAIgA0G2zwYgBCgCGBEGAARAQe0DIQQMAwsgBCACIANBvs8GIAQoAhgRBgBFDQBB7gMhBAwCC0F/IQVBzgMhBCABQRxHDQEgACgCEA0BQTshBQsgBQ8LIAAgBDYCACAFC1IAQQshAgJAAkACQAJAIAFBD2sOAwMAAQALQX8hAkHOAyEDIAFBHEcNASAAKAIQDQFBOw8LQdEDQeUDIAAoAhAbIQNBDyECCyAAIAM2AgALIAILGAAgACABIAIgAyAEQekDQQ5BG0ELEL8CCxgAIAAgASACIAMgBEHsA0ENQRtBCxC/AgtNAAJAAkACQCABQQ9rDgMBAgACCyAAQdEDQeUDIAAoAhAbNgIACyAAKAIIDwsCfyABQRxGBEBBOyAAKAIQRQ0BGgsgAEHOAzYCAEF/CwsYACAAIAEgAiADIARB4QNBDkEbQQsQvwILGAAgACABIAIgAyAEQesDQQ1BG0ELEL8CCxUAIAAgASACIAMgBEHqA0HpAxDoCgt/AQF/QREhBQJAAkACQAJAIAFBD2sOBAIBAQABCyAEIAIgA0GIzwYgBCgCGBEGAARAQecDIQQMAwsgBCACIANBj88GIAQoAhgRBgBFDQBB6AMhBAwCC0F/IQVBzgMhBCABQRxHDQEgACgCEA0BQTshBQsgBQ8LIAAgBDYCACAFC6wBAQF/QSchBQJAAkACQAJAAkAgAUEPaw4EAwICAAELIAQgAiADQbfQBiAEKAIYEQYABEAgAEEnNgIIIABB4wM2AgBBKg8LIAQgAiADQb3QBiAEKAIYEQYARQ0BIABBJzYCCCAAQeMDNgIAQSkPCyABQRdGDQILAkAgAUEcRw0AIAAoAhANAEE7DwsgAEHOAzYCAEF/IQULIAUPCyAAQQE2AgQgAEHmAzYCAEEsC2wAQRYhAkHkAyEEQSEhAwJAAkACQAJAAkAgAUEPaw4EBAIAAwELQdEDQeUDIAAoAhAbIQRBISECDAILIAFBKUYNAQtBfyECQc4DIQQgAUEcRw0AIAAoAhANAEE7DwsgACAENgIAIAIhAwsgAwsVACAAIAEgAiADIARB4gNB4QMQ6AoLFgAgACABIAIgAyAEQQtB4ANBChDpCgteAEEDIQICQAJAAkACQAJAIAFBD2sOAwQBAgALIAFBGUcNAEEHIQJB0QMhAwwCC0F/IQJBzgMhAyABQRxHDQEgACgCEA0BQTsPC0EIIQJB1AMhAwsgACADNgIACyACC0oAQQghAkHUAyEEQQMhAwJAAkACQCABQQ9rDgMCAAEAC0F/IQJBzgMhBCABQRxHDQAgACgCEA0AQTsPCyAAIAQ2AgAgAiEDCyADC0cAQd8DIQNBESECAkACQAJAIAFBD2sOBAIAAAEACyABQRxHQX8hAUHOAyEDDQAgACgCEA0AQTsPCyAAIAM2AgAgASECCyACCxYAIAAgASACIAMgBEEnQd4DQSgQ/gYLFgAgACABIAIgAyAEQSFB3QNBIhD+BgtgAEHbAyEEQQshAgJ/AkACQAJAAkAgAUESaw4FAAICAgMBC0EJIQJB3AMhBAwCC0ELIAFBD0YNAhoLQX8hAkHOAyEEIAFBHEcNAEE7IAAoAhBFDQEaCyAAIAQ2AgAgAgsLXQBBACECAkACQAJAAkACQCABQQtrQR93DgoAAQQDAwMDAwMCAwtBNw8LQTgPCyAAQc4DNgIAQQIPCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBzgM2AgBBfyECCyACCxgAIAAgASACIAMgBEHSA0EGQRtBAxC/AgsYACAAIAEgAiADIARB2gNBBUEbQQMQvwILnAEBAX9BAyEFAkACQAJAAkACQAJAIAFBD2sOBAUCAwEACyABQRlHDQFBByEFQdEDIQQMAwsgBCACIANBiM8GIAQoAhgRBgAEQEHSAyEEDAMLIAQgAiADQY/PBiAEKAIYEQYARQ0AQdMDIQQMAgtBfyEFQc4DIQQgAUEcRw0BIAAoAhANAUE7DwtBCCEFQdQDIQQLIAAgBDYCAAsgBQt7AQF/AkACQAJAAkACQAJAIAFBIWsOAgECAAsgAUF8Rg0CIAFBD0YNBCABQRpGDQMgACABIAIgAyAEENAMDwsgAEHQAzYCAEEADwsgACgCDCIBRQ0BIAAgAUEBazYCDEEADwsgACgCDEUNAQsgAEHOAzYCAEF/IQULIAULVQBBAyECQQQhA0HPAyEEAkACQAJAAkAgAUEPaw4EAwEBAgALIAFBKUYNAQtBfyEDQc4DIQQgAUEcRw0AIAAoAhANAEE7DwsgACAENgIAIAMhAgsgAguKAQEBfwJAAkACQAJAAkACQAJAIAFBC2sOBgAEAQUFAgMLQTcPC0E4DwsgBCACIAQoAkBBAXRqIANBgM8GIAQoAhgRBgBFDQEgAEHNAzYCAEEDDwsgAUEdRg0CCwJAIAFBHEcNACAAKAIQDQBBOw8LIABBzgM2AgBBfyEFCyAFDwsgAEHOAzYCAEECC6gBAQN/QcwDIQYCQAJAAkACQAJAAkACQAJAAkAgAUELaw4GAQACCAcDBAtBASEFDAYLQTchBQwFC0E4IQUMBAsgBCACIAQoAkBBAXRqIANBgM8GIAQoAhgRBgBFDQFBAyEFQc0DIQYMAwsgAUEdRg0BC0F/IQVBzgMhBiABQRxHDQFBOyEHIAAoAhBFDQIMAQtBAiEFQc4DIQYLIAAgBjYCACAFIQcLIAcLmgEBAn8gASgCACIAIAIgAGtBfnEiBWohAiAEIAMoAgBrIAVIBEAgAkECayIGIAIgBi0AAEH4AXFB2AFGIgYbIQILAkADQCAAIAJPDQEgBCADKAIAIgVLBEAgAC8AACEAIAMgBUECajYCACAFIABBCHQgAEEIdnI7AQAgASABKAIAQQJqIgA2AgAMAQsLIAQgBUcNAEECIQYLIAYLpgQBBH8gASgCACIAIAIgAGtBfnFqIQgCfwNAQQAgACAITw0BGiAALQABIgbAIQICQAJAAkACQAJAIAAtAAAiBQ4IAAEBAQEBAQECCyACQQBIDQAgAygCACIFIARGDQMgAyAFQQFqNgIAIAUgAjoAAAwCC0ECIAQgAygCACIHa0ECSA0EGiADIAdBAWo2AgAgByACQQZ2QQNxIAVBAnRyQcABcjoAACADIAMoAgAiBUEBajYCACAFIAJBP3FBgAFyOgAADAELIAVB2AFrQQRPBEAgBCADKAIAIgZrQQNIDQIgAyAGQQFqNgIAIAYgBUEEdkHgAXI6AAAgAyADKAIAIgZBAWo2AgAgBiAFQQJ0QTxxIAJBwAFxQQZ2ckGAAXI6AAAgAyADKAIAIgVBAWo2AgAgBSACQT9xQYABcjoAAAwBCyAEIAMoAgAiB2tBBEgNAUEBIAggAGtBBEgNAxogAyAHQQFqNgIAIAcgBUECdEEMcSAGQQZ2ckEBaiIFQQJ2QfABcjoAACADIAMoAgAiB0EBajYCACAHIAVBBHRBMHEgBkECdkEPcXJBgAFyOgAAIAAtAAIhBiAALQADIQUgAyADKAIAIgdBAWo2AgAgByAGQQJ0QQxxIAJBBHRBMHEgBUEGdnJyQYABcjoAACADIAMoAgAiAkEBajYCACACIAVBP3FBgAFyOgAAIABBAmohAAsgAEECaiEADAELC0ECCyABIAA2AgALzAEBB38gAEHIAGohCCACQQJrIQlBASEGAkADQCAJIAFBAmoiAGtBAkgNASABLQADIgTAIQUCQAJAAkACfyABLAACIgJFBEAgBCAIai0AAAwBCyACIAUQKAtB/wFxQQlrIgdBGksNACAAIQFBASAHdCIKQfOPlz9xDQMgCkGAwAhxRQRAIAdBDEcNASAFQQlHIAJyDQQMAwsgAg0CIAVBAE4NAwwBCyACDQELIAAhASAEQSRGIARBwABGcg0BCwsgAyAANgIAQQAhBgsgBgu3AgECfyAAQcgAaiEFA0AgAiABa0ECTgRAIAEtAAEhAAJAAkACQAJAAkACQAJ/IAEsAAAiBEUEQCAAIAVqLQAADAELIAQgAMAQKAtB/wFxQQVrDgYAAQIFBAMFCyADIAMoAgRBAWo2AgQgAUECaiEBDAYLIAMgAygCBEEBajYCBCABQQNqIQEMBQsgAyADKAIEQQFqNgIEIAFBBGohAQwECyADQQA2AgQgAyADKAIAQQFqNgIAIAFBAmohAQwDCyADIAMoAgBBAWo2AgACfyACIAFBAmoiAGtBAkgEQCAADAELIAEtAAMhBCABQQRqIAACfyABLAACIgBFBEAgBCAFai0AAAwBCyAAIATAECgLQQpGGwshASADQQA2AgQMAgsgAyADKAIEQQFqNgIEIAFBAmohAQwBCwsLnAIAAkACQAJAAkAgAiABa0ECbUECaw4DAAECAwsgAS0AAg0CIAEtAANB9ABHDQIgAS0AAA0CQTxBPkEAIAEtAAEiAEHnAEYbIABB7ABGGw8LIAEtAAANASABLQABQeEARw0BIAEtAAINASABLQADQe0ARw0BIAEtAAQNASABLQAFQfAARw0BQSYPCyABLQAADQAgAS0AASIAQeEARwRAIABB8QBHDQEgAS0AAg0BIAEtAANB9QBHDQEgAS0ABA0BIAEtAAVB7wBHDQEgAS0ABg0BIAEtAAdB9ABHDQFBIg8LIAEtAAINACABLQADQfAARw0AIAEtAAQNACABLQAFQe8ARw0AIAEtAAYNACABLQAHQfMARw0AQScPC0EAC6MCAQJ/AkACQAJAIAEtAAQNACABLQAFQfgARw0AIAFBBmohAUEAIQADQAJAIAEtAAANACABLAABIgJB/wFxIgNBO0YNAwJ/AkACQAJAIANBMGsONwAAAAAAAAAAAAAEBAQEBAQEAQEBAQEBBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAgICAgIECyACQTBrIABBBHRyDAILIABBBHQgAmpBN2sMAQsgAEEEdCACakHXAGsLIgBB///DAEwNAEF/DwsgAUECaiEBDAALAAsgAUEEaiEBQQAhAANAQX8hAkF/IQMgAS0AAEUEQCABLAABIgNBO0YNAgsgAUECaiEBIABBCmwgA2pBMGsiAEGAgMQASA0ACwwBCyAAEKkEIQILIAIL0AUBCH8gAEHIAGohCkEBIQADQCAAIQUgASIGLQADIgDAIQgCfyAGLAACIglFBEAgACAKai0AAAwBCyAJIAgQKAshCyAGQQJqIQEgBSEAAkACQAJAAkACQAJAAkACQAJAAkACQCALQf8BcUEDaw4bBgsAAQILCAgJBAULCwsJCwsLBwMLAwsLCwsDCwsgBQ0KQQEhACACIARMDQogAyAEQQR0aiIFQQE6AAwgBSABNgIADAoLAkAgBQ0AQQEhACACIARMDQAgAyAEQQR0aiIFQQE6AAwgBSABNgIACyAGQQNqIQEMCQsCQCAFDQBBASEAIAIgBEwNACADIARBBHRqIgVBAToADCAFIAE2AgALIAZBBGohAQwICyAFDQdBASEAIAIgBEwNByADIARBBHRqIgVBAToADCAFIAE2AgAMBwsgBUECRwRAQQwhB0ECIQAgAiAETA0HIAMgBEEEdGogBkEEajYCBAwHC0ECIQAgB0EMRw0GIAIgBEoEQCADIARBBHRqIAE2AggLIARBAWohBEEMIQdBACEADAYLIAVBAkcEQEENIQdBAiEAIAIgBEwNBiADIARBBHRqIAZBBGo2AgQMBgtBAiEAIAdBDUcNBSACIARKBEAgAyAEQQR0aiABNgIICyAEQQFqIQRBDSEHQQAhAAwFCyACIARMDQQgAyAEQQR0akEAOgAMDAMLQQAhAAJAIAVBAWsOAgQAAwtBAiEAIAIgBEwNAyADIARBBHRqIgUtAAxFDQMCQCAJDQAgASAFKAIERiAIQSBHcg0AIAYtAAUiCcAhCAJ/IAYsAAQiBkUEQCAIQSBGDQIgCSAKai0AAAwBCyAGIAgQKAsgB0cNBAsgBUEAOgAMDAMLQQAhAAJAIAVBAWsOAgMAAgtBAiEAIAIgBEwNAiADIARBBHRqQQA6AAwMAgtBAiEAIAVBAkYNASAEDwsgBSEADAALAAtaAQJ/IABByABqIQIDQCABLQABIQACfyABLAAAIgNFBEAgACACai0AAAwBCyADIADAECgLQf8BcSIAQRVLQQEgAHRBgIyAAXFFckUEQCABQQJqIQEMAQsLIAELbwEDfyAAQcgAaiEDIAEhAANAIAAtAAEhAgJ/IAAsAAAiBEUEQCACIANqLQAADAELIAQgAsAQKAtBBWtB/wFxIgJBGU9Bh4D4CyACdkEBcUVyRQRAIAAgAkECdEGczgZqKAIAaiEADAELCyAAIAFrC0wBAX8CQANAIAMtAAAiBARAQQAhACACIAFrQQJIDQIgAS0AAA0CIAEtAAEgBEcNAiADQQFqIQMgAUECaiEBDAELCyABIAJGIQALIAAL1QIBBH8gASACTwRAQXwPCyACIAFrQQJIBEBBfw8LIABByABqIQcgASEEAkADQCACIARrQQJIDQEgBC0AASEFAn8gBCwAACIGRQRAIAUgB2otAAAMAQsgBiAFwBAoCyEFQQIhBgJAAkACQAJAAkACQAJAAkAgBUH/AXEiBUEDaw4IAgYGAAEGBAMFC0EDIQYMBQtBBCEGDAQLIAEgBEcNBiAAIARBAmogAiADEL4FDwsgASAERw0FIAMgBEECajYCAEEHDwsgASAERw0EIAIgBEECaiIBa0ECSARAQX0PCyAELQADIQAgAyAEQQRqIAECfyAELAACIgJFBEAgACAHai0AAAwBCyACIADAECgLQQpGGzYCAEEHDwsgBUEeRg0BCyAEIAZqIQQMAQsLIAEgBEcNACAAIARBAmogAiADENUMIgBBACAAQRZHGw8LIAMgBDYCAEEGC9cCAQR/IAEgAk8EQEF8DwsgAiABa0ECSARAQX8PCyAAQcgAaiEHIAEhBAJAA0AgAiAEa0ECSA0BIAQtAAEhBQJ/IAQsAAAiBkUEQCAFIAdqLQAADAELIAYgBcAQKAshBUECIQYCQAJAAkACQAJAAkACQAJAAkAgBUH/AXEiBUECaw4JAwIHBwABBwUEBgtBAyEGDAYLQQQhBgwFCyABIARHDQcgACAEQQJqIAIgAxC+BQ8LIAMgBDYCAEEADwsgASAERw0FIAMgBEECajYCAEEHDwsgASAERw0EIAIgBEECaiIBa0ECSARAQX0PCyAELQADIQAgAyAEQQRqIAECfyAELAACIgJFBEAgACAHai0AAAwBCyACIADAECgLQQpGGzYCAEEHDwsgBUEVRg0BCyAEIAZqIQQMAQsLIAEgBEcNACADIARBAmo2AgBBJw8LIAMgBDYCAEEGC/MCAQR/IAEgAiABayIEQX5xaiACIARBAXEbIQQgAEHIAGohBwJAA0AgBCABIgJrIgZBAkgNASACLQABIQACfyACLAAAIgFFBEAgACAHai0AAAwBCyABIADAECgLIQFBACEAAkACQAJAAkACQAJAAkACQCABQf8BcQ4JBAQCBgMGAAEEBgsgBkECRg0GIAJBA2ohAQwHCyAGQQRJDQUgAkEEaiEBDAYLIAQgAkECaiIBa0ECSA0GIAEtAAANBSACLQADQSFHDQUgBCACQQRqIgFrQQJIDQYgAS0AAA0FIAItAAVB2wBHDQUgAkEGaiEBIAVBAWohBQwFCyAEIAJBAmoiAWtBAkgNBSABLQAADQQgAi0AA0HdAEcNBCAEIAJBBGoiAWtBAkgNBSABLQAADQQgAi0ABUE+Rw0EIAJBBmohASAFDQFBKiEAIAEhAgsgAyACNgIAIAAPCyAFQQFrIQUMAgsgAkECaiEBDAELC0F+DwtBfwuYBAEEfyABIAJPBEBBfA8LAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkAgAiABayIEQQFxBEAgBEF+cSICRQ0BIAEgAmohAgsCQAJAAn8gASwAACIERQRAIAAgAS0AAWotAEgMAQsgBCABLAABECgLQf8BcQ4LDAwHBwAEBQYMAQkHC0F/IQUgAiABQQJqIgRrQQJIDQwgBC0AAA0HIAEtAANB3QBHDQcgAiABQQRqa0ECSA0MIAEtAAQNByABLQAFQT5HDQcgAUEGaiEBQSghBQwLCyACIAFBAmoiBGtBAk4NAQtBfw8LIAFBBGogBAJ/IAQsAAAiAkUEQCAAIAEtAANqLQBIDAELIAIgASwAAxAoC0EKRhsMBgsgAiABa0ECSA0JIAFBAmohBAwDCyACIAFrQQNIDQggAUEDaiEEDAILIAIgAWtBBEgNByABQQRqIQQMAQsgAUECaiEECyAAQcgAaiEHQQYhBQNAIAIgBGsiBkECSA0DIAQtAAEhAAJ/IAQsAAAiAUUEQCAAIAdqLQAADAELIAEgAMAQKAshAUECIQACQCABQf8BcSIBQQpLDQACQCABQQZHBEAgAUEHRg0BQQEgAXRBkw5xDQYMAgtBAyEAIAZBAkYNBQwBC0EEIQAgBkEESQ0ECyAAIARqIQQMAAsACyABQQJqCyEBQQchBQwBCyAEIQELIAMgATYCAAsgBQ8LQX4LzRoBCn8jAEEQayIMJAACQCABIAJPBEBBfCEHDAELAkACQAJAAkACQAJAAkACQCACIAFrIgVBAXEEQCAFQX5xIgJFDQEgASACaiECCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/IAEsAAAiBUUEQCAAIAEtAAFqLQBIDAELIAUgASwAARAoC0H/AXEOCwgIAAEEBQYHCAIDCQtBfyEHIAIgAUECaiIJayIFQQJIDQ4CQAJAAkACQAJAAkACQAJ/IAEtAAIiBEUEQCAAIAEtAAMiBmotAEgMAQsgBMAgASwAAyIGECgLQf8BcSIIQQVrDhQcAQIcHBwcHBwcBAMFHBwcHAYcBgALIAhBHUcNGyAGQQN2QRxxIARBsK4Gai0AAEEFdHJB0J4GaigCACAGdkEBcQ0FDBsLIAVBAkcNGgwZCyAFQQRPDRkMGAsgAiABQQRqIgVrQQJIDRkCQAJ/IAEsAAQiBEUEQCAAIAEtAAVqLQBIDAELIAQgASwABRAoC0H/AXEiBEEURwRAIARBG0cNASAAIAFBBmogAiADENcMIQcMGwsgAiABQQZqIgRrQQxIDRogAUESaiECQQAhAQNAIAFBBkYEQEEIIQcMGQtBACEHIAQtAAANFyAELQABIAFBzL4Gai0AAEcNFyAEQQJqIQQgAUEBaiEBDAALAAsgAyAFNgIAQQAhBwwZCyAAIAFBBGogAiADENYMIQcMGAsgAiABQQRqIgRrIgZBAkgND0EAIQcCQAJ/IAQtAAAiCEUEQCAAIAEtAAUiBWotAEgMAQsgCMAgASwABSIFECgLQf8BcSIBQQZrDgISEQALAkACQCABQRZrDgMBFAEACyABQR1HDRMgBUEDdkEccSAIQbCuBmotAABBBXRyQdCeBmooAgAgBXZBAXFFDRMLIABByABqIQYCfwJAAkACQANAIAIgBCIAQQJqIgRrIghBAkgNFCAALQADIQECQAJAAn8gAC0AAiIJRQRAIAEgBmotAAAMAQsgCcAgAcAQKAtB/wFxQQZrDhgBAxkEBAUZGRkZGRkZGRkEAgICAgICGQAZCyABQQN2QRxxIAlBsLAGai0AAEEFdHJB0J4GaigCACABdkEBcQ0BDBgLCyAIQQJGDRkMFgsgCEEESQ0YDBULA0AgAiAEIgFBAmoiBGtBAkgNEiABLQADIQACQAJAAn8gASwAAiIFRQRAIAAgBmotAAAMAQsgBSAAwBAoC0H/AXEiAEEJaw4DAgIBAAsgAEEVRg0BDBYLCyABQQRqDAELIABBBGoLIQRBBSEHDBILIABByABqIQkgAUEEaiEBQQAhBgNAIAIgAWsiC0ECSA0XIAEtAAEhBEECIQUCQAJAAkACQAJAAkACQAJAAn8gAS0AACIKRQRAIAQgCWotAAAMAQsgCsAgBMAQKAtB/wFxQQZrDhgBAhYEBAUWFhYWFgYWFhYEBwMHBwcHFgAWCyAEQQN2QRxxIApBsLAGai0AAEEFdHJB0J4GaigCACAEdkEBcQ0GDBULIAtBAkYNGwwUCyALQQRJDRoMEwsgBg0SIAIgAUECaiINayILQQJIDRsgAS0AAyEEQQEhBkEEIQUCQAJ/IAEtAAIiCkUEQCAEIAlqLQAADAELIArAIATAECgLQf8BcSIIQRZrDgMEEgQACwJAAkAgCEEdRwRAIAhBBmsOAgECFAsgBEEDdkEccSAKQbCuBmotAABBBXRyQdCeBmooAgAgBHZBAXENBQwTCyALQQJGDRoMEgsgC0EESQ0ZDBELAkACQAJAA0AgAiABIgRBAmoiAWsiBkECSA0eIAQtAAMhBQJAAn8gBC0AAiILRQRAIAUgCWotAAAMAQsgC8AgBcAQKAtB/wFxQQZrDhgDBBYBAQUWFhYWFgYWFhYBAhYCFhYWFgAWCwsgBUEDdkEccSALQbCuBmotAABBBXRyQdCeBmooAgAgBXZBAXFFDRQLQQAhCwJAAkACQANAIARBBGohBAJAAkACQAJAAkACQANAIAwgBDYCDEF/IQcgAiAEayIKQQJIDScgBC0AASEBIAQhBUEAIQYCQAJAAkACfyAELQAAIg1FBEAgASAJai0AAAwBCyANwCABwBAoC0H/AXFBBmsOGAIEHwgIHx8fCR8fHx8fHwgBBQEBAQEfAB8LIAFBA3ZBHHEgDUGwsAZqLQAAQQV0ckHQngZqKAIAIAF2QQFxRQ0FCyAEQQJqIQQMAQsLIApBAkYNJAwbCyAKQQRJDSMMGgsgC0UNAQsgBCEFDBcLIAwgBEECaiIFNgIMIAIgBWsiCEECSA0iIAQtAAMhAUEBIQsCQAJ/IAQtAAIiCkUEQCABIAlqLQAADAELIArAIAHAECgLQf8BcSIHQRZrDgMDGAMACwJAAkAgB0EdRwRAIAdBBmsOAgECGgsgAUEDdkEccSAKQbCuBmotAABBBXRyQdCeBmooAgAgAXZBAXENBAwZCyAIQQJGDSEMGAsgCEEESQ0gDBcLA0AgAiAEQQJqIgVrQQJIDSIgBC0AAyEBAn8gBCwAAiIERQRAIAEgCWotAAAMAQsgBCABwBAoCyIBQQ5HBEAgAUH/AXEiAUEVSw0XIAUhBEEBIAF0QYCMgAFxRQ0XDAELCyAMIAU2AgwgBSEECwNAIAIgBEECaiIFa0ECSA0hIAQtAAMhAQJ/IAQsAAIiBkUEQCABIAlqLQAADAELIAYgAcAQKAsiAUH+AXFBDEcEQCABQf8BcSIBQRVLDRYgBSEEQQEgAXRBgIyAAXFFDRYMAQsLIARBBGohBQNAIAwgBTYCDAJAAkADQCACIAVrIghBAkgNJCAFLQABIQQCfyAFLAAAIgZFBEAgBCAJai0AAAwBCyAGIATAECgLIgQgAUYNAkEAIQYCQAJAAkAgBEH/AXEOCRwcHAIEBAABHAQLIAhBAkYNJCAFQQNqIQUMBQsgCEEESQ0jIAVBBGohBQwECyAAIAVBAmogAiAMQQxqEL4FIgVBAEoEQCAMKAIMIQUMAQsLIAUiBw0jIAwoAgwhBQwXCyAFQQJqIQUMAQsLIAwgBUECaiIBNgIMIAIgAWtBAkgNICAFLQADIQQCfyAFLAACIgZFBEAgBCAJai0AAAwBCyAGIATAECgLIQggBSEEIAEhBUEAIQYCQAJAIAhB/wFxIgFBCWsOCQEBBBcXFxcXBQALIAFBFUYNAAwVCwJAA0AgAiAFIgRBAmoiBWsiCEECSA0iIAQtAAMhAUEAIQsCQAJ/IAQtAAIiCkUEQCABIAlqLQAADAELIArAIAHAECgLQf8BcUEGaw4YAgQYAQEFGBgYGBgGGBgYAQMYAxgYGBgAGAsLIAwgBTYCDCAELQADIgFBA3ZBHHEgCkGwrgZqLQAAQQV0ckHQngZqKAIAIAF2QQFxDQEMFgsLIAhBAkYNHQwUCyAIQQRJDRwMEwsgBEEEaiEFQQEhBgwSCyAMIAVBAmoiADYCDCACIABrQQJIDRwgAC0AAARAIAAhBQwRCyAFQQRqIAAgBS0AA0E+RiIAGyEFQQNBACAAGyEGDBELIAZBAkYNGQwSCyAGQQRJDRgMEQtBAiEHIAMgAUECajYCAAwZCyACIAFBAmoiAGtBAkgNGAJAIAEtAAJFBEAgAS0AA0E+Rg0BCyADIAA2AgBBACEHDBkLQQQhByADIAFBBGo2AgAMGAsgASAFaiEBDAALAAsgACABQQJqIAIgAxC+BSEHDBULIAIgAUECaiIFa0ECSARAQX0hBwwVCyADIAFBBGogBQJ/IAUsAAAiAkUEQCAAIAEtAANqLQBIDAELIAIgASwAAxAoC0EKRhs2AgBBByEHDBQLIAMgAUECajYCAEEHIQcMEwtBeyEHIAIgAUECaiIEa0ECSA0SIAQtAAANBSABLQADQd0ARw0FIAIgAUEEaiIFa0ECSA0SIAEtAAQNBSABLQAFQT5HDQUgAyAFNgIAQQAhBwwSCyACIAFrQQJIDQ8gAUECaiEEDAQLIAIgAWtBA0gNDiABQQNqIQQMAwsgAiABa0EESA0NIAFBBGohBAwCCyADIAE2AgAMDgsgAUECaiEECyAAQcgAaiEHA0ACQCACIAQiAGsiAUECSA0AIAQtAAEhBQJAAkACQAJAAn8gBCwAACIERQRAIAUgB2otAAAMAQsgBCAFwBAoC0H/AXEOCwQEBAQCAwABBAQEAwsgAUECRg0DIABBA2ohBAwECyABQQNNDQIgAEEEaiEEDAMLIAFBBEkNASAAQQJqIQQgAC0AAg0CIAAtAANB3QBHDQIgAUEGSQ0BIAAtAAQNAiAALQAFQT5HDQIgAyAAQQRqNgIAQQAhBwwPCyAAQQJqIQQMAQsLIAMgADYCAEEGIQcMDAtBACEGCyADIAU2AgAgBiEHDAoLIAMgDTYCAEEAIQcMCQsgAyABNgIAQQAhBwwIC0F/IQcMBwsgBkEESQ0EDAELIAZBAkYNAwsgAyAENgIADAQLIAQhAgsgAyACNgIADAILQX4hBwwBCyADIAk2AgBBACEHCyAMQRBqJAAgBwuyEQEGfyABIAJPBEBBfA8LAkACQAJAAkACQAJAAkACQAJAAkAgAiABayIEQQFxBEAgBEF+cSICRQ0BIAEgAmohAgtBfiEGQRIhBQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8gAS0AACIIRQRAIAAgAS0AASIHai0ASAwBCyAIwCABLAABIgcQKAtB/wFxQQJrDiMCGAgODxAYAwQMAAEYGBgYGA0HBBMSExISEhgRBQkKGBgGCxgLQQwgACABQQJqIAIgAxDYDA8LQQ0gACABQQJqIAIgAxDYDA8LQX8hBiACIAFBAmoiBWtBAkgNEQJAAkACQAJAAkACfyABLAACIgRFBEAgACABLQADai0ASAwBCyAEIAEsAAMQKAtB/wFxIgRBD2sOCgMCBAQEBAQBBAEACyAEQQVrQQNJDQAgBEEdRw0DCyADIAE2AgBBHQ8LIAIgAUEEaiIEa0ECSA0TAkACQAJAAkACfyAELAAAIgVFBEAgACABLQAFai0ASAwBCyAFIAEsAAUQKAtB/wFxQRRrDggBAwIDAgMDAAMLIAAgAUEGaiACIAMQ1wwPCyADIAFBBmo2AgBBIQ8LIABByABqIQUCQANAIAIgBCIBQQJqIgRrIgdBAkgNFiABLQADIQACQAJ/IAEsAAIiCEUEQCAAIAVqLQAADAELIAggAMAQKAtB/wFxIgBBFWsOCiEBAwEDAwMDAwACCwsgB0EESQ0VIAEtAAUhAAJ/IAEsAAQiAUUEQCAAIAVqLQAADAELIAEgAMAQKAtB/wFxIgBBHksNH0EBIAB0QYCMgIEEcQ0BDB8LIABBCWtBAkkNHgsgAyAENgIADB4LIAAgAUEEaiACIAMQ1gwPCyADIAU2AgAMHAsgAUECaiACRw0AIAMgAjYCAEFxDwsgAEHIAGohBQNAAkAgAiABIgBBAmoiAWtBAkgNACAALQADIQQCQAJAAn8gACwAAiIGRQRAIAQgBWotAAAMAQsgBiAEwBAoC0H/AXEiBEEJaw4CAQMACyAEQRVGDQIMAQsgAEEEaiACRw0BCwsgAyABNgIAQQ8PCyAAIAFBAmogAiADENUMDwsgAyABQQJqNgIAQSYPCyADIAFBAmo2AgBBGQ8LIAIgAUECaiIAayICQQJIBEBBZg8LAkAgAS0AAg0AIAEtAANB3QBHDQAgAkEESQ0OIAEtAAQNACABLQAFQT5HDQAgAyABQQZqNgIAQSIPCyADIAA2AgBBGg8LIAMgAUECajYCAEEXDwsgAiABQQJqIgRrQQJIBEBBaA8LAkACQAJAAkACQAJAAn8gASwAAiICRQRAIAAgAS0AA2otAEgMAQsgAiABLAADECgLQf8BcSIAQSBrDgUYAQMYGAALIABBCWsOBxcXFwQEBAEDCyADIAFBBGo2AgBBJA8LIAMgAUEEajYCAEEjDwsgAyABQQRqNgIAQSUPCyAAQRVGDRMLIAMgBDYCAAwUCyADIAFBAmo2AgBBFQ8LIAMgAUECajYCAEERDwsgAiABQQJqIgRrIgVBAkgNCAJAAn8gBC0AACIIRQRAIAAgAS0AAyIHai0ASAwBCyAIwCABLAADIgcQKAtB/wFxIgFBBmsOAg0MAAtBACEGAkACQAJAIAFBFmsOAwERAQALIAFBHUcNASAHQQN2QRxxIAhBsK4Gai0AAEEFdHJB0J4GaigCACAHdkEBcUUNAQsgAEHIAGohCANAIAIgBCIAQQJqIgRrIgdBAkgEQEFsDwsgAC0AAyEFQRQhBgJAAkACQAJ/IAAtAAIiAEUEQCAFIAhqLQAADAELIADAIAXAECgLQf8BcUEGaw4fAAEEExMTBAQEBAQEBAQEEwMEAwMDAwQCEwQTBAQEEwQLQQAhBiAHQQJGDREMEgtBACEGIAdBBEkNEAwRCyAFQQN2QRxxIABBsLAGai0AAEEFdHJB0J4GaigCACAFdkEBcQ0ACwtBACEGDA4LIAIgAWtBAkgNBQwJCyACIAFrQQNODQgMBAsgAiABa0EETg0HDAMLQQEgB3QiBCAHQeABcUEFdkECdCIGIAhBsK4Gai0AAEEFdHJB0J4GaigCAHENAUETIQUgCEGwsAZqLQAAQQV0IAZyQdCeBmooAgAgBHFFDQYMAQtBEyEFCyAAQcgAaiEGIAFBAmohAAJAAkACQAJAAkADQCAFQSlGIQkgBUESRyEEA0AgAiAAIgFrIgdBAkgNBiABLQABIQACQAJAAkACQAJAAkACfyABLQAAIghFBEAgACAGai0AAAwBCyAIwCAAwBAoC0H/AXFBBmsOHwIDEAQEBBAQEAsQEBAQBAQBBQEBAQEQAAQQBAoJBAQQCyAAQQN2QRxxIAhBsLAGai0AAEEFdHJB0J4GaigCACAAdkEBcUUNDwsgAUECaiEADAQLIAdBAkYNEQwNCyAHQQRJDRAMDAsgAyABNgIAIAUPCyABQQJqIQAgCQRAQRMhBQwCCyAEDQALIAIgAGsiCEECSA0IIAEtAAMhBEETIQUCQAJAAkACQAJ/IAEtAAIiCUUEQCAEIAZqLQAADAELIAnAIATAECgLQf8BcSIHQRZrDggCBAICAgIEAQALIAdBBWsOAwoCBAMLIARBA3ZBHHEgCUGwsAZqLQAAQQV0ckHQngZqKAIAIAR2QQFxRQ0JCyABQQRqIQBBKSEFDAELCyAIQQJGDQwMBgsgCEEESQ0LDAULIAVBE0YNBiADIAFBAmo2AgBBIA8LIAVBE0YNBSADIAFBAmo2AgBBHw8LIAVBE0YNBCADIAFBAmo2AgBBHg8LQQAgBWshBgsgBg8LIAMgADYCAAwJC0F/DwsgAyABNgIADAcLIAMgATYCAAwGC0EAIQYgBUEESQ0BDAILQQAhBiAFQQJHDQELQX4PCyADIAQ2AgAgBg8LIAMgBDYCAEEYDwsgAyAENgIAQRAPC0EAC1gBAX8CQANAIAEoAgAiACACTw0BIAQgAygCACIFSwRAIAEgAEEBajYCACAALQAAIQAgAyADKAIAIgVBAWo2AgAgBSAAOgAADAELCyAEIAVHDQBBAg8LQQALkgEBAn8gASgCACIAIAIgAGtBfnEiBWohAiAEIAMoAgBrIAVIBEAgAkF+QQAgAkEBay0AAEH4AXFB2AFGIgYbaiECCwJAA0AgACACTw0BIAQgAygCACIFSwRAIAAvAAAhACADIAVBAmo2AgAgBSAAOwEAIAEgASgCAEECaiIANgIADAELCyAEIAVHDQBBAiEGCyAGC6YEAQR/IAEoAgAiACACIABrQX5xaiEIAn8DQEEAIAAgCE8NARogAC0AACIGwCECAkACQAJAAkACQCAALQABIgUOCAABAQEBAQEBAgsgAkEASA0AIAMoAgAiBSAERg0DIAMgBUEBajYCACAFIAI6AAAMAgtBAiAEIAMoAgAiB2tBAkgNBBogAyAHQQFqNgIAIAcgAkEGdkEDcSAFQQJ0ckHAAXI6AAAgAyADKAIAIgVBAWo2AgAgBSACQT9xQYABcjoAAAwBCyAFQdgBa0EETwRAIAQgAygCACIGa0EDSA0CIAMgBkEBajYCACAGIAVBBHZB4AFyOgAAIAMgAygCACIGQQFqNgIAIAYgBUECdEE8cSACQcABcUEGdnJBgAFyOgAAIAMgAygCACIFQQFqNgIAIAUgAkE/cUGAAXI6AAAMAQsgBCADKAIAIgdrQQRIDQFBASAIIABrQQRIDQMaIAMgB0EBajYCACAHIAVBAnRBDHEgBkEGdnJBAWoiBUECdkHwAXI6AAAgAyADKAIAIgdBAWo2AgAgByAFQQR0QTBxIAZBAnZBD3FyQYABcjoAACAALQADIQYgAC0AAiEFIAMgAygCACIHQQFqNgIAIAcgBkECdEEMcSACQQR0QTBxIAVBBnZyckGAAXI6AAAgAyADKAIAIgJBAWo2AgAgAiAFQT9xQYABcjoAACAAQQJqIQALIABBAmohAAwBCwtBAgsgASAANgIAC8wBAQd/IABByABqIQggAkECayEJQQEhBgJAA0AgCSABQQJqIgBrQQJIDQEgAS0AAiIEwCEFAkACQAJAAn8gASwAAyICRQRAIAQgCGotAAAMAQsgAiAFECgLQf8BcUEJayIHQRpLDQAgACEBQQEgB3QiCkHzj5c/cQ0DIApBgMAIcUUEQCAHQQxHDQEgBUEJRyACcg0EDAMLIAINAiAFQQBODQMMAQsgAg0BCyAAIQEgBEEkRiAEQcAARnINAQsLIAMgADYCAEEAIQYLIAYLtwIBAn8gAEHIAGohBQNAIAIgAWtBAk4EQCABLQAAIQACQAJAAkACQAJAAkACfyABLAABIgRFBEAgACAFai0AAAwBCyAEIADAECgLQf8BcUEFaw4GAAECBQQDBQsgAyADKAIEQQFqNgIEIAFBAmohAQwGCyADIAMoAgRBAWo2AgQgAUEDaiEBDAULIAMgAygCBEEBajYCBCABQQRqIQEMBAsgA0EANgIEIAMgAygCAEEBajYCACABQQJqIQEMAwsgAyADKAIAQQFqNgIAAn8gAiABQQJqIgBrQQJIBEAgAAwBCyABLQACIQQgAUEEaiAAAn8gASwAAyIARQRAIAQgBWotAAAMAQsgACAEwBAoC0EKRhsLIQEgA0EANgIEDAILIAMgAygCBEEBajYCBCABQQJqIQEMAQsLC5wCAAJAAkACQAJAIAIgAWtBAm1BAmsOAwABAgMLIAEtAAMNAiABLQACQfQARw0CIAEtAAENAkE8QT5BACABLQAAIgBB5wBGGyAAQewARhsPCyABLQABDQEgAS0AAEHhAEcNASABLQADDQEgAS0AAkHtAEcNASABLQAFDQEgAS0ABEHwAEcNAUEmDwsgAS0AAQ0AIAEtAAAiAEHhAEcEQCAAQfEARw0BIAEtAAMNASABLQACQfUARw0BIAEtAAUNASABLQAEQe8ARw0BIAEtAAcNASABLQAGQfQARw0BQSIPCyABLQADDQAgAS0AAkHwAEcNACABLQAFDQAgAS0ABEHvAEcNACABLQAHDQAgAS0ABkHzAEcNAEEnDwtBAAujAgECfyABQQRqIQACQAJAAkAgAS0ABQ0AIAAtAABB+ABHDQAgAUEGaiEAQQAhAQNAAkAgAC0AAQ0AIAAsAAAiAkH/AXEiA0E7Rg0DAn8CQAJAAkAgA0Ewaw43AAAAAAAAAAAAAAQEBAQEBAQBAQEBAQEEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAICAgICAgQLIAJBMGsgAUEEdHIMAgsgAUEEdCACakE3awwBCyABQQR0IAJqQdcAawsiAUH//8MATA0AQX8PCyAAQQJqIQAMAAsAC0EAIQEDQEF/IQJBfyEDIAAtAAFFBEAgACwAACIDQTtGDQILIABBAmohACABQQpsIANqQTBrIgFBgIDEAEgNAAsMAQsgARCpBCECCyACC9QFAQl/IABByABqIQpBASEFA0AgBSEGIAEiBy0AAiIAwCEJAn8gBywAAyILRQRAIAAgCmotAAAMAQsgCyAJECgLIQwgB0ECaiIAIQECQAJAAkACQAJAAkACQAJAAkACQAJAAkAgDEH/AXFBA2sOGwYMAAECDAgICQQFDAwMCQwMDAcDDAMMDAwMAwwLIAYNC0EBIQUgAiAETA0LIAMgBEEEdGoiAEEBOgAMIAAgATYCAAwLCyAHQQNqIQEgBg0KQQEhBSACIARMDQogAyAEQQR0aiIGQQE6AAwgBiAANgIADAoLAkAgBg0AQQEhBSACIARMDQAgAyAEQQR0aiIBQQE6AAwgASAANgIACyAHQQRqIQEMCQsgBg0IQQEhBSACIARMDQggAyAEQQR0aiIAQQE6AAwgACABNgIADAgLIAZBAkcEQEEMIQhBAiEFIAIgBEwNCCADIARBBHRqIAdBBGo2AgQMCAtBAiEFIAhBDEcNByACIARKBEAgAyAEQQR0aiAANgIICyAEQQFqIQRBDCEIDAYLIAZBAkcEQEENIQhBAiEFIAIgBEwNByADIARBBHRqIAdBBGo2AgQMBwtBAiEFIAhBDUcNBiACIARKBEAgAyAEQQR0aiAANgIICyAEQQFqIQRBDSEIDAULIAIgBEwNBSADIARBBHRqQQA6AAwMAwtBACEFAkAgBkEBaw4CBQADC0ECIQUgAiAETA0EIAMgBEEEdGoiBi0ADEUNBAJAIAsNACAAIAYoAgRGIAlBIEdyDQAgBy0ABCIJwCEBAn8gBywABSIHRQRAIAFBIEYNAiAJIApqLQAADAELIAcgARAoCyAAIQEgCEcNBQsgBkEAOgAMIAAhAQwEC0EAIQUCQCAGQQFrDgIEAAILQQIhBSACIARMDQMgAyAEQQR0akEAOgAMDAMLQQIhBSAGQQJGDQIgBA8LIAYhBQwBC0EAIQUMAAsAC1oBAn8gAEHIAGohAgNAIAEtAAAhAAJ/IAEsAAEiA0UEQCAAIAJqLQAADAELIAMgAMAQKAtB/wFxIgBBFUtBASAAdEGAjIABcUVyRQRAIAFBAmohAQwBCwsgAQtvAQN/IABByABqIQMgASEAA0AgAC0AACECAn8gACwAASIERQRAIAIgA2otAAAMAQsgBCACwBAoC0EFa0H/AXEiAkEZT0GHgPgLIAJ2QQFxRXJFBEAgACACQQJ0QZzOBmooAgBqIQAMAQsLIAAgAWsLTAEBfwJAA0AgAy0AACIEBEBBACEAIAIgAWtBAkgNAiABLQABDQIgAS0AACAERw0CIANBAWohAyABQQJqIQEMAQsLIAEgAkYhAAsgAAvVAgEEfyABIAJPBEBBfA8LIAIgAWtBAkgEQEF/DwsgAEHIAGohByABIQQCQANAIAIgBGtBAkgNASAELQAAIQUCfyAELAABIgZFBEAgBSAHai0AAAwBCyAGIAXAECgLIQVBAiEGAkACQAJAAkACQAJAAkACQCAFQf8BcSIFQQNrDggCBgYAAQYEAwULQQMhBgwFC0EEIQYMBAsgASAERw0GIAAgBEECaiACIAMQwAUPCyABIARHDQUgAyAEQQJqNgIAQQcPCyABIARHDQQgAiAEQQJqIgFrQQJIBEBBfQ8LIAQtAAIhACADIARBBGogAQJ/IAQsAAMiAkUEQCAAIAdqLQAADAELIAIgAMAQKAtBCkYbNgIAQQcPCyAFQR5GDQELIAQgBmohBAwBCwsgASAERw0AIAAgBEECaiACIAMQ2gwiAEEAIABBFkcbDwsgAyAENgIAQQYL1wIBBH8gASACTwRAQXwPCyACIAFrQQJIBEBBfw8LIABByABqIQcgASEEAkADQCACIARrQQJIDQEgBC0AACEFAn8gBCwAASIGRQRAIAUgB2otAAAMAQsgBiAFwBAoCyEFQQIhBgJAAkACQAJAAkACQAJAAkACQCAFQf8BcSIFQQJrDgkDAgcHAAEHBQQGC0EDIQYMBgtBBCEGDAULIAEgBEcNByAAIARBAmogAiADEMAFDwsgAyAENgIAQQAPCyABIARHDQUgAyAEQQJqNgIAQQcPCyABIARHDQQgAiAEQQJqIgFrQQJIBEBBfQ8LIAQtAAIhACADIARBBGogAQJ/IAQsAAMiAkUEQCAAIAdqLQAADAELIAIgAMAQKAtBCkYbNgIAQQcPCyAFQRVGDQELIAQgBmohBAwBCwsgASAERw0AIAMgBEECajYCAEEnDwsgAyAENgIAQQYLiwMBBH8jAEEQayIDJAAgA0EANgIMIANBADYCCBCKBiEEEO4NEO0NEOoNAkAgBCAAIAIQiQYNACADQQxqIQYjAEEQayIFJAACQCAEIAEQkQZFBEAgBSAEQQMgARD2AzYCBCAFIAE2AgBBx+MDIAUQMUF/IQIMAQsgBCgCnAEiASABIAEoAjQQ3AQ2AjgCQCAAQewlQQBBARAuBEAgACgCECgCCA0BCyABLQCbAUEEcQ0AQfSiBEEAEDFBfyECDAELAkAgBgRAIAZBgCAQQiICNgIAIAINAQtB1P8AQQAQMUF/IQIMAQsgAUKAIDcCLCABIAI2AiggBCAAELUIIQIgARD6AyACRQRAIAYgASgCKDYCACADIAEoAjA2AggLIAQQ9wMLIAVBEGokACACRQ0AIAMoAgwQFyADQQA2AgwLIAAEQCAAQewlQQBBARAuBEAgACgCECgClAEiAQRAIAAgAREBACAAKAIQQQA2ApQBCyAAEJsPCwsgBBCTBiAEEJIGIAMoAgwgA0EQaiQAC/MCAQR/IAEgAiABayIEQX5xaiACIARBAXEbIQQgAEHIAGohBwJAA0AgBCABIgJrIgZBAkgNASACLQAAIQACfyACLAABIgFFBEAgACAHai0AAAwBCyABIADAECgLIQFBACEAAkACQAJAAkACQAJAAkACQCABQf8BcQ4JBAQCBgMGAAEEBgsgBkECRg0GIAJBA2ohAQwHCyAGQQRJDQUgAkEEaiEBDAYLIAQgAkECaiIBa0ECSA0GIAItAAMNBSABLQAAQSFHDQUgBCACQQRqIgFrQQJIDQYgAi0ABQ0FIAEtAABB2wBHDQUgAkEGaiEBIAVBAWohBQwFCyAEIAJBAmoiAWtBAkgNBSACLQADDQQgAS0AAEHdAEcNBCAEIAJBBGoiAWtBAkgNBSACLQAFDQQgAS0AAEE+Rw0EIAJBBmohASAFDQFBKiEAIAEhAgsgAyACNgIAIAAPCyAFQQFrIQUMAgsgAkECaiEBDAELC0F+DwtBfwuYBAEEfyABIAJPBEBBfA8LAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkAgAiABayIEQQFxBEAgBEF+cSICRQ0BIAEgAmohAgsCQAJAAn8gASwAASIERQRAIAAgAS0AAGotAEgMAQsgBCABLAAAECgLQf8BcQ4LDAwHBwAEBQYMAQkHC0F/IQUgAiABQQJqIgRrQQJIDQwgAS0AAw0HIAQtAABB3QBHDQcgAiABQQRqa0ECSA0MIAEtAAUNByABLQAEQT5HDQcgAUEGaiEBQSghBQwLCyACIAFBAmoiBGtBAk4NAQtBfw8LIAFBBGogBAJ/IAEsAAMiAkUEQCAAIAQtAABqLQBIDAELIAIgBCwAABAoC0EKRhsMBgsgAiABa0ECSA0JIAFBAmohBAwDCyACIAFrQQNIDQggAUEDaiEEDAILIAIgAWtBBEgNByABQQRqIQQMAQsgAUECaiEECyAAQcgAaiEHQQYhBQNAIAIgBGsiBkECSA0DIAQtAAAhAAJ/IAQsAAEiAUUEQCAAIAdqLQAADAELIAEgAMAQKAshAUECIQACQCABQf8BcSIBQQpLDQACQCABQQZHBEAgAUEHRg0BQQEgAXRBkw5xDQYMAgtBAyEAIAZBAkYNBQwBC0EEIQAgBkEESQ0ECyAAIARqIQQMAAsACyABQQJqCyEBQQchBQwBCyAEIQELIAMgATYCAAsgBQ8LQX4L1xoBCn8jAEEQayILJAACQCABIAJPBEBBfCEHDAELAkACQAJAAkACQAJAAkACQCACIAFrIgVBAXEEQCAFQX5xIgJFDQEgASACaiECCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/IAEsAAEiBUUEQCAAIAEtAABqLQBIDAELIAUgASwAABAoC0H/AXEOCwgIAAEEBQYHCAIDCQtBfyEHIAIgAUECaiIJayIFQQJIDQ4CQAJAAkACQAJAAkACQAJ/IAEtAAMiBEUEQCAAIAEtAAIiBmotAEgMAQsgBMAgASwAAiIGECgLQf8BcSIIQQVrDhQcAQIcHBwcHBwcBAMFHBwcHAYcBgALIAhBHUcNGyAGQQN2QRxxIARBsK4Gai0AAEEFdHJB0J4GaigCACAGdkEBcQ0FDBsLIAVBAkcNGgwZCyAFQQRPDRkMGAsgAiABQQRqIgVrQQJIDRkCQAJ/IAEsAAUiBEUEQCAAIAEtAARqLQBIDAELIAQgASwABBAoC0H/AXEiBEEURwRAIARBG0cNASAAIAFBBmogAiADENwMIQcMGwsgAiABQQZqIgRrQQxIDRogAUESaiECQQAhAQNAIAFBBkYEQEEIIQcMGQtBACEHIAQtAAENFyAELQAAIAFBzL4Gai0AAEcNFyAEQQJqIQQgAUEBaiEBDAALAAsgAyAFNgIAQQAhBwwZCyAAIAFBBGogAiADENsMIQcMGAsgAiABQQRqIgRrIgZBAkgND0EAIQcCQAJ/IAEtAAUiCEUEQCAAIAQtAAAiBWotAEgMAQsgCMAgBCwAACIFECgLQf8BcSIBQQZrDgISEQALAkACQCABQRZrDgMBFAEACyABQR1HDRMgBUEDdkEccSAIQbCuBmotAABBBXRyQdCeBmooAgAgBXZBAXFFDRMLIABByABqIQYCfwJAAkACQANAIAIgBCIAQQJqIgRrIghBAkgNFCAALQACIQECQAJAAn8gAC0AAyIJRQRAIAEgBmotAAAMAQsgCcAgAcAQKAtB/wFxQQZrDhgBAxkEBAUZGRkZGRkZGRkEAgICAgICGQAZCyABQQN2QRxxIAlBsLAGai0AAEEFdHJB0J4GaigCACABdkEBcQ0BDBgLCyAIQQJGDRkMFgsgCEEESQ0YDBULA0AgAiAEIgFBAmoiBGtBAkgNEiABLQACIQACQAJAAn8gASwAAyIFRQRAIAAgBmotAAAMAQsgBSAAwBAoC0H/AXEiAEEJaw4DAgIBAAsgAEEVRg0BDBYLCyABQQRqDAELIABBBGoLIQRBBSEHDBILIABByABqIQkgAUEEaiEBQQAhBgNAIAIgAWsiCkECSA0XIAEtAAAhBEECIQUCQAJAAkACQAJAAkACQAJAAn8gAS0AASIMRQRAIAQgCWotAAAMAQsgDMAgBMAQKAtB/wFxQQZrDhgBAhYEBAUWFhYWFgYWFhYEBwMHBwcHFgAWCyAEQQN2QRxxIAxBsLAGai0AAEEFdHJB0J4GaigCACAEdkEBcQ0GDBULIApBAkYNGwwUCyAKQQRJDRoMEwsgBg0SIAIgAUECaiINayIKQQJIDRsgAS0AAiEEQQEhBkEEIQUCQAJ/IAEtAAMiDEUEQCAEIAlqLQAADAELIAzAIATAECgLQf8BcSIIQRZrDgMEEgQACwJAAkAgCEEdRwRAIAhBBmsOAgECFAsgBEEDdkEccSAMQbCuBmotAABBBXRyQdCeBmooAgAgBHZBAXENBQwTCyAKQQJGDRoMEgsgCkEESQ0ZDBELAkACQAJAA0AgAiABIgRBAmoiAWsiBkECSA0eIAQtAAIhBQJAAn8gBC0AAyIKRQRAIAUgCWotAAAMAQsgCsAgBcAQKAtB/wFxQQZrDhgDBBYBAQUWFhYWFgYWFhYBAhYCFhYWFgAWCwsgBUEDdkEccSAKQbCuBmotAABBBXRyQdCeBmooAgAgBXZBAXFFDRQLQQAhCgJAAkACQANAIARBBGohBAJAAkACQAJAAkACQANAIAsgBDYCDEF/IQcgAiAEayIMQQJIDScgBC0AACEBIAQhBUEAIQYCQAJAAkACfyAELQABIg1FBEAgASAJai0AAAwBCyANwCABwBAoC0H/AXFBBmsOGAIEHwgIHx8fCR8fHx8fHwgBBQEBAQEfAB8LIAFBA3ZBHHEgDUGwsAZqLQAAQQV0ckHQngZqKAIAIAF2QQFxRQ0FCyAEQQJqIQQMAQsLIAxBAkYNJAwbCyAMQQRJDSMMGgsgCkUNAQsgBCEFDBcLIAsgBEECaiIFNgIMIAIgBWsiCEECSA0iIAQtAAIhAUEBIQoCQAJ/IAQtAAMiDEUEQCABIAlqLQAADAELIAzAIAHAECgLQf8BcSIHQRZrDgMDGAMACwJAAkAgB0EdRwRAIAdBBmsOAgECGgsgAUEDdkEccSAMQbCuBmotAABBBXRyQdCeBmooAgAgAXZBAXENBAwZCyAIQQJGDSEMGAsgCEEESQ0gDBcLA0AgAiAEQQJqIgVrQQJIDSIgBC0AAiEBAn8gBCwAAyIERQRAIAEgCWotAAAMAQsgBCABwBAoCyIBQQ5HBEAgAUH/AXEiAUEVSw0XIAUhBEEBIAF0QYCMgAFxRQ0XDAELCyALIAU2AgwgBSEECwNAIAIgBEECaiIFa0ECSA0hIAQtAAIhAQJ/IAQsAAMiBkUEQCABIAlqLQAADAELIAYgAcAQKAsiAUH+AXFBDEcEQCABQf8BcSIBQRVLDRYgBSEEQQEgAXRBgIyAAXFFDRYMAQsLIARBBGohBQNAIAsgBTYCDAJAAkADQCACIAVrIghBAkgNJCAFLQAAIQQCfyAFLAABIgZFBEAgBCAJai0AAAwBCyAGIATAECgLIgQgAUYNAkEAIQYCQAJAAkAgBEH/AXEOCRwcHAIEBAABHAQLIAhBAkYNJCAFQQNqIQUMBQsgCEEESQ0jIAVBBGohBQwECyAAIAVBAmogAiALQQxqEMAFIgVBAEoEQCALKAIMIQUMAQsLIAUiBw0jIAsoAgwhBQwXCyAFQQJqIQUMAQsLIAsgBUECaiIBNgIMIAIgAWtBAkgNICAFLQACIQQCfyAFLAADIgZFBEAgBCAJai0AAAwBCyAGIATAECgLIQggBSEEIAEhBUEAIQYCQAJAIAhB/wFxIgFBCWsOCQEBBBcXFxcXBQALIAFBFUYNAAwVCwJAA0AgAiAFIgRBAmoiBWsiCEECSA0iIAQtAAIhAQJ/IAQsAAMiBkUEQCABIAlqLQAADAELIAYgAcAQKAshAUEAIQpBACEGAkAgAUH/AXFBBmsOGAIEGAEBBRgYGBgYBhgYGAEDGAMYGBgYABgLCyALIAU2AgwgBC0AAiIBQQN2QRxxIAQtAANBsK4Gai0AAEEFdHJB0J4GaigCACABdkEBcQ0BDBYLCyAIQQJGDR0MFAsgCEEESQ0cDBMLIARBBGohBUEBIQYMEgsgCyAFQQJqIgA2AgwgAiAAa0ECSA0cIAUtAAMEQCAAIQUMEQsgBUEEaiAAIAUtAAJBPkYiABshBUEDQQAgABshBgwRCyAGQQJGDRkMEgsgBkEESQ0YDBELQQIhByADIAFBAmo2AgAMGQsgAiABQQJqIgBrQQJIDRgCQCABLQADRQRAIAEtAAJBPkYNAQsgAyAANgIAQQAhBwwZC0EEIQcgAyABQQRqNgIADBgLIAEgBWohAQwACwALIAAgAUECaiACIAMQwAUhBwwVCyACIAFBAmoiBWtBAkgEQEF9IQcMFQsgAyABQQRqIAUCfyABLAADIgJFBEAgACAFLQAAai0ASAwBCyACIAUsAAAQKAtBCkYbNgIAQQchBwwUCyADIAFBAmo2AgBBByEHDBMLQXshByACIAFBAmoiBGtBAkgNEiABLQADDQUgBC0AAEHdAEcNBSACIAFBBGoiBWtBAkgNEiABLQAFDQUgAS0ABEE+Rw0FIAMgBTYCAEEAIQcMEgsgAiABa0ECSA0PIAFBAmohBAwECyACIAFrQQNIDQ4gAUEDaiEEDAMLIAIgAWtBBEgNDSABQQRqIQQMAgsgAyABNgIADA4LIAFBAmohBAsgAEHIAGohBwNAAkAgAiAEIgBrIgFBAkgNACAELQAAIQUCQAJAAkACQAJ/IAQsAAEiBEUEQCAFIAdqLQAADAELIAQgBcAQKAtB/wFxDgsEBAQEAgMAAQQEBAMLIAFBAkYNAyAAQQNqIQQMBAsgAUEDTQ0CIABBBGohBAwDCyABQQRJDQEgAEECaiEEIAAtAAMNAiAELQAAQd0ARw0CIAFBBkkNASAALQAFDQIgAC0ABEE+Rw0CIAMgAEEEajYCAEEAIQcMDwsgAEECaiEEDAELCyADIAA2AgBBBiEHDAwLQQAhBgsgAyAFNgIAIAYhBwwKCyADIA02AgBBACEHDAkLIAMgATYCAEEAIQcMCAtBfyEHDAcLIAZBBEkNBAwBCyAGQQJGDQMLIAMgBDYCAAwECyAEIQILIAMgAjYCAAwCC0F+IQcMAQsgAyAJNgIAQQAhBwsgC0EQaiQAIAcLshEBBn8gASACTwRAQXwPCwJAAkACQAJAAkACQAJAAkACQAJAIAIgAWsiBEEBcQRAIARBfnEiAkUNASABIAJqIQILQX4hBkESIQUCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/IAEtAAEiCEUEQCAAIAEtAAAiB2otAEgMAQsgCMAgASwAACIHECgLQf8BcUECaw4jAhgIDg8QGAMEDAABGBgYGBgNBwQTEhMSEhIYEQUJChgYBgsYC0EMIAAgAUECaiACIAMQ3QwPC0ENIAAgAUECaiACIAMQ3QwPC0F/IQYgAiABQQJqIgVrQQJIDRECQAJAAkACQAJAAn8gASwAAyIERQRAIAAgAS0AAmotAEgMAQsgBCABLAACECgLQf8BcSIEQQ9rDgoDAgQEBAQEAQQBAAsgBEEFa0EDSQ0AIARBHUcNAwsgAyABNgIAQR0PCyACIAFBBGoiBGtBAkgNEwJAAkACQAJAAn8gASwABSIFRQRAIAAgBC0AAGotAEgMAQsgBSAELAAAECgLQf8BcUEUaw4IAQMCAwIDAwADCyAAIAFBBmogAiADENwMDwsgAyABQQZqNgIAQSEPCyAAQcgAaiEFAkADQCACIAQiAUECaiIEayIHQQJIDRYgAS0AAiEAAkACfyABLAADIghFBEAgACAFai0AAAwBCyAIIADAECgLQf8BcSIAQRVrDgohAQMBAwMDAwMAAgsLIAdBBEkNFSABLQAEIQACfyABLAAFIgFFBEAgACAFai0AAAwBCyABIADAECgLQf8BcSIAQR5LDR9BASAAdEGAjICBBHENAQwfCyAAQQlrQQJJDR4LIAMgBDYCAAweCyAAIAFBBGogAiADENsMDwsgAyAFNgIADBwLIAFBAmogAkcNACADIAI2AgBBcQ8LIABByABqIQUDQAJAIAIgASIAQQJqIgFrQQJIDQAgAC0AAiEEAkACQAJ/IAAsAAMiBkUEQCAEIAVqLQAADAELIAYgBMAQKAtB/wFxIgRBCWsOAgEDAAsgBEEVRg0CDAELIABBBGogAkcNAQsLIAMgATYCAEEPDwsgACABQQJqIAIgAxDaDA8LIAMgAUECajYCAEEmDwsgAyABQQJqNgIAQRkPCyACIAFBAmoiAGsiAkECSARAQWYPCwJAIAEtAAMNACABLQACQd0ARw0AIAJBBEkNDiABLQAFDQAgAS0ABEE+Rw0AIAMgAUEGajYCAEEiDwsgAyAANgIAQRoPCyADIAFBAmo2AgBBFw8LIAIgAUECaiIEa0ECSARAQWgPCwJAAkACQAJAAkACQAJ/IAEsAAMiAkUEQCAAIAEtAAJqLQBIDAELIAIgASwAAhAoC0H/AXEiAEEgaw4FGAEDGBgACyAAQQlrDgcXFxcEBAQBAwsgAyABQQRqNgIAQSQPCyADIAFBBGo2AgBBIw8LIAMgAUEEajYCAEElDwsgAEEVRg0TCyADIAQ2AgAMFAsgAyABQQJqNgIAQRUPCyADIAFBAmo2AgBBEQ8LIAIgAUECaiIEayIFQQJIDQgCQAJ/IAEtAAMiCEUEQCAAIAQtAAAiB2otAEgMAQsgCMAgBCwAACIHECgLQf8BcSIBQQZrDgINDAALQQAhBgJAAkACQCABQRZrDgMBEQEACyABQR1HDQEgB0EDdkEccSAIQbCuBmotAABBBXRyQdCeBmooAgAgB3ZBAXFFDQELIABByABqIQgDQCACIAQiAEECaiIEayIHQQJIBEBBbA8LIAAtAAIhBUEUIQYCQAJAAkACfyAALQADIgBFBEAgBSAIai0AAAwBCyAAwCAFwBAoC0H/AXFBBmsOHwABBBMTEwQEBAQEBAQEBBMDBAMDAwMEAhMEEwQEBBMEC0EAIQYgB0ECRg0RDBILQQAhBiAHQQRJDRAMEQsgBUEDdkEccSAAQbCwBmotAABBBXRyQdCeBmooAgAgBXZBAXENAAsLQQAhBgwOCyACIAFrQQJIDQUMCQsgAiABa0EDTg0IDAQLIAIgAWtBBE4NBwwDC0EBIAd0IgQgB0HgAXFBBXZBAnQiBiAIQbCuBmotAABBBXRyQdCeBmooAgBxDQFBEyEFIAhBsLAGai0AAEEFdCAGckHQngZqKAIAIARxRQ0GDAELQRMhBQsgAEHIAGohBiABQQJqIQACQAJAAkACQAJAA0AgBUEpRiEJIAVBEkchBANAIAIgACIBayIHQQJIDQYgAS0AACEAAkACQAJAAkACQAJAAn8gAS0AASIIRQRAIAAgBmotAAAMAQsgCMAgAMAQKAtB/wFxQQZrDh8CAxAEBAQQEBALEBAQEAQEAQUBAQEBEAAEEAQKCQQEEAsgAEEDdkEccSAIQbCwBmotAABBBXRyQdCeBmooAgAgAHZBAXFFDQ8LIAFBAmohAAwECyAHQQJGDREMDQsgB0EESQ0QDAwLIAMgATYCACAFDwsgAUECaiEAIAkEQEETIQUMAgsgBA0ACyACIABrIghBAkgNCCABLQACIQRBEyEFAkACQAJAAkACfyABLQADIglFBEAgBCAGai0AAAwBCyAJwCAEwBAoC0H/AXEiB0EWaw4IAgQCAgICBAEACyAHQQVrDgMKAgQDCyAEQQN2QRxxIAlBsLAGai0AAEEFdHJB0J4GaigCACAEdkEBcUUNCQsgAUEEaiEAQSkhBQwBCwsgCEECRg0MDAYLIAhBBEkNCwwFCyAFQRNGDQYgAyABQQJqNgIAQSAPCyAFQRNGDQUgAyABQQJqNgIAQR8PCyAFQRNGDQQgAyABQQJqNgIAQR4PC0EAIAVrIQYLIAYPCyADIAA2AgAMCQtBfw8LIAMgATYCAAwHCyADIAE2AgAMBgtBACEGIAVBBEkNAQwCC0EAIQYgBUECRw0BC0F+DwsgAyAENgIAIAYPCyADIAQ2AgBBGA8LIAMgBDYCAEEQDwtBAAtgAQF/QQEhAAJAIAEsAANBv39KDQAgASwAAkG/f0oNACABLQABIQIgAS0AACIBQfABRgRAIAJBQGtB/wFxQdABSQ8LIALAQQBODQAgAkGPAUG/ASABQfQBRhtLIQALIAALmwEBA39BASECAkAgASwAAiIDQQBODQACQAJAAkAgAS0AACIEQe8BRgRAQb8BIQAgAS0AASIBQb8BRw0BIANBvX9NDQMMBAsgA0G/f0sNAyABLQABIQAgBEHgAUcNASAAQUBrQf8BcUHgAUkPCyABIQAgA0G/f0sNAgsgAMBBAE4NAQsgAEH/AXFBnwFBvwEgBEHtAUYbSyECCyACCyoAQQEhAAJAIAEtAABBwgFJDQAgASwAASIBQQBODQAgAUG/f0shAAsgAAsNACAAIAFBsK4GENcKCw0AIAAgAUGwrgYQ2AoLDQAgACABQbCwBhDXCgsNACAAIAFBsLAGENgKC+QCAQV/IABByABqIQcgASgCACEAIAMoAgAhBQJ/AkADQCAEIAVNIAAgAk9yRQRAAkACQAJAAkAgByAALQAAIgZqLQAAQQVrDgMAAQIDCyACIABrQQJIDQUgBSAALQABQT9xIAZBH3FBBnRyOwEAIABBAmohACAFQQJqIQUMBAsgAiAAa0EDSA0EIAUgAC0AAkE/cSAALQABQT9xQQZ0IAZBDHRycjsBACAAQQNqIQAgBUECaiEFDAMLQQIgBCAFa0EDSA0EGiACIABrQQRIDQMgAC0AASEIIAUgAC0AAkE/cUEGdCIJIAAtAANBP3FyQYC4A3I7AQIgBSAGQQdxQRJ0IAhBP3FBDHRyIAlyQYCA/AdqQQp2QYCwA3I7AQAgAEEEaiEAIAVBBGohBQwCCyAFIAbAOwEAIAVBAmohBSAAQQFqIQAMAQsLIAAgAklBAXQMAQtBAQsgASAANgIAIAMgBTYCAAutAgEHfyMAQRBrIgAkACAAIAI2AgwgAiABKAIAIgZrIgogBCADKAIAIgtrIglKBEAgACAGIAlqIgI2AgwLIAYhBCAAKAIMIQYDQAJAAkACQAJAIAYiBSAETQ0AAkAgBUEBayIGLQAAIghB+AFxQfABRgRAIAdBA2tBe00NAQwDCyAIQfABcUHgAUYEQCAHQQJrQXxLDQMgBUECaiEFDAILIAhB4AFxQcABRgRAIAdBAWtBfUsNAyAFQQFqIQUMAgsgCMBBAE4NAQwDCyAFQQNqIQULIAAgBTYCDAwCC0EAIQcLIAdBAWohBwwBCwsgCyAEIAAoAgwiBiAEayIEECAaIAEgASgCACAEajYCACADIAMoAgAgBGo2AgAgAEEQaiQAQQIgAiAGSyAJIApIGwtYAQF/AkADQCABKAIAIgAgAk8NASAEIAMoAgAiBUsEQCABIABBAWo2AgAgAC0AACEAIAMgAygCACIFQQJqNgIAIAUgADsBAAwBCwsgBCAFRw0AQQIPC0EAC7QBAQJ/A0AgAiABKAIAIgVGBEBBAA8LIAMoAgAhAAJAAkAgBSwAACIGQQBIBEAgBCAAa0ECSA0BIAMgAEEBajYCACAAIAZBwAFxQQZ2QcABcjoAACADIAMoAgAiAEEBajYCACAAIAZBvwFxOgAAIAEgASgCAEEBajYCAAwDCyAAIARHDQELQQIPCyABIAVBAWo2AgAgBS0AACEAIAMgAygCACIFQQFqNgIAIAUgADoAAAwACwALmgEBBX8gAEHIAGohBiACQQFrIQdBASECAkADQCAHIAFBAWoiAWtBAEwNAQJAAkAgBiABLQAAIgBqLQAAQQlrIgRBGksNAEEBIAR0IghB84+XP3ENAiAAwCEFIAhBgMAIcUUEQCAEQQxHDQEgBUEJRw0DDAILIAVBAE4NAgsgAEEkRiAAQcAARnINAQsLIAMgATYCAEEAIQILIAILxQEAAkACQAJAAkAgAiABa0ECaw4DAAECAwsgAS0AAUH0AEcNAkE8QT5BACABLQAAIgBB5wBGGyAAQewARhsPCyABLQAAQeEARw0BIAEtAAFB7QBHDQEgAS0AAkHwAEcNAUEmDwsgAS0AACIAQeEARwRAIABB8QBHDQEgAS0AAUH1AEcNASABLQACQe8ARw0BIAEtAANB9ABHDQFBIg8LIAEtAAFB8ABHDQAgAS0AAkHvAEcNACABLQADQfMARw0AQScPC0EAC4ACAQJ/AkACQCABLQACIgBB+ABHBEAgAUECaiECQQAhAQNAIABB/wFxQTtGDQIgAMAgAUEKbGpBMGsiAUH//8MASg0DIAItAAEhACACQQFqIQIMAAsACyABQQNqIQBBACEBA0AgAC0AACIDwCECAkACfwJAAkACQCADQTBrDjcAAAAAAAAAAAAABAYEBAQEBAEBAQEBAQQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgICAgICBAsgAkEwayABQQR0cgwCCyABQQR0IAJqQTdrDAELIAFBBHQgAmpB1wBrCyIBQf//wwBKDQMLIABBAWohAAwACwALIAEQqQQPC0F/C5UFAQZ/IABByABqIQhBASEAA0AgACEFIAEiBkEBaiEBAkACQAJAAkACQAJAAkACQAJAAkACQCAIIAYtAAEiCWotAABBA2sOGwYLAAECCwgICQQFCwsLCQsLCwcDCwMLCwsLAwsLAkAgBQ0AQQEhACACIARMDQAgAyAEQQR0aiIFQQE6AAwgBSABNgIACyAGQQJqIQEMCgsCQCAFDQBBASEAIAIgBEwNACADIARBBHRqIgVBAToADCAFIAE2AgALIAZBA2ohAQwJCwJAIAUNAEEBIQAgAiAETA0AIAMgBEEEdGoiBUEBOgAMIAUgATYCAAsgBkEEaiEBDAgLIAUNB0EBIQAgAiAETA0HIAMgBEEEdGoiBUEBOgAMIAUgATYCAAwHCyAFQQJHBEBBDCEHQQIhACACIARMDQcgAyAEQQR0aiAGQQJqNgIEDAcLQQIhACAHQQxHDQYgAiAESgRAIAMgBEEEdGogATYCCAsgBEEBaiEEQQwhB0EAIQAMBgsgBUECRwRAQQ0hB0ECIQAgAiAETA0GIAMgBEEEdGogBkECajYCBAwGC0ECIQAgB0ENRw0FIAIgBEoEQCADIARBBHRqIAE2AggLIARBAWohBEENIQdBACEADAULIAIgBEwNBCADIARBBHRqQQA6AAwMAwtBACEAAkAgBUEBaw4CBAADC0ECIQAgAiAETA0DIAMgBEEEdGoiBS0ADEUNAwJAIAlBIEcNACABIAUoAgRGDQAgBi0AAiIGQSBGDQAgByAGIAhqLQAARw0ECyAFQQA6AAwMAwtBACEAAkAgBUEBaw4CAwACC0ECIQAgAiAETA0CIAMgBEEEdGpBADoADAwCC0ECIQAgBUECRg0BIAQPCyAFIQAMAAsACzsBAX8gAEHIAGohAANAIAAgAS0AAGotAAAiAkEVS0EBIAJ0QYCMgAFxRXJFBEAgAUEBaiEBDAELCyABC1QBAn8gAEHIAGohAyABIQADQCADIAAtAABqLQAAQQVrQf8BcSICQRlPQYeA+AsgAnZBAXFFckUEQCAAIAJBAnRBuM0GaigCAGohAAwBCwsgACABawtFAQF/AkADQCADLQAAIgQEQEEAIQAgAiABa0EATA0CIAEtAAAgBEcNAiADQQFqIQMgAUEBaiEBDAELCyABIAJGIQALIAALngIBBH8gASACTwRAQXwPCyACIAFrQQBMBEBBfw8LIABByABqIQYgASEEAkADQCACIARrQQBMDQFBAiEFAkACQAJAAkACQAJAAkACQAJAIAYgBC0AAGotAAAiB0EDaw4IAgYHAAEGBAMFC0EDIQUMBgtBBCEFDAULIAEgBEcNByAAIARBAWogAiADEMEFDwsgASAERw0GIAMgBEEBajYCAEEHDwsgASAERw0FIAIgBEEBaiIAa0EATARAQX0PCyADIARBAmogACAGIAQtAAFqLQAAQQpGGzYCAEEHDwsgB0EeRg0CC0EBIQULIAQgBWohBAwBCwsgASAERw0AIAAgBEEBaiACIAMQ4QwiAEEAIABBFkcbDwsgAyAENgIAQQYLnwIBA38gASACTwRAQXwPCyACIAFrQQBMBEBBfw8LIABByABqIQYgASEEA0ACQCACIARrQQBMDQBBAiEFAkACQAJAAkACQAJAAkACQAJAIAYgBC0AAGotAABBAmsOFAMCBwgAAQcFBAcHBwcHBwcHBwcGBwtBAyEFDAcLQQQhBQwGCyABIARHDQYgACAEQQFqIAIgAxDBBQ8LIAMgBDYCAEEADwsgASAERw0EIAMgBEEBajYCAEEHDwsgASAERw0DIAIgBEEBaiIAa0EATARAQX0PCyADIARBAmogACAGIAQtAAFqLQAAQQpGGzYCAEEHDwsgASAERw0CIAMgBEEBajYCAEEnDwtBASEFCyAEIAVqIQQMAQsLIAMgBDYCAEEGC9kCAQR/IABByABqIQcCQANAIAIgASIEayIBQQBMDQECQAJAAkACQAJAAkACQAJAAkAgByAELQAAai0AAA4JBQUDBwQAAQIFBwsgAUEBRg0HIAAgBCAAKALgAhEAAA0EIARBAmohAQwICyABQQNJDQYgACAEIAAoAuQCEQAADQMgBEEDaiEBDAcLIAFBBEkNBSAAIAQgACgC6AIRAAANAiAEQQRqIQEMBgsgAiAEQQFqIgFrQQBMDQYgAS0AAEEhRw0FIAIgBEECaiIBa0EATA0GIAEtAABB2wBHDQUgBEEDaiEBIAVBAWohBQwFCyACIARBAWoiAWtBAEwNBSABLQAAQd0ARw0EIAIgBEECaiIBa0EATA0FIAEtAABBPkcNBCAEQQNqIQEgBQ0BQSohBiABIQQLIAMgBDYCACAGDwsgBUEBayEFDAILIARBAWohAQwBCwtBfg8LQX8L4QMBBH8gASACTwRAQXwPCwJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAIABByABqIgcgAS0AAGotAAAOCwoKBgYAAwQFCgECBgtBfyEFIAIgAUEBaiIEa0EATA0KIAQtAABB3QBHDQYgAiABQQJqa0EATA0KIAEtAAJBPkcNBiABQQNqIQFBKCEFDAkLIAIgAUEBaiIAa0EASg0GQX8PCyABQQFqDAYLIAIgAWtBAkgNCCAAIAEgACgC4AIRAAANBiABQQJqIQQMAwsgAiABa0EDSA0HIAAgASAAKALkAhEAAA0FIAFBA2ohBAwCCyACIAFrQQRIDQYgACABIAAoAugCEQAADQQgAUEEaiEEDAELIAFBAWohBAsgBCEBA0BBBiEFIAIgAWsiBkEATA0DQQEhBAJAAkACQAJAIAcgAS0AAGotAAAOCwcHAwMHAAECBwcHAwsgBkEBRg0GIAAgASAAKALgAhEAAA0GQQIhBAwCCyAGQQNJDQUgACABIAAoAuQCEQAADQVBAyEEDAELIAZBBEkNBCAAIAEgACgC6AIRAAANBEEEIQQLIAEgBGohAQwACwALIAFBAmogACAHIAEtAAFqLQAAQQpGGwshAUEHIQULIAMgATYCAAsgBQ8LQX4LoRwBB38jAEEQayIJJAACQCABIAJPBEBBfCEGDAELAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEHIAGoiCCABLQAAai0AAA4LBQUACwcEAwIFCgkBC0EBIQdBfyEGIAIgAUEBaiIEayIFQQBMDRECQAJAAkACQCAIIAQtAABqLQAAQQVrDhQAAQIUFBQUFBQUEAMPFBQUFBIUEhQLIAVBAUYNEiAAIAQgACgC4AIRAAANEyAAIAQgACgC1AIRAABFDRNBAiEHDBELIAVBA0kNESAAIAQgACgC5AIRAAANEiAAIAQgACgC2AIRAABFDRJBAyEHDBALIAVBBEkNECAAIAQgACgC6AIRAAANESAAIAQgACgC3AIRAABFDRFBBCEHDA8LIAIgAUECaiIEa0EATA0SIAggAS0AAmotAAAiBkEURwRAIAZBG0cNDiAAIAFBA2ogAiADEOMMIQYMEwtBfyEGIAIgAUEDaiIAa0EGSA0SIAFBCWohAkEAIQEDQAJAIAFBBkYEf0EIBSAALQAAIAFBzL4Gai0AAEYNASAAIQJBAAshBiADIAI2AgAMFAsgAEEBaiEAIAFBAWohAQwACwALIAFBAWohBAwGCyACIAFrQQRIDQ0gACABIAAoAugCEQAADQIgAUEEaiEEDAULIAIgAWtBA0gNDCAAIAEgACgC5AIRAAANASABQQNqIQQMBAsgAiABa0ECSA0LIAAgASAAKALgAhEAAEUNAQsgAyABNgIADA0LIAFBAmohBAwBC0F7IQYgAiABQQFqIgRrQQBMDQsgBC0AAEHdAEcNACACIAFBAmoiB2tBAEwNCyABLQACQT5HDQAgAyAHNgIAQQAhBgwLCwNAAkAgAiAEIgFrIgZBAEwNAAJAAkACQAJAAkAgCCABLQAAai0AAA4LBQUFBQMAAQIFBQUECyAGQQFGDQQgACABIAAoAuACEQAADQQgAUECaiEEDAULIAZBA0kNAyAAIAEgACgC5AIRAAANAyABQQNqIQQMBAsgBkEESQ0CIAAgASAAKALoAhEAAA0CIAFBBGohBAwDCyAGQQFGDQEgAUEBaiEEIAEtAAFB3QBHDQIgBkEDSQ0BIAEtAAJBPkcNAiADIAFBAmo2AgBBACEGDA0LIAFBAWohBAwBCwsgAyABNgIAQQYhBgwKCyADIAFBAWo2AgBBByEGDAkLIAIgAUEBaiIAa0EATARAQX0hBgwJCyADIAFBAmogACAIIAEtAAFqLQAAQQpGGzYCAEEHIQYMCAsgACABQQFqIAIgAxDBBSEGDAcLQQEhBCACIAFBAmoiAWsiB0EATA0FQQAhBgJAAkACQAJAAkACQCAIIAEtAABqLQAAIgVBBWsOAwECAwALIAVBFmsOAwMEAwQLIAdBAUYNByAAIAEgACgC4AIRAAANAyAAIAEgACgC1AIRAABFDQNBAiEEDAILIAdBA0kNBiAAIAEgACgC5AIRAAANAiAAIAEgACgC2AIRAABFDQJBAyEEDAELIAdBBEkNBSAAIAEgACgC6AIRAAANASAAIAEgACgC3AIRAABFDQFBBCEECyABIARqIQEDQCACIAFrIgdBAEwNB0EBIQQCQAJ/AkACQAJAAkACQAJAIAggAS0AAGotAABBBWsOFwABAgkDAwQJCQkJCQkJCQkDBwcHBwcHCQsgB0EBRg0MIAAgASAAKALgAhEAAA0IIAAgASAAKALIAhEAAEUNCEECIQQMBgsgB0EDSQ0LIAAgASAAKALkAhEAAA0HIAAgASAAKALMAhEAAEUNB0EDIQQMBQsgB0EESQ0KIAAgASAAKALoAhEAAA0GIAAgASAAKALQAhEAAEUNBkEEIQQMBAsDQCACIAEiAEEBaiIBa0EATA0MAkAgCCABLQAAai0AACIEQQlrDgMBAQMACyAEQRVGDQALDAULIAFBAWoMAQsgAEECagshAUEFIQYMAgsgASAEaiEBDAALAAsgAyABNgIADAYLIAAgAUECaiACIAMQ4gwhBgwFCyADIAQ2AgBBACEGDAQLIAQgB2ohAUEAIQcDQCACIAFrIgVBAEwNBEEBIQQCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgCCABLQAAai0AAEEFaw4XAAECBQQEBwUFBQUFBgUFBQQLAwsLCwsFCyAFQQFGDQwgACABIAAoAuACEQAADQQgACABIAAoAsgCEQAARQ0EQQIhBAwKCyAFQQNJDQsgACABIAAoAuQCEQAADQMgACABIAAoAswCEQAARQ0DDAgLIAVBBEkNCiAAIAEgACgC6AIRAAANAiAAIAEgACgC0AIRAABFDQIMBgsgBw0BIAIgAUEBaiIFayIEQQBMDQxBASEHAkACQAJAAkAgCCAFLQAAai0AACIKQQVrDgMBAgMAC0ECIQQCQCAKQRZrDgMLCAsACwwHCyAEQQFGDQsgACAFIAAoAuACEQAADQYgACAFIAAoAtQCEQAADQgMBgsgBEEDSQ0KIAAgBSAAKALkAhEAAA0FIAAgBSAAKALYAhEAAA0GDAULIARBBEkNCSAAIAUgACgC6AIRAAANBCAAIAUgACgC3AIRAABFDQRBBSEEDAcLAkACQAJAA0AgAiABIgRBAWoiAWsiBUEATA0PQQIhBwJAIAggAS0AAGotAABBBWsOFAACAwUBAQcFBQUFBQYFBQUBBAUEBQsLIAVBAUYNCyAAIAEgACgC4AIRAAANAyAAIAEgACgC1AIRAABFDQNBAyEHDAILIAVBA0kNCiAAIAEgACgC5AIRAAANAiAAIAEgACgC2AIRAABFDQJBBCEHDAELIAVBBEkNCSAAIAEgACgC6AIRAAANASAAIAEgACgC3AIRAABFDQFBBSEHCyAJIAQgB2oiBDYCDEEAIQUDQEF/IQYgAiAEayIKQQBMDQxBACEHAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAggBCIBLQAAai0AAEEFaw4XAQIDCQcHCQkJCAkJCQkJCQcABAAAAAAJCyAJIARBAWoiBDYCDAwLCyAKQQFGDRMgACAEIAAoAuACEQAADQMgACAEIAAoAsgCEQAARQ0DIAkgBEECaiIENgIMDAoLIApBA0kNEiAAIAQgACgC5AIRAAANAiAAIAQgACgCzAIRAABFDQIgCSAEQQNqIgQ2AgwMCQsgCkEESQ0RIAAgBCAAKALoAhEAAA0BIAAgBCAAKALQAhEAAEUNASAJIARBBGoiBDYCDAwICyAFRQ0BCwwDCyAJIARBAWoiATYCDCACIAFrIgVBAEwNEQJAAkACQAJAIAggAS0AAGotAAAiBkEFaw4DAQIDAAsCQCAGQRZrDgMABgAGCyAEQQJqIQQMBwsgBUEBRg0QIAAgASAAKALgAhEAAA0EIAAgASAAKALUAhEAAEUNBCAEQQNqIQQMBgsgBUEDSQ0PIAAgASAAKALkAhEAAA0DIAAgASAAKALYAhEAAEUNAyAEQQRqIQQMBQsgBUEESQ0OIAAgASAAKALoAhEAAA0CIAAgASAAKALcAhEAAEUNAiAEQQVqIQQMBAsDQCACIAFBAWoiAWtBAEwNEQJAAkAgCCABLQAAai0AACIEQQlrDgYCAgQEBAEACyAEQRVGDQEMAwsLIAkgATYCDCABIQQLA0AgAiAEQQFqIgFrQQBMDRAgCCABLQAAai0AACIFQf4BcUEMRwRAIAVBFUsNAiABIQRBASAFdEGAjIABcQ0BDAILCyAEQQJqIQEDQCAJIAE2AgwCQAJAA0AgAiABayIEQQBMDRMgCCABLQAAai0AACIKIAVGDQICQAJAAkACQCAKDgkICAgDBQABAggFCyAEQQFGDRMgACABIAAoAuACEQAADQcgAUECaiEBDAYLIARBA0kNEiAAIAEgACgC5AIRAAANBiABQQNqIQEMBQsgBEEESQ0RIAAgASAAKALoAhEAAA0FIAFBBGohAQwECyAAIAFBAWogAiAJQQxqEMEFIgFBAEoEQCAJKAIMIQEMAQsLIAEiBg0SIAkoAgwhAQwDCyABQQFqIQEMAQsLIAkgAUEBaiIFNgIMIAIgBWtBAEwNDyABIQQCQAJAAkACQCAIIAUiAS0AAGotAAAiBUEJaw4JAQECBAQEBAQDAAsgBUEVRg0ADAMLAkACQAJAA0AgAiABIgRBAWoiAWsiBUEATA0VAkAgCCABLQAAai0AAEEFaw4UAgMEBwEBBQcHBwcHBgcHBwEABwAHCwsgBEECaiEEDAYLIAVBAUYNECAAIAEgACgC4AIRAAANBCAAIAEgACgC1AIRAABFDQQgBEEDaiEEDAULIAVBA0kNDyAAIAEgACgC5AIRAAANAyAAIAEgACgC2AIRAABFDQMgBEEEaiEEDAQLIAVBBEkNDiAAIAEgACgC6AIRAAANAiAAIAEgACgC3AIRAABFDQIgBEEFaiEEDAMLIARBAmohAUEBIQcMAQsgCSABQQFqIgA2AgwgAiAAa0EATA0PIAFBAmogACABLQABQT5GIgAbIQFBA0EAIAAbIQcLIAMgATYCACAHIQYMDgsgCSAENgIMQQAhBQwBCyAJIAQ2AgxBASEFDAALAAsgAyABNgIAQQAhBgwKCyACIAFBAWoiAGtBAEwNCSABLQABQT5HBEAgAyAANgIAQQAhBgwKCyADIAFBAmo2AgBBBCEGDAkLIAMgAUEBajYCAEECIQYMCAsgAyAFNgIAQQAhBgwHC0EEIQQMAQtBAyEECyABIARqIQEMAAsAC0F+IQYMAgsgAyAENgIAQQAhBgwBC0F/IQYLIAlBEGokACAGC6ERAQV/IAEgAk8EQEF8DwtBASEEQRIhBQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEHIAGoiByABLQAAai0AAEECaw4jAhcIDg8QFwMEDAABFxcXFxcNBwQVExUTExMXFwUJChcXBgsXC0EMIAAgAUEBaiACIAMQ5AwPC0ENIAAgAUEBaiACIAMQ5AwPC0F/IQUgAiABQQFqIgZrQQBMDRMCQAJAAkACQAJAIAcgAS0AAWotAAAiBEEPaw4KAwIEBAQEBAEEAQALIARBBWtBA0kNACAEQR1HDQMLIAMgATYCAEEdDwsgAiABQQJqIgRrQQBMDRUCQAJAAkACQCAHIAQtAABqLQAAQRRrDggBAwIDAgMDAAMLIAAgAUEDaiACIAMQ4wwPCyADIAFBA2o2AgBBIQ8LAkADQCACIAQiAEEBaiIEayIBQQBMDRgCQCAHIAQtAABqLQAAIgZBFWsOCh4BAwEDAwMDAwACCwsgAUEBRg0XIAcgAC0AAmotAAAiAEEeSw0cQQEgAHRBgIyAgQRxDQEMHAsgBkEJa0ECSQ0bCyADIAQ2AgAMGwsgACABQQJqIAIgAxDiDA8LIAMgBjYCAAwZCyABQQFqIAJHDQAgAyACNgIAQXEPCwNAAkAgAiABIgBBAWoiAWtBAEwNAAJAAkAgByABLQAAai0AACIEQQlrDgIBAwALIARBFUYNAgwBCyAAQQJqIAJHDQELCyADIAE2AgBBDw8LIAAgAUEBaiACIAMQ4QwPCyADIAFBAWo2AgBBJg8LIAMgAUEBajYCAEEZDwsgAiABQQFqIgBrIgJBAEwEQEFmDwsCQCABLQABQd0ARw0AIAJBAUYNEiABLQACQT5HDQAgAyABQQNqNgIAQSIPCyADIAA2AgBBGg8LIAMgAUEBajYCAEEXDwsgAiABQQFqIgBrQQBMBEBBaA8LAkACQAJAAkACQAJAIAcgAS0AAWotAAAiAkEgaw4FFAEDFBQACyACQQlrDgcTExMEBAQBAwsgAyABQQJqNgIAQSQPCyADIAFBAmo2AgBBIw8LIAMgAUECajYCAEElDwsgAkEVRg0PCyADIAA2AgAMEQsgAyABQQFqNgIAQRUPCyADIAFBAWo2AgBBEQ8LIAIgAUEBaiIBayIGQQBMDQxBACEFAkACQAJAAkACQAJAIAcgAS0AAGotAAAiCEEFaw4DAQIDAAsgCEEWaw4DAwQDBAsgBkEBRg0OIAAgASAAKALgAhEAAA0DIAAgASAAKALUAhEAAEUNA0ECIQQMAgsgBkEDSQ0NIAAgASAAKALkAhEAAA0CIAAgASAAKALYAhEAAEUNAkEDIQQMAQsgBkEESQ0MIAAgASAAKALoAhEAAA0BIAAgASAAKALcAhEAAEUNAUEEIQQLIAEgBGohAQNAIAIgAWsiBkEATARAQWwPC0EBIQRBFCEFAkACQAJAAkACQCAHIAEtAABqLQAAQQVrDiAAAQIEBgYGBAQEBAQEBAQEBgMEAwMDAwQEBgQGBAQEBgQLIAZBAUYNECAAIAEgACgC4AIRAAANAyAAIAEgACgCyAIRAABFDQNBAiEEDAILIAZBA0kNDyAAIAEgACgC5AIRAAANAiAAIAEgACgCzAIRAABFDQJBAyEEDAELIAZBBEkNDiAAIAEgACgC6AIRAAANASAAIAEgACgC0AIRAABFDQFBBCEECyABIARqIQEMAQsLQQAhBQsgAyABNgIAIAUPCyACIAFrQQJIDQkgACABIAAoAuACEQAADQhBAiEEIAAgASAAKALUAhEAAA0CIAAgASAAKALIAhEAAEUNCAwFCyACIAFrQQNIDQggACABIAAoAuQCEQAADQdBAyEEIAAgASAAKALYAhEAAA0BIAAgASAAKALMAhEAAEUNBwwECyACIAFrQQRIDQcgACABIAAoAugCEQAADQZBBCEEIAAgASAAKALcAhEAAEUNAQsMAwsgACABIAAoAtACEQAARQ0EDAELQRMhBQwBC0ETIQULIAEgBGohBAJAAkACQAJAA0AgAiAEIgFrIgRBAEwNBAJAAkACQAJAAkACQAJAIAcgAS0AAGotAABBBWsOIAECAwoEBAQKCgoJCgoKCgQEAAUAAAAACgoECgQIBgQECgsgAUEBaiEEDAYLIARBAUYNDCAAIAEgACgC4AIRAAANCCAAIAEgACgCyAIRAABFDQggAUECaiEEDAULIARBA0kNCyAAIAEgACgC5AIRAAANByAAIAEgACgCzAIRAABFDQcgAUEDaiEEDAQLIARBBEkNCiAAIAEgACgC6AIRAAANBiAAIAEgACgC0AIRAABFDQYgAUEEaiEEDAMLIAMgATYCACAFDwsgAUEBaiEEIAVBKUcEQCAFQRJHDQIgAiAEayIGQQBMDQtBEyEFAkACQAJAAkACQAJAAkAgByAELQAAai0AACIIQRZrDggBCQEBAQEJBQALIAhBBWsOAwECAwgLIAFBAmohBEEpIQUMBwsgBkEBRg0NIAAgBCAAKALgAhEAAA0CIAAgBCAAKALIAhEAAEUNAiABQQNqIQRBKSEFDAYLIAZBA0kNDCAAIAQgACgC5AIRAAANASAAIAQgACgCzAIRAABFDQEgAUEEaiEEQSkhBQwFCyAGQQRJDQsgACAEIAAoAugCEQAADQAgACAEIAAoAtACEQAADQELIAMgBDYCAAwOCyABQQVqIQRBKSEFDAILQRMhBQwBCwsgBUETRg0CIAMgAUEBajYCAEEgDwsgBUETRg0BIAMgAUEBajYCAEEfDwsgBUETRg0AIAMgAUEBajYCAEEeDwsgAyABNgIADAcLQQAgBWshBQsgBQ8LIAMgATYCAAwEC0F+DwsgAyAANgIAQRgPC0F/DwsgAyAENgIAQRAPC0EACw8AIAAgASACQYC/BhDmCgsTAEGAvwYgAEEAIAEgAiADEMIFCxMAQYC/BiAAQQEgASACIAMQwgULDwAgACABIAJBgLMGEOYKCxMAQYCzBiAAQQAgASACIAMQwgULEwBBgLMGIABBASABIAIgAxDCBQsPAEGcswYgASACIAMQ7AwL0AEBBn8jAEEQayIIJAAgAEHIAGohCSAAQfQGaiEKAn8DQEEAIAIgASgCACIFRg0BGgJAIAECfyAKIAUtAABBAnRqIgYsAAAiB0UEQCAAKALwAiAFIAAoAuwCEQAAIAhBDGoiBhCqBCIHIAQgAygCAGtKDQIgASgCACIFIAkgBS0AAGotAABqQQNrDAELIAQgAygCAGsgB0gNASAGQQFqIQYgBUEBags2AgAgAygCACAGIAcQIBogAyADKAIAIAdqNgIADAELC0ECCyAIQRBqJAALowEBBH8gAEHIAGohByAAQfQCaiEIAkADQCABKAIAIgUgAk8NASAEIAMoAgAiBksEQCABAn8gCCAFLQAAQQF0ai8BACIGRQRAIAAoAvACIAUgACgC7AIRAAAhBiABKAIAIgUgByAFLQAAai0AAGpBA2sMAQsgBUEBags2AgAgAyADKAIAIgVBAmo2AgAgBSAGOwEADAELCyAEIAZHDQBBAg8LQQALDQAgACABQbCwBhDZCgsNACAAIAFBsK4GENkKCy4BAX9BASECIAAoAvACIAEgACgC7AIRAAAiAEH//wNNBH8gABCpBEEfdgVBAQsLhgEBAn8jAEEQayIEJAAgBCABNgIMAkAgACAAKAKcASAEQQxqIAIgAyAALQDsA0VBABDyDCIBDQBBACEBIAQoAgwiBUUNACAAKALkAwRAIABBgwM2AqACIAAgBSACIAMQ8AwhAQwBCyAAQfwCNgKgAiAAIAUgAiADEM0HIQELIARBEGokACABC7kDAQd/IwBBEGsiBSQAAkAgACgCtAIiCEUEQEEXIQQMAQsgCCgCDCIGKAIIIAUgBigCBCIJIAYoAgxqIgQ2AgwgCWohBwJ/IAYtACEEQCAAKALsASIJIAQgByAFQQxqIgogCSgCABEGACEJIAAgACgC7AEgBCAHIAkgBSgCDCAKQQBBAUEBEMUFDAELIAAgCCgCECAAKALsASAEIAcgBUEMakEAQQEQqwQLIgQNAAJAIAcgBSgCDCIERg0AIAAoAugDQQNHDQAgBiAEIAYoAgRrNgIMQQAhBAwBCyAAIAZBny4Q7gJBACEEIAZBADoAICAAIAgoAgg2ArQCIAggACgCuAI2AgggACAINgK4AiAAKAK0AgRAIAAoAugDQQNGDQELIAYtACEEQCAAQfYCNgKgAiAAKAKcASIEIAEgAiAFQQxqIAQoAgARBgAhBCAAIAAoApwBIAEgAiAEIAUoAgwgAyAALQDsA0VBAUEAEMUFIQQMAQsgAEH8AjYCoAIgACAAKALkA0EARyAAKAKcASABIAIgAyAALQDsA0VBABCrBCIEDQAgABDIBw0AQQEhBAsgBUEQaiQAIAQLZgEBfyMAQRBrIgQkACAEIAE2AgwCQCAAIAAoApwBIARBDGogAiADIAAtAOwDRRCCDSIBDQAgBCgCDCIBRQRAQQAhAQwBCyAAQfYCNgKgAiAAIAEgAiADEM8HIQELIARBEGokACABCwcAIAAQlQELCAAgACgCpAILZQEEfyAAQaABaiEFIABBnAFqIQYgACgC8AEhByAALQD0AQR/IAUgBiAHEOgMBSAFIAYgBxDDBwsEf0EABSAAIAAoAvABEIoNCyIEBH8gBAUgAEH2AjYCoAIgACABIAIgAxDPBwsLggUBCn8gAkHjAHEEQCAAIAEgAiAAKAIMKAIAEQMADwsCQAJAIAJBhARxRQRAIAAoAgwoAgRBDHEiAyACQYADcUVyDQELIAAhAwNAIANFBEBBACEEDAMLIAMgASACIAMoAgwoAgARAwAiBA0CIAMoAhQhAwwACwALAkACQAJAIAMEQCACQZgDcUUNAyACQZACcUEARyELIAJBiAFxQQBHIQwgACEDA0AgA0UNAgJAIAMgASACIAMoAgwoAgARAwAiBEUNACAEIAMoAgQiBygCAGohBiAHKAIEIgpBAEgEQCAGKAIAIQYLAkAgBUUNACAMAn8gBygCFCIHBEAgBiAJIAcRAAAMAQsgCkEATARAIAYgCRBDDAELIAYgCSAKEMIBCyIHQQBIcQ0AIAsgB0EASnFFDQELIAQhBSAGIQkgAyEICyADKAIUIQMMAAsACyACQRhxRQ0CAkACQCAAKAIYIgRFDQAgBCgCCCgCBCEIAn8gBCgCBCgCCCIDQQBIBEAgCCgCCAwBCyAIIANrCyABRw0AIAEhAwwBCyAAIQQDQCAERQRAIABBADYCGEEADwsgBCABQQQgBCgCDCgCABEDACIDRQRAIAQoAhQhBAwBCwsgACAENgIYC0GAAUGAAiACQQhxGyEBIAQgAyACIAQoAgwoAgARAwAhBQNAIAAhAyAFBEADQCADIARGDQQgAyAFQQQgAygCDCgCABEDAEUEQCADKAIUIQMMAQsLIAQgBSACIAQoAgwoAgARAwAhBQwBCyAAIAQoAhQiBDYCGCAERQ0DIARBACABIAQoAgwoAgARAwAhBQwACwALIAAgCDYCGAsgBQ8LQQAPCyAAIAM2AhggBAurEwERfyMAQRBrIggkACAAKAIIIgUtAAFBEHEEQCAAQQAQ2AEgACgCCCEFCyAFKAIEIQMgACgCBCIMKAIIIQoCfwJAAkAgAUUEQEEAIAJBwANxRSADRXINAxogAkHAAHEEQCAMKAIQRSAKQQBOcUUEQEEAIAprIQYDQCADKAIEIgEEQCADIAEoAgA2AgQgASADNgIAIAEhAwwBCyADKAIAIAwoAhAiBQRAAn8gCkEASARAIAMoAggMAQsgAyAGagsgBREBAAsgDCgCCEEASARAIAMQFwsiAw0ACyAAKAIIIQULIAVBADYCBCAFQQA2AhBBAAwECwJAIAJBgAJxBEADQCADKAIAIgFFDQIgAyABKAIENgIAIAEgAzYCBCABIQMMAAsACwNAIAMoAgQiAUUNASADIAEoAgA2AgQgASADNgIAIAEhAwwACwALIAAoAgggAzYCBCAKQQBODQEMAgsgDCgCFCEOIAwoAgQhCyAMKAIAIQ8CQAJAAkACQAJAAkAgAkGCIHEiE0UNACAAKAIMKAIEQQhHDQAgASAPaiEHIAtBAE4iBkUEQCAHKAIAIQcLIAAgAUEEIAAoAgARAwAhBSALQQBKIQ0DQCAFRQ0BIAUgD2ohBCAGRQRAIAQoAgAhBAsCfyAOBEAgByAEIA4RAAAMAQsgDUUEQCAHIAQQQwwBCyAHIAQgCxDCAQsNASABIAVGBEAgCCAAKAIIKAIEIgMoAgQ2AgggCCADKAIANgIMIAhBCGohBQwDBSAAIAVBCCAAKAIAEQMAIQUMAQsACwALAkACQAJAAkACQAJAAkACQCACQYUEcQRAAn8gASACQYAEcQ0AGiABIA9qIgkgC0EATg0AGiAJKAIACyEJQQAhDSADDQEgCEEIaiIGIQUMAgsgAkEgcQRAIA8CfyAKQQBIBEAgASgCCAwBCyABIAprCyIEaiEJIAtBAEgEQCAJKAIAIQkLIAMEQCABIQ0gBCEBDAILIAhBCGoiBiEFIAEhDSAEIQEMAgsgA0UEQEEAIQ0gCEEIaiIGIQUMAgsCfyAKQQBIBEAgAygCCAwBCyADIAprCyABRgRAQQAhDSAIQQhqIgYhBQwECyABIA9qIQlBACENIAtBAE4NACAJKAIAIQkLQQAgCmshECAKQQBOIREgCEEIaiIGIQUCQAJAA0AgAyEHAkACQANAAn8gEUUEQCAHKAIIDAELIAcgEGoLIA9qIQQgC0EATiISRQRAIAQoAgAhBAsCfyAOBEAgCSAEIA4RAAAMAQsgC0EATARAIAkgBBBDDAELIAkgBCALEMIBCyIERQRAIAchAwwJCyAEQQBODQIgBygCBCIERQ0EAn8gEUUEQCAEKAIIDAELIAQgEGoLIA9qIQMgEkUEQCADKAIAIQMLAn8gDgRAIAkgAyAOEQAADAELIAtBAEwEQCAJIAMQQwwBCyAJIAMgCxDCAQsiA0EATg0BIAcgBCgCADYCBCAEIAc2AgAgBSAENgIEIAQiBSgCBCIHDQALDAULIANFBEAgBUEEaiEJIAQhAyAHIQUMBgsgBiAENgIAIAUgBzYCBCAHIQUgBCIGKAIAIgMNAQwECyAHKAIAIgRFBEAgBiEEIAchBgwDCwJ/IBFFBEAgBCgCCAwBCyAEIBBqCyAPaiEDIBJFBEAgAygCACEDCwJ/IA4EQCAJIAMgDhEAAAwBCyALQQBMBEAgCSADEEMMAQsgCSADIAsQwgELIgNBAEoEQCAHIAQoAgQ2AgAgBCAHNgIEIAYgBDYCACAEIgYoAgAiAw0BDAQLIANFBEAgBiEJIAQhAyAHIQYMBQsgBSAENgIEIAYgBzYCACAHIQYgBCIFKAIEIgMNAAsMAgsgBUEEaiEEIAchBQsgBCAHNgIACyAFQQA2AgQgBkEANgIAIAJBCHENAiACQRBxDQQgAkGEBHENCUEAIQMgAkEBcQ0IQQAhASACQSBxRQ0JIAAoAggiASABKAIQQQFqNgIQIA0hAwwKCyAJIAc2AgALIAYgAygCBDYCACAFIAMoAgA2AgQgAkGEBHENCCACQQhxRQ0BIAgoAgghBiADQQA2AgAgAyAGNgIEIAggAzYCCAsgCCgCDCIDRQ0GA0AgAygCBCIBBEAgAyABKAIANgIEIAEgAzYCACABIQMMAQsLIAggAygCADYCDAwHCyACQRBxRQ0BIAgoAgwhBiADQQA2AgQgAyAGNgIAIAggAzYCDAsgCCgCCCIDRQ0EA0AgAygCACIBBEAgAyABKAIENgIAIAEgAzYCBCABIQMMAQsLIAggAygCBDYCCAwFCyATRQ0BCwJ/IApBAEgEQCADKAIIDAELIAMgCmsLIQECQCACQQJxRQ0AIAwoAhAiBkUNACABIAYRAQALIAwoAghBAEgEQCADEBcLIAAoAggiA0F/IAMoAhAiA0EBayADQQBMGzYCEAwCCyACQQFxBEAgACgCDC0ABEEEcQ0DIANBADYCBCADIAgoAgw2AgAgCCADNgIMDAELQQAgAkEgcUUNBRogACgCDC0ABEEEcQRAIAwoAhAiBgRAIAEgBhEBAAsgDCgCCEEATg0DIA0QFwwDCyANQQA2AgQgDSAIKAIMNgIAIAggDTYCDCAAKAIIIgEgASgCEEEBajYCEAwCCyAMKAIMIgYEQCABIAwgBhEAACEBCwJAAkACQCABBEAgCkEASA0BIAEgCmohAwsgA0UNAwwBC0EMEEIiA0UNASADIAE2AggLIAAoAggiASgCECIGQQBIDQIgASAGQQFqNgIQDAILIAwoAgxFDQAgDCgCECIDRQ0AIAEgAxEBAAsDQCAFIgMoAgQiBQ0ACyADIAgoAgg2AgQgACgCCCAIKAIMNgIEIAJBHnRBH3UgAXEMAwsgAyAIKAIIIgQ2AgQgAyAIKAIMNgIAAkAgAkGEBHFFDQAgACgCDCgCBEEIcUUNAAJ/IApBAEgEQCADKAIIDAELIAMgCmsLIA9qIQcgC0EATiICRQRAIAcoAgAhBwtBACAKayEGIApBAE4hDQNAIAQiBUUNAQNAIAUoAgAiAQRAIAUgASgCBDYCACABIAU2AgQgASEFDAELCyADIAU2AgQCfyANRQRAIAUoAggMAQsgBSAGagsgD2ohBCACRQRAIAQoAgAhBAsCfyAOBEAgByAEIA4RAAAMAQsgC0EATARAIAcgBBBDDAELIAcgBCALEMIBCw0BIAMgBSgCADYCBCAFIAM2AgAgBSgCBCEEIAUhAwwACwALIAAoAgggAzYCBCAKQQBIDQELIAMgCmsMAQsgAygCCAsgCEEQaiQAC8UIAQp/IAAoAggtAAFBEHEEQCAAQQAQ2AELIAAoAgQiBigCCCEFAkACQAJAAkACQCABRQRAIAJBgANxBEAgACgCCCIAKAIIIgNFDQQCQCACQYACcUUEQCAAIAM2AgQMAQsgACADKAIEIgM2AgQgA0UNBQsMBgsgAkGCIHEEQCAAKAIIKAIIIgMNAgwFCyACQcAAcUUNBCAAKAIIIQMgBigCEEUgBUEATnEEfyADBUEAIAVrIQcgAygCCCEEA0AgBCICBEAgAigCACEEIAYoAhAiAwRAAn8gBUEASARAIAIoAggMAQsgAiAHagsgAxEBAAsgBigCCEEATg0BIAIQFwwBCwsgACgCCAtCADcCBCAAKAIIQQA2AhBBAA8LIAJBAXEEQCAGKAIMIgIEQCABIAYgAhEAACIBRQ0FCwJ/AkACQAJAIAVBAE4EQCABIAVqIQMMAQtBDBBCIgNFDQEgAyABNgIICyAAKAIIIgIoAggiAUUNASABKAIEIAM2AgAgAyABKAIENgIEIAFBBGoMAgsgBigCDEUNBSAGKAIQIgBFDQUgASAAEQEAQQAPCyACIAM2AgggA0EEagsgAzYCACADQQA2AgAgACgCCCIAKAIQIgFBAE4EQCAAIAFBAWo2AhALIAAgAzYCBAwFCyAGKAIUIQkgBigCBCEIIAYoAgAhCiAAKAIIIQQCQAJAIAJBgARxDQAgBCgCBCIDBEACfyAFQQBIBEAgAygCCAwBCyADIAVrCyABRg0CCyABIApqIQEgCEEATg0AIAEoAgAhAQtBACAFayELIARBCGohAyAFQQBOIQwDQCADKAIAIgNFDQQCfyAMRQRAIAMoAggMAQsgAyALagsgCmohBCAIQQBIBEAgBCgCACEECwJ/IAkEQCABIAQgCREAAAwBCyAIQQBMBEAgASAEEEMMAQsgASAEIAgQwgELDQALCyACQYIgcUUNAQsgAygCACIBBEAgASADKAIENgIECyADKAIAIQQCQCAAKAIIIgcoAggiASADRgRAIAcgBDYCCCAAKAIIKAIIIgRFDQEgBCABKAIENgIEDAELIAMoAgQgBDYCACADIAEoAgRHDQAgASADKAIENgIEC0EAIQEgACgCCCIAKAIEIANGBEAgAygCACEBCyAAIAE2AgQgACAAKAIQQQFrNgIQAn8gBUEASARAIAMoAggMAQsgAyAFawshBwJAIAJBAnFFDQAgBigCECIARQ0AIAcgABEBAAsgBigCCEEATg0BIAMQFyAHDwsCQAJAIAJBCHEEQCAAKAIIIQQMAQsgACgCCCEEIAJBEHFFBEAgBCADNgIEDAILIAQoAgggA0YEQCAEQQA2AgRBAA8LIANBBGohAwsgBCADKAIAIgM2AgQgA0UNAgsgBUEASARAIAMoAggPCyADIAVrIQcLIAcPC0EADwsgBUEASARAIAMoAggPCyADIAVrCxUAQcyUCygCAARAIAAQFw8LIAAQFwsLACAAIAEgAhDsBwsJACABIAIQ2QELJQBBfyAAKAIQKAIAQQR2IgAgASgCECgCAEEEdiIBSyAAIAFJGwseAQF/IAAgACgCECIBQRxqRwRAIAEoAhgaIAAQFwsLnQICBX8BfiMAQTBrIgMkACADQQxqQQBBJBAzGiADIAE2AhwgACABEG8hAgNAIAIEQCAAIAIgARB0IAAgAkEAEOENIQIMAQsLIAEpAwghCEEAIQICQCAAKAIwIgEEQCABKAIERQ0BIAEgCBDhByEFIAEoAgghBANAIAIgBEYNAgJAAkAgASgCACACIAVqIARwQQJ0aiIGKAIAIgdBAWoOAgEEAAsgBygCECkDCCAIUg0AIAEoAgQiAgRAIAZBfzYCACABIAJBAWs2AgQMBAtBlpADQZS9AUGUBEHNiQEQAAALIAJBAWohAgwACwALQY7QAUGUvQFB/ANBzYkBEAAACyAAKAIsIgAgA0EMakECIAAoAgARAwAaIANBMGokAAtxAQN/AkAgAkUNACAAKAIIIgMgACgCBE8NACAAKAIAIANqIgUtAAAhAwNAAkAgASADOgAAIANBCkYgBEEBaiIEIAJOcg0AIAFBAWohASAFLQABIQMgBUEBaiEFIAMNAQsLIAAgACgCCCAEajYCCAsgBAsHACAAEN4DCwkAIAEgABCDAQsWACABIAIgABChBEUEQEEADwsgARA3CyABAn5BAUF/QQAgACkDECICIAEpAxAiA1QbIAIgA1YbCx4AQQFBf0EAIAAoAhgiACABKAIYIgFJGyAAIAFLGwsCAAsOACACp0EAIAJCAYNQGwsZACACpyIBQQFxRQRAIAAoAgggARCJARoLCwQAQQALbgACQAJAIAIEQCAAKAIIIQACfyAEBEAgACACEKoBDAELIAAgAhC3DQsiAEEBcQ0CIAMgAK03AwAMAQsgAyAAKQMAQgGGQgGENwMAIAAgACkDAEIBfDcDAAtBAQ8LQcGsA0HGvQFBOUGm2wAQAAALQwEBfyMAQRBrIgEkAEEBQRAQRiICRQRAIAFBEDYCAEHo+gYoAgBBqd0DIAEQHRoQJgALIAIgADYCCCABQRBqJAAgAgsnAEF/IAAoAgAoAhAoAvgBIgAgASgCACgCECgC+AEiAUogACABSBsLGwECfkF/IAApAwgiAiABKQMIIgNWIAIgA1QbCx8AQX8gACgCAEEEdiIAIAEoAgBBBHYiAUsgACABSRsLagIBfwJ+QX8hAgJAIAAoAigpAwgiAyABKAIoKQMIIgRUDQAgAyAEVgRAQQEPCwJAIAAtAABBA3FFDQAgAS0AAEEDcUUNACAAKQMIIgMgASkDCCIEVA0BQQEhAiADIARWDQELQQAhAgsgAguCAQECfwJAAkAgAEUgAUVyRQRAAkAgACgCKCICIAEoAigiA0cEQCACKAIAQQR2IgAgAygCAEEEdiIBSQ0EIAAgAU0NAQwDCyAAKAIAQQR2IgAgASgCAEEEdiIBSQ0DIAAgAUsNAgtBAA8LQY/tAkHovAFBigNBjYQBEAAAC0EBDwtBfwsNACAAQQIgASACEB8aCwcAIAAQ5w0LLgBBlJMLKAIAIAAoAggQiQEaQZSTCygCACAAKAIMEIkBGkGUkwsoAgAaIAAQFwsYACABECsgAEcEfyAAIAFBABDIAgUgAQsLFwAgARArIABHBH8gACABQQAQewUgAQsLBAAgAAubAQEEfyMAQRBrIgIkAEHo+gYoAgAhBANAAkAgACwAACIBQf8BcSIDRQRAQQAhAQwBCwJAAkAgAUH/AEcgAUEgT3ENACADQQlrIgNBF01BAEEBIAN0QZ+AgARxGw0AIAIgATYCACAEQZLfACACEB0iAUEATg0BDAILIAEgBBDbAyIBQQBIDQELIABBAWohAAwBCwsgAkEQaiQAIAEL4gYBBn8jAEEwayIFJABBjJMLQYyTCygCAEEBIAAgAEECRhsgAEEDRiIEGyIDNgIAQYiTC0GIkwsoAgAiBiADIAMgBkgbNgIAAkACQAJAQfSSCygCACADTQRAIAUgAjYCLCAFIAI2AihBAEEAIAEgAhBOIgJBAEgEQCAFQeoXNgIgQej6BigCAEGgogQgBUEgahAdGgwCCyACQQFqIgQQQiICRQRAIAVB6hc2AgBB6PoGKAIAQfrLAyAFEB0aDAILQfCSCygCACIDQdICIAMbIQMgAEEDRwRAQZ42QZ2AASAAQQFGGyADEQIAGkG3vwMgAxECABoLIAIgBCABIAUoAiwQTkEASARAIAIQFyAFQeoXNgIQQej6BigCAEGgogQgBUEQahAdGgwCCyACIAMRAgAaIAIQFwwBCwJAIAQNABCyBARAQYeTC0EAOgAADAELQfySC0EANgIACyAFIAI2AiwgBSACNgIoQQBBACABIAIQTiIGQQBIDQAgBkEBaiEHIAYQ7A0Q1gVrIgBPBEACQCMAQSBrIgMkABDsDSICIAcgAGtqIgAgAkEBdEGACCACGyIEIAAgBEsbIQAQ1gUhCAJAAkACQAJAQYeTCy0AAEH/AUYEQCACQX9GDQJB+JILKAIAIQQgAEUEQCAEEBdBACEEDAILIAQgABA9IgRFDQMgACACTQ0BIAIgBGpBACAAIAJrEDMaDAELQQAgACAAQQEQRiIEGw0DIARB+JILIAgQIBpB/JILIAg2AgALQYeTC0H/AToAAEGAkwsgADYCAEH4kgsgBDYCACADQSBqJAAMAwtBkbQDQd79AEHNAEGTswEQAAALIAMgADYCAEHo+gYoAgBBqd0DIAMQHRoQJgALIAMgADYCEEHo+gYoAgBBqd0DIANBEGoQHRoQJgALCxDWBSEAELIEIQIgBiAAQfiSC2ogAEH4kgsoAgBqIAIbIAcgASAFKAIsEE4iAEcgAEEATnENASAAQQBMDQAQsgQEQCAAQYACTw0DQYeTC0GHkwstAAAgAGo6AAAQ1gVBEEkNAUG/rgNBj/0AQcQBQdkdEAAAC0H8kgtB/JILKAIAIABqNgIACyAFQTBqJAAPC0HNlgNBj/0AQb8BQdkdEAAAC0HSyQFBj/0AQcIBQdkdEAAACw0AIABBASABIAIQHxoLQAICfAF/IAArAwAiAiABKwMAIgNkBEAgACsDCCABKwMIZUUPCyACIANjBH9BAEF/IAArAwggASsDCGYbBUEACwtSAQN/IAAoAiQhAgNAIAIoAgQhAyACKAIAIAFNBEAgAxAXIAIQFwUgAyABQQxsaigCCBB5GiABQQFqIQEMAQsLIABBADYCHCAAKAIYEBcgABAXCyABAnxBAUF/QQAgACsDACICIAErAwAiA2MbIAIgA2QbCw4AIAAoAhAQeRogABAXCx4AQQFBf0EAIAAoAgAiACABKAIAIgFIGyAAIAFKGwtaAgF8AX9BfyAAKwMIIAErAwihIgJESK+8mvLXej5kIAJESK+8mvLXer5jGyIDBH8gAwVBfyAAKwMAIAErAwChIgJESK+8mvLXej5kIAJESK+8mvLXer5jGwsLWgIBfAF/QX8gACsDACABKwMAoSICREivvJry13o+ZCACREivvJry13q+YxsiAwR/IAMFQX8gACsDCCABKwMIoSICREivvJry13o+ZCACREivvJry13q+YxsLCz4BAn8Cf0F/IAAoAgAiAiABKAIAIgNJDQAaQQEgAiADSw0AGkF/IAAoAgQiACABKAIEIgFJDQAaIAAgAUsLCzAAQRgQTSIBIAAoAgg2AgggASAAKAIMNgIMIAEgACgCEDYCECABIAAoAhQ2AhQgAQtjAQN/IwBBEGsiAiQAIAJBCGogASgCAEEAEMQBAkAgACgAACACKAIIIAAoAAQiASACKAIMIgMgASADSSIEGxDXASIADQBBASEAIAEgA0sNAEF/QQAgBBshAAsgAkEQaiQAIAALDQAgAEEAIAEgAhAfGguEAQECfyMAQRBrIgIkAEEBQSAQRiIBBEAgACgCACIDBEAgASADEGE2AgALIAAoAgQiAwRAIAEgAxBhNgIECyABIAAoAhhB/wBxNgIYIAEgACsDEDkDECABIAAoAgg2AgggAkEQaiQAIAEPCyACQSA2AgBB6PoGKAIAQandAyACEB0aECYACxQAIAAoAgAQFyAAKAIEEBcgABAXC6gBAgN/AnwgASgCACECAkACQAJAAkAgACgCACIDRQRAIAJFDQEMBAsgAkUNAiADIAIQQyICDQELIAEoAgQhAgJAIAAoAgQiA0UEQCACDQQMAQsgAkUNAiADIAIQQyICDQELQX8hAiAAKAIYQf8AcSIDIAEoAhhB/wBxIgRJDQAgAyAESw0BIAArAxAiBSABKwMQIgZjDQAgBSAGZCECCyACDwtBAQ8LQX8LoAICB3wCfwJAIAErAwgiBCABKwMAIgOjIgJEAFVEEw5v7j9kBEAgBEQAVUQTDm/uP6MhAwwBCyACRABVRBMOb+4/Y0UNACADRABVRBMOb+4/oiEECyADRP9URBMOb/4/oyIFRGAtoJEhcsg/okQAAAAAAADgv6IhBiAFRP9URBMOb+4/okRQ6S8378bTP6JEr9fcixif6D+jIQdE4PCcdi8b1D8hAgNAIAlBCUtFBEAgACAJQQR0aiIKIAUgAhBEojkDACAKIAcgAkTg8Jx2LxvkP6AiCBBEojkDECAKIAUgAhBXoiAGoDkDCCAKIAcgCBBXoiAGoDkDGCAJQQJqIQkgCETg8Jx2LxvkP6AhAgwBCwsgASAEOQMIIAEgAzkDAAtnAQF8IAAgASsDAET/VEQTDm/+P6MgASsDCESo9Jebd+PxP6MQJET/VEQTDm/uP6JEqPSXm3fj6T+iRF5adQQjz9I/oyICRFT6y8278fw/ojkDCCAAIAIgAqBE/1REEw5v7j+iOQMAC+IDAgh/BnwjAEEgayIDJAACQCAARQ0AIAAoAgQhAiAAKAIAIgUQKygCECgCdCEGIAMgASkDCDcDCCADIAEpAwA3AwAgA0EQaiADIAZBA3FB2gBsELQDIAMrAxghCiADKwMQIQsgAgRAIAIrAwAgC2VFDQEgCyACKwMQZUUNASACKwMIIAplIAogAisDGGVxIQQMAQsCQCAAKAIIIAVHBEAgACAFKAIQKAIMIgE2AhggASgCCCECIAEoAiwhBkEAIQEgBUGYjQsoAgBBAUEAEFAhBwJAIAAoAhgoAgQiBEUgB0EATHJFBEAgAiAEbCEBDAELIARFDQAgBEEBayACbCEBCyAAIAU2AgggACABNgIgDAELIAAoAhgiASgCCCECIAEoAiwhBgtBACEFQQAhAQNAIAEgAk8iBA0BIAAoAiAiByABaiEIIAFBBGohCSABQQJqIQEgBSAKIAYgCSACcCAHakEEdGoiBysDACAGIAhBBHRqIggrAwAiDKEiDaIgBysDCCAIKwMIIg+hIg4gC6KhIA8gDaIgDiAMoqEiDKFEAAAAAAAAAABmIA1EAAAAAAAAAACiIA5EAAAAAAAAAACioSAMoUQAAAAAAAAAAGZzaiIFQQJHDQALCyADQSBqJAAgBAusAgIGfwR8IwBBIGsiBCQAIAEoAhAiBSgCDCECAkACQAJAIAAoAhAiAygC2AEiBkUEQCACRQ0DIAMtAIwCQQFxDQEMAgsgAkUNAgtBASEHIAAtAJgBQQRxDQAgACAGIAMoAuwBIAMoAvwBIAMoAtwBELsBIAEoAhAhBQsgACgCJCACKwMIIQggBSsDECEJIAIrAxAhCiAFKwMYIQsgBCACKAIANgIQIAQgCyAKoDkDCCAEIAkgCKA5AwBBn7IEIAQQLSABKAIQIgIoAngiBSACKQMQNwM4IAVBQGsgAikDGDcDACAAQQogASgCECgCeBCxAyAHRQ0AIAAtAJgBQQRxBEAgACADKALYASADKALsASADKAL8ASADKALcARC7AQsgABCRAgsgBEEgaiQAC5sBAgJ/AnwjAEEgayICJAAgACgCACIAECsoAhAoAnQhAyACIAEpAwg3AwggAiABKQMANwMAIAJBEGogAiADQQNxQdoAbBC0A0EAIQECQCACKwMYIgQgACgCECIAKwNQRAAAAAAAAOA/oiIFmmZFIAQgBWVFcg0AIAIrAxAiBCAAKwNYmmZFDQAgBCAAKwNgZSEBCyACQSBqJAAgAQv5BAIGfwJ8IwBBkAFrIgIkAEEBIQYgACgCECIEKALYASIFRQRAIAQtAIwCQQFxIQYLIAIgASgCECIDKAIMIgcpAyg3A4gBIAIgBykDIDcDgAEgAiAHKQMYNwN4IAIgBykDEDcDcCACIAMrAxAiCCACKwNwoDkDcCACIAMrAxgiCSACKwN4oDkDeCACIAggAisDgAGgOQOAASACIAkgAisDiAGgOQOIAQJAIAZFDQAgAC0AmAFBBHENACAAIAUgBCgC7AEgBCgC/AEgBCgC3AEQuwELIAJBJGogACABEMwOIAAgARDpBRogAkEANgIoAn9BACACKAIkIgVBAXFFDQAaIAEQkQgiAyACQShqIAJBMGoQywQEQCAAIAIoAigQWCAAIAIoAiwiA0Ht9AAgAxsgAUGcjQsoAgBBAEEAEFAgAisDMBCFA0EDQQIgBUECcRsMAQsgACADEFhBAQshAyABKAIQKAIIKAIAQZiiARBHBEAgAiAFQQRyIgU2AiQLAkAgBUGM4B9xBEAgAiACKQNwNwMwIAIgAikDeDcDOCACIAIpA4gBNwNYIAIgAikDgAE3A1AgAiACKwM4OQNIIAIgAisDMDkDYCACIAIoAiQ2AiAgAiACKwNQOQNAIAIgAisDWDkDaCAAIAJBMGpBBCACQSBqIAMQrAMMAQsgAiACKQOIATcDGCACIAIpA4ABNwMQIAIgAikDeDcDCCACIAIpA3A3AwAgACACIAMQggILIAAgASAHEMUOIAIoAigQFyAGBEAgAC0AmAFBBHEEQCAAIAQoAtgBIAQoAuwBIAQoAvwBIAQoAtwBELsBCyAAEJECCyACQZABaiQAC/IDAgR/BXwjAEHQAGsiBSQAIAEtABxBAUYEQCABKwMAIQkgACgCECgCDCEGQQAhAQNAAkAgASAGKAIwTg0AIAAQKyEHAkAgBigCOCABQQJ0aigCACIIQRhBECAHKAIQLQB0QQFxIgcbaisDACIKIAllRQ0AIAkgCEEoQSAgBxtqKwMAIgtlRQ0AAkAgABArKAIQLQB0QQFxBEAgACgCECEHIAUgBigCOCABQQJ0aigCACIBKQMoNwMoIAUgASkDIDcDICAFIAEpAxg3AxggBSABKQMQNwMQIAUgBykDGDcDCCAFIAcpAxA3AwAgBSsDECEKIAUrAyAhCyAFKwMoIQwgBSAFKwMYIAUrAwAiDaA5AzAgBSsDCCEJIAUgDCANoDkDQCAFIAsgCaA5A0ggBSAKIAmgOQM4IAMgBSkDSDcDGCADIAVBQGspAwA3AxAgAyAFKQM4NwMIIAMgBSkDMDcDACAAKAIQIgArA1BEAAAAAAAA4D+iIQogACsDGCEJDAELIAMgCiAAKAIQIgArAxAiCqA5AwAgACsDGCEJIAArA1AhDCADIAsgCqA5AxAgAyAJIAxEAAAAAAAA4D+iIgqhOQMICyADIAkgCqA5AxggBEEBNgIADAELIAFBAWohAQwBCwsgAiEGCyAFQdAAaiQAIAYLmQICBX8FfCMAQSBrIgMkACAAKAIEIQIgACgCACIEECsoAhAoAnQhACADIAEpAwg3AwggAyABKQMANwMAIANBEGogAyAAQQNxQdoAbBC0AyABIAMpAxg3AwggASADKQMQNwMAAkAgAkUEQCAEKAIQKAIMIgJBKGohACACQSBqIQUgAkEYaiEGIAJBEGohAgwBCyACQRhqIQAgAkEQaiEFIAJBCGohBgsgBisDACEJIAArAwAhCiAFKwMAIQdBACEAIAIrAwAgBEGYjQsoAgBBAUEAEFC3RAAAAAAAAOA/oiIIoSABKwMAIgtlRSALIAcgCKBlRXJFBEAgASsDCCIHIAkgCKFmIAcgCiAIoGVxIQALIANBIGokACAAC7gBAQN/IwBBQGoiBCQAAkAgAi0AAEUEQCAAQZCOBUEoECAaDAELAkAgASgCECgCDCIGIAIQxg4iBQRAIAEgBUEQaiAEQRhqIANBy8IBIAMbIgMgBS0AQUEAEL0ERQ0BIAEQHiEBIAQgAzYCCCAEIAI2AgQgBCABNgIAQfWvBCAEECcMAQsgASAGQRBqIARBGGogAkEPQQAQvQRFDQAgASACEM8OCyAAIARBGGpBKBAgGgsgBEFAayQACw0AIAAoAhAoAgwQkggLrQMBCHwgASsDCCEDIAAgASsDAEQAAAAAAADgP6IiApoiBTkDYCAAIANEAAAAAAAA4D+iIgQgA0QAAAAAAAAmQKMiA6EiBjkDaCAAQgA3AzAgACAEOQNIIAAgBDkDOCAAIAQ5AyggACACOQMQIAAgAjkDACAAIAU5A1AgACACRBSYTus2qOG/oiIIOQNAIAAgAkQUmE7rNqjhP6IiCTkDICAAIAY5AwggACADRNjPYimSr9y/oiAEoCIHOQNYIAAgBzkDGCAAIAApA2A3A3AgACAAKQNoNwN4IAAgBTkDgAEgACADIAShOQOIASAAIAApA4ABNwOQASAAIAApA4gBNwOYASAAIAI5A/ABIAAgB5oiAzkD6AEgACACOQPgASAAIASaIgI5A9gBIAAgCTkD0AEgACACOQPIASAAQgA3A8ABIAAgAjkDuAEgACAIOQOwASAAIAM5A6gBIAAgBTkDoAEgACAGmjkD+AEgACAAKQPwATcDgAIgACAAKQP4ATcDiAIgACAAKQMINwOYAiAAIAApAwA3A5ACIAAgACkDCDcDqAIgACAAKQMANwOgAgsqACABIAErAwhEAAAAAAAA9j+iOQMIIAAgASkDADcDACAAIAEpAwg3AwgLrAUCDH8BfCMAQTBrIgMkAAJAIAAoAhAiBCgC2AEiAkUEQCAELQCMAkEBcUUNAQtBASEJIAAtAJgBQQRxDQAgACACIAQoAuwBIAQoAvwBIAQoAtwBELsBCyABKAIQKAIMIgIoAgQhBiACKAIIIQogAigCLCEMIANBADYCLCABIANBLGoQyQ4aIABBsK4KQbSuCiADKAIsQSBxGxDcAUGYjQsoAgAiAgRAIAAgASACRAAAAAAAAPA/RAAAAAAAAAAAEFMQgAILAkAgASgCEC0AhQEiAkEBcQRAIAAgAUGcjAsoAgBBg4oDEFEQRSAAIAFBoIwLKAIAQbC1ARBRIgIQWAwBCyACQQJxBEAgACABQaSMCygCAEHYiwMQURBFIAAgAUGojAsoAgBBk+MBEFEiAhBYDAELIAJBCHEEQCAAIAFBtIwLKAIAQYqJAxBREEUgACABQbiMCygCAEGCiQMQUSICEFgMAQsgAkEEcQRAIAAgAUGsjAsoAgBBgYwDEFEQRSAAIAFBsIwLKAIAQYvjARBRIgIQWAwBCyAAIAFB7fQAEMgOIgIQWCAAIAEQ6QUaCwJAIAYNAEEBIQYgAi0AAEUNACAAIAIQRQtBASELA0AgBSAGRgRAIAkEQCAALQCYAUEEcQRAIAAgBCgC2AEgBCgC7AEgBCgC/AEgBCgC3AEQuwELIAAQkQILIANBMGokAA8LIANCADcDGCADQgA3AxAgA0IANwMIIANCADcDACAMIAUgCmxBBHRqIQ1BACECA0AgAiAKRgRAIAAgAyALEPkDIAVBAWohBUEAIQsMAgsgAkEBTQRAIA0gAkEEdCIHaiIIKwMIIQ4gAyAHaiIHIAgrAwAgASgCECIIKwMQoDkDACAHIA4gCCsDGKA5AwgLIAJBAWohAgwACwALAAuBAgIGfwN8IwBBIGsiAiQAAkAgAEUNACAAKAIAIgQQKygCECgCdCEDIAIgASkDCDcDCCACIAEpAwA3AwAgAkEQaiACIANBA3FB2gBsELQDIAIrAxghCSACKwMQIQoCQCAAKAIIIARGBEAgACsDECEIDAELIAQoAhAoAgwhBkEAIQEgBEGYjQsoAgBBAUEAEFAhBwJAIAYoAgQiA0UgB0EATHJFBEAgA0EBdCEBDAELIANFDQAgA0EBdEECayEBCyAGKAIsIAFBBHRqKwMQIQggACAENgIIIAAgCDkDEAsgCpkgCGQgCZkgCGRyDQAgCiAJEE8gCGUhBQsgAkEgaiQAIAULyAwCEn8FfCMAQdAAayIEJAACQCAAKAIQIgooAtgBIgNFBEAgCi8BjAJBAXFFDQELQQEhECAALQCYAUEEcQ0AIAAgAyAKKALsASAKKAL8ASAKKALcARC7AQsgASgCECgCDCIDKAIEIQsgAygCLCERIAMoAggiBkEFakEQEBghBSABKAIQIgMoAngiAiADKQMQNwM4IAJBQGsgAykDGDcDACABKAIQIgMrA1AgAysDKCADKwNYIAMrA2AgAysDICAEQcQAaiAAIAEQzA4gBEEANgJIQQEhAwJAIAEoAhAtAIUBIgJBAXEEQCAAIAFBnIwLKAIAQYOKAxBRIgkQRSAAIAFBoIwLKAIAQbC1ARBREFgMAQsgAkECcQRAIAAgAUGkjAsoAgBB2IsDEFEiCRBFIAAgAUGojAsoAgBBk+MBEFEQWAwBCyACQQhxBEAgACABQbSMCygCAEGKiQMQUSIJEEUgACABQbiMCygCAEGCiQMQURBYDAELIAJBBHEEQCAAIAFBrIwLKAIAQYGMAxBRIgkQRSAAIAFBsIwLKAIAQYvjARBREFgMAQsCfyAEKAJEIgNBAXEEQCABEJEIIgcgBEHIAGogBEE4ahDLBARAIAAgBCgCSBBYIAAgBCgCTCICQe30ACACGyABQZyNCygCAEEAQQAQUCAEKwM4EIUDQQNBAiADQQJxGwwCCyAAIAcQWEEBDAELIANBwARxRQRAQQAMAQsgARCRCCEHQQELIQMgACABEOkFIQkLQQEhDUQAAAAAAABSQKIhGKAhFEQAAAAAAABSQKIgASgCECgCCCICLQAMQQFGBEAgAigCAEHn6wAQRyENCyANRSALIANFcnJFBEAgAEGYHhBFQQEhCwsgFCAYoyEWoyEVIAVBIGohDCAGQQNJIRIDQCAIIAtHBEAgESAGIAhsQQR0aiETQQAhAgNAIAIgBkYEQCAEKAJEIQICQCASBEACQCAIIAJBgARxRXINACAHEMsORQ0AQQAhAyAAIAUgBxCsD0ECSA0AIAQgARAeNgIgQbLvAyAEQSBqEHwLIAAgBSADEPkDIAQtAERBCHFFDQEgACABEMoODAELIAJBwABxBEACQCAIDQAgACAFIAdBARC8CEECSA0AIAQgARAeNgIwQbLvAyAEQTBqEHwLIAAgBSAGQQAQQQwBCyACQYAIcQRAIABBmB4QRSAAIAUgBiADEEEgACAJEEUgACAMQQIQNgwBCyACQYzgH3EEQCAEIAQoAkQ2AiwgACAFIAYgBEEsaiADEKwDDAELIAAgBSAGIAMQQQsgCEEBaiEIQQAhAwwDBSATIAJBBHQiDmoiDysDCCEUIAUgDmoiDiAPKwMAIBaiIAEoAhAiDysDEKA5AwAgDiAUIBWiIA8rAxigOQMIIAJBAWohAgwBCwALAAsLAkACQCABKAIQKAIIIgItAAxBAUYEQCACKAIAIghB5+sAEEdFDQEgAUGXmgEQIyIIRQ0CIAgtAAANAQwCCyABQa6dARAjIghFDQEgCC0AAEUNAQtBACECAkADQCACIAZGBEACQCADQQBHIgIgDXFFDQMgBCgCRCECIAZBAk0EQAJAIAsgAkGABHFFcg0AIAcQyw5FDQBBACEDIAAgBSAHEKwPQQJIDQAgBCABEB42AgBBsu8DIAQQfAsgACAFIAMQ+QMgBC0AREEIcUUNASAAIAEQyg4MAQsgAkHAAHEEQEEBIQIgACAFIAdBARC8CEECTgRAIAQgARAeNgIQQbLvAyAEQRBqEHwLIAAgBSAGQQAQQQwECwJAIAJBDHEEQCAEIAQoAkQ2AgwgACAFIAYgBEEMaiADEKwDDAELIAAgBSAGIAMQQQtBASECDAMLBSARIAJBBHQiCWoiDCsDCCEUIAUgCWoiCSAMKwMAIBaiIAEoAhAiDCsDEKA5AwAgCSAUIBWiIAwrAxigOQMIIAJBAWohAgwBCwsgAyECCyAAIAggBSAGIAJBAEcgAUH8jAsoAgBB+pMBEHogAUGAjQsoAgBBx7MBEHoQ4wgLIAUQFyAEKAJIEBcgAEEKIAEoAhAoAngQsQMgEARAIAAtAJgBQQRxBEAgACAKKALYASAKKALsASAKKAL8ASAKKALcARC7AQsgABCRAgsgBEHQAGokAAutCQIKfwl8IwBBMGsiBSQAAkAgAEUNACAAKAIEIQIgACgCACIEECsoAhAoAnQhAyAFIAEpAwg3AwggBSABKQMANwMAIAVBEGogBSADQQNxQdoAbBC0AyAFKwMYIRAgBSsDECESIAIEQCACKwMAIBJlRQ0BIBIgAisDEGVFDQEgAisDCCAQZSAQIAIrAxhlcSEGDAELAkAgACgCCCAERwRAIAAgBCgCECgCDCICNgIYIAIoAgghASACKAIsIQcCfCACLQApQQhxBEAgBUEQaiACELAOIAUrAyAgBSsDEKEiDCAFKwMoIAUrAxihIg0gBBArKAIQKAJ0QQFxIgIbIREgDSAMIAIbIRMgDSEOIAwMAQsgBBArIQMgBCgCECICKwNYIAIrA2CgIgwgAisDUCINIAMoAhAtAHRBAXEiAxshESANIAwgAxshEyACKwNwRAAAAAAAAFJAoiEOIAIrAyhEAAAAAAAAUkCiIQ0gAisDIEQAAAAAAABSQKIhDCACKwNoRAAAAAAAAFJAogshDyAAIA5EAAAAAAAA4D+iOQNAIAAgD0QAAAAAAADgP6I5AzggACANIA0gEaMgEb1QGzkDMCAAIAwgDCAToyATvVAbOQMoQQAhAiAEQZiNCygCAEEBQQAQUCEIAkAgACgCGCgCBCIDRSAIQQBMckUEQCABIANsIQIMAQsgA0UNACADQQFrIAFsIQILIAAgBDYCCCAAIAI2AiAMAQsgACgCGCICKAIIIQEgAigCLCEHCyAAKwM4Ig8gEiAAKwMooiIMmWMNACAAKwNAIg4gECAAKwMwoiINmWMNACABQQJNBEAgDCAPoyANIA6jEE9EAAAAAAAA8D9jIQYMAQsgDSAHIAAoAhwgAXAiBEEBaiICQQAgASACRxsiAiAAKAIgIghqQQR0aiIDKwMAIhAgByAEIAhqQQR0aiIJKwMAIg+hIhGiIAMrAwgiEiAJKwMIIg6hIhMgDKKhIA4gEaIgEyAPoqEiFKFEAAAAAAAAAABmIBFEAAAAAAAAAACiIBNEAAAAAAAAAACioSAUoUQAAAAAAAAAAGZzDQAgDUQAAAAAAAAAACAQoSIRokQAAAAAAAAAACASoSITIAyioSASIBGiIBMgEKKhIhShRAAAAAAAAAAAZiAOIBGiIBMgD6KhIBShRAAAAAAAAAAAZnMiCUUEQEEBIQYgDSAPoiAOIAyioSAPRAAAAAAAAAAAoiAORAAAAAAAAAAAoqEiEaFEAAAAAAAAAABmIA8gEqIgDiAQoqEgEaFEAAAAAAAAAABmRg0BCyABQQFrIQpBASEGAkADQCABIAZGDQEgBkEBaiEGIA0gByAIAn8gCUUEQCACIgNBAWogAXAMAQsgBCAKaiABcCEDIAQLIgJqQQR0aiILKwAAIAcgCCADIgRqQQR0aiIDKwAAIhChIg+iIAsrAAggAysACCISoSIOIAyioSASIA+iIA4gEKKhIhChRAAAAAAAAAAAZiAPRAAAAAAAAAAAoiAORAAAAAAAAAAAoqEgEKFEAAAAAAAAAABmRg0ACyAAIAQ2AhxBACEGDAELIAAgBDYCHEEBIQYLIAVBMGokACAGC7wCAQN/IwBBkAFrIgQkAAJAIAItAABFBEAgAEGQjgVBKBAgGgwBCyAEQQ86AGcCQAJAIAEoAhAiBSgCeC0AUkEBRgRAAkAgASgCECgCeCgCSCIFLQAEQQJGDQAgBSgCACACEIMPIgVFDQAgBCAFLQAjOgBnIAVBMGohBgsgBg0BIAEoAhAhBQsgBEEYaiIGQQBByAAQMxpBACEDIAUoAggoAghB6KQKRwRAIAQgATYCGCAGIQMLIAFBACAEQegAaiACIAQtAGcgAxC9BEUNASABIAIQzw4MAQsgASAGIARB6ABqIANBy8IBIAMbIgMgBC0AZ0EAEL0ERQ0AIAEQHiEBIAQgAzYCCCAEIAI2AgQgBCABNgIAQfWvBCAEECcLIARBADYCjAEgACAEQegAakEoECAaCyAEQZABaiQACxoAIAAoAhAoAgwiAARAIAAoAiwQFyAAEBcLC5UFAgR8CX9BMBBNIQYgACgCECgCCCgCCCgCBCEKAnwgAEGMjAsoAgBEAAAAAAAA8L9EexSuR+F6hD8QUyAAQYiMCygCAEQAAAAAAADwv0R7FK5H4XqUPxBTIgEQMiICvUKAgICAgICA+L9/UiABvUKAgICAgICA+L9/UnJFBEAgACgCECIFQpqz5syZs+bUPzcDICAFQpqz5syZs+bUPzcDKETNzMzMzMwMQAwBCyACRGEyVTAqqTM/ECQhASAAKAIQIgUgASACIAJEAAAAAAAAAABkGyIBOQMgIAUgATkDKCABRAAAAAAAAFJAogshA0EBIQtBASAAQeSMCygCACAKQQAQUCIHIAdBAU0bIAdBAEcgAEGYjQsoAgBBAUEAEFAiDUEASnEiCmoiBUEBdEEQEBgiCCADRAAAAAAAAOA/oiICOQMYIAggAjkDECAIIAKaIgE5AwggCCABOQMAQQIhCQJAIAdBAkkEQCACIQEMAQsgAiEBA0AgByALRkUEQCAIIAlBBHRqIgwgAUQAAAAAAAAQQKAiAZo5AwggDCACRAAAAAAAABBAoCICmjkDACAMIAI5AxAgDCABOQMYIAtBAWohCyAJQQJqIQkMAQsLIAIgAqAhAwsgCkUgBSAHTXJFBEAgCCAJQQR0aiIFIA23RAAAAAAAAOA/oiIEIAGgIgE5AxggBSAEIAKgIgI5AxAgBSABmjkDCCAFIAKaOQMACyAGQgA3AxAgBkECNgIIIAYgBzYCBCAGQQE2AgAgBiAINgIsIAZCADcDGCAGQgA3AyAgACgCECIAIAIgAqBEAAAAAAAAUkCjIgE5A3AgACABOQNoIAAgA0QAAAAAAABSQKMiATkDKCAAIAE5AyAgACAGNgIMC8EDAgR/AnwjAEHQAGsiASQAIAAQKygCECgCdCECQaiRCyAAKAIQKAJ4KAIAIgM2AgAgACACQQRxRSIEQQFBAiADEDciAiACQQJNG0EBakEBEBgiAxCUCCICRQRAIAEgACgCECgCeCgCADYCIEG35AMgAUEgahAxQaiRC0GWzQE2AgAgACAEQQEgAxCUCCECCyADEBcgAUFAayAAIAIQ1A4gASAAKAIQIgMrAyBEAAAAAAAAUkCiIgU5A0AgASADKwMoRAAAAAAAAFJAoiIGOQNIIABB+IwLKAIAQfqTARB6EGpFBEAgASACKwMAIAUQJCIFOQNAIAEgAisDCCAGECQiBjkDSAsgAEHUjAsoAgBB+pMBEHoQaiEDIAEgASkDSDcDGCABIAEpA0A3AxAgAiABQRBqIAMQ0w4gASAGRAAAAAAAAOA/ojkDOCABIAEpAzg3AwggASAFRAAAAAAAAOC/ojkDMCABIAEpAzA3AwAgAiABQQ8Q0g4gACgCECIAIAIrAwBEAAAAAAAAUkCjOQMgIAIrAwghBSAAIAI2AgwgACAFRAAAAAAAAPA/oEQAAAAAAABSQKM5AyggAUHQAGokAAuAHgMPfxp8A34jAEGAAWsiASQAQTAQTSEIIAAoAhAoAggoAggiBisDGCEaIAYrAyAhHCAGKwMQIAYoAgghBCAGKAIEIQcgBigCAEEARyAAQYE7ECMQanIhDQJAIAZBoKQKRg0AIA0EQCAAQYyMCygCAEQAAAAAAAAAAER7FK5H4XqEPxBTIABBiIwLKAIARAAAAAAAAAAARHsUrkfhepQ/EFMQJEQAAAAAAABSQKIiEyEVIBNEAAAAAAAAAABkDQEgACgCECICKwMgIAIrAygQMkQAAAAAAABSQKIiEyEVDAELIAAoAhAiAisDKEQAAAAAAABSQKIhEyACKwMgRAAAAAAAAFJAoiEVCyAAQeSMCygCACAHQQAQUCEJIABB7IwLKAIARAAAAAAAAAAARAAAAAAAgHbAEFMgBEUEQCAAQfCMCygCAEQAAAAAAAAAAEQAAAAAAABZwBBTIRwgAEHgjAsoAgBBBEEAEFAhBCAAQfSMCygCAEQAAAAAAAAAAEQAAAAAAABZwBBTIRoLAkAgACgCECgCeCICKwMgIhZEAAAAAAAAAABkRSACKwMYIhFEAAAAAAAAAABkQX9zcSAGQaCkCkZyDQAgAEGr5AAQIyICBEAgAUIANwN4IAFCADcDcCABIAFB+ABqNgJAIAEgAUHwAGo2AkQgAkHThAEgAUFAaxBJIQIgASABKwN4RAAAAAAAAAAAECQiEDkDeCABIAErA3BEAAAAAAAAAAAQJCIXOQNwIAJBAEoEQCAQRAAAAAAAAFJAoiIQIBCgIhAgEaAhESACQQFHBEAgF0QAAAAAAABSQKIiECAQoCAWoCEWDAMLIBAgFqAhFgwCCyAWRAAAAAAAACBAoCEWIBFEAAAAAAAAMECgIREMAQsgFkQAAAAAAAAgQKAhFiARRAAAAAAAADBAoCERCyAAKAIQKAJ4KwMYIRQgABArKAIQKAIIKwMAIhBEAAAAAAAAAABkBHwgEEQAAAAAAABSQKIiECAWIBCjm6IhFiAQIBEgEKObogUgEQshHyABIBYCfwJAIAAoAhAoAggiAi0ADEEBRgRAIAIoAgBB5+sAEEdFDQEgAEGXmgEQIyEGIAFB4ABqIAAQKyAGEI4GIAEoAmAiByABKAJkIgJxQX9GBEAgASAAEB42AiQgASAGQfrYASAGGzYCIEGS7gQgAUEgahAnDAILIAAQKygCEEEBOgByIAdBAmohAyACQQJqDAILIABBrp0BECMiBkUNACAGLQAARQ0AIAFB4ABqIAAQKyAGEI4GIAEoAmAiByABKAJkIgJxQX9GBEAgASAAEB42AjQgASAGNgIwQb/uBCABQTBqECcMAQsgABArKAIQQQE6AHIgB0ECaiEDIAJBAmoMAQtBAAu3IiAQJDkDaCABIB8gA7cQJDkDYCAEQfgAIBq9IBy9hFAgBEECS3IbIQQgAEGKswEQIyICBH9B9ABB4gBB4wAgAi0AACICQeIARhsgAkH0AEYbBUHjAAshA6AhIiAAKAIQIgIoAnggAzoAUAJAAkAgBEEERw0AICIQugeZRAAAAAAAAOA/Y0UgGr1CAFJyDQBBASEKIBy9UA0BCyACKAIIKAIIKAIsIgIEQCACKAIAIQIgASABKQNoNwMYIAEgASkDYDcDECABQdAAaiABQRBqIAIRBAAgASABKQNYNwNoIAEgASkDUDcDYEEAIQoMAQsCQCATIAErA2giF0TNO39mnqD2P6IiEGRFIANB4wBHckUEQCABRAAAAAAAAPA/RAAAAAAAAPA/IBcgE6MiECAQoqGjnyABKwNgoiIYOQNgIBchEAwBCyABIBA5A2ggASABKwNgRM07f2aeoPY/oiIYOQNgC0EAIQogBEEDSQ0AIAEgEEQYLURU+yEJQCAEuKMQRCIQozkDaCABIBggEKM5A2ALIAErA2ghFwJAAkAgAEH4jAsoAgBB+pMBEHoiAi0AAEHzAEcNACACQYKWARBHRQ0AIAEgEzkDaCABIBU5A2AgCCAIKAIoQYAQcjYCKAwBCyACEGoEQAJAIBUgACgCECgCeCICKwMYY0UEQCATIAIrAyBjRQ0BCyAAEB4hAiABIAAQKxAeNgIEIAEgAjYCAEHzgwQgARAnCyABIBM5A2ggASAVOQNgDAELIAEgFSABKwNgECQiFTkDYCABIBMgASsDaBAkIhM5A2gLIA0EQCABIBUgExAkIhM5A2AgASATOQNoIBMhFQsgESAUoSEQAnwgHyIRIABB1IwLKAIAQfqTARB6EGoNABogCgRAIBEgASsDYBAkDAELIB8gFiABKwNoIhRjRQ0AGiARRAAAAAAAAPA/IBYgFqIgFCAUoqOhnyABKwNgohAkCyERIAAoAhAoAngiAiARIBChOQMoIAgoAihBgBBxIg9FBEAgAiAWICAgFqEgASsDaCAXoSIRoCARIBYgIGMboDkDMAtBASELQQEgCSAJQQFNGyIGIAlBAEcgAEGYjQsoAgBBAUEAEFAiAkEASnFqIQwgArchI0ECIQcCQAJAAkAgBEECTQRAIAxBAXRBEBAYIQUgASsDYCEUIAUgASsDaCITRAAAAAAAAOA/oiIROQMYIAUgFEQAAAAAAADgP6IiEDkDECAFIBGaOQMIIAUgEJo5AwAgCUECSQ0BA0AgCSALRgRAIBEgEaAhEyAQIBCgIRQMAwUgBSAHQQR0aiICIBFEAAAAAAAAEECgIhGaOQMIIAIgEEQAAAAAAAAQQKAiEJo5AwAgAiAQOQMQIAIgETkDGCALQQFqIQsgB0ECaiEHDAELAAsACyAEIAxsQRAQGCEFAkAgACgCECgCCCgCCCgCLCICBEAgBSABQeAAaiACKAIEEQQAIAErA2hEAAAAAAAA4D+iIRkgASsDYEQAAAAAAADgP6IhGAwBC0QYLURU+yEZQCAEuKMiJEQYLURU+yEJwKBEAAAAAAAA4D+iIhREGC1EVPshCUAgJKFEAAAAAAAA4D+ioCEQIBpEzTt/Zp6g9j+iICREAAAAAAAA4D+iIhcQRKMhKCAcRAAAAAAAAOA/oiEpIBQQVyIdRAAAAAAAAOA/oiERIBQQRCIeRAAAAAAAAOA/oiEmQQAhA0QAAAAAAAAAACEYIByZIBqZoEQAAAAAAADwPxBPISAgASsDaCEhIAErA2AhGyAXEFchJyAiRAAAAAAAgGZAo0QYLURU+yEJQKIhFANAIAMgBEYNASAkIBCgIhAQRCESIAUgA0EEdGoiAiAUICcgEBBXoiARoCIRICcgEqIgJqAiJiARICiiICCgoiApIBGioCISEKcBoCIXEFciHSASIBEQTyISoiAhoiIlOQMIIAIgGyASIBcQRCIeoqIiEjkDACADQQFqIQMgJZkgGRAkIRkgEpkgGBAkIRggCkUNAAsgBSASOQMwIAUgJTkDGCAFICWaIhE5AzggBSAROQMoIAUgEpoiETkDICAFIBE5AxALIAEgEyAZIBmgIhEQJCITOQNoIAEgFSAYIBigIhAQJCIUOQNgIBMgEaMhESAUIBCjIRBBACEDA0AgAyAERkUEQCAFIANBBHRqIgIgESACKwMIojkDCCACIBAgAisDAKI5AwAgA0EBaiEDDAELCyAMQQJJDQFBASAEIARBAU0bIQsgBSsDCCIZvSEqIAUrAwAiGL0hK0EBIQMDQAJAIAMgC0YEQCASvSEsDAELIAUgBCADayAEcEEEdGoiAisDCCEQIAIrAwAiEr0iLCArUg0AIANBAWohAyAQvSAqUQ0BCwsgKyAsUSAqIBC9UXFFBEBBACEKIBkgEKEgGCASoRCnASERIAQgCWxBBHQhBwJAA0AgBCAKRgRAQQAhAyAEIAlBAWtsQQR0IQsgDEEBayAEbEEEdCEGIBQhECATIREDQCADIARGDQcgBSADQQR0aiIHIAtqIgIrAwAgAisDCCAGIAdqIgIrAwAgA0EBaiEDIAIrAwiZIhIgEqAgERAkIRGZIhIgEqAgEBAkIRCZIhIgEqAgExAkIROZIhIgEqAgFBAkIRQMAAsACyAFIApBBHRqIg4rAwgiFb0hKkEBIQMCQCAOKwMAIhe9IisgEr1SICogEL1SckUEQCARIRIMAQsDQAJAIAMgC0YEQCAYvSEsDAELIAUgAyAKaiAEcEEEdGoiAisDCCEZIAIrAwAiGL0iLCArUg0AIANBAWohAyAqIBm9UQ0BCwsgKyAsUSAqIBm9UXENAiARRBgtRFT7IQlAoCAZIBWhIBggF6EQpwEiEqFEAAAAAAAA4D+iIhAQVyEbIBEgEKEiEBBERAAAAAAAABBAIBujIhGiIR4gEBBXIBGiIR0LQQEhAwJAAkAgHkQAAAAAAAAAAGIEQCAVIREgFyEQDAELIBUhESAXIRAgHUQAAAAAAAAAAGENAQsDQCADIAZGBEAgCSAMSQRAIAcgDmoiAiAdICOiRAAAAAAAAOA/okQAAAAAAADQP6IgEaA5AwggAiAeICOiRAAAAAAAAOA/okQAAAAAAADQP6IgEKA5AwALIApBAWohCiASIREgFSEQIBchEgwDBSAOIAMgBGxBBHRqIgIgHSARoCIROQMIIAIgHiAQoCIQOQMAIANBAWohAwwBCwALAAsLQfOVA0HcuAFBmBJBhR8QAAALQdyYA0HcuAFBixJBhR8QAAALQdyYA0HcuAFB9RFBhR8QAAALQQIhBCAJIAxPDQAgBSAJQQV0aiICICNEAAAAAAAA4D+iIhIgEKAiEDkDECACIBIgEaAiEZo5AwggAiAQmjkDACACIBE5AxggESARoCERIBAgEKAhEAwBCyAUIRAgEyERCyAIIBw5AyAgCCAiOQMQIAggBDYCCCAIIAk2AgQgCCANNgIAIAggBTYCLCAIIBo5AxgCQCAPBEAgHyAQECQhECAAKAIQIgMgEEQAAAAAAABSQKM5A2ggAyAWIBMQJEQAAAAAAABSQKM5AyggAyAfIBQQJEQAAAAAAABSQKM5AyAgFiARECQhEQwBCyAAKAIQIgMgEEQAAAAAAABSQKM5A2ggAyATRAAAAAAAAFJAozkDKCADIBREAAAAAAAAUkCjOQMgCyADIAg2AgwgAyARRAAAAAAAAFJAozkDcCABQYABaiQACwkAIAAoAkQQFwsLACAAIAFBARCQAQsMACAAKAIQKAIMEBcLvAUCCH8CfCMAQcAJayIBJAACQAJAIABBl5oBECMQ4QUiBQRAQfiQCygCACICRQRAQfiQC0GYnApB7MkKKAIAEH8iAjYCAAsgAiAFQYAEIAIoAgARAwAiAkUEQCAFQcU7EKAEIgZFDQJBACECAkACQAJAAkADQCABQcABaiIEQYAIIAYQoQQEQCABIAFB0ABqNgJMIAEgAUHUAGo2AkggASABQdgAajYCRCABIAFB3ABqNgJAQQEhByAEQfCxASABQUBrEElBBEYgAnIiAiABLQDAAUElRwRAIARB/rABEJ4EQQBHIANyIQMLIANxQQFxRQ0BDAILCyADIQcgAkEBcUUNAQtB0AAQTSICIAEoAlwiA7c5AyAgAiABKAJYIgS3OQMoIAIgASgCVCADa7c5AzAgASgCUCEDIAIgBTYCCCACIAMgBGu3OQM4QZCRC0GQkQsoAgAiA0EBajYCACACIAM2AgwgBhDEDCABQeAAahDADCACIAEoAngiBEEBakEBEBgiAzYCRCAGQQBBABDLARogAyAEQQEgBhC7BUEBRgRAIAMgBGpBADoAAEH4kAsoAgAiAyACQQEgAygCABEDABogAiAHQQFxOgAQDAMLIAEgBTYCIEGR7wMgAUEgahAnIAMQFyACEBcMAQsgASAFNgIwQc7uAyABQTBqECcLQQAhAgsgBhDfAyACRQ0DCyACKwMwIQkgACgCECIDIAIrAzgiCkQAAAAAAABSQKM5AyggAyAJRAAAAAAAAFJAozkDIEEYEE0hAyAAKAIQIAM2AgwgAyACKAIMNgIAIAMgAisDIJogCUQAAAAAAADgP6KhOQMIIAMgAisDKJogCkQAAAAAAADgP6KhOQMQDAILIAEgABAeNgIAQb7vAyABECcMAQsgASAFNgIQQfXuAyABQRBqECcLIAFBwAlqJAALHABBFBBNIgEgACkCCDcCCCABIAAoAhA2AhAgAQtDAQJ8An9BASAAKwMAIgIgASsDACIDZA0AGkF/IAIgA2MNABpBASAAKwMIIgIgASsDCCIDZA0AGkF/QQAgAiADYxsLCycAQX8gACgCACgCECgC9AEiACABKAIAKAIQKAL0ASIBSiAAIAFIGwsnAEF/IAEoAgAoAhAoAvQBIgEgACgCACgCECgC9AEiAEogACABShsLRgEBfyMAQRBrIgEkAEEBQQwQRiICRQRAIAFBDDYCAEHo+gYoAgBBqd0DIAEQHRoQJgALIAIgACgCADYCACABQRBqJAAgAgsOACAAKAIIEHkaIAAQFwtKAQN/IAAoAgwiAwRAIAAoAgghAQNAIAIgA08EQCAAKAIIEBcFIAEoAgAQFyACQQFqIQIgAUE4aiEBIAAoAgwhAwwBCwsLIAAQFws+AQF/AkACQAJAIAAoAggiAS0AXEEBaw4CAAECCyABKAJYEI4PDAELIAEoAlgQhA8LIAEQ7wUgARAXIAAQFwsaACAAIAAgAUEBEHMgACACQQEQc0EAQQEQUgsOACAAIAEQpAE2AiBBAAsOACAAIAEQpAE2AiRBAAtwAQF/IwBBEGsiAiQAAn8gAUGZywEQKkUEQCAAQfIANgIAQQAMAQsgAUGoywEQKkUEQCAAQewANgIAQQAMAQsgAUGczAEQKkUEQCAAQe4ANgIAQQAMAQsgAiABNgIAQdqtBCACECdBAQsgAkEQaiQAC0ABAn8jAEEQayICJABBASEDIAFB+9QBQQBB/wEgAkEMahC0AkUEQCAAIAIoAgy3OQMQQQAhAwsgAkEQaiQAIAMLCwAgACABNgIAQQALCwAgACABNgIEQQALUwECfyMAQRBrIgIkAEEBIQMCQCABQa7NAUEAQf//AyACQQxqELQCDQAgAigCDCIBRQRAQauvBEEAECcMAQsgACABOwFSQQAhAwsgAkEQaiQAIAMLUwECfyMAQRBrIgIkAEEBIQMCQCABQbbNAUEAQf//AyACQQxqELQCDQAgAigCDCIBRQRAQdCvBEEAECcMAQsgACABOwFQQQAhAwsgAkEQaiQAIAMLHwAgACABQdKuBEGczAFBgAJBmcsBQYAEQajLARD7BguNAQEBfyMAQRBrIgIkAAJ/AkACQCABQajLARAqRQRAIAAgAC8BJEEEcjsBJAwBCyABQZnLARAqRQRAIAAgAC8BJEECcjsBJAwBCyABQajKARAqRQRAIAAgAC8BJEEGcjsBJAwBCyABQZzMARAqDQELQQAMAQsgAiABNgIAQf+uBCACECdBAQsgAkEQaiQAC0ABAn8jAEEQayICJABBASEDIAFBhtMBQQBB//8DIAJBDGoQtAJFBEAgACACKAIMOwEmQQAhAwsgAkEQaiQAIAMLHQAgACABQbOtBEG+1QFBCEGLzQFBEEHFzQEQ+wYLDgAgACABEKQBNgIMQQALDgAgACABEKQBNgIIQQALjwQBBX8jAEHQAGsiAiQAAkAgAQRAAkADQCAFQQJGDQEgBUG9mANqIAVBvpgDaiEDIAVBAWohBS0AACEEA0AgAy0AACIGRQ0BIANBAWohAyAEIAZHDQALC0GOqgNBqf0AQTVB4PIAEAAAC0EAIQUgAUG9mAMQ2QMhBCABIQMDQCADRQ0CIAIgBDYCTCACIAM2AkggAiACKQJINwNAAkAgAkFAa0Gh1wEQswMEQCAAIAAtACpBAnI6ACoMAQsgAiACKQJINwM4IAJBOGpB8NEBELMDBEAgACAALQAqQQFyOgAqDAELIAIgAikCSDcDMCACQTBqQYPXARCzAwRAIAAgAC0AKkHnAXE6ACoMAQsgAiACKQJINwMoAkAgAkEoakHF1QEQswNFBEAgAiACKQJINwMgIAJBIGpBy8sBELMDRQ0BCyAAIAAtACpBBHI6ACoMAQsgAiACKQJINwMYIAJBGGpBk9cBELMDBEAgACAALQAqQQhyOgAqDAELIAIgAikCSDcDECACQRBqQZrXARCzAwRAIAAgAC0AKkEQcjoAKgwBCyACIAM2AgQgAiAENgIAQaquBCACECdBASEFCyADIARqIQZBACEDQQAhBCAGIAEQNyABakYNACAGQb2YAxC1BSAGaiIDQb2YAxDZAyEEDAALAAtB9c4BQan9AEEtQeDyABAAAAsgAkHQAGokACAFC78BAQN/IwBBEGsiBCQAA0AgAS0AACIDBEAgAUEBaiEBAkACQAJAAkACQCADQSBqIAMgA8AiA0HBAGtBGkkbwEHiAGtBH3cOCgMEBAQEAAQEAgEECyACQYAIciECDAULIAJBgBByIQIMBAsgAkGAIHIhAgwDCyACQYDAAHIhAgwCCyAEIAM2AgQgBCADNgIAQdKfBCAEECcMAQsLIAJB//8DcUGA+ABHBEAgACAALwEkIAJyOwEkCyAEQRBqJABBAAsPACAAIAFBAUHmrAQQ6goLDgAgACABEKQBNgIEQQALDgAgACABEKQBNgIQQQALDgAgACABEKQBNgIAQQALQAECfyMAQRBrIgIkAEEBIQMgAUGfywFBAEH//wMgAkEMahC0AkUEQCAAIAIoAgw7AShBACEDCyACQRBqJAAgAws/AQJ/IwBBEGsiAiQAQQEhAyABQafVAUEAQegCIAJBDGoQtAJFBEAgACACLwEMNgIcQQAhAwsgAkEQaiQAIAMLVwEBfyMAQRBrIgIkAAJ/AkACQCABQYbVARAqRQRAIAAgAC8BJEEBcjsBJAwBCyABQZHVARAqDQELQQAMAQsgAiABNgIAQYCuBCACECdBAQsgAkEQaiQACw8AIAAgAUECQYutBBDqCgsOACAAIAEQpAE2AhhBAAtOAQJ/IwBBEGsiAiQAQQEhAyABQYrUAUGAf0H/ACACQQxqELQCRQRAIAAgAigCDDoAICAAIAAvASRBgAFyOwEkQQAhAwsgAkEQaiQAIAMLTQECfyMAQRBrIgIkAEEBIQMgAUH+0wFBAEH/ASACQQxqELQCRQRAIAAgAigCDDoAIiAAIAAvASRBwAByOwEkQQAhAwsgAkEQaiQAIAMLPwECfyMAQRBrIgIkAEEBIQMgAUHrzAFBAEH/ACACQQxqELQCRQRAIAAgAigCDDoAWEEAIQMLIAJBEGokACADC0wBAn8jAEEQayICJABBASEDIAFB78wBQQBB/wEgAkEMahC0AkUEQCAAIAIoAgw6ACEgACAALwEkQSByOwEkQQAhAwsgAkEQaiQAIAMLDgAgACABEKQBNgIUQQALHQAgACABQdqtBEGczAFBAkGZywFBBEGoywEQ+wYLXQEBf0EAIQACQEHojgstAABFDQADQCACBEAgAS0AACIDQSBPBEBBzI4LKAIAIAPAEM8BIABBAWohAAsgAUEBaiEBIAJBAWshAgwBCwsgAEUNAEHIjgtBiwI2AgALC/kDACABQc/VARAqRQRAQeiOC0EBOgAAQciOC0GIAjYCAA8LAkAgAUHdywEQKgRAIAFBoNMBECoNAQtByI4LQYUCNgIADwsgAUG91gEQKkUEQEHIjgtBiQI2AgBB6I4LQQA6AAAPCyABQfzNARAqRQRAQciOC0GHAjYCAA8LIAFBjcsBECpFBEBByI4LQYoCNgIADwsgAUHC2AEQKkUEQEHIjgtBjgI2AgAPCyABQaPKARAqRQRAQciOC0GPAjYCAA8LIAFBj80BECpFBEBByI4LQZACNgIADwsgAUH90gEQKkUEQEHIjgtBjQI2AgAPCyABQYfNARAqRQRAQciOC0GRAjYCAA8LIAFBjNgBECpFBEBByI4LQZICNgIADwsgAUHYywEQKkUEQEHIjgtBkwI2AgAPCyABQfbMARAqRQRAQciOCygCAEGbAkYEQEHIjgtBmgI2AgAPC0HIjgtBggI2AgAPCyABQZnMARAqRQRAQciOCygCAEGVAkYEQEHIjgtBlAI2AgAPC0HIjgtBlgI2AgAPCyABQdrLARAqRQRAQciOCygCAEGYAkYEQEHIjgtBlwI2AgAPC0HIjgtBmQI2AgAPCyABQZvUARAqRQRAQciOCygCAEGdAkYEQEHIjgtBnAI2AgAPC0HIjgtBgwI2AgAPCyABEJkPC4wFACABQc/VARAqRQRAQfgAEE0iAEH/AToAWCAAQX82AmQgAEHglwpBFiACQYXaARDGBEGEjwsgADYCAEHIjgtBngI2AgBB6I4LQQA6AAAPCwJAIAFB3csBECoEQCABQaDTARAqDQELQciOC0GEAjYCAEHojgtBADoAAA8LAkAgAUG91gEQKkUEQEHojgtBAToAAEHoABBNIgBBgYAENgJQIABBkJkKQRYgAkHA2gEQxgRByI4LQZ8CNgIADAELIAFBjcsBECpFBEAgACACQQAQggMhAEHIjgtBoAI2AgAMAQsgAUHC2AEQKkUEQCAAQQBBARCCAyEAQciOC0GiAjYCAAwBCyABQdjLARAqRQRAIABBAEEgEIIDIQBByI4LQacCNgIADAELIAFBo8oBECpFBEAgAEEAQQQQggMhAEHIjgtBowI2AgAMAQsgAUGPzQEQKkUEQCAAQQBBwAAQggMhAEHIjgtBpAI2AgAMAQsgAUH90gEQKkUEQCAAQQBBAhCCAyEAQciOC0GhAjYCAAwBCyABQYfNARAqRQRAIABBAEEIEIIDIQBByI4LQaUCNgIADAELIAFBjNgBECpFBEAgAEEAQRAQggMhAEHIjgtBpgI2AgAMAQsgAUH2zAEQKkUEQEGEjwtBADYCAEGEjwtB2JoKQQEgAkHA2QEQxgRByI4LQZsCNgIADwsgAUGZzAEQKkUEQEHIjgtBlQI2AgAPCyABQdrLARAqRQRAQciOC0GYAjYCAA8LIAFBm9QBECpFBEBBKBBNIgBB4JoKQQIgAkHU2QEQxgRByI4LQZ0CNgIADAELIAFB/M0BECpFBEBByI4LQYYCNgIADwsgARCZDw8LQYSPCyAANgIACw4AIAJEAAAAAAAA4D+iCyUAIAAgAaMiAEQAAAAAAADwPyAAoSAARAAAAAAAAOA/ZRsgAqILFAAgACABoyACokQAAAAAAADgP6ILHgBEAAAAAAAA8D8gACABo6EgAqJEAAAAAAAA4D+iCxcAIAAoAgBBB0YEQCAAKAJwQQEQ+A4LCwoAIAAgAUEBEHMLCwBB2IsLIAA2AgALC8KGCqMDAEGACAvl7AT/2P/gAMXQ08YAfgB7JXN9ACAtdGFncyB7JWQlcyVwfQAgJS4wZn0AJXMgeyAlcyB9AHxlZGdlbGFiZWx8ACAtZm9udCB7AHF1YXJ0egBpZHggPT0gc3oAY250ID09IHN6AGxvegBncmFwaHZpegBndndyaXRlX25vX3oAcG9ydGhveHkAc2NhbGV4eQAvc3ZnL25hdnkAaW52ZW1wdHkAbm9kZV9zZXRfaXNfZW1wdHkAbm9kZV9zdGFja19pc19lbXB0eQByZWZlcmVuY2UgdG8gYmluYXJ5IGVudGl0eQBhc3luY2hyb25vdXMgZW50aXR5AGluY29tcGxldGUgbWFya3VwIGluIHBhcmFtZXRlciBlbnRpdHkAZW50aXR5IGRlY2xhcmVkIGluIHBhcmFtZXRlciBlbnRpdHkAY2Fubm90IHN1c3BlbmQgaW4gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eQBYTUwgb3IgdGV4dCBkZWNsYXJhdGlvbiBub3QgYXQgc3RhcnQgb2YgZW50aXR5AHVuZGVmaW5lZCBlbnRpdHkAaW5maW5pdHkAZmFudGFzeQBTcGFyc2VNYXRyaXhfY29vcmRpbmF0ZV9mb3JtX2FkZF9lbnRyeQAvc3ZnL2l2b3J5AG91dCBvZiBtZW1vcnkARmVicnVhcnkASmFudWFyeQBndnBsdWdpbl9kb3RfbGF5b3V0X0xUWF9saWJyYXJ5AGd2cGx1Z2luX25lYXRvX2xheW91dF9MVFhfbGlicmFyeQBndnBsdWdpbl9jb3JlX0xUWF9saWJyYXJ5AGdhdGhlcl90aW1lX2VudHJvcHkAbm9kZXNfY29weQBhbGJhbnkASnVseQBTcGFyc2VNYXRyaXhfbXVsdGlwbHkAZXF1YWxseQBhc3NlbWJseQBzdW1tZXJza3kAc2h5AHNhdGlzZnkAYmVhdXRpZnkAbm9qdXN0aWZ5AENsYXNzaWZ5AC9zdmcvbGlnaHRncmV5AC9zdmcvZGltZ3JleQAvc3ZnL2RhcmtncmV5AC9zdmcvbGlnaHRzbGF0ZWdyZXkAL3N2Zy9kYXJrc2xhdGVncmV5AC9zdmcvc2xhdGVncmV5AHdlYmdyZXkAeDExZ3JleQAvc3ZnL2dyZXkAbW92ZSB0byBmcm9udCBsb2NrIGluY29uc2lzdGVuY3kAZXh0cmFjdF9hZGphY2VuY3kAbWVyZ2Vfb25ld2F5AGFycmF5AGFsbG9jQXJyYXkAL3N2Zy9saWdodGdyYXkAL3N2Zy9kaW1ncmF5AC9zdmcvZGFya2dyYXkAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyYXkAd2ViZ3JheQB4MTFncmF5AC9zdmcvZ3JheQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkALi4vLi4vbGliL2NncmFwaC9ncmFtbWFyLnkAJW0vJWQvJXkAcG9ydGhveXgAcG9ydGhvX3l4AHh4eABib3gAdmlld0JveABjaGtCb3VuZEJveAAvTWVkaWFCb3gAZ2V0X2VkZ2VfbGFiZWxfbWF0cml4AGlkZWFsX2Rpc3RhbmNlX21hdHJpeABtdXN0IG5vdCB1bmRlY2xhcmUgcHJlZml4AHVuYm91bmQgcHJlZml4AGh0bWxsZXgAbm9kZV9zZXRfaW5kZXgAbWF4ACMlMDJ4JTAyeCUwMnglMDJ4ACMlMDJ4JTAyeCUwMngAIyUyeCUyeCUyeCUyeAAjJTF4JTF4JTF4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAcmFycm93AGxhcnJvdwBIZWx2ZXRpY2EtTmFycm93AGFycm93X2xlbmd0aF9jcm93AC9zdmcvc25vdwBzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfc2xvdwAvc3ZnL2xpZ2h0eWVsbG93AC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL3llbGxvdwBmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93AGZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3cAY291cmllcm5ldwBTcHJpbmdTbW9vdGhlcl9uZXcAVHJpYW5nbGVTbW9vdGhlcl9uZXcAZGlhZ19wcmVjb25fbmV3AFF1YWRUcmVlX25ldwBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcjJfbmV3AHIgJiYgbiAmJiBuZXcAc2tldwBzdHJ2aWV3AC9zdmcvaG9uZXlkZXcAIC1hbmNob3IgdwBzb3J0dgBwb3Y6cG92AE5vdgBpbnYAZXF1aXYAcGl2AG5vbmFtZS5ndgBjYyVzXyV6dQBjYyVzKyV6dQAvc3ZnL3BlcnUAbnUAbXUAJWMlbGx1AFRodQB0YXUAVGF1AE51AE11AF9wb3J0XyVzXyglZClfKCVkKV8ldQBwbGFpbnRleHQAPHRleHQAc3RyZXNzd3QAaW5wdXQAdGV4dGxheW91dABkb3RfbGF5b3V0AG5lYXRvX2xheW91dABpbml0TGF5b3V0AGNsdXN0AG1hcENsdXN0AGxhYmVsanVzdABzY0FkanVzdABBdWd1c3QAZWRnZXNmaXJzdABub2Rlc2ZpcnN0AG1heGltYWxfaW5kZXBlbmRlbnRfZWRnZV9zZXRfaGVhdmVzdF9lZGdlX3Blcm5vZGVfc3VwZXJub2Rlc19maXJzdABleGlzdAByZWFsaWduTm9kZWxpc3QAYXBwZW5kTm9kZWxpc3QAZGVmYXVsdGRpc3QAbWluZGlzdABwb3dlcl9kaXN0AGdyYXBoX2Rpc3QAYXZnX2Rpc3QAZ2V0RWRnZUxpc3QAaXF1ZXN0AGxvd2FzdABzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfZmFzdABndl9zb3J0AGRlZ2xpc3Rfc29ydAB2aWV3cG9ydAB0YWlscG9ydAB1bmV4cGVjdGVkIHBhcnNlciBzdGF0ZSAtIHBsZWFzZSBzZW5kIGEgYnVnIHJlcG9ydABoZWFkcG9ydABpbnNlcnQAUlRyZWVJbnNlcnQAZmluZFNWZXJ0AHN0YXJ0AHBhcnQAZXN0aW1hdGVfdGV4dF93aWR0aF8xcHQAcXVvdAB/cm9vdABub3QAZW1pdF94ZG90AHhkb3Q6eGRvdABlcHM6eGRvdABzdmc6eGRvdABqcGc6eGRvdABwbmc6eGRvdABqcGVnOnhkb3QAZ2lmOnhkb3QAanBlOnhkb3QAeGRvdDEuNDp4ZG90AHhkb3QxLjI6eGRvdABzZG90AG1pZGRvdABndjpkb3QAcGxhaW4tZXh0OmRvdABkb3Q6ZG90AGVwczpkb3QAY2Fub246ZG90AHBsYWluOmRvdABzdmc6ZG90AGpwZzpkb3QAcG5nOmRvdABqcGVnOmRvdABnaWY6ZG90AGpwZTpkb3QAf2JvdABkb0RvdABvYmpsaXN0X2Zyb250AG5vZGVsaXN0X2Zyb250AHBvaW50c19mcm9udABzcGFuLT5mb250AHZhZ3hicHJpbnQAbG9jYXRlX2VuZHBvaW50AGRlY2lkZV9wb2ludABVbnNhdGlzZmllZCBjb25zdHJhaW50AHRyYW5zcGFyZW50AGNvbXBvbmVudABpbnZhbGlkIGFyZ3VtZW50AGNvbW1lbnQAanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50AGNlbnQAaSA9PSBlY250AGFyaWFsbXQAbHQAY2lyY3VpdABwb2x5X2luaXQATXVsdGlsZXZlbF9pbml0AG5zbGltaXQAbWNsaW1pdABQb3J0cmFpdABsaWdodAB2aXJ0dWFsX3dlaWdodABsaGVpZ2h0AEtQX1JpZ2h0AEJvb2ttYW4tTGlnaHQAZ3QAS1BfTGVmdABhZ3hzZXQAY2hhcnNldABpbnNldABiaXRhcnJheV9yZXNldABzdWJzZXQAYml0YXJyYXlfc2V0AG5vZGVsaXN0X3NldABpbnRzX3NldABub2Rlc19zZXQAc2NhcmxldAAvc3ZnL2Rhcmt2aW9sZXQAL3N2Zy9ibHVldmlvbGV0AC9zdmcvdmlvbGV0AFRyZWJ1Y2hldABhZ3hnZXQAdGFpbHRhcmdldABsYWJlbHRhcmdldABlZGdldGFyZ2V0AGhlYWR0YXJnZXQAYml0YXJyYXlfZ2V0AG5vZGVsaXN0X2dldABzZWdfbGlzdF9nZXQAc2FtZV9saXN0X2dldABlZGdlX2xpc3RfZ2V0AHBvaW50c19nZXQAYm94ZXNfZ2V0AHRyaWFuZ2xlc19nZXQAY3ljbGVzX2dldABub2Rlc19nZXQAYmV6aWVyX3BhdGhfZ2V0AHN0eWxlc2hlZXQAc3RyaWN0AGFnY29weWRpY3QAYWdtYWtlZGF0YWRpY3QAcmVjLT5kaWN0ID09IGRhdGFkaWN0AHdyaXRlX2RpY3QAc2VjdABlbmNvZGluZyBzcGVjaWZpZWQgaW4gWE1MIGRlY2xhcmF0aW9uIGlzIGluY29ycmVjdABhc3BlY3QAbGF5ZXJzZWxlY3QAQ29tYmluZVJlY3QAS1BfU3VidHJhY3QAUXVhZFRyZWVfcmVwdWxzaXZlX2ZvcmNlX2ludGVyYWN0AGNvbXBhY3QAT2N0AHJlcXVlc3RlZCBmZWF0dXJlIHJlcXVpcmVzIFhNTF9EVEQgc3VwcG9ydCBpbiBFeHBhdABsYWJlbGZsb2F0AGxhYmVsX2Zsb2F0AFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfZm9ybWF0AC9zdmcvd2hlYXQAb2JqbGlzdF9hdABub2RlbGlzdF9hdABzYW1lX2xpc3RfYXQAcG9pbnRzX2F0AHRyaWFuZ2xlc19hdABub2Rlc19hdABTYXQAQWdyYXBoaW5mb190AEFnZWRnZWluZm9fdABBZ25vZGVpbmZvX3QAXHQAZmxhdGluZGV4KGFnaGVhZChlKSkgPCBNLT5ucm93cwBtaW51cwBvcGx1cwBoZWFydHMAc2FtcGxlcG9pbnRzAGRpcmVkZ2Vjb25zdHJhaW50cwBsZXZlbCBhc3NpZ25tZW50IGNvbnN0cmFpbnRzAHh5IHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHl4IHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHh5IG9ydGhvZ29uYWwgY29uc3RyYWludHMAeXggb3J0aG9nb25hbCBjb25zdHJhaW50cwBsaW5lIHNlZ21lbnRzAHJlY3RzAGFjY291bnRpbmdSZXBvcnRTdGF0cwBlbnRpdHlUcmFja2luZ1JlcG9ydFN0YXRzAFphcGZEaW5nYmF0cwByZW1pbmNyb3NzAGNvbXByZXNzAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAGJyYXNzAGNsYXNzAGFwcGx5YXR0cnMAYWdtYWtlYXR0cnMAYmluZGF0dHJzAHBhcnNlX2xheWVycwBta0NsdXN0ZXJzAHJvdW5kX2Nvcm5lcnMAbWFrZV9iYXJyaWVycwBjZGF0YS5udG9wbGV2ZWwgPT0gYWdubm9kZXMoZykgLSBjZGF0YS5udmFycwBjYW5ub3QgcmVhbGxvYyBvcHMAY2Fubm90IHJlYWxsb2MgcG5scHMAZXBzAGNvcmVfbG9hZGltYWdlX3BzAGVwczpwcwBwczI6cHMAKGxpYik6cHMAZ3ZfdHJpbV96ZXJvcwBhZ3hidWZfdHJpbV96ZXJvcwB0ZXhneXJlaGVyb3MAaW1hZ2Vwb3MAdGlub3MAc2V0RWRnZUxhYmVsUG9zAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMAeGxpbnRlcnNlY3Rpb25zAGNvbHVtbnMAbm9kZXNfY29udGFpbnMAZGVqYXZ1c2FucwBuaW1idXNzYW5zAGxpYmVyYXRpb25zYW5zAGZyZWVzYW5zAE9wZW5TYW5zAG9mZnNldCA9PSBuX3Rlcm1zAGRpdGVtcwBkaWFtcwBmbGF0aW5kZXgoYWd0YWlsKGUpKSA8IE0tPm5jb2xzAGNhbm5vdCByZWFsbG9jIGRxLnBubHMAY2Fubm90IHJlYWxsb2MgcG5scwBsZXZlbHMAZm9yY2VsYWJlbHMAZGlhZ29uYWxzAG1lcmdlX3JhbmtzAGJ1aWxkX3JhbmtzAG9ianBscG1rcwBzcGxpdEJsb2NrcwBpbnZpcwBjYW5ub3QgcmVhbGxvYyB0cmlzAENhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzAHllcwBzaG93Ym94ZXMAYmVhdXRpZnlfbGVhdmVzAGF0dGFjaF9lZGdlX2xhYmVsX2Nvb3JkaW5hdGVzAHBvbHlsaW5lcwBzcGxpbmVzAG9ydGhvZ29uYWwgbGluZXMAdGV4Z3lyZXRlcm1lcwBvdGltZXMAVGltZXMAZm9udG5hbWVzAHByZWZpeCBtdXN0IG5vdCBiZSBib3VuZCB0byBvbmUgb2YgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBuYW1lcwBTcGFyc2VNYXRyaXhfc3VtX3JlcGVhdF9lbnRyaWVzAHBlcmlwaGVyaWVzAEdldEJyYW5jaGVzAGYgPCBncmFwaFtqXS5uZWRnZXMAbWlubWF4X2VkZ2VzAG1ha2VTdHJhaWdodEVkZ2VzAHVuZG9DbHVzdGVyRWRnZXMAY29tcG91bmRFZGdlcwBtZXJnZV90cmVlcwBfX2NsdXN0ZXJub2RlcwBhZ25ub2RlcwBORF9pZChucCkgPT0gbl9ub2RlcwBMb2FkTm9kZXMAc2lkZXMAc3BhZGVzAHZlcnRpY2VzAGNvb3JkcwBzZXRib3VuZHMAbWRzAGNkcwBtYWtlU2VsZkFyY3MAZW1pdF9lZGdlX2dyYXBoaWNzAGNsdWJzAGNvbnNvbGFzACVsZiUycwAKU3RyaW5nIHN0YXJ0aW5nOjwlLjgwcwAKU3RyaW5nIHN0YXJ0aW5nOiIlLjgwcwAgJS4qcwAlLipzJXMlcwBleHBhdDogQWNjb3VudGluZyglcCk6IERpcmVjdCAlMTBsbHUsIGluZGlyZWN0ICUxMGxsdSwgYW1wbGlmaWNhdGlvbiAlOC4yZiVzACAlczolcwBfXyVkOiVzAC8lcy8lcwAlcy0lcwAsJXMAIGZvbnQtZmFtaWx5PSIlcwAiIHN0cm9rZS1kYXNoYXJyYXk9IiVzACIgY2xhc3M9IiVzAHBvbHkgJXMAKCglZiwlZiksKCVmLCVmKSkgJXMgJXMAY29sb3IgJXMAIFRpdGxlOiAlcwAic3RyaWN0IjogJXMAciAmJiBzAGNvdXIAdXRyAGFwcGVuZGF0dHIAYWRkYXR0cgBiZWdpbnN0cgBzdHJ2aWV3X3N0cgBwb3ZfY29sb3JfYXNfc3RyAHZwc2MhPW51bGxwdHIAYmVuZFRvU3RyAHVhcnIAY3JhcnIAbGFycgBoYXJyAGRhcnIAdUFycgByQXJyAGxBcnIAaEFycgBkQXJyAHIgJiYgcnIAQXByAFNwYXJzZU1hdHJpeF9tdWx0aXBseV92ZWN0b3IAdGVybWluYXRvcgBpbnN1bGF0b3IAdGV4Z3lyZWN1cnNvcgBzeW50YXggZXJyb3IAbW9uZXlfZ2V0IGVycm9yAEVycm9yAHJmbG9vcgBsZmxvb3IAbGFiZWxmb250Y29sb3IAcGVuY29sb3IAZmlsbGNvbG9yAGJnY29sb3IAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBuZWlnaGJvcgBzdHlsZV9vcgBtcgByYW5rZGlyAHBhZ2VkaXIAbGF5ZXIATm9kZUNvdmVyAC9zdmcvc2lsdmVyAGNsdXN0ZXIAZXhwYW5kQ2x1c3RlcgBycHJvbW90ZXIAbHByb21vdGVyAGNlbnRlcgBtYXhpdGVyAHBhcnRpYWwgY2hhcmFjdGVyACEgcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIAZGtncmVlbmNvcHBlcgBjb29sY29wcGVyAGd2X3NvcnRfY29tcGFyX3dyYXBwZXIAdGFwZXIAb3ZlcmxhcF9iZXppZXIAZmlnX2JlemllcgBjb3VyaWVyAENvdXJpZXIAaGllcgBkYWdnZXIARGFnZ2VyAG91dHB1dG9yZGVyAHBvc3RvcmRlcgBmbGF0X3Jlb3JkZXIAY2VsbGJvcmRlcgBmaXhMYWJlbE9yZGVyAGN5bGluZGVyAC9zdmcvbGF2ZW5kZXIAcmVuZGVyAGZvbGRlcgBjbHVzdGVyX2xlYWRlcgBORF9VRl9zaXplKG4pIDw9IDEgfHwgbiA9PSBsZWFkZXIAT2N0b2JlcgByZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIgbnVtYmVyAE5vdmVtYmVyAFNlcHRlbWJlcgBEZWNlbWJlcgBtYWNyAGJyAHN0YXIAZmVsZHNwYXIAcmVndWxhcgBzYW1lX2xpc3RfY2xlYXIAaW9zX2Jhc2U6OmNsZWFyAGJydmJhcgBNYXIAXHIATkRfcmFuayh2KSA9PSByAHN0cmVxAHN0cnZpZXdfZXEAc3Rydmlld19zdHJfZXEAc3Rydmlld19jYXNlX3N0cl9lcQBzdHJ2aWV3X2Nhc2VfZXEAdnAAJSVCZWdpblByb2xvZwovRG90RGljdCAyMDAgZGljdCBkZWYKRG90RGljdCBiZWdpbgoKL3NldHVwTGF0aW4xIHsKbWFyawovRW5jb2RpbmdWZWN0b3IgMjU2IGFycmF5IGRlZgogRW5jb2RpbmdWZWN0b3IgMAoKSVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwKRW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQKCiUgU2V0IHVwIElTTyBMYXRpbiAxIGNoYXJhY3RlciBlbmNvZGluZwovc3Rhcm5ldElTTyB7CiAgICAgICAgZHVwIGR1cCBmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KICAgICAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9eyBwb3AgcG9wIH0gaWZlbHNlCiAgICAgICAgfSBmb3JhbGwKICAgICAgICAvRW5jb2RpbmcgRW5jb2RpbmdWZWN0b3IgZGVmCiAgICAgICAgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQKfSBkZWYKL1RpbWVzLVJvbWFuIHN0YXJuZXRJU08gZGVmCi9UaW1lcy1JdGFsaWMgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGQgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGRJdGFsaWMgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYSBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhLU9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYS1Cb2xkIHN0YXJuZXRJU08gZGVmCi9IZWx2ZXRpY2EtQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXIgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXItT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovQ291cmllci1Cb2xkIHN0YXJuZXRJU08gZGVmCi9Db3VyaWVyLUJvbGRPYmxpcXVlIHN0YXJuZXRJU08gZGVmCmNsZWFydG9tYXJrCn0gYmluZCBkZWYKCiUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCBncmFwaHZpeiAwIDAKL2Nvb3JkLWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYKL2RlZmF1bHQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgovY29vcmRmb250IGNvb3JkLWZvbnQtZmFtaWx5IGZpbmRmb250IDggc2NhbGVmb250IGRlZgoKL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYKL3NldF9zY2FsZSB7CiAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYKICAgICAgIHNjYWxlCn0gYmluZCBkZWYKCiUgc3R5bGVzCi9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmCi9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYKL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmCi9maWxsZWQgeyB9IGJpbmQgZGVmCi91bmZpbGxlZCB7IH0gYmluZCBkZWYKL3JvdW5kZWQgeyB9IGJpbmQgZGVmCi9kaWFnb25hbHMgeyB9IGJpbmQgZGVmCi90YXBlcmVkIHsgfSBiaW5kIGRlZgoKJSBob29rcyBmb3Igc2V0dGluZyBjb2xvciAKL25vZGVjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2VkZ2Vjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2dyYXBoY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmCi9ub3Bjb2xvciB7cG9wIHBvcCBwb3B9IGJpbmQgZGVmCgovYmVnaW5wYWdlIHsJJSBpIGogbnBhZ2VzCgkvbnBhZ2VzIGV4Y2ggZGVmCgkvaiBleGNoIGRlZgoJL2kgZXhjaCBkZWYKCS9zdHIgMTAgc3RyaW5nIGRlZgoJbnBhZ2VzIDEgZ3QgewoJCWdzYXZlCgkJCWNvb3JkZm9udCBzZXRmb250CgkJCTAgMCBtb3ZldG8KCQkJKFwoKSBzaG93IGkgc3RyIGN2cyBzaG93ICgsKSBzaG93IGogc3RyIGN2cyBzaG93IChcKSkgc2hvdwoJCWdyZXN0b3JlCgl9IGlmCn0gYmluZCBkZWYKCi9zZXRfZm9udCB7CglmaW5kZm9udCBleGNoCglzY2FsZWZvbnQgc2V0Zm9udAp9IGRlZgoKJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAovYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAoJL3RleHQgZXhjaCBkZWYKCS93aWR0aCBleGNoIGRlZgoJZ3NhdmUKCQl3aWR0aCAwIGd0IHsKCQkJW10gMCBzZXRkYXNoCgkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cKCQl9IGlmCglncmVzdG9yZQp9IGRlZgoKL2JveHByaW0gewkJCQklIHhjb3JuZXIgeWNvcm5lciB4c2l6ZSB5c2l6ZQoJCTQgMiByb2xsCgkJbW92ZXRvCgkJMiBjb3B5CgkJZXhjaCAwIHJsaW5ldG8KCQkwIGV4Y2ggcmxpbmV0bwoJCXBvcCBuZWcgMCBybGluZXRvCgkJY2xvc2VwYXRoCn0gYmluZCBkZWYKCi9lbGxpcHNlX3BhdGggewoJL3J5IGV4Y2ggZGVmCgkvcnggZXhjaCBkZWYKCS95IGV4Y2ggZGVmCgkveCBleGNoIGRlZgoJbWF0cml4IGN1cnJlbnRtYXRyaXgKCW5ld3BhdGgKCXggeSB0cmFuc2xhdGUKCXJ4IHJ5IHNjYWxlCgkwIDAgMSAwIDM2MCBhcmMKCXNldG1hdHJpeAp9IGJpbmQgZGVmCgovZW5kcGFnZSB7IHNob3dwYWdlIH0gYmluZCBkZWYKL3Nob3dwYWdlIHsgfSBkZWYKCi9sYXllcmNvbG9yc2VxCglbCSUgbGF5ZXIgY29sb3Igc2VxdWVuY2UgLSBkYXJrZXN0IHRvIGxpZ2h0ZXN0CgkJWzAgMCAwXQoJCVsuMiAuOCAuOF0KCQlbLjQgLjggLjhdCgkJWy42IC44IC44XQoJCVsuOCAuOCAuOF0KCV0KZGVmCgovbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmCgovc2V0bGF5ZXIgey9tYXhsYXllciBleGNoIGRlZiAvY3VybGF5ZXIgZXhjaCBkZWYKCWxheWVyY29sb3JzZXEgY3VybGF5ZXIgMSBzdWIgbGF5ZXJsZW4gbW9kIGdldAoJYWxvYWQgcG9wIHNldGhzYmNvbG9yCgkvbm9kZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZWRnZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZ3JhcGhjb2xvciB7bm9wY29sb3J9IGRlZgp9IGJpbmQgZGVmCgovb25sYXllciB7IGN1cmxheWVyIG5lIHtpbnZpc30gaWYgfSBkZWYKCi9vbmxheWVycyB7CgkvbXl1cHBlciBleGNoIGRlZgoJL215bG93ZXIgZXhjaCBkZWYKCWN1cmxheWVyIG15bG93ZXIgbHQKCWN1cmxheWVyIG15dXBwZXIgZ3QKCW9yCgl7aW52aXN9IGlmCn0gZGVmCgovY3VybGF5ZXIgMCBkZWYKCiUlRW5kUmVzb3VyY2UKJSVFbmRQcm9sb2cKJSVCZWdpblNldHVwCjE0IGRlZmF1bHQtZm9udC1mYW1pbHkgc2V0X2ZvbnQKJSAvYXJyb3dsZW5ndGggMTAgZGVmCiUgL2Fycm93d2lkdGggNSBkZWYKCiUgbWFrZSBzdXJlIHBkZm1hcmsgaXMgaGFybWxlc3MgZm9yIFBTLWludGVycHJldGVycyBvdGhlciB0aGFuIERpc3RpbGxlcgovcGRmbWFyayB3aGVyZSB7cG9wfSB7dXNlcmRpY3QgL3BkZm1hcmsgL2NsZWFydG9tYXJrIGxvYWQgcHV0fSBpZmVsc2UKJSBtYWtlICc8PCcgYW5kICc+Picgc2FmZSBvbiBQUyBMZXZlbCAxIGRldmljZXMKL2xhbmd1YWdlbGV2ZWwgd2hlcmUge3BvcCBsYW5ndWFnZWxldmVsfXsxfSBpZmVsc2UKMiBsdCB7CiAgICB1c2VyZGljdCAoPDwpIGN2biAoWykgY3ZuIGxvYWQgcHV0CiAgICB1c2VyZGljdCAoPj4pIGN2biAoWykgY3ZuIGxvYWQgcHV0Cn0gaWYKCiUlRW5kU2V0dXAAc3VwAGdyb3VwAGN1cAB0aGluc3AAZW5zcABlbXNwAG5ic3AAcGVycAB3ZWllcnAAZ2VuZXJhdGUtY29uc3RyYWludHMuY3BwAGJsb2NrLmNwcABjc29sdmVfVlBTQy5jcHAAf3RvcABwcm9wAGFneGJwb3AAbm9wAGFzeW1wAGNvbXAAZmluZENDb21wAGJtcABzY2FsZV9jbGFtcAB4bHAAbHAgIT0gY2xwAHRhaWxfbHAAaGVhZF9scAB0YWlsdG9vbHRpcABsYWJlbHRvb2x0aXAAZWRnZXRvb2x0aXAAaGVhZHRvb2x0aXAAaGVsbGlwAHRhaWxjbGlwAGhlYWRjbGlwAC9zdmcvcGFwYXlhd2hpcABocAB0cmFuc3Bvc2Vfc3RlcABsYXllcmxpc3RzZXAAbGF5ZXJzZXAAaXBzZXAAcmFua3NlcABub2Rlc2VwAHN1YmdyYXBocyBuZXN0ZWQgbW9yZSB0aGFuICVkIGRlZXAAU2VwAHNmZHAAY3AAd2VicABpZG1hcABjbHVzdGVyX21hcABjbWFweDptYXAAZXBzOm1hcABjbWFweF9ucDptYXAAaW1hcF9ucDptYXAAaXNtYXA6bWFwAGltYXA6bWFwAGNtYXA6bWFwAHN2ZzptYXAAanBnOm1hcABwbmc6bWFwAGpwZWc6bWFwAGdpZjptYXAAanBlOm1hcABvdmVybGFwAE92ZXJsYXAAbGV2ZWxzZ2FwAGNhcABLUF9VcAAlSTolTTolUyAlcABzdGFydCA8PSBwAHJzcXVvAGxzcXVvAHJkcXVvAGxkcXVvAGJkcXVvAHNicXVvAHJzYXF1bwBsc2FxdW8AcmFxdW8AbGFxdW8AYXV0bwBOdW5pdG8AL3N2Zy90b21hdG8AbmVhdG8AZXVybwAvc3ZnL2dhaW5zYm9ybwBNZXRob2RaZXJvAG1pY3JvAG5pbWJ1c21vbm8AbGliZXJhdGlvbm1vbm8AZnJlZW1vbm8AYXJpbW8AcmF0aW8AcG9ydGhvAHJobwBSaG8AL3N2Zy9pbmRpZ28AcGluZm8AY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AY2xfZWRnZV9pbmZvAGdldFBhY2tJbmZvAG1ha2VJbmZvAHBhcnNlUGFja01vZGVJbmZvAGNpcmNvAGljbwBcJTAzbwAvc3ZnL3Jvc3licm93bgAvc3ZnL3NhbmR5YnJvd24AdmVyeWRhcmticm93bgAvc3ZnL3NhZGRsZWJyb3duAC9zdmcvYnJvd24AS1BfRG93bgBjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1bgBTdW4ASnVuAHRob3JuAC9zdmcvY3JpbXNvbgB4ZG90X2pzb24AeGRvdF9qc29uOmpzb24AanNvbjA6anNvbgBvbWljcm9uAE9taWNyb24Ac2Nhcm9uAFNjYXJvbgB3ZWJtYXJvb24AeDExbWFyb29uAC9zdmcvbWFyb29uAC9zdmcvbGlnaHRzYWxtb24AL3N2Zy9kYXJrc2FsbW9uAC9zdmcvc2FsbW9uAHVwc2lsb24AZXBzaWxvbgBVcHNpbG9uAEVwc2lsb24AcmVzb2x1dGlvbgBkaXN0b3J0aW9uAHN0ZDo6ZXhjZXB0aW9uAGRvdF9wb3NpdGlvbgBTZXR0aW5nIHVwIHN0cmVzcyBmdW5jdGlvbgB1bmNsb3NlZCBDREFUQSBzZWN0aW9uAHBvc3RhY3Rpb24Acm90YXRpb24Ab3JpZW50YXRpb24AYWJvbWluYXRpb24AYWNjb3VudGluZ0dldEN1cnJlbnRBbXBsaWZpY2F0aW9uAHhkb3R2ZXJzaW9uAFNUc2V0VW5pb24APHBvbHlnb24AaGV4YWdvbgBzZXB0YWdvbgBwZW50YWdvbgB0cmlwbGVvY3RhZ29uAGRvdWJsZW9jdGFnb24AL3N2Zy9sZW1vbmNoaWZmb24ATW9uAHBsdXNtbgBub3RpbgBpc2luAC9zdmcvbW9jY2FzaW4AcGluAG1pbgB2b3JvX21hcmdpbgBpbmZpbgBvbmVkX29wdGltaXplcl90cmFpbgBwbGFpbgBtYWtlX2NoYWluAG1lcmdlX2NoYWluAGRlbGV0ZU1pbgBmaW5kTWluAHZhbGlnbgBiYWxpZ24AeWVuAE11bHRpbGV2ZWxfY29hcnNlbgBjdXJyZW4AUG9ic29wZW4AZ3Z1c2Vyc2hhcGVfb3BlbgBlbnRpdHlUcmFja2luZ09uT3BlbgAvc3ZnL2xpbmVuAGRpbWVuAG1pbmxlbgBzdHlsZV90b2tlbgB1bmNsb3NlZCB0b2tlbgAvc3ZnL3llbGxvd2dyZWVuAG1lZGl1bWZvcmVzdGdyZWVuAC9zdmcvZm9yZXN0Z3JlZW4AL3N2Zy9saWdodGdyZWVuAGh1bnRlcnNncmVlbgAvc3ZnL2xhd25ncmVlbgAvc3ZnL2RhcmtncmVlbgAvc3ZnL21lZGl1bXNwcmluZ2dyZWVuAC9zdmcvc3ByaW5nZ3JlZW4AL3N2Zy9kYXJrb2xpdmVncmVlbgAvc3ZnL2xpbWVncmVlbgAvc3ZnL3BhbGVncmVlbgB3ZWJncmVlbgAvc3ZnL2xpZ2h0c2VhZ3JlZW4AL3N2Zy9tZWRpdW1zZWFncmVlbgAvc3ZnL2RhcmtzZWFncmVlbgAvc3ZnL3NlYWdyZWVuAHgxMWdyZWVuAC9zdmcvZ3JlZW4AR3JlZW4AL3N2Zy9saWdodGN5YW4AL3N2Zy9kYXJrY3lhbgAvc3ZnL2N5YW4AbmV3dGFuAGRhcmt0YW4AL3N2Zy90YW4Acm93c3BhbgBjb2xzcGFuAG5hbgB0aW1lc25ld3JvbWFuAG5pbWJ1c3JvbWFuAHRpbWVzcm9tYW4AVGltZXMtUm9tYW4AUGFsYXRpbm8tUm9tYW4ATmV3Q2VudHVyeVNjaGxiay1Sb21hbgBKYW4AR0RfcmFuayhnKVtyXS5uIDw9IEdEX3JhbmsoZylbcl0uYW4AYWd4YnB1dF9uAFxuAG5fbm9kZXMgPT0gZ3JhcGgtPm4AQS0+bSA9PSBBLT5uAGpvYi0+b2JqLT51Lm4AcywlbGYsJWxmJW4AIGUsJWxmLCVsZiVuACVkICUxWyJdJW4AdiA9PSBuAG56YyA9PSBuAGIgPT0gbgBuY2x1c3RlciA8PSBuAHIgJiYgbgBwc3ltAGFsZWZzeW0AdGhldGFzeW0AcXVhbnR1bQBzdW0AL3N2Zy9wbHVtAGludnRyYXBleml1bQBtZWRpdW0AOTpwcmlzbQBscm0AY3VzdG9tAGFwdHItPnRhZyA9PSBUX2F0b20AL2Rldi91cmFuZG9tAHJsbQBzaW0ASU1EU19naXZlbl9kaW0Ab3JkbQBwYXJhbGxlbG9ncmFtAC9zdmcvbWludGNyZWFtAEp1bAB0bABmcmFzbABTeW1ib2wAZmluZENvbAA8P3htbAB5dW1sAHV1bWwAb3VtbABpdW1sAGV1bWwAYXVtbABZdW1sAFV1bWwAT3VtbABJdW1sAEV1bWwAQXVtbABjb3JlX2xvYWRpbWFnZV92cm1sAGpwZzp2cm1sAHBuZzp2cm1sAGpwZWc6dnJtbABnaWY6dnJtbABqcGU6dnJtbABidWxsAGZpbGwAL3N2Zy9zZWFzaGVsbABmb3JhbGwAQXByaWwAcGVybWlsAHJjZWlsAGxjZWlsAGNjZWRpbABDY2VkaWwAYXJyb3d0YWlsAGx0YWlsAHNhbWV0YWlsAGxldmVsID49IDAgJiYgbGV2ZWwgPD0gbi0+bGV2ZWwAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAoKm4pLT5sZXZlbABzdHJlc3NfbWFqb3JpemF0aW9uX2tEX21rZXJuZWwAaXNfcGFyYWxsZWwAQ2FsY3VsYXRpbmcgY2lyY3VpdCBtb2RlbABDYWxjdWxhdGluZyBzdWJzZXQgbW9kZWwAQ2FsY3VsYXRpbmcgTURTIG1vZGVsAHhsYWJlbAB0YWlsbGFiZWwAaGVhZGxhYmVsAG1ha2VfbGFiZWwAZ3JhcGggbGFiZWwAaWV4Y2wAb2JqcC0+bGJsAG92YWwAbWVyZ2V2aXJ0dWFsAC9zdmcvbGlnaHRjb3JhbAAvc3ZnL2NvcmFsAFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfYXJyYXlzX2ludGVybmFsAE11bHRpbGV2ZWxfY29hcnNlbl9pbnRlcm5hbABRdWFkVHJlZV9hZGRfaW50ZXJuYWwAYXJyb3dfbGVuZ3RoX25vcm1hbABhcmlhbAByYWRpYWwAL3N2Zy90ZWFsAHJlYWwAbG9jYWwAZXN0aW1hdGVfY2hhcmFjdGVyX3dpZHRoX2Nhbm9uaWNhbABnbG9iYWwAcS0+bAAuLi8uLi9saWIvY2dyYXBoL3NjYW4ubAB0azp0awBnaWY6dGsAcGF0Y2h3b3JrAHRvawBib29rAEF2YW50R2FyZGUtQm9vawBzaW5rAG92ZXJsYXBfc2hyaW5rAHNwaWN5cGluawAvc3ZnL2hvdHBpbmsAL3N2Zy9saWdodHBpbmsAL3N2Zy9kZWVwcGluawBuZW9ucGluawAvc3ZnL3BpbmsAbmV3cmFuawBjbHVzdGVycmFuawBfbmV3X3JhbmsAaW5zdGFsbF9pbl9yYW5rAHJlbW92ZV9mcm9tX3JhbmsAL3N2Zy9jb3Juc2lsawBvbmVibG9jawB2LT5sZWZ0LT5ibG9jayA9PSB2LT5yaWdodC0+YmxvY2sAL3N2Zy9maXJlYnJpY2sAUFFjaGVjawBwYWNrAC9zdmcvYmxhY2sAQmxhY2sAZXN0YWNrX3BvcF9iYWNrAHp3agB6d25qAGpvYi0+b2JqAGdldGludHJzeGkAcHNpAFBzaQBDYWxpYnJpAEZyaQB0d29waQBkcGkAdm9yb25vaQBWb3Jvbm9pAGNoYW5pAGRlbWkAQm9va21hbi1EZW1pAEF2YW50R2FyZGUtRGVtaQAvc3ZnL2RhcmtraGFraQAvc3ZnL2toYWtpAHBoaQBjaGkAUGhpAENoaQBkaQBYaQBQaQBORF9pZChucCkgPT0gaQBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcl9zbW9vdGgAU3ByaW5nU21vb3RoZXJfc21vb3RoAGJvdGgAc3RhcnRzd2l0aABsaW5lbGVuZ3RoAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGF2ZXJhZ2VfZWRnZV9sZW5ndGgAZXRoAHBlbndpZHRoAGx3aWR0aABzZXRsaW5ld2lkdGgAUHNob3J0ZXN0cGF0aABzaG9ydHBhdGgAZm9udHBhdGgAUG9ic3BhdGgAYmVnaW5wYXRoAGltYWdlcGF0aABlbmRwYXRoAHN0cmFpZ2h0X3BhdGgAbWFwX3BhdGgAPHBhdGgAY2Fubm90IGZpbmQgdHJpYW5nbGUgcGF0aABxdWV1ZV9wdXNoAC9zdmcvbGF2ZW5kZXJibHVzaABmbGVzaABvc2xhc2gAT3NsYXNoAGR0c3RyaGFzaABuZGFzaABtZGFzaABkaWdyYXBoAHN1YmdyYXBoAGNvbnN0cnVjdF9ncmFwaABjaGtTZ3JhcGgAY2xvc2VzdF9wYWlyczJncmFwaABhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABjb25uZWN0R3JhcGgAdXBzaWgAJXNsaW5lLXRocm91Z2gAZmxhdF9zZWFyY2gAY2hhblNlYXJjaABSVHJlZVNlYXJjaABNYXJjaABEaXNjb25CcmFuY2gAUGlja0JyYW5jaABBZGRCcmFuY2gALi4vLi4vbGliL2NncmFwaC9iaXRhcnJheS5oAC4uLy4uL2xpYi9jZ3JhcGgvc3Rydmlldy5oAC4uLy4uL2xpYi9jaXJjb2dlbi9ub2RlbGlzdC5oAC4uLy4uL2xpYi9jZ3JhcGgvc29ydC5oAC4uLy4uL2xpYi9jZ3JhcGgvbm9kZV9zZXQuaAAuLi8uLi9saWIvY29tbW9uL2JveGVzLmgALi4vLi4vbGliL29ydGhvL3N0cnVjdHVyZXMuaAAuLi8uLi9saWIvZG90Z2VuL2RvdHByb2NzLmgALi4vLi4vbGliL3V0aWwvc3RyZXEuaAAuLi8uLi9saWIvY2dyYXBoL3N0YXJ0c3dpdGguaAAuLi8uLi9saWIvY2dyYXBoL2d2X21hdGguaAAuLi8uLi9saWIvY2dyYXBoL2FneGJ1Zi5oAC4uLy4uL2xpYi9jZ3JhcGgvdG9rZW5pemUuaAAuLi8uLi9saWIvY2dyYXBoL3F1ZXVlLmgALi4vLi4vbGliL2NncmFwaC9hbGxvYy5oAGF1eGcAcm93ZwBjb3JlX2xvYWRpbWFnZV9zdmcAc3ZnOnN2ZwBqcGc6c3ZnAHBuZzpzdmcAanBlZzpzdmcAZ2lmOnN2ZwBqcGU6c3ZnAHN2Z19pbmxpbmU6c3ZnAEF1ZwBkb1Byb2xvZwBwb3dlcl9pdGVyYXRpb25fb3J0aG9nAHBuZwBpZGVhbF9kaXN0X3NjaGVtZSB2YWx1ZSB3cm9uZwB4ZG90IHZlcnNpb24gIiVzIiB0b28gbG9uZwBjb25nAGxibGVuY2xvc2luZwBiYXNpY19zdHJpbmcAZmFpbHVyZSBtYWxsb2MnaW5nIGZvciByZXN1bHQgc3RyaW5nAHNwcmluZwBvcmRlcmluZwBhcmluZwBBcmluZwBEYW1waW5nAFdhcm5pbmcAb3ZlcmxhcF9zY2FsaW5nAHggYW5kIHkgc2NhbGluZwBvbGQgc2NhbGluZwBzbW9vdGhpbmcAdW5rbm93biBlbmNvZGluZwBtdWx0aWxldmVsX3NwcmluZ19lbGVjdHJpY2FsX2VtYmVkZGluZwBzcHJpbmdfZWxlY3RyaWNhbF9zcHJpbmdfZW1iZWRkaW5nAGNlbGxwYWRkaW5nAGNlbGxzcGFjaW5nAHJhbmcAbGFuZwBmaXZlcG92ZXJoYW5nAHRocmVlcG92ZXJoYW5nAG5vdmVyaGFuZwBlbWl0X2h0bWxfaW1nAGNvbGcAb3JpZwBzemxpZwBvZWxpZwBhZWxpZwBPRWxpZwBBRWxpZwBjb3JlX2xvYWRpbWFnZV9maWcAanBnOmZpZwBwbmc6ZmlnAGZpZzpmaWcAanBlZzpmaWcAZ2lmOmZpZwBqcGU6ZmlnAGVnZwBuZXh0X3NlZwByZWcAanBlZwBpID09IGRlZwBkZwBjZwBjbG9zZXN1YmcAbWlzbWF0Y2hlZCB0YWcAYmV6LT5zZmxhZwBiZXotPmVmbGFnACFmbGFnADxnACUuNWcsJS41ZywlLjVnLCUuNWcAJS41ZyAlLjVnACVnICVnAGJveEludGVyc2VjdGYAZXBzZgBhZ2VkZ2VzZXFjbXBmAGNjd3JvdGF0ZXBmAGZub2YAaW5mAHNlbGYAaGFsZgAlbGYlbGYlbGYlbGYAJWxmLCVsZiwlbGYsJWxmLCVsZgAlbGYgJWxmICVsZiAlbGYAbGliZXJhdGlvbnNlcmlmAGZyZWVzZXJpZgBzYW5zLVNlcmlmAGdpZgAvc3ZnL3BlYWNocHVmZgByaWZmAGFjY291bnRpbmdSZXBvcnREaWZmAHRhaWxocmVmAGxhYmVsaHJlZgBlZGdlaHJlZgBoZWFkaHJlZgBvcmRmAHBkZgBzaWdtYWYAXGYAJS4wTGYAJUxmAHVzLT5mACUuMDNmACVzIHRyYW5zbWl0ICUuM2YAcmdiPCU5LjNmLCAlOS4zZiwgJTkuM2Y+IHRyYW5zbWl0ICUuM2YAJS4wMmYAJS4yZgAlLjBmLCUuMGYsJS4wZiwlLjBmACAlLjBmLCUuMGYAJS4wZiAlLjBmICUuMGYgJS4wZgAiIGZpbGwtb3BhY2l0eT0iJWYAIiBzdHJva2Utb3BhY2l0eT0iJWYACmZpbmFsIGUgPSAlZgBicm9uemUAYXJyb3dzaXplAGxhYmVsZm9udHNpemUAc2VhcmNoc2l6ZQBub2RlbGlzdF9yZXNpemUAZml4ZWRzaXplAG9iamxpc3Rfc2l6ZQBub2RlbGlzdF9zaXplAHNhbWVfbGlzdF9zaXplAG5vZGVfc2V0X3NpemUAYm94ZXNfc2l6ZQBjeWNsZXNfc2l6ZQBub2Rlc19zaXplAHRleHRzcGFuX3NpemUAYmV6aWVyX3BhdGhfc2l6ZQBzdmdfc2l6ZQBzZWxmLT5jYXBhY2l0eSA+IHNlbGYtPnNpemUAYnouc2l6ZQBwb2ludC1zaXplAG5vcm1hbGl6ZQBpY3VydmUAbm9kZWxpc3RfcmVtb3ZlAG5vZGVfc2V0X3JlbW92ZQBzb2x2ZQAhdi0+YWN0aXZlAC1hY3RpdmUAZm9udF9pbl9saXN0X3Blcm1pc3NpdmUAL3N2Zy9vbGl2ZQB1Z3JhdmUAb2dyYXZlAGlncmF2ZQBlZ3JhdmUAYWdyYXZlAFVncmF2ZQBPZ3JhdmUASWdyYXZlAEVncmF2ZQBBZ3JhdmUAdHJ1ZQAvc3ZnL2Jpc3F1ZQBvYmxpcXVlAEF2YW50R2FyZGUtQm9va09ibGlxdWUAQXZhbnRHYXJkZS1EZW1pT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LUJvbGRPYmxpcXVlAENvdXJpZXItQm9sZE9ibGlxdWUASGVsdmV0aWNhLUJvbGRPYmxpcXVlAEhlbHZldGljYS1OYXJyb3ctT2JsaXF1ZQBDb3VyaWVyLU9ibGlxdWUASGVsdmV0aWNhLU9ibGlxdWUAbmF2eWJsdWUAL3N2Zy9saWdodHNreWJsdWUAL3N2Zy9kZWVwc2t5Ymx1ZQAvc3ZnL3NreWJsdWUAbmV3bWlkbmlnaHRibHVlAC9zdmcvbWlkbmlnaHRibHVlAC9zdmcvbGlnaHRibHVlAC9zdmcvY2FkZXRibHVlAC9zdmcvY29ybmZsb3dlcmJsdWUAL3N2Zy9kb2RnZXJibHVlAC9zdmcvcG93ZGVyYmx1ZQBuZW9uYmx1ZQAvc3ZnL21lZGl1bWJsdWUAL3N2Zy9saWdodHN0ZWVsYmx1ZQAvc3ZnL3N0ZWVsYmx1ZQAvc3ZnL3JveWFsYmx1ZQAvc3ZnL2RhcmtibHVlAHJpY2hibHVlAGxpZ2h0c2xhdGVibHVlAC9zdmcvbWVkaXVtc2xhdGVibHVlAC9zdmcvZGFya3NsYXRlYmx1ZQAvc3ZnL3NsYXRlYmx1ZQAvc3ZnL2FsaWNlYmx1ZQAvc3ZnL2JsdWUAQmx1ZQBuZWF0b19lbnF1ZXVlAFR1ZQBjb252ZXJ0U1B0b1JvdXRlAHlhY3V0ZQB1YWN1dGUAb2FjdXRlAGlhY3V0ZQBlYWN1dGUAYWFjdXRlAFlhY3V0ZQBVYWN1dGUAT2FjdXRlAElhY3V0ZQBFYWN1dGUAQWFjdXRlAHJlZmVyZW5jZSB0byBleHRlcm5hbCBlbnRpdHkgaW4gYXR0cmlidXRlAGR1cGxpY2F0ZSBhdHRyaWJ1dGUAbm90ZQBwcmltZXJzaXRlAHJpYm9zaXRlAHJlc3RyaWN0aW9uc2l0ZQBwcm90ZWFzZXNpdGUAL3N2Zy9naG9zdHdoaXRlAC9zdmcvbmF2YWpvd2hpdGUAL3N2Zy9mbG9yYWx3aGl0ZQAvc3ZnL2FudGlxdWV3aGl0ZQAvc3ZnL3doaXRlAFdoaXRlAHBvcF9vYmpfc3RhdGUAcGNwX3JvdGF0ZQBjb25jZW50cmF0ZQBkZWNvcmF0ZQBRdWFkVHJlZV9yZXB1bHNpdmVfZm9yY2VfYWNjdW11bGF0ZQBub3RyYW5zbGF0ZQAvc3ZnL2Nob2NvbGF0ZQBnZW9tVXBkYXRlAGludmhvdXNlAC9zdmcvY2hhcnRyZXVzZQBub2RlbGlzdF9yZXZlcnNlAFhNTF9QYXJzZQA8ZWxsaXBzZQBkdXN0eXJvc2UAL3N2Zy9taXN0eXJvc2UAU3BhcnNlTWF0cml4X3RyYW5zcG9zZQBhZ2Nsb3NlAGVudGl0eVRyYWNraW5nT25DbG9zZQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UAZmFsc2UAL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3R1cnF1b2lzZQBwaGFzZQAvc3ZnL2F6dXJlAHNpZ25hdHVyZQBtZW1vcnkgcmUtYWxsb2NhdGlvbiBmYWlsdXJlAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUAY29yZQBNc3F1YXJlAFBhbGF0aW5vIExpbm90eXBlAEEtPnR5cGUgPT0gQi0+dHlwZQBzdXBlAGVsbGlwc2VfdGFuZ2VudF9zbG9wZQBndnJlbmRlcl91c2Vyc2hhcGUAbWl0ZXJfc2hhcGUAbGFuZHNjYXBlAExhbmRzY2FwZQBKdW5lAG5vbmUAZG9jdW1lbnQgaXMgbm90IHN0YW5kYWxvbmUAY291c2luZQAvc3ZnL21lZGl1bWFxdWFtYXJpbmUAL3N2Zy9hcXVhbWFyaW5lADxwb2x5bGluZQAlc292ZXJsaW5lAHVuZGVybGluZQBQcm91dGVzcGxpbmUAbGluZWFyX3NwbGluZQBiX3NwbGluZQBvbGluZQBhZ3hidWZfaXNfaW5saW5lAHN2Z19pbmxpbmUAcmVmaW5lAHByaW1lAFByaW1lAC9zdmcvbGltZQBjb2xvcnNjaGVtZQBsYWJlbF9zY2hlbWUAc2FtZQBsYWJlbGZvbnRuYW1lAFVGX3NldG5hbWUAZm9udF9uYW1lAGZvbnQtPm5hbWUAdXMtPm5hbWUAcmVzZXJ2ZWQgcHJlZml4ICh4bWwpIG11c3Qgbm90IGJlIHVuZGVjbGFyZWQgb3IgYm91bmQgdG8gYW5vdGhlciBuYW1lc3BhY2UgbmFtZQBzdHlsZQAvc3ZnL3RoaXN0bGUAdGl0bGUAL3N2Zy9tZWRpdW1wdXJwbGUAZGFya3B1cnBsZQB3ZWJwdXJwbGUAcmViZWNjYXB1cnBsZQB2ZXJ5X2xpZ2h0X3B1cnBsZQBtZWRfcHVycGxlAHgxMXB1cnBsZQAvc3ZnL3B1cnBsZQBzaGFwZWZpbGUAZ3JhZGllbnRhbmdsZQByZWN0YW5nbGUAUmVjdGFuZ2xlAGxhYmVsYW5nbGUAaW52dHJpYW5nbGUAZGVzdGluYXRpb24gcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBzb3VyY2UgcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBkZnNDeWNsZQBkb3VibGVjaXJjbGUATWNpcmNsZQBpbnZpc2libGUAdGhvcm5kYWxlAGlucHV0c2NhbGUAb3NjYWxlAGltYWdlc2NhbGUAL3N2Zy93aGl0ZXNtb2tlAG1hbmRhcmlub3JhbmdlAC9zdmcvZGFya29yYW5nZQAvc3ZnL29yYW5nZQAvc3ZnL2JlaWdlAG5ld2VkZ2UAZGVsZXRlX2Zhc3RfZWRnZQBkZWxldGVfZmxhdF9lZGdlAGFkZF90cmVlX2VkZ2UAbWFrZVN0cmFpZ2h0RWRnZQBtYWtlU2VsZkVkZ2UAbWFrZUNvbXBvdW5kRWRnZQBvc2FnZQBwYWdlAGd2bG9hZGltYWdlAHZlZQB0ZWUAUVVBRF9UUkVFX0hZQlJJRCwgc2l6ZSBsYXJnZXIgdGhhbiAlZCwgc3dpdGNoIHRvIGZhc3QgcXVhZHRyZWUAZmVhc2libGVfdHJlZQBTcGFyc2VNYXRyaXhfZGl2aWRlX3Jvd19ieV9kZWdyZWUAb2JqbGlzdF9mcmVlAG5vZGVsaXN0X2ZyZWUAc2FtZV9saXN0X2ZyZWUAbm9kZV9zZXRfZnJlZQBwb2ludHNfZnJlZQBib3hlc19mcmVlAGN5Y2xlc19mcmVlAG5vZGVfc3RhY2tfZnJlZQBuZXdub2RlAGluc3RhbGxub2RlAGFnbm9kZQBkZWxldGVfZmFzdF9ub2RlAHBhY2ttb2RlAFNwbGl0Tm9kZQBvdGlsZGUAbnRpbGRlAGF0aWxkZQBPdGlsZGUATnRpbGRlAEF0aWxkZQBkaXZpZGUAdHJhZGUAZ3JhcGh2aXpfbm9kZV9pbmR1Y2UAc291cmNlAHJlcHVsc2l2ZWZvcmNlAGlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UAZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlAHJlY3Vyc2l2ZSBlbnRpdHkgcmVmZXJlbmNlAGxhYmVsZGlzdGFuY2UAVEJfYmFsYW5jZQBUQmJhbGFuY2UAZGV2aWNlAG1vbm9zcGFjZQAvc3ZnL29sZGxhY2UAZmFjZQBzdWJlACAtYW5jaG9yIGUAczEtPmNvbW1fY29vcmQ9PXMyLT5jb21tX2Nvb3JkAE1yZWNvcmQAZm9yd2FyZABwcm9kAGxpZ2h0Z29sZGVucm9kAG1lZGl1bWdvbGRlbnJvZAAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9wYWxlZ29sZGVucm9kAC9zdmcvZ29sZGVucm9kAC9zdmcvYnVybHl3b29kAGxpZ2h0d29vZABtZWRpdW13b29kAGRhcmt3b29kAF9iYWNrZ3JvdW5kAGNvbXBvdW5kAG5vIGVsZW1lbnQgZm91bmQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQAL3N2Zy9ibGFuY2hlZGFsbW9uZABhcnJvd19sZW5ndGhfZGlhbW9uZABNZGlhbW9uZABub2RlX3NldF9maW5kAGd2dXNlcnNoYXBlX2ZpbmQAb2JqbGlzdF90cnlfYXBwZW5kAGRlZ2xpc3RfdHJ5X2FwcGVuZABub2RlbGlzdF90cnlfYXBwZW5kAGNsaXN0X3RyeV9hcHBlbmQAc2FtZV9saXN0X3RyeV9hcHBlbmQAZWRnZV9saXN0X3RyeV9hcHBlbmQAcG9pbnRzX3RyeV9hcHBlbmQAYm94ZXNfdHJ5X2FwcGVuZABsYXllcl9uYW1lc190cnlfYXBwZW5kAGN5Y2xlc190cnlfYXBwZW5kAG5vZGVzX3RyeV9hcHBlbmQAdmFyYXJyX3RyeV9hcHBlbmQAZXN0YWNrX3RyeV9hcHBlbmQAaW50X3N0YWNrX3RyeV9hcHBlbmQAbm9kZV9zdGFja190cnlfYXBwZW5kAGJlemllcl9wYXRoX3RyeV9hcHBlbmQAaXJhbmQAZXhwYW5kAGN1bWJlcmxhbmQAYnJpZ2h0Z29sZABvbGRnb2xkAC9zdmcvZ29sZABib2xkAEhlbHZldGljYS1OYXJyb3ctQm9sZABUaW1lcy1Cb2xkAENvdXJpZXItQm9sZABQYWxhdGluby1Cb2xkAE5ld0NlbnR1cnlTY2hsYmstQm9sZABIZWx2ZXRpY2EtQm9sZAAlMCpsbGQAJSpsbGQAKyVsbGQAbi0+YnJhbmNoW2ldLmNoaWxkACUrLjRsZAAlcyVsZABzb2xpZAAvc3ZnL21lZGl1bW9yY2hpZAAvc3ZnL2RhcmtvcmNoaWQAL3N2Zy9vcmNoaWQAaWxsZWdhbCBjaGFyYWN0ZXIocykgaW4gcHVibGljIGlkAGRpamtzdHJhX3NnZABmaXhlZABjdXJ2ZWQAZGVyaXZlZABkb3R0ZWQAbWVtb3J5IGV4aGF1c3RlZABsb2NhbGUgbm90IHN1cHBvcnRlZABwYXJzaW5nIGFib3J0ZWQAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAYWNjb3VudGluZ0RpZmZUb2xlcmF0ZWQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZABjb25kZW5zZWQAL3N2Zy9tZWRpdW12aW9sZXRyZWQAL3N2Zy9wYWxldmlvbGV0cmVkAEltcHJvcGVyICVzIHZhbHVlICVzIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA8ICVkIC0gdG9vIHNtYWxsIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA+ICVkIC0gdG9vIGxhcmdlIC0gaWdub3JlZAAvc3ZnL2luZGlhbnJlZAAvc3ZnL2RhcmtyZWQAYSBzdWNjZXNzZnVsIHByaW9yIGNhbGwgdG8gZnVuY3Rpb24gWE1MX0dldEJ1ZmZlciBpcyByZXF1aXJlZAB0YXBlcmVkAC9zdmcvb3JhbmdlcmVkAHJlc2VydmVkIHByZWZpeCAoeG1sbnMpIG11c3Qgbm90IGJlIGRlY2xhcmVkIG9yIHVuZGVjbGFyZWQAL3N2Zy9yZWQAc3RyaXBlZABpbGwtY29uZGl0aW9uZWQAdW5kZWZpbmVkAG5vdCBjb25zdHJhaW5lZABsYWJlbGFsaWduZWQAdGV4dCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQAWE1MIGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZAB1bmZpbGxlZABpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkAHRyaWFuZ3VsYXRpb24gZmFpbGVkAHBhcnNpbmcgZmluaXNoZWQAZGFzaGVkAGxpbWl0IG9uIGlucHV0IGFtcGxpZmljYXRpb24gZmFjdG9yIChmcm9tIERURCBhbmQgZW50aXRpZXMpIGJyZWFjaGVkAHdlZGdlZABzaXplPT1mcmVlZAByb3VuZGVkAHBhcnNlciBub3Qgc3VzcGVuZGVkAHBhcnNlciBzdXNwZW5kZWQAV2VkAFJlZABTcGFyc2VNYXRyaXhfYWRkAG5vZGVfc2V0X2FkZABkZCAhPSBwYXJlbnRfZGQAS1BfQWRkAHBhZAB4bGhkeHVubG9hZAByZWFkAGFycm93aGVhZABsaGVhZABzYW1laGVhZABib3gzZAAlc18lZABfc3Bhbl8lZABfYmxvY2tfJWQAX3dlYWtfJWQAX2Nsb25lXyVkAC4lZAAlWS0lbS0lZAAlbGYsJWQAJXMgaW4gbGluZSAlZAAlJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkACJfc3ViZ3JhcGhfY250IjogJWQAIl9ndmlkIjogJWQAImhlYWQiOiAlZABhZ3hicHV0YwB2cHNjAGNwLT5zcmMAdWNpcmMAb2NpcmMAaWNpcmMAZWNpcmMAYWNpcmMAVWNpcmMAT2NpcmMASWNpcmMARWNpcmMAQWNpcmMAbGFiZWxsb2MAZ3ZfcmVjYWxsb2MAc3RkOjpiYWRfYWxsb2MAYmFrZXJzY2hvYwBzZW1pU3dlZXRDaG9jAG1jAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMAcGljOnBpYwBpdGFsaWMAQm9va21hbi1MaWdodEl0YWxpYwBaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljAEJvb2ttYW4tRGVtaUl0YWxpYwBUaW1lcy1Cb2xkSXRhbGljAFBhbGF0aW5vLUJvbGRJdGFsaWMATmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljAFRpbWVzLUl0YWxpYwBQYWxhdGluby1JdGFsaWMATmV3Q2VudHVyeVNjaGxiay1JdGFsaWMAcmFkaWMAI2ZjZmNmYwA6ICUuMmYgc2VjAGxpc3RkZWxyZWMAbGV2ZWwgZ3JhcGggcmVjAGxldmVsIGVkZ2UgcmVjAGxldmVsIG5vZGUgcmVjAERlYwBfbmVhdG9fY2MAYmMAdmlzaWJpbGl0eS5jAFNwYXJzZU1hdHJpeC5jAGh0bWxsZXguYwBpbmRleC5jAHNtYXJ0X2luaV94LmMAZ3ZyZW5kZXJfY29yZV9wb3YuYwBjdnQuYwBsYXlvdXQuYwB0ZXh0c3Bhbl9sdXQuYwBhZGp1c3QuYwBub2RlbGlzdC5jAHNob3J0ZXN0LmMAY2xvc2VzdC5jAHNhbWVwb3J0LmMAZ3ZyZW5kZXJfY29yZV9kb3QuYwBjb25zdHJhaW50LmMAZG90aW5pdC5jAG5lYXRvaW5pdC5jAHBhdGNod29ya2luaXQuYwBvc2FnZWluaXQuYwBlbWl0LmMAZmxhdC5jAGFycm93cy5jAG1pbmNyb3NzLmMAc3RyZXNzLmMAcG9zdF9wcm9jZXNzLmMAY2NvbXBzLmMAbnMuYwB1dGlscy5jAHhsYWJlbHMuYwBzaGFwZXMuYwBkb3RzcGxpbmVzLmMAbmVhdG9zcGxpbmVzLmMAY2x1c3RlcmVkZ2VzLmMAYXR0ci5jAGZhc3Rnci5jAGNsdXN0ZXIuYwB0YXBlci5jAGd2cmVuZGVyLmMAc3BsaXQucS5jAGRlY29tcC5jAGd2cmVuZGVyX2NvcmVfbWFwLmMAb3J0aG8uYwBndnJlbmRlcl9jb3JlX2pzb24uYwBwb3NpdGlvbi5jAHRleHRzcGFuLmMAZ2VvbS5jAHJvdXRlc3BsLmMAeG1sLmMATXVsdGlsZXZlbC5jAGdlbmVyYWwuYwBzcHJpbmdfZWxlY3RyaWNhbC5jAGd2cmVuZGVyX2NvcmVfdGsuYwByYW5rLmMAcGFjay5jAGJsb2NrcGF0aC5jAGR0c3RyaGFzaC5jAHJhd2dyYXBoLmMAZ3ZyZW5kZXJfY29yZV9zdmcuYwBndnJlbmRlcl9jb3JlX2ZpZy5jAHN0dWZmLmMAbWF6ZS5jAHF1YWRfcHJvZ19zb2x2ZS5jAHNwYXJzZV9zb2x2ZS5jAHJvdXRlLmMAd3JpdGUuYwBjb2x4bGF0ZS5jAHhtbHBhcnNlLmMAZWxsaXBzZS5jAGd2bG9hZGltYWdlX2NvcmUuYwBndnVzZXJzaGFwZS5jAHJlY3RhbmdsZS5jAGNpcmNsZS5jAGh0bWx0YWJsZS5jAGVkZ2UuYwBndmxvYWRpbWFnZS5jAGJsb2NrdHJlZS5jAFF1YWRUcmVlLmMAbm9kZS5jAG5vZGVfaW5kdWNlLmMAZ3ZkZXZpY2UuYwBjb21wb3VuZC5jAHRyYXBlem9pZC5jAHNnZC5jAGNvbmMuYwByZWMuYwBkaWprc3RyYS5jAGZQUS5jAGNsYXNzMi5jACVsZiwlbGYsJWxmLCVsZiVjACVsZiwlbGYsJWxmLCVbXixdJWMAXCVjACRjAG5zdWIAc2V0aHNiAHJiAHByb3RlY3RfcnNxYgBqb2IAY29yZV9sb2FkaW1hZ2VfcHNsaWIARmViAG9kYgBpbml0X3NwbGluZXNfYmIAYmV6aWVyX2JiAHByb3RlaW5zdGFiAHJuYXN0YWIAL3N2Zy9vbGl2ZWRyYWIAXGIAcndhAC9zdmcvYXF1YQBpb3RhAElvdGEAL3N2Zy9kYXJrbWFnZW50YQAvc3ZnL21hZ2VudGEAZGVsdGEARGVsdGEAemV0YQB0aGV0YQBUaGV0YQBiZXRhAFpldGEAQmV0YQBfQUdfc3RyZGF0YQBwcmV2ICE9IG9iai0+ZGF0YQBtYWtlR3JhcGhEYXRhAEV0YQBuaW1idXNzYW5zYQBwYXJhAGthcHBhAEthcHBhAC9zdmcvc2llbm5hAFZlcmRhbmEAZ2FtbWEAR2FtbWEAc2lnbWEAU2lnbWEAY29uc29sYQBuYWJsYQAvc3ZnL2Z1Y2hzaWEAR2VvcmdpYQBhbHBoYQBBbHBoYQBvbWVnYQBPbWVnYQBhcmVhAFJlY3RBcmVhAGxhbWJkYQBMYW1iZGEAaGVsdmV0aWNhAEhlbHZldGljYQBtaWNhAD48YQBgAF90ZHJhd18AX3RsZHJhd18AX2hsZHJhd18AX2xkcmF3XwBfaGRyYXdfAF9kcmF3XwBkb3Rfc3BsaW5lc18AJXNfAHBhZ2UlZCwlZF8AX2NjXwAgaWQ9ImFfAF4Abl9lZGdlcyA9PSBncmFwaC0+c291cmNlc1tncmFwaC0+bl0AamRbbWFza1tqY1trXV1dID09IGpjW2tdAGpjW21hc2tbamJba11dXSA9PSBqYltrXQBqYVttYXNrW2phW2pdXV0gPT0gamFbal0AcS0+cXRzW2lpXQAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAHItPmJvdW5kYXJ5W2ldIDw9IHItPmJvdW5kYXJ5W05VTURJTVMgKyBpXQBbJS4wM2YsJS4wM2ZdAFtpbnRlcm5hbCBoYXJkLWNvZGVkXQBucC0+Y2VsbHNbMV0AbnAtPmNlbGxzWzBdAHVzLT5uYW1lWzBdAGNwLT5zcmNbMF0AWy4uXQBcXAAicG9pbnRzIjogWwAic3RvcHMiOiBbAAlbAFoAY29tcHV0ZVNjYWxlWFkAeTw9WQAlYSAlYiAlZCAlSDolTTolUyAlWQBQT1NJWAB0YXJnZXQgPD0gKHNpemVfdClJTlRfTUFYAHcgPj0gMCAmJiB3IDw9IElOVF9NQVgAZV9jbnQgPD0gSU5UX01BWABwYWlyLnJpZ2h0IDw9IElOVF9NQVgAcGFpci5sZWZ0IDw9IElOVF9NQVgAbl9lZGdlcyA8PSBJTlRfTUFYAHN0cC5udmVydGljZXMgPD0gSU5UX01BWABvYnNbcG9seV9pXS0+cG4gPD0gSU5UX01BWABpbnB1dF9yb3V0ZS5wbiA8PSBJTlRfTUFYAGdyYXBoLT5uIDw9IElOVF9NQVgAcG5sbCA8PSBJTlRfTUFYAGggPj0gMCAmJiBoIDw9IElOVF9NQVgAVHJlZV9lZGdlLnNpemUgPD0gSU5UX01BWABlX2NudCAtIDEgPD0gSU5UX01BWABjbGlzdF9zaXplKCZsaXN0KSAtIDEgPD0gSU5UX01BWABsYXllcl9uYW1lc19zaXplKCZsYXllcklEcykgLSAxIDw9IElOVF9NQVgAc3RybGVuKGFyZ3MpIDw9IElOVF9NQVgAb2JqbGlzdF9zaXplKCZvYmpsKSA8PSBJTlRfTUFYAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPD0gSU5UX01BWAByZWN0LmJvdW5kYXJ5WzNdIDwgSU5UX01BWAByZWN0LmJvdW5kYXJ5WzJdIDwgSU5UX01BWAByZXN1bHQgPD0gKGludClVQ0hBUl9NQVgAc3N6IDw9IFVDSEFSX01BWABjb2wgPj0gMCAmJiBjb2wgPD0gVUlOVDE2X01BWAB4PD1YAFcAVgBVAFxUAFRFWFQAU1RSRVNTX01BSk9SSVpBVElPTl9QT1dFUl9ESVNUAFNUUkVTU19NQUpPUklaQVRJT05fR1JBUEhfRElTVABTVFJFU1NfTUFKT1JJWkFUSU9OX0FWR19ESVNUAEZBU1QARk9OVABiID09IEJfUklHSFQASEVJR0hUAEJfTEVGVABfJWxsdV9TVVNQRUNUAEJUAFRyZWJ1Y2hldCBNUwBJTlZJUwAlSDolTTolUwBWUgBUUgBBLT5mb3JtYXQgPT0gQi0+Zm9ybWF0ICYmIEEtPmZvcm1hdCA9PSBGT1JNQVRfQ1NSAExSAERJUgBIUgBDRU5URVIAJSVUUkFJTEVSAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTCB8fCBBLT50eXBlID09IE1BVFJJWF9UWVBFX0lOVEVHRVIAQ0VMTEJPUkRFUgBCUgAqUgBRAEVYUABCX1VQAFNVUABUT1AATwBtYXBOAFxOAEJfRE9XTgBUSE9STgAlJUJFR0lOAFJPV1NQQU4AQ09MU1BBTgBOQU4AUE0AQk9UVE9NAEJNAEFNACVIOiVNAFxMAHRhaWxVUkwAbGFiZWxVUkwAZWRnZVVSTABoZWFkVVJMAEhUTUwAeCE9TlVMTABxdWV1ZV9wb3AoJnEpID09IE5VTEwARURfdG9fdmlydChvcmlnKSA9PSBOVUxMAEVEX3RvX3ZpcnQoZSkgPT0gTlVMTABwcmVmaXggIT0gTlVMTABkdGQtPnNjYWZmSW5kZXggIT0gTlVMTABpbnB1dCAhPSBOVUxMAGxpc3QgIT0gTlVMTAByZWZlcmVudCAhPSBOVUxMAHMgIT0gTlVMTABhdHRyICE9IE5VTEwAbGVhZGVyICE9IE5VTEwAcSAhPSBOVUxMAGl0ZW0gIT0gTlVMTABoYXlzdGFjayAhPSBOVUxMAHNjcmF0Y2ggIT0gTlVMTABvcnRob2cgIT0gTlVMTABzZWxmICE9IE5VTEwAdmFsdWUgIT0gTlVMTABqb2ItPm91dHB1dF9maWxlICE9IE5VTEwAc291cmNlICE9IE5VTEwAam9iICE9IE5VTEwAc291cmNlLmRhdGEgIT0gTlVMTABiLmRhdGEgIT0gTlVMTABhLmRhdGEgIT0gTlVMTABsaXN0ICYmIGxpc3RbMF0gIT0gTlVMTABBRiAhPSBOVUxMAEVEX3RvX3ZpcnQob3JpZykgIT0gTlVMTABMQ19BTEwAQkwAYmVzdGNvc3QgPCBIVUdFX1ZBTABOT1JNQUwAUkFESUFMAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTABVUlcgQ2hhbmNlcnkgTABVUlcgQm9va21hbiBMAENlbnR1cnkgU2Nob29sYm9vayBMAFVSVyBHb3RoaWMgTABLSwBKAGkgPCBNQVhfSQBQLT5lbmQudGhldGEgPCAyICogTV9QSQBBU0NJSQBcSABFVEgAV0lEVEgARE9URk9OVFBBVEgAR0RGT05UUEFUSABta05Db25zdHJhaW50RwBcRwBFWFBBVF9FTlRJVFlfREVCVUcARVhQQVRfRU5UUk9QWV9ERUJVRwBFWFBBVF9BQ0NPVU5USU5HX0RFQlVHAFJORwBTUFJJTkcAQ0VMTFBBRERJTkcAQ0VMTFNQQUNJTkcATEFORwBJTUcAXHhGACUlRU9GAElORgBceEZGAFJJRkYAZGVsdGEgPD0gMHhGRkZGAFx4RUYAXHhERgBceENGAFx4QkYAXHhBRgBceDlGAFx4OEYAXHg3RgBceDFGAFx4RQBcRQBQT0lOVC1TSVpFAFRSVUUAQ0xPU0UARkFMU0UAa2luZCA9PSBMVF9OT05FAEdSQURJRU5UQU5HTEUAVFJJQU5HTEUATUlERExFAElOVklTSUJMRQBUQUJMRQBBR1RZUEUob2JqKSA9PSBBR0lORURHRSB8fCBBR1RZUEUob2JqKSA9PSBBR09VVEVER0UAXHhGRQBceEVFAFx4REUAQl9OT0RFAFx4Q0UAXHhCRQBceEFFAFx4OUUAXHg4RQBceDFFAFREAEEtPmZvcm1hdCA9PSBGT1JNQVRfQ09PUkQAbiAmJiBpID49IDAgJiYgaSA8IE5PREVDQVJEACUlRU5EAEhZQlJJRABTT0xJRABceEZEAFx4RUQARE9UVEVEAERBU0hFRABST1VOREVEAFx4REQAXHhDRABceEJEAFx4QUQAXHg5RABceDhEAFx4MUQAXHhDAGRlbGV0ZVZQU0MAXHhGQwBceEVDAFx4REMAXHhDQwBceEJDAFx4QUMAXHg5QwBceDhDAFx4MUMAXHhCAFNVQgBceEZCAFx4RUIAXHhEQgBceENCAFx4QkIAXHhBQgBceDlCAFx4OEIAXHgxQgBBICYmIEIAXHhGQQBceEVBAFx4REEAXHhDQQBceEJBAFx4QUEAXHg5QQBceDhBAFx4MUEAQAA/ADwlcz4APG5pbD4APC90c3Bhbj48L3RleHRQYXRoPgAKICAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPgA+Cjx0aXRsZT4APEZPTlQ+ADxCUj4APEhUTUw+ADwvSFRNTD4APElNRz4AU3ludGF4IGVycm9yOiBub24tc3BhY2Ugc3RyaW5nIHVzZWQgYmVmb3JlIDxUQUJMRT4AU3ludGF4IGVycm9yOiBub24tc3BhY2Ugc3RyaW5nIHVzZWQgYWZ0ZXIgPC9UQUJMRT4APFREPgAtPgAiPgAJW2tleT0APD0APAAmI3gleDsAJnF1b3Q7ACZsdDsAJmd0OwAmYW1wOwAjJWQ7ACYjMzk7ACYjNDU7ACYjOTM7ACYjMTM7ACYjMTYwOwAmIzEwOwA7c3RvcC1vcGFjaXR5OgAlJUJvdW5kaW5nQm94OgBjYWxjdWxhdGluZyBzaG9ydGVzdCBwYXRocyBhbmQgc2V0dGluZyB1cCBzdHJlc3MgdGVybXM6ADxzdG9wIG9mZnNldD0iJS4wM2YiIHN0eWxlPSJzdG9wLWNvbG9yOgA8c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOgA8c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOgBzb2x2aW5nIG1vZGVsOgAvXDoAZ3JleTkAZ3JheTkAXHhGOQBceEU5AFx4RDkAXHhDOQBceEI5AFx4QTkAZ3JleTk5AGdyYXk5OQBceDk5AGdyZXk4OQBncmF5ODkAXHg4OQAwMTIzNDU2Nzg5AGdyZXk3OQBncmF5NzkAZ3JleTY5AGdyYXk2OQBncmV5NTkAZ3JheTU5AGdyZXk0OQBncmF5NDkAZ3JleTM5AGdyYXkzOQBncmV5MjkAZ3JheTI5AGdyZXkxOQBncmF5MTkAXHgxOQAvcmRneTkvOQAvYnVwdTkvOQAvcmRwdTkvOQAvcHVidTkvOQAveWxnbmJ1OS85AC9nbmJ1OS85AC9yZHlsYnU5LzkAL3JkYnU5LzkAL2dyZXlzOS85AC9ncmVlbnM5LzkAL2JsdWVzOS85AC9wdXJwbGVzOS85AC9vcmFuZ2VzOS85AC9yZWRzOS85AC9wdW9yOS85AC95bG9yYnI5LzkAL3B1YnVnbjkvOQAvYnVnbjkvOQAvcHJnbjkvOQAvcmR5bGduOS85AC95bGduOS85AC9zcGVjdHJhbDkvOQAvcGl5ZzkvOQAvYnJiZzkvOQAvcHVyZDkvOQAveWxvcnJkOS85AC9vcnJkOS85AC9wYWlyZWQ5LzkAL3NldDM5LzkAL3NldDE5LzkAL3Bhc3RlbDE5LzkAL3BhaXJlZDEyLzkAL3NldDMxMi85AC9yZGd5MTEvOQAvcmR5bGJ1MTEvOQAvcmRidTExLzkAL3B1b3IxMS85AC9wcmduMTEvOQAvcmR5bGduMTEvOQAvc3BlY3RyYWwxMS85AC9waXlnMTEvOQAvYnJiZzExLzkAL3BhaXJlZDExLzkAL3NldDMxMS85AC9yZGd5MTAvOQAvcmR5bGJ1MTAvOQAvcmRidTEwLzkAL3B1b3IxMC85AC9wcmduMTAvOQAvcmR5bGduMTAvOQAvc3BlY3RyYWwxMC85AC9waXlnMTAvOQAvYnJiZzEwLzkAL3BhaXJlZDEwLzkAL3NldDMxMC85AGdyZXk4AGdyYXk4AFx4OAB1dGY4ACNmOGY4ZjgAI2U4ZThlOABceEY4AEdJRjgAXHhFOABceEQ4AFx4QzgAXHhCOABceEE4AGdyZXk5OABncmF5OTgAXHg5OABncmV5ODgAZ3JheTg4AFx4ODgAZ3JleTc4AGdyYXk3OABncmV5NjgAZ3JheTY4AGdyZXk1OABncmF5NTgAZ3JleTQ4AGdyYXk0OABncmV5MzgAZ3JheTM4AGdyZXkyOABncmF5MjgAZ3JleTE4AGdyYXkxOABceDE4AC9yZGd5OS84AC9idXB1OS84AC9yZHB1OS84AC9wdWJ1OS84AC95bGduYnU5LzgAL2duYnU5LzgAL3JkeWxidTkvOAAvcmRidTkvOAAvZ3JleXM5LzgAL2dyZWVuczkvOAAvYmx1ZXM5LzgAL3B1cnBsZXM5LzgAL29yYW5nZXM5LzgAL3JlZHM5LzgAL3B1b3I5LzgAL3lsb3JicjkvOAAvcHVidWduOS84AC9idWduOS84AC9wcmduOS84AC9yZHlsZ245LzgAL3lsZ245LzgAL3NwZWN0cmFsOS84AC9waXlnOS84AC9icmJnOS84AC9wdXJkOS84AC95bG9ycmQ5LzgAL29ycmQ5LzgAL3BhaXJlZDkvOAAvc2V0MzkvOAAvc2V0MTkvOAAvcGFzdGVsMTkvOAAvcmRneTgvOAAvYnVwdTgvOAAvcmRwdTgvOAAvcHVidTgvOAAveWxnbmJ1OC84AC9nbmJ1OC84AC9yZHlsYnU4LzgAL3JkYnU4LzgAL2FjY2VudDgvOAAvZ3JleXM4LzgAL2dyZWVuczgvOAAvYmx1ZXM4LzgAL3B1cnBsZXM4LzgAL29yYW5nZXM4LzgAL3JlZHM4LzgAL3B1b3I4LzgAL3lsb3JicjgvOAAvcHVidWduOC84AC9idWduOC84AC9wcmduOC84AC9yZHlsZ244LzgAL3lsZ244LzgAL3NwZWN0cmFsOC84AC9waXlnOC84AC9icmJnOC84AC9wdXJkOC84AC95bG9ycmQ4LzgAL29ycmQ4LzgAL3BhaXJlZDgvOAAvc2V0MzgvOAAvc2V0MjgvOAAvcGFzdGVsMjgvOAAvZGFyazI4LzgAL3NldDE4LzgAL3Bhc3RlbDE4LzgAL3BhaXJlZDEyLzgAL3NldDMxMi84AC9yZGd5MTEvOAAvcmR5bGJ1MTEvOAAvcmRidTExLzgAL3B1b3IxMS84AC9wcmduMTEvOAAvcmR5bGduMTEvOAAvc3BlY3RyYWwxMS84AC9waXlnMTEvOAAvYnJiZzExLzgAL3BhaXJlZDExLzgAL3NldDMxMS84AC9yZGd5MTAvOAAvcmR5bGJ1MTAvOAAvcmRidTEwLzgAL3B1b3IxMC84AC9wcmduMTAvOAAvcmR5bGduMTAvOAAvc3BlY3RyYWwxMC84AC9waXlnMTAvOAAvYnJiZzEwLzgAL3BhaXJlZDEwLzgAL3NldDMxMC84AHV0Zi04AEMuVVRGLTgAZ3JleTcAZ3JheTcAXHg3AFx4RjcAXHhFNwBceEQ3AFx4QzcAXHhCNwBceEE3AGdyZXk5NwBncmF5OTcAXHg5NwBncmV5ODcAZ3JheTg3AFx4ODcAZ3JleTc3AGdyYXk3NwBncmV5NjcAZ3JheTY3AGdyZXk1NwBncmF5NTcAZ3JleTQ3AGdyYXk0NwBncmV5MzcAZ3JheTM3AGdyZXkyNwBncmF5MjcAZ3JleTE3AGdyYXkxNwBceDE3AC9yZGd5OS83AC9idXB1OS83AC9yZHB1OS83AC9wdWJ1OS83AC95bGduYnU5LzcAL2duYnU5LzcAL3JkeWxidTkvNwAvcmRidTkvNwAvZ3JleXM5LzcAL2dyZWVuczkvNwAvYmx1ZXM5LzcAL3B1cnBsZXM5LzcAL29yYW5nZXM5LzcAL3JlZHM5LzcAL3B1b3I5LzcAL3lsb3JicjkvNwAvcHVidWduOS83AC9idWduOS83AC9wcmduOS83AC9yZHlsZ245LzcAL3lsZ245LzcAL3NwZWN0cmFsOS83AC9waXlnOS83AC9icmJnOS83AC9wdXJkOS83AC95bG9ycmQ5LzcAL29ycmQ5LzcAL3BhaXJlZDkvNwAvc2V0MzkvNwAvc2V0MTkvNwAvcGFzdGVsMTkvNwAvcmRneTgvNwAvYnVwdTgvNwAvcmRwdTgvNwAvcHVidTgvNwAveWxnbmJ1OC83AC9nbmJ1OC83AC9yZHlsYnU4LzcAL3JkYnU4LzcAL2FjY2VudDgvNwAvZ3JleXM4LzcAL2dyZWVuczgvNwAvYmx1ZXM4LzcAL3B1cnBsZXM4LzcAL29yYW5nZXM4LzcAL3JlZHM4LzcAL3B1b3I4LzcAL3lsb3JicjgvNwAvcHVidWduOC83AC9idWduOC83AC9wcmduOC83AC9yZHlsZ244LzcAL3lsZ244LzcAL3NwZWN0cmFsOC83AC9waXlnOC83AC9icmJnOC83AC9wdXJkOC83AC95bG9ycmQ4LzcAL29ycmQ4LzcAL3BhaXJlZDgvNwAvc2V0MzgvNwAvc2V0MjgvNwAvcGFzdGVsMjgvNwAvZGFyazI4LzcAL3NldDE4LzcAL3Bhc3RlbDE4LzcAL3JkZ3k3LzcAL2J1cHU3LzcAL3JkcHU3LzcAL3B1YnU3LzcAL3lsZ25idTcvNwAvZ25idTcvNwAvcmR5bGJ1Ny83AC9yZGJ1Ny83AC9hY2NlbnQ3LzcAL2dyZXlzNy83AC9ncmVlbnM3LzcAL2JsdWVzNy83AC9wdXJwbGVzNy83AC9vcmFuZ2VzNy83AC9yZWRzNy83AC9wdW9yNy83AC95bG9yYnI3LzcAL3B1YnVnbjcvNwAvYnVnbjcvNwAvcHJnbjcvNwAvcmR5bGduNy83AC95bGduNy83AC9zcGVjdHJhbDcvNwAvcGl5ZzcvNwAvYnJiZzcvNwAvcHVyZDcvNwAveWxvcnJkNy83AC9vcnJkNy83AC9wYWlyZWQ3LzcAL3NldDM3LzcAL3NldDI3LzcAL3Bhc3RlbDI3LzcAL2RhcmsyNy83AC9zZXQxNy83AC9wYXN0ZWwxNy83AC9wYWlyZWQxMi83AC9zZXQzMTIvNwAvcmRneTExLzcAL3JkeWxidTExLzcAL3JkYnUxMS83AC9wdW9yMTEvNwAvcHJnbjExLzcAL3JkeWxnbjExLzcAL3NwZWN0cmFsMTEvNwAvcGl5ZzExLzcAL2JyYmcxMS83AC9wYWlyZWQxMS83AC9zZXQzMTEvNwAvcmRneTEwLzcAL3JkeWxidTEwLzcAL3JkYnUxMC83AC9wdW9yMTAvNwAvcHJnbjEwLzcAL3JkeWxnbjEwLzcAL3NwZWN0cmFsMTAvNwAvcGl5ZzEwLzcAL2JyYmcxMC83AC9wYWlyZWQxMC83AC9zZXQzMTAvNwAxLjcAZ3JleTYAZ3JheTYAXHg2AFx4RjYAXHhFNgBceEQ2AFx4QzYAXHhCNgBceEE2AGdyZXk5NgBncmF5OTYAXHg5NgBncmV5ODYAZ3JheTg2AFx4ODYAZ3JleTc2AGdyYXk3NgBncmV5NjYAZ3JheTY2AGdyZXk1NgBncmF5NTYAZ3JleTQ2AGdyYXk0NgBncmV5MzYAZ3JheTM2AGdyZXkyNgBncmF5MjYAZ3JleTE2AGdyYXkxNgBceDE2AC9yZGd5OS82AC9idXB1OS82AC9yZHB1OS82AC9wdWJ1OS82AC95bGduYnU5LzYAL2duYnU5LzYAL3JkeWxidTkvNgAvcmRidTkvNgAvZ3JleXM5LzYAL2dyZWVuczkvNgAvYmx1ZXM5LzYAL3B1cnBsZXM5LzYAL29yYW5nZXM5LzYAL3JlZHM5LzYAL3B1b3I5LzYAL3lsb3JicjkvNgAvcHVidWduOS82AC9idWduOS82AC9wcmduOS82AC9yZHlsZ245LzYAL3lsZ245LzYAL3NwZWN0cmFsOS82AC9waXlnOS82AC9icmJnOS82AC9wdXJkOS82AC95bG9ycmQ5LzYAL29ycmQ5LzYAL3BhaXJlZDkvNgAvc2V0MzkvNgAvc2V0MTkvNgAvcGFzdGVsMTkvNgAvcmRneTgvNgAvYnVwdTgvNgAvcmRwdTgvNgAvcHVidTgvNgAveWxnbmJ1OC82AC9nbmJ1OC82AC9yZHlsYnU4LzYAL3JkYnU4LzYAL2FjY2VudDgvNgAvZ3JleXM4LzYAL2dyZWVuczgvNgAvYmx1ZXM4LzYAL3B1cnBsZXM4LzYAL29yYW5nZXM4LzYAL3JlZHM4LzYAL3B1b3I4LzYAL3lsb3JicjgvNgAvcHVidWduOC82AC9idWduOC82AC9wcmduOC82AC9yZHlsZ244LzYAL3lsZ244LzYAL3NwZWN0cmFsOC82AC9waXlnOC82AC9icmJnOC82AC9wdXJkOC82AC95bG9ycmQ4LzYAL29ycmQ4LzYAL3BhaXJlZDgvNgAvc2V0MzgvNgAvc2V0MjgvNgAvcGFzdGVsMjgvNgAvZGFyazI4LzYAL3NldDE4LzYAL3Bhc3RlbDE4LzYAL3JkZ3k3LzYAL2J1cHU3LzYAL3JkcHU3LzYAL3B1YnU3LzYAL3lsZ25idTcvNgAvZ25idTcvNgAvcmR5bGJ1Ny82AC9yZGJ1Ny82AC9hY2NlbnQ3LzYAL2dyZXlzNy82AC9ncmVlbnM3LzYAL2JsdWVzNy82AC9wdXJwbGVzNy82AC9vcmFuZ2VzNy82AC9yZWRzNy82AC9wdW9yNy82AC95bG9yYnI3LzYAL3B1YnVnbjcvNgAvYnVnbjcvNgAvcHJnbjcvNgAvcmR5bGduNy82AC95bGduNy82AC9zcGVjdHJhbDcvNgAvcGl5ZzcvNgAvYnJiZzcvNgAvcHVyZDcvNgAveWxvcnJkNy82AC9vcnJkNy82AC9wYWlyZWQ3LzYAL3NldDM3LzYAL3NldDI3LzYAL3Bhc3RlbDI3LzYAL2RhcmsyNy82AC9zZXQxNy82AC9wYXN0ZWwxNy82AC9yZGd5Ni82AC9idXB1Ni82AC9yZHB1Ni82AC9wdWJ1Ni82AC95bGduYnU2LzYAL2duYnU2LzYAL3JkeWxidTYvNgAvcmRidTYvNgAvYWNjZW50Ni82AC9ncmV5czYvNgAvZ3JlZW5zNi82AC9ibHVlczYvNgAvcHVycGxlczYvNgAvb3JhbmdlczYvNgAvcmVkczYvNgAvcHVvcjYvNgAveWxvcmJyNi82AC9wdWJ1Z242LzYAL2J1Z242LzYAL3ByZ242LzYAL3JkeWxnbjYvNgAveWxnbjYvNgAvc3BlY3RyYWw2LzYAL3BpeWc2LzYAL2JyYmc2LzYAL3B1cmQ2LzYAL3lsb3JyZDYvNgAvb3JyZDYvNgAvcGFpcmVkNi82AC9zZXQzNi82AC9zZXQyNi82AC9wYXN0ZWwyNi82AC9kYXJrMjYvNgAvc2V0MTYvNgAvcGFzdGVsMTYvNgAvcGFpcmVkMTIvNgAvc2V0MzEyLzYAL3JkZ3kxMS82AC9yZHlsYnUxMS82AC9yZGJ1MTEvNgAvcHVvcjExLzYAL3ByZ24xMS82AC9yZHlsZ24xMS82AC9zcGVjdHJhbDExLzYAL3BpeWcxMS82AC9icmJnMTEvNgAvcGFpcmVkMTEvNgAvc2V0MzExLzYAL3JkZ3kxMC82AC9yZHlsYnUxMC82AC9yZGJ1MTAvNgAvcHVvcjEwLzYAL3ByZ24xMC82AC9yZHlsZ24xMC82AC9zcGVjdHJhbDEwLzYAL3BpeWcxMC82AC9icmJnMTAvNgAvcGFpcmVkMTAvNgAvc2V0MzEwLzYAZ3JleTUAZ3JheTUAXHg1AGJpZzUAXHhGNQBceEU1AFx4RDUAXHhDNQBceEI1AFx4QTUAZ3JleTk1AGdyYXk5NQBceDk1AGdyZXk4NQBncmF5ODUAXHg4NQBncmV5NzUAZ3JheTc1AGdyZXk2NQBncmF5NjUAZ3JleTU1AGdyYXk1NQBncmV5NDUAZ3JheTQ1AGdyZXkzNQBncmF5MzUAZ3JleTI1AGdyYXkyNQBncmV5MTUAZ3JheTE1AFx4MTUAZ3JheTA1AC9yZGd5OS81AC9idXB1OS81AC9yZHB1OS81AC9wdWJ1OS81AC95bGduYnU5LzUAL2duYnU5LzUAL3JkeWxidTkvNQAvcmRidTkvNQAvZ3JleXM5LzUAL2dyZWVuczkvNQAvYmx1ZXM5LzUAL3B1cnBsZXM5LzUAL29yYW5nZXM5LzUAL3JlZHM5LzUAL3B1b3I5LzUAL3lsb3JicjkvNQAvcHVidWduOS81AC9idWduOS81AC9wcmduOS81AC9yZHlsZ245LzUAL3lsZ245LzUAL3NwZWN0cmFsOS81AC9waXlnOS81AC9icmJnOS81AC9wdXJkOS81AC95bG9ycmQ5LzUAL29ycmQ5LzUAL3BhaXJlZDkvNQAvc2V0MzkvNQAvc2V0MTkvNQAvcGFzdGVsMTkvNQAvcmRneTgvNQAvYnVwdTgvNQAvcmRwdTgvNQAvcHVidTgvNQAveWxnbmJ1OC81AC9nbmJ1OC81AC9yZHlsYnU4LzUAL3JkYnU4LzUAL2FjY2VudDgvNQAvZ3JleXM4LzUAL2dyZWVuczgvNQAvYmx1ZXM4LzUAL3B1cnBsZXM4LzUAL29yYW5nZXM4LzUAL3JlZHM4LzUAL3B1b3I4LzUAL3lsb3JicjgvNQAvcHVidWduOC81AC9idWduOC81AC9wcmduOC81AC9yZHlsZ244LzUAL3lsZ244LzUAL3NwZWN0cmFsOC81AC9waXlnOC81AC9icmJnOC81AC9wdXJkOC81AC95bG9ycmQ4LzUAL29ycmQ4LzUAL3BhaXJlZDgvNQAvc2V0MzgvNQAvc2V0MjgvNQAvcGFzdGVsMjgvNQAvZGFyazI4LzUAL3NldDE4LzUAL3Bhc3RlbDE4LzUAL3JkZ3k3LzUAL2J1cHU3LzUAL3JkcHU3LzUAL3B1YnU3LzUAL3lsZ25idTcvNQAvZ25idTcvNQAvcmR5bGJ1Ny81AC9yZGJ1Ny81AC9hY2NlbnQ3LzUAL2dyZXlzNy81AC9ncmVlbnM3LzUAL2JsdWVzNy81AC9wdXJwbGVzNy81AC9vcmFuZ2VzNy81AC9yZWRzNy81AC9wdW9yNy81AC95bG9yYnI3LzUAL3B1YnVnbjcvNQAvYnVnbjcvNQAvcHJnbjcvNQAvcmR5bGduNy81AC95bGduNy81AC9zcGVjdHJhbDcvNQAvcGl5ZzcvNQAvYnJiZzcvNQAvcHVyZDcvNQAveWxvcnJkNy81AC9vcnJkNy81AC9wYWlyZWQ3LzUAL3NldDM3LzUAL3NldDI3LzUAL3Bhc3RlbDI3LzUAL2RhcmsyNy81AC9zZXQxNy81AC9wYXN0ZWwxNy81AC9yZGd5Ni81AC9idXB1Ni81AC9yZHB1Ni81AC9wdWJ1Ni81AC95bGduYnU2LzUAL2duYnU2LzUAL3JkeWxidTYvNQAvcmRidTYvNQAvYWNjZW50Ni81AC9ncmV5czYvNQAvZ3JlZW5zNi81AC9ibHVlczYvNQAvcHVycGxlczYvNQAvb3JhbmdlczYvNQAvcmVkczYvNQAvcHVvcjYvNQAveWxvcmJyNi81AC9wdWJ1Z242LzUAL2J1Z242LzUAL3ByZ242LzUAL3JkeWxnbjYvNQAveWxnbjYvNQAvc3BlY3RyYWw2LzUAL3BpeWc2LzUAL2JyYmc2LzUAL3B1cmQ2LzUAL3lsb3JyZDYvNQAvb3JyZDYvNQAvcGFpcmVkNi81AC9zZXQzNi81AC9zZXQyNi81AC9wYXN0ZWwyNi81AC9kYXJrMjYvNQAvc2V0MTYvNQAvcGFzdGVsMTYvNQAvcmRneTUvNQAvYnVwdTUvNQAvcmRwdTUvNQAvcHVidTUvNQAveWxnbmJ1NS81AC9nbmJ1NS81AC9yZHlsYnU1LzUAL3JkYnU1LzUAL2FjY2VudDUvNQAvZ3JleXM1LzUAL2dyZWVuczUvNQAvYmx1ZXM1LzUAL3B1cnBsZXM1LzUAL29yYW5nZXM1LzUAL3JlZHM1LzUAL3B1b3I1LzUAL3lsb3JicjUvNQAvcHVidWduNS81AC9idWduNS81AC9wcmduNS81AC9yZHlsZ241LzUAL3lsZ241LzUAL3NwZWN0cmFsNS81AC9waXlnNS81AC9icmJnNS81AC9wdXJkNS81AC95bG9ycmQ1LzUAL29ycmQ1LzUAL3BhaXJlZDUvNQAvc2V0MzUvNQAvc2V0MjUvNQAvcGFzdGVsMjUvNQAvZGFyazI1LzUAL3NldDE1LzUAL3Bhc3RlbDE1LzUAL3BhaXJlZDEyLzUAL3NldDMxMi81AC9yZGd5MTEvNQAvcmR5bGJ1MTEvNQAvcmRidTExLzUAL3B1b3IxMS81AC9wcmduMTEvNQAvcmR5bGduMTEvNQAvc3BlY3RyYWwxMS81AC9waXlnMTEvNQAvYnJiZzExLzUAL3BhaXJlZDExLzUAL3NldDMxMS81AC9yZGd5MTAvNQAvcmR5bGJ1MTAvNQAvcmRidTEwLzUAL3B1b3IxMC81AC9wcmduMTAvNQAvcmR5bGduMTAvNQAvc3BlY3RyYWwxMC81AC9waXlnMTAvNQAvYnJiZzEwLzUAL3BhaXJlZDEwLzUAL3NldDMxMC81AGJpZy01AEJJRy01ACAtZGFzaCA1AGl2b3J5NABncmV5NABkYXJrc2xhdGVncmF5NABceDQAc25vdzQAbGlnaHR5ZWxsb3c0AGhvbmV5ZGV3NAB3aGVhdDQAdG9tYXRvNAByb3N5YnJvd240AG1hcm9vbjQAbGlnaHRzYWxtb240AGxlbW9uY2hpZmZvbjQAc3ByaW5nZ3JlZW40AGRhcmtvbGl2ZWdyZWVuNABwYWxlZ3JlZW40AGRhcmtzZWFncmVlbjQAbGlnaHRjeWFuNAB0YW40AHBsdW00AHNlYXNoZWxsNABjb3JhbDQAaG90cGluazQAbGlnaHRwaW5rNABkZWVwcGluazQAY29ybnNpbGs0AGZpcmVicmljazQAa2hha2k0AGxhdmVuZGVyYmx1c2g0AHBlYWNocHVmZjQAYmlzcXVlNABsaWdodHNreWJsdWU0AGRlZXBza3libHVlNABsaWdodGJsdWU0AGNhZGV0Ymx1ZTQAZG9kZ2VyYmx1ZTQAbGlnaHRzdGVlbGJsdWU0AHJveWFsYmx1ZTQAc2xhdGVibHVlNABuYXZham93aGl0ZTQAYW50aXF1ZXdoaXRlNABjaG9jb2xhdGU0AGNoYXJ0cmV1c2U0AG1pc3R5cm9zZTQAcGFsZXR1cnF1b2lzZTQAYXp1cmU0AHRoZXJlNABhcXVhbWFyaW5lNAB0aGlzdGxlNABtZWRpdW1wdXJwbGU0AGRhcmtvcmFuZ2U0AGxpZ2h0Z29sZGVucm9kNABkYXJrZ29sZGVucm9kNABidXJseXdvb2Q0AGdvbGQ0AG1lZGl1bW9yY2hpZDQAZGFya29yY2hpZDQAcGFsZXZpb2xldHJlZDQAaW5kaWFucmVkNABvcmFuZ2VyZWQ0AG9saXZlZHJhYjQAbWFnZW50YTQAc2llbm5hNABceEY0AFx4RTQAXHhENABceEM0AFx4QjQAXHhBNABncmV5OTQAZ3JheTk0AFx4OTQAZ3JleTg0AGdyYXk4NABceDg0AGdyZXk3NABncmF5NzQAZ3JleTY0AGdyYXk2NABncmV5NTQAZ3JheTU0AGdyZXk0NABncmF5NDQAZ3JleTM0AGdyYXkzNABmcmFjMzQAZ3JleTI0AGdyYXkyNABncmV5MTQAZ3JheTE0AFx4MTQAZnJhYzE0AC9yZGd5OS80AC9idXB1OS80AC9yZHB1OS80AC9wdWJ1OS80AC95bGduYnU5LzQAL2duYnU5LzQAL3JkeWxidTkvNAAvcmRidTkvNAAvZ3JleXM5LzQAL2dyZWVuczkvNAAvYmx1ZXM5LzQAL3B1cnBsZXM5LzQAL29yYW5nZXM5LzQAL3JlZHM5LzQAL3B1b3I5LzQAL3lsb3JicjkvNAAvcHVidWduOS80AC9idWduOS80AC9wcmduOS80AC9yZHlsZ245LzQAL3lsZ245LzQAL3NwZWN0cmFsOS80AC9waXlnOS80AC9icmJnOS80AC9wdXJkOS80AC95bG9ycmQ5LzQAL29ycmQ5LzQAL3BhaXJlZDkvNAAvc2V0MzkvNAAvc2V0MTkvNAAvcGFzdGVsMTkvNAAvcmRneTgvNAAvYnVwdTgvNAAvcmRwdTgvNAAvcHVidTgvNAAveWxnbmJ1OC80AC9nbmJ1OC80AC9yZHlsYnU4LzQAL3JkYnU4LzQAL2FjY2VudDgvNAAvZ3JleXM4LzQAL2dyZWVuczgvNAAvYmx1ZXM4LzQAL3B1cnBsZXM4LzQAL29yYW5nZXM4LzQAL3JlZHM4LzQAL3B1b3I4LzQAL3lsb3JicjgvNAAvcHVidWduOC80AC9idWduOC80AC9wcmduOC80AC9yZHlsZ244LzQAL3lsZ244LzQAL3NwZWN0cmFsOC80AC9waXlnOC80AC9icmJnOC80AC9wdXJkOC80AC95bG9ycmQ4LzQAL29ycmQ4LzQAL3BhaXJlZDgvNAAvc2V0MzgvNAAvc2V0MjgvNAAvcGFzdGVsMjgvNAAvZGFyazI4LzQAL3NldDE4LzQAL3Bhc3RlbDE4LzQAL3JkZ3k3LzQAL2J1cHU3LzQAL3JkcHU3LzQAL3B1YnU3LzQAL3lsZ25idTcvNAAvZ25idTcvNAAvcmR5bGJ1Ny80AC9yZGJ1Ny80AC9hY2NlbnQ3LzQAL2dyZXlzNy80AC9ncmVlbnM3LzQAL2JsdWVzNy80AC9wdXJwbGVzNy80AC9vcmFuZ2VzNy80AC9yZWRzNy80AC9wdW9yNy80AC95bG9yYnI3LzQAL3B1YnVnbjcvNAAvYnVnbjcvNAAvcHJnbjcvNAAvcmR5bGduNy80AC95bGduNy80AC9zcGVjdHJhbDcvNAAvcGl5ZzcvNAAvYnJiZzcvNAAvcHVyZDcvNAAveWxvcnJkNy80AC9vcnJkNy80AC9wYWlyZWQ3LzQAL3NldDM3LzQAL3NldDI3LzQAL3Bhc3RlbDI3LzQAL2RhcmsyNy80AC9zZXQxNy80AC9wYXN0ZWwxNy80AC9yZGd5Ni80AC9idXB1Ni80AC9yZHB1Ni80AC9wdWJ1Ni80AC95bGduYnU2LzQAL2duYnU2LzQAL3JkeWxidTYvNAAvcmRidTYvNAAvYWNjZW50Ni80AC9ncmV5czYvNAAvZ3JlZW5zNi80AC9ibHVlczYvNAAvcHVycGxlczYvNAAvb3JhbmdlczYvNAAvcmVkczYvNAAvcHVvcjYvNAAveWxvcmJyNi80AC9wdWJ1Z242LzQAL2J1Z242LzQAL3ByZ242LzQAL3JkeWxnbjYvNAAveWxnbjYvNAAvc3BlY3RyYWw2LzQAL3BpeWc2LzQAL2JyYmc2LzQAL3B1cmQ2LzQAL3lsb3JyZDYvNAAvb3JyZDYvNAAvcGFpcmVkNi80AC9zZXQzNi80AC9zZXQyNi80AC9wYXN0ZWwyNi80AC9kYXJrMjYvNAAvc2V0MTYvNAAvcGFzdGVsMTYvNAAvcmRneTUvNAAvYnVwdTUvNAAvcmRwdTUvNAAvcHVidTUvNAAveWxnbmJ1NS80AC9nbmJ1NS80AC9yZHlsYnU1LzQAL3JkYnU1LzQAL2FjY2VudDUvNAAvZ3JleXM1LzQAL2dyZWVuczUvNAAvYmx1ZXM1LzQAL3B1cnBsZXM1LzQAL29yYW5nZXM1LzQAL3JlZHM1LzQAL3B1b3I1LzQAL3lsb3JicjUvNAAvcHVidWduNS80AC9idWduNS80AC9wcmduNS80AC9yZHlsZ241LzQAL3lsZ241LzQAL3NwZWN0cmFsNS80AC9waXlnNS80AC9icmJnNS80AC9wdXJkNS80AC95bG9ycmQ1LzQAL29ycmQ1LzQAL3BhaXJlZDUvNAAvc2V0MzUvNAAvc2V0MjUvNAAvcGFzdGVsMjUvNAAvZGFyazI1LzQAL3NldDE1LzQAL3Bhc3RlbDE1LzQAL3JkZ3k0LzQAL2J1cHU0LzQAL3JkcHU0LzQAL3B1YnU0LzQAL3lsZ25idTQvNAAvZ25idTQvNAAvcmR5bGJ1NC80AC9yZGJ1NC80AC9hY2NlbnQ0LzQAL2dyZXlzNC80AC9ncmVlbnM0LzQAL2JsdWVzNC80AC9wdXJwbGVzNC80AC9vcmFuZ2VzNC80AC9yZWRzNC80AC9wdW9yNC80AC95bG9yYnI0LzQAL3B1YnVnbjQvNAAvYnVnbjQvNAAvcHJnbjQvNAAvcmR5bGduNC80AC95bGduNC80AC9zcGVjdHJhbDQvNAAvcGl5ZzQvNAAvYnJiZzQvNAAvcHVyZDQvNAAveWxvcnJkNC80AC9vcnJkNC80AC9wYWlyZWQ0LzQAL3NldDM0LzQAL3NldDI0LzQAL3Bhc3RlbDI0LzQAL2RhcmsyNC80AC9zZXQxNC80AC9wYXN0ZWwxNC80AC9wYWlyZWQxMi80AC9zZXQzMTIvNAAvcmRneTExLzQAL3JkeWxidTExLzQAL3JkYnUxMS80AC9wdW9yMTEvNAAvcHJnbjExLzQAL3JkeWxnbjExLzQAL3NwZWN0cmFsMTEvNAAvcGl5ZzExLzQAL2JyYmcxMS80AC9wYWlyZWQxMS80AC9zZXQzMTEvNAAvcmRneTEwLzQAL3JkeWxidTEwLzQAL3JkYnUxMC80AC9wdW9yMTAvNAAvcHJnbjEwLzQAL3JkeWxnbjEwLzQAL3NwZWN0cmFsMTAvNAAvcGl5ZzEwLzQAL2JyYmcxMC80AC9wYWlyZWQxMC80AC9zZXQzMTAvNAAxLjQAbiA+PSA0AHNpZGVzID09IDQAaXZvcnkzAFNwYXJzZU1hdHJpeF9tdWx0aXBseTMAZ3JleTMAZGFya3NsYXRlZ3JheTMAXHgzAHNub3czAGxpZ2h0eWVsbG93MwBob25leWRldzMAd2hlYXQzAHN1cDMAdG9tYXRvMwByb3N5YnJvd24zAG1hcm9vbjMAbGlnaHRzYWxtb24zAGxlbW9uY2hpZmZvbjMAc3ByaW5nZ3JlZW4zAGRhcmtvbGl2ZWdyZWVuMwBwYWxlZ3JlZW4zAGRhcmtzZWFncmVlbjMAbGlnaHRjeWFuMwB0YW4zAHBsdW0zAHNlYXNoZWxsMwBjb3JhbDMAaG90cGluazMAbGlnaHRwaW5rMwBkZWVwcGluazMAY29ybnNpbGszAGZpcmVicmljazMAa2hha2kzAGxhdmVuZGVyYmx1c2gzAHBlYWNocHVmZjMAYmlzcXVlMwBsaWdodHNreWJsdWUzAGRlZXBza3libHVlMwBsaWdodGJsdWUzAGNhZGV0Ymx1ZTMAZG9kZ2VyYmx1ZTMAbGlnaHRzdGVlbGJsdWUzAHJveWFsYmx1ZTMAc2xhdGVibHVlMwBuYXZham93aGl0ZTMAYW50aXF1ZXdoaXRlMwBjaG9jb2xhdGUzAGNoYXJ0cmV1c2UzAG1pc3R5cm9zZTMAcGFsZXR1cnF1b2lzZTMAYXp1cmUzAGFxdWFtYXJpbmUzAHRoaXN0bGUzAG1lZGl1bXB1cnBsZTMAZGFya29yYW5nZTMAbGlnaHRnb2xkZW5yb2QzAGRhcmtnb2xkZW5yb2QzAGJ1cmx5d29vZDMAZ29sZDMAbWVkaXVtb3JjaGlkMwBkYXJrb3JjaGlkMwBwYWxldmlvbGV0cmVkMwBpbmRpYW5yZWQzAG9yYW5nZXJlZDMAb2xpdmVkcmFiMwBtYWdlbnRhMwBzaWVubmEzAFx4RjMAXHhFMwBceEQzAFx4QzMAXHhCMwBceEEzAGdyZXk5MwBncmF5OTMAXHg5MwBncmV5ODMAZ3JheTgzAFx4ODMAZ3JleTczAGdyYXk3MwBncmV5NjMAZ3JheTYzAGdyZXk1MwBncmF5NTMAZ3JleTQzAGdyYXk0MwBncmV5MzMAZ3JheTMzADIwMjQwODExLjIyMzMAZ3JleTIzAGdyYXkyMwBncmV5MTMAZ3JheTEzAFx4MTMAL3JkZ3k5LzMAL2J1cHU5LzMAL3JkcHU5LzMAL3B1YnU5LzMAL3lsZ25idTkvMwAvZ25idTkvMwAvcmR5bGJ1OS8zAC9yZGJ1OS8zAC9ncmV5czkvMwAvZ3JlZW5zOS8zAC9ibHVlczkvMwAvcHVycGxlczkvMwAvb3JhbmdlczkvMwAvcmVkczkvMwAvcHVvcjkvMwAveWxvcmJyOS8zAC9wdWJ1Z245LzMAL2J1Z245LzMAL3ByZ245LzMAL3JkeWxnbjkvMwAveWxnbjkvMwAvc3BlY3RyYWw5LzMAL3BpeWc5LzMAL2JyYmc5LzMAL3B1cmQ5LzMAL3lsb3JyZDkvMwAvb3JyZDkvMwAvcGFpcmVkOS8zAC9zZXQzOS8zAC9zZXQxOS8zAC9wYXN0ZWwxOS8zAC9yZGd5OC8zAC9idXB1OC8zAC9yZHB1OC8zAC9wdWJ1OC8zAC95bGduYnU4LzMAL2duYnU4LzMAL3JkeWxidTgvMwAvcmRidTgvMwAvYWNjZW50OC8zAC9ncmV5czgvMwAvZ3JlZW5zOC8zAC9ibHVlczgvMwAvcHVycGxlczgvMwAvb3JhbmdlczgvMwAvcmVkczgvMwAvcHVvcjgvMwAveWxvcmJyOC8zAC9wdWJ1Z244LzMAL2J1Z244LzMAL3ByZ244LzMAL3JkeWxnbjgvMwAveWxnbjgvMwAvc3BlY3RyYWw4LzMAL3BpeWc4LzMAL2JyYmc4LzMAL3B1cmQ4LzMAL3lsb3JyZDgvMwAvb3JyZDgvMwAvcGFpcmVkOC8zAC9zZXQzOC8zAC9zZXQyOC8zAC9wYXN0ZWwyOC8zAC9kYXJrMjgvMwAvc2V0MTgvMwAvcGFzdGVsMTgvMwAvcmRneTcvMwAvYnVwdTcvMwAvcmRwdTcvMwAvcHVidTcvMwAveWxnbmJ1Ny8zAC9nbmJ1Ny8zAC9yZHlsYnU3LzMAL3JkYnU3LzMAL2FjY2VudDcvMwAvZ3JleXM3LzMAL2dyZWVuczcvMwAvYmx1ZXM3LzMAL3B1cnBsZXM3LzMAL29yYW5nZXM3LzMAL3JlZHM3LzMAL3B1b3I3LzMAL3lsb3JicjcvMwAvcHVidWduNy8zAC9idWduNy8zAC9wcmduNy8zAC9yZHlsZ243LzMAL3lsZ243LzMAL3NwZWN0cmFsNy8zAC9waXlnNy8zAC9icmJnNy8zAC9wdXJkNy8zAC95bG9ycmQ3LzMAL29ycmQ3LzMAL3BhaXJlZDcvMwAvc2V0MzcvMwAvc2V0MjcvMwAvcGFzdGVsMjcvMwAvZGFyazI3LzMAL3NldDE3LzMAL3Bhc3RlbDE3LzMAL3JkZ3k2LzMAL2J1cHU2LzMAL3JkcHU2LzMAL3B1YnU2LzMAL3lsZ25idTYvMwAvZ25idTYvMwAvcmR5bGJ1Ni8zAC9yZGJ1Ni8zAC9hY2NlbnQ2LzMAL2dyZXlzNi8zAC9ncmVlbnM2LzMAL2JsdWVzNi8zAC9wdXJwbGVzNi8zAC9vcmFuZ2VzNi8zAC9yZWRzNi8zAC9wdW9yNi8zAC95bG9yYnI2LzMAL3B1YnVnbjYvMwAvYnVnbjYvMwAvcHJnbjYvMwAvcmR5bGduNi8zAC95bGduNi8zAC9zcGVjdHJhbDYvMwAvcGl5ZzYvMwAvYnJiZzYvMwAvcHVyZDYvMwAveWxvcnJkNi8zAC9vcnJkNi8zAC9wYWlyZWQ2LzMAL3NldDM2LzMAL3NldDI2LzMAL3Bhc3RlbDI2LzMAL2RhcmsyNi8zAC9zZXQxNi8zAC9wYXN0ZWwxNi8zAC9yZGd5NS8zAC9idXB1NS8zAC9yZHB1NS8zAC9wdWJ1NS8zAC95bGduYnU1LzMAL2duYnU1LzMAL3JkeWxidTUvMwAvcmRidTUvMwAvYWNjZW50NS8zAC9ncmV5czUvMwAvZ3JlZW5zNS8zAC9ibHVlczUvMwAvcHVycGxlczUvMwAvb3JhbmdlczUvMwAvcmVkczUvMwAvcHVvcjUvMwAveWxvcmJyNS8zAC9wdWJ1Z241LzMAL2J1Z241LzMAL3ByZ241LzMAL3JkeWxnbjUvMwAveWxnbjUvMwAvc3BlY3RyYWw1LzMAL3BpeWc1LzMAL2JyYmc1LzMAL3B1cmQ1LzMAL3lsb3JyZDUvMwAvb3JyZDUvMwAvcGFpcmVkNS8zAC9zZXQzNS8zAC9zZXQyNS8zAC9wYXN0ZWwyNS8zAC9kYXJrMjUvMwAvc2V0MTUvMwAvcGFzdGVsMTUvMwAvcmRneTQvMwAvYnVwdTQvMwAvcmRwdTQvMwAvcHVidTQvMwAveWxnbmJ1NC8zAC9nbmJ1NC8zAC9yZHlsYnU0LzMAL3JkYnU0LzMAL2FjY2VudDQvMwAvZ3JleXM0LzMAL2dyZWVuczQvMwAvYmx1ZXM0LzMAL3B1cnBsZXM0LzMAL29yYW5nZXM0LzMAL3JlZHM0LzMAL3B1b3I0LzMAL3lsb3JicjQvMwAvcHVidWduNC8zAC9idWduNC8zAC9wcmduNC8zAC9yZHlsZ240LzMAL3lsZ240LzMAL3NwZWN0cmFsNC8zAC9waXlnNC8zAC9icmJnNC8zAC9wdXJkNC8zAC95bG9ycmQ0LzMAL29ycmQ0LzMAL3BhaXJlZDQvMwAvc2V0MzQvMwAvc2V0MjQvMwAvcGFzdGVsMjQvMwAvZGFyazI0LzMAL3NldDE0LzMAL3Bhc3RlbDE0LzMAL3JkZ3kzLzMAL2J1cHUzLzMAL3JkcHUzLzMAL3B1YnUzLzMAL3lsZ25idTMvMwAvZ25idTMvMwAvcmR5bGJ1My8zAC9yZGJ1My8zAC9hY2NlbnQzLzMAL2dyZXlzMy8zAC9ncmVlbnMzLzMAL2JsdWVzMy8zAC9wdXJwbGVzMy8zAC9vcmFuZ2VzMy8zAC9yZWRzMy8zAC9wdW9yMy8zAC95bG9yYnIzLzMAL3B1YnVnbjMvMwAvYnVnbjMvMwAvcHJnbjMvMwAvcmR5bGduMy8zAC95bGduMy8zAC9zcGVjdHJhbDMvMwAvcGl5ZzMvMwAvYnJiZzMvMwAvcHVyZDMvMwAveWxvcnJkMy8zAC9vcnJkMy8zAC9wYWlyZWQzLzMAL3NldDMzLzMAL3NldDIzLzMAL3Bhc3RlbDIzLzMAL2RhcmsyMy8zAC9zZXQxMy8zAC9wYXN0ZWwxMy8zAC9wYWlyZWQxMi8zAC9zZXQzMTIvMwAvcmRneTExLzMAL3JkeWxidTExLzMAL3JkYnUxMS8zAC9wdW9yMTEvMwAvcHJnbjExLzMAL3JkeWxnbjExLzMAL3NwZWN0cmFsMTEvMwAvcGl5ZzExLzMAL2JyYmcxMS8zAC9wYWlyZWQxMS8zAC9zZXQzMTEvMwAvcmRneTEwLzMAL3JkeWxidTEwLzMAL3JkYnUxMC8zAC9wdW9yMTAvMwAvcHJnbjEwLzMAL3JkeWxnbjEwLzMAL3NwZWN0cmFsMTAvMwAvcGl5ZzEwLzMAL2JyYmcxMC8zAC9wYWlyZWQxMC8zAC9zZXQzMTAvMwBpdm9yeTIAZ3JleTIAZGFya3NsYXRlZ3JheTIAXHgyAHNub3cyAGxpZ2h0eWVsbG93MgBob25leWRldzIAUlRyZWVJbnNlcnQyAHdoZWF0MgBzdXAyAG5vcDIAdG9tYXRvMgByb3N5YnJvd24yAG1hcm9vbjIAbGlnaHRzYWxtb24yAGxlbW9uY2hpZmZvbjIAc3ByaW5nZ3JlZW4yAGRhcmtvbGl2ZWdyZWVuMgBwYWxlZ3JlZW4yAGRhcmtzZWFncmVlbjIAbGlnaHRjeWFuMgB0YW4yAHBsdW0yAHNlYXNoZWxsMgBjb3JhbDIAaG90cGluazIAbGlnaHRwaW5rMgBkZWVwcGluazIAY29ybnNpbGsyAGZpcmVicmljazIAa2hha2kyAGxhdmVuZGVyYmx1c2gyAHBlYWNocHVmZjIAYnJvbnplMgBiaXNxdWUyAGxpZ2h0c2t5Ymx1ZTIAZGVlcHNreWJsdWUyAGxpZ2h0Ymx1ZTIAY2FkZXRibHVlMgBkb2RnZXJibHVlMgBsaWdodHN0ZWVsYmx1ZTIAcm95YWxibHVlMgBzbGF0ZWJsdWUyAG5hdmFqb3doaXRlMgBhbnRpcXVld2hpdGUyAGNob2NvbGF0ZTIAY2hhcnRyZXVzZTIAbWlzdHlyb3NlMgBwYWxldHVycXVvaXNlMgBhenVyZTIAYXF1YW1hcmluZTIAdGhpc3RsZTIAbWVkaXVtcHVycGxlMgBkYXJrb3JhbmdlMgBsaWdodGdvbGRlbnJvZDIAZGFya2dvbGRlbnJvZDIAYnVybHl3b29kMgBnb2xkMgBtZWRpdW1vcmNoaWQyAGRhcmtvcmNoaWQyAHBhbGV2aW9sZXRyZWQyAGluZGlhbnJlZDIAb3JhbmdlcmVkMgBvbGl2ZWRyYWIyAG1hZ2VudGEyAHNpZW5uYTIAXHhGMgBceEUyAFx4RDIAXHhDMgBceEIyAFx4QTIAZ3JleTkyAGdyYXk5MgBceDkyAGdyZXk4MgBncmF5ODIAXHg4MgBncmV5NzIAZ3JheTcyAGdyZXk2MgBncmF5NjIAZ3JleTUyAGdyYXk1MgBncmV5NDIAZ3JheTQyAGdyZXkzMgBncmF5MzIAZ3JleTIyAGdyYXkyMgBncmV5MTIAZ3JheTEyAFx4MTIAZnJhYzEyAC9wYWlyZWQxMi8xMgAvc2V0MzEyLzEyAC9yZGd5OS8yAC9idXB1OS8yAC9yZHB1OS8yAC9wdWJ1OS8yAC95bGduYnU5LzIAL2duYnU5LzIAL3JkeWxidTkvMgAvcmRidTkvMgAvZ3JleXM5LzIAL2dyZWVuczkvMgAvYmx1ZXM5LzIAL3B1cnBsZXM5LzIAL29yYW5nZXM5LzIAL3JlZHM5LzIAL3B1b3I5LzIAL3lsb3JicjkvMgAvcHVidWduOS8yAC9idWduOS8yAC9wcmduOS8yAC9yZHlsZ245LzIAL3lsZ245LzIAL3NwZWN0cmFsOS8yAC9waXlnOS8yAC9icmJnOS8yAC9wdXJkOS8yAC95bG9ycmQ5LzIAL29ycmQ5LzIAL3BhaXJlZDkvMgAvc2V0MzkvMgAvc2V0MTkvMgAvcGFzdGVsMTkvMgAvcmRneTgvMgAvYnVwdTgvMgAvcmRwdTgvMgAvcHVidTgvMgAveWxnbmJ1OC8yAC9nbmJ1OC8yAC9yZHlsYnU4LzIAL3JkYnU4LzIAL2FjY2VudDgvMgAvZ3JleXM4LzIAL2dyZWVuczgvMgAvYmx1ZXM4LzIAL3B1cnBsZXM4LzIAL29yYW5nZXM4LzIAL3JlZHM4LzIAL3B1b3I4LzIAL3lsb3JicjgvMgAvcHVidWduOC8yAC9idWduOC8yAC9wcmduOC8yAC9yZHlsZ244LzIAL3lsZ244LzIAL3NwZWN0cmFsOC8yAC9waXlnOC8yAC9icmJnOC8yAC9wdXJkOC8yAC95bG9ycmQ4LzIAL29ycmQ4LzIAL3BhaXJlZDgvMgAvc2V0MzgvMgAvc2V0MjgvMgAvcGFzdGVsMjgvMgAvZGFyazI4LzIAL3NldDE4LzIAL3Bhc3RlbDE4LzIAL3JkZ3k3LzIAL2J1cHU3LzIAL3JkcHU3LzIAL3B1YnU3LzIAL3lsZ25idTcvMgAvZ25idTcvMgAvcmR5bGJ1Ny8yAC9yZGJ1Ny8yAC9hY2NlbnQ3LzIAL2dyZXlzNy8yAC9ncmVlbnM3LzIAL2JsdWVzNy8yAC9wdXJwbGVzNy8yAC9vcmFuZ2VzNy8yAC9yZWRzNy8yAC9wdW9yNy8yAC95bG9yYnI3LzIAL3B1YnVnbjcvMgAvYnVnbjcvMgAvcHJnbjcvMgAvcmR5bGduNy8yAC95bGduNy8yAC9zcGVjdHJhbDcvMgAvcGl5ZzcvMgAvYnJiZzcvMgAvcHVyZDcvMgAveWxvcnJkNy8yAC9vcnJkNy8yAC9wYWlyZWQ3LzIAL3NldDM3LzIAL3NldDI3LzIAL3Bhc3RlbDI3LzIAL2RhcmsyNy8yAC9zZXQxNy8yAC9wYXN0ZWwxNy8yAC9yZGd5Ni8yAC9idXB1Ni8yAC9yZHB1Ni8yAC9wdWJ1Ni8yAC95bGduYnU2LzIAL2duYnU2LzIAL3JkeWxidTYvMgAvcmRidTYvMgAvYWNjZW50Ni8yAC9ncmV5czYvMgAvZ3JlZW5zNi8yAC9ibHVlczYvMgAvcHVycGxlczYvMgAvb3JhbmdlczYvMgAvcmVkczYvMgAvcHVvcjYvMgAveWxvcmJyNi8yAC9wdWJ1Z242LzIAL2J1Z242LzIAL3ByZ242LzIAL3JkeWxnbjYvMgAveWxnbjYvMgAvc3BlY3RyYWw2LzIAL3BpeWc2LzIAL2JyYmc2LzIAL3B1cmQ2LzIAL3lsb3JyZDYvMgAvb3JyZDYvMgAvcGFpcmVkNi8yAC9zZXQzNi8yAC9zZXQyNi8yAC9wYXN0ZWwyNi8yAC9kYXJrMjYvMgAvc2V0MTYvMgAvcGFzdGVsMTYvMgAvcmRneTUvMgAvYnVwdTUvMgAvcmRwdTUvMgAvcHVidTUvMgAveWxnbmJ1NS8yAC9nbmJ1NS8yAC9yZHlsYnU1LzIAL3JkYnU1LzIAL2FjY2VudDUvMgAvZ3JleXM1LzIAL2dyZWVuczUvMgAvYmx1ZXM1LzIAL3B1cnBsZXM1LzIAL29yYW5nZXM1LzIAL3JlZHM1LzIAL3B1b3I1LzIAL3lsb3JicjUvMgAvcHVidWduNS8yAC9idWduNS8yAC9wcmduNS8yAC9yZHlsZ241LzIAL3lsZ241LzIAL3NwZWN0cmFsNS8yAC9waXlnNS8yAC9icmJnNS8yAC9wdXJkNS8yAC95bG9ycmQ1LzIAL29ycmQ1LzIAL3BhaXJlZDUvMgAvc2V0MzUvMgAvc2V0MjUvMgAvcGFzdGVsMjUvMgAvZGFyazI1LzIAL3NldDE1LzIAL3Bhc3RlbDE1LzIAL3JkZ3k0LzIAL2J1cHU0LzIAL3JkcHU0LzIAL3B1YnU0LzIAL3lsZ25idTQvMgAvZ25idTQvMgAvcmR5bGJ1NC8yAC9yZGJ1NC8yAC9hY2NlbnQ0LzIAL2dyZXlzNC8yAC9ncmVlbnM0LzIAL2JsdWVzNC8yAC9wdXJwbGVzNC8yAC9vcmFuZ2VzNC8yAC9yZWRzNC8yAC9wdW9yNC8yAC95bG9yYnI0LzIAL3B1YnVnbjQvMgAvYnVnbjQvMgAvcHJnbjQvMgAvcmR5bGduNC8yAC95bGduNC8yAC9zcGVjdHJhbDQvMgAvcGl5ZzQvMgAvYnJiZzQvMgAvcHVyZDQvMgAveWxvcnJkNC8yAC9vcnJkNC8yAC9wYWlyZWQ0LzIAL3NldDM0LzIAL3NldDI0LzIAL3Bhc3RlbDI0LzIAL2RhcmsyNC8yAC9zZXQxNC8yAC9wYXN0ZWwxNC8yAC9yZGd5My8yAC9idXB1My8yAC9yZHB1My8yAC9wdWJ1My8yAC95bGduYnUzLzIAL2duYnUzLzIAL3JkeWxidTMvMgAvcmRidTMvMgAvYWNjZW50My8yAC9ncmV5czMvMgAvZ3JlZW5zMy8yAC9ibHVlczMvMgAvcHVycGxlczMvMgAvb3JhbmdlczMvMgAvcmVkczMvMgAvcHVvcjMvMgAveWxvcmJyMy8yAC9wdWJ1Z24zLzIAL2J1Z24zLzIAL3ByZ24zLzIAL3JkeWxnbjMvMgAveWxnbjMvMgAvc3BlY3RyYWwzLzIAL3BpeWczLzIAL2JyYmczLzIAL3B1cmQzLzIAL3lsb3JyZDMvMgAvb3JyZDMvMgAvcGFpcmVkMy8yAC9zZXQzMy8yAC9zZXQyMy8yAC9wYXN0ZWwyMy8yAC9kYXJrMjMvMgAvc2V0MTMvMgAvcGFzdGVsMTMvMgAvcGFpcmVkMTIvMgAvc2V0MzEyLzIAL3JkZ3kxMS8yAC9yZHlsYnUxMS8yAC9yZGJ1MTEvMgAvcHVvcjExLzIAL3ByZ24xMS8yAC9yZHlsZ24xMS8yAC9zcGVjdHJhbDExLzIAL3BpeWcxMS8yAC9icmJnMTEvMgAvcGFpcmVkMTEvMgAvc2V0MzExLzIAL3JkZ3kxMC8yAC9yZHlsYnUxMC8yAC9yZGJ1MTAvMgAvcHVvcjEwLzIAL3ByZ24xMC8yAC9yZHlsZ24xMC8yAC9zcGVjdHJhbDEwLzIAL3BpeWcxMC8yAC9icmJnMTAvMgAvcGFpcmVkMTAvMgAvc2V0MzEwLzIAMS4yACAtZGFzaCAyAHN6ID49IDIAbGVuID49IDIAZXhwID09IDEgfHwgZXhwID09IDIAZGltID09IDIATkRfb3V0KHYpLnNpemUgPT0gMgBpdm9yeTEAZ3JleTEAZGFya3NsYXRlZ3JheTEAXHgxAHNub3cxAGxpZ2h0eWVsbG93MQBob25leWRldzEAbnNsaW1pdDEAd2hlYXQxAHN1cDEAbm9wMQB0b21hdG8xAHJvc3licm93bjEAbWFyb29uMQBsaWdodHNhbG1vbjEAbGVtb25jaGlmZm9uMQBsYXRpbjEAYWdvcGVuMQBzcHJpbmdncmVlbjEAZGFya29saXZlZ3JlZW4xAHBhbGVncmVlbjEAZGFya3NlYWdyZWVuMQBsaWdodGN5YW4xAHRhbjEAcGx1bTEAc2Vhc2hlbGwxAGNvcmFsMQBob3RwaW5rMQBsaWdodHBpbmsxAGRlZXBwaW5rMQBjb3Juc2lsazEAZmlyZWJyaWNrMQBqMCA8PSBpMSAmJiBpMSA8PSBqMQBraGFraTEAbGF2ZW5kZXJibHVzaDEAcGVhY2hwdWZmMQBiaXNxdWUxAGxpZ2h0c2t5Ymx1ZTEAZGVlcHNreWJsdWUxAGxpZ2h0Ymx1ZTEAY2FkZXRibHVlMQBkb2RnZXJibHVlMQBsaWdodHN0ZWVsYmx1ZTEAcm95YWxibHVlMQBzbGF0ZWJsdWUxAG5hdmFqb3doaXRlMQBhbnRpcXVld2hpdGUxAGNob2NvbGF0ZTEAY2hhcnRyZXVzZTEAbWlzdHlyb3NlMQBwYWxldHVycXVvaXNlMQBhenVyZTEAYXF1YW1hcmluZTEAdGhpc3RsZTEAbWVkaXVtcHVycGxlMQBkYXJrb3JhbmdlMQBhcmdfZTAgJiYgYXJnX2UxAGxpZ2h0Z29sZGVucm9kMQBkYXJrZ29sZGVucm9kMQBidXJseXdvb2QxAGdvbGQxAG1lZGl1bW9yY2hpZDEAZGFya29yY2hpZDEAcGFsZXZpb2xldHJlZDEAaW5kaWFucmVkMQBvcmFuZ2VyZWQxAG9saXZlZHJhYjEAbWFnZW50YTEAc2llbm5hMQBceEYxAFx4RTEAXHhEMQBceEMxAFx4QjEAXHhBMQBncmV5OTEAZ3JheTkxAFx4OTEAZ3JleTgxAGdyYXk4MQBceDgxAGdyZXk3MQBncmF5NzEAZ3JleTYxAGdyYXk2MQBncmV5NTEAZ3JheTUxAGdyZXk0MQBncmF5NDEAZ3JleTMxAGdyYXkzMQBncmV5MjEAZ3JheTIxAGdyZXkxMQBncmF5MTEAXHgxMQAvcGFpcmVkMTIvMTEAL3NldDMxMi8xMQAvcmRneTExLzExAC9yZHlsYnUxMS8xMQAvcmRidTExLzExAC9wdW9yMTEvMTEAL3ByZ24xMS8xMQAvcmR5bGduMTEvMTEAL3NwZWN0cmFsMTEvMTEAL3BpeWcxMS8xMQAvYnJiZzExLzExAC9wYWlyZWQxMS8xMQAvc2V0MzExLzExAGNzW2ldLT5zbGFjaygpPi0wLjAwMDAwMDEAL3JkZ3k5LzEAL2J1cHU5LzEAL3JkcHU5LzEAL3B1YnU5LzEAL3lsZ25idTkvMQAvZ25idTkvMQAvcmR5bGJ1OS8xAC9yZGJ1OS8xAC9ncmV5czkvMQAvZ3JlZW5zOS8xAC9ibHVlczkvMQAvcHVycGxlczkvMQAvb3JhbmdlczkvMQAvcmVkczkvMQAvcHVvcjkvMQAveWxvcmJyOS8xAC9wdWJ1Z245LzEAL2J1Z245LzEAL3ByZ245LzEAL3JkeWxnbjkvMQAveWxnbjkvMQAvc3BlY3RyYWw5LzEAL3BpeWc5LzEAL2JyYmc5LzEAL3B1cmQ5LzEAL3lsb3JyZDkvMQAvb3JyZDkvMQAvcGFpcmVkOS8xAC9zZXQzOS8xAC9zZXQxOS8xAC9wYXN0ZWwxOS8xAC9yZGd5OC8xAC9idXB1OC8xAC9yZHB1OC8xAC9wdWJ1OC8xAC95bGduYnU4LzEAL2duYnU4LzEAL3JkeWxidTgvMQAvcmRidTgvMQAvYWNjZW50OC8xAC9ncmV5czgvMQAvZ3JlZW5zOC8xAC9ibHVlczgvMQAvcHVycGxlczgvMQAvb3JhbmdlczgvMQAvcmVkczgvMQAvcHVvcjgvMQAveWxvcmJyOC8xAC9wdWJ1Z244LzEAL2J1Z244LzEAL3ByZ244LzEAL3JkeWxnbjgvMQAveWxnbjgvMQAvc3BlY3RyYWw4LzEAL3BpeWc4LzEAL2JyYmc4LzEAL3B1cmQ4LzEAL3lsb3JyZDgvMQAvb3JyZDgvMQAvcGFpcmVkOC8xAC9zZXQzOC8xAC9zZXQyOC8xAC9wYXN0ZWwyOC8xAC9kYXJrMjgvMQAvc2V0MTgvMQAvcGFzdGVsMTgvMQAvcmRneTcvMQAvYnVwdTcvMQAvcmRwdTcvMQAvcHVidTcvMQAveWxnbmJ1Ny8xAC9nbmJ1Ny8xAC9yZHlsYnU3LzEAL3JkYnU3LzEAL2FjY2VudDcvMQAvZ3JleXM3LzEAL2dyZWVuczcvMQAvYmx1ZXM3LzEAL3B1cnBsZXM3LzEAL29yYW5nZXM3LzEAL3JlZHM3LzEAL3B1b3I3LzEAL3lsb3JicjcvMQAvcHVidWduNy8xAC9idWduNy8xAC9wcmduNy8xAC9yZHlsZ243LzEAL3lsZ243LzEAL3NwZWN0cmFsNy8xAC9waXlnNy8xAC9icmJnNy8xAC9wdXJkNy8xAC95bG9ycmQ3LzEAL29ycmQ3LzEAL3BhaXJlZDcvMQAvc2V0MzcvMQAvc2V0MjcvMQAvcGFzdGVsMjcvMQAvZGFyazI3LzEAL3NldDE3LzEAL3Bhc3RlbDE3LzEAL3JkZ3k2LzEAL2J1cHU2LzEAL3JkcHU2LzEAL3B1YnU2LzEAL3lsZ25idTYvMQAvZ25idTYvMQAvcmR5bGJ1Ni8xAC9yZGJ1Ni8xAC9hY2NlbnQ2LzEAL2dyZXlzNi8xAC9ncmVlbnM2LzEAL2JsdWVzNi8xAC9wdXJwbGVzNi8xAC9vcmFuZ2VzNi8xAC9yZWRzNi8xAC9wdW9yNi8xAC95bG9yYnI2LzEAL3B1YnVnbjYvMQAvYnVnbjYvMQAvcHJnbjYvMQAvcmR5bGduNi8xAC95bGduNi8xAC9zcGVjdHJhbDYvMQAvcGl5ZzYvMQAvYnJiZzYvMQAvcHVyZDYvMQAveWxvcnJkNi8xAC9vcnJkNi8xAC9wYWlyZWQ2LzEAL3NldDM2LzEAL3NldDI2LzEAL3Bhc3RlbDI2LzEAL2RhcmsyNi8xAC9zZXQxNi8xAC9wYXN0ZWwxNi8xAC9yZGd5NS8xAC9idXB1NS8xAC9yZHB1NS8xAC9wdWJ1NS8xAC95bGduYnU1LzEAL2duYnU1LzEAL3JkeWxidTUvMQAvcmRidTUvMQAvYWNjZW50NS8xAC9ncmV5czUvMQAvZ3JlZW5zNS8xAC9ibHVlczUvMQAvcHVycGxlczUvMQAvb3JhbmdlczUvMQAvcmVkczUvMQAvcHVvcjUvMQAveWxvcmJyNS8xAC9wdWJ1Z241LzEAL2J1Z241LzEAL3ByZ241LzEAL3JkeWxnbjUvMQAveWxnbjUvMQAvc3BlY3RyYWw1LzEAL3BpeWc1LzEAL2JyYmc1LzEAL3B1cmQ1LzEAL3lsb3JyZDUvMQAvb3JyZDUvMQAvcGFpcmVkNS8xAC9zZXQzNS8xAC9zZXQyNS8xAC9wYXN0ZWwyNS8xAC9kYXJrMjUvMQAvc2V0MTUvMQAvcGFzdGVsMTUvMQAvcmRneTQvMQAvYnVwdTQvMQAvcmRwdTQvMQAvcHVidTQvMQAveWxnbmJ1NC8xAC9nbmJ1NC8xAC9yZHlsYnU0LzEAL3JkYnU0LzEAL2FjY2VudDQvMQAvZ3JleXM0LzEAL2dyZWVuczQvMQAvYmx1ZXM0LzEAL3B1cnBsZXM0LzEAL29yYW5nZXM0LzEAL3JlZHM0LzEAL3B1b3I0LzEAL3lsb3JicjQvMQAvcHVidWduNC8xAC9idWduNC8xAC9wcmduNC8xAC9yZHlsZ240LzEAL3lsZ240LzEAL3NwZWN0cmFsNC8xAC9waXlnNC8xAC9icmJnNC8xAC9wdXJkNC8xAC95bG9ycmQ0LzEAL29ycmQ0LzEAL3BhaXJlZDQvMQAvc2V0MzQvMQAvc2V0MjQvMQAvcGFzdGVsMjQvMQAvZGFyazI0LzEAL3NldDE0LzEAL3Bhc3RlbDE0LzEAL3JkZ3kzLzEAL2J1cHUzLzEAL3JkcHUzLzEAL3B1YnUzLzEAL3lsZ25idTMvMQAvZ25idTMvMQAvcmR5bGJ1My8xAC9yZGJ1My8xAC9hY2NlbnQzLzEAL2dyZXlzMy8xAC9ncmVlbnMzLzEAL2JsdWVzMy8xAC9wdXJwbGVzMy8xAC9vcmFuZ2VzMy8xAC9yZWRzMy8xAC9wdW9yMy8xAC95bG9yYnIzLzEAL3B1YnVnbjMvMQAvYnVnbjMvMQAvcHJnbjMvMQAvcmR5bGduMy8xAC95bGduMy8xAC9zcGVjdHJhbDMvMQAvcGl5ZzMvMQAvYnJiZzMvMQAvcHVyZDMvMQAveWxvcnJkMy8xAC9vcnJkMy8xAC9wYWlyZWQzLzEAL3NldDMzLzEAL3NldDIzLzEAL3Bhc3RlbDIzLzEAL2RhcmsyMy8xAC9zZXQxMy8xAC9wYXN0ZWwxMy8xAC9wYWlyZWQxMi8xAC9zZXQzMTIvMQAvcmRneTExLzEAL3JkeWxidTExLzEAL3JkYnUxMS8xAC9wdW9yMTEvMQAvcHJnbjExLzEAL3JkeWxnbjExLzEAL3NwZWN0cmFsMTEvMQAvcGl5ZzExLzEAL2JyYmcxMS8xAC9wYWlyZWQxMS8xAC9zZXQzMTEvMQAvcmRneTEwLzEAL3JkeWxidTEwLzEAL3JkYnUxMC8xAC9wdW9yMTAvMQAvcHJnbjEwLzEAL3JkeWxnbjEwLzEAL3NwZWN0cmFsMTAvMQAvcGl5ZzEwLzEAL2JyYmcxMC8xAC9wYWlyZWQxMC8xAC9zZXQzMTAvMQBsYXRpbi0xAElTT184ODU5LTEASVNPODg1OS0xAElTTy04ODU5LTEAbiA+IDEAaSA+PSAxAHEtPm4gPT0gMQBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0ucGFydGl0aW9uW2ldID09IDAgfHwgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAxAGJ6LnNpemUgJSAzID09IDEAVHJlZV9lZGdlLnNpemUgPT0gTl9ub2RlcyAtIDEAbm9kZV9zZXRfc2l6ZShnLT5uX2lkKSA9PSBvc2l6ZSArIDEAbi0+Y291bnQgKyAoKm5uKS0+Y291bnQgPT0gTk9ERUNBUkQgKyAxAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSArIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA9PSBOT0RFQ0FSRCArIDEAZ3JleTAAZ3JheTAAanNvbjAAI2YwZjBmMAAjZTBlMGUwAHhiLT51LnMubG9jYXRlZCA+IEFHWEJVRl9JTkxJTkVfU0laRV8wAFwwAFQwAFx4RjAAXHhFMABceEQwAFx4QzAAXHhCMABceEEwAGdyZXk5MABncmF5OTAAXHg5MABncmV5ODAAZ3JheTgwAFx4ODAAIzgwODA4MABncmV5NzAAZ3JheTcwAGNjd3JvdCA9PSAwIHx8IGNjd3JvdCA9PSA5MCB8fCBjY3dyb3QgPT0gMTgwIHx8IGNjd3JvdCA9PSAyNzAAY3dyb3QgPT0gMCB8fCBjd3JvdCA9PSA5MCB8fCBjd3JvdCA9PSAxODAgfHwgY3dyb3QgPT0gMjcwAGdyZXk2MABncmF5NjAAZ3JleTUwAGdyYXk1MABncmV5NDAAZ3JheTQwAHIud2lkdGgoKTwxZTQwAGdyZXkzMABncmF5MzAAIzMwMzAzMABncmV5MjAAZ3JheTIwAGdyZXkxMABncmF5MTAAXHgxMAAjMTAxMDEwAC9wYWlyZWQxMi8xMAAvc2V0MzEyLzEwAC9yZGd5MTEvMTAAL3JkeWxidTExLzEwAC9yZGJ1MTEvMTAAL3B1b3IxMS8xMAAvcHJnbjExLzEwAC9yZHlsZ24xMS8xMAAvc3BlY3RyYWwxMS8xMAAvcGl5ZzExLzEwAC9icmJnMTEvMTAAL3BhaXJlZDExLzEwAC9zZXQzMTEvMTAAL3JkZ3kxMC8xMAAvcmR5bGJ1MTAvMTAAL3JkYnUxMC8xMAAvcHVvcjEwLzEwAC9wcmduMTAvMTAAL3JkeWxnbjEwLzEwAC9zcGVjdHJhbDEwLzEwAC9waXlnMTAvMTAAL2JyYmcxMC8xMAAvcGFpcmVkMTAvMTAAL3NldDMxMC8xMAAxMjAwAGdyZXkxMDAAZ3JheTEwMABJU08tSVItMTAwADEwMDAwACUhUFMtQWRvYmUtMy4wADEyLjEuMABueiA+IDAAZGlzdCA+IDAAcGF0aGNvdW50ID4gMAB3Z3QgPiAwAG5zaXRlcyA+IDAAc2lkZXMgPiAwAChydiA9PSAwKSB8fCAoTkRfb3JkZXIocnYpLU5EX29yZGVyKHYpKSpkaXIgPiAwAGxlbiA+IDAAcXQxLT5uID4gMCAmJiBxdDItPm4gPiAwAHdpZHRoID4gMABsaXN0LT5zaXplID4gMABzcGwtPnNpemUgPiAwAHNlbGYtPnNpemUgPiAwAGJ6LnNpemUgPiAwAGdyYXBoLT53ZWlnaHRzW3hdID4gMABncmFwaC0+d2VpZ2h0c1tuX2VkZ2VzXSA+IDAAbSA+IDAgJiYgbiA+IDAgJiYgbnogPj0gMAB0ID49IDAAbm5vZGVzID49IDAAbl9vYnMgPj0gMABuID49IDAAbi0+bGV2ZWwgPj0gMAB0b3RhbCA+PSAwAG9yaWdpbmFsID49IDAATWF4cmFuayA+PSAwAFBhY2sgPj0gMABpaSA8IDE8PGRpbSAmJiBpaSA+PSAwAHdpZHRoID49IDAAamRpYWcgPj0gMABpZGlhZyA+PSAwAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSA+PSAwICYmIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA+PSAwAFYgPj0gMABhZ25ub2RlcyhncmFwaCkgPj0gMABhZ25ub2RlcyhnKSA+PSAwAEVEX2NvdW50KGUpID49IDAAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGNfY250ID09IDAAcmFua19yZXN1bHQgPT0gMABnZXR0aW1lb2ZkYXlfcmVzID09IDAAaiA9PSAwAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAYS5zaGFwZSA9PSAwIHx8IGIuc2hhcGUgPT0gMABkdHNpemUoZGVzdCkgPT0gMABkdHNpemUoZy0+bl9zZXEpID09IDAAZHRzaXplKGctPmdfc2VxKSA9PSAwAGR0c2l6ZShnLT5lX3NlcSkgPT0gMABHRF9taW5yYW5rKGcpID09IDAAZHRzaXplKGctPmdfaWQpID09IDAAZHRzaXplKGctPmVfaWQpID09IDAAc2VsZi0+Y2FwYWNpdHkgIT0gMABjb3N4ICE9IDAgfHwgc2lueCAhPSAwAG1lbWNtcCgmc3R5bGUsICYoZ3JhcGh2aXpfcG9seWdvbl9zdHlsZV90KXswfSwgc2l6ZW9mKHN0eWxlKSkgIT0gMAByZXN1bHQgPT0gKGludCkoc2l6ZSAtIDEpIHx8IHJlc3VsdCA8IDAAbWFza1tpaV0gPCAwAE5EX2hlYXBpbmRleCh2KSA8IDAAXC8AWDExLwAlLipzLgBzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AR3JhcGggJXMgaGFzIGFycmF5IHBhY2tpbmcgd2l0aCB1c2VyIHZhbHVlcyBidXQgbm8gInNvcnR2IiBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLgAxLgAtMC4AJSFQUy1BZG9iZS0AJVBERi0APCEtLQAgLAArACoAc3RyZXEoYXB0ci0+dS5uYW1lLEtleSkAIWlzX2V4YWN0bHlfZXF1YWwoUi54LCBRLngpIHx8ICFpc19leGFjdGx5X2VxdWFsKFIueSwgUS55KQBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAHUgPT0gVUZfZmluZCh1KQAhcG9pbnRzX2lzX2VtcHR5KHBsaXN0KQAhb2JqbGlzdF9pc19lbXB0eShsaXN0KQAhbm9kZWxpc3RfaXNfZW1wdHkobGlzdCkAIXBvaW50c19pc19lbXB0eShsaXN0KQBvbmUgPD0gbm9kZWxpc3Rfc2l6ZShsaXN0KQBucCA8IG5vZGVsaXN0X3NpemUobGlzdCkAc3RkOjppc19oZWFwKGhlYXAuYmVnaW4oKSwgaGVhcC5lbmQoKSwgZ3QpACEocS0+cXRzKQAhaW50c19pc19lbXB0eSgmbGVhdmVzKQBvbl9oZWFwKHIpAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPT0gKHNpemVfdClkdHNpemUoZy0+bl9zZXEpAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBub3Qgd2VsbC1mb3JtZWQgKGludmFsaWQgdG9rZW4pAGFnc3VicmVwKGcsbikAbiAhPSBORF9uZXh0KG4pAGZpbmRfZmFzdF9ub2RlKGcsIG4pAChudWxsKQAoIWpjbikgJiYgKCF2YWwpACEocS0+bCkAc3ltLT5pZCA+PSAwICYmIHN5bS0+aWQgPCB0b3BkaWN0c2l6ZShvYmopACEoKmZsYWcpAG1vdmUgdG8gKCUuMGYsICUuMGYpADsgc3BsaW5lIHRvICglLjBmLCAlLjBmKQA7IGxpbmUgdG8gKCUuMGYsICUuMGYpAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMoQSwgdHJ1ZSkAdmFsdWUgJiYgc3RybGVuKHZhbHVlKQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljKEEsIGZhbHNlKQBFRF9sYWJlbChmZSkAIVRSRUVfRURHRShlKQAhY29uc3RyYWluaW5nX2ZsYXRfZWRnZShnLCBlKQBub2RlX3NldF9pc19lbXB0eShnLT5uX2lkKQByXyVkKQBsXyVkKQAobGliKQAhU3BhcnNlTWF0cml4X2hhc19kaWFnb25hbChBKQBTcGFyc2VNYXRyaXhfa25vd25fc3RydWN1cmFsX3N5bW1ldHJpYyhBKQAgc2Nhbm5pbmcgYSBIVE1MIHN0cmluZyAobWlzc2luZyAnPic/IGJhZCBuZXN0aW5nPyBsb25nZXIgdGhhbiAlZD8pACBzY2FubmluZyBhIHF1b3RlZCBzdHJpbmcgKG1pc3NpbmcgZW5kcXVvdGU/IGxvbmdlciB0aGFuICVkPykAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmYWxsYmFjayg0KQBvbl9oZWFwKHIwKSB8fCBvbl9oZWFwKHIxKQBhZ3RhaWwoZSkgPT0gVUZfZmluZChhZ3RhaWwoZSkpAGFnaGVhZChlKSA9PSBVRl9maW5kKGFnaGVhZChlKSkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpAG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpAHNldGxpbmV3aWR0aCgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAIHRyYW5zZm9ybT0ic2NhbGUoAE5PVEFUSU9OKAAgKAAgbmVhciAnJXMnACVsZiwlbGYsJWxmLCclW14nXScAaXNkaWdpdCgoaW50KWRvdHBbMV0pICYmIGlzZGlnaXQoKGludClkb3RwWzJdKSAmJiBkb3RwWzNdID09ICdcMCcAJgAlACQAdXJsKCMAPHRleHRQYXRoIHhsaW5rOmhyZWY9IiMAPGFyZWEgc2hhcGU9InBvbHkiACBmaWxsPSIjJTAyeCUwMnglMDJ4IgAoc2VxICYgU0VRX01BU0spID09IHNlcSAmJiAic2VxdWVuY2UgSUQgb3ZlcmZsb3ciAGd2X3NvcnRfY29tcGFyID09IE5VTEwgJiYgZ3Zfc29ydF9hcmcgPT0gTlVMTCAmJiAidW5zdXBwb3J0ZWQgcmVjdXJzaXZlIGNhbGwgdG8gZ3Zfc29ydCIAZ3Zfc29ydF9jb21wYXIgIT0gTlVMTCAmJiAibm8gY29tcGFyYXRvciBzZXQgaW4gZ3Zfc29ydCIAb3AtPm9wLnUucG9seWdvbi5jbnQgPD0gSU5UX01BWCAmJiAicG9seWdvbiBjb3VudCBleGNlZWRzIGd2cmVuZGVyX3BvbHlnb24gc3VwcG9ydCIAIHRleHQtYW5jaG9yPSJzdGFydCIAcC54ICE9IGEgJiYgImNhbm5vdCBoYW5kbGUgZWxsaXBzZSB0YW5nZW50IHNsb3BlIGluIGhvcml6b250YWwgZXh0cmVtZSBwb2ludCIAZnVsbF9sZW5ndGhfd2l0aG91dF9zaGFmdCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCB3aXRob3V0IHNoYWZ0IgA8YXJlYSBzaGFwZT0icmVjdCIAc2l6ZSA+IDAgJiYgImF0dGVtcHQgdG8gYWxsb2NhdGUgYXJyYXkgb2YgMC1zaXplZCBlbGVtZW50cyIAaW5kZXggPCBzZWxmLT5zaXplX2JpdHMgJiYgIm91dCBvZiBib3VuZHMgYWNjZXNzIgBpbmRleCA8IHNlbGYuc2l6ZV9iaXRzICYmICJvdXQgb2YgYm91bmRzIGFjY2VzcyIAKnMxICE9ICpzMiAmJiAiZHVwbGljYXRlIHNlcGFyYXRvciBjaGFyYWN0ZXJzIgBHRF9taW5yYW5rKHN1YmcpIDw9IEdEX21heHJhbmsoc3ViZykgJiYgImNvcnJ1cHRlZCByYW5rIGJvdW5kcyIAaW5kZXggPCBsaXN0LT5zaXplICYmICJpbmRleCBvdXQgb2YgYm91bmRzIgBpbmRleCA8IG5vZGVsaXN0X3NpemUobGlzdCkgJiYgImluZGV4IG91dCBvZiBib3VuZHMiAGluZGV4IDwgaW50c19zaXplKGxpc3QpICYmICJpbmRleCBvdXQgb2YgYm91bmRzIgBpbmRleCA8IG5vZGVzX3NpemUobGlzdCkgJiYgImluZGV4IG91dCBvZiBib3VuZHMiACh1aW50cHRyX3QpcyAlIDIgPT0gMCAmJiAiaGVhcCBwb2ludGVyIHdpdGggbG93IGJpdCBzZXQgd2lsbCBjb2xsaWRlIHdpdGggYW5vbnltb3VzIElEcyIAICgrJTZkIGJ5dGVzICVzfCVkLCB4bWxwYXJzZS5jOiVkKSAlKnMiACBmb250LWZhbWlseT0iJXMiACBmb250LXdlaWdodD0iJXMiACBmaWxsPSIlcyIAIGZvbnQtc3RyZXRjaD0iJXMiACBmb250LXN0eWxlPSIlcyIAYmFkIGVkZ2UgbGVuICIlcyIAIGJhc2VsaW5lLXNoaWZ0PSJzdXBlciIAYWd4Ymxlbih4YikgPD0gc2l6ZW9mKHhiLT51LnN0b3JlKSAmJiAiYWd4YnVmIGNvcnJ1cHRpb24iACB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgBmdWxsX2xlbmd0aCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCIAZnVsbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIGZ1bGwgYmFzZSB3aWR0aCIAbm9taW5hbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIG5vbWluYWwgYmFzZSB3aWR0aCIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0IiB4PSIlZyIgeT0iJWciACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgeD0iJWciIHk9IiVnIgAgZm9udC1zaXplPSIlLjJmIgAgdmlld0JveD0iJS4yZiAlLjJmICUuMmYgJS4yZiIAIGZpbGwtb3BhY2l0eT0iJWYiAGlzZmluaXRlKG0pICYmICJlbGxpcHNlIHRhbmdlbnQgc2xvcGUgaXMgaW5maW5pdGUiACh4Yi0+dS5zLmxvY2F0ZWQgPT0gQUdYQlVGX09OX0hFQVAgfHwgeGItPnUucy5sb2NhdGVkIDw9IHNpemVvZih4Yi0+dS5zdG9yZSkpICYmICJjb3JydXB0ZWQgYWd4YnVmIHR5cGUiACB0ZXh0LWFuY2hvcj0ibWlkZGxlIgA8YXJlYSBzaGFwZT0iY2lyY2xlIgBvbGRfbm1lbWIgPCBTSVpFX01BWCAvIHNpemUgJiYgImNsYWltZWQgcHJldmlvdXMgZXh0ZW50IGlzIHRvbyBsYXJnZSIAdGhldGEgPj0gMCAmJiB0aGV0YSA8PSBNX1BJICYmICJ0aGV0YSBvdXQgb2YgcmFuZ2UiACB0ZXh0LWFuY2hvcj0iZW5kIgAgZm9udC13ZWlnaHQ9ImJvbGQiACBmb250LXN0eWxlPSJpdGFsaWMiACBiYXNlbGluZS1zaGlmdD0ic3ViIgBcIgBsbGVuIDw9IChzaXplX3QpSU5UX01BWCAmJiAiWE1MIHRva2VuIHRvbyBsb25nIGZvciBleHBhdCBBUEkiACIgcnk9IgBfcCIgc3RhcnRPZmZzZXQ9IjUwJSI+PHRzcGFuIHg9IjAiIGR5PSIAIiBjeT0iACIgeT0iACIgcng9IgAgY3g9IgAgeD0iACB0YXJnZXQ9IgAgcG9pbnRzPSIAIGNvb3Jkcz0iACB0ZXh0LWRlY29yYXRpb249IgAgZmlsbD0iACIgc3Ryb2tlLXdpZHRoPSIAPGltYWdlIHhsaW5rOmhyZWY9IgA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIG5hbWU9IgAgeGxpbms6dGl0bGU9IgAgdGl0bGU9IgAiIHN0cm9rZT0iADxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9IgA8ZGVmcz4KPHJhZGlhbEdyYWRpZW50IGlkPSIAPG1hcCBpZD0iADxnIGlkPSIAIGQ9IgAiIHkyPSIAIiB4Mj0iACIgeTE9IgB4MT0iACB0cmFuc2Zvcm09InJvdGF0ZSglZCAlZyAlZykiAGFneGJsZW4oJlNidWYpID09IDAgJiYgInBlbmRpbmcgc3RyaW5nIGRhdGEgdGhhdCB3YXMgbm90IGNvbnN1bWVkIChtaXNzaW5nICIgImVuZHN0cigpL2VuZGh0bWxzdHIoKT8pIgAgYWx0PSIiAEN5Y2xlIEVycm9yIQBQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkIQA8IS0tIEdlbmVyYXRlZCBieSAAJWMgJXp1IAB0ICV1IAAgY3JlYXRlIHRleHQgAHhMYXlvdXQgAGRlZmF1bHQgAHN0cmljdCAAJXMlenUgLSVzIAAgLXNtb290aCBiZXppZXIgACBtb3ZldG8gACB2ZXJzaW9uIAAgY3JlYXRlIHBvbHlnb24gACAtdGV4dCB7JXN9IC1maWxsIAAgY3JlYXRlIG92YWwgACAtd2lkdGggAG5ld3BhdGggAGdyYXBoIABzLCUuNWcsJS41ZyAAJS41ZywlLjVnLCUuNWcsJS41ZyAAZSwlLjVnLCUuNWcgACVnICVnIAAlLjAzbGYgACUuM2YgACVkICVkICVkICVkICVkICVkICUuMWYgJS40ZiAlZCAlLjFmICUuMWYgJS4wZiAlLjBmIAAgLW91dGxpbmUgACBjcmVhdGUgbGluZSAAbm9kZSAAJWQgAFRvdGFsIHNpemUgPiAxIGluICIlcyIgY29sb3Igc3BlYyAAWyAvUmVjdCBbIABUIABTIABPUEVOIABJIABGIABFIABDIAAgLT4gAFJhbmsgc2VwYXJhdGlvbiA9IABuZXR3b3JrIHNpbXBsZXg6IABVbnNhdGlzZmllZCBjb25zdHJhaW50OiAAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHM6IAAlczogAFNvbHZpbmcgbW9kZWw6IABTZXR0aW5nIHVwIHNwcmluZyBtb2RlbDogAGNvbnZlcnQgZ3JhcGg6IAAgVGl0bGU6IAAidGV4dCI6IAB7ImZyYWMiOiAlLjAzZiwgImNvbG9yIjogACJuYW1lIjogACJzdHlsZSI6IAAiZmFjZSI6IAAyIAA8IS0tIAAgLS0gACUgAF9wIiAAbF8lZCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIAANICAgICAgICAgICAgICAgIGl0ZXIgPSAlZCwgc3RlcCA9ICVmIEZub3JtID0gJWYgbnogPSAlZCAgSyA9ICVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAKICAgIAA6CSAAICAgICVzfQoAdHJ5aW5nIHRvIGFkZCB0byByZWN0IHslZiArLy0gJWYsICVmICsvLSAlZn0KACNkZWZhdWx0IHsgZmluaXNoIHsgYW1iaWVudCAwLjEgZGlmZnVzZSAwLjkgfSB9CgBwaWdtZW50IHsgY29sb3IgJXMgfQoAbGlnaHRfc291cmNlIHsgPDE1MDAsMzAwMCwtMjUwMD4gY29sb3IgV2hpdGUgfQoAZ2xvYmFsX3NldHRpbmdzIHsgYXNzdW1lZF9nYW1tYSAxLjAgfQoAICAgIHRleHR1cmUgSW1hZ2VUZXh0dXJlIHsgdXJsICIlcyIgfQoAICAgIH0KAC8vc2t5CnBsYW5lIHsgPDAsIDEsIDA+LCAxIGhvbGxvdwogICAgdGV4dHVyZSB7CiAgICAgICAgcGlnbWVudCB7IGJvem8gdHVyYnVsZW5jZSAwLjk1CiAgICAgICAgICAgIGNvbG9yX21hcCB7CiAgICAgICAgICAgICAgICBbMC4wMCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNTAgcmdiIDwwLjA1LCAwLjIwLCAwLjUwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MS4wMCwgMS4wMCwgMS4wMD5dCiAgICAgICAgICAgICAgICBbMC43NSByZ2IgPDAuMjUsIDAuMjUsIDAuMjU+XQogICAgICAgICAgICAgICAgWzEuMDAgcmdiIDwwLjUwLCAwLjUwLCAwLjUwPl0KICAgICAgICAgICAgfQogICAgICAgICAgICBzY2FsZSA8MS4wMCwgMS4wMCwgMS41MD4gKiAyLjUwCiAgICAgICAgICAgIHRyYW5zbGF0ZSA8MC4wMCwgMC4wMCwgMC4wMD4KICAgICAgICB9CiAgICAgICAgZmluaXNoIHsgYW1iaWVudCAxIGRpZmZ1c2UgMCB9CiAgICB9CiAgICBzY2FsZSAxMDAwMAp9Ci8vbWlzdApmb2cgeyBmb2dfdHlwZSAyCiAgICBkaXN0YW5jZSA1MAogICAgY29sb3IgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPiAqIDAuNzUKICAgIGZvZ19vZmZzZXQgMC4xMAogICAgZm9nX2FsdCAxLjUwCiAgICB0dXJidWxlbmNlIDEuNzUKfQovL2duZApwbGFuZSB7IDwwLjAwLCAxLjAwLCAwLjAwPiwgMAogICAgdGV4dHVyZSB7CiAgICAgICAgcGlnbWVudHsgY29sb3IgcmdiIDwwLjI1LCAwLjQ1LCAwLjAwPiB9CiAgICAgICAgbm9ybWFsIHsgYnVtcHMgMC43NSBzY2FsZSAwLjAxIH0KICAgICAgICBmaW5pc2ggeyBwaG9uZyAwLjEwIH0KICAgIH0KfQoAY2FtZXJhIHsgbG9jYXRpb24gPCUuM2YgLCAlLjNmICwgLTUwMC4wMDA+CiAgICAgICAgIGxvb2tfYXQgIDwlLjNmICwgJS4zZiAsIDAuMDAwPgogICAgICAgICByaWdodCB4ICogaW1hZ2Vfd2lkdGggLyBpbWFnZV9oZWlnaHQKICAgICAgICAgYW5nbGUgJS4zZgp9CgAgICAgbWF0ZXJpYWwgTWF0ZXJpYWwgewoAU2hhcGUgewoAICBhcHBlYXJhbmNlIEFwcGVhcmFuY2UgewoAL3VzZXJfc2hhcGVfJWQgewoAZ3JhcGggRyB7CgBhcnJvd2hlYWQgPSA3ICVzIG5vdCB1c2VkIGJ5IGdyYXBodml6CgBib3hyYWQgPSAwICVzIG5vIHJvdW5kZWQgY29ybmVycyBpbiBncmFwaHZpegoAb3V0IG9mIG1lbW9yeQoAJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkKAEdyYXBodml6IGJ1aWx0IHdpdGhvdXQgYW55IHRyaWFuZ3VsYXRpb24gbGlicmFyeQoAcmVtb3ZlX292ZXJsYXA6IEdyYXBodml6IG5vdCBidWlsdCB3aXRoIHRyaWFuZ3VsYXRpb24gbGlicmFyeQoAJXMgZmlsbCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgZ3BpYyBjYW4gdXNlIGZpbGwgb3IgZmlsbGVkLCAxMHRoIEVkaXRpb24gdXNlcyBmaWxsIG9ubHkKAGJveHJhZD0yLjAgJXMgd2lsbCBiZSByZXNldCB0byAwLjAgYnkgZ3BpYyBvbmx5CgBpbiBjaGVja3BhdGgsIHN0YXJ0IHBvcnQgbm90IGluIGZpcnN0IGJveAoAaW4gY2hlY2twYXRoLCBlbmQgcG9ydCBub3QgaW4gbGFzdCBib3gKACVkICVkICMlMDJ4JTAyeCUwMngKAEhlYXAgb3ZlcmZsb3cKAHRleHQgewogICAgdHRmICIlcyIsCiAgICAiJXMiLCAlLjNmLCAlLjNmCiAgICAgICAgbm9fc2hhZG93CgAlZCAlZCAlZCAlLjBmICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJXp1CgB0b3RhbCBhZGRlZCBzbyBmYXIgPSAlenUKAHJvb3QgPSAlcyBtYXggc3RlcHMgdG8gcm9vdCA9ICVsbHUKAC5wcyAlLjBmKlxuKFNGdS8lLjBmdQoAICBtYXJnaW4gJXUKAE51bWJlciBvZiBpdGVyYXRpb25zID0gJXUKAE51bWJlciBvZiBpbmNyZWFzZXMgPSAldQoAb3ZlcmxhcCBbJXVdIDogJXUKACAlcyBhbGlnbmVkdGV4dAoAbGF5ZXJzIG5vdCBzdXBwb3J0ZWQgaW4gJXMgb3V0cHV0CgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBvdXRlZGdlIGxpc3QKAGFkZF90cmVlX2VkZ2U6IGVtcHR5IGluZWRnZSBsaXN0CgBObyBsaWJ6IHN1cHBvcnQKACVzIC5QUyB3L28gYXJncyBjYXVzZXMgR05VIHBpYyB0byBzY2FsZSBkcmF3aW5nIHRvIGZpdCA4LjV4MTEgcGFwZXI7IERXQiBkb2VzIG5vdAoAJXMgR05VIHBpYyBzdXBwb3J0cyBhIGxpbmV0aGljayB2YXJpYWJsZSB0byBzZXQgbGluZSB0aGlja25lc3M7IERXQiBhbmQgMTB0aCBFZC4gZG8gbm90CgAlcyBHTlUgcGljIHN1cHBvcnRzIGEgYm94cmFkIHZhcmlhYmxlIHRvIGRyYXcgYm94ZXMgd2l0aCByb3VuZGVkIGNvcm5lcnM7IERXQiBhbmQgMTB0aCBFZC4gZG8gbm90CgAgLyVzIHNldF9mb250CgAlcyUuKnMgaXMgbm90IGEgdHJvZmYgZm9udAoAdW5leHBlY3RlZCBjYXNlIGluIGxvY2F0ZV9lbmRwb2ludAoAY2VsbCBzaXplIHRvbyBzbWFsbCBmb3IgY29udGVudAoAdGFibGUgc2l6ZSB0b28gc21hbGwgZm9yIGNvbnRlbnQKACUlRW5kRG9jdW1lbnQKAFVuY2xvc2VkIGNvbW1lbnQKAExhYmVsIGNsb3NlZCBiZWZvcmUgZW5kIG9mIEhUTUwgZWxlbWVudAoAUG9ydHJhaXQKAGZpeGVkIGNlbGwgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoAZml4ZWQgdGFibGUgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoAcG9zIGF0dHJpYnV0ZSBmb3IgZWRnZSAoJXMsJXMpIGRvZXNuJ3QgaGF2ZSAzbisxIHBvaW50cwoAICBnZW5lcmF0ZWQgJWQgY29uc3RyYWludHMKAHNwbGluZXMgYW5kIGNsdXN0ZXIgZWRnZXMgbm90IHN1cHBvcnRlZCAtIHVzaW5nIGxpbmUgc2VnbWVudHMKAG9iamVjdHMKAFdhcm5pbmc6IG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZmxvYXRzCgBmb250IG5hbWUgJXMgY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IG1heSBub3QgYmUgYWNjZXB0ZWQgYnkgc29tZSBQUyB2aWV3ZXJzCgBmb250IG5hbWUgJXMgaXMgbG9uZ2VyIHRoYW4gMjkgY2hhcmFjdGVycyB3aGljaCBtYXkgYmUgcmVqZWN0ZWQgYnkgc29tZSBQUyB2aWV3ZXJzCgBjYW5ub3QgYWxsb2NhdGUgcHMKAHNjYWxlPTEuMCAlcyByZXF1aXJlZCBmb3IgY29tcGFyaXNvbnMKAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMKACVzIERXQiAyIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMKAGFycmF5IHBhY2tpbmc6ICVzICV6dSByb3dzICV6dSBjb2x1bW5zCgBzeW50YXggYW1iaWd1aXR5IC0gYmFkbHkgZGVsaW1pdGVkIG51bWJlciAnJXMnIGluIGxpbmUgJWQgb2YgJXMgc3BsaXRzIGludG8gdHdvIHRva2VucwoAZWRnZSBsYWJlbHMgd2l0aCBzcGxpbmVzPWN1cnZlZCBub3Qgc3VwcG9ydGVkIGluIGRvdCAtIHVzZSB4bGFiZWxzCgBmbGF0IGVkZ2UgYmV0d2VlbiBhZGphY2VudCBub2RlcyBvbmUgb2Ygd2hpY2ggaGFzIGEgcmVjb3JkIHNoYXBlIC0gcmVwbGFjZSByZWNvcmRzIHdpdGggSFRNTC1saWtlIGxhYmVscwoAb3V0IG9mIG1lbW9yeSB3aGVuIHRyeWluZyB0byBhbGxvY2F0ZSAlenUgYnl0ZXMKAGludGVnZXIgb3ZlcmZsb3cgd2hlbiB0cnlpbmcgdG8gYWxsb2NhdGUgJXp1ICogJXp1IGJ5dGVzCgB1cGRhdGU6IG1pc21hdGNoZWQgbGNhIGluIHRyZWV1cGRhdGVzCgBncmFwaCAlcywgY29vcmQgJXMsIGV4cGVjdGVkIGZvdXIgZG91YmxlcwoAbm9kZSAlcywgcG9zaXRpb24gJXMsIGV4cGVjdGVkIHR3byBkb3VibGVzCgBGb3VuZCAlZCBEaUctQ29MYSBib3VuZGFyaWVzCgBJbmNoZXMKACglNHp1KSAlN3p1IG5vZGVzICU3enUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IGNvdWxkIG5vdCBjb25zdHJ1Y3Qgb2JzdGFjbGVzIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHRoZSBib3VuZGluZyBib3hlcyBvZiBzb21lIG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHNvbWUgbm9kZXMgd2l0aCBtYXJnaW4gKCUuMDJmLCUuMDJmKSB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBtZXJnZTI6IGdyYXBoICVzLCByYW5rICVkIGhhcyBvbmx5ICVkIDwgJWQgbm9kZXMKAFNjYW5uaW5nIGdyYXBoICVzLCAlZCBub2RlcwoAV2FybmluZzogbm8gaGFyZC1jb2RlZCBtZXRyaWNzIGZvciAnJXMnLiAgRmFsbGluZyBiYWNrIHRvICdUaW1lcycgbWV0cmljcwoAaW4gZWRnZSAlcyVzJXMKAFVzaW5nICVzOiAlczolcwoARm9ybWF0OiAiJXMiIG5vdCByZWNvZ25pemVkLiBVc2Ugb25lIG9mOiVzCgBMYXlvdXQgdHlwZTogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoAbGF5b3V0ICVzCgAuZnQgJXMKAGJhZCBsYWJlbCBmb3JtYXQgJXMKAGluIHJvdXRlc3BsaW5lcywgZWRnZSBpcyBhIGxvb3AgYXQgJXMKACAgICAgICAlN2Qgbm9kZXMgJTdkIGVkZ2VzICU3enUgY29tcG9uZW50cyAlcwoAaW4gbGFiZWwgb2YgZWRnZSAlcyAlcyAlcwoAICBFZGdlICVzICVzICVzCgBvcnRobyAlcyAlcwoAcG9seWxpbmUgJXMgJXMKAHNwbGluZSAlcyAlcwoAcmVjdGFuZ2xlICglLjBmLCUuMGYpICglLjBmLCUuMGYpICVzICVzCgBpbiBjbHVzdGVyICVzCgAlcyB3YXMgYWxyZWFkeSBpbiBhIHJhbmtzZXQsIGRlbGV0ZWQgZnJvbSBjbHVzdGVyICVzCgAlcyAtPiAlczogdGFpbCBub3QgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgaXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAaGVhZCBjbHVzdGVyICVzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAGhlYWQgbm9kZSAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgAlcyAtPiAlczogaGVhZCBub3QgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgaXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAdGFpbCBjbHVzdGVyICVzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAHRhaWwgbm9kZSAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgBVbmhhbmRsZWQgYWRqdXN0IG9wdGlvbiAlcwoAcmVwb3NpdGlvbiAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB4bGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggdGFpbCBsYWJlbCAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCBsYWJlbCAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCBoZWFkIGxhYmVsICVzCgAvLyoqKiBiZWdpbl9ncmFwaCAlcwoATWF4LiBpdGVyYXRpb25zICglZCkgcmVhY2hlZCBvbiBncmFwaCAlcwoAQ291bGQgbm90IHBhcnNlICJfYmFja2dyb3VuZCIgYXR0cmlidXRlIGluIGdyYXBoICVzCgBpbiBsYWJlbCBvZiBncmFwaCAlcwoAQ3JlYXRpbmcgZWRnZXMgdXNpbmcgJXMKAEFkanVzdGluZyAlcyB1c2luZyAlcwoAJXMgd2hpbGUgb3BlbmluZyAlcwoAZGVyaXZlIGdyYXBoIF9kZ18lZCBvZiAlcwoAIF0gICV6dSB0cnVlICVzCgBdICAlZCB0cnVlICVzCgAgXSAgJXp1IGZhbHNlICVzCgBdICAlZCBmYWxzZSAlcwoAbWFrZVBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAbWFrZUFkZFBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAdXNpbmcgJXMgZm9yIHVua25vd24gc2hhcGUgJXMKACAgb2N0cmVlIHNjaGVtZSAlcwoAY2FuJ3Qgb3BlbiBsaWJyYXJ5IGZpbGUgJXMKAGNhbid0IGZpbmQgbGlicmFyeSBmaWxlICVzCgBCb3VuZGluZ0JveCBub3QgZm91bmQgaW4gZXBzZiBmaWxlICVzCgBjb3VsZG4ndCBvcGVuIGVwc2YgZmlsZSAlcwoAY291bGRuJ3QgcmVhZCBmcm9tIGVwc2YgZmlsZSAlcwoAaW4gbm9kZSAlcwoAc2hhcGVmaWxlIG5vdCBzZXQgb3Igbm90IGZvdW5kIGZvciBlcHNmIG5vZGUgJXMKAGluIGxhYmVsIG9mIG5vZGUgJXMKAGVuZCAlcwoAcmFua2luZzogZmFpbHVyZSB0byBjcmVhdGUgc3Ryb25nIGNvbnN0cmFpbnQgZWRnZSBiZXR3ZWVuIG5vZGVzICVzIGFuZCAlcwoAb29wcywgaW50ZXJuYWwgZXJyb3I6IHVuaGFuZGxlZCBjb2xvciB0eXBlPSVkICVzCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkICVkICVkCiAlZCAlcwoAcm9vdCA9ICVzCgAvLyoqKiB0ZXh0c3BhbjogJXMsIGZvbnRzaXplID0gJS4zZiwgZm9udG5hbWUgPSAlcwoAdHJpZXMgPSAlZCwgbW9kZSA9ICVzCgAvLyoqKiBjb21tZW50OiAlcwoAZm9udG5hbWU6ICIlcyIgcmVzb2x2ZWQgdG86ICVzCgAlJSUlUGFnZU9yaWVudGF0aW9uOiAlcwoAZGVsYXVuYXlfdHJpYW5ndWxhdGlvbjogJXMKAGRlbGF1bmF5X3RyaTogJXMKAGd2cHJpbnRmOiAlcwoAbmVzdGluZyBub3QgYWxsb3dlZCBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKScgaW4gc3R5bGU6ICVzCgB1bm1hdGNoZWQgJygnIGluIHN0eWxlOiAlcwoAJSUlJVRpdGxlOiAlcwoAJXMgVGl0bGU6ICVzCgAjIFRpdGxlOiAlcwoALy8qKiogYmVnaW5fbm9kZTogJXMKAHJlYWxsb2MgZmFpbGVkOiAlcwoAbGliL3BhdGhwbGFuLyVzOiVkOiAlcwoAZ3JpZCglZCwlZCk6ICVzCgBDb3VsZCBub3Qgb3BlbiAiJXMiIGZvciB3cml0aW5nIDogJXMKAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgAgWyV6dV0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAJSUgJXMKACMgJXMKACAgbW9kZSAgICVzCgBjb25qdWdhdGVfZ3JhZGllbnQ6IHVuZXhwZWN0ZWQgbGVuZ3RoIDAgdmVjdG9yCgAlcyB0byBjaGFuZ2UgZHJhd2luZyBzaXplLCBtdWx0aXBseSB0aGUgd2lkdGggYW5kIGhlaWdodCBvbiB0aGUgLlBTIGxpbmUgYWJvdmUgYW5kIHRoZSBudW1iZXIgb24gdGhlIHR3byBsaW5lcyBiZWxvdyAocm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKSBieSBhIHNjYWxlIGZhY3RvcgoAYWRkX3NlZ21lbnQ6IGVycm9yCgAlLjVnICUuNWcgJS41ZyAlc2NvbG9yCgAwIDAgMCBlZGdlY29sb3IKADAuOCAwLjggMC44IHNldHJnYmNvbG9yCgAwIDAgMSBzZXRyZ2Jjb2xvcgoAMSAwIDAgc2V0cmdiY29sb3IKADAgMCAwIHNldHJnYmNvbG9yCgAlZCAlZCBzZXRsYXllcgoALy8qKiogZW5kX2xheWVyCgBVVEYtOCBpbnB1dCB1c2VzIG5vbi1MYXRpbjEgY2hhcmFjdGVycyB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIFBvc3RTY3JpcHQgZHJpdmVyCgBMZXR0ZXIKAC8vKioqIGJlZ2luX2NsdXN0ZXIKAC8vKioqIGVuZF9jbHVzdGVyCgByZW1vdmluZyBlbXB0eSBjbHVzdGVyCgBDZW50ZXIKAFdhcm5pbmc6IG5vIHZhbHVlIGZvciB3aWR0aCBvZiBub24tQVNDSUkgY2hhcmFjdGVyICV1LiBGYWxsaW5nIGJhY2sgdG8gd2lkdGggb2Ygc3BhY2UgY2hhcmFjdGVyCgBiYXNlIHJlZmVyZXIKACUlUGFnZVRyYWlsZXIKACUlVHJhaWxlcgoALy8qKiogYmV6aWVyCgAiJXMiIHdhcyBub3QgZm91bmQgYXMgYSBmaWxlIG9yIGFzIGEgc2hhcGUgbGlicmFyeSBtZW1iZXIKAHN0b3AKACBjdXJ2ZXRvCgBuZXdwYXRoICUuMGYgJS4wZiBtb3ZldG8KACUuMGYgJS4wZiBsaW5ldG8KACBsYXlvdXQ9bmVhdG8KAG5vZGUgJXMgaW4gZ3JhcGggJXMgaGFzIG5vIHBvc2l0aW9uCgAlcyBtYXhwc2h0IGFuZCBtYXhwc3dpZCBoYXZlIG5vIG1lYW5pbmcgaW4gRFdCIDIuMCwgc2V0IHBhZ2UgYm91bmRhcmllcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIGFycm93aGVhZCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgYXJyb3doZWFkID0gNyBtYWtlcyBmaWxsZWQgYXJyb3doZWFkcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIGFycm93aGVhZCBpcyB1bmRlZmluZWQgaW4gRFdCIDIsIGluaXRpYWxseSAxIGluIGdwaWMsIDIgaW4gMTB0aCBFZGl0aW9uCgBtYWpvcml6YXRpb24KAC8vKioqIHBvbHlnb24KAG92ZXJmbG93IHdoZW4gY29tcHV0aW5nIGVkZ2Ugd2VpZ2h0IHN1bQoAc2ZkcCBvbmx5IHN1cHBvcnRzIHN0YXJ0PXJhbmRvbQoAbm9kZSBwb3NpdGlvbnMgYXJlIGlnbm9yZWQgdW5sZXNzIHN0YXJ0PXJhbmRvbQoAY2xvc2VwYXRoIGZpbGwKACBlbGxpcHNlX3BhdGggZmlsbAoAICAlLjBmICUuMGYgY2VsbAoAJWYgJWYgJWYgJWYgY2VsbAoAZ3JhcGggJXMgaXMgZGlzY29ubmVjdGVkLiBIZW5jZSwgdGhlIGNpcmN1aXQgbW9kZWwKAGdyYXBoIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBlZGdlcyBpbiBncmFwaCAlcyBoYXZlIG5vIGxlbiBhdHRyaWJ1dGUuIEhlbmNlLCB0aGUgbWRzIG1vZGVsCgBjaXJjdWl0IG1vZGVsIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdtb2RlPXNnZCwgcmV2ZXJ0aW5nIHRvIHNob3J0cGF0aCBtb2RlbAoAbWRzIG1vZGVsIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdtb2RlPXNnZCwgcmV2ZXJ0aW5nIHRvIHNob3J0cGF0aCBtb2RlbAoAbm9kZSAnJXMnLCBncmFwaCAnJXMnIHNpemUgdG9vIHNtYWxsIGZvciBsYWJlbAoAJXMgRFdCIDIgZG9lc24ndCB1c2UgZmlsbCBhbmQgZG9lc24ndCBkZWZpbmUgZmlsbHZhbAoAWyB7Q2F0YWxvZ30gPDwgL1VSSSA8PCAvQmFzZSAlcyA+PiA+PgovUFVUIHBkZm1hcmsKAFsgL0Nyb3BCb3ggWyVkICVkICVkICVkXSAvUEFHRVMgcGRmbWFyawoAICAvQm9yZGVyIFsgMCAwIDAgXQogIC9BY3Rpb24gPDwgL1N1YnR5cGUgL1VSSSAvVVJJICVzID4+CiAgL1N1YnR5cGUgL0xpbmsKL0FOTiBwZGZtYXJrCgB0cm91YmxlIGluIGluaXRfcmFuawoAbGluZXRoaWNrID0gMDsgb2xkbGluZXRoaWNrID0gbGluZXRoaWNrCgAgc2V0bGluZXdpZHRoCgBnc2F2ZQolZCAlZCAlZCAlZCBib3hwcmltIGNsaXAgbmV3cGF0aAoAZ3NhdmUgJWcgJWcgdHJhbnNsYXRlIG5ld3BhdGgKAC8vKioqIGVuZF9ncmFwaAoAbGF5b3V0IGF0dHJpYnV0ZSBpcyBpbnZhbGlkIGV4Y2VwdCBvbiB0aGUgcm9vdCBncmFwaAoAaW4gY2hlY2twYXRoLCBib3hlcyAlenUgYW5kICV6dSBkb24ndCB0b3VjaAoAbWVyZ2Vfb25ld2F5IGdsaXRjaAoAJXMgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSBpbiB0aGlzIGRyYXdpbmcKAE5vZGUgbm90IGFkamFjZW50IHRvIGNlbGwgLS0gQWJvcnRpbmcKAGluY29tcGFyYWJsZSBzZWdtZW50cyAhISAtLSBBYm9ydGluZwoAQWx0ZXJuYXRpdmVseSwgY29uc2lkZXIgcnVubmluZyBuZWF0byB1c2luZyAtR3BhY2s9dHJ1ZSBvciBkZWNvbXBvc2luZwoAbGFiZWxfc2NoZW1lID0gJWQgPiA0IDogaWdub3JpbmcKAGd2cmVuZGVyX3NldF9zdHlsZTogdW5zdXBwb3J0ZWQgc3R5bGUgJXMgLSBpZ25vcmluZwoAQXJyb3cgdHlwZSAiJXMiIHVua25vd24gLSBpZ25vcmluZwoAZmRwIGRvZXMgbm90IHN1cHBvcnQgc3RhcnQ9c2VsZiAtIGlnbm9yaW5nCgAlcyBhdHRyaWJ1dGUgdmFsdWUgbXVzdCBiZSAxIG9yIDIgLSBpZ25vcmluZwoATW9yZSB0aGFuIDIgY29sb3JzIHNwZWNpZmllZCBmb3IgYSBncmFkaWVudCAtIGlnbm9yaW5nIHJlbWFpbmluZwoAYXMgcmVxdWlyZWQgYnkgdGhlIC1uIGZsYWcKAGJiWyVzXSAlLjVnICUuNWcgJS41ZyAlLjVnCgAvcGF0aGJveCB7CiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL1ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCiB9IGRlZgovZGJnc3RhcnQgeyBnc2F2ZSAlLjVnICUuNWcgdHJhbnNsYXRlIH0gZGVmCi9hcnJvd2xlbmd0aCAxMCBkZWYKL2Fycm93d2lkdGggYXJyb3dsZW5ndGggMiBkaXYgZGVmCi9hcnJvd2hlYWQgewogICAgZ3NhdmUKICAgIHJvdGF0ZQogICAgY3VycmVudHBvaW50CiAgICBuZXdwYXRoCiAgICBtb3ZldG8KICAgIGFycm93bGVuZ3RoIGFycm93d2lkdGggMiBkaXYgcmxpbmV0bwogICAgMCBhcnJvd3dpZHRoIG5lZyBybGluZXRvCiAgICBjbG9zZXBhdGggZmlsbAogICAgZ3Jlc3RvcmUKfSBiaW5kIGRlZgovbWFrZWFycm93IHsKICAgIGN1cnJlbnRwb2ludCBleGNoIHBvcCBzdWIgZXhjaCBjdXJyZW50cG9pbnQgcG9wIHN1YiBhdGFuCiAgICBhcnJvd2hlYWQKfSBiaW5kIGRlZgovcG9pbnQgeyAgICBuZXdwYXRoICAgIDIgMCAzNjAgYXJjIGZpbGx9IGRlZi9tYWtldmVjIHsKICAgIC9ZIGV4Y2ggZGVmCiAgICAvWCBleGNoIGRlZgogICAgL3kgZXhjaCBkZWYKICAgIC94IGV4Y2ggZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggWSBsaW5ldG8gc3Ryb2tlCiAgICBYIFkgbW92ZXRvCiAgICB4IHkgbWFrZWFycm93Cn0gZGVmCgAvcGF0aGJveCB7CiAgICAvWCBleGNoIG5lZyAlLjVnIHN1YiBkZWYKICAgIC9ZIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoIG5lZyAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggeSBsaW5ldG8KICAgIFggWSBsaW5ldG8KICAgIHggWSBsaW5ldG8KICAgIGNsb3NlcGF0aCBzdHJva2UKfSBkZWYKACUhUFMtQWRvYmUtMi4wCi9ub2RlIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIGZpbGwKfSBkZWYKL2NlbGwgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICAveSBleGNoIGRlZgogIC94IGV4Y2ggZGVmCiAgbmV3cGF0aAogIHggeSBtb3ZldG8KICB4IFkgbGluZXRvCiAgWCBZIGxpbmV0bwogIFggeSBsaW5ldG8KICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgB9IGJpbmQgZGVmCgAuUFMgJS41ZiAlLjVmCgBvdmVybGFwOiAlcyB2YWx1ZSAlZCBzY2FsaW5nICUuMDRmCgAgIGJlYXV0aWZ5X2xlYXZlcyAlZCBub2RlIHdlaWdodHMgJWQgcm90YXRpb24gJS4wM2YKACAgcmVwdWxzaXZlIGV4cG9uZW50OiAlLjAzZgoAICBLIDogJS4wM2YgQyA6ICUuMDNmCgAlcyAlLjNmCgAKaW50ZXJzZWN0aW9uIGF0ICUuM2YgJS4zZgoAICAgIHNjYWxlICUuM2YKAHRvcnVzIHsgJS4zZiwgJS4zZgoAICAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPiwgJS4zZgoAIGluICVzIC0gc2V0dGluZyB0byAlLjAyZgoAY2lyY2xlICVzICUuMGYsJS4wZiwlLjBmCgByZWN0ICVzICUuMGYsJS4wZiAlLjBmLCUuMGYKACVkICVkICVkICUuMGYgJWQgJWQgJWQgJWQgJWQgJS4zZiAlZCAlLjRmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZgoAICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYKACUlJSVQYWdlOiAxIDEKJSUlJVBhZ2VCb3VuZGluZ0JveDogJS4wZiAlLjBmICUuMGYgJS4wZgoAcG9zWyV6dV0gJS4wZiAlLjBmCgAubnIgU0YgJS4wZgpzY2FsZXRoaWNrbmVzcyA9ICUuMGYKACVzIHNhdmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoubnIgLlMgXG4oLnMKLm5yIERGIFxuKC5mCgBzaG93cGFnZQolJSUlVHJhaWxlcgolJSUlQm91bmRpbmdCb3g6ICUuZiAlLmYgJS5mICUuZgoAYWRkaW5nICV6dSBpdGVtcywgdG90YWwgYXJlYSA9ICVmLCB3ID0gJWYsIGFyZWEvdz0lZgoAZ2FwPSVmLCVmCgAgIGFzcGVjdCAlZgoAYSAlZiBiICVmIGMgJWYgZCAlZiByICVmCgBtb2RlbCAlZCBzbWFydF9pbml0ICVkIHN0cmVzc3d0ICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgBTb2x2aW5nIG1vZGVsICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgAlcyBjb29yZCAlLjVnICUuNWcgaHQgJWYgd2lkdGggJWYKAHJlYyAlZiAlZiAlZiAlZgoAJXMgOiAlZiAlZiAlZiAlZgoAJXMgOiAlZiAlZgoAbWF4cHNodCA9ICVmCm1heHBzd2lkID0gJWYKAG1kc01vZGVsOiBkZWx0YSA9ICVmCgAgcjEgJWYgcjIgJWYKAFBhY2tpbmc6IGNvbXB1dGUgZ3JpZCBzaXplCgBnc2F2ZQoAJSVFbmRDb21tZW50cwpzYXZlCgBVbnJlY29nbml6ZWQgY2hhcmFjdGVyICclYycgKCVkKSBpbiBzaWRlcyBhdHRyaWJ1dGUKAEltYWdlcyB1bnN1cHBvcnRlZCBpbiAiYmFja2dyb3VuZCIgYXR0cmlidXRlCgAlcyBHTlUgcGljIHZzLiAxMHRoIEVkaXRpb24gZFwoZSd0ZW50ZQoAcmVzZXQgJXMgc2V0IHRvIGtub3duIHN0YXRlCgAlZyAlZyBzZXRfc2NhbGUgJWQgcm90YXRlICVnICVnIHRyYW5zbGF0ZQoAJWYgJWYgdHJhbnNsYXRlCgAlZCAlZCB0cmFuc2xhdGUKAC8vKioqIGVsbGlwc2UKAFVucmVjb2duaXplZCBvdmVybGFwIHZhbHVlICIlcyIgLSB1c2luZyBmYWxzZQoAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQoAJXM6IHZzbnByaW50ZiBmYWlsdXJlCgBlbmRwYWdlCnNob3dwYWdlCmdyZXN0b3JlCgBlbmQKcmVzdG9yZQoAbGF5b3V0IHdhcyBub3QgZG9uZQoATGF5b3V0IHdhcyBub3QgZG9uZQoALy8qKiogcG9seWxpbmUKAHRyeWluZyB0byBkZWxldGUgYSBub24tbGluZQoAIyBlbmQgb2YgRklHIGZpbGUKAFNpbmdsZQoAcmVuZGVyZXIgZm9yICVzIGlzIHVuYXZhaWxhYmxlCgBkeW5hbWljIGxvYWRpbmcgbm90IGF2YWlsYWJsZQoAJS4wZiAlLjBmIGxpbmV0byBzdHJva2UKAGNsb3NlcGF0aCBzdHJva2UKACBlbGxpcHNlX3BhdGggc3Ryb2tlCgAvLyoqKiBiZWdpbl9lZGdlCgAvLyoqKiBlbmRfZWRnZQoAbG9zdCAlcyAlcyBlZGdlCgBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIHZpcnR1YWwgd2VpZ2h0IG9mIGVkZ2UKAGFkZF90cmVlX2VkZ2U6IG1pc3NpbmcgdHJlZSBlZGdlCgBpbiByb3V0ZXNwbGluZXMsIGNhbm5vdCBmaW5kIE5PUk1BTCBlZGdlCgBzaG93cGFnZQoAJWQgJWQgJWQgYmVnaW5wYWdlCgAvLyoqKiBiZWdpbl9wYWdlCgAvLyoqKiBlbmRfcGFnZQoARmlsZW5hbWUgIiVzIiBpcyB1bnNhZmUKAGxhYmVsOiBhcmVhIHRvbyBsYXJnZSBmb3IgcnRyZWUKAC8vKioqIGVuZF9ub2RlCgBVc2luZyBkZWZhdWx0IGNhbGN1bGF0aW9uIGZvciByb290IG5vZGUKAGNvbnRhaW5fbm9kZXMgY2x1c3QgJXMgcmFuayAlZCBtaXNzaW5nIG5vZGUKACVmICVmICVmICVmIG5vZGUKADw8IC9QYWdlU2l6ZSBbJWQgJWRdID4+IHNldHBhZ2VkZXZpY2UKAGluIGNoZWNrcGF0aCwgYm94ICV6dSBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAaW4gY2hlY2twYXRoLCBib3ggMCBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAY2x1c3RlciBuYW1lZCAlcyBub3QgZm91bmQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlcyVzIHVuc3VwcG9ydGVkCgBjbHVzdGVyIGN5Y2xlICVzIC0tICVzIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAbGF5b3V0IGFib3J0ZWQKAHBhZ2VkaXI9JXMgaWdub3JlZAoAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgYXR0cmlidXRlICJtb2RlbCIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAc3RhcnQ9MCBub3Qgc3VwcG9ydGVkIHdpdGggbW9kZT1zZWxmIC0gaWdub3JlZAoAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgUk9XUyAtIGlnbm9yZWQKAFVua25vd24gdmFsdWUgJXMgZm9yIENPTFVNTlMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJS4qcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiBpbiBURCAtIGlnbm9yZWQKAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDT0xTUEFOIHZhbHVlIGNhbm5vdCBiZSAwIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAaW4gcm91dGVzcGxpbmVzLCBQc2hvcnRlc3RwYXRoIGZhaWxlZAoAaW4gcm91dGVzcGxpbmVzLCBQcm91dGVzcGxpbmUgZmFpbGVkCgAjIHBsdWdpbiBsb2FkaW5nIG9mIGRlcGVuZGVuY3kgIiUuKnMiIGZhaWxlZAoAJXM6JWQ6IGNsYWltZWQgdW5yZWFjaGFibGUgY29kZSB3YXMgcmVhY2hlZAoAIyB1bnN1Y2Nlc3NmdWwgcGx1Z2luIGxvYWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBuc2l6ZXNjYWxlPSVmLGl0ZXJhdGlvbnM9JWQKAGN0cmwtPm92ZXJsYXA9JWQKACVzICVkIG5vZGVzICVkIGVkZ2VzIG1heGl0ZXI9JWQgYmFsYW5jZT0lZAoALy8qKiogYmVnaW5fbGF5ZXI6ICVzLCAlZC8lZAoAZGVnZW5lcmF0ZSBjb25jZW50cmF0ZWQgcmFuayAlcywlZAoAbWluY3Jvc3M6IHBhc3MgJWQgaXRlciAlZCB0cnlpbmcgJWQgY3VyX2Nyb3NzICVkIGJlc3RfY3Jvc3MgJWQKACAgbWF4IGxldmVscyAlZAoACSVzICVkCgAgIEJhcm5lcy1IdXR0IGNvbnN0YW50ICUuMDNmIHRvbGVyYW5jZSAgJS4wM2YgbWF4aXRlciAlZAoAZ3Z3cml0ZV9ub196IHByb2JsZW0gJWQKACAgcXVhZHRyZWUgc2l6ZSAlZCBtYXhfbGV2ZWwgJWQKAHJlYnVpbGRfdmxpc3RzOiBsZWFkIGlzIG51bGwgZm9yIHJhbmsgJWQKAHJlYnVpbGRfdmxpc3RzOiByYW5rIGxlYWQgJXMgbm90IGluIG9yZGVyICVkIG9mIHJhbmsgJWQKACAgc21vb3RoaW5nICVzIG92ZXJsYXAgJWQgaW5pdGlhbF9zY2FsaW5nICUuMDNmIGRvX3Nocmlua2luZyAlZAoAICBjb29saW5nICUuMDNmIHN0ZXAgc2l6ZSAgJS4wM2YgYWRhcHRpdmUgJWQKAFVuc3VwcG9ydGVkIGNoYXJzZXQgdmFsdWUgJWQKAGluIHJvdXRlc3BsaW5lcywgaWxsZWdhbCB2YWx1ZXMgb2YgcHJldiAlZCBhbmQgbmV4dCAlZCwgbGluZSAlZAoAICBlZGdlX2xhYmVsaW5nX3NjaGVtZSAlZAoAYWdkaWN0b2Y6IHVua25vd24ga2luZCAlZAoAICByYW5kb20gc3RhcnQgJWQgc2VlZCAlZAoAJWQgJWQgJWQgJS4wZiAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkCgAlJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJSUlJVBhZ2U6ICVkICVkCgAlcyBuby4gY2VsbHMgJWQgVyAlZCBIICVkCgBNYXhyYW5rID0gJWQsIG1pbnJhbmsgPSAlZAoAc3RlcCBzaXplID0gJWQKACUlJSVQ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cmFuY2UgMC4wMQoAICAgIHRvbGVyYW5jZSAwLjEKACUlUGFnZXM6IDEKACAgICAgICAgZGlmZnVzZUNvbG9yIDEgMSAxCgAxMDAuMDAKACBFUFNGLTMuMAoAJXMgYm94cmFkIGlzIG5vdyAwLjAgaW4gZ3BpYywgZWxzZSBpdCByZW1haW5zIDIuMAoAc3BoZXJlIHs8JTkuM2YsICU5LjNmLCAlOS4zZj4sIDEuMAoAV2FybmluZzogbm8gdmFsdWUgZm9yIHdpZHRoIG9mIEFTQ0lJIGNoYXJhY3RlciAldS4gRmFsbGluZyBiYWNrIHRvIDAKAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogJXMgJXMgcmFuayAlZCBpID0gJWQgYW4gPSAwCgBjb25jZW50cmF0ZT10cnVlIG1heSBub3Qgd29yayBjb3JyZWN0bHkuCgBObyBsaWJ6IHN1cHBvcnQuCgB0d29waTogdXNlIG9mIHdlaWdodD0wIGNyZWF0ZXMgZGlzY29ubmVjdGVkIGNvbXBvbmVudC4KAHRoZSBncmFwaCBpbnRvIGNvbm5lY3RlZCBjb21wb25lbnRzLgoAT3J0aG9nb25hbCBlZGdlcyBkbyBub3QgY3VycmVudGx5IGhhbmRsZSBlZGdlIGxhYmVscy4gVHJ5IHVzaW5nIHhsYWJlbHMuCgBndlJlbmRlckpvYnMgJXM6ICUuMmYgc2Vjcy4KAG1pbmNyb3NzICVzOiAlZCBjcm9zc2luZ3MsICUuMmYgc2Vjcy4KACVzIGlzIG5vdCBhIGtub3duIGNvbG9yLgoAaXMgaW5hcHByb3ByaWF0ZS4gUmV2ZXJ0aW5nIHRvIHRoZSBzaG9ydGVzdCBwYXRoIG1vZGVsLgoAaXMgdW5kZWZpbmVkLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBVbmFibGUgdG8gcmVjbGFpbSBib3ggc3BhY2UgaW4gc3BsaW5lIHJvdXRpbmcgZm9yIGVkZ2UgIiVzIiAtPiAiJXMiLiBTb21ldGhpbmcgaXMgcHJvYmFibHkgc2VyaW91c2x5IHdyb25nLgoARXJyb3IgZHVyaW5nIGNvbnZlcnNpb24gdG8gIlVURi04Ii4gUXVpdGluZy4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQuCgBncmFkaWVudCBwZW4gY29sb3JzIG5vdCB5ZXQgc3VwcG9ydGVkLgoAICBpbml0Q01halZQU0MgZG9uZTogJWQgZ2xvYmFsIGNvbnN0cmFpbnRzIGdlbmVyYXRlZC4KAFRoZSBjaGFyYWN0ZXIgJyVjJyBhcHBlYXJzIGluIGJvdGggdGhlIGxheWVyc2VwIGFuZCBsYXllcmxpc3RzZXAgYXR0cmlidXRlcyAtIGxheWVybGlzdHNlcCBpZ25vcmVkLgoAdGhlIGFzcGVjdCBhdHRyaWJ1dGUgaGFzIGJlZW4gZGlzYWJsZWQgZHVlIHRvIGltcGxlbWVudGF0aW9uIGZsYXdzIC0gYXR0cmlidXRlIGlnbm9yZWQuCgBUaGUgbGF5ZXJzZWxlY3QgYXR0cmlidXRlICIlcyIgZG9lcyBub3QgbWF0Y2ggYW55IGxheWVyIHNwZWNpZmVkIGJ5IHRoZSBsYXllcnMgYXR0cmlidXRlIC0gaWdub3JlZC4KACV6dSBvdXQgb2YgJXp1IGxhYmVscyBwb3NpdGlvbmVkLgoAJXp1IG91dCBvZiAlenUgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAgIGdlbmVyYXRlIGVkZ2UgY29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgTm9uLW92ZXJsYXAgQ29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgRWRnZSBDb25zdHJhaW50cy4uLgoAR2VuZXJhdGluZyBEaUctQ29MYSBFZGdlIENvbnN0cmFpbnRzLi4uCgBSZW1vdmluZyBvdmVybGFwcyBhcyBwb3N0cHJvY2Vzcy4uLgoALi4uICUuKnMlLipzIC4uLgoARWRnZSBsZW5ndGggJWYgbGFyZ2VyIHRoYW4gbWF4aW11bSAlZCBhbGxvd2VkLgpDaGVjayBmb3Igb3ZlcndpZGUgbm9kZShzKS4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQgZm9yIG5vZGUgJyVzJy4KAHBvbHlnb24geyAlenUsCgBzcGhlcmVfc3dlZXAgewogICAgJXMKICAgICV6dSwKACJkaXJlY3RlZCI6ICVzLAoAIndpZHRoIjogJS4wM2YsCgAic2l6ZSI6ICUuMDNm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ICUuMmYgJS4yZiAtaW1hZ2UgInBob3RvXyVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2UgZmlsZT0iJXMiCgBmaWxlIGxvYWRpbmcgaXMgZGlzYWJsZWQgYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgY29udGFpbnMgU0VSVkVSX05BTUU9IiVzIgoAQ291bGQgbm90IHBhcnNlIHhkb3QgIiVzIgoATm8gbG9hZGltYWdlIHBsdWdpbiBmb3IgIiVzIgoAIFslenVdICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcCAiJXMiCgBmb250bmFtZTogdW5hYmxlIHRvIHJlc29sdmUgIiVzIgoARHVwbGljYXRlIGNsdXN0ZXIgbmFtZSAiJXMiCgB1bnJlY29nbml6ZWQgYXBpIG5hbWUgIiVzIgoAaW1hZ2UgY3JlYXRlIHBob3RvICJwaG90b18lcyIgLWZpbGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgc2hhcGVmaWxlPSIlcyIgZm9yIG5vZGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2U9IiVzIiBmb3Igbm9kZSAiJXMiCgBub2RlICIlcyIgaXMgY29udGFpbmVkIGluIHR3byBub24tY29tcGFyYWJsZSBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgBFcnJvcjogbm9kZSAiJXMiIGJlbG9uZ3MgdG8gdHdvIG5vbi1uZXN0ZWQgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAICAiJXMiCgAjaW5jbHVkZSAiY29sb3JzLmluYyIKI2luY2x1ZGUgInRleHR1cmVzLmluYyIKI2luY2x1ZGUgInNoYXBlcy5pbmMiCgBVbmtub3duIEhUTUwgZWxlbWVudCA8JXM+IG9uIGxpbmUgJWx1IAoAJXMgaW4gbGluZSAlbHUgCgBzY2FsZSBieSAlZywlZyAKAGNvbXByZXNzICVnIAoATGF5b3V0IHdhcyBub3QgZG9uZS4gIE1pc3NpbmcgbGF5b3V0IHBsdWdpbnM/IAoAiVBORw0KGgoAJSUhUFMtQWRvYmUtMi4wCiUlJSVCb3VuZGluZ0JveDogKGF0ZW5kKQovcG9pbnQgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICBuZXdw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BgAAAAAAAACamZmZmZnpP98AAADgAAAABwBBzoEFCwvwP+EAAADiAAAACABB5oEFC6IC4D/jAAAA5AAAAA4AAABsbnJzb2xpZAAAc2V0bGluZXdpZHRoADEAAAAA73UAACTDAABQiwAAAAAAAAgArv/RAAoArv+u/wsArv+u/67/rv+u/67/rv+u/wUA0QCu/9EA0QDRANEA0QDRANEA0QCu//v/rv8OAOz/rv+u/67/rv/RANEA0QDRANEADQAlAAwAQgAQAFAAEwBtAHsAFACYAA8ApgDDAK7/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/xcArv93AK7/BwAuAK7/JgCu/xcAEQAjAK7/DQCu/67/rv+u/zoArv+u/zUArv+u/67/KACu/wcArv87AEUArv9IAK7/rv+u/67/rv8AQZGEBQvBBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygAAAAAAAAAAAICAgICAhAMWQEAH1AIAwcSExRXFhcIC2kMHwoFDA4pESsPLRAvMCAyBjQ1GxwdHgsMISIjJCUmJygMGBkXBAobHBogKgohIiMkJSYnKAwKDlMKLFgxWFhYWFhYDBscDy5YMyEiIyQlJicoGxz/U///ISIjJCUmJygM//8F////CRT//////wwbHP8QFRYhIiMkJSYnKBsc/////yEiIyQlJicoDP8SExQRFhf///////8MGxz///8SISIjJCUmJygbHP////8hIiMkJSYnKAz///////8T////////DBsc/////yEiIyQlJicoGxz/////ISIjJCUmJygSExQVFhcYGf///////////yMkJSYnGxITFBYXIjZoAR84ViEgAhsbG14bGzc5cDbSwk8EPCJHIj8iRCIiWCJlIiIFBl9gOQQHCAkKCwwNDgRmZ11qbQUGb1g7cQcICQoLDA0OBHI8W3M+YUYbEhMUFhcEBQY/QWJJBwgJCgsMDQ4FBgBcAAAHCAkKCwwNDgQAAE8AAABTQgAAAAAABAUGAERUVQcICQoLDA0OBQYAAAAABwgJCgsMDQ4EACosLkcxMwAAAAAAAAQFBgAAAEoHCAkKCwwNDgUGAAAAAAcICQoLDA0OBAAAAAAAAEwAAAAAAAAEBQYAAAAABwgJCgsMDQ4FBgAAAAAHCAkKCwwNDikrLS8wMjQ1AEHbigULLikrLTAyAAQvACQjABIUFhocHiAYAAUHLy8vAC8vAAAJCCgAAAEiAgYAAAAAAAgAQZaLBQs+JQMmEwopFQsqFw4tGREbDCsdDSwfDyEQADMAMAAvQwAxAC8ANS4nQjJBADo4ADw0RQA2AEAAAD8ARDc7OT0AQeGLBQtFAgMDAQECAQEBAwMDAwMDAwMBAQEBAQEBAQEBAQEBAQEBAgEBAgAGAQMDAwMDAQABAgMABAECAwAEAAQABAADAgECAQIBAEGxjAULRSkqKiorLCwtLS0tLS0tLS0tLi8wMTIzNDU2Nzg5Ojs8PT4+Pz9BQEJCQkJCQkNDRERERkVHR0dJSEpIS0hMSE1NTk5PTwBBgI0FC40Brv+u//z/6AD2////GgAAACcAAQAyAK7/rv8CACQAAwAvAK7/rv+u/67/rv/+/5QArv8JABsArv+8/67/rv+v/67/rv+u/67/rv+u/67/AAD/Aw8QESM6JD0lQBVDJkUnSBhLGU0aKBxOHR5QUVJZWmxrbmNkV2kASAAAACgAAAAYAAAAOAAAABgAAAAIAEGmjgULCfC/AAAAAAAAAQBBuI4FCw1pbnZpcwAAZmlsbGVkAEHQjgULswImGgAA91AAAJk1AAAkCwAADAAAAAQAAAAGAAAAAgAAAAMAAAABAAAACQAAAAgAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEQAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAA3KECAEGOkQULhQigQP////////////////////////////////////////////////////////////////////////////////////8AAqoCRAMABAAEqgY5BnEBqgKqAgAEgwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEOQI5AoMEgwSDBI0DXgfHBVYFVgXHBeMEcwTHBccFqgIdA8cF4wQdB8cFxwVzBMcFVgVzBOMExwXHBY0HxwXHBeMEqgI5AqoCwQMABKoCjQMABI0DAASNA6oCAAQABDkCOQIABDkCOQYABAAEAAQABKoCHQM5AgAEAATHBQAEAASNA9cDmgHXA1QE////////////////////////////////////////////////////////////////////////////////////////AAKqAnEEAAQABAAIqgY5AqoCqgIABI8EAAKqAgACOQIABAAEAAQABAAEAAQABAAEAAQABKoCqgKPBI8EjwQABHEHxwVWBccFxwVWBeMEOQY5Bh0DAAQ5BlYFjQfHBTkG4wQ5BscFcwRWBccFxwUACMcFxwVWBaoCOQKqAqYEAASqAgAEcwSNA3MEjQOqAgAEcwQ5AqoCcwQ5AqoGcwQABHMEcwSNAx0DqgJzBAAExwUABAAEjQMnA8MBJwMpBP///////////////////////////////////////////////////////////////////////////////////////wACqgJcAwAEAASqBjkGtgGqAqoCAARmBQACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAASqAqoCZgVmBWYFAARcB+ME4wRWBccF4wTjBMcFxwWqAo0DVgVzBKoGVgXHBeMExwXjBAAEcwTHBeMEqgbjBHMEcwQdAzkCHQNgAwAEqgIABAAEjQMABI0DOQIABAAEOQI5Ao0DOQLHBQAEAAQABAAEHQMdAzkCAASNA1YFjQONAx0DMwMzAjMDVAT///////////////////////////////////////////////////////////////////////////////////////8AAh0DcQQABAAEqgY5BjkCqgKqAgAEjwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEqgKqAo8EjwSPBAAEqAZWBVYFVgXHBVYFVgXHBTkGHQMABFYF4wQdB8cFxwXjBMcFVgVzBOMExwVWBR0HVgXjBOMEqgI5AqoCjwQABKoCAAQABI0DAASNA6oCAARzBDkCOQIABDkCOQZzBAAEAAQABB0DHQM5AnMEjQNWBQAEjQMdA8kCwwHJAo8E//8EogIAQZ6ZBQuFCKBA/////////////////////////////////////////////////////////////////////////////////////zkCOQLXAnMEcwQdB1YFhwGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwQ5AjkCrASsBKwEcwQfCFYFVgXHBccFVgXjBDkGxwU5AgAEVgVzBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wQ5AjkCOQLBA3MEqgJzBHMEAARzBHMEOQJzBHMExwHHAQAExwGqBnMEcwRzBHMEqgIABDkCcwQABMcFAAQABAAErAIUAqwCrAT///////////////////////////////////////////////////////////////////////////////////////85AqoCywNzBHMEHQfHBecBqgKqAh0DrAQ5AqoCOQI5AnMEcwRzBHMEcwRzBHMEcwRzBHMEqgKqAqwErASsBOMEzQfHBccFxwXHBVYF4wQ5BscFOQJzBMcF4wSqBscFOQZWBTkGxwVWBeMExwVWBY0HVgVWBeMEqgI5AqoCrARzBKoCcwTjBHME4wRzBKoC4wTjBDkCOQJzBDkCHQfjBOME4wTjBB0DcwSqAuMEcwQ5BnMEcwQABB0DPQIdA6wE////////////////////////////////////////////////////////////////////////////////////////OQI5AtcCcwRzBB0HVgWHAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBDkCOQKsBKwErARzBB8IVgVWBccFxwVWBeMEOQbHBTkCAARWBXMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBDkCOQI5AsEDcwSqAnMEcwQABHMEcwQ5AnMEcwTHAccBAATHAaoGcwRzBHMEcwSqAgAEOQJzBAAExwUABAAEAASsAhQCrAKsBP///////////////////////////////////////////////////////////////////////////////////////zkCqgLLA3MEcwQdB8cF5wGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwSqAqoCrASsBKwE4wTNB8cFxwXHBccFVgXjBDkGxwU5AnMExwXjBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wSqAjkCqgKsBHMEqgJzBOMEcwTjBHMEqgLjBOMEOQI5AnMEOQIdB+ME4wTjBOMEHQNzBKoC4wRzBDkGcwRzBAAEHQM9Ah0DrAT//ziiAgBBrqEFC4UIoED/////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP///////////////////////////////////////////////////////////////////////////////////////80EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQT////////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E////////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP//YKICAEG9qQULhghAj0AAAP///////////////////////////////wIB////////////////////////////////////////////////AgHkAIgBWAJYAqIDtQLdAD0BPQHCAVgC5ACoAeQAGwFYAlgCWAJYAlgCWAJYAlgCWAJYAuQA5ABYAlgCWAK7AbID2QKkAqEC5gJHAiQC1gL5AgEBRAFxAh8CVwPkAv8CeQL/Ap0CZwJaAtgCsQJNBIoCVAJNAjsBGwE7AVgC9AH0ARICRwLPAUcCFAJNAUoCOALoAOwA9AEoAVgDOAIsAkcCRwJmAeEBXgExAgMCSQMNAgICzwFgAQkBYAFYAv//AAD///////////////////////////////8PAf///////////////////////////////////////////////w8B+ADAAVgCWAKxA9YC8wBmAWYBxQFYAvgAsgH4ADkBWAJYAlgCWAJYAlgCWAJYAlgCWAL4APgAWAJYAlgCywG2A+gCsAKoAvoCVQIyAuACBQMaAWIBmQIyAmQD7AIRA4wCEQOuAncCbQLiAskCWQSgAmoCXQJiATkBYgFYAvQB9AEjAlgC2AFYAh4CbAFcAkkC/wADARgCPwFtA0kCQAJYAlgCiAHoAYABQwIPAlUDIgIOAtoBhwEgAYcBWAL//wAA////////////////////////////////AgH///////////////////////////////////////////////8CAeQAiAFYAlgCogO1At0APQE9AcIBWALkAKgB5AAbAVgCWAJYAlgCWAJYAlgCWAJYAlgC5ADkAFgCWAJYArsBsgPZAqQCoQLmAkcCJALWAvkCAQFEAXECHwJYA+MC/wJ5Av8CnQJnAloC2AKwAk0EigJUAk0COwEbATsBWAL0AfQBEgJHAs8BRwIUAk0BSgI4AugA7AD0ASgBWAM4AiwCRwJHAmYB4QFeATECAwJJAw0CAgLPAWABCQFgAVgC//8AAP///////////////////////////////w8B////////////////////////////////////////////////DwH4AMABWAJYArED1gLzAGYBZgHFAVgC+ACyAfgAOQFYAlgCWAJYAlgCWAJYAlgCWAJYAvgA+ABYAlgCWALLAbYD6AKwAqgC+gJVAjIC4AIFAxoBYgGYAjICZQPrAhEDjAIRA64CdwJtAuICyQJZBKACagJdAmIBOQFiAVgC9AH0ASMCWALYAVgCHgJsAVwCSQL/AAMBGAI/AW0DSQJAAlgCWAKIAegBgAFDAg8CVQMiAg4C2gGHASABhwFYAv//aKICAEHOsQULhQigQP////////////////////////////////////////////////////////////////////////////////////+LAjUDrgO0BhcFmgc9BjMCHwMfAwAEtAaLAuMCiwKyAhcFFwUXBRcFFwUXBRcFFwUXBRcFsgKyArQGtAa0Bj8EAAh5BX0FlgUpBg4FmgQzBgQGXAJcAj8FdQTnBvwFTAbTBEwGjwUUBeME2wV5BekHewXjBHsFHwOyAh8DtAYABAAE5wQUBWYEFAXsBNECFAUSBTkCOQKiBDkCywcSBeUEFAUUBUoDKwQjAxIFvASLBrwEvAQzBBcFsgIXBbQG////////////////////////////////////////////////////////////////////////////////////////yQKmAysEtAaRBQQI+gZzAqgDqAMvBLQGCgNSAwoD7AKRBZEFkQWRBZEFkQWRBZEFkQWRBTMDMwO0BrQGtAakBAAIMQYZBt8FpAZ3BXcFkQayBvoC+gIzBhkF9geyBs0G3QXNBikGwwV1BX8GMQbTCCsGywXNBagD7AKoA7QGAAQABGYFugW+BLoFbQV7A7oFsgW+Ar4CUgW+AlYIsgV/BboFugXyA8ME0wOyBTcFZAcpBTcFqASyBewCsgW0Bv///////////////////////////////////////////////////////////////////////////////////////4sCNQOuA7QGFwWaBz0GMwIfAx8DAAS0BosC4wKLArICFwUXBRcFFwUXBRcFFwUXBRcFFwWyArICtAa0BrQGPwQACHkFfQWWBSkGDgWaBDMGBAZcAlwCPwV1BOcG/AVMBtMETAaPBRQF4wTbBXkF6Qd7BeMEewUfA7ICHwO0BgAEAATnBBQFZgQUBewE0QIUBRIFOQI5AqIEOQLLBxIF5QQUBRQFSgMrBCMDEgW8BIsGvAS8BDMEFwWyAhcFtAb////////////////////////////////////////////////////////////////////////////////////////JAqYDKwSRBZEFBAj6BnMCqAOoAy8EtAYKA1IDCgPsApEFkQWRBZEFkQWRBZEFkQWRBZEFMwMzA7QGtAa0BqQEAAgxBhkG3wWkBncFdwWRBrIG+gL6AjMGGQX2B7IGzQbdBc0GKQbDBXUFfwYxBtMIKwbLBc0FqAPsAqgDtAYABAAEZgW6Bb4EugVtBXsDugWyBb4CvgJSBb4CVgiyBX8FugW6BfIDwwTTA7IFNwVkBykFNwWoBLIF7AKyBbQG//9wogIAQd65BQuFCKBAZgT///////////////////////////////8AAP///////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//2YE////////////////////////////////AAD///////////////////////////////////////////////9mBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYE//9mBP///////////////////////////////wAA////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP///////////////////////////////////////////////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//3yiAgBB7sEFC4UIoED/////////////////////////////////////////////////////////////////////////////////////aQLwApkCMgQyBM0EpgVHAfAC8ALwAjIE8ALwAvACMgQyBDIEMgQyBDIEMgQyBDIEMgQyBPAC8AIyBDIEMgTwAioGuASHBMkE6ARJBDMEaQU8BToC0AObBA0ErQUbBWQFdgRoBagE2QOlBDAFswTRBnQEkARnBPAC2ALwAjIEMgQyBDQEdQT2A3UEXQT1AgQEXwRIAu8CCQRcAqQGXwRLBHUEdQQcAz0DLANfBOsD9AUCBPIDzAPwAjIE8AIyBP///////////////////////////////////////////////////////////////////////////////////////2kC8ALvArAEsAR5BaYF1gHwAvACdQOwBPAC8ALwAh8DsASwBLAEsASwBLAEsASwBLAEsATwAvACsASwBLAEgQMqBhEFwwTlBCQFjQSrBF8FeAU6AkME8ARsBPYFVwWgBbIErAXjBBcE5QRsBfkEEgfOBOgEewQ3A9gCNwOwBLAEsARDBKcEGASlBJkE9QIEBL4EYwLvAmIEXALgBrkEhwSpBKwEawNyAywDugQ4BEUGawRFBDoEeAOwBHgDsAT///////////////////////////////////////////////////////////////////////////////////////9pAvACmQIyBNkDzQSmBUcB8ALwAvACMgTwAvAC8AIyBDIEMgQyBDIEMgQyBDIEMgQyBDIE8ALwAjIEMgQyBPACKgbjBIcEyQToBEkEMwRpBTwFOgLQA5sEDQQXBhsFZAVZBGQFqATZA6UEMAWzBNEGdASQBGcE8ALYAvACMgQyBDIENAR1BK4DdQRMBDYDBAR1BHQC7wIJBJACpAZfBEsEdQR1BFUDPQNcA3QE6wP0BQIE8gPMA/ACMgTwAjIE////////////////////////////////////////////////////////////////////////////////////////aQLwAiADsASwBNwFpgVpAvAC8AJ1A7AE8ALwAvACLQOwBLAEsASwBLAEsASwBLAEsASwBPAC8AKwBLAEsAQtAyoG6QS4BOcEDwW/BK8EaQVtBToC/QMzBToESgZIBZ4FqwQoBv0EAwR7BUsFdwVpB0EFeAXkBOID0gPiA7AEsASwBL4EvwTxA78EagRIA0gEfwSdAhoDUQSPAqQGfwSPBMoEygSTA6wDgQN1BGsEMAabBIMEQwTiA7AE4gOwBP//iKICAEH+yQULhQigQP/////////////////////////////////////////////////////////////////////////////////////QAiYDrAOMBhYFnAjQBSYCogOiAxYFjAbpAqID6QKiAxYFFgUWBRYFFgUWBRYFFgUWBRYFogOiA4wGjAaMBl0EAAh4BXwFlgUqBg8FmQQ0BgMGXgOjA4sFdAS+BvwFTAbTBEwGkAV4Be4E2wV4BekHewXsBHsFogOiA6IDjAYWBRYFzgT8BCsE/ATEBNAC/AQQBTICwQK8BDICyAcQBdsE/AT8BGoDKwQnAxAFvASMBrwEvAQ0BBQFogMUBYwG////////////////////////////////////////////////////////////////////////////////////////vAI4A7ME8AawBS0K5gaoAlkEWQSwBfAG5ALXA+QChAWwBbAFsAWwBbAFsAWwBbAFsAWwBTgDOAPwBvAG8AbvBLYHNgYYBsoFpAZ3BTQFfQazBl4EcQQrBhkFlQfGBs0G3QXNBkIGrwV0BX8GHAYHCRwG5QWJBVkEhAVZBPAGsAWwBVgFmAW1BJgFUAVhA5gFswW8AjkDXgW8AncIswV+BZgFmAX6A78EpQOzBTMF1gdaBTUFxgSwBVkEsAXwBv///////////////////////////////////////////////////////////////////////////////////////9ACJgOsA4wGFgWcCNAFJgKiA6IDFgWMBukCogPpAqIDFgUWBRYFFgUWBRYFFgUWBRYFFgWiA6IDjAaMBowGXQQACHYFfAWWBSAGDwWZBDQGAwZeA6MDiwV0BL4G/AVMBtMETAaQBXgF7gTbBXYF7Ad7BewEewWiA6IDogOMBhYFFgXOBPwEKwT8BMQE0AL5BBAFMgLBArIEMgLJBxAF2wT8BPwEagMrBCcDEAW6BIwGvAS6BDQEFAWiAxQFjAb///////////////////////////////////////////////////////////////////////////////////////+8AjgDswTwBrAFLQrmBqgCWQRZBLAF8AbkAtcD5AKEBbAFsAWwBbAFsAWwBbAFsAWwBbAFOAM4A/AG8AbwBu8Etgc2BhgGygWkBncFNAV9BrMGXgRxBCsGGQWVB8YGzQbdBc0GQgavBXQFfwYcBgcJHAblBYkFWQSEBVkE8AawBbAFWAWYBbUEmAVQBWEDmAWzBbwCOQNeBbwCdwizBXwFmAWYBfoDvwSlA7MFMQXWB1oFNQXGBLAFWQSwBfAG//+QogIAQY7SBQuFCKBA/////////////////////////////////////////////////////////////////////////////////////xQCIwI1AysFkwSWBtcFxQFeAl4CagSTBPYBkwIhAvACkwSTBJMEkwSTBJMEkwSTBJMEkwQhAiECkwSTBJMEbwMxBxAFLwUMBdUFcwQhBNMF5wU7AiMC6QQnBDkHCAY7BtEEOwbyBGQEbQTTBcMEaAeeBHsEkQSiAvACogJWBJYDngRzBOcEzwPnBH0EtgJiBOkEBgIGAjMEBgJxB+kE1QTnBOcERAPRA9MC6QQCBDkGMQQIBL4DCANoBAgDkwT///////////////////////////////////////////////////////////////////////////////////////8UAkoCxwMrBZEENQcABiECtgK2AlwEkQRSApMCSAJOA5EEkQSRBJEEkQSRBJEEkQSRBJEESAJSApEEkQSRBNEDLQeFBWAFGQXsBXsEZATLBR8GpgKmAlAFhQSLB4EGXgYGBV4GSAVoBKIEDAYzBbwHVgX+BKIEpgJOA6YCQgRKA9sE1QQQBR0EEAW6BBkDhQRCBXECcQL2BHEC2wdCBfQEEAUQBaID+gN5A0IFjQTZBqAEjQTnAycDaAQnA5EE////////////////////////////////////////////////////////////////////////////////////////FAISAhcDKwVoBFgGXAW8AUgCSAJqBGgE7AF/AgYCzQJoBGgEaARoBGgEaARoBGgEaARoBAYCBgJoBGgEaARqA8cGcQTJBK4EVAUXBMcDagVtBS8CIwJ1BMsDsgaeBcMFhwTDBY0EBAT8A2gFYgTRBicEBgQ/BEoCzQJKAiMEJwNvBIUEngSaA54E8gOBAgIEngQIAggC5wMIAvoGngR9BJ4EngQrA20DmAKeBLIDvAXTA7IDjQPLAmgEywJoBP///////////////////////////////////////////////////////////////////////////////////////xQCSgKgAysFaATZBqoFCgK2ArYCXARoBDkCkwJIAl4DaARoBGgEaARoBGgEaARoBGgEaARIAkgCaARoBGgErAPZBgYF9gTlBGoFVgQ/BIUFmgWTAqYC5wQlBAoHCgbXBaQE1wXfBD0EPwSHBbgEJwfZBIMESgSmAl4DpgI5BDMDbwTBBMME3QPBBHUE/AJUBNUEYAJgAosEYAI9B9UErgTDBMEEXgPJA0gD1QQZBE4GPwQnBKQD1wJoBNcCaAT//5iiAgBBntoFC4UIoED/////////////////////////////////////////////////////////////////////////////////////7gGmAksDJQXhBIoGrwW5AQADAAPHAyUFKAL+AigCwAPpBHADeARqBIUEOgSHBAUExQSHBIACgAIlBSUFJQXUA24HXgU7BSMF/gU6BcsEzQWFBh4DJASOBdQEawcjBvQF4QT0BZ0FfQTzBA0GVQXOB68F7ATQBAADwAMAAyUFJQUABAgEewSiA5gE3gOaAhMEqARYAlYCSQRKAgwHugRQBJIEegRHA3UDwwKaBPkD5gUKBPADjQNxAwADcQMlBf///////////////////////////////////////////////////////////////////////////////////////wgCAwMUBKAFIAUJB2UGJwKTA5MD2wOgBaACCAOgAsYDnAXrAwMF/wQyBcsELwVvBGkFLwXwAvACoAWgBaAFYwS8BxEGDwa5BawGxQVfBXUGTgeRA8MEiQZ8BTAItwaPBpwFjwZhBjEFeQWrBhkGAwl4BtsFhAWTA8YDkwOgBaAFAATEBCoFQAROBZMEJQOdBHAF1ALFAg4FwQIgCIUFFgVDBTAFKQQaBC4DagWJBOgGtAR/BDQEAAQaAwAEoAX////////////////////////////////////////////////////////////////////////////////////////uAaYCSwMlBeEEigavBbkBAAMAA8cDJQUoAv4CKALAA+kEcAN4BGoEhQQ6BIcE+QPFBIcEEgMSAyUFJQUlBdQDbgdeBTsFIwX+BToFywTNBYUGHgMkBI4F1ARrByMG2AXhBNgFnQV9BPMEDQZVBc4HrwXsBNAEAAPAAwADJQUlBQAElQRuBKEDmgTGA6EClQSABGECVAI5BEgCCQe4BEwEoARxBLEDcwPHApoETgSUBgIEegSNA3EDAANxAyUF////////////////////////////////////////////////////////////////////////////////////////CAIDAxQEoAUgBQkHZQYnApMDkwPbA6AFoAIIA6ACxgOcBesDAwX/BDIFywQvBYgEaQUvBfAC8AKgBaAFoAVjBLwHEQYTBrkFrAbFBV8FdQZOB5sDwwSJBnwFRAijBo8GpgWPBmEGOQV5BasGGQYDCWsG2wWEBZMDxgOTA6AFoAUABEgFMQVJBE0FdQQMAzIFZwXtAusCIQXWAgQIhQUWBU0FMwVFBCMEVgN7BeYEeAerBFsFIwQABBoDAASgBf//oKICAEGu4gULhBigQP/////////////////////////////////////////////////////////////////////////////////////PAZsCNQP8Aw4EuAV1BcQBbQJtAvwD/AP/AXMCBQIXAw4EDgQOBA4EDgQOBA4EDgQOBA4EJAIkAvwD/AP8A7UDJwehBFoERATsBOgDrQMMBfwEBAKNAigEXQPXBioFTAUiBGIFWAStA+YDIgWKBB4HJwTmA78DdAIXA3QC/AP8A1QC1QM0BGIDNAT7A3ECxAM0BNYB6gGjA9YBZAY0BDgENAQ0BMoCIQOuAjQEnQO4BXcDnwMpA4QCrwOEAvwD//8AAP///////////////////////////////wAA////////////////////////////////////////////////zwGbAoID/AMOBNUFowXeAX4CfgL8A/wDEAJzAiMCcAMOBA4EDgQOBA4EDgQOBA4EDgQOBDUCNQL8A/wD/AO1AzAH2QR8BDwECwXnA6wDGQUMBSICpgJgBGID/gZFBWkFQgR9BYEEyAP2AzkFuwRAB2gEKATTA5kCcAOZAvwD/ANnAvMDSwRZA0sEBwSIAssDSwT3AQsC1wP3AYIGSwRNBEsESwTYAjEDxgJLBMkD9gWtA8oDLgPAAs0DwAL8A////////////////////////////////////////////////////////////////////////////////////////88BmwI1A/wDDgS4BXUFxAFtAm0C/AP8A/8BcwIFAhoDDgQOBA4EDgQOBA4EDgQOBA4EDgQkAiQC/AP8A/wDtQMnB6EEWgQuBOwE6AOtAwwF/AQEAo0CKARdA9cGKAU8BSIEUAVYBJ4D5gMiBYoEHwcnBOYDvwN0AhMDdAL8A/wDVAIdBB0EVAMdBNIDcQIdBB0E1gHqAaMD1gFUBh0EGwQdBB0EvgIdA64CHQSRA7gFdwOUAykDhAKvA4QC/AP////////////////////////////////////////////////////////////////////////////////////////PAZsCggP8Aw4E1QWjBd4BfgJ+AvwD/AMQAnMCIwJ5Aw4EDgQOBA4EDgQOBA4EDgQOBA4ENQI1AvwD/AP8A7UDMAfZBHwEJgQLBecDrAMZBQwFIgKmAmAEYgP+BkAFWQVCBGsFgQS5A/YDOQW7BEEHaAQoBNMDmQJmA5kC/AP8A2cCOQQ5BEsDOQTuA4gCOQQ4BPcBCwLXA/cBbgY4BDgEOQQ5BNECJwPGAjgEwQP2Ba0DwwMuA8ACzQPAAvwD//8vQQAAxgAAAAtIAADBAAAAhFkAAMIAAABYRQAAwAAAAKZgAACRAwAAD0AAAMUAAAD4TwAAwwAAAKE2AADEAAAA/18AAJIDAAAnNwAAxwAAACI7AACnAwAAiBwAACEgAADeXwAAlAMAAIJpAADQAAAABEgAAMkAAAB+WQAAygAAAFFFAADIAAAA2DAA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AMUDAABvNgAA/AAAAEcsAAAYIQAAozoAAL4DAAC+RwAA/QAAAIoyAAClAAAAajYAAP8AAADkXwAAtgMAAIk6AAANIAAAjToAAAwgAAAYawAAgmYAAKZlAACZZgAAl2UAAFMBAABUAQAAVQEAAFUBAEHA+gUL0QUR7u4TCAPu/u7u7gHu7u4B7u4J/u4SFRfuEgHu7u7uCg3u7u7u7u7u7u4B7u4WCAEBGQ4Y7u4bGBru7h3u7u7uARX77u7u7hAe7u7uAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWEQICAgICAgICAgICAgISEAITAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIUAhUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4CDwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNAAAACwMEBQ8HAwwNBgwNDgwNGhUAAQADBw4GDwgMDRITCSoQERAWLzANMhETLjIUEhQSQRMsE0JAKkIZ//8sAAAAACIMDQ4jDwkQEQoQEcwQES1F/AEG9g8H9iQCEBEvMCg2SUomMTs8PTYqOTo+Py/YQEQwNyVHQzVIKwAAOAAAAAAAAwkAAAABDgILDAgjJCUzODoADRASGxYcEicvIhcwHjkGBzIFDxEUGCkAEykAAAAAADQVKB0eACEmMR8uOxksABsAIBoqKzcANTYtAAAAAAACAgEAAwMBAAEAAQEBAAIBAQACAgMBAQAABQABAwEDBQMBAQEBAgABAAQCAAIDAQADAgEAAQEAAQEBAwAAAAAAFxgYGBkaGxscHB0dHh4fHyAgISEiIyMlJiQkJycoKCgpKSoqKisrLCwtLi4vMDEzMjQ0NDU1NTY2NzcAAAAA7u787u7u7u7uHyDu+e/u7u4M7u7uBg/u7vLu7u7u7vXuAEGggAYLJP8DCAQhBQsSEycUFRYpMkEXGBkaLDM0QkYbHB0uHksfIGtleQBB0YAGC7YDAQEBAQEBAQECAwEBAgEBAQEBAQEBAQEBAQEBAQEBAQIBBAUBAQEBAQEGAQEHCAkKCgoKCgoKCgoKAQELAQwBDQ4PEBESExQVFhMTExMXGBkTGhscHRMTExMTAR4BARMBHyAhIiMTJCUmExMTEycoKRMqKywtExMTExMBAQEBARMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTLhMTEy8TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEzATExMTExMTExMTExMTExMTAAAAAAAABAAEABwAHAAhACEAJAAiAAoAAgAWAAkAIgAiACIAFQAdAAEAFAAUABQAFAAUABQAFAAIAAQABQAcABsAFwAcACEAIAAfAB4ACQATAAAAFQASABUAAwAHABUAFQAUABQAFAAUABQAFAAUABQACAAEAAUABQAGABwAGgAYABkAIQAHABUAFAAUABQAFAAUABQACwAUAA0AFAAMABQAFAAUAA4AFAAUABQAEAAUAA8AFAARAEGShAYLlQQBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAQABwADAAQABQAFAAYABgAIAAcABwARABYAEgARABIACAAIAA8ADwAXAA8AGAAPABkAGgAaAB4AFgA0AB4ABQAyAAYAIgAiADMAFwAYADUAGQAaABoAKgA2ACoANAA3ADIARQA7ADwAMwA7ADwARgA1AEcASABMADYAIgBJAEoANwBFAE4AUABiAFEAUgBUAEYARwBVAEgATABWAEkASgBYAFoATgBEAFAAUQBSAFQAOAAvACwAVQApAFYAGwAQAFgAWgBdAF0AXQBdAF0AXQBdAF4AXgBeAF4AXgBeAF4AXwBfAF8AXwBfAF8AXwBgAAkAYABgAGAAYABgAGEAYQBjAAIAYwBjAGMAYwBjAGQAAABkAAAAZABkAGQAZQAAAGUAZQBlAGUAZQBmAAAAAABmAGYAZgBmAGcAAABnAGcAZwBnAGgAAABoAGgAaABoAGgAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABBtIgGC80BrgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAA2wDbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wBBkooGC88BXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBcAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAEHxiwYLMAEBAgMBBAEFAQYHBwEGBgYGBgYGBgYGBgYGBgYGAwYGBgYGBgYGBgYGBgYGBgYGBgBBsowGC5UECgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBc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HBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAEHwngYLef//////////////////////////////////////////AAAAAAAAAAT+//+H/v//BwAAAAAAAAAA//9/////f//////////zf/79//////9///////////8P4P////8x/P///wAAAAAAAAD//////////////wEA+AMAQYCgBgtBQNf///v/////f39U/f8PAP7f///////////+3/////8DAP///////58Z////zz8DAAAAAAAA/v///38C/v///38AQcqgBguzAf///wcHAAAAAAD+//8H/gcAAAAA/v//////////fP9/LwBgAAAA4P///////yMAAAD/AwAAAOCf+f///cUDAAAAsAMAAwDgh/n///1tAwAAAF4AABwA4K/7///97SMAAAAAAQAAAOCf+f///c0jAAAAsAMAAADgxz3WGMe/AwAAAAAAAAAA4N/9///97wMAAAAAAwAAAODf/f///e8DAAAAQAMAAADg3/3///3/AwAAAAADAEGQogYLGf7/////fw0APwAAAAAAAACWJfD+rmwNIB8AQbiiBgsG//7///8DAEHkogYLcv////8/AP////9/AO3aBwAAAABQAVAxgqtiLAAAAABAAMmA9QcAAAAACAEC/////////////////////////w///////////////wP//z8//////z8//6r///8/////////31/cH88P/x/cHwAAAABATABB4KMGCwEHAEHwowYLJoAAAAD+AwAA/v///////////x8A/v////////////8H4P////8fAEGwpAYLFf//////////////////////////PwBB0KQGCxX//////////////////////////w8AQfWkBgvJAmD/B/7//4f+//8HAAAAAAAAgAD//3////9//////wAAAAAAAAD//////////////wEA+AMAAwAAAAAA//////////8/AAAAAwAAAMDX///7/////39/VP3/DwD+3////////////t//////ewD///////+fGf///88/AwAAAAAAAP7///9/Av7///9/AP7/+///uxYA////BwcAAAAAAP7//wf//wcA/wP///////////98/3/v//89/wPu////////8/8/Hv/P/wAA7p/5///9xdOfOYCwz/8DAOSH+f///W3ThzkAXsD/HwDur/v///3t8787AADB/wAA7p/5///9zfOPOcCww/8AAOzHPdYYx7/Dxz2AAID/AADu3/3///3vw989YADD/wAA7N/9///978PfPWBAw/8AAOzf/f///f/Dzz2AAMP/AEHQpwYLOP7/////f/8H/3//AwAAAACWJfD+rmz/O18//wMAAAAAAAAAA/8DoML//v///wP+/98Pv/7/P/4CAEGqqAYLa/8fAgAAAKAAAAD+/z4A/v///////////x9m/v////////////93kAEAAJEBAACSAQAAkwEAAJQBAACVAQAAlgEAAJcBAACYAQAAmQEAAJoBAACbAQAAnAEAAJ0BAACgAQAAoQEAAAEAAAABAEGhqQYLBRUKAAAVAEG4qQYL1QEVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUGBgYGBgYGBgYGBgYGBgYGBwcHBwcAQZarBgtrAQGiAQAAowEAAKQBAAClAQAApgEAAKQBAACnAQAAqAEAAKkBAACQAQAAkQEAAJIBAACTAQAAlAEAAJUBAACWAQAAlwEAAJgBAACZAQAAmgEAAJsBAACcAQAAnQEAAKABAAChAQAAAQAAAAEAQY2sBgsFFQoAABUAQaSsBgvVARUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI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TExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAEHQ+gYLB0MuVVRGLTgAQej6BgugEBilAgCwpQIAQKYCAE5vIGVycm9yIGluZm9ybWF0aW9uAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZABSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZQBLZXkgaGFzIGV4cGlyZWQAS2V5IGhhcyBiZWVuIHJldm9rZWQAS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlAAAAAAClAlsA8AG1BYwFJQGDBh0DlAT/AMcDMQMLBrwBjwF/A8oEKwDaBq8AQgNOA9wBDgQVAKEGDQGUAgsCOAZkArwC/wJdA+cECwfPAssF7wXbBeECHgZFAoUAggJsA28E8QDzAxgF2QDaA0wGVAJ7AZ0DvQQAAFEAFQK7ALMDbQD/AYUELwX5BDgAZQFGAZ8AtwaoAXMCUwEAQbiLBwsMIQQAAAAAAAAAAC8CAEHYiwcLBjUERwRWBABB7osHCwKgBABBgowHCyJGBWAFbgVhBgAAzwEAAAAAAAAAAMkG6Qb5Bh4HOQdJB14HAEGwjAcLkQHRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAABkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRjQcLIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi44HCwEMAEGXjgcLFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxY4HCwEQAEHRjgcLFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/44HCwESAEGLjwcLHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwo8HCw4aAAAAGhoaAAAAAAAACQBB848HCwEUAEH/jwcLFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrZAHCwEWAEG5kAcLJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBBhJEHCwIGAgBBrJEHCwj//////////wBB8JEHC/cI/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAA6MsBAAgCAAAJAgAACgIAAAsCAAAMAgAADQIAAA4CAAAPAgAAEAIAABECAAASAgAAEwIAABQCAAAVAgAABAAAAAAAAAAgzAEAFgIAABcCAAD8/////P///yDMAQAYAgAAGQIAABjLAQAsywEAAAAAAHzMAQAaAgAAGwIAAAoCAAALAgAAHAIAAB0CAAAOAgAADwIAABACAAAeAgAAEgIAAB8CAAAUAgAAIAIAAE5TdDNfXzI5YmFzaWNfaW9zSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAWPgBAHzLAQBgzQEATlN0M19fMjE1YmFzaWNfc3RyZWFtYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAADD4AQC0ywEATlN0M19fMjEzYmFzaWNfb3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAtPgBAPDLAQAAAAAAAQAAAKjLAQAD9P//TlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAABY+AEAOMwBAOjLAQA4AAAAAAAAADDNAQAhAgAAIgIAAMj////I////MM0BACMCAAAkAgAAlMwBAMzMAQDgzAEAqMwBADgAAAAAAAAAIMwBABYCAAAXAgAAyP///8j///8gzAEAGAIAABkCAABOU3QzX18yMTliYXNpY19vc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAABY+AEA6MwBACDMAQAAAAAAYM0BACUCAAAmAgAATlN0M19fMjhpb3NfYmFzZUUAAAAw+AEATM0BAEH0mgcLMYDeKACAyE0AAKd2AAA0ngCAEscAgJ/uAAB+FwGAXEABgOlnAQDIkAEAVbgBVVRDAC4AQbCbBwvXAlN1bgBNb24AVHVlAFdlZABUaHUARnJpAFNhdABTdW5kYXkATW9uZGF5AFR1ZXNkYXkAV2VkbmVzZGF5AFRodXJzZGF5AEZyaWRheQBTYXR1cmRheQBKYW4ARmViAE1hcgBBcHIATWF5AEp1bgBKdWwAQXVnAFNlcABPY3QATm92AERlYwBKYW51YXJ5AEZlYnJ1YXJ5AE1hcmNoAEFwcmlsAE1heQBKdW5lAEp1bHkAQXVndXN0AFNlcHRlbWJlcgBPY3RvYmVyAE5vdmVtYmVyAERlY2VtYmVyAEFNAFBNACVhICViICVlICVUICVZACVtLyVkLyV5ACVIOiVNOiVTACVJOiVNOiVTICVwAAAAJW0vJWQvJXkAMDEyMzQ1Njc4OQAlYSAlYiAlZSAlVCAlWQAlSDolTTolUwAAAAAAXlt5WV0AXltuTl0AeWVzAG5vAAAQ0QEAQZSiBwv5AwEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABaAAAAewAAAHwAAAB9AAAAfgAAAH8AQZCqBwsDINcBAEGkrgcL+QMBAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4AAABvAAAAcAAAAHEAAAByAAAAcwAAAHQAAAB1AAAAdgAAAHcAAAB4AAAAeQAAAHoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AEGgtgcLMTAxMjM0NTY3ODlhYmNkZWZBQkNERUZ4WCstcFBpSW5OACVJOiVNOiVTICVwJUg6JU0AQeC2BwuBASUAAABtAAAALwAAACUAAABkAAAALwAAACUAAAB5AAAAJQAAAFkAAAAtAAAAJQAAAG0AAAAtAAAAJQAAAGQAAAAlAAAASQAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAACAAAAAlAAAAcAAAAAAAAAAlAAAASAAAADoAAAAlAAAATQBB8LcHC2YlAAAASAAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAAAAAAABk5QEAOgIAADsCAAA8AgAAAAAAAMTlAQA9AgAAPgIAADwCAAA/AgAAQAIAAEECAABCAgAAQwIAAEQCAABFAgAARgIAQeC4Bwv9AwQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAUCAAAFAAAABQAAAAUAAAAFAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAwIAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAggAAAEIBAABCAQAAQgEAAEIBAABCAQAAQgEAAEIBAABCAQAAQgEAAEIBAACCAAAAggAAAIIAAACCAAAAggAAAIIAAACCAAAAKgEAACoBAAAqAQAAKgEAACoBAAAqAQAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAACCAAAAggAAAIIAAACCAAAAggAAAIIAAAAyAQAAMgEAADIBAAAyAQAAMgEAADIBAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAADIAAAAyAAAAMgAAAIIAAACCAAAAggAAAIIAAAAEAEHkwAcL7QIs5QEARwIAAEgCAAA8AgAASQIAAEoCAABLAgAATAIAAE0CAABOAgAATwIAAAAAAAD85QEAUAIAAFECAAA8AgAAUgIAAFMCAABUAgAAVQIAAFYCAAAAAAAAIOYBAFcCAABYAgAAPAIAAFkCAABaAgAAWwIAAFwCAABdAgAAdAAAAHIAAAB1AAAAZQAAAAAAAABmAAAAYQAAAGwAAABzAAAAZQAAAAAAAAAlAAAAbQAAAC8AAAAlAAAAZAAAAC8AAAAlAAAAeQAAAAAAAAAlAAAASAAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAAAAAAAAlAAAAYQAAACAAAAAlAAAAYgAAACAAAAAlAAAAZAAAACAAAAAlAAAASAAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAACAAAAAlAAAAWQAAAAAAAAAlAAAASQAAADoAAAAlAAAATQAAADoAAAAlAAAAUwAAACAAAAAlAAAAcABB3MMHC/8KBOIBAF4CAABfAgAAPAIAAE5TdDNfXzI2bG9jYWxlNWZhY2V0RQAAAFj4AQDs4QEAMPYBAAAAAACE4gEAXgIAAGACAAA8AgAAYQIAAGICAABjAgAAZAIAAGUCAABmAgAAZwIAAGgCAABpAgAAagIAAGsCAABsAgAATlN0M19fMjVjdHlwZUl3RUUATlN0M19fMjEwY3R5cGVfYmFzZUUAADD4AQBm4gEAtPgBAFTiAQAAAAAAAgAAAATiAQACAAAAfOIBAAIAAAAAAAAAGOMBAF4CAABtAgAAPAIAAG4CAABvAgAAcAIAAHECAAByAgAAcwIAAHQCAABOU3QzX18yN2NvZGVjdnRJY2MxMV9fbWJzdGF0ZV90RUUATlN0M19fMjEyY29kZWN2dF9iYXNlRQAAAAAw+AEA9uIBALT4AQDU4gEAAAAAAAIAAAAE4gEAAgAAABDjAQACAAAAAAAAAIzjAQBeAgAAdQIAADwCAAB2AgAAdwIAAHgCAAB5AgAAegIAAHsCAAB8AgAATlN0M19fMjdjb2RlY3Z0SURzYzExX19tYnN0YXRlX3RFRQAAtPgBAGjjAQAAAAAAAgAAAATiAQACAAAAEOMBAAIAAAAAAAAAAOQBAF4CAAB9AgAAPAIAAH4CAAB/AgAAgAIAAIECAACCAgAAgwIAAIQCAABOU3QzX18yN2NvZGVjdnRJRHNEdTExX19tYnN0YXRlX3RFRQC0+AEA3OMBAAAAAAACAAAABOIBAAIAAAAQ4wEAAgAAAAAAAAB05AEAXgIAAIUCAAA8AgAAhgIAAIcCAACIAgAAiQIAAIoCAACLAgAAjAIAAE5TdDNfXzI3Y29kZWN2dElEaWMxMV9fbWJzdGF0ZV90RUUAALT4AQBQ5AEAAAAAAAIAAAAE4gEAAgAAABDjAQACAAAAAAAAAOjkAQBeAgAAjQIAADwCAACOAgAAjwIAAJACAACRAgAAkgIAAJMCAACUAgAATlN0M19fMjdjb2RlY3Z0SURpRHUxMV9fbWJzdGF0ZV90RUUAtPgBAMTkAQAAAAAAAgAAAATiAQACAAAAEOMBAAIAAABOU3QzX18yN2NvZGVjdnRJd2MxMV9fbWJzdGF0ZV90RUUAAAC0+AEACOUBAAAAAAACAAAABOIBAAIAAAAQ4wEAAgAAAE5TdDNfXzI2bG9jYWxlNV9faW1wRQAAAFj4AQBM5QEABOIBAE5TdDNfXzI3Y29sbGF0ZUljRUUAWPgBAHDlAQAE4gEATlN0M19fMjdjb2xsYXRlSXdFRQBY+AEAkOUBAATiAQBOU3QzX18yNWN0eXBlSWNFRQAAALT4AQCw5QEAAAAAAAIAAAAE4gEAAgAAAHziAQACAAAATlN0M19fMjhudW1wdW5jdEljRUUAAAAAWPgBAOTlAQAE4gEATlN0M19fMjhudW1wdW5jdEl3RUUAAAAAWPgBAAjmAQAE4gEAAAAAAITlAQCVAgAAlgIAADwCAACXAgAAmAIAAJkCAAAAAAAApOUBAJoCAACbAgAAPAIAAJwCAACdAgAAngIAAAAAAABA5wEAXgIAAJ8CAAA8AgAAoAIAAKECAACiAgAAowIAAKQCAAClAgAApgIAAKcCAACoAgAAqQIAAKoCAABOU3QzX18yN251bV9nZXRJY05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRUVFAE5TdDNfXzI5X19udW1fZ2V0SWNFRQBOU3QzX18yMTRfX251bV9nZXRfYmFzZUUAADD4AQAG5wEAtPgBAPDmAQAAAAAAAQAAACDnAQAAAAAAtPgBAKzmAQAAAAAAAgAAAATiAQACAAAAKOcBAEHkzgcLywEU6AEAXgIAAKsCAAA8AgAArAIAAK0CAACuAgAArwIAALACAACxAgAAsgIAALMCAAC0AgAAtQIAALYCAABOU3QzX18yN251bV9nZXRJd05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAE5TdDNfXzI5X19udW1fZ2V0SXdFRQAAALT4AQDk5wEAAAAAAAEAAAAg5wEAAAAAALT4AQCg5wEAAAAAAAIAAAAE4gEAAgAAAPznAQBBuNAHC98B/OgBAF4CAAC3AgAAPAIAALgCAAC5AgAAugIAALsCAAC8AgAAvQIAAL4CAAC/AgAATlN0M19fMjdudW1fcHV0SWNOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQBOU3QzX18yOV9fbnVtX3B1dEljRUUATlN0M19fMjE0X19udW1fcHV0X2Jhc2VFAAAw+AEAwugBALT4AQCs6AEAAAAAAAEAAADc6AEAAAAAALT4AQBo6AEAAAAAAAIAAAAE4gEAAgAAAOToAQBBoNIHC78BxOkBAF4CAADAAgAAPAIAAMECAADCAgAAwwIAAMQCAADFAgAAxgIAAMcCAADIAgAATlN0M19fMjdudW1fcHV0SXdOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQBOU3QzX18yOV9fbnVtX3B1dEl3RUUAAAC0+AEAlOkBAAAAAAABAAAA3OgBAAAAAAC0+AEAUOkBAAAAAAACAAAABOIBAAIAAACs6QEAQejTBwubC8TqAQDJAgAAygIAADwCAADLAgAAzAIAAM0CAADOAgAAzwIAANACAADRAgAA+P///8TqAQDSAgAA0wIAANQCAADVAgAA1gIAANcCAADYAgAATlN0M19fMjh0aW1lX2dldEljTlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUATlN0M19fMjl0aW1lX2Jhc2VFADD4AQB96gEATlN0M19fMjIwX190aW1lX2dldF9jX3N0b3JhZ2VJY0VFAAAAMPgBAJjqAQC0+AEAOOoBAAAAAAADAAAABOIBAAIAAACQ6gEAAgAAALzqAQAACAAAAAAAALDrAQDZAgAA2gIAADwCAADbAgAA3AIAAN0CAADeAgAA3wIAAOACAADhAgAA+P///7DrAQDiAgAA4wIAAOQCAADlAgAA5gIAAOcCAADoAgAATlN0M19fMjh0aW1lX2dldEl3TlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFRUUATlN0M19fMjIwX190aW1lX2dldF9jX3N0b3JhZ2VJd0VFAAAw+AEAhesBALT4AQBA6wEAAAAAAAMAAAAE4gEAAgAAAJDqAQACAAAAqOsBAAAIAAAAAAAAVOwBAOkCAADqAgAAPAIAAOsCAABOU3QzX18yOHRpbWVfcHV0SWNOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQBOU3QzX18yMTBfX3RpbWVfcHV0RQAAADD4AQA17AEAtPgBAPDrAQAAAAAAAgAAAATiAQACAAAATOwBAAAIAAAAAAAA1OwBAOwCAADtAgAAPAIAAO4CAABOU3QzX18yOHRpbWVfcHV0SXdOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQAAAAC0+AEAjOwBAAAAAAACAAAABOIBAAIAAABM7AEAAAgAAAAAAABo7QEAXgIAAO8CAAA8AgAA8AIAAPECAADyAgAA8wIAAPQCAAD1AgAA9gIAAPcCAAD4AgAATlN0M19fMjEwbW9uZXlwdW5jdEljTGIwRUVFAE5TdDNfXzIxMG1vbmV5X2Jhc2VFAAAAADD4AQBI7QEAtPgBACztAQAAAAAAAgAAAATiAQACAAAAYO0BAAIAAAAAAAAA3O0BAF4CAAD5AgAAPAIAAPoCAAD7AgAA/AIAAP0CAAD+AgAA/wIAAAADAAABAwAAAgMAAE5TdDNfXzIxMG1vbmV5cHVuY3RJY0xiMUVFRQC0+AEAwO0BAAAAAAACAAAABOIBAAIAAABg7QEAAgAAAAAAAABQ7gEAXgIAAAMDAAA8AgAABAMAAAUDAAAGAwAABwMAAAgDAAAJAwAACgMAAAsDAAAMAwAATlN0M19fMjEwbW9uZXlwdW5jdEl3TGIwRUVFALT4AQA07gEAAAAAAAIAAAAE4gEAAgAAAGDtAQACAAAAAAAAAMTuAQBeAgAADQMAADwCAAAOAwAADwMAABADAAARAwAAEgMAABMDAAAUAwAAFQMAABYDAABOU3QzX18yMTBtb25leXB1bmN0SXdMYjFFRUUAtPgBAKjuAQAAAAAAAgAAAATiAQACAAAAYO0BAAIAAAAAAAAAaO8BAF4CAAAXAwAAPAIAABgDAAAZAwAATlN0M19fMjltb25leV9nZXRJY05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRUVFAE5TdDNfXzIxMV9fbW9uZXlfZ2V0SWNFRQAAMPgBAEbvAQC0+AEAAO8BAAAAAAACAAAABOIBAAIAAABg7wEAQYzfBwubAQzwAQBeAgAAGgMAADwCAAAbAwAAHAMAAE5TdDNfXzI5bW9uZXlfZ2V0SXdOU18xOWlzdHJlYW1idWZfaXRlcmF0b3JJd05TXzExY2hhcl90cmFpdHNJd0VFRUVFRQBOU3QzX18yMTFfX21vbmV5X2dldEl3RUUAADD4AQDq7wEAtPgBAKTvAQAAAAAAAgAAAATiAQACAAAABPABAEGw4AcLmwGw8AEAXgIAAB0DAAA8AgAAHgMAAB8DAABOU3QzX18yOW1vbmV5X3B1dEljTlNfMTlvc3RyZWFtYnVmX2l0ZXJhdG9ySWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFRUUATlN0M19fMjExX19tb25leV9wdXRJY0VFAAAw+AEAjvABALT4AQBI8AEAAAAAAAIAAAAE4gEAAgAAAKjwAQBB1OEHC5sBVPEBAF4CAAAgAwAAPAIAACEDAAAiAwAATlN0M19fMjltb25leV9wdXRJd05TXzE5b3N0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAE5TdDNfXzIxMV9fbW9uZXlfcHV0SXdFRQAAMPgBADLxAQC0+AEA7PABAAAAAAACAAAABOIBAAIAAABM8QEAQfjiBwu5CMzxAQBeAgAAIwMAADwCAAAkAwAAJQMAACYDAABOU3QzX18yOG1lc3NhZ2VzSWNFRQBOU3QzX18yMTNtZXNzYWdlc19iYXNlRQAAAAAw+AEAqfEBALT4AQCU8QEAAAAAAAIAAAAE4gEAAgAAAMTxAQACAAAAAAAAACTyAQBeAgAAJwMAADwCAAAoAwAAKQMAACoDAABOU3QzX18yOG1lc3NhZ2VzSXdFRQAAAAC0+AEADPIBAAAAAAACAAAABOIBAAIAAADE8QEAAgAAAFMAAAB1AAAAbgAAAGQAAABhAAAAeQAAAAAAAABNAAAAbwAAAG4AAABkAAAAYQAAAHkAAAAAAAAAVAAAAHUAAABlAAAAcwAAAGQAAABhAAAAeQAAAAAAAABXAAAAZQAAAGQAAABuAAAAZQAAAHMAAABkAAAAYQAAAHkAAAAAAAAAVAAAAGgAAAB1AAAAcgAAAHMAAABkAAAAYQAAAHkAAAAAAAAARgAAAHIAAABpAAAAZAAAAGEAAAB5AAAAAAAAAFMAAABhAAAAdAAAAHUAAAByAAAAZAAAAGEAAAB5AAAAAAAAAFMAAAB1AAAAbgAAAAAAAABNAAAAbwAAAG4AAAAAAAAAVAAAAHUAAABlAAAAAAAAAFcAAABlAAAAZAAAAAAAAABUAAAAaAAAAHUAAAAAAAAARgAAAHIAAABpAAAAAAAAAFMAAABhAAAAdAAAAAAAAABKAAAAYQAAAG4AAAB1AAAAYQAAAHIAAAB5AAAAAAAAAEYAAABlAAAAYgAAAHIAAAB1AAAAYQAAAHIAAAB5AAAAAAAAAE0AAABhAAAAcgAAAGMAAABoAAAAAAAAAEEAAABwAAAAcgAAAGkAAABsAAAAAAAAAE0AAABhAAAAeQAAAAAAAABKAAAAdQAAAG4AAABlAAAAAAAAAEoAAAB1AAAAbAAAAHkAAAAAAAAAQQAAAHUAAABnAAAAdQAAAHMAAAB0AAAAAAAAAFMAAABlAAAAcAAAAHQAAABlAAAAbQAAAGIAAABlAAAAcgAAAAAAAABPAAAAYwAAAHQAAABvAAAAYgAAAGUAAAByAAAAAAAAAE4AAABvAAAAdgAAAGUAAABtAAAAYgAAAGUAAAByAAAAAAAAAEQAAABlAAAAYwAAAGUAAABtAAAAYgAAAGUAAAByAAAAAAAAAEoAAABhAAAAbgAAAAAAAABGAAAAZQAAAGIAAAAAAAAATQAAAGEAAAByAAAAAAAAAEEAAABwAAAAcgAAAAAAAABKAAAAdQAAAG4AAAAAAAAASgAAAHUAAABsAAAAAAAAAEEAAAB1AAAAZwAAAAAAAABTAAAAZQAAAHAAAAAAAAAATwAAAGMAAAB0AAAAAAAAAE4AAABvAAAAdgAAAAAAAABEAAAAZQAAAGMAAAAAAAAAQQAAAE0AAAAAAAAAUAAAAE0AQbzrBwv7CLzqAQDSAgAA0wIAANQCAADVAgAA1gIAANcCAADYAgAAAAAAAKjrAQDiAgAA4wIAAOQCAADlAgAA5gIAAOcCAADoAgAAAAAAADD2AQArAwAALAMAAC0DAABOU3QzX18yMTRfX3NoYXJlZF9jb3VudEUAAAAAMPgBABT2AQBOU3QzX18yMTlfX3NoYXJlZF93ZWFrX2NvdW50RQAAALT4AQA49gEAAAAAAAEAAAAw9gEAAAAAAE4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAAAAAFj4AQBw9gEAMPoBAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQAAAFj4AQCg9gEAlPYBAE4xMF9fY3h4YWJpdjExN19fcGJhc2VfdHlwZV9pbmZvRQAAAFj4AQDQ9gEAlPYBAE4xMF9fY3h4YWJpdjExOV9fcG9pbnRlcl90eXBlX2luZm9FAFj4AQAA9wEA9PYBAE4xMF9fY3h4YWJpdjEyMF9fZnVuY3Rpb25fdHlwZV9pbmZvRQAAAABY+AEAMPcBAJT2AQBOMTBfX2N4eGFiaXYxMjlfX3BvaW50ZXJfdG9fbWVtYmVyX3R5cGVfaW5mb0UAAABY+AEAZPcBAPT2AQAAAAAA5PcBAC4DAAAvAwAAMAMAADEDAAAyAwAATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAFj4AQC89wEAlPYBAHYAAACo9wEA8PcBAERuAACo9wEA/PcBAGMAAACo9wEACPgBAFBLYwAQ+QEAFPgBAAEAAAAM+AEAAAAAAMT2AQAuAwAAMwMAADADAAAxAwAANAMAADUDAAA2AwAANwMAAAAAAACg+AEALgMAADgDAAAwAwAAMQMAADQDAAA5AwAAOgMAADsDAABOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UAAAAAWPgBAHj4AQDE9gEAAAAAAPz4AQAuAwAAPAMAADADAAAxAwAANAMAAD0DAAA+AwAAPwMAAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0UAAABY+AEA1PgBAMT2AQAAAAAAJPcBAC4DAABAAwAAMAMAADEDAABBAwAAAAAAAIj5AQBAAAAAQgMAAEMDAAAAAAAAsPkBAEAAAABEAwAARQMAAAAAAABw+QEAQAAAAEYDAABHAwAAU3Q5ZXhjZXB0aW9uAAAAADD4AQBg+QEAU3Q5YmFkX2FsbG9jAAAAAFj4AQB4+QEAcPkBAFN0MjBiYWRfYXJyYXlfbmV3X2xlbmd0aAAAAABY+AEAlPkBAIj5AQAAAAAA4PkBAD8AAABIAwAASQMAAFN0MTFsb2dpY19lcnJvcgBY+AEA0PkBAHD5AQAAAAAAFPoBAD8AAABKAwAASQMAAFN0MTJsZW5ndGhfZXJyb3IAAAAAWPgBAAD6AQDg+QEAU3Q5dHlwZV9pbmZvAAAAADD4AQAg+gEAQcD0BwsXTwYAAAD+AQANBgAAcPoBAC0GAABA+wEAQeD0BwsHAQAAAJD6AQBB8PQHCxHLCwAAYPoBAAIAAAADAAAAAQBBlPUHCw+VDgAAAAAAAHj6AQCA+gEAQbj1BwsqBgAAAAcAAAAAAAAAGAEAAEABAAC4AAAACkwAACIyAAAhUAAAOAkAAHk5AEHw9QcLGQEAAAACAAAAAwAAAAQAAAAFAAAAAAAAAAsAQZT2BwsBDABBoPYHCwENAEGw9gcLBwEAAACQ+wEAQcD2BwuXAtYLAAAw+wEADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAPAAAAGQAAAA8AAAAaAAAAGwAAABwAAAAdAAAAAAAAAMEuAAAAAAAASPsBAHCnAgABAAAAmi0AAAAAAABQ+wEAcKcCAAIAAACZLQAAAAAAAFj7AQBwpwIAAwAAALo6AAAAAAAAYPsBAHCnAgAEAAAAiC8AAAAAAABo+wEAcKcCAAUAAABWOQAAAAAAAID7AQBwpwIABgAAAJ1OAAAAAAAAiPsBAHCnAgAHAAAAkywAAAAAAABw+wEAcKcCAAcAAACStAAAAAAAAHD7AQBwpwIACAAAAD6mAAAAAAAAePsBAHCnAgBB7PgHC1EIAAAABAAAAAAAAAAgAAAAIQAAACIAAAAAAAAACAAAAAwAAAAlAAAAAAAAACYAAAAAAAAAPAAAAAAAAAAzMzMzMzPTPwAAAAAAAPg/CAAAAAQAQcz5BwshMwAAAAgAAAAwAAAAAAAAADkAAAAhAAAAOgAAADsAAAA8AEH4+QcL/wEQ/QEAQgAAAEMAAABEAAAARQAAAEYAAABY+AEAsDsBAFj2AQAAAAAAVP0BAEgAAABJAAAASgAAAEsAAAAAAAAATP0BAEwAAABNAAAATgAAAE8AAAAw+AEA+TsBAFj4AQD/OwEATP0BAAMAAADw/wEAAwAAAEAEAgADAAAAoAUCAAMAAABwBwIAAwAAADALAgADAAAAkAICAAMAAABwDAIAAwAAAKAQAgADAAAAgA8CAAAAAACw/wEAAAAAABAEAgAAAAAAAAUCAAAAAADQBgIAAAAAAPAKAgAAAAAAIAICAAAAAABADAIAAAAAAEAQAgAAAAAAUA8CAAQAAADwEAIAQYD8BwsHnEoAAGD9AQBBkPwHCwVSAAAAUwBBiP0HCwVSAAAAUwBBpP0HCwFUAEG8/QcLCVUAAAAAAAAAVgBB2P0HCxVXAAAAAAAAAFgAAABZAAAAWgAAAFsAQfn9BwsBIABBkP4HCwsEAAAAAAAAAAAgwQBBsP4HCwEBAEG7/gcLAQQAQeb+BwsKUkAAAAAAAABSQABBnv8HCwpSQAAAAAAAAFJAAEG0/wcLI5UOAAABAAAACP4BAPj+AQAEAAAAHg4AAAEAAACA/gEAGP8BAEH0/wcLmwFEDgAAAQAAAAAAAABw/wEAAAAAAC8OAAABAAAAAAAAAHD/AQABAAAAVA4AAAEAAAAAAAAAOP8BAAIAAABeDgAAAQAAAAAAAABw/wEAAwAAADYOAAABAAAAAAAAAHD/AQAEAAAAvw0AAAEAAAAAAAAAcP8BAAUAAAAWDgAAAQAAAAAAAABw/wEABgAAAAkOAAABAAAAAAAAAHD/AQBBtoEIC2fwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAF0AAABeAEGJgwgLAiDBAEGggwgLAQQAQauDCAsBBABB1oMICwpSQAAAAAAAAFJAAEGOhAgLClJAAAAAAAAAUkAAQaSECAtLUDAAAAEAAAAQAQIAiAECAAEAAAB8xAAAAQAAABABAgCIAQIAAgAAADIwAAABAAAAEAECAIgBAgADAAAAMTAAAAEAAAAQAQIAiAECAEGUhQgLS0AwAAABAAAAAAAAAOABAgABAAAASjAAAAEAAAAAAAAA4AECAAIAAAA8MAAAAQAAAAAAAACoAQIAAwAAADswAAABAAAAAAAAAKgBAgBB9IUICxEIAAAA/////wAAAAAAAAAAXwBBlIYICwVgAAAAYQBBpIYICwFiAEHEhggLDWMAAABkAAAAZQAAAGYAQeSGCAsZZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQBBkIcICyJtOgAAkUcAAF80AAAxNAAA0F8AANRWAADPSAAALwoAAAIQAEG+hwgLFBBAkAMCAAgAAAABAAAAAAAAAAIQAEH9hwgLC4CWQAAAAAAAgJZAAEGUiAgLD3VBAAABAAAADAMCALADAgBBxIgICw9YQQAAAQAAAAAAAADQAwIAQYCJCAsFbgAAAG8AQbCJCAsBcABB4IkICwMEkMMAQe6JCAsCEEAAQYCKCAsTAQAAACwuAAABAAAAaAQCAOAEAgBB1ooICw1YQAAAAAAAAFhAAAAMAEGOiwgLiQFYQAAAAAAAAFhAAAAAAAAAAAABAAAA4y0AAAEAAAAAAAAAKAUCAAIAAAD2LQAAAQAAAAAAAABgBQIAAAAAAO0tAAABAAAAAAAAAGAFAgADAAAAuC0AAAEAAAAAAAAAYAUCAAAAAADXLQAAAQAAAAAAAAAoBQIAAwAAAMotAAABAAAAAAAAACgFAgBBrIwICyVxAAAAcgAAAHMAAAAAAAAAdAAAAAAAAAB1AAAAdgAAAHcAAAB4AEHkjAgLEXkAAAB6AAAAewAAAHwAAAB9AEGEjQgLKH4AAAAAAAAAfwAAAIAAAACBAAAAggAAAIMAAACEAAAAAAAAAAAgAwIAQbaNCAsCEEAAQdSNCAsPWRUAAAEAAAAsBgIAqAYCAEH4jQgLAWAAQYaOCAsqQkAAAAAAAABCQAAAAAAAIINAAAAAAADAiEAAAAAAAABSQAAAAAAAAFJAAEG+jggLKkJAAAAAAAAAQkAAAAAAACCDQAAAAAAAwIhAAAAAAAAAUkAAAAAAAABSQABB9I4ICzdGFQAAAQAAAAAAAAD4BgIAAQAAAEwVAAABAAAAAAAAAPgGAgACAAAARRUAAAEAAAAAAAAAMAcCAEHAjwgLLQ4eAAAAAAAAhQAAAAAAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQBBgJAICxWOAAAAjwAAAJAAAACRAAAAkgAAAJMAQaCQCAvzBJQAAAAAAAAAlQAAAJYAAACXAAAAmAAAAJkAAAAAAAAAgkcAAL1IAACrXwAAZEsAAFVKAAAwTgAAaUUAAJA8AQAMUgAAkUcAAGwQAADbLwAAhlEAAJdGAABhSQAAPkkAAGc4AACmRgAAGDoAACkwAABfNAAAJUcAAFE0AABRUQAA2QcAAG8zAAAOBwAAATsAAL9fAACmMwAAFE4AAHtUAAA3VgAAqTAAAAg0AABgRwAA+wcAADAHAAAaSgAAXBAAALg5AABIRgAAzAcAAAEHAAC6RgAAUToAAKxIAAAyMwAAkGAAANEuAACLSAAAwFMAAHdRAAAtCAAAMTQAAAQKAABiBwAAEgsAAJw5AAAoVgAALy8AAOgFAAAQOwAA2RwAAGg8AABgMwAA7TEAAIhGAABXOAAAQjQAABUKAAC9BwAAQzMAAPIGAACpOQAAmDAAAOEzAAA2RgAA5wcAABwHAADzRgAA8wkAAOxLAAC6MwAA3DIAANBfAACMMAAATksAAONGAABpVAAAtEwAAPQzAABLRwAAfjMAAAVKAACTVQAAdkYAAD42AACfSQAAFTIAAJtIAACSBAAA3FAAABNFAACVXwAAJE4AAIpWAACLVAAAZFEAAMkzAAAtSgAAqFUAACktAACZQgAAZwsAAM85AADCNQAAykYAABBNAADUVgAAnS8AABZHAADKLwAAuTAAAKwvAAAaNAAA9zYAAFZgAACtGwAAWUYAAHNHAAAOCAAAQwcAAMgJAACVMwAAB0cAAHg0AADyOAAAoUwAALouAACpPAEAQEoAAHwQAACeEgAAz0gAAPVNAAAvCgAADzMAAACwwQBBnpUICxQQQEAIAgCUAAAAAQAAAAAAAABAAQBB3pUICwpSQAAAAAAAAFJAAEH0lQgLI1A/AAABAAAAyAcCAJAKAgACAAAAyUsAAAEAAADIBwIAkAoCAEG0lggLIxQ/AAABAAAAAAAAALAKAgACAAAART8AAAEAAAAAAAAAsAoCAEHslggLCZoAAAAAAAAAmwBBpJcICwmcAAAAAAAAAJ0AQcSXCAsZngAAAAAAAACfAAAAoAAAAKEAAACiAAAAowBB6ZcICwMQAAIAQfaXCAsLEEAAAAAAAAAAAAQAQbaYCAsdWEAAAAAAAABYQAAAAABTOQAAAQAAAGwLAgDoCwIAQfSYCAsPSTkAAAEAAAAAAAAACAwCAEGYmQgLJaQAAAAAAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAQdCZCAsNrQAAAK4AAACvAAAAsABB8JkIC4wEsQAAAAAAAACyAAAAswAAALQAAAC1AAAAtgAAAAAAAABkSwAArlkAAG06AACRRwAAbBAAAHkUAACoUwAAt0MAACqnAADbLwAAl0YAAKMdAAAqHAAALhwAAGc4AACmRgAAXzQAALsvAABvMwAApjMAAHtUAADBTAAAYEcAAPsHAAAwBwAAazQAABpKAAClUQAAHBwAAJBJAAB4HQAAUToAAHY8AAAyMwAAwFMAAHdRAACHgwAA9cUAAHuDAADnxQAAbYMAANHFAABfgwAAtMUAAFGDAACmxQAAQ4MAAJjFAAA1gwAAEsUAACeDAAD3xAAAFIMAAOTEAAABgwAAMTQAAB4cAAAECgAATjMAAChWAAAQOwAAiEYAAOlMAADzRgAAkFEAALozAADQXwAAAE4AAIwwAABOSwAA40YAABszAAA8UQAAaVQAAPQzAABLRwAAfjMAAAVKAACTVQAAmlEAAPZMAADoYAAAdkYAAJIEAAAoRgAA1UYAAME5AABhRgAAZDQAALNTAAAkTgAAilYAAItUAADJMwAAzzkAAMI1AABHBAAA1FYAAC5HAAC5MAAATxAAABo0AAC5WQAAVmAAAK0bAABZRgAAc0cAAI05AACVMwAAB0cAALsGAAB4NAAAoUwAAEBKAAC3LwAA5EwAAHwQAACsVQAAnhIAAM9IAAAvCgAADzMAAEAgPgMAQYaeCAsUEEAQDQIAegAAAAEAAAAAAAAAAAEAQcaeCAsdUkAAAAAAAABSQAAAAAAwCwAAAQAAAJgMAgD4DgIAQYSfCAsPLAsAAAEAAAAAAAAAGA8CAEGwnwgLBbcAAAC4AEHAnwgLBbkAAAC6AEGAoAgLGbsAAAAAAAAAvAAAAL0AAAC+AAAAvwAAAMAAQa6gCAsCEEAAQcSgCAsP6FkAAP////+oDwIAIBACAEGWoQgLHVJAAAAAAAAAUkAAAAAA5FkAAP////8AAAAAaBACAEHIoQgLHcIAAADDAAAAxAAAAMUAAADGAAAAxwAAAMgAAADJAEHwoQgLowUPAAAAJD8AAAEAAADIEAIAAAAAABAAAAA1PwAAAQAAAMgQAgAAAAAAEQAAACw/AAABAAAAyBACAAAAAAARAAAAPT8AAAEAAADIEAIAAAAAABEAAAAcPwAAAQAAAMgQAgAAAAAAEwAAAFBBAAABAAAAzBACAAAAAAAUAAAAaUEAAAEAAADMEAIAAAAAABUAAABgQQAAAQAAAMwQAgAAAAAAFQAAAHFBAAABAAAAzBACAAAAAAAVAAAASEEAAAEAAADMEAIAAAAAABYAAADDNgAAAQAAANAQAgAAAAAAFwAAANY2AAABAAAA0BACAAAAAAAYAAAAzDYAAAEAAADQEAIAAAAAABgAAADfNgAAAQAAANAQAgAAAAAAGAAAALo2AAABAAAA0BACAAAAAAAZAAAARRUAAAEAAADUEAIAAAAAABkAAABGFQAAAQAAANQQAgAAAAAAGgAAAFMVAAABAAAA2BACAAAAAAAKAAAADy4AAAEAAADcEAIAAAAAAAsAAAAgLgAAAQAAANwQAgAAAAAADAAAABcuAAABAAAA3BACAAAAAAAMAAAAKC4AAAEAAADcEAIAAAAAAAwAAAAHLgAAAQAAANwQAgAAAAAADgAAAMMtAAABAAAA3BACAAAAAAAOAAAAwi0AAAEAAADcEAIAAAAAAA0AAAD/LQAAAQAAANwQAgAAAAAABQAAAHgOAAABAAAA3BACAAAAAAAGAAAAiQ4AAAEAAADcEAIAAAAAAAcAAACADgAAAQAAANwQAgAAAAAABwAAAJEOAAABAAAA3BACAAAAAAAHAAAAcA4AAAEAAADcEAIAAAAAAAkAAABNDgAAAQAAANwQAgAAAAAACQAAAEwOAAABAAAA3BACAAAAAAAIAAAAaA4AAAEAAADcEAIAQZynCAu/AeQNAAABAAAA4BACAAAAAAABAAAA9w0AAAEAAADgEAIAAAAAAAIAAADtDQAAAQAAAOAQAgAAAAAAAgAAAAAOAAABAAAA4BACAAAAAAACAAAA2w0AAAEAAADgEAIAAAAAAAQAAADKDQAAAQAAAOAQAgAAAAAABAAAAMkNAAABAAAA4BACAAAAAAADAAAA0g0AAAEAAADgEAIAAAAAABIAAAAUPwAAAQAAAMgQAgAAAAAAGwAAAE85AAABAAAA5BACAEGAqQgLMS05OTk5OTk5OTk5OTk5OTkuOTkAZgQAAFzHAAA9mwAACAAAAP////8AAAAAAAAAAMwAQcCpCAvj6wHtwAAAVV3Jf8l//wDWsQAAuy3Uvq7U/wDOowAAFHf9/cCG/wCNvwAAVV3Jf8l//wB2sAAAuy3Uvq7U/wBuogAAFHf9/cCG/wDElQAAKmb///+Z/wAtvgAAVV3Jf8l//wAWrwAAuy3Uvq7U/wAOoQAAFHf9/cCG/wBklAAAKmb///+Z/wAwiQAAl62wOGyw/wDNvAAAVV3Jf8l//wC2rQAAuy3Uvq7U/wCunwAAFHf9/cCG/wAEkwAAKmb///+Z/wDQhwAAl62wOGyw/wCtgAAA6Pzw8AJ//wBtuwAAVV3Jf8l//wBWrAAAuy3Uvq7U/wBOngAAFHf9/cCG/wCkkQAAKmb///+Z/wBwhgAAl62wOGyw/wBNfwAA6Pzw8AJ//wCSeQAAEeC/v1sX/wANugAAVV3Jf8l//wD2qgAAuy3Uvq7U/wDunAAAFHf9/cCG/wBEkAAAKmb///+Z/wAQhQAAl62wOGyw/wDtfQAA6Pzw8AJ//wAyeAAAEeC/v1sX/wDNcwAAAABmZmZm/wANwQAAkxn33uv3/wD2sQAAjkvhnsrh/wDuowAAkby9MYK9/wCtvwAAnxD/7/P//wCWsAAAjy7nvdfn/wCOogAAj3/Wa67W/wDklQAAk9C1IXG1/wBNvgAAnxD/7/P//wA2rwAAjy7nvdfn/wAuoQAAj3/Wa67W/wCElAAAkby9MYK9/wBQiQAAlfGcCFGc/wDtvAAAnxD/7/P//wDWrQAAlCvvxtvv/wDOnwAAjkvhnsrh/wAkkwAAj3/Wa67W/wDwhwAAkby9MYK9/wDNgAAAlfGcCFGc/wCNuwAAnxD/7/P//wB2rAAAlCvvxtvv/wBungAAjkvhnsrh/wDEkQAAj3/Wa67W/wCQhgAAkKnGQpLG/wBtfwAAk9C1IXG1/wCyeQAAl/GUCEWU/wAtugAAlAj/9/v//wAWqwAAkxn33uv3/wAOnQAAlCvvxtvv/wBkkAAAjkvhnsrh/wAwhQAAj3/Wa67W/wANfgAAkKnGQpLG/wBSeAAAk9C1IXG1/wDtcwAAl/GUCEWU/wDsuAAAlAj/9/v//wDVqQAAkxn33uv3/wDNmwAAlCvvxtvv/wAjjwAAjkvhnsrh/wDvgwAAj3/Wa67W/wDMfAAAkKnGQpLG/wARdwAAk9C1IXG1/wCscgAAlfGcCFGc/wCbbwAAmOtrCDBr/wDnwgAAF+9UVDAF/wAExwAAd/88ADww/wDQswAAF+yMjFEK/wDIpQAAGMK/v4Et/wC+lwAAHXDf38J9/wAqiwAAHjT29ujD/wCnggAAeSbqx+rl/wCMewAAeF/NgM3B/wDHdQAAfKWXNZeP/wBWcQAAfPxmAWZe/wBvwgAAF+9UVDAF/wCBxgAAfPxmAWZe/wBOuAAAd/88ADww/wBYswAAF+yMjFEK/wBQpQAAGMK/v4Et/wBGlwAAHXDf38J9/wCyigAAHjT29ujD/wAvggAAAAD19fX1/wAUewAAeSbqx+rl/wBPdQAAeF/NgM3B/wDecAAAfKWXNZeP/wCTwQAAHIfY2LNl/wB8sgAAAAD19fX1/wB0pAAAe3+0WrSs/wAzwAAAFdempmEa/wAcsQAAHXDf38J9/wAUowAAeF/NgM3B/wBqlgAAef2FAYVx/wDTvgAAFdempmEa/wC8rwAAHXDf38J9/wC0oQAAAAD19fX1/wAKlQAAeF/NgM3B/wDWiQAAef2FAYVx/wBzvQAAF+yMjFEK/wBcrgAAHIfY2LNl/wBUoAAAHjT29ujD/wCqkwAAeSbqx+rl/wB2iAAAe3+0WrSs/wBTgQAAfPxmAWZe/wATvAAAF+yMjFEK/wD8rAAAHIfY2LNl/wD0ngAAHjT29ujD/wBKkgAAAAD19fX1/wAWhwAAeSbqx+rl/wDzfwAAe3+0WrSs/wA4egAAfPxmAWZe/wCzugAAF+yMjFEK/wCcqwAAGMK/v4Et/wCUnQAAHXDf38J9/wDqkAAAHjT29ujD/wC2hQAAeSbqx+rl/wCTfgAAeF/NgM3B/wDYeAAAfKWXNZeP/wBzdAAAfPxmAWZe/wByuQAAF+yMjFEK/wBbqgAAGMK/v4Et/wBTnAAAHXDf38J9/wCpjwAAHjT29ujD/wB1hAAAAAD19fX1/wBSfQAAeSbqx+rl/wCXdwAAeF/NgM3B/wAycwAAfKWXNZeP/wAhcAAAfPxmAWZe/wBXwQAAhxT55fX5/wBAsgAAdUrYmdjJ/wA4pAAAZ7miLKJf/wD3vwAAiA777fj7/wDgsAAAfzbisuLi/wDYogAAcXjCZsKk/wAulgAAYr6LI4tF/wCXvgAAiA777fj7/wCArwAAfzbisuLi/wB4oQAAcXjCZsKk/wDOlAAAZ7miLKJf/wCaiQAAZv9tAG0s/wA3vQAAiA777fj7/wAgrgAAdyLszOzm/wAYoAAAdUrYmdjJ/wBukwAAcXjCZsKk/wA6iAAAZ7miLKJf/wAXgQAAZv9tAG0s/wDXuwAAiA777fj7/wDArAAAdyLszOzm/wC4ngAAdUrYmdjJ/wAOkgAAcXjCZsKk/wDahgAAaZ+uQa52/wC3fwAAYr6LI4tF/wD8eQAAZv9YAFgk/wB3ugAAhgb99/z9/wBgqwAAhxT55fX5/wBYnQAAdyLszOzm/wCukAAAdUrYmdjJ/wB6hQAAcXjCZsKk/wBXfgAAaZ+uQa52/wCceAAAYr6LI4tF/wA3dAAAZv9YAFgk/wA2uQAAhgb99/z9/wAfqgAAhxT55fX5/wAXnAAAdyLszOzm/wBtjwAAdUrYmdjJ/wA5hAAAcXjCZsKk/wAWfQAAaZ+uQa52/wBbdwAAYr6LI4tF/wD2cgAAZv9tAG0s/wDlbwAAZf9EAEQb/wCqwAAAkBT04Oz0/wCTsQAAlEbanrza/wCLowAAxHuniFan/wBKvwAAiA777fj7/wAzsAAAkjXjs83j/wArogAAokrGjJbG/wCBlQAAypWdiEGd/wDqvQAAiA777fj7/wDTrgAAkjXjs83j/wDLoAAAokrGjJbG/wAhlAAAxHuniFan/wDtiAAA1uGBgQ98/wCKvAAAiA777fj7/wBzrQAAlCvmv9Pm/wBrnwAAlEbanrza/wDBkgAAokrGjJbG/wCNhwAAxHuniFan/wBqgAAA1uGBgQ98/wAquwAAiA777fj7/wATrAAAlCvmv9Pm/wALngAAlEbanrza/wBhkQAAokrGjJbG/wAthgAAvmSxjGux/wAKfwAAypWdiEGd/wBPeQAA1fxubgFr/wDKuQAAhgb99/z9/wCzqgAAkBT04Oz0/wCrnAAAlCvmv9Pm/wABkAAAlEbanrza/wDNhAAAokrGjJbG/wCqfQAAvmSxjGux/wDvdwAAypWdiEGd/wCKcwAA1fxubgFr/wCUuAAAhgb99/z9/wB9qQAAkBT04Oz0/wB1mwAAlCvmv9Pm/wDLjgAAlEbanrza/wCXgwAAokrGjJbG/wB0fAAAvmSxjGux/wC5dgAAypWdiEGd/wBUcgAA1uGBgQ98/wBDbwAA1f9NTQBL/wDiwQAActOeG553/wDLsgAAEvzZ2V8C/wDDpAAArV+zdXCz/wCCwAAActOeG553/wBrsQAAEvzZ2V8C/wBjowAArV+zdXCz/wC5lgAA6dHn5ymK/wAivwAActOeG553/wALsAAAEvzZ2V8C/wADogAArV+zdXCz/wBZlQAA6dHn5ymK/wAligAAPtCmZqYe/wDCvQAActOeG553/wCrrgAAEvzZ2V8C/wCjoAAArV+zdXCz/wD5kwAA6dHn5ymK/wDFiAAAPtCmZqYe/wCigQAAH/zm5qsC/wBivAAActOeG553/wBLrQAAEvzZ2V8C/wBDnwAArV+zdXCz/wCZkgAA6dHn5ymK/wBlhwAAPtCmZqYe/wBCgAAAH/zm5qsC/wCHegAAG9KmpnYd/wACuwAActOeG553/wDrqwAAEvzZ2V8C/wDjnQAArV+zdXCz/wA5kQAA6dHn5ymK/wAFhgAAPtCmZqYe/wDifgAAH/zm5qsC/wAneQAAG9KmpnYd/wDCdAAAAABmZmZm/wDQwAAATBnz4PPb/wC5sQAAXz3dqN21/wCxowAAjKrKQ6LK/wBwvwAAQRH58Pno/wBZsAAAVy7kuuS8/wBRogAAe2XMe8zE/wCnlQAAjcW+K4y+/wAQvgAAQRH58Pno/wD5rgAAVy7kuuS8/wDxoAAAe2XMe8zE/wBHlAAAjKrKQ6LK/wATiQAAkfOsCGis/wCwvAAAQRH58Pno/wCZrQAATSnrzOvF/wCRnwAAXz3dqN21/wDnkgAAe2XMe8zE/wCzhwAAjKrKQ6LK/wCQgAAAkfOsCGis/wBQuwAAQRH58Pno/wA5rAAATSnrzOvF/wAxngAAXz3dqN21/wCHkQAAe2XMe8zE/wBThgAAiaDTTrPT/wAwfwAAjcW+K4y+/wB1eQAAk/KeCFie/wDwuQAAPAz89/zw/wDZqgAATBnz4PPb/wDRnAAATSnrzOvF/wAnkAAAXz3dqN21/wDzhAAAe2XMe8zE/wDQfQAAiaDTTrPT/wAVeAAAjcW+K4y+/wCwcwAAk/KeCFie/wC6uAAAPAz89/zw/wCjqQAATBnz4PPb/wCbmwAATSnrzOvF/wDxjgAAXz3dqN21/wC9gwAAe2XMe8zE/wCafAAAiaDTTrPT/wDfdgAAjcW+K4y+/wB6cgAAkfOsCGis/wBpbwAAlu+BCECB/wACwQAAShX15fXg/wDrsQAAUEjZodmb/wDjowAAYrKjMaNU/wCivwAASQ/47fjp/wCLsAAATjbkuuSz/wCDogAAVmjEdMR2/wDZlQAAYr6LI4tF/wBCvgAASQ/47fjp/wArrwAATjbkuuSz/wAjoQAAVmjEdMR2/wB5lAAAYrKjMaNU/wBFiQAAZv9tAG0s/wDivAAASQ/47fjp/wDLrQAATSzpx+nA/wDDnwAAUEjZodmb/wAZkwAAVmjEdMR2/wDlhwAAYrKjMaNU/wDCgAAAZv9tAG0s/wCCuwAASQ/47fjp/wBrrAAATSzpx+nA/wBjngAAUEjZodmb/wC5kQAAVmjEdMR2/wCFhgAAYJ6rQatd/wBifwAAYr6LI4tF/wCneQAAbP9aAFoy/wAiugAASAf89/z1/wALqwAAShX15fXg/wADnQAATSzpx+nA/wBZkAAAUEjZodmb/wAlhQAAVmjEdMR2/wACfgAAYJ6rQatd/wBHeAAAYr6LI4tF/wDicwAAbP9aAFoy/wDhuAAASAf89/z1/wDKqQAAShX15fXg/wDCmwAATSzpx+nA/wAYjwAAUEjZodmb/wDkgwAAVmjEdMR2/wDBfAAAYJ6rQatd/wAGdwAAYr6LI4tF/wChcgAAZv9tAG0s/wCQbwAAZf9EAEQb/wD4wAAAAADw8PDw/wDhsQAAAAC9vb29/wDZowAAAABjY2Nj/wCYvwAAAAD39/f3/wCBsAAAAADMzMzM/wB5ogAAAACWlpaW/wDPlQAAAABSUlJS/wA4vgAAAAD39/f3/wAhrwAAAADMzMzM/wAZoQAAAACWlpaW/wBvlAAAAABjY2Nj/wA7iQAAAAAlJSUl/wDYvAAAAAD39/f3/wDBrQAAAADZ2dnZ/wC5nwAAAAC9vb29/wAPkwAAAACWlpaW/wDbhwAAAABjY2Nj/wC4gAAAAAAlJSUl/wB4uwAAAAD39/f3/wBhrAAAAADZ2dnZ/wBZngAAAAC9vb29/wCvkQAAAACWlpaW/wB7hgAAAABzc3Nz/wBYfwAAAABSUlJS/wCdeQAAAAAlJSUl/wAYugAAAAD//////wABqwAAAADw8PDw/wD5nAAAAADZ2dnZ/wBPkAAAAAC9vb29/wAbhQAAAACWlpaW/wD4fQAAAABzc3Nz/wA9eAAAAABSUlJS/wDYcwAAAAAlJSUl/wDXuAAAAAD//////wDAqQAAAADw8PDw/wC4mwAAAADZ2dnZ/wAOjwAAAAC9vb29/wDagwAAAACWlpaW/wC3fAAAAABzc3Nz/wD8dgAAAABSUlJS/wCXcgAAAAAlJSUl/wCGbwAAAAAAAAAA/wAjwQAAFTD+/ubO/wAMsgAAE5P9/a5r/wAEpAAADvDm5lUN/wDDvwAAEyD+/u3e/wCssAAAFHj9/b6F/wCkogAAEcL9/Y08/wD6lQAADf3Z2UcB/wBjvgAAEyD+/u3e/wBMrwAAFHj9/b6F/wBEoQAAEcL9/Y08/wCalAAADvDm5lUN/wBmiQAADfqmpjYD/wADvQAAEyD+/u3e/wDsrQAAFVv9/dCi/wDknwAAE5P9/a5r/wA6kwAAEcL9/Y08/wAGiAAADvDm5lUN/wDjgAAADfqmpjYD/wCjuwAAEyD+/u3e/wCMrAAAFVv9/dCi/wCEngAAE5P9/a5r/wDakQAAEcL9/Y08/wCmhgAAEOrx8WkT/wCDfwAADf3Z2UgB/wDIeQAADPeMjC0E/wBDugAAFRT///Xr/wAsqwAAFTD+/ubO/wAknQAAFVv9/dCi/wB6kAAAE5P9/a5r/wBGhQAAEcL9/Y08/wAjfgAAEOrx8WkT/wBoeAAADf3Z2UgB/wADdAAADPeMjC0E/wACuQAAFRT///Xr/wDrqQAAFTD+/ubO/wDjmwAAFVv9/dCi/wA5jwAAE5P9/a5r/wAFhAAAEcL9/Y08/wDifAAAEOrx8WkT/wAndwAADf3Z2UgB/wDCcgAADfqmpjYD/wCxbwAADPZ/fycE/wCwwQAAGTb+/ujI/wCZsgAAE3n9/buE/wCRpAAABcXj40oz/wBQwAAAGiX+/vDZ/wA5sQAAGHP9/cyK/wAxowAADaT8/I1Z/wCHlgAAA9rX1zAf/wDwvgAAGiX+/vDZ/wDZrwAAGHP9/cyK/wDRoQAADaT8/I1Z/wAnlQAABcXj40oz/wDziQAAAP+zswAA/wCQvQAAGiX+/vDZ/wB5rgAAGF/9/dSe/wBxoAAAE3n9/buE/wDHkwAADaT8/I1Z/wCTiAAABcXj40oz/wBwgQAAAP+zswAA/wAwvAAAGiX+/vDZ/wAZrQAAGF/9/dSe/wARnwAAE3n9/buE/wBnkgAADaT8/I1Z/wAzhwAAB7Lv72VI/wAQgAAAA9rX1zAf/wBVegAAAP+ZmQAA/wDQugAAGBL///fs/wC5qwAAGTb+/ujI/wCxnQAAGF/9/dSe/wAHkQAAE3n9/buE/wDThQAADaT8/I1Z/wCwfgAAB7Lv72VI/wD1eAAAA9rX1zAf/wCQdAAAAP+ZmQAA/wCPuQAAGBL///fs/wB4qgAAGTb+/ujI/wBwnAAAGF/9/dSe/wDGjwAAE3n9/buE/wCShAAADaT8/I1Z/wBvfQAAB7Lv72VI/wC0dwAAA9rX1zAf/wBPcwAAAP+zswAA/wA+cAAAAP9/fwAA/wDxwgAAjkTjps7j/wAPxwAAvpmaaj2a/wDaswAAkNO0H3i0/wDSpQAAQWHfst+K/wDIlwAAUrigM6As/wA0iwAAAGP7+5qZ/wCxggAA/uHj4xoc/wCWewAAF4/9/b9v/wDRdQAAFf///38A/wBgcQAAxirWyrLW/wB5wgAAjkTjps7j/wCMxgAAvpmaaj2a/wBZuAAAKmb///+Z/wBiswAAkNO0H3i0/wBapQAAQWHfst+K/wBQlwAAUrigM6As/wC8igAAAGP7+5qZ/wA5ggAA/uHj4xoc/wAeewAAF4/9/b9v/wBZdQAAFf///38A/wDocAAAxirWyrLW/wABwgAAjkTjps7j/wAJxgAAvpmaaj2a/wDWtwAAKmb///+Z/wBcqQAAD8WxsVko/wDqsgAAkNO0H3i0/wDipAAAQWHfst+K/wDYlgAAUrigM6As/wBEigAAAGP7+5qZ/wDBgQAA/uHj4xoc/wCmegAAF4/9/b9v/wDhdAAAFf///38A/wBwcAAAxirWyrLW/wC5wQAAjkTjps7j/wCisgAAkNO0H3i0/wCapAAAQWHfst+K/wBZwAAAjkTjps7j/wBCsQAAkNO0H3i0/wA6owAAQWHfst+K/wCQlgAAUrigM6As/wD5vgAAjkTjps7j/wDirwAAkNO0H3i0/wDaoQAAQWHfst+K/wAwlQAAUrigM6As/wD8iQAAAGP7+5qZ/wCZvQAAjkTjps7j/wCCrgAAkNO0H3i0/wB6oAAAQWHfst+K/wDQkwAAUrigM6As/wCciAAAAGP7+5qZ/wB5gQAA/uHj4xoc/wA5vAAAjkTjps7j/wAirQAAkNO0H3i0/wAanwAAQWHfst+K/wBwkgAAUrigM6As/wA8hwAAAGP7+5qZ/wAZgAAA/uHj4xoc/wBeegAAF4/9/b9v/wDZugAAjkTjps7j/wDCqwAAkNO0H3i0/wC6nQAAQWHfst+K/wAQkQAAUrigM6As/wDchQAAAGP7+5qZ/wC5fgAA/uHj4xoc/wD+eAAAF4/9/b9v/wCZdAAAFf///38A/wCYuQAAjkTjps7j/wCBqgAAkNO0H3i0/wB5nAAAQWHfst+K/wDPjwAAUrigM6As/wCbhAAAAGP7+5qZ/wB4fQAA/uHj4xoc/wC9dwAAF4/9/b9v/wBYcwAAFf///38A/wBHcAAAxirWyrLW/wD1wQAAA077+7Su/wDesgAAkjXjs83j/wDWpAAATSnrzOvF/wCVwAAAA077+7Su/wB+sQAAkjXjs83j/wB2owAATSnrzOvF/wDMlgAAyhvk3svk/wA1vwAAA077+7Su/wAesAAAkjXjs83j/wAWogAATSnrzOvF/wBslQAAyhvk3svk/wA4igAAGFj+/tmm/wDVvQAAA077+7Su/wC+rgAAkjXjs83j/wC2oAAATSnrzOvF/wAMlAAAyhvk3svk/wDYiAAAGFj+/tmm/wC1gQAAKjL////M/wB1vAAAA077+7Su/wBerQAAkjXjs83j/wBWnwAATSnrzOvF/wCskgAAyhvk3svk/wB4hwAAGFj+/tmm/wBVgAAAKjL////M/wCaegAAHCzl5di9/wAVuwAAA077+7Su/wD+qwAAkjXjs83j/wD2nQAATSnrzOvF/wBMkQAAyhvk3svk/wAYhgAAGFj+/tmm/wD1fgAAKjL////M/wA6eQAAHCzl5di9/wDVdAAA6SP9/drs/wC1uQAAA077+7Su/wCeqgAAkjXjs83j/wCWnAAATSnrzOvF/wDsjwAAyhvk3svk/wC4hAAAGFj+/tmm/wCVfQAAKjL////M/wDadwAAHCzl5di9/wB1cwAA6SP9/drs/wBkcAAAAADy8vLy/wDWwQAAbDXis+LN/wC/sgAAEVH9/c2s/wC3pAAAmx/oy9Xo/wB2wAAAbDXis+LN/wBfsQAAEVH9/c2s/wBXowAAmx/oy9Xo/wCtlgAA5Cv09Mrk/wAWvwAAbDXis+LN/wD/rwAAEVH9/c2s/wD3oQAAmx/oy9Xo/wBNlQAA5Cv09Mrk/wAZigAAOC315vXJ/wC2vQAAbDXis+LN/wCfrgAAEVH9/c2s/wCXoAAAmx/oy9Xo/wDtkwAA5Cv09Mrk/wC5iAAAOC315vXJ/wCWgQAAI1H///Ku/wBWvAAAbDXis+LN/wA/rQAAEVH9/c2s/wA3nwAAmx/oy9Xo/wCNkgAA5Cv09Mrk/wBZhwAAOC315vXJ/wA2gAAAI1H///Ku/wB7egAAGSfx8eLM/wD2ugAAbDXis+LN/wDfqwAAEVH9/c2s/wDXnQAAmx/oy9Xo/wAtkQAA5Cv09Mrk/wD5hQAAOC315vXJ/wDWfgAAI1H///Ku/wAbeQAAGSfx8eLM/wC2dAAAAADMzMzM/wDdwgAA5v2OjgFS/wD5xgAATb9kJ2QZ/wDGswAA5tzFxRt9/wC+pQAA6Hbe3neu/wC0lwAA5T7x8bba/wAgiwAA6R39/eDv/wCdggAAOyb15vXQ/wCCewAAPWfhuOGG/wC9dQAAP6a8f7xB/wBMcQAARMWSTZIh/wBlwgAA5v2OjgFS/wB2xgAARMWSTZIh/wBDuAAATb9kJ2QZ/wBOswAA5tzFxRt9/wBGpQAA6Hbe3neu/wA8lwAA5T7x8bba/wCoigAA6R39/eDv/wAlggAAAAD39/f3/wAKewAAOyb15vXQ/wBFdQAAPWfhuOGG/wDUcAAAP6a8f7xB/wCKwQAA50zp6aPJ/wBzsgAAAAD39/f3/wBrpAAAP4HXoddq/wAqwAAA5NzQ0ByL/wATsQAA5T7x8bba/wALowAAPWfhuOGG/wBhlgAASMasTawm/wDKvgAA5NzQ0ByL/wCzrwAA5T7x8bba/wCroQAAAAD39/f3/wABlQAAPWfhuOGG/wDNiQAASMasTawm/wBqvQAA5tzFxRt9/wBTrgAA50zp6aPJ/wBLoAAA6R39/eDv/wChkwAAOyb15vXQ/wBtiAAAP4HXoddq/wBKgQAARMWSTZIh/wAKvAAA5tzFxRt9/wDzrAAA50zp6aPJ/wDrngAA6R39/eDv/wBBkgAAAAD39/f3/wANhwAAOyb15vXQ/wDqfwAAP4HXoddq/wAvegAARMWSTZIh/wCqugAA5tzFxRt9/wCTqwAA6Hbe3neu/wCLnQAA5T7x8bba/wDhkAAA6R39/eDv/wCthQAAOyb15vXQ/wCKfgAAPWfhuOGG/wDPeAAAP6a8f7xB/wBqdAAARMWSTZIh/wBpuQAA5tzFxRt9/wBSqgAA6Hbe3neu/wBKnAAA5T7x8bba/wCgjwAA6R39/eDv/wBshAAAAAD39/f3/wBJfQAAOyb15vXQ/wCOdwAAPWfhuOGG/wApcwAAP6a8f7xB/wAYcAAARMWSTZIh/wC5wgAAzv9LQABL/wDSxgAAZf9EAEQb/wCiswAAzq2DdiqD/wCapQAAx1ermXCr/wCQlwAAxzPPwqXP/wD8igAA0hXo59To/wB5ggAATB7w2fDT/wBeewAAUETbptug/wCZdQAAWHuuWq5h/wAocQAAYcV4G3g3/wBBwgAAzv9LQABL/wBPxgAAYcV4G3g3/wAcuAAAZf9EAEQb/wAqswAAzq2DdiqD/wAipQAAx1ermXCr/wAYlwAAxzPPwqXP/wCEigAA0hXo59To/wABggAAAAD39/f3/wDmegAATB7w2fDT/wAhdQAAUETbptug/wCwcAAAWHuuWq5h/wBgwQAAxEbDr43D/wBJsgAAAAD39/f3/wBBpAAAUlq/f797/wAAwAAAyaiUezKU/wDpsAAAxzPPwqXP/wDhogAAUETbptug/wA3lgAAZv+IAIg3/wCgvgAAyaiUezKU/wCJrwAAxzPPwqXP/wCBoQAAAAD39/f3/wDXlAAAUETbptug/wCjiQAAZv+IAIg3/wBAvQAAzq2DdiqD/wAprgAAxEbDr43D/wAhoAAA0hXo59To/wB3kwAATB7w2fDT/wBDiAAAUlq/f797/wAggQAAYcV4G3g3/wDguwAAzq2DdiqD/wDJrAAAxEbDr43D/wDBngAA0hXo59To/wAXkgAAAAD39/f3/wDjhgAATB7w2fDT/wDAfwAAUlq/f797/wAFegAAYcV4G3g3/wCAugAAzq2DdiqD/wBpqwAAx1ermXCr/wBhnQAAxzPPwqXP/wC3kAAA0hXo59To/wCDhQAATB7w2fDT/wBgfgAAUETbptug/wCleAAAWHuuWq5h/wBAdAAAYcV4G3g3/wA/uQAAzq2DdiqD/wAoqgAAx1ermXCr/wAgnAAAxzPPwqXP/wB2jwAA0hXo59To/wBChAAAAAD39/f3/wAffQAATB7w2fDT/wBkdwAAUETbptug/wD/cgAAWHuuWq5h/wDubwAAYcV4G3g3/wC8wAAAvQvy7Ofy/wClsQAAlz3bpr3b/wCdowAAjcW+K4y+/wBcvwAAuQj28e72/wBFsAAAmyjhvcnh/wA9ogAAkXDPdKnP/wCTlQAAj/ewBXCw/wD8vQAAuQj28e72/wDlrgAAmyjhvcnh/wDdoAAAkXDPdKnP/wAzlAAAjcW+K4y+/wD/iAAAj/eNBFqN/wCcvAAAuQj28e72/wCFrQAAqBjm0NHm/wB9nwAAlz3bpr3b/wDTkgAAkXDPdKnP/wCfhwAAjcW+K4y+/wB8gAAAj/eNBFqN/wA8uwAAuQj28e72/wAlrAAAqBjm0NHm/wAdngAAlz3bpr3b/wBzkQAAkXDPdKnP/wA/hgAAjrfANpDA/wAcfwAAj/ewBXCw/wBheQAAj/h7A057/wDcuQAA6Qj///f7/wDFqgAAvQvy7Ofy/wC9nAAAqBjm0NHm/wATkAAAlz3bpr3b/wDfhAAAkXDPdKnP/wC8fQAAjrfANpDA/wABeAAAj/ewBXCw/wCccwAAj/h7A057/wCmuAAA6Qj///f7/wCPqQAAvQvy7Ofy/wCHmwAAqBjm0NHm/wDdjgAAlz3bpr3b/wCpgwAAkXDPdKnP/wCGfAAAjrfANpDA/wDLdgAAj/ewBXCw/wBmcgAAj/eNBFqN/wBVbwAAj/lYAjhY/wBMwQAAyA7w7OLw/wA1sgAAlz3bpr3b/wAtpAAAgtCZHJCZ/wDsvwAAzwj39u/3/wDVsAAAmyjhvcnh/wDNogAAj4DPZ6nP/wAjlgAAgvuKAoGK/wCMvgAAzwj39u/3/wB1rwAAmyjhvcnh/wBtoQAAj4DPZ6nP/wDDlAAAgtCZHJCZ/wCPiQAAd/xsAWxZ/wAsvQAAzwj39u/3/wAVrgAAqBjm0NHm/wANoAAAlz3bpr3b/wBjkwAAj4DPZ6nP/wAviAAAgtCZHJCZ/wAMgQAAd/xsAWxZ/wDMuwAAzwj39u/3/wC1rAAAqBjm0NHm/wCtngAAlz3bpr3b/wADkgAAj4DPZ6nP/wDPhgAAjrfANpDA/wCsfwAAgvuKAoGK/wDxeQAAdvxkAWRQ/wBsugAA6Qj///f7/wBVqwAAyA7w7OLw/wBNnQAAqBjm0NHm/wCjkAAAlz3bpr3b/wBvhQAAj4DPZ6nP/wBMfgAAjrfANpDA/wCReAAAgvuKAoGK/wAsdAAAdvxkAWRQ/wAruQAA6Qj///f7/wAUqgAAyA7w7OLw/wAMnAAAqBjm0NHm/wBijwAAlz3bpr3b/wAuhAAAj4DPZ6nP/wALfQAAjrfANpDA/wBQdwAAgvuKAoGK/wDrcgAAd/xsAWxZ/wDabwAAdftGAUY2/wCvwgAAEu5/fzsI/wDHxgAAw/9LLQBL/wCYswAAFPazs1gG/wCQpQAAFujg4IIU/wCGlwAAF5v9/bhj/wDyigAAGEj+/uC2/wBvggAApRTr2Nrr/wBUewAAsS/SsqvS/wCPdQAAs1SsgHOs/wAecQAAvbWIVCeI/wA3wgAAEu5/fzsI/wBExgAAvbWIVCeI/wARuAAAw/9LLQBL/wAgswAAFPazs1gG/wAYpQAAFujg4IIU/wAOlwAAF5v9/bhj/wB6igAAGEj+/uC2/wD3gQAAAAD39/f3/wDcegAApRTr2Nrr/wAXdQAAsS/SsqvS/wCmcAAAs1SsgHOs/wA4wQAAF7vx8aNA/wAhsgAAAAD39/f3/wAZpAAAskXDmY7D/wDYvwAAEf3m5mEB/wDBsAAAF5v9/bhj/wC5ogAAsS/SsqvS/wAPlgAAuZuZXjyZ/wB4vgAAEf3m5mEB/wBhrwAAF5v9/bhj/wBZoQAAAAD39/f3/wCvlAAAsS/SsqvS/wB7iQAAuZuZXjyZ/wAYvQAAFPazs1gG/wABrgAAF7vx8aNA/wD5nwAAGEj+/uC2/wBPkwAApRTr2Nrr/wAbiAAAskXDmY7D/wD4gAAAvbWIVCeI/wC4uwAAFPazs1gG/wChrAAAF7vx8aNA/wCZngAAGEj+/uC2/wDvkQAAAAD39/f3/wC7hgAApRTr2Nrr/wCYfwAAskXDmY7D/wDdeQAAvbWIVCeI/wBYugAAFPazs1gG/wBBqwAAFujg4IIU/wA5nQAAF5v9/bhj/wCPkAAAGEj+/uC2/wBbhQAApRTr2Nrr/wA4fgAAsS/SsqvS/wB9eAAAs1SsgHOs/wAYdAAAvbWIVCeI/wAXuQAAFPazs1gG/wAAqgAAFujg4IIU/wD4mwAAF5v9/bhj/wBOjwAAGEj+/uC2/wAahAAAAAD39/f3/wD3fAAApRTr2Nrr/wA8dwAAsS/SsqvS/wDXcgAAs1SsgHOs/wDGbwAAvbWIVCeI/wCcwQAAvA7v5+Hv/wCFsgAA1kPJyZTH/wB9pAAA6t7d3Rx3/wA8wAAAuQj28e72/wAlsQAA0ynY17XY/wAdowAA5Ivf32Ww/wBzlgAA7+jOzhJW/wDcvgAAuQj28e72/wDFrwAA0ynY17XY/wC9oQAA5Ivf32Ww/wATlQAA6t7d3Rx3/wDfiQAA7P+YmABD/wB8vQAAuQj28e72/wBlrgAAzCba1Lna/wBdoAAA1kPJyZTH/wCzkwAA5Ivf32Ww/wB/iAAA6t7d3Rx3/wBcgQAA7P+YmABD/wAcvAAAuQj28e72/wAFrQAAzCba1Lna/wD9ngAA1kPJyZTH/wBTkgAA5Ivf32Ww/wAfhwAA6dHn5ymK/wD8fwAA7+jOzhJW/wBBegAA7P+RkQA//wC8ugAAwwX59/T5/wClqwAAvA7v5+Hv/wCdnQAAzCba1Lna/wDzkAAA1kPJyZTH/wC/hQAA5Ivf32Ww/wCcfgAA6dHn5ymK/wDheAAA7+jOzhJW/wB8dAAA7P+RkQA//wB7uQAAwwX59/T5/wBkqgAAvA7v5+Hv/wBcnAAAzCba1Lna/wCyjwAA1kPJyZTH/wB+hAAA5Ivf32Ww/wBbfQAA6dHn5ymK/wCgdwAA7+jOzhJW/wA7cwAA7P+YmABD/wAqcAAA8v9nZwAf/wAXwQAAtAj17+31/wAAsgAAqCXcvL3c/wD4owAAsGSxdWux/wC3vwAAtgf38vD3/wCgsAAArRziy8ni/wCYogAArTrInprI/wDulQAAtoCjalGj/wBXvgAAtgf38vD3/wBArwAArRziy8ni/wA4oQAArTrInprI/wCOlAAAsGSxdWux/wBaiQAAvLmPVCeP/wD3vAAAtgf38vD3/wDgrQAAqhLr2trr/wDYnwAAqCXcvL3c/wAukwAArTrInprI/wD6hwAAsGSxdWux/wDXgAAAvLmPVCeP/wCXuwAAtgf38vD3/wCArAAAqhLr2trr/wB4ngAAqCXcvL3c/wDOkQAArTrInprI/wCahgAArFO6gH26/wB3fwAAtoCjalGj/wC8eQAAvtiGShSG/wA3ugAAvwL9/Pv9/wAgqwAAtAj17+31/wAYnQAAqhLr2trr/wBukAAAqCXcvL3c/wA6hQAArTrInprI/wAXfgAArFO6gH26/wBceAAAtoCjalGj/wD3cwAAvtiGShSG/wD2uAAAvwL9/Pv9/wDfqQAAtAj17+31/wDXmwAAqhLr2trr/wAtjwAAqCXcvL3c/wD5gwAArTrInprI/wDWfAAArFO6gH26/wAbdwAAtoCjalGj/wC2cgAAvLmPVCeP/wClbwAAv/99PwB9/wClwgAA8v9nZwAf/wC8xgAAlvFhBTBh/wCOswAA+dyyshgr/wCGpQAABaPW1mBN/wB8lwAADXf09KWC/wDoigAADzb9/dvH/wBlggAAjiDw0eXw/wBKewAAjVfeksXe/wCFdQAAj6fDQ5PD/wAUcQAAlM6sIWas/wAtwgAA8v9nZwAf/wA5xgAAlM6sIWas/wAGuAAAlvFhBTBh/wAWswAA+dyyshgr/wAOpQAABaPW1mBN/wAElwAADXf09KWC/wBwigAADzb9/dvH/wDtgQAAAAD39/f3/wDSegAAjiDw0eXw/wANdQAAjVfeksXe/wCccAAAj6fDQ5PD/wDkwAAADJbv74pi/wDNsQAAAAD39/f3/wDFowAAj4DPZ6nP/wCEvwAA+P/KygAg/wBtsAAADXf09KWC/wBlogAAjVfeksXe/wC7lQAAj/ewBXGw/wAkvgAA+P/KygAg/wANrwAADXf09KWC/wAFoQAAAAD39/f3/wBblAAAjVfeksXe/wAniQAAj/ewBXGw/wDEvAAA+dyyshgr/wCtrQAADJbv74pi/wClnwAADzb9/dvH/wD7kgAAjiDw0eXw/wDHhwAAj4DPZ6nP/wCkgAAAlM6sIWas/wBkuwAA+dyyshgr/wBNrAAADJbv74pi/wBFngAADzb9/dvH/wCbkQAAAAD39/f3/wBnhgAAjiDw0eXw/wBEfwAAj4DPZ6nP/wCJeQAAlM6sIWas/wAEugAA+dyyshgr/wDtqgAABaPW1mBN/wDlnAAADXf09KWC/wA7kAAADzb9/dvH/wAHhQAAjiDw0eXw/wDkfQAAjVfeksXe/wApeAAAj6fDQ5PD/wDEcwAAlM6sIWas/wDOuAAA+dyyshgr/wC3qQAABaPW1mBN/wCvmwAADXf09KWC/wAFjwAADzb9/dvH/wDRgwAAAAD39/f3/wCufAAAjiDw0eXw/wDzdgAAjVfeksXe/wCOcgAAj6fDQ5PD/wB9bwAAlM6sIWas/wCPwgAA8v9nZwAf/wCkxgAAAAAaGhoa/wB4swAA+dyyshgr/wBwpQAABaPW1mBN/wBmlwAADXf09KWC/wDSigAADzb9/dvH/wBPggAAAADg4ODg/wA0ewAAAAC6urq6/wBvdQAAAACHh4eH/wD+cAAAAABNTU1N/wAXwgAA8v9nZwAf/wAhxgAAAABNTU1N/wDutwAAAAAaGhoa/wAAswAA+dyyshgr/wD4pAAABaPW1mBN/wDulgAADXf09KWC/wBaigAADzb9/dvH/wDXgQAAAAD//////wC8egAAAADg4ODg/wD3dAAAAAC6urq6/wCGcAAAAACHh4eH/wChwAAADJbv74pi/wCKsQAAAAD//////wCCowAAAACZmZmZ/wBBvwAA+P/KygAg/wAqsAAADXf09KWC/wAiogAAAAC6urq6/wB4lQAAAABAQEBA/wDhvQAA+P/KygAg/wDKrgAADXf09KWC/wDCoAAAAAD//////wAYlAAAAAC6urq6/wDkiAAAAABAQEBA/wCBvAAA+dyyshgr/wBqrQAADJbv74pi/wBinwAADzb9/dvH/wC4kgAAAADg4ODg/wCEhwAAAACZmZmZ/wBhgAAAAABNTU1N/wAhuwAA+dyyshgr/wAKrAAADJbv74pi/wACngAADzb9/dvH/wBYkQAAAAD//////wAkhgAAAADg4ODg/wABfwAAAACZmZmZ/wBGeQAAAABNTU1N/wDBuQAA+dyyshgr/wCqqgAABaPW1mBN/wCinAAADXf09KWC/wD4jwAADzb9/dvH/wDEhAAAAADg4ODg/wChfQAAAAC6urq6/wDmdwAAAACHh4eH/wCBcwAAAABNTU1N/wCLuAAA+dyyshgr/wB0qQAABaPW1mBN/wBsmwAADXf09KWC/wDCjgAADzb9/dvH/wCOgwAAAAD//////wBrfAAAAADg4ODg/wCwdgAAAAC6urq6/wBLcgAAAACHh4eH/wA6bwAAAABNTU1N/wCzwAAAAyD9/eDd/wCcsQAA9Fz6+p+1/wCUowAA49zFxRuK/wBTvwAADRz+/uvi/wA8sAAA/Ej7+7S5/wA0ogAA7pP392ih/wCKlQAA4P2urgF+/wDzvQAADRz+/uvi/wDcrgAA/Ej7+7S5/wDUoAAA7pP392ih/wAqlAAA49zFxRuK/wD2iAAA1fx6egF3/wCTvAAADRz+/uvi/wB8rQAAAzz8/MXA/wB0nwAA9Fz6+p+1/wDKkgAA7pP392ih/wCWhwAA49zFxRuK/wBzgAAA1fx6egF3/wAzuwAADRz+/uvi/wAcrAAAAzz8/MXA/wAUngAA9Fz6+p+1/wBqkQAA7pP392ih/wA2hgAA5sPd3TSX/wATfwAA4P2urgF+/wBYeQAA1fx6egF3/wDTuQAADgz///fz/wC8qgAAAyD9/eDd/wC0nAAAAzz8/MXA/wAKkAAA9Fz6+p+1/wDWhAAA7pP392ih/wCzfQAA5sPd3TSX/wD4dwAA4P2urgF+/wCTcwAA1fx6egF3/wCduAAADgz///fz/wCGqQAAAyD9/eDd/wB+mwAAAzz8/MXA/wDUjgAA9Fz6+p+1/wCggwAA7pP392ih/wB9fAAA5sPd3TSX/wDCdgAA4P2urgF+/wBdcgAA1fx6egF3/wBMbwAAx/9qSQBq/wCZwgAA9f+lpQAm/wCvxgAAp6uVMTaV/wCCswAAAtDX1zAn/wB6pQAACrj09G1D/wBwlwAAFJ39/a5h/wDcigAAHm7+/uCQ/wBZggAAiBj44PP4/wA+ewAAikPpq9np/wB5dQAAj3HRdK3R/wAIcQAAl520RXW0/wAhwgAA9f+lpQAm/wAsxgAAl520RXW0/wD5twAAp6uVMTaV/wAKswAAAtDX1zAn/wACpQAACrj09G1D/wD4lgAAFJ39/a5h/wBkigAAHm7+/uCQ/wDhgQAAKkD///+//wDGegAAiBj44PP4/wABdQAAikPpq9np/wCQcAAAj3HRdK3R/wDZwAAADaT8/I1Z/wDCsQAAKkD///+//wC6owAAj1bbkb/b/wB5vwAA/uHX1xkc/wBisAAAFJ39/a5h/wBaogAAikPpq9np/wCwlQAAkcG2LHu2/wAZvgAA/uHX1xkc/wACrwAAFJ39/a5h/wD6oAAAKkD///+//wBQlAAAikPpq9np/wAciQAAkcG2LHu2/wC5vAAAAtDX1zAn/wCirQAADaT8/I1Z/wCanwAAHm7+/uCQ/wDwkgAAiBj44PP4/wC8hwAAj1bbkb/b/wCZgAAAl520RXW0/wBZuwAAAtDX1zAn/wBCrAAADaT8/I1Z/wA6ngAAHm7+/uCQ/wCQkQAAKkD///+//wBchgAAiBj44PP4/wA5fwAAj1bbkb/b/wB+eQAAl520RXW0/wD5uQAAAtDX1zAn/wDiqgAACrj09G1D/wDanAAAFJ39/a5h/wAwkAAAHm7+/uCQ/wD8hAAAiBj44PP4/wDZfQAAikPpq9np/wAeeAAAj3HRdK3R/wC5cwAAl520RXW0/wDDuAAAAtDX1zAn/wCsqQAACrj09G1D/wCkmwAAFJ39/a5h/wD6jgAAHm7+/uCQ/wDGgwAAKkD///+//wCjfAAAiBj44PP4/wDodgAAikPpq9np/wCDcgAAj3HRdK3R/wBybwAAl520RXW0/wDDwgAA9f+lpQAm/wDdxgAAa/9oAGg3/wCsswAAAtDX1zAn/wCkpQAACrj09G1D/wCalwAAFJ39/a5h/wAGiwAAH3P+/uCL/wCDggAAM2rv2e+L/wBoewAAPoLZptlq/wCjdQAAU3m9Zr1j/wAycQAAZ9OYGphQ/wBLwgAA9f+lpQAm/wBaxgAAZ9OYGphQ/wAnuAAAa/9oAGg3/wA0swAAAtDX1zAn/wAspQAACrj09G1D/wAilwAAFJ39/a5h/wCOigAAH3P+/uCL/wALggAAKkD///+//wDwegAAM2rv2e+L/wArdQAAPoLZptlq/wC6cAAAU3m9Zr1j/wBpwQAADaT8/I1Z/wBSsgAAKkD///+//wBKpAAAQojPkc9g/wAJwAAA/uHX1xkc/wDysAAAFJ39/a5h/wDqogAAPoLZptlq/wBAlgAAYtKWGpZB/wCpvgAA/uHX1xkc/wCSrwAAFJ39/a5h/wCKoQAAKkD///+//wDglAAAPoLZptlq/wCsiQAAYtKWGpZB/wBJvQAAAtDX1zAn/wAyrgAADaT8/I1Z/wAqoAAAH3P+/uCL/wCAkwAAM2rv2e+L/wBMiAAAQojPkc9g/wApgQAAZ9OYGphQ/wDpuwAAAtDX1zAn/wDSrAAADaT8/I1Z/wDKngAAH3P+/uCL/wAgkgAAKkD///+//wDshgAAM2rv2e+L/wDJfwAAQojPkc9g/wAOegAAZ9OYGphQ/wCJugAAAtDX1zAn/wByqwAACrj09G1D/wBqnQAAFJ39/a5h/wDAkAAAH3P+/uCL/wCMhQAAM2rv2e+L/wBpfgAAPoLZptlq/wCueAAAU3m9Zr1j/wBJdAAAZ9OYGphQ/wBIuQAAAtDX1zAn/wAxqgAACrj09G1D/wApnAAAFJ39/a5h/wB/jwAAH3P+/uCL/wBLhAAAKkD///+//wAofQAAM2rv2e+L/wBtdwAAPoLZptlq/wAIcwAAU3m9Zr1j/wD3bwAAZ9OYGphQ/wAvwQAADSz+/uDS/wAYsgAACYv8/JJy/wAQpAAAAdPe3i0m/wDPvwAADSX+/uXZ/wC4sAAAC2z8/K6R/wCwogAAB7P7+2pK/wAGlgAA/eDLyxgd/wBvvgAADSX+/uXZ/wBYrwAAC2z8/K6R/wBQoQAAB7P7+2pK/wCmlAAAAdPe3i0m/wByiQAA/eelpQ8V/wAPvQAADSX+/uXZ/wD4rQAADFz8/Luh/wDwnwAACYv8/JJy/wBGkwAAB7P7+2pK/wASiAAAAdPe3i0m/wDvgAAA/eelpQ8V/wCvuwAADSX+/uXZ/wCYrAAADFz8/Luh/wCQngAACYv8/JJy/wDmkQAAB7P7+2pK/wCyhgAAA9Dv7zss/wCPfwAA/eDLyxgd/wDUeQAA+/+ZmQAN/wBPugAADg////Xw/wA4qwAADSz+/uDS/wAwnQAADFz8/Luh/wCGkAAACYv8/JJy/wBShQAAB7P7+2pK/wAvfgAAA9Dv7zss/wB0eAAA/eDLyxgd/wAPdAAA+/+ZmQAN/wAOuQAADg////Xw/wD3qQAADSz+/uDS/wDvmwAADFz8/Luh/wBFjwAACYv8/JJy/wARhAAAB7P7+2pK/wDufAAAA9Dv7zss/wAzdwAA/eDLyxgd/wDOcgAA/eelpQ8V/wC9bwAA+f9nZwAN/wDswQAA/uHk5Boc/wDVsgAAkrK4N364/wDNpAAAU5OvTa9K/wCMwAAA/uHk5Boc/wB1sQAAkrK4N364/wBtowAAU5OvTa9K/wDDlgAAz4SjmE6j/wAsvwAA/uHk5Boc/wAVsAAAkrK4N364/wANogAAU5OvTa9K/wBjlQAAz4SjmE6j/wAvigAAFf///38A/wDMvQAA/uHk5Boc/wC1rgAAkrK4N364/wCtoAAAU5OvTa9K/wADlAAAz4SjmE6j/wDPiAAAFf///38A/wCsgQAAKsz///8z/wBsvAAA/uHk5Boc/wBVrQAAkrK4N364/wBNnwAAU5OvTa9K/wCjkgAAz4SjmE6j/wBvhwAAFf///38A/wBMgAAAKsz///8z/wCRegAAD8GmplYo/wAMuwAA/uHk5Boc/wD1qwAAkrK4N364/wDtnQAAU5OvTa9K/wBDkQAAz4SjmE6j/wAPhgAAFf///38A/wDsfgAAKsz///8z/wAxeQAAD8GmplYo/wDMdAAA6Hn394G//wCsuQAA/uHk5Boc/wCVqgAAkrK4N364/wCNnAAAU5OvTa9K/wDjjwAAz4SjmE6j/wCvhAAAFf///38A/wCMfQAAKsz///8z/wDRdwAAD8GmplYo/wBscwAA6Hn394G//wBbcAAAAACZmZmZ/wDNwQAAcnjCZsKl/wC2sgAAC5v8/I1i/wCupAAAnE3LjaDL/wBtwAAAcnjCZsKl/wBWsQAAC5v8/I1i/wBOowAAnE3LjaDL/wCklgAA5Gbn54rD/wANvwAAcnjCZsKl/wD2rwAAC5v8/I1i/wDuoQAAnE3LjaDL/wBElQAA5Gbn54rD/wAQigAAOpvYpthU/wCtvQAAcnjCZsKl/wCWrgAAC5v8/I1i/wCOoAAAnE3LjaDL/wDkkwAA5Gbn54rD/wCwiAAAOpvYpthU/wCNgQAAItD//9kv/wBNvAAAcnjCZsKl/wA2rQAAC5v8/I1i/wAunwAAnE3LjaDL/wCEkgAA5Gbn54rD/wBQhwAAOpvYpthU/wAtgAAAItD//9kv/wByegAAGVrl5cSU/wDtugAAcnjCZsKl/wDWqwAAC5v8/I1i/wDOnQAAnE3LjaDL/wAkkQAA5Gbn54rD/wDwhQAAOpvYpthU/wDNfgAAItD//9kv/wASeQAAGVrl5cSU/wCtdAAAAACzs7Oz/wD9wgAAeFTTjdPH/wAcxwAA01K9vIC9/wDmswAAKkz///+z/wDepQAAryXavrra/wDUlwAABIv7+4By/wBAiwAAkGTTgLHT/wC9ggAAFpz9/bRi/wCiewAAOobes95p/wDddQAA6S/8/M3l/wBscQAAAADZ2dnZ/wCFwgAAeFTTjdPH/wCZxgAA01K9vIC9/wBmuAAATSnrzOvF/wBuswAAKkz///+z/wBmpQAAryXavrra/wBclwAABIv7+4By/wDIigAAkGTTgLHT/wBFggAAFpz9/bRi/wAqewAAOobes95p/wBldQAA6S/8/M3l/wD0cAAAAADZ2dnZ/wANwgAAeFTTjdPH/wAWxgAA01K9vIC9/wDjtwAATSnrzOvF/wBpqQAAJZD//+1v/wD2sgAAKkz///+z/wDupAAAryXavrra/wDklgAABIv7+4By/wBQigAAkGTTgLHT/wDNgQAAFpz9/bRi/wCyegAAOobes95p/wDtdAAA6S/8/M3l/wB8cAAAAADZ2dnZ/wDEwQAAeFTTjdPH/wCtsgAAKkz///+z/wClpAAAryXavrra/wBkwAAAeFTTjdPH/wBNsQAAKkz///+z/wBFowAAryXavrra/wCblgAABIv7+4By/wAEvwAAeFTTjdPH/wDtrwAAKkz///+z/wDloQAAryXavrra/wA7lQAABIv7+4By/wAHigAAkGTTgLHT/wCkvQAAeFTTjdPH/wCNrgAAKkz///+z/wCFoAAAryXavrra/wDbkwAABIv7+4By/wCniAAAkGTTgLHT/wCEgQAAFpz9/bRi/wBEvAAAeFTTjdPH/wAtrQAAKkz///+z/wAlnwAAryXavrra/wB7kgAABIv7+4By/wBHhwAAkGTTgLHT/wAkgAAAFpz9/bRi/wBpegAAOobes95p/wDkugAAeFTTjdPH/wDNqwAAKkz///+z/wDFnQAAryXavrra/wAbkQAABIv7+4By/wDnhQAAkGTTgLHT/wDEfgAAFpz9/bRi/wAJeQAAOobes95p/wCkdAAA6S/8/M3l/wCjuQAAeFTTjdPH/wCMqgAAKkz///+z/wCEnAAAryXavrra/wDajwAABIv7+4By/wCmhAAAkGTTgLHT/wCDfQAAFpz9/bRi/wDIdwAAOobes95p/wBjcwAA6S/8/M3l/wBScAAAAADZ2dnZ/wDPwgAA7f2engFC/wDqxgAAsYKiXk+i/wC4swAA+rTV1T5P/wCwpQAACrj09G1D/wCmlwAAFJ39/a5h/wASiwAAH3P+/uCL/wCPggAAMWD15vWY/wB0ewAAT0Hdq92k/wCvdQAAcnjCZsKl/wA+cQAAj7u9Moi9/wBXwgAA7f2engFC/wBnxgAAj7u9Moi9/wA0uAAAsYKiXk+i/wBAswAA+rTV1T5P/wA4pQAACrj09G1D/wAulwAAFJ39/a5h/wCaigAAH3P+/uCL/wAXggAAKkD///+//wD8egAAMWD15vWY/wA3dQAAT0Hdq92k/wDGcAAAcnjCZsKl/wB9wQAADaT8/I1Z/wBmsgAAKkD///+//wBepAAAUU3VmdWU/wAdwAAA/uHX1xkc/wAGsQAAFJ39/a5h/wD+ogAAT0Hdq92k/wBUlgAAj8S6K4O6/wC9vgAA/uHX1xkc/wCmrwAAFJ39/a5h/wCeoQAAKkD///+//wD0lAAAT0Hdq92k/wDAiQAAj8S6K4O6/wBdvQAA+rTV1T5P/wBGrgAADaT8/I1Z/wA+oAAAH3P+/uCL/wCUkwAAMWD15vWY/wBgiAAAUU3VmdWU/wA9gQAAj7u9Moi9/wD9uwAA+rTV1T5P/wDmrAAADaT8/I1Z/wDengAAH3P+/uCL/wA0kgAAKkD///+//wAAhwAAMWD15vWY/wDdfwAAUU3VmdWU/wAiegAAj7u9Moi9/wCdugAA+rTV1T5P/wCGqwAACrj09G1D/wB+nQAAFJ39/a5h/wDUkAAAH3P+/uCL/wCghQAAMWD15vWY/wB9fgAAT0Hdq92k/wDCeAAAcnjCZsKl/wBddAAAj7u9Moi9/wBcuQAA+rTV1T5P/wBFqgAACrj09G1D/wA9nAAAFJ39/a5h/wCTjwAAH3P+/uCL/wBfhAAAKkD///+//wA8fQAAMWD15vWY/wCBdwAAT0Hdq92k/wAccwAAcnjCZsKl/wALcAAAj7u9Moi9/wB9RwAAkw//8Pj//wC4SAAAGCP6+uvX/wCmXwAAf///AP///wBfSwAAcYD/f//U/wBQSgAAfw//8P///wArTgAAKhr19fXc/wBkRQAAFzr//+TE/wBoOgAAAAAAAAAA/wAHUgAAGTH//+vN/wCMRwAAqv//AAD//wBnEAAAwM7iiivi/wDWLwAAAL6lpSoq/wCBUQAAF2Pe3riH/wCSRgAAgGegX56g/wBcSQAAP///f/8A/wA5SQAAEdrS0mke/wBiOAAAC6///39Q/wChRgAAmpPtZJXt/wATOgAAISL///jc/wAkMAAA9ufc3BQ8/wBaNAAAf///AP///wAgRwAAqv+LAACL/wBMNAAAf/+LAIuL/wBMUQAAHu+4uIYL/wDUBwAAAACpqamp/wBqMwAAVf9kAGQA/wAJBwAAAACpqamp/wD8OgAAJ269vbdr/wC6XwAA1P+LiwCL/wChMwAAOo5rVWsv/wAPTgAAF////4wA/wB2VAAAxsDMmTLM/wAyVgAAAP+LiwAA/wCkMAAACnnp6ZZ6/wADNAAAVT28j7yP/wBbRwAAr4+LSD2L/wD2BwAAf2dPL09P/wArBwAAf2dPL09P/wAVSgAAgP/RAM7R/wBXEAAAx//TlADT/wCzOQAA6Ov//xST/wBDRgAAiv//AL///wDHBwAAAABpaWlp/wD8BgAAAABpaWlp/wC1RgAAlOH/HpD//wBMOgAAAM6ysiIi/wCnSAAAHA////rw/wAtMwAAVcCLIosi/wCLYAAA1P///wD//wDMLgAAAADc3Nzc/wCGSAAAqgf/+Pj//wC7UwAAI////9cA/wByUQAAHtna2qUg/wAoCAAAAACAgICA/wAsNAAAVf+AAIAA/wD/CQAAO9D/rf8v/wBdBwAAAACAgICA/wANCwAAVQ//8P/w/wCXOQAA6Zb//2m0/wAjVgAAAIzNzVxc/wAqLwAAwv+CSwCC/wDjBQAAKg/////w/wALOwAAJmrw8OaM/wDUHAAAqhT65ub6/wBjPAAA8A////D1/wBbMwAAQP/8fPwA/wDoMQAAJjH///rN/wCDRgAAiT/mrdjm/wBSOAAAAHfw8ICA/wA9NAAAfx//4P///wAQCgAAKij6+vrS/wC4BwAAAADT09PT/wA+MwAAVWTukO6Q/wDtBgAAAADT09PT/wCkOQAA+En//7bB/wCTMAAADIT//6B6/wDcMwAAfdGyILKq/wAxRgAAj3X6h876/wDiBwAAlDiZd4iZ/wAXBwAAlDiZd4iZ/wDuRgAAlzTesMTe/wDuCQAAKh/////g/wDnSwAAVf//AP8A/wC1MwAAVcDNMs0y/wDXMgAAFRT6+vDm/wDLXwAA1P///wD//wCHMAAAAP+AgAAA/wBJSwAAcYDNZs2q/wDeRgAAqv/NAADN/wBkVAAAzJjTulXT/wCvTAAAt3zbk3Db/wDvMwAAZ6mzPLNx/wBGRwAAsI/ue2ju/wB5MwAAb//6APqa/wAASgAAfafRSNHM/wCOVQAA5OTHxxWF/wBxRgAAqsZwGRlw/wA5NgAAagn/9f/6/wCaSQAABB7//+Th/wAQMgAAGkn//+S1/wCWSAAAGVH//96t/wCNBAAAqv+AAACA/wDXUAAAGxf9/fXm/wAORQAAKv+AgIAA/wCQXwAAOMCOa44j/wAfTgAAG////6UA/wCFVgAAC////0UA/wCGVAAA1nva2nDW/wBfUQAAJkju7uiq/wDEMwAAVWT7mPuY/wAoSgAAf0Pur+7u/wCjVQAA8Xzb23CT/wAkLQAAGin//+/V/wCUQgAAFEb//9q5/wBiCwAAFLDNzYU//wDKOQAA9z///8DL/wC9NQAA1Ebd3aDd/wDFRgAAhDvmsODm/wALTQAA1P+AgACA/wDPVgAAAP///wAA/wCYLwAAAD28vI+P/wARRwAAn7XhQWnh/wDFLwAAEdyLi0UT/wC0MAAABIr6+oBy/wCnLwAAE5r09KRg/wAVNAAAZ6qLLotX/wDyNgAAERD///Xu/wBRYAAADbegoFIt/wCoGwAAAADAwMDA/wBURgAAi2zrh87r/wBuRwAAr4/NalrN/wAJCAAAlDiQcICQ/wA+BwAAlDiQcICQ/wDDCQAAAAX///r6/wCQMwAAav//AP9//wACRwAAkpu0RoK0/wBzNAAAGFTS0rSM/wDtOAAAf/+AAICA/wCcTAAA1B3Y2L/Y/wC1LgAABrj//2NH/wA7SgAAe7bgQODQ/wB3EAAA1HPu7oLu/wCZEgAAG0T19d6z/wDKSAAAAAD//////wDwTQAAAAD19fX1/wAqCgAAKv////8A/wAKMwAAOMDNms0y/wB0wQAALUP89/y5/wBdsgAARFvdrd2O/wBVpAAAYrKjMaNU/wAUwAAAKjL////M/wD9sAAAPlXmwuaZ/wD1ogAAVWTGeMZ5/wBLlgAAY7uEI4RD/wC0vgAAKjL////M/wCdrwAAPlXmwuaZ/wCVoQAAVWTGeMZ5/wDrlAAAYrKjMaNU/wC3iQAAa/9oAGg3/wBUvQAAKjL////M/wA9rgAAN1Hw2fCj/wA1oAAARFvdrd2O/wCLkwAAVWTGeMZ5/wBXiAAAYrKjMaNU/wA0gQAAa/9oAGg3/wD0uwAAKjL////M/wDdrAAAN1Hw2fCj/wDVngAARFvdrd2O/wArkgAAVWTGeMZ5/wD3hgAAYJ6rQatd/wDUfwAAY7uEI4RD/wAZegAAbP9aAFoy/wCUugAAKhn////l/wB9qwAALUP89/y5/wB1nQAAN1Hw2fCj/wDLkAAARFvdrd2O/wCXhQAAVWTGeMZ5/wB0fgAAYJ6rQatd/wC5eAAAY7uEI4RD/wBUdAAAbP9aAFoy/wBTuQAAKhn////l/wA8qgAALUP89/y5/wA0nAAAN1Hw2fCj/wCKjwAARFvdrd2O/wBWhAAAVWTGeMZ5/wAzfQAAYJ6rQatd/wB4dwAAY7uEI4RD/wATcwAAa/9oAGg3/wACcAAAbv9FAEUp/wDFwAAAMUn47fix/wCusQAAdWHNf827/wCmowAAkMK4LH+4/wBlvwAAKjL////M/wBOsAAAY0Laodq0/wBGogAAhKrEQbbE/wCclQAAlsuoIl6o/wAFvgAAKjL////M/wDurgAAY0Laodq0/wDmoAAAhKrEQbbE/wA8lAAAkMK4LH+4/wAIiQAApL+UJTSU/wClvAAAKjL////M/wCOrQAARTrpx+m0/wCGnwAAdWHNf827/wDckgAAhKrEQbbE/wCohwAAkMK4LH+4/wCFgAAApL+UJTSU/wBFuwAAKjL////M/wAurAAARTrpx+m0/wAmngAAdWHNf827/wB8kQAAhKrEQbbE/wBIhgAAi9jAHZHA/wAlfwAAlsuoIl6o/wBqeQAAnueEDCyE/wDluQAAKib////Z/wDOqgAAMUn47fix/wDGnAAARTrpx+m0/wAckAAAdWHNf827/wDohAAAhKrEQbbE/wDFfQAAi9jAHZHA/wAKeAAAlsuoIl6o/wClcwAAnueEDCyE/wCvuAAAKib////Z/wCYqQAAMUn47fix/wCQmwAARTrpx+m0/wDmjgAAdWHNf827/wCygwAAhKrEQbbE/wCPfAAAi9jAHZHA/wDUdgAAlsuoIl6o/wBvcgAApL+UJTSU/wBebwAAnudYCB1Y/wBBwQAAJUL///e8/wAqsgAAHK/+/sRP/wAipAAAEO7Z2V8O/wDhvwAAKir////U/wDKsAAAHHD+/tmO/wDCogAAFtX+/pkp/wAYlgAAD/zMzEwC/wCBvgAAKir////U/wBqrwAAHHD+/tmO/wBioQAAFtX+/pkp/wC4lAAAEO7Z2V8O/wCEiQAADfiZmTQE/wAhvQAAKir////U/wAKrgAAH23+/uOR/wACoAAAHK/+/sRP/wBYkwAAFtX+/pkp/wAkiAAAEO7Z2V8O/wABgQAADfiZmTQE/wDBuwAAKir////U/wCqrAAAH23+/uOR/wCingAAHK/+/sRP/wD4kQAAFtX+/pkp/wDEhgAAEuns7HAU/wChfwAAD/zMzEwC/wDmeQAADPeMjC0E/wBhugAAKhn////l/wBKqwAAJUL///e8/wBCnQAAH23+/uOR/wCYkAAAHK/+/sRP/wBkhQAAFtX+/pkp/wBBfgAAEuns7HAU/wCGeAAAD/zMzEwC/wAhdAAADPeMjC0E/wAguQAAKhn////l/wAJqgAAJUL///e8/wABnAAAH23+/uOR/wBXjwAAHK/+/sRP/wAjhAAAFtX+/pkp/wAAfQAAEuns7HAU/wBFdwAAD/zMzEwC/wDgcgAADfiZmTQE/wDPbwAADfBmZiUG/wClwQAAIl///+2g/wCOsgAAGLL+/rJM/wCGpAAABd3w8Dsg/wBFwAAAKk3///+y/wAusQAAHaL+/sxc/wAmowAAEcL9/Y08/wB8lgAA/uHj4xoc/wDlvgAAKk3///+y/wDOrwAAHaL+/sxc/wDGoQAAEcL9/Y08/wAclQAABd3w8Dsg/wDoiQAA9v+9vQAm/wCFvQAAKk3///+y/wBurgAAHoj+/tl2/wBmoAAAGLL+/rJM/wC8kwAAEcL9/Y08/wCIiAAABd3w8Dsg/wBlgQAA9v+9vQAm/wAlvAAAKk3///+y/wAOrQAAHoj+/tl2/wAGnwAAGLL+/rJM/wBckgAAEcL9/Y08/wAohwAAB9T8/E4q/wAFgAAA/uHj4xoc/wBKegAA9f+xsQAm/wDFugAAKjL////M/wCuqwAAIl///+2g/wCmnQAAHoj+/tl2/wD8kAAAGLL+/rJM/wDIhQAAEcL9/Y08/wClfgAAB9T8/E4q/wDqeAAA/uHj4xoc/wCFdAAA9f+xsQAm/wCEuQAAKjL////M/wBtqgAAIl///+2g/wBlnAAAHoj+/tl2/wC7jwAAGLL+/rJM/wCHhAAAEcL9/Y08/wBkfQAAB9T8/E4q/wCpdwAA/uHj4xoc/wBEcwAA9v+9vQAm/wAzcAAA8v+AgAAm/wCCRwAAkw//8Pj//wC9SAAAGCP6+uvX/wAatgAAFyT//+/b/wCqpwAAFyTu7t/M/wCzmQAAFyTNzcCw/wACjQAAGCKLi4N4/wCrXwAAf///AP///wBkSwAAcYD/f//U/wBgtgAAcYD/f//U/wDwpwAAcYDudu7G/wD5mQAAcYDNZs2q/wBPjQAAcYCLRYt0/wBVSgAAfw//8P///wBZtgAAfw//8P///wDppwAAfw/u4O7u/wDymQAAfw7Nwc3N/wBBjQAAfw6Lg4uL/wAwTgAAKhr19fXc/wBpRQAAFzr//+TE/wCitQAAFzr//+TE/wAypwAAFzru7tW3/wA7mQAAFjrNzbee/wCKjAAAFzqLi31r/wBtOgAAAAAAAAAA/wAMUgAAGTH//+vN/wCRRwAAqv//AAD//wAHtgAAqv//AAD//wCXpwAAqv/uAADu/wCgmQAAqv/NAADN/wDvjAAAqv+LAACL/wBsEAAAwM7iiivi/wDbLwAAAL6lpSoq/wCjtAAAAL///0BA/wBPpgAAAL/u7js7/wBgmAAAAL/NzTMz/wCviwAAAL6LiyMj/wCGUQAAF2Pe3riH/wC/tgAAF2T//9Ob/wA+qAAAF2Pu7sWR/wBHmgAAF2PNzap9/wCdjQAAF2OLi3NV/wCXRgAAgGegX56g/wDQtQAAg2f/mPX//wBgpwAAg2bujuXu/wBpmQAAg2fNesXN/wC4jAAAg2aLU4aL/wBhSQAAP///f/8A/wAztgAAP///f/8A/wDDpwAAP//udu4A/wDMmQAAP//NZs0A/wAbjQAAP/+LRYsA/wA+SQAAEdrS0mke/wAotgAAEdv//38k/wC4pwAAEdvu7nYh/wDBmQAAEdrNzWYd/wAQjQAAEdyLi0UT/wBnOAAAC6///39Q/wAytQAAB6n//3JW/wDPpgAABqnu7mpQ/wDgmAAABqnNzVtF/wAvjAAABqiLiz4v/wCmRgAAmpPtZJXt/wAYOgAAISL///jc/wBXtQAAISL///jc/wD0pgAAIiPu7ujN/wAFmQAAIiLNzcix/wBUjAAAIyKLi4h4/wApMAAA9ufc3BQ8/wBfNAAAf///AP///wAXtQAAf///AP///wC0pgAAf//uAO7u/wDFmAAAf//NAM3N/wAUjAAAf/+LAIuL/wAlRwAAqv+LAACL/wBRNAAAf/+LAIuL/wBRUQAAHu+4uIYL/wCwtgAAHvD//7kP/wAvqAAAHvDu7q0O/wA4mgAAHvDNzZUM/wCOjQAAHvCLi2UI/wDZBwAAAACpqamp/wBvMwAAVf9kAGQA/wAOBwAAAACpqamp/wABOwAAJ269vbdr/wC/XwAA1P+LiwCL/wCmMwAAOo5rVWsv/wDptAAAOo//yv9w/wCGpgAAOo/uvO5o/wCXmAAAOo/Nos1a/wDmiwAAOo+Lbos9/wAUTgAAF////4wA/wCDtgAAFf///38A/wATqAAAFf/u7nYA/wAcmgAAFf/NzWYA/wByjQAAFf+Li0UA/wB7VAAAxsDMmTLM/wDetgAAxsH/vz7//wBdqAAAxsDusjru/wBmmgAAxsDNmjLN/wC8jQAAxsCLaCKL/wA3VgAAAP+LiwAA/wCpMAAACnnp6ZZ6/wAINAAAVT28j7yP/wAEtQAAVT7/wf/B/wChpgAAVT7utO60/wCymAAAVT7Nm82b/wABjAAAVT6LaYtp/wBgRwAAr4+LSD2L/wD7BwAAf2dPL09P/wBNtAAAf2j/l////wD1pQAAf2fuje7u/wAYmAAAf2jNec3N/wBsiwAAf2iLUouL/wAwBwAAf2dPL09P/wAaSgAAgP/RAM7R/wBcEAAAx//TlADT/wC4OQAA6Ov//xST/wBNtQAA6Ov//xST/wDqpgAA6Ovu7hKJ/wD7mAAA6OvNzRB2/wBKjAAA5+yLiwpQ/wBIRgAAiv//AL///wC4tQAAiv//AL///wBIpwAAiv/uALLu/wBRmQAAiv/NAJrN/wCgjAAAiv+LAGiL/wDMBwAAAABpaWlp/wABBwAAAABpaWlp/wC6RgAAlOH/HpD//wDbtQAAlOH/HpD//wBrpwAAlOHuHIbu/wB0mQAAlOHNGHTN/wDDjAAAlOGLEE6L/wBROgAAAM6ysiIi/wBhtQAAAM///zAw/wD+pgAAAM/u7iws/wAPmQAAAM/NzSYm/wBejAAAAM+Lixoa/wCsSAAAHA////rw/wAyMwAAVcCLIosi/wCQYAAA1P///wD//wDRLgAAAADc3Nzc/wCLSAAAqgf/+Pj//wDAUwAAI////9cA/wDKtgAAI////9cA/wBJqAAAI//u7skA/wBSmgAAI//Nza0A/wCojQAAI/+Li3UA/wB3UQAAHtna2qUg/wC0tgAAHtr//8El/wAzqAAAHtru7rQi/wA8mgAAHtrNzZsd/wCSjQAAHtqLi2kU/wAtCAAAAADAwMDA/wB2xAAAAAAAAAAA/wBWtAAAAAADAwMD/wD1xQAAAAAaGhoa/wA0xwAAAAD//////wDKtwAAAAAcHBwc/wBJqQAAAAAfHx8f/wBgmwAAAAAhISEh/wCvjgAAAAAkJCQk/wB7gwAAAAAmJiYm/wBffAAAAAApKSkp/wCkdgAAAAArKysr/wA/cgAAAAAuLi4u/wAubwAAAAAwMDAw/wD+pQAAAAAFBQUF/wDnxQAAAAAzMzMz/wC8twAAAAA2NjY2/wA7qQAAAAA4ODg4/wBSmwAAAAA7Ozs7/wChjgAAAAA9PT09/wBtgwAAAABAQEBA/wBRfAAAAABCQkJC/wCWdgAAAABFRUVF/wAxcgAAAABHR0dH/wAgbwAAAABKSkpK/wAhmAAAAAAICAgI/wDRxQAAAABNTU1N/wCutwAAAABPT09P/wAtqQAAAABSUlJS/wA2mwAAAABUVFRU/wCMjgAAAABXV1dX/wBfgwAAAABZWVlZ/wBDfAAAAABcXFxc/wCIdgAAAABeXl5e/wAjcgAAAABhYWFh/wASbwAAAABjY2Nj/wB1iwAAAAAKCgoK/wC0xQAAAABmZmZm/wCgtwAAAABpaWlp/wAfqQAAAABra2tr/wAomwAAAABubm5u/wB+jgAAAABwcHBw/wBRgwAAAABzc3Nz/wA1fAAAAAB1dXV1/wB6dgAAAAB4eHh4/wAVcgAAAAB6enp6/wAEbwAAAAB9fX19/wDNggAAAAANDQ0N/wCmxQAAAAB/f39//wCStwAAAACCgoKC/wARqQAAAACFhYWF/wAamwAAAACHh4eH/wBwjgAAAACKioqK/wBDgwAAAACMjIyM/wAnfAAAAACPj4+P/wBsdgAAAACRkZGR/wAHcgAAAACUlJSU/wD2bgAAAACWlpaW/wC2ewAAAAAPDw8P/wCYxQAAAACZmZmZ/wCEtwAAAACcnJyc/wADqQAAAACenp6e/wAMmwAAAAChoaGh/wBijgAAAACjo6Oj/wA1gwAAAACmpqam/wAZfAAAAACoqKio/wBedgAAAACrq6ur/wD5cQAAAACtra2t/wDobgAAAACwsLCw/wD7dQAAAAASEhIS/wASxQAAAACzs7Oz/wB2twAAAAC1tbW1/wD1qAAAAAC4uLi4/wD+mgAAAAC6urq6/wBUjgAAAAC9vb29/wAngwAAAAC/v7+//wALfAAAAADCwsLC/wBQdgAAAADExMTE/wDrcQAAAADHx8fH/wDabgAAAADJycnJ/wB8cQAAAAAUFBQU/wD3xAAAAADMzMzM/wBjtwAAAADPz8/P/wDiqAAAAADR0dHR/wDrmgAAAADU1NTU/wBBjgAAAADW1tbW/wAUgwAAAADZ2dnZ/wD4ewAAAADb29vb/wA9dgAAAADe3t7e/wDYcQAAAADg4ODg/wC8bgAAAADj4+Pj/wB+bgAAAAAXFxcX/wDkxAAAAADl5eXl/wBQtwAAAADo6Ojo/wDPqAAAAADr6+vr/wDYmgAAAADt7e3t/wAujgAAAADw8PDw/wABgwAAAADy8vLy/wDlewAAAAD19fX1/wAqdgAAAAD39/f3/wDFcQAAAAD6+vr6/wCpbgAAAAD8/Pz8/wAxNAAAVf//AP8A/wALtQAAVf//AP8A/wCopgAAVf/uAO4A/wC5mAAAVf/NAM0A/wAIjAAAVf+LAIsA/wAECgAAO9D/rf8v/wBiBwAAAADAwMDA/wBwxAAAAAAAAAAA/wBHtAAAAAADAwMD/wDuxQAAAAAaGhoa/wAsxwAAAAD//////wDDtwAAAAAcHBwc/wBCqQAAAAAfHx8f/wBZmwAAAAAhISEh/wCojgAAAAAkJCQk/wB0gwAAAAAmJiYm/wBYfAAAAAApKSkp/wCddgAAAAArKysr/wA4cgAAAAAuLi4u/wAnbwAAAAAwMDAw/wDvpQAAAAAFBQUF/wDgxQAAAAAzMzMz/wC1twAAAAA2NjY2/wA0qQAAAAA4ODg4/wBLmwAAAAA7Ozs7/wCajgAAAAA9PT09/wBmgwAAAABAQEBA/wBKfAAAAABCQkJC/wCPdgAAAABFRUVF/wAqcgAAAABHR0dH/wAZbwAAAABKSkpK/wASmAAAAAAICAgI/wDKxQAAAABNTU1N/wCntwAAAABPT09P/wAmqQAAAABSUlJS/wAvmwAAAABUVFRU/wCFjgAAAABXV1dX/wBYgwAAAABZWVlZ/wA8fAAAAABcXFxc/wCBdgAAAABeXl5e/wAccgAAAABhYWFh/wALbwAAAABjY2Nj/wBmiwAAAAAKCgoK/wCtxQAAAABmZmZm/wCZtwAAAABpaWlp/wAYqQAAAABra2tr/wAhmwAAAABubm5u/wB3jgAAAABwcHBw/wBKgwAAAABzc3Nz/wAufAAAAAB1dXV1/wBzdgAAAAB4eHh4/wAOcgAAAAB6enp6/wD9bgAAAAB9fX19/wDHggAAAAANDQ0N/wCfxQAAAAB/f39//wCLtwAAAACCgoKC/wAKqQAAAACFhYWF/wATmwAAAACHh4eH/wBpjgAAAACKioqK/wA8gwAAAACMjIyM/wAgfAAAAACPj4+P/wBldgAAAACRkZGR/wAAcgAAAACUlJSU/wDvbgAAAACWlpaW/wCwewAAAAAPDw8P/wCRxQAAAACZmZmZ/wB9twAAAACcnJyc/wD8qAAAAACenp6e/wAFmwAAAAChoaGh/wBbjgAAAACjo6Oj/wAugwAAAACmpqam/wASfAAAAACoqKio/wBXdgAAAACrq6ur/wDycQAAAACtra2t/wDhbgAAAACwsLCw/wD1dQAAAAASEhIS/wALxQAAAACzs7Oz/wBvtwAAAAC1tbW1/wDuqAAAAAC4uLi4/wD3mgAAAAC6urq6/wBNjgAAAAC9vb29/wAggwAAAAC/v7+//wAEfAAAAADCwsLC/wBJdgAAAADExMTE/wDkcQAAAADHx8fH/wDTbgAAAADJycnJ/wB2cQAAAAAUFBQU/wDwxAAAAADMzMzM/wBctwAAAADPz8/P/wDbqAAAAADR0dHR/wDkmgAAAADU1NTU/wA6jgAAAADW1tbW/wANgwAAAADZ2dnZ/wDxewAAAADb29vb/wA2dgAAAADe3t7e/wDRcQAAAADg4ODg/wC1bgAAAADj4+Pj/wB4bgAAAAAXFxcX/wDdxAAAAADl5eXl/wBJtwAAAADo6Ojo/wDIqAAAAADr6+vr/wDRmgAAAADt7e3t/wAnjgAAAADw8PDw/wD6ggAAAADy8vLy/wDeewAAAAD19fX1/wAjdgAAAAD39/f3/wC+cQAAAAD6+vr6/wCibgAAAAD8/Pz8/wASCwAAVQ//8P/w/wBztAAAVQ//8P/w/wAbpgAAVQ/u4O7g/wA+mAAAVQ7Nwc3B/wCSiwAAVQ6Lg4uD/wCcOQAA6Zb//2m0/wA5tQAA6pH//260/wDWpgAA643u7mqn/wDnmAAA7IfNzWCQ/wA2jAAA6pSLizpi/wAoVgAAAIzNzVxc/wD5tgAAAJT//2pq/wB4qAAAAJTu7mNj/wCBmgAAAJXNzVVV/wDXjQAAAJSLizo6/wAvLwAAwv+CSwCC/wDVFgAAKgD////+AADoBQAAKg/////w/wBAtAAAKg/////w/wDopQAAKg/u7u7g/wD0lwAAKg7Nzc3B/wBfiwAAKg6Li4uD/wAQOwAAJmrw8OaM/wCBtQAAJ3D///aP/wAJpwAAJ3Du7uaF/wAamQAAJ2/NzcZz/wBpjAAAJ2+Li4ZO/wDZHAAAqhT65ub6/wBoPAAA8A////D1/wCItQAA8A////D1/wAQpwAA7w/u7uDl/wAhmQAA8A7NzcHF/wBwjAAA7w6Li4OG/wBgMwAAQP/8fPwA/wDtMQAAJjH///rN/wC/tAAAJjH///rN/wBrpgAAJTLu7um//wB8mAAAJjHNzcml/wDLiwAAJzGLi4lw/wCIRgAAiT/mrdjm/wDFtQAAikD/v+///wBVpwAAikDust/u/wBemQAAij/NmsDN/wCtjAAAiUCLaIOL/wBXOAAAAHfw8ICA/wBCNAAAfx//4P///wAStQAAfx//4P///wCvpgAAfx/u0e7u/wDAmAAAfx/NtM3N/wAPjAAAfx+LeouL/wAtUQAAI3Pu7t2C/wCgtgAAI3T//+yL/wAfqAAAI3Pu7tyC/wAomgAAI3PNzb5w/wB+jQAAI3OLi4FM/wAVCgAAKij6+vrS/wC9BwAAAADT09PT/wBDMwAAVWTukO6Q/wDyBgAAAADT09PT/wCpOQAA+En//7bB/wBCtQAA+VH//665/wDfpgAA+FHu7qKt/wDwmAAA+VDNzYyV/wA/jAAA+VCLi19l/wCYMAAADIT//6B6/wCytAAADIT//6B6/wBepgAAC4Tu7pVy/wBvmAAADIXNzYFi/wC+iwAADIWLi1dC/wDhMwAAfdGyILKq/wA2RgAAj3X6h876/wCqtQAAj0//sOL//wA6pwAAj0/upNPu/wBDmQAAjk/NjbbN/wCSjAAAj06LYHuL/wA3RwAAr4//hHD//wDnBwAAlDiZd4iZ/wAcBwAAlDiZd4iZ/wDzRgAAlzTesMTe/wDntQAAlzX/yuH//wB3pwAAlzXuvNLu/wCAmQAAlzXNorXN/wDPjAAAljWLbnuL/wDzCQAAKh/////g/wBmtAAAKh/////g/wAOpgAAKh/u7u7R/wAxmAAAKh/Nzc20/wCFiwAAKh+Li4t6/wDsSwAAVf//AP8A/wC6MwAAVcDNMs0y/wDcMgAAFRT6+vDm/wDQXwAA1P///wD//wAatwAA1P///wD//wCZqAAA1P/u7gDu/wCimgAA1P/NzQDN/wD4jQAA1P+LiwCL/wCMMAAA77mwsDBg/wCqtAAA5Mv//zSz/wBWpgAA5Mvu7jCn/wBnmAAA5MzNzSmQ/wC2iwAA5MuLixxi/wBOSwAAcYDNZs2q/wDjRgAAqv/NAADN/wBpVAAAzJjTulXT/wDQtgAAy5n/4Gb//wBPqAAAy5nu0V/u/wBYmgAAy5nNtFLN/wCujQAAy5qLejeL/wC0TAAAt3zbk3Db/wB1tgAAt33/q4L//wAFqAAAt33un3nu/wAOmgAAt33NiWjN/wBkjQAAt3yLXUeL/wD0MwAAZ6mzPLNx/wBLRwAAsI/ue2ju/wB+MwAAb//6APqa/wAFSgAAfafRSNHM/wCTVQAA5OTHxxWF/wB2RgAAqsZwGRlw/wA+NgAAagn/9f/6/wCfSQAABB7//+Th/wA/tgAABB7//+Th/wDPpwAABB7u7tXS/wDYmQAAAx3Nzbe1/wAnjQAABR2Li317/wAVMgAAGkn//+S1/wCbSAAAGVH//96t/wANtgAAGVH//96t/wCdpwAAGVLu7s+h/wCmmQAAGVLNzbOL/wD1jAAAGVKLi3le/wCSBAAAqv+AAACA/wAoRgAAqv+AAACA/wAhSwAAKgD////+AADcUAAAGxf9/fXm/wATRQAAKv+AgIAA/wCVXwAAOMCOa44j/wAPtwAAOMH/wP8+/wCOqAAAOMDus+46/wCXmgAAOMDNms0y/wDtjQAAOMCLaYsi/wAkTgAAG////6UA/wCHtgAAG////6UA/wAXqAAAG//u7poA/wAgmgAAG//NzYUA/wB2jQAAG/+Li1oA/wCKVgAAC////0UA/wAEtwAAC////0UA/wCDqAAAC//u7kAA/wCMmgAAC//NzTcA/wDijQAAC/+LiyUA/wCLVAAA1nva2nDW/wDitgAA1nz//4P6/wBhqAAA1nzu7nrp/wBqmgAA1nzNzWnJ/wDAjQAA1XyLi0eJ/wBkUQAAJkju7uiq/wDJMwAAVWT7mPuY/wD5tAAAVWX/mv+a/wCWpgAAVWTukO6Q/wCnmAAAVWTNfM18/wD2iwAAVWSLVItU/wAtSgAAf0Pur+7u/wBKtgAAf0T/u////wDapwAAf0Turu7u/wDjmQAAf0TNls3N/wAyjQAAf0OLZouL/wCoVQAA8Xzb23CT/wDqtgAA8X3//4Kr/wBpqAAA8X3u7nmf/wBymgAA8X3NzWiJ/wDIjQAA8XyLi0dd/wApLQAAGin//+/V/wCZQgAAFEb//9q5/wCXtQAAFEb//9q5/wAfpwAAE0Xu7sut/wAwmQAAE0XNza+V/wB/jAAAFEWLi3dl/wBnCwAAFLDNzYU//wDPOQAA9z///8DL/wBRtQAA9Un//7XF/wDupgAA9Unu7qm4/wD/mAAA9UrNzZGe/wBOjAAA9UmLi2Ns/wDCNQAA1Ebd3aDd/wAitQAA1ET//7v//wC/pgAA1ETu7q7u/wDQmAAA1ETNzZbN/wAfjAAA1EOLi2aL/wDKRgAAhDvmsODm/wAQTQAAxN3woCDw/wB7tgAAv8//mzD//wALqAAAwM/ukSzu/wAUmgAAwM/NfSbN/wBqjQAAwM+LVRqL/wDWTAAAv6qZZjOZ/wDUVgAAAP///wAA/wAKtwAAAP///wAA/wCJqAAAAP/u7gAA/wCSmgAAAP/NzQAA/wDojQAAAP+LiwAA/wCdLwAAAD28vI+P/wCftAAAAD7//8HB/wBLpgAAAD7u7rS0/wBcmAAAAD7NzZub/wCriwAAAD6Li2lp/wAWRwAAn7XhQWnh/wD3tQAAn7f/SHb//wCHpwAAn7fuQ27u/wCQmQAAn7bNOl/N/wDfjAAAn7eLJ0CL/wDKLwAAEdyLi0UT/wC5MAAABIr6+oBy/wC3tAAACZb//4xp/wBjpgAACZbu7oJi/wB0mAAACZbNzXBU/wDDiwAACZaLi0w5/wCsLwAAE5r09KRg/wAaNAAAZ6qLLotX/wAItQAAZ6v/VP+f/wClpgAAZ6vuTu6U/wC2mAAAZ6vNQ82A/wAFjAAAZ6qLLotX/wD3NgAAERD///Xu/wAotQAAERD///Xu/wDFpgAAEhHu7uXe/wDWmAAAEhHNzcW//wAljAAAEhCLi4aC/wBWYAAADbegoFIt/wAjtwAADbj//4JH/wCiqAAADbju7nlC/wCrmgAADbjNzWg5/wABjgAADbmLi0cm/wCtGwAAAADAwMDA/wBZRgAAi2zrh87r/wC8tQAAkHj/h87//wBMpwAAkHjufsDu/wBVmQAAkHjNbKbN/wCkjAAAkXeLSnCL/wBzRwAAr4/NalrN/wACtgAAr5D/g2///wCSpwAAr5Duemfu/wCbmQAAr5DNaVnN/wDqjAAAr5CLRzyL/wAOCAAAlDiQcICQ/wBRtAAAlTj/xuL//wD5pQAAlTjuudPu/wAcmAAAlDnNn7bN/wBwiwAAlTiLbHuL/wBDBwAAlDiQcICQ/wDICQAAAAX///r6/wBgtAAAAAX///r6/wAIpgAAAAXu7unp/wArmAAAAATNzcnJ/wB/iwAAAAOLi4mJ/wCVMwAAav//AP9//wDctAAAav//AP9//wB5pgAAav/uAO52/wCKmAAAav/NAM1m/wDZiwAAav+LAItF/wAHRwAAkpu0RoK0/wDstQAAkpz/Y7j//wB8pwAAkpzuXKzu/wCFmQAAkpzNT5TN/wDUjAAAk5uLNmSL/wB4NAAAGFTS0rSM/wAdtQAAFLD//6VP/wC6pgAAFLDu7ppJ/wDLmAAAFLDNzYU//wAajAAAFLCLi1or/wDyOAAAf/+AAICA/wChTAAA1B3Y2L/Y/wBstgAA1B7//+H//wD8pwAA1B7u7tLu/wAFmgAA1B3NzbXN/wBbjQAA1B2Li3uL/wC6LgAABrj//2NH/wCXtAAABrj//2NH/wBDpgAABrju7lxC/wBUmAAABrjNzU85/wCjiwAABrmLizYm/wAYDwAAKgD////+AABASgAAe7bgQODQ/wBOtgAAgf//APX//wDepwAAgf/uAOXu/wDnmQAAgf/NAMXN/wA2jQAAgf+LAIaL/wB8EAAA1HPu7oLu/wCsVQAA49fQ0CCQ/wDutgAA68H//z6W/wBtqAAA68Du7jqM/wB2mgAA68DNzTJ4/wDMjQAA68CLiyJS/wAYCAAAAACAgICA/wDTMwAAVf+AAIAA/wBNBwAAAACAgICA/wBzMAAAAP+AgAAA/wDMTAAA1P+AgACA/wCeEgAAG0T19d6z/wCGtAAAG0X//+e6/wAypgAAG0Tu7tiu/wBImAAAG0TNzbqW/wCciwAAG0OLi35m/wDPSAAAAAD//////wD1TQAAAAD19fX1/wAgCAAAAAC+vr6+/wAjNAAAVf//AP8A/wBVBwAAAAC+vr6+/wB9MAAA77mwsDBg/wABTQAAxN3woCDw/wAvCgAAKv////8A/wBrtAAAKv////8A/wATpgAAKv/u7u4A/wA2mAAAKv/Nzc0A/wCKiwAAKv+Li4sA/wAPMwAAOMDNms0y/wBBsJUKC318ZgAA5gAAAPIPAADnAAAA7w8AAOcAAADYDwAA6AAAANUPAADoAAAAUS4AAOkAAABOLgAA6QAAAOQvAADqAAAA4S8AAOoAAAA9EwAA6wAAAGdYAADrAAAANhMAAOwAAADwEQAA7AAAAHJqAADtAAAA7gAAAO8AAADwAAAA8QBBuJYKCwnyAAAA8wAAAPQAQcyWCgsp/////wAAAAAhAAAAAAAAAPdAAQD+QAEAAAAAAAEAAAABAAAA/////zIAQYaXCgtE8D8AAAAAAADwvwAAAAAAAPC/aIsCAAAAAAD8OAAAJTkAACFLAAAAAAAAZAAAAGUAAABmAAAAZAAAAL5UAABZFQAAUD8AQdSXCguhAwEAAAACAAAA/////4QyAAD+AAAAVBsAAP8AAAC2HAAAAAEAALIcAAABAQAAtkAAAAIBAADCQAAAAwEAAFYbAAAEAQAA0hUAAAUBAADxQwAABgEAACFNAAAHAQAAzg8AAAgBAADdQgAACQEAALFUAAAKAQAAYQ0AAAsBAAAxEwAADAEAAJsYAAANAQAAlkwAAA4BAAC6EAAADwEAAKlMAAAQAQAAAy0AABABAAB8MgAAEQEAANU7AAASAQAAhDIAABMBAACDMgAAFAEAAFQbAAD/AAAAthwAAAABAAC2QAAAAgEAAMJAAAADAQAAVhsAAAQBAACENAAAFQEAAPFDAAAGAQAAIU0AAAcBAADODwAACAEAAN1CAAAJAQAAsVQAAAoBAABhDQAACwEAAHw0AAAWAQAAmxgAAA0BAACWTAAADgEAALoQAAAPAQAAqUwAABABAAADLQAAEAEAAHwyAAARAQAA1TsAABIBAABWGwAAFwEAAORQAAAYAQAAoUQAABkBAACEMgAAGgEAAOpNAAAbAQAASlkAABwBAAAIAAAABABBgJsKCwIgAQBBmJsKCwEhAEGwmwoLDSEAAAAAAAAACAAAAAQAQcibCgsBIQBB1JsKCxkEAAAABAAAACEBAAAhAAAAIgEAAAgAAAAQAEH4mwoL3wchAAAAJQEAAAgAAAAIAAAAAAAAACYBAAAhAAAAJQEAAAgAAAD/////AAAAAAAAAAAnAQAAAAAAAKoIAABQkgIAaJICAAAAAACqMQAAUJICAJiSAgAAAAAAiEkAAFCSAgDIkgIAAAAAAEA4AABQkgIAyJICAAAAAAC4TQAAUJICAPiSAgAAAAAA+w4AACiTAgD4kgIAAAAAAHlBAABQkgIAQJMCAAAAAACYTQAAUJICAHCTAgAAAAAAIUsAAFCSAgCgkwIAAAAAAKELAABQkgIAoJMCAAAAAABNMgAAUJICACCSAgAAAAAAMVIAAFCSAgDQkwIAAAAAAMo1AABQkgIAAJQCAAAAAAArNgAAUJICADCUAgAAAAAAVkkAAFCSAgBglAIAAAAAAMMxAABQkgIAkJQCAAAAAACyMQAAUJICAMCUAgAAAAAAujEAAFCSAgDwlAIAAAAAAOAxAABQkgIAIJUCAAAAAABQSAAAUJICAECXAgAAAAAAjF8AAFCSAgBwlwIAAAAAAOkcAABQkgIAoJcCAAAAAACcWAAAUJICANCXAgAAAAAAJA8AAFCSAgAAmAIAAAAAAMscAABQlQIAOJgCAAAAAADMEQAAUJICAGiSAgAAAAAAL00AAFCSAgBokgIAAAAAAKJKAABQkgIAaJUCAAAAAACqTQAAUJICAJiVAgAAAAAA2jEAAFCSAgDIlQIAAAAAAMwxAABQkgIA+JUCAAAAAABOTQAAUJICACiWAgAAAAAAxzUAAFCSAgBYlgIAAAAAAFNJAABQkgIAiJYCAAAAAACESwAAUJICAGiYAgAAAAAAMFIAAFCSAgCYmAIAAAAAAKFKAABQkgIAyJgCAAAAAAC3TQAAUJICAPiYAgAAAAAA1RsAAFCSAgAomQIAAAAAAMYYAABQkgIAWJkCAAAAAADeGgAAUJICAIiZAgAAAAAALRoAAFCSAgC4mQIAAAAAAOkaAABQkgIA6JkCAAAAAABgSAAAUJICABiaAgAAAAAAiF8AAFCSAgBImgIAAAAAAHlIAABQkgIAeJoCAAAAAAB8XwAAUJICAKiaAgAAAAAAVUgAAFCSAgDYmgIAAAAAAGlIAABQkgIACJsCAAAAAADYQAAAUJICADibAgAAAAAA5kAAAFCSAgBomwIAAAAAAPVAAABQkgIAmJsCAAAAAACyBgAAUJICAMibAgAAAAAAW0oAAFCSAgD4mwIAAAAAAMobAABQkgIAKJwCAAAAAACZCQAAUJICAFicAgAAAAAAkgkAAFCSAgCInAIAAAAAANQbAABQkgIAuJwCAAAAAAAZUQAAuJYCAEHgowoLBxhRAAC4lgIAQfCjCgsHCEIAANCWAgBBgKQKCwtzHQAA6JYCAACXAgBBqKQKCwEEAEHQpAoLISgBAAAsAQAALQEAAC4BAAAvAQAAMAEAAAAAAAABAAAABABBnKUKCwEBAEHMpQoLBQEAAAABAEH4pQoLCQEAAAABAAAAAQBBqKYKCyEqAQAALAEAAC0BAAAxAQAAAAAAADIBAAAAAAAAAQAAAAEAQdimCgsIMzMzMzMz078AQfSmCgsFAQAAAAMAQainCgsBBABB1KcKCwUBAAAABABB5acKCwOARkAAQYSoCgsFAQAAAAQAQZioCgsImpmZmZmZ2b8AQbSoCgsFAQAAAAQAQdCoCgsIMzMzMzMz4z8AQeSoCgsFAQAAAAUAQfioCgsIexSuR+F65L8AQZSpCgsFAQAAAAUAQcSpCgsFAQAAAAYAQfSpCgsFAQAAAAcAQaSqCgsFAQAAAAgAQdCqCgshKAEAACwBAAAtAQAALgEAAC8BAAAwAQAAAQAAAAEAAAAEAEGYqwoLCQEAAAACAAAAAQBBzKsKCwUCAAAACABB/KsKCwUDAAAACABBrKwKCwUBAAAAAwBBvawKCwOAZkAAQdysCgsFAQAAAAQAQe2sCgsLgGZAmpmZmZmZ2b8AQYytCgsFAQAAAAUAQZ2tCgsLgGZAexSuR+F65L8AQbitCgtRKQEAADMBAAA0AQAANQEAADYBAAA3AQAAKwEAADgBAAAtAQAAOQEAAAAAAAA6AQAAKAEAACwBAAAtAQAAOwEAAC8BAAAwAQAAAAAAAAEAAAAKAEGsrgoLC+icAgA4RwEAP0cBAEHErgoLBQEAAAAEAEHprgoLARAAQfSuCgsFAQAAAAQAQZmvCgsBIABBpK8KCwUBAAAABABBya8KCwEwAEHUrwoLBQEAAAAEAEH5rwoLAUAAQYSwCgsFAQAAAAQAQamwCgsYUAAAAAAAADwBAAA9AQAAAAAAAAEAAAATAEHhsAoLEKABADCYAgAAAAAAAQAAAAQAQZGxCgsBBABBnLEKCwUBAAAABABBrbEKCwOARkAAQcCxCgsRGAAAAAAAAAABAAAAAQAAAAQAQfCxCgsRCAAAAAAAAAABAAAAAQAAAAEAQaCyCgsBGABBrLIKCwUBAAAABABB0bIKCwFgAEHcsgoLBQEAAAAEAEGBswoLAXAAQYyzCgsFAQAAAAQAQbGzCgsBgABBvLMKCwUBAAAABABB4bMKCwGQAEHsswoLBQEAAAAEAEGRtAoLAhABAEGctAoLBQEAAAAEAEHBtAoLAiABAEHMtAoLBQEAAAAEAEHxtAoLAjABAEH8tAoLBQEAAAAEAEGhtQoLAkABAEGstQoLBQEAAAAEAEHRtQoLAlABAEHctQoLBQEAAAAEAEGBtgoLAaAAQYy2CgsFAQAAAAQAQbG2CgsBsABBvLYKCwUBAAAABABB4bYKCwHAAEHstgoLBQEAAAAEAEGRtwoLAdAAQZy3CgsFAQAAAAQAQcG3CgsB4ABBzLcKCwUBAAAABABB8bcKCwHwAEH8twoLBQEAAAAEAEGiuAoLAQEAQay4CgsFAQAAAAQAQdG4CgsCYAEAQdy4CgsFAQAAAAQAQYG5CgsCgAEAQYy5CgsFAQAAAAQAQbG5CgsCcAEAQby5CgsFAQAAAAQAQeG5CgsZkAEAAAAAAD4BAAA/AQAAaTkAAEVpAABkOQBBhLoKCwYEAAAAhUIAQZS6CgsueEUAAEVpAABkOQAAAAAAAHBFAAAFAAAAhUIAAAAAAADsWQAA7DoAAEVpAADaOgBBzLoKCz4GAAAAhUIAAMVTAAAAAAAAj0UAAEVpAADaOgAAAAAAAHBFAAAHAAAAhUIAAMVTAADsWQAA3zoAACJpAADaOgBBlLsKCz4KAAAAf0IAAMVTAAAAAAAAIVoAACJpAADaOgAAAAAAAOxZAAALAAAAf0IAAMVTAADsWQAA3g8AACJpAAC4DwBB3LsKCwYIAAAAf0IAQey7Cgsq81kAACJpAAC4DwAAAAAAAOxZAAAJAAAAf0IAAAAAAADsWQAAdBwAAHQcAEGkvAoLBgwAAADNUABBtLwKCwrrUwAAdBwAAMVTAEHIvAoLOg4AAADNUAAAxVMAAAAAAADDRQAAdBwAAMVTAAAAAAAAcEUAAA8AAADNUAAAxVMAAOxZAAAGRgAAdBwAQYy9CgsacEUAAA0AAADNUAAAAAAAAOxZAADeYAAA3mAAQbS9CgsGEAAAAIVCAEHEvQoLChxUAADeYAAAxVMAQdi9CgtOEgAAAIVCAADFUwAAAAAAANdFAADeYAAAxVMAAAAAAABwRQAAEwAAAIVCAADFUwAA7FkAAKAJAADeYAAAAAAAAIRVAAAAAAAAFAAAAIVCAEGwvgoLcspTAADeYAAAxVMAAIRVAAAAAAAAFgAAAIVCAADFUwAAAAAAAKZFAADeYAAAxVMAAIRVAABwRQAAFwAAAIVCAADFUwAA7FkAAO1FAADeYAAAAAAAAIRVAABwRQAAFQAAAIVCAAAAAAAA7FkAABZGAADeYABBrL8KCx5wRQAAEQAAAIVCAAAAAAAA7FkAAAZUAAAwaQAAxVMAQdS/Cgs6GgAAAH9CAADFUwAAAAAAAFlaAAAwaQAAxVMAAAAAAADsWQAAGwAAAH9CAADFUwAA7FkAAJJaAAAwaQBBmMAKCx7sWQAAGQAAAH9CAAAAAAAA7FkAANA0AAAwaQAArzQAQcDACgsGGAAAAH9CAEHQwAoLCvhTAACpSgAAxVMAQeTACgs6HgAAAH9CAADFUwAAAAAAAEVaAACpSgAAxVMAAAAAAADsWQAAHwAAAH9CAADFUwAA7FkAAIJaAACpSgBBqMEKCx7sWQAAHQAAAH9CAAAAAAAA7FkAAME0AACpSgAArzQAQdDBCgsGHAAAAH9CAEHgwQoLBlU2AABVNgBB9MEKCwYgAAAAtAUAQYTCCgsK4FMAAH4XAADFUwBBmMIKCzoCAAAAf0IAAMVTAAAAAAAANFoAAH4XAADFUwAAAAAAAOxZAAADAAAAf0IAAMVTAADsWQAAdVoAAH4XAEHcwgoLGuxZAAABAAAAf0IAAAAAAADsWQAAtTQAAH4XAEGIwwoLAn9CAEGUwwoLKgdaAAATaQAA1DUAAAAAAADsWQAAIQAAAH9CAAAAAAAA7FkAAEAUAABEFABBzMMKCwYiAAAAtAUAQdzDCgulAngXAACqNAAAkDQAAHtCAABrQgAAnjQAAGkXAACSFQAAyU0AAAAAAADUYAAA4DgAAHIPAAAOFgAA/xUAAA8vAACIBgAA9BUAADRgAAB8FQAAiAYAAA8vAAAAAAAAKBoAAGwcAACCCgAA7C4AAPMaAAAGLwAA9y4AAEFLAACdUwAAAAAAAK4uAAAAAAAA6RUAAAAAAAB9YAAA8BgAAAAAAAC+ZQAAgxAAAAAAAABdYAAAAAAAABcWAAAAAAAAmGAAAAAAAACuOgAAAAAAAAgAAAAEAAAAAAAAAEUBAAAhAAAARgEAAAgAAAD/////AAAAAAAAAAAhAAAAAAAAAAgAAAAEAAAA/////wAAAAAAAAAARwEAAD0KAQACEwEACAAAABAAAAAYAEGMxgoLDUgBAAAIAAAAEAAAABgAQaTGCgsVSQEAAEsBAABMAQAAAQEAAAgAAAAIAEHExgoLDU0BAABOAQAACAAAABAAQdzGCgs1TwEAAFABAAAIAAAA/////wAAAAAAAAAAWAEAAAAAAABfQUdfZGF0YWRpY3QAAAAABGAAABUAQZzHCgsBIABBqMcKCwJaAQBBtMcKCw7/////AAAAAAAAAABaAQBBzMcKCwEYAEHYxwoLAlsBAEHkxwoLDv////8AAAAAAAAAAFsBAEH8xwoLARwAQYjICgsCXAEAQZTICgsBJABBoMgKCzZdAQAACQAAAAsAAAAIAAAACgAAADykAgCIpAIAXgEAAF8BAABgAQAAYQEAAGIBAAAhAAAAYwEAQezICgsCZAEAQfjICgsBCABBhMkKCxJlAQAAZgEAAGcBAABoAQAAaQEAQbDJCgtpawEAAGwBAAAQAAAA/////wAAAAAAAAAAbwEAAAAAAAABAAAAgAAAAHABAABAAAAA2KQCAHEBAAAEAAAA5KQCAHEBAAAIAAAA8KQCAHEBAAAEAAAA/KQCAAAAAAAAAG3m7N4FAAsAAAAFAEGlygoLAQIAQbzKCgsL/gEAAP0BAAD+ywIAQdTKCgsBAgBB5MoKCwj//////////wBBqMsKCwkYpQIAAAAAAAkAQb3LCgsBAgBB0MsKCxL/AQAAAAAAAP0BAAAIzAIAAAQAQfzLCgsE/////wBBwMwKCwEFAEHMzAoLAgICAEHkzAoLDv4BAAADAgAAGNACAAAEAEH8zAoLAQEAQYzNCgsF/////woAQdDNCgsgQKYCAHDeAwAlbS8lZC8leQAAAAglSDolTTolUwAAAAg=\";function M(){const A=atob(G),I=new Uint8Array(A.length);for(let g=0;gnew o(A)))}export{y as engines,F as formats,R as graphvizVersion,s as instance};\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending(value, maxValue) > 0\n : ascending(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export default x => () => x;\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","function responseBlob(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.blob();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n","function responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.arrayBuffer();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n","export {default as blob} from \"./blob.js\";\nexport {default as buffer} from \"./buffer.js\";\nexport {default as dsv, csv, tsv} from \"./dsv.js\";\nexport {default as image} from \"./image.js\";\nexport {default as json} from \"./json.js\";\nexport {default as text} from \"./text.js\";\nexport {default as xml, html, svg} from \"./xml.js\";\n","function responseJson(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseJson);\n}\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import text from \"./text.js\";\n\nfunction parser(type) {\n return (input, init) => text(input, init)\n .then(text => (new DOMParser).parseFromString(text, type));\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export {default as cluster} from \"./cluster.js\";\nexport {default as hierarchy, Node} from \"./hierarchy/index.js\";\nexport {default as pack} from \"./pack/index.js\";\nexport {default as packSiblings} from \"./pack/siblings.js\";\nexport {default as packEnclose} from \"./pack/enclose.js\";\nexport {default as partition} from \"./partition.js\";\nexport {default as stratify} from \"./stratify.js\";\nexport {default as tree} from \"./tree.js\";\nexport {default as treemap} from \"./treemap/index.js\";\nexport {default as treemapBinary} from \"./treemap/binary.js\";\nexport {default as treemapDice} from \"./treemap/dice.js\";\nexport {default as treemapSlice} from \"./treemap/slice.js\";\nexport {default as treemapSliceDice} from \"./treemap/sliceDice.js\";\nexport {default as treemapSquarify} from \"./treemap/squarify.js\";\nexport {default as treemapResquarify} from \"./treemap/resquarify.js\";\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packSiblingsRandom(circles, lcg());\n return circles;\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","export default x => () => x;\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","export {default as schemeCategory10} from \"./categorical/category10.js\";\nexport {default as schemeAccent} from \"./categorical/Accent.js\";\nexport {default as schemeDark2} from \"./categorical/Dark2.js\";\nexport {default as schemeObservable10} from \"./categorical/observable10.js\";\nexport {default as schemePaired} from \"./categorical/Paired.js\";\nexport {default as schemePastel1} from \"./categorical/Pastel1.js\";\nexport {default as schemePastel2} from \"./categorical/Pastel2.js\";\nexport {default as schemeSet1} from \"./categorical/Set1.js\";\nexport {default as schemeSet2} from \"./categorical/Set2.js\";\nexport {default as schemeSet3} from \"./categorical/Set3.js\";\nexport {default as schemeTableau10} from \"./categorical/Tableau10.js\";\nexport {default as interpolateBrBG, scheme as schemeBrBG} from \"./diverging/BrBG.js\";\nexport {default as interpolatePRGn, scheme as schemePRGn} from \"./diverging/PRGn.js\";\nexport {default as interpolatePiYG, scheme as schemePiYG} from \"./diverging/PiYG.js\";\nexport {default as interpolatePuOr, scheme as schemePuOr} from \"./diverging/PuOr.js\";\nexport {default as interpolateRdBu, scheme as schemeRdBu} from \"./diverging/RdBu.js\";\nexport {default as interpolateRdGy, scheme as schemeRdGy} from \"./diverging/RdGy.js\";\nexport {default as interpolateRdYlBu, scheme as schemeRdYlBu} from \"./diverging/RdYlBu.js\";\nexport {default as interpolateRdYlGn, scheme as schemeRdYlGn} from \"./diverging/RdYlGn.js\";\nexport {default as interpolateSpectral, scheme as schemeSpectral} from \"./diverging/Spectral.js\";\nexport {default as interpolateBuGn, scheme as schemeBuGn} from \"./sequential-multi/BuGn.js\";\nexport {default as interpolateBuPu, scheme as schemeBuPu} from \"./sequential-multi/BuPu.js\";\nexport {default as interpolateGnBu, scheme as schemeGnBu} from \"./sequential-multi/GnBu.js\";\nexport {default as interpolateOrRd, scheme as schemeOrRd} from \"./sequential-multi/OrRd.js\";\nexport {default as interpolatePuBuGn, scheme as schemePuBuGn} from \"./sequential-multi/PuBuGn.js\";\nexport {default as interpolatePuBu, scheme as schemePuBu} from \"./sequential-multi/PuBu.js\";\nexport {default as interpolatePuRd, scheme as schemePuRd} from \"./sequential-multi/PuRd.js\";\nexport {default as interpolateRdPu, scheme as schemeRdPu} from \"./sequential-multi/RdPu.js\";\nexport {default as interpolateYlGnBu, scheme as schemeYlGnBu} from \"./sequential-multi/YlGnBu.js\";\nexport {default as interpolateYlGn, scheme as schemeYlGn} from \"./sequential-multi/YlGn.js\";\nexport {default as interpolateYlOrBr, scheme as schemeYlOrBr} from \"./sequential-multi/YlOrBr.js\";\nexport {default as interpolateYlOrRd, scheme as schemeYlOrRd} from \"./sequential-multi/YlOrRd.js\";\nexport {default as interpolateBlues, scheme as schemeBlues} from \"./sequential-single/Blues.js\";\nexport {default as interpolateGreens, scheme as schemeGreens} from \"./sequential-single/Greens.js\";\nexport {default as interpolateGreys, scheme as schemeGreys} from \"./sequential-single/Greys.js\";\nexport {default as interpolatePurples, scheme as schemePurples} from \"./sequential-single/Purples.js\";\nexport {default as interpolateReds, scheme as schemeReds} from \"./sequential-single/Reds.js\";\nexport {default as interpolateOranges, scheme as schemeOranges} from \"./sequential-single/Oranges.js\";\nexport {default as interpolateCividis} from \"./sequential-multi/cividis.js\";\nexport {default as interpolateCubehelixDefault} from \"./sequential-multi/cubehelix.js\";\nexport {default as interpolateRainbow, warm as interpolateWarm, cool as interpolateCool} from \"./sequential-multi/rainbow.js\";\nexport {default as interpolateSinebow} from \"./sequential-multi/sinebow.js\";\nexport {default as interpolateTurbo} from \"./sequential-multi/turbo.js\";\nexport {default as interpolateViridis, magma as interpolateMagma, inferno as interpolateInferno, plasma as interpolatePlasma} from \"./sequential-multi/viridis.js\";\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export {\n default as scaleBand,\n point as scalePoint\n} from \"./band.js\";\n\nexport {\n default as scaleIdentity\n} from \"./identity.js\";\n\nexport {\n default as scaleLinear\n} from \"./linear.js\";\n\nexport {\n default as scaleLog\n} from \"./log.js\";\n\nexport {\n default as scaleSymlog\n} from \"./symlog.js\";\n\nexport {\n default as scaleOrdinal,\n implicit as scaleImplicit\n} from \"./ordinal.js\";\n\nexport {\n default as scalePow,\n sqrt as scaleSqrt\n} from \"./pow.js\";\n\nexport {\n default as scaleRadial\n} from \"./radial.js\";\n\nexport {\n default as scaleQuantile\n} from \"./quantile.js\";\n\nexport {\n default as scaleQuantize\n} from \"./quantize.js\";\n\nexport {\n default as scaleThreshold\n} from \"./threshold.js\";\n\nexport {\n default as scaleTime\n} from \"./time.js\";\n\nexport {\n default as scaleUtc\n} from \"./utcTime.js\";\n\nexport {\n default as scaleSequential,\n sequentialLog as scaleSequentialLog,\n sequentialPow as scaleSequentialPow,\n sequentialSqrt as scaleSequentialSqrt,\n sequentialSymlog as scaleSequentialSymlog\n} from \"./sequential.js\";\n\nexport {\n default as scaleSequentialQuantile\n} from \"./sequentialQuantile.js\";\n\nexport {\n default as scaleDiverging,\n divergingLog as scaleDivergingLog,\n divergingPow as scaleDivergingPow,\n divergingSqrt as scaleDivergingSqrt,\n divergingSymlog as scaleDivergingSymlog\n} from \"./diverging.js\";\n\nexport {\n default as tickFormat\n} from \"./tickFormat.js\";\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","export default function number(x) {\n return +x;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n var squared = continuous(),\n range = [0, 1],\n round = false,\n unknown;\n\n function scale(x) {\n var y = unsquare(squared(x));\n return isNaN(y) ? unknown : round ? Math.round(y) : y;\n }\n\n scale.invert = function(y) {\n return squared.invert(square(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (squared.domain(_), scale) : squared.domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return scale.range(_).round(true);\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, scale) : round;\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return radial(squared.domain(), range)\n .round(round)\n .clamp(squared.clamp())\n .unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n var domain = [],\n interpolator = identity;\n\n function scale(x) {\n if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.range = function() {\n return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n };\n\n scale.quantiles = function(n) {\n return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import creator from \"./creator.js\";\nimport select from \"./select.js\";\n\nexport default function(name) {\n return select(creator(name).call(document.documentElement));\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","export {default as create} from \"./create.js\";\nexport {default as creator} from \"./creator.js\";\nexport {default as local} from \"./local.js\";\nexport {default as matcher} from \"./matcher.js\";\nexport {default as namespace} from \"./namespace.js\";\nexport {default as namespaces} from \"./namespaces.js\";\nexport {default as pointer} from \"./pointer.js\";\nexport {default as pointers} from \"./pointers.js\";\nexport {default as select} from \"./select.js\";\nexport {default as selectAll} from \"./selectAll.js\";\nexport {default as selection} from \"./selection/index.js\";\nexport {default as selector} from \"./selector.js\";\nexport {default as selectorAll} from \"./selectorAll.js\";\nexport {styleValue as style} from \"./selection/style.js\";\nexport {default as window} from \"./window.js\";\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","import pointer from \"./pointer.js\";\nimport sourceEvent from \"./sourceEvent.js\";\n\nexport default function(events, node) {\n if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n events = sourceEvent(events);\n if (node === undefined) node = events.currentTarget;\n events = events.touches || [events];\n }\n return Array.from(events, event => pointer(event, node));\n}\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([array(selector)], root);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","export default function() {\n return !this.node();\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n return Array.from(this);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Transition} from \"./transition/index.js\";\nimport {SCHEDULED} from \"./transition/schedule.js\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import \"./selection/index.js\";\nexport {default as transition} from \"./transition/index.js\";\nexport {default as active} from \"./active.js\";\nexport {default as interrupt} from \"./interrupt.js\";\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export {default as zoom} from \"./zoom.js\";\nexport {default as zoomTransform, identity as zoomIdentity, Transform as ZoomTransform} from \"./transform.js\";\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"main\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// no jsonp function","__webpack_require__.nc = undefined;","import '../style/index.css';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {NowVisPanel} from './nowpanel';\nimport {ConfigWidget} from './config_widget';\nimport {ProjectWidget} from './project_widget';\nimport {GroupWidget} from './group_widget';\nimport {HistoryWidget} from './graph/history_graph';\nimport { AnnontationWidget } from './annotation_widget';\nimport {DatabaseWidget} from './database_widget';\n//import { json } from '@noworkflow/utils';\n\n\nfunction main(): void {\n // ToDo: parse URL to open specific graphs\n var experimentsIn = (document.getElementById(\"experimentsIn\")).value;\n var selectedExp = (document.getElementById(\"selectedExperiment\")).value;\n var server = (document.getElementById(\"server\")).value;\n var experiments=[];\n\n if(experimentsIn)\n experiments=JSON.parse(experimentsIn);\n\n var mainpanel = new NowVisPanel();\n mainpanel.id = 'main';\n if(server==\"True\"){\n var projectWidget = new ProjectWidget(experiments);\n var groupWidget = new GroupWidget();\n var databaseWidget = new DatabaseWidget(mainpanel);\n\n mainpanel.addMainWidget(projectWidget);\n mainpanel.addMainWidget(groupWidget);\n mainpanel.addMainWidget(databaseWidget);\n }\n else{\n var config = new ConfigWidget();\n var annotationn = new AnnontationWidget(selectedExp);\n var history = new HistoryWidget(config, \"History\", \"History\", selectedExp,annotationn);\n var databaseWidget = new DatabaseWidget(mainpanel);\n\n mainpanel.addMainWidget(history);\n mainpanel.addMainWidget(config);\n mainpanel.addMainWidget(annotationn);\n mainpanel.addMainWidget(databaseWidget);\n history.load();\n } \n \n Widget.attach(mainpanel, document.body);\n window.onresize = () => { mainpanel.update() };\n}\n\nwindow.onload = main;"],"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","_classCallCheck","_defineProperties","_toPropertyKey","key","_createClass","_toPrimitive","toPrimitive","String","Number","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","_assertThisInitialized","ReferenceError","Boolean","valueOf","bind","_inherits","_setPrototypeOf","Widget","select","d3_select","AnnontationWidget","_Widget","expId","_this","node","createNode","d3node","addClass","title","label","closable","caption","setNode","setAnnotationLevelToExperiment","onBeforeHide","msg","trialId","fetchUrl","annotationLevel","anntTitle","text","setAnnotations","setAnnotationLevelToTrial","activeAnnotation","parentDock","parent","activateWidget","_fillAnnotations","_callee","_thiss","response","obj","_callee$","_context","annotations","Array","fetch","headers","status","json","item","annt","id","provenanceType","annotationFormat","description","relatedTrial","relatedExperiment","showNode","errorFeedback","fillAnnotations","addAnntRow","tBody","append","attr","actions","addMemberButton","classed","on","window","open","_setAnnotations","_callee2","header","_callee2$","_context2","table","html","addFormInput","form","fieldId","fieldLabel","fieldType","grp","divIn","inp","addFeedBackinfo","baseNode","cls","txt","desc","feedbackNode","hideNode","getValueFromSelect","defaultVale","option","options","selectedIndex","createAddGroupForm","projectsDiv","inputsDiv","descIn","annotationIn","annotationFormatIn","provenanceTypeIn","confimButton","addAnntButton","successFeedback","newAnnotation","annotation","property","body","JSON","stringify","content","document","createElement","BaseActivationGraphWidget","ConfigWidget","showTrial","showInfo","graphType","useCache","historydiv","showGraph","trialdiv","graphTypeForm","useCacheForm","_defineProperty","_createForOfIteratorHelper","isArray","_unsupportedIterableToArray","_n","F","_arrayLikeToArray","toString","from","test","forceSimulation","forceLink","forceManyBody","forceCenter","forceCollide","scaleOrdinal","schemeTableau10","drag","QueryWidget","QueryResultWidget","DatabaseTabWidget","TableInfoWidget","_DatabaseTabWidget","tableName","details","concat","style","display","flexDirection","height","overflow","contentContainer","error","columnsTable","columnsThead","_i","_arr","columnsTbody","columns","col","row","notnull","pk","foreign_keys","fkTable","fkThead","_i2","_arr2","fkTbody","_iterator","_step","fk","to","err","referenced_by","columnReferences","ref","referenced_column","refTable","refThead","_i3","_arr3","refTbody","_iterator2","_step2","referencing_table","referencing_column","DatabaseWidget","_Widget2","panel","_this2","nodes","links","Set","container","headerContainer","controlsContainer","tablesDropdown","dropdownButton","openNewQueryTab","clearSelection","color","dropdown","getElementById","isVisible","event","button","contains","target","showLoadingMessage","onAfterShow","fetchAndRenderTables","querySelector","selectAll","remove","_fetchAndRenderTables","dropdownMenu","data","console","showLoadingState","ok","renderTableList","tables","buildGraphDataFromTablesResponse","initializeGraph","renderGraph","dataLoaded","t0","showErrorMessage","message","_this3","graphData","map","sourceTable","tableForeignKeys","existingLink","find","link","source","sourceColumn","targetColumn","createArrowMarker","svg","createSimulation","width","isInitial","undefined","simulation","linkDistance","chargeStrength","chargeDistanceMax","collisionRadius","force","distance","strength","distanceMax","radius","alphaDecay","velocityDecay","rect","getBoundingClientRect","Math","max","_this4","svgNode","centerX","centerY","nodesCount","min","index","angle","PI","x","sin","cos","enter","selection","handleNodeClick","isValidNumber","boundedX","boundedY","widget","isSelected","selectedNodes","has","linkData","sourceId","targetId","nodeData","isConnected","some","isNodeSelected","updateSelection","active","alphaTarget","restart","fx","fy","isFinite","toggleSelection","nodeId","add","clear","each","nodeElement","newQueryBtn","clearBtn","size","innerHTML","ctrlKey","metaKey","preventDefault","stopPropagation","openTableInfoTab","getSelectedTables","selectTables","tableNames","_this5","_this6","d3menu","setAttribute","_openTableInfoTab","refWidget","_iterator3","_step3","w","encodeURIComponent","widgets","addInfoWidget","mode","_x","onResize","getInitialQuery","selectedTables","initialQuery","usedTables","joins","currentTable","joinFound","_iterator4","_step4","log","targetTable","join","_openNewQueryTab","_callee4","columnNames","_ref2","columnPromises","columnArrays","queryWidget","_callee4$","_context4","_ref","_callee3","_callee3$","_context3","_x2","all","_toConsumableArray","warn","TrialGraph","setGraph","config","showDiffFunction","nowVisPanel","sub","getElementsByClassName","graph","load","t1","t2","graphDefinition","selectedGraph","genDataflow","customForm","selectorDiv","typeOptions","useCacheDiv","selectorToggle","graphId","visible","selectorToggleI","selectorLabel","optionsNode","customLoadTooltip","div","trialid","aid","url","createResponse","activationId","div2","activationStorage","updateTooltipDiv","queryTooltip","configureGraph","updateWindow","fn","selectorReload","DiffGraphWidget","_BaseActivationGraphW","createForm","trial1","trial2","cache","functionDiffWindow","functionDiffJson","windowIdAndTitle","alert","functionDiffWidget","addGraphWidget","addHideShowButton","elementToAppendTo","buttonId","spanId","crypto","randomUUID","spanToHideOrShow","thisButton","filterVariablesArray","array","opVariables","defaultVariables","filteredArray","filter","arrayElement","includes","writeHTMLDiffVariables","spanVariables","trial1VariablesThatChanged","trial2VariablesAdded","trial1VariablesRemoved","variablesChangedTitle","spanVariablesChanged","diffVar","variablesLines","match","differentAttributes","findDifferenceBetweenVariables","colorJsonAttributesHTML","variablesAddedTitle","spanVariablesAdded","varAdded","variablesRemovedTitle","spanVariablesRemoved","varRemoved","variable1","variable2","jsonVariable1","parse","replace","jsonVariable2","jsonAsString","attributesArray","coloredJsonAsString","regex","regexMatches","RegExp","raw","_templateObject","_taggedTemplateLiteral","colorArrayElementsHTML","symDifference","coloredArray","argument","indexOf","writeFileAccess","fileAccessArray","file","buffering","content_hash_before","downloadFileContent","content_hash_after","timestamp","stack","didntChange","changeText","textChangeTitle","spanProperty","buttonDiv","lower","trial1ChangedVariablesFiltered","trial2AddedVariablesFiltered","trial1RemovedVariablesFiltered","fileAccessAddedTitle","spanFileAccessAdded","fileAccessRemovedTitle","spanFileAccessRemoved","fileAccessReplacedTitle","spanFileAccessReplaced","content_hash_before_first_trial","content_hash_before_second_trial","content_hash_after_first_trial","content_hash_after_second_trial","timestamp_first_trial","timestamp_second_trial","checkpoint_first_trial","checkpoint_second_trial","fileHash","fileName","download","href","location","origin","appendChild","click","removeChild","HistoryGraph","makeid","TrialGraphWidget","TrialInfoWidget","DiffInfoWidget","fs","instance","pl","require","svgPanZoom","HistoryWidget","annontationWidget","rightClickMenu","buildModal","buildRightClickMenu","script","execution","summarize","customCtrlClick","redTrial","state","selectedNode","greenTrial","diffGraphWidget","diffInfoWidget","customWindowTabCommand","trialIdSimplified","windowId","command","trialExportWidget","customSelectNode","trialGraphWidget","trialInfoWidget","filterDiv","scriptOptions","currentScript","scripts","filterToggle","filterToggleI","filterLabel","buildPushCommand","modal","modalBody","buildPullCommand","buildAddRemote","buildEditRemote","buildDeleteRemote","modalContent","modalHeader","cleanModalBodyAndClose","buildRestoreTrialCommand","buildRestoreFileCommand","buildProvCommand","buildExportPrologCommand","buildDataflowCommand","buildTrialFunctionDiffCommand","self","_parent$getAttribute","parentNode","getAttribute","buildTrialFunctionDiffModal","_parent$getAttribute2","buildDataflowModal","exportUrl","exportWindowId","buildExportPrologModal","provWindowId","provUrl","provWindow","prov_lines","prov","split","line","trialFiles","_submitButton","files","changeTitle","submitButton","showModal","createFormSelectInput","createFormTextInput","fileToRestore","selectedOptions","fileIdentifier","getTextInputFormByID","targetPath","restoreUrl","getRestoreOrCollabCommand","addAlert","_submitButton2","createFormCheckInput","skipScript","checked","skipModules","skipFileAccess","_submitButton3","textContent","remoteURL","remoteName","addRemoteURL","terminal_text","executeCollabCommand","remotes","_ref3","_x3","_this7","_ref4","_x4","serverUrlId","_submitButton4","server_url","remoteURLText","serverUrl","collabCommandUrl","d3content","filterInternal","executionOptions","filterReload","secondTrialId","firstTrialSelectActivation","activation","substring","secondTrialSelect","trial","tag","secondTrialSelectActivation","getSecondTrialFunctionActivations","firstTrialFunctionId","secondTrialFunctionId","_submitButton5","inferenceRules","hideTimestamps","buildExportPrologTab","exportWindow","prologSession","answerCallback","answer","answerString","answerCardTextId","answerCardText","answerWindow","format_answer","prologProgram","userQuery","consult","success","query","scrollableModal","modalDialog","overflowY","maxHeight","getDataflow","dataflowWindowId","dataflowUrl","dataflow","viz","dataflowWindow","dataflowButtons","selectedEdge","svgElement","renderSVGElement","preventMouseEventsDefault","dblClickZoomEnabled","_loop","nodeIndex","presentNode","children","tagName","toLowerCase","presentNodeSelection","shiftKey","deletePriorNodes","checkboxOpenDataflowExcludeProvenanceNewWindow","dataflowWindowD3Select","checkboxID","excludePriorProvenanceHint","chooseDataflowExcludedProvenanceWindowId","presentWindowId","newWindowId","lastIndexOf","selectedNodeEvaluationTitle","presentNodeOrderEvaluationTitle","firstEvaluationOrder","lastEvaluationOrder","dataflowUrlLastEvaluation","dataflowUrlFirstEvaluation","excludingProvenanceWindow","getDataflowWindowExcludeSomeProvenance","responseLastEvaluation","jsonLastEvaluation","dataflowLastEvaluation","responseFirstEvaluation","jsonFirstEvaluation","dataflowFirstEvaluation","dataflowAMinusDataflowB","excludingProvenanceWindowId","dataflowA","dataflowB","selectedEvaluationOrder","lastEvaluationId","linesDataflowA","linesDataflowB","newDataflow","removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation","dataflowIsAligned","addsDeletedNodeSettingsAndChecksIfDataflowIsAligned","removesDeletedEvaluationsFromAligment","newDataflowString","addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow","_loop2","selectedNodeSelection","deletePriorNodesAfterDeletingPriorNodes","_excludingProvenanceW","selectedNodeOrderEvaluationTitle","dataflowUrlPresentEvaluation","selectedEvaluationDataflow","evaluations","lineIndex","trim","alignedEvaluations","alignedEvalIndex","alignedEval","_loop3","indexOfDataflowLineToRemove","lineToRemove","findIndex","dataflowLine","splice","tempArray","isAligned","evaluationWithoutSettings","lineToAdd","string","evaluationList","selectedEvaluation","dataflowTextInputEvaluation","createFormNumberInput","dataflowEvaluationInput","addsAutocompleteToDataflowWDF","dataFlowShowType","dataFlowHideTimestamps","dataFlowHideInternals","dataFlowHideNotCode","dataFlowActivationNames","dataFlowHideFunc","dataflowFileAccesses","dataflowEvaluation","dataflowGroup","dataflowMode","dataflowDepth","dataflowValueLength","dataflowName","input","autocompleteSuggestionsResults","evaluationInputHint","suggestions","opacity","border","padding","marginTop","evaluation","_loop4","evaluationSuggestionId","evaluation_id","first_char_line","downloadDataflowAsSVG","dataflowDOT","appendDiv","saveAs","Blob","outerHTML","downloadDataflowAsDOT","excludeProvenanceHint","commandTitle","trialIdTitle","hideModal","alertType","feedbackAlert","checkInputId","checkDiv","textInputId","helpId","helpText","textDiv","textInput","selectId","selectText","minOptionNumber","maxOptionNumber","defaultOption","optionsLabels","selectDiv","selectInput","optionNumber","inputLabel","minValue","defaultValue","numberDiv","formTextInput","result","_superPropGet","assign","GroupWidget","onBeforeShow","groups","setGroups","setUsers","_setUsers","userIn","users","login","userLogin","resfreshGroups","_setGroups","group","members","user","addGrpRow","_deleteGrp","grpId","deleteGrp","membersText","addMemberForm","currentGroup","deleteGroupButton","confirm","nameIn","addGrpButton","newGrp","createAddMemberForm","userId","ModulesInfoWidget","EnvironmentInfoWidget","FileAccessesInfoWidget","display1","display2","createMain","loadModules","loadEnvironment","loadFileAccess","main","h1","code_hash","info","start","duration_text","filter_trial","filterfn","select_trial","filterdiv","newfilter","on_change","modules_url","modules","modules_added","modules_removed","modules_replaced","fold","createFold","foldable","createFilter","ul","strial","element","valid","t1_path","mod_li","t2_path","elements","rem","li","version","path","createFilterFold","environment_url","environment","env_added","env_removed","env_replaced","env_li","_iterator5","_step5","_iterator6","_step6","env_cli","accesses_url","accesses","fa_added","fa_removed","fa_replaced","_iterator7","_step7","fa_li","_iterator8","_step8","_iterator9","_step9","fa_cfield","value1","value2","attr1","attr2","mod","env_field","env","fa_field","fa","v1","v2","trialDisplay","default_local","createItem","createFilterDiv","text_filter","select_local","stext","slocal","check_text","check_local","createList","list","trial_path","mode_filter","select_hash","local","smode","shash","check_mode","check_hash","startsWith","pos","select_version","sversion","check_version","file_accesses","idAttr","scriptAttr","startAttr","str_start","finishAttr","str_finish","durationAttr","argumentsAttr","anntButton","foldI","spanI","foldA","foldAI","DockPanel","findInLayout","area","splitconfig","every","child","tabconfig","tabwidget","temp","NowVisPanel","_DockPanel","addMainWidget","nowVis","wnow","addWidget","operation","layout","saveLayout","sublayout","sizes","restoreLayout","ProjectWidget","experiments","addExpRow","exp","expTBody","cloneCommandText","navigator","clipboard","writeText","divCopied","setTimeout","addExpButton","newExp","rows","count","renderTable","csv","blob","URL","createObjectURL","revokeObjectURL","paginationContainer","startIndex","currentPage","endIndex","paginationButtons","totalPages","ceil","tableContainer","thead","tbody","startRow","endRow","currentPageRows","tr","editorId","createQueryInterface","_createQueryInterface","headerRow","queryContainer","executeQuery","aceEditor","ace","edit","setTheme","session","setMode","setOptions","fontSize","minLines","showPrintMargin","enableBasicAutocompletion","enableLiveAutocompletion","commands","addCommand","bindKey","win","mac","exec","langTools","tableCompleter","getCompletions","editor","prefix","callback","completions","meta","addCompleter","setValue","focus","_executeQuery","statusArea","sql","getValue","displayQueryResults","_displayQueryResults","resultWidget","editorElement","availableHeight","minHeight","resize","experimentsIn","selectedExp","server","mainpanel","projectWidget","groupWidget","databaseWidget","annotationn","history","attach","onresize","update","onload"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA,uCAAuC;AACvC,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qDAAqD;AACrD,8BAA8B,UAAU,aAAa;AACrD,8BAA8B,mBAAmB,IAAI;AACrD,8BAA8B,SAAS,cAAc;AACrD,8BAA8B,UAAU,aAAa;AACrD;AACA;AACA,sCAAsC;AACtC;AACA,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,mCAAmC;AACnC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,2CAA2C;AAC3C,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,OAAO;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C;AACA;AACA;;AAEoN;AACpN;;;;;;;;;;;;;;;;ACr+EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEL;AACtB;;;;;;;;;;;;;;;;;;;;;;;ACrf6C;AACD;AACY;AACF;AACD;AACV;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,oCAAoC,qDAAM;AAC1C,sCAAsC,qDAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA,wCAAwC,qBAAqB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA,oCAAoC,2CAA2C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sDAAO;AAClC;AACA;AACA,yJAAyJ,YAAY;AACrK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sDAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA,wDAAwD,GAAG;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA,mBAAmB,kEAAkB;AACrC;AACA,YAAY,uDAAQ;AACpB;AACA,2CAA2C,0BAA0B;AACrE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,QAAQ,+GAA+G;AACxL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,4BAA4B,wCAAwC;AACpE;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,mCAAmC,QAAQ,WAAW,KAAK;AAC3D,4BAA4B,MAAM,EAAE,KAAK;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oCAAoC;AACxD,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iBAAiB;AAChF;AACA,aAAa,sDAAQ;AACrB,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEA;AAC3B;;;;;;;;;;;AC/kCA;AACA,IAAI,KAA4D,oBAAoB,mBAAO,CAAC,iFAAmB;AAC/G,IAAI,CAC0I;AAC9I,CAAC,yCAAyC;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0CAA0C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA,2CAA2C,UAAU;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,GAAG;AACxD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,GAAG;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU,2CAA2C,GAAG;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,WAAW;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0BAA0B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,wCAAwC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oCAAoC;;AAEzC;AACA;AACA;AACA;;AAEA,CAAC;AACD;;;;;;;;;;;;;;;;;;;;AC1hC2C;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0DAA0D;;AAEyC;AACpG;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE6B;AACxD;;;;;;;;;;;;;;;;;AC/bwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,0BAA0B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc,MAAM,cAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEX;AAChB;;;;;;;;;;;;;;;;;;;ACh9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE2C;AACtE;;;;;;;;;;;;;;;;;;;;ACjRiE;AAChB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAK,CAAC,wDAAK;AAChC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;;AAEiB;AACpD;;;;;;;;;;;;;;;;AC7fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,KAAK;AAC/B,0BAA0B,KAAK,GAAG,KAAK;AACvC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEC;AAC5B;;;;;;;;;;;;;;;;;;;;ACjMmD;AACC;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8DAAe;AACzD,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,uDAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAED;AAC1B;;;;;;;;;;;;;;;;;;;;;;AC7lB6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,cAAc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB;AACjF;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,KAAK;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA,6CAA6C,KAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEsD;AACjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrqB0E;AACd;AACM;AACW;AACvB;AACX;AACH;AACW;AACA;AACK;AACH;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe,KAAK,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,qBAAqB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qBAAqB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qDAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,0DAAW;AACnB,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,8CAA8C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kCAAkC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iEAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iEAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAkB;AACjD,KAAK,gCAAgC;AACrC;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oEAAoE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gEAAgB;AAChD;AACA,qCAAqC,OAAO;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO;AACrC;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gEAAgB;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,cAAc;AACjD,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,MAAM;AACzC,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mDAAI,SAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI;AAChC,6BAA6B,KAAK;AAClC,+BAA+B,kBAAkB;AACjD;AACA,kCAAkC,OAAO;AACzC;AACA;AACA,kCAAkC,MAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,gCAAgC,qDAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,qDAAqD;AACrE;AACA,qCAAqC,qDAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW,GAAG,gBAAgB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oCAAoC,gEAAgB;AACpD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gBAAgB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA,6DAA6D,OAAO;AACpE,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,qDAAqD,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA,mDAAmD,uBAAuB;AAC1E;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6BAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,uCAAuC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC;AACxB;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D,iBAAiB;AACjB;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,6CAA6C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,0CAA0C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,6CAA6C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,wCAAwC,iDAAC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,0CAA0C,iDAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU,EAAE,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA,kBAAkB,sCAAsC;AACxD;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAoD;AACnF;AACA;AACA,2BAA2B,2CAA2C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC,oBAAoB,uDAAQ;AAC5B,iDAAiD,sDAAO;AACxD,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qDAAM;AACvC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,gCAAgC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,sCAAsC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yBAAyB;AAC3C;AACA,2BAA2B;AAC3B;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,mCAAmC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM;AACpC,gBAAgB,wDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,kBAAkB,wDAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC,wBAAwB,uDAAQ;AAChC,qDAAqD,sDAAO;AAC5D,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kEAAkB;AACrC,YAAY,uDAAQ;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,SAAS;AACxE;AACA,aAAa,sDAAQ;AACrB,iDAAiD,SAAS;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sDAAQ;AACzB,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC,sCAAsC,qDAAM;AAC5C,uCAAuC,qDAAM;AAC7C,yCAAyC,qDAAM;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA,8CAA8C,kCAAkC;AAChF;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAI;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAQ;AAChC,uBAAuB,wDAAU;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,YAAY,0DAAW;AACvB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,iCAAiC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,qCAAqC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,WAAW,GAAG,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,YAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAA2D;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,2BAA2B,4CAA4C;AACvE;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA;AACA;AACA;AACA;AACA,2BAA2B,+CAA+C;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,MAAM;AAC3C;AACA;AACA,oCAAoC,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wDAAK;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,wDAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wDAAK;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mCAAmC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,QAAQ;AACnD,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,MAAM;AACjD,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mBAAmB;AAC5D;AACA;AACA,yCAAyC,oBAAoB;AAC7D;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA,yCAAyC,sBAAsB;AAC/D;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA,yCAAyC,2BAA2B;AACpE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAU,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8BAA8B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uCAAuC;AACrD;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C,uCAAuC,SAAS;AAChD;AACA;AACA,yBAAyB,kDAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC,4BAA4B,SAAS;AACrC,6BAA6B,UAAU;AACvC,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iEAAkB;AACnD;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAM;AACxC,mCAAmC,qDAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAG;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,yCAAyC;AACjF;AACA;AACA;AACA,uCAAuC,uCAAuC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA,0DAA0D,OAAO;AACjE;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gEAAgB;AACrD;AACA,yBAAyB,8CAA8C;AACvE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,cAAc,6DAAe,IAAI;AACrF;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa;AAC5D;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,cAAc,YAAY;AAC1B;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA,uCAAuC,IAAI,sCAAsC;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,sCAAsC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAM;AACrC,kCAAkC,qDAAM;AACxC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,MAAM;AACvC,kCAAkC,KAAK;AACvC,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA,gCAAgC,MAAM;AACtC,mCAAmC,KAAK;AACxC,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,EAAE;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2DAA2D;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEkT;AAC7U;;;;;;;;;;;;AC7seA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,2BAA2B,cAAc;AACzC,8DAA8D;;;AAG9D;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,0HAA0H;AAC1H;AACA;;AAEA,CAAC;;AAED,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iHAAiH;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,0CAA0C,uBAAuB,uBAAuB,uBAAuB;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,2DAA2D,qCAAqC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gHAAgH;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,0GAA0G;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,4FAA4F;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,sGAAsG;AACtG;AACA,oCAAoC;AACpC,mCAAmC;AACnC;AACA;AACA,wDAAwD;AACxD,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qGAAqG;AACrG;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;;AAEA,CAAC;;AAED,iHAAiH;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,mMAAmM;AACnM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,mDAAmD,KAAK,KAAK;AAC7D;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uGAAuG,uCAAuC,wBAAwB,gBAAgB,GAAG,+BAA+B,eAAe,wBAAwB,GAAG,uBAAuB,gCAAgC,GAAG,aAAa,8BAA8B,iBAAiB,GAAG,yBAAyB,iBAAiB,GAAG,oCAAoC,8BAA8B,GAAG,iDAAiD,gBAAgB,GAAG,2BAA2B,2BAA2B,GAAG,uCAAuC,4BAA4B,GAAG,wCAAwC,4BAA4B,GAAG,uCAAuC,2BAA2B,GAAG,0BAA0B,2CAA2C,eAAe,GAAG,uCAAuC,4BAA4B,GAAG,uCAAuC,2BAA2B,GAAG,oEAAoE,8BAA8B,GAAG,uCAAuC,8BAA8B,GAAG,yBAAyB,0BAA0B,GAAG,0BAA0B,6BAA6B,GAAG,kCAAkC,4BAA4B,GAAG,0CAA0C,8BAA8B,GAAG,uCAAuC,0BAA0B,GAAG,2BAA2B,6BAA6B,GAAG,yBAAyB,6BAA6B,GAAG,+CAA+C,mBAAmB,GAAG,4BAA4B,2BAA2B,GAAG,uBAAuB,2BAA2B,GAAG,+BAA+B,0BAA0B,GAAG,mCAAmC,4BAA4B,8CAA8C,mCAAmC,GAAG,oDAAoD,kCAAkC,GAAG,uCAAuC,iCAAiC,GAAG,0CAA0C,mCAAmC,GAAG,4CAA4C,0BAA0B,yCAAyC,GAAG,gDAAgD,oCAAoC,GAAG,qCAAqC,iCAAiC,GAAG,kDAAkD,mCAAmC,yCAAyC,GAAG,+BAA+B,qCAAqC,kIAAkI,GAAG,sCAAsC,qCAAqC,8NAA8N,GAAG;;AAE9nG,CAAC;;AAED,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gLAAgL;AAChL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,kCAAkC;AACjF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA,QAAQ,IAA4B;AACpC,qBAAqB,wBAAM;AAC3B;AACA,WAAW;;AAEX;AACA;AACA;AACA,gGAAgG,wBAAM;;AAEtG;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;;AAEA;AACA;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,0BAA0B;AAC5E;AACA,CAAC;;AAED,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,wBAAwB;AACxB;AACA,0BAA0B;AAC1B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,uBAAuB;AACvB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,IAAI;AAC/C;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iIAAiI,cAAc;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA,0CAA0C;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,eAAe;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8FAA8F;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,CAAC;;AAED,oNAAoN;AACpN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,oHAAoH;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mEAAmE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qBAAqB;AAC/C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,yCAAyC;AAC3G;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+HAA+H;AAC/H;AACA,qBAAqB;AACrB,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;;AAEA,CAAC;;AAED,+FAA+F;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uJAAuJ;AACvJ;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iCAAiC;AAC5E;AACA;AACA,iEAAiE,UAAU;AAC3E;AACA;AACA;AACA,oIAAoI,yBAAyB;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,0KAA0K;AAC1K;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,sCAAsC;AACtC,iCAAiC;AACjC;AACA,kCAAkC,mBAAmB;AACrD;AACA;AACA,gCAAgC,wCAAwC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC;AACjG,4DAA4D,wCAAwC;AACpG,2DAA2D,wCAAwC;AACnG,wDAAwD,wCAAwC;AAChG,wDAAwD,wCAAwC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wBAAwB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oHAAoH,2BAA2B;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,0IAA0I;AAC1I;AACA;AACA;AACA,4CAA4C,YAAY,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,6JAA6J;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,kBAAkB,mBAAmB;AAC/E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,iDAAiD;AAC3H,oEAAoE,4CAA4C;AAChH,mEAAmE,2CAA2C;AAC9G,sEAAsE,6CAA6C;AACnH,mEAAmE,4CAA4C;AAC/G,wDAAwD,4CAA4C;AACpG,sEAAsE,0DAA0D;AAChI;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,uBAAuB,4CAA4C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA,CAAC;;AAED,wSAAwS;AACxS;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB,mBAAmB,kBAAkB,iBAAiB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,iBAAiB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,mBAAmB,iBAAiB;AACpC,iBAAiB,2CAA2C;AAC5D,mBAAmB,oBAAoB;AACvC,oBAAoB,iBAAiB;AACrC,2BAA2B;AAC3B,CAAC;AACD;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iCAAiC;AAChG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,uIAAuI;AACvI;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4CAA4C,IAAI;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA,oBAAoB,kCAAkC,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,kIAAkI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB;AACrF;AACA;AACA;AACA,4CAA4C,qBAAqB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wBAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAsD;AACxF;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAsD;AACpF;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+JAA+J;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,IAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yBAAyB;AAC/C;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,uBAAuB;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,kIAAkI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,kBAAkB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,IAAI;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iCAAiC;AACjC,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,mGAAmG;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,iLAAiL;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,kDAAkD;AAClD,yDAAyD,KAAK;AAC9D;AACA;AACA;AACA;AACA;AACA,uDAAuD,6BAA6B;AACpF;AACA;AACA,oEAAoE;AACpE;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,wEAAwE;AACxE;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,+BAA+B;AAC/B,6DAA6D,KAAK,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,gCAAgC;AAChC,iEAAiE,4CAA4C,IAAI;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,2CAA2C,GAAG;AAC9C,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,4FAA4F;AAC5F;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qPAAqP;AACrP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE,uCAAuC,2BAA2B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,aAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA,2EAA2E,aAAa;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,SAAS,gBAAgB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,SAAS,gBAAgB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ,SAAS,cAAc;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,mBAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,gGAAgG;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iIAAiI;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,oCAAoC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8KAA8K;AAC9K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mBAAmB;AACxD;AACA;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+IAA+I;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,gIAAgI;AAChI;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,wCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,4GAA4G;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,sBAAsB,IAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,IAAI;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0BAA0B;AACrE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uNAAuN;AACvN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2BAA2B;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8BAA8B;AACnE;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,4CAA4C;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,oBAAoB;AACpB;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gJAAgJ;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,WAAW;AACzD;AACA;AACA,oBAAoB;AACpB,8CAA8C,WAAW;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,WAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf,UAAU,KAAK;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kLAAkL;AAClL;AACA;AACA;AACA;AACA;AACA,sLAAsL;AACtL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,qMAAqM;AACrM;AACA;AACA;AACA;AACA;AACA;AACA,uMAAuM;AACvM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2KAA2K;AAC3K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,oMAAoM;AACpM;AACA;AACA,kCAAkC;AAClC,kMAAkM;AAClM;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,mYAAmY;AACnY;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAe;AAChD,oCAAoC,qBAAqB;AACzD;AACA;AACA;AACA;AACA;AACA,yCAAyC,uBAAuB;AAChE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,4DAA4D,MAAM,0BAA0B,MAAM;AAClG;AACA,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,yBAAyB;AACzB,yBAAyB;AACzB,4BAA4B;AAC5B,4BAA4B;AAC5B,0BAA0B;AAC1B,wBAAwB;AACxB,iCAAiC;AACjC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,mCAAmC;AAC9D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,8BAA8B,qBAAqB;AACnD;AACA,8BAA8B,yBAAyB;AACvD;AACA,KAAK;AACL;AACA,8BAA8B,kCAAkC;AAChE;AACA,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D,2BAA2B,mCAAmC;AAC9D;AACA,KAAK;AACL;AACA,8BAA8B,oBAAoB;AAClD,2BAA2B,sBAAsB;AACjD;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,MAAM;AAC5D,+EAA+E,MAAM;AACrF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6EAA6E,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,oCAAoC;AACpC,+FAA+F,EAAE,IAAI,EAAE;AACvG;AACA;AACA;AACA,wCAAwC,EAAE,IAAI,EAAE;AAChD,iCAAiC,EAAE,IAAI,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;AACA;;AAEA,CAAC;;AAED,6IAA6I;AAC7I;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC,KAAK;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,4DAA4D,OAAO,UAAU,GAAG;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sFAAsF,WAAW;AACjG;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA,qCAAqC;AACrC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+KAA+K;AAC/K;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,sJAAsJ;AACtJ;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,kCAAkC;AACpE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB;AACrF,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,gCAAgC;AACxE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,4BAA4B;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sBAAsB;AACxD;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B,iEAAiE;AAC9F;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B,gEAAgE;AAC7F;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kEAAkE,yBAAyB;AAC3F;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA,uCAAuC,qBAAqB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,4BAA4B;AAC9D,+CAA+C,gCAAgC;AAC/E;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sBAAsB;AACxD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2BAA2B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C,SAAS;AACT;AACA,KAAK;AACL,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,6gBAA6gB;AAC7gB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,2DAA2D,iBAAiB;AAC5E;AACA;AACA,qDAAqD,cAAc;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAyC;AAC1E;AACA;AACA;AACA;AACA;AACA,iCAAiC,iCAAiC;AAClE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gCAAgC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA,qCAAqC,eAAe;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAW,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,qBAAqB;AACjH;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,KAAK;AACnB,cAAc,KAAK;AACnB;AACA;AACA,sCAAsC;AACtC,uBAAuB,kCAAkC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAA0C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gBAAgB;AAC/C;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA,6BAA6B,oCAAoC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,aAAa;AAChE,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,oCAAoC;AAC/D;AACA,KAAK;AACL;AACA,0CAA0C,4BAA4B;AACtE;AACA,KAAK;AACL;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,2BAA2B;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,yBAAyB,oBAAoB;AAC7C,6BAA6B,oBAAoB;AACjD,wBAAwB,oBAAoB;AAC5C;AACA,8BAA8B;AAC9B,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA,8BAA8B,6BAA6B;AAC3D,2BAA2B,yBAAyB;AACpD;AACA;AACA,KAAK;AACL;AACA,8BAA8B,uBAAuB;AACrD,2BAA2B,sBAAsB;AACjD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,iCAAiC;AAC/D;AACA,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,gCAAgC,YAAY,qBAAqB,OAAO;AACxE;AACA,KAAK;AACL,0CAA0C,OAAO;AACjD;AACA,KAAK;AACL,kCAAkC,OAAO;AACzC;AACA,KAAK;AACL,+BAA+B,OAAO;AACtC;AACA;AACA;AACA,KAAK;AACL,+BAA+B,OAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8GAA8G;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,mMAAmM;AACnM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,SAAS;AAC7G;AACA;AACA,oFAAoF,SAAS;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,WAAW;AAC/C,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,2HAA2H;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,6BAA6B,uBAAuB,oBAAoB;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE,uCAAuC;AACvC,mCAAmC;AACnC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG;AAChG,qCAAqC;AACrC,+BAA+B;AAC/B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,mCAAmC;AACnC,+BAA+B;AAC/B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,wEAAwE;AACxE,mCAAmC;AACnC,2DAA2D;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,+BAA+B;AAC/B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,iDAAiD;AACjD,+BAA+B;AAC/B,oBAAoB,QAAQ;AAC5B;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,oGAAoG;AACpG;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uNAAuN;AACvN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,SAAS;AAC7G;AACA;AACA,kGAAkG,SAAS;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,kBAAkB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA,+CAA+C,OAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,CAAC;;AAED,kKAAkK;AAClK;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gCAAgC;AAChC,iCAAiC;AACjC,iCAAiC;AACjC;AACA;;AAEA,CAAC;;AAED,yKAAyK;AACzK;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0EAA0E,uBAAuB,yCAAyC,gCAAgC,2BAA2B,2BAA2B,uBAAuB,eAAe,GAAG,gDAAgD,uBAAuB,eAAe,qBAAqB,+BAA+B,GAAG,yBAAyB,eAAe,aAAa,WAAW,gBAAgB,GAAG,6BAA6B,eAAe,aAAa,gBAAgB,GAAG,yBAAyB,cAAc,YAAY,iBAAiB,GAAG,6BAA6B,cAAc,iBAAiB,GAAG,+BAA+B,eAAe,qBAAqB,GAAG;AACjwB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,uCAAuC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0CAA0C;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,gCAAgC;AAChC,iCAAiC;AACjC,iCAAiC;AACjC;AACA;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,8MAA8M;AAC9M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,YAAY;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,gBAAgB,iBAAiB;AAChF,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,6BAA6B;AAC7B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,yCAAyC;AACzC;AACA;;AAEA,CAAC;;AAED,mGAAmG;AACnG;AACA,gBAAgB,QAAQ;AACxB,kCAAkC;AAClC;AACA;AACA,0DAA0D;AAC1D,KAAK,gCAAgC;AACrC;AACA;AACA;AACA,8BAA8B,iCAAiC,YAAY,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,YAAY,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,gCAAgC,mBAAmB,yBAAyB,u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uBAAuB,kBAAkB,mCAAmC,6BAA6B,KAAK,sBAAsB,mBAAmB,sBAAsB,uBAAuB,GAAG,4BAA4B,6BAA6B,gBAAgB,GAAG,6BAA6B,6BAA6B,GAAG,sBAAsB,yBAAyB,yBAAyB,4BAA4B,6BAA6B,uBAAuB,mBAAmB,qBAAqB,iBAAiB,GAAG,qBAAqB,mBAAmB,yBAAyB,GAAG,qCAAqC,uBAAuB,GAAG,qCAAqC,0BAA0B,yBAAyB,GAAG,6CAA6C,wBAAwB,4BAA4B,wBAAwB,oBAAoB,eAAe,gBAAgB,iBAAiB,sBAAsB,GAAG,uBAAuB,oBAAoB,GAAG;;AAEh14B,CAAC;;AAED,yJAAyJ;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,6cAA6c;AAC7c;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iCAAiC,cAAc,gCAAgC;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,oCAAoC,sCAAsC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,qBAAqB;AACnD,2BAA2B,qCAAqC;AAChE;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qEAAqE;AACrE;AACA,mCAAmC,iCAAiC;AACpE,MAAM,YAAY;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,wCAAwC,eAAe;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,yBAAyB;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,0DAA0D,qBAAqB,iBAAiB;AAChG;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iCAAiC,QAAQ;AACzC;;AAEA,CAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,UAAU;AAC1C;AACA;AACA,0BAA0B,yCAAyC;AACnE;AACA;AACA,0BAA0B,sCAAsC;AAChE;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;;AAGA,CAAC;;AAED,kJAAkJ;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,mJAAmJ;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wBAAwB;AACxE;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+IAA+I;AAC/I;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D,mBAAmB,wCAAwC;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,4BAA4B;AAC9D,mBAAmB,4CAA4C;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mCAAmC;AACrE,mBAAmB,oDAAoD;AACvE;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,kCAAkC;AACpE,mBAAmB,wDAAwD;AAC3E;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,wBAAwB;AAC1D,mBAAmB,4CAA4C;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,uBAAuB;AACzD,mBAAmB,8CAA8C;AACjE;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,8BAA8B;AAChE,mBAAmB,wDAAwD;AAC3E;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,6BAA6B;AAC/D,mBAAmB,0DAA0D;AAC7E;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,sCAAsC;AACzD;AACA,KAAK;AACL;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA,KAAK;AACL;AACA;AACA,kCAAkC,wBAAwB;AAC1D,mBAAmB,sCAAsC;AACzD;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mBAAmB;AACrD,mBAAmB,sCAAsC;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;AACA;;AAEA,CAAC;;AAED,6SAA6S;AAC7S,aAAa,2BAA2B;AACxC,aAAa,qCAAqC;AAClD,aAAa,iDAAiD;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA,sCAAsC,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,IAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAe;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wBAAwB;AAC/E;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,wBAAwB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;;AAED,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,4IAA4I;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,2BAA2B;AACjF;AACA,kDAAkD,8BAA8B,yBAAyB,4BAA4B,qBAAqB,gCAAgC,mCAAmC,wBAAwB,6BAA6B,gCAAgC,OAAO,6DAA6D,sCAAsC,iEAAiE,sCAAsC,2DAA2D,sCAAsC,uDAAuD,sCAAsC,2BAA2B,6BAA6B,4BAA4B,kDAAkD,oDAAoD,mDAAmD,oBAAoB,OAAO;;AAEz8B,CAAC;;AAED,gYAAgY;AAChY;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,cAAc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kFAAkF;AAClF,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,KAAuD;AAC/E;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;;;;;;;;;;;ACn9qBA,sQAAsQ;AACtQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,kCAAkC,gCAAgC;AAClE,kCAAkC,mBAAmB;AACrD,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,oCAAoC,iBAAiB;AACrD,0CAA0C,iBAAiB;AAC3D,qCAAqC,kBAAkB;AACvD,0CAA0C,eAAe;AACzD,gDAAgD,gBAAgB;AAChE,oCAAoC,gBAAgB;AACpD,wCAAwC,iBAAiB;AACzD,8CAA8C,kBAAkB;AAChE,oCAAoC,gCAAgC;AACpE,sCAAsC,mBAAmB;AACzD,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAA8B;AACxD,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,kBAAkB,SAAS;AAC3B;AACA,uBAAuB;AACvB,kBAAkB,+CAA+C;AACjE,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,yBAAyB;AACzB,qCAAqC;AACrC,yBAAyB;AACzB;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA,kBAAkB;AAClB;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,uBAAuB;AACvB,kBAAkB;AAClB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,uBAAuB;AACvB,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC,kBAAkB;AAClB,kCAAkC,oBAAoB;AACtD,uBAAuB;AACvB,kBAAkB,WAAW;AAC7B,sCAAsC;AACtC;AACA;AACA,qBAAqB,2BAA2B;AAChD,kBAAkB,6CAA6C;AAC/D,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,2CAA2C,cAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,+BAA+B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,qCAAqC,gBAAgB;AACrD;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uCAAuC;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,kCAAkC,6BAA6B,4CAA4C,mDAAmD,yBAAyB,GAAG;AACtO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,qOAAqO;AACrO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oEAAoE,UAAU;AAC9E,iDAAiD,kBAAkB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,sCAAsC,kBAAkB;AACxD,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uCAAuC;AACjE;AACA,8BAA8B,2CAA2C;AACzE;AACA,8BAA8B,iDAAiD;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,wFAAwF,gCAAgC,iBAAiB,GAAG,4EAA4E,gCAAgC,GAAG,gDAAgD,gCAAgC,uBAAuB,wCAAwC,yBAAyB,iBAAiB,GAAG,yDAAyD,gDAAgD,0CAA0C,GAAG,wBAAwB,mBAAmB,yBAAyB,GAAG,2BAA2B,yBAAyB,kBAAkB,GAAG,yDAAyD,qBAAqB,GAAG,kEAAkE,qBAAqB,GAAG,gCAAgC,mBAAmB,sBAAsB,kCAAkC,yBAAyB,6CAA6C,uBAAuB,0BAA0B,kBAAkB,GAAG,yCAAyC,gCAAgC,kDAAkD,uBAAuB,0BAA0B,qBAAqB,GAAG,sCAAsC,8BAA8B,GAAG,+BAA+B,oBAAoB,0BAA0B,GAAG,mCAAmC,mBAAmB,qBAAqB,GAAG,qCAAqC,qBAAqB,uBAAuB,8BAA8B,GAAG,4CAA4C,cAAc,GAAG,wCAAwC,oBAAoB,yBAAyB,eAAe,kBAAkB,gBAAgB,uBAAuB,mBAAmB,iDAAiD,6BAA6B,6CAA6C,GAAG,2BAA2B,WAAW,wCAAwC,YAAY,wCAAwC,aAAa,yCAAyC,GAAG,mCAAmC,2CAA2C,gDAAgD,0BAA0B,QAAQ,GAAG;AACn2E;AACA;AACA;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,uCAAuC;AACpG,kCAAkC,uCAAuC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gCAAgC;AAC5E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gCAAgC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,sGAAsG;AACtG;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,2TAA2T;AAC3T;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,yDAAyD,aAAa;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,qCAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,eAAe;AAChF;AACA;AACA;AACA;AACA;AACA,iEAAiE,eAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,eAAe;AACnF;AACA;AACA,qEAAqE,eAAe;AACpF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sDAAsD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,4BAA4B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,8BAA8B,8BAA8B;AAC5D,gCAAgC,gCAAgC;AAChE,6CAA6C,iCAAiC;AAC9E,8CAA8C,+BAA+B;AAC7E,+BAA+B,4BAA4B;AAC3D,kCAAkC,wCAAwC;AAC1E,wCAAwC,qCAAqC,oBAAoB,IAAI;AACrG;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,kCAAkC,sCAAsC;AACxE,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,uBAAuB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mBAAmB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gDAAgD;AACvG,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,4HAA4H;AAC5H;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,4QAA4Q;AAC5Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,IAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;;ACrqFA,2JAA2J;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+JAA+J;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,6IAA6I;AAC7I;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,iLAAiL;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,CAAC;AACD;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;;AC5NA,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;ACfA;;AAEA,cAAc,mBAAO,CAAC,sEAAO;;AAE7B,cAAc,4FAA4B;AAC1C,YAAY,mBAAO,CAAC,sEAAa;AACjC,iBAAiB,mBAAO,CAAC,gFAAkB;AAC3C,gBAAgB,mBAAO,CAAC,8EAAiB;AACzC,gBAAgB,mBAAO,CAAC,8EAAiB;;;;;;;;;;;ACRzC,WAAW,mBAAO,CAAC,uDAAS;AAC5B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,6FAA8B;AAC1C,4CAA4C;AAC5C,iCAAiC;AACjC,QAAQ;AACR;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC5DA,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,kGAA2B;AAC1C,aAAa,gFAAwB;;AAErC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACnHA;;AAEA,gBAAgB,wGAA8B;AAC9C,qBAAqB,yGAAiC;AACtD,qBAAqB,yGAAiC;AACtD,YAAY,mBAAO,CAAC,gEAAQ;;;;;;;;;;;ACL5B,eAAe,kGAA2B;AAC1C,oBAAoB,uGAAgC;AACpD,oBAAoB,uGAAgC;AACpD,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACznBA,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;;AAEA;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxHA,gBAAgB,mBAAO,CAAC,4EAAc;;AAEtC,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;;;;;;;;;;ACzCjB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,gBAAgB,mBAAO,CAAC,mEAAO;;;;;;;;;;;AClB/B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,WAAW,mBAAO,CAAC,0DAAY;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,IAAI;AACJ;AACA;AACA;;AAEA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACnUA;;AAEA,eAAe,mBAAO,CAAC,kEAAO;AAC9B,eAAe,mBAAO,CAAC,kEAAO;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,gFAAwB;;AAErC,iBAAiB,mBAAO,CAAC,kEAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AChDA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,gFAAwB;;AAErC,WAAW,mBAAO,CAAC,0DAAY;AAC/B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,YAAY;AAC3C;;AAEA;AACA;AACA;;AAEA,kDAAkD,OAAO;AACzD;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA,IAAI;AACJ;AACA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA,iBAAiB,eAAe;AAChC;AACA;;AAEA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;;AAEA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,YAAY,iBAAiB;AAC7B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;ACtSA;;AAEA,eAAe,mBAAO,CAAC,kEAAO;AAC9B,eAAe,mBAAO,CAAC,kEAAO;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,iBAAiB,mBAAO,CAAC,kEAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;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CAAC;MAC9C,IAAM2xB,eAAe,GAAG5xB,IAAI,CAAC9G,MAAM,GAAG,GAAG;MACzC,IAAM24B,SAAS,GAAG,GAAG;MACrB,IAAM9Y,SAAS,GAAG7Y,IAAI,CAACC,GAAG,CAAC0xB,SAAS,EAAED,eAAe,GAAG,GAAG,CAAC;MAC5DD,aAAa,CAAC54B,KAAK,CAACG,MAAM,MAAAJ,MAAA,CAAMigB,SAAS,OAAI;MAE7C,IAAI,IAAI,CAACwW,SAAS,EAAE;QAClB,IAAI,CAACA,SAAS,CAACuC,MAAM,CAAC,CAAC;MACzB;IACF;EAAC;AAAA,EAhO8BliC,mDAAM;AAiOtCyH,eAAA,CAjOYkB,WAAW,WAES,CAAC;;;;;;;;;;;AC7KtB;;AAEZ,kBAAkB;AAClB,mBAAmB;AACnB,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,UAAU;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACrJA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;AC19GhC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,iBAAiB,mBAAO,CAAC,qBAAQ;AACjC;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;AChEA;AACA;AACA;AACA;;AAEA,aAAa,0FAA6B;;AAE1C;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,aAAa;AAC/B;AACA;;AAEA,oBAAoB,YAAY;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,aAAa;AAChC;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;;;;;;;;;;;ACnOlB,UAAU,mBAAO,CAAC,uDAAO;AACzB,aAAa,0FAA6B;AAC1C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,eAAe,mBAAO,CAAC,iEAAU;AACjC,YAAY,mBAAO,CAAC,2DAAS;AAC7B,UAAU,mBAAO,CAAC,0DAAY;AAC9B,aAAa,mBAAO,CAAC,6DAAU;;AAE/B;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACpHA,cAAc,mBAAO,CAAC,mEAAa;AACnC,gBAAgB,mBAAO,CAAC,mEAAa;AACrC,YAAY,mBAAO,CAAC,4EAAmB;;AAEvC;AACA;AACA;;AAEA,oBAAoB,GAAG,cAAc;AACrC,sBAAsB,GAAG,gBAAgB;AACzC,sBAAsB,GAAG,gBAAgB;AACzC,wBAAwB,GAAG,kBAAkB;AAC7C,mBAAmB,GAAG,kBAAkB;;;;;;;;;;;ACZxC,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;AAC1C,YAAY,mBAAO,CAAC,iEAAS;AAC7B,mBAAmB,mBAAO,CAAC,yEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,UAAU,mBAAO,CAAC,uDAAO;AACzB,WAAW,mBAAO,CAAC,kEAAgB;AACnC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB,wBAAwB;;;;;;;;;;;AC3HxB,YAAY,mBAAO,CAAC,iEAAS;AAC7B,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;AAC1C,mBAAmB,mBAAO,CAAC,yEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,UAAU,mBAAO,CAAC,uDAAO;AACzB,WAAW,mBAAO,CAAC,kEAAgB;AACnC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB,oBAAoB;;;;;;;;;;;ACjHpB,aAAa,0FAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA,UAAU,mBAAO,CAAC,0DAAY;;AAE9B,eAAe;AACf;;AAEA;AACA;AACA;;AAEA,eAAe;AACf;;A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A;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,IAAI;AACJ,8BAA8B;AAC9B;AACA;AACA,wDAAwD;AACxD,wEAAwE;;AAExE;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,8BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,sBAAsB;;;;;;;;;;;;ACrJT;;AAEb;AACA,aAAa,0FAA6B;AAC1C,SAAS,mBAAO,CAAC,iDAAO;AACxB,SAAS,uFAAsB;AAC/B,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,aAAa,mBAAO,CAAC,6EAAe;;AAEpC;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,IAAI;AACJ,8BAA8B;AAC9B;AACA;AACA,wDAAwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;;AAEA;;;;;;;;;;;ACrFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA,eAAe,mBAAO,CAAC,mHAAoB;AAC3C,eAAe,mBAAO,CAAC,mHAAoB;;AAE3C;;AAEA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,gBAAgB,mBAAO,CAAC,qHAAqB;;AAE7C;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;;AAEA;AACA,cAAc,mBAAO,CAAC,iFAAS;AAC/B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,uFAA8B;;AAEvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,yIAA2B;AAChD;;AAEA;;AAEA,aAAa,oJAA6B;AAC1C,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,yIAA+B;AACxD,kBAAkB,mBAAO,CAAC,mIAA4B;AACtD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,6EAA6E;AACtJ;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,kJAAwC;AAChF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,kGAAkG;AAClG,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA,4FAA4F;AAC5F,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,kJAAwC;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B,sCAAsC,mBAAmB;AACzD,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA,4EAA4E;;AAE5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA,mDAAmD,iEAAiE;AACpH;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,uCAAuC;AACvC,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;;;;;;;;;;;AC1/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mBAAO,CAAC,+GAAkB;;AAEvC;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,oEAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,yIAA2B;AAChD;;AAEA;;AAEA,aAAa,oJAA6B;AAC1C,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kBAAkB,mBAAO,CAAC,mIAA4B;;AAEtD;;AAEA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC;;AAEA,2CAA2C;AAC3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oDAAoD;AACpD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5qBa;;AAEb,kDAAkD,0CAA0C;;AAE5F,aAAa,oJAA6B;AAC1C,WAAW,mBAAO,CAAC,mBAAM;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;;;;;;;;;;;AC7Ea;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;ACnFA,sGAA+C;;;;;;;;;;;ACA/C;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7DA,UAAU,gKAAqD;AAC/D,cAAc;AACd,gBAAgB;AAChB,kKAAuD;AACvD,4JAAmD;AACnD,qKAAyD;AACzD,2KAA6D;;;;;;;;;;;;ACN7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mJAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;ACvSA;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7DA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;AACA;;AAEA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,eAAe,mBAAO,CAAC,wDAAW;AAClC,gBAAgB,mBAAO,CAAC,oDAAS;AACjC;AACA;AACA;AACA;;AAEA,cAAc;AACd,kBAAkB;AAClB,yBAAyB;;AAEzB;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,yBAAyB,QAAQ;AACjC;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,qBAAqB,WAAW,GAAG,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,gBAAgB,WAAW,GAAG,IAAI,KAAK,aAAa;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;;AAEA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,KAAK,mDAAmD,cAAc;AACzF,GAAG;AACH;AACA;AACA,+BAA+B,IAAI;AACnC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,MAAM,aAAa,SAAS;AACtD;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB,cAAc,oBAAoB,EAAE,IAAI;AACxC;AACA,YAAY,gBAAgB,EAAE,IAAI;AAClC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,GAAG,SAAS,GAAG,KAAK,qBAAqB,EAAE,EAAE;AACpE,QAAQ;AACR,yBAAyB,GAAG,KAAK,yBAAyB,EAAE,EAAE;AAC9D,mBAAmB,yBAAyB,EAAE,EAAE;AAChD;AACA,MAAM;AACN,oBAAoB,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,EAAE;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C,cAAc,SAAS,OAAO;AACxE;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACzjEA,aAAa,0FAA6B;AAC1C,gBAAgB,8FAA2B;AAC3C,oBAAoB,oHAAuC;AAC3D,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,0GAAoD;;AAEpD;AACA;AACA;;;;;;;;;;;AC1GA,eAAe,mBAAO,CAAC,6DAAU;AACjC,SAAS,mBAAO,CAAC,0EAAO;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;AC3HA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GpB;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,gBAAgB,mBAAO,CAAC,wDAAW;AACnC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,WAAW,mBAAO,CAAC,4DAAa;;AAEhC;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AC7BA,UAAU,m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AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;;AAEA;AACA,SAAS,wBAAwB;AACjC;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS,WAAW;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AC7Ia;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,YAAY,mBAAO,CAAC,2DAAS;AAC7B,aAAa,mBAAO,CAAC,6DAAU;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,mBAAmB;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,mBAAmB;AACvD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,uBAAuB;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,QAAQ;AAC9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACrJa;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,aAAa,mBAAO,CAAC,6DAAU;AAC/B,UAAU,mBAAO,CAAC,uDAAO;;AAEzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,0BAA0B;AAC7C,mBAAmB,0BAA0B;AAC7C,mBAAmB,0BAA0B;AAC7C;AACA,IAAI;AACJ;AACA,mBAAmB,0BAA0B;AAC7C,mBAAmB,0BAA0B;AAC7C,mBAAmB,0BAA0B;AAC7C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACrDa;;AAEb,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA,UAAU;AACV;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,WAAW;AACX;AACA;;AAEA,kBAAkB,OAAO;AACzB,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,WAAW;AACX;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA,kBAAkB,yBAAyB;AAC3C;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;;;;;;;;;;;AC/PA,oBAAoB,mBAAO,CAAC,mFAAqB;AACjD,aAAa,mBAAO,CAAC,4EAAmB;;AAExC,SAAS,mBAAO,CAAC,6DAAU;;AAE3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B,GAAG,gCAAgC,GAAG,wBAAwB;AACxF,2BAA2B,GAAG,qBAAqB;;;;;;;;;;;ACzCnD,SAAS,mBAAO,CAAC,6EAAO;AACxB,kBAAkB,mBAAO,CAAC,+DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,+EAAiB;AACtC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;ACnKA,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;AACA;AACA;AACA,SAAS,mBAAO,CAAC,6EAAO;AACxB;AACA,kBAAkB,mBAAO,CAAC,+DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,WAAW;AACpC;AACA,oBAAoB,yBAAyB;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GnB;;AAEb;;AAEA,mBAAmB,gGAAkC;AACrD,iBAAiB,mBAAO,CAAC,2EAAkB;AAC3C,gBAAgB,mBAAO,CAAC,oDAAS;AACjC,iBAAiB,mBAAO,CAAC,iFAAkB;AAC3C,kBAAkB,mBAAO,CAAC,6EAAmB;;AAE7C;AACA,cAAc,mBAAO,CAAC,2EAAe;AACrC,iBAAiB,mBAAO,CAAC,iFAAkB;;;;;;;;;;;;ACZ9B;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,WAAW;AAC7B,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;;;;;;;;;;;AC5Xa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AClba;;AAEb;;AAEA,aAAa,mBAAO,CAAC,sEAAQ;AAC7B,cAAc,mBAAO,CAAC,wEAAS;AAC/B,aAAa,mBAAO,CAAC,sEAAQ;AAC7B,gBAAgB,mBAAO,CAAC,4EAAW;;;;;;;;;;;;ACPtB;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B,YAAY,mBAAO,CAAC,mEAAU;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB,wCAAwC;AACxC,gBAAgB;;AAEhB,sBAAsB,iBAAiB;AACvC;;AAEA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACjLa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,cAAc;AACpB,MAAM,cAAc;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACz6Ba;;AAEb;;AAEA,WAAW,mBAAO,CAAC,uDAAS;AAC5B,YAAY,mBAAO,CAAC,wEAAS;AAC7B,YAAY,mBAAO,CAAC,kEAAS;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,QAAQ,mBAAO,CAAC,kGAAyB;AACzC,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC7MY;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,gEAAW;AAClC,YAAY,mBAAO,CAAC,mEAAU;AAC9B,aAAa,mBAAO,CAAC,qEAAW;AAChC,WAAW,mBAAO,CAAC,oDAAS;AAC5B;;AAEA,cAAc,mBAAO,CAAC,iEAAO;AAC7B,gBAAgB,mBAAO,CAAC,6EAAa;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,0CAA0C;AACrE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClPa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;;AAEb,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACxHa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;;AAExB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/Ka;;AAEb,WAAW,mBAAO,CAAC,uDAAS;AAC5B,aAAa,mBAAO,CAAC,qEAAW;AAChC,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA,cAAc,mBAAO,CAAC,oEAAO;AAC7B,gBAAgB,mBAAO,CAAC,gFAAa;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,UAAU,cAAc;AACxB,UAAU,sBAAsB;AAChC,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gCAAgC;AAC9D;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,wBAAwB;AAClC,UAAU,4BAA4B;AACtC,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACxHa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,QAAQ;AAClB;AACA,UAAU,aAAa;AACvB,UAAU,OAAO;AACjB,UAAU,aAAa;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;;AAEA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9Fa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,qBAAqB;AAC/B,UAAU,oBAAoB;AAC9B,UAAU,iBAAiB;AAC3B,UAAU,cAAc;AACxB,UAAU,cAAc;AACxB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;AC3wBa;;AAEb;AACA,SAAS,mBAAO,CAAC,uEAAO;AACxB,gBAAgB,mBAAO,CAAC,4EAAqB;AAC7C,eAAe,mBAAO,CAAC,4FAA2B;;AAElD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;;AAEA;AACA;;AAEA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACxHA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;;;;AChfA,aAAa,0FAA6B;AAC1C,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;;AAEA;;;;;;;;;;;AC5CA,+GAAe,GAAG,IAAqC,CAAC,iCAAO,EAAE,oCAAC,CAAC;AAAA;AAAA;AAAA,kGAAC,CAAC,KAAK,EAA6E,CAAC,kBAAkB,aAAa,gBAAgB,+BAA+B,WAAW,4FAA4F,WAAW,kEAAkE,4DAA4D,YAAY,IAAI,kBAAkB,yBAAyB,0DAA0D,kBAAkB,sBAAsB,yCAAyC,UAAU,cAAc,yBAAyB,oBAAoB,IAAI,SAAS,UAAU,oCAAoC,cAAc,IAAI,yCAAyC,SAAS,0CAA0C,0FAA0F,2HAA2H,qBAAM,EAAE,qBAAM,UAAU,qBAAM,CAAC,qBAAM,wMAAwM,8DAA8D,uDAAuD,iNAAiN,0BAA0B,4BAA4B,KAAK,KAAK,gDAAgD,mFAAmF,sBAAsB,KAAK,kCAAkC,iDAAiD,KAAK,GAAG,mBAAmB,8HAA8H,oIAAoI,iDAAiD,qBAAqB,uBAAuB,eAAe,0BAA0B,GAAG,wBAAwB,yCAAyC,oBAAoB,KAAK,gDAAgD,4DAA4D,qBAAqB,OAAO,EAAE,oBAAoB,KAA0B,qBAAqB;;AAEhpF;;;;;;;;;;;ACFY;AACZ,aAAa,0FAA6B;AAC1C,gBAAgB,8FAA2B;AAC3C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,WAAW;AACtD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;;AAEzB;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AC9FA;;AAEA,aAAa,mBAAO,CAAC,kEAAc;AACnC,cAAc,mBAAO,CAAC,oEAAe;AACrC,WAAW,mBAAO,CAAC,8DAAY;AAC/B,cAAc,mBAAO,CAAC,oEAAe;AACrC,YAAY,mBAAO,CAAC,gEAAa;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACda;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;;AAEA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,oBAAoB;AACpC;AACA;;AAEA;AACA;;;;;;;;;;;;AC3Fa;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,oBAAoB;AAC/C;;AAEA,cAAc,gBAAgB;AAC9B;AACA;;AAEA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AC9Ca;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,+DAAU;;AAE/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjJa;;AAEb,iGAAiC;AACjC,uGAAqC;AACrC,uGAAqC;AACrC,uGAAqC;AACrC,uGAAqC;;;;;;;;;;;;ACNxB;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,gBAAgB,mBAAO,CAAC,mEAAU;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA,QAAQ,cAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,6DAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5Ba;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,gBAAgB,mBAAO,CAAC,mEAAU;AAClC,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxGa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;;AAE9B,aAAa,mBAAO,CAAC,6DAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB,gDAAgD;AAChD;AACA,4BAA4B;AAC5B;AACA,kDAAkD;AAClD;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzUa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;;;;;;;;;;;AChDD;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA,IAAI;AACJ,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;;;;;;;;;;;ACrRH;;AAEb,WAAW,mBAAO,CAAC,uDAAS;AAC5B,YAAY,mBAAO,CAAC,4FAA2B;AAC/C,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChHA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA,SAAS,WAAW;;AAEpB;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BY;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,mBAAO,CAAC,wDAAW;AAClC,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACjJA,SAAS,mBAAO,CAAC,2EAAO;AACxB,cAAc,mBAAO,CAAC,oDAAS;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;;AAEA;;AAEA;AACA,SAAS,OAAO;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;;AAEA;;AAEA,SAAS,OAAO;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AClHA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;ACr3GhC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACVa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA,IAAI;AACJ,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzDA,gFAA8B;;;;;;;;;;;;ACA9B;AACA;;AAEa;;AAEb,WAAW,mBAAO,CAAC,uDAAS;;AAE5B,8GAA8C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,qBAAqB;;AAErB,gBAAgB;AAChB;AACA,CAAC;;AAED;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,oBAAoB;;AAEpB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC1HD;AACA;;AAEa;;AAEb,UAAU,mBAAO,CAAC,uDAAS;;AAE3B;AACA;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;ACxFa;;AAEb;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,kEAAgB;AAClC,cAAc,mBAAO,CAAC,oEAAgB;AACtC,aAAa,0FAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCa;;AAEb,WAAW,mBAAO,CAAC,qDAAQ;AAC3B,YAAY,mBAAO,CAAC,8DAAc;AAClC,cAAc,mBAAO,CAAC,2DAAW;AACjC,cAAc,mBAAO,CAAC,oEAAgB;AACtC,aAAa,mBAAO,CAAC,oDAAQ;AAC7B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AACb;AACA;AACA;AACA,WAAW,mBAAO,CAAC,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB;AAC7B;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE;AAC1B;AACA;AACA;AACA,uBAAuB,IAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,gBAAgB,EAAE;AAClB,qCAAqC,GAAG;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8BAA8B;AACnE;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;;;;;;;;;;;ACnnBpB,iGAAuC;AACvC,2GAA0C;;;;;;;;;;;ACD1C,aAAa,0FAA6B;;AAE1C,sBAAsB,mBAAO,CAAC,qEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,6EAAoB;AAClD,WAAW,mBAAO,CAAC,6DAAQ;AAC3B,eAAe,mBAAO,CAAC,+DAAa;;AAEpC;AACA,aAAa,qBAAM,WAAW,qBAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAM,aAAa,qBAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAM,YAAY,qBAAM;AAC9B,eAAe,qBAAM;AACrB,IAAI,SAAS,qBAAM;AACnB,eAAe,qBAAM;AACrB,IAAI,SAAS,qBAAM;AACnB,eAAe,qBAAM;AACrB,IAAI;AACJ,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,qBAAM;AAC5B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;ACrHA;AACA;AACA,IAAI,qBAAM,YAAY,qBAAM;AAC5B;AACA,EAAE,SAAS,qBAAM,YAAY,qBAAM;AACnC;;AAEA;AACA,EAAE;AACF;AACA;AACA;;;;;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+DAA+D;AAC/D;AACA;AACA;;;;;;;;;;;AClBA,UAAU,mBAAO,CAAC,8DAAiB;AACnC,gBAAgB,mBAAO,CAAC,wDAAW;AACnC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,aAAa,0FAA6B;;AAE1C,sBAAsB,mBAAO,CAAC,qEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,6EAAoB;AAClD,eAAe,mBAAO,CAAC,+DAAa;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA,sBAAsB,UAAU;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACxGA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;ACZa;;AAEb;AACA;AACA;AACA;AACA,qBAAqB;AACrB,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;AC3CA,wHAAkD;AAClD,2HAAoD;;AAEpD,sBAAsB;AACtB;AACA;;AAEA,qBAAqB;AACrB;AACA;;;;;;;;;;;ACTA,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;ACr3GhC,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,UAAU,mBAAO,CAAC,uDAAO;AACzB,UAAU,mBAAO,CAAC,uDAAO;AACzB,SAAS,mBAAO,CAAC,6EAAO;AACxB,UAAU,mBAAO,CAAC,kEAAgB;AAClC,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxGA,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,UAAU,mBAAO,CAAC,uDAAO;AACzB,UAAU,mBAAO,CAAC,uDAAO;AACzB,SAAS,mBAAO,CAAC,6EAAO;AACxB,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,UAAU,mBAAO,CAAC,kEAAgB;AAClC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvFA,SAAS,mBAAO,CAAC,6EAAO;AACxB,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,0FAA6B;AAC1C,aAAa,qBAAM,WAAW,qBAAM;;AAEpC;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,mBAAmB;AACnB,4BAA4B;AAC5B;AACA,8BAA8B,kBAAkB;AAChD;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;;;;;;;;;;;ACjDY;;AAEZ;AACA;AACA;AACA,iBAAiB,mBAAO,CAAC,4DAAa;AACtC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;AACA;AACA,aAAa,qBAAM,WAAW,qBAAM;AACpC;AACA;AACA,yDAAyD;AACzD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB;AACpB,EAAE,sBAAsB;AACxB,EAAE;AACF,EAAE,kBAAkB;AACpB,EAAE,sBAAsB;AACxB;AACA;AACA,gDAAgD,qBAAM;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,qBAAM;AACtD;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;;;;;;;;;;;AC3Ga;;AAEb,gDAAgD,0DAA0D,2CAA2C;;AAErJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;;;AAGF;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,oBAAoB;;;;;;;;;;;;AC9HpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,mBAAO,CAAC,sFAAoB;AAC3C,eAAe,mBAAO,CAAC,sFAAoB;AAC3C,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;AC7HD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;AACA,gBAAgB,mBAAO,CAAC,wFAAqB;AAC7C,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,uFAA8B;AACvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,4GAA2B;AAChD;;AAEA,aAAa,gFAAwB;AACrC,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,8GAAgC;AACzD,kBAAkB,mBAAO,CAAC,sGAA4B;AACtD,eAAe,mBAAO,CAAC,kGAA0B;AACjD;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,mFAAmF;AAC5J;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qHAAwC;AAChF;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,+FAA+F;AAC/F,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA,4FAA4F;AAC5F,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,qHAAwC;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mBAAO,CAAC,oHAAmC;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA,mDAAmD,+DAA+D;AAClH;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,wGAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;;;;;;;;;;;AClgCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,kFAAkB;AACvC,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,oEAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,4GAA2B;AAChD;;AAEA,aAAa,gFAAwB;AACrC,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,sGAA4B;AACtD,eAAe,mBAAO,CAAC,kGAA0B;AACjD;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,sDAAsD;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;;;;;;;;;;AChoBa;;AAEb;AACA,4CAA4C,2BAA2B,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;AAC/N,+BAA+B,uCAAuC;AACtE,qCAAqC,+DAA+D,sCAAsC,0BAA0B,+CAA+C,yCAAyC,uEAAuE;AACnU,eAAe,mBAAO,CAAC,iGAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA,yFAAyF;AACzF;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;ACnLa;;AAEb,2CAA2C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACvU,iCAAiC,gBAAgB,sBAAsB,OAAO,uDAAuD,6DAA6D,4CAA4C,oKAAoK,mFAAmF,KAAK;AAC1e,4CAA4C,2BAA2B,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;AAC/N,kDAAkD,0CAA0C;AAC5F,4CAA4C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD;AAC/P,8DAA8D,sEAAsE,8DAA8D,kDAAkD,iBAAiB,GAAG;AACxQ,+BAA+B,uCAAuC;AACtE,qCAAqC,+DAA+D,sCAAsC,0BAA0B,+CAA+C,yCAAyC,uEAAuE;AACnU,eAAe,mBAAO,CAAC,kDAAQ;AAC/B;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,yDAAyD,cAAc;AACvE;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA,CAAC;;;;;;;;;;;ACtLY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/FA;AACA;;AAEa;;AAEb,iCAAiC,0GAAgC;AACjE;AACA;AACA;AACA;AACA;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrFA;AACA;AACA;;;;;;;;;;;;ACFA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0GAAgC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,+BAA+B,mBAAO,CAAC,iGAAiB;AACxD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;;;;;;;;;;ACrFa;;AAEb,4BAA4B,0GAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrBA,sGAA+C;;;;;;;;;;;;;ACA/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA,OAAO,mBAAO,CAAC,iBAAI;AACnB;AACA,cAAc,mBAAO,CAAC,4BAAe;AACrC,aAAa,mBAAO,CAAC,6CAAM;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA,yBAAyB,wEAAoB;;AAE7C;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,6DAAQ;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,0BAA0B;AAC1B;AACA,uCAAuC,iDAAiD;AACxF,WAAW;AACX,yCAAyC,SAAS;AAClD;AACA;AACA,SAAS;AACT;AACA,0BAA0B;AAC1B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,2BAA2B,qBAAqB;AACpF;AACA,iCAAiC,2BAA2B;AAC5D;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA,IAAI;AACJ,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB;AACxB,mBAAmB;;AAEnB;AACA;AACA,sCAAsC;AACtC;AACA,8DAA8D,SAAS,kBAAkB;AACzF,QAAQ,8BAA8B;AACtC;AACA,mCAAmC,SAAS,oBAAoB;AAChE;AACA,MAAM;AACN;AACA,qBAAqB,SAAS,gBAAgB;AAC9C;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,MAAM,YAAY;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA,2BAA2B;;AAE3B,gBAAgB;AAChB;;AAEA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU,YAAY;AACtB,uCAAuC;AACvC;AACA;AACA,YAAY,YAAY;AACxB;AACA;;AAEA,MAAM;AACN;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,UAAU,YAAY;AACtB,QAAQ;AACR;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU,YAAY;AACtB;AACA;AACA,GAAG;;AAEH,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC,yCAAyC;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD;AACpD;;AAEA,gCAAgC;AAChC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,iEAAiE;AACnF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG,IAAI;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD,oBAAoB;;AAEvE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,8CAA8C;AAC7E;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oCAAoC;AACpC,iBAAiB,sBAAsB;AACvC,UAAU;AACV;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,oBAAoB,oBAAoB,gBAAgB;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC;AAClC,8BAA8B;;AAE9B;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;;AAEA,wCAAwC;;AAExC;AACA,8DAA8D;AAC9D;AACA,0BAA0B;AAC1B;AACA,UAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;;AAEA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C,6BAA6B,mBAAmB;AAChD,4BAA4B,mBAAmB;AAC/C,yBAAyB,gBAAgB,gBAAgB;;AAEzD;;AAEA,yBAAyB;AACzB;AACA,6BAA6B;AAC7B;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,wBAAwB,sDAAsD;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA,KAAK;AACL,GAAG;;AAEH;AACA,sBAAsB,0CAA0C;;AAEhE;AACA;;AAEA;;AAEA,qBAAqB;AACrB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,qDAAqD,EAAE,gCAAgC,KAAK,6CAA6C,KAAK;AAC9I;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2EAA2E;AAC3E,2EAA2E;AAC3E;AACA,OAAO,wBAAwB;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB;AACnB,wDAAwD,6BAA6B;AACrF;AACA,qBAAqB;AACrB;AACA;;AAEA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,qCAAqC;AACrC;AACA,sCAAsC;AACtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,0DAA0D;AAC1D,cAAc;AACd;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iBAAiB,iDAAiD;AAClE;AACA;;AAEA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;;AAEA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,qBAAqB,8BAA8B;;AAEnD,kBAAkB;AAClB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,gBAAgB;;AAEnC;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA;AACA,gBAAgB,gBAAgB;AAChC,iBAAiB,gBAAgB;AACjC,mBAAmB,gBAAgB;AACnC,eAAe,gBAAgB;AAC/B,qBAAqB,gBAAgB;;;;;;;;;;;;ACrxCzB;AACZ,aAAa,gFAAwB;AACrC,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,mBAAO,CAAC,wDAAW;;AAElC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM,OAAO;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AClKA;AACA;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChEA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uBAAuB,gBAAgB;AACvC;AACA;;AAEA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AChFA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,cAAc,mBAAO,CAAC,+CAAO;AAC7B,eAAe,mBAAO,CAAC,iDAAQ;AAC/B,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;;;;;;;;;;;ACdnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,qDAAU;AAC/B,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACtIA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,qDAAU;AAC/B,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACxDA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAS,uFAA8B;AACvC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA,kBAAkB,mBAAO,CAAC,2GAAyC;AACnE,kBAAkB,mBAAO,CAAC,2GAAyC;AACnE,gBAAgB,mBAAO,CAAC,uGAAuC;AAC/D,mBAAmB,mBAAO,CAAC,6GAA0C;AACrE,qBAAqB,mBAAO,CAAC,iHAA4C;AACzE,kBAAkB,mBAAO,CAAC,uIAAuD;AACjF,kBAAkB,mBAAO,CAAC,6HAAkD;;AAE5E;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;;;;;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,0FAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;ACvSA,iBAAiB,mBAAO,CAAC,8EAAmB;;AAE5C;;;;;;;;;;;ACFA,eAAe,mBAAO,CAAC,6EAAiB;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB,aAAa,uBAAuB,8BAA8B,qBAAqB,mCAAmC,aAAa,qBAAqB,mCAAmC,oBAAoB;AACrQ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,6EAA6E;AAC7E;AACA;AACA,oDAAoD;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,8EAA8E;AAC9E;AACA;AACA,qDAAqD;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtMA,eAAe,mBAAO,CAAC,6EAAiB;AACxC,UAAU,mBAAO,CAAC,qEAAa;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,uBAAuB;;AAEvB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;AACzB,2CAA2C;AAC3C,2CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC7WA,YAAY,mBAAO,CAAC,mEAAY;AAChC,iBAAiB,mBAAO,CAAC,6EAAiB;AAC1C,UAAU,mBAAO,CAAC,qEAAa;AAC/B,aAAa,mBAAO,CAAC,6EAAiB;AACtC,mBAAmB,mBAAO,CAAC,iFAAmB;;AAE9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B;;AAE9B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,kDAAkD,QAAQ;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wEAAwE;;AAExE;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,iBAAiB;AAC7B,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oEAAoE;AACpE,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA,6BAA6B;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,wBAAwB;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACr8BA,YAAY,mBAAO,CAAC,qEAAa;AACjC;;AAEA;AACA,iBAAiB,MAAK;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,aAAa;AAC3B;AACA;AACA;AACA,eAAe;AACf,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,aAAa,YAAY;AACzB,aAAa,WAAW;AACxB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA,aAAa,OAAO;AACpB,cAAc,eAAe;AAC7B,cAAc,cAAc;AAC5B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc;AACd;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AChPA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;;;AAG9B;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;AC1ID;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B,cAAc,WAAW;AACzB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,+BAA+B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,UAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvSA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,iBAAI;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,4EAAe;AAC7C;AACA,2DAA2D,qBAAqB;AAChF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ,kDAAkD,EAAE;AACpD;AACA,IAAI;AACJ,IAAI;AACJ;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,6BAA6B;AAC7B,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B,gCAAgC;AAChC,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qEAAqE;AACzG;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,aAAa,gHAAgH;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO;AAChB,QAAQ,OAAO;AACf;AACA;AACA,KAAK;AACL,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,WAAW;AACX;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,cAAc;AACd;AACA,KAAK;AACL,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA,0DAA0D,4CAA4C;AACtG,SAAS;AACT;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yDAAyD;AAC7D;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,IAAI,0DAA0D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wCAAwC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kDAAkD;AAClD,kEAAkE;AAClE,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4CAA4C;AAC5C,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oDAAoD;AAC/D,WAAW,0BAA0B;AACrC,WAAW,EAAE,YAAY;AACzB,WAAW,+BAA+B;AAC1C,WAAW,cAAc;AACzB,UAAU,eAAe;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,UAAU,cAAc;AACxB,UAAU,4DAA4D;AACtE;AACA;AACA;AACA,IAAI;AACJ,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,2EAA2E;AAC3E,iFAAiF;AACjF,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAkD;AACtE;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,uCAAuC,0CAA0C;AACjF;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,cAAc,yCAAyC;AACvD,MAAM;AACN,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH,uCAAuC;AAC7J;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yCAAyC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,6CAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,UAAU,sBAAsB;AACzE;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sCAAsC;AACzD;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,iBAAI;AACzB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,gEAAgE;AAChE,4DAA4D;AAC5D,0DAA0D;AAC1D,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,yBAAyB;AACzB;AACA,2CAA2C;AAC3C;AACA,yCAAyC;AACzC,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,mBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,cAAc;AACd;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,sCAAsC;AACtC,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,YAAY;AACZ;AACA,+CAA+C;AAC/C,4CAA4C;AAC5C,uBAAuB;AACvB,2EAA2E;AAC3E,gBAAgB;AAChB,cAAc,MAAM;AACpB,yEAAyE;AACzE,aAAa;AACb,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,yBAAyB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAM;AAC7B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,gCAAgC;AAChC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kDAAkD;AAClD;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ,4BAA4B;AACpC;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR,mBAAmB;AACnB;AACA;AACA;AACA;AACA,iDAAiD,eAAe;AAChE,iDAAiD,eAAe;AAChE,iDAAiD,gBAAgB;AACjE,iDAAiD,gBAAgB;AACjE,kDAAkD,cAAc;AAChE,kDAAkD,cAAc;AAChE,kDAAkD,cAAc;AAChE;AACA;AACA;AACA;AACA,wDAAwD;AACxD,yDAAyD;AACzD,0CAA0C;AAC1C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,8CAA8C,gDAAgD;AAC9F;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IAA8I,uFAAuF;AACrO,mDAAmD,2CAA2C,gDAAgD,uFAAuF;AACrO,gJAAgJ,uFAAuF;AACvO,gLAAgL,uFAAuF;AACvQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mLAAmL;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO,4BAA4B;AACnC;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,kBAAkB;AAClB;AACA;AACA;AACA;AACA,gDAAgD,eAAe;AAC/D,gDAAgD,eAAe;AAC/D,gDAAgD,gBAAgB;AAChE,gDAAgD,gBAAgB;AAChE,iDAAiD,cAAc;AAC/D,iDAAiD,cAAc;AAC/D,iDAAiD,cAAc;AAC/D;AACA;AACA;AACA;AACA,uDAAuD;AACvD,wDAAwD;AACxD,yCAAyC;AACzC;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAA6C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qCAAqC;AACrC;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,6CAA6C;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,gDAAgD,QAAQ;AACxD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C,qCAAqC,yBAAyB;AAC9D,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,sCAAsC,yBAAyB;AAC/D,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,2CAA2C,UAAU,wBAAwB;AAC7E;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,2CAA2C,UAAU,wBAAwB;AAC7E;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAA6C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,oBAAoB;AACpB;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,gQAAgQ;AAChQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qCAAqC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qBAAqB;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+dAA+d,+BAA+B;AAC9f;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,gBAAgB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,KAAK,IAA6B;AAClC;AACA,GAAG,KAAK,EAEN;AACF;AACA,CAAC;;;;;;;;;;;;AC14RD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,UAAU;AACvB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,SAAS,qBAAM;AACf,IAAI;AACJ;AACA;AACA,YAAY,qBAAM;AAClB;AACA;AACA;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,wBAAwB,SAAS;AACjC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,kBAAkB,qBAAM;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;;AAGf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,sHAAgD;;AAEhD;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,WAAW;AACX;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,WAAW,UAAU;AACrB;AACA,2HAAsC;;AAEtC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACzkBA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,iBAAiB;AACjB;AACA;;AAEA,oBAAoB;AACpB;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;ACpJa;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,oBAAoB;AACpB,mBAAO,CAAC,oEAAe;AACvB,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,6BAA6B,mBAAO,CAAC,8EAAoB;AACzD,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,kBAAkB,mBAAO,CAAC,wDAAS;AACnC,WAAW,mBAAO,CAAC,uEAAY;AAC/B;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wBAAwB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC;AAChC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC;AAChC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ,IAAI;AACpC,cAAc,mCAAmC,EAAE;AACnD,cAAc,mCAAmC,EAAE;AACnD,cAAc,+BAA+B,EAAE;AAC/C,cAAc,+BAA+B,EAAE;AAC/C,cAAc,+BAA+B,EAAE;AAC/C,cAAc,mCAAmC,EAAE;AACnD,cAAc,mCAAmC,EAAE;AACnD,cAAc,QAAQ,IAAI,QAAQ;AAClC,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,+BAA+B;AAC/B;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB;;;;;;;;;;;;AC1lBP;AACb;AAC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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjCa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTa;;AAEb;AACA;AACA,cAAc,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AACjF;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTa;;AAEb;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5Da;;AAEb;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACba;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB;AAClB,mBAAO,CAAC,oEAAe;AACvB,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,kBAAkB,mBAAO,CAAC,wDAAS;AACnC,WAAW,mBAAO,CAAC,uEAAY;AAC/B,gBAAgB,mBAAO,CAAC,gDAAmB;AAC3C;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,oBAAoB;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mCAAmC;AAC1E;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC;AACA;AACA,gBAAgB,OAAO,GAAG,OAAO;AACjC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU,GAAG;AACzC,gBAAgB,eAAe,GAAG,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC,gBAAgB,GAAG,IAAI,GAAG;AAC1B;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC;AACA;AACA,gBAAgB,OAAO,GAAG,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA,gCAAgC,GAAG,IAAI;AACvC,kBAAkB,oBAAoB,IAAI,GAAG;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,GAAG,IAAI;AACvC,oBAAoB,eAAe,EAAE,cAAc;AACnD,gBAAgB,eAAe,EAAE,cAAc;AAC/C,gBAAgB,IAAI,EAAE,GAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,IAAI,EAAE;AAC9B,gBAAgB,eAAe,EAAE,GAAG;AACpC,gBAAgB,eAAe,EAAE,GAAG;AACpC,gBAAgB,IAAI,EAAE,GAAG;AACzB,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;;;;;;;;;;;;AC33BL;AACb;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,wCAAU;AAC/B,aAAa,mBAAO,CAAC,gDAAc;AACnC,aAAa,mBAAO,CAAC,sCAAS;;;;;;;;;;;;AClBjB;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,KAAK,EAAE;AAC3B,cAAc,iBAAiB,EAAE,aAAa;AAC9C,cAAc,iBAAiB,EAAE,aAAa;AAC9C,cAAc,KAAK,EAAE,aAAa;AAClC;AACA;;;;;;;;;;;;AClBa;AACb;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ACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,UAAU;AACV;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACvDe;AACf;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACNuC;;AAExB,oCAAoC,qDAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yDAAS;AACrB,YAAY,yDAAS;AACrB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC5Be;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACrBe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACF2B;AACU;AACV;AACU;AACM;AACC;AACD;AACN;;AAEtB;AACf,6BAA6B,mDAAO;AACpC;AACA,8BAA8B,mDAAG;AACjC,qBAAqB,mDAAG;AACxB;AACA;AACA;AACA,eAAe,mDAAG,CAAC,2DAAW;AAC9B,eAAe,mDAAG;AAClB;AACA;;AAEO,6CAA6C,kDAAM;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,4CAA4C,kDAAM;AACzD;AACA,gDAAgD,sDAAM;AACtD,qBAAqB,wDAAQ;AAC7B,qBAAqB,wDAAQ;AAC7B;AACA;AACA;AACA;AACA,EAAE,2DAAW,2BAA2B,0DAAgB;AACxD,MAAM,wDAAQ;AACd;AACA;;;;;;;;;;;;;;;;;AC9C2D;;AAE3D;AACA;AACe;AACf;AACA;AACA;;AAEA;;AAEA,oCAAoC,sDAAgB,GAAG,wDAAc;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpDe;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACZuC;AACJ;;AAEpB;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA,WAAW,uDAAO;AAClB;AACA;AACA;;AAEO,kCAAkC,qDAAS;AAClD,kBAAkB,qDAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC,IAAI;AACJ,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACtD2C;;AAEpC;;AAEA;AACA;;AAEP;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY;AACrD;;AAEA;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,oDAAoD;AAC3G;;AAEA;AACA;AACA,YAAY,2BAA2B,EAAE,eAAe,IAAI,eAAe,IAAI,eAAe,EAAE,qBAAqB,EAAE,GAAG;AAC1H;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,cAAc,2BAA2B,EAAE,eAAe,IAAI,qBAAqB,KAAK,qBAAqB,GAAG,qBAAqB,EAAE,GAAG;AAC1I;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC3Y2C;AACyB;AACzB;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,0CAAG,OAAO,qDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAO;AACzC;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,uBAAuB,kDAAM,CAAC,4CAAK;AACzC;AACA,oBAAoB,+CAAQ,YAAY,+CAAQ;AAChD;AACA,GAAG;AACH;AACA,oBAAoB,6CAAM,YAAY,6CAAM;AAC5C;AACA,GAAG;AACH;AACA,iDAAiD,6CAAO;AACxD;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;;;;AC5DD,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACTsD;AACE;AACJ;;;;;;;;;;;;;;;;;;;;;;;;ACFT;AACO;AACP;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,0CAAG,OAAO,qDAAU;AACzC;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC,6CAAO;AACxC;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,6CAAO;AACvB;AACA;;AAEA,sDAAM,WAAW,kDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;;;;AC1HM;AACA;;;;;;;;;;;;;;;;ACDP,YAAY;;AAEZ;AACA,8CAA8C,KAAK,OAAO;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA,mFAAmF,OAAO;AAC1F;AACA,gDAAgD,OAAO;AACvD,GAAG;AACH;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;;AAEA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B;AAC/D;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;ACnFxB,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;;;;;;;;ACAS;AACQ;AACD;AACuC;AAC9C;AACF;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,wBAAwB;AAC9C;;AAEA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA,mBAAmB;AACnB,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mDAAU;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,wDAAM;AACV,wCAAwC,0DAAiB;AACzD,sCAAsC,0DAAiB;AACvD,IAAI,sDAAM;AACV,IAAI,0DAAa;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,uDAAO;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,wDAAM;AACV,IAAI,mDAAO;AACX,IAAI,uDAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA,QAAQ,0DAAa;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA,QAAQ,uDAAO;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C,qBAAqB,QAAQ;AACvE,gBAAgB,OAAO;AACvB;AACA,QAAQ,0DAAa;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,wDAAO;AACnB;;AAEA,oCAAoC,iDAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA,oEAAoE;AACpE,2DAA2D;AAC3D,yBAAyB,wDAAO,yCAAyC;AACzE;AACA;AACA;AACA;AACA,YAAY,iDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA,uEAAuE,wDAAQ;AAC/E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACjMe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,cAAc,qDAAqD;AACnE,aAAa,oDAAoD;AACjE,iBAAiB,wDAAwD;AACzE,aAAa,oDAAoD;AACjE,QAAQ,+CAA+C;AACvD,QAAQ,+CAA+C;AACvD,SAAS,gDAAgD;AACzD,SAAS,gDAAgD;AACzD,QAAQ;AACR,GAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3BoC;AACoB;;AAExD,6BAAe,oCAAS;AACxB;AACA,kBAAkB,wDAAM,4BAA4B,mDAAO,EAAE,0DAAiB;AAC9E;AACA,qCAAqC,mDAAO,EAAE,0DAAiB;AAC/D,IAAI;AACJ;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,wDAAM;AACxB;AACA,+BAA+B,mDAAO,EAAE,0DAAiB;AACzD,4BAA4B,mCAAmC;AAC/D;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACO,oBAAoB;AACpB,2BAA2B;;AAE3B;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACZ2B;;AAE3B,UAAU,mDAAG;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACVP,YAAY;AACZ,YAAY;AACZ;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA,GAAG,gBAAgB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACnK2B;;AAE3B,UAAU,mDAAG;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACVA;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;;;;ACPqD;AACxB;;AAE7B;AACA;AACA;AACA,WAAW,oDAAI;AACf;AACA,KAAK;AACL;AACA;;AAEe;AACf;AACA,eAAe,kDAAS;AACxB,SAAS,oDAAI;AACb;AACA,GAAG;AACH;;AAEO,mBAAmB,4CAAQ;AAC3B,mBAAmB,4CAAQ;;;;;;;;;;;;;;;;ACrBlC,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR0C;AACI;AACI;AACN;AACF;AACA;AACS;;;;;;;;;;;;;;;;ACNnD;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;ACP6B;;AAE7B;AACA,0BAA0B,oDAAI;AAC9B;AACA;;AAEA,iEAAe,yBAAyB,EAAC;;AAElC;;AAEA;;;;;;;;;;;;;;;;ACXP,6BAAe,oCAAS;AACxB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;;AAEA,4EAA4E,OAAO;AACnF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;ACvCqC;AACA;AACJ;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA,6CAA6C,wDAAQ;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC,aAAa,uDAAQ;AACrB,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAM;AACnC,6BAA6B,sDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA;;;;;;;;;;;;;;;;ACnGA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA,sBAAsB;;AAEtB,6BAAe,sCAAW;AAC1B;AACA;AACA;;;;;;;;;;;;;;;;;;ACRqC;AACJ;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA,iBAAiB,wDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,gBAAgB;AACtD,wDAAwD,OAAO;AAC/D;AACA,2DAA2D,sDAAM;AACjE,2DAA2D,sDAAM;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC,OAAO;AAC5C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACpHqC;AACA;AACJ;AACI;;AAErC,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA,iBAAiB,wDAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,uDAAQ,QAAQ,6CAAC,EAAE,6CAAC;AACxD,2BAA2B,OAAO;AAClC;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;;AAEA;AACA;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA;AACA,yBAAyB,sDAAM;AAC/B,yBAAyB,sDAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0CAA0C;AAC1C;AACA,uBAAuB,sDAAM;AAC7B,uBAAuB,sDAAM;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;ACnHqC;AACN;AACJ;;AAEpB;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+CAAK;AACrB,cAAc,uDAAQ;AACtB,eAAe,mDAAG;;AAElB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,oBAAoB,gBAAgB;AACpC;;AAEA;AACA;AACA,OAAO;;AAEP,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3JuC;;AAEvC;AACO;AACA;;AAEP;AACA;AACA;AACA;AACA,CAAC;;AAEc;AACf,WAAW,sDAAY;AACvB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjBsD;;AAEtD,6BAAe,oCAAS;AACxB,aAAa,qEAAkB;AAC/B;;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP,gGAAgG;AAChG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACjBA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;;;;;ACNsD;;AAE/C;;AAEP,6BAAe,oCAAS;AACxB,UAAU,qEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAkB,gCAAgC;AAC9F;;;;;;;;;;;;;;;;;ACfsD;;AAEtD,6BAAe,oCAAS;AACxB,UAAU,qEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACVA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,uDAAuD;;AAEhD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9CA;AACA,6BAAe,oCAAS;AACxB,kDAAkD,OAAO;AACzD;AACA,6BAA6B;AAC7B,sCAAsC,QAAQ;AAC9C,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACV+C;AACM;AACN;;AAE/C,iEAAe;AACf;AACA;AACA;AACA,OAAO,yDAAa;AACpB;AACA;AACA;AACA;AACA,iBAAiB,6DAAa;AAC9B,OAAO,yDAAa;AACpB,OAAO,4DAAgB;AACvB;AACA;AACA,CAAC,EAAC;;;;;;;;;;;;;;;;AClBF,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACFqC;AACM;AACM;AACE;AACV;AACE;AACU;AAChB;;AAErC;AACA;;AAEA,6BAAe,oCAAS;AACxB,gFAAgF,oDAAQ,GAAG,2DAAW;AACtG;AACA;AACA;AACA,iDAAiD,oDAAQ,GAAG,8DAAc;AAC1E;AACA;AACA;;AAEA;AACA,gBAAgB,+DAAe;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,uDAAW;;AAEzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B,0DAAU;;AAEpC;AACA;;AAEA;AACA;AACA,mDAAmD,gEAAc;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,uEAAuE;AACvE,sIAAsI;AACtI,sEAAsE;AACtE;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mCAAmC,+DAAe;AAClD,gDAAgD,wDAAQ;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnJqC;;AAErC,6BAAe,oCAAS;AACxB,sBAAsB,wDAAQ;AAC9B;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB,yDAAyD,wDAAQ,qBAAqB,wDAAQ;AAC9F;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB;AACA,qBAAqB,wDAAQ,QAAQ,wDAAQ;AAC7C;;;;;;;;;;;;;;;;;ACLO;AACP;AACA;;AAEO;AACP;AACA;AACA;;;;;;;;;;;;;;;;;ACPA,6BAAe,oCAAS;AACxB;AACA;AACA,qBAAqB;AACrB;;AAEO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;ACnFO;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACXA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACFA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACdA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACXA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPoC;AACF;AACY;AACF;AACV;AACF;AACE;AACA;AACU;AACI;AACV;AACF;AACM;;AAE3B;AACf;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,iDAAU;AACnB,QAAQ,gDAAS;AACjB,aAAa,qDAAc;AAC3B,cAAc,sDAAe;AAC7B,QAAQ,gDAAS;AACjB,OAAO,+CAAQ;AACf,QAAQ,gDAAS;AACjB,QAAQ,gDAAS;AACjB,aAAa,qDAAc;AAC3B,eAAe,uDAAgB;AAC/B,UAAU,mDAAW;AACrB,SAAS,kDAAU;AACnB;AACA,qBAAqB,qDAAa;AAClC;;;;;;;;;;;;;;;;AC1FA,6BAAe,uCAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,IAAI;AACJ;;;;;;;;;;;;;;;;ACbA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,sCAAW;AAC1B;AACA;AACA,yBAAyB;AACzB,kBAAkB,kCAAkC;AACpD;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7BA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRgD;AACgB;AAChB;AACW;AACF;AACL;AACF;AACR;AACY;AACO;AACJ;AACE;AACQ;AACF;AACI;;;;;;;;;;;;;;;;ACdrE;AACA;AACA;AACA,sBAAsB;;AAEtB,6BAAe,sCAAW;AAC1B;AACA;AACA;;;;;;;;;;;;;;;;;;;ACRoC;AACR;;AAE5B,6BAAe,oCAAS;AACxB,oCAAoC,mDAAG;AACvC;;AAEO;AACP,4BAA4B,kDAAO;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAkB;AAChC,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC1HyC;AACa;AAC1B;AACqB;;AAEjD;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA,gBAAgB,sDAAY;;AAE5B;AACA,mBAAmB,mDAAG;AACtB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,wCAAwC,sDAAY;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,uDAAQ;AAChD;;AAEA;AACA;AACA;;AAEA;AACA,uEAAuE,wDAAQ;AAC/E;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,OAAO;AAChC,UAAU,gEAAkB;AAC5B,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AChFgC;AACJ;AACmB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO;AACP,uBAAuB,qDAAK;;AAE5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,wCAAwC,IAAI,8DAAiB;;AAEjF;AACA,cAAc,OAAO;;AAErB;AACA;;AAEA,6BAAe,oCAAS;AACxB,8BAA8B,mDAAG;AACjC;AACA;;;;;;;;;;;;;;;;;;ACvH2C;AACC;;AAE5C,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA,QAAQ,4DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;ACnDwC;AACiB;;AAEzD,eAAe,UAAU;AACzB,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC,OAAO;AACzC,0CAA0C,qDAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,oCAAoC,MAAM,aAAa,8DAAa;AACzG;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC,uDAAQ;AAC5C;;AAEA;AACA,0CAA0C,uDAAQ;AAClD;;AAEA;AACA,sCAAsC,uDAAQ;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA,sCAAsC,KAAK;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChJ0C;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,iBAAiB;AACjB,cAAc;AACd;;AAEA,mCAAmC,qDAAI;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;AC5OA,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEA,8BAA8B,OAAO;AACrC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7CA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACXmC;AACE;AACI;AACa;;AAEtD,6BAAe,sCAAW;AAC1B,aAAa,oDAAQ;AACrB;AACA;AACA;AACA;AACA,qBAAqB,sDAAY;AACjC,mBAAmB,sDAAY;AAC/B,qBAAqB,sDAAY;AACjC,sBAAsB,sDAAY;AAClC,oBAAoB,sDAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,uDAAQ;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA,4EAA4E,wDAAQ;AACpF;;AAEA;AACA;AACA;;AAEA;AACA,0EAA0E,wDAAQ;AAClF;;AAEA;AACA,4EAA4E,wDAAQ;AACpF;;AAEA;AACA,6EAA6E,wDAAQ;AACrF;;AAEA;AACA,2EAA2E,wDAAQ;AACnF;;AAEA;AACA;;;;;;;;;;;;;;;;;;;AC7FoC;AACE;AACW;;AAEjD,iEAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,OAAO;AACzD,sBAAsB,oDAAW;AACjC,aAAa,qDAAY;AACzB;AACA;AACA,MAAM;AACN,gCAAgC,2DAAa;AAC7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,EAAE,6CAAG,CAAC,EAAC;;;;;;;;;;;;;;;;ACnCR,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACX6B;AACE;;AAE/B,6BAAe,oCAAS;AACxB,sBAAsB,iDAAK,GAAG,gDAAI;AAClC;;;;;;;;;;;;;;;;;;;;ACLoC;AACE;;AAE/B;;AAEA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;;AAEA;AACA,qBAAqB,8DAA8D;AACnF,kBAAkB,oDAAW;AAC7B,SAAS,qDAAY;AACrB;AACA;;AAEA;AACA;;AAEA,iEAAe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,MAAM,EAAC;;;;;;;;;;;;;;;;;;;ACjEuB;AAC6B;;AAE5D,6BAAe,oCAAS;AACxB,UAAU,8DAAa,MAAM,uDAAW;AACxC;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,cAAc,QAAQ,YAAY,qDAAK;AACvC,SAAS,QAAQ;;AAEjB;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;ACrBO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AClBiC;;AAEjC,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gDAAK;AAChB;AACA;;;;;;;;;;;;;;;;;;;ACZqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,kFAAkF,wDAAQ;AAC1F;;AAEO;AACP;AACA,0CAA0C,wDAAQ;AAClD;AACA;;AAEe;AACf;AACA,4BAA4B,wDAAQ;AACpC;;;;;;;;;;;;;;;;AC5BA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;;;;ACAyB;AACf;;AAEtC;AACA;AACA;;AAEA;AACA,2BAA2B,oDAAc,mBAAmB,oDAAc;AAC1E,cAAc,qDAAK;AACnB,cAAc,qDAAK;AACnB,oBAAoB,qDAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;;AAEA,iEAAe,UAAU,0CAAG,CAAC,EAAC;AACvB,8BAA8B,iDAAK;;;;;;;;;;;;;;;;AC5B1C,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;ACb+B;;AAE/B,6BAAe,oCAAS;AACxB,YAAY;AACZ,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,qDAAK;AAClB,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACtB4C;;AAE7B;AACf,gEAAgE,iDAAK;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACVyC;AACV;AACY;AACD;;AAE1C,iEAAe;AACf,cAAc,gDAAK;;AAEnB;AACA,2BAA2B,6CAAQ,mBAAmB,6CAAQ;AAC9D;AACA;AACA,kBAAkB,qDAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC,IAAI,EAAC;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,cAAc,6CAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,yBAAyB,iDAAK;AAC9B,+BAA+B,uDAAW;;;;;;;;;;;;;;;;ACtDjD,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJiC;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA,yCAAyC;AACzC,4BAA4B;AAC5B;AACA,MAAM,OAAO;AACb;AACA,cAAc,SAAS,sDAAM,SAAS;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA,SAAS;AACT;;;;;;;;;;;;;;;;;AC/DA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzBkC;AACY;;AAE9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,sDAAM,SAAS,GAAG,aAAa,sDAAM,SAAS;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,gCAAgC;AACjE,cAAc,sDAAsD,sDAAM,OAAO;AACjF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,cAAc,qDAAqD,sDAAM,OAAO;AAChF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,sDAAM,SAAS,GAAG,aAAa,sDAAM,SAAS;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,mDAAmD,+CAAQ;AAC3D,mDAAmD,+CAAQ;;;;;;;;;;;;;;;;;;AC9Df;;AAEnD;;AAEA;AACO;AACP;AACA,wBAAwB,mDAAQ,GAAG,yDAAS;AAC5C;;AAEO;AACP,4BAA4B,mDAAQ;AACpC;AACA;AACA,iEAAiE,mDAAQ;AACzE;AACA,SAAS,yDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;ACjB+B;AACJ;AACa;AACX;AACI;AACA;AACA;AACI;AACuB;;AAE5D,6BAAe,oCAAS;AACxB;AACA,wCAAwC,wDAAQ;AAChD,0BAA0B,kDAAM;AAChC,+BAA+B,oDAAK,eAAe,+CAAG,IAAI,kDAAM;AAChE,qBAAqB,gDAAK,GAAG,+CAAG;AAChC,4BAA4B,gDAAI;AAChC,QAAQ,8DAAa,MAAM,uDAAW;AACtC,2BAA2B,mDAAY;AACvC,0FAA0F,kDAAM;AAChG,QAAQ,kDAAM;AACd;;;;;;;;;;;;;;;;ACrBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iEAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC,mBAAmB,EAAC;;;;;;;;;;;;;;;;;ACtErB,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;;AAEzC;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD,IAAI;AACJ;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACnFA,6BAAe,oCAAS;AACxB,mDAAmD;;AAEnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1CA,6BAAe,sCAAW;AAC1B;AACA;AACA,+CAA+C;AAC/C,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJ6B;;AAE7B,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,gDAAI;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACrEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNyD;AA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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,oDAAM;AAClB;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,sDAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wFAAwF,sDAAiB;AACzG;;AAEA;AACA,sDAAsD,kDAAM;AAC5D;;AAEA;AACA;AACA;;AAEA;AACA,gDAAgD,sDAAgB;AAChE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HwE;AAC/B;AACE;AACL;AACL;AACI;AACC;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kEAAkE,0DAAS;AAC3E;AACA;;AAEA,sBAAsB,sDAAW;;AAEjC,2BAA2B,sDAAgB;;AAE3C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf,cAAc,qDAAS,eAAe,oDAAQ;;AAE9C;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,gDAAO;;AAErB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,qDAAS;;AAEvB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,+CAAM;;AAEpB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;ACvGsC;AACL;;AAElB;AACf;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,sDAAsD,kDAAM;AAC5D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iDAAiD,kDAAM;;AAEvD,SAAS,qDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBmB;;AAII;;AAIF;;AAIH;;AAIG;;AAKC;;AAKJ;;AAIG;;AAIE;;AAIA;;AAIC;;AAIL;;AAIG;;AAQG;;AAIQ;;AAQT;;AAIC;;;;;;;;;;;;;;;;;AC7ElB;AACP;AACA;AACA,gCAAgC;AAChC,+CAA+C;AAC/C;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACzB8C;AACG;AACb;AACK;;AAElC;AACP;;AAEA;AACA;AACA,WAAW,oDAAK;AAChB;;AAEA;AACA;AACA,WAAW,0DAAU;AACrB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAa;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEe;AACf,cAAc,0DAAU;;AAExB;AACA,WAAW,oDAAI;AACf;;AAEA,EAAE,+CAAS;;AAEX;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrE+B;AACmB;AACrB;AACqB;AACd;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,QAAQ;AAChC,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ,YAAY,QAAQ;AAC5B,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oDAAK;AACrC,MAAM;AACN,UAAU,oDAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC,qDAAe;AACrD,kBAAkB,iDAAM;AACxB;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,oDAAI;AACtB;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEe;AACf,wBAAwB,2DAAW;AACnC,qBAAqB,oDAAI;AACzB,EAAE,+CAAS;AACX;AACA;;;;;;;;;;;;;;;;AC3Ie;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjBe;AACf;AACA;;;;;;;;;;;;;;;;;;;ACFmC;AACC;;AAE7B;;AAEQ;AACf,kBAAkB,+CAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,+CAAS;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,EAAE,+CAAS;;AAEX;AACA;;;;;;;;;;;;;;;;;;;;;AC7CsC;AACsB;AACxB;;AAEpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP,wBAAwB,oDAAQ,EAAE,oDAAQ;AAC1C;;AAEA;AACA,sCAAsC,oDAAQ,EAAE,oDAAQ;AACxD;AACA;AACA;;AAEA;AACA;AACA;;AAEA,SAAS,qDAAS;AAClB;;AAEe;AACf,qBAAqB,2DAAW;;AAEhC;AACA,WAAW,oDAAI;AACf;;AAEA,EAAE,+CAAS;;AAEX;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;;;ACjDwE;AACpC;;AAErB;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,wDAAS;AACjD;AACA;;AAEA;AACA,wDAAwD,oDAAM;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,gDAAS;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,+CAAS;AAClB;;;;;;;;;;;;;;;;;;;ACxDgC;AACM;AACF;;AAErB;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,oDAAM;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,+CAAS,OAAO,qDAAS;AAClC;;;;;;;;;;;;;;;;;;;;ACvDyC;AACL;AACE;AACL;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf,gBAAgB,0DAAU;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oEAAoE,kDAAM;AAC1E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,+CAAS;;AAEX,SAAS,qDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9D6D;AACpB;AACE;AACL;AACL;AACK;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,sDAAW;;AAEjC,2BAA2B,sDAAgB;;AAE3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ACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,iBAAiB,yDAAS;;AAE1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACxDA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1EA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;ACZqC;AACA;AACC;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA,MAAM;AACN,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,SAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;;AAEA,2CAA2C,wDAAQ;;AAEnD,uGAAuG,OAAO;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,gDAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,wBAAwB;AACxB;;;;;;;;;;;;;;;;AC/HA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJuC;;AAEvC;AACA,eAAe,sDAAW;AAC1B;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjCA,6BAAe,oCAAS;;AAExB,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACTA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;;;;ACFiC;AACI;;AAErC,6BAAe,sCAAW;AAC1B,aAAa,gDAAS,iCAAiC,kDAAM;AAC7D;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,sDAAsD;AACvF,wCAAwC,gDAAgD;AACxF,sCAAsC,8CAA8C;AACpF,yCAAyC;AACzC;;;;;;;;;;;;;;;;;;ACrBiC;AACI;;AAErC,6BAAe,sCAAW;AAC1B,aAAa,gDAAS,gCAAgC,kDAAM;AAC5D;;;;;;;;;;;;;;;;;;ACLqC;AACD;;AAEpC,6BAAe,oCAAS;AACxB,2CAA2C,uDAAO;;AAElD,sFAAsF,OAAO;AAC7F,6FAA6F,OAAO;AACpG;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;ACfA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxB2C;AACM;AACI;AACM;AAChB;AACJ;AACE;AACF;AACA;AACE;AACA;AACF;AACA;AACE;AACF;AACA;AACE;AACF;AACA;AACE;AACM;AACF;AACN;AACA;AACE;AACA;AACE;AACA;AACA;AACF;AACA;AACN;AACY;AACA;;AAExC;;AAEA;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU,kDAAgB;AAC1B,aAAa,qDAAmB;AAChC,eAAe,uDAAqB;AACpC,kBAAkB,0DAAwB;AAC1C,UAAU,kDAAgB;AAC1B,QAAQ,gDAAc;AACtB,SAAS,iDAAe;AACxB,QAAQ,gDAAc;AACtB,QAAQ,gDAAc;AACtB,SAAS,iDAAe;AACxB;AACA,SAAS,kDAAe;AACxB,QAAQ,iDAAc;AACtB,QAAQ,iDAAc;AACtB,SAAS,kDAAe;AACxB,QAAQ,iDAAc;AACtB,QAAQ,iDAAc;AACtB,SAAS,kDAAe;AACxB,QAAQ,iDAAc;AACtB,QAAQ,iDAAc;AACtB,SAAS,kDAAe;AACxB,YAAY,qDAAkB;AAC9B,WAAW,oDAAiB;AAC5B,QAAQ,iDAAc;AACtB,QAAQ,iDAAc;AACtB,SAAS,kDAAe;AACxB,SAAS,kDAAe;AACxB,UAAU,mDAAgB;AAC1B,UAAU,mDAAgB;AAC1B,UAAU,mDAAgB;AAC1B,SAAS,kDAAe;AACxB,SAAS,kDAAe;AACxB,MAAM,+CAAY;AAClB,YAAY,qDAAkB;AAC9B,qBAAqB,qDAAkB;AACvC;;AAEA,iEAAe,SAAS,EAAC;;;;;;;;;;;;;;;;;;ACzFW;AACE;;AAEtC;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,mDAAmD,uDAAO;AAC1D,uFAAuF,wDAAQ;AAC/F;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;ACbA,6BAAe,uCAAY;AAC3B,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;;;;;;;;;;;;;;;ACdA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;;ACNqC;;AAErC,6BAAe,oCAAS;AACxB;;AAEA,+JAA+J,OAAO;AACtK,yHAAyH,OAAO;AAChI;AACA;AACA;AACA;AACA;;AAEA,SAAS,QAAQ;AACjB;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;AClBA,6BAAe,sCAAW;;AAE1B,4DAA4D,OAAO;AACnE,yDAAyD,OAAO;AAChE;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACVA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA,8CAA8C,OAAO;AACrD,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;;;;;;;;;;;;;;;AClEA,6BAAe,sCAAW;;AAE1B,6DAA6D,QAAQ;AACrE,6EAA6E,SAAS;AACtF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;;;ACPqC;AACC;;AAEtC,6BAAe,oCAAS;AACxB,6CAA6C,wDAAQ;;AAErD,sFAAsF,OAAO;AAC7F,gHAAgH,OAAO;AACvH;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;;;;AChBqC;AACL;AACY;;AAE5C;AACA;AACA,WAAW,qDAAK;AAChB;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,gBAAgB,2DAAW;;AAE3B,0FAA0F,OAAO;AACjG,+DAA+D,OAAO;AACtE;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;;ACxB2C;;AAE3C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,wDAAwD,yDAAY;AACpE;;;;;;;;;;;;;;;;;ACjB2C;;AAE3C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,6DAA6D,yDAAY;AACzE;;;;;;;;;;;;;;;;ACjBA,6BAAe,sCAAW;AAC1B;AACA,mCAAmC;AACnC;AACA;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;;AAEA,uFAAuF,OAAO;AAC9F,yGAAyG,OAAO;AAChH;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACvBA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;ACFuC;;AAEvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,SAAS,sDAAW;AACpB;;;;;;;;;;;;;;;;AClCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACxBA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA,2BAA2B;AAC3B;;;;;;;;;;;;;;;;;;;;;ACJuC;;AAEvC;AACO;AACA;AACA;AACA;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAEc;AACf,WAAW,sDAAY;AACvB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACfiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,8CAAS,cAAc,kDAAS;AACxE,iBAAiB,2CAAM;AACvB;AACA;AACA;AACA,UAAU;AACV;AACA,wCAAwC,+CAAU,cAAc,mDAAU;AAC1E,iBAAiB,4CAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA,YAAY,4BAA4B;AACxC;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,4CAAO,OAAO,iDAAQ;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,+CAAU,OAAO,iDAAQ;AACtC;;AAEA;AACA;AACA,mCAAmC,qDAAY,MAAM,iDAAY;AACjE;;AAEA;AACA;AACA,aAAa,iDAAY,OAAO,iDAAQ,WAAW,iDAAQ;AAC3D;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,+CAAU,OAAO,iDAAQ;AACtC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,qDAAY,MAAM,iDAAY;AAC9D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,2CAAM,OAAO,gDAAO;AACrC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;A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AAgB,0DAAY;AACnC;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,2DAA2D,0DAAY;AACvE;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEO;;;;;;;;;;;;;;;;;AChD0B;;AAEjC,6BAAe,oCAAS;AACxB,cAAc,4CAAK;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sIAAsI;;AAE/H;AACP;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP,SAAS;AACT,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC7GiD;AACE;;AAEnD;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,8DAAS;AACrD,mBAAmB,4DAAU;AAC7B;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpB8B;AAC8B;AACd;AACM;;;;;;;;;;;;;;;;;ACHa;;AAEjE,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,mDAAmD,eAAe;AAClE,8BAA8B,6DAAQ,qBAAqB,2DAAM;AACjE,qBAAqB,0DAAK;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACvBuC;AACU;AACE;;AAEnD,oDAAS,uBAAuB,qDAAmB;AACnD,oDAAS,wBAAwB,sDAAoB;;;;;;;;;;;;;;;;;ACLb;;AAExC,6BAAe,oCAAS;AACxB;AACA,IAAI,yDAAS;AACb,GAAG;AACH;;;;;;;;;;;;;;;;;;;;ACNyD;AACR;AACV;AACV;;AAE7B;AACA;AACA;AACA;AACA,QAAQ,+CAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;AAEA,sBAAsB,4DAAU;AAChC;AACA,IAAI;AACJ,SAAS,2DAAK,oCAAoC,6CAAG;AACrD;;AAEA,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA,QAAQ,mEAAQ;AAChB;AACA;AACA;;AAEA,aAAa,4DAAU;AACvB;;;;;;;;;;;;;;;;;;;;ACzC+E;AACxC;AACD;AACK;;AAE3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,iBAAiB,wDAAS,uCAAuC,mEAAoB,GAAG,uDAAW;AACnG;AACA,sEAAsE,qDAAU;AAChF;AACA;AACA;;;;;;;;;;;;;;;;;AC7EuC;;AAEvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,iBAAiB,w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ACK;;AAE3C;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB,oDAAoD,wDAAK;AACzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB;AACA;AACA,6EAA6E,wDAAK;AAClF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,yCAAyC,mEAAoB,GAAG,uDAAW;AAC3E;AACA;AACA;AACA;AACA,+CAA+C,qDAAU;AACzD;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC/EA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACvBsC;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,qBAAqB,qDAAU;AAC/B;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACvB6C;AACD;;AAE5C,6BAAe,sCAAW;AAC1B;AACA;AACA,YAAY,gDAAK;;AAEjB,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA,sBAAsB,iDAAG;AACzB,QAAQ,wDAAQ;AAChB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,aAAa,iDAAU;AACvB;;;;;;;;;;;;;;;;;;ACvBuC;;AAEvC;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB,4BAA4B,OAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;;AAEA;AACA,gBAAgB,iDAAG;AACnB,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA,mBAAmB,iDAAG;AACtB,2CAA2C;AAC3C,GAAG;;AAEH;AACA,WAAW,iDAAG;AACd;AACA;;;;;;;;;;;;;;;;AChFA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;ACAb;AACf;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,aAAa,oDAAoD;AACjE,gBAAgB,uDAAuD;AACvE,QAAQ;AACR,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;ACb0C;AACoE;;;;;;;;;;;;;;;;;ACDvG;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;;ACPO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;;AAEP;;AAEe;AACf;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AClDqC;AACW;AACD;AACF;AACL;AACH;AACF;AACgB;AACC;;AAEpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,mDAAQ;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAe;AACnC,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mDAAQ;AAC/B;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,+CAA+C,oDAAS;AACxD;;AAEA;AACA;AACA,oEAAoE,oDAAS;AAC7E;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,gDAAgD;AACvF,oDAAoD,8CAA8C;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,mBAAmB,4BAA4B,QAAQ,oDAAS;AAChE;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,cAAc,wDAAM;AACpB;AACA;AACA;AACA,YAAY,iDAAS;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAO;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM,wDAAS;AACf;AACA;;AAEA,IAAI,uDAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,wDAAM;AAClB,YAAY,wDAAO;AACnB;AACA;;AAEA,IAAI,mDAAW;AACf,IAAI,0DAAa;AACjB;AACA,IAAI,wDAAS;AACb;;AAEA;AACA,MAAM,uDAAO;AACb;AACA;AACA;AACA;AACA;AACA,sEAAsE,wDAAO;AAC7E;;AAEA;AACA;AACA,MAAM,gDAAU;AAChB,MAAM,uDAAO;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,wDAAO;AACpB;AACA;AACA;;AAEA,IAAI,uDAAO;AACX,sBAAsB,wDAAM;AAC5B,SAAS,wDAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,0DAAa;AACjB,gBAAgB,OAAO;AACvB,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iFAAiF,uBAAuB;AACxG,MAAM,wDAAS;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,uDAAO;AACX,gBAAgB,OAAO;AACvB,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,0DAAa;AACjB;AACA,0CAA0C,qBAAqB;AAC/D,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAO;AACnB;AACA,kBAAkB,wDAAM;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA,0EAA0E,wDAAQ;AAClF;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;AC9bO;AACP;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UC5DA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WC5BA;WACA;WACA;;;;;WCFA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;;;;;WCJA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WClBA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;;;;WCrBA;;;;;;;;;;;;;;;;;;;;;ACA4B;AAEW;AAEA;AACM;AACE;AACJ;AACS;AACI;AACP;AACjD;;AAGA,SAASssB,IAAIA,CAAA,EAAS;EACpB;EACA,IAAIkN,aAAa,GAAsBv7B,QAAQ,CAACgG,cAAc,CAAC,eAAe,CAAC,CAAErU,KAAK;EACtF,IAAI6pC,WAAW,GAAsBx7B,QAAQ,CAACgG,cAAc,CAAC,oBAAoB,CAAC,CAAErU,KAAK;EACzF,IAAI8pC,MAAM,GAAsBz7B,QAAQ,CAACgG,cAAc,CAAC,QAAQ,CAAC,CAAErU,KAAK;EACxE,IAAI4kC,WAAW,GAAC,EAAE;EAElB,IAAGgF,aAAa,EAChBhF,WAAW,GAAC12B,IAAI,CAAC0V,KAAK,CAACgmB,aAAa,CAAC;EAErC,IAAIG,SAAS,GAAG,IAAIhG,kDAAW,CAAC,CAAC;EACjCgG,SAAS,CAACz/B,EAAE,GAAG,MAAM;EACrB,IAAGw/B,MAAM,IAAE,MAAM,EAAC;IAChB,IAAIE,aAAa,GAAG,IAAIrF,0DAAa,CAACC,WAAW,CAAC;IAClD,IAAIqF,WAAW,GAAG,IAAI7P,sDAAW,CAAC,CAAC;IACnC,IAAI8P,cAAc,GAAG,IAAI72B,4DAAc,CAAC02B,SAAS,CAAC;IAElDA,SAAS,CAAC9F,aAAa,CAAC+F,aAAa,CAAC;IACtCD,SAAS,CAAC9F,aAAa,CAACgG,WAAW,CAAC;IACpCF,SAAS,CAAC9F,aAAa,CAACiG,cAAc,CAAC;EACzC,CAAC,MACG;IACF,IAAI7rB,MAAM,GAAG,IAAI7P,wDAAY,CAAC,CAAC;IAC/B,IAAI27B,WAAW,GAAG,IAAIviC,iEAAiB,CAACiiC,WAAW,CAAC;IACpD,IAAIO,OAAO,GAAG,IAAIpiB,+DAAa,CAAC3J,MAAM,EAAE,SAAS,EAAE,SAAS,EAAEwrB,WAAW,EAACM,WAAW,CAAC;IACtF,IAAID,cAAc,GAAG,IAAI72B,4DAAc,CAAC02B,SAAS,CAAC;IAElDA,SAAS,CAAC9F,aAAa,CAACmG,OAAO,CAAC;IAChCL,SAAS,CAAC9F,aAAa,CAAC5lB,MAAM,CAAC;IAC/B0rB,SAAS,CAAC9F,aAAa,CAACkG,WAAW,CAAC;IACpCJ,SAAS,CAAC9F,aAAa,CAACiG,cAAc,CAAC;IACvCE,OAAO,CAACzrB,IAAI,CAAC,CAAC;EAChB;EAEAlX,mDAAM,CAAC4iC,MAAM,CAACN,SAAS,EAAE17B,QAAQ,CAACJ,IAAI,CAAC;EACvC1C,MAAM,CAAC++B,QAAQ,GAAG,YAAM;IAAEP,SAAS,CAACQ,MAAM,CAAC,CAAC;EAAC,CAAC;AAChD;AAEAh/B,MAAM,CAACi/B,MAAM,GAAG9N,IAAI,C","sources":["webpack://@noworkflow/nowvis/../../node_modules/@lumino/algorithm/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/collections/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/commands/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/coreutils/dist/index.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/disposable/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/domutils/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/dragdrop/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/keyboard/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/messaging/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/properties/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/signaling/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/virtualdom/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/ace-builds/src-noconflict/ace.js","webpack://@noworkflow/nowvis/../../node_modules/ace-builds/src-noconflict/ext-language_tools.js","webpack://@noworkflow/nowvis/../../node_modules/ace-builds/src-noconflict/mode-sql.js","webpack://@noworkflow/nowvis/../../node_modules/ace-builds/src-noconflict/theme-textmate.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/api.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/buffer.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/node.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/reporter.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/constants/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/constants/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/./src/annotation_widget.ts","webpack://@noworkflow/nowvis/./src/config_widget.ts","webpack://@noworkflow/nowvis/./src/database_widget.ts","webpack://@noworkflow/nowvis/./src/graph/base_activation_graph.ts","webpack://@noworkflow/nowvis/./src/graph/diff_graph.ts","webpack://@noworkflow/nowvis/./src/graph/function_diff.ts","webpack://@noworkflow/nowvis/./src/graph/history_graph.ts","webpack://@noworkflow/nowvis/./src/graph/trial_graph.ts","webpack://@noworkflow/nowvis/./src/group_widget.ts","webpack://@noworkflow/nowvis/./src/info/diff_info.ts","webpack://@noworkflow/nowvis/./src/info/environment_info.ts","webpack://@noworkflow/nowvis/./src/info/file_accesses_info.ts","webpack://@noworkflow/nowvis/./src/info/modules_info.ts","webpack://@noworkflow/nowvis/./src/info/trial_info.ts","webpack://@noworkflow/nowvis/./src/nowpanel.ts","webpack://@noworkflow/nowvis/./src/project_widget.ts","webpack://@noworkflow/nowvis/./src/query_widget.ts","webpack://@noworkflow/nowvis/../../node_modules/base64-js/index.js","webpack://@noworkflow/nowvis/../../node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/brorand/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/aes.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/authCipher.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/decrypter.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/encrypter.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/ghash.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/incr32.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cbc.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb1.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb8.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ctr.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ecb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ofb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/streamCipher.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-cipher/browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-des/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-des/modes.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-rsa/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/algos.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/sign.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/verify.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/isarray/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/buffer-xor/index.js","webpack://@noworkflow/nowvis/../../node_modules/buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/cipher-base/index.js","webpack://@noworkflow/nowvis/../../node_modules/core-util-is/lib/util.js","webpack://@noworkflow/nowvis/../../node_modules/create-ecdh/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/create-hash/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-hash/md5.js","webpack://@noworkflow/nowvis/../../node_modules/create-hmac/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-hmac/legacy.js","webpack://@noworkflow/nowvis/../../node_modules/crypto-browserify/index.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/cbc.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/cipher.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/des.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/ede.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/utils.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/browser.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/lib/dh.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/lib/generatePrime.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/base.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/mont.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/short.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curves.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/key.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/signature.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/utils.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/events/events.js","webpack://@noworkflow/nowvis/../../node_modules/evp_bytestokey/index.js","webpack://@noworkflow/nowvis/../../node_modules/file-saver/dist/FileSaver.min.js","webpack://@noworkflow/nowvis/../../node_modules/hash-base/index.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/common.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/hmac.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/ripemd.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/1.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/224.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/256.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/384.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/512.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/common.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/utils.js","webpack://@noworkflow/nowvis/../../node_modules/hmac-drbg/lib/hmac-drbg.js","webpack://@noworkflow/nowvis/../../node_modules/ieee754/index.js","webpack://@noworkflow/nowvis/../../node_modules/inherits/inherits_browser.js","webpack://@noworkflow/nowvis/../../node_modules/md5.js/index.js","webpack://@noworkflow/nowvis/../../node_modules/miller-rabin/lib/mr.js","webpack://@noworkflow/nowvis/../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/minimalistic-assert/index.js","webpack://@noworkflow/nowvis/../../node_modules/minimalistic-crypto-utils/lib/utils.js","webpack://@noworkflow/nowvis/../../node_modules/os/index.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/asn1.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/certificate.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/fixProc.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/index.js","webpack://@noworkflow/nowvis/../../node_modules/path/path.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/browser.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/async.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/default-encoding.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/precondition.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/sync-browser.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/to-buffer.js","webpack://@noworkflow/nowvis/../../node_modules/process-nextick-args/index.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/browser.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/mgf.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/privateDecrypt.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/publicEncrypt.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/withPublic.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/xor.js","webpack://@noworkflow/nowvis/../../node_modules/randombytes/browser.js","webpack://@noworkflow/nowvis/../../node_modules/randomfill/browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/errors-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_duplex.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_readable.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_transform.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_writable.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/state.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readline-sync/lib/readline-sync.js","webpack://@noworkflow/nowvis/../../node_modules/ripemd160/index.js","webpack://@noworkflow/nowvis/../../node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/hash.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/index.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha1.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha224.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha256.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha384.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha512.js","webpack://@noworkflow/nowvis/../../node_modules/stream-browserify/index.js","webpack://@noworkflow/nowvis/../../node_modules/string_decoder/lib/string_decoder.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/browserify.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/control-icons.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/shadow-viewport.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/svg-utilities.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/uniwheel.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/utilities.js","webpack://@noworkflow/nowvis/../../node_modules/tau-prolog/modules/core.js","webpack://@noworkflow/nowvis/../../node_modules/util-deprecate/browser.js","webpack://@noworkflow/nowvis/../../node_modules/util/node_modules/inherits/inherits_browser.js","webpack://@noworkflow/nowvis/../../node_modules/util/support/isBufferBrowser.js","webpack://@noworkflow/nowvis/../../node_modules/util/util.js","webpack://@noworkflow/nowvis/../../node_modules/vm-browserify/index.js","webpack://@noworkflow/nowvis/../history/lib/config.js","webpack://@noworkflow/nowvis/../history/lib/graph.js","webpack://@noworkflow/nowvis/../history/lib/index.js","webpack://@noworkflow/nowvis/../history/lib/structures.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/accordionpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/commandpalette.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/datagrid.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/dockpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/menu.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/menubar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/scrollbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/tabbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/dragdrop/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/accordionpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/commandpalette.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/dockpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/menu.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/menubar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/scrollbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/splitpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/tabbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/tabpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/widget.css","webpack://@noworkflow/nowvis/../history/style/index.css","webpack://@noworkflow/nowvis/./style/bootstrap.min.css","webpack://@noworkflow/nowvis/./style/history.css","webpack://@noworkflow/nowvis/./style/index.css","webpack://@noworkflow/nowvis/./style/panel.css","webpack://@noworkflow/nowvis/./style/trial.css","webpack://@noworkflow/nowvis/../trial/style/index.css","webpack://@noworkflow/nowvis/../utils/style/shared.css","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/api.js","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/getUrl.js","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://@noworkflow/nowvis/./style/bootstrap.min.css?f8e0","webpack://@noworkflow/nowvis/./style/index.css?b7f0","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://@noworkflow/nowvis/../trial/lib/config.js","webpack://@noworkflow/nowvis/../trial/lib/graph.js","webpack://@noworkflow/nowvis/../trial/lib/index.js","webpack://@noworkflow/nowvis/../trial/lib/structures.js","webpack://@noworkflow/nowvis/../utils/lib/d3svg.js","webpack://@noworkflow/nowvis/../utils/lib/index.js","webpack://@noworkflow/nowvis/../utils/lib/random.js","webpack://@noworkflow/nowvis/../utils/lib/text.js","webpack://@noworkflow/nowvis/../utils/lib/web.js","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/asn1.js/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/brorand|crypto","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams|util","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/browserify-sign/node_modules/readable-stream/lib|util","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/create-ecdh/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/diffie-hellman/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/elliptic/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/miller-rabin/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/public-encrypt/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/readable-stream/lib/internal/streams|util","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/readable-stream/lib|util","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/readline-sync/lib|child_process","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/readline-sync/lib|fs","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/tau-prolog/modules|fs","webpack://@noworkflow/nowvis/../../node_modules/@viz-js/viz/lib/viz-standalone.mjs","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/ascending.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/bisect.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/bisector.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/descending.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/greatest.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/max.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/maxIndex.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/min.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/minIndex.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/permute.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/quantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/quickselect.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/range.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/ticks.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/color.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/define.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/lab.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/math.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dispatch/src/dispatch.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/drag.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/event.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/nodrag.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/noevent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/csv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/dsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/tsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-ease/src/cubic.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/blob.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/buffer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/dsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/image.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/json.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/xml.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/center.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/collide.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/jiggle.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/lcg.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/link.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/manyBody.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/simulation.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/defaultLocale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/exponent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatDecimal.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatGroup.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatNumerals.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatPrefixAuto.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatRounded.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatSpecifier.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatTrim.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatTypes.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/identity.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/locale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionFixed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionPrefix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionRound.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/accessors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/cluster.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/count.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/each.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/find.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/links.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/path.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/lcg.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/enclose.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/siblings.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/partition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/stratify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/tree.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/binary.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/dice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/round.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/slice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/sliceDice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/squarify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/basis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/basisClosed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/color.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/date.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/numberArray.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/object.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/piecewise.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/rgb.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/round.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/string.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/decompose.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/parse.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/value.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/zoom.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/add.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/cover.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/data.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/extent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/find.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/quad.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/quadtree.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/root.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/size.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/visit.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/visitAfter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/x.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/y.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/observable10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/colors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/ramp.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/band.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/continuous.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/diverging.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/identity.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/init.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/linear.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/log.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/nice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/ordinal.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/pow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/quantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/quantize.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/radial.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/sequential.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/sequentialQuantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/symlog.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/threshold.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/tickFormat.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/time.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/utcTime.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/create.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/creator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/local.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/matcher.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/namespace.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/namespaces.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/pointer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/pointers.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/append.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/attr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/call.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/classed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/clone.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/data.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/datum.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/dispatch.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/each.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/empty.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/enter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/exit.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/filter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/html.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/insert.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/iterator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/join.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/lower.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/merge.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/node.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/nodes.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/on.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/order.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/property.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/raise.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectChild.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectChildren.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/size.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/sparse.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/style.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selector.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selectorAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/sourceEvent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/window.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time-format/src/defaultLocale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time-format/src/locale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/day.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/duration.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/hour.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/interval.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/millisecond.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/minute.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/month.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/second.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/ticks.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/week.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/year.js","webpack://@noworkflow/nowvis/../../node_modules/d3-timer/src/timeout.js","webpack://@noworkflow/nowvis/../../node_modules/d3-timer/src/timer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/active.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/interrupt.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/interrupt.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/transition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/attr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/attrTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/delay.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/duration.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/ease.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/easeVarying.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/end.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/filter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/interpolate.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/merge.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/on.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/schedule.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/selection.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/style.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/styleTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/textTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/transition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/tween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/event.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/noevent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/transform.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/zoom.js","webpack://@noworkflow/nowvis/../../node_modules/internmap/src/index.js","webpack://@noworkflow/nowvis/webpack/bootstrap","webpack://@noworkflow/nowvis/webpack/runtime/amd define","webpack://@noworkflow/nowvis/webpack/runtime/compat get default export","webpack://@noworkflow/nowvis/webpack/runtime/define property getters","webpack://@noworkflow/nowvis/webpack/runtime/global","webpack://@noworkflow/nowvis/webpack/runtime/hasOwnProperty shorthand","webpack://@noworkflow/nowvis/webpack/runtime/make namespace object","webpack://@noworkflow/nowvis/webpack/runtime/node module decorator","webpack://@noworkflow/nowvis/webpack/runtime/publicPath","webpack://@noworkflow/nowvis/webpack/runtime/jsonp chunk loading","webpack://@noworkflow/nowvis/webpack/runtime/nonce","webpack://@noworkflow/nowvis/./src/index.ts"],"sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for array-specific algorithms.\n */\nvar ArrayExt;\n(function (ArrayExt) {\n /**\n * Find the index of the first occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.firstIndexOf(data, 'red'); // -1\n * ArrayExt.firstIndexOf(data, 'one'); // 0\n * ArrayExt.firstIndexOf(data, 'one', 1); // 4\n * ArrayExt.firstIndexOf(data, 'two', 2); // -1\n * ArrayExt.firstIndexOf(data, 'two', 2, 1); // 1\n * ```\n */\n function firstIndexOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.firstIndexOf = firstIndexOf;\n /**\n * Find the index of the last occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.lastIndexOf(data, 'red'); // -1\n * ArrayExt.lastIndexOf(data, 'one'); // 4\n * ArrayExt.lastIndexOf(data, 'one', 1); // 0\n * ArrayExt.lastIndexOf(data, 'two', 0); // -1\n * ArrayExt.lastIndexOf(data, 'two', 0, 1); // 1\n * ```\n */\n function lastIndexOf(array, value, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (start < stop) {\n span = start + 1 + (n - stop);\n }\n else {\n span = start - stop + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start - i + n) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.lastIndexOf = lastIndexOf;\n /**\n * Find the index of the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstIndex(data, isEven); // 1\n * ArrayExt.findFirstIndex(data, isEven, 4); // 5\n * ArrayExt.findFirstIndex(data, isEven, 6); // -1\n * ArrayExt.findFirstIndex(data, isEven, 6, 5); // 1\n * ```\n */\n function findFirstIndex(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findFirstIndex = findFirstIndex;\n /**\n * Find the index of the last value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastIndex(data, isEven); // 5\n * ArrayExt.findLastIndex(data, isEven, 4); // 3\n * ArrayExt.findLastIndex(data, isEven, 0); // -1\n * ArrayExt.findLastIndex(data, isEven, 0, 1); // 5\n * ```\n */\n function findLastIndex(array, fn, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let d;\n if (start < stop) {\n d = start + 1 + (n - stop);\n }\n else {\n d = start - stop + 1;\n }\n for (let i = 0; i < d; ++i) {\n let j = (start - i + n) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findLastIndex = findLastIndex;\n /**\n * Find the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstValue(data, isEven); // 2\n * ArrayExt.findFirstValue(data, isEven, 2); // 4\n * ArrayExt.findFirstValue(data, isEven, 6); // undefined\n * ArrayExt.findFirstValue(data, isEven, 6, 5); // 2\n * ```\n */\n function findFirstValue(array, fn, start = 0, stop = -1) {\n let index = findFirstIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findFirstValue = findFirstValue;\n /**\n * Find the last value which matches a predicate.\n *\n * @param object - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The last matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastValue(data, isEven); // 2\n * ArrayExt.findLastValue(data, isEven, 4); // 4\n * ArrayExt.findLastValue(data, isEven, 0); // undefined\n * ArrayExt.findLastValue(data, isEven, 0, 1); // 2\n * ```\n */\n function findLastValue(array, fn, start = -1, stop = 0) {\n let index = findLastIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findLastValue = findLastValue;\n /**\n * Find the index of the first element which compares `>=` to a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>=` to the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.lowerBound(data, 0, numberCmp); // 0\n * ArrayExt.lowerBound(data, 6, numberCmp); // 3\n * ArrayExt.lowerBound(data, 7, numberCmp); // 3\n * ArrayExt.lowerBound(data, -1, numberCmp); // 0\n * ArrayExt.lowerBound(data, 10, numberCmp); // 6\n * ```\n */\n function lowerBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) < 0) {\n begin = middle + 1;\n span -= half + 1;\n }\n else {\n span = half;\n }\n }\n return begin;\n }\n ArrayExt.lowerBound = lowerBound;\n /**\n * Find the index of the first element which compares `>` than a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>` than the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.upperBound(data, 0, numberCmp); // 1\n * ArrayExt.upperBound(data, 6, numberCmp); // 3\n * ArrayExt.upperBound(data, 7, numberCmp); // 5\n * ArrayExt.upperBound(data, -1, numberCmp); // 0\n * ArrayExt.upperBound(data, 10, numberCmp); // 6\n * ```\n */\n function upperBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) > 0) {\n span = half;\n }\n else {\n begin = middle + 1;\n span -= half + 1;\n }\n }\n return begin;\n }\n ArrayExt.upperBound = upperBound;\n /**\n * Test whether two arrays are shallowly equal.\n *\n * @param a - The first array-like object to compare.\n *\n * @param b - The second array-like object to compare.\n *\n * @param fn - The comparison function to apply to the elements. It\n * should return `true` if the elements are \"equal\". The default\n * compares elements using strict `===` equality.\n *\n * @returns Whether the two arrays are shallowly equal.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * Modifying the length of the arrays while comparing.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let d1 = [0, 3, 4, 7, 7, 9];\n * let d2 = [0, 3, 4, 7, 7, 9];\n * let d3 = [42];\n * ArrayExt.shallowEqual(d1, d2); // true\n * ArrayExt.shallowEqual(d2, d3); // false\n * ```\n */\n function shallowEqual(a, b, fn) {\n // Check for object identity first.\n if (a === b) {\n return true;\n }\n // Bail early if the lengths are different.\n if (a.length !== b.length) {\n return false;\n }\n // Compare each element for equality.\n for (let i = 0, n = a.length; i < n; ++i) {\n if (fn ? !fn(a[i], b[i]) : a[i] !== b[i]) {\n return false;\n }\n }\n // The array are shallowly equal.\n return true;\n }\n ArrayExt.shallowEqual = shallowEqual;\n /**\n * Create a slice of an array subject to an optional step.\n *\n * @param array - The array-like object of interest.\n *\n * @param options - The options for configuring the slice.\n *\n * @returns A new array with the specified values.\n *\n * @throws An exception if the slice `step` is `0`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start`, `stop`, or `step` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.slice(data); // [0, 3, 4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 2 }); // [4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 0, stop: 4 }); // [0, 3, 4, 7]\n * ArrayExt.slice(data, { step: 2 }); // [0, 4, 7]\n * ArrayExt.slice(data, { step: -1 }); // [9, 7, 7, 4, 3, 0]\n * ```\n */\n function slice(array, options = {}) {\n // Extract the options.\n let { start, stop, step } = options;\n // Set up the `step` value.\n if (step === undefined) {\n step = 1;\n }\n // Validate the step size.\n if (step === 0) {\n throw new Error('Slice `step` cannot be zero.');\n }\n // Look up the length of the array.\n let n = array.length;\n // Set up the `start` value.\n if (start === undefined) {\n start = step < 0 ? n - 1 : 0;\n }\n else if (start < 0) {\n start = Math.max(start + n, step < 0 ? -1 : 0);\n }\n else if (start >= n) {\n start = step < 0 ? n - 1 : n;\n }\n // Set up the `stop` value.\n if (stop === undefined) {\n stop = step < 0 ? -1 : n;\n }\n else if (stop < 0) {\n stop = Math.max(stop + n, step < 0 ? -1 : 0);\n }\n else if (stop >= n) {\n stop = step < 0 ? n - 1 : n;\n }\n // Compute the slice length.\n let length;\n if ((step < 0 && stop >= start) || (step > 0 && start >= stop)) {\n length = 0;\n }\n else if (step < 0) {\n length = Math.floor((stop - start + 1) / step + 1);\n }\n else {\n length = Math.floor((stop - start - 1) / step + 1);\n }\n // Compute the sliced result.\n let result = [];\n for (let i = 0; i < length; ++i) {\n result[i] = array[start + i * step];\n }\n // Return the result.\n return result;\n }\n ArrayExt.slice = slice;\n /**\n * Move an element in an array from one index to another.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param fromIndex - The index of the element to move. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param toIndex - The target index of the element. Negative\n * values are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `fromIndex` or `toIndex` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.move(data, 1, 2); // [0, 2, 1, 3, 4]\n * ArrayExt.move(data, 4, 2); // [0, 2, 4, 1, 3]\n * ```\n */\n function move(array, fromIndex, toIndex) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (fromIndex < 0) {\n fromIndex = Math.max(0, fromIndex + n);\n }\n else {\n fromIndex = Math.min(fromIndex, n - 1);\n }\n if (toIndex < 0) {\n toIndex = Math.max(0, toIndex + n);\n }\n else {\n toIndex = Math.min(toIndex, n - 1);\n }\n if (fromIndex === toIndex) {\n return;\n }\n let value = array[fromIndex];\n let d = fromIndex < toIndex ? 1 : -1;\n for (let i = fromIndex; i !== toIndex; i += d) {\n array[i] = array[i + d];\n }\n array[toIndex] = value;\n }\n ArrayExt.move = move;\n /**\n * Reverse an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param start - The index of the first element in the range to be\n * reversed, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * reversed, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` index which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.reverse(data, 1, 3); // [0, 3, 2, 1, 4]\n * ArrayExt.reverse(data, 3); // [0, 3, 2, 4, 1]\n * ArrayExt.reverse(data); // [1, 4, 2, 3, 0]\n * ```\n */\n function reverse(array, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n while (start < stop) {\n let a = array[start];\n let b = array[stop];\n array[start++] = b;\n array[stop--] = a;\n }\n }\n ArrayExt.reverse = reverse;\n /**\n * Rotate the elements of an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param delta - The amount of rotation to apply to the elements. A\n * positive value will rotate the elements to the left. A negative\n * value will rotate the elements to the right.\n *\n * @param start - The index of the first element in the range to be\n * rotated, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * rotated, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `delta`, `start`, or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.rotate(data, 2); // [2, 3, 4, 0, 1]\n * ArrayExt.rotate(data, -2); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 10); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 9); // [4, 0, 1, 2, 3]\n * ArrayExt.rotate(data, 2, 1, 3); // [4, 2, 0, 1, 3]\n * ```\n */\n function rotate(array, delta, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n if (start >= stop) {\n return;\n }\n let length = stop - start + 1;\n if (delta > 0) {\n delta = delta % length;\n }\n else if (delta < 0) {\n delta = ((delta % length) + length) % length;\n }\n if (delta === 0) {\n return;\n }\n let pivot = start + delta;\n reverse(array, start, pivot - 1);\n reverse(array, pivot, stop);\n reverse(array, start, stop);\n }\n ArrayExt.rotate = rotate;\n /**\n * Fill an array with a static value.\n *\n * @param array - The mutable array-like object to fill.\n *\n * @param value - The static value to use to fill the array.\n *\n * @param start - The index of the first element in the range to be\n * filled, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * filled, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Notes\n * If `stop < start` the fill will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four'];\n * ArrayExt.fill(data, 'r'); // ['r', 'r', 'r', 'r']\n * ArrayExt.fill(data, 'g', 1); // ['r', 'g', 'g', 'g']\n * ArrayExt.fill(data, 'b', 2, 3); // ['r', 'g', 'b', 'b']\n * ArrayExt.fill(data, 'z', 3, 1); // ['z', 'z', 'b', 'z']\n * ```\n */\n function fill(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n array[(start + i) % n] = value;\n }\n }\n ArrayExt.fill = fill;\n /**\n * Insert a value into an array at a specific index.\n *\n * @param array - The array of interest.\n *\n * @param index - The index at which to insert the value. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param value - The value to set at the specified index.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2];\n * ArrayExt.insert(data, 0, -1); // [-1, 0, 1, 2]\n * ArrayExt.insert(data, 2, 12); // [-1, 0, 12, 1, 2]\n * ArrayExt.insert(data, -1, 7); // [-1, 0, 12, 1, 7, 2]\n * ArrayExt.insert(data, 6, 19); // [-1, 0, 12, 1, 7, 2, 19]\n * ```\n */\n function insert(array, index, value) {\n let n = array.length;\n if (index < 0) {\n index = Math.max(0, index + n);\n }\n else {\n index = Math.min(index, n);\n }\n for (let i = n; i > index; --i) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n }\n ArrayExt.insert = insert;\n /**\n * Remove and return a value at a specific index in an array.\n *\n * @param array - The array of interest.\n *\n * @param index - The index of the value to remove. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The value at the specified index, or `undefined` if the\n * index is out of range.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeAt(data, 2); // 23\n * ArrayExt.removeAt(data, -2); // 12\n * ArrayExt.removeAt(data, 10); // undefined;\n * ```\n */\n function removeAt(array, index) {\n let n = array.length;\n if (index < 0) {\n index += n;\n }\n if (index < 0 || index >= n) {\n return undefined;\n }\n let value = array[index];\n for (let i = index + 1; i < n; ++i) {\n array[i - 1] = array[i];\n }\n array.length = n - 1;\n return value;\n }\n ArrayExt.removeAt = removeAt;\n /**\n * Remove the first occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstOf(data, 12); // 1\n * ArrayExt.removeFirstOf(data, 17); // -1\n * ArrayExt.removeFirstOf(data, 39, 3); // -1\n * ArrayExt.removeFirstOf(data, 39, 3, 2); // 2\n * ```\n */\n function removeFirstOf(array, value, start = 0, stop = -1) {\n let index = firstIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeFirstOf = removeFirstOf;\n /**\n * Remove the last occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastOf(data, 12); // 5\n * ArrayExt.removeLastOf(data, 17); // -1\n * ArrayExt.removeLastOf(data, 39, 2); // -1\n * ArrayExt.removeLastOf(data, 39, 2, 3); // 3\n * ```\n */\n function removeLastOf(array, value, start = -1, stop = 0) {\n let index = lastIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeLastOf = removeLastOf;\n /**\n * Remove all occurrences of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [14, 12, 23, 39, 14, 12, 19, 14];\n * ArrayExt.removeAllOf(data, 12); // 2\n * ArrayExt.removeAllOf(data, 17); // 0\n * ArrayExt.removeAllOf(data, 14, 1, 4); // 1\n * ```\n */\n function removeAllOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && array[i] === value) {\n count++;\n }\n else if (stop < start &&\n (i <= stop || i >= start) &&\n array[i] === value) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllOf = removeAllOf;\n /**\n * Remove the first occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstWhere(data, isEven); // { index: 0, value: 0 }\n * ArrayExt.removeFirstWhere(data, isEven, 2); // { index: 3, value: 14 }\n * ArrayExt.removeFirstWhere(data, isEven, 4); // { index: -1, value: undefined }\n * ```\n */\n function removeFirstWhere(array, fn, start = 0, stop = -1) {\n let value;\n let index = findFirstIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeFirstWhere = removeFirstWhere;\n /**\n * Remove the last occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastWhere(data, isEven); // { index: 5, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2); // { index: 1, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2, 1); // { index: -1, value: undefined }\n * ```\n */\n function removeLastWhere(array, fn, start = -1, stop = 0) {\n let value;\n let index = findLastIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeLastWhere = removeLastWhere;\n /**\n * Remove all occurrences of values which match a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * function isNegative(value: number): boolean {\n * return value < 0;\n * }\n *\n * let data = [0, 12, -13, -9, 23, 39, 14, -15, 12, 75];\n * ArrayExt.removeAllWhere(data, isEven); // 4\n * ArrayExt.removeAllWhere(data, isNegative, 0, 3); // 2\n * ```\n */\n function removeAllWhere(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && fn(array[i], i)) {\n count++;\n }\n else if (stop < start && (i <= stop || i >= start) && fn(array[i], i)) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllWhere = removeAllWhere;\n})(ArrayExt || (ArrayExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Chain together several iterables.\n *\n * @deprecated\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields the values of the iterables\n * in the order in which they are supplied.\n *\n * #### Example\n * ```typescript\n * import { chain } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = chain(data1, data2);\n *\n * Array.from(stream); // [1, 2, 3, 4, 5, 6]\n * ```\n */\nfunction* chain(...objects) {\n for (const object of objects) {\n yield* object;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an empty iterator.\n *\n * @returns A new iterator which yields nothing.\n *\n * #### Example\n * ```typescript\n * import { empty } from '@lumino/algorithm';\n *\n * let stream = empty();\n *\n * Array.from(stream); // []\n * ```\n */\n// eslint-disable-next-line require-yield\nfunction* empty() {\n return;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Enumerate an iterable object.\n *\n * @param object - The iterable object of interest.\n *\n * @param start - The starting enum value. The default is `0`.\n *\n * @returns An iterator which yields the enumerated values.\n *\n * #### Example\n * ```typescript\n * import { enumerate } from '@lumino/algorithm';\n *\n * let data = ['foo', 'bar', 'baz'];\n *\n * let stream = enumerate(data, 1);\n *\n * Array.from(stream); // [[1, 'foo'], [2, 'bar'], [3, 'baz']]\n * ```\n */\nfunction* enumerate(object, start = 0) {\n for (const value of object) {\n yield [start++, value];\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Filter an iterable for values which pass a test.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns An iterator which yields the values which pass the test.\n *\n * #### Example\n * ```typescript\n * import { filter } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = filter(data, value => value % 2 === 0);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* filter(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Find the first value in an iterable which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { find } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * find(data, isCat).name; // 'fluffy'\n * ```\n */\nfunction find(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return value;\n }\n }\n return undefined;\n}\n/**\n * Find the index of the first value which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { findIndex } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * findIndex(data, isCat); // 1\n * ```\n */\nfunction findIndex(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return index - 1;\n }\n }\n return -1;\n}\n/**\n * Find the minimum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The minimum value in the iterable. If multiple values are\n * equivalent to the minimum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { min } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * min([7, 4, 0, 3, 9, 4], numberCmp); // 0\n * ```\n */\nfunction min(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) < 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the maximum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The maximum value in the iterable. If multiple values are\n * equivalent to the maximum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { max } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * max([7, 4, 0, 3, 9, 4], numberCmp); // 9\n * ```\n */\nfunction max(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) > 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the minimum and maximum values in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns A 2-tuple of the `[min, max]` values in the iterable. If\n * multiple values are equivalent, the left-most values are returned.\n * If the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { minmax } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * minmax([7, 4, 0, 3, 9, 4], numberCmp); // [0, 9]\n * ```\n */\nfunction minmax(object, fn) {\n let empty = true;\n let vmin;\n let vmax;\n for (const value of object) {\n if (empty) {\n vmin = value;\n vmax = value;\n empty = false;\n }\n else if (fn(value, vmin) < 0) {\n vmin = value;\n }\n else if (fn(value, vmax) > 0) {\n vmax = value;\n }\n }\n return empty ? undefined : [vmin, vmax];\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an array from an iterable of values.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new array of values from the given object.\n *\n * #### Example\n * ```typescript\n * import { toArray } from '@lumino/algorithm';\n *\n * let stream = [1, 2, 3, 4, 5, 6][Symbol.iterator]();\n *\n * toArray(stream); // [1, 2, 3, 4, 5, 6];\n * ```\n */\nfunction toArray(object) {\n return Array.from(object);\n}\n/**\n * Create an object from an iterable of key/value pairs.\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new object mapping keys to values.\n *\n * #### Example\n * ```typescript\n * import { toObject } from '@lumino/algorithm';\n *\n * let data: [string, number][] = [['one', 1], ['two', 2], ['three', 3]];\n *\n * toObject(data); // { one: 1, two: 2, three: 3 }\n * ```\n */\nfunction toObject(object) {\n const result = {};\n for (const [key, value] of object) {\n result[key] = value;\n }\n return result;\n}\n/**\n * Invoke a function for each value in an iterable.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The callback function to invoke for each value.\n *\n * #### Notes\n * Iteration can be terminated early by returning `false` from the\n * callback function.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { each } from '@lumino/algorithm';\n *\n * let data = [5, 7, 0, -2, 9];\n *\n * each(data, value => { console.log(value); });\n * ```\n */\nfunction each(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return;\n }\n }\n}\n/**\n * Test whether all values in an iterable satisfy a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if all values pass the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `false` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { every } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * every(data, value => value % 2 === 0); // false\n * every(data, value => value % 2 === 1); // true\n * ```\n */\nfunction every(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Test whether any value in an iterable satisfies a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if any value passes the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `true` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { some } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * some(data, value => value === 7); // true\n * some(data, value => value === 3); // false\n * ```\n */\nfunction some(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return true;\n }\n }\n return false;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Transform the values of an iterable with a mapping function.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The mapping function to invoke for each value.\n *\n * @returns An iterator which yields the transformed values.\n *\n * #### Example\n * ```typescript\n * import { map } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3];\n *\n * let stream = map(data, value => value * 2);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* map(object, fn) {\n let index = 0;\n for (const value of object) {\n yield fn(value, index++);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator of evenly spaced values.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns An iterator which produces evenly spaced values.\n *\n * #### Notes\n * In the single argument form of `range(stop)`, `start` defaults to\n * `0` and `step` defaults to `1`.\n *\n * In the two argument form of `range(start, stop)`, `step` defaults\n * to `1`.\n *\n * #### Example\n * ```typescript\n * import { range } from '@lumino/algorithm';\n *\n * let stream = range(2, 4);\n *\n * Array.from(stream); // [2, 3]\n * ```\n */\nfunction* range(start, stop, step) {\n if (stop === undefined) {\n stop = start;\n start = 0;\n step = 1;\n }\n else if (step === undefined) {\n step = 1;\n }\n const length = Private.rangeLength(start, stop, step);\n for (let index = 0; index < length; index++) {\n yield start + step * index;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Compute the effective length of a range.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns The number of steps need to traverse the range.\n */\n function rangeLength(start, stop, step) {\n if (step === 0) {\n return Infinity;\n }\n if (start > stop && step > 0) {\n return 0;\n }\n if (start < stop && step < 0) {\n return 0;\n }\n return Math.ceil((stop - start) / step);\n }\n Private.rangeLength = rangeLength;\n})(Private || (Private = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nfunction reduce(object, fn, initial) {\n // Setup the iterator and fetch the first value.\n const it = object[Symbol.iterator]();\n let index = 0;\n let first = it.next();\n // An empty iterator and no initial value is an error.\n if (first.done && initial === undefined) {\n throw new TypeError('Reduce of empty iterable with no initial value.');\n }\n // If the iterator is empty, return the initial value.\n if (first.done) {\n return initial;\n }\n // If the iterator has a single item and no initial value, the\n // reducer is not invoked and the first item is the return value.\n let second = it.next();\n if (second.done && initial === undefined) {\n return first.value;\n }\n // If iterator has a single item and an initial value is provided,\n // the reducer is invoked and that result is the return value.\n if (second.done) {\n return fn(initial, first.value, index++);\n }\n // Setup the initial accumlated value.\n let accumulator;\n if (initial === undefined) {\n accumulator = fn(first.value, second.value, index++);\n }\n else {\n accumulator = fn(fn(initial, first.value, index++), second.value, index++);\n }\n // Iterate the rest of the values, updating the accumulator.\n let next;\n while (!(next = it.next()).done) {\n accumulator = fn(accumulator, next.value, index++);\n }\n // Return the final accumulated value.\n return accumulator;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator which repeats a value a number of times.\n *\n * @deprecated\n *\n * @param value - The value to repeat.\n *\n * @param count - The number of times to repeat the value.\n *\n * @returns A new iterator which repeats the specified value.\n *\n * #### Example\n * ```typescript\n * import { repeat } from '@lumino/algorithm';\n *\n * let stream = repeat(7, 3);\n *\n * Array.from(stream); // [7, 7, 7]\n * ```\n */\nfunction* repeat(value, count) {\n while (0 < count--) {\n yield value;\n }\n}\n/**\n * Create an iterator which yields a value a single time.\n *\n * @deprecated\n *\n * @param value - The value to wrap in an iterator.\n *\n * @returns A new iterator which yields the value a single time.\n *\n * #### Example\n * ```typescript\n * import { once } from '@lumino/algorithm';\n *\n * let stream = once(7);\n *\n * Array.from(stream); // [7]\n * ```\n */\nfunction* once(value) {\n yield value;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator for a retroable object.\n *\n * @param object - The retroable or array-like object of interest.\n *\n * @returns An iterator which traverses the object's values in reverse.\n *\n * #### Example\n * ```typescript\n * import { retro } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = retro(data);\n *\n * Array.from(stream); // [6, 5, 4, 3, 2, 1]\n * ```\n */\nfunction* retro(object) {\n if (typeof object.retro === 'function') {\n yield* object.retro();\n }\n else {\n for (let index = object.length - 1; index > -1; index--) {\n yield object[index];\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Topologically sort an iterable of edges.\n *\n * @param edges - The iterable object of edges to sort.\n * An edge is represented as a 2-tuple of `[fromNode, toNode]`.\n *\n * @returns The topologically sorted array of nodes.\n *\n * #### Notes\n * If a cycle is present in the graph, the cycle will be ignored and\n * the return value will be only approximately sorted.\n *\n * #### Example\n * ```typescript\n * import { topologicSort } from '@lumino/algorithm';\n *\n * let data = [\n * ['d', 'e'],\n * ['c', 'd'],\n * ['a', 'b'],\n * ['b', 'c']\n * ];\n *\n * topologicSort(data); // ['a', 'b', 'c', 'd', 'e']\n * ```\n */\nfunction topologicSort(edges) {\n // Setup the shared sorting state.\n let sorted = [];\n let visited = new Set();\n let graph = new Map();\n // Add the edges to the graph.\n for (const edge of edges) {\n addEdge(edge);\n }\n // Visit each node in the graph.\n for (const [k] of graph) {\n visit(k);\n }\n // Return the sorted results.\n return sorted;\n // Add an edge to the graph.\n function addEdge(edge) {\n let [fromNode, toNode] = edge;\n let children = graph.get(toNode);\n if (children) {\n children.push(fromNode);\n }\n else {\n graph.set(toNode, [fromNode]);\n }\n }\n // Recursively visit the node.\n function visit(node) {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n let children = graph.get(node);\n if (children) {\n for (const child of children) {\n visit(child);\n }\n }\n sorted.push(node);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate over an iterable using a stepped increment.\n *\n * @param object - The iterable object of interest.\n *\n * @param step - The distance to step on each iteration. A value\n * of less than `1` will behave the same as a value of `1`.\n *\n * @returns An iterator which traverses the iterable step-wise.\n *\n * #### Example\n * ```typescript\n * import { stride } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = stride(data, 2);\n *\n * Array.from(stream); // [1, 3, 5];\n * ```\n */\nfunction* stride(object, step) {\n let count = 0;\n for (const value of object) {\n if (0 === count++ % step) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for string-specific algorithms.\n */\nvar StringExt;\n(function (StringExt) {\n /**\n * Find the indices of characters in a source text.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The matched indices, or `null` if there is no match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * In order for there to be a match, all of the characters in `query`\n * **must** appear in `source` in the order given by `query`.\n *\n * Characters are matched using strict `===` equality.\n */\n function findIndices(source, query, start = 0) {\n let indices = new Array(query.length);\n for (let i = 0, j = start, n = query.length; i < n; ++i, ++j) {\n j = source.indexOf(query[i], j);\n if (j === -1) {\n return null;\n }\n indices[i] = j;\n }\n return indices;\n }\n StringExt.findIndices = findIndices;\n /**\n * A string matcher which uses a sum-of-squares algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-squares approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The index of each\n * matching character is squared and added to the score. This means\n * that early and consecutive character matches are preferred, while\n * late matches are heavily penalized.\n */\n function matchSumOfSquares(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i] - start;\n score += j * j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfSquares = matchSumOfSquares;\n /**\n * A string matcher which uses a sum-of-deltas algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-deltas approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The delta between\n * the indices are summed to create the score. This means that groups\n * of matched characters are preferred, while fragmented matches are\n * penalized.\n */\n function matchSumOfDeltas(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n let last = start - 1;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i];\n score += j - last - 1;\n last = j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfDeltas = matchSumOfDeltas;\n /**\n * Highlight the matched characters of a source text.\n *\n * @param source - The text which should be highlighted.\n *\n * @param indices - The indices of the matched characters. They must\n * appear in increasing order and must be in bounds of the source.\n *\n * @param fn - The function to apply to the matched chunks.\n *\n * @returns An array of unmatched and highlighted chunks.\n */\n function highlight(source, indices, fn) {\n // Set up the result array.\n let result = [];\n // Set up the counter variables.\n let k = 0;\n let last = 0;\n let n = indices.length;\n // Iterator over each index.\n while (k < n) {\n // Set up the chunk indices.\n let i = indices[k];\n let j = indices[k];\n // Advance the right chunk index until it's non-contiguous.\n while (++k < n && indices[k] === j + 1) {\n j++;\n }\n // Extract the unmatched text.\n if (last < i) {\n result.push(source.slice(last, i));\n }\n // Extract and highlight the matched text.\n if (i < j + 1) {\n result.push(fn(source.slice(i, j + 1)));\n }\n // Update the last visited index.\n last = j + 1;\n }\n // Extract any remaining unmatched text.\n if (last < source.length) {\n result.push(source.slice(last));\n }\n // Return the highlighted result.\n return result;\n }\n StringExt.highlight = highlight;\n /**\n * A 3-way string comparison function.\n *\n * @param a - The first string of interest.\n *\n * @param b - The second string of interest.\n *\n * @returns `-1` if `a < b`, else `1` if `a > b`, else `0`.\n */\n function cmp(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n StringExt.cmp = cmp;\n})(StringExt || (StringExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Take a fixed number of items from an iterable.\n *\n * @param object - The iterable object of interest.\n *\n * @param count - The number of items to take from the iterable.\n *\n * @returns An iterator which yields the specified number of items\n * from the source iterable.\n *\n * #### Notes\n * The returned iterator will exhaust early if the source iterable\n * contains an insufficient number of items.\n *\n * #### Example\n * ```typescript\n * import { take } from '@lumino/algorithm';\n *\n * let stream = take([5, 4, 3, 2, 1, 0, -1], 3);\n *\n * Array.from(stream); // [5, 4, 3]\n * ```\n */\nfunction* take(object, count) {\n if (count < 1) {\n return;\n }\n const it = object[Symbol.iterator]();\n let item;\n while (0 < count-- && !(item = it.next()).done) {\n yield item.value;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate several iterables in lockstep.\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields successive tuples of values where\n * each value is taken in turn from the provided iterables. It will\n * be as long as the shortest provided iterable.\n *\n * #### Example\n * ```typescript\n * import { zip } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = zip(data1, data2);\n *\n * Array.from(stream); // [[1, 4], [2, 5], [3, 6]]\n * ```\n */\nfunction* zip(...objects) {\n const iters = objects.map(obj => obj[Symbol.iterator]());\n let tuple = iters.map(it => it.next());\n for (; every(tuple, item => !item.done); tuple = iters.map(it => it.next())) {\n yield tuple.map(item => item.value);\n }\n}\n\nexport { ArrayExt, StringExt, chain, each, empty, enumerate, every, filter, find, findIndex, map, max, min, minmax, once, range, reduce, repeat, retro, some, stride, take, toArray, toObject, topologicSort, zip };\n//# sourceMappingURL=index.es6.js.map\n","/**\n * A generic doubly-linked list.\n */\nclass LinkedList {\n constructor() {\n this._first = null;\n this._last = null;\n this._size = 0;\n }\n /**\n * Whether the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get isEmpty() {\n return this._size === 0;\n }\n /**\n * The size of the list.\n *\n * #### Complexity\n * `O(1)`\n *\n * #### Notes\n * This is equivalent to `length`.\n */\n get size() {\n return this._size;\n }\n /**\n * The length of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `size`.\n *\n * This property is deprecated.\n */\n get length() {\n return this._size;\n }\n /**\n * The first value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get first() {\n return this._first ? this._first.value : undefined;\n }\n /**\n * The last value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get last() {\n return this._last ? this._last.value : undefined;\n }\n /**\n * The first node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get firstNode() {\n return this._first;\n }\n /**\n * The last node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get lastNode() {\n return this._last;\n }\n /**\n * Create an iterator over the values in the list.\n *\n * @returns A new iterator starting with the first value.\n *\n * #### Complexity\n * Constant.\n */\n *[Symbol.iterator]() {\n let node = this._first;\n while (node) {\n yield node.value;\n node = node.next;\n }\n }\n /**\n * Create a reverse iterator over the values in the list.\n *\n * @returns A new iterator starting with the last value.\n *\n * #### Complexity\n * Constant.\n */\n *retro() {\n let node = this._last;\n while (node) {\n yield node.value;\n node = node.prev;\n }\n }\n /**\n * Create an iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the first node.\n *\n * #### Complexity\n * Constant.\n */\n *nodes() {\n let node = this._first;\n while (node) {\n yield node;\n node = node.next;\n }\n }\n /**\n * Create a reverse iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the last node.\n *\n * #### Complexity\n * Constant.\n */\n *retroNodes() {\n let node = this._last;\n while (node) {\n yield node;\n node = node.prev;\n }\n }\n /**\n * Assign new values to the list, replacing all current values.\n *\n * @param values - The values to assign to the list.\n *\n * #### Complexity\n * Linear.\n */\n assign(values) {\n this.clear();\n for (const value of values) {\n this.addLast(value);\n }\n }\n /**\n * Add a value to the end of the list.\n *\n * @param value - The value to add to the end of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `addLast`.\n */\n push(value) {\n this.addLast(value);\n }\n /**\n * Remove and return the value at the end of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `removeLast`.\n */\n pop() {\n return this.removeLast();\n }\n /**\n * Add a value to the beginning of the list.\n *\n * @param value - The value to add to the beginning of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `addFirst`.\n */\n shift(value) {\n this.addFirst(value);\n }\n /**\n * Remove and return the value at the beginning of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `removeFirst`.\n */\n unshift() {\n return this.removeFirst();\n }\n /**\n * Add a value to the beginning of the list.\n *\n * @param value - The value to add to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n addFirst(value) {\n let node = new Private.LinkedListNode(this, value);\n if (!this._first) {\n this._first = node;\n this._last = node;\n }\n else {\n node.next = this._first;\n this._first.prev = node;\n this._first = node;\n }\n this._size++;\n return node;\n }\n /**\n * Add a value to the end of the list.\n *\n * @param value - The value to add to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n addLast(value) {\n let node = new Private.LinkedListNode(this, value);\n if (!this._last) {\n this._first = node;\n this._last = node;\n }\n else {\n node.prev = this._last;\n this._last.next = node;\n this._last = node;\n }\n this._size++;\n return node;\n }\n /**\n * Insert a value before a specific node in the list.\n *\n * @param value - The value to insert before the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n insertBefore(value, ref) {\n if (!ref || ref === this._first) {\n return this.addFirst(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n let node = new Private.LinkedListNode(this, value);\n let _ref = ref;\n let prev = _ref.prev;\n node.next = _ref;\n node.prev = prev;\n _ref.prev = node;\n prev.next = node;\n this._size++;\n return node;\n }\n /**\n * Insert a value after a specific node in the list.\n *\n * @param value - The value to insert after the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n insertAfter(value, ref) {\n if (!ref || ref === this._last) {\n return this.addLast(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n let node = new Private.LinkedListNode(this, value);\n let _ref = ref;\n let next = _ref.next;\n node.next = next;\n node.prev = _ref;\n _ref.next = node;\n next.prev = node;\n this._size++;\n return node;\n }\n /**\n * Remove and return the value at the beginning of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n removeFirst() {\n let node = this._first;\n if (!node) {\n return undefined;\n }\n if (node === this._last) {\n this._first = null;\n this._last = null;\n }\n else {\n this._first = node.next;\n this._first.prev = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._size--;\n return node.value;\n }\n /**\n * Remove and return the value at the end of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n removeLast() {\n let node = this._last;\n if (!node) {\n return undefined;\n }\n if (node === this._first) {\n this._first = null;\n this._last = null;\n }\n else {\n this._last = node.prev;\n this._last.next = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._size--;\n return node.value;\n }\n /**\n * Remove a specific node from the list.\n *\n * @param node - The node to remove from the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * The node must be owned by the list.\n */\n removeNode(node) {\n if (!(node instanceof Private.LinkedListNode) || node.list !== this) {\n throw new Error('Node is not owned by the list.');\n }\n let _node = node;\n if (_node === this._first && _node === this._last) {\n this._first = null;\n this._last = null;\n }\n else if (_node === this._first) {\n this._first = _node.next;\n this._first.prev = null;\n }\n else if (_node === this._last) {\n this._last = _node.prev;\n this._last.next = null;\n }\n else {\n _node.next.prev = _node.prev;\n _node.prev.next = _node.next;\n }\n _node.list = null;\n _node.next = null;\n _node.prev = null;\n this._size--;\n }\n /**\n * Remove all values from the list.\n *\n * #### Complexity\n * Linear.\n */\n clear() {\n let node = this._first;\n while (node) {\n let next = node.next;\n node.list = null;\n node.prev = null;\n node.next = null;\n node = next;\n }\n this._first = null;\n this._last = null;\n this._size = 0;\n }\n}\n/**\n * The namespace for the `LinkedList` class statics.\n */\n(function (LinkedList) {\n /**\n * Create a linked list from an iterable of values.\n *\n * @param values - The iterable object of interest.\n *\n * @returns A new linked list initialized with the given values.\n *\n * #### Complexity\n * Linear.\n */\n function from(values) {\n let list = new LinkedList();\n list.assign(values);\n return list;\n }\n LinkedList.from = from;\n})(LinkedList || (LinkedList = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The internal linked list node implementation.\n */\n class LinkedListNode {\n /**\n * Construct a new linked list node.\n *\n * @param list - The list which owns the node.\n *\n * @param value - The value for the link.\n */\n constructor(list, value) {\n /**\n * The linked list which created and owns the node.\n */\n this.list = null;\n /**\n * The next node in the list.\n */\n this.next = null;\n /**\n * The previous node in the list.\n */\n this.prev = null;\n this.list = list;\n this.value = value;\n }\n }\n Private.LinkedListNode = LinkedListNode;\n})(Private || (Private = {}));\n\nexport { LinkedList };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Platform, Selector } from '@lumino/domutils';\nimport { getKeyboardLayout } from '@lumino/keyboard';\nimport { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module commands\n */\n/**\n * An object which manages a collection of commands.\n *\n * #### Notes\n * A command registry can be used to populate a variety of action-based\n * widgets, such as command palettes, menus, and toolbars.\n */\nclass CommandRegistry {\n constructor() {\n this._timerID = 0;\n this._timerModifierID = 0;\n this._replaying = false;\n this._keystrokes = [];\n this._keydownEvents = [];\n this._keyBindings = [];\n this._exactKeyMatch = null;\n this._commands = new Map();\n this._commandChanged = new Signal(this);\n this._commandExecuted = new Signal(this);\n this._keyBindingChanged = new Signal(this);\n this._holdKeyBindingPromises = new Map();\n }\n /**\n * A signal emitted when a command has changed.\n *\n * #### Notes\n * This signal is useful for visual representations of commands which\n * need to refresh when the state of a relevant command has changed.\n */\n get commandChanged() {\n return this._commandChanged;\n }\n /**\n * A signal emitted when a command has executed.\n *\n * #### Notes\n * Care should be taken when consuming this signal. The command system is used\n * by many components for many user actions. Handlers registered with this\n * signal must return quickly to ensure the overall application remains responsive.\n */\n get commandExecuted() {\n return this._commandExecuted;\n }\n /**\n * A signal emitted when a key binding is changed.\n */\n get keyBindingChanged() {\n return this._keyBindingChanged;\n }\n /**\n * A read-only array of the key bindings in the registry.\n */\n get keyBindings() {\n return this._keyBindings;\n }\n /**\n * List the ids of the registered commands.\n *\n * @returns A new array of the registered command ids.\n */\n listCommands() {\n return Array.from(this._commands.keys());\n }\n /**\n * Test whether a specific command is registered.\n *\n * @param id - The id of the command of interest.\n *\n * @returns `true` if the command is registered, `false` otherwise.\n */\n hasCommand(id) {\n return this._commands.has(id);\n }\n /**\n * Add a command to the registry.\n *\n * @param id - The unique id of the command.\n *\n * @param options - The options for the command.\n *\n * @returns A disposable which will remove the command.\n *\n * @throws An error if the given `id` is already registered.\n */\n addCommand(id, options) {\n // Throw an error if the id is already registered.\n if (this._commands.has(id)) {\n throw new Error(`Command '${id}' already registered.`);\n }\n // Add the command to the registry.\n this._commands.set(id, Private.createCommand(options));\n // Emit the `commandChanged` signal.\n this._commandChanged.emit({ id, type: 'added' });\n // Return a disposable which will remove the command.\n return new DisposableDelegate(() => {\n // Remove the command from the registry.\n this._commands.delete(id);\n // Emit the `commandChanged` signal.\n this._commandChanged.emit({ id, type: 'removed' });\n });\n }\n /**\n * Notify listeners that the state of a command has changed.\n *\n * @param id - The id of the command which has changed. If more than\n * one command has changed, this argument should be omitted.\n *\n * @throws An error if the given `id` is not registered.\n *\n * #### Notes\n * This method should be called by the command author whenever the\n * application state changes such that the results of the command\n * metadata functions may have changed.\n *\n * This will cause the `commandChanged` signal to be emitted.\n */\n notifyCommandChanged(id) {\n if (id !== undefined && !this._commands.has(id)) {\n throw new Error(`Command '${id}' is not registered.`);\n }\n this._commandChanged.emit({ id, type: id ? 'changed' : 'many-changed' });\n }\n /**\n * Get the description for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The description for the command.\n */\n describedBy(id, args = JSONExt.emptyObject) {\n var _a;\n let cmd = this._commands.get(id);\n return Promise.resolve((_a = cmd === null || cmd === void 0 ? void 0 : cmd.describedBy.call(undefined, args)) !== null && _a !== void 0 ? _a : { args: null });\n }\n /**\n * Get the display label for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The display label for the command, or an empty string\n * if the command is not registered.\n */\n label(id, args = JSONExt.emptyObject) {\n var _a;\n let cmd = this._commands.get(id);\n return (_a = cmd === null || cmd === void 0 ? void 0 : cmd.label.call(undefined, args)) !== null && _a !== void 0 ? _a : '';\n }\n /**\n * Get the mnemonic index for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The mnemonic index for the command, or `-1` if the\n * command is not registered.\n */\n mnemonic(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.mnemonic.call(undefined, args) : -1;\n }\n /**\n * Get the icon renderer for a specific command.\n *\n * DEPRECATED: if set to a string value, the .icon field will\n * function as an alias for the .iconClass field, for backwards\n * compatibility. In the future when this is removed, the default\n * return type will become undefined.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon renderer for the command or `undefined`.\n */\n icon(id, args = JSONExt.emptyObject) {\n var _a;\n return (_a = this._commands.get(id)) === null || _a === void 0 ? void 0 : _a.icon.call(undefined, args);\n }\n /**\n * Get the icon class for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon class for the command, or an empty string if\n * the command is not registered.\n */\n iconClass(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.iconClass.call(undefined, args) : '';\n }\n /**\n * Get the icon label for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon label for the command, or an empty string if\n * the command is not registered.\n */\n iconLabel(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.iconLabel.call(undefined, args) : '';\n }\n /**\n * Get the short form caption for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The caption for the command, or an empty string if the\n * command is not registered.\n */\n caption(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.caption.call(undefined, args) : '';\n }\n /**\n * Get the usage help text for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The usage text for the command, or an empty string if\n * the command is not registered.\n */\n usage(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.usage.call(undefined, args) : '';\n }\n /**\n * Get the extra class name for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The class name for the command, or an empty string if\n * the command is not registered.\n */\n className(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.className.call(undefined, args) : '';\n }\n /**\n * Get the dataset for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The dataset for the command, or an empty dataset if\n * the command is not registered.\n */\n dataset(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.dataset.call(undefined, args) : {};\n }\n /**\n * Test whether a specific command is enabled.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is enabled,\n * or `false` if the command is not registered.\n */\n isEnabled(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isEnabled.call(undefined, args) : false;\n }\n /**\n * Test whether a specific command is toggled.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is toggled,\n * or `false` if the command is not registered.\n */\n isToggled(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isToggled.call(undefined, args) : false;\n }\n /**\n * Test whether a specific command is toggleable.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is toggleable,\n * or `false` if the command is not registered.\n */\n isToggleable(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isToggleable : false;\n }\n /**\n * Test whether a specific command is visible.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is visible,\n * or `false` if the command is not registered.\n */\n isVisible(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isVisible.call(undefined, args) : false;\n }\n /**\n * Execute a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A promise which resolves with the result of the command.\n *\n * #### Notes\n * The promise will reject if the command throws an exception,\n * or if the command is not registered.\n */\n execute(id, args = JSONExt.emptyObject) {\n // Reject if the command is not registered.\n let cmd = this._commands.get(id);\n if (!cmd) {\n return Promise.reject(new Error(`Command '${id}' not registered.`));\n }\n // Execute the command and reject if an exception is thrown.\n let value;\n try {\n value = cmd.execute.call(undefined, args);\n }\n catch (err) {\n value = Promise.reject(err);\n }\n // Create the return promise which resolves the result.\n let result = Promise.resolve(value);\n // Emit the command executed signal.\n this._commandExecuted.emit({ id, args, result });\n // Return the result promise to the caller.\n return result;\n }\n /**\n * Add a key binding to the registry.\n *\n * @param options - The options for creating the key binding.\n *\n * @returns A disposable which removes the added key binding.\n *\n * #### Notes\n * If multiple key bindings are registered for the same sequence, the\n * binding with the highest selector specificity is executed first. A\n * tie is broken by using the most recently added key binding.\n *\n * Ambiguous key bindings are resolved with a timeout. As an example,\n * suppose two key bindings are registered: one with the key sequence\n * `['Ctrl D']`, and another with `['Ctrl D', 'Ctrl W']`. If the user\n * presses `Ctrl D`, the first binding cannot be immediately executed\n * since the user may intend to complete the chord with `Ctrl W`. For\n * such cases, a timer is used to allow the chord to be completed. If\n * the chord is not completed before the timeout, the first binding\n * is executed.\n */\n addKeyBinding(options) {\n // Create the binding for the given options.\n let binding = Private.createKeyBinding(options);\n // Add the key binding to the bindings array.\n this._keyBindings.push(binding);\n // Emit the `bindingChanged` signal.\n this._keyBindingChanged.emit({ binding, type: 'added' });\n // Return a disposable which will remove the binding.\n return new DisposableDelegate(() => {\n // Remove the binding from the array.\n ArrayExt.removeFirstOf(this._keyBindings, binding);\n // Emit the `bindingChanged` signal.\n this._keyBindingChanged.emit({ binding, type: 'removed' });\n });\n }\n /**\n * Process a `'keydown'` event and invoke a matching key binding.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * #### Notes\n * This should be called in response to a `'keydown'` event in order\n * to invoke the command for the best matching key binding.\n *\n * The registry **does not** install its own listener for `'keydown'`\n * events. This allows the application full control over the nodes\n * and phase for which the registry processes `'keydown'` events.\n *\n * When the keydown event is processed, if the event target or any of its\n * ancestor nodes has a `data-lm-suppress-shortcuts` attribute, its keydown\n * events will not invoke commands.\n */\n processKeydownEvent(event) {\n // Bail immediately if playing back keystrokes.\n if (event.defaultPrevented || this._replaying) {\n return;\n }\n // Get the normalized keystroke for the event.\n const keystroke = CommandRegistry.keystrokeForKeydownEvent(event);\n // If the keystroke is not valid for the keyboard layout, replay\n // any suppressed events and clear the pending state.\n if (!keystroke) {\n this._replayKeydownEvents();\n this._clearPendingState();\n return;\n }\n // Check that only mod key(s) have been pressed.\n if (CommandRegistry.isModifierKeyPressed(event)) {\n // Find the exact match for the modifier keys.\n let { exact } = Private.matchKeyBinding(this._keyBindings, [keystroke], event);\n if (exact) {\n // If the mod keys match an exact shortcut, start a dedicated timer.\n event.preventDefault();\n event.stopPropagation();\n this._startModifierTimer(exact);\n }\n else {\n // Otherwise stop potential existing timer.\n this._clearModifierTimer();\n }\n return;\n }\n // Add the keystroke to the current key sequence.\n this._keystrokes.push(keystroke);\n // Find the exact and partial matches for the key sequence.\n const { exact, partial } = Private.matchKeyBinding(this._keyBindings, this._keystrokes, event);\n // Whether there is any partial match.\n const hasPartial = partial.length !== 0;\n // If there is no exact match and no partial match, replay\n // any suppressed events and clear the pending state.\n if (!exact && !hasPartial) {\n this._replayKeydownEvents();\n this._clearPendingState();\n return;\n }\n // Stop propagation of the event. If there is only a partial match,\n // the event will be replayed if a final exact match never occurs.\n if ((exact === null || exact === void 0 ? void 0 : exact.preventDefault) || partial.some(match => match.preventDefault)) {\n event.preventDefault();\n event.stopPropagation();\n }\n // Store the event for possible playback in the future and for\n // the use in execution hold check.\n this._keydownEvents.push(event);\n // If there is an exact match but no partial match, the exact match\n // can be dispatched immediately. The pending state is cleared so\n // the next key press starts from the default state.\n if (exact && !hasPartial) {\n this._executeKeyBinding(exact);\n this._clearPendingState();\n return;\n }\n // If there is both an exact match and a partial match, the exact\n // match is stored for future dispatch in case the timer expires\n // before a more specific match is triggered.\n if (exact) {\n this._exactKeyMatch = exact;\n }\n // (Re)start the timer to dispatch the most recent exact match\n // in case the partial match fails to result in an exact match.\n this._startTimer();\n }\n /**\n * Delay the execution of any command matched against the given 'keydown' event\n * until the `permission` to execute is granted.\n *\n * @param event - The event object for a `'keydown'` event.\n * @param permission - The promise with value indicating whether to proceed with the execution.\n *\n * ### Note\n * This enables the caller of `processKeydownEvent` to asynchronously prevent the\n * execution of the command based on external events.\n */\n holdKeyBindingExecution(event, permission) {\n this._holdKeyBindingPromises.set(event, permission);\n }\n /**\n * Process a ``keyup`` event to clear the timer on the modifier, if it exists.\n *\n * @param event - The event object for a `'keydown'` event.\n */\n processKeyupEvent(event) {\n this._clearModifierTimer();\n }\n /**\n * Start or restart the timeout on the modifier keys.\n *\n * This timeout will end only if the keys are hold.\n */\n _startModifierTimer(exact) {\n this._clearModifierTimer();\n this._timerModifierID = window.setTimeout(() => {\n this._executeKeyBinding(exact);\n }, Private.modifierkeyTimeOut);\n }\n /**\n * Clear the timeout on modifier keys.\n */\n _clearModifierTimer() {\n if (this._timerModifierID !== 0) {\n clearTimeout(this._timerModifierID);\n this._timerModifierID = 0;\n }\n }\n /**\n * Start or restart the pending timeout.\n */\n _startTimer() {\n this._clearTimer();\n this._timerID = window.setTimeout(() => {\n this._onPendingTimeout();\n }, Private.CHORD_TIMEOUT);\n }\n /**\n * Clear the pending timeout.\n */\n _clearTimer() {\n if (this._timerID !== 0) {\n clearTimeout(this._timerID);\n this._timerID = 0;\n }\n }\n /**\n * Replay the keydown events which were suppressed.\n */\n _replayKeydownEvents() {\n if (this._keydownEvents.length === 0) {\n return;\n }\n this._replaying = true;\n this._keydownEvents.forEach(Private.replayKeyEvent);\n this._replaying = false;\n }\n /**\n * Execute the command for the given key binding.\n *\n * If the command is missing or disabled, a warning will be logged.\n *\n * The execution will not proceed if any of the events leading to\n * the keybinding matching were held with the permission resolving to false.\n */\n async _executeKeyBinding(binding) {\n if (this._holdKeyBindingPromises.size !== 0) {\n // Copy keydown events list to ensure it is available in async code.\n const keydownEvents = [...this._keydownEvents];\n // Wait until all hold requests on execution are lifted.\n const executionAllowed = (await Promise.race([\n Promise.all(keydownEvents.map(async (event) => { var _a; return (_a = this._holdKeyBindingPromises.get(event)) !== null && _a !== void 0 ? _a : Promise.resolve(true); })),\n new Promise(resolve => {\n setTimeout(() => resolve([false]), Private.KEYBINDING_HOLD_TIMEOUT);\n })\n ])).every(Boolean);\n // Clear the hold requests.\n this._holdKeyBindingPromises.clear();\n // Do not proceed with the execution if any of the hold requests did not get the permission to proceed.\n if (!executionAllowed) {\n return;\n }\n }\n let { command, args } = binding;\n let newArgs = {\n _luminoEvent: { type: 'keybinding', keys: binding.keys },\n ...args\n };\n if (!this.hasCommand(command) || !this.isEnabled(command, newArgs)) {\n let word = this.hasCommand(command) ? 'enabled' : 'registered';\n let keys = binding.keys.join(', ');\n let msg1 = `Cannot execute key binding '${keys}':`;\n let msg2 = `command '${command}' is not ${word}.`;\n console.warn(`${msg1} ${msg2}`);\n return;\n }\n await this.execute(command, newArgs);\n }\n /**\n * Clear the internal pending state.\n */\n _clearPendingState() {\n this._clearTimer();\n this._clearModifierTimer();\n this._exactKeyMatch = null;\n this._keystrokes.length = 0;\n this._keydownEvents.length = 0;\n }\n /**\n * Handle the partial match timeout.\n */\n _onPendingTimeout() {\n this._timerID = 0;\n if (this._exactKeyMatch) {\n this._executeKeyBinding(this._exactKeyMatch);\n }\n else {\n this._replayKeydownEvents();\n }\n this._clearPendingState();\n }\n}\n/**\n * The namespace for the `CommandRegistry` class statics.\n */\n(function (CommandRegistry) {\n /**\n * Parse a keystroke into its constituent components.\n *\n * @param keystroke - The keystroke of interest.\n *\n * @returns The parsed components of the keystroke.\n *\n * #### Notes\n * The keystroke should be of the form:\n * `[ [ [ ]]]`\n *\n * The supported modifiers are: `Accel`, `Alt`, `Cmd`, `Ctrl`, and\n * `Shift`. The `Accel` modifier is translated to `Cmd` on Mac and\n * `Ctrl` on all other platforms.\n *\n * The parsing is tolerant and will not throw exceptions. Notably:\n * - Duplicate modifiers are ignored.\n * - Extra primary keys are ignored.\n * - The order of modifiers and primary key is irrelevant.\n * - The keystroke parts should be separated by whitespace.\n * - The keystroke is case sensitive.\n */\n function parseKeystroke(keystroke) {\n let key = '';\n let alt = false;\n let cmd = false;\n let ctrl = false;\n let shift = false;\n for (let token of keystroke.split(/\\s+/)) {\n if (token === 'Accel') {\n if (Platform.IS_MAC) {\n cmd = true;\n }\n else {\n ctrl = true;\n }\n }\n else if (token === 'Alt') {\n alt = true;\n }\n else if (token === 'Cmd') {\n cmd = true;\n }\n else if (token === 'Ctrl') {\n ctrl = true;\n }\n else if (token === 'Shift') {\n shift = true;\n }\n else if (token.length > 0) {\n key = token;\n }\n }\n return { cmd, ctrl, alt, shift, key };\n }\n CommandRegistry.parseKeystroke = parseKeystroke;\n /**\n * Normalize a keystroke into a canonical representation.\n *\n * @param keystroke - The keystroke of interest.\n *\n * @returns The normalized representation of the keystroke.\n *\n * #### Notes\n * This normalizes the keystroke by removing duplicate modifiers and\n * extra primary keys, and assembling the parts in a canonical order.\n *\n * The `Cmd` modifier is ignored on non-Mac platforms.\n */\n function normalizeKeystroke(keystroke) {\n let mods = '';\n let parts = parseKeystroke(keystroke);\n if (parts.ctrl) {\n mods += 'Ctrl ';\n }\n if (parts.alt) {\n mods += 'Alt ';\n }\n if (parts.shift) {\n mods += 'Shift ';\n }\n if (parts.cmd && Platform.IS_MAC) {\n mods += 'Cmd ';\n }\n if (!parts.key) {\n return mods.trim();\n }\n return mods + parts.key;\n }\n CommandRegistry.normalizeKeystroke = normalizeKeystroke;\n /**\n * Get the platform-specific normalized keys for an options object.\n *\n * @param options - The options for the key binding.\n *\n * @returns Array of combined, normalized keys.\n */\n function normalizeKeys(options) {\n let keys;\n if (Platform.IS_WIN) {\n keys = options.winKeys || options.keys;\n }\n else if (Platform.IS_MAC) {\n keys = options.macKeys || options.keys;\n }\n else {\n keys = options.linuxKeys || options.keys;\n }\n return keys.map(normalizeKeystroke);\n }\n CommandRegistry.normalizeKeys = normalizeKeys;\n /**\n * Format keystrokes for display on the local system.\n *\n * If a list of keystrokes is provided, it will be displayed as\n * a comma-separated string\n *\n * @param keystroke The keystrokes to format\n * @returns The keystrokes representation\n */\n function formatKeystroke(keystroke) {\n return typeof keystroke === 'string'\n ? formatSingleKey(keystroke)\n : keystroke.map(formatSingleKey).join(', ');\n function formatSingleKey(key) {\n let mods = [];\n let separator = Platform.IS_MAC ? ' ' : '+';\n let parts = parseKeystroke(key);\n if (parts.ctrl) {\n mods.push('Ctrl');\n }\n if (parts.alt) {\n mods.push('Alt');\n }\n if (parts.shift) {\n mods.push('Shift');\n }\n if (Platform.IS_MAC && parts.cmd) {\n mods.push('Cmd');\n }\n mods.push(parts.key);\n return mods.map(Private.formatKey).join(separator);\n }\n }\n CommandRegistry.formatKeystroke = formatKeystroke;\n /**\n * Check if `'keydown'` event is caused by pressing a modifier key that should be ignored.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns `true` if modifier key was pressed, `false` otherwise.\n */\n function isModifierKeyPressed(event) {\n let layout = getKeyboardLayout();\n let key = layout.keyForKeydownEvent(event);\n return layout.isModifierKey(key);\n }\n CommandRegistry.isModifierKeyPressed = isModifierKeyPressed;\n /**\n * Create a normalized keystroke for a `'keydown'` event.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns A normalized keystroke, or an empty string if the event\n * does not represent a valid keystroke for the given layout.\n */\n function keystrokeForKeydownEvent(event) {\n let layout = getKeyboardLayout();\n let key = layout.keyForKeydownEvent(event);\n let mods = [];\n if (event.ctrlKey) {\n mods.push('Ctrl');\n }\n if (event.altKey) {\n mods.push('Alt');\n }\n if (event.shiftKey) {\n mods.push('Shift');\n }\n if (event.metaKey && Platform.IS_MAC) {\n mods.push('Cmd');\n }\n if (!layout.isModifierKey(key)) {\n mods.push(key);\n }\n // for purely modifier key strings\n return mods.join(' ');\n }\n CommandRegistry.keystrokeForKeydownEvent = keystrokeForKeydownEvent;\n})(CommandRegistry || (CommandRegistry = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The timeout in ms for triggering a key binding chord.\n */\n Private.CHORD_TIMEOUT = 1000;\n /**\n * The timeout in ms for stopping the hold on keybinding execution.\n */\n Private.KEYBINDING_HOLD_TIMEOUT = 1000;\n /**\n * The timeout in ms for triggering a modifer key binding.\n */\n Private.modifierkeyTimeOut = 500;\n /**\n * Create a normalized command from an options object.\n */\n function createCommand(options) {\n return {\n execute: options.execute,\n describedBy: asFunc(typeof options.describedBy === 'function'\n ? options.describedBy\n : { args: null, ...options.describedBy }, () => {\n return { args: null };\n }),\n label: asFunc(options.label, emptyStringFunc),\n mnemonic: asFunc(options.mnemonic, negativeOneFunc),\n icon: asFunc(options.icon, undefinedFunc),\n iconClass: asFunc(options.iconClass, emptyStringFunc),\n iconLabel: asFunc(options.iconLabel, emptyStringFunc),\n caption: asFunc(options.caption, emptyStringFunc),\n usage: asFunc(options.usage, emptyStringFunc),\n className: asFunc(options.className, emptyStringFunc),\n dataset: asFunc(options.dataset, emptyDatasetFunc),\n isEnabled: options.isEnabled || trueFunc,\n isToggled: options.isToggled || falseFunc,\n isToggleable: options.isToggleable || !!options.isToggled,\n isVisible: options.isVisible || trueFunc\n };\n }\n Private.createCommand = createCommand;\n /**\n * Create a key binding object from key binding options.\n */\n function createKeyBinding(options) {\n var _a;\n return {\n keys: CommandRegistry.normalizeKeys(options),\n selector: validateSelector(options),\n command: options.command,\n args: options.args || JSONExt.emptyObject,\n preventDefault: (_a = options.preventDefault) !== null && _a !== void 0 ? _a : true\n };\n }\n Private.createKeyBinding = createKeyBinding;\n /**\n * Find the key bindings which match a key sequence.\n *\n * This returns a match result which contains the best exact matching\n * binding, and a flag which indicates if there are partial matches.\n */\n function matchKeyBinding(bindings, keys, event) {\n // The current best exact match.\n let exact = null;\n // Partial matches.\n let partial = [];\n // The match distance for the exact match.\n let distance = Infinity;\n // The specificity for the exact match.\n let specificity = 0;\n // Iterate over the bindings and search for the best match.\n for (let i = 0, n = bindings.length; i < n; ++i) {\n // Lookup the current binding.\n let binding = bindings[i];\n // Check whether the key binding sequence is a match.\n let sqm = matchSequence(binding.keys, keys);\n // If there is no match, the binding is ignored.\n if (sqm === 0 /* SequenceMatch.None */) {\n continue;\n }\n // If it is a partial match and no other partial match has been\n // found, ensure the selector matches and set the partial flag.\n if (sqm === 2 /* SequenceMatch.Partial */) {\n if (targetDistance(binding.selector, event) !== -1) {\n partial.push(binding);\n }\n continue;\n }\n // Ignore the match if the selector doesn't match, or if the\n // matched node is farther away than the current best match.\n let td = targetDistance(binding.selector, event);\n if (td === -1 || td > distance) {\n continue;\n }\n // Get the specificity for the selector.\n let sp = Selector.calculateSpecificity(binding.selector);\n // Update the best match if this match is stronger.\n if (!exact || td < distance || sp >= specificity) {\n exact = binding;\n distance = td;\n specificity = sp;\n }\n }\n // Return the match result.\n return { exact, partial };\n }\n Private.matchKeyBinding = matchKeyBinding;\n /**\n * Replay a keyboard event.\n *\n * This synthetically dispatches a clone of the keyboard event.\n */\n function replayKeyEvent(event) {\n event.target.dispatchEvent(cloneKeyboardEvent(event));\n }\n Private.replayKeyEvent = replayKeyEvent;\n function formatKey(key) {\n if (Platform.IS_MAC) {\n return MAC_DISPLAY.hasOwnProperty(key) ? MAC_DISPLAY[key] : key;\n }\n else {\n return WIN_DISPLAY.hasOwnProperty(key) ? WIN_DISPLAY[key] : key;\n }\n }\n Private.formatKey = formatKey;\n const MAC_DISPLAY = {\n Backspace: '⌫',\n Tab: '⇥',\n Enter: '⏎',\n Shift: '⇧',\n Ctrl: '⌃',\n Alt: '⌥',\n Escape: '⎋',\n PageUp: '⇞',\n PageDown: '⇟',\n End: '↘',\n Home: '↖',\n ArrowLeft: '←',\n ArrowUp: '↑',\n ArrowRight: '→',\n ArrowDown: '↓',\n Delete: '⌦',\n Cmd: '⌘'\n };\n const WIN_DISPLAY = {\n Escape: 'Esc',\n PageUp: 'Page Up',\n PageDown: 'Page Down',\n ArrowLeft: 'Left',\n ArrowUp: 'Up',\n ArrowRight: 'Right',\n ArrowDown: 'Down',\n Delete: 'Del'\n };\n /**\n * A singleton empty string function.\n */\n const emptyStringFunc = () => '';\n /**\n * A singleton `-1` number function\n */\n const negativeOneFunc = () => -1;\n /**\n * A singleton true boolean function.\n */\n const trueFunc = () => true;\n /**\n * A singleton false boolean function.\n */\n const falseFunc = () => false;\n /**\n * A singleton empty dataset function.\n */\n const emptyDatasetFunc = () => ({});\n /**\n * A singleton undefined function\n */\n const undefinedFunc = () => undefined;\n /**\n * Cast a value or command func to a command func.\n */\n function asFunc(value, dfault) {\n if (value === undefined) {\n return dfault;\n }\n if (typeof value === 'function') {\n return value;\n }\n return () => value;\n }\n /**\n * Validate the selector for an options object.\n *\n * This returns the validated selector, or throws if the selector is\n * invalid or contains commas.\n */\n function validateSelector(options) {\n if (options.selector.indexOf(',') !== -1) {\n throw new Error(`Selector cannot contain commas: ${options.selector}`);\n }\n if (!Selector.isValid(options.selector)) {\n throw new Error(`Invalid selector: ${options.selector}`);\n }\n return options.selector;\n }\n /**\n * Test whether a key binding sequence matches a key sequence.\n *\n * Returns a `SequenceMatch` value indicating the type of match.\n */\n function matchSequence(bindKeys, userKeys) {\n if (bindKeys.length < userKeys.length) {\n return 0 /* SequenceMatch.None */;\n }\n for (let i = 0, n = userKeys.length; i < n; ++i) {\n if (bindKeys[i] !== userKeys[i]) {\n return 0 /* SequenceMatch.None */;\n }\n }\n if (bindKeys.length > userKeys.length) {\n return 2 /* SequenceMatch.Partial */;\n }\n return 1 /* SequenceMatch.Exact */;\n }\n /**\n * Find the distance from the target node to the first matching node.\n *\n * This traverses the event path from `target` to `currentTarget` and\n * computes the distance from `target` to the first node which matches\n * the CSS selector. If no match is found, `-1` is returned.\n */\n function targetDistance(selector, event) {\n let targ = event.target;\n let curr = event.currentTarget;\n for (let dist = 0; targ !== null; targ = targ.parentElement, ++dist) {\n if (targ.hasAttribute('data-lm-suppress-shortcuts')) {\n return -1;\n }\n if (Selector.matches(targ, selector)) {\n return dist;\n }\n if (targ === curr) {\n return -1;\n }\n }\n return -1;\n }\n /**\n * Clone a keyboard event.\n */\n function cloneKeyboardEvent(event) {\n // A custom event is required because Chrome nulls out the\n // `keyCode` field in user-generated `KeyboardEvent` types.\n let clone = document.createEvent('Event');\n let bubbles = event.bubbles || true;\n let cancelable = event.cancelable || true;\n clone.initEvent(event.type || 'keydown', bubbles, cancelable);\n clone.key = event.key || '';\n clone.keyCode = event.keyCode || 0;\n clone.which = event.keyCode || 0;\n clone.ctrlKey = event.ctrlKey || false;\n clone.altKey = event.altKey || false;\n clone.shiftKey = event.shiftKey || false;\n clone.metaKey = event.metaKey || false;\n clone.view = event.view || window;\n return clone;\n }\n})(Private || (Private = {}));\n\nexport { CommandRegistry };\n//# sourceMappingURL=index.es6.js.map\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@lumino/algorithm')) :\n typeof define === 'function' && define.amd ? define(['exports', '@lumino/algorithm'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.lumino_coreutils = {}, global.lumino_algorithm));\n})(this, (function (exports, algorithm) { 'use strict';\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for JSON-specific functions.\n */\n exports.JSONExt = void 0;\n (function (JSONExt) {\n /**\n * A shared frozen empty JSONObject\n */\n JSONExt.emptyObject = Object.freeze({});\n /**\n * A shared frozen empty JSONArray\n */\n JSONExt.emptyArray = Object.freeze([]);\n /**\n * Test whether a JSON value is a primitive.\n *\n * @param value - The JSON value of interest.\n *\n * @returns `true` if the value is a primitive,`false` otherwise.\n */\n function isPrimitive(value) {\n return (value === null ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string');\n }\n JSONExt.isPrimitive = isPrimitive;\n function isArray(value) {\n return Array.isArray(value);\n }\n JSONExt.isArray = isArray;\n function isObject(value) {\n return !isPrimitive(value) && !isArray(value);\n }\n JSONExt.isObject = isObject;\n /**\n * Compare two JSON values for deep equality.\n *\n * @param first - The first JSON value of interest.\n *\n * @param second - The second JSON value of interest.\n *\n * @returns `true` if the values are equivalent, `false` otherwise.\n */\n function deepEqual(first, second) {\n // Check referential and primitive equality first.\n if (first === second) {\n return true;\n }\n // If one is a primitive, the `===` check ruled out the other.\n if (isPrimitive(first) || isPrimitive(second)) {\n return false;\n }\n // Test whether they are arrays.\n let a1 = isArray(first);\n let a2 = isArray(second);\n // Bail if the types are different.\n if (a1 !== a2) {\n return false;\n }\n // If they are both arrays, compare them.\n if (a1 && a2) {\n return deepArrayEqual(first, second);\n }\n // At this point, they must both be objects.\n return deepObjectEqual(first, second);\n }\n JSONExt.deepEqual = deepEqual;\n /**\n * Create a deep copy of a JSON value.\n *\n * @param value - The JSON value to copy.\n *\n * @returns A deep copy of the given JSON value.\n */\n function deepCopy(value) {\n // Do nothing for primitive values.\n if (isPrimitive(value)) {\n return value;\n }\n // Deep copy an array.\n if (isArray(value)) {\n return deepArrayCopy(value);\n }\n // Deep copy an object.\n return deepObjectCopy(value);\n }\n JSONExt.deepCopy = deepCopy;\n /**\n * Compare two JSON arrays for deep equality.\n */\n function deepArrayEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Test the arrays for equal length.\n if (first.length !== second.length) {\n return false;\n }\n // Compare the values for equality.\n for (let i = 0, n = first.length; i < n; ++i) {\n if (!deepEqual(first[i], second[i])) {\n return false;\n }\n }\n // At this point, the arrays are equal.\n return true;\n }\n /**\n * Compare two JSON objects for deep equality.\n */\n function deepObjectEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Check for the first object's keys in the second object.\n for (let key in first) {\n if (first[key] !== undefined && !(key in second)) {\n return false;\n }\n }\n // Check for the second object's keys in the first object.\n for (let key in second) {\n if (second[key] !== undefined && !(key in first)) {\n return false;\n }\n }\n // Compare the values for equality.\n for (let key in first) {\n // Get the values.\n let firstValue = first[key];\n let secondValue = second[key];\n // If both are undefined, ignore the key.\n if (firstValue === undefined && secondValue === undefined) {\n continue;\n }\n // If only one value is undefined, the objects are not equal.\n if (firstValue === undefined || secondValue === undefined) {\n return false;\n }\n // Compare the values.\n if (!deepEqual(firstValue, secondValue)) {\n return false;\n }\n }\n // At this point, the objects are equal.\n return true;\n }\n /**\n * Create a deep copy of a JSON array.\n */\n function deepArrayCopy(value) {\n let result = new Array(value.length);\n for (let i = 0, n = value.length; i < n; ++i) {\n result[i] = deepCopy(value[i]);\n }\n return result;\n }\n /**\n * Create a deep copy of a JSON object.\n */\n function deepObjectCopy(value) {\n let result = {};\n for (let key in value) {\n // Ignore undefined values.\n let subvalue = value[key];\n if (subvalue === undefined) {\n continue;\n }\n result[key] = deepCopy(subvalue);\n }\n return result;\n }\n })(exports.JSONExt || (exports.JSONExt = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * An object which stores MIME data for general application use.\n *\n * #### Notes\n * This class does not attempt to enforce \"correctness\" of MIME types\n * and their associated data. Since this class is designed to transfer\n * arbitrary data and objects within the same application, it assumes\n * that the user provides correct and accurate data.\n */\n class MimeData {\n constructor() {\n this._types = [];\n this._values = [];\n }\n /**\n * Get an array of the MIME types contained within the dataset.\n *\n * @returns A new array of the MIME types, in order of insertion.\n */\n types() {\n return this._types.slice();\n }\n /**\n * Test whether the dataset has an entry for the given type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns `true` if the dataset contains a value for the given\n * MIME type, `false` otherwise.\n */\n hasData(mime) {\n return this._types.indexOf(mime) !== -1;\n }\n /**\n * Get the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns The value for the given MIME type, or `undefined` if\n * the dataset does not contain a value for the type.\n */\n getData(mime) {\n let i = this._types.indexOf(mime);\n return i !== -1 ? this._values[i] : undefined;\n }\n /**\n * Set the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @param data - The data value for the given MIME type.\n *\n * #### Notes\n * This will overwrite any previous entry for the MIME type.\n */\n setData(mime, data) {\n this.clearData(mime);\n this._types.push(mime);\n this._values.push(data);\n }\n /**\n * Remove the data entry for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * #### Notes\n * This is a no-op if there is no entry for the given MIME type.\n */\n clearData(mime) {\n let i = this._types.indexOf(mime);\n if (i !== -1) {\n this._types.splice(i, 1);\n this._values.splice(i, 1);\n }\n }\n /**\n * Remove all data entries from the dataset.\n */\n clear() {\n this._types.length = 0;\n this._values.length = 0;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /**\n * Plugin registry.\n */\n class PluginRegistry {\n constructor(options = {}) {\n this._application = null;\n this._validatePlugin = () => true;\n this._plugins = new Map();\n this._services = new Map();\n if (options.validatePlugin) {\n console.info('Plugins may be rejected by the custom validation plugin method.');\n this._validatePlugin = options.validatePlugin;\n }\n }\n /**\n * The application object.\n *\n * It will be provided as first argument to the\n * plugins activation and deactivation functions.\n *\n * It can only be set once.\n *\n * By default, it is `null`.\n */\n get application() {\n return this._application;\n }\n set application(v) {\n if (this._application !== null) {\n throw Error('PluginRegistry.application is already set. It cannot be overridden.');\n }\n this._application = v;\n }\n /**\n * The list of all the deferred plugins.\n */\n get deferredPlugins() {\n return Array.from(this._plugins)\n .filter(([id, plugin]) => plugin.autoStart === 'defer')\n .map(([id, plugin]) => id);\n }\n /**\n * Get a plugin description.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns The plugin description.\n */\n getPluginDescription(id) {\n var _a, _b;\n return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.description) !== null && _b !== void 0 ? _b : '';\n }\n /**\n * Test whether a plugin is registered with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns `true` if the plugin is registered, `false` otherwise.\n */\n hasPlugin(id) {\n return this._plugins.has(id);\n }\n /**\n * Test whether a plugin is activated with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns `true` if the plugin is activated, `false` otherwise.\n */\n isPluginActivated(id) {\n var _a, _b;\n return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.activated) !== null && _b !== void 0 ? _b : false;\n }\n /**\n * List the IDs of the plugins registered with the application.\n *\n * @returns A new array of the registered plugin IDs.\n */\n listPlugins() {\n return Array.from(this._plugins.keys());\n }\n /**\n * Register a plugin with the application.\n *\n * @param plugin - The plugin to register.\n *\n * #### Notes\n * An error will be thrown if a plugin with the same ID is already\n * registered, or if the plugin has a circular dependency.\n *\n * If the plugin provides a service which has already been provided\n * by another plugin, the new service will override the old service.\n */\n registerPlugin(plugin) {\n // Throw an error if the plugin ID is already registered.\n if (this._plugins.has(plugin.id)) {\n throw new TypeError(`Plugin '${plugin.id}' is already registered.`);\n }\n if (!this._validatePlugin(plugin)) {\n throw new Error(`Plugin '${plugin.id}' is not valid.`);\n }\n // Create the normalized plugin data.\n const data = Private.createPluginData(plugin);\n // Ensure the plugin does not cause a cyclic dependency.\n Private.ensureNoCycle(data, this._plugins, this._services);\n // Add the service token to the service map.\n if (data.provides) {\n this._services.set(data.provides, data.id);\n }\n // Add the plugin to the plugin map.\n this._plugins.set(data.id, data);\n }\n /**\n * Register multiple plugins with the application.\n *\n * @param plugins - The plugins to register.\n *\n * #### Notes\n * This calls `registerPlugin()` for each of the given plugins.\n */\n registerPlugins(plugins) {\n for (const plugin of plugins) {\n this.registerPlugin(plugin);\n }\n }\n /**\n * Deregister a plugin with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @param force - Whether to deregister the plugin even if it is active.\n */\n deregisterPlugin(id, force) {\n const plugin = this._plugins.get(id);\n if (!plugin) {\n return;\n }\n if (plugin.activated && !force) {\n throw new Error(`Plugin '${id}' is still active.`);\n }\n this._plugins.delete(id);\n }\n /**\n * Activate the plugin with the given ID.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns A promise which resolves when the plugin is activated\n * or rejects with an error if it cannot be activated.\n */\n async activatePlugin(id) {\n // Reject the promise if the plugin is not registered.\n const plugin = this._plugins.get(id);\n if (!plugin) {\n throw new ReferenceError(`Plugin '${id}' is not registered.`);\n }\n // Resolve immediately if the plugin is already activated.\n if (plugin.activated) {\n return;\n }\n // Return the pending resolver promise if it exists.\n if (plugin.promise) {\n return plugin.promise;\n }\n // Resolve the required services for the plugin.\n const required = plugin.requires.map(t => this.resolveRequiredService(t));\n // Resolve the optional services for the plugin.\n const optional = plugin.optional.map(t => this.resolveOptionalService(t));\n // Setup the resolver promise for the plugin.\n plugin.promise = Promise.all([...required, ...optional])\n .then(services => plugin.activate.apply(undefined, [this.application, ...services]))\n .then(service => {\n plugin.service = service;\n plugin.activated = true;\n plugin.promise = null;\n })\n .catch(error => {\n plugin.promise = null;\n throw error;\n });\n // Return the pending resolver promise.\n return plugin.promise;\n }\n /**\n * Activate all the deferred plugins.\n *\n * @returns A promise which will resolve when each plugin is activated\n * or rejects with an error if one cannot be activated.\n */\n async activatePlugins(kind, options = {}) {\n switch (kind) {\n case 'defer': {\n const promises = this.deferredPlugins\n .filter(pluginId => this._plugins.get(pluginId).autoStart)\n .map(pluginId => {\n return this.activatePlugin(pluginId);\n });\n await Promise.all(promises);\n break;\n }\n case 'startUp': {\n // Collect the ids of the startup plugins.\n const startups = Private.collectStartupPlugins(this._plugins, options);\n // Generate the activation promises.\n const promises = startups.map(async (id) => {\n try {\n return await this.activatePlugin(id);\n }\n catch (error) {\n console.error(`Plugin '${id}' failed to activate.`, error);\n }\n });\n await Promise.all(promises);\n break;\n }\n }\n }\n /**\n * Deactivate the plugin and its downstream dependents if and only if the\n * plugin and its dependents all support `deactivate`.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns A list of IDs of downstream plugins deactivated with this one.\n */\n async deactivatePlugin(id) {\n // Reject the promise if the plugin is not registered.\n const plugin = this._plugins.get(id);\n if (!plugin) {\n throw new ReferenceError(`Plugin '${id}' is not registered.`);\n }\n // Bail early if the plugin is not activated.\n if (!plugin.activated) {\n return [];\n }\n // Check that this plugin can deactivate.\n if (!plugin.deactivate) {\n throw new TypeError(`Plugin '${id}'#deactivate() method missing`);\n }\n // Find the optimal deactivation order for plugins downstream of this one.\n const manifest = Private.findDependents(id, this._plugins, this._services);\n const downstream = manifest.map(id => this._plugins.get(id));\n // Check that all downstream plugins can deactivate.\n for (const plugin of downstream) {\n if (!plugin.deactivate) {\n throw new TypeError(`Plugin ${plugin.id}#deactivate() method missing (depends on ${id})`);\n }\n }\n // Deactivate all downstream plugins.\n for (const plugin of downstream) {\n const services = [...plugin.requires, ...plugin.optional].map(service => {\n const id = this._services.get(service);\n return id ? this._plugins.get(id).service : null;\n });\n // Await deactivation so the next plugins only receive active services.\n await plugin.deactivate(this.application, ...services);\n plugin.service = null;\n plugin.activated = false;\n }\n // Remove plugin ID and return manifest of deactivated plugins.\n manifest.pop();\n return manifest;\n }\n /**\n * Resolve a required service of a given type.\n *\n * @param token - The token for the service type of interest.\n *\n * @returns A promise which resolves to an instance of the requested\n * service, or rejects with an error if it cannot be resolved.\n *\n * #### Notes\n * Services are singletons. The same instance will be returned each\n * time a given service token is resolved.\n *\n * If the plugin which provides the service has not been activated,\n * resolving the service will automatically activate the plugin.\n *\n * User code will not typically call this method directly. Instead,\n * the required services for the user's plugins will be resolved\n * automatically when the plugin is activated.\n */\n async resolveRequiredService(token) {\n // Reject the promise if there is no provider for the type.\n const id = this._services.get(token);\n if (!id) {\n throw new TypeError(`No provider for: ${token.name}.`);\n }\n // Activate the plugin if necessary.\n const plugin = this._plugins.get(id);\n if (!plugin.activated) {\n await this.activatePlugin(id);\n }\n return plugin.service;\n }\n /**\n * Resolve an optional service of a given type.\n *\n * @param token - The token for the service type of interest.\n *\n * @returns A promise which resolves to an instance of the requested\n * service, or `null` if it cannot be resolved.\n *\n * #### Notes\n * Services are singletons. The same instance will be returned each\n * time a given service token is resolved.\n *\n * If the plugin which provides the service has not been activated,\n * resolving the service will automatically activate the plugin.\n *\n * User code will not typically call this method directly. Instead,\n * the optional services for the user's plugins will be resolved\n * automatically when the plugin is activated.\n */\n async resolveOptionalService(token) {\n // Resolve with `null` if there is no provider for the type.\n const id = this._services.get(token);\n if (!id) {\n return null;\n }\n // Activate the plugin if necessary.\n const plugin = this._plugins.get(id);\n if (!plugin.activated) {\n try {\n await this.activatePlugin(id);\n }\n catch (reason) {\n console.error(reason);\n return null;\n }\n }\n return plugin.service;\n }\n }\n /**\n * The namespace for the module implementation details.\n */\n var Private;\n (function (Private) {\n class PluginData {\n constructor(plugin) {\n var _a, _b, _c, _d;\n this._activated = false;\n this._promise = null;\n this._service = null;\n this.id = plugin.id;\n this.description = (_a = plugin.description) !== null && _a !== void 0 ? _a : '';\n this.activate = plugin.activate;\n this.deactivate = (_b = plugin.deactivate) !== null && _b !== void 0 ? _b : null;\n this.provides = (_c = plugin.provides) !== null && _c !== void 0 ? _c : null;\n this.autoStart = (_d = plugin.autoStart) !== null && _d !== void 0 ? _d : false;\n this.requires = plugin.requires ? plugin.requires.slice() : [];\n this.optional = plugin.optional ? plugin.optional.slice() : [];\n }\n /**\n * Whether the plugin has been activated.\n */\n get activated() {\n return this._activated;\n }\n set activated(a) {\n this._activated = a;\n }\n /**\n * The resolved service for the plugin, or `null`.\n */\n get service() {\n return this._service;\n }\n set service(s) {\n this._service = s;\n }\n /**\n * The pending resolver promise, or `null`.\n */\n get promise() {\n return this._promise;\n }\n set promise(p) {\n this._promise = p;\n }\n }\n /**\n * Create a normalized plugin data object for the given plugin.\n */\n function createPluginData(plugin) {\n return new PluginData(plugin);\n }\n Private.createPluginData = createPluginData;\n /**\n * Ensure no cycle is present in the plugin resolution graph.\n *\n * If a cycle is detected, an error will be thrown.\n */\n function ensureNoCycle(plugin, plugins, services) {\n const dependencies = [...plugin.requires, ...plugin.optional];\n const visit = (token) => {\n if (token === plugin.provides) {\n return true;\n }\n const id = services.get(token);\n if (!id) {\n return false;\n }\n const visited = plugins.get(id);\n const dependencies = [...visited.requires, ...visited.optional];\n if (dependencies.length === 0) {\n return false;\n }\n trace.push(id);\n if (dependencies.some(visit)) {\n return true;\n }\n trace.pop();\n return false;\n };\n // Bail early if there cannot be a cycle.\n if (!plugin.provides || dependencies.length === 0) {\n return;\n }\n // Setup a stack to trace service resolution.\n const trace = [plugin.id];\n // Throw an exception if a cycle is present.\n if (dependencies.some(visit)) {\n throw new ReferenceError(`Cycle detected: ${trace.join(' -> ')}.`);\n }\n }\n Private.ensureNoCycle = ensureNoCycle;\n /**\n * Find dependents in deactivation order.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @param plugins - The map containing all plugins.\n *\n * @param services - The map containing all services.\n *\n * @returns A list of dependent plugin IDs in order of deactivation\n *\n * #### Notes\n * The final item of the returned list is always the plugin of interest.\n */\n function findDependents(id, plugins, services) {\n const edges = new Array();\n const add = (id) => {\n const plugin = plugins.get(id);\n // FIXME In the case of missing optional dependencies, we may consider\n // deactivating and reactivating the plugin without the missing service.\n const dependencies = [...plugin.requires, ...plugin.optional];\n edges.push(...dependencies.reduce((acc, dep) => {\n const service = services.get(dep);\n if (service) {\n // An edge is oriented from dependent to provider.\n acc.push([id, service]);\n }\n return acc;\n }, []));\n };\n for (const id of plugins.keys()) {\n add(id);\n }\n // Filter edges\n // - Get all packages that dependent on the package to be deactivated\n const newEdges = edges.filter(edge => edge[1] === id);\n let oldSize = 0;\n while (newEdges.length > oldSize) {\n const previousSize = newEdges.length;\n // Get all packages that dependent on packages that will be deactivated\n const packagesOfInterest = new Set(newEdges.map(edge => edge[0]));\n for (const poi of packagesOfInterest) {\n edges\n .filter(edge => edge[1] === poi)\n .forEach(edge => {\n // We check it is not already included to deal with circular dependencies\n if (!newEdges.includes(edge)) {\n newEdges.push(edge);\n }\n });\n }\n oldSize = previousSize;\n }\n const sorted = algorithm.topologicSort(newEdges);\n const index = sorted.findIndex(candidate => candidate === id);\n if (index === -1) {\n return [id];\n }\n return sorted.slice(0, index + 1);\n }\n Private.findDependents = findDependents;\n /**\n * Collect the IDs of the plugins to activate on startup.\n */\n function collectStartupPlugins(plugins, options) {\n // Create a set to hold the plugin IDs.\n const collection = new Set();\n // Collect the auto-start (non deferred) plugins.\n for (const id of plugins.keys()) {\n if (plugins.get(id).autoStart === true) {\n collection.add(id);\n }\n }\n // Add the startup plugins.\n if (options.startPlugins) {\n for (const id of options.startPlugins) {\n collection.add(id);\n }\n }\n // Remove the ignored plugins.\n if (options.ignorePlugins) {\n for (const id of options.ignorePlugins) {\n collection.delete(id);\n }\n }\n // Return the collected startup plugins.\n return Array.from(collection);\n }\n Private.collectStartupPlugins = collectStartupPlugins;\n })(Private || (Private = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A class which wraps a promise into a delegate object.\n *\n * #### Notes\n * This class is useful when the logic to resolve or reject a promise\n * cannot be defined at the point where the promise is created.\n */\n class PromiseDelegate {\n /**\n * Construct a new promise delegate.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n /**\n * Resolve the wrapped promise with the given value.\n *\n * @param value - The value to use for resolving the promise.\n */\n resolve(value) {\n let resolve = this._resolve;\n resolve(value);\n }\n /**\n * Reject the wrapped promise with the given value.\n *\n * @reason - The reason for rejecting the promise.\n */\n reject(reason) {\n let reject = this._reject;\n reject(reason);\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A runtime object which captures compile-time type information.\n *\n * #### Notes\n * A token captures the compile-time type of an interface or class in\n * an object which can be used at runtime in a type-safe fashion.\n */\n class Token {\n /**\n * Construct a new token.\n *\n * @param name - A human readable name for the token.\n * @param description - Token purpose description for documentation.\n */\n constructor(name, description) {\n this.name = name;\n this.description = description !== null && description !== void 0 ? description : '';\n this._tokenStructuralPropertyT = null;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n // Fallback\n function fallbackRandomValues(buffer) {\n let value = 0;\n for (let i = 0, n = buffer.length; i < n; ++i) {\n if (i % 4 === 0) {\n value = (Math.random() * 0xffffffff) >>> 0;\n }\n buffer[i] = value & 0xff;\n value >>>= 8;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for random number related functionality.\n */\n exports.Random = void 0;\n (function (Random) {\n /**\n * A function which generates random bytes.\n *\n * @param buffer - The `Uint8Array` to fill with random bytes.\n *\n * #### Notes\n * A cryptographically strong random number generator will be used if\n * available. Otherwise, `Math.random` will be used as a fallback for\n * randomness.\n *\n * The following RNGs are supported, listed in order of precedence:\n * - `window.crypto.getRandomValues`\n * - `window.msCrypto.getRandomValues`\n * - `require('crypto').randomFillSync\n * - `require('crypto').randomBytes\n * - `Math.random`\n */\n Random.getRandomValues = (() => {\n // Look up the crypto module if available.\n const crypto = (typeof window !== 'undefined' && (window.crypto || window.msCrypto)) ||\n null;\n // Modern browsers and IE 11\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return function getRandomValues(buffer) {\n return crypto.getRandomValues(buffer);\n };\n }\n // Fallback\n return fallbackRandomValues;\n })();\n })(exports.Random || (exports.Random = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A function which creates a function that generates UUID v4 identifiers.\n *\n * @returns A new function that creates a UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n function uuid4Factory(getRandomValues) {\n // Create a 16 byte array to hold the random values.\n const bytes = new Uint8Array(16);\n // Create a look up table from bytes to hex strings.\n const lut = new Array(256);\n // Pad the single character hex digits with a leading zero.\n for (let i = 0; i < 16; ++i) {\n lut[i] = '0' + i.toString(16);\n }\n // Populate the rest of the hex digits.\n for (let i = 16; i < 256; ++i) {\n lut[i] = i.toString(16);\n }\n // Return a function which generates the UUID.\n return function uuid4() {\n // Get a new batch of random values.\n getRandomValues(bytes);\n // Set the UUID version number to 4.\n bytes[6] = 0x40 | (bytes[6] & 0x0f);\n // Set the clock sequence bit to the RFC spec.\n bytes[8] = 0x80 | (bytes[8] & 0x3f);\n // Assemble the UUID string.\n return (lut[bytes[0]] +\n lut[bytes[1]] +\n lut[bytes[2]] +\n lut[bytes[3]] +\n '-' +\n lut[bytes[4]] +\n lut[bytes[5]] +\n '-' +\n lut[bytes[6]] +\n lut[bytes[7]] +\n '-' +\n lut[bytes[8]] +\n lut[bytes[9]] +\n '-' +\n lut[bytes[10]] +\n lut[bytes[11]] +\n lut[bytes[12]] +\n lut[bytes[13]] +\n lut[bytes[14]] +\n lut[bytes[15]]);\n };\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for UUID related functionality.\n */\n exports.UUID = void 0;\n (function (UUID) {\n /**\n * A function which generates UUID v4 identifiers.\n *\n * @returns A new UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n UUID.uuid4 = uuid4Factory(exports.Random.getRandomValues);\n })(exports.UUID || (exports.UUID = {}));\n\n exports.MimeData = MimeData;\n exports.PluginRegistry = PluginRegistry;\n exports.PromiseDelegate = PromiseDelegate;\n exports.Token = Token;\n\n}));\n//# sourceMappingURL=index.js.map\n","import { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module disposable\n */\n/**\n * A disposable object which delegates to a callback function.\n */\nclass DisposableDelegate {\n /**\n * Construct a new disposable delegate.\n *\n * @param fn - The callback function to invoke on dispose.\n */\n constructor(fn) {\n this._fn = fn;\n }\n /**\n * Test whether the delegate has been disposed.\n */\n get isDisposed() {\n return !this._fn;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (!this._fn) {\n return;\n }\n let fn = this._fn;\n this._fn = null;\n fn();\n }\n}\n/**\n * An observable disposable object which delegates to a callback function.\n */\nclass ObservableDisposableDelegate extends DisposableDelegate {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the delegate is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * An object which manages a collection of disposable items.\n */\nclass DisposableSet {\n constructor() {\n this._isDisposed = false;\n this._items = new Set();\n }\n /**\n * Test whether the set has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n this._items.forEach(item => {\n item.dispose();\n });\n this._items.clear();\n }\n /**\n * Test whether the set contains a specific item.\n *\n * @param item - The item of interest.\n *\n * @returns `true` if the set contains the item, `false` otherwise.\n */\n contains(item) {\n return this._items.has(item);\n }\n /**\n * Add a disposable item to the set.\n *\n * @param item - The item to add to the set.\n *\n * #### Notes\n * If the item is already contained in the set, this is a no-op.\n */\n add(item) {\n this._items.add(item);\n }\n /**\n * Remove a disposable item from the set.\n *\n * @param item - The item to remove from the set.\n *\n * #### Notes\n * If the item is not contained in the set, this is a no-op.\n */\n remove(item) {\n this._items.delete(item);\n }\n /**\n * Remove all items from the set.\n */\n clear() {\n this._items.clear();\n }\n}\n/**\n * The namespace for the `DisposableSet` class statics.\n */\n(function (DisposableSet) {\n /**\n * Create a disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new DisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n DisposableSet.from = from;\n})(DisposableSet || (DisposableSet = {}));\n/**\n * An observable object which manages a collection of disposable items.\n */\nclass ObservableDisposableSet extends DisposableSet {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the set is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * The namespace for the `ObservableDisposableSet` class statics.\n */\n(function (ObservableDisposableSet) {\n /**\n * Create an observable disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new ObservableDisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n ObservableDisposableSet.from = from;\n})(ObservableDisposableSet || (ObservableDisposableSet = {}));\n\nexport { DisposableDelegate, DisposableSet, ObservableDisposableDelegate, ObservableDisposableSet };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2019, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for clipboard related functionality.\n */\nvar ClipboardExt;\n(function (ClipboardExt) {\n /**\n * Copy text to the system clipboard.\n *\n * @param text - The text to copy to the clipboard.\n */\n function copyText(text) {\n // Fetch the document body.\n const body = document.body;\n // Set up the clipboard event listener.\n const handler = (event) => {\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Set the clipboard data.\n event.clipboardData.setData('text', text);\n // Remove the event listener.\n body.removeEventListener('copy', handler, true);\n };\n // Add the event listener.\n body.addEventListener('copy', handler, true);\n // Trigger the event.\n document.execCommand('copy');\n }\n ClipboardExt.copyText = copyText;\n})(ClipboardExt || (ClipboardExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for element related utilities.\n */\nvar ElementExt;\n(function (ElementExt) {\n /**\n * Compute the box sizing for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The box sizing data for the specified element.\n */\n function boxSizing(element) {\n let style = window.getComputedStyle(element);\n let bt = parseFloat(style.borderTopWidth) || 0;\n let bl = parseFloat(style.borderLeftWidth) || 0;\n let br = parseFloat(style.borderRightWidth) || 0;\n let bb = parseFloat(style.borderBottomWidth) || 0;\n let pt = parseFloat(style.paddingTop) || 0;\n let pl = parseFloat(style.paddingLeft) || 0;\n let pr = parseFloat(style.paddingRight) || 0;\n let pb = parseFloat(style.paddingBottom) || 0;\n let hs = bl + pl + pr + br;\n let vs = bt + pt + pb + bb;\n return {\n borderTop: bt,\n borderLeft: bl,\n borderRight: br,\n borderBottom: bb,\n paddingTop: pt,\n paddingLeft: pl,\n paddingRight: pr,\n paddingBottom: pb,\n horizontalSum: hs,\n verticalSum: vs\n };\n }\n ElementExt.boxSizing = boxSizing;\n /**\n * Compute the size limits for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The size limit data for the specified element.\n */\n function sizeLimits(element) {\n let style = window.getComputedStyle(element);\n let minWidth = parseFloat(style.minWidth) || 0;\n let minHeight = parseFloat(style.minHeight) || 0;\n let maxWidth = parseFloat(style.maxWidth) || Infinity;\n let maxHeight = parseFloat(style.maxHeight) || Infinity;\n maxWidth = Math.max(minWidth, maxWidth);\n maxHeight = Math.max(minHeight, maxHeight);\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n ElementExt.sizeLimits = sizeLimits;\n /**\n * Test whether a client position lies within an element.\n *\n * @param element - The DOM element of interest.\n *\n * @param clientX - The client X coordinate of interest.\n *\n * @param clientY - The client Y coordinate of interest.\n *\n * @returns Whether the point is within the given element.\n */\n function hitTest(element, clientX, clientY) {\n let rect = element.getBoundingClientRect();\n return (clientX >= rect.left &&\n clientX < rect.right &&\n clientY >= rect.top &&\n clientY < rect.bottom);\n }\n ElementExt.hitTest = hitTest;\n /**\n * Vertically scroll an element into view if needed.\n *\n * @param area - The scroll area element.\n *\n * @param element - The element of interest.\n *\n * #### Notes\n * This follows the \"nearest\" behavior of the native `scrollIntoView`\n * method, which is not supported by all browsers.\n * https://drafts.csswg.org/cssom-view/#element-scrolling-members\n *\n * If the element fully covers the visible area or is fully contained\n * within the visible area, no scrolling will take place. Otherwise,\n * the nearest edges of the area and element are aligned.\n */\n function scrollIntoViewIfNeeded(area, element) {\n let ar = area.getBoundingClientRect();\n let er = element.getBoundingClientRect();\n if (er.top <= ar.top && er.bottom >= ar.bottom) {\n return;\n }\n if (er.top < ar.top && er.height <= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.bottom > ar.bottom && er.height >= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.top < ar.top && er.height > ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n if (er.bottom > ar.bottom && er.height < ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n }\n ElementExt.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;\n})(ElementExt || (ElementExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for platform related utilities.\n */\nvar Platform;\n(function (Platform) {\n /**\n * A flag indicating whether the platform is Mac.\n */\n Platform.IS_MAC = !!navigator.platform.match(/Mac/i);\n /**\n * A flag indicating whether the platform is Windows.\n */\n Platform.IS_WIN = !!navigator.platform.match(/Win/i);\n /**\n * A flag indicating whether the browser is IE.\n */\n Platform.IS_IE = /Trident/.test(navigator.userAgent);\n /**\n * A flag indicating whether the browser is Edge.\n */\n Platform.IS_EDGE = /Edge/.test(navigator.userAgent);\n /**\n * Test whether the `accel` key is pressed.\n *\n * @param event - The keyboard or mouse event of interest.\n *\n * @returns Whether the `accel` key is pressed.\n *\n * #### Notes\n * On Mac the `accel` key is the command key. On all other\n * platforms the `accel` key is the control key.\n */\n function accelKey(event) {\n return Platform.IS_MAC ? event.metaKey : event.ctrlKey;\n }\n Platform.accelKey = accelKey;\n})(Platform || (Platform = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for selector related utilities.\n */\nvar Selector;\n(function (Selector) {\n /**\n * Calculate the specificity of a single CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns The specificity of the selector.\n *\n * #### Undefined Behavior\n * The selector is invalid.\n *\n * #### Notes\n * This is based on https://www.w3.org/TR/css3-selectors/#specificity\n *\n * A larger number represents a more specific selector.\n *\n * The smallest possible specificity is `0`.\n *\n * The result is represented as a hex number `0x` where\n * each component is the count of the respective selector clause.\n *\n * If the selector contains commas, only the first clause is used.\n *\n * The computed result is cached, so subsequent calculations for the\n * same selector are extremely fast.\n */\n function calculateSpecificity(selector) {\n if (selector in Private.specificityCache) {\n return Private.specificityCache[selector];\n }\n let result = Private.calculateSingle(selector);\n return (Private.specificityCache[selector] = result);\n }\n Selector.calculateSpecificity = calculateSpecificity;\n /**\n * Test whether a selector is a valid CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns `true` if the selector is valid, `false` otherwise.\n *\n * #### Notes\n * The computed result is cached, so subsequent tests for the same\n * selector are extremely fast.\n */\n function isValid(selector) {\n if (selector in Private.validityCache) {\n return Private.validityCache[selector];\n }\n let result = true;\n try {\n Private.testElem.querySelector(selector);\n }\n catch (err) {\n result = false;\n }\n return (Private.validityCache[selector] = result);\n }\n Selector.isValid = isValid;\n /**\n * Test whether an element matches a CSS selector.\n *\n * @param element - The element of interest.\n *\n * @param selector - The valid CSS selector of interest.\n *\n * @returns `true` if the element is a match, `false` otherwise.\n *\n * #### Notes\n * This function uses the builtin browser capabilities when possible,\n * falling back onto a document query otherwise.\n */\n function matches(element, selector) {\n return Private.protoMatchFunc.call(element, selector);\n }\n Selector.matches = matches;\n})(Selector || (Selector = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A cache of computed selector specificity values.\n */\n Private.specificityCache = Object.create(null);\n /**\n * A cache of computed selector validity.\n */\n Private.validityCache = Object.create(null);\n /**\n * An empty element for testing selector validity.\n */\n Private.testElem = document.createElement('div');\n /**\n * A cross-browser CSS selector matching prototype function.\n */\n Private.protoMatchFunc = (() => {\n let proto = Element.prototype;\n return (proto.matches ||\n proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector ||\n function (selector) {\n let elem = this;\n let matches = elem.ownerDocument\n ? elem.ownerDocument.querySelectorAll(selector)\n : [];\n return Array.prototype.indexOf.call(matches, elem) !== -1;\n });\n })();\n /**\n * Calculate the specificity of a single selector.\n *\n * The behavior is undefined if the selector is invalid.\n */\n function calculateSingle(selector) {\n // Ignore anything after the first comma.\n selector = selector.split(',', 1)[0];\n // Setup the aggregate counters.\n let a = 0;\n let b = 0;\n let c = 0;\n // Apply a regex to the front of the selector. If it succeeds, that\n // portion of the selector is removed. Returns a success/fail flag.\n function match(re) {\n let match = selector.match(re);\n if (match === null) {\n return false;\n }\n selector = selector.slice(match[0].length);\n return true;\n }\n // Replace the negation pseudo-class (which is ignored),\n // but keep its inner content (which is not ignored).\n selector = selector.replace(NEGATION_RE, ' $1 ');\n // Continue matching until the selector is consumed.\n while (selector.length > 0) {\n // Match an ID selector.\n if (match(ID_RE)) {\n a++;\n continue;\n }\n // Match a class selector.\n if (match(CLASS_RE)) {\n b++;\n continue;\n }\n // Match an attribute selector.\n if (match(ATTR_RE)) {\n b++;\n continue;\n }\n // Match a pseudo-element selector. This is done before matching\n // a pseudo-class since this regex overlaps with that regex.\n if (match(PSEUDO_ELEM_RE)) {\n c++;\n continue;\n }\n // Match a pseudo-class selector.\n if (match(PSEDUO_CLASS_RE)) {\n b++;\n continue;\n }\n // Match a plain type selector.\n if (match(TYPE_RE)) {\n c++;\n continue;\n }\n // Finally, match any ignored characters.\n if (match(IGNORE_RE)) {\n continue;\n }\n // At this point, the selector is assumed to be invalid.\n return 0;\n }\n // Clamp each component to a reasonable base.\n a = Math.min(a, 0xff);\n b = Math.min(b, 0xff);\n c = Math.min(c, 0xff);\n // Combine the components into a single result.\n return (a << 16) | (b << 8) | c;\n }\n Private.calculateSingle = calculateSingle;\n /**\n * A regex which matches an ID selector at string start.\n */\n const ID_RE = /^#[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a class selector at string start.\n */\n const CLASS_RE = /^\\.[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches an attribute selector at string start.\n */\n const ATTR_RE = /^\\[[^\\]]+\\]/;\n /**\n * A regex which matches a type selector at string start.\n */\n const TYPE_RE = /^[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a pseudo-element selector at string start.\n */\n const PSEUDO_ELEM_RE = /^(::[^\\s\\+>~#\\.\\[:]+|:first-line|:first-letter|:before|:after)/;\n /**\n * A regex which matches a pseudo-class selector at string start.\n */\n const PSEDUO_CLASS_RE = /^:[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches ignored characters at string start.\n */\n const IGNORE_RE = /^[\\s\\+>~\\*]+/;\n /**\n * A regex which matches the negation pseudo-class globally.\n */\n const NEGATION_RE = /:not\\(([^\\)]+)\\)/g;\n})(Private || (Private = {}));\n\nexport { ClipboardExt, ElementExt, Platform, Selector };\n//# sourceMappingURL=index.es6.js.map\n","import { DisposableDelegate } from '@lumino/disposable';\n\n/**\n * An object which manages a drag-drop operation.\n *\n * A drag object dispatches four different events to drop targets:\n *\n * - `'lm-dragenter'` - Dispatched when the mouse enters the target\n * element. This event must be canceled in order to receive any\n * of the other events.\n *\n * - `'lm-dragover'` - Dispatched when the mouse moves over the drop\n * target. It must cancel the event and set the `dropAction` to one\n * of the supported actions in order to receive drop events.\n *\n * - `'lm-dragleave'` - Dispatched when the mouse leaves the target\n * element. This includes moving the mouse into child elements.\n *\n * - `'lm-drop'`- Dispatched when the mouse is released over the target\n * element when the target indicates an appropriate drop action. If\n * the event is canceled, the indicated drop action is returned to\n * the initiator through the resolved promise.\n *\n * A drag operation can be terminated at any time by pressing `Escape`\n * or by disposing the drag object.\n *\n * A drag object has the ability to automatically scroll a scrollable\n * element when the mouse is hovered near one of its edges. To enable\n * this, add the `data-lm-dragscroll` attribute to any element which\n * the drag object should consider for scrolling.\n *\n * #### Notes\n * This class is designed to be used when dragging and dropping custom\n * data *within* a single application. It is *not* a replacement for\n * the native drag-drop API. Instead, it provides an API which allows\n * drag operations to be initiated programmatically and enables the\n * transfer of arbitrary non-string objects; features which are not\n * possible with the native drag-drop API.\n */\nclass Drag {\n /**\n * Construct a new drag object.\n *\n * @param options - The options for initializing the drag.\n */\n constructor(options) {\n /**\n * The scroll loop handler function.\n */\n this._onScrollFrame = () => {\n // Bail early if there is no scroll target.\n if (!this._scrollTarget) {\n return;\n }\n // Unpack the scroll target.\n let { element, edge, distance } = this._scrollTarget;\n // Calculate the scroll delta using nonlinear acceleration.\n let d = Private.SCROLL_EDGE_SIZE - distance;\n let f = Math.pow(d / Private.SCROLL_EDGE_SIZE, 2);\n let s = Math.max(1, Math.round(f * Private.SCROLL_EDGE_SIZE));\n // Scroll the element in the specified direction.\n switch (edge) {\n case 'top':\n element.scrollTop -= s;\n break;\n case 'left':\n element.scrollLeft -= s;\n break;\n case 'right':\n element.scrollLeft += s;\n break;\n case 'bottom':\n element.scrollTop += s;\n break;\n }\n // Request the next cycle of the scroll loop.\n requestAnimationFrame(this._onScrollFrame);\n };\n this._disposed = false;\n this._dropAction = 'none';\n this._override = null;\n this._currentTarget = null;\n this._currentElement = null;\n this._promise = null;\n this._scrollTarget = null;\n this._resolve = null;\n this.document = options.document || document;\n this.mimeData = options.mimeData;\n this.dragImage = options.dragImage || null;\n this.proposedAction = options.proposedAction || 'copy';\n this.supportedActions = options.supportedActions || 'all';\n this.source = options.source || null;\n }\n /**\n * Dispose of the resources held by the drag object.\n *\n * #### Notes\n * This will cancel the drag operation if it is active.\n */\n dispose() {\n // Do nothing if the drag object is already disposed.\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n // If there is a current target, dispatch a drag leave event.\n if (this._currentTarget) {\n let event = new PointerEvent('pointerup', {\n bubbles: true,\n cancelable: true,\n clientX: -1,\n clientY: -1\n });\n Private.dispatchDragLeave(this, this._currentTarget, null, event);\n }\n // Finalize the drag object with `'none'`.\n this._finalize('none');\n }\n /**\n * Test whether the drag object is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Start the drag operation at the specified client position.\n *\n * @param clientX - The client X position for the drag start.\n *\n * @param clientY - The client Y position for the drag start.\n *\n * @returns A promise which resolves to the result of the drag.\n *\n * #### Notes\n * If the drag has already been started, the promise created by the\n * first call to `start` is returned.\n *\n * If the drag operation has ended, or if the drag object has been\n * disposed, the returned promise will resolve to `'none'`.\n *\n * The drag object will be automatically disposed when drag operation\n * completes. This means `Drag` objects are for single-use only.\n *\n * This method assumes the left mouse button is already held down.\n */\n start(clientX, clientY) {\n // If the drag object is already disposed, resolve to `none`.\n if (this._disposed) {\n return Promise.resolve('none');\n }\n // If the drag has already been started, return the promise.\n if (this._promise) {\n return this._promise;\n }\n // Install the document listeners for the drag object.\n this._addListeners();\n // Attach the drag image at the specified client position.\n this._attachDragImage(clientX, clientY);\n // Create the promise which will be resolved on completion.\n this._promise = new Promise(resolve => {\n this._resolve = resolve;\n });\n // Trigger a fake move event to kick off the drag operation.\n let event = new PointerEvent('pointermove', {\n bubbles: true,\n cancelable: true,\n clientX,\n clientY\n });\n document.dispatchEvent(event);\n // Return the pending promise for the drag operation.\n return this._promise;\n }\n /**\n * Handle the DOM events for the drag operation.\n *\n * @param event - The DOM event sent to the drag object.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the document. It should not be\n * called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n default:\n // Stop all other events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * Move the drag image element to the specified location.\n *\n * This is a no-op if there is no drag image element.\n */\n moveDragImage(clientX, clientY) {\n if (!this.dragImage) {\n return;\n }\n let style = this.dragImage.style;\n style.transform = `translate(${clientX}px, ${clientY}px)`;\n }\n /**\n * Handle the `'pointermove'` event for the drag object.\n */\n _evtPointerMove(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Update the current target node and dispatch enter/leave events.\n this._updateCurrentTarget(event);\n // Update the drag scroll element.\n this._updateDragScroll(event);\n // Move the drag image to the specified client position. This is\n // performed *after* dispatching to prevent unnecessary reflows.\n this.moveDragImage(event.clientX, event.clientY);\n }\n /**\n * Handle the `'pointerup'` event for the drag object.\n */\n _evtPointerUp(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Do nothing if the left button is not released.\n if (event.button !== 0) {\n return;\n }\n // Update the current target node and dispatch enter/leave events.\n // This prevents a subtle issue where the DOM mutates under the\n // cursor after the last move event but before the drop event.\n this._updateCurrentTarget(event);\n // If there is no current target, finalize with `'none'`.\n if (!this._currentTarget) {\n this._finalize('none');\n return;\n }\n // If the last drop action was `'none'`, dispatch a leave event\n // to the current target and finalize the drag with `'none'`.\n if (this._dropAction === 'none') {\n Private.dispatchDragLeave(this, this._currentTarget, null, event);\n this._finalize('none');\n return;\n }\n // Dispatch the drop event at the current target and finalize\n // with the resulting drop action.\n let action = Private.dispatchDrop(this, this._currentTarget, event);\n this._finalize(action);\n }\n /**\n * Handle the `'keydown'` event for the drag object.\n */\n _evtKeyDown(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Cancel the drag if `Escape` is pressed.\n if (event.keyCode === 27) {\n this.dispose();\n }\n }\n /**\n * Add the document event listeners for the drag object.\n */\n _addListeners() {\n document.addEventListener('pointerdown', this, true);\n document.addEventListener('pointermove', this, true);\n document.addEventListener('pointerup', this, true);\n document.addEventListener('pointerenter', this, true);\n document.addEventListener('pointerleave', this, true);\n document.addEventListener('pointerover', this, true);\n document.addEventListener('pointerout', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('keyup', this, true);\n document.addEventListener('keypress', this, true);\n document.addEventListener('contextmenu', this, true);\n }\n /**\n * Remove the document event listeners for the drag object.\n */\n _removeListeners() {\n document.removeEventListener('pointerdown', this, true);\n document.removeEventListener('pointermove', this, true);\n document.removeEventListener('pointerup', this, true);\n document.removeEventListener('pointerenter', this, true);\n document.removeEventListener('pointerleave', this, true);\n document.removeEventListener('pointerover', this, true);\n document.removeEventListener('pointerout', this, true);\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('keyup', this, true);\n document.removeEventListener('keypress', this, true);\n document.removeEventListener('contextmenu', this, true);\n }\n /**\n * Update the drag scroll element under the mouse.\n */\n _updateDragScroll(event) {\n // Find the scroll target under the mouse.\n let target = Private.findScrollTarget(event);\n // Bail if there is nothing to scroll.\n if (!this._scrollTarget && !target) {\n return;\n }\n // Start the scroll loop if needed.\n if (!this._scrollTarget) {\n setTimeout(this._onScrollFrame, 500);\n }\n // Update the scroll target.\n this._scrollTarget = target;\n }\n /**\n * Update the current target node using the given mouse event.\n */\n _updateCurrentTarget(event) {\n // Fetch common local state.\n let prevTarget = this._currentTarget;\n let currTarget = this._currentTarget;\n let prevElem = this._currentElement;\n // Find the current indicated element at the given position.\n let currElem = Private.findElementBehindBackdrop(event, this.document);\n // Update the current element reference.\n this._currentElement = currElem;\n // If the indicated element changes from the previous iteration,\n // and is different from the current target, dispatch the exit\n // event to the target.\n if (currElem !== prevElem && currElem !== currTarget) {\n Private.dispatchDragExit(this, currTarget, currElem, event);\n }\n // If the indicated element changes from the previous iteration,\n // and is different from the current target, dispatch the enter\n // event and compute the new target element.\n if (currElem !== prevElem && currElem !== currTarget) {\n currTarget = Private.dispatchDragEnter(this, currElem, currTarget, event);\n }\n // If the current target element has changed, update the current\n // target reference and dispatch the leave event to the old target.\n if (currTarget !== prevTarget) {\n this._currentTarget = currTarget;\n Private.dispatchDragLeave(this, prevTarget, currTarget, event);\n }\n // Dispatch the drag over event and update the drop action.\n let action = Private.dispatchDragOver(this, currTarget, event);\n this._setDropAction(action);\n }\n /**\n * Attach the drag image element at the specified location.\n *\n * This is a no-op if there is no drag image element.\n */\n _attachDragImage(clientX, clientY) {\n if (!this.dragImage) {\n return;\n }\n this.dragImage.classList.add('lm-mod-drag-image');\n let style = this.dragImage.style;\n style.pointerEvents = 'none';\n style.position = 'fixed';\n style.transform = `translate(${clientX}px, ${clientY}px)`;\n const body = this.document instanceof Document\n ? this.document.body\n : this.document.firstElementChild;\n body.appendChild(this.dragImage);\n }\n /**\n * Detach the drag image element from the DOM.\n *\n * This is a no-op if there is no drag image element.\n */\n _detachDragImage() {\n if (!this.dragImage) {\n return;\n }\n let parent = this.dragImage.parentNode;\n if (!parent) {\n return;\n }\n parent.removeChild(this.dragImage);\n }\n /**\n * Set the internal drop action state and update the drag cursor.\n */\n _setDropAction(action) {\n action = Private.validateAction(action, this.supportedActions);\n if (this._override && this._dropAction === action) {\n return;\n }\n switch (action) {\n case 'none':\n this._dropAction = action;\n this._override = Drag.overrideCursor('no-drop', this.document);\n break;\n case 'copy':\n this._dropAction = action;\n this._override = Drag.overrideCursor('copy', this.document);\n break;\n case 'link':\n this._dropAction = action;\n this._override = Drag.overrideCursor('alias', this.document);\n break;\n case 'move':\n this._dropAction = action;\n this._override = Drag.overrideCursor('move', this.document);\n break;\n }\n }\n /**\n * Finalize the drag operation and resolve the drag promise.\n */\n _finalize(action) {\n // Store the resolve function as a temp variable.\n let resolve = this._resolve;\n // Remove the document event listeners.\n this._removeListeners();\n // Detach the drag image.\n this._detachDragImage();\n // Dispose of the cursor override.\n if (this._override) {\n this._override.dispose();\n this._override = null;\n }\n // Clear the mime data.\n this.mimeData.clear();\n // Clear the rest of the internal drag state.\n this._disposed = true;\n this._dropAction = 'none';\n this._currentTarget = null;\n this._currentElement = null;\n this._scrollTarget = null;\n this._promise = null;\n this._resolve = null;\n // Finally, resolve the promise to the given drop action.\n if (resolve) {\n resolve(action);\n }\n }\n}\n/**\n * The namespace for the `Drag` class statics.\n */\n(function (Drag) {\n /**\n * A custom event used for drag-drop operations.\n *\n * #### Notes\n * In order to receive `'lm-dragover'`, `'lm-dragleave'`, or `'lm-drop'`\n * events, a drop target must cancel the `'lm-dragenter'` event by\n * calling the event's `preventDefault()` method.\n */\n class Event extends DragEvent {\n constructor(event, options) {\n super(options.type, {\n bubbles: true,\n cancelable: true,\n altKey: event.altKey,\n button: event.button,\n clientX: event.clientX,\n clientY: event.clientY,\n ctrlKey: event.ctrlKey,\n detail: 0,\n metaKey: event.metaKey,\n relatedTarget: options.related,\n screenX: event.screenX,\n screenY: event.screenY,\n shiftKey: event.shiftKey,\n view: window\n });\n const { drag } = options;\n this.dropAction = 'none';\n this.mimeData = drag.mimeData;\n this.proposedAction = drag.proposedAction;\n this.supportedActions = drag.supportedActions;\n this.source = drag.source;\n }\n }\n Drag.Event = Event;\n /**\n * Override the cursor icon for the entire document.\n *\n * @param cursor - The string representing the cursor style.\n *\n * @returns A disposable which will clear the override when disposed.\n *\n * #### Notes\n * The most recent call to `overrideCursor` takes precedence.\n * Disposing an old override has no effect on the current override.\n *\n * This utility function is used by the `Drag` class to override the\n * mouse cursor during a drag-drop operation, but it can also be used\n * by other classes to fix the cursor icon during normal mouse drags.\n *\n * #### Example\n * ```typescript\n * import { Drag } from '@lumino/dragdrop';\n *\n * // Force the cursor to be 'wait' for the entire document.\n * let override = Drag.overrideCursor('wait');\n *\n * // Clear the override by disposing the return value.\n * override.dispose();\n * ```\n */\n function overrideCursor(cursor, doc = document) {\n return Private.overrideCursor(cursor, doc);\n }\n Drag.overrideCursor = overrideCursor;\n})(Drag || (Drag = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The size of a drag scroll edge, in pixels.\n */\n Private.SCROLL_EDGE_SIZE = 20;\n /**\n * Validate the given action is one of the supported actions.\n *\n * Returns the given action or `'none'` if the action is unsupported.\n */\n function validateAction(action, supported) {\n return actionTable[action] & supportedTable[supported] ? action : 'none';\n }\n Private.validateAction = validateAction;\n /**\n * Find the event target using pointer position if given, or otherwise\n * the central position of the backdrop.\n */\n function findElementBehindBackdrop(event, root = document) {\n if (event) {\n // Check if we already cached element for this event.\n if (lastElementEventSearch && event == lastElementEventSearch.event) {\n return lastElementEventSearch.element;\n }\n Private.cursorBackdrop.style.zIndex = '-1000';\n const element = root.elementFromPoint(event.clientX, event.clientY);\n Private.cursorBackdrop.style.zIndex = '';\n lastElementEventSearch = { event, element };\n return element;\n }\n else {\n const transform = Private.cursorBackdrop.style.transform;\n if (lastElementSearch && transform === lastElementSearch.transform) {\n return lastElementSearch.element;\n }\n const bbox = Private.cursorBackdrop.getBoundingClientRect();\n Private.cursorBackdrop.style.zIndex = '-1000';\n const element = root.elementFromPoint(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n Private.cursorBackdrop.style.zIndex = '';\n lastElementSearch = { transform, element };\n return element;\n }\n }\n Private.findElementBehindBackdrop = findElementBehindBackdrop;\n let lastElementEventSearch = null;\n let lastElementSearch = null;\n /**\n * Find the drag scroll target under the mouse, if any.\n */\n function findScrollTarget(event) {\n // Look up the client mouse position.\n let x = event.clientX;\n let y = event.clientY;\n // Get the element under the mouse.\n let element = findElementBehindBackdrop(event);\n // Search for a scrollable target based on the mouse position.\n // The null assert in third clause of for-loop is required due to:\n // https://github.com/Microsoft/TypeScript/issues/14143\n for (; element; element = element.parentElement) {\n // Ignore elements which are not marked as scrollable.\n if (!element.hasAttribute('data-lm-dragscroll')) {\n continue;\n }\n // Set up the coordinate offsets for the element.\n let offsetX = 0;\n let offsetY = 0;\n if (element === document.body) {\n offsetX = window.pageXOffset;\n offsetY = window.pageYOffset;\n }\n // Get the element bounds in viewport coordinates.\n let r = element.getBoundingClientRect();\n let top = r.top + offsetY;\n let left = r.left + offsetX;\n let right = left + r.width;\n let bottom = top + r.height;\n // Skip the element if it's not under the mouse.\n if (x < left || x >= right || y < top || y >= bottom) {\n continue;\n }\n // Compute the distance to each edge.\n let dl = x - left + 1;\n let dt = y - top + 1;\n let dr = right - x;\n let db = bottom - y;\n // Find the smallest of the edge distances.\n let distance = Math.min(dl, dt, dr, db);\n // Skip the element if the mouse is not within a scroll edge.\n if (distance > Private.SCROLL_EDGE_SIZE) {\n continue;\n }\n // Set up the edge result variable.\n let edge;\n // Find the edge for the computed distance.\n switch (distance) {\n case db:\n edge = 'bottom';\n break;\n case dt:\n edge = 'top';\n break;\n case dr:\n edge = 'right';\n break;\n case dl:\n edge = 'left';\n break;\n default:\n throw 'unreachable';\n }\n // Compute how much the element can scroll in width and height.\n let dsw = element.scrollWidth - element.clientWidth;\n let dsh = element.scrollHeight - element.clientHeight;\n // Determine if the element should be scrolled for the edge.\n let shouldScroll;\n switch (edge) {\n case 'top':\n shouldScroll = dsh > 0 && element.scrollTop > 0;\n break;\n case 'left':\n shouldScroll = dsw > 0 && element.scrollLeft > 0;\n break;\n case 'right':\n shouldScroll = dsw > 0 && element.scrollLeft < dsw;\n break;\n case 'bottom':\n shouldScroll = dsh > 0 && element.scrollTop < dsh;\n break;\n default:\n throw 'unreachable';\n }\n // Skip the element if it should not be scrolled.\n if (!shouldScroll) {\n continue;\n }\n // Return the drag scroll target.\n return { element, edge, distance };\n }\n // No drag scroll target was found.\n return null;\n }\n Private.findScrollTarget = findScrollTarget;\n /**\n * Dispatch a drag enter event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currElem - The currently indicated element, or `null`. This\n * is the \"immediate user selection\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The element to use as the current drag target. This is the\n * \"current target element\" from the whatwg spec, and may be `null`.\n *\n * #### Notes\n * This largely implements the drag enter portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragEnter(drag, currElem, currTarget, event) {\n // If the current element is null, return null as the new target.\n if (!currElem) {\n return null;\n }\n // Dispatch a drag enter event to the current element.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragenter'\n });\n let canceled = !currElem.dispatchEvent(dragEvent);\n // If the event was canceled, use the current element as the new target.\n if (canceled) {\n return currElem;\n }\n // If the current element is the document body, keep the original target.\n const body = drag.document instanceof Document\n ? drag.document.body\n : drag.document.firstElementChild;\n if (currElem === body) {\n return currTarget;\n }\n // Dispatch a drag enter event on the document body.\n dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragenter'\n });\n body.dispatchEvent(dragEvent);\n // Ignore the event cancellation, and use the body as the new target.\n return body;\n }\n Private.dispatchDragEnter = dispatchDragEnter;\n /**\n * Dispatch a drag exit event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param prevTarget - The previous target element, or `null`. This\n * is the previous \"current target element\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * #### Notes\n * This largely implements the drag exit portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragExit(drag, prevTarget, currTarget, event) {\n // If the previous target is null, do nothing.\n if (!prevTarget) {\n return;\n }\n // Dispatch the drag exit event to the previous target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragexit'\n });\n prevTarget.dispatchEvent(dragEvent);\n }\n Private.dispatchDragExit = dispatchDragExit;\n /**\n * Dispatch a drag leave event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param prevTarget - The previous target element, or `null`. This\n * is the previous \"current target element\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * #### Notes\n * This largely implements the drag leave portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragLeave(drag, prevTarget, currTarget, event) {\n // If the previous target is null, do nothing.\n if (!prevTarget) {\n return;\n }\n // Dispatch the drag leave event to the previous target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragleave'\n });\n prevTarget.dispatchEvent(dragEvent);\n }\n Private.dispatchDragLeave = dispatchDragLeave;\n /**\n * Dispatch a drag over event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The `DropAction` result of the drag over event.\n *\n * #### Notes\n * This largely implements the drag over portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragOver(drag, currTarget, event) {\n // If there is no current target, the drop action is none.\n if (!currTarget) {\n return 'none';\n }\n // Dispatch the drag over event to the current target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: null,\n type: 'lm-dragover'\n });\n let canceled = !currTarget.dispatchEvent(dragEvent);\n // If the event was canceled, return the drop action result.\n if (canceled) {\n return dragEvent.dropAction;\n }\n // Otherwise, the effective drop action is none.\n return 'none';\n }\n Private.dispatchDragOver = dispatchDragOver;\n /**\n * Dispatch a drop event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The `DropAction` result of the drop event.\n *\n * #### Notes\n * This largely implements the drag over portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDrop(drag, currTarget, event) {\n // If there is no current target, the drop action is none.\n if (!currTarget) {\n return 'none';\n }\n // Dispatch the drop event to the current target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: null,\n type: 'lm-drop'\n });\n let canceled = !currTarget.dispatchEvent(dragEvent);\n // If the event was canceled, return the drop action result.\n if (canceled) {\n return dragEvent.dropAction;\n }\n // Otherwise, the effective drop action is none.\n return 'none';\n }\n Private.dispatchDrop = dispatchDrop;\n /**\n * A lookup table from drop action to bit value.\n */\n const actionTable = {\n none: 0x0,\n copy: 0x1,\n link: 0x2,\n move: 0x4\n };\n /**\n * A lookup table from supported action to drop action bit mask.\n */\n const supportedTable = {\n none: actionTable['none'],\n copy: actionTable['copy'],\n link: actionTable['link'],\n move: actionTable['move'],\n 'copy-link': actionTable['copy'] | actionTable['link'],\n 'copy-move': actionTable['copy'] | actionTable['move'],\n 'link-move': actionTable['link'] | actionTable['move'],\n all: actionTable['copy'] | actionTable['link'] | actionTable['move']\n };\n /**\n * Implementation of `Drag.overrideCursor`.\n */\n function overrideCursor(cursor, doc = document) {\n let id = ++overrideCursorID;\n const body = doc instanceof Document\n ? doc.body\n : doc.firstElementChild;\n if (!Private.cursorBackdrop.isConnected) {\n // Hide the backdrop until the pointer moves to avoid issues with\n // native double click detection, used in e.g. datagrid editing.\n Private.cursorBackdrop.style.transform = 'scale(0)';\n body.appendChild(Private.cursorBackdrop);\n resetBackdropScroll();\n document.addEventListener('pointermove', alignBackdrop, {\n capture: true,\n passive: true\n });\n Private.cursorBackdrop.addEventListener('scroll', propagateBackdropScroll, {\n capture: true,\n passive: true\n });\n }\n Private.cursorBackdrop.style.cursor = cursor;\n return new DisposableDelegate(() => {\n if (id === overrideCursorID && Private.cursorBackdrop.isConnected) {\n document.removeEventListener('pointermove', alignBackdrop, true);\n Private.cursorBackdrop.removeEventListener('scroll', propagateBackdropScroll, true);\n body.removeChild(Private.cursorBackdrop);\n }\n });\n }\n Private.overrideCursor = overrideCursor;\n /**\n * Move cursor backdrop to match cursor position.\n */\n function alignBackdrop(event) {\n if (!Private.cursorBackdrop) {\n return;\n }\n Private.cursorBackdrop.style.transform = `translate(${event.clientX}px, ${event.clientY}px)`;\n }\n /**\n * Propagate the scroll event from the backdrop element to the scroll target.\n * The scroll target is defined by presence of `data-lm-dragscroll` attribute.\n */\n function propagateBackdropScroll(_event) {\n if (!Private.cursorBackdrop) {\n return;\n }\n // Get the element under behind the centre of the cursor backdrop\n // (essentially behind the cursor, but possibly a few pixels off).\n let element = findElementBehindBackdrop();\n if (!element) {\n return;\n }\n // Find scroll target.\n const scrollTarget = element.closest('[data-lm-dragscroll]');\n if (!scrollTarget) {\n return;\n }\n // Apply the scroll delta to the correct target.\n scrollTarget.scrollTop += Private.cursorBackdrop.scrollTop - backdropScrollOrigin;\n scrollTarget.scrollLeft += Private.cursorBackdrop.scrollLeft - backdropScrollOrigin;\n // Center the scroll position.\n resetBackdropScroll();\n }\n /**\n * Reset the backdrop scroll to allow further scrolling.\n */\n function resetBackdropScroll() {\n Private.cursorBackdrop.scrollTop = backdropScrollOrigin;\n Private.cursorBackdrop.scrollLeft = backdropScrollOrigin;\n }\n /**\n * The center of the backdrop node scroll area.\n */\n const backdropScrollOrigin = 500;\n /**\n * Create cursor backdrop node.\n */\n function createCursorBackdrop() {\n const backdrop = document.createElement('div');\n backdrop.classList.add('lm-cursor-backdrop');\n return backdrop;\n }\n /**\n * The internal id for the active cursor override.\n */\n let overrideCursorID = 0;\n /**\n * A backdrop node overriding pointer cursor.\n *\n * #### Notes\n * We use a backdrop node rather than setting the cursor directly on the body\n * because setting it on body requires more extensive style recalculation for\n * reliable application of the cursor, this is the cursor not being overriden\n * when over child elements with another style like `cursor: other!important`.\n */\n Private.cursorBackdrop = createCursorBackdrop();\n})(Private || (Private = {}));\n\nexport { Drag };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module keyboard\n */\n/**\n * Get the global application keyboard layout instance.\n *\n * @returns The keyboard layout for use by the application.\n *\n * #### Notes\n * The default keyboard layout is US-English.\n */\nfunction getKeyboardLayout() {\n return Private.keyboardLayout;\n}\n/**\n * Set the global application keyboard layout instance.\n *\n * @param layout The keyboard layout for use by the application.\n *\n * #### Notes\n * The keyboard layout should typically be set on application startup\n * to a layout which is appropriate for the user's system.\n */\nfunction setKeyboardLayout(layout) {\n Private.keyboardLayout = layout;\n}\n/**\n * A concrete implementation of {@link IKeyboardLayout} based on keycodes.\n *\n * The `keyCode` property of a `'keydown'` event is a browser and OS\n * specific representation of the physical key (not character) which\n * was pressed on a keyboard. While not the most convenient API, it\n * is currently the only one which works reliably on all browsers.\n *\n * This class accepts a user-defined mapping of keycode to key, which\n * allows for reliable shortcuts tailored to the user's system.\n */\nclass KeycodeLayout {\n /**\n * Construct a new keycode layout.\n *\n * @param name - The human readable name for the layout.\n *\n * @param codes - A mapping of keycode to key value.\n *\n * @param modifierKeys - Array of modifier key names\n */\n constructor(name, codes, modifierKeys = []) {\n this.name = name;\n this._codes = codes;\n this._keys = KeycodeLayout.extractKeys(codes);\n this._modifierKeys = KeycodeLayout.convertToKeySet(modifierKeys);\n }\n /**\n * Get an array of the key values supported by the layout.\n *\n * @returns A new array of the supported key values.\n */\n keys() {\n return Object.keys(this._keys);\n }\n /**\n * Test whether the given key is a valid value for the layout.\n *\n * @param key - The user provided key to test for validity.\n *\n * @returns `true` if the key is valid, `false` otherwise.\n */\n isValidKey(key) {\n return key in this._keys;\n }\n /**\n * Test whether the given key is a modifier key.\n *\n * @param key - The user provided key.\n *\n * @returns `true` if the key is a modifier key, `false` otherwise.\n */\n isModifierKey(key) {\n return key in this._modifierKeys;\n }\n /**\n * Get the key for a `'keydown'` event.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns The associated key value, or an empty string if\n * the event does not represent a valid primary key.\n */\n keyForKeydownEvent(event) {\n return this._codes[event.keyCode] || '';\n }\n}\n/**\n * The namespace for the `KeycodeLayout` class statics.\n */\n(function (KeycodeLayout) {\n /**\n * Extract the set of keys from a code map.\n *\n * @param codes - The code map of interest.\n *\n * @returns A set of the keys in the code map.\n */\n function extractKeys(codes) {\n let keys = Object.create(null);\n for (let c in codes) {\n keys[codes[c]] = true;\n }\n return keys;\n }\n KeycodeLayout.extractKeys = extractKeys;\n /**\n * Convert array of keys to a key set.\n *\n * @param keys - The array that needs to be converted\n *\n * @returns A set of the keys in the array.\n */\n function convertToKeySet(keys) {\n let keySet = Object(null);\n for (let i = 0, n = keys.length; i < n; ++i) {\n keySet[keys[i]] = true;\n }\n return keySet;\n }\n KeycodeLayout.convertToKeySet = convertToKeySet;\n})(KeycodeLayout || (KeycodeLayout = {}));\n/**\n * A keycode-based keyboard layout for US English keyboards.\n *\n * This layout is valid for the following OS/Browser combinations.\n *\n * - Windows\n * - Chrome\n * - Firefox\n * - IE\n *\n * - OSX\n * - Chrome\n * - Firefox\n * - Safari\n *\n * - Linux\n * - Chrome\n * - Firefox\n *\n * Other combinations may also work, but are untested.\n */\nconst EN_US = new KeycodeLayout('en-us', {\n 8: 'Backspace',\n 9: 'Tab',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 19: 'Pause',\n 27: 'Escape',\n 32: 'Space',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'A',\n 66: 'B',\n 67: 'C',\n 68: 'D',\n 69: 'E',\n 70: 'F',\n 71: 'G',\n 72: 'H',\n 73: 'I',\n 74: 'J',\n 75: 'K',\n 76: 'L',\n 77: 'M',\n 78: 'N',\n 79: 'O',\n 80: 'P',\n 81: 'Q',\n 82: 'R',\n 83: 'S',\n 84: 'T',\n 85: 'U',\n 86: 'V',\n 87: 'W',\n 88: 'X',\n 89: 'Y',\n 90: 'Z',\n 91: 'Meta',\n 93: 'ContextMenu',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9',\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111: '/',\n 112: 'F1',\n 113: 'F2',\n 114: 'F3',\n 115: 'F4',\n 116: 'F5',\n 117: 'F6',\n 118: 'F7',\n 119: 'F8',\n 120: 'F9',\n 121: 'F10',\n 122: 'F11',\n 123: 'F12',\n 173: '-',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 224: 'Meta' // firefox\n}, ['Shift', 'Ctrl', 'Alt', 'Meta'] // modifier keys\n);\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The global keyboard layout instance.\n */\n Private.keyboardLayout = EN_US;\n})(Private || (Private = {}));\n\nexport { EN_US, KeycodeLayout, getKeyboardLayout, setKeyboardLayout };\n//# sourceMappingURL=index.es6.js.map\n","import { every, retro, some, ArrayExt } from '@lumino/algorithm';\nimport { LinkedList } from '@lumino/collections';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module messaging\n */\n/**\n * A message which can be delivered to a message handler.\n *\n * #### Notes\n * This class may be subclassed to create complex message types.\n */\nclass Message {\n /**\n * Construct a new message.\n *\n * @param type - The type of the message.\n */\n constructor(type) {\n this.type = type;\n }\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * If a conflatable message is posted to a handler while another\n * conflatable message of the same `type` has already been posted\n * to the handler, the `conflate()` method of the existing message\n * will be invoked. If that method returns `true`, the new message\n * will not be enqueued. This allows messages to be compressed, so\n * that only a single instance of the message type is processed per\n * cycle, no matter how many times messages of that type are posted.\n *\n * Custom message types may reimplement this property.\n *\n * The default implementation is always `false`.\n */\n get isConflatable() {\n return false;\n }\n /**\n * Conflate this message with another message of the same `type`.\n *\n * @param other - A conflatable message of the same `type`.\n *\n * @returns `true` if the message was successfully conflated, or\n * `false` otherwise.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * This method is called automatically by the message loop when the\n * given message is posted to the handler paired with this message.\n * This message will already be enqueued and conflatable, and the\n * given message will have the same `type` and also be conflatable.\n *\n * This method should merge the state of the other message into this\n * message as needed so that when this message is finally delivered\n * to the handler, it receives the most up-to-date information.\n *\n * If this method returns `true`, it signals that the other message\n * was successfully conflated and that message will not be enqueued.\n *\n * If this method returns `false`, the other message will be enqueued\n * for normal delivery.\n *\n * Custom message types may reimplement this method.\n *\n * The default implementation always returns `false`.\n */\n conflate(other) {\n return false;\n }\n}\n/**\n * A convenience message class which conflates automatically.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most user code will not\n * make use of this class.\n *\n * This message class is useful for creating message instances which\n * should be conflated, but which have no state other than `type`.\n *\n * If conflation of stateful messages is required, a custom `Message`\n * subclass should be created.\n */\nclass ConflatableMessage extends Message {\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * This property is always `true`.\n */\n get isConflatable() {\n return true;\n }\n /**\n * Conflate this message with another message of the same `type`.\n *\n * #### Notes\n * This method always returns `true`.\n */\n conflate(other) {\n return true;\n }\n}\n/**\n * The namespace for the global singleton message loop.\n */\nvar MessageLoop;\n(function (MessageLoop) {\n /**\n * A function that cancels the pending loop task; `null` if unavailable.\n */\n let pending = null;\n /**\n * Schedules a function for invocation as soon as possible asynchronously.\n *\n * @param fn The function to invoke when called back.\n *\n * @returns An anonymous function that will unschedule invocation if possible.\n */\n const schedule = (resolved => (fn) => {\n let rejected = false;\n resolved.then(() => !rejected && fn());\n return () => {\n rejected = true;\n };\n })(Promise.resolve());\n /**\n * Send a message to a message handler to process immediately.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to deliver to the handler.\n *\n * #### Notes\n * The message will first be sent through any installed message hooks\n * for the handler. If the message passes all hooks, it will then be\n * delivered to the `processMessage` method of the handler.\n *\n * The message will not be conflated with pending posted messages.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function sendMessage(handler, msg) {\n // Lookup the message hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Handle the common case of no installed hooks.\n if (!hooks || hooks.length === 0) {\n invokeHandler(handler, msg);\n return;\n }\n // Invoke the message hooks starting with the newest first.\n let passed = every(retro(hooks), hook => {\n return hook ? invokeHook(hook, handler, msg) : true;\n });\n // Invoke the handler if the message passes all hooks.\n if (passed) {\n invokeHandler(handler, msg);\n }\n }\n MessageLoop.sendMessage = sendMessage;\n /**\n * Post a message to a message handler to process in the future.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to post to the handler.\n *\n * #### Notes\n * The message will be conflated with the pending posted messages for\n * the handler, if possible. If the message is not conflated, it will\n * be queued for normal delivery on the next cycle of the event loop.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function postMessage(handler, msg) {\n // Handle the common case of a non-conflatable message.\n if (!msg.isConflatable) {\n enqueueMessage(handler, msg);\n return;\n }\n // Conflate the message with an existing message if possible.\n let conflated = some(messageQueue, posted => {\n if (posted.handler !== handler) {\n return false;\n }\n if (!posted.msg) {\n return false;\n }\n if (posted.msg.type !== msg.type) {\n return false;\n }\n if (!posted.msg.isConflatable) {\n return false;\n }\n return posted.msg.conflate(msg);\n });\n // Enqueue the message if it was not conflated.\n if (!conflated) {\n enqueueMessage(handler, msg);\n }\n }\n MessageLoop.postMessage = postMessage;\n /**\n * Install a message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to install.\n *\n * #### Notes\n * A message hook is invoked before a message is delivered to the\n * handler. If the hook returns `false`, no other hooks will be\n * invoked and the message will not be delivered to the handler.\n *\n * The most recently installed message hook is executed first.\n *\n * If the hook is already installed, this is a no-op.\n */\n function installMessageHook(handler, hook) {\n // Look up the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Bail early if the hook is already installed.\n if (hooks && hooks.indexOf(hook) !== -1) {\n return;\n }\n // Add the hook to the end, so it will be the first to execute.\n if (!hooks) {\n messageHooks.set(handler, [hook]);\n }\n else {\n hooks.push(hook);\n }\n }\n MessageLoop.installMessageHook = installMessageHook;\n /**\n * Remove an installed message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to remove.\n *\n * #### Notes\n * It is safe to call this function while the hook is executing.\n *\n * If the hook is not installed, this is a no-op.\n */\n function removeMessageHook(handler, hook) {\n // Lookup the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Bail early if the hooks do not exist.\n if (!hooks) {\n return;\n }\n // Lookup the index of the hook and bail if not found.\n let i = hooks.indexOf(hook);\n if (i === -1) {\n return;\n }\n // Clear the hook and schedule a cleanup of the array.\n hooks[i] = null;\n scheduleCleanup(hooks);\n }\n MessageLoop.removeMessageHook = removeMessageHook;\n /**\n * Clear all message data associated with a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * #### Notes\n * This will clear all posted messages and hooks for the handler.\n */\n function clearData(handler) {\n // Lookup the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Clear all messsage hooks for the handler.\n if (hooks && hooks.length > 0) {\n ArrayExt.fill(hooks, null);\n scheduleCleanup(hooks);\n }\n // Clear all posted messages for the handler.\n for (const posted of messageQueue) {\n if (posted.handler === handler) {\n posted.handler = null;\n posted.msg = null;\n }\n }\n }\n MessageLoop.clearData = clearData;\n /**\n * Process the pending posted messages in the queue immediately.\n *\n * #### Notes\n * This function is useful when posted messages must be processed immediately.\n *\n * This function should normally not be needed, but it may be\n * required to work around certain browser idiosyncrasies.\n *\n * Recursing into this function is a no-op.\n */\n function flush() {\n // Bail if recursion is detected or if there is no pending task.\n if (flushGuard || pending === null) {\n return;\n }\n // Unschedule the pending loop task.\n pending();\n pending = null;\n // Run the message loop within the recursion guard.\n flushGuard = true;\n runMessageLoop();\n flushGuard = false;\n }\n MessageLoop.flush = flush;\n /**\n * Get the message loop exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return exceptionHandler;\n }\n MessageLoop.getExceptionHandler = getExceptionHandler;\n /**\n * Set the message loop exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a message handler or a\n * message hook throws an exception.\n */\n function setExceptionHandler(handler) {\n let old = exceptionHandler;\n exceptionHandler = handler;\n return old;\n }\n MessageLoop.setExceptionHandler = setExceptionHandler;\n /**\n * The queue of posted message pairs.\n */\n const messageQueue = new LinkedList();\n /**\n * A mapping of handler to array of installed message hooks.\n */\n const messageHooks = new WeakMap();\n /**\n * A set of message hook arrays which are pending cleanup.\n */\n const dirtySet = new Set();\n /**\n * The message loop exception handler.\n */\n let exceptionHandler = (err) => {\n console.error(err);\n };\n /**\n * A guard flag to prevent flush recursion.\n */\n let flushGuard = false;\n /**\n * Invoke a message hook with the specified handler and message.\n *\n * Returns the result of the hook, or `true` if the hook throws.\n *\n * Exceptions in the hook will be caught and logged.\n */\n function invokeHook(hook, handler, msg) {\n let result = true;\n try {\n if (typeof hook === 'function') {\n result = hook(handler, msg);\n }\n else {\n result = hook.messageHook(handler, msg);\n }\n }\n catch (err) {\n exceptionHandler(err);\n }\n return result;\n }\n /**\n * Invoke a message handler with the specified message.\n *\n * Exceptions in the handler will be caught and logged.\n */\n function invokeHandler(handler, msg) {\n try {\n handler.processMessage(msg);\n }\n catch (err) {\n exceptionHandler(err);\n }\n }\n /**\n * Add a message to the end of the message queue.\n *\n * This will automatically schedule a run of the message loop.\n */\n function enqueueMessage(handler, msg) {\n // Add the posted message to the queue.\n messageQueue.addLast({ handler, msg });\n // Bail if a loop task is already pending.\n if (pending !== null) {\n return;\n }\n // Schedule a run of the message loop.\n pending = schedule(runMessageLoop);\n }\n /**\n * Run an iteration of the message loop.\n *\n * This will process all pending messages in the queue. If a message\n * is added to the queue while the message loop is running, it will\n * be processed on the next cycle of the loop.\n */\n function runMessageLoop() {\n // Clear the task so the next loop can be scheduled.\n pending = null;\n // If the message queue is empty, there is nothing else to do.\n if (messageQueue.isEmpty) {\n return;\n }\n // Add a sentinel value to the end of the queue. The queue will\n // only be processed up to the sentinel. Messages posted during\n // this cycle will execute on the next cycle.\n let sentinel = { handler: null, msg: null };\n messageQueue.addLast(sentinel);\n // Enter the message loop.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // Remove the first posted message in the queue.\n let posted = messageQueue.removeFirst();\n // If the value is the sentinel, exit the loop.\n if (posted === sentinel) {\n return;\n }\n // Dispatch the message if it has not been cleared.\n if (posted.handler && posted.msg) {\n sendMessage(posted.handler, posted.msg);\n }\n }\n }\n /**\n * Schedule a cleanup of a message hooks array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any `null` hook will\n * be removed from the array.\n */\n function scheduleCleanup(hooks) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(hooks);\n }\n /**\n * Cleanup the message hook arrays in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupHooks);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty hooks in a message hooks array.\n *\n * This will remove any `null` hook from the array.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupHooks(hooks) {\n ArrayExt.removeAllWhere(hooks, isNull);\n }\n /**\n * Test whether a value is `null`.\n */\n function isNull(value) {\n return value === null;\n }\n})(MessageLoop || (MessageLoop = {}));\n\nexport { ConflatableMessage, Message, MessageLoop };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module properties\n */\n/**\n * A class which attaches a value to an external object.\n *\n * #### Notes\n * Attached properties are used to extend the state of an object with\n * semantic data from an unrelated class. They also encapsulate value\n * creation, coercion, and notification.\n *\n * Because attached property values are stored in a hash table, which\n * in turn is stored in a WeakMap keyed on the owner object, there is\n * non-trivial storage overhead involved in their use. The pattern is\n * therefore best used for the storage of rare data.\n */\nclass AttachedProperty {\n /**\n * Construct a new attached property.\n *\n * @param options - The options for initializing the property.\n */\n constructor(options) {\n this._pid = Private.nextPID();\n this.name = options.name;\n this._create = options.create;\n this._coerce = options.coerce || null;\n this._compare = options.compare || null;\n this._changed = options.changed || null;\n }\n /**\n * Get the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @returns The current value of the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and assigned as the current value of the property.\n */\n get(owner) {\n let value;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n value = map[this._pid];\n }\n else {\n value = map[this._pid] = this._createValue(owner);\n }\n return value;\n }\n /**\n * Set the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @param value - The value for the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n set(owner, value) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, value);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Explicitly coerce the current property value for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n coerce(owner) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, oldValue);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Get or create the default value for the given owner.\n */\n _createValue(owner) {\n let create = this._create;\n return create(owner);\n }\n /**\n * Coerce the value for the given owner.\n */\n _coerceValue(owner, value) {\n let coerce = this._coerce;\n return coerce ? coerce(owner, value) : value;\n }\n /**\n * Compare the old value and new value for equality.\n */\n _compareValue(oldValue, newValue) {\n let compare = this._compare;\n return compare ? compare(oldValue, newValue) : oldValue === newValue;\n }\n /**\n * Run the change notification if the given values are different.\n */\n _maybeNotify(owner, oldValue, newValue) {\n let changed = this._changed;\n if (changed && !this._compareValue(oldValue, newValue)) {\n changed(owner, oldValue, newValue);\n }\n }\n}\n/**\n * The namespace for the `AttachedProperty` class statics.\n */\n(function (AttachedProperty) {\n /**\n * Clear the stored property data for the given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * This will clear all property values for the owner, but it will\n * **not** run the change notification for any of the properties.\n */\n function clearData(owner) {\n Private.ownerData.delete(owner);\n }\n AttachedProperty.clearData = clearData;\n})(AttachedProperty || (AttachedProperty = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of property owner to property map.\n */\n Private.ownerData = new WeakMap();\n /**\n * A function which computes successive unique property ids.\n */\n Private.nextPID = (() => {\n let id = 0;\n return () => {\n let rand = Math.random();\n let stem = `${rand}`.slice(2);\n return `pid-${stem}-${id++}`;\n };\n })();\n /**\n * Lookup the data map for the property owner.\n *\n * This will create the map if one does not already exist.\n */\n function ensureMap(owner) {\n let map = Private.ownerData.get(owner);\n if (map) {\n return map;\n }\n map = Object.create(null);\n Private.ownerData.set(owner, map);\n return map;\n }\n Private.ensureMap = ensureMap;\n})(Private || (Private = {}));\n\nexport { AttachedProperty };\n//# sourceMappingURL=index.es6.js.map\n","import { find, ArrayExt } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module signaling\n */\n/**\n * A concrete implementation of `ISignal`.\n *\n * #### Example\n * ```typescript\n * import { ISignal, Signal } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get valueChanged: ISignal {\n * return this._valueChanged;\n * }\n *\n * get value(): number {\n * return this._value;\n * }\n *\n * set value(value: number) {\n * if (value === this._value) {\n * return;\n * }\n * this._value = value;\n * this._valueChanged.emit(value);\n * }\n *\n * private _value = 0;\n * private _valueChanged = new Signal(this);\n * }\n *\n * function logger(sender: SomeClass, value: number): void {\n * console.log(sender.name, value);\n * }\n *\n * let m1 = new SomeClass('foo');\n * let m2 = new SomeClass('bar');\n *\n * m1.valueChanged.connect(logger);\n * m2.valueChanged.connect(logger);\n *\n * m1.value = 42; // logs: foo 42\n * m2.value = 17; // logs: bar 17\n * ```\n */\nclass Signal {\n /**\n * Construct a new signal.\n *\n * @param sender - The sender which owns the signal.\n */\n constructor(sender) {\n this.sender = sender;\n }\n /**\n * Connect a slot to the signal.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n connect(slot, thisArg) {\n return Private.connect(this, slot, thisArg);\n }\n /**\n * Disconnect a slot from the signal.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n disconnect(slot, thisArg) {\n return Private.disconnect(this, slot, thisArg);\n }\n /**\n * Emit the signal and invoke the connected slots.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n emit(args) {\n Private.emit(this, args);\n }\n}\n/**\n * The namespace for the `Signal` class statics.\n */\n(function (Signal) {\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectBetween(sender, receiver) {\n Private.disconnectBetween(sender, receiver);\n }\n Signal.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n Private.disconnectSender(sender);\n }\n Signal.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectReceiver(receiver) {\n Private.disconnectReceiver(receiver);\n }\n Signal.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectAll(object) {\n Private.disconnectAll(object);\n }\n Signal.disconnectAll = disconnectAll;\n /**\n * Clear all signal data associated with the given object.\n *\n * @param object - The object for which the data should be cleared.\n *\n * #### Notes\n * This removes all signal connections and any other signal data\n * associated with the object.\n */\n function clearData(object) {\n Private.disconnectAll(object);\n }\n Signal.clearData = clearData;\n /**\n * Get the signal exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return Private.exceptionHandler;\n }\n Signal.getExceptionHandler = getExceptionHandler;\n /**\n * Set the signal exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a slot throws an exception.\n */\n function setExceptionHandler(handler) {\n let old = Private.exceptionHandler;\n Private.exceptionHandler = handler;\n return old;\n }\n Signal.setExceptionHandler = setExceptionHandler;\n})(Signal || (Signal = {}));\n/**\n * A concrete implementation of `IStream`.\n *\n * #### Example\n * ```typescript\n * import { IStream, Stream } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get pings(): IStream {\n * return this._pings;\n * }\n *\n * ping(value: string) {\n * this._pings.emit(value);\n * }\n *\n * private _pings = new Stream(this);\n * }\n *\n * let m1 = new SomeClass('foo');\n *\n * m1.pings.connect((_, value: string) => {\n * console.log('connect', value);\n * });\n *\n * void (async () => {\n * for await (const ping of m1.pings) {\n * console.log('iterator', ping);\n * }\n * })();\n *\n * m1.ping('alpha'); // logs: connect alpha\n * // logs: iterator alpha\n * m1.ping('beta'); // logs: connect beta\n * // logs: iterator beta\n * ```\n */\nclass Stream extends Signal {\n constructor() {\n super(...arguments);\n this._pending = new PromiseDelegate();\n }\n /**\n * Return an async iterator that yields every emission.\n */\n async *[Symbol.asyncIterator]() {\n let pending = this._pending;\n while (true) {\n try {\n const { args, next } = await pending.promise;\n pending = next;\n yield args;\n }\n catch (_) {\n return; // Any promise rejection stops the iterator.\n }\n }\n }\n /**\n * Emit the signal, invoke the connected slots, and yield the emission.\n *\n * @param args - The args to pass to the connected slots.\n */\n emit(args) {\n const pending = this._pending;\n const next = (this._pending = new PromiseDelegate());\n pending.resolve({ args, next });\n super.emit(args);\n }\n /**\n * Stop the stream's async iteration.\n */\n stop() {\n this._pending.promise.catch(() => undefined);\n this._pending.reject('stop');\n this._pending = new PromiseDelegate();\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The signal exception handler function.\n */\n Private.exceptionHandler = (err) => {\n console.error(err);\n };\n /**\n * Connect a slot to a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n function connect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Ensure the sender's array of receivers is created.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers) {\n receivers = [];\n receiversForSender.set(signal.sender, receivers);\n }\n // Bail if a matching connection already exists.\n if (findConnection(receivers, signal, slot, thisArg)) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Ensure the receiver's array of senders is created.\n let senders = sendersForReceiver.get(receiver);\n if (!senders) {\n senders = [];\n sendersForReceiver.set(receiver, senders);\n }\n // Create a new connection and add it to the end of each array.\n let connection = { signal, slot, thisArg };\n receivers.push(connection);\n senders.push(connection);\n // Indicate a successful connection.\n return true;\n }\n Private.connect = connect;\n /**\n * Disconnect a slot from a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n function disconnect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Lookup the list of receivers, and bail if none exist.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return false;\n }\n // Bail if no matching connection exits.\n let connection = findConnection(receivers, signal, slot, thisArg);\n if (!connection) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Lookup the array of senders, which is now known to exist.\n let senders = sendersForReceiver.get(receiver);\n // Clear the connection and schedule cleanup of the arrays.\n connection.signal = null;\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n // Indicate a successful disconnection.\n return true;\n }\n Private.disconnect = disconnect;\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectBetween(sender, receiver) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each connection between the sender and receiver.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Clear the connection if it matches the sender.\n if (connection.signal.sender === sender) {\n connection.signal = null;\n }\n }\n // Schedule a cleanup of the senders and receivers.\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n }\n Private.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Clear each receiver connection.\n for (const connection of receivers) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Choose the best object for the receiver.\n let receiver = connection.thisArg || connection.slot;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of senders, which is now known to exist.\n scheduleCleanup(sendersForReceiver.get(receiver));\n }\n // Schedule a cleanup of the receivers.\n scheduleCleanup(receivers);\n }\n Private.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectReceiver(receiver) {\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each sender connection.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Lookup the sender for the connection.\n let sender = connection.signal.sender;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of receivers, which is now known to exist.\n scheduleCleanup(receiversForSender.get(sender));\n }\n // Schedule a cleanup of the list of senders.\n scheduleCleanup(senders);\n }\n Private.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n */\n function disconnectAll(object) {\n // Remove all connections where the given object is the sender.\n disconnectSender(object);\n // Remove all connections where the given object is the receiver.\n disconnectReceiver(object);\n }\n Private.disconnectAll = disconnectAll;\n /**\n * Emit a signal and invoke its connected slots.\n *\n * @param signal - The signal of interest.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n function emit(signal, args) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Invoke the slots for connections with a matching signal.\n // Any connections added during emission are not invoked.\n for (let i = 0, n = receivers.length; i < n; ++i) {\n let connection = receivers[i];\n if (connection.signal === signal) {\n invokeSlot(connection, args);\n }\n }\n }\n Private.emit = emit;\n /**\n * A weak mapping of sender to array of receiver connections.\n */\n const receiversForSender = new WeakMap();\n /**\n * A weak mapping of receiver to array of sender connections.\n */\n const sendersForReceiver = new WeakMap();\n /**\n * A set of connection arrays which are pending cleanup.\n */\n const dirtySet = new Set();\n /**\n * A function to schedule an event loop callback.\n */\n const schedule = (() => {\n let ok = typeof requestAnimationFrame === 'function';\n return ok ? requestAnimationFrame : setImmediate;\n })();\n /**\n * Find a connection which matches the given parameters.\n */\n function findConnection(connections, signal, slot, thisArg) {\n return find(connections, connection => connection.signal === signal &&\n connection.slot === slot &&\n connection.thisArg === thisArg);\n }\n /**\n * Invoke a slot with the given parameters.\n *\n * The connection is assumed to be valid.\n *\n * Exceptions in the slot will be caught and logged.\n */\n function invokeSlot(connection, args) {\n let { signal, slot, thisArg } = connection;\n try {\n slot.call(thisArg, signal.sender, args);\n }\n catch (err) {\n Private.exceptionHandler(err);\n }\n }\n /**\n * Schedule a cleanup of a connection array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any connection with a\n * `null` signal will be removed from the array.\n */\n function scheduleCleanup(array) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(array);\n }\n /**\n * Cleanup the connection lists in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupConnections);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty connections in a connections array.\n *\n * This will remove any connection with a `null` signal.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupConnections(connections) {\n ArrayExt.removeAllWhere(connections, isDeadConnection);\n }\n /**\n * Test whether a connection is dead.\n *\n * A dead connection has a `null` signal.\n */\n function isDeadConnection(connection) {\n return connection.signal === null;\n }\n})(Private || (Private = {}));\n\nexport { Signal, Stream };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module virtualdom\n */\n/**\n * A virtual node which represents plain text content.\n *\n * #### Notes\n * User code will not typically create a `VirtualText` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualText {\n /**\n * Construct a new virtual text node.\n *\n * @param content - The text content for the node.\n */\n constructor(content) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'text';\n this.content = content;\n }\n}\n/**\n * A virtual node which represents an HTML element.\n *\n * #### Notes\n * User code will not typically create a `VirtualElement` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualElement {\n /**\n * Construct a new virtual element node.\n *\n * @param tag - The element tag name.\n *\n * @param attrs - The element attributes.\n *\n * @param children - The element children.\n *\n * @param renderer - An optional custom renderer for the element.\n */\n constructor(tag, attrs, children, renderer) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'element';\n this.tag = tag;\n this.attrs = attrs;\n this.children = children;\n this.renderer = renderer;\n }\n}\n/**\n * DEPRECATED - use VirtualElement with a defined renderer param instead.\n * This class is provided as a backwards compatibility shim\n *\n * A \"pass thru\" virtual node whose children are managed by a render and an\n * unrender callback. The intent of this flavor of virtual node is to make\n * it easy to blend other kinds of virtualdom (eg React) into Phosphor's\n * virtualdom.\n *\n * #### Notes\n * User code will not typically create a `VirtualElementPass` node directly.\n * Instead, the `hpass()` function will be used to create an element tree.\n */\nclass VirtualElementPass extends VirtualElement {\n /**\n * DEPRECATED - use VirtualElement with a defined renderer param instead\n *\n * Construct a new virtual element pass thru node.\n *\n * @param tag - the tag of the parent element of this node. Once the parent\n * element is rendered, it will be passed as an argument to\n * renderer.render\n *\n * @param attrs - attributes that will assigned to the\n * parent element\n *\n * @param renderer - an object with render and unrender\n * functions, each of which should take a single argument of type\n * HTMLElement and return nothing. If null, the parent element\n * will be rendered barren without any children.\n */\n constructor(tag, attrs, renderer) {\n super(tag, attrs, [], renderer || undefined);\n }\n}\nfunction h(tag) {\n let attrs = {};\n let renderer;\n let children = [];\n for (let i = 1, n = arguments.length; i < n; ++i) {\n // eslint-disable-next-line prefer-rest-params\n let arg = arguments[i];\n if (typeof arg === 'string') {\n children.push(new VirtualText(arg));\n }\n else if (arg instanceof VirtualText) {\n children.push(arg);\n }\n else if (arg instanceof VirtualElement) {\n children.push(arg);\n }\n else if (arg instanceof Array) {\n extend(children, arg);\n }\n else if ((i === 1 || i === 2) && arg && typeof arg === 'object') {\n if ('render' in arg) {\n renderer = arg;\n }\n else {\n attrs = arg;\n }\n }\n }\n return new VirtualElement(tag, attrs, children, renderer);\n function extend(array, values) {\n for (let child of values) {\n if (typeof child === 'string') {\n array.push(new VirtualText(child));\n }\n else if (child instanceof VirtualText) {\n array.push(child);\n }\n else if (child instanceof VirtualElement) {\n array.push(child);\n }\n }\n }\n}\n/**\n * The namespace for the `h` function statics.\n */\n(function (h) {\n h.a = h.bind(undefined, 'a');\n h.abbr = h.bind(undefined, 'abbr');\n h.address = h.bind(undefined, 'address');\n h.area = h.bind(undefined, 'area');\n h.article = h.bind(undefined, 'article');\n h.aside = h.bind(undefined, 'aside');\n h.audio = h.bind(undefined, 'audio');\n h.b = h.bind(undefined, 'b');\n h.bdi = h.bind(undefined, 'bdi');\n h.bdo = h.bind(undefined, 'bdo');\n h.blockquote = h.bind(undefined, 'blockquote');\n h.br = h.bind(undefined, 'br');\n h.button = h.bind(undefined, 'button');\n h.canvas = h.bind(undefined, 'canvas');\n h.caption = h.bind(undefined, 'caption');\n h.cite = h.bind(undefined, 'cite');\n h.code = h.bind(undefined, 'code');\n h.col = h.bind(undefined, 'col');\n h.colgroup = h.bind(undefined, 'colgroup');\n h.data = h.bind(undefined, 'data');\n h.datalist = h.bind(undefined, 'datalist');\n h.dd = h.bind(undefined, 'dd');\n h.del = h.bind(undefined, 'del');\n h.dfn = h.bind(undefined, 'dfn');\n h.div = h.bind(undefined, 'div');\n h.dl = h.bind(undefined, 'dl');\n h.dt = h.bind(undefined, 'dt');\n h.em = h.bind(undefined, 'em');\n h.embed = h.bind(undefined, 'embed');\n h.fieldset = h.bind(undefined, 'fieldset');\n h.figcaption = h.bind(undefined, 'figcaption');\n h.figure = h.bind(undefined, 'figure');\n h.footer = h.bind(undefined, 'footer');\n h.form = h.bind(undefined, 'form');\n h.h1 = h.bind(undefined, 'h1');\n h.h2 = h.bind(undefined, 'h2');\n h.h3 = h.bind(undefined, 'h3');\n h.h4 = h.bind(undefined, 'h4');\n h.h5 = h.bind(undefined, 'h5');\n h.h6 = h.bind(undefined, 'h6');\n h.header = h.bind(undefined, 'header');\n h.hr = h.bind(undefined, 'hr');\n h.i = h.bind(undefined, 'i');\n h.iframe = h.bind(undefined, 'iframe');\n h.img = h.bind(undefined, 'img');\n h.input = h.bind(undefined, 'input');\n h.ins = h.bind(undefined, 'ins');\n h.kbd = h.bind(undefined, 'kbd');\n h.label = h.bind(undefined, 'label');\n h.legend = h.bind(undefined, 'legend');\n h.li = h.bind(undefined, 'li');\n h.main = h.bind(undefined, 'main');\n h.map = h.bind(undefined, 'map');\n h.mark = h.bind(undefined, 'mark');\n h.meter = h.bind(undefined, 'meter');\n h.nav = h.bind(undefined, 'nav');\n h.noscript = h.bind(undefined, 'noscript');\n h.object = h.bind(undefined, 'object');\n h.ol = h.bind(undefined, 'ol');\n h.optgroup = h.bind(undefined, 'optgroup');\n h.option = h.bind(undefined, 'option');\n h.output = h.bind(undefined, 'output');\n h.p = h.bind(undefined, 'p');\n h.param = h.bind(undefined, 'param');\n h.pre = h.bind(undefined, 'pre');\n h.progress = h.bind(undefined, 'progress');\n h.q = h.bind(undefined, 'q');\n h.rp = h.bind(undefined, 'rp');\n h.rt = h.bind(undefined, 'rt');\n h.ruby = h.bind(undefined, 'ruby');\n h.s = h.bind(undefined, 's');\n h.samp = h.bind(undefined, 'samp');\n h.section = h.bind(undefined, 'section');\n h.select = h.bind(undefined, 'select');\n h.small = h.bind(undefined, 'small');\n h.source = h.bind(undefined, 'source');\n h.span = h.bind(undefined, 'span');\n h.strong = h.bind(undefined, 'strong');\n h.sub = h.bind(undefined, 'sub');\n h.summary = h.bind(undefined, 'summary');\n h.sup = h.bind(undefined, 'sup');\n h.table = h.bind(undefined, 'table');\n h.tbody = h.bind(undefined, 'tbody');\n h.td = h.bind(undefined, 'td');\n h.textarea = h.bind(undefined, 'textarea');\n h.tfoot = h.bind(undefined, 'tfoot');\n h.th = h.bind(undefined, 'th');\n h.thead = h.bind(undefined, 'thead');\n h.time = h.bind(undefined, 'time');\n h.title = h.bind(undefined, 'title');\n h.tr = h.bind(undefined, 'tr');\n h.track = h.bind(undefined, 'track');\n h.u = h.bind(undefined, 'u');\n h.ul = h.bind(undefined, 'ul');\n h.var_ = h.bind(undefined, 'var');\n h.video = h.bind(undefined, 'video');\n h.wbr = h.bind(undefined, 'wbr');\n})(h || (h = {}));\nfunction hpass(tag) {\n let attrs = {};\n let renderer = null;\n if (arguments.length === 2) {\n // eslint-disable-next-line prefer-rest-params\n const arg = arguments[1];\n if ('render' in arg) {\n renderer = arg;\n }\n else {\n attrs = arg;\n }\n }\n else if (arguments.length === 3) {\n // eslint-disable-next-line prefer-rest-params\n attrs = arguments[1];\n // eslint-disable-next-line prefer-rest-params\n renderer = arguments[2];\n }\n else if (arguments.length > 3) {\n throw new Error('hpass() should be called with 1, 2, or 3 arguments');\n }\n return new VirtualElementPass(tag, attrs, renderer);\n}\n/**\n * The namespace for the virtual DOM rendering functions.\n */\nvar VirtualDOM;\n(function (VirtualDOM) {\n function realize(node) {\n return Private.createDOMNode(node);\n }\n VirtualDOM.realize = realize;\n /**\n * Render virtual DOM content into a host element.\n *\n * @param content - The virtual DOM content to render.\n *\n * @param host - The host element for the rendered content.\n *\n * #### Notes\n * This renders the delta from the previous rendering. It assumes that\n * the content of the host element is not manipulated by external code.\n *\n * Providing `null` content will clear the rendering.\n *\n * Externally modifying the provided content or the host element will\n * result in undefined rendering behavior.\n */\n function render(content, host) {\n let oldContent = Private.hostMap.get(host) || [];\n let newContent = Private.asContentArray(content);\n Private.hostMap.set(host, newContent);\n Private.updateContent(host, oldContent, newContent);\n }\n VirtualDOM.render = render;\n})(VirtualDOM || (VirtualDOM = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of host element to virtual DOM content.\n */\n Private.hostMap = new WeakMap();\n /**\n * Cast a content value to a content array.\n */\n function asContentArray(value) {\n if (!value) {\n return [];\n }\n if (value instanceof Array) {\n return value;\n }\n return [value];\n }\n Private.asContentArray = asContentArray;\n function createDOMNode(node) {\n // eslint-disable-next-line prefer-rest-params\n let host = arguments[1] || null;\n // eslint-disable-next-line prefer-rest-params\n const before = arguments[2] || null;\n if (host) {\n host.insertBefore(createDOMNode(node), before);\n }\n else {\n // Create a text node for a virtual text node.\n if (node.type === 'text') {\n return document.createTextNode(node.content);\n }\n // Create the HTML element with the specified tag.\n host = document.createElement(node.tag);\n // Add the attributes for the new element.\n addAttrs(host, node.attrs);\n if (node.renderer) {\n node.renderer.render(host, {\n attrs: node.attrs,\n children: node.children\n });\n return host;\n }\n // Recursively populate the element with child content.\n for (let i = 0, n = node.children.length; i < n; ++i) {\n createDOMNode(node.children[i], host);\n }\n }\n return host;\n }\n Private.createDOMNode = createDOMNode;\n /**\n * Update a host element with the delta of the virtual content.\n *\n * This is the core \"diff\" algorithm. There is no explicit \"patch\"\n * phase. The host is patched at each step as the diff progresses.\n */\n function updateContent(host, oldContent, newContent) {\n // Bail early if the content is identical.\n if (oldContent === newContent) {\n return;\n }\n // Collect the old keyed elems into a mapping.\n let oldKeyed = collectKeys(host, oldContent);\n // Create a copy of the old content which can be modified in-place.\n let oldCopy = oldContent.slice();\n // Update the host with the new content. The diff always proceeds\n // forward and never modifies a previously visited index. The old\n // copy array is modified in-place to reflect the changes made to\n // the host children. This causes the stale nodes to be pushed to\n // the end of the host node and removed at the end of the loop.\n let currElem = host.firstChild;\n let newCount = newContent.length;\n for (let i = 0; i < newCount; ++i) {\n // If the old content is exhausted, create a new node.\n if (i >= oldCopy.length) {\n createDOMNode(newContent[i], host);\n continue;\n }\n // Lookup the old and new virtual nodes.\n let oldVNode = oldCopy[i];\n let newVNode = newContent[i];\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // Handle the simplest case of in-place text update first.\n if (oldVNode.type === 'text' && newVNode.type === 'text') {\n // Avoid spurious updates for performance.\n if (currElem.textContent !== newVNode.content) {\n currElem.textContent = newVNode.content;\n }\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old or new node is a text node, the other node is now\n // known to be an element node, so create and insert a new node.\n if (oldVNode.type === 'text' || newVNode.type === 'text') {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // If the old XOR new node has a custom renderer,\n // create and insert a new node.\n if (!oldVNode.renderer != !newVNode.renderer) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // At this point, both nodes are known to be element nodes.\n // If the new elem is keyed, move an old keyed elem to the proper\n // location before proceeding with the diff. The search can start\n // at the current index, since the unmatched old keyed elems are\n // pushed forward in the old copy array.\n let newKey = newVNode.attrs.key;\n if (newKey && newKey in oldKeyed) {\n let pair = oldKeyed[newKey];\n if (pair.vNode !== oldVNode) {\n ArrayExt.move(oldCopy, oldCopy.indexOf(pair.vNode, i + 1), i);\n host.insertBefore(pair.element, currElem);\n oldVNode = pair.vNode;\n currElem = pair.element;\n }\n }\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old elem is keyed and does not match the new elem key,\n // create a new node. This is necessary since the old keyed elem\n // may be matched at a later point in the diff.\n let oldKey = oldVNode.attrs.key;\n if (oldKey && oldKey !== newKey) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // If the tags are different, create a new node.\n if (oldVNode.tag !== newVNode.tag) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // At this point, the element can be updated in-place.\n // Update the element attributes.\n updateAttrs(currElem, oldVNode.attrs, newVNode.attrs);\n // Update the element content.\n if (newVNode.renderer) {\n newVNode.renderer.render(currElem, {\n attrs: newVNode.attrs,\n children: newVNode.children\n });\n }\n else {\n updateContent(currElem, oldVNode.children, newVNode.children);\n }\n // Step to the next sibling element.\n currElem = currElem.nextSibling;\n }\n // Cleanup stale DOM\n removeContent(host, oldCopy, newCount, true);\n }\n Private.updateContent = updateContent;\n /**\n * Handle cleanup of stale vdom and its associated DOM. The host node is\n * traversed recursively (in depth-first order), and any explicit cleanup\n * required by a child node is carried out when it is visited (eg if a node\n * has a custom renderer, the renderer.unrender function will be called).\n * Once the subtree beneath each child of host has been completely visited,\n * that child will be removed via a call to host.removeChild.\n */\n function removeContent(host, oldContent, newCount, _sentinel) {\n // Dispose of the old nodes pushed to the end of the host.\n for (let i = oldContent.length - 1; i >= newCount; --i) {\n const oldNode = oldContent[i];\n const child = (_sentinel ? host.lastChild : host.childNodes[i]);\n // recursively clean up host children\n if (oldNode.type === 'text') ;\n else if (oldNode.renderer && oldNode.renderer.unrender) {\n oldNode.renderer.unrender(child, {\n attrs: oldNode.attrs,\n children: oldNode.children\n });\n }\n else {\n removeContent(child, oldNode.children, 0, false);\n }\n if (_sentinel) {\n host.removeChild(child);\n }\n }\n }\n /**\n * A set of special-cased attribute names.\n */\n const specialAttrs = {\n key: true,\n className: true,\n htmlFor: true,\n dataset: true,\n style: true\n };\n /**\n * Add element attributes to a newly created HTML element.\n */\n function addAttrs(element, attrs) {\n // Add the inline event listeners and node attributes.\n for (let name in attrs) {\n if (name in specialAttrs) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = attrs[name];\n }\n else {\n element.setAttribute(name, attrs[name]);\n }\n }\n // Add the element `class` attribute.\n if (attrs.className !== undefined) {\n element.setAttribute('class', attrs.className);\n }\n // Add the element `for` attribute.\n if (attrs.htmlFor !== undefined) {\n element.setAttribute('for', attrs.htmlFor);\n }\n // Add the dataset values.\n if (attrs.dataset) {\n addDataset(element, attrs.dataset);\n }\n // Add the inline styles.\n if (attrs.style) {\n addStyle(element, attrs.style);\n }\n }\n /**\n * Update the element attributes of an HTML element.\n */\n function updateAttrs(element, oldAttrs, newAttrs) {\n // Do nothing if the attrs are the same object.\n if (oldAttrs === newAttrs) {\n return;\n }\n // Setup the strongly typed loop variable.\n let name;\n // Remove attributes and listeners which no longer exist.\n for (name in oldAttrs) {\n if (name in specialAttrs || name in newAttrs) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = null;\n }\n else {\n element.removeAttribute(name);\n }\n }\n // Add and update new and existing attributes and listeners.\n for (name in newAttrs) {\n if (name in specialAttrs || oldAttrs[name] === newAttrs[name]) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = newAttrs[name];\n }\n else {\n element.setAttribute(name, newAttrs[name]);\n }\n }\n // Update the element `class` attribute.\n if (oldAttrs.className !== newAttrs.className) {\n if (newAttrs.className !== undefined) {\n element.setAttribute('class', newAttrs.className);\n }\n else {\n element.removeAttribute('class');\n }\n }\n // Add the element `for` attribute.\n if (oldAttrs.htmlFor !== newAttrs.htmlFor) {\n if (newAttrs.htmlFor !== undefined) {\n element.setAttribute('for', newAttrs.htmlFor);\n }\n else {\n element.removeAttribute('for');\n }\n }\n // Update the dataset values.\n if (oldAttrs.dataset !== newAttrs.dataset) {\n updateDataset(element, oldAttrs.dataset || {}, newAttrs.dataset || {});\n }\n // Update the inline styles.\n if (oldAttrs.style !== newAttrs.style) {\n updateStyle(element, oldAttrs.style || {}, newAttrs.style || {});\n }\n }\n /**\n * Add dataset values to a newly created HTML element.\n */\n function addDataset(element, dataset) {\n for (let name in dataset) {\n element.setAttribute(`data-${name}`, dataset[name]);\n }\n }\n /**\n * Update the dataset values of an HTML element.\n */\n function updateDataset(element, oldDataset, newDataset) {\n for (let name in oldDataset) {\n if (!(name in newDataset)) {\n element.removeAttribute(`data-${name}`);\n }\n }\n for (let name in newDataset) {\n if (oldDataset[name] !== newDataset[name]) {\n element.setAttribute(`data-${name}`, newDataset[name]);\n }\n }\n }\n /**\n * Add inline style values to a newly created HTML element.\n */\n function addStyle(element, style) {\n let elemStyle = element.style;\n let name;\n for (name in style) {\n elemStyle[name] = style[name];\n }\n }\n /**\n * Update the inline style values of an HTML element.\n */\n function updateStyle(element, oldStyle, newStyle) {\n let elemStyle = element.style;\n let name;\n for (name in oldStyle) {\n if (!(name in newStyle)) {\n elemStyle[name] = '';\n }\n }\n for (name in newStyle) {\n if (oldStyle[name] !== newStyle[name]) {\n elemStyle[name] = newStyle[name];\n }\n }\n }\n /**\n * Collect a mapping of keyed elements for the host content.\n */\n function collectKeys(host, content) {\n let node = host.firstChild;\n let keyMap = Object.create(null);\n for (let vNode of content) {\n if (vNode.type === 'element' && vNode.attrs.key) {\n keyMap[vNode.attrs.key] = { vNode, element: node };\n }\n node = node.nextSibling;\n }\n return keyMap;\n }\n})(Private || (Private = {}));\n\nexport { VirtualDOM, VirtualElement, VirtualElementPass, VirtualText, h, hpass };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt, StringExt, empty, find, max } from '@lumino/algorithm';\nimport { UUID, JSONExt, MimeData } from '@lumino/coreutils';\nimport { ElementExt, Selector, Platform } from '@lumino/domutils';\nimport { Message, ConflatableMessage, MessageLoop } from '@lumino/messaging';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Signal } from '@lumino/signaling';\nimport { Drag } from '@lumino/dragdrop';\nimport { CommandRegistry } from '@lumino/commands';\nimport { VirtualDOM, h } from '@lumino/virtualdom';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { getKeyboardLayout } from '@lumino/keyboard';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A sizer object for use with the box engine layout functions.\n *\n * #### Notes\n * A box sizer holds the geometry information for an object along an\n * arbitrary layout orientation.\n *\n * For best performance, this class should be treated as a raw data\n * struct. It should not typically be subclassed.\n */\nclass BoxSizer {\n constructor() {\n /**\n * The preferred size for the sizer.\n *\n * #### Notes\n * The sizer will be given this initial size subject to its size\n * bounds. The sizer will not deviate from this size unless such\n * deviation is required to fit into the available layout space.\n *\n * There is no limit to this value, but it will be clamped to the\n * bounds defined by {@link minSize} and {@link maxSize}.\n *\n * The default value is `0`.\n */\n this.sizeHint = 0;\n /**\n * The minimum size of the sizer.\n *\n * #### Notes\n * The sizer will never be sized less than this value, even if\n * it means the sizer will overflow the available layout space.\n *\n * It is assumed that this value lies in the range `[0, Infinity)`\n * and that it is `<=` to {@link maxSize}. Failure to adhere to this\n * constraint will yield undefined results.\n *\n * The default value is `0`.\n */\n this.minSize = 0;\n /**\n * The maximum size of the sizer.\n *\n * #### Notes\n * The sizer will never be sized greater than this value, even if\n * it means the sizer will underflow the available layout space.\n *\n * It is assumed that this value lies in the range `[0, Infinity]`\n * and that it is `>=` to {@link minSize}. Failure to adhere to this\n * constraint will yield undefined results.\n *\n * The default value is `Infinity`.\n */\n this.maxSize = Infinity;\n /**\n * The stretch factor for the sizer.\n *\n * #### Notes\n * This controls how much the sizer stretches relative to its sibling\n * sizers when layout space is distributed. A stretch factor of zero\n * is special and will cause the sizer to only be resized after all\n * other sizers with a stretch factor greater than zero have been\n * resized to their limits.\n *\n * It is assumed that this value is an integer that lies in the range\n * `[0, Infinity)`. Failure to adhere to this constraint will yield\n * undefined results.\n *\n * The default value is `1`.\n */\n this.stretch = 1;\n /**\n * The computed size of the sizer.\n *\n * #### Notes\n * This value is the output of a call to {@link BoxEngine.calc}. It represents\n * the computed size for the object along the layout orientation,\n * and will always lie in the range `[minSize, maxSize]`.\n *\n * This value is output only.\n *\n * Changing this value will have no effect.\n */\n this.size = 0;\n /**\n * An internal storage property for the layout algorithm.\n *\n * #### Notes\n * This value is used as temporary storage by the layout algorithm.\n *\n * Changing this value will have no effect.\n */\n this.done = false;\n }\n}\n/**\n * The namespace for the box engine layout functions.\n */\nvar BoxEngine;\n(function (BoxEngine) {\n /**\n * Calculate the optimal layout sizes for a sequence of box sizers.\n *\n * This distributes the available layout space among the box sizers\n * according to the following algorithm:\n *\n * 1. Initialize the sizers's size to its size hint and compute the\n * sums for each of size hint, min size, and max size.\n *\n * 2. If the total size hint equals the available space, return.\n *\n * 3. If the available space is less than the total min size, set all\n * sizers to their min size and return.\n *\n * 4. If the available space is greater than the total max size, set\n * all sizers to their max size and return.\n *\n * 5. If the layout space is less than the total size hint, distribute\n * the negative delta as follows:\n *\n * a. Shrink each sizer with a stretch factor greater than zero by\n * an amount proportional to the negative space and the sum of\n * stretch factors. If the sizer reaches its min size, remove\n * it and its stretch factor from the computation.\n *\n * b. If after adjusting all stretch sizers there remains negative\n * space, distribute the space equally among the sizers with a\n * stretch factor of zero. If a sizer reaches its min size,\n * remove it from the computation.\n *\n * 6. If the layout space is greater than the total size hint,\n * distribute the positive delta as follows:\n *\n * a. Expand each sizer with a stretch factor greater than zero by\n * an amount proportional to the postive space and the sum of\n * stretch factors. If the sizer reaches its max size, remove\n * it and its stretch factor from the computation.\n *\n * b. If after adjusting all stretch sizers there remains positive\n * space, distribute the space equally among the sizers with a\n * stretch factor of zero. If a sizer reaches its max size,\n * remove it from the computation.\n *\n * 7. return\n *\n * @param sizers - The sizers for a particular layout line.\n *\n * @param space - The available layout space for the sizers.\n *\n * @returns The delta between the provided available space and the\n * actual consumed space. This value will be zero if the sizers\n * can be adjusted to fit, negative if the available space is too\n * small, and positive if the available space is too large.\n *\n * #### Notes\n * The {@link BoxSizer.size} of each sizer is updated with the computed size.\n *\n * This function can be called at any time to recompute the layout for\n * an existing sequence of sizers. The previously computed results will\n * have no effect on the new output. It is therefore not necessary to\n * create new sizer objects on each resize event.\n */\n function calc(sizers, space) {\n // Bail early if there is nothing to do.\n let count = sizers.length;\n if (count === 0) {\n return space;\n }\n // Setup the size and stretch counters.\n let totalMin = 0;\n let totalMax = 0;\n let totalSize = 0;\n let totalStretch = 0;\n let stretchCount = 0;\n // Setup the sizers and compute the totals.\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n let min = sizer.minSize;\n let max = sizer.maxSize;\n let hint = sizer.sizeHint;\n sizer.done = false;\n sizer.size = Math.max(min, Math.min(hint, max));\n totalSize += sizer.size;\n totalMin += min;\n totalMax += max;\n if (sizer.stretch > 0) {\n totalStretch += sizer.stretch;\n stretchCount++;\n }\n }\n // If the space is equal to the total size, return early.\n if (space === totalSize) {\n return 0;\n }\n // If the space is less than the total min, minimize each sizer.\n if (space <= totalMin) {\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n sizer.size = sizer.minSize;\n }\n return space - totalMin;\n }\n // If the space is greater than the total max, maximize each sizer.\n if (space >= totalMax) {\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n sizer.size = sizer.maxSize;\n }\n return space - totalMax;\n }\n // The loops below perform sub-pixel precision sizing. A near zero\n // value is used for compares instead of zero to ensure that the\n // loop terminates when the subdivided space is reasonably small.\n let nearZero = 0.01;\n // A counter which is decremented each time a sizer is resized to\n // its limit. This ensures the loops terminate even if there is\n // space remaining to distribute.\n let notDoneCount = count;\n // Distribute negative delta space.\n if (space < totalSize) {\n // Shrink each stretchable sizer by an amount proportional to its\n // stretch factor. If a sizer reaches its min size it's marked as\n // done. The loop progresses in phases where each sizer is given\n // a chance to consume its fair share for the pass, regardless of\n // whether a sizer before it reached its limit. This continues\n // until the stretchable sizers or the free space is exhausted.\n let freeSpace = totalSize - space;\n while (stretchCount > 0 && freeSpace > nearZero) {\n let distSpace = freeSpace;\n let distStretch = totalStretch;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done || sizer.stretch === 0) {\n continue;\n }\n let amt = (sizer.stretch * distSpace) / distStretch;\n if (sizer.size - amt <= sizer.minSize) {\n freeSpace -= sizer.size - sizer.minSize;\n totalStretch -= sizer.stretch;\n sizer.size = sizer.minSize;\n sizer.done = true;\n notDoneCount--;\n stretchCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size -= amt;\n }\n }\n }\n // Distribute any remaining space evenly among the non-stretchable\n // sizers. This progresses in phases in the same manner as above.\n while (notDoneCount > 0 && freeSpace > nearZero) {\n let amt = freeSpace / notDoneCount;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done) {\n continue;\n }\n if (sizer.size - amt <= sizer.minSize) {\n freeSpace -= sizer.size - sizer.minSize;\n sizer.size = sizer.minSize;\n sizer.done = true;\n notDoneCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size -= amt;\n }\n }\n }\n }\n // Distribute positive delta space.\n else {\n // Expand each stretchable sizer by an amount proportional to its\n // stretch factor. If a sizer reaches its max size it's marked as\n // done. The loop progresses in phases where each sizer is given\n // a chance to consume its fair share for the pass, regardless of\n // whether a sizer before it reached its limit. This continues\n // until the stretchable sizers or the free space is exhausted.\n let freeSpace = space - totalSize;\n while (stretchCount > 0 && freeSpace > nearZero) {\n let distSpace = freeSpace;\n let distStretch = totalStretch;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done || sizer.stretch === 0) {\n continue;\n }\n let amt = (sizer.stretch * distSpace) / distStretch;\n if (sizer.size + amt >= sizer.maxSize) {\n freeSpace -= sizer.maxSize - sizer.size;\n totalStretch -= sizer.stretch;\n sizer.size = sizer.maxSize;\n sizer.done = true;\n notDoneCount--;\n stretchCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size += amt;\n }\n }\n }\n // Distribute any remaining space evenly among the non-stretchable\n // sizers. This progresses in phases in the same manner as above.\n while (notDoneCount > 0 && freeSpace > nearZero) {\n let amt = freeSpace / notDoneCount;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done) {\n continue;\n }\n if (sizer.size + amt >= sizer.maxSize) {\n freeSpace -= sizer.maxSize - sizer.size;\n sizer.size = sizer.maxSize;\n sizer.done = true;\n notDoneCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size += amt;\n }\n }\n }\n }\n // Indicate that the consumed space equals the available space.\n return 0;\n }\n BoxEngine.calc = calc;\n /**\n * Adjust a sizer by a delta and update its neighbors accordingly.\n *\n * @param sizers - The sizers which should be adjusted.\n *\n * @param index - The index of the sizer to grow.\n *\n * @param delta - The amount to adjust the sizer, positive or negative.\n *\n * #### Notes\n * This will adjust the indicated sizer by the specified amount, along\n * with the sizes of the appropriate neighbors, subject to the limits\n * specified by each of the sizers.\n *\n * This is useful when implementing box layouts where the boundaries\n * between the sizers are interactively adjustable by the user.\n */\n function adjust(sizers, index, delta) {\n // Bail early when there is nothing to do.\n if (sizers.length === 0 || delta === 0) {\n return;\n }\n // Dispatch to the proper implementation.\n if (delta > 0) {\n growSizer(sizers, index, delta);\n }\n else {\n shrinkSizer(sizers, index, -delta);\n }\n }\n BoxEngine.adjust = adjust;\n /**\n * Grow a sizer by a positive delta and adjust neighbors.\n */\n function growSizer(sizers, index, delta) {\n // Compute how much the items to the left can expand.\n let growLimit = 0;\n for (let i = 0; i <= index; ++i) {\n let sizer = sizers[i];\n growLimit += sizer.maxSize - sizer.size;\n }\n // Compute how much the items to the right can shrink.\n let shrinkLimit = 0;\n for (let i = index + 1, n = sizers.length; i < n; ++i) {\n let sizer = sizers[i];\n shrinkLimit += sizer.size - sizer.minSize;\n }\n // Clamp the delta adjustment to the limits.\n delta = Math.min(delta, growLimit, shrinkLimit);\n // Grow the sizers to the left by the delta.\n let grow = delta;\n for (let i = index; i >= 0 && grow > 0; --i) {\n let sizer = sizers[i];\n let limit = sizer.maxSize - sizer.size;\n if (limit >= grow) {\n sizer.sizeHint = sizer.size + grow;\n grow = 0;\n }\n else {\n sizer.sizeHint = sizer.size + limit;\n grow -= limit;\n }\n }\n // Shrink the sizers to the right by the delta.\n let shrink = delta;\n for (let i = index + 1, n = sizers.length; i < n && shrink > 0; ++i) {\n let sizer = sizers[i];\n let limit = sizer.size - sizer.minSize;\n if (limit >= shrink) {\n sizer.sizeHint = sizer.size - shrink;\n shrink = 0;\n }\n else {\n sizer.sizeHint = sizer.size - limit;\n shrink -= limit;\n }\n }\n }\n /**\n * Shrink a sizer by a positive delta and adjust neighbors.\n */\n function shrinkSizer(sizers, index, delta) {\n // Compute how much the items to the right can expand.\n let growLimit = 0;\n for (let i = index + 1, n = sizers.length; i < n; ++i) {\n let sizer = sizers[i];\n growLimit += sizer.maxSize - sizer.size;\n }\n // Compute how much the items to the left can shrink.\n let shrinkLimit = 0;\n for (let i = 0; i <= index; ++i) {\n let sizer = sizers[i];\n shrinkLimit += sizer.size - sizer.minSize;\n }\n // Clamp the delta adjustment to the limits.\n delta = Math.min(delta, growLimit, shrinkLimit);\n // Grow the sizers to the right by the delta.\n let grow = delta;\n for (let i = index + 1, n = sizers.length; i < n && grow > 0; ++i) {\n let sizer = sizers[i];\n let limit = sizer.maxSize - sizer.size;\n if (limit >= grow) {\n sizer.sizeHint = sizer.size + grow;\n grow = 0;\n }\n else {\n sizer.sizeHint = sizer.size + limit;\n grow -= limit;\n }\n }\n // Shrink the sizers to the left by the delta.\n let shrink = delta;\n for (let i = index; i >= 0 && shrink > 0; --i) {\n let sizer = sizers[i];\n let limit = sizer.size - sizer.minSize;\n if (limit >= shrink) {\n sizer.sizeHint = sizer.size - shrink;\n shrink = 0;\n }\n else {\n sizer.sizeHint = sizer.size - limit;\n shrink -= limit;\n }\n }\n }\n})(BoxEngine || (BoxEngine = {}));\n\n/**\n * An object which holds data related to an object's title.\n *\n * #### Notes\n * A title object is intended to hold the data necessary to display a\n * header for a particular object. A common example is the `TabPanel`,\n * which uses the widget title to populate the tab for a child widget.\n *\n * It is the responsibility of the owner to call the title disposal.\n */\nclass Title {\n /**\n * Construct a new title.\n *\n * @param options - The options for initializing the title.\n */\n constructor(options) {\n this._label = '';\n this._caption = '';\n this._mnemonic = -1;\n this._icon = undefined;\n this._iconClass = '';\n this._iconLabel = '';\n this._className = '';\n this._closable = false;\n this._changed = new Signal(this);\n this._isDisposed = false;\n this.owner = options.owner;\n if (options.label !== undefined) {\n this._label = options.label;\n }\n if (options.mnemonic !== undefined) {\n this._mnemonic = options.mnemonic;\n }\n if (options.icon !== undefined) {\n this._icon = options.icon;\n }\n if (options.iconClass !== undefined) {\n this._iconClass = options.iconClass;\n }\n if (options.iconLabel !== undefined) {\n this._iconLabel = options.iconLabel;\n }\n if (options.caption !== undefined) {\n this._caption = options.caption;\n }\n if (options.className !== undefined) {\n this._className = options.className;\n }\n if (options.closable !== undefined) {\n this._closable = options.closable;\n }\n this._dataset = options.dataset || {};\n }\n /**\n * A signal emitted when the state of the title changes.\n */\n get changed() {\n return this._changed;\n }\n /**\n * Get the label for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get label() {\n return this._label;\n }\n /**\n * Set the label for the title.\n */\n set label(value) {\n if (this._label === value) {\n return;\n }\n this._label = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the mnemonic index for the title.\n *\n * #### Notes\n * The default value is `-1`.\n */\n get mnemonic() {\n return this._mnemonic;\n }\n /**\n * Set the mnemonic index for the title.\n */\n set mnemonic(value) {\n if (this._mnemonic === value) {\n return;\n }\n this._mnemonic = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon renderer for the title.\n *\n * #### Notes\n * The default value is undefined.\n */\n get icon() {\n return this._icon;\n }\n /**\n * Set the icon renderer for the title.\n *\n * #### Notes\n * A renderer is an object that supplies a render and unrender function.\n */\n set icon(value) {\n if (this._icon === value) {\n return;\n }\n this._icon = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon class name for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get iconClass() {\n return this._iconClass;\n }\n /**\n * Set the icon class name for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set iconClass(value) {\n if (this._iconClass === value) {\n return;\n }\n this._iconClass = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon label for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get iconLabel() {\n return this._iconLabel;\n }\n /**\n * Set the icon label for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set iconLabel(value) {\n if (this._iconLabel === value) {\n return;\n }\n this._iconLabel = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the caption for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get caption() {\n return this._caption;\n }\n /**\n * Set the caption for the title.\n */\n set caption(value) {\n if (this._caption === value) {\n return;\n }\n this._caption = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the extra class name for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get className() {\n return this._className;\n }\n /**\n * Set the extra class name for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set className(value) {\n if (this._className === value) {\n return;\n }\n this._className = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the closable state for the title.\n *\n * #### Notes\n * The default value is `false`.\n */\n get closable() {\n return this._closable;\n }\n /**\n * Set the closable state for the title.\n *\n * #### Notes\n * This controls the presence of a close icon when applicable.\n */\n set closable(value) {\n if (this._closable === value) {\n return;\n }\n this._closable = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the dataset for the title.\n *\n * #### Notes\n * The default value is an empty dataset.\n */\n get dataset() {\n return this._dataset;\n }\n /**\n * Set the dataset for the title.\n *\n * #### Notes\n * This controls the data attributes when applicable.\n */\n set dataset(value) {\n if (this._dataset === value) {\n return;\n }\n this._dataset = value;\n this._changed.emit(undefined);\n }\n /**\n * Test whether the title has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the resources held by the title.\n *\n * #### Notes\n * It is the responsibility of the owner to call the title disposal.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n Signal.clearData(this);\n }\n}\n\n/**\n * The base class of the lumino widget hierarchy.\n *\n * #### Notes\n * This class will typically be subclassed in order to create a useful\n * widget. However, it can be used directly to host externally created\n * content.\n */\nclass Widget {\n /**\n * Construct a new widget.\n *\n * @param options - The options for initializing the widget.\n */\n constructor(options = {}) {\n this._flags = 0;\n this._layout = null;\n this._parent = null;\n this._disposed = new Signal(this);\n this._hiddenMode = Widget.HiddenMode.Display;\n this.node = Private$j.createNode(options);\n this.addClass('lm-Widget');\n }\n /**\n * Dispose of the widget and its descendant widgets.\n *\n * #### Notes\n * It is unsafe to use the widget after it has been disposed.\n *\n * All calls made to this method after the first are a no-op.\n */\n dispose() {\n // Do nothing if the widget is already disposed.\n if (this.isDisposed) {\n return;\n }\n // Set the disposed flag and emit the disposed signal.\n this.setFlag(Widget.Flag.IsDisposed);\n this._disposed.emit(undefined);\n // Remove or detach the widget if necessary.\n if (this.parent) {\n this.parent = null;\n }\n else if (this.isAttached) {\n Widget.detach(this);\n }\n // Dispose of the widget layout.\n if (this._layout) {\n this._layout.dispose();\n this._layout = null;\n }\n // Dispose the title\n this.title.dispose();\n // Clear the extra data associated with the widget.\n Signal.clearData(this);\n MessageLoop.clearData(this);\n AttachedProperty.clearData(this);\n }\n /**\n * A signal emitted when the widget is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Test whether the widget has been disposed.\n */\n get isDisposed() {\n return this.testFlag(Widget.Flag.IsDisposed);\n }\n /**\n * Test whether the widget's node is attached to the DOM.\n */\n get isAttached() {\n return this.testFlag(Widget.Flag.IsAttached);\n }\n /**\n * Test whether the widget is explicitly hidden.\n */\n get isHidden() {\n return this.testFlag(Widget.Flag.IsHidden);\n }\n /**\n * Test whether the widget is visible.\n *\n * #### Notes\n * A widget is visible when it is attached to the DOM, is not\n * explicitly hidden, and has no explicitly hidden ancestors.\n */\n get isVisible() {\n return this.testFlag(Widget.Flag.IsVisible);\n }\n /**\n * The title object for the widget.\n *\n * #### Notes\n * The title object is used by some container widgets when displaying\n * the widget alongside some title, such as a tab panel or side bar.\n *\n * Since not all widgets will use the title, it is created on demand.\n *\n * The `owner` property of the title is set to this widget.\n */\n get title() {\n return Private$j.titleProperty.get(this);\n }\n /**\n * Get the id of the widget's DOM node.\n */\n get id() {\n return this.node.id;\n }\n /**\n * Set the id of the widget's DOM node.\n */\n set id(value) {\n this.node.id = value;\n }\n /**\n * The dataset for the widget's DOM node.\n */\n get dataset() {\n return this.node.dataset;\n }\n /**\n * Get the method for hiding the widget.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n /**\n * Set the method for hiding the widget.\n */\n set hiddenMode(value) {\n if (this._hiddenMode === value) {\n return;\n }\n if (this.isHidden) {\n // Reset styles set by previous mode.\n this._toggleHidden(false);\n }\n if (value == Widget.HiddenMode.Scale) {\n this.node.style.willChange = 'transform';\n }\n else {\n this.node.style.willChange = 'auto';\n }\n this._hiddenMode = value;\n if (this.isHidden) {\n // Set styles for new mode.\n this._toggleHidden(true);\n }\n }\n /**\n * Get the parent of the widget.\n */\n get parent() {\n return this._parent;\n }\n /**\n * Set the parent of the widget.\n *\n * #### Notes\n * Children are typically added to a widget by using a layout, which\n * means user code will not normally set the parent widget directly.\n *\n * The widget will be automatically removed from its old parent.\n *\n * This is a no-op if there is no effective parent change.\n */\n set parent(value) {\n if (this._parent === value) {\n return;\n }\n if (value && this.contains(value)) {\n throw new Error('Invalid parent widget.');\n }\n if (this._parent && !this._parent.isDisposed) {\n let msg = new Widget.ChildMessage('child-removed', this);\n MessageLoop.sendMessage(this._parent, msg);\n }\n this._parent = value;\n if (this._parent && !this._parent.isDisposed) {\n let msg = new Widget.ChildMessage('child-added', this);\n MessageLoop.sendMessage(this._parent, msg);\n }\n if (!this.isDisposed) {\n MessageLoop.sendMessage(this, Widget.Msg.ParentChanged);\n }\n }\n /**\n * Get the layout for the widget.\n */\n get layout() {\n return this._layout;\n }\n /**\n * Set the layout for the widget.\n *\n * #### Notes\n * The layout is single-use only. It cannot be changed after the\n * first assignment.\n *\n * The layout is disposed automatically when the widget is disposed.\n */\n set layout(value) {\n if (this._layout === value) {\n return;\n }\n if (this.testFlag(Widget.Flag.DisallowLayout)) {\n throw new Error('Cannot set widget layout.');\n }\n if (this._layout) {\n throw new Error('Cannot change widget layout.');\n }\n if (value.parent) {\n throw new Error('Cannot change layout parent.');\n }\n this._layout = value;\n value.parent = this;\n }\n /**\n * Create an iterator over the widget's children.\n *\n * @returns A new iterator over the children of the widget.\n *\n * #### Notes\n * The widget must have a populated layout in order to have children.\n *\n * If a layout is not installed, the returned iterator will be empty.\n */\n *children() {\n if (this._layout) {\n yield* this._layout;\n }\n }\n /**\n * Test whether a widget is a descendant of this widget.\n *\n * @param widget - The descendant widget of interest.\n *\n * @returns `true` if the widget is a descendant, `false` otherwise.\n */\n contains(widget) {\n for (let value = widget; value; value = value._parent) {\n if (value === this) {\n return true;\n }\n }\n return false;\n }\n /**\n * Test whether the widget's DOM node has the given class name.\n *\n * @param name - The class name of interest.\n *\n * @returns `true` if the node has the class, `false` otherwise.\n */\n hasClass(name) {\n return this.node.classList.contains(name);\n }\n /**\n * Add a class name to the widget's DOM node.\n *\n * @param name - The class name to add to the node.\n *\n * #### Notes\n * If the class name is already added to the node, this is a no-op.\n *\n * The class name must not contain whitespace.\n */\n addClass(name) {\n this.node.classList.add(name);\n }\n /**\n * Remove a class name from the widget's DOM node.\n *\n * @param name - The class name to remove from the node.\n *\n * #### Notes\n * If the class name is not yet added to the node, this is a no-op.\n *\n * The class name must not contain whitespace.\n */\n removeClass(name) {\n this.node.classList.remove(name);\n }\n /**\n * Toggle a class name on the widget's DOM node.\n *\n * @param name - The class name to toggle on the node.\n *\n * @param force - Whether to force add the class (`true`) or force\n * remove the class (`false`). If not provided, the presence of\n * the class will be toggled from its current state.\n *\n * @returns `true` if the class is now present, `false` otherwise.\n *\n * #### Notes\n * The class name must not contain whitespace.\n */\n toggleClass(name, force) {\n if (force === true) {\n this.node.classList.add(name);\n return true;\n }\n if (force === false) {\n this.node.classList.remove(name);\n return false;\n }\n return this.node.classList.toggle(name);\n }\n /**\n * Post an `'update-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n update() {\n MessageLoop.postMessage(this, Widget.Msg.UpdateRequest);\n }\n /**\n * Post a `'fit-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n fit() {\n MessageLoop.postMessage(this, Widget.Msg.FitRequest);\n }\n /**\n * Post an `'activate-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n activate() {\n MessageLoop.postMessage(this, Widget.Msg.ActivateRequest);\n }\n /**\n * Send a `'close-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for sending the message.\n */\n close() {\n MessageLoop.sendMessage(this, Widget.Msg.CloseRequest);\n }\n /**\n * Show the widget and make it visible to its parent widget.\n *\n * #### Notes\n * This causes the {@link isHidden} property to be `false`.\n *\n * If the widget is not explicitly hidden, this is a no-op.\n */\n show() {\n if (!this.testFlag(Widget.Flag.IsHidden)) {\n return;\n }\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.BeforeShow);\n }\n this.clearFlag(Widget.Flag.IsHidden);\n this._toggleHidden(false);\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.AfterShow);\n }\n if (this.parent) {\n let msg = new Widget.ChildMessage('child-shown', this);\n MessageLoop.sendMessage(this.parent, msg);\n }\n }\n /**\n * Hide the widget and make it hidden to its parent widget.\n *\n * #### Notes\n * This causes the {@link isHidden} property to be `true`.\n *\n * If the widget is explicitly hidden, this is a no-op.\n */\n hide() {\n if (this.testFlag(Widget.Flag.IsHidden)) {\n return;\n }\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.BeforeHide);\n }\n this.setFlag(Widget.Flag.IsHidden);\n this._toggleHidden(true);\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.AfterHide);\n }\n if (this.parent) {\n let msg = new Widget.ChildMessage('child-hidden', this);\n MessageLoop.sendMessage(this.parent, msg);\n }\n }\n /**\n * Show or hide the widget according to a boolean value.\n *\n * @param hidden - `true` to hide the widget, or `false` to show it.\n *\n * #### Notes\n * This is a convenience method for `hide()` and `show()`.\n */\n setHidden(hidden) {\n if (hidden) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n /**\n * Test whether the given widget flag is set.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n testFlag(flag) {\n return (this._flags & flag) !== 0;\n }\n /**\n * Set the given widget flag.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n setFlag(flag) {\n this._flags |= flag;\n }\n /**\n * Clear the given widget flag.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n clearFlag(flag) {\n this._flags &= ~flag;\n }\n /**\n * Process a message sent to the widget.\n *\n * @param msg - The message sent to the widget.\n *\n * #### Notes\n * Subclasses may reimplement this method as needed.\n */\n processMessage(msg) {\n switch (msg.type) {\n case 'resize':\n this.notifyLayout(msg);\n this.onResize(msg);\n break;\n case 'update-request':\n this.notifyLayout(msg);\n this.onUpdateRequest(msg);\n break;\n case 'fit-request':\n this.notifyLayout(msg);\n this.onFitRequest(msg);\n break;\n case 'before-show':\n this.notifyLayout(msg);\n this.onBeforeShow(msg);\n break;\n case 'after-show':\n this.setFlag(Widget.Flag.IsVisible);\n this.notifyLayout(msg);\n this.onAfterShow(msg);\n break;\n case 'before-hide':\n this.notifyLayout(msg);\n this.onBeforeHide(msg);\n break;\n case 'after-hide':\n this.clearFlag(Widget.Flag.IsVisible);\n this.notifyLayout(msg);\n this.onAfterHide(msg);\n break;\n case 'before-attach':\n this.notifyLayout(msg);\n this.onBeforeAttach(msg);\n break;\n case 'after-attach':\n if (!this.isHidden && (!this.parent || this.parent.isVisible)) {\n this.setFlag(Widget.Flag.IsVisible);\n }\n this.setFlag(Widget.Flag.IsAttached);\n this.notifyLayout(msg);\n this.onAfterAttach(msg);\n break;\n case 'before-detach':\n this.notifyLayout(msg);\n this.onBeforeDetach(msg);\n break;\n case 'after-detach':\n this.clearFlag(Widget.Flag.IsVisible);\n this.clearFlag(Widget.Flag.IsAttached);\n this.notifyLayout(msg);\n this.onAfterDetach(msg);\n break;\n case 'activate-request':\n this.notifyLayout(msg);\n this.onActivateRequest(msg);\n break;\n case 'close-request':\n this.notifyLayout(msg);\n this.onCloseRequest(msg);\n break;\n case 'child-added':\n this.notifyLayout(msg);\n this.onChildAdded(msg);\n break;\n case 'child-removed':\n this.notifyLayout(msg);\n this.onChildRemoved(msg);\n break;\n default:\n this.notifyLayout(msg);\n break;\n }\n }\n /**\n * Invoke the message processing routine of the widget's layout.\n *\n * @param msg - The message to dispatch to the layout.\n *\n * #### Notes\n * This is a no-op if the widget does not have a layout.\n *\n * This will not typically be called directly by user code.\n */\n notifyLayout(msg) {\n if (this._layout) {\n this._layout.processParentMessage(msg);\n }\n }\n /**\n * A message handler invoked on a `'close-request'` message.\n *\n * #### Notes\n * The default implementation unparents or detaches the widget.\n */\n onCloseRequest(msg) {\n if (this.parent) {\n this.parent = null;\n }\n else if (this.isAttached) {\n Widget.detach(this);\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onResize(msg) { }\n /**\n * A message handler invoked on an `'update-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onUpdateRequest(msg) { }\n /**\n * A message handler invoked on a `'fit-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onFitRequest(msg) { }\n /**\n * A message handler invoked on an `'activate-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onActivateRequest(msg) { }\n /**\n * A message handler invoked on a `'before-show'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeShow(msg) { }\n /**\n * A message handler invoked on an `'after-show'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterShow(msg) { }\n /**\n * A message handler invoked on a `'before-hide'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeHide(msg) { }\n /**\n * A message handler invoked on an `'after-hide'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterHide(msg) { }\n /**\n * A message handler invoked on a `'before-attach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeAttach(msg) { }\n /**\n * A message handler invoked on an `'after-attach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterAttach(msg) { }\n /**\n * A message handler invoked on a `'before-detach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeDetach(msg) { }\n /**\n * A message handler invoked on an `'after-detach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterDetach(msg) { }\n /**\n * A message handler invoked on a `'child-added'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildAdded(msg) { }\n /**\n * A message handler invoked on a `'child-removed'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildRemoved(msg) { }\n _toggleHidden(hidden) {\n if (hidden) {\n switch (this._hiddenMode) {\n case Widget.HiddenMode.Display:\n this.addClass('lm-mod-hidden');\n break;\n case Widget.HiddenMode.Scale:\n this.node.style.transform = 'scale(0)';\n this.node.setAttribute('aria-hidden', 'true');\n break;\n case Widget.HiddenMode.ContentVisibility:\n // @ts-expect-error content-visibility unknown by DOM lib types\n this.node.style.contentVisibility = 'hidden';\n this.node.style.zIndex = '-1';\n break;\n }\n }\n else {\n switch (this._hiddenMode) {\n case Widget.HiddenMode.Display:\n this.removeClass('lm-mod-hidden');\n break;\n case Widget.HiddenMode.Scale:\n this.node.style.transform = '';\n this.node.removeAttribute('aria-hidden');\n break;\n case Widget.HiddenMode.ContentVisibility:\n // @ts-expect-error content-visibility unknown by DOM lib types\n this.node.style.contentVisibility = '';\n this.node.style.zIndex = '';\n break;\n }\n }\n }\n}\n/**\n * The namespace for the `Widget` class statics.\n */\n(function (Widget) {\n (function (HiddenMode) {\n /**\n * Set a `lm-mod-hidden` CSS class to hide the widget using `display:none`\n * CSS from the standard Lumino CSS.\n */\n HiddenMode[HiddenMode[\"Display\"] = 0] = \"Display\";\n /**\n * Hide the widget by setting the `transform` to `'scale(0)'`.\n */\n HiddenMode[HiddenMode[\"Scale\"] = 1] = \"Scale\";\n /**\n *Hide the widget by setting the `content-visibility` to `'hidden'`.\n */\n HiddenMode[HiddenMode[\"ContentVisibility\"] = 2] = \"ContentVisibility\";\n })(Widget.HiddenMode || (Widget.HiddenMode = {}));\n (function (Flag) {\n /**\n * The widget has been disposed.\n */\n Flag[Flag[\"IsDisposed\"] = 1] = \"IsDisposed\";\n /**\n * The widget is attached to the DOM.\n */\n Flag[Flag[\"IsAttached\"] = 2] = \"IsAttached\";\n /**\n * The widget is hidden.\n */\n Flag[Flag[\"IsHidden\"] = 4] = \"IsHidden\";\n /**\n * The widget is visible.\n */\n Flag[Flag[\"IsVisible\"] = 8] = \"IsVisible\";\n /**\n * A layout cannot be set on the widget.\n */\n Flag[Flag[\"DisallowLayout\"] = 16] = \"DisallowLayout\";\n })(Widget.Flag || (Widget.Flag = {}));\n (function (Msg) {\n /**\n * A singleton `'before-show'` message.\n *\n * #### Notes\n * This message is sent to a widget before it becomes visible.\n *\n * This message is **not** sent when the widget is being attached.\n */\n Msg.BeforeShow = new Message('before-show');\n /**\n * A singleton `'after-show'` message.\n *\n * #### Notes\n * This message is sent to a widget after it becomes visible.\n *\n * This message is **not** sent when the widget is being attached.\n */\n Msg.AfterShow = new Message('after-show');\n /**\n * A singleton `'before-hide'` message.\n *\n * #### Notes\n * This message is sent to a widget before it becomes not-visible.\n *\n * This message is **not** sent when the widget is being detached.\n */\n Msg.BeforeHide = new Message('before-hide');\n /**\n * A singleton `'after-hide'` message.\n *\n * #### Notes\n * This message is sent to a widget after it becomes not-visible.\n *\n * This message is **not** sent when the widget is being detached.\n */\n Msg.AfterHide = new Message('after-hide');\n /**\n * A singleton `'before-attach'` message.\n *\n * #### Notes\n * This message is sent to a widget before it is attached.\n */\n Msg.BeforeAttach = new Message('before-attach');\n /**\n * A singleton `'after-attach'` message.\n *\n * #### Notes\n * This message is sent to a widget after it is attached.\n */\n Msg.AfterAttach = new Message('after-attach');\n /**\n * A singleton `'before-detach'` message.\n *\n * #### Notes\n * This message is sent to a widget before it is detached.\n */\n Msg.BeforeDetach = new Message('before-detach');\n /**\n * A singleton `'after-detach'` message.\n *\n * #### Notes\n * This message is sent to a widget after it is detached.\n */\n Msg.AfterDetach = new Message('after-detach');\n /**\n * A singleton `'parent-changed'` message.\n *\n * #### Notes\n * This message is sent to a widget when its parent has changed.\n */\n Msg.ParentChanged = new Message('parent-changed');\n /**\n * A singleton conflatable `'update-request'` message.\n *\n * #### Notes\n * This message can be dispatched to supporting widgets in order to\n * update their content based on the current widget state. Not all\n * widgets will respond to messages of this type.\n *\n * For widgets with a layout, this message will inform the layout to\n * update the position and size of its child widgets.\n */\n Msg.UpdateRequest = new ConflatableMessage('update-request');\n /**\n * A singleton conflatable `'fit-request'` message.\n *\n * #### Notes\n * For widgets with a layout, this message will inform the layout to\n * recalculate its size constraints to fit the space requirements of\n * its child widgets, and to update their position and size. Not all\n * layouts will respond to messages of this type.\n */\n Msg.FitRequest = new ConflatableMessage('fit-request');\n /**\n * A singleton conflatable `'activate-request'` message.\n *\n * #### Notes\n * This message should be dispatched to a widget when it should\n * perform the actions necessary to activate the widget, which\n * may include focusing its node or descendant node.\n */\n Msg.ActivateRequest = new ConflatableMessage('activate-request');\n /**\n * A singleton conflatable `'close-request'` message.\n *\n * #### Notes\n * This message should be dispatched to a widget when it should close\n * and remove itself from the widget hierarchy.\n */\n Msg.CloseRequest = new ConflatableMessage('close-request');\n })(Widget.Msg || (Widget.Msg = {}));\n /**\n * A message class for child related messages.\n */\n class ChildMessage extends Message {\n /**\n * Construct a new child message.\n *\n * @param type - The message type.\n *\n * @param child - The child widget for the message.\n */\n constructor(type, child) {\n super(type);\n this.child = child;\n }\n }\n Widget.ChildMessage = ChildMessage;\n /**\n * A message class for `'resize'` messages.\n */\n class ResizeMessage extends Message {\n /**\n * Construct a new resize message.\n *\n * @param width - The **offset width** of the widget, or `-1` if\n * the width is not known.\n *\n * @param height - The **offset height** of the widget, or `-1` if\n * the height is not known.\n */\n constructor(width, height) {\n super('resize');\n this.width = width;\n this.height = height;\n }\n }\n Widget.ResizeMessage = ResizeMessage;\n /**\n * The namespace for the `ResizeMessage` class statics.\n */\n (function (ResizeMessage) {\n /**\n * A singleton `'resize'` message with an unknown size.\n */\n ResizeMessage.UnknownSize = new ResizeMessage(-1, -1);\n })(ResizeMessage = Widget.ResizeMessage || (Widget.ResizeMessage = {}));\n /**\n * Attach a widget to a host DOM node.\n *\n * @param widget - The widget of interest.\n *\n * @param host - The DOM node to use as the widget's host.\n *\n * @param ref - The child of `host` to use as the reference element.\n * If this is provided, the widget will be inserted before this\n * node in the host. The default is `null`, which will cause the\n * widget to be added as the last child of the host.\n *\n * #### Notes\n * This will throw an error if the widget is not a root widget, if\n * the widget is already attached, or if the host is not attached\n * to the DOM.\n */\n function attach(widget, host, ref = null) {\n if (widget.parent) {\n throw new Error('Cannot attach a child widget.');\n }\n if (widget.isAttached || widget.node.isConnected) {\n throw new Error('Widget is already attached.');\n }\n if (!host.isConnected) {\n throw new Error('Host is not attached.');\n }\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n host.insertBefore(widget.node, ref);\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n Widget.attach = attach;\n /**\n * Detach the widget from its host DOM node.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will throw an error if the widget is not a root widget,\n * or if the widget is not attached to the DOM.\n */\n function detach(widget) {\n if (widget.parent) {\n throw new Error('Cannot detach a child widget.');\n }\n if (!widget.isAttached || !widget.node.isConnected) {\n throw new Error('Widget is not attached.');\n }\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n widget.node.parentNode.removeChild(widget.node);\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n Widget.detach = detach;\n})(Widget || (Widget = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$j;\n(function (Private) {\n /**\n * An attached property for the widget title object.\n */\n Private.titleProperty = new AttachedProperty({\n name: 'title',\n create: owner => new Title({ owner })\n });\n /**\n * Create a DOM node for the given widget options.\n */\n function createNode(options) {\n return options.node || document.createElement(options.tag || 'div');\n }\n Private.createNode = createNode;\n})(Private$j || (Private$j = {}));\n\n/**\n * An abstract base class for creating lumino layouts.\n *\n * #### Notes\n * A layout is used to add widgets to a parent and to arrange those\n * widgets within the parent's DOM node.\n *\n * This class implements the base functionality which is required of\n * nearly all layouts. It must be subclassed in order to be useful.\n *\n * Notably, this class does not define a uniform interface for adding\n * widgets to the layout. A subclass should define that API in a way\n * which is meaningful for its intended use.\n */\nclass Layout {\n /**\n * Construct a new layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n this._disposed = false;\n this._parent = null;\n this._fitPolicy = options.fitPolicy || 'set-min-size';\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This should be reimplemented to clear and dispose of the widgets.\n *\n * All reimplementations should call the superclass method.\n *\n * This method is called automatically when the parent is disposed.\n */\n dispose() {\n this._parent = null;\n this._disposed = true;\n Signal.clearData(this);\n AttachedProperty.clearData(this);\n }\n /**\n * Test whether the layout is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Get the parent widget of the layout.\n */\n get parent() {\n return this._parent;\n }\n /**\n * Set the parent widget of the layout.\n *\n * #### Notes\n * This is set automatically when installing the layout on the parent\n * widget. The parent widget should not be set directly by user code.\n */\n set parent(value) {\n if (this._parent === value) {\n return;\n }\n if (this._parent) {\n throw new Error('Cannot change parent widget.');\n }\n if (value.layout !== this) {\n throw new Error('Invalid parent widget.');\n }\n this._parent = value;\n this.init();\n }\n /**\n * Get the fit policy for the layout.\n *\n * #### Notes\n * The fit policy controls the computed size constraints which are\n * applied to the parent widget by the layout.\n *\n * Some layout implementations may ignore the fit policy.\n */\n get fitPolicy() {\n return this._fitPolicy;\n }\n /**\n * Set the fit policy for the layout.\n *\n * #### Notes\n * The fit policy controls the computed size constraints which are\n * applied to the parent widget by the layout.\n *\n * Some layout implementations may ignore the fit policy.\n *\n * Changing the fit policy will clear the current size constraint\n * for the parent widget and then re-fit the parent.\n */\n set fitPolicy(value) {\n // Bail if the policy does not change\n if (this._fitPolicy === value) {\n return;\n }\n // Update the internal policy.\n this._fitPolicy = value;\n // Clear the size constraints and schedule a fit of the parent.\n if (this._parent) {\n let style = this._parent.node.style;\n style.minWidth = '';\n style.minHeight = '';\n style.maxWidth = '';\n style.maxHeight = '';\n this._parent.fit();\n }\n }\n /**\n * Process a message sent to the parent widget.\n *\n * @param msg - The message sent to the parent widget.\n *\n * #### Notes\n * This method is called by the parent widget to process a message.\n *\n * Subclasses may reimplement this method as needed.\n */\n processParentMessage(msg) {\n switch (msg.type) {\n case 'resize':\n this.onResize(msg);\n break;\n case 'update-request':\n this.onUpdateRequest(msg);\n break;\n case 'fit-request':\n this.onFitRequest(msg);\n break;\n case 'before-show':\n this.onBeforeShow(msg);\n break;\n case 'after-show':\n this.onAfterShow(msg);\n break;\n case 'before-hide':\n this.onBeforeHide(msg);\n break;\n case 'after-hide':\n this.onAfterHide(msg);\n break;\n case 'before-attach':\n this.onBeforeAttach(msg);\n break;\n case 'after-attach':\n this.onAfterAttach(msg);\n break;\n case 'before-detach':\n this.onBeforeDetach(msg);\n break;\n case 'after-detach':\n this.onAfterDetach(msg);\n break;\n case 'child-removed':\n this.onChildRemoved(msg);\n break;\n case 'child-shown':\n this.onChildShown(msg);\n break;\n case 'child-hidden':\n this.onChildHidden(msg);\n break;\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n *\n * #### Notes\n * This method is invoked immediately after the layout is installed\n * on the parent widget.\n *\n * The default implementation reparents all of the widgets to the\n * layout parent widget.\n *\n * Subclasses should reimplement this method and attach the child\n * widget nodes to the parent widget's node.\n */\n init() {\n for (const widget of this) {\n widget.parent = this.parent;\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n *\n * #### Notes\n * The layout should ensure that its widgets are resized according\n * to the specified layout space, and that they are sent a `'resize'`\n * message if appropriate.\n *\n * The default implementation of this method sends an `UnknownSize`\n * resize message to all widgets.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onResize(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n *\n * #### Notes\n * The layout should ensure that its widgets are resized according\n * to the available layout space, and that they are sent a `'resize'`\n * message if appropriate.\n *\n * The default implementation of this method sends an `UnknownSize`\n * resize message to all widgets.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onUpdateRequest(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeAttach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on an `'after-attach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterAttach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on a `'before-detach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeDetach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterDetach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeShow(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on an `'after-show'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterShow(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on a `'before-hide'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeHide(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on an `'after-hide'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterHide(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n *\n * #### Notes\n * This will remove the child widget from the layout.\n *\n * Subclasses should **not** typically reimplement this method.\n */\n onChildRemoved(msg) {\n this.removeWidget(msg.child);\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onFitRequest(msg) { }\n /**\n * A message handler invoked on a `'child-shown'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildShown(msg) { }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildHidden(msg) { }\n}\n/**\n * The namespace for the `Layout` class statics.\n */\n(function (Layout) {\n /**\n * Get the horizontal alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The horizontal alignment for the widget.\n *\n * #### Notes\n * If the layout width allocated to a widget is larger than its max\n * width, the horizontal alignment controls how the widget is placed\n * within the extra horizontal space.\n *\n * If the allocated width is less than the widget's max width, the\n * horizontal alignment has no effect.\n *\n * Some layout implementations may ignore horizontal alignment.\n */\n function getHorizontalAlignment(widget) {\n return Private$i.horizontalAlignmentProperty.get(widget);\n }\n Layout.getHorizontalAlignment = getHorizontalAlignment;\n /**\n * Set the horizontal alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the horizontal alignment.\n *\n * #### Notes\n * If the layout width allocated to a widget is larger than its max\n * width, the horizontal alignment controls how the widget is placed\n * within the extra horizontal space.\n *\n * If the allocated width is less than the widget's max width, the\n * horizontal alignment has no effect.\n *\n * Some layout implementations may ignore horizontal alignment.\n *\n * Changing the horizontal alignment will post an `update-request`\n * message to widget's parent, provided the parent has a layout\n * installed.\n */\n function setHorizontalAlignment(widget, value) {\n Private$i.horizontalAlignmentProperty.set(widget, value);\n }\n Layout.setHorizontalAlignment = setHorizontalAlignment;\n /**\n * Get the vertical alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The vertical alignment for the widget.\n *\n * #### Notes\n * If the layout height allocated to a widget is larger than its max\n * height, the vertical alignment controls how the widget is placed\n * within the extra vertical space.\n *\n * If the allocated height is less than the widget's max height, the\n * vertical alignment has no effect.\n *\n * Some layout implementations may ignore vertical alignment.\n */\n function getVerticalAlignment(widget) {\n return Private$i.verticalAlignmentProperty.get(widget);\n }\n Layout.getVerticalAlignment = getVerticalAlignment;\n /**\n * Set the vertical alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the vertical alignment.\n *\n * #### Notes\n * If the layout height allocated to a widget is larger than its max\n * height, the vertical alignment controls how the widget is placed\n * within the extra vertical space.\n *\n * If the allocated height is less than the widget's max height, the\n * vertical alignment has no effect.\n *\n * Some layout implementations may ignore vertical alignment.\n *\n * Changing the horizontal alignment will post an `update-request`\n * message to widget's parent, provided the parent has a layout\n * installed.\n */\n function setVerticalAlignment(widget, value) {\n Private$i.verticalAlignmentProperty.set(widget, value);\n }\n Layout.setVerticalAlignment = setVerticalAlignment;\n})(Layout || (Layout = {}));\n/**\n * An object which assists in the absolute layout of widgets.\n *\n * #### Notes\n * This class is useful when implementing a layout which arranges its\n * widgets using absolute positioning.\n *\n * This class is used by nearly all of the built-in lumino layouts.\n */\nclass LayoutItem {\n /**\n * Construct a new layout item.\n *\n * @param widget - The widget to be managed by the item.\n *\n * #### Notes\n * The widget will be set to absolute positioning.\n * The widget will use strict CSS containment.\n */\n constructor(widget) {\n this._top = NaN;\n this._left = NaN;\n this._width = NaN;\n this._height = NaN;\n this._minWidth = 0;\n this._minHeight = 0;\n this._maxWidth = Infinity;\n this._maxHeight = Infinity;\n this._disposed = false;\n this.widget = widget;\n this.widget.node.style.position = 'absolute';\n this.widget.node.style.contain = 'strict';\n }\n /**\n * Dispose of the the layout item.\n *\n * #### Notes\n * This will reset the positioning of the widget.\n */\n dispose() {\n // Do nothing if the item is already disposed.\n if (this._disposed) {\n return;\n }\n // Mark the item as disposed.\n this._disposed = true;\n // Reset the widget style.\n let style = this.widget.node.style;\n style.position = '';\n style.top = '';\n style.left = '';\n style.width = '';\n style.height = '';\n style.contain = '';\n }\n /**\n * The computed minimum width of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get minWidth() {\n return this._minWidth;\n }\n /**\n * The computed minimum height of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get minHeight() {\n return this._minHeight;\n }\n /**\n * The computed maximum width of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get maxWidth() {\n return this._maxWidth;\n }\n /**\n * The computed maximum height of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get maxHeight() {\n return this._maxHeight;\n }\n /**\n * Whether the layout item is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Whether the managed widget is hidden.\n */\n get isHidden() {\n return this.widget.isHidden;\n }\n /**\n * Whether the managed widget is visible.\n */\n get isVisible() {\n return this.widget.isVisible;\n }\n /**\n * Whether the managed widget is attached.\n */\n get isAttached() {\n return this.widget.isAttached;\n }\n /**\n * Update the computed size limits of the managed widget.\n */\n fit() {\n let limits = ElementExt.sizeLimits(this.widget.node);\n this._minWidth = limits.minWidth;\n this._minHeight = limits.minHeight;\n this._maxWidth = limits.maxWidth;\n this._maxHeight = limits.maxHeight;\n }\n /**\n * Update the position and size of the managed widget.\n *\n * @param left - The left edge position of the layout box.\n *\n * @param top - The top edge position of the layout box.\n *\n * @param width - The width of the layout box.\n *\n * @param height - The height of the layout box.\n */\n update(left, top, width, height) {\n // Clamp the size to the computed size limits.\n let clampW = Math.max(this._minWidth, Math.min(width, this._maxWidth));\n let clampH = Math.max(this._minHeight, Math.min(height, this._maxHeight));\n // Adjust the left edge for the horizontal alignment, if needed.\n if (clampW < width) {\n switch (Layout.getHorizontalAlignment(this.widget)) {\n case 'left':\n break;\n case 'center':\n left += (width - clampW) / 2;\n break;\n case 'right':\n left += width - clampW;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Adjust the top edge for the vertical alignment, if needed.\n if (clampH < height) {\n switch (Layout.getVerticalAlignment(this.widget)) {\n case 'top':\n break;\n case 'center':\n top += (height - clampH) / 2;\n break;\n case 'bottom':\n top += height - clampH;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Set up the resize variables.\n let resized = false;\n let style = this.widget.node.style;\n // Update the top edge of the widget if needed.\n if (this._top !== top) {\n this._top = top;\n style.top = `${top}px`;\n }\n // Update the left edge of the widget if needed.\n if (this._left !== left) {\n this._left = left;\n style.left = `${left}px`;\n }\n // Update the width of the widget if needed.\n if (this._width !== clampW) {\n resized = true;\n this._width = clampW;\n style.width = `${clampW}px`;\n }\n // Update the height of the widget if needed.\n if (this._height !== clampH) {\n resized = true;\n this._height = clampH;\n style.height = `${clampH}px`;\n }\n // Send a resize message to the widget if needed.\n if (resized) {\n let msg = new Widget.ResizeMessage(clampW, clampH);\n MessageLoop.sendMessage(this.widget, msg);\n }\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$i;\n(function (Private) {\n /**\n * The attached property for a widget horizontal alignment.\n */\n Private.horizontalAlignmentProperty = new AttachedProperty({\n name: 'horizontalAlignment',\n create: () => 'center',\n changed: onAlignmentChanged\n });\n /**\n * The attached property for a widget vertical alignment.\n */\n Private.verticalAlignmentProperty = new AttachedProperty({\n name: 'verticalAlignment',\n create: () => 'top',\n changed: onAlignmentChanged\n });\n /**\n * The change handler for the attached alignment properties.\n */\n function onAlignmentChanged(child) {\n if (child.parent && child.parent.layout) {\n child.parent.update();\n }\n }\n})(Private$i || (Private$i = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation suitable for many use cases.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * layouts, but can also be used directly with standard CSS to layout a\n * collection of widgets.\n */\nclass PanelLayout extends Layout {\n constructor() {\n super(...arguments);\n this._widgets = [];\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This will clear and dispose all widgets in the layout.\n *\n * All reimplementations should call the superclass method.\n *\n * This method is called automatically when the parent is disposed.\n */\n dispose() {\n while (this._widgets.length > 0) {\n this._widgets.pop().dispose();\n }\n super.dispose();\n }\n /**\n * A read-only array of the widgets in the layout.\n */\n get widgets() {\n return this._widgets;\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n yield* this._widgets;\n }\n /**\n * Add a widget to the end of the layout.\n *\n * @param widget - The widget to add to the layout.\n *\n * #### Notes\n * If the widget is already contained in the layout, it will be moved.\n */\n addWidget(widget) {\n this.insertWidget(this._widgets.length, widget);\n }\n /**\n * Insert a widget into the layout at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into the layout.\n *\n * #### Notes\n * The index will be clamped to the bounds of the widgets.\n *\n * If the widget is already added to the layout, it will be moved.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n insertWidget(index, widget) {\n // Remove the widget from its current parent. This is a no-op\n // if the widget's parent is already the layout parent widget.\n widget.parent = this.parent;\n // Look up the current index of the widget.\n let i = this._widgets.indexOf(widget);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._widgets.length));\n // If the widget is not in the array, insert it.\n if (i === -1) {\n // Insert the widget into the array.\n ArrayExt.insert(this._widgets, j, widget);\n // If the layout is parented, attach the widget to the DOM.\n if (this.parent) {\n this.attachWidget(j, widget);\n }\n // There is nothing more to do.\n return;\n }\n // Otherwise, the widget exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._widgets.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return;\n }\n // Move the widget to the new location.\n ArrayExt.move(this._widgets, i, j);\n // If the layout is parented, move the widget in the DOM.\n if (this.parent) {\n this.moveWidget(i, j, widget);\n }\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n this.removeWidgetAt(this._widgets.indexOf(widget));\n }\n /**\n * Remove the widget at a given index from the layout.\n *\n * @param index - The index of the widget to remove.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n removeWidgetAt(index) {\n // Remove the widget from the array.\n let widget = ArrayExt.removeAt(this._widgets, index);\n // If the layout is parented, detach the widget from the DOM.\n if (widget && this.parent) {\n this.detachWidget(index, widget);\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n let index = 0;\n for (const widget of this) {\n this.attachWidget(index++, widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation adds the widgets's node to the parent's\n * node at the proper location, and sends the appropriate attach\n * messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is added to the parent's node.\n */\n attachWidget(index, widget) {\n // Look up the next sibling reference node.\n let ref = this.parent.node.children[index];\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Insert the widget's node before the sibling.\n this.parent.node.insertBefore(widget.node, ref);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation moves the widget's node to the proper\n * location in the parent's node and sends the appropriate attach and\n * detach messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is moved in the parent's node.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` and message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Look up the next sibling reference node.\n let ref = this.parent.node.children[toIndex];\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Insert the widget's node before the sibling.\n this.parent.node.insertBefore(widget.node, ref);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation removes the widget's node from the\n * parent's node, and sends the appropriate detach messages to the\n * widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is removed from the parent's node.\n */\n detachWidget(index, widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n }\n}\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nvar Utils;\n(function (Utils) {\n /**\n * Clamp a dimension value to an integer >= 0.\n */\n function clampDimension(value) {\n return Math.max(0, Math.floor(value));\n }\n Utils.clampDimension = clampDimension;\n})(Utils || (Utils = {}));\nvar Utils$1 = Utils;\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets into resizable sections.\n */\nclass SplitLayout extends PanelLayout {\n /**\n * Construct a new split layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options) {\n super();\n this.widgetOffset = 0;\n this._fixed = 0;\n this._spacing = 4;\n this._dirty = false;\n this._hasNormedSizes = false;\n this._sizers = [];\n this._items = [];\n this._handles = [];\n this._box = null;\n this._alignment = 'start';\n this._orientation = 'horizontal';\n this.renderer = options.renderer;\n if (options.orientation !== undefined) {\n this._orientation = options.orientation;\n }\n if (options.alignment !== undefined) {\n this._alignment = options.alignment;\n }\n if (options.spacing !== undefined) {\n this._spacing = Utils.clampDimension(options.spacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._sizers.length = 0;\n this._handles.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the layout orientation for the split layout.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the layout orientation for the split layout.\n */\n set orientation(value) {\n if (this._orientation === value) {\n return;\n }\n this._orientation = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['orientation'] = value;\n this.parent.fit();\n }\n /**\n * Get the content alignment for the split layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split layout.\n */\n get alignment() {\n return this._alignment;\n }\n /**\n * Set the content alignment for the split layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split layout.\n */\n set alignment(value) {\n if (this._alignment === value) {\n return;\n }\n this._alignment = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['alignment'] = value;\n this.parent.update();\n }\n /**\n * Get the inter-element spacing for the split layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the split layout.\n */\n set spacing(value) {\n value = Utils.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * A read-only array of the split handles in the layout.\n */\n get handles() {\n return this._handles;\n }\n /**\n * Get the absolute sizes of the widgets in the layout.\n *\n * @returns A new array of the absolute sizes of the widgets.\n *\n * This method **does not** measure the DOM nodes.\n */\n absoluteSizes() {\n return this._sizers.map(sizer => sizer.size);\n }\n /**\n * Get the relative sizes of the widgets in the layout.\n *\n * @returns A new array of the relative sizes of the widgets.\n *\n * #### Notes\n * The returned sizes reflect the sizes of the widgets normalized\n * relative to their siblings.\n *\n * This method **does not** measure the DOM nodes.\n */\n relativeSizes() {\n return Private$h.normalize(this._sizers.map(sizer => sizer.size));\n }\n /**\n * Set the relative sizes for the widgets in the layout.\n *\n * @param sizes - The relative sizes for the widgets in the panel.\n * @param update - Update the layout after setting relative sizes.\n * Default is True.\n *\n * #### Notes\n * Extra values are ignored, too few will yield an undefined layout.\n *\n * The actual geometry of the DOM nodes is updated asynchronously.\n */\n setRelativeSizes(sizes, update = true) {\n // Copy the sizes and pad with zeros as needed.\n let n = this._sizers.length;\n let temp = sizes.slice(0, n);\n while (temp.length < n) {\n temp.push(0);\n }\n // Normalize the padded sizes.\n let normed = Private$h.normalize(temp);\n // Apply the normalized sizes to the sizers.\n for (let i = 0; i < n; ++i) {\n let sizer = this._sizers[i];\n sizer.sizeHint = normed[i];\n sizer.size = normed[i];\n }\n // Set the flag indicating the sizes are normalized.\n this._hasNormedSizes = true;\n // Trigger an update of the parent widget.\n if (update && this.parent) {\n this.parent.update();\n }\n }\n /**\n * Move the offset position of a split handle.\n *\n * @param index - The index of the handle of the interest.\n *\n * @param position - The desired offset position of the handle.\n *\n * #### Notes\n * The position is relative to the offset parent.\n *\n * This will move the handle as close as possible to the desired\n * position. The sibling widgets will be adjusted as necessary.\n */\n moveHandle(index, position) {\n // Bail if the index is invalid or the handle is hidden.\n let handle = this._handles[index];\n if (!handle || handle.classList.contains('lm-mod-hidden')) {\n return;\n }\n // Compute the desired delta movement for the handle.\n let delta;\n if (this._orientation === 'horizontal') {\n delta = position - handle.offsetLeft;\n }\n else {\n delta = position - handle.offsetTop;\n }\n // Bail if there is no handle movement.\n if (delta === 0) {\n return;\n }\n // Prevent widget resizing unless needed.\n for (let sizer of this._sizers) {\n if (sizer.size > 0) {\n sizer.sizeHint = sizer.size;\n }\n }\n // Adjust the sizers to reflect the handle movement.\n BoxEngine.adjust(this._sizers, index, delta);\n // Update the layout of the widgets.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n this.parent.dataset['orientation'] = this.orientation;\n this.parent.dataset['alignment'] = this.alignment;\n super.init();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Create the item, handle, and sizer for the new widget.\n let item = new LayoutItem(widget);\n let handle = Private$h.createHandle(this.renderer);\n let average = Private$h.averageSize(this._sizers);\n let sizer = Private$h.createSizer(average);\n // Insert the item, handle, and sizer into the internal arrays.\n ArrayExt.insert(this._items, index, item);\n ArrayExt.insert(this._sizers, index, sizer);\n ArrayExt.insert(this._handles, index, handle);\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget and handle nodes to the parent.\n this.parent.node.appendChild(widget.node);\n this.parent.node.appendChild(handle);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the item, sizer, and handle for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n ArrayExt.move(this._sizers, fromIndex, toIndex);\n ArrayExt.move(this._handles, fromIndex, toIndex);\n // Post a fit request to the parent to show/hide last handle.\n this.parent.fit();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the item, handle, and sizer for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n let handle = ArrayExt.removeAt(this._handles, index);\n ArrayExt.removeAt(this._sizers, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget and handle nodes from the parent.\n this.parent.node.removeChild(widget.node);\n this.parent.node.removeChild(handle);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Update the item position.\n *\n * @param i Item index\n * @param isHorizontal Whether the layout is horizontal or not\n * @param left Left position in pixels\n * @param top Top position in pixels\n * @param height Item height\n * @param width Item width\n * @param size Item size\n */\n updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n const item = this._items[i];\n if (item.isHidden) {\n return;\n }\n // Fetch the style for the handle.\n let handleStyle = this._handles[i].style;\n // Update the widget and handle, and advance the relevant edge.\n if (isHorizontal) {\n left += this.widgetOffset;\n item.update(left, top, size, height);\n left += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${this._spacing}px`;\n handleStyle.height = `${height}px`;\n }\n else {\n top += this.widgetOffset;\n item.update(left, top, width, size);\n top += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${width}px`;\n handleStyle.height = `${this._spacing}px`;\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Update the handles and track the visible widget count.\n let nVisible = 0;\n let lastHandleIndex = -1;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n if (this._items[i].isHidden) {\n this._handles[i].classList.add('lm-mod-hidden');\n }\n else {\n this._handles[i].classList.remove('lm-mod-hidden');\n lastHandleIndex = i;\n nVisible++;\n }\n }\n // Hide the handle for the last visible widget.\n if (lastHandleIndex !== -1) {\n this._handles[lastHandleIndex].classList.add('lm-mod-hidden');\n }\n // Update the fixed space for the visible items.\n this._fixed =\n this._spacing * Math.max(0, nVisible - 1) +\n this.widgetOffset * this._items.length;\n // Setup the computed minimum size.\n let horz = this._orientation === 'horizontal';\n let minW = horz ? this._fixed : 0;\n let minH = horz ? 0 : this._fixed;\n // Update the sizers and computed size limits.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item and corresponding box sizer.\n let item = this._items[i];\n let sizer = this._sizers[i];\n // Prevent resizing unless necessary.\n if (sizer.size > 0) {\n sizer.sizeHint = sizer.size;\n }\n // If the item is hidden, it should consume zero size.\n if (item.isHidden) {\n sizer.minSize = 0;\n sizer.maxSize = 0;\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the stretch factor.\n sizer.stretch = SplitLayout.getStretch(item.widget);\n // Update the sizer limits and computed min size.\n if (horz) {\n sizer.minSize = item.minWidth;\n sizer.maxSize = item.maxWidth;\n minW += item.minWidth;\n minH = Math.max(minH, item.minHeight);\n }\n else {\n sizer.minSize = item.minHeight;\n sizer.maxSize = item.maxHeight;\n minH += item.minHeight;\n minW = Math.max(minW, item.minWidth);\n }\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0 && this.widgetOffset === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Set up the variables for justification and alignment offset.\n let extra = 0;\n let offset = 0;\n let horz = this._orientation === 'horizontal';\n if (nVisible > 0) {\n // Compute the adjusted layout space.\n let space;\n if (horz) {\n // left += this.widgetOffset;\n space = Math.max(0, width - this._fixed);\n }\n else {\n // top += this.widgetOffset;\n space = Math.max(0, height - this._fixed);\n }\n // Scale the size hints if they are normalized.\n if (this._hasNormedSizes) {\n for (let sizer of this._sizers) {\n sizer.sizeHint *= space;\n }\n this._hasNormedSizes = false;\n }\n // Distribute the layout space to the box sizers.\n let delta = BoxEngine.calc(this._sizers, space);\n // Account for alignment if there is extra layout space.\n if (delta > 0) {\n switch (this._alignment) {\n case 'start':\n break;\n case 'center':\n extra = 0;\n offset = delta / 2;\n break;\n case 'end':\n extra = 0;\n offset = delta;\n break;\n case 'justify':\n extra = delta / nVisible;\n offset = 0;\n break;\n default:\n throw 'unreachable';\n }\n }\n }\n // Layout the items using the computed box sizes.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n const item = this._items[i];\n // Fetch the computed size for the widget.\n const size = item.isHidden ? 0 : this._sizers[i].size + extra;\n this.updateItemPosition(i, horz, horz ? left + offset : left, horz ? top : top + offset, height, width, size);\n const fullOffset = this.widgetOffset +\n (this._handles[i].classList.contains('lm-mod-hidden')\n ? 0\n : this._spacing);\n if (horz) {\n left += size + fullOffset;\n }\n else {\n top += size + fullOffset;\n }\n }\n }\n}\n/**\n * The namespace for the `SplitLayout` class statics.\n */\n(function (SplitLayout) {\n /**\n * Get the split layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The split layout stretch factor for the widget.\n */\n function getStretch(widget) {\n return Private$h.stretchProperty.get(widget);\n }\n SplitLayout.getStretch = getStretch;\n /**\n * Set the split layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n Private$h.stretchProperty.set(widget, value);\n }\n SplitLayout.setStretch = setStretch;\n})(SplitLayout || (SplitLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$h;\n(function (Private) {\n /**\n * The property descriptor for a widget stretch factor.\n */\n Private.stretchProperty = new AttachedProperty({\n name: 'stretch',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * Create a new box sizer with the given size hint.\n */\n function createSizer(size) {\n let sizer = new BoxSizer();\n sizer.sizeHint = Math.floor(size);\n return sizer;\n }\n Private.createSizer = createSizer;\n /**\n * Create a new split handle node using the given renderer.\n */\n function createHandle(renderer) {\n let handle = renderer.createHandle();\n handle.style.position = 'absolute';\n // Do not use size containment to allow the handle to fill the available space\n handle.style.contain = 'style';\n return handle;\n }\n Private.createHandle = createHandle;\n /**\n * Compute the average size of an array of box sizers.\n */\n function averageSize(sizers) {\n return sizers.reduce((v, s) => v + s.size, 0) / sizers.length || 0;\n }\n Private.averageSize = averageSize;\n /**\n * Normalize an array of values.\n */\n function normalize(values) {\n let n = values.length;\n if (n === 0) {\n return [];\n }\n let sum = values.reduce((a, b) => a + Math.abs(b), 0);\n return sum === 0 ? values.map(v => 1 / n) : values.map(v => v / sum);\n }\n Private.normalize = normalize;\n /**\n * The change handler for the attached sizing properties.\n */\n function onChildSizingChanged(child) {\n if (child.parent && child.parent.layout instanceof SplitLayout) {\n child.parent.fit();\n }\n }\n})(Private$h || (Private$h = {}));\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * A layout which arranges its widgets into collapsible resizable sections.\n */\nclass AccordionLayout extends SplitLayout {\n /**\n * Construct a new accordion layout.\n *\n * @param options - The options for initializing the layout.\n *\n * #### Notes\n * The default orientation will be vertical.\n *\n * Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n */\n constructor(options) {\n super({ ...options, orientation: options.orientation || 'vertical' });\n this._titles = [];\n this.titleSpace = options.titleSpace || 22;\n }\n /**\n * The section title height or width depending on the orientation.\n */\n get titleSpace() {\n return this.widgetOffset;\n }\n set titleSpace(value) {\n value = Utils$1.clampDimension(value);\n if (this.widgetOffset === value) {\n return;\n }\n this.widgetOffset = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * A read-only array of the section titles in the panel.\n */\n get titles() {\n return this._titles;\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n // Clear the layout state.\n this._titles.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n updateTitle(index, widget) {\n const oldTitle = this._titles[index];\n const expanded = oldTitle.classList.contains('lm-mod-expanded');\n const newTitle = Private$g.createTitle(this.renderer, widget.title, expanded);\n this._titles[index] = newTitle;\n // Add the title node to the parent before the widget.\n this.parent.node.replaceChild(newTitle, oldTitle);\n }\n /**\n * Insert a widget into the layout at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into the layout.\n *\n * #### Notes\n * The index will be clamped to the bounds of the widgets.\n *\n * If the widget is already added to the layout, it will be moved.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n insertWidget(index, widget) {\n if (!widget.id) {\n widget.id = `id-${UUID.uuid4()}`;\n }\n super.insertWidget(index, widget);\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n */\n attachWidget(index, widget) {\n const title = Private$g.createTitle(this.renderer, widget.title);\n ArrayExt.insert(this._titles, index, title);\n // Add the title node to the parent before the widget.\n this.parent.node.appendChild(title);\n widget.node.setAttribute('role', 'region');\n widget.node.setAttribute('aria-labelledby', title.id);\n super.attachWidget(index, widget);\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n */\n moveWidget(fromIndex, toIndex, widget) {\n ArrayExt.move(this._titles, fromIndex, toIndex);\n super.moveWidget(fromIndex, toIndex, widget);\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n const title = ArrayExt.removeAt(this._titles, index);\n this.parent.node.removeChild(title);\n super.detachWidget(index, widget);\n }\n /**\n * Update the item position.\n *\n * @param i Item index\n * @param isHorizontal Whether the layout is horizontal or not\n * @param left Left position in pixels\n * @param top Top position in pixels\n * @param height Item height\n * @param width Item width\n * @param size Item size\n */\n updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n const titleStyle = this._titles[i].style;\n // Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n titleStyle.top = `${top}px`;\n titleStyle.left = `${left}px`;\n titleStyle.height = `${this.widgetOffset}px`;\n if (isHorizontal) {\n titleStyle.width = `${height}px`;\n }\n else {\n titleStyle.width = `${width}px`;\n }\n super.updateItemPosition(i, isHorizontal, left, top, height, width, size);\n }\n}\nvar Private$g;\n(function (Private) {\n /**\n * Create the title HTML element.\n *\n * @param renderer Accordion renderer\n * @param data Widget title\n * @returns Title HTML element\n */\n function createTitle(renderer, data, expanded = true) {\n const title = renderer.createSectionTitle(data);\n title.style.position = 'absolute';\n title.style.contain = 'strict';\n title.setAttribute('aria-label', `${data.label} Section`);\n title.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n title.setAttribute('aria-controls', data.owner.id);\n if (expanded) {\n title.classList.add('lm-mod-expanded');\n }\n return title;\n }\n Private.createTitle = createTitle;\n})(Private$g || (Private$g = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A simple and convenient panel widget class.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * convenience panel widgets, but can also be used directly with CSS to\n * arrange a collection of widgets.\n *\n * This class provides a convenience wrapper around a {@link PanelLayout}.\n */\nclass Panel extends Widget {\n /**\n * Construct a new panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super();\n this.addClass('lm-Panel');\n this.layout = Private$f.createLayout(options);\n }\n /**\n * A read-only array of the widgets in the panel.\n */\n get widgets() {\n return this.layout.widgets;\n }\n /**\n * Add a widget to the end of the panel.\n *\n * @param widget - The widget to add to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n addWidget(widget) {\n this.layout.addWidget(widget);\n }\n /**\n * Insert a widget at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n insertWidget(index, widget) {\n this.layout.insertWidget(index, widget);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$f;\n(function (Private) {\n /**\n * Create a panel layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new PanelLayout();\n }\n Private.createLayout = createLayout;\n})(Private$f || (Private$f = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets into resizable sections.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link SplitLayout}.\n */\nclass SplitPanel extends Panel {\n /**\n * Construct a new split panel.\n *\n * @param options - The options for initializing the split panel.\n */\n constructor(options = {}) {\n super({ layout: Private$e.createLayout(options) });\n this._handleMoved = new Signal(this);\n this._pressData = null;\n this.addClass('lm-SplitPanel');\n }\n /**\n * Dispose of the resources held by the panel.\n */\n dispose() {\n this._releaseMouse();\n super.dispose();\n }\n /**\n * Get the layout orientation for the split panel.\n */\n get orientation() {\n return this.layout.orientation;\n }\n /**\n * Set the layout orientation for the split panel.\n */\n set orientation(value) {\n this.layout.orientation = value;\n }\n /**\n * Get the content alignment for the split panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split panel.\n */\n get alignment() {\n return this.layout.alignment;\n }\n /**\n * Set the content alignment for the split panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split panel.\n */\n set alignment(value) {\n this.layout.alignment = value;\n }\n /**\n * Get the inter-element spacing for the split panel.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the inter-element spacing for the split panel.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * The renderer used by the split panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * A signal emitted when a split handle has moved.\n */\n get handleMoved() {\n return this._handleMoved;\n }\n /**\n * A read-only array of the split handles in the panel.\n */\n get handles() {\n return this.layout.handles;\n }\n /**\n * Get the relative sizes of the widgets in the panel.\n *\n * @returns A new array of the relative sizes of the widgets.\n *\n * #### Notes\n * The returned sizes reflect the sizes of the widgets normalized\n * relative to their siblings.\n *\n * This method **does not** measure the DOM nodes.\n */\n relativeSizes() {\n return this.layout.relativeSizes();\n }\n /**\n * Set the relative sizes for the widgets in the panel.\n *\n * @param sizes - The relative sizes for the widgets in the panel.\n * @param update - Update the layout after setting relative sizes.\n * Default is True.\n *\n * #### Notes\n * Extra values are ignored, too few will yield an undefined layout.\n *\n * The actual geometry of the DOM nodes is updated asynchronously.\n */\n setRelativeSizes(sizes, update = true) {\n this.layout.setRelativeSizes(sizes, update);\n }\n /**\n * Handle the DOM events for the split panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('pointerdown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('pointerdown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-SplitPanel-child');\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-SplitPanel-child');\n this._releaseMouse();\n }\n /**\n * Handle the `'keydown'` event for the split panel.\n */\n _evtKeyDown(event) {\n // Stop input events during drag.\n if (this._pressData) {\n event.preventDefault();\n event.stopPropagation();\n }\n // Release the mouse if `Escape` is pressed.\n if (event.keyCode === 27) {\n this._releaseMouse();\n }\n }\n /**\n * Handle the `'pointerdown'` event for the split panel.\n */\n _evtPointerDown(event) {\n // Do nothing if the primary button is not pressed.\n if (event.button !== 0) {\n return;\n }\n // Find the handle which contains the target, if any.\n let layout = this.layout;\n let index = ArrayExt.findFirstIndex(layout.handles, handle => {\n return handle.contains(event.target);\n });\n // Bail early if the mouse press was not on a handle.\n if (index === -1) {\n return;\n }\n // Stop the event when a split handle is pressed.\n event.preventDefault();\n event.stopPropagation();\n // Add the extra document listeners.\n document.addEventListener('pointerup', this, true);\n document.addEventListener('pointermove', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('contextmenu', this, true);\n // Compute the offset delta for the handle press.\n let delta;\n let handle = layout.handles[index];\n let rect = handle.getBoundingClientRect();\n if (layout.orientation === 'horizontal') {\n delta = event.clientX - rect.left;\n }\n else {\n delta = event.clientY - rect.top;\n }\n // Override the cursor and store the press data.\n let style = window.getComputedStyle(handle);\n let override = Drag.overrideCursor(style.cursor);\n this._pressData = { index, delta, override };\n }\n /**\n * Handle the `'pointermove'` event for the split panel.\n */\n _evtPointerMove(event) {\n // Stop the event when dragging a split handle.\n event.preventDefault();\n event.stopPropagation();\n // Compute the desired offset position for the handle.\n let pos;\n let layout = this.layout;\n let rect = this.node.getBoundingClientRect();\n if (layout.orientation === 'horizontal') {\n pos = event.clientX - rect.left - this._pressData.delta;\n }\n else {\n pos = event.clientY - rect.top - this._pressData.delta;\n }\n // Move the handle as close to the desired position as possible.\n layout.moveHandle(this._pressData.index, pos);\n }\n /**\n * Handle the `'pointerup'` event for the split panel.\n */\n _evtPointerUp(event) {\n // Do nothing if the primary button is not released.\n if (event.button !== 0) {\n return;\n }\n // Stop the event when releasing a handle.\n event.preventDefault();\n event.stopPropagation();\n // Finalize the mouse release.\n this._releaseMouse();\n }\n /**\n * Release the mouse grab for the split panel.\n */\n _releaseMouse() {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Clear the override cursor.\n this._pressData.override.dispose();\n this._pressData = null;\n // Emit the handle moved signal.\n this._handleMoved.emit();\n // Remove the extra document listeners.\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('pointerup', this, true);\n document.removeEventListener('pointermove', this, true);\n document.removeEventListener('contextmenu', this, true);\n }\n}\n/**\n * The namespace for the `SplitPanel` class statics.\n */\n(function (SplitPanel) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Create a new handle for use with a split panel.\n *\n * @returns A new handle element for a split panel.\n */\n createHandle() {\n let handle = document.createElement('div');\n handle.className = 'lm-SplitPanel-handle';\n return handle;\n }\n }\n SplitPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n SplitPanel.defaultRenderer = new Renderer();\n /**\n * Get the split panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The split panel stretch factor for the widget.\n */\n function getStretch(widget) {\n return SplitLayout.getStretch(widget);\n }\n SplitPanel.getStretch = getStretch;\n /**\n * Set the split panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n SplitLayout.setStretch(widget, value);\n }\n SplitPanel.setStretch = setStretch;\n})(SplitPanel || (SplitPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$e;\n(function (Private) {\n /**\n * Create a split layout for the given panel options.\n */\n function createLayout(options) {\n return (options.layout ||\n new SplitLayout({\n renderer: options.renderer || SplitPanel.defaultRenderer,\n orientation: options.orientation,\n alignment: options.alignment,\n spacing: options.spacing\n }));\n }\n Private.createLayout = createLayout;\n})(Private$e || (Private$e = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A panel which arranges its widgets into resizable sections separated by a title widget.\n *\n * #### Notes\n * This class provides a convenience wrapper around {@link AccordionLayout}.\n */\nclass AccordionPanel extends SplitPanel {\n /**\n * Construct a new accordion panel.\n *\n * @param options - The options for initializing the accordion panel.\n */\n constructor(options = {}) {\n super({ ...options, layout: Private$d.createLayout(options) });\n this._widgetSizesCache = new WeakMap();\n this._expansionToggled = new Signal(this);\n this.addClass('lm-AccordionPanel');\n }\n /**\n * The renderer used by the accordion panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * The section title space.\n *\n * This is the height if the panel is vertical and the width if it is\n * horizontal.\n */\n get titleSpace() {\n return this.layout.titleSpace;\n }\n set titleSpace(value) {\n this.layout.titleSpace = value;\n }\n /**\n * A read-only array of the section titles in the panel.\n */\n get titles() {\n return this.layout.titles;\n }\n /**\n * A signal emitted when a widget of the AccordionPanel is collapsed or expanded.\n */\n get expansionToggled() {\n return this._expansionToggled;\n }\n /**\n * Add a widget to the end of the panel.\n *\n * @param widget - The widget to add to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n addWidget(widget) {\n super.addWidget(widget);\n widget.title.changed.connect(this._onTitleChanged, this);\n }\n /**\n * Collapse the widget at position `index`.\n *\n * #### Notes\n * If no widget is found for `index`, this will bail.\n *\n * @param index Widget index\n */\n collapse(index) {\n const widget = this.layout.widgets[index];\n if (widget && !widget.isHidden) {\n this._toggleExpansion(index);\n }\n }\n /**\n * Expand the widget at position `index`.\n *\n * #### Notes\n * If no widget is found for `index`, this will bail.\n *\n * @param index Widget index\n */\n expand(index) {\n const widget = this.layout.widgets[index];\n if (widget && widget.isHidden) {\n this._toggleExpansion(index);\n }\n }\n /**\n * Insert a widget at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n insertWidget(index, widget) {\n super.insertWidget(index, widget);\n widget.title.changed.connect(this._onTitleChanged, this);\n }\n /**\n * Handle the DOM events for the accordion panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n super.handleEvent(event);\n switch (event.type) {\n case 'click':\n this._evtClick(event);\n break;\n case 'keydown':\n this._eventKeyDown(event);\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('click', this);\n this.node.addEventListener('keydown', this);\n super.onBeforeAttach(msg);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n super.onAfterDetach(msg);\n this.node.removeEventListener('click', this);\n this.node.removeEventListener('keydown', this);\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged(sender) {\n const index = ArrayExt.findFirstIndex(this.widgets, widget => {\n return widget.contains(sender.owner);\n });\n if (index >= 0) {\n this.layout.updateTitle(index, sender.owner);\n this.update();\n }\n }\n /**\n * Compute the size of widgets in this panel on the title click event.\n * On closing, the size of the widget is cached and we will try to expand\n * the last opened widget.\n * On opening, we will use the cached size if it is available to restore the\n * widget.\n * In both cases, if we can not compute the size of widgets, we will let\n * `SplitLayout` decide.\n *\n * @param index - The index of widget to be opened of closed\n *\n * @returns Relative size of widgets in this panel, if this size can\n * not be computed, return `undefined`\n */\n _computeWidgetSize(index) {\n const layout = this.layout;\n const widget = layout.widgets[index];\n if (!widget) {\n return undefined;\n }\n const isHidden = widget.isHidden;\n const widgetSizes = layout.absoluteSizes();\n const delta = (isHidden ? -1 : 1) * this.spacing;\n const totalSize = widgetSizes.reduce((prev, curr) => prev + curr);\n let newSize = [...widgetSizes];\n if (!isHidden) {\n // Hide the widget\n const currentSize = widgetSizes[index];\n this._widgetSizesCache.set(widget, currentSize);\n newSize[index] = 0;\n const widgetToCollapse = newSize.map(sz => sz > 0).lastIndexOf(true);\n if (widgetToCollapse === -1) {\n // All widget are closed, let the `SplitLayout` compute widget sizes.\n return undefined;\n }\n newSize[widgetToCollapse] =\n widgetSizes[widgetToCollapse] + currentSize + delta;\n }\n else {\n // Show the widget\n const previousSize = this._widgetSizesCache.get(widget);\n if (!previousSize) {\n // Previous size is unavailable, let the `SplitLayout` compute widget sizes.\n return undefined;\n }\n newSize[index] += previousSize;\n const widgetToCollapse = newSize\n .map(sz => sz - previousSize > 0)\n .lastIndexOf(true);\n if (widgetToCollapse === -1) {\n // Can not reduce the size of one widget, reduce all opened widgets\n // proportionally with its size.\n newSize.forEach((_, idx) => {\n if (idx !== index) {\n newSize[idx] -=\n (widgetSizes[idx] / totalSize) * (previousSize - delta);\n }\n });\n }\n else {\n newSize[widgetToCollapse] -= previousSize - delta;\n }\n }\n return newSize.map(sz => sz / (totalSize + delta));\n }\n /**\n * Handle the `'click'` event for the accordion panel\n */\n _evtClick(event) {\n const target = event.target;\n if (target) {\n const index = ArrayExt.findFirstIndex(this.titles, title => {\n return title.contains(target);\n });\n if (index >= 0) {\n event.preventDefault();\n event.stopPropagation();\n this._toggleExpansion(index);\n }\n }\n }\n /**\n * Handle the `'keydown'` event for the accordion panel.\n */\n _eventKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n const target = event.target;\n let handled = false;\n if (target) {\n const index = ArrayExt.findFirstIndex(this.titles, title => {\n return title.contains(target);\n });\n if (index >= 0) {\n const keyCode = event.keyCode.toString();\n // If Space or Enter is pressed on title, emulate click event\n if (event.key.match(/Space|Enter/) || keyCode.match(/13|32/)) {\n target.click();\n handled = true;\n }\n else if (this.orientation === 'horizontal'\n ? event.key.match(/ArrowLeft|ArrowRight/) || keyCode.match(/37|39/)\n : event.key.match(/ArrowUp|ArrowDown/) || keyCode.match(/38|40/)) {\n // If Up or Down (for vertical) / Left or Right (for horizontal) is pressed on title, loop on titles\n const direction = event.key.match(/ArrowLeft|ArrowUp/) || keyCode.match(/37|38/)\n ? -1\n : 1;\n const length = this.titles.length;\n const newIndex = (index + length + direction) % length;\n this.titles[newIndex].focus();\n handled = true;\n }\n else if (event.key === 'End' || keyCode === '35') {\n // If End is pressed on title, focus on the last title\n this.titles[this.titles.length - 1].focus();\n handled = true;\n }\n else if (event.key === 'Home' || keyCode === '36') {\n // If Home is pressed on title, focus on the first title\n this.titles[0].focus();\n handled = true;\n }\n }\n if (handled) {\n event.preventDefault();\n }\n }\n }\n _toggleExpansion(index) {\n const title = this.titles[index];\n const widget = this.layout.widgets[index];\n const newSize = this._computeWidgetSize(index);\n if (newSize) {\n this.setRelativeSizes(newSize, false);\n }\n if (widget.isHidden) {\n title.classList.add('lm-mod-expanded');\n title.setAttribute('aria-expanded', 'true');\n widget.show();\n }\n else {\n title.classList.remove('lm-mod-expanded');\n title.setAttribute('aria-expanded', 'false');\n widget.hide();\n }\n // Emit the expansion state signal.\n this._expansionToggled.emit(index);\n }\n}\n/**\n * The namespace for the `AccordionPanel` class statics.\n */\n(function (AccordionPanel) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer extends SplitPanel.Renderer {\n constructor() {\n super();\n /**\n * A selector which matches any title node in the accordion.\n */\n this.titleClassName = 'lm-AccordionPanel-title';\n this._titleID = 0;\n this._titleKeys = new WeakMap();\n this._uuid = ++Renderer._nInstance;\n }\n /**\n * Render the collapse indicator for a section title.\n *\n * @param data - The data to use for rendering the section title.\n *\n * @returns A element representing the collapse indicator.\n */\n createCollapseIcon(data) {\n return document.createElement('span');\n }\n /**\n * Render the element for a section title.\n *\n * @param data - The data to use for rendering the section title.\n *\n * @returns A element representing the section title.\n */\n createSectionTitle(data) {\n const handle = document.createElement('h3');\n handle.setAttribute('tabindex', '0');\n handle.id = this.createTitleKey(data);\n handle.className = this.titleClassName;\n for (const aData in data.dataset) {\n handle.dataset[aData] = data.dataset[aData];\n }\n const collapser = handle.appendChild(this.createCollapseIcon(data));\n collapser.className = 'lm-AccordionPanel-titleCollapser';\n const label = handle.appendChild(document.createElement('span'));\n label.className = 'lm-AccordionPanel-titleLabel';\n label.textContent = data.label;\n label.title = data.caption || data.label;\n return handle;\n }\n /**\n * Create a unique render key for the title.\n *\n * @param data - The data to use for the title.\n *\n * @returns The unique render key for the title.\n *\n * #### Notes\n * This method caches the key against the section title the first time\n * the key is generated.\n */\n createTitleKey(data) {\n let key = this._titleKeys.get(data);\n if (key === undefined) {\n key = `title-key-${this._uuid}-${this._titleID++}`;\n this._titleKeys.set(data, key);\n }\n return key;\n }\n }\n Renderer._nInstance = 0;\n AccordionPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n AccordionPanel.defaultRenderer = new Renderer();\n})(AccordionPanel || (AccordionPanel = {}));\nvar Private$d;\n(function (Private) {\n /**\n * Create an accordion layout for the given panel options.\n *\n * @param options Panel options\n * @returns Panel layout\n */\n function createLayout(options) {\n return (options.layout ||\n new AccordionLayout({\n renderer: options.renderer || AccordionPanel.defaultRenderer,\n orientation: options.orientation,\n alignment: options.alignment,\n spacing: options.spacing,\n titleSpace: options.titleSpace\n }));\n }\n Private.createLayout = createLayout;\n})(Private$d || (Private$d = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a single row or column.\n */\nclass BoxLayout extends PanelLayout {\n /**\n * Construct a new box layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n super();\n this._fixed = 0;\n this._spacing = 4;\n this._dirty = false;\n this._sizers = [];\n this._items = [];\n this._box = null;\n this._alignment = 'start';\n this._direction = 'top-to-bottom';\n if (options.direction !== undefined) {\n this._direction = options.direction;\n }\n if (options.alignment !== undefined) {\n this._alignment = options.alignment;\n }\n if (options.spacing !== undefined) {\n this._spacing = Utils$1.clampDimension(options.spacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._sizers.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the layout direction for the box layout.\n */\n get direction() {\n return this._direction;\n }\n /**\n * Set the layout direction for the box layout.\n */\n set direction(value) {\n if (this._direction === value) {\n return;\n }\n this._direction = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['direction'] = value;\n this.parent.fit();\n }\n /**\n * Get the content alignment for the box layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n get alignment() {\n return this._alignment;\n }\n /**\n * Set the content alignment for the box layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n set alignment(value) {\n if (this._alignment === value) {\n return;\n }\n this._alignment = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['alignment'] = value;\n this.parent.update();\n }\n /**\n * Get the inter-element spacing for the box layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the box layout.\n */\n set spacing(value) {\n value = Utils$1.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n this.parent.dataset['direction'] = this.direction;\n this.parent.dataset['alignment'] = this.alignment;\n super.init();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Create and add a new layout item for the widget.\n ArrayExt.insert(this._items, index, new LayoutItem(widget));\n // Create and add a new sizer for the widget.\n ArrayExt.insert(this._sizers, index, new BoxSizer());\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the layout item for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n // Move the sizer for the widget.\n ArrayExt.move(this._sizers, fromIndex, toIndex);\n // Post an update request for the parent widget.\n this.parent.update();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the layout item for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n // Remove the sizer for the widget.\n ArrayExt.removeAt(this._sizers, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Update the fixed space for the visible items.\n this._fixed = this._spacing * Math.max(0, nVisible - 1);\n // Setup the computed minimum size.\n let horz = Private$c.isHorizontal(this._direction);\n let minW = horz ? this._fixed : 0;\n let minH = horz ? 0 : this._fixed;\n // Update the sizers and computed minimum size.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item and corresponding box sizer.\n let item = this._items[i];\n let sizer = this._sizers[i];\n // If the item is hidden, it should consume zero size.\n if (item.isHidden) {\n sizer.minSize = 0;\n sizer.maxSize = 0;\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the size basis and stretch factor.\n sizer.sizeHint = BoxLayout.getSizeBasis(item.widget);\n sizer.stretch = BoxLayout.getStretch(item.widget);\n // Update the sizer limits and computed min size.\n if (horz) {\n sizer.minSize = item.minWidth;\n sizer.maxSize = item.maxWidth;\n minW += item.minWidth;\n minH = Math.max(minH, item.minHeight);\n }\n else {\n sizer.minSize = item.minHeight;\n sizer.maxSize = item.maxHeight;\n minH += item.minHeight;\n minW = Math.max(minW, item.minWidth);\n }\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the layout area adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Distribute the layout space and adjust the start position.\n let delta;\n switch (this._direction) {\n case 'left-to-right':\n delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n break;\n case 'top-to-bottom':\n delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n break;\n case 'right-to-left':\n delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n left += width;\n break;\n case 'bottom-to-top':\n delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n top += height;\n break;\n default:\n throw 'unreachable';\n }\n // Setup the variables for justification and alignment offset.\n let extra = 0;\n let offset = 0;\n // Account for alignment if there is extra layout space.\n if (delta > 0) {\n switch (this._alignment) {\n case 'start':\n break;\n case 'center':\n extra = 0;\n offset = delta / 2;\n break;\n case 'end':\n extra = 0;\n offset = delta;\n break;\n case 'justify':\n extra = delta / nVisible;\n offset = 0;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Layout the items using the computed box sizes.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Fetch the computed size for the widget.\n let size = this._sizers[i].size;\n // Update the widget geometry and advance the relevant edge.\n switch (this._direction) {\n case 'left-to-right':\n item.update(left + offset, top, size + extra, height);\n left += size + extra + this._spacing;\n break;\n case 'top-to-bottom':\n item.update(left, top + offset, width, size + extra);\n top += size + extra + this._spacing;\n break;\n case 'right-to-left':\n item.update(left - offset - size - extra, top, size + extra, height);\n left -= size + extra + this._spacing;\n break;\n case 'bottom-to-top':\n item.update(left, top - offset - size - extra, width, size + extra);\n top -= size + extra + this._spacing;\n break;\n default:\n throw 'unreachable';\n }\n }\n }\n}\n/**\n * The namespace for the `BoxLayout` class statics.\n */\n(function (BoxLayout) {\n /**\n * Get the box layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box layout stretch factor for the widget.\n */\n function getStretch(widget) {\n return Private$c.stretchProperty.get(widget);\n }\n BoxLayout.getStretch = getStretch;\n /**\n * Set the box layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n Private$c.stretchProperty.set(widget, value);\n }\n BoxLayout.setStretch = setStretch;\n /**\n * Get the box layout size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box layout size basis for the widget.\n */\n function getSizeBasis(widget) {\n return Private$c.sizeBasisProperty.get(widget);\n }\n BoxLayout.getSizeBasis = getSizeBasis;\n /**\n * Set the box layout size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the size basis.\n */\n function setSizeBasis(widget, value) {\n Private$c.sizeBasisProperty.set(widget, value);\n }\n BoxLayout.setSizeBasis = setSizeBasis;\n})(BoxLayout || (BoxLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$c;\n(function (Private) {\n /**\n * The property descriptor for a widget stretch factor.\n */\n Private.stretchProperty = new AttachedProperty({\n name: 'stretch',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * The property descriptor for a widget size basis.\n */\n Private.sizeBasisProperty = new AttachedProperty({\n name: 'sizeBasis',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * Test whether a direction has horizontal orientation.\n */\n function isHorizontal(dir) {\n return dir === 'left-to-right' || dir === 'right-to-left';\n }\n Private.isHorizontal = isHorizontal;\n /**\n * Clamp a spacing value to an integer >= 0.\n */\n function clampSpacing(value) {\n return Math.max(0, Math.floor(value));\n }\n Private.clampSpacing = clampSpacing;\n /**\n * The change handler for the attached sizing properties.\n */\n function onChildSizingChanged(child) {\n if (child.parent && child.parent.layout instanceof BoxLayout) {\n child.parent.fit();\n }\n }\n})(Private$c || (Private$c = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets in a single row or column.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link BoxLayout}.\n */\nclass BoxPanel extends Panel {\n /**\n * Construct a new box panel.\n *\n * @param options - The options for initializing the box panel.\n */\n constructor(options = {}) {\n super({ layout: Private$b.createLayout(options) });\n this.addClass('lm-BoxPanel');\n }\n /**\n * Get the layout direction for the box panel.\n */\n get direction() {\n return this.layout.direction;\n }\n /**\n * Set the layout direction for the box panel.\n */\n set direction(value) {\n this.layout.direction = value;\n }\n /**\n * Get the content alignment for the box panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n get alignment() {\n return this.layout.alignment;\n }\n /**\n * Set the content alignment for the box panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n set alignment(value) {\n this.layout.alignment = value;\n }\n /**\n * Get the inter-element spacing for the box panel.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the inter-element spacing for the box panel.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-BoxPanel-child');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-BoxPanel-child');\n }\n}\n/**\n * The namespace for the `BoxPanel` class statics.\n */\n(function (BoxPanel) {\n /**\n * Get the box panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box panel stretch factor for the widget.\n */\n function getStretch(widget) {\n return BoxLayout.getStretch(widget);\n }\n BoxPanel.getStretch = getStretch;\n /**\n * Set the box panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n BoxLayout.setStretch(widget, value);\n }\n BoxPanel.setStretch = setStretch;\n /**\n * Get the box panel size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box panel size basis for the widget.\n */\n function getSizeBasis(widget) {\n return BoxLayout.getSizeBasis(widget);\n }\n BoxPanel.getSizeBasis = getSizeBasis;\n /**\n * Set the box panel size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the size basis.\n */\n function setSizeBasis(widget, value) {\n BoxLayout.setSizeBasis(widget, value);\n }\n BoxPanel.setSizeBasis = setSizeBasis;\n})(BoxPanel || (BoxPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$b;\n(function (Private) {\n /**\n * Create a box layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new BoxLayout(options);\n }\n Private.createLayout = createLayout;\n})(Private$b || (Private$b = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays command items as a searchable palette.\n */\nclass CommandPalette extends Widget {\n /**\n * Construct a new command palette.\n *\n * @param options - The options for initializing the palette.\n */\n constructor(options) {\n super({ node: Private$a.createNode() });\n this._activeIndex = -1;\n this._items = [];\n this._results = null;\n this.addClass('lm-CommandPalette');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.commands = options.commands;\n this.renderer = options.renderer || CommandPalette.defaultRenderer;\n this.commands.commandChanged.connect(this._onGenericChange, this);\n this.commands.keyBindingChanged.connect(this._onGenericChange, this);\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._items.length = 0;\n this._results = null;\n super.dispose();\n }\n /**\n * The command palette search node.\n *\n * #### Notes\n * This is the node which contains the search-related elements.\n */\n get searchNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-search')[0];\n }\n /**\n * The command palette input node.\n *\n * #### Notes\n * This is the actual input node for the search area.\n */\n get inputNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-input')[0];\n }\n /**\n * The command palette content node.\n *\n * #### Notes\n * This is the node which holds the command item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-content')[0];\n }\n /**\n * A read-only array of the command items in the palette.\n */\n get items() {\n return this._items;\n }\n /**\n * Add a command item to the command palette.\n *\n * @param options - The options for creating the command item.\n *\n * @returns The command item added to the palette.\n */\n addItem(options) {\n // Create a new command item for the options.\n let item = Private$a.createItem(this.commands, options);\n // Add the item to the array.\n this._items.push(item);\n // Refresh the search results.\n this.refresh();\n // Return the item added to the palette.\n return item;\n }\n /**\n * Adds command items to the command palette.\n *\n * @param items - An array of options for creating each command item.\n *\n * @returns The command items added to the palette.\n */\n addItems(items) {\n const newItems = items.map(item => Private$a.createItem(this.commands, item));\n newItems.forEach(item => this._items.push(item));\n this.refresh();\n return newItems;\n }\n /**\n * Remove an item from the command palette.\n *\n * @param item - The item to remove from the palette.\n *\n * #### Notes\n * This is a no-op if the item is not in the palette.\n */\n removeItem(item) {\n this.removeItemAt(this._items.indexOf(item));\n }\n /**\n * Remove the item at a given index from the command palette.\n *\n * @param index - The index of the item to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeItemAt(index) {\n // Remove the item from the array.\n let item = ArrayExt.removeAt(this._items, index);\n // Bail if the index is out of range.\n if (!item) {\n return;\n }\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Remove all items from the command palette.\n */\n clearItems() {\n // Bail if there is nothing to remove.\n if (this._items.length === 0) {\n return;\n }\n // Clear the array of items.\n this._items.length = 0;\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Clear the search results and schedule an update.\n *\n * #### Notes\n * This should be called whenever the search results of the palette\n * should be updated.\n *\n * This is typically called automatically by the palette as needed,\n * but can be called manually if the input text is programatically\n * changed.\n *\n * The rendered results are updated asynchronously.\n */\n refresh() {\n this._results = null;\n if (this.inputNode.value !== '') {\n let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n clear.style.display = 'inherit';\n }\n else {\n let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n clear.style.display = 'none';\n }\n this.update();\n }\n /**\n * Handle the DOM events for the command palette.\n *\n * @param event - The DOM event sent to the command palette.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the command palette's DOM node.\n * It should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'click':\n this._evtClick(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'input':\n this.refresh();\n break;\n case 'focus':\n case 'blur':\n this._toggleFocused();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('click', this);\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('input', this);\n this.node.addEventListener('focus', this, true);\n this.node.addEventListener('blur', this, true);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('click', this);\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('input', this);\n this.node.removeEventListener('focus', this, true);\n this.node.removeEventListener('blur', this, true);\n }\n /**\n * A message handler invoked on an `'after-show'` message.\n */\n onAfterShow(msg) {\n this.update();\n super.onAfterShow(msg);\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n let input = this.inputNode;\n input.focus();\n input.select();\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.isHidden) {\n return;\n }\n // Fetch the current query text and content node.\n let query = this.inputNode.value;\n let contentNode = this.contentNode;\n // Ensure the search results are generated.\n let results = this._results;\n if (!results) {\n // Generate and store the new search results.\n results = this._results = Private$a.search(this._items, query);\n // Reset the active index.\n this._activeIndex = query\n ? ArrayExt.findFirstIndex(results, Private$a.canActivate)\n : -1;\n }\n // If there is no query and no results, clear the content.\n if (!query && results.length === 0) {\n VirtualDOM.render(null, contentNode);\n return;\n }\n // If the is a query but no results, render the empty message.\n if (query && results.length === 0) {\n let content = this.renderer.renderEmptyMessage({ query });\n VirtualDOM.render(content, contentNode);\n return;\n }\n // Create the render content for the search results.\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let content = new Array(results.length);\n for (let i = 0, n = results.length; i < n; ++i) {\n let result = results[i];\n if (result.type === 'header') {\n let indices = result.indices;\n let category = result.category;\n content[i] = renderer.renderHeader({ category, indices });\n }\n else {\n let item = result.item;\n let indices = result.indices;\n let active = i === activeIndex;\n content[i] = renderer.renderItem({ item, indices, active });\n }\n }\n // Render the search result content.\n VirtualDOM.render(content, contentNode);\n // Adjust the scroll position as needed.\n if (activeIndex < 0 || activeIndex >= results.length) {\n contentNode.scrollTop = 0;\n }\n else {\n let element = contentNode.children[activeIndex];\n ElementExt.scrollIntoViewIfNeeded(contentNode, element);\n }\n }\n /**\n * Handle the `'click'` event for the command palette.\n */\n _evtClick(event) {\n // Bail if the click is not the left button.\n if (event.button !== 0) {\n return;\n }\n // Clear input if the target is clear button\n if (event.target.classList.contains('lm-close-icon')) {\n this.inputNode.value = '';\n this.refresh();\n return;\n }\n // Find the index of the item which was clicked.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return node.contains(event.target);\n });\n // Bail if the click was not on an item.\n if (index === -1) {\n return;\n }\n // Kill the event when a content item is clicked.\n event.preventDefault();\n event.stopPropagation();\n // Execute the item if possible.\n this._execute(index);\n }\n /**\n * Handle the `'keydown'` event for the command palette.\n */\n _evtKeyDown(event) {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n switch (event.keyCode) {\n case 13: // Enter\n event.preventDefault();\n event.stopPropagation();\n this._execute(this._activeIndex);\n break;\n case 38: // Up Arrow\n event.preventDefault();\n event.stopPropagation();\n this._activatePreviousItem();\n break;\n case 40: // Down Arrow\n event.preventDefault();\n event.stopPropagation();\n this._activateNextItem();\n break;\n }\n }\n /**\n * Activate the next enabled command item.\n */\n _activateNextItem() {\n // Bail if there are no search results.\n if (!this._results || this._results.length === 0) {\n return;\n }\n // Find the next enabled item index.\n let ai = this._activeIndex;\n let n = this._results.length;\n let start = ai < n - 1 ? ai + 1 : 0;\n let stop = start === 0 ? n - 1 : start - 1;\n this._activeIndex = ArrayExt.findFirstIndex(this._results, Private$a.canActivate, start, stop);\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Activate the previous enabled command item.\n */\n _activatePreviousItem() {\n // Bail if there are no search results.\n if (!this._results || this._results.length === 0) {\n return;\n }\n // Find the previous enabled item index.\n let ai = this._activeIndex;\n let n = this._results.length;\n let start = ai <= 0 ? n - 1 : ai - 1;\n let stop = start === n - 1 ? 0 : start + 1;\n this._activeIndex = ArrayExt.findLastIndex(this._results, Private$a.canActivate, start, stop);\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Execute the command item at the given index, if possible.\n */\n _execute(index) {\n // Bail if there are no search results.\n if (!this._results) {\n return;\n }\n // Bail if the index is out of range.\n let part = this._results[index];\n if (!part) {\n return;\n }\n // Update the search text if the item is a header.\n if (part.type === 'header') {\n let input = this.inputNode;\n input.value = `${part.category.toLowerCase()} `;\n input.focus();\n this.refresh();\n return;\n }\n // Bail if item is not enabled.\n if (!part.item.isEnabled) {\n return;\n }\n // Execute the item.\n this.commands.execute(part.item.command, part.item.args);\n // Clear the query text.\n this.inputNode.value = '';\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Toggle the focused modifier based on the input node focus state.\n */\n _toggleFocused() {\n let focused = document.activeElement === this.inputNode;\n this.toggleClass('lm-mod-focused', focused);\n }\n /**\n * A signal handler for generic command changes.\n */\n _onGenericChange() {\n this.refresh();\n }\n}\n/**\n * The namespace for the `CommandPalette` class statics.\n */\n(function (CommandPalette) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Render the virtual element for a command palette header.\n *\n * @param data - The data to use for rendering the header.\n *\n * @returns A virtual element representing the header.\n */\n renderHeader(data) {\n let content = this.formatHeader(data);\n return h.li({ className: 'lm-CommandPalette-header' }, content);\n }\n /**\n * Render the virtual element for a command palette item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n if (data.item.isToggleable) {\n return h.li({\n className,\n dataset,\n role: 'menuitemcheckbox',\n 'aria-checked': `${data.item.isToggled}`\n }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n }\n return h.li({\n className,\n dataset,\n role: 'menuitem'\n }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n }\n /**\n * Render the empty results message for a command palette.\n *\n * @param data - The data to use for rendering the message.\n *\n * @returns A virtual element representing the message.\n */\n renderEmptyMessage(data) {\n let content = this.formatEmptyMessage(data);\n return h.li({ className: 'lm-CommandPalette-emptyMessage' }, content);\n }\n /**\n * Render the icon for a command palette item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the icon.\n */\n renderItemIcon(data) {\n let className = this.createIconClass(data);\n // If data.item.icon is undefined, it will be ignored.\n return h.div({ className }, data.item.icon, data.item.iconLabel);\n }\n /**\n * Render the content for a command palette item.\n *\n * @param data - The data to use for rendering the content.\n *\n * @returns A virtual element representing the content.\n */\n renderItemContent(data) {\n return h.div({ className: 'lm-CommandPalette-itemContent' }, this.renderItemLabel(data), this.renderItemCaption(data));\n }\n /**\n * Render the label for a command palette item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the label.\n */\n renderItemLabel(data) {\n let content = this.formatItemLabel(data);\n return h.div({ className: 'lm-CommandPalette-itemLabel' }, content);\n }\n /**\n * Render the caption for a command palette item.\n *\n * @param data - The data to use for rendering the caption.\n *\n * @returns A virtual element representing the caption.\n */\n renderItemCaption(data) {\n let content = this.formatItemCaption(data);\n return h.div({ className: 'lm-CommandPalette-itemCaption' }, content);\n }\n /**\n * Render the shortcut for a command palette item.\n *\n * @param data - The data to use for rendering the shortcut.\n *\n * @returns A virtual element representing the shortcut.\n */\n renderItemShortcut(data) {\n let content = this.formatItemShortcut(data);\n return h.div({ className: 'lm-CommandPalette-itemShortcut' }, content);\n }\n /**\n * Create the class name for the command palette item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the command palette item.\n */\n createItemClass(data) {\n // Set up the initial class name.\n let name = 'lm-CommandPalette-item';\n // Add the boolean state classes.\n if (!data.item.isEnabled) {\n name += ' lm-mod-disabled';\n }\n if (data.item.isToggled) {\n name += ' lm-mod-toggled';\n }\n if (data.active) {\n name += ' lm-mod-active';\n }\n // Add the extra class.\n let extra = data.item.className;\n if (extra) {\n name += ` ${extra}`;\n }\n // Return the complete class name.\n return name;\n }\n /**\n * Create the dataset for the command palette item.\n *\n * @param data - The data to use for creating the dataset.\n *\n * @returns The dataset for the command palette item.\n */\n createItemDataset(data) {\n return { ...data.item.dataset, command: data.item.command };\n }\n /**\n * Create the class name for the command item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-CommandPalette-itemIcon';\n let extra = data.item.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the render content for the header node.\n *\n * @param data - The data to use for the header content.\n *\n * @returns The content to add to the header node.\n */\n formatHeader(data) {\n if (!data.indices || data.indices.length === 0) {\n return data.category;\n }\n return StringExt.highlight(data.category, data.indices, h.mark);\n }\n /**\n * Create the render content for the empty message node.\n *\n * @param data - The data to use for the empty message content.\n *\n * @returns The content to add to the empty message node.\n */\n formatEmptyMessage(data) {\n return `No commands found that match '${data.query}'`;\n }\n /**\n * Create the render content for the item shortcut node.\n *\n * @param data - The data to use for the shortcut content.\n *\n * @returns The content to add to the shortcut node.\n */\n formatItemShortcut(data) {\n let kb = data.item.keyBinding;\n return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n }\n /**\n * Create the render content for the item label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatItemLabel(data) {\n if (!data.indices || data.indices.length === 0) {\n return data.item.label;\n }\n return StringExt.highlight(data.item.label, data.indices, h.mark);\n }\n /**\n * Create the render content for the item caption node.\n *\n * @param data - The data to use for the caption content.\n *\n * @returns The content to add to the caption node.\n */\n formatItemCaption(data) {\n return data.item.caption;\n }\n }\n CommandPalette.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n CommandPalette.defaultRenderer = new Renderer();\n})(CommandPalette || (CommandPalette = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$a;\n(function (Private) {\n /**\n * Create the DOM node for a command palette.\n */\n function createNode() {\n let node = document.createElement('div');\n let search = document.createElement('div');\n let wrapper = document.createElement('div');\n let input = document.createElement('input');\n let content = document.createElement('ul');\n let clear = document.createElement('button');\n search.className = 'lm-CommandPalette-search';\n wrapper.className = 'lm-CommandPalette-wrapper';\n input.className = 'lm-CommandPalette-input';\n clear.className = 'lm-close-icon';\n content.className = 'lm-CommandPalette-content';\n content.setAttribute('role', 'menu');\n input.spellcheck = false;\n wrapper.appendChild(input);\n wrapper.appendChild(clear);\n search.appendChild(wrapper);\n node.appendChild(search);\n node.appendChild(content);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Create a new command item from a command registry and options.\n */\n function createItem(commands, options) {\n return new CommandItem(commands, options);\n }\n Private.createItem = createItem;\n /**\n * Search an array of command items for fuzzy matches.\n */\n function search(items, query) {\n // Fuzzy match the items for the query.\n let scores = matchItems(items, query);\n // Sort the items based on their score.\n scores.sort(scoreCmp);\n // Create the results for the search.\n return createResults(scores);\n }\n Private.search = search;\n /**\n * Test whether a result item can be activated.\n */\n function canActivate(result) {\n return result.type === 'item' && result.item.isEnabled;\n }\n Private.canActivate = canActivate;\n /**\n * Normalize a category for a command item.\n */\n function normalizeCategory(category) {\n return category.trim().replace(/\\s+/g, ' ');\n }\n /**\n * Normalize the query text for a fuzzy search.\n */\n function normalizeQuery(text) {\n return text.replace(/\\s+/g, '').toLowerCase();\n }\n /**\n * Perform a fuzzy match on an array of command items.\n */\n function matchItems(items, query) {\n // Normalize the query text to lower case with no whitespace.\n query = normalizeQuery(query);\n // Create the array to hold the scores.\n let scores = [];\n // Iterate over the items and match against the query.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Ignore items which are not visible.\n let item = items[i];\n if (!item.isVisible) {\n continue;\n }\n // If the query is empty, all items are matched by default.\n if (!query) {\n scores.push({\n matchType: 3 /* MatchType.Default */,\n categoryIndices: null,\n labelIndices: null,\n score: 0,\n item\n });\n continue;\n }\n // Run the fuzzy search for the item and query.\n let score = fuzzySearch(item, query);\n // Ignore the item if it is not a match.\n if (!score) {\n continue;\n }\n // Penalize disabled items.\n // TODO - push disabled items all the way down in sort cmp?\n if (!item.isEnabled) {\n score.score += 1000;\n }\n // Add the score to the results.\n scores.push(score);\n }\n // Return the final array of scores.\n return scores;\n }\n /**\n * Perform a fuzzy search on a single command item.\n */\n function fuzzySearch(item, query) {\n // Create the source text to be searched.\n let category = item.category.toLowerCase();\n let label = item.label.toLowerCase();\n let source = `${category} ${label}`;\n // Set up the match score and indices array.\n let score = Infinity;\n let indices = null;\n // The regex for search word boundaries\n let rgx = /\\b\\w/g;\n // Search the source by word boundary.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // Find the next word boundary in the source.\n let rgxMatch = rgx.exec(source);\n // Break if there is no more source context.\n if (!rgxMatch) {\n break;\n }\n // Run the string match on the relevant substring.\n let match = StringExt.matchSumOfDeltas(source, query, rgxMatch.index);\n // Break if there is no match.\n if (!match) {\n break;\n }\n // Update the match if the score is better.\n if (match.score <= score) {\n score = match.score;\n indices = match.indices;\n }\n }\n // Bail if there was no match.\n if (!indices || score === Infinity) {\n return null;\n }\n // Compute the pivot index between category and label text.\n let pivot = category.length + 1;\n // Find the slice index to separate matched indices.\n let j = ArrayExt.lowerBound(indices, pivot, (a, b) => a - b);\n // Extract the matched category and label indices.\n let categoryIndices = indices.slice(0, j);\n let labelIndices = indices.slice(j);\n // Adjust the label indices for the pivot offset.\n for (let i = 0, n = labelIndices.length; i < n; ++i) {\n labelIndices[i] -= pivot;\n }\n // Handle a pure label match.\n if (categoryIndices.length === 0) {\n return {\n matchType: 0 /* MatchType.Label */,\n categoryIndices: null,\n labelIndices,\n score,\n item\n };\n }\n // Handle a pure category match.\n if (labelIndices.length === 0) {\n return {\n matchType: 1 /* MatchType.Category */,\n categoryIndices,\n labelIndices: null,\n score,\n item\n };\n }\n // Handle a split match.\n return {\n matchType: 2 /* MatchType.Split */,\n categoryIndices,\n labelIndices,\n score,\n item\n };\n }\n /**\n * A sort comparison function for a match score.\n */\n function scoreCmp(a, b) {\n // First compare based on the match type\n let m1 = a.matchType - b.matchType;\n if (m1 !== 0) {\n return m1;\n }\n // Otherwise, compare based on the match score.\n let d1 = a.score - b.score;\n if (d1 !== 0) {\n return d1;\n }\n // Find the match index based on the match type.\n let i1 = 0;\n let i2 = 0;\n switch (a.matchType) {\n case 0 /* MatchType.Label */:\n i1 = a.labelIndices[0];\n i2 = b.labelIndices[0];\n break;\n case 1 /* MatchType.Category */:\n case 2 /* MatchType.Split */:\n i1 = a.categoryIndices[0];\n i2 = b.categoryIndices[0];\n break;\n }\n // Compare based on the match index.\n if (i1 !== i2) {\n return i1 - i2;\n }\n // Otherwise, compare by category.\n let d2 = a.item.category.localeCompare(b.item.category);\n if (d2 !== 0) {\n return d2;\n }\n // Otherwise, compare by rank.\n let r1 = a.item.rank;\n let r2 = b.item.rank;\n if (r1 !== r2) {\n return r1 < r2 ? -1 : 1; // Infinity safe\n }\n // Finally, compare by label.\n return a.item.label.localeCompare(b.item.label);\n }\n /**\n * Create the results from an array of sorted scores.\n */\n function createResults(scores) {\n // Set up the search results array.\n let results = [];\n // Iterate over each score in the array.\n for (let i = 0, n = scores.length; i < n; ++i) {\n // Extract the current item and indices.\n let { item, categoryIndices, labelIndices } = scores[i];\n // Extract the category for the current item.\n let category = item.category;\n // Is this the same category as the preceding result?\n if (i === 0 || category !== scores[i - 1].item.category) {\n // Add the header result for the category.\n results.push({ type: 'header', category, indices: categoryIndices });\n }\n // Create the item result for the score.\n results.push({ type: 'item', item, indices: labelIndices });\n }\n // Return the final results.\n return results;\n }\n /**\n * A concrete implementation of `CommandPalette.IItem`.\n */\n class CommandItem {\n /**\n * Construct a new command item.\n */\n constructor(commands, options) {\n this._commands = commands;\n this.category = normalizeCategory(options.category);\n this.command = options.command;\n this.args = options.args || JSONExt.emptyObject;\n this.rank = options.rank !== undefined ? options.rank : Infinity;\n }\n /**\n * The display label for the command item.\n */\n get label() {\n return this._commands.label(this.command, this.args);\n }\n /**\n * The icon renderer for the command item.\n */\n get icon() {\n return this._commands.icon(this.command, this.args);\n }\n /**\n * The icon class for the command item.\n */\n get iconClass() {\n return this._commands.iconClass(this.command, this.args);\n }\n /**\n * The icon label for the command item.\n */\n get iconLabel() {\n return this._commands.iconLabel(this.command, this.args);\n }\n /**\n * The display caption for the command item.\n */\n get caption() {\n return this._commands.caption(this.command, this.args);\n }\n /**\n * The extra class name for the command item.\n */\n get className() {\n return this._commands.className(this.command, this.args);\n }\n /**\n * The dataset for the command item.\n */\n get dataset() {\n return this._commands.dataset(this.command, this.args);\n }\n /**\n * Whether the command item is enabled.\n */\n get isEnabled() {\n return this._commands.isEnabled(this.command, this.args);\n }\n /**\n * Whether the command item is toggled.\n */\n get isToggled() {\n return this._commands.isToggled(this.command, this.args);\n }\n /**\n * Whether the command item is toggleable.\n */\n get isToggleable() {\n return this._commands.isToggleable(this.command, this.args);\n }\n /**\n * Whether the command item is visible.\n */\n get isVisible() {\n return this._commands.isVisible(this.command, this.args);\n }\n /**\n * The key binding for the command item.\n */\n get keyBinding() {\n let { command, args } = this;\n return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n return kb.command === command && JSONExt.deepEqual(kb.args, args);\n }) || null);\n }\n }\n})(Private$a || (Private$a = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays items as a canonical menu.\n */\nclass Menu extends Widget {\n /**\n * Construct a new menu.\n *\n * @param options - The options for initializing the menu.\n */\n constructor(options) {\n super({ node: Private$9.createNode() });\n this._childIndex = -1;\n this._activeIndex = -1;\n this._openTimerID = 0;\n this._closeTimerID = 0;\n this._items = [];\n this._childMenu = null;\n this._parentMenu = null;\n this._aboutToClose = new Signal(this);\n this._menuRequested = new Signal(this);\n this.addClass('lm-Menu');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.commands = options.commands;\n this.renderer = options.renderer || Menu.defaultRenderer;\n }\n /**\n * Dispose of the resources held by the menu.\n */\n dispose() {\n this.close();\n this._items.length = 0;\n super.dispose();\n }\n /**\n * A signal emitted just before the menu is closed.\n *\n * #### Notes\n * This signal is emitted when the menu receives a `'close-request'`\n * message, just before it removes itself from the DOM.\n *\n * This signal is not emitted if the menu is already detached from\n * the DOM when it receives the `'close-request'` message.\n */\n get aboutToClose() {\n return this._aboutToClose;\n }\n /**\n * A signal emitted when a new menu is requested by the user.\n *\n * #### Notes\n * This signal is emitted whenever the user presses the right or left\n * arrow keys, and a submenu cannot be opened or closed in response.\n *\n * This signal is useful when implementing menu bars in order to open\n * the next or previous menu in response to a user key press.\n *\n * This signal is only emitted for the root menu in a hierarchy.\n */\n get menuRequested() {\n return this._menuRequested;\n }\n /**\n * The parent menu of the menu.\n *\n * #### Notes\n * This is `null` unless the menu is an open submenu.\n */\n get parentMenu() {\n return this._parentMenu;\n }\n /**\n * The child menu of the menu.\n *\n * #### Notes\n * This is `null` unless the menu has an open submenu.\n */\n get childMenu() {\n return this._childMenu;\n }\n /**\n * The root menu of the menu hierarchy.\n */\n get rootMenu() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let menu = this;\n while (menu._parentMenu) {\n menu = menu._parentMenu;\n }\n return menu;\n }\n /**\n * The leaf menu of the menu hierarchy.\n */\n get leafMenu() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let menu = this;\n while (menu._childMenu) {\n menu = menu._childMenu;\n }\n return menu;\n }\n /**\n * The menu content node.\n *\n * #### Notes\n * This is the node which holds the menu item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-Menu-content')[0];\n }\n /**\n * Get the currently active menu item.\n */\n get activeItem() {\n return this._items[this._activeIndex] || null;\n }\n /**\n * Set the currently active menu item.\n *\n * #### Notes\n * If the item cannot be activated, the item will be set to `null`.\n */\n set activeItem(value) {\n this.activeIndex = value ? this._items.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently active menu item.\n *\n * #### Notes\n * This will be `-1` if no menu item is active.\n */\n get activeIndex() {\n return this._activeIndex;\n }\n /**\n * Set the index of the currently active menu item.\n *\n * #### Notes\n * If the item cannot be activated, the index will be set to `-1`.\n */\n set activeIndex(value) {\n // Adjust the value for an out of range index.\n if (value < 0 || value >= this._items.length) {\n value = -1;\n }\n // Ensure the item can be activated.\n if (value !== -1 && !Private$9.canActivate(this._items[value])) {\n value = -1;\n }\n // Bail if the index will not change.\n if (this._activeIndex === value) {\n return;\n }\n // Update the active index.\n this._activeIndex = value;\n // Make active element in focus\n if (this._activeIndex >= 0 &&\n this.contentNode.childNodes[this._activeIndex]) {\n this.contentNode.childNodes[this._activeIndex].focus();\n }\n // schedule an update of the items.\n this.update();\n }\n /**\n * A read-only array of the menu items in the menu.\n */\n get items() {\n return this._items;\n }\n /**\n * Activate the next selectable item in the menu.\n *\n * #### Notes\n * If no item is selectable, the index will be set to `-1`.\n */\n activateNextItem() {\n let n = this._items.length;\n let ai = this._activeIndex;\n let start = ai < n - 1 ? ai + 1 : 0;\n let stop = start === 0 ? n - 1 : start - 1;\n this.activeIndex = ArrayExt.findFirstIndex(this._items, Private$9.canActivate, start, stop);\n }\n /**\n * Activate the previous selectable item in the menu.\n *\n * #### Notes\n * If no item is selectable, the index will be set to `-1`.\n */\n activatePreviousItem() {\n let n = this._items.length;\n let ai = this._activeIndex;\n let start = ai <= 0 ? n - 1 : ai - 1;\n let stop = start === n - 1 ? 0 : start + 1;\n this.activeIndex = ArrayExt.findLastIndex(this._items, Private$9.canActivate, start, stop);\n }\n /**\n * Trigger the active menu item.\n *\n * #### Notes\n * If the active item is a submenu, it will be opened and the first\n * item will be activated.\n *\n * If the active item is a command, the command will be executed.\n *\n * If the menu is not attached, this is a no-op.\n *\n * If there is no active item, this is a no-op.\n */\n triggerActiveItem() {\n // Bail if the menu is not attached.\n if (!this.isAttached) {\n return;\n }\n // Bail if there is no active item.\n let item = this.activeItem;\n if (!item) {\n return;\n }\n // Cancel the pending timers.\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n // If the item is a submenu, open it.\n if (item.type === 'submenu') {\n this._openChildMenu(true);\n return;\n }\n // Close the root menu before executing the command.\n this.rootMenu.close();\n // Execute the command for the item.\n let { command, args } = item;\n if (this.commands.isEnabled(command, args)) {\n this.commands.execute(command, args);\n }\n else {\n console.log(`Command '${command}' is disabled.`);\n }\n }\n /**\n * Add a menu item to the end of the menu.\n *\n * @param options - The options for creating the menu item.\n *\n * @returns The menu item added to the menu.\n */\n addItem(options) {\n return this.insertItem(this._items.length, options);\n }\n /**\n * Insert a menu item into the menu at the specified index.\n *\n * @param index - The index at which to insert the item.\n *\n * @param options - The options for creating the menu item.\n *\n * @returns The menu item added to the menu.\n *\n * #### Notes\n * The index will be clamped to the bounds of the items.\n */\n insertItem(index, options) {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Clamp the insert index to the array bounds.\n let i = Math.max(0, Math.min(index, this._items.length));\n // Create the item for the options.\n let item = Private$9.createItem(this, options);\n // Insert the item into the array.\n ArrayExt.insert(this._items, i, item);\n // Schedule an update of the items.\n this.update();\n // Return the item added to the menu.\n return item;\n }\n /**\n * Remove an item from the menu.\n *\n * @param item - The item to remove from the menu.\n *\n * #### Notes\n * This is a no-op if the item is not in the menu.\n */\n removeItem(item) {\n this.removeItemAt(this._items.indexOf(item));\n }\n /**\n * Remove the item at a given index from the menu.\n *\n * @param index - The index of the item to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeItemAt(index) {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Remove the item from the array.\n let item = ArrayExt.removeAt(this._items, index);\n // Bail if the index is out of range.\n if (!item) {\n return;\n }\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Remove all menu items from the menu.\n */\n clearItems() {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Bail if there is nothing to remove.\n if (this._items.length === 0) {\n return;\n }\n // Clear the items.\n this._items.length = 0;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Open the menu at the specified location.\n *\n * @param x - The client X coordinate of the menu location.\n *\n * @param y - The client Y coordinate of the menu location.\n *\n * @param options - The additional options for opening the menu.\n *\n * #### Notes\n * The menu will be opened at the given location unless it will not\n * fully fit on the screen. If it will not fit, it will be adjusted\n * to fit naturally on the screen.\n *\n * The menu will be attached under the `host` element in the DOM\n * (or `document.body` if `host` is `null`) and before the `ref`\n * element (or as the last child of `host` if `ref` is `null`).\n * The menu may be displayed outside of the `host` element\n * following the rules of CSS absolute positioning.\n *\n * This is a no-op if the menu is already attached to the DOM.\n */\n open(x, y, options = {}) {\n var _a, _b;\n // Bail early if the menu is already attached.\n if (this.isAttached) {\n return;\n }\n // Extract the menu options.\n let forceX = options.forceX || false;\n let forceY = options.forceY || false;\n const host = (_a = options.host) !== null && _a !== void 0 ? _a : null;\n const ref = (_b = options.ref) !== null && _b !== void 0 ? _b : null;\n // Open the menu as a root menu.\n Private$9.openRootMenu(this, x, y, forceX, forceY, host, ref);\n // Activate the menu to accept keyboard input.\n this.activate();\n }\n /**\n * Handle the DOM events for the menu.\n *\n * @param event - The DOM event sent to the menu.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the menu's DOM nodes. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'mouseup':\n this._evtMouseUp(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'mouseenter':\n this._evtMouseEnter(event);\n break;\n case 'mouseleave':\n this._evtMouseLeave(event);\n break;\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('mouseup', this);\n this.node.addEventListener('mousemove', this);\n this.node.addEventListener('mouseenter', this);\n this.node.addEventListener('mouseleave', this);\n this.node.addEventListener('contextmenu', this);\n document.addEventListener('mousedown', this, true);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('mouseup', this);\n this.node.removeEventListener('mousemove', this);\n this.node.removeEventListener('mouseenter', this);\n this.node.removeEventListener('mouseleave', this);\n this.node.removeEventListener('contextmenu', this);\n document.removeEventListener('mousedown', this, true);\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n this.node.focus();\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n let items = this._items;\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let collapsedFlags = Private$9.computeCollapsed(items);\n let content = new Array(items.length);\n for (let i = 0, n = items.length; i < n; ++i) {\n let item = items[i];\n let active = i === activeIndex;\n let collapsed = collapsedFlags[i];\n content[i] = renderer.renderItem({\n item,\n active,\n collapsed,\n onfocus: () => {\n this.activeIndex = i;\n }\n });\n }\n VirtualDOM.render(content, this.contentNode);\n }\n /**\n * A message handler invoked on a `'close-request'` message.\n */\n onCloseRequest(msg) {\n // Cancel the pending timers.\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n // Reset the active index.\n this.activeIndex = -1;\n // Close any open child menu.\n let childMenu = this._childMenu;\n if (childMenu) {\n this._childIndex = -1;\n this._childMenu = null;\n childMenu._parentMenu = null;\n childMenu.close();\n }\n // Remove this menu from its parent and activate the parent.\n let parentMenu = this._parentMenu;\n if (parentMenu) {\n this._parentMenu = null;\n parentMenu._childIndex = -1;\n parentMenu._childMenu = null;\n parentMenu.activate();\n }\n // Emit the `aboutToClose` signal if the menu is attached.\n if (this.isAttached) {\n this._aboutToClose.emit(undefined);\n }\n // Finish closing the menu.\n super.onCloseRequest(msg);\n }\n /**\n * Handle the `'keydown'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtKeyDown(event) {\n // A menu handles all keydown events.\n event.preventDefault();\n event.stopPropagation();\n // Fetch the key code for the event.\n let kc = event.keyCode;\n // Enter\n if (kc === 13) {\n this.triggerActiveItem();\n return;\n }\n // Escape\n if (kc === 27) {\n this.close();\n return;\n }\n // Left Arrow\n if (kc === 37) {\n if (this._parentMenu) {\n this.close();\n }\n else {\n this._menuRequested.emit('previous');\n }\n return;\n }\n // Up Arrow\n if (kc === 38) {\n this.activatePreviousItem();\n return;\n }\n // Right Arrow\n if (kc === 39) {\n let item = this.activeItem;\n if (item && item.type === 'submenu') {\n this.triggerActiveItem();\n }\n else {\n this.rootMenu._menuRequested.emit('next');\n }\n return;\n }\n // Down Arrow\n if (kc === 40) {\n this.activateNextItem();\n return;\n }\n // Get the pressed key character.\n let key = getKeyboardLayout().keyForKeydownEvent(event);\n // Bail if the key is not valid.\n if (!key) {\n return;\n }\n // Search for the next best matching mnemonic item.\n let start = this._activeIndex + 1;\n let result = Private$9.findMnemonic(this._items, key, start);\n // Handle the requested mnemonic based on the search results.\n // If exactly one mnemonic is matched, that item is triggered.\n // Otherwise, the next mnemonic is activated if available,\n // followed by the auto mnemonic if available.\n if (result.index !== -1 && !result.multiple) {\n this.activeIndex = result.index;\n this.triggerActiveItem();\n }\n else if (result.index !== -1) {\n this.activeIndex = result.index;\n }\n else if (result.auto !== -1) {\n this.activeIndex = result.auto;\n }\n }\n /**\n * Handle the `'mouseup'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseUp(event) {\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.triggerActiveItem();\n }\n /**\n * Handle the `'mousemove'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseMove(event) {\n // Hit test the item nodes for the item under the mouse.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // Bail early if the mouse is already over the active index.\n if (index === this._activeIndex) {\n return;\n }\n // Update and coerce the active index.\n this.activeIndex = index;\n index = this.activeIndex;\n // If the index is the current child index, cancel the timers.\n if (index === this._childIndex) {\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n return;\n }\n // If a child menu is currently open, start the close timer.\n if (this._childIndex !== -1) {\n this._startCloseTimer();\n }\n // Cancel the open timer to give a full delay for opening.\n this._cancelOpenTimer();\n // Bail if the active item is not a valid submenu item.\n let item = this.activeItem;\n if (!item || item.type !== 'submenu' || !item.submenu) {\n return;\n }\n // Start the open timer to open the active item submenu.\n this._startOpenTimer();\n }\n /**\n * Handle the `'mouseenter'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseEnter(event) {\n // Synchronize the active ancestor items.\n for (let menu = this._parentMenu; menu; menu = menu._parentMenu) {\n menu._cancelOpenTimer();\n menu._cancelCloseTimer();\n menu.activeIndex = menu._childIndex;\n }\n }\n /**\n * Handle the `'mouseleave'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseLeave(event) {\n // Cancel any pending submenu opening.\n this._cancelOpenTimer();\n // If there is no open child menu, just reset the active index.\n if (!this._childMenu) {\n this.activeIndex = -1;\n return;\n }\n // If the mouse is over the child menu, cancel the close timer.\n let { clientX, clientY } = event;\n if (ElementExt.hitTest(this._childMenu.node, clientX, clientY)) {\n this._cancelCloseTimer();\n return;\n }\n // Otherwise, reset the active index and start the close timer.\n this.activeIndex = -1;\n this._startCloseTimer();\n }\n /**\n * Handle the `'mousedown'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the document node.\n */\n _evtMouseDown(event) {\n // Bail if the menu is not a root menu.\n if (this._parentMenu) {\n return;\n }\n // The mouse button which is pressed is irrelevant. If the press\n // is not on a menu, the entire hierarchy is closed and the event\n // is allowed to propagate. This allows other code to act on the\n // event, such as focusing the clicked element.\n if (Private$9.hitTestMenus(this, event.clientX, event.clientY)) {\n event.preventDefault();\n event.stopPropagation();\n }\n else {\n this.close();\n }\n }\n /**\n * Open the child menu at the active index immediately.\n *\n * If a different child menu is already open, it will be closed,\n * even if the active item is not a valid submenu.\n */\n _openChildMenu(activateFirst = false) {\n // If the item is not a valid submenu, close the child menu.\n let item = this.activeItem;\n if (!item || item.type !== 'submenu' || !item.submenu) {\n this._closeChildMenu();\n return;\n }\n // Do nothing if the child menu will not change.\n let submenu = item.submenu;\n if (submenu === this._childMenu) {\n return;\n }\n // Prior to any DOM modifications save window data\n Menu.saveWindowData();\n // Ensure the current child menu is closed.\n this._closeChildMenu();\n // Update the private child state.\n this._childMenu = submenu;\n this._childIndex = this._activeIndex;\n // Set the parent menu reference for the child.\n submenu._parentMenu = this;\n // Ensure the menu is updated and lookup the item node.\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n let itemNode = this.contentNode.children[this._activeIndex];\n // Open the submenu at the active node.\n Private$9.openSubmenu(submenu, itemNode);\n // Activate the first item if desired.\n if (activateFirst) {\n submenu.activeIndex = -1;\n submenu.activateNextItem();\n }\n // Activate the child menu.\n submenu.activate();\n }\n /**\n * Close the child menu immediately.\n *\n * This is a no-op if a child menu is not open.\n */\n _closeChildMenu() {\n if (this._childMenu) {\n this._childMenu.close();\n }\n }\n /**\n * Start the open timer, unless it is already pending.\n */\n _startOpenTimer() {\n if (this._openTimerID === 0) {\n this._openTimerID = window.setTimeout(() => {\n this._openTimerID = 0;\n this._openChildMenu();\n }, Private$9.TIMER_DELAY);\n }\n }\n /**\n * Start the close timer, unless it is already pending.\n */\n _startCloseTimer() {\n if (this._closeTimerID === 0) {\n this._closeTimerID = window.setTimeout(() => {\n this._closeTimerID = 0;\n this._closeChildMenu();\n }, Private$9.TIMER_DELAY);\n }\n }\n /**\n * Cancel the open timer, if the timer is pending.\n */\n _cancelOpenTimer() {\n if (this._openTimerID !== 0) {\n clearTimeout(this._openTimerID);\n this._openTimerID = 0;\n }\n }\n /**\n * Cancel the close timer, if the timer is pending.\n */\n _cancelCloseTimer() {\n if (this._closeTimerID !== 0) {\n clearTimeout(this._closeTimerID);\n this._closeTimerID = 0;\n }\n }\n /**\n * Save window data used for menu positioning in transient cache.\n *\n * In order to avoid layout trashing it is recommended to invoke this\n * method immediately prior to opening the menu and any DOM modifications\n * (like closing previously visible menu, or adding a class to menu widget).\n *\n * The transient cache will be released upon `open()` call.\n */\n static saveWindowData() {\n Private$9.saveWindowData();\n }\n}\n/**\n * The namespace for the `Menu` class statics.\n */\n(function (Menu) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n /**\n * Render the virtual element for a menu item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n let aria = this.createItemARIA(data);\n return h.li({\n className,\n dataset,\n tabindex: '0',\n onfocus: data.onfocus,\n ...aria\n }, this.renderIcon(data), this.renderLabel(data), this.renderShortcut(data), this.renderSubmenu(data));\n }\n /**\n * Render the icon element for a menu item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the item icon.\n */\n renderIcon(data) {\n let className = this.createIconClass(data);\n // If data.item.icon is undefined, it will be ignored.\n return h.div({ className }, data.item.icon, data.item.iconLabel);\n }\n /**\n * Render the label element for a menu item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the item label.\n */\n renderLabel(data) {\n let content = this.formatLabel(data);\n return h.div({ className: 'lm-Menu-itemLabel' }, content);\n }\n /**\n * Render the shortcut element for a menu item.\n *\n * @param data - The data to use for rendering the shortcut.\n *\n * @returns A virtual element representing the item shortcut.\n */\n renderShortcut(data) {\n let content = this.formatShortcut(data);\n return h.div({ className: 'lm-Menu-itemShortcut' }, content);\n }\n /**\n * Render the submenu icon element for a menu item.\n *\n * @param data - The data to use for rendering the submenu icon.\n *\n * @returns A virtual element representing the submenu icon.\n */\n renderSubmenu(data) {\n return h.div({ className: 'lm-Menu-itemSubmenuIcon' });\n }\n /**\n * Create the class name for the menu item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the menu item.\n */\n createItemClass(data) {\n // Setup the initial class name.\n let name = 'lm-Menu-item';\n // Add the boolean state classes.\n if (!data.item.isEnabled) {\n name += ' lm-mod-disabled';\n }\n if (data.item.isToggled) {\n name += ' lm-mod-toggled';\n }\n if (!data.item.isVisible) {\n name += ' lm-mod-hidden';\n }\n if (data.active) {\n name += ' lm-mod-active';\n }\n if (data.collapsed) {\n name += ' lm-mod-collapsed';\n }\n // Add the extra class.\n let extra = data.item.className;\n if (extra) {\n name += ` ${extra}`;\n }\n // Return the complete class name.\n return name;\n }\n /**\n * Create the dataset for the menu item.\n *\n * @param data - The data to use for creating the dataset.\n *\n * @returns The dataset for the menu item.\n */\n createItemDataset(data) {\n let result;\n let { type, command, dataset } = data.item;\n if (type === 'command') {\n result = { ...dataset, type, command };\n }\n else {\n result = { ...dataset, type };\n }\n return result;\n }\n /**\n * Create the class name for the menu item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-Menu-itemIcon';\n let extra = data.item.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the aria attributes for menu item.\n *\n * @param data - The data to use for the aria attributes.\n *\n * @returns The aria attributes object for the item.\n */\n createItemARIA(data) {\n let aria = {};\n switch (data.item.type) {\n case 'separator':\n aria.role = 'presentation';\n break;\n case 'submenu':\n aria['aria-haspopup'] = 'true';\n if (!data.item.isEnabled) {\n aria['aria-disabled'] = 'true';\n }\n break;\n default:\n if (!data.item.isEnabled) {\n aria['aria-disabled'] = 'true';\n }\n aria.role = 'menuitem';\n }\n return aria;\n }\n /**\n * Create the render content for the label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatLabel(data) {\n // Fetch the label text and mnemonic index.\n let { label, mnemonic } = data.item;\n // If the index is out of range, do not modify the label.\n if (mnemonic < 0 || mnemonic >= label.length) {\n return label;\n }\n // Split the label into parts.\n let prefix = label.slice(0, mnemonic);\n let suffix = label.slice(mnemonic + 1);\n let char = label[mnemonic];\n // Wrap the mnemonic character in a span.\n let span = h.span({ className: 'lm-Menu-itemMnemonic' }, char);\n // Return the content parts.\n return [prefix, span, suffix];\n }\n /**\n * Create the render content for the shortcut node.\n *\n * @param data - The data to use for the shortcut content.\n *\n * @returns The content to add to the shortcut node.\n */\n formatShortcut(data) {\n let kb = data.item.keyBinding;\n return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n }\n }\n Menu.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n Menu.defaultRenderer = new Renderer();\n})(Menu || (Menu = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$9;\n(function (Private) {\n /**\n * The ms delay for opening and closing a submenu.\n */\n Private.TIMER_DELAY = 300;\n /**\n * The horizontal pixel overlap for an open submenu.\n */\n Private.SUBMENU_OVERLAP = 3;\n let transientWindowDataCache = null;\n let transientCacheCounter = 0;\n function getWindowData() {\n // if transient cache is in use, take one from it\n if (transientCacheCounter > 0) {\n transientCacheCounter--;\n return transientWindowDataCache;\n }\n return _getWindowData();\n }\n /**\n * Store window data in transient cache.\n *\n * The transient cache will be released upon `getWindowData()` call.\n * If this function is called multiple times, the cache will be\n * retained until as many calls to `getWindowData()` were made.\n *\n * Note: should be called before any DOM modifications.\n */\n function saveWindowData() {\n transientWindowDataCache = _getWindowData();\n transientCacheCounter++;\n }\n Private.saveWindowData = saveWindowData;\n /**\n * Create the DOM node for a menu.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.className = 'lm-Menu-content';\n node.appendChild(content);\n content.setAttribute('role', 'menu');\n node.tabIndex = 0;\n return node;\n }\n Private.createNode = createNode;\n /**\n * Test whether a menu item can be activated.\n */\n function canActivate(item) {\n return item.type !== 'separator' && item.isEnabled && item.isVisible;\n }\n Private.canActivate = canActivate;\n /**\n * Create a new menu item for an owner menu.\n */\n function createItem(owner, options) {\n return new MenuItem(owner.commands, options);\n }\n Private.createItem = createItem;\n /**\n * Hit test a menu hierarchy starting at the given root.\n */\n function hitTestMenus(menu, x, y) {\n for (let temp = menu; temp; temp = temp.childMenu) {\n if (ElementExt.hitTest(temp.node, x, y)) {\n return true;\n }\n }\n return false;\n }\n Private.hitTestMenus = hitTestMenus;\n /**\n * Compute which extra separator items should be collapsed.\n */\n function computeCollapsed(items) {\n // Allocate the return array and fill it with `false`.\n let result = new Array(items.length);\n ArrayExt.fill(result, false);\n // Collapse the leading separators.\n let k1 = 0;\n let n = items.length;\n for (; k1 < n; ++k1) {\n let item = items[k1];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n break;\n }\n result[k1] = true;\n }\n // Hide the trailing separators.\n let k2 = n - 1;\n for (; k2 >= 0; --k2) {\n let item = items[k2];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n break;\n }\n result[k2] = true;\n }\n // Hide the remaining consecutive separators.\n let hide = false;\n while (++k1 < k2) {\n let item = items[k1];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n hide = false;\n }\n else if (hide) {\n result[k1] = true;\n }\n else {\n hide = true;\n }\n }\n // Return the resulting flags.\n return result;\n }\n Private.computeCollapsed = computeCollapsed;\n function _getWindowData() {\n return {\n pageXOffset: window.pageXOffset,\n pageYOffset: window.pageYOffset,\n clientWidth: document.documentElement.clientWidth,\n clientHeight: document.documentElement.clientHeight\n };\n }\n /**\n * Open a menu as a root menu at the target location.\n */\n function openRootMenu(menu, x, y, forceX, forceY, host, ref) {\n // Get the current position and size of the main viewport.\n const windowData = getWindowData();\n let px = windowData.pageXOffset;\n let py = windowData.pageYOffset;\n let cw = windowData.clientWidth;\n let ch = windowData.clientHeight;\n // Ensure the menu is updated before attaching and measuring.\n MessageLoop.sendMessage(menu, Widget.Msg.UpdateRequest);\n // Compute the maximum allowed height for the menu.\n let maxHeight = ch - (forceY ? y : 0);\n // Fetch common variables.\n let node = menu.node;\n let style = node.style;\n // Clear the menu geometry and prepare it for measuring.\n style.opacity = '0';\n style.maxHeight = `${maxHeight}px`;\n // Attach the menu to the document.\n Widget.attach(menu, host || document.body, ref);\n // Measure the size of the menu.\n let { width, height } = node.getBoundingClientRect();\n // Adjust the X position of the menu to fit on-screen.\n if (!forceX && x + width > px + cw) {\n x = px + cw - width;\n }\n // Adjust the Y position of the menu to fit on-screen.\n if (!forceY && y + height > py + ch) {\n if (y > py + ch) {\n y = py + ch - height;\n }\n else {\n y = y - height;\n }\n }\n // Update the position of the menu to the computed position.\n style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n // Finally, make the menu visible on the screen.\n style.opacity = '1';\n }\n Private.openRootMenu = openRootMenu;\n /**\n * Open a menu as a submenu using an item node for positioning.\n */\n function openSubmenu(submenu, itemNode) {\n // Get the current position and size of the main viewport.\n const windowData = getWindowData();\n let px = windowData.pageXOffset;\n let py = windowData.pageYOffset;\n let cw = windowData.clientWidth;\n let ch = windowData.clientHeight;\n // Ensure the menu is updated before opening.\n MessageLoop.sendMessage(submenu, Widget.Msg.UpdateRequest);\n // Compute the maximum allowed height for the menu.\n let maxHeight = ch;\n // Fetch common variables.\n let node = submenu.node;\n let style = node.style;\n // Clear the menu geometry and prepare it for measuring.\n style.opacity = '0';\n style.maxHeight = `${maxHeight}px`;\n // Attach the menu to the document.\n Widget.attach(submenu, document.body);\n // Measure the size of the menu.\n let { width, height } = node.getBoundingClientRect();\n // Compute the box sizing for the menu.\n let box = ElementExt.boxSizing(submenu.node);\n // Get the bounding rect for the target item node.\n let itemRect = itemNode.getBoundingClientRect();\n // Compute the target X position.\n let x = itemRect.right - Private.SUBMENU_OVERLAP;\n // Adjust the X position to fit on the screen.\n if (x + width > px + cw) {\n x = itemRect.left + Private.SUBMENU_OVERLAP - width;\n }\n // Compute the target Y position.\n let y = itemRect.top - box.borderTop - box.paddingTop;\n // Adjust the Y position to fit on the screen.\n if (y + height > py + ch) {\n y = itemRect.bottom + box.borderBottom + box.paddingBottom - height;\n }\n // Update the position of the menu to the computed position.\n style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n // Finally, make the menu visible on the screen.\n style.opacity = '1';\n }\n Private.openSubmenu = openSubmenu;\n /**\n * Find the best matching mnemonic item.\n *\n * The search starts at the given index and wraps around.\n */\n function findMnemonic(items, key, start) {\n // Setup the result variables.\n let index = -1;\n let auto = -1;\n let multiple = false;\n // Normalize the key to upper case.\n let upperKey = key.toUpperCase();\n // Search the items from the given start index.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Compute the wrapped index.\n let k = (i + start) % n;\n // Lookup the item\n let item = items[k];\n // Ignore items which cannot be activated.\n if (!canActivate(item)) {\n continue;\n }\n // Ignore items with an empty label.\n let label = item.label;\n if (label.length === 0) {\n continue;\n }\n // Lookup the mnemonic index for the label.\n let mn = item.mnemonic;\n // Handle a valid mnemonic index.\n if (mn >= 0 && mn < label.length) {\n if (label[mn].toUpperCase() === upperKey) {\n if (index === -1) {\n index = k;\n }\n else {\n multiple = true;\n }\n }\n continue;\n }\n // Finally, handle the auto index if possible.\n if (auto === -1 && label[0].toUpperCase() === upperKey) {\n auto = k;\n }\n }\n // Return the search results.\n return { index, multiple, auto };\n }\n Private.findMnemonic = findMnemonic;\n /**\n * A concrete implementation of `Menu.IItem`.\n */\n class MenuItem {\n /**\n * Construct a new menu item.\n */\n constructor(commands, options) {\n this._commands = commands;\n this.type = options.type || 'command';\n this.command = options.command || '';\n this.args = options.args || JSONExt.emptyObject;\n this.submenu = options.submenu || null;\n }\n /**\n * The display label for the menu item.\n */\n get label() {\n if (this.type === 'command') {\n return this._commands.label(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.label;\n }\n return '';\n }\n /**\n * The mnemonic index for the menu item.\n */\n get mnemonic() {\n if (this.type === 'command') {\n return this._commands.mnemonic(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.mnemonic;\n }\n return -1;\n }\n /**\n * The icon renderer for the menu item.\n */\n get icon() {\n if (this.type === 'command') {\n return this._commands.icon(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.icon;\n }\n return undefined;\n }\n /**\n * The icon class for the menu item.\n */\n get iconClass() {\n if (this.type === 'command') {\n return this._commands.iconClass(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.iconClass;\n }\n return '';\n }\n /**\n * The icon label for the menu item.\n */\n get iconLabel() {\n if (this.type === 'command') {\n return this._commands.iconLabel(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.iconLabel;\n }\n return '';\n }\n /**\n * The display caption for the menu item.\n */\n get caption() {\n if (this.type === 'command') {\n return this._commands.caption(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.caption;\n }\n return '';\n }\n /**\n * The extra class name for the menu item.\n */\n get className() {\n if (this.type === 'command') {\n return this._commands.className(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.className;\n }\n return '';\n }\n /**\n * The dataset for the menu item.\n */\n get dataset() {\n if (this.type === 'command') {\n return this._commands.dataset(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.dataset;\n }\n return {};\n }\n /**\n * Whether the menu item is enabled.\n */\n get isEnabled() {\n if (this.type === 'command') {\n return this._commands.isEnabled(this.command, this.args);\n }\n if (this.type === 'submenu') {\n return this.submenu !== null;\n }\n return true;\n }\n /**\n * Whether the menu item is toggled.\n */\n get isToggled() {\n if (this.type === 'command') {\n return this._commands.isToggled(this.command, this.args);\n }\n return false;\n }\n /**\n * Whether the menu item is visible.\n */\n get isVisible() {\n if (this.type === 'command') {\n return this._commands.isVisible(this.command, this.args);\n }\n if (this.type === 'submenu') {\n return this.submenu !== null;\n }\n return true;\n }\n /**\n * The key binding for the menu item.\n */\n get keyBinding() {\n if (this.type === 'command') {\n let { command, args } = this;\n return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n return kb.command === command && JSONExt.deepEqual(kb.args, args);\n }) || null);\n }\n return null;\n }\n }\n})(Private$9 || (Private$9 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * An object which implements a universal context menu.\n *\n * #### Notes\n * The items shown in the context menu are determined by CSS selector\n * matching against the DOM hierarchy at the site of the mouse click.\n * This is similar in concept to how keyboard shortcuts are matched\n * in the command registry.\n */\nclass ContextMenu {\n /**\n * Construct a new context menu.\n *\n * @param options - The options for initializing the menu.\n */\n constructor(options) {\n this._groupByTarget = true;\n this._idTick = 0;\n this._items = [];\n this._sortBySelector = true;\n const { groupByTarget, sortBySelector, ...others } = options;\n this.menu = new Menu(others);\n this._groupByTarget = groupByTarget !== false;\n this._sortBySelector = sortBySelector !== false;\n }\n /**\n * Add an item to the context menu.\n *\n * @param options - The options for creating the item.\n *\n * @returns A disposable which will remove the item from the menu.\n */\n addItem(options) {\n // Create an item from the given options.\n let item = Private$8.createItem(options, this._idTick++);\n // Add the item to the internal array.\n this._items.push(item);\n // Return a disposable which will remove the item.\n return new DisposableDelegate(() => {\n ArrayExt.removeFirstOf(this._items, item);\n });\n }\n /**\n * Open the context menu in response to a `'contextmenu'` event.\n *\n * @param event - The `'contextmenu'` event of interest.\n *\n * @returns `true` if the menu was opened, or `false` if no items\n * matched the event and the menu was not opened.\n *\n * #### Notes\n * This method will populate the context menu with items which match\n * the propagation path of the event, then open the menu at the mouse\n * position indicated by the event.\n */\n open(event) {\n // Prior to any DOM modifications update the window data.\n Menu.saveWindowData();\n // Clear the current contents of the context menu.\n this.menu.clearItems();\n // Bail early if there are no items to match.\n if (this._items.length === 0) {\n return false;\n }\n // Find the matching items for the event.\n let items = Private$8.matchItems(this._items, event, this._groupByTarget, this._sortBySelector);\n // Bail if there are no matching items.\n if (!items || items.length === 0) {\n return false;\n }\n // Add the filtered items to the menu.\n for (const item of items) {\n this.menu.addItem(item);\n }\n // Open the context menu at the current mouse position.\n this.menu.open(event.clientX, event.clientY);\n // Indicate success.\n return true;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$8;\n(function (Private) {\n /**\n * Create a normalized context menu item from an options object.\n */\n function createItem(options, id) {\n let selector = validateSelector(options.selector);\n let rank = options.rank !== undefined ? options.rank : Infinity;\n return { ...options, selector, rank, id };\n }\n Private.createItem = createItem;\n /**\n * Find the items which match a context menu event.\n *\n * The results are sorted by DOM level, specificity, and rank.\n */\n function matchItems(items, event, groupByTarget, sortBySelector) {\n // Look up the target of the event.\n let target = event.target;\n // Bail if there is no target.\n if (!target) {\n return null;\n }\n // Look up the current target of the event.\n let currentTarget = event.currentTarget;\n // Bail if there is no current target.\n if (!currentTarget) {\n return null;\n }\n // There are some third party libraries that cause the `target` to\n // be detached from the DOM before lumino can process the event.\n // If that happens, search for a new target node by point. If that\n // node is still dangling, bail.\n if (!currentTarget.contains(target)) {\n target = document.elementFromPoint(event.clientX, event.clientY);\n if (!target || !currentTarget.contains(target)) {\n return null;\n }\n }\n // Set up the result array.\n let result = [];\n // Copy the items array to allow in-place modification.\n let availableItems = items.slice();\n // Walk up the DOM hierarchy searching for matches.\n while (target !== null) {\n // Set up the match array for this DOM level.\n let matches = [];\n // Search the remaining items for matches.\n for (let i = 0, n = availableItems.length; i < n; ++i) {\n // Fetch the item.\n let item = availableItems[i];\n // Skip items which are already consumed.\n if (!item) {\n continue;\n }\n // Skip items which do not match the element.\n if (!Selector.matches(target, item.selector)) {\n continue;\n }\n // Add the matched item to the result for this DOM level.\n matches.push(item);\n // Mark the item as consumed.\n availableItems[i] = null;\n }\n // Sort the matches for this level and add them to the results.\n if (matches.length !== 0) {\n if (groupByTarget) {\n matches.sort(sortBySelector ? itemCmp : itemCmpRank);\n }\n result.push(...matches);\n }\n // Stop searching at the limits of the DOM range.\n if (target === currentTarget) {\n break;\n }\n // Step to the parent DOM level.\n target = target.parentElement;\n }\n if (!groupByTarget) {\n result.sort(sortBySelector ? itemCmp : itemCmpRank);\n }\n // Return the matched and sorted results.\n return result;\n }\n Private.matchItems = matchItems;\n /**\n * Validate the selector for a menu item.\n *\n * This returns the validated selector, or throws if the selector is\n * invalid or contains commas.\n */\n function validateSelector(selector) {\n if (selector.indexOf(',') !== -1) {\n throw new Error(`Selector cannot contain commas: ${selector}`);\n }\n if (!Selector.isValid(selector)) {\n throw new Error(`Invalid selector: ${selector}`);\n }\n return selector;\n }\n /**\n * A sort comparison function for a context menu item by ranks.\n */\n function itemCmpRank(a, b) {\n // Sort based on rank.\n let r1 = a.rank;\n let r2 = b.rank;\n if (r1 !== r2) {\n return r1 < r2 ? -1 : 1; // Infinity-safe\n }\n // When all else fails, sort by item id.\n return a.id - b.id;\n }\n /**\n * A sort comparison function for a context menu item by selectors and ranks.\n */\n function itemCmp(a, b) {\n // Sort first based on selector specificity.\n let s1 = Selector.calculateSpecificity(a.selector);\n let s2 = Selector.calculateSpecificity(b.selector);\n if (s1 !== s2) {\n return s2 - s1;\n }\n // If specificities are equal\n return itemCmpRank(a, b);\n }\n})(Private$8 || (Private$8 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nconst ARROW_KEYS = [\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowDown',\n 'Home',\n 'End'\n];\n/**\n * A widget which displays titles as a single row or column of tabs.\n *\n * #### Notes\n * If CSS transforms are used to rotate nodes for vertically oriented\n * text, then tab dragging will not work correctly. The `tabsMovable`\n * property should be set to `false` when rotating nodes from CSS.\n */\nclass TabBar extends Widget {\n /**\n * Construct a new tab bar.\n *\n * @param options - The options for initializing the tab bar.\n */\n constructor(options = {}) {\n super({ node: Private$7.createNode() });\n this._currentIndex = -1;\n this._titles = [];\n this._titlesEditable = false;\n this._previousTitle = null;\n this._dragData = null;\n this._addButtonEnabled = false;\n this._tabMoved = new Signal(this);\n this._currentChanged = new Signal(this);\n this._addRequested = new Signal(this);\n this._tabCloseRequested = new Signal(this);\n this._tabDetachRequested = new Signal(this);\n this._tabActivateRequested = new Signal(this);\n this.addClass('lm-TabBar');\n this.contentNode.setAttribute('role', 'tablist');\n this.setFlag(Widget.Flag.DisallowLayout);\n this._document = options.document || document;\n this.tabsMovable = options.tabsMovable || false;\n this.titlesEditable = options.titlesEditable || false;\n this.allowDeselect = options.allowDeselect || false;\n this.addButtonEnabled = options.addButtonEnabled || false;\n this.insertBehavior = options.insertBehavior || 'select-tab-if-needed';\n this.name = options.name || '';\n this.orientation = options.orientation || 'horizontal';\n this.removeBehavior = options.removeBehavior || 'select-tab-after';\n this.renderer = options.renderer || TabBar.defaultRenderer;\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._releaseMouse();\n this._titles.length = 0;\n this._previousTitle = null;\n super.dispose();\n }\n /**\n * A signal emitted when the current tab is changed.\n *\n * #### Notes\n * This signal is emitted when the currently selected tab is changed\n * either through user or programmatic interaction.\n *\n * Notably, this signal is not emitted when the index of the current\n * tab changes due to tabs being inserted, removed, or moved. It is\n * only emitted when the actual current tab node is changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * A signal emitted when a tab is moved by the user.\n *\n * #### Notes\n * This signal is emitted when a tab is moved by user interaction.\n *\n * This signal is not emitted when a tab is moved programmatically.\n */\n get tabMoved() {\n return this._tabMoved;\n }\n /**\n * A signal emitted when a tab is clicked by the user.\n *\n * #### Notes\n * If the clicked tab is not the current tab, the clicked tab will be\n * made current and the `currentChanged` signal will be emitted first.\n *\n * This signal is emitted even if the clicked tab is the current tab.\n */\n get tabActivateRequested() {\n return this._tabActivateRequested;\n }\n /**\n * A signal emitted when the tab bar add button is clicked.\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * A signal emitted when a tab close icon is clicked.\n *\n * #### Notes\n * This signal is not emitted unless the tab title is `closable`.\n */\n get tabCloseRequested() {\n return this._tabCloseRequested;\n }\n /**\n * A signal emitted when a tab is dragged beyond the detach threshold.\n *\n * #### Notes\n * This signal is emitted when the user drags a tab with the mouse,\n * and mouse is dragged beyond the detach threshold.\n *\n * The consumer of the signal should call `releaseMouse` and remove\n * the tab in order to complete the detach.\n *\n * This signal is only emitted once per drag cycle.\n */\n get tabDetachRequested() {\n return this._tabDetachRequested;\n }\n /**\n * The document to use with the tab bar.\n *\n * The default is the global `document` instance.\n */\n get document() {\n return this._document;\n }\n /**\n * Whether the titles can be user-edited.\n *\n */\n get titlesEditable() {\n return this._titlesEditable;\n }\n /**\n * Set whether titles can be user edited.\n *\n */\n set titlesEditable(value) {\n this._titlesEditable = value;\n }\n /**\n * Get the currently selected title.\n *\n * #### Notes\n * This will be `null` if no tab is selected.\n */\n get currentTitle() {\n return this._titles[this._currentIndex] || null;\n }\n /**\n * Set the currently selected title.\n *\n * #### Notes\n * If the title does not exist, the title will be set to `null`.\n */\n set currentTitle(value) {\n this.currentIndex = value ? this._titles.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently selected tab.\n *\n * #### Notes\n * This will be `-1` if no tab is selected.\n */\n get currentIndex() {\n return this._currentIndex;\n }\n /**\n * Set the index of the currently selected tab.\n *\n * #### Notes\n * If the value is out of range, the index will be set to `-1`.\n */\n set currentIndex(value) {\n // Adjust for an out of range index.\n if (value < 0 || value >= this._titles.length) {\n value = -1;\n }\n // Bail early if the index will not change.\n if (this._currentIndex === value) {\n return;\n }\n // Look up the previous index and title.\n let pi = this._currentIndex;\n let pt = this._titles[pi] || null;\n // Look up the current index and title.\n let ci = value;\n let ct = this._titles[ci] || null;\n // Update the current index and previous title.\n this._currentIndex = ci;\n this._previousTitle = pt;\n // Schedule an update of the tabs.\n this.update();\n // Emit the current changed signal.\n this._currentChanged.emit({\n previousIndex: pi,\n previousTitle: pt,\n currentIndex: ci,\n currentTitle: ct\n });\n }\n /**\n * Get the name of the tab bar.\n */\n get name() {\n return this._name;\n }\n /**\n * Set the name of the tab bar.\n */\n set name(value) {\n this._name = value;\n if (value) {\n this.contentNode.setAttribute('aria-label', value);\n }\n else {\n this.contentNode.removeAttribute('aria-label');\n }\n }\n /**\n * Get the orientation of the tab bar.\n *\n * #### Notes\n * This controls whether the tabs are arranged in a row or column.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the orientation of the tab bar.\n *\n * #### Notes\n * This controls whether the tabs are arranged in a row or column.\n */\n set orientation(value) {\n // Do nothing if the orientation does not change.\n if (this._orientation === value) {\n return;\n }\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Toggle the orientation values.\n this._orientation = value;\n this.dataset['orientation'] = value;\n this.contentNode.setAttribute('aria-orientation', value);\n }\n /**\n * Whether the add button is enabled.\n */\n get addButtonEnabled() {\n return this._addButtonEnabled;\n }\n /**\n * Set whether the add button is enabled.\n */\n set addButtonEnabled(value) {\n // Do nothing if the value does not change.\n if (this._addButtonEnabled === value) {\n return;\n }\n this._addButtonEnabled = value;\n if (value) {\n this.addButtonNode.classList.remove('lm-mod-hidden');\n }\n else {\n this.addButtonNode.classList.add('lm-mod-hidden');\n }\n }\n /**\n * A read-only array of the titles in the tab bar.\n */\n get titles() {\n return this._titles;\n }\n /**\n * The tab bar content node.\n *\n * #### Notes\n * This is the node which holds the tab nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-TabBar-content')[0];\n }\n /**\n * The tab bar add button node.\n *\n * #### Notes\n * This is the node which holds the add button.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get addButtonNode() {\n return this.node.getElementsByClassName('lm-TabBar-addButton')[0];\n }\n /**\n * Add a tab to the end of the tab bar.\n *\n * @param value - The title which holds the data for the tab,\n * or an options object to convert to a title.\n *\n * @returns The title object added to the tab bar.\n *\n * #### Notes\n * If the title is already added to the tab bar, it will be moved.\n */\n addTab(value) {\n return this.insertTab(this._titles.length, value);\n }\n /**\n * Insert a tab into the tab bar at the specified index.\n *\n * @param index - The index at which to insert the tab.\n *\n * @param value - The title which holds the data for the tab,\n * or an options object to convert to a title.\n *\n * @returns The title object added to the tab bar.\n *\n * #### Notes\n * The index will be clamped to the bounds of the tabs.\n *\n * If the title is already added to the tab bar, it will be moved.\n */\n insertTab(index, value) {\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Coerce the value to a title.\n let title = Private$7.asTitle(value);\n // Look up the index of the title.\n let i = this._titles.indexOf(title);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._titles.length));\n // If the title is not in the array, insert it.\n if (i === -1) {\n // Insert the title into the array.\n ArrayExt.insert(this._titles, j, title);\n // Connect to the title changed signal.\n title.changed.connect(this._onTitleChanged, this);\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the insert.\n this._adjustCurrentForInsert(j, title);\n // Return the title added to the tab bar.\n return title;\n }\n // Otherwise, the title exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._titles.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return title;\n }\n // Move the title to the new location.\n ArrayExt.move(this._titles, i, j);\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the move.\n this._adjustCurrentForMove(i, j);\n // Return the title added to the tab bar.\n return title;\n }\n /**\n * Remove a tab from the tab bar.\n *\n * @param title - The title for the tab to remove.\n *\n * #### Notes\n * This is a no-op if the title is not in the tab bar.\n */\n removeTab(title) {\n this.removeTabAt(this._titles.indexOf(title));\n }\n /**\n * Remove the tab at a given index from the tab bar.\n *\n * @param index - The index of the tab to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeTabAt(index) {\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Remove the title from the array.\n let title = ArrayExt.removeAt(this._titles, index);\n // Bail if the index is out of range.\n if (!title) {\n return;\n }\n // Disconnect from the title changed signal.\n title.changed.disconnect(this._onTitleChanged, this);\n // Clear the previous title if it's being removed.\n if (title === this._previousTitle) {\n this._previousTitle = null;\n }\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the remove.\n this._adjustCurrentForRemove(index, title);\n }\n /**\n * Remove all tabs from the tab bar.\n */\n clearTabs() {\n // Bail if there is nothing to remove.\n if (this._titles.length === 0) {\n return;\n }\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Disconnect from the title changed signals.\n for (let title of this._titles) {\n title.changed.disconnect(this._onTitleChanged, this);\n }\n // Get the current index and title.\n let pi = this.currentIndex;\n let pt = this.currentTitle;\n // Reset the current index and previous title.\n this._currentIndex = -1;\n this._previousTitle = null;\n // Clear the title array.\n this._titles.length = 0;\n // Schedule an update of the tabs.\n this.update();\n // If no tab was selected, there's nothing else to do.\n if (pi === -1) {\n return;\n }\n // Emit the current changed signal.\n this._currentChanged.emit({\n previousIndex: pi,\n previousTitle: pt,\n currentIndex: -1,\n currentTitle: null\n });\n }\n /**\n * Release the mouse and restore the non-dragged tab positions.\n *\n * #### Notes\n * This will cause the tab bar to stop handling mouse events and to\n * restore the tabs to their non-dragged positions.\n */\n releaseMouse() {\n this._releaseMouse();\n }\n /**\n * Handle the DOM events for the tab bar.\n *\n * @param event - The DOM event sent to the tab bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the tab bar's DOM node.\n *\n * This should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'dblclick':\n this._evtDblClick(event);\n break;\n case 'keydown':\n event.eventPhase === Event.CAPTURING_PHASE\n ? this._evtKeyDownCapturing(event)\n : this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('pointerdown', this);\n this.node.addEventListener('dblclick', this);\n this.node.addEventListener('keydown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('pointerdown', this);\n this.node.removeEventListener('dblclick', this);\n this.node.removeEventListener('keydown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n var _a;\n let titles = this._titles;\n let renderer = this.renderer;\n let currentTitle = this.currentTitle;\n let content = new Array(titles.length);\n // Keep the tabindex=\"0\" attribute to the tab which handled it before the update.\n // If the add button handles it, no need to do anything. If no element of the tab\n // bar handles it, set it on the current or the first tab to ensure one element\n // handles it after update.\n const tabHandlingTabindex = (_a = this._getCurrentTabindex()) !== null && _a !== void 0 ? _a : (this._currentIndex > -1 ? this._currentIndex : 0);\n for (let i = 0, n = titles.length; i < n; ++i) {\n let title = titles[i];\n let current = title === currentTitle;\n let zIndex = current ? n : n - i - 1;\n let tabIndex = tabHandlingTabindex === i ? 0 : -1;\n content[i] = renderer.renderTab({ title, current, zIndex, tabIndex });\n }\n VirtualDOM.render(content, this.contentNode);\n }\n /**\n * Get the index of the tab which handles tabindex=\"0\".\n * If the add button handles tabindex=\"0\", -1 is returned.\n * If none of the previous handles tabindex=\"0\", null is returned.\n */\n _getCurrentTabindex() {\n let index = null;\n const elemTabindex = this.contentNode.querySelector('li[tabindex=\"0\"]');\n if (elemTabindex) {\n index = [...this.contentNode.children].indexOf(elemTabindex);\n }\n else if (this._addButtonEnabled &&\n this.addButtonNode.getAttribute('tabindex') === '0') {\n index = -1;\n }\n return index;\n }\n /**\n * Handle the `'dblclick'` event for the tab bar.\n */\n _evtDblClick(event) {\n // Do nothing if titles are not editable\n if (!this.titlesEditable) {\n return;\n }\n let tabs = this.contentNode.children;\n // Find the index of the targeted tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the press is not on a tab.\n if (index === -1) {\n return;\n }\n let title = this.titles[index];\n let label = tabs[index].querySelector('.lm-TabBar-tabLabel');\n if (label && label.contains(event.target)) {\n let value = title.label || '';\n // Clear the label element\n let oldValue = label.innerHTML;\n label.innerHTML = '';\n let input = document.createElement('input');\n input.classList.add('lm-TabBar-tabInput');\n input.value = value;\n label.appendChild(input);\n let onblur = () => {\n input.removeEventListener('blur', onblur);\n label.innerHTML = oldValue;\n this.node.addEventListener('keydown', this);\n };\n input.addEventListener('dblclick', (event) => event.stopPropagation());\n input.addEventListener('blur', onblur);\n input.addEventListener('keydown', (event) => {\n if (event.key === 'Enter') {\n if (input.value !== '') {\n title.label = title.caption = input.value;\n }\n onblur();\n }\n else if (event.key === 'Escape') {\n onblur();\n }\n });\n this.node.removeEventListener('keydown', this);\n input.select();\n input.focus();\n if (label.children.length > 0) {\n label.children[0].focus();\n }\n }\n }\n /**\n * Handle the `'keydown'` event for the tab bar at capturing phase.\n */\n _evtKeyDownCapturing(event) {\n if (event.eventPhase !== Event.CAPTURING_PHASE) {\n return;\n }\n // Stop all input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse if `Escape` is pressed.\n if (event.key === 'Escape') {\n this._releaseMouse();\n }\n }\n /**\n * Handle the `'keydown'` event for the tab bar at target phase.\n */\n _evtKeyDown(event) {\n var _a, _b, _c;\n // Allow for navigation using tab key\n if (event.key === 'Tab' || event.eventPhase === Event.CAPTURING_PHASE) {\n return;\n }\n // Check if Enter or Spacebar key has been pressed and open that tab\n if (event.key === 'Enter' ||\n event.key === 'Spacebar' ||\n event.key === ' ') {\n // Get focus element that is in focus by the tab key\n const focusedElement = document.activeElement;\n // Test first if the focus is on the add button node\n if (this.addButtonEnabled &&\n this.addButtonNode.contains(focusedElement)) {\n event.preventDefault();\n event.stopPropagation();\n this._addRequested.emit();\n }\n else {\n const index = ArrayExt.findFirstIndex(this.contentNode.children, tab => tab.contains(focusedElement));\n if (index >= 0) {\n event.preventDefault();\n event.stopPropagation();\n this.currentIndex = index;\n }\n }\n // Handle the arrow keys to switch tabs.\n }\n else if (ARROW_KEYS.includes(event.key)) {\n // Create a list of all focusable elements in the tab bar.\n const focusable = [...this.contentNode.children];\n if (this.addButtonEnabled) {\n focusable.push(this.addButtonNode);\n }\n // If the tab bar contains only one element, nothing to do.\n if (focusable.length <= 1) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n // Get the current focused element.\n let focusedIndex = focusable.indexOf(document.activeElement);\n if (focusedIndex === -1) {\n focusedIndex = this._currentIndex;\n }\n // Find the next element to focus on.\n let nextFocused;\n if ((event.key === 'ArrowRight' && this._orientation === 'horizontal') ||\n (event.key === 'ArrowDown' && this._orientation === 'vertical')) {\n nextFocused = (_a = focusable[focusedIndex + 1]) !== null && _a !== void 0 ? _a : focusable[0];\n }\n else if ((event.key === 'ArrowLeft' && this._orientation === 'horizontal') ||\n (event.key === 'ArrowUp' && this._orientation === 'vertical')) {\n nextFocused =\n (_b = focusable[focusedIndex - 1]) !== null && _b !== void 0 ? _b : focusable[focusable.length - 1];\n }\n else if (event.key === 'Home') {\n nextFocused = focusable[0];\n }\n else if (event.key === 'End') {\n nextFocused = focusable[focusable.length - 1];\n }\n // Change the focused element and the tabindex value.\n if (nextFocused) {\n (_c = focusable[focusedIndex]) === null || _c === void 0 ? void 0 : _c.setAttribute('tabindex', '-1');\n nextFocused === null || nextFocused === void 0 ? void 0 : nextFocused.setAttribute('tabindex', '0');\n nextFocused.focus();\n }\n }\n }\n /**\n * Handle the `'pointerdown'` event for the tab bar.\n */\n _evtPointerDown(event) {\n // Do nothing if it's not a left or middle mouse press.\n if (event.button !== 0 && event.button !== 1) {\n return;\n }\n // Do nothing if a drag is in progress.\n if (this._dragData) {\n return;\n }\n // Do nothing if a title editable input was clicked.\n if (event.target.classList.contains('lm-TabBar-tabInput')) {\n return;\n }\n // Check if the add button was clicked.\n let addButtonClicked = this.addButtonEnabled &&\n this.addButtonNode.contains(event.target);\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Find the index of the pressed tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the press is not on a tab or the add button.\n if (index === -1 && !addButtonClicked) {\n return;\n }\n // Pressing on a tab stops the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Initialize the non-measured parts of the drag data.\n this._dragData = {\n tab: tabs[index],\n index: index,\n pressX: event.clientX,\n pressY: event.clientY,\n tabPos: -1,\n tabSize: -1,\n tabPressPos: -1,\n targetIndex: -1,\n tabLayout: null,\n contentRect: null,\n override: null,\n dragActive: false,\n dragAborted: false,\n detachRequested: false\n };\n // Add the document pointer up listener.\n this.document.addEventListener('pointerup', this, true);\n // Do nothing else if the middle button or add button is clicked.\n if (event.button === 1 || addButtonClicked) {\n return;\n }\n // Do nothing else if the close icon is clicked.\n let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n if (icon && icon.contains(event.target)) {\n return;\n }\n // Add the extra listeners if the tabs are movable.\n if (this.tabsMovable) {\n this.document.addEventListener('pointermove', this, true);\n this.document.addEventListener('keydown', this, true);\n this.document.addEventListener('contextmenu', this, true);\n }\n // Update the current index as appropriate.\n if (this.allowDeselect && this.currentIndex === index) {\n this.currentIndex = -1;\n }\n else {\n this.currentIndex = index;\n }\n // Do nothing else if there is no current tab.\n if (this.currentIndex === -1) {\n return;\n }\n // Emit the tab activate request signal.\n this._tabActivateRequested.emit({\n index: this.currentIndex,\n title: this.currentTitle\n });\n }\n /**\n * Handle the `'pointermove'` event for the tab bar.\n */\n _evtPointerMove(event) {\n // Do nothing if no drag is in progress.\n let data = this._dragData;\n if (!data) {\n return;\n }\n // Suppress the event during a drag.\n event.preventDefault();\n event.stopPropagation();\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Bail early if the drag threshold has not been met.\n if (!data.dragActive && !Private$7.dragExceeded(data, event)) {\n return;\n }\n // Activate the drag if necessary.\n if (!data.dragActive) {\n // Fill in the rest of the drag data measurements.\n let tabRect = data.tab.getBoundingClientRect();\n if (this._orientation === 'horizontal') {\n data.tabPos = data.tab.offsetLeft;\n data.tabSize = tabRect.width;\n data.tabPressPos = data.pressX - tabRect.left;\n }\n else {\n data.tabPos = data.tab.offsetTop;\n data.tabSize = tabRect.height;\n data.tabPressPos = data.pressY - tabRect.top;\n }\n data.tabPressOffset = {\n x: data.pressX - tabRect.left,\n y: data.pressY - tabRect.top\n };\n data.tabLayout = Private$7.snapTabLayout(tabs, this._orientation);\n data.contentRect = this.contentNode.getBoundingClientRect();\n data.override = Drag.overrideCursor('default');\n // Add the dragging style classes.\n data.tab.classList.add('lm-mod-dragging');\n this.addClass('lm-mod-dragging');\n // Mark the drag as active.\n data.dragActive = true;\n }\n // Emit the detach requested signal if the threshold is exceeded.\n if (!data.detachRequested && Private$7.detachExceeded(data, event)) {\n // Only emit the signal once per drag cycle.\n data.detachRequested = true;\n // Setup the arguments for the signal.\n let index = data.index;\n let clientX = event.clientX;\n let clientY = event.clientY;\n let tab = tabs[index];\n let title = this._titles[index];\n // Emit the tab detach requested signal.\n this._tabDetachRequested.emit({\n index,\n title,\n tab,\n clientX,\n clientY,\n offset: data.tabPressOffset\n });\n // Bail if the signal handler aborted the drag.\n if (data.dragAborted) {\n return;\n }\n }\n // Update the positions of the tabs.\n Private$7.layoutTabs(tabs, data, event, this._orientation);\n }\n /**\n * Handle the `'pointerup'` event for the document.\n */\n _evtPointerUp(event) {\n // Do nothing if it's not a left or middle mouse release.\n if (event.button !== 0 && event.button !== 1) {\n return;\n }\n // Do nothing if no drag is in progress.\n const data = this._dragData;\n if (!data) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Remove the extra mouse event listeners.\n this.document.removeEventListener('pointermove', this, true);\n this.document.removeEventListener('pointerup', this, true);\n this.document.removeEventListener('keydown', this, true);\n this.document.removeEventListener('contextmenu', this, true);\n // Handle a release when the drag is not active.\n if (!data.dragActive) {\n // Clear the drag data.\n this._dragData = null;\n // Handle clicking the add button.\n let addButtonClicked = this.addButtonEnabled &&\n this.addButtonNode.contains(event.target);\n if (addButtonClicked) {\n this._addRequested.emit(undefined);\n return;\n }\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Find the index of the released tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the release is not on the original pressed tab.\n if (index !== data.index) {\n return;\n }\n // Ignore the release if the title is not closable.\n let title = this._titles[index];\n if (!title.closable) {\n return;\n }\n // Emit the close requested signal if the middle button is released.\n if (event.button === 1) {\n this._tabCloseRequested.emit({ index, title });\n return;\n }\n // Emit the close requested signal if the close icon was released.\n let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n if (icon && icon.contains(event.target)) {\n this._tabCloseRequested.emit({ index, title });\n return;\n }\n // Otherwise, there is nothing left to do.\n return;\n }\n // Do nothing if the left button is not released.\n if (event.button !== 0) {\n return;\n }\n // Position the tab at its final resting position.\n Private$7.finalizeTabPosition(data, this._orientation);\n // Remove the dragging class from the tab so it can be transitioned.\n data.tab.classList.remove('lm-mod-dragging');\n // Parse the transition duration for releasing the tab.\n let duration = Private$7.parseTransitionDuration(data.tab);\n // Complete the release on a timer to allow the tab to transition.\n setTimeout(() => {\n // Do nothing if the drag has been aborted.\n if (data.dragAborted) {\n return;\n }\n // Clear the drag data reference.\n this._dragData = null;\n // Reset the positions of the tabs.\n Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n // Clear the cursor grab.\n data.override.dispose();\n // Remove the remaining dragging style.\n this.removeClass('lm-mod-dragging');\n // If the tab was not moved, there is nothing else to do.\n let i = data.index;\n let j = data.targetIndex;\n if (j === -1 || i === j) {\n return;\n }\n // Move the title to the new locations.\n ArrayExt.move(this._titles, i, j);\n // Adjust the current index for the move.\n this._adjustCurrentForMove(i, j);\n // Emit the tab moved signal.\n this._tabMoved.emit({\n fromIndex: i,\n toIndex: j,\n title: this._titles[j]\n });\n // Update the tabs immediately to prevent flicker.\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n }, duration);\n }\n /**\n * Release the mouse and restore the non-dragged tab positions.\n */\n _releaseMouse() {\n // Do nothing if no drag is in progress.\n let data = this._dragData;\n if (!data) {\n return;\n }\n // Clear the drag data reference.\n this._dragData = null;\n // Remove the extra document event listeners.\n this.document.removeEventListener('pointermove', this, true);\n this.document.removeEventListener('pointerup', this, true);\n this.document.removeEventListener('keydown', this, true);\n this.document.removeEventListener('contextmenu', this, true);\n // Indicate the drag has been aborted. This allows the mouse\n // event handlers to return early when the drag is canceled.\n data.dragAborted = true;\n // If the drag is not active, there's nothing more to do.\n if (!data.dragActive) {\n return;\n }\n // Reset the tabs to their non-dragged positions.\n Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n // Clear the cursor override.\n data.override.dispose();\n // Clear the dragging style classes.\n data.tab.classList.remove('lm-mod-dragging');\n this.removeClass('lm-mod-dragging');\n }\n /**\n * Adjust the current index for a tab insert operation.\n *\n * This method accounts for the tab bar's insertion behavior when\n * adjusting the current index and emitting the changed signal.\n */\n _adjustCurrentForInsert(i, title) {\n // Lookup commonly used variables.\n let ct = this.currentTitle;\n let ci = this._currentIndex;\n let bh = this.insertBehavior;\n // TODO: do we need to do an update to update the aria-selected attribute?\n // Handle the behavior where the new tab is always selected,\n // or the behavior where the new tab is selected if needed.\n if (bh === 'select-tab' || (bh === 'select-tab-if-needed' && ci === -1)) {\n this._currentIndex = i;\n this._previousTitle = ct;\n this._currentChanged.emit({\n previousIndex: ci,\n previousTitle: ct,\n currentIndex: i,\n currentTitle: title\n });\n return;\n }\n // Otherwise, silently adjust the current index if needed.\n if (ci >= i) {\n this._currentIndex++;\n }\n }\n /**\n * Adjust the current index for a tab move operation.\n *\n * This method will not cause the actual current tab to change.\n * It silently adjusts the index to account for the given move.\n */\n _adjustCurrentForMove(i, j) {\n if (this._currentIndex === i) {\n this._currentIndex = j;\n }\n else if (this._currentIndex < i && this._currentIndex >= j) {\n this._currentIndex++;\n }\n else if (this._currentIndex > i && this._currentIndex <= j) {\n this._currentIndex--;\n }\n }\n /**\n * Adjust the current index for a tab remove operation.\n *\n * This method accounts for the tab bar's remove behavior when\n * adjusting the current index and emitting the changed signal.\n */\n _adjustCurrentForRemove(i, title) {\n // Lookup commonly used variables.\n let ci = this._currentIndex;\n let bh = this.removeBehavior;\n // Silently adjust the index if the current tab is not removed.\n if (ci !== i) {\n if (ci > i) {\n this._currentIndex--;\n }\n return;\n }\n // TODO: do we need to do an update to adjust the aria-selected value?\n // No tab gets selected if the tab bar is empty.\n if (this._titles.length === 0) {\n this._currentIndex = -1;\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: -1,\n currentTitle: null\n });\n return;\n }\n // Handle behavior where the next sibling tab is selected.\n if (bh === 'select-tab-after') {\n this._currentIndex = Math.min(i, this._titles.length - 1);\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Handle behavior where the previous sibling tab is selected.\n if (bh === 'select-tab-before') {\n this._currentIndex = Math.max(0, i - 1);\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Handle behavior where the previous history tab is selected.\n if (bh === 'select-previous-tab') {\n if (this._previousTitle) {\n this._currentIndex = this._titles.indexOf(this._previousTitle);\n this._previousTitle = null;\n }\n else {\n this._currentIndex = Math.min(i, this._titles.length - 1);\n }\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Otherwise, no tab gets selected.\n this._currentIndex = -1;\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: -1,\n currentTitle: null\n });\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged(sender) {\n this.update();\n }\n}\n/**\n * The namespace for the `TabBar` class statics.\n */\n(function (TabBar) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n constructor() {\n /**\n * A selector which matches the close icon node in a tab.\n */\n this.closeIconSelector = '.lm-TabBar-tabCloseIcon';\n this._tabID = 0;\n this._tabKeys = new WeakMap();\n this._uuid = ++Renderer._nInstance;\n }\n /**\n * Render the virtual element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab.\n */\n renderTab(data) {\n let title = data.title.caption;\n let key = this.createTabKey(data);\n let id = key;\n let style = this.createTabStyle(data);\n let className = this.createTabClass(data);\n let dataset = this.createTabDataset(data);\n let aria = this.createTabARIA(data);\n if (data.title.closable) {\n return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data), this.renderCloseIcon(data));\n }\n else {\n return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data));\n }\n }\n /**\n * Render the icon element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab icon.\n */\n renderIcon(data) {\n const { title } = data;\n let className = this.createIconClass(data);\n // If title.icon is undefined, it will be ignored.\n return h.div({ className }, title.icon, title.iconLabel);\n }\n /**\n * Render the label element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab label.\n */\n renderLabel(data) {\n return h.div({ className: 'lm-TabBar-tabLabel' }, data.title.label);\n }\n /**\n * Render the close icon element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab close icon.\n */\n renderCloseIcon(data) {\n return h.div({ className: 'lm-TabBar-tabCloseIcon' });\n }\n /**\n * Create a unique render key for the tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The unique render key for the tab.\n *\n * #### Notes\n * This method caches the key against the tab title the first time\n * the key is generated. This enables efficient rendering of moved\n * tabs and avoids subtle hover style artifacts.\n */\n createTabKey(data) {\n let key = this._tabKeys.get(data.title);\n if (key === undefined) {\n key = `tab-key-${this._uuid}-${this._tabID++}`;\n this._tabKeys.set(data.title, key);\n }\n return key;\n }\n /**\n * Create the inline style object for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The inline style data for the tab.\n */\n createTabStyle(data) {\n return { zIndex: `${data.zIndex}` };\n }\n /**\n * Create the class name for the tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The full class name for the tab.\n */\n createTabClass(data) {\n let name = 'lm-TabBar-tab';\n if (data.title.className) {\n name += ` ${data.title.className}`;\n }\n if (data.title.closable) {\n name += ' lm-mod-closable';\n }\n if (data.current) {\n name += ' lm-mod-current';\n }\n return name;\n }\n /**\n * Create the dataset for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The dataset for the tab.\n */\n createTabDataset(data) {\n return data.title.dataset;\n }\n /**\n * Create the ARIA attributes for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The ARIA attributes for the tab.\n */\n createTabARIA(data) {\n var _a;\n return {\n role: 'tab',\n 'aria-selected': data.current.toString(),\n tabindex: `${(_a = data.tabIndex) !== null && _a !== void 0 ? _a : '-1'}`\n };\n }\n /**\n * Create the class name for the tab icon.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The full class name for the tab icon.\n */\n createIconClass(data) {\n let name = 'lm-TabBar-tabIcon';\n let extra = data.title.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n }\n Renderer._nInstance = 0;\n TabBar.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n TabBar.defaultRenderer = new Renderer();\n /**\n * A selector which matches the add button node in the tab bar.\n */\n TabBar.addButtonSelector = '.lm-TabBar-addButton';\n})(TabBar || (TabBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$7;\n(function (Private) {\n /**\n * The start drag distance threshold.\n */\n Private.DRAG_THRESHOLD = 5;\n /**\n * The detach distance threshold.\n */\n Private.DETACH_THRESHOLD = 20;\n /**\n * Create the DOM node for a tab bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.setAttribute('role', 'tablist');\n content.className = 'lm-TabBar-content';\n node.appendChild(content);\n let add = document.createElement('div');\n add.className = 'lm-TabBar-addButton lm-mod-hidden';\n add.setAttribute('tabindex', '-1');\n add.setAttribute('role', 'button');\n node.appendChild(add);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Coerce a title or options into a real title.\n */\n function asTitle(value) {\n return value instanceof Title ? value : new Title(value);\n }\n Private.asTitle = asTitle;\n /**\n * Parse the transition duration for a tab node.\n */\n function parseTransitionDuration(tab) {\n let style = window.getComputedStyle(tab);\n return 1000 * (parseFloat(style.transitionDuration) || 0);\n }\n Private.parseTransitionDuration = parseTransitionDuration;\n /**\n * Get a snapshot of the current tab layout values.\n */\n function snapTabLayout(tabs, orientation) {\n let layout = new Array(tabs.length);\n for (let i = 0, n = tabs.length; i < n; ++i) {\n let node = tabs[i];\n let style = window.getComputedStyle(node);\n if (orientation === 'horizontal') {\n layout[i] = {\n pos: node.offsetLeft,\n size: node.offsetWidth,\n margin: parseFloat(style.marginLeft) || 0\n };\n }\n else {\n layout[i] = {\n pos: node.offsetTop,\n size: node.offsetHeight,\n margin: parseFloat(style.marginTop) || 0\n };\n }\n }\n return layout;\n }\n Private.snapTabLayout = snapTabLayout;\n /**\n * Test if the event exceeds the drag threshold.\n */\n function dragExceeded(data, event) {\n let dx = Math.abs(event.clientX - data.pressX);\n let dy = Math.abs(event.clientY - data.pressY);\n return dx >= Private.DRAG_THRESHOLD || dy >= Private.DRAG_THRESHOLD;\n }\n Private.dragExceeded = dragExceeded;\n /**\n * Test if the event exceeds the drag detach threshold.\n */\n function detachExceeded(data, event) {\n let rect = data.contentRect;\n return (event.clientX < rect.left - Private.DETACH_THRESHOLD ||\n event.clientX >= rect.right + Private.DETACH_THRESHOLD ||\n event.clientY < rect.top - Private.DETACH_THRESHOLD ||\n event.clientY >= rect.bottom + Private.DETACH_THRESHOLD);\n }\n Private.detachExceeded = detachExceeded;\n /**\n * Update the relative tab positions and computed target index.\n */\n function layoutTabs(tabs, data, event, orientation) {\n // Compute the orientation-sensitive values.\n let pressPos;\n let localPos;\n let clientPos;\n let clientSize;\n if (orientation === 'horizontal') {\n pressPos = data.pressX;\n localPos = event.clientX - data.contentRect.left;\n clientPos = event.clientX;\n clientSize = data.contentRect.width;\n }\n else {\n pressPos = data.pressY;\n localPos = event.clientY - data.contentRect.top;\n clientPos = event.clientY;\n clientSize = data.contentRect.height;\n }\n // Compute the target data.\n let targetIndex = data.index;\n let targetPos = localPos - data.tabPressPos;\n let targetEnd = targetPos + data.tabSize;\n // Update the relative tab positions.\n for (let i = 0, n = tabs.length; i < n; ++i) {\n let pxPos;\n let layout = data.tabLayout[i];\n let threshold = layout.pos + (layout.size >> 1);\n if (i < data.index && targetPos < threshold) {\n pxPos = `${data.tabSize + data.tabLayout[i + 1].margin}px`;\n targetIndex = Math.min(targetIndex, i);\n }\n else if (i > data.index && targetEnd > threshold) {\n pxPos = `${-data.tabSize - layout.margin}px`;\n targetIndex = Math.max(targetIndex, i);\n }\n else if (i === data.index) {\n let ideal = clientPos - pressPos;\n let limit = clientSize - (data.tabPos + data.tabSize);\n pxPos = `${Math.max(-data.tabPos, Math.min(ideal, limit))}px`;\n }\n else {\n pxPos = '';\n }\n if (orientation === 'horizontal') {\n tabs[i].style.left = pxPos;\n }\n else {\n tabs[i].style.top = pxPos;\n }\n }\n // Update the computed target index.\n data.targetIndex = targetIndex;\n }\n Private.layoutTabs = layoutTabs;\n /**\n * Position the drag tab at its final resting relative position.\n */\n function finalizeTabPosition(data, orientation) {\n // Compute the orientation-sensitive client size.\n let clientSize;\n if (orientation === 'horizontal') {\n clientSize = data.contentRect.width;\n }\n else {\n clientSize = data.contentRect.height;\n }\n // Compute the ideal final tab position.\n let ideal;\n if (data.targetIndex === data.index) {\n ideal = 0;\n }\n else if (data.targetIndex > data.index) {\n let tgt = data.tabLayout[data.targetIndex];\n ideal = tgt.pos + tgt.size - data.tabSize - data.tabPos;\n }\n else {\n let tgt = data.tabLayout[data.targetIndex];\n ideal = tgt.pos - data.tabPos;\n }\n // Compute the tab position limit.\n let limit = clientSize - (data.tabPos + data.tabSize);\n let final = Math.max(-data.tabPos, Math.min(ideal, limit));\n // Set the final orientation-sensitive position.\n if (orientation === 'horizontal') {\n data.tab.style.left = `${final}px`;\n }\n else {\n data.tab.style.top = `${final}px`;\n }\n }\n Private.finalizeTabPosition = finalizeTabPosition;\n /**\n * Reset the relative positions of the given tabs.\n */\n function resetTabPositions(tabs, orientation) {\n for (const tab of tabs) {\n if (orientation === 'horizontal') {\n tab.style.left = '';\n }\n else {\n tab.style.top = '';\n }\n }\n }\n Private.resetTabPositions = resetTabPositions;\n})(Private$7 || (Private$7 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which provides a flexible docking arrangement.\n *\n * #### Notes\n * The consumer of this layout is responsible for handling all signals\n * from the generated tab bars and managing the visibility of widgets\n * and tab bars as needed.\n */\nclass DockLayout extends Layout {\n /**\n * Construct a new dock layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options) {\n super();\n this._spacing = 4;\n this._dirty = false;\n this._root = null;\n this._box = null;\n this._items = new Map();\n this.renderer = options.renderer;\n if (options.spacing !== undefined) {\n this._spacing = Utils$1.clampDimension(options.spacing);\n }\n this._document = options.document || document;\n this._hiddenMode =\n options.hiddenMode !== undefined\n ? options.hiddenMode\n : Widget.HiddenMode.Display;\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This will clear and dispose all widgets in the layout.\n */\n dispose() {\n // Get an iterator over the widgets in the layout.\n let widgets = this[Symbol.iterator]();\n // Dispose of the layout items.\n this._items.forEach(item => {\n item.dispose();\n });\n // Clear the layout state before disposing the widgets.\n this._box = null;\n this._root = null;\n this._items.clear();\n // Dispose of the widgets contained in the old layout root.\n for (const widget of widgets) {\n widget.dispose();\n }\n // Dispose of the base class.\n super.dispose();\n }\n /**\n * The method for hiding child widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n set hiddenMode(v) {\n if (this._hiddenMode === v) {\n return;\n }\n this._hiddenMode = v;\n for (const bar of this.tabBars()) {\n if (bar.titles.length > 1) {\n for (const title of bar.titles) {\n title.owner.hiddenMode = this._hiddenMode;\n }\n }\n }\n }\n /**\n * Get the inter-element spacing for the dock layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the dock layout.\n */\n set spacing(value) {\n value = Utils$1.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * Whether the dock layout is empty.\n */\n get isEmpty() {\n return this._root === null;\n }\n /**\n * Create an iterator over all widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n *\n * #### Notes\n * This iterator includes the generated tab bars.\n */\n [Symbol.iterator]() {\n return this._root ? this._root.iterAllWidgets() : empty();\n }\n /**\n * Create an iterator over the user widgets in the layout.\n *\n * @returns A new iterator over the user widgets in the layout.\n *\n * #### Notes\n * This iterator does not include the generated tab bars.\n */\n widgets() {\n return this._root ? this._root.iterUserWidgets() : empty();\n }\n /**\n * Create an iterator over the selected widgets in the layout.\n *\n * @returns A new iterator over the selected user widgets.\n *\n * #### Notes\n * This iterator yields the widgets corresponding to the current tab\n * of each tab bar in the layout.\n */\n selectedWidgets() {\n return this._root ? this._root.iterSelectedWidgets() : empty();\n }\n /**\n * Create an iterator over the tab bars in the layout.\n *\n * @returns A new iterator over the tab bars in the layout.\n *\n * #### Notes\n * This iterator does not include the user widgets.\n */\n tabBars() {\n return this._root ? this._root.iterTabBars() : empty();\n }\n /**\n * Create an iterator over the handles in the layout.\n *\n * @returns A new iterator over the handles in the layout.\n */\n handles() {\n return this._root ? this._root.iterHandles() : empty();\n }\n /**\n * Move a handle to the given offset position.\n *\n * @param handle - The handle to move.\n *\n * @param offsetX - The desired offset X position of the handle.\n *\n * @param offsetY - The desired offset Y position of the handle.\n *\n * #### Notes\n * If the given handle is not contained in the layout, this is no-op.\n *\n * The handle will be moved as close as possible to the desired\n * position without violating any of the layout constraints.\n *\n * Only one of the coordinates is used depending on the orientation\n * of the handle. This method accepts both coordinates to make it\n * easy to invoke from a mouse move event without needing to know\n * the handle orientation.\n */\n moveHandle(handle, offsetX, offsetY) {\n // Bail early if there is no root or if the handle is hidden.\n let hidden = handle.classList.contains('lm-mod-hidden');\n if (!this._root || hidden) {\n return;\n }\n // Lookup the split node for the handle.\n let data = this._root.findSplitNode(handle);\n if (!data) {\n return;\n }\n // Compute the desired delta movement for the handle.\n let delta;\n if (data.node.orientation === 'horizontal') {\n delta = offsetX - handle.offsetLeft;\n }\n else {\n delta = offsetY - handle.offsetTop;\n }\n // Bail if there is no handle movement.\n if (delta === 0) {\n return;\n }\n // Prevent sibling resizing unless needed.\n data.node.holdSizes();\n // Adjust the sizers to reflect the handle movement.\n BoxEngine.adjust(data.node.sizers, data.index, delta);\n // Update the layout of the widgets.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Save the current configuration of the dock layout.\n *\n * @returns A new config object for the current layout state.\n *\n * #### Notes\n * The return value can be provided to the `restoreLayout` method\n * in order to restore the layout to its current configuration.\n */\n saveLayout() {\n // Bail early if there is no root.\n if (!this._root) {\n return { main: null };\n }\n // Hold the current sizes in the layout tree.\n this._root.holdAllSizes();\n // Return the layout config.\n return { main: this._root.createConfig() };\n }\n /**\n * Restore the layout to a previously saved configuration.\n *\n * @param config - The layout configuration to restore.\n *\n * #### Notes\n * Widgets which currently belong to the layout but which are not\n * contained in the config will be unparented.\n */\n restoreLayout(config) {\n // Create the widget set for validating the config.\n let widgetSet = new Set();\n // Normalize the main area config and collect the widgets.\n let mainConfig;\n if (config.main) {\n mainConfig = Private$6.normalizeAreaConfig(config.main, widgetSet);\n }\n else {\n mainConfig = null;\n }\n // Create iterators over the old content.\n let oldWidgets = this.widgets();\n let oldTabBars = this.tabBars();\n let oldHandles = this.handles();\n // Clear the root before removing the old content.\n this._root = null;\n // Unparent the old widgets which are not in the new config.\n for (const widget of oldWidgets) {\n if (!widgetSet.has(widget)) {\n widget.parent = null;\n }\n }\n // Dispose of the old tab bars.\n for (const tabBar of oldTabBars) {\n tabBar.dispose();\n }\n // Remove the old handles.\n for (const handle of oldHandles) {\n if (handle.parentNode) {\n handle.parentNode.removeChild(handle);\n }\n }\n // Reparent the new widgets to the current parent.\n for (const widget of widgetSet) {\n widget.parent = this.parent;\n }\n // Create the root node for the new config.\n if (mainConfig) {\n this._root = Private$6.realizeAreaConfig(mainConfig, {\n // Ignoring optional `document` argument as we must reuse `this._document`\n createTabBar: (document) => this._createTabBar(),\n createHandle: () => this._createHandle()\n }, this._document);\n }\n else {\n this._root = null;\n }\n // If there is no parent, there is nothing more to do.\n if (!this.parent) {\n return;\n }\n // Attach the new widgets to the parent.\n widgetSet.forEach(widget => {\n this.attachWidget(widget);\n });\n // Post a fit request to the parent.\n this.parent.fit();\n }\n /**\n * Add a widget to the dock layout.\n *\n * @param widget - The widget to add to the dock layout.\n *\n * @param options - The additional options for adding the widget.\n *\n * #### Notes\n * The widget will be moved if it is already contained in the layout.\n *\n * An error will be thrown if the reference widget is invalid.\n */\n addWidget(widget, options = {}) {\n // Parse the options.\n let ref = options.ref || null;\n let mode = options.mode || 'tab-after';\n // Find the tab node which holds the reference widget.\n let refNode = null;\n if (this._root && ref) {\n refNode = this._root.findTabNode(ref);\n }\n // Throw an error if the reference widget is invalid.\n if (ref && !refNode) {\n throw new Error('Reference widget is not in the layout.');\n }\n // Reparent the widget to the current layout parent.\n widget.parent = this.parent;\n // Insert the widget according to the insert mode.\n switch (mode) {\n case 'tab-after':\n this._insertTab(widget, ref, refNode, true);\n break;\n case 'tab-before':\n this._insertTab(widget, ref, refNode, false);\n break;\n case 'split-top':\n this._insertSplit(widget, ref, refNode, 'vertical', false);\n break;\n case 'split-left':\n this._insertSplit(widget, ref, refNode, 'horizontal', false);\n break;\n case 'split-right':\n this._insertSplit(widget, ref, refNode, 'horizontal', true);\n break;\n case 'split-bottom':\n this._insertSplit(widget, ref, refNode, 'vertical', true);\n break;\n case 'merge-top':\n this._insertSplit(widget, ref, refNode, 'vertical', false, true);\n break;\n case 'merge-left':\n this._insertSplit(widget, ref, refNode, 'horizontal', false, true);\n break;\n case 'merge-right':\n this._insertSplit(widget, ref, refNode, 'horizontal', true, true);\n break;\n case 'merge-bottom':\n this._insertSplit(widget, ref, refNode, 'vertical', true, true);\n break;\n }\n // Do nothing else if there is no parent widget.\n if (!this.parent) {\n return;\n }\n // Ensure the widget is attached to the parent widget.\n this.attachWidget(widget);\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Remove the widget from its current layout location.\n this._removeWidget(widget);\n // Do nothing else if there is no parent widget.\n if (!this.parent) {\n return;\n }\n // Detach the widget from the parent widget.\n this.detachWidget(widget);\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Find the tab area which contains the given client position.\n *\n * @param clientX - The client X position of interest.\n *\n * @param clientY - The client Y position of interest.\n *\n * @returns The geometry of the tab area at the given position, or\n * `null` if there is no tab area at the given position.\n */\n hitTestTabAreas(clientX, clientY) {\n // Bail early if hit testing cannot produce valid results.\n if (!this._root || !this.parent || !this.parent.isVisible) {\n return null;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Convert from client to local coordinates.\n let rect = this.parent.node.getBoundingClientRect();\n let x = clientX - rect.left - this._box.borderLeft;\n let y = clientY - rect.top - this._box.borderTop;\n // Find the tab layout node at the local position.\n let tabNode = this._root.hitTestTabNodes(x, y);\n // Bail if a tab layout node was not found.\n if (!tabNode) {\n return null;\n }\n // Extract the data from the tab node.\n let { tabBar, top, left, width, height } = tabNode;\n // Compute the right and bottom edges of the tab area.\n let borderWidth = this._box.borderLeft + this._box.borderRight;\n let borderHeight = this._box.borderTop + this._box.borderBottom;\n let right = rect.width - borderWidth - (left + width);\n let bottom = rect.height - borderHeight - (top + height);\n // Return the hit test results.\n return { tabBar, x, y, top, left, right, bottom, width, height };\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n // Perform superclass initialization.\n super.init();\n // Attach each widget to the parent.\n for (const widget of this) {\n this.attachWidget(widget);\n }\n // Attach each handle to the parent.\n for (const handle of this.handles()) {\n this.parent.node.appendChild(handle);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Attach the widget to the layout parent widget.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a no-op if the widget is already attached.\n */\n attachWidget(widget) {\n // Do nothing if the widget is already attached.\n if (this.parent.node === widget.node.parentNode) {\n return;\n }\n // Create the layout item for the widget.\n this._items.set(widget, new LayoutItem(widget));\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach the widget from the layout parent widget.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a no-op if the widget is not attached.\n */\n detachWidget(widget) {\n // Do nothing if the widget is not attached.\n if (this.parent.node !== widget.node.parentNode) {\n return;\n }\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Delete the layout item for the widget.\n let item = this._items.get(widget);\n if (item) {\n this._items.delete(widget);\n item.dispose();\n }\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Remove the specified widget from the layout structure.\n *\n * #### Notes\n * This is a no-op if the widget is not in the layout tree.\n *\n * This does not detach the widget from the parent node.\n */\n _removeWidget(widget) {\n // Bail early if there is no layout root.\n if (!this._root) {\n return;\n }\n // Find the tab node which contains the given widget.\n let tabNode = this._root.findTabNode(widget);\n // Bail early if the tab node is not found.\n if (!tabNode) {\n return;\n }\n Private$6.removeAria(widget);\n // If there are multiple tabs, just remove the widget's tab.\n if (tabNode.tabBar.titles.length > 1) {\n tabNode.tabBar.removeTab(widget.title);\n if (this._hiddenMode === Widget.HiddenMode.Scale &&\n tabNode.tabBar.titles.length == 1) {\n const existingWidget = tabNode.tabBar.titles[0].owner;\n existingWidget.hiddenMode = Widget.HiddenMode.Display;\n }\n return;\n }\n // Otherwise, the tab node needs to be removed...\n // Dispose the tab bar.\n tabNode.tabBar.dispose();\n // Handle the case where the tab node is the root.\n if (this._root === tabNode) {\n this._root = null;\n return;\n }\n // Otherwise, remove the tab node from its parent...\n // Prevent widget resizing unless needed.\n this._root.holdAllSizes();\n // Clear the parent reference on the tab node.\n let splitNode = tabNode.parent;\n tabNode.parent = null;\n // Remove the tab node from its parent split node.\n let i = ArrayExt.removeFirstOf(splitNode.children, tabNode);\n let handle = ArrayExt.removeAt(splitNode.handles, i);\n ArrayExt.removeAt(splitNode.sizers, i);\n // Remove the handle from its parent DOM node.\n if (handle.parentNode) {\n handle.parentNode.removeChild(handle);\n }\n // If there are multiple children, just update the handles.\n if (splitNode.children.length > 1) {\n splitNode.syncHandles();\n return;\n }\n // Otherwise, the split node also needs to be removed...\n // Clear the parent reference on the split node.\n let maybeParent = splitNode.parent;\n splitNode.parent = null;\n // Lookup the remaining child node and handle.\n let childNode = splitNode.children[0];\n let childHandle = splitNode.handles[0];\n // Clear the split node data.\n splitNode.children.length = 0;\n splitNode.handles.length = 0;\n splitNode.sizers.length = 0;\n // Remove the child handle from its parent node.\n if (childHandle.parentNode) {\n childHandle.parentNode.removeChild(childHandle);\n }\n // Handle the case where the split node is the root.\n if (this._root === splitNode) {\n childNode.parent = null;\n this._root = childNode;\n return;\n }\n // Otherwise, move the child node to the parent node...\n let parentNode = maybeParent;\n // Lookup the index of the split node.\n let j = parentNode.children.indexOf(splitNode);\n // Handle the case where the child node is a tab node.\n if (childNode instanceof Private$6.TabLayoutNode) {\n childNode.parent = parentNode;\n parentNode.children[j] = childNode;\n return;\n }\n // Remove the split data from the parent.\n let splitHandle = ArrayExt.removeAt(parentNode.handles, j);\n ArrayExt.removeAt(parentNode.children, j);\n ArrayExt.removeAt(parentNode.sizers, j);\n // Remove the handle from its parent node.\n if (splitHandle.parentNode) {\n splitHandle.parentNode.removeChild(splitHandle);\n }\n // The child node and the split parent node will have the same\n // orientation. Merge the grand-children with the parent node.\n for (let i = 0, n = childNode.children.length; i < n; ++i) {\n let gChild = childNode.children[i];\n let gHandle = childNode.handles[i];\n let gSizer = childNode.sizers[i];\n ArrayExt.insert(parentNode.children, j + i, gChild);\n ArrayExt.insert(parentNode.handles, j + i, gHandle);\n ArrayExt.insert(parentNode.sizers, j + i, gSizer);\n gChild.parent = parentNode;\n }\n // Clear the child node.\n childNode.children.length = 0;\n childNode.handles.length = 0;\n childNode.sizers.length = 0;\n childNode.parent = null;\n // Sync the handles on the parent node.\n parentNode.syncHandles();\n }\n /**\n * Create the tab layout node to hold the widget.\n */\n _createTabNode(widget) {\n let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n tabNode.tabBar.addTab(widget.title);\n Private$6.addAria(widget, tabNode.tabBar);\n return tabNode;\n }\n /**\n * Insert a widget next to an existing tab.\n *\n * #### Notes\n * This does not attach the widget to the parent widget.\n */\n _insertTab(widget, ref, refNode, after) {\n // Do nothing if the tab is inserted next to itself.\n if (widget === ref) {\n return;\n }\n // Create the root if it does not exist.\n if (!this._root) {\n let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n tabNode.tabBar.addTab(widget.title);\n this._root = tabNode;\n Private$6.addAria(widget, tabNode.tabBar);\n return;\n }\n // Use the first tab node as the ref node if needed.\n if (!refNode) {\n refNode = this._root.findFirstTabNode();\n }\n // If the widget is not contained in the ref node, ensure it is\n // removed from the layout and hidden before being added again.\n if (refNode.tabBar.titles.indexOf(widget.title) === -1) {\n this._removeWidget(widget);\n widget.hide();\n }\n // Lookup the target index for inserting the tab.\n let index;\n if (ref) {\n index = refNode.tabBar.titles.indexOf(ref.title);\n }\n else {\n index = refNode.tabBar.currentIndex;\n }\n // Using transform create an additional layer in the pixel pipeline\n // to limit the number of layer, it is set only if there is more than one widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale) {\n if (refNode.tabBar.titles.length === 0) {\n // Singular tab should use display mode to limit number of layers.\n widget.hiddenMode = Widget.HiddenMode.Display;\n }\n else if (refNode.tabBar.titles.length == 1) {\n // If we are adding a second tab, switch the existing tab back to scale.\n const existingWidget = refNode.tabBar.titles[0].owner;\n existingWidget.hiddenMode = Widget.HiddenMode.Scale;\n }\n else {\n // For the third and subsequent tabs no special action is needed.\n widget.hiddenMode = Widget.HiddenMode.Scale;\n }\n }\n else {\n // For all other modes just propagate the current mode.\n widget.hiddenMode = this._hiddenMode;\n }\n // Insert the widget's tab relative to the target index.\n refNode.tabBar.insertTab(index + (after ? 1 : 0), widget.title);\n Private$6.addAria(widget, refNode.tabBar);\n }\n /**\n * Insert a widget as a new split area.\n *\n * #### Notes\n * This does not attach the widget to the parent widget.\n */\n _insertSplit(widget, ref, refNode, orientation, after, merge = false) {\n // Do nothing if there is no effective split.\n if (widget === ref && refNode && refNode.tabBar.titles.length === 1) {\n return;\n }\n // Ensure the widget is removed from the current layout.\n this._removeWidget(widget);\n // Set the root if it does not exist.\n if (!this._root) {\n this._root = this._createTabNode(widget);\n return;\n }\n // If the ref node parent is null, split the root.\n if (!refNode || !refNode.parent) {\n // Ensure the root is split with the correct orientation.\n let root = this._splitRoot(orientation);\n // Determine the insert index for the new tab node.\n let i = after ? root.children.length : 0;\n // Normalize the split node.\n root.normalizeSizes();\n // Create the sizer for new tab node.\n let sizer = Private$6.createSizer(refNode ? 1 : Private$6.GOLDEN_RATIO);\n // Insert the tab node sized to the golden ratio.\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(root.children, i, tabNode);\n ArrayExt.insert(root.sizers, i, sizer);\n ArrayExt.insert(root.handles, i, this._createHandle());\n tabNode.parent = root;\n // Re-normalize the split node to maintain the ratios.\n root.normalizeSizes();\n // Finally, synchronize the visibility of the handles.\n root.syncHandles();\n return;\n }\n // Lookup the split node for the ref widget.\n let splitNode = refNode.parent;\n // If the split node already had the correct orientation,\n // the widget can be inserted into the split node directly.\n if (splitNode.orientation === orientation) {\n // Find the index of the ref node.\n let i = splitNode.children.indexOf(refNode);\n // Conditionally reuse a tab layout found in the wanted position.\n if (merge) {\n let j = i + (after ? 1 : -1);\n let sibling = splitNode.children[j];\n if (sibling instanceof Private$6.TabLayoutNode) {\n this._insertTab(widget, null, sibling, true);\n ++sibling.tabBar.currentIndex;\n return;\n }\n }\n // Normalize the split node.\n splitNode.normalizeSizes();\n // Consume half the space for the insert location.\n let s = (splitNode.sizers[i].sizeHint /= 2);\n // Insert the tab node sized to the other half.\n let j = i + (after ? 1 : 0);\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(splitNode.children, j, tabNode);\n ArrayExt.insert(splitNode.sizers, j, Private$6.createSizer(s));\n ArrayExt.insert(splitNode.handles, j, this._createHandle());\n tabNode.parent = splitNode;\n // Finally, synchronize the visibility of the handles.\n splitNode.syncHandles();\n return;\n }\n // Remove the ref node from the split node.\n let i = ArrayExt.removeFirstOf(splitNode.children, refNode);\n // Create a new normalized split node for the children.\n let childNode = new Private$6.SplitLayoutNode(orientation);\n childNode.normalized = true;\n // Add the ref node sized to half the space.\n childNode.children.push(refNode);\n childNode.sizers.push(Private$6.createSizer(0.5));\n childNode.handles.push(this._createHandle());\n refNode.parent = childNode;\n // Add the tab node sized to the other half.\n let j = after ? 1 : 0;\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(childNode.children, j, tabNode);\n ArrayExt.insert(childNode.sizers, j, Private$6.createSizer(0.5));\n ArrayExt.insert(childNode.handles, j, this._createHandle());\n tabNode.parent = childNode;\n // Synchronize the visibility of the handles.\n childNode.syncHandles();\n // Finally, add the new child node to the original split node.\n ArrayExt.insert(splitNode.children, i, childNode);\n childNode.parent = splitNode;\n }\n /**\n * Ensure the root is a split node with the given orientation.\n */\n _splitRoot(orientation) {\n // Bail early if the root already meets the requirements.\n let oldRoot = this._root;\n if (oldRoot instanceof Private$6.SplitLayoutNode) {\n if (oldRoot.orientation === orientation) {\n return oldRoot;\n }\n }\n // Create a new root node with the specified orientation.\n let newRoot = (this._root = new Private$6.SplitLayoutNode(orientation));\n // Add the old root to the new root.\n if (oldRoot) {\n newRoot.children.push(oldRoot);\n newRoot.sizers.push(Private$6.createSizer(0));\n newRoot.handles.push(this._createHandle());\n oldRoot.parent = newRoot;\n }\n // Return the new root as a convenience.\n return newRoot;\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Set up the computed minimum size.\n let minW = 0;\n let minH = 0;\n // Update the size limits for the layout tree.\n if (this._root) {\n let limits = this._root.fit(this._spacing, this._items);\n minW = limits.minWidth;\n minH = limits.minHeight;\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Bail early if there is no root layout node.\n if (!this._root) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let x = this._box.paddingTop;\n let y = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Update the geometry of the layout tree.\n this._root.update(x, y, width, height, this._spacing, this._items);\n }\n /**\n * Create a new tab bar for use by the dock layout.\n *\n * #### Notes\n * The tab bar will be attached to the parent if it exists.\n */\n _createTabBar() {\n // Create the tab bar using the renderer.\n let tabBar = this.renderer.createTabBar(this._document);\n // Enforce necessary tab bar behavior.\n tabBar.orientation = 'horizontal';\n // Attach the tab bar to the parent if possible.\n if (this.parent) {\n this.attachWidget(tabBar);\n }\n // Return the initialized tab bar.\n return tabBar;\n }\n /**\n * Create a new handle for the dock layout.\n *\n * #### Notes\n * The handle will be attached to the parent if it exists.\n */\n _createHandle() {\n // Create the handle using the renderer.\n let handle = this.renderer.createHandle();\n // Initialize the handle layout behavior.\n let style = handle.style;\n style.position = 'absolute';\n style.contain = 'strict';\n style.top = '0';\n style.left = '0';\n style.width = '0';\n style.height = '0';\n // Attach the handle to the parent if it exists.\n if (this.parent) {\n this.parent.node.appendChild(handle);\n }\n // Return the initialized handle.\n return handle;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$6;\n(function (Private) {\n /**\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n */\n Private.GOLDEN_RATIO = 0.618;\n /**\n * Create a box sizer with an initial size hint.\n */\n function createSizer(hint) {\n let sizer = new BoxSizer();\n sizer.sizeHint = hint;\n sizer.size = hint;\n return sizer;\n }\n Private.createSizer = createSizer;\n /**\n * Normalize an area config object and collect the visited widgets.\n */\n function normalizeAreaConfig(config, widgetSet) {\n let result;\n if (config.type === 'tab-area') {\n result = normalizeTabAreaConfig(config, widgetSet);\n }\n else {\n result = normalizeSplitAreaConfig(config, widgetSet);\n }\n return result;\n }\n Private.normalizeAreaConfig = normalizeAreaConfig;\n /**\n * Convert a normalized area config into a layout tree.\n */\n function realizeAreaConfig(config, renderer, document) {\n let node;\n if (config.type === 'tab-area') {\n node = realizeTabAreaConfig(config, renderer, document);\n }\n else {\n node = realizeSplitAreaConfig(config, renderer, document);\n }\n return node;\n }\n Private.realizeAreaConfig = realizeAreaConfig;\n /**\n * A layout node which holds the data for a tabbed area.\n */\n class TabLayoutNode {\n /**\n * Construct a new tab layout node.\n *\n * @param tabBar - The tab bar to use for the layout node.\n */\n constructor(tabBar) {\n /**\n * The parent of the layout node.\n */\n this.parent = null;\n this._top = 0;\n this._left = 0;\n this._width = 0;\n this._height = 0;\n let tabSizer = new BoxSizer();\n let widgetSizer = new BoxSizer();\n tabSizer.stretch = 0;\n widgetSizer.stretch = 1;\n this.tabBar = tabBar;\n this.sizers = [tabSizer, widgetSizer];\n }\n /**\n * The most recent value for the `top` edge of the layout box.\n */\n get top() {\n return this._top;\n }\n /**\n * The most recent value for the `left` edge of the layout box.\n */\n get left() {\n return this._left;\n }\n /**\n * The most recent value for the `width` of the layout box.\n */\n get width() {\n return this._width;\n }\n /**\n * The most recent value for the `height` of the layout box.\n */\n get height() {\n return this._height;\n }\n /**\n * Create an iterator for all widgets in the layout tree.\n */\n *iterAllWidgets() {\n yield this.tabBar;\n yield* this.iterUserWidgets();\n }\n /**\n * Create an iterator for the user widgets in the layout tree.\n */\n *iterUserWidgets() {\n for (const title of this.tabBar.titles) {\n yield title.owner;\n }\n }\n /**\n * Create an iterator for the selected widgets in the layout tree.\n */\n *iterSelectedWidgets() {\n let title = this.tabBar.currentTitle;\n if (title) {\n yield title.owner;\n }\n }\n /**\n * Create an iterator for the tab bars in the layout tree.\n */\n *iterTabBars() {\n yield this.tabBar;\n }\n /**\n * Create an iterator for the handles in the layout tree.\n */\n // eslint-disable-next-line require-yield\n *iterHandles() {\n return;\n }\n /**\n * Find the tab layout node which contains the given widget.\n */\n findTabNode(widget) {\n return this.tabBar.titles.indexOf(widget.title) !== -1 ? this : null;\n }\n /**\n * Find the split layout node which contains the given handle.\n */\n findSplitNode(handle) {\n return null;\n }\n /**\n * Find the first tab layout node in a layout tree.\n */\n findFirstTabNode() {\n return this;\n }\n /**\n * Find the tab layout node which contains the local point.\n */\n hitTestTabNodes(x, y) {\n if (x < this._left || x >= this._left + this._width) {\n return null;\n }\n if (y < this._top || y >= this._top + this._height) {\n return null;\n }\n return this;\n }\n /**\n * Create a configuration object for the layout tree.\n */\n createConfig() {\n let widgets = this.tabBar.titles.map(title => title.owner);\n let currentIndex = this.tabBar.currentIndex;\n return { type: 'tab-area', widgets, currentIndex };\n }\n /**\n * Recursively hold all of the sizes in the layout tree.\n *\n * This ignores the sizers of tab layout nodes.\n */\n holdAllSizes() {\n return;\n }\n /**\n * Fit the layout tree.\n */\n fit(spacing, items) {\n // Set up the limit variables.\n let minWidth = 0;\n let minHeight = 0;\n let maxWidth = Infinity;\n let maxHeight = Infinity;\n // Lookup the tab bar layout item.\n let tabBarItem = items.get(this.tabBar);\n // Lookup the widget layout item.\n let current = this.tabBar.currentTitle;\n let widgetItem = current ? items.get(current.owner) : undefined;\n // Lookup the tab bar and widget sizers.\n let [tabBarSizer, widgetSizer] = this.sizers;\n // Update the tab bar limits.\n if (tabBarItem) {\n tabBarItem.fit();\n }\n // Update the widget limits.\n if (widgetItem) {\n widgetItem.fit();\n }\n // Update the results and sizer for the tab bar.\n if (tabBarItem && !tabBarItem.isHidden) {\n minWidth = Math.max(minWidth, tabBarItem.minWidth);\n minHeight += tabBarItem.minHeight;\n tabBarSizer.minSize = tabBarItem.minHeight;\n tabBarSizer.maxSize = tabBarItem.maxHeight;\n }\n else {\n tabBarSizer.minSize = 0;\n tabBarSizer.maxSize = 0;\n }\n // Update the results and sizer for the current widget.\n if (widgetItem && !widgetItem.isHidden) {\n minWidth = Math.max(minWidth, widgetItem.minWidth);\n minHeight += widgetItem.minHeight;\n widgetSizer.minSize = widgetItem.minHeight;\n widgetSizer.maxSize = Infinity;\n }\n else {\n widgetSizer.minSize = 0;\n widgetSizer.maxSize = Infinity;\n }\n // Return the computed size limits for the layout node.\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n /**\n * Update the layout tree.\n */\n update(left, top, width, height, spacing, items) {\n // Update the layout box values.\n this._top = top;\n this._left = left;\n this._width = width;\n this._height = height;\n // Lookup the tab bar layout item.\n let tabBarItem = items.get(this.tabBar);\n // Lookup the widget layout item.\n let current = this.tabBar.currentTitle;\n let widgetItem = current ? items.get(current.owner) : undefined;\n // Distribute the layout space to the sizers.\n BoxEngine.calc(this.sizers, height);\n // Update the tab bar item using the computed size.\n if (tabBarItem && !tabBarItem.isHidden) {\n let size = this.sizers[0].size;\n tabBarItem.update(left, top, width, size);\n top += size;\n }\n // Layout the widget using the computed size.\n if (widgetItem && !widgetItem.isHidden) {\n let size = this.sizers[1].size;\n widgetItem.update(left, top, width, size);\n }\n }\n }\n Private.TabLayoutNode = TabLayoutNode;\n /**\n * A layout node which holds the data for a split area.\n */\n class SplitLayoutNode {\n /**\n * Construct a new split layout node.\n *\n * @param orientation - The orientation of the node.\n */\n constructor(orientation) {\n /**\n * The parent of the layout node.\n */\n this.parent = null;\n /**\n * Whether the sizers have been normalized.\n */\n this.normalized = false;\n /**\n * The child nodes for the split node.\n */\n this.children = [];\n /**\n * The box sizers for the layout children.\n */\n this.sizers = [];\n /**\n * The handles for the layout children.\n */\n this.handles = [];\n this.orientation = orientation;\n }\n /**\n * Create an iterator for all widgets in the layout tree.\n */\n *iterAllWidgets() {\n for (const child of this.children) {\n yield* child.iterAllWidgets();\n }\n }\n /**\n * Create an iterator for the user widgets in the layout tree.\n */\n *iterUserWidgets() {\n for (const child of this.children) {\n yield* child.iterUserWidgets();\n }\n }\n /**\n * Create an iterator for the selected widgets in the layout tree.\n */\n *iterSelectedWidgets() {\n for (const child of this.children) {\n yield* child.iterSelectedWidgets();\n }\n }\n /**\n * Create an iterator for the tab bars in the layout tree.\n */\n *iterTabBars() {\n for (const child of this.children) {\n yield* child.iterTabBars();\n }\n }\n /**\n * Create an iterator for the handles in the layout tree.\n */\n *iterHandles() {\n yield* this.handles;\n for (const child of this.children) {\n yield* child.iterHandles();\n }\n }\n /**\n * Find the tab layout node which contains the given widget.\n */\n findTabNode(widget) {\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].findTabNode(widget);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Find the split layout node which contains the given handle.\n */\n findSplitNode(handle) {\n let index = this.handles.indexOf(handle);\n if (index !== -1) {\n return { index, node: this };\n }\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].findSplitNode(handle);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Find the first tab layout node in a layout tree.\n */\n findFirstTabNode() {\n if (this.children.length === 0) {\n return null;\n }\n return this.children[0].findFirstTabNode();\n }\n /**\n * Find the tab layout node which contains the local point.\n */\n hitTestTabNodes(x, y) {\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].hitTestTabNodes(x, y);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Create a configuration object for the layout tree.\n */\n createConfig() {\n let orientation = this.orientation;\n let sizes = this.createNormalizedSizes();\n let children = this.children.map(child => child.createConfig());\n return { type: 'split-area', orientation, children, sizes };\n }\n /**\n * Sync the visibility and orientation of the handles.\n */\n syncHandles() {\n this.handles.forEach((handle, i) => {\n handle.setAttribute('data-orientation', this.orientation);\n if (i === this.handles.length - 1) {\n handle.classList.add('lm-mod-hidden');\n }\n else {\n handle.classList.remove('lm-mod-hidden');\n }\n });\n }\n /**\n * Hold the current sizes of the box sizers.\n *\n * This sets the size hint of each sizer to its current size.\n */\n holdSizes() {\n for (const sizer of this.sizers) {\n sizer.sizeHint = sizer.size;\n }\n }\n /**\n * Recursively hold all of the sizes in the layout tree.\n *\n * This ignores the sizers of tab layout nodes.\n */\n holdAllSizes() {\n for (const child of this.children) {\n child.holdAllSizes();\n }\n this.holdSizes();\n }\n /**\n * Normalize the sizes of the split layout node.\n */\n normalizeSizes() {\n // Bail early if the sizers are empty.\n let n = this.sizers.length;\n if (n === 0) {\n return;\n }\n // Hold the current sizes of the sizers.\n this.holdSizes();\n // Compute the sum of the sizes.\n let sum = this.sizers.reduce((v, sizer) => v + sizer.sizeHint, 0);\n // Normalize the sizes based on the sum.\n if (sum === 0) {\n for (const sizer of this.sizers) {\n sizer.size = sizer.sizeHint = 1 / n;\n }\n }\n else {\n for (const sizer of this.sizers) {\n sizer.size = sizer.sizeHint /= sum;\n }\n }\n // Mark the sizes as normalized.\n this.normalized = true;\n }\n /**\n * Snap the normalized sizes of the split layout node.\n */\n createNormalizedSizes() {\n // Bail early if the sizers are empty.\n let n = this.sizers.length;\n if (n === 0) {\n return [];\n }\n // Grab the current sizes of the sizers.\n let sizes = this.sizers.map(sizer => sizer.size);\n // Compute the sum of the sizes.\n let sum = sizes.reduce((v, size) => v + size, 0);\n // Normalize the sizes based on the sum.\n if (sum === 0) {\n for (let i = sizes.length - 1; i > -1; i--) {\n sizes[i] = 1 / n;\n }\n }\n else {\n for (let i = sizes.length - 1; i > -1; i--) {\n sizes[i] /= sum;\n }\n }\n // Return the normalized sizes.\n return sizes;\n }\n /**\n * Fit the layout tree.\n */\n fit(spacing, items) {\n // Compute the required fixed space.\n let horizontal = this.orientation === 'horizontal';\n let fixed = Math.max(0, this.children.length - 1) * spacing;\n // Set up the limit variables.\n let minWidth = horizontal ? fixed : 0;\n let minHeight = horizontal ? 0 : fixed;\n let maxWidth = Infinity;\n let maxHeight = Infinity;\n // Fit the children and update the limits.\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let limits = this.children[i].fit(spacing, items);\n if (horizontal) {\n minHeight = Math.max(minHeight, limits.minHeight);\n minWidth += limits.minWidth;\n this.sizers[i].minSize = limits.minWidth;\n }\n else {\n minWidth = Math.max(minWidth, limits.minWidth);\n minHeight += limits.minHeight;\n this.sizers[i].minSize = limits.minHeight;\n }\n }\n // Return the computed limits for the layout node.\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n /**\n * Update the layout tree.\n */\n update(left, top, width, height, spacing, items) {\n // Compute the available layout space.\n let horizontal = this.orientation === 'horizontal';\n let fixed = Math.max(0, this.children.length - 1) * spacing;\n let space = Math.max(0, (horizontal ? width : height) - fixed);\n // De-normalize the sizes if needed.\n if (this.normalized) {\n for (const sizer of this.sizers) {\n sizer.sizeHint *= space;\n }\n this.normalized = false;\n }\n // Distribute the layout space to the sizers.\n BoxEngine.calc(this.sizers, space);\n // Update the geometry of the child nodes and handles.\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let child = this.children[i];\n let size = this.sizers[i].size;\n let handleStyle = this.handles[i].style;\n if (horizontal) {\n child.update(left, top, size, height, spacing, items);\n left += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${spacing}px`;\n handleStyle.height = `${height}px`;\n left += spacing;\n }\n else {\n child.update(left, top, width, size, spacing, items);\n top += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${width}px`;\n handleStyle.height = `${spacing}px`;\n top += spacing;\n }\n }\n }\n }\n Private.SplitLayoutNode = SplitLayoutNode;\n function addAria(widget, tabBar) {\n widget.node.setAttribute('role', 'tabpanel');\n let renderer = tabBar.renderer;\n if (renderer instanceof TabBar.Renderer) {\n let tabId = renderer.createTabKey({\n title: widget.title,\n current: false,\n zIndex: 0\n });\n widget.node.setAttribute('aria-labelledby', tabId);\n }\n }\n Private.addAria = addAria;\n function removeAria(widget) {\n widget.node.removeAttribute('role');\n widget.node.removeAttribute('aria-labelledby');\n }\n Private.removeAria = removeAria;\n /**\n * Normalize a tab area config and collect the visited widgets.\n */\n function normalizeTabAreaConfig(config, widgetSet) {\n // Bail early if there is no content.\n if (config.widgets.length === 0) {\n return null;\n }\n // Setup the filtered widgets array.\n let widgets = [];\n // Filter the config for unique widgets.\n for (const widget of config.widgets) {\n if (!widgetSet.has(widget)) {\n widgetSet.add(widget);\n widgets.push(widget);\n }\n }\n // Bail if there are no effective widgets.\n if (widgets.length === 0) {\n return null;\n }\n // Normalize the current index.\n let index = config.currentIndex;\n if (index !== -1 && (index < 0 || index >= widgets.length)) {\n index = 0;\n }\n // Return a normalized config object.\n return { type: 'tab-area', widgets, currentIndex: index };\n }\n /**\n * Normalize a split area config and collect the visited widgets.\n */\n function normalizeSplitAreaConfig(config, widgetSet) {\n // Set up the result variables.\n let orientation = config.orientation;\n let children = [];\n let sizes = [];\n // Normalize the config children.\n for (let i = 0, n = config.children.length; i < n; ++i) {\n // Normalize the child config.\n let child = normalizeAreaConfig(config.children[i], widgetSet);\n // Ignore an empty child.\n if (!child) {\n continue;\n }\n // Add the child or hoist its content as appropriate.\n if (child.type === 'tab-area' || child.orientation !== orientation) {\n children.push(child);\n sizes.push(Math.abs(config.sizes[i] || 0));\n }\n else {\n children.push(...child.children);\n sizes.push(...child.sizes);\n }\n }\n // Bail if there are no effective children.\n if (children.length === 0) {\n return null;\n }\n // If there is only one effective child, return that child.\n if (children.length === 1) {\n return children[0];\n }\n // Return a normalized config object.\n return { type: 'split-area', orientation, children, sizes };\n }\n /**\n * Convert a normalized tab area config into a layout tree.\n */\n function realizeTabAreaConfig(config, renderer, document) {\n // Create the tab bar for the layout node.\n let tabBar = renderer.createTabBar(document);\n // Hide each widget and add it to the tab bar.\n for (const widget of config.widgets) {\n widget.hide();\n tabBar.addTab(widget.title);\n Private.addAria(widget, tabBar);\n }\n // Set the current index of the tab bar.\n tabBar.currentIndex = config.currentIndex;\n // Return the new tab layout node.\n return new TabLayoutNode(tabBar);\n }\n /**\n * Convert a normalized split area config into a layout tree.\n */\n function realizeSplitAreaConfig(config, renderer, document) {\n // Create the split layout node.\n let node = new SplitLayoutNode(config.orientation);\n // Add each child to the layout node.\n config.children.forEach((child, i) => {\n // Create the child data for the layout node.\n let childNode = realizeAreaConfig(child, renderer, document);\n let sizer = createSizer(config.sizes[i]);\n let handle = renderer.createHandle();\n // Add the child data to the layout node.\n node.children.push(childNode);\n node.handles.push(handle);\n node.sizers.push(sizer);\n // Update the parent for the child node.\n childNode.parent = node;\n });\n // Synchronize the handle state for the layout node.\n node.syncHandles();\n // Normalize the sizes for the layout node.\n node.normalizeSizes();\n // Return the new layout node.\n return node;\n }\n})(Private$6 || (Private$6 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which provides a flexible docking area for widgets.\n */\nclass DockPanel extends Widget {\n /**\n * Construct a new dock panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super();\n this._drag = null;\n this._tabsMovable = true;\n this._tabsConstrained = false;\n this._addButtonEnabled = false;\n this._pressData = null;\n this._layoutModified = new Signal(this);\n this._addRequested = new Signal(this);\n this.addClass('lm-DockPanel');\n this._document = options.document || document;\n this._mode = options.mode || 'multiple-document';\n this._renderer = options.renderer || DockPanel.defaultRenderer;\n this._edges = options.edges || Private$5.DEFAULT_EDGES;\n if (options.tabsMovable !== undefined) {\n this._tabsMovable = options.tabsMovable;\n }\n if (options.tabsConstrained !== undefined) {\n this._tabsConstrained = options.tabsConstrained;\n }\n if (options.addButtonEnabled !== undefined) {\n this._addButtonEnabled = options.addButtonEnabled;\n }\n // Toggle the CSS mode attribute.\n this.dataset['mode'] = this._mode;\n // Create the delegate renderer for the layout.\n let renderer = {\n createTabBar: () => this._createTabBar(),\n createHandle: () => this._createHandle()\n };\n // Set up the dock layout for the panel.\n this.layout = new DockLayout({\n document: this._document,\n renderer,\n spacing: options.spacing,\n hiddenMode: options.hiddenMode\n });\n // Set up the overlay drop indicator.\n this.overlay = options.overlay || new DockPanel.Overlay();\n this.node.appendChild(this.overlay.node);\n }\n /**\n * Dispose of the resources held by the panel.\n */\n dispose() {\n // Ensure the mouse is released.\n this._releaseMouse();\n // Hide the overlay.\n this.overlay.hide(0);\n // Cancel a drag if one is in progress.\n if (this._drag) {\n this._drag.dispose();\n }\n // Dispose of the base class.\n super.dispose();\n }\n /**\n * The method for hiding widgets.\n */\n get hiddenMode() {\n return this.layout.hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n */\n set hiddenMode(v) {\n this.layout.hiddenMode = v;\n }\n /**\n * A signal emitted when the layout configuration is modified.\n *\n * #### Notes\n * This signal is emitted whenever the current layout configuration\n * may have changed.\n *\n * This signal is emitted asynchronously in a collapsed fashion, so\n * that multiple synchronous modifications results in only a single\n * emit of the signal.\n */\n get layoutModified() {\n return this._layoutModified;\n }\n /**\n * A signal emitted when the add button on a tab bar is clicked.\n *\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * The renderer used by the dock panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * Get the spacing between the widgets.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the spacing between the widgets.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * Get the mode for the dock panel.\n */\n get mode() {\n return this._mode;\n }\n /**\n * Set the mode for the dock panel.\n *\n * #### Notes\n * Changing the mode is a destructive operation with respect to the\n * panel's layout configuration. If layout state must be preserved,\n * save the current layout config before changing the mode.\n */\n set mode(value) {\n // Bail early if the mode does not change.\n if (this._mode === value) {\n return;\n }\n // Update the internal mode.\n this._mode = value;\n // Toggle the CSS mode attribute.\n this.dataset['mode'] = value;\n // Get the layout for the panel.\n let layout = this.layout;\n // Configure the layout for the specified mode.\n switch (value) {\n case 'multiple-document':\n for (const tabBar of layout.tabBars()) {\n tabBar.show();\n }\n break;\n case 'single-document':\n layout.restoreLayout(Private$5.createSingleDocumentConfig(this));\n break;\n default:\n throw 'unreachable';\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Whether the tabs can be dragged / moved at runtime.\n */\n get tabsMovable() {\n return this._tabsMovable;\n }\n /**\n * Enable / Disable draggable / movable tabs.\n */\n set tabsMovable(value) {\n this._tabsMovable = value;\n for (const tabBar of this.tabBars()) {\n tabBar.tabsMovable = value;\n }\n }\n /**\n * Whether the tabs are constrained to their source dock panel\n */\n get tabsConstrained() {\n return this._tabsConstrained;\n }\n /**\n * Constrain/Allow tabs to be dragged outside of this dock panel\n */\n set tabsConstrained(value) {\n this._tabsConstrained = value;\n }\n /**\n * Whether the add buttons for each tab bar are enabled.\n */\n get addButtonEnabled() {\n return this._addButtonEnabled;\n }\n /**\n * Set whether the add buttons for each tab bar are enabled.\n */\n set addButtonEnabled(value) {\n this._addButtonEnabled = value;\n for (const tabBar of this.tabBars()) {\n tabBar.addButtonEnabled = value;\n }\n }\n /**\n * Whether the dock panel is empty.\n */\n get isEmpty() {\n return this.layout.isEmpty;\n }\n /**\n * Create an iterator over the user widgets in the panel.\n *\n * @returns A new iterator over the user widgets in the panel.\n *\n * #### Notes\n * This iterator does not include the generated tab bars.\n */\n *widgets() {\n yield* this.layout.widgets();\n }\n /**\n * Create an iterator over the selected widgets in the panel.\n *\n * @returns A new iterator over the selected user widgets.\n *\n * #### Notes\n * This iterator yields the widgets corresponding to the current tab\n * of each tab bar in the panel.\n */\n *selectedWidgets() {\n yield* this.layout.selectedWidgets();\n }\n /**\n * Create an iterator over the tab bars in the panel.\n *\n * @returns A new iterator over the tab bars in the panel.\n *\n * #### Notes\n * This iterator does not include the user widgets.\n */\n *tabBars() {\n yield* this.layout.tabBars();\n }\n /**\n * Create an iterator over the handles in the panel.\n *\n * @returns A new iterator over the handles in the panel.\n */\n *handles() {\n yield* this.layout.handles();\n }\n /**\n * Select a specific widget in the dock panel.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will make the widget the current widget in its tab area.\n */\n selectWidget(widget) {\n // Find the tab bar which contains the widget.\n let tabBar = find(this.tabBars(), bar => {\n return bar.titles.indexOf(widget.title) !== -1;\n });\n // Throw an error if no tab bar is found.\n if (!tabBar) {\n throw new Error('Widget is not contained in the dock panel.');\n }\n // Ensure the widget is the current widget.\n tabBar.currentTitle = widget.title;\n }\n /**\n * Activate a specified widget in the dock panel.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will select and activate the given widget.\n */\n activateWidget(widget) {\n this.selectWidget(widget);\n widget.activate();\n }\n /**\n * Save the current layout configuration of the dock panel.\n *\n * @returns A new config object for the current layout state.\n *\n * #### Notes\n * The return value can be provided to the `restoreLayout` method\n * in order to restore the layout to its current configuration.\n */\n saveLayout() {\n return this.layout.saveLayout();\n }\n /**\n * Restore the layout to a previously saved configuration.\n *\n * @param config - The layout configuration to restore.\n *\n * #### Notes\n * Widgets which currently belong to the layout but which are not\n * contained in the config will be unparented.\n *\n * The dock panel automatically reverts to `'multiple-document'`\n * mode when a layout config is restored.\n */\n restoreLayout(config) {\n // Reset the mode.\n this._mode = 'multiple-document';\n // Restore the layout.\n this.layout.restoreLayout(config);\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Add a widget to the dock panel.\n *\n * @param widget - The widget to add to the dock panel.\n *\n * @param options - The additional options for adding the widget.\n *\n * #### Notes\n * If the panel is in single document mode, the options are ignored\n * and the widget is always added as tab in the hidden tab bar.\n */\n addWidget(widget, options = {}) {\n // Add the widget to the layout.\n if (this._mode === 'single-document') {\n this.layout.addWidget(widget);\n }\n else {\n this.layout.addWidget(widget, options);\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Process a message sent to the widget.\n *\n * @param msg - The message sent to the widget.\n */\n processMessage(msg) {\n if (msg.type === 'layout-modified') {\n this._layoutModified.emit(undefined);\n }\n else {\n super.processMessage(msg);\n }\n }\n /**\n * Handle the DOM events for the dock panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'lm-dragenter':\n this._evtDragEnter(event);\n break;\n case 'lm-dragleave':\n this._evtDragLeave(event);\n break;\n case 'lm-dragover':\n this._evtDragOver(event);\n break;\n case 'lm-drop':\n this._evtDrop(event);\n break;\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('lm-dragenter', this);\n this.node.addEventListener('lm-dragleave', this);\n this.node.addEventListener('lm-dragover', this);\n this.node.addEventListener('lm-drop', this);\n this.node.addEventListener('pointerdown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('lm-dragenter', this);\n this.node.removeEventListener('lm-dragleave', this);\n this.node.removeEventListener('lm-dragover', this);\n this.node.removeEventListener('lm-drop', this);\n this.node.removeEventListener('pointerdown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n // Ignore the generated tab bars.\n if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n return;\n }\n // Add the widget class to the child.\n msg.child.addClass('lm-DockPanel-widget');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n // Ignore the generated tab bars.\n if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n return;\n }\n // Remove the widget class from the child.\n msg.child.removeClass('lm-DockPanel-widget');\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `'lm-dragenter'` event for the dock panel.\n */\n _evtDragEnter(event) {\n // If the factory mime type is present, mark the event as\n // handled in order to get the rest of the drag events.\n if (event.mimeData.hasData('application/vnd.lumino.widget-factory')) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n /**\n * Handle the `'lm-dragleave'` event for the dock panel.\n */\n _evtDragLeave(event) {\n // Mark the event as handled.\n event.preventDefault();\n if (this._tabsConstrained && event.source !== this)\n return;\n event.stopPropagation();\n // The new target might be a descendant, so we might still handle the drop.\n // Hide asynchronously so that if a lm-dragover event bubbles up to us, the\n // hide is cancelled by the lm-dragover handler's show overlay logic.\n this.overlay.hide(1);\n }\n /**\n * Handle the `'lm-dragover'` event for the dock panel.\n */\n _evtDragOver(event) {\n // Mark the event as handled.\n event.preventDefault();\n // Show the drop indicator overlay and update the drop\n // action based on the drop target zone under the mouse.\n if ((this._tabsConstrained && event.source !== this) ||\n this._showOverlay(event.clientX, event.clientY) === 'invalid') {\n event.dropAction = 'none';\n }\n else {\n event.stopPropagation();\n event.dropAction = event.proposedAction;\n }\n }\n /**\n * Handle the `'lm-drop'` event for the dock panel.\n */\n _evtDrop(event) {\n // Mark the event as handled.\n event.preventDefault();\n // Hide the drop indicator overlay.\n this.overlay.hide(0);\n // Bail if the proposed action is to do nothing.\n if (event.proposedAction === 'none') {\n event.dropAction = 'none';\n return;\n }\n // Find the drop target under the mouse.\n let { clientX, clientY } = event;\n let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n // Bail if the drop zone is invalid.\n if ((this._tabsConstrained && event.source !== this) ||\n zone === 'invalid') {\n event.dropAction = 'none';\n return;\n }\n // Bail if the factory mime type has invalid data.\n let mimeData = event.mimeData;\n let factory = mimeData.getData('application/vnd.lumino.widget-factory');\n if (typeof factory !== 'function') {\n event.dropAction = 'none';\n return;\n }\n // Bail if the factory does not produce a widget.\n let widget = factory();\n if (!(widget instanceof Widget)) {\n event.dropAction = 'none';\n return;\n }\n // Bail if the widget is an ancestor of the dock panel.\n if (widget.contains(this)) {\n event.dropAction = 'none';\n return;\n }\n // Find the reference widget for the drop target.\n let ref = target ? Private$5.getDropRef(target.tabBar) : null;\n // Add the widget according to the indicated drop zone.\n switch (zone) {\n case 'root-all':\n this.addWidget(widget);\n break;\n case 'root-top':\n this.addWidget(widget, { mode: 'split-top' });\n break;\n case 'root-left':\n this.addWidget(widget, { mode: 'split-left' });\n break;\n case 'root-right':\n this.addWidget(widget, { mode: 'split-right' });\n break;\n case 'root-bottom':\n this.addWidget(widget, { mode: 'split-bottom' });\n break;\n case 'widget-all':\n this.addWidget(widget, { mode: 'tab-after', ref });\n break;\n case 'widget-top':\n this.addWidget(widget, { mode: 'split-top', ref });\n break;\n case 'widget-left':\n this.addWidget(widget, { mode: 'split-left', ref });\n break;\n case 'widget-right':\n this.addWidget(widget, { mode: 'split-right', ref });\n break;\n case 'widget-bottom':\n this.addWidget(widget, { mode: 'split-bottom', ref });\n break;\n case 'widget-tab':\n this.addWidget(widget, { mode: 'tab-after', ref });\n break;\n default:\n throw 'unreachable';\n }\n // Accept the proposed drop action.\n event.dropAction = event.proposedAction;\n // Stop propagation if we have not bailed so far.\n event.stopPropagation();\n // Activate the dropped widget.\n this.activateWidget(widget);\n }\n /**\n * Handle the `'keydown'` event for the dock panel.\n */\n _evtKeyDown(event) {\n // Stop input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse if `Escape` is pressed.\n if (event.keyCode === 27) {\n // Finalize the mouse release.\n this._releaseMouse();\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n }\n /**\n * Handle the `'pointerdown'` event for the dock panel.\n */\n _evtPointerDown(event) {\n // Do nothing if the left mouse button is not pressed.\n if (event.button !== 0) {\n return;\n }\n // Find the handle which contains the mouse target, if any.\n let layout = this.layout;\n let target = event.target;\n let handle = find(layout.handles(), handle => handle.contains(target));\n if (!handle) {\n return;\n }\n // Stop the event when a handle is pressed.\n event.preventDefault();\n event.stopPropagation();\n // Add the extra document listeners.\n this._document.addEventListener('keydown', this, true);\n this._document.addEventListener('pointerup', this, true);\n this._document.addEventListener('pointermove', this, true);\n this._document.addEventListener('contextmenu', this, true);\n // Compute the offset deltas for the handle press.\n let rect = handle.getBoundingClientRect();\n let deltaX = event.clientX - rect.left;\n let deltaY = event.clientY - rect.top;\n // Override the cursor and store the press data.\n let style = window.getComputedStyle(handle);\n let override = Drag.overrideCursor(style.cursor, this._document);\n this._pressData = { handle, deltaX, deltaY, override };\n }\n /**\n * Handle the `'pointermove'` event for the dock panel.\n */\n _evtPointerMove(event) {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Stop the event when dragging a handle.\n event.preventDefault();\n event.stopPropagation();\n // Compute the desired offset position for the handle.\n let rect = this.node.getBoundingClientRect();\n let xPos = event.clientX - rect.left - this._pressData.deltaX;\n let yPos = event.clientY - rect.top - this._pressData.deltaY;\n // Set the handle as close to the desired position as possible.\n let layout = this.layout;\n layout.moveHandle(this._pressData.handle, xPos, yPos);\n }\n /**\n * Handle the `'pointerup'` event for the dock panel.\n */\n _evtPointerUp(event) {\n // Do nothing if the left mouse button is not released.\n if (event.button !== 0) {\n return;\n }\n // Stop the event when releasing a handle.\n event.preventDefault();\n event.stopPropagation();\n // Finalize the mouse release.\n this._releaseMouse();\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Release the mouse grab for the dock panel.\n */\n _releaseMouse() {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Clear the override cursor.\n this._pressData.override.dispose();\n this._pressData = null;\n // Remove the extra document listeners.\n this._document.removeEventListener('keydown', this, true);\n this._document.removeEventListener('pointerup', this, true);\n this._document.removeEventListener('pointermove', this, true);\n this._document.removeEventListener('contextmenu', this, true);\n }\n /**\n * Show the overlay indicator at the given client position.\n *\n * Returns the drop zone at the specified client position.\n *\n * #### Notes\n * If the position is not over a valid zone, the overlay is hidden.\n */\n _showOverlay(clientX, clientY) {\n // Find the dock target for the given client position.\n let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n // If the drop zone is invalid, hide the overlay and bail.\n if (zone === 'invalid') {\n this.overlay.hide(100);\n return zone;\n }\n // Setup the variables needed to compute the overlay geometry.\n let top;\n let left;\n let right;\n let bottom;\n let box = ElementExt.boxSizing(this.node); // TODO cache this?\n let rect = this.node.getBoundingClientRect();\n // Compute the overlay geometry based on the dock zone.\n switch (zone) {\n case 'root-all':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'root-top':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = rect.height * Private$5.GOLDEN_RATIO;\n break;\n case 'root-left':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = rect.width * Private$5.GOLDEN_RATIO;\n bottom = box.paddingBottom;\n break;\n case 'root-right':\n top = box.paddingTop;\n left = rect.width * Private$5.GOLDEN_RATIO;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'root-bottom':\n top = rect.height * Private$5.GOLDEN_RATIO;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'widget-all':\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-top':\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom + target.height / 2;\n break;\n case 'widget-left':\n top = target.top;\n left = target.left;\n right = target.right + target.width / 2;\n bottom = target.bottom;\n break;\n case 'widget-right':\n top = target.top;\n left = target.left + target.width / 2;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-bottom':\n top = target.top + target.height / 2;\n left = target.left;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-tab': {\n const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom + target.height - tabHeight;\n break;\n }\n default:\n throw 'unreachable';\n }\n // Show the overlay with the computed geometry.\n this.overlay.show({ top, left, right, bottom });\n // Finally, return the computed drop zone.\n return zone;\n }\n /**\n * Create a new tab bar for use by the panel.\n */\n _createTabBar() {\n // Create the tab bar.\n let tabBar = this._renderer.createTabBar(this._document);\n // Set the generated tab bar property for the tab bar.\n Private$5.isGeneratedTabBarProperty.set(tabBar, true);\n // Hide the tab bar when in single document mode.\n if (this._mode === 'single-document') {\n tabBar.hide();\n }\n // Enforce necessary tab bar behavior.\n // TODO do we really want to enforce *all* of these?\n tabBar.tabsMovable = this._tabsMovable;\n tabBar.allowDeselect = false;\n tabBar.addButtonEnabled = this._addButtonEnabled;\n tabBar.removeBehavior = 'select-previous-tab';\n tabBar.insertBehavior = 'select-tab-if-needed';\n // Connect the signal handlers for the tab bar.\n tabBar.tabMoved.connect(this._onTabMoved, this);\n tabBar.currentChanged.connect(this._onCurrentChanged, this);\n tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n tabBar.tabDetachRequested.connect(this._onTabDetachRequested, this);\n tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n tabBar.addRequested.connect(this._onTabAddRequested, this);\n // Return the initialized tab bar.\n return tabBar;\n }\n /**\n * Create a new handle for use by the panel.\n */\n _createHandle() {\n return this._renderer.createHandle();\n }\n /**\n * Handle the `tabMoved` signal from a tab bar.\n */\n _onTabMoved() {\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `currentChanged` signal from a tab bar.\n */\n _onCurrentChanged(sender, args) {\n // Extract the previous and current title from the args.\n let { previousTitle, currentTitle } = args;\n // Hide the previous widget.\n if (previousTitle) {\n previousTitle.owner.hide();\n }\n // Show the current widget.\n if (currentTitle) {\n currentTitle.owner.show();\n }\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `addRequested` signal from a tab bar.\n */\n _onTabAddRequested(sender) {\n this._addRequested.emit(sender);\n }\n /**\n * Handle the `tabActivateRequested` signal from a tab bar.\n */\n _onTabActivateRequested(sender, args) {\n args.title.owner.activate();\n }\n /**\n * Handle the `tabCloseRequested` signal from a tab bar.\n */\n _onTabCloseRequested(sender, args) {\n args.title.owner.close();\n }\n /**\n * Handle the `tabDetachRequested` signal from a tab bar.\n */\n _onTabDetachRequested(sender, args) {\n // Do nothing if a drag is already in progress.\n if (this._drag) {\n return;\n }\n // Release the tab bar's hold on the mouse.\n sender.releaseMouse();\n // Extract the data from the args.\n let { title, tab, clientX, clientY, offset } = args;\n // Setup the mime data for the drag operation.\n let mimeData = new MimeData();\n let factory = () => title.owner;\n mimeData.setData('application/vnd.lumino.widget-factory', factory);\n // Create the drag image for the drag operation.\n let dragImage = tab.cloneNode(true);\n if (offset) {\n dragImage.style.top = `-${offset.y}px`;\n dragImage.style.left = `-${offset.x}px`;\n }\n // Create the drag object to manage the drag-drop operation.\n this._drag = new Drag({\n document: this._document,\n mimeData,\n dragImage,\n proposedAction: 'move',\n supportedActions: 'move',\n source: this\n });\n // Hide the tab node in the original tab.\n tab.classList.add('lm-mod-hidden');\n let cleanup = () => {\n this._drag = null;\n tab.classList.remove('lm-mod-hidden');\n };\n // Start the drag operation and cleanup when done.\n this._drag.start(clientX, clientY).then(cleanup);\n }\n}\n/**\n * The namespace for the `DockPanel` class statics.\n */\n(function (DockPanel) {\n /**\n * A concrete implementation of `IOverlay`.\n *\n * This is the default overlay implementation for a dock panel.\n */\n class Overlay {\n /**\n * Construct a new overlay.\n */\n constructor() {\n this._timer = -1;\n this._hidden = true;\n this.node = document.createElement('div');\n this.node.classList.add('lm-DockPanel-overlay');\n this.node.classList.add('lm-mod-hidden');\n this.node.style.position = 'absolute';\n this.node.style.contain = 'strict';\n }\n /**\n * Show the overlay using the given overlay geometry.\n *\n * @param geo - The desired geometry for the overlay.\n */\n show(geo) {\n // Update the position of the overlay.\n let style = this.node.style;\n style.top = `${geo.top}px`;\n style.left = `${geo.left}px`;\n style.right = `${geo.right}px`;\n style.bottom = `${geo.bottom}px`;\n // Clear any pending hide timer.\n clearTimeout(this._timer);\n this._timer = -1;\n // If the overlay is already visible, we're done.\n if (!this._hidden) {\n return;\n }\n // Clear the hidden flag.\n this._hidden = false;\n // Finally, show the overlay.\n this.node.classList.remove('lm-mod-hidden');\n }\n /**\n * Hide the overlay node.\n *\n * @param delay - The delay (in ms) before hiding the overlay.\n * A delay value <= 0 will hide the overlay immediately.\n */\n hide(delay) {\n // Do nothing if the overlay is already hidden.\n if (this._hidden) {\n return;\n }\n // Hide immediately if the delay is <= 0.\n if (delay <= 0) {\n clearTimeout(this._timer);\n this._timer = -1;\n this._hidden = true;\n this.node.classList.add('lm-mod-hidden');\n return;\n }\n // Do nothing if a hide is already pending.\n if (this._timer !== -1) {\n return;\n }\n // Otherwise setup the hide timer.\n this._timer = window.setTimeout(() => {\n this._timer = -1;\n this._hidden = true;\n this.node.classList.add('lm-mod-hidden');\n }, delay);\n }\n }\n DockPanel.Overlay = Overlay;\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Create a new tab bar for use with a dock panel.\n *\n * @returns A new tab bar for a dock panel.\n */\n createTabBar(document) {\n let bar = new TabBar({ document });\n bar.addClass('lm-DockPanel-tabBar');\n return bar;\n }\n /**\n * Create a new handle node for use with a dock panel.\n *\n * @returns A new handle node for a dock panel.\n */\n createHandle() {\n let handle = document.createElement('div');\n handle.className = 'lm-DockPanel-handle';\n return handle;\n }\n }\n DockPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n DockPanel.defaultRenderer = new Renderer();\n})(DockPanel || (DockPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$5;\n(function (Private) {\n /**\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n */\n Private.GOLDEN_RATIO = 0.618;\n /**\n * The default sizes for the edge drop zones, in pixels.\n */\n Private.DEFAULT_EDGES = {\n /**\n * The size of the top edge dock zone for the root panel, in pixels.\n * This is different from the others to distinguish between the top\n * tab bar and the top root zone.\n */\n top: 12,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n right: 40,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n bottom: 40,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n left: 40\n };\n /**\n * A singleton `'layout-modified'` conflatable message.\n */\n Private.LayoutModified = new ConflatableMessage('layout-modified');\n /**\n * An attached property used to track generated tab bars.\n */\n Private.isGeneratedTabBarProperty = new AttachedProperty({\n name: 'isGeneratedTabBar',\n create: () => false\n });\n /**\n * Create a single document config for the widgets in a dock panel.\n */\n function createSingleDocumentConfig(panel) {\n // Return an empty config if the panel is empty.\n if (panel.isEmpty) {\n return { main: null };\n }\n // Get a flat array of the widgets in the panel.\n let widgets = Array.from(panel.widgets());\n // Get the first selected widget in the panel.\n let selected = panel.selectedWidgets().next().value;\n // Compute the current index for the new config.\n let currentIndex = selected ? widgets.indexOf(selected) : -1;\n // Return the single document config.\n return { main: { type: 'tab-area', widgets, currentIndex } };\n }\n Private.createSingleDocumentConfig = createSingleDocumentConfig;\n /**\n * Find the drop target at the given client position.\n */\n function findDropTarget(panel, clientX, clientY, edges) {\n // Bail if the mouse is not over the dock panel.\n if (!ElementExt.hitTest(panel.node, clientX, clientY)) {\n return { zone: 'invalid', target: null };\n }\n // Look up the layout for the panel.\n let layout = panel.layout;\n // If the layout is empty, indicate the entire root drop zone.\n if (layout.isEmpty) {\n return { zone: 'root-all', target: null };\n }\n // Test the edge zones when in multiple document mode.\n if (panel.mode === 'multiple-document') {\n // Get the client rect for the dock panel.\n let panelRect = panel.node.getBoundingClientRect();\n // Compute the distance to each edge of the panel.\n let pl = clientX - panelRect.left + 1;\n let pt = clientY - panelRect.top + 1;\n let pr = panelRect.right - clientX;\n let pb = panelRect.bottom - clientY;\n // Find the minimum distance to an edge.\n let pd = Math.min(pt, pr, pb, pl);\n // Return a root zone if the mouse is within an edge.\n switch (pd) {\n case pt:\n if (pt < edges.top) {\n return { zone: 'root-top', target: null };\n }\n break;\n case pr:\n if (pr < edges.right) {\n return { zone: 'root-right', target: null };\n }\n break;\n case pb:\n if (pb < edges.bottom) {\n return { zone: 'root-bottom', target: null };\n }\n break;\n case pl:\n if (pl < edges.left) {\n return { zone: 'root-left', target: null };\n }\n break;\n default:\n throw 'unreachable';\n }\n }\n // Hit test the dock layout at the given client position.\n let target = layout.hitTestTabAreas(clientX, clientY);\n // Bail if no target area was found.\n if (!target) {\n return { zone: 'invalid', target: null };\n }\n // Return the whole tab area when in single document mode.\n if (panel.mode === 'single-document') {\n return { zone: 'widget-all', target };\n }\n // Compute the distance to each edge of the tab area.\n let al = target.x - target.left + 1;\n let at = target.y - target.top + 1;\n let ar = target.left + target.width - target.x;\n let ab = target.top + target.height - target.y;\n const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n if (at < tabHeight) {\n return { zone: 'widget-tab', target };\n }\n // Get the X and Y edge sizes for the area.\n let rx = Math.round(target.width / 3);\n let ry = Math.round(target.height / 3);\n // If the mouse is not within an edge, indicate the entire area.\n if (al > rx && ar > rx && at > ry && ab > ry) {\n return { zone: 'widget-all', target };\n }\n // Scale the distances by the slenderness ratio.\n al /= rx;\n at /= ry;\n ar /= rx;\n ab /= ry;\n // Find the minimum distance to the area edge.\n let ad = Math.min(al, at, ar, ab);\n // Find the widget zone for the area edge.\n let zone;\n switch (ad) {\n case al:\n zone = 'widget-left';\n break;\n case at:\n zone = 'widget-top';\n break;\n case ar:\n zone = 'widget-right';\n break;\n case ab:\n zone = 'widget-bottom';\n break;\n default:\n throw 'unreachable';\n }\n // Return the final drop target.\n return { zone, target };\n }\n Private.findDropTarget = findDropTarget;\n /**\n * Get the drop reference widget for a tab bar.\n */\n function getDropRef(tabBar) {\n if (tabBar.titles.length === 0) {\n return null;\n }\n if (tabBar.currentTitle) {\n return tabBar.currentTitle.owner;\n }\n return tabBar.titles[tabBar.titles.length - 1].owner;\n }\n Private.getDropRef = getDropRef;\n})(Private$5 || (Private$5 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A class which tracks focus among a set of widgets.\n *\n * This class is useful when code needs to keep track of the most\n * recently focused widget(s) among a set of related widgets.\n */\nclass FocusTracker {\n constructor() {\n this._counter = 0;\n this._widgets = [];\n this._activeWidget = null;\n this._currentWidget = null;\n this._numbers = new Map();\n this._nodes = new Map();\n this._activeChanged = new Signal(this);\n this._currentChanged = new Signal(this);\n }\n /**\n * Dispose of the resources held by the tracker.\n */\n dispose() {\n // Do nothing if the tracker is already disposed.\n if (this._counter < 0) {\n return;\n }\n // Mark the tracker as disposed.\n this._counter = -1;\n // Clear the connections for the tracker.\n Signal.clearData(this);\n // Remove all event listeners.\n for (const widget of this._widgets) {\n widget.node.removeEventListener('focus', this, true);\n widget.node.removeEventListener('blur', this, true);\n }\n // Clear the internal data structures.\n this._activeWidget = null;\n this._currentWidget = null;\n this._nodes.clear();\n this._numbers.clear();\n this._widgets.length = 0;\n }\n /**\n * A signal emitted when the current widget has changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * A signal emitted when the active widget has changed.\n */\n get activeChanged() {\n return this._activeChanged;\n }\n /**\n * A flag indicating whether the tracker is disposed.\n */\n get isDisposed() {\n return this._counter < 0;\n }\n /**\n * The current widget in the tracker.\n *\n * #### Notes\n * The current widget is the widget among the tracked widgets which\n * has the *descendant node* which has most recently been focused.\n *\n * The current widget will not be updated if the node loses focus. It\n * will only be updated when a different tracked widget gains focus.\n *\n * If the current widget is removed from the tracker, the previous\n * current widget will be restored.\n *\n * This behavior is intended to follow a user's conceptual model of\n * a semantically \"current\" widget, where the \"last thing of type X\"\n * to be interacted with is the \"current instance of X\", regardless\n * of whether that instance still has focus.\n */\n get currentWidget() {\n return this._currentWidget;\n }\n /**\n * The active widget in the tracker.\n *\n * #### Notes\n * The active widget is the widget among the tracked widgets which\n * has the *descendant node* which is currently focused.\n */\n get activeWidget() {\n return this._activeWidget;\n }\n /**\n * A read only array of the widgets being tracked.\n */\n get widgets() {\n return this._widgets;\n }\n /**\n * Get the focus number for a particular widget in the tracker.\n *\n * @param widget - The widget of interest.\n *\n * @returns The focus number for the given widget, or `-1` if the\n * widget has not had focus since being added to the tracker, or\n * is not contained by the tracker.\n *\n * #### Notes\n * The focus number indicates the relative order in which the widgets\n * have gained focus. A widget with a larger number has gained focus\n * more recently than a widget with a smaller number.\n *\n * The `currentWidget` will always have the largest focus number.\n *\n * All widgets start with a focus number of `-1`, which indicates that\n * the widget has not been focused since being added to the tracker.\n */\n focusNumber(widget) {\n let n = this._numbers.get(widget);\n return n === undefined ? -1 : n;\n }\n /**\n * Test whether the focus tracker contains a given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns `true` if the widget is tracked, `false` otherwise.\n */\n has(widget) {\n return this._numbers.has(widget);\n }\n /**\n * Add a widget to the focus tracker.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * A widget will be automatically removed from the tracker if it\n * is disposed after being added.\n *\n * If the widget is already tracked, this is a no-op.\n */\n add(widget) {\n // Do nothing if the widget is already tracked.\n if (this._numbers.has(widget)) {\n return;\n }\n // Test whether the widget has focus.\n let focused = widget.node.contains(document.activeElement);\n // Set up the initial focus number.\n let n = focused ? this._counter++ : -1;\n // Add the widget to the internal data structures.\n this._widgets.push(widget);\n this._numbers.set(widget, n);\n this._nodes.set(widget.node, widget);\n // Set up the event listeners. The capturing phase must be used\n // since the 'focus' and 'blur' events don't bubble and Firefox\n // doesn't support the 'focusin' or 'focusout' events.\n widget.node.addEventListener('focus', this, true);\n widget.node.addEventListener('blur', this, true);\n // Connect the disposed signal handler.\n widget.disposed.connect(this._onWidgetDisposed, this);\n // Set the current and active widgets if needed.\n if (focused) {\n this._setWidgets(widget, widget);\n }\n }\n /**\n * Remove a widget from the focus tracker.\n *\n * #### Notes\n * If the widget is the `currentWidget`, the previous current widget\n * will become the new `currentWidget`.\n *\n * A widget will be automatically removed from the tracker if it\n * is disposed after being added.\n *\n * If the widget is not tracked, this is a no-op.\n */\n remove(widget) {\n // Bail early if the widget is not tracked.\n if (!this._numbers.has(widget)) {\n return;\n }\n // Disconnect the disposed signal handler.\n widget.disposed.disconnect(this._onWidgetDisposed, this);\n // Remove the event listeners.\n widget.node.removeEventListener('focus', this, true);\n widget.node.removeEventListener('blur', this, true);\n // Remove the widget from the internal data structures.\n ArrayExt.removeFirstOf(this._widgets, widget);\n this._nodes.delete(widget.node);\n this._numbers.delete(widget);\n // Bail early if the widget is not the current widget.\n if (this._currentWidget !== widget) {\n return;\n }\n // Filter the widgets for those which have had focus.\n let valid = this._widgets.filter(w => this._numbers.get(w) !== -1);\n // Get the valid widget with the max focus number.\n let previous = max(valid, (first, second) => {\n let a = this._numbers.get(first);\n let b = this._numbers.get(second);\n return a - b;\n }) || null;\n // Set the current and active widgets.\n this._setWidgets(previous, null);\n }\n /**\n * Handle the DOM events for the focus tracker.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the tracked nodes. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'focus':\n this._evtFocus(event);\n break;\n case 'blur':\n this._evtBlur(event);\n break;\n }\n }\n /**\n * Set the current and active widgets for the tracker.\n */\n _setWidgets(current, active) {\n // Swap the current widget.\n let oldCurrent = this._currentWidget;\n this._currentWidget = current;\n // Swap the active widget.\n let oldActive = this._activeWidget;\n this._activeWidget = active;\n // Emit the `currentChanged` signal if needed.\n if (oldCurrent !== current) {\n this._currentChanged.emit({ oldValue: oldCurrent, newValue: current });\n }\n // Emit the `activeChanged` signal if needed.\n if (oldActive !== active) {\n this._activeChanged.emit({ oldValue: oldActive, newValue: active });\n }\n }\n /**\n * Handle the `'focus'` event for a tracked widget.\n */\n _evtFocus(event) {\n // Find the widget which gained focus, which is known to exist.\n let widget = this._nodes.get(event.currentTarget);\n // Update the focus number if necessary.\n if (widget !== this._currentWidget) {\n this._numbers.set(widget, this._counter++);\n }\n // Set the current and active widgets.\n this._setWidgets(widget, widget);\n }\n /**\n * Handle the `'blur'` event for a tracked widget.\n */\n _evtBlur(event) {\n // Find the widget which lost focus, which is known to exist.\n let widget = this._nodes.get(event.currentTarget);\n // Get the node which being focused after this blur.\n let focusTarget = event.relatedTarget;\n // If no other node is being focused, clear the active widget.\n if (!focusTarget) {\n this._setWidgets(this._currentWidget, null);\n return;\n }\n // Bail if the focus widget is not changing.\n if (widget.node.contains(focusTarget)) {\n return;\n }\n // If no tracked widget is being focused, clear the active widget.\n if (!find(this._widgets, w => w.node.contains(focusTarget))) {\n this._setWidgets(this._currentWidget, null);\n return;\n }\n }\n /**\n * Handle the `disposed` signal for a tracked widget.\n */\n _onWidgetDisposed(sender) {\n this.remove(sender);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a grid.\n */\nclass GridLayout extends Layout {\n /**\n * Construct a new grid layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n super(options);\n this._dirty = false;\n this._rowSpacing = 4;\n this._columnSpacing = 4;\n this._items = [];\n this._rowStarts = [];\n this._columnStarts = [];\n this._rowSizers = [new BoxSizer()];\n this._columnSizers = [new BoxSizer()];\n this._box = null;\n if (options.rowCount !== undefined) {\n Private$4.reallocSizers(this._rowSizers, options.rowCount);\n }\n if (options.columnCount !== undefined) {\n Private$4.reallocSizers(this._columnSizers, options.columnCount);\n }\n if (options.rowSpacing !== undefined) {\n this._rowSpacing = Private$4.clampValue(options.rowSpacing);\n }\n if (options.columnSpacing !== undefined) {\n this._columnSpacing = Private$4.clampValue(options.columnSpacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the widgets and layout items.\n for (const item of this._items) {\n let widget = item.widget;\n item.dispose();\n widget.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._rowStarts.length = 0;\n this._rowSizers.length = 0;\n this._columnStarts.length = 0;\n this._columnSizers.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the number of rows in the layout.\n */\n get rowCount() {\n return this._rowSizers.length;\n }\n /**\n * Set the number of rows in the layout.\n *\n * #### Notes\n * The minimum row count is `1`.\n */\n set rowCount(value) {\n // Do nothing if the row count does not change.\n if (value === this.rowCount) {\n return;\n }\n // Reallocate the row sizers.\n Private$4.reallocSizers(this._rowSizers, value);\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the number of columns in the layout.\n */\n get columnCount() {\n return this._columnSizers.length;\n }\n /**\n * Set the number of columns in the layout.\n *\n * #### Notes\n * The minimum column count is `1`.\n */\n set columnCount(value) {\n // Do nothing if the column count does not change.\n if (value === this.columnCount) {\n return;\n }\n // Reallocate the column sizers.\n Private$4.reallocSizers(this._columnSizers, value);\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the row spacing for the layout.\n */\n get rowSpacing() {\n return this._rowSpacing;\n }\n /**\n * Set the row spacing for the layout.\n */\n set rowSpacing(value) {\n // Clamp the spacing to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the spacing does not change\n if (this._rowSpacing === value) {\n return;\n }\n // Update the internal spacing.\n this._rowSpacing = value;\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the column spacing for the layout.\n */\n get columnSpacing() {\n return this._columnSpacing;\n }\n /**\n * Set the col spacing for the layout.\n */\n set columnSpacing(value) {\n // Clamp the spacing to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the spacing does not change\n if (this._columnSpacing === value) {\n return;\n }\n // Update the internal spacing.\n this._columnSpacing = value;\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the stretch factor for a specific row.\n *\n * @param index - The row index of interest.\n *\n * @returns The stretch factor for the row.\n *\n * #### Notes\n * This returns `-1` if the index is out of range.\n */\n rowStretch(index) {\n let sizer = this._rowSizers[index];\n return sizer ? sizer.stretch : -1;\n }\n /**\n * Set the stretch factor for a specific row.\n *\n * @param index - The row index of interest.\n *\n * @param value - The stretch factor for the row.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n setRowStretch(index, value) {\n // Look up the row sizer.\n let sizer = this._rowSizers[index];\n // Bail if the index is out of range.\n if (!sizer) {\n return;\n }\n // Clamp the value to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the stretch does not change.\n if (sizer.stretch === value) {\n return;\n }\n // Update the sizer stretch.\n sizer.stretch = value;\n // Schedule an update of the parent.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Get the stretch factor for a specific column.\n *\n * @param index - The column index of interest.\n *\n * @returns The stretch factor for the column.\n *\n * #### Notes\n * This returns `-1` if the index is out of range.\n */\n columnStretch(index) {\n let sizer = this._columnSizers[index];\n return sizer ? sizer.stretch : -1;\n }\n /**\n * Set the stretch factor for a specific column.\n *\n * @param index - The column index of interest.\n *\n * @param value - The stretch factor for the column.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n setColumnStretch(index, value) {\n // Look up the column sizer.\n let sizer = this._columnSizers[index];\n // Bail if the index is out of range.\n if (!sizer) {\n return;\n }\n // Clamp the value to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the stretch does not change.\n if (sizer.stretch === value) {\n return;\n }\n // Update the sizer stretch.\n sizer.stretch = value;\n // Schedule an update of the parent.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n for (const item of this._items) {\n yield item.widget;\n }\n }\n /**\n * Add a widget to the grid layout.\n *\n * @param widget - The widget to add to the layout.\n *\n * #### Notes\n * If the widget is already contained in the layout, this is no-op.\n */\n addWidget(widget) {\n // Look up the index for the widget.\n let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n // Bail if the widget is already in the layout.\n if (i !== -1) {\n return;\n }\n // Add the widget to the layout.\n this._items.push(new LayoutItem(widget));\n // Attach the widget to the parent.\n if (this.parent) {\n this.attachWidget(widget);\n }\n }\n /**\n * Remove a widget from the grid layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Look up the index for the widget.\n let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n // Bail if the widget is not in the layout.\n if (i === -1) {\n return;\n }\n // Remove the widget from the layout.\n let item = ArrayExt.removeAt(this._items, i);\n // Detach the widget from the parent.\n if (this.parent) {\n this.detachWidget(widget);\n }\n // Dispose the layout item.\n item.dispose();\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n for (const widget of this) {\n this.attachWidget(widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param widget - The widget to attach to the parent.\n */\n attachWidget(widget) {\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param widget - The widget to detach from the parent.\n */\n detachWidget(widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Reset the min sizes of the sizers.\n for (let i = 0, n = this.rowCount; i < n; ++i) {\n this._rowSizers[i].minSize = 0;\n }\n for (let i = 0, n = this.columnCount; i < n; ++i) {\n this._columnSizers[i].minSize = 0;\n }\n // Filter for the visible layout items.\n let items = this._items.filter(it => !it.isHidden);\n // Fit the layout items.\n for (let i = 0, n = items.length; i < n; ++i) {\n items[i].fit();\n }\n // Get the max row and column index.\n let maxRow = this.rowCount - 1;\n let maxCol = this.columnCount - 1;\n // Sort the items by row span.\n items.sort(Private$4.rowSpanCmp);\n // Update the min sizes of the row sizers.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Fetch the item.\n let item = items[i];\n // Get the row bounds for the item.\n let config = GridLayout.getCellConfig(item.widget);\n let r1 = Math.min(config.row, maxRow);\n let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n // Distribute the minimum height to the sizers as needed.\n Private$4.distributeMin(this._rowSizers, r1, r2, item.minHeight);\n }\n // Sort the items by column span.\n items.sort(Private$4.columnSpanCmp);\n // Update the min sizes of the column sizers.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Fetch the item.\n let item = items[i];\n // Get the column bounds for the item.\n let config = GridLayout.getCellConfig(item.widget);\n let c1 = Math.min(config.column, maxCol);\n let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n // Distribute the minimum width to the sizers as needed.\n Private$4.distributeMin(this._columnSizers, c1, c2, item.minWidth);\n }\n // If no size constraint is needed, just update the parent.\n if (this.fitPolicy === 'set-no-constraint') {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n return;\n }\n // Set up the computed min size.\n let minH = maxRow * this._rowSpacing;\n let minW = maxCol * this._columnSpacing;\n // Add the sizer minimums to the computed min size.\n for (let i = 0, n = this.rowCount; i < n; ++i) {\n minH += this._rowSizers[i].minSize;\n }\n for (let i = 0, n = this.columnCount; i < n; ++i) {\n minW += this._columnSizers[i].minSize;\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the layout area adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Get the max row and column index.\n let maxRow = this.rowCount - 1;\n let maxCol = this.columnCount - 1;\n // Compute the total fixed row and column space.\n let fixedRowSpace = maxRow * this._rowSpacing;\n let fixedColSpace = maxCol * this._columnSpacing;\n // Distribute the available space to the box sizers.\n BoxEngine.calc(this._rowSizers, Math.max(0, height - fixedRowSpace));\n BoxEngine.calc(this._columnSizers, Math.max(0, width - fixedColSpace));\n // Update the row start positions.\n for (let i = 0, pos = top, n = this.rowCount; i < n; ++i) {\n this._rowStarts[i] = pos;\n pos += this._rowSizers[i].size + this._rowSpacing;\n }\n // Update the column start positions.\n for (let i = 0, pos = left, n = this.columnCount; i < n; ++i) {\n this._columnStarts[i] = pos;\n pos += this._columnSizers[i].size + this._columnSpacing;\n }\n // Update the geometry of the layout items.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Fetch the cell bounds for the widget.\n let config = GridLayout.getCellConfig(item.widget);\n let r1 = Math.min(config.row, maxRow);\n let c1 = Math.min(config.column, maxCol);\n let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n // Compute the cell geometry.\n let x = this._columnStarts[c1];\n let y = this._rowStarts[r1];\n let w = this._columnStarts[c2] + this._columnSizers[c2].size - x;\n let h = this._rowStarts[r2] + this._rowSizers[r2].size - y;\n // Update the geometry of the layout item.\n item.update(x, y, w, h);\n }\n }\n}\n/**\n * The namespace for the `GridLayout` class statics.\n */\n(function (GridLayout) {\n /**\n * Get the cell config for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The cell config for the widget.\n */\n function getCellConfig(widget) {\n return Private$4.cellConfigProperty.get(widget);\n }\n GridLayout.getCellConfig = getCellConfig;\n /**\n * Set the cell config for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the cell config.\n */\n function setCellConfig(widget, value) {\n Private$4.cellConfigProperty.set(widget, Private$4.normalizeConfig(value));\n }\n GridLayout.setCellConfig = setCellConfig;\n})(GridLayout || (GridLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$4;\n(function (Private) {\n /**\n * The property descriptor for the widget cell config.\n */\n Private.cellConfigProperty = new AttachedProperty({\n name: 'cellConfig',\n create: () => ({ row: 0, column: 0, rowSpan: 1, columnSpan: 1 }),\n changed: onChildCellConfigChanged\n });\n /**\n * Normalize a partial cell config object.\n */\n function normalizeConfig(config) {\n let row = Math.max(0, Math.floor(config.row || 0));\n let column = Math.max(0, Math.floor(config.column || 0));\n let rowSpan = Math.max(1, Math.floor(config.rowSpan || 0));\n let columnSpan = Math.max(1, Math.floor(config.columnSpan || 0));\n return { row, column, rowSpan, columnSpan };\n }\n Private.normalizeConfig = normalizeConfig;\n /**\n * Clamp a value to an integer >= 0.\n */\n function clampValue(value) {\n return Math.max(0, Math.floor(value));\n }\n Private.clampValue = clampValue;\n /**\n * A sort comparison function for row spans.\n */\n function rowSpanCmp(a, b) {\n let c1 = Private.cellConfigProperty.get(a.widget);\n let c2 = Private.cellConfigProperty.get(b.widget);\n return c1.rowSpan - c2.rowSpan;\n }\n Private.rowSpanCmp = rowSpanCmp;\n /**\n * A sort comparison function for column spans.\n */\n function columnSpanCmp(a, b) {\n let c1 = Private.cellConfigProperty.get(a.widget);\n let c2 = Private.cellConfigProperty.get(b.widget);\n return c1.columnSpan - c2.columnSpan;\n }\n Private.columnSpanCmp = columnSpanCmp;\n /**\n * Reallocate the box sizers for the given grid dimensions.\n */\n function reallocSizers(sizers, count) {\n // Coerce the count to the valid range.\n count = Math.max(1, Math.floor(count));\n // Add the missing sizers.\n while (sizers.length < count) {\n sizers.push(new BoxSizer());\n }\n // Remove the extra sizers.\n if (sizers.length > count) {\n sizers.length = count;\n }\n }\n Private.reallocSizers = reallocSizers;\n /**\n * Distribute a min size constraint across a range of sizers.\n */\n function distributeMin(sizers, i1, i2, minSize) {\n // Sanity check the indices.\n if (i2 < i1) {\n return;\n }\n // Handle the simple case of no cell span.\n if (i1 === i2) {\n let sizer = sizers[i1];\n sizer.minSize = Math.max(sizer.minSize, minSize);\n return;\n }\n // Compute the total current min size of the span.\n let totalMin = 0;\n for (let i = i1; i <= i2; ++i) {\n totalMin += sizers[i].minSize;\n }\n // Do nothing if the total is greater than the required.\n if (totalMin >= minSize) {\n return;\n }\n // Compute the portion of the space to allocate to each sizer.\n let portion = (minSize - totalMin) / (i2 - i1 + 1);\n // Add the portion to each sizer.\n for (let i = i1; i <= i2; ++i) {\n sizers[i].minSize += portion;\n }\n }\n Private.distributeMin = distributeMin;\n /**\n * The change handler for the child cell config property.\n */\n function onChildCellConfigChanged(child) {\n if (child.parent && child.parent.layout instanceof GridLayout) {\n child.parent.fit();\n }\n }\n})(Private$4 || (Private$4 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays menus as a canonical menu bar.\n */\nclass MenuBar extends Widget {\n /**\n * Construct a new menu bar.\n *\n * @param options - The options for initializing the menu bar.\n */\n constructor(options = {}) {\n super({ node: Private$3.createNode() });\n // Track the index of the item that is currently focused or hovered. -1 means nothing focused or hovered.\n this._activeIndex = -1;\n // Track which item can be focused using the TAB key. Unlike _activeIndex will\n // always point to a menuitem. Whenever you update this value, it's important\n // to follow it with an \"update-request\" message so that the `tabindex`\n // attribute on each menubar item gets properly updated.\n this._tabFocusIndex = 0;\n this._menus = [];\n this._childMenu = null;\n this._overflowMenu = null;\n this._menuItemSizes = [];\n this._overflowIndex = -1;\n this.addClass('lm-MenuBar');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.renderer = options.renderer || MenuBar.defaultRenderer;\n this._forceItemsPosition = options.forceItemsPosition || {\n forceX: true,\n forceY: true\n };\n this._overflowMenuOptions = options.overflowMenuOptions || {\n isVisible: true\n };\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._closeChildMenu();\n this._menus.length = 0;\n super.dispose();\n }\n /**\n * The child menu of the menu bar.\n *\n * #### Notes\n * This will be `null` if the menu bar does not have an open menu.\n */\n get childMenu() {\n return this._childMenu;\n }\n /**\n * The overflow index of the menu bar.\n */\n get overflowIndex() {\n return this._overflowIndex;\n }\n /**\n * The overflow menu of the menu bar.\n */\n get overflowMenu() {\n return this._overflowMenu;\n }\n /**\n * Get the menu bar content node.\n *\n * #### Notes\n * This is the node which holds the menu title nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-MenuBar-content')[0];\n }\n /**\n * Get the currently active menu.\n */\n get activeMenu() {\n return this._menus[this._activeIndex] || null;\n }\n /**\n * Set the currently active menu.\n *\n * #### Notes\n * If the menu does not exist, the menu will be set to `null`.\n */\n set activeMenu(value) {\n this.activeIndex = value ? this._menus.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently active menu.\n *\n * #### Notes\n * This will be `-1` if no menu is active.\n */\n get activeIndex() {\n return this._activeIndex;\n }\n /**\n * Set the index of the currently active menu.\n *\n * #### Notes\n * If the menu cannot be activated, the index will be set to `-1`.\n */\n set activeIndex(value) {\n // Adjust the value for an out of range index.\n if (value < 0 || value >= this._menus.length) {\n value = -1;\n }\n // An empty menu cannot be active\n if (value > -1 && this._menus[value].items.length === 0) {\n value = -1;\n }\n // Bail early if the index will not change.\n if (this._activeIndex === value) {\n return;\n }\n // Update the active index.\n this._activeIndex = value;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * A read-only array of the menus in the menu bar.\n */\n get menus() {\n return this._menus;\n }\n /**\n * Open the active menu and activate its first menu item.\n *\n * #### Notes\n * If there is no active menu, this is a no-op.\n */\n openActiveMenu() {\n // Bail early if there is no active item.\n if (this._activeIndex === -1) {\n return;\n }\n // Open the child menu.\n this._openChildMenu();\n // Activate the first item in the child menu.\n if (this._childMenu) {\n this._childMenu.activeIndex = -1;\n this._childMenu.activateNextItem();\n }\n }\n /**\n * Add a menu to the end of the menu bar.\n *\n * @param menu - The menu to add to the menu bar.\n *\n * #### Notes\n * If the menu is already added to the menu bar, it will be moved.\n */\n addMenu(menu, update = true) {\n this.insertMenu(this._menus.length, menu, update);\n }\n /**\n * Insert a menu into the menu bar at the specified index.\n *\n * @param index - The index at which to insert the menu.\n *\n * @param menu - The menu to insert into the menu bar.\n *\n * #### Notes\n * The index will be clamped to the bounds of the menus.\n *\n * If the menu is already added to the menu bar, it will be moved.\n */\n insertMenu(index, menu, update = true) {\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Look up the index of the menu.\n let i = this._menus.indexOf(menu);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._menus.length));\n // If the menu is not in the array, insert it.\n if (i === -1) {\n // Insert the menu into the array.\n ArrayExt.insert(this._menus, j, menu);\n // Add the styling class to the menu.\n menu.addClass('lm-MenuBar-menu');\n // Connect to the menu signals.\n menu.aboutToClose.connect(this._onMenuAboutToClose, this);\n menu.menuRequested.connect(this._onMenuMenuRequested, this);\n menu.title.changed.connect(this._onTitleChanged, this);\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n // There is nothing more to do.\n return;\n }\n // Otherwise, the menu exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._menus.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return;\n }\n // Move the menu to the new locations.\n ArrayExt.move(this._menus, i, j);\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n }\n /**\n * Remove a menu from the menu bar.\n *\n * @param menu - The menu to remove from the menu bar.\n *\n * #### Notes\n * This is a no-op if the menu is not in the menu bar.\n */\n removeMenu(menu, update = true) {\n this.removeMenuAt(this._menus.indexOf(menu), update);\n }\n /**\n * Remove the menu at a given index from the menu bar.\n *\n * @param index - The index of the menu to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeMenuAt(index, update = true) {\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Remove the menu from the array.\n let menu = ArrayExt.removeAt(this._menus, index);\n // Bail if the index is out of range.\n if (!menu) {\n return;\n }\n // Disconnect from the menu signals.\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n menu.title.changed.disconnect(this._onTitleChanged, this);\n // Remove the styling class from the menu.\n menu.removeClass('lm-MenuBar-menu');\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n }\n /**\n * Remove all menus from the menu bar.\n */\n clearMenus() {\n // Bail if there is nothing to remove.\n if (this._menus.length === 0) {\n return;\n }\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Disconnect from the menu signals and remove the styling class.\n for (let menu of this._menus) {\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n menu.title.changed.disconnect(this._onTitleChanged, this);\n menu.removeClass('lm-MenuBar-menu');\n }\n // Clear the menus array.\n this._menus.length = 0;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Handle the DOM events for the menu bar.\n *\n * @param event - The DOM event sent to the menu bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the menu bar's DOM nodes. It\n * should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'focusout':\n this._evtFocusOut(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('mousedown', this);\n this.node.addEventListener('mousemove', this);\n this.node.addEventListener('focusout', this);\n this.node.addEventListener('contextmenu', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('mousedown', this);\n this.node.removeEventListener('mousemove', this);\n this.node.removeEventListener('focusout', this);\n this.node.removeEventListener('contextmenu', this);\n this._closeChildMenu();\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n this._focusItemAt(0);\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n this.update();\n super.onResize(msg);\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n var _a;\n let menus = this._menus;\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let tabFocusIndex = this._tabFocusIndex >= 0 && this._tabFocusIndex < menus.length\n ? this._tabFocusIndex\n : 0;\n let length = this._overflowIndex > -1 ? this._overflowIndex : menus.length;\n let totalMenuSize = 0;\n let isVisible = false;\n // Check that the overflow menu doesn't count\n length = this._overflowMenu !== null ? length - 1 : length;\n let content = new Array(length);\n // Render visible menus\n for (let i = 0; i < length; ++i) {\n content[i] = renderer.renderItem({\n title: menus[i].title,\n active: i === activeIndex,\n tabbable: i === tabFocusIndex,\n disabled: menus[i].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = i;\n this.activeIndex = i;\n }\n });\n // Calculate size of current menu\n totalMenuSize += this._menuItemSizes[i];\n // Check if overflow menu is already rendered\n if (menus[i].title.label === this._overflowMenuOptions.title) {\n isVisible = true;\n length--;\n }\n }\n // Render overflow menu if needed and active\n if (this._overflowMenuOptions.isVisible) {\n if (this._overflowIndex > -1 && !isVisible) {\n // Create overflow menu\n if (this._overflowMenu === null) {\n const overflowMenuTitle = (_a = this._overflowMenuOptions.title) !== null && _a !== void 0 ? _a : '...';\n this._overflowMenu = new Menu({ commands: new CommandRegistry() });\n this._overflowMenu.title.label = overflowMenuTitle;\n this._overflowMenu.title.mnemonic = 0;\n this.addMenu(this._overflowMenu, false);\n }\n // Move menus to overflow menu\n for (let i = menus.length - 2; i >= length; i--) {\n const submenu = this.menus[i];\n submenu.title.mnemonic = 0;\n this._overflowMenu.insertItem(0, {\n type: 'submenu',\n submenu: submenu\n });\n this.removeMenu(submenu, false);\n }\n content[length] = renderer.renderItem({\n title: this._overflowMenu.title,\n active: length === activeIndex && menus[length].items.length !== 0,\n tabbable: length === tabFocusIndex,\n disabled: menus[length].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = length;\n this.activeIndex = length;\n }\n });\n length++;\n }\n else if (this._overflowMenu !== null) {\n // Remove submenus from overflow menu\n let overflowMenuItems = this._overflowMenu.items;\n let screenSize = this.node.offsetWidth;\n let n = this._overflowMenu.items.length;\n for (let i = 0; i < n; ++i) {\n let index = menus.length - 1 - i;\n if (screenSize - totalMenuSize > this._menuItemSizes[index]) {\n let menu = overflowMenuItems[0].submenu;\n this._overflowMenu.removeItemAt(0);\n this.insertMenu(length, menu, false);\n content[length] = renderer.renderItem({\n title: menu.title,\n active: false,\n tabbable: length === tabFocusIndex,\n disabled: menus[length].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = length;\n this.activeIndex = length;\n }\n });\n length++;\n }\n }\n if (this._overflowMenu.items.length === 0) {\n this.removeMenu(this._overflowMenu, false);\n content.pop();\n this._overflowMenu = null;\n this._overflowIndex = -1;\n }\n }\n }\n VirtualDOM.render(content, this.contentNode);\n this._updateOverflowIndex();\n }\n /**\n * Calculate and update the current overflow index.\n */\n _updateOverflowIndex() {\n if (!this._overflowMenuOptions.isVisible) {\n return;\n }\n // Get elements visible in the main menu bar\n const itemMenus = this.contentNode.childNodes;\n let screenSize = this.node.offsetWidth;\n let totalMenuSize = 0;\n let index = -1;\n let n = itemMenus.length;\n if (this._menuItemSizes.length == 0) {\n // Check if it is the first resize and get info about menu items sizes\n for (let i = 0; i < n; i++) {\n let item = itemMenus[i];\n // Add sizes to array\n totalMenuSize += item.offsetWidth;\n this._menuItemSizes.push(item.offsetWidth);\n if (totalMenuSize > screenSize && index === -1) {\n index = i;\n }\n }\n }\n else {\n // Calculate current menu size\n for (let i = 0; i < this._menuItemSizes.length; i++) {\n totalMenuSize += this._menuItemSizes[i];\n if (totalMenuSize > screenSize) {\n index = i;\n break;\n }\n }\n }\n this._overflowIndex = index;\n }\n /**\n * Handle the `'keydown'` event for the menu bar.\n *\n * #### Notes\n * All keys are trapped except the tab key that is ignored.\n */\n _evtKeyDown(event) {\n // Fetch the key code for the event.\n let kc = event.keyCode;\n // Reset the active index on tab, but do not trap the tab key.\n if (kc === 9) {\n this.activeIndex = -1;\n return;\n }\n // A menu bar handles all other keydown events.\n event.preventDefault();\n event.stopPropagation();\n // Enter, Space, Up Arrow, Down Arrow\n if (kc === 13 || kc === 32 || kc === 38 || kc === 40) {\n // The active index may have changed (for example, user hovers over an\n // item with the mouse), so be sure to use the focus index.\n this.activeIndex = this._tabFocusIndex;\n if (this.activeIndex !== this._tabFocusIndex) {\n // Bail if the setter refused to set activeIndex to tabFocusIndex\n // because it means that the item at tabFocusIndex cannot be opened (for\n // example, it has an empty menu)\n return;\n }\n this.openActiveMenu();\n return;\n }\n // Escape\n if (kc === 27) {\n this._closeChildMenu();\n this._focusItemAt(this.activeIndex);\n return;\n }\n // Left or Right Arrow\n if (kc === 37 || kc === 39) {\n let direction = kc === 37 ? -1 : 1;\n let start = this._tabFocusIndex + direction;\n let n = this._menus.length;\n for (let i = 0; i < n; i++) {\n let index = (n + start + direction * i) % n;\n if (this._menus[index].items.length) {\n this._focusItemAt(index);\n return;\n }\n }\n return;\n }\n // Get the pressed key character.\n let key = getKeyboardLayout().keyForKeydownEvent(event);\n // Bail if the key is not valid.\n if (!key) {\n return;\n }\n // Search for the next best matching mnemonic item.\n let start = this._activeIndex + 1;\n let result = Private$3.findMnemonic(this._menus, key, start);\n // Handle the requested mnemonic based on the search results.\n // If exactly one mnemonic is matched, that menu is opened.\n // Otherwise, the next mnemonic is activated if available,\n // followed by the auto mnemonic if available.\n if (result.index !== -1 && !result.multiple) {\n this.activeIndex = result.index;\n this.openActiveMenu();\n }\n else if (result.index !== -1) {\n this.activeIndex = result.index;\n this._focusItemAt(this.activeIndex);\n }\n else if (result.auto !== -1) {\n this.activeIndex = result.auto;\n this._focusItemAt(this.activeIndex);\n }\n }\n /**\n * Handle the `'mousedown'` event for the menu bar.\n */\n _evtMouseDown(event) {\n // Bail if the mouse press was not on the menu bar. This can occur\n // when the document listener is installed for an active menu bar.\n if (!ElementExt.hitTest(this.node, event.clientX, event.clientY)) {\n return;\n }\n // Stop the propagation of the event. Immediate propagation is\n // also stopped so that an open menu does not handle the event.\n event.stopPropagation();\n event.stopImmediatePropagation();\n // Check if the mouse is over one of the menu items.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // If the press was not on an item, close the child menu.\n if (index === -1) {\n this._closeChildMenu();\n return;\n }\n // If the press was not the left mouse button, do nothing further.\n if (event.button !== 0) {\n return;\n }\n // Otherwise, toggle the open state of the child menu.\n if (this._childMenu) {\n this._closeChildMenu();\n this.activeIndex = index;\n }\n else {\n // If we don't call preventDefault() here, then the item in the menu\n // bar will take focus over the menu that is being opened.\n event.preventDefault();\n const position = this._positionForMenu(index);\n Menu.saveWindowData();\n // Begin DOM modifications.\n this.activeIndex = index;\n this._openChildMenu(position);\n }\n }\n /**\n * Handle the `'mousemove'` event for the menu bar.\n */\n _evtMouseMove(event) {\n // Check if the mouse is over one of the menu items.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // Bail early if the active index will not change.\n if (index === this._activeIndex) {\n return;\n }\n // Bail early if a child menu is open and the mouse is not over\n // an item. This allows the child menu to be kept open when the\n // mouse is over the empty part of the menu bar.\n if (index === -1 && this._childMenu) {\n return;\n }\n // Get position for the new menu >before< updating active index.\n const position = index >= 0 && this._childMenu ? this._positionForMenu(index) : null;\n // Before any modification, update window data.\n Menu.saveWindowData();\n // Begin DOM modifications.\n // Update the active index to the hovered item.\n this.activeIndex = index;\n // Open the new menu if a menu is already open.\n if (position) {\n this._openChildMenu(position);\n }\n }\n /**\n * Find initial position for the menu based on menubar item position.\n *\n * NOTE: this should be called before updating active index to avoid\n * an additional layout and style invalidation as changing active\n * index modifies DOM.\n */\n _positionForMenu(index) {\n let itemNode = this.contentNode.children[index];\n let { left, bottom } = itemNode.getBoundingClientRect();\n return {\n top: bottom,\n left\n };\n }\n /**\n * Handle the `'focusout'` event for the menu bar.\n */\n _evtFocusOut(event) {\n // Reset the active index if there is no open menu and the menubar is losing focus.\n if (!this._childMenu && !this.node.contains(event.relatedTarget)) {\n this.activeIndex = -1;\n }\n }\n /**\n * Focus an item in the menu bar.\n *\n * #### Notes\n * Does not open the associated menu.\n */\n _focusItemAt(index) {\n const itemNode = this.contentNode.childNodes[index];\n if (itemNode) {\n itemNode.focus();\n }\n }\n /**\n * Open the child menu at the active index immediately.\n *\n * If a different child menu is already open, it will be closed,\n * even if there is no active menu.\n */\n _openChildMenu(options = {}) {\n // If there is no active menu, close the current menu.\n let newMenu = this.activeMenu;\n if (!newMenu) {\n this._closeChildMenu();\n return;\n }\n // Bail if there is no effective menu change.\n let oldMenu = this._childMenu;\n if (oldMenu === newMenu) {\n return;\n }\n // Swap the internal menu reference.\n this._childMenu = newMenu;\n // Close the current menu, or setup for the new menu.\n if (oldMenu) {\n oldMenu.close();\n }\n else {\n document.addEventListener('mousedown', this, true);\n }\n // Update the tab focus index and ensure the menu bar is updated.\n this._tabFocusIndex = this.activeIndex;\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n // Get the positioning data for the new menu.\n let { left, top } = options;\n if (typeof left === 'undefined' || typeof top === 'undefined') {\n ({ left, top } = this._positionForMenu(this._activeIndex));\n }\n // Begin DOM modifications\n if (!oldMenu) {\n // Continue setup for new menu\n this.addClass('lm-mod-active');\n }\n // Open the new menu at the computed location.\n if (newMenu.items.length > 0) {\n newMenu.open(left, top, this._forceItemsPosition);\n }\n }\n /**\n * Close the child menu immediately.\n *\n * This is a no-op if a child menu is not open.\n */\n _closeChildMenu() {\n // Bail if no child menu is open.\n if (!this._childMenu) {\n return;\n }\n // Remove the active class from the menu bar.\n this.removeClass('lm-mod-active');\n // Remove the document listeners.\n document.removeEventListener('mousedown', this, true);\n // Clear the internal menu reference.\n let menu = this._childMenu;\n this._childMenu = null;\n // Close the menu.\n menu.close();\n // Reset the active index.\n this.activeIndex = -1;\n }\n /**\n * Handle the `aboutToClose` signal of a menu.\n */\n _onMenuAboutToClose(sender) {\n // Bail if the sender is not the child menu.\n if (sender !== this._childMenu) {\n return;\n }\n // Remove the active class from the menu bar.\n this.removeClass('lm-mod-active');\n // Remove the document listeners.\n document.removeEventListener('mousedown', this, true);\n // Clear the internal menu reference.\n this._childMenu = null;\n // Reset the active index.\n this.activeIndex = -1;\n }\n /**\n * Handle the `menuRequested` signal of a child menu.\n */\n _onMenuMenuRequested(sender, args) {\n // Bail if the sender is not the child menu.\n if (sender !== this._childMenu) {\n return;\n }\n // Look up the active index and menu count.\n let i = this._activeIndex;\n let n = this._menus.length;\n // Active the next requested index.\n switch (args) {\n case 'next':\n this.activeIndex = i === n - 1 ? 0 : i + 1;\n break;\n case 'previous':\n this.activeIndex = i === 0 ? n - 1 : i - 1;\n break;\n }\n // Open the active menu.\n this.openActiveMenu();\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged() {\n this.update();\n }\n}\n/**\n * The namespace for the `MenuBar` class statics.\n */\n(function (MenuBar) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n /**\n * Render the virtual element for a menu bar item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n let aria = this.createItemARIA(data);\n return h.li({\n className,\n dataset,\n ...(data.disabled ? {} : { tabindex: data.tabbable ? '0' : '-1' }),\n onfocus: data.onfocus,\n ...aria\n }, this.renderIcon(data), this.renderLabel(data));\n }\n /**\n * Render the icon element for a menu bar item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the item icon.\n */\n renderIcon(data) {\n let className = this.createIconClass(data);\n // If data.title.icon is undefined, it will be ignored.\n return h.div({ className }, data.title.icon, data.title.iconLabel);\n }\n /**\n * Render the label element for a menu item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the item label.\n */\n renderLabel(data) {\n let content = this.formatLabel(data);\n return h.div({ className: 'lm-MenuBar-itemLabel' }, content);\n }\n /**\n * Create the class name for the menu bar item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the menu item.\n */\n createItemClass(data) {\n let name = 'lm-MenuBar-item';\n if (data.title.className) {\n name += ` ${data.title.className}`;\n }\n if (data.active && !data.disabled) {\n name += ' lm-mod-active';\n }\n return name;\n }\n /**\n * Create the dataset for a menu bar item.\n *\n * @param data - The data to use for the item.\n *\n * @returns The dataset for the menu bar item.\n */\n createItemDataset(data) {\n return data.title.dataset;\n }\n /**\n * Create the aria attributes for menu bar item.\n *\n * @param data - The data to use for the aria attributes.\n *\n * @returns The aria attributes object for the item.\n */\n createItemARIA(data) {\n return {\n role: 'menuitem',\n 'aria-haspopup': 'true',\n 'aria-disabled': data.disabled ? 'true' : 'false'\n };\n }\n /**\n * Create the class name for the menu bar item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-MenuBar-itemIcon';\n let extra = data.title.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the render content for the label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatLabel(data) {\n // Fetch the label text and mnemonic index.\n let { label, mnemonic } = data.title;\n // If the index is out of range, do not modify the label.\n if (mnemonic < 0 || mnemonic >= label.length) {\n return label;\n }\n // Split the label into parts.\n let prefix = label.slice(0, mnemonic);\n let suffix = label.slice(mnemonic + 1);\n let char = label[mnemonic];\n // Wrap the mnemonic character in a span.\n let span = h.span({ className: 'lm-MenuBar-itemMnemonic' }, char);\n // Return the content parts.\n return [prefix, span, suffix];\n }\n }\n MenuBar.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n MenuBar.defaultRenderer = new Renderer();\n})(MenuBar || (MenuBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$3;\n(function (Private) {\n /**\n * Create the DOM node for a menu bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.className = 'lm-MenuBar-content';\n node.appendChild(content);\n content.setAttribute('role', 'menubar');\n return node;\n }\n Private.createNode = createNode;\n /**\n * Find the best matching mnemonic item.\n *\n * The search starts at the given index and wraps around.\n */\n function findMnemonic(menus, key, start) {\n // Setup the result variables.\n let index = -1;\n let auto = -1;\n let multiple = false;\n // Normalize the key to upper case.\n let upperKey = key.toUpperCase();\n // Search the items from the given start index.\n for (let i = 0, n = menus.length; i < n; ++i) {\n // Compute the wrapped index.\n let k = (i + start) % n;\n // Look up the menu title.\n let title = menus[k].title;\n // Ignore titles with an empty label.\n if (title.label.length === 0) {\n continue;\n }\n // Look up the mnemonic index for the label.\n let mn = title.mnemonic;\n // Handle a valid mnemonic index.\n if (mn >= 0 && mn < title.label.length) {\n if (title.label[mn].toUpperCase() === upperKey) {\n if (index === -1) {\n index = k;\n }\n else {\n multiple = true;\n }\n }\n continue;\n }\n // Finally, handle the auto index if possible.\n if (auto === -1 && title.label[0].toUpperCase() === upperKey) {\n auto = k;\n }\n }\n // Return the search results.\n return { index, multiple, auto };\n }\n Private.findMnemonic = findMnemonic;\n})(Private$3 || (Private$3 = {}));\n\n/**\n * A widget which implements a canonical scroll bar.\n */\nclass ScrollBar extends Widget {\n /**\n * Construct a new scroll bar.\n *\n * @param options - The options for initializing the scroll bar.\n */\n constructor(options = {}) {\n super({ node: Private$2.createNode() });\n /**\n * A timeout callback for repeating the mouse press.\n */\n this._onRepeat = () => {\n // Clear the repeat timer id.\n this._repeatTimer = -1;\n // Bail if the mouse has been released.\n if (!this._pressData) {\n return;\n }\n // Look up the part that was pressed.\n let part = this._pressData.part;\n // Bail if the thumb was pressed.\n if (part === 'thumb') {\n return;\n }\n // Schedule the timer for another repeat.\n this._repeatTimer = window.setTimeout(this._onRepeat, 20);\n // Get the current mouse position.\n let mouseX = this._pressData.mouseX;\n let mouseY = this._pressData.mouseY;\n // Handle a decrement button repeat.\n if (part === 'decrement') {\n // Bail if the mouse is not over the button.\n if (!ElementExt.hitTest(this.decrementNode, mouseX, mouseY)) {\n return;\n }\n // Emit the step requested signal.\n this._stepRequested.emit('decrement');\n // Finished.\n return;\n }\n // Handle an increment button repeat.\n if (part === 'increment') {\n // Bail if the mouse is not over the button.\n if (!ElementExt.hitTest(this.incrementNode, mouseX, mouseY)) {\n return;\n }\n // Emit the step requested signal.\n this._stepRequested.emit('increment');\n // Finished.\n return;\n }\n // Handle a track repeat.\n if (part === 'track') {\n // Bail if the mouse is not over the track.\n if (!ElementExt.hitTest(this.trackNode, mouseX, mouseY)) {\n return;\n }\n // Fetch the thumb node.\n let thumbNode = this.thumbNode;\n // Bail if the mouse is over the thumb.\n if (ElementExt.hitTest(thumbNode, mouseX, mouseY)) {\n return;\n }\n // Fetch the client rect for the thumb.\n let thumbRect = thumbNode.getBoundingClientRect();\n // Determine the direction for the page request.\n let dir;\n if (this._orientation === 'horizontal') {\n dir = mouseX < thumbRect.left ? 'decrement' : 'increment';\n }\n else {\n dir = mouseY < thumbRect.top ? 'decrement' : 'increment';\n }\n // Emit the page requested signal.\n this._pageRequested.emit(dir);\n // Finished.\n return;\n }\n };\n this._value = 0;\n this._page = 10;\n this._maximum = 100;\n this._repeatTimer = -1;\n this._pressData = null;\n this._thumbMoved = new Signal(this);\n this._stepRequested = new Signal(this);\n this._pageRequested = new Signal(this);\n this.addClass('lm-ScrollBar');\n this.setFlag(Widget.Flag.DisallowLayout);\n // Set the orientation.\n this._orientation = options.orientation || 'vertical';\n this.dataset['orientation'] = this._orientation;\n // Parse the rest of the options.\n if (options.maximum !== undefined) {\n this._maximum = Math.max(0, options.maximum);\n }\n if (options.page !== undefined) {\n this._page = Math.max(0, options.page);\n }\n if (options.value !== undefined) {\n this._value = Math.max(0, Math.min(options.value, this._maximum));\n }\n }\n /**\n * A signal emitted when the user moves the scroll thumb.\n *\n * #### Notes\n * The payload is the current value of the scroll bar.\n */\n get thumbMoved() {\n return this._thumbMoved;\n }\n /**\n * A signal emitted when the user clicks a step button.\n *\n * #### Notes\n * The payload is whether a decrease or increase is requested.\n */\n get stepRequested() {\n return this._stepRequested;\n }\n /**\n * A signal emitted when the user clicks the scroll track.\n *\n * #### Notes\n * The payload is whether a decrease or increase is requested.\n */\n get pageRequested() {\n return this._pageRequested;\n }\n /**\n * Get the orientation of the scroll bar.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the orientation of the scroll bar.\n */\n set orientation(value) {\n // Do nothing if the orientation does not change.\n if (this._orientation === value) {\n return;\n }\n // Release the mouse before making changes.\n this._releaseMouse();\n // Update the internal orientation.\n this._orientation = value;\n this.dataset['orientation'] = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the current value of the scroll bar.\n */\n get value() {\n return this._value;\n }\n /**\n * Set the current value of the scroll bar.\n *\n * #### Notes\n * The value will be clamped to the range `[0, maximum]`.\n */\n set value(value) {\n // Clamp the value to the allowable range.\n value = Math.max(0, Math.min(value, this._maximum));\n // Do nothing if the value does not change.\n if (this._value === value) {\n return;\n }\n // Update the internal value.\n this._value = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the page size of the scroll bar.\n *\n * #### Notes\n * The page size is the amount of visible content in the scrolled\n * region, expressed in data units. It determines the size of the\n * scroll bar thumb.\n */\n get page() {\n return this._page;\n }\n /**\n * Set the page size of the scroll bar.\n *\n * #### Notes\n * The page size will be clamped to the range `[0, Infinity]`.\n */\n set page(value) {\n // Clamp the page size to the allowable range.\n value = Math.max(0, value);\n // Do nothing if the value does not change.\n if (this._page === value) {\n return;\n }\n // Update the internal page size.\n this._page = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the maximum value of the scroll bar.\n */\n get maximum() {\n return this._maximum;\n }\n /**\n * Set the maximum value of the scroll bar.\n *\n * #### Notes\n * The max size will be clamped to the range `[0, Infinity]`.\n */\n set maximum(value) {\n // Clamp the value to the allowable range.\n value = Math.max(0, value);\n // Do nothing if the value does not change.\n if (this._maximum === value) {\n return;\n }\n // Update the internal values.\n this._maximum = value;\n // Clamp the current value to the new range.\n this._value = Math.min(this._value, value);\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * The scroll bar decrement button node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get decrementNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-button')[0];\n }\n /**\n * The scroll bar increment button node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get incrementNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-button')[1];\n }\n /**\n * The scroll bar track node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get trackNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-track')[0];\n }\n /**\n * The scroll bar thumb node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get thumbNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-thumb')[0];\n }\n /**\n * Handle the DOM events for the scroll bar.\n *\n * @param event - The DOM event sent to the scroll bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the scroll bar's DOM node.\n *\n * This should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'mouseup':\n this._evtMouseUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A method invoked on a 'before-attach' message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('mousedown', this);\n this.update();\n }\n /**\n * A method invoked on an 'after-detach' message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('mousedown', this);\n this._releaseMouse();\n }\n /**\n * A method invoked on an 'update-request' message.\n */\n onUpdateRequest(msg) {\n // Convert the value and page into percentages.\n let value = (this._value * 100) / this._maximum;\n let page = (this._page * 100) / (this._page + this._maximum);\n // Clamp the value and page to the relevant range.\n value = Math.max(0, Math.min(value, 100));\n page = Math.max(0, Math.min(page, 100));\n // Fetch the thumb style.\n let thumbStyle = this.thumbNode.style;\n // Update the thumb style for the current orientation.\n if (this._orientation === 'horizontal') {\n thumbStyle.top = '';\n thumbStyle.height = '';\n thumbStyle.left = `${value}%`;\n thumbStyle.width = `${page}%`;\n thumbStyle.transform = `translate(${-value}%, 0%)`;\n }\n else {\n thumbStyle.left = '';\n thumbStyle.width = '';\n thumbStyle.top = `${value}%`;\n thumbStyle.height = `${page}%`;\n thumbStyle.transform = `translate(0%, ${-value}%)`;\n }\n }\n /**\n * Handle the `'keydown'` event for the scroll bar.\n */\n _evtKeyDown(event) {\n // Stop all input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Ignore anything except the `Escape` key.\n if (event.keyCode !== 27) {\n return;\n }\n // Fetch the previous scroll value.\n let value = this._pressData ? this._pressData.value : -1;\n // Release the mouse.\n this._releaseMouse();\n // Restore the old scroll value if possible.\n if (value !== -1) {\n this._moveThumb(value);\n }\n }\n /**\n * Handle the `'mousedown'` event for the scroll bar.\n */\n _evtMouseDown(event) {\n // Do nothing if it's not a left mouse press.\n if (event.button !== 0) {\n return;\n }\n // Send an activate request to the scroll bar. This can be\n // used by message hooks to activate something relevant.\n this.activate();\n // Do nothing if the mouse is already captured.\n if (this._pressData) {\n return;\n }\n // Find the pressed scroll bar part.\n let part = Private$2.findPart(this, event.target);\n // Do nothing if the part is not of interest.\n if (!part) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Override the mouse cursor.\n let override = Drag.overrideCursor('default');\n // Set up the press data.\n this._pressData = {\n part,\n override,\n delta: -1,\n value: -1,\n mouseX: event.clientX,\n mouseY: event.clientY\n };\n // Add the extra event listeners.\n document.addEventListener('mousemove', this, true);\n document.addEventListener('mouseup', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('contextmenu', this, true);\n // Handle a thumb press.\n if (part === 'thumb') {\n // Fetch the thumb node.\n let thumbNode = this.thumbNode;\n // Fetch the client rect for the thumb.\n let thumbRect = thumbNode.getBoundingClientRect();\n // Update the press data delta for the current orientation.\n if (this._orientation === 'horizontal') {\n this._pressData.delta = event.clientX - thumbRect.left;\n }\n else {\n this._pressData.delta = event.clientY - thumbRect.top;\n }\n // Add the active class to the thumb node.\n thumbNode.classList.add('lm-mod-active');\n // Store the current value in the press data.\n this._pressData.value = this._value;\n // Finished.\n return;\n }\n // Handle a track press.\n if (part === 'track') {\n // Fetch the client rect for the thumb.\n let thumbRect = this.thumbNode.getBoundingClientRect();\n // Determine the direction for the page request.\n let dir;\n if (this._orientation === 'horizontal') {\n dir = event.clientX < thumbRect.left ? 'decrement' : 'increment';\n }\n else {\n dir = event.clientY < thumbRect.top ? 'decrement' : 'increment';\n }\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the page requested signal.\n this._pageRequested.emit(dir);\n // Finished.\n return;\n }\n // Handle a decrement button press.\n if (part === 'decrement') {\n // Add the active class to the decrement node.\n this.decrementNode.classList.add('lm-mod-active');\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the step requested signal.\n this._stepRequested.emit('decrement');\n // Finished.\n return;\n }\n // Handle an increment button press.\n if (part === 'increment') {\n // Add the active class to the increment node.\n this.incrementNode.classList.add('lm-mod-active');\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the step requested signal.\n this._stepRequested.emit('increment');\n // Finished.\n return;\n }\n }\n /**\n * Handle the `'mousemove'` event for the scroll bar.\n */\n _evtMouseMove(event) {\n // Do nothing if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Update the mouse position.\n this._pressData.mouseX = event.clientX;\n this._pressData.mouseY = event.clientY;\n // Bail if the thumb is not being dragged.\n if (this._pressData.part !== 'thumb') {\n return;\n }\n // Get the client rect for the thumb and track.\n let thumbRect = this.thumbNode.getBoundingClientRect();\n let trackRect = this.trackNode.getBoundingClientRect();\n // Fetch the scroll geometry based on the orientation.\n let trackPos;\n let trackSpan;\n if (this._orientation === 'horizontal') {\n trackPos = event.clientX - trackRect.left - this._pressData.delta;\n trackSpan = trackRect.width - thumbRect.width;\n }\n else {\n trackPos = event.clientY - trackRect.top - this._pressData.delta;\n trackSpan = trackRect.height - thumbRect.height;\n }\n // Compute the desired value from the scroll geometry.\n let value = trackSpan === 0 ? 0 : (trackPos * this._maximum) / trackSpan;\n // Move the thumb to the computed value.\n this._moveThumb(value);\n }\n /**\n * Handle the `'mouseup'` event for the scroll bar.\n */\n _evtMouseUp(event) {\n // Do nothing if it's not a left mouse release.\n if (event.button !== 0) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse.\n this._releaseMouse();\n }\n /**\n * Release the mouse and restore the node states.\n */\n _releaseMouse() {\n // Bail if there is no press data.\n if (!this._pressData) {\n return;\n }\n // Clear the repeat timer.\n clearTimeout(this._repeatTimer);\n this._repeatTimer = -1;\n // Clear the press data.\n this._pressData.override.dispose();\n this._pressData = null;\n // Remove the extra event listeners.\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('contextmenu', this, true);\n // Remove the active classes from the nodes.\n this.thumbNode.classList.remove('lm-mod-active');\n this.decrementNode.classList.remove('lm-mod-active');\n this.incrementNode.classList.remove('lm-mod-active');\n }\n /**\n * Move the thumb to the specified position.\n */\n _moveThumb(value) {\n // Clamp the value to the allowed range.\n value = Math.max(0, Math.min(value, this._maximum));\n // Bail if the value does not change.\n if (this._value === value) {\n return;\n }\n // Update the internal value.\n this._value = value;\n // Schedule an update of the scroll bar.\n this.update();\n // Emit the thumb moved signal.\n this._thumbMoved.emit(value);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$2;\n(function (Private) {\n /**\n * Create the DOM node for a scroll bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let decrement = document.createElement('div');\n let increment = document.createElement('div');\n let track = document.createElement('div');\n let thumb = document.createElement('div');\n decrement.className = 'lm-ScrollBar-button';\n increment.className = 'lm-ScrollBar-button';\n decrement.dataset['action'] = 'decrement';\n increment.dataset['action'] = 'increment';\n track.className = 'lm-ScrollBar-track';\n thumb.className = 'lm-ScrollBar-thumb';\n track.appendChild(thumb);\n node.appendChild(decrement);\n node.appendChild(track);\n node.appendChild(increment);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Find the scroll bar part which contains the given target.\n */\n function findPart(scrollBar, target) {\n // Test the thumb.\n if (scrollBar.thumbNode.contains(target)) {\n return 'thumb';\n }\n // Test the track.\n if (scrollBar.trackNode.contains(target)) {\n return 'track';\n }\n // Test the decrement button.\n if (scrollBar.decrementNode.contains(target)) {\n return 'decrement';\n }\n // Test the increment button.\n if (scrollBar.incrementNode.contains(target)) {\n return 'increment';\n }\n // Indicate no match.\n return null;\n }\n Private.findPart = findPart;\n})(Private$2 || (Private$2 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation which holds a single widget.\n *\n * #### Notes\n * This class is useful for creating simple container widgets which\n * hold a single child. The child should be positioned with CSS.\n */\nclass SingletonLayout extends Layout {\n constructor() {\n super(...arguments);\n this._widget = null;\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n if (this._widget) {\n let widget = this._widget;\n this._widget = null;\n widget.dispose();\n }\n super.dispose();\n }\n /**\n * Get the child widget for the layout.\n */\n get widget() {\n return this._widget;\n }\n /**\n * Set the child widget for the layout.\n *\n * #### Notes\n * Setting the child widget will cause the old child widget to be\n * automatically disposed. If that is not desired, set the parent\n * of the old child to `null` before assigning a new child.\n */\n set widget(widget) {\n // Remove the widget from its current parent. This is a no-op\n // if the widget's parent is already the layout parent widget.\n if (widget) {\n widget.parent = this.parent;\n }\n // Bail early if the widget does not change.\n if (this._widget === widget) {\n return;\n }\n // Dispose of the old child widget.\n if (this._widget) {\n this._widget.dispose();\n }\n // Update the internal widget.\n this._widget = widget;\n // Attach the new child widget if needed.\n if (this.parent && widget) {\n this.attachWidget(widget);\n }\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n if (this._widget) {\n yield this._widget;\n }\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Bail early if the widget does not exist in the layout.\n if (this._widget !== widget) {\n return;\n }\n // Clear the internal widget.\n this._widget = null;\n // If the layout is parented, detach the widget from the DOM.\n if (this.parent) {\n this.detachWidget(widget);\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n for (const widget of this) {\n this.attachWidget(widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This method is called automatically by the single layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation adds the widgets's node to the parent's\n * node at the proper location, and sends the appropriate attach\n * messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is added to the parent's node.\n */\n attachWidget(widget) {\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This method is called automatically by the single layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation removes the widget's node from the\n * parent's node, and sends the appropriate detach messages to the\n * widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is removed from the parent's node.\n */\n detachWidget(widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout where visible widgets are stacked atop one another.\n *\n * #### Notes\n * The Z-order of the visible widgets follows their layout order.\n */\nclass StackedLayout extends PanelLayout {\n constructor(options = {}) {\n super(options);\n this._dirty = false;\n this._items = [];\n this._box = null;\n this._hiddenMode =\n options.hiddenMode !== undefined\n ? options.hiddenMode\n : Widget.HiddenMode.Display;\n }\n /**\n * The method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n set hiddenMode(v) {\n if (this._hiddenMode === v) {\n return;\n }\n this._hiddenMode = v;\n if (this.widgets.length > 1) {\n this.widgets.forEach(w => {\n w.hiddenMode = this._hiddenMode;\n });\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Using transform create an additional layer in the pixel pipeline\n // to limit the number of layer, it is set only if there is more than one widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale &&\n this._items.length > 0) {\n if (this._items.length === 1) {\n this.widgets[0].hiddenMode = Widget.HiddenMode.Scale;\n }\n widget.hiddenMode = Widget.HiddenMode.Scale;\n }\n else {\n widget.hiddenMode = Widget.HiddenMode.Display;\n }\n // Create and add a new layout item for the widget.\n ArrayExt.insert(this._items, index, new LayoutItem(widget));\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the layout item for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n // Post an update request for the parent widget.\n this.parent.update();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the layout item for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Reset the z-index for the widget.\n item.widget.node.style.zIndex = '';\n // Reset the hidden mode for the widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale) {\n widget.hiddenMode = Widget.HiddenMode.Display;\n // Reset the hidden mode for the first widget if necessary.\n if (this._items.length === 1) {\n this._items[0].widget.hiddenMode = Widget.HiddenMode.Display;\n }\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Set up the computed minimum size.\n let minW = 0;\n let minH = 0;\n // Update the computed minimum size.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the computed minimum size.\n minW = Math.max(minW, item.minWidth);\n minH = Math.max(minH, item.minHeight);\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Update the widget stacking order and layout geometry.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Set the z-index for the widget.\n item.widget.node.style.zIndex = `${i}`;\n // Update the item geometry.\n item.update(left, top, width, height);\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel where visible widgets are stacked atop one another.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link StackedLayout}.\n */\nclass StackedPanel extends Panel {\n /**\n * Construct a new stacked panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super({ layout: Private$1.createLayout(options) });\n this._widgetRemoved = new Signal(this);\n this.addClass('lm-StackedPanel');\n }\n /**\n * The method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this.layout.hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n set hiddenMode(v) {\n this.layout.hiddenMode = v;\n }\n /**\n * A signal emitted when a widget is removed from a stacked panel.\n */\n get widgetRemoved() {\n return this._widgetRemoved;\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-StackedPanel-child');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-StackedPanel-child');\n this._widgetRemoved.emit(msg.child);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$1;\n(function (Private) {\n /**\n * Create a stacked layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new StackedLayout();\n }\n Private.createLayout = createLayout;\n})(Private$1 || (Private$1 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which combines a `TabBar` and a `StackedPanel`.\n *\n * #### Notes\n * This is a simple panel which handles the common case of a tab bar\n * placed next to a content area. The selected tab controls the widget\n * which is shown in the content area.\n *\n * For use cases which require more control than is provided by this\n * panel, the `TabBar` widget may be used independently.\n */\nclass TabPanel extends Widget {\n /**\n * Construct a new tab panel.\n *\n * @param options - The options for initializing the tab panel.\n */\n constructor(options = {}) {\n super();\n this._currentChanged = new Signal(this);\n this._addRequested = new Signal(this);\n this.addClass('lm-TabPanel');\n // Create the tab bar and stacked panel.\n this.tabBar = new TabBar(options);\n this.tabBar.addClass('lm-TabPanel-tabBar');\n this.stackedPanel = new StackedPanel();\n this.stackedPanel.addClass('lm-TabPanel-stackedPanel');\n // Connect the tab bar signal handlers.\n this.tabBar.tabMoved.connect(this._onTabMoved, this);\n this.tabBar.currentChanged.connect(this._onCurrentChanged, this);\n this.tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n this.tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n this.tabBar.addRequested.connect(this._onTabAddRequested, this);\n // Connect the stacked panel signal handlers.\n this.stackedPanel.widgetRemoved.connect(this._onWidgetRemoved, this);\n // Get the data related to the placement.\n this._tabPlacement = options.tabPlacement || 'top';\n let direction = Private.directionFromPlacement(this._tabPlacement);\n let orientation = Private.orientationFromPlacement(this._tabPlacement);\n // Configure the tab bar for the placement.\n this.tabBar.orientation = orientation;\n this.tabBar.dataset['placement'] = this._tabPlacement;\n // Create the box layout.\n let layout = new BoxLayout({ direction, spacing: 0 });\n // Set the stretch factors for the child widgets.\n BoxLayout.setStretch(this.tabBar, 0);\n BoxLayout.setStretch(this.stackedPanel, 1);\n // Add the child widgets to the layout.\n layout.addWidget(this.tabBar);\n layout.addWidget(this.stackedPanel);\n // Install the layout on the tab panel.\n this.layout = layout;\n }\n /**\n * A signal emitted when the current tab is changed.\n *\n * #### Notes\n * This signal is emitted when the currently selected tab is changed\n * either through user or programmatic interaction.\n *\n * Notably, this signal is not emitted when the index of the current\n * tab changes due to tabs being inserted, removed, or moved. It is\n * only emitted when the actual current tab node is changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * Get the index of the currently selected tab.\n *\n * #### Notes\n * This will be `-1` if no tab is selected.\n */\n get currentIndex() {\n return this.tabBar.currentIndex;\n }\n /**\n * Set the index of the currently selected tab.\n *\n * #### Notes\n * If the index is out of range, it will be set to `-1`.\n */\n set currentIndex(value) {\n this.tabBar.currentIndex = value;\n }\n /**\n * Get the currently selected widget.\n *\n * #### Notes\n * This will be `null` if there is no selected tab.\n */\n get currentWidget() {\n let title = this.tabBar.currentTitle;\n return title ? title.owner : null;\n }\n /**\n * Set the currently selected widget.\n *\n * #### Notes\n * If the widget is not in the panel, it will be set to `null`.\n */\n set currentWidget(value) {\n this.tabBar.currentTitle = value ? value.title : null;\n }\n /**\n * Get the whether the tabs are movable by the user.\n *\n * #### Notes\n * Tabs can always be moved programmatically.\n */\n get tabsMovable() {\n return this.tabBar.tabsMovable;\n }\n /**\n * Set the whether the tabs are movable by the user.\n *\n * #### Notes\n * Tabs can always be moved programmatically.\n */\n set tabsMovable(value) {\n this.tabBar.tabsMovable = value;\n }\n /**\n * Get the whether the add button is enabled.\n *\n */\n get addButtonEnabled() {\n return this.tabBar.addButtonEnabled;\n }\n /**\n * Set the whether the add button is enabled.\n *\n */\n set addButtonEnabled(value) {\n this.tabBar.addButtonEnabled = value;\n }\n /**\n * Get the tab placement for the tab panel.\n *\n * #### Notes\n * This controls the position of the tab bar relative to the content.\n */\n get tabPlacement() {\n return this._tabPlacement;\n }\n /**\n * Set the tab placement for the tab panel.\n *\n * #### Notes\n * This controls the position of the tab bar relative to the content.\n */\n set tabPlacement(value) {\n // Bail if the placement does not change.\n if (this._tabPlacement === value) {\n return;\n }\n // Update the internal value.\n this._tabPlacement = value;\n // Get the values related to the placement.\n let direction = Private.directionFromPlacement(value);\n let orientation = Private.orientationFromPlacement(value);\n // Configure the tab bar for the placement.\n this.tabBar.orientation = orientation;\n this.tabBar.dataset['placement'] = value;\n // Update the layout direction.\n this.layout.direction = direction;\n }\n /**\n * A signal emitted when the add button on a tab bar is clicked.\n *\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * A read-only array of the widgets in the panel.\n */\n get widgets() {\n return this.stackedPanel.widgets;\n }\n /**\n * Add a widget to the end of the tab panel.\n *\n * @param widget - The widget to add to the tab panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n *\n * The widget's `title` is used to populate the tab.\n */\n addWidget(widget) {\n this.insertWidget(this.widgets.length, widget);\n }\n /**\n * Insert a widget into the tab panel at a specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the tab panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n *\n * The widget's `title` is used to populate the tab.\n */\n insertWidget(index, widget) {\n if (widget !== this.currentWidget) {\n widget.hide();\n }\n this.stackedPanel.insertWidget(index, widget);\n this.tabBar.insertTab(index, widget.title);\n widget.node.setAttribute('role', 'tabpanel');\n let renderer = this.tabBar.renderer;\n if (renderer instanceof TabBar.Renderer) {\n let tabId = renderer.createTabKey({\n title: widget.title,\n current: false,\n zIndex: 0\n });\n widget.node.setAttribute('aria-labelledby', tabId);\n }\n }\n /**\n * Handle the `currentChanged` signal from the tab bar.\n */\n _onCurrentChanged(sender, args) {\n // Extract the previous and current title from the args.\n let { previousIndex, previousTitle, currentIndex, currentTitle } = args;\n // Extract the widgets from the titles.\n let previousWidget = previousTitle ? previousTitle.owner : null;\n let currentWidget = currentTitle ? currentTitle.owner : null;\n // Hide the previous widget.\n if (previousWidget) {\n previousWidget.hide();\n }\n // Show the current widget.\n if (currentWidget) {\n currentWidget.show();\n }\n // Emit the `currentChanged` signal for the tab panel.\n this._currentChanged.emit({\n previousIndex,\n previousWidget,\n currentIndex,\n currentWidget\n });\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n }\n /**\n * Handle the `tabAddRequested` signal from the tab bar.\n */\n _onTabAddRequested(sender, args) {\n this._addRequested.emit(sender);\n }\n /**\n * Handle the `tabActivateRequested` signal from the tab bar.\n */\n _onTabActivateRequested(sender, args) {\n args.title.owner.activate();\n }\n /**\n * Handle the `tabCloseRequested` signal from the tab bar.\n */\n _onTabCloseRequested(sender, args) {\n args.title.owner.close();\n }\n /**\n * Handle the `tabMoved` signal from the tab bar.\n */\n _onTabMoved(sender, args) {\n this.stackedPanel.insertWidget(args.toIndex, args.title.owner);\n }\n /**\n * Handle the `widgetRemoved` signal from the stacked panel.\n */\n _onWidgetRemoved(sender, widget) {\n widget.node.removeAttribute('role');\n widget.node.removeAttribute('aria-labelledby');\n this.tabBar.removeTab(widget.title);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Convert a tab placement to tab bar orientation.\n */\n function orientationFromPlacement(plc) {\n return placementToOrientationMap[plc];\n }\n Private.orientationFromPlacement = orientationFromPlacement;\n /**\n * Convert a tab placement to a box layout direction.\n */\n function directionFromPlacement(plc) {\n return placementToDirectionMap[plc];\n }\n Private.directionFromPlacement = directionFromPlacement;\n /**\n * A mapping of tab placement to tab bar orientation.\n */\n const placementToOrientationMap = {\n top: 'horizontal',\n left: 'vertical',\n right: 'vertical',\n bottom: 'horizontal'\n };\n /**\n * A mapping of tab placement to box layout direction.\n */\n const placementToDirectionMap = {\n top: 'top-to-bottom',\n left: 'left-to-right',\n right: 'right-to-left',\n bottom: 'bottom-to-top'\n };\n})(Private || (Private = {}));\n\nexport { AccordionLayout, AccordionPanel, BoxEngine, BoxLayout, BoxPanel, BoxSizer, CommandPalette, ContextMenu, DockLayout, DockPanel, FocusTracker, GridLayout, Layout, LayoutItem, Menu, MenuBar, Panel, PanelLayout, ScrollBar, SingletonLayout, SplitLayout, SplitPanel, StackedLayout, StackedPanel, TabBar, TabPanel, Title, Widget };\n//# sourceMappingURL=index.es6.js.map\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without 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\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n Object.defineProperty(obj, name, {\n value: val,\n enumerable: false,\n writable: true,\n configurable: true\n });\n}\nif (!String.prototype.startsWith) {\n defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n });\n}\nif (!String.prototype.endsWith) {\n defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n var subjectString = this;\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n });\n}\nif (!String.prototype.repeat) {\n defineProp(String.prototype, \"repeat\", function (count) {\n var result = \"\";\n var string = this;\n while (count > 0) {\n if (count & 1)\n result += string;\n if ((count >>= 1))\n string += string;\n }\n return result;\n });\n}\nif (!String.prototype.includes) {\n defineProp(String.prototype, \"includes\", function (str, position) {\n return this.indexOf(str, position) != -1;\n });\n}\nif (!Object.assign) {\n Object.assign = function (target) {\n if (target === undefined || target === null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n Object.keys(source).forEach(function (key) {\n output[key] = source[key];\n });\n }\n }\n return output;\n };\n}\nif (!Object.values) {\n Object.values = function (o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n };\n}\nif (!Array.prototype.find) {\n defineProp(Array.prototype, \"find\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return kValue;\n }\n }\n });\n}\nif (!Array.prototype.findIndex) {\n defineProp(Array.prototype, \"findIndex\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return k;\n }\n }\n });\n}\nif (!Array.prototype.includes) {\n defineProp(Array.prototype, \"includes\", function (item, position) {\n return this.indexOf(item, position) != -1;\n });\n}\nif (!Array.prototype.fill) {\n defineProp(Array.prototype, \"fill\", function (value) {\n var O = this;\n var len = O.length >>> 0;\n var start = arguments[1];\n var relativeStart = start >> 0;\n var k = relativeStart < 0\n ? Math.max(len + relativeStart, 0)\n : Math.min(relativeStart, len);\n var end = arguments[2];\n var relativeEnd = end === undefined ? len : end >> 0;\n var final = relativeEnd < 0\n ? Math.max(len + relativeEnd, 0)\n : Math.min(relativeEnd, len);\n while (k < final) {\n O[k] = value;\n k++;\n }\n return O;\n });\n}\nif (!Array.of) {\n defineProp(Array, \"of\", function () {\n return Array.prototype.slice.call(arguments);\n });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n if (count >>= 1)\n string += string;\n }\n return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\nexports.copyArray = function (array) {\n var copy = [];\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else\n copy[i] = array[i];\n }\n return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n};\nexports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\nexports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/ 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n }\n else if (exports.isLinux) {\n return exports.OS.LINUX;\n }\n else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n }\n else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n }\n else if (n === \"ref\") {\n if (refs)\n refs[val] = el;\n }\n else if (n === \"style\") {\n if (typeof val == \"string\")\n el.style.cssText = val;\n }\n else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\nexports.getDocumentHead = function (doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n }\n else {\n exports.removeCssClass(node, className);\n }\n};\nexports.hasCssString = function (id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) {\n return true;\n }\n }\n }\n};\nexports.removeElementById = function (id, doc) {\n doc = doc || document;\n if (doc.getElementById(id)) {\n doc.getElementById(id).remove();\n }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n strictCSP = value;\n if (value == false)\n insertPendingStyles();\n else if (!cssCache)\n cssCache = [];\n};\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function (item) {\n importCssString(item[0], item[1]);\n });\n}\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n }\n else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP)\n return;\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n }\n else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (doc) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = (doc && doc.documentElement) || (document && document.documentElement);\n if (!body)\n return 0;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n if (noScrollbar === withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\nif (useragent.isChromeOS)\n exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n}\nelse {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\nexports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\nexports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n if (typeof e != \"object\" || !e)\n e = {};\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n };\nEventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++)\n listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n var _self = this;\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n callback.apply(null, arguments);\n });\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = { _disabled_: {} };\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n }\n else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\nEventEmitter.on =\n EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\nEventEmitter.off =\n EventEmitter.removeListener =\n EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n };\nEventEmitter.removeAllListeners = function (eventName) {\n if (!eventName)\n this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry)\n this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers)\n this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n var e = new Error(msg);\n e[\"data\"] = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/default_english_messages\",[\"require\",\"exports\",\"module\"], function(require, exports, module){var defaultEnglishMessages = {\n \"autocomplete.popup.aria-roledescription\": \"Autocomplete suggestions\",\n \"autocomplete.popup.aria-label\": \"Autocomplete suggestions\",\n \"autocomplete.popup.item.aria-roledescription\": \"item\",\n \"autocomplete.loading\": \"Loading...\",\n \"editor.scroller.aria-roledescription\": \"editor\",\n \"editor.scroller.aria-label\": \"Editor content, press Enter to start editing, press Escape to exit\",\n \"editor.gutter.aria-roledescription\": \"editor gutter\",\n \"editor.gutter.aria-label\": \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\",\n \"error-marker.good-state\": \"Looks good!\",\n \"prompt.recently-used\": \"Recently used\",\n \"prompt.other-commands\": \"Other commands\",\n \"prompt.no-matching-commands\": \"No matching commands\",\n \"search-box.find.placeholder\": \"Search for\",\n \"search-box.find-all.text\": \"All\",\n \"search-box.replace.placeholder\": \"Replace with\",\n \"search-box.replace-next.text\": \"Replace\",\n \"search-box.replace-all.text\": \"All\",\n \"search-box.toggle-replace.title\": \"Toggle Replace mode\",\n \"search-box.toggle-regexp.title\": \"RegExp Search\",\n \"search-box.toggle-case.title\": \"CaseSensitive Search\",\n \"search-box.toggle-whole-word.title\": \"Whole Word Search\",\n \"search-box.toggle-in-selection.title\": \"Search In Selection\",\n \"search-box.search-counter\": \"$0 of $1\",\n \"text-input.aria-roledescription\": \"editor\",\n \"text-input.aria-label\": \"Cursor at row $0\",\n \"gutter.code-folding.range.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.closed.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.open.aria-label\": \"Toggle code folding, row $0\",\n \"gutter.code-folding.closed.title\": \"Unfold code\",\n \"gutter.code-folding.open.title\": \"Fold code\",\n \"gutter.annotation.aria-label.error\": \"Error, read annotations row $0\",\n \"gutter.annotation.aria-label.warning\": \"Warning, read annotations row $0\",\n \"gutter.annotation.aria-label.info\": \"Info, read annotations row $0\",\n \"inline-fold.closed.title\": \"Unfold code\",\n \"gutter-tooltip.aria-label.error.singular\": \"error\",\n \"gutter-tooltip.aria-label.error.plural\": \"errors\",\n \"gutter-tooltip.aria-label.warning.singular\": \"warning\",\n \"gutter-tooltip.aria-label.warning.plural\": \"warnings\",\n \"gutter-tooltip.aria-label.info.singular\": \"information message\",\n \"gutter-tooltip.aria-label.info.plural\": \"information messages\",\n \"gutter.annotation.aria-label.security\": \"Security finding, read annotations row $0\",\n \"gutter.annotation.aria-label.hint\": \"Suggestion, read annotations row $0\",\n \"gutter-tooltip.aria-label.security.singular\": \"security finding\",\n \"gutter-tooltip.aria-label.security.plural\": \"security findings\",\n \"gutter-tooltip.aria-label.hint.singular\": \"suggestion\",\n \"gutter-tooltip.aria-label.hint.plural\": \"suggestions\",\n \"editor.tooltip.disable-editing\": \"Editing is disabled\"\n};\nexports.defaultEnglishMessages = defaultEnglishMessages;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\",\"ace/lib/default_english_messages\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar defaultEnglishMessages = require(\"./default_english_messages\").defaultEnglishMessages;\nvar optionsProvider = {\n setOptions: function (optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function (optionNames) {\n var result = {};\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n }\n else if (!Array.isArray(optionNames)) {\n optionNames = Object.keys(optionNames);\n }\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function (name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function (name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\nvar messages;\nvar nlsPlaceholders;\nvar AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\n messages = defaultEnglishMessages;\n nlsPlaceholders = \"dollarSigns\";\n }\n AppConfig.prototype.defineOptions = function (obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = { forwardTo: opt };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n AppConfig.prototype.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n AppConfig.prototype.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions)\n if (this.$defaultOptions[path][name])\n break;\n if (!this.$defaultOptions[path][name])\n return false;\n }\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n AppConfig.prototype.setMessages = function (value, options) {\n messages = value;\n if (options && options.placeholders) {\n nlsPlaceholders = options.placeholders;\n }\n };\n AppConfig.prototype.nls = function (key, defaultString, params) {\n if (!messages[key]) {\n warn(\"No message found for the key '\" + key + \"' in messages with id \" + messages.$id + \", trying to find a translation for the default string '\" + defaultString + \"'.\");\n if (!messages[defaultString]) {\n warn(\"No message found for the default string '\" + defaultString + \"' in the provided messages. Falling back to the default English message.\");\n }\n }\n var translated = messages[key] || messages[defaultString] || defaultString;\n if (params) {\n if (nlsPlaceholders === \"dollarSigns\") {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, dollarMatch) {\n if (dollarMatch == \"$\")\n return \"$\";\n return params[dollarMatch];\n });\n }\n if (nlsPlaceholders === \"curlyBrackets\") {\n translated = translated.replace(/\\{([^\\}]+)\\}/g, function (_, curlyBracketMatch) {\n return params[curlyBracketMatch];\n });\n }\n }\n return translated;\n };\n return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n background: #f0f0f0;\\n color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n color: black;\\n}\\n \\n.ace-tm .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n background-color: rgba(255, 0, 0, 0.1);\\n color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n};\nexports.get = function (key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\nexports.set = function (key, value) {\n if (options.hasOwnProperty(key))\n options[key] = value;\n else if (this.setDefaultValue(\"\", key, value) == false)\n throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\")\n dom.useStrictCSP(value);\n};\nexports.all = function () {\n return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n }\n else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n return cb(null, require(\"./theme/textmate\"));\n if (customLoader)\n return customLoader(moduleName, cb);\n console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n var loadedModule;\n if (Array.isArray(moduleId)) {\n var moduleType = moduleId[0];\n var moduleName = moduleId[1];\n }\n else if (typeof moduleId == \"string\") {\n var moduleName = moduleId;\n }\n var load = function (module) {\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1)\n return;\n var afterLoad = function () {\n loader(moduleName, function (err, module) {\n if (module)\n exports.$loaded[moduleName] = module;\n exports._emit(\"load.module\", { name: moduleName, module: module });\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n };\n if (exports.dynamicModules[moduleName]) {\n exports.dynamicModules[moduleName]().then(function (module) {\n if (module.default) {\n load(module.default);\n }\n else {\n load(module);\n }\n });\n }\n else {\n try {\n loadedModule = this.$require(moduleName);\n }\n catch (e) { }\n load(loadedModule || exports.$loaded[moduleName]);\n }\n};\nexports.$require = function (moduleName) {\n if (typeof module[\"require\"] == \"function\") {\n var req = \"require\";\n return module[req](moduleName);\n }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n if (!options.basePath && !options.workerPath\n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n reportErrorIfPathIsNotConfigured = function () { };\n }\n};\nexports.version = \"1.43.3\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n require([moduleName], function(module) {\n cb(null, module);\n });\n});\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n config.init = init;\n config.$require = require;\n ace.require = require;\n\n if (typeof define === \"function\")\n ace.define = define;\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n if (currentScript && currentScript.src) {\n scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n }\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n Range.prototype.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n Range.prototype.compareRange = function (range) {\n var cmp, end = range.end, start = range.start;\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n }\n else if (cmp == 0) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (cmp == -1) {\n return -2;\n }\n else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n }\n else if (cmp == 1) {\n return 42;\n }\n else {\n return 0;\n }\n }\n };\n Range.prototype.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n Range.prototype.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n Range.prototype.intersects = function (range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n Range.prototype.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n Range.prototype.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n Range.prototype.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n }\n else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n Range.prototype.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n }\n else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n Range.prototype.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n if (row < this.start.row)\n return -1;\n if (row > this.end.row)\n return 1;\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n return 0;\n };\n Range.prototype.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = { row: lastRow + 1, column: 0 };\n else if (this.end.row < firstRow)\n var end = { row: firstRow, column: 0 };\n if (this.start.row > lastRow)\n var start = { row: lastRow + 1, column: 0 };\n else if (this.start.row < firstRow)\n var start = { row: firstRow, column: 0 };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = { row: row, column: column };\n else\n var end = { row: row, column: column };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.isEmpty = function () {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n Range.prototype.isMultiLine = function () {\n return (this.start.row !== this.end.row);\n };\n Range.prototype.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n Range.prototype.collapseRows = function () {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n Range.prototype.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n Range.prototype.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n return Range;\n}());\nRange.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n \"control\": 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n '-13': \"NumpadEnter\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n};\nvar codeToKeyCode = {\n Command: 224,\n Backspace: 8,\n Tab: 9,\n Return: 13,\n Enter: 13,\n Pause: 19,\n Escape: 27,\n PageUp: 33,\n PageDown: 34,\n End: 35,\n Home: 36,\n Insert: 45,\n Delete: 46,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Backquote: 192,\n Minus: 189,\n Equal: 187,\n BracketLeft: 219,\n Backslash: 220,\n BracketRight: 221,\n Semicolon: 186,\n Quote: 222,\n Comma: 188,\n Period: 190,\n Slash: 191,\n Space: 32,\n NumpadAdd: 107,\n NumpadDecimal: 110,\n NumpadSubtract: 109,\n NumpadDivide: 111,\n NumpadMultiply: 106\n};\nfor (var i = 0; i < 10; i++) {\n codeToKeyCode[\"Digit\" + i] = 48 + i;\n codeToKeyCode[\"Numpad\" + i] = 96 + i;\n Keys.PRINTABLE_KEYS[48 + i] = \"\" + i;\n Keys.FUNCTION_KEYS[96 + i] = \"Numpad\" + i;\n}\nfor (var i = 65; i < 91; i++) {\n var chr = String.fromCharCode(i + 32);\n codeToKeyCode[\"Key\" + chr.toUpperCase()] = i;\n Keys.PRINTABLE_KEYS[i] = chr;\n}\nfor (var i = 1; i < 13; i++) {\n codeToKeyCode[\"F\" + i] = 111 + i;\n Keys.FUNCTION_KEYS[111 + i] = \"F\" + i;\n}\nvar modifiers = {\n Shift: 16,\n Control: 17,\n Alt: 18,\n Meta: 224\n};\nfor (var mod in modifiers) {\n codeToKeyCode[mod] = codeToKeyCode[mod + \"Left\"]\n = codeToKeyCode[mod + \"Right\"] = modifiers[mod];\n}\nexports.$codeToKeyCode = codeToKeyCode;\nKeys.PRINTABLE_KEYS[173] = '-';\nfor (var j in Keys.FUNCTION_KEYS) {\n var name = Keys.FUNCTION_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\nfor (var j in Keys.PRINTABLE_KEYS) {\n var name = Keys.PRINTABLE_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\noop.mixin(Keys, Keys.MODIFIER_KEYS);\noop.mixin(Keys, Keys.PRINTABLE_KEYS);\noop.mixin(Keys, Keys.FUNCTION_KEYS);\nKeys.enter = Keys[\"return\"];\nKeys.escape = Keys.esc;\nKeys.del = Keys[\"delete\"];\n(function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n Keys.KEY_MODS[i] = mods.filter(function (x) {\n return i & Keys.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n})();\nKeys.KEY_MODS[0] = \"\";\nKeys.KEY_MODS[-1] = \"input-\";\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function () { }, {\n get passive() {\n activeListenerOptions = { passive: false };\n return true;\n }\n });\n }\n catch (e) { }\n}\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\nexports.stopPropagation = function (e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function (e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.15;\n var deltaX = e.deltaX || 0;\n var deltaY = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = deltaX * factor;\n e.wheelY = deltaY * factor;\n break;\n case e.DOM_DELTA_LINE:\n var linePixels = 15;\n e.wheelX = deltaX * linePixels;\n e.wheelY = deltaY * linePixels;\n break;\n case e.DOM_DELTA_PAGE:\n var pagePixels = 150;\n e.wheelX = deltaX * pagePixels;\n e.wheelY = deltaY * pagePixels;\n break;\n }\n callback(e);\n }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n }\n else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n }\n else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\nfunction getModifierHash(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n}\nexports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n if (!keyCode && e.code) {\n keyCode = keys.$codeToKeyCode[e.code] || keyCode;\n }\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = e.location;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n }\n else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (!hashId && keyCode === 13) {\n if (e.location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n var listener = function (e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n }\n else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window[\"mozRequestAnimationFrame\"]\n || window[\"webkitRequestAnimationFrame\"]\n || window[\"msRequestAnimationFrame\"]\n || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n lineMode: false,\n pasteCancelled: function () {\n if ($cancelT && $cancelT > Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function () {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput = /** @class */ (function () {\n function TextInput(parentNode, host) {\n var _this = this;\n this.host = host;\n this.text = dom.createElement(\"textarea\");\n this.text.className = \"ace_text-input\";\n this.text.setAttribute(\"wrap\", \"off\");\n this.text.setAttribute(\"autocomplete\", \"off\");\n this.text.setAttribute(\"autocorrect\", \"off\");\n this.text.setAttribute(\"autocapitalize\", \"off\");\n this.text.setAttribute(\"spellcheck\", \"false\");\n this.text.style.opacity = \"0\";\n parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false;\n this.pasted = false;\n this.inComposition = false;\n this.sendingText = false;\n this.tempStyle = '';\n if (!isMobile)\n this.text.style.fontSize = \"1px\";\n this.commandMode = false;\n this.ignoreFocusEvents = false;\n this.lastValue = \"\";\n this.lastSelectionStart = 0;\n this.lastSelectionEnd = 0;\n this.lastRestoreEnd = 0;\n this.rowStart = Number.MAX_SAFE_INTEGER;\n this.rowEnd = Number.MIN_SAFE_INTEGER;\n this.numberOfExtraLines = 0;\n try {\n this.$isFocused = document.activeElement === this.text;\n }\n catch (e) {\n }\n this.cancelComposition = this.cancelComposition.bind(this);\n this.setAriaOptions({ role: \"textbox\" });\n event.addListener(this.text, \"blur\", function (e) {\n if (_this.ignoreFocusEvents)\n return;\n host.onBlur(e);\n _this.$isFocused = false;\n }, host);\n event.addListener(this.text, \"focus\", function (e) {\n if (_this.ignoreFocusEvents)\n return;\n _this.$isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n }\n catch (e) {\n }\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(_this.resetSelection.bind(_this));\n else\n _this.resetSelection();\n }, host); this.$focusScroll = false;\n host.on(\"beforeEndOperation\", function () {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (_this.inComposition && isUserAction) {\n _this.lastValue = _this.text.value = \"\";\n _this.onCompositionEnd();\n }\n _this.resetSelection();\n });\n host.on(\"changeSelection\", this.setAriaLabel.bind(this));\n this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection;\n if (this.$isFocused)\n host.onFocus();\n this.inputHandler = null;\n this.afterContextMenu = false;\n event.addCommandKeyListener(this.text, function (e, hashId, keyCode) {\n if (_this.inComposition)\n return;\n return host.onCommandKey(e, hashId, keyCode);\n }, host);\n event.addListener(this.text, \"select\", this.onSelect.bind(this), host);\n event.addListener(this.text, \"input\", this.onInput.bind(this), host);\n event.addListener(this.text, \"cut\", this.onCut.bind(this), host);\n event.addListener(this.text, \"copy\", this.onCopy.bind(this), host);\n event.addListener(this.text, \"paste\", this.onPaste.bind(this), host);\n if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n switch (e.keyCode) {\n case 67:\n _this.onCopy(e);\n break;\n case 86:\n _this.onPaste(e);\n break;\n case 88:\n _this.onCut(e);\n break;\n }\n }, host);\n }\n this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this\n event.addListener(this.text, \"compositionstart\", this.onCompositionStart.bind(this), host);\n event.addListener(this.text, \"compositionupdate\", this.onCompositionUpdate.bind(this), host);\n event.addListener(this.text, \"keyup\", this.onKeyup.bind(this), host);\n event.addListener(this.text, \"keydown\", this.syncComposition.bind(this), host);\n event.addListener(this.text, \"compositionend\", this.onCompositionEnd.bind(this), host);\n this.closeTimeout;\n event.addListener(this.text, \"mouseup\", this.$onContextMenu.bind(this), host);\n event.addListener(this.text, \"mousedown\", function (e) {\n e.preventDefault();\n _this.onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", this.$onContextMenu.bind(this), host);\n event.addListener(this.text, \"contextmenu\", this.$onContextMenu.bind(this), host);\n if (isIOS)\n this.addIosSelectionHandler(parentNode, host, this.text);\n }\n TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) {\n var _this = this;\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout)\n clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function (e) {\n if (document.activeElement !== text)\n return;\n if (typing || _this.inComposition || host.$mouseHandler.isMousePressed)\n return;\n if (_this.copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n }\n else if (selectionStart == 1) {\n key = KEYS.home;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n }\n else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n }\n else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart\n && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n key = KEYS.left;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n }\n else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd\n && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n key = KEYS.right;\n }\n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n _this.lastSelectionStart = selectionStart;\n _this.lastSelectionEnd = selectionEnd;\n _this.resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n };\n TextInput.prototype.onContextMenuClose = function () {\n var _this = this;\n clearTimeout(this.closeTimeout);\n this.closeTimeout = setTimeout(function () {\n if (_this.tempStyle) {\n _this.text.style.cssText = _this.tempStyle;\n _this.tempStyle = '';\n }\n _this.host.renderer.$isMousePressed = false;\n if (_this.host.renderer.$keepTextAreaAtCursor)\n _this.host.renderer.$moveTextAreaToCursor();\n }, 0);\n };\n TextInput.prototype.$onContextMenu = function (e) {\n this.host.textInput.onContextMenu(e);\n this.onContextMenuClose();\n };\n TextInput.prototype.onKeyup = function (e) {\n if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) {\n if (!this.inComposition)\n this.lastValue = this.text.value;\n this.lastSelectionStart = this.lastSelectionEnd = -1;\n this.resetSelection();\n }\n this.syncComposition();\n };\n TextInput.prototype.cancelComposition = function () {\n this.ignoreFocusEvents = true;\n this.text.blur();\n this.text.focus();\n this.ignoreFocusEvents = false;\n };\n TextInput.prototype.onCompositionStart = function (e) {\n if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly)\n return;\n this.inComposition = {};\n if (this.commandMode)\n return;\n if (e.data)\n this.inComposition.useTextareaForIME = false;\n setTimeout(this.onCompositionUpdate.bind(this), 0);\n this.host._signal(\"compositionStart\");\n this.host.on(\"mousedown\", this.cancelComposition); //TODO:\n var range = this.host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n this.inComposition.markerRange = range;\n this.inComposition.selectionStart = this.lastSelectionStart;\n this.host.onCompositionStart(this.inComposition);\n if (this.inComposition.useTextareaForIME) {\n this.lastValue = this.text.value = \"\";\n this.lastSelectionStart = 0;\n this.lastSelectionEnd = 0;\n }\n else {\n if (this.text.msGetInputContext)\n this.inComposition.context = this.text.msGetInputContext();\n if (this.text.getInputContext)\n this.inComposition.context = this.text.getInputContext();\n }\n };\n TextInput.prototype.onCompositionUpdate = function () {\n if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly)\n return;\n if (this.commandMode)\n return this.cancelComposition();\n if (this.inComposition.useTextareaForIME) {\n this.host.onCompositionUpdate(this.text.value);\n }\n else {\n var data = this.text.value;\n this.sendText(data);\n if (this.inComposition.markerRange) {\n if (this.inComposition.context) {\n this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset;\n }\n this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column\n + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd;\n }\n }\n };\n TextInput.prototype.onCompositionEnd = function (e) {\n if (!this.host.onCompositionEnd || this.host.$readOnly)\n return;\n this.inComposition = false;\n this.host.onCompositionEnd();\n this.host.off(\"mousedown\", this.cancelComposition);\n if (e)\n this.onInput();\n };\n TextInput.prototype.onCut = function (e) {\n this.doCopy(e, true);\n };\n TextInput.prototype.onCopy = function (e) {\n this.doCopy(e, false);\n };\n TextInput.prototype.onPaste = function (e) {\n var data = this.handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n this.host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(this.resetSelection);\n event.preventDefault(e);\n }\n else {\n this.text.value = \"\";\n this.pasted = true;\n }\n };\n TextInput.prototype.doCopy = function (e, isCut) {\n var _this = this;\n var data = this.host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n if (this.handleClipboardData(e, data)) {\n if (isIOS) {\n this.resetSelection(data);\n this.copied = data;\n setTimeout(function () {\n _this.copied = false;\n }, 10);\n }\n isCut ? this.host.onCut() : this.host.onCopy();\n event.preventDefault(e);\n }\n else {\n this.copied = true;\n this.text.value = data;\n this.text.select();\n setTimeout(function () {\n _this.copied = false;\n _this.resetSelection();\n isCut ? _this.host.onCut() : _this.host.onCopy();\n });\n }\n };\n TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window[\"clipboardData\"];\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n }\n else {\n return clipboardData.getData(mime);\n }\n }\n catch (e) {\n if (!forceIEMime)\n return this.handleClipboardData(e, data, true);\n }\n };\n TextInput.prototype.onInput = function (e) {\n if (this.inComposition)\n return this.onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\")\n return this.host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\")\n return this.host.execCommand(\"redo\");\n }\n var data = this.text.value;\n var inserted = this.sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart\n < 1 && this.lastSelectionStart == this.lastSelectionEnd) {\n this.resetSelection();\n }\n };\n TextInput.prototype.sendText = function (value, fromInput) {\n if (this.afterContextMenu)\n this.afterContextMenu = false;\n if (this.pasted) {\n this.resetSelection();\n if (value)\n this.host.onPaste(value);\n this.pasted = false;\n return \"\";\n }\n else {\n var selectionStart = this.text.selectionStart;\n var selectionEnd = this.text.selectionEnd;\n var extendLeft = this.lastSelectionStart;\n var extendRight = this.lastValue.length - this.lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n while (extendLeft > 0 && this.lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1\n && this.lastValue[this.lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n this.sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) {\n this.host.onTextInput(inserted);\n }\n else {\n this.host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n this.sendingText = false;\n this.lastValue = value;\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n this.lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n TextInput.prototype.onSelect = function (e) {\n var _this = this;\n if (this.inComposition)\n return;\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value\n === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd;\n };\n if (this.copied) {\n this.copied = false;\n }\n else if (isAllSelected(this.text)) {\n this.host.selectAll();\n this.resetSelection();\n }\n else if (isMobile && this.text.selectionStart != this.lastSelectionStart) {\n this.resetSelection();\n }\n };\n TextInput.prototype.$resetSelectionIOS = function (value) {\n if (!this.$isFocused || (this.copied && !value) || this.sendingText)\n return;\n if (!value)\n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != this.text.value)\n this.text.value = this.lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1));\n if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) {\n this.text.setSelectionRange(selectionStart, selectionEnd);\n }\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n };\n TextInput.prototype.$resetSelection = function () {\n var _this = this;\n if (this.inComposition || this.sendingText)\n return;\n if (!this.$isFocused && !this.afterContextMenu)\n return;\n this.inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n var positionToSelection = function (row, column) {\n var selection = column;\n for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) {\n selection += _this.host.session.getLine(row - i).length + 1;\n }\n return selection;\n };\n if (this.host.session) {\n var selection = this.host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n if (row === this.rowEnd + 1) {\n this.rowStart = this.rowEnd + 1;\n this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines;\n }\n else if (row === this.rowStart - 1) {\n this.rowEnd = this.rowStart - 1;\n this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines;\n }\n else if (row < this.rowStart - 1 || row > this.rowEnd + 1) {\n this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0;\n this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2\n * this.numberOfExtraLines;\n }\n var lines = [];\n for (var i = this.rowStart; i <= this.rowEnd; i++) {\n lines.push(this.host.session.getLine(i));\n }\n line = lines.join('\\n');\n selectionStart = positionToSelection(range.start.row, range.start.column);\n selectionEnd = positionToSelection(range.end.row, range.end.column);\n if (range.start.row < this.rowStart) {\n var prevLine = this.host.session.getLine(this.rowStart - 1);\n selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row > this.rowEnd) {\n var nextLine = this.host.session.getLine(this.rowEnd + 1);\n selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n }\n else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n var newValue = line + \"\\n\\n\";\n if (newValue != this.lastValue) {\n this.text.value = this.lastValue = newValue;\n this.lastSelectionStart = this.lastSelectionEnd = newValue.length;\n }\n }\n if (this.afterContextMenu) {\n this.lastSelectionStart = this.text.selectionStart;\n this.lastSelectionEnd = this.text.selectionEnd;\n }\n if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd\n != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n this.text.setSelectionRange(selectionStart, selectionEnd);\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n }\n catch (e) {\n }\n }\n this.inComposition = false;\n };\n TextInput.prototype.setHost = function (newHost) {\n this.host = newHost;\n };\n TextInput.prototype.setNumberOfExtraLines = function (number) {\n this.rowStart = Number.MAX_SAFE_INTEGER;\n this.rowEnd = Number.MIN_SAFE_INTEGER;\n if (number < 0) {\n this.numberOfExtraLines = 0;\n return;\n }\n this.numberOfExtraLines = number;\n };\n TextInput.prototype.setAriaLabel = function () {\n var ariaLabel = \"\";\n if (this.host.$textInputAriaLabel) {\n ariaLabel += \"\".concat(this.host.$textInputAriaLabel, \", \");\n }\n if (this.host.session) {\n var row = this.host.session.selection.cursor.row;\n ariaLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n }\n this.text.setAttribute(\"aria-label\", ariaLabel);\n };\n TextInput.prototype.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n this.text.setAttribute(\"aria-haspopup\", \"true\");\n this.text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n this.text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n }\n else {\n this.text.setAttribute(\"aria-haspopup\", \"false\");\n this.text.setAttribute(\"aria-autocomplete\", \"both\");\n this.text.removeAttribute(\"aria-activedescendant\");\n }\n if (options.role) {\n this.text.setAttribute(\"role\", options.role);\n }\n if (options.setLabel) {\n this.text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n this.setAriaLabel();\n }\n };\n TextInput.prototype.focus = function () {\n var _this = this;\n this.setAriaOptions({\n setLabel: this.host.renderer.enableKeyboardAccessibility\n });\n if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return this.text.focus({ preventScroll: true });\n var top = this.text.style.top;\n this.text.style.position = \"fixed\";\n this.text.style.top = \"0px\";\n try {\n var isTransformed = this.text.getBoundingClientRect().top != 0;\n }\n catch (e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = this.text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", \"true\");\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode()[\"host\"];\n else\n t = t.parentElement;\n }\n }\n this.text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function () {\n _this.text.style.position = \"\";\n if (_this.text.style.top == \"0px\")\n _this.text.style.top = top;\n }, 0);\n };\n TextInput.prototype.blur = function () {\n this.text.blur();\n };\n TextInput.prototype.isFocused = function () {\n return this.$isFocused;\n };\n TextInput.prototype.setInputHandler = function (cb) {\n this.inputHandler = cb;\n };\n TextInput.prototype.getInputHandler = function () {\n return this.inputHandler;\n };\n TextInput.prototype.getElement = function () {\n return this.text;\n };\n TextInput.prototype.setCommandMode = function (value) {\n this.commandMode = value;\n this.text.readOnly = false;\n };\n TextInput.prototype.setReadOnly = function (readOnly) {\n if (!this.commandMode)\n this.text.readOnly = readOnly;\n };\n TextInput.prototype.setCopyWithEmptySelection = function (value) {\n };\n TextInput.prototype.onContextMenu = function (e) {\n this.afterContextMenu = true;\n this.resetSelection();\n this.host._emit(\"nativecontextmenu\", {\n target: this.host,\n domEvent: e\n });\n this.moveToMouse(e, true);\n };\n TextInput.prototype.moveToMouse = function (e, bringToFront) {\n var _this = this;\n if (!this.tempStyle)\n this.tempStyle = this.text.style.cssText;\n this.text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth\n * 0.5 + \"px;\";\n var rect = this.host.container.getBoundingClientRect();\n var style = dom.computedStyle(this.host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(style.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - this.text.clientHeight - 2;\n var move = function (e) {\n dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n move(e);\n if (e.type != \"mousedown\")\n return;\n this.host.renderer.$isMousePressed = true;\n clearTimeout(this.closeTimeout);\n if (useragent.isWin)\n event.capture(this.host.container, move, this.onContextMenuClose.bind(this));\n };\n TextInput.prototype.destroy = function () {\n if (this.text.parentElement)\n this.text.parentElement.removeChild(this.text);\n };\n return TextInput;\n}());\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n DefaultHandlers.prototype.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent)\n return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n DefaultHandlers.prototype.select = function () {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n }\n else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n }\n else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n }\n else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n };\n DefaultHandlers.prototype.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n DefaultHandlers.prototype.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n }\n else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n DefaultHandlers.prototype.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n }\n else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n DefaultHandlers.prototype.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n DefaultHandlers.prototype.onMouseWheel = function (ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n var editor = this.editor;\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n if (canScroll) {\n prevScroll.allowed = t;\n }\n else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0)\n return { cursor: range.start, anchor: range.end };\n else\n return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n event.stopPropagation();\n var target = event.currentTarget;\n var contentOverflows = target.scrollHeight > target.clientHeight;\n if (!contentOverflows) {\n event.preventDefault();\n }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n Tooltip.prototype.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = CLASSNAME;\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n Tooltip.prototype.getElement = function () {\n return this.$element || this.$init();\n };\n Tooltip.prototype.setText = function (text) {\n this.getElement().textContent = text;\n };\n Tooltip.prototype.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n Tooltip.prototype.setPosition = function (x, y) {\n var el = this.getElement();\n var rootRect = el.offsetParent && el.offsetParent.getBoundingClientRect();\n el.style.left = x - (rootRect ? rootRect.left : 0) + \"px\";\n el.style.top = y - (rootRect ? rootRect.top : 0) + \"px\";\n };\n Tooltip.prototype.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n Tooltip.prototype.setTheme = function (theme) {\n this.$element.className = CLASSNAME + \" \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n };\n Tooltip.prototype.show = function (text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n Tooltip.prototype.hide = function (e) {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.getElement().className = CLASSNAME;\n this.isOpen = false;\n }\n };\n Tooltip.prototype.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n Tooltip.prototype.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n Tooltip.prototype.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n function PopupManager() {\n this.popups = [];\n }\n PopupManager.prototype.addPopup = function (popup) {\n this.popups.push(popup);\n this.updatePopups();\n };\n PopupManager.prototype.removePopup = function (popup) {\n var index = this.popups.indexOf(popup);\n if (index !== -1) {\n this.popups.splice(index, 1);\n this.updatePopups();\n }\n };\n PopupManager.prototype.updatePopups = function () {\n var e_1, _a, e_2, _b;\n this.popups.sort(function (a, b) { return b.priority - a.priority; });\n var visiblepopups = [];\n try {\n for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n var popup = _d.value;\n var shouldDisplay = true;\n try {\n for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n var visiblePopup = visiblepopups_1_1.value;\n if (this.doPopupsOverlap(visiblePopup, popup)) {\n shouldDisplay = false;\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (shouldDisplay) {\n visiblepopups.push(popup);\n }\n else {\n popup.hide();\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n var rectA = popupA.getElement().getBoundingClientRect();\n var rectB = popupB.getElement().getBoundingClientRect();\n return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n > rectB.top);\n };\n return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n __extends(HoverTooltip, _super);\n function HoverTooltip(parentNode) {\n if (parentNode === void 0) { parentNode = document.body; }\n var _this = _super.call(this, parentNode) || this;\n _this.timeout = undefined;\n _this.lastT = 0;\n _this.idleTime = 350;\n _this.lastEvent = undefined;\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.waitForHover = _this.waitForHover.bind(_this);\n _this.hide = _this.hide.bind(_this);\n var el = _this.getElement();\n el.style.whiteSpace = \"pre-wrap\";\n el.style.pointerEvents = \"auto\";\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n el.tabIndex = -1;\n el.addEventListener(\"blur\", function () {\n if (!el.contains(document.activeElement))\n this.hide();\n }.bind(_this));\n el.addEventListener(\"wheel\", preventParentScroll);\n return _this;\n }\n HoverTooltip.prototype.addToEditor = function (editor) {\n editor.on(\"mousemove\", this.onMouseMove);\n editor.on(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, true);\n };\n HoverTooltip.prototype.removeFromEditor = function (editor) {\n editor.off(\"mousemove\", this.onMouseMove);\n editor.off(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, true);\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n };\n HoverTooltip.prototype.onMouseMove = function (e, editor) {\n this.lastEvent = e;\n this.lastT = Date.now();\n var isMousePressed = editor.$mouseHandler.isMousePressed;\n if (this.isOpen) {\n var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n if (!this.range\n || !this.range.contains(pos.row, pos.column)\n || isMousePressed\n || this.isOutsideOfText(this.lastEvent)) {\n this.hide();\n }\n }\n if (this.timeout || isMousePressed)\n return;\n this.lastEvent = e;\n this.timeout = setTimeout(this.waitForHover, this.idleTime);\n };\n HoverTooltip.prototype.waitForHover = function () {\n if (this.timeout)\n clearTimeout(this.timeout);\n var dt = Date.now() - this.lastT;\n if (this.idleTime - dt > 10) {\n this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n return;\n }\n this.timeout = null;\n if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n this.$gatherData(this.lastEvent, this.lastEvent.editor);\n }\n };\n HoverTooltip.prototype.isOutsideOfText = function (e) {\n var editor = e.editor;\n var docPos = e.getDocumentPosition();\n var line = editor.session.getLine(docPos.row);\n if (docPos.column == line.length) {\n var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n if (clippedPos.column != screenPos.column\n || clippedPos.row != screenPos.row) {\n return true;\n }\n }\n return false;\n };\n HoverTooltip.prototype.setDataProvider = function (value) {\n this.$gatherData = value;\n };\n HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n var MARGIN = 10;\n if (startingEvent && startingEvent != this.lastEvent)\n return;\n if (this.isOpen && document.activeElement == this.getElement())\n return;\n var renderer = editor.renderer;\n if (!this.isOpen) {\n popupManager.addPopup(this);\n this.$registerCloseEvents();\n this.setTheme(renderer.theme);\n }\n this.isOpen = true;\n this.addMarker(range, editor.session);\n this.range = Range.fromPoints(range.start, range.end);\n var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n var rect = renderer.scroller.getBoundingClientRect();\n if (position.pageX < rect.left)\n position.pageX = rect.left;\n var element = this.getElement();\n element.innerHTML = \"\";\n element.appendChild(domNode);\n element.style.maxHeight = \"\";\n element.style.display = \"block\";\n var labelHeight = element.clientHeight;\n var labelWidth = element.clientWidth;\n var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight;\n var isAbove = true;\n if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) {\n isAbove = false;\n }\n element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + \"px\";\n element.style.top = isAbove ? \"\" : position.pageY + renderer.lineHeight + \"px\";\n element.style.bottom = isAbove ? window.innerHeight - position.pageY + \"px\" : \"\";\n element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + \"px\";\n };\n HoverTooltip.prototype.addMarker = function (range, session) {\n if (this.marker) {\n this.$markerSession.removeMarker(this.marker);\n }\n this.$markerSession = session;\n this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n };\n HoverTooltip.prototype.hide = function (e) {\n if (!e && document.activeElement == this.getElement())\n return;\n if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n return;\n this.lastEvent = null;\n if (this.timeout)\n clearTimeout(this.timeout);\n this.timeout = null;\n this.addMarker(null);\n if (this.isOpen) {\n this.$removeCloseEvents();\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n popupManager.removePopup(this);\n }\n };\n HoverTooltip.prototype.$registerCloseEvents = function () {\n window.addEventListener(\"keydown\", this.hide, true);\n window.addEventListener(\"wheel\", this.hide, true);\n window.addEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.$removeCloseEvents = function () {\n window.removeEventListener(\"keydown\", this.hide, true);\n window.removeEventListener(\"wheel\", this.hide, true);\n window.removeEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.onMouseOut = function (e) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.lastEvent = null;\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n if (!e.relatedTarget.classList.contains(\"ace_content\"))\n this.hide();\n };\n return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/tooltip\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nvar nls = require(\"../config\").nls;\nvar GUTTER_TOOLTIP_LEFT_OFFSET = 5;\nvar GUTTER_TOOLTIP_TOP_OFFSET = 3;\nexports.GUTTER_TOOLTIP_LEFT_OFFSET = GUTTER_TOOLTIP_LEFT_OFFSET;\nexports.GUTTER_TOOLTIP_TOP_OFFSET = GUTTER_TOOLTIP_TOP_OFFSET;\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor, true);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\")\n return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n tooltip.showTooltip(row);\n if (!tooltip.isOpen)\n return;\n editor.on(\"mousewheel\", hideTooltip);\n editor.on(\"changeSession\", hideTooltip);\n window.addEventListener(\"keydown\", hideTooltip, true);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterRow = mouseEvent.getGutterRow();\n var gutterCell = gutter.$lines.get(gutterRow);\n if (gutterCell) {\n var gutterElement = gutterCell.element.querySelector(\".ace_gutter_annotation\");\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = (rect.right - GUTTER_TOOLTIP_LEFT_OFFSET) + \"px\";\n style.top = (rect.bottom - GUTTER_TOOLTIP_TOP_OFFSET) + \"px\";\n }\n else {\n moveTooltip(mouseEvent);\n }\n }\n }\n function hideTooltip(e) {\n if (e && e.type === \"keydown\" && (e.ctrlKey || e.metaKey))\n return;\n if (e && e.type === \"mouseout\" && (!e.relatedTarget || tooltip.getElement().contains(e.relatedTarget)))\n return;\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltip.isOpen) {\n tooltip.hideTooltip();\n editor.off(\"mousewheel\", hideTooltip);\n editor.off(\"changeSession\", hideTooltip);\n window.removeEventListener(\"keydown\", hideTooltip, true);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\") || dom.hasCssClass(target, \"ace_custom-widget\"))\n return hideTooltip();\n if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltip.isOpen)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip(e);\n }, 50);\n }, editor);\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n __extends(GutterTooltip, _super);\n function GutterTooltip(editor, isHover) {\n if (isHover === void 0) { isHover = false; }\n var _this = _super.call(this, editor.container) || this;\n _this.id = \"gt\" + (++GutterTooltip.$uid);\n _this.editor = editor;\n _this.visibleTooltipRow;\n var el = _this.getElement();\n el.setAttribute(\"role\", \"tooltip\");\n el.setAttribute(\"id\", _this.id);\n el.style.pointerEvents = \"auto\";\n if (isHover) {\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n }\n return _this;\n }\n GutterTooltip.prototype.onMouseOut = function (e) {\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n this.hideTooltip();\n };\n GutterTooltip.prototype.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n get: function () {\n return {\n error: {\n singular: nls(\"gutter-tooltip.aria-label.error.singular\", \"error\"),\n plural: nls(\"gutter-tooltip.aria-label.error.plural\", \"errors\")\n },\n security: {\n singular: nls(\"gutter-tooltip.aria-label.security.singular\", \"security finding\"),\n plural: nls(\"gutter-tooltip.aria-label.security.plural\", \"security findings\")\n },\n warning: {\n singular: nls(\"gutter-tooltip.aria-label.warning.singular\", \"warning\"),\n plural: nls(\"gutter-tooltip.aria-label.warning.plural\", \"warnings\")\n },\n info: {\n singular: nls(\"gutter-tooltip.aria-label.info.singular\", \"information message\"),\n plural: nls(\"gutter-tooltip.aria-label.info.plural\", \"information messages\")\n },\n hint: {\n singular: nls(\"gutter-tooltip.aria-label.hint.singular\", \"suggestion\"),\n plural: nls(\"gutter-tooltip.aria-label.hint.plural\", \"suggestions\")\n }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var _a;\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = {\n displayText: Array.from(annotationsInRow.displayText),\n type: Array.from(annotationsInRow.type)\n };\n else\n annotation = { displayText: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] };\n var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 };\n var mostSevereAnnotationTypeInFold;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!gutter.$annotations[i])\n continue;\n for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n var annotationType = gutter.$annotations[i].type[j];\n annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n if (!mostSevereAnnotationTypeInFold ||\n severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) {\n mostSevereAnnotationTypeInFold = annotationType;\n }\n }\n }\n if ([\"error\", \"security\", \"warning\"].includes(mostSevereAnnotationTypeInFold)) {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.displayText.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationTypeInFold + \"_fold\");\n }\n }\n if (annotation.displayText.length === 0)\n return this.hideTooltip();\n var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.displayText.length; i++) {\n var lineElement = dom.createElement(\"span\");\n var iconElement = dom.createElement(\"span\");\n (_a = iconElement.classList).add.apply(_a, [\"ace_\".concat(annotation.type[i]), iconClassName]);\n iconElement.setAttribute(\"aria-label\", \"\".concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular));\n iconElement.setAttribute(\"role\", \"img\");\n iconElement.appendChild(dom.createTextNode(\" \"));\n lineElement.appendChild(iconElement);\n lineElement.appendChild(dom.createTextNode(annotation.displayText[i]));\n lineElement.appendChild(dom.createElement(\"br\"));\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(lineElement);\n }\n var tooltipElement = this.getElement();\n dom.removeChildren(tooltipElement);\n annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); });\n tooltipElement.setAttribute(\"aria-live\", \"polite\");\n if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n var annotationNode = this.$findLinkedAnnotationNode(row);\n if (annotationNode) {\n annotationNode.setAttribute(\"aria-describedby\", this.id);\n }\n this.show();\n this.visibleTooltipRow = row;\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) {\n var cell = this.$findCellByRow(row);\n if (cell) {\n var element = cell.element;\n if (element.childNodes.length > 2) {\n return element.childNodes[2];\n }\n }\n };\n GutterTooltip.prototype.$findCellByRow = function (row) {\n return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; });\n };\n GutterTooltip.prototype.hideTooltip = function () {\n if (!this.isOpen) {\n return;\n }\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n if (this.visibleTooltipRow != undefined) {\n var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow);\n if (annotationNode) {\n annotationNode.removeAttribute(\"aria-describedby\");\n }\n }\n this.visibleTooltipRow = undefined;\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = [\"error\", \"security\", \"warning\", \"info\", \"hint\"];\n try {\n for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n var annotationType = annotationTypes_1_1.value;\n if (!annotations[annotationType].length)\n continue;\n var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return summary.join(\", \");\n };\n return GutterTooltip;\n}(Tooltip));\nGutterTooltip.$uid = 0;\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n }\n MouseEvent.prototype.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n MouseEvent.prototype.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n MouseEvent.prototype.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n MouseEvent.prototype.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n MouseEvent.prototype.getGutterRow = function () {\n var documentRow = this.getDocumentPosition().row;\n var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n return screenRow - screenTopRow;\n };\n MouseEvent.prototype.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n MouseEvent.prototype.getButton = function () {\n return event.getButton(this.domEvent);\n };\n MouseEvent.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n MouseEvent.prototype.getAccelKey = function () {\n return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n };\n return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && canExecuteCommand(\"selectall\") && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && canExecuteCommand(\"copy\") && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && canExecuteCommand(\"cut\") && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && canExecuteCommand(\"paste\") && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && canExecuteCommand(\"undo\") && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n canExecuteCommand(\"find\") && [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n canExecuteCommand(\"openCommandPalette\") && [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var canExecuteCommand = function (/** @type {string} */ cmd) {\n return editor.commands.canExecute(cmd, editor);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPalette\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!editor.getOption(\"enableMobileMenu\")) {\n if (contextMenu) {\n hideContextMenu();\n }\n return;\n }\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, //@ts-expect-error TODO: seems mistyping - should be boolean\n editor);\n }\n MouseHandler.prototype.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n MouseHandler.prototype.setState = function (state) {\n this.state = state;\n };\n MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var continueCapture = true;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n continueCapture = false;\n if (editor.session)\n onCaptureUpdate();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureUpdate = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n var onCaptureInterval = function () {\n if (continueCapture) {\n onCaptureUpdate();\n event.nextFrame(onCaptureInterval);\n }\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n onCaptureInterval();\n };\n MouseHandler.prototype.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n MouseHandler.prototype.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n }\n return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n }\n KeyBinding.prototype.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n KeyBinding.prototype.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n KeyBinding.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n KeyBinding.prototype.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n KeyBinding.prototype.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n }\n BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n BidiHandler.prototype.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n BidiHandler.prototype.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n BidiHandler.prototype.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n BidiHandler.prototype.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n BidiHandler.prototype.markAsDirty = function () {\n this.currentRow = null;\n };\n BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n BidiHandler.prototype.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n BidiHandler.prototype.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n BidiHandler.prototype.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n BidiHandler.prototype.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n BidiHandler.prototype.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n BidiHandler.prototype.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n }\n Selection.prototype.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n Selection.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n Selection.prototype.getCursor = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n Selection.prototype.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n Selection.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n Selection.prototype.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n Selection.prototype.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n Selection.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n Selection.prototype.setRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n Selection.prototype.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n Selection.prototype.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n Selection.prototype.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n Selection.prototype.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n Selection.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n Selection.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n Selection.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n Selection.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n Selection.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n Selection.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n Selection.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n Selection.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n Selection.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n Selection.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n Selection.prototype.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n Selection.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n Selection.prototype.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n Selection.prototype.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n Selection.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n Selection.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n Selection.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n Selection.prototype.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n Selection.prototype.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n Selection.prototype.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n Selection.prototype.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n Selection.prototype.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n Selection.prototype.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n Selection.prototype.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n Selection.prototype.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n Selection.prototype.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n Selection.prototype.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n Selection.prototype.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n Selection.prototype.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n Selection.prototype.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n Selection.prototype.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n Selection.prototype.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n Selection.prototype.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n Selection.prototype.toJSON = function () {\n if (this.rangeCount) { var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else { var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n Selection.prototype.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n Selection.prototype.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\n this.splitRegex;\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n }\n Tokenizer.prototype.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n Tokenizer.prototype.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n Tokenizer.prototype.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = /**@type{string}*/ (startState) || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state[\"processed\"] = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (includeName === \"$self\")\n includeName = \"start\";\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n }\n TokenIterator.prototype.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentTokenRow = function () {\n return this.$row;\n };\n TokenIterator.prototype.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n TokenIterator.prototype.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n TokenIterator.prototype.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n options = options || {};\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n var token = session.getTokenAt(cursor.row, cursor.column);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (token && /(?:string)\\.quasi|\\.xml/.test(token.type)) {\n var excludeTokens = [\n /tag\\-(?:open|name)/, /attribute\\-name/\n ];\n if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\\.quasi/.test(token.type)\n && token.value[cursor.column - token.start - 1] !== '$')\n return;\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(rightChar);\n var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n if (options.closeDocComment !== false) {\n this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n if (cursor.column === 0) {\n return;\n }\n var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\n var tokens = session.getTokens(cursor.row);\n var index = 0;\n for (var i = 0; i < tokens.length; i++) {\n index += tokens[i].value.length;\n var currentToken = tokens[i];\n if (index >= cursor.column) {\n if (index === cursor.column) {\n if (!/\\.doc/.test(currentToken.type)) {\n return;\n }\n if (/\\*\\//.test(currentToken.value)) {\n var nextToken = tokens[i + 1];\n if (!nextToken || !/\\.doc/.test(nextToken.type)) {\n return;\n }\n }\n }\n var cursorPosInToken = cursor.column - (index - currentToken.value.length);\n var closeDocPos = currentToken.value.indexOf(\"*/\");\n var openDocPos = currentToken.value.indexOf(\"/**\", closeDocPos > -1 ? closeDocPos + 2 : 0);\n if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) {\n return;\n }\n if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos\n && cursorPosInToken <= openDocPos || !/\\.doc/.test(currentToken.type)) {\n return;\n }\n break;\n }\n }\n var indent = this.$getIndent(line);\n if (/\\s*\\*/.test(nextLine)) {\n if (/^\\s*\\*/.test(line)) {\n return {\n text: text + indent + \"* \",\n selection: [1, 2 + indent.length, 1, 2 + indent.length]\n };\n }\n else {\n return {\n text: text + indent + \" * \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n }\n if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n return {\n text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n selection: [1, 4 + indent.length, 1, 4 + indent.length]\n };\n }\n }\n });\n }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n var _loop_1 = function (i) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] =\n function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this_1));\n };\n var this_1 = this;\n for (var i = 0; i < delegations.length; i++) {\n _loop_1(i);\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer[\"rules\"];\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n LineWidgets.prototype.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n return 1 + h;\n }\n else {\n return this[\"$wrapData\"][row].length + 1 + h;\n }\n };\n LineWidgets.prototype.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n LineWidgets.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n LineWidgets.prototype.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n LineWidgets.prototype.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n LineWidgets.prototype.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n LineWidgets.prototype.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n LineWidgets.prototype.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n LineWidgets.prototype.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n LineWidgets.prototype.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.text && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.textContent = w.text;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n if (w.className) {\n dom.addCssClass(w.el, w.className);\n }\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = \"5\";\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = \"3\";\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n LineWidgets.prototype.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n LineWidgets.prototype.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n LineWidgets.prototype.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n LineWidgets.prototype.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n LineWidgets.prototype.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n function Anchor(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof row != \"number\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n }\n Anchor.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n Anchor.prototype.getDocument = function () {\n return this.document;\n };\n Anchor.prototype.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n Anchor.prototype.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n Anchor.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n Anchor.prototype.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n Anchor.prototype.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n function Document(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n }\n Document.prototype.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n Document.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n Document.prototype.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n Document.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n Document.prototype.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n };\n Document.prototype.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n Document.prototype.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n Document.prototype.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n Document.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n Document.prototype.getLength = function () {\n return this.$lines.length;\n };\n Document.prototype.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n Document.prototype.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n Document.prototype.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n Document.prototype.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n Document.prototype.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n Document.prototype.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n Document.prototype.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n Document.prototype.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n Document.prototype.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n Document.prototype.pos = function (row, column) {\n return { row: row, column: column };\n };\n Document.prototype.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n Document.prototype.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n Document.prototype.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n Document.prototype.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n Document.prototype.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n Document.prototype.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n Document.prototype.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n Document.prototype.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n Document.prototype.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n Document.prototype.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n Document.prototype.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n Document.prototype.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n Document.prototype.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n Document.prototype.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n Document.prototype.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n function BackgroundTokenizer(tokenizer, session) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n }\n BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n BackgroundTokenizer.prototype.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n BackgroundTokenizer.prototype.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n BackgroundTokenizer.prototype.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n BackgroundTokenizer.prototype.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n BackgroundTokenizer.prototype.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n BackgroundTokenizer.prototype.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n function SearchHighlight(regExp, clazz, type) {\n if (type === void 0) { type = \"text\"; }\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type;\n this.docLen = 0;\n }\n SearchHighlight.prototype.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow;\n var end = config.lastRow;\n var renderedMarkerRanges = {};\n var _search = session.$editor && session.$editor.$search;\n var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions());\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null || session.getValue().length != this.docLen) {\n if (mtSearch) {\n ranges = [];\n var match = _search.$multiLineForward(session, this.regExp, i, end);\n if (match) {\n var end_row = match.endRow <= end ? match.endRow - 1 : end;\n if (end_row > i)\n i = end_row;\n ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol));\n }\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n }\n else {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n }\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n if (ranges.length === 0)\n continue;\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n this.docLen = session.getValue().length;\n };\n return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\n this.$keepRedoStack;\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n }\n UndoManager.prototype.addSession = function (session) {\n this.$session = session;\n };\n UndoManager.prototype.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n UndoManager.prototype.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n UndoManager.prototype.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n UndoManager.prototype.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n UndoManager.prototype.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n UndoManager.prototype.getRevision = function () {\n return this.$rev;\n };\n UndoManager.prototype.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n UndoManager.prototype.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n UndoManager.prototype.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n UndoManager.prototype.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n UndoManager.prototype.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n UndoManager.prototype.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n UndoManager.prototype.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n UndoManager.prototype.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n UndoManager.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n UndoManager.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n };\n UndoManager.prototype.fromJSON = function (json) {\n this.reset();\n this.$undoStack = json.$undoStack;\n this.$redoStack = json.$redoStack;\n };\n UndoManager.prototype.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n FoldLine.prototype.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n FoldLine.prototype.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n FoldLine.prototype.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n FoldLine.prototype.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n FoldLine.prototype.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n FoldLine.prototype.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n FoldLine.prototype.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n FoldLine.prototype.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n FoldLine.prototype.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n }\n RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n RangeList.prototype.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n RangeList.prototype.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n RangeList.prototype.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n RangeList.prototype.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n RangeList.prototype.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n RangeList.prototype.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n RangeList.prototype.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n RangeList.prototype.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n RangeList.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n RangeList.prototype.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n RangeList.prototype.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n RangeList.prototype.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n __extends(Fold, _super);\n function Fold(range, placeholder) {\n var _this = _super.call(this) || this;\n _this.foldLine = null;\n _this.placeholder = placeholder;\n _this.range = range;\n _this.start = range.start;\n _this.end = range.end;\n _this.sameRow = range.start.row == range.end.row;\n _this.subFolds = _this.ranges = [];\n return _this;\n }\n Fold.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n Fold.prototype.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n Fold.prototype.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n Fold.prototype.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n Fold.prototype.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (tryToUnfold) {\n var foldLine = this.getFoldLine(cursor.row);\n if (foldLine)\n this.expandFolds(foldLine.folds);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start|\\\\.doc\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator = new TokenIterator(this, row, column);\n var initState = this.getState(iterator.$row);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (initState.toString() !== state.toString())\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n if (range.start.row == range.end.row && range.start.column > range.end.column)\n return;\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n if (e instanceof MouseEvent)\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos, isBackwards) {\n var line = this.getLine(pos.row);\n var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n var chr = !isBackwards && line.charAt(pos.column - 1);\n var match = chr && chr.match(bracketsRegExp);\n if (!match) {\n chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(bracketsRegExp);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n .replace(/-close\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n .replace(/-open\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for \")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/line_widgets\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n function EditSession(text, mode) { this.doc;\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$editor = null;\n this.prevOp = {};\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.$gutterCustomWidgets = {};\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(/**@type{string}*/ (text));\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.selection.on(\"changeCursor\", this.$onSelectionChange);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n this.$initOperationListeners();\n }\n EditSession.prototype.$initOperationListeners = function () {\n var _this = this;\n this.curOp = null;\n this.on(\"change\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.docChanged = true;\n }, true);\n this.on(\"changeSelection\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.selectionChanged = true;\n }, true);\n this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n };\n EditSession.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command) {\n return;\n }\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n commandEvent = {};\n }\n this.$operationResetTimer.schedule();\n this.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n this._signal(\"startOperation\", commandEvent);\n };\n EditSession.prototype.endOperation = function (e) {\n if (this.curOp) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n this._signal(\"endOperation\", e);\n return;\n }\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\") {\n return;\n }\n var currentSelection = this.selection.toJSON();\n this.curOp.selectionAfter = currentSelection;\n this.$lastSel = this.selection.toJSON();\n this.getUndoManager().addSelection(currentSelection);\n this._signal(\"beforeEndOperation\");\n this.prevOp = this.curOp;\n this.curOp = null;\n this._signal(\"endOperation\", e);\n }\n };\n EditSession.prototype.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n EditSession.prototype.getDocument = function () {\n return this.doc;\n };\n Object.defineProperty(EditSession.prototype, \"widgetManager\", {\n get: function () {\n var widgetManager = new LineWidgets(this);\n this.widgetManager = widgetManager;\n if (this.$editor)\n widgetManager.attach(this.$editor);\n return widgetManager;\n },\n set: function (value) {\n Object.defineProperty(this, \"widgetManager\", {\n writable: true,\n enumerable: true,\n configurable: true,\n value: value,\n });\n },\n enumerable: false,\n configurable: true\n });\n EditSession.prototype.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n EditSession.prototype.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n EditSession.prototype.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n EditSession.prototype.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n EditSession.prototype.onSelectionChange = function () {\n this._signal(\"changeSelection\");\n };\n EditSession.prototype.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n EditSession.fromJSON = function (session) {\n if (typeof session == \"string\")\n session = JSON.parse(session);\n var undoManager = new UndoManager();\n undoManager.$undoStack = session.history.undo;\n undoManager.$redoStack = session.history.redo;\n undoManager.mark = session.history.mark;\n undoManager.$rev = session.history.rev;\n var editSession = new EditSession(session.value);\n session.folds.forEach(function (fold) {\n editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n });\n editSession.setAnnotations(session.annotations);\n editSession.setBreakpoints(session.breakpoints);\n editSession.setMode(session.mode);\n editSession.setScrollLeft(session.scrollLeft);\n editSession.setScrollTop(session.scrollTop);\n editSession.setUndoManager(undoManager);\n editSession.selection.fromJSON(session.selection);\n return editSession;\n };\n EditSession.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (fold) {\n return fold.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n };\n EditSession.prototype.toString = function () {\n return this.doc.getValue();\n };\n EditSession.prototype.getSelection = function () {\n return this.selection;\n };\n EditSession.prototype.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n EditSession.prototype.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n EditSession.prototype.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n EditSession.prototype.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n EditSession.prototype.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n EditSession.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n EditSession.prototype.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n EditSession.prototype.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n EditSession.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n EditSession.prototype.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n EditSession.prototype.getTabSize = function () {\n return this.$tabSize;\n };\n EditSession.prototype.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n EditSession.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n EditSession.prototype.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n EditSession.prototype.getOverwrite = function () {\n return this.$overwrite;\n };\n EditSession.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n EditSession.prototype.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.removeGutterCustomWidget = function (row) {\n if (this.$editor) {\n this.$editor.renderer.$gutterLayer.$removeCustomWidget(row);\n }\n };\n EditSession.prototype.addGutterCustomWidget = function (row, attributes) {\n if (this.$editor) {\n this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes);\n }\n };\n EditSession.prototype.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n };\n EditSession.prototype.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n EditSession.prototype.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n EditSession.prototype.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n EditSession.prototype.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n EditSession.prototype.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n EditSession.prototype.getAnnotations = function () {\n return this.$annotations || [];\n };\n EditSession.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n EditSession.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n EditSession.prototype.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n EditSession.prototype.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n EditSession.prototype.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n EditSession.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n EditSession.prototype.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n EditSession.prototype.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.destroyed) {\n return;\n }\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n EditSession.prototype.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n EditSession.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n EditSession.prototype.getMode = function () {\n return this.$mode;\n };\n EditSession.prototype.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n EditSession.prototype.getScrollTop = function () {\n return this.$scrollTop;\n };\n EditSession.prototype.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n EditSession.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n EditSession.prototype.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n EditSession.prototype.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n EditSession.prototype.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n EditSession.prototype.getLine = function (row) {\n return this.doc.getLine(row);\n };\n EditSession.prototype.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n EditSession.prototype.getLength = function () {\n return this.doc.getLength();\n };\n EditSession.prototype.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n EditSession.prototype.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n EditSession.prototype.remove = function (range) {\n return this.doc.remove(range);\n };\n EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n EditSession.prototype.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n EditSession.prototype.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n EditSession.prototype.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n EditSession.prototype.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n EditSession.prototype.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n EditSession.prototype.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n EditSession.prototype.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n EditSession.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n EditSession.prototype.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n EditSession.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n EditSession.prototype.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n EditSession.prototype.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n EditSession.prototype.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n EditSession.prototype.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n EditSession.prototype.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n EditSession.prototype.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n else\n pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n EditSession.prototype.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n EditSession.prototype.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n EditSession.prototype.getPrecedingCharacter = function () {\n var pos = this.selection.getCursor();\n if (pos.column === 0) {\n return pos.row === 0 ? \"\" : this.doc.getNewLineCharacter();\n }\n var currentLine = this.getLine(pos.row);\n return currentLine[pos.column - 1];\n };\n EditSession.prototype.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.endOperation();\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n if (this.selection) {\n this.selection.off(\"changeCursor\", this.$onSelectionChange);\n this.selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.selection.detach();\n };\n return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n min: null,\n max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n function Search() {\n this.$options = {};\n }\n Search.prototype.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n Search.prototype.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n Search.prototype.setOptions = function (options) {\n this.$options = options;\n };\n Search.prototype.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n Search.prototype.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var matches, i = 0; i < lines.length; i++) {\n if (this.$isMultilineSearch(options)) {\n var lng = lines.length - 1;\n matches = this.$multiLineForward(session, re, i, lng);\n if (matches) {\n var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng;\n if (end_row > i)\n i = end_row;\n ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol));\n }\n }\n else {\n matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n Search.prototype.parseReplaceString = function (replaceString) {\n var CharCode = {\n DollarSign: 36,\n Ampersand: 38,\n Digit0: 48,\n Digit1: 49,\n Digit9: 57,\n Backslash: 92,\n n: 110,\n t: 116\n };\n var replacement = '';\n for (var i = 0, len = replaceString.length; i < len; i++) {\n var chCode = replaceString.charCodeAt(i);\n if (chCode === CharCode.Backslash) {\n i++;\n if (i >= len) {\n replacement += \"\\\\\";\n break;\n }\n var nextChCode = replaceString.charCodeAt(i);\n switch (nextChCode) {\n case CharCode.Backslash:\n replacement += \"\\\\\";\n break;\n case CharCode.n:\n replacement += \"\\n\";\n break;\n case CharCode.t:\n replacement += \"\\t\";\n break;\n }\n continue;\n }\n if (chCode === CharCode.DollarSign) {\n i++;\n if (i >= len) {\n replacement += \"$\";\n break;\n }\n var nextChCode_1 = replaceString.charCodeAt(i);\n if (nextChCode_1 === CharCode.DollarSign) {\n replacement += \"$$\";\n continue;\n }\n if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) {\n replacement += \"$&\";\n continue;\n }\n if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) {\n replacement += \"$\" + replaceString[i];\n continue;\n }\n }\n replacement += replaceString[i];\n }\n return replacement || replaceString;\n };\n Search.prototype.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var mtSearch = this.$isMultilineSearch(options);\n if (mtSearch)\n input = input.replace(/\\r\\n|\\r|\\n/g, \"\\n\");\n var match = re.exec(input);\n if (!match || (!mtSearch && match[0].length != input.length))\n return null;\n replacement = options.regExp\n ? this.parseReplaceString(replacement)\n : replacement.replace(/\\$/g, \"$$$$\");\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n try {\n new RegExp(needle, \"u\");\n options.$supportsUnicodeFlag = true;\n modifier += \"u\";\n }\n catch (e) {\n options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n }\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n Search.prototype.$isMultilineSearch = function (options) {\n return options.re && /\\\\r\\\\n|\\\\r|\\\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine;\n };\n Search.prototype.$multiLineForward = function (session, re, start, last) {\n var line, chunk = chunkEnd(session, start);\n for (var row = start; row <= last;) {\n for (var i = 0; i < chunk; i++) {\n if (row > last)\n break;\n var next = session.getLine(row++);\n line = line == null ? next : line + \"\\n\" + next;\n }\n var match = re.exec(line);\n re.lastIndex = 0;\n if (match) {\n var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n var matchedText = match[0].split(\"\\n\");\n var startRow = start + beforeMatch.length - 1;\n var startCol = beforeMatch[beforeMatch.length - 1].length;\n var endRow = startRow + matchedText.length - 1;\n var endCol = matchedText.length == 1\n ? startCol + matchedText[0].length\n : matchedText[matchedText.length - 1].length;\n return {\n startRow: startRow,\n startCol: startCol,\n endRow: endRow,\n endCol: endCol\n };\n }\n }\n return null;\n };\n Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) {\n var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex;\n for (var row = start; row >= first;) {\n for (var i = 0; i < chunk && row >= first; i++) {\n var next = session.getLine(row--);\n line = line == null ? next : next + \"\\n\" + line;\n }\n var match = multiLineBackwardMatch(line, re, endMargin);\n if (match) {\n var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n var matchedText = match[0].split(\"\\n\");\n var startRow = row + beforeMatch.length;\n var startCol = beforeMatch[beforeMatch.length - 1].length;\n var endRow = startRow + matchedText.length - 1;\n var endCol = matchedText.length == 1\n ? startCol + matchedText[0].length\n : matchedText[matchedText.length - 1].length;\n return {\n startRow: startRow,\n startCol: startCol,\n endRow: endRow,\n endCol: endCol\n };\n }\n }\n return null;\n };\n Search.prototype.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var mtSearch = this.$isMultilineSearch(options);\n var mtForward = this.$multiLineForward;\n var mtBackward = this.$multiLineBackward;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var supportsUnicodeFlag = re.unicode;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n if (mtSearch) {\n var pos = mtBackward(session, re, endIndex, row, firstRow);\n if (!pos)\n return false;\n if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n return true;\n }\n else {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n re.lastIndex = startIndex;\n if (mtSearch) {\n var pos = mtForward(session, re, row, lastRow);\n if (pos) {\n var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow;\n if (end_row > row)\n row = end_row;\n }\n if (!pos)\n return false;\n if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n return true;\n }\n else {\n var line = session.getLine(row);\n var last;\n var m;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n if (last >= line.length)\n return false;\n }\n }\n }\n };\n }\n return { forEach: forEach };\n };\n return Search;\n}());\nfunction addWordBoundary(needle, options) {\n var supportsLookbehind = lang.supportsLookbehind();\n function wordBoundary(c, firstChar) {\n if (firstChar === void 0) { firstChar = true; }\n var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n if (wordRegExp.test(c) || options.regExp) {\n if (supportsLookbehind && options.$supportsUnicodeFlag) {\n if (firstChar)\n return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n }\n return \"\\\\b\";\n }\n return \"\";\n }\n var needleArray = Array.from(needle);\n var firstChar = needleArray[0];\n var lastChar = needleArray[needleArray.length - 1];\n return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nfunction multiLineBackwardMatch(line, re, endMargin) {\n var match = null;\n var from = 0;\n while (from <= line.length) {\n re.lastIndex = from;\n var newMatch = re.exec(line);\n if (!newMatch)\n break;\n var end = newMatch.index + newMatch[0].length;\n if (end > line.length - endMargin)\n break;\n if (!match || end > match.index + match[0].length)\n match = newMatch;\n from = newMatch.index + 1;\n }\n return match;\n}\nfunction chunkEnd(session, start) {\n var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row;\n return targetLine + 1;\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n function MultiHashHandler(config, platform) {\n this.$init(config, platform, false);\n }\n MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = $singleCommand;\n };\n MultiHashHandler.prototype.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n MultiHashHandler.prototype.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n MultiHashHandler.prototype.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n MultiHashHandler.prototype.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n MultiHashHandler.prototype.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n MultiHashHandler.prototype._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n MultiHashHandler.prototype.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n MultiHashHandler.prototype.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n return MultiHashHandler;\n}());\nfunction getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n __extends(HashHandler, _super);\n function HashHandler(config, platform) {\n var _this = _super.call(this, config, platform) || this;\n _this.$singleCommand = true;\n return _this;\n }\n return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager(platform, commands) {\n var _this = _super.call(this, commands, platform) || this;\n _this.byName = _this.commands;\n _this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n return _this;\n }\n CommandManager.prototype.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n var e = { editor: editor, command: command, args: args };\n if (!this.canExecute(command, editor)) {\n this._signal(\"commandUnavailable\", e);\n return false;\n }\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n CommandManager.prototype.canExecute = function (command, editor) {\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n return true;\n };\n CommandManager.prototype.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n CommandManager.prototype.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n CommandManager.prototype.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"openlink\",\n bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n exec: function (editor) { editor.openLink(); }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (editor) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\nvar GutterKeyboardHandler = /** @class */ (function () {\n function GutterKeyboardHandler(editor) {\n this.editor = editor;\n this.gutterLayer = editor.renderer.$gutterLayer;\n this.element = editor.renderer.$gutter;\n this.lines = editor.renderer.$gutterLayer.$lines;\n this.activeRowIndex = null;\n this.activeLane = null;\n this.annotationTooltip = new GutterTooltip(this.editor);\n }\n GutterKeyboardHandler.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n if (this.annotationTooltip.isOpen) {\n e.preventDefault();\n if (e.keyCode === keys[\"escape\"])\n this.annotationTooltip.hideTooltip();\n return;\n }\n if (e.target === this.element) {\n if (e.keyCode != keys[\"enter\"]) {\n return;\n }\n e.preventDefault();\n var row = this.editor.getCursorPosition().row;\n if (!this.editor.isRowVisible(row))\n this.editor.scrollToLine(row, true, true);\n setTimeout(\n function () {\n var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null)\n return;\n var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index);\n if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) {\n this.activeLane = \"fold\";\n this.activeRowIndex = nearestFoldLaneWidgetIndex;\n if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) {\n this.$focusCustomWidget(this.activeRowIndex);\n return;\n }\n else {\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n else {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }.bind(this), 10);\n return;\n }\n this.$handleGutterKeyboardInteraction(e);\n setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n }.bind(this), 10);\n };\n GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === keys[\"tab\"]) {\n e.preventDefault();\n return;\n }\n if (e.keyCode === keys[\"escape\"]) {\n e.preventDefault();\n this.$blurGutter();\n this.element.focus();\n this.lane = null;\n return;\n }\n if (e.keyCode === keys[\"up\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"down\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"left\"]) {\n e.preventDefault();\n this.$switchLane(\"annotation\");\n return;\n }\n if (e.keyCode === keys[\"right\"]) {\n e.preventDefault();\n this.$switchLane(\"fold\");\n return;\n }\n if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n var row = this.$rowIndexToRow(this.activeRowIndex);\n var customWidget = this.editor.session.$gutterCustomWidgets[row];\n if (customWidget) {\n if (customWidget.callbacks && customWidget.callbacks.onClick) {\n customWidget.callbacks.onClick(e, row);\n }\n }\n else if (this.gutterLayer.session.foldWidgets[row] === 'start') {\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(\n function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== row) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(row);\n this.$focusFoldWidget(this.activeRowIndex);\n }\n }.bind(this), 10);\n break;\n }\n else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n break;\n }\n return;\n case \"annotation\":\n var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n break;\n }\n return;\n }\n };\n GutterKeyboardHandler.prototype.$blurGutter = function () {\n if (this.activeRowIndex !== null) {\n switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\n return;\n };\n GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = !!this.$getCustomWidget(index);\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[1];\n };\n GutterKeyboardHandler.prototype.$getCustomWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[3];\n };\n GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) {\n if (this.$isCustomWidgetVisible(index))\n return index;\n if (this.$isFoldWidgetVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isCustomWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i))\n return index + i;\n if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n if (this.$isAnnotationVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n if (index == null)\n return;\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n foldWidget.focus();\n };\n GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) {\n if (index == null)\n return;\n var customWidget = this.$getCustomWidget(index);\n if (customWidget) {\n customWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n customWidget.focus();\n }\n };\n GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n if (index == null)\n return;\n var annotation = this.$getAnnotation(index);\n annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n annotation.focus();\n };\n GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n foldWidget.blur();\n };\n GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) {\n var customWidget = this.$getCustomWidget(index);\n if (customWidget) {\n customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n customWidget.blur();\n }\n };\n GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n var annotation = this.$getAnnotation(index);\n annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n annotation.blur();\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n if (this.$isFoldWidgetVisible(index)) {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n else {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n if (this.$isFoldWidgetVisible(index)) {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n else {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) {\n if (num1 === null)\n return num2;\n if (num2 === null)\n return num1;\n return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2;\n };\n GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n switch (desinationLane) {\n case \"annotation\":\n if (this.activeLane === \"annotation\") {\n break;\n }\n var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n if (annotationIndex == null) {\n break;\n }\n this.activeLane = \"annotation\";\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex);\n if (foldLaneWidgetIndex === null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldLaneWidgetIndex;\n if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n else {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n break;\n }\n return;\n };\n GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n var cell = this.lines.get(index);\n if (cell)\n return cell.row;\n return null;\n };\n GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n for (var i = 0; i < this.lines.getLength(); i++) {\n var cell = this.lines.get(i);\n if (cell.row == row)\n return i;\n }\n return null;\n };\n return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n this.gutterKeyboardHandler = gutterKeyboardHandler;\n this.domEvent = domEvent;\n }\n GutterKeyboardEvent.prototype.getKey = function () {\n return keys.keyCodeToString(this.domEvent.keyCode);\n };\n GutterKeyboardEvent.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n };\n GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"annotation\";\n };\n GutterKeyboardEvent.prototype.isInFoldLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"fold\";\n };\n return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar event = require(\"./lib/event\");\nvar HoverTooltip = require(\"./tooltip\").HoverTooltip;\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) {\n this.id = \"editor\" + (++Editor.$uid); this.session;\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n }\n Editor.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n this.session.startOperation(commandEvent);\n };\n Editor.prototype.endOperation = function (e) {\n this.session.endOperation(e);\n };\n Editor.prototype.onStartOperation = function (commandEvent) {\n this.curOp = this.session.curOp;\n this.curOp.scrollTop = this.renderer.scrollTop;\n this.prevOp = this.session.prevOp;\n if (!commandEvent) {\n this.previousCommand = null;\n }\n };\n Editor.prototype.onEndOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n return;\n }\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n this.$lastSel = this.session.selection.toJSON();\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n Editor.prototype.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n Editor.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n Editor.prototype.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.session.off(\"startOperation\", this.$onStartOperation);\n this.session.off(\"endOperation\", this.$onEndOperation);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.$onStartOperation = this.onStartOperation.bind(this);\n this.session.on(\"startOperation\", this.$onStartOperation);\n this.$onEndOperation = this.onEndOperation.bind(this);\n this.session.on(\"endOperation\", this.$onEndOperation);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n if (oldSession)\n oldSession.$editor = null;\n session && session._signal(\"changeEditor\", { editor: this });\n if (session)\n session.$editor = this;\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n Editor.prototype.getSession = function () {\n return this.session;\n };\n Editor.prototype.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n Editor.prototype.getValue = function () {\n return this.session.getValue();\n };\n Editor.prototype.getSelection = function () {\n return this.selection;\n };\n Editor.prototype.resize = function (force) {\n this.renderer.onResize(force);\n };\n Editor.prototype.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n Editor.prototype.getTheme = function () {\n return this.renderer.getTheme();\n };\n Editor.prototype.setStyle = function (style, incluude) {\n this.renderer.setStyle(style, incluude);\n };\n Editor.prototype.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n Editor.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n Editor.prototype.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n Editor.prototype.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var handler = self.getKeyboardHandler();\n var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges) {\n ranges = [\n tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName,\n tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName\n ];\n }\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n Editor.prototype.focus = function () {\n this.textInput.focus();\n };\n Editor.prototype.isFocused = function () {\n return this.textInput.isFocused();\n };\n Editor.prototype.blur = function () {\n this.textInput.blur();\n };\n Editor.prototype.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n Editor.prototype.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n Editor.prototype.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n Editor.prototype.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n Editor.prototype.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n Editor.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n Editor.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n Editor.prototype.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n Editor.prototype.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n Editor.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n Editor.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n Editor.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n Editor.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n Editor.prototype.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n Editor.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n Editor.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n Editor.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n Editor.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n Editor.prototype.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n Editor.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n Editor.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n Editor.prototype.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n Editor.prototype.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n Editor.prototype.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n Editor.prototype.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n Editor.prototype.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var ranges = this.selection.isEmpty()\n ? [new Range(0, 0, session.doc.getLength() - 1, 0)]\n : this.selection.getAllRanges();\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var tab = session.getTabString();\n for (var i = 0; i < ranges.length; i++) {\n var startRow = ranges[i].start.row;\n var endRow = ranges[i].end.row;\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n var line = session.getLine(row);\n var currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n var range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n }\n };\n Editor.prototype.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n Editor.prototype.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n Editor.prototype.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n Editor.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n Editor.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n Editor.prototype.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n Editor.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n Editor.prototype.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n Editor.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n Editor.prototype.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n Editor.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n Editor.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n Editor.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n Editor.prototype.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n Editor.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n Editor.prototype.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n Editor.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n Editor.prototype.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n Editor.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n Editor.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n Editor.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n Editor.prototype.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n Editor.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n Editor.prototype.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n Editor.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n Editor.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n Editor.prototype.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n Editor.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n Editor.prototype.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n Editor.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n Editor.prototype.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n Editor.prototype.setGhostText = function (text, position) {\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n this.renderer.removeGhostText();\n };\n Editor.prototype.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n Editor.prototype.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n Editor.prototype.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n Editor.prototype.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n Editor.prototype.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n Editor.prototype.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n Editor.prototype.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n Editor.prototype.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n Editor.prototype.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n Editor.prototype.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n Editor.prototype.findLinkAt = function (row, column) {\n var e_1, _a;\n var line = this.session.getLine(row);\n var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n var columnPosition = column;\n if (columnPosition < 0)\n columnPosition = 0;\n var previousPosition = 0, currentPosition = 0, match;\n try {\n for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n var item = wordParts_1_1.value;\n currentPosition = previousPosition + item.length;\n if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n }\n previousPosition = currentPosition;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return match;\n };\n Editor.prototype.openLink = function () {\n var cursor = this.selection.getCursor();\n var url = this.findLinkAt(cursor.row, cursor.column);\n if (url)\n window.open(url, '_blank');\n return url != null;\n };\n Editor.prototype.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n Editor.prototype.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range));\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n Editor.prototype.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n Editor.prototype.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n Editor.prototype.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n Editor.prototype.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n Editor.prototype.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n Editor.prototype.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n Editor.prototype.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n Editor.prototype.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n Editor.prototype.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n Editor.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n Editor.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n Editor.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n Editor.prototype.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n Editor.prototype.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n Editor.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n Editor.prototype.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n Editor.prototype.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n Editor.prototype.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n Editor.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n Editor.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n Editor.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n Editor.prototype.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n Editor.prototype.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n Editor.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n Editor.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n Editor.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n };\n Editor.prototype.selectAll = function () {\n this.selection.selectAll();\n };\n Editor.prototype.clearSelection = function () {\n this.selection.clearSelection();\n };\n Editor.prototype.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n Editor.prototype.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n Editor.prototype.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n Editor.prototype.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n Editor.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n Editor.prototype.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n Editor.prototype.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n Editor.prototype.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n Editor.prototype.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.destroy = function () {\n this.destroyed = true;\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = [];\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n Editor.prototype.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n Editor.prototype.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"ace/ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (/**@type{boolean}*/ readOnly) {\n var _this = this;\n this.textInput.setReadOnly(readOnly);\n if (this.destroyed)\n return;\n this.$resetCursorStyle();\n if (!this.$readOnlyCallback) {\n this.$readOnlyCallback = function (e) {\n var shouldShow = false;\n if (e && e.type == \"keydown\") {\n if (e && e.key && !e.ctrlKey && !e.metaKey) {\n if (e.key == \" \")\n e.preventDefault();\n shouldShow = e.key.length == 1;\n }\n if (!shouldShow)\n return;\n }\n else if (e && e.type !== \"exec\") {\n shouldShow = true;\n }\n if (shouldShow) {\n if (!_this.hoverTooltip) {\n _this.hoverTooltip = new HoverTooltip();\n }\n var domNode = dom.createElement(\"div\");\n domNode.textContent = nls(\"editor.tooltip.disable-editing\", \"Editing is disabled\");\n if (!_this.hoverTooltip.isOpen) {\n _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode);\n }\n }\n else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) {\n _this.hoverTooltip.hide();\n }\n };\n }\n var textArea = this.textInput.getElement();\n if (readOnly) {\n event.addListener(textArea, \"keydown\", this.$readOnlyCallback, this);\n this.commands.on(\"exec\", this.$readOnlyCallback);\n this.commands.on(\"commandUnavailable\", this.$readOnlyCallback);\n }\n else {\n event.removeListener(textArea, \"keydown\", this.$readOnlyCallback);\n this.commands.off(\"exec\", this.$readOnlyCallback);\n this.commands.off(\"commandUnavailable\", this.$readOnlyCallback);\n if (this.hoverTooltip) {\n this.hoverTooltip.destroy();\n this.hoverTooltip = null;\n }\n }\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var hasValue = this.session && (this.renderer.$composition ||\n this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n if (hasValue && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!hasValue && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!hasValue && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (value) {\n var blurCommand = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (editor) {\n editor.blur();\n editor.renderer.scroller.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n e.preventDefault();\n var row = this.getCursorPosition().row;\n if (!this.isRowVisible(row))\n this.scrollToLine(row, true, true);\n this.focus();\n }\n };\n var gutterKeyboardHandler;\n if (value) {\n this.renderer.enableKeyboardAccessibility = true;\n this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n this.renderer.scroller.setAttribute(\"tabindex\", 0);\n this.renderer.scroller.setAttribute(\"role\", \"group\");\n this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor.scroller.aria-roledescription\", \"editor\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"editor.scroller.aria-label\", \"Editor content, press Enter to start editing, press Escape to exit\"));\n this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n this.renderer.$gutter.setAttribute(\"role\", \"group\");\n this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor.gutter.aria-roledescription\", \"editor gutter\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"editor.gutter.aria-label\", \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-hidden\", true);\n if (!gutterKeyboardHandler)\n gutterKeyboardHandler = new GutterKeyboardHandler(this);\n gutterKeyboardHandler.addListener();\n this.textInput.setAriaOptions({\n setLabel: true\n });\n }\n else {\n this.renderer.enableKeyboardAccessibility = false;\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.textInput.setNumberOfExtraLines(0);\n this.renderer.scroller.setAttribute(\"tabindex\", -1);\n this.renderer.scroller.removeAttribute(\"role\");\n this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.removeAttribute(\"aria-label\");\n this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\n this.renderer.content.removeAttribute(\"aria-hidden\");\n this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n this.renderer.$gutter.removeAttribute(\"role\");\n this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n this.renderer.$gutter.removeAttribute(\"aria-label\");\n this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n if (gutterKeyboardHandler)\n gutterKeyboardHandler.removeListener();\n }\n },\n initialValue: false\n },\n textInputAriaLabel: {\n set: function (val) { this.$textInputAriaLabel = val; },\n initialValue: \"\"\n },\n enableMobileMenu: {\n set: function (val) { this.$enableMobileMenu = val; },\n initialValue: true\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, /**@type{Editor}*/ editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (/**@type{Editor}*/ editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (/**@type{Editor}*/ editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n }\n Lines.prototype.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n Lines.prototype.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n Lines.prototype.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n Lines.prototype.getLength = function () {\n return this.cells.length;\n };\n Lines.prototype.get = function (index) {\n return this.cells[index];\n };\n Lines.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n Lines.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n Lines.prototype.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n Lines.prototype.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n Lines.prototype.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n Lines.prototype.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n Lines.prototype.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n }\n Gutter.prototype.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n Gutter.prototype.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n Gutter.prototype.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n Gutter.prototype.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] };\n var annoText = annotation.text;\n var displayAnnoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n rowInfo.displayText.push(displayAnnoText);\n }\n var className = annotation.className;\n if (className) {\n rowInfo.className = className;\n }\n else if (annoType === \"error\") {\n rowInfo.className = \" ace_error\";\n }\n else if (annoType === \"security\" && !/\\bace_error\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_security\";\n }\n else if (annoType === \"warning\" && !/\\bace_(error|security)\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_warning\";\n }\n else if (annoType === \"info\" && !rowInfo.className) {\n rowInfo.className = \" ace_info\";\n }\n else if (annoType === \"hint\" && !rowInfo.className) {\n rowInfo.className = \" ace_hint\";\n }\n }\n };\n Gutter.prototype.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n Gutter.prototype.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n Gutter.prototype.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n Gutter.prototype.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n Gutter.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var annotationNode = element.childNodes[2];\n var customWidget = element.childNodes[3];\n var annotationIconNode = annotationNode.firstChild;\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var lineHeight = config.lineHeight + \"px\";\n var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n var rowText = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row] && row !== foldStart)\n className += this.$annotations[row].className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var foldClass = \"ace_fold-widget ace_\" + c;\n var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n if (isClosedFold) {\n foldClass += \" ace_closed\";\n var foldAnnotationClass = \"\";\n var annotationInFold = false;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!this.$annotations[i])\n continue;\n if (this.$annotations[i].className === \" ace_error\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_error_fold\";\n break;\n }\n if (this.$annotations[i].className === \" ace_security\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_security_fold\";\n }\n else if (this.$annotations[i].className === \" ace_warning\" &&\n foldAnnotationClass !== \" ace_security_fold\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n }\n }\n className += foldAnnotationClass;\n }\n else\n foldClass += \" ace_open\";\n if (foldWidget.className != foldClass)\n foldWidget.className = foldClass;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n foldWidget.setAttribute(\"role\", \"button\");\n foldWidget.setAttribute(\"tabindex\", \"-1\");\n var foldRange = session.getFoldWidgetRange(row);\n if (foldRange)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.range.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n foldRange.start.row + 1,\n foldRange.end.row + 1\n ]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.closed.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n fold.start.row + 1,\n fold.end.row + 1\n ]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.open.aria-label\", \"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.closed.title\", \"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.open.title\", \"Fold code\"));\n }\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n foldWidget.setAttribute(\"tabindex\", \"0\");\n foldWidget.removeAttribute(\"role\");\n foldWidget.removeAttribute(\"aria-label\");\n }\n }\n var customWidgetAttributes = this.session.$gutterCustomWidgets[row];\n if (customWidgetAttributes) {\n this.$addCustomWidget(row, customWidgetAttributes, cell);\n }\n else if (customWidget) {\n this.$removeCustomWidget(row, cell);\n }\n if (annotationInFold && this.$showFoldedAnnotations) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n annotationIconNode.className += foldAnnotationClass;\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (foldAnnotationClass) {\n case \" ace_error_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else if (this.$annotations[row]) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n if (this.$useSvgGutterIcons)\n annotationIconNode.className += this.$annotations[row].className;\n else\n element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (this.$annotations[row].className) {\n case \" ace_error\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n case \" ace_info\":\n ariaLabel = nls(\"gutter.annotation.aria-label.info\", \"Info, read annotations row $0\", [rowText]);\n break;\n case \" ace_hint\":\n ariaLabel = nls(\"gutter.annotation.aria-label.hint\", \"Suggestion, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n annotationNode.removeAttribute(\"aria-label\");\n annotationNode.removeAttribute(\"role\");\n annotationNode.setAttribute(\"tabindex\", \"0\");\n }\n if (rowText !== textNode.data) {\n textNode.data = rowText;\n }\n if (element.className != className)\n element.className = className;\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = rowText;\n if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\" && !customWidgetAttributes)\n cell.element.setAttribute(\"aria-hidden\", true);\n else\n cell.element.setAttribute(\"aria-hidden\", false);\n return cell;\n };\n Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n Gutter.prototype.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n Gutter.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n Gutter.prototype.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n Gutter.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n Gutter.prototype.$hideFoldWidget = function (row, cell) {\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var foldWidget = rowCell.element.childNodes[1];\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n };\n Gutter.prototype.$showFoldWidget = function (row, cell) {\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var foldWidget = rowCell.element.childNodes[1];\n if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) {\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n }\n }\n };\n Gutter.prototype.$getGutterCell = function (row) {\n var cells = this.$lines.cells;\n var visibileRow = this.session.documentToScreenRow(row, 0);\n return cells[row - this.config.firstRowScreen - (row - visibileRow)];\n };\n Gutter.prototype.$addCustomWidget = function (row, _a, cell) {\n var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks;\n this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks };\n this.$hideFoldWidget(row, cell);\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n if (customWidget) {\n customWidget.remove();\n }\n customWidget = dom.createElement(\"span\");\n customWidget.className = \"ace_custom-widget \".concat(className);\n customWidget.setAttribute(\"tabindex\", \"-1\");\n customWidget.setAttribute(\"role\", 'button');\n customWidget.setAttribute(\"aria-label\", label);\n customWidget.setAttribute(\"title\", title);\n dom.setStyle(customWidget.style, \"display\", \"inline-block\");\n dom.setStyle(customWidget.style, \"height\", \"inherit\");\n if (callbacks && callbacks.onClick) {\n customWidget.addEventListener(\"click\", function (e) {\n callbacks.onClick(e, row);\n e.stopPropagation();\n });\n }\n rowCell.element.appendChild(customWidget);\n }\n };\n Gutter.prototype.$removeCustomWidget = function (row, cell) {\n delete this.session.$gutterCustomWidgets[row];\n this.$showFoldWidget(row, cell);\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n if (customWidget) {\n rowCell.element.removeChild(customWidget);\n }\n }\n };\n Gutter.prototype.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n Gutter.prototype.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = \"\";\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n var annotationNode = dom.createElement(\"span\");\n element.appendChild(annotationNode);\n var annotationIconNode = dom.createElement(\"span\");\n annotationNode.appendChild(annotationIconNode);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n }\n Marker.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Marker.prototype.setSession = function (session) {\n this.session = session;\n };\n Marker.prototype.setMarkers = function (markers) {\n this.markers = markers;\n };\n Marker.prototype.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n Marker.prototype.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n Marker.prototype.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:\" + padding + \"px;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:\" + padding + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n }\n Text.prototype.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n Text.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n Text.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n Text.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n Text.prototype.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", \n function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n Text.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n Text.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n Text.prototype.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n Text.prototype.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n Text.prototype.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n Text.prototype.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n Text.prototype.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n Text.prototype.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break; var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n Text.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n Text.prototype.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069\\u2060\\u2061\\u2062\\u2063\\u2064\\u206A\\u206B\\u206B\\u206C\\u206D\\u206E\\u206F]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n var text = self.$tabStrings[tabSize].cloneNode(true);\n text[\"charCount\"] = 1;\n valueFragment.appendChild(text);\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!isTextToken(token.type)) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") {\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.setAttribute(\"title\", nls(\"inline-fold.closed.title\", \"Unfold code\"));\n }\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n Text.prototype.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n Text.prototype.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n Text.prototype.$clearActiveIndentGuide = function () {\n var activeIndentGuides = this.element.querySelectorAll(\".ace_indent-guide-active\");\n for (var i = 0; i < activeIndentGuides.length; i++) {\n activeIndentGuides[i].classList.remove(\"ace_indent-guide-active\");\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var element = cell.element;\n if (cell.element.classList && cell.element.classList.contains(\"ace_line_group\")) {\n if (cell.element.childNodes.length > 0) {\n element = cell.element.childNodes[0];\n }\n else {\n return;\n }\n }\n var childNodes = element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n Text.prototype.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row < this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n Text.prototype.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n var text = this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element);\n text[\"charCount\"] = 0; // not to take into account when we are counting columns\n lineEl.appendChild(text);\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n Text.prototype.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"\" : \"\";\n parent.appendChild(overflowEl);\n };\n Text.prototype.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n Text.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n }\n Cursor.prototype.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n Cursor.prototype.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n Cursor.prototype.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n Cursor.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Cursor.prototype.setSession = function (session) {\n this.session = session;\n };\n Cursor.prototype.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n Cursor.prototype.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n Cursor.prototype.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n Cursor.prototype.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = /**@this{Cursor}*/ function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n Cursor.prototype.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n Cursor.prototype.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n Cursor.prototype.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n Cursor.prototype.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n Cursor.prototype.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n function Scrollbar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n }\n Scrollbar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n _this.width = dom.scrollbarWidth(parent.ownerDocument);\n _this.inner.style.width =\n _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.height = renderer.$scrollbarWidth;\n _this.inner.style.height =\n _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n return _this;\n }\n HScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n HScrollBar.prototype.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n function ScrollBar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n ScrollBar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n _this.parent = parent;\n _this.width = _this.VScrollWidth;\n _this.renderer = renderer;\n _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n VScrollBar.prototype.getHeight = function () {\n return this.height;\n };\n VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n VScrollBar.prototype.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.scrollWidth = 0;\n _this.height = _this.HScrollHeight;\n _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n _this.renderer = renderer;\n return _this;\n }\n HScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n HScrollBar.prototype.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n }\n RenderLoop.prototype.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n RenderLoop.prototype.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n function FontMetrics(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n }\n FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n FontMetrics.prototype.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n FontMetrics.prototype.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n FontMetrics.prototype.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n FontMetrics.prototype.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n FontMetrics.prototype.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n FontMetrics.prototype.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n FontMetrics.prototype.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n FontMetrics.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n FontMetrics.prototype.$getZoom = function (element) {\n if (!element || !element.parentElement)\n return 1;\n return (Number(window.getComputedStyle(element)[\"zoom\"]) || 1) * this.$getZoom(element.parentElement);\n };\n FontMetrics.prototype.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n padding: 3px 4px;\\n position: absolute;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre-wrap;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n overflow: auto;\\n max-width: min(33em, 66vw);\\n overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget, .ace_custom-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_custom-widget {\\n background: none;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n position: relative;\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n z-index: 1;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n}\\n\\n.ace_ghost_text_container > div {\\n white-space: pre;\\n}\\n\\n.ghost_text_line_wrapped::after {\\n content: \\\"\\u21A9\\\";\\n position: absolute;\\n}\\n\\n.ace_lineWidgetContainer.ace_ghost_text {\\n margin: 0px 4px\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}\\n\\n.ace_hidden_token {\\n display: none;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n function Decorator(scrollbarV, renderer) {\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\",\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\",\n };\n this.setScrollBarV(scrollbarV);\n }\n Decorator.prototype.$createCanvas = function () {\n this.canvas = dom.createElement(\"canvas\");\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = \"7\";\n this.canvas.style.position = \"absolute\";\n };\n Decorator.prototype.setScrollBarV = function (scrollbarV) {\n this.$createCanvas();\n this.scrollbarV = scrollbarV;\n scrollbarV.element.appendChild(this.canvas);\n this.setDimensions();\n };\n Decorator.prototype.$updateDecorators = function (config) {\n if (typeof this.canvas.getContext !== \"function\") {\n return;\n }\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n this.setDimensions(config);\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item[\"priority\"] = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var offset1 = this.getVerticalOffsetForRow(row);\n var offset2 = offset1 + this.lineHeight;\n var y1 = Math.round(this.heightRatio * offset1);\n var y2 = Math.round(this.heightRatio * offset2);\n var ycenter = Math.round((y1 + y2) / 2);\n var halfHeight = (y2 - ycenter);\n if (halfHeight < this.halfMinDecorationHeight) {\n halfHeight = this.halfMinDecorationHeight;\n }\n if (ycenter - halfHeight < 0) {\n ycenter = halfHeight;\n }\n if (ycenter + halfHeight > this.canvasHeight) {\n ycenter = this.canvasHeight - halfHeight;\n }\n var from = ycenter - halfHeight;\n var to = ycenter + halfHeight;\n var zoneHeight = to - from;\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.getVerticalOffsetForRow = function (row) {\n row = row | 0;\n var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight;\n return offset;\n };\n Decorator.prototype.setDimensions = function (config) {\n config = config || this.renderer.layerConfig;\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n this.canvasWidth = this.scrollbarV.width || this.canvasWidth;\n this.setZoneWidth();\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n if (this.maxHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n };\n Decorator.prototype.setZoneWidth = function () {\n this.oneZoneWidth = this.canvasWidth;\n };\n Decorator.prototype.destroy = function () {\n this.canvas.parentNode.removeChild(this.canvas);\n };\n return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar isTextToken = require(\"./layer/text_util\").isTextToken;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n function VirtualRenderer(container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n this.$addResizeObserver();\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n }\n VirtualRenderer.prototype.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n VirtualRenderer.prototype.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n VirtualRenderer.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n VirtualRenderer.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n VirtualRenderer.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n VirtualRenderer.prototype.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n VirtualRenderer.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n VirtualRenderer.prototype.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!height && this.$maxLines && this.lineHeight > 1) {\n if (!el.style.height || el.style.height == \"0px\") {\n el.style.height = \"1px\";\n height = el.clientHeight || el.scrollHeight;\n }\n }\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (this.$resizeTimer)\n this.$resizeTimer.cancel();\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n VirtualRenderer.prototype.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n VirtualRenderer.prototype.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n VirtualRenderer.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n VirtualRenderer.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n VirtualRenderer.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n this.setOption(\"printMarginColumn\", printMarginColumn);\n };\n VirtualRenderer.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n VirtualRenderer.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n VirtualRenderer.prototype.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n VirtualRenderer.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n VirtualRenderer.prototype.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n VirtualRenderer.prototype.getContainerElement = function () {\n return this.container;\n };\n VirtualRenderer.prototype.getMouseEventTarget = function () {\n return this.scroller;\n };\n VirtualRenderer.prototype.getTextAreaContainer = function () {\n return this.container;\n };\n VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n VirtualRenderer.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n VirtualRenderer.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n VirtualRenderer.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n VirtualRenderer.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n VirtualRenderer.prototype.freeze = function () {\n this.$frozen = true;\n };\n VirtualRenderer.prototype.unfreeze = function () {\n this.$frozen = false;\n };\n VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n if (this.enableKeyboardAccessibility)\n this.scroller.className += this.keyboardFocusClassName;\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n VirtualRenderer.prototype.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n VirtualRenderer.prototype.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1) {\n this.$autosize();\n hideScrollbars = size.height <= 2 * this.lineHeight;\n }\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n if (offset < 0 && firstRowScreen > 0) {\n firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight));\n offset = this.scrollTop - firstRowScreen * lineHeight;\n }\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n VirtualRenderer.prototype.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n VirtualRenderer.prototype.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n VirtualRenderer.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n VirtualRenderer.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n this._rows = rows;\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n VirtualRenderer.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n VirtualRenderer.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var newLeft = pos.left;\n var newTop = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n if (this.$scrollAnimation) {\n this.$stopAnimation = true;\n }\n var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (currentTop + topMargin > newTop) {\n if (offset && currentTop + topMargin > newTop + this.lineHeight)\n newTop -= offset * this.$size.scrollerHeight;\n if (newTop === 0)\n newTop = -this.scrollMargin.top;\n this.session.setScrollTop(newTop);\n }\n else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n newTop += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var currentLeft = this.scrollLeft;\n var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n if (newLeft - twoCharsWidth < currentLeft) {\n newLeft -= twoCharsWidth;\n if (newLeft < this.$padding + twoCharsWidth) {\n newLeft = -this.scrollMargin.left;\n }\n this.session.setScrollLeft(newLeft);\n }\n else {\n newLeft += twoCharsWidth;\n if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n }\n };\n VirtualRenderer.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n VirtualRenderer.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n VirtualRenderer.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n VirtualRenderer.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n VirtualRenderer.prototype.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n function endAnimation() {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n _self.$stopAnimation = false;\n callback && callback();\n }\n this.$timer = setInterval(function () {\n if (_self.$stopAnimation) {\n endAnimation();\n return;\n }\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n endAnimation();\n }\n }, 10);\n };\n VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n VirtualRenderer.prototype.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n VirtualRenderer.prototype.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n VirtualRenderer.prototype.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n VirtualRenderer.prototype.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n VirtualRenderer.prototype.setGhostText = function (text, position) {\n var cursor = this.session.selection.cursor;\n var insertPosition = position || { row: cursor.row, column: cursor.column };\n this.removeGhostText();\n var textChunks = this.$calculateWrappedTextChunks(text, insertPosition);\n this.addToken(textChunks[0].text, \"ghost_text\", insertPosition.row, insertPosition.column);\n this.$ghostText = {\n text: text,\n position: {\n row: insertPosition.row,\n column: insertPosition.column\n }\n };\n var widgetDiv = dom.createElement(\"div\");\n if (textChunks.length > 1) {\n var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column);\n var lastLineDiv;\n textChunks.slice(1).forEach(function (el) {\n var chunkDiv = dom.createElement(\"div\");\n var chunkSpan = dom.createElement(\"span\");\n chunkSpan.className = \"ace_ghost_text\";\n if (el.wrapped)\n chunkDiv.className = \"ghost_text_line_wrapped\";\n if (el.text.length === 0)\n el.text = \" \";\n chunkSpan.appendChild(dom.createTextNode(el.text));\n chunkDiv.appendChild(chunkSpan);\n widgetDiv.appendChild(chunkDiv);\n lastLineDiv = chunkDiv;\n });\n hiddenTokens.forEach(function (token) {\n var element = dom.createElement(\"span\");\n if (!isTextToken(token.type))\n element.className = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n element.appendChild(dom.createTextNode(token.value));\n lastLineDiv.appendChild(element);\n });\n this.$ghostTextWidget = {\n el: widgetDiv,\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text_container\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n var el = this.container;\n var height = el.getBoundingClientRect().height;\n var ghostTextHeight = textChunks.length * this.lineHeight;\n var fitsY = ghostTextHeight < (height - pixelPosition.top);\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textChunks.length - 1) * this.lineHeight);\n }\n else {\n this.scrollToRow(insertPosition.row);\n }\n }\n };\n VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth) - 2;\n limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small\n var textLines = text.split(/\\r?\\n/);\n var textChunks = [];\n for (var i = 0; i < textLines.length; i++) {\n var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column);\n var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize);\n if (wrapSplits.length > 0) {\n var start = 0;\n wrapSplits.push(textLines[i].length);\n for (var j = 0; j < wrapSplits.length; j++) {\n var textSlice = textLines[i].slice(start, wrapSplits[j]);\n textChunks.push({ text: textSlice, wrapped: true });\n start = wrapSplits[j];\n }\n }\n else {\n textChunks.push({ text: textLines[i], wrapped: false });\n }\n }\n return textChunks;\n };\n VirtualRenderer.prototype.removeGhostText = function () {\n if (!this.$ghostText)\n return;\n var position = this.$ghostText.position;\n this.removeExtraToken(position.row, position.column);\n if (this.$ghostTextWidget) {\n this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n this.$ghostTextWidget = null;\n }\n this.$ghostText = null;\n };\n VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null || !tokens.length) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) {\n var tokens = this.session.getTokens(row);\n var l = 0;\n var hasPassedCursor = false;\n var hiddenTokens = [];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (token.type === \"ghost_text\")\n continue;\n if (hasPassedCursor) {\n hiddenTokens.push({ type: token.type, value: token.value });\n token.type = \"hidden_token\";\n continue;\n }\n if (l === column) {\n hasPassedCursor = true;\n }\n }\n this.updateLines(row, row);\n return hiddenTokens;\n };\n VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n this.session.bgTokenizer.lines[row] = null;\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n if (useragent.isSafari && _self.scroller) {\n _self.scroller.style.background = \"red\";\n _self.scroller.style.background = \"\";\n }\n }\n };\n VirtualRenderer.prototype.getTheme = function () {\n return this.$themeId;\n };\n VirtualRenderer.prototype.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n VirtualRenderer.prototype.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n VirtualRenderer.prototype.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n VirtualRenderer.prototype.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n VirtualRenderer.prototype.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n this.setOption(\"useResizeObserver\", false);\n };\n VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n if (!this.$scrollDecorator) {\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.$scrollDecorator.setScrollBarV(this.scrollBarV);\n this.$scrollDecorator.$updateDecorators();\n }\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n VirtualRenderer.prototype.$addResizeObserver = function () {\n if (!window.ResizeObserver || this.$resizeObserver)\n return;\n var self = this;\n this.$resizeTimer = lang.delayedCall(function () {\n if (!self.destroyed)\n self.onResize();\n }, 50);\n this.$resizeObserver = new window.ResizeObserver(function (e) {\n var w = e[0].contentRect.width;\n var h = e[0].contentRect.height;\n if (Math.abs(self.$size.width - w) > 1\n || Math.abs(self.$size.height - h) > 1) {\n self.$resizeTimer.delay();\n }\n else {\n self.$resizeTimer.cancel();\n }\n });\n this.$resizeObserver.observe(this.container);\n };\n return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (value) {\n if (!value && this.$resizeObserver) {\n this.$resizeObserver.disconnect();\n this.$resizeTimer.cancel();\n this.$resizeTimer = this.$resizeObserver = null;\n }\n else if (value && !this.$resizeObserver) {\n this.$addResizeObserver();\n }\n }\n },\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n useSvgGutterIcons: {\n set: function (value) {\n this.$gutterLayer.$useSvgGutterIcons = value;\n },\n initialValue: false\n },\n showFoldedAnnotations: {\n set: function (value) {\n this.$gutterLayer.$showFoldedAnnotations = value;\n },\n initialValue: false\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker.onerror = function(e) {\n e.preventDefault();\n };\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n PlaceHolder.prototype.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n PlaceHolder.prototype.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n PlaceHolder.prototype.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n PlaceHolder.prototype.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n PlaceHolder.prototype.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n PlaceHolder.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n PlaceHolder.prototype.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp_1.start.row;\n range.start.column = tmp_1.start.column;\n range.end.row = tmp_1.end.row;\n range.end.column = tmp_1.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){/**\n * ## Error Marker extension\n *\n * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips\n * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with\n * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity.\n *\n * @module\n */\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n displayText: [nls(\"error-marker.good-state\", \"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n gutterAnno.displayText.forEach(function (annoTextLine, i) {\n el.appendChild(dom.createTextNode(annoTextLine));\n if (i < gutterAnno.displayText.length - 1) {\n el.appendChild(dom.createElement(\"br\"));\n }\n });\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n editor.on(\"destroy\", function () {\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nvar version = exports.config.version;\nexports.version = version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n ","ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\nvar VARIABLES = {\n CURRENT_WORD: function (editor) {\n return editor.session.getTextRange(editor.session.getWordRange());\n },\n SELECTION: function (editor, name, indentation) {\n var text = editor.session.getTextRange();\n if (indentation)\n return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n return text;\n },\n CURRENT_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row);\n },\n PREV_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row - 1);\n },\n LINE_INDEX: function (editor) {\n return editor.getCursorPosition().row;\n },\n LINE_NUMBER: function (editor) {\n return editor.getCursorPosition().row + 1;\n },\n SOFT_TABS: function (editor) {\n return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function (editor) {\n return editor.session.getTabSize();\n },\n CLIPBOARD: function (editor) {\n return clipboard.getText && clipboard.getText();\n },\n FILENAME: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n },\n FILENAME_BASE: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function (editor) {\n return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function (editor) { return \"/not implemented.txt\"; },\n WORKSPACE_NAME: function () { return \"Unknown\"; },\n FULLNAME: function () { return \"Unknown\"; },\n BLOCK_COMMENT_START: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.end || \"\";\n },\n LINE_COMMENT: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.lineCommentStart || \"\";\n },\n CURRENT_YEAR: date.bind(null, { year: \"numeric\" }),\n CURRENT_YEAR_SHORT: date.bind(null, { year: \"2-digit\" }),\n CURRENT_MONTH: date.bind(null, { month: \"numeric\" }),\n CURRENT_MONTH_NAME: date.bind(null, { month: \"long\" }),\n CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: \"short\" }),\n CURRENT_DATE: date.bind(null, { day: \"2-digit\" }),\n CURRENT_DAY_NAME: date.bind(null, { weekday: \"long\" }),\n CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: \"short\" }),\n CURRENT_HOUR: date.bind(null, { hour: \"2-digit\", hour12: false }),\n CURRENT_MINUTE: date.bind(null, { minute: \"2-digit\" }),\n CURRENT_SECOND: date.bind(null, { second: \"2-digit\" })\n};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = /** @class */ (function () {\n function SnippetManager() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.variables = VARIABLES;\n }\n SnippetManager.prototype.getTokenizer = function () {\n return SnippetManager[\"$tokenizer\"] || this.createTokenizer();\n };\n SnippetManager.prototype.createTokenizer = function () {\n function TabstopToken(str) {\n str = str.substr(1);\n if (/^\\d+$/.test(str))\n return [{ tabstopId: parseInt(str, 10) }];\n return [{ text: str }];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n var formatMatcher = {\n regex: \"/(\" + escape(\"/\") + \"+)/\",\n onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.fmtString = true;\n ts.guard = val.slice(1, -1);\n ts.flag = \"\";\n return \"\";\n },\n next: \"formatString\"\n };\n SnippetManager[\"$tokenizer\"] = new Tokenizer({\n start: [\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n }\n else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n }\n return [val];\n } },\n { regex: /}/, onMatch: function (val, state, stack) {\n return [stack.length ? stack.shift() : val];\n } },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken },\n { regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function (str, state, stack) {\n var t = TabstopToken(str.substr(1));\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\" },\n { regex: /\\n/, token: \"newline\", merge: false }\n ],\n snippetVar: [\n { regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function (val, state, stack) {\n var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n return operator.length == 2 ? operator[1] : \"\\x00\";\n }).split(\"\\x00\").map(function (value) {\n return { value: value };\n });\n stack[0].choices = choices;\n return [choices[0]];\n }, next: \"start\" },\n formatMatcher,\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\" }\n ],\n formatString: [\n { regex: /:/, onMatch: function (val, state, stack) {\n if (stack.length && stack[0].expectElse) {\n stack[0].expectElse = false;\n stack[0].ifEnd = { elseEnd: stack[0] };\n return [stack[0].ifEnd];\n }\n return \":\";\n } },\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length)\n val = ch;\n else if (\"`$\\\\\".indexOf(ch) != -1)\n val = ch;\n else if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\t\";\n else if (\"ulULE\".indexOf(ch) != -1)\n val = { changeCase: ch, local: ch > \"a\" };\n return [val];\n } },\n { regex: \"/\\\\w*}\", onMatch: function (val, state, stack) {\n var next = stack.shift();\n if (next)\n next.flag = val.slice(1, -1);\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: function (val, state, stack) {\n return [{ text: val.slice(1) }];\n } },\n { regex: /\\${\\w+/, onMatch: function (val, state, stack) {\n var token = { text: val.slice(2) };\n stack.unshift(token);\n return [token];\n }, next: \"formatStringVar\" },\n { regex: /\\n/, token: \"newline\", merge: false },\n { regex: /}/, onMatch: function (val, state, stack) {\n var next = stack.shift();\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" }\n ],\n formatStringVar: [\n { regex: /:\\/\\w+}/, onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.formatFunction = val.slice(2, -1);\n return [stack.shift()];\n }, next: \"formatString\" },\n formatMatcher,\n { regex: /:[\\?\\-+]?/, onMatch: function (val, state, stack) {\n if (val[1] == \"+\")\n stack[0].ifEnd = stack[0];\n if (val[1] == \"?\")\n stack[0].expectElse = true;\n }, next: \"formatString\" },\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\" }\n ]\n });\n return SnippetManager[\"$tokenizer\"];\n };\n SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n return x.value || x;\n });\n };\n SnippetManager.prototype.getVariableValue = function (editor, name, indentation) {\n if (/^\\d+$/.test(name))\n return (this.variables.__ || {})[name] || \"\";\n if (/^[A-Z]\\d+$/.test(name))\n return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n name = name.replace(/^TM_/, \"\");\n if (!this.variables.hasOwnProperty(name))\n return \"\";\n var value = this.variables[name];\n if (typeof value == \"function\")\n value = this.variables[name](editor, name, indentation);\n return value == null ? \"\" : value;\n };\n SnippetManager.prototype.tmStrFormat = function (str, ch, editor) {\n if (!ch.fmt)\n return str;\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n var _self = this;\n var formatted = str.replace(re, function () {\n var oldArgs = _self.variables.__;\n _self.variables.__ = [].slice.call(arguments);\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n }\n else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n }\n else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n }\n else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n _self.variables.__ = oldArgs;\n return fmtParts.join(\"\");\n });\n return formatted;\n };\n SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) {\n if (ch.formatFunction == \"upcase\")\n return str.toUpperCase();\n if (ch.formatFunction == \"downcase\")\n return str.toLowerCase();\n return str;\n };\n SnippetManager.prototype.resolveVariables = function (snippet, editor) {\n var result = [];\n var indentation = \"\";\n var afterNewLine = true;\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n if (ch == \"\\n\") {\n afterNewLine = true;\n indentation = \"\";\n }\n else if (afterNewLine) {\n indentation = /^\\t*/.exec(ch)[0];\n afterNewLine = /\\S/.test(ch);\n }\n continue;\n }\n if (!ch)\n continue;\n afterNewLine = false;\n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1)\n j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\n }\n if (ch.text) {\n var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n if (ch.fmtString)\n value = this.tmStrFormat(value, ch, editor);\n if (ch.formatFunction)\n value = this.tmFormatFunction(value, ch, editor);\n if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n }\n else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n }\n else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n }\n else if (ch.tabstopId != null) {\n result.push(ch);\n }\n else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) {\n var processedSnippet = processSnippetText.call(this, editor, snippetText);\n return processedSnippet.text;\n };\n SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var processedSnippet = processSnippetText.call(this, editor, snippetText, options);\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, processedSnippet.text);\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId);\n };\n SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText, options);\n editor.forEachSelection(function () {\n self.insertSnippetForSelection(editor, snippetText, options);\n }, null, { keepOrder: true });\n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n SnippetManager.prototype.$getScope = function (editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp)\n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n return scope;\n };\n SnippetManager.prototype.getActiveScopes = function (editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n SnippetManager.prototype.expandWithTab = function (editor, options) {\n var self = this;\n var result = editor.forEachSelection(function () {\n return self.expandSnippetForSelection(editor, options);\n }, null, { keepOrder: true });\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n SnippetManager.prototype.expandSnippetForSelection = function (editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n SnippetManager.prototype.register = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n if (!snippets)\n snippets = [];\n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n }\n else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n if (s.prefix)\n s.tabTrigger = s.prefix;\n if (!s.content && s.body)\n s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n }\n else {\n Object.keys(snippets).forEach(function (key) {\n addSnippet(snippets[key]);\n });\n }\n this._signal(\"registerSnippets\", { scope: scope });\n };\n SnippetManager.prototype.unregister = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope || scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope || scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n SnippetManager.prototype.parseSnippetFile = function (str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], /**@type{Snippet}*/ snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n }\n catch (e) { }\n }\n if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n }\n else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n }\n else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n }\n else if (key) {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n SnippetManager.prototype.getSnippetByName = function (name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n return SnippetManager;\n}());\noop.implement(SnippetManager.prototype, EventEmitter);\nvar processSnippetText = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function (x) {\n if (x == \"\\n\" && !options.excludeExtraIndent)\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function (p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n ts.parents = {};\n }\n if (ts.indexOf(p) !== -1)\n return;\n if (p.choices && !ts.choices)\n ts.choices = p.choices;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function (t) { return typeof t === \"object\"; });\n if (isNested && !ts.value) {\n ts.value = value;\n }\n else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function (ts) { ts.length = 0; });\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || { tabstopId: p.tabstopId };\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var ts = tabstops[id];\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p) {\n delete expanding[id];\n Object.keys(expanding).forEach(function (parentId) {\n ts.parents[parentId] = true;\n });\n }\n continue;\n }\n expanding[id] = p;\n var value = ts.value;\n if (typeof value !== \"string\")\n value = copyValue(value);\n else if (p.fmt)\n value = this.tmStrFormat(value, p, editor);\n tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function (t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1) {\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n }\n else\n column += t.length;\n text += t;\n }\n else if (t) {\n if (!t.start)\n t.start = { row: row, column: column };\n else\n t.end = { row: row, column: column };\n }\n });\n return {\n text: text,\n tabstops: tabstops,\n tokens: tokens\n };\n};\nvar TabstopManager = /** @class */ (function () {\n function TabstopManager(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n }\n TabstopManager.prototype.attach = function (editor) {\n this.$openTabstops = null;\n this.selectedTabstop = null;\n this.editor = editor;\n this.session = editor.session;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n TabstopManager.prototype.detach = function () {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges.length = 0;\n this.tabstops.length = 0;\n this.selectedTabstop = null;\n this.editor.off(\"change\", this.$onChange);\n this.editor.off(\"changeSelection\", this.$onChangeSelection);\n this.editor.off(\"changeSession\", this.$onChangeSession);\n this.editor.commands.off(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.session = null;\n this.editor = null;\n };\n TabstopManager.prototype.onChange = function (delta) {\n var isRemove = delta.action[0] == \"r\";\n var selectedTabstop = this.selectedTabstop || {};\n var parents = selectedTabstop.parents || {};\n var tabstops = this.tabstops.slice();\n for (var i = 0; i < tabstops.length; i++) {\n var ts = tabstops[i];\n var active = ts == selectedTabstop || parents[ts.index];\n ts.rangeList.$bias = active ? 0 : 1;\n if (delta.action == \"remove\" && ts !== selectedTabstop) {\n var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n for (var j = 0; j < toRemove.length; j++)\n this.removeRange(toRemove[j]);\n }\n ts.rangeList.$onChange(delta);\n }\n var session = this.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n this.detach();\n };\n TabstopManager.prototype.updateLinkedFields = function () {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n return;\n this.$inChange = true;\n var session = this.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = 0; i < ts.length; i++) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var original = range.original;\n var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n TabstopManager.prototype.onAfterExec = function (e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n TabstopManager.prototype.onChangeSelection = function () {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = 0; i < this.ranges.length; i++) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n TabstopManager.prototype.onChangeSession = function () {\n this.detach();\n };\n TabstopManager.prototype.tabNext = function (dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n this.updateTabstopMarkers();\n if (index === 0) {\n this.detach();\n }\n };\n TabstopManager.prototype.selectTabstop = function (index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (ts.choices)\n range.cursor = range.start;\n if (!this.editor.inVirtualSelectionMode) {\n var sel = this.editor.multiSelect;\n sel.toSingleRange(range);\n for (var i = 0; i < ts.length; i++) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n }\n else {\n this.editor.selection.fromOrientedRange(range);\n }\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n if (this.selectedTabstop && this.selectedTabstop.choices)\n this.editor.execCommand(\"startAutocomplete\", { matches: this.selectedTabstop.choices });\n };\n TabstopManager.prototype.addTabstops = function (tabstops, start, end) {\n var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n var snippetId = this.snippetId = (this.snippetId || 0) + 1;\n tabstops.forEach(function (ts, index) {\n var dest = this.$openTabstops[index] || ts;\n dest.snippetId = snippetId;\n for (var i = 0; i < ts.length; i++) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString || (dest.firstNonLinked && useLink)) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n }\n else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n dest.rangeList = dest.rangeList || new RangeList();\n dest.rangeList.$bias = 0;\n dest.rangeList.addList(dest);\n }, this);\n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n TabstopManager.prototype.addTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n TabstopManager.prototype.removeTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n TabstopManager.prototype.updateTabstopMarkers = function () {\n if (!this.selectedTabstop)\n return;\n var currentSnippetId = this.selectedTabstop.snippetId;\n if (this.selectedTabstop.index === 0) {\n currentSnippetId--;\n }\n this.tabstops.forEach(function (ts) {\n if (ts.snippetId === currentSnippetId)\n this.addTabstopMarkers(ts);\n else\n this.removeTabstopMarkers(ts);\n }, this);\n };\n TabstopManager.prototype.removeRange = function (range) {\n var i = range.tabstop.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1)\n this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n this.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n return TabstopManager;\n}());\nTabstopManager.prototype.keyboardHandler = new HashHandler();\nTabstopManager.prototype.keyboardHandler.bindKeys({\n \"Tab\": function (editor) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n return;\n editor.tabstopManager.tabNext(1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Shift-Tab\": function (editor) {\n editor.tabstopManager.tabNext(-1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Esc\": function (editor) {\n editor.tabstopManager.detach();\n }\n});\nvar movePoint = function (point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\ndom.importCssString(\"\\n.ace_snippet-marker {\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n background: rgba(194, 193, 208, 0.09);\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\n position: absolute;\\n}\", \"snippets.css\", false);\nexports.snippetManager = new SnippetManager();\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.insertSnippet = function (content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function (options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\nvar nls = require(\"../config\").nls;\nvar userAgent = require(\"./../lib/useragent\");\nvar getAriaId = function (index) {\n return \"suggest-aria-id:\".concat(index);\n};\nvar popupAriaRole = userAgent.isSafari ? \"menu\" : \"listbox\";\nvar optionAriaRole = userAgent.isSafari ? \"menuitem\" : \"option\";\nvar ariaActiveState = userAgent.isSafari ? \"aria-current\" : \"aria-selected\";\nvar $singleLineEditor = function (el) {\n var renderer = new Renderer(el);\n renderer.$maxLines = 4;\n var editor = new Editor(renderer);\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n editor.$mouseHandler.$focusTimeout = 0;\n editor.$highlightTagPending = true;\n return editor;\n};\nvar AcePopup = /** @class */ (function () {\n function AcePopup(parentNode) {\n var el = dom.createElement(\"div\");\n var popup = $singleLineEditor(el);\n if (parentNode) {\n parentNode.appendChild(el);\n }\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n popup.renderer.$textLayer.element.setAttribute(\"role\", popupAriaRole);\n popup.renderer.$textLayer.element.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.aria-roledescription\", \"Autocomplete suggestions\"));\n popup.renderer.$textLayer.element.setAttribute(\"aria-label\", nls(\"autocomplete.popup.aria-label\", \"Autocomplete suggestions\"));\n popup.renderer.textarea.setAttribute(\"aria-hidden\", \"true\");\n popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n var noop = function () { };\n popup.focus = noop;\n popup.$isFocused = true;\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = \"0\";\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n popup.on(\"mousedown\", function (e) {\n var pos = e.getDocumentPosition();\n popup.selection.moveToPosition(pos);\n selectionMarker.start.row = selectionMarker.end.row = pos.row;\n e.stop();\n });\n var lastMouseEvent;\n var hoverMarker = new Range(-1, 0, -1, Infinity);\n var selectionMarker = new Range(-1, 0, -1, Infinity);\n selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n popup.setSelectOnHover = function (val) {\n if (!val) {\n hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n }\n else if (hoverMarker.id) {\n popup.session.removeMarker(hoverMarker.id);\n hoverMarker.id = null;\n }\n };\n popup.setSelectOnHover(false);\n popup.on(\"mousemove\", function (e) {\n if (!lastMouseEvent) {\n lastMouseEvent = e;\n return;\n }\n if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n return;\n }\n lastMouseEvent = e;\n lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n popup.isMouseOver = true;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (hoverMarker.start.row != row) {\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row);\n }\n });\n popup.renderer.on(\"beforeRender\", function () {\n if (lastMouseEvent && hoverMarker.start.row != -1) {\n lastMouseEvent.$pos = null;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row, true);\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var t = popup.renderer.$textLayer;\n for (var row = t.config.firstRow, l = t.config.lastRow; row <= l; row++) {\n var popupRowElement = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n popupRowElement.setAttribute(\"role\", optionAriaRole);\n popupRowElement.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.item.aria-roledescription\", \"item\"));\n popupRowElement.setAttribute(\"aria-setsize\", popup.data.length);\n popupRowElement.setAttribute(\"aria-describedby\", \"doc-tooltip\");\n popupRowElement.setAttribute(\"aria-posinset\", row + 1);\n var rowData = popup.getData(row);\n if (rowData) {\n var ariaLabel = \"\".concat(rowData.caption || rowData.value).concat(rowData.meta ? \", \".concat(rowData.meta) : '');\n popupRowElement.setAttribute(\"aria-label\", ariaLabel);\n }\n var highlightedSpans = popupRowElement.querySelectorAll(\".ace_completion-highlight\");\n highlightedSpans.forEach(function (span) {\n span.setAttribute(\"role\", \"mark\");\n });\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var row = popup.getRow();\n var t = popup.renderer.$textLayer;\n var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n var el = document.activeElement; // Active element is textarea of main editor\n if (selected !== popup.selectedNode && popup.selectedNode) {\n dom.removeCssClass(popup.selectedNode, \"ace_selected\");\n popup.selectedNode.removeAttribute(ariaActiveState);\n popup.selectedNode.removeAttribute(\"id\");\n }\n el.removeAttribute(\"aria-activedescendant\");\n popup.selectedNode = selected;\n if (selected) {\n var ariaId = getAriaId(row);\n dom.addCssClass(selected, \"ace_selected\");\n selected.id = ariaId;\n t.element.setAttribute(\"aria-activedescendant\", ariaId);\n el.setAttribute(\"aria-activedescendant\", ariaId);\n selected.setAttribute(ariaActiveState, \"true\");\n }\n });\n var hideHoverMarker = function () { setHoverMarker(-1); };\n var setHoverMarker = function (row, suppressRedraw) {\n if (row !== hoverMarker.start.row) {\n hoverMarker.start.row = hoverMarker.end.row = row;\n if (!suppressRedraw)\n popup.session._emit(\"changeBackMarker\");\n popup._emit(\"changeHoverMarker\");\n }\n };\n popup.getHoveredRow = function () {\n return hoverMarker.start.row;\n };\n event.addListener(popup.container, \"mouseout\", function () {\n popup.isMouseOver = false;\n hideHoverMarker();\n });\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\n popup.session.doc.getLength = function () {\n return popup.data.length;\n };\n popup.session.doc.getLine = function (i) {\n var data = popup.data[i];\n if (typeof data == \"string\")\n return data;\n return (data && data.value) || \"\";\n };\n var bgTokenizer = popup.session.bgTokenizer;\n bgTokenizer.$tokenizeRow = function (row) {\n var data = popup.data[row];\n var tokens = [];\n if (!data)\n return tokens;\n if (typeof data == \"string\")\n data = { value: data };\n var caption = data.caption || data.value || data.name;\n function addToken(value, className) {\n value && tokens.push({\n type: (data.className || \"\") + (className || \"\"),\n value: value\n });\n }\n var lower = caption.toLowerCase();\n var filterText = (popup.filterText || \"\").toLowerCase();\n var lastIndex = 0;\n var lastI = 0;\n for (var i = 0; i <= filterText.length; i++) {\n if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n var sub = filterText.slice(lastI, i);\n lastI = i;\n var index = lower.indexOf(sub, lastIndex);\n if (index == -1)\n continue;\n addToken(caption.slice(lastIndex, index), \"\");\n lastIndex = index + sub.length;\n addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n }\n }\n addToken(caption.slice(lastIndex, caption.length), \"\");\n tokens.push({ type: \"completion-spacer\", value: \" \" });\n if (data.meta)\n tokens.push({ type: \"completion-meta\", value: data.meta });\n if (data.message)\n tokens.push({ type: \"completion-message\", value: data.message });\n return tokens;\n };\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\n popup.session.$computeWidth = function () {\n return this.screenWidth = 0;\n };\n popup.isOpen = false;\n popup.isTopdown = false;\n popup.autoSelect = true;\n popup.filterText = \"\";\n popup.isMouseOver = false;\n popup.data = [];\n popup.setData = function (list, filterText) {\n popup.filterText = filterText || \"\";\n popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n popup.data = list || [];\n popup.setRow(0);\n };\n popup.getData = function (row) {\n return popup.data[row];\n };\n popup.getRow = function () {\n return selectionMarker.start.row;\n };\n popup.setRow = function (line) {\n line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line));\n if (selectionMarker.start.row != line) {\n popup.selection.clearSelection();\n selectionMarker.start.row = selectionMarker.end.row = line || 0;\n popup.session._emit(\"changeBackMarker\");\n popup.moveCursorTo(line || 0, 0);\n if (popup.isOpen)\n popup._signal(\"select\");\n }\n };\n popup.on(\"changeSelection\", function () {\n if (popup.isOpen)\n popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\n });\n popup.hide = function () {\n this.container.style.display = \"none\";\n popup.anchorPos = null;\n popup.anchor = null;\n if (popup.isOpen) {\n popup.isOpen = false;\n this._signal(\"hide\");\n }\n };\n popup.tryShow = function (pos, lineHeight, anchor, forceShow) {\n if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor &&\n popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left &&\n popup.anchor === anchor) {\n return true;\n }\n var el = this.container;\n var scrollBarSize = this.renderer.scrollBar.width || 10;\n var screenHeight = window.innerHeight - scrollBarSize;\n var screenWidth = window.innerWidth - scrollBarSize;\n var renderer = this.renderer;\n var maxH = renderer.$maxLines * lineHeight * 1.4;\n var dims = { top: 0, bottom: 0, left: 0 };\n var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight;\n var spaceAbove = pos.top - 3 * this.$borderSize;\n if (!anchor) {\n if (spaceAbove <= spaceBelow || spaceBelow >= maxH) {\n anchor = \"bottom\";\n }\n else {\n anchor = \"top\";\n }\n }\n if (anchor === \"top\") {\n dims.bottom = pos.top - this.$borderSize;\n dims.top = dims.bottom - maxH;\n }\n else if (anchor === \"bottom\") {\n dims.top = pos.top + lineHeight + this.$borderSize;\n dims.bottom = dims.top + maxH;\n }\n var fitsX = dims.top >= 0 && dims.bottom <= screenHeight;\n if (!forceShow && !fitsX) {\n return false;\n }\n if (!fitsX) {\n if (anchor === \"top\") {\n renderer.$maxPixelHeight = spaceAbove;\n }\n else {\n renderer.$maxPixelHeight = spaceBelow;\n }\n }\n else {\n renderer.$maxPixelHeight = null;\n }\n el.style.display = \"\";\n var rootRect = el.offsetParent && el.offsetParent.getBoundingClientRect();\n if (anchor === \"top\") {\n el.style.top = \"\";\n el.style.bottom = (screenHeight + scrollBarSize - dims.bottom)\n - (rootRect ? screenHeight + scrollBarSize - rootRect.bottom : 0) + \"px\";\n popup.isTopdown = false;\n }\n else {\n el.style.top = (dims.top - (rootRect ? rootRect.top : 0)) + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n el.style.left = (left - (rootRect ? rootRect.left : 0)) + \"px\";\n el.style.right = \"\";\n if (!popup.isOpen) {\n popup.isOpen = true;\n this._signal(\"show\");\n lastMouseEvent = null;\n }\n popup.anchorPos = pos;\n popup.anchor = anchor;\n return true;\n };\n popup.show = function (pos, lineHeight, topdownOnly) {\n this.tryShow(pos, lineHeight, topdownOnly ? \"bottom\" : undefined, true);\n };\n popup.goTo = function (where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n switch (where) {\n case \"up\":\n row = row <= 0 ? max : row - 1;\n break;\n case \"down\":\n row = row >= max ? -1 : row + 1;\n break;\n case \"start\":\n row = 0;\n break;\n case \"end\":\n row = max;\n break;\n }\n this.setRow(row);\n };\n popup.getTextLeftOffset = function () {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n return popup;\n }\n return AcePopup;\n}());\ndom.importCssString(\"\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #CAD6FA;\\n z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid #abbffe;\\n margin-top: -1px;\\n background: rgba(233,233,253,0.4);\\n position: absolute;\\n z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid rgba(109, 150, 13, 0.8);\\n background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n opacity: 0.5;\\n margin-left: 0.9em;\\n}\\n.ace_completion-message {\\n margin-left: 0.9em;\\n color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n width: 300px;\\n z-index: 200000;\\n border: 1px lightgray solid;\\n position: absolute;\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n line-height: 1.4;\\n background: #fefefe;\\n color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n border: 1px #484747 solid;\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n line-height: 1.4;\\n background: #25282c;\\n color: #c1c1c1;\\n}\\n.ace_autocomplete .ace_text-layer {\\n width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n display: flex;\\n align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n min-width: 0;\\n flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n flex: 0 1 auto;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0px;\\n height: 2px;\\n width: 8%;\\n background: blue;\\n z-index: 100;\\n animation: ace_progress 3s infinite linear;\\n animation-delay: 300ms;\\n transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n 0% { transform: translateX(-100%) scaleX(1) }\\n 50% { transform: translateX(625%) scaleX(2) } \\n 100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n .ace_autocomplete.ace_loading:after {\\n transform: translateX(625%) scaleX(2);\\n animation: none;\\n }\\n}\\n\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\nexports.getAriaId = getAriaId;\n\n});\n\nace.define(\"ace/autocomplete/inline_screenreader\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar AceInlineScreenReader = /** @class */ (function () {\n function AceInlineScreenReader(editor) {\n this.editor = editor;\n this.screenReaderDiv = document.createElement(\"div\");\n this.screenReaderDiv.classList.add(\"ace_screenreader-only\");\n this.editor.container.appendChild(this.screenReaderDiv);\n }\n AceInlineScreenReader.prototype.setScreenReaderContent = function (content) {\n if (!this.popup && this.editor.completer && /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup) {\n this.popup = /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup;\n this.popup.renderer.on(\"afterRender\", function () {\n var row = this.popup.getRow();\n var t = this.popup.renderer.$textLayer;\n var selected = t.element.childNodes[row - t.config.firstRow];\n if (selected) {\n var idString = \"doc-tooltip \";\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n idString += \"ace-inline-screenreader-line-\".concat(lineIndex, \" \");\n }\n selected.setAttribute(\"aria-describedby\", idString);\n }\n }.bind(this));\n }\n while (this.screenReaderDiv.firstChild) {\n this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);\n }\n this._lines = content.split(/\\r\\n|\\r|\\n/);\n var codeElement = this.createCodeBlock();\n this.screenReaderDiv.appendChild(codeElement);\n };\n AceInlineScreenReader.prototype.destroy = function () {\n this.screenReaderDiv.remove();\n };\n AceInlineScreenReader.prototype.createCodeBlock = function () {\n var container = document.createElement(\"pre\");\n container.setAttribute(\"id\", \"ace-inline-screenreader\");\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n var codeElement = document.createElement(\"code\");\n codeElement.setAttribute(\"id\", \"ace-inline-screenreader-line-\".concat(lineIndex));\n var line = document.createTextNode(this._lines[lineIndex]);\n codeElement.appendChild(line);\n container.appendChild(codeElement);\n }\n return container;\n };\n return AceInlineScreenReader;\n}());\nexports.AceInlineScreenReader = AceInlineScreenReader;\n\n});\n\nace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete/inline_screenreader\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar AceInlineScreenReader = require(\"./inline_screenreader\").AceInlineScreenReader;\nvar AceInline = /** @class */ (function () {\n function AceInline() {\n this.editor = null;\n }\n AceInline.prototype.show = function (editor, completion, prefix) {\n prefix = prefix || \"\";\n if (editor && this.editor && this.editor !== editor) {\n this.hide();\n this.editor = null;\n this.inlineScreenReader = null;\n }\n if (!editor || !completion) {\n return false;\n }\n if (!this.inlineScreenReader) {\n this.inlineScreenReader = new AceInlineScreenReader(editor);\n }\n var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value;\n if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) {\n return false;\n }\n this.editor = editor;\n this.inlineScreenReader.setScreenReaderContent(displayText);\n displayText = displayText.slice(prefix.length);\n if (displayText === \"\") {\n editor.removeGhostText();\n }\n else {\n editor.setGhostText(displayText);\n }\n return true;\n };\n AceInline.prototype.isOpen = function () {\n if (!this.editor) {\n return false;\n }\n return !!this.editor.renderer.$ghostText;\n };\n AceInline.prototype.hide = function () {\n if (!this.editor) {\n return false;\n }\n this.editor.removeGhostText();\n return true;\n };\n AceInline.prototype.destroy = function () {\n this.hide();\n this.editor = null;\n if (this.inlineScreenReader) {\n this.inlineScreenReader.destroy();\n this.inlineScreenReader = null;\n }\n };\n return AceInline;\n}());\nexports.AceInline = AceInline;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.parForEach = function (array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0)\n callback();\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function (result, err) {\n completed++;\n if (completed === arLength)\n callback(result, err);\n });\n }\n};\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\nexports.retrievePrecedingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos - 1; i >= 0; i--) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf.reverse().join(\"\");\n};\nexports.retrieveFollowingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf;\n};\nexports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function (completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function (identifierRegex) {\n if (!prefix && identifierRegex)\n prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\nexports.triggerAutocomplete = function (editor, previousChar) {\n var previousChar = previousChar == null\n ? editor.session.getPrecedingCharacter()\n : previousChar;\n return editor.completers.some(function (completer) {\n if (completer.triggerCharacters && Array.isArray(completer.triggerCharacters)) {\n return completer.triggerCharacters.includes(previousChar);\n }\n });\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/inline\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\",\"ace/lib/event\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar AceInline = require(\"./autocomplete/inline\").AceInline;\nvar getAriaId = require(\"./autocomplete/popup\").getAriaId;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\nvar event = require(\"./lib/event\");\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar destroyCompleter = function (e, editor) {\n editor.completer && editor.completer.destroy();\n};\nvar Autocomplete = /** @class */ (function () {\n function Autocomplete() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.autoShown = false;\n this.exactMatch = false;\n this.inlineEnabled = false;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n this.parentNode = null;\n this.setSelectOnHover = false;\n this.hasSeen = new Set();\n this.showLoadingState = false;\n this.stickySelectionDelay = 500;\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n this.onLayoutChange = this.onLayoutChange.bind(this);\n this.changeTimer = lang.delayedCall(function () {\n this.updateCompletions(true);\n }.bind(this));\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50);\n this.stickySelectionTimer = lang.delayedCall(function () {\n this.stickySelection = true;\n }.bind(this), this.stickySelectionDelay);\n this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () {\n var initialPosition = this.completionProvider && this.completionProvider.initialPosition;\n if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0)\n return;\n this.completions = new FilteredList(Autocomplete.completionsForLoading);\n this.openPopup(this.editor, initialPosition.prefix, false);\n this.popup.renderer.setStyle(\"ace_loading\", true);\n }.bind(this), this.stickySelectionDelay);\n }\n Object.defineProperty(Autocomplete, \"completionsForLoading\", {\n get: function () {\n return [{\n caption: config.nls(\"autocomplete.loading\", \"Loading...\"),\n value: \"\"\n }];\n },\n enumerable: false,\n configurable: true\n });\n Autocomplete.prototype.$init = function () {\n this.popup = new AcePopup(this.parentNode || document.body || document.documentElement);\n this.popup.on(\"click\", function (e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.$onPopupShow.bind(this));\n this.popup.on(\"hide\", this.$onHidePopup.bind(this));\n this.popup.on(\"select\", this.$onPopupChange.bind(this));\n event.addListener(this.popup.container, \"mouseout\", this.mouseOutListener.bind(this));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n this.popup.renderer.on(\"afterRender\", this.$onPopupRender.bind(this));\n return this.popup;\n };\n Autocomplete.prototype.$initInline = function () {\n if (!this.inlineEnabled || this.inlineRenderer)\n return;\n this.inlineRenderer = new AceInline();\n return this.inlineRenderer;\n };\n Autocomplete.prototype.getPopup = function () {\n return this.popup || this.$init();\n };\n Autocomplete.prototype.$onHidePopup = function () {\n if (this.inlineRenderer) {\n this.inlineRenderer.hide();\n }\n this.hideDocTooltip();\n this.stickySelectionTimer.cancel();\n this.popupTimer.cancel();\n this.stickySelection = false;\n };\n Autocomplete.prototype.$seen = function (completion) {\n if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === \"function\") {\n completion.completer.onSeen(this.editor, completion);\n this.hasSeen.add(completion);\n }\n };\n Autocomplete.prototype.$onPopupChange = function (hide) {\n if (this.inlineRenderer && this.inlineEnabled) {\n var completion = hide ? null : this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n if (this.popup.isMouseOver && this.setSelectOnHover) {\n this.tooltipTimer.call(null, null);\n return;\n }\n this.popupTimer.schedule();\n this.tooltipTimer.schedule();\n }\n else {\n this.popupTimer.call(null, null);\n this.tooltipTimer.call(null, null);\n }\n };\n Autocomplete.prototype.$updateGhostText = function (completion) {\n var row = this.base.row;\n var column = this.base.column;\n var cursorColumn = this.editor.getCursorPosition().column;\n var prefix = this.editor.session.getLine(row).slice(column, cursorColumn);\n if (!this.inlineRenderer.show(this.editor, completion, prefix)) {\n this.inlineRenderer.hide();\n }\n else {\n this.$seen(completion);\n }\n };\n Autocomplete.prototype.$onPopupRender = function () {\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) {\n for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) {\n var completion = this.popup.getData(i);\n if (completion && (!inlineEnabled || completion.hideInlinePreview)) {\n this.$seen(completion);\n }\n }\n }\n };\n Autocomplete.prototype.$onPopupShow = function (hide) {\n this.$onPopupChange(hide);\n this.stickySelection = false;\n if (this.stickySelectionDelay >= 0)\n this.stickySelectionTimer.schedule(this.stickySelectionDelay);\n };\n Autocomplete.prototype.observeLayoutChanges = function () {\n if (this.$elements || !this.editor)\n return;\n window.addEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.addEventListener(\"wheel\", this.mousewheelListener);\n var el = this.editor.container.parentNode;\n var elements = [];\n while (el) {\n elements.push(el);\n el.addEventListener(\"scroll\", this.onLayoutChange, { passive: true });\n el = el.parentNode;\n }\n this.$elements = elements;\n };\n Autocomplete.prototype.unObserveLayoutChanges = function () {\n var _this = this;\n window.removeEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.removeEventListener(\"wheel\", this.mousewheelListener);\n this.$elements && this.$elements.forEach(function (el) {\n el.removeEventListener(\"scroll\", _this.onLayoutChange, { passive: true });\n });\n this.$elements = null;\n };\n Autocomplete.prototype.onLayoutChange = function () {\n if (!this.popup.isOpen)\n return this.unObserveLayoutChanges();\n this.$updatePopupPosition();\n this.updateDocTooltip();\n };\n Autocomplete.prototype.$updatePopupPosition = function () {\n var editor = this.editor;\n var renderer = editor.renderer;\n var lineHeight = renderer.layerConfig.lineHeight;\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n var posGhostText = {\n top: pos.top,\n left: pos.left\n };\n if (renderer.$ghostText && renderer.$ghostTextWidget) {\n if (this.base.row === renderer.$ghostText.position.row) {\n posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight;\n }\n }\n var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight;\n var lowestPosition = editorContainerBottom < posGhostText.top ?\n { top: editorContainerBottom, left: posGhostText.left } :\n posGhostText;\n if (this.popup.tryShow(lowestPosition, lineHeight, \"bottom\")) {\n return;\n }\n if (this.popup.tryShow(pos, lineHeight, \"top\")) {\n return;\n }\n this.popup.show(pos, lineHeight);\n };\n Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) {\n this.$firstOpenTimer.cancel();\n if (!this.popup)\n this.$init();\n if (this.inlineEnabled && !this.inlineRenderer)\n this.$initInline();\n this.popup.autoSelect = this.autoSelect;\n this.popup.setSelectOnHover(this.setSelectOnHover);\n var oldRow = this.popup.getRow();\n var previousSelectedItem = this.popup.data[oldRow];\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n if (this.editor.textInput.setAriaOptions) {\n this.editor.textInput.setAriaOptions({\n activeDescendant: getAriaId(this.popup.getRow()),\n inline: this.inlineEnabled\n });\n }\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n var newRow;\n if (this.stickySelection)\n newRow = this.popup.data.indexOf(previousSelectedItem);\n if (!newRow || newRow === -1)\n newRow = 0;\n this.popup.setRow(this.autoSelect ? newRow : -1);\n if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow])\n this.$onPopupChange();\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (newRow === oldRow && inlineEnabled) {\n var completion = this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n }\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n this.$updatePopupPosition();\n if (this.tooltipNode) {\n this.updateDocTooltip();\n }\n }\n this.changeTimer.cancel();\n this.observeLayoutChanges();\n };\n Autocomplete.prototype.detach = function () {\n if (this.editor) {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n }\n this.$firstOpenTimer.cancel();\n this.changeTimer.cancel();\n this.hideDocTooltip();\n if (this.completionProvider) {\n this.completionProvider.detach();\n }\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n if (this.popup && this.popup.renderer) {\n this.popup.renderer.off(\"afterRender\", this.$onPopupRender);\n }\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completionProvider = this.completions = this.base = null;\n this.unObserveLayoutChanges();\n };\n Autocomplete.prototype.changeListener = function (e) {\n var cursor = this.editor.selection.lead;\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n if (this.activated)\n this.changeTimer.schedule();\n else\n this.detach();\n };\n Autocomplete.prototype.blurListener = function (e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n if (el != text && el.parentNode != container && !fromTooltip\n && el != this.tooltipNode && e.relatedTarget != text) {\n this.detach();\n }\n };\n Autocomplete.prototype.mousedownListener = function (e) {\n this.detach();\n };\n Autocomplete.prototype.mousewheelListener = function (e) {\n if (this.popup && !this.popup.isMouseOver)\n this.detach();\n };\n Autocomplete.prototype.mouseOutListener = function (e) {\n if (this.popup.isOpen)\n this.$updatePopupPosition();\n };\n Autocomplete.prototype.goTo = function (where) {\n this.popup.goTo(where);\n };\n Autocomplete.prototype.insertMatch = function (data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n if (data.value === \"\") // Explicitly given nothing to insert, e.g. \"No suggestion state\"\n return this.detach();\n var completions = this.completions;\n var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options);\n if (this.completions == completions)\n this.detach();\n return result;\n };\n Autocomplete.prototype.showPopup = function (editor, options) {\n if (this.editor)\n this.detach();\n this.activated = true;\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\n }\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n this.updateCompletions(false, options);\n };\n Autocomplete.prototype.getCompletionProvider = function (initialPosition) {\n if (!this.completionProvider)\n this.completionProvider = new CompletionProvider(initialPosition);\n return this.completionProvider;\n };\n Autocomplete.prototype.gatherCompletions = function (editor, callback) {\n return this.getCompletionProvider().gatherCompletions(editor, callback);\n };\n Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({ start: this.base, end: pos });\n if (prefix == this.completions.filterText)\n return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length)\n return this.detach();\n if (this.completions.filtered.length == 1\n && this.completions.filtered[0].value == prefix\n && !this.completions.filtered[0].snippet)\n return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n if (options && options.matches) {\n var pos = this.editor.getSelectionRange().start;\n this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n this.base.$insertRight = true;\n this.completions = new FilteredList(options.matches);\n this.getCompletionProvider().completions = this.completions;\n return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n var session = this.editor.getSession();\n var pos = this.editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(this.editor);\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n var completionOptions = {\n exactMatch: this.exactMatch,\n ignoreCaption: this.ignoreCaption\n };\n this.getCompletionProvider({\n prefix: prefix,\n pos: pos\n }).provideCompletions(this.editor, completionOptions, \n function (err, completions, finished) {\n var filtered = completions.filtered;\n var prefix = util.getCompletionPrefix(this.editor);\n this.$firstOpenTimer.cancel();\n if (finished) {\n if (!filtered.length) {\n var emptyMessage = !this.autoShown && this.emptyMessage;\n if (typeof emptyMessage == \"function\")\n emptyMessage = this.emptyMessage(prefix);\n if (emptyMessage) {\n var completionsForEmpty = [{\n caption: emptyMessage,\n value: \"\"\n }\n ];\n this.completions = new FilteredList(completionsForEmpty);\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_loading\", false);\n this.popup.renderer.setStyle(\"ace_empty-message\", true);\n return;\n }\n return this.detach();\n }\n if (filtered.length == 1 && filtered[0].value == prefix\n && !filtered[0].snippet)\n return this.detach();\n if (this.autoInsert && !this.autoShown && filtered.length == 1)\n return this.insertMatch(filtered[0]);\n }\n this.completions = !finished && this.showLoadingState ?\n new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) :\n completions;\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_empty-message\", false);\n this.popup.renderer.setStyle(\"ace_loading\", !finished);\n }.bind(this));\n if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) {\n this.$firstOpenTimer.delay(this.stickySelectionDelay / 2);\n }\n };\n Autocomplete.prototype.cancelContextMenu = function () {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n Autocomplete.prototype.updateDocTooltip = function () {\n var popup = this.popup;\n var all = this.completions && this.completions.filtered;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen)\n return this.hideDocTooltip();\n var completersLength = this.editor.completers.length;\n for (var i = 0; i < completersLength; i++) {\n var completer = this.editor.completers[i];\n if (completer.getDocTooltip && selected.completerId === completer.id) {\n doc = completer.getDocTooltip(selected);\n break;\n }\n }\n if (!doc && typeof selected != \"string\")\n doc = selected;\n if (typeof doc == \"string\")\n doc = { docText: doc };\n if (!doc || !(doc.docHTML || doc.docText))\n return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n Autocomplete.prototype.showDocTooltip = function (item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.style.margin = \"0\";\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.style.overscrollBehavior = \"contain\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n this.tooltipNode.id = \"doc-tooltip\";\n this.tooltipNode.setAttribute(\"role\", \"tooltip\");\n this.tooltipNode.addEventListener(\"wheel\", preventParentScroll);\n }\n var theme = this.editor.renderer.theme;\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n }\n else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n if (!tooltipNode.parentNode)\n this.popup.container.appendChild(this.tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n var targetWidth = 400;\n var targetHeight = 300;\n var scrollBarSize = popup.renderer.scrollBar.width || 10;\n var leftSize = rect.left;\n var rightSize = window.innerWidth - rect.right - scrollBarSize;\n var topSize = popup.isTopdown ? rect.top : window.innerHeight - scrollBarSize - rect.bottom;\n var scores = [\n Math.min(rightSize / targetWidth, 1),\n Math.min(leftSize / targetWidth, 1),\n Math.min(topSize / targetHeight * 0.9),\n ];\n var max = Math.max.apply(Math, scores);\n var tooltipStyle = tooltipNode.style;\n tooltipStyle.display = \"block\";\n if (max == scores[0]) {\n tooltipStyle.left = (rect.right + 1) + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.maxWidth = targetWidth * max + \"px\";\n tooltipStyle.top = rect.top + \"px\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n }\n else if (max == scores[1]) {\n tooltipStyle.right = window.innerWidth - rect.left + \"px\";\n tooltipStyle.left = \"\";\n tooltipStyle.maxWidth = targetWidth * max + \"px\";\n tooltipStyle.top = rect.top + \"px\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n }\n else if (max == scores[2]) {\n tooltipStyle.left = window.innerWidth - rect.left + \"px\";\n tooltipStyle.maxWidth = Math.min(targetWidth, window.innerWidth) + \"px\";\n if (popup.isTopdown) {\n tooltipStyle.top = rect.bottom + \"px\";\n tooltipStyle.left = rect.left + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.bottom, targetHeight) + \"px\";\n }\n else {\n tooltipStyle.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n tooltipStyle.left = rect.left + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(popup.container.offsetTop, targetHeight) + \"px\";\n }\n }\n };\n Autocomplete.prototype.hideDocTooltip = function () {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode)\n return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el)\n this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode)\n el.parentNode.removeChild(el);\n };\n Autocomplete.prototype.onTooltipClick = function (e) {\n var a = e.target;\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n a = a.parentNode;\n }\n };\n Autocomplete.prototype.destroy = function () {\n this.detach();\n if (this.popup) {\n this.popup.destroy();\n var el = this.popup.container;\n if (el && el.parentNode)\n el.parentNode.removeChild(el);\n }\n if (this.editor && this.editor.completer == this) {\n this.editor.off(\"destroy\", destroyCompleter);\n this.editor.completer = null;\n }\n this.inlineRenderer = this.popup = this.editor = null;\n };\n Autocomplete.for = function (editor) {\n if (editor.completer instanceof Autocomplete) {\n return editor.completer;\n }\n if (editor.completer) {\n editor.completer.destroy();\n editor.completer = null;\n }\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete[\"$sharedInstance\"])\n Autocomplete[\"$sharedInstance\"] = new Autocomplete();\n editor.completer = Autocomplete[\"$sharedInstance\"];\n }\n else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", destroyCompleter);\n }\n return editor.completer;\n };\n return Autocomplete;\n}());\nAutocomplete.prototype.commands = {\n \"Up\": function (editor) { editor.completer.goTo(\"up\"); },\n \"Down\": function (editor) { editor.completer.goTo(\"down\"); },\n \"Ctrl-Up|Ctrl-Home\": function (editor) { editor.completer.goTo(\"start\"); },\n \"Ctrl-Down|Ctrl-End\": function (editor) { editor.completer.goTo(\"end\"); },\n \"Esc\": function (editor) { editor.completer.detach(); },\n \"Return\": function (editor) { return editor.completer.insertMatch(); },\n \"Shift-Return\": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); },\n \"Tab\": function (editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager)\n editor.completer.goTo(\"down\");\n else\n return result;\n },\n \"Backspace\": function (editor) {\n editor.execCommand(\"backspace\");\n var prefix = util.getCompletionPrefix(editor);\n if (!prefix && editor.completer)\n editor.completer.detach();\n },\n \"PageUp\": function (editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function (editor) { editor.completer.popup.gotoPageDown(); }\n};\nAutocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function (editor, options) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.autoSelect = true;\n completer.autoShown = false;\n completer.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar CompletionProvider = /** @class */ (function () {\n function CompletionProvider(initialPosition) {\n this.initialPosition = initialPosition;\n this.active = true;\n }\n CompletionProvider.prototype.insertByIndex = function (editor, index, options) {\n if (!this.completions || !this.completions.filtered) {\n return false;\n }\n return this.insertMatch(editor, this.completions.filtered[index], options);\n };\n CompletionProvider.prototype.insertMatch = function (editor, data, options) {\n if (!data)\n return false;\n editor.startOperation({ command: { name: \"insertMatch\" } });\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(editor, data);\n }\n else {\n if (!this.completions)\n return false;\n var replaceBefore = this.completions.filterText.length;\n var replaceAfter = 0;\n if (data.range && data.range.start.row === data.range.end.row) {\n replaceBefore -= this.initialPosition.prefix.length;\n replaceBefore += this.initialPosition.pos.column - data.range.start.column;\n replaceAfter += data.range.end.column - this.initialPosition.pos.column;\n }\n if (replaceBefore || replaceAfter) {\n var ranges;\n if (editor.selection.getAllRanges) {\n ranges = editor.selection.getAllRanges();\n }\n else {\n ranges = [editor.getSelectionRange()];\n }\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= replaceBefore;\n range.end.column += replaceAfter;\n editor.session.remove(range);\n }\n }\n if (data.snippet) {\n snippetManager.insertSnippet(editor, data.snippet);\n }\n else {\n this.$insertString(editor, data);\n }\n if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == \"function\") {\n data.completer.onInsert(editor, data);\n }\n if (data.command && data.command === \"startAutocomplete\") {\n editor.execCommand(data.command);\n }\n }\n editor.endOperation();\n return true;\n };\n CompletionProvider.prototype.$insertString = function (editor, data) {\n var text = data.value || data;\n editor.execCommand(\"insertstring\", text);\n };\n CompletionProvider.prototype.gatherCompletions = function (editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(editor);\n var matches = [];\n this.completers = editor.completers;\n var total = editor.completers.length;\n editor.completers.forEach(function (completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function (err, results) {\n if (completer.hideInlinePreview)\n results = results.map(function (result) {\n return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview });\n });\n if (!err && results)\n matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: (--total === 0)\n });\n });\n });\n return true;\n };\n CompletionProvider.prototype.provideCompletions = function (editor, options, callback) {\n var processResults = function (results) {\n var prefix = results.prefix;\n var matches = results.matches;\n this.completions = new FilteredList(matches);\n if (options.exactMatch)\n this.completions.exactMatch = true;\n if (options.ignoreCaption)\n this.completions.ignoreCaption = true;\n this.completions.setFilter(prefix);\n if (results.finished || this.completions.filtered.length)\n callback(null, this.completions, results.finished);\n }.bind(this);\n var isImmediate = true;\n var immediateResults = null;\n this.gatherCompletions(editor, function (err, results) {\n if (!this.active) {\n return;\n }\n if (err) {\n callback(err, [], true);\n this.detach();\n }\n var prefix = results.prefix;\n if (prefix.indexOf(results.prefix) !== 0)\n return;\n if (isImmediate) {\n immediateResults = results;\n return;\n }\n processResults(results);\n }.bind(this));\n isImmediate = false;\n if (immediateResults) {\n var results = immediateResults;\n immediateResults = null;\n processResults(results);\n }\n };\n CompletionProvider.prototype.detach = function () {\n this.active = false;\n this.completers && this.completers.forEach(function (completer) {\n if (typeof completer.cancel === \"function\") {\n completer.cancel();\n }\n });\n };\n return CompletionProvider;\n}());\nvar FilteredList = /** @class */ (function () {\n function FilteredList(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n this.ignoreCaption = false;\n }\n FilteredList.prototype.setFilter = function (str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n var matches = this.filtered;\n else\n var matches = this.all;\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function (a, b) {\n return b.exactMatch - a.exactMatch || b.$score - a.$score\n || (a.caption || a.value).localeCompare(b.caption || b.value);\n });\n var prev = null;\n matches = matches.filter(function (item) {\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev)\n return false;\n prev = caption;\n return true;\n });\n this.filtered = matches;\n };\n FilteredList.prototype.filterCompletions = function (items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n loop: for (var i = 0, item; item = items[i]; i++) {\n if (item.skipFilter) {\n item.$score = item.score;\n results.push(item);\n continue;\n }\n var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet;\n if (!caption)\n continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n }\n else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n }\n else {\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n if (index < 0)\n continue loop;\n distance = index - lastIndex - 1;\n if (distance > 0) {\n if (lastIndex === -1)\n penalty += 10;\n penalty += distance;\n matchMask = matchMask | (1 << j);\n }\n lastIndex = index;\n }\n }\n }\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.$score = (item.score || 0) - penalty;\n results.push(item);\n }\n return results;\n };\n return FilteredList;\n}());\nexports.Autocomplete = Autocomplete;\nexports.CompletionProvider = CompletionProvider;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/marker_group\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar MarkerGroup = /** @class */ (function () {\n function MarkerGroup(session, options) {\n if (options)\n this.markerType = options.markerType;\n this.markers = [];\n this.session = session;\n session.addDynamicMarker(this);\n }\n MarkerGroup.prototype.getMarkerAtPosition = function (pos) {\n return this.markers.find(function (marker) {\n return marker.range.contains(pos.row, pos.column);\n });\n };\n MarkerGroup.prototype.markersComparator = function (a, b) {\n return a.range.start.row - b.range.start.row;\n };\n MarkerGroup.prototype.setMarkers = function (markers) {\n this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS);\n this.session._signal(\"changeBackMarker\");\n };\n MarkerGroup.prototype.update = function (html, markerLayer, session, config) {\n if (!this.markers || !this.markers.length)\n return;\n var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow;\n var foldLine;\n var markersOnOneLine = 0;\n var lastRow = 0;\n for (var i = 0; i < this.markers.length; i++) {\n var marker = this.markers[i];\n if (marker.range.end.row < visibleRangeStartRow)\n continue;\n if (marker.range.start.row > visibleRangeEndRow)\n continue;\n if (marker.range.start.row === lastRow) {\n markersOnOneLine++;\n }\n else {\n lastRow = marker.range.start.row;\n markersOnOneLine = 0;\n }\n if (markersOnOneLine > 200) {\n continue;\n }\n var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow);\n if (markerVisibleRange.start.row === markerVisibleRange.end.row\n && markerVisibleRange.start.column === markerVisibleRange.end.column) {\n continue; // visible range is empty\n }\n var screenRange = markerVisibleRange.toScreenRange(session);\n if (screenRange.isEmpty()) {\n foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine);\n if (foldLine && foldLine.end.row > markerVisibleRange.end.row) {\n visibleRangeStartRow = foldLine.end.row;\n }\n continue;\n }\n if (this.markerType === \"fullLine\") {\n markerLayer.drawFullLineMarker(html, screenRange, marker.className, config);\n }\n else if (screenRange.isMultiLine()) {\n if (this.markerType === \"line\")\n markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config);\n else\n markerLayer.drawTextMarker(html, screenRange, marker.className, config);\n }\n else {\n markerLayer.drawSingleLineMarker(html, screenRange, marker.className + \" ace_br15\", config);\n }\n }\n };\n return MarkerGroup;\n}());\nMarkerGroup.prototype.MAX_MARKERS = 10000;\nexports.MarkerGroup = MarkerGroup;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){var Range = require(\"../range\").Range;\nvar splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\nfunction getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({\n row: 0,\n column: 0\n }, pos));\n return textBefore.split(splitRegex).length - 1;\n}\nfunction wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n var currentWord = words[prefixPos];\n words.forEach(function (word, idx) {\n if (!word || word === currentWord)\n return;\n var distance = Math.abs(prefixPos - idx);\n var score = words.length - distance;\n if (wordScores[word]) {\n wordScores[word] = Math.max(score, wordScores[word]);\n }\n else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n}\nexports.getCompletions = function (editor, session, pos, prefix, callback) {\n var wordScore = wordDistance(session, pos);\n var wordList = Object.keys(wordScore);\n callback(null, wordList.map(function (word) {\n return {\n caption: word,\n value: word,\n score: wordScore[word],\n meta: \"local\"\n };\n }));\n};\n\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/marker_group\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * ## Language Tools extension for Ace Editor\n *\n * Provides autocompletion, snippets, and language intelligence features for the Ace code editor.\n * This extension integrates multiple completion providers including keyword completion, snippet expansion,\n * and text-based completion to enhance the coding experience with contextual suggestions and automated code generation.\n *\n * **Configuration Options:**\n * - `enableBasicAutocompletion`: Enable/disable basic completion functionality\n * - `enableLiveAutocompletion`: Enable/disable real-time completion suggestions\n * - `enableSnippets`: Enable/disable snippet expansion with Tab key\n * - `liveAutocompletionDelay`: Delay before showing live completion popup\n * - `liveAutocompletionThreshold`: Minimum prefix length to trigger completion\n *\n * **Usage:**\n * ```javascript\n * editor.setOptions({\n * enableBasicAutocompletion: true,\n * enableLiveAutocompletion: true,\n * enableSnippets: true\n * });\n * ```\n *\n * @module\n */\n\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\nvar MarkerGroup = require(\"../marker_group\").MarkerGroup;\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n if (session.$mode.completer) {\n return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n }\n var state = editor.session.getState(pos.row);\n var completions = session.$mode.getCompletions(state, session, pos, prefix);\n completions = completions.map(function (el) {\n el.completerId = keyWordCompleter.id;\n return el;\n });\n callback(null, completions);\n },\n id: \"keywordCompleter\"\n};\nvar transformSnippetTooltip = function (str) {\n var record = {};\n return str.replace(/\\${(\\d+)(:(.*?))?}/g, function (_, p1, p2, p3) {\n return (record[p1] = p3 || '');\n }).replace(/\\$(\\d+?)/g, function (_, p1) {\n return record[p1];\n });\n};\nvar snippetCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n var scopes = [];\n var token = session.getTokenAt(pos.row, pos.column);\n if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n scopes.push('html-tag');\n else\n scopes = snippetManager.getActiveScopes(editor);\n var snippetMap = snippetManager.snippetMap;\n var completions = [];\n scopes.forEach(function (scope) {\n var snippets = snippetMap[scope] || [];\n for (var i = snippets.length; i--;) {\n var s = snippets[i];\n var caption = s.name || s.tabTrigger;\n if (!caption)\n continue;\n completions.push({\n caption: caption,\n snippet: s.content,\n meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n completerId: snippetCompleter.id\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function (item) {\n if (item.snippet && !item.docHTML) {\n item.docHTML = [\n \"\", lang.escapeHTML(item.caption), \"\", \"
        \",\n lang.escapeHTML(transformSnippetTooltip(item.snippet))\n ].join(\"\");\n }\n },\n id: \"snippetCompleter\"\n};\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function (val) {\n completers.length = 0;\n if (val)\n completers.push.apply(completers, val);\n};\nexports.addCompleter = function (completer) {\n completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\nvar expandSnippet = {\n name: \"expandSnippet\",\n exec: function (editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n};\nvar onChangeMode = function (e, editor) {\n loadSnippetsForMode(editor.session.$mode);\n};\nvar loadSnippetsForMode = function (mode) {\n if (typeof mode == \"string\")\n mode = config.$modes[mode];\n if (!mode)\n return;\n if (!snippetManager.files)\n snippetManager.files = {};\n loadSnippetFile(mode.$id, mode.snippetFileId);\n if (mode.modes)\n mode.modes.forEach(loadSnippetsForMode);\n};\nvar loadSnippetFile = function (id, snippetFilePath) {\n if (!snippetFilePath || !id || snippetManager.files[id])\n return;\n snippetManager.files[id] = {};\n config.loadModule(snippetFilePath, function (m) {\n if (!m)\n return;\n snippetManager.files[id] = m;\n if (!m.snippets && m.snippetText)\n m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n snippetManager.register(m.snippets || [], m.scope);\n if (m.includeScopes) {\n snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n m.includeScopes.forEach(function (x) {\n loadSnippetsForMode(\"ace/mode/\" + x);\n });\n }\n });\n};\nvar doLiveAutocomplete = function (e) {\n var editor = e.editor;\n var hasCompleter = editor.completer && editor.completer.activated;\n if (e.command.name === \"backspace\") {\n if (hasCompleter && !util.getCompletionPrefix(editor))\n editor.completer.detach();\n }\n else if (e.command.name === \"insertstring\" && !hasCompleter) {\n lastExecEvent = e;\n var delay = e.editor.$liveAutocompletionDelay;\n if (delay) {\n liveAutocompleteTimer.delay(delay);\n }\n else {\n showLiveAutocomplete(e);\n }\n }\n};\nvar lastExecEvent;\nvar liveAutocompleteTimer = lang.delayedCall(function () {\n showLiveAutocomplete(lastExecEvent);\n}, 0);\nvar showLiveAutocomplete = function (e) {\n var editor = e.editor;\n var prefix = util.getCompletionPrefix(editor);\n var previousChar = e.args;\n var triggerAutocomplete = util.triggerAutocomplete(editor, previousChar);\n if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) {\n var completer = Autocomplete.for(editor);\n completer.autoShown = true;\n completer.showPopup(editor);\n }\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function (val) {\n if (val) {\n Autocomplete.for(this);\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.addCommand(Autocomplete.startCommand);\n }\n else {\n this.commands.removeCommand(Autocomplete.startCommand);\n }\n },\n value: false\n },\n enableLiveAutocompletion: {\n set: function (val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.on('afterExec', doLiveAutocomplete);\n }\n else {\n this.commands.off('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n liveAutocompletionDelay: {\n initialValue: 0\n },\n liveAutocompletionThreshold: {\n initialValue: 0\n },\n enableSnippets: {\n set: function (val) {\n if (val) {\n this.commands.addCommand(expandSnippet);\n this.on(\"changeMode\", onChangeMode);\n onChangeMode(null, this);\n }\n else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\n});\nexports.MarkerGroup = MarkerGroup;\n\n}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SqlHighlightRules = function () {\n var keywords = (\"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|\" +\n \"when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|\" +\n \"foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct|is|in|\" +\n \"all|alter|any|array|at|authorization|between|both|cast|check|collate|column|commit|constraint|\" +\n \"cube|current|current_date|current_time|current_timestamp|current_user|describe|escape|except|\" +\n \"exists|external|extract|fetch|filter|for|full|function|global|grouping|intersect|interval|\" +\n \"into|leading|like|local|no|of|only|out|overlaps|partition|position|range|revoke|rollback|rollup|\" +\n \"row|rows|session_user|set|some|start|tablesample|time|to|trailing|truncate|unique|unknown|\" +\n \"user|using|values|window|with\");\n var builtinConstants = (\"true|false\");\n var builtinFunctions = (\"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|\" +\n \"coalesce|ifnull|isnull|nvl\");\n var dataTypes = (\"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|\" +\n \"money|real|number|integer|string\");\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": builtinFunctions,\n \"keyword\": keywords,\n \"constant.language\": builtinConstants,\n \"storage.type\": dataTypes\n }, \"identifier\", true);\n this.$rules = {\n \"start\": [{\n token: \"comment\",\n regex: \"--.*$\"\n }, {\n token: \"comment\",\n start: \"/\\\\*\",\n end: \"\\\\*/\"\n }, {\n token: \"string\", // \" string\n regex: '\".*?\"'\n }, {\n token: \"string\", // ' string\n regex: \"'.*?'\"\n }, {\n token: \"string\", // ` string (apache drill)\n regex: \"`.*?`\"\n }, {\n token: \"constant.numeric\", // float\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: keywordMapper,\n regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n }, {\n token: \"keyword.operator\",\n regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n }, {\n token: \"paren.lparen\",\n regex: \"[\\\\(]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\)]\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }]\n };\n this.normalizeRules();\n};\noop.inherits(SqlHighlightRules, TextHighlightRules);\nexports.SqlHighlightRules = SqlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n return fw;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n }\n else if (foldStyle != \"all\")\n range = null;\n }\n return range;\n }\n if (foldStyle === \"markbegin\")\n return;\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n }\n else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n }\n else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m)\n continue;\n if (m[1])\n depth--;\n else\n depth++;\n if (!depth)\n break;\n }\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\",\"ace/mode/folding/sql\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlHighlightRules = require(\"./sql_highlight_rules\").SqlHighlightRules;\nvar SqlFoldMode = require(\"./folding/sql\").FoldMode;\nvar Mode = function () {\n this.HighlightRules = SqlHighlightRules;\n this.foldingRules = new SqlFoldMode();\n this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.lineCommentStart = \"--\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.$id = \"ace/mode/sql\";\n this.snippetFileId = \"ace/snippets/sql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/sql\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n}); (function() {\n ace.require([\"ace/theme/textmate\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = require('vm').runInThisContext(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","var constants = require('../constants');\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\nimport { Message } from '@lumino/messaging';\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\nimport {NowVisPanel} from './nowpanel';\ninterface IAnnotation {\n id: string;\n annotationFormat: string;\n annotation: string;\n description: string;\n annotationLevel: string;\n provenanceType: string;\n relatedTrial: string;\n relatedExperiment: string;\n }\nexport\nclass AnnontationWidget extends Widget {\n\n d3node: d3_Selection;\n tBody: d3_Selection;\n table: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n anntTitle: d3_Selection;\n expId: string;\n trialId: string;\n fetchUrl: string;\n annotationLevel: string;\n annotations: Array;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor( expId: string) {\n super({ node: AnnontationWidget.createNode() });\n this.d3node = d3_select(this.node);\n this.expId=expId;\n\n this.addClass('content');\n this.title.label = \"Annotation\";\n this.title.closable = false\n this.title.caption = `Annontation`;\n this.setNode();\n this.setAnnotationLevelToExperiment();\n\n }\n\n protected onBeforeHide(msg: Message): void {\n this.setAnnotationLevelToExperiment()\n \n }\n setAnnotationLevelToExperiment(){\n this.trialId=\"\";\n this.fetchUrl=\"/experiments/\"+this.expId+\"/extendedAnnotation\";\n this.annotationLevel=\"Experiment\";\n this.anntTitle.text(\"Annotations for Experiment: \" + this.expId)\n this.setAnnotations();\n\n }\n setAnnotationLevelToTrial(trialId:string){\n this.trialId=trialId;\n this.anntTitle.text(\"Annotations for Trial: \" + this.trialId)\n this.fetchUrl=\"/trials/\"+this.trialId+\"/extendedAnnotation\";\n this.annotationLevel=\"Trial\";\n this.setAnnotations();\n }\n activeAnnotation(trialId:string){\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n parentDock.activateWidget(this);\n this.setAnnotationLevelToTrial(trialId);\n }\n async fillAnnotations(){\n this.annotations=new Array();\n var _thiss=this;\n var response= await fetch(this.fetchUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.annotations= new Array();\n var obj=await response.json();\n\n obj.forEach( function(item: any){\n var annt={\n id: item.id,\n provenanceType: item.provenanceType,\n annotationFormat: item.annotationFormat,\n description: item.description,\n annotationLevel: item.annotationLevel,\n relatedTrial: item.relatedTrial,\n relatedExperiment: item.relatedExperiment,\n }\n\n _thiss.annotations.push(annt);\n }); \n }else{\n if(response.status!=404){\n this.showNode(_thiss.errorFeedback);\n }\n \n }\n\n \n }\n addAnntRow(annt : IAnnotation, tBody:d3_Selection){\n\n let item=tBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(annt.id);\n item.append(\"td\").text(annt.description);\n item.append(\"td\").text(annt.annotationFormat);\n\n item.append(\"td\").text(annt.provenanceType);\n\n var actions =item.append(\"td\")\n var addMemberButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Download Content\");\n addMemberButton.on(\"click\",function(){\n window.open(\"/extendedAnnotation/\"+annt.id+\"/annotation\");\n \n });\n \n }\n async setAnnotations(){\n let _thiss=this;\n \n this.table.html(\"\");\n let header=this.table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"description\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"annotation Format\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"provenance Type\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Actions\");\n var tBody=this.table.append(\"tbody\");\n\n await this.fillAnnotations();\n \n this.annotations.forEach(function (obj: any) {\n _thiss.addAnntRow(obj,tBody);\n });\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n getValueFromSelect(node: d3_Selection,defaultVale:String) :String{\n var option =defaultVale;\n\n var select = node.node() as HTMLSelectElement;\n if(select!=null){\n option = select.options[select.selectedIndex].value;\n }\n return option;;\n }\n createAddGroupForm(projectsDiv:d3_Selection){\n var _thiss=this;\n let inputsDiv=projectsDiv.append(\"div\");\n let descIn=this.addFormInput(inputsDiv,\"descriptionAnntInput\",\"Description\",\"textarea\");\n let annotationIn=this.addFormInput(inputsDiv,\"annotationNameInput\",\"Annotation\",\"textarea\");\n let annotationFormatIn=this.addFormInput(inputsDiv,\"annotationFormatInput\",\"Annotation Format\",\"select\");\n let provenanceTypeIn=this.addFormInput(inputsDiv,\"provenanceTypeInput\",\"Provenance Type\",\"select\");\n\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Data\").text(\"Data\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Interaction\").text(\"Interaction\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Insight\").text(\"Insight\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Other\").text(\"Other\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Rationale\").text(\"Rationale\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Visualization\").text(\"Visualization\");\n\n annotationFormatIn.append(\"option\").attr(\"value\",\"plainText\").text(\"plain text\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"base64\").text(\"base64\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"JSON\").text(\"JSON\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"XML\").text(\"XML\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addAnntButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Annotation\");\n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n var annotationFormat=_thiss.getValueFromSelect(annotationFormatIn,\"plainText\");\n var provenanceType=_thiss.getValueFromSelect(provenanceTypeIn,\"Other\");\n\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n\n let newAnnotation={\n annotation: annotationIn.property(\"value\"),\n description: descIn.property(\"value\"),\n annotationFormat: annotationFormat,\n annotationLevel: _thiss.annotationLevel,\n provenanceType: provenanceType\n };\n\n fetch(_thiss.fetchUrl, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newAnnotation) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n\n _thiss.showNode(_thiss.successFeedback);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addAnntButton);\n _thiss.setAnnotations();\n\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n \n }\n }); \n\n \n });\n\n addAnntButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addAnntButton);\n });\n\n }\n\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n this.anntTitle= projectsDiv.append(\"h2\");\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"\") ; \n this.hideNode(this.errorFeedback);\n this.hideNode(this.successFeedback);\n\n\n this.createAddGroupForm(projectsDiv);\n\n \n this.table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n\n \n }\n\n}","import {Widget} from '@lumino/widgets';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {BaseActivationGraphWidget} from './graph/base_activation_graph';\n\n\nexport\nclass ConfigWidget extends Widget {\n\n d3node: d3_Selection;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('config-content', true)\n\n let historydiv = content.append(\"div\")\n\n historydiv.append(\"h2\")\n .text(\"History Graph\")\n\n let showGraph = historydiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n showGraph.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"show_graph\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"show-graph\", true)\n .attr(\"id\", \"config-show-graph\")\n\n showGraph.append(\"label\")\n .attr(\"for\", \"config-show-graph\")\n .attr(\"title\", \"Open trial graph\")\n .text(\"Show trial graph on selection\")\n\n let showInfo = historydiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n showInfo.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"show_info\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"show-info\", true)\n .attr(\"id\", \"config-show-info\")\n\n showInfo.append(\"label\")\n .attr(\"for\", \"config-show-info\")\n .attr(\"title\", \"Open trial info\")\n .text(\"Show trial information on selection\")\n\n\n let trialdiv = content.append(\"div\")\n trialdiv.append(\"h2\")\n .text(\"Trial Graph\")\n\n BaseActivationGraphWidget.graphTypeForm(\"config\", trialdiv);\n BaseActivationGraphWidget.useCacheForm(\"config\", trialdiv);\n\n return node;\n }\n\n constructor() {\n super({ node: ConfigWidget.createNode() });\n this.d3node = d3_select(this.node);\n //this.setFlag(Widget.Flag.DisallowLayout);\n this.addClass('content');\n this.title.label = \"Config\";\n this.title.closable = false\n this.title.caption = `Configuration`;\n }\n\n\n showTrial(): boolean {\n return this.d3node.select(\".show-graph\").property(\"checked\");\n }\n\n showInfo(): boolean {\n return this.d3node.select(\".show-info\").property(\"checked\");\n }\n\n graphType(): string {\n return this.d3node.select(\".graph-type\").property(\"value\");\n }\n\n useCache(): boolean {\n return this.d3node.select(\".use-cache\").property(\"checked\");\n }\n\n}","import { Widget } from '@lumino/widgets';\nimport { Message } from '@lumino/messaging';\nimport { select as d3_select, Selection as d3_Selection, BaseType as d3_BaseType } from 'd3-selection';\nimport { forceSimulation, forceLink, forceManyBody, forceCenter, forceCollide, SimulationNodeDatum, SimulationLinkDatum } from 'd3-force';\nimport { scaleOrdinal } from 'd3-scale';\nimport { schemeTableau10 } from 'd3-scale-chromatic';\nimport { drag } from 'd3-drag';\nimport { NowVisPanel } from './nowpanel';\nimport { QueryWidget, QueryResultWidget } from './query_widget';\n\ninterface TableNode extends SimulationNodeDatum {\n id: string;\n name: string;\n selected?: boolean;\n}\n\ninterface TableLink extends SimulationLinkDatum {\n source: string | TableNode;\n target: string | TableNode;\n sourceColumn: string;\n targetColumn: string;\n}\n\ninterface DatabaseGraphData {\n nodes: TableNode[];\n links: TableLink[];\n}\n\nexport class DatabaseTabWidget extends Widget {}\n\nexport class TableInfoWidget extends DatabaseTabWidget {\n d3node: d3_Selection;\n constructor(tableName: string, details: any) {\n super({ node: TableInfoWidget.createNode(tableName, details) });\n this.title.label = tableName;\n this.title.caption = `Table: ${tableName}`;\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n }\n static createNode(tableName: string, details: any): HTMLElement {\n const node = document.createElement('div');\n \n node.style.display = 'flex';\n node.style.flexDirection = 'column';\n node.style.height = '100%';\n node.style.overflow = 'hidden';\n \n const header = d3_select(node).append('div')\n .style('flex-shrink', '0')\n .style('padding', '1rem')\n .style('border-bottom', '1px solid #eee')\n .style('background', '#f8f9fa');\n \n header.append('h4')\n .text(tableName)\n .style('margin', '0')\n .style('color', '#333');\n \n const contentContainer = d3_select(node).append('div')\n .style('flex', '1')\n .style('overflow-y', 'auto')\n .style('overflow-x', 'hidden')\n .style('padding', '1rem');\n \n if (details.error) {\n contentContainer.append('div')\n .style('color', 'red')\n .text('Failed to load table details.');\n } else {\n contentContainer.append('h5')\n .text('Columns')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const columnsTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const columnsThead = columnsTable.append('thead').append('tr');\n for( const h of ['Name', 'Type', 'NOT NULL', 'Default', 'PK']){\n columnsThead.append('th').text(h).style('font-size', '0.875rem')\n };\n \n const columnsTbody = columnsTable.append('tbody');\n details.columns.forEach((col: any) => {\n const row = columnsTbody.append('tr');\n row.append('td').text(col.name).style('font-size', '0.875rem');\n row.append('td').text(col.type).style('font-size', '0.875rem');\n row.append('td').text(col.notnull ? 'Yes' : '').style('font-size', '0.875rem');\n row.append('td').text(col.default === null ? '' : col.default).style('font-size', '0.875rem');\n row.append('td').text(col.pk ? 'Yes' : '').style('font-size', '0.875rem');\n });\n\n if (details.foreign_keys && details.foreign_keys.length > 0) {\n contentContainer.append('h5')\n .text('Foreign Keys')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const fkTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const fkThead = fkTable.append('thead').append('tr');\n for( const h of ['Column', 'References Table', 'References Column']){\n fkThead.append('th').text(h).style('font-size', '0.875rem');\n };\n \n const fkTbody = fkTable.append('tbody');\n for( const fk of details.foreign_keys){\n const row = fkTbody.append('tr');\n row.append('td').text(fk.from).style('font-size', '0.875rem');\n row.append('td').text(fk.table).style('font-size', '0.875rem');\n row.append('td').text(fk.to).style('font-size', '0.875rem');\n };\n }\n\n if (details.referenced_by && details.referenced_by.length > 0) {\n contentContainer.append('h5')\n .text('Referenced By')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const columnReferences: { [key: string]: any[] } = {};\n details.referenced_by.forEach((ref: any) => {\n if (!columnReferences[ref.referenced_column]) {\n columnReferences[ref.referenced_column] = [];\n }\n columnReferences[ref.referenced_column].push(ref);\n });\n\n const refTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const refThead = refTable.append('thead').append('tr');\n for( const h of ['Table', 'Column', 'References Column']){\n refThead.append('th').text(h).style('font-size', '0.875rem');\n };\n \n const refTbody = refTable.append('tbody');\n for( const ref of details.referenced_by){\n const row = refTbody.append('tr');\n row.append('td').text(ref.referencing_table).style('font-size', '0.875rem');\n row.append('td').text(ref.referencing_column).style('font-size', '0.875rem');\n row.append('td').text(ref.referenced_column).style('font-size', '0.875rem');\n };\n }\n }\n return node;\n }\n}\n\nexport class DatabaseWidget extends Widget {\n panel: NowVisPanel;\n graphData: DatabaseGraphData = { nodes: [], links: [] };\n simulation: any;\n svg: d3_Selection;\n color: any;\n dataLoaded: boolean = false;\n selectedNodes: Set = new Set();\n \n constructor(panel: NowVisPanel) {\n super();\n this.panel = panel;\n this.title.label = 'Database';\n this.title.caption = 'Database';\n \n const d3node = d3_select(this.node);\n \n const container = d3node.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('height', '100%')\n .style('padding', '1rem');\n\n const headerContainer = container.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem');\n\n headerContainer.append('h4')\n .text('Database')\n .style('margin', '0')\n .style('color', '#333');\n\n const controlsContainer = headerContainer.append('div')\n .style('display', 'flex')\n .style('gap', '0.5rem')\n .style('align-items', 'center');\n\n const tablesDropdown = controlsContainer.append('div')\n .style('position', 'relative')\n .style('display', 'inline-block');\n\n const dropdownButton = tablesDropdown.append('button')\n .classed('btn btn-outline-primary dropdown-toggle', true)\n .attr('type', 'button')\n .attr('data-toggle', 'dropdown')\n .attr('aria-haspopup', 'true')\n .attr('aria-expanded', 'false')\n .html('Tables ')\n .style('min-width', '120px');\n\n tablesDropdown.append('div')\n .attr('id', 'tables-dropdown')\n .classed('dropdown-menu', true)\n .style('position', 'absolute')\n .style('top', '100%')\n .style('left', '0')\n .style('z-index', '1000')\n .style('display', 'none')\n .style('min-width', '250px')\n .style('max-height', '300px')\n .style('overflow-y', 'auto')\n .style('background', '#fff')\n .style('border', '1px solid #ccc')\n .style('border-radius', '4px')\n .style('box-shadow', '0 2px 10px rgba(0,0,0,0.1)')\n .style('padding', '0.5rem');\n\n controlsContainer.append('button')\n .attr('id', 'new-query-btn')\n .classed('btn btn-primary', true)\n .on('click', () => this.openNewQueryTab())\n .html(' New Query');\n\n controlsContainer.append('button')\n .attr('id', 'clear-selection-btn')\n .classed('btn btn-outline-secondary', true)\n .style('display', 'none')\n .on('click', () => this.clearSelection())\n .html(' Clear Selection');\n\n container.append('div')\n .attr('id', 'graph-container')\n .style('flex', '1')\n .style('border', '1px solid #ddd')\n .style('border-radius', '4px')\n .style('background', '#f9f9f9')\n .style('position', 'relative');\n\n this.color = scaleOrdinal(schemeTableau10);\n\n dropdownButton.on('click', () => {\n const dropdown = document.getElementById('tables-dropdown');\n if (dropdown) {\n const isVisible = dropdown.style.display === 'block';\n dropdown.style.display = isVisible ? 'none' : 'block';\n dropdownButton.attr('aria-expanded', !isVisible);\n }\n });\n\n d3_select(document).on('click', (event) => {\n const dropdown = document.getElementById('tables-dropdown');\n const button = dropdownButton.node();\n if (dropdown && button && !button.contains(event.target) && !dropdown.contains(event.target)) {\n dropdown.style.display = 'none';\n dropdownButton.attr('aria-expanded', 'false');\n }\n });\n\n this.showLoadingMessage();\n }\n\n protected onAfterShow(msg: Message): void {\n this.fetchAndRenderTables();\n }\n\n private showLoadingMessage(): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#666')\n .style('font-size', '16px')\n .html(`\n \n
        Click on the Database tab to load database structure
        \n `);\n }\n\n async fetchAndRenderTables() {\n const dropdownMenu = this.node.querySelector('#tables-dropdown');\n if (!dropdownMenu) {\n console.error('Tables dropdown element not found');\n return;\n }\n\n this.showLoadingState();\n this.clearSelection();\n\n try {\n const response = await fetch('/db/tables');\n if (!response.ok) throw new Error('Failed to fetch table list');\n const data = await response.json();\n this.renderTableList(data.tables);\n this.buildGraphDataFromTablesResponse(data);\n this.initializeGraph();\n this.renderGraph();\n this.dataLoaded = true;\n } catch (e) {\n console.error('Error fetching tables:', e);\n this.showErrorMessage('Failed to load database structure');\n }\n }\n\n private showLoadingState(): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#666')\n .style('font-size', '16px')\n .html(`\n \n
        Loading database structure...
        \n `);\n }\n\n private showErrorMessage(message: string): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#dc3545')\n .style('font-size', '16px')\n .html(`\n \n
        ${message}
        \n `);\n }\n\n buildGraphDataFromTablesResponse(data: any) {\n const { tables, foreign_keys } = data;\n \n this.graphData.nodes = tables.map((tableName: string) => ({\n id: tableName,\n name: tableName\n }));\n\n this.graphData.links = [];\n\n if (foreign_keys) {\n Object.keys(foreign_keys).forEach(sourceTable => {\n const tableForeignKeys = foreign_keys[sourceTable];\n tableForeignKeys.forEach((fk: any) => {\n const existingLink = this.graphData.links.find(link => \n link.source === sourceTable && link.target === fk.table\n );\n \n if (!existingLink) {\n this.graphData.links.push({\n source: sourceTable,\n target: fk.table,\n sourceColumn: fk.from,\n targetColumn: fk.to\n });\n }\n });\n });\n }\n }\n\n private createArrowMarker(): void {\n this.svg.append('defs').append('marker')\n .attr('id', 'arrowhead')\n .attr('viewBox', '-0 -3 6 6')\n .attr('refX', 25)\n .attr('refY', 0)\n .attr('orient', 'auto')\n .attr('markerWidth', 5)\n .attr('markerHeight', 5)\n .attr('xoverflow', 'visible')\n .append('svg:path')\n .attr('d', 'M 0,-3 L 6 ,0 L 0,3')\n .attr('fill', '#999')\n .style('stroke', 'none');\n }\n\n private createSimulation(width: number, height: number, isInitial: boolean = false): void {\n if (this.simulation) {\n this.simulation.stop();\n }\n\n const linkDistance = isInitial ? 200 : 250;\n const chargeStrength = isInitial ? -200 : -400;\n const chargeDistanceMax = isInitial ? 800 : 400;\n const collisionRadius = isInitial ? 120 : 70;\n\n this.simulation = forceSimulation(this.graphData.nodes)\n .force('link', forceLink(this.graphData.links).id((d: any) => d.id).distance(linkDistance))\n .force('charge', forceManyBody().strength(chargeStrength).distanceMax(chargeDistanceMax))\n .force('center', forceCenter(width / 2, height / 2))\n .force('collision', forceCollide().radius(collisionRadius));\n\n if (!isInitial) {\n this.simulation.alphaDecay(0.1).velocityDecay(0.4);\n }\n }\n\n initializeGraph() {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n const rect = container.getBoundingClientRect();\n const width = Math.max(400, rect.width || 800);\n const height = Math.max(300, rect.height || 600);\n\n this.svg = d3_select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', height)\n .style('background', '#f9f9f9') as d3_Selection;\n\n this.createArrowMarker();\n\n if (this.graphData.nodes.length > 0) {\n this.createSimulation(width, height, true);\n }\n }\n\n renderGraph() {\n if (!this.svg) return;\n\n this.svg.selectAll('*').remove();\n\n this.createArrowMarker();\n\n if (this.graphData.nodes.length === 0) {\n this.svg.append('text')\n .attr('x', '50%')\n .attr('y', '50%')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '16px')\n .style('fill', '#666')\n .text('No database relationships found');\n return;\n }\n\n const svgNode = this.svg.node();\n const width = svgNode ? svgNode.getBoundingClientRect().width : 800;\n const height = svgNode ? svgNode.getBoundingClientRect().height : 600;\n\n const centerX = width / 2;\n const centerY = height / 2;\n const nodesCount = this.graphData.nodes.length;\n const radius = Math.min(width, height) / 2 - 50;\n this.graphData.nodes.forEach((node: any, index: number) => {\n const angle = 2 * Math.PI * index / nodesCount;\n node.x = centerX + radius * Math.sin(angle);\n node.y = centerY + radius * Math.cos(angle);\n });\n\n const link = this.svg.append('g')\n .selectAll('line')\n .data(this.graphData.links)\n .enter().append('line')\n .attr('stroke', '#999')\n .attr('stroke-opacity', 0.6)\n .attr('stroke-width', 2)\n .attr('marker-end', 'url(#arrowhead)');\n\n const node = this.svg.append('g')\n .selectAll('g')\n .data(this.graphData.nodes)\n .enter().append('g')\n .attr('class', 'node')\n .call((selection: any) => {\n selection.on('click', (event: any, d: any) => this.handleNodeClick(event, d));\n });\n\n node.append('circle')\n .attr('r', 35)\n .attr('fill', (d: any) => this.color(d.id))\n .attr('stroke', '#fff')\n .attr('stroke-width', 3);\n\n node.append('text')\n .text((d: any) => d.name)\n .attr('text-anchor', 'middle')\n .attr('dy', '.35em')\n .style('font-size', '12px')\n .style('font-weight', 'bold')\n .style('fill', '#fff')\n .style('text-shadow', '1px 1px 2px rgba(0,0,0,0.8), -1px -1px 2px rgba(0,0,0,0.8), 1px -1px 2px rgba(0,0,0,0.8), -1px 1px 2px rgba(0,0,0,0.8)')\n .style('pointer-events', 'none');\n\n node.append('title')\n .text((d: any) => `Table: ${d.name}\\nClick to view details\\nCtrl+Click to select (orange margin)`);\n\n this.svg.on('click', (event: any) => {\n if (event.target === this.svg.node()) {\n this.clearSelection();\n }\n });\n\n this.createSimulation(width, height, false);\n\n this.simulation.on('tick', () => {\n link\n .attr('x1', (d: any) => {\n const x = d.source.x;\n return this.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0;\n })\n .attr('y1', (d: any) => {\n const y = d.source.y;\n return this.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0;\n })\n .attr('x2', (d: any) => {\n const x = d.target.x;\n return this.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0;\n })\n .attr('y2', (d: any) => {\n const y = d.target.y;\n return this.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0;\n });\n\n node\n .attr('transform', (d: any) => {\n const x = d.x;\n const y = d.y;\n \n if (!this.isValidNumber(x) || !this.isValidNumber(y)) {\n d.x = width / 2;\n d.y = height / 2;\n return `translate(${width / 2},${height / 2})`;\n }\n \n const boundedX = Math.max(50, Math.min(width - 50, x));\n const boundedY = Math.max(50, Math.min(height - 50, y));\n \n if (boundedX !== x) {\n d.x = boundedX;\n }\n if (boundedY !== y) {\n d.y = boundedY;\n }\n \n return `translate(${boundedX},${boundedY})`;\n });\n });\n\n node.call((selection: any) => {\n const widget = this;\n selection.on('mouseover', function(event: any, d: any) {\n const isSelected = widget.selectedNodes.has(d.id);\n \n d3_select(this).select('circle')\n .attr('stroke-width', isSelected ? 6 : 4)\n .attr('stroke', isSelected ? '#ff8c00' : '#333');\n \n link\n .attr('stroke-opacity', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? 1 : 0.1;\n })\n .attr('stroke-width', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? 3 : 2;\n })\n .attr('stroke', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? '#87CEEB' : '#999';\n });\n \n node.select('circle')\n .attr('stroke-width', (nodeData: any) => {\n const isConnected = link.data().some((linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id && targetId === nodeData.id) || \n (targetId === d.id && sourceId === nodeData.id);\n });\n const isNodeSelected = widget.selectedNodes.has(nodeData.id);\n return isNodeSelected ? 6 : (isConnected ? 4 : 3);\n })\n .attr('stroke', (nodeData: any) => {\n const isConnected = link.data().some((linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id && targetId === nodeData.id) || \n (targetId === d.id && sourceId === nodeData.id);\n });\n const isNodeSelected = widget.selectedNodes.has(nodeData.id);\n return isConnected ? '#87CEEB' : (isNodeSelected ? '#ff8c00' : '#fff');\n });\n })\n .on('mouseout', function() {\n widget.updateSelection();\n \n link\n .attr('stroke-opacity', 0.6)\n .attr('stroke-width', 2)\n .attr('stroke', '#999');\n });\n });\n\n node.call(drag()\n .on('start', (event: any, d: any) => {\n if (!event.active) this.simulation.alphaTarget(0.3).restart();\n d.fx = this.isValidNumber(d.x) ? d.x : width / 2;\n d.fy = this.isValidNumber(d.y) ? d.y : height / 2;\n })\n .on('drag', (event: any, d: any) => {\n const boundedX = Math.max(50, Math.min(width - 50, event.x));\n const boundedY = Math.max(50, Math.min(height - 50, event.y));\n d.fx = boundedX;\n d.fy = boundedY;\n })\n .on('end', (event: any, d: any) => {\n if (!event.active) this.simulation.alphaTarget(0);\n d.fx = null;\n d.fy = null;\n }));\n }\n\n private isValidNumber(value: any): boolean {\n return typeof value === 'number' && !isNaN(value) && isFinite(value);\n }\n\n private toggleSelection(nodeId: string): void {\n if (this.selectedNodes.has(nodeId)) {\n this.selectedNodes.delete(nodeId);\n } else {\n this.selectedNodes.add(nodeId);\n }\n this.updateSelection();\n }\n\n private clearSelection(): void {\n this.selectedNodes.clear();\n this.updateSelection();\n }\n\n private updateSelection(): void {\n if (!this.svg) return;\n\n const widget = this;\n this.svg.selectAll('.node').each(function(d: any) {\n const nodeElement = d3_select(this);\n const isSelected = widget.selectedNodes.has(d.id);\n \n nodeElement.select('circle')\n .attr('stroke', isSelected ? '#ff8c00' : '#fff')\n .attr('stroke-width', isSelected ? 6 : 3)\n .attr('stroke-dasharray', 'none');\n });\n\n const newQueryBtn = this.node.querySelector('#new-query-btn') as HTMLElement;\n const clearBtn = this.node.querySelector('#clear-selection-btn') as HTMLElement;\n \n if (!newQueryBtn || !clearBtn) return;\n\n if (this.selectedNodes.size > 0) {\n newQueryBtn.innerHTML = ` New Query ${this.selectedNodes.size}`;\n clearBtn.style.display = 'inline-block';\n } else {\n newQueryBtn.innerHTML = ' New Query';\n clearBtn.style.display = 'none';\n }\n }\n\n private handleNodeClick(event: any, d: any): void {\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n event.stopPropagation();\n this.toggleSelection(d.id);\n } else {\n this.openTableInfoTab(d.name);\n }\n }\n\n getSelectedTables(): string[] {\n return Array.from(this.selectedNodes);\n }\n\n selectTables(tableNames: string[]): void {\n tableNames.forEach(name => {\n this.selectedNodes.add(name);\n });\n this.updateSelection();\n }\n\n renderTableList(tables: string[]) {\n const dropdownMenu = this.node.querySelector('#tables-dropdown') as HTMLElement;\n if (!dropdownMenu) {\n console.error('Tables dropdown element not found in renderTableList');\n return;\n }\n const d3menu = d3_select(dropdownMenu);\n d3menu.html('');\n \n if (!tables || tables.length === 0) {\n d3menu.append('div')\n .text('No tables found.')\n .style('padding', '0.5rem')\n .style('color', '#666')\n .style('font-style', 'italic');\n return;\n }\n\n d3menu.append('div')\n .text(`Tables (${tables.length})`)\n .style('font-weight', 'bold')\n .style('padding', '0.5rem')\n .style('border-bottom', '1px solid #eee')\n .style('margin-bottom', '0.5rem');\n\n tables.forEach(tableName => {\n const item = d3menu.append('div')\n .style('padding', '0.5rem')\n .style('cursor', 'pointer')\n .style('border-radius', '3px')\n .style('margin-bottom', '0.25rem')\n .style('transition', 'background-color 0.2s')\n .on('mouseover', function() {\n d3_select(this).style('background-color', '#f8f9fa');\n })\n .on('mouseout', function() {\n d3_select(this).style('background-color', 'transparent');\n })\n .on('click', () => {\n this.openTableInfoTab(tableName);\n dropdownMenu.style.display = 'none';\n const dropdownButton = this.node.querySelector('[data-toggle=\"dropdown\"]');\n if (dropdownButton) {\n dropdownButton.setAttribute('aria-expanded', 'false');\n }\n });\n\n item.append('i')\n .classed('fa fa-table', true)\n .style('margin-right', '0.5rem')\n .style('color', '#007bff');\n\n item.append('span')\n .text(tableName)\n .style('font-size', '14px');\n });\n }\n\n async openTableInfoTab(tableName: string) {\n let widget: Widget | null = null;\n try {\n const response = await fetch(`/db/table/${encodeURIComponent(tableName)}`);\n if (!response.ok) throw new Error('Failed to fetch table details');\n const details = await response.json();\n widget = new TableInfoWidget(tableName, details);\n } catch (e) {\n widget = new DatabaseTabWidget();\n widget.title.label = tableName;\n widget.node.innerHTML = `
        Error loading table info: ${e.message}
        `;\n }\n\n let refWidget: Widget | null = null;\n if(this.panel.widgets) {\n for (let w of this.panel.widgets()) {\n if (w instanceof TableInfoWidget || w instanceof QueryResultWidget) {\n refWidget = w;\n }\n }\n }\n if (refWidget) {\n this.panel.addInfoWidget(widget, { ref: refWidget, mode: 'tab-after' });\n } else {\n this.panel.addInfoWidget(widget, { ref: this, mode: 'split-bottom' });\n }\n this.panel.activateWidget(widget);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graphData.nodes.length > 0) {\n this.initializeGraph();\n this.renderGraph();\n }\n }\n\n private getInitialQuery(selectedTables: string[]): string {\n if (selectedTables.length === 0) \n return '';\n \n if (selectedTables.length === 1) {\n return `SELECT * FROM \"${selectedTables[0]}\" LIMIT 100;`;\n }\n \n let initialQuery = `SELECT *\\nFROM \"${selectedTables[0]}\"\\n`;\n \n const usedTables = new Set([selectedTables[0]]);\n const joins: string[] = [];\n \n for (let i = 1; i < selectedTables.length; i++) {\n const currentTable = selectedTables[i];\n let joinFound = false;\n \n for (const link of this.graphData.links) {\n console.log(link.source, link.target);\n const sourceTable = (link.source as TableNode).id;\n const targetTable = (link.target as TableNode).id;\n \n if (sourceTable === currentTable && usedTables.has(targetTable)) {\n joins.push(`JOIN \"${currentTable}\" ON \"${targetTable}\".${link.targetColumn} = \"${currentTable}\".${link.sourceColumn}`);\n usedTables.add(currentTable);\n joinFound = true;\n break;\n }\n \n if (targetTable === currentTable && usedTables.has(sourceTable)) {\n joins.push(`JOIN \"${currentTable}\" ON \"${sourceTable}\".${link.sourceColumn} = \"${currentTable}\".${link.targetColumn}`);\n usedTables.add(currentTable);\n joinFound = true;\n break;\n }\n }\n \n if (!joinFound) {\n joins.push(`CROSS JOIN \"${currentTable}\"`);\n usedTables.add(currentTable);\n }\n }\n \n return initialQuery + joins.join('\\n') + '\\nLIMIT 100;';\n }\n\n private async openNewQueryTab(): Promise {\n const selectedTables = this.getSelectedTables();\n const tableNames = this.graphData.nodes.map(n => n.name);\n const initialQuery = this.getInitialQuery(selectedTables);\n \n let columnNames: string[] = [];\n if (selectedTables.length > 0) {\n try {\n const columnPromises = selectedTables.map(async (tableName) => {\n const response = await fetch(`/db/table/${encodeURIComponent(tableName)}`);\n if (response.ok) {\n const details = await response.json();\n return details.columns ? details.columns.map((col: any) => col.name) : [];\n }\n return [];\n });\n \n const columnArrays = await Promise.all(columnPromises);\n columnNames = [].concat(...columnArrays);\n } catch (error) {\n console.warn('Failed to fetch column names:', error);\n }\n }\n \n const queryWidget = new QueryWidget(this.panel, tableNames, columnNames, initialQuery);\n \n this.panel.addInfoWidget(queryWidget, { ref: this, mode: 'tab-after' });\n this.panel.activateWidget(queryWidget);\n \n this.clearSelection();\n }\n} \n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {TrialGraph, TrialGraphData, ActivationData} from '@noworkflow/trial';\n\nimport {json} from '@noworkflow/utils';\n\nexport\nclass BaseActivationGraphWidget extends Widget {\n\n name: string;\n cls: string;\n t1: string;\n t2: string;\n graph: TrialGraph;\n d3node: d3_Selection;\n\n static graphTypeForm(name: string, selectorDiv: d3_Selection) {\n let graphType = selectorDiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n graphType.append(\"label\")\n .attr(\"for\", name + \"-graphtype\")\n .attr(\"title\", \"Select the graph type\")\n .text(\"Graph Type:\")\n\n let typeOptions = graphType.append(\"select\")\n .attr(\"id\", name + \"-graphtype\")\n .classed(\"graph-type\", true)\n .classed(\"select-style\", true);\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"tree\")\n .attr(\"data-description\", \"Activation tree. Edges represent order of execution\")\n .text(\"Activation Tree\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"no_match\")\n .attr(\"data-description\", \"Activation tree presented as a Graph\")\n .text(\"Activation No Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"exact_match\")\n .attr(\"data-description\", \"Calls have counting independent from caller activations\")\n .text(\"Activation Exact Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"namespace_match\")\n .attr(\"data-description\", \"Calls are combined and a function may have more than one call workflow\")\n .text(\"Activation Namespace Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"definition_tree\")\n .attr(\"data-description\", \"Definition tree. Edges represent order of script definition\")\n .text(\"Definition Tree\")\n\n typeOptions.property(\"value\", \"namespace_match\")\n }\n\n static useCacheForm(name: string, selectorDiv: d3_Selection) {\n let useCache = selectorDiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n useCache.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"use_cache\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"use-cache\", true)\n .attr(\"id\", name + \"-use-cache\")\n\n useCache.append(\"label\")\n .attr(\"for\", name + \"-use-cache\")\n .attr(\"title\", \"Select the graph type\")\n .text(\"Use Cache\")\n }\n\n static createNode(name:string, fn: (name: string, parent: d3_Selection) => void = (parent) => null): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('trial-content', true)\n\n let selectorDiv = content.append(\"div\")\n .classed(\"graphselector\", true)\n .classed(\"hide-toolbar\", true);\n\n BaseActivationGraphWidget.graphTypeForm(name, selectorDiv);\n\n fn(name, selectorDiv);\n\n BaseActivationGraphWidget.useCacheForm(name, selectorDiv);\n\n let selectorReload = selectorDiv.append(\"a\")\n .attr(\"href\", \"#\")\n .classed(\"link-button reload-button\", true)\n\n selectorReload.append('i')\n .classed(\"fa fa-refresh\", true);\n\n selectorReload.append('span')\n .text('Reload');\n\n content.append('div')\n .classed('sub-content', true);\n\n return node;\n }\n\n setGraph(data: TrialGraphData, config: any={}, showDiffFunction?:any, nowVisPanel?: any) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new TrialGraph(this.cls, sub, config, showDiffFunction, nowVisPanel);\n this.graph.load(data, this.t1, this.t2);\n }\n\n graphDefinition(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData) {\n return {\n width: this.node.getBoundingClientRect().width - 24,\n height: this.node.getBoundingClientRect().height - 24,\n customForm: (graph: TrialGraph, form: d3_Selection) => {\n // Toggle Tooltips\n let selectorDiv = this.d3node.select(\".trial-content .graphselector\");\n\n let typeOptions = selectorDiv.select(\".graph-type\");\n typeOptions.property(\"value\", selectedGraph);\n\n let useCacheDiv = selectorDiv.select(\".use-cache\");\n useCacheDiv.property(\"checked\", useCache);\n\n\n let selectorToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + graph.graphId + \"-toolbar-selector-check\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-selector-check\")\n .attr(\"value\", \"show\")\n .property(\"checked\", selectorDiv.classed('visible'))\n .on(\"change\", () => {\n let visible = selectorToggle.property(\"checked\");\n selectorToggleI\n .classed('fa-circle-o', visible)\n .classed('fa-circle', !visible);\n selectorDiv\n .classed('visible', visible)\n .classed('show-toolbar', visible)\n .classed('hide-toolbar', !visible)\n });\n let selectorLabel = form.append(\"label\")\n .attr(\"for\", \"trial-\" + graph.graphId + \"-toolbar-selector-check\")\n\n let optionsNode: any = typeOptions.node();\n\n selectorLabel.append(\"span\")\n .classed(\"toggle-label\", true)\n .text(optionsNode.options[optionsNode.selectedIndex].text)\n\n let selectorToggleI = selectorLabel.append(\"i\")\n .classed('fa', true)\n .classed(\"fa-circle\", !selectorDiv.classed('visible'))\n .classed(\"fa-circle-o\", selectorDiv.classed('visible'))\n },\n customLoadTooltip: (g: TrialGraph, div: HTMLDivElement, text: string, trialid: string, aid: string) => {\n var url = \"/trials/\" + trialid + \"/activations/\" + aid + \".json\";\n function createResponse(activationId: string, div2: Element) {\n return function(data: ActivationData) {\n g.activationStorage[activationId] = data;\n g.updateTooltipDiv(activationId, div2);\n }\n }\n json(text, div, url, createResponse(aid, div));\n },\n genDataflow: genDataflow,\n queryTooltip: true\n }\n }\n\n configureGraph(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData, showDiffFunction?:any, nowVisPanel?:any) {\n this.setGraph(data, this.graphDefinition(selectedGraph, useCache, genDataflow, data), showDiffFunction, nowVisPanel);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graph) {\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n }\n\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {json} from '@noworkflow/utils';\n\nimport {BaseActivationGraphWidget} from './base_activation_graph';\n\nimport {TrialGraphData} from '@noworkflow/trial';\n\n\nexport\nclass DiffGraphWidget extends BaseActivationGraphWidget {\n\n showDiffFunction : any;\n nowVisPanel : any\n\n static url(trial1: string, trial2: string, selectedGraph: string, useCache: boolean): string {\n let cache = useCache ? \"1\" : \"0\"\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/\" + selectedGraph + \"-\" + cache + \".json\"\n );\n }\n\n static createForm(name: string, parent: d3_Selection): void {\n }\n\n constructor(name: string, cls: string, t1: string, t2: string, showDiffFunction : any, nowVisPanel : any) {\n super({ node: BaseActivationGraphWidget.createNode(cls, DiffGraphWidget.createForm) });\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".graph-type\").property(\"value\"),\n this.d3node.select(\".use-cache\").property(\"checked\"),\n )\n })\n this.addClass('content');\n this.addClass('diff-widget');\n this.title.label = name;\n this.title.closable = true;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n this.t1 = t1;\n this.t2 = t2;\n this.showDiffFunction = showDiffFunction\n this.nowVisPanel = nowVisPanel\n }\n\n load(selectedGraph: string = \"namespace_match\", useCache: boolean = true) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n json(\"Diff\", sub, DiffGraphWidget.url(this.t1, this.t2, selectedGraph, useCache), (data: TrialGraphData) => {\n let selectorDiv = this.d3node.select(\".trial-content .graphselector\");\n\n let useCacheDiv = selectorDiv.select(\".use-cache\");\n useCacheDiv.property(\"checked\", useCache);\n\n this.configureGraph(selectedGraph, useCache, false, data, this.showDiffFunction, this.nowVisPanel);\n })\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n } from 'd3-selection';\n\nimport {NowVisPanel} from '../nowpanel';\nimport {Widget} from '@lumino/widgets';\n\nexport function functionDiffWindow(functionDiffJson : any, windowIdAndTitle:string, parentDock : NowVisPanel){ \n if(document.getElementById(windowIdAndTitle)){\n alert(\"This function diff is already open!\")\n return\n }\n \n let functionDiffWidget = new Widget();\n functionDiffWidget.title.label = windowIdAndTitle\n functionDiffWidget.id = windowIdAndTitle;\n functionDiffWidget.title.closable = true;\n parentDock.addGraphWidget(functionDiffWidget);\n parentDock.activateWidget(functionDiffWidget);\n\n let functionDiffWindow = d3_select(document.getElementById(windowIdAndTitle));\n functionDiffWindow.style(\"overflow-y\", \"auto\").style(\"padding\", \"2em 2em 2em 1em\");\n\n function addHideShowButton(elementToAppendTo : any, buttonId : string, spanId : string){\n buttonId += \"-\" + crypto.randomUUID();\n return elementToAppendTo.append(\"span\").append(\"i\").attr(\"id\", buttonId).classed(\"fa fa-compress\", true).on(\"click\",()=>{\n let spanToHideOrShow = d3_select(document.getElementById(spanId));\n let thisButton = d3_select(document.getElementById(buttonId));\n if(spanToHideOrShow.classed(\"d-none\")){\n spanToHideOrShow.classed(\"d-none\", false);\n thisButton.classed(\"fa fa-expand\", false);\n thisButton.classed(\"fa fa-compress\", true);\n }else{\n spanToHideOrShow.classed(\"d-none\", true);\n thisButton.classed(\"fa fa-compress\", false);\n thisButton.classed(\"fa fa-expand\", true);\n }\n });\n }\n\n function filterVariablesArray(array : any, opVariables: boolean){\n \n let defaultVariables: any[] = [\"name\", \"attribute\", \"access\"];\n if(opVariables) defaultVariables = defaultVariables.concat([\"add\", \"sub\", \"mult\", \"div\", \"mod\", \"pow\", \"floordiv\", // arithmetic operators\n \"add_assign\", \"sub_assign\", \"mult_assign\", \"div_assign\", // assignment operators 1\n \"mod_assign\", \"pow_assign\", \"floordiv_assign\", // assignment operators 2\n \"bitand_assign\", \"bitor_assign\", \"bitxor_assign\", // assignment operators 3\n \"rshift_assign\", \"lshift_assign\", // assignment operators 4\n \"eq\", \"noteq\", \"gt\", \"lt\", \"gte\", \"lte\", // comparison operators\n \"and\", \"or\", \"not\", // logical operators\n \"is\", \"isnot\", // identity operators\n \"in\", \"notin\", // membership operators\n \"bitand\", \"bitor\", \"bitxor\", \"invert\", \"rshift\", \"lshift\"]); // bitwise operators]\n\n \n\n let filteredArray = array.filter((arrayElement : string)=>{\n\n for(let i = 0; i < defaultVariables.length; i++){\n if(arrayElement.includes(\"'type': '\"+defaultVariables[i]+\"',\")) return true;\n }\n\n return false;\n });\n\n return filteredArray;\n\n }\n\n function writeHTMLDiffVariables(spanVariables: d3_Selection, trial1VariablesThatChanged: any[], trial2VariablesAdded: any[], trial1VariablesRemoved : any[]) {\n\n if(trial1VariablesThatChanged.length > 0){\n\n let variablesChangedTitle = spanVariables.append(\"p\").attr(\"style\",\"font-weight:bold;\").text(\"The variables changed:\");\n let spanVariablesChanged = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-changed-span-\" + crypto.randomUUID());\n addHideShowButton(variablesChangedTitle, \"hide-and-show-button-variables-changed\", spanVariablesChanged.attr(\"id\"));\n\n trial1VariablesThatChanged.forEach((diffVar: any) => {\n let variablesLines = diffVar.match(/\\{[^}]*\\}/g);\n let differentAttributes = findDifferenceBetweenVariables(variablesLines[0], variablesLines[1]);\n\n spanVariablesChanged.append(\"span\").html(colorJsonAttributesHTML(variablesLines[0], differentAttributes, \"red\"));\n spanVariablesChanged.append(\"br\");\n spanVariablesChanged.append(\"span\").html(colorJsonAttributesHTML(variablesLines[1], differentAttributes, \"green\"));\n spanVariablesChanged.append(\"br\");\n spanVariablesChanged.append(\"br\");\n });\n }\n\n if (trial2VariablesAdded.length > 0) {\n let variablesAddedTitle = spanVariables.append(\"p\").attr(\"style\", \"font-weight:bold;\").text(\"The variables added:\");\n let spanVariablesAdded = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-added-span-\"+crypto.randomUUID());\n addHideShowButton(variablesAddedTitle, \"hide-and-show-button-variables-added\", spanVariablesAdded.attr(\"id\"));\n\n trial2VariablesAdded.forEach((varAdded: any) => {\n spanVariablesAdded.append(\"span\").style(\"color\", \"green\").text(varAdded);\n spanVariablesAdded.append(\"br\");\n });\n }\n\n if (trial1VariablesRemoved.length > 0) {\n let variablesRemovedTitle = spanVariables.append(\"p\").attr(\"style\", \"font-weight:bold;\").text(\"The variables removed:\");\n let spanVariablesRemoved = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-removed-span\"+crypto.randomUUID());\n addHideShowButton(variablesRemovedTitle, \"hide-and-show-button-removed-added\", spanVariablesRemoved.attr(\"id\"));\n\n trial1VariablesRemoved.forEach((varRemoved: any) => {\n spanVariablesRemoved.append(\"span\").style(\"color\", \"red\").text(varRemoved);\n spanVariablesRemoved.append(\"br\");\n });\n }\n }\n\n\n function findDifferenceBetweenVariables(variable1 : string, variable2 : string){\n let jsonVariable1 = JSON.parse(variable1.replace(/\"'/g,\"\\\"\").replace(/'\"/g,\"\\\"\").replace(/'/g,\"\\\"\"));\n let jsonVariable2 = JSON.parse(variable2.replace(/\"'/g,\"\\\"\").replace(/'\"/g,\"\\\"\").replace(/'/g,\"\\\"\"));\n \n let differentAttributes = []\n for(let attr in jsonVariable1){\n if (jsonVariable1[attr] != jsonVariable2[attr]) differentAttributes.push(attr.toString());\n }\n \n return differentAttributes;\n }\n \n function colorJsonAttributesHTML(jsonAsString : string, attributesArray : any, color : string) : string{\n let coloredJsonAsString = jsonAsString.replace(/'<([^>]+)>'/g, \"'$1'\");\n attributesArray.forEach((attr : string)=>{\n // Annotated code = color only the attribute\n //attr = \"'\"+attr+\"':\";\n //coloredJsonAsString = coloredJsonAsString.replace(attr, \"\" + attr + \"\");\n let regex = \"'\"+attr+\"':\"+\"(.*?),\"\n let regexMatches = coloredJsonAsString.match(new RegExp(String.raw`\\s${regex}\\s`))!;\n coloredJsonAsString = coloredJsonAsString.replace(regexMatches[1], \"\" + regexMatches[1] + \"\");\n });\n return coloredJsonAsString;\n }\n\n function colorArrayElementsHTML(array : any, symDifference : any, color : string){\n let coloredArray = array;\n symDifference.forEach((argument: any) => { \n if (coloredArray.includes(argument)) coloredArray[coloredArray.indexOf(argument)] = \"\" + argument.toString() + \"\"; \n });\n return coloredArray.toString();\n }\n\n function writeFileAccess(fileAccessArray : any, window : any, color : string){\n fileAccessArray.forEach((file:any)=>{\n window.append(\"span\").style(\"color\", color).text(\"Name: \" + file.name);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Mode: \" + file.mode);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\" Buffering: \" + file.buffering);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Content hash before: \" + file.content_hash_before).on(\"click\", () => {\n downloadFileContent(file.content_hash_before, file.name);\n });\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Content hash after: \" + file.content_hash_after).on(\"click\", () => {\n downloadFileContent(file.content_hash_after, file.name);\n });\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Timestamp: \" + file.timestamp);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Function: \" + file.stack);\n window.append(\"br\");\n window.append(\"br\");\n });\n }\n \n [\"output\", \"arguments\", \"duration\", \"variables\"].forEach((property)=>{\n let didntChange = JSON.stringify(functionDiffJson[property+\"_function_trial1\"]) == JSON.stringify(functionDiffJson[property+\"_function_trial2\"]);\n let changeText = didntChange ? \"The \" + property + \" didn't change\" : \"The \" + property + \" changed:\";\n let textChangeTitle;\n if(property != \"variables\") textChangeTitle = functionDiffWindow.append(\"p\").attr(\"style\",\"font-weight:bold;\").text(changeText);\n\n if(changeText.includes(\"changed\")){\n if(property == \"duration\"){\n functionDiffJson[property+\"_function_trial1\"] = functionDiffJson[property+\"_function_trial1\"].toString() + \" miliseconds\"\n functionDiffJson[property+\"_function_trial2\"] = functionDiffJson[property+\"_function_trial2\"].toString() + \" miliseconds\"\n }\n\n let spanProperty = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-\"+property+\"-span-\"+crypto.randomUUID());\n\n if(property != \"variables\") addHideShowButton(textChangeTitle, \"hide-and-show-button-\"+property, spanProperty.attr(\"id\"));\n \n if(property == \"variables\"){\n\n let buttonDiv = functionDiffWindow.append(\"div\").attr(\"id\", \"div-diff-function-variables-filter\").lower();\n \n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-default\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show only name, attribute, and access variables\")\n .on(\"click\", () => {\n \n let trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_that_changed\"], false);\n let trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial2_variables_added\"], false);\n let trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_removed\"], false);\n\n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered);\n\n })\n .append(\"i\")\n .classed(\"fa fa-asterisk\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show only name, attribute, and access variables\");\n\n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-operation\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show all operation variables\")\n .on(\"click\", () => {\n \n let trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_that_changed\"], true);\n let trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial2_variables_added\"], true);\n let trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_removed\"], true);\n\n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered);\n\n })\n .append(\"i\")\n .classed(\"fa fa-plus-square\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show all operation variables\");;\n\n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-all\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show all variables\")\n .on(\"click\", () => {\n \n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, functionDiffJson[\"trial1_variables_that_changed\"], functionDiffJson[\"trial2_variables_added\"], functionDiffJson[\"trial1_variables_removed\"]);\n\n })\n .append(\"i\")\n .classed(\"fa fa-code\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show all variables\");\n\n writeHTMLDiffVariables(spanProperty, functionDiffJson[\"trial1_variables_that_changed\"], functionDiffJson[\"trial2_variables_added\"], functionDiffJson[\"trial1_variables_removed\"]);\n\n }else if(property == \"arguments\"){\n let symDifference = functionDiffJson[property+\"_function_trial1\"].filter((x: any) => !functionDiffJson[property+\"_function_trial2\"].includes(x))\n .concat(functionDiffJson[property+\"_function_trial2\"].filter((x: any) => !functionDiffJson[property+\"_function_trial1\"].includes(x)));\n\n spanProperty.append(\"span\").html(colorArrayElementsHTML(functionDiffJson[property+\"_function_trial1\"], symDifference, \"red\"));\n spanProperty.append(\"br\");\n spanProperty.append(\"span\").html(colorArrayElementsHTML(functionDiffJson[property+\"_function_trial2\"], symDifference, \"green\"));\n } else {\n spanProperty.append(\"span\").style(\"color\", \"red\").text(functionDiffJson[property+\"_function_trial1\"].toString());\n spanProperty.append(\"br\");\n spanProperty.append(\"span\").style(\"color\", \"green\").text(functionDiffJson[property+\"_function_trial2\"].toString());\n }\n\n }\n\n });\n\n let fileAccessAddedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_added\"].length + \" file accesses added:\");\n let spanFileAccessAdded = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-added-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessAddedTitle, \"hide-and-show-button-file-access-added\", spanFileAccessAdded.attr(\"id\"));\n writeFileAccess(functionDiffJson[\"file_accesses_added\"], spanFileAccessAdded, \"green\");\n\n\n let fileAccessRemovedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_removed\"].length + \" file accesses removed:\");\n let spanFileAccessRemoved = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-removed-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessRemovedTitle, \"hide-and-show-button-file-access-removed\", spanFileAccessRemoved.attr(\"id\"));\n writeFileAccess(functionDiffJson[\"file_accesses_removed\"], spanFileAccessRemoved, \"red\");\n \n \n let fileAccessReplacedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_replaced\"].length + \" file accesses replaced:\")\n let spanFileAccessReplaced = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-replaced-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessReplacedTitle, \"hide-and-show-button-file-access-replaced\", spanFileAccessReplaced.attr(\"id\"));\n \n functionDiffJson[\"file_accesses_replaced\"].forEach((file:any)=>{\n spanFileAccessReplaced.append(\"span\").text(\"Name: \" + file.name);\n spanFileAccessReplaced.append(\"br\");\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\"Mode: \" + file.mode);\n //spanFileAccessReplaced.append(\"br\");\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\" Buffering: \" + file.buffering);\n //spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Content hash before changed from \").append(\"span\").style(\"color\", \"red\").text(file.content_hash_before_first_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_before_first_trial, file.name);\n });\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.content_hash_before_second_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_before_second_trial, file.name);\n });\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Content hash after changed from \").append(\"span\").style(\"color\", \"red\").text(file.content_hash_after_first_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_after_first_trial, file.name);\n });\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.content_hash_after_second_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_after_second_trial, file.name);\n });\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Timestamp changed from \").append(\"span\").style(\"color\", \"red\").text(file.timestamp_first_trial);\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.timestamp_second_trial);\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Checkpoint changed from \").append(\"span\").style(\"color\", \"red\").text(file.checkpoint_first_trial);\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.checkpoint_second_trial);\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\"Function: \" + file.stack);\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"br\");\n });\n\n function downloadFileContent(fileHash: any, fileName : any) {\n var link = document.createElement(\"a\");\n link.download = fileName;\n link.href = window.location.origin + \"/downloadFile/\"+fileHash;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n link.remove();\n } \n\n /* function showFileContent(fileHash: any, fileName : any) {\n fetch(\"getFileContent/\" + fileHash, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n if(fileName.length > 50) fileName = fileName.substring(40);\n\n let modal = d3_select(document.getElementById(\"main\"))\n .append(\"div\").classed(\"modal fade show\", true)\n .attr(\"id\", \"fileContentModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"fileContentModal\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"false\")\n .style(\"display\", \"block\");\n \n let modalDialog = modal.append(\"div\").classed(\"modal-dialog\", true).attr(\"role\",\"document\").style(\"overflow-y\",\"initial\").style(\"max-height\", \"85%\");\n\n let modalContent = modalDialog.append(\"div\").classed(\"modal-content\", true);\n \n let modalHeader = modalContent.append(\"div\").classed(\"modal-header\", true);\n modalHeader.append(\"h5\").classed(\"modal-title\", true).attr(\"id\", \"fileContentModalLabel\").text(\"File \"+fileName+\"'s content:\");\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"data-dismiss\", \"modal\").attr(\"aria-label\", \"Close\")\n .append(\"span\").attr(\"aria-hidden\", \"true\").html(\"×\").on(\"click\", () => modal.remove());\n\n let modalBody = modalContent.append(\"div\").classed(\"modal-body\", true).style(\"overflow-y\", \"auto\").style(\"height\", \"80vh\");\n modalBody.append(\"p\").html(json.file_content.replace(\"\\r\\n\", \"
        \").replace(\"\\n\", \"
        \"));\n });\n });\n } */\n }","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {DockPanel, Widget} from '@lumino/widgets';\n\nimport {\n HistoryGraph,\n VisibleHistoryNode,\n HistoryGraphData,\n HistoryConfig\n} from '@noworkflow/history';\n\nimport {json, makeid} from '@noworkflow/utils';\n\nimport {TrialGraphWidget} from './trial_graph';\nimport {DiffGraphWidget} from './diff_graph';\nimport {NowVisPanel} from '../nowpanel';\nimport {TrialInfoWidget} from '../info/trial_info';\nimport {DiffInfoWidget} from '../info/diff_info';\nimport {ConfigWidget} from '../config_widget';\nimport {AnnontationWidget} from '../annotation_widget';\n\nimport { functionDiffWindow } from './function_diff';\n\nimport * as fs from 'file-saver';\nimport { instance } from \"@viz-js/viz\";\ndeclare var require: any;\nconst pl = require(\"tau-prolog\");\nconst svgPanZoom = require(\"svg-pan-zoom\"); \"svg-pan-zoom\";\n\nexport\nclass HistoryWidget extends Widget {\n\n name: string;\n expId: string;\n cls: string;\n graph: HistoryGraph;\n d3node: d3_Selection;\n config: ConfigWidget;\n annontationWidget: AnnontationWidget;\n rightClickMenu: d3_Selection;\n modal: d3_Selection;\n modalBody: d3_Selection;\n functionDiffWindow = functionDiffWindow;\n\n static url(script = \"*\", execution = \"*\", summarize=false) {\n return (\"trials.json\"\n + \"?script=\" + encodeURIComponent(script)\n + \"&execution=\" + encodeURIComponent(execution)\n + \"&summarize=\" + (summarize? \"1\" : \"0\")\n )\n }\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let content = document.createElement('div');\n node.appendChild(content);\n let d3node = d3_select(content);\n\n let d3content = d3node.append('div')\n .classed('history-content', true)\n\n let filterDiv = d3content.append(\"div\")\n //let filterDiv = form.insert(\"div\", \":first-child\")\n .classed(\"filter\", true)\n .classed(\"hide-toolbar\", true);\n\n let filterInternal = filterDiv.append(\"div\")\n .classed(\"internal\", true);\n let scriptOptions = filterInternal.append(\"select\")\n .attr(\"name\", \"script\")\n .classed(\"select-style script-options\", true);\n\n scriptOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Scripts\");\n\n let executionOptions = filterInternal.append(\"select\")\n .attr(\"name\", \"execution\")\n .classed(\"select-style exec-selection\", true)\n\n executionOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Statuses\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"finished\")\n .text(\"Finished Trials\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"unfinished\")\n .text(\"Unfinished Trials\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"backup\")\n .text(\"Backup Trials\");\n\n let summarize = filterInternal.append(\"div\")\n .classed(\"graph-attr\", true);\n\n summarize.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"summarize\")\n .attr(\"value\", \"\")\n .attr(\"checked\", false)\n .classed(\"summarize\", true)\n .attr(\"id\", \"history-summarize\")\n\n summarize.append(\"label\")\n .attr(\"for\", \"history-summarize\")\n .attr(\"title\", \"Summarize History\")\n .text(\"Summarize\")\n\n let filterReload = filterInternal.append(\"a\")\n .attr(\"href\", \"#\")\n .classed(\"link-button reload-button\", true)\n\n filterReload.append('i')\n .classed(\"fa fa-refresh\", true);\n\n filterReload.append('span')\n .text('Reload');\n\n d3content.append('div')\n .classed('sub-content', true);\n\n return node;\n }\n\n constructor(config: ConfigWidget, name: string, cls: string, expId: string,annontationWidget:AnnontationWidget) {\n super({ node: HistoryWidget.createNode() });\n this.expId = expId;\n this.config = config;\n this.annontationWidget = annontationWidget;\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".script-options\").property(\"value\"),\n this.d3node.select(\".exec-selection\").property(\"value\"),\n this.d3node.select(\".summarize\").property(\"checked\"),\n )\n })\n this.rightClickMenu = this.d3node.append(\"div\")\n .classed(\"dropdown-menu dropdown-menu-sm\", true)\n .attr(\"id\", \"context-menu\")\n .attr(\"selected-trial\", \"\")\n .style(\"display\", \"block\");\n this.buildModal(this.node);\n this.buildRightClickMenu();\n\n //this.setFlag(Widget.Flag.DisallowLayout);\n this.addClass('content');\n this.addClass('trial-widget');\n this.title.label = name;\n this.title.closable = false;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n }\n\n setGraph(data: HistoryGraphData, config: any={}) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new HistoryGraph(this.cls, sub, config);\n this.graph.load(data);\n }\n\n load(script = \"*\", execution = \"*\", summarize=false) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n\n json(\"History\", sub, HistoryWidget.url(script, execution, summarize), (data: HistoryGraphData) => {\n this.setGraph(data, {\n width: this.node.getBoundingClientRect().width - 24,\n height: this.node.getBoundingClientRect().height - 24,\n customCtrlClick: (g: HistoryGraph, d: VisibleHistoryNode) => {\n var redTrial = g.state.selectedNode;\n if (redTrial == null) {\n return true;\n }\n var greenTrial = d;\n let diffGraphWidget = new DiffGraphWidget(\n \"Diff \" + redTrial.display + \"-\" + greenTrial.display,\n \"diff-\" + redTrial.title + \"-\" + greenTrial.title + makeid(),\n redTrial.title, greenTrial.title, this.functionDiffWindow, (this.parent as NowVisPanel)\n );\n diffGraphWidget.d3node.append(\"span\")\n .text(\"Ctrl+(left click) on a function overlap to see the functions' diff\")\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none')\n .lower();\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n\n if (this.config.showInfo()) {\n let diffInfoWidget = new DiffInfoWidget(redTrial.display, greenTrial.display, redTrial.title, greenTrial.title);\n parentDock.addInfoWidget(diffInfoWidget);\n parentDock.activateWidget(diffInfoWidget);\n }\n\n if (this.config.showTrial()) {\n parentDock.addGraphWidget(diffGraphWidget);\n parentDock.activateWidget(diffGraphWidget);\n diffGraphWidget.load(\n this.config.graphType(),\n this.config.useCache()\n );\n }\n return true;\n },\n customWindowTabCommand: (trialIdSimplified : string, windowId : string, command: string)=>{\n \n let trialExportWidget = new Widget();\n trialExportWidget.title.label = command + \" trial \" + trialIdSimplified;\n trialExportWidget.title.closable = true;\n trialExportWidget.id = windowId;\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n parentDock.addGraphWidget(trialExportWidget);\n parentDock.activateWidget(trialExportWidget);\n return true;\n \n },\n customSelectNode: (g: HistoryGraph, d: VisibleHistoryNode) => {\n let trialGraphWidget = new TrialGraphWidget(\"Trial \" + d.display, \"trial-\" + d.title + makeid(), d.title, d.title);\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n\n if (this.config.showInfo()) {\n let trialInfoWidget = new TrialInfoWidget(d,this.annontationWidget);\n parentDock.addInfoWidget(trialInfoWidget);\n parentDock.activateWidget(trialInfoWidget);\n }\n if (this.config.showTrial()) {\n parentDock.addGraphWidget(trialGraphWidget);\n parentDock.activateWidget(trialGraphWidget);\n trialGraphWidget.load(\n this.config.graphType(),\n this.config.useCache()\n );\n }\n return true;\n },\n customForm: (graph: HistoryGraph, form: d3_Selection) => {\n // Toggle Tooltips\n let filterDiv = this.d3node.select(\".history-content .filter\");\n\n let scriptOptions = filterDiv.select(\".script-options\");\n\n let currentScript = scriptOptions.property(\"value\");\n\n scriptOptions.html(\"\");\n\n scriptOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Scripts\");\n\n for (let script of data.scripts) {\n scriptOptions.append(\"option\")\n .attr(\"value\", script)\n .text(script);\n }\n\n scriptOptions.property(\"value\", currentScript);\n\n let filterToggle = form.append(\"input\")\n .attr(\"id\", \"history-\" + graph.graphId + \"-toolbar-filter-check\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-filter-check\")\n .attr(\"value\", \"show\")\n .property(\"checked\", filterDiv.classed('visible'))\n .on(\"change\", () => {\n let visible = filterToggle.property(\"checked\");\n filterToggleI\n .classed('fa-circle-o', visible)\n .classed('fa-circle', !visible);\n filterDiv\n .classed('visible', visible)\n .classed('show-toolbar', visible)\n .classed('hide-toolbar', !visible)\n });\n let filterLabel = form.append(\"label\")\n .attr(\"for\", \"history-\" + graph.graphId + \"-toolbar-filter-check\")\n let filterToggleI = filterLabel.append(\"i\")\n .classed('fa', true)\n .classed(\"fa-circle\", !filterDiv.classed('visible'))\n .classed(\"fa-circle-o\", filterDiv.classed('visible'))\n\n \n // Push trial\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-push-trial\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Push trial\")\n .on(\"click\", () => this.buildPushCommand(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-cloud-upload\", true)\n\n // Pull trial\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-pull-trial\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Pull trial\")\n .on(\"click\", () => this.buildPullCommand(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-cloud-download\", true)\n\n // Add remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-add-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Add remote\")\n .on(\"click\", () => this.buildAddRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-plus-circle\", true)\n\n // Edit remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-edit-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Edit remote\")\n .on(\"click\", () => this.buildEditRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-pencil-square\", true)\n\n // Delete remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-delete-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Delete remote\")\n .on(\"click\", () => this.buildDeleteRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-trash\", true)\n\n \n }\n });\n });\n } \n\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (!this.graph) {\n return;\n }\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n\n private buildModal(div: any) {\n this.modal = d3_select(div).append(\"div\")\n .classed(\"modal fade\", true)\n .attr(\"id\", \"commandsModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"commandsModalTitle\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"true\");\n\n let modalContent = this.modal.append(\"div\")\n .classed(\"modal-dialog\", true)\n .attr(\"role\", \"document\")\n .append(\"div\").classed(\"modal-content\", true); //modal content\n\n let modalHeader = modalContent.append(\"div\")\n .classed(\"modal-header\", true)//modal header\n modalHeader.append(\"h5\")\n .classed(\"modal-title\", true)\n .attr(\"id\", \"exampleModalTitle\")\n .text(\"Change Temporary Title\") //modal title\n\n this.modalBody = modalContent.append(\"div\")\n .classed(\"modal-body\", true);\n\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"type\", \"button\").text(\"x\").style(\"float\", \"right\")\n .on(\"click\", () => cleanModalBodyAndClose(this.modal, this.modalBody)); //close modal\n }\n\n private buildRightClickMenu() {\n\n //let modal = document.getElementById(\"commandsModal\");\n this.buildRestoreTrialCommand(this.modal, this.modalBody);\n this.buildRestoreFileCommand(this.modal, this.modalBody);\n this.buildProvCommand();\n this.buildExportPrologCommand(this.modal, this.modalBody)\n this.buildDataflowCommand(this.modal, this.modalBody)\n this.buildTrialFunctionDiffCommand(this.modal, this.modalBody, this.functionDiffWindow)\n }\n\n buildTrialFunctionDiffCommand(modal: d3_Selection,\n modalBody: d3_Selection, functionDiffWindow : any) {\n\n let self = this\n\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"trial-function-diff-option\")\n .text(\"function activation diff\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\") ?? \"\";\n\n buildTrialFunctionDiffModal(modal, modalBody, parent, trialId, functionDiffWindow, self);\n });\n\n };\n\n buildDataflowCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"dataflow-option\")\n .text(\"export dataflow\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\") ?? \"\";\n\n buildDataflowModal(modal, modalBody, parent, self.graph.config, trialId);\n });\n\n };\n\n buildExportPrologCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"export-option\")\n .text(\"export prolog\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\");\n let exportUrl = \"/commands/export/\" + trialId;\n let exportWindowId = \"Export window \" + trialId;\n\n\n buildExportPrologModal(modal, modalBody, exportUrl, self.graph.config, parent, exportWindowId, trialId);\n\n });\n }\n\n buildProvCommand() {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"prov-option\")\n .text(\"export prov\")\n .on(\"click\", function () {\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n let provWindowId = \"Prov window \" + trialId;\n\n if (document.getElementById(provWindowId)) return;\n\n\n let provUrl = \"/commands/prov/\" + trialId;\n\n\n fetch(provUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n self.graph.config.customWindowTabCommand(parent.getAttribute(\"selected-trial-simplified\")!, provWindowId, \"Prov\");\n let provWindow = d3_select(document.getElementById(provWindowId));\n\n\n if (response.status == 200) {\n provWindow.style(\"overflow-y\", \"auto\");\n let prov_lines = json.prov.split(\"\\n\");\n for (var line in prov_lines) provWindow.append(\"p\").text(prov_lines[line]);\n\n } else {\n window.alert(\"No prov to export\");\n }\n\n });\n });\n });\n }\n\n private buildRestoreFileCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"restore-file-option\")\n .text(\"restore file\")\n .on(\"click\", function () {\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n\n let trialFiles: string[];\n\n fetch(\"/files/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n trialFiles = json.files\n\n changeTitle(parent, \"Restore file trial \")\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n //createFormTextInput(form, \"restoreFile\", \"Restore file\", \"restoreFileHelp\", \"Write the name of the file you want to restore\");\n createFormSelectInput(form, \"restoreFile\", \"Restore file\", 0, trialFiles.length - 1, 0, \"\", \"\", trialFiles);\n createFormTextInput(form, \"restoreFileID\", \"File identifier\", \"restoreIDHelp\", \"(optional) Identifies the file to be restored. It can be either the timestamp, the number of access, or the code hash\");\n createFormTextInput(form, \"restoreFileTarget\", \"Target file path\", \"restoreTargetHelp\", \"(optional) specifies the target path of the restored file\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).attr(\"type\", \"submit\").text(\"restore trial\");\n\n }\n\n submitButton?.on(\"click\", function () {\n //let fileToRestore : string | boolean = getTextInputFormByID(\"restoreFile\", true);\n let fileToRestore = (document.getElementById(\"restoreFile\")).selectedOptions[0].value;\n let fileIdentifier: string | boolean = getTextInputFormByID(\"restoreFileID\", true);\n let targetPath: string | boolean = getTextInputFormByID(\"restoreFileTarget\", false);\n\n let restoreUrl = \"/commands/restore/file/\" + trialId + \"/\" + fileToRestore + \"/\" + fileIdentifier + \"/\" + targetPath;\n\n if (fileToRestore) getRestoreOrCollabCommand(restoreUrl, form, modalBody);\n else addAlert(modalBody, \"alert-danger\", \"Error!\", \"The file's name is empty\");\n\n });\n });\n\n });\n });\n }\n\n private buildRestoreTrialCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"restore-trial-option\")\n .text(\"restore trial\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n changeTitle(parent, \"Restore trial \");\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormCheckInput(form, \"restoreSkipScript\", \"Skip Script\");\n createFormCheckInput(form, \"restoreSkipLocalModules\", \"Skip Local Modules\");\n createFormCheckInput(form, \"restoreSkipFileAccess\", \"Skip File Access\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).attr(\"type\", \"submit\").text(\"restore trial\");\n\n }\n\n submitButton?.on(\"click\", function () {\n let skipScript = (document.getElementById(\"restoreSkipScript\")).checked;\n let skipModules = (document.getElementById(\"restoreSkipLocalModules\")).checked;\n let skipFileAccess = (document.getElementById(\"restoreSkipFileAccess\")).checked;\n\n let restoreUrl = \"/commands/restore/trial/\" + trialId + \"/\" + skipScript + \"/\" + skipModules + \"/\" + skipFileAccess;\n\n getRestoreOrCollabCommand(restoreUrl, form, modalBody);\n\n });\n });\n }\n\n private buildAddRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Add new remote\";\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormTextInput(form, \"inputAddRemoteUrl\", \"Remote URL: \");\n createFormTextInput(form, \"inputAddRemoteName\", \"Remote name: \");\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Add remote\");\n }\n\n submitButton?.on(\"click\", function () {\n let remoteURL = (document.getElementById(\"inputAddRemoteUrl\")).value;\n let remoteName = (document.getElementById(\"inputAddRemoteName\")).value;\n\n let addRemoteURL = \"/collab/remotes/add/\" + remoteName + \"/\" + remoteURL;\n\n fetch(addRemoteURL, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then((json) => {\n form.remove();\n if (response.status == 200) {\n addAlert(modalBody, \"alert-success\", \"Success!\", json.terminal_text);\n } else {\n addAlert(modalBody, \"alert-danger\", \"Error!\", \"\");\n }\n\n });\n });\n\n });\n }\n\n private buildDeleteRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"editDeleteServerUrlId\", \"Delete remote\", \"delete\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildEditRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"editRemoteServerUrlId\", \"Edit remote\", \"edit\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildPushCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"pushServerUrlId\", \"Push experiment\", \"push\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildPullCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"pullServerUrlId\", \"Pull experiment\", \"pull\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private executeCollabCommand(modal: d3_Selection, modalBody: d3_Selection, serverUrlId: string, title: string, command: string, remotes: any) {\n document.getElementById(\"exampleModalTitle\")!.textContent = title;\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n let select: d3_Selection;\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n form.append(\"label\").attr(\"for\", \"remotes\").text(\"Remote: \");\n\n select = form.append(\"select\").attr(\"name\", \"remotes\").attr(\"id\", \"remotes\");\n for (let i = 0; i < remotes.length; i++) {\n select.append(\"option\").attr(\"value\", remotes[i].server_url).text(remotes[i].name);\n }\n\n form.append(\"br\");\n form.append(\"span\").text(\"Remote URL: \");\n let remoteURLText = form.append(\"span\").attr(\"id\", serverUrlId + \"Remote\").text(remotes[0].server_url);\n select.on(\"change\", () => {\n remoteURLText.text(select.node()!.value);\n })\n\n form.append(\"br\");\n if (command == \"edit\") {\n createFormTextInput(form, \"inputEditRemoteName\", \"Remote new name: \");\n }\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(title);\n }\n\n submitButton?.on(\"click\", function () {\n let serverUrl = select.node()!.value;\n\n let collabCommandUrl = \"/commands/\" + command + \"/\" + serverUrl;\n if (command == \"edit\") collabCommandUrl = \"/collab/remotes/edit/\" + (document.getElementById(\"inputEditRemoteName\")).value + \"/\" + serverUrl;\n if (command == \"delete\") collabCommandUrl = \"/collab/remotes/delete/\" + serverUrl;\n\n getRestoreOrCollabCommand(collabCommandUrl, form, modalBody);\n\n });\n }\n\n}\n\nfunction buildTrialFunctionDiffModal(modal: d3_Selection, modalBody: d3_Selection,\n parent: Element, trialId: string, functionDiffWindow : any, self : any) {\n\n let secondTrialId : string;\n changeTitle(parent, \"Function activation diff trial\")\n //document.getElementById(\"exampleModalTitle\")!.textContent = \"Function activation diff trial \" + trialId;\n\n fetch(\"/getFunctionActivations/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n showModal(modal);\n\n if (modalBody) {\n\n //scrollableModal(modalBody);\n\n modalBody.append(\"span\").text(\"Select this trial's activation: \");\n let firstTrialSelectActivation = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"firstTrialFunctionActivations\").attr(\"id\", \"firstTrialFunctionActivations\").style(\"max-width\", \"480px\");\n\n for(let activation in json[\"function_activations\"]){\n firstTrialSelectActivation.append(\"option\").attr(\"value\", json[\"function_activations\"][activation].id).text(JSON.stringify(json[\"function_activations\"][activation]).replace(/{|}/g,\"\").substring(0, 70));\n } \n\n modalBody.append(\"br\");\n\n modalBody.append(\"span\").text(\"Select the other trial: \");\n\n let secondTrialSelect = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"secondTrialSelect\").attr(\"id\", \"secondTrialSelect\");\n\n fetch(\"/getAllTrialsIdsAndTags\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n for(let trial in json){\n secondTrialSelect.append(\"option\").attr(\"value\", json[trial].id).text(json[trial].tag);\n }\n\n modalBody.append(\"br\");\n\n modalBody.append(\"span\").text(\"Select the other trial's activation: \");\n\n let secondTrialSelectActivation = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"secondTrialFunctionActivations\").attr(\"id\", \"secondTrialFunctionActivations\").style(\"max-width\", \"480px\");\n\n getSecondTrialFunctionActivations(secondTrialSelectActivation);\n\n secondTrialSelect.on(\"change\",()=>{\n\n getSecondTrialFunctionActivations(secondTrialSelectActivation);\n\n });\n \n \n modalBody.append(\"br\");\n\n let submitButton = modalBody.append(\"button\").classed(\"btn btn-primary mb-2\", true).style(\"margin-top\", \"10px\").text(\"Confirm\");\n\n submitButton!.on(\"click\", function () {\n\n let firstTrialFunctionId = (document.getElementById(\"firstTrialFunctionActivations\")).selectedOptions[0].value;\n let secondTrialFunctionId = (document.getElementById(\"secondTrialFunctionActivations\")).selectedOptions[0].value;\n \n let url = \"/commands/diff/\"+ trialId +\"/\"+ firstTrialFunctionId + \"/\"+ secondTrialId + \"/\" + secondTrialFunctionId;\n\n fetch(url, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n \n response.json().then((json) => {\n functionDiffWindow(json, \"Diff trial \" + trialId + \" activation_id \" + firstTrialFunctionId + \" trial \" + secondTrialId + \" activation_id \" + secondTrialFunctionId, self.parent as NowVisPanel);\n });\n });\n \n cleanModalBodyAndClose(modal, modalBody);\n \n \n \n });\n\n })});\n\n \n\n }\n\n });\n });\n\n\n\n function getSecondTrialFunctionActivations(secondTrialSelectActivation: d3_Selection) {\n secondTrialId = (document.getElementById(\"secondTrialSelect\")).selectedOptions[0].value;\n\n fetch(\"/getFunctionActivations/\" + secondTrialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n secondTrialSelectActivation.html(\"\");\n\n for (let activation in json[\"function_activations\"]) {\n secondTrialSelectActivation.append(\"option\").attr(\"value\", json[\"function_activations\"][activation].id).text(JSON.stringify(json[\"function_activations\"][activation]).replace(/{|}/g, \"\").substring(0, 70));\n }\n\n });\n });\n }\n}\n\nfunction buildExportPrologModal(modal: d3_Selection, modalBody: d3_Selection, exportUrl: string, config: HistoryConfig, parent: Element, exportWindowId: string, trialId: string | null) {\n let submitButton;\n let form: d3_Selection;\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Prolog\";\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n\n createFormCheckInput(form, \"exportProvRules\", \"Also exports inference rules\");\n createFormCheckInput(form, \"exportProvHideTimestamps\", \"Hide timestamps\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Generate prolog\");\n\n }\n\n submitButton?.on(\"click\", () => {\n let inferenceRules = (document.getElementById(\"exportProvRules\")).checked;\n let hideTimestamps = (document.getElementById(\"exportProvHideTimestamps\")).checked;\n\n exportUrl += \"/\" + inferenceRules + \"/\" + hideTimestamps;\n\n buildExportPrologTab(exportUrl, config, parent, exportWindowId, trialId);\n cleanModalBodyAndClose(modal, modalBody);\n });\n}\n\nfunction buildExportPrologTab(exportUrl: string, config: HistoryConfig, parent: Element, exportWindowId: string, trialId: string | null) {\n\n if (document.getElementById(exportWindowId)) {\n window.alert(\"Close trial \" + trialId + \" prolog tab before generating a new prolog\");\n return;\n }\n\n\n\n fetch(exportUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response: any) => {\n response.json().then((json: any) => {\n\n if (response.status == 200) {\n\n\n config.customWindowTabCommand(parent.getAttribute(\"selected-trial-simplified\")!, exportWindowId, \"Prolog\");\n let exportWindow = d3_select(document.getElementById(exportWindowId));\n\n let form: d3_Selection = (exportWindow.append(\"form\").attr(\"onsubmit\", \"return false;\") as d3_Selection)\n .append(\"div\").classed(\"form-row\", true);\n createFormTextInput(form, \"exportPrologProgram\" + trialId, \"Prolog\").classed(\"col-7\", true);\n createFormTextInput(form, \"exportPrologQuery\" + trialId, \"Query\").classed(\"col\", true);\n\n let submitButton = form.append(\"div\").classed(\"col-auto\", true).style(\"padding-top\", \"5vh\")\n .append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Execute Query\");\n\n\n (document.getElementById(\"exportPrologProgram\" + trialId))!.value = json.export;\n\n let prologSession = pl.create(1000);\n\n let answerCallback = (answer: any, answerString: string) => {\n if (answer == false) {\n\n let answerCardTextId = \"Answers prolog card text \" + trialId;\n let answerCardText = document.getElementById(answerCardTextId) ? d3_select(document.getElementById(answerCardTextId)) : null;\n if (answerCardText == null) {\n let answerWindow = exportWindow.append(\"div\");\n answerWindow.classed(\"card\", true).append(\"div\").classed(\"card-header\", true).text(\"Answers\");\n answerCardText = answerWindow.append(\"div\").classed(\"card-body\", true)\n .append(\"p\").classed(\"card-text\", true).attr(\"id\", answerCardTextId)\n .style(\"overflow-y\", \"auto\").style(\"max-height\", \"35vh\");\n }\n\n answerCardText!.html(answerString);\n return;\n }\n answerString += prologSession.format_answer(answer).toString() + \"
        \";\n\n prologSession.answer((answer: any) => answerCallback(answer, answerString));\n };\n\n submitButton.on(\"click\", () => {\n let prologProgram = getTextInputFormByID(\"exportPrologProgram\" + trialId);\n let userQuery = getTextInputFormByID(\"exportPrologQuery\" + trialId);\n if (prologProgram && userQuery) {\n\n prologSession.consult(prologProgram, {\n success: () => {\n console.log(\"Prolog consult success\");\n prologSession.query(userQuery, {\n success: () => {\n prologSession.answer((answer: any) => answerCallback(answer, \"\"));\n },\n error: () => {\n console.log(\"Erro query\");\n }\n });\n },\n error: () => {\n console.log(\"Prolog consult error\");\n }\n });\n }\n\n\n });\n\n } else {\n console.log(\"Export error\");\n }\n\n });\n });\n}\n\nfunction scrollableModal(modalBody: d3_Selection) {\n let modalDialog = (document.getElementsByClassName(\"modal-dialog\") as HTMLCollectionOf)[0];\n modalDialog.style.overflowY = \"initial\";\n modalDialog.style.maxHeight = \"85%\";\n modalBody.style(\"overflow-y\", \"auto\").style(\"height\", \"80vh\");\n}\n\nfunction getDataflow(response: any, config: HistoryConfig, parent: Element, dataflowWindowId: string, dataflowUrl: string) {\n response.json().then((json: any) => {\n if (response.status == 200) {\n\n let trialIdSimplified = parent.getAttribute(\"selected-trial-simplified\")!;\n\n config.customWindowTabCommand(trialIdSimplified, dataflowWindowId, \"Dataflow\");\n console.log(json.dataflow);\n\n instance().then(viz => {\n const dataflowWindow = document.getElementById(dataflowWindowId);\n\n // Download SVG Button, excluding hint, and excluding checkbox\n dataflowButtons(dataflowWindow, dataflowWindowId, \"Click on a function call, then (Ctrl or Shift)+click on another one to exclude prior provenience\", json.dataflow)\n\n let selectedNode: Element | undefined;\n let selectedEdge: Element | undefined;\n\n //dataflowWindow!.style.overflowY = dataflowWindow!.style.overflowX = \"auto\";\n let svgElement = viz.renderSVGElement(json.dataflow);\n dataflowWindow!.appendChild(svgElement);\n svgPanZoom(svgElement, {preventMouseEventsDefault: false, dblClickZoomEnabled: false});\n\n for (let nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) {\n\n let presentNode: Element | undefined = svgElement.children[0].children[0].children[nodeIndex];\n if (presentNode.getAttribute(\"class\") == \"node\" && presentNode.children[1].tagName.toLowerCase() == \"polygon\") {\n let presentNodeSelection = d3_select(presentNode);\n\n presentNodeSelection.style(\"cursor\", \"pointer\");\n\n presentNodeSelection.on(\"click\", (event: MouseEvent) => {\n\n if (selectedNode) { selectedNode.children[1].setAttribute(\"stroke\", \"black\"); }\n\n if (selectedNode && (event.ctrlKey || event.shiftKey)) {\n deletePriorNodes(selectedNode, presentNode!, viz, dataflowUrl, config, trialIdSimplified, dataflowWindowId);\n } else {\n selectedNode = svgElement.children[0].children[0].children[nodeIndex];\n selectedNode.children[1].setAttribute(\"stroke\", \"red\");\n }\n });\n } else if (presentNode.getAttribute(\"class\") == \"edge\" && presentNode.children[1].tagName.toLowerCase() == \"path\"){\n let presentNodeSelection = d3_select(presentNode);\n\n presentNodeSelection.style(\"cursor\", \"pointer\");\n\n presentNodeSelection.on(\"click\",()=>{\n if (selectedEdge) {selectedEdge.children[1].setAttribute(\"stroke\", \"black\");}\n selectedEdge = svgElement.children[0].children[0].children[nodeIndex];\n selectedEdge.children[1].setAttribute(\"stroke\", \"red\");\n });\n }\n }\n });\n\n\n } else {\n console.log(\"Dataflow error\");\n }\n\n });\n\n}\n\nfunction checkboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow: HTMLElement) {\n\n let dataflowWindowD3Select = d3_select(dataflowWindow);\n let checkboxID = dataflowWindow.getAttribute(\"id\") + \"OpenNewWindowOption\";\n \n dataflowWindowD3Select.append(\"input\")\n .attr(\"id\", checkboxID)\n .attr(\"type\", \"checkbox\");\n\n dataflowWindowD3Select.append(\"label\")\n .attr(\"for\", checkboxID)\n .text(\"Don't open dataflow with excluded provenance in a new tab\")\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n}\n\nfunction excludePriorProvenanceHint(dataflowWindow: HTMLElement | null, text : string) {\n d3_select(dataflowWindow).append(\"div\").append(\"div\")\n .text(text)\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n}\n\nfunction chooseDataflowExcludedProvenanceWindowId(presentWindowId : string, newWindowId : string){\n if((document.getElementById(presentWindowId + \"OpenNewWindowOption\") as HTMLInputElement).checked) return presentWindowId;\n return newWindowId;\n}\n\nfunction deletePriorNodes(selectedNode: Element, presentNode: Element, viz: any, dataflowUrl: string,\n config: HistoryConfig, trialIdSimplified: string, presentWindowId: string) {\n\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\"));\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\")) + \"/true/\";\n\n let selectedNodeEvaluationTitle = selectedNode.children[0].innerHTML;\n let presentNodeOrderEvaluationTitle = presentNode.children[0].innerHTML;\n\n let firstEvaluationOrder = Number(selectedNodeEvaluationTitle.replace(\"e_\", \"\"));\n let lastEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n if (firstEvaluationOrder > lastEvaluationOrder) {\n lastEvaluationOrder = firstEvaluationOrder;\n firstEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n }\n\n let dataflowUrlLastEvaluation = dataflowUrl + lastEvaluationOrder;\n let dataflowUrlFirstEvaluation = dataflowUrl + firstEvaluationOrder;\n\n let excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(presentWindowId, \"Dataflow excluding prior \" + presentNodeOrderEvaluationTitle + \" \" + selectedNodeEvaluationTitle\n + \" window \" + trialIdSimplified, trialIdSimplified, config);\n\n excludingProvenanceWindow!.textContent = \"Loading...\";\n\n fetch(dataflowUrlLastEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseLastEvaluation: any) => {\n responseLastEvaluation.json().then((jsonLastEvaluation: any) => {\n let dataflowLastEvaluation = jsonLastEvaluation.dataflow;\n fetch(dataflowUrlFirstEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseFirstEvaluation: any) => {\n responseFirstEvaluation.json().then((jsonFirstEvaluation: any) => {\n let dataflowFirstEvaluation = jsonFirstEvaluation.dataflow;\n\n dataflowAMinusDataflowB(dataflowLastEvaluation, dataflowFirstEvaluation, firstEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationOrder);\n\n });\n });\n });\n });\n\n}\n\nfunction getDataflowWindowExcludeSomeProvenance(presentWindowId: string, newWindowId: string, trialIdSimplified: string, config: HistoryConfig) {\n let excludingProvenanceWindowId = chooseDataflowExcludedProvenanceWindowId(presentWindowId, newWindowId);\n\n let excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId);\n\n if (!excludingProvenanceWindow) {\n\n config.customWindowTabCommand(trialIdSimplified, excludingProvenanceWindowId, \"Dataflow excluding some provenance\");\n\n excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId);\n\n }\n return excludingProvenanceWindow;\n}\n\nfunction dataflowAMinusDataflowB(dataflowA: any, dataflowB: any, selectedEvaluationOrder: number, excludingProvenanceWindow: HTMLElement | null, viz: any, dataflowUrl: string, config : HistoryConfig, lastEvaluationId : number) {\n //SET MINUS OPERATION A-B \"The set A−B consists of elements that are in A but not in B. For example if A={1,2,3} and B={3,5}, then A−B={1,2}.\"\n let linesDataflowA = dataflowA.split(\"\\n\");\n let linesDataflowB = dataflowB.split(\"\\n\");\n let newDataflow = linesDataflowA.slice(0);\n\n removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB, newDataflow, selectedEvaluationOrder);\n\n let dataflowIsAligned = addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow, selectedEvaluationOrder, linesDataflowA);\n\n removesDeletedEvaluationsFromAligment(dataflowIsAligned, newDataflow);\n\n console.log(\"------\");\n let newDataflowString = newDataflow.join(\"\\n\");\n console.log(newDataflowString);\n console.log(\"------\");\n\n excludingProvenanceWindow!.textContent = \"\";\n\n dataflowButtons(excludingProvenanceWindow, excludingProvenanceWindow!.getAttribute(\"id\")!, \"(Ctrl or Shift)+click on a function call to exclude prior provenience\", newDataflowString)\n\n let svgElement = viz.renderSVGElement(newDataflowString);\n excludingProvenanceWindow!.appendChild(svgElement);\n svgPanZoom(svgElement, {preventMouseEventsDefault: false, dblClickZoomEnabled: false});\n\n addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId);\n \n}\n\nfunction addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement: any, viz: any, dataflowUrl: string, newDataflowString: any, excludingProvenanceWindow: HTMLElement | null, config : HistoryConfig, lastEvaluationId : number) {\n let selectedEdge : Element | undefined;\n \n for (let nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) {\n\n let selectedNode: Element = svgElement.children[0].children[0].children[nodeIndex];\n if (selectedNode.getAttribute(\"class\") == \"node\" && selectedNode.children[1].tagName.toLowerCase() == \"polygon\") {\n\n let selectedNodeSelection = d3_select(selectedNode);\n \n selectedNodeSelection.style(\"cursor\", \"pointer\");\n \n selectedNodeSelection.on(\"click\", (event: MouseEvent) => {\n\n if (event.ctrlKey || event.shiftKey) deletePriorNodesAfterDeletingPriorNodes(selectedNode, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId);\n\n });\n } else if (selectedNode.getAttribute(\"class\") == \"edge\" && selectedNode.children[1].tagName.toLowerCase() == \"path\"){\n\n let selectedNodeSelection = d3_select(selectedNode);\n\n selectedNodeSelection.style(\"cursor\", \"pointer\");\n\n selectedNodeSelection.on(\"click\",()=>{\n if (selectedEdge) {selectedEdge.children[1].setAttribute(\"stroke\", \"black\");}\n selectedEdge = svgElement.children[0].children[0].children[nodeIndex];\n selectedEdge!.children[1].setAttribute(\"stroke\", \"red\");\n });\n }\n }\n}\n\nfunction deletePriorNodesAfterDeletingPriorNodes(selectedNode: Element, viz: any, dataflowUrl: string, newDataflowString: any, excludingProvenanceWindow: HTMLElement | null, config : HistoryConfig, lastEvaluationId : number) {\n\n let selectedNodeOrderEvaluationTitle = selectedNode.children[0].innerHTML;\n let selectedEvaluationOrder = Number(selectedNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n\n if(lastEvaluationId == selectedEvaluationOrder){\n window.alert(\"You can't remove everything.\")\n return undefined;\n } \n \n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\"));\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\")) + \"/true/\";\n\n \n\n let dataflowUrlPresentEvaluation = dataflowUrl + selectedEvaluationOrder;\n\n\n let excludingProvenanceWindowId = excludingProvenanceWindow?.getAttribute(\"id\");\n excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(excludingProvenanceWindowId!, excludingProvenanceWindowId+\"OneMore\", \"\", config);//TODO get simplifiedtrialid from wxcludingprovenancewindow\n\n excludingProvenanceWindow!.textContent = \"Loading...\";\n\n fetch(dataflowUrlPresentEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseLastEvaluation: any) => {\n responseLastEvaluation.json().then((json: any) => {\n\n let selectedEvaluationDataflow = json.dataflow;\n\n dataflowAMinusDataflowB(newDataflowString, selectedEvaluationDataflow, selectedEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationId);\n\n });\n });\n}\n\nfunction removesDeletedEvaluationsFromAligment(dataflowIsAligned: boolean, newDataflow: any) {\n if (dataflowIsAligned) {\n\n let evaluations: any = [];\n\n for (let lineIndex = 3; lineIndex < newDataflow.length; lineIndex++) {\n let line = newDataflow[lineIndex];\n if (line.includes(\"label\")) evaluations.push(line.replace(/\\[[^\\]]*?\\];/, \"\").split(\" \")[4].trim());\n\n else if (line.includes(\"{rank=\")) {\n let alignedEvaluations = line.split(\" \");\n\n for (let alignedEvalIndex = 5; alignedEvalIndex < alignedEvaluations.length; alignedEvalIndex++) {\n let alignedEval = alignedEvaluations[alignedEvalIndex].replace(\"}\\r\", \"\").trim();\n\n if (!evaluations.includes(alignedEval)) newDataflow[lineIndex] = newDataflow[lineIndex].replace(alignedEval, \"\");\n }\n }\n\n else if (line.includes(\"->\")) break;\n }\n }\n}\n\nfunction removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB: any, newDataflow: any, selectedEvaluationOrder: number) {\n for (let i = 3; i < linesDataflowB.length - 2; i++) {\n let indexOfDataflowLineToRemove;\n\n if (linesDataflowB[i].includes(\"->\") && linesDataflowB[i].includes(\"[\")) {\n\n let lineToRemove = linesDataflowB[i].replace(/\\[[^\\]]*\\]/, \"\");\n\n indexOfDataflowLineToRemove = newDataflow.findIndex((dataflowLine: string) => {\n return dataflowLine.replace(/\\[[^\\]]*\\]/, \"\") == lineToRemove;\n });\n\n\n } else indexOfDataflowLineToRemove = newDataflow.indexOf(linesDataflowB[i]);\n\n if (indexOfDataflowLineToRemove > -1 && (!linesDataflowB[i].includes(\"_\" + selectedEvaluationOrder + \" [\"))) newDataflow.splice(indexOfDataflowLineToRemove, 1);\n\n }\n}\n\nfunction addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow: any, selectedEvaluationOrder: number, linesDataflowA: any) {\n let tempArray: any[] = [];\n let isAligned = false;\n\n newDataflow.forEach((line: string) => {\n if (!isAligned && line.includes(\"{rank\")) isAligned = true;\n\n\n if (line.includes(\"->\")) {\n let evaluationWithoutSettings = line.split(\" \")[6];\n if (Number(evaluationWithoutSettings.replace(\"e_\", \"\").replace(\"a_\", \"\")) < selectedEvaluationOrder) { // TODO revise if firstEvaluationOrder is right\n let lineToAdd = linesDataflowA.find((string: string) => string.includes(evaluationWithoutSettings + \" [\"));\n if (newDataflow.indexOf(lineToAdd) < 0) tempArray.push(lineToAdd);\n }\n }\n });\n\n tempArray.forEach(item => newDataflow.splice(3, 0, item));\n\n return isAligned\n}\n\nfunction buildDataflowModal(modal: d3_Selection, modalBody: d3_Selection,\n parent: Element, config: HistoryConfig, trialId: string) {\n\n let submitButton;\n let evaluationList;\n let form: d3_Selection;\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Dataflow\";\n\n fetch(\"/dataflow/evaluations/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n evaluationList = json.evaluations;\n let selectedEvaluation: string | null;\n let dataflowTextInputEvaluation: HTMLSelectElement;\n\n showModal(modal);\n\n if (modalBody) {\n\n scrollableModal(modalBody);\n\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormCheckInput(form, \"dataFlowShowType\", \"Show type nodes\");\n createFormCheckInput(form, \"dataFlowHideTimestamps\", \"Hide timestamps\");\n createFormCheckInput(form, \"dataFlowHideInternals\", \"Show variables and functions which name starts with a leading underscore\");\n createFormCheckInput(form, \"dataFlowHideNotCode\", \"Hide evaluations that aren't from the code\");\n createFormCheckInput(form, \"dataFlowActivationNames\", \"Display nodes with their activation names instead\");\n createFormCheckInput(form, \"dataFlowHideFunc\", \"Hide func type evaluations\");\n\n createFormSelectInput(form, \"dataflowShowAccesses\", \"Show file accesses\", 0, 4, 1, \"dataflowShowAccessesHelp\",\n \"(default: Shows each file once (hide external accesses))\",\n [\"Hides file accesses\", \"Shows each file once (hide external accesses)\", \"Shows each file once (show external accesses)\",\n \"Shows all accesses (except external accesses)\", \"Shows all accesses (including external accesses)\"]);\n\n createFormSelectInput(form, \"dataflowEvaluation\", \"Combine evaluation nodes\", 0, 2, 1, \"dataflowEvaluationHelp\",\n \"(default: Combines evaluation nodes by assignment)\",\n [\"Not combine evaluation nodes\", \"Combines evaluation nodes by assignment\", \"Combines evaluation nodes by value\"]);\n\n createFormSelectInput(form, \"dataflowGroup\", \"Align evalutions in the same column\", 0, 2, 0,\n \"dataflowGroupHelp\",\n \"(default: Does no align). With this option, all variables in a loop appear grouped, reducing the width of the graph. It may affect the graph legibility. The alignment is independent for each activation.\",\n [\"Does no align\", \"Aligns by line\", \"Aligns by line and column\"]);\n\n createFormSelectInput(form, \"dataflowMode\", \"Graph mode\", 0, 4, 1, \"dataflowModeHelp\",\n \"(default: coarseGrain). 'activation' presents only function activations and file accesses. Dependencies on the dataflow are clustered by depth(-d). 'coarseGrain' is the same as the activation dataflow, but with the addition of parameters and variable assignment of function activations. 'looplessCoarseGrain' is the same as the coarseGrain dataflow, but it doesn't repeat function activations when they're in the same line in a loop. 'fineGrain' is the same as the coarseGrain dataflow with the addition of variables, all user defined evaluations and data values. 'all' presents a dataflow with all evaluations and function activations. Dependencies on the dataflow are not clustered.\",\n [\"activation\", \"coarseGrain\", \"looplessCoarseGrain\", \"fineGrain\", \"all\"]);\n\n createFormNumberInput(form, \"dataflowDepth\", \"Visualization depth\", 0, 0, \"dataflowDepthHelp\", \"(default: 0) 0 represents infinity. This parameter is ignored when the mode is \\\"all\\\"\");\n createFormNumberInput(form, \"dataflowValueLength\", \"Maximum length of values\", 0, 0, \"dataflowValueLengthHelp\",\n \"(default: 0). 0 indicates that values should be hidden.The values appear on the second line of node lables. E.g. if it is set to '10', it will show 'data.dat', but it will transform 'data2.dat' in to 'da...dat' to respect the length restriction (note that '' is part of the value). Minimum displayable value: 5. Suggested: 55.\");\n createFormNumberInput(form, \"dataflowName\", \"Maximum length of names\", 0, 55, \"dataflowNameHelp\",\n \"(default: 55). 0 indicates that values should be hidden. Minimum displayable value: 5. Suggested: 55.\");\n\n let dataflowEvaluationInput = createFormTextInput(form, \"dataflowTextInputEvaluation\", \"Evaluation was derived from: \", \"dataflowSelectEvaluationHelp\", \"Filter that shows only one evaluation and the ones that derived it\");\n\n form.append(\"div\").attr(\"id\", \"autocompleteSuggestionsResults\");\n\n dataflowTextInputEvaluation = (document.getElementById(\"dataflowTextInputEvaluation\"))\n\n\n addsAutocompleteToDataflowWDF(dataflowEvaluationInput, dataflowTextInputEvaluation, evaluationList);\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Generate dataflow\");\n\n }\n\n submitButton!.on(\"click\", function () {\n let dataFlowShowType = (document.getElementById(\"dataFlowShowType\")).checked;\n let dataFlowHideTimestamps = (document.getElementById(\"dataflowMode\")).checked;\n let dataFlowHideInternals = (document.getElementById(\"dataFlowHideInternals\")).checked;\n let dataFlowHideNotCode = (document.getElementById(\"dataFlowHideNotCode\")).checked;\n let dataFlowActivationNames = (document.getElementById(\"dataFlowActivationNames\")).checked;\n let dataFlowHideFunc = (document.getElementById(\"dataFlowHideFunc\")).checked;\n\n let dataflowFileAccesses = (document.getElementById(\"dataflowShowAccesses\")).selectedOptions[0].index;\n let dataflowEvaluation = (document.getElementById(\"dataflowEvaluation\")).selectedOptions[0].index;\n let dataflowGroup = (document.getElementById(\"dataflowGroup\")).selectedOptions[0].index;\n let dataflowMode = (document.getElementById(\"dataflowMode\")).selectedOptions[0].value;\n\n let dataflowDepth = (document.getElementById(\"dataflowDepth\")).value;\n let dataflowValueLength = (document.getElementById(\"dataflowValueLength\")).value;\n let dataflowName = (document.getElementById(\"dataflowName\")).value;\n\n let trialId = parent.getAttribute(\"selected-trial\");\n\n selectedEvaluation = dataflowTextInputEvaluation.getAttribute(\"selectedEvaluationID\");\n\n let dataflowUrl = \"/commands/dataflow/\" + trialId + \"/\" + dataFlowShowType + \"/\" + dataFlowHideTimestamps + \"/\" +\n dataFlowHideInternals + \"/\" + dataFlowHideNotCode + \"/\"+ dataFlowActivationNames + \"/\"+ dataFlowHideFunc + \"/\" +dataflowFileAccesses + \"/\" + dataflowEvaluation + \n \"/\" + dataflowGroup + \"/\" + dataflowDepth + \"/\" + dataflowValueLength + \"/\" + dataflowName + \"/\" + dataflowMode;\n dataflowUrl += (selectedEvaluation && !selectedEvaluation.includes(\"undefined\")) ? \"/true/\" + selectedEvaluation : \"/false/0\";\n\n let dataflowWindowId = \"Dataflow window \" + trialId;\n\n /* if (document.getElementById(dataflowWindowId)) {\n window.alert(\"Close trial \" + trialId + \" dataflow tab before generating a new dataflow\");\n return;\n } */\n\n if (document.getElementById(dataflowWindowId)) dataflowWindowId += crypto.randomUUID();\n\n fetch(dataflowUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response: any) => {\n console.log(dataflowMode);\n cleanModalBodyAndClose(modal, modalBody);\n getDataflow(response, config, parent, dataflowWindowId, dataflowUrl);\n });\n\n\n\n });\n\n });\n });\n\n\n}\n\nfunction addsAutocompleteToDataflowWDF(dataflowEvaluationInput: d3_Selection, dataflowTextInputEvaluation: HTMLSelectElement, evaluationList: any) {\n dataflowEvaluationInput.on(\"keyup\", () => {\n\n let input = dataflowTextInputEvaluation.value;\n let autocompleteSuggestionsResults = (document.getElementById(\"autocompleteSuggestionsResults\"));\n let evaluationInputHint = (document.getElementById(\"dataflowSelectEvaluationHelp\"));\n\n autocompleteSuggestionsResults.innerHTML = \"\";\n\n let suggestions: any[];\n\n if (input == \"\") {\n autocompleteSuggestionsResults.setAttribute(\"style\", \"\");\n evaluationInputHint.style.opacity = \"1\";\n suggestions = [];\n dataflowTextInputEvaluation.setAttribute(\"selectedEvaluationID\", \"undefined\");\n }\n else {\n autocompleteSuggestionsResults.style.border = \"1px solid #ccc\";\n autocompleteSuggestionsResults.style.padding = \"3px\";\n autocompleteSuggestionsResults.style.marginTop = \"-3rem\";\n evaluationInputHint.style.opacity = \"0\";\n\n suggestions = evaluationList!.filter((evaluation: any) => {\n if (evaluation.name.includes(input)) return evaluation;\n });\n\n autocompleteSuggestionsResults.innerHTML = \"
          \";\n\n\n for (let i = 0; i < suggestions.length; i++) {\n let evaluationSuggestionId = suggestions[i].evaluation_id + \" \" + \"evaluationSuggestionItem\";\n\n d3_select(document.getElementById(\"dataflowEvaluationSuggestionsBoxId\")).append(\"li\").attr(\"id\", evaluationSuggestionId)\n .style(\"padding\", \"5px 0\")\n .style(\"z-index\", 1)\n .text(\"Evaluation: \" + suggestions[i].name + \" \" + \"Code_line: \" + suggestions[i].first_char_line)\n .on(\"click\", () => {\n dataflowTextInputEvaluation.value = suggestions[i].name;\n input = suggestions[i].name;\n dataflowTextInputEvaluation.setAttribute(\"selectedEvaluationID\", suggestions[i].evaluation_id);\n })\n .on(\"mouseover\", () => { d3_select(document.getElementById(evaluationSuggestionId)).style(\"background-color\", \"#eee\"); })\n .on(\"mouseout\", () => { d3_select(document.getElementById(evaluationSuggestionId)).style(\"background-color\", \"\"); });\n }\n\n\n\n }\n\n });\n}\n\nfunction downloadDataflowAsSVG(dataflowWindow: HTMLElement | null, dataflowWindowId: string, dataflowDOT : string, appendDiv : boolean) {\n let div = appendDiv ? d3_select(dataflowWindow).append(\"div\").attr(\"id\", dataflowWindowId + \"-downloadDiv\") : d3_select(document.getElementById(dataflowWindowId + \"-downloadDiv\"));\n div.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", dataflowWindowId + \"-downloadSVG\")\n .attr(\"href\", \"#\")\n .style(\"color\", \"black\")\n .style(\"margin-right\", \"10px\")\n .attr(\"title\", \"Download dataflow SVG\")\n .on(\"click\", () => {\n instance().then(viz => {\n let svgElement = viz.renderSVGElement(dataflowDOT);\n fs.saveAs(new Blob([svgElement.outerHTML], { type: \"image/svg+xml\" }), \"dataflow.svg\");\n });\n //fs.saveAs(new Blob([dataflowWindow!.getElementsByTagName(\"svg\")[0].outerHTML], { type: \"image/svg+xml\" }), \"dataflow.svg\");\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n}\n\nfunction downloadDataflowAsDOT(dataflowWindow: HTMLElement | null, dataflowWindowId: string, dataflowDOT : string, appendDiv: boolean) {\n let div = appendDiv ? d3_select(dataflowWindow).append(\"div\").attr(\"id\", dataflowWindowId + \"-downloadDiv\") : d3_select(document.getElementById(dataflowWindowId + \"-downloadDiv\"));\n div.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", dataflowWindowId + \"-downloadDOT\")\n .attr(\"href\", \"#\")\n .style(\"color\", \"black\")\n .attr(\"title\", \"Download dataflow DOT\")\n .on(\"click\", () => {\n fs.saveAs(new Blob([dataflowDOT.trim()], { type: \"text/plain;charset=utf-8\" }), \"dataflow.dot\");\n })\n .append(\"i\")\n .classed(\"fa fa-file-text\", true);\n}\n\nfunction dataflowButtons(dataflowWindow: HTMLElement | null, dataflowWindowId: string, excludeProvenanceHint : string, dataflowDOT : string){\n downloadDataflowAsSVG(dataflowWindow, dataflowWindowId, dataflowDOT, true);\n\tdownloadDataflowAsDOT(dataflowWindow, dataflowWindowId, dataflowDOT, false)\n\texcludePriorProvenanceHint(dataflowWindow, excludeProvenanceHint);\n\tcheckboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow!);\n}\n\nfunction getRestoreOrCollabCommand(serverUrl: string, form: d3_Selection,\n modalBody: d3_Selection) {\n fetch(serverUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then((json) => {\n form.remove();\n if (response.status == 200 && (!json.terminal_text.includes(\"not\") || (serverUrl.includes(\"edit\")))) {\n addAlert(modalBody, \"alert-success\", \"Success!\", json.terminal_text);\n } else {\n addAlert(modalBody, \"alert-danger\", \"Error!\", json.terminal_text);\n }\n\n });\n });\n}\n\nfunction changeTitle(parent: Element, commandTitle: string) {\n let trialIdTitle = parent.getAttribute(\"selected-trial-simplified\");\n document.getElementById(\"exampleModalTitle\")!.textContent = commandTitle + trialIdTitle;\n}\n\nfunction cleanModalBodyAndClose(modal: d3_Selection,\n modalBody: d3_Selection) {\n document.getElementsByClassName(\"modal-body\")[0].textContent = \"\";\n modalBody.style(\"height\", null);\n hideModal(modal);\n}\n\nfunction addAlert(div: d3_Selection, alertType: string, title: string, text: string) {\n let feedbackAlert = div.append(\"div\").classed(\"alert \" + alertType, true).attr(\"role\", \"alert\");\n feedbackAlert.append(\"h4\").text(title).append(\"button\").classed(\"close\", true).attr(\"type\", \"button\").text(\"x\").on(\"click\", () => {\n feedbackAlert.remove();\n });\n feedbackAlert.append(\"p\").text(text);\n}\n\nfunction createFormCheckInput(form: d3_Selection, checkInputId: string, text: string) {\n let checkDiv = form.append(\"div\").classed(\"form-check\", true);\n checkDiv.append(\"input\").classed(\"form-check-input\", true).attr(\"value\", \"\").attr(\"id\", checkInputId)\n .attr(\"type\", \"checkbox\");\n checkDiv.append(\"label\").classed(\"form-check-label\", true).attr(\"for\", checkInputId)\n .text(text);\n}\n\nfunction createFormTextInput(form: d3_Selection, textInputId: string, text: string, helpId?: string, helpText?: string) {\n let textDiv = form.append(\"div\").classed(\"form-group\", true);\n textDiv.append(\"label\").attr(\"for\", textInputId).text(text);\n let textInput = textDiv.append(\"textarea\").classed(\"form-control\", true).attr(\"id\", textInputId);\n if (helpId && helpText) {\n textInput.attr(\"aria-describedby\", helpId);\n textDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n return textDiv;\n}\n\nfunction createFormSelectInput(form: d3_Selection,\n selectId: string, selectText: string, minOptionNumber: number, maxOptionNumber: number, defaultOption?: number,\n helpId?: string, helpText?: string, optionsLabels?: Array) {\n let selectDiv = form.append(\"div\").classed(\"form-group\", true);\n let selectInput = selectDiv.append(\"label\").attr(\"for\", selectId).text(selectText)\n .append(\"select\").classed(\"form-control\", true).attr(\"id\", selectId);\n\n if (helpId && helpText) {\n selectInput.attr(\"aria-describedby\", helpId);\n selectDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n for (var optionNumber = minOptionNumber; optionNumber <= maxOptionNumber; optionNumber++) {\n let inputLabel = optionsLabels ? optionsLabels[optionNumber] : optionNumber;\n let input = selectInput.append(\"option\").text(inputLabel);\n if (defaultOption && optionNumber == defaultOption) input.attr(\"selected\", \"selected\");\n }\n}\n\nfunction createFormNumberInput(form: d3_Selection, id: string, text: string, minValue: number, defaultValue: number,\n helpId?: string, helpText?: string) {\n let numberDiv = form.append(\"div\").classed(\"form-group\", true);\n numberDiv.append(\"label\").classed(\"form-check-label\", true).attr(\"for\", id)\n .text(text);\n\n numberDiv.append(\"input\").attr(\"type\", \"number\").attr(\"id\", id).attr(\"min\", minValue).attr(\"value\", defaultValue)\n .attr(\"oninput\", \"validity.valid||(value='');\").attr(\"aria-describedby\", \"dataflowDepthHelp\");\n\n if (helpId && helpText) {\n numberDiv.attr(\"aria-describedby\", helpId);\n numberDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n}\n\nfunction getTextInputFormByID(id: string, replace?: boolean) {\n let formTextInput: string | boolean = (document.getElementById(id)).value\n if (replace) formTextInput.replace(\"/\", \"%2F\").replace(\"\\\\\", \"%5C\");\n if (!formTextInput) formTextInput = false;\n return formTextInput;\n}\n\nfunction hideModal(modal: d3_Selection) {\n if (modal) modal.style(\"display\", \"none\").style(\"padding-right\", \"\").classed(\"show\", false).attr(\"aria-hidden\", \"true\");\n}\n\nfunction showModal(modal: d3_Selection) {\n if (modal) modal.style(\"display\", \"block\").style(\"padding-right\", \"17px\").classed(\"show\", true).attr(\"aria-hidden\", \"false\");\n}","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {json} from '@noworkflow/utils';\n\nimport {BaseActivationGraphWidget} from './base_activation_graph';\n\nimport {TrialGraph, TrialGraphData} from '@noworkflow/trial';\n\n\nexport\nclass TrialGraphWidget extends BaseActivationGraphWidget {\n\n name: string;\n cls: string;\n t1: string;\n t2: string;\n graph: TrialGraph;\n d3node: d3_Selection;\n\n static url(trialId: string, selectedGraph: string, useCache: boolean) {\n let cache = useCache ? \"1\" : \"0\"\n return (\"trials/\"\n + trialId + \"/\" + selectedGraph + \"/\" + cache + \".json\"\n );\n }\n\n constructor(name: string, cls: string, t1: string, t2: string) {\n super({ node: BaseActivationGraphWidget.createNode(cls) });\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".graph-type\").property(\"value\"),\n this.d3node.select(\".use-cache\").property(\"checked\"),\n )\n })\n this.addClass('content');\n this.addClass('trial-widget');\n this.title.label = name;\n this.title.closable = true;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n this.t1 = t1;\n this.t2 = t2;\n }\n\n setGraph(data: TrialGraphData, config: any={}) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new TrialGraph(this.cls, sub, config);\n this.graph.load(data, this.t1, this.t2);\n\n }\n\n graphDefinition(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData) {\n var result = super.graphDefinition(selectedGraph, useCache, genDataflow, data);\n return Object.assign({}, result, {\n queryTooltip: selectedGraph != \"definition_tree\"\n });\n }\n\n load(selectedGraph: string = \"namespace_match\", useCache: boolean = true) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n json(\"Trial\", sub, TrialGraphWidget.url(this.t1, selectedGraph, useCache), (data: TrialGraphData) => {\n this.configureGraph(selectedGraph, useCache, true, data);\n })\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graph) {\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n }\n\n}\n\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\nimport { Message } from '@lumino/messaging';\ninterface IAddMember {\n userId: string;\n }\ninterface IUser {\n id: string;\n login: string\n }\ninterface IGroup {\n id: string;\n name: string;\n members: Array;\n}\n\nexport \nclass GroupWidget extends Widget {\n\n d3node: d3_Selection;\n tBody: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n userIn: d3_Selection;\n addMemberForm: d3_Selection;\n groups: Array;\n users: Array;\n currentGroup: String;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor() {\n super({ node: GroupWidget.createNode() });\n this.d3node = d3_select(this.node);\n\n \n this.addClass('content');\n this.title.label = \"Group Information\";\n this.title.closable = false\n this.title.caption = `Group`;\n this.setNode();\n }\n protected onBeforeShow(msg: Message): void {\n if(!this.groups){\n this.setGroups();\n this.setUsers();\n }\n \n }\n async setUsers(){\n var _thiss=this;\n _thiss.userIn.html(\"\");\n var response= await fetch(\"users\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.users= new Array();\n\n var obj=await response.json();\n\n\n obj.forEach( function(item: any){\n \n _thiss.users.push({\n id: item.id,\n login: item.userLogin\n });\n }); \n }else{\n this.showNode(_thiss.errorFeedback);\n }\n _thiss.users.forEach(function (obj: IUser) {\n\n _thiss.userIn.append(\"option\").attr(\"value\",obj.id).text(obj.login);\n\n });\n\n }\n resfreshGroups(){\n this.tBody.html(\"\");\n this.setGroups();\n }\n async setGroups(){\n var _thiss=this;\n var response= await fetch(\"groups\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.groups= new Array();\n\n var obj=await response.json();\n\n obj.forEach( function(item: any){\n var group={\n id: item.id,\n name:item.name,\n members: new Array()\n }\n item.members.forEach( function(user: any){\n group.members.push( {\n id: user.id,\n login: user.userLogin\n });\n });\n _thiss.groups.push(group);\n }); \n }else{\n this.showNode(_thiss.errorFeedback);\n }\n\n this.groups.forEach(function (obj: any) {\n _thiss.addGrpRow(obj);\n });\n\n }\n async deleteGrp(grpId:String){\n var response= await fetch(\"/groups/\" +grpId, {\n method: 'DELETE', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n this.showNode(this.successFeedback);\n this.resfreshGroups();\n \n }else{\n this.showNode(this.errorFeedback);\n }\n\n\n }\n addGrpRow(grp : IGroup){\n let _thiss=this;\n let item=this.tBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(grp.id);\n item.append(\"td\").text(grp.name);\n var membersText=\"\";\n grp.members.forEach( function(user: IUser){\n membersText+= user.login + \" \"\n });\n item.append(\"td\").text(membersText);\n var actions =item.append(\"td\")\n var addMemberButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add User\");\n addMemberButton.on(\"click\",function(){\n _thiss.showNode(_thiss.addMemberForm);\n _thiss.currentGroup=grp.id\n\n });\n var deleteGroupButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Delete Group\");\n deleteGroupButton.on(\"click\",function(){\n\n if(confirm(\"Are you sure you want to delete group: \" + grp.name + \" ?\" )){\n _thiss.deleteGrp(grp.id);\n }\n\n });\n deleteGroupButton.style(\"margin-left\",4);\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n createAddGroupForm(projectsDiv:d3_Selection){\n var _thiss=this;\n let inputsDiv=projectsDiv.append(\"div\");\n let nameIn=this.addFormInput(inputsDiv,\"groupNameInput\",\"Name: \",\"input\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addGrpButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Group\");\n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n let newGrp={\n name:nameIn.property(\"value\"),\n members: new Array()\n };\n fetch(\"groups\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newGrp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n newGrp.id=obj.id;\n _thiss.addGrpRow(newGrp);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addGrpButton);\n _thiss.showNode(_thiss.successFeedback);\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n }\n }); \n \n \n });\n\n addGrpButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addGrpButton);\n });\n\n }\n createAddMemberForm(projectsDiv:d3_Selection){\n var _thiss=this;\n _thiss.addMemberForm=projectsDiv.append(\"div\");\n var inputsDiv =_thiss.addMemberForm;\n this.userIn=this.addFormInput(inputsDiv,\"groupUsersInput\",\"User\",\"select\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n \n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n\n var select = _thiss.userIn.node() as HTMLSelectElement;\n if(select!=null){\n var option = select.options[select.selectedIndex];\n\n \n \n \n let newGrp={\n userId: option.value,\n };\n fetch(\"groups/\"+_thiss.currentGroup+\"/users\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newGrp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n _thiss.hideNode(_thiss.addMemberForm);\n _thiss.showNode(_thiss.successFeedback);\n _thiss.resfreshGroups();\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n \n }\n }); \n }\n \n });\n _thiss.hideNode(_thiss.addMemberForm);\n\n }\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n projectsDiv.append(\"h2\")\n .text(\"Groups:\")\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"\") ; \n this.hideNode(this.errorFeedback);\n \n this.hideNode(this.successFeedback);\n\n this.createAddMemberForm(projectsDiv);\n projectsDiv.append(\"br\");\n this.createAddGroupForm(projectsDiv);\n\n \n let table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n let header=table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"name\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Members\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Actions\");\n \n this.tBody=table.append(\"tbody\");\n\n \n }\n\n}","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {json} from '@noworkflow/utils';\n\n\nimport {\n ModuleData, FileAccessData, EnvironmentItemData,\n DiffInfoData, DiffModuleData, DiffEnvironmentData, DiffAccessData,\n FilterObject\n} from './structures';\n\nimport {ModulesInfoWidget} from './modules_info';\nimport {EnvironmentInfoWidget} from './environment_info';\nimport {FileAccessesInfoWidget} from './file_accesses_info';\nimport {TrialInfoWidget} from './trial_info';\n\nexport\nclass DiffInfoWidget extends Widget {\n\n d3node: d3_Selection;\n display1: string;\n display2: string;\n\n static url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/info.json\"\n );\n }\n\n static modules_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/dependencies.json\"\n );\n }\n\n static environment_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/environment.json\"\n );\n }\n\n static accesses_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/file_accesses.json\"\n );\n }\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n d3node.append('div')\n .classed('trial-info', true)\n\n return node;\n }\n\n constructor(display1:string, display2: string, trial1: string, trial2: string) {\n super({ node: DiffInfoWidget.createNode() });\n this.display1 = display1;\n this.display2 = display2;\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info');\n this.title.label = display1 + \"<->\" + display2 + \" - Diff Info\";\n this.title.closable = true;\n this.title.caption = `Diff ${display1}-${display2} Information`;\n this.load(trial1, trial2);\n }\n\n load(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"trial-info\")[0];\n json(\"Info\", sub, DiffInfoWidget.url(trial1, trial2), (data: DiffInfoData) => {\n this.createMain(data);\n this.loadModules(trial1, trial2);\n this.loadEnvironment(trial1, trial2);\n this.loadFileAccess(trial1, trial2);\n })\n }\n\n createMain(data: DiffInfoData) {\n let trial = data.trial;\n let trial1 = data.trial1;\n let trial2 = data.trial2;\n\n let content = this.d3node.select('.trial-info').html(\"\")\n .append('div')\n .classed('side-info', true)\n let main = content.append('div')\n .classed('main', true)\n\n let h1 = main.append(\"h1\")\n\n // Title\n h1.append(\"span\")\n .classed(\"dbefore\", true)\n .text(\"Trial \" + this.display1);\n\n h1.append(\"span\")\n .text(\" <-> \");\n\n h1.append(\"span\")\n .classed(\"dafter\", true)\n .text(\"Trial \" + this.display2);\n\n // Code hash\n if (trial.code_hash == undefined) {\n main.append(\"h3\")\n .classed(\"hash\", true)\n .text(trial1.code_hash || \"\");\n } else {\n main.append(\"h3\")\n .classed(\"hash dbefore\", true)\n .text(trial.code_hash[0] || \"\");\n main.append(\"h3\")\n .classed(\"hash dafter\", true)\n .text(trial.code_hash[1] || \"\");\n }\n this.info(main, \"id\", \"Id\", trial1.id, trial2.id);\n this.info(main, \"script\", \"Script\", trial1.script, trial2.script);\n this.info(main, \"start\", \"Start\", trial1.start, trial2.start);\n this.info(main, \"finish\", \"Finish\", trial1.finish, trial2.finish);\n this.info(main, \"duration\", \"Duration\", trial1.duration_text, trial2.duration_text);\n\n\n if (trial.arguments == undefined) {\n if (trial1.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial1.arguments);\n }\n } else {\n if (trial1.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc dbefore\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial1.arguments);\n }\n if (trial2.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc dafter\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial2.arguments);\n }\n }\n\n content.append(\"div\")\n .classed(\"modules\", true);\n\n content.append(\"div\")\n .classed(\"environment\", true)\n\n content.append(\"div\")\n .classed(\"file-accesses\", true)\n }\n\n filter_trial(filter: FilterObject, filterfn: (strial: number) => void) {\n let select_trial = filter.filterdiv.append(\"select\");\n select_trial.append(\"option\")\n .attr(\"value\", \"3\")\n .text(\"Do not filter Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"First Trial Only\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"5\")\n .text(\"Exists in First Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Second Trial Only\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"6\")\n .text(\"Exists in Second Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"4\")\n .text(\"Both Trials Only\");\n select_trial.property(\"value\", \"3\");\n\n let newfilter = () => {\n filterfn(Number(select_trial.property(\"value\")));\n }\n select_trial.on(\"change\", newfilter);\n filter.on_change(newfilter);\n }\n\n loadModules(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"modules\")[0];\n\n json(\"Modules\", sub, DiffInfoWidget.modules_url(trial1, trial2), (data: DiffModuleData) => {\n let modules = this.d3node.select(\".modules\").html(\"\");\n if ((data.modules_added.length > 0) ||\n (data.modules_removed.length > 0) ||\n (data.modules_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(modules, \"Modules\");\n let foldable = modules.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = ModulesInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"mod-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n if ((strial & 1) == 1) {\n for (var element of data.modules_removed) {\n if (!filter.valid(data.t1_path, element)) {\n continue;\n }\n this.mod_li(ul, 'libefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.modules_added) {\n if (!filter.valid(data.t2_path, element)) {\n continue;\n }\n this.mod_li(ul, 'liafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.modules_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(data.t1_path, rem) ||\n !filter.valid(data.t2_path, add)) {\n continue;\n }\n let li = ul.append(\"li\")\n\n li.append(\"div\")\n .classed(\"name\", true)\n .text(rem.name);\n\n let version = li.append(\"div\")\n .classed(\"version\", true)\n version.append(\"div\")\n .classed(\"dbefore\", true)\n .text(rem.version)\n version.append(\"div\")\n .classed(\"dafter\", true)\n .text(add.version)\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n li.append(\"div\")\n .classed(\"hash dbefore\", true)\n .attr(\"title\", rem.path)\n .text(rem.code_hash);\n\n li.append(\"div\")\n .classed(\"hash dafter\", true)\n .attr(\"title\", add.path)\n .text(add.code_hash);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n loadEnvironment(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"environment\")[0];\n\n json(\"Environment\", sub, DiffInfoWidget.environment_url(trial1, trial2), (data: DiffEnvironmentData) => {\n let environment = this.d3node.select(\".environment\").html(\"\");\n if ((data.env_added.length > 0) ||\n (data.env_removed.length > 0) ||\n (data.env_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(environment, \"Environment\");\n let foldable = environment.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = EnvironmentInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"env-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n if ((strial & 1) == 1) {\n for (var element of data.env_removed) {\n if (!filter.valid(element)) {\n continue;\n }\n this.env_li(ul, 'dbefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.env_added) {\n if (!filter.valid(element)) {\n continue;\n }\n this.env_li(ul, 'dafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.env_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(rem) ||\n !filter.valid(add)) {\n continue;\n }\n this.env_cli(ul, rem, add);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n })\n }\n\n loadFileAccess(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"file-accesses\")[0];\n\n json(\"File Accesses\", sub, DiffInfoWidget.accesses_url(trial1, trial2), (data: DiffAccessData) => {\n let accesses = this.d3node.select(\".file-accesses\").html(\"\");\n if ((data.fa_added.length > 0) ||\n (data.fa_removed.length > 0) ||\n (data.fa_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(accesses, \"File Accesses\");\n let foldable = accesses.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = FileAccessesInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"fac-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n\n if ((strial & 1) == 1) {\n for (var element of data.fa_removed) {\n if (!filter.valid(data.t1_path, element)) {\n continue;\n }\n this.fa_li(ul, 'libefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.fa_added) {\n if (!filter.valid(data.t2_path, element)) {\n continue;\n }\n this.fa_li(ul, 'liafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.fa_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(data.t1_path, rem) ||\n !filter.valid(data.t2_path, add)) {\n continue;\n }\n let li = ul.append(\"li\")\n\n this.fa_cfield(li, 'name', 'Name', rem.name, add.name);\n this.fa_cfield(li, 'mode', 'Mode', rem.mode, add.mode);\n this.fa_cfield(li, 'buffering', 'Buffering', rem.buffering, add.buffering);\n li.append(\"div\")\n .classed(\"clear\", true)\n this.fa_cfield(li, 'timestamp', 'Time', rem.timestamp, add.timestamp);\n this.fa_cfield(li, 'content_hash_before hash', 'Content hash before', rem.content_hash_before, add.content_hash_before);\n this.fa_cfield(li, 'content_hash_after hash', 'Content hash after', rem.content_hash_after, add.content_hash_after);\n this.fa_cfield(li, 'stack', 'Stack', rem.stack, add.stack);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n private info(main: d3_Selection, cls: string, label: string, value1: any, value2: any) {\n if (value1 == value2) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr.append(\"span\")\n .classed(cls, true)\n .text(value1);\n } else {\n let attr1 = main.append(\"span\")\n .classed(\"attr dbefore\", true);\n attr1.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr1.append(\"span\")\n .classed(cls, true)\n .text(value1);\n\n let attr2 = main.append(\"span\")\n .classed(\"attr dafter\", true);\n attr2.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr2.append(\"span\")\n .classed(cls, true)\n .text(value2);\n }\n }\n\n private mod_li(element: d3_Selection, cls: string, mod: ModuleData) {\n let li = element.append(\"li\")\n .classed(cls, true);\n\n li.append(\"div\")\n .classed(\"name\", true)\n .text(mod.name);\n\n li.append(\"div\")\n .classed(\"version\", true)\n .text(mod.version);\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n li.append(\"div\")\n .classed(\"hash\", true)\n .attr(\"title\", mod.path)\n .text(mod.code_hash);\n }\n\n private env_field(element: d3_Selection, env: EnvironmentItemData) {\n element.append(\"span\")\n .classed(\"key\", true)\n .text(env.name);\n\n element.append(\"span\")\n .classed(\"equal\", true)\n .text(\" = \");\n\n element.append(\"span\")\n .classed(\"value\", true)\n .text(env.value);\n\n }\n\n private env_li(element: d3_Selection, cls: string, env: EnvironmentItemData) {\n this.env_field(\n element.append(\"li\")\n .classed(cls, true),\n env\n )\n }\n\n private env_cli(element: d3_Selection, rem: EnvironmentItemData, add: EnvironmentItemData) {\n let li = element.append(\"li\");\n this.env_field(\n li.append(\"div\")\n .classed(\"dbefore\", true),\n rem\n )\n this.env_field(\n li.append(\"div\")\n .classed(\"dafter\", true),\n add\n )\n }\n\n private fa_field(element: d3_Selection, cls: string, title: string, value: string) {\n element.append(\"div\")\n .classed(cls, true)\n .attr(\"title\", title)\n .text(value);\n }\n\n private fa_li(element: d3_Selection, cls: string, fa: FileAccessData) {\n let li = element.append(\"li\")\n .classed(cls, true);\n\n this.fa_field(li, 'name', 'Name', fa.name);\n this.fa_field(li, 'mode', 'Mode', fa.mode);\n this.fa_field(li, 'buffering', 'Buffering', fa.buffering);\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n this.fa_field(li, 'timestamp', 'Time', fa.timestamp);\n this.fa_field(li, 'content_hash_before hash', 'Content hash before', fa.content_hash_before);\n this.fa_field(li, 'content_hash_after hash', 'Content hash after', fa.content_hash_after);\n this.fa_field(li, 'stack', 'Stack', fa.stack);\n }\n\n private fa_cfield(element: d3_Selection, cls: string, title: string, v1: string, v2: string) {\n if (v1 == v2) {\n this.fa_field(element, cls, title, v1);\n } else {\n this.fa_field(element, cls + \" dbefore\", title, v1);\n this.fa_field(element, cls + \" dafter\", title, v2);\n }\n }\n\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {EnvironmentItemData, FilterObject} from './structures';\n\nexport\nclass EnvironmentInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/environment.json\";\n }\n\n static createItem(parent: d3_Selection, key: string, value: string): void {\n if (value) {\n let li = parent.append(\"li\");\n li.append(\"span\")\n .classed(\"key\", true)\n .text(key)\n li.append(\"span\")\n .classed(\"equal\", true)\n .text(\" = \")\n li.append(\"span\")\n .classed(\"value\", true)\n .text(value)\n }\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"type\", \"search\");\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Main\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Main Environment Only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-Main Environment Only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (element: EnvironmentItemData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return (\n element.name.toLowerCase().indexOf(stext) >= 0\n || element.value.toLowerCase().indexOf(stext) >= 0\n );\n }\n\n let check_local = () => {\n if (slocal == 0) return true;\n switch (element.name) {\n case 'PYTHON_IMPLEMENTATION': \n case 'PYTHON_VERSION':\n case 'OS_NAME':\n case 'OS_RELEASE':\n case 'OS_USER':\n case 'PWD':\n case 'PID':\n case 'HOSTNAME':\n case 'ARCH':\n case 'PROCESSOR':\n return (slocal == 1)\n default:\n return (slocal != 1)\n }\n }\n\n return check_text() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n }\n\n static createList(parent: d3_Selection, data: EnvironmentItemData[], default_local: string = \"0\"): FilterObject {\n let filter = EnvironmentInfoWidget.createFilter(parent, default_local);\n let list = parent.append(\"ul\")\n .classed(\"env-list\", true)\n\n filter.on_change(() => {\n list.html(\"\");\n for (var element of data) {\n if (!filter.valid(element)) {\n continue;\n }\n EnvironmentInfoWidget.createItem(list, element.name, element.value);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: EnvironmentItemData[], default_local: string = \"0\"): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"Environment (\" + trialDisplay + \")\");\n\n EnvironmentInfoWidget.createList(content, data, default_local);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: EnvironmentItemData[], default_local: string = \"0\") {\n super({ node: EnvironmentInfoWidget.createNode(trialDisplay, data, default_local) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Environment\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Environment`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {FileAccessData, FilterObject} from './structures';\n\n\nexport\nclass FileAccessesInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/file_accesses.json\";\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"placeholder\", \"Name\")\n .attr(\"type\", \"search\");\n\n let mode_filter = filterdiv.append(\"input\")\n .attr(\"placeholder\", \"Mode\")\n .attr(\"type\", \"search\");\n\n let select_hash = filterdiv.append(\"select\");\n select_hash.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Existence\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Exists only before trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Exists only after trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"3\")\n .text(\"Changes during trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"7\")\n .text(\"Does not change during trial\");\n\n select_hash.property(\"value\", \"0\");\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Locality\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Local files only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-local files only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (local: string, element: FileAccessData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let smode = mode_filter.property(\"value\").toLowerCase();\n let shash = Number(select_hash.property(\"value\"));\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return element.name.toLowerCase().indexOf(stext) >= 0;\n }\n\n let check_mode = () => {\n return element.mode.toLowerCase().indexOf(smode) >= 0;\n }\n\n let check_hash = () => {\n if (((shash & 1) == 1) && element.content_hash_before == null) return false;\n if (((shash & 2) == 2) && element.content_hash_after == null) return false;\n if (shash == 1) return element.content_hash_after == null;\n if (shash == 2) return element.content_hash_before == null;\n if (shash == 3) return element.content_hash_before != element.content_hash_after;\n if (shash == 4) return element.content_hash_before == element.content_hash_after;\n return true;\n } \n\n let check_local = () => {\n if (slocal == 0) return true;\n if (!/^((\\/)|(\\w+:\\\\))/.test(element.name)) return (slocal == 1); // not absolute path\n if (element.name.startsWith(local)) return (slocal == 1);\n return (slocal != 1);\n }\n\n return check_text() && check_mode() && check_hash() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n mode_filter.on(\"keyup\", filterfn);\n select_hash.on(\"change\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n }\n\n static createList(parent: d3_Selection, data: FileAccessData[], trial_path: string, default_local: string = \"0\"): FilterObject {\n let filter = FileAccessesInfoWidget.createFilter(parent, default_local);\n\n let list = parent.append(\"ul\")\n .classed(\"fac-list\", true)\n\n filter.on_change(() => {\n list.html(\"\");\n for (var element of data) {\n if (!filter.valid(trial_path, element)) {\n continue;\n }\n var li = list.append(\"li\");\n\n //name of file for request\n var name = element.name.split(\"/\");\n var pos = name.length -1;\n var fileName = name[pos];\n\n li.append(\"a\").classed(\"name\", true)\n .attr(\"title\", \"Name\")\n .text(element.name)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_after + \"/\" + fileName); //file after execution\n li.append(\"div\").classed(\"mode\", true)\n .attr(\"title\", \"Mode\")\n .text(element.mode);\n li.append(\"div\").classed(\"buffering\", true)\n .attr(\"title\", \"Buffering\")\n .text(element.buffering);\n li.append(\"div\").classed(\"clear\", true)\n li.append(\"div\").classed(\"timestamp\", true)\n .attr(\"title\", \"Time\")\n .text(element.timestamp);\n li.append(\"a\").classed(\"content_hash_before hash\", true)\n .attr(\"title\", \"Content hash before\")\n .text(element.content_hash_before)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_before + \"/\" + fileName);\n li.append(\"div\"); //spacing\n li.append(\"a\").classed(\"content_hash_after hash\", true)\n .attr(\"title\", \"Content hash after\")\n .text(element.content_hash_after)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_after + \"/\" + fileName);\n li.append(\"div\").classed(\"stack\", true)\n .attr(\"title\", \"Stack\")\n .text(element.stack);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: FileAccessData[], trial_path: string, default_local: string = \"0\"): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"File Accesses (\" + trialDisplay + \")\");\n\n FileAccessesInfoWidget.createList(content, data, trial_path, default_local);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: FileAccessData[], trial_path: string, default_local: string = \"0\") {\n super({ node: FileAccessesInfoWidget.createNode(trialDisplay, data, trial_path, default_local) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Accesses\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Accesses`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {ModuleData, FilterObject} from './structures';\n\n\nexport\nclass ModulesInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/dependencies.json\";\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"type\", \"search\");\n\n let select_version = filterdiv.append(\"select\");\n select_version.append(\"option\")\n .attr(\"value\", \"both\")\n .text(\"Do not filter Version\");\n\n select_version.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Filter In Version\");\n\n select_version.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Filter Out Version\");\n select_version.property(\"value\", \"both\")\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Locality\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Local Modules Only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-Local Modules Only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (local: string, element: ModuleData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let sversion = select_version.property(\"value\");\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return element.name.toLowerCase().indexOf(stext) >= 0;\n }\n\n let check_version = () => {\n if (sversion == \"both\") return true;\n if (sversion == \"1\") return element.version != null;\n if (sversion == \"0\") return element.version == null;\n return false;\n }\n\n let check_local = () => {\n if (slocal == 0) return true;\n if (element.path == null) return (slocal != 1);\n if (!/^((\\/)|(\\w+:\\\\))/.test(element.path)) return (slocal == 1); // not absolute path\n if (element.path.startsWith(local)) return (slocal == 1);\n return (slocal != 1);\n }\n\n return check_text() && check_version() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n select_version.on(\"change\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n \n }\n\n static createList(parent: d3_Selection, data: ModuleData[], trial_path: string, default_local: string = \"0\"): FilterObject {\n let filter = ModulesInfoWidget.createFilter(parent, default_local);\n\n let list = parent.append(\"ul\")\n .classed(\"mod-list\", true);\n\n filter.on_change(() => {\n list.html(\"\");\n\n for (var element of data) {\n if (!filter.valid(trial_path, element)) {\n continue;\n }\n var li = list.append(\"li\");\n li.append(\"div\").classed(\"name\", true)\n .text(element.name);\n li.append(\"div\").classed(\"version\", true)\n .text(element.version === null ? \"\" : element.version);\n li.append(\"div\").classed(\"clear\", true)\n li.append(\"div\").classed(\"hash\", true)\n .attr(\"title\", element.path)\n .text(element.code_hash);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: ModuleData[], trial_path: string): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"Modules (\" + trialDisplay + \")\");\n\n ModulesInfoWidget.createList(content, data, trial_path);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: ModuleData[], trial_path: string) {\n super({ node: ModulesInfoWidget.createNode(trialDisplay, data, trial_path) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Modules\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Modules`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {\n VisibleHistoryNode, HistoryTrialNodeData\n} from '@noworkflow/history';\nimport {json} from '@noworkflow/utils';\n\n\nimport {ModuleListData, EnvironmentData, FileAccessListData, FilterObject} from './structures';\n\nimport {ModulesInfoWidget} from './modules_info';\nimport {EnvironmentInfoWidget} from './environment_info';\nimport {FileAccessesInfoWidget} from './file_accesses_info';\nimport {AnnontationWidget} from '../annotation_widget';\n\nexport\nclass TrialInfoWidget extends Widget {\n\n d3node: d3_Selection;\n trial: VisibleHistoryNode;\n annontationWidget: AnnontationWidget;\n\n static createNode(trial: VisibleHistoryNode,annontationWidget: AnnontationWidget): HTMLElement {\n let node = document.createElement('div');\n let info = trial.info as HistoryTrialNodeData;\n\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('trial-info', true)\n .append('div')\n .classed('side-info', true)\n\n let main = content.append('div')\n .classed('main', true)\n\n main.append(\"h1\")\n .text(\"Trial \" + trial.display);\n\n main.append(\"a\")\n .classed(\"hash\", true)\n .text(info.code_hash || \"\")\n .attr('href','trials/'+ trial.id + '/' + info.code_hash + '/' + info.script);// href for script\n\n let idAttr = main.append(\"span\")\n .classed(\"attr\", true);\n idAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Id: \");\n idAttr.append(\"span\")\n .classed(\"id\", true)\n .text(trial.title);\n\n let scriptAttr = main.append(\"span\")\n .classed(\"attr\", true);\n scriptAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Script: \");\n scriptAttr.append(\"a\")\n .classed(\"script\", true)\n .text(info.script)\n .attr('href','trials/'+ trial.id + '/' + info.code_hash + '/' + info.script ); // href for script\n\n let startAttr = main.append(\"span\")\n .classed(\"attr\", true);\n startAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Start: \");\n startAttr.append(\"span\")\n .classed(\"start\", true)\n .text(info.str_start || \"\");\n\n let finishAttr = main.append(\"span\")\n .classed(\"attr\", true);\n finishAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Finish: \");\n finishAttr.append(\"span\")\n .classed(\"finish\", true)\n .text(info.str_finish || \"\");\n\n let durationAttr = main.append(\"span\")\n .classed(\"attr\", true);\n durationAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Duration: \");\n durationAttr.append(\"span\")\n .classed(\"duration\", true)\n .text(info.duration_text || \"\");\n\n if (info.command) {\n let argumentsAttr = main.append(\"span\")\n .classed(\"attr\", true);\n argumentsAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Arguments: \");\n argumentsAttr.append(\"span\")\n .classed(\"arguments\", true)\n .text(info.command);\n }\n\n\n\n \n\n content.append(\"div\")\n .classed(\"modules\", true)\n\n content.append(\"div\")\n .classed(\"environment\", true)\n\n content.append(\"div\")\n .classed(\"file-accesses\", true)\n\n var anntButton=content.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Manage Annotations\");\n\n anntButton.on(\"click\",function(){\n \n\n annontationWidget.activeAnnotation(trial.title);\n });\n\n return node;\n }\n\n constructor(trial: VisibleHistoryNode,annontationWidget: AnnontationWidget) {\n super({ node: TrialInfoWidget.createNode(trial,annontationWidget) });\n this.trial = trial;\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info');\n this.title.label = trial.display + \"- Information\";\n this.title.closable = true;\n this.title.caption = `Trial ${trial.display} Information`;\n this.loadModules();\n this.loadEnvironment();\n this.loadFileAccess();\n this.annontationWidget=annontationWidget;\n }\n\n static createFold(parent: d3_Selection, title: string) {\n let fold = parent.append(\"div\")\n .classed(\"fold\", true)\n let foldI = fold.append(\"i\")\n .classed(\"fa fa-minus\", true)\n let spanI = fold.append(\"span\")\n .text(title)\n \n let click = () => {\n let visible = foldI.classed(\"fa-plus\");\n foldI.classed(\"fa-plus\", !visible);\n foldI.classed(\"fa-minus\", visible);\n parent.select(\".foldable\")\n .classed(\"show-toolbar\", visible)\n .classed(\"hide-toolbar\", !visible)\n return false;\n };\n foldI.on(\"click\", click);\n spanI.on(\"click\", click);\n return fold;\n }\n\n static createFilterFold(fold: d3_Selection, filter: FilterObject) {\n filter.filterdiv\n .classed(\"info-filter\", true)\n .classed(\"show-toolbar\", false)\n .classed(\"hide-toolbar\", true);\n\n let foldA = fold.append(\"a\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Search\")\n .classed(\"show-all\", true);\n\n let foldAI = foldA.append(\"i\")\n .classed(\"fa fa-search-plus\", true);\n \n foldA.on(\"click\", () => {\n let visible = foldAI.classed(\"fa-search-plus\");\n foldAI.classed(\"fa-search-plus\", !visible);\n foldAI.classed(\"fa-search-minus\", visible);\n filter.filterdiv\n .classed(\"show-toolbar\", visible)\n .classed(\"hide-toolbar\", !visible)\n return false;\n });\n }\n\n loadModules() {\n let sub = this.node.getElementsByClassName(\"modules\")[0];\n json(\"Modules\", sub, ModulesInfoWidget.url(this.trial.title), (data: ModuleListData) => {\n let modules = this.d3node.select(\".modules\").html(\"\");\n if (data.all.length > 0) {\n \n let fold = TrialInfoWidget.createFold(modules, \"Modules\");\n let filter = ModulesInfoWidget.createList(\n modules.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.all, data.trial_path, \"1\"\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n loadEnvironment() {\n let sub = this.node.getElementsByClassName(\"environment\")[0];\n\n json(\"Environment\", sub, EnvironmentInfoWidget.url(this.trial.title), (data: EnvironmentData) => {\n let environment = this.d3node.select(\".environment\").html(\"\");\n\n let fold = TrialInfoWidget.createFold(environment, \"Environment\");\n let filter = EnvironmentInfoWidget.createList(\n environment.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.all, \"1\"\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n })\n }\n\n loadFileAccess() {\n let sub = this.node.getElementsByClassName(\"file-accesses\")[0];\n\n json(\"File Accesses\", sub, FileAccessesInfoWidget.url(this.trial.title), (data: FileAccessListData) => {\n let accesses = this.d3node.select(\".file-accesses\").html(\"\");\n\n if (data.file_accesses.length > 0) {\n\n let fold = TrialInfoWidget.createFold(accesses, \"File Accesses\");\n let filter = FileAccessesInfoWidget.createList(\n accesses.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.file_accesses, data.trial_path\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n}\n","import {DockPanel, Widget, DockLayout} from '@lumino/widgets';\n\n\nexport\ninterface VisWidget extends Widget {\n nowVis?: string;\n}\n\n\nexport\ninterface FindResult {\n area: DockLayout.AreaConfig | null;\n index: number;\n}\n\n\nexport\nfunction findInLayout(area: DockLayout.AreaConfig | null, widget: Widget): FindResult | null {\n if (area == null || area.type == 'tab-area') {\n return null;\n }\n var splitconfig: DockLayout.ISplitAreaConfig = area;\n var result: FindResult | null = null;\n splitconfig.children.every((child, index) => {\n if (child.type == 'tab-area') {\n var tabconfig: DockLayout.ITabAreaConfig = child;\n for (var tabwidget of tabconfig.widgets) {\n if (tabwidget == widget) {\n result = {\n area: area,\n index: index\n }\n return false;\n }\n }\n } else {\n var temp = findInLayout(child, widget);\n if (temp) {\n result = temp;\n return false;\n }\n }\n return true;\n });\n return result;\n}\n\n\nexport\nclass NowVisPanel extends DockPanel {\n\n addMainWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"main\") {\n console.log(\"Warning: options.ref is not 'main'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\") {\n options.ref = w;\n }\n }\n }\n (widget as VisWidget).nowVis = \"main\";\n this.addWidget(widget, options);\n }\n\n addGraphWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n var operation: string = \"none\";\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"graph\") {\n console.log(\"Warning: options.ref is not 'graph'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\" && !options.ref) {\n options.ref = w;\n options.mode = \"split-bottom\";\n operation = \"main\";\n } else if ((wnow.nowVis == \"info\") && (operation != \"graph\")) {\n options.ref = w;\n options.mode = \"split-left\";\n operation = \"info\";\n } else if (wnow.nowVis == \"graph\") {\n options.ref = w;\n options.mode = \"tab-after\";\n operation = \"graph\";\n }\n };\n }\n (widget as VisWidget).nowVis = \"graph\";\n this.addWidget(widget, options);\n\n if (operation == \"main\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.20;\n sizes[1] = 0.80;\n this.restoreLayout(layout);\n }\n }\n\n if (operation == \"info\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.80;\n sizes[1] = 0.20;\n this.restoreLayout(layout);\n }\n }\n }\n\n addInfoWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n var operation: string = \"none\";\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"info\") {\n console.log(\"Warning: options.ref is not 'info'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\" && !options.ref) {\n options.ref = w;\n options.mode = \"split-bottom\";\n operation = \"main\";\n } else if ((wnow.nowVis == \"graph\") && (operation != \"info\")) {\n options.ref = w;\n options.mode = \"split-right\";\n operation = \"graph\";\n } else if (wnow.nowVis == \"info\") {\n options.ref = w;\n options.mode = \"tab-after\";\n operation = \"info\";\n }\n };\n }\n (widget as VisWidget).nowVis = \"info\";\n this.addWidget(widget, options);\n\n if (operation == \"main\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.20;\n sizes[1] = 0.80;\n this.restoreLayout(layout);\n }\n }\n\n if (operation == \"graph\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.80;\n sizes[1] = 0.20;\n this.restoreLayout(layout);\n }\n }\n }\n\n}\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\ninterface IExperiment {\n id: string;\n name: string;\n description: string;\n}\n\nexport\nclass ProjectWidget extends Widget {\n\n d3node: d3_Selection;\n expTBody: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n experiments: Array;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor(experiments: Array) {\n super({ node: ProjectWidget.createNode() });\n this.d3node = d3_select(this.node);\n this.experiments=experiments;\n this.setNode();\n this.addClass('content');\n this.title.label = \"Experiment Selection\";\n this.title.closable = false\n this.title.caption = `Experiment`;\n }\n addExpRow(exp : IExperiment){\n var link=window.location.href + \"experiments/\"+exp.id;\n let item=this.expTBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(exp.id);\n item.append(\"td\").text(exp.name);\n item.append(\"td\").text(exp.description);\n item.append(\"td\").append(\"a\").attr(\"href\",link).text(link);\n\n let cloneCommandText = \"now pull --url \" + link;\n item.append(\"td\").text( cloneCommandText + \" \").append(\"i\").classed(\"fa fa-clone\", true).attr(\"aria-hidden\", \"true\")\n .attr(\"id\", exp.id + \"CopyIcon\").on(\"click\", ()=> {\n navigator.clipboard.writeText(cloneCommandText)\n .then(()=>{\n let divCopied = d3_select(document.getElementById(exp.id + \"CopyIcon\")!)\n .append(\"small\").classed(\"alert alert-secondary p-0\", true).text(\"Copied!\");\n setTimeout(()=>{divCopied.remove()}, 3000);\n });\n });\n\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n projectsDiv.append(\"h2\")\n .text(\"Experiments:\")\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"Experiment created successfully\") ; \n this.hideNode(this.errorFeedback);\n this.hideNode(this.successFeedback);\n\n let inputsDiv=projectsDiv.append(\"div\");\n let nameIn=this.addFormInput(inputsDiv,\"experimentNameInput\",\"Name\",\"input\");\n let descIn=this.addFormInput(inputsDiv,\"experimentDescInput\",\"Description\",\"textarea\");\n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addExpButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Experiment\");\n\n\n let table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n let header=table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"name\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"description\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"url\");\n header.append(\"th\").attr(\"scope\", \"col\").html(\" clone \")\n .append(\"i\").classed(\"fa fa-question-circle-o\", true).attr(\"aria-hidden\", \"true\")\n .attr(\"title\", \"Run this command on the command line, in the desired folder, to clone the experiment.\");\n \n this.expTBody=table.append(\"tbody\");\n\n \n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n let newExp={\n name:nameIn.property(\"value\"),\n description:descIn.property(\"value\")\n };\n fetch(\"experiments\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newExp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n newExp.id=obj.id;\n _thiss.addExpRow(newExp);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addExpButton);\n _thiss.showNode(_thiss.successFeedback);\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n }\n }); \n \n \n });\n var _thiss=this;\n addExpButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addExpButton);\n });\n \n this.experiments.forEach(function (obj) {\n _thiss.addExpRow(obj);\n });\n }\n\n}","import { Widget } from '@lumino/widgets';\nimport { select as d3_select, Selection as d3_Selection, BaseType as d3_BaseType } from 'd3-selection';\nimport { NowVisPanel } from './nowpanel';\nimport { TableInfoWidget } from './database_widget';\nimport 'ace-builds/src-noconflict/ace';\nimport 'ace-builds/src-noconflict/theme-textmate';\nimport 'ace-builds/src-noconflict/mode-sql';\nimport 'ace-builds/src-noconflict/ext-language_tools';\n\ndeclare global { interface Window { ace: any; } }\n\nexport class DatabaseTabWidget extends Widget {}\n\nexport class QueryResultWidget extends DatabaseTabWidget {\n d3node: d3_Selection;\n private columns: string[];\n private rows: any[];\n private query: string;\n private currentPage: number = 1;\n \n constructor(query: string, columns: string[], rows: any[], count: number) {\n super({ node: QueryResultWidget.createNode() });\n this.title.label = `Query Result (${count})`;\n this.title.caption = `Query Result (${count})`;\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n this.query = query;\n this.columns = columns;\n this.rows = rows;\n this.renderTable();\n }\n \n static createNode(): HTMLElement {\n const node = document.createElement('div');\n node.style.padding = '1rem';\n node.style.height = '100%';\n node.style.overflowY = 'auto';\n return node;\n }\n \n private renderTable(): void {\n this.d3node.selectAll('*').remove();\n \n this.d3node.append('a')\n .classed(\"toollink\", true)\n .attr('class', 'btn btn-secondary-outline')\n .attr('title', 'Download CSV')\n .style('margin-bottom', '1em')\n .on('click', () => {\n let csv = '';\n csv += this.columns.map(col => `\"${col.replace(/\"/g, '\"\"')}\"`).join(',') + '\\n';\n for (const row of this.rows) {\n csv += this.columns.map(col => `\"${String(row[col] !== undefined ? row[col] : '').replace(/\"/g, '\"\"')}\"`).join(',') + '\\n';\n }\n const blob = new Blob([csv], { type: 'text/csv' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'query_result.csv';\n document.body.appendChild(a);\n a.click();\n setTimeout(() => {\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, 100);\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n\n if (!this.columns.length || !this.rows.length) {\n this.d3node.append('div').text('No results.');\n return;\n }\n\n const paginationContainer = this.d3node.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem')\n .style('padding', '0.5rem')\n .style('background-color', '#f8f9fa')\n .style('border-radius', '4px');\n\n const startIndex = (this.currentPage - 1) * 50 + 1;\n const endIndex = Math.min(this.currentPage * 50, this.rows.length);\n paginationContainer.append('div')\n .style('font-size', '0.9em')\n .style('color', '#666')\n .text(`Showing ${startIndex}-${endIndex} of ${this.rows.length} rows`);\n\n const paginationButtons = paginationContainer.append('div')\n .style('display', 'flex')\n .style('gap', '0.25rem');\n\n const totalPages = Math.ceil(this.rows.length / 50);\n\n if (totalPages > 1) {\n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage = 1;\n this.renderTable();\n })\n .text('<<');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage--;\n this.renderTable();\n })\n .text('<');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-primary')\n .text(this.currentPage.toString());\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage++;\n this.renderTable();\n })\n .text('>');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage = totalPages;\n this.renderTable();\n })\n .text('>>');\n }\n\n const tableContainer = this.d3node.append('div')\n .style('max-height', '400px')\n .style('overflow-y', 'auto')\n .style('border', '1px solid #dee2e6')\n .style('border-radius', '4px');\n \n const table = tableContainer.append('table').attr('class', 'table table-bordered table-sm');\n table.style('border-collapse', 'separate')\n .style('border-spacing', '0');\n\n const thead = table.append('thead').append('tr');\n thead.style('position', 'sticky')\n .style('top', '0')\n .style('background-color', 'white')\n .style('z-index', '1');\n\n this.columns.forEach(col => thead.append('th').text(col));\n \n const tbody = table.append('tbody');\n \n const startRow = (this.currentPage - 1) * 50;\n const endRow = Math.min(startRow + 50, this.rows.length);\n const currentPageRows = this.rows.slice(startRow, endRow);\n \n currentPageRows.forEach(row => {\n const tr = tbody.append('tr');\n this.columns.forEach(col => tr.append('td').text(row[col] !== undefined ? row[col] : ''));\n });\n\n this.d3node.append('div')\n .attr('class', 'text-muted')\n .style('margin-top', '1rem')\n .style('margin-bottom', '0.5em')\n .html(`Query: ${this.query}`);\n }\n}\n\nexport class QueryWidget extends Widget {\n private panel: NowVisPanel;\n private static count: number = 0;\n d3node: d3_Selection;\n private aceEditor: any; // Ace editor instance\n private tableNames: string[] = [];\n private columnNames: string[] = [];\n private editorId: string;\n private initialQuery: string;\n \n constructor(panel: NowVisPanel, tableNames?: string[], columnNames?: string[], initialQuery?: string) {\n super();\n this.panel = panel;\n this.title.label = 'SQL Query';\n this.title.caption = 'SQL Query Interface';\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n this.tableNames = tableNames || [];\n this.columnNames = columnNames || [];\n this.editorId = `query-input-${++QueryWidget.count}`;\n this.initialQuery = initialQuery || '';\n\n this.createQueryInterface();\n }\n\n private async createQueryInterface(): Promise {\n const container = this.d3node.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('height', '100%')\n .style('padding', '1rem')\n .style('gap', '1rem')\n .style('overflow-y', 'auto')\n .style('overflow-x', 'hidden');\n\n const headerRow = container.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem')\n .style('flex-shrink', '0');\n\n headerRow.append('h4')\n .text('SQL Query Interface')\n .style('margin', '0')\n .style('color', '#333');\n\n headerRow.append('button')\n .attr('id', 'execute-query-btn')\n .attr(\"title\", \"Execute query. Use Ctrl+Enter for quick execution.\")\n .classed('btn btn-primary', true)\n .on('click', () => this.executeQuery())\n .html(' Execute Query');\n\n const queryContainer = container.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('min-height', '50%')\n .style('flex', '1 1 0');\n \n queryContainer.append('label')\n .attr('for', this.editorId)\n .text('Enter your SQL query:')\n .style('font-weight', 'bold')\n .style('margin-bottom', '0.5rem');\n \n queryContainer.append('div')\n .attr('id', this.editorId)\n .style('width', '100%')\n .style('min-height', '140px')\n .style('max-height', '30vh')\n .style('border', '1px solid #ccc')\n .style('border-radius', '4px')\n .style('font-size', '1em')\n .style('flex', '1');\n\n setTimeout(() => {\n // @ts-ignore\n this.aceEditor = window.ace.edit(this.editorId);\n this.aceEditor.setTheme('ace/theme/textmate');\n this.aceEditor.session.setMode('ace/mode/sql');\n this.aceEditor.setOptions({\n fontSize: '1em',\n minLines: 6,\n showPrintMargin: false,\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n });\n this.aceEditor.commands.addCommand({\n name: 'executeQuery',\n bindKey: { win: 'Ctrl-Enter', mac: 'Command-Enter' },\n exec: () => this.executeQuery()\n });\n\n if (window.ace && window.ace.require) {\n const langTools = window.ace.require('ace/ext/language_tools');\n const tableCompleter = {\n getCompletions: (editor: any, session: any, pos: any, prefix: string, callback: any) => {\n if (!prefix) { callback(null, []); return; }\n \n const completions = this.tableNames.map((name: string) => ({\n caption: name,\n value: name,\n meta: 'table'\n }));\n \n this.columnNames.forEach((name: string) => {\n completions.push({\n caption: name,\n value: name,\n meta: 'column'\n });\n });\n \n callback(null, completions);\n }\n };\n langTools.addCompleter(tableCompleter);\n }\n\n if (this.initialQuery) {\n this.aceEditor.setValue(this.initialQuery);\n this.aceEditor.clearSelection();\n this.aceEditor.focus();\n }\n }, 0);\n \n queryContainer.append('div')\n .attr('id', `query-status-${this.editorId}`)\n .style('min-height', '60px')\n .style('padding', '0.5rem')\n .style('border', '1px solid #e0e0e0')\n .style('border-radius', '4px')\n .style('background-color', '#f9f9f9')\n .style('font-family', 'monospace')\n .style('font-size', '0.9em')\n .style('overflow-y', 'auto')\n .style('flex-shrink', '0')\n .style('margin-top', '1rem')\n .text('Ready to execute queries. Use Ctrl+Enter for quick execution.');\n }\n\n private async executeQuery(): Promise {\n // const queryInput = this.node.querySelector('#query-input') as HTMLTextAreaElement;\n const statusArea = this.node.querySelector(`#query-status-${this.editorId}`) as HTMLDivElement;\n \n const sql = this.aceEditor ? this.aceEditor.getValue().trim() : '';\n \n if (!statusArea) return;\n \n statusArea.innerHTML = '';\n statusArea.style.color = '#333';\n \n if (!sql) {\n statusArea.textContent = 'Please enter a SQL query.';\n statusArea.style.color = '#d32f2f';\n return;\n }\n\n statusArea.textContent = 'Executing query...';\n statusArea.style.color = '#1976d2';\n \n try {\n const response = await fetch('/db/query', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query: sql })\n });\n \n const data = await response.json();\n \n if (data.error) {\n statusArea.textContent = `Error: ${data.error}`;\n statusArea.style.color = '#d32f2f';\n } else if (data.rows && data.columns) {\n statusArea.textContent = `Query executed successfully! Found ${data.rows.length} rows with ${data.columns.length} columns.`;\n statusArea.style.color = '#388e3c';\n \n await this.displayQueryResults(sql, data.columns, data.rows);\n } else {\n statusArea.textContent = 'Query executed successfully. No results returned.';\n statusArea.style.color = '#388e3c';\n }\n } catch (e) {\n statusArea.textContent = `Error executing query: ${e.message}`;\n statusArea.style.color = '#d32f2f';\n }\n }\n\n private async displayQueryResults(sql: string, columns: string[], rows: any[]): Promise {\n const resultWidget = new QueryResultWidget(sql, columns, rows, ++QueryWidget.count);\n \n let refWidget: Widget | null = null;\n if (this.panel.widgets) {\n for (let w of this.panel.widgets()) {\n if (w instanceof TableInfoWidget || w instanceof QueryResultWidget) {\n refWidget = w;\n }\n }\n }\n \n if (refWidget) {\n this.panel.addInfoWidget(resultWidget, { ref: refWidget, mode: 'tab-after' });\n } else {\n this.panel.addInfoWidget(resultWidget, { ref: this, mode: 'split-bottom' });\n }\n \n this.panel.activateWidget(resultWidget);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n const editorElement = this.node.querySelector(`#${this.editorId}`) as HTMLElement;\n if (!editorElement) \n return;\n\n const rect = this.node.getBoundingClientRect();\n const availableHeight = rect.height - 200;\n const minHeight = 250;\n const maxHeight = Math.max(minHeight, availableHeight * 0.6);\n editorElement.style.height = `${maxHeight}px`;\n \n if (this.aceEditor) {\n this.aceEditor.resize();\n }\n }\n} \n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","'use strict';\n\nmodule.exports = require('./browser/algorithms.json');\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar createHash = require('create-hash');\nvar stream = require('readable-stream');\nvar inherits = require('inherits');\nvar sign = require('./sign');\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');\n algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hashType = data.hash;\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nSign.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n this.end();\n var hash = this._hash.digest();\n var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;\n\n this.end();\n var hash = this._hash.digest();\n return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n return new Verify(algorithm);\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n};\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar createHmac = require('create-hmac');\nvar crt = require('browserify-rsa');\nvar EC = require('elliptic').ec;\nvar BN = require('bn.js');\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n var priv = parseKeys(key);\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n return ecSign(hash, priv);\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n return dsaSign(hash, priv, hashType);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = priv.modulus.byteLength();\n var pad = [0, 1];\n while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) { pad.push(hash[i]); }\n\n var out = crt(pad, priv);\n return out;\n}\n\nfunction ecSign(hash, priv) {\n var curveId = curves[priv.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n var curve = new EC(curveId);\n var key = curve.keyFromPrivate(priv.privateKey);\n var out = key.sign(hash);\n\n return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n var x = priv.params.priv_key;\n var p = priv.params.p;\n var q = priv.params.q;\n var g = priv.params.g;\n var r = new BN(0);\n var k;\n var H = bits2int(hash, q).mod(q);\n var s = false;\n var kv = getKey(x, q, hash, algo);\n while (s === false) {\n k = makeKey(q, kv, algo);\n r = makeR(g, k, p, q);\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n if (s.cmpn(0) === 0) {\n s = false;\n r = new BN(0);\n }\n }\n return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n r = r.toArray();\n s = s.toArray();\n\n // Pad values\n if (r[0] & 0x80) { r = [0].concat(r); }\n if (s[0] & 0x80) { s = [0].concat(s); }\n\n var total = r.length + s.length + 4;\n var res = [\n 0x30, total, 0x02, r.length\n ];\n res = res.concat(r, [0x02, s.length], s);\n return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n x = Buffer.from(x.toArray());\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length);\n x = Buffer.concat([zeros, x]);\n }\n var hlen = hash.length;\n var hbits = bits2octets(hash, q);\n var v = Buffer.alloc(hlen);\n v.fill(1);\n var k = Buffer.alloc(hlen);\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n var bits = new BN(obits);\n var shift = (obits.length << 3) - q.bitLength();\n if (shift > 0) { bits.ishrn(shift); }\n return bits;\n}\n\nfunction bits2octets(bits, q) {\n bits = bits2int(bits, q);\n bits = bits.mod(q);\n var out = Buffer.from(bits.toArray());\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length);\n out = Buffer.concat([zeros, out]);\n }\n return out;\n}\n\nfunction makeKey(q, kv, algo) {\n var t;\n var k;\n\n do {\n t = Buffer.alloc(0);\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n t = Buffer.concat([t, kv.v]);\n }\n\n k = bits2int(t, q);\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n } while (k.cmp(q) !== -1);\n\n return k;\n}\n\nfunction makeR(g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar BN = require('bn.js');\nvar EC = require('elliptic').ec;\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n var pub = parseKeys(key);\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n return ecVerify(sig, hash, pub);\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n return dsaVerify(sig, hash, pub);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = pub.modulus.byteLength();\n var pad = [1];\n var padNum = 0;\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff);\n padNum += 1;\n }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) {\n pad.push(hash[i]);\n }\n pad = Buffer.from(pad);\n var red = BN.mont(pub.modulus);\n sig = new BN(sig).toRed(red);\n\n sig = sig.redPow(new BN(pub.publicExponent));\n sig = Buffer.from(sig.fromRed().toArray());\n var out = padNum < 8 ? 1 : 0;\n len = Math.min(sig.length, pad.length);\n if (sig.length !== pad.length) { out = 1; }\n\n i = -1;\n while (++i < len) { out |= sig[i] ^ pad[i]; }\n return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n var curve = new EC(curveId);\n var pubkey = pub.data.subjectPrivateKey.data;\n\n return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n var p = pub.data.p;\n var q = pub.data.q;\n var g = pub.data.g;\n var y = pub.data.pub_key;\n var unpacked = parseKeys.signature.decode(sig, 'der');\n var s = unpacked.s;\n var r = unpacked.r;\n checkValue(s, q);\n checkValue(r, q);\n var montp = BN.mont(p);\n var w = s.invm(q);\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q);\n return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","module.exports = require('events').EventEmitter;\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","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\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'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\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","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\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 = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n if (this.padding === false) {\n return false;\n }\n\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n if (this.padding === false) {\n return buffer;\n }\n\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n if(buf[p.place] === 0x00) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) {\n return false;\n }\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size');\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n var i;\n for (i = 0; i < naf.length; i += 1) {\n naf[i] = 0;\n }\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\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'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","module.exports = require('os')\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n\n'use strict';\n\nvar asn1 = require('asn1.js');\n\nexports.certificate = require('./certificate');\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int'](),\n\t\tthis.key('privateExponent')['int'](),\n\t\tthis.key('prime1')['int'](),\n\t\tthis.key('prime2')['int'](),\n\t\tthis.key('exponent1')['int'](),\n\t\tthis.key('exponent2')['int'](),\n\t\tthis.key('coefficient')['int']()\n\t);\n});\nexports.RSAPrivateKey = RSAPrivateKey;\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int']()\n\t);\n});\nexports.RSAPublicKey = RSAPublicKey;\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('none').null_().optional(),\n\t\tthis.key('curve').objid().optional(),\n\t\tthis.key('params').seq().obj(\n\t\t\tthis.key('p')['int'](),\n\t\t\tthis.key('q')['int'](),\n\t\t\tthis.key('g')['int']()\n\t\t).optional()\n\t);\n});\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\nexports.PublicKey = PublicKey;\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\nexports.PrivateKey = PrivateKeyInfo;\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').seq().obj(\n\t\t\tthis.key('id').objid(),\n\t\t\tthis.key('decrypt').seq().obj(\n\t\t\t\tthis.key('kde').seq().obj(\n\t\t\t\t\tthis.key('id').objid(),\n\t\t\t\t\tthis.key('kdeparams').seq().obj(\n\t\t\t\t\t\tthis.key('salt').octstr(),\n\t\t\t\t\t\tthis.key('iters')['int']()\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tthis.key('cipher').seq().obj(\n\t\t\t\t\tthis.key('algo').objid(),\n\t\t\t\t\tthis.key('iv').octstr()\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('p')['int'](),\n\t\tthis.key('q')['int'](),\n\t\tthis.key('g')['int'](),\n\t\tthis.key('pub_key')['int'](),\n\t\tthis.key('priv_key')['int']()\n\t);\n});\nexports.DSAPrivateKey = DSAPrivateKey;\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n\tthis['int']();\n});\n\nvar ECParameters = asn1.define('ECParameters', function () {\n\tthis.choice({\n\t\tnamedCurve: this.objid()\n\t});\n});\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('privateKey').octstr(),\n\t\tthis.key('parameters').optional().explicit(0).use(ECParameters),\n\t\tthis.key('publicKey').optional().explicit(1).bitstr()\n\t);\n});\nexports.ECPrivateKey = ECPrivateKey;\n\nexports.signature = asn1.define('signature', function () {\n\tthis.seq().obj(\n\t\tthis.key('r')['int'](),\n\t\tthis.key('s')['int']()\n\t);\n});\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict';\n\nvar asn = require('asn1.js');\n\nvar Time = asn.define('Time', function () {\n\tthis.choice({\n\t\tutcTime: this.utctime(),\n\t\tgeneralTime: this.gentime()\n\t});\n});\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n\tthis.seq().obj(\n\t\tthis.key('type').objid(),\n\t\tthis.key('value').any()\n\t);\n});\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('parameters').optional(),\n\t\tthis.key('curve').objid().optional()\n\t);\n});\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n\tthis.setof(AttributeTypeValue);\n});\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n\tthis.seqof(RelativeDistinguishedName);\n});\n\nvar Name = asn.define('Name', function () {\n\tthis.choice({\n\t\trdnSequence: this.use(RDNSequence)\n\t});\n});\n\nvar Validity = asn.define('Validity', function () {\n\tthis.seq().obj(\n\t\tthis.key('notBefore').use(Time),\n\t\tthis.key('notAfter').use(Time)\n\t);\n});\n\nvar Extension = asn.define('Extension', function () {\n\tthis.seq().obj(\n\t\tthis.key('extnID').objid(),\n\t\tthis.key('critical').bool().def(false),\n\t\tthis.key('extnValue').octstr()\n\t);\n});\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('version').explicit(0)['int']().optional(),\n\t\tthis.key('serialNumber')['int'](),\n\t\tthis.key('signature').use(AlgorithmIdentifier),\n\t\tthis.key('issuer').use(Name),\n\t\tthis.key('validity').use(Validity),\n\t\tthis.key('subject').use(Name),\n\t\tthis.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n\t\tthis.key('issuerUniqueID').implicit(1).bitstr().optional(),\n\t\tthis.key('subjectUniqueID').implicit(2).bitstr().optional(),\n\t\tthis.key('extensions').explicit(3).seqof(Extension).optional()\n\t);\n});\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('tbsCertificate').use(TBSCertificate),\n\t\tthis.key('signatureAlgorithm').use(AlgorithmIdentifier),\n\t\tthis.key('signatureValue').bitstr()\n\t);\n});\n\nmodule.exports = X509Certificate;\n","'use strict';\n\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m;\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m;\nvar evp = require('evp_bytestokey');\nvar ciphers = require('browserify-aes');\nvar Buffer = require('safe-buffer').Buffer;\nmodule.exports = function (okey, password) {\n\tvar key = okey.toString();\n\tvar match = key.match(findProc);\n\tvar decrypted;\n\tif (!match) {\n\t\tvar match2 = key.match(fullRegex);\n\t\tdecrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64');\n\t} else {\n\t\tvar suite = 'aes' + match[1];\n\t\tvar iv = Buffer.from(match[2], 'hex');\n\t\tvar cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64');\n\t\tvar cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;\n\t\tvar out = [];\n\t\tvar cipher = ciphers.createDecipheriv(suite, cipherKey, iv);\n\t\tout.push(cipher.update(cipherText));\n\t\tout.push(cipher['final']());\n\t\tdecrypted = Buffer.concat(out);\n\t}\n\tvar tag = key.match(startRegex)[1];\n\treturn {\n\t\ttag: tag,\n\t\tdata: decrypted\n\t};\n};\n","'use strict';\n\nvar asn1 = require('./asn1');\nvar aesid = require('./aesid.json');\nvar fixProc = require('./fixProc');\nvar ciphers = require('browserify-aes');\nvar compat = require('pbkdf2');\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction decrypt(data, password) {\n\tvar salt = data.algorithm.decrypt.kde.kdeparams.salt;\n\tvar iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);\n\tvar algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];\n\tvar iv = data.algorithm.decrypt.cipher.iv;\n\tvar cipherText = data.subjectPrivateKey;\n\tvar keylen = parseInt(algo.split('-')[1], 10) / 8;\n\tvar key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');\n\tvar cipher = ciphers.createDecipheriv(algo, key, iv);\n\tvar out = [];\n\tout.push(cipher.update(cipherText));\n\tout.push(cipher['final']());\n\treturn Buffer.concat(out);\n}\n\nfunction parseKeys(buffer) {\n\tvar password;\n\tif (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n\t\tpassword = buffer.passphrase;\n\t\tbuffer = buffer.key;\n\t}\n\tif (typeof buffer === 'string') {\n\t\tbuffer = Buffer.from(buffer);\n\t}\n\n\tvar stripped = fixProc(buffer, password);\n\n\tvar type = stripped.tag;\n\tvar data = stripped.data;\n\tvar subtype, ndata;\n\tswitch (type) {\n\t\tcase 'CERTIFICATE':\n\t\t\tndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;\n\t\t\t// falls through\n\t\tcase 'PUBLIC KEY':\n\t\t\tif (!ndata) {\n\t\t\t\tndata = asn1.PublicKey.decode(data, 'der');\n\t\t\t}\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\tndata.subjectPrivateKey = ndata.subjectPublicKey;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'ec',\n\t\t\t\t\t\tdata: ndata\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tdata: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'ENCRYPTED PRIVATE KEY':\n\t\t\tdata = asn1.EncryptedPrivateKey.decode(data, 'der');\n\t\t\tdata = decrypt(data, password);\n\t\t\t// falls through\n\t\tcase 'PRIVATE KEY':\n\t\t\tndata = asn1.PrivateKey.decode(data, 'der');\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcurve: ndata.algorithm.curve,\n\t\t\t\t\t\tprivateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tparams: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'RSA PUBLIC KEY':\n\t\t\treturn asn1.RSAPublicKey.decode(data, 'der');\n\t\tcase 'RSA PRIVATE KEY':\n\t\t\treturn asn1.RSAPrivateKey.decode(data, 'der');\n\t\tcase 'DSA PRIVATE KEY':\n\t\t\treturn {\n\t\t\t\ttype: 'dsa',\n\t\t\t\tparams: asn1.DSAPrivateKey.decode(data, 'der')\n\t\t\t};\n\t\tcase 'EC PRIVATE KEY':\n\t\t\tdata = asn1.ECPrivateKey.decode(data, 'der');\n\t\t\treturn {\n\t\t\t\tcurve: data.parameters.value,\n\t\t\t\tprivateKey: data.privateKey\n\t\t\t};\n\t\tdefault: throw new Error('unknown key type ' + type);\n\t}\n}\nparseKeys.signature = asn1.signature;\n\nmodule.exports = parseKeys;\n","// Copyright Joyent, Inc. and other Node contributors.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a\r\n// copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n// persons to whom the Software is furnished to do so, subject to the\r\n// following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included\r\n// in all copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n'use strict';\r\n\r\n\r\nvar isWindows = process.platform === 'win32';\r\nvar util = require('util');\r\n\r\n\r\n// resolves . and .. elements in a path array with directory names there\r\n// must be no slashes or device names (c:\\) in the array\r\n// (so also no leading and trailing slashes - it does not distinguish\r\n// relative and absolute paths)\r\nfunction normalizeArray(parts, allowAboveRoot) {\r\n var res = [];\r\n for (var i = 0; i < parts.length; i++) {\r\n var p = parts[i];\r\n\r\n // ignore empty parts\r\n if (!p || p === '.')\r\n continue;\r\n\r\n if (p === '..') {\r\n if (res.length && res[res.length - 1] !== '..') {\r\n res.pop();\r\n } else if (allowAboveRoot) {\r\n res.push('..');\r\n }\r\n } else {\r\n res.push(p);\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n\r\n// returns an array with empty elements removed from either end of the input\r\n// array or the original array if no elements need to be removed\r\nfunction trimArray(arr) {\r\n var lastIndex = arr.length - 1;\r\n var start = 0;\r\n for (; start <= lastIndex; start++) {\r\n if (arr[start])\r\n break;\r\n }\r\n\r\n var end = lastIndex;\r\n for (; end >= 0; end--) {\r\n if (arr[end])\r\n break;\r\n }\r\n\r\n if (start === 0 && end === lastIndex)\r\n return arr;\r\n if (start > end)\r\n return [];\r\n return arr.slice(start, end + 1);\r\n}\r\n\r\n// Regex to split a windows path into three parts: [*, device, slash,\r\n// tail] windows-only\r\nvar splitDeviceRe =\r\n /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\r\n\r\n// Regex to split the tail part of the above into [*, dir, basename, ext]\r\nvar splitTailRe =\r\n /^([\\s\\S]*?)((?:\\.{1,2}|[^\\\\\\/]+?|)(\\.[^.\\/\\\\]*|))(?:[\\\\\\/]*)$/;\r\n\r\nvar win32 = {};\r\n\r\n// Function to split a filename into [root, dir, basename, ext]\r\nfunction win32SplitPath(filename) {\r\n // Separate device+slash from tail\r\n var result = splitDeviceRe.exec(filename),\r\n device = (result[1] || '') + (result[2] || ''),\r\n tail = result[3] || '';\r\n // Split the tail into dir, basename and extension\r\n var result2 = splitTailRe.exec(tail),\r\n dir = result2[1],\r\n basename = result2[2],\r\n ext = result2[3];\r\n return [device, dir, basename, ext];\r\n}\r\n\r\nfunction win32StatPath(path) {\r\n var result = splitDeviceRe.exec(path),\r\n device = result[1] || '',\r\n isUnc = !!device && device[1] !== ':';\r\n return {\r\n device: device,\r\n isUnc: isUnc,\r\n isAbsolute: isUnc || !!result[2], // UNC paths are always absolute\r\n tail: result[3]\r\n };\r\n}\r\n\r\nfunction normalizeUNCRoot(device) {\r\n return '\\\\\\\\' + device.replace(/^[\\\\\\/]+/, '').replace(/[\\\\\\/]+/g, '\\\\');\r\n}\r\n\r\n// path.resolve([from ...], to)\r\nwin32.resolve = function() {\r\n var resolvedDevice = '',\r\n resolvedTail = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1; i--) {\r\n var path;\r\n if (i >= 0) {\r\n path = arguments[i];\r\n } else if (!resolvedDevice) {\r\n path = process.cwd();\r\n } else {\r\n // Windows has the concept of drive-specific current working\r\n // directories. If we've resolved a drive letter but not yet an\r\n // absolute path, get cwd for that drive. We're sure the device is not\r\n // an unc path at this points, because unc paths are always absolute.\r\n path = process.env['=' + resolvedDevice];\r\n // Verify that a drive-local cwd was found and that it actually points\r\n // to our drive. If not, default to the drive's root.\r\n if (!path || path.substr(0, 3).toLowerCase() !==\r\n resolvedDevice.toLowerCase() + '\\\\') {\r\n path = resolvedDevice + '\\\\';\r\n }\r\n }\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail;\r\n\r\n if (device &&\r\n resolvedDevice &&\r\n device.toLowerCase() !== resolvedDevice.toLowerCase()) {\r\n // This path points to another device so it is not applicable\r\n continue;\r\n }\r\n\r\n if (!resolvedDevice) {\r\n resolvedDevice = device;\r\n }\r\n if (!resolvedAbsolute) {\r\n resolvedTail = tail + '\\\\' + resolvedTail;\r\n resolvedAbsolute = isAbsolute;\r\n }\r\n\r\n if (resolvedDevice && resolvedAbsolute) {\r\n break;\r\n }\r\n }\r\n\r\n // Convert slashes to backslashes when `resolvedDevice` points to an UNC\r\n // root. Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n resolvedDevice = normalizeUNCRoot(resolvedDevice);\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path,\r\n // but handle relative paths to be safe (might happen when process.cwd()\r\n // fails)\r\n\r\n // Normalize the tail path\r\n resolvedTail = normalizeArray(resolvedTail.split(/[\\\\\\/]+/),\r\n !resolvedAbsolute).join('\\\\');\r\n\r\n return (resolvedDevice + (resolvedAbsolute ? '\\\\' : '') + resolvedTail) ||\r\n '.';\r\n};\r\n\r\n\r\nwin32.normalize = function(path) {\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail,\r\n trailingSlash = /[\\\\\\/]$/.test(tail);\r\n\r\n // Normalize the tail path\r\n tail = normalizeArray(tail.split(/[\\\\\\/]+/), !isAbsolute).join('\\\\');\r\n\r\n if (!tail && !isAbsolute) {\r\n tail = '.';\r\n }\r\n if (tail && trailingSlash) {\r\n tail += '\\\\';\r\n }\r\n\r\n // Convert slashes to backslashes when `device` points to an UNC root.\r\n // Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n device = normalizeUNCRoot(device);\r\n }\r\n\r\n return device + (isAbsolute ? '\\\\' : '') + tail;\r\n};\r\n\r\n\r\nwin32.isAbsolute = function(path) {\r\n return win32StatPath(path).isAbsolute;\r\n};\r\n\r\nwin32.join = function() {\r\n var paths = [];\r\n for (var i = 0; i < arguments.length; i++) {\r\n var arg = arguments[i];\r\n if (!util.isString(arg)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (arg) {\r\n paths.push(arg);\r\n }\r\n }\r\n\r\n var joined = paths.join('\\\\');\r\n\r\n // Make sure that the joined path doesn't start with two slashes, because\r\n // normalize() will mistake it for an UNC path then.\r\n //\r\n // This step is skipped when it is very clear that the user actually\r\n // intended to point at an UNC path. This is assumed when the first\r\n // non-empty string arguments starts with exactly two slashes followed by\r\n // at least one more non-slash character.\r\n //\r\n // Note that for normalize() to treat a path as an UNC path it needs to\r\n // have at least 2 components, so we don't filter for that here.\r\n // This means that the user can use join to construct UNC paths from\r\n // a server name and a share name; for example:\r\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\')\r\n if (!/^[\\\\\\/]{2}[^\\\\\\/]/.test(paths[0])) {\r\n joined = joined.replace(/^[\\\\\\/]{2,}/, '\\\\');\r\n }\r\n\r\n return win32.normalize(joined);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// it will solve the relative path from 'from' to 'to', for instance:\r\n// from = 'C:\\\\orandea\\\\test\\\\aaa'\r\n// to = 'C:\\\\orandea\\\\impl\\\\bbb'\r\n// The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\r\nwin32.relative = function(from, to) {\r\n from = win32.resolve(from);\r\n to = win32.resolve(to);\r\n\r\n // windows is not case sensitive\r\n var lowerFrom = from.toLowerCase();\r\n var lowerTo = to.toLowerCase();\r\n\r\n var toParts = trimArray(to.split('\\\\'));\r\n\r\n var lowerFromParts = trimArray(lowerFrom.split('\\\\'));\r\n var lowerToParts = trimArray(lowerTo.split('\\\\'));\r\n\r\n var length = Math.min(lowerFromParts.length, lowerToParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (lowerFromParts[i] !== lowerToParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n if (samePartsLength == 0) {\r\n return to;\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < lowerFromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('\\\\');\r\n};\r\n\r\n\r\nwin32._makeLong = function(path) {\r\n // Note: this will *probably* throw somewhere.\r\n if (!util.isString(path))\r\n return path;\r\n\r\n if (!path) {\r\n return '';\r\n }\r\n\r\n var resolvedPath = win32.resolve(path);\r\n\r\n if (/^[a-zA-Z]\\:\\\\/.test(resolvedPath)) {\r\n // path is local filesystem path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\' + resolvedPath;\r\n } else if (/^\\\\\\\\[^?.]/.test(resolvedPath)) {\r\n // path is network UNC path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\UNC\\\\' + resolvedPath.substring(2);\r\n }\r\n\r\n return path;\r\n};\r\n\r\n\r\nwin32.dirname = function(path) {\r\n var result = win32SplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nwin32.basename = function(path, ext) {\r\n var f = win32SplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nwin32.extname = function(path) {\r\n return win32SplitPath(path)[3];\r\n};\r\n\r\n\r\nwin32.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir;\r\n var base = pathObject.base || '';\r\n if (!dir) {\r\n return base;\r\n }\r\n if (dir[dir.length - 1] === win32.sep) {\r\n return dir + base;\r\n }\r\n return dir + win32.sep + base;\r\n};\r\n\r\n\r\nwin32.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = win32SplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nwin32.sep = '\\\\';\r\nwin32.delimiter = ';';\r\n\r\n\r\n// Split a filename into [root, dir, basename, ext], unix version\r\n// 'root' is just a slash, or nothing.\r\nvar splitPathRe =\r\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\nvar posix = {};\r\n\r\n\r\nfunction posixSplitPath(filename) {\r\n return splitPathRe.exec(filename).slice(1);\r\n}\r\n\r\n\r\n// path.resolve([from ...], to)\r\n// posix version\r\nposix.resolve = function() {\r\n var resolvedPath = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\r\n var path = (i >= 0) ? arguments[i] : process.cwd();\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n resolvedPath = path + '/' + resolvedPath;\r\n resolvedAbsolute = path[0] === '/';\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path, but\r\n // handle relative paths to be safe (might happen when process.cwd() fails)\r\n\r\n // Normalize the path\r\n resolvedPath = normalizeArray(resolvedPath.split('/'),\r\n !resolvedAbsolute).join('/');\r\n\r\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\r\n};\r\n\r\n// path.normalize(path)\r\n// posix version\r\nposix.normalize = function(path) {\r\n var isAbsolute = posix.isAbsolute(path),\r\n trailingSlash = path && path[path.length - 1] === '/';\r\n\r\n // Normalize the path\r\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\r\n\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n\r\n return (isAbsolute ? '/' : '') + path;\r\n};\r\n\r\n// posix version\r\nposix.isAbsolute = function(path) {\r\n return path.charAt(0) === '/';\r\n};\r\n\r\n// posix version\r\nposix.join = function() {\r\n var path = '';\r\n for (var i = 0; i < arguments.length; i++) {\r\n var segment = arguments[i];\r\n if (!util.isString(segment)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (segment) {\r\n if (!path) {\r\n path += segment;\r\n } else {\r\n path += '/' + segment;\r\n }\r\n }\r\n }\r\n return posix.normalize(path);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// posix version\r\nposix.relative = function(from, to) {\r\n from = posix.resolve(from).substr(1);\r\n to = posix.resolve(to).substr(1);\r\n\r\n var fromParts = trimArray(from.split('/'));\r\n var toParts = trimArray(to.split('/'));\r\n\r\n var length = Math.min(fromParts.length, toParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (fromParts[i] !== toParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < fromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('/');\r\n};\r\n\r\n\r\nposix._makeLong = function(path) {\r\n return path;\r\n};\r\n\r\n\r\nposix.dirname = function(path) {\r\n var result = posixSplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nposix.basename = function(path, ext) {\r\n var f = posixSplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nposix.extname = function(path) {\r\n return posixSplitPath(path)[3];\r\n};\r\n\r\n\r\nposix.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\r\n var base = pathObject.base || '';\r\n return dir + base;\r\n};\r\n\r\n\r\nposix.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = posixSplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n allParts[1] = allParts[1] || '';\r\n allParts[2] = allParts[2] || '';\r\n allParts[3] = allParts[3] || '';\r\n\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nposix.sep = '/';\r\nposix.delimiter = ':';\r\n\r\n\r\nif (isWindows)\r\n module.exports = win32;\r\nelse /* posix */\r\n module.exports = posix;\r\n\r\nmodule.exports.posix = posix;\r\nmodule.exports.win32 = win32;\r\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","/*\n * readlineSync\n * https://github.com/anseki/readline-sync\n *\n * Copyright (c) 2018 anseki\n * Licensed under the MIT license.\n */\n\n'use strict';\n\nvar\n IS_WIN = process.platform === 'win32',\n\n ALGORITHM_CIPHER = 'aes-256-cbc',\n ALGORITHM_HASH = 'sha256',\n DEFAULT_ERR_MSG = 'The current environment doesn\\'t support interactive reading from TTY.',\n\n fs = require('fs'),\n TTY = process.binding('tty_wrap').TTY,\n childProc = require('child_process'),\n pathUtil = require('path'),\n\n defaultOptions = {\n /* eslint-disable key-spacing */\n prompt: '> ',\n hideEchoBack: false,\n mask: '*',\n limit: [],\n limitMessage: 'Input another, please.$<( [)limit(])>',\n defaultInput: '',\n trueValue: [],\n falseValue: [],\n caseSensitive: false,\n keepWhitespace: false,\n encoding: 'utf8',\n bufferSize: 1024,\n print: void 0,\n history: true,\n cd: false,\n phContent: void 0,\n preCheck: void 0\n /* eslint-enable key-spacing */\n },\n\n fdR = 'none', fdW, ttyR, isRawMode = false,\n extHostPath, extHostArgs, tempdir, salt = 0,\n lastInput = '', inputHistory = [], rawInput,\n _DBG_useExt = false, _DBG_checkOptions = false, _DBG_checkMethod = false;\n\nfunction getHostArgs(options) {\n // Send any text to crazy Windows shell safely.\n function encodeArg(arg) {\n return arg.replace(/[^\\w\\u0080-\\uFFFF]/g, function(chr) {\n return '#' + chr.charCodeAt(0) + ';';\n });\n }\n\n return extHostArgs.concat((function(conf) {\n var args = [];\n Object.keys(conf).forEach(function(optionName) {\n if (conf[optionName] === 'boolean') {\n if (options[optionName]) { args.push('--' + optionName); }\n } else if (conf[optionName] === 'string') {\n if (options[optionName]) {\n args.push('--' + optionName, encodeArg(options[optionName]));\n }\n }\n });\n return args;\n })({\n /* eslint-disable key-spacing */\n display: 'string',\n displayOnly: 'boolean',\n keyIn: 'boolean',\n hideEchoBack: 'boolean',\n mask: 'string',\n limit: 'string',\n caseSensitive: 'boolean'\n /* eslint-enable key-spacing */\n }));\n}\n\n// piping via files (for Node.js v0.10-)\nfunction _execFileSync(options, execOptions) {\n\n function getTempfile(name) {\n var filepath, suffix = '', fd;\n tempdir = tempdir || require('os').tmpdir();\n\n while (true) {\n filepath = pathUtil.join(tempdir, name + suffix);\n try {\n fd = fs.openSync(filepath, 'wx');\n } catch (e) {\n if (e.code === 'EEXIST') {\n suffix++;\n continue;\n } else {\n throw e;\n }\n }\n fs.closeSync(fd);\n break;\n }\n return filepath;\n }\n\n var hostArgs, shellPath, shellArgs, res = {}, exitCode, extMessage,\n pathStdout = getTempfile('readline-sync.stdout'),\n pathStderr = getTempfile('readline-sync.stderr'),\n pathExit = getTempfile('readline-sync.exit'),\n pathDone = getTempfile('readline-sync.done'),\n crypto = require('crypto'), shasum, decipher, password;\n\n shasum = crypto.createHash(ALGORITHM_HASH);\n shasum.update('' + process.pid + (salt++) + Math.random());\n password = shasum.digest('hex');\n decipher = crypto.createDecipher(ALGORITHM_CIPHER, password);\n\n hostArgs = getHostArgs(options);\n if (IS_WIN) {\n shellPath = process.env.ComSpec || 'cmd.exe';\n process.env.Q = '\"'; // The quote (\") that isn't escaped.\n // `()` for ignore space by echo\n shellArgs = ['/V:ON', '/S', '/C',\n '(%Q%' + shellPath + '%Q% /V:ON /S /C %Q%' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n '%Q%' + extHostPath + '%Q%' +\n hostArgs.map(function(arg) { return ' %Q%' + arg + '%Q%'; }).join('') +\n ' & (echo !ERRORLEVEL!)>%Q%' + pathExit + '%Q%%Q%) 2>%Q%' + pathStderr + '%Q%' +\n ' |%Q%' + process.execPath + '%Q% %Q%' + __dirname + '\\\\encrypt.js%Q%' +\n ' %Q%' + ALGORITHM_CIPHER + '%Q% %Q%' + password + '%Q%' +\n ' >%Q%' + pathStdout + '%Q%' +\n ' & (echo 1)>%Q%' + pathDone + '%Q%'];\n } else {\n shellPath = '/bin/sh';\n shellArgs = ['-c',\n // Use `()`, not `{}` for `-c` (text param)\n '(\"' + extHostPath + '\"' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n hostArgs.map(function(arg) { return \" '\" + arg.replace(/'/g, \"'\\\\''\") + \"'\"; }).join('') +\n '; echo $?>\"' + pathExit + '\") 2>\"' + pathStderr + '\"' +\n ' |\"' + process.execPath + '\" \"' + __dirname + '/encrypt.js\"' +\n ' \"' + ALGORITHM_CIPHER + '\" \"' + password + '\"' +\n ' >\"' + pathStdout + '\"' +\n '; echo 1 >\"' + pathDone + '\"'];\n }\n if (_DBG_checkMethod) { _DBG_checkMethod('_execFileSync', hostArgs); }\n try {\n childProc.spawn(shellPath, shellArgs, execOptions);\n } catch (e) {\n res.error = new Error(e.message);\n res.error.method = '_execFileSync - spawn';\n res.error.program = shellPath;\n res.error.args = shellArgs;\n }\n\n while (fs.readFileSync(pathDone, {encoding: options.encoding}).trim() !== '1') {} // eslint-disable-line no-empty\n if ((exitCode =\n fs.readFileSync(pathExit, {encoding: options.encoding}).trim()) === '0') {\n res.input =\n decipher.update(fs.readFileSync(pathStdout, {encoding: 'binary'}),\n 'hex', options.encoding) +\n decipher.final(options.encoding);\n } else {\n extMessage = fs.readFileSync(pathStderr, {encoding: options.encoding}).trim();\n res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n res.error.method = '_execFileSync';\n res.error.program = shellPath;\n res.error.args = shellArgs;\n res.error.extMessage = extMessage;\n res.error.exitCode = +exitCode;\n }\n\n fs.unlinkSync(pathStdout);\n fs.unlinkSync(pathStderr);\n fs.unlinkSync(pathExit);\n fs.unlinkSync(pathDone);\n\n return res;\n}\n\nfunction readlineExt(options) {\n var hostArgs, res = {}, extMessage,\n execOptions = {env: process.env, encoding: options.encoding};\n\n if (!extHostPath) {\n if (IS_WIN) {\n if (process.env.PSModulePath) { // Windows PowerShell\n extHostPath = 'powershell.exe';\n extHostArgs = ['-ExecutionPolicy', 'Bypass', '-File', __dirname + '\\\\read.ps1']; // eslint-disable-line no-path-concat\n } else { // Windows Script Host\n extHostPath = 'cscript.exe';\n extHostArgs = ['//nologo', __dirname + '\\\\read.cs.js']; // eslint-disable-line no-path-concat\n }\n } else {\n extHostPath = '/bin/sh';\n extHostArgs = [__dirname + '/read.sh']; // eslint-disable-line no-path-concat\n }\n }\n if (IS_WIN && !process.env.PSModulePath) { // Windows Script Host\n // ScriptPW (Win XP and Server2003) needs TTY stream as STDIN.\n // In this case, If STDIN isn't TTY, an error is thrown.\n execOptions.stdio = [process.stdin];\n }\n\n if (childProc.execFileSync) {\n hostArgs = getHostArgs(options);\n if (_DBG_checkMethod) { _DBG_checkMethod('execFileSync', hostArgs); }\n try {\n res.input = childProc.execFileSync(extHostPath, hostArgs, execOptions);\n } catch (e) { // non-zero exit code\n extMessage = e.stderr ? (e.stderr + '').trim() : '';\n res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n res.error.method = 'execFileSync';\n res.error.program = extHostPath;\n res.error.args = hostArgs;\n res.error.extMessage = extMessage;\n res.error.exitCode = e.status;\n res.error.code = e.code;\n res.error.signal = e.signal;\n }\n } else {\n res = _execFileSync(options, execOptions);\n }\n if (!res.error) {\n res.input = res.input.replace(/^\\s*'|'\\s*$/g, '');\n options.display = '';\n }\n\n return res;\n}\n\n/*\n display: string\n displayOnly: boolean\n keyIn: boolean\n hideEchoBack: boolean\n mask: string\n limit: string (pattern)\n caseSensitive: boolean\n keepWhitespace: boolean\n encoding, bufferSize, print\n*/\nfunction _readlineSync(options) {\n var input = '', displaySave = options.display,\n silent = !options.display &&\n options.keyIn && options.hideEchoBack && !options.mask;\n\n function tryExt() {\n var res = readlineExt(options);\n if (res.error) { throw res.error; }\n return res.input;\n }\n\n if (_DBG_checkOptions) { _DBG_checkOptions(options); }\n\n (function() { // open TTY\n var fsB, constants, verNum;\n\n function getFsB() {\n if (!fsB) {\n fsB = process.binding('fs'); // For raw device path\n constants = process.binding('constants');\n }\n return fsB;\n }\n\n if (typeof fdR !== 'string') { return; }\n fdR = null;\n\n if (IS_WIN) {\n // iojs-v2.3.2+ input stream can't read first line. (#18)\n // ** Don't get process.stdin before check! **\n // Fixed v5.1.0\n // Fixed v4.2.4\n // It regressed again in v5.6.0, it is fixed in v6.2.0.\n verNum = (function(ver) { // getVerNum\n var nums = ver.replace(/^\\D+/, '').split('.');\n var verNum = 0;\n if ((nums[0] = +nums[0])) { verNum += nums[0] * 10000; }\n if ((nums[1] = +nums[1])) { verNum += nums[1] * 100; }\n if ((nums[2] = +nums[2])) { verNum += nums[2]; }\n return verNum;\n })(process.version);\n if (!(verNum >= 20302 && verNum < 40204 || verNum >= 50000 && verNum < 50100 || verNum >= 50600 && verNum < 60200) &&\n process.stdin.isTTY) {\n process.stdin.pause();\n fdR = process.stdin.fd;\n ttyR = process.stdin._handle;\n } else {\n try {\n // The stream by fs.openSync('\\\\\\\\.\\\\CON', 'r') can't switch to raw mode.\n // 'CONIN$' might fail on XP, 2000, 7 (x86).\n fdR = getFsB().open('CONIN$', constants.O_RDWR, parseInt('0666', 8));\n ttyR = new TTY(fdR, true);\n } catch (e) { /* ignore */ }\n }\n\n if (process.stdout.isTTY) {\n fdW = process.stdout.fd;\n } else {\n try {\n fdW = fs.openSync('\\\\\\\\.\\\\CON', 'w');\n } catch (e) { /* ignore */ }\n if (typeof fdW !== 'number') { // Retry\n try {\n fdW = getFsB().open('CONOUT$', constants.O_RDWR, parseInt('0666', 8));\n } catch (e) { /* ignore */ }\n }\n }\n\n } else {\n if (process.stdin.isTTY) {\n process.stdin.pause();\n try {\n fdR = fs.openSync('/dev/tty', 'r'); // device file, not process.stdin\n ttyR = process.stdin._handle;\n } catch (e) { /* ignore */ }\n } else {\n // Node.js v0.12 read() fails.\n try {\n fdR = fs.openSync('/dev/tty', 'r');\n ttyR = new TTY(fdR, false);\n } catch (e) { /* ignore */ }\n }\n\n if (process.stdout.isTTY) {\n fdW = process.stdout.fd;\n } else {\n try {\n fdW = fs.openSync('/dev/tty', 'w');\n } catch (e) { /* ignore */ }\n }\n }\n })();\n\n (function() { // try read\n var atEol, limit,\n isCooked = !options.hideEchoBack && !options.keyIn,\n buffer, reqSize, readSize, chunk, line;\n rawInput = '';\n\n // Node.js v0.10- returns an error if same mode is set.\n function setRawMode(mode) {\n if (mode === isRawMode) { return true; }\n if (ttyR.setRawMode(mode) !== 0) { return false; }\n isRawMode = mode;\n return true;\n }\n\n if (_DBG_useExt || !ttyR ||\n typeof fdW !== 'number' && (options.display || !isCooked)) {\n input = tryExt();\n return;\n }\n\n if (options.display) {\n fs.writeSync(fdW, options.display);\n options.display = '';\n }\n if (options.displayOnly) { return; }\n\n if (!setRawMode(!isCooked)) {\n input = tryExt();\n return;\n }\n\n reqSize = options.keyIn ? 1 : options.bufferSize;\n // Check `allocUnsafe` to make sure of the new API.\n buffer = Buffer.allocUnsafe && Buffer.alloc ? Buffer.alloc(reqSize) : new Buffer(reqSize);\n\n if (options.keyIn && options.limit) {\n limit = new RegExp('[^' + options.limit + ']',\n 'g' + (options.caseSensitive ? '' : 'i'));\n }\n\n while (true) {\n readSize = 0;\n try {\n readSize = fs.readSync(fdR, buffer, 0, reqSize);\n } catch (e) {\n if (e.code !== 'EOF') {\n setRawMode(false);\n input += tryExt();\n return;\n }\n }\n if (readSize > 0) {\n chunk = buffer.toString(options.encoding, 0, readSize);\n rawInput += chunk;\n } else {\n chunk = '\\n';\n rawInput += String.fromCharCode(0);\n }\n\n if (chunk && typeof (line = (chunk.match(/^(.*?)[\\r\\n]/) || [])[1]) === 'string') {\n chunk = line;\n atEol = true;\n }\n\n // other ctrl-chars\n // eslint-disable-next-line no-control-regex\n if (chunk) { chunk = chunk.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, ''); }\n if (chunk && limit) { chunk = chunk.replace(limit, ''); }\n\n if (chunk) {\n if (!isCooked) {\n if (!options.hideEchoBack) {\n fs.writeSync(fdW, chunk);\n } else if (options.mask) {\n fs.writeSync(fdW, (new Array(chunk.length + 1)).join(options.mask));\n }\n }\n input += chunk;\n }\n\n if (!options.keyIn && atEol ||\n options.keyIn && input.length >= reqSize) { break; }\n }\n\n if (!isCooked && !silent) { fs.writeSync(fdW, '\\n'); }\n setRawMode(false);\n })();\n\n if (options.print && !silent) {\n options.print(displaySave + (options.displayOnly ? '' :\n (options.hideEchoBack ? (new Array(input.length + 1)).join(options.mask)\n : input) + '\\n'), // must at least write '\\n'\n options.encoding);\n }\n\n return options.displayOnly ? '' :\n (lastInput = options.keepWhitespace || options.keyIn ? input : input.trim());\n}\n\nfunction flattenArray(array, validator) {\n var flatArray = [];\n function _flattenArray(array) {\n if (array == null) {\n return;\n } else if (Array.isArray(array)) {\n array.forEach(_flattenArray);\n } else if (!validator || validator(array)) {\n flatArray.push(array);\n }\n }\n _flattenArray(array);\n return flatArray;\n}\n\nfunction escapePattern(pattern) {\n return pattern.replace(/[\\x00-\\x7f]/g, // eslint-disable-line no-control-regex\n function(s) { return '\\\\x' + ('00' + s.charCodeAt().toString(16)).substr(-2); });\n}\n\n// margeOptions(options1, options2 ... )\n// margeOptions(true, options1, options2 ... )\n// arg1=true : Start from defaultOptions and pick elements of that.\nfunction margeOptions() {\n var optionsList = Array.prototype.slice.call(arguments),\n optionNames, fromDefault;\n\n if (optionsList.length && typeof optionsList[0] === 'boolean') {\n fromDefault = optionsList.shift();\n if (fromDefault) {\n optionNames = Object.keys(defaultOptions);\n optionsList.unshift(defaultOptions);\n }\n }\n\n return optionsList.reduce(function(options, optionsPart) {\n if (optionsPart == null) { return options; }\n\n // ======== DEPRECATED ========\n if (optionsPart.hasOwnProperty('noEchoBack') &&\n !optionsPart.hasOwnProperty('hideEchoBack')) {\n optionsPart.hideEchoBack = optionsPart.noEchoBack;\n delete optionsPart.noEchoBack;\n }\n if (optionsPart.hasOwnProperty('noTrim') &&\n !optionsPart.hasOwnProperty('keepWhitespace')) {\n optionsPart.keepWhitespace = optionsPart.noTrim;\n delete optionsPart.noTrim;\n }\n // ======== /DEPRECATED ========\n\n if (!fromDefault) { optionNames = Object.keys(optionsPart); }\n optionNames.forEach(function(optionName) {\n var value;\n if (!optionsPart.hasOwnProperty(optionName)) { return; }\n value = optionsPart[optionName];\n switch (optionName) {\n // _readlineSync <- * * -> defaultOptions\n // ================ string\n case 'mask': // * *\n case 'limitMessage': // *\n case 'defaultInput': // *\n case 'encoding': // * *\n value = value != null ? value + '' : '';\n if (value && optionName !== 'limitMessage') { value = value.replace(/[\\r\\n]/g, ''); }\n options[optionName] = value;\n break;\n // ================ number(int)\n case 'bufferSize': // * *\n if (!isNaN(value = parseInt(value, 10)) && typeof value === 'number') {\n options[optionName] = value; // limited updating (number is needed)\n }\n break;\n // ================ boolean\n case 'displayOnly': // *\n case 'keyIn': // *\n case 'hideEchoBack': // * *\n case 'caseSensitive': // * *\n case 'keepWhitespace': // * *\n case 'history': // *\n case 'cd': // *\n options[optionName] = !!value;\n break;\n // ================ array\n case 'limit': // * * to string for readlineExt\n case 'trueValue': // *\n case 'falseValue': // *\n options[optionName] = flattenArray(value, function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number' ||\n type === 'function' || value instanceof RegExp;\n }).map(function(value) {\n return typeof value === 'string' ? value.replace(/[\\r\\n]/g, '') : value;\n });\n break;\n // ================ function\n case 'print': // * *\n case 'phContent': // *\n case 'preCheck': // *\n options[optionName] = typeof value === 'function' ? value : void 0;\n break;\n // ================ other\n case 'prompt': // *\n case 'display': // *\n options[optionName] = value != null ? value : '';\n break;\n // no default\n }\n });\n return options;\n }, {});\n}\n\nfunction isMatched(res, comps, caseSensitive) {\n return comps.some(function(comp) {\n var type = typeof comp;\n return type === 'string' ?\n (caseSensitive ? res === comp : res.toLowerCase() === comp.toLowerCase()) :\n type === 'number' ? parseFloat(res) === comp :\n type === 'function' ? comp(res) :\n comp instanceof RegExp ? comp.test(res) : false;\n });\n}\n\nfunction replaceHomePath(path, expand) {\n var homePath = pathUtil.normalize(\n IS_WIN ? (process.env.HOMEDRIVE || '') + (process.env.HOMEPATH || '') :\n process.env.HOME || '').replace(/[\\/\\\\]+$/, '');\n path = pathUtil.normalize(path);\n return expand ? path.replace(/^~(?=\\/|\\\\|$)/, homePath) :\n path.replace(new RegExp('^' + escapePattern(homePath) +\n '(?=\\\\/|\\\\\\\\|$)', IS_WIN ? 'i' : ''), '~');\n}\n\nfunction replacePlaceholder(text, generator) {\n var PTN_INNER = '(?:\\\\(([\\\\s\\\\S]*?)\\\\))?(\\\\w+|.-.)(?:\\\\(([\\\\s\\\\S]*?)\\\\))?',\n rePlaceholder = new RegExp('(\\\\$)?(\\\\$<' + PTN_INNER + '>)', 'g'),\n rePlaceholderCompat = new RegExp('(\\\\$)?(\\\\$\\\\{' + PTN_INNER + '\\\\})', 'g');\n\n function getPlaceholderText(s, escape, placeholder, pre, param, post) {\n var text;\n return escape || typeof (text = generator(param)) !== 'string' ? placeholder :\n text ? (pre || '') + text + (post || '') : '';\n }\n\n return text.replace(rePlaceholder, getPlaceholderText)\n .replace(rePlaceholderCompat, getPlaceholderText);\n}\n\nfunction array2charlist(array, caseSensitive, collectSymbols) {\n var values, group = [], groupClass = -1, charCode = 0, symbols = '', suppressed;\n function addGroup(groups, group) {\n if (group.length > 3) { // ellipsis\n groups.push(group[0] + '...' + group[group.length - 1]);\n suppressed = true;\n } else if (group.length) {\n groups = groups.concat(group);\n }\n return groups;\n }\n\n values = array.reduce(\n function(chars, value) { return chars.concat((value + '').split('')); }, [])\n .reduce(function(groups, curChar) {\n var curGroupClass, curCharCode;\n if (!caseSensitive) { curChar = curChar.toLowerCase(); }\n curGroupClass = /^\\d$/.test(curChar) ? 1 :\n /^[A-Z]$/.test(curChar) ? 2 : /^[a-z]$/.test(curChar) ? 3 : 0;\n if (collectSymbols && curGroupClass === 0) {\n symbols += curChar;\n } else {\n curCharCode = curChar.charCodeAt(0);\n if (curGroupClass && curGroupClass === groupClass &&\n curCharCode === charCode + 1) {\n group.push(curChar);\n } else {\n groups = addGroup(groups, group);\n group = [curChar];\n groupClass = curGroupClass;\n }\n charCode = curCharCode;\n }\n return groups;\n }, []);\n values = addGroup(values, group); // last group\n if (symbols) { values.push(symbols); suppressed = true; }\n return {values: values, suppressed: suppressed};\n}\n\nfunction joinChunks(chunks, suppressed) {\n return chunks.join(chunks.length > 2 ? ', ' : suppressed ? ' / ' : '/');\n}\n\nfunction getPhContent(param, options) {\n var text, values, resCharlist = {}, arg;\n if (options.phContent) {\n text = options.phContent(param, options);\n }\n if (typeof text !== 'string') {\n switch (param) {\n case 'hideEchoBack':\n case 'mask':\n case 'defaultInput':\n case 'caseSensitive':\n case 'keepWhitespace':\n case 'encoding':\n case 'bufferSize':\n case 'history':\n case 'cd':\n text = !options.hasOwnProperty(param) ? '' :\n typeof options[param] === 'boolean' ? (options[param] ? 'on' : 'off') :\n options[param] + '';\n break;\n // case 'prompt':\n // case 'query':\n // case 'display':\n // text = options.hasOwnProperty('displaySrc') ? options.displaySrc + '' : '';\n // break;\n case 'limit':\n case 'trueValue':\n case 'falseValue':\n values = options[options.hasOwnProperty(param + 'Src') ? param + 'Src' : param];\n if (options.keyIn) { // suppress\n resCharlist = array2charlist(values, options.caseSensitive);\n values = resCharlist.values;\n } else {\n values = values.filter(function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number';\n });\n }\n text = joinChunks(values, resCharlist.suppressed);\n break;\n case 'limitCount':\n case 'limitCountNotZero':\n text = options[options.hasOwnProperty('limitSrc') ?\n 'limitSrc' : 'limit'].length;\n text = text || param !== 'limitCountNotZero' ? text + '' : '';\n break;\n case 'lastInput':\n text = lastInput;\n break;\n case 'cwd':\n case 'CWD':\n case 'cwdHome':\n text = process.cwd();\n if (param === 'CWD') {\n text = pathUtil.basename(text);\n } else if (param === 'cwdHome') {\n text = replaceHomePath(text);\n }\n break;\n case 'date':\n case 'time':\n case 'localeDate':\n case 'localeTime':\n text = (new Date())['to' +\n param.replace(/^./, function(str) { return str.toUpperCase(); }) +\n 'String']();\n break;\n default: // with arg\n if (typeof (arg = (param.match(/^history_m(\\d+)$/) || [])[1]) === 'string') {\n text = inputHistory[inputHistory.length - arg] || '';\n }\n }\n }\n return text;\n}\n\nfunction getPhCharlist(param) {\n var matches = /^(.)-(.)$/.exec(param), text = '', from, to, code, step;\n if (!matches) { return null; }\n from = matches[1].charCodeAt(0);\n to = matches[2].charCodeAt(0);\n step = from < to ? 1 : -1;\n for (code = from; code !== to + step; code += step) { text += String.fromCharCode(code); }\n return text;\n}\n\n// cmd \"arg\" \" a r g \" \"\" 'a\"r\"g' \"a\"\"rg\" \"arg\nfunction parseCl(cl) {\n var reToken = new RegExp(/(\\s*)(?:(\"|')(.*?)(?:\\2|$)|(\\S+))/g), matches,\n taken = '', args = [], part;\n cl = cl.trim();\n while ((matches = reToken.exec(cl))) {\n part = matches[3] || matches[4] || '';\n if (matches[1]) {\n args.push(taken);\n taken = '';\n }\n taken += part;\n }\n if (taken) { args.push(taken); }\n return args;\n}\n\nfunction toBool(res, options) {\n return (\n (options.trueValue.length &&\n isMatched(res, options.trueValue, options.caseSensitive)) ? true :\n (options.falseValue.length &&\n isMatched(res, options.falseValue, options.caseSensitive)) ? false : res);\n}\n\nfunction getValidLine(options) {\n var res, forceNext, limitMessage,\n matches, histInput, args, resCheck;\n\n function _getPhContent(param) { return getPhContent(param, options); }\n function addDisplay(text) { options.display += (/[^\\r\\n]$/.test(options.display) ? '\\n' : '') + text; }\n\n options.limitSrc = options.limit;\n options.displaySrc = options.display;\n options.limit = ''; // for readlineExt\n options.display = replacePlaceholder(options.display + '', _getPhContent);\n\n while (true) {\n res = _readlineSync(options);\n forceNext = false;\n limitMessage = '';\n\n if (options.defaultInput && !res) { res = options.defaultInput; }\n\n if (options.history) {\n if ((matches = /^\\s*\\!(?:\\!|-1)(:p)?\\s*$/.exec(res))) { // `!!` `!-1` +`:p`\n histInput = inputHistory[0] || '';\n if (matches[1]) { // only display\n forceNext = true;\n } else { // replace input\n res = histInput;\n }\n // Show it even if it is empty (NL only).\n addDisplay(histInput + '\\n');\n if (!forceNext) { // Loop may break\n options.displayOnly = true;\n _readlineSync(options);\n options.displayOnly = false;\n }\n } else if (res && res !== inputHistory[inputHistory.length - 1]) {\n inputHistory = [res];\n }\n }\n\n if (!forceNext && options.cd && res) {\n args = parseCl(res);\n switch (args[0].toLowerCase()) {\n case 'cd':\n if (args[1]) {\n try {\n process.chdir(replaceHomePath(args[1], true));\n } catch (e) {\n addDisplay(e + '');\n }\n }\n forceNext = true;\n break;\n case 'pwd':\n addDisplay(process.cwd());\n forceNext = true;\n break;\n // no default\n }\n }\n\n if (!forceNext && options.preCheck) {\n resCheck = options.preCheck(res, options);\n res = resCheck.res;\n if (resCheck.forceNext) { forceNext = true; } // Don't switch to false.\n }\n\n if (!forceNext) {\n if (!options.limitSrc.length ||\n isMatched(res, options.limitSrc, options.caseSensitive)) { break; }\n if (options.limitMessage) {\n limitMessage = replacePlaceholder(options.limitMessage, _getPhContent);\n }\n }\n\n addDisplay((limitMessage ? limitMessage + '\\n' : '') +\n replacePlaceholder(options.displaySrc + '', _getPhContent));\n }\n return toBool(res, options);\n}\n\n// for dev\nexports._DBG_set_useExt = function(val) { _DBG_useExt = val; };\nexports._DBG_set_checkOptions = function(val) { _DBG_checkOptions = val; };\nexports._DBG_set_checkMethod = function(val) { _DBG_checkMethod = val; };\nexports._DBG_clearHistory = function() { lastInput = ''; inputHistory = []; };\n\n// ------------------------------------\n\nexports.setDefaultOptions = function(options) {\n defaultOptions = margeOptions(true, options);\n return margeOptions(true); // copy\n};\n\nexports.question = function(query, options) {\n /* eslint-disable key-spacing */\n return getValidLine(margeOptions(margeOptions(true, options), {\n display: query\n }));\n /* eslint-enable key-spacing */\n};\n\nexports.prompt = function(options) {\n var readOptions = margeOptions(true, options);\n readOptions.display = readOptions.prompt;\n return getValidLine(readOptions);\n};\n\nexports.keyIn = function(query, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions(margeOptions(true, options), {\n display: query,\n keyIn: true,\n keepWhitespace: true\n });\n /* eslint-enable key-spacing */\n\n // char list\n readOptions.limitSrc = readOptions.limit.filter(function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number';\n })\n .map(function(text) { return replacePlaceholder(text + '', getPhCharlist); });\n // pattern\n readOptions.limit = escapePattern(readOptions.limitSrc.join(''));\n\n ['trueValue', 'falseValue'].forEach(function(optionName) {\n readOptions[optionName] = readOptions[optionName].reduce(function(comps, comp) {\n var type = typeof comp;\n if (type === 'string' || type === 'number') {\n comps = comps.concat((comp + '').split(''));\n } else { comps.push(comp); }\n return comps;\n }, []);\n });\n\n readOptions.display = replacePlaceholder(readOptions.display + '',\n function(param) { return getPhContent(param, readOptions); });\n\n return toBool(_readlineSync(readOptions), readOptions);\n};\n\n// ------------------------------------\n\nexports.questionEMail = function(query, options) {\n if (query == null) { query = 'Input e-mail address: '; }\n /* eslint-disable key-spacing */\n return exports.question(query, margeOptions({\n // -------- default\n hideEchoBack: false,\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address\n limit: /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,\n limitMessage: 'Input valid e-mail address, please.',\n trueValue: null,\n falseValue: null\n }, options, {\n // -------- forced\n keepWhitespace: false,\n cd: false\n }));\n /* eslint-enable key-spacing */\n};\n\nexports.questionNewPassword = function(query, options) {\n /* eslint-disable key-spacing */\n var resCharlist, min, max,\n readOptions = margeOptions({\n // -------- default\n hideEchoBack: true,\n mask: '*',\n limitMessage: 'It can include: $\\n' +\n 'And the length must be: $',\n trueValue: null,\n falseValue: null,\n caseSensitive: true\n }, options, {\n // -------- forced\n history: false,\n cd: false,\n // limit (by charlist etc.),\n phContent: function(param) {\n return param === 'charlist' ? resCharlist.text :\n param === 'length' ? min + '...' + max : null;\n }\n }),\n // added: charlist, min, max, confirmMessage, unmatchMessage\n charlist, confirmMessage, unmatchMessage,\n limit, limitMessage, res1, res2;\n /* eslint-enable key-spacing */\n options = options || {};\n\n charlist = replacePlaceholder(\n options.charlist ? options.charlist + '' : '$', getPhCharlist);\n if (isNaN(min = parseInt(options.min, 10)) || typeof min !== 'number') { min = 12; }\n if (isNaN(max = parseInt(options.max, 10)) || typeof max !== 'number') { max = 24; }\n limit = new RegExp('^[' + escapePattern(charlist) +\n ']{' + min + ',' + max + '}$');\n resCharlist = array2charlist([charlist], readOptions.caseSensitive, true);\n resCharlist.text = joinChunks(resCharlist.values, resCharlist.suppressed);\n\n confirmMessage = options.confirmMessage != null ? options.confirmMessage :\n 'Reinput a same one to confirm it: ';\n unmatchMessage = options.unmatchMessage != null ? options.unmatchMessage :\n 'It differs from first one.' +\n ' Hit only the Enter key if you want to retry from first one.';\n\n if (query == null) { query = 'Input new password: '; }\n\n limitMessage = readOptions.limitMessage;\n while (!res2) {\n readOptions.limit = limit;\n readOptions.limitMessage = limitMessage;\n res1 = exports.question(query, readOptions);\n\n readOptions.limit = [res1, ''];\n readOptions.limitMessage = unmatchMessage;\n res2 = exports.question(confirmMessage, readOptions);\n }\n\n return res1;\n};\n\nfunction _questionNum(query, options, parser) {\n var validValue;\n function getValidValue(value) {\n validValue = parser(value);\n return !isNaN(validValue) && typeof validValue === 'number';\n }\n /* eslint-disable key-spacing */\n exports.question(query, margeOptions({\n // -------- default\n limitMessage: 'Input valid number, please.'\n }, options, {\n // -------- forced\n limit: getValidValue,\n cd: false\n // trueValue, falseValue, caseSensitive, keepWhitespace don't work.\n }));\n /* eslint-enable key-spacing */\n return validValue;\n}\nexports.questionInt = function(query, options) {\n return _questionNum(query, options, function(value) { return parseInt(value, 10); });\n};\nexports.questionFloat = function(query, options) {\n return _questionNum(query, options, parseFloat);\n};\n\nexports.questionPath = function(query, options) {\n /* eslint-disable key-spacing */\n var validPath, error = '',\n readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: '$Input valid path, please.' +\n '$<( Min:)min>$<( Max:)max>',\n history: true,\n cd: true\n }, options, {\n // -------- forced\n keepWhitespace: false,\n limit: function(value) {\n var exists, stat, res;\n value = replaceHomePath(value, true);\n error = ''; // for validate\n // mkdir -p\n function mkdirParents(dirPath) {\n dirPath.split(/\\/|\\\\/).reduce(function(parents, dir) {\n var path = pathUtil.resolve((parents += dir + pathUtil.sep));\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path);\n } else if (!fs.statSync(path).isDirectory()) {\n throw new Error('Non directory already exists: ' + path);\n }\n return parents;\n }, '');\n }\n\n try {\n exists = fs.existsSync(value);\n validPath = exists ? fs.realpathSync(value) : pathUtil.resolve(value);\n // options.exists default: true, not-bool: no-check\n if (!options.hasOwnProperty('exists') && !exists ||\n typeof options.exists === 'boolean' && options.exists !== exists) {\n error = (exists ? 'Already exists' : 'No such file or directory') +\n ': ' + validPath;\n return false;\n }\n if (!exists && options.create) {\n if (options.isDirectory) {\n mkdirParents(validPath);\n } else {\n mkdirParents(pathUtil.dirname(validPath));\n fs.closeSync(fs.openSync(validPath, 'w')); // touch\n }\n validPath = fs.realpathSync(validPath);\n }\n if (exists && (options.min || options.max ||\n options.isFile || options.isDirectory)) {\n stat = fs.statSync(validPath);\n // type check first (directory has zero size)\n if (options.isFile && !stat.isFile()) {\n error = 'Not file: ' + validPath;\n return false;\n } else if (options.isDirectory && !stat.isDirectory()) {\n error = 'Not directory: ' + validPath;\n return false;\n } else if (options.min && stat.size < +options.min ||\n options.max && stat.size > +options.max) {\n error = 'Size ' + stat.size + ' is out of range: ' + validPath;\n return false;\n }\n }\n if (typeof options.validate === 'function' &&\n (res = options.validate(validPath)) !== true) {\n if (typeof res === 'string') { error = res; }\n return false;\n }\n } catch (e) {\n error = e + '';\n return false;\n }\n return true;\n },\n // trueValue, falseValue, caseSensitive don't work.\n phContent: function(param) {\n return param === 'error' ? error :\n param !== 'min' && param !== 'max' ? null :\n options.hasOwnProperty(param) ? options[param] + '' : '';\n }\n });\n // added: exists, create, min, max, isFile, isDirectory, validate\n /* eslint-enable key-spacing */\n options = options || {};\n\n if (query == null) { query = 'Input path (you can \"cd\" and \"pwd\"): '; }\n\n exports.question(query, readOptions);\n return validPath;\n};\n\n// props: preCheck, args, hRes, limit\nfunction getClHandler(commandHandler, options) {\n var clHandler = {}, hIndex = {};\n if (typeof commandHandler === 'object') {\n Object.keys(commandHandler).forEach(function(cmd) {\n if (typeof commandHandler[cmd] === 'function') {\n hIndex[options.caseSensitive ? cmd : cmd.toLowerCase()] = commandHandler[cmd];\n }\n });\n clHandler.preCheck = function(res) {\n var cmdKey;\n clHandler.args = parseCl(res);\n cmdKey = clHandler.args[0] || '';\n if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n clHandler.hRes =\n cmdKey !== '_' && hIndex.hasOwnProperty(cmdKey) ?\n hIndex[cmdKey].apply(res, clHandler.args.slice(1)) :\n hIndex.hasOwnProperty('_') ? hIndex._.apply(res, clHandler.args) : null;\n return {res: res, forceNext: false};\n };\n if (!hIndex.hasOwnProperty('_')) {\n clHandler.limit = function() { // It's called after preCheck.\n var cmdKey = clHandler.args[0] || '';\n if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n return hIndex.hasOwnProperty(cmdKey);\n };\n }\n } else {\n clHandler.preCheck = function(res) {\n clHandler.args = parseCl(res);\n clHandler.hRes = typeof commandHandler === 'function' ?\n commandHandler.apply(res, clHandler.args) : true; // true for break loop\n return {res: res, forceNext: false};\n };\n }\n return clHandler;\n}\n\nexports.promptCL = function(commandHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: 'Requested command is not available.',\n caseSensitive: false,\n history: true\n }, options),\n // -------- forced\n // trueValue, falseValue, keepWhitespace don't work.\n // preCheck, limit (by clHandler)\n clHandler = getClHandler(commandHandler, readOptions);\n /* eslint-enable key-spacing */\n readOptions.limit = clHandler.limit;\n readOptions.preCheck = clHandler.preCheck;\n exports.prompt(readOptions);\n return clHandler.args;\n};\n\nexports.promptLoop = function(inputHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n trueValue: null,\n falseValue: null,\n caseSensitive: false,\n history: true\n }, options);\n /* eslint-enable key-spacing */\n while (true) { if (inputHandler(exports.prompt(readOptions))) { break; } }\n return;\n};\n\nexports.promptCLLoop = function(commandHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: 'Requested command is not available.',\n caseSensitive: false,\n history: true\n }, options),\n // -------- forced\n // trueValue, falseValue, keepWhitespace don't work.\n // preCheck, limit (by clHandler)\n clHandler = getClHandler(commandHandler, readOptions);\n /* eslint-enable key-spacing */\n readOptions.limit = clHandler.limit;\n readOptions.preCheck = clHandler.preCheck;\n while (true) {\n exports.prompt(readOptions);\n if (clHandler.hRes) { break; }\n }\n return;\n};\n\nexports.promptSimShell = function(options) {\n /* eslint-disable key-spacing */\n return exports.prompt(margeOptions({\n // -------- default\n hideEchoBack: false,\n history: true\n }, options, {\n // -------- forced\n prompt: (function() {\n return IS_WIN ?\n '$>' :\n // 'user@host:cwd$ '\n (process.env.USER || '') +\n (process.env.HOSTNAME ?\n '@' + process.env.HOSTNAME.replace(/\\..*$/, '') : '') +\n ':$$ ';\n })()\n }));\n /* eslint-enable key-spacing */\n};\n\nfunction _keyInYN(query, options, limit) {\n var res;\n if (query == null) { query = 'Are you sure? '; }\n if ((!options || options.guide !== false) && (query += '')) {\n query = query.replace(/\\s*:?\\s*$/, '') + ' [y/n]: ';\n }\n /* eslint-disable key-spacing */\n res = exports.keyIn(query, margeOptions(options, {\n // -------- forced\n hideEchoBack: false,\n limit: limit,\n trueValue: 'y',\n falseValue: 'n',\n caseSensitive: false\n // mask doesn't work.\n }));\n // added: guide\n /* eslint-enable key-spacing */\n return typeof res === 'boolean' ? res : '';\n}\nexports.keyInYN = function(query, options) { return _keyInYN(query, options); };\nexports.keyInYNStrict = function(query, options) { return _keyInYN(query, options, 'yn'); };\n\nexports.keyInPause = function(query, options) {\n if (query == null) { query = 'Continue...'; }\n if ((!options || options.guide !== false) && (query += '')) {\n query = query.replace(/\\s+$/, '') + ' (Hit any key)';\n }\n /* eslint-disable key-spacing */\n exports.keyIn(query, margeOptions({\n // -------- default\n limit: null\n }, options, {\n // -------- forced\n hideEchoBack: true,\n mask: ''\n }));\n // added: guide\n /* eslint-enable key-spacing */\n return;\n};\n\nexports.keyInSelect = function(items, query, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false\n }, options, {\n // -------- forced\n trueValue: null,\n falseValue: null,\n caseSensitive: false,\n // limit (by items),\n phContent: function(param) {\n return param === 'itemsCount' ? items.length + '' :\n param === 'firstItem' ? (items[0] + '').trim() :\n param === 'lastItem' ? (items[items.length - 1] + '').trim() : null;\n }\n }),\n // added: guide, cancel\n keylist = '', key2i = {}, charCode = 49 /* '1' */, display = '\\n';\n /* eslint-enable key-spacing */\n if (!Array.isArray(items) || !items.length || items.length > 35) {\n throw '`items` must be Array (max length: 35).';\n }\n\n items.forEach(function(item, i) {\n var key = String.fromCharCode(charCode);\n keylist += key;\n key2i[key] = i;\n display += '[' + key + '] ' + (item + '').trim() + '\\n';\n charCode = charCode === 57 /* '9' */ ? 97 /* 'a' */ : charCode + 1;\n });\n if (!options || options.cancel !== false) {\n keylist += '0';\n key2i['0'] = -1;\n display += '[0] ' +\n (options && options.cancel != null && typeof options.cancel !== 'boolean' ?\n (options.cancel + '').trim() : 'CANCEL') + '\\n';\n }\n readOptions.limit = keylist;\n display += '\\n';\n\n if (query == null) { query = 'Choose one from list: '; }\n if ((query += '')) {\n if (!options || options.guide !== false) {\n query = query.replace(/\\s*:?\\s*$/, '') + ' [$]: ';\n }\n display += query;\n }\n\n return key2i[exports.keyIn(display, readOptions).toLowerCase()];\n};\n\nexports.getRawInput = function() { return rawInput; };\n\n// ======== DEPRECATED ========\nfunction _setOption(optionName, args) {\n var options;\n if (args.length) { options = {}; options[optionName] = args[0]; }\n return exports.setDefaultOptions(options)[optionName];\n}\nexports.setPrint = function() { return _setOption('print', arguments); };\nexports.setPrompt = function() { return _setOption('prompt', arguments); };\nexports.setEncoding = function() { return _setOption('encoding', arguments); };\nexports.setMask = function() { return _setOption('mask', arguments); };\nexports.setBufferSize = function() { return _setOption('bufferSize', arguments); };\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\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\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\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'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var SvgPanZoom = require(\"./svg-pan-zoom.js\");\n\nmodule.exports = SvgPanZoom;\n","var SvgUtils = require(\"./svg-utilities\");\n\nmodule.exports = {\n enable: function(instance) {\n // Select (and create if necessary) defs\n var defs = instance.svg.querySelector(\"defs\");\n if (!defs) {\n defs = document.createElementNS(SvgUtils.svgNS, \"defs\");\n instance.svg.appendChild(defs);\n }\n\n // Check for style element, and create it if it doesn't exist\n var styleEl = defs.querySelector(\"style#svg-pan-zoom-controls-styles\");\n if (!styleEl) {\n var style = document.createElementNS(SvgUtils.svgNS, \"style\");\n style.setAttribute(\"id\", \"svg-pan-zoom-controls-styles\");\n style.setAttribute(\"type\", \"text/css\");\n style.textContent =\n \".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }\";\n defs.appendChild(style);\n }\n\n // Zoom Group\n var zoomGroup = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomGroup.setAttribute(\"id\", \"svg-pan-zoom-controls\");\n zoomGroup.setAttribute(\n \"transform\",\n \"translate(\" +\n (instance.width - 70) +\n \" \" +\n (instance.height - 76) +\n \") scale(0.75)\"\n );\n zoomGroup.setAttribute(\"class\", \"svg-pan-zoom-control\");\n\n // Control elements\n zoomGroup.appendChild(this._createZoomIn(instance));\n zoomGroup.appendChild(this._createZoomReset(instance));\n zoomGroup.appendChild(this._createZoomOut(instance));\n\n // Finally append created element\n instance.svg.appendChild(zoomGroup);\n\n // Cache control instance\n instance.controlIcons = zoomGroup;\n },\n\n _createZoomIn: function(instance) {\n var zoomIn = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomIn.setAttribute(\"id\", \"svg-pan-zoom-zoom-in\");\n zoomIn.setAttribute(\"transform\", \"translate(30.5 5) scale(0.015)\");\n zoomIn.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomIn.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n zoomIn.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n\n var zoomInBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomInBackground.setAttribute(\"x\", \"0\");\n zoomInBackground.setAttribute(\"y\", \"0\");\n zoomInBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomInBackground.setAttribute(\"height\", \"1400\");\n zoomInBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomIn.appendChild(zoomInBackground);\n\n var zoomInShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomInShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\"\n );\n zoomInShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomIn.appendChild(zoomInShape);\n\n return zoomIn;\n },\n\n _createZoomReset: function(instance) {\n // reset\n var resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, \"g\");\n resetPanZoomControl.setAttribute(\"id\", \"svg-pan-zoom-reset-pan-zoom\");\n resetPanZoomControl.setAttribute(\"transform\", \"translate(5 35) scale(0.4)\");\n resetPanZoomControl.setAttribute(\"class\", \"svg-pan-zoom-control\");\n resetPanZoomControl.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n resetPanZoomControl.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n\n var resetPanZoomControlBackground = document.createElementNS(\n SvgUtils.svgNS,\n \"rect\"\n ); // TODO change these background space fillers to rounded rectangles so they look prettier\n resetPanZoomControlBackground.setAttribute(\"x\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"y\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"width\", \"182\"); // larger than expected because the whole group is transformed to scale down\n resetPanZoomControlBackground.setAttribute(\"height\", \"58\");\n resetPanZoomControlBackground.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-background\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlBackground);\n\n var resetPanZoomControlShape1 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"d\",\n \"M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape1);\n\n var resetPanZoomControlShape2 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"d\",\n \"M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape2);\n\n return resetPanZoomControl;\n },\n\n _createZoomOut: function(instance) {\n // zoom out\n var zoomOut = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomOut.setAttribute(\"id\", \"svg-pan-zoom-zoom-out\");\n zoomOut.setAttribute(\"transform\", \"translate(30.5 70) scale(0.015)\");\n zoomOut.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomOut.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n zoomOut.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n\n var zoomOutBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomOutBackground.setAttribute(\"x\", \"0\");\n zoomOutBackground.setAttribute(\"y\", \"0\");\n zoomOutBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomOutBackground.setAttribute(\"height\", \"1400\");\n zoomOutBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomOut.appendChild(zoomOutBackground);\n\n var zoomOutShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomOutShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z\"\n );\n zoomOutShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomOut.appendChild(zoomOutShape);\n\n return zoomOut;\n },\n\n disable: function(instance) {\n if (instance.controlIcons) {\n instance.controlIcons.parentNode.removeChild(instance.controlIcons);\n instance.controlIcons = null;\n }\n }\n};\n","var SvgUtils = require(\"./svg-utilities\"),\n Utils = require(\"./utilities\");\n\nvar ShadowViewport = function(viewport, options) {\n this.init(viewport, options);\n};\n\n/**\n * Initialization\n *\n * @param {SVGElement} viewport\n * @param {Object} options\n */\nShadowViewport.prototype.init = function(viewport, options) {\n // DOM Elements\n this.viewport = viewport;\n this.options = options;\n\n // State cache\n this.originalState = { zoom: 1, x: 0, y: 0 };\n this.activeState = { zoom: 1, x: 0, y: 0 };\n\n this.updateCTMCached = Utils.proxy(this.updateCTM, this);\n\n // Create a custom requestAnimationFrame taking in account refreshRate\n this.requestAnimationFrame = Utils.createRequestAnimationFrame(\n this.options.refreshRate\n );\n\n // ViewBox\n this.viewBox = { x: 0, y: 0, width: 0, height: 0 };\n this.cacheViewBox();\n\n // Process CTM\n var newCTM = this.processCTM();\n\n // Update viewport CTM and cache zoom and pan\n this.setCTM(newCTM);\n\n // Update CTM in this frame\n this.updateCTM();\n};\n\n/**\n * Cache initial viewBox value\n * If no viewBox is defined, then use viewport size/position instead for viewBox values\n */\nShadowViewport.prototype.cacheViewBox = function() {\n var svgViewBox = this.options.svg.getAttribute(\"viewBox\");\n\n if (svgViewBox) {\n var viewBoxValues = svgViewBox\n .split(/[\\s\\,]/)\n .filter(function(v) {\n return v;\n })\n .map(parseFloat);\n\n // Cache viewbox x and y offset\n this.viewBox.x = viewBoxValues[0];\n this.viewBox.y = viewBoxValues[1];\n this.viewBox.width = viewBoxValues[2];\n this.viewBox.height = viewBoxValues[3];\n\n var zoom = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n\n // Update active state\n this.activeState.zoom = zoom;\n this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2;\n this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2;\n\n // Force updating CTM\n this.updateCTMOnNextFrame();\n\n this.options.svg.removeAttribute(\"viewBox\");\n } else {\n this.simpleViewBoxCache();\n }\n};\n\n/**\n * Recalculate viewport sizes and update viewBox cache\n */\nShadowViewport.prototype.simpleViewBoxCache = function() {\n var bBox = this.viewport.getBBox();\n\n this.viewBox.x = bBox.x;\n this.viewBox.y = bBox.y;\n this.viewBox.width = bBox.width;\n this.viewBox.height = bBox.height;\n};\n\n/**\n * Returns a viewbox object. Safe to alter\n *\n * @return {Object} viewbox object\n */\nShadowViewport.prototype.getViewBox = function() {\n return Utils.extend({}, this.viewBox);\n};\n\n/**\n * Get initial zoom and pan values. Save them into originalState\n * Parses viewBox attribute to alter initial sizes\n *\n * @return {CTM} CTM object based on options\n */\nShadowViewport.prototype.processCTM = function() {\n var newCTM = this.getCTM();\n\n if (this.options.fit || this.options.contain) {\n var newScale;\n if (this.options.fit) {\n newScale = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n } else {\n newScale = Math.max(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n }\n\n newCTM.a = newScale; //x-scale\n newCTM.d = newScale; //y-scale\n newCTM.e = -this.viewBox.x * newScale; //x-transform\n newCTM.f = -this.viewBox.y * newScale; //y-transform\n }\n\n if (this.options.center) {\n var offsetX =\n (this.options.width -\n (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) *\n 0.5,\n offsetY =\n (this.options.height -\n (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) *\n 0.5;\n\n newCTM.e = offsetX;\n newCTM.f = offsetY;\n }\n\n // Cache initial values. Based on activeState and fix+center opitons\n this.originalState.zoom = newCTM.a;\n this.originalState.x = newCTM.e;\n this.originalState.y = newCTM.f;\n\n return newCTM;\n};\n\n/**\n * Return originalState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getOriginalState = function() {\n return Utils.extend({}, this.originalState);\n};\n\n/**\n * Return actualState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getState = function() {\n return Utils.extend({}, this.activeState);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getZoom = function() {\n return this.activeState.zoom;\n};\n\n/**\n * Get zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getRelativeZoom = function() {\n return this.activeState.zoom / this.originalState.zoom;\n};\n\n/**\n * Compute zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.computeRelativeZoom = function(scale) {\n return scale / this.originalState.zoom;\n};\n\n/**\n * Get pan\n *\n * @return {Object}\n */\nShadowViewport.prototype.getPan = function() {\n return { x: this.activeState.x, y: this.activeState.y };\n};\n\n/**\n * Return cached viewport CTM value that can be safely modified\n *\n * @return {SVGMatrix}\n */\nShadowViewport.prototype.getCTM = function() {\n var safeCTM = this.options.svg.createSVGMatrix();\n\n // Copy values manually as in FF they are not itterable\n safeCTM.a = this.activeState.zoom;\n safeCTM.b = 0;\n safeCTM.c = 0;\n safeCTM.d = this.activeState.zoom;\n safeCTM.e = this.activeState.x;\n safeCTM.f = this.activeState.y;\n\n return safeCTM;\n};\n\n/**\n * Set a new CTM\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.setCTM = function(newCTM) {\n var willZoom = this.isZoomDifferent(newCTM),\n willPan = this.isPanDifferent(newCTM);\n\n if (willZoom || willPan) {\n // Before zoom\n if (willZoom) {\n // If returns false then cancel zooming\n if (\n this.options.beforeZoom(\n this.getRelativeZoom(),\n this.computeRelativeZoom(newCTM.a)\n ) === false\n ) {\n newCTM.a = newCTM.d = this.activeState.zoom;\n willZoom = false;\n } else {\n this.updateCache(newCTM);\n this.options.onZoom(this.getRelativeZoom());\n }\n }\n\n // Before pan\n if (willPan) {\n var preventPan = this.options.beforePan(this.getPan(), {\n x: newCTM.e,\n y: newCTM.f\n }),\n // If prevent pan is an object\n preventPanX = false,\n preventPanY = false;\n\n // If prevent pan is Boolean false\n if (preventPan === false) {\n // Set x and y same as before\n newCTM.e = this.getPan().x;\n newCTM.f = this.getPan().y;\n\n preventPanX = preventPanY = true;\n } else if (Utils.isObject(preventPan)) {\n // Check for X axes attribute\n if (preventPan.x === false) {\n // Prevent panning on x axes\n newCTM.e = this.getPan().x;\n preventPanX = true;\n } else if (Utils.isNumber(preventPan.x)) {\n // Set a custom pan value\n newCTM.e = preventPan.x;\n }\n\n // Check for Y axes attribute\n if (preventPan.y === false) {\n // Prevent panning on x axes\n newCTM.f = this.getPan().y;\n preventPanY = true;\n } else if (Utils.isNumber(preventPan.y)) {\n // Set a custom pan value\n newCTM.f = preventPan.y;\n }\n }\n\n // Update willPan flag\n // Check if newCTM is still different\n if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) {\n willPan = false;\n } else {\n this.updateCache(newCTM);\n this.options.onPan(this.getPan());\n }\n }\n\n // Check again if should zoom or pan\n if (willZoom || willPan) {\n this.updateCTMOnNextFrame();\n }\n }\n};\n\nShadowViewport.prototype.isZoomDifferent = function(newCTM) {\n return this.activeState.zoom !== newCTM.a;\n};\n\nShadowViewport.prototype.isPanDifferent = function(newCTM) {\n return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f;\n};\n\n/**\n * Update cached CTM and active state\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.updateCache = function(newCTM) {\n this.activeState.zoom = newCTM.a;\n this.activeState.x = newCTM.e;\n this.activeState.y = newCTM.f;\n};\n\nShadowViewport.prototype.pendingUpdate = false;\n\n/**\n * Place a request to update CTM on next Frame\n */\nShadowViewport.prototype.updateCTMOnNextFrame = function() {\n if (!this.pendingUpdate) {\n // Lock\n this.pendingUpdate = true;\n\n // Throttle next update\n this.requestAnimationFrame.call(window, this.updateCTMCached);\n }\n};\n\n/**\n * Update viewport CTM with cached CTM\n */\nShadowViewport.prototype.updateCTM = function() {\n var ctm = this.getCTM();\n\n // Updates SVG element\n SvgUtils.setCTM(this.viewport, ctm, this.defs);\n\n // Free the lock\n this.pendingUpdate = false;\n\n // Notify about the update\n if (this.options.onUpdatedCTM) {\n this.options.onUpdatedCTM(ctm);\n }\n};\n\nmodule.exports = function(viewport, options) {\n return new ShadowViewport(viewport, options);\n};\n","var Wheel = require(\"./uniwheel\"),\n ControlIcons = require(\"./control-icons\"),\n Utils = require(\"./utilities\"),\n SvgUtils = require(\"./svg-utilities\"),\n ShadowViewport = require(\"./shadow-viewport\");\n\nvar SvgPanZoom = function(svg, options) {\n this.init(svg, options);\n};\n\nvar optionsDefaults = {\n viewportSelector: \".svg-pan-zoom_viewport\", // Viewport selector. Can be querySelector string or SVGElement\n panEnabled: true, // enable or disable panning (default enabled)\n controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled)\n zoomEnabled: true, // enable or disable zooming (default enabled)\n dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled)\n mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled)\n preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events\n zoomScaleSensitivity: 0.1, // Zoom sensitivity\n minZoom: 0.5, // Minimum Zoom level\n maxZoom: 10, // Maximum Zoom level\n fit: true, // enable or disable viewport fit in SVG (default true)\n contain: false, // enable or disable viewport contain the svg (default false)\n center: true, // enable or disable viewport centering in SVG (default true)\n refreshRate: \"auto\", // Maximum number of frames per second (altering SVG's viewport)\n beforeZoom: null,\n onZoom: null,\n beforePan: null,\n onPan: null,\n customEventsHandler: null,\n eventsListenerElement: null,\n onUpdatedCTM: null\n};\n\nvar passiveListenerOption = { passive: true };\n\nSvgPanZoom.prototype.init = function(svg, options) {\n var that = this;\n\n this.svg = svg;\n this.defs = svg.querySelector(\"defs\");\n\n // Add default attributes to SVG\n SvgUtils.setupSvgAttributes(this.svg);\n\n // Set options\n this.options = Utils.extend(Utils.extend({}, optionsDefaults), options);\n\n // Set default state\n this.state = \"none\";\n\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Init shadow viewport\n this.viewport = ShadowViewport(\n SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector),\n {\n svg: this.svg,\n width: this.width,\n height: this.height,\n fit: this.options.fit,\n contain: this.options.contain,\n center: this.options.center,\n refreshRate: this.options.refreshRate,\n // Put callbacks into functions as they can change through time\n beforeZoom: function(oldScale, newScale) {\n if (that.viewport && that.options.beforeZoom) {\n return that.options.beforeZoom(oldScale, newScale);\n }\n },\n onZoom: function(scale) {\n if (that.viewport && that.options.onZoom) {\n return that.options.onZoom(scale);\n }\n },\n beforePan: function(oldPoint, newPoint) {\n if (that.viewport && that.options.beforePan) {\n return that.options.beforePan(oldPoint, newPoint);\n }\n },\n onPan: function(point) {\n if (that.viewport && that.options.onPan) {\n return that.options.onPan(point);\n }\n },\n onUpdatedCTM: function(ctm) {\n if (that.viewport && that.options.onUpdatedCTM) {\n return that.options.onUpdatedCTM(ctm);\n }\n }\n }\n );\n\n // Wrap callbacks into public API context\n var publicInstance = this.getPublicInstance();\n publicInstance.setBeforeZoom(this.options.beforeZoom);\n publicInstance.setOnZoom(this.options.onZoom);\n publicInstance.setBeforePan(this.options.beforePan);\n publicInstance.setOnPan(this.options.onPan);\n publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM);\n\n if (this.options.controlIconsEnabled) {\n ControlIcons.enable(this);\n }\n\n // Init events handlers\n this.lastMouseWheelEventTime = Date.now();\n this.setupHandlers();\n};\n\n/**\n * Register event handlers\n */\nSvgPanZoom.prototype.setupHandlers = function() {\n var that = this,\n prevEvt = null; // use for touchstart event to detect double tap\n\n this.eventListeners = {\n // Mouse down group\n mousedown: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n touchstart: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n\n // Mouse up group\n mouseup: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchend: function(evt) {\n return that.handleMouseUp(evt);\n },\n\n // Mouse move group\n mousemove: function(evt) {\n return that.handleMouseMove(evt);\n },\n touchmove: function(evt) {\n return that.handleMouseMove(evt);\n },\n\n // Mouse leave group\n mouseleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchcancel: function(evt) {\n return that.handleMouseUp(evt);\n }\n };\n\n // Init custom events handler if available\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.init({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n\n // Custom event handler may halt builtin listeners\n var haltEventListeners = this.options.customEventsHandler\n .haltEventListeners;\n if (haltEventListeners && haltEventListeners.length) {\n for (var i = haltEventListeners.length - 1; i >= 0; i--) {\n if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) {\n delete this.eventListeners[haltEventListeners[i]];\n }\n }\n }\n }\n\n // Bind eventListeners\n for (var event in this.eventListeners) {\n // Attach event to eventsListenerElement or SVG if not available\n (this.options.eventsListenerElement || this.svg).addEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Zoom using mouse wheel\n if (this.options.mouseWheelZoomEnabled) {\n this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true\n this.enableMouseWheelZoom();\n }\n};\n\n/**\n * Enable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.enableMouseWheelZoom = function() {\n if (!this.options.mouseWheelZoomEnabled) {\n var that = this;\n\n // Mouse wheel listener\n this.wheelListener = function(evt) {\n return that.handleMouseWheel(evt);\n };\n\n // Bind wheelListener\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.on(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n\n this.options.mouseWheelZoomEnabled = true;\n }\n};\n\n/**\n * Disable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.disableMouseWheelZoom = function() {\n if (this.options.mouseWheelZoomEnabled) {\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.off(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n this.options.mouseWheelZoomEnabled = false;\n }\n};\n\n/**\n * Handle mouse wheel event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseWheel = function(evt) {\n if (!this.options.zoomEnabled || this.state !== \"none\") {\n return;\n }\n\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Default delta in case that deltaY is not available\n var delta = evt.deltaY || 1,\n timeDelta = Date.now() - this.lastMouseWheelEventTime,\n divider = 3 + Math.max(0, 30 - timeDelta);\n\n // Update cache\n this.lastMouseWheelEventTime = Date.now();\n\n // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0)\n if (\"deltaMode\" in evt && evt.deltaMode === 0 && evt.wheelDelta) {\n delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY;\n }\n\n delta =\n -0.3 < delta && delta < 0.3\n ? delta\n : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider;\n\n var inversedScreenCTM = this.svg.getScreenCTM().inverse(),\n relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n inversedScreenCTM\n ),\n zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior\n\n this.zoomAtPoint(zoom, relativeMousePoint);\n};\n\n/**\n * Zoom in at a SVG point\n *\n * @param {SVGPoint} point\n * @param {Float} zoomScale Number representing how much to zoom\n * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value.\n * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%)\n */\nSvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) {\n var originalState = this.viewport.getOriginalState();\n\n if (!zoomAbsolute) {\n // Fit zoomScale in set bounds\n if (\n this.getZoom() * zoomScale <\n this.options.minZoom * originalState.zoom\n ) {\n zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom();\n } else if (\n this.getZoom() * zoomScale >\n this.options.maxZoom * originalState.zoom\n ) {\n zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom();\n }\n } else {\n // Fit zoomScale in set bounds\n zoomScale = Math.max(\n this.options.minZoom * originalState.zoom,\n Math.min(this.options.maxZoom * originalState.zoom, zoomScale)\n );\n // Find relative scale to achieve desired scale\n zoomScale = zoomScale / this.getZoom();\n }\n\n var oldCTM = this.viewport.getCTM(),\n relativePoint = point.matrixTransform(oldCTM.inverse()),\n modifier = this.svg\n .createSVGMatrix()\n .translate(relativePoint.x, relativePoint.y)\n .scale(zoomScale)\n .translate(-relativePoint.x, -relativePoint.y),\n newCTM = oldCTM.multiply(modifier);\n\n if (newCTM.a !== oldCTM.a) {\n this.viewport.setCTM(newCTM);\n }\n};\n\n/**\n * Zoom at center point\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.zoom = function(scale, absolute) {\n this.zoomAtPoint(\n scale,\n SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height),\n absolute\n );\n};\n\n/**\n * Zoom used by public instance\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoom = function(scale, absolute) {\n if (absolute) {\n scale = this.computeFromRelativeZoom(scale);\n }\n\n this.zoom(scale, absolute);\n};\n\n/**\n * Zoom at point used by public instance\n *\n * @param {Float} scale\n * @param {SVGPoint|Object} point An object that has x and y attributes\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) {\n if (absolute) {\n // Transform zoom into a relative value\n scale = this.computeFromRelativeZoom(scale);\n }\n\n // If not a SVGPoint but has x and y then create a SVGPoint\n if (Utils.getType(point) !== \"SVGPoint\") {\n if (\"x\" in point && \"y\" in point) {\n point = SvgUtils.createSVGPoint(this.svg, point.x, point.y);\n } else {\n throw new Error(\"Given point is invalid\");\n }\n }\n\n this.zoomAtPoint(scale, point, absolute);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getZoom = function() {\n return this.viewport.getZoom();\n};\n\n/**\n * Get zoom scale for public usage\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getRelativeZoom = function() {\n return this.viewport.getRelativeZoom();\n};\n\n/**\n * Compute actual zoom from public zoom\n *\n * @param {Float} zoom\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) {\n return zoom * this.viewport.getOriginalState().zoom;\n};\n\n/**\n * Set zoom to initial state\n */\nSvgPanZoom.prototype.resetZoom = function() {\n var originalState = this.viewport.getOriginalState();\n\n this.zoom(originalState.zoom, true);\n};\n\n/**\n * Set pan to initial state\n */\nSvgPanZoom.prototype.resetPan = function() {\n this.pan(this.viewport.getOriginalState());\n};\n\n/**\n * Set pan and zoom to initial state\n */\nSvgPanZoom.prototype.reset = function() {\n this.resetZoom();\n this.resetPan();\n};\n\n/**\n * Handle double click event\n * See handleMouseDown() for alternate detection method\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleDblClick = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Check if target was a control button\n if (this.options.controlIconsEnabled) {\n var targetClass = evt.target.getAttribute(\"class\") || \"\";\n if (targetClass.indexOf(\"svg-pan-zoom-control\") > -1) {\n return false;\n }\n }\n\n var zoomFactor;\n\n if (evt.shiftKey) {\n zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed\n } else {\n zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2;\n }\n\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.svg.getScreenCTM().inverse()\n );\n this.zoomAtPoint(zoomFactor, point);\n};\n\n/**\n * Handle click event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n Utils.mouseAndTouchNormalize(evt, this.svg);\n\n // Double click detection; more consistent than ondblclick\n if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) {\n this.handleDblClick(evt);\n } else {\n // Pan mode\n this.state = \"pan\";\n this.firstEventCTM = this.viewport.getCTM();\n this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n );\n }\n};\n\n/**\n * Handle mouse move event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseMove = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\" && this.options.panEnabled) {\n // Pan mode\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n ),\n viewportCTM = this.firstEventCTM.translate(\n point.x - this.stateOrigin.x,\n point.y - this.stateOrigin.y\n );\n\n this.viewport.setCTM(viewportCTM);\n }\n};\n\n/**\n * Handle mouse button release event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseUp = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\") {\n // Quit pan mode\n this.state = \"none\";\n }\n};\n\n/**\n * Adjust viewport size (only) so it will fit in SVG\n * Does not center image\n */\nSvgPanZoom.prototype.fit = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.min(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport size (only) so it will contain the SVG\n * Does not center image\n */\nSvgPanZoom.prototype.contain = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.max(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport pan (only) so it will be centered in SVG\n * Does not zoom/fit/contain image\n */\nSvgPanZoom.prototype.center = function() {\n var viewBox = this.viewport.getViewBox(),\n offsetX =\n (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5,\n offsetY =\n (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5;\n\n this.getPublicInstance().pan({ x: offsetX, y: offsetY });\n};\n\n/**\n * Update content cached BorderBox\n * Use when viewport contents change\n */\nSvgPanZoom.prototype.updateBBox = function() {\n this.viewport.simpleViewBoxCache();\n};\n\n/**\n * Pan to a rendered position\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.pan = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e = point.x;\n viewportCTM.f = point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Relatively pan the graph by a specified rendered position vector\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.panBy = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e += point.x;\n viewportCTM.f += point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Get pan vector\n *\n * @return {Object} {x: 0, y: 0}\n */\nSvgPanZoom.prototype.getPan = function() {\n var state = this.viewport.getState();\n\n return { x: state.x, y: state.y };\n};\n\n/**\n * Recalculates cached svg dimensions and controls position\n */\nSvgPanZoom.prototype.resize = function() {\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n this.svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Recalculate original state\n var viewport = this.viewport;\n viewport.options.width = this.width;\n viewport.options.height = this.height;\n viewport.processCTM();\n\n // Reposition control icons by re-enabling them\n if (this.options.controlIconsEnabled) {\n this.getPublicInstance().disableControlIcons();\n this.getPublicInstance().enableControlIcons();\n }\n};\n\n/**\n * Unbind mouse events, free callbacks and destroy public instance\n */\nSvgPanZoom.prototype.destroy = function() {\n var that = this;\n\n // Free callbacks\n this.beforeZoom = null;\n this.onZoom = null;\n this.beforePan = null;\n this.onPan = null;\n this.onUpdatedCTM = null;\n\n // Destroy custom event handlers\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.destroy({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n }\n\n // Unbind eventListeners\n for (var event in this.eventListeners) {\n (this.options.eventsListenerElement || this.svg).removeEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Unbind wheelListener\n this.disableMouseWheelZoom();\n\n // Remove control icons\n this.getPublicInstance().disableControlIcons();\n\n // Reset zoom and pan\n this.reset();\n\n // Remove instance from instancesStore\n instancesStore = instancesStore.filter(function(instance) {\n return instance.svg !== that.svg;\n });\n\n // Delete options and its contents\n delete this.options;\n\n // Delete viewport to make public shadow viewport functions uncallable\n delete this.viewport;\n\n // Destroy public instance and rewrite getPublicInstance\n delete this.publicInstance;\n delete this.pi;\n this.getPublicInstance = function() {\n return null;\n };\n};\n\n/**\n * Returns a public instance object\n *\n * @return {Object} Public instance object\n */\nSvgPanZoom.prototype.getPublicInstance = function() {\n var that = this;\n\n // Create cache\n if (!this.publicInstance) {\n this.publicInstance = this.pi = {\n // Pan\n enablePan: function() {\n that.options.panEnabled = true;\n return that.pi;\n },\n disablePan: function() {\n that.options.panEnabled = false;\n return that.pi;\n },\n isPanEnabled: function() {\n return !!that.options.panEnabled;\n },\n pan: function(point) {\n that.pan(point);\n return that.pi;\n },\n panBy: function(point) {\n that.panBy(point);\n return that.pi;\n },\n getPan: function() {\n return that.getPan();\n },\n // Pan event\n setBeforePan: function(fn) {\n that.options.beforePan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnPan: function(fn) {\n that.options.onPan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zoom and Control Icons\n enableZoom: function() {\n that.options.zoomEnabled = true;\n return that.pi;\n },\n disableZoom: function() {\n that.options.zoomEnabled = false;\n return that.pi;\n },\n isZoomEnabled: function() {\n return !!that.options.zoomEnabled;\n },\n enableControlIcons: function() {\n if (!that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = true;\n ControlIcons.enable(that);\n }\n return that.pi;\n },\n disableControlIcons: function() {\n if (that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = false;\n ControlIcons.disable(that);\n }\n return that.pi;\n },\n isControlIconsEnabled: function() {\n return !!that.options.controlIconsEnabled;\n },\n // Double click zoom\n enableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = true;\n return that.pi;\n },\n disableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = false;\n return that.pi;\n },\n isDblClickZoomEnabled: function() {\n return !!that.options.dblClickZoomEnabled;\n },\n // Mouse wheel zoom\n enableMouseWheelZoom: function() {\n that.enableMouseWheelZoom();\n return that.pi;\n },\n disableMouseWheelZoom: function() {\n that.disableMouseWheelZoom();\n return that.pi;\n },\n isMouseWheelZoomEnabled: function() {\n return !!that.options.mouseWheelZoomEnabled;\n },\n // Zoom scale and bounds\n setZoomScaleSensitivity: function(scale) {\n that.options.zoomScaleSensitivity = scale;\n return that.pi;\n },\n setMinZoom: function(zoom) {\n that.options.minZoom = zoom;\n return that.pi;\n },\n setMaxZoom: function(zoom) {\n that.options.maxZoom = zoom;\n return that.pi;\n },\n // Zoom event\n setBeforeZoom: function(fn) {\n that.options.beforeZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnZoom: function(fn) {\n that.options.onZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zooming\n zoom: function(scale) {\n that.publicZoom(scale, true);\n return that.pi;\n },\n zoomBy: function(scale) {\n that.publicZoom(scale, false);\n return that.pi;\n },\n zoomAtPoint: function(scale, point) {\n that.publicZoomAtPoint(scale, point, true);\n return that.pi;\n },\n zoomAtPointBy: function(scale, point) {\n that.publicZoomAtPoint(scale, point, false);\n return that.pi;\n },\n zoomIn: function() {\n this.zoomBy(1 + that.options.zoomScaleSensitivity);\n return that.pi;\n },\n zoomOut: function() {\n this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity));\n return that.pi;\n },\n getZoom: function() {\n return that.getRelativeZoom();\n },\n // CTM update\n setOnUpdatedCTM: function(fn) {\n that.options.onUpdatedCTM =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Reset\n resetZoom: function() {\n that.resetZoom();\n return that.pi;\n },\n resetPan: function() {\n that.resetPan();\n return that.pi;\n },\n reset: function() {\n that.reset();\n return that.pi;\n },\n // Fit, Contain and Center\n fit: function() {\n that.fit();\n return that.pi;\n },\n contain: function() {\n that.contain();\n return that.pi;\n },\n center: function() {\n that.center();\n return that.pi;\n },\n // Size and Resize\n updateBBox: function() {\n that.updateBBox();\n return that.pi;\n },\n resize: function() {\n that.resize();\n return that.pi;\n },\n getSizes: function() {\n return {\n width: that.width,\n height: that.height,\n realZoom: that.getZoom(),\n viewBox: that.viewport.getViewBox()\n };\n },\n // Destroy\n destroy: function() {\n that.destroy();\n return that.pi;\n }\n };\n }\n\n return this.publicInstance;\n};\n\n/**\n * Stores pairs of instances of SvgPanZoom and SVG\n * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom}\n *\n * @type {Array}\n */\nvar instancesStore = [];\n\nvar svgPanZoom = function(elementOrSelector, options) {\n var svg = Utils.getSvg(elementOrSelector);\n\n if (svg === null) {\n return null;\n } else {\n // Look for existent instance\n for (var i = instancesStore.length - 1; i >= 0; i--) {\n if (instancesStore[i].svg === svg) {\n return instancesStore[i].instance.getPublicInstance();\n }\n }\n\n // If instance not found - create one\n instancesStore.push({\n svg: svg,\n instance: new SvgPanZoom(svg, options)\n });\n\n // Return just pushed instance\n return instancesStore[\n instancesStore.length - 1\n ].instance.getPublicInstance();\n }\n};\n\nmodule.exports = svgPanZoom;\n","var Utils = require(\"./utilities\"),\n _browser = \"unknown\";\n\n// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser\nif (/*@cc_on!@*/ false || !!document.documentMode) {\n // internet explorer\n _browser = \"ie\";\n}\n\nmodule.exports = {\n svgNS: \"http://www.w3.org/2000/svg\",\n xmlNS: \"http://www.w3.org/XML/1998/namespace\",\n xmlnsNS: \"http://www.w3.org/2000/xmlns/\",\n xlinkNS: \"http://www.w3.org/1999/xlink\",\n evNS: \"http://www.w3.org/2001/xml-events\",\n\n /**\n * Get svg dimensions: width and height\n *\n * @param {SVGSVGElement} svg\n * @return {Object} {width: 0, height: 0}\n */\n getBoundingClientRectNormalized: function(svg) {\n if (svg.clientWidth && svg.clientHeight) {\n return { width: svg.clientWidth, height: svg.clientHeight };\n } else if (!!svg.getBoundingClientRect()) {\n return svg.getBoundingClientRect();\n } else {\n throw new Error(\"Cannot get BoundingClientRect for SVG.\");\n }\n },\n\n /**\n * Gets g element with class of \"viewport\" or creates it if it doesn't exist\n *\n * @param {SVGSVGElement} svg\n * @return {SVGElement} g (group) element\n */\n getOrCreateViewport: function(svg, selector) {\n var viewport = null;\n\n if (Utils.isElement(selector)) {\n viewport = selector;\n } else {\n viewport = svg.querySelector(selector);\n }\n\n // Check if there is just one main group in SVG\n if (!viewport) {\n var childNodes = Array.prototype.slice\n .call(svg.childNodes || svg.children)\n .filter(function(el) {\n return el.nodeName !== \"defs\" && el.nodeName !== \"#text\";\n });\n\n // Node name should be SVGGElement and should have no transform attribute\n // Groups with transform are not used as viewport because it involves parsing of all transform possibilities\n if (\n childNodes.length === 1 &&\n childNodes[0].nodeName === \"g\" &&\n childNodes[0].getAttribute(\"transform\") === null\n ) {\n viewport = childNodes[0];\n }\n }\n\n // If no favorable group element exists then create one\n if (!viewport) {\n var viewportId =\n \"viewport-\" + new Date().toISOString().replace(/\\D/g, \"\");\n viewport = document.createElementNS(this.svgNS, \"g\");\n viewport.setAttribute(\"id\", viewportId);\n\n // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes\n var svgChildren = svg.childNodes || svg.children;\n if (!!svgChildren && svgChildren.length > 0) {\n for (var i = svgChildren.length; i > 0; i--) {\n // Move everything into viewport except defs\n if (svgChildren[svgChildren.length - i].nodeName !== \"defs\") {\n viewport.appendChild(svgChildren[svgChildren.length - i]);\n }\n }\n }\n svg.appendChild(viewport);\n }\n\n // Parse class names\n var classNames = [];\n if (viewport.getAttribute(\"class\")) {\n classNames = viewport.getAttribute(\"class\").split(\" \");\n }\n\n // Set class (if not set already)\n if (!~classNames.indexOf(\"svg-pan-zoom_viewport\")) {\n classNames.push(\"svg-pan-zoom_viewport\");\n viewport.setAttribute(\"class\", classNames.join(\" \"));\n }\n\n return viewport;\n },\n\n /**\n * Set SVG attributes\n *\n * @param {SVGSVGElement} svg\n */\n setupSvgAttributes: function(svg) {\n // Setting default attributes\n svg.setAttribute(\"xmlns\", this.svgNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:xlink\", this.xlinkNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:ev\", this.evNS);\n\n // Needed for Internet Explorer, otherwise the viewport overflows\n if (svg.parentNode !== null) {\n var style = svg.getAttribute(\"style\") || \"\";\n if (style.toLowerCase().indexOf(\"overflow\") === -1) {\n svg.setAttribute(\"style\", \"overflow: hidden; \" + style);\n }\n }\n },\n\n /**\n * How long Internet Explorer takes to finish updating its display (ms).\n */\n internetExplorerRedisplayInterval: 300,\n\n /**\n * Forces the browser to redisplay all SVG elements that rely on an\n * element defined in a 'defs' section. It works globally, for every\n * available defs element on the page.\n * The throttling is intentionally global.\n *\n * This is only needed for IE. It is as a hack to make markers (and 'use' elements?)\n * visible after pan/zoom when there are multiple SVGs on the page.\n * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/\n * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62\n */\n refreshDefsGlobal: Utils.throttle(\n function() {\n var allDefs = document.querySelectorAll(\"defs\");\n var allDefsCount = allDefs.length;\n for (var i = 0; i < allDefsCount; i++) {\n var thisDefs = allDefs[i];\n thisDefs.parentNode.insertBefore(thisDefs, thisDefs);\n }\n },\n this ? this.internetExplorerRedisplayInterval : null\n ),\n\n /**\n * Sets the current transform matrix of an element\n *\n * @param {SVGElement} element\n * @param {SVGMatrix} matrix CTM\n * @param {SVGElement} defs\n */\n setCTM: function(element, matrix, defs) {\n var that = this,\n s =\n \"matrix(\" +\n matrix.a +\n \",\" +\n matrix.b +\n \",\" +\n matrix.c +\n \",\" +\n matrix.d +\n \",\" +\n matrix.e +\n \",\" +\n matrix.f +\n \")\";\n\n element.setAttributeNS(null, \"transform\", s);\n if (\"transform\" in element.style) {\n element.style.transform = s;\n } else if (\"-ms-transform\" in element.style) {\n element.style[\"-ms-transform\"] = s;\n } else if (\"-webkit-transform\" in element.style) {\n element.style[\"-webkit-transform\"] = s;\n }\n\n // IE has a bug that makes markers disappear on zoom (when the matrix \"a\" and/or \"d\" elements change)\n // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10\n // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/\n if (_browser === \"ie\" && !!defs) {\n // this refresh is intended for redisplaying the SVG during zooming\n defs.parentNode.insertBefore(defs, defs);\n // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG\n // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that\n // are located under any other element(s).\n window.setTimeout(function() {\n that.refreshDefsGlobal();\n }, that.internetExplorerRedisplayInterval);\n }\n },\n\n /**\n * Instantiate an SVGPoint object with given event coordinates\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n * @return {SVGPoint} point\n */\n getEventPoint: function(evt, svg) {\n var point = svg.createSVGPoint();\n\n Utils.mouseAndTouchNormalize(evt, svg);\n\n point.x = evt.clientX;\n point.y = evt.clientY;\n\n return point;\n },\n\n /**\n * Get SVG center point\n *\n * @param {SVGSVGElement} svg\n * @return {SVGPoint}\n */\n getSvgCenterPoint: function(svg, width, height) {\n return this.createSVGPoint(svg, width / 2, height / 2);\n },\n\n /**\n * Create a SVGPoint with given x and y\n *\n * @param {SVGSVGElement} svg\n * @param {Number} x\n * @param {Number} y\n * @return {SVGPoint}\n */\n createSVGPoint: function(svg, x, y) {\n var point = svg.createSVGPoint();\n point.x = x;\n point.y = y;\n\n return point;\n }\n};\n","// uniwheel 0.1.2 (customized)\n// A unified cross browser mouse wheel event handler\n// https://github.com/teemualap/uniwheel\n\nmodule.exports = (function(){\n\n //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel\n\n var prefix = \"\", _addEventListener, _removeEventListener, support, fns = [];\n var passiveOption = {passive: true};\n\n // detect event model\n if ( window.addEventListener ) {\n _addEventListener = \"addEventListener\";\n _removeEventListener = \"removeEventListener\";\n } else {\n _addEventListener = \"attachEvent\";\n _removeEventListener = \"detachEvent\";\n prefix = \"on\";\n }\n\n // detect available wheel event\n support = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\n document.onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\n\n\n function createCallback(element,callback) {\n\n var fn = function(originalEvent) {\n\n !originalEvent && ( originalEvent = window.event );\n\n // create a normalized event object\n var event = {\n // keep a ref to the original event object\n originalEvent: originalEvent,\n target: originalEvent.target || originalEvent.srcElement,\n type: \"wheel\",\n deltaMode: originalEvent.type == \"MozMousePixelScroll\" ? 0 : 1,\n deltaX: 0,\n delatZ: 0,\n preventDefault: function() {\n originalEvent.preventDefault ?\n originalEvent.preventDefault() :\n originalEvent.returnValue = false;\n }\n };\n\n // calculate deltaY (and deltaX) according to the event\n if ( support == \"mousewheel\" ) {\n event.deltaY = - 1/40 * originalEvent.wheelDelta;\n // Webkit also support wheelDeltaX\n originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX );\n } else {\n event.deltaY = originalEvent.detail;\n }\n\n // it's time to fire the callback\n return callback( event );\n\n };\n\n fns.push({\n element: element,\n fn: fn,\n });\n\n return fn;\n }\n\n function getCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns[i].fn;\n }\n }\n return function(){};\n }\n\n function removeCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns.splice(i,1);\n }\n }\n }\n\n function _addWheelListener(elem, eventName, callback, isPassiveListener ) {\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = createCallback(elem, callback);\n }\n\n elem[_addEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n }\n\n function _removeWheelListener(elem, eventName, callback, isPassiveListener ) {\n\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = getCallback(elem);\n }\n\n elem[_removeEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n\n removeCallback(elem);\n }\n\n function addWheelListener( elem, callback, isPassiveListener ) {\n _addWheelListener(elem, support, callback, isPassiveListener );\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _addWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener );\n }\n }\n\n function removeWheelListener(elem, callback, isPassiveListener){\n _removeWheelListener(elem, support, callback, isPassiveListener);\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _removeWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener);\n }\n }\n\n return {\n on: addWheelListener,\n off: removeWheelListener\n };\n\n})();\n","module.exports = {\n /**\n * Extends an object\n *\n * @param {Object} target object to extend\n * @param {Object} source object to take properties from\n * @return {Object} extended object\n */\n extend: function(target, source) {\n target = target || {};\n for (var prop in source) {\n // Go recursively\n if (this.isObject(source[prop])) {\n target[prop] = this.extend(target[prop], source[prop]);\n } else {\n target[prop] = source[prop];\n }\n }\n return target;\n },\n\n /**\n * Checks if an object is a DOM element\n *\n * @param {Object} o HTML element or String\n * @return {Boolean} returns true if object is a DOM element\n */\n isElement: function(o) {\n return (\n o instanceof HTMLElement ||\n o instanceof SVGElement ||\n o instanceof SVGSVGElement || //DOM2\n (o &&\n typeof o === \"object\" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === \"string\")\n );\n },\n\n /**\n * Checks if an object is an Object\n *\n * @param {Object} o Object\n * @return {Boolean} returns true if object is an Object\n */\n isObject: function(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n },\n\n /**\n * Checks if variable is Number\n *\n * @param {Integer|Float} n\n * @return {Boolean} returns true if variable is Number\n */\n isNumber: function(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n },\n\n /**\n * Search for an SVG element\n *\n * @param {Object|String} elementOrSelector DOM Element or selector String\n * @return {Object|Null} SVG or null\n */\n getSvg: function(elementOrSelector) {\n var element, svg;\n\n if (!this.isElement(elementOrSelector)) {\n // If selector provided\n if (\n typeof elementOrSelector === \"string\" ||\n elementOrSelector instanceof String\n ) {\n // Try to find the element\n element = document.querySelector(elementOrSelector);\n\n if (!element) {\n throw new Error(\n \"Provided selector did not find any elements. Selector: \" +\n elementOrSelector\n );\n return null;\n }\n } else {\n throw new Error(\"Provided selector is not an HTML object nor String\");\n return null;\n }\n } else {\n element = elementOrSelector;\n }\n\n if (element.tagName.toLowerCase() === \"svg\") {\n svg = element;\n } else {\n if (element.tagName.toLowerCase() === \"object\") {\n svg = element.contentDocument.documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"embed\") {\n svg = element.getSVGDocument().documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"img\") {\n throw new Error(\n 'Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.'\n );\n } else {\n throw new Error(\"Cannot get SVG.\");\n }\n return null;\n }\n }\n }\n\n return svg;\n },\n\n /**\n * Attach a given context to a function\n * @param {Function} fn Function\n * @param {Object} context Context\n * @return {Function} Function with certain context\n */\n proxy: function(fn, context) {\n return function() {\n return fn.apply(context, arguments);\n };\n },\n\n /**\n * Returns object type\n * Uses toString that returns [object SVGPoint]\n * And than parses object type from string\n *\n * @param {Object} o Any object\n * @return {String} Object type\n */\n getType: function(o) {\n return Object.prototype.toString\n .apply(o)\n .replace(/^\\[object\\s/, \"\")\n .replace(/\\]$/, \"\");\n },\n\n /**\n * If it is a touch event than add clientX and clientY to event object\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n */\n mouseAndTouchNormalize: function(evt, svg) {\n // If no clientX then fallback\n if (evt.clientX === void 0 || evt.clientX === null) {\n // Fallback\n evt.clientX = 0;\n evt.clientY = 0;\n\n // If it is a touch event\n if (evt.touches !== void 0 && evt.touches.length) {\n if (evt.touches[0].clientX !== void 0) {\n evt.clientX = evt.touches[0].clientX;\n evt.clientY = evt.touches[0].clientY;\n } else if (evt.touches[0].pageX !== void 0) {\n var rect = svg.getBoundingClientRect();\n\n evt.clientX = evt.touches[0].pageX - rect.left;\n evt.clientY = evt.touches[0].pageY - rect.top;\n }\n // If it is a custom event\n } else if (evt.originalEvent !== void 0) {\n if (evt.originalEvent.clientX !== void 0) {\n evt.clientX = evt.originalEvent.clientX;\n evt.clientY = evt.originalEvent.clientY;\n }\n }\n }\n },\n\n /**\n * Check if an event is a double click/tap\n * TODO: For touch gestures use a library (hammer.js) that takes in account other events\n * (touchmove and touchend). It should take in account tap duration and traveled distance\n *\n * @param {Event} evt\n * @param {Event} prevEvt Previous Event\n * @return {Boolean}\n */\n isDblClick: function(evt, prevEvt) {\n // Double click detected by browser\n if (evt.detail === 2) {\n return true;\n }\n // Try to compare events\n else if (prevEvt !== void 0 && prevEvt !== null) {\n var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms\n touchesDistance = Math.sqrt(\n Math.pow(evt.clientX - prevEvt.clientX, 2) +\n Math.pow(evt.clientY - prevEvt.clientY, 2)\n );\n\n return timeStampDiff < 250 && touchesDistance < 10;\n }\n\n // Nothing found\n return false;\n },\n\n /**\n * Returns current timestamp as an integer\n *\n * @return {Number}\n */\n now:\n Date.now ||\n function() {\n return new Date().getTime();\n },\n\n // From underscore.\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n throttle: function(func, wait, options) {\n var that = this;\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) {\n options = {};\n }\n var later = function() {\n previous = options.leading === false ? 0 : that.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n return function() {\n var now = that.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n context = this; // eslint-disable-line consistent-this\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n },\n\n /**\n * Create a requestAnimationFrame simulation\n *\n * @param {Number|String} refreshRate\n * @return {Function}\n */\n createRequestAnimationFrame: function(refreshRate) {\n var timeout = null;\n\n // Convert refreshRate to timeout\n if (refreshRate !== \"auto\" && refreshRate < 60 && refreshRate > 1) {\n timeout = Math.floor(1000 / refreshRate);\n }\n\n if (timeout === null) {\n return window.requestAnimationFrame || requestTimeout(33);\n } else {\n return requestTimeout(timeout);\n }\n }\n};\n\n/**\n * Create a callback that will execute after a given timeout\n *\n * @param {Function} timeout\n * @return {Function}\n */\nfunction requestTimeout(timeout) {\n return function(callback) {\n window.setTimeout(callback, timeout);\n };\n}\n","(function() {\r\n\t\r\n\t// VERSION\r\n\tvar version = { major: 0, minor: 3, patch: 4, status: \"beta\" };\r\n\r\n\r\n\r\n\t// IO FILE SYSTEM\r\n\t\r\n\t// Virtual file\r\n\tfunction TauFile(name, type, parent, text) {\r\n\t\ttext = text === undefined ? \"\" : text;\r\n\t\tthis.name = name;\r\n\t\tthis.type = type;\r\n\t\tthis.parent = parent;\r\n\t\tthis.text = text;\r\n\t\tthis.created = Date.now() / 1000;\r\n\t\tthis.modified = this.created;\r\n\t}\r\n\r\n\tTauFile.prototype.get = function(length, position) {\r\n\t\tif(position === this.text.length) {\r\n\t\t\treturn \"end_of_stream\";\r\n\t\t} else if(position > this.text.length) {\r\n\t\t\treturn \"end_of_stream\";\r\n\t\t} else {\r\n\t\t\treturn this.text.substring(position, position+length);\r\n\t\t}\r\n\t};\r\n\r\n\tTauFile.prototype.eof = function(position) {\r\n\t\treturn position === this.text.length;\r\n\t};\r\n\r\n\tTauFile.prototype.put = function(text, position) {\r\n\t\tif(position === \"end_of_stream\") {\r\n\t\t\tthis.text += text;\r\n\t\t\treturn true;\r\n\t\t} else if(position === \"past_end_of_stream\") {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\tthis.text = this.text.substring(0, position) + text + this.text.substring(position+text.length);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};\r\n\r\n\tTauFile.prototype.get_byte = function(position) {\r\n\t\tif(position === \"end_of_stream\")\r\n\t\t\treturn -1;\r\n\t\tvar index = Math.floor(position/2);\r\n\t\tif(this.text.length <= index)\r\n\t\t\treturn -1;\r\n\t\tvar code = codePointAt(this.text[Math.floor(position/2)], 0);\r\n\t\tif(position % 2 === 0)\r\n\t\t\treturn code & 0xff;\r\n\t\telse\r\n\t\t\treturn code / 256 >>> 0;\r\n\t};\r\n\r\n\tTauFile.prototype.put_byte = function(byte, position) {\r\n\t\tvar index = position === \"end_of_stream\" ? this.text.length : Math.floor(position/2);\r\n\t\tif(this.text.length < index)\r\n\t\t\treturn null;\r\n\t\tvar code = this.text.length === index ? -1 : codePointAt(this.text[Math.floor(position/2)], 0);\r\n\t\tif(position % 2 === 0) {\r\n\t\t\tcode = code / 256 >>> 0;\r\n\t\t\tcode = ((code & 0xff) << 8) | (byte & 0xff);\r\n\t\t} else {\r\n\t\t\tcode = code & 0xff;\r\n\t\t\tcode = ((byte & 0xff) << 8) | (code & 0xff);\r\n\t\t}\r\n\t\tif(this.text.length === index)\r\n\t\t\tthis.text += fromCodePoint(code);\r\n\t\telse \r\n\t\t\tthis.text = this.text.substring(0, index) + fromCodePoint(code) + this.text.substring(index+1);\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.flush = function() {\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.close = function() {\r\n\t\tthis.modified = Date.now() / 1000;\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.size = function() {\r\n\t\treturn this.text.length;\r\n\t};\r\n\r\n\t// Virtual directory\r\n\tfunction TauDirectory(name, parent) {\r\n\t\tthis.name = name;\r\n\t\tthis.parent = parent;\r\n\t\tthis.files = {};\r\n\t\tthis.length = 0;\r\n\t\tthis.created = Date.now() / 1000;\r\n\t\tthis.modified = this.created;\r\n\t}\r\n\r\n\tTauDirectory.prototype.lookup = function(file) {\r\n\t\tif(this.files.hasOwnProperty(file))\r\n\t\t\treturn this.files[file];\r\n\t\treturn null;\r\n\t};\r\n\r\n\tTauDirectory.prototype.push = function(name, file) {\r\n\t\tif(!this.files.hasOwnProperty(name))\r\n\t\t\tthis.length++;\r\n\t\tthis.files[name] = file;\r\n\t\tthis.modified = Date.now() / 1000;\r\n\t};\r\n\r\n\tTauDirectory.prototype.remove = function(name) {\r\n\t\tif(this.files.hasOwnProperty(name)) {\r\n\t\t\tthis.length--;\r\n\t\t\tdelete this.files[name];\r\n\t\t\tthis.modified = Date.now() / 1000;\r\n\t\t}\r\n\t};\r\n\r\n\tTauDirectory.prototype.empty = function() {\r\n\t\treturn this.length === 0;\r\n\t};\r\n\r\n\tTauDirectory.prototype.size = function() {\r\n\t\treturn 4096;\r\n\t};\r\n\r\n\t// Virtual file system for browser\r\n\ttau_file_system = {\r\n\t\t// Current files\r\n\t\tfiles: new TauDirectory(\"/\", \"/\", null),\r\n\t\t// Open file\r\n\t\topen: function(path, type, mode) {\r\n\t\t\tvar dirs = path.replace(/\\/$/, \"\").split(\"/\");\r\n\t\t\tvar dir = tau_file_system.files;\r\n\t\t\tvar name = dirs[dirs.length-1];\r\n\t\t\tfor(var i = 1; i < dirs.length-1; i++) {\r\n\t\t\t\tdir = dir.lookup(dirs[i]);\r\n\t\t\t\tif(!pl.type.is_directory(dir))\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tvar file = dir.lookup(name);\r\n\t\t\tif(file === null) {\r\n\t\t\t\tif(mode === \"read\")\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tfile = new TauFile(name, type, dir);\r\n\t\t\t\tdir.push(name, file);\r\n\t\t\t} else if(!pl.type.is_file(file)) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif(mode === \"write\")\r\n\t\t\t\tfile.text = \"\";\r\n\t\t\treturn file;\r\n\t\t},\r\n\t\t// Get item\r\n\t\tget: function(path) {\r\n\t\t\tvar dirs = path.replace(/\\/$/, \"\").split(\"/\");\r\n\t\t\tvar file = tau_file_system.files;\r\n\t\t\tfor(var i = 1; i < dirs.length; i++)\r\n\t\t\t\tif(pl.type.is_directory(file))\r\n\t\t\t\t\tfile = file.lookup(dirs[i]);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn null;\r\n\t\t\treturn file;\r\n\t\t}\r\n\t};\r\n\r\n\t// User input for browser\r\n\ttau_user_input = {\r\n\t\tbuffer: \"\",\r\n\t\tget: function( length, _ ) {\r\n\t\t\tvar text;\r\n\t\t\twhile( tau_user_input.buffer.length < length ) {\r\n\t\t\t\ttext = window.prompt();\r\n\t\t\t\tif( text.length === 0 )\r\n\t\t\t\t\treturn \"end_of_stream\";\r\n\t\t\t\tif( text ) {\r\n\t\t\t\t\ttau_user_input.buffer += text;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttext = tau_user_input.buffer.substr( 0, length );\r\n\t\t\ttau_user_input.buffer = tau_user_input.buffer.substr( length );\r\n\t\t\treturn text;\r\n\t\t},\r\n\t\teof: function(_) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t// User output for browser\r\n\ttau_user_output = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tconsole.log( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\r\n\t// User error for browser\r\n\ttau_user_error = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\t(console.error || console.log)( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\r\n\t// Virtual file system for Node.js\r\n\tnodejs_file_system = {\r\n\t\t// Open file\r\n\t\topen: function( path, type, mode ) {\r\n\t\t\tvar fd, fs = require('fs');\r\n\t\t\tif( mode === \"read\" && !fs.existsSync( path ) )\r\n\t\t\t\treturn null;\r\n\t\t\ttry {\r\n\t\t\t\tfd = fs.openSync( path, mode[0] );\r\n\t\t\t} catch(ex) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tget: function( length, position ) {\r\n\t\t\t\t\tvar buffer = new Buffer( length );\r\n\t\t\t\t\tfs.readSync( fd, buffer, 0, length, position );\r\n\t\t\t\t\tvar end_of_file = true;\r\n\t\t\t\t\tvar text = buffer.toString();\r\n\t\t\t\t\tfor(var i = 0; i < length && end_of_file; i++)\r\n\t\t\t\t\t\tend_of_file = text[i] === \"\\u0000\";\r\n\t\t\t\t\treturn end_of_file ? \"end_of_stream\" : buffer.toString();\r\n\t\t\t\t},\r\n\t\t\t\teof: function(position) {\r\n\t\t\t\t\tvar stats = fs.statSync(path)\r\n\t\t\t\t\treturn position === stats[\"size\"];\r\n\t\t\t\t},\r\n\t\t\t\tput: function( text, position ) {\r\n\t\t\t\t\tvar buffer = Buffer.from( text );\r\n\t\t\t\t\tif( position === \"end_of_stream\" )\r\n\t\t\t\t\t\tfs.writeSync( fd, buffer );\r\n\t\t\t\t\telse if( position === \"past_end_of_stream\" )\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfs.writeSync( fd, buffer, 0, buffer.length, position );\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tget_byte: function( position ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tvar buffer = Buffer.alloc(1);\r\n\t\t\t\t\t\tvar bytesRead = fs.readSync(fd, buffer, 0, 1, position);\r\n\t\t\t\t\t\t//var _text = buffer.toString(\"utf8\", 0, bytesRead);\r\n\t\t\t\t\t\tvar end_of_file = bytesRead < 1;\r\n\t\t\t\t\t\treturn end_of_file ? \"end_of_stream\" : buffer.readUInt8(0);\r\n\t\t\t\t\t} catch(ex) {\r\n\t\t\t\t\t\treturn \"end_of_stream\";\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tput_byte: function(byte, position) {\r\n\t\t\t\t\tvar buffer = Buffer.from([byte]);\r\n\t\t\t\t\tif(position === \"end_of_stream\")\r\n\t\t\t\t\t\tfs.writeSync(fd, buffer);\r\n\t\t\t\t\telse if(position === \"past_end_of_stream\")\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfs.writeSync(fd, buffer, 0, buffer.length, position);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tflush: function() {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tclose: function() {\r\n\t\t\t\t\tfs.closeSync( fd );\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n\r\n\t// User input for Node.js\r\n\tnodejs_user_input = {\r\n\t\tbuffer: \"\",\r\n\t\tget: function( length, _ ) {\r\n\t\t\tvar text;\r\n\t\t\tvar readlineSync = require('readline-sync');\r\n\t\t\twhile( nodejs_user_input.buffer.length < length )\r\n\t\t\t\tnodejs_user_input.buffer += readlineSync.question(\"\", {keepWhitespace: true}) + \"\\n\";\r\n\t\t\ttext = nodejs_user_input.buffer.substr( 0, length );\r\n\t\t\tnodejs_user_input.buffer = nodejs_user_input.buffer.substr( length );\r\n\t\t\treturn text;\r\n\t\t},\r\n\t\teof: function(length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t// User output for Node.js\r\n\tnodejs_user_output = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tprocess.stdout.write( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};\r\n\r\n\t// User error for Node.js\r\n\tnodejs_user_error = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tprocess.stderr.write( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPATITBILITY\r\n\t\r\n\tvar indexOf;\r\n\tif(!Array.prototype.indexOf) {\r\n\t\tindexOf = function(array, elem) {\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\tif(elem === array[i]) return i;\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\t} else {\r\n\t\tindexOf = function(array, elem) {\r\n\t\t\treturn array.indexOf(elem);\r\n\t\t};\r\n\t}\r\n\r\n\tvar reduce = function(array, fn) {\r\n\t\tif(array.length === 0) return undefined;\r\n\t\tvar elem = array[0];\r\n\t\tvar len = array.length;\r\n\t\tfor(var i = 1; i < len; i++) {\r\n\t\t\telem = fn(elem, array[i]);\r\n\t\t}\r\n\t\treturn elem;\r\n\t};\r\n\r\n\tvar map;\r\n\tif(!Array.prototype.map) {\r\n\t\tmap = function(array, fn) {\r\n\t\t\tvar a = [];\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\ta.push( fn(array[i]) );\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t};\r\n\t} else {\r\n\t\tmap = function(array, fn) {\r\n\t\t\treturn array.map(fn);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar filter;\r\n\tif(!Array.prototype.filter) {\r\n\t\tfilter = function(array, fn) {\r\n\t\t\tvar a = [];\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\tif(fn(array[i]))\r\n\t\t\t\t\ta.push( array[i] );\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t};\r\n\t} else {\r\n\t\tfilter = function(array, fn) {\r\n\t\t\treturn array.filter(fn);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar codePointAt;\r\n\tif(!String.prototype.codePointAt) {\r\n\t\tcodePointAt = function(str, i) {\r\n\t\t\treturn str.charCodeAt(i);\r\n\t\t};\r\n\t} else {\r\n\t\tcodePointAt = function(str, i) {\r\n\t\t\treturn str.codePointAt(i);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar fromCodePoint;\r\n\tif(!String.fromCodePoint) {\r\n\t\tfromCodePoint = function() {\r\n\t\t\treturn String.fromCharCode.apply(null, arguments);\r\n\t\t};\r\n\t} else {\r\n\t\tfromCodePoint = function() {\r\n\t\t\treturn String.fromCodePoint.apply(null, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tvar stringLength;\r\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\r\n\tif(Array.from)\r\n\t\tstringLength = function(str) {\r\n\t\t\treturn Array.from(str).length;\r\n\t\t};\r\n\telse\r\n\t\tstringLength = function(str) {\r\n\t\t\treturn str.replace(regexAstralSymbols, '_').length;\r\n\t\t};\r\n\r\n\t\r\n\t\r\n\t// PARSER\r\n\r\n\tvar ERROR = 0;\r\n\tvar SUCCESS = 1;\r\n\r\n\tvar regex_escape = /(\\\\a)|(\\\\b)|(\\\\d)|(\\\\e)|(\\\\f)|(\\\\n)|(\\\\r)|(\\\\s)|(\\\\t)|(\\\\v)|\\\\x([0-9a-fA-F]+)\\\\|\\\\([0-7]+)\\\\|(\\\\\\\\)|(\\\\')|('')|(\\\\\")|(\\\\`)|(\\\\.)|(.)/g;\r\n\tvar escape_map = {\"\\\\a\": 7, \"\\\\b\": 8, \"\\\\d\": 127, \"\\\\e\": 27, \"\\\\f\": 12, \"\\\\n\": 10, \"\\\\r\": 13, \"\\\\s\": 32, \"\\\\t\": 9, \"\\\\v\": 11};\r\n\tfunction escape(str) {\r\n\t\tvar stack = [];\r\n\t\tvar _error = false;\r\n\t\tstr.replace(regex_escape, function(match, a, b, d, e, f, n, r, s, t, v, hex, octal, back, single, dsingle, double, backquote, error, char) {\r\n\t\t\tswitch(true) {\r\n\t\t\t\tcase hex !== undefined:\r\n\t\t\t\t\tstack.push( parseInt(hex, 16) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase octal !== undefined:\r\n\t\t\t\t\tstack.push( parseInt(octal, 8) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase back !== undefined:\r\n\t\t\t\tcase single !== undefined:\r\n\t\t\t\tcase dsingle !== undefined:\r\n\t\t\t\tcase double !== undefined:\r\n\t\t\t\tcase backquote !== undefined:\r\n\t\t\t\t\tstack.push( codePointAt(match.substr(1),0) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase char !== undefined:\r\n\t\t\t\t\tstack.push( codePointAt(char,0) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase error !== undefined:\r\n\t\t\t\t\t_error = true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tstack.push(escape_map[match]);\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(_error)\r\n\t\t\treturn null;\r\n\t\treturn stack;\r\n\t}\r\n\r\n\t// Escape atoms\r\n\tfunction escapeAtom(str, quote) {\r\n\t\tvar atom = '';\r\n\t\tif( str === \"\\\\\" ) return null;\r\n\t\tif( str.length < 2 ) return str;\r\n\t\ttry {\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\([0-7]+)\\\\/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 8));\r\n\t\t\t});\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\x([0-9a-fA-F]+)\\\\/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 16));\r\n\t\t\t});\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\u([0-9a-fA-F]{4})/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 16));\r\n\t\t\t});\r\n\t\t} catch(error) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tfor( var i = 0; i < str.length; i++) {\r\n\t\t\tvar a = str.charAt(i);\r\n\t\t\tvar b = str.charAt(i+1);\r\n\t\t\tif( a === quote && b === quote ) {\r\n\t\t\t\ti++;\r\n\t\t\t\tatom += quote;\r\n\t\t\t} else if( a === '\\\\' ) {\r\n\t\t\t\tif( ['a','b','f','n','r','t','v',\"'\",'\"','\\\\','\\a','\\b','\\f','\\n','\\r','\\t','\\v'].indexOf(b) !== -1 ) {\r\n\t\t\t\t\ti += 1;\r\n\t\t\t\t\tswitch( b ) {\r\n\t\t\t\t\t\tcase 'a': atom += '\\a'; break;\r\n\t\t\t\t\t\tcase 'b': atom += '\\b'; break;\r\n\t\t\t\t\t\tcase 'f': atom += '\\f'; break;\r\n\t\t\t\t\t\tcase 'n': atom += '\\n'; break;\r\n\t\t\t\t\t\tcase 'r': atom += '\\r'; break;\r\n\t\t\t\t\t\tcase 't': atom += '\\t'; break;\r\n\t\t\t\t\t\tcase 'v': atom += '\\v'; break;\r\n\t\t\t\t\t\tcase \"'\": atom += \"'\"; break;\r\n\t\t\t\t\t\tcase '\"': atom += '\"'; break;\r\n\t\t\t\t\t\tcase '\\\\': atom += '\\\\'; break;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tatom += a;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn atom;\r\n\t}\r\n\t\r\n\t// Redo escape\r\n\tfunction redoEscape(str) {\r\n\t\tvar atom = '';\r\n\t\tfor( var i = 0; i < str.length; i++) {\r\n\t\t\tswitch( str.charAt(i) ) {\r\n\t\t\t\tcase \"'\": atom += \"\\\\'\"; break;\r\n\t\t\t\tcase '\\\\': atom += '\\\\\\\\'; break;\r\n\t\t\t\t//case '\\a': atom += '\\\\a'; break;\r\n\t\t\t\tcase '\\b': atom += '\\\\b'; break;\r\n\t\t\t\tcase '\\f': atom += '\\\\f'; break;\r\n\t\t\t\tcase '\\n': atom += '\\\\n'; break;\r\n\t\t\t\tcase '\\r': atom += '\\\\r'; break;\r\n\t\t\t\tcase '\\t': atom += '\\\\t'; break;\r\n\t\t\t\tcase '\\v': atom += '\\\\v'; break;\r\n\t\t\t\tdefault: atom += str.charAt(i); break;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn atom;\r\n\t}\r\n\r\n\t// String to num\r\n\tfunction convertNum(num) {\r\n\t\tvar n = num.substr(2);\r\n\t\tswitch(num.substr(0,2).toLowerCase()) {\r\n\t\t\tcase \"0x\":\r\n\t\t\t\treturn parseInt(n, 16);\r\n\t\t\tcase \"0b\":\r\n\t\t\t\treturn parseInt(n, 2);\r\n\t\t\tcase \"0o\":\r\n\t\t\t\treturn parseInt(n, 8);\r\n\t\t\tcase \"0'\":\r\n\t\t\t\treturn escape(n)[0];\r\n\t\t\tdefault:\r\n\t\t\t\treturn parseFloat(num);\r\n\t\t}\r\n\t}\r\n\r\n\t// Is graphic token\r\n\tfunction is_graphic_token(string) {\r\n\t\treturn /^[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+/.test(string);\r\n\t}\r\n\r\n\t// Regular expressions for tokens\r\n\tvar rules = {\r\n\t\twhitespace: /^\\s*(?:(?:%.*)|(?:\\/\\*(?:\\n|\\r|.)*?(?:\\*\\/|$))|(?:\\s+))\\s*/,\r\n\t\tvariable: /^(?:[A-Z_][a-zA-Z0-9_]*)/,\r\n\t\tatom: /^(\\!|,|;|[a-z][0-9a-zA-Z_]*|[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+|'(?:(?:'')|(?:\\\\\\\\)|(?:\\\\')|[^'])*')/,\r\n\t\tnumber: /^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\\\[abdefnrstv\\\\'\"`]|\\\\x?\\d+\\\\|[^\\\\])|\\d+(?:\\.\\d+(?:[eE][+-]?\\d+)?)?)/,\r\n\t\tstring: /^(?:\"([^\"]|\"\"|\\\\\")*\"|`([^`]|``|\\\\`)*`)/,\r\n\t\tl_brace: /^(?:\\[)/,\r\n\t\tr_brace: /^(?:\\])/,\r\n\t\tl_bracket: /^(?:\\{)/,\r\n\t\tr_bracket: /^(?:\\})/,\r\n\t\tbar: /^(?:\\|)/,\r\n\t\tl_paren: /^(?:\\()/,\r\n\t\tr_paren: /^(?:\\))/\r\n\t};\r\n\r\n\t// Replace chars of char_conversion session\r\n\tfunction replace( thread, text ) {\r\n\t\tif( thread.get_flag( \"char_conversion\" ).id === \"on\" ) {\r\n\t\t\treturn text.replace(/./g, function(char) {\r\n\t\t\t\treturn thread.get_char_conversion( char );\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn text;\r\n\t}\r\n\r\n\t// Tokenize strings\r\n\tfunction Tokenizer(thread) {\r\n\t\tthis.thread = thread;\r\n\t\tthis.text = \"\"; // Current text to be analized\r\n\t\tthis.tokens = []; // Consumed tokens\r\n\t}\r\n\r\n\tTokenizer.prototype.set_last_tokens = function(tokens) {\r\n\t\treturn this.tokens = tokens;\r\n\t};\r\n\r\n\tTokenizer.prototype.new_text = function(text) {\r\n\t\tthis.text = text;\r\n\t\tthis.tokens = [];\r\n\t};\r\n\r\n\tTokenizer.prototype.get_tokens = function(init) {\r\n\t\tvar text;\r\n\t\tvar len = 0; // Total length respect to text\r\n\t\tvar line = 0;\r\n\t\tvar start = 0;\r\n\t\tvar tokens = [];\r\n\t\tvar last_is_blank;\r\n\r\n\t\tif(init) {\r\n\t\t\tvar token = this.tokens[init-1];\r\n\t\t\tlen = token.len;\r\n\t\t\ttext = replace( this.thread, this.text.substr(token.len) );\r\n\t\t\tline = token.line;\r\n\t\t\tstart = token.start;\r\n\t\t}\r\n\t\telse\r\n\t\t\ttext = this.text;\r\n\r\n\r\n\t\t// If there is nothing to be analized, return null\r\n\t\tif(/^\\s*$/.test(text))\r\n\t\t\treturn null;\r\n\r\n\t\twhile(text !== \"\") {\r\n\t\t\tvar matches = [];\r\n\t\t\tlast_is_blank = false;\r\n\r\n\t\t\tif(/^\\n/.exec(text) !== null) {\r\n\t\t\t\tline++;\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tlen++;\r\n\t\t\t\ttext = text.replace(/\\n/, \"\");\r\n\t\t\t\tlast_is_blank = true;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var rule in rules) {\r\n\t\t\t\tif(rules.hasOwnProperty(rule)) {\r\n\t\t\t\t\tvar matchs = rules[rule].exec( text );\r\n\t\t\t\t\tif(matchs) {\r\n\t\t\t\t\t\tmatches.push({\r\n\t\t\t\t\t\t\tvalue: matchs[0],\r\n\t\t\t\t\t\t\tname: rule,\r\n\t\t\t\t\t\t\tmatches: matchs\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Lexical error\r\n\t\t\tif(!matches.length)\r\n\t\t\t\treturn this.set_last_tokens( [{ value: text, matches: [], name: \"lexical\", line: line, start: start }] );\r\n\r\n\t\t\tvar token = reduce( matches, function(a, b) {\r\n\t\t\t\treturn a.value.length >= b.value.length ? a : b;\r\n\t\t\t} );\r\n\r\n\t\t\ttoken.start = start;\r\n\t\t\ttoken.line = line;\r\n\r\n\t\t\ttext = text.replace(token.value, \"\");\r\n\t\t\tstart += token.value.length;\r\n\t\t\tlen += token.value.length;\r\n\r\n\t\t\tvar nl = (token.value.match(/\\n/g) || []).length;\r\n\t\t\tline += nl;\r\n\t\t\tif(nl > 0) \r\n\t\t\t\tstart = token.value.length - token.value.lastIndexOf(\"\\n\") - 1;\r\n\t\t\ttoken.line_count = line;\r\n\t\t\ttoken.line_position = start;\r\n\r\n\t\t\tswitch(token.name) {\r\n\t\t\t\tcase \"atom\":\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\tif(token.value.charAt(0) === \"'\") {\r\n\t\t\t\t\t\ttoken.value = escapeAtom( token.value.substring(1, token.value.length - 1), \"'\" );\r\n\t\t\t\t\t\tif( token.value === null ) {\r\n\t\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\t\ttoken.error = \"unknown_escape_sequence\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"number\":\r\n\t\t\t\t\tvar substr = token.value.substring(0,2);\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\ttoken.float = substr !== \"0x\" && substr !== \"0'\" && token.value.match(/[.eE]/) !== null;\r\n\t\t\t\t\ttoken.value = convertNum( token.value );\r\n\t\t\t\t\ttoken.blank = last_is_blank;\r\n\t\t\t\t\tif(!token.float && pl.flag.bounded.value.indicator === \"true/0\" && token.value > pl.flag.max_integer.value.value) {\r\n\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\ttoken.error = \"int_overflow\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tvar del = token.value.charAt(0);\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\ttoken.value = escapeAtom( token.value.substring(1, token.value.length - 1), del );\r\n\t\t\t\t\tif( token.value === null ) {\r\n\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\ttoken.error = \"unknown_escape_sequence\"\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"whitespace\":\r\n\t\t\t\t\tvar last = tokens[tokens.length-1];\r\n\t\t\t\t\tif(last) last.space = true;\r\n\t\t\t\t\tlast_is_blank = true;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase \"r_bracket\":\r\n\t\t\t\t\tif( tokens.length > 0 && tokens[tokens.length-1].name === \"l_bracket\" ) {\r\n\t\t\t\t\t\ttoken = tokens.pop();\r\n\t\t\t\t\t\ttoken.name = \"atom\";\r\n\t\t\t\t\t\ttoken.value = \"{}\";\r\n\t\t\t\t\t\ttoken.raw = \"{}\";\r\n\t\t\t\t\t\ttoken.space = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"r_brace\":\r\n\t\t\t\t\tif( tokens.length > 0 && tokens[tokens.length-1].name === \"l_brace\" ) {\r\n\t\t\t\t\t\ttoken = tokens.pop();\r\n\t\t\t\t\t\ttoken.name = \"atom\";\r\n\t\t\t\t\t\ttoken.value = \"[]\";\r\n\t\t\t\t\t\ttoken.raw = \"[]\";\r\n\t\t\t\t\t\ttoken.space = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\ttoken.len = len;\r\n\t\t\ttokens.push( token );\r\n\t\t\tlast_is_blank = false;\r\n\t\t}\r\n\r\n\t\tvar t = this.set_last_tokens( tokens );\r\n\t\treturn t.length === 0 ? null : t;\r\n\t};\r\n\r\n\t// Parse an expression\r\n\tfunction parseExpr(thread, tokens, start, priority, toplevel) {\r\n\t\tif(!tokens[start]) return {type: ERROR, value: pl.error.syntax(tokens[start-1], \"expression expected\", true)};\r\n\t\tvar error;\r\n\r\n\t\tif(priority === \"0\") {\r\n\t\t\tvar token = tokens[start];\r\n\t\t\tswitch(token.name) {\r\n\t\t\t\tcase \"number\":\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Num(token.value, token.float)};\r\n\t\t\t\tcase \"variable\":\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Var(token.value)};\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tvar str;\r\n\t\t\t\t\tswitch( thread.get_flag( \"double_quotes\" ).id ) {\r\n\t\t\t\t\t\tcase \"atom\":;\r\n\t\t\t\t\t\t\tstr = new Term( token.value, [] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"codes\":\r\n\t\t\t\t\t\t\tstr = new Term( \"[]\", [] );\r\n\t\t\t\t\t\t\tfor(var i = token.value.length-1; i >= 0; i-- )\r\n\t\t\t\t\t\t\t\tstr = new Term( \".\", [new pl.type.Num( codePointAt(token.value,i), false ), str] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"chars\":\r\n\t\t\t\t\t\t\tstr = new Term( \"[]\", [] );\r\n\t\t\t\t\t\t\tfor(var i = token.value.length-1; i >= 0; i-- )\r\n\t\t\t\t\t\t\t\tstr = new Term( \".\", [new pl.type.Term( token.value.charAt(i), [] ), str] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: str};\r\n\t\t\t\tcase \"l_paren\":\r\n\t\t\t\t\tvar expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true);\r\n\t\t\t\t\tif(expr.type !== SUCCESS) return expr;\r\n\t\t\t\t\tif(tokens[expr.len] && tokens[expr.len].name === \"r_paren\") {\r\n\t\t\t\t\t\texpr.len++;\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], \") or operator expected\", !tokens[expr.len])}\r\n\t\t\t\tcase \"l_bracket\":\r\n\t\t\t\t\tvar expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true);\r\n\t\t\t\t\tif(expr.type !== SUCCESS) return expr;\r\n\t\t\t\t\tif(tokens[expr.len] && tokens[expr.len].name === \"r_bracket\") {\r\n\t\t\t\t\t\texpr.len++;\r\n\t\t\t\t\t\texpr.value = new Term( \"{}\", [expr.value] );\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], \"} or operator expected\", !tokens[expr.len])}\r\n\t\t\t}\r\n\t\t\t// Compound term\r\n\t\t\tvar result = parseTerm(thread, tokens, start, toplevel);\r\n\t\t\tif(result.type === SUCCESS || result.derived)\r\n\t\t\t\treturn result;\r\n\t\t\t// List\r\n\t\t\tresult = parseList(thread, tokens, start);\r\n\t\t\tif(result.type === SUCCESS || result.derived)\r\n\t\t\t\treturn result;\r\n\t\t\t// Unexpected\r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], token.error || \"unexpected token\")};\r\n\t\t}\r\n\r\n\t\tvar max_priority = thread.__get_max_priority();\r\n\t\tvar next_priority = thread.__get_next_priority(priority);\r\n\t\tvar aux_start = start;\r\n\t\t\r\n\t\t// Prefix operators\r\n\t\tif(tokens[start].name === \"atom\" && tokens[start+1] && (tokens[start].space || tokens[start+1].name !== \"l_paren\")) {\r\n\t\t\tvar token = tokens[start++];\r\n\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\t\t\t\r\n\t\t\t// Associative prefix operator\r\n\t\t\tif(classes && classes.indexOf(\"fy\") > -1) {\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, start, priority, toplevel);\r\n\t\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\t\tif( token.value === \"-\" && !token.space && pl.type.is_number( expr.value ) ) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Num(-expr.value.value, expr.value.is_float),\r\n\t\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = expr;\r\n\t\t\t\t}\r\n\t\t\t// Non-associative prefix operator\r\n\t\t\t} else if(classes && classes.indexOf(\"fx\") > -1) {\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, start, next_priority, toplevel);\r\n\t\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t};\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = expr;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tstart = aux_start;\r\n\t\tvar expr = parseExpr(thread, tokens, start, next_priority, toplevel);\r\n\t\tif(expr.type === SUCCESS) {\r\n\t\t\tstart = expr.len;\r\n\t\t\tvar token = tokens[start];\r\n\t\t\tif(tokens[start] && (\r\n\t\t\t\ttokens[start].name === \"atom\" && thread.__lookup_operator_classes(priority, token.value) ||\r\n\t\t\t\ttokens[start].name === \"bar\" && thread.__lookup_operator_classes(priority, \"|\")\r\n\t\t\t) ) {\r\n\t\t\t\tvar next_priority_lt = next_priority;\r\n\t\t\t\tvar next_priority_eq = priority;\r\n\t\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\r\n\t\t\t\tif(classes.indexOf(\"xf\") > -1) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\tlen: ++expr.len,\r\n\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t};\r\n\t\t\t\t} else if(classes.indexOf(\"xfx\") > -1) {\r\n\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, start + 1, next_priority_lt, toplevel);\r\n\t\t\t\t\tif(expr2.type === SUCCESS) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\tlen: expr2.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(classes.indexOf(\"xfy\") > -1) {\r\n\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, start + 1, next_priority_eq, toplevel);\r\n\t\t\t\t\tif(expr2.type === SUCCESS) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\tlen: expr2.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(expr.type !== ERROR) {\r\n\t\t\t\t\twhile(true) {\r\n\t\t\t\t\t\tstart = expr.len;\r\n\t\t\t\t\t\tvar token = tokens[start];\r\n\t\t\t\t\t\tif(token && token.name === \"atom\" && thread.__lookup_operator_classes(priority, token.value)) {\r\n\t\t\t\t\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\t\t\t\t\t\t\tif( classes.indexOf(\"yf\") > -1 ) {\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\t\t\t\tlen: ++start,\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t} else if( classes.indexOf(\"yfx\") > -1 ) {\r\n\t\t\t\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, ++start, next_priority_lt, toplevel);\r\n\t\t\t\t\t\t\t\tif(expr2.type === ERROR) {\r\n\t\t\t\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstart = expr2.len;\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t} else { break; }\r\n\t\t\t\t\t\t} else { break; }\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\terror = {type: ERROR, value: pl.error.syntax(tokens[expr.len-1], \"operator expected\")};\r\n\t\t\t}\r\n\t\t\treturn expr;\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\r\n\t// Parse a compound term\r\n\tfunction parseTerm(thread, tokens, start, toplevel) {\r\n\t\tif(!tokens[start] || (tokens[start].name === \"atom\" && tokens[start].raw === \".\" && !toplevel && (tokens[start].space || !tokens[start+1] || tokens[start+1].name !== \"l_paren\")))\r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], \"unfounded token\")};\r\n\t\tvar atom = tokens[start];\r\n\t\tvar exprs = [];\r\n\t\tif(tokens[start].name === \"atom\" && tokens[start].raw !== \",\") {\r\n\t\t\tstart++;\r\n\t\t\tif(tokens[start-1].space) return {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)};\r\n\t\t\tif(tokens[start] && tokens[start].name === \"l_paren\") {\r\n\t\t\t\tif(tokens[start+1] && tokens[start+1].name === \"r_paren\") \r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1], \"argument expected\")};\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, ++start, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \"argument expected\", !tokens[start])};\r\n\t\t\t\t}\r\n\t\t\t\texprs.push(expr.value);\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t\twhile(tokens[start] && tokens[start].name === \"atom\" && tokens[start].value === \",\") {\r\n\t\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t\t}\r\n\t\t\t\t\texprs.push(expr.value);\r\n\t\t\t\t\tstart = expr.len;\r\n\t\t\t\t}\r\n\t\t\t\tif(tokens[start] && tokens[start].name === \"r_paren\") start++;\r\n\t\t\t\telse return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \", or ) expected\", !tokens[start])};\r\n\t\t\t}\r\n\t\t\treturn {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)};\r\n\t\t}\r\n\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], \"term expected\")};\r\n\t}\r\n\r\n\t// Parse a list\r\n\tfunction parseList(thread, tokens, start) {\r\n\t\tif(!tokens[start]) \r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], \"[ expected\")};\r\n\t\tif(tokens[start] && tokens[start].name === \"l_brace\") {\r\n\t\t\tvar expr = parseExpr(thread, tokens, ++start, \"999\", true);\r\n\t\t\tvar exprs = [expr.value];\r\n\t\t\tvar cons = undefined;\r\n\r\n\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\tif(tokens[start] && tokens[start].name === \"r_brace\") {\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Term(\"[]\", [])};\r\n\t\t\t\t}\r\n\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start], \"] expected\")};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tstart = expr.len;\r\n\r\n\t\t\twhile(tokens[start] && tokens[start].name === \"atom\" && tokens[start].value === \",\") {\r\n\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t}\r\n\t\t\t\texprs.push(expr.value);\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t}\r\n\t\t\tvar bar = false\r\n\t\t\tif(tokens[start] && tokens[start].name === \"bar\") {\r\n\t\t\t\tbar = true;\r\n\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t}\r\n\t\t\t\tcons = expr.value;\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t}\r\n\t\t\tif(tokens[start] && tokens[start].name === \"r_brace\")\r\n\t\t\t\treturn {type: SUCCESS, len: start+1, value: arrayToList(exprs, cons) };\r\n\t\t\telse\r\n\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], bar ? \"] expected\" : \", or | or ] expected\", !tokens[start])};\r\n\t\t}\r\n\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], \"list expected\")};\r\n\t}\r\n\r\n\t// Parse a rule\r\n\tfunction parseRule(thread, tokens, start) {\r\n\t\tvar line = tokens[start].line;\r\n\t\tvar expr = parseExpr(thread, tokens, start, thread.__get_max_priority(), false);\r\n\t\tvar rule = null;\r\n\t\tvar obj;\r\n\t\tif(expr.type !== ERROR) {\r\n\t\t\tstart = expr.len;\r\n\t\t\tif(tokens[start] && tokens[start].name === \"atom\" && tokens[start].raw === \".\") {\r\n\t\t\t\tstart++;\r\n\t\t\t\tif( pl.type.is_term(expr.value) ) {\r\n\t\t\t\t\tif(expr.value.indicator === \":-/2\") {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1]));\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else if(expr.value.indicator === \"-->/2\") {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1]));\r\n\t\t\t\t\t\trule = rule_to_dcg(rule, thread);\r\n\t\t\t\t\t\trule.body = body_conversion(rule.body);\r\n\t\t\t\t\t\tif(!pl.type.is_rule(rule))\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\t\ttype: ERROR\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: pl.type.is_rule( rule ) ? SUCCESS : ERROR\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value, null);\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( rule ) {\r\n\t\t\t\t\t\tvar singleton = rule.singleton_variables();\r\n\t\t\t\t\t\tif( singleton.length > 0 )\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.warning.singleton( singleton, rule.head.indicator, line ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn obj;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn { type: ERROR, value: pl.error.syntax(tokens[start], \"callable expected\") };\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn { type: ERROR, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \". or operator expected\") };\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\r\n\t// Parse a program\r\n\tfunction parseProgram(thread, string, options) {\r\n\t\tvar opts = {};\r\n\t\toptions = options ? options : {};\r\n\t\topts.success = options.success ? options.success : function(){};\r\n\t\topts.error = options.error ? options.error : function(){};\r\n\t\topts.from = options.from ? options.from : \"$tau-js\";\r\n\t\topts.reconsult = options.reconsult !== undefined ? options.reconsult : true;\r\n\t\topts.reconsulted = options.reconsulted === undefined ? {} : options.reconsulted;\r\n\t\topts.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\topts.initialization = options.initialization === undefined ? [] : options.initialization;\r\n\t\topts.current_token = options.current_token === undefined ? 0 : options.current_token;\r\n\t\topts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer;\r\n\t\topts.tokens = options.tokens === undefined ? null : options.tokens;\r\n\t\topts.string = string;\r\n\t\topts.term_expansion = false;\r\n\t\tvar reconsulted = opts.reconsulted;\r\n\t\tvar tokenizer = opts.tokenizer;\r\n\t\tvar tokens = opts.tokens;\r\n\t\tif(tokenizer === null) {\r\n\t\t\ttokenizer = new Tokenizer(thread);\r\n\t\t\ttokenizer.new_text(string);\r\n\t\t\topts.tokenizer = tokenizer;\r\n\t\t\ttokens = tokenizer.get_tokens(0);\r\n\t\t\topts.tokens = tokens;\r\n\t\t}\r\n\t\tvar n = opts.current_token;\r\n\t\twhile(tokens !== null && tokens[n]) {\r\n\t\t\tvar expr = parseRule(thread, tokens, n);\r\n\t\t\topts.current_token = expr.len;\r\n\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\tif(opts.error !== undefined)\r\n\t\t\t\topts.error(new Term(\"throw\", [expr.value]));\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\t// Term expansion\r\n\t\t\t\tvar context_module = opts.context_module;\r\n\t\t\t\tvar term_expansion = thread.session.modules[context_module].rules[\"term_expansion/2\"];\r\n\t\t\t\tif(term_expansion && term_expansion.length > 0) {\r\n\t\t\t\t\topts.term_expansion = true;\r\n\t\t\t\t\tvar n_thread = new Thread(thread.session);\r\n\t\t\t\t\tvar term = expr.value.body ? new Term(\":-\", [expr.value.head, expr.value.body]) : expr.value.head;\r\n\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\tterm = term.rename(thread.session);\r\n\t\t\t\t\tn_thread.query(context_module + \":term_expansion(\" + term.toString({quoted: true}) + \", X).\");\r\n\t\t\t\t\tn_thread.answer((function(thread, opts, reconsulted, expr) {\r\n\t\t\t\t\t\treturn function(answer) {\r\n\t\t\t\t\t\t\tif(answer && !pl.type.is_error(answer) && pl.type.is_term(answer.links['X'])) {\r\n\t\t\t\t\t\t\t\tvar term = answer.links['X'];\r\n\t\t\t\t\t\t\t\tvar rule = term.indicator === \":-/2\" ? new Rule(term.args[0], term.args[1]) : new Rule(term, null);\r\n\t\t\t\t\t\t\t\tparseProgramExpansion(thread, opts, reconsulted, {value: rule, len: expr.len, type: expr.type});\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tparseProgramExpansion(thread, opts, reconsulted, expr);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})(thread, opts, reconsulted, expr));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\topts.term_expansion = false;\r\n\t\t\t\t\tvar async = parseProgramExpansion(thread, opts, reconsulted, expr);\r\n\t\t\t\t\tif(async)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\tn = expr.len;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// run goals from initialization/1 directive\r\n\t\tvar callback = opts.success;\r\n\t\tvar nthread = new Thread(thread.session);\r\n\t\tfor(var i = opts.initialization.length-1; i > 0; i--) {\r\n\t\t\tvar next_callback = (function(init, callback) {\r\n\t\t\t\treturn function(answer) {\r\n\t\t\t\t\tif(answer === null) {\r\n\t\t\t\t\t\tnthread.answer();\r\n\t\t\t\t\t} else if(pl.type.is_error(answer)) {\r\n\t\t\t\t\t\topts.error(answer);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnthread.add_goal(init);\r\n\t\t\t\t\t\tnthread.answer(callback);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t})(opts.initialization[i], callback);\r\n\t\t\tcallback = next_callback;\r\n\t\t}\r\n\t\tif(opts.initialization.length > 0) {\r\n\t\t\tnthread.add_goal(opts.initialization[0]);\r\n\t\t\tnthread.answer(callback);\r\n\t\t} else {\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseGoalExpansion(thread, options, expr) {\r\n\t\tvar n_thread = new Thread( thread.session );\r\n\t\tn_thread.__goal_expansion = true;\r\n\t\tvar varterm = thread.next_free_variable();\r\n\t\tvar varhead = thread.next_free_variable();\r\n\t\tvar goal = varhead + \" = \" + expr.value.head + \", goal_expansion(\" + expr.value.body.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \", \" + varterm.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \").\";\r\n\t\tn_thread.query(goal);\r\n\t\tn_thread.answer(function(answer) {\r\n\t\t\tif(answer && !pl.type.is_error(answer) && answer.links[varterm]) {\r\n\t\t\t\texpr.value.head = answer.links[varhead];\r\n\t\t\t\texpr.value.body = body_conversion(answer.links[varterm]);\r\n\t\t\t\tparseGoalExpansion(thread, options, expr);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_rule(expr.value, options);\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction parseQueryExpansion(thread, term, options) {\r\n\t\tvar n_thread = new Thread(thread.session);\r\n\t\tn_thread.__goal_expansion = true;\r\n\t\tvar varterm = thread.next_free_variable();\r\n\t\tvar goal = \"goal_expansion(\" + term.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \", \" + varterm.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \").\";\r\n\t\tn_thread.query(goal);\r\n\t\tvar variables = n_thread.head_point().substitution.domain();\r\n\t\tn_thread.answer(function(answer) {\r\n\t\t\tif(answer && !pl.type.is_error(answer) && answer.links[varterm]) {\r\n\t\t\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\t\t\tif(variables[i] !== varterm.id && answer.links[variables[i]]) {\r\n\t\t\t\t\t\tvar subs = new Substitution();\r\n\t\t\t\t\t\tsubs.links[answer.links[variables[i]]] = variables[i];\r\n\t\t\t\t\t\tanswer.links[varterm] = answer.links[varterm].apply( subs );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tparseQueryExpansion(thread, body_conversion(answer.links[varterm]), options);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_goal(term);\r\n\t\t\t\toptions.success(term);\r\n\t\t\t\tparseQuery(thread, options.string, options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction parseProgramExpansion(thread, options, reconsulted, expr) {\r\n\t\tvar async = options.term_expansion === true;\r\n\t\tif(expr.value.body === null && expr.value.head.indicator === \"?-/1\") {\r\n\t\t\tasync = true;\r\n\t\t\tvar n_thread = new Thread(thread.session);\r\n\t\t\tn_thread.add_goal(expr.value.head.args[0]);\r\n\t\t\tn_thread.answer(function(answer) {\r\n\t\t\t\tif(pl.type.is_error(answer)) {\r\n\t\t\t\t\tthread.throw_warning(answer.args[0]);\r\n\t\t\t\t} else if(answer === false || answer === null) {\r\n\t\t\t\t\tthread.throw_warning(pl.warning.failed_goal(expr.value.head.args[0], expr.len));\r\n\t\t\t\t}\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t});\r\n\t\t} else if(expr.value.body === null && expr.value.head.indicator === \":-/1\") {\r\n\t\t\tvar result = thread.run_directive(expr.value.head.args[0], options);\r\n\t\t\tasync = async || (result === true);\r\n\t\t\tif(async)\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t} else {\r\n\t\t\tvar context_module = options.context_module;\r\n\t\t\tvar indicator = expr.value.head.indicator;\r\n\t\t\tif(expr.value.head.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = expr.value.head.args[0].id;\r\n\t\t\t\tindicator = expr.value.head.args[1].indicator;\r\n\t\t\t}\r\n\t\t\tif(!reconsulted.hasOwnProperty(context_module))\r\n\t\t\t\treconsulted[context_module] = {};\r\n\t\t\tif(options.reconsult !== false && reconsulted[context_module][indicator] !== true && !thread.is_multifile_predicate(indicator)) {\r\n\t\t\t\tvar get_module = thread.session.modules[context_module];\r\n\t\t\t\tif(context_module !== \"system\" && get_module && get_module.rules[indicator]) {\r\n\t\t\t\t\tget_module.rules[indicator] = filter(get_module.rules[indicator], function(rule) {\r\n\t\t\t\t\t\treturn rule.dynamic;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tget_module.update_indices_predicate(indicator);\r\n\t\t\t\t}\r\n\t\t\t\treconsulted[context_module][indicator] = true;\r\n\t\t\t}\r\n\t\t\tvar goal_expansion = thread.session.modules.user.rules[\"goal_expansion/2\"];\r\n\t\t\tif(expr.value.body !== null && goal_expansion && goal_expansion.length > 0) {\r\n\t\t\t\tasync = true;\r\n\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\tvar origin = {\r\n\t\t\t\t\thead: function() { return expr.value.head; },\r\n\t\t\t\t\tterm: function() { return expr.value.body; },\r\n\t\t\t\t\tset: function(h, p){\r\n\t\t\t\t\t\texpr.value.head = h;\r\n\t\t\t\t\t\texpr.value.body = p;\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tparseGoalExpansion(thread, options, expr, body_conversion(expr.value.body), origin.set, origin);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_rule(expr.value, options);\r\n\t\t\t\tif(async)\r\n\t\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn async;\r\n\t}\r\n\t\r\n\t// Parse a query\r\n\tfunction parseQuery(thread, string, options) {\r\n\t\tvar opts = {};\r\n\t\tvar callback = typeof options === \"function\" ? options : function(){};\r\n\t\toptions = options === undefined || typeof options === \"function\" ? {} : options;\r\n\t\topts.success = options.success === undefined ? callback : options.success;\r\n\t\topts.error = options.error === undefined ? callback : options.error;\r\n\t\topts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer;\r\n\t\topts.current_token = options.current_token === undefined ? 0 : options.current_token;\r\n\t\topts.string = string;\r\n\t\tvar tokenizer = opts.tokenizer;\r\n\t\tvar n = opts.current_token;\r\n\t\tif(tokenizer === null) {\r\n\t\t\ttokenizer = new Tokenizer(thread);\r\n\t\t\topts.tokenizer = tokenizer;\r\n\t\t\ttokenizer.new_text(string);\r\n\t\t}\r\n\t\tdo {\r\n\t\t\tvar tokens = tokenizer.get_tokens(n);\r\n\t\t\tif(tokens === null)\r\n\t\t\t\tbreak;\r\n\t\t\tvar expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false);\r\n\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\tvar expr_position = expr.len;\r\n\t\t\t\tn = expr.len + 1;\r\n\t\t\t\topts.current_token = n;\r\n\t\t\t\tif(tokens[expr_position] && tokens[expr_position].name === \"atom\" && tokens[expr_position].raw === \".\") {\r\n\t\t\t\t\texpr.value = body_conversion(expr.value);\r\n\t\t\t\t\t// Goal expansion\r\n\t\t\t\t\tvar goal_expansion = thread.session.modules.user.rules[\"goal_expansion/2\"];\r\n\t\t\t\t\tif(!thread.__goal_expansion && goal_expansion && goal_expansion.length > 0) {\r\n\t\t\t\t\t\tparseQueryExpansion(thread, expr.value, opts);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.add_goal(expr.value);\r\n\t\t\t\t\t\topts.success(expr.value);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar token = tokens[expr_position];\r\n\t\t\t\t\topts.error(\r\n\t\t\t\t\t\tnew Term(\"throw\", [\r\n\t\t\t\t\t\t\tpl.error.syntax(\r\n\t\t\t\t\t\t\t\ttoken ? token : tokens[expr_position-1],\r\n\t\t\t\t\t\t\t\ttoken && token.error ? token.error : \". or operator expected\",\r\n\t\t\t\t\t\t\t\t!token\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t])\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\topts.error(new Term(\"throw\", [expr.value]));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} while(true);\r\n\t}\r\n\r\n\r\n\t\r\n\t// UTILS\r\n\r\n\t// Rule to DCG\r\n\tfunction rule_to_dcg(rule, thread) {\r\n\t\tthread.session.renamed_variables = {};\r\n\t\trule = rule.rename(thread);\r\n\t\tvar begin = thread.next_free_variable();\r\n\t\tvar dcg = body_to_dcg( rule.body, begin, thread );\r\n\t\tif( dcg.error )\r\n\t\t\treturn dcg.value;\r\n\t\trule.body = dcg.value;\r\n\t\t// push-back lists\r\n\t\tif(rule.head.indicator === \",/2\") {\r\n\t\t\tvar terminals = rule.head.args[1];\r\n\t\t\trule.head = rule.head.args[0];\r\n\t\t\tvar last = thread.next_free_variable();\r\n\t\t\tvar pointer = terminals;\r\n\t\t\tif(!pl.type.is_list(pointer)) {\r\n\t\t\t\treturn pl.error.type(\"list\", pointer, \"DCG/0\");\r\n\t\t\t}\r\n\t\t\tif(pointer.indicator === \"[]/0\") {\r\n\t\t\t\tterminals = dcg.variable;\r\n\t\t\t} else {\r\n\t\t\t\twhile(pointer.indicator === \"./2\" && pl.type.is_list(pointer) && pointer.args[1].indicator !== \"[]/0\") {\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer))\r\n\t\t\t\t\treturn pl.error.instantiation(\"DCG/0\");\r\n\t\t\t\telse if(!pl.type.is_list(pointer))\r\n\t\t\t\t\treturn pl.error.type(\"list\", terminals, \"DCG/0\");\r\n\t\t\t\tpointer.args[1] = dcg.variable;\r\n\t\t\t}\r\n\t\t\trule.body = new Term(\",\", [rule.body, new Term(\"=\", [last, terminals])]);\r\n\t\t\trule.head = new Term(rule.head.id, rule.head.args.concat([begin, last]));\r\n\t\t} else {\r\n\t\t\t// replace first assignment\r\n\t\t\tvar first_assign = rule.body;\r\n\t\t\tif(pl.type.is_term(first_assign) && first_assign.indicator === \",/2\")\r\n\t\t\t\tfirst_assign = first_assign.args[0];\r\n\t\t\tif(pl.type.is_term(first_assign) && first_assign.indicator === \"=/2\" &&\r\n\t\t\t pl.type.is_variable(first_assign.args[0]) && first_assign.args[0] === begin) {\r\n\t\t\t\tbegin = first_assign.args[1];\r\n\t\t\t\trule.body = rule.body.replace(null);\r\n\t\t\t}\r\n\t\t\t// add first and last variables to the head\r\n\t\t\tif(rule.head.indicator === \":/2\")\r\n\t\t\t\trule.head = new Term(\":\", [\r\n\t\t\t\t\tnew Term(rule.head.args[0].id, []),\r\n\t\t\t\t\tnew Term(rule.head.args[1].id, rule.head.args[1].args.concat([begin, dcg.variable]))\r\n\t\t\t\t]);\r\n\t\t\telse\r\n\t\t\t\trule.head = new Term(rule.head.id, rule.head.args.concat([begin, dcg.variable]));\r\n\t\t}\r\n\t\treturn rule;\r\n\t}\r\n\r\n\t// Body to DCG\r\n\tfunction body_to_dcg(expr, last, thread) {\r\n\t\tvar free;\r\n\t\tif( pl.type.is_term( expr ) && expr.indicator === \"!/0\" ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [expr, new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \":/2\" ) {\r\n\t\t\tvar right = body_to_dcg(expr.args[1], last, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\":\", [expr.args[0], right.value]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \"\\\\+/1\" ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [new Term(expr.id, [left.value]), new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && (expr.indicator === \",/2\" || expr.indicator === \"->/2\") ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tvar right = body_to_dcg(expr.args[1], left.variable, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(expr.id, [left.value, right.value]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \";/2\" ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tvar right = body_to_dcg(expr.args[1], last, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [new Term(\";\", [left.value, right.value]), new Term(\"=\", [left.variable, right.variable])]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \"{}/1\" ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [expr.args[0], new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_empty_list( expr ) ) {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\"true\", []),\r\n\t\t\t\tvariable: last,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_list( expr ) ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\tvar pointer = expr;\r\n\t\t\tvar prev;\r\n\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\tprev = pointer;\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: pl.error.instantiation(\"DCG/0\"),\r\n\t\t\t\t\tvariable: last,\r\n\t\t\t\t\terror: true\r\n\t\t\t\t};\r\n\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: pl.error.type(\"list\", expr, \"DCG/0\"),\r\n\t\t\t\t\tvariable: last,\r\n\t\t\t\t\terror: true\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\tprev.args[1] = free;\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: new Term(\"=\", [last, expr]),\r\n\t\t\t\t\tvariable: free,\r\n\t\t\t\t\terror: false\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} else if( pl.type.is_callable( expr ) ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\texpr = new Term( expr.id, expr.args.concat([last,free]) );\r\n\t\t\treturn {\r\n\t\t\t\tvalue: expr,\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: pl.error.type( \"callable\", expr, \"DCG/0\" ),\r\n\t\t\t\tvariable: last,\r\n\t\t\t\terror: true\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\t\r\n\t// Body conversion\r\n\tfunction body_conversion( expr ) {\r\n\t\tif( pl.type.is_variable( expr ) )\r\n\t\t\treturn new Term( \"call\", [expr] );\r\n\t\telse if( pl.type.is_term( expr ) && [\",/2\", \";/2\", \"->/2\"].indexOf(expr.indicator) !== -1 )\r\n\t\t\treturn new Term( expr.id, [body_conversion( expr.args[0] ), body_conversion( expr.args[1] )] );\r\n\t\telse if( pl.type.is_term(expr) && expr.indicator === \":/2\" ) {\r\n\t\t\tvar body = body_conversion(expr.args[1]);\r\n\t\t\treturn new Term(\":\", [expr.args[0], body]);\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\t\r\n\t// List to Prolog list\r\n\tfunction arrayToList( array, cons ) {\r\n\t\tvar list = cons ? cons : new Term( \"[]\", [] );\r\n\t\tfor(var i = array.length-1; i >= 0; i-- )\r\n\t\t\tlist = new Term( \".\", [array[i], list] );\r\n\t\treturn list;\r\n\t}\r\n\r\n\t// Array difference\r\n\tfunction difference(xs, ys) {\r\n\t\tvar zs = [];\r\n\t\tfor(var i = 0; i < xs.length; i++) {\r\n\t\t\tif(indexOf(zs, xs[i]) === -1 && indexOf(ys, xs[i]) === -1)\r\n\t\t\t\tzs.push(xs[i]);\r\n\t\t}\r\n\t\treturn zs;\r\n\t}\r\n\t\r\n\t// Remove element from array\r\n\tfunction remove( array, element ) {\r\n\t\tfor( var i = array.length - 1; i >= 0; i-- ) {\r\n\t\t\tif( array[i] === element ) {\r\n\t\t\t\tarray.splice(i, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// Remove duplicate elements\r\n\tfunction nub( array ) {\r\n\t\tvar seen = {};\r\n\t\tvar unique = [];\r\n\t\tfor( var i = 0; i < array.length; i++ ) {\r\n\t\t\tif( !(array[i] in seen) ) {\r\n\t\t\t\tunique.push( array[i] );\r\n\t\t\t\tseen[array[i]] = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn unique;\r\n\t}\r\n\r\n\t// Retract a rule\r\n\tfunction retract(thread, point, indicator, rule, get_module) {\r\n\t\tif(get_module.rules[indicator]) {\r\n\t\t\tfor(var i = 0; i < get_module.rules[indicator].length; i++) {\r\n\t\t\t\tif(get_module.rules[indicator][i] === rule) {\r\n\t\t\t\t\tget_module.rules[indicator].splice(i, 1);\r\n\t\t\t\t\tget_module.update_indices_predicate(indicator);\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// call/n\r\n\tfunction callN(n) {\r\n\t\treturn function(thread, point, atom) {\r\n\t\t\tvar closure = atom.args[0], args = atom.args.slice(1, n);\r\n\t\t\tvar module_atom;\r\n\t\t\tif(pl.type.is_term(closure) && closure.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(closure.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", closure.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_atom = closure.args[0];\r\n\t\t\t\tclosure = closure.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(closure)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(closure)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", closure, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar goal = body_conversion(new Term(closure.id, closure.args.concat(args)));\r\n\t\t\t\tif(!pl.type.is_callable(goal)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(module_atom)\r\n\t\t\t\t\tgoal = new Term(\":\", [module_atom, goal]);\r\n\t\t\t\tthread.prepend([new State(point.goal.replace(goal), point.substitution, point)]);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\r\n\t// String to indicator\r\n\tfunction str_indicator( str ) {\r\n\t\tfor( var i = str.length - 1; i >= 0; i-- )\r\n\t\t\tif( str.charAt(i) === \"/\" )\r\n\t\t\t\treturn new Term( \"/\", [new Term( str.substring(0, i) ), new Num( parseInt(str.substring(i+1)), false )] );\r\n\t}\r\n\r\n\t// Greatest common divisor\r\n\tfunction gcd(a, b) {\r\n\t\tif(b === 0)\r\n\t\t\treturn a;\r\n\t\treturn Math.abs(gcd(b, a % b));\r\n\t}\r\n\t\r\n\t\r\n\r\n\t// PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tfunction Var( id ) {\r\n\t\tthis.id = id;\r\n\t\tthis.ground = false;\r\n\t}\r\n\t\r\n\t// Numbers\r\n\tfunction Num( value, is_float ) {\r\n\t\tthis.is_float = is_float !== undefined ? is_float : Math.trunc(value) !== value;\r\n\t\tthis.value = this.is_float ? value : Math.trunc(value);\r\n\t\tthis.index = this.value;\r\n\t\tthis.ground = true;\r\n\t}\r\n\t\r\n\t// Terms\r\n\tvar term_ref = 0;\r\n\tfunction Term( id, args, ref ) {\r\n\t\tterm_ref++;\r\n\t\tthis.ref = ref || term_ref;\r\n\t\tthis.id = id;\r\n\t\tthis.args = args || [];\r\n\t\tthis.indicator = id + \"/\" + this.args.length;\r\n\t\tthis.index = this.indicator;\r\n\t\tthis.ground = true;\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tif(this.args[i].hasOwnProperty(\"ground\") && this.args[i].ground === false) {\r\n\t\t\t\tthis.ground = false;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Streams\r\n\tvar stream_ref = 0;\r\n\tfunction Stream( stream, mode, alias, type, reposition, eof_action ) {\r\n\t\tthis.id = stream_ref++;\r\n\t\tthis.stream = stream;\r\n\t\tthis.mode = mode; // \"read\" or \"write\" or \"append\"\r\n\t\tthis.alias = alias;\r\n\t\tthis.type = type !== undefined ? type : \"text\"; // \"text\" or \"binary\"\r\n\t\tthis.reposition = reposition !== undefined ? reposition : true; // true or false\r\n\t\tthis.eof_action = eof_action !== undefined ? eof_action : \"eof_code\"; // \"error\" or \"eof_code\" or \"reset\"\r\n\t\tthis.position = this.mode === \"append\" ? \"end_of_stream\" : 0;\r\n\t\tthis.output = this.mode === \"write\" || this.mode === \"append\";\r\n\t\tthis.input = this.mode === \"read\";\r\n\t\tthis.line_position = 0;\r\n\t\tthis.line_count = 1;\r\n\t\tthis.char_count = 0;\r\n\t}\r\n\t\r\n\t// Substitutions\r\n\tfunction Substitution( links, attrs ) {\r\n\t\tlinks = links || {};\r\n\t\tattrs = attrs || {};\r\n\t\tthis.links = links;\r\n\t\tthis.attrs = attrs;\r\n\t}\r\n\t\r\n\t// States\r\n\tfunction State( goal, subs, parent ) {\r\n\t\tsubs = subs || new Substitution();\r\n\t\tparent = parent || null;\r\n\t\tthis.goal = goal;\r\n\t\tthis.substitution = subs;\r\n\t\tthis.parent = parent;\r\n\t}\r\n\t\r\n\t// Rules\r\n\tfunction Rule( head, body, dynamic ) {\r\n\t\tthis.head = head;\r\n\t\tthis.body = body;\r\n\t\tthis.dynamic = dynamic ? dynamic : false;\r\n\t}\r\n\r\n\t// Session\r\n\tfunction Session( limit ) {\r\n\t\tlimit = typeof limit === \"number\" && limit > 0 ? limit : null;\r\n\t\tthis.rename = 0;\r\n\t\tthis.modules = {};\r\n\t\tthis.modules.user = new Module(\"user\", {}, \"all\", {\r\n\t\t\tsession: this,\r\n\t\t\tdependencies: [\"system\"]\r\n\t\t});\r\n\t\tthis.modules.system = pl.modules.system;\r\n\t\tthis.rules = this.modules.user.rules;\r\n\t\tthis.total_threads = 0;\r\n\t\tthis.renamed_variables = {};\r\n\t\tthis.public_predicates = this.modules.user.public_predicates;\r\n\t\tthis.multifile_predicates = this.modules.user.multifile_predicates;\r\n\t\tthis.limit = limit;\r\n\t\tthis.streams = {\r\n\t\t\t\"user_input\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_input : tau_user_input,\r\n\t\t\t\t\"read\", \"user_input\", \"text\", false, \"reset\" ),\r\n\t\t\t\"user_output\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_output : tau_user_output,\r\n\t\t\t\t\"append\", \"user_output\", \"text\", false, \"reset\" ),\r\n\t\t\t\"user_error\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_error : tau_user_error,\r\n\t\t\t\t\"append\", \"user_error\", \"text\", false, \"reset\" ),\r\n\t\t};\r\n\t\tthis.file_system = nodejs_flag ? nodejs_file_system : tau_file_system;\r\n\t\tthis.standard_input = this.streams[\"user_input\"];\r\n\t\tthis.standard_output = this.streams[\"user_output\"];\r\n\t\tthis.standard_error = this.streams[\"user_error\"];\r\n\t\tthis.current_input = this.streams[\"user_input\"];\r\n\t\tthis.current_output = this.streams[\"user_output\"];\r\n\t\tthis.working_directory = \"/\"; // only for browser\r\n\t\tthis.format_success = function( state ) { return state.substitution; };\r\n\t\tthis.format_error = function( state ) { return state.goal; };\r\n\t\tthis.flag = {\t\r\n\t\t\tbounded: pl.flag.bounded.value,\r\n\t\t\tmax_integer: pl.flag.max_integer.value,\r\n\t\t\tmin_integer: pl.flag.min_integer.value,\r\n\t\t\tinteger_rounding_function: pl.flag.integer_rounding_function.value,\r\n\t\t\tchar_conversion: pl.flag.char_conversion.value,\r\n\t\t\tdebug: pl.flag.debug.value,\r\n\t\t\tmax_arity: pl.flag.max_arity.value,\r\n\t\t\tunknown: pl.flag.unknown.value,\r\n\t\t\tdouble_quotes: pl.flag.double_quotes.value,\r\n\t\t\toccurs_check: pl.flag.occurs_check.value,\r\n\t\t\tdialect: pl.flag.dialect.value,\r\n\t\t\tversion_data: pl.flag.version_data.value,\r\n\t\t\tnodejs: pl.flag.nodejs.value,\r\n\t\t\targv: pl.flag.argv.value\r\n\t\t};\r\n\t\tthis.__loaded_modules = [];\r\n\t\tthis.__char_conversion = {};\r\n\t\tthis.__operators = {\r\n\t\t\t1200: { \":-\": [\"fx\", \"xfx\"], \"-->\": [\"xfx\"], \"?-\": [\"fx\"] },\r\n\t\t\t1150: { \"meta_predicate\": [\"fx\"] },\r\n\t\t\t1100: { \";\": [\"xfy\"] },\r\n\t\t\t1050: { \"->\": [\"xfy\"], \"*->\": [\"xfy\"] },\r\n\t\t\t1000: { \",\": [\"xfy\"] },\r\n\t\t\t900: { \"\\\\+\": [\"fy\"] },\r\n\t\t\t700: {\r\n\t\t\t\t\"=\": [\"xfx\"], \"\\\\=\": [\"xfx\"], \"==\": [\"xfx\"], \"\\\\==\": [\"xfx\"],\r\n\t\t\t\t\"@<\": [\"xfx\"], \"@=<\": [\"xfx\"], \"@>\": [\"xfx\"], \"@>=\": [\"xfx\"],\r\n\t\t\t\t\"=..\": [\"xfx\"], \"is\": [\"xfx\"], \"=:=\": [\"xfx\"], \"=\\\\=\": [\"xfx\"],\r\n\t\t\t\t\"<\": [\"xfx\"], \"=<\": [\"xfx\"], \">\": [\"xfx\"], \">=\": [\"xfx\"]\r\n\t\t\t},\r\n\t\t\t600: { \":\": [\"xfy\"] },\r\n\t\t\t500: { \"+\": [\"yfx\"], \"-\": [\"yfx\"], \"/\\\\\": [\"yfx\"], \"\\\\/\": [\"yfx\"] },\r\n\t\t\t400: {\r\n\t\t\t\t\"*\": [\"yfx\"], \"/\": [\"yfx\"], \"//\": [\"yfx\"], \"rem\": [\"yfx\"],\r\n\t\t\t\t\"mod\": [\"yfx\"], \"<<\": [\"yfx\"], \">>\": [\"yfx\"], \"div\": [\"yfx\"]\r\n\t\t\t},\r\n\t\t\t200: { \"**\": [\"xfx\"], \"^\": [\"xfy\"], \"-\": [\"fy\"], \"+\": [\"fy\"], \"\\\\\": [\"fy\"] }\r\n\t\t};\r\n\t\tthis.thread = new Thread( this );\r\n\t}\r\n\t\r\n\t// Threads\r\n\tfunction Thread( session ) {\r\n\t\tthis.epoch = Date.now();\r\n\t\tthis.session = session;\r\n\t\tthis.session.total_threads++;\r\n\t\tthis.format_success = session.format_success;\r\n\t\tthis.format_error = session.format_error;\r\n\t\tthis.total_steps = 0;\r\n\t\tthis.cpu_time = 0;\r\n\t\tthis.points = [];\r\n\t\tthis.debugger = false;\r\n\t\tthis.debugger_states = [];\r\n\t\tthis.level = new Term(\"top_level\");\r\n\t\tthis.current_limit = this.session.limit;\r\n\t\tthis.has_limit = this.session.limit !== null;\r\n\t\tthis.warnings = [];\r\n\t\tthis.__calls = [];\r\n\t\tthis.__goal_expansion = false;\r\n\t\tthis.__stacks = {};\r\n\t}\r\n\t\r\n\t// Modules\r\n\tfunction Module(id, rules, exports, options) {\r\n\t\toptions = options === undefined ? {} : options;\r\n\t\toptions.public_predicates = options.public_predicates === undefined ? {} : options.public_predicates;\r\n\t\toptions.multifile_predicates = options.multifile_predicates === undefined ? {} : options.multifile_predicates;\r\n\t\toptions.meta_predicates = options.meta_predicates === undefined ? {} : options.meta_predicates;\r\n\t\toptions.session = options.session === undefined ? null : options.session;\r\n\t\toptions.dependencies = options.dependencies === undefined ? [] : options.dependencies;\r\n\t\tthis.id = id;\r\n\t\tthis.rules = rules;\r\n\t\tthis.indexed_clauses = {};\r\n\t\tthis.non_indexable_clauses = {};\r\n\t\tthis.public_predicates = options.public_predicates;\r\n\t\tthis.multifile_predicates = options.multifile_predicates;\r\n\t\tthis.meta_predicates = options.meta_predicates;\r\n\t\tthis.src_predicates = {};\r\n\t\tthis.dependencies = options.dependencies;\r\n\t\tthis.exports = exports;\r\n\t\tthis.is_library = options.session === null;\r\n\t\tthis.modules = {};\r\n\t\tif(options.session) {\r\n\t\t\toptions.session.modules[id] = this;\r\n\t\t\tfor(var i = 0; i < options.dependencies.length; i++) {\r\n\t\t\t\tvar lib = options.dependencies[i];\r\n\t\t\t\tif(!options.session.modules.hasOwnProperty(lib))\r\n\t\t\t\t\toptions.session.modules[lib] = pl.modules[lib];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tpl.modules[id] = this;\r\n\t\t}\r\n\t\tif(exports !== \"all\") {\r\n\t\t\tfor(var i = 0; i < exports.length; i++) {\r\n\t\t\t\tthis.public_predicates[exports[i]] =\r\n\t\t\t\t\toptions.public_predicates.hasOwnProperty(exports[i]) &&\r\n\t\t\t\t\toptions.public_predicates[exports[i]] === true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.update_indices_clauses();\r\n\t}\r\n\t\r\n\t// Check if a predicate is exported\r\n\tModule.prototype.exports_predicate = function(indicator) {\r\n\t\treturn this.exports === \"all\" || indexOf(this.exports, indicator) !== -1;\r\n\t};\r\n\r\n\t// Check if a predicate is public\r\n\tModule.prototype.is_public_predicate = function(indicator) {\r\n\t\treturn !this.public_predicates.hasOwnProperty(indicator) || this.public_predicates[indicator] === true;\r\n\t};\r\n\t\r\n\t// Check if a predicate is multifile\r\n\tModule.prototype.is_multifile_predicate = function( indicator ) {\r\n\t\treturn this.multifile_predicates.hasOwnProperty(indicator) && this.multifile_predicates[indicator] === true;\r\n\t};\r\n\r\n\t// Check if a predicate is a meta-predicate\r\n\tModule.prototype.is_meta_predicate = function( indicator ) {\r\n\t\tif(this.meta_predicates.hasOwnProperty(indicator))\r\n\t\t\treturn this.meta_predicates[indicator];\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Update indices of all predicates\r\n\tModule.prototype.update_indices_clauses = function() {\r\n\t\tthis.indexed_clauses = {};\r\n\t\tthis.non_indexable_clauses = {};\r\n\t\tfor(var indicator in this.rules)\r\n\t\t\tthis.update_indices_predicate(indicator);\r\n\t};\r\n\r\n\t// Update indices of a predicate\r\n\tModule.prototype.update_indices_predicate = function(indicator) {\r\n\t\tthis.indexed_clauses[indicator] = {};\r\n\t\tthis.non_indexable_clauses[indicator] = [];\r\n\t\tif(!Array.isArray(this.rules[indicator]))\r\n\t\t\treturn;\r\n\t\tfor(var i = 0; i < this.rules[indicator].length; i++) {\r\n\t\t\tvar clause = this.rules[indicator][i];\r\n\t\t\tthis.add_index_predicate(clause);\r\n\t\t}\r\n\t};\r\n\r\n\t// Add indexed cluuse to a predicate\r\n\tModule.prototype.add_index_predicate = function(clause) {\r\n\t\tvar indicator = clause.head.indicator;\r\n\t\tvar index = clause.head.args.length > 0 ? clause.head.args[0].index : undefined;\r\n\t\tif(index) {\r\n\t\t\tif(!this.indexed_clauses.hasOwnProperty(indicator))\r\n\t\t\t\tthis.indexed_clauses[indicator] = {};\r\n\t\t\tif(!this.indexed_clauses[indicator].hasOwnProperty(index)) {\r\n\t\t\t\tthis.indexed_clauses[indicator][index] = [];\r\n\t\t\t\tif(this.non_indexable_clauses.hasOwnProperty(indicator))\r\n\t\t\t\t\tfor(var j = 0; j < this.non_indexable_clauses[indicator].length; j++)\r\n\t\t\t\t\t\tthis.indexed_clauses[indicator][index].push(this.non_indexable_clauses[indicator][j]);\r\n\t\t\t}\r\n\t\t\tthis.indexed_clauses[indicator][index].push(clause);\r\n\t\t} else {\r\n\t\t\tif(!this.non_indexable_clauses.hasOwnProperty(indicator))\r\n\t\t\t\tthis.non_indexable_clauses[indicator] = [];\r\n\t\t\tthis.non_indexable_clauses[indicator].push(clause);\r\n\t\t\tfor(var index in this.indexed_clauses[indicator])\r\n\t\t\t\tthis.indexed_clauses[indicator][index].push(clause);\r\n\t\t}\r\n\t};\r\n\r\n\r\n\r\n\t// UNIFY PROLOG OBJECTS\r\n\r\n\t// Variables\r\n\tVar.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(occurs_check && indexOf(obj.variables(), this.id) !== -1 && !pl.type.is_variable(obj))\r\n\t\t\treturn null;\r\n\t\tvar links = {};\r\n\t\tlinks[this.id] = obj;\r\n\t\treturn new Substitution(links);\r\n\t};\r\n\r\n\t// Numbers\r\n\tNum.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(pl.type.is_number(obj) && this.value === obj.value && this.is_float === obj.is_float)\r\n\t\t\treturn new Substitution();\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Terms\r\n\tTerm.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(!pl.type.is_term(obj) && obj.unify !== undefined) {\r\n\t\t\treturn obj.unify(this, occurs_check);\r\n\t\t} else if(pl.type.is_term(obj) && this.indicator === obj.indicator) {\r\n\t\t\tvar subs = new Substitution();\r\n\t\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\t\tvar mgu = pl.unify(this.args[i].apply(subs), obj.args[i].apply(subs), occurs_check);\r\n\t\t\t\tif(mgu === null)\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tfor(var x in mgu.links)\r\n\t\t\t\t\tsubs.links[x] = mgu.links[x];\r\n\t\t\t\tsubs = subs.apply(mgu);\r\n\t\t\t}\r\n\t\t\treturn subs;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.unify = function(obj, _occurs_check) {\r\n\t\tif(pl.type.is_stream(obj) && this.id === obj.id)\r\n\t\t\treturn new Substitution();\r\n\t\treturn null;\r\n\t};\r\n\r\n\tStream.prototype.compare = function(obj) {\r\n\t\tif(this.id < obj.id)\r\n\t\t\treturn -1;\r\n\t\telse if(this.id === obj.id)\r\n\t\t\treturn 0;\r\n\t\telse\r\n\t\t\treturn 1;\r\n\t};\r\n\t\r\n\t\r\n\r\n\t// PROLOG OBJECTS TO STRING\r\n\t\r\n\t// Variables\r\n\tVar.prototype.toString = function( options ) {\r\n\t\toptions = options === undefined ? {} : options;\r\n\t\tif(options.variable_names) {\r\n\t\t\tvar pointer = options.variable_names;\r\n\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\tif(pl.type.is_term(head) && head.indicator === \"=/2\"\r\n\t\t\t\t&& pl.type.is_variable(head.args[1]) && head.args[1].id === this.id\r\n\t\t\t\t&& pl.type.is_atom(head.args[0]))\r\n\t\t\t\t\treturn head.args[0].id;\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.id;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.toString = function( _ ) {\r\n\t\tvar str = this.value.toString();\r\n\t\tvar e = str.indexOf(\"e\");\r\n\t\tif(e !== -1) {\r\n\t\t\tif(str.indexOf(\".\") !== -1)\r\n\t\t\t\treturn str;\r\n\t\t\telse\r\n\t\t\t\treturn str.replace(\"e\", \".0e\");\r\n\t\t}\r\n\t\treturn this.is_float && indexOf(str, \".\") === -1 ? this.value + \".0\" : str;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.toString = function( options, priority, from ) {\r\n\t\toptions = !options ? {} : options;\r\n\t\toptions.quoted = options.quoted === undefined ? false: options.quoted;\r\n\t\toptions.ignore_ops = options.ignore_ops === undefined ? false : options.ignore_ops;\r\n\t\toptions.numbervars = options.numbervars === undefined ? false : options.numbervars;\r\n\t\toptions.variable_names = options.variable_names === undefined ? false : options.variable_names;\r\n\t\tpriority = priority === undefined ? {priority: 1200, class: \"\", indicator: \"\"} : priority;\r\n\t\tfrom = from === undefined ? \"\" : from;\r\n\t\tvar arg_priority = {priority: 999, class: \"\", indicator: \"\"};\r\n\t\tif( options.numbervars && this.indicator === \"$VAR/1\" && pl.type.is_integer( this.args[0] ) && this.args[0].value >= 0 ) {\r\n\t\t\tvar i = this.args[0].value;\r\n\t\t\tvar number = Math.floor( i/26 );\r\n\t\t\tvar letter = i % 26;\r\n\t\t\treturn \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"[letter] + (number !== 0 ? number : \"\");\r\n\t\t}\r\n\t\tswitch( this.indicator ){\r\n\t\t\tcase \"[]/0\":\r\n\t\t\tcase \"{}/0\":\r\n\t\t\tcase \"!/0\":\r\n\t\t\t\treturn this.id;\r\n\t\t\tcase \"{}/1\":\r\n\t\t\t\tif( options.ignore_ops === false ) {\r\n\t\t\t\t\treturn \"{\" + this.args[0].toString( options ) + \"}\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn \"{}(\" + this.args[0].toString( options ) + \")\";\r\n\t\t\t\t}\r\n\t\t\tcase \"./2\":\r\n\t\t\t\tif( options.ignore_ops === false ) {\r\n\t\t\t\t\tvar list = \"[\" + this.args[0].toString( options, arg_priority );\r\n\t\t\t\t\tvar pointer = this.args[1];\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tlist += \",\" + pointer.args[0].toString( options, arg_priority );\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\t\tlist += \"|\" + pointer.toString( options, arg_priority );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist += \"]\";\r\n\t\t\t\t\treturn list;\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tvar id = this.id;\r\n\t\t\t\tvar operator = options.session ? options.session.lookup_operator( this.id, this.args.length ) : null;\r\n\t\t\t\tif( options.session === undefined || options.ignore_ops || operator === null ) {\r\n\t\t\t\t\tif( options.quoted && (! /^(!|[a-z][0-9a-zA-Z_]*|[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+)$/.test( id ) && id !== \"{}\" && id !== \"[]\" || indexOf([\".\",\",\",\";\"], id) !== -1 || id.substring(0,2) === \"/*\") )\r\n\t\t\t\t\t\tid = \"'\" + redoEscape(id) + \"'\";\r\n\t\t\t\t\tif( this.args.length === 0 && is_graphic_token(this.id) && priority.indicator !== \"\")\r\n\t\t\t\t\t\treturn \"(\" + id + \")\";\r\n\t\t\t\t\treturn id + (this.args.length > 0 ? \"(\" + map( this.args,\r\n\t\t\t\t\t\tfunction(x) { return x.toString(options, arg_priority); }\r\n\t\t\t\t\t).join(\",\") + \")\" : \"\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar priority_op = parseInt(operator.priority);\r\n\t\t\t\t\tvar priority_arg = parseInt(priority.priority);\r\n\t\t\t\t\tvar cond = priority_op > priority_arg || priority_op === priority_arg && (\r\n\t\t\t\t\t\toperator.class === \"xfx\" ||\r\n\t\t\t\t\t\toperator.class === \"xfy\" && this.indicator !== priority.indicator ||\r\n\t\t\t\t\t\toperator.class === \"yfx\" && this.indicator !== priority.indicator ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"yfx\" && from === \"right\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"xfy\" && from === \"left\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"xf\" && from === \"left\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"fx\" && from === \"right\");\r\n\t\t\t\t\toperator.indicator = this.indicator;\r\n\t\t\t\t\tvar lpar = cond ? \"(\" : \"\";\r\n\t\t\t\t\tvar rpar = cond ? \")\" : \"\";\r\n\t\t\t\t\tvar space = !(is_graphic_token(this.id) || this.id === \",\" || this.id === \";\")\r\n\t\t\t\t\t\t|| operator.class.length === 2\r\n\t\t\t\t\t\t|| operator.class.length === 3 && pl.type.is_number(this.args[1]) && this.args[1].value < 0 ? \" \" : \"\";\r\n\t\t\t\t\tif( this.args.length === 0 ) {\r\n\t\t\t\t\t\treturn lpar + this.id + rpar;\r\n\t\t\t\t\t} else if( [\"fy\",\"fx\"].indexOf( operator.class) !== -1 ) {\r\n\t\t\t\t\t\treturn lpar + id + space + this.args[0].toString( options, operator, \"right\" ) + rpar;\r\n\t\t\t\t\t} else if( [\"yf\",\"xf\"].indexOf( operator.class) !== -1 ) {\r\n\t\t\t\t\t\treturn lpar + this.args[0].toString( options, operator, \"left\" ) + space + id + rpar;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn lpar + this.args[0].toString( options, operator, \"left\" ) + space + this.id + space + this.args[1].toString( options, operator, \"right\" ) + rpar;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.toString = function( _ ) {\r\n\t\treturn \"(\" + this.id + \")\";\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.toString = function( options ) {\r\n\t\tvar str = \"{\";\r\n\t\tfor( var link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( str !== \"{\" ) {\r\n\t\t\t\tstr += \", \";\r\n\t\t\t}\r\n\t\t\tstr += link + \"/\" + this.links[link].toString( options );\r\n\t\t}\r\n\t\tstr += \"}\";\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.toString = function( options ) {\r\n\t\tif( this.goal === null ) {\r\n\t\t\treturn \"<\" + this.substitution.toString( options ) + \">\";\r\n\t\t} else {\r\n\t\t\treturn \"<\" + this.goal.toString( options ) + \", \" + this.substitution.toString( options ) + \">\";\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.toString = function( options ) {\r\n\t\tif( !this.body ) {\r\n\t\t\treturn this.head.toString( options ) + \".\";\r\n\t\t} else {\r\n\t\t\treturn this.head.toString( options, 1200, \"left\" ) + \" :- \" + this.body.toString( options, 1200, \"right\" ) + \".\";\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Session\r\n\tSession.prototype.toString = function( options ) {\r\n\t\tvar str = \"\";\r\n\t\tfor(var prop in this.modules) {\r\n\t\t\tif(this.modules.hasOwnProperty(prop) && this.modules[prop].is_library)\r\n\t\t\t\tstr += \":- use_module(library(\" + this.modules[prop] + \")).\\n\";\r\n\t\t}\r\n\t\tstr += \"\\n\";\r\n\t\tfor(var key in this.modules.user.rules) {\r\n\t\t\tif(!this.modules.user.rules.hasOwnProperty(key)) continue;\r\n\t\t\tfor(i = 0; i < this.modules.user.rules[key].length; i++) {\r\n\t\t\t\tstr += this.modules.user.rules[key][i].toString(options);\r\n\t\t\t\tstr += \"\\n\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// CLONE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.clone = function() {\r\n\t\treturn new Var( this.id );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.clone = function() {\r\n\t\treturn new Num( this.value, this.is_float );\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.clone = function() {\r\n\t\tvar term = new Term( this.id, map( this.args, function( arg ) {\r\n\t\t\treturn arg.clone();\r\n\t\t} ) );\r\n\t\tif(this.definition_module)\r\n\t\t\tterm.definition_module = this.definition_module;\r\n\t\treturn term;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.clone = function() {\r\n\t\treturn new Stream( this.stream, this.mode, this.alias, this.type, this.reposition, this.eof_action );\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.clone = function() {\r\n\t\tvar links = {};\r\n\t\tvar attrs = {};\r\n\t\tfor( var link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tlinks[link] = this.links[link].clone();\r\n\t\t}\r\n\t\tfor( var attr in this.attrs ) {\r\n\t\t\tif(!this.attrs.hasOwnProperty(attrs)) continue;\r\n\t\t\tattrs[attr] = {};\r\n\t\t\tfor( var m in this.attrs[attr] ) {\r\n\t\t\t\tif(!this.attrs[attr].hasOwnProperty(m)) continue;\r\n\t\t\t\tattrs[attr][m] = this.attrs[attr][m].clone();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, attrs );\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.clone = function() {\r\n\t\treturn new State( this.goal.clone(), this.substitution.clone(), this.parent );\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.clone = function() {\r\n\t\treturn new Rule( this.head.clone(), this.body !== null ? this.body.clone() : null );\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPARE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_variable( obj ) && this.id === obj.id;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_number( obj ) && this.value === obj.value && this.is_float === obj.is_float;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.equals = function( obj ) {\r\n\t\tif( !pl.type.is_term( obj ) || this.indicator !== obj.indicator ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor( var i = 0; i < this.args.length; i++ ) {\r\n\t\t\tif( !this.args[i].equals( obj.args[i] ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_stream( obj ) && this.id === obj.id;\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.equals = function( obj ) {\r\n\tvar link;\r\n\t\tif( !pl.type.is_substitution( obj ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor( link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( !obj.links[link] || !this.links[link].equals( obj.links[link] ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor( link in obj.links ) {\r\n\t\t\tif(!obj.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( !this.links[link] ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_state( obj ) && this.goal.equals( obj.goal ) && this.substitution.equals( obj.substitution ) && this.parent === obj.parent;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_rule( obj ) && this.head.equals( obj.head ) && (this.body === null && obj.body === null || this.body !== null && this.body.equals( obj.body ));\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// RENAME VARIABLES OF PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.rename = function( thread ) {\r\n\t\treturn thread.get_free_variable( this );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.rename = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.rename = function( thread ) {\r\n\t\t// ground\r\n\t\tif(this.ground)\r\n\t\t\treturn new Term(this.id, this.args);\r\n\t\t// list\r\n\t\tif(this.indicator === \"./2\") {\r\n\t\t\tvar arr = [];\r\n\t\t\tvar pointer = this;\r\n\t\t\twhile(pointer.indicator === \"./2\" && !pointer.ground) {\r\n\t\t\t\tvar app = pointer.args[0].rename(thread);\r\n\t\t\t\tarr.push(app);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar list = pointer.rename(thread);\r\n\t\t\tfor(var i = arr.length-1; i >= 0; i--)\r\n\t\t\t\tlist = new Term(\".\", [arr[i], list]);\r\n\t\t\treturn list;\r\n\t\t}\r\n\t\t// compound term\r\n\t\tvar args = [];\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tvar app = this.args[i].rename(thread);\r\n\t\t\targs.push(app);\r\n\t\t}\r\n\t\treturn new Term(this.id, args);\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.rename = function( thread ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.rename = function( thread ) {\r\n\t\treturn new Rule( this.head.rename( thread ), this.body !== null ? this.body.rename( thread ) : null );\r\n\t};\r\n\r\n\r\n\r\n\t// CHECK IF RENAME\r\n\r\n\t// Variables\r\n\tVar.prototype.is_rename = function(obj, links) {\r\n\t\tlinks = links || {};\r\n\t\tif(!pl.type.is_variable(obj)\r\n\t\t|| links.hasOwnProperty(this.id) && links[this.id] !== obj.id\r\n\t\t|| links.hasOwnProperty(obj.id) && links[obj.id] !== this.id)\r\n\t\t\treturn false;\r\n\t\tlinks[this.id] = obj.id;\r\n\t\tlinks[obj.id] = this.id;\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.is_rename = function(obj, _links) {\r\n\t\treturn this.equals(obj);\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.is_rename = function(obj, links) {\r\n\t\tlinks = links || {};\r\n\t\tif(!pl.type.is_term(obj) || this.indicator !== obj.indicator)\r\n\t\t\treturn false;\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tif(!pl.is_rename(this.args[i], obj.args[i], links))\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.is_rename = function(obj, _links) {\r\n\t\treturn this.equals(obj);\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// GET ID OF VARIABLES FROM PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.variables = function() {\r\n\t\treturn [this.id];\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.variables = function() {\r\n\t\treturn [];\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.variables = function() {\r\n\t\tif(this.ground)\r\n\t\t\treturn [];\r\n\t\treturn [].concat.apply( [], map( this.args, function( arg ) {\r\n\t\t\treturn arg.variables();\r\n\t\t} ) );\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.variables = function() {\r\n\t\treturn [];\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.variables = function() {\r\n\t\tif( this.body === null ) {\r\n\t\t\treturn this.head.variables();\r\n\t\t} else {\r\n\t\t\treturn this.head.variables().concat( this.body.variables() );\r\n\t\t}\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// APPLY SUBSTITUTIONS TO PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.apply = function( subs ) {\r\n\t\tif( subs.lookup( this.id ) ) {\r\n\t\t\treturn subs.lookup( this.id );\r\n\t\t}\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.apply = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.apply = function( subs ) {\r\n\t\t// ground atom\r\n\t\tif(this.ground)\r\n\t\t\treturn this;\r\n\t\t// list\r\n\t\tif(this.indicator === \"./2\") {\r\n\t\t\tvar arr = [];\r\n\t\t\tvar pointer = this;\r\n\t\t\twhile(pointer.indicator === \"./2\" && !pointer.ground) {\r\n\t\t\t\tvar app = pointer.args[0].apply(subs);\r\n\t\t\t\tarr.push(app);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar list = pointer.apply(subs);\r\n\t\t\tfor(var i = arr.length-1; i >= 0; i--)\r\n\t\t\t\tlist = new Term(\".\", [arr[i], list]);\r\n\t\t\treturn list;\r\n\t\t}\r\n\t\t// compound term\r\n\t\tvar args = [];\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tvar app = this.args[i].apply(subs);\r\n\t\t\targs.push(app);\r\n\t\t}\r\n\t\treturn new Term(this.id, args, this.ref);\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.apply = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.apply = function( subs ) {\r\n\t\treturn new Rule( this.head.apply( subs ), this.body !== null ? this.body.apply( subs ) : null );\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.apply = function( subs ) {\r\n\t\tvar link, links = {}, attr, attrs = {}, m;\r\n\t\tfor( link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tlinks[link] = this.links[link].apply(subs);\r\n\t\t}\r\n\t\tfor( attr in this.attrs ) {\r\n\t\t\tif(!this.attrs.hasOwnProperty(attr)) continue;\r\n\t\t\tattrs[attr] = {};\r\n\t\t\tfor( m in this.attrs[attr] ) {\r\n\t\t\t\tif(!this.attrs[attr].hasOwnProperty(m)) continue;\r\n\t\t\t\tattrs[attr][m] = this.attrs[attr][m].apply(subs);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, attrs );\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// SELECTION FUNCTION\r\n\t\r\n\t// Select term\r\n\tTerm.prototype.select = function() {\r\n\t\tvar pointer = this;\r\n\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \",/2\")\r\n\t\t\tpointer = pointer.args[0];\r\n\t\treturn pointer;\r\n\t};\r\n\t\r\n\t// Replace term\r\n\tTerm.prototype.replace = function( expr ) {\r\n\t\tif( this.indicator === \",/2\" ) {\r\n\t\t\tif( this.args[0].indicator === \",/2\" ) {\r\n\t\t\t\treturn new Term( \",\", [this.args[0].replace( expr ), this.args[1]] );\r\n\t\t\t} else {\r\n\t\t\t\treturn expr === null ? this.args[1] : new Term( \",\", [expr, this.args[1]] );\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn expr;\r\n\t\t}\r\n\t};\r\n\r\n\t// Search term\r\n\tTerm.prototype.search = function( expr ) {\r\n\t\tif(this == expr || this.ref === expr.ref)\r\n\t\t\treturn true;\r\n\t\tfor( var i = 0; i < this.args.length; i++ )\r\n\t\t\tif( pl.type.is_term( this.args[i] ) && this.args[i].search( expr ) )\r\n\t\t\t\treturn true;\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG SESSIONS AND THREADS\r\n\r\n\t// Push to a global stack\r\n\tSession.prototype.push_global_stack = function(stack, value) {\r\n\t\treturn this.thread.push_global_stack(stack, value);\r\n\t};\r\n\tThread.prototype.push_global_stack = function(stack, value) {\r\n\t\tif(!this.__stacks.hasOwnProperty(stack))\r\n\t\t\tthis.__stacks[stack] = [];\r\n\t\tthis.__stacks[stack].push(value);\r\n\t};\r\n\r\n\t// Pop all from a global stack\r\n\tSession.prototype.flush_global_stack = function(stack, tail) {\r\n\t\treturn this.thread.push_global_stack(stack, tail);\r\n\t};\r\n\tThread.prototype.flush_global_stack = function(stack, tail) {\r\n\t\tvar list = tail || new Term(\"[]\", []);\r\n\t\tif(this.__stacks.hasOwnProperty(stack)) {\r\n\t\t\twhile(this.__stacks[stack].length > 0)\r\n\t\t\t\tlist = new Term(\".\", [this.__stacks[stack].pop(), list]);\r\n\t\t\tdelete this.__stacks[stack];\r\n\t\t}\r\n\t\treturn list;\r\n\t};\r\n\r\n\t// Set max inferences\r\n\tSession.prototype.setMaxInferences = function(max) {\r\n\t\tthis.limit = typeof max === \"number\" && max > 0 ? max : null;\r\n\t};\r\n\tThread.prototype.setMaxInferences = function(max) {\r\n\t\tthis.session.setMaxInferences(max);\r\n\t\tthis.current_limit = this.session.limit;\r\n\t\tthis.has_limit = this.session.limit !== null;\r\n\t};\r\n\r\n\t// Format answer\r\n\tSession.prototype.format_answer = function(answer, options) {\r\n\t\treturn this.thread.format_answer(answer, options);\r\n\t};\r\n\tThread.prototype.format_answer = function(answer, options) {\r\n\t\treturn pl.format_answer(answer, this, options);\r\n\t};\r\n\r\n\t// Get current input\r\n\tSession.prototype.get_current_input = function() {\r\n\t\treturn this.current_input;\r\n\t};\r\n\tThread.prototype.get_current_input = function() {\r\n\t\treturn this.session.get_current_input();\r\n\t};\r\n\r\n\t// Get current output\r\n\tSession.prototype.get_current_output = function() {\r\n\t\treturn this.current_output;\r\n\t};\r\n\tThread.prototype.get_current_output = function() {\r\n\t\treturn this.session.get_current_output();\r\n\t};\r\n\r\n\t// Set current input\r\n\tSession.prototype.set_current_input = function( input ) {\r\n\t\tthis.current_input = input;\r\n\t};\r\n\tThread.prototype.set_current_input = function( input ) {\r\n\t\treturn this.session.set_current_input( input );\r\n\t};\r\n\r\n\t// Set current output\r\n\tSession.prototype.set_current_output = function( output ) {\r\n\t\tthis.current_output = output;\r\n\t};\r\n\tThread.prototype.set_current_output = function( output ) {\r\n\t\treturn this.session.set_current_output( output);\r\n\t};\r\n\r\n\t// Get stream by alias\r\n\tSession.prototype.get_stream_by_alias = function( alias ) {\r\n\t\treturn this.streams[alias];\r\n\t};\r\n\tThread.prototype.get_stream_by_alias = function( alias ) {\r\n\t\treturn this.session.get_stream_by_alias( alias );\r\n\t};\r\n\r\n\t// Open file\r\n\tSession.prototype.file_system_open = function( path, type, mode ) {\r\n\t\tif(this.get_flag(\"nodejs\").indicator === \"false/0\")\r\n\t\t\tpath = this.absolute_file_name(path);\r\n\t\treturn this.file_system.open( path, type, mode );\r\n\t};\r\n\tThread.prototype.file_system_open = function( path, type, mode ) {\r\n\t\treturn this.session.file_system_open( path, type, mode );\r\n\t};\r\n\r\n\t// Absolute file name\r\n\tSession.prototype.absolute_file_name = function(filename) {\r\n\t\tvar absolute;\r\n\t\t// node.js\r\n\t\tif(this.get_flag(\"nodejs\").indicator === \"true/0\") {\r\n\t\t\tvar path = require(\"path\");\r\n\t\t\tabsolute = filename;\r\n\t\t\tfor(var prop in process.env) {\r\n\t\t\t\tif(!process.env.hasOwnProperty(prop))\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tabsolute = absolute.replace(new RegExp(\"\\\\$\" + prop, \"g\"), process.env[prop]);\r\n\t\t\t}\r\n\t\t\treturn path.resolve(absolute);\r\n\t\t// browser\r\n\t\t} else {\r\n\t\t\tvar cwd = this.working_directory;\r\n\t\t\tif(filename[0] === \"/\")\r\n\t\t\t\tabsolute = filename;\r\n\t\t\telse\r\n\t\t\t\tabsolute = cwd + (cwd[cwd.length-1] === \"/\" ? filename : \"/\" + filename);\r\n\t\t\tabsolute = absolute.replace(/\\/\\.\\//g, \"/\");\r\n\t\t\tvar dirs = absolute.split(\"/\");\r\n\t\t\tvar dirs2 = [];\r\n\t\t\tfor(var i = 0; i < dirs.length; i++) {\r\n\t\t\t\tif(dirs[i] !== \"..\") {\r\n\t\t\t\t\tdirs2.push(dirs[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(dirs2.length !== 0)\r\n\t\t\t\t\t\tdirs2.pop();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tabsolute = dirs2.join(\"/\").replace(/\\/\\.$/, \"/\");\r\n\t\t}\r\n\t\treturn absolute;\r\n\t};\r\n\tThread.prototype.absolute_file_name = function(path, cwd) {\r\n\t\treturn this.session.absolute_file_name(path, cwd);\r\n\t};\r\n\r\n\t// Get conversion of the char\r\n\tSession.prototype.get_char_conversion = function( char ) {\r\n\t\treturn this.__char_conversion[char] || char;\r\n\t};\r\n\tThread.prototype.get_char_conversion = function( char ) {\r\n\t\treturn this.session.get_char_conversion( char );\r\n\t};\r\n\t\r\n\t// Parse an expression\r\n\tSession.prototype.parse = function( string ) {\r\n\t\treturn this.thread.parse( string );\r\n\t};\r\n\tThread.prototype.parse = function( string ) {\r\n\t\tvar tokenizer = new Tokenizer( this );\r\n\t\ttokenizer.new_text( string );\r\n\t\tvar tokens = tokenizer.get_tokens();\r\n\t\tif( tokens === null )\r\n\t\t\treturn false;\r\n\t\tvar expr = parseExpr(this, tokens, 0, this.__get_max_priority(), false);\r\n\t\tif( expr.len !== tokens.length )\r\n\t\t\treturn false;\r\n\t\treturn { value: expr.value, expr: expr, tokens: tokens };\r\n\t};\r\n\t\r\n\t// Get flag value\r\n\tSession.prototype.get_flag = function( flag ) {\r\n\t\treturn this.flag[flag];\r\n\t};\r\n\tThread.prototype.get_flag = function( flag ) {\r\n\t\treturn this.session.get_flag( flag );\r\n\t};\r\n\r\n\t// Add a rule\r\n\tSession.prototype.add_rule = function(rule, options) {\r\n\t\treturn this.thread.add_rule(rule, options);\r\n\t};\r\n\tThread.prototype.add_rule = function(rule, options) {\r\n\t\toptions = options ? options : {};\r\n\t\toptions.from = options.from ? options.from : \"$tau-js\";\r\n\t\tvar module_id, get_module;\r\n\t\tif(pl.type.is_term(rule.head) && rule.head.indicator === \":/2\") {\r\n\t\t\tif(!pl.type.is_atom(rule.head.args[0])) {\r\n\t\t\t\tthis.throw_warning(pl.error.type(\"module\", rule.head.args[0], \"top_level/0\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tmodule_id = rule.head.args[0].id;\r\n\t\t\trule.head = rule.head.args[1];\r\n\t\t}\r\n\t\tif(module_id) {\r\n\t\t\tget_module = this.session.modules[module_id];\r\n\t\t\tif(!pl.type.is_module(get_module)) {\r\n\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: this.session});\r\n\t\t\t\tthis.session.modules[module_id] = get_module;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tget_module = this.session.modules[options.context_module];\r\n\t\t}\r\n\t\tget_module.src_predicates[rule.head.indicator] = options.from;\r\n\t\tif(!get_module.rules.hasOwnProperty(rule.head.indicator)) {\r\n\t\t\tget_module.rules[rule.head.indicator] = [];\r\n\t\t}\r\n\t\tget_module.rules[rule.head.indicator].push(rule);\r\n\t\tif(!get_module.public_predicates.hasOwnProperty(rule.head.indicator))\r\n\t\t\tget_module.public_predicates[rule.head.indicator] = false;\r\n\t\t// update term indexing\r\n\t\tget_module.add_index_predicate(rule);\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Run a directive\r\n\tSession.prototype.run_directive = function(directive, options) {\r\n\t\treturn this.thread.run_directive(directive, options);\r\n\t};\r\n\tThread.prototype.run_directive = function(directive, options) {\r\n\t\tif(pl.type.is_directive(directive)) {\r\n\t\t\tif(pl.directive[directive.indicator])\r\n\t\t\t\treturn pl.directive[directive.indicator](this, directive, options);\r\n\t\t\telse\r\n\t\t\t\treturn pl.directive[directive.id + \"/*\"](this, directive, options);\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\t// Get maximum priority of the operators\r\n\tSession.prototype.__get_max_priority = function() {\r\n\t\treturn \"1200\";\r\n\t};\r\n\tThread.prototype.__get_max_priority = function() {\r\n\t\treturn this.session.__get_max_priority();\r\n\t};\r\n\t\r\n\t// Get next priority of the operators\r\n\tSession.prototype.__get_next_priority = function( priority ) {\r\n\t\tvar max = 0;\r\n\t\tpriority = parseInt( priority );\r\n\t\tfor( var key in this.__operators ) {\r\n\t\t\tif( !this.__operators.hasOwnProperty(key) ) continue;\r\n\t\t\tvar n = parseInt(key);\r\n\t\t\tif( n > max && n < priority ) max = n;\r\n\t\t}\r\n\t\treturn max.toString();\r\n\t};\r\n\tThread.prototype.__get_next_priority = function( priority ) {\r\n\t\treturn this.session.__get_next_priority( priority );\r\n\t};\r\n\t\r\n\t// Get classes of an operator\r\n\tSession.prototype.__lookup_operator_classes = function( priority, operator ) {\r\n\t\tif( this.__operators.hasOwnProperty( priority ) && this.__operators[priority][operator] instanceof Array ) {\r\n\t\t\treturn this.__operators[priority][operator] || false;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tThread.prototype.__lookup_operator_classes = function( priority, operator ) {\r\n\t\treturn this.session.__lookup_operator_classes( priority, operator );\r\n\t};\r\n\r\n\t// Get operator\r\n\tSession.prototype.lookup_operator = function( name, arity ) {\r\n\t\tfor(var p in this.__operators)\r\n\t\t\tif(this.__operators[p][name])\r\n\t\t\t\tfor(var i = 0; i < this.__operators[p][name].length; i++)\r\n\t\t\t\t\tif( this.__operators[p][name][i].length === arity+1 )\r\n\t\t\t\t\t\treturn {priority: p, class: this.__operators[p][name][i]};\r\n\t\treturn null;\r\n\t};\r\n\tThread.prototype.lookup_operator = function( name, arity ) {\r\n\t\treturn this.session.lookup_operator( name, arity );\r\n\t};\r\n\t\r\n\t// Throw a warning\r\n\tSession.prototype.throw_warning = function( warning ) {\r\n\t\tthis.thread.throw_warning( warning );\r\n\t};\r\n\tThread.prototype.throw_warning = function( warning ) {\r\n\t\tthis.warnings.push( warning );\r\n\t};\r\n\t\r\n\t// Get warnings\r\n\tSession.prototype.get_warnings = function() {\r\n\t\treturn this.thread.get_warnings();\r\n\t};\r\n\tThread.prototype.get_warnings = function() {\r\n\t\treturn this.warnings;\r\n\t};\r\n\r\n\t// Add a goal\r\n\tSession.prototype.add_goal = function( goal, unique ) {\r\n\t\tthis.thread.add_goal( goal, unique );\r\n\t};\r\n\tThread.prototype.add_goal = function( goal, unique, parent ) {\r\n\t\tparent = parent ? parent : null;\r\n\t\tif( unique === true )\r\n\t\t\tthis.points = [];\r\n\t\tvar vars = goal.variables();\r\n\t\tvar links = {};\r\n\t\tfor( var i = 0; i < vars.length; i++ )\r\n\t\t\tlinks[vars[i]] = new Var(vars[i]);\r\n\t\tthis.points.push( new State( goal, new Substitution(links), parent ) );\r\n\t};\r\n\r\n\t// Consult a program from a string\r\n\tSession.prototype.consult = function(program, options) {\r\n\t\treturn this.thread.consult(program, options);\r\n\t};\r\n\tThread.prototype.consult = function(program, options) {\r\n\t\tvar string = \"\", success = false;\r\n\t\tvar opts = {};\r\n\t\tvar callback = typeof options === \"function\" ? options : function(){};\r\n\t\toptions = options === undefined || typeof options === \"function\" ? {} : options;\r\n\t\topts.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\topts.text = options.text === undefined ? true : options.text;\r\n\t\topts.html = options.html === undefined ? true : options.html;\r\n\t\topts.url = options.url === undefined ? true : options.url;\r\n\t\topts.file = options.file === undefined ? true : options.file;\r\n\t\topts.script = options.script === undefined ? true : options.script;\r\n\t\topts.success = options.success === undefined ? callback : options.success;\r\n\t\topts.error = options.error === undefined ? callback : options.error;\r\n\t\t// string\r\n\t\tif(typeof program === \"string\") {\r\n\t\t\tstring = program;\r\n\t\t\t// script id\r\n\t\t\tif(opts.script && this.get_flag(\"nodejs\").indicator === \"false/0\" && program != \"\" && document.getElementById(string)) {\r\n\t\t\t\tvar script = document.getElementById(string);\r\n\t\t\t\tvar type = script.getAttribute(\"type\");\r\n\t\t\t\tif(type !== null && type.replace(/ /g, \"\").toLowerCase() === \"text/prolog\") {\r\n\t\t\t\t\tstring = script.text;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// file (node.js)\r\n\t\t\tif(!success && opts.file && this.get_flag(\"nodejs\").indicator === \"true/0\") {\r\n\t\t\t\tvar fs = require(\"fs\");\r\n\t\t\t\tvar thread = this;\r\n\t\t\t\tfs.readFile(program, function(error, data) {\r\n\t\t\t\t\tif(error) {\r\n\t\t\t\t\t\topts.file = false;\r\n\t\t\t\t\t\tthread.consult(program, opts);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tparseProgram(thread, data.toString(), opts);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// http request\r\n\t\t\tif(!success && this.get_flag(\"nodejs\").indicator === \"false/0\" && opts.url && program !== \"\" && !(/\\s/.test(program))) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tvar xhttp = new XMLHttpRequest();\r\n\t\t\t\t\tvar thread = this;\r\n\t\t\t\t\txhttp.onreadystatechange = function() {\r\n\t\t\t\t\t\tif(this.readyState == 4) {\r\n\t\t\t\t\t\t\tif(this.status == 200) {\r\n\t\t\t\t\t\t\t\tstring = xhttp.responseText;\r\n\t\t\t\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\t\t\t\tparseProgram(thread, string, opts);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\topts.url = false;\r\n\t\t\t\t\t\t\t\tthread.consult(program, opts);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\txhttp.open(\"GET\", program, true);\r\n\t\t\t\t\txhttp.send();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} catch(ex) {\r\n\t\t\t\t\topts.error(ex);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// text\r\n\t\t\tif(!success && opts.text) {\r\n\t\t\t\tsuccess = true;\r\n\t\t\t}\r\n\t\t// html\r\n\t\t} else if(opts.html && program.nodeName) {\r\n\t\t\tswitch(program.nodeName.toLowerCase()) {\r\n\t\t\t\tcase \"input\":\r\n\t\t\t\tcase \"textarea\":\r\n\t\t\t\t\tstring = program.value;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tstring = program.innerHTML;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\topts.error(pl.error.existence(\"source_sink\", new Term(string), \"top_level/0\"));\r\n\t\t}\r\n\t\tthis.warnings = [];\r\n\t\tparseProgram(this, string, opts);\r\n\t};\r\n\r\n\t// Query goal from a string (without ?-)\r\n\tSession.prototype.query = function(string, options) {\r\n\t\treturn this.thread.query(string, options);\r\n\t};\r\n\tThread.prototype.query = function(string, options) {\r\n\t\tthis.points = [];\r\n\t\tthis.debugger_states = [];\r\n\t\tthis.level = new Term(\"top_level\");\r\n\t\treturn parseQuery(this, string, options);\r\n\t};\r\n\t\r\n\t// Get first choice point\r\n\tSession.prototype.head_point = function() {\r\n\t\treturn this.thread.head_point();\r\n\t};\r\n\tThread.prototype.head_point = function() {\r\n\t\treturn this.points[this.points.length-1];\r\n\t};\r\n\t\r\n\t// Get free variable\r\n\tSession.prototype.get_free_variable = function( variable ) {\r\n\t\treturn this.thread.get_free_variable( variable );\r\n\t};\r\n\tThread.prototype.get_free_variable = function( variable ) {\r\n\t\tvar variables = [];\r\n\t\tif( variable.id === \"_\" || this.session.renamed_variables[variable.id] === undefined ) {\r\n\t\t\tthis.session.rename++;\r\n\t\t\tif( this.current_point )\r\n\t\t\t\tvariables = this.current_point.substitution.domain();\r\n\t\t\twhile( indexOf( variables, pl.format_variable( this.session.rename, variable.id ) ) !== -1 ) {\r\n\t\t\t\tthis.session.rename++;\r\n\t\t\t}\r\n\t\t\tif( variable.id === \"_\" ) {\r\n\t\t\t\treturn new Var( pl.format_variable( this.session.rename, variable.id ) );\r\n\t\t\t} else {\r\n\t\t\t\tthis.session.renamed_variables[variable.id] = pl.format_variable( this.session.rename, variable.id );\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Var( this.session.renamed_variables[variable.id] );\r\n\t};\r\n\t\r\n\t// Get next free variable\r\n\tSession.prototype.next_free_variable = function() {\r\n\t\treturn this.thread.next_free_variable();\r\n\t};\r\n\tThread.prototype.next_free_variable = function() {\r\n\t\tthis.session.rename++;\r\n\t\tvar variables = [];\r\n\t\tif( this.current_point )\r\n\t\t\tvariables = this.current_point.substitution.domain();\r\n\t\twhile( indexOf( variables, pl.format_variable( this.session.rename ) ) !== -1 ) {\r\n\t\t\tthis.session.rename++;\r\n\t\t}\r\n\t\treturn new Var( pl.format_variable( this.session.rename ) );\r\n\t};\r\n\t\r\n\t// Check if a predicate is public\r\n\tSession.prototype.is_public_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\treturn pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_public_predicate(indicator);\r\n\t};\r\n\tThread.prototype.is_public_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_public_predicate(indicator, module_id);\r\n\t};\r\n\t\r\n\t// Check if a predicate is multifile\r\n\tSession.prototype.is_multifile_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\treturn pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_multifile_predicate(indicator);\r\n\t};\r\n\tThread.prototype.is_multifile_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_multifile_predicate(indicator, module_id);\r\n\t};\r\n\r\n\t// Check if a predicate is a meta-predicate\r\n\tSession.prototype.is_meta_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\tif(pl.type.is_module(this.modules[module_id]))\r\n\t\t\treturn this.modules[module_id].is_meta_predicate(indicator);\r\n\t\treturn null;\r\n\t};\r\n\tThread.prototype.is_meta_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_meta_predicate(indicator, module_id);\r\n\t};\r\n\t\r\n\t// Insert states at the beginning\r\n\tSession.prototype.prepend = function( states ) {\r\n\t\treturn this.thread.prepend( states );\r\n\t};\r\n\tThread.prototype.prepend = function( states ) {\r\n\t\tfor(var i = states.length-1; i >= 0; i--)\r\n\t\t\tthis.points.push( states[i] );\r\n\t};\r\n\t\r\n\t// Remove the selected term and prepend the current state\r\n\tSession.prototype.success = function( point, parent ) {\r\n\t\treturn this.thread.success( point, parent );\r\n\t}\r\n\tThread.prototype.success = function( point, parent ) {\r\n\t\tvar parent = typeof parent === \"undefined\" ? point : parent;\r\n\t\tthis.prepend( [new State( point.goal.replace( null ), point.substitution, parent ) ] );\r\n\t};\r\n\t\r\n\t// Throw error\r\n\tSession.prototype.throw_error = function(error) {\r\n\t\treturn this.thread.throw_error(error);\r\n\t};\r\n\tThread.prototype.throw_error = function(error) {\r\n\t\tif(pl.type.is_variable(error))\r\n\t\t\terror = pl.error.instantiation(this.level.indicator);\r\n\t\tvar state = new State(\r\n\t\t\tnew Term(\"throw\", [error]),\r\n\t\t\tnew Substitution(),\r\n\t\t\tnull\r\n\t\t);\r\n\t\tstate.error = true;\r\n\t\tthis.prepend([state]);\r\n\t};\r\n\t\r\n\t// Get the module of a predicate\r\n\tSession.prototype.lookup_module = function(atom, context_module) {\r\n\t\treturn this.thread.lookup_module(atom, context_module);\r\n\t}\r\n\tThread.prototype.lookup_module = function(atom, context_module) {\r\n\t\tvar get_module = this.session.modules[context_module];\r\n\t\tif(!pl.type.is_module(get_module))\r\n\t\t\tget_module = this.session.modules.user;\r\n\t\tif(get_module.rules.hasOwnProperty(atom.indicator) && (\r\n\t\t\tget_module.exports_predicate(atom.indicator) ||\r\n\t\t\tget_module.rules.hasOwnProperty(this.level.indicator) ||\r\n\t\t\tcontext_module === get_module.id))\r\n\t\t\t\treturn get_module;\r\n\t\tget_module.modules.system = pl.modules.system;\r\n\t\tget_module.modules.user = this.session.modules.user;\r\n\t\tfor(var prop in get_module.modules) {\r\n\t\t\tif(!this.session.modules.hasOwnProperty(prop))\r\n\t\t\t\tcontinue;\r\n\t\t\tvar get_module = this.session.modules[prop];\r\n\t\t\tif(get_module.rules.hasOwnProperty(atom.indicator) && (\r\n\t\t\t\tget_module.exports_predicate(atom.indicator) ||\r\n\t\t\t\tget_module.rules.hasOwnProperty(this.level.indicator) ||\r\n\t\t\t\tcontext_module === get_module.id))\r\n\t\t\t\t\treturn get_module;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Expand a meta-predicate\r\n\tSession.prototype.expand_meta_predicate = function(atom, definition_module, context_module) {\r\n\t\treturn this.thread.expand_meta_predicate(atom, definition_module, context_module);\r\n\t};\r\n\tThread.prototype.expand_meta_predicate = function(atom, definition_module, context_module) {\r\n\t\tvar get_module = this.session.modules[definition_module];\r\n\t\tif(!get_module)\r\n\t\t\treturn;\r\n\t\tvar meta = get_module.is_meta_predicate(atom.indicator);\r\n\t\tif(!meta)\r\n\t\t\treturn;\r\n\t\tfor(var i = 0; i < meta.args.length; i++) {\r\n\t\t\tif(pl.type.is_integer(meta.args[i]) || pl.type.is_atom(meta.args[i]) && indexOf([\":\"], meta.args[i].id) !== -1) {\r\n\t\t\t\tif(!pl.type.is_term(atom.args[i]) || atom.args[i].indicator !== \":/2\") {\r\n\t\t\t\t\tatom.args[i] = new Term(\":\", [new Term(context_module), atom.args[i]]);\r\n\t\t\t\t}\r\n\t\t\t} else if(pl.type.is_atom(meta.args[i]) && meta.args[i].id === \"^\") {\r\n\t\t\t\tvar pointer_last = atom;\r\n\t\t\t\tvar pointer_index = i;\r\n\t\t\t\tvar pointer = atom.args[i];\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"^/2\") {\r\n\t\t\t\t\tpointer_last = pointer;\r\n\t\t\t\t\tpointer_index = 1;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(!pl.type.is_term(pointer) || pointer.indicator !== \":/2\") {\r\n\t\t\t\t\tpointer_last.args[pointer_index] = new Term(\":\", [new Term(context_module), pointer]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Resolution step\r\n\tSession.prototype.step = function() {\r\n\t\treturn this.thread.step();\r\n\t}\r\n\tThread.prototype.step = function() {\r\n\t\tif(this.points.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar asyn = false;\r\n\t\tvar point = this.points.pop();\r\n\t\tthis.current_point = point;\r\n\t\tif(this.debugger)\r\n\t\t\tthis.debugger_states.push(point);\r\n\t\tvar atom = pl.type.is_term(point.goal) ? point.goal.select() : point.goal;\r\n\t\tif(pl.type.is_term(atom) && (atom.indicator !== \":/2\" || pl.type.is_term(atom.args[1]))) {\r\n\t\t\tvar context_module = null;\r\n\t\t\tvar states = [];\r\n\t\t\tif(atom !== null) {\r\n\t\t\t\tthis.total_steps++;\r\n\t\t\t\tvar level = point;\r\n\t\t\t\twhile(level.parent !== null && level.parent.goal.search(atom))\r\n\t\t\t\t\tlevel = level.parent;\r\n\t\t\t\tif(level.parent === null) {\r\n\t\t\t\t\tthis.level = new Term(\"top_level\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.level = level.parent.goal.select();\r\n\t\t\t\t\tif(this.level.indicator === \":/2\")\r\n\t\t\t\t\t\tthis.level = this.level.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_term(atom) && atom.indicator === \":/2\") {\r\n\t\t\t\t\tcontext_module = atom.args[0];\r\n\t\t\t\t\tatom = atom.args[1];\r\n\t\t\t\t\tif(!pl.type.is_atom(context_module)) {\r\n\t\t\t\t\t\tthis.throw_error(pl.error.type(\"module\", context_module, this.level.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext_module = context_module.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(this.level.definition_module) {\r\n\t\t\t\t\t\tcontext_module = this.level.definition_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontext_module = \"user\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tatom.context_module = context_module;\r\n\t\t\t\tif(atom.indicator === \",/2\") {\r\n\t\t\t\t\tthis.prepend([new State(\r\n\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\":\", [new Term(context_module), atom.args[0]]),\r\n\t\t\t\t\t\t\tnew Term(\":\", [new Term(context_module), atom.args[1]])])),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.__call_indicator = atom.indicator;\r\n\t\t\t\tvar get_module = this.lookup_module(atom, context_module);\r\n\t\t\t\tatom.definition_module = pl.type.is_module(get_module) ? get_module.id : \"user\";\r\n\t\t\t\tthis.expand_meta_predicate(atom, atom.definition_module, context_module);\r\n\t\t\t\tvar clauses = null;\r\n\t\t\t\tif(get_module && atom.args.length > 0 && atom.args[0].index && get_module.indexed_clauses.hasOwnProperty(atom.indicator) && get_module.indexed_clauses[atom.indicator].hasOwnProperty(atom.args[0].index))\r\n\t\t\t\t\tclauses = get_module.indexed_clauses[atom.indicator][atom.args[0].index];\r\n\t\t\t\telse\r\n\t\t\t\t\tclauses = get_module === null ? null : get_module.rules[atom.indicator];\r\n\t\t\t\tif(clauses === null) {\r\n\t\t\t\t\tif(!this.session.modules.user.rules.hasOwnProperty(atom.indicator)) {\r\n\t\t\t\t\t\tif(this.get_flag(\"unknown\").id === \"error\") {\r\n\t\t\t\t\t\t\tthis.throw_error( pl.error.existence( \"procedure\", atom.indicator, this.level.indicator));\r\n\t\t\t\t\t\t} else if(this.get_flag(\"unknown\").id === \"warning\") {\r\n\t\t\t\t\t\t\tthis.throw_warning(\"unknown procedure \" + atom.indicator + \" (from \" + this.level.indicator + \")\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(clauses instanceof Function) {\r\n\t\t\t\t\tasyn = clauses(this, point, atom);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Goal expansion\r\n\t\t\t\t\tif(this.__goal_expansion && atom.indicator === \"goal_expansion/2\")\r\n\t\t\t\t\t\tclauses = clauses.concat(pl.builtin.rules[\"goal_expansion/2\"]);\r\n\t\t\t\t\tfor(var i = 0; i < clauses.length; i++) {\r\n\t\t\t\t\t\tthis.session.renamed_variables = {};\r\n\t\t\t\t\t\tvar clause = clauses[i].rename(this);\r\n\t\t\t\t\t\tvar occurs_check = this.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\t\tvar mgu = pl.unify(atom, clause.head, occurs_check);\r\n\t\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\t\tvar state = new State();\r\n\t\t\t\t\t\t\tstate.goal = point.goal.replace(clause.body);\r\n\t\t\t\t\t\t\tif(state.goal !== null)\r\n\t\t\t\t\t\t\t\tstate.goal = state.goal.apply(mgu);\r\n\t\t\t\t\t\t\tstate.substitution = point.substitution.apply(mgu);\r\n\t\t\t\t\t\t\tstate.parent = point;\r\n\t\t\t\t\t\t\tstates.push(state);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.prepend(states);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar term = pl.type.is_term(atom) && atom.indicator === \":/2\" ? atom.args[1] : atom;\r\n\t\t\tif(pl.type.is_variable(term))\r\n\t\t\t\tthis.throw_error(pl.error.instantiation(this.level.indicator));\r\n\t\t\telse\r\n\t\t\t\tthis.throw_error(pl.error.type(\"callable\", term, this.level.indicator));\r\n\t\t}\r\n\t\treturn asyn;\r\n\t};\r\n\t\r\n\t// Find next computed answer\r\n\tSession.prototype.answer = function(options) {\r\n\t\treturn this.thread.answer(options);\r\n\t};\r\n\tThread.prototype.answer = function(options) {\r\n\t\tvar opts = {};\r\n\t\toptions = options || function() {};\r\n\t\tif(typeof options === \"function\") {\r\n\t\t\topts = {\r\n\t\t\t\tsuccess: options,\r\n\t\t\t\terror: options,\r\n\t\t\t\tfail: options,\r\n\t\t\t\tlimit: options\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\topts.success = options.success === undefined ? function() {} : options.success;\r\n\t\t\topts.error = options.error === undefined ? function() {} : options.error;\r\n\t\t\topts.fail = options.fail === undefined ? function() {} : options.fail;\r\n\t\t\topts.limit = options.limit === undefined ? function() {} : options.limit;\r\n\t\t}\r\n\t\tthis.__calls.push(opts);\r\n\t\tif( this.__calls.length > 1 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.again();\r\n\t};\r\n\t\r\n\t// Find all computed answers\r\n\tSession.prototype.answers = function( callback, max, after ) {\r\n\t\treturn this.thread.answers( callback, max, after );\r\n\t}\r\n\tThread.prototype.answers = function( callback, max, after ) {\r\n\t\tvar answers = max === undefined ? 1000 : max;\r\n\t\tvar thread = this;\r\n\t\tif( answers <= 0 ) {\r\n\t\t\tif(after)\r\n\t\t\t\tafter();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.answer( function( answer ) {\r\n\t\t\tcallback( answer );\r\n\t\t\tif( answer !== false ) {\r\n\t\t\t\tsetTimeout( function() {\r\n\t\t\t\t\tthread.answers( callback, answers-1, after );\r\n\t\t\t\t}, 0 );\r\n\t\t\t} else if(after) {\r\n\t\t\t\tafter();\r\n\t\t\t}\r\n\t\t} );\r\n\t};\r\n\r\n\t// Again finding next computed answer\r\n\tSession.prototype.again = function(reset_limit) {\r\n\t\treturn this.thread.again(reset_limit);\r\n\t};\r\n\tThread.prototype.again = function(reset_limit) {\r\n\t\twhile(this.__calls.length > 0) {\r\n\t\t\tthis.warnings = [];\r\n\t\t\tif(reset_limit !== false)\r\n\t\t\t\tthis.current_limit = this.session.limit;\r\n\t\t\twhile((!this.has_limit || this.current_limit > 0) && this.points.length > 0 && this.head_point().goal !== null && !pl.type.is_error_state(this.head_point())) {\r\n\t\t\t\tif(this.has_limit)\r\n\t\t\t\t\tthis.current_limit--;\r\n\t\t\t\tvar t0 = Date.now();\r\n\t\t\t\tvar asyn = this.step();\r\n\t\t\t\tvar t1 = Date.now();\r\n\t\t\t\tthis.cpu_time += t1-t0;\r\n\t\t\t\tif(asyn === true)\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar call = this.__calls.shift();\r\n\t\t\t// limit of inferences\r\n\t\t\tif(this.has_limit && this.current_limit <= 0) {\r\n\t\t\t\t(function(call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.limit(null);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(call);\r\n\t\t\t// no answer\r\n\t\t\t} else if(this.points.length === 0) {\r\n\t\t\t\t(function(call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.fail(false);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(call);\r\n\t\t\t// error\r\n\t\t\t} else if(pl.type.is_error(this.head_point().goal)) {\r\n\t\t\t\tvar error = this.format_error(this.points.pop());\r\n\t\t\t\tthis.points = [];\r\n\t\t\t\t(function(error, call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.error(error);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(error, call);\r\n\t\t\t// computed answer\r\n\t\t\t} else {\r\n\t\t\t\tif(this.debugger)\r\n\t\t\t\t\tthis.debugger_states.push(this.head_point());\r\n\t\t\t\tvar answer = this.format_success(this.points.pop());\r\n\t\t\t\t(function(answer, call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.success(answer);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(answer, call);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Unfolding transformation\r\n\tSession.prototype.unfold = function( rule ) {\r\n\t\tif(rule.body === null)\r\n\t\t\treturn false;\r\n\t\tvar head = rule.head;\r\n\t\tvar body = rule.body;\r\n\t\tvar atom = body.select();\r\n\t\tvar thread = new Thread( this );\r\n\t\tvar unfolded = [];\r\n\t\tthread.add_goal( atom );\r\n\t\tthread.step();\r\n\t\tfor( var i = thread.points.length-1; i >= 0; i-- ) {\r\n\t\t\tvar point = thread.points[i];\r\n\t\t\tvar head2 = head.apply( point.substitution );\r\n\t\t\tvar body2 = body.replace( point.goal );\r\n\t\t\tif( body2 !== null )\r\n\t\t\t\tbody2 = body2.apply( point.substitution );\r\n\t\t\tunfolded.push( new Rule( head2, body2 ) );\r\n\t\t}\r\n\t\tvar rules = this.modules.user.rules[head.indicator];\r\n\t\tvar index = indexOf( rules, rule );\r\n\t\tif( unfolded.length > 0 && index !== -1 ) {\r\n\t\t\trules.splice.apply( rules, [index, 1].concat(unfolded) );\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tThread.prototype.unfold = function(rule) {\r\n\t\treturn this.session.unfold(rule);\r\n\t};\r\n\r\n\t\r\n\t\r\n\t// INTERPRET EXPRESSIONS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.interpret = function( thread ) {\r\n\t\treturn pl.error.instantiation( thread.level.indicator );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.interpret = function( thread ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.interpret = function( thread ) {\r\n\t\tif( pl.type.is_unitary_list( this ) ) {\r\n\t\t\treturn this.args[0].interpret( thread );\r\n\t\t} else {\r\n\t\t\treturn pl.operate( thread, this );\r\n\t\t}\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPARE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.compare = function( obj ) {\r\n\t\tif( this.id < obj.id ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.id > obj.id ) {\r\n\t\t\treturn 1;\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.compare = function( obj ) {\r\n\t\tif( this.value === obj.value && this.is_float === obj.is_float ) {\r\n\t\t\treturn 0;\r\n\t\t} else if( this.value < obj.value || this.value === obj.value && this.is_float && !obj.is_float ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.value > obj.value ) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.compare = function( obj ) {\r\n\t\tif( this.args.length < obj.args.length || this.args.length === obj.args.length && this.id < obj.id ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.args.length > obj.args.length || this.args.length === obj.args.length && this.id > obj.id ) {\r\n\t\t\treturn 1;\r\n\t\t} else {\r\n\t\t\tfor( var i = 0; i < this.args.length; i++ ) {\r\n\t\t\t\tvar arg = pl.compare( this.args[i], obj.args[i] );\r\n\t\t\t\tif( arg !== 0 ) {\r\n\t\t\t\t\treturn arg;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// SUBSTITUTIONS\r\n\t\r\n\t// Lookup variable\r\n\tSubstitution.prototype.lookup = function( variable ) {\r\n\t\tif( this.links[variable] ) {\r\n\t\t\treturn this.links[variable];\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Filter variables\r\n\tSubstitution.prototype.filter = function( predicate ) {\r\n\t\tvar links = {};\r\n\t\tfor( var id in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(id)) continue;\r\n\t\t\tvar value = this.links[id];\r\n\t\t\tif( predicate( id, value ) ) {\r\n\t\t\t\tlinks[id] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, this.attrs );\r\n\t};\r\n\t\r\n\t// Exclude variables\r\n\tSubstitution.prototype.exclude = function( variables ) {\r\n\t\tvar links = {};\r\n\t\tfor( var variable in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(variable)) continue;\r\n\t\t\tif( indexOf( variables, variable ) === -1 ) {\r\n\t\t\t\tlinks[variable] = this.links[variable];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, this.attrs );\r\n\t};\r\n\t\r\n\t// Add link\r\n\tSubstitution.prototype.add = function( variable, value ) {\r\n\t\tthis.links[variable] = value;\r\n\t};\r\n\t\r\n\t// Get domain\r\n\tSubstitution.prototype.domain = function( plain ) {\r\n\t\tvar f = plain === true ? function(x){return x;} : function(x){return new Var(x);};\r\n\t\tvar vars = [];\r\n\t\tfor( var x in this.links )\r\n\t\t\tvars.push( f(x) );\r\n\t\treturn vars;\r\n\t};\r\n\r\n\t// Get an attribute\r\n\tSubstitution.prototype.get_attribute = function( variable, module ) {\r\n\t\tif( this.attrs[variable] )\r\n\t\t\treturn this.attrs[variable][module];\r\n\t}\r\n\r\n\t// Set an attribute (in a new substitution)\r\n\tSubstitution.prototype.set_attribute = function( variable, module, value ) {\r\n\t\tvar subs = new Substitution( this.links );\r\n\t\tfor( var v in this.attrs ) {\r\n\t\t\tif( v === variable ) {\r\n\t\t\t\tsubs.attrs[v] = {};\r\n\t\t\t\tfor( var m in this.attrs[v] ) {\r\n\t\t\t\t\tsubs.attrs[v][m] = this.attrs[v][m];\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tsubs.attrs[v] = this.attrs[v];\r\n\t\t\t}\r\n\t\t}\r\n\t\tif( !subs.attrs[variable] ) {\r\n\t\t\tsubs.attrs[variable] = {};\r\n\t\t}\r\n\t\tsubs.attrs[variable][module] = value;\r\n\t\treturn subs;\r\n\t}\r\n\r\n\t// Check if a variables has attributes\r\n\tSubstitution.prototype.has_attributes = function( variable ) {\r\n\t\treturn this.attrs[variable] && this.attrs[variable] !== {};\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\t// GENERATE JAVASCRIPT CODE FROM PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Var(\"' + this.id.toString() + '\")';\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Num(' + this.value.toString() + ', ' + this.is_float.toString() + ')';\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Term(\"' + this.id.replace(/\"/g, '\\\\\"') + '\", [' + map( this.args, function( arg ) {\r\n\t\t\treturn arg.compile();\r\n\t\t} ) + '])';\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Rule(' + this.head.compile() + ', ' + (this.body === null ? 'null' : this.body.compile()) + ')';\r\n\t};\r\n\t\r\n\t// Sessions\r\n\tSession.prototype.compile = function() {\r\n\t\tvar str, obj = [], rules;\r\n\t\tfor( var _indicator in this.modules.user.rules ) {\r\n\t\t\tif(!this.modules.user.rules.hasOwnProperty(_indicator)) continue;\r\n\t\t\tvar indicator = this.modules.user.rules[_indicator];\r\n\t\t\trules = [];\r\n\t\t\tstr = \"\\\"\" + _indicator + \"\\\": [\";\r\n\t\t\tfor(var i = 0; i < indicator.length; i++) {\r\n\t\t\t\trules.push(indicator[i].compile());\r\n\t\t\t}\r\n\t\t\tstr += rules.join();\r\n\t\t\tstr += \"]\";\r\n\t\t\tobj.push( str );\r\n\t\t}\r\n\t\treturn \"{\" + obj.join() + \"};\";\r\n\t};\r\n\r\n\t// Module\r\n\tModule.prototype.compile = function() {\r\n\t\tvar length = 0;\r\n\t\tvar dependencies = 0;\r\n\t\tvar str = \"var pl;\\n\";\r\n\t\tstr += \"(function(pl) {\\n\";\r\n\t\t// name\r\n\t\tstr += \"\\tvar name = \\\"\" + this.id + \"\\\";\\n\";\r\n\t\t// predicates\r\n\t\tstr += \"\\tvar predicates = function() {\\n\";\r\n\t\tstr += \"\\t\\treturn {\\n\";\r\n\t\tfor(var prop in this.rules) {\r\n\t\t\tif(length > 0)\r\n\t\t\t\tstr += \",\\n\";\r\n\t\t\tstr += \"\\t\\t\\t\\\"\" + prop + \"\\\": \";\r\n\t\t\tif(typeof this.rules[prop] === \"function\") {\r\n\t\t\t\tstr += this.rules[prop];\r\n\t\t\t} else {\r\n\t\t\t\tstr += \"[\\n\";\r\n\t\t\t\tfor(var i = 0; i < this.rules[prop].length; i++) {\r\n\t\t\t\t\tstr += \"\\t\\t\\t\\t\" + this.rules[prop][i].compile();\r\n\t\t\t\t\tif(i < this.rules[prop].length-1)\r\n\t\t\t\t\t\tstr += \",\";\r\n\t\t\t\t\tstr += \"\\n\";\r\n\t\t\t\t}\r\n\t\t\t\tstr += \"\\t\\t\\t]\";\r\n\t\t\t}\r\n\t\t\tlength++;\r\n\t\t}\r\n\t\tstr += \"\\n\\t\\t};\\n\";\r\n\t\tstr += \"\\t};\\n\";\r\n\t\t// exports\r\n\t\tstr += \"\\tvar exports = [\";\r\n\t\tfor(var i = 0; i < this.exports.length; i++) {\r\n\t\t\tif(i > 0)\r\n\t\t\t\tstr += \", \";\r\n\t\t\tstr += \"\\\"\" + this.exports[i] + \"\\\"\";\r\n\t\t}\r\n\t\tstr += \"];\\n\";\r\n\t\t// options\r\n\t\tstr += \"\\tvar options = function() {\\n\";\r\n\t\tstr += \"\\t\\treturn {\\n\";\r\n\t\t// dependencies\r\n\t\tstr += \"\\t\\t\\tdependencies: [\";\r\n\t\tfor(var prop in this.modules) {\r\n\t\t\tif(dependencies > 0)\r\n\t\t\t\tstr += \", \";\r\n\t\t\tstr += \"\\\"\" + prop + \"\\\"\";\r\n\t\t\tdependencies++;\r\n\t\t}\r\n\t\tstr += \"]\\n\";\r\n\t\tstr += \"\\t\\t};\\n\";\r\n\t\tstr += \"};\\n\";\r\n\t\t// fixed code\r\n\t\tstr += \"\\tif(typeof module !== 'undefined') {\\n\";\r\n\t\tstr += \"\\t\\tmodule.exports = function(p) {\\n\";\r\n\t\tstr += \"\\t\\t\\tpl = p;\\n\";\r\n\t\tstr += \"\\t\\t\\tnew pl.type.Module(name, predicates(), exports, options());\\n\";\r\n\t\tstr += \"\\t\\t};\\n\";\r\n\t\tstr += \"\\t} else {\\n\";\r\n\t\tstr += \"\\t\\tnew pl.type.Module(name, predicates(), exports, options());\\n\";\r\n\t\tstr += \"\\t}\\n\";\r\n\t\tstr += \"})(pl);\\n\";\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG TO JAVASCRIPT\r\n\tVar.prototype.toJavaScript = function() {\r\n\t\treturn this.toString();\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.toJavaScript = function() {\r\n\t\treturn this.value;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.toJavaScript = function(options) {\r\n\t\t// Atom => String\r\n\t\tif( this.args.length === 0 && this.indicator !== \"[]/0\" ) {\r\n\t\t\treturn this.toString(options);\r\n\t\t} else if( pl.type.is_list( this ) ) {\r\n\t\t\t// List => Array\r\n\t\t\tvar all_obj = true;\r\n\t\t\tvar arr = [];\r\n\t\t\tvar obj = {};\r\n\t\t\tvar pointer = this;\r\n\t\t\tvar value;\r\n\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\tvalue = pointer.args[0].toJavaScript(options);\r\n\t\t\t\tarr.push( value );\r\n\t\t\t\tall_obj = all_obj && pl.type.is_term(pointer.args[0]) && pointer.args[0].indicator === \"-/2\" && pl.type.is_atom(pointer.args[0].args[0]);\r\n\t\t\t\tif(all_obj)\r\n\t\t\t\t\tobj[pointer.args[0].args[0].id] = pointer.args[0].args[1].toJavaScript(options);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tif( pointer.indicator === \"[]/0\" )\r\n\t\t\t\treturn all_obj && arr.length > 0 ? obj : arr;\r\n\r\n\t\t}\r\n\t\treturn this.toString(options);\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// RULES\r\n\t\r\n\t// Return singleton variables in the session\r\n\tRule.prototype.singleton_variables = function(include_named) {\r\n\t\tinclude_named = include_named || false;\r\n\t\tvar variables = this.head.variables();\r\n\t\tvar count = {};\r\n\t\tvar singleton = [];\r\n\t\tif(this.body !== null)\r\n\t\t\tvariables = variables.concat(this.body.variables());\r\n\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\tif(count[variables[i]] === undefined)\r\n\t\t\t\tcount[variables[i]] = 0;\r\n\t\t\tcount[variables[i]]++;\r\n\t\t}\r\n\t\tfor(var key in count) {\r\n\t\t\tif(!count.hasOwnProperty(key))\r\n\t\t\t\tcontinue;\r\n\t\t\tif(count[key] === 1) {\r\n\t\t\t\tvar charcode = codePointAt(key, 1);\r\n\t\t\t\tif(!include_named || key === \"_\")\r\n\t\t\t\t\tif(key === \"_\" || key[0] === \"_\" && (charcode === 95 || charcode >= 65 && charcode <= 90))\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\tsingleton.push(key);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn singleton;\r\n\t};\r\n\r\n\r\n\r\n\t// NODEJS\r\n\r\n\tvar nodejs_flag = typeof process !== 'undefined' && !process.browser\r\n\r\n\tvar nodejs_arguments = nodejs_flag ?\r\n\t\tarrayToList( map(process.argv.slice(1), function(arg) { return new Term( arg ); })) :\r\n\t\tnew Term(\"[]\", []);\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG\r\n\r\n\tvar pl = {\r\n\t\t\r\n\t\t// Environment\r\n\t\t__env: nodejs_flag ? global : window,\r\n\t\t\r\n\t\t// Modules\r\n\t\tmodules: {},\r\n\t\t\r\n\t\t// Version\r\n\t\tversion: version,\r\n\t\t\r\n\t\t// Parser\r\n\t\tparser: {\r\n\t\t\ttokenizer: Tokenizer,\r\n\t\t\texpression: parseExpr\r\n\t\t},\r\n\t\t\r\n\t\t// Utils\r\n\t\tutils: {\r\n\t\t\t\r\n\t\t\t// String to indicator\r\n\t\t\tstr_indicator: str_indicator,\r\n\t\t\t// Code point at\r\n\t\t\tcodePointAt: codePointAt,\r\n\t\t\t// From code point\r\n\t\t\tfromCodePoint: fromCodePoint,\r\n\t\t\t// Length of string\r\n\t\t\tstringLength: stringLength\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Statistics\r\n\t\tstatistics: {\r\n\t\t\t\r\n\t\t\t// Number of created terms\r\n\t\t\tgetCountTerms: function() {\r\n\t\t\t\treturn term_ref;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// JavaScript to Prolog\r\n\t\tfromJavaScript: {\r\n\t\t\t\r\n\t\t\t// Type testing\r\n\t\t\ttest: {\r\n\t\t\t\t\r\n\t\t\t\t// Boolean\r\n\t\t\t\tboolean: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj === true || obj === false;\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Number\r\n\t\t\t\tnumber: function( obj, tobj ) {\r\n\t\t\t\t\treturn typeof obj === \"number\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// String\r\n\t\t\t\tstring: function( obj, tobj ) {\r\n\t\t\t\t\treturn typeof obj === \"string\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// List\r\n\t\t\t\tlist: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj instanceof Array;\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Variable\r\n\t\t\t\tvariable: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj === undefined;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Object\r\n\t\t\t\tobject: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\treturn tobj && !(obj instanceof Array) && typeof obj === \"object\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Any\r\n\t\t\t\tany: function( _, tobj ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Function conversion\r\n\t\t\tconversion: {\r\n\t\t\t\t\r\n\t\t\t\t// Bolean\r\n\t\t\t\tboolean: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Term( obj ? \"true\" : \"false\", [] );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Number\r\n\t\t\t\tnumber: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Num( obj, obj % 1 !== 0 );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// String\r\n\t\t\t\tstring: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Term( obj, [] );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// List\r\n\t\t\t\tlist: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\tvar arr = [];\r\n\t\t\t\t\tvar elem;\r\n\t\t\t\t\tfor( var i = 0; i < obj.length; i++ ) {\r\n\t\t\t\t\t\telem = pl.fromJavaScript.apply( obj[i], tobj );\r\n\t\t\t\t\t\tif( elem === undefined )\r\n\t\t\t\t\t\t\treturn undefined;\r\n\t\t\t\t\t\tarr.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn arrayToList( arr );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Variable\r\n\t\t\t\tvariable: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Var( \"_\" );\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Object\r\n\t\t\t\tobject: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\tvar list = new Term(\"[]\", []);\r\n\t\t\t\t\tvar arr = [];\r\n\t\t\t\t\tfor(var prop in obj) {\r\n\t\t\t\t\t\tif(!obj.hasOwnProperty(prop)) continue;\r\n\t\t\t\t\t\tarr.push(new Term(\"-\", [\r\n\t\t\t\t\t\t\tpl.fromJavaScript.apply(prop, tobj),\r\n\t\t\t\t\t\t\tpl.fromJavaScript.apply(obj[prop], tobj)\r\n\t\t\t\t\t\t]));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn arrayToList(arr);\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Any\r\n\t\t\t\tany: function( obj, tobj ) {\r\n\t\t\t\t\treturn undefined;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Transform object\r\n\t\t\tapply: function( obj, tobj ) {\r\n\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\tfor( var i in pl.fromJavaScript.test )\r\n\t\t\t\t\tif( i !== \"any\" && pl.fromJavaScript.test[i]( obj, tobj ) )\r\n\t\t\t\t\t\treturn pl.fromJavaScript.conversion[i]( obj, tobj );\r\n\t\t\t\treturn pl.fromJavaScript.conversion.any( obj, tobj );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Types\r\n\t\ttype: {\r\n\t\t\t\r\n\t\t\t// Objects\r\n\t\t\tVar: Var,\r\n\t\t\tNum: Num,\r\n\t\t\tTerm: Term,\r\n\t\t\tRule: Rule,\r\n\t\t\tState: State,\r\n\t\t\tStream: Stream,\r\n\t\t\tModule: Module,\r\n\t\t\tThread: Thread,\r\n\t\t\tSession: Session,\r\n\t\t\tSubstitution: Substitution,\r\n\t\t\tFile: TauFile,\r\n\t\t\tDirectory: TauDirectory,\r\n\t\t\t\r\n\t\t\t// Order\r\n\t\t\torder: [Var, Num, Term, Stream],\r\n\t\t\t\r\n\t\t\t// Compare types\r\n\t\t\tcompare: function( x, y ) {\r\n\t\t\t\tvar ord_x = indexOf( pl.type.order, x.constructor );\r\n\t\t\t\tvar ord_y = indexOf( pl.type.order, y.constructor );\r\n\t\t\t\tif( ord_x < ord_y ) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else if( ord_x > ord_y ) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif( x.constructor === Num )\r\n\t\t\t\t\t\tif( x.is_float && y.is_float )\r\n\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\telse if( x.is_float )\r\n\t\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t\telse if( y.is_float )\r\n\t\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a substitution\r\n\t\t\tis_substitution: function( obj ) {\r\n\t\t\t\treturn obj instanceof Substitution;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a state\r\n\t\t\tis_state: function( obj ) {\r\n\t\t\t\treturn obj instanceof State;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a rule\r\n\t\t\tis_rule: function( obj ) {\r\n\t\t\t\treturn obj instanceof Rule;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a variable\r\n\t\t\tis_variable: function( obj ) {\r\n\t\t\t\treturn obj instanceof Var;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream\r\n\t\t\tis_stream: function( obj ) {\r\n\t\t\t\treturn obj instanceof Stream;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an anonymous variable\r\n\t\t\tis_anonymous_var: function( obj ) {\r\n\t\t\t\treturn obj instanceof Var && obj.id === \"_\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a callable term\r\n\t\t\tis_callable: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term\r\n\t\t\t\t&& (indexOf([\",/2\",\";/2\",\"->/2\"], obj.indicator) === -1\r\n\t\t\t\t|| pl.type.is_callable(obj.args[0]) && pl.type.is_callable(obj.args[1]))\r\n\t\t\t\t|| obj instanceof Var;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a number\r\n\t\t\tis_number: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an integer\r\n\t\t\tis_integer: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a float\r\n\t\t\tis_float: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && obj.is_float;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a term\r\n\t\t\tis_term: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an atom\r\n\t\t\tis_atom: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a ground term\r\n\t\t\tis_ground: function( obj ) {\r\n\t\t\t\tif( obj instanceof Var ) return false;\r\n\t\t\t\tif( obj instanceof Term )\r\n\t\t\t\t\tfor( var i = 0; i < obj.args.length; i++ )\r\n\t\t\t\t\t\tif( !pl.type.is_ground( obj.args[i] ) )\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\treturn true;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is atomic\r\n\t\t\tis_atomic: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 || obj instanceof Num;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is compound\r\n\t\t\tis_compound: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length > 0;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a list\r\n\t\t\tis_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (obj.indicator === \"[]/0\" || obj.indicator === \"./2\");\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an empty list\r\n\t\t\tis_empty_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a non empty list\r\n\t\t\tis_non_empty_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"./2\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a fully list\r\n\t\t\tis_fully_list: function( obj ) {\r\n\t\t\t\twhile( obj instanceof Term && obj.indicator === \"./2\" ) {\r\n\t\t\t\t\tobj = obj.args[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn obj instanceof Var || obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a instantiated list\r\n\t\t\tis_instantiated_list: function( obj ) {\r\n\t\t\t\twhile( obj instanceof Term && obj.indicator === \"./2\" ) {\r\n\t\t\t\t\tobj = obj.args[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an unitary list\r\n\t\t\tis_unitary_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"./2\" && obj.args[1] instanceof Term && obj.args[1].indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a character\r\n\t\t\tis_character: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 && (obj.id.length === 1 || obj.id.length > 0 && obj.id.length <= 2 && codePointAt( obj.id, 0 ) >= 65536);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a in_character\r\n\t\t\tis_in_character: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (obj.indicator === \"end_of_file/0\"\r\n\t\t\t\t|| obj.id.length === 1\r\n\t\t\t\t|| obj.id.length > 0 && obj.id.length <= 2 && codePointAt(obj.id, 0) >= 65536);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a character_code\r\n\t\t\tis_character_code: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 1114111;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a in_character_code\r\n\t\t\tis_in_character_code: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 1114111;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a byte\r\n\t\t\tis_byte: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 255;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a in_byte\r\n\t\t\tis_in_byte: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 255;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an operator\r\n\t\t\tis_operator: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && pl.arithmetic.evaluation[obj.indicator];\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a directive\r\n\t\t\tis_directive: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (pl.directive[obj.indicator] !== undefined || pl.directive[obj.id + \"/*\"] !== undefined);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a built-in predicate\r\n\t\t\tis_builtin: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && pl.builtin.rules.hasOwnProperty(obj.indicator) && obj.indicator !== \"goal_expansion/2\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an error\r\n\t\t\tis_error: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"throw/1\";\r\n\t\t\t},\r\n\r\n\t\t\t// Is an error state\r\n\t\t\tis_error_state: function( obj ) {\r\n\t\t\t\treturn pl.type.is_state( obj ) && obj.error && obj.error === true;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a predicate indicator\r\n\t\t\tis_predicate_indicator: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"//2\" && obj.args[0] instanceof Term && obj.args[0].args.length === 0 && obj.args[1] instanceof Num && obj.args[1].is_float === false;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a flag\r\n\t\t\tis_flag: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 && pl.flag[obj.id] !== undefined;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a valid value for a flag\r\n\t\t\tis_value_flag: function( flag, obj ) {\r\n\t\t\t\tif( !pl.type.is_flag( flag ) ) return false;\r\n\t\t\t\tfor( var value in pl.flag[flag.id].allowed ) {\r\n\t\t\t\t\tif(!pl.flag[flag.id].allowed.hasOwnProperty(value)) continue;\r\n\t\t\t\t\tif( pl.flag[flag.id].allowed[value].equals( obj ) ) return true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a io mode\r\n\t\t\tis_io_mode: function( obj ) {\r\n\t\t\t\treturn pl.type.is_atom( obj ) && [\"read\",\"write\",\"append\"].indexOf( obj.id ) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream option\r\n\t\t\tis_stream_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"alias/1\" && pl.type.is_atom(obj.args[0]) ||\r\n\t\t\t\t\tobj.indicator === \"reposition/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"type/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"text\" || obj.args[0].id === \"binary\") ||\r\n\t\t\t\t\tobj.indicator === \"eof_action/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"error\" || obj.args[0].id === \"eof_code\" || obj.args[0].id === \"reset\")\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream position\r\n\t\t\tis_stream_position: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term(obj) && (\r\n\t\t\t\t\tobj.indicator === \"end_of_stream/0\" ||\r\n\t\t\t\t\tobj.indicator === \"past_end_of_stream/0\" ||\r\n\t\t\t\t\tobj.indicator === \"position/3\"\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[0])\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[1])\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[2])\r\n\t\t\t\t)\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream property\r\n\t\t\tis_stream_property: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"input/0\" || \r\n\t\t\t\t\tobj.indicator === \"output/0\" || \r\n\t\t\t\t\tobj.indicator === \"alias/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) ||\r\n\t\t\t\t\tobj.indicator === \"file_name/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) ||\r\n\t\t\t\t\tobj.indicator === \"reposition/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\")) ||\r\n\t\t\t\t\tobj.indicator === \"type/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"text\" || obj.args[0].id === \"binary\")) ||\r\n\t\t\t\t\tobj.indicator === \"mode/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"read\" || obj.args[0].id === \"write\" || obj.args[0].id === \"append\")) ||\r\n\t\t\t\t\tobj.indicator === \"eof_action/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"error\" || obj.args[0].id === \"eof_code\" || obj.args[0].id === \"reset\")) ||\r\n\t\t\t\t\tobj.indicator === \"end_of_stream/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"at\" || obj.args[0].id === \"past\" || obj.args[0].id === \"not\")) ||\r\n\t\t\t\t\tobj.indicator === \"position/1\"\r\n\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0]) || pl.type.is_term(obj.args[0]) && obj.args[0].indicator === \"position/3\"\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[0]) || pl.type.is_integer(obj.args[0].args[0]))\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[1]) || pl.type.is_integer(obj.args[0].args[1]))\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[2]) || pl.type.is_integer(obj.args[0].args[2])))\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a streamable term\r\n\t\t\tis_streamable: function( obj ) {\r\n\t\t\t\treturn obj.__proto__.stream !== undefined;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a read option\r\n\t\t\tis_read_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && [\"variables/1\",\"variable_names/1\",\"singletons/1\"].indexOf( obj.indicator ) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a write option\r\n\t\t\tis_write_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"quoted/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"ignore_ops/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"numbervars/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"variable_names/1\" && pl.type.is_fully_list(obj.args[0])\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a close option\r\n\t\t\tis_close_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) &&\r\n\t\t\t\t\tobj.indicator === \"force/1\" &&\r\n\t\t\t\t\tpl.type.is_atom(obj.args[0]) &&\r\n\t\t\t\t\t(obj.args[0].id === \"true\" || obj.args[0].id === \"false\");\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a modifiable flag\r\n\t\t\tis_modifiable_flag: function( obj ) {\r\n\t\t\t\treturn pl.type.is_flag( obj ) && pl.flag[obj.id].changeable;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a module\r\n\t\t\tis_module: function( obj ) {\r\n\t\t\t\treturn obj instanceof Module;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a virtual file\r\n\t\t\tis_file: function( obj ) {\r\n\t\t\t\treturn obj instanceof TauFile;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a virtual directory\r\n\t\t\tis_directory: function( obj ) {\r\n\t\t\t\treturn obj instanceof TauDirectory;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a predicate property\r\n\t\t\tis_predicate_property: function(obj) {\r\n\t\t\t\treturn pl.type.is_term(obj) && (\r\n\t\t\t\t\tobj.indicator === \"built_in/0\" ||\r\n\t\t\t\t\tobj.indicator === \"static/0\" ||\r\n\t\t\t\t\tobj.indicator === \"dynamic/0\" ||\r\n\t\t\t\t\tobj.indicator === \"native_code/0\" ||\r\n\t\t\t\t\tobj.indicator === \"multifile/0\" ||\r\n\t\t\t\t\tobj.indicator === \"meta_predicate/1\"\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a meta-argument specifier\r\n\t\t\tis_meta_argument_specifier: function(obj) {\r\n\t\t\t\treturn pl.type.is_integer(obj) && obj.value >= 0 ||\r\n\t\t\t\t\tpl.type.is_atom(obj) && indexOf([\"+\", \"-\", \"?\", \"*\", \"^\", \":\", \"//\"], obj.id) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a time property\r\n\t\t\tis_time_property: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term(obj) && obj.args.length === 1 \r\n\t\t\t\t&& (pl.type.is_variable(obj.args[0]) || pl.type.is_integer(obj.args[0]))\r\n\t\t\t\t&& indexOf([\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\", \"weekday\"], obj.id) !== -1;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t},\r\n\r\n\t\t// Arithmetic functions\r\n\t\tarithmetic: {\r\n\t\t\t\r\n\t\t\t// Evaluation\r\n\t\t\tevaluation: {\r\n\t\t\t\t\"e/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Math.E; }\r\n\t\t\t\t},\r\n\t\t\t\t\"pi/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Math.PI; }\r\n\t\t\t\t},\r\n\t\t\t\t\"tau/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return 2*Math.PI; }\r\n\t\t\t\t},\r\n\t\t\t\t\"epsilon/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Number.EPSILON; }\r\n\t\t\t\t},\r\n\t\t\t\t\"+/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"-/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return -x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"\\\\/1\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return ~x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"abs/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.abs( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sign/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sign( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float_integer_part/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float_fractional_part/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return x - parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseFloat( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"floor/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.floor( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"truncate/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"round/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.round( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"ceiling/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.ceil( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sin/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sin( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"cos/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.cos( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"tan/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.tan( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"asin/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.asin(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"acos/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.acos(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atan/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.atan( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atan2/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x === 0 && y === 0 ? pl.error.evaluation(\"undefined\", thread.__call_indicator) : Math.atan2(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"acosh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x >= 1 ? Math.acosh(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"asinh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.asinh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atanh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) < 1 ? Math.atanh(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"cosh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.cosh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sinh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sinh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"tanh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.tanh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"exp/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.exp( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sqrt/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x >= 0 ? Math.sqrt( x ) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x > 0 ? Math.log( x ) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x > 0 && y > 0 ? Math.log(y)/Math.log(x) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log10/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x > 0 ? Math.log(x)/Math.log(10) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"+/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x + y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"-/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x - y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"*/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x * y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"//2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x / y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"///2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? Math.trunc( x / y ) : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"div/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? Math.floor( x / y ) : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"**/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation(\"zero_divisor\", thread.__call_indicator) : Math.pow(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"^/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation(\"zero_divisor\", thread.__call_indicator) : Math.pow(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"<>/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x >> y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"/\\\\/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x & y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"\\\\//2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x | y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"xor/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x ^ y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"rem/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x % y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"mod/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x - Math.floor( x / y ) * y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"max/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return Math.max( x, y ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"min/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return Math.min( x, y ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"gcd/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return gcd(x, y); }\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Directives\r\n\t\tdirective: {\r\n\t\t\t\r\n\t\t\t// dynamic/1\r\n\t\t\t\"dynamic/1\": function( thread, atom, options ) {\r\n\t\t\t\tvar indicators = atom.args[0];\r\n\t\t\t\tif(!pl.type.is_list(indicators))\r\n\t\t\t\t\tindicators = arrayToList([indicators]);\r\n\t\t\t\tvar pointer = indicators;\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tindicator = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( indicator ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_compound( indicator ) || indicator.indicator !== \"//2\" ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t\t} else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_atom( indicator.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", indicator.args[0], atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_integer( indicator.args[1] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", indicator.args[1], atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar key = indicator.args[0].id + \"/\" + indicator.args[1].value;\r\n\t\t\t\t\t\tvar get_module = thread.session.modules[options.context_module];\r\n\t\t\t\t\t\tget_module.public_predicates[key] = true;\r\n\t\t\t\t\t\tif( !get_module.rules[key] )\r\n\t\t\t\t\t\tget_module.rules[key] = [];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// dynamic/[2..]\r\n\t\t\t\"dynamic/*\": function( thread, atom ) {\r\n\t\t\t\tfor(var i = 0; i < atom.args.length; i++) {\r\n\t\t\t\t\tpl.directive[\"dynamic/1\"](thread, new Term(\"dynamic\", [atom.args[i]]));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// multifile/1\r\n\t\t\t\"multifile/1\": function( thread, atom, options ) {\r\n\t\t\t\tvar indicator = atom.args[0];\r\n\t\t\t\tif( pl.type.is_variable( indicator ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_compound( indicator ) || indicator.indicator !== \"//2\" ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t} else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( indicator.args[0] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", indicator.args[0], atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_integer( indicator.args[1] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", indicator.args[1], atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar predicate_indicator = atom.args[0].args[0].id + \"/\" + atom.args[0].args[1].value;\r\n\t\t\t\t\tvar get_module = thread.session.modules[options.context_module];\r\n\t\t\t\t\tget_module.multifile_predicates[predicate_indicator] = true;\r\n\t\t\t\t\tif(!get_module.rules.hasOwnProperty(predicate_indicator)) {\r\n\t\t\t\t\t\tget_module.rules[predicate_indicator] = [];\r\n\t\t\t\t\t\tget_module.public_predicates[predicate_indicator] = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// meta_predicate/1\r\n\t\t\t\"meta_predicate/1\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\tvar head = atom.args[0];\r\n\t\t\t\tif( pl.type.is_variable(head) ) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfor(var i = 0; i < head.args.length; i++) {\r\n\t\t\t\t\t\tvar arg = head.args[i];\r\n\t\t\t\t\t\tif(!pl.type.is_meta_argument_specifier(arg)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"meta_argument_specifier\", arg, atom.indicator));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.session.modules[options.context_module].meta_predicates[head.indicator] = head;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// set_prolog_flag\r\n\t\t\t\"set_prolog_flag/2\": function( thread, atom ) {\r\n\t\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\t\tif( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_flag( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_modifiable_flag( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.permission( \"modify\", \"flag\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_value_flag( flag, value ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.domain( \"flag_value\", new Term( \"+\", [flag, value] ), atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.session.flag[flag.id] = value;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// module/2\r\n\t\t\t\"module/2\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\toptions.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\t\t\tvar module_id = atom.args[0], exports = atom.args[1];\r\n\t\t\t\tif(pl.type.is_variable(module_id) || pl.type.is_variable(exports)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_atom(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"atom\", module_id, atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_list(exports)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"list\", exports, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id.indicator])) {\r\n\t\t\t\t\t\tvar pointer = exports;\r\n\t\t\t\t\t\tvar indicators = [];\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar predicate = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_predicate_indicator(predicate)) {\r\n\t\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"predicate_indicator\", predicate, atom.indicator));\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tindicators.push(predicate.args[0].id + \"/\" + predicate.args[1].value);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\t\t} else if(!pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"list\", exports, atom.indicator));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar new_module = new Module(module_id.id, {}, indicators, {\r\n\t\t\t\t\t\t\tsession: thread.session\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthread.session.modules[module_id.id] = new_module;\r\n\t\t\t\t\t\tthread.session.modules[options.context_module].modules[module_id.id] = new_module;\r\n\t\t\t\t\t\toptions.context_module = module_id.id;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_warning(pl.error.permission(\"create\", \"module\", module_id, atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// use_module/1\r\n\t\t\t\"use_module/1\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\toptions.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\t\t\tvar module_id = atom.args[0];\r\n\t\t\t\tif(pl.type.is_variable(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_term(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"term\", module_id, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(module_id.indicator === \"library/1\") {\r\n\t\t\t\t\t\tvar name = module_id.args[0].id;\r\n\t\t\t\t\t\tvar get_module = pl.modules[name];\r\n\t\t\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\t\t\tif(!thread.session.modules[options.context_module].modules.hasOwnProperty(name)) {\r\n\t\t\t\t\t\t\t\tthread.session.modules[name] = get_module;\r\n\t\t\t\t\t\t\t\tthread.session.modules[options.context_module].modules[name] = get_module;\r\n\t\t\t\t\t\t\t\tfor(var i = 0; i < get_module.dependencies.length; i++) {\r\n\t\t\t\t\t\t\t\t\tvar term = new Term(\"use_module\", [new Term(\"library\", [new Term(get_module.dependencies[i])])]);\r\n\t\t\t\t\t\t\t\t\tpl.directive[\"use_module/1\"](thread, term, {\r\n\t\t\t\t\t\t\t\t\t\tcontext_module: name\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.existence(\"module\", module_id, atom.indicator));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar name = module_id.id;\r\n\t\t\t\t\t\tthread.consult(name, {\r\n\t\t\t\t\t\t\tcontext_module: options.context_module,\r\n\t\t\t\t\t\t\ttext: false,\r\n\t\t\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\terror: function() {\r\n\t\t\t\t\t\t\t\toptions.error(pl.error.existence(\"module\", module_id, atom.indicator));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// char_conversion/2\r\n\t\t\t\"char_conversion/2\": function(thread, atom, options) {\r\n\t\t\t\tvar inchar = atom.args[0], outchar = atom.args[1];\r\n\t\t\t\tif(pl.type.is_variable(inchar) || pl.type.is_variable(outchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_character(inchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"character\", inchar, atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_character(outchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"character\", outchar, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(inchar.id === outchar.id) {\r\n\t\t\t\t\t\tdelete thread.session.__char_conversion[inchar.id];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.session.__char_conversion[inchar.id] = outchar.id;\r\n\t\t\t\t\t}\r\n\t\t\t\t\toptions.tokens = options.tokenizer.get_tokens(options.current_token);\r\n\t\t\t\t\toptions.current_token = 0;\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// op/3\r\n\t\t\t\"op/3\": function( thread, atom ) {\r\n\t\t\t\tvar priority = atom.args[0], type = atom.args[1], operators = atom.args[2];\r\n\t\t\t\tif(pl.type.is_atom(operators))\r\n\t\t\t\t\toperators = new Term(\".\", [operators, new Term(\"[]\")]);\r\n\t\t\t\tif( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_integer( priority ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( type ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", type, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_list( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t} else if( pl.type.is_empty_list( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operators, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar pointer = operators;\r\n\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\tvar operator = pointer.args[0];\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\tif( pl.type.is_variable( operator ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t} else if( !pl.type.is_atom( operator ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( priority.value < 0 || priority.value > 1200 ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \",\" ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"{}\" ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"[]\" ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"|\" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"].indexOf( type.id ) === -1 ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.domain( \"operator_specifier\", type, atom.indicator ) );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar fix = { prefix: null, infix: null, postfix: null };\r\n\t\t\t\t\t\t\tfor( var p in thread.session.__operators ) {\r\n\t\t\t\t\t\t\t\tif(!thread.session.__operators.hasOwnProperty(p)) continue;\r\n\t\t\t\t\t\t\t\tvar classes = thread.session.__operators[p][operator.id];\r\n\t\t\t\t\t\t\t\tif( classes ) {\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"fx\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fx\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"fy\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fy\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"xf\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"yf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"yf\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfx\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfy\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfy\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"yfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"yfx\" }; }\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar current_class;\r\n\t\t\t\t\t\t\tswitch( type.id ) {\r\n\t\t\t\t\t\t\t\tcase \"fy\": case \"fx\": current_class = \"prefix\"; break;\r\n\t\t\t\t\t\t\t\tcase \"yf\": case \"xf\": current_class = \"postfix\"; break;\r\n\t\t\t\t\t\t\t\tdefault: current_class = \"infix\"; break;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(fix.infix && current_class === \"postfix\" || fix.postfix && current_class === \"infix\") {\r\n\t\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif( fix[current_class] ) {\r\n\t\t\t\t\t\t\t\t\tremove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type );\r\n\t\t\t\t\t\t\t\t\tif( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) {\r\n\t\t\t\t\t\t\t\t\t\tdelete thread.session.__operators[fix[current_class].priority][operator.id];\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif( priority.value > 0 ) {\r\n\t\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {};\r\n\t\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = [];\r\n\t\t\t\t\t\t\t\t\tthread.session.__operators[priority.value][operator.id].push( type.id );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// initialization/1\r\n\t\t\t\"initialization/1\": function(thread, atom, options) {\r\n\t\t\t\tvar goal = atom.args[0];\r\n\t\t\t\toptions.initialization.push(goal);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Flags\r\n\t\tflag: {\r\n\t\t\t\r\n\t\t\t// Bounded numbers\r\n\t\t\tbounded: {\r\n\t\t\t\tallowed: [new Term( \"true\" ), new Term( \"false\" )],\r\n\t\t\t\tvalue: new Term( \"true\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Maximum integer\r\n\t\t\tmax_integer: {\r\n\t\t\t\tallowed: [new Num( Number.MAX_SAFE_INTEGER )],\r\n\t\t\t\tvalue: new Num( Number.MAX_SAFE_INTEGER ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Minimum integer\r\n\t\t\tmin_integer: {\r\n\t\t\t\tallowed: [new Num( Number.MIN_SAFE_INTEGER )],\r\n\t\t\t\tvalue: new Num( Number.MIN_SAFE_INTEGER ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Rounding function\r\n\t\t\tinteger_rounding_function: {\r\n\t\t\t\tallowed: [new Term( \"down\" ), new Term( \"toward_zero\" )],\r\n\t\t\t\tvalue: new Term( \"toward_zero\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Character conversion\r\n\t\t\tchar_conversion: {\r\n\t\t\t\tallowed: [new Term( \"on\" ), new Term( \"off\" )],\r\n\t\t\t\tvalue: new Term( \"on\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Debugger\r\n\t\t\tdebug: {\r\n\t\t\t\tallowed: [new Term( \"on\" ), new Term( \"off\" )],\r\n\t\t\t\tvalue: new Term( \"off\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Maximum arity of predicates\r\n\t\t\tmax_arity: {\r\n\t\t\t\tallowed: [new Term( \"unbounded\" )],\r\n\t\t\t\tvalue: new Term( \"unbounded\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Unkwnow predicates behavior\r\n\t\t\tunknown: {\r\n\t\t\t\tallowed: [new Term( \"error\" ), new Term( \"fail\" ), new Term( \"warning\" )],\r\n\t\t\t\tvalue: new Term( \"error\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Double quotes behavior\r\n\t\t\tdouble_quotes: {\r\n\t\t\t\tallowed: [new Term( \"chars\" ), new Term( \"codes\" ), new Term( \"atom\" )],\r\n\t\t\t\tvalue: new Term( \"chars\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Occurs check behavior\r\n\t\t\toccurs_check: {\r\n\t\t\t\tallowed: [new Term( \"false\" ), new Term( \"true\" )],\r\n\t\t\t\tvalue: new Term( \"false\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Dialect\r\n\t\t\tdialect: {\r\n\t\t\t\tallowed: [new Term( \"tau\" )],\r\n\t\t\t\tvalue: new Term( \"tau\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Version\r\n\t\t\tversion_data: {\r\n\t\t\t\tallowed: [new Term( \"tau\", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] )],\r\n\t\t\t\tvalue: new Term( \"tau\", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// NodeJS\r\n\t\t\tnodejs: {\r\n\t\t\t\tallowed: [new Term( \"true\" ), new Term( \"false\" )],\r\n\t\t\t\tvalue: new Term( nodejs_flag ? \"true\" : \"false\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\r\n\t\t\t// Arguments\r\n\t\t\targv: {\r\n\t\t\t\tallowed: [nodejs_arguments],\r\n\t\t\t\tvalue: nodejs_arguments,\r\n\t\t\t\tchangeble: false\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Unify\r\n\t\tunify: function(t1, t2, occurs_check) {\r\n\t\t\toccurs_check = occurs_check === undefined ? false : occurs_check;\r\n\t\t\tvar left = Array.isArray(t1) ? t1 : [t1];\r\n\t\t\tvar right = Array.isArray(t2) ? t2 : [t2];\r\n\t\t\tif(left.length !== right.length)\r\n\t\t\t\treturn null;\r\n\t\t\tvar subs = new Substitution();\r\n\t\t\twhile(left.length > 0) {\r\n\t\t\t\tvar s = left.pop();\r\n\t\t\t\tvar t = right.pop();\r\n\t\t\t\tif(pl.type.is_variable(s))\r\n\t\t\t\t\ts = s.apply(subs);\r\n\t\t\t\tif(pl.type.is_variable(t))\r\n\t\t\t\t\tt = t.apply(subs);\r\n\t\t\t\t// same object\r\n\t\t\t\tif(s == t)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t// compound terms\r\n\t\t\t\tif(pl.type.is_term(s) && pl.type.is_term(t)) {\r\n\t\t\t\t\tif(s.indicator !== t.indicator)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\tfor(var i = s.args.length-1; i >= 0; i--) {\r\n\t\t\t\t\t\tleft.push(s.args[i]);\r\n\t\t\t\t\t\tright.push(t.args[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t// numbers\r\n\t\t\t\t} else if(pl.type.is_number(s) && pl.type.is_number(t)) {\r\n\t\t\t\t\tif(s.value !== t.value || s.is_float !== t.is_float)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t// variable - term\r\n\t\t\t\t} else if(pl.type.is_variable(s)) {\r\n\t\t\t\t\tt = t.apply(subs);\r\n\t\t\t\t\t// x = x\r\n\t\t\t\t\tif(pl.type.is_variable(t) && s.id === t.id)\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t// occurs check\r\n\t\t\t\t\tif(occurs_check === true && indexOf(t.variables(), s.id) !== -1)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t// anonymous variable\r\n\t\t\t\t\tif(s.id !== \"_\")\r\n\t\t\t\t\t\tsubs.add(s.id, t);\r\n\t\t\t\t// term - variable\r\n\t\t\t\t} else if(pl.type.is_variable(t)) {\r\n\t\t\t\t\tleft.push(t);\r\n\t\t\t\t\tright.push(s);\r\n\t\t\t\t// user-defined terms\r\n\t\t\t\t} else if(s.unify !== undefined) {\r\n\t\t\t\t\tvar user_subs = s.apply(subs).unify(t.apply(subs), occurs_check);\r\n\t\t\t\t\tif(user_subs == null)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\tfor(var i in user_subs.links)\r\n\t\t\t\t\t\tsubs.add(i, user_subs.links[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn subs.apply(subs);\r\n\t\t},\r\n\r\n\t\t// Is rename\r\n\t\tis_rename: function(obj1, obj2, links) {\r\n\t\t\tlinks = links || {};\r\n\t\t\tif(obj1.is_rename && obj2.is_rename)\r\n\t\t\t\treturn obj1.is_rename(obj2, links);\r\n\t\t\telse if(obj1.equals && obj2.equals)\r\n\t\t\t\treturn obj1.equals(obj2);\r\n\t\t\telse\r\n\t\t\t\treturn false;\r\n\t\t},\r\n\t\t\r\n\t\t// Compare\r\n\t\tcompare: function( obj1, obj2 ) {\r\n\t\t\tvar type = pl.type.compare( obj1, obj2 );\r\n\t\t\treturn type !== 0 ? type : obj1.compare( obj2 );\r\n\t\t},\r\n\t\t\r\n\t\t// Arithmetic comparison\r\n\t\tarithmetic_compare: function( thread, obj1, obj2 ) {\r\n\t\t\tvar expr1 = obj1.interpret( thread );\r\n\t\t\tif( !pl.type.is_number( expr1 ) ) {\r\n\t\t\t\treturn expr1;\r\n\t\t\t} else {\r\n\t\t\t\tvar expr2 = obj2.interpret( thread );\r\n\t\t\t\tif( !pl.type.is_number( expr2 ) ) {\r\n\t\t\t\t\treturn expr2;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn expr1.value < expr2.value ? -1 : (expr1.value > expr2.value ? 1 : 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Operate\r\n\t\toperate: function( thread, obj ) {\r\n\t\t\tif( pl.type.is_operator( obj ) ) {\r\n\t\t\t\tvar op = pl.type.is_operator( obj );\r\n\t\t\t\tvar args = [], value;\r\n\t\t\t\tvar type = false;\r\n\t\t\t\tfor( var i = 0; i < obj.args.length; i++ ) {\r\n\t\t\t\t\tvalue = obj.args[i].interpret( thread );\r\n\t\t\t\t\tif( !pl.type.is_number( value ) ) {\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t} else if( op.type_args !== null && value.is_float !== op.type_args ) {\r\n\t\t\t\t\t\treturn pl.error.type( op.type_args ? \"float\" : \"integer\", value, thread.__call_indicator );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\targs.push( value.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttype = type || value.is_float;\r\n\t\t\t\t}\r\n\t\t\t\targs.push( thread );\r\n\t\t\t\tvalue = pl.arithmetic.evaluation[obj.indicator].fn.apply( this, args );\r\n\t\t\t\tif(obj.indicator === \"^/2\" && !type && value !== parseInt(value, 10))\r\n\t\t\t\t\treturn pl.error.type( \"float\", new Num(args[0],false), thread.__call_indicator );\r\n\t\t\t\ttype = op.type_result === null ? type : op.type_result;\r\n\t\t\t\tif( pl.type.is_term( value ) ) {\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t} else if( value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY ) {\r\n\t\t\t\t\treturn pl.error.evaluation( \"float_overflow\", thread.__call_indicator );\r\n\t\t\t\t} else if( type === false && thread.get_flag( \"bounded\" ).id === \"true\" && (value > thread.get_flag( \"max_integer\" ).value || value < thread.get_flag( \"min_integer\" ).value) ) {\r\n\t\t\t\t\treturn pl.error.evaluation( \"int_overflow\", thread.__call_indicator );\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Num( value, type );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn pl.error.type( \"evaluable\", str_indicator(obj.indicator), thread.__call_indicator );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Errors\r\n\t\terror: {\r\n\t\t\t\r\n\t\t\t// Existence error\r\n\t\t\texistence: function( type, object, indicator ) {\r\n\t\t\t\tif( typeof object === \"string\" )\r\n\t\t\t\t\tobject = str_indicator( object );\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"existence_error\", [new Term( type ), object] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Type error\r\n\t\t\ttype: function( expected, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"type_error\", [new Term( expected ), found] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Instantation error\r\n\t\t\tinstantiation: function( indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"instantiation_error\" ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Uninstantation error\r\n\t\t\tuninstantiation: function( found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"uninstantiation_error\", [new Term( found )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Domain error\r\n\t\t\tdomain: function( expected, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"domain_error\", [new Term( expected ), found]), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Representation error\r\n\t\t\trepresentation: function( flag, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"representation_error\", [new Term( flag )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Permission error\r\n\t\t\tpermission: function( operation, type, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"permission_error\", [new Term( operation ), new Term( type ), found] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Evaluation error\r\n\t\t\tevaluation: function( error, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"evaluation_error\", [new Term( error )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Syntax error\r\n\t\t\tsyntax: function( token, expected, last ) {\r\n\t\t\t\ttoken = token || {value: \"\", line: 0, column: 0, matches: [\"\"], start: 0};\r\n\t\t\t\tvar position = last && token.matches.length > 0 ? token.start + token.matches[0].length : token.start;\r\n\t\t\t\tvar found = last ? new Term(\"token_not_found\") : new Term(\"found\", [new Term(token.value.toString())]);\r\n\t\t\t\tvar info = new Term( \".\", [new Term( \"line\", [new Num(token.line+1)] ), new Term( \".\", [new Term( \"column\", [new Num(position)] ), new Term( \".\", [found, new Term( \"[]\", [] )] )] )] );\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"syntax_error\", [new Term( expected )] ), info] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Syntax error by predicate\r\n\t\t\tsyntax_by_predicate: function( expected, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"syntax_error\", [new Term( expected ) ] ), str_indicator( indicator )] );\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Warnings\r\n\t\twarning: {\r\n\t\t\t\r\n\t\t\t// Singleton variables\r\n\t\t\tsingleton: function( variables, rule, line ) {\r\n\t\t\t\tvar list = new Term( \"[]\" );\r\n\t\t\t\tfor( var i = variables.length-1; i >= 0; i-- )\r\n\t\t\t\t\tlist = new Term( \".\", [new Var(variables[i]), list] );\r\n\t\t\t\treturn new Term( \"warning\", [new Term( \"singleton_variables\", [list, str_indicator(rule)]), new Term(\".\",[new Term( \"line\", [ new Num( line, false ) ]), new Term(\"[]\")])] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Failed goal\r\n\t\t\tfailed_goal: function( goal, line ) {\r\n\t\t\t\treturn new Term( \"warning\", [new Term( \"failed_goal\", [goal]), new Term(\".\",[new Term( \"line\", [ new Num( line, false ) ]), new Term(\"[]\")])] );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t\r\n\t\t// Format of renamed variables\r\n\t\tformat_variable: function( id, variable ) {\r\n\t\t\tvar charcode = variable && variable.length > 0 ? codePointAt(variable, 1) : 0;\r\n\t\t\tif(variable === \"_\" || variable && variable[0] === \"_\" && (charcode === 95 || charcode >= 65 && charcode <= 90))\r\n\t\t\t\treturn \"__\" + id;\r\n\t\t\treturn \"_\" + id;\r\n\t\t},\r\n\t\t\r\n\t\t// Format of computed answers\r\n\t\tformat_answer: function( answer, thread, options ) {\r\n\t\t\tif( thread instanceof Session )\r\n\t\t\t\tthread = thread.thread;\r\n\t\t\tvar options = options ? options : {};\r\n\t\t\toptions.session = thread ? thread.session : undefined;\r\n\t\t\tif( pl.type.is_error( answer ) ) {\r\n\t\t\t\treturn \"uncaught exception: \" + answer.args[0].toString(options);\r\n\t\t\t} else if( answer === false ) {\r\n\t\t\t\treturn \"false\";\r\n\t\t\t} else if( answer === null ) {\r\n\t\t\t\treturn \"limit exceeded\";\r\n\t\t\t} else {\r\n\t\t\t\tvar i = 0;\r\n\t\t\t\tvar str = \"\";\r\n\t\t\t\tif( pl.type.is_substitution( answer ) ) {\r\n\t\t\t\t\tvar dom = answer.domain( true );\r\n\t\t\t\t\tfor( var link in answer.links ){\r\n\t\t\t\t\t\tif( !answer.links.hasOwnProperty(link) ) continue;\r\n\t\t\t\t\t\tif( pl.type.is_variable(answer.links[link]) ) {\r\n\t\t\t\t\t\t\tvar links = {};\r\n\t\t\t\t\t\t\tlinks[answer.links[link].id] = new Var(link);\r\n\t\t\t\t\t\t\tanswer = answer.apply( new Substitution(links) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tanswer = answer.filter( function( id, value ) {\r\n\t\t\t\t\t\treturn !pl.type.is_variable( value ) ||\r\n\t\t\t\t\t\t\tpl.type.is_variable( value ) && answer.has_attributes( id ) ||\r\n\t\t\t\t\t\t\tindexOf( dom, value.id ) !== -1 && id !== value.id;\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t\tfor( var link in answer.links ) {\r\n\t\t\t\t\tif(!answer.links.hasOwnProperty(link))\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tif( pl.type.is_variable( answer.links[link] ) && link === answer.links[link].id ) {\r\n\t\t\t\t\t\tvar attrs = answer.attrs[link];\r\n\t\t\t\t\t\tfor( var module in attrs ) {\r\n\t\t\t\t\t\t\tif(!attrs.hasOwnProperty(module))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\tif( str !== \"\" )\r\n\t\t\t\t\t\t\t\tstr += \", \";\r\n\t\t\t\t\t\t\tstr += \"put_attr(\" + link + \", \" + module + \", \" + attrs[module].toString(options) + \")\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\tif( str !== \"\" )\r\n\t\t\t\t\t\t\tstr += \", \";\r\n\t\t\t\t\t\tstr += link.toString( options ) + \" = \" +\r\n\t\t\t\t\t\t\tanswer.links[link].toString( options, {priority: \"700\", class: \"xfx\", indicator: \"=/2\"}, \"right\" );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( i === 0 ) {\r\n\t\t\t\t\treturn \"true\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn str;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Flatten default errors\r\n\t\tflatten_error: function( error ) {\r\n\t\t\tif( !pl.type.is_error( error ) ) return null;\r\n\t\t\terror = error.args[0];\r\n\t\t\tvar obj = {};\r\n\t\t\tobj.type = error.args[0].id;\r\n\t\t\tobj.thrown = obj.type === \"syntax_error\" ? null : error.args[1].id;\r\n\t\t\tobj.expected = null;\r\n\t\t\tobj.found = null;\r\n\t\t\tobj.representation = null;\r\n\t\t\tobj.existence = null;\r\n\t\t\tobj.existence_type = null;\r\n\t\t\tobj.line = null;\r\n\t\t\tobj.column = null;\r\n\t\t\tobj.permission_operation = null;\r\n\t\t\tobj.permission_type = null;\r\n\t\t\tobj.evaluation_type = null;\r\n\t\t\tif( obj.type === \"type_error\" || obj.type === \"domain_error\" ) {\r\n\t\t\t\tobj.expected = error.args[0].args[0].id;\r\n\t\t\t\tobj.found = error.args[0].args[1].toString();\r\n\t\t\t} else if( obj.type === \"syntax_error\" ) {\r\n\t\t\t\tif( error.args[1].indicator === \"./2\" ) {\r\n\t\t\t\t\tobj.expected = error.args[0].args[0].id;\r\n\t\t\t\t\tobj.found = error.args[1].args[1].args[1].args[0];\r\n\t\t\t\t\tobj.found = obj.found.id === \"token_not_found\" ? obj.found.id : obj.found.args[0].id;\r\n\t\t\t\t\tobj.line = error.args[1].args[0].args[0].value;\r\n\t\t\t\t\tobj.column = error.args[1].args[1].args[0].args[0].value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tobj.thrown = error.args[1].id;\r\n\t\t\t\t}\r\n\t\t\t} else if( obj.type === \"permission_error\" ) {\r\n\t\t\t\tobj.found = error.args[0].args[2].toString();\r\n\t\t\t\tobj.permission_operation = error.args[0].args[0].id;\r\n\t\t\t\tobj.permission_type = error.args[0].args[1].id;\r\n\t\t\t} else if( obj.type === \"evaluation_error\" ) {\r\n\t\t\t\tobj.evaluation_type = error.args[0].args[0].id;\r\n\t\t\t} else if( obj.type === \"representation_error\" ) {\r\n\t\t\t\tobj.representation = error.args[0].args[0].id;\r\n\t\t\t} else if( obj.type === \"existence_error\" ) {\r\n\t\t\t\tobj.existence = error.args[0].args[1].toString();\r\n\t\t\t\tobj.existence_type = error.args[0].args[0].id;\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t},\r\n\t\t\r\n\t\t// Create new session\r\n\t\tcreate: function( limit ) {\r\n\t\t\treturn new pl.type.Session( limit );\r\n\t\t}\r\n\t\t\r\n\t};\r\n\r\n\t// Built-in predicates\r\n\tpl.builtin = new Module(\"system\", {\r\n\r\n\t\t// TERM AND GOAL EXPANSION\r\n\r\n\t\t// goal_expansion/2\r\n\t\t\"goal_expansion/2\": [\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\",\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\",\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\";\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\";\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"->\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\"->\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"catch\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"catch\", [new Var(\"X_\"),new Var(\"Y\"),new Var(\"Z_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Z\"),new Var(\"Z_\")]),new Term(\"=\", [new Var(\"Z_\"),new Var(\"Z\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X_\"),new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"Z\"),new Var(\"Z_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"\\\\+\", [new Var(\"X\")]),new Term(\"\\\\+\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"once\", [new Var(\"X\")]),new Term(\"once\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"findall\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"setof\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"bagof\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\")]),new Term(\"call\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\"[]\", [])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\"[]\", [])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\"[]\", [])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\"[]\", [])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\"[]\", [])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\"),new Var(\"A6\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\".\", [new Var(\"A6\"),new Term(\"[]\", [])])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\"),new Var(\"A6\"),new Var(\"A7\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\".\", [new Var(\"A6\"),new Term(\".\", [new Var(\"A7\"),new Term(\"[]\", [])])])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])]))\r\n\t\t],\r\n\r\n\r\n\r\n\t\t// SYSTEM PREDICATES ($)\r\n\r\n\t\t// '$push_global_stack'/2\r\n\t\t\"$push_global_stack/2\": function(thread, point, atom) {\r\n\t\t\tvar stack = atom.args[0], value = atom.args[1];\r\n\t\t\tif(!pl.type.is_variable(stack)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.push_global_stack(stack.id, value);\r\n\t\t\t\tthread.success(point);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// '$flush_global_stack'/3\r\n\t\t\"$flush_global_stack/3\": function(thread, point, atom) {\r\n\t\t\tvar stack = atom.args[0], list = atom.args[1], tail = atom.args[2];\r\n\t\t\tif(!pl.type.is_variable(stack)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar values = thread.flush_global_stack(stack.id, tail);\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [list, values])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// '$free_variable_set'/3\r\n\t\t\"$free_variable_set/3\": function(thread, point, atom) {\r\n\t\t\tvar goal_in = atom.args[0], goal_out = atom.args[1], vars = atom.args[2];\r\n\t\t\tvar bv = [];\r\n\t\t\tvar pointer = goal_in;\r\n\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"^/2\") {\r\n\t\t\t\tbv = bv.concat(pointer.args[0].variables());\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar gv = pointer.variables();\r\n\t\t\tvar fv = arrayToList(map(difference(gv, bv), function(v) {\r\n\t\t\t\treturn new Var(v);\r\n\t\t\t}));\r\n\t\t\tthread.prepend([\r\n\t\t\t\tnew State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"=\", [goal_out, pointer]),\r\n\t\t\t\t\t\tnew Term(\"=\", [vars, fv]) \r\n\t\t\t\t\t])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)\r\n\t\t\t]);\r\n\t\t},\r\n\r\n\t\t// '$member'/2\r\n\t\t\"$member/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Term(\".\", [new pl.type.Var(\"X\"),new pl.type.Var(\"_\")])]), null),\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Term(\".\", [new pl.type.Var(\"_\"),new pl.type.Var(\"Xs\")])]), new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Var(\"Xs\")]))\r\n\t\t],\r\n\r\n\t\t// '$bind_bagof_keys/2'/2\r\n\t\t\"$bind_bagof_keys/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Term(\"[]\", []),new pl.type.Var(\"_\")]), null),\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Term(\".\", [new pl.type.Term(\"-\", [new pl.type.Var(\"Key\"),new pl.type.Var(\"_\")]),new pl.type.Var(\"Bag\")]),new pl.type.Var(\"Vars\")]), new pl.type.Term(\",\", [new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Key\"),new pl.type.Var(\"Vars\"),new pl.type.Var(\"_\")]),new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Bag\"),new pl.type.Var(\"Vars\")])]))\r\n\t\t],\r\n\r\n\t\t// '$findall'/4\r\n\t\t\"$findall/4\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$findall\", [new pl.type.Var(\"Template0\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Instances\"),new pl.type.Var(\"Tail\")]), new pl.type.Term(\";\", [new pl.type.Term(\",\", [new pl.type.Term(\"copy_term\", [new pl.type.Term(\"-\", [new pl.type.Var(\"Template0\"),new pl.type.Var(\"Goal0\")]),new pl.type.Term(\"-\", [new pl.type.Var(\"Template1\"),new pl.type.Var(\"Goal1\")])]),new pl.type.Term(\",\", [new pl.type.Term(\"call\", [new pl.type.Var(\"Goal1\")]),new pl.type.Term(\",\", [new pl.type.Term(\"copy_term\", [new pl.type.Var(\"Template1\"),new pl.type.Var(\"Template2\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$push_global_stack\", [new pl.type.Var(\"Var\"),new pl.type.Var(\"Template2\")]),new pl.type.Term(\"false\", [])])])])]),new pl.type.Term(\"$flush_global_stack\", [new pl.type.Var(\"Var\"),new pl.type.Var(\"Instances\"),new pl.type.Var(\"Tail\")])]))\r\n\t\t],\r\n\r\n\t\t// '$bagof'/3\r\n\t\t\"$bagof/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bagof\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Answer\")]), new pl.type.Term(\",\", [new pl.type.Term(\"$free_variable_set\", [new pl.type.Term(\"^\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"FV\")]),new pl.type.Term(\",\", [new pl.type.Term(\"findall\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Template\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"Answers\"),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\",\", [new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"_\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keygroup\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"KeyGroups\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keysort\", [new pl.type.Var(\"KeyGroups\"),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\"$member\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Answer\")]),new pl.type.Var(\"KeySorted\")])])])])])]))\r\n\t\t],\r\n\r\n\t\t// '$setof'/3\r\n\t\t\"$setof/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$setof\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Answer\")]), new pl.type.Term(\",\", [new pl.type.Term(\"$free_variable_set\", [new pl.type.Term(\"^\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"FV\")]),new pl.type.Term(\",\", [new pl.type.Term(\"findall\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Template\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"Answers\"),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\",\", [new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"_\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keygroup\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"KeyGroups\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keysort\", [new pl.type.Var(\"KeyGroups\"),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$member\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Unsorted\")]),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\"sort\", [new pl.type.Var(\"Unsorted\"),new pl.type.Var(\"Answer\")])])])])])])]))\r\n\t\t],\r\n\r\n\t\t// '$if/3'\r\n\t\t\"$if/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$if\", [new pl.type.Var(\"If\"),new pl.type.Var(\"Then\"),new pl.type.Var(\"Else\")]), new pl.type.Term(\";\", [new pl.type.Term(\",\", [new pl.type.Term(\"call\", [new pl.type.Var(\"If\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$push_global_stack\", [new pl.type.Var(\"Stack\"),new pl.type.Var(\"_\")]),new pl.type.Term(\"call\", [new pl.type.Var(\"Then\")])])]),new pl.type.Term(\",\", [new pl.type.Term(\"$flush_global_stack\", [new pl.type.Var(\"Stack\"),new pl.type.Term(\"[]\", []),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\"call\", [new pl.type.Var(\"Else\")])])]))\r\n\t\t],\r\n\r\n\r\n\t\t// ATTRIBUTED VARIABLES\r\n\t\t\r\n\t\t//put_attr/3\r\n\t\t\"put_attr/3\": function( thread, point, atom ) {\r\n\t\t\tvar variable = atom.args[0], module = atom.args[1], value = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable(variable) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"variable\", variable, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom(module) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", module, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar subs = point.substitution.set_attribute( variable.id, module, value );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace(null), subs, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// get_attr/3\r\n\t\t\"get_attr/3\": function( thread, point, atom ) {\r\n\t\t\tvar variable = atom.args[0], module = atom.args[1], value = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable(variable) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"variable\", variable, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom(module) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", module, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar attr = point.substitution.get_attribute( variable.id, module );\r\n\t\t\t\tif( attr ) {\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term(\"=\", [value, attr]) ),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t\r\n\t\t// INPUT AND OUTPUT\r\n\t\t\r\n\t\t// op/3\r\n\t\t\"op/3\": function( thread, point, atom ) {\r\n\t\t\tvar priority = atom.args[0], type = atom.args[1], operators = atom.args[2];\r\n\t\t\tif(pl.type.is_atom(operators))\r\n\t\t\t\toperators = new Term(\".\", [operators, new Term(\"[]\")]);\r\n\t\t\tif( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( priority ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( type ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", type, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_empty_list( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operators, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar pointer = operators;\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tvar operator = pointer.args[0];\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\tif( pl.type.is_variable( operator ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_atom( operator ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( priority.value < 0 || priority.value > 1200 ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \",\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"{}\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"[]\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"|\" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"].indexOf( type.id ) === -1 ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"operator_specifier\", type, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar fix = { prefix: null, infix: null, postfix: null };\r\n\t\t\t\t\t\tfor( var p in thread.session.__operators ) {\r\n\t\t\t\t\t\t\tif(!thread.session.__operators.hasOwnProperty(p)) continue;\r\n\t\t\t\t\t\t\tvar classes = thread.session.__operators[p][operator.id];\r\n\t\t\t\t\t\t\tif( classes ) {\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"fx\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fx\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"fy\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fy\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"xf\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"yf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"yf\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfx\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfy\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfy\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"yfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"yfx\" }; }\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar current_class;\r\n\t\t\t\t\t\tswitch( type.id ) {\r\n\t\t\t\t\t\t\tcase \"fy\": case \"fx\": current_class = \"prefix\"; break;\r\n\t\t\t\t\t\t\tcase \"yf\": case \"xf\": current_class = \"postfix\"; break;\r\n\t\t\t\t\t\t\tdefault: current_class = \"infix\"; break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(fix.infix && current_class === \"postfix\" || fix.postfix && current_class === \"infix\") {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif( fix[current_class] ) {\r\n\t\t\t\t\t\t\t\tremove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type );\r\n\t\t\t\t\t\t\t\tif( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) {\r\n\t\t\t\t\t\t\t\t\tdelete thread.session.__operators[fix[current_class].priority][operator.id];\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif( priority.value > 0 ) {\r\n\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {};\r\n\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = [];\r\n\t\t\t\t\t\t\t\tthread.session.__operators[priority.value][operator.id].push( type.id );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_op/3\r\n\t\t\"current_op/3\": function( thread, point, atom ) {\r\n\t\t\tvar priority = atom.args[0], specifier = atom.args[1], operator = atom.args[2];\r\n\t\t\tvar points = [];\r\n\t\t\tif( !pl.type.is_variable( priority ) && !pl.type.is_integer( priority ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( priority ) && ( priority.value < 0 || priority.value > 1200 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( specifier ) && !pl.type.is_atom( specifier ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", specifier, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_atom( specifier ) && indexOf( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"], specifier.id ) === -1 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"operator_specifier\", specifier, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( operator ) && !pl.type.is_atom( operator ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tfor( var p in thread.session.__operators )\r\n\t\t\t\t\tfor( var o in thread.session.__operators[p] )\r\n\t\t\t\t\t\tfor( var i = 0; i < thread.session.__operators[p][o].length; i++ )\r\n\t\t\t\t\t\t\tpoints.push( new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\t\t\t\tnew Term( \",\", [\r\n\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Num( p, false ), priority] ),\r\n\t\t\t\t\t\t\t\t\t\tnew Term( \",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Term( thread.session.__operators[p][o][i], [] ), specifier] ),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Term( o, [] ), operator] )\r\n\t\t\t\t\t\t\t\t\t\t] )\r\n\t\t\t\t\t\t\t\t\t] )\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t) );\r\n\t\t\t\tthread.prepend( points );\r\n\t\t\t}\r\n\t\t},\r\n\t\r\n\r\n\r\n\t\t// LOGIC AND CONTROL STRUCTURES\r\n\t\r\n\t\t// ;/2 (disjunction)\r\n\t\t\";/2\": function(thread, point, atom) {\r\n\t\t\tvar left = atom.args[0], right = atom.args[1];\r\n\t\t\tvar context_left = left.args[0];\r\n\t\t\tvar free_left = left.indicator === \":/2\" ? left.args[1] : left;\r\n\t\t\t// if then else\r\n\t\t\tif(pl.type.is_term(free_left) && free_left.indicator === \"->/2\") {\r\n\t\t\t\tvar cond = left.indicator === \":/2\" ? new Term(\":\", [context_left, new Term(\"call\", [free_left.args[0]])]) : free_left.args[0];\r\n\t\t\t\tvar then = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[1]]) : free_left.args[1];\r\n\t\t\t\tvar otherwise = right;\r\n\t\t\t\tvar goal_fst = point.goal.replace(new Term( \",\", [cond, new Term(\",\", [new Term(\"!\"), then])] ) );\r\n\t\t\t\tvar goal_snd = point.goal.replace(new Term( \",\", [new Term(\"!\"), otherwise]));\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(goal_fst, point.substitution, point),\r\n\t\t\t\t\tnew State(goal_snd, point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t// soft-cut\r\n\t\t\t} else if(pl.type.is_term(free_left) && free_left.indicator === \"*->/2\") {\r\n\t\t\t\tvar cond = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[0]]) : free_left.args[0];\r\n\t\t\t\tvar then = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[1]]) : free_left.args[1];\r\n\t\t\t\tvar otherwise = right;\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$if\", [cond, then, otherwise])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t// otherwise\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(point.goal.replace(left), point.substitution, point),\r\n\t\t\t\t\tnew State(point.goal.replace(right), point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// !/0 (cut)\r\n\t\t\"!/0\": function( thread, point, atom ) {\r\n\t\t\tvar parent_cut, last_cut, states = [];\r\n\t\t\tparent_cut = point;\r\n\t\t\tlast_cut = null;\r\n\t\t\twhile( parent_cut.parent !== null && parent_cut.parent.goal.search( atom ) ) {\r\n\t\t\t\tlast_cut = parent_cut;\r\n\t\t\t\tparent_cut = parent_cut.parent;\r\n\t\t\t\tif(parent_cut.goal !== null) {\r\n\t\t\t\t\tvar selected = parent_cut.goal.select();\r\n\t\t\t\t\tif(selected && selected.indicator === \":/2\")\r\n\t\t\t\t\t\tselected = selected.args[1];\r\n\t\t\t\t\tif( selected && selected.id === \"call\" && selected.search(atom) ) {\r\n\t\t\t\t\t\tparent_cut = last_cut;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar setup_call_cleanup = null;\r\n\t\t\tfor( var i = thread.points.length-1; i >= 0; i-- ) {\r\n\t\t\t\tvar state = thread.points[i];\r\n\t\t\t\tvar node = state.parent;\r\n\t\t\t\twhile( node !== null && node !== parent_cut.parent ) {\r\n\t\t\t\t\tnode = node.parent;\r\n\t\t\t\t}\r\n\t\t\t\tif( node === null && node !== parent_cut.parent )\r\n\t\t\t\t\tstates.push( state );\r\n\t\t\t\telse if(state.setup_call_cleanup_goal)\r\n\t\t\t\t\tsetup_call_cleanup = state.setup_call_cleanup_goal\r\n\t\t\t}\r\n\t\t\tthread.points = states.reverse();\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(setup_call_cleanup),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\t\t\r\n\t\t// \\+ (negation)\r\n\t\t\"\\\\+/1\": function( thread, point, atom ) {\r\n\t\t\tvar goal = atom.args[0];\r\n\t\t\tif( pl.type.is_variable( goal ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_callable( goal ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"callable\", goal, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// TRANSPARENT VERSION OF THE NEGATION\r\n\t\t\t\t/*var neg_thread;\r\n\t\t\t\tif(point.negation_thread) {\r\n\t\t\t\t\tneg_thread = point.negation_thread;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tneg_thread = new Thread( thread.session );\r\n\t\t\t\t\tneg_thread.add_goal( goal );\r\n\t\t\t\t\tpoint.negation_thread = neg_thread;\r\n\t\t\t\t}\r\n\t\t\t\tneg_thread.answer( function( answer ) {\r\n\t\t\t\t\tif(answer === false) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t} else if(pl.type.is_error( answer )) {\r\n\t\t\t\t\t\tthread.throw_error( answer.args[0] );\r\n\t\t\t\t\t} else if(answer === null) {\r\n\t\t\t\t\t\tthread.prepend( [point] );\r\n\t\t\t\t\t\tthread.current_limit = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.again( answer !== null );\r\n\t\t\t\t} );\r\n\t\t\t\treturn true;*/\r\n\t\t\t\t\r\n\t\t\t\t// '\\+'(X) :- call(X), !, fail.\r\n\t\t\t\t// '\\+'(_).\r\n\t\t\t\tthread.prepend( [\r\n\t\t\t\t\tnew State( point.goal.replace( new Term( \",\", [new Term( \",\", [ new Term( \"call\", [goal] ), new Term( \"!\", [] ) ] ), new Term( \"fail\", [] ) ] ) ), point.substitution, point ),\r\n\t\t\t\t\tnew State( point.goal.replace( null ), point.substitution, point )\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ->/2 (implication)\r\n\t\t\"->/2\": function( thread, point, atom ) {\r\n\t\t\tvar cond = atom.args[0], then = atom.args[1];\r\n\t\t\tvar goal = point.goal.replace(new Term(\",\", [\r\n\t\t\t\tnew Term(\"call\", [cond]),\r\n\t\t\t\tnew Term(\",\", [new Term(\"!\"), then])\r\n\t\t\t]));\r\n\t\t\tthread.prepend( [new State( goal, point.substitution, point )] );\r\n\t\t},\r\n\r\n\t\t// *->/2 (soft-cut)\r\n\t\t\"*->/2\": function(thread, point, atom) {\r\n\t\t\tvar cond = atom.args[0], then = atom.args[1];\r\n\t\t\tvar goal = point.goal.replace(new Term(\",\", [\r\n\t\t\t\tnew Term(\"call\", [cond]), then]));\r\n\t\t\tthread.prepend([new State(goal, point.substitution, point)]);\r\n\t\t},\r\n\t\t\r\n\t\t// fail/0\r\n\t\t\"fail/0\": function( _1, _2, _3 ) {},\r\n\t\t\r\n\t\t// false/0\r\n\t\t\"false/0\": function( _1, _2, _3 ) {},\r\n\t\t\r\n\t\t// true/0\r\n\t\t\"true/0\": function( thread, point, _ ) {\r\n\t\t\tthread.success( point );\r\n\t\t},\r\n\t\t\r\n\t\t// call/1..8\r\n\t\t\"call/1\": callN(1),\r\n\t\t\"call/2\": callN(2),\r\n\t\t\"call/3\": callN(3),\r\n\t\t\"call/4\": callN(4),\r\n\t\t\"call/5\": callN(5),\r\n\t\t\"call/6\": callN(6),\r\n\t\t\"call/7\": callN(7),\r\n\t\t\"call/8\": callN(8),\r\n\t\t\r\n\t\t// once/1\r\n\t\t\"once/1\": function( thread, point, atom ) {\r\n\t\t\tvar goal = atom.args[0];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \",\", [new Term( \"call\", [goal] ), new Term( \"!\", [] )] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// forall/2\r\n\t\t\"forall/2\": function( thread, point, atom ) {\r\n\t\t\tvar generate = atom.args[0], test = atom.args[1];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"\\\\+\", [new Term( \",\", [new Term( \"call\", [generate] ), new Term( \"\\\\+\", [new Term( \"call\", [test] )] )] )] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// repeat/0\r\n\t\t\"repeat/0\": function( thread, point, _ ) {\r\n\t\t\tthread.prepend( [new State( point.goal.replace( null ), point.substitution, point ), point] );\r\n\t\t},\r\n\r\n\t\t// EXCEPTIONS\r\n\t\t\r\n\t\t// throw/1\r\n\t\t\"throw/1\": function( thread, point, atom ) {\r\n\t\t\tvar error = atom.args[0];\r\n\t\t\tif(pl.type.is_variable(error)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(thread.level.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tfor(var i = 0; i < thread.points.length; i++) {\r\n\t\t\t\t\tvar state = thread.points[i];\r\n\t\t\t\t\tif(state.setup_call_cleanup_catch) {\r\n\t\t\t\t\t\tthread.points = [new State(\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"catch\", [\r\n\t\t\t\t\t\t\t\t\tstate.setup_call_cleanup_catch,\r\n\t\t\t\t\t\t\t\t\tnew Var(\"_\"),\r\n\t\t\t\t\t\t\t\t\tnew Term(\"throw\", [error])\r\n\t\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\t\tnew Term(\"throw\", [error])\r\n\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t)];\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tthread.throw_error(error);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// catch/3\r\n\t\t\"catch/3\": function(thread, point, atom) {\r\n\t\t\tvar goal = atom.args[0], catcher = atom.args[1], recover = atom.args[2];\r\n\t\t\tvar nthread;\r\n\t\t\tif(!point.catch) {\r\n\t\t\t\tnthread = new Thread(thread.session);\r\n\t\t\t\tnthread.debugger = thread.debugger;\r\n\t\t\t\tnthread.format_success = function(state) { return state.substitution; };\r\n\t\t\t\tnthread.format_error = function(state) { return state.goal; };\r\n\t\t\t\tnthread.add_goal(goal, true, point);\r\n\t\t\t\tpoint.catch = nthread;\r\n\t\t\t} else {\r\n\t\t\t\tnthread = point.catch;\r\n\t\t\t}\r\n\t\t\tvar callback = function(answer) {\r\n\t\t\t\tif(pl.type.is_error(answer)) {\r\n\t\t\t\t\tvar occurs_check = thread.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\tvar state = new State();\r\n\t\t\t\t\tvar mgu = pl.unify(answer.args[0], catcher, occurs_check);\r\n\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\tstate.substitution = point.substitution.apply(mgu);\r\n\t\t\t\t\t\tstate.goal = point.goal.replace(recover).apply(mgu);\r\n\t\t\t\t\t\tstate.parent = point;\r\n\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(answer.args[0]);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(answer !== false && answer !== null) {\r\n\t\t\t\t\tvar state = answer === null ? [] : new State(\r\n\t\t\t\t\t\tpoint.goal.apply(answer).replace(null),\r\n\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t);\r\n\t\t\t\t\tthread.prepend([state, point]);\r\n\t\t\t\t} else if(answer === null) {\r\n\t\t\t\t\tthread.prepend([point]);\r\n\t\t\t\t\tif(thread.has_limit)\r\n\t\t\t\t\t\tthread.current_limit = 0;\r\n\t\t\t\t}\r\n\t\t\t\tthread.again(answer !== null);\r\n\t\t\t};\r\n\t\t\tnthread.answer(callback);\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t// call_cleanup/2\r\n\t\t\"call_cleanup/2\": function(thread, point, atom) {\r\n\t\t\tvar call = atom.args[0], cleanup = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(call) || pl.type.is_variable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(call)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", call, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", cleanup, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar nthread, callback;\r\n\t\t\t\tif(point.hasOwnProperty(\"setup_call_cleanup_thread\")) {\r\n\t\t\t\t\tnthread = point.setup_call_cleanup_thread;\r\n\t\t\t\t\tcallback = point.setup_call_cleanup_callback;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar goal = new Term(\"call\", [call]);\r\n\t\t\t\t\tnthread = new Thread(thread.session);\r\n\t\t\t\t\tnthread.add_goal(goal, true, point);\r\n\t\t\t\t\tcallback = function(answer) {\r\n\t\t\t\t\t\tif(answer === null) {\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal,\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tstate.setup_call_cleanup_thread = nthread;\r\n\t\t\t\t\t\t\tstate.setup_call_cleanup_callback = callback;\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else if(answer === false) {\r\n\t\t\t\t\t\t\tvar cleanup_and_fail = new Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup]),\r\n\t\t\t\t\t\t\t\tnew Term(\"fail\")\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(cleanup_and_fail),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else if(pl.type.is_error(answer)) {\r\n\t\t\t\t\t\t\tvar cleanup_and_throw = new Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup]),\r\n\t\t\t\t\t\t\t\tanswer\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(cleanup_and_throw),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif(nthread.points.length === 0) {\r\n\t\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup])\r\n\t\t\t\t\t\t\t\t\t).apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tvar state1 = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.apply(answer).replace(null),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tvar state2 = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal,\r\n\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_thread = nthread;\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_callback = callback;\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_goal = cleanup.apply(answer);\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_catch = cleanup;\r\n\t\t\t\t\t\t\t\tthread.prepend([state1, state2]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnthread.answer(callback);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// setup_call_cleanup/3\r\n\t\t\"setup_call_cleanup/3\": function(thread, point, atom) {\r\n\t\t\tvar setup = atom.args[0], call = atom.args[1], cleanup = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(setup) || pl.type.is_variable(call) || pl.type.is_variable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(setup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", setup, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(call)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", call, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", cleanup, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"once\", [setup]),\r\n\t\t\t\t\t\tnew Term(\"call_cleanup\", [call, cleanup])\r\n\t\t\t\t\t])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// UNIFICATION\r\n\t\t\r\n\t\t// =/2 (unification)\r\n\t\t\"=/2\": function( thread, point, atom ) {\r\n\t\t\tvar occurs_check = thread.get_flag( \"occurs_check\" ).indicator === \"true/0\";\r\n\t\t\tvar state = new State();\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], occurs_check );\r\n\t\t\tif( mgu !== null ) {\r\n\t\t\t\tstate.goal = point.goal.apply( mgu ).replace( null );\r\n\t\t\t\tstate.substitution = point.substitution.apply( mgu );\r\n\t\t\t\tstate.parent = point;\r\n\t\t\t\tthread.prepend( [state] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// unify_with_occurs_check/2\r\n\t\t\"unify_with_occurs_check/2\": function( thread, point, atom ) {\r\n\t\t\tvar state = new State();\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], true );\r\n\t\t\tif( mgu !== null ) {\r\n\t\t\t\tstate.goal = point.goal.apply( mgu ).replace( null );\r\n\t\t\t\tstate.substitution = point.substitution.apply( mgu );\r\n\t\t\t\tstate.parent = point;\r\n\t\t\t\tthread.prepend( [state] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// \\=/2\r\n\t\t\"\\\\=/2\": function( thread, point, atom ) {\r\n\t\t\tvar occurs_check = thread.get_flag( \"occurs_check\" ).indicator === \"true/0\";\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], occurs_check );\r\n\t\t\tif( mgu === null ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// subsumes_term/2\r\n\t\t/*\r\n\t\tsubsumes_term(General, Specific) :-\r\n\t\t\t\\+ \\+ (\r\n\t\t\tterm_variables(Specific, Vars1),\r\n\t\t\tunify_with_occurs_check(General, Specific),\r\n\t\t\tterm_variables(Vars1, Vars2),\r\n\t\t\tVars1 == Vars2\r\n\t\t).\r\n\t\t*/\r\n\t\t\"subsumes_term/2\": function( thread, point, atom ) {\r\n\t\t\tvar general = atom.args[0], specific = atom.args[1];\r\n\t\t\tvar vars1 = thread.next_free_variable();\r\n\t\t\tvar vars2 = thread.next_free_variable();\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"\\\\+\", [\r\n\t\t\t\t\tnew Term(\"\\\\+\", [\r\n\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\"term_variables\", [specific, vars1]),\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"unify_with_occurs_check\", [general, specific]),\r\n\t\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\t\tnew Term(\"term_variables\", [vars1, vars2]),\r\n\t\t\t\t\t\t\t\t\tnew Term(\"==\", [vars1, vars2])\r\n\t\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t])\r\n\t\t\t\t\t])\r\n\t\t\t\t])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\t\t\r\n\t\t// ALL SOLUTIONS\r\n\r\n\t\t// findall/3\r\n\t\t\"findall/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tvar tail = new Term(\"[]\", []);\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"findall\", [template, goal, instances, tail])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\r\n\t\t// findall/4\r\n\t\t\"findall/4\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2], tail = atom.args[3];\r\n\t\t\tvar proper_goal = goal;\r\n\t\t\tif(pl.type.is_term(goal) && goal.indicator === \":/2\")\r\n\t\t\t\tproper_goal = goal.args[1];\r\n\t\t\tif(pl.type.is_variable(proper_goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(proper_goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(tail) && !pl.type.is_list(tail)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", tail, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$findall\", [template, goal, instances, tail])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// bagof/3\r\n\t\t\"bagof/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error( pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$bagof\", [template, goal, instances])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// setof/3\r\n\t\t\"setof/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error( pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$setof\", [template, goal, instances])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TERM CREATION AND DECOMPOSITION\r\n\t\t\r\n\t\t// functor/3\r\n\t\t\"functor/3\": function( thread, point, atom ) {\r\n\t\t\tvar subs;\r\n\t\t\tvar term = atom.args[0], name = atom.args[1], arity = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( term ) && (pl.type.is_variable( name ) || pl.type.is_variable( arity )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( arity ) && !pl.type.is_integer( arity ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[2], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( name ) && !pl.type.is_atomic( name ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) && !pl.type.is_atom( name ) && pl.type.is_integer( arity ) && arity.value > 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) && pl.type.is_integer( arity ) && arity.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[2], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) ) {\r\n\t\t\t\tif( atom.args[2].value >= 0 ) {\r\n\t\t\t\t\tvar args = [];\r\n\t\t\t\t\tfor( var i = 0; i < arity.value; i++ )\r\n\t\t\t\t\t\targs.push( thread.next_free_variable() );\r\n\t\t\t\t\tvar functor = pl.type.is_number( name ) ? name : new Term( name.id, args );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [term, functor] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar id = pl.type.is_number( term ) ? term : new Term( term.id, [] );\r\n\t\t\t\tvar length = pl.type.is_number( term ) ? new Num( 0, false ) : new Num( term.args.length, false );\r\n\t\t\t\tvar goal = new Term( \",\", [new Term( \"=\", [id, name] ), new Term( \"=\", [length, arity] )] );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// arg/3\r\n\t\t\"arg/3\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) || pl.type.is_variable( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( atom.args[0].value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_compound( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"compound\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar n = atom.args[0].value;\r\n\t\t\t\tif( n > 0 && n <= atom.args[1].args.length ) {\r\n\t\t\t\t\tvar goal = new Term( \"=\", [atom.args[1].args[n-1], atom.args[2]] );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =../2 (univ)\r\n\t\t\"=../2\": function( thread, point, atom ) {\r\n\t\t\tvar list;\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) && (pl.type.is_variable( atom.args[1] )\r\n\t\t\t|| pl.type.is_non_empty_list( atom.args[1] ) && pl.type.is_variable( atom.args[1].args[0] )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_fully_list( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( atom.args[0] ) && pl.type.is_empty_list( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"non_empty_list\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tif( pl.type.is_term( atom.args[0] ) && atom.args[0].args.length > 0 ) {\r\n\t\t\t\t\tlist = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = atom.args[0].args.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist = new Term( \".\", [atom.args[0].args[i], list] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist = new Term( \".\", [new Term( atom.args[0].id ), list] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlist = new Term( \".\", [atom.args[0], new Term( \"[]\" )] );\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, atom.args[1]] ) ), point.substitution, point )] );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[1] ) ) {\r\n\t\t\t\tvar args = [];\r\n\t\t\t\tlist = atom.args[1].args[1];\r\n\t\t\t\twhile( list.indicator === \"./2\" ) {\r\n\t\t\t\t\targs.push( list.args[0] );\r\n\t\t\t\t\tlist = list.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( atom.args[0] ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( args.length === 0 && pl.type.is_compound( atom.args[1].args[0] ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atom.args[1].args[0], atom.indicator ) );\r\n\t\t\t\t} else if( args.length > 0 && (pl.type.is_compound( atom.args[1].args[0] ) || pl.type.is_number( atom.args[1].args[0] )) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[1].args[0], atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif( args.length === 0 ) {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom.args[1].args[0], atom.args[0]], point ) ), point.substitution, point )] );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( atom.args[1].args[0].id, args ), atom.args[0]] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// copy_term/2\r\n\t\t\"copy_term/2\": function(thread, point, atom) {\r\n\t\t\tvar original_term = atom.args[0], renamed_term = atom.args[1];\r\n\t\t\tthread.session.renamed_variables = {};\r\n\t\t\tvar new_term = original_term.rename(thread);\r\n\t\t\tthread.session.renamed_variables = {};\r\n\t\t\tthread.prepend([\r\n\t\t\t\tnew State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [renamed_term, new_term])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t},\r\n\t\t\r\n\t\t// term_variables/2\r\n\t\t\"term_variables/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Term\"),new pl.type.Var(\"Vars\")]), new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Term\"),new pl.type.Var(\"Vars\"),new pl.type.Term(\"[]\", [])]))\r\n\t\t],\r\n\r\n\t\t// term_variables/3\r\n\t\t\"term_variables/3\": function(thread, point, atom) {\r\n\t\t\tvar term = atom.args[0], vars = atom.args[1], tail = atom.args[2];\r\n\t\t\tif( !pl.type.is_fully_list( vars ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", vars, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar list = arrayToList(map(nub(term.variables()), function(v) {\r\n\t\t\t\t\treturn new Var(v);\r\n\t\t\t\t}), tail);\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [vars, list])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// numbervars/3\r\n\t\t\"numbervars/3\": function(thread, point, atom) {\r\n\t\t\tvar term = atom.args[0], start = atom.args[1], end = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(start)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_integer(start)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", start, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(end) && !pl.type.is_integer(end)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", end, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar variables = nub(term.variables());\r\n\t\t\t\tvar value = start.value;\r\n\t\t\t\tvar unif_body = new Term(\"true\");\r\n\t\t\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\t\t\tunif_body = new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"=\", [\r\n\t\t\t\t\t\t\tnew Var(variables[i]),\r\n\t\t\t\t\t\t\tnew Term(\"$VAR\", [new Num(value, false)])]),\r\n\t\t\t\t\t\t\tunif_body]);\r\n\t\t\t\t\tvalue++;\r\n\t\t\t\t}\r\n\t\t\t\tvar unif_end = new Term(\"=\", [end, new Num(value, false)]);\r\n\t\t\t\tif(pl.type.is_variable(end) || end.value === value) {\r\n\t\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [unif_body, unif_end])),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// CLAUSE RETRIEVAL AND INFORMATION\r\n\t\t\r\n\t\t// clause/2\r\n\t\t\"clause/2\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0], body = atom.args[1];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(head.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", head.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(body) && !pl.type.is_callable(body)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t} else if(head.indicator === \",/2\" || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\tthread.throw_error(pl.error.permission(\"access\", \"private_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t} else if(pl.type.is_module(get_module) && get_module.rules[head.indicator]) {\r\n\t\t\t\tif(get_module.is_public_predicate(head.indicator)) {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tif(typeof get_module.rules[head.indicator] === \"function\") {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor(var i = 0; i < get_module.rules[head.indicator].length; i++) {\r\n\t\t\t\t\t\tvar rule = get_module.rules[head.indicator][i];\r\n\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\trule = rule.rename(thread);\r\n\t\t\t\t\t\tif(rule.body === null)\r\n\t\t\t\t\t\t\trule.body = new Term(\"true\");\r\n\t\t\t\t\t\tvar goal = new Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\"=\", [rule.head, head]),\r\n\t\t\t\t\t\t\tnew Term(\"=\", [rule.body, body])\r\n\t\t\t\t\t\t]);\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(goal), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"access\", \"private_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_predicate/1\r\n\t\t\"current_predicate/1\": function(thread, point, atom) {\r\n\t\t\tvar indicator = atom.args[0];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(indicator) && indicator.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(indicator.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", indicator.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = indicator.args[0].id;\r\n\t\t\t\tindicator = indicator.args[1];\r\n\t\t\t} else {\r\n\t\t\t\tmodule_id = \"user\";\r\n\t\t\t}\r\n\t\t\tif(!pl.type.is_variable(indicator) && (!pl.type.is_compound(indicator) || indicator.indicator !== \"//2\")) {\r\n\t\t\t\tthread.throw_error(pl.error.type( \"predicate_indicator\", indicator, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable( indicator ) && !pl.type.is_variable(indicator.args[0]) && !pl.type.is_atom(indicator.args[0])) {\r\n\t\t\t\tthread.throw_error(pl.error.type( \"atom\", indicator.args[0], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(indicator) && !pl.type.is_variable(indicator.args[1]) && !pl.type.is_integer(indicator.args[1])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", indicator.args[1], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(indicator) && pl.type.is_integer(indicator.args[1]) && indicator.args[1].value < 0) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"not_less_than_zero\", indicator.args[1], atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\tfor(var prop in get_module.rules) {\r\n\t\t\t\t\t\tif(!get_module.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tvar predicate = str_indicator(prop);\r\n\t\t\t\t\t\tvar goal = new Term(\"=\", [predicate, indicator]);\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(goal), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// current_module/1\r\n\t\t\"current_module/1\": function(thread, point, atom) {\r\n\t\t\tvar module_id = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(module_id) && !pl.type.is_atom(module_id)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", module_id, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_variable(module_id)) {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tfor(var prop in thread.session.modules) {\r\n\t\t\t\t\t\tif(!thread.session.modules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tstates.push(new State(\r\n\t\t\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [module_id, new Term(prop)])),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(thread.session.modules.hasOwnProperty(module_id.id))\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// predicate_property/2\r\n\t\t\"predicate_property/2\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0], property = atom.args[1];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(head.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", head.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tif(!pl.type.is_variable(head) && !pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(property) && !pl.type.is_predicate_property(property)) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"predicate_property\", property, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar get_module = module_id ? thread.session.modules[module_id] : thread.session.modules.user;\r\n\t\t\t\tvar points = [];\r\n\t\t\t\t// all predicates\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\t// built-in predicates (built_in + static + native_code + meta_predicate?)\r\n\t\t\t\t\tif(!module_id) {\r\n\t\t\t\t\t\tfor(var prop in pl.builtin.rules) {\r\n\t\t\t\t\t\t\tif(!pl.builtin.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tvar indicator = str_indicator(prop);\r\n\t\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < indicator.args[1].value; i++)\r\n\t\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\t\tvar unif_head = new Term(indicator.args[0].id, args);\r\n\t\t\t\t\t\t\tvar current_properties = [\r\n\t\t\t\t\t\t\t\tnew Term(\"static\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"built_in\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"native_code\")\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t\tif(pl.builtin.meta_predicates.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\t\tpl.builtin.meta_predicates[prop]\r\n\t\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\t\t// all predicates, one property / all properties\r\n\t\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// user-defined predicates\r\n\t\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\t\tfor(var prop in get_module.rules) {\r\n\t\t\t\t\t\t\tif(!get_module.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tvar indicator = str_indicator(prop);\r\n\t\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < indicator.args[1].value; i++)\r\n\t\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\t\tvar unif_head = new Term(indicator.args[0].id, args);\r\n\t\t\t\t\t\t\tvar current_properties = [];\r\n\t\t\t\t\t\t\tif(thread.is_public_predicate(prop, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"dynamic\"));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"static\"));\r\n\t\t\t\t\t\t\tif(get_module.rules[prop] instanceof Function)\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"native_code\"));\r\n\t\t\t\t\t\t\tif(thread.is_multifile_predicate(prop, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"multifile\"));\r\n\t\t\t\t\t\t\tif(get_module.meta_predicates.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\t\tget_module.meta_predicates[prop]\r\n\t\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\t\t// all predicates, one property / all properties\r\n\t\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t// one predicate\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar builtin = !module_id && pl.type.is_builtin(head);\r\n\t\t\t\t\tvar predicate = builtin ? pl.builtin.rules[head.indicator] : get_module.rules[head.indicator];\r\n\t\t\t\t\tget_module = builtin ? pl.builtin : get_module;\r\n\t\t\t\t\tif(predicate) {\r\n\t\t\t\t\t\tvar current_properties;\r\n\t\t\t\t\t\tif(builtin) {\r\n\t\t\t\t\t\t\tcurrent_properties = [\r\n\t\t\t\t\t\t\t\tnew Term(\"static\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"built_in\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"native_code\")\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcurrent_properties = [];\r\n\t\t\t\t\t\t\tif(thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"dynamic\"));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"static\"));\r\n\t\t\t\t\t\t\tif(predicate instanceof Function)\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"native_code\"));\r\n\t\t\t\t\t\t\tif(thread.is_multifile_predicate(head.indicator, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"multifile\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(get_module.meta_predicates.hasOwnProperty(head.indicator))\r\n\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\tget_module.meta_predicates[head.indicator]\r\n\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\tfor(var i = 0; i < head.args.length; i++)\r\n\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\tvar unif_head = new Term(head.id, args);\r\n\t\t\t\t\t\t// one predicate, one property / all properties\r\n\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(points);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// listing/0\r\n\t\t\"listing/0\": function( thread, point, atom ) {\r\n\t\t\tvar context_module = atom.context_module ? atom.context_module : \"user\";\r\n\t\t\tvar rules = {};\r\n\t\t\tif(pl.type.is_module(thread.session.modules[context_module])) {\r\n\t\t\t\trules = thread.session.modules[context_module].rules;\r\n\t\t\t}\r\n\t\t\tvar str = \"\";\r\n\t\t\tfor(var indicator in rules) {\r\n\t\t\t\tif(!rules.hasOwnProperty(indicator)) continue;\r\n\t\t\t\tvar predicate = rules[indicator];\r\n\t\t\t\tstr += \"% \" + indicator + \"\\n\";\r\n\t\t\t\tif(predicate instanceof Array) {\r\n\t\t\t\t\tfor(var i = 0; i < predicate.length; i++)\r\n\t\t\t\t\t\tstr += predicate[i].toString( {session: thread.session} ) + \"\\n\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstr += \"/*\\n\" + predicate.toString() + \"\\n*/\";\r\n\t\t\t\t}\r\n\t\t\t\tstr += \"\\n\";\r\n\t\t\t}\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"write\", [new Term(str, [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// listing/1\r\n\t\t\"listing/1\": function( thread, point, atom ) {\r\n\t\t\tvar indicator = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(indicator.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = indicator.args[0].id;\r\n\t\t\t\tindicator = indicator.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(indicator)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_predicate_indicator(indicator)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar rules = {};\r\n\t\t\t\tif(pl.type.is_module(thread.session.modules[context_module])) {\r\n\t\t\t\t\trules = thread.session.modules[context_module].rules;\r\n\t\t\t\t}\r\n\t\t\t\tvar str = \"\";\r\n\t\t\t\tvar str_indicator = indicator.args[0].id + \"/\" + indicator.args[1].value;\r\n\t\t\t\tif(rules.hasOwnProperty(str_indicator)) {\r\n\t\t\t\t\tvar predicate = rules[str_indicator];\r\n\t\t\t\t\tif(predicate instanceof Array) {\r\n\t\t\t\t\t\tfor(var i = 0; i < predicate.length; i++)\r\n\t\t\t\t\t\t\tstr += predicate[i].toString( {session: thread.session} ) + \"\\n\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstr += \"/*\\n\" + predicate.toString() + \"\\n*/\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstr += \"\\n\";\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"write\", [new Term(str, [])])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// LIST OPERATIONS\r\n\r\n\t\t// sort/2\r\n\t\t\"sort/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar arr = [];\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tarr.push( pointer.args[0] );\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar sorted_arr = arr.sort( pl.compare );\r\n\t\t\t\t\tfor( var i = sorted_arr.length-1; i > 0; i-- ) {\r\n\t\t\t\t\t\tif( sorted_arr[i].equals(sorted_arr[i-1]) )\r\n\t\t\t\t\t\t\tsorted_arr.splice(i,1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar sorted_list = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = sorted_arr.length-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tsorted_list = new Term( \".\", [sorted_arr[i], sorted_list] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [sorted_list, expected] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// keysort/2\r\n\t\t\"keysort/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar arr = [];\r\n\t\t\t\tvar elem;\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\telem = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( elem ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_term( elem ) || elem.indicator !== \"-/2\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"pair\", elem, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telem.args[0].pair = elem.args[1];\r\n\t\t\t\t\tarr.push( elem.args[0] );\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_variable(expected)) {\r\n\t\t\t\t\t\tvar pointer = expected;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== \"-/2\")) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"pair\", head, atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar sorted_arr = arr.sort( pl.compare );\r\n\t\t\t\t\tvar sorted_list = new pl.type.Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = sorted_arr.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tsorted_list = new pl.type.Term( \".\", [new pl.type.Term( \"-\", [sorted_arr[i], sorted_arr[i].pair] ), sorted_list] );\r\n\t\t\t\t\t\tdelete sorted_arr[i].pair;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new pl.type.State( point.goal.replace( new pl.type.Term( \"=\", [sorted_list, expected] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// keygroup\r\n\t\t\"keygroup/2\": function(thread, point, atom) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(list)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(expected) && !pl.type.is_fully_list(expected)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", expected, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar keys = [];\r\n\t\t\t\tvar values = [];\r\n\t\t\t\tvar pointer = list\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tvar elem = pointer.args[0];\r\n\t\t\t\t\tif(pl.type.is_variable(elem)) {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(!pl.type.is_term(elem) || elem.indicator !== \"-/2\") {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.type(\"pair\", elem, atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar key = elem.args[0], value = elem.args[1];\r\n\t\t\t\t\tvar index = -1;\r\n\t\t\t\t\tfor(var i = 0; i < keys.length; i++) {\r\n\t\t\t\t\t\tif(pl.compare(key, keys[i]) === 0) {\r\n\t\t\t\t\t\t\tindex = i;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(index === -1) {\r\n\t\t\t\t\t\tindex = keys.length;\r\n\t\t\t\t\t\tkeys.push(key);\r\n\t\t\t\t\t\tvalues.push([]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalues[index].push(value);\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"list\", list, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_variable(expected)) {\r\n\t\t\t\t\t\tvar pointer = expected;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== \"-/2\")) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"pair\", head, atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"list\", expected, atom.indicator));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgroup = new Term(\"[]\", []);\r\n\t\t\t\t\tfor(var i = keys.length-1; i >= 0; i--)\r\n\t\t\t\t\t\tgroup = new Term(\".\", [new Term(\"-\", [keys[i], arrayToList(values[i])]), group]);\r\n\t\t\t\t\tthread.prepend([\r\n\t\t\t\t\t\tnew State(\r\n\t\t\t\t\t\t\tpoint.goal.replace(new pl.type.Term(\"=\", [expected, group])),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// CLAUSE CREATION AND DESTRUCTION\r\n\t\t\r\n\t\t// asserta/1\r\n\t\t\"asserta/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(clause) && clause.indicator === \":/2\") {\r\n\t\t\t\tmodule_id = clause.args[0].id;\r\n\t\t\t\tclause = clause.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, get_module;\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = body_conversion(clause.args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = null;\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else if(body !== null && !pl.type.is_callable(body)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t\t} else if((!pl.type.is_module(thread.session.modules[module_id])\r\n\t\t\t\t|| thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id])) {\r\n\t\t\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: thread.session});\r\n\t\t\t\t\t\tthread.session.modules[module_id] = get_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tget_module = thread.session.modules[module_id];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(get_module.rules[head.indicator] === undefined)\r\n\t\t\t\t\t\tget_module.rules[head.indicator] = [];\r\n\t\t\t\t\tget_module.public_predicates[head.indicator] = true;\r\n\t\t\t\t\tget_module.rules[head.indicator] = [new Rule(head, body, true)].concat(get_module.rules[head.indicator]);\r\n\t\t\t\t\tget_module.update_indices_predicate(head.indicator);\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// assertz/1\r\n\t\t\"assertz/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(clause) && clause.indicator === \":/2\") {\r\n\t\t\t\tmodule_id = clause.args[0].id;\r\n\t\t\t\tclause = clause.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, get_module;\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = body_conversion(clause.args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = null;\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else if(body !== null && !pl.type.is_callable(body)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t\t} else if((!pl.type.is_module(thread.session.modules[module_id])\r\n\t\t\t\t|| thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id])) {\r\n\t\t\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: thread.session});\r\n\t\t\t\t\t\tthread.session.modules[module_id] = get_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tget_module = thread.session.modules[module_id];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(get_module.rules[head.indicator] === undefined)\r\n\t\t\t\t\t\tget_module.rules[head.indicator] = [];\r\n\t\t\t\t\tget_module.public_predicates[head.indicator] = true;\r\n\t\t\t\t\tget_module.rules[head.indicator].push(new Rule(head, body, true));\r\n\t\t\t\t\tget_module.update_indices_predicate(head.indicator);\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// retract/1\r\n\t\t\"retract/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, module_atom, module_id;\r\n\t\t\t\tif(clause.indicator === \":/2\") {\r\n\t\t\t\t\tmodule_atom = clause.args[0];\r\n\t\t\t\t\tclause = clause.args[1];\r\n\t\t\t\t\tif(!pl.type.is_atom(module_atom)) {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", module_atom, atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmodule_atom = new Term(\"user\");\r\n\t\t\t\t}\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = clause.args[1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = new Term(\"true\");\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = module_atom.id;\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(!pl.type.is_module(get_module))\r\n\t\t\t\t\treturn;\r\n\t\t\t\tif(!point.retract) {\r\n\t\t\t\t\tif(thread.is_public_predicate(head.indicator, module_id)\r\n\t\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\t\tif(get_module.rules[head.indicator] !== undefined) {\r\n\t\t\t\t\t\t\tvar states = [];\r\n\t\t\t\t\t\t\tif(typeof get_module.rules[head.indicator] === \"function\") {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfor(var i = 0; i < get_module.rules[head.indicator].length; i++) {\r\n\t\t\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\t\t\tvar orule = get_module.rules[head.indicator][i];\r\n\t\t\t\t\t\t\t\tvar rule = orule.rename(thread);\r\n\t\t\t\t\t\t\t\tif(rule.body === null)\r\n\t\t\t\t\t\t\t\t\trule.body = new Term(\"true\", []);\r\n\t\t\t\t\t\t\t\tvar occurs_check = thread.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\t\t\t\tvar mgu = pl.unify(new Term(\",\", [head, body]), new Term(\",\", [rule.head, rule.body]), occurs_check);\r\n\t\t\t\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\":\", [\r\n\t\t\t\t\t\t\t\t\t\t\t\tmodule_atom,\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"retract\", [new Term(\":-\", [head, body])]),\r\n\t\t\t\t\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, rule.head]),\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [body, rule.body])\r\n\t\t\t\t\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t\t\t\t\t])), point.substitution, point);\r\n\t\t\t\t\t\t\t\t\tstate.retract = orule;\r\n\t\t\t\t\t\t\t\t\tstates.push(state);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tretract(thread, point, head.indicator, point.retract, get_module);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// retractall/1\r\n\t\t\"retractall/1\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!thread.is_public_predicate(head.indicator, context_module)\r\n\t\t\t|| head.indicator === \",/2\"\r\n\t\t\t|| thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(point.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\":\", [\r\n\t\t\t\t\t\t\tnew Term(context_module),\r\n\t\t\t\t\t\t\tnew Term(\"retract\", [new pl.type.Term(\":-\", [head, new Var(\"_\")])])\r\n\t\t\t\t\t\t]),\r\n\t\t\t\t\t\tnew Term(\"fail\", [])\r\n\t\t\t\t\t])), point.substitution, point),\r\n\t\t\t\t\tnew State(point.goal.replace(null), point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// abolish/1\r\n\t\t\"abolish/1\": function(thread, point, atom) {\r\n\t\t\tvar predicate = atom.args[0];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(predicate) && predicate.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(predicate.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", predicate.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = predicate.args[0].id;\r\n\t\t\t\tpredicate = predicate.args[1];\r\n\t\t\t} else {\r\n\t\t\t\tmodule_id = \"user\";\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(predicate) || pl.type.is_term(predicate) && predicate.indicator === \"//2\"\r\n\t\t\t&& (pl.type.is_variable(predicate.args[0]) || pl.type.is_variable(predicate.args[1]))) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_term(predicate) || predicate.indicator !== \"//2\") {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"predicate_indicator\", predicate, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_atom(predicate.args[0])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", predicate.args[0], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_integer(predicate.args[1])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", predicate.args[1], atom.indicator));\r\n\t\t\t} else if(predicate.args[1].value < 0) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"not_less_than_zero\", predicate.args[1], atom.indicator));\r\n\t\t\t} else if(pl.type.is_number(thread.get_flag(\"max_arity\")) && predicate.args[1].value > thread.get_flag(\"max_arity\").value) {\r\n\t\t\t\tthread.throw_error(pl.error.representation(\"max_arity\", atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\tvar indicator = predicate.args[0].id + \"/\" + predicate.args[1].value;\r\n\t\t\t\t\tif(thread.is_public_predicate(indicator, module_id)\r\n\t\t\t\t\t&& indicator !== \",/2\"\r\n\t\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(indicator)) {\r\n\t\t\t\t\t\tdelete get_module.rules[indicator];\r\n\t\t\t\t\t\tdelete get_module.indexed_clauses[indicator];\r\n\t\t\t\t\t\tdelete get_module.non_indexable_clauses[indicator];\r\n\t\t\t\t\t\tdelete get_module.public_predicates[indicator];\r\n\t\t\t\t\t\tdelete get_module.multifile_predicates[indicator];\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", atom.args[0], atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ATOM PROCESSING\r\n\t\t\r\n\t\t// atom_length/2\r\n\t\t\"atom_length/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[1] ) && !pl.type.is_integer( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( atom.args[1] ) && atom.args[1].value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar length = new Num( stringLength(atom.args[0].id), false );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [length, atom.args[1]] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_concat/3\r\n\t\t\"atom_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar str, goal, start = atom.args[0], end = atom.args[1], whole = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( whole ) && (pl.type.is_variable( start ) || pl.type.is_variable( end )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( start ) && !pl.type.is_atom( start ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", start, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( end ) && !pl.type.is_atom( end ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", end, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( whole ) && !pl.type.is_atom( whole ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", whole, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar v1 = pl.type.is_variable( start );\r\n\t\t\t\tvar v2 = pl.type.is_variable( end );\r\n\t\t\t\t//var v3 = pl.type.is_variable( whole );\r\n\t\t\t\tif( !v1 && !v2 ) {\r\n\t\t\t\t\tgoal = new Term( \"=\", [whole, new Term( start.id + end.id )] );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t} else if( v1 && !v2 ) {\r\n\t\t\t\t\tstr = whole.id.substr( 0, whole.id.length - end.id.length );\r\n\t\t\t\t\tif( str + end.id === whole.id ) {\r\n\t\t\t\t\t\tgoal = new Term( \"=\", [start, new Term( str )] );\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if( v2 && !v1 ) {\r\n\t\t\t\t\tstr = whole.id.substr( start.id.length );\r\n\t\t\t\t\tif( start.id + str === whole.id ) {\r\n\t\t\t\t\t\tgoal = new Term( \"=\", [end, new Term( str )] );\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tfor( var i = 0; i <= whole.id.length; i++ ) {\r\n\t\t\t\t\t\tvar atom1 = new Term( whole.id.substr( 0, i ) );\r\n\t\t\t\t\t\tvar atom2 = new Term( whole.id.substr( i ) );\r\n\t\t\t\t\t\tgoal = new Term( \",\", [new Term( \"=\", [atom1, start] ), new Term( \"=\", [atom2, end] )] );\r\n\t\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( states );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// sub_atom/5\r\n\t\t\"sub_atom/5\": function( thread, point, atom ) {\r\n\t\t\tvar i, atom1 = atom.args[0], before = atom.args[1], length = atom.args[2], after = atom.args[3], subatom = atom.args[4];\r\n\t\t\tif( pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( before ) && !pl.type.is_integer( before ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", before, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( length ) && !pl.type.is_integer( length ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", length, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( after ) && !pl.type.is_integer( after ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", after, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( before ) && before.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", before, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( length ) && length.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", length, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( after ) && after.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", after, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( subatom ) && !pl.type.is_atom( subatom ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", subatom, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar bs = [], ls = [], as = [];\r\n\t\t\t\tif( pl.type.is_variable( before ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tbs.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tbs.push( before.value );\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( length ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tls.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tls.push( length.value );\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( after ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tas.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tas.push( after.value );\r\n\t\t\t\t}\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor( var _i in bs ) {\r\n\t\t\t\t\tif(!bs.hasOwnProperty(_i)) continue;\r\n\t\t\t\t\ti = bs[_i];\r\n\t\t\t\t\tfor( var _j in ls ) {\r\n\t\t\t\t\t\tif(!ls.hasOwnProperty(_j)) continue;\r\n\t\t\t\t\t\tvar j = ls[_j];\r\n\t\t\t\t\t\tvar k = atom1.id.length - i - j;\r\n\t\t\t\t\t\tif( indexOf( as, k ) !== -1 ) {\r\n\t\t\t\t\t\tif( i+j+k === atom1.id.length ) {\r\n\t\t\t\t\t\t\t\tvar str = atom1.id.substr( i, j );\r\n\t\t\t\t\t\t\t\tif( atom1.id === atom1.id.substr( 0, i ) + str + atom1.id.substr( i+j, k ) ) {\r\n\t\t\t\t\t\t\t\t\tvar pl1 = new Term( \"=\", [new Term( str ), subatom] );\r\n\t\t\t\t\t\t\t\t\tvar pl2 = new Term( \"=\", [before, new Num( i )] );\r\n\t\t\t\t\t\t\t\t\tvar pl3 = new Term( \"=\", [length, new Num( j )] );\r\n\t\t\t\t\t\t\t\t\tvar pl4 = new Term( \"=\", [after, new Num( k )] );\r\n\t\t\t\t\t\t\t\t\tvar goal = new Term( \",\", [ new Term( \",\", [ new Term( \",\", [pl2, pl3] ), pl4] ), pl1] );\r\n\t\t\t\t\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_chars/2\r\n\t\t\"atom_chars/2\": function( thread, point, atom ) {\r\n\t\t\tvar atom1 = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( !pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\t\tif(!pl.type.is_variable(list)) {\r\n\t\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tif(!pl.type.is_character(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"character\", pointer.args[0], atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar list1 = new Term( \"[]\" );\r\n\t\t\t\t\tvar unilen = stringLength(atom1.id);\r\n\t\t\t\t\tfor( var i = unilen-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist1 = new Term( \".\", [new Term( atom1.id.charAt( i ) ), list1] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list1] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\t\t\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar v = pl.type.is_variable( atom1 );\r\n\t\t\t\t\tvar str = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) && v ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"character\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += pointer.args[0].id;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) && v ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( str ), atom1] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_codes/2\r\n\t\t\"atom_codes/2\": function( thread, point, atom ) {\r\n\t\t\tvar atom1 = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( !pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\t\tif(!pl.type.is_variable(list)) {\r\n\t\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tif(!pl.type.is_character_code(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"integer\", pointer.args[0], atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar list1 = new Term( \"[]\" );\r\n\t\t\t\t\tvar unilen = stringLength(atom1.id);\r\n\t\t\t\t\tfor( var i = unilen-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist1 = new Term( \".\", [new Num( codePointAt(atom1.id,i), false ), list1] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list1] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\t\t\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar v = pl.type.is_variable( atom1 );\r\n\t\t\t\t\tvar str = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character_code( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) && v ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += fromCodePoint( pointer.args[0].value );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) && v ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( str ), atom1] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// char_code/2\r\n\t\t\"char_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar char = atom.args[0], code = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( char ) && pl.type.is_variable( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( code ) ) {\r\n\t\t\t\t\tvar code1 = new Num( codePointAt(char.id,0 ), false );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [code1, code] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar char1 = new Term( fromCodePoint( code.value ) );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [char1, char] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number_chars/2\r\n\t\t\"number_chars/2\": function( thread, point, atom ) {\r\n\t\t\tvar str, num = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", num, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar isvar = pl.type.is_variable( num );\r\n\t\t\t\tif( !pl.type.is_variable( list ) ) {\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar total = true;\r\n\t\t\t\t\tstr = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\ttotal = false;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"character\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += pointer.args[0].id;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal = total && pl.type.is_empty_list( pointer );\r\n\t\t\t\t\tif( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !total && isvar ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( total ) {\r\n\t\t\t\t\t\tif( pl.type.is_variable( pointer ) && isvar ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar expr = thread.parse( str );\r\n\t\t\t\t\t\t\tvar num2 = expr.value;\r\n\t\t\t\t\t\t\tif( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax_by_predicate( \"parseable_number\", atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [num, num2] ) ), point.substitution, point )] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( !isvar ) {\r\n\t\t\t\t\tstr = num.toString();\r\n\t\t\t\t\tvar list2 = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = str.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist2 = new Term( \".\", [ new Term( str.charAt( i ) ), list2 ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list2] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number_codes/2\r\n\t\t\"number_codes/2\": function( thread, point, atom ) {\r\n\t\t\tvar str, num = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", num, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar isvar = pl.type.is_variable( num );\r\n\t\t\t\tif( !pl.type.is_variable( list ) ) {\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar total = true;\r\n\t\t\t\t\tstr = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character_code( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\ttotal = false;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += fromCodePoint( pointer.args[0].value );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal = total && pl.type.is_empty_list( pointer );\r\n\t\t\t\t\tif( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !total && isvar ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( total ) {\r\n\t\t\t\t\t\tif( pl.type.is_variable( pointer ) && isvar ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar expr = thread.parse( str );\r\n\t\t\t\t\t\t\tvar num2 = expr.value;\r\n\t\t\t\t\t\t\tif( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax_by_predicate( \"parseable_number\", atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [num, num2] ) ), point.substitution, point )] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( !isvar ) {\r\n\t\t\t\t\tstr = num.toString();\r\n\t\t\t\t\tvar list2 = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = str.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist2 = new Term( \".\", [ new Num( codePointAt(str,i), false ), list2 ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list2] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// upcase_atom/2\r\n\t\t\"upcase_atom/2\": function( thread, point, atom ) {\r\n\t\t\tvar original = atom.args[0], upcase = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", original, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( upcase ) && !pl.type.is_atom( upcase ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", upcase, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [upcase, new Term( original.id.toUpperCase(), [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// downcase_atom/2\r\n\t\t\"downcase_atom/2\": function( thread, point, atom ) {\r\n\t\t\tvar original = atom.args[0], downcase = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", original, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( downcase ) && !pl.type.is_atom( downcase ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", downcase, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [downcase, new Term( original.id.toLowerCase(), [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atomic_concat/3\r\n\t\t\"atomic_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar atomic1 = atom.args[0], atomic2 = atom.args[1], concat = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( atomic1 ) || pl.type.is_variable( atomic2 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atomic( atomic1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atomic1, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atomic( atomic2 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atomic2, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", concat, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar id = \"\";\r\n\t\t\t\tif( pl.type.is_atom( atomic1 ) ) {\r\n\t\t\t\t\tid += atomic1.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tid += \"\" + atomic1.value;\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_atom( atomic2 ) ) {\r\n\t\t\t\t\tid += atomic2.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tid += \"\" + atomic2.value;\r\n\t\t\t\t}\r\n\t\t\t\tvar atom = new Term(id, []);\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom, concat] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// atomic_list_concat/2\r\n\t\t\"atomic_list_concat/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], concat = atom.args[1];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"atomic_list_concat\", [list, new Term( \"\", [] ), concat] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// atomic_list_concat/3\r\n\t\t\"atomic_list_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], separator = atom.args[1], concat = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( separator ) || pl.type.is_variable( list ) && pl.type.is_variable( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( separator ) && !pl.type.is_number( separator ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", separator, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", concat, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar id = \"\";\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pl.type.is_term( pointer ) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_atom( pointer.args[0] ) && !pl.type.is_number( pointer.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( id !== \"\" )\r\n\t\t\t\t\t\tid += separator.id;\r\n\t\t\t\t\tif( pl.type.is_atom( pointer.args[0] ) )\r\n\t\t\t\t\t\tid += pointer.args[0].id;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tid += \"\" + pointer.args[0].value;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tid = new Term( id, [] );\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_term( pointer ) || pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [id, concat] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TERM COMPARISON\r\n\t\t\r\n\t\t\"@=/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.compare( atom.args[0], atom.args[1] ) > 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t\"@>=/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.compare( atom.args[0], atom.args[1] ) >= 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t\"compare/3\": function( thread, point, atom ) {\r\n\t\t\tvar order = atom.args[0], left = atom.args[1], right = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable( order ) && !pl.type.is_atom( order ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", order, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_atom( order ) && [\"<\", \">\", \"=\"].indexOf( order.id ) === -1 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"order\", order, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar compare = pl.compare( left, right );\r\n\t\t\t\tcompare = compare === 0 ? \"=\" : (compare === -1 ? \"<\" : \">\");\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [order, new Term( compare, [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// EVALUATION\r\n\t\t\r\n\t\t// is/2\r\n\t\t\"is/2\": function( thread, point, atom ) {\r\n\t\t\tvar op = atom.args[1].interpret( thread );\r\n\t\t\tif( !pl.type.is_number( op ) ) {\r\n\t\t\t\tthread.throw_error( op );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom.args[0], op], atom.indicator ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// between/3\r\n\t\t\"between/3\": function( thread, point, atom ) {\r\n\t\t\tvar lower = atom.args[0], upper = atom.args[1], bet = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( lower ) || pl.type.is_variable( upper ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( lower ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", lower, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( upper ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", upper, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( bet ) && !pl.type.is_integer( bet ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", bet, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( bet ) ) {\r\n\t\t\t\t\tif( lower.value <= upper.value ) {\r\n\t\t\t\t\t\tvar states = [new State( point.goal.replace( new Term( \"=\", [bet, lower] ) ), point.substitution, point )];\r\n\t\t\t\t\t\tstates.push( new State( point.goal.replace( new Term( \"between\", [new Num( lower.value+1, false ), upper, bet] ) ), point.substitution, point ) );\r\n\t\t\t\t\t\tthread.prepend( states );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if( lower.value <= bet.value && upper.value >= bet.value ) {\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// succ/2\r\n\t\t\"succ/2\": function( thread, point, atom ) {\r\n\t\t\tvar n = atom.args[0], m = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( n ) && pl.type.is_variable( m ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( n ) && !pl.type.is_integer( n ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", n, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( m ) && !pl.type.is_integer( m ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", m, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( n ) && n.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", n, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( m ) && m.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", m, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( m ) || m.value > 0 ) {\r\n\t\t\t\t\tif( pl.type.is_variable( n ) ) {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [n, new Num( m.value-1, false )] ) ), point.substitution, point )] );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [m, new Num( n.value+1, false )] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =:=/2\r\n\t\t\"=:=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp === 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =\\=/2\r\n\t\t\"=\\\\=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp !== 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// /2\r\n\t\t\">/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp > 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// >=/2\r\n\t\t\">=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp >= 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TYPE TEST\r\n\t\t\r\n\t\t// var/1\r\n\t\t\"var/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom/1\r\n\t\t\"atom/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_atom( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atomic/1\r\n\t\t\"atomic/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_atomic( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// compound/1\r\n\t\t\"compound/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_compound( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// integer/1\r\n\t\t\"integer/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_integer( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// float/1\r\n\t\t\"float/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_float( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number/1\r\n\t\t\"number/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_number( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// nonvar/1\r\n\t\t\"nonvar/1\": function( thread, point, atom ) {\r\n\t\t\tif( !pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ground/1\r\n\t\t\"ground/1\": function( thread, point, atom ) {\r\n\t\t\tif( atom.variables().length === 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// acyclic_term/1\r\n\t\t\"acyclic_term/1\": function( thread, point, atom ) {\r\n\t\t\tvar test = point.substitution.apply( point.substitution );\r\n\t\t\tvar variables = atom.args[0].variables();\r\n\t\t\tfor( var i = 0; i < variables.length; i++ )\r\n\t\t\t\tif( point.substitution.links[variables[i]] !== undefined && !point.substitution.links[variables[i]].equals( test.links[variables[i]] ) )\r\n\t\t\t\t\treturn;\r\n\t\t\tthread.success( point );\r\n\t\t},\r\n\t\t\r\n\t\t// callable/1\r\n\t\t\"callable/1\": function( thread, point, atom ) {\r\n\t\t\tvar callable = atom.args[0];\r\n\t\t\tif(pl.type.is_term(callable)) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// is_list/1\r\n\t\t\"is_list/1\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0];\r\n\t\t\twhile( pl.type.is_term( list ) && list.indicator === \"./2\" )\r\n\t\t\t\tlist = list.args[1];\r\n\t\t\tif( pl.type.is_term( list ) && list.indicator === \"[]/0\" )\r\n\t\t\t\tthread.success( point );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// STREAM SELECTION AND CONTROL\r\n\r\n\t\t// current_input/1\r\n\t\t\"current_input/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(stream)\r\n\t\t\t&& (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias)\r\n\t\t\t\t\t\t\t\t\t\t && !thread.get_stream_by_alias(stream.id))\r\n\t\t\t&& (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) {\r\n\t\t\t\tthread.throw_error( pl.error.domain(\"stream\", stream, atom.indicator) );\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_atom(stream))\r\n\t\t\t\t\tstream = thread.get_stream_by_alias(stream.id);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [stream, thread.get_current_input()])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// current_output/1\r\n\t\t\"current_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(stream)\r\n\t\t\t&& (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias)\r\n\t\t\t\t\t\t\t\t\t\t && !thread.get_stream_by_alias(stream.id))\r\n\t\t\t&& (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) {\r\n\t\t\t\tthread.throw_error( pl.error.domain(\"stream\", stream, atom.indicator) );\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_atom(stream))\r\n\t\t\t\t\tstream = thread.get_stream_by_alias( stream.id );\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [stream, thread.get_current_output()])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_input/1\r\n\t\t\"set_input/1\": function( thread, point, atom ) {\r\n\t\t\tvar input = atom.args[0];\r\n\t\t\tvar stream = pl.type.is_stream( input ) ? input : thread.get_stream_by_alias( input.id );\r\n\t\t\tif( pl.type.is_variable( input ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( input ) && !pl.type.is_atom( input ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", input, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(input.alias)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& !thread.get_stream_by_alias(input.id) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", input, atom.indicator ) );\r\n\t\t\t} else if( stream.output === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", input, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.set_current_input( stream );\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_output/1\r\n\t\t\"set_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar output = atom.args[0];\r\n\t\t\tvar stream = pl.type.is_stream( output ) ? output : thread.get_stream_by_alias( output.id );\r\n\t\t\tif( pl.type.is_variable( output ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( output ) && !pl.type.is_atom( output ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", output, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(output.alias)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& !thread.get_stream_by_alias(output.id) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", output, atom.indicator ) );\r\n\t\t\t} else if( stream.input === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", output, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.set_current_output( stream );\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// open/3\r\n\t\t\"open/3\": function( thread, point, atom ) {\r\n\t\t\tvar dest = atom.args[0], mode = atom.args[1], stream = atom.args[2];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"open\", [dest, mode, stream, new Term(\"[]\", [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// open/4\r\n\t\t\"open/4\": function( thread, point, atom ) {\r\n\t\t\tvar dest = atom.args[0], mode = atom.args[1], stream = atom.args[2], options = atom.args[3];\r\n\t\t\tif( pl.type.is_variable( dest ) || pl.type.is_variable( mode ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( mode ) && !pl.type.is_atom( mode ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", mode, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.uninstantiation( stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( dest ) && !pl.type.is_streamable( dest ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_io_mode( mode ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"io_mode\", mode, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_stream_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"stream_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0].id;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar alias = obj_options[\"alias\"];\r\n\t\t\t\t\tif( alias && thread.get_stream_by_alias(alias) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"open\", \"source_sink\", new Term(\"alias\", [new Term(alias, [])]), atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !obj_options[\"type\"] )\r\n\t\t\t\t\t\tobj_options[\"type\"] = \"text\";\r\n\t\t\t\t\tvar file;\r\n\t\t\t\t\tif( pl.type.is_atom( dest ) )\r\n\t\t\t\t\t\tfile = thread.file_system_open( dest.id, obj_options[\"type\"], mode.id );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfile = dest.stream( obj_options[\"type\"], mode.id );\r\n\t\t\t\t\tif( file === false ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"open\", \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( file === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.existence( \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar newstream = new Stream(\r\n\t\t\t\t\t\tfile, mode.id,\r\n\t\t\t\t\t\tobj_options[\"alias\"],\r\n\t\t\t\t\t\tobj_options[\"type\"],\r\n\t\t\t\t\t\tobj_options[\"reposition\"] === \"true\",\r\n\t\t\t\t\t\tobj_options[\"eof_action\"] );\r\n\t\t\t\t\tif( alias )\r\n\t\t\t\t\t\tthread.session.streams[alias] = newstream;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.session.streams[newstream.id] = newstream;\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [stream, newstream] ) ),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// close/1\r\n\t\t\"close/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"close\", [stream, new Term(\"[]\", [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// close/2\r\n\t\t\"close/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], options = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_close_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"close_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0].id === \"true\";\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(stream2 === thread.session.standard_input || stream2 === thread.session.standard_output || stream2 === thread.session.standard_error) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( stream2 === thread.session.current_input ) {\r\n\t\t\t\t\t\tthread.session.current_input = thread.session.standard_input;\r\n\t\t\t\t\t} else if( stream2 === thread.session.current_output ) {\r\n\t\t\t\t\t\tthread.session.current_output = thread.session.standard_output;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( stream2.alias !== null && stream2.alias !== undefined )\r\n\t\t\t\t\t\tdelete thread.session.streams[stream2.alias];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tdelete thread.session.streams[stream2.id];\r\n\t\t\t\t\tif( stream2.output )\r\n\t\t\t\t\t\tstream2.stream.flush();\r\n\t\t\t\t\tvar closed = stream2.stream.close();\r\n\t\t\t\t\tstream2.stream = null;\r\n\t\t\t\t\tif( obj_options.force === true || closed === true ) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// flush_output/0\r\n\t\t\"flush_output/0\": [\r\n\t\t\tnew Rule(new Term(\"flush_output\", []), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"flush_output\", [new Var(\"S\")])]))\r\n\t\t],\r\n\r\n\t\t// flush_output/1\r\n\t\t\"flush_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tstream2.stream.flush();\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// stream_property/2\r\n\t\t\"stream_property/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], property = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && (!pl.type.is_stream( stream2 ) || stream2.stream === null) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( property ) && !pl.type.is_stream_property( property ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_property\", property, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar streams = [];\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar propvar = pl.type.is_variable(property);\r\n\t\t\t\tif( !pl.type.is_variable( stream ) )\r\n\t\t\t\t\tstreams.push( stream2 );\r\n\t\t\t\telse\r\n\t\t\t\t\tfor( var key in thread.session.streams )\r\n\t\t\t\t\t\tstreams.push( thread.session.streams[key] );\r\n\t\t\t\tfor( var i = 0; i < streams.length; i++ ) {\r\n\t\t\t\t\tvar properties = [];\r\n\t\t\t\t\t// file_name/1\r\n\t\t\t\t\tif( (propvar || property.indicator === \"file_name/1\") && streams[i].filename )\r\n\t\t\t\t\t\tproperties.push( new Term( \"file_name\", [new Term(streams[i].file_name, [])] ) );\r\n\t\t\t\t\t// mode/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"mode/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"mode\", [new Term(streams[i].mode, [])] ) );\r\n\t\t\t\t\t// input/0 or output/0\r\n\t\t\t\t\tif(propvar || property.indicator === \"input/0\" || property.indicator === \"output/0\")\r\n\t\t\t\t\t\tproperties.push( new Term( streams[i].input ? \"input\" : \"output\", [] ) );\r\n\t\t\t\t\t// alias/1\r\n\t\t\t\t\tif( (propvar || property.indicator === \"alias/1\") && streams[i].alias )\r\n\t\t\t\t\t\tproperties.push( new Term( \"alias\", [new Term(streams[i].alias, [])] ) );\r\n\t\t\t\t\t// position/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"position/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"position\", [\r\n\t\t\t\t\t\t\tnew Term(\"position\", [\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].char_count, false),\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].line_count, false),\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].line_position, false)\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t] ) );\r\n\t\t\t\t\t// end_of_stream/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"end_of_stream/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"end_of_stream\", [new Term(\r\n\t\t\t\t\t\t\tstreams[i].position === \"end_of_stream\" || streams[i].stream.eof && streams[i].stream.eof(streams[i].position) ? \"at\" :\r\n\t\t\t\t\t\t\tstreams[i].position === \"past_end_of_stream\" ? \"past\" :\r\n\t\t\t\t\t\t\t\"not\", [])] ) );\r\n\t\t\t\t\t// eof_action/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"eof_action/1\")\t\r\n\t\t\t\t\t\tproperties.push( new Term( \"eof_action\", [new Term(streams[i].eof_action, [])] ) );\r\n\t\t\t\t\t// reposition/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"reposition/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"reposition\", [new Term(streams[i].reposition ? \"true\" : \"false\", [])] ) );\r\n\t\t\t\t\t// type/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"type/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"type\", [new Term(streams[i].type, [])] ) );\r\n\t\t\t\t\tfor( var j = 0; j < properties.length; j++ ) {\r\n\t\t\t\t\t\tstates.push( new State(\r\n\t\t\t\t\t\t\tpoint.goal.replace( new Term( \",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [pl.type.is_variable( stream ) ? stream : stream2, streams[i]]),\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [property, properties[j]])]) ),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t) );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// stream_position_data\r\n\t\t\"stream_position_data/3\": function(thread, point, atom) {\r\n\t\t\tvar field = atom.args[0], position = atom.args[1], value = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(position)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_term(position) || position.indicator !== \"position/3\") {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"stream_position\", position, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(field) && !pl.type.is_atom(field)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", field, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(value) && !pl.type.is_integer(value)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", value, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar fields = [\"char_count\", \"line_count\", \"line_position\"];\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar data_pos = {char_count: 0, line_count: 1, line_position: 2};\r\n\t\t\t\tif(pl.type.is_variable(field)) {\r\n\t\t\t\t\tfor(var i = 0; i < fields.length; i++) {\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [new Term(fields[i]), field]),\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [value, position.args[data_pos[fields[i]]]])\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(data_pos.hasOwnProperty(field.id)) {\r\n\t\t\t\t\tstates.push(new State(point.goal.replace(\r\n\t\t\t\t\t\tnew Term(\"=\", [value, position.args[data_pos[field.id]]])\r\n\t\t\t\t\t), point.substitution, point));\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(states);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// at_end_of_stream/0\r\n\t\t\"at_end_of_stream/0\": [\r\n\t\t\tnew Rule(new Term(\"at_end_of_stream\", []), new pl.type.Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\",\", [new Term(\"stream_property\", [new Var(\"S\"),new Term(\"end_of_stream\", [new Var(\"E\")])]),new Term(\",\", [new Term(\"!\", []),new Term(\";\", [new Term(\"=\", [new Var(\"E\"),new Term(\"at\", [])]),new Term(\"=\", [new Var(\"E\"),new Term(\"past\", [])])])])])]))\r\n\t\t],\r\n\r\n\t\t// at_end_of_stream/1\r\n\t\t\"at_end_of_stream/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar e = thread.next_free_variable();\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\tnew Term(\",\", [new Term(\"stream_property\", [stream2,new Term(\"end_of_stream\", [e])]),\r\n\t\t\t\t\t\tnew Term(\",\", [new Term(\"!\", []),new Term(\";\", [new Term(\"=\", [e,new Term(\"at\", [])]),\r\n\t\t\t\t\t\tnew Term(\"=\", [e,new Term(\"past\", [])])])])])\r\n\t\t\t\t\t),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_stream_position/2\r\n\t\t\"set_stream_position/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], position = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( position ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream_position( position ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_position\", position, atom.indicator ) );\r\n\t\t\t} else if( stream2.reposition === false ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"reposition\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( position.indicator === \"position/3\" ) {\r\n\t\t\t\t\tstream2.position = position.args[0].value;\r\n\t\t\t\t\tstream2.char_count = position.args[0].value;\r\n\t\t\t\t\tstream2.line_count = position.args[1].value;\r\n\t\t\t\t\tstream2.line_position = position.args[2].value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream2.position = position.id;\r\n\t\t\t\t}\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// CHARACTER INPUT OUTPUT\r\n\t\t\r\n\t\t// get_char/1\r\n\t\t\"get_char/1\": [\r\n\t\t\tnew Rule(new Term(\"get_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// get_char/2\r\n\t\t\"get_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_char;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_char = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_char === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_char === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t\tif(stream_char === \"\\n\") {\r\n\t\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Term(stream_char,[]), char] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// get_code/1\r\n\t\t\"get_code/1\": [\r\n\t\t\tnew Rule(new Term(\"get_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// get_code/2\r\n\t\t\"get_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"in_character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_code;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_code = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_code === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_code === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream_code = codePointAt( stream_code, 0 );\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t\tif(stream_code === 10) {\r\n\t\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_code, false), code] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// peek_char/1\r\n\t\t\"peek_char/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_char/2\r\n\t\t\"peek_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_char;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_char = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_char === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_char === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Term(stream_char,[]), char] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// peek_code/1\r\n\t\t\"peek_code/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_code/2\r\n\t\t\"peek_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"in_character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_code;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_code = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_code === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_code === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream_code = codePointAt( stream_code, 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_code, false), code] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_char/1\r\n\t\t\"put_char/1\": [\r\n\t\t\tnew Rule(new Term(\"put_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// put_char/2\r\n\t\t\"put_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put( char.id, stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tif(char.id === \"\\n\") {\r\n\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_code/1\r\n\t\t\"put_code/1\": [\r\n\t\t\tnew Rule(new Term(\"put_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// put_code/2\r\n\t\t\"put_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put( fromCodePoint( code.value ), stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tif(code.value === 10) {\r\n\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// nl/0\r\n\t\t\"nl/0\": [\r\n\t\t\tnew Rule(new Term(\"nl\"), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_char\", [new Var(\"S\"),new Term(\"\\n\")])]))\r\n\t\t],\r\n\r\n\t\t// nl/1\r\n\t\t\"nl/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"put_char\", [stream, new Term(\"\\n\", [])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// BYTE INPUT/OUTPUT\r\n\r\n\t\t// get_byte/1\r\n\t\t\"get_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"get_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// get_byte/2\r\n\t\t\"get_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_byte;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_byte = stream2.stream.get_byte( stream2.position );\r\n\t\t\t\t\tif( stream_byte === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"byte\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_byte === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_byte,false), byte] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// peek_byte/1\r\n\t\t\"peek_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_byte/2\r\n\t\t\"peek_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_byte;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_byte = stream2.stream.get_byte( stream2.position );\r\n\t\t\t\t\tif( stream_byte === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"byte\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_byte === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_byte,false), byte] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_byte/1\r\n\t\t\"put_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"put_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// put_byte/2\r\n\t\t\"put_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put_byte( byte.value, stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TERM INPUT/OUTPUT\r\n\r\n\t\t// read/1\r\n\t\t\"read/1\": [\r\n\t\t\tnew Rule(new Term(\"read\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Term(\"[]\")])]))\r\n\t\t],\r\n\r\n\t\t// read/2\r\n\t\t\"read/2\": [\r\n\t\t\tnew Rule(new Term(\"read\", [new Var(\"S\"), new Var(\"T\")]), new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Term(\"[]\")]))\r\n\t\t],\r\n\r\n\t\t// read_term/2\r\n\t\t\"read_term/2\": [\r\n\t\t\tnew Rule(new Term(\"read_term\", [new Var(\"T\"),new Var(\"O\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Var(\"O\")])]))\r\n\t\t],\r\n\r\n\t\t// read_term/3\r\n\t\t\"read_term/3\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1], options = atom.args[2];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"eof_code\" ) {\r\n\t\t\t\texpr = {\r\n\t\t\t\t\tvalue: new Term(\"end_of_file\", []),\r\n\t\t\t\t\ttype: SUCCESS,\r\n\t\t\t\t\tlen: -1\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_read_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"read_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0];\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar char, tokenizer, expr;\r\n\t\t\t\t\tvar text = \"\";\r\n\t\t\t\t\tvar tokens = [];\r\n\t\t\t\t\tvar last_token = null;\r\n\t\t\t\t\tvar lexical_error = false;\r\n\t\t\t\t\t// Get term\r\n\t\t\t\t\twhile( last_token === null || lexical_error || last_token.name !== \"atom\" || last_token.value !== \".\" || tokens.length > 0 && expr.type === ERROR ) {\r\n\t\t\t\t\t\tchar = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\t\twhile(char !== null && char !== \".\" && char !== \"end_of_stream\" && char !== \"past_end_of_stream\") {\r\n\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\ttext += char;\r\n\t\t\t\t\t\t\tchar = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif( char === null ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else if( char === \"end_of_stream\" || char === \"past_end_of_stream\" ) {\r\n\t\t\t\t\t\t\tif(tokens === null || tokens.length === 0) {\r\n\t\t\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new Term(\"end_of_file\", []),\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS,\r\n\t\t\t\t\t\t\t\t\tlen: -1\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t} else if(expr) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( last_token, \"unexpected end of file\", false ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( last_token, \"token not found\", true ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if(char === \".\") {\r\n\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\ttext += char;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttokenizer = new Tokenizer( thread );\r\n\t\t\t\t\t\ttokenizer.new_text( text );\r\n\t\t\t\t\t\ttokens = tokenizer.get_tokens();\r\n\t\t\t\t\t\tnum_token = tokens !== null && tokens.length > 1 ? tokens[tokens.length-2] : null;\r\n\t\t\t\t\t\tlast_token = tokens !== null && tokens.length > 0 ? tokens[tokens.length-1] : null;\r\n\t\t\t\t\t\tif(tokens === null)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tlexical_error = false;\r\n\t\t\t\t\t\tfor(var i = 0; i < tokens.length && !lexical_error; i++)\r\n\t\t\t\t\t\t\tlexical_error = tokens[i].name === \"lexical\";\r\n\t\t\t\t\t\tif(lexical_error)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\texpr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false);\r\n\t\t\t\t\t\tif(num_token && num_token.name === \"number\" && !num_token.float && !num_token.blank && last_token.value === \".\") {\r\n\t\t\t\t\t\t\tvar next_char = stream2.stream.get(1, stream2.position);\r\n\t\t\t\t\t\t\tif(next_char >= '0' && next_char <= '9') {\r\n\t\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\t\ttext += next_char;\r\n\t\t\t\t\t\t\t\tlast_token = null;\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(last_token) {\r\n\t\t\t\t\t\tif(last_token.line_position === last_token.len)\r\n\t\t\t\t\t\t\tstream2.line_position += last_token.line_position;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tstream2.line_position = last_token.line_position;\r\n\t\t\t\t\t\tstream2.line_count += last_token.line_count;\r\n\t\t\t\t\t\tstream2.char_count += last_token.len;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Succeed analyzing term\r\n\t\t\t\t\tif( expr.type === SUCCESS && (expr.len === -1 || expr.len === tokens.length-1 && last_token.value === \".\" )) {\r\n\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\texpr = expr.value.rename( thread );\r\n\t\t\t\t\t\tvar eq = new Term( \"=\", [term, expr] );\r\n\t\t\t\t\t\t// Variables\r\n\t\t\t\t\t\tif( obj_options.variables ) {\r\n\t\t\t\t\t\t\tvar vars = arrayToList( map( nub( expr.variables() ), function(v) { return new Var(v); } ) );\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.variables, vars] )] )\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Variable names\r\n\t\t\t\t\t\tif( obj_options.variable_names ) {\r\n\t\t\t\t\t\t\tvar vars = nub(expr.variables());\r\n\t\t\t\t\t\t\tvar plvars = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < vars.length; i++) {\r\n\t\t\t\t\t\t\t\tvar v = vars[i];\r\n\t\t\t\t\t\t\t\tfor( var prop in thread.session.renamed_variables ) {\r\n\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables.hasOwnProperty( prop ) ) {\r\n\t\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables[ prop ] === v ) {\r\n\t\t\t\t\t\t\t\t\t\t\tplvars.push(new Term( \"=\", [new Term( prop, []), new Var(v)] ));\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplvars = arrayToList(plvars);\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.variable_names, plvars] )] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Singletons\r\n\t\t\t\t\t\tif( obj_options.singletons ) {\r\n\t\t\t\t\t\t\tvar vars = nub(new Rule(expr, null).singleton_variables(true));\r\n\t\t\t\t\t\t\tvar plvars = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < vars.length; i++) {\r\n\t\t\t\t\t\t\t\tvar v = vars[i];\r\n\t\t\t\t\t\t\t\tfor( var prop in thread.session.renamed_variables ) {\r\n\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables.hasOwnProperty( prop ) ) {\r\n\t\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables[ prop ] === v ) {\r\n\t\t\t\t\t\t\t\t\t\t\tplvars.push(new Term( \"=\", [new Term( prop, []), new Var(v)] ));\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplvars = arrayToList(plvars);\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.singletons, plvars] )] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( eq ), point.substitution, point )] );\r\n\t\t\t\t\t// Failed analyzing term\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif( expr.type === SUCCESS )\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( tokens[expr.len], \"unexpected token\", false ) );\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tthread.throw_error( expr.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// write/1\r\n\t\t\"write/1\": [\r\n\t\t\tnew Rule(new Term(\"write\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write/2\r\n\t\t\"write/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"false\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"false\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"true\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\t\t\r\n\t\t// writeq/1\r\n\t\t\"writeq/1\": [\r\n\t\t\tnew Rule(new Term(\"writeq\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"writeq\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// writeq/2\r\n\t\t\"writeq/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"true\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"false\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"true\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\t\t\r\n\t\t// write_canonical/1\r\n\t\t\"write_canonical/1\": [\r\n\t\t\tnew Rule(new Term(\"write_canonical\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write_canonical\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write_canonical/2\r\n\t\t\"write_canonical/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"true\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"true\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"false\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// write_term/2\r\n\t\t\"write_term/2\": [\r\n\t\t\tnew Rule(new Term(\"write_term\", [new Var(\"T\"),new Var(\"O\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write_term\", [new Var(\"S\"),new Var(\"T\"),new Var(\"O\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write_term/3\r\n\t\t\"write_term/3\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1], options = atom.args[2];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_write_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"write_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(property.indicator === \"variable_names/1\")\r\n\t\t\t\t\t\tobj_options[property.id] = property.args[0];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tobj_options[property.id] = property.args[0].id === \"true\";\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tobj_options.session = thread.session;\r\n\t\t\t\t\tvar text = term.toString( obj_options );\r\n\t\t\t\t\tstream2.stream.put( text, stream2.position );\r\n\t\t\t\t\tif( typeof stream2.position === \"number\" )\r\n\t\t\t\t\t\tstream2.position += text.length;\r\n\t\t\t\t\tvar nl = (text.match(/\\n/g) || []).length;\r\n\t\t\t\t\tstream2.line_count += nl;\r\n\t\t\t\t\tif(nl > 0)\r\n\t\t\t\t\t\tstream2.line_position = text.length - text.lastIndexOf(\"\\n\") - 1;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tstream2.line_position += text.length;\r\n\t\t\t\t\tstream2.char_count += text.length;\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// IMPLEMENTATION DEFINED HOOKS\r\n\t\t\r\n\t\t// halt/0\r\n\t\t\"halt/0\": function( thread, point, _ ) {\r\n\t\t\tif( thread.get_flag(\"nodejs\").indicator === \"true/0\" )\r\n\t\t\t\tprocess.exit();\r\n\t\t\tthread.points = [];\r\n\t\t},\r\n\t\t\r\n\t\t// halt/1\r\n\t\t\"halt/1\": function( thread, point, atom ) {\r\n\t\t\tvar int = atom.args[0];\r\n\t\t\tif( pl.type.is_variable( int ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( int ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", int, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( thread.get_flag(\"nodejs\").indicator === \"true/0\" )\r\n\t\t\t\t\tprocess.exit(int.value);\r\n\t\t\t\tthread.points = [];\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_prolog_flag/2\r\n\t\t\"current_prolog_flag/2\": function( thread, point, atom ) {\r\n\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\tif( !pl.type.is_variable( flag ) && !pl.type.is_atom( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( flag ) && !pl.type.is_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor( var name in pl.flag ) {\r\n\t\t\t\t\tif(!pl.flag.hasOwnProperty(name)) continue;\r\n\t\t\t\t\tvar goal = new Term( \",\", [new Term( \"=\", [new Term( name ), flag] ), new Term( \"=\", [thread.get_flag(name), value] )] );\r\n\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// set_prolog_flag/2\r\n\t\t\"set_prolog_flag/2\": function( thread, point, atom ) {\r\n\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_modifiable_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"flag\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_value_flag( flag, value ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"flag_value\", new Term( \"+\", [flag, value] ), atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.session.flag[flag.id] = value;\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// LOAD PROLOG SOURCE FILES\r\n\r\n\t\t// consult/1\r\n\t\t\"consult/1\": function(thread, point, atom) {\r\n\t\t\tvar src = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(src.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = src.args[0].id;\r\n\t\t\t\tsrc = src.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(src)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_atom(src)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", src, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif(thread.consult(src.id, {\r\n\t\t\t\t\tcontext_module: context_module,\r\n\t\t\t\t\ttext: false,\r\n\t\t\t\t\thtml: false,\r\n\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: function(err) {\r\n\t\t\t\t\t\tthread.throw_error(err);\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TIME AND DATES\r\n\r\n\t\t// get_time/1\r\n\t\t\"get_time/1\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(time) && !pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar current = new Num(Date.now(), true);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [time, current] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_property\r\n\t\t\"time_property/2\": function(thread, point, atom) {\r\n\t\t\tvar time = atom.args[0], property = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(time) && !pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"number\", time, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(property) && !pl.type.is_time_property(property)) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"time_property\", property, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar props;\r\n\t\t\t\tif(pl.type.is_variable(property)) {\r\n\t\t\t\t\tprops = [\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\", \"weekday\"];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tprops = [property.id];\r\n\t\t\t\t}\r\n\t\t\t\tvar date = new Date(time.value);\r\n\t\t\t\tvar value;\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor(var i = 0; i < props.length; i++) {\r\n\t\t\t\t\tswitch(props[i]) {\r\n\t\t\t\t\t\tcase \"year\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"year\", [new Num(date.getFullYear(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"month\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"month\", [new Num(date.getMonth(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"day\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"day\", [new Num(date.getDate(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"hours\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"hours\", [new Num(date.getHours(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"minutes\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"minutes\", [new Num(date.getMinutes(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"seconds\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"seconds\", [new Num(date.getSeconds(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"milliseconds\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"milliseconds\", [new Num(date.getMilliseconds(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"weekday\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"weekday\", [new Num(date.getDay(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstates.push(new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [property, value] ) ), \r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t));\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(states);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_year/2\r\n\t\t\"time_year/2\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0], year = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_variable(year) && !pl.type.is_integer(year)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", year, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar value = new Num(new Date(time.value).getFullYear(), false);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [year, value] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_month/2\r\n\t\t\"time_month/2\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0], month = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_variable(month) && !pl.type.is_integer(month)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", month, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar value = new Num(new Date(time.value).getMonth(), false);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [month, value] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// GRAMMARS\r\n\r\n\t\t// phrase/3\r\n\t\t\"phrase/3\": function( thread, point, atom ) {\r\n\t\t\tvar grbody = atom.args[0], s0 = atom.args[1], s = atom.args[2];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(grbody.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = grbody.args[0].id;\r\n\t\t\t\tgrbody = grbody.args[1];\r\n\t\t\t}\r\n\t\t\tif( pl.type.is_variable( grbody ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_callable( grbody ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"callable\", grbody, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar goal = body_to_dcg( grbody.clone(), s0, thread );\r\n\t\t\t\tgoal.value = new Term(\":\", [new Term(context_module), new Term(\"call\", [goal.value])]);\r\n\t\t\t\tif(goal !== null) {\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \",\", [goal.value, new Term(\"=\", [goal.variable, s])] ) ), \r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// phrase/2\r\n\t\t\"phrase/2\": function( thread, point, atom ) {\r\n\t\t\tvar grbody = atom.args[0], s0 = atom.args[1];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"phrase\", [grbody, s0, new Term(\"[]\", [])] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TAU PROLOG INFORMATION\r\n\r\n\t\t// version/0\r\n\t\t\"version/0\": function( thread, point, atom ) {\r\n\t\t\tvar msg = \"Welcome to Tau Prolog version \" + version.major + \".\" + version.minor + \".\" + version.patch + \"\\n\";\r\n\t\t\tmsg += \"Tau Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.\\n\";\r\n\t\t\tmsg += \"Please run ?- license. for legal details.\\n\";\r\n\t\t\tmsg += \"For online help and background, visit http:/tau-prolog.org\";\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"write\", [new Term( msg, [] )] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// license/0\r\n\t\t\"license/0\": function( thread, point, atom ) {\r\n\t\t\tvar msg = \"Tau Prolog. A Prolog interpreter in JavaScript.\\n\";\r\n\t\t\tmsg += \"Copyright (C) 2017 - 2022 José Antonio Riaza Valverde\\n\\n\";\r\n\t\t\tmsg += \"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\";\r\n\t\t\tmsg += \"1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\";\r\n\t\t\tmsg += \"2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\";\r\n\t\t\tmsg += \"3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\n\";\r\n\t\t\tmsg += \"THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\\n\";\r\n\t\t\tmsg += \"You should have received a copy of the BSD 3-Clause License along with this program. If not, see https://opensource.org/licenses/BSD-3-Clause\";\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"write\", [new Term( msg, [] )] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t}\r\n\r\n\t}, \"all\", {\r\n\t\tmeta_predicates: {\r\n\t\t\t// '$findall'(?, 0, -, ?)\r\n\t\t\t\"$findall/4\": new Term(\"$findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\"), new Term(\"?\")]),\r\n\t\t\t// '$bagof'(?, ^, -)\r\n\t\t\t\"$bagof/3\": new Term(\"$bagof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// '$setof'(?, ^, -)\r\n\t\t\t\"$setof/3\": new Term(\"$setof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// '$if'(0, 0, 0)\r\n\t\t\t\"$if/3\": new Term(\"$if\", [new Num(0, false), new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0;0)\r\n\t\t\t\";/2\": new Term(\";\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0->0)\r\n\t\t\t\"->/2\": new Term(\"->\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0->0)\r\n\t\t\t\"*->/2\": new Term(\"*->\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (\\+0)\r\n\t\t\t\"\\\\+/1\": new Term(\"\\\\+\", [new Num(0, false)]),\r\n\t\t\t// abolish(:)\r\n\t\t\t\"abolish/1\": new Term(\"abolish\", [new Term(\":\")]),\r\n\t\t\t// asserta(:)\r\n\t\t\t\"asserta/1\": new Term(\"asserta\", [new Term(\":\")]),\r\n\t\t\t// assertz(:)\r\n\t\t\t\"assertz/1\": new Term(\"assertz\", [new Term(\":\")]),\r\n\t\t\t// bagof(?, ^, -)\r\n\t\t\t\"bagof/3\": new Term(\"bagof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// call(0)\r\n\t\t\t\"call/1\": new Term(\"call\", [new Num(0, false)]),\r\n\t\t\t// call(1, ?)\r\n\t\t\t\"call/2\": new Term(\"call\", [new Num(1, false), new Term(\"?\")]),\r\n\t\t\t// call(2, ?, ?)\r\n\t\t\t\"call/3\": new Term(\"call\", [new Num(2, false), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(3, ?, ?, ?)\r\n\t\t\t\"call/4\": new Term(\"call\", [new Num(3, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(4, ?, ?, ?, ?)\r\n\t\t\t\"call/5\": new Term(\"call\", [new Num(4, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(5, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/6\": new Term(\"call\", [new Num(5, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(6, ?, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/7\": new Term(\"call\", [new Num(6, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(7, ?, ?, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/8\": new Term(\"call\", [new Num(6, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call_cleanup(0, 0)\r\n\t\t\t\"call_cleanup/2\": new Term(\"call_cleanup\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// catch(0, ?, 0)\r\n\t\t\t\"catch/3\": new Term(\"catch\", [new Num(0, false), new Term(\"?\"), new Num(0, false)]),\r\n\t\t\t// consult(:)\r\n\t\t\t\"consult/1\": new Term(\"consult\", [new Term(\":\")]),\r\n\t\t\t// clause(:, ?)\r\n\t\t\t\"clause/2\": new Term(\"clause\", [new Term(\":\"), new Term(\"?\")]),\r\n\t\t\t// current_predicate(?, :)\r\n\t\t\t\"current_predicate/2\": new Term(\"current_predicate\", [new Term(\"?\"), new Term(\":\")]),\r\n\t\t\t// findall(?, 0, -)\r\n\t\t\t\"findall/3\": new Term(\"findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\")]),\r\n\t\t\t// findall(?, 0, -, ?)\r\n\t\t\t\"findall/4\": new Term(\"findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\"), new Term(\"?\")]),\r\n\t\t\t// forall(0, 0)\r\n\t\t\t\"forall/2\": new Term(\"forall\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// listing(:)\r\n\t\t\t\"listing/1\": new Term(\"listing\", [new Term(\":\")]),\r\n\t\t\t// once(0)\r\n\t\t\t\"once/1\": new Term(\"once\", [new Num(0, false)]),\r\n\t\t\t// phrase(:, ?)\r\n\t\t\t\"phrase/2\": new Term(\"phrase\", [new Term(\":\"),new Term(\"?\")]),\r\n\t\t\t// phrase(:, ?, ?)\r\n\t\t\t\"phrase/3\": new Term(\"phrase\", [new Term(\":\"),new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// retract(:)\r\n\t\t\t\"retract/1\": new Term(\"retract\", [new Term(\":\")]),\r\n\t\t\t// retractall(:)\r\n\t\t\t\"retractall/1\": new Term(\"retractall\", [new Term(\":\")]),\r\n\t\t\t// setup_call_cleanup(0, 0, 0)\r\n\t\t\t\"setup_call_cleanup/3\": new Term(\"setup_call_cleanup\", [new Num(0, false), new Num(0, false), new Num(0, false)]),\r\n\t\t\t// setof(?, ^, -)\r\n\t\t\t\"setof/3\": new Term(\"setof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")])\r\n\t\t}\r\n\t});\r\n\r\n\tif( typeof module !== 'undefined' ) {\r\n\t\tmodule.exports = pl;\r\n\t} else {\r\n\t\twindow.pl = pl;\r\n\t}\r\n\t\r\n})();\r\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\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\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\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()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\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 isObject(re) && 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 isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (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 = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","var indexOf = function (xs, item) {\n if (xs.indexOf) return xs.indexOf(item);\n else for (var i = 0; i < xs.length; i++) {\n if (xs[i] === item) return i;\n }\n return -1;\n};\nvar Object_keys = function (obj) {\n if (Object.keys) return Object.keys(obj)\n else {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n }\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nvar defineProp = (function() {\n try {\n Object.defineProperty({}, '_', {});\n return function(obj, name, value) {\n Object.defineProperty(obj, name, {\n writable: true,\n enumerable: false,\n configurable: true,\n value: value\n })\n };\n } catch(e) {\n return function(obj, name, value) {\n obj[name] = value;\n };\n }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n if (!(this instanceof Script)) return new Script(code);\n this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n if (!(context instanceof Context)) {\n throw new TypeError(\"needs a 'context' argument.\");\n }\n \n var iframe = document.createElement('iframe');\n if (!iframe.style) iframe.style = {};\n iframe.style.display = 'none';\n \n document.body.appendChild(iframe);\n \n var win = iframe.contentWindow;\n var wEval = win.eval, wExecScript = win.execScript;\n\n if (!wEval && wExecScript) {\n // win.eval() magically appears when this is called in IE:\n wExecScript.call(win, 'null');\n wEval = win.eval;\n }\n \n forEach(Object_keys(context), function (key) {\n win[key] = context[key];\n });\n forEach(globals, function (key) {\n if (context[key]) {\n win[key] = context[key];\n }\n });\n \n var winKeys = Object_keys(win);\n\n var res = wEval.call(win, this.code);\n \n forEach(Object_keys(win), function (key) {\n // Avoid copying circular objects like `top` and `window` by only\n // updating existing context properties or new properties in the `win`\n // that was only introduced after the eval.\n if (key in context || indexOf(winKeys, key) === -1) {\n context[key] = win[key];\n }\n });\n\n forEach(globals, function (key) {\n if (!(key in context)) {\n defineProp(context, key, win[key]);\n }\n });\n \n document.body.removeChild(iframe);\n \n return res;\n};\n\nScript.prototype.runInThisContext = function () {\n return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n var ctx = Script.createContext(context);\n var res = this.runInContext(ctx);\n\n if (context) {\n forEach(Object_keys(ctx), function (key) {\n context[key] = ctx[key];\n });\n }\n\n return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n exports[name] = Script[name] = function (code) {\n var s = Script(code);\n return s[name].apply(s, [].slice.call(arguments, 1));\n };\n});\n\nexports.isContext = function (context) {\n return context instanceof Context;\n};\n\nexports.createScript = function (code) {\n return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n var copy = new Context();\n if(typeof context === 'object') {\n forEach(Object_keys(context), function (key) {\n copy[key] = context[key];\n });\n }\n return copy;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HistoryGraph = void 0;\nrequire(\"d3-transition\");\nconst d3_color_1 = require(\"d3-color\");\nconst d3_scale_1 = require(\"d3-scale\");\nconst d3_scale_chromatic_1 = require(\"d3-scale-chromatic\");\nconst d3_selection_1 = require(\"d3-selection\");\nconst d3_zoom_1 = require(\"d3-zoom\");\nconst fs = require(\"file-saver\");\nclass HistoryGraph {\n constructor(graphId, div, config = {}) {\n this.nodes = [];\n this.versionNodes = [];\n this.edges = [];\n this.maxX = 0;\n this.maxY = 0;\n this.maxId = 0;\n this.i = 0;\n var defaultConfig = {\n customSelectNode: (g, d) => false,\n customCtrlClick: (g, d) => false,\n customForm: (g, form) => null,\n customSize: (g) => [g.config.width, g.config.height],\n customWindowTabCommand: (trialIdSimplified, trialId, command) => false,\n hintMessage: \"Ctrl+Shift click or ⌘+Shift click to diff trials\",\n width: 200,\n height: 100,\n radius: 20,\n moveX: 20,\n moveY: 25,\n moveY2: 10,\n spacing: 17,\n margin: 50,\n fontSize: 10,\n useTooltip: false,\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.graphId = graphId;\n this.zoom = (0, d3_zoom_1.zoom)()\n .on(\"zoom\", (event) => {\n return this.zoomFunction(event);\n })\n .on(\"start\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"move\"))\n .on(\"end\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"auto\"))\n .wheelDelta(function () {\n const e = event;\n return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000;\n });\n this.div = (0, d3_selection_1.select)(div);\n let form = (0, d3_selection_1.select)(div)\n .append(\"form\")\n .classed(\"history-toolbar\", true);\n this.svg = (0, d3_selection_1.select)(div)\n .append(\"div\")\n .append(\"svg\")\n .attr(\"width\", this.config.width)\n .attr(\"height\", this.config.height)\n .call(this.zoom)\n .on(\"mouseup\", () => this.svgMouseUp());\n this.state = {\n selectedNode: null,\n mouseDownNode: null,\n justScale: false\n };\n // Tooltip\n this.tooltipDiv = (0, d3_selection_1.select)(\"body\").append(\"div\")\n .classed(\"now-tooltip now-history-tooltip\", true)\n .style(\"opacity\", 0)\n .style(\"max-width\", \"250px\")\n .on(\"mouseout\", () => {\n this.closeTooltip();\n });\n this.createToolbar(form);\n this.createMarker('end-arrow', 'endarrow', '#000');\n this.g = this.svg.append(\"g\")\n .attr(\"id\", this._graphId())\n .attr(\"transform\", \"translate(0,0)\")\n .classed('HistoryGraph', true);\n }\n createToolbar(form) {\n let formdiv = form.append(\"div\")\n .classed(\"buttons\", true);\n this.config.customForm(this, formdiv);\n // Reset zoom\n formdiv.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + this.graphId + \"-history-zoom\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Restore zoom\")\n .on(\"click\", () => this.restorePosition())\n .append(\"i\")\n .classed(\"fa fa-eye\", true);\n // Toggle Tooltips\n let tooltipsToggle = formdiv.append(\"input\")\n .attr(\"id\", \"history-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-tooltips\")\n .attr(\"value\", \"show\")\n .property(\"checked\", this.config.useTooltip)\n .on(\"change\", () => {\n this.closeTooltip();\n this.config.useTooltip = tooltipsToggle.property(\"checked\");\n });\n formdiv.append(\"label\")\n .attr(\"for\", \"history-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"title\", \"Show tooltips on mouse hover\")\n .append(\"i\")\n .classed(\"fa fa-comment\", true);\n // Download SVG\n formdiv.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + this.graphId + \"-download\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Download graph SVG\")\n .on(\"click\", () => {\n this.download();\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n // Set Font Size\n let fontToggle = formdiv.append(\"input\")\n .attr(\"id\", \"history-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-fonts\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = fontToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n fontSize.style(\"display\", display);\n });\n formdiv.append(\"label\")\n .attr(\"for\", \"history-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"title\", \"Set font size\")\n .append(\"i\")\n .classed(\"fa fa-font\", true);\n let fontSize = formdiv.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.fontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node font size\")\n .on(\"change\", () => {\n this.config.fontSize = fontSize.property(\"value\");\n this.svg.selectAll(\"text.trial-id\")\n .attr(\"font-size\", this.config.fontSize);\n });\n // Submit\n formdiv.append(\"input\")\n .attr(\"type\", \"submit\")\n .attr(\"name\", \"prevent-enter\")\n .attr(\"onclick\", \"return false;\")\n .style(\"display\", \"none\");\n formdiv.append(\"div\");\n formdiv.append(\"div\")\n .text(this.config.hintMessage)\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n }\n load(data) {\n let nodes = [], otherNodes = [], edges = [], spacing = this.config.spacing, margin = this.config.margin;\n let spacing2 = 2 * spacing, spacing4 = 4 * spacing, start = margin, max = 0, id = 0, last = data.nodes.length - 1, tid = 0, useVersion = false;\n let levels = [];\n for (var i = 0; i <= last; i++) {\n let node = data.nodes[i];\n var previous = levels[node.level];\n if (previous == undefined) {\n previous = -1;\n }\n var trials = node.trials;\n if (trials == undefined) {\n trials = [];\n }\n levels[node.level] = Math.max(previous, trials.length);\n }\n let levelsy = [];\n var current = margin;\n for (var i = 0; i <= levels.length; i++) {\n levelsy[i] = current;\n current += spacing2 + levels[i] * spacing2;\n }\n for (var i = 0; i <= last; i++) {\n let node = data.nodes[i];\n let x = start + spacing4 * id;\n let y = levelsy[node.level];\n var new_node = {\n id: id,\n display: node.display,\n x: x,\n y: y,\n title: node.id.toString(),\n info: node,\n radius: this.config.radius,\n gradient: false,\n status: node.status\n };\n nodes.push(new_node);\n if (typeof (node.trials) != \"undefined\") {\n useVersion = true;\n for (var j = 0; j < node.trials.length; j++) {\n let trialNode = node.trials[j];\n let ny = y + (j + 1) * spacing2 + spacing;\n otherNodes.push({\n id: tid,\n display: trialNode.display,\n x: x + this.config.radius / 2,\n y: ny,\n title: trialNode.id.toString(),\n info: trialNode,\n tooltip: trialNode.tooltip,\n radius: this.config.radius / 2,\n gradient: true,\n status: trialNode.status\n });\n tid += 1;\n max = Math.max(max, y);\n }\n }\n else {\n new_node.tooltip = node.tooltip;\n }\n max = Math.max(max, y);\n this.maxX = x;\n id += 1;\n }\n max += spacing2;\n this.maxY = max;\n this.maxId = Math.max(tid, id);\n for (var i = 0; i < data.edges.length; i++) {\n let edge = Object.assign({}, data.edges[i]);\n edge.id = edge.source + \"-\" + edge.target;\n edge.source = nodes[edge.source];\n edge.target = nodes[edge.target];\n if (edge.source != edge.target) {\n edges.push(edge);\n }\n }\n if (useVersion) {\n this.nodes = otherNodes;\n this.versionNodes = nodes;\n }\n else {\n this.nodes = nodes;\n this.versionNodes = [];\n }\n this.edges = edges;\n this.updateWindow();\n this.restorePosition();\n this.update();\n this.menuOnRightClick();\n return nodes;\n }\n updateWindow() {\n let size = this.config.customSize(this);\n this.config.width = size[0];\n this.config.height = size[1];\n this.svg\n .attr(\"width\", size[0])\n .attr(\"height\", size[1]);\n }\n update() {\n var nodes = this.g.selectAll('g.node')\n .data(this.nodes, (d) => d.id);\n var edges = this.g.selectAll('g.link')\n .data(this.edges, (d) => d.id);\n var version = this.g.selectAll('g.version')\n .data(this.versionNodes, (d) => d.id);\n this.updateNodes(nodes);\n this.updateVersionNodes(version);\n this.updateLinks(edges);\n }\n restorePosition() {\n let scale = this.config.height / this.maxY;\n if (scale <= 1.0) {\n this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity\n .translate(this.config.width\n - this.maxX * scale\n - this.config.margin, 0)\n .scale(scale));\n }\n else {\n this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity\n .scale(1)\n .translate(this.config.width\n - this.maxX\n - this.config.margin, 0));\n }\n this.state.justScale = false;\n }\n selectNode(node) {\n this.state.selectedNode = node;\n this.config.customSelectNode(this, node);\n this.svg.selectAll('.node[attr-trial=\"' + node.title + '\"] > rect')\n .attr('stroke', 'rgb(200, 238, 241)')\n .classed('selected', true);\n }\n selectTrial(trialId) {\n for (var node of this.nodes) {\n if (node.title == trialId) {\n this.selectNode(node);\n return;\n }\n }\n }\n download(name) {\n var isFileSaverSupported = false;\n try {\n isFileSaverSupported = !!new Blob();\n }\n catch (e) {\n alert(\"blob not supported\");\n }\n name = (name === undefined) ? \"history.svg\" : name;\n let gnode = this.g.node();\n var bbox = gnode.getBBox();\n var width = this.svg.attr(\"width\"), height = this.svg.attr(\"height\");\n this.g.attr(\"transform\", \"translate(\" + (-bbox.x + 5) + \", \" + (-bbox.y + 5) + \")\");\n let svgNode = this.svg\n .attr(\"title\", \"Trial\")\n .attr(\"version\", 1.1)\n .attr(\"width\", bbox.width + 10)\n .attr(\"height\", bbox.height + 10)\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node();\n var html = svgNode.parentNode.innerHTML;\n html = ' {\n if (this.state.selectedNode == null) {\n return false;\n }\n return cd.id === this.state.selectedNode.id;\n }).select('rect')\n .classed('selected', false)\n .attr(\"stroke\", \"#000\");\n this.state.selectedNode = null;\n }\n nodeMouseDown(event, d3node, d) {\n event.stopPropagation();\n this.state.mouseDownNode = d;\n this.closeTooltip();\n }\n nodeMouseUp(event, d3node, d) {\n event.stopPropagation();\n if (!this.state.mouseDownNode) {\n return;\n }\n if (this.state.justScale) {\n this.state.justScale = false;\n }\n else {\n if (event.ctrlKey || event.shiftKey || event.altKey) {\n this.config.customCtrlClick(this, d);\n return;\n }\n if (this.state.selectedNode) {\n this.unselectNode();\n }\n d3node\n .attr('stroke', 'rgb(200, 238, 241)')\n .classed('selected', true);\n this.state.selectedNode = d;\n this.config.customSelectNode(this, d);\n }\n this.state.mouseDownNode = null;\n }\n svgMouseUp() {\n if (this.state.justScale) {\n this.state.justScale = false;\n }\n }\n updateVersionNodes(nodes) {\n var nodeEnter = nodes.enter().append(\"g\")\n .classed(\"version\", true)\n .attr(\"attr-trialid\", (d) => d.title)\n .attr(\"transform\", (d) => {\n return \"translate(\" + 0 + \",\" + 0 + \")\";\n });\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n })\n .attr('width', (d) => 2 * d.radius)\n .attr('height', (d) => 2 * d.radius)\n .attr('rx', 0)\n .attr('ry', 0)\n //.attr('r', )\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\")\n .attr(\"fill\", \"#F6FBFF\")\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\");\n nodeEnter.append('text')\n .classed('trial-id', true)\n .attr('font-family', 'sans-serif')\n .attr('font-size', this.config.fontSize + 'px')\n .attr('pointer-events', 'none')\n .attr('x', (d) => d.radius)\n .attr('y', (d) => d.radius + 4)\n .attr('stroke', '#000')\n .attr('text-anchor', 'middle')\n //.attr('font-weight', 'bold')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }).text((d) => d.display);\n nodeEnter.merge(nodes); // nodeUpdate\n nodes.exit().remove(); // nodeExit\n }\n updateNodes(nodes) {\n let self = this;\n var nodeEnter = nodes.enter().append(\"g\")\n .classed(\"node\", true)\n .attr(\"attr-trialid\", (d) => d.title)\n .attr(\"cursor\", \"pointer\")\n .attr(\"transform\", (d) => {\n return \"translate(\" + 0 + \",\" + 0 + \")\";\n });\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n })\n .attr('cursor', 'pointer')\n .attr('title', (d) => d.info.display)\n .attr('width', (d) => 2 * d.radius)\n .attr('height', (d) => 2 * d.radius)\n .attr('rx', (d) => 2 * d.radius)\n .attr('ry', (d) => 2 * d.radius)\n //.attr('r', )\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\")\n .attr(\"fill\", function (d) {\n var proportion = Math.round(200 * (1.0 - (parseInt(d.title) / self.maxId)) + 50);\n if (d.status === 'unfinished') {\n return d.gradient ? (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString() : \"rgb(238, 200, 241)\";\n }\n if (d.status === 'finished') {\n return d.gradient ? (0, d3_color_1.rgb)(proportion, proportion, proportion, 255).toString() : \"#F6FBFF\";\n }\n if (d.status === 'backup') {\n return d.gradient ? (0, d3_color_1.rgb)(255, 255, proportion, 255).toString() : \"rgb(241, 238, 200)\";\n }\n return '#666';\n })\n .attr(\"stroke\", function (d) {\n return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : \"#000\";\n })\n .attr(\"stroke-width\", \"2.5px\")\n .on('mousedown', function (event, d) {\n self.nodeMouseDown(event, (0, d3_selection_1.select)(this), d);\n }).on('click', function (event, d) {\n self.nodeMouseUp(event, (0, d3_selection_1.select)(this), d);\n }).on('mouseover', function (event, d) {\n if (!self.state.mouseDownNode && self.config.useTooltip) {\n self.closeTooltip();\n self.showTooltip(event, d);\n }\n (0, d3_selection_1.select)(this)\n .attr('stroke', 'rgb(200, 238, 241)');\n }).on('mouseout', function (event, d) {\n (0, d3_selection_1.select)(this)\n .attr(\"stroke\", (d) => {\n return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : \"#000\";\n });\n })\n .classed(\"custom-menu\", true);\n nodeEnter.append('text')\n .classed('trial-id', true)\n .attr('font-family', 'sans-serif')\n .attr('font-size', this.config.fontSize + 'px')\n .attr('pointer-events', 'none')\n .attr('x', (d) => d.radius)\n .attr('y', (d) => d.radius + 4)\n .attr('stroke', '#000')\n .attr('text-anchor', 'middle')\n //.attr('font-weight', 'bold')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }).text((d) => d.gradient ? \"\" : d.display);\n nodeEnter.merge(nodes); // nodeUpdate\n nodes.exit().remove(); // nodeExit\n }\n updateLinks(link) {\n // Enter any new links\n let colors = (0, d3_scale_1.scaleOrdinal)(d3_scale_chromatic_1.schemeCategory10);\n var linkEnter = link.enter().insert('path', 'g')\n .classed('link', true)\n .attr('cursor', 'crosshair')\n .attr('fill', 'none')\n .attr('stroke', '#000')\n .attr('stroke-width', '4px');\n linkEnter\n .attr(\"d\", (d) => {\n var deltaX = d.target.x - d.source.x, deltaY = d.target.y - d.source.y, dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY), normX = deltaX / dist, normY = deltaY / dist, sourcePadding = this.config.radius - 5, targetPadding = this.config.radius + (d.right ? 3 : -5), sourceX = d.source.x + this.config.radius + (sourcePadding * normX), sourceY = d.source.y + this.config.radius + (sourcePadding * normY), targetX = d.target.x + this.config.radius - (targetPadding * normX), targetY = d.target.y + this.config.radius - (targetPadding * normY);\n var step = 0;\n if (d.level > 0) {\n step += this.config.moveY;\n step += (d.level - 1) * this.config.moveY2;\n }\n return `M ${sourceX}, ${sourceY}\n C ${(sourceX - this.config.moveX / 2)} ${sourceY}\n ${(sourceX - this.config.moveX / 2)} ${(sourceY + 3 * step / 4)}\n ${(sourceX - this.config.moveX)} ${(sourceY + step)}\n L ${(sourceX - this.config.moveX)} ${(sourceY + step)}\n ${(targetX + this.config.moveX)} ${(sourceY + step)}\n C ${(targetX + this.config.moveX / 2)} ${(sourceY + 3 * step / 4)}\n ${(targetX + this.config.moveX / 2)} ${sourceY}\n ${targetX}, ${targetY}`;\n })\n .attr('marker-end', (d) => {\n return d.right ? 'url(#end-arrow)' : '';\n })\n .attr('stroke', (d) => {\n return (0, d3_color_1.rgb)(colors(d.level.toString())).darker().toString();\n });\n // Update\n linkEnter.merge(link); // linkUpdate\n // Remove any exiting links\n link.exit().remove(); // linkExit\n }\n zoomFunction(event) {\n this.state.justScale = true;\n this.closeTooltip();\n this.transform = event.transform;\n this.g.attr(\"transform\", event.transform);\n }\n _graphId() {\n return \"history-graph-\" + this.graphId;\n }\n menuOnRightClick() {\n let rightClickMenu = document.getElementById(\"context-menu\");\n // Set up an event handler for the documnt right click\n document.addEventListener(\"contextmenu\", function (event) {\n var _a;\n //open right click menu\n let target = event.target;\n if (target && target.classList.contains(\"custom-menu\")) {\n event.preventDefault();\n if (rightClickMenu) {\n rightClickMenu.setAttribute(\"selected-trial\", (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute(\"attr-trialid\"));\n rightClickMenu.setAttribute(\"selected-trial-simplified\", target.getAttribute(\"title\"));\n rightClickMenu.style.top = (event.pageY - 10).toString();\n rightClickMenu.style.left = (event.pageX - 90).toString();\n rightClickMenu.style.display = \"block\";\n rightClickMenu.classList.add(\"show\");\n }\n }\n });\n // close the menu\n document.addEventListener(\"click\", function (event) {\n if (rightClickMenu) {\n rightClickMenu.style.display = \"none\";\n rightClickMenu.classList.remove(\"show\");\n }\n });\n }\n}\nexports.HistoryGraph = HistoryGraph;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./structures\"), exports);\n__exportStar(require(\"./graph\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel .lm-AccordionPanel-title {\n box-sizing: border-box;\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n min-height: 22px;\n max-height: 22px;\n min-width: 35px;\n line-height: 20px;\n margin: 0px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\n background: #dbdbdb;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\n border: 1px solid lightskyblue;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title.lm-mod-expanded\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\\\f0d8';\n font-family: FontAwesome;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\\\f0d7';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\n padding: 0px 5px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/accordionpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,sBAAsB;EACtB,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,WAAW;AACb;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;;;EAGE,8BAA8B;AAChC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title {\\n box-sizing: border-box;\\n padding: 0px 10px;\\n background: #e5e5e5;\\n border: 1px solid #c0c0c0;\\n border-bottom: none;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n min-height: 22px;\\n max-height: 22px;\\n min-width: 35px;\\n line-height: 20px;\\n margin: 0px;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\\n background: #dbdbdb;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\\n border: 1px solid lightskyblue;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title.lm-mod-expanded\\n .lm-AccordionPanel-titleCollapser:before {\\n content: '\\\\f0d8';\\n font-family: FontAwesome;\\n}\\n\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title\\n .lm-AccordionPanel-titleCollapser:before {\\n content: '\\\\f0d7';\\n font-family: FontAwesome;\\n position: absolute;\\n right: 10px;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\\n padding: 0px 5px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n font-family: sans-serif;\n background: #f5f5f5;\n}\n\n.lm-CommandPalette-search {\n padding: 8px;\n}\n\n.lm-CommandPalette-wrapper {\n padding: 4px 6px;\n background: white;\n border: 1px solid #e0e0e0;\n position: relative;\n}\n\n.lm-CommandPalette-input {\n width: 92%;\n border: none;\n outline: none;\n font-size: 16px;\n}\n\n.lm-CommandPalette-header {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n background: #e1e1e1;\n cursor: pointer;\n}\n\n.lm-CommandPalette-header:hover::before {\n content: '\\\\2026'; /* ellipsis */\n float: right;\n margin-right: 4px;\n}\n\n.lm-CommandPalette-header > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item {\n padding: 4px 8px;\n color: #757575;\n font-size: 13px;\n font-weight: 500;\n}\n\n.lm-CommandPalette-emptyMessage {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n text-align: center;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-CommandPalette-item.lm-mod-active {\n background: #7fdbff;\n}\n\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\n background: #e5e5e5;\n}\n\n.lm-CommandPalette-itemIcon {\n display: none;\n}\n\n.lm-CommandPalette-itemLabel > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled mark {\n color: rgba(0, 0, 0, 0.4);\n}\n\n.lm-CommandPalette-itemCaption {\n color: #9e9e9e;\n font-size: 11px;\n font-weight: 400;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,gBAAgB,EAAE,aAAa;EAC/B,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n font-family: sans-serif;\\n background: #f5f5f5;\\n}\\n\\n.lm-CommandPalette-search {\\n padding: 8px;\\n}\\n\\n.lm-CommandPalette-wrapper {\\n padding: 4px 6px;\\n background: white;\\n border: 1px solid #e0e0e0;\\n position: relative;\\n}\\n\\n.lm-CommandPalette-input {\\n width: 92%;\\n border: none;\\n outline: none;\\n font-size: 16px;\\n}\\n\\n.lm-CommandPalette-header {\\n padding: 4px;\\n color: #757575;\\n font-size: 12px;\\n font-weight: 600;\\n background: #e1e1e1;\\n cursor: pointer;\\n}\\n\\n.lm-CommandPalette-header:hover::before {\\n content: '\\\\2026'; /* ellipsis */\\n float: right;\\n margin-right: 4px;\\n}\\n\\n.lm-CommandPalette-header > mark {\\n background-color: transparent;\\n font-weight: bold;\\n}\\n\\n.lm-CommandPalette-item {\\n padding: 4px 8px;\\n color: #757575;\\n font-size: 13px;\\n font-weight: 500;\\n}\\n\\n.lm-CommandPalette-emptyMessage {\\n padding: 4px;\\n color: #757575;\\n font-size: 12px;\\n font-weight: 600;\\n text-align: center;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled {\\n color: rgba(0, 0, 0, 0.25);\\n}\\n\\n.lm-CommandPalette-item.lm-mod-active {\\n background: #7fdbff;\\n}\\n\\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\\n background: #e5e5e5;\\n}\\n\\n.lm-CommandPalette-itemIcon {\\n display: none;\\n}\\n\\n.lm-CommandPalette-itemLabel > mark {\\n background-color: transparent;\\n font-weight: bold;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled mark {\\n color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.lm-CommandPalette-itemCaption {\\n color: #9e9e9e;\\n font-size: 11px;\\n font-weight: 400;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DataGrid {\n min-width: 64px;\n min-height: 64px;\n border: 1px solid #a0a0a0;\n}\n\n.lm-DataGrid-scrollCorner {\n background-color: #f0f0f0;\n}\n\n.lm-DataGrid-scrollCorner::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n background-color: #a0a0a0;\n}\n\n.lm-DataGrid-cellEditorOccluder {\n pointer-events: none;\n position: absolute;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorContainer {\n pointer-events: auto;\n position: absolute;\n background-color: #ffffff;\n box-sizing: border-box;\n box-shadow: 0px 0px 6px #006bf7;\n border: 2px solid #006bf7;\n}\n\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\n box-shadow: 0px 0px 6px red;\n border: 2px solid red;\n}\n\n.lm-DataGrid-cellEditorContainer > form {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorWidget {\n width: 100%;\n height: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n.lm-DataGrid-cellEditorInput {\n background-color: #ffffff;\n border: 0;\n}\n\n.lm-DataGrid-cellEditorCheckbox {\n margin: 0;\n}\n\n.lm-DataGrid-notification {\n position: absolute;\n display: flex;\n overflow: visible;\n animation: fade-in 300ms ease-out;\n}\n\n.lm-DataGrid-notificationContainer {\n box-shadow: 0px 2px 5px #999999;\n border-radius: 3px;\n background-color: white;\n color: black;\n border: 1px solid black;\n font-family: sans-serif;\n font-size: 13px;\n padding: 4px;\n}\n\n@keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n opacity: 1;\n }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/datagrid.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E;;AAE9E;EACE,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,yBAAyB;EACzB,sBAAsB;EACtB,+BAA+B;EAC/B,yBAAyB;AAC3B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,yBAAyB;EACzB,SAAS;AACX;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,iCAAiC;AACnC;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,uBAAuB;EACvB,YAAY;EACZ,uBAAuB;EACvB,uBAAuB;EACvB,eAAe;EACf,YAAY;AACd;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,YAAY;EACd;EACA;IACE,UAAU;EACZ;AACF\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) 2014-2018, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DataGrid {\\n min-width: 64px;\\n min-height: 64px;\\n border: 1px solid #a0a0a0;\\n}\\n\\n.lm-DataGrid-scrollCorner {\\n background-color: #f0f0f0;\\n}\\n\\n.lm-DataGrid-scrollCorner::after {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 1px;\\n height: 1px;\\n background-color: #a0a0a0;\\n}\\n\\n.lm-DataGrid-cellEditorOccluder {\\n pointer-events: none;\\n position: absolute;\\n overflow: hidden;\\n}\\n\\n.lm-DataGrid-cellEditorContainer {\\n pointer-events: auto;\\n position: absolute;\\n background-color: #ffffff;\\n box-sizing: border-box;\\n box-shadow: 0px 0px 6px #006bf7;\\n border: 2px solid #006bf7;\\n}\\n\\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\\n box-shadow: 0px 0px 6px red;\\n border: 2px solid red;\\n}\\n\\n.lm-DataGrid-cellEditorContainer > form {\\n width: 100%;\\n height: 100%;\\n overflow: hidden;\\n}\\n\\n.lm-DataGrid-cellEditorWidget {\\n width: 100%;\\n height: 100%;\\n outline: none;\\n box-sizing: border-box;\\n}\\n\\n.lm-DataGrid-cellEditorInput {\\n background-color: #ffffff;\\n border: 0;\\n}\\n\\n.lm-DataGrid-cellEditorCheckbox {\\n margin: 0;\\n}\\n\\n.lm-DataGrid-notification {\\n position: absolute;\\n display: flex;\\n overflow: visible;\\n animation: fade-in 300ms ease-out;\\n}\\n\\n.lm-DataGrid-notificationContainer {\\n box-shadow: 0px 2px 5px #999999;\\n border-radius: 3px;\\n background-color: white;\\n color: black;\\n border: 1px solid black;\\n font-family: sans-serif;\\n font-size: 13px;\\n padding: 4px;\\n}\\n\\n@keyframes fade-in {\\n 0% {\\n opacity: 0;\\n }\\n 50% {\\n opacity: 0.7;\\n }\\n 100% {\\n opacity: 1;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel-overlay {\\n background: rgba(255, 255, 255, 0.6);\\n border: 1px dashed black;\\n transition-property: top, left, right, bottom;\\n transition-duration: 150ms;\\n transition-timing-function: ease;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../dragdrop/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../widgets/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./datagrid.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) 2014-2018, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n@import '@lumino/dragdrop/style/index.css';\\n@import '@lumino/widgets/style/index.css';\\n@import './accordionpanel.css';\\n@import './commandpalette.css';\\n@import './datagrid.css';\\n@import './dockpanel.css';\\n@import './menu.css';\\n@import './menubar.css';\\n@import './scrollbar.css';\\n@import './tabbar.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n padding: 3px 0px;\n background: white;\n color: rgba(0, 0, 0, 0.87);\n border: 1px solid #c0c0c0;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-Menu-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-Menu-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-Menu-itemIcon {\n width: 21px;\n padding: 4px 2px;\n}\n\n.lm-Menu-itemLabel {\n padding: 4px 35px 4px 2px;\n}\n\n.lm-Menu-itemMnemonic {\n text-decoration: underline;\n}\n\n.lm-Menu-itemShortcut {\n padding: 4px 0px;\n}\n\n.lm-Menu-itemSubmenuIcon {\n width: 16px;\n padding: 4px 0px;\n}\n\n.lm-Menu-item[data-type='separator'] > div {\n padding: 0;\n height: 9px;\n}\n\n.lm-Menu-item[data-type='separator'] > div::after {\n content: '';\n display: block;\n position: relative;\n top: 4px;\n border-top: 1px solid #dddddd;\n}\n\n.lm-Menu-itemIcon::before,\n.lm-Menu-itemSubmenuIcon::before {\n font-family: FontAwesome;\n}\n\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\n content: '\\\\f00c';\n}\n\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\n content: '\\\\f0da';\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;EAC1B,yBAAyB;EACzB;;;cAGY;EACZ,0CAA0C;AAC5C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,WAAW;AACb;;AAEA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,6BAA6B;AAC/B;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n padding: 3px 0px;\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n border: 1px solid #c0c0c0;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\\n}\\n\\n.lm-Menu-item.lm-mod-active {\\n background: #e5e5e5;\\n}\\n\\n.lm-Menu-item.lm-mod-disabled {\\n color: rgba(0, 0, 0, 0.25);\\n}\\n\\n.lm-Menu-itemIcon {\\n width: 21px;\\n padding: 4px 2px;\\n}\\n\\n.lm-Menu-itemLabel {\\n padding: 4px 35px 4px 2px;\\n}\\n\\n.lm-Menu-itemMnemonic {\\n text-decoration: underline;\\n}\\n\\n.lm-Menu-itemShortcut {\\n padding: 4px 0px;\\n}\\n\\n.lm-Menu-itemSubmenuIcon {\\n width: 16px;\\n padding: 4px 0px;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div {\\n padding: 0;\\n height: 9px;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div::after {\\n content: '';\\n display: block;\\n position: relative;\\n top: 4px;\\n border-top: 1px solid #dddddd;\\n}\\n\\n.lm-Menu-itemIcon::before,\\n.lm-Menu-itemSubmenuIcon::before {\\n font-family: FontAwesome;\\n}\\n\\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\\n content: '\\\\f00c';\\n}\\n\\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\\n content: '\\\\f0da';\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n padding-left: 5px;\n background: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n border-bottom: 1px solid #dddddd;\n font:\n 13px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-MenuBar-menu {\n transform: translateY(-1px);\n}\n\n.lm-MenuBar-item {\n padding: 4px 8px;\n border-left: 1px solid transparent;\n border-right: 1px solid transparent;\n}\n\n.lm-MenuBar-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\n z-index: 10001;\n background: white;\n border-left: 1px solid #c0c0c0;\n border-right: 1px solid #c0c0c0;\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-MenuBar-item:focus-visible {\n outline: 2px solid #333;\n outline-offset: -2px;\n}\n\n.lm-MenuBar-item[aria-disabled='true'] {\n color: rgba(0, 0, 0, 0.37);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/menubar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,iBAAiB;EACjB,mBAAmB;EACnB,0BAA0B;EAC1B,gCAAgC;EAChC;;;cAGY;AACd;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,kCAAkC;EAClC,mCAAmC;AACrC;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,iBAAiB;EACjB,8BAA8B;EAC9B,+BAA+B;EAC/B,0CAA0C;AAC5C;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,0BAA0B;AAC5B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n padding-left: 5px;\\n background: #fafafa;\\n color: rgba(0, 0, 0, 0.87);\\n border-bottom: 1px solid #dddddd;\\n font:\\n 13px Helvetica,\\n Arial,\\n sans-serif;\\n}\\n\\n.lm-MenuBar-menu {\\n transform: translateY(-1px);\\n}\\n\\n.lm-MenuBar-item {\\n padding: 4px 8px;\\n border-left: 1px solid transparent;\\n border-right: 1px solid transparent;\\n}\\n\\n.lm-MenuBar-item.lm-mod-active {\\n background: #e5e5e5;\\n}\\n\\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\\n z-index: 10001;\\n background: white;\\n border-left: 1px solid #c0c0c0;\\n border-right: 1px solid #c0c0c0;\\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\\n}\\n\\n.lm-MenuBar-item:focus-visible {\\n outline: 2px solid #333;\\n outline-offset: -2px;\\n}\\n\\n.lm-MenuBar-item[aria-disabled='true'] {\\n color: rgba(0, 0, 0, 0.37);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/caretleft.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"../images/caretright.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"../images/caretup.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"../images/caretdown.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n min-height: 16px;\n max-height: 16px;\n min-width: 45px;\n border-top: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n min-width: 16px;\n max-width: 16px;\n min-height: 45px;\n border-left: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar-button {\n background-color: #f0f0f0;\n background-position: center center;\n min-height: 15px;\n max-height: 15px;\n min-width: 15px;\n max-width: 15px;\n}\n\n.lm-ScrollBar-button:hover {\n background-color: #dadada;\n}\n\n.lm-ScrollBar-button.lm-mod-active {\n background-color: #cdcdcd;\n}\n\n.lm-ScrollBar-track {\n background: #f0f0f0;\n}\n\n.lm-ScrollBar-thumb {\n background: #cdcdcd;\n}\n\n.lm-ScrollBar-thumb:hover {\n background: #bababa;\n}\n\n.lm-ScrollBar-thumb.lm-mod-active {\n background: #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\n height: 100%;\n min-width: 15px;\n border-left: 1px solid #a0a0a0;\n border-right: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\n width: 100%;\n min-height: 15px;\n border-top: 1px solid #a0a0a0;\n border-bottom: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___});\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___});\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___});\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___});\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,8BAA8B;AAChC;;AAEA;EACE,yBAAyB;EACzB,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,gCAAgC;AAClC;;AAEA;;EAEE,yDAA8C;AAChD;;AAEA;;EAEE,yDAA+C;AACjD;;AAEA;;EAEE,yDAA4C;AAC9C;;AAEA;;EAEE,yDAA8C;AAChD\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n min-height: 16px;\\n max-height: 16px;\\n min-width: 45px;\\n border-top: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n min-width: 16px;\\n max-width: 16px;\\n min-height: 45px;\\n border-left: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar-button {\\n background-color: #f0f0f0;\\n background-position: center center;\\n min-height: 15px;\\n max-height: 15px;\\n min-width: 15px;\\n max-width: 15px;\\n}\\n\\n.lm-ScrollBar-button:hover {\\n background-color: #dadada;\\n}\\n\\n.lm-ScrollBar-button.lm-mod-active {\\n background-color: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-track {\\n background: #f0f0f0;\\n}\\n\\n.lm-ScrollBar-thumb {\\n background: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-thumb:hover {\\n background: #bababa;\\n}\\n\\n.lm-ScrollBar-thumb.lm-mod-active {\\n background: #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\\n height: 100%;\\n min-width: 15px;\\n border-left: 1px solid #a0a0a0;\\n border-right: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\\n width: 100%;\\n min-height: 15px;\\n border-top: 1px solid #a0a0a0;\\n border-bottom: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n .lm-ScrollBar-button[data-action='decrement'] {\\n background-image: url(../images/caretleft.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n .lm-ScrollBar-button[data-action='increment'] {\\n background-image: url(../images/caretright.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n .lm-ScrollBar-button[data-action='decrement'] {\\n background-image: url(../images/caretup.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n .lm-ScrollBar-button[data-action='increment'] {\\n background-image: url(../images/caretdown.png);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.lm-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab {\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n flex: 0 1 125px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n padding: 0px;\n border: 0px;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n background: white;\n}\n\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\n background: #f0f0f0;\n}\n\n.lm-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabLabel,\n.lm-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n.lm-TabBar .lm-TabBar-addButton {\n padding: 0px 6px;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\n content: '\\\\f00d';\n font-family: FontAwesome;\n}\n\n.lm-TabBar .lm-TabBar-addButton:before {\n content: '\\\\f067';\n font-family: FontAwesome;\n}\n\n.lm-TabBar-tab.lm-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX;;;cAGY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;AAEA;;;EAGE,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;AAC5C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar {\\n min-height: 24px;\\n max-height: 24px;\\n}\\n\\n.lm-TabBar-content {\\n min-width: 0;\\n min-height: 0;\\n align-items: flex-end;\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-TabBar-tab {\\n padding: 0px 10px;\\n background: #e5e5e5;\\n border: 1px solid #c0c0c0;\\n border-bottom: none;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n flex: 0 1 125px;\\n min-height: 20px;\\n max-height: 20px;\\n min-width: 35px;\\n margin-left: -1px;\\n line-height: 20px;\\n}\\n\\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\\n padding: 0px;\\n border: 0px;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n}\\n\\n.lm-TabBar-tab.lm-mod-current {\\n background: white;\\n}\\n\\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\\n background: #f0f0f0;\\n}\\n\\n.lm-TabBar-tab:first-child {\\n margin-left: 0;\\n}\\n\\n.lm-TabBar-tab.lm-mod-current {\\n min-height: 23px;\\n max-height: 23px;\\n transform: translateY(1px);\\n}\\n\\n.lm-TabBar-tabIcon,\\n.lm-TabBar-tabLabel,\\n.lm-TabBar-tabCloseIcon {\\n display: inline-block;\\n}\\n\\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\\n margin-left: 4px;\\n}\\n\\n.lm-TabBar .lm-TabBar-addButton {\\n padding: 0px 6px;\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\\n content: '\\\\f00d';\\n font-family: FontAwesome;\\n}\\n\\n.lm-TabBar .lm-TabBar-addButton:before {\\n content: '\\\\f067';\\n font-family: FontAwesome;\\n}\\n\\n.lm-TabBar-tab.lm-mod-drag-image {\\n min-height: 23px;\\n max-height: 23px;\\n min-width: 125px;\\n border: none;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-cursor-backdrop {\n top: 0px;\n left: 0px;\n position: fixed;\n width: 200px;\n height: 200px;\n margin-top: -100px;\n margin-left: -100px;\n will-change: transform;\n z-index: 100;\n scrollbar-width: none;\n -ms-overflow-style: none;\n overflow: scroll;\n}\n\n.lm-cursor-backdrop::after {\n content: '';\n height: 1200px;\n width: 1200px;\n display: block;\n}\n\n.lm-cursor-backdrop::-webkit-scrollbar {\n display: none;\n}\n\n.lm-mod-drag-image {\n top: 0px;\n left: 0px;\n will-change: transform;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/dragdrop/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,QAAQ;EACR,SAAS;EACT,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,wBAAwB;EACxB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,SAAS;EACT,sBAAsB;AACxB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-cursor-backdrop {\\n top: 0px;\\n left: 0px;\\n position: fixed;\\n width: 200px;\\n height: 200px;\\n margin-top: -100px;\\n margin-left: -100px;\\n will-change: transform;\\n z-index: 100;\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n overflow: scroll;\\n}\\n\\n.lm-cursor-backdrop::after {\\n content: '';\\n height: 1200px;\\n width: 1200px;\\n display: block;\\n}\\n\\n.lm-cursor-backdrop::-webkit-scrollbar {\\n display: none;\\n}\\n\\n.lm-mod-drag-image {\\n top: 0px;\\n left: 0px;\\n will-change: transform;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\n /* Title is rotated for horizontal accordion panel using CSS */\n display: block;\n transform-origin: top left;\n transform: rotate(-90deg) translate(-100%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/accordionpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\\n /* Title is rotated for horizontal accordion panel using CSS */\\n display: block;\\n transform-origin: top left;\\n transform: rotate(-90deg) translate(-100%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n display: flex;\n flex-direction: column;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-CommandPalette-search {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-content {\n flex: 1 1 auto;\n margin: 0;\n padding: 0;\n min-height: 0;\n overflow: auto;\n list-style-type: none;\n}\n\n.lm-CommandPalette-header {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-CommandPalette-item {\n display: flex;\n flex-direction: row;\n}\n\n.lm-CommandPalette-itemIcon {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemContent {\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.lm-CommandPalette-itemShortcut {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemLabel {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-close-icon {\n border: 1px solid transparent;\n background-color: transparent;\n position: absolute;\n z-index: 1;\n right: 3%;\n top: 0;\n bottom: 0;\n margin: auto;\n padding: 7px 0;\n display: none;\n vertical-align: middle;\n outline: 0;\n cursor: pointer;\n}\n.lm-close-icon:after {\n content: 'X';\n display: block;\n width: 15px;\n height: 15px;\n text-align: center;\n color: #000;\n font-weight: normal;\n font-size: 12px;\n cursor: pointer;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;EAC7B,6BAA6B;EAC7B,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACZ,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,eAAe;AACjB;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,eAAe;AACjB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n display: flex;\\n flex-direction: column;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-CommandPalette-search {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-content {\\n flex: 1 1 auto;\\n margin: 0;\\n padding: 0;\\n min-height: 0;\\n overflow: auto;\\n list-style-type: none;\\n}\\n\\n.lm-CommandPalette-header {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n\\n.lm-CommandPalette-item {\\n display: flex;\\n flex-direction: row;\\n}\\n\\n.lm-CommandPalette-itemIcon {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemContent {\\n flex: 1 1 auto;\\n overflow: hidden;\\n}\\n\\n.lm-CommandPalette-itemShortcut {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemLabel {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n\\n.lm-close-icon {\\n border: 1px solid transparent;\\n background-color: transparent;\\n position: absolute;\\n z-index: 1;\\n right: 3%;\\n top: 0;\\n bottom: 0;\\n margin: auto;\\n padding: 7px 0;\\n display: none;\\n vertical-align: middle;\\n outline: 0;\\n cursor: pointer;\\n}\\n.lm-close-icon:after {\\n content: 'X';\\n display: block;\\n width: 15px;\\n height: 15px;\\n text-align: center;\\n color: #000;\\n font-weight: normal;\\n font-size: 12px;\\n cursor: pointer;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel {\n z-index: 0;\n}\n\n.lm-DockPanel-widget {\n z-index: 0;\n}\n\n.lm-DockPanel-tabBar {\n z-index: 1;\n}\n\n.lm-DockPanel-handle {\n z-index: 2;\n}\n\n.lm-DockPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-DockPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal'] {\n cursor: ew-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='vertical'] {\n cursor: ns-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-DockPanel-handle[data-orientation='vertical']:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n\n.lm-DockPanel-overlay {\n z-index: 3;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n.lm-DockPanel-overlay.lm-mod-hidden {\n display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B;;AAEA;EACE,UAAU;EACV,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel {\\n z-index: 0;\\n}\\n\\n.lm-DockPanel-widget {\\n z-index: 0;\\n}\\n\\n.lm-DockPanel-tabBar {\\n z-index: 1;\\n}\\n\\n.lm-DockPanel-handle {\\n z-index: 2;\\n}\\n\\n.lm-DockPanel-handle.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-DockPanel-handle:after {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n content: '';\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal'] {\\n cursor: ew-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical'] {\\n cursor: ns-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\\n left: 50%;\\n min-width: 8px;\\n transform: translateX(-50%);\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical']:after {\\n top: 50%;\\n min-height: 8px;\\n transform: translateY(-50%);\\n}\\n\\n.lm-DockPanel-overlay {\\n z-index: 3;\\n box-sizing: border-box;\\n pointer-events: none;\\n}\\n\\n.lm-DockPanel-overlay.lm-mod-hidden {\\n display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./widget.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./splitpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabpanel.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n@import './widget.css';\\n@import './accordionpanel.css';\\n@import './commandpalette.css';\\n@import './dockpanel.css';\\n@import './menu.css';\\n@import './menubar.css';\\n@import './scrollbar.css';\\n@import './splitpanel.css';\\n@import './tabbar.css';\\n@import './tabpanel.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n z-index: 10000;\n position: absolute;\n white-space: nowrap;\n overflow-x: hidden;\n overflow-y: auto;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-Menu-content {\n margin: 0;\n padding: 0;\n display: table;\n list-style-type: none;\n}\n\n.lm-Menu-item {\n display: table-row;\n}\n\n.lm-Menu-item.lm-mod-hidden,\n.lm-Menu-item.lm-mod-collapsed {\n display: none !important;\n}\n\n.lm-Menu-itemIcon,\n.lm-Menu-itemSubmenuIcon {\n display: table-cell;\n text-align: center;\n}\n\n.lm-Menu-itemLabel {\n display: table-cell;\n text-align: left;\n}\n\n.lm-Menu-itemShortcut {\n display: table-cell;\n text-align: right;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;;EAEE,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n z-index: 10000;\\n position: absolute;\\n white-space: nowrap;\\n overflow-x: hidden;\\n overflow-y: auto;\\n outline: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-Menu-content {\\n margin: 0;\\n padding: 0;\\n display: table;\\n list-style-type: none;\\n}\\n\\n.lm-Menu-item {\\n display: table-row;\\n}\\n\\n.lm-Menu-item.lm-mod-hidden,\\n.lm-Menu-item.lm-mod-collapsed {\\n display: none !important;\\n}\\n\\n.lm-Menu-itemIcon,\\n.lm-Menu-itemSubmenuIcon {\\n display: table-cell;\\n text-align: center;\\n}\\n\\n.lm-Menu-itemLabel {\\n display: table-cell;\\n text-align: left;\\n}\\n\\n.lm-Menu-itemShortcut {\\n display: table-cell;\\n text-align: right;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-MenuBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n list-style-type: none;\n}\n\n.lm-MenuBar-item {\n box-sizing: border-box;\n}\n\n.lm-MenuBar-itemIcon,\n.lm-MenuBar-itemLabel {\n display: inline-block;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/menubar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,qBAAqB;AACvB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n outline: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-MenuBar-content {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex-direction: row;\\n list-style-type: none;\\n}\\n\\n.lm-MenuBar-item {\\n box-sizing: border-box;\\n}\\n\\n.lm-MenuBar-itemIcon,\\n.lm-MenuBar-itemLabel {\\n display: inline-block;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n flex-direction: row;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n flex-direction: column;\n}\n\n.lm-ScrollBar-button {\n box-sizing: border-box;\n flex: 0 0 auto;\n}\n\n.lm-ScrollBar-track {\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.lm-ScrollBar-thumb {\n box-sizing: border-box;\n position: absolute;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;AACpB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-ScrollBar {\\n display: flex;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n flex-direction: row;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n flex-direction: column;\\n}\\n\\n.lm-ScrollBar-button {\\n box-sizing: border-box;\\n flex: 0 0 auto;\\n}\\n\\n.lm-ScrollBar-track {\\n box-sizing: border-box;\\n position: relative;\\n overflow: hidden;\\n flex: 1 1 auto;\\n}\\n\\n.lm-ScrollBar-thumb {\\n box-sizing: border-box;\\n position: absolute;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-SplitPanel-child {\n z-index: 0;\n}\n\n.lm-SplitPanel-handle {\n z-index: 1;\n}\n\n.lm-SplitPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-SplitPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\n cursor: ew-resize;\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\n cursor: ns-resize;\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/splitpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-SplitPanel-child {\\n z-index: 0;\\n}\\n\\n.lm-SplitPanel-handle {\\n z-index: 1;\\n}\\n\\n.lm-SplitPanel-handle.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-SplitPanel-handle:after {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n content: '';\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\\n cursor: ew-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\\n cursor: ns-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\\n left: 50%;\\n min-width: 8px;\\n transform: translateX(-50%);\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\\n top: 50%;\\n min-height: 8px;\\n transform: translateY(-50%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] {\n flex-direction: row;\n align-items: flex-end;\n}\n\n.lm-TabBar[data-orientation='vertical'] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n.lm-TabBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex: 1 1 auto;\n list-style-type: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\n flex-direction: row;\n}\n\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\n flex-direction: column;\n}\n\n.lm-TabBar-tab {\n display: flex;\n flex-direction: row;\n box-sizing: border-box;\n overflow: hidden;\n touch-action: none; /* Disable native Drag/Drop */\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabCloseIcon {\n flex: 0 0 auto;\n}\n\n.lm-TabBar-tabLabel {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n}\n\n.lm-TabBar-tab.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar-addButton.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\n position: relative;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\n left: 0;\n transition: left 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\n top: 0;\n transition: top 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\n transition: none;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n background: inherit;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB,EAAE,6BAA6B;AACnD;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,OAAO;EACP,2BAA2B;AAC7B;;AAEA;EACE,MAAM;EACN,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;EACtB,mBAAmB;AACrB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar {\\n display: flex;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] {\\n flex-direction: row;\\n align-items: flex-end;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] {\\n flex-direction: column;\\n align-items: flex-end;\\n}\\n\\n.lm-TabBar-content {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex: 1 1 auto;\\n list-style-type: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\\n flex-direction: row;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\\n flex-direction: column;\\n}\\n\\n.lm-TabBar-tab {\\n display: flex;\\n flex-direction: row;\\n box-sizing: border-box;\\n overflow: hidden;\\n touch-action: none; /* Disable native Drag/Drop */\\n}\\n\\n.lm-TabBar-tabIcon,\\n.lm-TabBar-tabCloseIcon {\\n flex: 0 0 auto;\\n}\\n\\n.lm-TabBar-tabLabel {\\n flex: 1 1 auto;\\n overflow: hidden;\\n white-space: nowrap;\\n}\\n\\n.lm-TabBar-tabInput {\\n user-select: all;\\n width: 100%;\\n box-sizing: border-box;\\n}\\n\\n.lm-TabBar-tab.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-TabBar-addButton.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\\n position: relative;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\\n left: 0;\\n transition: left 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\\n top: 0;\\n transition: top 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\\n transition: none;\\n}\\n\\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\\n user-select: all;\\n width: 100%;\\n box-sizing: border-box;\\n background: inherit;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabPanel-tabBar {\n z-index: 1;\n}\n\n.lm-TabPanel-stackedPanel {\n z-index: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/tabpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabPanel-tabBar {\\n z-index: 1;\\n}\\n\\n.lm-TabPanel-stackedPanel {\\n z-index: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Widget {\n box-sizing: border-box;\n position: relative;\n}\n\n.lm-Widget.lm-mod-hidden {\n display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/widget.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Widget {\\n box-sizing: border-box;\\n position: relative;\\n}\\n\\n.lm-Widget.lm-mod-hidden {\\n display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.history-toolbar {\n float: left;\n overflow: none;\n z-index: 3;\n position: absolute;\n}\n\n.history-toolbar .buttons {\n height: 30px;\n display: inline-block;\n margin-left: 8px;\n}\n\n.history-toolbar .buttons > input {\n height: 30px;\n}\n\n.history-toolbar .buttons > input[type=checkbox] {\n display: none\n}\n\n.history-toolbar .buttons > label, .history-toolbar > div > a {\n margin: 8px 8px 8px 0;\n}\n\n.history-toolbar .buttons > input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.history-toolbar .buttons > a.toollink,\n.history-toolbar .buttons > a.toollink:link,\n.history-toolbar .buttons > a.toollink:visited {\n color: black;\n}\n\n.history-toolbar .buttons > a.toollink:active {\n color: blue;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../history/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,WAAW;IACX,cAAc;IACd,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;IAGI,YAAY;AAChB;;AAEA;IACI,WAAW;AACf\",\"sourcesContent\":[\".history-toolbar {\\n float: left;\\n overflow: none;\\n z-index: 3;\\n position: absolute;\\n}\\n\\n.history-toolbar .buttons {\\n height: 30px;\\n display: inline-block;\\n margin-left: 8px;\\n}\\n\\n.history-toolbar .buttons > input {\\n height: 30px;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox] {\\n display: none\\n}\\n\\n.history-toolbar .buttons > label, .history-toolbar > div > a {\\n margin: 8px 8px 8px 0;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox] + label {\\n display:inline-block;\\n color: black;\\n cursor: pointer;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\\n color: blue;\\n}\\n\\n.history-toolbar .buttons > a.toollink,\\n.history-toolbar .buttons > a.toollink:link,\\n.history-toolbar .buttons > a.toollink:visited {\\n color: black;\\n}\\n\\n.history-toolbar .buttons > a.toollink:active {\\n color: blue;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_5___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_6___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_7___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*!\n * Bootstrap v4.0.0 (https://getbootstrap.com)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\\\2014 \\\\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\"\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___})}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_2___})}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(${___CSS_LOADER_URL_REPLACEMENT_3___}) no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_4___})}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_5___})}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_6___})}.carousel-control-next-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_7___})}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\n/*# sourceMappingURL=bootstrap.min.css.map */`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/bootstrap.min.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"/*!\\n * Bootstrap v4.0.0 (https://getbootstrap.com)\\n * Copyright 2011-2018 The Bootstrap Authors\\n * Copyright 2011-2018 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\\\"-1\\\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\\\"\\\\2014 \\\\00A0\\\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\\\"\\\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\\\"\\\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\\\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\\\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\\\"1\\\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\\\"Browse\\\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\\\"Browse\\\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\\\"\\\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\\\"/\\\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\\\"\\\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\\\")}.carousel-control-next-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\\\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\\\"\\\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\\\"\\\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\\\" (\\\" attr(title) \\\")\\\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\\n/*# sourceMappingURL=bootstrap.min.css.map */\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.history-content,\n.history-content .sub-content,\n.history-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.history-content .filter .internal {\n margin: 4px 8px;\n}\n\n.history-content .filter {\n}\n\n.history-content .filter input, .history-content .filter label {\n vertical-align: top;\n display: inline-block;\n}\n\n\n.history-content .graph-attr {\n\tdisplay: inline-block;\n\tmargin-right: 5px;\n}\n\n.history-content .graph-attr input, .history-content .graph-attr label {\n vertical-align: middle;\n display: inline-block;\n}\n\n.history-content .select-style {\n width: 170px;\n margin-right: 5px;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/history.css\"],\"names\":[],\"mappings\":\"AAEA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,eAAe;AACnB;;AAEA;AACA;;AAEA;IACI,mBAAmB;IACnB,qBAAqB;AACzB;;;AAGA;CACC,qBAAqB;CACrB,iBAAiB;AAClB;;AAEA;IACI,sBAAsB;IACtB,qBAAqB;AACzB;;AAEA;IACI,YAAY;IACZ,iBAAiB;AACrB\",\"sourcesContent\":[\"@import '~@noworkflow/history/style/index.css';\\n\\n.history-content,\\n.history-content .sub-content,\\n.history-content .sub-content > div {\\n overflow: hidden !important;\\n}\\n\\n.history-content .filter .internal {\\n margin: 4px 8px;\\n}\\n\\n.history-content .filter {\\n}\\n\\n.history-content .filter input, .history-content .filter label {\\n vertical-align: top;\\n display: inline-block;\\n}\\n\\n\\n.history-content .graph-attr {\\n\\tdisplay: inline-block;\\n\\tmargin-right: 5px;\\n}\\n\\n.history-content .graph-attr input, .history-content .graph-attr label {\\n vertical-align: middle;\\n display: inline-block;\\n}\\n\\n.history-content .select-style {\\n width: 170px;\\n margin-right: 5px;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../utils/style/shared.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../node_modules/css-loader/dist/cjs.js!../../trial/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../node_modules/css-loader/dist/cjs.js!./panel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../node_modules/css-loader/dist/cjs.js!./history.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../node_modules/css-loader/dist/cjs.js!./trial.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `body {\n font-family: \"Verdana\", \"Geneva\", \"sans-serif\";\n}\n\n.loading {\n font-size: 40px;\n}\n\n/* Link Button */\n\na.link-button {\n text-decoration: none;\n display:inline-block;\n padding: 4px 0;\n /*padding: 4px 12px;*/\n margin-bottom: 0;\n font-size: 14px;\n width: 100px;\n line-height: 15px;\n color: #333;\n text-align: center;\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\n vertical-align: middle;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\n background-repeat: repeat-x;\n border: 1px solid #ccc;\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\n border-bottom-color: #b3b3b3;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n}\n\na.link-button:active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n background-color:#e0e0e0;\n}\n\n.hide-toolbar {\n overflow: hidden;\n max-height: 0;\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 0;\n margin-bottom: 0;\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.show-toolbar {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n /*max-height: 1000px;\n overflow: hidden;*/\n}\n\n.visible {\n border-bottom: 1px solid black;\n}\n\n.info-filter input, .info-filter select {\n display: block;\n width: 250px;\n margin: 7px 0;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/index.css\"],\"names\":[],\"mappings\":\"AAQA;EACE,8CAA8C;AAChD;;AAEA;EACE,eAAe;AACjB;;AAEA,gBAAgB;;AAEhB;EACE,qBAAqB;EACrB,oBAAoB;EACpB,cAAc;CACf,qBAAqB;EACpB,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,kBAAkB;EAClB,6CAA6C;EAC7C,sBAAsB;EACtB,eAAe;EACf,yBAAyB;EACzB,wDAAwD;EACxD,4EAA4E;EAC5E,2DAA2D;EAC3D,sDAAsD;EACtD,yDAAyD;EACzD,2BAA2B;EAC3B,sBAAsB;EACtB,qCAAqC;EACrC,8DAA8D;EAC9D,4BAA4B;EAC5B,oHAAoH;EACpH,iEAAiE;EACjE,kFAAkF;EAClF,+EAA+E;EAC/E,0EAA0E;AAC5E;;AAEA;EACE,sBAAsB;EACtB,UAAU;EACV,+EAA+E;EAC/E,4EAA4E;EAC5E,uEAAuE;EACvE,wBAAwB;AAC1B;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,2DAA2D;IAC3D,8DAA8D;IAC9D,yDAAyD;IACzD,sDAAsD;AAC1D;;AAEA;IACI,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,wCAAwC;IACxC,2CAA2C;IAC3C,sCAAsC;IACtC,mCAAmC;IACnC;sBACkB;AACtB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;AACf\",\"sourcesContent\":[\"@import '~@noworkflow/utils/style/shared.css';\\n@import '~@noworkflow/history/style/index.css';\\n@import '~@noworkflow/trial/style/index.css';\\n@import './panel.css';\\n@import './history.css';\\n@import './trial.css';\\n\\n\\nbody {\\n font-family: \\\"Verdana\\\", \\\"Geneva\\\", \\\"sans-serif\\\";\\n}\\n\\n.loading {\\n font-size: 40px;\\n}\\n\\n/* Link Button */\\n\\na.link-button {\\n text-decoration: none;\\n display:inline-block;\\n padding: 4px 0;\\n /*padding: 4px 12px;*/\\n margin-bottom: 0;\\n font-size: 14px;\\n width: 100px;\\n line-height: 15px;\\n color: #333;\\n text-align: center;\\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\\n vertical-align: middle;\\n cursor: pointer;\\n background-color: #f5f5f5;\\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\\n background-repeat: repeat-x;\\n border: 1px solid #ccc;\\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\\n border-bottom-color: #b3b3b3;\\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n}\\n\\na.link-button:active {\\n background-image: none;\\n outline: 0;\\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n background-color:#e0e0e0;\\n}\\n\\n.hide-toolbar {\\n overflow: hidden;\\n max-height: 0;\\n padding-top: 0;\\n padding-bottom: 0;\\n margin-top: 0;\\n margin-bottom: 0;\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n}\\n\\n.show-toolbar {\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: ease-in;\\n -webkit-transition-timing-function: ease-in;\\n -o-transition-timing-function: ease-in;\\n transition-timing-function: ease-in;\\n /*max-height: 1000px;\\n overflow: hidden;*/\\n}\\n\\n.visible {\\n border-bottom: 1px solid black;\\n}\\n\\n.info-filter input, .info-filter select {\\n display: block;\\n width: 250px;\\n margin: 7px 0;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../../node_modules/@lumino/default-theme/style/index.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.p-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.p-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #C0C0C0;\n}\n\n\n.p-TabBar-tab {\n padding: 0px 10px;\n background: #E5E5E5;\n border: 1px solid #C0C0C0;\n border-bottom: none;\n font: 12px Helvetica, Arial, sans-serif;\n flex: 0 1 180px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n background: white;\n}\n\n\n.p-TabBar-tab:hover:not(.p-mod-current) {\n background: #F0F0F0;\n}\n\n\n.p-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n\n.p-TabBar-tabIcon,\n.p-TabBar-tabLabel,\n.p-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\n content: '\\\\f00d';\n font-family: FontAwesome;\n}\n\n\n.p-TabBar-tab.p-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n transform: translateX(-40%) translateY(-58%);\n}\n\n.p-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n\n.content {\n min-width: 50px;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n padding: 8px;\n border: 1px solid #C0C0C0;\n border-top: none;\n background: white;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.content > div {\n flex: 1 1 auto;\n overflow: auto;\n}\n\nbody {\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n}\n\n#main {\n flex: 1 1 auto;\n}\n\n\n.side-info {\n margin: 5px;\n font-size: 14px;\n}\n\n.side-info .main h1 {\n margin: 0;\n}\n\n.side-info .main h3 {\n margin: 0 0 8px 0;\n}\n\n.side-info .attr {\n display: block;\n margin: 3px 0;\n}\n\n.side-info .desc {\n font-weight: bold;\n}\n\n.side-info .fold {\n margin-top: 15px;\n font-size: 2em;\n}\n\n.side-info .fold:hover {\n cursor: pointer;\n}\n\n.side-info .fold span {\n padding-left: 7px;\n}\n\n.side-info .show-all {\n color: rgb(50, 38, 41);\n float: right;\n margin-right: 10px;\n}\n\n.side-info ul.mod-list,\n.side-info ul.env-list,\n.side-info ul.fac-list {\n padding: 0;\n margin: 0;\n list-style-type: none;\n}\n\n.side-info ul.mod-list li,\n.side-info ul.fac-list li {\n border-left: 3px solid black;\n margin: 6px 4px;\n padding: 1px 3px;\n}\n\n.side-info ul.env-list li {\n margin: 3px;\n font-size: 0.8em;\n}\n\n.side-info ul.env-list li .key {\n font-weight: bold;\n}\n\n.side-info ul.mod-list li .version,\n.side-info ul.fac-list li .mode,\n.side-info ul.fac-list li .buffering {\n float: right;\n margin-left: 20px;\n}\n\n.side-info .clear {\n clear: both;\n}\n\n.hash {\n font-size: 12px;\n color: #666;\n}\n\n.dbefore {\n color: red !important;\n}\n\n.dafter {\n color: green !important;\n}\n\n.dbefore::before {\n color: red !important;\n content: ' - ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.dafter::before {\n color: green !important;\n content: ' + ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.libefore {\n border-left: 3px solid red !important;\n color: red !important;\n}\n\n.liafter {\n border-left: 3px solid green !important;\n color: green !important;\n}\n\n.connection-error:hover {\n cursor: pointer;\n}\n\n.error-text {\n font-size: 15px;\n margin-left: 3px;\n vertical-align: middle;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/panel.css\"],\"names\":[],\"mappings\":\";AAIA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;;AAGA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,uCAAuC;EACvC,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;;AAGA;EACE,iBAAiB;AACnB;;;AAGA;EACE,mBAAmB;AACrB;;;AAGA;EACE,cAAc;AAChB;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;;AAGA;;;EAGE,qBAAqB;AACvB;;;AAGA;EACE,gBAAgB;AAClB;;;AAGA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;EAC1C,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,0CAA0C;AAC5C;;AAEA;EACE,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,SAAS;EACT,UAAU;EACV,gBAAgB;;AAElB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;AACpB;;AAEA;;;EAGE,UAAU;EACV,SAAS;EACT,qBAAqB;AACvB;;AAEA;;EAEE,4BAA4B;EAC5B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;EAGE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,WAAW;AACb;;AAEA;IACI,eAAe;IACf,WAAW;AACf;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,uBAAuB;EACvB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,qCAAqC;EACrC,qBAAqB;AACvB;;AAEA;EACE,uCAAuC;EACvC,uBAAuB;AACzB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,sBAAsB;AACxB\",\"sourcesContent\":[\"\\n@import '~@lumino/default-theme/style/index.css';\\n\\n\\n.p-TabBar {\\n min-height: 24px;\\n max-height: 24px;\\n}\\n\\n.p-TabBar-content {\\n min-width: 0;\\n min-height: 0;\\n align-items: flex-end;\\n border-bottom: 1px solid #C0C0C0;\\n}\\n\\n\\n.p-TabBar-tab {\\n padding: 0px 10px;\\n background: #E5E5E5;\\n border: 1px solid #C0C0C0;\\n border-bottom: none;\\n font: 12px Helvetica, Arial, sans-serif;\\n flex: 0 1 180px;\\n min-height: 20px;\\n max-height: 20px;\\n min-width: 35px;\\n margin-left: -1px;\\n line-height: 20px;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-current {\\n background: white;\\n}\\n\\n\\n.p-TabBar-tab:hover:not(.p-mod-current) {\\n background: #F0F0F0;\\n}\\n\\n\\n.p-TabBar-tab:first-child {\\n margin-left: 0;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-current {\\n min-height: 23px;\\n max-height: 23px;\\n transform: translateY(1px);\\n}\\n\\n\\n.p-TabBar-tabIcon,\\n.p-TabBar-tabLabel,\\n.p-TabBar-tabCloseIcon {\\n display: inline-block;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\\n margin-left: 4px;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\\n content: '\\\\f00d';\\n font-family: FontAwesome;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-drag-image {\\n min-height: 23px;\\n max-height: 23px;\\n min-width: 125px;\\n border: none;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\\n transform: translateX(-40%) translateY(-58%);\\n}\\n\\n.p-DockPanel-overlay {\\n background: rgba(255, 255, 255, 0.6);\\n border: 1px dashed black;\\n transition-property: top, left, right, bottom;\\n transition-duration: 150ms;\\n transition-timing-function: ease;\\n}\\n\\n.content {\\n min-width: 50px;\\n min-height: 50px;\\n display: flex;\\n flex-direction: column;\\n padding: 8px;\\n border: 1px solid #C0C0C0;\\n border-top: none;\\n background: white;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\\n}\\n\\n.content > div {\\n flex: 1 1 auto;\\n overflow: auto;\\n}\\n\\nbody {\\n display: flex;\\n flex-direction: column;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n margin: 0;\\n padding: 0;\\n overflow: hidden;\\n\\n}\\n\\n#main {\\n flex: 1 1 auto;\\n}\\n\\n\\n.side-info {\\n margin: 5px;\\n font-size: 14px;\\n}\\n\\n.side-info .main h1 {\\n margin: 0;\\n}\\n\\n.side-info .main h3 {\\n margin: 0 0 8px 0;\\n}\\n\\n.side-info .attr {\\n display: block;\\n margin: 3px 0;\\n}\\n\\n.side-info .desc {\\n font-weight: bold;\\n}\\n\\n.side-info .fold {\\n margin-top: 15px;\\n font-size: 2em;\\n}\\n\\n.side-info .fold:hover {\\n cursor: pointer;\\n}\\n\\n.side-info .fold span {\\n padding-left: 7px;\\n}\\n\\n.side-info .show-all {\\n color: rgb(50, 38, 41);\\n float: right;\\n margin-right: 10px;\\n}\\n\\n.side-info ul.mod-list,\\n.side-info ul.env-list,\\n.side-info ul.fac-list {\\n padding: 0;\\n margin: 0;\\n list-style-type: none;\\n}\\n\\n.side-info ul.mod-list li,\\n.side-info ul.fac-list li {\\n border-left: 3px solid black;\\n margin: 6px 4px;\\n padding: 1px 3px;\\n}\\n\\n.side-info ul.env-list li {\\n margin: 3px;\\n font-size: 0.8em;\\n}\\n\\n.side-info ul.env-list li .key {\\n font-weight: bold;\\n}\\n\\n.side-info ul.mod-list li .version,\\n.side-info ul.fac-list li .mode,\\n.side-info ul.fac-list li .buffering {\\n float: right;\\n margin-left: 20px;\\n}\\n\\n.side-info .clear {\\n clear: both;\\n}\\n\\n.hash {\\n font-size: 12px;\\n color: #666;\\n}\\n\\n.dbefore {\\n color: red !important;\\n}\\n\\n.dafter {\\n color: green !important;\\n}\\n\\n.dbefore::before {\\n color: red !important;\\n content: ' - ';\\n font-family: \\\"Courier New\\\", Courier, monospace;\\n}\\n\\n.dafter::before {\\n color: green !important;\\n content: ' + ';\\n font-family: \\\"Courier New\\\", Courier, monospace;\\n}\\n\\n.libefore {\\n border-left: 3px solid red !important;\\n color: red !important;\\n}\\n\\n.liafter {\\n border-left: 3px solid green !important;\\n color: green !important;\\n}\\n\\n.connection-error:hover {\\n cursor: pointer;\\n}\\n\\n.error-text {\\n font-size: 15px;\\n margin-left: 3px;\\n vertical-align: middle;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trial-content,\n.trial-content .sub-content,\n.trial-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.trial-content .graphselector .graph-attr:first-child label {\n margin-right: 17px;\n}\n\n.trial-content .graphselector {\n width: 100%;\n padding-left: 8px;\n}\n\n.trial-content .graphselector .use-cache {\n margin-top: 10px;\n margin-left: 0px;\n}\n\n.trial-content .graphselector a.link-button {\n margin-top: 10px;\n width: 273px;\n}\n\n.trial-content .toggle-label {\n margin-right: 5px;\n}\n\n.graphselector > div:first-child {\n margin-top: 8px;\n}\n\n.graphselector > a:last-child {\n margin-bottom: 8px;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/trial.css\"],\"names\":[],\"mappings\":\"AAAA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,YAAY;AAChB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,kBAAkB;AACtB\",\"sourcesContent\":[\".trial-content,\\n.trial-content .sub-content,\\n.trial-content .sub-content > div {\\n overflow: hidden !important;\\n}\\n\\n.trial-content .graphselector .graph-attr:first-child label {\\n margin-right: 17px;\\n}\\n\\n.trial-content .graphselector {\\n width: 100%;\\n padding-left: 8px;\\n}\\n\\n.trial-content .graphselector .use-cache {\\n margin-top: 10px;\\n margin-left: 0px;\\n}\\n\\n.trial-content .graphselector a.link-button {\\n margin-top: 10px;\\n width: 273px;\\n}\\n\\n.trial-content .toggle-label {\\n margin-right: 5px;\\n}\\n\\n.graphselector > div:first-child {\\n margin-top: 8px;\\n}\\n\\n.graphselector > a:last-child {\\n margin-bottom: 8px;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trial-toolbar {\n margin: 5px;\n float: left;\n overflow: none;\n width: 375px;\n height: 30px;\n z-index: 3;\n position: absolute;\n}\n\n.trial-toolbar input {\n height: 30px;\n}\n\n.trial-toolbar input[type=checkbox] {\n display: none\n}\n\n.trial-toolbar label, .trial-toolbar a {\n margin-right: 8px;\n margin-top: 8px;\n}\n\n.trial-toolbar input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.trial-toolbar input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.trial-toolbar a.toollink,\n.trial-toolbar a.toollink:link,\n.trial-toolbar a.toollink:visited {\n color: black;\n}\n\n.trial-toolbar a.toollink:active {\n color: blue;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../trial/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,WAAW;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\".trial-toolbar {\\n margin: 5px;\\n float: left;\\n overflow: none;\\n width: 375px;\\n height: 30px;\\n z-index: 3;\\n position: absolute;\\n}\\n\\n.trial-toolbar input {\\n height: 30px;\\n}\\n\\n.trial-toolbar input[type=checkbox] {\\n display: none\\n}\\n\\n.trial-toolbar label, .trial-toolbar a {\\n margin-right: 8px;\\n margin-top: 8px;\\n}\\n\\n.trial-toolbar input[type=checkbox] + label {\\n display:inline-block;\\n color: black;\\n cursor: pointer;\\n}\\n\\n.trial-toolbar input[type=checkbox]:checked + label {\\n color: blue;\\n}\\n\\n.trial-toolbar a.toollink,\\n.trial-toolbar a.toollink:link,\\n.trial-toolbar a.toollink:visited {\\n color: black;\\n}\\n\\n.trial-toolbar a.toollink:active {\\n color: blue;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `div.now-tooltip {\n position: absolute;\n left: 1px;\n right: 1px;\n max-height: 200px;\n max-width: 400px;\n overflow: auto;\n padding: 5px;\n padding-bottom: 10px;\n font: 12px sans-serif;\n background: #DDD;\n border: 0px;\n border-radius: 8px;\n z-index: 2000;\n}\n\n.now-tooltip.hidden {\n display: none;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./../utils/style/shared.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,kBAAkB;IAClB,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,aAAa;AACjB;;AAEA;IACI,aAAa;AACjB\",\"sourcesContent\":[\"div.now-tooltip {\\n position: absolute;\\n left: 1px;\\n right: 1px;\\n max-height: 200px;\\n max-width: 400px;\\n overflow: auto;\\n padding: 5px;\\n padding-bottom: 10px;\\n font: 12px sans-serif;\\n background: #DDD;\\n border: 0px;\\n border-radius: 8px;\\n z-index: 2000;\\n}\\n\\n.now-tooltip.hidden {\\n display: none;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n options = {};\n }\n if (!url) {\n return url;\n }\n url = String(url.__esModule ? url.default : url);\n\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n if (options.hash) {\n url += options.hash;\n }\n\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n return url;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n export default content && content.locals ? content.locals : undefined;\n","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TrialGraph = void 0;\nrequire(\"d3-transition\");\nconst d3_color_1 = require(\"d3-color\");\nconst d3_hierarchy_1 = require(\"d3-hierarchy\");\nconst d3_selection_1 = require(\"d3-selection\");\nconst d3_zoom_1 = require(\"d3-zoom\");\nconst fs = require(\"file-saver\");\nconst utils_1 = require(\"@noworkflow/utils\");\nclass TrialGraph {\n constructor(graphId, div, config = {}, showDiffFunction, nowVisPanel) {\n if (showDiffFunction && nowVisPanel) {\n this.showDiffFunction = showDiffFunction;\n this.nowVisPanel = nowVisPanel;\n }\n this.i = 0;\n let defaultConfig = {\n customSize: function (g) {\n return [\n g.config.width,\n g.config.height,\n ];\n },\n customMouseOver: (g, d) => false,\n customMouseOut: (g, d) => false,\n customForm: (g, form) => null,\n customLoadTooltip: (g, div, text, trialid, aid) => null,\n duration: 750,\n top: 50,\n right: 30,\n bottom: 80,\n left: 30,\n width: 900,\n height: 500,\n useTooltip: false,\n fontSize: 10,\n labelFontSize: 10,\n nodeSizeX: 47,\n nodeSizeY: 100,\n queryTooltip: false\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.graphId = graphId;\n this.zoom = (0, d3_zoom_1.zoom)()\n .on(\"zoom\", (event) => {\n return this.zoomFunction(event);\n })\n .on(\"start\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"move\"))\n .on(\"end\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"auto\"))\n .wheelDelta(function () {\n const e = event;\n return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000;\n });\n this.div = (0, d3_selection_1.select)(div);\n this.form = this.div\n .append(\"form\")\n .classed(\"trial-toolbar\", true);\n this.svg = (0, d3_selection_1.select)(div)\n .append(\"div\")\n .append(\"svg\")\n .attr(\"width\", this.config.width)\n .attr(\"height\", this.config.height)\n .call(this.zoom);\n this.createMarker('end', 'enormal', 'black');\n this.createMarker('endbefore', 'ebefore', 'red');\n this.createMarker('endafter', 'eafter', 'green');\n this.g = this.svg.append(\"g\")\n .attr(\"id\", this._graphId())\n .attr(\"transform\", \"translate(0,0)\")\n .classed('TrialGraph', true);\n this.tree = (0, d3_hierarchy_1.tree)()\n .nodeSize([\n this.config.nodeSizeX,\n this.config.nodeSizeY\n ]);\n // Tooltip\n this.tooltipDiv = (0, d3_selection_1.select)(\"body\").append(\"div\")\n .attr(\"class\", \"now-tooltip now-trial-tooltip\")\n .style(\"opacity\", 0)\n .on(\"mouseout\", () => {\n this.closeTooltip();\n });\n // Zoom\n this.svg\n .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top));\n this.activationStorage = {};\n }\n init(data, t1, t2) {\n this.t1 = t1;\n this.t2 = t2;\n // **Toolbar**\n this.createToolbar(this.form);\n // **Graph**\n this.minDuration = data.min_duration;\n this.maxDuration = data.max_duration;\n this.totalDuration = {};\n this.totalDuration[t1] = this.maxDuration[t1] - this.minDuration[t1];\n this.totalDuration[t2] = this.maxDuration[t2] - this.minDuration[t2];\n this.maxTotalDuration = Math.max(this.totalDuration[t1], this.totalDuration[t2]);\n this.colors = data.colors;\n if (!data.root)\n return;\n this.root = (0, d3_hierarchy_1.hierarchy)(data.root, function (d) { return d.children; });\n this.root.x0 = 0;\n this.root.y0 = (this.config.width) / 2;\n this.alledges = data.edges;\n this.update(this.root);\n }\n createToolbar(form) {\n let self = this;\n form = form.append(\"div\")\n .classed(\"buttons buttonsGraph\", true);\n this.config.customForm(this, form);\n // Reset zoom\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"trial-\" + this.graphId + \"-restore-zoom\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Restore zoom\")\n .on(\"click\", () => this.restorePosition())\n .append(\"i\")\n .classed(\"fa fa-eye\", true);\n // Toggle Tooltips\n let tooltipsToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-tooltips\")\n .attr(\"value\", \"show\")\n .property(\"checked\", this.config.useTooltip)\n .on(\"change\", () => {\n this.closeTooltip();\n this.config.useTooltip = tooltipsToggle.property(\"checked\");\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"title\", \"Show tooltips on mouse hover\")\n .append(\"i\")\n .classed(\"fa fa-comment\", true);\n // Download SVG\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"trial-\" + this.graphId + \"-download\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Download graph SVG\")\n .on(\"click\", () => {\n this.download();\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n // Set Font Size\n let fontToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-fonts\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = fontToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n fontSize.style(\"display\", display);\n labelFontSize.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"title\", \"Set font size\")\n .append(\"i\")\n .classed(\"fa fa-font\", true);\n let fontSize = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.fontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node font size\")\n .on(\"change\", () => {\n this.config.fontSize = fontSize.property(\"value\");\n this.svg.selectAll(\".node text\").attr(\"font-size\", this.config.fontSize);\n });\n let labelFontSize = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.labelFontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Arrow font size\")\n .on(\"change\", () => {\n this.config.labelFontSize = labelFontSize.property(\"value\");\n this.svg.selectAll(\"text.label_text\").attr(\"font-size\", this.config.labelFontSize);\n });\n // Set distances\n let setDistances = function () {\n self.config.nodeSizeX = distanceX.property(\"value\");\n self.config.nodeSizeY = distanceY.property(\"value\");\n self.wrapText();\n self.tree\n .nodeSize([\n self.config.nodeSizeX,\n self.config.nodeSizeY\n ]);\n self.update(self.root);\n };\n // Set Distance X\n let distanceXToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-distance-x\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-distance-x\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = distanceXToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n distanceX.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-distance-x\")\n .attr(\"title\", \"Set horizontal distance\")\n .append(\"i\")\n .classed(\"fa fa-arrows-h\", true);\n let distanceX = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.nodeSizeX)\n .style(\"width\", \"65px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node horizontal distance\")\n .on(\"change\", setDistances);\n // Set Distance Y\n let distanceYToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-distance-y\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-distance-y\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = distanceYToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n distanceY.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-distance-y\")\n .attr(\"title\", \"Set vertical distance\")\n .append(\"i\")\n .classed(\"fa fa-arrows-v\", true);\n let distanceY = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.nodeSizeY)\n .style(\"width\", \"65px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node vertical distance\")\n .on(\"change\", setDistances);\n // Submit\n form.append(\"input\")\n .attr(\"type\", \"submit\")\n .attr(\"name\", \"prevent-enter\")\n .attr(\"onclick\", \"return false;\")\n .style(\"display\", \"none\");\n }\n load(data, t1, t2) {\n this.init(data, t1, t2);\n this.updateWindow();\n }\n restorePosition() {\n this.wrapText();\n this.svg\n .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top));\n }\n updateWindow() {\n let size = this.config.customSize(this);\n this.config.width = size[0];\n this.config.height = size[1];\n this.svg\n .attr(\"width\", size[0])\n .attr(\"height\", size[1]);\n }\n update(source) {\n let treeData = this.tree(this.root);\n this.nodes = treeData.descendants();\n var node = this.g.selectAll('g.node')\n .data(this.nodes, (d) => { return d.id || (d.id = ++this.i); });\n let validNodes = {};\n this.nodes.forEach((node) => {\n validNodes[node.data.index] = node;\n });\n var edges = this.alledges.filter((edge) => {\n let source = validNodes[edge.source];\n let target = validNodes[edge.target];\n if (source == undefined || target == undefined) {\n return false;\n }\n return true;\n }).map((edge) => {\n let source = validNodes[edge.source];\n let target = validNodes[edge.target];\n var copy = Object.assign({}, edge);\n copy.id = edge.source + \"-\" + edge.target;\n copy.source = source;\n copy.target = target;\n return copy;\n });\n this.updateNodes(source, node);\n this.updateLinks(source, edges);\n this.updateLinkLabels(edges);\n // Store old positions for transition\n this.nodes.forEach(function (d, i) {\n d.x0 = d.x;\n d.y0 = d.y;\n });\n this.wrapText();\n }\n download(name) {\n var isFileSaverSupported = false;\n try {\n isFileSaverSupported = !!new Blob();\n }\n catch (e) {\n alert(\"blob not supported\");\n }\n name = (name === undefined) ? \"trial.svg\" : name;\n let gnode = this.g.node();\n var bbox = gnode.getBBox();\n var width = this.svg.attr(\"width\"), height = this.svg.attr(\"height\");\n this.g.attr(\"transform\", \"translate(\" + (-bbox.x + 5) + \", \" + (-bbox.y + 5) + \")\");\n let svgNode = this.svg\n .attr(\"title\", \"Trial\")\n .attr(\"version\", 1.1)\n .attr(\"width\", bbox.width + 10)\n .attr(\"height\", bbox.height + 10)\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node();\n var html = svgNode.parentNode.innerHTML;\n html = ' 1 || activations[trial_ids[1]].length > 1);\n let modal;\n let modalBody;\n let button;\n if (showModal) {\n modal = (0, d3_selection_1.select)(document.getElementById(\"main\"))\n .append(\"div\").classed(\"modal fade show\", true)\n .attr(\"id\", \"functionDiffModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"functionDiffModalLabel\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"false\")\n .style(\"display\", \"block\");\n let modalDialog = modal.append(\"div\").classed(\"modal-dialog\", true).attr(\"role\", \"document\");\n let modalContent = modalDialog.append(\"div\").classed(\"modal-content\", true);\n let modalHeader = modalContent.append(\"div\").classed(\"modal-header\", true);\n modalHeader.append(\"h5\").classed(\"modal-title\", true).attr(\"id\", \"functionDiffModalLabel\").text(\"Select a function activation: \");\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"data-dismiss\", \"modal\").attr(\"aria-label\", \"Close\")\n .append(\"span\").attr(\"aria-hidden\", \"true\").html(\"×\").on(\"click\", () => modal.remove());\n modalBody = modalContent.append(\"div\").classed(\"modal-body\", true);\n modalBody.append(\"p\").text(\"This function was called multipled times. Select the activations you want to see their diff\").style(\"font-weight\", \"bold\");\n button = modalContent.append(\"div\").classed(\"modal-footer\", true).append(\"button\").classed(\"btn btn-primary\", true).text(\"Confirm\");\n }\n let compareFunctionCallsUrl = \"commands/diff\";\n let windowLabel = \"Diff\";\n for (let i = 0; i < trial_ids.length; i++) {\n let trial = trial_ids[i];\n if (showModal) {\n let trialNumber = i == 0 ? \"first\" : \"second\";\n modalBody.append(\"span\").text(\"Select the \" + trialNumber + \" trial activation: \");\n let select = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"functionTrial\" + trial).attr(\"id\", \"functionTrial\" + trial);\n for (let activation in activations[trial]) {\n fetch(\"/diff/getFunctionActivationArguments/\" + trial + \"/\" + activations[trial][activation], {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n select.append(\"option\").attr(\"value\", activations[trial][activation]).text(activations[trial][activation] + \" params: \" + json.function_params.toString());\n });\n });\n }\n modalBody.append(\"br\");\n }\n else {\n if (compareFunctionCallsUrl.length > 0)\n compareFunctionCallsUrl += \"/\";\n compareFunctionCallsUrl += trial + \"/\";\n compareFunctionCallsUrl += activations[trial];\n windowLabel += \" trial \" + trial + \" activation_id \" + activations[trial];\n }\n }\n if (showModal) {\n button === null || button === void 0 ? void 0 : button.on(\"click\", () => {\n let firstTrialActivation = document.getElementById(\"functionTrial\" + trial_ids[0]).selectedOptions[0].value;\n let secondTrialActivation = document.getElementById(\"functionTrial\" + trial_ids[1]).selectedOptions[0].value;\n compareFunctionCallsUrl += \"/\" + trial_ids[0] + \"/\" + firstTrialActivation + \"/\" + trial_ids[1] + \"/\" + secondTrialActivation;\n windowLabel += \" trial \" + trial_ids[0] + \" activation_id \" + firstTrialActivation + \" trial \" + trial_ids[1] + \" activation_id \" + secondTrialActivation;\n makeRequest(this.showDiffFunction, this.nowVisPanel);\n modal.remove();\n });\n }\n else {\n makeRequest(this.showDiffFunction, this.nowVisPanel);\n }\n function makeRequest(showDiffFunction, nowVisPanel) {\n fetch(compareFunctionCallsUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n if (showDiffFunction)\n showDiffFunction(json, windowLabel, nowVisPanel);\n });\n });\n }\n }\n closeTooltip() {\n this.tooltipDiv.transition()\n .duration(500)\n .style(\"opacity\", 0);\n this.tooltipDiv.classed(\"hidden\", true);\n }\n showTooltip(event, d, trial_id) {\n var self = this;\n this.tooltipDiv.classed(\"hidden\", false);\n this.tooltipDiv.transition()\n .duration(200)\n .style(\"opacity\", 0.9);\n if (this.config.queryTooltip) {\n var string = d.tooltip[trial_id];\n var regexp = (/T(.*) - (\\d*)
          Line \\d*?
          /g);\n var match = regexp.exec(string);\n this.tooltipDiv.html(\"\")\n .style(\"left\", (event.pageX - 3) + \"px\")\n .style(\"top\", (event.pageY - 28) + \"px\");\n while (match != null) {\n var div = document.createElement(\"div\");\n //var div2 = document.createElement(\"div\");\n this.tooltipDiv.append(() => div);\n //this.tooltipDiv.append(() => div2);\n var aid = match[2];\n if (aid in self.activationStorage) {\n this.updateTooltipDiv(aid, div);\n }\n else {\n self.config.customLoadTooltip(self, div, match[0], match[1], match[2]);\n }\n match = regexp.exec(string);\n }\n }\n else {\n this.tooltipDiv.html(d.tooltip[trial_id])\n .style(\"left\", (event.pageX - 3) + \"px\")\n .style(\"top\", (event.pageY - 28) + \"px\");\n }\n }\n updateTooltipDiv(activationId, div) {\n var data = this.activationStorage[activationId];\n var title = data.id + \" - \" + data.name;\n if (data.hash != \"\") {\n title = '' + title + \"\";\n }\n var result = [\n ' ' + title + '',\n ' Line: ' + data.line + \"\",\n ' Start: ' + data.start + \"\",\n ' Finish: ' + data.finish + \"\",\n ' Duration: ' + data.duration + \"ns\",\n ' Return: ' + data.return_value + \"\",\n ];\n // ToDo: parameters and globals\n div.outerHTML = result.join(\"
          \") + \"

          \";\n }\n createMarker(name, cls, fill) {\n this.svg.append(\"svg:defs\").selectAll(\"marker\")\n .data([name])\n .enter().append(\"svg:marker\")\n .attr(\"id\", this.graphId + \"-\" + name)\n .attr(\"viewBox\", \"0 -5 10 10\")\n .attr(\"refX\", 10)\n .attr(\"refY\", 0)\n .attr(\"markerWidth\", 6)\n .attr(\"markerHeight\", 6)\n .attr(\"orient\", \"auto\")\n .append(\"svg:path\")\n .classed(cls, true)\n .attr(\"fill\", fill)\n .attr(\"d\", \"M0,-5L10,0L0,5\");\n }\n defaultNodeStroke(d) {\n let color = this.colors[d.data.trial_ids[0]];\n if (d.data.trial_ids.length > 1 || color == 0) {\n return \"#000\";\n }\n if (color == 1) {\n return \"red\";\n }\n return \"green\";\n }\n nodeClick(d) {\n if (d.children) {\n d._children = d.children;\n delete d.children;\n }\n else {\n d.children = d._children;\n delete d._children;\n }\n this.update(d);\n }\n updateNodes(source, node) {\n let self = this;\n var nodeEnter = node.enter().append('g')\n .attr(\"id\", (d) => {\n return \"node-\" + this.graphId + \"-\" + d.data.index;\n })\n .attr('class', 'node')\n .attr(\"cursor\", \"pointer\")\n .attr('transform', (d) => {\n return \"translate(\" + source.x + \",\" + source.y + \")\";\n })\n .on('click', (event, d) => {\n let activations = d.data.activations;\n if (event.ctrlKey && Object.keys(activations).length > 1) {\n self.getFunctionDiff(activations, d.data.trial_ids);\n }\n else {\n this.nodeClick(d);\n }\n })\n .on('mouseover', function (event, d) {\n if (self.config.useTooltip) {\n self.closeTooltip();\n if ((0, d3_selection_1.pointers)(event)[0][0] < 10) {\n self.showTooltip(event, d.data, self.t1);\n }\n else {\n self.showTooltip(event, d.data, self.t2);\n }\n }\n self.config.customMouseOver(self, d);\n return false;\n }).on('mouseout', function (event, d) {\n self.config.customMouseOut(self, d);\n });\n /* nodeEnter.attr(\"activations_ids\", (d:VisibleTrialNode)=>{\n let activations = d.data.activations;\n let attrValue = \"\";\n for(let trial in activations){\n if(attrValue.length > 0) attrValue+= \"/\";\n attrValue += trial + \"/\";\n attrValue += activations[trial];\n }\n return attrValue;\n }); */\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr('class', 'node')\n .attr('rx', 1e-6)\n .attr('ry', 1e-6)\n .attr('width', 1e-6)\n .attr('height', 1e-6)\n .attr(\"stroke\", (d) => this.defaultNodeStroke(d))\n .attr(\"stroke-width\", \"3px\")\n .attr(\"fill\", (d) => {\n if (d.data.trial_ids.length == 1) {\n return this.calculateColor(d.data, this.t1);\n }\n var grad = this.svg.append(\"svg:defs\")\n .append(\"linearGradient\")\n .attr(\"id\", \"grad-\" + this.graphId + \"-\" + d.data.index)\n .attr(\"x1\", \"100%\")\n .attr(\"x2\", \"0%\")\n .attr(\"y1\", \"0%\")\n .attr(\"y2\", \"0%\");\n grad.append(\"stop\")\n .attr(\"offset\", \"50%\")\n .attr(\"stop-color\", this.calculateColor(d.data, this.t2));\n grad.append(\"stop\")\n .attr(\"offset\", \"50%\")\n .attr(\"stop-color\", this.calculateColor(d.data, this.t1));\n return \"url(#grad-\" + this.graphId + \"-\" + d.data.index + \")\";\n });\n // Text for new nodes\n nodeEnter.append('text')\n .attr(\"dy\", \".35em\")\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"font-size\", this.config.fontSize + \"px\")\n .attr(\"pointer-events\", \"none\")\n .attr(\"fill\", \"#000\")\n .attr(\"y\", 24)\n .attr(\"x\", 10)\n .attr(\"text-anchor\", \"middle\")\n .each(function (d) {\n const textLabel = (0, d3_selection_1.select)(this);\n const name = d.data.name.split('
          ');\n if (name.length > 1) {\n textLabel.append(\"tspan\")\n .attr(\"x\", \"10\")\n .attr(\"dy\", \".35em\")\n .attr(\"font-weight\", \"bold\")\n .text(name[0]);\n textLabel.append(\"tspan\")\n .attr(\"x\", \"10\")\n .attr(\"dy\", \"1em\")\n .text(name[1]);\n textLabel.attr(\"class\", \"nowrap\");\n }\n else {\n return textLabel.text(d.data.name);\n }\n });\n nodeEnter.append(\"path\")\n .attr(\"stroke\", \"#000\")\n .attr(\"d\", function (d) {\n if (d.data.trial_ids.length > 1) {\n return \"M10,\" + 0 +\n \"L10,\" + 20;\n }\n return \"M0,0L0,0\";\n });\n // Update\n var nodeUpdate = nodeEnter.merge(node);\n // Transition to proper position\n nodeUpdate.transition()\n .duration(this.config.duration)\n .attr(\"transform\", (d) => {\n let color = this.colors[d.data.trial_ids[0]];\n d.dy = 0;\n if (color == 1) {\n d.dy = -40;\n }\n else if (color == 2) {\n d.dy = 40;\n }\n return \"translate(\" + (d.x - 10) + \",\" + (d.y + d.dy - 10) + \")\";\n });\n // Update the node attributes and style\n nodeUpdate.select('rect.node')\n .attr('width', 20)\n .attr('height', 20)\n .attr('rx', 20)\n .attr('ry', 20)\n .attr(\"rx\", (d) => {\n return d._children ? 0 : 20;\n })\n .attr(\"ry\", (d) => {\n return d._children ? 0 : 20;\n })\n .attr('cursor', 'pointer');\n // Remove exiting nodes\n var nodeExit = node.exit().transition()\n .duration(this.config.duration)\n .attr(\"transform\", function (d) {\n return \"translate(\" + source.x + \",\" + source.y + \")\";\n })\n .remove();\n // Reduce node rects size to 0 on exit\n nodeExit.select('rect')\n .attr('rx', 1e-6)\n .attr('ry', 1e-6)\n .attr('width', 1e-6)\n .attr('height', 1e-6);\n // Reduce opacity of labels on exit\n nodeExit.select('text')\n .style('fill-opacity', 1e-6);\n }\n updateLinks(source, edges) {\n var link = this.g.selectAll('path.link')\n .data(edges, (d) => d.id);\n // Enter any new links at the parent's previous position.\n var linkEnter = link.enter().insert('path', \"g\")\n .attr(\"class\", \"link\")\n .attr(\"id\", (d, i) => {\n return \"pathId-\" + this.graphId + \"-\" + d.id;\n })\n .attr(\"fill\", \"none\")\n .attr(\"stroke-width\", \"1.5px\")\n .attr('d', (d) => {\n var o = { y: source.y0, x: source.x0 };\n if (d.source.dy == undefined) {\n d.source.dy = 0;\n }\n if (d.target.dy == undefined) {\n d.target.dy = 0;\n }\n let ox = source.x0 || 0, oy = source.y0 || 0, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1;\n if (d.type === 'initial' || d.type === 'call' || d.type == 'return') {\n // Initial\n return (0, utils_1.diagonal)(o, o);\n }\n else if (dx === 0 && dy === 0) {\n // Loop\n return `M ${ox}, ${oy}\n A 15,20\n -45,1,1\n ${ox + 5},${oy + 8}`;\n }\n //return diagonal(d.source, d.target);\n return (0, utils_1.diagonal)(o, o);\n })\n .attr(\"marker-end\", (d) => {\n let count = 0;\n for (let trial_id in d.count) {\n if (trial_id == this.t1.toString()) {\n count += 1;\n }\n if (trial_id == this.t2.toString()) {\n count += 2;\n }\n }\n if (count == 0 || count == 3) { // Single trial or diff\n return \"url(#\" + this.graphId + \"-end)\";\n }\n if (count == 1) { // First trial\n return \"url(#\" + this.graphId + \"-endbefore)\";\n }\n if (count == 2) { // Second trial\n return \"url(#\" + this.graphId + \"-endafter)\";\n }\n return \"\";\n })\n .attr('stroke', (d) => {\n if (d.type === 'sequence') {\n return '#07F';\n }\n return '#666';\n })\n .attr('stroke-dasharray', (d) => {\n if (d.type === 'return') {\n return '10,2';\n }\n return 'none';\n });\n // UPDATE\n var linkUpdate = linkEnter.merge(link);\n // Transition back to the parent element position\n linkUpdate.transition()\n .duration(this.config.duration)\n .attr('d', (d) => {\n if (d.source.dy == undefined) {\n d.source.dy = 0;\n }\n if (d.target.dy == undefined) {\n d.target.dy = 0;\n }\n let sd = d.source.data, td = d.target.data, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1, theta = Math.atan(dx / dy), phi = Math.atan(dy / dx), r = 10 + 2, sin_theta = r * Math.sin(theta), cos_theta = r * Math.cos(theta), sin_phi = r * Math.sin(phi), cos_phi = r * Math.cos(phi), m1 = (y2 > y1) ? 1 : -1, m2 = (x2 > x1) ? -1 : 1;\n if (d.type === 'initial') {\n // Initial\n return `M ${(x2 - 20)},${(y2 - 20)}\n L ${(x2 - r / 2.0)},${(y2 - r / 2.0)}`;\n }\n else if (d.type === 'call' || d.type == 'return') {\n // Call/Return\n x1 += m1 * sin_theta;\n x2 += m2 * cos_phi;\n y1 += m1 * cos_theta;\n y2 += m2 * sin_phi;\n if (dx === 0) {\n if (y1 > y2) {\n //y1 -= 10\n y2 += 20;\n }\n else {\n //y1 += 10\n y2 -= 20;\n }\n }\n return `M ${x1}, ${y1}\n L ${x2}, ${y2}`;\n }\n else if (dx === 0 && dy === 0) {\n // Loop\n return `M ${x1}, ${y1}\n A 15,20\n -45,1,1\n ${x2 + 5},${y2 + 8}`;\n }\n else if (sd.parent_index == td.parent_index) {\n // Same caller\n if (dy === 0 && sd.children_index == td.children_index - 1) {\n // Immediate sequence\n return `M ${x1}, ${y1}\n L ${(x2 + m2 * cos_phi)}, ${y2}`;\n }\n else {\n let sign = -1;\n if (y1 < y2) {\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n y2 -= r;\n sign = -1;\n }\n else if (y2 < y1) {\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n y2 += r;\n sign = 1;\n }\n else if (x1 >= x2) {\n y1 += r;\n y2 += r;\n sign = 2;\n }\n else {\n y1 -= r;\n y2 -= r;\n sign = -1;\n }\n return `M ${x1}, ${y1}\n C ${(x1 + x2) / 2} ${y1 + r * sign},\n ${(x1 + x2) / 2} ${y2 + r * sign},\n ${x2} ${y2}`;\n }\n }\n // Other caller\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n x2 += m2 * cos_phi;\n y2 += m2 * sin_phi;\n return `M ${x1} ${y1}\n C ${(x1 + x2) / 2} ${y1},\n ${(x1 + x2) / 2} ${y2},\n ${x2} ${y2}`;\n });\n // Remove any exiting links\n link.exit() //.transition()\n .attr('d', function (d) {\n return (0, utils_1.diagonal)(d.source, d.target);\n })\n .remove(); // linkExit\n }\n updateLinkLabels(edges) {\n var labelPath = this.g.selectAll(\".label_text\")\n .data(edges, (d) => d.id);\n var labelEnter = labelPath.enter().append(\"text\")\n .attr(\"class\", \"label_text\")\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"font-size\", this.config.labelFontSize + \"px\")\n .attr(\"pointer-events\", \"none\")\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"dx\", (d) => {\n if (d.source.x == d.target.x) {\n return 29;\n }\n return (Math.abs(d.source.x - d.target.x) - 10) / 2;\n })\n .attr(\"dy\", -3)\n .attr(\"id\", (d, i) => {\n return \"pathlabel-\" + this.graphId + \"-\" + d.id;\n })\n .append(\"textPath\")\n .attr(\"xlink:href\", (d, i) => {\n return \"#pathId-\" + this.graphId + \"-\" + d.id;\n })\n .text((d) => {\n if (d.type === 'initial') {\n return '';\n }\n if (this.t1 == this.t2 || !d.count[this.t2]) {\n return d.count[this.t1].toString();\n }\n else if (!d.count[this.t1]) {\n return d.count[this.t2].toString();\n }\n return d.count[this.t1] + ', ' + d.count[this.t2];\n });\n labelEnter.merge(labelPath);\n labelPath.exit().remove();\n }\n zoomFunction(event) {\n this.closeTooltip();\n this.transform = event.transform;\n this.g.attr(\"transform\", event.transform);\n }\n _graphId() {\n return \"trial-graph-\" + this.graphId;\n }\n}\nexports.TrialGraph = TrialGraph;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./structures\"), exports);\n__exportStar(require(\"./graph\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diagonal = diagonal;\n/**\n * Create diagonal line between two nodes\n */\nfunction diagonal(s, d) {\n if (s.dy == undefined) {\n s.dy = 0;\n }\n if (d.dy == undefined) {\n d.dy = 0;\n }\n let path = `M ${s.x} ${(s.y + s.dy)}\n C ${(s.x + d.x) / 2} ${(s.y + s.dy)},\n ${(s.x + d.x) / 2} ${(d.y + d.dy)},\n ${d.x} ${(d.y + d.dy)}`;\n return path;\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./d3svg\"), exports);\n__exportStar(require(\"./random\"), exports);\n__exportStar(require(\"./text\"), exports);\n__exportStar(require(\"./web\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.makeid = makeid;\nfunction makeid() {\n var text = \"\";\n var possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n for (var i = 0; i < 5; i++)\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n return text;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrap = wrap;\nconst d3_selection_1 = require(\"d3-selection\");\nfunction wrap(text, width) {\n text.each(function () {\n var text = (0, d3_selection_1.select)(this), words = text.text().split(/(?=_)/).reverse(), word, line = [], lineNumber = 0, lineHeight = 1.1, // ems\n y = text.attr(\"y\"), dy = parseFloat(text.attr(\"dy\")), tspan = text.text(null).append(\"tspan\").attr(\"x\", 10).attr(\"y\", y).attr(\"dy\", dy + \"em\");\n while (word = words.pop()) {\n line.push(word);\n tspan.text(line.join(\"\"));\n if (tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\"\"));\n line = [word];\n tspan = text.append(\"tspan\").attr(\"x\", 10).attr(\"y\", y).attr(\"dy\", ++lineNumber * lineHeight + dy + \"em\").text(word);\n }\n }\n });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.json = json;\nconst d3_fetch_1 = require(\"d3-fetch\");\nfunction json(innertext, sub, url, fn) {\n let i = document.createElement('i');\n i.classList.add(\"loading\");\n i.classList.add(\"fa\");\n i.classList.add(\"fa-spinner\");\n i.classList.add(\"fa-pulse\");\n sub.innerHTML = \"\";\n sub.appendChild(i);\n sub.onclick = function () {\n json(innertext, sub, url, fn);\n };\n (0, d3_fetch_1.json)(url).then(function (data) {\n sub.onclick = function () {\n };\n fn(data);\n }).catch(function (error) {\n i.classList.remove(\"fa-spinner\");\n i.classList.remove(\"fa-pulse\");\n i.classList.add(\"fa-refresh\");\n i.classList.add(\"connection-error\");\n let text = document.createElement('span');\n text.classList.add(\"error-text\");\n text.innerHTML = innertext;\n i.appendChild(text);\n });\n}\n","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/*!\nViz.js 3.8.0\nCopyright (c) 2023 Michael Daines\n\nThis distribution contains other software in object code form:\nGraphviz https://www.graphviz.org\nExpat https://libexpat.github.io\n*/var A=function(){var A,I,g,Q,B,C,E,D,w,i,o,G=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},M=new Promise(((I,g)=>{A=I})),R=A=>console.log(A);function F(A){throw A}function y(){var A=o.buffer;g=new Int8Array(A),Q=new Int16Array(A),C=new Uint8Array(A),B=new Int32Array(A),E=new Uint32Array(A),D=new Float32Array(A),w=new Float64Array(A),i=new BigInt64Array(A),new BigUint64Array(A)}G.agerrMessages=[],G.stderrMessages=[],I=A=>G.stderrMessages.push(A);var s=\"undefined\"!=typeof TextDecoder?new TextDecoder:void 0,h=(A,I,g)=>{for(var Q=I+g,B=I;A[B]&&!(B>=Q);)++B;if(B-I>16&&A.buffer&&s)return s.decode(A.subarray(I,B));for(var C=\"\";I>10,56320|1023&i)}}else C+=String.fromCharCode((31&E)<<6|D)}else C+=String.fromCharCode(E)}return C},K=(A,I)=>A?h(C,A,I):\"\";class N{constructor(A){this.excPtr=A,this.ptr=A-24}set_type(A){E[this.ptr+4>>2]=A}get_type(){return E[this.ptr+4>>2]}set_destructor(A){E[this.ptr+8>>2]=A}get_destructor(){return E[this.ptr+8>>2]}set_caught(A){A=A?1:0,g[this.ptr+12]=A}get_caught(){return 0!=g[this.ptr+12]}set_rethrown(A){A=A?1:0,g[this.ptr+13]=A}get_rethrown(){return 0!=g[this.ptr+13]}init(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I)}set_adjusted_ptr(A){E[this.ptr+16>>2]=A}get_adjusted_ptr(){return E[this.ptr+16>>2]}get_exception_ptr(){if(T(this.get_type()))return E[this.excPtr>>2];var A=this.get_adjusted_ptr();return 0!==A?A:this.excPtr}}var k={isAbs:A=>\"/\"===A.charAt(0),splitPath:A=>/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(A).slice(1),normalizeArray:(A,I)=>{for(var g=0,Q=A.length-1;Q>=0;Q--){var B=A[Q];\".\"===B?A.splice(Q,1):\"..\"===B?(A.splice(Q,1),g++):g&&(A.splice(Q,1),g--)}if(I)for(;g;g--)A.unshift(\"..\");return A},normalize:A=>{var I=k.isAbs(A),g=\"/\"===A.substr(-1);return(A=k.normalizeArray(A.split(\"/\").filter((A=>!!A)),!I).join(\"/\"))||I||(A=\".\"),A&&g&&(A+=\"/\"),(I?\"/\":\"\")+A},dirname:A=>{var I=k.splitPath(A),g=I[0],Q=I[1];return g||Q?(Q&&(Q=Q.substr(0,Q.length-1)),g+Q):\".\"},basename:A=>{if(\"/\"===A)return\"/\";var I=(A=(A=k.normalize(A)).replace(/\\/$/,\"\")).lastIndexOf(\"/\");return-1===I?A:A.substr(I+1)},join:function(){for(var A=arguments.length,I=new Array(A),g=0;gk.normalize(A+\"/\"+I)},L=A=>(L=(()=>{if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues)return A=>crypto.getRandomValues(A);F(\"initRandomDevice\")})())(A),U={resolve:function(){for(var A=\"\",I=!1,g=arguments.length-1;g>=-1&&!I;g--){var Q=g>=0?g<0||arguments.length<=g?void 0:arguments[g]:r.cwd();if(\"string\"!=typeof Q)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!Q)return\"\";A=Q+\"/\"+A,I=k.isAbs(Q)}return(I?\"/\":\"\")+(A=k.normalizeArray(A.split(\"/\").filter((A=>!!A)),!I).join(\"/\"))||\".\"},relative:(A,I)=>{function g(A){for(var I=0;I=0&&\"\"===A[g];g--);return I>g?[]:A.slice(I,g-I+1)}A=U.resolve(A).substr(1),I=U.resolve(I).substr(1);for(var Q=g(A.split(\"/\")),B=g(I.split(\"/\")),C=Math.min(Q.length,B.length),E=C,D=0;D{for(var I=0,g=0;g=55296&&Q<=57343?(I+=4,++g):I+=3}return I},J=(A,I,g,Q)=>{if(!(Q>0))return 0;for(var B=g,C=g+Q-1,E=0;E=55296&&D<=57343)D=65536+((1023&D)<<10)|1023&A.charCodeAt(++E);if(D<=127){if(g>=C)break;I[g++]=D}else if(D<=2047){if(g+1>=C)break;I[g++]=192|D>>6,I[g++]=128|63&D}else if(D<=65535){if(g+2>=C)break;I[g++]=224|D>>12,I[g++]=128|D>>6&63,I[g++]=128|63&D}else{if(g+3>=C)break;I[g++]=240|D>>18,I[g++]=128|D>>12&63,I[g++]=128|D>>6&63,I[g++]=128|63&D}}return I[g]=0,g-B};function c(A,I,g){var Q=g>0?g:Y(A)+1,B=new Array(Q),C=J(A,B,0,B.length);return I&&(B.length=C),B}var a={ttys:[],init(){},shutdown(){},register(A,I){a.ttys[A]={input:[],output:[],ops:I},r.registerDevice(A,a.stream_ops)},stream_ops:{open(A){var I=a.ttys[A.node.rdev];if(!I)throw new r.ErrnoError(43);A.tty=I,A.seekable=!1},close(A){A.tty.ops.fsync(A.tty)},fsync(A){A.tty.ops.fsync(A.tty)},read(A,I,g,Q,B){if(!A.tty||!A.tty.ops.get_char)throw new r.ErrnoError(60);for(var C=0,E=0;E(()=>{if(!S.length){var A=null;if(\"undefined\"!=typeof window&&\"function\"==typeof window.prompt&&null!==(A=window.prompt(\"Input: \"))&&(A+=\"\\n\"),!A)return null;S=c(A,!0)}return S.shift()})(),put_char(A,I){null===I||10===I?(R(h(A.output,0)),A.output=[]):0!=I&&A.output.push(I)},fsync(A){A.output&&A.output.length>0&&(R(h(A.output,0)),A.output=[])},ioctl_tcgets:A=>({c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ioctl_tcsets:(A,I,g)=>0,ioctl_tiocgwinsz:A=>[24,80]},default_tty1_ops:{put_char(A,g){null===g||10===g?(I(h(A.output,0)),A.output=[]):0!=g&&A.output.push(g)},fsync(A){A.output&&A.output.length>0&&(I(h(A.output,0)),A.output=[])}}},H=A=>{A=((A,I)=>Math.ceil(A/I)*I)(A,65536);var I=z(65536,A);return I?((A,I)=>(C.fill(0,A,A+I),A))(I,A):0},Z={ops_table:null,mount:A=>Z.createNode(null,\"/\",16895,0),createNode(A,I,g,Q){if(r.isBlkdev(g)||r.isFIFO(g))throw new r.ErrnoError(63);Z.ops_table||={dir:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr,lookup:Z.node_ops.lookup,mknod:Z.node_ops.mknod,rename:Z.node_ops.rename,unlink:Z.node_ops.unlink,rmdir:Z.node_ops.rmdir,readdir:Z.node_ops.readdir,symlink:Z.node_ops.symlink},stream:{llseek:Z.stream_ops.llseek}},file:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr},stream:{llseek:Z.stream_ops.llseek,read:Z.stream_ops.read,write:Z.stream_ops.write,allocate:Z.stream_ops.allocate,mmap:Z.stream_ops.mmap,msync:Z.stream_ops.msync}},link:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr,readlink:Z.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr},stream:r.chrdev_stream_ops}};var B=r.createNode(A,I,g,Q);return r.isDir(B.mode)?(B.node_ops=Z.ops_table.dir.node,B.stream_ops=Z.ops_table.dir.stream,B.contents={}):r.isFile(B.mode)?(B.node_ops=Z.ops_table.file.node,B.stream_ops=Z.ops_table.file.stream,B.usedBytes=0,B.contents=null):r.isLink(B.mode)?(B.node_ops=Z.ops_table.link.node,B.stream_ops=Z.ops_table.link.stream):r.isChrdev(B.mode)&&(B.node_ops=Z.ops_table.chrdev.node,B.stream_ops=Z.ops_table.chrdev.stream),B.timestamp=Date.now(),A&&(A.contents[I]=B,A.timestamp=B.timestamp),B},getFileDataAsTypedArray:A=>A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array(0),expandFileStorage(A,I){var g=A.contents?A.contents.length:0;if(!(g>=I)){I=Math.max(I,g*(g<1048576?2:1.125)>>>0),0!=g&&(I=Math.max(I,256));var Q=A.contents;A.contents=new Uint8Array(I),A.usedBytes>0&&A.contents.set(Q.subarray(0,A.usedBytes),0)}},resizeFileStorage(A,I){if(A.usedBytes!=I)if(0==I)A.contents=null,A.usedBytes=0;else{var g=A.contents;A.contents=new Uint8Array(I),g&&A.contents.set(g.subarray(0,Math.min(I,A.usedBytes))),A.usedBytes=I}},node_ops:{getattr(A){var I={};return I.dev=r.isChrdev(A.mode)?A.id:1,I.ino=A.id,I.mode=A.mode,I.nlink=1,I.uid=0,I.gid=0,I.rdev=A.rdev,r.isDir(A.mode)?I.size=4096:r.isFile(A.mode)?I.size=A.usedBytes:r.isLink(A.mode)?I.size=A.link.length:I.size=0,I.atime=new Date(A.timestamp),I.mtime=new Date(A.timestamp),I.ctime=new Date(A.timestamp),I.blksize=4096,I.blocks=Math.ceil(I.size/I.blksize),I},setattr(A,I){void 0!==I.mode&&(A.mode=I.mode),void 0!==I.timestamp&&(A.timestamp=I.timestamp),void 0!==I.size&&Z.resizeFileStorage(A,I.size)},lookup(A,I){throw r.genericErrors[44]},mknod:(A,I,g,Q)=>Z.createNode(A,I,g,Q),rename(A,I,g){if(r.isDir(A.mode)){var Q;try{Q=r.lookupNode(I,g)}catch(A){}if(Q)for(var B in Q.contents)throw new r.ErrnoError(55)}delete A.parent.contents[A.name],A.parent.timestamp=Date.now(),A.name=g,I.contents[g]=A,I.timestamp=A.parent.timestamp},unlink(A,I){delete A.contents[I],A.timestamp=Date.now()},rmdir(A,I){var g=r.lookupNode(A,I);for(var Q in g.contents)throw new r.ErrnoError(55);delete A.contents[I],A.timestamp=Date.now()},readdir(A){var I=[\".\",\"..\"];for(var g of Object.keys(A.contents))I.push(g);return I},symlink(A,I,g){var Q=Z.createNode(A,I,41471,0);return Q.link=g,Q},readlink(A){if(!r.isLink(A.mode))throw new r.ErrnoError(28);return A.link}},stream_ops:{read(A,I,g,Q,B){var C=A.node.contents;if(B>=A.node.usedBytes)return 0;var E=Math.min(A.node.usedBytes-B,Q);if(E>8&&C.subarray)I.set(C.subarray(B,B+E),g);else for(var D=0;D0||Q+I(Z.stream_ops.write(A,I,0,Q,g,!1),0)}},d=(A,I)=>{var g=0;return A&&(g|=365),I&&(g|=146),g},r={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(A){this.name=\"ErrnoError\",this.errno=A}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(A){this.node=A}get isRead(){return 1!=(2097155&this.flags)}get isWrite(){return 0!=(2097155&this.flags)}get isAppend(){return 1024&this.flags}get flags(){return this.shared.flags}set flags(A){this.shared.flags=A}get position(){return this.shared.position}set position(A){this.shared.position=A}},FSNode:class{constructor(A,I,g,Q){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=r.nextInode++,this.name=I,this.mode=g,this.node_ops={},this.stream_ops={},this.rdev=Q,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(A){A?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(A){A?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return r.isDir(this.mode)}get isDevice(){return r.isChrdev(this.mode)}},lookupPath(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(A=U.resolve(A)))return{path:\"\",node:null};if(I=Object.assign({follow_mount:!0,recurse_count:0},I),I.recurse_count>8)throw new r.ErrnoError(32);for(var g=A.split(\"/\").filter((A=>!!A)),Q=r.root,B=\"/\",C=0;C40)throw new r.ErrnoError(32)}}return{path:B,node:Q}},getPath(A){for(var I;;){if(r.isRoot(A)){var g=A.mount.mountpoint;return I?\"/\"!==g[g.length-1]?`${g}/${I}`:g+I:g}I=I?`${A.name}/${I}`:A.name,A=A.parent}},hashName(A,I){for(var g=0,Q=0;Q>>0)%r.nameTable.length},hashAddNode(A){var I=r.hashName(A.parent.id,A.name);A.name_next=r.nameTable[I],r.nameTable[I]=A},hashRemoveNode(A){var I=r.hashName(A.parent.id,A.name);if(r.nameTable[I]===A)r.nameTable[I]=A.name_next;else for(var g=r.nameTable[I];g;){if(g.name_next===A){g.name_next=A.name_next;break}g=g.name_next}},lookupNode(A,I){var g=r.mayLookup(A);if(g)throw new r.ErrnoError(g);for(var Q=r.hashName(A.id,I),B=r.nameTable[Q];B;B=B.name_next){var C=B.name;if(B.parent.id===A.id&&C===I)return B}return r.lookup(A,I)},createNode(A,I,g,Q){var B=new r.FSNode(A,I,g,Q);return r.hashAddNode(B),B},destroyNode(A){r.hashRemoveNode(A)},isRoot:A=>A===A.parent,isMountpoint:A=>!!A.mounted,isFile:A=>32768==(61440&A),isDir:A=>16384==(61440&A),isLink:A=>40960==(61440&A),isChrdev:A=>8192==(61440&A),isBlkdev:A=>24576==(61440&A),isFIFO:A=>4096==(61440&A),isSocket:A=>49152==(49152&A),flagsToPermissionString(A){var I=[\"r\",\"w\",\"rw\"][3&A];return 512&A&&(I+=\"w\"),I},nodePermissions:(A,I)=>r.ignorePermissions||(!I.includes(\"r\")||292&A.mode)&&(!I.includes(\"w\")||146&A.mode)&&(!I.includes(\"x\")||73&A.mode)?0:2,mayLookup(A){if(!r.isDir(A.mode))return 54;var I=r.nodePermissions(A,\"x\");return I||(A.node_ops.lookup?0:2)},mayCreate(A,I){try{r.lookupNode(A,I);return 20}catch(A){}return r.nodePermissions(A,\"wx\")},mayDelete(A,I,g){var Q;try{Q=r.lookupNode(A,I)}catch(A){return A.errno}var B=r.nodePermissions(A,\"wx\");if(B)return B;if(g){if(!r.isDir(Q.mode))return 54;if(r.isRoot(Q)||r.getPath(Q)===r.cwd())return 10}else if(r.isDir(Q.mode))return 31;return 0},mayOpen:(A,I)=>A?r.isLink(A.mode)?32:r.isDir(A.mode)&&(\"r\"!==r.flagsToPermissionString(I)||512&I)?31:r.nodePermissions(A,r.flagsToPermissionString(I)):44,MAX_OPEN_FDS:4096,nextfd(){for(var A=0;A<=r.MAX_OPEN_FDS;A++)if(!r.streams[A])return A;throw new r.ErrnoError(33)},getStreamChecked(A){var I=r.getStream(A);if(!I)throw new r.ErrnoError(8);return I},getStream:A=>r.streams[A],createStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return A=Object.assign(new r.FSStream,A),-1==I&&(I=r.nextfd()),A.fd=I,r.streams[I]=A,A},closeStream(A){r.streams[A]=null},dupStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;var g=r.createStream(A,I);return g.stream_ops?.dup?.(g),g},chrdev_stream_ops:{open(A){var I=r.getDevice(A.node.rdev);A.stream_ops=I.stream_ops,A.stream_ops.open?.(A)},llseek(){throw new r.ErrnoError(70)}},major:A=>A>>8,minor:A=>255&A,makedev:(A,I)=>A<<8|I,registerDevice(A,I){r.devices[A]={stream_ops:I}},getDevice:A=>r.devices[A],getMounts(A){for(var I=[],g=[A];g.length;){var Q=g.pop();I.push(Q),g.push(...Q.mounts)}return I},syncfs(A,g){\"function\"==typeof A&&(g=A,A=!1),r.syncFSRequests++,r.syncFSRequests>1&&I(`warning: ${r.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var Q=r.getMounts(r.root.mount),B=0;function C(A){return r.syncFSRequests--,g(A)}function E(A){if(A)return E.errored?void 0:(E.errored=!0,C(A));++B>=Q.length&&C(null)}Q.forEach((I=>{if(!I.type.syncfs)return E(null);I.type.syncfs(I,A,E)}))},mount(A,I,g){var Q,B=\"/\"===g,C=!g;if(B&&r.root)throw new r.ErrnoError(10);if(!B&&!C){var E=r.lookupPath(g,{follow_mount:!1});if(g=E.path,Q=E.node,r.isMountpoint(Q))throw new r.ErrnoError(10);if(!r.isDir(Q.mode))throw new r.ErrnoError(54)}var D={type:A,opts:I,mountpoint:g,mounts:[]},w=A.mount(D);return w.mount=D,D.root=w,B?r.root=w:Q&&(Q.mounted=D,Q.mount&&Q.mount.mounts.push(D)),w},unmount(A){var I=r.lookupPath(A,{follow_mount:!1});if(!r.isMountpoint(I.node))throw new r.ErrnoError(28);var g=I.node,Q=g.mounted,B=r.getMounts(Q);Object.keys(r.nameTable).forEach((A=>{for(var I=r.nameTable[A];I;){var g=I.name_next;B.includes(I.mount)&&r.destroyNode(I),I=g}})),g.mounted=null;var C=g.mount.mounts.indexOf(Q);g.mount.mounts.splice(C,1)},lookup:(A,I)=>A.node_ops.lookup(A,I),mknod(A,I,g){var Q=r.lookupPath(A,{parent:!0}).node,B=k.basename(A);if(!B||\".\"===B||\"..\"===B)throw new r.ErrnoError(28);var C=r.mayCreate(Q,B);if(C)throw new r.ErrnoError(C);if(!Q.node_ops.mknod)throw new r.ErrnoError(63);return Q.node_ops.mknod(Q,B,I,g)},create:(A,I)=>(I=void 0!==I?I:438,I&=4095,I|=32768,r.mknod(A,I,0)),mkdir:(A,I)=>(I=void 0!==I?I:511,I&=1023,I|=16384,r.mknod(A,I,0)),mkdirTree(A,I){for(var g=A.split(\"/\"),Q=\"\",B=0;B(void 0===g&&(g=I,I=438),I|=8192,r.mknod(A,I,g)),symlink(A,I){if(!U.resolve(A))throw new r.ErrnoError(44);var g=r.lookupPath(I,{parent:!0}).node;if(!g)throw new r.ErrnoError(44);var Q=k.basename(I),B=r.mayCreate(g,Q);if(B)throw new r.ErrnoError(B);if(!g.node_ops.symlink)throw new r.ErrnoError(63);return g.node_ops.symlink(g,Q,A)},rename(A,I){var g,Q,B=k.dirname(A),C=k.dirname(I),E=k.basename(A),D=k.basename(I);if(g=r.lookupPath(A,{parent:!0}).node,Q=r.lookupPath(I,{parent:!0}).node,!g||!Q)throw new r.ErrnoError(44);if(g.mount!==Q.mount)throw new r.ErrnoError(75);var w,i=r.lookupNode(g,E),o=U.relative(A,C);if(\".\"!==o.charAt(0))throw new r.ErrnoError(28);if(\".\"!==(o=U.relative(I,B)).charAt(0))throw new r.ErrnoError(55);try{w=r.lookupNode(Q,D)}catch(A){}if(i!==w){var G=r.isDir(i.mode),M=r.mayDelete(g,E,G);if(M)throw new r.ErrnoError(M);if(M=w?r.mayDelete(Q,D,G):r.mayCreate(Q,D))throw new r.ErrnoError(M);if(!g.node_ops.rename)throw new r.ErrnoError(63);if(r.isMountpoint(i)||w&&r.isMountpoint(w))throw new r.ErrnoError(10);if(Q!==g&&(M=r.nodePermissions(g,\"w\")))throw new r.ErrnoError(M);r.hashRemoveNode(i);try{g.node_ops.rename(i,Q,D),i.parent=Q}catch(A){throw A}finally{r.hashAddNode(i)}}},rmdir(A){var I=r.lookupPath(A,{parent:!0}).node,g=k.basename(A),Q=r.lookupNode(I,g),B=r.mayDelete(I,g,!0);if(B)throw new r.ErrnoError(B);if(!I.node_ops.rmdir)throw new r.ErrnoError(63);if(r.isMountpoint(Q))throw new r.ErrnoError(10);I.node_ops.rmdir(I,g),r.destroyNode(Q)},readdir(A){var I=r.lookupPath(A,{follow:!0}).node;if(!I.node_ops.readdir)throw new r.ErrnoError(54);return I.node_ops.readdir(I)},unlink(A){var I=r.lookupPath(A,{parent:!0}).node;if(!I)throw new r.ErrnoError(44);var g=k.basename(A),Q=r.lookupNode(I,g),B=r.mayDelete(I,g,!1);if(B)throw new r.ErrnoError(B);if(!I.node_ops.unlink)throw new r.ErrnoError(63);if(r.isMountpoint(Q))throw new r.ErrnoError(10);I.node_ops.unlink(I,g),r.destroyNode(Q)},readlink(A){var I=r.lookupPath(A).node;if(!I)throw new r.ErrnoError(44);if(!I.node_ops.readlink)throw new r.ErrnoError(28);return U.resolve(r.getPath(I.parent),I.node_ops.readlink(I))},stat(A,I){var g=r.lookupPath(A,{follow:!I}).node;if(!g)throw new r.ErrnoError(44);if(!g.node_ops.getattr)throw new r.ErrnoError(63);return g.node_ops.getattr(g)},lstat:A=>r.stat(A,!0),chmod(A,I,g){var Q;\"string\"==typeof A?Q=r.lookupPath(A,{follow:!g}).node:Q=A;if(!Q.node_ops.setattr)throw new r.ErrnoError(63);Q.node_ops.setattr(Q,{mode:4095&I|-4096&Q.mode,timestamp:Date.now()})},lchmod(A,I){r.chmod(A,I,!0)},fchmod(A,I){var g=r.getStreamChecked(A);r.chmod(g.node,I)},chown(A,I,g,Q){var B;\"string\"==typeof A?B=r.lookupPath(A,{follow:!Q}).node:B=A;if(!B.node_ops.setattr)throw new r.ErrnoError(63);B.node_ops.setattr(B,{timestamp:Date.now()})},lchown(A,I,g){r.chown(A,I,g,!0)},fchown(A,I,g){var Q=r.getStreamChecked(A);r.chown(Q.node,I,g)},truncate(A,I){if(I<0)throw new r.ErrnoError(28);var g;\"string\"==typeof A?g=r.lookupPath(A,{follow:!0}).node:g=A;if(!g.node_ops.setattr)throw new r.ErrnoError(63);if(r.isDir(g.mode))throw new r.ErrnoError(31);if(!r.isFile(g.mode))throw new r.ErrnoError(28);var Q=r.nodePermissions(g,\"w\");if(Q)throw new r.ErrnoError(Q);g.node_ops.setattr(g,{size:I,timestamp:Date.now()})},ftruncate(A,I){var g=r.getStreamChecked(A);if(0==(2097155&g.flags))throw new r.ErrnoError(28);r.truncate(g.node,I)},utime(A,I,g){var Q=r.lookupPath(A,{follow:!0}).node;Q.node_ops.setattr(Q,{timestamp:Math.max(I,g)})},open(A,I,g){if(\"\"===A)throw new r.ErrnoError(44);var Q;if(g=64&(I=\"string\"==typeof I?(A=>{var I={r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090}[A];if(void 0===I)throw new Error(`Unknown file open mode: ${A}`);return I})(I):I)?4095&(g=void 0===g?438:g)|32768:0,\"object\"==typeof A)Q=A;else{A=k.normalize(A);try{Q=r.lookupPath(A,{follow:!(131072&I)}).node}catch(A){}}var B=!1;if(64&I)if(Q){if(128&I)throw new r.ErrnoError(20)}else Q=r.mknod(A,g,0),B=!0;if(!Q)throw new r.ErrnoError(44);if(r.isChrdev(Q.mode)&&(I&=-513),65536&I&&!r.isDir(Q.mode))throw new r.ErrnoError(54);if(!B){var C=r.mayOpen(Q,I);if(C)throw new r.ErrnoError(C)}512&I&&!B&&r.truncate(Q,0),I&=-131713;var E=r.createStream({node:Q,path:r.getPath(Q),flags:I,seekable:!0,position:0,stream_ops:Q.stream_ops,ungotten:[],error:!1});return E.stream_ops.open&&E.stream_ops.open(E),!G.logReadFiles||1&I||(r.readFiles||(r.readFiles={}),A in r.readFiles||(r.readFiles[A]=1)),E},close(A){if(r.isClosed(A))throw new r.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(A){throw A}finally{r.closeStream(A.fd)}A.fd=null},isClosed:A=>null===A.fd,llseek(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new r.ErrnoError(70);if(0!=g&&1!=g&&2!=g)throw new r.ErrnoError(28);return A.position=A.stream_ops.llseek(A,I,g),A.ungotten=[],A.position},read(A,I,g,Q,B){if(Q<0||B<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(1==(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.read)throw new r.ErrnoError(28);var C=void 0!==B;if(C){if(!A.seekable)throw new r.ErrnoError(70)}else B=A.position;var E=A.stream_ops.read(A,I,g,Q,B);return C||(A.position+=E),E},write(A,I,g,Q,B,C){if(Q<0||B<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(0==(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.write)throw new r.ErrnoError(28);A.seekable&&1024&A.flags&&r.llseek(A,0,2);var E=void 0!==B;if(E){if(!A.seekable)throw new r.ErrnoError(70)}else B=A.position;var D=A.stream_ops.write(A,I,g,Q,B,C);return E||(A.position+=D),D},allocate(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(I<0||g<=0)throw new r.ErrnoError(28);if(0==(2097155&A.flags))throw new r.ErrnoError(8);if(!r.isFile(A.node.mode)&&!r.isDir(A.node.mode))throw new r.ErrnoError(43);if(!A.stream_ops.allocate)throw new r.ErrnoError(138);A.stream_ops.allocate(A,I,g)},mmap(A,I,g,Q,B){if(0!=(2&Q)&&0==(2&B)&&2!=(2097155&A.flags))throw new r.ErrnoError(2);if(1==(2097155&A.flags))throw new r.ErrnoError(2);if(!A.stream_ops.mmap)throw new r.ErrnoError(43);return A.stream_ops.mmap(A,I,g,Q,B)},msync:(A,I,g,Q,B)=>A.stream_ops.msync?A.stream_ops.msync(A,I,g,Q,B):0,ioctl(A,I,g){if(!A.stream_ops.ioctl)throw new r.ErrnoError(59);return A.stream_ops.ioctl(A,I,g)},readFile(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(I.flags=I.flags||0,I.encoding=I.encoding||\"binary\",\"utf8\"!==I.encoding&&\"binary\"!==I.encoding)throw new Error(`Invalid encoding type \"${I.encoding}\"`);var g,Q=r.open(A,I.flags),B=r.stat(A).size,C=new Uint8Array(B);return r.read(Q,C,0,B,0),\"utf8\"===I.encoding?g=h(C,0):\"binary\"===I.encoding&&(g=C),r.close(Q),g},writeFile(A,I){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};g.flags=g.flags||577;var Q=r.open(A,g.flags,g.mode);if(\"string\"==typeof I){var B=new Uint8Array(Y(I)+1),C=J(I,B,0,B.length);r.write(Q,B,0,C,void 0,g.canOwn)}else{if(!ArrayBuffer.isView(I))throw new Error(\"Unsupported data type\");r.write(Q,I,0,I.byteLength,void 0,g.canOwn)}r.close(Q)},cwd:()=>r.currentPath,chdir(A){var I=r.lookupPath(A,{follow:!0});if(null===I.node)throw new r.ErrnoError(44);if(!r.isDir(I.node.mode))throw new r.ErrnoError(54);var g=r.nodePermissions(I.node,\"x\");if(g)throw new r.ErrnoError(g);r.currentPath=I.path},createDefaultDirectories(){r.mkdir(\"/tmp\"),r.mkdir(\"/home\"),r.mkdir(\"/home/web_user\")},createDefaultDevices(){r.mkdir(\"/dev\"),r.registerDevice(r.makedev(1,3),{read:()=>0,write:(A,I,g,Q,B)=>Q}),r.mkdev(\"/dev/null\",r.makedev(1,3)),a.register(r.makedev(5,0),a.default_tty_ops),a.register(r.makedev(6,0),a.default_tty1_ops),r.mkdev(\"/dev/tty\",r.makedev(5,0)),r.mkdev(\"/dev/tty1\",r.makedev(6,0));var A=new Uint8Array(1024),I=0,g=()=>(0===I&&(I=L(A).byteLength),A[--I]);r.createDevice(\"/dev\",\"random\",g),r.createDevice(\"/dev\",\"urandom\",g),r.mkdir(\"/dev/shm\"),r.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){r.mkdir(\"/proc\");var A=r.mkdir(\"/proc/self\");r.mkdir(\"/proc/self/fd\"),r.mount({mount(){var I=r.createNode(A,\"fd\",16895,73);return I.node_ops={lookup(A,I){var g=+I,Q=r.getStreamChecked(g),B={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>Q.path}};return B.parent=B,B}},I}},{},\"/proc/self/fd\")},createStandardStreams(){G.stdin?r.createDevice(\"/dev\",\"stdin\",G.stdin):r.symlink(\"/dev/tty\",\"/dev/stdin\"),G.stdout?r.createDevice(\"/dev\",\"stdout\",null,G.stdout):r.symlink(\"/dev/tty\",\"/dev/stdout\"),G.stderr?r.createDevice(\"/dev\",\"stderr\",null,G.stderr):r.symlink(\"/dev/tty1\",\"/dev/stderr\"),r.open(\"/dev/stdin\",0),r.open(\"/dev/stdout\",1),r.open(\"/dev/stderr\",1)},staticInit(){[44].forEach((A=>{r.genericErrors[A]=new r.ErrnoError(A),r.genericErrors[A].stack=\"\"})),r.nameTable=new Array(4096),r.mount(Z,{},\"/\"),r.createDefaultDirectories(),r.createDefaultDevices(),r.createSpecialDirectories(),r.filesystems={MEMFS:Z}},init(A,I,g){r.init.initialized=!0,G.stdin=A||G.stdin,G.stdout=I||G.stdout,G.stderr=g||G.stderr,r.createStandardStreams()},quit(){r.init.initialized=!1;for(var A=0;Athis.length-1||A<0)){var I=A%this.chunkSize,g=A/this.chunkSize|0;return this.getter(g)[I]}}setDataGetter(A){this.getter=A}cacheLength(){var A=new XMLHttpRequest;if(A.open(\"HEAD\",Q,!1),A.send(null),!(A.status>=200&&A.status<300||304===A.status))throw new Error(\"Couldn't load \"+Q+\". Status: \"+A.status);var I,g=Number(A.getResponseHeader(\"Content-length\")),B=(I=A.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===I,C=(I=A.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===I,E=1048576;B||(E=g);var D=this;D.setDataGetter((A=>{var I=A*E,B=(A+1)*E-1;if(B=Math.min(B,g-1),void 0===D.chunks[A]&&(D.chunks[A]=((A,I)=>{if(A>I)throw new Error(\"invalid range (\"+A+\", \"+I+\") or no bytes requested!\");if(I>g-1)throw new Error(\"only \"+g+\" bytes available! programmer error!\");var B=new XMLHttpRequest;if(B.open(\"GET\",Q,!1),g!==E&&B.setRequestHeader(\"Range\",\"bytes=\"+A+\"-\"+I),B.responseType=\"arraybuffer\",B.overrideMimeType&&B.overrideMimeType(\"text/plain; charset=x-user-defined\"),B.send(null),!(B.status>=200&&B.status<300||304===B.status))throw new Error(\"Couldn't load \"+Q+\". Status: \"+B.status);return void 0!==B.response?new Uint8Array(B.response||[]):c(B.responseText||\"\",!0)})(I,B)),void 0===D.chunks[A])throw new Error(\"doXHR failed!\");return D.chunks[A]})),!C&&g||(E=g=1,g=this.getter(0).length,E=g,R(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=g,this._chunkSize=E,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(\"undefined\"!=typeof XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var D={isDevice:!1,contents:new E}}else D={isDevice:!1,url:Q};var w=r.createFile(A,I,D,B,C);D.contents?w.contents=D.contents:D.url&&(w.contents=null,w.url=D.url),Object.defineProperties(w,{usedBytes:{get:function(){return this.contents.length}}});var i={};function o(A,I,g,Q,B){var C=A.node.contents;if(B>=C.length)return 0;var E=Math.min(C.length-B,Q);if(C.slice)for(var D=0;D{var I=w.stream_ops[A];i[A]=function(){return r.forceLoadFile(w),I(...arguments)}})),i.read=(A,I,g,Q,B)=>(r.forceLoadFile(w),o(A,I,g,Q,B)),i.mmap=(A,I,Q,B,C)=>{r.forceLoadFile(w);var E=H(I);if(!E)throw new r.ErrnoError(48);return o(A,g,E,I,Q),{ptr:E,allocated:!0}},w.stream_ops=i,w}},q={DEFAULT_POLLMASK:5,calculateAt(A,I,g){if(k.isAbs(I))return I;var Q;-100===A?Q=r.cwd():Q=q.getStreamFromFD(A).path;if(0==I.length){if(!g)throw new r.ErrnoError(44);return Q}return k.join2(Q,I)},doStat(A,I,g){var Q=A(I);B[g>>2]=Q.dev,B[g+4>>2]=Q.mode,E[g+8>>2]=Q.nlink,B[g+12>>2]=Q.uid,B[g+16>>2]=Q.gid,B[g+20>>2]=Q.rdev,i[g+24>>3]=BigInt(Q.size),B[g+32>>2]=4096,B[g+36>>2]=Q.blocks;var C=Q.atime.getTime(),D=Q.mtime.getTime(),w=Q.ctime.getTime();return i[g+40>>3]=BigInt(Math.floor(C/1e3)),E[g+48>>2]=C%1e3*1e3,i[g+56>>3]=BigInt(Math.floor(D/1e3)),E[g+64>>2]=D%1e3*1e3,i[g+72>>3]=BigInt(Math.floor(w/1e3)),E[g+80>>2]=w%1e3*1e3,i[g+88>>3]=BigInt(Q.ino),0},doMsync(A,I,g,Q,B){if(!r.isFile(I.node.mode))throw new r.ErrnoError(43);if(2&Q)return 0;var E=C.slice(A,A+g);r.msync(I,E,B,g,Q)},getStreamFromFD:A=>r.getStreamChecked(A),varargs:void 0,getStr:A=>K(A)};function t(){var A=B[+q.varargs>>2];return q.varargs+=4,A}var W=t;var l=A=>A<-9007199254740992||A>9007199254740992?NaN:Number(A);var b=(A,I,g)=>J(A,C,I,g),x=A=>{var I=(A-o.buffer.byteLength+65535)/65536;try{return o.grow(I),y(),1}catch(A){}},m={},n=()=>{if(!n.strings){var A={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:\"./this.program\"};for(var I in m)void 0===m[I]?delete A[I]:A[I]=m[I];var g=[];for(var I in A)g.push(`${I}=${A[I]}`);n.strings=g}return n.strings},O=A=>{throw`exit(${A})`};var V=A=>X(A);r.createPreloadedFile=(A,I,g,Q,B,C,E,D,w,i)=>{var o=I?U.resolve(k.join2(A,I)):A,G=getUniqueRunDependency(`cp ${o}`);function M(g){!function(g){i?.(),D||((A,I,g,Q,B,C)=>{r.createDataFile(A,I,g,Q,B,C)})(A,I,g,Q,B,w),C?.(),removeRunDependency(G)}(g)}addRunDependency(G),\"string\"==typeof g?((A,I,g,Q)=>{var B=Q?\"\":getUniqueRunDependency(`al ${A}`);readAsync(A).then((A=>{I(new Uint8Array(A)),B&&removeRunDependency(B)}),(I=>{if(!g)throw`Loading data file \"${A}\" failed.`;g()})),B&&addRunDependency(B)})(g,M,E):M(g)},r.staticInit();var z,j,X,e,T,p={a:(A,I,g,Q)=>{F(`Assertion failed: ${K(A)}, at: `+[I?K(I):\"unknown filename\",g,Q?K(Q):\"unknown function\"])},b:(A,I,g)=>{throw new N(A).init(I,g),A},v:function(A,I,g,Q){try{if(I=q.getStr(I),I=q.calculateAt(A,I),-8&g)return-28;var B=r.lookupPath(I,{follow:!0}).node;if(!B)return-44;var C=\"\";return 4&g&&(C+=\"r\"),2&g&&(C+=\"w\"),1&g&&(C+=\"x\"),C&&r.nodePermissions(B,C)?-2:0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},f:function(A,I,g){q.varargs=g;try{var B=q.getStreamFromFD(A);switch(I){case 0:if((C=t())<0)return-28;for(;r.streams[C];)C++;return r.dupStream(B,C).fd;case 1:case 2:case 13:case 14:return 0;case 3:return B.flags;case 4:var C=t();return B.flags|=C,0;case 12:C=W();return Q[C+0>>1]=2,0}return-28}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},u:function(A,I){try{var g=q.getStreamFromFD(A);return q.doStat(r.stat,g.path,I)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},k:function(A,I,C){q.varargs=C;try{var E=q.getStreamFromFD(A);switch(I){case 21509:case 21510:case 21511:case 21512:case 21524:case 21515:return E.tty?0:-59;case 21505:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcgets){var D=E.tty.ops.ioctl_tcgets(E),w=W();B[w>>2]=D.c_iflag||0,B[w+4>>2]=D.c_oflag||0,B[w+8>>2]=D.c_cflag||0,B[w+12>>2]=D.c_lflag||0;for(var i=0;i<32;i++)g[w+i+17]=D.c_cc[i]||0;return 0}return 0;case 21506:case 21507:case 21508:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcsets){w=W();var o=B[w>>2],G=B[w+4>>2],M=B[w+8>>2],R=B[w+12>>2],F=[];for(i=0;i<32;i++)F.push(g[w+i+17]);return E.tty.ops.ioctl_tcsets(E.tty,I,{c_iflag:o,c_oflag:G,c_cflag:M,c_lflag:R,c_cc:F})}return 0;case 21519:if(!E.tty)return-59;w=W();return B[w>>2]=0,0;case 21520:return E.tty?-28:-59;case 21531:w=W();return r.ioctl(E,I,w);case 21523:if(!E.tty)return-59;if(E.tty.ops.ioctl_tiocgwinsz){var y=E.tty.ops.ioctl_tiocgwinsz(E.tty);w=W();Q[w>>1]=y[0],Q[w+2>>1]=y[1]}return 0;default:return-28}}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},s:function(A,I,g,Q){try{I=q.getStr(I);var B=256&Q,C=4096&Q;return Q&=-6401,I=q.calculateAt(A,I,C),q.doStat(B?r.lstat:r.stat,I,g)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},h:function(A,I,g,Q){q.varargs=Q;try{I=q.getStr(I),I=q.calculateAt(A,I);var B=Q?t():0;return r.open(I,g,B).fd}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},t:function(A,I){try{return A=q.getStr(A),q.doStat(r.stat,A,I)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},j:()=>{F(\"\")},n:function(A,I,g,Q,C,D,w){C=l(C);try{if(isNaN(C))return 61;var i=q.getStreamFromFD(Q),o=r.mmap(i,A,C,I,g),G=o.ptr;return B[D>>2]=o.allocated,E[w>>2]=G,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},o:function(A,I,g,Q,B,C){C=l(C);try{var E=q.getStreamFromFD(B);2&g&&q.doMsync(A,E,I,Q,C)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},l:(A,I,g,Q)=>{var C=(new Date).getFullYear(),D=new Date(C,0,1),w=new Date(C,6,1),i=D.getTimezoneOffset(),o=w.getTimezoneOffset(),G=Math.max(i,o);E[A>>2]=60*G,B[I>>2]=Number(i!=o);var M=A=>{var I=A>=0?\"-\":\"+\",g=Math.abs(A);return`UTC${I}${String(Math.floor(g/60)).padStart(2,\"0\")}${String(g%60).padStart(2,\"0\")}`},R=M(i),F=M(o);oDate.now(),m:A=>{var I=C.length,g=2147483648;if((A>>>=0)>g)return!1;for(var Q,B,E=1;E<=4;E*=2){var D=I*(1+.2/E);D=Math.min(D,A+100663296);var w=Math.min(g,(Q=Math.max(A,D))+((B=65536)-Q%B)%B);if(x(w))return!0}return!1},q:(A,I)=>{var Q=0;return n().forEach(((B,C)=>{var D=I+Q;E[A+4*C>>2]=D,((A,I)=>{for(var Q=0;Q{var g=n();E[A>>2]=g.length;var Q=0;return g.forEach((A=>Q+=A.length+1)),E[I>>2]=Q,0},g:O,c:function(A){try{var I=q.getStreamFromFD(A);return r.close(I),0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},e:function(A,I,Q,B){try{var C=((A,I,Q,B)=>{for(var C=0,D=0;D>2],i=E[I+4>>2];I+=8;var o=r.read(A,g,w,i,B);if(o<0)return-1;if(C+=o,o>2]=C,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},p:function(A,I,g,Q){I=l(I);try{if(isNaN(I))return 61;var B=q.getStreamFromFD(A);return r.llseek(B,I,g),i[Q>>3]=BigInt(B.position),B.getdents&&0===I&&0===g&&(B.getdents=null),0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},d:function(A,I,Q,B){try{var C=((A,I,Q,B)=>{for(var C=0,D=0;D>2],i=E[I+4>>2];I+=8;var o=r.write(A,g,w,i,B);if(o<0)return-1;C+=o,void 0!==B&&(B+=o)}return C})(q.getStreamFromFD(A),I,Q);return E[B>>2]=C,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},w:function(A){return G.agerrMessages.push(K(A)),0}};G.ccall=(A,I,Q,B,C)=>{var E={string:A=>{var I=0;return null!=A&&0!==A&&(I=(A=>{var I=Y(A)+1,g=V(I);return b(A,g,I),g})(A)),I},array:A=>{var I,Q,B=V(A.length);return I=A,Q=B,g.set(I,Q),B}};var D=(A=>G[\"_\"+A])(A),w=[],i=0;if(B)for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:\"i8\";switch(I.endsWith(\"*\")&&(I=\"*\"),I){case\"i1\":case\"i8\":return g[A];case\"i16\":return Q[A>>1];case\"i32\":return B[A>>2];case\"i64\":return i[A>>3];case\"float\":return D[A>>2];case\"double\":return w[A>>3];case\"*\":return E[A>>2];default:F(`invalid type for getValue: ${I}`)}},G.PATH=k,G.UTF8ToString=K,G.stringToUTF8=b,G.lengthBytesUTF8=Y,G.FS=r;var v={a:p};return WebAssembly.instantiate(G.wasm,v).then((I=>{var g=I.instance.exports;G._viz_set_y_invert=g.z,G._viz_set_reduce=g.A,G._viz_get_graphviz_version=g.B,G._viz_get_plugin_list=g.C,G._viz_create_graph=g.D,G._viz_read_one_graph=g.E,G._viz_string_dup=g.F,G._viz_string_dup_html=g.G,G._viz_string_free=g.H,G._viz_add_node=g.I,G._viz_add_edge=g.J,G._viz_add_subgraph=g.K,G._viz_set_default_graph_attribute=g.L,G._viz_set_default_node_attribute=g.M,G._viz_set_default_edge_attribute=g.N,G._viz_set_attribute=g.O,G._viz_free_graph=g.P,G._viz_render_graph=g.Q,G._free=g.S,G._malloc=g.T,z=g.U,j=g.V,X=g.W,e=g.X,T=g.Y,o=g.x,y(),function(A){A.y(),G.noFSInit||r.init.initialized||r.init(),r.ignorePermissions=!1}(g),A(G)})),M};const I=[[/^Error: (.*)/,\"error\"],[/^Warning: (.*)/,\"warning\"]];function g(A){return function(A){const I=[];let g;for(let Q=0;Q{for(let g=0;g{A.ccall(\"viz_set_default_graph_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}));if(g.nodeAttributes)for(const[B,C]of Object.entries(g.nodeAttributes))Q(A,I,C,(g=>{A.ccall(\"viz_set_default_node_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}));if(g.edgeAttributes)for(const[B,C]of Object.entries(g.edgeAttributes))Q(A,I,C,(g=>{A.ccall(\"viz_set_default_edge_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}))}function C(A,I,g,B){for(const[C,E]of Object.entries(B))Q(A,I,E,(I=>{A.ccall(\"viz_set_attribute\",\"number\",[\"number\",\"string\",\"number\"],[g,C,I])}))}function E(A,I,g){B(A,I,g),g.nodes&&g.nodes.forEach((g=>{const Q=A.ccall(\"viz_add_node\",\"number\",[\"number\",\"string\"],[I,String(g.name)]);g.attributes&&C(A,I,Q,g.attributes)})),g.edges&&g.edges.forEach((g=>{const Q=A.ccall(\"viz_add_edge\",\"number\",[\"number\",\"string\",\"string\"],[I,String(g.tail),String(g.head)]);g.attributes&&C(A,I,Q,g.attributes)})),g.subgraphs&&g.subgraphs.forEach((g=>{const Q=A.ccall(\"viz_add_subgraph\",\"number\",[\"number\",\"string\"],[I,String(g.name)]);E(A,Q,g)}))}function D(A,I,g){const Q=A.ccall(\"viz_create_graph\",\"number\",[\"string\",\"number\",\"number\"],[I.name,void 0===I.directed||I.directed,void 0!==I.strict&&I.strict]);return E(A,Q,I),Q}function w(A,I,Q){let C,E,w;try{if(A.agerrMessages=[],A.stderrMessages=[],w=function(A,I){return I?I.map((I=>{if(\"string\"!=typeof I.name)throw new Error(\"image name must be a string\");if(\"number\"!=typeof I.width&&\"string\"!=typeof I.width)throw new Error(\"image width must be a number or string\");if(\"number\"!=typeof I.height&&\"string\"!=typeof I.height)throw new Error(\"image height must be a number or string\");const g=A.PATH.join(\"/\",I.name),Q=`\\n\\n`;return A.FS.createPath(\"/\",A.PATH.dirname(g)),A.FS.writeFile(g,Q),g})):[]}(A,Q.images),\"string\"==typeof I)C=function(A,I,g){let Q;try{const g=A.lengthBytesUTF8(I);return Q=A.ccall(\"malloc\",\"number\",[\"number\"],[g+1]),A.stringToUTF8(I,Q,g+1),A.ccall(\"viz_read_one_graph\",\"number\",[\"number\"],[Q])}finally{Q&&A.ccall(\"free\",\"number\",[\"number\"],[Q])}}(A,I);else{if(\"object\"!=typeof I)throw new Error(\"input must be a string or object\");C=D(A,I)}return 0===C?{status:\"failure\",output:void 0,errors:g(A)}:(B(A,C,Q),A.ccall(\"viz_set_y_invert\",\"number\",[\"number\"],[Q.yInvert?1:0]),A.ccall(\"viz_set_reduce\",\"number\",[\"number\"],[Q.reduce?1:0]),E=A.ccall(\"viz_render_graph\",\"number\",[\"number\",\"string\",\"string\"],[C,Q.format,Q.engine]),0===E?{status:\"failure\",output:void 0,errors:g(A)}:{status:\"success\",output:A.UTF8ToString(E),errors:g(A)})}catch(I){if(/^exit\\(\\d+\\)/.test(I))return{status:\"failure\",output:void 0,errors:g(A)};throw I}finally{C&&A.ccall(\"viz_free_graph\",\"number\",[\"number\"],[C]),E&&A.ccall(\"free\",\"number\",[\"number\"],[E]),w&&function(A,I){for(const g of I)A.FS.analyzePath(g).exists&&A.FS.unlink(g)}(A,w)}}function i(A,I){const g=A.ccall(\"viz_get_plugin_list\",\"number\",[\"string\"],[I]);if(0==g)throw new Error(`couldn't get plugin list: ${I}`);const Q=[];let B,C=g;for(;B=A.getValue(C,\"*\");)Q.push(A.UTF8ToString(B)),A.ccall(\"free\",\"number\",[\"number\"],[B]),C+=4;return A.ccall(\"free\",\"number\",[\"number\"],[g]),Q}class o{constructor(A){this.module=A}get graphvizVersion(){return function(A){const I=A.ccall(\"viz_get_graphviz_version\",\"number\",[],[]);return A.UTF8ToString(I)}(this.module)}get formats(){return i(this.module,\"device\")}get engines(){return i(this.module,\"layout\")}render(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return w(this.module,A,{format:\"dot\",engine:\"dot\",...I})}renderString(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.render(A,I);if(\"success\"!==g.status)throw new Error(g.errors.find((A=>\"error\"==A.level))?.message||\"render failed\");return g.output}renderSVGElement(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:\"svg\"});return(new DOMParser).parseFromString(g,\"image/svg+xml\").documentElement}renderJSON(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:\"json\"});return JSON.parse(g)}}const G=\"AGFzbQEAAAABkgdzYAJ/fwF/YAF/AGABfwF/YAN/f38Bf2ACf38AYAN/f38AYAR/f39/AX9gBX9/f39/AX9gBH9/f38AYAV/f39/fwBgBn9/f39/fwF/YAZ/f39/f38AYAAAYAABf2AIf39/f39/f38Bf2AHf39/f39/fwF/YAJ/fwF8YAF8AXxgB39/f39/f38AYAd/f39/fHx/AGADf39/AXxgAX8BfGACf3wAYAR8fHx/AXxgAnx8AXxgA398fABgA39/fgF/YAl/f39/f39/f38AYAV/fn5+fgBgBH9/f3wAYAR/f3x8AX9gCn9/f39/f39/f38Bf2ADfHx8AXxgA39/fgBgAAF8YAR/f39/AXxgA39+fwF+YAJ/fgF/YAN/f3wAYAV/f39/fgF/YAR/fn5/AGAEf398fwBgAnx/AXxgBH9/f3wBf2ADfHx/AXxgA398fwBgCH9/f39/f39/AGACf3wBf2AFf39/f3wBf2ALf39/f39/f39/f38Bf2AFf39+f38AYAR/f3x/AX9gAn9+AGAFf39/f3wAYAN/f3wBf2ABfwF+YAZ/fHx8fHwBfGAHf39/fHx/fwBgBX9/fH9/AX9gA39/fwF+YAx/f39/f39/f39/f38Bf2ACfX0BfWACf38BfmAGf39/fH9/AGAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgCn9/f39/f39/f38AYAR/f39/AX5gBn98f39/fwF/YAd/f39/f35+AX9gBn9/f39+fgF/YAd/f39/fn9/AX9gBn9/f39/fgF/YAR/fn9/AX9gBH9/fHwBfGAFf398f38AYAl/f39/f39/f38Bf2AEf398fABgBn9/f3x/fwF/YAJ/fQF/YAR+fn5+AX9gCH9/f398fHx/AGADf31/AGACfn8Bf2ABfAF/YAZ/fX9/f38AYAR/f31/AGACfn4BfWACf30AYAR/f39+AX5gBnx8fH9/fwBgBH98fHwAYAJ+fgF8YAJ8fwF/YAV/f398fwBgBn9/f3x8fwBgA398fAF/YAd/fHx8fHx8AGAEf3x/fwF/YAp/fH9/f39/f39/AGAFf39/f38BfGAHf39/f3x/fwF/YAV/f31/fwBgA3x8fAF/YAV/f3x8fABgA39/fwF9YAN+fn4Bf2AEf35+fgBgA39+fwF/YAABfmABfwF9YAN/fn4B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BSADEGgLIAAgACAFELwNDAELIAAgASACEOgNIQULIAdBMGokACAFDwtBhdEBQb/8AEEMQcc7EAAACzMBAX8gAgRAIAAhAwNAIAMgAS0AADoAACADQQFqIQMgAUEBaiEBIAJBAWsiAg0ACwsgAAsUACAAECUEQCAALQAPDwsgACgCBAsVACAAEKEBBEAgACgCBA8LIAAQmQMLJgAgACABEPEHIgFFBEBBAA8LIAAQ5gEoAgwgASgCEEECdGooAgALQwAgACAAIAGlIAG9Qv///////////wCDQoCAgICAgID4/wBWGyABIAC9Qv///////////wCDQoCAgICAgID4/wBYGwsuACAALQAPIgBBAWpB/wFxQRFPBEBB/bIDQY/9AEHIAEG4lwEQAAALIABB/wFHCwcAQQEQBgALCwAgACABQQAQ/wYLPAEBf0EHIQICQAJAAkAgAEEoag4IAgICAgAAAAABC0EIDwsgAEF/RyABQX1NckUEQEEADwtBHSECCyACC0IBAX8gACABEOQBIgFFBEBBAA8LIAAoAjQgASgCIBDYASAAKAI0IgJBAEGAASACKAIAEQMAIAEgACgCNBDxAjYCIAtvAQJ/IAAtAAAiAgR/AkADQCABLQAAIgNFDQECQCACIANGDQAgAhD3ASABLQAAEPcBRg0AIAAtAAAhAgwCCyABQQFqIQEgAC0AASECIABBAWohACACDQALQQAhAgsgAgVBAAsQ9wEgAS0AABD3AWsLLAACQAJAAkAgACgCAEEDcUEBaw4DAQAAAgsgACgCKCEACyAAKAIYIQALIAALVQECfyAAIAFBMEEAIAEoAgBBA3FBA0cbaigCKBDkASIDBEAgACgCNCADKAIgENgBIAAoAjQiAiABQQggAigCABEDACECIAMgACgCNBDxAjYCIAsgAgsqAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAkGEBEEAEK0HGiADQRBqJAALkwEBAn8gABArIQUCQCAAIAFBABBrIgQgAkVyDQAgAhDjASIEIAUgARCqATYCAAJAIAAoAhAiAkUEQCAEIAQ2AgQMAQsgAiACKAIEIgVGBEAgAiAENgIEIAQgAjYCBAwBCyAEIAU2AgQgAiAENgIECyAALQAAQQRxDQAgACAEQQAQ3gcLIAMEQCAAIAFBARBrGgsgBAscAQF/IAAQoQEEQCAAKAIAIAAQ6AIaEKYFCyAAC6QBAwF8AX4BfyAAvSICQjSIp0H/D3EiA0GyCE0EfCADQf0HTQRAIABEAAAAAAAAAACiDwsCfCAAmSIARAAAAAAAADBDoEQAAAAAAAAww6AgAKEiAUQAAAAAAADgP2QEQCAAIAGgRAAAAAAAAPC/oAwBCyAAIAGgIgAgAUQAAAAAAADgv2VFDQAaIABEAAAAAAAA8D+gCyIAmiAAIAJCAFMbBSAACwsLACAAIAFBARD/BgtDACAAIAAgAaQgAb1C////////////AINCgICAgICAgPj/AFYbIAEgAL1C////////////AINCgICAgICAgPj/AFgbCykBAX8gAgRAIAAhAwNAIAMgAToAACADQQFqIQMgAkEBayICDQALCyAAC0IAIABFBEBBAA8LAn8CQAJAAkAgACgCAEEDcUEBaw4DAQAAAgsgACgCKEEYagwCCyAAQRhqDAELIABByABqCygCAAspACAAKAIwEKIDQQBIBEBB+sgBQZa7AUGgAUHzMBAAAAsgACgCMBCiAwtgAQJ/AkAgACgCPCIDRQ0AIAMoAmwiBEUNACAAKAIQKAKYAUUNACAALQCZAUEgcQRAIAAgASACIAQRBQAPCyAAIAAgASACQRAQGCACEJICIgAgAiADKAJsEQUAIAAQFwsLfQEDfwJAAkAgACIBQQNxRQ0AIAEtAABFBEBBAA8LA0AgAUEBaiIBQQNxRQ0BIAEtAAANAAsMAQsDQCABIgJBBGohAUGAgoQIIAIoAgAiA2sgA3JBgIGChHhxQYCBgoR4Rg0ACwNAIAIiAUEBaiECIAEtAAANAAsLIAEgAGsLFwEBf0EPIQEgABAlBH9BDwUgACgCCAsLkAEBA38CQCAAECIiAiABSQRAIwBBEGsiBCQAIAEgAmsiAgRAIAIgABBVIgMgABAiIgFrSwRAIAAgAyACIANrIAFqIAEgARCQBwsgASAAEEAiA2ogAkEAEPgKIAAgASACaiIAEJMDIARBADoADyAAIANqIARBD2oQyQELIARBEGokAAwBCyAAIAAQQCABEI0LCwu9FwMKfwR8AX4jAEFAaiINJAADQCAGIQ4CfwJAAkACQCAFIgZBAEwNACANIAApAAAiFzcDICAGIBdCIIinTw0BQQEgBkEHcXQiBSAGQQN2IgsgDUEgaiAXpyIKIBdCgICAgJAEVCIMG2otAABxDQAgAygCBCEJIAAgCiAMGyALaiILIAstAAAgBXI6AAACQCAJIAZByABsaiIKKwMQIhMgCisDICIUREivvJry13o+oGRFDQAgAiAKKAIAQThsaiIFKwMAIhUgBSsDEKGZREivvJry13o+ZUUNACACIAooAgRBOGxqIgUrAwAiFiAFKwMQoZlESK+8mvLXej5lRQ0AIA1CADcDMCANQgA3AyggDUIANwMgAkAgBwRAIA0gEzkDMCANIBQ5AyAgDSAWmjkDKCAVmiETDAELIA0gFjkDMCANIBQ5AyggDSAVOQMgCyANIBM5AzggDSANKQMoNwMIIA0gDSkDMDcDECANIA0pAzg3AxggDSANKQMgNwMAIAEgDRCABAsCQCAKKAIoIg9BAEoNACAKKAIsQQBKDQACQCAKKAIwQQBMDQAgCigCNCIIQQBMDQAgCkEwaiEFIApBNGohCyADKAIEIAhByABsaigCACEMIAooAgAhCSAIIA5GBEAgBCAJIAwQtQEgACABIAIgAyAEIAsoAgAgBiAHQQEQOiEEQQEMBgsgBCAMIAkQtQEgACABIAIgAyAEIAooAjAgBiAHQQEQOiEEIAshBUEBDAULIAAgASACIAMgBCAPIAYgB0ECEDogACABIAIgAyAEIAooAiwgBiAHQQIQOiAAIAEgAiADIAQgCigCMCAGIAdBARA6IApBNGohBUEBDAQLIApBKGohCwJAIAooAjAiEUEASiIMDQAgCigCNEEASg0AAkAgD0EATA0AIAooAiwiCUEATA0AIApBLGohBSADKAIEIA9ByABsaigCBCEIIAooAgQhDCAJIA5GBEAgBCAIIAwQtQEgACABIAIgAyAEIAooAiwgBiAHQQIQOiEEIAshBUECDAYLIAQgDCAIELUBIAAgASACIAMgBCALKAIAIAYgB0ECEDohBEECDAULIApBNGohBSAAIAEgAiADIAQgDyAGIAdBAhA6IAAgASACIAMgBCAKKAIsIAYgB0ECEDogACABIAIgAyAEIAooAjAgBiAHQQEQOkEBDAQLIAoiCUEwaiEFIAlBLGohCiAJKAIsIRACQCAPQQBKBEAgEEEATA0BAkAgEUEATA0AIAkoAjQiEUEATA0AIAlBNGohDCADKAIEIhIgD0HIAGxqKAIEIQ8gEiARQcgAbGoo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ELMHCyIDNgIAIANBf0YNASAAQQFqIgBBBkcNAAtBABD2C0UEQEHI+QYhASAEQcj5BkEYEMIBRQ0CQeD5BiEBIARB4PkGQRgQwgFFDQJBACEAQcCsCy0AAEUEQANAIABBAnRBkKwLaiAAQeX0BBCzBzYCACAAQQFqIgBBBkcNAAtBwKwLQQE6AABBqKwLQZCsCygCADYCAAtBkKwLIQEgAkEIaiIAQZCsC0EYEMIBRQ0CQaisCyEBIABBqKwLQRgQwgFFDQJBGBBCIgFFDQELIAEgAikCCDcCACABIAIpAhg3AhAgASACKQIQNwIIDAELQQAhAQsgAkEgaiQAQaSvC0EBOgAAQaCvCyABNgIAIAELFQAgAC0AD0H/AUYEQCAAKAIAEBcLC78KAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhEIAIQFQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAuEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyALQv///////z9YBEAgBUHQAGogASANIAEgDSANUCIGG3kgBkEGdK18pyIGQQ9rELEBQRAgBmshBiAFKQNYIg1CIIghDiAFKQNQIQELIAJC////////P1YNACAFQUBrIAMgDCADIAwgDFAiCBt5IAhBBnStfKciCEEPaxCxASAGIAhrQRBqIQYgBSkDSCEMIAUpA0AhAwsgA0IPhiILQoCA/v8PgyICIAFCIIgiBH4iECAL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IAUgAWtBBHRqIgAgAiAFQQR0aiIDKQMANwMAIAAgAykDCDcDCCAGIAMpAwg3AyggBiADKQMANwMgIAVBAWoiAyAJTw0AIAgoAgAgAyABa0EEdGoiACACIANBBHRqIgMpAwA3AwAgACADKQMINwMIIAYgAykDCDcDOCAGIAMpAwA3AzAgCCgCACAFQQJqIgMgAWtBBHRqIgAgAiADQQR0aiIDKQMANwMAIAAgAykDCDcDCCAEIAMpAwg3AwggBCADKQMANwMAIAYgAiAFQQNqIgVBBHRqIgApAwg3A1ggBiAAKQMANwNQIA4oAhBBEGogBkEgahD5BQwBCwsgCCAHIAFrQQRqNgIEIAZBgAFqJAALcwEBfyAAECEgABA4TwRAIABBARDrAQsgABAhIQICQCAAECUEQCAAIAJqIAE6AAAgACAALQAPQQFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAAKAIAIAJqIAE6AAAgACAAKAIEQQFqNgIECwsyACAAQQAQlAICQCAAECUEQCAAQQA6AA8MAQsgAEEANgIECyAAECUEfyAABSAAKAIACwtEAgJ/AXwgAEEAIABBAEobIQADQCAAIANGRQRAIAEgA0EDdCIEaisDACACIARqKwMAoiAFoCEFIANBAWohAwwBCwsgBQsKACAALQALQQd2CxgAIAAtAABBIHFFBEAgASACIAAQtwcaCwsdACAAQQAgAEGZAU0bQQF0QfCJB2ovAQBB9PoGagsgAQJ/IAAQN0EBaiIBEEIiAkUEQEEADwsgAiAAIAEQIAslAQF/IwBBEGsiBCQAIAQgAzYCDCAAIAEgAiADEE4gBEEQaiQACykBAX5BuJYLQbiWCykDAEKt/tXk1IX9qNgAfkIBfCIANwMAIABCIYinC6sDAgV/AX4gAL1C////////////AINCgYCAgICAgPj/AFQgAb1C////////////AINCgICAgICAgPj/AFhxRQRAIAAgAaAPCyABvSIHQiCIpyICQYCAwP8DayAHpyIFckUEQCAAEL0FDwsgAkEedkECcSIGIAC9IgdCP4inciEDAkAgB0IgiKdB/////wdxIgQgB6dyRQRAAkACQCADQQJrDgIAAQMLRBgtRFT7IQlADwtEGC1EVPshCcAPCyACQf////8HcSICIAVyRQRARBgtRFT7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IAMgBUEEdGoiASAHIAVB4ABsaiIGKQMINwMIIAEgBikDADcDACAFQQFqIQUMAAsACwJAIARFDQBBACEFA0AgBUEERg0BIAQgBUEEdCIBaiIDIAdBAyAFa0HgAGxqIAFqIgEpAwg3AwggAyABKQMANwMAIAVBAWohBQwACwALIAAgBykDoAI3AwAgACAHKQOoAjcDCCAHQcAEaiQABSAHIAVBBHQiBmoiCCABIAZqIgYpAwA3AwAgCCAGKQMINwMIIAVBAWohBQwBCwsLPwECfwNAIAAoAhAiAigC8AEiAUUgACABRnJFBEAgASIAKAIQKALwASIBRQ0BIAIgATYC8AEgASEADAELCyAAC14BAX8jAEEgayICJAAgAiAAKAIANgIIIAIgACgCBDYCDCACIAAoAgg2AhAgAEIANwIEIAIgACsDEDkDGCAAIAEQlgEgASACQQhqIgAQlgEgAEEEchDFASACQSBqJAALoQEBAn8CQCAAECJFIAIgAWtBBUhyDQAgASACEJ0FIAJBBGshBCAAEEAiAiAAECJqIQUCQANAAkAgAiwAACEAIAEgBE8NACAAQQBMIABB/wBOckUEQCABKAIAIAIsAABHDQMLIAFBBGohASACIAUgAmtBAUpqIQIMAQsLIABBAEwgAEH/AE5yDQEgAiwAACAEKAIAQQFrSw0BCyADQQQ2AgALC4QBAQJ/IwBBEGsiAiQAIAAQoQEEQCAAKAIAIAAQ6AIaEKYFCyABECIaIAEQoQEhAyAAIAEoAgg2AgggACABKQIANwIAIAFBABDKASACQQA6AA8gASACQQ9qEMkBAkAgACABRiIBIANyRQ0ACyAAEKEBIAFyRQRAIAAQmQMaCyACQRBqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLzgkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApC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NgIAIAFBBGohAQwACwALIAEoAgghAiABQQA2AggLIAAoAggiAEEANgIQIABBADYCBCAAIAAoAgBB/19xNgIAIAILxQIBCH8jAEEgayICJAACQCAAIAJBHGoQyAUiAEUNACACKAIcIgVBAEwNAANAIAAtAAAiA0UNASADQS1HBEAgAEEBaiEADAELCyACQgA3AxAgAkIANwMIIABBAWohBkEAIQMDQCAEIAVIBEAgAyAGaiIHLAAAIggEQCACQQhqIAgQlA0CQCAHLQAAQdwARgRAIANFDQEgACADai0AAEHcAEcNAQsgBEEBaiEECyADQQFqIQMMAgUgAkEIahBmQQAhBAwDCwALCyABIwBBEGsiASQAAkAgAkEIaiIAECUEQCAAIAAQISIFEMUCIgQNASABIAVBAWo2AgBB6PoGKAIAQandAyABEB0aECYACyAAQQAQlA0gACgCACEECyAAQgA3AgAgAEIANwIIIAFBEGokACAENgIAIAMgBmohBAsgAkEgaiQAIAQLHAAgACABIAAgAhCqASIBQQEQygUgACABEIkBGgs9AQF/QdCUCygCACECA0AgAkEATARAQQAPCyACQQFrIQIgAUHk9AQgACgCTCgCBCgCBBEAAEF/Rw0AC0F/C4UCAQN/IwBBEGsiAyQAIAMgAjYCBCADIAI2AgwgAyACNgIIAkACQAJAQQBBACABIAIQTiICQQBIDQAgAkEBaiEFIAIgABA4IAAQIWsiBE8EQCAAIAUgBGsQ2gcLIAAQISEEIAIgABAlBH8gACAEagUgACgCACAEagsgBSABIAMoAgwQTiIBRyABQQBOcQ0BIAFBAEwNACAAECUEQCABQYACTw0DIAAgAC0ADyABajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAWo2AgQLIANBEGokAA8LQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALuQEBAn8CQAJAIAAQNyIBRQ0AIAFBrJQLEDhBrJQLECFrSwRAQayUCyABENoHC0GslAsQISECQayUCxAlBEAgAkGslAtqIAAgARAgGiABQYACTw0CQbuUC0G7lAstAAAgAWo6AABBrJQLECFBEEkNAUG/rgNBj/0AQfABQY/qABAAAAtBrJQLKAIAIAJqIAAgARAgGkGwlAtB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AEHojgtBATsBACABKAI0KAIQLQBzIQIjAEEQayIEJAACfyACQQNPBEAgBCACNgIAQYa3BCAEEDFB7+sBDAELIAJBAnRBkIIFaigCAAshCCAEQRBqJABBwI4LAn8CQAJAQbAEEEIiAkUNACACQfMCNgIQIAJB9AI2AgwgAkEQNgKEAyACQQA2AiAgAkEANgIIIAJBITYCFCACQYACEEIiBDYCkAMgBEUNASACQYAIIAIoAgwRAgAiBDYCOCAERQRAIAIoApADIAIoAhQRAQAgAiACKAIUEQEADAELIAJBDGohBiACIARBgAhqNgI8AkBBACIERQRAQbwBIAIoAgwRAgAiBEUNASAEQgA3AlAgBEIANwJoIAQgBjYCZCAEIAY2AnwgBEIANwIIIARBADoABCAEQgA3AhwgBEEAOgAYIAQgBjYCECAEQQA2AgAgBEIANwIwIARBADoALCAEIAY2AiQgBEEANgIUIARBADYCYCAEQgA3AlggBEIANwJwIARBADYCeCAEQgA3AkQgBEEAOgBAIAQgBjYCOCAEQQA2AiggBEEANgI8IAQgBjYCTCAEQgA3AowBIARBADoAiAEgBEIBNwKAASAEIAY2ApQBIARCADcCmAEgBEEAOgCgASAEQgA3AqQBIARCADcCrAEgBEIANwK0AQsgAkEANgKAAyACIAQ2AuwCIAJBADYC+AIgAkEANgK4AiACQgA3A9gDIAJBIToA4AMgAkEANgKAAiACQQA2AogBIAJBADsB9AEgAkIANwKoAyACQQA2AvABIAJCADcClAMgAiAGNgK8AyACQgA3AsADIAJCADcCsAMgAkEANgK4AyACQQA6AJwDIAJBADYC0AMgAkIANwLIAyACIAY2AtQDQQAhBCACQfUCNgKgAiACQcsDNgKIAiACQQA2ApwCIAJCgICAgBA3ApQCIAgEQANAIAQgCGogBEEBaiEELQAADQALIAQgAigCDBECACIGBEAgBiAIIAQQIBoLIAIgBjYC8AELIAJBADYC8AIgAkGgAWogAkGcAWpBABDDBxogAkIANwMAIAJBQGtBAEHAABAzGiACQgA3AowBIAJBADYChAEgAkIANwKUASACQgA3A6ADIAJBADYCNCACQQE6ADAgAkEANgIsIAJCADcCJCACQgA3AqQCIAJCADcCrAIgAkEANgK0AiACIAIoAggi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NwMYIAEgACkDEDcDECABIAApAwg3AwggASAAKQMANwMAAkAgAkUNAAJAIAEoAgQNACACKAIEIgBFDQAgASAANgIECwJAIAErAxBEAAAAAAAAAABjRQ0AIAIrAxAiBEQAAAAAAAAAAGZFDQAgASAEOQMQCwJAIAEoAgANACACKAIAIgBFDQAgASAANgIACyACKAIYQf8AcSIARQ0AIAEgASgCGCAAcjYCGAsgA0GgjwsoAgAoAogBIgAgAUEBIAAoAgARAwA2AgAgA0GcjwsoAgA2AgRBnI8LIAM2AgAgAUEgaiQAC8EBAQJ/AkACQCABIAAoAhAiAigCsAEiA0cEQCAAIAEoAhAiACgCsAFHDQELQZiIBEEAECcMAQsgA0UEQCACIAE2ArABIAIoAqwBIgMgACgCrAFKBEAgACADNgKsAQsDQCABRQ0CIAEoAhAiACAALwGoASACLwGoAWo7AagBIAAgAC8BmgEgAi8BmgFqOwGaASAAIAAoApwBIAIoApwBajYCnAEgACgCsAEhAQwACwALQbjOAUGXuQFBqQJBmg8QAAALC2oBAX8jAEEgayIDJAAgA0IANwMYIANCADcDCCADQoCAgICAgID4v383AxAgAyACNgIYIANCADcDACABBEAgA0HAmgpBAyABQbnZARDGBAsgACgCiAEiACADQQEgACgCABEDACADQSBqJAALaQEBf0HUigsoAgAhAQJAIAAEQEHUigsgAUEBajYCACABDQFB0IoLQQAQsgcQYTYCAEGG2AEQsgcaDwsgAUEATA0AQdSKCyABQQFrIgA2AgAgAA0AQdCKCygCABCyBxpB0IoLKAIAEBcLC0IBAn8jAEEQayICJAAgASgCECEDIAIgACgCECkCyAE3AwggAiADKQLAATcDACAAIAJBCGogASACENsIIAJBEGokAAtOAQF/AkAgACgCPCIERQ0AIAAoAkQgASAAKAIQQeAAaiIBEOUIIAQoAlwiBEUNACAAIAEgBBEEAAsgACgCECIAIAM5A5ABIAAgAjYCiAELngQCA38BfCMAQbABayICJAAgAkIANwOoASACQgA3A6ABAkACQAJAAkACQCAAKAIgIgNBAWsOBAECAgACCyAAKAIAIgBB1K0BEENFBEAgAkG1sAE2AjAgAiABuzkDOCACQaABakGLhgEgAkEwahBUDAQLIABB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C0GDzwEgBCADIAIQAAALQf2qAyAEIAMgAhAAAAsKACAAQQhqEMkDCyMBAX8jAEEQayIBJAAgASAANgIMIAFBDGoQiAsgAUEQaiQACw0AIAAoAgAgAUECdGoLGQAgABChAQRAIAAgARC4AQ8LIAAgARDKAQthAQF/IwBBEGsiAiQAIAIgADYCDAJAIAAgAUYNAANAIAIgAUEBayIBNgIIIAAgAU8NASACKAIMIAIoAggQyAsgAiACKAIMQQFqIgA2AgwgAigCCCEBDAALAAsgAkEQaiQAC7EBAQN/IwBBEGsiByQAAkACQCAARQ0AIAQoAgwhBiACIAFrQQJ1IghBAEoEQCAAIAEgCBDVAyAIRw0BCyAGIAMgAWtBAnUiAWtBACABIAZIGyIBQQBKBEAgACAHQQRqIAEgBRDSCyIFEEAgARDVAyEGIAUQdRogASAGRw0BCyADIAJrQQJ1IgFBAEoEQCAAIAIgARDVAyABRw0BCyAEENULDAELQQAhAAsgB0EQaiQAIAALqAEBA38jAEEQayIHJAACQAJAIABFDQAgBCgCDCEGIAIgAWsiCEEASgRAIAAgASAIENUDIAhHDQELIAYgAyABayIBa0EAIAEgBkgbIgFBAEoEQCAAIAdBBGogASAFENYLIgUQQCABENUDIQYgBRAvGiABIAZHDQELIAMgAmsiAUEASgRAIAAgAiABENUDIAFHDQELIAQQ1QsMAQtBACEACyAHQRBqJAAgAAsOACAAIAEoAgA2AgAgAAsKACAAIAEgAGtqCwsAIAAtAAtB/wBxCwgAIABB/wFxC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQCAAIAJUIAEgA1MgASADURsEQEF/DwsgACAChSABIAOFhEIAUg8LIAAgAlYgASADVSABIANRGwRAQX8PCyAAIAKFIAEg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IAErA0ihOQNoIA8gASsDUDkDcCAPIAUgASsDWKE5A3ggDyABKQNoNwOIASAPIAEpA2A3A4ABIAAgASACIAQQgQIgACAPQSBqQQdBABCBAgwCCyAQQQRxBEAgDyAQNgIMIA8gEDYCICABIAIgD0EMakEBEJUIIRIgAkEGbEECakEQEBghEUEAIQMDQCACIANGRQRAIBEgE0EEdGoiASASIANBBnRqIhApAwA3AwAgASAQKQMINwMIIAEgECkDGDcDGCABIBApAxA3AxAgASAQKQMYNwMoIAEgECkDEDcDICABIBApAyg3AzggASAQKQMgNwMwIAFBQGsgECkDIDcDACABIBApAyg3A0ggASAQKQM4NwNYIAEgECkDMDcDUCADQQFqIQMgE0EGaiETDAELCyARIBNBBHRqIgEgESkDADcDACABIBEpAwg3AwggESATQQFyIgFBBHRqIgIgESkDGDcDCCACIBEpAxA3AwAgACARQRBqIAEgBBCBAiAREBcgEhAXDAILIA9B1gU2AgQgD0HcuAE2AgBB6PoGKAIAQdaxBCAPEB0aEG4ACyAPIAMoAgA2AhAgASACIA9BEGpBABCVCCEQAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCARQQFrDhkAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGQsgAkEBaiITQRAQGCERQQEhAwNAIAIgA0YEQCARIBAgAkEwbGoiAUEYaikDADcDCCARIAEpAxA3AwAgESACQQR0aiIDIAFBEGsiAkEIaikDADcDCCADIAIpAwA3AwAgACARIBMgBBBBIBEQFyAPIAIpAwg3AyggDyACKQMANwMgIA8gASkDGDcDOCAPIAEpAxA3AzAgDyAPKwMwIA8rAyAgASsDAKGgOQNAIA8gDysDOCAPKwMoIAErAwihoDkDSCAAIA9BMGpBAhA2IA8gDykDSDcDOCAPIA8pA0A3AzAgACAPQSBqQQIQNgwaBSARIANBBHQiEmoiFCABIBJqIhIpAwA3AwAgFCASKQMINwMIIANBAWohAwwBCwALAAsgAkECaiIDQRAQGCICIAEpAwg3AwggAiABKQMANwMAIAIgECkDIDcDECACIBApAyg3AxggAiAQKwMgIBArAzAiBiAQKwNAoUQAAAAAAAAIQKMiB6A5AyAgECsDKCEIIBArA0ghCSAQKwM4IQUgAiAGIAegOQMwIAIgBSAFIAmhRAAAAAAAAAhAoyIFoDkDOCACIAggBaA5AyhBBCADIANBBE0bIREgAUEgayETQQQhAQNAIAEgEUYEQCAAIAIgAyAEEEEgAhAXIA8gECkDODcDKCAPIBApAzA3AyAgDyAQKQMoNwM4IA8gECkDIDcDMCAAIA9BIGpBAhA2DBkFIAIgAUEEdCISaiIUIBIgE2oiEikDADcDACAUIBIpAwg3AwggAUEBaiEBDAELAAsACyACQQNqIgNBEBAYIgIgAUEIaikDADcDCCACIAEpAwA3AwAgAiABKwMAIgUgBSAQKwMQoSIGRAAAAAAAANC/oqA5AxAgASsDCCEIIBArA0ghCSACIBArAzgiBzkDOCACIAUgBkQAAAAAAAACwKKgOQMwIAIgBSAGIAagoTkDICACIAggByAJoUQAAAAAAAAIQKOgIgU5AyggAiAFOQMYIBArAzAhBSACIAc5A0ggAiAFOQNAQQQgAyADQQRNGyERIAFBMGshE0EEIQEDQCABIBFGBEAgACACIAMgBBBBIAIQFwwYBSACIAFBBHQiEmoiFCASIBNqIhIpAwA3AwAgFCASKQMINwMIIAFBAWohAQwBCwALAAsgAkEERw0bQQZBEBAYIgIgASkDCDcDCCACIAEpAwA3AwAgAiAQKQMoNwMYIAIgECkDIDcDECACIBApA0g3AyggAiAQKQNANwMgIAIgASkDKDcDOCACIAEpAyA3AzAgAiAQKQOAATcDQCACIBApA4gBNwNIIAIgECkDoAE3A1AgAiAQKQOoATcDWCAAIAJBBiAEEEEgAhAXIA8gECsDECAQKwOwASAQKwMAoaA5AyAgDyAQKwMYIBArA7gBIBArAwihoDkDKCAPIBApA0g3AzggDyAQKQNANwMwIAAgD0EgaiIBQQIQNiAPIBApA4gBNwM4IA8gECkDgAE3AzAgACABQQIQNiAPIBApAwg3AzggDyAQKQMANwMwIAAgAUECEDYMFQsgAkEERw0bQQxBEBAYIgIgASkDCDcDCCACIAEpAwA3AwAgAiABKQMQNwMQIAIgASkDGDcDGCACIBArAzAiBSAQKwNAIAWhIgmgIgY5AyAgAiAQKwM4IgcgECsDSCAHoSIKoCIIOQMoIAIgBiAFIBArAyChoCIFOQMwIBArAyghCyACIAkgBaAiCSAGIAWhoDkDUCACIAk5A0AgAiAIIAcgC6GgIgU5AzggAiAKIAWgIgY5A0ggAiAGIAggBaGgOQNYIAIgECsDYCIFIBArA1AgBaEiCaAiBjkDkAEgAiAQKwNoIgcgECsDWCAHoSIKoCIIOQOYASACIAYgBSAQKwNwoaAiBTkDgAEgECsDeCELIAIgCSAFoCIJOQNwIAIgCSAGIAWhoDkDYCACIAggByALoaAiBTkDiAEgAiAKIAWgIgY5A3ggAiAGIAggBaGgOQNoIAIgASkDIDcDoAEgAiABKQMoNwOoASACIAEpAzA3A7ABIAIgASkDODcDuAEgACACQQwgBBBBIA8gAikDKDcDKCAPIAIpAyA3AyAgDyACKwMgIgUgAisDMCIGIAWhoSIFOQMwIA8gAisDKCIHIAIrAzgiCCAHoaEiBzkDOCAPIAUgAisDQCAGoaA5A0AgDyAHIAIrA0ggCKGgOQNIIA8gAikDWDcDWCAPIAIpA1A3A1AgACAPQSBqIgFBBBA2IA8gAikDaDcDKCAPIAIpA2A3AyAgDyACKwNgIgUgAisDcCIGIAWhoSIFOQMwIA8gAisDaCIHIAIrA3giCCAHoaEiBzkDOCAPIAUgAisDgAEgBqGgOQNAIA8gByACKwOIASAIoaA5A0ggDyACKQOYATcDWCAPIAIpA5ABNwNQIAAgAUEEEDYgAhAXDBQLIAJBBWoiA0EQEBgiAiABKwMAIgUgASsDECIGoEQAAAAAAADgP6IiByAFIAahIgZEAAAAAAAAwD+ioCIFOQMAIBArA0ghCSAQKwM4IQogASsDKCELIAErAxghDCACIAcgBkQAAAAAAADQP6KhIgg5AyAgAiAIOQMQIAIgDCALoEQAAAAAAADgP6IiBjkDKCACIAYgCiAJoSIHRAAAAAAAAAhAokQAAAAAAADgP6KgIgk5AxggAiAJOQMIIBArAzAhCiAQKwMgIQsgAiAHRAAAAAAAANA/oiIMIAmgOQOIASACIAU5A4ABIAIgB0QAAAAAAADgP6IgBiAHoCIHIAyhIgmgOQN4IAIgCTkDaCACIAU5A2AgAiAHOQNYIAIgBTkDUCACIAc5A0ggAiAGOQM4IAIgBSALIAqhIgWgOQNwIAIgCCAFRAAAAAAAAOA/oqAiBTkDQCACIAU5AzAgACACIAMgBBBBIA8gASsDEDkDICAPIAErAxggASsDKCIFoEQAAAAAAADgP6I5AyggDyABKwMAOQMwIA8gBSABKwMIIAErAzihRAAAAAAAAOA/oqA5AzggACAPQSBqQQIQNiACEBcMEwsgAkEBaiIDQRAQGCICIBArAxAiBjkDACACIBArAxggECsDOCIHIBArA0ihRAAAAAAAAOA/oiIFoTkDCCAQKwMwIQggAiAHIAWhOQMYIAIgCDkDECACIAErAyA5AyAgASsDKCEHIAIgBjkDMCACIAUgB6AiBTkDOCACIAU5AyggAiABKwMIIgUgBSABKwM4oUQAAAAAAADgP6KhOQNIIAIgASsDADkDQCAAIAIgAyAEEEEgAhAXDBILIAJBBGoiA0EQEBgiAiABKwMAIAErAxCgRAAAAAAAAOA/oiIFIBArAyAgECsDMKEiBkQAAAAAAADQP6IiCaAiBzkDACABKwMoIQggASsDGCEKIAIgBzkDECACIAogCKBEAAAAAAAA4D+iIgg5AwggECsDSCEKIBArAzghCyACIAg5A3ggAiAFIAmhIgk5A3AgAiAJOQNgIAIgBSAGRAAAAAAAAAjAokQAAAAAAADQP6KgIgU5A1AgAiAFOQNAIAIgBkQAAAAAAADgP6IgB6AiBTkDMCACIAU5AyAgAiAIIAsgCqFEAAAAAAAA4D+iIgagIgU5A2ggAiAFOQNYIAIgBTkDKCACIAU5AxggAiAGIAWgIgU5A0ggAiAFOQM4IAAgAiADIAQQQSAPIAErAxA5AyAgDyABKwMYIAErAygiBaBEAAAAAAAA4D+iOQMoIA8gASsDADkDMCAPIAUgASsDCCABKwM4oUQAAAAAAADgP6KgOQM4IAAgD0EgakECEDYgAhAXDBELIAJBAmoiA0EQEBgiAiABKwMAIAErAxCgRAAAAAAAAOA/oiIFIBArAyAgECsDMKEiB0QAAAAAAAAIQKJEAAAAAAAA0D+iIgigIgY5AwAgASsDKCEJIAErAxghCiACIAY5AxAgAiAKIAmgRAAAAAAAAOA/oiIGOQMIIBArA0ghCSAQKwM4IQogAiAGOQNYIAIgBSAIoSIIOQNQIAIgCDkDQCACIAUgB0QAAAAAAADQP6IiB6E5AzAgAiAFIAegOQMgIAIgBiAKIAmhIgZEAAAAAAAA0D+ioCIFOQNIIAIgBTkDGCACIAZEAAAAAAAA4D+iIAWgIgU5AzggAiAFOQMoIAAgAiADIAQQQSAPIAErAxA5AyAgDyABKwMYIAErAygiBaBEAAAAAAAA4D+iOQMoIA8gASsDADkDMCAPIAUgASsDCCABKwM4oUQAAAAAAADgP6KgOQM4IAAgD0EgakECEDYgAhAXDBALIAJBAWoiA0EQEBgiAiABKwMAIgUgASsDECIGoEQAAAAAAADgP6IiByAQKwMgIBArAzChIgigIgk5AwAgASsDKCEKIAErAxghCyAQKwNIIQwgECsDOCENIAIgByAFIAahRAAAAAAAANA/oqEiBTkDQCACIAU5AzAgAiAJIAihIgU5AyAgAiAFOQMQIAIgCyAKoEQAAAAAAADgP6IgDSAMoSIGRAAAAAAAANA/oqAiBTkDSCACIAU5AwggAiAGRAAAAAAAAOA/oiAFoCIHOQM4IAIgBzkDKCACIAYgBaA5AxggACACIAMgBBBBIA8gASsDEDkDICAPIAErAxggASsDKCIFoEQAAAAAAADgP6I5AyggDyABKwMAOQMwIA8gBSABKwMIIAErAzihRAAAAAAAAOA/oqA5AzggACAPQSBqQQIQNiACEBcMDwsgAkEEaiIDQRAQGCICIAErAwAiBSABKwMQIgagRAAAAAAAAOA/oiIHIAUgBqFEAAAAAAAAwD+iIgigIBArAyAgECsDMKFEAAAAAAAA4D+iIgWgIgY5AwAgASsDKCEJIAErAxghCiAQKwNIIQsgECsDOCEMIAIgBjkDcCACIAYgBaEiBjkDYCACIAY5A1AgAiAHIAihIgYgBaEiBTkDQCACIAU5AzAgAiAGOQMgIAIgBjkDECACIAogCaBEAAAAAAAA4D+iIgYgDCALoSIHRAAAAAAAANA/oiIIoSIFOQNYIAIgBTkDSCACIAYgCKAiBjkDGCACIAY5AwggAiAFIAdEAAAAAAAA4D+iIgWhIgc5A3ggAiAHOQNoIAIgBSAGoCIFOQM4IAIgBTkDKCAAIAIgAyAEEEEgDyABKwMQOQMgIA8gASsDGCABKwMoIgWgRAAAAAAAAOA/ojkDKCAPIAIrA0A5AzAgDyAFIAErAwggASsDOKFEAAAAAAAA4D+ioDkDOCAAIA9BIGoiA0ECEDYgDyACKwNwOQMgIA8gASsDGCABKwMoIgWgRAAAAAAAAOA/ojkDKCAPIAErAwA5AzAgDyAFIAErAwggASsDOKFEAAAAAAAA4D+ioDkDOCAAIANBAhA2IAIQFwwOCyACQRAQGCIDIAErAxAiBTkDACADIAErAxggASsDKKBEAAAAAAAA4D+iIBArAzggECsDSKEiB0QAAAAAAADAP6KgIgY5AwggECsDMCEIIBArAyAhCSADIAdEAAAAAAAA4D+iIAagIgc5AzggAyAFOQMwIAMgBzkDKCADIAY5AxggAyAFIAkgCKEiBSAFoKAiBTkDICADIAU5AxAgACADIAIgBBBBIAMQFyACQRAQGCIDIAErAxAgECsDICAQKwMwoSIGoCIFOQMAIBArA0ghByAQKwM4IQggASsDKCEJIAErAxghCiADIAU5AzAgAyAGIAWgIgU5AyAgAyAFOQMQIAMgCiAJoEQAAAAAAADgP6IgCCAHoSIGRAAAAAAAABTAokQAAAAAAADAP6KgIgU5AxggAyAFOQMIIAMgBkQAAAAAAADgP6IgBaAiBTkDOCADIAU5AyggACADIAIgBBBBIA8gAysDEDkDICAPIAErAxggASsDKCIFoEQAAAAAAADgP6I5AyggDyABKwMAOQMwIA8gBSABKwMIIAErAzihRAAAAAAAAOA/oqA5AzggACAPQSBqQQIQNiADEBcMDQsgAkEQEBgiAyABKwMAIgY5AwAgASsDKCEFIAErAxghByAQKwNIIQggECsDOCEJIAMgBjkDECADIAcgBaBEAAAAAAAA4D+iIAkgCKEiBUQAAAAAAADAP6KgIgc5AzggAyAGIAUgBaChIgY5AzAgAyAGOQMgIAMgBzkDCCADIAVEAAAAAAAA4D+iIAegIgU5AyggAyAFOQMYIAAgAyACIAQQQSADEBcgAkEQEBgiAyABKwMAIBArAyAgECsDMKGhIgU5AwAgASsDKCEGIAErAxghByAQKwNIIQggECsDOCEJIAMgBTkDECADIAUgCSAIoSIFoSIIOQMwIAMgCDkDICADIAcgBqBEAAAAAAAA4D+iIAVEAAAAAAAAFMCiRAAAAAAAAMA/oqAiBjkDOCADIAY5AwggAyAFRAAAAAAAAOA/oiAGoCIFOQMoIAMgBTkDGCAAIAMgAiAEEEEgDyABKwMQOQMgIA8gASsDGCABKwMoIgWgRAAAAAAAAOA/ojkDKCAPIAMrAzA5AzAgDyAFIAErAwggASsDOKFEAAAAAAAA4D+ioDkDOCAAIA9BIGpBAhA2IAMQFwwMCyACQRAQGCIDIAErAwAgASsDEKBEAAAAAAAA4D+iIBArAyAgECsDMKEiBkQAAAAAAAAiQKJEAAAAAAAAwD+ioSIFOQMAIAErAyghByABKwMYIQggECsDSCEJIBArAzghCiADIAU5AzAgAyAGIAWgIgU5AyAgAyAFOQMQIAMgCCAHoEQAAAAAAADgP6IgCiAJoSIGRAAAAAAAAMA/oqAiBTkDGCADIAU5AwggAyAGRAAAAAAAAOA/oiAFoCIFOQM4IAMgBTkDKCAAIAMgAiAEEEEgAxAXIAJBEBAYIgMgASsDACABKwMQoEQAAAAAAADgP6IgECsDICAQKwMwoSIGRAAAAAAAACJAokQAAAAAAADAP6KhIgU5AwAgECsDSCEHIBArAzghCCABKwMoIQkgASsDGCEKIAMgBTkDMCADIAYgBaAiBTkDICADIAU5AxAgAyAKIAmgRAAAAAAAAOA/oiAIIAehIgZEAAAAAAAAFECiRAAAAAAAAMA/oqEiBTkDGCADIAU5AwggAyAGRAAAAAAAAOA/oiAFoCIFOQM4IAMgBTkDKCAAIAMgAiAEEEEgAxAXIAJBEBAYIgMgASsDACABKwMQoEQAAAAAAADgP6IgECsDICAQKwMwoSIGRAAAAAAAAMA/oqAiBTkDACAQKwNIIQcgECsDOCEIIAErAyghCSABKwMYIQogAyAFOQMwIAMgBiAFoCIFOQMgIAMgBTkDECADIAogCaBEAAAAAAAA4D+iIAggB6EiBkQAAAAAAAAUQKJEAAAAAAAAwD+ioSIFOQMYIAMgBTkDCCADIAZEAAAAAAAA4D+iIAWgIgU5AzggAyAFOQMoIAAgAyACIAQQQSADEBcgAkEQEBgiAyABKwMAIAErAxCgRAAAAAAAAOA/oiAQKwMgIBArAzChIgZEAAAAAAAAwD+ioCIFOQMAIAErAyghByABKwMYIQggECsDSCEJIBArAzghCiADIAU5AzAgAyAGIAWgIgU5AyAgAyAFOQMQIAMgCCAHoEQAAAAAAADgP6IgCiAJoSIGRAAAAAAAAMA/oqAiBTkDGCADIAU5AwggAyAGRAAAAAAAAOA/oiAFoCIFOQM4IAMgBTkDKCAAIAMgAiAEEEEgDyADKwMQOQMgIA8gASsDGCABKwMoIgWgRAAAAAAAAOA/ojkDKCAPIAErAwA5AzAgDyAFIAErAwggASsDOKFEAAAAAAAA4D+ioDkDOCAAIA9BIGoiAkECEDYgDyABKwMAIAErAxAiBqBEAAAAAAAA4D+iIBArAyAgECsDMKFEAAAAAAAAIkCiRAAAAAAAAMA/oqE5AyAgASsDKCEFIAErAxghByAPIAY5AzAgDyAHIAWgRAAAAAAAAOA/ojkDKCAPIAUgASsDCCABKwM4oUQAAAAAAADgP6KgOQM4IAAgAkECEDYgAxAXDAsLIAJBEBAYIgMgASsDACABKwMQoEQAAAAAAADgP6IgECsDICAQKwMwoSIFoSIGOQMAIAErAyghByABKwMYIQggECsDSCEJIBArAzghCiADIAY5AzAgAyAFIAWgIAagIgU5AyAgAyAFOQMQIAMgCCAHoEQAAAAAAADgP6IgCiAJoSIGRAAAAAAAAMA/oqAiBTkDGCADIAU5AwggAyAGRAAAAAAAAOA/oiAFoCIFOQM4IAMgBTkDKCAAIAMgAiAEEEEgAxAXIAJBEBAYIgMgASsDACABKwMQoEQAAAAAAADgP6IgECsDICAQKwMwoSIFoSIGOQMAIBArA0ghByAQKwM4IQggASsDKCEJIAErAxghCiADIAY5AzAgAyAFIAWgIAagIgU5AyAgAyAFOQMQIAMgCiAJoEQAAAAAAADgP6IgCCAHoSIGRAAAAAAAABTAokQAAAAAAADAP6KgIgU5AxggAyAFOQMIIAMgBkQAAAAAAADgP6IgBaAiBTkDOCADIAU5AyggACADIAIgBBBBIA8gAysDEDkDICAPIAErAxggASsDKCIFoEQAAAAAAADgP6I5AyggDyABKwMAOQMwIA8gBSABKwMIIAErAzihRAAAAAAAAOA/oqA5AzggACAPQSBqIgJBAhA2IA8gASsDEDkDICAPIAErAxggASsDKCIFoEQAAAAAAADgP6I5AyggDyADKwMAOQMwIA8gBSABKwMIIAErAzihRAAAAAAAAOA/oqA5AzggACACQQIQNiADEBcMCgsgAkEQEBgiAyABKwMAIgY5AwAgAyAQKwMYIBArAzgiByAQKwNIoUQAAAAAAADgP6IiBaE5AwggECsDMCEIIAMgByAFoTkDGCADIAg5AxAgAyABKwMgOQMgIAErAyghByADIAY5AzAgAyAFIAegIgU5AzggAyAFOQMoIAAgAyACIAQQQSAPIAErAxAgECsDICAQKwMwoUQAAAAAAADQP6IiBaAiBjkDICABKwMoIQcgASsDGCEIIBArA0ghCSAQKwM4IQogDyAFIAagOQMwIA8gCCAHoEQAAAAAAADgP6IgCiAJoSIFRAAAAAAAAMA/oqAiBjkDKCAPIAYgBUQAAAAAAADQP6KhOQM4IAAgD0EgaiICQQIQNiAPIAErAxAgECsDICAQKwMwoUQAAAAAAADQP6IiBaAiBjkDICABKwMoIQcgASsDGCEIIBArA0ghCSAQKwM4IQogDyAFIAagOQMwIA8gCCAHoEQAAAAAAADgP6IgCiAJoSIFRAAAAAAAAMA/oqEiBjkDKCAPIAVEAAAAAAAA0D+iIAagOQM4IAAgAkECEDYgDyABKwMQIBArAyAgECsDMKFEAAAAAAAA0D+iIgWgOQMgIA8gASsDKCAQKwM4IBArA0ihRAAAAAAAAAhAokQAAAAAAADQP6KgIgY5AyggASsDACEHIA8gBjkDOCAPIAcgBaE5AzAgACACQQIQNiADEBcMCQsgAkEQEBgiAyABKwMAIAErAxCgRAAAAAAAAOA/oiIGIBArAyAgECsDMKFEAAAAAAAA4D+iIgWgIgc5AwAgASsDKCEIIAErAxghCSADIAYgBaEiBjkDMCADIAY5AyAgAyAHOQMQIAMgBSAJIAigRAAAAAAAAOA/oiIGoCIHOQM4IAMgBiAFoSIFOQMoIAMgBTkDGCADIAc5AwggACADIAIgBBBBIAMQFyAPIAErAwAgASsDEKBEAAAAAAAA4D+iIgYgECsDICAQKwMwoUQAAAAAAAAIQKJEAAAAAAAA0D+iIgWgIgc5AyAgDyAFIAErAxggASsDKKBEAAAAAAAA4D+iIgigIgk5AyggDyAPKQMoNwNoIA8gBiAFoSIGOQNQIA8gBjkDQCAPIAc5AzAgDyAPKQMgNwNgIA8gCTkDWCAPIAggBaEiBTkDSCAPIAU5AzggACAPQSBqIgJBBRA2IA8gASsDACIGIAErAxCgRAAAAAAAAOA/oiAQKwMgIBArAzChRAAAAAAAAAhAokQAAAAAAADQP6KgOQMgIAErAyghBSABKwMYIQcgDyAGOQMwIA8gByAFoEQAAAAAAADgP6I5AyggDyAFIAErAwggASsDOKFEAAAAAAAA4D+ioDkDOCAAIAJBAhA2IA8gASsDECIFOQMgIA8gASsDGCABKwMoIgagRAAAAAAAAOA/ojkDKCAPIAUgASsDAKBEAAAAAAAA4D+iIBArAyAgECsDMKFEAAAAAAAACECiRAAAAAAAANA/oqE5AzAgDyAGIAErAwggASsDOKFEAAAAAAAA4D+ioDkDOCAAIAJBAhA2DAgLIAJBDGoiA0EQEBgiAiABKwMAIAErAxCgRAAAAAAAAOA/oiIHIBArAyAgECsDMKEiBkQAAAAAAADQP6KgIgU5AwAgASsDKCEJIAErAxghCiAQKwNIIQsgECsDOCEMIAIgBSAGRAAAAAAAAMA/oiIGoSIIOQPwASACIAc5A+ABIAIgBiAHIAahIg0gBqEiBqAiDjkD0AEgAiAGOQPAASACIAY5A7ABIAIgDjkDoAEgAiAGOQOQASACIAY5A4ABIAIgDTkDcCACIAc5A2AgAiAIOQNQIAIgBTkDQCACIAU5AzAgAiAIOQMgIAIgBTkDECACIAogCaBEAAAAAAAA4D+iIAwgC6EiBkQAAAAAAADgP6KgIgU5A/gBIAIgBTkD2AEgAiAFOQPIASACIAU5AwggAiAGRAAAAAAAAMA/oiIGIAWgIgU5A+gBIAIgBTkDuAEgAiAFOQMYIAIgBiAFoCIFOQOoASACIAU5AyggAiAGIAWgIgU5A5gBIAIgBTkDaCACIAU5AzggAiAGIAWgIgU5A4gBIAIgBTkDeCACIAU5A1ggAiAFOQNIIAAgAiADIAQQQSAPIAIrA+ABIgU5AyAgASsDKCEGIAErAxghByAPIAU5AzAgDyAHIAagRAAAAAAAAOA/oiIFOQMoIA8gBSAQKwM4IBArA0ihRAAAAAAAAMA/oqA5AzggACAPQSBqIgNBAhA2IA8gAisD4AEiBTkDICABKwMoIQYgASsDGCEHIBArA0ghCCAQKwM4IQkgDyAFOQMwIA8gByAGoEQAAAAAAADgP6IgCSAIoSIFRAAAAAAAANA/oqAiBjkDKCAPIAVEAAAAAAAAwD+iIAagOQM4IAAgA0ECEDYgDyABKwMQOQMgIA8gASsDGCABKwMoIgWgRAAAAAAAAOA/ojkDKCAPIAErAwA5AzAgDyAFIAErAwggASsDOKFEAAAAAAAA4D+ioDkDOCAAIANBAhA2IAIQFwwHCyACQQRqIgNBEBAYIgIgASsDACABKwMQoEQAAAAAAADgP6IgECsDICAQKwMwoSIHRAAAAAAAAMA/oiIGoCIFOQMAIAErAyghCCABKwMYIQkgECsDSCEKIBArAzghCyACIAUgB0QAAAAAAADQP6KhIgc5A3AgAiAHIAahIgw5A2AgAiAMOQNQIAIgBzkDQCACIAU5AzAgAiAGIAWgIgU5AyAgAiAFOQMQIAIgCSAIoEQAAAAAAADgP6IgCyAKoSIFRAAAAAAAAOA/oqAiBjkDeCACIAY5AwggAiAFRAAAAAAAAMA/oiIHIAagIgY5A2ggAiAGOQMYIAIgBiAFRAAAAAAAANA/oqAiBTkDWCACIAU5AyggAiAFIAegIgU5A0ggAiAFOQM4IAAgAiADIAQQQSAPIAErAwAgASsDEKBEAAAAAAAA4D+iIgU5AyAgASsDKCEGIAErAxghByAPIAU5AzAgDyAHIAagRAAAAAAAAOA/oiIFOQMoIA8gBSAQKwM4IBArA0ihRAAAAAAAAMA/oqA5AzggACAPQSBqIgNBAhA2IA8gASsDACABKwMQoEQAAAAAAADgP6IiBTkDICABKwMoIQYgASsDGCEHIBArA0ghCCAQKwM4IQkgDyAFOQMwIA8gByAGoEQAAAAAAADgP6IgCSAIoSIFRAAAAAAAANA/oqAiBjkDKCAPIAYgBUQAAAAAAADAP6KgOQM4IAAgA0ECEDYgDyABKwMQOQMgIA8gASsDGCABKwMoIgWgRAAAAAAAAOA/ojkDKCAPIAErAwA5AzAgDyAFIAErAwggASsDOKFEAAAAAAAA4D+ioDkDOCAAIANBAhA2IAIQFwwGCyACQQxqIgNBEBAYIgIgASsDACABKwMQoEQAAAAAAADgP6IiByAQKwMgIBArAzChIgZEAAAAAAAA0D+ioCIFOQMAIAErAyghCiABKwMYIQsgECsDSCEMIBArAzghDSACIAUgBkQAAAAAAADAP6IiCKEiCTkD8AEgAiAHOQPgASACIAcgCKEiDiAIoSIGIAigIgg5A9ABIAIgBjkDwAEgAiAGOQOwASACIAg5A6ABIAIgBjkDkAEgAiAGOQOAASACIA45A3AgAiAHOQNgIAIgCTkDUCACIAU5A0AgAiAFOQMwIAIgCTkDICACIAU5AxAgAiALIAqgRAAAAAAAAOA/oiANIAyhIgZEAAAAAAAA4D+ioCIFOQP4ASACIAU5A9gBIAIgBTkDyAEgAiAFOQMIIAIgBSAGRAAAAAAAAMA/oiIFoCIGOQPoASACIAY5A7gBIAIgBjkDGCACIAYgBaAiBjkDqAEgAiAGOQMoIAIgBiAFoCIGOQOYASACIAY5A2ggAiAGOQM4IAIgBiAFoCIFOQOIASACIAU5A3ggAiAFOQNYIAIgBTkDSCAAIAIgAyAEEEEgDyACKQPgATcDICAPIAIpA+gBNwMoIA8gDysDIDkDMCAPIAErAxggASsDKKBEAAAAAAAA4D+iOQM4IAAgD0EgaiIDQQIQNiAPIAErAxA5AyAgDyABKwMYIAErAygiBaBEAAAAAAAA4D+iOQMoIA8gASsDADkDMCAPIAUgASsDCCABKwM4oUQAAAAAAADgP6KgOQM4IAAgA0ECEDYgAhAXDAULIAJBBGoiA0EQEBgiAiABKwMAIAErAxCgRAAAAAAAAOA/oiAQKwMgIBArAzChIgdEAAAAAAAAwD+iIgagIgU5AwAgASsDKCEIIAErAxghCSAQKwNIIQogECsDOCELIAIgBSAHRAAAAAAAANA/oqEiBzkDcCACIAcgBqEiDDkDYCACIAw5A1AgAiAHOQNAIAIgBTkDMCACIAUgBqAiBTkDICACIAU5AxAgAiAJIAigRAAAAAAAAOA/oiALIAqhIgVEAAAAAAAA4D+ioCIGOQN4IAIgBjkDCCACIAYgBUQAAAAAAADAP6IiB6AiBjkDaCACIAY5AxggAiAGIAVEAAAAAAAA0D+ioCIFOQNYIAIgBTkDKCACIAUgB6AiBTkDSCACIAU5AzggACACIAMgBBBBIA8gASsDACABKwMQoEQAAAAAAADgP6IiBTkDICACKwMIIQYgDyAFOQMwIA8gBjkDKCAPIAErAxggASsDKKBEAAAAAAAA4D+iOQM4IAAgD0EgaiIDQQIQNiAPIAErAxA5AyAgDyABKwMYIAErAygiBaBEAAAAAAAA4D+iOQMoIA8gASsDADkDMCAPIAUgASsDCCABKwM4oUQAAAAAAADgP6KgOQM4IAAgA0ECEDYgAhAXDAQLIAJBBWoiA0EQEBgiAiAQKwMQIBArAyAiCCAQKwMwIgehRAAAAAAAAOA/oiIJoSIFOQMAIBArAxghCiAQKwNIIQsgECsDOCEGIAIgBzkDECACIAYgBiALoUQAAAAAAADgP6IiB6E5AxggAiAKIAehOQMIIAIgASsDIDkDICABKwMoIQYgAiAFOQNgIAIgBTkDUCACIAggCaAiCDkDQCACIAY5AzggAiAIOQMwIAIgBjkDKCACIAYgB6AiBjkDWCACIAY5A0ggAiABKwM4Igc5A2ggAiABKwMIIgYgBiAHoUQAAAAAAADgP6KhOQN4IAErAwAhByACIAY5A4gBIAIgBzkDcCACIAU5A4ABIAAgAiADIAQQQSACEBcMAwsgAkEDaiIDQRAQGCICIBArAxAgECsDICAQKwMwIgehRAAAAAAAAOA/oqEiBTkDACAQKwMYIQggECsDSCEJIBArAzghBiACIAc5AxAgAiAGIAYgCaFEAAAAAAAA4D+iIgahOQMYIAIgCCAGoTkDCCACIAErAyA5AyAgASsDKCEHIAIgBTkDQCACIAU5AzAgAiAHIAagIgY5AzggAiAGOQMoIAIgASsDOCIHOQNIIAIgASsDCCIGIAYgB6FEAAAAAAAA4D+ioTkDWCABKwMAIQcgAiAGOQNoIAIgBzkDUCACIAU5A2AgACACIAMgBBBBIAIQFwwCCyACQQNqIgNBEBAYIgIgASsDACIJOQMAIAIgASsDCCAQKwM4IBArA0ihRAAAAAAAAOA/oiIGoSIHOQMIIBArAzAhCCAQKwMgIQUgAiAHOQMYIAIgBSAFIAihRAAAAAAAAOA/oqAiBTkDICACIAU5AxAgAiAQKwMoOQMoIAIgASsDEDkDMCABKwMYIQcgAiABKwMoIgg5A0ggAiAFOQNAIAIgBTkDUCACIAggBqA5A1ggAiAHIAcgCKFEAAAAAAAA4D+ioTkDOCABKwM4IQUgAiAJOQNgIAIgBSAGoDkDaCAAIAIgAyAEEEEgAhAXDAELIAJBBWoiA0EQEBgiAiABKwMAOQMAIAIgASsDCCAQKwM4IBArA0ihRAAAAAAAAOA/oiIGoSIHOQMIIBArAzAhCCAQKwMgIQUgAiAHOQMYIAIgBSAFIAihRAAAAAAAAOA/oiIJoCIFOQMgIAIgBTkDECACIBArAyg5AyggAiABKwMQOQMwIAErAxghByACIAErAygiCDkDSCACIAU5A0AgAiAFOQNQIAIgCCAGoDkDWCACIAcgByAIoUQAAAAAAADgP6KhOQM4IAIgASsDOCIFIAagOQNoIBArAxAhBiACIAU5A3ggAiAGIAmhIgY5A3AgAiAGOQNgIAErAzAhBiACIAU5A4gBIAIgBjkDgAEgACACIAMgBBBBIAIQFwsgEBAXCyAPQZABaiQADwtB0dABQdy4AUHEBUG+KRAAAAtBp9EBQdy4AUHFBUG+KRAAAAtBlI8DQdy4AUHGBUG+KRAAAAtBipYDQdy4AUHHBUG+KRAAAAtB6a8CQdy4AUGyBkG+KRAAAAtB6a8CQdy4AUHJBkG+KRAAAAsJACAAQQEQ7gULWAEBfyMAQSBrIgQkACAEQgA3AxggBEIANwMQIAIEQCABIAIgABEAABoLIAQgAzkDACAEQRBqIgJB74MBIAQQVCABIAIQnwEgABEAABogAhBmIARBIGokAAsgACAAIAEgAiAAQdaHARAjIgAEfyAAEIoCBUEeCxD3Dgu4AQEEfyAAKAIQIgIgAigC9AEgAWs2AvQBA0AgAigCoAIgA0ECdGooAgAiBQRAIAIoAqgCIAVHBEAgBUFQQQAgBSgCAEEDcUECRxtqKAIoIAEQsAMgACgCECECCyADQQFqIQMMAQUDQAJAIAIoApgCIARBAnRqKAIAIgNFDQAgAigCqAIgA0cEQCADQTBBACADKAIAQQNxQQNHG2ooAiggARCwAyAAKAIQIQILIARBAWohBAwBCwsLCwu0BwIHfwJ8IwBBIGsiBCQAIAAoAhAiBygCDCEIIAcgATYCDAJAAkAgAi0AUkEBRgRAIAIoAkghBiMAQdAAayIBJAAgABDzAyIDIAMoAgAiBSgCBCIJNgIEIAMgBSgCDDYCDAJAAkAgCUEESQRAIAMgBSgCCDYCCCADIAUoAtgBNgLYASADIAUoAuwBNgLsASADIAUoAvwBNgL8ASADIAMvAYwCQf7/A3EgBS8BjAJBAXFyOwGMAiACKwNAIQogAisDOCELAkAgAi0AUCIDQeIARwRAIANB9ABHDQEgCiACKwMwIAYQjA+hRAAAAAAAAOA/oqBEAAAAAAAA8L+gIQoMAQsgCiACKwMwIAYQjA+hRAAAAAAAAOC/oqBEAAAAAAAA8L+gIQoLIAEgCjkDECABIAs5AwggASACKAIINgIcIAEgAigCBDYCGCABIAIrAxA5AyggASAAKAIQKAIIQeWbARAjIgI2AkAgACgCECgC3AEhAyABQQA6AEggASADNgJEAkAgAgRAIAItAAANAQsgAUH6kwE2AkALIAYoAgAhAiAGLQAEQQFHDQEgACAAKAIAKALIAhDcASAAIAIoAhgiA0Ht9AAgAxsQRSAAIAIgAUEIahCLDyABLQBIQQFxRQ0CIAEoAkQQFwwCCyABQcoFNgIEIAFB3LwBNgIAQej6BigCAEHWsQQgARAdGhBuAAsgACACIAFBCGoQig8LIAAoAhAiAkEANgL8ASACQQA2AuwBIAJCADcD2AEgABDxAyABQdAAaiQADAELIAIoAkxFDQEgAEEAEOgIIAAgAigCCBBFIAIrA0AhCiAEAnwCQCACLQBQIgFB4gBHBEAgAUH0AEcNASAKIAIrAzBEAAAAAAAA4D+ioAwCCyACKwMgIAogAisDMEQAAAAAAADgv6KgoAwBCyAKIAIrAyBEAAAAAAAA4D+ioAsgAisDEKEiCzkDGCAHLQCNAkECcQRAIAQgCyAKoTkDGAtBACEBA0AgAigCTCABTQRAIAAQ5ggFIAIrAzghCgJAAkAgAUE4bCIDIAIoAkhqIgUtADAiBkHyAEcEQCAGQewARw0BIAQgCiACKwMoRAAAAAAAAOC/oqA5AxAMAgsgBCAKIAIrAyhEAAAAAAAA4D+ioDkDEAwBCyAEIAo5AxALIAQgBCkDGDcDCCAEIAQpAxA3AwAgACAEIAUQlAYgBCAEKwMYIAIoAkggA2orAyihOQMYIAFBAWohAQwBCwsLIAcgCDYCDAsgBEEgaiQAC2gBA38jAEEQayIBJAACQCAAECUEQCAAIAAQISIDEMUCIgINASABIANBAWo2AgBB6PoGKAIAQandAyABEB0aECYACyAAQQAQngEgACgCACECCyAAQgA3AgAgAEIANwIIIAFBEGokACACC1UBAn8CQCAAKAIAIgIEQCABRQ0BIAAoAgQgARA3IgBGBH8gAiABIAAQ+AEFQQELRQ8LQYDRAUGA+wBBwABB5zsQAAALQdPQAUGA+wBBwQBB5zsQAAAL0gECAX8CfCMAQRBrIgMkACACRSACQdoARnIgAkG0AUZyRSACQY4CR3FFBEAgAgRAIAErAwghBCABKwMAIQUCQAJAAkAgAkGOAkcEQCACQbQBRg0CIAJB2gBHDQEgASAEmjkDAAwDCyABIAQ5AwAMAgsgA0HAATYCBCADQZe6ATYCAEHo+gYoAgBB1rEEIAMQHRoQbgALIASaIQULIAEgBTkDCAsgACABKQMANwMAIAAgASkDCDcDCCADQRBqJAAPC0GZigNBl7oBQa4BQZuEARAAAAsNACAAIAEgARA3EK0PC5ICAQh8IAErAwgiAyACKwMAIAErAwAiBaEiBEQtQxzr4jYaP0QtQxzr4jYavyAERAAAAAAAAAAAZhugRAAAAAAAACRAIAQgAisDCCADoSIGEE9ELUMc6+I2Gj+goyIJoiIHRAAAAAAAAOA/oiIIoCEEIAAgAyAIoSIIIAQgCCAGRC1DHOviNho/RC1DHOviNhq/IAZEAAAAAAAAAABmG6AgCaIiA6AiBiADIASgIgkQJBAkECQ5AxggBSADRAAAAAAAAOA/oiIKoCEDIAAgBSAKoSIFIAMgByAFoCIKIAcgA6AiBxAkECQQJDkDECAAIAggBCAGIAkQMhAyEDI5AwggACAFIAMgCiAHEDIQMhAyOQMAC8QBAgR/A3wgAEG8jgsoAgBEAAAAAAAA8D9EAAAAAAAAAAAQUyEHAkAgAEH0jQsoAgBEAAAAAAAA8D9EAAAAAAAAAAAQUyIIRAAAAAAAAAAAYQ0AA0AgAkEERg0BIAEgAkEDdHYiBEEPcSEFQQAhAAJAA0AgAEEIRg0BIABBGGwhAyAAQQFqIQAgBSADQbCABWoiAygCAEcNAAsgBiADKwMIIAggByAEQf8BcSADKAIUERcAoCEGCyACQQFqIQIMAAsACyAGC3oBAX8jAEEQayIEJAAgAwRAIAMgACACIAIQ0gQiAjYCCEGAiwstAAAEQCAEIAI2AgBB6PoGKAIAQdXQAyAEEB0aCyADQQA2AhQgA0EAOgAMIAAgASADEIUGGiADKAIQIARBEGokAA8LQbbeAEH0ugFB/glB4d4AEAAAC9kGAg1/AX4jAEGwAWsiBCQAIARBmAFqIAJBOhDEASAEQgA3A5ABIAFBA2tBAkkhAgJ/QQAgBCgCmAEiDSAEKAKcASIOaiIFLQAAQTpHDQAaIARBgAFqIAVBAWpBOhDEASAEIAQpA4ABIhE3A5ABQQAgEaciByARQiCIpyIKaiIFLQAAQTpHDQAaIARBgAFqIAVBAWpBABDEASAEKAKEASEIIAQoAoABCyELQQAgASACGyEMIARCADcDiAEgBEIANwOAASAAIAFBAnRqQUBrIQICQAJAA0AgAigCACICRQRAQQAhBQwCCyAEQfgAaiACKAIEQToQxAEgBEIANwNwQQAhCUEAIQUgBCgCeCIGIAQoAnwiD2oiEC0AAEE6RgRAIARBqAFqIBBBAWpBABDEASAEIAQpA6gBIhE3A3AgEUIgiKchCSARpyEFCyAEIAQpAng3A2ggBCAEKQKYATcDYCAEQegAaiAEQeAAahDaBEUEQCAEIA02AlwgBCAONgJYIAQgBjYCVCAEIA82AlAgBEGAAWpB6+oEIARB0ABqEIwBDAELAkAgBUUgB0VyDQAgBCAEKQNwNwNIIAQgBCkDkAE3A0AgBEHIAGogBEFAaxDaBA0AIAQgBzYCPCAEIAo2AjggBCAFNgI0IAQgCTYCMCAEQYABakG/6gQgBEEwahCMAQwBCyALBEAgAigCDCgCCCEGIAQgCDYCpAEgBCALNgKgASAGRQ0DIARBqAFqIAZBABDEASAEIAQpA6ABNwMoIAQgBCkCqAE3AyAgBEEoaiAEQSBqENoERQ0BCwJAIAVFIAEgDEZyDQAgACAMIAUgAxC5Aw0AIAQgBTYCFCAEIAk2AhAgBEGAAWpBqLEEIARBEGoQjAEMAQsLAkAgAigCEA0AQQAhBUHxowRBABAxIAIoAhANACAEQYABakGDsgRBABCMAQwBCyAAKAIIQQBKBEAgAigCBCEFIAQgAigCDCgCCDYCCCAEIAU2AgQgBCABQQJ0QdD8BGooAgA2AgBB6PoGKAIAQbbjAyAEEB0aCyACIQULIAMEQCAEQYABahCbAiADEIMBGgsgBEGAAWoQZiAAIAFBAnRqIAU2AlQgBEGwAWokACAFDwtB09ABQYD7AEHlAEHYOxAAAAuEAgEGfyMAQRBrIgQkACMAQRBrIgMkACABIgdBBGohBQJAIAEoAgQiBkUEQCAFIQEMAQsgAigCACEIA0AgBiIBKAIQIgYgCEsEQCABIQUgASgCACIGDQEMAgsgBiAITw0BIAFBBGohBSABKAIEIgYNAAsLIAMgATYCDCAEIAUoAgAiAQR/QQAFQRQQggEhASADIAdBBGo2AgQgASACKAIANgIQIANBAToACCAHIAMoAgwgBSABEO0EIANBADYCACADKAIAIQIgA0EANgIAIAIEQCACEBcLQQELOgAMIAQgATYCCCADQRBqJAAgACAEKAIINgIAIAAgBC0ADDoABCAEQRBqJAALKQEBfwNAIAAiASgCECgCsAEiAA0ACwNAIAEiACgCECgCeCIBDQALIAALCgAgACgCBBCFBAtIAQJ/IABBACAAQQBKGyEDA0AgAiADRgRAIAEEQCABEBcLDwsgASACQQJ0aigCACIABEAgABC4CQsgABAXIAJBAWohAgwACwALEABBIBCCASAAIAEgAhCLAwuiCQINfwR8AkAgAEUgAUVyDQACQAJAIAAoAgBBAEwNACABKAIAQQBMDQAgASgCKCEIIAAoAighCyAAKAIgIAEoAiAgACgCECIKEPkEIRUCQCAAKwMYIhYgASsDGCIXoCAVIASiYwRAIAcgBysDAEQAAAAAAADwP6A5AwAgACsDCCAAKAIgIQIgACAKEPgEIQMgASsDCCABKAIgIQcgASAKEPgEIQEgFUQAAAAAAAAAAGRFDQEgFSAVoiAVRAAAAAAAAPA/IAWhEKkBIAVEAAAAAAAA8L9hGyEFQQAhCCAKQQAgCkEAShshCaIgBqIhBANAIAggCUYNBSADIAhBA3QiAGoiDSAEIAAgAmorAwAgACAHaisDAKGiIAWjIgYgDSsDAKA5AwAgACABaiIAIAArAwAgBqE5AwAgCEEBaiEIDAALAAsgC0UgCEVyDQIgAUEoaiENIApBACAKQQBKGyERRAAAAAAAAPA/IAWhIRUDQCALRQ0EIAsoAgwhDyALKAIQIhBFBEAgCyADIAogD2xBA3RqIhA2AhALIAsrAwAhFiALKAIIIRIgDSEIA0ACQCAIKAIAIgwEQCAMKAIMIQggDCgCECIJRQRAIAwgAyAIIApsQQN0aiIJNgIQCyAAIAFGIAggD0hxIAggD0ZyDQEgDCsDACEXIAwoAgghEyAHIAcrAwhEAAAAAAAA8D+gOQMIIAIgCiAPIAgQmQIiBCAEoiAEIBUQqQEgBUQAAAAAAADwv2EbIQQgFiAXoiAGoiEXQQAhCANAIAggEUYNAiAQIAhBA3QiDmoiFCAXIA4gEmorAwAgDiATaisDAKGiIASjIhggFCsDAKA5AwAgCSAOaiIOIA4rAwAgGKE5AwAgCEEBaiEIDAALAAsgCygCFCELDAILIAxBFGohCAwACwALAAtB6o4DQYm9AUGaAUH8IxAAAAtB1o8DQYm9AUGKAUH8IxAAAAsgACABRgRAQQEgCnQiAUEAIAFBAEobIQ0DQCAJIA1GDQIgACgCJCAJQQJ0aigCACEKIAkhCANAIAEgCEZFBEAgCiAAKAIkIAhBAnRqKAIAIAIgAyAEIAUgBiAHEL8DIAhBAWohCAwBCwsgCUEBaiEJDAALAAsgCyAWIBdkRXJFBEBBACEIQQEgCnQiCUEAIAlBAEobIQkDQCAIIAlGDQIgACgCJCAIQQJ0aigCACABIAIgAyAEIAUgBiAHEL8DIAhBAWohCAwACwALIBYgF2NFIAhyRQRAQQAhCEEBIAp0IglBACAJQQBKGyEJA0AgCCAJRg0CIAEoAiQgCEECdGooAgAgACACIAMgBCAFIAYgBxC/AyAIQQFqIQgMAAsACyALRQRAQQAhCEEBIAp0IglBACAJQQBKGyEJA0AgCCAJRg0CIAAoAiQgCEECdGooAgAgASACIAMgBCAFIAYgBxC/AyAIQQFqIQgMAAsACyAIRQRAQQAhCEEBIAp0IglBACAJQQBKGyEJA0AgCCAJRg0CIAEoAiQgCEECdGooAgAgACACIAMgBCAFIAYgBxC/AyAIQQFqIQgMAAsAC0GUlwNBib0BQewBQfwjEAAACwsQABCmAbdEAADA////30GjC/IWAQd/AkACQAJAAkACQAJAIABBAEggAUEATHIgAkEATHJFBEAgASACIAAgBiAHQQAQ1QkiCQRAIAFBAWohCiAJKAIYIQsgCSgCFCEIQQAhBwNAIAcgCkcEQCAIIAdBAnRqQQA2AgAgB0EBaiEHDAELCwJAIAZBAWsOCAcGAwUDAwMEAAsgBkEQRw0CIAhBBGohCkEAIQdBACEGAkADQAJAIAAgBkYEQANAIAEgB0YNAiAHQQJ0IQIgCCAHQQFqIgdBAnRqIgYgBigCACACIAhqKAIAajYCAAwACwALIAMgBkECdCIMaigCACINIAFPDQIgBCAMaigCACACTw0CIAogDUECdGoiDCAMKAIAQQFqNgIAIAZBAWohBgwBCwsgCSgCHCAFIAkoAiggAGwQIBpBACEHA0AgACAHRgRAA0AgAUEATA0LIAggAUECdGoiAiACQQRrKAIANgIAIAFBAWshAQwACwAFIAQgB0ECdCICaigCACEFIAggAiADaigCAEECdGoiAiACKAIAIgJBAWo2AgAgCyACQQJ0aiAFNgIAIAdBAWohBwwBCwALAAtBlJcDQZq2AUGbBUHt8AAQAAALQe/YAUGatgFByARB7fAAEAAAC0HjkANBmrYBQcQEQe3wABAAAAtBlJcDQZq2AUGpBUHt8AAQAAALIAhBBGohBkEAIQdBACEFA0AgACAFRgRAA0AgASAHRgRAQQAhBwNAIAAgB0YEQANAIAFBAEwNCiAIIAFBAnRqIgIgAkEEaygCADYCACABQQFrIQEMAAsABSAEIAdBAnQiAmooAgAhBSAIIAIgA2ooAgBBAnRqIgIgAigCACICQQFqNgIAIAsgAkECdGogBTYCACAHQQFqIQcMAQsACwAFIAdBAnQhAiAIIAdBAWoiB0ECdGoiBSAFKAIAIAIgCGooAgBqNgIADAELAAsACwJAIAMgBUECdCIKaigCACIMIAFPDQAgBCAKaigCACACTw0AIAYgDEECdGoiCiAKKAIAQQFqNgIAIAVBAWohBQwBCwtBlJcDQZq2AUGMBUHt8AAQAAALIAhBBGohCiAJKAIcIQxBACEHQQAhBgNAIAAgBkYEQANAIAEgB0YEQEEAIQcDQCAAIAdGBEADQCABQQBMDQkgCCABQQJ0aiICIAJBBGsoAgA2AgAgAUEBayEBDAALAAUgDCAIIAMgB0ECdCICaiIGKAIAQQJ0aigCAEECdGogAiAFaigCADYCACACIARqKAIAIQIgCCAGKAIAQQJ0aiIGIAYoAgAiBkEBajYCACALIAZBAnRqIAI2AgAgB0EBaiEHDAELAAsABSAHQQJ0IQIgCCAHQQFqIgdBAnRqIgYgBigCACACIAhqKAIAajYCAAwBCwALAAsCQCADIAZBAnQiDWooAgAiDiABTw0AIAQgDWooAgAgAk8NACAKIA5BAnRqIg0gDSgCAEEBajYCACAGQQFqIQYMAQsLQZSXA0GatgFB/ARB7fAAEAAACyAIQQRqIQogCSgCHCEMQQAhB0EAIQYDQCAAIAZGBEADQCABIAdGBEBBACEHA0AgACAHRgRAA0AgAUEATA0IIAggAUECdGoiAiACQQRrKAIANgIAIAFBAWshAQwACwAFIAwgCCADIAdBAnQiBmooAgBBAnRqIgooAgAiAkEEdGoiDSAFKwMAOQMAIA0gBSsDCDkDCCAEIAZqKAIAIQYgCiACQQFqNgIAIAsgAkECdGogBjYCACAHQQFqIQcgBUEQaiEFDAELAAsABSAHQQJ0IQIgCCAHQQFqIgdBAnRqIgYgBigCACACIAhqKAIAajYCAAwBCwALAAsCQCADIAZBAnQiDWooAgAiDiABTw0AIAQgDWooAgAgAk8NACAKIA5BAnRqIg0gDSgCAEEBajYCACAGQQFqIQYMAQsLQZSXA0GatgFB6QRB7fAAEAAACyAIQQRqIQogCSgCHCEMQQAhB0EAIQYDQCAAIAZGBEADQCABIAdGBEBBACEHA0AgACAHRgRAA0AgAUEATA0HIAggAUECdGoiAiACQQRrKAIANgIAIAFBAWshAQwACwAFIAwgCCADIAdBAnQiBmooAgBBAnRqIgooAgAiAkEDdGogBSAHQQN0aisDADkDACAEIAZqKAIAIQYgCiACQQFqNgIAIAsgAkECdGogBjYCACAHQQFqIQcMAQsACwAFIAdBAnQhAiAIIAdBAWoiB0ECdGoiBiAGKAIAIAIgCGooAgBqNgIADAELAAsACwJAIAMgBkECdCINaigCACIOIAFPDQAgBCANaigCACACTw0AIAogDkECdGoiDSANKAIAQQFqNgIAIAZBAWohBgwBCwtBlJcDQZq2AUHXBEHt8AAQAAALIAhBADYCACAJIAA2AggCf0EAIQNBACEEIAkiASgCBCIAQQAgAEEAShshAiABKAIQIQkgASgCGCEFIAEoAhQhBiAAQQQQPyEHA0AgAiADRwRAIAcgA0ECdGpBfzYCACADQQFqIQMMAQsLQQAhAwJAAkACQAJAAkACQAJAAkACQAJAIAlBAWsOCAABBQIFBQUDBQsgBigCACEAIAEoAhwhCQNAIAQgASgCAE4NBCAGIARBAnRqIQogBiAEQQFqIgRBAnRqIQgDQCAIKAIAIgIgAEoEQAJAIAcgBSAAQQJ0aiIMKAIAIgJBAnRqKAIAIgsgCigCAEgEQCAFIANBAnRqIAI2AgAgCSADQQN0aiAJIABBA3RqKwMAOQMAIAcgDCgCAEECdGogAzYCACADQQFqIQMMAQsgBSALQQJ0aigCACACRw0JIAkgC0EDdGoiAiAJIABBA3RqKwMAIAIrAwCgOQMACyAAQQFqIQAMAQsLIAggAzYCACACIQAMAAsACyAGKAIAIQAgASgCHCEJA0AgBCABKAIATg0DIAYgBEECdGohCiAGIARBAWoiBEECdGohCANAIAgoAgAiAiAASgRAAkAgByAFIABBAnRqIgwoAgAiAkECdGooAgAiCyAKKAIASARAIAUgA0ECdGogAjYCACAJIANBBHRqIgIgCSAAQQR0aiILKwMAOQMAIAIgCysDCDkDCCAHIAwoAgBBAnRqIAM2AgAgA0EBaiEDDAELIAUgC0ECdGooAgAgAkcNCSAJIAtBBHRqIgIgCSAAQQR0aiILKwMAIAIrAwCgOQMAIAIgCysDCCACKwMIoDkDCAsgAEEBaiEADAELCyAIIAM2AgAgAiEADAALAAsgBigCACEAIAEoAhwhCQNAIAQgASgCAE4NAiAGIARBAnRqIQogBiAEQQFqIgRBAnRqIQgDQCAIKAIAIgIgAEoEQAJAIAcgBSAAQQJ0IgJqIgwoAgAiC0ECdGooAgAiDSAKKAIASARAIAUgA0ECdCINaiALNgIAIAkgDWogAiAJaigCADYCACAHIAwoAgBBAnRqIAM2AgAgA0EBaiEDDAELIAsgBSANQQJ0IgxqKAIARw0JIAkgDGoiCyALKAIAIAIgCWooAgBqNgIACyAAQQFqIQAMAQsLIAggAzYCACACIQAMAAsACyAGKAIAIQADQCAEIAEoAgBODQEgBiAEQQJ0aiEIIAYgBEEBaiIEQQJ0aiEJA0AgCSgCACICIABKBEACQCAHIAUgAEECdGoiCygCACICQQJ0aigCACIKIAgoAgBIBEAgBSADQQJ0aiACNgIAIAcgCygCAEECdGogAzYCACADQQFqIQMMAQsgBSAKQQJ0aigCACACRw0JCyAAQQFqIQAMAQsLIAkgAzYCACACIQAMAAsACyABIAM2AgggASEDCyAHEBcgAwwEC0GlwwFBmrYBQawJQc4vEAAAC0GlwwFBmrYBQcIJQc4vEAAAC0GlwwFBmrYBQdgJQc4vEAAAC0GlwwFBmrYBQesJQc4vEAAACwsyAQF/IABBACAAQQBKGyEAA0AgACADRkUEQCACIANBAnRqIAE4AgAgA0EBaiEDDAELCwu6BQILfwF9IwBBEGsiCCQAIAJBACACQQBKGyENAkACQANAIAQgDUYEQAJAIAMgAEECdGpBADYCACMAQSBrIgQkAAJAAkAgAkGAgICABEkEQEEAIAIgAkEEEEYiBRsNASAIQgA3AgggCCACNgIEIAggBTYCACAEQSBqJAAMAgsgBEEENgIEIAQgAjYCAEHo+gYoAgBB2t0DIAQQHRoQJgALIAQgAkECdDYCEEHo+gYoAgBBqd0DIARBEGoQHRoQJgALIAgoAgAiBSAANgIAQf////8HIQBBASECIAgoAgQhDiABKAIIRQ0ADAMLBSADIARBAnRqQX82AgAgBEEBaiEEDAELCwNAIAIgBkwNAkEBIQRBASABIAUgBkECdGooAgAiAEEUbGoiCSgCACIHIAdBAU0bIQcgAyAAQQJ0aigCACIAQQFqIQoDQCAEIAdHBEACQCADIAkoAgQgBEECdGooAgAiC0ECdGoiDCgCAEEATg0AIAwgCjYCACACIA5ODQAgBSACQQJ0aiALNgIAIAJBAWohAgsgBEEBaiEEDAELCyAGQQFqIQYMAAsACwNAIAIgBkwNAUEBIQRBASABIAUgBkECdGooAgAiAEEUbGoiCSgCACIHIAdBAU0bIQcgAyAAQQJ0aigCACEAA0AgBCAHRwRAAkAgAyAEQQJ0IgogCSgCBGooAgAiC0ECdGoiDCgCAEEATg0AIAwCfyAJKAIIIApqKgIAIg+LQwAAAE9dBEAgD6gMAQtBgICAgHgLIABqNgIAIAIgDk4NACAFIAJBAnRqIAs2AgAgAkEBaiECCyAEQQFqIQQMAQsLIAZBAWohBgwACwALIABBCmohAEEAIQQDQCAEIA1HBEAgAyAEQQJ0aiIBKAIAQQBIBEAgASAANgIACyAEQQFqIQQMAQsLIAUQFyAIQRBqJAAL2zECEX8KfCMAQeADayICJAACQCAAEDVBAkgNACAAELIKIQcCQCAAQeqbARAjIgZFDQAgAiACQfgCajYC5AIgAiACQfACajYC4AIgBkHThAEgAkHgAmoQSSIGRQ0AIAIrA/ACIhOZRJXWJugLLhE+Yw0AAkAgBkEBRgRAIAIgEzkD+AIgEyEUDAELIAIrA/gCIhSZRJXWJugLLhE+Yw0BCyAURAAAAAAAAPA/YSATRAAAAAAAAPA/YXENAEGAiwstAAAEQCACIBQ5A9gCIAIgEzkD0AJB6PoGKAIAQY7kBCACQdACahAtCyAAEBohBAN/IAQEfyAEKAIQKAKUASIGIAIrA/ACIAYrAwCiOQMAIAYgAisD+AIgBisDCKI5AwggACAEEBshBAwBBUEBCwshBAsgBCAHaiENIAEoAgAiBEUNAEGAiwstAAAEQCAAEB4hBCACIAEoAgQ2AsQCIAIgBDYCwAJB6PoGKAIAQZXsAyACQcACahAdGiABKAIAIQQLIARBA08EQAJAAkACQAJAAkACQAJAIARBA2sODwABBgYCAgICAgICAgMECAULIABBARDsBiEFDAULIABBABDsBiEFDAQLIAQhAyMAQSBrIgokACAAIgcQNSIJQTAQGCEAIApBCGogBxDdAiAKKwMQIhZEAAAAAAAAFECiIRcgCisDCCIYRAAAAAAAABRAoiEZIAotABggBxAaIQtBAXEhCCAAIQQDQCALBEAgCygCECIBKwMgIRQgASsDKCETIAEoApQBIgErAwghGiABKwMAIRsCfCAIBEAgFgJ/IBNEAAAAAAAA4D+iRAAAAAAAAFJAoiITRAAAAAAAAOA/RAAAAAAAAOC/IBNEAAAAAAAAAABmG6AiE5lEAAAAAAAA4EFjBEAgE6oMAQtBgICAgHgLt6AgGAJ/IBREAAAAAAAA4D+iRAAAAAAAAFJAoiIURAAAAAAAAOA/RAAAAAAAAOC/IBREAAAAAAAAAABmG6AiFJlEAAAAAAAA4EFjBEAgFKoMAQtBgICAgHgLt6BEAAAAAAAAJECiIRVEAAAAAAAAJECiDAELIBkgFKJEAAAAAAAAUkCiIhREAAAAAAAA4D9EAAAAAAAA4L8gFEQAAAAAAAAAAGYboCEVIBcgE6JEAAAAAAAAUkCiIhREAAAAAAAA4D9EAAAAAAAA4L8gFEQAAAAAAAAAAGYboAshFCAEIAs2AhQgBAJ/IBpEAAAAAAAAJECiRAAAAAAAAFJAoiITRAAAAAAAAOA/RAAAAAAAAOC/IBNEAAAAAAAAAABmG6AiE5lEAAAAAAAA4EFjBEAgE6oMAQtBgICAgHgLIgE2AhAgBAJ/IBtEAAAAAAAAJECiRAAAAAAAAFJAoiITRAAAAAAAAOA/RAAAAAAAAOC/IBNEAAAAAAAAAABmG6AiE5lEAAAAAAAA4EFjBEAgE6oMAQtBgICAgHgLIgY2AgwgBAJ/IBSZRAAAAAAAAOBBYwRAIBSqDAELQYCAgIB4CyIMIAFqNgIsIAQCfyAVmUQAAAAAAADgQWMEQCAVqgwBC0GAgICAeAsiDiAGajYCKCAEIAEgDGs2AiQgBCAGIA5rNgIgIARBMGohBCAHIAsQGyELDAELC0EBIAkgCUEBTBtBAWshDEEAIQggACEBAkADQCAIIAxGDQEgCEEBaiIIIQsgAUEwaiIGIQQDQCAJIAtGBEAgBiEBDAILAkACQCABKAIoIAQoAiBIDQAgBCgCKCABKAIgSA0AIAEoAiwgBCgCJEgNACAEKAIsIAEoAiRODQELIAtBAWohCyAEQTBqIQQMAQsLCwJAAkACQAJAAkACQAJAAkACQCADQQdrDggCAwABBwYEBQcLIAcgACAJQSxBARDcAiAHIAAgCUEtQQEQ2wIMBwsgByAAIAlBLUEBENsCIAcgACAJQSxBARDcAgwGCyAHIAAgCUEuQQEQ3AIgByAAIAlBLUEBENsCDAULIAcgACAJQS9BARDbAiAHIAAgCUEsQQEQ3AIMBAsgByAAIAlBLEEAENwCIAcgACAJQS1BABDbAgwDCyAHIAAgCUEtQQAQ2wIgByAAIAlBLEEAENwCDAILIAcgACAJQS9BABDbAiAHIAAgCUEsQQAQ3AIMAQsgByAAIAlBLkEAENwCIAcgACAJQS1BABDbAgtBACELIAlBACAJQQBKGyEBIAAhBANAIAEgC0YNASAEKAIMIQYgBCgCFCgCECgClAEiByAEKAIQt0QAAAAAAABSQKNEAAAAAAAAJECjOQMIIAcgBrdEAAAAAAAAUkCjRAAAAAAAACRAozkDACALQQFqIQsgBEEwaiEEDAALAAsgABAXIApBIGokAAwDCyAAQX8Q7AYhBQwCCyAAEDUiAUEQEBghByACIAFBAXRBBBAYIgM2AtgDIAIgAyABQQJ0ajYC3AMgABAaIQYDQCAGBEAgBigCECIJKAKUASELQQAhBANAIARBAkYEQCAHIAVBBHRqIgQgCSsDIDkDACAEIAkrAyg5AwggBUEBaiEFIAAgBhAbIQYMAwUgAkHYA2ogBEECdGooAgAgBUECdGogCyAEQQN0aisDALY4AgAgBEEBaiEEDAELAAsACwsgAkIANwKkAyACQgA3AqwDQQAhBSACQQA2ArQDIAJCADcCnAMgAkECNgKAAyACQgA3A/gCIAJBADYC8AIgAkHAA2ogABDdAkQcx3Ecx3G8PyETRBzHcRzHcbw/IRQgAi0A0AMEQCACKwPAA0QAAAAAAABSQKMiFCAUoCETIAIrA8gDRAAAAAAAAFJAoyIUIBSgIRQLIAIgBzYCmAMgAiAUOQOQAyACIBM5A4gDIAEgAkHYA2ogAkHwAmoQ5gkgABAaIQYDQCAGBEAgBigCECgClAEhAUEAIQQDQCAEQQJGBEAgBUEBaiEFIAAgBhAbIQYMAwUgASAEQQN0aiACQdgDaiAEQQJ0aigCACAFQQJ0aioCALs5AwAgBEEBaiEEDAELAAsACwsgAxAXIAcQF0EAIQUMAQsgAiABKAIENgIAQavpAyACECcLIAUgDWohDQwBCyAAEDVBAE4EQEHQ2AogABA1NgIAQdTYCgJ/QdDYCigCAEEEarifIhSZRAAAAAAAAOBBYwRAIBSqDAELQYCAgIB4CzYCAEGc2QpB0NgKKAIAQeAAEBg2AgAgABAaIQQgAkHwAmogABDdAiACKwPwAiETAn8gAi0AgANFBEAgAisD+AIhFEEoDAELIAIrA/gCRAAAAAAAAFJAoyEUIBNEAAAAAAAAUkCjIRNBKQshBwJAA0AgBUHQ2AooAgAiBk8NAUGc2QooAgAgBUHgAGxqIgYgBCgCECgClAEiAysDADkDCCAGIAMrAwg5AxAgBkEoaiAEIBMgFCAHER4ARQRAIAZBATYCHCAGIAU2AhggBkIANwNYIAYgBDYCACAFQQFqIQUgACAEEBshBAwBCwtBnNkKKAIAEBdBnNkKQQA2AgAQrgoMAgtBACEFIAJB8AJqQQBB0AAQMxogBgRAQZzZCigCACEHRP///////+9/IRRE////////7/8hFUT////////v/yEWRP///////+9/IRcDQCAFIAZGBEBEmpmZmZmZqT8hEwJAIABBpuQAECMiAEUNACAALQAARQ0AIAAQqAIhEwtBwNgKIBYgFiAXoSAToiIYoCIWOQMAQcjYCiAXIBihIhc5AwBBuNgKIBQgFSAUoSAToiIToSIUOQMAQbDYCiAVIBOgIhM5AwAgAiAXOQOYAyACIBY5A6gDIAIgFzkD+AIgAiATOQOQAyACIBY5A4gDIAIgFDkDsAMgAiATOQOAAyACIBQ5A6ADIAEoAgAhAEEAEO0GIQcCQAJAIABBAkYEQCAHRQ0CIAJB8AJqEK0KQQAhBgNAQZzZCigCACEBQdDYCigCACEHQQAhBANAIAQgB0cEQCABIARB4ABsaiIAIAArAwhEzczMzMzM8D+iOQMIIAAgACsDEETNzMzMzMzwP6I5AxAgBEEBaiEEDAELCyAGQQFqIgYQ7QYNAAtBgIsLLQAARQ0BIAIgBjYCEEHo+gYoAgBB4tADIAJBEGoQHRoMAQsgB0UNASACQfACahCtCkEAIQVBACEEA0AgAkHwAmohCSAFBEAgCRCqCgtB4NgKQv////////93NwMAQdjYCkL/////////9/8ANwMAAkBB0NgKKAIAIgEEQCAJKAIAIQBE////////738hE0T////////v/yEUQQAhCANAIAEgCEYNAkHY2AogEyAAIAhBAnRqKAIAIgYrAwAQMiITOQMAQeDYCiAUIAYrAwAQJCIUOQMAIAhBAWohCAwACwALQYmPA0H7tgFB0AFByJIBEAAAC0Ho2AogACgCACsDCDkDACAAIAFBAnRqQQRrKAIAKwMIIRVB+NgKIBQgE6E5AwBB8NgKIBU5AwBEAAAAAAAAAAAhE0QAAAAAAAAAACEUIwBBEGsiBiQAEKQKEOUJQQFBEBAYIgBB1NgKKAIAQQJ0IgE2AgQgACABQSgQGDYCACAAIQFBpO0KIAkQjgU2AgAjAEEgayIAJABBgNkKQSgQiAVBkNkKQdTYCigCACIIQQF0IgM2AgACQAJAAkBBjNkKKAIAIgVFBEAgA0GAgICABE8NAUEAIAggA0EEEEYiBRsNAkGM2QogBTYCAAsgA0EAIANBAEobIQhBACEDA0AgAyAIRwRAIAUgA0ECdGpBADYCACADQQFqIQMMAQsLQZTZCkEAQQAQkQQ2AgBBmNkKQQBBABCRBDYCAEGU2QooAgBBADYCAEGU2QooAgAiA0GY2QooAgAiBTYCBCAFIAM2AgBBmNkKKAIAQQA2AgRBjNkKKAIAIgUgAzYCACAFQZDZCigCAEECdGpBBGtBmNkKKAIANgIAIABBIGokAAwCCyAAQQQ2AgQgACADNgIAQej6BigCAEHa3QMgABAdGhAmAAsgACAIQQN0NgIQQej6BigCAEGp3QMgAEEQahAdGhAmAAsgCRCOBSEAA0AgARDEBkUEQCABKAIMIQMgASgCACEIA0AgCCADQShsaigCICIFRQRAIAEgA0EBaiIDNgIMDAELCyAGIAUoAhQrAwA5AwAgBiAFKwMYOQMIIAYrAwghEyAGKwMAIRQLAkAgAEUNAAJAIAEQxAYNACAAKwMIIhUgE2MNACATIBViDQEgACsDACAUY0UNAQsCQAJ/IAArAwBB2NgKKwMAoUH42AorAwCjQZDZCigCACIDt6IiFZlEAAAAAAAA4EFjBEAgFaoMAQtBgICAgHgLIgVBACAFQQBKGyIFIANBAWsgAyAFShsiBRDoBiIDDQBBASEIA0AgBSAIaxDoBiIDDQEgBSAIaiAIQQFqIQgQ6AYiA0UNAAsLQZjZCigCACEIAkACQEGU2QooAgAiCiADRwRAIAMgCEYNASADIAAQ6gZFDQELA0AgCCADKAIEIgNHBEAgAyAAEOoGDQELCyADKAIAIQMMAQsDQCADKAIAIgMgCkYNASADIAAQ6gZFDQALCwJAIAVBAEwNACAFQZDZCigCAEEBa04NAEGM2QooAgAgBUECdGoiCCgCACIFBEAgBSAFKAIMQQFrNgIMCyAIIAM2AgAgAyADKAIMQQFqNgIMCyADKAIEIQogAyADEJ4KIAAQowoiDEEAEJEEIgUQ6QYgAyAFEIoFIggEQCABIAMQxQYgASADIAggCCAAEP4EEPoECyAFIAxBARCRBCIDEOkGIAMgChCKBSIFBEAgASADIAUgBSAAEP4EEPoECyAJEI4FIQAMAQsgARDEBkUEQCABKAIAIAEoAgxBKGxqIgMgAygCICIDKAIgNgIgIAEgASgCCEEBazYCCCADKAIAIQggAygCBCIFKAIEIREgAygCCCIKBH8gCkEkQSAgAy0AEBtqBUGk7QoLKAIAIQwgBRCeCiEOIAMoAhQiCkGg7QooAgAiDzYCEEGg7QogD0EBajYCACADKAIIIAMsABAgChDrBiAFKAIIIAUsABAgChDrBiADEJ8KIAEgBRDFBiAFEJ8KIAggDiAMIAwrAwggDisDCGQiAxsiDyAMIA4gAxsQowoiDCADEJEEIgUQ6QYgDCADRSAKEOsGIAoQ/QQgCCAFEIoFIgMEQCABIAgQxQYgASAIIAMgAyAPEP4EEPoECyAFIBEQigUiA0UNASABIAUgAyADIA8Q/gQQ+gQMAQsLQZTZCigCACEAA0AgACgCBCIAQZjZCigCAEcEQCAAKAIIEKIKDAELCyABBEAgASgCABAXCyABEBcgBkEQaiQAIAJBnNkKKAIAIgApAxA3A7gCIAIgACkDCDcDsAIgAiACKQOgAzcDqAIgAiACKQOYAzcDoAIgAkGwAmogAkGgAmoQ2gIhEyACIAApAxA3A5gCIAIgACkDCDcDkAIgAiACKQOAAzcDiAIgAiACKQP4AjcDgAIgAkGQAmogAkGAAmoQ2gIhFCACIAApAxA3A/gBIAIgACkDCDcD8AEgAiACKQOwAzcD6AEgAiACKQOoAzcD4AEgAkHwAWogAkHgAWoQ2gIhFyACIAApAxA3A9gBIAIgACkDCDcD0AEgAiACKQOQAzcDyAEgAiACKQOIAzcDwAFBASEFIAJB0AFqIAJBwAFqENoCIRUgACIGIgkhAQNAQdDYCigCACAFSwRAIAJBnNkKKAIAIAVB4ABsaiIDKQMQNwOYASACIAMpAwg3A5ABIAIgAikDoAM3A4gBIAIgAikDmAM3A4ABIAJBkAFqIAJBgAFqENoCIRYgAiADKQMQNwN4IAIgAykDCDcDcCACIAIpA7ADNwNoIAIgAikDqAM3A2AgAkHwAGogAkHgAGoQ2gIhGCACIAMpAxA3A1ggAiADKQMINwNQIAIgAikDgAM3A0ggAiACKQP4AjcDQCACQdAAaiACQUBrENoCIRkgAiADKQMQNwM4IAIgAykDCDcDMCACIAIpA5ADNwMoIAIgAikDiAM3AyAgAyAAIBMgFmQiCBshACADIAkgFyAYZCIKGyEJIAMgBiAUIBlkIgwbIQYgAyABIAJBMGogAkEgahDaAiIaIBVjIgMbIQEgFiATIAgbIRMgGCAXIAobIRcgGSAUIAwbIRQgGiAVIAMbIRUgBUEBaiEFDAELCyAAQQhqIAIrA5gDIAIrA6ADENkCIAlBCGogAisDqAMgAisDsAMQ2QIgBkEIaiACKwP4AiACKwOAAxDZAiABQQhqIAIrA4gDIAIrA5ADENkCQQAhAUGc2QooAgAhCUHQ2AooAgAhCCAEIQYDQCABIAhHBEAgCSABQeAAbGohAwJAIAZFBEAgAy0AIEEBRw0BC0ECIAMoAlwiACAAQQJNG0EBayEKIAMoAlgiBSsDCCEUIAUrAwAhF0EBIQREAAAAAAAAAAAhE0QAAAAAAAAAACEVRAAAAAAAAAAAIRYDQCAEIApHBEAgFiAFIARBAWoiAEEEdGoiDCsDACIbIBQgBSAEQQR0aiIEKwMIIhihoiAXIBggDCsDCCIZoaIgBCsDACIcIBkgFKGioKCZRAAAAAAAAOA/oiIaoCEWIBogFCAYoCAZoEQAAAAAAAAIQKOiIBWgIRUgGiAXIBygIBugRAAAAAAAAAhAo6IgE6AhEyAAIQQMAQsLIAMgFSAWozkDECADIBMgFqM5AwgLIAFBAWohAQwBCwsgEEEBaiIQEO0GIgAEQCAAIAdJIQFBASEFIAAhB0EBIQRBACASQQFqIAEbIhJFDQFByNgKQcjYCisDACIUQcDYCisDACITIBShRJqZmZmZmak/oiIVoSIUOQMAQcDYCiATIBWgIhM5AwBBuNgKQbjYCisDACIVQbDYCisDACIWIBWhRJqZmZmZmak/oiIXoSIVOQMAQbDYCiAWIBegIhY5AwAgAiAUOQOYAyACIBM5A6gDIAIgFDkD+AIgAiAWOQOQAyACIBM5A4gDIAIgFTkDsAMgAiAWOQOAAyACIBU5A6ADIAtBAWohCwwBCwtBgIsLLQAABEAgAiAQNgKwAUHo+gYoAgAiAEHi0AMgAkGwAWoQHRogAiALNgKgASAAQf3QAyACQaABahAdGgtBgNkKQSgQiAVBjNkKKAIAEBdBjNkKQQA2AgAQ5QkQpAoLQQAhBEGc2QooAgAhAUHQ2AooAgAhBkEBIQkDQCAEIAZGDQEgASAEQeAAbGoiACgCACgCECgClAEiByAAKwMIOQMAIAcgACsDEDkDCCAEQQFqIQQMAAsACxCuCiACKALwAhAXIAkgDWohDQwEBSAHIAVB4ABsaiIEKwMoIRggBCsDCCETIAQrAzAhGSAEKwM4IRogBUEBaiEFIBUgBCsDECIbIAQrA0CgECQhFSAWIBMgGqAQJCEWIBQgGyAZoBAyIRQgFyATIBigEDIhFwwBCwALAAtBiY8DQfu2AUHdAEG2ERAAAAtB8JIDQfu2AUH8AEHt3gAQAAALIAJB4ANqJAAgDQsOACAAQdAAahBCQdAAagsZAQF/IAEQjgshAiAAIAE2AgQgACACNgIACyQAIABBAk8EfyAAQQJqQX5xIgAgAEEBayIAIABBAkYbBUEBCwurAQEEfyMAQRBrIgUkACABEP0KIQIjAEEQayIDJAACQCACQff///8DTQRAAkAgAhCWBQRAIAAgAhDKASAAIQQMAQsgA0EIaiACEMcDQQFqEMYDIAMoAgwaIAAgAygCCCIEEPMBIAAgAygCDBDyASAAIAIQuAELIAQgASACEOkCIANBADYCBCAEIAJBAnRqIANBBGoQ0gEgA0EQaiQADAELEL8BAAsgBUEQaiQACwcAIABBBGoLxgEBBn8jAEEQayIEJAAgABDJAygCACEFAn8gAigCACAAKAIAayIDQf////8HSQRAIANBAXQMAQtBfwsiA0EEIAMbIQMgASgCACEGIAAoAgAhByAFQacERgR/QQAFIAAoAgALIAMQPSIIBEAgBUGnBEcEQCAAENwDGgsgBEEhNgIEIAAgBEEIaiAIIARBBGoQeCIFELwLIAUQdyABIAAoAgAgBiAHa2o2AgAgAiAAKAIAIANBfHFqNgIAIARBEGokAA8LEI4BAAsTACAAIAFBACAAKAIAKAI0EQMACxMAIAAgAUEAIAAoAgAoAiQRAwAL7QIBAn8jAEEQayIKJAAgCiAANgIMAkACQAJAIAMoAgAiCyACRw0AIAAgCSgCYEYEf0ErBSAJKAJkIABHDQFBLQshACADIAtBAWo2AgAgCyAAOgAADAELIAYQIkUgACAFR3JFBEBBACEAIAgoAgAiASAHa0GfAUoNAiAEKAIAIQAgCCABQQRqNgIAIAEgADYCAAwBC0F/IQAgCSAJQegAaiAKQQxqEJYHIAlrQQJ1IgVBF0oNAQJAAkACQCABQQhrDgMAAgABCyABIAVKDQEMAwsgAUEQRyAFQRZIcg0AIAMoAgAiASACRiABIAJrQQJKcg0CIAFBAWstAABBMEcNAkEAIQAgBEEANgIAIAMgAUEBajYCACABIAVBoLYHai0AADoAAAwCCyADIAMoAgAiAEEBajYCACAAIAVBoLYHai0AADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwsAIABBoLELEKUCC+8CAQN/IwBBEGsiCiQAIAogADoADwJAAkACQCADKAIAIgsgAkcNACAAQf8BcSIMIAktABhGBH9BKwUgCS0AGSAMRw0BQS0LIQAgAyALQQFqNgIAIAsgADoAAAwBCyAGECJFIAAgBUdyRQRAQQAhACAIKAIAIgEgB2tBnwFKDQIgBCgCACEAIAggAUEEajYCACABIAA2AgAMAQtBfyEAIAkgCUEaaiAKQQ9qEJkHIAlrIgVBF0oNAQJAAkACQCABQQhrDgMAAgABCyABIAVKDQEMAwsgAUEQRyAFQRZIcg0AIAMoAgAiASACRiABIAJrQQJKcg0CIAFBAWstAABBMEcNAkEAIQAgBEEANgIAIAMgAUEBajYCACABIAVBoLYHai0AADoAAAwCCyADIAMoAgAiAEEBajYCACAAIAVBoLYHai0AADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwsAIABBmLELEKUCCxQAIABB3wBxIAAgAEHhAGtBGkkbCxsBAX8gAUEBEPoLIQIgACABNgIEIAAgAjYCAAskACAAQQtPBH8gAEEIakF4cSIAIABBAWsiACAAQQtGGwVBCgsLJAECfyMAQRBrIgIkACAAIAEQpAUhAyACQRBqJAAgASAAIAMbCxMAIAAgASACIAAoAgAoAjARAwALZwIBfwF+IwBBEGsiAiQAIAACfiABRQRAQgAMAQsgAiABrUIAQfAAIAFnIgFBH3NrELEBIAIpAwhCgICAgICAwACFQZ6AASABa61CMIZ8IQMgAikDAAs3AwAgACADNwMIIAJBEGokAAtSAQJ/QdTNCigCACIBIABBB2pBeHEiAmohAAJAIAJBACAAIAFNG0UEQCAAPwBBEHRNDQEgABAMDQELQeSUC0EwNgIAQX8PC0HUzQogADYCACABC38CAX4DfwJAIABCgICAgBBUBEAgACECDAELA0AgAUEBayIBIAAgAEIKgCICQgp+fadBMHI6AAAgAEL/////nwFWIAIhAA0ACwsgAlBFBEAgAqchAwNAIAFBAWsiASADIANBCm4iBEEKbGtBMHI6AAAgA0EJSyAEIQMNAAsLIAELtQEBA38jAEEgayIDJAACQAJAIAEsAAAiAgRAIAEtAAENAQsgACACELYFIQEMAQsgA0EAQSAQMxogAS0AACICBEADQCADIAJBA3ZBHHFqIgQgBCgCAEEBIAJ0cjYCACABLQABIQIgAUEBaiEBIAINAAsLIAAiAS0AACICRQ0AA0AgAyACQQN2QRxxaigCACACdkEBcQ0BIAEtAAEhAiABQQFqIQEgAg0ACwsgA0EgaiQAIAEgAGsL3AEBAn8CQAJAIAEgACIDc0EDcQRAIAEtAAAhAgwBCyABQQNxBEADQCADIAEtAAAiAjoAACACRQ0DIANBAWohAyABQQFqIgFBA3ENAAsLQYCChAggASgCACICayACckGAgYKEeHFBgIGChHhHDQADQCADIAI2AgAgA0EEaiEDIAEoAgQhAiABQQRqIQEgAkGAgoQIIAJrckGAgYKEeHFBgIGChHhGDQALCyADIAI6AAAgAkH/AXFFDQADQCADIAEtAAEiAjoAASAD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An9BuAIQ8gMiASAAKAIQIgI2AgAgACABNgIQIAIEQCABQRBqIAJBEGpBKBAgGiABQThqIAJBOGpBKBAgGiABIAIoApgBNgKYASABIAIoApwBNgKcASABIAIrA6ABOQOgASABIAIoAogBNgKIASABQeAAaiACQeAAakEoECAaIAEPCyABQoCAgICAgID4PzcDoAEgAUIDNwOYASABC7kBAQN/IAAgAEEwaiICIAAoAgBBA3FBA0YbKAIoKAIQIgEoAuABIAEoAuQBIgFBAWogAUECahD/ASEBIAAgAiAAKAIAQQNxQQNGGygCKCgCECABNgLgASAAIAIgACgCAEEDcUEDRhsoAigoAhAiASABKALkASIDQQFqNgLkASABKALgASADQQJ0aiAANgIAIAAgAiAAKAIAQQNxQQNGGygCKCgCECIAKALgASAAKALkAUECdGpBADYCAAsRACAAQYafAUEZQby4ARCSBQv+AgICfwF+IwBB0ABrIgMkAAJ/QQAgAkUNABogA0HIAGogAkE6EMQBIAAgAUECdGpBQGsoAgAhAgJAIAMoAkwiBCADKAJIai0AAEE6RgRAQQEhACACIQEDQCABBEAgA0FAayABKAIEQToQxAECQCAEBEAgAyADKQJINwMwIAMgAykCQDcDKCADQTBqIANBKGoQkAZFDQELIAEoAgQhACADIAEoAgwoAgg2AiQgAyAANgIgQZCIC0GMMyADQSBqEIwBQQAhAAsgASgCACEBDAELCyAAQQFxRQ0BCyADQgA3A0BBASEAQQAhAQNAIAIEQCADQThqIAIoAgRBOhDEAQJAIAEEQCADIAMpA0A3AxggAyADKQM4NwMQIANBGGogA0EQahCQBg0BCyADIAMpAzhCIIk3AwBBkIgLQbAyIAMQjAFBACEACyADIAMpAzgiBTcDQCAFpyEBIAIoAgAhAgwBCwtB5fQEIABBAXENARoLQZCICxCbAgsgA0HQAGokAAtaAQJ/IAAoApgBIQEDQCABBEAgASgCBCABKALIBBAXIAEoAswEEBcgARAXIQEMAQsLQYiIC0EANgIAQYyIC0EANgIAIABBADYCuAEgAEIANwOYASAAQQA2AhwLMQEBfwJAIAFFDQAgAS0AAEUNACAAKAI8IgJFDQAgAigCcCICRQ0AIAAgASACEQQACwutAQICfwJ8IwBBIGsi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AgALIARBAWohBAwBCwsgBRAXIAcQFyAJQRBqJAAFIAlBCGogBCAHIAMQlwogBEEBayEEDAELCwUgAyAEQQJ0IgYgCigCBGooAgBBAnRqAn8gCigCCCAGaioCACITi0MAAABPXQRAIBOoDAELQYCAgIB4CzYCACAEQQFqIQQMAQsLBSADIARBAnRqQf////8HNgIAIARBAWohBAwBCwsLMAEBf0GA2QoQ5wYiAkEANgIgIAIgAToAECACIAA2AgggAkEANgIUIAJBADYCDCACCw8AIAAgAEGw3AAQIxCsCgsUACAAIAFBryVBFUGb+wBBAhD5BgsJACAAQQQQ/wsLCwAgBCACNgIAQQMLdAECfyMAQSBrIgIkAAJAIACtIAGtfkIgiFAEQCAAIAEQRiIDRQ0BIAJBIGokACADDwsgAiABNgIEIAIgADYCAEHo+gYoAgBB2t0DIAIQHRoQJgALIAIgACABbDYCEEHo+gYoAgBBqd0DIAJBEGoQHRoQJgALOQECfyMAQRBrIgMkACADQQxqIgQgARBLIAIgBBDOAyIBEL4BNgIAIAAgARC9ASAEEEggA0EQaiQACzcBAn8jAEEQayICJAAgAkEMaiIDIAAQSyADEMABQaC2B0G6tgcgARDDAiADEEggAkEQaiQAIAELOQECfyMAQRBrIgMkACADQQxqIgQgARBLIAIgBBDQAyIBEL4BOgAAIAAgARC9ASAEEEggA0EQaiQAC6cBAQR/IwBBEGsiBSQAIAEQNyECIwBBEGsiAyQAAkAgAkH3////B00EQAJAIAIQpQUEQCAAIAIQygEgACEEDAELIANBCGogAhDTA0EBahDSAyADKAIMGiAAIAMoAggiBBDzASAAIAMoAgwQ8gEgACACELgBCyAEIAEgAhCmAiADQQA6AAcgAiAEaiADQQdqEMkBIANBEGokAAwBCxC/AQALIAVBEGokAAsXACAAIAM2AhAgACACNgIMIAAgATYCCAsSACAAIAEgAkL/////DxC0BacLawEBfwJAIABFBEBBmKgLKAIAIgBFDQELIAAgARC1BSAAaiICLQAARQRAQZioC0EANgIAQQAPCyACIAEQ2QMgAmoiAC0AAARAQZioCyAAQQFqNgIAIABBADoAACACDwtBmKgLQQA2AgALIAIL5AoBDX8gASwAACICRQRAIAAPCwJAIAAg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AysDEDkDmAEgBCALOQOQASABQbTdBCAEQZABahAcIAEgAigCABA7IARB4wBB8gAgAygCGCIGQQFGG0HsACAGGzYCgAEgAUG53wQgBEGAAWoQHCABIAIoAgAQOyAEIAMrAyA5A3AgAUH43AQgBEHwAGoQHCABIAIoAgAQOyABQfu+AxAZGiADKAIoIAIgARCWAiABQQoQYgwHCyAEQcMAQeMAIAZBCEYbNgKgASABQazfBCAEQaABahAcIAEgAigCABA7IAFB4N4EQQAQHCABIAIoAgAQOyABQZS/AxAZGiADKAIIIAIgARCWAiABQQoQYgwGCyAEQcMAQeMAIAZBDUYbNgKQAiABQazfBCAEQZACahAcIAEgAigCABA7AkACQAJAIAMoAggOAgABAgsgAUHg3gRBABAcIAEgAigCABA7IAFBlL8DEBkaIAMoAhAgAiABEJYCIAFBChBiDAcLIAFBut4EQQAQHCABIAIoAgAQOyABIAIoAgAQOyADKwMQIQsgBCADKwMYOQOIAiAEIAs5A4ACIAFB4N0EIARBgAJqEBwgASACKAIAEDsgAysDICELIAQgAysDKDkD+AEgBCALOQPwASABQcrdBCAEQfABahAcIAEgAigCABA7IAEgAygCMCADKAI0IAIQ/ggMBgsgAUHN3gRBABAcIAEgAigCABA7IAEgAigCABA7IAMrAxAhCyADKwMYIQwgBCADKwMgOQPgASAEIAw5A9gBIAQgCzkD0AEgAUGS3gQgBEHQAWoQHCABIAIoAgAQOyADKwMoIQsgAysDMCEMIAQgAysDODkDwAEgBCAMOQO4ASAEIAs5A7ABIAFB9t0EIARBsAFqEBwgASACKAIAEDsgASADKAJAIAMoAkQgAhD+CAwFCyABQe3fBEEAEBwgASACKAIAEDsgBCADKwMIOQOgAiABQYndBCAEQaACahAcIAEgAigCABA7IAFBsb8DEBkaIAMoAhAgAiABEJYCIAFBChBiDAQLIAFB1d8EQQAQHCABIAIoAgAQOyABQae/AxAZGiADKAIIIAIgARCWAiABQQoQYgwDCyABQa7eBEEAEBwgASACKAIAEDsgBCADKAIINgKwAiABQaq6BCAEQbACahAcDAILIARBtAI2AhQgBEHsuQE2AhBB6PoGKAIAQdaxBCAEQRBqEB0aEG4ACyAEQeUAQcUA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DAALAAsgAhCTCCIBDQBBpJELQaSRCygCACIDQQFqIgE2AgAgA0H/////A08NAUGgkQsoAgAgAUECdCIBED0iBUUNAiABIANBAnQiBksEQCAFIAZqQQA2AAALQaCRCyAFNgIAQRAQTSEBQaCRCygCACADQQJ0aiABNgIAIAFBuJwKKQMANwIIIAFBsJwKKQMANwIAIAEgAhCkATYCAEEBIQMCQEH0igsoAgANACACQefrABBHDQAgASgCACECQQAhAyAEQbCcCigCADYCECAEIAI2AhRB4+0DIARBEGoQJwsgASADOgAMCyAEQSBqJAAgAQwCC0GRtANB3v0AQc0AQZOzARAAAAsgBCABNgIAQej6BigCAEGp3QMgBBAdGhAmAAshASAAKAIQIAE2AgggAEHMjAsoAgAQPiEBIABBvIwLKAIARAAAAAAAACxARAAAAAAAAPA/EFMhByAAQcCMCygCAEG16QAQUSECIABBxIwLKAIAQe30ABBRIQQgARCtAiEDIAAgASAAEP4CQQJGQQJ0IANBAEdBAXRyIAcgAiAEEP8CIQEgACgCECABNgJ4AkBB0IwLKAIAIgFFDQAgACABED4iAUUNACABLQAARQ0AIAAgASABEK0CQQBHQQF0IAcgAiAEEP8CIQEgACgCECABNgJ8IAAQKygCECIBIAEtAHFBEHI6AHELIABB3IwLKAIAQQBBABBQIQEgACgCECICQf8BIAEgAUH/AU4bOgCgASAAIAIoAggoAgQoAgARAQAL0wIBA38jAEEQayIDJAACQCAARQ0AIAAtAABFDQBBhIsLKAIAIgIEQEHIkQstAAANASADIAI2AgBB3OsEIAMQJ0HIkQtBAToAAAwBC0HMkQsoAgAhAkH4igsoAgAEQCACRQRAQdCRCygCABAXQcyRC0H4igsoAgAiATYCAEHQkQsgARC4DjYCAAtBACEBA0AgAUEDRgRAQdCRCygCACAAELcOIQEMAwUgACABQfTcAWosAAAgABA3QQFqEL0MIgJBAWogACACGyEAIAFBAWohAQwBCwALAAtB0JELKAIAIQECQCACQfyKCygCAEYNACABEBdBACEBQcyRC0H8igsoAgAiAjYCAEHQkQtBADYCACACRQ0AIAItAABFDQBB0JELIAIQuA4iATYCAAsgAUUgAC0AAEEvRnJFBEAgASAAELcO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sIEIaiIDKwMAYgR/IAMgBjkDACABQSBqIgJBo6MDEIgDIAEgACgCECsDoAE5AxAgAkG+hgEgAUEQahCMASACEKcGIAJBKRDPASAAQb69AyACELwBENICIAAoAhAFIAILKAKoASIERQ0AA0AgBCgCACIDRQ0BIARBBGohBCADQdquARBpDQAgA0HFpwEQaQ0AIANBzvcAEGkNACABQSBqIAMQiAMDQCADLQAAIANBAWoiAiEDDQALIAItAAAEQCABQSBqQSgQzwFB5fQEIQMDQCACLQAABEAgASACNgIEIAEgAzYCACABQSBqQboyIAEQjAEDQCACLQAAIAJBAWohAg0AC0G+mAMhAwwBBSABQSBqQSkQzwELCwsgAEG+vQMgAUEgahC8ARDSAgwACwALIAFBIGoQZiABQTBqJAALawECfyMAQRBrIgMkACADQgA3AwggA0IANwMAA0ACQCACLQAAIgRB3ABHBEAgBA0BIAAgASADELwBEGggAxBmIANBEGokAA8LIANB3AAQzwEgAi0AACEECyADIATAEM8BIAJBAWohAgwACwALkgIBBX8gABDnBCEDIAAQISEBAkACQAJAA0AgASICRQ0BIAMgAUEBayIBai0AAEEuRw0ACyAAECEhAQNAIAFBAWshBSABIAJHBEAgAyAFai0AAEEwRw0CCwJAIAAQJQRAIAAtAA8iBEUNBCAAIARBAWs6AA8MAQsgACAAKAIEQQFrNgIECyABIAJHIAUhAQ0ACyAAECEiAUECSQ0AIAEgA2oiAUECayICLQAAQS1HDQAgAUEBay0AAEEwRw0AIAJBMDoAACAAECUEQCAALQAPIgFFDQMgACABQQFrOgAPDwsgACAAKAIEQQFrNgIECw8LQZKJA0GP/QBB5AJB6ioQAAALQZKJA0GP/QBB+gJB6ioQAAALXQEEfyAAQbz6BzYCAEHU7QpBADYCACAAQQRqIgJBBGohBCACKAIAIQEDQCABIARHBEAgASgCECIDBEAgAxCQCRoLIAMQFyABEJcBIQEMAQsLIAIgAigCBBCpBiAACx8AIAEEQCAAIAEoAgAQqQYgACABKAIEEKkGIAEQFwsLVwEBfyADQQA6ABxByAAQggEiBEEAELMGGiABIAQ2AgAgACAEIAMoAgAgAygCBBDqBEHIABCCASIBQQAQswYaIAIgATYCACAA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AkACQCAAKAIQQQFrDggAAQQCBAQEAwQLIARBACAEQQBKGyEMIA0oAhwhBCABKAIcIQMgACgCHCERQQAhAANAIAAgDEYNBCAPIABBAWoiAUECdCIIaiEKIA8gAEECdCIFaigCACEAA0AgACAKKAIATkUEQCAJIBQgAEECdGooAgAiB0ECdGogAjYCACAQIAJBAnRqIAc2AgAgBCACQQN0aiARIABBA3RqKwMAOQMAIABBAWohACACQQFqIQIMAQsLIAUgC2ohCiAIIA5qIQcgBSAOaigCACEAA0AgACAHKAIATkUEQAJAIAkgEyAAQQJ0aigCACIFQQJ0aigCACIGIAooAgBIBEAgECACQQJ0aiAFNgIAIAQgAkEDdGogAyAAQQN0aisDADkDACACQQFqIQIMAQsgBCAGQQN0aiIFIAMgAEEDdGorAwAgBSsDAKA5AwALIABBAWohAAwBCwsgCCALaiACNgIAIAEhAAwACwALIARBACAEQQBKGyEMIA0oAhwhBCABKAIcIQggACgCHCERQQAhAANAIAAgDEYNAyAPIABBAWoiAUECdCIFaiEKIA8gAEECdCIDaigCACEAA0AgACAKKAIATkUEQCAJIBQgAEECdGooAgAiB0ECdGogAjYCACAQIAJBAnRqIAc2AgAgBCACQQR0aiIHIBEgAEEEdGoiBisDADkDACAHIAYrAwg5AwggAEEBaiEAIAJBAWohAgwBCwsgAyALaiEKIAUgDmohByADIA5qKAIAIQADQCAAIAcoAgBORQRAAkAgCSATIABBAnRqKAIAIgNBAnRqKAIAIgYgCigCAEgEQCAQIAJBAnRqIAM2AgAgBCACQQR0aiIDIAggAEEEdGoiBisDADkDACADIAYrAwg5AwggAkEBaiECDAELIAQgBkEEdGoiAyAIIABBBHRqIgYrAwAgAysDAKA5AwAgAyAGKwMIIAMrAwigOQMICyAAQQFqIQAMAQsLIAUgC2ogAjYCACABIQAMAAsACyAEQQAgBEEAShshDCANKAIcIQQgASgCHCEDIAAoAhwhEUEAIQADQCAAIAxGDQIgDyAAQQFqIgFBAnQiCGohCiAPIABBAnQiBWooAgAhAANAIAAgCigCAE5FBEAgCSAUIABBAnQiB2ooAgAiBkECdGogAjYCACAQIAJBAnQiEmogBjYCACAEIBJqIAcgEWooAgA2AgAgAEEBaiEAIAJBAWohAgwBCwsgBSALaiEKIAggDmohByAFIA5qKAIAIQADQCAAIAcoAgBORQRAAkAgCSATIABBAnQiBWooAgAiBkECdGooAgAiEiAKKAIASARAIBAgAkECdCISaiAGNgIAIAQgEmogAyAFaigCADYCACACQQFqIQIMAQsgBCASQQJ0aiIGIAYoAgAgAyAFaigCAGo2AgALIABBAWohAAwBCwsgCCALaiACNgIAIAEhAAwACwALIARBACAEQQBKGyEIQQAhAANAIAAgCEYNASAPIABBAWoiAUECdCIEaiEFIA8gAEECdCIDaigCACEAA0AgACAFKAIATkUEQCAJIBQgAEECdGooAgAiDEECdGogAjYCACAQIAJBAnRqIAw2AgAgAEEBaiEAIAJBAWohAgwBCwsgAyALaiEFIAQgDmohDCADIA5qKAIAIQADQCAAIAwoAgBORQRAIAkgEyAAQQJ0aigCACIDQQJ0aigCACAFKAIASARAIBAgAkECdGogAzYCACACQQFqIQILIABBAWohAAwBCwsgBCALaiACNgIAIAEhAAwACwALIA0gAjYCCAsgCRAXCyANDwtBvdgBQZq2AUHGBUG5sAEQAAALQeDLAUGatgFBxwVBubABEAAAC0G7lQFBmrYBQcgFQbmwARAAAAvMCAIQfwF8AkAgAEUNACAAKAIgRQRAIAAoAhghDSAAKAIUIQcgACgCBCIIIAAoAgAiAiAAKAIIIgEgACgCEEEAEJoCIgkgATYCCCAJKAIYIQ4gCSgCFCEDQX8gCCAIQQBIG0EBaiEKQQAhAQNAIAEgCkYEQEEAIQEgAkEAIAJBAEobIQogA0EEaiEGA0ACQCABIApGBEBBACEBIAhBACAIQQBKGyECA0AgASACRg0CIAFBAnQhBiADIAFBAWoiAUECdGoiBCAEKAIAIAMgBmooAgBqNgIADAALAAsgByABQQFqIgJBAnRqIQQgByABQQJ0aigCACEBA0AgBCgCACABTARAIAIhAQwDBSAGIA0gAUECdGooAgBBAnRqIgsgCygCAEEBajYCACABQQFqIQEMAQsACwALC0EAIQICQAJAAkACQAJAAkAgACgCEEEBaw4IAAEEAgQEBAMECyAJKAIcIQYgACgCHCEEA0AgAiAKRg0FIAcgAkEBaiIAQQJ0aiEL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CyAGKAIQIgAoAmAiAgRAIAYgAkHX2QAQiwQgBigCECEACyAAKAJsIgIEQCAGIAJBvNkAEIsEIAYoAhAhAAsgACgCZCICBH8gBiACQdLZABCLBCAGKAIQBSAACygCaCIABEAgBiAAQcrZABCLBAsgB0EBaiEHCyABIAYQLCEGDAELCyABIAkQGyEJDAELCyAHRQRAQQAhBQwBC0ECQQEgARCwAiAHRhshBQtBACEGQQAhBCABKAIQKAIIIgAoAlgiDQRAIABBADYCVEEBIQQLAkAgDQ0AQYyLCygCAEEBRw0AIAEQkgRFDQBBASEGIAEoAhAoAgwiAEUNACAAQQA6AFELIAEQywIgDQRAIAEoAhAhCUQAAAAAAAAAACEVRAAAAAAAAAAAIRZBACELQQAhD0EAIQ4jAEFAaiIHJAAgASgCECIAKAKQASEQIANB2ABqIgIgACkDEDcDACACIAApAyg3AxggAiAAKQMgNwMQIAIgACkDGDcDCAJAIAAoAggoAlgiDEUNAAJAIAIrAwAgAisDEGINACACKwMIIAIrAxhiDQAgAkL/////////dzcDGCACQv/////////3/wA3AwAgAkL/////////9/8ANwMIIAJC/////////3c3AxALIAwoAgghAANAIAsgDCgCAE8NASAHQgA3AzggB0IANwMwIAdCADcDKCAHQgA3AyACQAJAAkACQAJAAkACQAJAIAAoAgAOEAAAAQECAgMEBwcFBwcHBwYHCyAAIAArAxAiFyAAKwMgIhigIhM5A2ggACAAKwMIIhsgACsDGCIcoCIUOQNgIAAgFyAYoSIXOQNYIAAgGyAcoSIYOQNQIAIgAisDACAYEDIgFBAyOQMAIAIgAisDGCAXECQgExAkOQMYIAIgAisDCCAXEDIgExAyOQMIIAIgAisDECAYECQgFBAkOQMQDAYLIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAULIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAQLIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAMLIABBOBDyAzYC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aisDADkDACACIAYgBEEQaiIEaisDCCABIARqKwMIECQ5AwggAEEBayEEIAANAAsLQQAhBEQAAAAAAADwfyEJQQAhAgNAIAIgA0YEQAJAIAlEAAAAAAAA8H9jIAlEAAAAAAAA8H9kckUNACABIARBBHRqIgArAwghCSAAKwMAIQogARAXDAQLBSABIAJBBHRqIgArAwAgACsDCKIiCiAJIAkgCmQiABshCSACIAQgABshBCACQQFqIQIMAQsLQdXRAUHDtwFB7gVBkMUBEAAAC0GEkQNBw7cBQcQGQYcYEAAACyAGEBdBgIsLLQAABEAgBSAJOQMYIAUgCjkDEEHo+gYoAgBB9vAEIAVBEGoQLQsgByEADAELIAkhCgtBACEDQQEhASAIIQIDQCAAIANGDQIgAigCQCgCECgClAEiBCAKIAIrAwCiOQMAIAQgCSACKwMIojkDCCADQQFqIQMgAkHIAGohAgwACwALQQAhAQsgCBAXIAVBgAFqJAAgAQv4EQIZfwx8IwBBMGsiAyQAQZzZCigCACEFQdDYCigCACECA0AgAiAPRgRAA0AgAkEBayALTQRAQYCLCy0AAEEBSwRAIAMgEjYCJCADIAA2AiBB6PoGKAIAQZfRAyADQSBqEB0aCyADQTBqJAAgEg8LQZzZCigCACALQeAAbGohByALQQFqIg8hCwNAIAIgC00EQCAPIQsMAgUgAyAHKQMQNwMYIAMgBykDCDcDECADQZzZCigCACALQeAAbGoiCCkDEDcDCCADIAgpAwg3AwBBACECQQAhBiMAQbAEayIBJAAgASADKQMYNwOoAyABIAMpAxA3A6ADIAEgBykDMDcDmAMgASAHKQMoNwOQAyABQeADaiABQaADaiABQZADahCLBSABIAMpAxg3A4gDIAEgAykDEDcDgAMgASAHKQNANwP4AiABIAcpAzg3A/ACIAFB0ANqIAFBgANqIAFB8AJqEIsFIAEgAykDCDcD6AIgASADKQMANwPgAiABIAgpAzA3A9gCIAEgCCkDKDcD0AIgAUHAA2ogAUHgAmogAUHQAmoQiwUgASADKQMINwPIAiABIAMpAwA3A8ACIAEgCCkDQDcDuAIgASAIKQM4NwOwAiABQbADaiABQcACaiABQbACahCLBQJAIAErA+ADIAErA7ADZUUNACABKwPAAyABKwPQA2VF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NgIkIAAgACgCODYCFA8LAkACQCAAKAIUIAAoAjhHDQAgACgCECABRw0AIAAoAhhBAkcNASAAIAI2AhgPCyAAQQE6ADYgAEECNgIYIAAgA0EBajYCJAsLswEBA38jAEEQayICJAAgAiABNgIMAkACQAJ/IAAQoQEiBEUEQEEBIQEgABCZAwwBCyAAEOgCQQFrIQEgACgCBAsiAyABRgRAIAAgAUEBIAEgARC4CyAAEEAaDAELIAAQQBogBA0AIAAiASADQQFqEMoBDAELIAAoAgAhASAAIANBAWoQuAELIAEgA0ECdGoiACACQQxqENIBIAJBADYCCCAAQQRqIAJBCGoQ0gEgAkEQaiQACw0AIAAgASACQn8QtAULBwAgAEEMagsXACAAKAIIEGVHBEAgACgCCBDvCwsgAAs2AQF/IwBBEGsiAyQAIAMgAjYCDCADQQhqIANBDGoQiAIgACABEKwHIQAQhwIgA0EQaiQAIAALHAAgACgCCCABQQEQexogASgCECgCgAEgADYCDAsTACAAIAAoAgBBAWsiADYCACAACzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAIgAigCDCABQQJ0ajYCDCACKAIMIAJBEGokAAsbAQF/QQEhASAAEKEBBH8gABDoAkEBawVBAQsLMAEBfyMAQRBrIgIkACACIAAoAgA2AgwgAiACKAIMIAFqNgIMIAIoAgwgAkEQaiQAC9ABAQN/IwBBEGsiBSQAAkAgAkH3////ByABa00EQCAAEEAhBiAFQQRqIgcgAUHz////A0kEfyAFIAFBAXQ2AgwgBSABIAJqNgIEIAcgBUEMahDUAygCABDTA0EBagVB9////wcLENIDIAUoAgQhAiAFKAIIGiAEBEAgAiAGIAQQpgILIAMgBEcEQCACIARqIAQgBmogAyAEaxCmAgsgAUEKRwRAIAYQpgULIAAgAhDzASAAIAUoAggQ8gEgBUEQaiQADAELEL8BAAsgACADELgBC8YBAQR/IwBBEGsiBCQAAkAgARChAUUEQCAAIAEoAgg2AgggACABKQIANwIAIAAQmQMaDAELIAEoAgAhBSABKAIEIQIjAEEQayIDJAACQAJAAkAgAhClBQRAIAAiASACEMoBDAELIAJB9////wdLDQEgA0EIaiACENMDQQFqENIDIAMoAgwaIAAgAygCCCIB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AGutIQMCQCAAQv//////////D4MiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgQbIQAgBK0gA3wMAQsgACAChFAgA0L//wFSckUEQCACQgSGIABCPIiEQoCAgICAgIAEhCEAQv8PDAELIARB/ocBSwRAQgAhAEL/DwwBC0GA+ABBgfgAIANQIgcbIgggBGsiBkHwAEoEQEIAIQBCAAwBCyAFQRBqIAAgAiACQoCAgICAgMAAhCAHGyICQYABIAZrELEBIAUgACACIAYQmwMgBSkDCEIEhiAFKQMAIgJCPIiEIQACQCAEIAhHIAUpAxAgBSkDGIRCAFJxrSACQv//////////D4OEIgJCgYCAgICAgIAIWgRAIABCAXwhAAwBCyACQoCAgICAgICACFINACAAQgGDIAB8IQALIABCgICAgICAgAiFIAAgAEL/////////B1YiBBshACAErQshAiAFQSBqJAAgAUKAgICAgICAgIB/gyACQjSGhCAAhL8LiQIAAkAgAAR/IAFB/wBNDQECQEGUlgsoAgAoAgBFBEAgAUGAf3FBgL8DRg0DDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIPCyABQYBAcUGAwANHIAFBgLADT3FFBEAgACABQT9xQYABcjoAAiAAIAFBDHZB4AFyOgAAIAAgAUEGdkE/cUGAAXI6AAFBAw8LIAFBgIAEa0H//z9NBEAgACABQT9xQYABcjoAAyAAIAFBEnZB8AFyOgAAIAAgAUEGdkE/cUGAAXI6AAIgACABQQx2QT9xQYABcjoAAUEEDwsLQeSUC0EZNgIAQX8FQQELDwsgACABOgAAQQELwgIBBH8jAEHQAWsiBSQAIAUgAjYCzAEgBUGgAWoiAkEAQSgQMxogBSAFKALMATYCyAECQEEAIAEgBUHIAWogBUHQAGogAiADIAQQqgxBAEgEQEF/IQQMAQsgACgCTEEASCAAIAAoAgAiCEFfcTYCAAJ/AkACQCAAKAIwRQRAIABB0AA2AjAgAEEANgIcIABCADcDECAAKAIsIQYgACAFNgIsDAELIAAoAhANAQtBfyAAELkHDQEaCyAAIAEgBUHIAWogBUHQAGogBUGgAWog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IANByABsakF/NgIsIABBfzYCLCACIAVByABsaiAENgIwDwsCQCACIAhByABsaiIFKAIwIgdBAEwNACAFKAI0QQBMDQACQCACIAdByABsaigCBCIFQQBMDQAgBSABIABBEGoQtwQNACAGQX82AiggAiADQcgAbGpBfzYCLCACIARByABsaiIAQX82AiwgAiAAKAIoQcgAbGogBDYCNA8LIAIgBEHIAGxqQn83AyggAiADQcgAbGpBfzYCLCACIAYoAihByABsaiADNgIwDwsgAiAIQcgAbGoiACAENgI0IAAgAzYCMAtDAQJ8IAArAwgiAiABKwMIIgNESK+8mvLXej6gZARAQQEPCyADREivvJry13q+oCACZARAQQAPCyAAKwMAIAErAwBmC1UCAnwBfyABQQAgAUEAShshASAAtyIDIQIDQCABIARGRQRAIARBAWohBCACEMAHIQIMAQsLIAMgAqObIgKZRAAAAAAAAOBBYwRAIAKqDwtBgICAgHgLXgEBfyAAKwMIIAErAwhhBEACQCAAKwMQIAErAxBiDQAgACsDGCABKwMYYg0AIAAoAiAgASgCIEcNACAAKAIkIAEoAiRGIQILIAIPC0H5oQFB5LkBQakGQanvABAAAAvMTwMZfwp8AX4jAEHwAWsiCyQAIAAQsAJBCBAYIRhBqIsLLQAAQQFGBEAQ7AMhGQsgAEHevgEQIyECQaiSC0EANgIAAkAgAkUNACACLQAAIgpFDQADQAJAQaiSCwJ/AkACQAJAAkAgCkH/AXEiA0HtAGsOBwEFBQUFAgMAC0EIIANB4wBGDQMaIANB6QBHBEAgAw0FDAcLQRIMAwtBAQwCC0EEDAELQQILIARyIgQ2AgALIAJBAWoiAi0AACEKDAALAAsgAQRAQdbSBEEAECcLAn8jAEHQAmsiBSQAQQFBHBAYIhYgABA1Igk2AgQgFiAJQcgAEBgiATYCDET////////vfyEkRP///////+//ISAgABAaIQNE////////7/8hIkT////////vfyEjIAEhAgNAIAMEQCADKAIQIgQrAxAhHyAEKwNgISEgBCsDWCEdIAQrAxghHCAEKwNQIRsgAiACKAIAQQFyNgIAIAIgHCAbRAAAAAAAAOA/okQAAAAAAADwPxAkIhugIh45A0AgAiAcIBuhIhw5AzAgAiAfIB0gIaBE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Ai0AAEEEcUUEQANAAkAgAiIAKAIkKAIIIgJFDQAgAigCFCICRQ0AIAItAABBAXFFDQELC0EwEE0iCCAANgIoIAggACsDKDkDCCAAKAIAIQogACECA0ACQCACIgMgCkEEcjYCACACKAIkKAIAIgJFDQAgAigCGCICRQ0AIAIoAgAiCkEBcUUNAQsLIAggAysDODkDECAEIAggACsDMBCTDgsgAUEBaiEBDAELCyANIAQ2AhRBACEBQbTGCkHsyQooAgAQfyEEA0AgDSgCACABSgRAIA0oAgggAUHIAGxqIgItAABBAnFFBEADQAJAIAIiACgCJCgCDCICRQ0AIAIoAhQiAkUNACACLQAAQQFxRQ0BCwtBMBBNIgggADYCKCAIIAArAzA5AwggACgCACEKIAAhAgNAAkAgAiIDIApBAnI2AgAgAigCJCgCBCICRQ0AIAIoAhgiAkUNACACKAIAIgpBAXFFDQELCyAIIAMrA0A5AxAgBCAIIAArAygQkw4LIAFBAWohAQwBCwsgDSAENgIYQQAhAgNAIAIgF0cEQCAPIAJBA3RqIgAoAgQhCCAAKAIAIQNBACEEA0AgAyAERgRAIAJBAWohAgwDBSAIIARBOGxqIgYgDUEYQRQgBi0AABtqKAIAIAYQqAMiDigCHCIANgIoAkAgDigCICAARwRAIA4oAhghAQwBCwJAIAsgAEEBdEEBIAAbIgpB/////wNLBH9BxAAFIA4oAhggCkECdBA9IgENAUEwCxCjATYCsAEgBUG79AMgC0GwAWoQHRoQJgALIAEgDigCICIAQQJ0akEAIAogAGtBAnQQMxogDiAKNgIgIA4gATYCGCAOKAIcIQALIAEgAEECdGogBjYCACAOIABBAWo2AhwgBEEBaiEEDAELAAsACwsgDSgCFBCSDiANKAIYEJIOIA0oAhQQkQ4NACANKAIYEJEODQAgDSgCFCANEJAODQAgDSgCGCANEJAODQAgDSgCFBCODiANKAIYEI4OQQAhAkGokgstAABBBHEEQEHO8QQgBRCDARogC0KKgICAoAE3A6ABIAVBtqEEIAtBoAFqEB0aQfz4AyAFEIMBGgNAIA0oAgQgAkwEQEEAIQFE////////738hHUT////////v/yEgRP///////+//IR9E////////738hGwNAIAEgF0YEQAJAQeP4AyAFEIMBGkEAIQIgC0FAayEAA0AgAiANKAIATg0BIA0oAgggAkHIAGxqIgErAyghJCABKwMwISEgASsDOCEeIAsgASsDQCIcOQNIIAAgHjkDACALICE5AzggCyAkOQMwIAVBqYEEIAtBMGoQLSACQQFqIQIgICAcECQhICAfIB4QJCEfIB0gIRAyIR0gGyAkEDIhGwwACwALBSAYIAFBA3QiAGooAgQiBEEwQQAgBCgCAEEDcUEDRxtqKAIoKAIQKAKAASECIAAgD2oiACgAACEDAkAgACgABCIILQAAQQFGBEAgAisDQCACKwMwoEQAAAAAAADgP6IhHiAIIA0Q6AMhHAwBCyACKwM4IAIrAyigRAAAAAAAAOA/oiEcIAggDRDnAyEeCyALIB45A5gBIAsgHDkDkAEgBUHi/AMgC0GQAWoQLUEBIQJBASADIANBAU0bIQMgICAeECQhICAfIBwQJCEfIB0gHhAyIR0gGyAcEDIhGwJAA0AgAiADRgRAAkAgBEFQQQAgBCgCAEEDcUECRxtqKAIoKAIQKAKAASECIAggA0E4bGpBOGsiAC0AAEUNACACKwNAIAIrAzCgRAAAAAAAAOA/oiEeIAAgDRDoAyEcDAMLBQJAIAggAkE4bGoiAC0AAEEBRgRAIAAgDRDoAyEcDAELIAAgDRDnAyEeCyALIB45A4gBIAsgHDkDgAEgBUH8/AMgC0GAAWoQLSACQQFqIQIgICAeECQhICAfIBwQJCEfIB0gHhAyIR0gGyAcEDIhGwwBCwsgAisDOCACKwMooEQAAAAAAADgP6IhHCAAIA0Q5wMhHgsgCyAeOQN4IAsgHDkDcCAFQZCkBCALQfAAahAtIAFBAWohASAgIB4QJCEgIB8gHBAkIR8gHSAeEDIhHSAbIBwQMiEbDAELCyALICBEAAAAAAAAJECgOQNoIAsgH0QAAAAAAAAkQKA5A2AgCyAdRAAAAAAAACRAoDkDWCALIBtEAAAAAAAAJECgOQNQIAVBipwEIAtB0ABqEC0FIA0oAgwgAkHIAGxqIgArAyghHCAAKwMwIR0gACsDOCEbIAsgACsDQDkDKCALIBs5AyAgCyAdOQMYIAsgHDkDECAFQeKnBCALQRBqEC0gAkEBaiECDAELCwtBACEEQQAhAUEAIQIDQCACIBdHBEAgGCACQQN0IghqKAIEIgkgCUEwayIWIAkoAgBBA3EiAEECRhsoAigoAhAiAysAGCEfIAkoAhAiCisAQCAJIAlBMGoiDiAAQQNGGygCKCgCECIAKwAYIR4gCisAGCEcIAArABAhHSAKKwAQIRsgCCAPaiIAKAIEIRQgH6AhICAKKwA4IAMrABCgIR8gBCAAKAIAIghBA2xBAWoiA0kEQCABEBcgAyIEQRAQGCEBCyABAnwgFC0AAEEBRgRAIBwgHqAhHiAUIA0Q6AMMAQsgFCANEOcDIR4gGyAdoAsiHDkDECABIB45AxggASABKQMQNwMAIAEgASkDGDcDCEEBIQBBASAIIAhBAU0bIgZBOGwhCEECIQoCQANAIAAgBkYEQCAIIBRqQThrIgAtAAAEQCAAIA0Q6AMhHwwDCwUCQCAUIABBOGxqIhAtAABBAUYEQCAQIA0Q6AMhHAwBCyAQIA0Q5wMhHgsgASAKQQR0aiIQIBw5AwAgECAeOQMIIBAgECkDACIlNwMQIBAgJTcDICAQIBApAwgiJTcDGCAQICU3AyggAEEBaiEAIApBA2ohCgwBCwsgACANEOcDISALIAEgCkEEdGoiACAgOQMYIAAgHzkDECAAIAApAxg3AwggACAAKQMQNwMAQYCLCy0AAEECTwRAIAkgDiAJKAIAQQNxQQNGGygCKBAeIQAgCyAJIBYgCSgCAEEDcUECRhsoAigQHjYCBCALIAA2AgAgBUHO5QMgCxAdGgsgCSAJIBYgCSgCAEEDcUECRhsoAiggASADQajGChCdASACQQFqIQIMAQsLIAEQFwtBACECQaiLCy0AAEEBRgRAIBkQ3wILA0AgAiAXRwRAIA8gAkEDdGooAgQQFyACQQFqIQIMAQsLIA8QFyANKAIIKAIkEBcgDSgCDCgCJBAXIA0oAggQFyANKAIMEBcgDSgCECIAKAIQKAIcEBcgACgCEBAXIAAoAhQQFyAAEBcgDSgCFBB5GiANKAIYEHkaIA0QFyAYEBcgC0HwAWokAA8LIAAgARAbIQEMAAsAC18BBH9BpJILKAIAIgBBACAAQQBKG0EBaiEBQfSRCygCACECQQEhAAJAA0AgACABRg0BIAIgAEECdGooAgAoAgQgAEYgAEEBaiEADQALQZSXA0HpvQFBOEHb9AAQAAALC6oBAQJ8IAACfyABKwMAIgKZRAAAAAAAAOBBYwRAIAKqDAELQYCAgIB4CzYCACAAAn8gASsDCCIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAs2AgQgAAJ/IAIgASsDEKAiAplEAAAAAAAA4EFjBEAgAqoMAQtBgICAgHgLNgIIIAACfyADIAErAxigIgKZRAAAAAAAAOBBYwRAIAKqDAELQYCAgIB4CzYCDAtDAQJ/IwBBEGsiACQAQQFBiAoQRiIBRQRAIABBiAo2AgBB6PoGKAIAQandAyAAEB0aECYACyABEKMOIABBEGokACABC1oBAX8gAEUgAUVyRQRAAkAgACgCACABKAIISg0AIAEoAgAgACgCCEoNACAAKAIEIAEoAgxKDQAgASgCBCAAKAIMTCECCyACDwtBoTRBx7wBQe0AQbjcABAAAAvHAQEGfyAABEAgACgCACEEAkAgACgCCCICIAAoAgwiBUcEQCAAKAIEIQMMAQsgACAEIAIgAkEBdEEBIAIbIgVBBBBgIgQ2AgAgACgCDCIGIAAoAggiAiAAKAIEIgNqSQRAIANBAnQhByAEIAUgBiADayIGayIDQQJ0aiAEIAdqIAZBAnQQjwEaIAAgAzYCBAsgACAFNgIMCyAEIAIgA2ogBXBBAnRqIAE2AgAgACACQQFqNgIIDwtBx88BQcX9AEE1Qdj4ABAAAAufAwIGfAN/IARBAXEhDAJAIAJBAkYEQCAAKwMIIgYgACsDGCAGoSIFoCEHIAYgBaEhBiAAKwMAIgUgACsDECAFoSIIoCEKIAUgCKEhCAwBCyAAKwMAIgohCCAAKwMIIgchBgNAIAIgC0YNASAAIAtBBHRqIg0rAwgiBSAHIAUgB2QbIQcgDSsDACIJIAogCSAKZBshCiAFIAYgBSAGYxshBiAJIAggCCAJZBshCCALQQFqIQsMAAsACyAEQQJxIQAgBiAHIAahRAAAAAAAAOA/oqAhBSAIIAogCKFEAAAAAAAA4D+ioCEJAn8gDARAIAEgCTkDACABIAUgBZogABs5AwggASAJIAihIAUgBqEQTyIDRAAAAAAAANA/ojkDEEEYDAELIAcgBaEhByAKIAmhIQggAxBEIQogAxBXIQMCfCAABEAgByADoiIDIAWgIQYgBSADoQwBCyAFIAahmiADoiAFoSEGIAcgA6IgBaELIQcgASAGOQMYIAEgBzkDCCABIAkgCCAKoiIDoTkDACADIAmgIQNBEAsgAWogAzkDAAv/AwEFfyMAQTBrIgMkACABQdiRCygCAEcEQEHYkQsgATYCAEHckQtBADoAAAsgA0IANwMgIANCADcDGANAIAMgAEEBaiIENgIsIAAtAAAiAgRAAkACQAJAAkACfyACQcABTwRAQQEgAkHgAUkNARpBAiACQfABSQ0BGkEDIAJB+AFJDQEaQdyRCy0AAEUEQCADIAEQHjYCEEGcxAQgA0EQahAnQdyRC0EBOgAACyACIANBGGoQqA4hAkF/DAELIAJBJkYNAUEACyEFQQAhACAFQQAgBUEAShshBgNAIAAgBkYNAyAELQAAQcABcUGAAUcNAiADQRhqIALAEJ4BIABBAWohACAELQAAIQIgBEEBaiEEDAALAAsgA0EsahCnDiICRQRAQSYhAgwDCyACQf4ATQ0CIAJB/g9NBEAgA0EYaiACQQZ2QUByEJ4BIAJBP3FBgH9yIQIMAwsgA0EYaiIAIAJBDHZBYHIQngEgACACQQZ2QT9xQYB/chCeASACQT9xQYB/ciECDAILIAMgBDYCLEHckQstAABFBEAgAyABEB42AgQgAyAFQQFqNgIAQa/DBCADECdB3JELQQE6AAALIAJB/wFxIANBGGoQqA4hAgwBCyADIAQ2AiwLIANBGGogAsAQngEgAygCLCEADAELCyADQRhqELIDIANBMGokAAu1AQEEfyMAQSBrIgQkACAEIAI2AhQgBCABNgIQIAQgAyADQTBqIgYgAygCAEEDcSIFQQNGGygCKDYCGCAEIAMgA0EwayIHIAVBAkYbKAIoNgIcIAAgBEEIaiIFQQEgACgCABEDABogBCABNgIUIAQgAjYCECAEIAMgByADKAIAQQNxIgFBAkYbKAIoNgIYIAQgAyAGIAFBA0YbKAIoNgIcIAAgBUEBIAAoAgARAwAaIARBIGokAAszAQF/AkAgBA0AQQAhBCABEIwCIgVBAksNACAAIAUgAkHl9AQQHyEECyABIAQgAxBoIAQLTAAgASAAQdCNCygCAEQAAAAAAAAsQEQAAAAAAADwPxBTOQMAIAEgAEHUjQsoAgBBtekAEFE2AgggASAAQdiNCygCAEHt9AAQUTYCDAs8AQJ/A0ACQCABIANBAnRqKAIAIgRFDQAgAARAIAAgBBBDRQ0BCyADQQFqIQMMAQsLIAIgA0ECdGooAgALMwAgACABKAIQKAKUASIBKwMARAAAAAAAAFJAojkDACAAIAErAwhEAAAAAAAAUkCiOQMIC2UBAn8CQCAARQ0AIAAsAAAiA0UNAAJAIABB+pMBECpFDQAgAEGM3gAQKkUNAEEBIQIgAEHfigEQKkUNACAAQYouECpFDQAgASECIANBMGtBCUsNACAAEIoCQQBHIQILIAIPCyABC5QGAgl/AXwjAEEgayIFJAAgBUEANgIcAkAgAigCBCIGBEAgBigCACIDRQ0BIAYoAghFBEACQAJAQayRCygCACIERQ0AIAQgAxAqDQBBsJELKAIAIQQMAQsgBBAXQayRCyADEGEiAzYCAEGwkQsgA0HwuQpBI0EkQcACEOEDIgQ2AgALIAYgBDYCCAtBACEEQYCLCy0AAARAIAVBHGpBACAGKAIAELcIGyEEC0EAIQMCQCABKAKMASIBRQ0AIAEoAgAiAUUNACACIAQgAREAACEDCwJAAkAgA0UEQCACKAIEIgEoAhghAyABKwMQIQwgAkIANwMgIAJCADcDECACQgA3AwggAiAMRDMzMzMzM/M/ojkDKCACIAxEmpmZmZmZuT+iOQMYIAIgDAJ8IAEoAgAhASACKAIAIQkgA0EBcSEHIANBAnFBAXYhAyMAQSBrIggkAAJAAkACQCABBEAgCUUNASABEL4OIgpBkAZBkAIgAxtBkARBECADGyAHG2ohC0EAIQcDQCAJLQAAIgFFDQMCQCABwEEATgRAIAEhAwwBC0EgIQNBtJELLQAADQBBtJELQQE6AAAgCCABNgIQQYD7AyAIQRBqECcLAkAgCyADQQF0ai4BACIBQX9GBEBBACEBQbWRCy0AAA0BQbWRC0EBOgAAIAggAzYCAEG/0AQgCBAnDAELIAFBAEgNBQsgCUEBaiEJIAEgB2ohBwwACwALQaiYAUHstgFBwAZBjhsQAAALQawXQey2AUHBBkGOGxAAAAsgCisDCCEMIAhBIGokACAHuCAMowwBC0H3kQNB7LYBQboGQYLyABAAAAuiOQMgIARFDQIgBEGlxAE2AgAMAQsgBEUNAQsgBigCACEBQej6BigCACEDIAUoAhwiBARAIAUgBDYCFCAFIAE2AhAgA0Gs8gMgBUEQahAdGgwBCyAFIAE2AgAgA0GN7QQgBRAdGgsgACACKQMgNwMAIAAgAikDKDcDCCAFQSBqJAAPC0HOHUGMugFB1QBB1YgBEAAAC0GymAFBjLoBQdgAQdWIARAAAAvHFwIIfw18IwBBgP0AayIHJAACQAJAAkACQAJAAkAgACABQQJ0aigCACIJKAIQIgYtACwNACAGLQBUDQAgBi0AMSEIIAYtAFkhCgwBCyAGLQAxIghBCHENASAGLQBZIgpBCHENASAIQQVxRQ0AIAggCkYNAgtBAUF/IAlBMEEAIAkoAgBBA3FBA0cbaigCKCIMKAIQIgkrAxgiDiAGKwMYoCIRIA4gBisDQKAiEmYiCxsgCSsDECITIAYrAzigIRcgEyAGKwMQoCEVIAkrA2AhDiAIIAoQ5QUhCCAERAAAAAAAAOA/oiACuKNEAAAAAAAAAEAQJCEPIBEgEqBEAAAAAAAA4D+iIRhEAAAAAAAAAAAhBCAOIBMgDqAiECAXoUQAAAAAAAAIQKIQMiEUIA4gECAVoUQAAAAAAAAIQKIQMiEQQX9BASALGyAIQcEARyAIQSBHcSARIBJichu3IA+iIRZBACEIA0AgAiAIRg0EIAAgAUECdGooAgAhBiAHIBMgDiADoCIOoCIPOQNAIAcgGDkDOCAHIA85AzAgByAPOQMgIAcgEjkDaCAHIBIgFiAEoCIEoSIPOQNYIAcgFzkDYCAHIBcgFCADoCIURAAAAAAAAAhAo6A5A1AgByAPOQNIIAcgETkDCCAHIBEgBKAiDzkDKCAHIA85AxggByAVOQMAIAcgFSAQIAOgIhBEAAAAAAAACECjoDkDEAJAIAYoAhAoAmBFDQAgBkEwQQAgBigCAEEDcUEDRxtqKAIoECshCiAGKAIQKAJgIgkgCUEgQRggCigCECgCdEEBcRtqKwMAIg9EAAAAAAAA4D+iIA4gDCgCECIKKwMQoKA5AzggCisDGCEZIAlBAToAUSAJIBk5A0AgAyAPY0UNACAOIA8gA6GgIQ4LIAFBAWohASAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCAHQQcgBRCdASAIQQFqIQgMAAsACyAIQQJxDQEgBi0AWSIKQQJxDQFBAUF/IAlBMEEAIAkoAgBBA3FBA0cbaigCKCIMKAIQIgkrAxgiDiAGKwMYoCIRIA4gBisDQKAiEmYiCxsgCSsDECITIAYrAzigIRcgEyAGKwMQoCEVIAkrA1ghDiAIIAoQ5QUhCCAERAAAAAAAAOA/oiACuKNEAAAAAAAAAEAQJCEPIBEgEqBEAAAAAAAA4D+iIRhEAAAAAAAAAAAhBCAOIBcgDqAgE6FEAAAAAAAACECiEDIhFCAOIBUgDqAgE6FEAAAAAAAACECiEDIhEEF/QQEgCxsgCEHDAEcgCEEMR3EgESASYnIbtyAPoiEWQQAhCANAIAIgCEYNAyAAIAFBAnRqKAIAIQYgByATIA4gA6AiDqEiDzkDQCAHIBg5AzggByAPOQMwIAcgDzkDICAHIBI5A2ggByASIBYgBKAiBKEiDzkDWCAHIBc5A2AgByAXIBQgA6AiFEQAAAAAAAAIQKOhOQNQIAcgDzkDSCAHIBE5AwggByARIASgIg85AyggByAPOQMYIAcgFTkDACAHIBUgECADoCIQRAAAAAAAAAhAo6E5AxACQCAGKAIQKAJgRQ0AIAZBMEEAIAYoAgBBA3FBA0cbaigCKBArIQogBigCECgCYCIJIAwoAhAiCysDECAOoSAJQSBBGCAKKAIQKAJ0QQFxG2orAwAiD0QAAAAAAADgv6KgOQM4IAsrAxghGSAJQQE6AFEgCSAZOQNAIAMgD2NFDQAgDiAPIAOhoCEOCyABQQFqIQEgBiAGQVBBACAGKAIAQQNxQQJHG2ooAiggB0EHIAUQnQEgCEEBaiEIDAALAAsgCEEEcQ0AIAhBAXEEQCAJQTBBACAJKAIAQQNxQQNHG2ooAigiDCgCECIJKwMYIRQgCSsDUCAGKwNAIRMgBisDGCEVIAggChDlBSEIIAkrAxAiDiAGKwMQoCIRIA4gBisDOKAiEqBEAAAAAAAA4D+iIRhEAAAAAAAAAAAhDiADRAAAAAAAAOA/oiACuKNEAAAAAAAAAEAQJCEPRAAAAAAAAOA/oiIDIAMgFCAToCIToCAUoUQAAAAAAAAIQKIQMiEXIAMgAyAUIBWgIhWgIBShRAAAAAAAAAhAohAyIRAgD0EAQQFBfyARIBJmGyIGayAGIAhBwwBGG7eiIRZBACEIA0AgAiAIRg0DIAAgAUECdGooAgAhBiAHIBQgAyAEoCIDoSIPOQNIIAcgDzkDOCAHIBg5AzAgByAPOQMoIAcgEzkDaCAHIBMgFyAEoCIXRAAAAAAAAAhAo6E5A1ggByASOQNgIAcgEiAWIA6gIg6hIg85A1AgByAPOQNAIAcgETkDACAHIBEgDqAiDzkDICAHIBU5AwggByAVIBAgBKAiEEQAAAAAAAAIQKOhOQMYIAcgDzkDEAJAIAYoAhAoAmBFDQAgBkEwQQAgBigCAEEDcUEDRxtqKAIoECshCiAGKAIQKAJgIgkgDCgCECILKwMYIAOhIAlBGEEgIAooAhAoAnRBAXEbaisDACIPRAAAAAAAAOC/oqA5A0AgCysDECEZIAlBAToAUSAJIBk5AzggBCAPY0UNACADIA8gBKGgIQMLIAFBAWohASAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCAHQQcgBRCdASAIQQFqIQgMAAsAC0GUlwNB97gBQbsJQf+cARAAAAsjAEGA/QBrIggkAEQAAAAAAADwP0QAAAAAAADwvyAAIAFBAnRqKAIAIglBMEEAIAkoAgBBA3FBA0cbaigCKCIMKAIQIgYrAxAiDiAJKAIQIgkrAxCgIhQgDiAJKwM4oCISZhshESAGKwNQRAAAAAAAAOA/oiETIAYrAxgiFyAJKwNAoCEVIBcgCSsDGKAhDyAJLQAxIAktAFkQ5QUhCSADRAAAAAAAAOA/oiACuKNEAAAAAAAAAEAQJCEDAkACQAJAAkACQAJAAkACQAJAAkACQCAJQSVrDg8FAQoKAgoKCgoKBQMKCgUACwJAIAlByQBrDg0GCQkKCgoKCgoKBwgJAAsCQCAJQQ5rDgIFAAQLIBEgAyAGKwNgIBIgDqGhoKIhEAwJCyARIAMgBisDWCAOIBKhoaCiIRAMCAsgESADIAYrA2AgFCAOoaGgoiEQDAcLIBEgAyAGKwNgIBQgDqGhoKIhEAwGCyAJQTlrQQJPDQULIBEgBisDWCAOIBShoSAGKwNgIBIgDqGhoEQAAAAAAAAIQKOiIRAMBAsgESADIAYrA1ggDiAUoaGgoiEQDAMLIBEgBisDWCAOIBShoaIhEAwCCyARIAMgBisDWCAOIBShoSAGKwNgIBIgDqGhoEQAAAAAAADgP6KgoiEQDAELIBEgAyADoCAGKwNYIA4gFKGhIAYrA2AgEiAOoaGgRAAAAAAAAOA/oqCiIRALIBQgEqBEAAAAAAAA4D+iIRkgEyAXIBOgIhggFaFEAAAAAAAACECiEDIhDiATIBggD6FEAAAAAAAACECiEDIhGEEAIQkDQCACIAlHBEAgACABQQJ0aigCACEGIAggFyATIASgIhOgIhY5A0ggCCAWOQM4IAggGTkDMCAIIBY5AyggCCAVOQNoIAggFSAOIASgIg5EAAAAAAAACECjoDkDWCAIIBI5A2AgCCASIBEgA6IgEKAiEKEiFjkDUCAIIBY5A0AgCCAUOQMAIAggFCAQoCIWOQMgIAggDzkDCCAIIA8gGCAEoCIYRAAAAAAAAAhAo6A5AxggCCAWOQMQAkAgBigCECgCYEUNACAGQTBBACAGKAIAQQNxQQNHG2ooAigQKyELIAYoAhAoAmAiCiAKQRhBICALKAIQKAJ0QQFxG2orAwAiFkQAAAAAAADgP6IgEyAMKAIQIgsrAxigoDkDQCALKwMQIRogCkEBOgBRIAogGjkDOCAEIBZjRQ0AIBMgFiAEoaAhEwsgAUEBaiEBIAYgBkFQQQAgBigCAEEDcUECRxtqKAIoIAhBByAFEJ0BIAlBAWohCQwBCwsgCEGA/QBqJAALIAdBgP0AaiQAC58EARF/IAAoAhAiBCgC7AEhByAEKALoASECA0AgAiAHSgRAAkADQCAEKALoASECQQAhCwNAIAQoAuwBIQMCQANAIAIgA0oNASAEKALEASIFIAJBBnQiDGoiBy0AMEUEQCACQQFqIQIMAQsLQQAhDSAHQQA6ADAgAkEBaiEHQdDOCigCACEQIAJBAWtBBnQhDkEAIQoDQCAFIAdBBnQiD2ohESAFIAxqIhIoAgBBAWshBQJAA0AgBSAKTA0BIBIoAgQiAyAKQQJ0aigCACIIKAIQKAL4ASADIApBAWoiCkECdGooAgAiAygCECgC+AFODQYgACAIIAMQxw4NAAJ/IAJBAEwEQEEAIQZBAAwBCyAIIAMQjw4hBiADIAgQjw4LIQkgESgCAEEASgRAIAggAxCMDiAGaiEGIAMgCBCMDiAJaiEJCyABRSAGIAlHIAZBAExyciAGIAlMcQ0ACyAIIAMQkAggECgCECgCxAEiAyAMakEAOgAxIAAoAhAiBCgCxAEiBSAMakEBOgAwIAIgBCgC6AFKBEAgAyAOakEAOgAxIAUgDmpBAToAMAsgBiAJayANaiENIAQoAuwBIAJMDQEgAyAPakEAOgAxIAUgD2pBAToAMAwBCwsgCyANaiELIAchAgwBCwsgC0EASg0ACw8LBSAEKALEASACQQZ0akEBOgAwIAJBAWohAgwBCwtBl5kDQZm4AUGIBUG32gAQAAAL+gEBBH8jAEEQayIEJAADQCAAIgMoAhAiAigCeCIABEAgAi0AcA0BCwsgAigCCCIARQRAQQFBKBAYIQAgAygCECAANgIICwJAIAAoAgQiAkHVqtUqSQRAIAAoAgAgAkEwbCICQTBqIgUQPSIARQ0BIAAgAmpBAEEwEDMaIAMoAhAoAggiAyAANgIAIAMgAygCBCIDQQFqNgIEIAFBEBAYIQIgACADQTBsaiIAIAE2AgQgACACNgIAIABBCGpBAEEoEDMaIARBEGokACAADwtBkbQDQd79AEHNAEGTswEQAAALIAQgBTYCAEHo+gYoAgBBqd0DIAQQHRoQJgAL0AECBX8BfCMAQUBqIgUkACABKAIQIgYrA2AhCQNAIARBBEZFBEAgBSAEQQR0IgdqIgggAiAHaiIHKwMAIAYrAxChOQMAIAggBysDCCAGKwMYoTkDCCAEQQFqIQQMAQsLIAAgBigCCCgCBCgCDCAFIAMQ6AUgASgCECEAQQAhBANAIARBBEZFBEAgAiAEQQR0IgFqIgMgASAFaiIBKwMAIAArAxCgOQMAIAMgASsDCCAAKwMYoDkDCCAEQQFqIQQMAQsLIAAgCTkDYCAFQUBrJAALcQEEfyAAKAIQIgIoAvgBIQMgAiABKAIQKAL4ASIENgL4ASACKAL0AUEGdCICQdDOCigCACIFKAIQKALEAWooAgQgBEECdGogADYCACABKAIQIAM2AvgBIAUoAhAoAsQBIAJqKAIEIANBAnRqIAE2AgALCgAgAEHyDRDIDgtHAQF/A0AgASAAKAIwTkUEQCAAKAI4IAFBAnRqKAIAEJIIIAFBAWohAQwBCwsgACgCPBAXIAAoAjQQugEgACgCOBAXIAAQFwtYAQF/QaCRCygCAAR/A0BBpJELKAIAIAFNBEBBAA8LQaCRCygCACABQQJ0aigCACgCACAAEEdFBEAgAUEBaiEBDAELC0GgkQsoAgAgAUECdGooAgAFQQALC70KARF/IwBBEGsiDyQAQcgAEE0hC0GokQsoAgAhBCAAKAIQKAJ4IQxBASEFA0ACQAJAAkACQCAELQAAIgpB3ABHBEAgCg0BDAQLIARBAWohByAELQABIgpB+wBrQQNJDQEgByEEIApB3ABGDQELAkACQAJAAkAgCkH7AGsOAwIBAAELIAlBAWshCQwCCyAKQfwARyAJcg0BIAVBAWohBUEAIQkMAwsgCUEBaiEJCyAJQQBIDQIMAQsgByEECyAEQQFqIQQMAQsLIAVBBBAYIQcgCyABOgBAIAsgBzYCOCADQQFqIREgAUEBcyESIANBAWshE0GokQsoAgAhBCACQQFzIRRBACEHIAMhAUEAIQJBACEFQQAhCQJAA0BBASEKAkACQAJAAkACQAJAAkACQAJAA0AgCkEBcUUNBiAELQAAIgZBAWtB/wFxQR5NBEBBASEKQaiRCyAEQQFqIgQ2AgAMAQsCQAJAAkAgBkH7AGsOAwECAgALAkACQAJAIAZBPGsOAwEJAgALIAZFDQMgBkHcAEcNCCAELQABIgZB+wBrQQNJDQcgBkE8aw4DBwYHBQsgBUEGcQ0MIAwtAFINByAFQRJyIQUgAyIHIRAMCwsgDC0AUg0GIAVBEHFFDQsCQCAHIBFNDQAgB0EBayICIBBGDQAgAiAHIAItAABBIEYbIQcLIAdBADoAACADEKQBIgJFDQkgBUFvcSEFQaiRCygCACEEDAoLQaiRCyAEQQFqNgIAIAUNCiAELQABRQ0KIAAgEkEAIAMQlAghBiALKAI4IAlBAnRqIAY2AgBBASEKIAlBAWohCUGokQsoAgAhBEEEIQUgBg0BDAoLIAZFIBRxIAVBEHFyDQkgBUEEcUUEQEHIABBNIQ0gCygCOCAJQQJ0aiANNgIAIAlBAWohCQsgAgRAIA0gAjYCPAsgBUEFcUUEQCADIAhqQSA6AAAgBUEBciEFIAhBAWohCAsgBUEBcQRAIAMgCGohBAJAIAhBAkgNACABIARBAWsiAkYNACACIAQgAi0AAEEgRhshBAtBACEIIARBADoAACAAIANBAkEAIAwtAFIbIAwrAxAgDCgCBCAMKAIIEP8CIQEgDUEBOgBAIA0gATYCNCADIQELQQAhAkEAIQpBqJELKAIAIgQtAAAiBkUNAAsgBkH9AEYNBEEAIQUMBwsgBkUNAiAGQSBHDQAgDC0AUkEBRg0AQQEhDgwBCyADIAhqQdwAOgAAIAVBCXIhBSAIQQFqIQgLQaiRCyAEQQFqIgQ2AgALIAVBBHEEQCAELQAAQSBHDQULIAVBGHFFBEAgBSAFQQlyIAQtAABBIEYbIQULAkAgBUEIcQRAIAMgCGohCgJAAkAgDiAELQAAIgZBIEdyDQAgCkEBay0AAEEgRw0AIAwtAFJBAUcNAQsgCiAGOgAAIAhBAWohCAsgCCATaiABIA4bIQEMAQsgBUEQcUUNAAJAIA4gBC0AACIGQSBHckUEQCADIAdGDQEgB0EBay0AAEEgRg0BCyAHIAY6AAAgB0EBaiEHQaiRCygCACEECyAHQQFrIBAgDhshEAtBqJELIARBAWoiBDYCAANAIAQtAAAiBkHAAXFBgAFHDQZBqJELIARBAWoiBDYCACADIAhqIAY6AAAgCEEBaiEIDAALAAtBqJELIARBAWo2AgALIAsgCTYCMAwECyAPIAMQN0EBajYCAEHo+gYoAgBBqd0DIA8QHRoQJgALQaiRCyAEQQFqIgQ2AgAMAQsLIAsQkgggAhAXQQAhCwsgD0EQaiQAIAsLrgQCBn8IfEQAAAAAAAAoQCERIAFBAnRBBGpBEBAYIQUDQCABIARGBEACQCACKAIAQQx2Qf8AcUEBayEIQQAhBEEAIQIDQCACIQYgASAERg0BIBEgACAEQQFqIgdBACABIAdLG0EEdGoiCSsDACAAIARBBHRqIgIrAwAiDKEiDyAJKwMIIAIrAwgiDaEiEBBPoyEKAkACQAJAIAgOBQECAgAAAgsgCkQAAAAAAAAIQKMhCgwBCyAKRAAAAAAAAOA/oiEKCyAMIQ4gDSELIAMEQCAKRAAAAAAAAOA/oiIOIBCiIA2gIQsgDiAPoiAMoCEOCyAFIAZBBHRqIgIgCzkDCCACIA45AwAgAkQAAAAAAADwPyAKoSILIBCiIA2gOQMoIAIgCyAPoiAMoDkDICACIAogEKIgDaA5AxggAiAKIA+iIAygOQMQIAZBA2ohAiAHIQQgA0UNACAFIAJBBHRqIgIgCkQAAAAAAADgv6JEAAAAAAAA8D+gIgsgEKIgDaA5AwggAiALIA+iIAygOQMAIAZBBGohAgwACwALBSARIAAgBEEBaiIHQQAgASAHSxtBBHRqIgYrAwAgACAEQQR0aiIEKwMAoSAGKwMIIAQrAwihEE9EAAAAAAAACECjEDIhESAHIQQMAQsLIAUgBkEEdGoiACAFKQMANwMAIAAgBSkDCDcDCCAAIAUpAxA3AxAgACAFKQMYNwMYIAAgBSkDIDcDICAAIAUpAyg3AyggBQt0AQJ/IAAEQANAIAAoAgQgAUsEQCAAKAIAIAFBAnRqKAIAIgIEQCACQQA2AgQgAigCABAXCyACEBcgAUEBaiEBDAELCyAAQQA2AgQgACgCABAXIABBADYCCCAAQgA3AgAPC0GDzwFBnroBQf8FQfqeARAAAAsIAEEBQQwQGAuBAQEGfyAAKAIQIgMoAuwBIQQgAygC6AEhAQNAIAEgBEpFBEBBACEAIAMoAsQBIAFBBnRqIgUoAgAiAkEAIAJBAEobIQIDQCAAIAJGRQRAIAUoAgQgAEECdGooAgAoAhAiBiAGKAL4Abc5AxAgAEEBaiEADAELCyABQQFqIQEMAQsLC/MCAQN/QQEhBCAAIgIhAwJAAkACQCABDgICAQALAkADQCACIgEtAAAiA0UNASABQQFqIQIgA0H/AEkNACABQQJqIQJBACEEIANB/AFxQcABRg0ACyAAIQNBjJELLQAADQJB1vkDQQAQJ0GMkQtBAToAAAwCCyAAIQMgBA0BCyAAIQEjAEEQayICJAAgAkIANwMIIAJCADcDAANAIAEtAAAiAwRAIANB/wBJBH8gAUEBagUgAS0AAUE/cSADQQZ0ciEDIAFBAmoLIQEgAiADwBCeAQwBCwsgAhCyAyACQRBqJAAhAwtBKCEBIAMhAgJAA0ACQCABwBDtBQJAIAItAAAiAUEoa0ECSSABQdwARnJFBEAgAQ0BQSkQ7QUgACADRwRAIAMQFwtBABDtBRDCBEUNAkGLkQtBADoAAAwEC0HcABDtBSACLQAAIQELIAJBAWohAgwBCwtBgJELQQA2AgALEMIEIQBB/JALQfyQCygCACAAGwupAgEDfyMAQaAIayIFJAACQAJAAkAgAUUNAEEBIQQDQCAEQQFxRQ0CIAEgA0ECdGooAgAiBEUNASADQQFqIQMgBC0AAEEARyEEDAALAAsDQCACKAIAIgQEQCAAIAQQGRogAEHi9AQQGRogAkEEaiECDAELCyABRQ0BC0EAIQQDQCABIARBAnRqKAIAIgJFDQECQCACLQAARQ0AIAIQ4QUiA0UEQCAFIAI2AgBBsu4DIAUQJwwBCyADQcU7EKAEIgIEQANAIAVBIGoiA0EAQYAIEDMaIAAgAyADQQFBgAggAhC7BSIDEJMCGiADQf8HSw0ACyAAQeL0BBAZGiACEN8DDAELIAUgAzYCEEGW7gMgBUEQahAnCyAEQQFqIQQMAAsACyAFQaAIaiQACzYBAX8jAEEgayIDJAAgAyACOQMYIAMgATkDECAAIANBCGpBBCAAKAIAEQMAIANBIGokAEEARwvsAQEHf0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEJwIIAFBAWohAQwBCwsCQCACKAKMAkUNACACKALoASEBA0AgASACKALsAUoNASAAIAFBAnQiBCACKAKMAmooAgAiAkF/ELkOIQMgACACQQEQuQ4hBSAAKAIQKAKMAiAEaiADNgIAIAAQXiEEIAFBBnQiBiAAKAIQIgIoAsQBaiIHIAQoAhAoAsQBIAZqKAIEIAMoAhAoAvgBIgNBAnRqNgIEIAcgBSgCECgC+AEgA2tBAWo2AgAgAUEBaiEBDAALAAsLGAEBfyAAIAEQqgEiARDiAyAAIAEQiQEaC0wBAXwgACABQeHAAyACKwMARAAAAAAAAFJAoxCuAyAAIAFB4cADQciQCysDACACKwMIIgOhIANB2IsLLQAAG0QAAAAAAABSQKMQrgML1gIBCn9BwJALKAIAIQVBvJALKAIAIQYDQCAAKAIQIgMoAsABIARBAnRqKAIAIgEEQCABQTBBACABKAIAQQNxIgdBA0cbaigCKCIIKAIQIgkoArACIQICQCABKAIQIgooAqQBQQBIBEAgAiAFTCACIAZOcQ0BIAFBUEEAIAdBAkcbaigCKCgCECgC9AEgCSgC9AEgCigCrAFqayIDQbiQCygCAE4EQEG0kAsoAgANAgtBuJALIAM2AgBBtJALIAE2AgAMAQsgAiADKAKwAk4NACAIEJ8ICyAEQQFqIQQMAQUCQEG4kAsoAgAhBEEAIQEDQCADKAKgAiABQQJ0aigCACICRSAEQQBMcg0BIAJBUEEAIAIoAgBBA3FBAkcbaigCKCICKAIQKAKwAiADKAKwAkgEQCACEJ8IQbiQCygCACEEIAAoAhAhAwsgAUEBaiEBDAALAAsLCwvWAgEKf0HAkAsoAgAhBUG8kAsoAgAhBgNAIAAoAhAiAygCyAEgBEECdGooAgAiAQRAIAFBUEEAIAEoAgBBA3EiB0ECRxtqKAIoIggoAhAiCSgCsAIhAgJAIAEoAhAiCigCpAFBAEgEQCACIAVMIAIgBk5xDQEgCSgC9AEgAUEwQQAgB0EDRxtqKAIoKAIQKAL0ASAKKAKsAWprIgNBuJALKAIATgRAQbSQCygCAA0CC0G4kAsgAzYCAEG0kAsgATYCAAwBCyACIAMoArACTg0AIAgQoAgLIARBAWohBAwBBQJAQbiQCygCACEEQQAhAQNAIAMoApgCIAFBAnRqKAIAIgJFIARBAExyDQEgAkEwQQAgAigCAEEDcUEDRxtqKAIoIgIoAhAoArACIAMoArACSARAIAIQoAhBuJALKAIAIQQgACgCECEDCyABQQFqIQEMAAsACwsLC8gOAhh/AnwjAEEgayILJABB/////wchAyABQQJOBEAgAhDDBCEDIAAQmAgLQQMgASABQQNMGyEWQej6BigCACEXIAMhCQNAAkAgASAWRg0AQbiLCygCACEEAkAgAUECRwRAIAAQXiAARgRAIAAgASACENsOCyABRQRAIAAQ1Q4LQQQgBCAEQQROGyEEIAAQ0Q4gAhDDBCIDIAlKDQEgABCYCCADIQkMAQsgAyAJSgRAIAAQzQ4LIAkhAwtBACEPIARBACAEQQBKGyEYQQAhEANAAkACQCAPIBhGDQBBgIsLLQAABEAgCyAJNgIQIAsgAzYCDCALIBA2AgggCyAPNgIEIAsgATYCACAXQeezBCALEB0aCyADRSAQQdjOCigCAE5yDQAgACgCECEDAn8gD0EBcSIZRQRAIANB7AFqIQRBASETIAMoAugBIgMgA0HQzgooAgAoAhAoAugBTGoMAQsgA0HoAWohBEF/IRMgAygC7AEiAyADQdDOCigCACgCECgC7AFOawshEiAQQQFqIRAgD0ECcSEUIAQoAgAgE2ohGgNAIBIgGkYNAkEAIQpB3M4KKAIAIgVBBGshCCAAKAIQKALEASIDIBJBBnQiFWooAgQhDANAIAMgFWoiESgCACIHIApMBEBBACEKIAdBACAHQQBKGyENQQAhBgNAAkACfwJAIAYgDUcEQCAMIAZBAnRqKAIAKAIQIgUoAswBDQMgBSgCxAENAyAFAnwgBSgC3AEEQCAFKALYASIOKAIAIgNBMEEAIAMoAgBBA3FBA0cbaigCKCEDQQEhBANAIA4gBEECdGooAgAiCARAIAhBMEEAIAgoAgBBA3FBA0cbaigCKCIIIAMgCCgCECgC+AEgAygCECgC+AFKGyEDIARBAWohBAwBCwsgAygCECsDgAIiG0QAAAAAAAAAAGZFDQMgG0QAAAAAAADwP6AMAQsgBSgC1AFFDQIgBSgC0AEiDigCACIDQVBBACADKAIAQQNxQQJHG2ooAighA0EBIQQDQCAOIARBAnRqKAIAIggEQCAIQVBBACAIKAIAQQNxQQJHG2ooAigiCCADIAgoAhAoAvgBIAMoAhAoAvgBSBshAyAEQQFqIQQMAQsLIAMoAhArA4ACIhtEAAAAAAAAAABkRQ0CIBtEAAAAAAAA8L+gCzkDgAJBAAwCC0EAIQhBAEF8IApBAXEbQQAgFBshDSARKAIEIgYgB0ECdGohBANAAkAgB0EASgRAIAdBAWshByAGIQMDQCADIARPDQIDQCADIARPDQMgAygCACIRKAIQKwOAAiIbRAAAAAAAAAAAYwRAIANBBGohAwwBBUEAIQUDQCADQQRqIgMgBE8NBSADKAIAIQwgBSIKQQFxBEBBASEFIAwoAhAoAugBDQELIAAgESAMEMcODQMgDCgCECIFKwOAAiIcRAAAAAAAAAAAZkUEQCAFKALoAUEARyAKciEFDAELCyAbIBxkIBRFIBsgHGZxckUNAiARIAwQkAggCEEBaiEIDAILAAsACwALAkAgCEUNAEHQzgooAgAoAhAoAsQBIBVqIgNBADoAMSASQQBMDQAgA0EPa0EAOgAACyASIBNqIRIMCAsgBCANaiEEDAALAAtBAQsgCnIhCgsgBkEBaiEGDAALAAUgDCAKQQJ0aigCACIRKAIQIQcCQCAZRQRAIAcoAsABIQ1BACEDQQAhBgNAIA0gBkECdGooAgAiBEUNAiAEKAIQIg4uAZoBQQBKBEAgBSADQQJ0aiAOLQAwIARBMEEAIAQoAgBBA3FBA0cbaigCKCgCECgC+AFBCHRyNgIAIANBAWohAwsgBkEBaiEGDAALAAsgBygCyAEhDUEAIQNBACEGA0AgDSAGQQJ0aigCACIERQ0BIAQoAhAiDi4BmgFBAEoEQCAFIANBAnRqIA4tAFggBEFQQQAgBCgCAEEDcUECRxtqKAIoKAIQKAL4AUEIdHI2AgAgA0EBaiEDCyAGQQFqIQYMAAsAC0QAAAAAAADwvyEbAkACQAJAAkAgAw4DAwABAgsgBSgCALchGwwCCyAFKAIEIAUoAgBqQQJttyEbDAELIAUgA0EEQQgQlAEgA0EBdiEGAnwgA0EBcQRAIAUgBkECdGooAgC3DAELIAUgBkECdGoiB0EEaygCACIGIAUoAgBrIgQgCCADQQJ0aigCACAHKAIAIgNrIgdGBEAgAyAGakECbbcMAQsgBrcgB7eiIAO3IAS3oqAgBCAHarejCyEbIBEoAhAhBwsgByAbOQOAAiAKQQFqIQogACgCECgCxAEhAwwBCwALAAsACyABQQFqIQEgAw0DQQAhAwwCCyAAIBRBAEcQjQggCSACEMMEIgNOBEAgABCYCEEAIBAgA7cgCbdE16NwPQrX7z+iYxshECADIQkLIA9BAWohDwwACwALCyADIAlKBEAgABDNDgsgCUEASgRAIABBABCNCCACEMMEIQkLIAtBIGokACAJC+wBAQR/AkACQCAAKAIQIgMoAqgCIAFHDQAgAygCrAIgAkcNACADKAKwAiECDAELIAMgAjYCrAIgAyABNgKoAgNAIAMoAqACIAZBAnRqKAIAIgQEQCABIARHBEAgBEFQQQAgBCgCAEEDcUECRxtqKAIoIAQgAhCiCCECIAAoAhAhAwsgBkEBaiEGDAEFA0ACQCADKAKYAiAFQQJ0aigCACIERQ0AIAEgBEcEQCAEQTBBACAEKAIAQQNxQQNHG2ooAiggBCACEKIIIQIgACgCECEDCyAFQQFqIQUMAQsLCwsgAyACNgKwAgsgAkEBagufAwEGfwNAAkAgACgCECIFKAKgAiACQQJ0aigCACIERQRAA0AgBSgCmAIgA0ECdGooAgAiAkUNAiABIAJHBEAgAkEwQQAgAigCAEEDcUEDRxtqKAIoIAIQowggACgCECEFCyADQQFqIQMMAAsACyABIARHBEAgBEFQQQAgBCgCAEEDcUECRxtqKAIoIAQQowgLIAJBAWohAgwBCwsCQAJAIAEEQEEBIQIgASABQTBBACABKAIAQQNxIgBBA0cbaigCKCIFKAIQIgQoAqgCRwRAIAFBUEEAIABBAkcbaigCKCIFKAIQIQRBfyECCyAEKALIASEGQQAhAEEAIQMDQAJAIAYgA0ECdGooAgAiB0UEQCAEKALAASEEQQAhAwNAIAQgA0ECdGooAgAiBkUNAiAGIAUgAhDxDiIGQQBIIAAgACAGaiIASkcNBiADQQFqIQMMAAsACyAHIAUgAhDxDiIHQQBIIAAgACAHaiIASkcNAyADQQFqIQMMAQsLIAEoAhAgADYCoAELDwtB+f8DQQAQMRAmAAtB+f8DQQAQMRAmAAvGAQEEfyAAKAIQIgQgAjYCrAIgBCABNgKoAgNAIAQoAqACIAZBAnRqKAIAIgMEQCABIANHBEAgA0FQQQAgAygCAEEDcUECRxtqKAIoIAMgAhCkCCECIAAoAhAhBAsgBkEBaiEGDAEFA0ACQCAEKAKYAiAFQQJ0aigCACIDRQ0AIAEgA0cEQCADQTBBACADKAIAQQNxQQNHG2ooAiggAyACEKQIIQIgACgCECEECyAFQQFqIQUMAQsLCwsgBCACNgKwAiACQQFqC44EAQR/AkACQAJ/QbalBCAAKAIQIgIoAqQBQQBODQAaQbCQCygCACIBQQBIDQIgAiABNgKkAUGwkAsgAUEBajYCAEGskAsoAgAgAUECdGogADYCACAAIABBMGoiAiAAKAIAQQNxIgFBA0YbKAIoIgQoAhAoArABRQRAQaiQC0GokAsoAgAiAUEBajYCAEGkkAsoAgAgAUECdGogBDYCACAAKAIAQQNxIQELIAAgAiAAIABBMGsiBCABQQJGGygCKCIDKAIQKAKwAQR/IAEFQaiQC0GokAsoAgAiAUEBajYCAEGkkAsoAgAgAUECdGogAzYCACAAKAIAQQNxC0EDRhsoAigiAigCECIBQQE2ArABIAEgASgCpAIiA0EBajYCpAIgASgCoAIgA0ECdGogADYCAEEAIQEgAigCECIDKAKgAiADKAKkAkECdGpBADYCAEHe0QMgAigCECICKALIASACKAKkAkECdGpBBGsoAgBFDQAaIAAgBCAAKAIAQQNxQQJGGygCKCIEKAIQIgJBATYCsAEgAiACKAKcAiIDQQFqNgKcAiACKAKYAiADQQJ0aiAANgIAIAQoAhAiACgCmAIgACgCnAJBAnRqQQA2AgAgBCgCECIAKALAASAAKAKcAkECdGpBBGsoAgANAUGB0gMLQQAQMUF/IQELIAEPC0HIxwFBxbgBQTtB4JwBEAAAC6ICAQN/IwBBIGsiAiQAAkBB9IsLKAIAIgFB6IwLKAIAckUNACAAIAFBABB6IgEEQCABQeoXEGkEQCAAQQEQ/g0MAgsgAUH55AAQaQRAIABBABD+DQwCCyABLQAARQ0BIAIgATYCEEGH1gQgAkEQahAxDAELIAAQciEBA0AgAQRAIAEQzgFFBEAgARCmCAsgARBxIQEMAQsLQeiMCygCAEUNACAAEBohAQNAIAFFDQECQCABQeiMCygCAEEAEHoiA0UNACADQeoXEGkEQCAAIAFBARD4BwwBCyADQfnkABBpBEAgACABQQAQ+AcMAQsgAy0AAEUNACACIAEQHjYCBCACIAM2AgBBitwEIAIQMQsgACABEBshAQwACwALIAJBIGokAAu4AQEEfyAAKAIQIgQgBCgC9AEgAmo2AvQBA0AgBCgCmAIgA0ECdGooAgAiBQRAIAEgBUEwQQAgBSgCAEEDcUEDRxtqKAIoIgVHBEAgBSAAIAIQpwggACgCECEECyADQQFqIQMMAQUDQAJAIAQoAqACIAZBAnRqKAIAIgNFDQAgASADQVBBACADKAIAQQNxQQJHG2ooAigiA0cEQCADIAAgAhCnCCAAKAIQIQQLIAZBAWohBgwBCwsLCwvyBAEGfyAAEMUEIQcCQCACBEAgAkFQQQAgAigCAEEDcSIDQQJHG2ooAigoAhAoAvQBIAIoAhAoAqwBIAJBMEEAIANBA0cbaigCKCgCECgC9AFqRg0BCwNAIAAoAhAiBCgCyAEgBUECdGooAgAiAwRAIAMoAgBBA3EhBAJAIAMoAhAoAqQBQQBOBEAgA0FQQQAgBEECRxtqKAIoIgMgAUYNASADIAAgAhCoCCECDAELIAMgA0EwayIIIARBAkYbKAIoEMUEIAdGDQAgAgRAIAMgCCADKAIAQQNxIgRBAkYbKAIoKAIQKAL0ASADQTBBACAEQQNHG2ooAigoAhAoAvQBIAMoAhAoAqwBamsgAkFQQQAgAigCAEEDcSIEQQJHG2ooAigoAhAoAvQBIAJBMEEAIARBA0cbaigCKCgCECgC9AEgAigCECgCrAFqa04NAQsgAyECCyAFQQFqIQUMAQUDQCAEKALAASAGQQJ0aigCACIDRQ0DIAMoAgBBA3EhBQJAIAMoAhAoAqQBQQBOBEAgA0EwQQAgBUEDRxtqKAIoIgMgAUYNASADIAAgAhCoCCECDAELIAMgA0EwaiIEIAVBA0YbKAIoEMUEIAdGDQAgAgRAIANBUEEAIAMoAgBBA3EiBUECRxtqKAIoKAIQKAL0ASADIAQgBUEDRhsoAigoAhAoAvQBIAMoAhAoAqwBamsgAkFQQQAgAigCAEEDcSIFQQJHG2ooAigoAhAoAvQBIAJBMEEAIAVBA0cbaigCKCgCECgC9AEgAigCECgCrAFqa04NAQsgAyECCyAGQQFqIQYgACgCECEEDAALAAsACwALIAILzgEBBX8gACgCBCEFIAAoAgAhAyABIQADQCABQQF0IgJBAmohBCAFIAJBAXIiAksEQCACIAEgAyACQQJ0aigCACgCBCADIAFBAnRqKAIAKAIESBshAAsgBCAFSQRAIAQgACADIARBAnRqKAIAKAIEIAMgAEECdGooAgAoAgRIGyEACyAAIAFHBEAgAyABQQJ0aiIEKAIAIQIgBCADIABBAnRqIgYoAgA2AgAgBiACNgIAIAQoAgAgATYCCCACIAA2AgggACEBIAAgBUkNAQsLC/0CAQl/IAAoAhAiBSABNgKoAkEBIQMDQAJAAkACQAJAIAUoAsABIARBAnRqKAIAIgJFBEADQCAFKALIASAGQQJ0aigCACICRQ0DAkAgAigCECIEKAKkAUEATg0AIAIgAkEwayIHIAIoAgBBA3EiCEECRhsoAigoAhAiCSgCqAINACAJKAL0ASAEKAKsASACQTBBACAIQQNHG2ooAigoAhAoAvQBakcNACACEKUIDQMgAiAHIAIoAgBBA3FBAkYbKAIoIAEQqgggA2ohAyAAKAIQIQULIAZBAWohBgwACwALIAIoAhAiBygCpAFBAE4NAyACIAJBMGoiCCACKAIAQQNxIglBA0YbKAIoKAIQIgooAqgCDQMgAkFQQQAgCUECRxtqKAIoKAIQKAL0ASAHKAKsASAKKAL0AWpHDQMgAhClCEUNAgtBfyEDCyADDwsgAiAIIAIoAgBBA3FBA0YbKAIoIAEQqgggA2ohAyAAKAIQIQULIARBAWohBAwACwALnwICA38CfCMAQRBrIgUkACABIAEoAkggASgCTCIEQQFqIARBAmpBOBBgIgQ2AkggBCABKAJMIgZBOGxqIgQgAzoAMCAEIAI2AgACfAJAIAJFDQAgAi0AAEUNAEHwjwsgASgCBDYCAEGAkAsgASsDEDkDACAEIAAoAogBIgJB8I8LQQEgAigCABEDADYCBCAFIAAgBBCLCCAFKwMIIQcgASgCTCEGIAUrAwAMAQsgBAJ/IAErAxBEMzMzMzMz8z+iIgiZRAAAAAAAAOBBYwRAIAiqDAELQYCAgIB4C7ciBzkDKEQAAAAAAAAAAAshCCABIAZBAWo2AkwgASAHIAErAyCgOQMgIAEgASsDGCIHIAggByAIZBs5AxggBUEQaiQAC6YBAQN/IAAoAgAhAgJAAkACQAJAIAAtAARBAWsOAwACAQILIAIoAlQhAwJAIAIoAmRBf0YEQCADEHkaDAELIAIoAlwQFyACKAJgEBcDQCADKAIAIgQEQCAEQdgAakEAEKwIIAQQ7wUgBBAXIANBBGohAwwBCwsgAigCVBAXCyACEO8FIAIQFwwCCyACKAIgEBcgAhAXDAELIAIQhA8LIAEEQCAAEBcLCxkAQX8gACgCACIAIAEoAgAiAUogACABSBsLuAIBBX8gASgCECIEQQE2AgggBCgCFCgCECgC+AEhBCADIAIQNUECdGogBDYCACACIAFBARB7GiAAIAEQKSEEA0AgBARAIAUgBEFQQQAgBCgCAEEDcSIGQQJHG2ooAigiBygCECIIKAIUKAIQKAL4ASAEQTBBACAGQQNHG2ooAigoAhAoAhQoAhAoAvgBSmohBSAIKAIIRQRAIAAgByACIAMQrgggBWohBQsgACAEECwhBAwBCwsgACABELECIQQDQCAEBEAgBSAEQVBBACAEKAIAQQNxIgFBAkcbaigCKCgCECgCFCgCECgC+AEgBEEwQQAgAUEDRxtqKAIoIgEoAhAiBigCFCgCECgC+AFKaiEFIAYoAghFBEAgACABIAIgAxCuCCAFaiEFCyAAIAQQ+AIhBAwBCwsgBQvxBQEJfyMAQUBqIgIkACACQQA2AhhBxM4KQQFBxM4KKAIAQQFqIgUgBUEBTRs2AgAgAkIANwMQIAAoAhBBADYC3AEgABAaIQUgAUEATCEJAkACQANAIAUEQAJAAkACQCAJDQAgBSgCECIBKALoASIERQ0AIAQoAhAoAowCIAEoAvQBQQJ0aigCACEBDAELIAUiARCtASABRw0BCyABKAIQKAKwAUHEzgooAgBGDQAgACgCEEEANgLAAUHIzgpBADYCACACQRBqIAEQlQ8DQAJAIAIoAhQiAUUNACACKAIQIAFBAnRqQQRrKAIAIQQgAiABQQFrNgIUIARFDQBBxM4KKAIAIgMgBCgCECIBKAKwAUYNASABIAM2ArABQcjOCigCACIDIAAgAxsoAhBBuAFBwAEgAxtqIAQ2AgAgASADNgK8AUHIzgogBDYCACABQQA2ArgBIAIgBCgCECIBKQPIATcDICACIAEpA8ABNwMoIAIgASkD0AE3AzAgAiABKQPYATcDOEEDIQMDQCADQQBIDQICQCACQSBqIANBA3RqIgEoAgAiBkUNACABKAIEIgFFDQAgBiABQQFrIgdBAnRqIQYDQCAHQX9GDQEgBCAGKAIAIghBUEEAIAgoAgBBA3EiCkECRxtqKAIoIgFGBEAgCEEwQQAgCkEDRxtqKAIoIQELAkAgASgCECgCsAFBxM4KKAIARg0AIAEQrQEgAUcNACACQRBqIAEQlQ8LIAZBBGshBiAHQQFrIQcMAAsACyADQQFrIQMMAAsACwsgACgCECIBIAEoAtwBIgRBAWoiAzYC3AEgBEH/////A08NAyABKALYASADQQJ0IgMQPSIBRQ0EIAAoAhAiAyABNgLYASABIARBAnRqIAMoAsABNgIACyAAIAUQGyEFDAELCyACQQA2AhQgAigCEBAXIAJBQGskAA8LQZG0A0He/QBBzQBBk7MBEAAACyACIAM2AgBB6PoGKAIAQandAyACEB0aECYAC4gBAQF/IAAEQAJAIAAoAhAoAngiAUUNACABKAIQIgEoArABIABHDQAgAUEANgKwAQsgAEEwQQAgACgCAEEDcUEDRxtqKAIoKAIQQdABaiAAENAEIABBUEEAIAAoAgBBA3FBAkcbaigCKCgCEEHYAWogABDQBA8LQcfQAUGXuQFB4gFBz5wBEAAAC10BBH9BwI4LKAIAIgAEfwJAIAAoAqgCIgFFDQAgASAAKAKwAiICSQ0AIAAoApwBIgMgAiABIABBoANqIAMoAjARCAAgACAAKAKoAjYCsAILIAAoAqADQQFqBUEACwtJAQF/IwBBEGsiASQAAkAgAEHI4QAQIyIARQ0AIAEgAUEIajYCACAAQeeEASABEElBAEwNAEGwiwsgASsDCDkDAAsgAUEQaiQAC4EBAQF/AkAgAUGD7gAQRw0AIAEhAwNAIAMsAAAhAiADQQFqIQMgAkE6a0F1Sw0ACyACRQRAIAEQigIPC0F/IQIgACgCrAJFDQBBASEDA38gAyAAKAKwAkoNASABIAAoAqwCIANBAnRqKAIAEEcEfyADBSADQQFqIQMMAQsLIQILIAILFAAgACABQfClAUG9CEGCuAEQhQIL9C0DCn8KfAF+IwBBgARrIgMkAEGAiwstAAAEQEG4kQsQqAELAkACQCABQewlQQBBARAuBEAgASgCECgCCA0BC0GV8QRBABAxQX8hAkGAiwstAABFDQEgARAeIQAgAxCKATkDCCADIAA2AgBB6PoGKAIAQaDTBCADEC0MAQsgARAaIQcCQANAIAcEQCAHKAIQIgIgAisDECIMIAIrA1ihOQMwIAIgDCACKwNgoDkDQCACIAIrAxgiEiACKwNQRAAAAAAAAOA/oiIMoTkDOCACIBIgDKA5A0ggASAHECkhBgNAIAYEQCAGKAIQKAIIIggEQCAIKAIERQ0FIANBsANqIAgoAgAiBEEwECAaIANB4AJqIgIgBEEwECAaIANBkANqIAIQow8gAysDqAMhECADKwOgAyEOIAMrA5gDIQ0gAysDkAMhD0EAIQIDQCAIKAIEIAJLBEAgAgRAIANBsANqIAgoAgAgAkEwbGoiBUEwECAaIANBsAJqIgQgBUEwECAaIANBkANqIAQQow8gECADKwOoAyIMIAwgEGMbIRAgDiADKwOgAyIMIAwgDmMbIQ4gDSADKwOYAyIMIAwgDWQbIQ0gDyADKwOQAyIMIAwgD2QbIQ8LIAMoArgDBEAgAyADKQPIAzcDqAIgAyADKQPAAzcDoAIgAyADKAKwAyIEKQMINwOYAiADIAQpAwA3A5ACIANBkANqIANBoAJqIANBkAJqELYDIBAgAysDqAMiDCAMIBBjGyEQIA4gAysDoAMiDCAMIA5jGyEOIA0gAysDmAMiDCAMIA1kGyENIA8gAysDkAMiDCAMIA9kGyEPCyADKAK8AwRAIAMgAykD2AM3A4gCIAMgAykD0AM3A4ACIAMgAygCsAMgAygCtANBBHRqQRBrIgQpAwg3A/gBIAMgBCkDADcD8AEgA0GQA2ogA0GAAmogA0HwAWoQtgMgECADKwOoAyIMIAwgEGMbIRAgDiADKwOgAyIMIAwgDmMbIQ4gDSADKwOYAyIMIAwgDWQbIQ0gDyADKwOQAyIMIAwgD2QbIQ8LIAJBAWohAgwBCwsgCCAQOQMgIAggDjkDGCAIIA05AxAgCCAPOQMICyABIAYQLCEGDAELCyABIAcQGyEHDAELCyAAQQA6AJ0CIAAgATYCoAECQCABQavkABAjIgJFDQAgAyADQZADajYC5AEgAyADQbADajYC4AEgAkHThAEgA0HgAWoQSSICQQBMDQAgACADKwOwA0QAAAAAAABSQKIiDDkDwAEgACAMOQPIASACQQFHBEAgACADKwOQA0QAAAAAAABSQKI5A8gBCyAAQQE6AJ0CCyAAQQA6AJwCAkAgAUHusAEQIyICRQ0AIAMgA0GQA2o2AtQBIAMgA0GwA2o2AtABIAJB04QBIANB0AFqEEkiAkEATA0AIAAgAysDsANEAAAAAAAAUkCiIgw5A9ABIAAgDDkD2AEgAkEBRwRAIAAgAysDkANEAAAAAAAAUkCiOQPYAQsgAEEBOgCcAgsgAEEAOgCeAiAAIAEoAhAoAggiAikDMDcD4AEgACACKQM4NwPoAQJAIAEoAhAoAggiAisDMET8qfHSTWJQP2RFDQAgAisDOET8qfHSTWJQP2RFDQAgAEEBOgCeAgsgAi0AUSECIABB0tEBNgK8ASAAQdoAQQAgAhs2ApgCAkAgAUGQNxAjIgJFDQAgAi0AAEUNACAAIAI2ArwBCyAAIAEoAhAiAikDEDcD+AEgACACKQMoNwOQAiAAIAIpAyA3A4gCIAAgAikDGDcDgAJB+IsLIAFBAEHuL0EAEB82AgBB/IsLIAFBAEG+9wBBABAfNgIAIABBAEHAjAsoAgBBtekAEFE2ArgCQQBBvIwLKAIARAAAAAAAACxARAAAAAAAAPA/EFMhDCAAQdyWCjYCyAIgACAMOQPAAiAAIAEQHjYCtAEgACgCqAIQFyAAQQA2AqgCIAAoAqwCEBcgAEEANgKsAiAAKAK0AhAXIABBADYCtAICQAJAIAFBrCkQIyIFBEAgACABQdPaABAjIgJB38ADIAIbNgKgAiAAIAFBxtoAECMiAkG+mAMgAhsiBDYCpAIgACgCoAIiAiAEENkDIAJqIgJBACACLQAAGyICBEAgAyACLAAANgLAAUGF1wQgA0HAAWoQJyAAQeX0BDYCpAILIAAgBRBhNgKoAiADQQA2ArgDIANCADcDsAMgA0GwA2pBABC0CCAAKAKoAiECA0AgAiAAKAKgAhCdBCICBEAgA0GwA2ogAhC0CEEAIQIMAQsLIAMoArQDIgJBAWsiBEEASA0CAn8gAkEBTQRAIAMoArADDAELIANBsANqQQAQtAggA0EANgK4AyADKAKwAyECIANCADcDsAMgACACNgKsAkEACyADQQA2ArQDEBcgACAENgKwAiABQdgjECMiBUUNASAFLQAARQ0BQQAhBiAAKAKwAkECakEEED8hB0EBIQIDQCAAKAKwAiIEIAJOBEAgACACIAQgBRCiDwRAIAcgBkEBaiIGQQJ0aiACNgIACyACQQFqIQIMAQsLAkAgBgRAIAcgBjYCACAHIAZBAnRqIARBAWo2AgQMAQsgAyAFNgKwAUHD2AQgA0GwAWoQJyAHEBdBACEHCyAAIAc2ArQCDAELIABBATYCsAILQQEQgwNB8IEFKAIAIQsgACAAKAKYASICNgKcAQNAAkACQAJAIAIEQAJ/IAAoAjwiBEUEQEEAIQZBAAwBCyAEKAIMIQYgBCgCCAshBCACIAY2AhggAiAENgIUIAIgADYCDCAAKAKwASEEIAIgCzYC2AQgAkGwlQo2AtQEIAIgBDYCHCABKAIQKAIIRQRAQd+iBEEAEDFBABCDA0F/IQJBgIsLLQAARQ0IIAEQHiEAIAMQigE5AyggAyAANgIgQej6BigCAEGg0wQgA0EgahAtDAgLIAIgAiACKAI0ENwEIgQ2AjhBASEGAkAgBEEVRg0AIARB5wdGBEAgAyACKAI0NgKgAUHRowQgA0GgAWoQMUEAEIMDQX8hAkGAiwstAABFDQkgARAeIQAgAxCKATkDmAEgAyAANgKQAUHo+gYoAgBBoNMEIANBkAFqEC0MCQsCQCABQY85ECMiBEUNACAEQaIYEENFDQEgBEGXGBBDDQBBECEGDAELQQAhBgsgAiACKAKYASAGcjYCmAECQCAAKAK4ASIEBEAgBC0AmAFBIHEEQCACKAI0IAQoAjQQQ0UNAgsgBBD6AyAAQQA2AhwgAEEANgK4AQtB2IoLQQA2AgAMAgtB2IoLKAIAIgRFDQEgBCACNgIIIAIgBCgCJDYCJAwCC0EAIQJBABCDA0GAiwstAABFDQYgARAeIQAgAxCKATkDGCADIAA2AhBB6PoGKAIAQaDTBCADQRBqEC0MBgsgAigCPCEGQQEhByMAQUBqIgkkACACKAIAIQUCfwJAAkACQCACKAJMIgRFDQAgBCgCACIERQ0AIAIgBBEBAAwBCyACKAIoDQAgAigCJA0AAkAgBS0ADUUEQCACKAIgIQUMAQtB+IcLIAIoAhQiBEHGFiAEGxDfBCACKAIYIgQEQCAJIARBAWo2AjBB+IcLQc6xASAJQTBqEN4EC0H4hwtBLhCUAiACKAI0IgoQNyAKaiIEIQUDQCAFLQAAQTpGBEAgCSAFQQFqNgIkIAkgBUF/cyAEajYCIEH4hwtBnpcDIAlBIGoQ3gQgBSEECyAFIApHIAVBAWshBQ0ACyAJIAo2AhQgCSAEIAprNgIQQfiHC0GxMiAJQRBqEN4EIAJB+IcLEN0EIgU2AiALIAUEQCACIAVBpBYQoAQiBDYCJCAEDQEgAigCDCgCECEFIAIoAiAhBCAJQeSUCygCABCjATYCBCAJIAQ2AgBB+PQDIAkgBREEAAwCCyACQfD6BigCADYCJAtBACACLQCZAUEEcUUNARpB5tEEQQAgAigCDCgCEBEEAAtBAQshBCAJQUBrJAACQCAEDQBBACEHIAZFDQAgBigCACIERQ0AIAIgBBEBAAsgBw0BIAAgAjYCuAELIAJBoJYKNgJoIAJBADYCCAJAIAIoAgAiBS0AnAJBAUYEQCACIAUpA9ABNwPwASACIAUpA9gBNwP4AQwBCyACKAI4QawCRgRAIAIgAigCRCsDCCIMOQP4ASACIAw5A/ABDAELIAJCgICAgICAgIjAADcD8AEgAkKAgICAgICAiMAANwP4AQsCQCAFLQCdAkEBRgRAIAIgBSkDwAE3A6ADIAIgBSkDyAE3A6gDDAELIAIoAjgiBEEeS0EBIAR0QZiAgIMEcUVyRQRAIAJCgICAgICAgKHAADcDoAMgAkKAgICAgICAocAANwOoAwwBCyAEQawCRgRAIAIgAigCVCIEKQMINwOgAyACIAQpAxA3A6gDDAELIAJCADcDoAMgAkIANwOoAwsCQCABKAIQKAIIKwMYIgxEAAAAAAAAAABiBEAgAiAMOQOwAyACIAw5A7gDDAELAkAgBSgCuAEiBEUNACAELQCAAUEBRw0AIAIgBCkDcDcDsAMgAiAEKQN4NwO4AwwBCyACKAI4QawCRgRAIAIgAigCVCIEKQMoNwOwAyACIAQpAzA3A7gDDAELIAJCgICAgICAgKzAADcDsAMgAkKAgICAgICArMAANwO4AwsgBSsDgAIhFSAFKwOIAiEUIAUrA5ACIQ8gAiAFKwP4ASIRIAIrA/ABIhKhIhM5A9ABIAIgDyACKwP4ASIMoCINOQPoASACIBQgEqAiEjkD4AEgAiAVIAyhIgw5A9gBIANCgICAgICAgPg/NwP4AyANIAyhIQ4gEiAToSENRAAAAAAAAPA/IRACQCABKAIQKAIIIgQrA0AiEkT8qfHSTWJQP2RFDQAgBCsDSCIMRPyp8dJNYlA/ZEUNACASIBIgDSANRPyp8dJNYlA/ZRsiDWMgDCAMIA4gDkT8qfHSTWJQP2UbIg5jckUEQCANIBJjRQ0BIAQtAFBBAXFFIAwgDmRFcg0BCyADIBIgDaMgDCAOoxAyIhA5A/gDCyADIA8gFaBEAAAAAAAA4D+iIg85A+gDIAMgFCARoEQAAAAAAADgP6IiETkD8AMgAiAFKAKYAjYC6AIgAyAQIA6iIg45A5ADIAMgECANoiINOQOwAyABQZgaECMiBARAIAMgBBA3QQFqEPIDIgU2AowBIAMgA0H4A2o2AogBIAMgA0GQA2o2AoQBIAMgA0GwA2o2AoABAkAgBEH0owMgA0GAAWoQSUEERgRAIAEoAkggBUEAEHMiBEUNASAEKAIQIgQrAxghDyAEKwMQIREMAQsgAyAFNgJsIAMgA0HnA2o2AnAgAyADQbADajYCYCADIANBkANqNgJkIAMgA0H4A2o2AmggBEGKvgEgA0HgAGoQSUEERgRAIAEoAkggBUEAEHMiBEUNASAEKAIQIgQrAxghDyAEKwMQIREMAQsgAyADQegDajYCUCADIANB8ANqNgJMIAMgA0H4A2o2AkggAyADQZADajYCRCADIANBsANqNgJAIARBx4QBIANBQGsQSRogAysD6AMhDyADKwPwAyERCyAFEBcgAysD+AMhECADKwOQAyEOIAMrA7ADIQ0LIAIgDjkD+AIgAiANOQPwAiACIBA5A+ACIAIgDzkD2AIgAiAROQPQAiANIA4gAigC6AIiBBshDyAOIA0gBBshECACKwOoAyENIAIrA6ADIQ4CQAJAIAIoAgAiBS0AngJBAUcNACACLQCYAUEgcUUNACAFKwPoASANIA2goSERAkAgAiAFKwPgASAOIA6goSITRC1DHOviNho/YwR/QQEFIAICfyAQIBOjIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CyIGNgKkASAQIAa3IBOioUQtQxzr4jYaP2RFDQEgBkEBagsiBjYCpAELAkAgAiARRC1DHOviNho/YwR/QQEFIAICfyAPIBGjIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CyIHNgKoASAPIAe3IBGioUQtQxzr4jYaP2RFDQEgB0EBagsiBzYCqAELIAIgBiAHbDYCzAEgDyAREDIhDyAQIBMQMiEQDAELAnwgAigCREUEQEQAAAAAAAAAACERRAAAAAAAAAAADAELIAIoAlQiBCsDGCAEKwMgIA0gDaChRAAAAAAAAAAAECQhESAOIA6goUQAAAAAAAAAABAkCyACQQE2AswBIAJCgYCAgBA3AqQBIBEgDxAkIREgEBAkIRMLIAJCADcCrAEgAkIANwK0ASACQgA3ArwBIAICfyAOIA6gIBOgIAIrA7ADokQAAAAAAABSQKMiDEQAAAAAAADgP0QAAAAAAADgvyAMRAAAAAAAAAAAZhugIgyZRAAAAAAAAOBBYwRAIAyqDAELQYCAgIB4CzYCwAMgAgJ/IA0gDaAgEaAgAisDuAOiRAAAAAAAAFJAoyIMRAAAAAAAAOA/RAAAAAAAAOC/IAxEAAAAAAAAAABmG6AiDJlEAAAAAAAA4EFjBEAgDKoMAQtBgICAgHgLNgLEAyADQbADaiIEIAIgBSgCvAEsAAAQoQ8gAiADKQOwAzcCtAEgBCACIAUoArwBLAABEKEPIAIgAykDsAMiFjcCvAECQCACKAK0ASAWp2oiBCAEQR91IgRzIARrQQFGBEAgAigCuAEgFkIgiKdqIgQgBEEfdSIEcyAEa0EBRg0BCyACQgE3ArwBIAJCgICAgBA3ArQBIAMgBSgCvAE2AjBBo6oEIANBMGoQJwtEAAAAAAAAAAAhEgJ8RAAAAAAAAAAAIAEoAhAoAggtAFJBAUcNABogEyAQoUQAAAAAAADgP6JEAAAAAAAAAAAgECATYxshEkQAAAAAAAAAACAPIBFjRQ0AGiARIA+hRAAAAAAAAOA/ogshDAJAIAIoAugCIgZFBEAgDiETIA0hDiAQIREgDyEQIAwhDSASIQwMAQsgDSETIA8hESASIQ0LIAIgDiANoCIUOQOIAyACIBMgDKAiDjkDgAMgAiAQIBSgIg85A5gDIAIgESAOoCITOQOQAyACIBAgAisD4AIiDKM5A8gCIAIgESAMozkDwAIgAgJ/IA4gAisDsAMiDaJEAAAAAAAAUkCjIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAsiBzYCyAMgAgJ/IBQgAisDuAMiEqJEAAAAAAAAUkCjIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAsiCDYCzAMgAgJ/IA8gEqJEAAAAAAAAUkCjIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAsiBTYC1AMgAgJ/IBMgDaJEAAAAAAAAUkCjIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAsiBDYC0AMgBgRAIAIgEzkDmAMgAiAPOQOQAyACIA45A4gDIAIgFDkDgAMgAiAFrSAErUIghoQ3A9ADIAIgCK0gB61CIIaENwPIAwsgAi0AmAFBgAFxRQRAIAIgARCqDwtB2IoLIAI2AgALAkAgACgCnAEiBCgCBCICRQ0AIAIoAjQNACACIAQoAjQ2AjQLIAAgAjYCnAEMAAsAC0GYyAFBgrgBQd8IQaYpEAAAC0GIkANBgrgBQekdQeK+ARAAAAsgA0GABGokACACC7MBAQJ/IwBBkAFrIgIkAAJAIAAQqw8EQCABKAIQQQFGBEAgAUEANgIQIAEgACkDADcDACABIAApAwg3AwgLIAIgACkAODcDWCACIAApADA3A1BBGBDyAyIAQQA2AhAgACACKQNQNwMAIAAgAikDWDcDCCABIAA2AhAMAQsgAiAARAAAAAAAAOA/IAJB0ABqIgAgAkEQaiIDEKwBIAMgACABELYIELYIIQALIAJBkAFqJAAgAAtaAQN/QbyICygCACIBRQRAQbyIC0HElgpB7MkKKAIAEH8iATYCAAsgASAAQQQgASgCABEDACIBRQRAQbyICygCACICKAIAIQMgAiAAEGFBASADEQMAGgsgAUULRwEEfyABQRAQPyEDA38gASACRgR/IAMFIAMgAkEEdGoiBCAAIAJBGGxqIgUrAwA5AwAgBCAFKwMIOQMIIAJBAWohAgwBCwsLVgECfyABKAIQIgIgACgCECIDKALAASIANgK4ASAABEAgACgCECABNgK8AQsgAyABNgLAASACQQA2ArwBIAAgAUYEQEGqnANBl7kBQbwBQbifARAAAAsLmwEBBX8jAEEQayIDJAAgAkHdhQEQIyEEIAJBg9oAECMhBSACQbohECMhBiADQgA3AwggA0IANwMAIAEEfyABKAIABUEACyEBAkAgBARAIAQtAAANAQsgAkH4zQEQIyEECyAAIAIgAxD8BSEHIAAgASAEIAUEfyAFIAIQyAQFQQALIgEgBiAHIAIQwQgaIAEQFyADEGYgA0EQaiQAC+wBAgV8AX9BASACIAJBAU0bIQkgASsDCCIFIQYgASsDACIHIQhBASECA0AgAiAJRkUEQAJAIAggASsDGCIEZARAIAQhCAwBCyAEIAdkRQ0AIAQhBwsCQCAGIAErAyAiBGQEQCAEIQYMAQsgBCAFZEUNACAEIQULIAFBGGohASACQQFqIQIMAQsLIAAgBzkDECAAIAg5AwAgACAFOQMYIAAgBjkDCCADIAMrAxAgCBAkIAcQJDkDECADIAMrAxggBhAkIAUQJDkDGCADIAMrAwAgCBAyIAcQMjkDACADIAMrAwggBhAyIAUQMjkDCAvHAwIDfwR8IwBB0ABrIgQkACAAKAIQKwOgASEIAkAgAkEAIARBxABqEPsFIgZBAWtBAkkNAEEwIQIgBEEwaiEFAkAgAwRAIAQgASkDIDcDACAEIAEpAyg3AwggBCABKQM4NwMYIAQgASkDMDcDECAEIAEpAwg3AyggBCABKQMANwMgQRAhAgwBCyAEIAEpAwA3AwAgBCABKQMINwMIIAQgASkDGDcDGCAEIAEpAxA3AxAgBCABKQMoNwMoIAQgASkDIDcDIAsgBSABIAJqIgEpAwA3AwAgBSABKQMINwMIIAQrAxAhCSAEIAQrAwAiBzkDECAEIAc5AyAgCEQAAAAAAADgP2QEQCAARAAAAAAAAOA/EIACCyAJIAehIQogBCgCTCEBA0AgASgCACICRQRAIAhEAAAAAAAA4D9kBEAgACAIEIACCyAEQcQAahDMBAwCCyABKwMIRAAAAAAAAAAAZUUEQCAAIAIQWCAJIQcgASgCGARAIAogASsDCKIgBCsDAKAhBwsgBCAHOQMQIAQgBzkDICAAIARBBEEBEEEgBCAEKwMQIgc5AzAgBCAHOQMACyABQRhqIQEMAAsACyAEQdAAaiQAIAYLdgECfyABIAAQOCIBaiICIAFBAXRBgAggARsiAyACIANLGyECIAAQISEDAkAgAC0AD0H/AUYEQCAAKAIAIAEgAkEBEGAhAQwBCyACQQEQPyIBIAAgAxAgGiAAIAM2AgQLIABB/wE6AA8gACACNgIIIAAgATYCAAtzAQF/IAAQISAAEDhPBEAgAEEBEL0ICyAAECEhAQJAIAAQJQRAIAAgAWpBADoAACAAIAAtAA9BAWo6AA8gABAhQRBJDQFBv64DQY/9AEGIAkG4sgEQAAALIAAoAgAgAWpBADoAACAAIAAoAgRBAWo2AgQLC4wBAQJ/IwBBEGsiACQAAkAgAEEMaiAAQQhqEBENAEHolAsgACgCDEECdEEEahBCIgE2AgAgAUUNACAAKAIIEEIiAQRAQeiUCygCACAAKAIMQQJ0akEANgIAQeiUCygCACABEBBFDQELQeiUC0EANgIACyAAQRBqJABBlJYLQYyVCzYCAEHMlQtBKjYCAAuMAQECfyMAQSBrIgIkAAJAIAAoAqABIgNBAkgNACAALQCYAUHAAHFFDQAgAiAAKAIAKAKsAiADQQJ0aigCADYCECABQbHCASACQRBqEPADCyAAKALIASEDIAAoAsQBIgBBAEwgA0EATHFFBEAgAiADNgIEIAIgADYCACABQbXCASACEPADCyACQSBqJAAL6wEBAX8gACgCECEHIAFFIAAoApgBIgBBgIACcUVyRQRAIAcgATYCyAELQQAhAQJAIABBgIAEcUUNACAHIAUgBhCAATYC3AEgAkUNACACLQAARQ0AIAcgAiAGEIABNgLYAUEBIQELAkAgAEGAgIACcUUNAAJAIANFDQAgAy0AAEUNACAHIAMgBhCAATYC7AFBASEBIAcgBy8BjAJBAXI7AYwCDAELIAcoAsgBIgJFDQAgByACEGE2AuwBQQEhAQsCQCAERSAAQYCAgARxRXINACAELQAARQ0AIAcgBCAGEIABNgL8AUEBIQELIAELzgEBBX8jAEEgayIDJAAgACgCECIEKAK0ASICQQAgAkEAShtBAWohBkEBIQUCQANAIAUgBkcEQCAEKAK4ASAFQQJ0aigCACADIAEpAxg3AxggAyABKQMQNwMQIAMgASkDCDcDCCADIAEpAwA3AwAgBUEBaiEFIAMQwggiAkUNAQwCCwsCQCABKwMQIAQrAxBmRQ0AIAQrAyAgASsDAGZFDQAgASsDGCAEKwMYZkUNACAAIQIgBCsDKCABKwMIZg0BC0EAIQILIANBIGokACACCzsBAX8CQCABQQBB3YUBQQAQHyICRQRAIAFBAEH4zQFBABAfIgJFDQELIAAgASACED4gARCAATYCzAQLCxUAIAAgASACQbwiQasBQZy8ARDgCguXAQEBfyMAQeAAayIHJAAgByACOQNYIAcgBykDWDcDKCAHIAE5A1AgByAHKQNQNwMgIAAgB0EgahDPBCAHIAQ5A0ggByAHKQNINwMYIAcgAzkDQCAHIAcpA0A3AxAgACAHQRBqEM8EIAcgBjkDOCAHIAcpAzg3AwggByAFOQMwIAcgBykDMDcDACAAIAcQzwQgB0HgAGokAAtSAQF/IwBBEGsiAyQAIABFBEBBg88BQZy8AUGrAUHjiAEQAAALIAMgACAAKAIEQQFrEMQIIAAgAysDACADKwMIIAEgAiABIAIQxQggA0EQaiQAC5wBAQV/IABBMEEAIAAoAgBBA3FBA0cbaigCKCgCECICKALgASEEIAIoAuQBIQMCQANAIAEgA0cEQCABQQJ0IQUgAUEBaiEBIAQgBWooAgAgAEcNAQwCCwsgAiAEIANBAWogA0ECahD/ASIBNgLgASACIAIoAuQBIgJBAWoiAzYC5AEgASACQQJ0aiAANgIAIAEgA0ECdGpBADYCAAsLrgIBA38jAEEQayIDJAAgAyACNgIEIAMgATYCACMAQRBrIgEkACABIAM2AgQgASADNgIMIAEgAzYCCAJAAkACQAJAQQBBAEGbMyADEE4iBUEASA0AIAVBAWohAiAFIAAQOCAAECFrIgRPBEAgACACIARrENEBCyAAECEhBCAFIAAQJQR/IAAgBGoFIAAoAgAgBGoLIAJBmzMgASgCDBBOIgJHIAJBAE5xDQEgAkEATA0AIAAQJQRAIAJBgAJPDQMgACAALQAPIAJqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBxAFB2R0QAAALIAAgACgCBCACajYCBAsgAUEQaiQADAILQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALIAAQnwEgA0EQaiQAC5gEAwF/CXwBfiMAQZABayIGJAAgAisDACIIRAAAAAAAAAhAoyEKIAIrAwgiCUQAAAAAAADgv6IhByAIRAAAAAAAAOC/oiELIAlEAAAAAAAACMCjIQwCQCAEQYABcQRAIAZCADcDiAEgBkIANwOAAQwBCyAGIAcgCqE5A4gBIAYgCyAMoTkDgAELIAErAwghDSABKwMAIQ4CQCAEQcAAcQRAIAZCADcDeCAGQgA3A3AMAQsgBiAHIAqgOQN4IAYgDCALoDkDcAsgBiAJmjkDaCAGIAYpA4gBNwMoIAYgBikDeDcDCCAGIAYpA2g3AxggBiAImjkDYCAGIAYpA4ABNwMgIAYgBikDcDcDACAGIAYpA2A3AxAgBkEwaiAGQSBqIAZBEGogBiADEM8CIAYrAzAhByABIA0gCSAGKwM4oCIDoTkDCCABIA4gCCAHoCIHoTkDACAAIAkgDaAgA6EiCzkDCCAAIAggDqAgB6EiDzkDACAFIAApAwg3A0ggBSAAKQMANwNAIAUgACkDCDcDCCAAKQMAIRAgBSAKIAlEAAAAAAAA4D+iIA2gIAOhIgmgOQMYIAUgDCAOIAhEAAAAAAAA4D+ioCAHoSIIoDkDECAFIBA3AwAgBSABKQMINwMoIAUgASkDADcDICAFIAkgCqE5AzggBSAIIAyhOQMwIAAgCyADoTkDCCAAIA8gB6E5AwAgBkGQAWokAAseACAAIAGiRAAAAAAAACRAoiACRAAAAAAAAOA/oqAL7A4DBH8SfAF+IwBB0AJrIgckAETNzMzMzMzcPyENIANEAAAAAAAAEECiIgsgBGNFIAVBIHEiCEVyRQRAIAQgC6NEzczMzMzM3D+iIQ0LAnxEAAAAAAAAAAAgBEQAAAAAAADwP2RFDQAaRAAAAAAAAAAAIAhFDQAaIAREAAAAAAAA8L+gRJqZmZmZmak/oiADowshC0QAAAAAAAAAACANIAIrAwAiEKIiFCAFQYABcSIJGyEMRAAAAAAAAAAAIBSaIAVBwABxIgobIQ5EAAAAAAAAAAAgDSACKwMIIhKaIgOiIhUgCRshD0QAAAAAAAAAACAVmiAKGyERIBIgASsDCCIYoCEZIBAgASsDACIaoCEbIAsgEKIhDSASRAAAAAAAAOA/oiAYoCEWIBBEAAAAAAAA4D+iIBqgIRcgCyADoiETIAACfAJ8AkACfAJAIAhFBEAgByAMOQPIAiAHIA85A8ACIAcgDjkDuAIgByAROQOwAiAHIAIpAwg3A6gCIAcgAikDADcDoAJEAAAAAAAAAAAhDCAQRAAAAAAAAAAAYQRARAAAAAAAAAAAIQ5EAAAAAAAAAAAhC0QAAAAAAAAAACASRAAAAAAAAAAAYQ0FGgsgBysDqAIhAyAHKwOgAiELDAELIAcgDjkDyAIgByAROQPAAiAHIAw5A7gCIAcgDzkDsAIgByADOQOoAiAHIBCaIgs5A6ACRAAAAAAAAAAAIQwgEEQAAAAAAAAAAGINAEQAAAAAAAAAACEORAAAAAAAAAAAIRFEAAAAAAAAAAAgEkQAAAAAAAAAAGENARoLIAsgCyADEE8iDKMiDxCpAiIOIA6aIANEAAAAAAAAAABkGyEcIAMgDKMhEQJ8AkAgBUHgAHFB4ABHBEAgCEEARyICIAlFcg0BCyAHIAcpA8gCNwO4ASAHIAcpA6gCNwOoASAHIAcpA7gCNwOYASAHIAcpA8ACNwOwASAHIAcpA6ACNwOgASAHIAcpA7ACNwOQASAHQfABaiAHQbABaiAHQaABaiAHQZABaiAEEM8CIBEgBysDkAIgC6EiCyAHKwOYAiADoSIDEE8iDCALIAyjEKkCIgsgC5ogA0QAAAAAAAAAAGQbIByhEESiIgOiIQ4gDyADogwBCyAFQaABcUGgAUdBACAKRSACchtFBEAgByAHKQPIAjcDiAEgByAHKQOoAjcDeCAHIAcpA7gCNwNoIAcgBykDwAI3A4ABIAcgBykDoAI3A3AgByAHKQOwAjcDYCAHQfABaiAHQYABaiAHQfAAaiAHQeAAaiAEEM8CIBEgBysDgAIgC6EiCyAHKwOIAiADoSIDEE8iDCALIAyjEKkCIgsgC5ogA0QAAAAAAAAAAGQbIByhEESiIgOiIQ4gDyADogwBCyAHIAcpA8gCNwNYIAcgBykDqAI3A0ggByAHKQO4AjcDOCAHIAcpA8ACNwNQIAcgBykDoAI3A0AgByAHKQOwAjcDMCAHQfABaiAHQdAAaiAHQUBrIAdBMGogBBDPAiAHKwP4ASADoSEOIAcrA/ABIAuhCyEMIAhFDQEgBEQAAAAAAADgP6IiAyARoiERIAMgD6ILIQ8gASAYIA6hOQMIIAEgGiAMoTkDACAAIBkgDqEiAzkDCCAAIBsgDKEiBDkDACAGIAEpAwg3A4gBIAYgASkDADcDgAEgBiABKQMANwMAIAYgASkDCDcDCCAGIAMgDaE5AzggBiAEIBOhOQMwIAYgFiANoTkDKCAGIBcgE6E5AyAgBiADIBShOQMYIAYgBCAVoTkDECAGIAApAwA3A0AgBiAAKQMINwNIIAYgFCADoDkDeCAGIBUgBKA5A3AgBiANIBagOQNoIAYgEyAXoDkDYCAGIA0gA6A5A1ggBiATIASgOQNQIAAgBCAPoTkDACADIBGhDAILIAcgDSAWIBmhoDkD6AEgByATIBcgG6GgOQPgASAHQgA3A9gBIAdCADcD0AEgByAUIBKhIgM5A8gBIAcgBykD6AE3AyggByAHKQPIATcDGCAHIAcpA+ABNwMgIAcgFSAQoSILOQPAASAHIAcpA8ABNwMQIAdCADcDCCAHQgA3AwAgB0HwAWogB0EgaiAHQRBqIAcgBBDPAiARIAcrA4ACIAuhIgQgBCAHKwOIAiADoSIDEE8iBKMQqQIiCyALmiADRAAAAAAAAAAAZBsgHKEQRCAEmqIiA6IhCyAPIAOiCyEDIAAgGSALoCISOQMIIAAgGyADoCIPOQMAIAYgACkDCDcDiAEgBiAAKQMANwOAASAGIAApAwg3AwggACkDACEdIAYgFCAYIAugIgSgOQN4IAYgFSAaIAOgIhCgOQNwIAYgDSAWoDkDaCAGIBMgF6A5A2AgBiALIASgIgs5A1ggBiADIBCgIgM5A1AgBiALOQNIIAYgAzkDQCAGIAs5AzggBiADOQMwIAYgFiANoTkDKCAGIBcgE6E5AyAgBiAEIBShOQMYIAYgECAVoTkDECAGIB03AwAgACAMIA+gOQMAIA4gEqALOQMIIAdB0AJqJAALzgkCA38MfCMAQfABayIGJABEAAAAAAAAAAAgA0QAAAAAAADQP6JEZmZmZmZm1j+iRGZmZmZmZtY/IANEAAAAAAAAEEBkGyIKIAIrAwAiDqIiEiAEQcAAcSIHGyENRAAAAAAAAAAAIAogAisDCCIQmiILoiITIAcbIQ9EAAAAAAAAAAAgEpogBEGAAXEiCBshCkQAAAAAAAAAACATmiAIGyEJAkAgBEEgcSIEBEAgBiACKQMINwPIASAGIAIpAwA3A8ABIA8hCyANIQwMAQsgBiALOQPIASAGIA6aOQPAASAJIQsgCiEMIA8hCSANIQoLIAErAwghDSABKwMAIQ8gBiAMOQPoASAGIAs5A+ABIAYgCjkD2AEgBiAJOQPQAUQAAAAAAAAAACEKAnwgDkQAAAAAAAAAAGEEQEQAAAAAAAAAACEJRAAAAAAAAAAAIQtEAAAAAAAAAAAgEEQAAAAAAAAAAGENARoLIAYrA8ABIgkgCSAGKwPIASIKEE8iC6MiDBCpAiIRIBGaIApEAAAAAAAAAABkGyERIAogC6MhCwJ8IAcEQCAGIAYpA+gBNwOIASAGIAYpA8gBNwN4IAYgBikD2AE3A2ggBiAGKQPgATcDgAEgBiAGKQPAATcDcCAGIAYpA9ABNwNgIAZBkAFqIAZBgAFqIAZB8ABqIAZB4ABqIAMQzwIgCyAGKwOgASAJoSIJIAYrA6gBIAqhIgoQTyIUIAkgFKMQqQIiCSAJmiAKRAAAAAAAAAAAZBsgEaEQRKIiCaIhCiAMIAmiDAELIAgEQCAGIAYpA+gBNwNYIAYgBikDyAE3A0ggBiAGKQPYATcDOCAGIAYpA+ABNwNQIAYgBikDwAE3A0AgBiAGKQPQATcDMCAGQZABaiAGQdAAaiAGQUBrIAZBMGogAxDPAiALIAYrA7ABIAmhIgkgBisDuAEgCqEiChBPIhQgCSAUoxCpAiIJIAmaIApEAAAAAAAAAABkGyARoRBEoiIJoiEKIAwgCaIMAQsgBiAGKQPoATcDKCAGIAYpA8gBNwMYIAYgBikD2AE3AwggBiAGKQPgATcDICAGIAYpA8ABNwMQIAYgBikD0AE3AwAgBkGQAWogBkEgaiAGQRBqIAYgAxDPAiAGKwOYASAKoSEKIAYrA5ABIAmhCyEJIANEAAAAAAAA4D+iIgMgC6IhCyADIAyiCyEMIBAgDaAhECAOIA+gIQ4gBUFAayECAnwgBARAIAEgDSALoCIDOQMIIAEgDyAMoCINOQMAIAAgECALoCILOQMIIAAgDiAMoCIMOQMAIAIgASkDCDcDCCACIAEpAwA3AwAgBSABKQMINwMIIAUgASkDADcDACAFIAApAwg3AyggBSAAKQMANwMgIAkgDKAhCSAKIAugDAELIAEgDSAKoTkDCCABIA8gCaE5AwAgACAQIAqhIgM5AwggACAOIAmhIg05AwAgAiAAKQMINwMIIAIgACkDADcDACAFIAApAwg3AwggBSAAKQMANwMAIAUgASkDCDcDKCAFIAEpAwA3AyAgDSAMoSEJIAMgC6ELIQogBSASIAOgOQM4IAUgEyANoDkDMCAFIAMgEqE5AxggBSANIBOhOQMQIAAgCjkDCCAAIAk5AwAgBkHwAWokAAv3AQEGfyMAQRBrIgQkAANAIAEgAjYCACAAIQIDQAJAIAItAABFIAMiBUEDSnJFBEAgBEEANgIMIAIgAkGA/wQgBEEMahCDBiIARgRAA0AgACAAQZD/BCAEQQxqIgcQgwYiA0cgAyEADQALIABBwP8EIAcQgwYhAAsgBCgCDCIDIANBD3FFIANBAEdxciIGDQEgBCACNgIAQdOKBCAEECcLIARBEGokAA8LIAZBCEciB0UEQEEDIQMgACECIAVBA0YNAQsgBSAHckUEQEEAIQMgACECIAAtAABFDQELCyAFQQFqIQMgASgCACAGIAVBA3R0ciECDAALAAslACABRQRAQc7OAUHW/ABBDUH79gAQAAALIAAgASABEDcQ1wFFC5AFAhB/BHwgACABIAIgAxDVCCILRQRAQQEPCyADLQAMIQ4CQCAARQ0AA0AgACAGRg0BIAsgBkEEdGoiAysDCCIURAAAAAAAAFJAoyEWIAMrAwAiFUQAAAAAAABSQKMhFyACIAEgBkECdGooAgAiCSACGyEMIAkQGiEHA0ACQCAHBEAgBygCECIDKAKUASIFIBcgBSsDAKA5AwAgBSAWIAUrAwigOQMIIAMgFSADKwMQoDkDECADIBQgAysDGKA5AxggAygCfCIDBEAgAyAVIAMrAzigOQM4IAMgFCADKwNAoDkDQAsgDkUNASAMIAcQKSEFA0AgBUUNAiAFKAIQIgMoAmAiBARAIAQgFSAEKwM4oDkDOCAEIBQgBCsDQKA5A0ALIAMoAmwiBARAIAQgFSAEKwM4oDkDOCAEIBQgBCsDQKA5A0ALIAMoAmQiBARAIAQgFSAEKwM4oDkDOCAEIBQgBCsDQKA5A0ALIAMoAmgiBARAIAQgFSAEKwM4oDkDOCAEIBQgBCsDQKA5A0ALAkAgAygCCCINRQ0AIA0oAgQhD0EAIQQDQCAEIA9GDQEgDSgCACAEQTBsaiIDKAIMIRAgAygCCCERIAMoAgQhEiADKAIAIRNBACEIA0AgCCASRgRAIBEEQCADIBUgAysDEKA5AxAgAyAUIAMrAxigOQMYCyAQBEAgAyAVIAMrAyCgOQMgIAMgFCADKwMooDkDKAsgBEEBaiEEDAIFIBMgCEEEdGoiCiAVIAorAwCgOQMAIAogFCAKKwMIoDkDCCAIQQFqIQgMAQsACwALAAsgDCAFECwhBQwACwALIAkgFSAUENAIIAZBAWohBgwCCyAJIAcQGyEHDAALAAsACyALEBdBAAuoAQECfyAAKAIQIgMgAysDKCACoDkDKCADIAMrAyAgAaA5AyAgAyADKwMYIAKgOQMYIAMgAysDECABoDkDEAJAIAMoAgwiBEUNACAELQBRQQFHDQAgBCAEKwM4IAGgOQM4IAQgBCsDQCACoDkDQAtBASEEA0AgBCADKAK0AUpFBEAgAygCuAEgBEECdGooAgAgASACENAIIARBAWohBCAAKAIQIQMMAQsLC/QJAhJ/BHwjAEEQayIOJAAgAEEQEBghESACKAIEIQcCQCACKAIcQQFxIg8EQCAHQQBKBEAgACAHakEBayAHbiEJDAILAn8gALifmyIVRAAAAAAAAPBBYyAVRAAAAAAAAAAAZnEEQCAVqwwBC0EACyIHIABqQQFrIAduIQkMAQsgB0EASgRAIAciCSAAakEBayAHbiEHDAELAn8gALifmyIVRAAAAAAAAPBBYyAVRAAAAAAAAAAAZnEEQCAVqwwBC0EACyIJIABqQQFrIAluIQcLQYCLCy0AAARAIA4gCTYCCCAOIAc2AgQgDkHmNkHcNiAPGzYCAEHo+gYoAgBB+9oDIA4QHRoLIAlBAWoiCkEIEBghDCAHQQFqQQgQGCELIABBGBAYIhIhBQNAIAAgA0YEQEEAIQMgAEEEEBghDQNAIAAgA0YEQAJAAkAgAigCGCIDBEBBrIgLKAIAQbCICygCAHINAkGwiAsgAzYCAEGsiAtB0QE2AgAgAEECTwRAIA0gAEEEQdIBEJQBC0GwiAtBADYCAEGsiAtBADYCAAwBCyACLQAcQcAAcQ0AIA0gAEEEQdMBEJQBC0EAIQNBACEEQQAhBQNAIAAgBUYEQEQAAAAAAAAAACEVA0AgAyAKRgRARAAAAAAAAAAAIRUgByEDBSAMIANBA3RqIgQrAwAhFiAEIBU5AwAgA0EBaiEDIBUgFqAhFQwBCwsDQCADBEAgCyADQQN0aiIEIBU5AwAgA0EBayEDIBUgBEEIaysDAKAhFQwBCwsgCyAVOQMAIAtBCGohCCAMQQhqIRBBACEEQQAhBkEAIQMDQCAAIANGRQRAIAEgDSADQQJ0aigCACgCECITQQV0aiEFAnwgAigCHCIKQQRxBEAgDCAEQQN0aisDAAwBCyAFKwMQIRUgBSsDACEWIApBCHEEQCAQIARBA3RqKwMAIBUgFqGhDAELIAwgBEEDdGoiFCsDACAUKwMIoCAVoSAWoUQAAAAAAADgP6ILIRUgBSsDGCEWIAUrAwghFyARIBNBBHRqIgUgFRAwOQMAIAUCfCAKQRBxBEAgCyAGQQN0aisDACAWIBehoQwBCyAKQSBxBEAgCCAGQQN0aisDAAwBCyALIAZBA3RqIgorAwAgCisDCKAgFqEgF6FEAAAAAAAA4D+iCxAwOQMIAkAgD0UEQEEAIARBAWoiBCAEIAlGIgUbIQQgBSAGaiEGDAELQQAgBkEBaiIGIAYgB0YiBRshBiAEIAVqIQQLIANBAWohAwwBCwsgEhAXIA0QFyAMEBcgCxAXIA5BEGokACARDwUgDCAEQQN0aiIIIAgrAwAgDSAFQQJ0aigCACIIKwMAECQ5AwAgCyAGQQN0aiIQIBArAwAgCCsDCBAkOQMAAkAgD0UEQEEAIARBAWoiBCAEIAlGIggbIQQgBiAIaiEGDAELQQAgBkEBaiIGIAYgB0YiCBshBiAEIAhqIQQLIAVBAWohBQwBCwALAAtByaUDQbn7AEEnQYMaEAAABSANIANBAnRqIBIgA0EYbGo2AgAgA0EBaiEDDAELAAsABSABIANBBXRqIgQrAxAhFSAEKwMAIRYgBCsDGCEXIAQrAwghGCACKAIIIQQgBSADNgIQIAUgFyAYoSAEuCIXoDkDCCAFIBUgFqEgF6A5AwAgBUEYaiEFIANBAWohAwwBCwALAAuKBQIKfAJ/IwBBIGsiECQAIAArAwAhCyAAKwMQIQwgACsDCCENIAArAxghDhDsAyEAIAQrAwgiByADuCIGoSEIIAcgDhAwoCANEDAgBCsDACIPIAwQMKAgCxAwoSAGoCEKoSAGoCEJIAggArijIAhEAAAAAAAA8D+gIAK4o0QAAAAAAADwv6AgCEQAAAAAAAAAAGYbEDAhCAJ8IA8gBqEiBkQAAAAAAAAAAGYEQCAGIAK4owwBCyAGRAAAAAAAAPA/oCACuKNEAAAAAAAA8L+gCxAwIQcgCSACuKMgCUQAAAAAAADwP6AgArijRAAAAAAAAPC/oCAJRAAAAAAAAAAAZhsQMCEJIAogArijIApEAAAAAAAA8D+gIAK4o0QAAAAAAADwv6AgCkQAAAAAAAAAAGYbEDAhCgNAIAghBiAHIAplBEADQCAGIAllBEAgACAHIAYQzAIgBkQAAAAAAADwP6AhBgwBCwsgB0QAAAAAAADwP6AhBwwBCwsgASAAEOcONgIEIAEgABCHASIRNgIIIAECfyAMIAuhIANBAXS4IgagIAK4IgijmyIHmUQAAAAAAADgQWMEQCAHqgwBC0GAgICAeAsiAgJ/IA4gDaEgBqAgCKObIgaZRAAAAAAAAOBBYwRAIAaqDAELQYCAgIB4CyIDajYCAEEAIQQCQEGAiwstAABBA0kNACAQIAM2AhwgECACNgIYIBAgETYCFCAQIAU2AhBB6PoGKAIAIgJBtrkEIBBBEGoQHRoDQCAEIAEoAghODQEgASgCBCAEQQR0aiIDKwMAIQYgECADKwMIOQMIIBAgBjkDACACQZeBBCAQEC0gBEEBaiEEDAALAAsgABDfAiAQQSBqJAAL2wMCAn8HfCMAQfAAayIDJAAgAkEBdLghByAAuCEIQQAhAgN/IAAgAkYEfwJAIAYgBqIgCEQAAAAAAABZQKJEAAAAAAAA8L+gIgdEAAAAAAAAEMCiIAmioCIFRAAAAAAAAAAAYwRAIAMgBTkDAEHd5wQgAxAxQX8hAgwBC0EBAn8gBZ8iCiAGoSAHIAegIgujIgiZRAAAAAAAAOBBYwRAIAiqDAELQYCAgIB4CyICIAJBAU0bIQJBgIsLLQAAQQNJDQBBm58EQRtBAUHo+gYoAgAiARBKGiADIAo5A2AgAyAFOQNYIAMgCTkDUCADIAc5A0AgAyAGOQNIIAFBj50EIANBQGsQLSADIAaaIAqhIAujIgU5AzggAwJ/IAWZRAAAAAAAAOBBYwRAIAWqDAELQYCAgIB4CzYCMCADIAI2AiAgAyAIOQMoIAFBo+YEIANBIGoQLSADIAkgByAIoiAIoiAGIAiioKA5AxAgAyAJIAcgBaIgBaIgBiAFoqCgOQMYIAFBjZ8EIANBEGoQLQsgA0HwAGokACACBSAJIAEgAkEFdGoiBCsDECAEKwMAoSAHoCIFIAQrAxggBCsDCKEgB6AiCqKhIQkgBiAFIAqgoSEGIAJBAWohAgwBCwsL8AIBA38gACAAQTBqIgIgACgCAEEDcUEDRhsoAigoAhAiASgCyAEgASgCzAEiAUEBaiABQQJqEP8BIQEgACACIAAoAgBBA3FBA0YbKAIoKAIQIAE2AsgBIAAgAiAAKAIAQQNxQQNGGygCKCgCECIBIAEoAswBIgNBAWo2AswBIAEoAsgBIANBAnRqIAA2AgAgACACIAAoAgBBA3FBA0YbKAIoKAIQIgIoAsgBIAIoAswBQQJ0akEANgIAIAAgAEEwayICIAAoAgBBA3FBAkYbKAIoKAIQIgEoAsABIAEoAsQBIgFBAWogAUECahD/ASEBIAAgAiAAKAIAQQNxQQJGGygCKCgCECABNgLAASAAIAIgACgCAEEDcUECRhsoAigoAhAiASABKALEASIDQQFqNgLEASABKALAASADQQJ0aiAANgIAIAAgAiAAKAIAQQNxQQJGGygCKCgCECICKALAASACKALEAUECdGpBADYCACAAC5wfAxF/DXwBfiMAQdACayIFJAACQAJAIABFDQAgAygCEEEDTQRAQej6BigCACENIAMoAhQhDgNAAkAgACAGRgRAQQAhBiAAQSAQGCEPDAELIAEgBkECdGooAgAiBxDLAgJAIA5FDQAgBiAOai0AAEEBRw0AIAcoAhAiCCsDECAIKwMYIAgrAyAgCCsDKBAwIRcQMCEYEDAhGhAwIRsCfCAERQRAIBchGSAYIRUgGiEWIBsMAQsgFyAZECQhGSAYIBUQJCEVIBogFhAyIRYgGyAcEDILIRwgBEEBaiEEC0GAiwstAABBA08EQCAHEB4hCCAHKAIQIgcrAxAhFyAHKwMYIRggBysDICEaIAUgBysDKDkDgAIgBSAaOQP4ASAFIBg5A/ABIAUgFzkD6AEgBSAINgLgASANQa+MBCAFQeABahAtCyAGQQFqIQYMAQsLA0AgACAGRwRAIA8gBkEFdGoiBCABIAZBAnRqKAIAKAIQIgcpAxA3AwAgBCAHKQMoNwMYIAQgBykDIDcDECAEIAcpAxg3AwggBkEBaiEGDAELCyAAIA8gAygCCBDTCCEIQYCLCy0AAARAIAUgCDYC0AEgDUHtuQQgBUHQAWoQHRoLIAhBAEwEQCAPEBcMAgsgBUIANwOoAiAFQgA3A6ACIA4EQCAFIBkgFqBEAAAAAAAA4D+iEDAiIDkDqAIgBSAVIBygRAAAAAAAAOA/ohAwIiE5A6ACCyAIuCEWIABBEBAYIREDQAJAAkACQCAAIAxHBEAgASAMQQJ0aigCACEGIBEgDEEEdGoiCiAMNgIMIAMoAhBBA0YEQCAGKAIQIQQgAygCCCEHIAYQHiEGIAUgBCkDKDcDeCAFIAQpAyA3A3AgBSAEKQMYNwNoIAQpAxAhIiAFIAUpA6gCNwNYIAUgIjcDYCAFIAUpA6ACNwNQIAVB4ABqIAogCCAHIAVB0ABqIAYQ0ggMBAsgAiAGIAIbIQsgAy0ADCESIAMoAgghExDsAyEJICAgBigCECIEKwMYEDChIRsgISAEKwMQEDChIRwgAygCEEEBRw0BQQAhByAGEDVBBBAYIRQgBhAaIQQDQCAEBEAgFCAHQQJ0aiAEKAIQIhAoAoABNgIAIBBBADYCgAEgB0EBaiEHIAYgBBAbIQQMAQUgE7ghHUEBIQcDQCAGKAIQIgQoArQBIAdOBEAgBCgCuAEgB0ECdGooAgAiECgCECIEKwMgIAQrAxAQMCEXEDAhFSAEKwMYIRkCQCAVIBdkRSAEKwMoEDAiGCAZEDAiGWRFcg0AIBwgFaAgHaAhFSAbIBigIB2gIRggGyAZoCAdoSIZIBajIBlEAAAAAAAA8D+gIBajRAAAAAAAAPC/oCAZRAAAAAAAAAAAZhsQMCEZAnwgHCAXoCAdoSIXRAAAAAAAAAAAZgRAIBcgFqMMAQsgF0QAAAAAAADwP6AgFqNEAAAAAAAA8L+gCxAwIRcgGCAWoyAYRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgGEQAAAAAAAAAAGYbEDAhGCAVIBajIBVEAAAAAAAA8D+gIBajRAAAAAAAAPC/oCAVRAAAAAAAAAAAZhsQMCEaA0AgGSEVIBcgGmUEQANAIBUgGGUEQCAJIBcgFRDMAiAVRAAAAAAAAPA/oCEVDAELCyAXRAAAAAAAAPA/oCEXDAEFIBAQGiEEA0AgBEUNAyAEKAIQIBA2AugBIBAgBBAbIQQMAAsACwALAAsgB0EBaiEHDAELCyAGEBohBwNAIAcEQCAFQcACaiAHEIkIIBsgBSsDyAIQMKAhGCAcIAUrA8ACEDCgIRoCQCAHKAIQIgQoAugBRQRAIBggBCsDUEQAAAAAAADgP6IgHaAQMCIeoSEVAnwgGiAEKwNYIAQrA2CgRAAAAAAAAOA/oiAdoBAwIh+hIhlEAAAAAAAAAABmBEAgGSAWowwBCyAZRAAAAAAAAPA/oCAWo0QAAAAAAADwv6ALIBUgFqMgFUQAAAAAAADwP6AgFqNEAAAAAAAA8L+gIBVEAAAAAAAAAABmGxAwIRkQMCEXIBggHqAiFSAWoyAVRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgFUQAAAAAAAAAAGYbEDAhHiAaIB+gIhUgFqMgFUQAAAAAAADwP6AgFqNEAAAAAAAA8L+gIBVEAAAAAAAAAABmGxAwIR8CfANAAkAgGSEVIBcgH2UEQANAIBUgHmUEQCAJIBcgFRDMAiAVRAAAAAAAAPA/oCEVDAELCyAXRAAAAAAAAPA/oCEXDAIFIBpEAAAAAAAAAABmRQ0BIBogFqMMAwsACwsgGkQAAAAAAADwP6AgFqNEAAAAAAAA8L+gCyEVIAUgGCAWoyAYRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgGEQAAAAAAAAAAGYbEDA5A7gCIAUgFRAwOQOwAiALIAcQKSEEA0AgBEUNAiAFIAUpA7gCNwOoASAFIAUpA7ACNwOgASAEIAVBoAFqIAkgHCAbIAggEkEBcRCHBiALIAQQLCEEDAALAAsgBSAYIBajIBhEAAAAAAAA8D+gIBajRAAAAAAAAPC/oCAYRAAAAAAAAAAAZhsQMDkDuAIgBSAaIBajIBpEAAAAAAAA8D+gIBajRAAAAAAAAPC/oCAaRAAAAAAAAAAAZhsQMDkDsAIgCyAHECkhBANAIARFDQEgBygCECgC6AEgBEFQQQAgBCgCAEEDcUECRxtqKAIoKAIQKALoAUcEQCAFIAUpA7gCNwO4ASAFIAUpA7ACNwOwASAEIAVBsAFqIAkgHCAbIAggEkEBcRCHBgsgCyAEECwhBAwACwALIAYgBxAbIQcMAQsLQQAhByAGEBohBANAIAQEQCAEKAIQIBQgB0ECdGooAgA2AoABIAdBAWohByAGIAQQGyEEDAELCyAUEBcMBAsACwALQQAhBiAAQQQQGCEBAkADQCAAIAZGBEACQCABIABBBEHQARCUARDsAyEKIABBEBAYIQIgDg0AQQAhBgNAIAAgBkYNBCAGIAEgBkECdGooAgAiBCAKIAIgBCgCDEEEdGogCCADKAIIIA8QhgYgBkEBaiEGDAALAAsFIAEgBkECdGogESAGQQR0ajYCACAGQQFqIQYMAQsLICCaIRUgIZohGUEAIQdBACEJA0AgACAJRgRAA0AgACAHRg0DIAcgDmotAABFBEAgByABIAdBAnRqKAIAIgYgCiACIAYoAgxBBHRqIAggAygCCCAPEIYGCyAHQQFqIQcMAAsABQJAIAkgDmotAABBAUcNACABIAlBAnRqKAIAIgQoAgQhBiAEKAIIIQsgAiAEKAIMQQR0aiIEIBU5AwggBCAZOQMAQQAhBCALQQAgC0EAShshDANAIAQgDEcEQCAFIAYpAwg3A0ggBSAGKQMANwNAIAogBUFAaxDoDiAEQQFqIQQgBkEQaiEGDAELC0GAiwstAABBAkkNACAFIBU5AzAgBSAZOQMoIAUgCzYCICANQYflBCAFQSBqEC0LIAlBAWohCQwBCwALAAsgARAXQQAhBgNAIAAgBkYEQCAREBcgChDfAiAPEBdBACEGQYCLCy0AAEEBTQ0IA0AgACAGRg0JIAIgBkEEdGoiASsDACEVIAUgASsDCDkDECAFIBU5AwggBSAGNgIAIA1BnJsEIAUQLSAGQQFqIQYMAAsABSARIAZBBHRqKAIEEBcgBkEBaiEGDAELAAsACyATuCEdIAYQGiEHA0AgB0UNASAFQcACaiAHEIkIIBsgBSsDyAIQMKAiGCAHKAIQIgQrA1BEAAAAAAAA4D+iIB2gEDAiHqEhFQJ8IBwgBSsDwAIQMKAiGiAEKwNYIAQrA2CgRAAAAAAAAOA/oiAdoBAwIh+hIhlEAAAAAAAAAABmBEAgGSAWowwBCyAZRAAAAAAAAPA/oCAWo0QAAAAAAADwv6ALIBUgFqMgFUQAAAAAAADwP6AgFqNEAAAAAAAA8L+gIBVEAAAAAAAAAABmGxAwIRkQMCEXIBggHqAiFSAWoyAVRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgFUQAAAAAAAAAAGYbEDAhHiAaIB+gIhUgFqMgFUQAAAAAAADwP6AgFqNEAAAAAAAA8L+gIBVEAAAAAAAAAABmGxAwIR8CfANAAkAgGSEVIBcgH2UEQANAIBUgHmUEQCAJIBcgFRDMAiAVRAAAAAAAAPA/oCEVDAELCyAXRAAAAAAAAPA/oCEXDAIFIBpEAAAAAAAAAABmRQ0BIBogFqMMAwsACwsgGkQAAAAAAADwP6AgFqNEAAAAAAAA8L+gCyEVIAUgGCAWoyAYRAAAAAAAAPA/oCAWo0QAAAAAAADwv6AgGEQAAAAAAAAAAGYbEDA5A7gCIAUgFRAwOQOwAiALIAcQKSEEA0AgBARAIAUgBSkDuAI3A8gBIAUgBSkDsAI3A8ABIAQgBUHAAWogCSAcIBsgCCASQQFxEIcGIAsgBBAsIQQMAQsLIAYgBxAbIQcMAAsACyAKIAkQ5w42AgQgCiAJEIcBNgIIAn8gBigCECIEKwMgIAQrAxChIBNBAXS4IhWgIBajmyIZmUQAAAAAAADgQWMEQCAZqgwBC0GAgICAeAshByAKIAcCfyAEKwMoIAQrAxihIBWgIBajmyIVmUQAAAAAAADgQWMEQCAVqgwBC0GAgICAeAsiBGo2AgACQEGAiwstAABBA0kNACAGEB4hBiAKKAIIIQsgBSAENgKcASAFIAc2ApgBIAUgCzYClAEgBSAGNgKQASANQba5BCAFQZABahAdGkEAIQQDQCAEIAooAghODQEgCigCBCAEQQR0aiIGKwMAIRUgBSAGKwMIOQOIASAFIBU5A4ABIA1Bl4EEIAVBgAFqEC0gBEEBaiEEDAALAAsgCRDfAgsgDEEBaiEMDAALAAsgAEEgEBghBANAIAAgBkYEQEEAIQICQCADKAIQQQRHDQACQCADLQAcQQJxRQ0AIAMgAEEEEBg2AhhBACEGA0AgACAGRg0BAkAgASAGQQJ0IgJqKAIAQaYWECMiB0UNACAFIAVBwAJqNgKQAiAHQbWyASAFQZACahBJQQBMDQAgBSgCwAIiB0EASA0AIAMoAhggAmogBzYCAAsgBkEBaiEGDAALAAsgACAEIAMQ0QghAiADLQAcQQJxRQ0AIAMoAhgQFwsgBBAXDAMFIAEgBkECdGooAgAiBxDLAiAEIAZBBXRqIgIgBygCECIHKQMQNwMAIAIgBykDKDcDGCACIAcpAyA3AxAgAiAHKQMYNwMIIAZBAWohBgwBCwALAAtBACECCyAFQdACaiQAIAILzwEBA38gABByIQMDQCADBEACQCADQbzeAEEAEGstAAgNAEEAIQQgAxAaIQADQCAABEAgASAAEB5BABBzIgUEQCAERQRAIAEgAxAeQQEQkAEhBAsgBCAFQQEQexoLIAMgABAbIQAMAQsLIAJFIARyRQRAIAEgAxAeQQEQkAEhBAsgBEUNACAEIAMQoQMaIAMgBBDSBSAEEM4BBEAgBEGSggFBDEEAEC4gAzYCCAtBASEAIAMgBCACBH9BAQUgAxDOAQsQ1ggLIAMQcSEDDAELCwvXAQEGfyMAQRBrIgMkAEHo+gYoAgAhBSABEHIhAgNAIAIEQAJAIAIQzgEEQCAAIAIQHkEBEHMiBEHI3gBBEEEBEC4aIAQoAhAgAjYCDCACEBohAQNAIAFFDQIgAUHI3gBBABBrKAIMBEAgARAeIQYgAhAeIQcgAyABQcjeAEEAEGsoAgwQHjYCCCADIAc2AgQgAyAGNgIAIAVBre8EIAMQHRoLIAFByN4AQQAQayAENgIMIAIgARAbIQEMAAsACyAAIAIQ1wgLIAIQcSECDAELCyADQRBqJAALKAAgAEGSggFBABBrIgBFBEBBlNkAQby4AUGYA0H0FxAAAAsgACgCCAvNAQEEfyMAQRBrIgQkACABQQEgACgCEBEAABoCQCAAKAIEIgIgACgCCEcEQCAAKAIAIQMMAQsCQCAEIAJBAXRBASACGyICQf////8DSwR/QcQABSAAKAIAIAJBAnQQPSIDDQFBMAsQowE2AgBB6PoGKAIAQbv0AyAEEB0aECYACyADIAAoAggiBUECdGpBACACIAVrQQJ0EDMaIAAgAjYCCCAAIAM2AgAgACgCBCECCyADIAJBAnRqIAE2AgAgACACQQFqNgIEIARBEGokAAtCAQJ/IwBBEGsiAiQAIAEoAhAhAyACIAAoAhApAtABNwMIIAIgAykC2AE3AwAgACACQQhqIAEgAhDbCCACQRBqJAALrQEBA38CQAJAIAEoAgQiBUUNACADKAIEIgZFDQAgBSAGTwRAIAMoAgAhAkEAIQEDQCACIAFBAnRqKAIAIgRFDQMgAUEBaiEBIARBMEEAIAQoAgBBA3FBA0cbaigCKCAARw0ACwwBCyABKAIAIQBBACEBA0AgACABQQJ0aigCACIERQ0CIAFBAWohASAEQVBBACAEKAIAQQNxQQJHG2ooAiggAkcNAAsLIAQPC0EAC1QBAX8gACgCACEBA0ACQCABLQAAIgFFBEAgABCLBiIBRQ0BCyABQf8BcUEJayIBQRdLQQEgAXRBn4CABHFFcg0AIAAgACgCAEEBaiIBNgIADAELCwvRAgEFfyMAQRBrIgUkAAJAAkAgABAhIAAQOE8EQCAAEDgiBEEBaiICIARBAXRBgAggBBsiAyACIANLGyECIAAQISEGAkAgAC0AD0H/AUYEQCAEQX9GDQMgACgCACEDIAJFBEAgAxAXQQAhAwwCCyADIAIQPSIDRQ0EIAIgBE0NASADIARqQQAgAiAEaxAzGgwBCyACQQEQGCIDIAAgBhAgGiAAIAY2AgQLIABB/wE6AA8gACACNgIIIAAgAzYCAAsgABAhIQICQCAAECUEQCAAIAJqIAE6AAAgACAALQAPQQFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAAKAIAIAJqIAE6AAAgACAAKAIEQQFqNgIECyAFQRBqJAAPC0GRtANB3v0AQc0AQZOzARAAAAsgBSACNgIAQej6BigCAEGp3QMgBRAdGhAmAAuhAgEDfyMAQSBrIgIkAAJAAkAgAARAIAAoAggiAUUNASABLQAARQ0CAn8CQCAAKAIUIgNFBEAgARDhBSIBRQRAIAIgACgCCDYCAEHCpgQgAhAnQQAMAwsgACABQbG+ARCgBCIDNgIUIANFBEBB5JQLKAIAEKMBIQAgAiABNgIUIAIgADYCEEGs7AMgAkEQahAnQQAMAwtBpIgLKAIAIgFBMkgNASAAQQE6ABFBAQwCCyADQQBBABDLARpBASAAKAIUDQEaQf+FAUG5vAFBiQVB4SgQAAALQaSICyABQQFqNgIAQQELIAJBIGokAA8LQb8mQbm8AUH0BEHhKBAAAAtBvZgBQbm8AUH1BEHhKBAAAAtB1cQBQbm8AUH2BEHhKBAAAAtXAQJ/AkAgAARAIAAtAABFDQFBoIgLKAIAIgEEfyABIABBgAQgASgCABEDAAVBAAsPC0GRmQFBubwBQeQEQcekARAAAAtB2cQBQbm8AUHlBEHHpAEQAAALRAECfwJAIAAoAgAgASgCACAAKAIEIgAgASgCBCICIAAgAkkiAxsQ1wEiAQ0AQQEhASAAIAJLDQBBf0EAIAMbIQELIAELHgAgAEUEQEGDzwFB7fsAQQhBs4gBEAAACyAAKAIECwgAQYADEOUKC50QAgZ/CnwjAEGAAWsiByQAAkAgAQRAIAEtAAAEQCAAKAI8IQggARDfCCIJRQRAIAEQkwhFIAhFcg0DIAgoAnQiBUUNAyAAIAEgAiADIAQgBREJAAwDCyAHIAApA7gDNwNIIAcgACkDsAM3A0AgB0FAayEBAkAgCUUEQCAHQn83AmAMAQsgASsDCCENIAcCfyAJKwMwRAAAAAAAAFJAoiAJKAJAIgq3Ig4gASsDACAKG6MiEJlEAAAAAAAA4EFjBEAgEKoMAQtBgICAgHgLNgJgIAcCfyAJKwM4RAAAAAAAAFJAoiAOIA0gChujIg2ZRAAAAAAAAOBBYwRAIA2qDAELQYCAgIB4CzYCZAsgBygCYCIKQQBMIAcoAmQiC0EATHENAiAHIAIpAwg3A3ggByACKQMANwNwIAcgAikDCDcDaCAHIAIpAwA3A2BBASADIANBAU0bIQMgBysDeCERIAcrA2ghEiAHKwNwIRAgBysDYCEOQQEhAQNAIAEgA0YEQCAHIBI5A2ggByAROQN4IBEgEqEhFSALtyENIAcgDjkDYCAHIBA5A3AgECAOoSEUIAq3IQ8CQCAFLQAARQ0AIBQgD6MhFgJAIAVB1fcAECpFDQAgFSANoyETAkAgBUHOHxAqBEAgBUH29gAQKkUNASAFEGpFDQMgEyAWZARAIBYgDaIhDQwDCyATIA2iIQ0gEyAPoiEPDAMLIBMgDaIhDQwCCyATIA2iIQ0LIBYgD6IhDwtBBCEBAkAgBi0AAEUNACAGQczsABAqRQRAQQAhAQwBCyAGQb6yARAqRQRAQQEhAQwBCyAGQf80ECpFBEBBAiEBDAELIAZB5e0AECpFBEBBAyEBDAELIAZBx7MBECpFDQAgBkGFNxAqRQRAQQUhAQwBCyAGQb3wABAqRQRAQQYhAQwBCyAGQYq2ARAqRQRAQQchAQwBC0EEQQggBkHwOhAqGyEBCyAPIBRjBEAgBwJ8AkAgAUEISw0AQQEgAXQiAkHJAHFFBEAgAkGkAnFFDQEgByAUIA+hIA6gIg45A2ALIA8gDqAMAQsgByAUIA+hRAAAAAAAAOA/oiIPIA6gIg45A2AgECAPoQsiEDkDcAsCQCANIBVjRQ0AAkACQAJAIAEOCQAAAAICAgEBAQILIAcgESANoTkDaAwCCyAHIA0gEqAiDzkDaCAHIA8gDaE5A3gMAQsgByARIBUgDaFEAAAAAAAA4D+iIg2hOQN4IAcgDSASoDkDaAsgAC0AmQFBIHFFBEAgByAHKQNoNwM4IAcgBykDYDcDMCAHQdAAaiIBIAAgB0EwahCYBiAHIAcpA1g3A2ggByAHKQNQNwNgIAcgBykDeDcDKCAHIAcpA3A3AyAgASAAIAdBIGoQmAYgByAHKQNYNwN4IAcgBykDUDcDcCAHKwNwIRAgBysDYCEOCyAOIBBkBEAgByAOOQNwIAcgEDkDYAsgBysDaCINIAcrA3giDmQEQCAHIA05A3ggByAOOQNoCyAIRQ0EIAAoAkghAiAHIAcpA3g3AxggByAHKQNwNwMQIAcgBykDaDcDCCAHIAcpA2A3AwAjAEHQAGsiASQAIAFCADcDSCABQgA3A0ACQAJAAkACQCAABEAgCUUNASAJKAIIIgNFDQIgAy0AAEUNAyAJKAIcIQMgASACNgI0IAEgAzYCMCABQUBrIQIjAEEQayIDJAAgAyABQTBqIgU2AgQgAyAFNgIMIAMgBTYCCAJAAkACQAJAQQBBAEGNMyAFEE4iBkEASA0AIAZBAWohBSAGIAIQOCACECFrIghPBEAgAiAFIAhrENEBCyACECEhCCAGIAIQJQR/IAIgCGoFIAIoAgAgCGoLIAVBjTMgAygCDBBOIgVHIAVBAE5xDQEgBUEATA0AIAIQJQRAIAVBgAJPDQMgAiACLQAPIAVqOgAPIAIQIUEQSQ0BQb+uA0GP/QBBxAFB2R0QAAALIAIgAigCBCAFajYCBAsgA0EQaiQADAILQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALIAIQISACEDhPBEAgAkEBENEBCyABQUBrIgIQISEDAkAgAhAlBEAgAiADakEAOgAAIAEgAS0AT0EBajoATyACECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgASgCQCADakEAOgAAIAEgASgCREEBajYCRAsCQCABQUBrECUEQCABQQA6AE8MAQsgAUEANgJECyABQUBrIgIQJSEDAkAgACgCAEEEIAIgASgCQCADGyICQQAQuQMiAwRAIAAgAygCECIDKAIMIgI2AlwgACADKAIANgJgDAELIAEgAjYCIEHD7AQgAUEgahAnIAAoAlwhAgsCQCACRQ0AIAIoAgAiAkUNACABIAcpAxg3AxggASAHKQMQNwMQIAEgBykDCDcDCCABIAcpAwA3AwAgACAJIAEgBCACEQgACyABLQBPQf8BRgRAIAEoAkAQFwsgAUHQAGokAAwEC0HBvgFB77wBQTFBqJ0BEAAAC0G/JkHvvAFBMkGonQEQAAALQb2YAUHvvAFBM0GonQEQAAALQdXEAUHvvAFBNEGonQEQAAALDAQFIBEgAiABQQR0aiIMKwMIIg0gDSARYxshESAQIAwrAwAiDyAPIBBjGyEQIBIgDSANIBJkGyESIA4gDyAOIA9jGyEOIAFBAWohAQwBCwALAAtB2cQBQbK5AUGtBUHplQEQAAALQZGZAUGyuQFBrAVB6ZUBEAAACyAHQYABaiQAC+EBAQZ/IABBMEEAIAAoAgBBA3EiAkEDRxtqIQUgAEFQQQAgAkECRxtqKAIoKAIQKALAASEGQQAhAANAIAYgA0ECdGooAgAiAgRAAkAgAkEwQQAgAigCAEEDcUEDRxtqKAIoKAIQKAL4ASIHIAUoAigoAhAoAvgBayABbEEATA0AIAIoAhAiBCgCCEUEQCAEKAJ4IgRFDQEgBCgCECgCCEUNAQsgAARAIABBMEEAIAAoAgBBA3FBA0cbaigCKCgCECgC+AEgB2sgAWxBAEwNAQsgAiEACyADQQFqIQMMAQsLIAALuhsDCH8JfAF+IwBBMGsiByQAIAJBBDYCICACIAE2AgAgASEEIwBBIGsiBiQAIAZCADcDGCAGQgA3AxADQCAELQAAIgMEQCAGQRBqIANBIGogAyADwEHBAGtBGkkbwBCUAiAEQQFqIQQMAQsLAkAgBkEQaiIEECUEQCAEIAQQISIDEMUCIgQNASAGIANBAWo2AgBB6PoGKAIAQandAyAGEB0aECYACyAGQRBqQQAQlAIgBigCECEECyAGQSBqJAAgBAJAIAAoAhAiBgRAIAQgBiAAKAIUQQRBygEQ4QMNAQsgASEEIAAoAhghCCMAQdABayIDJAAgAiAINgIgA0AgBCIAQQFqIQQgAC0AACIFQSBGDQALIANB/wE2AngCQAJAAkACQAJAAkACQCAFQSNGBEAgAyADQfgAajYCbCADIANB/ABqNgJoIAMgA0GAAWo2AmQgAyADQYQBajYCYCAAQdwSIANB4ABqEElBAkoNASAALQAAIQULAkACQCAFQf8BcUEjRw0AQSMhBSAAEDdBBEcNACADIANB/ABqNgJYIAMgA0GAAWo2AlQgAyADQYQBajYCUCAAQeoSIANB0ABqEElBA0YNASAALQAAIQULIAVB/wFxQS5HIAXAQTBrQQlLcQ0DIANCADcDyAEgA0IANwPAASAAIQYDQCAFQf8BcSIKRQ0DIANBwAFqQSAgBSAKQSxGG8AQlAIgBi0AASEFIAZBAWohBgwACwALIAMgAygChAEiAEEEdCAAcjYChAEgAyADKAKAASIAQQR0IAByNgKAASADIAMoAnwiAEEEdCAAcjYCfAtBACEAAkACQAJAAkAgCA4GAAYBAgkJAwsgAygChAG4RAAAAAAA4G9AoyINIAMoAoABuEQAAAAAAOBvQKMiDiADKAJ8uEQAAAAAAOBvQKMiDxAkECQhCyADKAJ4uEQAAAAAAOBvQKMhEgJAIAtEAAAAAAAAAABkRQ0AIAsgDSAOIA8QMhAyoSIQIAujIhFEAAAAAAAAAABkRQ0AAnwgCyAPoSAQoyIMIAsgDqEgEKMiE6EgC70iFCANvVENABogCyANoSAQoyINRAAAAAAAAABAoCAMoSAUIA69UQ0AGkQAAAAAAAAAACAPvSAUUg0AGiATRAAAAAAAABBAoCANoQtEAAAAAAAATkCiIgxEAAAAAAAAAABjRQ0AIAxEAAAAAACAdkCgIQwLIAIgEjkDGCACIAs5AxAgAiAROQMIIAIgDEQAAAAAAIB2QKM5AwAMCAsgAiADKAKEAUH//wNsQf8BbjYCACACIAMoAoABQf//A2xB/wFuNgIEIAIgAygCfEH//wNsQf8BbjYCCCACIAMoAnhB//8DbEH/AW42AgwMBwsgAiADKAKEAbhEAAAAAADgb0CjOQMAIAIgAygCgAG4RAAAAAAA4G9AozkDCCACIAMoAny4RAAAAAAA4G9AozkDECACIAMoAni4RAAAAAAA4G9AozkDGAwGCyADQZgCNgIEIANBhrwBNgIAQej6BigCAEHWsQQgAxAdGhBuAAsgA0KAgICAgICA+D83A6ABIANBwAFqEJ8BIAMgA0GgAWo2AkwgAyADQagBajYCSCADIANBsAFqNgJEIAMgA0G4AWo2AkBBuoQBIANBQGsQSUEDTgRAIAMgAysDuAFEAAAAAAAA8D8QMkQAAAAAAAAAABAkIgs5A7gBIAMgAysDsAFEAAAAAAAA8D8QMkQAAAAAAAAAABAkIgw5A7ABIAMgAysDqAFEAAAAAAAA8D8QMkQAAAAAAAAAABAkIg05A6gBIAMgAysDoAFEAAAAAAAA8D8QMkQAAAAAAAAAABAkIg45A6ABAkACQAJAAkACQAJAIAgOBgQAAQIFBQMLIAsgDCANIANBmAFqIANBkAFqIANBiAFqEIAGIAICfyADKwOYAUQAAAAAAOBvQKIiC0QAAAAAAADwQWMgC0QAAAAAAAAAAGZxBEAgC6sMAQtBAAs6AAAgAgJ/IAMrA5ABRAAAAAAA4G9AoiILRAAAAAAAAPBBYyALRAAAAAAAAAAAZnEEQCALqwwBC0EACzoAASACAn8gAysDiAFEAAAAAADgb0CiIgtEAAAAAAAA8EFjIAtEAAAAAAAAAABmcQRAIAurDAELQQALOgACIAICfyADKwOgAUQAAAAAAOBvQKIiC0QAAAAAAADwQWMgC0QAAAAAAAAAAGZxBEAgC6sMAQtBAAs6AAMMBAsgCyAMIA0gA0GYAWogA0GQAWogA0GIAWoQgAYgAgJ/IAMrA5gBRAAAAADg/+9AoiILmUQAAAAAAADgQWMEQCALqgwBC0GAgICAeAs2AgAgAgJ/IAMrA5ABRAAAAADg/+9AoiILmUQAAAAAAADgQWMEQCALqgwBC0GAgICAeAs2AgQgAgJ/IAMrA4gBRAAAAADg/+9AoiILmUQAAAAAAADgQWMEQCALqgwBC0GAgICAeAs2AgggAgJ/IAMrA6ABRAAAAADg/+9AoiILmUQAAAAAAADgQWMEQCALqgwBC0GAgICAeAs2AgwMAwsgCyAMIA0gA0GYAWogA0GQAWogA0GIAWoQgAYgAiADKwOYATkDACACIAMrA5ABOQMIIAIgAysDiAE5AxAgAiADKwOgATkDGAwCCyADQcwCNgI0IANBhrwBNgIwQej6BigCAEHWsQQgA0EwahAdGhBuAAsgAiAOOQMYIAIgDTkDECACIAw5AwggAiALOQMACyADQcABahBmQQAhAAwFCyADQcABahBmCyAAQe30ABBDRQ0BIABBz5EBEENFDQEgAEHyDRBDRQ0BIANCADcDyAEgA0IANwPAAQJAIAAtAABBL0YEQCAEQS8QkwEiBkUEQCAEIQAMAgsgBC0AAEEvRgRAAkBBuIgLKAIAIgRFDQAgBC0AAEUNAEGZlwMgBEEDEPgBRQ0AIANBwAFqIAQgAEECahDICCEADAMLIABBAmohAAwCCyAAIAZBAWpBmZcDIARBBBD4ARshAAwBC0G4iAsoAgAiBEUNACAELQAARQ0AQZmXAyAEQQMQ+AFFDQAgA0HAAWogBCAAEMgIIQALIAAQpAEhACADQcABahBmDAILIAIgAygChAE6AAAgAiADKAKAAToAASACIAMoAnw6AAIgAiADKAJ4OgADDAILIAAQpAEhAAsgAEUEQEF/IQAMAQsCQEG0iAsoAgAiBQRAIAUoAgAgABAqRQ0BC0G0iAsgAEHAqQhB0xNBDEHlARDhAyIFNgIACyAAEBcgBQRAQQAhAAJAAkACQAJAAkAgCA4GAAECAwYGBAsgAiAFLQAEuEQAAAAAAOBvQKM5AwAgAiAFLQAFuEQAAAAAAOBvQKM5AwggAiAFLQAGuEQAAAAAAOBvQKM5AxAgAiAFLQAKuEQAAAAAAOBvQKM5AxgMBQsgAiAFLQAHOgAAIAIgBS0ACDoAASACIAUtAAk6AAIgAiAFLQAKOgADDAQLIAIgBS0AB0GBAmw2AgAgAiAFLQAIQYECbDYCBCACIAUtAAlBgQJsNgIIIAIgBS0ACkGBAmw2AgwMAwsgAiAFLQAHuEQAAAAAAOBvQKM5AwAgAiAFLQAIuEQAAAAAAOBvQKM5AwggAiAFLQAJuEQAAAAAAOBvQKM5AxAgAiAFLQAKuEQAAAAAAOBvQKM5AxgMAgsgA0H8AjYCJCADQYa8ATYCIEHo+gYoAgBB1rEEIANBIGoQHRoQbgALQQEhAAJAAkACQAJAAkAgCA4GAAECAwUFBAsgAkIANwMAIAJCgICAgICAgPg/NwMYIAJCADcDECACQgA3AwgMBAsgAkGAgIB4NgIADAMLIAJCgICAgPD/PzcDCCACQgA3AwAMAgsgAkIANwMAIAJCgICAgICAgPg/NwMYIAJCADcDECACQgA3AwgMAQsgA0GZAzYCFCADQYa8ATYCEEHo+gYoAgBB1rEEIANBEGoQHRoQbgALIANB0AFqJAACQAJAIAAOAgIAAQsgB0IANwMoIAdCADcDICAHIAE2AhAgB0EgaiEAIwBBEGsiAiQAIAIgB0EQaiIENgIEIAIgBDYCDCACIAQ2AggCQAJAAkACQEEAQQBBgDQgBBBOIgZBAEgNACAGQQFqIQQgBiAAEDggABAhayIDTwRAIAAgBCADaxC4AgsgABAhIQMgBiAAECUEfyAAIANqBSAAKAIAIANqCyAEQYA0IAIoAgwQTiIERyAEQQBOcQ0BIARBAEwNACAAECUEQCAEQYACTw0DIAAgAC0ADyAEajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgBGo2AgQLIAJBEGokAAwCC0HNlgNBj/0AQb8BQdkdEAAAC0HSyQFBj/0AQcIBQdkdEAAACyAAECEgABA4TwRAIABBARC4AgsgB0EgaiIAECEhAgJAIAAQJQRAIAAgAmpBADoAACAHIActAC9BAWo6AC8gABAhQRBJDQFBv64DQY/9AEGIAkG4sgEQAAALIAcoAiAgAmpBADoAACAHIAcoAiRBAWo2AiQLAkAgB0EgahAlBEAgB0EAOgAvDAELIAdBADYCJAsgB0EgaiIAECUhAiAAIAcoAiAgAhsQtwgEQCAHIAE2AgBB5NMEIAcQJwsgBy0AL0H/AUcNASAHKAIgEBcMAQtB1+gEQQAQMQsQFyAHQTBqJAALIgEBfwJAIAAoAjwiAUUNACABKAJUIgFFDQAgACABEQEACwvhAQEGfyAAQVBBACAAKAIAQQNxIgJBAkcbaiEFIABBMEEAIAJBA0cbaigCKCgCECgCyAEhBkEAIQADQCAGIANBAnRqKAIAIgIEQAJAIAJBUEEAIAIoAgBBA3FBAkcbaigCKCgCECgC+AEiByAFKAIoKAIQKAL4AWsgAWxBAEwNACACKAIQIgQoAghFBEAgBCgCeCIERQ0BIAQoAhAoAghFDQELIAAEQCAAQVBBACAAKAIAQQNxQQJHG2ooAigoAhAoAvgBIAdrIAFsQQBMDQELIAIhAAsgA0EBaiEDDAELCyAACyQBAX8CQCAAKAI8IgJFDQAgAigCUCICRQ0AIAAgASACEQQACwsiAQF/AkAgACgCPCIBRQ0AIAEoAjQiAUUNACAAIAERAQALC0oCAXwBfwJAIAEoAhAiASsDECICIAAoAhAiACsDEGZFDQAgAiAAKwMgZUUNACABKwMYIgIgACsDGGZFDQAgAiAAKwMoZSEDCyADC4wEAQZ/IwBBIGsiBCQAAkACQAJAIAFEAAA0JvVrDMNjBEAgAEGAqQgQ3wQMAQsgAUQAADQm9WsMQ2QEQCAAQYGpCBDfBAwBCyAEIAE5AxAgAEGFhgEgBEEQahDeBCAAEOcEIQUgABAhIQICQANAIAIiA0UNASAFIAJBAWsiAmotAABBLkcNAAsgABAhIQIDQCACQQFrIQcgAiADRwRAIAUgB2otAABBMEcNAgsCQCAAECUEQCAALQAPIgZFDQUgACAGQQFrOgAPDAELIAAgACgCBEEBazYCBAsgAiADRyAHIQINAAsgABAhIgJBAkkNACACIAVqIgJBAmsiAy0AAEEtRw0AIAJBAWstAABBMEcNACADQTA6AAAgABAlBEAgAC0ADyICRQ0EIAAgAkEBazoADwwBCyAAIAAoAgRBAWs2AgQLAkAgABAlBEAgACAAECEiAxDFAiICDQEgBCADQQFqNgIAQej6BigCAEGp3QMgBBAdGhAmAAsgAEEAEJQCIAAoAgAhAgsgAEIANwIAIABCADcCCAJAIAJBo5gDELoCBEAgAiACQQFqIAIQNxCPARoMAQsgAkGimAMQugJFDQAgAkEBaiIDIAJBAmogAxA3EI8BGgsgACACEN8EIAIQFwsgBEEgaiQADwtBkokDQY/9AEHkAkHqKhAAAAtBkokDQY/9AEH6AkHqKhAAAAuHAQEBfyAALQCZAUEEcUUEQAJAIAAoAkwiAUUNACABKAIIIgFFDQAgACABEQEADwsgABCZBhoCQCAAKAIgRQ0AIAAoAiQiAUHw+gYoAgBGDQAgAC0AkAENACABBEAgARDfAyAAQQA2AiQLIABBADYCIAsPC0Gj0gNBACAAKAIMKAIQEQQAECYAC4cCAQN/IwBBEGsiAyQAIAMgAjYCDCADIAI2AggCQAJAAkBBAEEAIAEgAhBOIgRBAEgEQCAEIQIMAQsgBEEBaiECIAQgABA4IAAQIWsiBU8EQCAAIAIgBWsQ0QELIAAQISEFIAQgABAlBH8gACAFagUgACgCACAFagsgAiABIAMoAgwQTiICRyACQQBOcQ0BIAJBAEwNACAAECUEQCACQYACTw0DIAAgAC0ADyACajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAmo2AgQLIANBEGokACACDwtBzZYDQY/9AEG/AUHZHRAAAAtB0skBQY/9AEHCAUHZHRAAAAvGAgEFfwJAIAEoAhAiAS0ArAFFBEAgASgC6AEiAyEEDAELIAEoAsgBKAIAKAIQKAJ4IgFBUEEAIAEoAgBBA3EiA0ECRxtqKAIoKAIQKALoASEEIAFBMEEAIANBA0cbaigCKCgCECgC6AEhAwsgAigCECIBLQCsAUUEQCABKALoASIBQQAgACABRxsiAEEAIAAgBEcbQQAgACADRxtBACAAGw8LAkACQCABKALIASgCACgCECgCeCIGQTBBACAGKAIAQQNxIgdBA0cbaigCKCgCECgC6AEiAUEAIAAgAUcbIgVFIAMgBUZyIAQgBUZyRQRAIAUgAhDqCA0BCyAGQVBBACAHQQJHG2ooAigoAhAoAugBIgFBACAAIAFHGyIARSAAIANGcg0BQQAhASAAIARGDQAgAEEAIAAgAhDqCBshAQsgAQ8LQQALZwECfyMAQRBrIgMkAANAAkAgAS0AACICQdwARwRAIAIEQCACwCICQQBOBEAgACACEGIMAwsgAyACNgIAIABBk98AIAMQHAwCCyADQRBqJAAPCyAAQfHEARAZGgsgAUEBaiEBDAALAAtLACAAQQEgAUEAELkDIgFFBEBB5wcPCyAAIAEoAhAiASgCBDYCsAEgACABKAIMNgKkASAAIAEoAgA2AqgBIAAgASgCEDYCrAFBrAILnwQBCH8gACgCECgCxAEgASgCECIIKAL0AUEGdGohCSAIKAL4ASIKIQcCQANAAkAgBCAHaiIHQQBIDQAgByAJKAIATg0AAkACQCAJKAIEIAdBAnRqKAIAIgsoAhAiAS0ArAEOAgQAAQsgASgCeA0DCyABKAL4ASEMAkAgASgCzAFBAUcEQCAIKALMAUEBRw0EDAELIANFDQAgASgCyAEoAgAhAEEAIQYgAyEFA0AgBkECRg0BIABBUEEAIAAoAgBBA3FBAkcbaigCKCIAIAVBUEEAIAUoAgBBA3FBAkcbaigCKCIFRg0BIAogDEggACgCECIAKAL4ASAFKAIQIgUoAvgBTEYNAyAAKALMAUEBRw0BIAAtAKwBRQ0BIAUoAswBQQFHDQEgBS0ArAFFDQEgACgCyAEoAgAhACAGQQFqIQYgBSgCyAEoAgAhBQwACwALIAJFDQIgASgCxAFBAUcNAiABKALAASgCACEBQQAhBSACIQADQCAFQQJGDQMgAUEwQQAgASgCAEEDcUEDRxtqKAIoIgEgAEEwQQAgACgCAEEDcUEDRxtqKAIoIgZGDQMgCiAMSCABKAIQIgAoAvgBIAYoAhAiBigC+AFMRg0CIAAoAsQBQQFHDQMgAC0ArAFFDQMgBigCxAFBAUcNAyAGLQCsAUUNAyAAKALAASgCACEBIAVBAWohBSAGKALAASgCACEADAALAAsLQQAhCwsgCwu4AQIDfwF8IwBBMGsiBCQAA0AgAiAFRgRAIAMEQCABKwMAIQcgBCABKwMIOQMIIAQgBzkDACAAQdGdAyAEEBwLIABB4vQEEBkaIARBMGokAAUCQCAFRQRAIAErAwAhByAEIAErAwg5AxggBCAHOQMQIABBo50DIARBEGoQHAwBCyABIAVBBHRqIgYrAwAhByAEIAYrAwg5AyggBCAHOQMgIABB0Z0DIARBIGoQHAsgBUEBaiEFDAELCwtzAQF/IAAQISAAEDhPBEAgAEEBENEBCyAAECEhAQJAIAAQJQRAIAAgAWpBADoAACAAIAAtAA9BAWo6AA8gABAhQRBJDQFBv64DQY/9AEGIAkG4sgEQAAALIAAoAgAgAWpBADoAACAAIAAoAgRBAWo2AgQLCyQAIAAgASACQQBBARBSIgBB+SVBuAFBARAuGiADIAAQ0gUgAAuuBAEFfyMAQSBrIgIkACAAIAEQHkEBEHMiBUGGJkHAAkEBEC4aIAEgBRDSBQJAIAEQ/gJBAkcNACACQgA3AxggAkIANwMQIAIgASgCECgCeCgCADYCACACQRBqIQAjAEEQayIBJAAgASACNgIEIAEgAjYCDCABIAI2AggCQAJAAkACQEEAQQBBjAggAhBOIgZBAEgNACAGQQFqIQMgBiAAEDggABAhayIETwRAIAAgAyAEaxDrAQsgABAhIQQgBiAAECUEfyAAIARqBSAAKAIAIARqCyADQYwIIAEoAgwQTiIDRyADQQBOcQ0BIANBAEwNACAAECUEQCADQYACTw0DIAAgAC0ADyADajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgA2o2AgQLIAFBEGokAAwCC0HNlgNBj/0AQb8BQdkdEAAAC0HSyQFBj/0AQcIBQdkdEAAACyAAECEgABA4TwRAIABBARDrAQsgAkEQaiIAECEhAQJAIAAQJQRAIAAgAWpBADoAACACIAItAB9BAWo6AB8gABAhQRBJDQFBv64DQY/9AEGIAkG4sgEQAAALIAIoAhAgAWpBADoAACACIAIoAhRBAWo2AhQLAkAgAkEQahAlBEAgAkEAOgAfDAELIAJBADYCFAsgAkEQaiIAECUhASAFQarwACAAIAIoAhAgARsQ5QEgAi0AH0H/AUcNACACKAIQEBcLIAJBIGokACAFC4ACAgF/BHwjAEEgayIHJAAgByAAIAEgA0EAIAQQiQMgBSAHKQMYNwMYIAUgBykDEDcDECAFIAcpAwg3AwggBSAHKQMANwMAIAVBATYCMCAFKwMQIQggBSsDACEJAkAgBgRAIAIgBEECIAVBABDnBQwBCyACIARBAiAFQQAQ5gULAkAgCCAJZEUNACADKAIQIgErAxggACgCECgCxAEgASgC9AFBBnRqKwMYoSIKIAVBOGoiASAFKAI0IgBBBXRqQRhrKwMAIgtjRQ0AIAUgAEEBajYCNCABIABBBXRqIgAgCzkDGCAAIAg5AxAgACAKOQMIIAAgCTkDAAsgB0EgaiQAC78BAQN/IwBBIGsiAiQAAkACQAJAAkACQCABKAIgQQFrDgQBAgIAAgsgASgCACIBQan5BBBDDQIgAEGc+QQQGRoMAwsgAS0AA0UEQCAAQZz5BBAZGgwDCyABLQAAIQMgAS0AASEEIAIgAS0AAjYCGCACIAQ2AhQgAiADNgIQIABBzhIgAkEQahAcDAILIAJBhgE2AgQgAkGeuwE2AgBB6PoGKAIAQdaxBCACEB0aEG4ACyAAIAEQGRoLIAJBIGokAAsLACAAQbefBBAZGgsnAQF/IwBBEGsiAiQAIAJBADYCDCABIAJBDGogABC5BCACQRBqJAALJQEBfyMAQRBrIgIkACACIAE2AgAgAEG69gMgAhAcIAJBEGokAAsNACAAIAFB9oYBEO4KC4gBAgN/AXwjAEEgayIEJAADQCACIAVGBEAgAwRAIAErAwAhByAEIAErAwg5AwggBCAHOQMAIABB9oYBIAQQHAsgAEHi9AQQGRogBEEgaiQABSABIAVBBHRqIgYrAwAhByAEIAYrAwg5AxggBCAHOQMQIABB9oYBIARBEGoQHCAFQQFqIQUMAQsLC5oCAgR/A3wgAEFQQQAgACgCAEEDcUECRxtqIQJBACEAA0ACQCACKAIoIgQoAhAtAKwBQQFHDQAgBEG89QcoAgARAgANACAAIAEoAlAiAiAAIAJLGyEFA0AgACAFRg0BIAQoAhAiAisDGCIGIAEoAlQgAEEFdGoiAysDCGMEQCAAQQFqIQAMAQsLAkAgAysDGCAGYw0AIAMrAxAhBiADKwMAIQcgAigCeARAIAIgBjkDECACIAYgB6E5A1ggAiAGIAIrA2CgIAahOQNgDAELIAIgByAGoEQAAAAAAADgP6IiCDkDECACIAYgCKE5A2AgAiAIIAehOQNYCyACKALIASgCACICQVBBACACKAIAQQNxQQJHG2ohAgwBCwsLiwEBA38jAEEQayIEJAAgAEGAxQFBABAcIAFBACABQQBKGyEFQQAhAQNAIAEgBUcEQCABBEAgAEG+mANBABAcCyAEIAIgAUEDdGoiBioCALs5AwAgAEGEvwMgBBAcIAYoAgQgAyAAEJYCIABB/QAQYiABQQFqIQEMAQsLIABBqMAEQQAQHCAEQRBqJAALNQAgACABQQAgAhCBCSAAEHIhAANAIAAEQCABQfbfBBAZGiAAIAEgAhD/CCAAEHEhAAwBCwsLnAIBBX8jAEEgayIEJAACQAJAAkAgABA0IABGDQAgAEGxqQFBABBrIAE2AgggABAeIgNFDQEgAUEBaiEBIANBtDdBBxDXAQ0AIAAQHiEDIABBsakBQQAQaygCCCEGIAIgA0GABCACKAIAEQMAIgUEQCAFKAIMIAZGDQEgBCADNgIQQa/tBCAEQRBqECcMAQtBAUEQEJYEIQUgAxCkASIHRQ0CIAUgBjYCDCAFIAc2AgggAiAFQQEgAigCABEDABoLIAAQciEAA0AgAARAIAAgASACEIAJIQEgABBxIQAMAQsLIARBIGokACABDwtBoc8BQdb8AEEMQfv2ABAAAAsgBCADEDdBAWo2AgBB6PoGKAIAQandAyAEEB0aECYAC84OAQh/IwBBsAFrIgYkACACBEBB9IUIQezJCigCABB/IQogAEEBQbGpAUEMQQAQrgIgAEECQbGpAUEMQQAQrgIgAEEAQbGpAUF0QQAQrgIgAEEAIAoQgAkhCyAAEBohCANAIAgEQAJAIAgoAhAtAIYBQQFGBEAgCiAIEB5BgAQgCigCABEDACIFRQRAQX8hBAwCCyAFKAIMIQQMAQsgCSALaiEEIAlBAWohCQsgCEGxqQFBABBrIAQ2AgggACAIECkhBANAIAQEQCAEQbGpAUEAEGsgBzYCCCAHQQFqIQcgACAEECwhBAwBCwsgACAIEBshCAwBCwsgChB5GgsgAyADKAIAIgVBAWo2AgAgASAFEDsgAUGTywMQGRogABAeIAEgAygCABA7IAFBnr8DEBkaIAMgARCWAgJAIAIEQCABQfbfBBAZGiABIAMoAgAQOyAGQd+KAUH6kwEgABD6ARs2ApABIAFB59wEIAZBkAFqEBwgASADKAIAEDsgBkHfigFB+pMBIAAQzwUbNgKAASABQZQ0IAZBgAFqEBwgACABIAMQ5QQgAUH23wQQGRogASADKAIAEDsgBiALNgJwIAFBjbIBIAZB8ABqEBwMAQsgACABIAMQ5QQgAUH23wQQGRogASADKAIAEDsgBiAAQbGpAUEAEGsoAgg2AqABIAFBobIBIAZBoAFqEBwLAkAgABByIgVFDQAgAUH23wQQGRogAyADKAIAIgRBAWo2AgAgASAEEDsCQCACBEAgAUGzwAQQGRoMAQsgAUHBwAQQGRogASADKAIAEDsLQeX0BCEHIAUhBANAIAQEQCABIAcQGRoCQCACBEAgBCABIAMQ/wgMAQsgBiAEQbGpAUEAEGsoAgg2AmAgAUG1sgEgBkHgAGoQHAtB9t8EIQcgBBBxIQQMAQsLIAINACADIAMoAgBBAWs2AgAgAUHi9AQQGRogASADKAIAEDsgAUHvxAEQGRoLIAAQGiEEAkACQAJAA0AgBARAIAQoAhAtAIYBQQFHDQIgACAEEBshBAwBCwsgBUUgAkVyDQIMAQsgAUH23wQQGRoCQCACBEAgBQ0BIAMgAygCACIFQQFqNgIAIAEgBRA7IAFBs8AEEBkaDAELIAMgAygCACIFQQFqNgIAIAEgBRA7IAFB3cAEEBkaIAEgAygCABA7C0Hl9AQhByAAEBohBANAIARFDQECQCAEKAIQLQCGAQ0AIAEgBxAZGiACBEAgAyADKAIAIgVBAWo2AgAgASAFEDsgAUGTywMQGRogASADKAIAEDsgBiAEQbGpAUEAEGsoAgg2AkAgAUGm3QQgBkFAaxAcIAEgAygCABA7IAFBnr8DEBkaIAQQHiADIAEQlgIgBCABIAMQ5QQgAUHi9AQQGRogAyADKAIAQQFrIgU2AgAgASAFEDsgAUGwCBAZGkH23wQhBwwBCyAGIARBsakBQQAQaygCCDYCUCABQbWyASAGQdAAahAcQb6YAyEHCyAAIAQQGyEEDAALAAsgAyADKAIAQQFrNgIAIAFB4vQEEBkaIAEgAygCABA7IAFB78QBEBkaC0EAIQcgABAaIQgDQAJAIAhFBEAgB0UNAUEAIQggB0EEEJYEIQkgABAaIQUDQCAFRQRAIAkgB0EEQdwAEJQBIAFB9t8EEBkaIAMgAygCACIAQQFqNgIAIAEgABA7IAFB0cAEEBkaIAJFBEAgASADKAIAEDsLQQAhBANAIAQgB0YEQCAJEBcgAyADKAIAQQFrNgIAIAFB4vQEEBkaIAEgAygCABA7IAFB78QBEBkaDAUFAkAgBgJ/AkACQCAEBEAgCSAEQQJ0aiEAIAJFDQIgAUH23wQQGRogACgCACEADAELIAkoAgAiACACRQ0CGgsgAyADKAIAIgVBAWo2AgAgASAFEDsgAUGTywMQGRogASADKAIAEDsgBiAAQbGpAUEAEGsoAgg2AiAgAUGm3QQgBkEgahAcIAEgAygCABA7IAYgAEEwQQAgACgCAEEDcUEDRxtqKAIoQbGpAUEAEGsoAgg2AhAgAUGZ3QQgBkEQahAcIAEgAygCABA7IAYgAEFQQQAgACgCAEEDcUECRxtqKAIoQbGpAUEAEGsoAgg2AgAgAUGtsgEgBhAcIAAgASADEOUEIAFB4vQEEBkaIAMgAygCAEEBayIANgIAIAEgABA7IAFBsAgQGRoMAgsgAUG+mAMQGRogACgCAAtBsakBQQAQaygCCDYCMCABQbWyASAGQTBqEBwLIARBAWohBAwBCwALAAsgACAFECkhBANAIAQEQCAJIAhBAnRqIAQ2AgAgCEEBaiEIIAAgBBAsIQQMAQUgACAFEBshBQwCCwALAAsACyAAIAgQKSEEA0AgBARAIAdBAWohByAAIAQQLCEEDAEFIAAgCBAbIQgMAwsACwALCyABQeL0BBAZGiADIAMoAgBBAWsiADYCACABIAAQOyABQbnKA0GwCCACGxAZGiAGQbABaiQAC4MBAQF/IAAgACgCAEF3cTYCACAAEHIhAgNAIAIEQCACQQAQggkgAhBxIQIMAQsLAkAgAUUNACAAEBohAQNAIAFFDQEgASABKAIAQXdxNgIAIAAgARApIQIDQCACBEAgAiACKAIAQXdxNgIAIAAgAhAsIQIMAQsLIAAgARAbIQEMAAsACwuIBwIEfwJ8IwBB4ABrIgYkACABQX8Q5wghByABQQEQ5wghAQJAIAcEQCAHEKoDRQ0BCyABBEAgARCqA0UNAQsgAkF/EOQIIQEgAkEBEOQIIQIgAQRAIAEQqgNFDQELIAIEQCACEKoDRQ0BCyADQThqIQdBACEBA0AgAygCNCABTARAIAAoAlAiAkEBaiIHIAUQ4QhqIghBA2shCUEAIQECQAJAA0ACQCAFEOEIIAFNBEAgBEE4aiEDIAQoAjQhBQwBCyAFRQ0DIAUoAgQgAU0NAiAGIAUoAgAgAUEFdGoiAykDGDcDOCAGIAMpAxA3AzAgBiADKQMINwMoIAYgAykDADcDICAAIAZBIGoQ/AEgAUEBaiEBDAELCwNAIAVBAExFBEAgBiADIAVBAWsiBUEFdGoiASkDGDcDWCAGIAEpAxA3A1AgBiABKQMINwNIIAYgASkDADcDQCAAIAZBQGsQ/AEMAQsLIAIgCEECayIBIAEgAkkbIQQgAiEBA0AgASAERgRAQQEgACgCUCIBIAFBAU0bQQFrIQhBACEFA0AgBSIBIAhGDQcgACgCVCIEIAFBAWoiBUEFdGohAyAEIAFBBXRqIQQgASAHa0EBcSABIAdJIAEgCUtyckUEQCAEKwMARAAAAAAAADBAoCIKIAMrAxBkBEAgAyAKOQMQCyAEKwMQRAAAAAAAADDAoCIKIAMrAwBjRQ0BIAMgCjkDAAwBCyABIAJrQQFxIAUgB0kgASAJT3JyDQAgAysDECIKIAQrAwBEAAAAAAAAMECgYwRAIAQgCkQAAAAAAAAwwKA5AwALIAMrAwAiCiAEKwMQRAAAAAAAADDAoGRFDQAgBCAKRAAAAAAAADBAoDkDEAwACwAFIAAoAlQgAUEFdGoiAysDACEKAkACQCABIAdrQQFxRQRAIAogAysDECILZg0BDAILIAMrAxAiCyAKRAAAAAAAADBAoGNFDQELIAMgCiALoEQAAAAAAADgP6IiCkQAAAAAAAAgQKA5AxAgAyAKRAAAAAAAACDAoDkDAAsgAUEBaiEBDAELAAsAC0H9qgNB7fsAQQhBjyIQAAALQYPPAUHt+wBBCEGPIhAAAAUgBiAHIAFBBXRqIgIpAxg3AxggBiACKQMQNwMQIAYgAikDCDcDCCAGIAIpAwA3AwAgACAGEPwBIAFBAWohAQwBCwALAAsgBkHgAGokAAt/AQJ/IwBBIGsiBCQAIAAoAhAoAgwgBCADNgIUIAQgATYCEEECdEGQ+ARqKAIAIgFBwroDIARBEGoQjAFBACEAA0AgACADRgRAIARBIGokAAUgBCACIABBBHRqIgUpAwg3AwggBCAFKQMANwMAIAEgBBDTAiAAQQFqIQAMAQsLC40FAgN/BnwjAEGQAWsiBCQAAkACQEHg7gooAgAvAShBDU0EQCAAEKQGDAELIAAoAhAiBSgCiAG3RBgtRFT7IQlAokQAAAAAAIBmQKMhByAEQgA3A0ggBEIANwNAAkAgAUECRgRAIAIgBEHwAGogAyAHQQIQgwggBEFAayICQdsAEM8BIAQgBCkDeDcDGCAEIAQpA3A3AxAgAiAEQRBqENMCIAQgBCkDiAE3AwggBCAEKQOAATcDACACIAQQ0wIMAQsgAiAEQfAAaiADRAAAAAAAAAAAQQMQgwggBCsDcCEIIAQrA4gBIQkCfCAFKAKIAUUEQCAJRAAAAAAAANA/oiEKIAQrA3giCyEMIAgMAQsgCUQAAAAAAADQP6IiCiAHEFeiIAQrA3giC6AhDCAKIAcQRKIgCKALIQcgBCAMOQNoIAQgCzkDWCAEIAc5A2AgBCAIOQNQIARBQGsiAkEoEM8BIAQgBCkDaDcDOCAEIAQpA2A3AzAgAiAEQTBqENMCIAIgChCXAiAEIAQpA1g3AyggBCAEKQNQNwMgIAIgBEEgahDTAiACIAkQlwILIARBQGsiBkG6vwMQiAMgBUE4aiECIARBQGsiAwJ8IAUrA5ABIgdEAAAAAAAAAABkBEAgBiAHIAIQogYgBSsDkAEMAQsgBEFAa0QAAAAAAAAAACACEKIGRAAAAAAAAPA/CyAFQeAAahCiBgJAIAMQIUUNACADECUEQCAELQBPIgJFDQMgBCACQQFrOgBPDAELIAQgBCgCREEBazYCRAsgBEFAayICQd0AQSkgAUECRhsQzwEgAEHQvQMgAhC8ARDSAiACEGYLIARBkAFqJAAPC0GSiQNBj/0AQfYAQYvZABAAAAuEAQEGfyMAQRBrIgEkAANAAkACQCAAIAJqLQAAIgQEQCAEwCIFQTBrQQlLDQIgA0H//wNxIgYgBEF/c0HxAXJB//8DcUEKbk0NASABIAA2AgBBmv8AIAEQJwsgAUEQaiQAIANB//8DcQ8LIAUgBkEKbGpB0P8DaiEDCyACQQFqIQIMAAsACzoBAn8jAEEQayIDJAAgAhA3IQQgAyACNgIIIAMgBDYCBCADIAE2AgAgAEH4ugMgAxCMASADQRBqJAALzQEBAn8gACABKAIgIANBBXRqIgRBEGopAwA3AxAgACAEKQMANwMAIAAgBCkDGDcDGCAAIAQpAwg3AwggACsDACAAKwMQYQRAIAIoAhAoAsQBIANBBnRqIgIoAgQoAgAhAyACKAJEKAIAIQUgACABKwMAOQMAIAAgBSgCECsDGCACKwNYoDkDCCAAIAErAwg5AxAgACADKAIQKwMYIAIrAxChOQMYIAQgACkDEDcDECAEIAApAwg3AwggBCAAKQMANwMAIAQgACkDGDcDGAsL6gEBCH8gAEHnowMQtwIhAiABKAIAIQYjAEEQayIDJAAgA0EIaiIEIAIQrQUaAkAgBC0AAEUNACACIAIoAgBBDGsoAgBqIgUoAgQaIANBBGoiBCAFEEsgBBCVDCEFIAQQSCADIAIQlAwhByACIAIoAgBBDGsoAgBqIggQkwwhCSADIAUgBygCACAIIAkgBiAFKAIAKAIQEQcANgIEIAQQqwVFDQAgAiACKAIAQQxrKAIAakEFEK4FCyADQQhqEKwFIANBEGokACACQdPaARC3AiABKAIgKwMQIAErAxigEKQHQaGjAxC3AhogAAstAQF/IAAoAgAiAQRAIAAgATYCBCAAKAIIGiABEBcgAEEANgIIIABCADcCAAsLGQAgAEGk+gc2AgAgAEEkahDsARogABCoBguBAwIKfwF8IwBBIGsiAiQAIABBCGohBCAAKAIEIQEDQCABIARHBEAgASgCECIDIAMQlgkiCzkDICADIAsgAysDGKM5AxAgARCXASEBDAELCyAAQQA2AiAgAEEkaiEHIABBCGohCCAAQQRqIQQgACgCBCEDAkADQCADIAhHBEAgAiADKAIQEJIJIgE2AhwCQCABRQ0AIAErAxBESK+8mvLXer5jRQ0AIAAgACgCIEEBajYCICABKAIAKAIgIQUgAkEANgIYIAJBADYCFCABKAIAKAIgIAEoAgQoAiBHDQMgBSsDECELIAUgAkEYaiIJIAJBFGoiCiABEKoGIAIoAhQiASALOQMQIAIoAhgiBiALOQMQIAYgCyAGKwMYojkDICABIAErAxAgASsDGKI5AyAgAkEMaiIBIAQgCRC6AyABIAQgChC6AyAFQQE6ACggByACQRxqELYBCyADEJcBIQMMAQsLIAQQ6QQgAkEgaiQADwtBqvQAQfLYAEHvAUHJLRAAAAuOAQIDfAR/IABBBGohBiAAKAIAIQADfCAAIAZGBHwgAQUgAUQAAAAAAAAAACEBIAAoAhAiBCgCBCEHIAQoAgAhBAN8IAQgB0YEfCABBSAEKAIAIgUrAxAgBSgCICsDECAFKwMYoCAFKwMIoSICoiACoiABoCEBIARBBGohBAwBCwugIQEgABCXASEADAELCwuaAgIGfwN8QdTtCkHU7QooAgBBAWoiAjYCACAAIAI2AiwgABCyBgNAAkAgABCwBiICRQ0AIAIQmAJEAAAAAAAAAABjRQ0AIABBMGoQggQgAigCACIBKAIgIgMoAjAgAygCNEYEQCADELIGIAIoAgAhAQsgAisDCCEHIAErAxghCCACKAIEKwMYIQkgACgCACEBIAAoAgQhBCADKAIAIQUgAygCBCEGQdTtCkHU7QooAgBBAWo2AgAgACADIAQgAWsgBiAFa0kiBBshASADIAAgBBsiACABIAIgCSAIoSAHoSIHmiAHIAQbEOwEIAAQsAYaIAEQsAYaIABBMGogAUEwahCTCSAAQdTtCigCADYCLCABQQE6ACgMAQsLC+wBAQN/IwBBEGsiAyQAIAMgATYCDCABQQE6ACQgASgCOCEEIAEoAjQhAQNAIAEgBEcEQCABKAIAKAIEIgUtACRFBEAgACAFIAIQjwkLIAFBBGohAQwBCwsjAEEQayIBJAAgAUEBNgIIIAFBDBCCATYCDCABKAIMIgBBADYCBCAAQQA2AgAgACADKAIMNgIIIAEoAgwhACABQQA2AgwgASgCDCIEBEAgASgCCBogBBAXCyABQRBqJAAgACACNgIAIAAgAigCBCIBNgIEIAEgADYCACACIAA2AgQgAiACKAIIQQFqNgIIIANBEGokAAsZACAAQTxqEOwBGiAAQTBqEOwBGiAAEOwBC34BAn8CQCADQQJIDQAgACADQQJrQQF2IgNBAnRqIgQoAgAgAUEEayIBKAIAIAIoAgARAABFDQAgASgCACEFA0ACQCABIAQiASgCADYCACADRQ0AIAAgA0EBa0EBdiIDQQJ0aiIEKAIAIAUgAigCABEAAA0BCwsgASAFNgIACwtEAQF/IwBBEGsiASQAIAFBADYCDCAAIAAoAgAoAgBBABDrBCAAIAAoAgAoAgBBACABQQxqEKwGGiABKAIMIAFBEGokAAvNBAEJfyAAIgIoAgQhBiABKAIAIgAhAyABKAIEIQEjAEEgayIJJAACQCABIABrQQJ1IgRBAEwNACAEIAIoAgggAigCBCIAa0ECdUwEQAJAIAQgACAGayIFQQJ1IghMBEAgAyAEQQJ0aiEHDAELIAEgAyAFaiIHayEFIAEgB0cEQCAAIAcgBRCPARoLIAIgACAFajYCBCAIQQBMDQILIAAhBSAGIAIoAgQiASAGIARBAnRqIgprIghqIQQgASEAA0AgBCAFTwRAIAIgADYCBCABIApHBEAgASAIayAGIAgQjwEaCwUgACAEKAIANgIAIABBBGohACAEQQRqIQQMAQsLIAMgB0YNASAGIAMgByADaxCPARoMAQsgCUEMaiACIAAgAigCAGtBAnUgBGoQ8QQgBiACKAIAa0ECdSACQQhqELcGIgEoAggiACAEQQJ0aiEFA0AgACAFRwRAIAAgAygCADYCACADQQRqIQMgAEEEaiEADAELCyABIAA2AgggAigCACEFIAYhACABKAIEIQMDQCAAIAVHBEAgA0EEayIDIABBBGsiACgCADYCAAwBCwsgASADNgIEIAIoAgQiBCAGayEAIAEoAgghBSAEIAZHBEAgBSAGIAAQjwEaIAEoAgQhAwsgASAAIAVqNgIIIAIoAgAhACACIAM2AgAgASAANgIEIAIoAgQhACACIAEoAgg2AgQgASAANgIIIAIoAgghACACIAEoAgw2AgggASAANgIMIAEgASgCBDYCACABELYGCyAJQSBqJAAgAhCVCQtjAgJ/AXwgAigCBCIDKwMYIAIoAgAiBCsDGKEgAisDCKEhBSADKAIgIQMgBCgCICEEIAAoAgQgACgCAGsgASgCBCABKAIAa0kEQCADIAQgAiAFEOwEDwsgBCADIAIgBZoQ7AQL4gIBCX8gACgCACEFIAAoAgQhACMAQRBrIgMkACADQccANgIMAkAgACAFa0ECdSIGQQJIDQAgBkECa0EBdiEIA0AgCEEASA0BIAUgCEECdGohBAJAIAZBAkgNACAGQQJrQQF2IgkgBCAFayIAQQJ1SA0AIAUgAEEBdSIBQQFyIgJBAnRqIQAgBiABQQJqIgFKBEAgASACIAAoAgAgACgCBCADKAIMEQAAIgEbIQIgAEEEaiAAIAEbIQALIAAoAgAgBCgCACADKAIMEQAADQAgBCgCACEBA0ACQCAEIAAiBCgCADYCACACIAlKDQAgBSACQQF0IgdBAXIiAkECdGohACAGIAdBAmoiB0oEQCAHIAIgACgCACAAKAIEIAMoAgwRAAAiBxshAiAAQQRqIAAgBxshAAsgACgCACABIAMoAgwRAABFDQELCyAEIAE2AgALIAhBAWshCAwACwALIANBEGokAAtGAgF8An8gACgCBCEDIAAoAgAhAAN8IAAgA0YEfCABBSAAKAIAIgIrAwggAisDGKEgAisDEKIgAaAhASAAQQRqIQAMAQsLC2wCAX8CfCMAQRBrIgIkACACIAE2AgwgASAANgIgIAAgAkEMahC2ASAAIAIoAgwiASsDECIDIAArAxigIgQ5AxggACADIAErAwggASsDGKGiIAArAyCgIgM5AyAgACADIASjOQMQIAJBEGokAAu5AgEHfyMAQSBrIgYkACADIABrQRhtIQQCQCACQQJIDQAgAkECa0EBdiIKIARIDQAgACAEQQF0IghBAXIiBUEYbGohBCACIAhBAmoiCEoEQCAEQRhqIgcgBCAEIAcgASgCABEAACIHGyEEIAggBSAHGyEFCyAEIAMgASgCABEAAA0AIAYgAygCADYCCCAGIAMoAgQ2AgwgBiADKAIINgIQIANCADcCBCAGIAMrAxA5AxggBkEIakEEcgNAAkAgAyAEIgMQlgEgBSAKSg0AIAAgBUEBdCIHQQFyIgVBGGxqIQQgAiAHQQJqIgdKBEAgBEEYaiIJIAQgBCAJIAEoAgARAAAiCRshBCAHIAUgCRshBQsgBCAGQQhqIAEoAgARAABFDQELCyADIAZBCGoQlgEQxQELIAZBIGokAAvzAgEHfyMAQSBrIgQkAEEBIQcCQAJAAkACQAJAAkAgASAAa0EYbQ4GBQUAAQIDBAsgAUEYayIBIAAgAigCABEAAEUNBCAAIAEQrgEMBAsgACAAQRhqIAFBGGsgAhC2AgwDCyAAIABBGGogAEEwaiABQRhrIAIQtAYMAgsgACAAQRhqIABBMGogAEHIAGogAUEYayACEJoJDAELIAAgAEEYaiAAQTBqIgYgAhC2AiAAQcgAaiEFIARBCGpBBHIhCQNAIAUiAyABRg0BAkAgAyAGIAIoAgARAAAEQCAEIAMoAgA2AgggBCADKAIENgIMIAQgAygCCDYCECADQgA3AgQgBCADKwMQOQMYA0ACQCAFIAYiBRCWASAAIAVGDQAgBEEIaiAFQRhrIgYgAigCABEAAA0BCwsgBSAEQQhqEJYBIAkQxQEgCEEBaiIIQQhGDQELIANBGGohBSADIQYMAQsLIANBGGogAUYhBwsgBEEgaiQAIAcLagAgACABIAIgAyAFELQGAkAgBCADIAUoAgARAABFDQAgAyAEEK4BIAMgAiAFKAIAEQAARQ0AIAIgAxCuASACIAEgBSgCABEAAEUNACABIAIQrgEgASAAIAUoAgARAABFDQAgACABEK4BCwv6AwIGfwh8IwBBoAFrIgYkACACIANBAnRqIggoAgAoAhAiAisAQCABKAIQIgErABggAisAOCABKwAQoCEPIAIrABggACgCECIAKwAYoCESIAIrABAgACsAEKAhECAEQQJPBEAgACsDUCIRRAAAAAAAAOA/oiEMIBEgBEEBa7ijIRELoCETIBIgDKEhDCAPIA+gIBCgRAAAAAAAAAhAoyENIBAgEKAgD6BEAAAAAAAACECjIQ4gBkGYAWohAiAGQZABaiEJIAZBOGohACAGQTBqIQogBUF3cUECRyELQQAhAwNAIAMgBEZFBEAgCCADQQJ0aigCACEHIAYgEjkDCCAGIBA5AwACfyALRQRAIAYgDDkDKCAGIA05AyAgBiAMOQMYIAYgDjkDEEEEIQEgACEFIAoMAQsgBiATOQOIASAGIA85A4ABIAYgDDkDeCAGIA05A3AgBiAMOQNoIAYgDTkDYCAGIAw5A1ggBiANOQNQIAYgDDkDSCAGIA45A0AgBiAMOQM4IAYgDjkDMCAGIAw5AyggBiAOOQMgIAYgEjkDGCAGIBA5AxBBCiEBIAIhBSAJCyAPOQMAIAUgEzkDACAHIAdBUEEAIAcoAgBBA3FBAkcbaigCKCAGIAFBuPUHEJ0BIANBAWohAyARIAygIQwMAQsLIAZBoAFqJAALtRABCX8jAEEQayINJAADQCABQcgAayEJIAFBMGshCCABQRhrIQsCQANAAkACQAJAAkACQCABIABrIgZBGG0iBw4GBgYAAQIDBAsgAUEYayIBIAAgAigCABEAAEUNBSAAIAEQrgEMBQsgACAAQRhqIAFBGGsgAhC2AgwECyAAIABBGGogAEEwaiABQRhrIAIQtAYMAwsgACAAQRhqIABBMGogAEHIAGogAUEYayACEJoJDAILIAZBvwRMBEAgBEEBcQRAIAIhByMAQSBrIgUkAAJAIAAiBCABIgNGDQAgBUEIakEEciEGA0AgACIBQRhqIgAgA0YNASAAIAEgBygCABEAAEUNACAFIAEoAhg2AgggBSABKAIcNgIMIAUgASgCIDYCECABQgA3AhwgBSABKwMoOQMYIAAhAgNAAkAgAiABIgIQlgEgASAERg0AIAVBCGogAUEYayIBIAcoAgARAAANAQsLIAIgBUEIahCWASAGEMUBDAALAAsgBUEgaiQADAMLIAIhBCMAQSBrIgUkAAJAIAEiAyAARg0AIAVBCGpBBHIhBgNAIAAiAUEYaiIAIANGDQEgACABIAQoAgARAABFDQAgBSABKAIYNgIIIAUgASgCHDYCDCAFIAEoAiA2AhAgAUIANwIcIAUgASsDKDkDGCAAIQIDQCACIAEQlgEgBUEIaiIHIAEiAkEYayIBIAQoAgARAAANAAsgAiAHEJYBIAYQxQEMAAsACyAFQSBqJAAMAgsgA0UEQCAAIAFHBH8gACABRgR/IAEFIAEgAGsiA0EYbSEEAkAgA0EZSA0AIARBAmtBAXYhAwNAIANBAEgNASAAIAIgBCAAIANBGGxqEJgJIANBAWshAwwACwALIAEgAGtBGG0hBCABIQMDQCABIANHBEAgAyAAIAIoAgARAAAEQCADIAAQrgEgACACIAQgABCYCQsgA0EYaiEDDAELCyABIABrQRhtIQMDQCADQQFKBEAgASEEQQAhBiMAQSBrIgwkACADQQJOBEAgDCAAKAIANgIIIAwgACgCBDYCDCAMIAAoAgg2AhAgAEIANwIEIAwgACsDEDkDGCAMQQhqIgtBBHIgACEBIANBAmtBAm0hCgNAIAZBAXQiCEEBciEHIAEgBkEYbGoiBkEYaiEFIAMgCEECaiIITAR/IAcFIAZBMGoiBiAFIAUgBiACKAIAEQAAIgYbIQUgCCAHIAYbCyEGIAEgBRCWASAFIQEgBiAKTA0ACwJAIARBGGsiByABRgRAIAEgCxCWAQwBCyABIAcQlgEgByAMQQhqEJYBIAFBGGoiASEKIwBBIGsiCyQAAkAgASAAIgdrQRhtIgFBAkgNACAAIAFBAmtBAXYiCEEYbGoiASAKQRhrIgYgAigCABEAAEUNACALIAYoAgA2AgggCyAKQRRrIgUoAgA2AgwgCyAKQRBrKAIANgIQIAVCADcCACALIApBCGsrAwA5AxggC0EIakEEcgNAAkAgBiABIgYQlgEgCEUNACAHIAhBAWtBAXYiCEEYbGoiASALQQhqIAIoAgARAAANAQsLIAYgC0EIahCWARDFAQsgC0EgaiQACxDFAQsgDEEgaiQAIANBAWshAyAEQRhrIQEMAQsLQQALBSABCxoMAgsgACAHQQF2QRhsIgVqIQoCQCAGQYEYTwRAIAAgCiALIAIQtgIgAEEYaiIHIApBGGsiBiAIIAIQtgIgAEEwaiAFIAdqIgcgCSACELYCIAYgCiAHIAIQtgIgACAKEK4BDAELIAogACALIAIQtgILIANBAWshAwJAIARBAXEiCg0AIABBGGsgACACKAIAEQAADQBBACEEIwBBIGsiBSQAIAUgACgCADYCCCAFIAAoAgQ2AgwgBSAAKAIINgIQIABCADcCBCAFIAArAxA5AxgCQCAFQQhqIAEiBkEYayACKAIAEQAABEAgACEHA0AgBUEIaiAHQRhqIgcgAigCABEAAEUNAAsMAQsgACEHA0AgB0EYaiIHIAZPDQEgBUEIaiAHIAIoAgARAABFDQALCyAGIAdLBEADQCAFQQhqIAZBGGsiBiACKAIAEQAADQALCwNAIAYgB0sEQCAHIAYQrgEDQCAFQQhqIAdBGGoiByACKAIAEQAARQ0ACwNAIAVBCGogBkEYayIGIAIoAgARAAANAAsMAQsLIAAgB0EYayIGRwRAIAAgBhCWAQsgBiAFQQhqIgAQlgEgAEEEchDFASAFQSBqJAAgByEADAELCyABIQYjAEEgayIJJAAgCSAAKAIANgIIIAkgACgCBDYCDCAJIAAoAgg2AhAgAEIANwIEIAkgACsDEDkDGCAAIQcDQCAHIgVBGGoiByAJQQhqIAIoAgARAAANAAsCQCAAIAVGBEADQCAGIAdNDQIgBkEYayIGIAlBCGogAigCABEAAEUNAAwCCwALA0AgBkEYayIGIAlBCGogAigCABEAAEUNAAsLIAYhBSAHIQgDQCAFIAhLBEAgCCAFEK4BA0AgCEEYaiIIIAlBCGogAigCABEAAA0ACwNAIAVBGGsiBSAJQQhqIAIoAgARAABFDQALDAELCyAAIAhBGGsiCEcEQCAAIAgQlgELIAggCUEIaiIFEJYBIA0gBiAHTToADCANIAg2AgggBUEEchDFASAJQSBqJAAgDSgCCCEGAkAgDS0ADEEBRw0AIAAgBiACEJkJIQUgBkEYaiIHIAEgAhCZCQRAIAYhASAFRQ0DDAILIAVFDQAgByEADAILIAAgBiACIAMgChCcCSAGQRhqIQBBACEEDAELCyANQRBqJAALDQAgAEH8+Qc2AgAgAAt4AgJ/AnwCQCAAKAIEIgNFBEAgAEEEaiIAIQIMAQsgAigCACIEKwMIIQUDQCAFIAMiACgCECICKwMIIgZjRSACIARNIAUgBmRycUUEQCAAIQIgACgCACIDDQEMAgsgACgCBCIDDQALIABBBGohAgsgASAANgIAIAILdQEDfyAAIAAoAgQiAzYCCCADBEACQCADKAIIIgFFBEBBACEBDAELAkAgAyABKAIAIgJGBEAgAUEANgIAIAEoAgQiAg0BDAILIAFBADYCBCACRQ0BCwNAIAIiASgCACICDQAgASgCBCICDQALCyAAIAE2AgQLC58GAQZ/An8CQCABIgMoAgAiBQRAIAMoAgRFDQEgAxCXASIDKAIAIgUNAQsgAygCBCIFDQAgAygCCCEEQQAhBUEBDAELIAUgAygCCCIENgIIQQALIQYCQCADIAQoAgAiAkYEQCAEIAU2AgAgACADRgRAQQAhAiAFIQAMAgsgBCgCBCECDAELIAQgBTYCBAsgAy0ADCEHIAEgA0cEQCADIAEoAggiBDYCCCAEIAQoAgAgAUdBAnRqIAM2AgAgAyABKAIAIgQ2AgAgBCADNgIIIAMgASgCBCIENgIEIAQEQCAEIAM2AggLIAMgAS0ADDoADCADIAAgACABRhshAAsgAEUgB0EBcUVyRQRAIAYEQANAIAItAAwhAwJAIAIgAigCCCIBKAIARwRAIANBAXFFBEAgAkEBOgAMIAFBADoADCABEIQEIAIgACAAIAIoAgAiAUYbIQAgASgCBCECCwJAAkACQAJAIAIoAgAiAQRAIAEtAAxBAUcNAQsgAigCBCIDBEAgAy0ADEEBRw0CCyACQQA6AAwgACACKAIIIgJHBEAgAi0ADA0GCyACQQE6AAwPCyACKAIEIgNFDQELIAMtAAxBAUcNAQsgAUEBOgAMIAJBADoADCACEIMEIAIoAggiAigCBCEDCyACIAIoAggiAC0ADDoADCAAQQE6AAwgA0EBOgAMIAAQhAQPCyADQQFxRQRAIAJBAToADCABQQA6AAwgARCDBCACIAAgACACKAIEIgFGGyEAIAEoAgAhAgsCQAJAAkACQCACKAIAIgMEQCADLQAMIgFBAUcNAQsCQCACKAIEIgEEQCABLQAMQQFHDQELIAJBADoADCACKAIIIgItAAxBAUYgACACR3ENBSACQQE6AAwPCyADRQ0CIAMtAAxBAXENAQwDCyABRQ0CCyACKAIEIQELIAFBAToADCACQQA6AAwgAhCEBCACKAIIIgIoAgAhAwsgAiACKAIIIgAtAAw6AAwgAEEBOgAMIANBAToADCAAEIMEDwsgAigCCCIBIAEoAgAgAkZBAnRqKAIAIQIMAAsACyAFQQE6AAwLCxsBAX8gACgCACEBIABBADYCACABBEAgARAXCwtDAQJ/IAAoAgQhAgNAIAIgACgCCCIBRwRAIAAgAUEYazYCCCABQRRrEMUBDAELCyAAKAIAIgEEQCAAKAIMGiABEBcLC80CAQR/IAAoAgQhAyAAKAIAIQUgASgCBCEEIwBBIGsiAiQAIAIgBDYCHCACIAQ2AhggAkEAOgAUIAIgAEEIajYCCCACIAJBHGo2AhAgAiACQRhqNgIMA0AgAyAFRwRAIARBGGsiBCADQRhrIgMoAgA2AgAgBCADKAIENgIEIAQgAygCCDYCCCADQgA3AgQgBCADKwMQOQMQIAIgAigCHEEYayIENgIcDAELCyACQQE6ABQgAi0AFEUEQCACKAIIGiACKAIQKAIAIQMgAigCDCgCACEFA0AgAyAFRwRAIANBBGoQxQEgA0EYaiEDDAELCwsgAkEgaiQAIAEgBDYCBCAAKAIAIQIgACAENgIAIAEgAjYCBCAAKAIEIQIgACABKAIINgIEIAEgAjYCCCAAKAIIIQIgACABKAIMNgIIIAEgAjYCDCABIAEoAgQ2AgALXQEBfyAAIAM2AhAgAEEANgIMIAEEQCABQavVqtUATwRAELgGAAsgAUEYbBCCASEECyAAIAQ2AgAgACAEIAJBGGxqIgI2AgggACAEIAFBGGxqNgIMIAAgAjYCBCAAC6MBAgF/AXxBwAAQggEiBEIANwIEIARB/PkHNgIAIAEoAgAhASADKwMAIQUgBEIANwIsIAQgBTkDGCAEIAI2AhQgBCABNgIQIARCADcCOCAEIARBLGo2AiggBCAEQThqNgI0IARCADcDICACKwMIIAIrAwChRKVcw/EpYz1IY0UEQEG7iwNBztgAQTdB0J8BEAAACyAAIAQ2AgQgACAEQRBqNgIAC2sBA38jAEEQayICJAAgAiAANgIMIAIoAgwiASgCAARAIAEoAgAhAyABKAIEIQADQCAAIANHBEAgAEEUaxDFASAAQRhrIQAMAQsLIAEgAzYCBCACKAIMIgAoAgAgACgCCBoQFwsgAkEQaiQAC8wCAQV/IwBBEGsiAiQAAkAgACABRg0AIAFBBGohBSABKAIAIQECQCAAKAIIRQ0AIAIgADYCBCAAKAIAIQMgACAAQQRqNgIAIAAoAgRBADYCCCAAQgA3AgQgAiADKAIEIgQgAyAEGzYCCCACQQRqEJ8JA0AgAigCDCIDRSABIAVGckUEQCADIAEoAhA2AhAgACACIANBEGoQngkhBCAAIAIoAgAgBCADEO0EIAJBBGoQnwkgARCXASEBDAELCyADEIUEIAIoAggiA0UNAANAIAMiBCgCCCIDDQALIAQQhQQLIABBBGohBANAIAEgBUYNAUEUEIIBIQMgAiAENgIIIAMgASgCEDYCECACQQE6AAwgACACIANBEGoQngkhBiAAIAIoAgAgBiADEO0EIAJBADYCBCACQQRqEKEJIAEQlwEhAQwACwALIAJBEGokAAt6AQZ8IAErAxAiAiABKwMYIgQgAqFEAAAAAAAA4D+ioCEFIAArAxAiAyAAKwMYIgYgA6FEAAAAAAAA4D+ioCEHIAIgBmNFIAUgB2ZFckUEQCAGIAKhDwsgBCADoUQAAAAAAAAAACAFIAdlG0QAAAAAAAAAACADIARjGwuaAgEBfwJAIAENACAAQTBBACAAKAIAQQNxIgFBA0cbaigCKCICIABBUEEAIAFBAkcbaigCKCIBRgRAQQQhASAAKAIQIgItACwNAUEEQQggAi0AVBshAQwBC0ECQQEgAigCECgC9AEgASgCECgC9AFGGyEBC0EQIQICQAJAAkAgAUEBaw4CAAECC0EQQSAgAEEwQQAgACgCAEEDcSICQQNHG2ooAigoAhAoAvQBIABBUEEAIAJBAkcbaigCKCgCECgC9AFIGyECDAELQRBBICAAQTBBACAAKAIAQQNxIgJBA0cbaigCKCgCECgC+AEgAEFQQQAgAkECRxtqKAIoKAIQKAL4AUgbIQILIAAoAhAgAkGAAXIgAXI2AqQBC0EBAX8jAEEQayICJAAgAkHBADYCDCAAIAEgAkEMakE+IAEgAGtBGG1nQQF0a0EAIAAgAUcbQQEQnAkgAkEQaiQAC2MBAn8jAEEgayICJAACQCABIAAoAgggACgCACIDa0EYbUsEQCABQavVqtUATw0BIAAgAkEMaiABIAAoAgQgA2tBGG0gAEEIahCkCSIAEKMJIAAQogkLIAJBIGokAA8LEIYEAAsaACAAQYCAgIAETwRAELgGAAsgAEECdBCCAQuRAQEDfyABKAIEIQIgACgCACEEIAAoAgQhAwNAIAMgBEZFBEAgAkEEayICIANBBGsiAygCADYCAAwBCwsgASACNgIEIAAoAgAhAyAAIAI2AgAgASADNgIEIAAoAgQhAiAAIAEoAgg2AgQgASACNgIIIAAoAgghAiAAIAEoAgw2AgggASACNgIMIAEgASgCBDYCAAt0AQR8AkAgASsDACEFIAIrAwAhBiADKwMAIQcgACAEKwMAIgg5AxggACAHOQMQIAAgBjkDCCAAIAU5AwACQCAFIAZlBEAgByAIZUUNAQwCC0GaygFBztgAQSVBuZoBEAAAC0GfxQFBztgAQSZBuZoBEAAACwsJACAAIAE5AwgLJgAgAEUEQEHqNEHx2ABB0ABB0NcBEAAACyAAIAAoAgAoAgwRAQALDwAgACAAKAIAKAIAEQEACx0AIAAEQCAAQTRqEOwBGiAAQShqEOwBGgsgABAXC5UEAQV/IAACfyAAKAIEIgUgACgCCEkEQCAAKAIEIgYgASACIAMgBBCuCSAAIAZBIGo2AgQgBUEgagwBCyMAQSBrIgkkACAAKAIEIAAoAgBrQQV1QQFqIgVBgICAwABPBEAQhgQAC0H///8/IAAoAgggACgCAGsiBkEEdSIHIAUgBSAHSRsgBkHg////B08bIQYgACgCBCAAKAIAa0EFdSEIQQAhByAJQQxqIgUgAEEIajYCECAFQQA2AgwgBgRAIAZBgICAwABPBEAQuAYACyAGQQV0EIIBIQcLIAUgBzYCACAFIAcgCEEFdGoiCDYCCCAFIAcgBkEFdGo2AgwgBSAINgIEIAUoAgggASACIAMgBBCuCSAFIAUoAghBIGo2AgggBSgCBCEEIAAoAgAhASAAKAIEIQMDQCABIANHBEAgBEEgayIEIANBIGsiAykDADcDACAEIAMpAxg3AxggBCADKQMQNwMQIAQgAykDCDcDCAwBCwsgBSAENgIEIAAoAgAhASAAIAQ2AgAgBSABNgIEIAAoAgQhASAAIAUoAgg2AgQgBSABNgIIIAAoAgghASAAIAUoAgw2AgggBSABNgIMIAUgBSgCBDYCACAAKAIEIAUoAgQhAiAFKAIIIQADQCAAIAJHBEAgBSAAQSBrIgA2AggMAQsLIAUoAgAiAARAIAUoAgwaIAAQFwsgCUEgaiQACzYCBAv7AwEEf0EwEIIBIgVBvPoHNgIAIwBBEGsiByQAIAVBBGoiBiAANgIQIAYgATYCDCAGQgA3AgQgBiAGQQRqNgIAQdTtCkEANgIAA38gACAETAR/IAdBEGokACAGBSAHQcgAEIIBIAEgBEECdGooAgAQswY2AgwgBEEBaiEEIAdBBGogBiAHQQxqELoDIAYoAhAhAAwBCwsaIAUgAjYCHCAFIAM2AhggBUEANgIsIAVCADcCJCAFQaT6BzYCAAJAIAMgAkECdGoiASADa0ECdSIGIAVBJGoiACgCCCAAKAIAIgJrQQJ1TQRAIAYgACgCBCIEIAJrIgdBAnVLBEAgAiAERwRAIAIgAyAHEI8BGiAAKAIEIQQLIAEgAyAHaiICayEDIAEgAkcEQCAEIAIgAxCPARoLIAAgAyAEajYCBAwCCyABIANrIQQgASADRwRAIAIgAyAEEI8BGgsgACACIARqNgIEDAELIAAQigkgACAGEPEEIgJBgICAgARPBEAQhgQACyAAIAIQrAkiBDYCBCAAIAQ2AgAgACAEIAJBAnRqNgIIIAEgA2shAiAAKAIEIQQgASADRwRAIAQgAyACEI8BGgsgACACIARqNgIECyAFKAIoIQAgBSgCJCEBA38gACABRgR/IAUFIAEoAgBBADoAHCABQQRqIQEMAQsLCycAIAAgACgCGEUgACgCECABcnIiATYCECAAKAIUIAFxBEAQjgEACwtGAgJ/AXwgABAaIQEDQCABBEAgASgCECICKALgAQRAIAIrA4ACIQMgAiACKwNgOQOAAiACIAM5A2ALIAAgARAbIQEMAQsLCzEBA38gACgCBCIEIAFBBGoiAmshAyACIARHBEAgASACIAMQjwEaCyAAIAEgA2o2AgQLfgEDfyAAKAIAIgFBNGogASgCOCEDIAEoAjQhAQNAAkAgASADRg0AIAEoAgAgAEYNACABQQRqIQEMAQsLIAEQtwkgACgCBCIBQShqIAEoAiwhAyABKAIoIQEDQAJAIAEgA0YNACABKAIAIABGDQAgAUEEaiEBDAELCyABELcJC4J4AiV/DHwjAEGAAWsiHSQAIB1BGGogAkHYABAgGiAGQQA2AgACQCABRSAAQQBMcg0AIAEoAgQiIkEATA0AAn8CQCABQQAQuQIEQCABKAIQQQFGDQELIAEQ0AkMAQsgARDBBgshFwJAAkAgAigCUCINQQNHBEAgBEEATA0CIA1BBEYNAQwCCyAEQQBMDQELIBcoAgAgAGxBCBAYIRAgFygCGCERIBcoAhQhIiAXKAIAQQQQGCEZIBcoAgAiDUEAIA1BAEobIQwDQCAHIAxGBEAgBEEAIARBAEobIRJBACEHA0AgByASRgRAQQAhBwNAIAcgDEcEQCAZIAdBAnRqIgQoAgBBAEoEQCAEIAk2AgAgCUEBaiEJCyAHQQFqIQcMAQsLA0ACQCAKIAxHBEAgGSAKQQJ0IgRqKAIAQQBIDQEgBCAiaiIEKAIAIg0gBCgCBCIEIAQgDUgbIQQDQCAEIA1GDQICQCAZIBEgDUECdGooAgBBAnQiB2ooAgBBAE4EQCAIQQFqIQgMAQsgByAiaiILKAIAIgcgCygCBCILIAcgC0obIQsDQCAHIAtGDQEgCiARIAdBAnRqKAIAIg5HBEAgCCAZIA5BAnRqKAIAQX9zQR92aiEICyAHQQFqIQcMAAsACyANQQFqIQ0MAAsAC0EAIQtBACENIAhBAEoEQCAIQQQQGCELIAhBBBAYIQ0gFygCACIEQQAgBEEAShshDAtBACEIQQAhCgNAAkAgCiAMRwRAIBkgCkECdCIHaigCACIEQQBIDQEgByAiaiIHKAIAIg4gBygCBCIHIAcgDkgbIRMDQCAOIBNGDQICQCAZIBEgDkECdGooAgBBAnQiB2ooAgAiD0EATgRAIAsgCEECdCIHaiAENgIAIAcgDWogDzYCACAIQQFqIQgMAQsgByAiaiIPKAIAIgcgDygCBCIPIAcgD0obIQ8DQCAHIA9GDQECQCARIAdBAnRqKAIAIhUgCkYNACAZIBVBAnRqKAIAIhVBAEgNACALIAhBAnQiFmogBDYCACANIBZqIBU2AgAgCEEBaiEICyAHQQFqIQcMAAsACyAOQQFqIQ4MAAsAC0EAIQcgCCAJIAkgCyANQQBBCEEIEMEDIQkgCxAXIA0QFyAZEBcgACAJIAIgEEEAQQAgBhC5CSAGKAIARQRAIBcoAgBBBBAYIQYgFygCACINQQAgDUEAShshBANAIAQgB0YEQEEAIQdBACEMA0AgByASRgRAQQAhCEEAIQcDQCAEIAdGBEBBACENA0AgBCAIRwRAAkAgBiAIQQJ0aigCACIHQQBIDQAgAyAAIAhsQQN0aiEMIBAgACAHbEEDdGohGUEAIQcDQCAAIAdGDQEgDCAHQQN0IgtqIAsgGWorAwA5AwAgB0EBaiEHDAALAAsgCEEBaiEIDAELCwNAAkAgDSASRwRAIAUgDUECdGooAgAiB0ECdCIMIBcoAhRqIgQoAgQiCCAEKAIAIgRrIhlBAUoEQCAGIAxqKAIAQQBIBEAgGbchLCADIAAgB2xBA3RqIQxBACEHA0AgACAHRgRAIAQgCCAEIAhKGyEIA0BBACEHIAQgCEcEQANAIAAgB0cEQCAMIAdBA3QiGWoiCyADIBcoAhggBEECdGooAgAgAGxBA3RqIBlqKwMAIAsrAwCgOQMAIAdBAWohBwwBCwsgBEEBaiEEDAELCwNAIAAgB0YNBiAMIAdBA3RqIgQgBCsDACAsozkDACAHQQFqIQcMAAsABSAMIAdBA3RqQgA3AwAgB0EBaiEHDAELAAsAC0H1lgNBxroBQecHQaguEAAAC0GF6AJBxroBQeYHQaguEAAACyAGEBcgAigCNBogAisDQBogAigCUBogAi0AOBoQxAkgCRBkIBAQFyABIBdGDRIgFxBkDBILIA1BAWohDQwACwAFIAYgB0ECdGoiDSgCAEEATgRAIA0gDDYCACAMQQFqIQwLIAdBAWohBwwBCwALAAsgBSAHQQJ0aigCACIIQQBIIAggDU5yRQRAIAYgCEECdGpBfzYCAAsgB0EBaiEHDAALAAUgBiAHQQJ0akEBNgIAIAdBAWohBwwBCwALAAtBmp0DQca6AUHiCEHsgAEQAAALIApBAWohCgwACwALIApBAWohCgwACwAFIBkgBSAHQQJ0aigCAEECdGpBfzYCACAHQQFqIQcMAQsACwAFIBkgB0ECdGpBATYCACAHQQFqIQcMAQsACwALIAMhDSACKAIQIQQCfyAXQQAQuQIEQCAXIBcoAhBBAUYNARoLIBcQ0AkLIgUQwgkgBBDBCSEEIAUgF0cEQCAEQQE6ABwLIAQDQCAEIgkoAhQiBA0ACyAJKAIYBEAgCSgCBCAAbEEIEBghDQtBfyAXKAIAIgUgBUEASBtBAWohBCAXKAIYIREgFygCFCEKIAVBAWpBBBAYIQsDQCAEIAdHBEAgCyAHQQJ0akEANgIAIAdBAWohBwwBCwsgBUEAIAVBAEobIRADQCAMIBBHBEAgCiAMQQJ0aigCACIHIAogDEEBaiIEQQJ0aigCACIIIAcgCEobIRJBACEIA0AgByASRwRAIAggDCARIAdBAnRqKAIAR2ohCCAHQQFqIQcMAQsLIAsgCEECdGoiByAHKAIAQQFqIgc2AgAgDiAHIAcgDkgbIQ4gBCEMDAELC0QAAAAAAADwv0TNzMzMzMz8vyALKAIEtyIsIA64RJqZmZmZmek/omRFIAW3RDMzMzMzM9M/oiAsY0VyGyEsIAsQFyACKwMAROJt72SBAPC/YQRAIAIgLDkDAAtB6PoGKAIAISkCQANAAkACQAJAAkACQAJAAkAgAigCPA4EAAEDAgELIAIrAyAhLyACKAIYIRMgAisDCCEtIAIrAwAhLCAJKAIIIQ4gAi0ALCEEQc0TQSBBASApEEoaIA5FIBNBAExyDQUgDigCBCIRQQBMDQUgDigCACAAIBFsIg9BCBAYIRAgBkEANgIAIBFHBEAgBkGcfzYCAEEAIQwMBQsgDigCIEUEQCAOQQEQjAMiEigCGCEYIBIoAhQhFQJAIAItACxBAXFFDQAgAigCKBC3BUEAIQcDQCAHIA9GDQEgDSAHQQN0ahDAAzkDACAHQQFqIQcMAAsACyAtRAAAAAAAAAAAYwRAIAIgEiAAIA0Q9AQiLTkDCAsgBEECcSEeICxEAAAAAAAAAABmBEAgAkKAgICAgICA+L9/NwMARAAAAAAAAPC/ISwLRJqZmZmZmck/RAAAAAAAAABAICyhRAAAAAAAAAhAoxCpAZogLaMhMEEAIRZEAAAAAAAAAAAhLiAAQQgQGCEMIC1EAAAAAAAA8D8gLKEiMRCpASEyA0BBACEHA0ACQEEAIQQgByAPRgRAQQAhCwNAQQAhByALIBFGDQIDQCAAIAdGBEAgDSAAIAtsQQN0IghqIRRBACEKA0AgCiARRgRAAkAgCCAQaiEFQQAhBwNAIAAgB0YNASAFIAdBA3QiCGoiCiAIIAxqKwMAIAorAwCgOQMAIAdBAWohBwwACwALBQJAIAogC0YNACANIAAgCmxBA3RqIRxBACEHIA0gACALIAoQmQIgMRCpASEsA0AgACAHRg0BIAwgB0EDdCIFaiIgICArAwAgMiAFIBRqKwMAIAUgHGorAwChoiAso6A5AwAgB0EBaiEHDAALAAsgCkEBaiEKDAELCyALQQFqIQsMAgUgDCAHQQN0akIANwMAIAdBAWohBwwBCwALAAsABSAQIAdBA3RqQgA3AwAgB0EBaiEHDAILAAsLA0ACQEEAIQcgBCARRgRARAAAAAAAAAAAISwMAQsDQCAAIAdHBEAgDCAHQQN0akIANwMAIAdBAWohBwwBCwsgDSAAIARsQQN0IgtqIRQgFSAEQQFqIgVBAnRqIRwgFSAEQQJ0aigCACEKA0AgHCgCACAKTARAIAsgEGohBEEAIQcDQCAAIAdGBEAgBSEEDAUFIAQgB0EDdCIIaiILIAggDGorAwAgCysDAKA5AwAgB0EBaiEHDAELAAsABQJAIBggCkECdGoiICgCACIIIARGDQBBACEHIA0gACAEIAgQxgEhLANAIAAgB0YNASAMIAdBA3QiCGoiIyAwIAggFGorAwAgDSAgKAIAIABsQQN0aiAIaisDAKGiICyiICMrAwCgOQMAIAdBAWohBwwACwALIApBAWohCgwBCwALAAsLA0ACQCAHIBFHBEAgECAAIAdsQQN0IgVqIQtBACEIQQAhBANAIAAgBEYEQEQAAAAAAAAAACEtA0AgACAIRwRAIAwgCEEDdGorAwAiMyAzoiAtoCEtIAhBAWohCAwBCwtBACEIAkAgLZ8iLUQAAAAAAAAAAGRFDQADQCAAIAhGDQEgDCAIQQN0aiIEIAQrAwAgLaM5AwAgCEEBaiEIDAALAAsgLCAtoCEsIAUgDWohBEEAIQgDQCAAIAhGDQQgBCAIQQN0IgVqIgsgLyAFIAxqKwMAoiALKwMAoDkDACAIQQFqIQgMAAsABSAMIARBA3QiCmogCiALaisDADkDACAEQQFqIQQMAQsACwALAkAgHkUgLCAuZnJFBEAgLkRmZmZmZmbuP6IgLGMNASAvRK5H4XoUru8/okTNzMzMzMzsP6MhLwwBCyAvRM3MzMzMzOw/oiEvCyAvRPyp8dJNYlA/ZARAICwhLiAWQQFqIhYgE0gNAwsgAi0ALEEEcQRAIAAgEiANEPMECyAOIBJGDQggEhBkDAgLIAdBAWohBwwACwALAAtB+ssBQca6AUGlA0HNExAAAAsgCSgCCCEHDAILIAkoAggiBygCAEGRzgBIDQFBgIsLLQAARQ0AIB1BkM4ANgIQIClBvJ0BIB1BEGoQHRoLIAkoAgghC0EAIQhBACERRAAAAAAAAAAAIS4jAEGAAmsiDCQAAkAgC0UNACACKAIYIhVBAEwgAEEATHINACALKAIEIgpBAEwNACACLQAsIQUgAisDICEtIAIrAwghLyACKwMAITAgAigCFCEEIAsoAgAhByAMQShqQQBBuAEQMxogDCAENgIoIAZBADYCAAJAIAcgCkcEQCAGQZx/NgIAIAIgBDYCFAwBCyALKAIgRQRAIAtBARCMAyIOKAIYIRYgDigCFCESAkAgAi0ALEEBcUUNACACKAIoELcFIAAgCmwhBEEAIQcDQCAEIAdGDQEgDSAHQQN0ahDAAzkDACAHQQFqIQcMAAsACyAvRAAAAAAAAAAAYwRAIAIgDiAAIA0Q9AQiLzkDCAsgBUECcSEYIDBEAAAAAAAAAABmBEAgAkKAgICAgICA+L9/NwMARAAAAAAAAPC/ITALRJqZmZmZmck/RAAAAAAAAABAIDChRAAAAAAAAAhAoxCpAZogL6MhMkHo+gYoAgAhHiAAIApsQQgQGCEIIC9EAAAAAAAA8D8gMKEQqQEhMwNAIAxB4AFqIQRBACEHIAAgCiAMKAIoIhQgDRDABiITIgUoAhAhDyAFKAIAIRADQCAHQQRGBEBBACEHIA8gEGwiD0EAIA9BAEobIQ8DQCAHIA9HBEAgCCAHQQN0akIANwMAIAdBAWohBwwBCwsgBSAFIA0gCEQzMzMzMzPjPyAwIDMgBBC/AyAFIAggBBDKCSAQtyEsQQAhBwNAIAdBBEcEQCAEIAdBA3RqIgUgBSsDACAsozkDACAHQQFqIQcMAQsLBSAEIAdBA3RqQgA3AwAgB0EBaiEHDAELC0EAIQQDQAJAIAQgCkYEQEEAIQREAAAAAAAAAAAhLAwBCyANIAAgBGxBA3QiB2ohHCASIARBAWoiBUECdGohICAHIAhqISMgEiAEQQJ0aigCACEQA0AgICgCACAQTARAIAUhBAwDBQJAIBYgEEECdGoiGigCACIPIARGDQBBACEHIA0gACAEIA8QxgEhLANAIAAgB0YNASAjIAdBA3QiD2oiISAyIA8gHGorAwAgDSAaKAIAIABsQQN0aiAPaisDAKGiICyiICErAwCgOQMAIAdBAWohBwwACwALIBBBAWohEAwBCwALAAsLA0ACQCAEIApHBEAgCCAAIARsQQN0IhBqIQVEAAAAAAAAAAAhMUEAIQcDQCAAIAdHBEAgBSAHQQN0aisDACI0IDSiIDGgITEgB0EBaiEHDAELC0EAIQcCQCAxnyIxRAAAAAAAAAAAZEUNAANAIAAgB0YNASAFIAdBA3RqIg8gDysDACAxozkDACAHQQFqIQcMAAsACyAsIDGgISwgDSAQaiEQQQAhBwNAIAAgB0YNAiAQIAdBA3QiD2oiHCAtIAUgD2orAwCiIBwrAwCgOQMAIAdBAWohBwwACwALIBFBAWohEQJAIBMEQCATEPcEIAxBKGogDCsD8AFEZmZmZmZmCkCiIAwrA+gBRDMzMzMzM+s/oiAMKwPgAaCgELsJDAELQYCLCy0AAEUNACAOKAIIIQQgDCAvOQMgIAwgBDYCGCAMICw5AxAgDCAtOQMIIAwgETYCACAeQfa/AyAMEC0LAkAgGEUgLCAuZnJFBEAgLkRmZmZmZmbuP6IgLGMNASAtRK5H4XoUru8/okTNzMzMzMzsP6MhLQwBCyAtRM3MzMzMzOw/oiEtCyAtRPyp8dJNYlA/ZARAICwhLiARIBVIDQMLIAItACxBBHEEQCAAIA4gDRDzBAsgAiAUNgIUIAsgDkYNBCAOEGQMBAsgBEEBaiEEDAALAAsAC0H6ywFBxroBQZUCQeIZEAAACyAIEBcLIAxBgAJqJAAMAgtBACEOQQAhD0QAAAAAAAAAACEuIwBB4AFrIgokACACKwMgIS8gAigCGCEWIAIrAwghLCACKwMAIS0gAi0ALCEEIApBADYC3AEgCkEKNgLYASAKQQA2AtQBIApBADYC0AEgCkEANgLMASAKQgA3A8ABIAIoAhQhFSAKQQhqIgVBAEG4ARAzGgJAIAdFIBZBAExyIABBAExyDQAgBygCBCISQQBMDQAgBygCACERIBJBLU8EQCAFQQRyQQBBtAEQMxogCiAVNgIIIAogAEEKbEEIEBg2AtQBIApBCkEIEBg2AtABIApBCkEIEBg2AswBCyAGQQA2AgACQCARIBJHBEAgBkGcfzYCACAHIQwMAQsgBygCIEUEQCAHQQEQjAMiDCgCGCEcIAwoAhQhGAJAIAItACxBAXFFDQAgAigCKBC3BSAAIBFsIQVBACEIA0AgBSAIRg0BIA0gCEEDdGoQwAM5AwAgCEEBaiEIDAALAAsgLEQAAAAAAAAAAGMEQCACIAwgACANEPQEIiw5AwgLIARBAnEhICARQQAgEUEAShshIyAtRAAAAAAAAAAAZgRAIAJCgICAgICAgPi/fzcDAEQAAAAAAADwvyEtC0SamZmZmZnJP0QAAAAAAAAAQCAtoUQAAAAAAAAIQKMQqQGaICyjITUgEbghMiAAQQgQGCEOICxEAAAAAAAA8D8gLaEiMxCpASE0IBJBLUkhHgNAQQAhEyAeRQRAIAAgESAKKAIIIhUgDRDABiETCyAPQQFqIQ9BACEERAAAAAAAAAAAISxEAAAAAAAAAAAhMEQAAAAAAAAAACExA0BBACEIAkACQCAEICNHBEADQCAAIAhHBEAgDiAIQQN0akIANwMAIAhBAWohCAwBCwsgDSAAIARsQQN0aiEQIBggBEEBaiIFQQJ0aiEaIBggBEECdGooAgAhCwNAIBooAgAgC0oEQAJAIBwgC0ECdGoiISgCACIUIARGDQBBACEIIA0gACAEIBQQxgEhLQNAIAAgCEYNASAOIAhBA3QiFGoiJSA1IBAgFGorAwAgDSAhKAIAIABsQQN0aiAUaisDAKGiIC2iICUrAwCgOQMAIAhBAWohCAwACwALIAtBAWohCwwBCwtBACELIB5FBEAgEyAQIAQgCkHcAWogCkHYAWogCkHUAWogCkHQAWogCkHMAWogCkHAAWoQzQlBACEEIAooAtwBIghBACAIQQBKGyEUIAi3IS0gCigC1AEhGiAKKALQASEhIAooAswBISUgCisDwAEhNgNAIAQgFEYNAyAhIARBA3QiC2ohHyAaIAAgBGxBA3RqIRtBACEIIAsgJWorAwAiN0QWVueerwPSPCA3RBZW556vA9I8ZBsgMxCpASE3A0AgACAIRwRAIA4gCEEDdCILaiIkICQrAwAgNCAfKwMAoiALIBBqKwMAIAsgG2orAwChoiA3o6A5AwAgCEEBaiEIDAELCyAEQQFqIQQMAAsACwNAIAsgEUYNAwJAIAQgC0YNACANIAAgC2xBA3RqIRpBACEIIA0gACAEIAsQmQIgMxCpASEtA0AgACAIRg0BIA4gCEEDdCIUaiIhICErAwAgNCAQIBRqKwMAIBQgGmorAwChoiAto6A5AwAgCEEBaiEIDAALAAsgC0EBaiELDAALAAsgEwRAIBMQ9wQgCkEIaiAwIDKjRAAAAAAAABRAoiAxIDKjoBC7CQsCQCAgRSAsIC5mckUEQCAuRGZmZmZmZu4/oiAsYw0BIC9ErkfhehSu7z+iRM3MzMzMzOw/oyEvDAELIC9EzczMzMzM7D+iIS8LIC9E/Knx0k1iUD9kBEAgLCEuIA8gFkgNBAsgAi0ALEEEcUUNBSAAIAwgDRDzBAwFCyAwIC2gITAgMSA2oCExC0QAAAAAAAAAACEtQQAhCANAIAAgCEcEQCAOIAhBA3RqKwMAIjYgNqIgLaAhLSAIQQFqIQgMAQsLQQAhCAJAIC2fIi1EAAAAAAAAAABkRQ0AA0AgACAIRg0BIA4gCEEDdGoiBCAEKwMAIC2jOQMAIAhBAWohCAwACwALICwgLaAhLEEAIQgDQCAAIAhGBEAgBSEEDAIFIBAgCEEDdCIEaiILIC8gBCAOaisDAKIgCysDAKA5AwAgCEEBaiEIDAELAAsACwALAAtB+ssBQca6AUGuBEH3gAEQAAALIBJBLU8EQCACIBU2AhQLIAcgDEcEQCAMEGQLIA4QFyAKKALUARAXIAooAtABEBcgCigCzAEQFwsgCkHgAWokAAwBCyAMEBcgEBAXCyAJKAIYIgUEQCAGKAIABEAgDRAXDAMLIAkoAgwgAyEEIAUoAhgEQCAFKAIEIABsQQgQGCEECyACKwMIISwgBSgCECEOIAUoAgghByANIAQgABDTCSAHKAIYIRAgBygCFCERIABBCBAYIQlBACEIIAcoAgAiB0EAIAdBAEobIRIDQAJAQQAhByAIIgwgEkYNAANAIAAgB0cEQCAJIAdBA3RqQgA3AwAgB0EBaiEHDAELCyARIAxBAnRqKAIAIgogESAMQQFqIghBAnRqKAIAIgcgByAKSBshE0EAIQsDQCAKIBNHBEAgDCAQIApBAnRqKAIAIgdHBEAgBCAAIAdsQQN0aiEPQQAhBwNAIAAgB0cEQCAJIAdBA3QiFWoiFiAPIBVqKwMAIBYrAwCgOQMAIAdBAWohBwwBCwsgC0EBaiELCyAKQQFqIQoMAQsLIAtBAEwNAUQAAAAAAADgPyALuKMhLiAEIAAgDGxBA3RqIQxBACEHA0AgACAHRg0CIAwgB0EDdCILaiIKIAorAwBEAAAAAAAA4D+iIC4gCSALaisDAKKgOQMAIAdBAWohBwwACwALCyAJEBcgDigCACIMQQAgDEEAShshCyAsRPyp8dJNYlA/oiEsIA4oAhghCiAOKAIUIQkDQCAHIAtHBEAgCSAHQQFqIgxBAnRqIQ4gCSAHQQJ0aigCACEIA0AgCEEBaiIIIA4oAgBOBEAgDCEHDAMLIAogCEECdGohEUEAIQcDQCAAIAdGDQEQwAMhLiAEIBEoAgAgAGxBA3RqIAdBA3RqIhAgLCAuRAAAAAAAAOC/oKIgECsDAKA5AwAgB0EBaiEHDAALAAsACwsgDRAXIAJCmrPmzJmz5tw/NwMgIAIgAi0ALEH8AXE6ACwgAiACKwMIRAAAAAAAAOg/ojkDCCAEIQ0gBSEJDAELCyAXIQUgAyENQQAhBkEAIQlBACELRAAAAAAAAAAAIS1EAAAAAAAAAAAhLkQAAAAAAAAAACEvAkACQAJAAkACQAJAIAIoAjAiA0EBaw4GAwECBAAABQsgBSgCAEEDSA0EAn8gACEMIANBBkchCkEAIQMgBSgCGCEQIAUoAhQhByAFKAIAIQgCQAJAIAVBABC5AgRAIAhBACAIQQBKGyEOIAhBCBAYIREDQCADIA5HBEAgESADQQN0aiELIAcgA0EBaiIEQQJ0aiESIAcgA0ECdGooAgAhBkEAIQlEAAAAAAAAAAAhLANAIBIoAgAgBkoEQCAQIAZBAnRqKAIAIhMgA0cEQCALIA0gDCADIBMQxgEgLKAiLDkDACAJQQFqIQkLIAZBAWohBgwBCwsgCUEATA0DIAsgLCAJuKM5AwAgBCEDDAELC0E4EE0iCUL7qLi9lNyewj83AyggCUIANwIUIAlCgICAgICAgPg/NwMgIAkgBSgCALefnDkDMCAJIAhBCBAYIg82AgwgCSAFAn8gCEEDTgRAIAoEQEEAIQMjAEEQayIEJAAgBEKAgICAgICA+D83AwggCBDfASEGIAgQ3wEhByAEQQA2AgQgCEEAIAhBAEobIQsDQCADIAtHBEAgBiADQQN0IgVqIA0gA0EEdGoiCisDADkDACAFIAdqIAorAwg5AwAgA0EBaiEDDAELC0EAIQMgCEEDTgRAIwBBEGsiBSQAIAVBmcwDNgIAQYHzAyAFEDEgBUEQaiQACyAIIAhBAUEBQQEQmgIhBQNAIAQoAgQgA0oEQCAFIANBA3QiCigCACAKKAIEIARBCGoQiAQgA0EBaiEDDAELCyAIQQJGBEAgBUEAQQEgBEEIahCIBAtBACEDA0AgAyALRwRAIAUgAyADIARBCGoQiAQgA0EBaiEDDAELCyAFENQJIQMgBRBkIANBABCMAyADEGRBABAXIAYQFyAHEBcgBEEQaiQADAILQQAhBCMAQRBrIgUkACAFQoCAgICAgID4PzcDCCAIQQAgCEEAShshCiAIEN8BIRAgCBDfASESA0AgBCAKRwRAIBAgBEEDdCIDaiANIAQgDGxBA3RqIgYrAwA5AwAgAyASaiAGKwMIOQMAIARBAWohBAwBCwtBACEHIwBBEGsiBiQAAkACQAJAAkAgCEEBaw4CAQACC0EEQQQQzQIhBEECQQwQzQIiAyAENgIEIANBADYCCCADQQI2AgAgBEKAgICAEDcCACADQQA2AhQgAyAEQQhqNgIQIANBAjYCDCAEQgE3AggMAgtBAUEEEM0CIQRBAUEMEM0CIgMgBDYCBCADQQA2AgggA0EBNgIAIARBADYCAAwBCyAGQZnMAzYCAEHl8gMgBhAxQQAhAwsgBkEQaiQAIAggCEEBQQFBARCaAiELQQAhBgNAIAYgCkYEQANAIAcgCkcEQCALIAcgByAFQQhqEIgEIAdBAWohBwwBCwsFIAMgBkEMbGohE0EBIQQDQCATKAIAIARKBEAgCyAGIBMoAgQgBEECdGooAgAgBUEIahCIBCAEQQFqIQQMAQsLIAZBAWohBgwBCwsgCxDUCSIEQQAQjAMgBBBkIAsQZCAQEBcgEhAXIAMEQCADKAIEEBcgAygCCBAXIAMQFwsgBUEQaiQADAELIAUQiQQLIgQQwgYiAzYCBCAEEGQgCSADEIkEIgQ2AgggA0EAIAQbRQRAIAkQ9QRBAAwECyAEKAIcIQcgAygCHCEKIAMoAhghEiADKAIUIQtBACEDA0AgAyAORwRAIAsgA0EBaiIFQQJ0aiETIAsgA0ECdGooAgAhBkF/IQREAAAAAAAAAAAhLUQAAAAAAAAAACEsA0AgEygCACAGSgRAAkAgAyASIAZBAnRqKAIAIhBGBEAgBiEEDAELIAogBkEDdCIVakQAAAAAAADwPyANIAwgAyAQEJkCRDMzMzMzM+M/EKkBIjAgMKKjIjE5AwAgByAVaiIVIDAgMaIiMjkDACAyIA0gDCADIBAQxgGiIC6gIS4gLCAxoCEsIDAgFSsDACIwoiAvoCEvIC0gMKAhLQsgBkEBaiEGDAELCyAPIANBA3RqIgMgAysDACAsmqIiMDkDACAEQQBIDQQgCiAEQQN0IgNqIDAgLKE5AwAgAyAHaiAtmjkDACAFIQMMAQsLQQAhBiALIAhBAnRqKAIAIgNBACADQQBKGyEDIC4gL6MhLANAIAMgBkcEQCAHIAZBA3RqIgQgLCAEKwMAojkDACAGQQFqIQYMAQsLIAkgLDkDICAREBcgCQwDC0GingNBrbgBQawFQaAVEAAAC0HjjgNBrbgBQbgFQaAVEAAAC0GCkgNBrbgBQfoFQaAVEAAACyIDIAwgDRC/CSADEPUEDAQLQQEhBgwBC0ECIQYLAn8gACEHIAYhDEEAIQZBACEEIAUoAhghECAFKAIUIQ4gBSgCACEIIAVBABC5AgRAIAUgByANEMAJISRBOBBNIgpC+6i4vZTcnsI/NwMoIApCADcCFCAKQoCAgICAgID4PzcDICAKIAUoAgC3n5w5AzAgCiAIQQgQGCIgNgIMIAhBACAIQQBKGyETA0AgBiATRwRAICAgBkEDdGpEmpmZmZmZqT85AwAgBkEBaiEGDAELCyAIQQQQGCERIAhBCBAYIRJBACEDA0AgAyATRgRAA0AgBCATRgRAQQAhCUEAIQMDQCADIBNHBEAgESADQQJ0IgRqIAM2AgAgBCAOaigCACIEIA4gA0EBaiIFQQJ0aigCACIGIAQgBkobIQsgBCEGA0AgBiALRwRAIAMgESAQIAZBAnRqKAIAQQJ0aiIPKAIARwRAIA8gAzYCACAJQQFqIQkLIAZBAWohBgwBCwsDQCAEIAtGBEAgBSEDDAMFIA4gECAEQQJ0aigCAEECdGoiDygCACIGIA8oAgQiDyAGIA9KGyEPA0AgBiAPRwRAIAMgESAQIAZBAnRqKAIAQQJ0aiIVKAIARwRAIBUgAzYCACAJQQFqIQkLIAZBAWohBgwBCwsgBEEBaiEEDAELAAsACwsgCiAIIAggCCAJaiIDQQFBABCaAiIPNgIEIAogCCAIIANBAUEAEJoCIhU2AgggD0EAIBUbRQRAIAoQ9QRBAAwGCyAVKAIYIR4gFSgCHCEWIA8oAhwhFCAPKAIYIRwgDygCFCEjQQAhAyAVKAIUIiZBADYCACAjQQA2AgBBACEEA0AgBCATRwRAIBEgBEECdCIGaiAEIAhqIhg2AgAgEiAEQQN0IidqIRogDiAEQQFqIgVBAnQiIWohJSAGIA5qIgsoAgAhBkQAAAAAAAAAACEwRAAAAAAAAAAAIS4DQCAlKAIAIgkgBkoEQCAYIBEgECAGQQJ0aigCACIJQQJ0aiIfKAIARwRAIB8gGDYCACAcIANBAnQiH2ogCTYCAEQAAAAAAADwPyEsAkACQAJAAkAgDA4DAwIAAQsgDSAHIAQgCRCZAkSamZmZmZnZPxCpASEsDAILQfz+AEEdQQFB6PoGKAIAEEoaQZSXA0GtuAFBxgFB0hUQAAALIBorAwAgEiAJQQN0aisDAKBEAAAAAAAA4D+iISwLIBQgA0EDdCIbakQAAAAAAADwvyAsICyioyIxOQMAIB4gH2ogCTYCACAWIBtqIh8gLCAxoiIyOQMAIDIgDSAHIAQgCRDGAaIgL6AhLyAuIDGgIS4gMCAfKwMAIjGgITAgMSAsoiAtoCEtIANBAWohAwsgBkEBaiEGDAELCyALKAIAIQsDQCAJIAtKBEAgEiAQIAtBAnRqKAIAIh9BA3RqISggDiAfQQJ0aiIqKAIAIQYDQCAqKAIEIAZKBEAgGCARIBAgBkECdGoiGygCACIJQQJ0aiIrKAIARwRAICsgGDYCAEQAAAAAAAAAQCEsAkACQAJAAkAgDA4DAwIAAQsgDSAHIAQgCRCZAiAbKAIAIQlEmpmZmZmZ2T8QqQEhLAwCC0H8/gBBHUEBQej6BigCABBKGkGUlwNBrbgBQfABQdIVEAAACyAoKwMAIiwgLKAgGisDAKAgEiAJQQN0aisDAKBEAAAAAAAA4D+iISwLIBwgA0ECdCIraiAJNgIAIBQgA0EDdCIJakQAAAAAAADwvyAsICyioyIxOQMAIB4gK2ogGygCACIbNgIAIAkgFmoiCSAsIDGiIjI5AwAgMiANIAcgGyAfEMYBoiAvoCEvIC4gMaAhLiAwIAkrAwAiMaAhMCAxICyiIC2gIS0gA0EBaiEDCyAGQQFqIQYMAQsLIAtBAWohCyAlKAIAIQkMAQsLIBwgA0ECdCIGaiAENgIAICAgJ2oiCSAJKwMAIC6aoiIsOQMAIBQgA0EDdCIJaiAsIC6hOQMAIAYgHmogBDYCACAJIBZqIDCaOQMAICEgI2ogA0EBaiIDNgIAICEgJmogAzYCACAFIQQMAQsLQQAhBiADQQAgA0EAShshBCAvIC2jISwDQCAEIAZHBEAgFiAGQQN0aiIFICwgBSsDAKI5AwAgBkEBaiEGDAELCyAKICw5AyAgDyADNgIIIBUgAzYCCCAREBcgEhAXICQQZCAKDAUFIBEgBEECdGpBfzYCACAEQQFqIQQMAQsACwALIBIgA0EDdGohCyAOIANBAWoiBUECdGohDyAOIANBAnRqKAIAIQZBACEJRAAAAAAAAAAAISwDQCAPKAIAIAZKBEAgECAGQQJ0aigCACIVIANHBEAgCyANIAcgAyAVEMYBICygIiw5AwAgCUEBaiEJCyAGQQFqIQYMAQsLIAlBAEoEQCALICwgCbijOQMAIAUhAwwBCwtB444DQa24AUGJAUHSFRAAAAtBop4DQa24AUHwAEHSFRAAAAsiAyAHIA0QvwkgAxD1BAwBCwJ/IAAhDEEAIQMgBSgCGCEOIAUoAhQhCCAFKAIAIREgBUEAELkCBEAgBSAAIA0QwAkiHCgCHCEVIBFBACARQQBKGyESQQgQTSETIBFBBBAYIQogEUEIEBghEANAIAMgEkYEQEEAIQcDQCAHIBJGBEBBACEDA0AgAyASRwRAIAogA0ECdCIEaiADNgIAIAQgCGooAgAiBiAIIANBAWoiBEECdGooAgAiByAGIAdKGyEPIAYhBwNAIAcgD0cEQCADIAogDiAHQQJ0aigCAEECdGoiFigCAEcEQCAWIAM2AgAgCUEBaiEJCyAHQQFqIQcMAQsLA0AgBiAPRgRAIAQhAwwDBSAIIA4gBkECdGooAgBBAnRqIhYoAgAiByAWKAIEIhYgByAWShshFgNAIAcgFkcEQCADIAogDiAHQQJ0aigCAEECdGoiGCgCAEcEQCAYIAM2AgAgCUEBaiEJCyAHQQFqIQcMAQsLIAZBAWohBgwBCwALAAsLQQAhAyATIBEgESAJQQFBABCaAiIENgIAIARFBEAgExC+CUEADAYLIAQoAhwhFiAEKAIYIRggBCgCFCIgQQA2AgADQCALIBJHBEAgCiALQQJ0IgZqIAsgEWoiDzYCACAQIAtBA3RqIR4gCCALQQFqIgtBAnQiI2ohFCAGIAhqIgkoAgAhBwNAIBQoAgAiBiAHSgRAIA8gCiAOIAdBAnRqKAIAIgZBAnRqIhooAgBHBEAgGiAPNgIAIBggA0ECdGogBjYCACAWIANBA3RqIhogHisDACAQIAZBA3RqKwMAoEQAAAAAAADgP6I5AwAgGiAVIAdBA3RqKwMAOQMAIANBAWohAwsgB0EBaiEHDAELCyAJKAIAIQkDQCAGIAlKBEAgFSAJQQN0aiEGIBAgDiAJQQJ0aigCACIHQQN0aiEaIAggB0ECdGoiISgCACEHA0AgISgCBCAHSgRAIA8gCiAOIAdBAnRqIiUoAgAiH0ECdGoiGygCAEcEQCAbIA82AgAgGCADQQJ0aiAfNgIAIBYgA0EDdGoiHyAaKwMAIiwgLKAgHisDAKAgECAlKAIAQQN0aisDAKBEAAAAAAAA4D+iOQMAIB8gBisDACAVIAdBA3RqKwMAoDkDACADQQFqIQMLIAdBAWohBwwBCwsgCUEBaiEJIBQoAgAhBgwBCwsgICAjaiADNgIADAELCyAEIAM2AgggExC9CSIDNgIEIAMgAkHYABAgIgNBATYCECADQRQ2AhggAyADLQAsQf4BcToALCADIAMrAyBEAAAAAAAA4D+iOQMgIAoQFyAQEBcgHBBkIBMMBQUgCiAHQQJ0akF/NgIAIAdBAWohBwwBCwALAAsgECADQQN0aiEPIAggA0EBaiIEQQJ0aiEWIAggA0ECdGooAgAhB0EAIQZEAAAAAAAAAAAhLANAIBYoAgAgB0oEQCAOIAdBAnRqKAIAIhggA0cEQCAPIA0gDCADIBgQxgEgLKAiLDkDACAGQQFqIQYLIAdBAWohBwwBCwsgBkEASgRAIA8gLCAGuKM5AwAgBCEDDAELC0HjjgNBrbgBQasGQY0VEAAAC0GingNBrbgBQZkGQY0VEAAACyIcIQRBACELQQAhE0EAIQ8jAEEQayIQJAAgEEEANgIMIAQoAgAhAyAEKAIEIQojAEEgayIIJAAgCisDICEvIAooAhghFSAKKwMIIS0gCisDACEsIAotACwhCSAIQQA2AhwgCEEKNgIYIAhBADYCFCAIQQA2AhAgCEEANgIMIAhCADcDAAJAIAVFIBVBAExyIAxBAExyDQAgBSgCBCIEQQBMDQAgBSgCACEOIARBLU8EQCAIIAxBCmxBCBAYNgIUIAhBCkEIEBg2AhAgCEEKQQgQGDYCDAsgEEEANgIMAkAgBCAORwRAIBBBnH82AgwgBSEHDAELIAUoAiBFBEAgBUEBEIwDIgcoAhghICAHKAIUIRYgAygCHCEjIAMoAhghGiADKAIUIRgCQCAKLQAsQQFxRQ0AIAooAigQtwUgDCAObCEDQQAhBgNAIAMgBkYNASANIAZBA3RqEMADOQMAIAZBAWohBgwACwALIC1EAAAAAAAAAABjBEAgCiAHIAwgDRD0BCItOQMICyAMIA5sIgNBA3QhISAJQQJxISUgDkEAIA5BAEobIR8gLEQAAAAAAAAAAGYEQCAKQoCAgICAgID4v383AwBEAAAAAAAA8L8hLAtEmpmZmZmZyT9EAAAAAAAAAEAgLKFEAAAAAAAACECjEKkBIC2jIi5EmpmZmZmZyT+iITIgLpohMyAMQQgQGCELIANBCBAYIRMgLUQAAAAAAADwPyAsoSIwEKkBITEgBEEtSSEeRAAAAAAAAAAAIS4DQCATIA0gIRAgGkEAIRIgHkUEQCAMIA5BCiANEMAGIRILIA9BAWohD0EAIQNEAAAAAAAAAAAhLANAQQAhBgJAIAMgH0cEQANAIAYgDEcEQCALIAZBA3RqQgA3AwAgBkEBaiEGDAELCyANIAMgDGxBA3RqIREgFiADQQFqIgRBAnQiG2ohJCAWIANBAnQiJmooAgAhCQNAICQoAgAgCUoEQAJAICAgCUECdGoiJygCACIUIANGDQBBACEGIA0gDCADIBQQxgEhLQNAIAYgDEYNASALIAZBA3QiFGoiKCARIBRqKwMAIA0gJygCACAMbEEDdGogFGorAwChIDOiIC2iICgrAwCgOQMAIAZBAWohBgwACwALIAlBAWohCQwBCwsgGCAbaiEbIBggJmooAgAhCQNAIBsoAgAgCUoEQAJAIBogCUECdGoiJCgCACIUIANGDQAgIyAJQQN0aiEmQQAhBiANIAwgAyAUEJkCIS0DQCAGIAxGDQEgCyAGQQN0IhRqIicgJysDACAtICYrAwAiNKEiNSA1IDIgESAUaisDACANICQoAgAgDGxBA3RqIBRqKwMAoaKioiAtoyI1IDWaIC0gNGMboDkDACAGQQFqIQYMAAsACyAJQQFqIQkMAQsLQQAhCSAeRQRAIBIgESADIAhBHGogCEEYaiAIQRRqIAhBEGogCEEMaiAIEM0JIAgoAhwiA0EAIANBAEobIRQgCCgCFCEbIAgoAhAhJCAIKAIMISYDQCAJIBRGDQMgJCAJQQN0IgNqIScgGyAJIAxsQQN0aiEoQQAhBiADICZqKwMAIi1EFlbnnq8D0jwgLUQWVueerwPSPGQbIDAQqQEhLQNAIAYgDEcEQCALIAZBA3QiA2oiKiAqKwMAIDEgJysDAKIgAyARaisDACADIChqKwMAoaIgLaOgOQMAIAZBAWohBgwBCwsgCUEBaiEJDAALAAsDQCAJIA5GDQICQCADIAlGDQAgDSAJIAxsQQN0aiEbQQAhBiANIAwgAyAJEJkCIDAQqQEhLQNAIAYgDEYNASALIAZBA3QiFGoiJCAkKwMAIDEgESAUaisDACAUIBtqKwMAoaIgLaOgOQMAIAZBAWohBgwACwALIAlBAWohCQwACwALIBIEQCASEPcECwJAICVFICwgLmZyRQRAIC5EZmZmZmZm7j+iICxjDQEgL0SuR+F6FK7vP6JEzczMzMzM7D+jIS8MAQsgL0TNzMzMzMzsP6IhLwsgL0T8qfHSTWJQP2QEQCAsIS4gDyAVSA0DCyAKLQAsQQRxRQ0EIAwgByANEPMEDAQLRAAAAAAAAAAAIS1BACEGA0AgBiAMRwRAIAsgBkEDdGorAwAiNCA0oiAtoCEtIAZBAWohBgwBCwtBACEGAkAgLZ8iLUQAAAAAAAAAAGRFDQADQCAGIAxGDQEgCyAGQQN0aiIDIAMrAwAgLaM5AwAgBkEBaiEGDAALAAsgLCAtoCEsQQAhBgNAIAYgDEYEQCAEIQMMAgUgESAGQQN0IgNqIgkgLyADIAtqKwMAoiAJKwMAoDkDACAGQQFqIQYMAQsACwALAAsAC0H6ywFBxroBQdEFQZOBARAAAAsgExAXIAUgB0cEQCAHEGQLIAsQFyAIKAIUEBcgCCgCEBAXIAgoAgwQFwsgCEEgaiQAIBAoAgwEQEHNgwFBrbgBQYoHQeD2ABAAAAsgEEEQaiQAIBwQvgkLQYCLCy0AAARAIB0gAigCNDYCACApQeeyBCAdEB0aCwJAAkAgAEECRgRAQQAhAEEAIQQjAEEwayIDJAADQCAAQQRHBEAgA0EQaiAAQQN0akIANwMAIABBAWohAAwBCwsgA0IANwMIIANCADcDACAiQQAgIkEAShshBQNAIAQgBUcEQCAEQQF0IQZBACEAA0AgAEECRwRAIAMgAEEDdGoiByANIAAgBnJBA3RqKwMAIAcrAwCgOQMAIABBAWohAAwBCwsgBEEBaiEEDAELCyAityEsQQAhBEEAIQADQCAAQQJGBEACQAN/IAQgBUYEf0EABSAEQQF0IQZBACEAA0AgAEECRwRAIA0gACAGckEDdGoiByAHKwMAIAMgAEEDdGorAwChOQMAIABBAWohAAwBCwsgBEEBaiEEDAELCyEEA0ACQCAEIAVHBEAgBEEBdCEHQQAhBgNAIAZBAkYNAiAGQQF0IQwgDSAGIAdyQQN0aisDACEsQQAhAANAIABBAkcEQCADQRBqIAAgDHJBA3RqIgkgLCANIAAgB3JBA3RqKwMAoiAJKwMAoDkDACAAQQFqIQAMAQsLIAZBAWohBgwACwALRAAAAAAAAAAAISwgAysDGCIuRAAAAAAAAAAAYgRAIAMrAygiLCADKwMQIi2hICwgLKIgLUQAAAAAAAAAwKIgLKIgLSAtoiAuIC5EAAAAAAAAEECioqCgoJ+hmiAuIC6goyEsC0QAAAAAAADwPyAsICyiRAAAAAAAAPA/oJ8iLaMhLiAsIC2jISxBACEAA0AgACAFRwRAIA0gAEEEdGoiBCAsIAQrAwgiLaIgBCsDACIvIC6ioTkDCCAEIC8gLKIgLiAtoqA5AwAgAEEBaiEADAELCyADQTBqJAAMAgsgBEEBaiEEDAALAAsFIAMgAEEDdGoiBiAGKwMAICyjOQMAIABBAWohAAwBCwsgAisDSCIuRAAAAAAAAAAAYQ0CIB1CADcDeCAdQgA3A3BBACEHIB0rA3ghLSAdKwNwISwDQCAHICJGDQIgDSAHQQR0aiIAKwMAICygISwgACsDCCAtoCEtIAdBAWohBwwACwALIAIrA0hEAAAAAAAAAABhDQFBo+gCQca6AUGzB0HtkQEQAAALIB0gLTkDeCAdICw5A3AgIrghLEEAIQcDQCAHQQJGBEBBACEHIB0rA3ghLCAdKwNwIS0DQCAHICJHBEAgDSAHQQR0aiIAIAArAwAgLaE5AwAgACAAKwMIICyhOQMIIAdBAWohBwwBCwtBACEHIC5EcOINpUXfkb+iIi4QVyEsIC4QRCEuA0AgByAiRg0DIA0gB0EEdGoiACAuIAArAwgiLaIgACsDACIvICyioTkDCCAAIC8gLqIgLCAtoqA5AwAgB0EBaiEHDAALAAUgHUHwAGogB0EDdGoiACAAKwMAICyjOQMAIAdBAWohBwwBCwALAAsgAigCNBogAisDQBogAigCUBogAi0AOBoQxAkLIAIgHUEYakHYABAgGiABIBdHBEAgFxBkCxDDCQsgHUGAAWokAAtMAQF/IAEgACgCBCICSQRAIAJBIU8EfyAAKAIABSAACyABQQN2aiIAIAAtAABBASABQQdxdHI6AAAPC0GrqQNB5PoAQdEAQaIgEAAAC6oCAQN/AkACQCAAKAIAIgJBAE4EQCAAQQhqIgQgAkEDdGogATkDAAJAAkACQCAAKAKwAQ4CAAECCyACQRRGBEAgAEETNgIAIABBfzYCsAEPCyAAQQE2ArABIABBFCACQQFqIAJBFE8bNgIADwsgAkUNAiACQQFrIQMCQCACQRNLDQAgBCADQQN0aisDACABZEUNACAAIAJBAWo2AgAPCyAAQX82ArABIAAgAzYCAA8LIAJBFE8NAiACQQFqIQMCQCACRQ0AIAQgA0EDdGorAwAgAWRFDQAgACACQQFrNgIADwsgAEEBNgKwASAAIAM2AgAPC0HwkQNBxroBQfkAQbjkABAAAAtBtYYDQca6AUGEAUG45AAQAAALQdfSAUHGugFBjAFBuOQAEAAAC4qGAQNbfxF8An4jAEHgJWsiAiQAIAJB4AVqQQBB4AAQMxogACgCEC8BiAEgAiACQegIajYC4AZBDnEiEgRAAkACQCASQQRGBEAgABC2CSAAKAJIKAIQLQBxQQFxRQ0BQfvbA0EAECcMAQsgEkEIRw0AIAAQtgkCQAJAIAAoAkgoAhAtAHFBAXEEQCAAKAIQQcABaiELA0AgCygCACIBRQ0CAkAgASgCECILLQCsAUEBRw0AAkAgCygCgAEiAwRAIAMoAhAoAmAiBEUNBiAEIAspAxA3AzggBEFAayALKQMYNwMAIARBAToAUQwBCyALKAJ4IgRFDQEgARC6BgsgACAEEI4CIAEoAhAhCwsgC0G4AWohCwwACwALIABBABD9BwwDCyAAQQEQ/QcMAgtBx/IAQeW4AUHzAUGYKxAAAAsgABDxBkGUkQtBlJELKAIAIgNBAWo2AgACQCADQQBKDQBBnJELQQA2AgBBmJELQQA2AgBBgIsLLQAARQ0AQbiRCxCoAQsgAkIANwPABSACQgA3A7gFIAAoAhAoAvgBIQMgAkEANgLYBSACIAO3OQPQBSACIANBBG23OQPIBUGAAUEEEBghDyAAKAIQIgooAugBIQUDQAJAAkAgCigC7AEgBU4EQCAKKALEASIEIAVBBnQiCWoiAygCBCIHKAIAIggEQCACIAIrA7gFIl0gCCgCECIIKwMQIAgrA1ihIl4gXSBeYxs5A7gFCwJ8IAMoAgAiA0UEQCACKwPABQwBCyACKwPABSJdIAcgA0ECdGpBBGsoAgAiB0UNABogXSAHKAIQIgcrAxAgBysDYKAiXiBdIF5kGwshXSADIAZqIQYgAiBdRAAAAAAAADBAoDkDwAUgAiACKwO4BUQAAAAAAAAwwKA5A7gFQQAhCANAIAMgCEwNAwJAIAQgCWooAgQgCEECdGooAgAiBCgCECIDKAKAASIHBH8gBygCECgCYCIORQ0EIA4gAykDEDcDOCAOQUBrIAMpAxg3AwAgBygCECgCYEEBOgBRIAQoAhAFIAMLLQCsAQRAIARBvPUHKAIAEQIARQ0BC0EAIQMDQCAEKAIQIg4oAsgBIANBAnRqKAIAIgcEQAJAAkAgBygCECIOLQBwQQRrDgMBAAEACyAOQdEANgKkASAPIAtBAnRqIAc2AgAgC0EBaiIHQf8AcUUEQCAPIAcgC0GBAWpBBBBgIQ8LIAchCwsgA0EBaiEDDAELC0EAIQMCQCAOKALQASIMRQ0AA0AgDCADQQJ0aigCACIHRQ0BIAdBAhCpCSAPIAtBAnRqIAc2AgAgC0EBaiIHQf8AcUUEQCAPIAcgC0GBAWpBBBBgIQ8LIANBAWohAyAEKAIQIg4oAtABIQwgByELDAALAAsgDigC4AEiDEUNACAOLQCsAUUEQCAOKwOAAiFdIA4gDisDYDkDgAIgDiBdOQNgC0EAIQMDQCAMIANBAnRqKAIAIgdFDQEgB0EAEKkJIA8gC0ECdGogBzYCACALQQFqIgdB/wBxRQRAIA8gByALQYEBakEEEGAhDwsgA0EBaiEDIAQoAhAoAuABIQwgByELDAALAAsgCEEBaiEIIAAoAhAiCigCxAEiBCAJaigCACEDDAALAAsgDyALQQRBBBCUASACIAZB6AJqQSAQGDYCtAYgAiAFQSAQGDYC2AUCQCASQQJHIhoNACAAKAIQQcABaiEDA0AgAygCACIFRQ0BAkAgBSgCECIDLQCsAUEBRw0AIAMoAnhFDQAgBRC6BiAFKAIQIQMLIANBuAFqIQMMAAsACyASQQZGISkgAkHoB2ohNSACQcAHaiE2IAJB0CBqIRUgAkHAIGohICACQbAgaiEUIAJBoBtqIRYgAkHYIGohFyACQdgKaiEiIAJBkBBqIRsgAkHQGmohKiACQcAaaiErIAJBsBpqISEgAkGgGmohIyACQZAaaiEsIAJBgBpqIS0gAkHwF2ohNyACQcgXaiE4IAJB0BZqIS4gAkGAF2ohLyACQcAZaiE5IAJBsApqITogAkGIGWohMCACQbgZaiExIAJB6A9qITIgAkHoGWohMyACQZgaaiE0IAJByAZqITsgAkH4BmohPCASQQRHIT0gEkEKRyEcQQAhDgNAAkACQAJAAkAgCyAOIgdNBEAgACgCEEHAAWohCwNAIAsoAgAiBUUNAgJAIAUoAhAiAy0ArAFBAUcNACADKAJ4RQ0AIAUQugYgACAFKAIQKAJ4EI4CIAUoAhAhAwsgA0G4AWohCwwACwALIA8gB0ECdGoiESgCACIIELsDIQoCQCAIKAIQIgMtACwEQCAIIQQMAQsgCCAKIAMtAFQbIgQoAhAhAwsCQCADLQCkAUEgcUUEQCADIQYMAQsgAigC4AYiBiADQbgBECAhBSACQdAGaiIDIARBMBAgGiACIAU2AuAGQShB2AAgAigC0AZBA3EiCUEDRhsgA2ogBEFQQQAgBCgCAEEDcSIOQQJHG2ooAig2AgAgPCA7IAlBAkYbIARBMEEAIA5BA0cbaigCKDYCACAFQRBqIAQoAhBBOGpBKBAgGiAFQThqIAQoAhBBEGpBKBAgGiAFIAQ2AnggBUEBOgBwIAMhBAtBASEMIAchDgNAAkAgDkEBaiIOIAtPDQAgCiAPIA5BAnRqIhAoAgAiCRC7AyIFRw0AIAgoAhAtAHJFBEACQCAJKAIQIgMtACwEQCAJIQUMAQsgCSAFIAMtAFQbIgUoAhAhAwsgAy0ApAFBIHEEQCACQbAHaiINIANBuAEQIBogBSgCACEDIAIgBSgCKDYCyAYgAkHIBmogAkHABmogA0EDcSIDQQNGIgYbIAVBUEEAIANBAkcbaigCKDYCACACIAVBAEEwIAYbaigCKDYCyAYgNiAFKAIQIgNBOGpBKBAgGiA1IANBEGpBKBAgGiACIAU2AqgIIAJBAToAoAggBCgCECEGIA0hAwsgBi0ALCEFIAMtACxBAXEEfyAFQQFxRQ0CIAYrABAiXSADKwAQIl5kIF0gXmNyDQIgBisAGCJdIAMrABgiXmMNAiBdIF5kBSAFCw0BIAYtAFQhBSADLQBUQQFxBH8gBUEBcUUNAiAGKwA4Il0gAysAOCJeZCBdIF5jcg0CIAYrAEAiXSADKwBAIl5jDQIgXSBeZAUgBQsNASAIKAIQIgMoAqQBQQ9xQQJGBEAgAygCYCAJKAIQKAJgRw0CCyAQKAIAKAIQLQCkAUHAAHENAQsgDEEBaiEMDAELCyA9RQRAIAxBBBAYIgUgESgCABC7AzYCAEEBIQNBASAMIAxBAU0bIQYDQCADIAZGBEAgACAFIAwgEkG49QcQ2g4gBRAXDAcFIAUgA0ECdCIHaiAHIBFqKAIANgIAIANBAWohAwwBCwALAAsgCEEwQQAgCCgCAEEDcSIGQQNHG2ooAigiBCgCECIFKAL0ASEDIAhBUEEAIAZBAkcbaigCKCIGIARGBEAgDyAHIAwgAisD0AUCfCAAKAIQIgYoAuwBIANGBEAgA0EASgRAIAYoAsQBIANBBnRqQTxrKAIAKAIAKAIQKwMYIAUrAxihDAILIAUrA1AMAQsgBigC6AEgA0YEQCAFKwMYIAYoAsQBIANBBnRqKAJEKAIAKAIQKwMYoQwBCyAGKALEASADQQZ0aiIDQTxrKAIAKAIAKAIQKwMYIAUrAxgiXaEiXiBdIAMoAkQoAgAoAhArAxihIl0gXSBeZBsLRAAAAAAAAOA/okG49QcQjAhBACEDA0AgAyAMRg0GIA8gAyAHakECdGooAgAoAhAoAmAiBQRAIAAgBRCOAgsgA0EBaiEDDAALAAsgAyAGKAIQKAL0AUcNASACIAJBuBdqIgM2AugWIBEoAgAiBigCECIFLQByIQQgBS0ApAFBIHEEQCADIAVBuAEQIBogAkHYFmoiBSAGQTAQIBogAiADNgLoFkEoQdgAIAIoAtgWQQNxIghBA0YbIAVqIAZBUEEAIAYoAgBBA3FBAkcbaigCKDYCACAvIC4gCEECRhsgBkEwQQAgBigCAEEDcUEDRxtqKAIoNgIAIDggBigCEEE4akEoECAaIDcgBigCEEEQakEoECAaIAIgBjYCsBggAkEBOgCoGCAFIQYgAyEFC0EBIQNBASAMIAxBAU0bIQgCQANAIAMgCEcEQCADQQJ0IANBAWohAyARaigCACgCEC0AckUNAQwCCwsgBEUNAwsgBkEoQXggBigCAEEDcSIDQQJGG2ooAgAhCAJAIAZBKEHYACADQQNGG2ooAgAiBhD+AkECRwRAQQAhBUEAIQRBACEDIAgQ/gJBAkcNAQtBwM4KLQAADQVBwM4KQQE6AABBv9wDQQAQJyAGEB4hAyAAEPoBIQUgAiAIEB42AqgCIAJBxdoBQbqYAyAFGzYCpAIgAiADNgKgAkG95QMgAkGgAmoQfAwFCwNAIAMgDEYEQCAFBEAgAkGkyApBrMgKIAAQ+gEbKAIANgKEA0H3/QAgAkGEA2pBABDNASIHQewlQZgCQQEQLhogB0EAQY70AEHl9AQQHxpBAUHgABAYIQQgBygCECIDIAQ2AgggBCAAKAIQIgUoAggiCSsDADkDACAEIAkrAxg5AxggAyAFLQBzOgBzIAMgBSgCdEF/c0EBcTYCdCADIAUoAvgBNgL4ASADIAUoAvwBNgL8ASAAEDRBAUEAEMkCIQMDQCADRQ0HIAdBASADKAIIIAMoAgwQHxogABA0QQEgAxDJAiEDDAALAAsFIBEgA0ECdGooAgAoAhAiCSgCYEEARyENAkAgCS0ALEUEQCAJLQBUQQFHDQELQQEhBQsgBCANaiEEIANBAWohAwwBCwsgBEUEQCAGIAggDyAHIAwgEhCbCQwFCyARKAIAIQVBACEDIAxBBBAYIQcDQCADIAxGBEAgByAMQQRBBRCUASAGKAIQIgkrABAhXiAFKAIQIgYrABAhYCACQfAaaiIDIAYrABggCSsAGKAiXTkDACACIGAgXqAiXjkD6BogBisAOCFgIAgoAhAiCCsAECFfIAJB+BlqIgUgBisAQCAIKwAYoDkDACACIGAgX6AiXzkD8BkgCSsDYCFgIAgrA1ghYSAHKAIAIQYgAiADKQMAIm43A6ggIAIgAikD6BoibzcDoCAgFCBvNwMAIBQgbjcDCCAgIAUpAwA3AwggICACKQPwGTcDACAVIAUpAwA3AwggFSACKQPwGTcDACAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCACQaAgakEEQbj1BxCdASAGKAIQKAJgIgYgXiBgoCJgIF8gYaEiY6BEAAAAAAAA4D+iIl45AzhBASEKIAZBAToAUSAGIF0gBisDICJfRAAAAAAAABhAoEQAAAAAAADgP6KgOQNAIF4gBisDGEQAAAAAAADgP6IiYaAhZCBeIGGhIWcgXyBdRAAAAAAAAAhAoCJmoCFdRAAAAAAAAAAAIWFEAAAAAAAAAAAhYgJAA0ACQCAEIApGBEAgBCAMIAQgDEsbIQkgYyBjoCBgoEQAAAAAAAAIQKMhbCBgIGCgIGOgRAAAAAAAAAhAoyFtDAELIAcgCkECdGooAgAhBgJAIApBAXEEQCAGKAIQKAJgIQggCkEBRgRAIF4gCCsDGEQAAAAAAADgP6IiX6AhYiBeIF+hIWELIAgrAyAhXyACIAIpA+gaNwOgICACIAIrA+gaOQOwICACIAIrA/AZOQPAICACIAMpAwA3A6ggIAIgZiBfRAAAAAAAABhAoKEiZkQAAAAAAAAYwKAiXzkDuCAgAiBfOQPIICAVIAUpAwA3AwggFSACKQPwGTcDACACIGI5A+AgIAIgYTkDkCEgAiBmOQOIISACIGE5A4AhIAIgZjkD+CAgAiBiOQPwICACIAUrAwA5A+ggIAIgAysDADkDmCEgZiAGKAIQKAJgKwMgRAAAAAAAAOA/oqAhXwwBCyACIAIpA+gaNwOgICACIGc5A7AgIAIgZDkD4CAgAiBdOQPYICACIGQ5A9AgIAIgXTkDyCAgAiBnOQPAICACIAIrA/gZIl85A+ggIAIgAisD8BkiZTkDgCEgAiBfOQP4ICACIGU5A/AgIAIgXUQAAAAAAAAYQKAiXzkDiCEgAiADKQMANwOoICACIAMrAwA5A7ggIAIgXzkDmCEgAiACKwPoGjkDkCEgXSAGKAIQKAJgKwMgImVEAAAAAAAA4D+ioEQAAAAAAAAYQKAhXyBdIGVEAAAAAAAAGECgoCFdCyACQQg2ApQZIAIgAykDADcD+AIgAiAFKQMANwPoAiACIAIpA+gaNwPwAiACIAIpA/AZNwPgAiACIAJBoCBqNgKQGSACIAIpApAZNwPYAgJAIAJB8AJqIAJB4AJqIAJB2AJqIAJBmBZqICkQ3w4iCARAIAIoApgWIg0NAQsgCBAXDAMLIAYoAhAoAmAiCUEBOgBRIAkgXzkDQCAJIF45AzggBiAGQVBBACAGKAIAQQNxQQJHG2ooAiggCCANQbj1BxCdASAIEBcgCkEBaiEKDAELCwNAIAQgCUYNASAHIARBAnRqAkAgBEEBcQRAIAIgAikD6Bo3A6AgIAIgAisD6Bo5A7AgIAIgAisD8Bk5A8AgIAIgAykDADcDqCAgAiBmRAAAAAAAABjAoCJfRAAAAAAAABjAoCJlOQO4ICAVIAUpAwA3AwggFSACKQPwGTcDACADKwMAIWggBSsDACFpIGwgYiAEQQFGIggbIl4haiBtIGEgCBsiYyFrIGMhYSBeIWIgXyJgIWYMAQsgAiACKQPoGjcDoCAgAiBnOQOwICACIGQ5A9AgIAIgZzkDwCAgAiADKQMANwOoICACIAMrAwA5A7ggIAIgXTkD2CAgAisD6BohayBkIV4gAisD+BkiaSFfIAIrA/AZImohYyBdImVEAAAAAAAAGECgImAhaCBgIV0LKAIAIQYgAkEINgKUGSACIAMpAwA3A9ACIAIgBSkDADcDwAIgAiBoOQOYISACIGs5A5AhIAIgYDkDiCEgAiBjOQOAISACIF85A/ggIAIgajkD8CAgAiBpOQPoICACIF45A+AgIAIgZTkDyCAgAiACKQPoGjcDyAIgAiACKQPwGTcDuAIgAiACQaAgajYCkBkgAiACKQKQGTcDsAICQCACQcgCaiACQbgCaiACQbACaiACQZgWaiApEN8OIghFDQAgAigCmBYiDUUNACAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCAIIA1BuPUHEJ0BIAgQFyAEQQFqIQQMAQsLIAgQFwsgBxAXDAYFIAcgA0ECdCIJaiAJIBFqKAIANgIAIANBAWohAwwBCwALAAsgAUUNByAAEBohBCACQaggaiEFA0AgBEUNCCAAIAQQKSEDA0ACQCADBEAgA0G49QcoAgARAgBFDQEgAygCECgCCCIHRQ0BIAcoAgQiCUEBdiEBQQAhBkEAIQsDQCABIAtHBEAgAkGgIGoiCCAHKAIAIg4gC0EwbGoiDUEwECAaIA0gDiAJIAtBf3NqQTBsIg1qQTAQIBogBygCACANaiAIQTAQIBogC0EBaiELDAELCwNAIAYgCUYNAiAHKAIAIAZBMGxqIgEoAgQiDkEBdiENQQAhCwNAIAsgDUcEQCAFIAEoAgAiCiALQQR0aiIIKQMINwMAIAIgCCkDADcDoCAgCCAKIA4gC0F/c2pBBHQiDGoiCikDADcDACAIIAopAwg3AwggASgCACAMaiIIIAIpA6AgNwMAIAggBSkDADcDCCALQQFqIQsMAQsLIAEgASkDCEIgiTcDCCAFIAEpAxg3AwAgAiABKQMQNwOgICABIAEpAyA3AxAgASABKQMoNwMYIAEgAikDoCA3AyAgASAFKQMANwMoIAZBAWohBgwACwALIAAgBBAbIQQMAgsgACADECwhAwwACwALAAsgAkHQFmpBADYCACACQgA3A8gWIAJBwBZqQQA2AgAgAkIANwO4FiACIAJB2A9qIgc2AoAaIAIgAkGgCmoiBDYCoBkgAiACQbgXajYC6BYgESgCACIJKAIQIQUCQAJAIAkgCUEwaiIDIAkoAgAiCkEDcSIIQQNGGygCKCgCECgC9AEgCSAJQTBrIgYgCEECRhsoAigoAhAoAvQBayIIIAhBH3UiCHMgCGsiJEECTwRAIAcgBUG4ARAgGiACQfAZaiIIIAlBMBAgGiAjIANBMBAgGiACIAc2AoAaIAkoAhAiBSgCpAEhByAEIAVBuAEQIBogAkGQGWoiDSAJQTAQIBogAiAENgKgGSAJKAIAQQNxIQUCQCAHQSBxBEBBKEHYACACKAKQGUEDcSIHQQNGGyANaiAJIAYgBUECRhsoAig2AgAgMSAwIAdBAkYbIAkgAyAFQQNGGygCKDYCACA6IAkoAhBBOGpBKBAgGiAiIAkoAhBBEGpBKBAgGiACIAk2ApgLIAJBAToAkAtBKEHYACACKALwGSIKQQNxQQNGGyAIaiAJIAYgCSgCAEEDcUECRhsoAig2AgAgMiAJKAIQQThqQSgQIBoMAQsgAkHwGWpBKEHYACACKALwGSIKQQNxQQNGG2ogCSADIAVBA0YbKAIoNgIAIDkgA0EwECAaCyAJELsDIQMDQCADIgUoAhAoArABIgMNAAsgNCAzIApBA3FBAkYbIAVBUEEAIAUoAgBBA3FBAkcbaigCKDYCACACQQE6AMgQIAJBADoArBAgG0IANwMIIBtCADcDAAwBCyAFLQCkAUEgcUUNASACQdgPaiIHIAVBuAEQIBogAkHwGWoiBSAJQTAQIBogAiAHNgKAGiAFQShB2AAgAigC8BkiCkEDcSIHQQNGG2ogCSAGIAkoAgBBA3FBAkYbKAIoNgIAIDQgMyAHQQJGGyAJIAMgCSgCAEEDcUEDRhsoAig2AgAgMiAJKAIQQThqQSgQIBogGyAJKAIQQRBqQSgQIBogAkEBOgDIEAsgAiAJNgLQECACQfAZaiEJCwJAAkAgGg0AIAkhAwNAIAMoAhAiBS0AcARAIAUoAnghAwwBCwsCQAJAIANBKEF4IAMoAgBBA3EiBkECRhtqKAIAIgQoAhAoAvQBIANBKEHYACAGQQNGG2ooAgAiCCgCECgC9AFrIgZBH3UiB0F/cyAGIAdzag4CAgABCyAAKAJIKAIQLQBxQQFxDQELIAQgCCAJQShB2AAgCkEDcUEDRhtqKAIAIAhGIgcbIgYoAhAiDSsAECFgIAVBOEEQIAcbaisAACFfIA0rABghYSAFQcAAQRggBxtqKwAAIWIgCCAEIAcbKAIQIggrABAhXiAFQRBBOCAHG2orAAAhZCACIAVBGEHAACAHG2orAAAgCCsAGKAiXTkDoBYgAiBkIF6gIl45A5gWIAIgYiBhoCJhOQOIGSACIF8gYKAiYjkDgBkgAiAFKAJgIgUEfyAFKwMgIWAgBSsDGCFfIAQQKygCECgCdCEHIAJB+BhqIgUgAygCECgCYCIDQUBrKQMANwMAIAMpAzghbiACIAJBoBZqIgQpAwA3A5AEIAIgbjcD8BggBSAFKwMAImQgXyBgIAdBAXEiAxtEAAAAAAAA4D+iImOaIGMgYSBdoSACKwPwGCJhIF6hoiBiIF6hIGQgXaGioUQAAAAAAAAAAGQiBxugOQMAIAIgAikDmBY3A4gEIAIgYSBgIF8gAxtEAAAAAAAA4D+iIl0gXZogBxugOQPwGCACQcgWaiIDIAJBiARqEN4BIAIgBCkDADcDgAQgAiACKQOYFjcD+AMgAyACQfgDahDeASACIAUpAwA3A/ADIAIgAikD8Bg3A+gDIAMgAkHoA2oQ3gEgAkHwGGoFIAJBmBZqCyIDKQMINwPgAyACIAMpAwA3A9gDIAJByBZqIgUgAkHYA2oQ3gEgAiADKQMINwPQAyACIAMpAwA3A8gDIAUgAkHIA2oQ3gEgAiACQYgZaiIDKQMANwPAAyACIAIpA4AZNwO4AyAFIAJBuANqEN4BIAIgAykDADcDsAMgAiACKQOAGTcDqAMgBSACQagDahDeAQwBCyACQfgYakEANgIAIAJCADcD8BggCUEoQXggCkEDcSIDQQJGG2ooAgAhCCACQZgWaiAAIAJBuAVqIAlBKEHYACADQQNGG2ooAgAiBEEAIAkQiQMgAkG4IGoiJSACQbAWaiIdKQMANwMAIBQgAkGoFmoiHikDADcDACACQaggaiImIAJBoBZqIhgpAwA3AwAgAiACKQOYFjcDoCAgFCsDACFdIAIrA6AgIV4gAkHgBWogCUEBIAJBoCBqIAQQgQQQ5wUCQCBdIF5kRQ0AIAQoAhAiAysDGCAAKAIQKALEASADKAL0AUEGdGorAxChImAgAigC1CAiBUEFdCAXaiIDQRhrKwMAIl9jRQ0AIAIgBUEBajYC1CAgAyBfOQMYIAMgXTkDECADIGA5AwggAyBeOQMAC0EAIRBBfyEZQQAhEyAJIgchDQNAIAghBiAHIQUgEyEKIA0hAwNAAkACfwJAAkAgBigCEC0ArAFBAUcNACAGQbz1BygCABECAA0AIAJB+BVqIAJBuAVqIAAgBCgCECgC9AEQiAkgAiACQZAWaikDADcDsAUgAiACQYgWaikDADcDqAUgAiACQYAWaikDADcDoAUgAiACKQP4FTcDmAUgAkHwGGogAkGYBWoQgAQCQAJAIApBAXFFBEBBACEQIAYoAhAiCiEEA0ACQCAEKALIASgCACIHQVBBACAHKAIAQQNxQQJHG2ooAigoAhAiBC0ArAFBAUcNACAEKALMAUEBRw0AIAQoAsQBQQFHDQAgBCsDECAKKwMQYg0AIBBBAWohEAwBCwtBACETQQVBAyAAKAJIKAIQLQBxQQFxGyAQSwRAIAYhCCAFIQcMAgsgEEECayEQQQEhEyAGIQggBSEHQQEhGQwBCyAZQQBMDQEgBigCECEKIA0hAwsgAkHYFWogACACQbgFaiAIIAMgCigCyAEoAgAQiQMgAiACQfAVaikDADcDkAUgAiACQegVaikDADcDiAUgAiACQeAVaikDADcDgAUgAiACKQPYFTcD+AQgGUEBayEZIAJB8BhqIAJB+ARqEIAEIAYoAhAoAsgBKAIAIg1BUEEAIA0oAgBBA3EiA0ECRxtqKAIoIQggDUEwQQAgA0EDRxtqKAIoIQQMBgsgAkGYFmogACACQbgFaiAGIAMgBigCECgCyAEoAgAQiQMgAkGAG2ogHSkDADcDACACQfgaaiAeKQMANwMAIAJB8BpqIBgpAwA3AwAgAiACKQOYFjcD6BogAkHgBWogA0EBIAJB6BpqIANBKEF4IAMoAgBBA3FBAkYbaigCABCBBBDmBQJAIAIoApwbIh9BBXQgFmoiBEEgayIKKwMAIl0gCisDECJeY0UNACAKKwMYImAgBigCECIKKwMYIAAoAhAoAsQBIAooAvQBQQZ0aisDGKAiX2NFDQAgAiAfQQFqNgKcGyAEIF85AxggBCBeOQMQIAQgYDkDCCAEIF05AwALIAJBAToApQYgAkKY2pCitb/I/D83A5gGIAJB4AVqIgQgBSADIAJBoCBqIAJB6BpqIAJB8BhqEIMJIAJBADYC1BUgHEUEQCAEIAJB1BVqEMEEIQogAigC1BUhAwwCCyACQeAFaiACQdQVahC/BCEKIBogAigC1BUiA0EFSXINASAKIAopAwA3AxAgCiAKKQMINwMYIAogCiADQQR0akEQayIDKQMANwMgIAogAykDCDcDKCADKQMAIW4gCiADKQMINwM4IAogbjcDMCACQQQ2AtQVQQQMAgsgAkGwFWogAkG4BWoiByAAIAQoAhAoAvQBEIgJIAIgAkHIFWopAwA3A8AEIAIgAkHAFWopAwA3A7gEIAIgAkG4FWopAwA3A7AEIAIgAikDsBU3A6gEIAJB8BhqIAJBqARqEIAEIAJBmBZqIAAgByAGIANBABCJAyACQYAbaiAdKQMANwMAIAJB+BpqIgcgHikDADcDACACQfAaaiAYKQMANwMAIAIgAikDmBY3A+gaIAcrAwAhXSACKwPoGiFeIAJB4AVqIAJBkBlqIAMgJEEBSyIIG0EBIAJB6BpqIANBKGoiDSADQQhrIhAgAygCAEEDcUECRhsoAgAQgQQQ5gUCQCBdIF5kRQ0AIAIoApwbIgRBBXQgFmoiB0EIaysDACJgIAYoAhAiBisDGCAAKAIQKALEASAGKAL0AUEGdGorAxigIl9jRQ0AIAIgBEEBajYCnBsgByBfOQMYIAcgXTkDECAHIGA5AwggByBeOQMACyACQeAFaiIGIAUgAyACQaAgaiACQegaaiACQfAYaiIHEIMJIAcQ5gQgAkEANgKYFgJAAn8CQCAcRQRAIAYgAkGYFmoQwQQhBiACKAKYFiEEDAELIAJB4AVqIAJBmBZqEL8EIQYgGiACKAKYFiIEQQVJcg0AIAYgBikDADcDECAGIAYpAwg3AxggBiAGIARBBHRqQRBrIgcpAwA3AyAgBiAHKQMINwMoIAcpAwAhbiAGIAcpAwg3AzggBiBuNwMwIAJBBDYCmBZBBAwBCyAERQ0BIAQLIQpBACEEA0AgBCAKTwRAIAYQFyAFIAJB4AVqEP0IAn8gCARAIDEgMCACKAKQGUEDcUECRhsMAQsgDSAQIAMoAgBBA3FBAkYbCygCACEGDAgFIAIgBiAEQQR0aiIHKQMINwOgBCACIAcpAwA3A5gEIARBAWohBCACQcgWaiACQZgEahDeASACKAKYFiEKDAELAAsACyAGEBcgAkHIFmoQ0QIgAkG4FmoQ0QIMCAsgA0UNASADCyEEQQAhAwNAIAMgBE8EQCAKEBcgBigCECgCyAEoAgAhAyAQIQQDQCAEBEAgBEEBayEEIANBUEEAIAMoAgBBA3FBAkcbaigCKCgCECgCyAEoAgAhAwwBCwsgAigCzBYiBARAIAJBmBZqIgogAkHIFmoiBiAEQQFrEOQEIAIgGCkDADcD8AQgAiACKQOYFjcD6AQgBiACQegEahDeASACQYAZaiAGIAIoAswWQQFrEOQEIAIgAkGIGWopAwA3A+AEIAIgAikDgBk3A9gEIAYgAkHYBGoQ3gEgBSACQeAFaiIFEP0IIANBUEEAIAMoAgBBA3EiBEECRxtqKAIoIQYgA0EwQQAgBEEDRxtqKAIoIQQgAkEANgL0GCAKIAAgAkG4BWogBCAEKAIQKALAASgCACADEIkDICUgHSkDADcDACAUIB4pAwA3AwAgJiAYKQMANwMAIAIgAikDmBY3A6AgIAUgA0EBIAJBoCBqIAQQgQQQ5wUCQCACKALUICIfQQV0IBdqIgVBIGsiCisDACJdIAorAxAiXmNFDQAgBCgCECInKwMYIAAoAhAoAsQBICcoAvQBQQZ0aisDEKEiYCAKKwMIIl9jRQ0AIAIgH0EBajYC1CAgBSBfOQMYIAUgXjkDECAFIGA5AwggBSBdOQMACyACQQE6AP0FIAJCmNqQorW/yPy/fzcD8AVBACEKIAMhBQwEC0HBmQNB5bgBQb0QQaH4ABAAAAUgAiAKIANBBHRqIgQpAwg3A9AEIAIgBCkDADcDyAQgA0EBaiEDIAJByBZqIAJByARqEN4BIAIoAtQVIQQMAQsACwALCwsgChAXIAJB8BhqEOYEIAJByBZqENECIAJBuBZqENECDAMLIAxBAUYEQCAJIAYgAkHIFmoiAxCdBiACKALMFkG49QcQnQEgAxDRAiACQbgWahDRAgwDCyACKwPQBSJdIAxBAWu4okQAAAAAAADgP6IhXkEBIQMDQCADQQFqIgUgAigCzBYiBE8EQEEAIQMDQCADIARPBEAgCSAGIAJBuBZqEJ0GIAIoArwWQbj1BxCdAUEBIQZBASAMIAxBAU0bIQcDQCAGIAdGBEAgAkHIFmoQ0QIgAkG4FmoQ0QIMCAsgESAGQQJ0aigCACIMKAIQIgMtAKQBQSBxBEAgAigC6BYgA0G4ARAgIQUgAkHYFmoiAyAMQTAQIBogAiAFNgLoFkEoQdgAIAIoAtgWQQNxIgRBA0YbIANqIAxBUEEAIAwoAgBBA3FBAkcbaigCKDYCACAvIC4gBEECRhsgDEEwQQAgDCgCAEEDcUEDRxtqKAIoNgIAIAVBEGogDCgCEEE4akEoECAaIAIoAugWIgVBOGogDCgCEEEQakEoECAaIAUgDDYCeCAFQQE6AHAgAyEMC0EBIQMDQCADQQFqIgUgAigCzBYiBE8EQEEAIQMgAkEANgK8FgNAIAMgBE8EQCAMIAxBKEF4IAwoAgBBA3FBAkYbaigCACACQbgWahCdBiACKAK8FkG49QcQnQEgBkEBaiEGDAQFIAJBkBVqIAJByBZqIAMQ5AQgAiACQZgVaikDADcDoAMgAiACKQOQFTcDmAMgA0EBaiEDIAJBuBZqIAJBmANqEN4BIAIoAswWIQQMAQsACwAFIAJByBZqIAMQnAYiAyBdIAMrAwCgOQMAIAUhAwwBCwALAAsABSACQaAVaiACQcgWaiADEOQEIAIgAkGoFWopAwA3A5ADIAIgAikDoBU3A4gDIANBAWohAyACQbgWaiACQYgDahDeASACKALMFiEEDAELAAsABSACQcgWaiADEJwGIgMgAysDACBeoTkDACAFIQMMAQsACwALIAUoAmAiBARAIAZBKGoiCSAGQQhrIg0gBigCAEEDcSIDQQJGGygCACEIIAZBKEHYACADQQNGG2ooAgAhByAFKAKwASEDA0AgAyIFKAIQKAKwASIDDQALIAQgBUEwQQAgBSgCAEEDcUEDRxtqKAIoIgooAhAiAykDEDcDOCAEQUBrIAMpAxg3AwAgBigCECIDKAJgIgVBAToAUQJAAkAgGkUEQCADKwA4IV0gCCgCECIEKwAQIV4gAysAQCFgIAQrABghXyAFKwM4IWEgBSsDQCFiIAUrAyAhZCADKwAQIWMgBygCECIFKwAQIWUgAiADKwAYIAUrABigOQP4GSAtIAIpA/gZNwMIIAIgYyBloDkD8BkgLSACKQPwGTcDACACIGIgZEQAAAAAAADgv6KgOQO4GiACIGE5A7AaICMgISkDADcDACAjICEpAwg3AwggLCAhKQMANwMAICwgISkDCDcDCCACIGAgX6A5A9gaIAIgXSBeoDkD0BogKyAqKQMINwMIICsgKikDADcDAEEHIQQgAkEHNgKYFiACQfAZaiEDDAELIAAoAhAoAsQBIAcoAhAiBSgC9AFBBnRqIgMrAxghYCADKwMQIV8gCigCECIDKwNgIWEgAysDUCFiIAUrAxghZCADKwMYIV0gAysDWCFjIAMrAxAhXiAAIAJBuAVqIgUgAkHgBWoiBCAHIAYgAkGgIGpBARDjBEEAIQMgACAFIAQgCCAGIAJB6BpqQQAQ4wQgAiACKALUICIKQQV0IBdqQSBrIgUrAwAiZTkDkBkgAiAFKwMYOQOYGSACIF4gY6E5A6AZIAIgXSBiRAAAAAAAAOA/oqAiYkQAAAAAAAAUQCBgIF0gX6EgZKGgRAAAAAAAABhAoyJdIF1EAAAAAAAAFEBjG6EiXTkDqBkgAiBlOQOwGSACIF05A7gZIAIgAigCnBtBBXQgFmpBIGsiBSsDECJgOQPAGSACIF4gYaA5A9AZIAIgYjkDyBkgAiAFKwMYOQPYGSACIF05A+gZIAIgYDkD4BlBACEEA0AgBCAKSARAIAIgFyAEQQV0aiIFKQMYNwPYASACIAUpAxA3A9ABIAIgBSkDCDcDyAEgAiAFKQMANwPAASAEQQFqIQQgAkHgBWogAkHAAWoQ/AEgAigC1CAhCgwBCwsDQCADQQNHBEAgAiACQZAZaiADQQV0aiIFKQMINwOIAiACIAUpAxg3A5gCIAIgBSkDEDcDkAIgAiAFKQMANwOAAiADQQFqIQMgAkHgBWogAkGAAmoQ/AEMAQsLIAIoApwbIQQDQCAEQQBKBEAgAiAWIARBAWsiBEEFdGoiAykDGDcD+AEgAiADKQMQNwPwASACIAMpAwg3A+gBIAIgAykDADcD4AEgAkHgBWogAkHgAWoQ/AEMAQsLAn8gHEUEQCACQeAFaiACQZgWahDBBAwBCyACQeAFaiACQZgWahC/BAshAyACKAKYFiIERQ0BCyAGIAkgDSAGKAIAQQNxQQJGGygCACADIARBuPUHEJ0BIBJBAkYNAwsgAxAXDAILIBpFBEAgBkEoQdgAIAYoAgBBA3EiA0EDRhtqKAIAIAZBKEF4IANBAkYbaigCACAPIAcgDEECEJsJDAILAkACQCAFLQBZIgNBBEYgBS0AMSIFQQFHckUEQCAGKAIAIQQMAQsgBigCACEEIAVBBEYgA0EBR3INAQsgBkEoQXggBEEDcSIDQQJGG2ooAgAhBwJ8IAZBKEHYACADQQNGG2ooAgAiBSgCECIEKAL0ASIIIAAoAhAiAygC7AFIBEAgBCsDGCADKALEASAIQQZ0aiIDKwMgoSADKAJEKAIAKAIQKwMYIAMrA2igoQwBCyADKAL8AbcLIAIrA9AFIWAgACACQbgFaiIDIAJB4AVqIgQgBSAGIAJBoCBqQQEQ9ghBACEFIAAgAyAEIAcgBiACQegaakEAEPYIIAxBAWq4Il2jIV4gYCBdoyFgA0AgBSAMRg0DIBEgBUECdGooAgAhBiACKALUICIKQQV0IBdqQSBrIgMrAxAhXyADKwMAIV0gAiADKwMIImE5A4gaIAIgXTkD8BkgAiBdOQOQGiACIF8gBUEBaiIFuCJdIGCiIl+gOQOAGiACIGEgXSBeoqEiXTkDqBogAiBdOQP4GSACIAIoApwbQQV0IBZqQSBrIgMrAxAiYTkDoBogAiBdIF6hOQOYGiADKwMAIWIgAiADKwMIOQPIGiACIF05A7gaIAIgYTkDwBogAiBiIF+hOQOwGkEAIQNBACEEA0AgBCAKSARAIAIgFyAEQQV0aiIHKQMYNwMYIAIgBykDEDcDECACIAcpAwg3AwggAiAHKQMANwMAIARBAWohBCACQeAFaiACEPwBIAIoAtQgIQoMAQsLA0AgA0EDRwRAIAIgAkHwGWogA0EFdGoiBykDCDcDSCACIAcpAxg3A1ggAiAHKQMQNwNQIAIgBykDADcDQCADQQFqIQMgAkHgBWogAkFAaxD8AQwBCwsgAigCnBshBANAIARBAEoEQCACIBYgBEEBayIEQQV0aiIDKQMYNwM4IAIgAykDEDcDMCACIAMpAwg3AyggAiADKQMANwMgIAJB4AVqIAJBIGoQ/AEMAQsLIAJBADYCkBkCfyAcRQRAIAJB4AVqIAJBkBlqEMEEDAELIAJB4AVqIAJBkBlqEL8ECyEDIAIoApAZIgcEQCAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCADIAdBuPUHEJ0BIAMQFyACQQA2ArAGDAEFIAMQFwwECwALAAsgBkEoQXggBEEDcSIDQQJGG2ooAgAhBwJ8IAZBKEHYACADQQNGG2ooAgAiAygCECIFKAL0ASIEQQBKBEAgACgCECgCxAEgBEEGdGoiBEGAf0FAIAAoAkgoAhAtAHFBAXEbaiIIKAIEKAIAKAIQKwMYIAgrAxChIAUrAxihIAQrAxihDAELIAAoAhAoAvwBtwsgAisD0AUhYCAAIAJBuAVqIgQgAkHgBWoiCCADIAYgAkHYD2pBARDjBEEAIQUgACAEIAggByAGIAJBoApqQQAQ4wQgDEEBargiXaMhXiBgIF2jIWADQCAFIAxGDQIgESAFQQJ0aigCACEGIAIoAowQIgpBBXQgG2pBIGsiAysDECFfIAMrAxghXSACIAMrAwAiYTkDwCAgAiBdOQOoICACIGE5A6AgIAIgXSAFQQFqIgW4ImEgXqKgIl05A8ggIAIgXTkDuCAgAiBfIGEgYKIiX6A5A7AgIAIgAigC1ApBBXQgImpBIGsiAysDECJhOQPQICACIF4gXaA5A9ggIAMrAwAhYiACIAMrAxg5A+ggIAIgXTkD+CAgAiBhOQPwICACIGIgX6E5A+AgQQAhA0EAIQQDQCAEIApIBEAgAiAbIARBBXRqIgcpAxg3A3ggAiAHKQMQNwNwIAIgBykDCDcDaCACIAcpAwA3A2AgBEEBaiEEIAJB4AVqIAJB4ABqEPwBIAIoAowQIQoMAQsLA0AgA0EDRwRAIAIgAkGgIGogA0EFdGoiBykDCDcDqAEgAiAHKQMYNwO4ASACIAcpAxA3A7ABIAIgBykDADcDoAEgA0EBaiEDIAJB4AVqIAJBoAFqEPwBDAELCyACKALUCiEEA0AgBEEASgRAIAIgIiAEQQFrIgRBBXRqIgMpAxg3A5gBIAIgAykDEDcDkAEgAiADKQMINwOIASACIAMpAwA3A4ABIAJB4AVqIAJBgAFqEPwBDAELCyACQQA2AugaAn8gHEUEQCACQeAFaiACQegaahDBBAwBCyACQeAFaiACQegaahC/BAshAyACKALoGiIHBEAgBiAGQVBBACAGKAIAQQNxQQJHG2ooAiggAyAHQbj1BxCdASADEBcgAkEANgKwBgwBBSADEBcMAwsACwALIAAQNEECQQAQyQIhAwNAIAMEQCAHQQIgAygCCCADKAIMEB8aIAAQNEECIAMQyQIhAwwBCwsgB0ECQd0aQQAQH0UEQCAHQQJB3RpB5fQEEB8aCyAHQQJBoRpBABAfRQRAIAdBAkGhGkHl9AQQHxoLQfSLCygCACEYQcCLCygCACEZQYiNCygCACEdQdSMCygCACEeQfiMCygCACEkQfSMCygCACElQeyMCygCACEmQfCMCygCACEfQeSMCygCACEnQeCMCygCACE+QeiMCygCACE/QdyMCygCACFAQdCMCygCACFBQcyMCygCACFCQcSMCygCACFDQcCMCygCACFEQbyMCygCACFFQdiMCygCACFGQZCMCygCACFHQYyMCygCACFIQYiMCygCACFJQeCNCygCACFKQZyOCygCACFLQbSOCygCACFMQaCOCygCACFNQaSOCygCACFOQaiOCygCACFPQYSOCygCACFQQdyNCygCACFRQZiOCygCACFSQbiOCygCACFTQdCNCygCACFUQdSNCygCACFVQdiNCygCACFWQaSNCygCACFXQaCNCygCACFYQYyOCygCACFZQYiOCygCACFaQfiNCygCACFbQfiNC0EANgIAQYiOCyAHQQJBk7EBQQAQHzYCAEGMjgsgB0ECQb7uAEEAEB82AgBBoI0LIAdBAkHGH0EAEB8iAzYCACADRQRAQaCNCyAHQQJBxh9B5fQEEB82AgALQQAhBUHYjQtBADYCAEGkjQtBADYCAEHUjQsgB0ECQZSYAUEAEB82AgBB0I0LIAdBAkHNhwFBABAfNgIAQbiOCyAHQQJBm9oAQQAQHzYCAEGYjgtBADYCAEHcjQsgB0ECQarwAEEAEB82AgBBhI4LIAdBAkHpJEEAEB82AgBBqI4LQQA2AgBBpI4LIAdBAkGPmAFBABAfNgIAQaCOCyAHQQJByIcBQQAQHzYCAEG0jgsgB0ECQZLaAEEAEB82AgBBnI4LQQA2AgBB4I0LQQA2AgBBiIwLIAdBAUHOH0EAEB82AgBBjIwLIAdBAUHV9wBBABAfNgIAQZCMCyAHQQFBgpYBQQAQHzYCAEHYjAtBADYCAEG8jAsgB0EBQc2HAUEAEB82AgBBwIwLIAdBAUGUmAFBABAfNgIAQcSMC0EANgIAQcyMCyAHQQFBqvAAQQAQHzYCAEHQjAtBADYCAEHcjAtBADYCAEHojAsgB0EBQYCAAUEAEB82AgBB4IwLIAdBAUGbMUEAEB82AgBB5IwLIAdBAUHuL0EAEB82AgBB8IwLIAdBAUGAFkEAEB82AgBB7IwLIAdBAUHY4gBBABAfNgIAQfSMCyAHQQFB6+EAQQAQHzYCAEH4jAsgB0EBQcGpAUEAEB82AgBB1IwLQQA2AgBBiI0LQQA2AgBB9IsLIAdBAEGAgAFBABAfNgIAIAdBphFBARCQASIDQewlQZgCQQEQLhogA0GO9ABBoaABEOUBIAYoAhArAxAhXiAIKAIQKwMQIWAgAyAIIAYgACgCECgCdEEBcSIDGyINEPUIIQkgByAGIAggAxsiEBD1CCEIQQAhBgNAIAYgDEYEQCAFRQRAIAcgCSAIQQBBARBSIQULIAVBoI0LKAIAQceOAxBoIAAoAhAoApABIQMgBygCECIGIAc2ArwBIAYgAzYCkAEgByASEI0CIAcQkgogBxDPDCAHEIYPIAcQpA0gBygCEEHAAWohAyAJKAIQKwMQIAgoAhArAxCgRAAAAAAAAOA/oiFdIA0oAhAiBisDECAGKwNgoSAQKAIQIgYrAxCgIAYrA1igRAAAAAAAAOA/oiFfA0AgAygCACIDBEACQCADIAlGBEAgAygCECIEIF05AxAgBCBgOQMYDAELIAMoAhAhBCADIAhGBEAgBCBdOQMQIAQgXjkDGAwBCyAEIF85AxgLIARBuAFqIQMMAQsLIAcQkQwgB0EAELwJIAcQrQMgCSgCECEDIA0oAhAiBisDGCFdIAYrAxACfyAAKAIQLQB0QQFxBEAgXSADKwMQoCFdIANBGGoMAQsgXSADKwMYoSFdIANBEGoLKwMAoSFeQQAhCANAIAggDEYEQEGIjgsgWjYCAEH4jQsgWzYCAEGMjgsgWTYCAEGgjQsgWDYCAEGkjQsgVzYCAEHYjQsgVjYCAEHUjQsgVTYCAEHQjQsgVDYCAEG4jgsgUzYCAEGYjgsgUjYCAEHcjQsgUTYCAEGEjgsgUDYCAEGojgsgTzYCAEGkjgsgTjYCAEGgjgsgTTYCAEG0jgsgTDYCAEGcjgsgSzYCAEHgjQsgSjYCAEGIjAsgSTYCAEGMjAsgSDYCAEGQjAsgRzYCAEHYjAsgRjYCAEG8jAsgRTYCAEHAjAsgRDYCAEHEjAsgQzYCAEHMjAsgQjYCAEHQjAsgQTYCAEHcjAsgQDYCAEHojAsgPzYCAEHgjAsgPjYCAEHkjAsgJzYCAEHwjAsgHzYCAEHsjAsgJjYCAEH0jAsgJTYCAEH4jAsgJDYCAEHUjAsgHjYCAEGIjQsgHTYCAEH0iwsgGDYCAEHAiwsgGTYCACAHEIoKIAcQlQEMBAUgESAIQQJ0aiEDA0AgAygCACINKAIQIgZB+ABqIQMgBi0AcA0ACyAGKAJ8IhAoAhAhAwJAIAUgEEYEQCADKAJ8RQ0BCyANIAMoAggoAgAiAygCBBCOCCIGIAMoAgg2AgggBiBdIAMrABAiYJogAysAGCJfIAAoAhAoAnRBAXEiBBugOQMYIAYgXiBfIGAgBBugOQMQIAYgAygCDDYCDCAGIF4gAysAKCJgIAMrACAiXyAEG6A5AyAgBiBdIF+aIGAgBBugOQMoQQAhCgNAAkAgCiADKAIETw0AIApBBHQiEyAGKAIAaiIJIF4gAygCACATaiIEKwAIImAgBCsAACJfIAAoAhAiXCgCdEEBcSIEG6A5AwAgCSBdIF+aIGAgBBugOQMIIAIgCSkDADcDoCAgAiAJKQMINwOoICAKQQFqIgkgAygCBE8NACAJQQR0IiggBigCAGoiCSBeIAMoAgAgKGoiKCsACCJgICgrAAAiXyAEG6A5AwAgCSBdIF+aIGAgBBugOQMIIBQgCSkDADcDACAUIAkpAwg3AwggE0EgaiITIAYoAgBqIgkgXiADKAIAIBNqIhMrAAgiYCATKwAAIl8gBBugOQMAIAkgXSBfmiBgIAQboDkDCCAgIAkpAwA3AwAgICAJKQMINwMIIAIgXiADKAIAIApBA2oiCkEEdGoiCSsACCJgIAkrAAAiXyAEG6A5A9AgIAIgXSBfmiBgIAQboDkD2CAgXEEQaiACQaAgahD5BQwBCwsgDSgCECgCYCIDRQ0AIBAoAhAoAmAiBisAQCFgIAYrADghXyAAKAIQKAJ0IQYgA0EBOgBRIAMgXiBgIF8gBkEBcSIGG6A5AzggAyBdIF+aIGAgBhugOQNAIAAgAxCOAgsgCEEBaiEIDAELAAsABSARIAZBAnRqIQMDQCADKAIAIgQoAhAiCkH4AGohAyAKLQBwDQALAn8gDSAEQTBBACAEKAIAQQNxQQNHG2ooAihGBEAgByAJIAggBBD0CAwBCyAHIAggCSAEEPQICyEDIAQoAhAiCiADNgJ8AkAgBQ0AQQAhBSAKLQAsDQAgCi0AVA0AIAMoAhAgBDYCfCADIQULIAZBAWohBgwBCwALAAsAC0HGngNB5bgBQb8CQaTCARAAAAsgBUEBaiEFDAALAAsCQEGYjgsoAgBBnI4LKAIAckUNAEGwjgsoAgBBrI4LKAIAckUNACAAEBohCgNAIApFDQECQEGYjgsoAgBFDQAgACAKELECIQsDQCALRQ0BIAsgC0EwayIBIAsoAgBBA3FBAkYbIgMoAhAoAmQEQCADQQEQ5AUaIAAgCyABIAsoAgBBA3FBAkYbKAIQKAJkEI4CCyAAIAsQ+AIhCwwACwALAkBBnI4LKAIARQ0AIAAgChApIQsDQCALRQ0BAkAgCygCECgCaEUNACALQQAQ5AVFDQAgACALKAIQKAJoEI4CCyAAIAsQLCELDAALAAsgACAKEBshCgwACwALAkACQCASQQRrDgUBAAAAAQALIAIoAtgFEBcjAEEQayIAJABBlJELQZSRCygCACIBQQFrNgIAAkAgAUEBSg0AQYCLCy0AAEUNAEGYkQsoAgAhAUGckQsoAgAhAyAAEIoBOQMIIAAgAzYCBCAAIAE2AgBB6PoGKAIAQZO8BCAAEC0LIABBEGokAAsgDxAXIAIoArQGEBdBxIsLQQE2AgBBwIsLQQE2AgALIAJB4CVqJAALmwEBAX9BAUHYABAYIgBC4tu9p5aQgPi/fzcDACAAQQA2AlAgAEIANwNIIABCgICAgICAgIhANwNAIABBAzYCPCAAQQE6ADggAEIANwMwIABB+wA2AiggAEKas+bMmbPm3D83AyAgAEH0AzYCGCAAQoCAgICgATcDECAAQoCAgICAgID4v383AwggACAALQAsQfgBcUEDcjoALCAACygBAX8CQCAARQ0AIAAoAgAiAQRAIAEQZAsgACgCBCIARQ0AIAAQFwsLshkCJX8IfCAAKAIMIRsgACgCBCEPIAAoAggiAxCJBCEaAkACQCAPKAIAIg4gAWwiGEEIEEYiHEUNACAcIAIgGEEDdBAgISAgGEEIEEYiE0UNACAPKAIcISEgGigCHCEdIAMoAhwhIiADKAIYISMgAygCFCEeAkACQAJAAkACQCAAKAIYQQFGBEAgACgCFCIFKwMAISkgBSgCHCEHIAUoAhghCSAFKAIUIQYgBSgCECEUIAUoAgwhCCAFKAIgIgMoAhghCyADKAIUIRUCfyAFKAIIIgNBfXFBAUYEQAJAIAYEQCAIQQAgCEEAShshEAwBCyAHIAlyDQZBACEDIAhBACAIQQBKGyEQA0AgBCAQRwRAAn8gFSAUIARBAnRqKAIAQQJ0aiIHKAIEIAcoAgBrt0QAAAAAAADwP6AiKCAooiIomUQAAAAAAADgQWMEQCAoqgwBC0GAgICAeAsgA2ohAyAEQQFqIQQMAQsLIAUgA0EEEBgiBjYCFCAFIANBBBAYIgk2AhggBSADQQgQGCIHNgIcCyApmiEsQQAhBANAIAogEEcEQAJAIAsgFSAUIApBAnRqKAIAIghBAnRqIgUoAgBBAnRqIgMoAgAiDCADKAIEIgNGDQAgAiABIAwgAxCZAiEoIAUoAgQhAyAFKAIAIQwgBiAEQQJ0Ig1qIAg2AgAgCSANaiAINgIAIAcgBEEDdGogKSAoICiiIiijOQMAICwgKCADIAxrtyIqoqMhKyAFKAIAIQMDQCAEQQFqIQQgBSgCBCINIANKBEAgBiAEQQJ0IgxqIAg2AgAgCSAMaiALIANBAnRqKAIANgIAIAcgBEEDdGogKzkDACADQQFqIQMMAQsLICkgKCAqICqioqMhKCAFKAIAIQwDQCAMIA1ODQEgBiAEQQJ0IgNqIAsgDEECdGooAgAiFjYCACADIAlqIAg2AgAgByAEQQN0aiArOQMAIAUoAgAhAwNAIARBAWohBCAFKAIEIg0gA0oEQCALIANBAnRqKAIAIQ0gBiAEQQJ0IhFqIBY2AgAgCSARaiANNgIAIAcgBEEDdGogKDkDACADQQFqIQMMAQsLIAxBAWohDAwACwALIApBAWohCgwBCwtBACEMIAQgDiAOIAYgCSAHQQFBCBDBAwwBCwJAIANBAmsOAwAEAAQLIAZFBEAgByAJcg0GIAUgCEEEEBgiBjYCFCAFIAhBBBAYIgk2AhggBSAIQQgQGCIHNgIcCyAIQQAgCEEAShshCCABQQAgAUEAShshECAYQQgQGCEMA0AgCCAKRwRAIAIgASALIBUgFCAKQQJ0IgVqKAIAIgNBAnRqIgQoAgBBAnRqIg0oAgAgDSgCBBCZAiEoIAUgBmogAzYCACAFIAlqIAM2AgAgByAKQQN0aiApICijIig5AwAgBCgCACIFIAQoAgQiDSAFIA1KGyERIAwgASADbEEDdGohFiAFIQMDQCADIBFGBEACQCAoIA0gBWu3oyEoQQAhBANAIAQgEEYNASAWIARBA3RqIgMgKCADKwMAojkDACAEQQFqIQQMAAsACwUgAiALIANBAnRqKAIAIAFsQQN0aiEZQQAhBANAIAQgEEcEQCAWIARBA3QiEmoiFyASIBlqKwMAIBcrAwCgOQMAIARBAWohBAwBCwsgA0EBaiEDDAELCyAKQQFqIQoMAQsLIAggDiAOIAYgCSAHQQFBCBDBAwsiEA0BC0EAIRAMAQsgDyAQEMIGIQ8LIA5BACAOQQBKGyEUIAFBACABQQBKGyEVIBhBA3QhJEQAAAAAAADwPyEpA0AgKUT8qfHSTWJQP2RFIB9BMk5yDQUgH0EBaiEfQQAhAwNAIAMgFEcEQCAeIANBAWoiBUECdGohCiAeIANBAnRqKAIAIQdEAAAAAAAAAAAhKEF/IQkDQCAKKAIAIAdKBEACQCAjIAdBAnRqIgYoAgAiBCADRgRAIAchCQwBCyACIAEgAyAEEMYBISpEAAAAAAAAAAAhKSAiIAdBA3QiCGoiDisDACIrRAAAAAAAAAAAYgRAICpEAAAAAAAAAABhBHwgKyAIICFqKwMAoyEpQQAhBANAIAQgFUcEQBDAAyEqIAIgBigCACABbEEDdGogBEEDdGoiCyAqRC1DHOviNho/oEQtQxzr4jYaP6IgKaIgCysDAKA5AwAgBEEBaiEEDAELCyACIAEgAyAGKAIAEMYBISogDisDAAUgKwsgKqMhKQsgCCAdaiApOQMAICggKaAhKAsgB0EBaiEHDAELCyAJQQBIDQUgHSAJQQN0aiAomjkDACAFIQMMAQsLIBogAiATIAEQ0wlBACEDAkAgG0UNAANAIAMgFEYNASABIANsIQUgGyADQQN0aiEHQQAhBANAIAQgFUcEQCATIAQgBWpBA3QiCWoiBiAHKwMAIAkgIGorAwCiIAYrAwCgOQMAIARBAWohBAwBCwsgA0EBaiEDDAALAAtBACEDAkAgACgCGEEBRw0AA0AgAyAURg0BIAEgA2whBUEAIQQDQCAEIBVHBEAgEyAEIAVqQQN0IgdqIgkgByAMaisDACAJKwMAoDkDACAEQQFqIQQMAQsLIANBAWohAwwACwALIAArAyghLSAAKwMwIS5BACEDQQAhDkQAAAAAAAAAACErIwBBEGsiCCQAAkACQCAPKAIQQQFGBEAgDygCHCIJRQ0BIA8oAhghCiAPKAIUIQcgDygCACIGQQFqEN8BIg0gBrciLDkDACAGQQAgBkEAShshFiANQQhqIRkDQCADIBZHBEAgGSADQQN0aiILQoCAgICAgID4PzcDACAHIANBAnRqKAIAIgQgByADQQFqIgVBAnRqKAIAIhEgBCARShshEQNAIAQgEUYEQCAFIQMMAwUCQCADIAogBEECdGooAgBHDQAgCSAEQQN0aisDACIpRAAAAAAAAAAAZCApRAAAAAAAAAAAY3JFDQAgC0QAAAAAAADwPyApozkDAAsgBEEBaiEEDAELAAsACwsgAUEAIAFBAEobISUgBkEDdCEmIAYQ3wEhByAGEN8BIREDQEEAIQQgDiAlRwRAA0AgBCAWRwRAIAcgBEEDdCIDaiACIAEgBGwgDmpBA3QiBWorAwA5AwAgAyARaiAFIBNqKwMAOQMAIARBAWohBAwBCwsgBhDfASELIAggBhDfATYCDCAGEN8BIQogCCAGEN8BNgIIIA8gByAIQQxqENIJIAgoAgwhA0EAIQUgBkEAIAZBAEobIQkDQCAFIAlHBEAgAyAFQQN0IgRqIhIgBCARaisDACASKwMAoTkDACAFQQFqIQUMAQsLIAggAzYCDCAGIAMgAxCgAZ8gLKMiKiAtoiEvQQAhA0QAAAAAAADwPyEoIAchCQNAIAO4IC5jRSAqIC9kRXJFBEAgA0EBakEAIQQCfyANKwMAIimZRAAAAAAAAOBBYwRAICmqDAELQYCAgIB4CyISQQAgEkEAShshJyAIKAIMIRIDQCAEICdHBEAgCyAEQQN0IhdqIBIgF2orAwAgFyAZaisDAKI5AwAgBEEBaiEEDAELCyAGIBIgCxCgASEpAkAgAwRAICkgKKMhKEEAIQMgBkEAIAZBAEobIQQDQCADIARHBEAgCiADQQN0IhJqIhcgKCAXKwMAoiALIBJqKwMAoDkDACADQQFqIQMMAQsLDAELIAogCyAmECAaCyAPIAogCEEIahDSCSAGIAkgCiApIAYgCiAIKAIIEKABoyIoEM4JIQkgCCAGIAgoAgwgCCgCCCAomhDOCSIDNgIMIAYgAyADEKABnyAsoyEqICkhKCEDDAELCyALEBcgCCgCDBAXIAoQFyAIKAIIEBcgEyAOQQN0aiEDQQAhBANAIAQgFkcEQCADIAEgBGxBA3RqIAcgBEEDdGorAwA5AwAgBEEBaiEEDAELCyAOQQFqIQ4gKyAqoCErDAELCyAHEBcgERAXIA0QFyAIQRBqJAAMAgtB99EBQee7AUEjQbUVEAAAC0HvwQFB57sBQSVBtRUQAAALQQAhA0QAAAAAAAAAACEoA0AgAyAURwRAIAEgA2whBUEAIQREAAAAAAAAAAAhKQNAIAQgFUcEQCATIAQgBWpBA3QiB2orAwAgAiAHaisDAKEiKiAqoiApoCEpIARBAWohBAwBCwsgA0EBaiEDICggKZ+gISgMAQsLIBggAiACEKABISkgAiATICQQIBogKCApn6MhKQwACwALQdacA0GtuAFBuwNBzBEQAAALQdacA0GtuAFB5QNBzBEQAAALQY2SA0GtuAFB0wRBvvYAEAAAC0EAIRMLIBoQZCAQBEAgEBBkIA8QZAsgHBAXIBMQFyAMEBcLqgYCDX8DfAJAIABBABC5AgRAIAAQiQQiBSgCHCEKIAUoAhghCyAFKAIUIQYgBSgCEEEBRwRAIAoQFyAFQQE2AhAgBSAFKAIIQQgQGCIKNgIcCyAFKAIAQQQQGCEMIAUoAgAiB0EAIAdBAEobIQ1BACEAA0AgACANRgRAA0AgAyANRgRAQQAhBEQAAAAAAAAAACEQQQAhAwwFCyAGIANBAnQiDmooAgAhBCAGIANBAWoiCEECdGooAgAhACAMIA5qIAM2AgAgBCAAIAAgBEgbIQ4gACAEayEJIAQhAANAIAAgDkYEQCAJtyESA0AgBCAORgRAIAghAwwECwJAIAsgBEECdGooAgAiACADRwRAIAYgAEECdGoiCSgCACIAIAkoAgQiCSAAIAlKGyEPIBIgCSAAa7egIRADQCAAIA9GRQRAIBBEAAAAAAAA8L+gIBAgDCALIABBAnRqKAIAQQJ0aigCACADRhshECAAQQFqIQAMAQsLIAogBEEDdGogEDkDACAQRAAAAAAAAAAAZEUNAQsgBEEBaiEEDAELC0HOjwNBrbgBQccAQeIREAAACyALIABBAnRqKAIAIg8gA0cEQCAMIA9BAnRqIAM2AgALIABBAWohAAwACwALAAUgDCAAQQJ0akF/NgIAIABBAWohAAwBCwALAAtBop4DQa24AUEpQeIREAAACwNAAkAgAyAHSARAIAYgA0EBaiIIQQJ0aiEHIAYgA0ECdGooAgAhAANAIAAgBygCAE4NAiALIABBAnRqKAIAIg0gA0cEQCARIAIgASADIA0QxgGgIREgECAKIABBA3RqKwMAoCEQIARBAWohBAsgAEEBaiEADAALAAsgESAEtyIRoyAQIBGjoyEQQQAhAyAHQQAgB0EAShshAgNAIAIgA0cEQCAGIANBAnRqKAIAIgAgBiADQQFqIgFBAnRqKAIAIgggACAIShshCANAIAAgCEYEQCABIQMMAwsgCyAAQQJ0aigCACADRwRAIAogAEEDdGoiBCAQIAQrAwCiOQMACyAAQQFqIQAMAAsACwsgDBAXIAUPCyAFKAIAIQcgCCEDDAALAAvqHAIpfwN8IwBBEGsiESQAAkACQAJAAkACQAJAAkACQCAAKAIAIAFBAWtODQAgACgCCCIGKAIEt0QAAAAAAADoP6IhLAJAA0AgBigCACIKIAYoAgRHDQMgEUEANgIIIBFBADYCBCAGLQAkQQFxRQ0EQQAhAiAKQQAgCkEAShshECAGKAIYIRwgBigCFCEdIApBBBAYIRogCkEBakEEEBghFCAKQQQQGCEPA0AgAiAQRwRAIA8gAkECdGogAjYCACACQQFqIQIMAQsLIAZBABC5AkUNBSAGKAIQQQFHDQYgBigCBCICQQAgAkEAShshDSAGKAIAIQcgBigCGCESIAYoAhQhEyACQQQQPyEIIAJBAWpBBBA/IQUgAkEEED8hDiACQQQQPyEMQQAhAwNAIAMgDUcEQCAIIANBAnRqQQA2AgAgA0EBaiEDDAELCyAFIAI2AgQgBUEEaiELQQAhAwNAIAMgDUYEQEEAIQIgB0EAIAdBAEobIR5BASEEA0AgAiAeRwRAIBMgAkEBaiIHQQJ0aigCACEXIBMgAkECdGooAgAiAyEJA0AgCSAXSARAIAsgCCASIAlBAnRqKAIAQQJ0aigCAEECdGoiGCAYKAIAQQFrNgIAIAlBAWohCQwBCwsDQCADIBdOBEAgByECDAMFAkAgAiAOIAggEiADQQJ0aigCAEECdGoiGCgCACIfQQJ0IglqIhUoAgBKBEAgFSACNgIAIAkgC2oiFSgCAEUEQCAVQQE2AgAgCSAMaiAfNgIADAILIAkgDGogBDYCACALIARBAnRqQQE2AgAgGCAENgIAIARBAWohBAwBCyAYIAkgDGooAgAiCTYCACALIAlBAnRqIgkgCSgCAEEBajYCAAsgA0EBaiEDDAELAAsACwtBACEJIAVBADYCACAEQQAgBEEAShshAkEAIQMDQCACIANHBEAgBSADQQFqIgNBAnRqIgcgBygCACAJaiIJNgIADAELCyARIAw2AghBACEDA0AgAyANRgRAIAQhAwNAIANBAEoEQCAFIANBAnRqIgIgAkEEaygCADYCACADQQFrIQMMAQsLIAVBADYCACARIAU2AgQgESAENgIMIA4QFyAIEBcFIAUgCCADQQJ0aigCAEECdGoiAiACKAIAIgJBAWo2AgAgDCACQQJ0aiADNgIAIANBAWohAwwBCwsFIA4gA0ECdGpBfzYCACADQQFqIQMMAQsLQQAhCCAUQQA2AgAgESgCDCICQQAgAkEAShshDCAGKAIcIQ4gESgCCCELIBEoAgQhA0EAIQVBACEHA0AgBSAMRwRAIAVBAnQhAiADIAVBAWoiBUECdGooAgAiBCACIANqKAIAIgJrQQJIDQEgAiAEIAIgBEobIQQgFCAIQQJ0aigCACEJA0AgAiAERwRAIA8gCyACQQJ0aigCACINQQJ0akF/NgIAIBogB0ECdGogDTYCACAHQQFqIgcgCWtBBE4EQCAUIAhBAWoiCEECdGogBzYCACAHIQkLIAJBAWohAgwBCwsgByAJTA0BIBQgCEEBaiIIQQJ0aiAHNgIADAELC0QAAAAAAAAAACErQQAhBUEAIQNBACEEAkAgCiICQQBMDQAgAkEEEBghBANAIAIgA0YEQCAEQQRrIQMDQCACQQJIDQMgAkEBTARAQa+GA0G8ugFBHEGQpwEQAAAFEKYBIAJvIQkgAyACQQJ0aiIMKAIAIQsgDCAEIAlBAnRqIgkoAgA2AgAgCSALNgIAIAJBAWshAgwBCwALAAUgBCADQQJ0aiADNgIAIANBAWohAwwBCwALAAsgBCELQQAhDEEAIQMDQCAMIBBHBEACQCAPIAsgDEECdGooAgAiDUECdCICaiISKAIAQX9GDQAgAiAdaiIEKAIAIgIgBCgCBCIEIAIgBEobIRNBASEJA0AgAiATRwRAAkAgDSAcIAJBAnRqKAIAIgRGDQAgDyAEQQJ0aigCAEF/Rg0AIAlBAXFBACEJIA4gAkEDdGorAwAiLSArZHJFDQAgLSErIAQhAwsgAkEBaiECDAELCyAJQQFxDQAgDyADQQJ0akF/NgIAIBJBfzYCACAaIAdBAnRqIgIgAzYCBCACIA02AgAgFCAIQQFqIghBAnRqIAdBAmoiBzYCAAsgDEEBaiEMDAELCwNAIAUgEEcEQCAFIA8gBUECdGooAgBGBEAgGiAHQQJ0aiAFNgIAIBQgCEEBaiIIQQJ0aiAHQQFqIgc2AgALIAVBAWohBQwBCwsgCxAXIBEoAggQFyARKAIEEBcgDxAXIAggCkoNB0EAIQICQCAIIApGBEBBACEHQQAhBUEAIQ9BACEJQQAhDAwBC0EAIQdBACEFQQAhD0EAIQlBACEMIAhBBEgNACAKQQQQGCEPIApBBBAYIQkgCkEIEBghDANAIAcgCEcEQCAUIAdBAnRqKAIAIgUgFCAHQQFqIgRBAnRqKAIAIgMgAyAFSBsgAiAFa2ohAwNAIAIgA0YEQCADIQIgBCEHDAMFIA8gAkECdCILaiAaIAVBAnRqKAIANgIAIAkgC2ogBzYCACAMIAJBA3RqQoCAgICAgID4PzcDACAFQQFqIQUgAkEBaiECDAELAAsACwsgAiAKRw0JIAogCiAIIA8gCSAMQQFBCBDBAyIHEMMGIQVBACECQQAhDkEAIQpBACEDQQAhCwJAIAYoAiAgBSgCIHJFBEAgBSgCBCAGKAIARw0BIAYoAgQgBygCAEcNASAFKAIQIgQgBigCEEcNASAEIAcoAhBHDQEgBEEBRgRAIAcoAhghFyAHKAIUIRggBigCGCEcIAYoAhQhHSAFKAIYIR4gBSgCFCEQIAUoAgAhEiAHKAIEIhNBBBBGIg1FDQIgE0EAIBNBAEobIQMDQCACIANGBEACQCASQQAgEkEAShshH0EAIQIDQCACIB9HBEAgECACQQJ0aigCACIIIBAgAkEBaiIDQQJ0aigCACIEIAQgCEgbISBBfiACayEVA0AgCCAgRgRAIAMhAgwDBSAdIB4gCEECdGooAgBBAnRqIgIoAgAiBCACKAIEIgIgAiAESBshGQNAIAQgGUcEQCAYIBwgBEECdGooAgBBAnRqIhYoAgAiAiAWKAIEIhYgAiAWShshFgNAIAIgFkcEQCAVIA0gFyACQQJ0aigCAEECdGoiIigCAEcEQCAiIBU2AgAgDkEBaiEOCyACQQFqIQIMAQsLIARBAWohBAwBCwsgCEEBaiEIDAELAAsACwsgEiATIA5BAUEAEJoCIgMEQCADKAIcIQggBygCHCEOIAYoAhwhIiAFKAIcISQgAygCGCESIAMoAhQiE0EANgIAA0AgCyAfRwRAIBMgC0ECdCICaiElIBAgC0EBaiILQQJ0IiZqIScgAiAQaigCACEEA0AgJygCACAESgRAICQgBEEDdGohFSAdIB4gBEECdGooAgBBAnRqIigoAgAhBgNAICgoAgQgBkoEQCAiIAZBA3RqISAgGCAcIAZBAnRqKAIAQQJ0aiIpKAIAIQIDQCApKAIEIAJKBEACQCANIBcgAkECdGooAgAiGUECdGoiKigCACIWICUoAgBIBEAgKiAKNgIAIBIgCkECdGogGTYCACAIIApBA3RqIBUrAwAgICsDAKIgDiACQQN0aisDAKI5AwAgCkEBaiEKDAELIBIgFkECdGooAgAgGUcNCiAIIBZBA3RqIhkgFSsDACAgKwMAoiAOIAJBA3RqKwMAoiAZKwMAoDkDAAsgAkEBaiECDAELCyAGQQFqIQYMAQsLIARBAWohBAwBCwsgEyAmaiAKNgIADAELCyADIAo2AggLIA0QFwwFCwUgDSACQQJ0akF/NgIAIAJBAWohAgwBCwtB88IBQZq2AUGHCUH7rwIQAAALQfrRAUGatgFB0ghB+68CEAAAC0HgywFBmrYBQcQIQfuvAhAAAAsgAyIERQRAQQAhAgwBC0EAIQZBACEDAkAgBUUNACAFKAIUIQoCQAJAAkACQCAFKAIQQQFrDggAAQQCBAQEAwQLIAUoAgAiAkEAIAJBAEobIQggBSgCHCELA0AgAyAIRg0DIAogA0ECdGooAgAiBiAKIANBAWoiA0ECdGooAgAiAiACIAZIGyEQIAIgBmu3ISsDQCAGIBBGDQEgCyAGQQN0aiICIAIrAwAgK6M5AwAgBkEBaiEGDAALAAsACyAFKAIYIQsgBSgCACICQQAgAkEAShshECAFKAIcIQ0DQCADIBBGDQIgCiADQQJ0aigCACIGIAogA0EBaiICQQJ0aigCACIIIAYgCEobIQ4gCCAGa7chKwNAIAYgDkYEQCACIQMMAgsgAyALIAZBAnRqKAIARwRAIA0gBkEEdGoiCCAIKwMAICujOQMAIAggCCsDCCArozkDCAsgBkEBaiEGDAALAAsAC0GUlwNBmrYBQdkLQYmeARAAAAsgBSEGCyAGIQUgBCAEKAIkQQNyNgIkIAQQwQYhAgsgDxAXIAkQFyAMEBcgGhAXIBQQFyACBEAgAigCBCEEAn8gG0UEQCAHIRsgBQwBCyAhRQ0LIBsgBxDRCSAbEGQgBxBkIAUgIRDRCSEHICEQZCAFEGQhGyAHCyEhICMEQCAjEGQLIAIiIyEGICwgBLdjDQEMAgsLICMiAkUNAQsgACACEMIJIgM2AhQgAyAAKAIAQQFqNgIAIAIoAgAhAiADIBs2AgwgAyACNgIEIAAgITYCECADIAA2AhggAyABEMEJGgsgEUEQaiQAIAAPC0Gw6gBBr7oBQZcBQZrxABAAAAtByp8DQa+6AUE/Qa0YEAAAC0GingNBr7oBQcsAQa0YEAAAC0H30QFBr7oBQcwAQa0YEAAAC0GG6wBBr7oBQZ4BQZrxABAAAAtB9uoAQa+6AUGzAUGa8QAQAAALQfnMAUGvugFB2gFBjuUAEAAAC2UBAn8gAEUEQEEADwsgACgCACAAKAIERgRAQQFBIBAYIgFBADYCACAAKAIEIQIgAUIANwIMIAEgADYCCCABIAI2AgQgAUIANwIUIAFBADoAHCABDwtBsOoAQa+6AUEXQY8fEAAAC0UBAX8gAARAAkAgACgCCCIBRQ0AIAAoAgBFBEAgAC0AHEUNAQsgARBkCyAAKAIMEGQgACgCEBBkIAAoAhQQwwkgABAXCwseAEHQ7QotAABFBEBB0O0KQQE6AABBy8wDQQAQMQsLWAICfAF/AkACfyAALQAcIgQgAS0AHEUNABogBEUNASAAKwMAIgIgASsDACIDYw0BQQEgAiADZA0AGkF/IAArAwgiAiABKwMIIgNjDQAaIAIgA2QLDwtBfws4AQJ/A0AgAEEATEUEQCACIABBAWsiAEEDdCIEaisDACABIARqKwMAY0UgA0EBdHIhAwwBCwsgAwtoAQN/QRgQTSIEIAE5AwAgAEEIEBghBSAEIAM2AgwgBCAFNgIIQQAhAyAAQQAgAEEAShshAANAIAAgA0ZFBEAgBSADQQN0IgZqIAIgBmorAwA5AwAgA0EBaiEDDAELCyAEQQA2AhAgBAtoAgJ/AXwgACABIAIgAxDJCSIBKAIUIQVBACEDIABBACAAQQBKGyEAIAKaIQcDQCAAIANGRQRAIAUgA0EDdGoiBiAGKwMAIAIgByAEQQFxG6A5AwAgA0EBaiEDIARBAm0hBAwBCwsgAQumAQEEf0E4EE0iBEEANgIAIAQgADYCECAEIABBCBAYIgY2AhQgAEEAIABBAEobIQADQCAAIAVGRQRAIAYgBUEDdCIHaiABIAdqKwMAOQMAIAVBAWohBQwBCwsgAkQAAAAAAAAAAGRFBEBB748DQYm9AUHrAkHFFRAAAAsgBEEANgIwIAQgAzYCLCAEQQA2AiggBEIANwMgIARCADcDCCAEIAI5AxggBAudAwIKfwJ8IAArAwghDSAAKAIoIQMgACAAKAIQIgUQ+AQhCAJAIA1EAAAAAAAAAABkBEAgAiACKwMQRAAAAAAAAPA/oDkDEAJAIAMEQCAFQQAgBUEAShshAgNAIANFDQIgAygCECIARQRAIAMgASADKAIMIAVsQQN0aiIANgIQCyADKwMAIA2jIQ5BACEEA0AgAiAERkUEQCAAIARBA3QiBmoiByAOIAYgCGorAwCiIAcrAwCgOQMAIARBAWohBAwBCwsgAygCFCEDDAALAAtBASAFdCIDQQAgA0EAShshByAFQQAgBUEAShshCUEAIQMDQCADIAdGDQEgACgCJCADQQJ0aigCACIGBEAgBigCAEEATA0EIAYgBRD4BCEKIAYrAwggDaMhDkEAIQQDQCAEIAlGRQRAIAogBEEDdCILaiIMIA4gCCALaisDAKIgDCsDAKA5AwAgBEEBaiEEDAELCyAGIAEgAhDKCQsgA0EBaiEDDAALAAsPC0GBjwNBib0BQfwBQYmSARAAAAtB5I8DQYm9AUGOAkGJkgEQAAALYQEBfyABKAIAIgEgAigCACIGTgRAIAMgAygCACAAIAZsIAAgAUEKaiIAbBC+BjYCACAEIAQoAgAgAigCACAAEL4GNgIAIAUgBSgCACACKAIAIAAQvgY2AgAgAiAANgIACwvxAwIGfwF8IAkgCSsDAEQAAAAAAADwP6A5AwACQCAARQ0AIAAoAhAiC0EAIAtBAEobIQ0gAEEoaiEKA0AgCigCACIMBEAgCyAEIAUgBiAHIAgQywkgAyAMKAIMRwRAIAwoAgghDkEAIQoDQCAKIA1GRQRAIApBA3QiDyAGKAIAIAQoAgAgC2xBA3RqaiAOIA9qKwMAOQMAIApBAWohCgwBCwsgBygCACAEKAIAQQN0aiAMKwMAOQMAIAIgDiALEPkEIRAgCCgCACAEKAIAIgpBA3RqIBA5AwAgBCAKQQFqNgIACyAMQRRqIQoMAQsLIAAoAiRFDQAgACgCFCACIAsQ+QQhECAAKwMYIBAgAaJjRQRAQQAhCkEBIAt0IgtBACALQQBKGyELA0AgCiALRg0CIAAoAiQgCkECdGooAgAgASACIAMgBCAFIAYgByAIIAkQzAkgCkEBaiEKDAALAAsgCyAEIAUgBiAHIAgQywlBACEKA0AgCiANRkUEQCAKQQN0IgMgBigCACAEKAIAIAtsQQN0amogACgCICADaisDADkDACAKQQFqIQoMAQsLIAcoAgAgBCgCAEEDdGogACsDCDkDACAAKAIgIAIgCxD5BCEBIAgoAgAgBCgCACIAQQN0aiABOQMAIAQgAEEBajYCAAsLgwEBAX8gACgCECEJIAhCADcDACADQQA2AgAgBEEKNgIAIAUoAgBFBEAgBSAJQQpsQQgQGDYCAAsgBigCAEUEQCAGIAQoAgBBCBAYNgIACyAHKAIARQRAIAcgBCgCAEEIEBg2AgALIABEMzMzMzMz4z8gASACIAMgBCAFIAYgByAIEMwJC0cBA38gAEEAIABBAEobIQADQCAAIARGRQRAIAEgBEEDdCIFaiIGIAMgAiAFaisDAKIgBisDAKA5AwAgBEEBaiEEDAELCyABC/8GAQ1/IwBB0ABrIgQkACAEQQA2AkggBEEANgJEIwBBEGsiByQAAkAgAEUNACAAEDUhDSAAELACIQogABAaIQMDQCADBEAgAygCECAFNgKIASAFQQFqIQUgACADEBshAwwBBSAKQQQQGCEIIApBBBAYIQkgCkEIEBghCyAAQQJBxh9BABAfIQ4gABAaIQZBACEFA0AgBkUEQCAKIA0gDSAIIAkgC0EBQQgQwQMhAyAIEBcgCRAXIAsQFwwECyAGKAIQKAKIASEPIAAgBhApIQMDQCADBEAgCCAFQQJ0IgxqIA82AgAgCSAMaiADQVBBACADKAIAQQNxQQJHG2ooAigoAhAoAogBNgIAIAsgBUEDdGogDgR8IAMgDhA+IAcgB0EIajYCAEHnhAEgBxBJIQwgBysDCEQAAAAAAADwPyAMQQFGGwVEAAAAAAAA8D8LOQMAIAVBAWohBSAAIAMQLCEDDAEFIAAgBhAbIQYMAgsACwALAAsACwALIAdBEGokACADIQcCf0EAIAEoAjRBAEgNABogASgCUEEASgRAIAQgAikDCDcDKCAEIAIpAwA3AyAgACAEQSBqIARByABqIARBxABqELQKDAELIAQgAikDCDcDOCAEIAIpAwA3AzAgACAEQTBqQQBBABC0CgshCgJAQbyLCy8BACAAEDVsIgJBgICAgAJJBEBBACACIAJBCBBGIgUbDQECQCAAQQFBjitBABAfRQ0AIAAQGiEDA0AgA0UNAQJAIAMoAhAiBi0AhwFFDQBBACECIAVBvIsLLwEAIgggBigCiAFsQQN0aiEJA0AgAiAIRg0BIAkgAkEDdCILaiAGKAKUASALaisDADkDACACQQFqIQIMAAsACyAAIAMQGyEDDAALAAtBvIsLLwEAIAcgASAFIAQoAkggBCgCRCAEQcwAahC5CSAAEBohAwNAIAMEQEEAIQIgBUG8iwsvAQAiASADKAIQIgYoAogBbEEDdGohCANAIAEgAkcEQCACQQN0IgkgBigClAFqIAggCWorAwA5AwAgAkEBaiECDAELCyAAIAMQGyEDDAELCyAKEBcgBRAXIAcQZCAEKAJEEBcgBEHQAGokAA8LIARBCDYCBCAEIAI2AgBB6PoGKAIAQdrdAyAEEB0aECYACyAEIAJBA3Q2AhBB6PoGKAIAQandAyAEQRBqEB0aECYAC88BAQZ/AkAgAEUNACAAKAIEIgIgACgCAEcNACAAKAIYIQQgACgCFCEFIAIgAiAAKAIIIgZBCEEAEJoCIgEoAhQgBSACQQJ0QQRqECAaIAEoAhggBCAGQQJ0ECAaIAEgACgCCDYCCCABQQEQjAMgARBkEMEGIgEgASgCCEEIED8iADYCHCABKAIIIgJBACACQQBKGyECA0AgAiADRkUEQCAAIANBA3RqQoCAgICAgID4PzcDACADQQFqIQMMAQsLIAFBCDYCKCABQQE2AhALIAELnw4BF38CQAJAAkAgASgCICAAKAIgckUEQCAAKAIEIAEoAgBHDQMgACgCECIIIAEoAhBHDQMgASgCGCEVIAEoAhQhFiAAKAIYIRcgACgCFCEPIAAoAgAhBSABKAIEIgpBBBBGIhRFDQMgCkEAIApBAEobIQwCQAJAAkADQCACIAxGBEACQCAFQQAgBUEAShshGEEAIQIDQCACIBhHBEAgDyACQQJ0aigCACINIA8gAkEBaiIMQQJ0aigCACIHIAcgDUgbIRFBfiACayEEA0AgDSARRgRAIAwhAgwDBSAWIBcgDUECdGooAgBBAnRqIgcoAgAiAiAHKAIEIgcgAiAHShshEgNAIAIgEkZFBEAgBCAUIBUgAkECdGooAgBBAnRqIgcoAgBHBEAgByAENgIAIAZBAWohBgsgAkEBaiECDAELCyANQQFqIQ0MAQsACwALCyAFIAogBiAIQQAQmgIiDkUNByAOKAIYIRMgDigCFCELAkACQAJAAkACQAJAIAhBAWsOCAABBAIEBAQDBAsgDigCHCENIAEoAhwhBSAAKAIcIQRBACECIAtBADYCAANAIAkgGEYNBSALIAlBAnQiAGohESAPIAlBAWoiCUECdCISaiEHIAAgD2ooAgAhAQNAIAcoAgAgAUoEQCAEIAFBA3RqIQogFiAXIAFBAnRqKAIAQQJ0aiIMKAIAIQMDQCAMKAIEIANKBEACQCAUIBUgA0ECdGooAgAiBkECdGoiACgCACIIIBEoAgBIBEAgACACNgIAIBMgAkECdGogBjYCACANIAJBA3RqIAorAwAgBSADQQN0aisDAKI5AwAgAkEBaiECDAELIBMgCEECdGooAgAgBkcNCyANIAhBA3RqIgAgCisDACAFIANBA3RqKwMAoiAAKwMAoDkDAAsgA0EBaiEDDAELCyABQQFqIQEMAQsLIAsgEmogAjYCAAwACwALIA4oAhwhCiABKAIcIQYgACgCHCERQQAhAiALQQA2AgADQCAJIBhGDQQgCyAJQQJ0IgBqIRIgDyAJQQFqIglBAnQiB2ohDCAAIA9qKAIAIRADQCAMKAIAIBBKBEAgESAQQQR0aiEFIBYgFyAQQQJ0aigCAEECdGoiASgCACEDA0AgASgCBCADSgRAAkAgFCAVIANBAnRqKAIAIghBAnRqIgAoAgAiBCASKAIASARAIAAgAjYCACATIAJBAnRqIAg2AgAgCiACQQR0aiIAIAUrAwAgBiADQQR0aiIEKwMAoiAEKwMIIAUrAwiioTkDACAAIAUrAwAgBCsDCKIgBSsDCCAEKwMAoqA5AwggAkEBaiECDAELIBMgBEECdGooAgAgCEcNDSAKIARBBHRqIgQgBCsDACAFKwMAIAYgA0EEdGoiACsDAKIgACsDCCAFKwMIoqGgOQMAIAQgBCsDCCAFKwMAIAArAwiiIAUrAwggACsDAKKgoDkDCAsgA0EBaiEDDAELCyAQQQFqIRAMAQsLIAcgC2ogAjYCAAwACwALIA4oAhwhDSABKAIcIQUgACgCHCEEQQAhAiALQQA2AgADQCAJIBhGDQMgCyAJQQJ0IgBqIREgDyAJQQFqIglBAnQiEmohByAAIA9qKAIAIRADQCAHKAIAIBBKBEAgBCAQQQJ0IgBqIQogFiAAIBdqKAIAQQJ0aiIMKAIAIQMDQCAMKAIEIANKBEACQCAUIBUgA0ECdCIGaigCACIIQQJ0aiIBKAIAIgAgESgCAEgEQCABIAI2AgAgEyACQQJ0IgBqIAg2AgAgACANaiAFIAZqKAIAIAooAgBsNgIAIAJBAWohAgwBCyATIABBAnQiAGooAgAgCEcNDSAAIA1qIgAgACgCACAFIAZqKAIAIAooAgBsajYCAAsgA0EBaiEDDAELCyAQQQFqIRAMAQsLIAsgEmogAjYCAAwACwALQQAhAiALQQA2AgBBACEGA0AgBiAYRg0CIAsgBkECdCIAaiEEIA8gBkEBaiIGQQJ0IhFqIRIgACAPaigCACEAA0AgEigCACAASgRAIBYgFyAAQQJ0aigCAEECdGoiBygCACEDA0AgBygCBCADSgRAAkAgFCAVIANBAnRqKAIAIghBAnRqIgwoAgAiASAEKAIASARAIAwgAjYCACATIAJBAnRqIAg2AgAgAkEBaiECDAELIBMgAUECdGooAgAgCEcNDQsgA0EBaiEDDAELCyAAQQFqIQAMAQsLIAsgEWogAjYCAAwACwALIA4QZAwICyAOIAI2AggMCAsFIBQgAkECdGpBfzYCACACQQFqIQIMAQsLQYzDAUGatgFB3gdBlA0QAAALQYzDAUGatgFB+AdBlA0QAAALQYzDAUGatgFBkghBlA0QAAALQYzDAUGatgFBpghBlA0QAAALQeDLAUGatgFBoQdBlA0QAAALQQAhDgsgFBAXCyAOC7UGAgl/AXwgACgCIEUEQAJAAkAgACgCEEEBayIEDgQBAAABAAtBrcwBQZq2AUHgBkHBNRAAAAsgAigCACEFIAAoAgAhAyAAKAIYIQYgACgCFCEHAkACQAJAAkAgBA4EAAICAQILIAAoAhwhCSABBEAgBUUEQCADQQgQPyEFC0EAIQQgA0EAIANBAEobIQMDQCADIARGDQQgBSAEQQN0aiIKQgA3AwAgByAEQQJ0aigCACIAIAcgBEEBaiIEQQJ0aigCACIIIAAgCEobIQhEAAAAAAAAAAAhDANAIAAgCEYEQAwCBSAKIAkgAEEDdGorAwAgASAGIABBAnRqKAIAQQN0aisDAKIgDKAiDDkDACAAQQFqIQAMAQsACwALAAsgBUUEQCADQQgQPyEFC0EAIQEgA0EAIANBAEobIQQDQCABIARGDQMgBSABQQN0aiIDQgA3AwAgByABQQJ0aigCACIAIAcgAUEBaiIBQQJ0aigCACIGIAAgBkobIQZEAAAAAAAAAAAhDANAIAAgBkYEQAwCBSADIAkgAEEDdGorAwAgDKAiDDkDACAAQQFqIQAMAQsACwALAAsgACgCHCEJIAEEQCAFRQRAIANBCBA/IQULQQAhBCADQQAgA0EAShshAwNAIAMgBEYNAyAFIARBA3RqIgpCADcDACAHIARBAnRqKAIAIgAgByAEQQFqIgRBAnRqKAIAIgggACAIShshCEQAAAAAAAAAACEMA0AgACAIRgRADAIFIAogCSAAQQJ0IgtqKAIAtyABIAYgC2ooAgBBA3RqKwMAoiAMoCIMOQMAIABBAWohAAwBCwALAAsACyAFRQRAIANBCBA/IQULQQAhASADQQAgA0EAShshBANAIAEgBEYNAiAFIAFBA3RqIgNCADcDACAHIAFBAnRqKAIAIgAgByABQQFqIgFBAnRqKAIAIgYgACAGShshBkQAAAAAAAAAACEMA0AgACAGRgRADAIFIAMgDCAJIABBAnRqKAIAt6AiDDkDACAAQQFqIQAMAQsACwALAAtBlJcDQZq2AUGTB0HBNRAAAAsgAiAFNgIADwtB+ssBQZq2AUHfBkHBNRAAAAvGAgENfwJAIAAoAiBFBEAgACgCEEEBRw0BIANBACADQQBKGyEGIAAoAgAiBEEAIARBAEobIQkgACgCGCEKIAAoAhQhByAAKAIcIQsDQCAFIAlHBEAgAiADIAVsQQN0aiEIQQAhAANAIAAgBkZFBEAgCCAAQQN0akIANwMAIABBAWohAAwBCwsgByAFQQJ0aigCACIEIAcgBUEBaiIFQQJ0aigCACIAIAAgBEgbIQwDQCAEIAxGDQIgCiAEQQJ0aiENIAsgBEEDdGohDkEAIQADQCAAIAZGRQRAIAggAEEDdCIPaiIQIA4rAwAgASANKAIAIANsQQN0aiAPaisDAKIgECsDAKA5AwAgAEEBaiEADAELCyAEQQFqIQQMAAsACwsPC0H6ywFBmrYBQcoGQd6TARAAAAtB99EBQZq2AUHLBkHekwEQAAALSQAgACgCIEEBRwRAQcDWAUGatgFBnQRB9SQQAAALIAAoAgggACgCACAAKAIEIAAoAhQgACgCGCAAKAIcIAAoAhAgACgCKBDBAwsiACAAIAEgAyAEIAUQ1wkhACACQQBKBEAgACACENYJCyAAC2YBAn8gAEEANgIcIAAoAiAhAyABQQQQPyECAkACQCADQQFGBEAgACACNgIUIAAgAUEEED82AhggACgCKCECDAELIAAgAjYCGCAAKAIoIgJFDQELIAAgASACED82AhwLIAAgATYCDAtiAQF/QQFBLBA/IgUgAzYCKCAFIAI2AhAgBUIANwIIIAUgATYCBCAFIAA2AgBBACEDIARBAUcEQCAAQQFqQQQQPyEDCyAFQQA2AiQgBSAENgIgIAVCADcCGCAFIAM2AhQgBQt5AQJ8An9BACABKwMYQejYCisDACICoUHw2AorAwAgAqGjIAAoAgQiAbciA6IiAkQAAAAAAAAAAGMNABogAUEBayACIANmDQAaIAKZRAAAAAAAAOBBYwRAIAKqDAELQYCAgIB4CyIBIAAoAgxIBEAgACABNgIMCyABC5sGAgp/AnwjAEEQayIJJABBxO0KIAFBAWpBBBAYNgIAQYCLCy0AAARAQZa+A0EcQQFB6PoGKAIAEEoaQbiRCxCoAQsgABAaIQEDQCABBEBBACECQciLCysDACEMIAAoAhAoApgBIQMDQCADIAJBAnRqKAIAIgQEQCAEKAIQIAw5A5gBIAJBAWohAgwBCwtByO0KIAE2AgAgASgCECICQQA2ApABIAJCADcDmAEgARDbCQNAQQAhA0EAIQpBwO0KKAIAIgIEQEHE7QooAgAiBigCACEKQcDtCiACQQFrIgs2AgAgBiAGIAtBAnRqKAIAIgg2AgAgCCgCEEEANgKMAQJAIAJBA0gNAANAIANBAXQiAkEBciIFIAtODQECQAJ8IAsgAkECaiICTARAIAYgBUECdGooAgAiBCgCECsDmAEMAQsgBiACQQJ0aigCACIEKAIQKwOYASIMIAYgBUECdGooAgAiBygCECsDmAEiDWMNASAHIQQgDQshDCAFIQILIAgoAhArA5gBIAxlDQEgBiACQQJ0aiAINgIAIAgoAhAgAjYCjAEgBiADQQJ0aiAENgIAIAQoAhAgAzYCjAEgAiEDDAALAAsgCigCEEF/NgKMAQsgCiIDBEBByO0KKAIAIgIgA0cEQCAAKAIQKAKgASIEIAMoAhAiBSgCiAEiB0ECdGooAgAgAigCECgCiAEiAkEDdGogBSsDmAEiDDkDACAEIAJBAnRqKAIAIAdBA3RqIAw5AwALIAAgAxBvIQIDQCACRQ0CIAMgAkEwQQAgAigCAEEDcSIFQQNHG2ooAigiBEYEQCACQVBBACAFQQJHG2ooAighBAsCQCADKAIQIgcrA5gBIAIoAhArA4gBoCIMIAQoAhAiBSsDmAFjRQ0AIAUgDDkDmAEgBSgCjAFBAE4EQCAEENoJDAELIAUgBygCkAFBAWo2ApABIAQQ2wkLIAAgAiADEHQhAgwACwALCyAAIAEQGyEBDAELC0GAiwstAAAEQCAJEIoBOQMAQej6BigCAEGTvQQgCRAtC0HE7QooAgAQFyAJQRBqJAALfwEFf0HE7QooAgAhAiAAKAIQKAKMASEBA0ACQCABQQBMDQAgAiABQQFrQQF2IgNBAnRqIgUoAgAiBCgCECsDmAEgACgCECsDmAFlDQAgBSAANgIAIAAoAhAgAzYCjAEgAiABQQJ0aiAENgIAIAQoAhAgATYCjAEgAyEBDAELCwtiAQJ/IAAoAhAiAigCjAFBAEgEQEHA7QpBwO0KKAIAIgFBAWo2AgAgAiABNgKMAUHE7QooAgAgAUECdGogADYCACABQQBKBEAgABDaCQsPC0GClwNBxrsBQfQEQZuPARAAAAtRAgN/AnxBvIsLLwEAIQUDQCADIAVGRQRAIAIgA0EDdCIEaiAAIARqKwMAIAEgBGorAwChIgc5AwAgByAHoiAGoCEGIANBAWohAwwBCwsgBp8L3AECAX8BfEGAiwstAAAEQEG82gNBGkEBQej6BigCABBKGgsCQCAAIAFBAhD9CSICQQFGDQBBACEBAkAgAg0AQbDtCi0AAEEBcQ0AQYysBEEAECdBsO0KQQE6AAALA0AgACgCECgCmAEgAUECdGooAgAiAkUNASACKAIQLQCHAUUEQBDMASEDIAIoAhAoApQBIANEAAAAAAAA8D+iOQMAEMwBIQMgAigCECgClAEgA0QAAAAAAADwP6I5AwhBvIsLLwEAQQNPBEAgAkEBEMYGCwsgAUEBaiEBDAALAAsLrQEBBn8gACgCECgCmAEQF0GMiwsoAgBFBEAgACgCECgCoAEQ1QIgACgCECgCpAEQ1QIgACgCECgCqAEQ1QIgACgCECIBKAKsASIEBH8DQEEAIQEgBCACQQJ0aiIFKAIAIgMEQANAIAMgAUECdGooAgAiBgRAIAYQFyABQQFqIQEgBSgCACEDDAELCyADEBcgAkEBaiECDAELCyAEEBcgACgCEAUgAQtBADYCrAELC5EBAQV/IAAgARBvIQMDQCADRQRAIAUPCwJAIANBUEEAIAMoAgBBA3EiBEECRxtqKAIoIgcgA0EwQQAgBEEDRxtqKAIoIgRGDQAgBQRAQQEhBSABIARGIAYgB0ZxIAEgB0YgBCAGRnFyDQFBAg8LIAIgByAEIAEgBEYbIgY2AgBBASEFCyAAIAMgARB0IQMMAAsAC6oIAgp/AXwjAEEQayIFJABBgIsLLQAABEAgABAeIQMgBSAAEDU2AgQgBSADNgIAQej6BigCAEG+4gMgBRAdGgsCQEGBiwstAABBAUcNACAAEBohBANAIAQiA0UNASAAIAMQGyEEAkACQCAAIAMgBUEIahDfCQ4CAAECCyAAKAJIIAMQtAEMAQsgACgCSCADELQBIAUoAgghAwNAIAMiAkUNAUEAIQMCQAJAIAAgAiAFQQxqEN8JDgIAAQILIAIgBEYEQCAAIAIQGyEECyAAKAJIIAIQtAEMAQsgAiAERgRAIAAgAhAbIQQLIAAoAkggAhC0ASAFKAIMIQMMAAsACwALIAAQNSEEIAAQsAIhB0EAIQMgAEECQevlAEEAEB8hBgJAAkACQAJAIAEOBQACAgIBAgtBsIsLIAS3RC1DHOviNho/ojkDACAAELIIQdCLCyAAKAJIQZWAARAjIgIEfCACEKgCBUSuR+F6FK7vPws5AwAgBEEBakEEEBghAiAAKAIQIAI2ApgBIAAQGiECA0AgAkUNAyAAKAIQKAKYASADQQJ0aiACNgIAIAIoAhAiCEF/NgKMASAIIAM2AogBIAwgACACIAYQyAagIQwgA0EBaiEDIAAgAhAbIQIMAAsAC0GwiwtC+6i4vZTcnsI/NwMAIAAQsgggBEEBakEEEBghAiAAKAIQIAI2ApgBIAAQGiECA0AgAkUNAiAAKAIQKAKYASADQQJ0aiACNgIAIAIoAhAgAzYCiAEgDCAAIAIgBhDIBqAhDCADQQFqIQMgACACEBshAgwACwALQbCLC0KthvHYrtyNjT83AwAgABCyCCAAEBohAgNAIAJFDQEgAigCECADNgKIASAMIAAgAiAGEMgGoCEMIANBAWohAyAAIAIQGyECDAALAAtByIsLAnwCQCAAQZUZECMiA0UNACADLQAARQ0AQbCLCysDACADEKgCECQMAQsgDEEBIAcgB0EBTBu4oyAEt5+iRAAAAAAAAPA/oAsiDDkDAEGMiwsoAgAgAXJFBEAgBCAEIAwQ1gIhASAAKAIQIAE2AqABIAQgBEQAAAAAAADwPxDWAiEBIAAoAhAgATYCpAEgBEG8iwsvAQBEAAAAAAAA8D8Q1gIhASAAKAIQIAE2AqgBIARBACAEQQBKGyEBQbyLCy8BACEIIARBAWoiCkEEEBghB0EAIQMDQCABIANGRQRAIAcgA0ECdGogCkEEEBgiCTYCAEEAIQYDQCABIAZGRQRAIAkgBkECdGogCEEIEBgiCzYCAEEAIQIDQCACIAhGRQRAIAsgAkEDdGpCADcDACACQQFqIQIMAQsLIAZBAWohBgwBCwsgCSABQQJ0akEANgIAIANBAWohAwwBCwsgByABQQJ0akEANgIAIAAoAhAgBzYCrAELIAVBEGokACAEC7gDAgd/A3wgA0EAIANBAEobIQogAkEAIAJBAEobIQsCQCAEQQJGBEADQCAFIApGDQIgASAFQQR0aiIEKAIAIQZBACECA0AgAiAGRgRAIAVBAWohBQwCBSAFIAJBAnQiByAEKAIEaigCACIISARARAAAAAAAAAAAIQ1BACEDA0AgAyALRkUEQCAAIANBAnRqKAIAIgkgBUEDdGorAwAgCSAIQQN0aisDAKEiDiAOoiANoCENIANBAWohAwwBCwsgDCAEKAIIIAdqKAIAtyIMIA2foSINIA2iIAwgDKKjoCEMCyACQQFqIQIMAQsACwALAAsDQCAFIApGDQEgASAFQQR0aiIEKAIAIQZBACECA0AgAiAGRgRAIAVBAWohBQwCBSAFIAJBAnQiByAEKAIEaigCACIISARARAAAAAAAAAAAIQ1BACEDA0AgAyALRkUEQCAAIANBAnRqKAIAIgkgBUEDdGorAwAgCSAIQQN0aisDAKEiDiAOoiANoCENIANBAWohAwwBCwsgDCAEKAIIIAdqKAIAtyIMIA2foSINIA2iIAyjoCEMCyACQQFqIQIMAQsACwALAAsgDAuJAgEDfyMAQRBrIgIkACACIAE2AgQgAiABNgIMIAIgATYCCAJAAkACQEEAQQBBtbIBIAEQTiIEQQBIDQAgBEEBaiEBIAQgABA4IAAQIWsiA08EQCAAIAEgA2sQuAILIAAQISEDIAQgABAlBH8gACADagUgACgCACADagsgAUG1sgEgAigCDBBOIgFHIAFBAE5xDQEgAUEATA0AIAAQJQRAIAFBgAJPDQMgACAALQAPIAFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBxAFB2R0QAAALIAAgACgCBCABajYCBAsgAkEQaiQADwtBzZYDQY/9AEG/AUHZHRAAAAtB0skBQY/9AEHCAUHZHRAAAAu9AwIGfwJ8IwBBMGsiBCQAIAAoAgAhAgJAAkACQCAAAn8gACgCBCIFIAAoAghHBEAgBQwBCyAFQf////8ATw0BIAVBAXQiA0GAgICAAU8NAgJAIANFBEAgAhAXQQAhAgwBCyACIAVBBXQiBhA9IgJFDQQgBiAFQQR0IgdNDQAgAiAHakEAIAcQMxoLIAAgAzYCCCAAIAI2AgAgACgCBAtBAWo2AgQgAiAFQQR0aiIDIAEpAwg3AwggAyABKQMANwMAA0ACQCAFRQ0AIAAoAgAiAiAFQQR0IgNqKwMIIgggAiAFQQF2IgVBBHQiAWorAwgiCWNFBEAgCCAJYg0BEKYBQQFxRQ0BIAAoAgAhAgsgBCACIANqIgNBCGopAwA3AyggBCADKQMANwMgIAMgASACaiICKQMANwMAIAMgAikDCDcDCCAAKAIAIAFqIgEgBCkDIDcDACABIAQpAyg3AwgMAQsLIARBMGokAA8LQZG0A0He/QBBzQBBk7MBEAAACyAEQRA2AgQgBCADNgIAQej6BigCAEHa3QMgBBAdGhAmAAsgBCAGNgIQQej6BigCAEGp3QMgBEEQahAdGhAmAAubAgIEfwJ8IwBBEGsiBSQAA0AgAUEBdCICQQFyIQMCQAJAIAIgACgCBE8NACAAKAIAIgQgAkEEdGorAwgiBiAEIAFBBHRqKwMIIgdjDQEgBiAHYg0AEKYBQQFxDQELIAEhAgsCQCADIAAoAgRPDQAgACgCACIEIANBBHRqKwMIIgYgBCACQQR0aisDCCIHY0UEQCAGIAdiDQEQpgFBAXFFDQELIAMhAgsgASACRwRAIAUgACgCACIEIAJBBHRqIgNBCGopAwA3AwggBSADKQMANwMAIAMgBCABQQR0IgFqIgQpAwA3AwAgAyAEKQMINwMIIAAoAgAgAWoiASAFKQMANwMAIAEgBSkDCDcDCCACIQEMAQsLIAVBEGokAAsUAEGU7QpBGBCIBUGg7QpBADYCAAvMAQIDfwF8IABBAEEAIAJBABDTBiIEQwAAgD8gAUEAQQEgAhD/BCAEKAIkELkGIABBACAAQQBKGyEAA0AgACADRkUEQCADQQJ0IgUgBCgCEGooAgAQ8gQhBiABKAIAIAVqIAa2OAIAIANBAWohAwwBCwtBACEDIARDAACAPyABQQFBACACEP8EIAQoAiQQuQYDQCAAIANGRQRAIANBAnQiAiAEKAIQaigCABDyBCEGIAEoAgQgAmogBrY4AgAgA0EBaiEDDAELCyAEENIGC0sAIAAQNCAARwRAIABB7CVBmAJBARAuGgsgACABRgRAIAAQNCgCECABNgK8AQsgABByIQADQCAABEAgACABEOcJIAAQcSEADAELCwvICAILfwZ9IAAoAgggACgCBGohByAAKAIwIQogACgCLCELIAAoAighCAJAIAAoAhRBAEwEQCAHQQAgB0EAShshBgwBCyAHQQAgB0EAShshBgNAIAMgBkcEQCADQQJ0IgQgACgCEGooAgAgAiAEaioCALsQrwkgA0EBaiEDDAELCyAAKAIkELEJQQAhAwNAIAMgBkYNASACIANBAnQiBGogACgCECAEaigCABDyBLY4AgAgA0EBaiEDDAALAAtBACEDA0ACQCAMQegHTg0AQQAhBCADQQFxDQADfyAEIAZGBH9DAAAAACEQQwAAAAAhD0EABSALIARBAnQiBWogAiAFaioCADgCACAFIAhqIgkgASAFaioCACIOIA6SIg44AgBBACEDA0AgAyAHRwRAIAkgA0ECdCINIAAoAgAgBWooAgBqKgIAQwAAAMCUIAIgDWoqAgCUIA6SIg44AgAgA0EBaiEDDAELCyAEQQFqIQQMAQsLIQQDQAJAIAQgBkcEQCAIIARBAnQiBWoqAgAhEUMAAAAAIQ5BACEDA0AgAyAHRg0CIANBAnQiCSAAKAIAIAVqKAIAaioCACISIBKSIAggCWoqAgCUIA6SIQ4gA0EBaiEDDAALAAsgEIwgD5VDAACAvyAPQwAAAABcGyEOQQAhAwNAIAMgBkcEQCACIANBAnQiBGoiBSAOIAQgCGoqAgCUIAUqAgCSOAIAIANBAWohAwwBCwtBACEDAkAgACgCFEEATA0AA0AgAyAGRwRAIANBAnQiBCAAKAIQaigCACACIARqKgIAuxCvCSADQQFqIQMMAQsLIAAoAiQQsQlBACEDA0AgAyAGRg0BIAIgA0ECdCIEaiAAKAIQIARqKAIAEPIEtjgCACADQQFqIQMMAAsAC0EAIQRBACEDA30gAyAGRgR9QwAAAAAhD0MAAAAABSAKIANBAnQiBWogAiAFaioCACAFIAtqKgIAkzgCACADQQFqIQMMAQsLIRADQAJAIAQgBkcEQCAKIARBAnQiBWoqAgAhESAFIAhqKgIAIRJDAAAAACEOQQAhAwNAIAMgB0YNAiADQQJ0IgkgACgCACAFaigCAGoqAgAiEyATkiAJIApqKgIAlCAOkiEOIANBAWohAwwACwALQwAAAAAhDiAQIA+VQwAAgD8gD0MAAAAAXBsiD0MAAAAAXiAPQwAAgD9dcSEFQQAhAwNAIAMgBkcEQAJAIAVFBEAgAiADQQJ0aioCACEQDAELIAIgA0ECdCIEaiAPIAQgCmoqAgCUIAQgC2oqAgCSIhA4AgALIA4gECALIANBAnRqKgIAk4uSIQ4gA0EBaiEDDAELCyAMQQFqIQwgDrtELUMc6+I2Gj9kRSEDDAULIARBAWohBCAOIBGUIA+SIQ8gEiARlCAQkiEQDAALAAsgBEEBaiEEIA8gDiARlJMhDyARIBGUIBCSIRAMAAsACwsgDAvlAQIIfwF9IAFBBBAYIgQgASABbCIDQQQQGCIFNgIAIANDAAAAACAFEMIDQQEgASABQQFMGyEDQQEhAgN/IAIgA0YEfyABQQAgAUEAShshB0EAIQMDQCADIAdGRQRAIAQgA0ECdCIIaiEJIAMhAgNAIAEgAkZFBEAgAkECdCIFIAkoAgBqIAAgBkECdGoqAgAiCjgCACAEIAVqKAIAIAhqIAo4AgAgBkEBaiEGIAJBAWohAgwBCwsgA0EBaiEDDAELCyAEBSAEIAJBAnRqIAUgASACbEECdGo2AgAgAkEBaiECDAELCwvoAwIFfwR8QczZCigCACIERQRAQczZCkHA2QooAgAQnAIiBDYCAAsgAUEAIAFBAEobIQYgAisDCCEIIAIrAwAhCQNAIAMgBkYEQAJAIAFBAWshBUEAIQNEAAAAAAAAAAAhCANAIAMgBkcEQCADIAVqIAFvIQACQAJAIAQgA0EEdGoiAisDCCIJRAAAAAAAAAAAYg0AIAQgAEEEdGoiBysDCEQAAAAAAAAAAGINACACKwMAIAcrAwCiRAAAAAAAAAAAY0UNAQwECyAEIABBBHRqIgArAwgiCkQAAAAAAAAAAGUgCUQAAAAAAAAAAGZxRSAJRAAAAAAAAAAAZUUgCkQAAAAAAAAAAGZFcnENACACKwMAIAqiIAkgACsDAKKhIAogCaGjIgtEAAAAAAAAAABhDQMgC0QAAAAAAAAAAGRFDQAgCUQAAAAAAAAAAGIgCkQAAAAAAAAAAGJxRQRAIAhEAAAAAAAA4D+gIQgMAQsgCEQAAAAAAADwP6AhCAsgA0EBaiEDDAELCwJ/IAiZRAAAAAAAAOBBYwRAIAiqDAELQYCAgIB4C0GBgICAeHFBAUYPCwUgBCADQQR0IgJqIgUgACACaiICKwMAIAmhOQMAIAUgAisDCCAIoTkDCCADQQFqIQMMAQsLQQELjAECBnwBf0EBIAEgAUEBTRshCiAAKwMAIgQhBSAAKwMIIgYhB0EBIQEDQCABIApGBEAgAiAGOQMIIAIgBDkDACADIAc5AwggAyAFOQMABSABQQFqIQEgACsDECEIIAcgACsDGCIJECQhByAFIAgQJCEFIAYgCRAyIQYgBCAIEDIhBCAAQRBqIQAMAQsLC4ABAgF/AnwCQCABQQRHDQACfyAAKwMIIgQgACsDGCIDYQRAIAArAyggACsDOGINAiAAKwMAIAArAzBiDQIgACsDECEDIABBIGoMAQsgACsDACAAKwMQYg0BIAArAyAgACsDMGINASAEIAArAzhiDQEgAEEoagsrAwAgA2EhAgsgAgvSBgIMfwJ8IAFBACABQQBKGyEJIAFBCBAYIQogACgCCCELA0ACQCAFIAlHBEAgACgCEEUNAUEBIQRBASAAIAVBFGxqIgYoAgAiByAHQQFNGyEHRAAAAAAAAAAAIRADQCAEIAdGBEAgCiAFQQN0aiAQOQMADAMFIBAgBEECdCIIIAYoAghqKgIAIAYoAhAgCGoqAgCUu6AhECAEQQFqIQQMAQsACwALQQAhBCABQQAgAUEAShshBQNAIAQgBUcEQCACIARBA3RqEKYBQfQDb7c5AwAgBEEBaiEEDAELCyABIAIQvAJBACEEQQAhBQNAIAQgCUcEQCAAIARBFGxqKAIAIAVqIQUgBEEBaiEEDAELC0EAIQYgBUEEEBghBQNAIAYgCUcEQCAAIAZBFGxqIgQgBTYCCCAFIAQoAgAiB0EBa7OMOAIAQQEhBEEBIAcgB0EBTRshCANAIAQgCEYEQCAGQQFqIQYgBSAHQQJ0aiEFDAMFIAUgBEECdGpBgICA/AM2AgAgBEEBaiEEDAELAAsACwsCfyABQQgQGCEEIAFBCBAYIQUgAUEIEBghBiABQQgQGCEHIAFBCBAYIQggASAKIAFBCBAYIgwQhAIgASAMELwCIAEgAhC8AiAAIAEgAiAHEIcKIAEgDCAHIAQQhgUgASAEIAUQhAIgA0EAIANBAEobIQ4gA0EBayEPIAEgBCAEEKABIRBBACEDA0ACQAJAAkAgAyAORg0AIAEgBBCFCkT8qfHSTWJQP2RFDQAgACABIAUgBhCHCiABIAUgBhCgASIRRAAAAAAAAAAAYQ0AIAEgBSAQIBGjIhEgCBDgASABIAIgCCACEIUFIAMgD04NAiABIAYgESAGEOABIAEgBCAGIAQQhgUgASAEIAQQoAEhESAQRAAAAAAAAAAAYg0BQc32A0EAEDFBASENCyAEEBcgBRAXIAYQFyAHEBcgCBAXIAwQFyANDAMLIAEgBSARIBCjIAUQ4AEgASAEIAUgBRCFBSARIRALIANBAWohAwwACwALIAAoAggQF0EAIQQDQCAEIAlHBEAgACAEQRRsaiICIAs2AgggBEEBaiEEIAsgAigCAEECdGohCwwBCwsgChAXQR92DwsgBUEBaiEFDAALAAvYAQIDfwJ8IwBBEGsiBCQAIAAoAhAiAiACKwMgIAErAwAiBqE5AyAgASsDCCEFIAIgAisDECAGoTkDECACIAIrAyggBaE5AyggAiACKwMYIAWhOQMYAkAgAigCDCIDRQ0AIAMtAFFBAUcNACADIAMrAzggBqE5AzggAyADKwNAIAWhOQNAC0EBIQMDQCADIAIoArQBSkUEQCACKAK4ASADQQJ0aigCACAEIAEpAwg3AwggBCABKQMANwMAIAQQ7gkgA0EBaiEDIAAoAhAhAgwBCwsgBEEQaiQAC6ABAgN/AnwjAEEQayIDJABBASEEA0AgBCAAKAIQIgIoArQBSkUEQCACKAK4ASAEQQJ0aigCACADIAEpAwg3AwggAyABKQMANwMAIAMQ7wkgBEEBaiEEDAELCyACIAIrAyAgASsDACIGoTkDICABKwMIIQUgAiACKwMQIAahOQMQIAIgAisDKCAFoTkDKCACIAIrAxggBaE5AxggA0EQaiQAC6gBAQJ/IAAoAhAiAyADKwMgIAGiOQMgIAMgAysDKCACojkDKCADIAMrAxAgAaI5AxAgAyADKwMYIAKiOQMYAkAgAygCDCIERQ0AIAQtAFFBAUcNACAEIAQrAzggAaI5AzggBCAEKwNAIAKiOQNAC0EBIQQDQCAEIAMoArQBSkUEQCADKAK4ASAEQQJ0aigCACABIAIQ8AkgBEEBaiEEIAAoAhAhAwwBCwsLogUCCn8EfCMAQSBrIgMkACADIAAoAhAiASkDGDcDGCADIAEpAxA3AxAgAysDECILRAAAAAAAAFJAoyENIAMrAxgiDEQAAAAAAABSQKMhDiAAEBohAgNAIAIEQCACKAIQIgQoApQBIgEgASsDACANoTkDACABIAErAwggDqE5AwgCQCAEKAJ8IgFFDQAgAS0AUUEBRw0AIAEgASsDOCALoTkDOCABIAErA0AgDKE5A0ALIAAgAhAbIQIMAQsLIAAQGiEEA0AgBARAIAAgBBApIQUDQAJAIAUEQCAFKAIQIgYoAggiAUUNASABKAIEIQkgASgCACEBQQAhBwNAIAcgCUYEQAJAIAYoAmAiAUUNACABLQBRQQFHDQAgASABKwM4IAuhOQM4IAEgASsDQCAMoTkDQAsCQCAGKAJsIgFFDQAgAS0AUUEBRw0AIAEgASsDOCALoTkDOCABIAErA0AgDKE5A0ALAkAgBigCZCIBRQ0AIAEtAFFBAUcNACABIAErAzggC6E5AzggASABKwNAIAyhOQNACyAGKAJoIgFFDQMgAS0AUUEBRw0DIAEgASsDOCALoTkDOCABIAErA0AgDKE5A0AMAwsgASgCBCEKIAEoAgAhAkEAIQgDQCAIIApGBEAgASgCCARAIAEgASsDECALoTkDECABIAErAxggDKE5AxgLIAEoAgwEQCABIAErAyAgC6E5AyAgASABKwMoIAyhOQMoCyAHQQFqIQcgAUEwaiEBDAIFIAIgAisDACALoTkDACACIAIrAwggDKE5AwggCEEBaiEIIAJBEGohAgwBCwALAAsACyAAIAQQGyEEDAMLIAAgBRAsIQUMAAsACwsgAyADKQMYNwMIIAMgAykDEDcDACAAIAMQ7gkgA0EgaiQAC5ECAQR/IAFB7CVBmAJBARAuGiABKAIQIgIgACgCECIDKQMQNwMQIAIgAykDKDcDKCACIAMpAyA3AyAgAiADKQMYNwMYIAEoAhAiAiAAKAIQIgMtAJMCOgCTAiACQTBqIANBMGpBwAAQIBogASgCECAAKAIQKAK0ASICNgK0ASACQQFqQQQQGCEDIAEoAhAgAzYCuAEgAkEAIAJBAEobQQFqIQVBASECA0AgACgCECEDIAIgBUZFBEAgAkECdCIEIAMoArgBaigCABDYCCEDIAEoAhAoArgBIARqIAM2AgAgACgCECgCuAEgBGooAgAgAxDyCSACQQFqIQIMAQsLIAEoAhAgAygCDDYCDCADQQA2AgwL4wcCB38GfCMAQeAAayIGJAAgBkEIaiEDIwBBIGsiBSQAAkAgACIHQe3aABAjIgAEQCAAIANEAAAAAAAA8D9EAAAAAAAAAAAQjQUNAQsgB0Hu2gAQIyIABEAgACADRAAAAAAAAPQ/RJqZmZmZmQlAEI0FDQELIANBAToAECADQpqz5syZs+aEwAA3AwAgA0Kas+bMmbPmhMAANwMIC0GAiwstAAAEQCADLQAQIQAgAysDACEKIAUgAysDCDkDECAFIAo5AwggBSAANgIAQej6BigCAEHh5QQgBRAtCyAFQSBqJAAgBxAaIQUDQCAFBEAgByAFECkhBANAIAQEQCMAQTBrIgMkACAEKAIQIgAtAC9BAUYEQCADQQhqIgggBEEwQQAgBCgCAEEDcSIJQQNHG2ooAiggBEFQQQAgCUECRxtqKAIoIABBEGoiABDqBSAAIAhBKBAgGiAEKAIQIQALIAAtAFdBAUYEQCADQQhqIgggBEFQQQAgBCgCAEEDcSIJQQJHG2ooAiggBEEwQQAgCUEDRxtqKAIoIABBOGoiABDqBSAAIAhBKBAgGgsgA0EwaiQAIAcgBBAsIQQMAQsLIAcgBRAbIQUMAQsLQdD5B0HsyQooAgAQfyEJIAcQGiEIA0AgCARAIAcgCBApIQQDQAJAAkACQCAEBEACQEGMiwsoAgBBAkgNACAEKAIQIgAoAghFDQAgACAALwGoAUEBajsBqAEMBAsgBEEwQQAgBCgCAEEDcSIDQQNHG2ooAigiACAEQVBBACADQQJHG2ooAigiBUkEQCAEKAIQIgMrA0AhDSADKwM4IQ4gAysDGCEKIAMrAxAhCyAAIQMMAwsgBCgCECEDIAAgBUsEQCADKwNAIQogAysDOCELIAMrAxghDSADKwMQIQ4gBSEDIAAhBQwDCyADKwMYIQwgAysDQCEKIAMrAxAiDyADKwM4IgtjDQEgCyAPY0UEQCAKIAxkDQIgCiAMIAogDGMiAxshCiALIA8gAxshCwsgACIDIQUgDyEOIAwhDQwCCyAHIAgQGyEIDAULIAAiAyEFIAshDiAKIQ0gDyELIAwhCgsgBiANOQNQIAYgDjkDSCAGIAU2AkAgBiAKOQM4IAYgCzkDMCAGIAM2AiggBiAENgJYIAkgBkEgakEBIAkoAgARAwAoAjgiACAERg0AIAAoAhAiACAALwGoAUEBajsBqAEgBCgCECAAKAKwATYCsAEgACAENgKwAQsgByAEECwhBAwACwALCyAJEHkaQQEhBCAHIAZBCGogAiABEQMARQRAQcCLC0EBNgIAQQAhBAsgBkHgAGokACAEC/YGAg1/AX4jAEGgAWsiBCQAIAQgACgCECkDkAEiETcDmAEgBCARpyIFKQMINwNoIAQgBSkDADcDYCAEIAUgEUIgiKdBBHRqQRBrIgUpAwg3A1ggBCAFKQMANwNQAkAgA0UEQCACQQAgAkEAShshCEGpdyEFQal3IQYMAQtBACEDIAJBACACQQBKGyEIQal3IQVBqXchBgNAIAMgCEYNASAFQal3RgRAIAEgA0ECdGooAgApAgAhESAEQUBrIAQpA2g3AwAgBCARNwNIIAQgBCkDYDcDOCADQal3IARByABqIARBOGoQtgQbIQULIAZBqXdGBEAgASADQQJ0aigCACkCACERIAQgBCkDWDcDKCAEIBE3AzAgBCAEKQNQNwMgIANBqXcgBEEwaiAEQSBqELYEGyEGCyADQQFqIQMMAAsAC0EAIQMDQCADIAhHBEAgAyAFRiADIAZGckUEQCABIANBAnRqKAIAKAIEIAdqIQcLIANBAWohAwwBCwsgB0EgEBghCUEAIQIDQCACIAhHBEACQCACIAVGIAIgBkZyDQBBACEDIAEgAkECdGooAgAiDigCBCINQQAgDUEAShshDwNAIAMgD0YNASAJIApBBXRqIgsgDigCACIMIANBBHRqIhApAwA3AwAgCyAQKQMINwMIIAsgDCADQQFqIgNBACADIA1IG0EEdGoiDCkDADcDECALIAwpAwg3AxggCkEBaiEKDAALAAsgAkEBaiECDAELCyAHIApGBEAgBEIANwOIASAEQgA3A4ABIARCADcDeCAEQgA3A3AgBCAEKQOYATcDGAJAIAkgByAEQRhqIARB8ABqIARBkAFqEPcHQQBIBEAgAEEwQQAgACgCAEEDcUEDRxtqKAIoEB4hASAEIABBUEEAIAAoAgBBA3FBAkcbaigCKBAeNgIEIAQgATYCAEGT4QQgBBAxDAELQYCLCy0AAEECTwRAIABBMEEAIAAoAgBBA3FBA0cbaigCKBAeIQEgBCAAQVBBACAAKAIAQQNxQQJHG2ooAigQHjYCFCAEIAE2AhBB6PoGKAIAQevlAyAEQRBqEB0aCyAAIABBUEEAIAAoAgBBA3FBAkcbaigCKCAEKAKQASAEKAKUAUHo+QcQnQEgCRAXIAAQqwMLIARBoAFqJAAPC0H/6gBB8rgBQckAQcwpEAAAC/IOAhB/AnwjAEFAaiIFJAAgAUEwQQAgASgCAEEDcSIHQQNHG2ooAigoAhAiEisAECEVIAEoAhAiESsAECEUIAUgESsAGCASKwAYoDkDOCAFIBQgFaA5AzAgAUFQQQAgB0ECRxtqKAIoKAIQIhMrABAhFSARKwA4IRQgBSARKwBAIBMrABigOQMoIAUgFCAVoDkDIEGpdyEBQal3IQcgAwRAIBMoArACIQcgEigCsAIhAQsgBSAFKQM4NwMYIAUgBSkDKDcDCCAFIAUpAzA3AxAgBSAFKQMgNwMAIAAhESMAQeAAayIIJAAgCCAFKQMYNwNYIAggBSkDEDcDUCACIAEgCEHQAGoQ7w0hEiAIIAUpAwg3A0ggCCAFKQMANwNAIAIgByAIQUBrEO8NIRMgCCAFKQMYNwM4IAggBSkDEDcDMCAIIAUpAwg3AyggCCAFKQMANwMgIwBBIGsiCSQAIAIoAgQhDyAJIAgpAzg3AxggCSAIKQMwNwMQIAkgCCkDKDcDCCAJIAgpAyA3AwAjAEHAAWsiBCQAAn8CfwJAIAFBAEgEQEEAIAdBAEgNAxogAigCDCAHQQJ0aiENDAELIAdBAEgEQCACKAIMIAFBAnRqIQ0MAQsgAigCDCEAIAEgB00EQCAAIAdBAnRqIQ0gACABQQJ0aiIAKAIEIQsgACgCAAwCCyAAIAFBAnRqIQ0gACAHQQJ0aiIAKAIEIQsgACgCAAwBC0EACyEKIA0oAgQhBiANKAIACyEQIAIoAhAhDiACKAIIIQwgAigCBCEHQQAhDSAKQQAgCkEAShshAwJAA0ACQCADIA1GBEAgECALIAsgEEgbIQMDQCADIAtGBEAgBiAHIAYgB0obIQMDQCADIAZGIgoNBiAOIAZBAnRqKAIAIQEgBCAJKQMYNwM4IAQgCSkDEDcDMCAEIAkpAwg3AyggBCAJKQMANwMgIAQgDCAGQQR0aiIAKQMINwMYIAQgACkDADcDECAEIAwgAUEEdGoiACkDCDcDCCAEIAApAwA3AwAgBkEBaiEGIARBMGogBEEgaiAEQRBqIAQQswRFDQALDAULIA4gC0ECdGooAgAhASAEIAkpAxg3A3ggBCAJKQMQNwNwIAQgCSkDCDcDaCAEIAkpAwA3A2AgBCAMIAtBBHRqIgApAwg3A1ggBCAAKQMANwNQIAQgDCABQQR0aiIAKQMINwNIIAQgACkDADcDQCALQQFqIQsgBEHwAGogBEHgAGogBEHQAGogBEFAaxCzBEUNAAsMAQsgDiANQQJ0aigCACEBIAQgCSkDGDcDuAEgBCAJKQMQNwOwASAEIAkpAwg3A6gBIAQgCSkDADcDoAEgBCAMIA1BBHRqIgApAwg3A5gBIAQgACkDADcDkAEgBCAMIAFBBHRqIgApAwg3A4gBIAQgACkDADcDgAEgDUEBaiENIARBsAFqIARBoAFqIARBkAFqIARBgAFqELMERQ0BCwtBACEKCyAEQcABaiQAAkAgCgRAIA9BAmpBBBAYIgsgD0ECdGogD0EBaiIANgIAIAsgAEECdGpBfzYCAAwBCyACKAIYIgwgD0ECdGogEzYCACAMIA9BAWoiAUECdGogEjYCAEEAIQYgD0ECaiIAQQAgAEEAShshDiAAQQQQGCELIA9BA2pBCBAYIhBBCGohCgNAIAYgDkcEQCALIAZBAnRqQX82AgAgCiAGQQN0akKAgID+////70E3AwAgBkEBaiEGDAELCyAQQoCAgICAgIDwQTcDAANAIAEgD0cEQCAKIAFBA3RqIgdEAAAAAAAAAAAgBysDACIUmiAURAAAwP///9/BYRs5AwBBfyEAQQAhBgNAIAYgDkYEQCAAIQEMAwUgCiAGQQN0aiIDKwMAIhVEAAAAAAAAAABjBEACQCAMIAEgBiABIAZKG0ECdGooAgAgASAGIAEgBkgbQQN0aisDACIURAAAAAAAAAAAYQ0AIBUgFCAHKwMAoJoiFGNFDQAgAyAUOQMAIAsgBkECdGogATYCACAUIRULIAYgACAVIAogAEEDdGorAwBkGyEACyAGQQFqIQYMAQsACwALCyAQEBcLIAlBIGokACALIQwgAigCBCIBQQFqIRBBASEAIAEhBwNAIAAiA0EBaiEAIAwgB0ECdGooAgAiByAQRw0ACwJAAkACQCAAQYCAgIABSQRAQQAgACAAQRAQRiIOGw0BIA4gA0EEdGoiByAFKQMANwMAIAcgBSkDCDcDCANAIA4gA0EBayIDQQR0aiEKIBAgDCABQQJ0aigCACIBRwRAIAogAigCCCABQQR0aiIHKQMANwMAIAogBykDCDcDCAwBCwsgCiAFKQMQNwMAIAogBSkDGDcDCCADDQIgEhAXIBMQFyARIA42AgAgESAANgIEIAwQFyAIQeAAaiQADAMLIAhBEDYCBCAIIAA2AgBB6PoGKAIAQdrdAyAIEB0aECYACyAIIABBBHQ2AhBB6PoGKAIAQandAyAIQRBqEB0aECYAC0H+kwNB3bYBQfsAQfz3ABAAAAsgBUFAayQAC4IBAQF8AkAgACACKwMAIgNiBEAgAyABoiIBmiABIAIrAwhEAAAAAAAAAABmGyAAIACiIAMgA6KhnyAAoqMiAL1C////////////AINCgICAgICAgPj/AFoNASAADwtBxKcDQfK4AUGQAkHTlQEQAAALQcqyA0HyuAFBkwJB05UBEAAAC50OAgp8CX8jAEGgAWsiDSQAAkACQAJAAkACQCAAEP4CQQFrDgQAAQACBAtBCCEPQQgQTSEQIAAoAhAiDigCDCERAnwgAgRAAn8gES0AKUEIcQRAIA1BMGogERCwDiANIA0rA0giAzkDiAEgDSANKwMwIgY5A4ABIA0gAzkDeCANIA0rA0AiBTkDcCANIA0rAzgiAzkDaCANIAU5A2AgDSADOQNYIA0gBjkDUEEBIRMgDUHQAGohEkEEDAELIA4rA2ghBCAOKwNgIQYgDisDWCEHIA0gDisDcEQAAAAAAABSQKIiBUQAAAAAAADgP6IiAzkDiAEgDSADOQN4IA0gBUQAAAAAAADgv6IiAzkDaCANIAM5A1ggDSAHIAREAAAAAAAAUkCioiAHIAagoyIDOQNwIA0gAzkDYCANIAOaIgM5A4ABIA0gAzkDUEEBIRMgDUHQAGohEkEECyEPRAAAAAAAAAAAIQZEAAAAAAAAAAAMAQsgESgCCCICQQNJBEBEAAAAAAAAAAAMAQsgAEGYjQsoAgBEAAAAAAAA8D9EAAAAAAAAAAAQUyEDIBEoAiwgESgCBCIPIA9BAEcgA0QAAAAAAAAAAGRxaiIPQQFrIAJsQQAgDxtBBHRqIRIgASsDCCEGQQEhEyACIQ8gASsDAAshBSAQIA82AgQgECAPQRAQGCIUNgIAIA+4IQtBACECIA9BBEchFQNAIAIgD0YNBAJAIBMEQCABLQAQQQFGBEAgFUUEQCAFIQMgBiEEAkACQAJAAkACQCACDgQEAwABAgsgBpohBCAFmiEDDAMLIAaaIQQMAgsgDUGkAzYCBCANQfK4ATYCAEHo+gYoAgBB1rEEIA0QHRoQbgALIAWaIQMLIAQgEiACQQR0aiIOKwMIoCEEIAMgDisDAKAhAwwDCyASIAJBBHRqIg4rAwgiAyAGIA4rAwAiByADEE8iA6NEAAAAAAAA8D+goiEEIAcgBSADo0QAAAAAAADwP6CiIQMMAgsgBiASIAJBBHRqIg4rAwiiIQQgBSAOKwMAoiEDDAELIAAoAhAiDisDcEQAAAAAAABSQKIhCCAOKwNoRAAAAAAAAFJAoiEHRAAAAAAAAAAAIQZEAAAAAAAAAAAhBSABLQAQQQFGBEAgASsDCCEGIAErAwAhBQsgDSACuCIERAAAAAAAAOC/oEQYLURU+yEZQKIgC6MiAxBXIAggBqBEAAAAAAAA4D+iIgyiIgg5AzggDSADEEQgByAFoEQAAAAAAADgP6IiCaIiBzkDMCANIAREAAAAAAAA4D+gRBgtRFT7IRlAoiALoyIEEFcgDKIiAzkDmAEgDSANKQM4NwMoIA0gDSkDMDcDICANIAQQRCAJoiIEOQOQASAJIAwgDUEgahD2CSEKIA0gDSkDmAE3AxggDSANKQOQATcDECAKIAMgCiAHoiAIoSAJIAwgDUEQahD2CSIDIASioaAgCiADoaMiAyAHoaIgCKAhBAsgFCAPIAJBf3NqQQR0aiIRIAMgACgCECIOKwMQoDkDACARIAQgDisDGKA5AwggAkEBaiECDAALAAsgACgCECgCDCICKwMoIQcgAisDICEDIAIrAxghBCACKwMQIQZBCBBNIhBBBDYCBCAQQQRBEBAYIgI2AgAgASsDCCEJIAErAwAhCiAAKAIQIgArAxghCyAAKwMQIQggAS0AEEEBRgRAIAIgCCADIAqgoCIFOQMwIAIgCyAHIAmgoCIDOQMoIAIgBTkDICACIAM5AxggAiAIIAYgCqGgIgM5AxAgAiALIAQgCaGgIgQ5AwggAiADOQMADAILIAIgAyAKoiAIoCIFOQMwIAIgByAJoiALoCIDOQMoIAIgBTkDICACIAM5AxggAiAGIAqiIAigIgM5AxAgAiAEIAmiIAugIgQ5AwggAiADOQMADAELQQgQTSIQQQQ2AgQgEEEEQRAQGCICNgIAIAErAwghCCAAKAIQIgArAxghByAAKwMQIQQgACsDWJohBSABLQAQQQFGBEAgACsDUCEDIAIgBCAFIAErAwAiBaGgOQMAIAIgByADmiAIoaA5AwggACsDWCEDIAIgByAIIAArA1CgoDkDGCACIAQgA5ogBaGgOQMQIAArA2AhAyACIAcgCCAAKwNQoKA5AyggAiAEIAUgA6CgOQMgIAArA1AhAyACIAQgBSAAKwNgoKA5AzAgByADmiAIoaAhBAwBCyABKwMAIQYgAiAHIAArA1AgCKKhOQMIIAIgBSAGoiAEoDkDACAAKwNYIQMgAiAAKwNQIAiiIAegOQMYIAIgBCADIAaioTkDECAAKwNgIQMgAiAAKwNQIAiiIAegOQMoIAIgAyAGoiAEoDkDICAAKwNQIQMgAiAGIAArA2CiIASgOQMwIAcgAyAIoqEhBAsgAiAEOQM4CyANQaABaiQAIBAL0gICBH8BfCMAQRBrIgUkAAJAIAAoAhAuAagBIgJBAE4EQAJAIAJBAUcEQEGoiwstAABBAUcNAQsgBSAANgIMIAVBDGpBAEEBIAG3IgYgBkHo+QcQjAggACgCECgCYARAIABBMEEAIAAoAgBBA3FBA0cbaigCKBArIAAoAhAoAmAQjgILIAAQqwMMAgsgAkUNASACQQQQGCEEA0AgAiADRgRAIARBACACIAG3IgYgBkHo+QcQjAhBACEAA0AgACACRgRAIAQQFwwFCyAEIABBAnRqKAIAIgEoAhAoAmAEQCABQTBBACABKAIAQQNxQQNHG2ooAigQKyABKAIQKAJgEI4CCyABEKsDIABBAWohAAwACwAFIAQgA0ECdGogADYCACADQQFqIQMgACgCECgCsAEhAAwBCwALAAtBlpMDQfK4AUHbAUHKMRAAAAsgBUEQaiQAC68CAgd/AX0gAyABQQJ0aigCACIJKAIQIgVBAToAtAEgBUEBNgKwAUMAAIC/QwAAgD8gAkEDRhshCyAAIAFBFGxqIQhBASEFA0AgBSAIKAIAT0UEQAJAIAVBAnQiBCAIKAIQaiIGKgIAQwAAgD9bDQAgAyAIKAIEIARqKAIAIgdBAnRqKAIAKAIQIgQtALQBBEAgBiALOAIAQQEhBEEBIAAgB0EUbGoiBygCACIGIAZBAU0bIQYCQANAIAQgBkcEQCAEQQJ0IgogBygCBGooAgAgAUYNAiAEQQFqIQQMAQsLQYYwQdq3AUHcBUGhmwEQAAALIAcoAhAgCmpBgICA/Hs2AgAMAQsgBCgCsAENACAAIAcgAiADEPkJCyAFQQFqIQUMAQsLIAkoAhBBADoAtAEL/AkBIH8gABCwAkGAnApB7MkKKAIAEH8hEiAEQQJHBEAgAEECQevlAEEAEB9BAEchE0GgjQsoAgBBAEchDQsgAUEUEBghDiABQQQQGCEQQQF0IAFqIhFBBBAYIQggA0F+cSIYQQJGIBNyIhoEQCARQQQQGCEHCyANBEAgEUEEEBghCQsgGEECRyIbRQRAIBFBBBAYIQ8LQQRBACANGyEeQQRBACAaGyEfIBhBAkYiIEECdCEhIAAQGiEKAkACQANAIAoEQCASQQBBwAAgEigCABEDABogCigCECgCiAEgFEcNAiAQIBRBAnRqIAo2AgAgDiAUQRRsaiIWIA9BACAgGzYCECAWIAlBACANGyIiNgIMIBYgB0EAIBobIiM2AgggFiAINgIEIA8gIWohDyAJIB5qIQkgByAfaiEHIAhBBGohC0EBIRcgACAKEG8hBEEBIRkDQCAEBEACQCAEIARBMGsiHCAEKAIAQQNxIgZBAkYiFRsoAiggBCAEQTBqIiQgBkEDRiIGGygCKEYNACAEQQBBMCAGG2ooAigoAhAoAogBIgwgBEEAQVAgFRtqKAIoKAIQKAKIASIVIAwgFUgbISUjAEEgayIGJAAgBiAXNgIcIAYgDCAVIAwgFUobNgIYIAYgJTYCFCASIAZBDGpBASASKAIAEQMAKAIQIQwgBkEgaiQAIBcgDCIGRwRAIA0EQCAiIAZBAnRqIgwgBCgCECsDgAEgDCoCALugtjgCAAsgE0UNASAjIAZBAnRqIgYgBioCALsgBCgCECsDiAEQJLY4AgAMAQsgCyAKIAQgJCAEKAIAQQNxIgZBA0YbKAIoIgxGBH8gBCAcIAZBAkYbKAIoBSAMCygCECgCiAE2AgAgDQRAIAkgBCgCECsDgAG2OAIAIAlBBGohCQsCQAJAIBNFBEAgGw0CIAdBgICA/AM2AgAgB0EEaiEHDAELIAcgBCgCECsDiAG2OAIAIAdBBGohByAbDQELIA8CfSAEQZQ3ECMiBgRAQwAAAAAgBkGhlgEQugINARoLQwAAgD9DAACAvyAKIAQgHCAEKAIAQQNxQQJGGygCKEYbCzgCACAPQQRqIQ8LIAtBBGohCyAXQQFqIRcgHUEBaiEdIBlBAWohGQsgACAEIAoQdCEEDAELCyAWIBk2AgAgCCAUNgIAIBRBAWohFCAAIAoQGyEKIAshCAwBCwsgGEECRw0BQQAhBCABQQAgAUEAShshC0EAIQgDQCAIIAtGBEADQCAEIAtGDQQgECAEQQJ0aigCACgCECgCsAFFBEAgDiAEIAMgEBD5CQsgBEEBaiEEDAALAAUgECAIQQJ0aigCACgCECIKQQA6ALQBIApBADYCsAEgCEEBaiEIDAELAAsAC0Gv9gBB2rcBQbUGQaLAARAAAAsCQCAAELACIB1BAm0iA0YNACAOKAIEIBEgA0EBdCABaiIAQQQQYCEIIBMEQCAOKAIIIBEgAEEEEGAhBwsgDQRAIA4oAgwgESAAQQQQYCEJC0EAIQQgAUEAIAFBAEobIQsDQCAEIAtGDQEgDiAEQRRsaiIAIAg2AgQgACgCAEECdCEBIBMEQCAAIAc2AgggASAHaiEHCyANBEAgACAJNgIMIAEgCWohCQsgASAIaiEIIARBAWohBAwACwALIAIgAzYCAAJAIAUEQCAFIBA2AgAMAQsgEBAXCyASEN8CIA4LTAEDfyAAKAIQIgIgAigCtAEiBEEBaiIDNgK0ASACKAK4ASADIARBAmpBBBBgIQIgACgCECACNgK4ASACIANBAnRqIAE2AgAgARDHBAuXBwIIfwJ8IABBAhCNAiAAIABBAEHi5QBBABAfQQJBAhBQIQEgACAAQQBBouwAQQAQHyABQQIQUCEDIAAQNCgCECADOwGwASAAKAJIKAIQIghBCiAILwGwASIDIANBCk8bIgM7AbABQbyLCyADOwEAIAggASADIAEgA0gbOwGyASAAEDUhCEG02QogAEEBQY4rQQAQHzYCACAAQQFBnuQAQQAQHyEDIAAQGiEBA0AgAQRAIAEQjARBtNkKKAIAIQQjAEHQAGsiAiQAAkAgBEUNACABKAIQKAKUASEHIAEgBBA+IgUtAABFDQAgAkEAOgBPAkBBvIsLLwEAQQNJDQAgAiAHNgIwIAIgB0EQajYCOCACIAdBCGo2AjQgAiACQc8AajYCPCAFQfy9ASACQTBqEElBA0gNACABKAIQQQE6AIcBQbyLCy8BACEFAkBBkIsLKwMARAAAAAAAAAAAZEUNAEEAIQYDQCAFIAZGDQEgByAGQQN0aiIEIAQrAwBBkIsLKwMAozkDACAGQQFqIQYMAAsACyAFQQRPBEAgASAIQQMQxwYLIAItAE9BIUcEQCADRQ0CIAEgAxA+EGpFDQILIAEoAhBBAzoAhwEMAQsgAiAHNgIgIAIgB0EIajYCJCACIAJBzwBqNgIoIAVBgL4BIAJBIGoQSUECTgRAIAEoAhBBAToAhwFBvIsLLwEAIQUCQEGQiwsrAwBEAAAAAAAAAABkRQ0AQQAhBgNAIAUgBkYNASAHIAZBA3RqIgQgBCsDAEGQiwsrAwCjOQMAIAZBAWohBgwACwALAkAgBUEDSQ0AAkBBlI0LKAIAIgRFDQAgASAEED4iBEUNACACIAJBQGs2AgAgBEHnhAEgAhBJQQFHDQAgByACKwNAIgpBkIsLKwMAIgmjIAogCUQAAAAAAAAAAGQbOQMQIAEgCEEDEMcGDAELIAEgCBDGBgsgAi0AT0EhRwRAIANFDQIgASADED4QakUNAgsgASgCEEEDOgCHAQwBCyABEB4hBCACIAU2AhQgAiAENgIQQebeAyACQRBqEDELIAJB0ABqJAAgACABEBshAQwBCwsgABAaIQMDQCADBEAgACADECkhAQNAIAEEQCABQfklQbgBQQEQLhogARCpAyABQaCNCygCAEQAAAAAAADwP0QAAAAAAADwPxBTIQkgASgCECAJOQOAASAAIAEQLCEBDAELCyAAIAMQGyEDDAELCwvNAQIEfwR8IwBBEGsiAyQAIANBATYCDAJAIAAgAiADQQxqENsGIgRBAkYNAEG02QooAgBFDQBBw4AEQQAQJwsCQCAEQQFHDQBEGC1EVPshGUAgAbciCKMhCSAAEBohAgNAIAJFDQEgBxBXIQogAigCECIFKAKUASIGIAogCKI5AwggBiAHEEQgCKI5AwAgBUEBOgCHAUG8iwsvAQBBA08EQCACIAEQxgYLIAkgB6AhByAAIAIQGyECDAALAAsgAygCDBCxByADQRBqJAAgBAubAgICfwJ8IwBB0ABrIgQkAAJAAkAgABDOAUUNACAAIAMQPiAEIARByABqNgIMIAQgBEFAazYCCCAEIARBOGo2AgQgBCAEQTBqNgIAQcuEASAEEElBBEcNACAEKwM4IgYgBCsDSCIHZARAIAQgBjkDSCAEIAc5AzgLIAQgBCkDSDcDKCAEIARBQGspAwA3AyAgBCAEKQM4NwMYIAQgBCkDMDcDECAAQewlQZgCQQEQLhogACgCECIFIAQpAxA3AxAgBSAEKQMoNwMoIAUgBCkDIDcDICAFIAQpAxg3AxggASAAEPsJIAAgAiADEP8JDAELIAAQciEAA0AgAEUNASAAIAEgAiADEP4JIAAQcSEADAALAAsgBEHQAGokAAulAQICfwJ8IwBBIGsiBCQAAkAgAUUNACAAKAIQKAIMRQ0AIAAgARA+IAQgBEEQajYCBCAEIARBGGo2AgBB04QBIAQQSUECRw0AIAQrAxghBSAEKwMQIQYgACgCECgCDCIDQQE6AFEgAyAGOQNAIAMgBTkDOAsCQCACRQ0AIAAQciEDA0AgA0UNASADIAAgASACEP4JIAMQcSEDDAALAAsgBEEgaiQAC/YCAgd/AnwgA0EIEBghByADQQgQGCEIIANBCBAYIQkgA0EIEBghCiADQQgQGCELIAMgAiADQQgQGCICEIQCIAYEQCADIAIQvAIgAyABELwCCyAAIAMgASAKEIYKIAMgAiAKIAcQhgUgAyAHIAgQhAJBACEGIAVBACAFQQBKGyEMIAVBAWshDSADIAcgBxCgASEPQQAhBQNAAkACQAJAIAUgDEYNACADIAcQhQogBGRFDQAgACADIAggCRCGCiADIAggCRCgASIORAAAAAAAAAAAYQ0AIAMgCCAPIA6jIg4gCxDgASADIAEgCyABEIUFIAUgDU4NAiADIAkgDiAJEOABIAMgByAJIAcQhgUgAyAHIAcQoAEhDiAPRAAAAAAAAAAAYg0BQc32A0EAEDFBASEGCyAHEBcgCBAXIAkQFyAKEBcgCxAXIAIQFyAGDwsgAyAIIA4gD6MgCBDgASADIAcgCCAIEIUFIA4hDwsgBUEBaiEFDAALAAs6AQJ/IABBACAAQQBKGyEAA0AgACADRkUEQCACIANBAnQiBGogASAEaioCADgCACADQQFqIQMMAQsLC0MBAn8gAEEAIABBAEobIQUDQCAEIAVGRQRAIAMgBEECdCIAaiAAIAFqKgIAIAAgAmoqAgCSOAIAIARBAWohBAwBCwsLcwEBfyAAKAIQKALAARAXIAAoAhAoAsgBEBcgACgCECgC0AEQFyAAKAIQKALYARAXIAAoAhAoAuABEBcgACgCECgCeBC6ASAAKAIQKAJ8ELoBIAAoAhAoAggiAQRAIAAgASgCBCgCBBEBAAsgAEGGJhDZAQuJAQICfwF8IAFBACABQQBKGyEGIAJBACACQQBKGyECA0BEAAAAAAAAAAAhB0EAIQEgBSAGRkUEQANAIAEgAkZFBEAgACABQQJ0aigCACAFQQN0aisDACADIAFBA3RqKwMAoiAHoCEHIAFBAWohAQwBCwsgBCAFQQN0aiAHOQMAIAVBAWohBQwBCwsLRgIBfwF8IABBACAAQQBKGyEARJpkfsUOG1HKIQMDQCAAIAJGRQRAIAMgASACQQN0aisDAJkQJCEDIAJBAWohAgwBCwsgAwuCAQIEfwF8IAFBACABQQBKGyEGA0AgBCAGRkUEQCAAIARBAnRqIQdEAAAAAAAAAAAhCEEAIQUDQCABIAVGRQRAIAcoAgAgBUECdGoqAgC7IAIgBUEDdGorAwCiIAigIQggBUEBaiEFDAELCyADIARBA3RqIAg5AwAgBEEBaiEEDAELCwuTAQIFfwF8IAFBACABQQBKGyEGA0AgBCAGRwRAIAAgBEEUbGoiBSgCACEHQQAhAUQAAAAAAAAAACEJA0AgASAHRgRAIAMgBEEDdGogCTkDACAEQQFqIQQMAwUgAUECdCIIIAUoAghqKgIAuyACIAUoAgQgCGooAgBBA3RqKwMAoiAJoCEJIAFBAWohAQwBCwALAAsLC6YCAgp/AXwgAiADbEEUEBghBSAEIAJBBBAYIgY2AgBBACEEIAJBACACQQBKGyEHA0AgBCAHRgRAQQAhAiADQQAgA0EAShshBQNAIAIgB0ZFBEAgBiACQQJ0aiEIIAAgAkEUbGoiAygCACEJIAMoAgghCiADKAIEIQtBACEDA0AgAyAFRwRAIAEgA0ECdCIMaiENQQAhBEQAAAAAAAAAACEPA0AgBCAJRgRAIAgoAgAgDGogD7Y4AgAgA0EBaiEDDAMFIAogBEECdCIOaioCALsgDSgCACALIA5qKAIAQQN0aisDAKIgD6AhDyAEQQFqIQQMAQsACwALCyACQQFqIQIMAQsLBSAGIARBAnRqIAU2AgAgBEEBaiEEIAUgA0ECdGohBQwBCwsLjAECBH8BfCABQQAgAUEAShshBiACQQAgAkEAShshAgNAIAUgBkZFBEAgACAFQQJ0aiEHRAAAAAAAAAAAIQlBACEBA0AgASACRkUEQCABQQN0IgggBygCAGorAwAgAyAIaisDAKIgCaAhCSABQQFqIQEMAQsLIAQgBUEDdGogCTkDACAFQQFqIQUMAQsLC48CAQR/IAAoAhAoAsABIQQDQCAEIgEEQCABKAIQIgQoAsQBIQIgBCgCuAEhBANAIAIEQCABKAIQKALAASACQQFrIgJBAnRqKAIAIgMQ/gEgAygCEBAXIAMQFwwBBSABKAIQKALMASECA0AgAgRAIAEoAhAoAsgBIAJBAWsiAkECdGooAgAiAxD+ASADKAIQEBcgAxAXDAELCyABKAIQIgItAKwBQQFHDQMgAigCyAEQFyABKAIQKALAARAXIAEoAhAQFyABEBcMAwsACwALCyAAEBohAQNAIAEEQCAAIAEQKSECA0AgAgRAIAIQygIgACACECwhAgwBCwsgARCDCiAAIAEQGyEBDAELCyAAEN0GC8gGAgt/AnwgAiABIAEgAkobIgpBACAKQQBKGyEHIAFBACABQQBKGyEOIAFBAWshCSABQR5sIQ8gAUEIEBghDCABQQgQGCENAkADQCAHIAhGDQEgAyAIQQJ0aigCACEGQQAhBQNAQQAhAiAFIA5HBEAgBiAFQQN0ahCmAUHkAG+3OQMAIAVBAWohBQwBCwNAIAIgCEZFBEAgBiAJIAEgAyACQQJ0aigCACIFIAYQoAGaIAUQjwQgAkEBaiECDAELC0EAIQUgBiAJEI4DIhBEu73X2d982z1jDQALIAEgBkQAAAAAAADwPyAQoyAGEOABAkADQCABIAYgDRCEAiAAIAEgASAGIAwQiQogASAMIAYQhAJBACECA0AgAiAIRkUEQCAGIAkgASADIAJBAnRqKAIAIgsgBhCgAZogCxCPBCACQQFqIQIMAQsLIAVBAWohCyAFIA9OIAYgCRCOAyIQRLu919nffNs9Y3INASABIAZEAAAAAAAA8D8gEKMgBhDgASALIQUgASAGIA0QoAEiEZlEK4cW2c737z9jDQALIAQgCEEDdGogECARojkDACAIQQFqIQgMAQsLIAghBwsgByAKIAcgCkobIQgDfyAHIAhGBH9BASAKIApBAUwbQQFrIQZBACEIA0AgBiAIIgBHBEAgBCAAQQN0aiIHKwMAIRAgAEEBaiIIIQIgACEFA0AgAiAKTkUEQCAEIAJBA3RqKwMAIhEgECAQIBFjIgkbIRAgAiAFIAkbIQUgAkEBaiECDAELCyAAIAVGDQEgASADIABBAnRqKAIAIgAgDBCEAiABIAMgBUECdGoiAigCACAAEIQCIAEgDCACKAIAEIQCIAQgBUEDdGogBysDADkDACAHIBA5AwAMAQsLIAwQFyANEBcgCyAPTAUgAyAHQQJ0aigCACEAQQAhAkEAIQUDQCAFIA5GRQRAIAAgBUEDdGoQpgFB5ABvtzkDACAFQQFqIQUMAQsLA0AgAiAHRkUEQCAAIAkgASADIAJBAnRqKAIAIgUgABCgAZogBRCPBCACQQFqIQIMAQsLIAEgAEQAAAAAAADwPyAAIAkQjgOjIAAQ4AEgBCAHQQN0akIANwMAIAdBAWohBwwBCwsLhQwCEH8CfEGAiwstAAAEQEG17wBBGUEBQej6BigCABBKGgsgAEEAIABBAEobIQYDQCADIAZHBEAgASADQQJ0aiEFQQAhBEQAAAAAAAAAACETA0AgACAERwRAIAMgBEcEQCATIAUoAgAgBEEDdGorAwCgIRMLIARBAWohBAwBCwsgBSgCACADQQN0aiATmjkDACADQQFqIQMMAQsLIABBAWshA0EAIQRBACEFIwBBIGsiDCQAAkACf0Go2QooAgAiAARAIAAQ1QILQajZCiADIANEAAAAAAAAAAAQ1gI2AgBBrNkKKAIAEBdBrNkKIANBBBAYNgIAQbDZCigCABAXQbDZCiADQQgQGCIKNgIAIANBACADQQBKGyEIQazZCigCACEGQajZCigCACEJAkACQANAIAQgCEYNASAJIARBAnQiB2ohDSABIAdqIQtEAAAAAAAAAAAhE0EAIQADQCAAIANHBEAgAEEDdCIPIA0oAgBqIAsoAgAgD2orAwAiFDkDACAAQQFqIQAgEyAUmRAkIRMMAQsLIBNEAAAAAAAAAABkBEAgCiAEQQN0akQAAAAAAADwPyATozkDACAGIAdqIAQ2AgAgBEEBaiEEDAELCyAKIARBA3RqQgA3AwAMAQtBACEBIANBAWsiCEEAIAhBAEobIQ1BACEEA0AgASANRwRAIAMgASABIANIGyEHRAAAAAAAAAAAIRMgASEAA0AgACAHRwRAIAkgBiAAQQJ0aigCACILQQJ0aigCACABQQN0aisDAJkgCiALQQN0aisDAKIiFCATIBMgFGMiCxshEyAAIAQgCxshBCAAQQFqIQAMAQsLIBNEAAAAAAAAAABlDQIgASAERwRAIAYgAUECdGoiACgCACEHIAAgBiAEQQJ0aiIAKAIANgIAIAAgBzYCAAsgCSAGIAFBAnRqKAIAQQJ0aigCACILIAFBA3QiD2orAwAhEyABQQFqIgEhBwNAIAMgB0wNAiAJIAYgB0ECdGooAgBBAnRqKAIAIhAgD2oiACAAKwMAIBOjIhQ5AwAgFJohFCABIQADQCAAIANIBEAgECAAQQN0IhFqIhIgFCALIBFqKwMAoiASKwMAoDkDACAAQQFqIQAMAQsLIAdBAWohBwwACwALCyAJIAYgCEECdGooAgBBAnRqKAIAIAhBA3RqKwMARAAAAAAAAAAAYgwBC0EAC0UNAAJAIANBgICAgAJJBEBBACADIANBCBBGIgQbDQEDQEEAIQAgAyAFRwRAA0AgACADRwRAIAQgAEEDdGpCADcDACAAQQFqIQAMAQsLIAQgBUEDdGpCgICAgICAgPg/NwMAIAIgBUECdGooAgAhBkEAIQEgA0EAIANBAEobIQpBrNkKKAIAIQdBqNkKKAIAIQkDfyABIApGBH8gAwUgCSAHIAFBAnRqKAIAIghBAnRqIQ5EAAAAAAAAAAAhE0EAIQADQCAAIAFHBEAgAEEDdCINIA4oAgBqKwMAIAYgDWorAwCiIBOgIRMgAEEBaiEADAELCyAGIAFBA3RqIAQgCEEDdGorAwAgE6E5AwAgAUEBaiEBDAELCyEAA0ACQAJAIABBAEoEQCAHIABBAWsiAUECdGohCkQAAAAAAAAAACETA0AgACADTg0CIABBA3QiCCAJIAooAgBBAnRqKAIAaisDACAGIAhqKwMAoiAToCETIABBAWohAAwACwALDAELIAYgAUEDdCIAaiIIIAgrAwAgE6EgCSAKKAIAQQJ0aigCACAAaisDAKM5AwAgASEADAELCyAFQQFqIQUMAQsLIAQQF0EAIQVBASEOA0AgAyAFRg0DIAIgBUECdGohAUEAIQADQCAAIAVHBEAgASgCACAAQQN0aiIEKwMAIRMgBCACIABBAnRqKAIAIAVBA3RqIgQrAwA5AwAgBCATOQMAIABBAWohAAwBCwsgBUEBaiEFDAALAAsgDEEINgIEIAwgAzYCAEHo+gYoAgBB2t0DIAwQHRoQJgALIAwgA0EDdDYCEEHo+gYoAgBBqd0DIAxBEGoQHRoQJgALIAxBIGokACAOCyAAIAAEQCAAKAIEEBcgACgCCBAXIAAoAhAQFyAAEBcLCy0BAnxBfyACIAAoAgBBA3RqKwMAIgMgAiABKAIAQQN0aisDACIEZCADIARjGwtdAEGg2QooAgBBpNkKKAIAckUEQEGk2QogAzYCAEGg2QogAjYCACABQQJPBEAgACABQQRBNhCUAQtBpNkKQQA2AgBBoNkKQQA2AgAPC0HJpQNBufsAQSdBgxoQAAALXgICfwJ8IAFBACABQQBKGyEBIANBA3QhAyACQQN0IQIDQCABIARGRQRAIAAgBEECdGooAgAiBSACaisDACADIAVqKwMAoSIHIAeiIAagIQYgBEEBaiEEDAELCyAGnwt3AQV/IAFBACABQQBKGyEFIAEgAWwQtwEhBiABELcBIQQDfyADIAVGBH8DQCACIAVGRQRAIAIgACABIAQgAkECdGooAgAQkAQgAkEBaiECDAELCyAEBSAEIANBAnRqIAYgASADbEECdGo2AgAgA0EBaiEDDAELCwujBAEFfyAAEBohAQNAIAEEQCABQYYmQcACQQEQLhogARDgBSABIAEQKygCECgCdEEBcRC6BCABKAIQQQA2AsQBQQVBBBAYIQMgASgCECICQQA2AswBIAIgAzYCwAFBBUEEEBghAyABKAIQIgJBADYC3AEgAiADNgLIAUEDQQQQGCEDIAEoAhAiAkEANgLUASACIAM2AtgBQQNB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IAEgAEEBEL0CQX9HBEAgByEMIAYhDgwDCyANIAogASAAQQAQvQJBf0YiABshDiALIAggABshDAwCCyAJIQwgBSEOIAAgAUEBEL0CQX9GDQJBACEPIAshDCANIQ4gCCEHIAohBiABIABBABC9AkF/Rw0EDAILIAggC6EgBSAKoaIgCiANoSAJIAihomEEQCACIAk5AwAMAwsgAiAHOQMAIAYhBQwCCyAJIQcgBSEGCyACIAwgB6BEAAAAAAAA4D+iOQMAIA4gBqBEAAAAAAAA4D+iIQULIAMgBTkDAEEBIQ8LIA8L9gECCHwBfyAAKwMIIQMgACsDACEEIAErAwghBSABKwMAIQYCfyAAIAAoAhAiCygCBEYEQCALKAIADAELIABBGGoLIgsrAwghCCALKwMAIQcCfyABIAEoAhAiACgCBEYEQCAAKAIADAELIAFBGGoLIgArAwghCSAAKwMAIQogAkF/IAcgBKEiByAFIAOhoiAGIAShIAggA6EiBaKhIgZEAAAAAAAAAABkIAZEAAAAAAAAAABjGyIANgIAIAJBfyAHIAkgA6GiIAogBKEgBaKhIgNEAAAAAAAAAABkIANEAAAAAAAAAABjGyIBNgIEIAIgACABbDYCCAtNAQJ8An9BASAAKAIAIgArAwAiAiABKAIAIgErAwAiA2QNABpBfyACIANjDQAaQQEgACsDCCICIAErAwgiA2QNABpBf0EAIAIgA2MbCwvfDgMUfwp8AX4jAEHwAGsiAyQAIAFBACABQQBKGyESIAFBKBAYIQ8DQCACIBJGRQRAIAAgAkECdGooAgAoAgQgDGohDCACQQFqIQIMAQsLIAxBGBAYIhBBGGshBQNAIAggEkcEQCAPIAhBKGxqIgQgECAGQRhsajYCACAAIAhBAnRqKAIAIg0oAgQhCkEAIQJE////////738hFkT////////v/yEXRP///////+//IRlE////////738hGANAIAIgCkYEQCAEIBc5AyAgBCAZOQMYIAQgFjkDECAEIBg5AwggBCAFIAZBGGxqNgIEIAhBAWohCAwDBSANKAIAIAJBBHRqIgcrAwAhGiAHKwMIIRsgECAGQRhsaiIHQQA2AhQgByAENgIQIAcgGzkDCCAHIBo5AwAgAkEBaiECIAZBAWohBiAXIBsQJCEXIBkgGhAkIRkgFiAbEDIh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C0IBAnwgACABIAEoAhAoApQBIgErAwAgACgCECgClAEiACsDAKEiAiABKwMIIAArAwihIgMgAiACoiADIAOioBC8CgvyAQEGf0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEMEKIAFBAWohAQwBCwsgABAaIQIDQCACBEAgAigCECIBKALoAUUEQCABIAA2AugBCyAAIAIQKSEDA0AgAwRAAkAgAygCECgCsAEiAUUNAANAIAEgAUEwayIFIAEoAgBBA3EiBkECRhsoAigoAhAiBC0ArAFBAUcNASABIAUgBCgC6AEEfyAGBSAEIAA2AugBIAEoAgBBA3ELQQJGGygCKCgCECgCyAEoAgAiAQ0ACwsgACADECwhAwwBCwsgACACEBshAgwBCwsLNAECf0EBQRAQGCIBQQA2AgwgASAAQRQQGCICNgIAIAEgAjYCBCABIAIgAEEUbGo2AgggAQsNACAAKAIQKAKMARAXC0gBAn8gACgCECICKAKwASACLgGoASICIAJBAWoQ/wEiAyACQQJ0aiABNgIAIAAoAhAiACADNgKwASAAIAAvAagBQQFqOwGoAQsUACAAIAFBkqUBQZQCQeO2ARCFAgujAQICfwN8IAAoAhAiAigCjAEiASsDCCEDIAErAxAhBCABKwMYIQUgAiABKwMgRAAAAAAAAFJAojkDKCACIAVEAAAAAAAAUkCiOQMgIAIgBEQAAAAAAABSQKI5AxggAiADRAAAAAAAAFJAojkDEEEBIQEDQCABIAIoArQBSkUEQCACKAK4ASABQQJ0aigCABDGCiABQQFqIQEgACgCECECDAELCwvvAQIDfwJ8IAAoAhAoAowBIgIrAxAhBSACKwMIIQYCQCAAIAFGDQAgABAaIQIDQCACRQ0BIAAgAigCECIDKALoAUYEQCADKAKUASIDIAYgAysDAKA5AwAgAyAFIAMrAwigOQMICyAAIAIQGyECDAALAAtBASEDA0AgACgCECICKAK0ASADTgRAIAIoArgBIANBAnRqKAIAIQQgACABRwRAIAQoAhAoAowBIgIgBSACKwMgoDkDICACIAYgAisDGKA5AxggAiAFIAIrAxCgOQMQIAIgBiACKwMIoDkDCAsgBCABEMcKIANBAWohAwwBCwsLoUsDGH8OfAF+IwBBsAFrIggkAEGAiwstAAAEQCAIIAAQHjYCcEHo+gYoAgBBpOQDIAhB8ABqEB0aCyAAEBohAgNAIAIEQCACKAIQQQA2ArgBIAAgAhAbIQIMAQsLQYCLCy0AAEECTwRAIAEoAhAhAiAIIAAQHjYCZCAIIAI2AmBB6PoGKAIAQcHsAyAIQeAAahAdGgsgASABKAIQQQFqNgIQIAhBqMgKKAIANgJcQc6pASAIQdwAakEAEM0BIgpB7CVBmAJBARAuGkE4EE0hAiAKKAIQIAI2AowBIAAQNCECIAooAhAgAigCEC8BsAE7AbABIAAgCkGw3AAQ8AYgACAKQe7aABDwBiAAIApB09IBEPAGIAhBmAFqIQYgCEGQAWohDCAIQYgBaiEDQQEhEANAIAAoAhAiAigCtAEgEE4EQCACKAK4ASAQQQJ0aigCACILEMcEIAogCxAeEO8GIgQoAhAiAiARNgKIASACIAs2AugBAkACQCABKAIEIgJFBEBE////////738hHET////////v/yEbDAELRP///////+9/IRxE////////7/8hGyALIAIQPiIFLQAARQ0AIAsgASgCAEcEQCAFIAsoAkQgAhA+EENFDQELIAhBADoArAEgCCADNgJEIAggDDYCSCAIIAY2AkwgCCAIQawBajYCUCAIIAhBgAFqNgJAIAVB+L0BIAhBQGsQSUEETgRAIAgrA5gBIRsgCCsDkAEhHSAIKwOIASEcIAgrA4ABIRpBkIsLKwMAIh5EAAAAAAAAAABkBEAgGyAeoyEbIB0gHqMhHSAcIB6jIRwgGiAeoyEaCyAEKAIQQQNBAkEBIAgtAKwBIgJBP0YbIAJBIUYbOgCHAQwCCyALEB4hAiAIIAU2AjQgCCACNgIwQbveAyAIQTBqECcLRP///////+//IR1E////////738hGgsgEUEBaiERIAsQGiECA0AgAgRAIAIoAhAgBDYCuAEgCyACEBshAgwBCwsgBCgCECICLQCHAQRAIAIoApQBIgIgGyAcoEQAAAAAAADgP6I5AwggAiAdIBqgRAAAAAAAAOA/ojkDAAsgEEEBaiEQDAELCyAAEBohAgJ/AkADQCACBEACQCACKAIQIgwoArgBDQACQCAMKALoASIDRQ0AIAMgACgCECgCjAEoAjBGDQAgAhAeIQEgABAeIQAgCCACKAIQKALoARAeNgIoIAgg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EL0BIAYgARCwASABEC8aIAEgABDxASAHIAEQnwIgARB1GiAAEOACDAELIAIQtQshAAJAIAEEQCAKQQRqIgEgABDiAiADIAooAgQ2AAAgASAAEOECDAELIApBBGoiASAAEJoFIAMgCigCBDYAACABIAAQ8AELIAggARCfAiABEHUaIAQgABDuATYCACAFIAAQvgE2AgAgCkEEaiIBIAAQvQEgBiABELABIAEQLxogASAAEPEBIAcgARCfAiABEHUaIAAQ4AILNgIAIApBEGokAAsmAQF/IAFBADYCBCAAKAIEIgJBBGogACACGyABNgIAIAAgATYCBAujAQEDfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAAgARCHCyADQRBqIAMoAhggAygCHCACEIUMIAMoAhAhBSMAQRBrIgEkACABIAA2AgwgAUEMaiIAIAUgABCJC2sQjwchACABQRBqJAAgAyAANgIMIAMgAiADKAIUEJgDNgIIIARBCGogA0EMaiADQQhqEPQBIANBIGokACAEKAIMIARBEGokAAvWBQEKfyMAQRBrIhQkACACIAA2AgAgA0GABHEhFgNAIBVBBEYEQCANECJBAUsEQCAUIA0Q1AE2AgwgAiAUQQxqQQEQjwcgDRDmAiACKAIAELILNgIACyADQbABcSIDQRBHBEAgASADQSBGBH8gAigCAAUgAAs2AgALIBRBEGokAAUCQAJAAkACQAJAAkAgCCAVai0AAA4FAAEDAgQFCyABIAIoAgA2AgAMBAsgASACKAIANgIAIAZBIBCZASEPIAIgAigCACIQQQFqNgIAIBAgDzoAAAwDCyANEO8BDQIgDUEAEDwtAAAhDyACIAIoAgAiEEEBajYCACAQIA86AAAMAgsgDBDvASAWRXINASACIAwQ1AEgDBDmAiACKAIAELILNgIADAELIAIoAgAgBCAHaiIEIREDQAJAIAUgEU0NACAGQcAAIBEsAAAQ9gFFDQAgEUEBaiERDAELCyAOIg9BAEoEQANAIA9FIAQgEU9yRQRAIA9BAWshDyARQQFrIhEtAAAhECACIAIoAgAiEkEBajYCACASIBA6AAAMAQsLIA8EfyAGQTAQmQEFQQALIRIDQCACIAIoAgAiEEEBajYCACAPQQBKBEAgECASOgAAIA9BAWshDwwBCwsgECAJOgAACwJAIAQg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BQRAIAZBDWogBkEOahDICwsgAiABIAEgAigCABD8CyAGQQxqIAMgACgCABDxCyABajYCACAGQRBqJAALQgAgASACIAMgBEEEEKACIQEgAy0AAEEEcUUEQCAAIAFB0A9qIAFB7A5qIAEgAUHkAEkbIAFBxQBIG0HsDms2AgALC0AAIAIgAyAAQQhqIAAoAggoAgQRAgAiACAAQaACaiAFIARBABChBSAAayIAQZ8CTARAIAEgAEEMbUEMbzYCAAsLQAAgAiADIABBCGogACgCCCgCABECACIAIABBqAFqIAUgBEEAEKEFIABrIgBBpwFMBEAgASAAQQxtQQdvNgIACws1AQF/IAAoAhAiAS0AtQFBB0cEQCAAEK0BDwsgASgC6AEoAhAoAowCIAEoAvQBQQJ0aigCAAtCACABIAIgAyAEQQQQoQIhASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBECACIAIABBoAJqIAUgBEEAEKMFIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQIAIgAgAEGoAWogBSAEQQAQowUgAGsiAEGnAUwEQCABIABBDG1BB282AgALCwQAQQIL3gEBBX8jAEEQayIHJAAjAEEQayIDJAAgACEEAkAgAUH3////A00EQAJAIAEQlgUEQCAEIAEQygEMAQsgA0EIaiABEMcDQQFqEMYDIAMoAgwaIAQgAygCCCIAEPMBIAQgAygCDBDyASAEIAEQuAELIwBBEGsiBSQAIAUgAjYCDCAAIQIgASEGA0AgBgRAIAIgBSgCDDYCACAGQQFrIQYgAkEEaiECDAELCyAFQRBqJAAgA0EANgIEIAAgAUECdGogA0EEahDSASADQRBqJAAMAQsQvwEACyAHQRBqJAAgBAvABQEOfyMAQRBrIgskACAGEMABIQogC0EEaiAGEM4DIg4QvQEgBSADNgIAAkACQCAAIgctAAAiBkEraw4DAAEAAQsgCiAGwBDIASEGIAUgBSgCACIIQQRqNgIAIAggBjYCACAAQQFqIQcLAkACQCACIAciBmtBAUwNACAGLQAAQTBHDQAgBi0AAUEgckH4AEcNACAKQTAQyAEhCCAFIAUoAgAi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IAAgAxsLDgBBACAAIABBfxDEAhsLsAEBA38CQCABIAIQ/QshBCMAQRBrIgMkACAEQff///8HTQRAAkAgBBClBQRAIAAgBBDKASAAIQUMAQsgA0EIaiAEENMDQQFqENIDIAMoAgwaIAAgAygCCCIFEPMBIAAgAygCDBDyASAAIAQQuAELA0AgASACRwRAIAUgARDJASAFQQFqIQUgAUEBaiEBDAELCyADQQA6AAcgBSADQQdqEMkBIANBEGokAAwBCxC/AQALCw8AIAAgACgCGCABajYCGAsXACAAIAI2AhwgACABNgIUIAAgATYCGAuHAQEDfwJAIABFIAFFcg0AIABBMEEAIAAoAgBBA3EiA0EDRxtqKAIoIAFBMEEAIAEoAgBBA3EiBEEDRxtqKAIoRw0AIABBUEEAIANBAkcbaigCKCABQVBBACAEQQJHG2ooAihHDQAgACgCECgCYCABKAIQKAJgRw0AIAAgARCoBEEARyECCyACC1cBAn8CQCAAKAIAIgJFDQACfyACKAIYIgMgAigCHEYEQCACIAEgAigCACgCNBEAAAwBCyACIANBBGo2AhggAyABNgIAIAELQX8QxAJFDQAgAEEANgIACwsxAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEEajYCDCABKAIACycBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASgCAAurBAEIfyMAQeAAayICJAAgAkEANgJYIAJCADcDUCACQQA2AkggAkIANwNAQYiOCyAAQQJBk7EBQQAQHzYCAEGMjgsgAEECQb7uAEEAEB8iATYCACABQYiOCygCAHIEQCACQSRqIQYgAkE0aiEHIAAQGiEEA0AgBARAIAAgBBBvIQEDQCABBEACQCABQVBBACABKAIAQQNxIgNBAkcbaigCKCIFIAEgAUEwaiIIIANBA0YbKAIoRg0AAkACQCAEIAVHDQBBiI4LKAIAIgVFDQAgASAFED4iAy0AAA0BIAEoAgBBA3EhAwsgASAIIANBA0YbKAIoIARHDQFBjI4LKAIAIgNFDQEgASADED4iAy0AAEUNASACQUBrIAEgAxCADAwBCyACQdAAaiABIAMQgAwLIAAgASAEEHQhAQwBBUEAIQEDQCACKAJUIAFNBEAgAkHQAGoQowdBACEBA0AgAigCRCABTQRAIAJBQGsQowcgACAEEBshBAwHCyACQUBrIgMgARChBygCCEECTwRAIAJBIGogAyABEKAHIAIgBigCCDYCGCACIAYpAgA3AxAgBCACQRBqEIYMCyABQQFqIQEMAAsACyACQdAAaiIDIAEQoQcoAghBAk8EQCACQTBqIAMgARCgByACIAcoAgg2AgggAiAHKQIANwMAIAQgAhCGDAsgAUEBaiEBDAALAAsACwALCyACQdAAahD7CyACQUBrEPsLCyACQeAAaiQACycBAX8CQCAAKAIAIgJFDQAgAiABEJcMQX8QxAJFDQAgAEEANgIACwtTAQN/AkBBfyAAKAJMEMQCRQRAIAAoAkwhAAwBCyAAIwBBEGsiASQAIAFBDGoiAiAAEEsgAhDBAUEgEJkBIQAgAhBIIAFBEGokACAANgJMCyAAwAsaACAAIAEgASgCAEEMaygCAGooAhg2AgAgAAsLACAAQaCuCxClAgsJACAAEKUHEBcLPQEBfyAAKAIYIgIgACgCHEYEQCAAIAEQmgMgACgCACgCNBEAAA8LIAAgAkEBajYCGCACIAE6AAAgARCaAws0AQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEBajYCDCABLAAAEJoDCyoBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASwAABCaAwsPACAAIAAoAgAoAhgRAgALCAAgACgCEEULBABBfwsIACAAEJ0HGgu+DwIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQogAkL///////8/gyELIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQgCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAIQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg1CgICAgICAwP//AFQgDUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDUKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASANhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyANQv///////z9YBEAgBUHAAmogASALIAEgCyALUCIGG3kgBkEGdK18pyIGQQ9rELEBQRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQsQEgBiAHakEQayEGIAUpA7gCIQogBSkDsAIhAwsgBUGgAmogCkKAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQmgEgBUGQAmpCACAFKQOoAn1CACAEQgAQmgEgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQmgEgBUHwAWogBEIAQgAgBSkDiAJ9QgAQmgEgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQmgEgBUHQAWogBEIAQgAgBSkD6AF9QgAQmgEgBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQmgEgBUGwAWogBEIAQgAgBSkDyAF9QgAQmgEgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQmgEgBUGQAWogA0IPhkIAIAJCABCaASAFQfAAaiACQgBCACAFKQOoASAFKQOgASINIAUpA5gBfCIEIA1UrXwgBEIBVq18fUIAEJoBIAVBgAFqQgEgBH1CACACQgAQmgEgBiAJIAhraiEGAn8gBSkDcCITQgGGIg4gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgC0KAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiINQiCIIgogECAUVq0gDiAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig4gEVStIA4gDiATQv////8PgyITIAFCP4giFyALQgGGhEL/////D4MiC358Ig5WrXwgBCAQfnwgBCATfiIRIAsgEH58Ig8gEVStQiCGIA9CIIiEfCAOIA4gD0IghnwiDlatfCAOIA4gFEL/////D4MiFCALfiIRIAIgCn58Ig8gEVStIA8gDyATIA1C/v///w+DIhF+fCIPVq18fCIOVq18IA4gBCAUfiIYIBAgEX58IgQgAiALfnwiCyAKIBN+fCIQQiCIIAsgEFatIAQgGFStIAQgC1atfHxCIIaEfCIEIA5UrXwgBCAPIAIgEX4iAiAKIBR+fCIKQiCIIAIgClatQiCGhHwiAiAPVK0gAiAQQiCGfCACVK18fCICIARUrXwiBEL/////////AFgEQCAWIBeEIRUgBUHQAGogAiAEIAMgEhCaASABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhCaASABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEJsDIAVBMGogDSAVIAZB8ABqELEBIAVBIGogAyASIAUpA0AiAiAFKQNIIgoQmgEgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIg1UrX0hASAEIA19CyEEIAVBEGogAyASQgNCABCaASAFIAMgEkIFQgAQmgEgCiACIAIgAyAEIAJCAYMiBHwiA1QgASADIARUrXwiASASViABIBJRG618IgJWrXwiBCACIAIgBEKAgICAgIDA//8AVCADIAUpAxBWIAEgBSkDGCIEViABIARRG3GtfCICVq18IgQgAiAEQoCAgICAgMD//wBUIAMgBSkDAFYgASAFKQMIIgNWIAEgA1Ebca18IgEgAlStfCAMhCEMCyAAIAE3AwAgACAMNwMIIAVB0AJqJAALwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCAB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aiQAIANBkAFqJAAgDgv7AQEFfyABEBohAwNAIAMEQCABIAMQGyEEIAMoAhAtALUBBEAgASADELQBIAQhAwwCBUEBIQIDQAJAIAAoAhAiBSgCtAEiBiACSgR/IAUoArgBIAJBAnRqKAIAIAMQqwFFDQEgACgCECgCtAEFIAYLIAJKBEAgASADELQBCyADKAIQQQA2AugBIAQhAwwECyACQQFqIQIMAAsACwALCyABEBohAANAIAAEQCABEF4gABApIQIDQCACBEAgASACQVBBACACKAIAQQNxQQJHG2ooAigQqwEEQCABIAJBARDIAhoLIAEQXiACECwhAgwBCwsgASAAEBshAAwBCwsLQwACQCAARQ0AAkACQAJAAkAgAUECag4GAAECAgQDBAsgACACPAAADwsgACACPQEADwsgACACPgIADwsgACACNwMACwsPACAAIAEgAkEAQQAQrQcLvAIAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACAkKCAkBAgMECgkKCggJBQYHCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAErAwA5AwAPCyAAIAIgAxEEAAsPCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAPCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwALNwEBfyAAKAIEIQEDQCABQX9GBEAgAEEANgIEBSAAKAIAIAFBAnRqQQA2AgAgAUEBayEBDAELCwtvAQV/IAAoAgAiAywAAEEwayIBQQlLBEBBAA8LA0BBfyEEIAJBzJmz5gBNBEBBfyABIAJBCmwiBWogASAFQf////8Hc0sbIQQLIAAgA0EBaiIFNgIAIAMsAAEgBCECIAUhA0EwayIBQQpJDQALIAIL+RICEn8BfiMAQUBqIggkACAIIAE2AjwgCEEnaiEWIAhBKGohEQJAAkACQAJAA0BBACEHA0AgASENIAcgDkH/////B3NKDQIgByAOaiEOAkACQAJAAkAgASIHLQAAIgsEQANAAkACQCALQf8BcSIBRQRAIAchAQwBCyABQSVHDQEgByELA0AgCy0AAUElRwRAIAshAQwCCyAHQQFqIQcgCy0AAiALQQJqIgEhC0ElRg0ACwsgByANayIHIA5B/////wdzIhdKDQkgAARAIAAgDSAHEKIBCyAHDQcgCCABNgI8IAFBAWohB0F/IRACQCABLAABQTBrIgpBCUsNACABLQACQSRHDQAgAUEDaiEHQQEhEiAKIRALIAggBzYCPEEAIQwCQCAHLAAAIgtBIGsiAUEfSwRAIAchCgwBCyAHIQpBASABdCIBQYnRBHFFDQADQCAIIAdBAWoiCjYCPCABIAxyIQwgBywAASILQSBrIgFBIE8NASAKIQdBASABdCIBQYnRBHENAAsLAkAgC0EqRgRAAn8CQCAKLAABQTBrIgFBCUsNACAKLQACQSRHDQACfyAARQRAIAQgAUECdGpBCjYCAEEADAELIAMgAUEDdGooAgALIQ8gCkEDaiEBQQEMAQsgEg0GIApBAWohASAARQRAIAggATYCPEEAIRJBACEPDAMLIAIgAigCACIHQQRqNgIAIAcoAgAhD0EACyESIAggATYCPCAPQQBODQFBACAPayEPIAxBgMAAciEMDAELIAhBPGoQqQwiD0EASA0KIAgoAjwhAQtBACEHQX8hCQJ/QQAgAS0AAEEuRw0AGiABLQABQSpGBEACfwJAIAEsAAJBMGsiCkEJSw0AIAEtAANBJEcNACABQQRqIQECfyAARQRAIAQgCkECdGpBCjYCAEEADAELIAMgCkEDdGooAgALDAELIBINBiABQQJqIQFBACAARQ0AGiACIAIoAgAiCkEEajYCACAKKAIACyEJIAggATYCPCAJQQBODAELIAggAUEBajYCPCAIQTxqEKkMIQkgCCgCPCEBQQELIRMDQCAHIRRBHCEKIAEiGCwAACIHQfsAa0FGSQ0LIAFBAWohASAHIBRBOmxqQb+MB2otAAAiB0EBa0EISQ0ACyAIIAE2AjwCQCAHQRtHBEAgB0UNDCAQQQBOBEAgAEUEQCAEIBBBAnRqIAc2AgAMDAsgCCADIBBBA3RqKQMANwMwDAILIABFDQggCEEwaiAHIAIgBhCnDAwBCyAQQQBODQtBACEHIABFDQgLIAAtAABBIHENCyAMQf//e3EiCyAMIAxBgMAAcRshDEEAIRBB9RIhFSARIQoCQAJAAn8CQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIBgsAAAiB0FTcSAHIAdBD3FBA0YbIAcgFBsiB0HYAGsOIQQWFhYWFhYWFhAWCQYQEBAWBhYWFhYCBQMWFgoWARYWBAALAkAgB0HBAGsOBxAWCxYQEBAACyAHQdMARg0LDBULIAgpAzAhGUH1EgwFC0EAIQcCQAJAAkACQAJAAkACQCAUQf8BcQ4IAAECAwQcBQYcCyAIKAIwIA42AgAMGwsgCCgCMCAONgIADBoLIAgoAjAgDqw3AwAMGQsgCCgCMCAOOwEADBgLIAgoAjAgDjoAAAwXCyAIKAIwIA42AgAMFgsgCCgCMCAOrDcDAAwVC0EIIAkgCUEITRshCSAMQQhyIQxB+AAhBwsgESEBIAdBIHEhCyAIKQMwIhlQRQRAA0AgAUEBayIBIBmnQQ9xQdCQB2otAAAgC3I6AAAgGUIPViAZQgSIIRkNAAsLIAEhDSAMQQhxRSAIKQMwUHINAyAHQQR2QfUSaiEVQQIhEAwDCyARIQEgCCkDMCIZUEUEQANAIAFBAWsiASAZp0EHcUEwcjoAACAZQgdWIBlCA4ghGQ0ACwsgASENIAxBCHFFDQIgCSARIAFrIgFBAWogASAJSBshCQwCCyAIKQMwIhlCAFMEQCAIQgAgGX0iGTcDMEEBIRBB9RIMAQsgDEGAEHEEQEEBIRBB9hIMAQtB9xJB9RIgDEEBcSIQGwshFSAZIBEQ2AMhDQsgEyAJQQBIcQ0RIAxB//97cSAMIBMbIQwgCCkDMCIZQgBSIAlyRQRAIBEhDUEAIQkMDgsgCSAZUCARIA1raiIBIAEgCUgbIQkMDQsgCCkDMCEZDAsLIAgoAjAiAUHPnAMgARsiDUH/////ByAJIAlB/////wdPGxC2DCIBIA1qIQogCUEATgRAIAshDCABIQkMDAsgCyEMIAEhCSAKLQAADQ8MCwsgCCkDMCIZUEUNAUIAIRkMCQsgCQRAIAgoAjAMAgtBACEHIABBICAPQQAgDBCzAQwCCyAIQQA2AgwgCCAZPgIIIAggCEEIaiIHNgIwQX8hCSAHCyELQQAhBwNAAkAgCygCACINRQ0AIAhBBGogDRCiDCINQQBIDQ8gDSAJIAdrSw0AIAtBBGohCyAHIA1qIgcgCUkNAQsLQT0hCiAHQQBIDQwgAEEgIA8gByAMELMBIAdFBEBBACEHDAELQQAhCiAIKAIwIQsDQCALKAIAIg1FDQEgCEEEaiIJIA0QogwiDSAKaiIKIAdLDQEgACAJIA0QogEgC0EEaiELIAcgCksNAAsLIABBICAPIAcgDEGAwABzELMBIA8gByAHIA9IGyEHDAgLIBMgCUEASHENCUE9IQogACAIKwMwIA8gCSAMIAcgBRFEACIHQQBODQcMCgsgBy0AASELIAdBAWohBwwACwALIAANCSASRQ0DQQEhBwNAIAQgB0ECdGooAgAiAARAIAMgB0EDdGogACACIAYQpwxBASEOIAdBAWoiB0EKRw0BDAsLCyAHQQpPBEBBASEODAoLA0AgBCAHQQJ0aigCAA0BQQEhDiAHQQFqIgdBCkcNAAsMCQtBHCEKDAYLIAggGTwAJ0EBIQkgFiENIAshDAsgCSAKIA1rIgsgCSALShsiASAQQf////8Hc0oNA0E9IQogDyABIBBqIgkgCSAPSBsiByAXSg0EIABBICAHIAkgDBCzASAAIBUgEBCiASAAQTAgByAJIAxBgIAEcxCzASAAQTAgASALQQAQswEgACANIAsQogEgAEEgIAcgCSAMQYDAAHMQswEgCCgCPCEBDAELCwtBACEODAMLQT0hCgtB5JQLIAo2AgALQX8hDgsgCEFAayQAIA4LfwIBfwF+IAC9IgNCNIinQf8PcSICQf8PRwR8IAJFBEAgASAARAAAAAAAAAAAYQR/QQAFIABEAAAAAAAA8EOiIAEQqwwhACABKAIAQUBqCzYCACAADwsgASACQf4HazYCACADQv////////+HgH+DQoCAgICAgIDwP4S/BSAACwuEAQECfyMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAgPIDSQ0BIABEAAAAAAAAAABBABCtDCEADAELIAJBgIDA/wdPBEAgACAAoSEADAELIAAgARC9ByECIAErAwAgASsDCCACQQFxEK0MIQALIAFBEGokACAAC58DAwJ8AX4CfyAAvSIFQoCAgICA/////wCDQoGAgIDwhOXyP1QiBkUEQEQYLURU+yHpPyAAmaFEB1wUMyamgTwgASABmiAFQgBZ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ACAFQTBqIAEgAkIAQgAQZyAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ggBkEBayEGIARCAYYhBCAJQgGGhCIJQoCAgICAgMAAVA0ACwsgCEGAgAJxIQcgBkEATARAIAVBQGsgBCAJQv///////z+DIAZB+ABqIAdyrUIwhoRCAEKAgICAgIDAwz8QZyAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQZyAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBnQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBnIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBnQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBnIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAtqAQJ/IAAoAhAiASABKAKIAigCECgC9AEiAiABKALoAWo2AugBIAEgAiABKALsAWo2AuwBQQEhAgNAIAIgASgCtAFKRQRAIAEoArgBIAJBAnRqKAIAELQMIAJBAWohAiAAKAIQIQEMAQsLCzwAIAAgATcDACAAIAJC////////P4MgAkKAgICAgIDA//8Ag0IwiKcgA0IwiKdBgIACcXKtQjCGhDcDCAsXAQF/IABBACABEKADIgIgAGsgASACGwvfAgEEfyABEHIhAwNAIAMEQEEHIQQCQAJAIAMQzgFFBEAgA0GO9AAQI0HQ9QdB8PUHEIgIIQQgAygCECAEOgCSAiAERQ0BCwJAIARBB0cNAEGkiwsoAgBB5ABHDQAgACADEK4MDAILIAMQGiICRQ0BIAQhBSACIQEDQCABKAIQIAU6ALUBIAMgARAbIgEEQCACIAEQ4gUaIAIoAhAtALUBIQUMAQsLAkACQAJA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QQAgASgCAEEDcUEDRxtqKAIoIgIQrQEgAkYEQCABEMEHIAMoAhAhAQwBCwtB2KEDQe26AUHUAkGaMBAAAAsgAEEAEK8IQQAhAgNAIAAoAhAiASgC3AEgAksEQCABIAEoAtgBIAJBAnRqKAIAIgE2AsABIAEhAwNAIAMEQCADKAIQIgNBADYCsAEgAygCuAEhAwwBCwsDQCABBEAgARDUDCABKAIQKAK4ASEBDAELCyACQQFqIQIMAQsLAkAgACgCECIBKALkAUUEQCABKALgAUUNAQsgABAaIQFBACEDA0AgAQRAAkAgARCtASABRw0AAkAgASgCECICKALMAQ0AIAAoAhAoAuQBIgRFIAEgBEZyDQAgASAEQQAQ2wEiAygCECICQQA2ApwBIAIgCjYCrAEgASgCECECCyACKALEAQ0AIAAoAhAoAuABIgJFIAEgAkZyDQAgAiABQQAQ2wEiAygCECICQQA2ApwBIAIgCzYCrAELIAAgARAbIQEMAQsLIANFDQAgAEEAEK8ICyAAQf3oAhAjIgEEfyAAEDUgARCoAhDRDAVB/////wcLIQJBACEBA0AgASAAKAIQIgMoAtwBSQRAIAMgAygC2AEgAUECdGooAgA2AsABIAAgAygCtAFFIAIQrwMaIAFBAWohAQwBCwsgABAaIQEgACgCECEDAkAgAQRAIANC/////3c3A+gBA0AgAQRAAkAgASABEK0BIgJGBEAgASgCECIDKAL0ASECDAELIAEoAhAiAyADKAL0ASACKAIQKAL0AWoiAjYC9AELIAIgACgCECIEKALsAUoEQCAEIAI2AuwBCyACIAQoAugBSARAIAQgAjYC6AELIAMtALUBIgNFIANBBkZyRQRAIAEQug4LIAAgARAbIQEMAQsLIAAQXiAARw0BQaSLCygCAEHkAEYEQEEBIQEDQCABIAAoAhAiAygCtAFKDQMgAygCuAEgAUECdGooAgAQtAwgAUEBaiEBDAALAAsgABBeEHIhAQNAIAFFDQIgASgCEC0AkgJBB0YEQCAAIAEQrgwLIAEQcSEBDAALAAsgA0IANwPoAQtBACECA38gACgCECIBKALcASACTQR/IAAQGgUgASABKALYASACQQJ0aigCACIBNgLAAQNAIAEEQCABKAIQQcABahCoDCABKAIQQcgBahCoDCABKAIQIgFBADYC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LQACIQACfyABLAADIgFFBEAgACAGai0AAAwBCyABIADAECgLQf8BcSIAQR5LQQEgAHRBgJzAgQRxRXINAUEbDwsgBCABNgIAC0EADwsgAUECaiECDAELC0F+C3IBAX8Cf0EAIAEoAhAiAS0ArAFBAUcNABogASgCkAIoAgAhAgNAIAIiASgCECgCeCICDQALQQAgACABQTBBACABKAIAQQNxQQNHG2ooAigQqwENABogACABQVBBACABKAIAQQNxQQJHG2ooAigQqwFFCwsEAEEAC4EBAQJ/IAJBCzYCAEEBIQMCQCABIABrQQNHDQAgAC0AACIBQfgARgR/QQAFIAFB2ABHDQFBAQshASAALQABIgRB7QBHBEAgBEHNAEcNAUEBIQELIAAtAAIiAEHsAEcEQCAAQcwARw0BQQAPC0EAIQMgAQ0AIAJBDDYCAEEBIQMLIAML5AMBBX9BASEEAkAgAiABayIFQQBMDQACQAJAAkACQAJAAkACQAJAIABByABqIgggAS0AAGotAAAiB0EFaw4UAgMEBgEBBgYGBgYGBgYGBgEFBgUACyAHQR5HDQULQRYhBgwECyAFQQFGDQQgACABIAAoAuACEQAADQMgACABIAAoAtQCEQAARQ0DQQIhBAwCCyAFQQNJDQMgACABIAAoAuQCEQAADQIgACABIAAoAtgCEQAARQ0CQQMhBAwBCyAFQQRJDQIgACABIAAoAugCEQAADQEgACABIAAoAtwCEQAARQ0BQQQhBAsgASAEaiEBA0AgAiABayIFQQBMDQNBASEEAkACQAJAIAggAS0AAGotAAAiB0ESaw4KAgQEBAEEAQEBAQALAkACQAJAIAdBBWsOAwABAgYLIAVBAUYNBiAAIAEgACgC4AIRAAANBSAAIAEgACgCyAIRAABFDQVBAiEEDAILIAVBA0kNBSAAIAEgACgC5AIRAAANBCAAIAEgACgCzAIRAABFDQRBAyEEDAELIAVBBEkNBCAAIAEgACgC6AIRAAANAyAAIAEgACgC0AIRAABFDQNBBCEECyABIARqIQEMAQsLIAFBAWohAUEcIQYLIAMgATYCACAGDwtBfg8LQX8LtAYBB38jAEEQayIHJABBASEFQX8hCAJAIAIgAWsiBEEATA0AAkACQAJAAkACQAJAAkACQCAAQcgAaiIKIAEtAABqLQAAIgZB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ECIDKAK0AUpFBEAgAygCuAEgBEECdGooAgAgASACEO8MIARBAWohBAwBCwsgAyADKwMQIAGiOQMQIAMgAysDGCACojkDGCADIAMrAyAgAaI5AyAgAyADKwMoIAKiOQMoCzsBAX9BASEEAkAgAEEBIAAoApwBIAEgAiADIAAtAOwDRUEBEKsEIgFFBEAgABDIB0UNAQsgASEECyAEC+IEAgh/BHxBASECA0AgAiAAKAIQIgMoArQBSkUEQCADKAK4ASACQQJ0aigCACABEPEMIAJBAWohAgwBCwsgABBeIQIgACgCECEDAkAgACACRgRAIAMoAuwBIQVEAADA////38EhCkQAAMD////fQSELIAMoAugBIgghBANAIAQgBUoEQCADKAK0ASIAQQAgAEEAShtBAWohAEEBIQIDQCAAIAJGDQQgCiADKAK4ASACQQJ0aigCACgCECIEKwMgRAAAAAAAACBAoCIMIAogDGQbIQogCyAEKwMQRAAAAAAAACDAoCIMIAsgDGMbIQsgAkEBaiECDAALAAUCQCADKALEASAEQQZ0aiIAKAIAIgZFDQBBASECIAAoAgQiBygCACIARQ0AA0AgACgCECIALQCsASIJRSACIAZOckUEQCAHIAJBAnRqKAIAIQAgAkEBaiECDAELCyAJDQAgBkECayECIAArAxAgACsDWKEhDCAHIAZBAnRqQQRrIQADQCAAKAIAKAIQIgAtAKwBBEAgByACQQJ0aiEAIAJBAWshAgwBCwsgCiAAKwMQIAArA2CgIg0gCiANZBshCiALIAwgCyAMYxshCwsgBEEBaiEEDAELAAsACyADKALoASEIIAMoAuwBIQUgAygChAIoAhAoAvQBtyEKIAMoAoACKAIQKAL0AbchCwsgASgCECgCxAEiACAFQQZ0aigCBCgCACgCECsDGCEMIAAgCEEGdGooAgQoAgAoAhArAxghDSADIAo5AyAgAyALOQMQIAMgDSADKwOAAaA5AyggAyAMIAMrA3ihOQMYC6UFAQZ/IwBBEGsiByQAIAcgAigCACIINgIMAn8gASAAKAKcAUYEQCAAIAg2AqgCIABBqAJqIQogAEGsAmoMAQsgACgCtAIiCkEEagshDCAKIAg2AgAgAkEANgIAAkACQANAIAcgBygCDCIINgIIIAAgASAIIAMgB0EIaiABKAIIEQYA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eCADIAApAwA3A3AgAyABKQMINwNoIAMgASkDADcDYCADQeABaiADQfAAaiADQeAAahC2AwJAIAUgAysD4AFmRQ0AIAMgACkDCDcDWCADIAApAwA3A1AgAyABKQMINwNIIAMgASkDADcDQCADQcABaiADQdAAaiADQUBrELYDIAMrA9ABIAIrAwBmRQ0AIAIrAxggAyAAKQMINwM4IAMgACkDADcDMCADIAEpAwg3AyggAyABKQMANwMgIANBoAFqIANBMGogA0EgahC2AyADKwOoAWZFDQAgAyAAKQMINwMYIAMgACkDADcDECADIAEpAwg3AwggAyABKQMANwMAIANBgAFqIANBEGogAxC2AyADKwOYASACKwMIZiEECyADQYACaiQAIAQLagICfAF/AkAgASsDECAAKwA4IgIgACsDGEQAAAAAAADgP6IiA6FmRQ0AIAErAwAgAyACoGVFDQAgASsDGCAAKwBAIgIgACsDIEQAAAAAAADgP6IiA6FmRQ0AIAErAwggAyACoGUhBAsgBAv7AgEGfyMAQRBrIgYkAAJAAkACQCAAKAIAIgMtAABBI0YEQCADLQABIgJB3wFxQdgARgRAQQIhAQNAIAFBCEYNAwJAIAEgA2otAAAiAkHBAGtB/wFxQQZJBEBBSSEFDAELIAJB4QBrQf8BcUEGSQRAQal/IQUMAQtBUCEFIAJBMGtB/wFxQQlLDQULIAIgBWoiAiAEQQR0aiEEIAFBAWohAQwACwALQQEhAQNAIAFBCEYNAiABIANqLQAAIgJBMGtB/wFxQQlLDQMgAUEBaiEBIARBCmwgAmpBMGshBAwACwALIAYgAzYCCANAIAYgATYCDCABQQhGDQMgASADaiIFLQAAIgJFBEAgAiEEDAQLIAJBO0YEQCAGQQhqQbDqBUH8AUEIQcQCEOEDIgJFDQQgBUEBaiEDIAIoAgQhBAwEBSABQQFqIQEMAQsACwALQQghAQsgAkE7RwRAQQAhBAwBCyABIANqQQFqIQMLIAAgAzYCACAGQRBqJAAgBAtjAQN/IwBBEGsiAiQAIAJBADoADyACIAA6AA4gAkEOahC7BCIEEDchACAEIQMDQCAAQQJJRQRAIAEgAywAABCeASADQQFqIQMgAEEBayEADAELCyADLQAAIAQQFyACQRBqJAALlAQBBn8jAEHwAGsiAiQA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BEQAAAAAAADgv6KgDAELIAErAxggASsDKKBEAAAAAAAA4D+iCyEEIAJBAToAUSACIAQ5A0AgAiAFOQM4C0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEOUOIAFBAWohAQwBCwsLogMCA38EfCMAQbABayICJAAgAkGgAWogACgCECIDKwMoIQYgAysDICEHIAMrAxghBSADKwMQIQgCfyABQQFrQQFNBEAgAiAGOQOIASACIAIpA4gBNwMoIAIgCDkDgAEgAiACKQOAATcDICACQZABaiACQSBqEOgBIAIgBzkDcCACQfAAagwBCyACIAU5A2ggAiACKQNoNwM4IAIgCDkDYCACIAIpA2A3AzAgAkGQAWogAkEwahDoASACIAc5A1AgBiEFIAJB0ABqCyIDQQhqIAU5AwAgAiADKQMINwMYIAIgAykDADcDECACQRBqEOgBIAAoAhAiAyACKQOQATcDECADIAIpA6gBNwMoIAMgAikDoAE3AyAgAyACKQOYATcDGCAAKAIQKAIMIgMEQCACIANBQGsiBCkDADcDCCACIAMpAzg3AwAgAkFAayACEOgBIAQgAikDSDcDACADIAIpA0A3AzgLQQEhAwNAIAMgACgCECIEKAK0AUpFBEAgBCgCuAEgA0ECdGooAgAgARDmDiADQQFqIQMMAQsLIAJBsAFqJAALSAECfyAAEIcBQRAQGCECIAAQiAEhACACIQEDQCAABEAgASAAKQMINwMAIAEgACkDEDcDCCABQRBqIQEgACgCACEADAELCyACCzQBAX9BGBBNIgIgASkDCDcDECACIAEpAwA3AwggACACQQEgACgCABEDACACRwRAIAIQFwsLIwEBfyMAQRBrIgEkACAAIAFBDmogAUEPahDsDiABQRBqJAALsQMCA38EfCMAQeAAayIFJAAgBUIANwNYIAVCADcDUCAAKAIQIgYrAxAhCgJ8QdiLCy0AAEEBRgRAQciQCysDACIJIAYrAyihIQggCSAGKwMYoQwBCyAGKwMoIQggBisDGAshCSAGKwMgIQsgBSAIOQNIIAVBQGsgCzkDACAFIAk5AzggBSAKOQMwIAVB0ABqIgdB1oMBIAVBMGoQVCAAIAEgBxCfARBoAkAgACgCECgCDCIGRQ0AIAYoAgAtAABFDQAgBisDQCEIIAUg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DAELIAIgA8AQngEgAiAELAABIgMQngEgA0UNASAEQQJqCyIELQAAIQMMAQsLIAIQIQRAIAAgASACELIDQe4AEKsICyACLQAPQf8BRgRAIAIoAgAQFwsgASABQRhqIgApAwA3AyggASAAKQMINwMwCyACQRBqJAALogIBBX8gACgCECgCwAEhAwNAIAMiASgCECgCuAEiAwRAIAAgASADQQBBABBSDQEgACABIANBAEEBEFIiBEH5JUG4AUEBEC4aIAQoAhBBADYCrAEgASgCECICKALIASACKALMASICQQFqIAJBAmpBBBBgIQUgASgCECICIAU2AsgBIAIgAigCzAEiAkEBajYCzAEgBSACQQJ0aiAENgIAIAEoAhAiASgCyAEgASgCzAFBAnRqQQA2AgAgAygCECIBKALAASABKALEASIBQQFqIAFBAmpBBBBgIQIgAygCECIBIAI2AsABIAEgASgCxAEiAUEBajYCxAEgAiABQQJ0aiAENgIAIAMoAhAiASgCwAEgASgCxAFBAnRqQQA2AgAMAQsLC9oCAQJ/IANEAADA////30FkIQVB/////wcCf0QAAAAAAADgwSADIANEAAAAAAAA4MFlGyIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsgBRshBCAAIAEgAkEAQQAQUiIFBEAgBSgCECIAIAAoAqwBIgAgBCAAIARKGzYCrAEPCyAAIAEgAkEAQQEQUiIAQfklQbgBQQEQLhogACgCECAENgKsASABKAIQIgQoAsgBIAQoAswBIgRBAWogBEECakEEEGAhBCABKAIQIgEgBDYCyAEgASABKALMASIBQQFqIgU2AswBIAQgAUECdGogADYCACAEIAVBAnRqQQA2AgAgAigCECIBKALAASABKALEASIBQQFqIAFBAmpBBBBgIQEgAigCECICIAE2AsABIAIgAigCxAEiAkEBaiIENgLEASABIAJBAnRqIAA2AgAgASAEQQJ0akEANgIAC/AHAgl/CXwjAEHwAGsiAyQAIANCADcDMCADQgA3AyggA0IANwMgIANCADcDGCABKAIEIQREAAAAAAAA8L8hDQNAAkAgBCAHRg0AIAEoAgAgB0EFdGoiBigCBEEBSw0AAkACQCAGKAIAKAIEIgYEQCAGLQAYQf8AcQ0DIAYrAxAiDEQAAAAAAAAAAGRFBEAgAisDICEMCyADIAw5AyggBigCACIGRQ0BDAILIAMgAisDICIMOQMoCyACKAIQIQYLIAMgBjYCGAJAIAdFBEAgDCENDAELIAwgDWINAQsCQCAFRQRAIAYhBQwBCyAGIAUQQw0BCyAHQQFqIQcMAQsLIAEgBCAHTSIKOgAIQQAhBkQAAAAAAAAAACENA0AgBCAGTUUEQCABKAIAIQVBACEHRAAAAAAAAAAAIQwgBkEFdCEIRAAAAAAAAAAAIQ9EAAAAAAAAAAAhEEQAAAAAAAAAACENAkACQANAIAUgCGoiBCgCBCAHTQRAAkAgBCAPOQMQIApFDQMgBg0AIAUgDDkDGCANIQwMBAsFIAMgB0E4bCIJIAQoAgBqKAIAIAIoAjAQgAE2AjgCQCABKAIAIAhqIgQoAgAgCWooAgQiBQRAIAMgBSgCGEH/AHEiBQR/IAUFIAIoAihB/wBxCyADKAIwQYB/cXI2AjAgAyAEKAIAIAlqKAIEIgQrAxAiDkQAAAAAAAAAAGQEfCAOBSACKwMgCzkDKCADIAQoAgAiBQR/IAUFIAIoAhALNgIYIAQoAgQiBQRAIAMgBTYCHAwCCyADIAIoAhQ2AhwMAQsgAyACKwMgOQMoIAMgAigCEDYCGCADIAIoAhQ2AhwgAyADKAIwQYB/cSACKAIoQf8AcXI2AjALIAMgACgCiAEiBSADQRhqQQEgBSgCABEDADYCPCADQQhqIAAgA0E4ahCLCCADKwMQIQ4gAysDCCEUIAEoAgAgCGooAgAgCWooAgAQFyADKAI4IQsgASgCACIFIAhqKAIAIAlqIgQgFDkDICAEIAs2AgAgBCADKwNIOQMQIAQgAysDUDkDGCAEIAMoAjw2AgQgBCADKAJANgIIIAQgAygCRDYCDCAOIA0gDSAOYxshDSADKwNQIg4gECAOIBBkGyEQIAMrAygiDiAMIAwgDmMbIQwgB0EBaiEHIA8gFKAhDwwBCwsgBCANOQMYIA0hDAwBCyAGRQRAIAUgDCAQoTkDGAwBCyAEIBEgDKAgE6EgEKE5AxgLIA8gEiAPIBJkGyESIAZBAWohBiARIAygIREgEyAEKwMYoCETIAEoAgQhBAwBCwsgASASOQMgIAEgDSARIARBAUYbOQMoIANB8ABqJAAL1gMBA39BASEEA0AgBCAAKAIQIgUoArQBSkUEQCAFKAK4ASAEQQJ0aigCACABIAIgAxD/DiEDIARBAWohBAwBCwsCQCAAEF4gAEYNACABQQAgAkECdBAzIQUgABAaIQIDQCACBEAgBSACKAIQKAL0AUECdGpBATYCACAAIAIQKSEBA0AgAQRAIAFBKGohBiACKAIQKAL0ASEEA0AgBCAGQVBBACABKAIAQQNxQQJHG2ooAgAoAhAoAvQBTkUEQCAFIARBAWoiBEECdGpBATYCAAwBCwsgACABECwhAQwBCwsgACACEBshAgwBCwsgACgCECIBKALoASEEA0AgBCABKALsAUoNASAFIARBAnRqKAIARQRAIANFBEAgABBeQejzAEEBEJABIQMLIANBAEEBEHMiAkGGJkHAAkEBEC4aIAIoAhAiAUKAgICAgICA8D83A2AgASAENgL0ASABQoCAgICAgIDwPzcDWCABQQE2AuwBIAFCgICAgICAgPg/NwNQIAFBADYCxAFBBUEEEBghASACKAIQIgZBADYCzAEgBiABNgLAAUEFQQQQGCEBIAIoAhAgATYCyAEgACACQQEQexogACgCECEBCyAEQQFqIQQMAAsACyADC+oPAgh/B3wjAEFAaiIEJAAgACgCVCEJAkAgACgCUCIDRQ0AIAMoAhgiA0UNACAAKAIYDQAgACADEGE2AhgLIAAvASQhAyABKwMAIQ4gASsDECENIAArA0AhCyABKwMYIg8gASsDCCIQoSAAKwNIIhGhRAAAAAAAAAAAECQhDCANIA6hIAuhRAAAAAAAAAAAECQhCwJAIANBAXFFDQAgC0QAAAAAAAAAAGQEQAJAAkACQAJAIANBBnFBAmsOAwECAAILIAEgDiARoDkDEAwCCyABIA4gC6AiDjkDACABIA0gC6A5AxAMAQsgASANIAtEAAAAAAAA4D+iIguhOQMQIAEgDiALoCIOOQMAC0QAAAAAAAAAACELCyAMRAAAAAAAAAAAZEUNACABAnwCQCADQRhxIgNBCEcEQCADQRBHDQEgESAQoAwCCyABIBAgDKAiDDkDCCARIAygDAELIAEgECAMRAAAAAAAAOA/oiIMoDkDCCAPIAyhCyIPOQMYRAAAAAAAAAAAIQwLAn8gCyALIAAoAmgiA7giC6MiDSALoqEiC0QAAAAAAADgP0QAAAAAAADgvyALRAAAAAAAAAAAZhugIguZRAAAAAAAAOBBYwRAIAuqDAELQYCAgIB4CyEFIANBAWohBiAOIAAtACG4IhCgIAAsACC3Ig6gIQsgACgCYCEHQQAhAwNAIAMgBkYEQAJ/IAwgDCAAKAJkIgO4IgyjIg0gDKKhIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAshBSADQQFqIQYgDyAQoSAOoSELIAAoAlwhB0EAIQMDQCADIAZGBEADQCAJKAIAIgMEQCADLwFWIQYgAy8BVCEHAn8gAkUEQCADLwFSIQUgAy8BUCEIQQAMAQsgACgCZCADLwFSIgUgBmpGIAdFQQN0IgggCEEEciAGGyIIQQJyIAggACgCaCADLwFQIgggB2pGG3ILIQogACgCXCAGQQN0aiIGIAVBA3RqKwMAIAAsACC3IQ8gACgCYCAHQQN0aiIFIAhBA3RqKwMAIQ0gBisDACEOIAUrAwAhDAJAIAMoAhgNACADKAJgKAIYIgVFDQAgAyAFEGE2AhgLIA+gIQsgDSAPoSEPIAIgCnEhBwJAIAMvASQiBkEBcUUNAAJAIA8gDKEgAysDQCIQoSINRAAAAAAAAAAAZEUNAAJAAkACQCAGQQZxQQJrDgMBAgACCyAMIBCgIQ8MAgsgDCANoCEMIA8gDaAhDwwBCyAPIA1EAAAAAAAA4D+iIg2hIQ8gDCANoCEMCyAOIAuhIAMrA0giEKEiDUQAAAAAAAAAAGRFDQACQCAGQRhxIgVBCEcEQCAFQRBHDQEgCyAQoCEODAILIAsgDaAhCyAOIA2gIQ4MAQsgDiANRAAAAAAAAOA/oiINoSEOIAsgDaAhCwsgCUEEaiEJIAMgDjkDSCADIA85A0AgAyALOQM4IAMgDDkDMCADIAc6ACMgBCAOIAMtACG4Ig2hIAMtACK4IhChIg45AzggBCAPIA2hIBChIg85AzAgBCALIA2gIBCgIgs5AyggBCAMIA2gIBCgIgw5AyAgAygCWCEFAkACQAJAIAMtAFxBAWsOAwACAQILIAQgBCkDODcDGCAEIAQpAzA3AxAgBCAEKQMoNwMIIAQgBCkDIDcDACAFIAQgBxCADwwDCwJAIA8gDKEgBSsDEKEiDUQAAAAAAAAAAGRFDQACQAJAIAZBBnFBAmsOAwECAAILIAQgDyANoTkDMAwBCyAEIAwgDaA5AyALAkAgDiALoSAFKwMYoSIMRAAAAAAAAAAAZEUNACAGQRhxIgNBCEcEQCADQRBHDQEgBCAOIAyhOQM4DAELIAQgCyAMoDkDKAsgBSAEKQMgNwMAIAUgBCkDODcDGCAFIAQpAzA3AxAgBSAEKQMoNwMIDAILIAUrAyghEAJAIA8gDKEgBSsDIKEiDUQAAAAAAAAAAGRFDQACQAJAAkACQCAGQQZxQQFrDgYCAQIAAgQDCyAEIA8gDaE5AzAMAwsgBCAMIA2gOQMgDAILAAsgBCAPIA1EAAAAAAAA4D+iIg+hOQMwIAQgDCAPoDkDIAsCQCAOIAuhIBChIgxEAAAAAAAAAABkRQ0AAkAgBkEYcSIGQQhHBEAgBkEQRw0BIAQgDiAMoTkDOAwCCyAEIAsgDKA5AygMAQsgBCAOIAxEAAAAAAAA4D+iIg6hOQM4IAQgCyAOoDkDKAsgBSAEKQMgNwMQIAUgBCkDODcDKCAFIAQpAzA3AyAgBSAEKQMoNwMYQewAQfIAQe4AIAMvASRBgAZxIgVBgAJGGyAFQYAERhshBSADKAJYIgYoAgQhB0EAIQMDQCADIAdGDQIgBigCACADQQV0aiIILQAIRQRAIAggBToACAsgA0EBaiEDDAALAAsLIAAgAjoAIyAAIAEpAwA3AzAgACABKQMINwM4IABBQGsgASkDEDcDACAAIAEpAxg3A0ggBEFAayQABSAHIANBA3RqIggrAwAhDCAIIAs5AwAgCyANIAygIAMgBUggA0EATnG4oCAOoKEhCyADQQFqIQMMAQsLBSAHIANBA3RqIggrAwAhESAIIAs5AwAgCyANIBGgIAMgBUggA0EATnG4oCAOoKAhCyADQQFqIQMMAQsLC8EWAhR/BHwjAEGAAWsiByQAIAEoAmwiBARAIAMgBEHQjwsQiQ8LIAEgAjYCUCABKAJUIQ0Q7AMhDhCNDyEJIA0QiAEhBANAIAQEQCAEKAIIEIgBIQIDQCACBEAgCEEBaiEIIAIoAgAhAgwBCwsgBC0ADARAIwBBEGsiAiQAIAIgBUH//wNxQQFqNgIEIAkgAkEEakEBIAkoAgARAwAaIAJBEGokAAsgBUEBaiEFIAQoAgAhBAwBCwsgASAIQQFqQQQQGCIPNgJUIA0QiAEhCwNAAkAgCwRAIBBB//8DcSIIuCEaQQAhAiALKAIIEIgBIQwDQCAMRQ0CIA8gDCgCCCIGNgIAIAYgATYCYCAGLwEkIgRBwABxRQRAIAYgAS0AJEHAAHEEfyABLQAiBUECCzoAIgsgBEEgcUUEQAJAIAEsAFgiBUEATg0AQQEhBSABLQAkQSBxRQ0AIAEtACEhBQsgBiAFOgAhCwJ/AkACQAJAIAYtAFxBAWsOAwACAQILQcAAIQQgACAGKAJYIAYgAxCBDyEKQcgADAILIAdB8ABqIAMoAjQgBigCWCIEKAIgEI4GAnwgBygCcCIFIAcoAnQiCnFBf0YEQCAHIAQoAiA2AmBBvOsEIAdB4ABqEDFBASEKRAAAAAAAAAAAIRhEAAAAAAAAAAAMAQsgAygCNCgCEEEBOgByIAq3IRhBACEKIAW3CyEZIARCADcDACAEIBg5AxggBCAZOQMQIARCADcDCEEQIQRBGAwBCyAAKAIQKAKQASAGKAJYIAMQ/g5BACEKQSAhBEEoCyAGKAJYIgVqKwMAIAYtACEgBi0AImpBAXS4IhigIRkgBCAFaisDACAYoCEYIAYtACRBAXEEQAJAQanWAyEFAkAgBi8BJiIERQ0AIAYvASgiEUUNAAJAIBggBLhkDQBEAAAAAAAAAAAhGCAZIBG4ZA0ARAAAAAAAAAAAIRkMAgtBktUDIQVEAAAAAAAAAAAhGUQAAAAAAAAAACEYIAYtAFxBA0YNAQsgBUEAECdBASEKCwsgD0EEaiEPIAYgGCAGLwEmuCIbIBggG2QbOQNAIAYgGSAGLwEouCIYIBggGWMbOQNIIAJB//8DcSEEIAYvAVBBAWshBQNAIAQgBWohAgJAA0AgAiAESARAIAQhBQwCCyAOIAK3IBoQmwhFBEAgAkEBayECDAELCyACQQFqIQQMAQsLA0ACQCAEIAYvAVBqIgIgBUoEQCAFtyEYIAghAgNAIAIgBi8BUiAIak8NAiAOIBggArgQzAIgAkEBaiECDAALAAsgBEGAgARJBEAgBiAEOwFUIAYgEDsBViACQf//A3EiESASSyEVIAYvAVIgCGoiBSATSyEWIwBBEGsiBCQAIAQgBTYCDCAJIARBDGpBgAQgCSgCABEDACAEQRBqJAAEQCAGIAYtAGRBAnI6AGQLIAogFHIhFCARIBIgFRshEiAFIBMgFhshEyAMKAIAIQwMAwtB/MkBQdy8AUGrCUHc7AAQAAALIAVBAWohBQwACwALAAsgASASNgJoIAEgEzYCZCANEHkaIAkQeRogDhDfAiABLwEkIgBBgAFxRQRAIAFBAjoAIAsgAEEgcUUEQCABQQE6ACELIAdBqMgKKAIANgJsAkACQCABKAJkIgBBAUcEQCABKAJoQQFHDQELIAEgAEEBakEIEBg2AlwgASABKAJoQQFqQQgQGCIGNgJgIAEoAlQhBANAIAQoAgAiAEUNAgJ8IAAvAVIiBUEBRgRAIAArA0gMAQsgACsDSCABLAAgQQFrIAVBAWtst6EgBbijRAAAAAAAAPA/ECQLIRgCfCAALwFQIghBAUYEQCAAKwNADAELIAArA0AgASwAIEEBayAIQQFrbLehIAi4o0QAAAAAAADwPxAkCyEZIAUgAC8BViICaiEFA0AgAiAFRwRAIAEoAlwgAkEDdGoiCSAJKwMAIBgQJDkDACACQQFqIQIMAQsLIAAvAVQiAiAIaiEAA0AgACACRwRAIAYgAkEDdGoiBSAFKwMAIBkQJDkDACACQQFqIQIMAQsLIARBBGohBAwACwALIAEgAEEBakEIEBg2AlwgASABKAJoQQFqQQgQGDYCYCAHIAcoAmw2AlxBACEFQfz9ACAHQdwAakEAEM0BIQYgByAHKAJsNgJYQY2CASAHQdgAakEAEM0BIQkgBkHsJUGYAkEBEC4aIAlB7CVBmAJBARAuGiAHQgA3A3ggB0IANwNwQQAhBEEAIQgDQCABKAJoIAhJBEBBACEIA0AgASgCZCAISQRAIAEoAlQhCANAIAgoAgAiAARAIAcgAC8BVDYCMCAHQfAAaiICQZ4XIAdBMGoQ2gEgCSACEOoBQQAQcyEEIAcgAC8BUCAALwFUajYCICACQbWyASAHQSBqENoBIAkgBCAJIAIQ6gFBABBzIAArA0AQ/Q4gByAALwFWNgIQIAJBnhcgB0EQahDaASAGIAIQ6gFBABBzIQQgByAALwFSIAAvAVZqNgIAIAJBtbIBIAcQ2gEgBiAEIAYgAhDqAUEAEHMgACsDSBD9DiAIQQRqIQgMAQsLIAdB8ABqEGYgCRD8DiAGEPwOIAZBAkH/////BxCvAxogCUECQf////8HEK8DGiAGKAIQKALAASgCECEIQQAhAkEAIQUDQCAIKAK4ASIABEAgASgCXCACQQN0aiAAKAIQIggoAvQBIgAgBWu3OQMAIAJBAWohAiAAIQUMAQsLIAkoAhAiCCgCwAEoAhAhBUEAIQJBACEEA0AgBSgCuAEiAARAIAEoAmAgAkEDdGogACgCECIFKAL0ASIAIARrtzkDACACQQFqIQIgACEEDAEFQcABIQIDQCACIAhqKAIAIgAEQCAAKAIQKALAARAXIAAoAhAoAsgBEBcgACgCECEIQbgBIQIMAQsLIAYQlQEgCRCVAQsLBSAHIAg2AkAgB0HwAGoiAEHeFiAHQUBrENoBIAYgABDqAUEBEHMiAEGGJkHAAkEBEC4aIAAoAhBBADYCxAEgASgCaEEBakEEEBghAiAAKAIQIgRBADYCzAEgBCACNgLAASABKAJoQQFqQQQQGCECIAAoAhAgAjYCyAEgBSAGIAUbKAIQQbgBQcABIAUbaiAANgIAIAhBAWohCCAAIQUMAQsLBSAHIAg2AlAgB0HwAGoiAEHeFiAHQdAAahDaASAJIAAQ6gFBARBzIgBBhiZBwAJBARAuGiAAKAIQQQA2AsQBIAEoAmRBAWpBBBAYIQIgACgCECIKQQA2AswBIAogAjYCwAEgASgCZEEBakEEEBghAiAAKAIQIAI2AsgBIAQgCSAEGygCEEG4AUHAASAEG2ogADYCACAIQQFqIQggACEEDAELCwsgASgCaCIAuEQAAAAAAADwP6AgASwAILciGKIgAS0AIUEBdLgiGqAhGSABKAJkIgS4RAAAAAAAAPA/oCEbQQAhAgNAIAAgAkYEQCAbIBiiIBqgIRhBACECA0AgAiAERgRAAkAgAS0AJEEBcUUNAEHb1gMhAgJAIAEvASYiAEUNACABLwEoIgRFDQAgGSAAuGREAAAAAAAAAAAhGUGz1QMhAgRARAAAAAAAAAAAIRgMAQsgGCAEuGREAAAAAAAAAAAhGEUNAQsgAkEAECdBASEUCyABIBkgAS8BJrgQJDkDQCABIBggAS8BKLgQJDkDSCABKAJsBEAgA0HQjwsQhQ8LIAdBgAFqJAAgFA8FIBggASgCXCACQQN0aisDAKAhGCACQQFqIQIMAQsACwAFIBkgASgCYCACQQN0aisDAKAhGSACQQFqIQIMAQsACwALIBBBAWohECALKAIAIQsMAAsACzMBAX8CQCAAQcE2ECMiAQRAIAEtAAANAQsgAEHWNhAjIgEEQCABLQAADQELQQAhAQsgAQtzAQJ/AkAgACgCBCICBEAgAiABECpFDQELIAAoAlQhAwNAIAMoAgAiAkUEQEEADwsCQCACKAIEIgBFDQAgACABECoNACACDwtBACEAIANBBGohAyACLQBcQQFGBEAgAigCWCABEIMPIQALIABFDQALCyAAC5ABAQZ/AkAgAEUNACAAKAIAIQIDQCAAKAIEIANNBEAgACgCABAXIAAQFwwCCyACKAIAIQFBACEEA0AgAigCBCAETQRAIANBAWohAyACQSBqIQIMAgUgASgCABAXAkAgASgCCCIFRQ0AIAEoAgwiBkUNACAFIAYRAQALIARBAWohBCABQThqIQEMAQsACwALAAsLQwIBfwF8IAEoAgAiAgRAIAAgAjYCEAsgASgCBCICBEAgACACNgIUCyABKwMQIgNEAAAAAAAAAABmBEAgACADOQMgCwvIDAILfwJ8IwBBMGsiBSQAQQEhAgNAIAJBAnQhBgJAA0AgAiAAKAIQIgEoArQBSw0BIAEoArgBIAZqKAIAEBpFBEBB4PoDQQAQJyAAKAIQIgcoArgBIAZqIgEgAUEEaiAHKAK0ASACa0ECdBCPARogACgCECIBIAEoArQBQQFrNgK0AQwBCwsgAkEBaiECDAELC0GAiwstAAAEQEG4kQsQqAELQdDOCiAANgIAQczOCkEAOgAAQdTOCiAAEF4QsAJBAWoiAUEEEBg2AgAgAUEEEBghAUHYzgpBCDYCAEHczgogATYCAEG4iwtBGDYCAAJAIABBpx8QIyIBRQ0AIAEQqAIiDUQAAAAAAAAAAGRFDQBB2M4KAn9EAAAAAAAA8D8gDUHYzgooAgC3oiIMIAxEAAAAAAAA8D9jGyIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAs2AgBBuIsLAn9EAAAAAAAA8D8gDUG4iwsoAgC3oiIMIAxEAAAAAAAA8D9jGyIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAs2AgALIAAoAhAiAS0AiAFBEHEEQCAAIAEoAuwBQQJqIgJBBBAYIgEgAkEAEP8OGiABEBcLIAAQ6gsgAEEBEK8IIAAQ+Q4gABCmCEHgzgogACgCECIDKALoATYCAEHkzgogAygC7AE2AgAgBUEANgIoIAVCADcDIANAIAMoAtwBIgYgBEsEQCADIAMoAtgBIARBAnRqKAIANgLAAQJAIARFDQAgAygC7AEhByADKALoASECA0AgAiAHSg0BIAMoAsQBIAJBBnRqIgYoAgAhASAGQQA2AgAgBiAGKAIEIAFBAnRqNgIEIAJBAWohAgwACwALIARBAWohBCAAQQAgBUEgahChCCAKaiEKIAAoAhAhAwwBCwsCQCAGQQFNBEAgAygC6AEhBAwBCyADKALYASEHQQAhAQNAIAYgCEYEQCADQQE2AtwBIAMgBygCADYCwAEgA0HgzgooAgAiBDYC6AEgA0HkzgooAgA2AuwBDAILIAcgCEECdGooAgAhAiABBEAgASgCECACNgK4AQsgAigCECABNgK8AQNAIAIiASgCECgCuAEiAg0ACyAIQQFqIQgMAAsAC0Ho+gYoAgAhC0EBIQkDQCAEIAMoAuwBTARAIARBBnQiCCADKALEAWoiAiACKAIIIgE2AgAgAiACKAIMIgY2AgRBACECIAFBACABQQBKGyEHA0ACQCACIAdHBEAgBiACQQJ0aigCACIBDQFBgIsLLQAABEAgABAeIQEgBSAAKAIQKALEASAIaigCADYCHCAFIAI2AhggBSAENgIUIAUgATYCECALQYziAyAFQRBqEB0aIAAoAhAhAwsgAygCxAEgCGogAjYCAAsgBEEBaiEEDAMLIAEoAhAgAjYC+AEgAkEBaiECDAALAAsLA0AgAygCtAEiASAJTgRAIAMoArgBIAlBAnRqKAIAIAVBIGoQ7g4gCmohCiAAKAIQIQMgCUEBaiEJDAELCwJAIAFBAEwNACAAQc0oECMiAQRAIAEQakUNAQsgABDxBkHMzgpBAToAACAAQQIgBUEgahChCCEKCyAFQQA2AiQgBSgCIBAXIAVBADYCKCAFQgA3AyBB3M4KKAIAIgEEQCABEBdB3M4KQQA2AgALQdTOCigCACIBBEAgARAXQdTOCkEANgIAC0EBIQIDQCAAKAIQIgQoArQBIAJOBEAgBCgCuAEgAkECdGooAgAQnAggAkEBaiECDAELCyAEKALoASEJA0BBACEGIAQoAuwBIAlOBEADQCAEKALEASAJQQZ0aiIBKAIAIAZKBEAgASgCBCAGQQJ0aigCACIHKAIQIgEgBjYC+AFBACECIAEoAtABIggEQANAIAggAkECdGooAgAiAQRAIAEoAhAtAHBBBEYEfyABELAIIAEoAhAQFyABEBcgBygCECgC0AEhCCACQQFrBSACC0EBaiECDAELCyAAKAIQIQQLIAZBAWohBgwBCwsgASgCOCIBBEAgASgCCBAXIAEQFyAAKAIQIQQLIAlBAWohCQwBCwtBgIsLLQAABEAgABAeIQAgBRCKATkDCCAFIAo2AgQgBSAANgIAIAtBvdMEIAUQLQsgBUEwaiQAC+0IAgR/BHwjAEGgAWsiAyQAIAAgASgCGCIEQe30ACAEGxBFAkAgAS0AKiIEQRhxBEAgA0IANwIoAkAgBEEQcQRAIANBpK8BNgIoDAELIARBCHFFDQAgA0HWqQE2AigLIAAgA0EoahDcAQwBCyAAIAAoAgAoAsgCENwBCyAAIAEtACG4EIACAkAgAS0AKkECcQRAIAEtACEhASADIAIpAwA3AzAgAyACKQMINwM4IAMgAikDGDcDWCADIAIpAxA3A1AgAysDMCEIIAMrA1AhCQJAIAFBAU0EQCADKwNYIQcgAysDOCEKDAELIAMgAbhEAAAAAAAA4D+iIgcgCKAiCDkDMCADIAcgAysDOKAiCjkDOCADIAkgB6EiCTkDUCADIAMrA1ggB6EiBzkDWAsgAyAHOQNoIAMgCDkDYCADIAo5A0ggAyAJOQNAIANBBDYCJCADQQQ2AiAgACADQTBqQQQgA0EgakEAEKwDDAELIAEvASRBgPgAcSIGBEAgAS0AISEBIAMgAikDCDcDSCADIAIpAwA3A0AgAyACKQMYNwNoIAMgAikDEDcDYCADKwNAIQggAysDYCEJAkAgAUEBTQRAIAMrA2ghByADKwNIIQoMAQsgAyABuEQAAAAAAADgP6IiByAIoCIIOQNAIAMgByADKwNIoCIKOQNIIAMgCSAHoSIJOQNgIAMgAysDaCAHoSIHOQNoCyADQeAAaiEFIANBQGshASADIAc5A3ggAyAIOQNwIAMgCjkDWCADIAk5A1AgA0HwAGohAiADQdAAaiEEAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAGQYAIa0EKdg4OAwIGAQ0FCQAHDAoECwgPCyAAIAFBAhA2DA4LIAAgBEECEDYMDQsgACAFQQIQNgwMCyADIAIpAwA3AzAgAyACKQMINwM4IAAgA0EwakECEDYMCwsgACABQQMQNgwKCyAAIARBAxA2DAkLIAMgASkDCDcDiAEgAyABKQMANwOAASAAIAVBAxA2DAgLIAMgAikDADcDMCADIAIpAwg3AzggACADQTBqQQMQNgwHCyAAIAFBBBA2DAYLIAMgASkDCDcDiAEgAyABKQMANwOAASAAIARBBBA2DAULIAMgASkDCDcDiAEgAyABKQMANwOAASADIAQpAwg3A5gBIAMgBCkDADcDkAEgACAFQQQQNgwECyADIAIpAwA3AzAgAyACKQMINwM4IAAgA0EwakEEEDYMAwsgACABQQIQNiAAIAVBAhA2DAILIAMgAikDADcDMCADIAIpAwg3AzggACADQTBqQQIQNiAAIARBAhA2DAELIAEtACEiAUECTwRAIAIgAbhEAAAAAAAA4D+iIgggAisDAKA5AwAgAiAIIAIrAwigOQMIIAIgAisDECAIoTkDECACIAIrAxggCKE5AxgLIAMgAikDGDcDGCADIAIpAxA3AxAgAyACKQMINwMIIAMgAikDADcDACAAIANBABCCAgsgA0GgAWokAAtnAQF/IwBBEGsiBSQAAn8gASAEIAVBCGoQywQEQCAAIAQoAgAQWCAAIAQoAgQiAUHt9AAgARsgAiAFKwMIEIUDQQNBAiADLQAAQQFxGwwBCyAAIAEQWEEBCyAAQZgeEEUgBUEQaiQAC6wBAgF/AXwCQCAAKAIQIgNFDQAgASgCAARAIAIgAzYCACAAIAEoAgA2AhAMAQsgAkEANgIACwJAIAAoAhQiA0UNACABKAIEBEAgAiADNgIEIAAgASgCBDYCFAwBCyACQQA2AgQLIAArAyAiBEQAAAAAAAAAAGYEQCABKwMQRAAAAAAAAAAAZgRAIAIgBDkDECAAIAErAxA5AyAPCyACQoCAgICAgID4v383AxALC7AFAgx/B3wjAEGAAWsiAyQAIAEoAgQiDARAIAIrACAhFCACKAAUIQcgAigAECEKIAEtAAghDSABKAIAIQ4gAisDACEQIAErAxAhFSABKwMgIREgAisDCCESIAErAxghEyABKwMoIQ8gA0IANwMYIAMgEiAPIBOgRAAAAAAAAOA/oqAgDyAToUQAAAAAAADgP6KgOQMgIABBARDoCCARIBWhRAAAAAAAAOA/oiISIBAgESAVoEQAAAAAAADgP6KgIhGgIRMgESASoSESA0AgBSAMRwRAAnwgEiAOIAVBBXRqIgQtAAgiAUHsAEYNABogAUHyAEYEQCATIAQrAxChDAELIBEgBCsDEEQAAAAAAADgv6KgCyEQIAMgAysDICAEKwMYoTkDICAEKAIAIQFBACEIA0AgBCgCBCAITQRAIAVBAWohBQwDBSADAn8CQCABKAIEIgZFBEAgAyAHNgIsIAMgCjYCKCADIBQ5AzggAygCQCEJIAchCwwBCyADIAYrAxAiDyAUIA9EAAAAAAAAAABkGzkDOCADIAYoAgAiAiAKIAIbNgIoIAMgBigCBCICIAcgAhsiCzYCLCADKAJAIQkgBigCGEH/AHEiAkUNACAJQYB/cSACcgwBCyAJQYB/cQs2AkAgACALEEUgAyABKAIANgJIIAMgA0EoajYCTCADIAErAxA5A1ggAyANBHwgASsDGAVEAAAAAAAA8D8LOQNgIAMgASgCBCgCCDYCMCADIAEoAgg2AlAgAyABKwMgOQNoIAQrAxghDyADIAMpAyA3AxAgA0HsADoAeCADIA85A3AgAyAQOQMYIAMgAykDGDcDCCAAIANBCGogA0HIAGoQlAYgCEEBaiEIIBAgASsDIKAhECABQThqIQEMAQsACwALCyAAEOYICyADQYABaiQAC4gWAgp/CHwjAEHABWsiAyQAIAMgASkDSDcD4AMgAyABQUBrKQMANwPYAyADIAEpAzg3A9ADIAMgASkDMDcDyANBASEKIAEoAgBFBEAgASgCCEEARyEKCyACKwMAIQ0gAisDCCEOIAEoAlQhBiABKAJsIgQEQCACIARBqI8LEIkPCyADIA0gAysDyAOgOQPIAyADIA0gAysD2AOgOQPYAyADIA4gAysD0AOgOQPQAyADIA4gAysD4AOgOQPgA0EBIQsCQCAKRQ0AIAAtAJgBQQRxDQAgAyADKQPgAzcD0AIgAyADKQPYAzcDyAIgAyADKQPQAzcDwAIgAyADKQPIAzcDuAIgACACIAEgA0G4AmogA0GkA2oQ8QVFIQsLAkACQAJAIAEtACpBBHENACABKAIUIgQEQCABKAIcIQggAyABLQAqOgC3AiAAIAQgCCADQbcCaiADQYAFahCIDyEEAkAgAS0AKkECcQRAIAEtACEhCCADIAMpA+ADNwOIAyADIAMpA8gDNwPgAiADIAMpA9gDNwOAAyADIAMpA9ADNwPoAiADKwPgAiEOIAMrA4ADIQ0CQCAIQQFNBEAgAysDiAMhDyADKwPoAiEQDAELIAMgCLhEAAAAAAAA4D+iIg8gDqAiDjkD4AIgAyAPIAMrA+gCoCIQOQPoAiADIA0gD6EiDTkDgAMgAyADKwOIAyAPoSIPOQOIAwsgAyAPOQOYAyADIA45A5ADIAMgEDkD+AIgAyANOQPwAiADIAMoAtwCQYCAYHFBBHIiCDYC3AIgAyAINgKwAiAAIANB4AJqQQQgA0GwAmogBBCsAwwBCyADIAMpA+ADNwOoAiADIAMpA9gDNwOgAiADIAMpA9ADNwOYAiADIAMpA8gDNwOQAiAAIANBkAJqIAQQggILIAMoAoAFEBcLA0AgBigCACIEBEAgAyAEKQNINwPQBCADIARBQGspAwA3A8gEIAMgBCkDODcDwAQgAyAEKQMwNwO4BEEBIQlBASEIIAQoAgBFBEAgBCgCCEEARyEICyACKwMIIQ0gAyACKwMAIg4gAysDuASgOQO4BCADIA4gAysDyASgOQPIBCADIA0gAysDwASgOQPABCADIA0gAysD0ASgOQPQBAJAIAhFDQAgAC0AmAFBBHENACADIAMpA9AENwOIAiADIAMpA8gENwOAAiADIAMpA8AENwP4ASADIAMpA7gENwPwASAAIAIgBCADQfABaiADQdwEahDxBUUhCQsCQCAELQAqQQRxDQAgBCgCFCIFBEAgBCgCHCEHIAMgBC0AKjoA7wEgACAFIAcgA0HvAWogA0GABWoQiA8hBQJAIAQtACpBAnEEQCAELQAhIQcgAyADKQO4BDcD8AMgAyADKQPABDcD+AMgAyADKQPQBDcDmAQgAyADKQPIBDcDkAQgAysD8AMhDiADKwOQBCENAkAgB0EBTQRAIAMrA5gEIQ8gAysD+AMhEAwBCyADIAe4RAAAAAAAAOA/oiIPIA6gIg45A/ADIAMgDyADKwP4A6AiEDkD+AMgAyANIA+hIg05A5AEIAMgAysDmAQgD6EiDzkDmAQLIAMgDzkDqAQgAyAOOQOgBCADIBA5A4gEIAMgDTkDgAQgAyADKALsA0GAgGBxQQRyIgc2AuwDIAMgBzYC6AEgACADQfADakEEIANB6AFqIAUQrAMMAQsgAyADKQPQBDcD4AEgAyADKQPIBDcD2AEgAyADKQPABDcD0AEgAyADKQO4BDcDyAEgACADQcgBaiAFEIICCyADKAKABRAXCyAELQAhBEAgAyADKQPQBDcDwAEgAyADKQPIBDcDuAEgAyADKQPABDcDsAEgAyADKQO4BDcDqAEgACAEIANBqAFqEIcPCyAEKAJYIQUCQAJAAkAgBC0AXEEBaw4DAAIBAgsgACAFIAIQiw8MAgsgBSsDECEOIAUrAxghDyACKwMAIQ0gBSsDACEQIAMgBSsDCCACKwMIIhKgIhE5A6gFIAMgECANoCIQOQOgBSADIA8gEqAiDzkDiAUgAyAOIA2gIg05A4AFIAMgETkDuAUgAyANOQOwBSADIA85A5gFIAMgEDkDkAUgBSgCJCIHRQRAIAIoAjghBwsgBSgCICIFRQ0FIAUtAABFDQYgACAFIANBgAVqQQRBASAHQcezARDjCAwBCyAAIAUgAhCKDwsgCUUEQCAAIANB3ARqEPAFCwJAIAhFDQAgAC0AmAFBBHFFDQAgAyADKQPQBDcDoAEgAyADKQPIBDcDmAEgAyADKQPABDcDkAEgAyADKQO4BDcDiAEgACACIAQgA0GIAWogA0HcBGoiBxDxBUUNACAAIAcQ8AULIAZBBGohBgwBCwsgASgCVCEIIABEAAAAAAAA8D8QgAIDQCAIKAIAIgQEQCAIQQRqIQggBC0AZEUNASAIKAIAIQkgAisDACEQIAIrAwghDSAAIAEoAhgiBkHt9AAgBhsiBhBYIAAgBhBFIA0gBCsDOKAhDyAQIAQrA0CgIRIgBCsDMCETAkAgBC0AZCIGQQFxRQ0AIAQoAmAiBSgCaCAELwFQIAQvAVRqTQ0AIA0gBCsDSKAhFAJAIAQvAVYiBkUEQCAPIAUsACAiBkECbcAiB7ciDqEhDSAHIAUtACFqtyERDAELIAUoAmQgBC8BUiAGakYEQCAPIAUsACAiBkECbcAiB7ciDqEgByAFLQAharciEaEhDQwBCyAPIAUsACAiBkECbcC3Ig6hIQ1EAAAAAAAAAAAhEQsgAyANOQOIBSADIBIgDqAiDjkDkAUgAyANIBQgEaAgD6EgBregoDkDmAUgAyADKQOIBTcDcCADIAMpA5AFNwN4IAMgAykDmAU3A4ABIAMgDjkDgAUgAyADKQOABTcDaCAAIANB6ABqQQEQggIgBC0AZCEGCyAGQQJxRQ0BIAQoAmAiBigCZCAELwFWIgcgBC8BUmpNDQEgECAToCERAkAgBC8BVCIFRQRAIBEgBiwAICIFQQJtwCIMIAYtACFqtyINoSAMtyIOoSETIAYoAmggBC8BUEYEQCANIA2gIQ0MAgsgCUUNASAJLwFWIAdGDQEgECAGKwNAoCASIA6goSANoCENDAELIAYoAmggBC8BUCAFakYEQCARIAYsACAiBUECbcAiBLciDqEhEyAEIAYtACFqtyENDAELIBEgBiwAICIFQQJtwLciDqEhE0QAAAAAAAAAACENIAlFDQAgCS8BViAHRg0AIBAgBisDQKAgEiAOoKFEAAAAAAAAAACgIQ0LIAMgDyAOoSIOOQOIBSADIA5EAAAAAAAAAACgOQOYBSADIBM5A4AFIAMgEyASIA2gIBGhIAW3oKA5A5AFIAMgAykDiAU3A1AgAyADKQOYBTcDYCADIAMpA5AFNwNYIAMgAykDgAU3A0ggACADQcgAakEBEIICDAELCyABLQAhRQ0AIANBQGsgAykD4AM3AwAgAyADKQPYAzcDOCADIAMpA9ADNwMwIAMgAykDyAM3AyggACABIANBKGoQhw8LIAtFBEAgACADQaQDahDwBQsCQCAKRQ0AIAAtAJgBQQRxRQ0AIAMgAykD4AM3AyAgAyADKQPYAzcDGCADIAMpA9ADNwMQIAMgAykDyAM3AwggACACIAEgA0EIaiADQaQDaiIHEPEFRQ0AIAAgBxDwBQsgASgCbARAIAJBqI8LEIUPCyADQcAFaiQADwtBxrIBQdy8AUH0BEH/gQEQAAALQeHEAUHcvAFB9QRB/4EBEAAAC4EBAgJ/AnwjAEEQayIBJAAgAC0ABEEBayICQf8BcUEDTwRAIAFB7QU2AgQgAUHcvAE2AgBB6PoGKAIAQdaxBCABEB0aEG4ACyAAKAIAIgAgAkECdEH8B3EiAkGEjgVqKAIAaisDACEDIAAgAkH4jQVqKAIAaisDACABQRBqJAAgA6ELDwBB0JsKQezJCigCABB/CxMAIAAoAlQQeRogABDvBSAAEBcLJQEBfwNAIAAtAAAiAUUEQEEADwsgAEEBaiEAIAFBIEYNAAtBAQswACAAEJIPAkAgABAlBEAgAEEAOgAPDAELIABBADYCBAsgABAlBH8gAAUgACgCAAsL9wEBBX8jAEEQayIEJABBKBBNIQFBkI8LKAIAIgUQhwEhAyABIAA6ABACQAJAIAMEQCABIAM2AgwgASADQTgQGCIDNgIIIAUQiAEhAANAIABFDQIgAyACQThsaiAAQQhqQTgQIBogAkEBaiECIAAoAgAhAAwACwALQTgQTSEAIAFBATYCDCABIAA2AghB5fQEEKQBIgJFDQEgACACNgIAIABBnI8LKAIAKAIANgIECyAFQQBBwAAgBSgCABEDABpBlI8LKAIAIgAgAUEBIAAoAgARAwAaIARBEGokAA8LIARBATYCAEHo+gYoAgBBqd0DIAQQHRoQJgAL0QIBBX8jAEEQayIEJAACQAJAIAAQISAAEDhPBEAgABA4IgNBAWoiASADQQF0QYAIIAMbIgIgASACSxshASAAECEhBQJAIAAtAA9B/wFGBEAgA0F/Rg0DIAAoAgAhAiABRQRAIAIQF0EAIQIMAgsgAiABED0iAkUNBCABIANNDQEgAiADakEAIAEgA2sQMxoMAQsgAUEBEBgiAiAAIAUQIBogACAFNgIECyAAQf8BOgAPIAAgATYCCCAAIAI2AgALIAAQISEBAkAgABAlBEAgACABakEAOgAAIAAgAC0AD0EBajoADyAAECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgACgCACABakEAOgAAIAAgACgCBEEBajYCBAsgBEEQaiQADwtBkbQDQd79AEHNAEGTswEQAAALIAQgATYCAEHo+gYoAgBBqd0DIAQQHRoQJgALuwEBBn9BlI8LKAIAIQFBMBBNIQJBkI8LKAIAEIcBBEBBABCRDwsgAiABEIcBIgA2AgQCQCAARQ0AIAIgAEEgEBgiBTYCACABQQBBgAEgASgCABEDACEAA0AgAEUNASAFIANBBXRqIgQgACkDCDcDACAEIAApAyA3AxggBCAAKQMYNwMQIAQgACkDEDcDCCADQQFqIQMgASAAQQggASgCABEDACEADAALAAsgAUEAQcAAIAEoAgARAwAaIAILGAEBf0EIEE0iAiAANgIAIAIgAToABCACC+oBAQR/IwBBEGsiBCQAIAEoAhBBxM4KKAIAQQFqNgKwASAABEACQCAAKAIEIgIgACgCCEcEQCAAKAIAIQMMAQsCQCAEIAJBAXRBASACGyICQf////8DSwR/QcQABSAAKAIAIAJBAnQQPSIDDQFBMAsQowE2AgBB6PoGKAIAQbv0AyAEEB0aECYACyADIAAoAggiBUECdGpBACACIAVrQQJ0EDMaIAAgAjYC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ajYCHAsCQAJAAkACQCAJQQFxBEAgABCXBiABEBohAgNAIAIEQCAAIAIQ7QMgASACEBshAgwBCwsgABCWBiAAEJUGIAEQGiEDA0AgA0UNAiABIAMQKSECA0AgAgRAIAAgAhDKBCABIAIQLCECDAELCyABIAMQGyEDDAALAAsgCUEQcQRAIAAQlQYgARAaIQMDQCADBEAgASADECkhAgNAIAIEQCAAIAIQygQgASACECwhAgwBCwsgASADEBshAwwBCwsgABDpCCAAEJcGIAEQGiECA0AgAkUNBCAAIAIQ7QMgASACEBshAgwACwALIAlBCHFFDQEgABCXBiABEBohBQNAQQEhAiAFBEACQANAIAEoAhAiAygCtAEgAk4EQCACQQJ0IAJBAWohAiADKAK4AWooAgAgBRCrAUUNAQwCCwsgACAFEO0DCyABIAUQGyEFDAELCyAAEJYGIAAQlQYgARAaIQYDQCAGRQ0BIAEgBhApIQUDQEEBIQIgBQRAAkADQCABKAIQIgMoArQBIAJOBEAgAkECdCACQQFqIQIgAygCuAFqKAIAIAUQqwFFDQEMAgsLIAAgBRDKBAsgASAFECwhBQwBCwsgASAGEBshBgwACwALIAAQ6QgMAgsgARAaIQMDQCADRQ0CIAAgAxDtAyABIAMQKSECA0AgAgRAIAAgAkFQQQAgAigCAEEDcUECRxtqKAIoEO0DIAAgAhDKBCABIAIQLCECDAELCyABIAMQGyEDDAALAAsgABCWBgsgEARAIAAgASAJEPgFCwJAIAAoAjwiAkUNACACKAIcIgJFDQAgACACEQEACyALBEAgByALNgLcAQsgBEGgAWoQZiAPEM4CEBcgDxAXIAAgACgAxAEgACgAvAFqIgKtIAAoAMgBIAAoAMABaiIDrUIghoQ3AsQBIAAQqA8NAAJAIAAoArgBIgUEQCAAKAKsASECDAELIAAoArABIQMLIAAgACgAtAEgAmoiAq0gAyAFaq1CIIaENwLEAQwACwALCwJAIAAoAjwiAUUNACABKAIMIgFFDQAgACABEQEACwJAIAAoAkwiAUUNACABKAIEIgFFDQAgACABEQEACyAAEJkGGiAAEPEDIARB4AFqJAALywECAX8CfCMAQeAAayIBJAAgASAAKQMINwNYIAEgACkDADcDUCABIAApAzg3A0ggASAAKQMw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IABBm9AEIANB8ABqEBwgA0KAgICAgICA+D83A2AgAyAIOQNYIAMgBTkDUCAAQZPGBCADQdAAahAcIANBQGsgACgC6AKyuzkDACADQgA3AzggA0IANwMwIABB78UEIANBMGoQHCADQdiHCygCADYCICADIAY5AxAgAyAHOQMYIABBjscEIANBEGoQHCADIAE2AgAgAEHjwAMgAxAcIAEQFwsgA0HgAmoQZiADQfACaiQAC+gDAgN/BnwjAEHQAWsiAyQAIAIoAgAhBCACKAIEIgUrAxAhBiADIAUoAgA2ArABIAMgBjkDqAEgAyAENgKgASAAQc7xAyADQaABahAcQdiHC0HUhwsoAgBBCWs2AgACfCABKwMAIgYgAi0AMCIEQewARg0AGiAEQfIARgRAIAYgAisDIKEMAQsgBiACKwMgRAAAAAAAAOC/oqALIQYgACsD8AMhByAAKwOABCEIIAErAwghCSAAKwPoAyEKIAArA/gDIQsgA0H4AGoiASAAKAIQQRBqQSgQIBogAUMAAAAAEIYDIQEgA0IANwPIASADQgA3A8ABIAIoAgQoAgAhBCACKAIAIQUgA0IANwNwIANCgICAgICAgOg/NwNoIAMgBTYCZCADIAQ2AmAgA0HAAWoiBEGNzwMgA0HgAGoQVCADIAIoAgQrAxAgACsD6AOiOQNQIARBxpgEIANB0ABqEFQgA0FAayAAKALoArK7OQMAIANCADcDOCADQgA3AzAgBEHvxQQgA0EwahBUIANB2IcLKAIANgIgIAMgCiAGIAugojkDECADIAcgCSAIoKI5AxggBEGOxwQgA0EQahBUIAMgATYCACAEQePAAyADEFQgACAEEOAEEBkaIAQQZiABEBcgA0HQAWokAAscACAAQeOkBBAZGkHUhwtB1IcLKAIAQQVqNgIACxwAIABB0aQEEBkaQdSHC0HUhwsoAgBBBWs2AgALCQAgACABELUNCwsAIABB/KYEEBkaCy0BAX8jAEEQayIBJAAgASAAKAIQKAIIEB42AgAgAEGl9AMgARAcIAFBEGokAAsLACAAQc36AxAZGgscACAAQbj6AxAZGkHUhwtB1IcLKAIAQQJrNgIACwsAIABBsqYEEBkaCwsAIABBoKYEEBkaCwsAIABBxfkDEBkaCz8BAX8jAEEQayIEJAAgBCADNgIIIAQgATYCACAE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AGtBGUsNAEEAIQEgBEGhlgEQKkUNACAEQfqTARAqRQ0AQQEhASAEQdnxABAqRQ0AIARB34oBECpFDQAgBEGKLhAqRQ0AQQFBAiAEQf4ZECobIQELIAIgATYCPCAAQdENECMQaiEBIAIgAi0ALEH7AXFBBEEAIAEbcjoALCACIABB/vIAECNBARCKCDoAOCACIAAgAEEAQc/iAEEAEB9EAAAAAAAAAABE////////7/8QUzkDSCACIAAgAEEAQf2XAUEAEB9BAEEAEFAiATYCUCABQQVOBEAgAyABNgIgQfyJBCADQSBqECcgAkEANgJQCyAAIANB6ABqELEKIANCnI7H4/G4nNY/NwNgIANCnI7H4/G4nNY/NwNYAkAgAygCaEESRyAFQQJHckUEQCACIAMoAnA2AjQgAiADKwN4OQNAIANBMGogABDdAkEBIQYgAy0AQEEBcUUNASADKwMwIQggAyADKwM4RAAAAAAAAFJAozkDYCADIAhEAAAAAAAAUkCjOQNYDAELIAJBfzYCNCAFQQJHIQYLQYCLCy0AAARAIwBB4AFrIgEkAEGMzARBG0EBQej6BigCACIEEEoaIAEgAisDADkD0AEgBEHtlwQgAUHQAWoQLSACLQAsIQUgASACKAIoNgLEASABIAVBAXE2AsABIARBm7gEIAFBwAFqEB0aIAIrAwghCCABQpqz5syZs+bkPzcDuAEgASAIOQOwASAEQYqYBCABQbABahAtIAEgAigCEDYCoAEgBEGntAQgAUGgAWoQHRogASACKAIUNgKUASABQS02ApABIARBk7UEIAFBkAFqEB0aIAEgAigCGDYCgAEgAUL808aX3cmYqD83A3ggAUKz5syZs+bM8T83A3AgBEHAtAQgAUHwAGoQLSACKwMgIQggASACLQAsQQF2QQFxNgJgIAEgCDkDWCABQs2Zs+bMmbP2PzcDUCAEQdi2BCABQdAAahAtIAItACwhBSABIAIrA0g5A0ggAUEANgJEIAEgBUECdkEBcTYCQCAEQbiXBCABQUBrEC0gAigCMCEFIAIoAjQhByACKwNAIQggASACLQA4NgIwIAEgCDkDKCABIAc2AiQgASAFQQJ0QYD3BGooAgA2AiAgBEGXtgQgAUEgahAtIAEgAigCPEECdEGg9wRqKAIANgIQIARBgu4DIAFBEGoQHRogASAC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KAIsIgZKDQBBASECIAAoAigiByABKAIgIghIDQAgACgCDCABKAIMayABKAIoIAcgCCAAKAIgamtqQQJtaiAEIAZqIAMgBWprQQJtIAEoAhAiASAAKAIQIgBrIAAgAWsgACABShtqTCECCyACCyABAX8gACgCICABKAIoTAR/IAEoAiAgACgCKEwFQQALCyABAX8gACgCJCABKAIsTAR/IAEoAiQgACgCLEwFQQALC0gBAnwCf0F/IAAoAgAiACsDCCICIAEoAgAiASsDCCIDYw0AGkEBIAIgA2QNABpBfyAAKwMAIgIgASsDACIDYw0AGiACIANkCwtOAQJ/IAAQGiIBBEADQCABBEAgACABECkhAgNAIAIEQCACEMoCIAAgAhAsIQIMAQsLIAEQ/AIgACABEBshAQwBCwsgACgCECgCmAEQFwsL1wYCCX8BfCMAQdAAayICJAAgABA1BEAgACIBQQIQjQIgABA0KAIQQQI7AbABQbyLC0ECOwEAIAAQNSIAQTgQGCEFIABBAWpBBBAYIQAgASgCECAANgKYASABEBohAANAIAAEQCAAEIwEIAAoAhAgBSADQThsajYCgAEgASgCECgCmAEgA0ECdGogADYCACADQQFqIQMgASAAEBshAAwBCwsgARAaIQMDQCADBEAgASADECkhAANAIAAEQCAAQfklQbgBQQEQLhogABCpAyAAQaCNCygCAEQAAAAAAADwP0QAAAAAAAAAABBTIQogACgCECAKOQOAASABIAAQLCEADAELCyABIAMQGyEDDAELCwJ/QQEgAUGsGxAjIgBFDQAaIAAtAAAEQEEBIAEgAEEAEHMiBA0BGiACIAA2AhBBpJcDIAJBEGoQJ0GMpwRBABB8C0EAIQRBAAshCCABQQFBrBtBABAfIQMCQCABQeqbARAjIgBFDQAgAC0AAEUNACACIAJByABqNgIEIAIgAkFAazYCACAAQdOEASACEElBAUcNACACIAIrA0A5A0gLIAEQNQRAIAEgAkE8ahCIBiEHAkAgAigCPEEBRgRAAkAgBCIADQAgAwRAIAEgAxC1CiIADQELQQAhAAsgBCABIAAQugoiBSAEGyEGIANFIAByRQRAIAUgA0HuiAMQaAsgBCAGIAgbIQQgARAaIgAoAhAoAoABEBcgACgCEEEANgKAASABEJIEGgwBCyABQQJB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IQgLA0AgCSIFIAgiBkcEQCADQdAAaiIIIAVBACACIAEQkQUgCCAGIARBACABEJEFIAYoAhAoAowBKAIwIQggBSgCECgCjAEoAjAhCSAFIQIgBiEEDAELCyADQdAAaiIFIAYgBCACIAEQkQUgAygCVEEASA0BAkACQCAFEPQGIAMoAlQQnQoEQCAHIQIgBRD0BiADKAJUEPoNIgsNAkEAIQtB1t8DQQAQJwwBCyAMDQAgA0E4aiAAEN0CIABBCEEIENIEIQJB+OADQQAQJyABKwMAIg0gArciDmYgDiABKwMIIg9lcgRAIAMgDzkDMCADIA05AyggAyACNgIgQaDjBCADQSBqEHwMAQsgAysDOCIQIA1lIAMrA0AiDiAPZXJFDQAgAyAPOQMYIAMgDTkDECADIA45AwggAyAQOQMAQdLjBCADEHwLQQEhDAwECwNAIAJFDQQgAigCECADQThqIAIgC0EAEPUJIAMpAzg3A5ABIAMoAlRBAEgNAyACIANB0ABqEPQGIAMoAlRBABD0CSACKAIQKAKwASECDAALAAsgACAKEBshCgwGC0HbyAFBgbkBQeEBQcowEAAAC0HbyAFBgbkBQYECQcowEAAACyADQdAAaiICRQRAQYPPAUGBuQFBIUGrngEQAAALIAJBADYCBCACKAIAEBcgAkEANgIIIAJCADcCAAsgACAHECwhBwwACwALCyALBEAgCxD5DQsgA0HgAGokACAMC1sBAn8gABAaIQEDQCABBEAgACABECkhAgNAIAIEQCACEMoCIAAgAhAsIQIMAQsLIAEQ/AIgACABEBshAQwBCwsgABDMCiAAKAIQKAKYARAXIAAoAhAoAowBEBcLSAECfyAAEBohAQNAIAEEQCAAIAEQKSECA0AgAgRAIAIQygIgACACECwhAgwBBSABEPwCIAAgARAbIQEMAwsACwALCyAAEM0KC5YCAQN/IABBAhCNAiAAKAIQQQI7AbABQbyLC0ECOwEAIAAQGiEBA0AgAQRAIAEQjAQgACABEBshAQwBCwsgABAaIQIDQCACBEAgACACECkhAQNAIAEEQCABQfklQbgBQQEQLhogARCpAyAAIAEQLCEBDAELCyAAIAIQGyECDAELCyAAQQAQ9QYgAEEAENAKIABBABDPCgJAIAAoAhAiASgCCCgCVARAIAAQGiEBA0AgAQRA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BH9BAEF/IAArAwggASsDCGYbBUEACwtSAQN/IAAoAiQhAgNAIAIoAgQhAyACKAIAIAFNBEAgAxAXIAIQFwUgAyABQQxsaigCCBB5GiABQQFqIQEMAQsLIABBADYCHCAAKAIYEBcgABAXCyABAnxBAUF/QQAgACsDACICIAErAwAiA2MbIAIgA2QbCw4AIAAoAhAQeRogABAXCx4AQQFBf0EAIAAoAgAiACABKAIAIgFIGyAAIAFKGwtaAgF8AX9BfyAAKwMIIAErAwihIgJESK+8mvLXej5kIAJESK+8mvLXer5jGyIDBH8gAwVBfyAAKwMAIAErAwChIgJESK+8mvLXej5kIAJESK+8mvLXer5jGwsLWgIBfAF/QX8gACsDACABKwMAoSICREivvJry13o+ZCACREivvJry13q+YxsiAwR/IAMFQX8gACsDCCABKwMIoSICREivvJry13o+ZCACREivvJry13q+YxsLCz4BAn8Cf0F/IAAoAgAiAiABKAIAIgNJDQAaQQEgAiADSw0AGkF/IAAoAgQiACABKAIEIgFJDQAaIAAgAUsLCzAAQRgQTSIBIAAoAgg2AgggASAAKAIMNgIMIAEgACgCEDYCECABIAAoAhQ2AhQgAQtjAQN/IwBBEGsiAiQAIAJBCGogASgCAEEAEMQBAkAgACgAACACKAIIIAAoAAQiASACKAIMIgMgASADSSIEGxDXASIADQBBASEAIAEgA0sNAEF/QQAgBBshAAsgAkEQaiQAIAALDQAgAEEAIAEgAhAfGguEAQECfyMAQRBrIgIkAEEBQSAQRiIBBEAgACgCACIDBEAgASADEGE2AgALIAAoAgQiAwRAIAEgAxBhNgIECyABIAAoAhhB/wBxNgIYIAEgACsDEDkDECABIAAoAgg2AgggAkEQaiQAIAEPCyACQSA2AgBB6PoGKAIAQandAyACEB0aECYACxQAIAAoAgAQFyAAKAIEEBcgABAXC6gBAgN/AnwgASgCACECAkACQAJAAkAgACgCACIDRQRAIAJFDQEMBAsgAkUNAiADIAIQQyICDQELIAEoAgQhAgJAIAAoAgQiA0UEQCACDQQMAQsgAkUNAiADIAIQQyICDQELQX8hAiAAKAIYQf8AcSIDIAEoAhhB/wBxIgRJDQAgAyAESw0BIAArAxAiBSABKwMQIgZjDQAgBSAGZCECCyACDwtBAQ8LQX8LoAICB3wCfwJAIAErAwgiBCABKwMAIgOjIgJEAFVEEw5v7j9kBEAgBEQAVUQTDm/uP6MhAwwBCyACRABVRBMOb+4/Y0UNACADRABVRBMOb+4/oiEECyADRP9URBMOb/4/oyIFRGAtoJEhcsg/okQAAAAAAADgv6IhBiAFRP9URBMOb+4/okRQ6S8378bTP6JEr9fcixif6D+jIQdE4PCcdi8b1D8hAgNAIAlBCUtFBEAgACAJQQR0aiIKIAUgAhBEojkDACAKIAcgAkTg8Jx2LxvkP6AiCBBEojkDECAKIAUgAhBXoiAGoDkDCCAKIAcgCBBXoiAGoDkDGCAJQQJqIQkgCETg8Jx2LxvkP6AhAgwBCwsgASAEOQMIIAEgAzkDAAtnAQF8IAAgASsDAET/VEQTDm/+P6MgASsDCESo9Jebd+PxP6MQJET/VEQTDm/uP6JEqPSXm3fj6T+iRF5adQQjz9I/oyICRFT6y8278fw/ojkDCCAAIAIgAqBE/1REEw5v7j+iOQMAC+IDAgh/BnwjAEEgayIDJAACQCAARQ0AIAAoAgQhAiAAKAIAIgUQKygCECgCdCEGIAMgASkDCDcDCCADIAEpAwA3AwAgA0EQaiADIAZBA3FB2gBsELQDIAMrAxghCiADKwMQIQsgAgRAIAIrAwAgC2VFDQEgCyACKwMQZUUNASACKwMIIAplIAogAisDGGVxIQQMAQsCQCAAKAIIIAVHBEAgACAFKAIQKAIMIgE2AhggASgCCCECIAEoAiwhBkEAIQEgBUGYjQsoAgBBAUEAEFAhBwJAIAAoAhgoAgQiBEUgB0EATHJFBEAgAiAEbCEBDAELIARFDQAgBEEBayACbCEBCyAAIAU2AgggACABNgIgDAELIAAoAhgiASgCCCECIAEoAiwhBgtBACEFQQAhAQNAIAEgAk8iBA0BIAAoAiAiByABaiEIIAFBBGohCSABQQJqIQEgBSAKIAYgCSACcCAHakEEdGoiBysDACAGIAhBBHRqIggrAwAiDKEiDaIgBysDCCAIKwMIIg+hIg4gC6KhIA8gDaIgDiAMoqEiDKFEAAAAAAAAAABmIA1EAAAAAAAAAACiIA5EAAAAAAAAAACioSAMoUQAAAAAAAAAAGZzaiIFQQJHDQALCyADQSBqJAAgBAusAgIGfwR8IwBBIGsiBCQAIAEoAhAiBSgCDCECAkACQAJAIAAoAhAiAygC2AEiBkUEQCACRQ0DIAMtAIwCQQFxDQEMAgsgAkUNAgtBASEHIAAtAJgBQQRxDQAgACAGIAMoAuwBIAMoAvwBIAMoAtwBELsBIAEoAhAhBQsgACgCJCACKwMIIQggBSsDECEJIAIrAxAhCiAFKwMYIQsgBCACKAIANgIQIAQgCyAKoDkDCCAEIAkgCKA5AwBBn7IEIAQQLSABKAIQIgIoAngiBSACKQMQNwM4IAVBQGsgAikDGDcDACAAQQogASgCECgCeBCxAyAHRQ0AIAAtAJgBQQRxBEAgACADKALYASADKALsASADKAL8ASADKALcARC7AQsgABCRAgsgBEEgaiQAC5sBAgJ/AnwjAEEgayICJAAgACgCACIAECsoAhAoAnQhAyACIAEpAwg3AwggAiABKQMANwMAIAJBEGogAiADQQNxQdoAbBC0A0EAIQECQCACKwMYIgQgACgCECIAKwNQRAAAAAAAAOA/oiIFmmZFIAQgBWVFcg0AIAIrAxAiBCAAKwNYmmZFDQAgBCAAKwNgZSEBCyACQSBqJAAgAQv5BAIGfwJ8IwBBkAFrIgIkAEEBIQYgACgCECIEKALYASIFRQRAIAQtAIwCQQFxIQYLIAIgASgCECIDKAIMIgcpAyg3A4gBIAIgBykDIDcDgAEgAiAHKQMYNwN4IAIgBykDEDcDcCACIAMrAxAiCCACKwNwoDkDcCACIAMrAxgiCSACKwN4oDkDeCACIAggAisDgAGgOQOAASACIAkgAisDiAGgOQOIAQJAIAZFDQAgAC0AmAFBBHENACAAIAUgBCgC7AEgBCgC/AEgBCgC3AEQuwELIAJBJGogACABEMwOIAAgARDpBRogAkEANgIoAn9BACACKAIkIgVBAXFFDQAaIAEQkQgiAyACQShqIAJBMGoQywQEQCAAIAIoAigQWCAAIAIoAiwiA0Ht9AAgAxsgAUGcjQsoAgBBAEEAEFAgAisDMBCFA0EDQQIgBUECcRsMAQsgACADEFhBAQshAyABKAIQKAIIKAIAQZiiARBHBEAgAiAFQQRyIgU2AiQLAkAgBUGM4B9xBEAgAiACKQNwNwMwIAIgAikDeDcDOCACIAIpA4gBNwNYIAIgAikDgAE3A1AgAiACKwM4OQNIIAIgAisDMDkDYCACIAIoAiQ2AiAgAiACKwNQOQNAIAIgAisDWDkDaCAAIAJBMGpBBCACQSBqIAMQrAMMAQsgAiACKQOIATcDGCACIAIpA4ABNwMQIAIgAikDeDcDCCACIAIpA3A3AwAgACACIAMQggILIAAgASAHEMUOIAIoAigQFyAGBEAgAC0AmAFBBHEEQCAAIAQoAtgBIAQoAuwBIAQoAvwBIAQoAtwBELsBCyAAEJECCyACQZABaiQAC/IDAgR/BXwjAEHQAGsiBSQAIAEtABxBAUYEQCABKwMAIQkgACgCECgCDCEGQQAhAQNAAkAgASAGKAIwTg0AIAAQKyEHAkAgBigCOCABQQJ0aigCACIIQRhBECAHKAIQLQB0QQFxIgcbaisDACIKIAllRQ0AIAkgCEEoQSAgBxtqKwMAIgtlRQ0AAkAgABArKAIQLQB0QQFxBEAgACgCECEHIAUgBigCOCABQQJ0aigCACIBKQMoNwMoIAUgASkDIDcDICAFIAEpAxg3AxggBSABKQMQNwMQIAUgBykDGDcDCCAFIAcpAxA3AwAgBSsDECEKIAUrAyAhCyAFKwMoIQwgBSAFKwMYIAUrAwAiDaA5AzAgBSsDCCEJIAUgDCANoDkDQCAFIAsgCaA5A0ggBSAKIAmgOQM4IAMgBSkDSDcDGCADIAVBQGspAwA3AxAgAyAFKQM4NwMIIAMgBSkDMDcDACAAKAIQIgArA1BEAAAAAAAA4D+iIQogACsDGCEJDAELIAMgCiAAKAIQIgArAxAiCqA5AwAgACsDGCEJIAArA1AhDCADIAsgCqA5AxAgAyAJIAxEAAAAAAAA4D+iIgqhOQMICyADIAkgCqA5AxggBEEBNgIADAELIAFBAWohAQwBCwsgAiEGCyAFQdAAaiQAIAYLmQICBX8FfCMAQSBrIgMkACAAKAIEIQIgACgCACIEECsoAhAoAnQhACADIAEpAwg3AwggAyABKQMANwMAIANBEGogAyAAQQNxQdoAbBC0AyABIAMpAxg3AwggASADKQMQNwMAAkAgAkUEQCAEKAIQKAIMIgJBKGohACACQSBqIQUgAkEYaiEGIAJBEGohAgwBCyACQRhqIQAgAkEQaiEFIAJBCGohBgsgBisDACEJIAArAwAhCiAFKwMAIQdBACEAIAIrAwAgBEGYjQsoAgBBAUEAEFC3RAAAAAAAAOA/oiIIoSABKwMAIgtlRSALIAcgCKBlRXJFBEAgASsDCCIHIAkgCKFmIAcgCiAIoGVxIQALIANBIGokACAAC7gBAQN/IwBBQGoiBCQAAkAgAi0AAEUEQCAAQZCOBUEoECAaDAELAkAgASgCECgCDCIGIAIQxg4iBQRAIAEgBUEQaiAEQRhqIANBy8IBIAMbIgMgBS0AQUEAEL0ERQ0BIAEQHiEBIAQgAzYCCCAEIAI2AgQgBCABNgIAQfWvBCAEECcMAQsgASAGQRBqIARBGGogAkEPQQAQvQRFDQAgASACEM8OCyAAIARBGGpBKBAgGgsgBEFAayQACw0AIAAoAhAoAgwQkggLrQMBCHwgASsDCCEDIAAgASsDAEQAAAAAAADgP6IiApoiBTkDYCAAIANEAAAAAAAA4D+iIgQgA0QAAAAAAAAmQKMiA6EiBjkDaCAAQgA3AzAgACAEOQNIIAAgBDkDOCAAIAQ5AyggACACOQMQIAAgAjkDACAAIAU5A1AgACACRBSYTus2qOG/oiIIOQNAIAAgAkQUmE7rNqjhP6IiCTkDICAAIAY5AwggACADRNjPYimSr9y/oiAEoCIHOQNYIAAgBzkDGCAAIAApA2A3A3AgACAAKQNoNwN4IAAgBTkDgAEgACADIAShOQOIASAAIAApA4ABNwOQASAAIAApA4gBNwOYASAAIAI5A/ABIAAgB5oiAzkD6AEgACACOQPgASAAIASaIgI5A9gBIAAgCTkD0AEgACACOQPIASAAQgA3A8ABIAAgAjkDuAEgACAIOQOwASAAIAM5A6gBIAAgBTkDoAEgACAGmjkD+AEgACAAKQPwATcDgAIgACAAKQP4ATcDiAIgACAAKQMINwOYAiAAIAApAwA3A5ACIAAgACkDCDcDqAIgACAAKQMANwOgAgsqACABIAErAwhEAAAAAAAA9j+iOQMIIAAgASkDADcDACAAIAEpAwg3AwgLrAUCDH8BfCMAQTBrIgMkAAJAIAAoAhAiBCgC2AEiAkUEQCAELQCMAkEBcUUNAQtBASEJIAAtAJgBQQRxDQAgACACIAQoAuwBIAQoAvwBIAQoAtwBELsBCyABKAIQKAIMIgIoAgQhBiACKAIIIQogAigCLCEMIANBADYCLCABIANBLGoQyQ4aIABBsK4KQbSuCiADKAIsQSBxGxDcAUGYjQsoAgAiAgRAIAAgASACRAAAAAAAAPA/RAAAAAAAAAAAEFMQgAILAkAgASgCEC0AhQEiAkEBcQRAIAAgAUGcjAsoAgBBg4oDEFEQRSAAIAFBoIwLKAIAQbC1ARBRIgIQWAwBCyACQQJxBEAgACABQaSMCygCAEHYiwMQURBFIAAgAUGojAsoAgBBk+MBEFEiAhBYDAELIAJBCHEEQCAAIAFBtIwLKAIAQYqJAxBREEUgACABQbiMCygCAEGCiQMQUSICEFgMAQsgAkEEcQRAIAAgAUGsjAsoAgBBgYwDEFEQRSAAIAFBsIwLKAIAQYvjARBRIgIQWAwBCyAAIAFB7fQAEMgOIgIQWCAAIAEQ6QUaCwJAIAYNAEEBIQYgAi0AAEUNACAAIAIQRQtBASELA0AgBSAGRgRAIAkEQCAALQCYAUEEcQRAIAAgBCgC2AEgBCgC7AEgBCgC/AEgBCgC3AEQuwELIAAQkQILIANBMGokAA8LIANCADcDGCADQgA3AxAgA0IANwMIIANCADcDACAMIAUgCmxBBHRqIQ1BACECA0AgAiAKRgRAIAAgAyALEPkDIAVBAWohBUEAIQsMAgsgAkEBTQRAIA0gAkEEdCIHaiIIKwMIIQ4gAyAHaiIHIAgrAwAgASgCECIIKwMQoDkDACAHIA4gCCsDGKA5AwgLIAJBAWohAgwACwALAAuBAgIGfwN8IwBBIGsiAiQAAkAgAEUNACAAKAIAIgQQKygCECgCdCEDIAIgASkDCDcDCCACIAEpAwA3AwAgAkEQaiACIANBA3FB2gBsELQDIAIrAxghCSACKwMQIQoCQCAAKAIIIARGBEAgACsDECEIDAELIAQoAhAoAgwhBkEAIQEgBEGYjQsoAgBBAUEAEFAhBwJAIAYoAgQiA0UgB0EATHJFBEAgA0EBdCEBDAELIANFDQAgA0EBdEECayEBCyAGKAIsIAFBBHRqKwMQIQggACAENgIIIAAgCDkDEAsgCpkgCGQgCZkgCGRyDQAgCiAJEE8gCGUhBQsgAkEgaiQAIAULyAwCEn8FfCMAQdAAayIEJAACQCAAKAIQIgooAtgBIgNFBEAgCi8BjAJBAXFFDQELQQEhECAALQCYAUEEcQ0AIAAgAyAKKALsASAKKAL8ASAKKALcARC7AQsgASgCECgCDCIDKAIEIQsgAygCLCERIAMoAggiBkEFakEQEBghBSABKAIQIgMoAngiAiADKQMQNwM4IAJBQGsgAykDGDcDACABKAIQIgMrA1AgAysDKCADKwNYIAMrA2AgAysDICAEQcQAaiAAIAEQzA4gBEEANgJIQQEhAwJAIAEoAhAtAIUBIgJBAXEEQCAAIAFBnIwLKAIAQYOKAxBRIgkQRSAAIAFBoIwLKAIAQbC1ARBREFgMAQsgAkECcQRAIAAgAUGkjAsoAgBB2IsDEFEiCRBFIAAgAUGojAsoAgBBk+MBEFEQWAwBCyACQQhxBEAgACABQbSMCygCAEGKiQMQUSIJEEUgACABQbiMCygCAEGCiQMQURBYDAELIAJBBHEEQCAAIAFBrIwLKAIAQYGMAxBRIgkQRSAAIAFBsIwLKAIAQYvjARBREFgMAQsCfyAEKAJEIgNBAXEEQCABEJEIIgcgBEHIAGogBEE4ahDLBARAIAAgBCgCSBBYIAAgBCgCTCICQe30ACACGyABQZyNCygCAEEAQQAQUCAEKwM4EIUDQQNBAiADQQJxGwwCCyAAIAcQWEEBDAELIANBwARxRQRAQQAMAQsgARCRCCEHQQELIQMgACABEOkFIQkLQQEhDUQAAAAAAABSQKIhGKAhFEQAAAAAAABSQKIgASgCECgCCCICLQAMQQFGBEAgAigCAEHn6wAQRyENCyANRSALIANFcnJFBEAgAEGYHhBFQQEhCwsgFCAYoyEWoyEVIAVBIGohDCAGQQNJIRIDQCAIIAtHBEAgESAGIAhsQQR0aiETQQAhAgNAIAIgBkYEQCAEKAJEIQICQCASBEACQCAIIAJBgARxRXINACAHEMsORQ0AQQAhAyAAIAUgBxCsD0ECSA0AIAQgARAeNgIgQbLvAyAEQSBqEHwLIAAgBSADEPkDIAQtAERBCHFFDQEgACABEMoODAELIAJBwABxBEACQCAIDQAgACAFIAdBARC8CEECSA0AIAQgARAeNgIwQbLvAyAEQTBqEHwLIAAgBSAGQQAQQQwBCyACQYAIcQRAIABBmB4QRSAAIAUgBiADEEEgACAJEEUgACAMQQIQNgwBCyACQYzgH3EEQCAEIAQoAkQ2AiwgACAFIAYgBEEsaiADEKwDDAELIAAgBSAGIAMQQQsgCEEBaiEIQQAhAwwDBSATIAJBBHQiDmoiDysDCCEUIAUgDmoiDiAPKwMAIBaiIAEoAhAiDysDEKA5AwAgDiAUIBWiIA8rAxigOQMIIAJBAWohAgwBCwALAAsLAkACQCABKAIQKAIIIgItAAxBAUYEQCACKAIAIghB5+sAEEdFDQEgAUGXmgEQIyIIRQ0CIAgtAAANAQwCCyABQa6dARAjIghFDQEgCC0AAEUNAQtBACECAkADQCACIAZGBEACQCADQQBHIgIgDXFFDQMgBCgCRCECIAZBAk0EQAJAIAsgAkGABHFFcg0AIAcQyw5FDQBBACEDIAAgBSAHEKwPQQJIDQAgBCABEB42AgBBsu8DIAQQfAsgACAFIAMQ+QMgBC0AREEIcUUNASAAIAEQyg4MAQsgAkHAAHEEQEEBIQIgACAFIAdBARC8CEECTgRAIAQgARAeNgIQQbLvAyAEQRBqEHwLIAAgBSAGQQAQQQwECwJAIAJBDHEEQCAEIAQoAkQ2AgwgACAFIAYgBEEMaiADEKwDDAELIAAgBSAGIAMQQQtBASECDAMLBSARIAJBBHQiCWoiDCsDCCEUIAUgCWoiCSAMKwMAIBaiIAEoAhAiDCsDEKA5AwAgCSAUIBWiIAwrAxigOQMIIAJBAWohAgwBCwsgAyECCyAAIAggBSAGIAJBAEcgAUH8jAsoAgBB+pMBEHogAUGAjQsoAgBBx7MBEHoQ4wgLIAUQFyAEKAJIEBcgAEEKIAEoAhAoAngQsQMgEARAIAAtAJgBQQRxBEAgACAKKALYASAKKALsASAKKAL8ASAKKALcARC7AQsgABCRAgsgBEHQAGokAAutCQIKfwl8IwBBMGsiBSQAAkAgAEUNACAAKAIEIQIgACgCACIEECsoAhAoAnQhAyAFIAEpAwg3AwggBSABKQMANwMAIAVBEGogBSADQQNxQdoAbBC0AyAFKwMYIRAgBSsDECESIAIEQCACKwMAIBJlRQ0BIBIgAisDEGVFDQEgAisDCCAQZSAQIAIrAxhlcSEGDAELAkAgACgCCCAERwRAIAAgBCgCECgCDCICNgIYIAIoAgghASACKAIsIQcCfCACLQApQQhxBEAgBUEQaiACELAOIAUrAyAgBSsDEKEiDCAFKwMoIAUrAxihIg0gBBArKAIQKAJ0QQFxIgIbIREgDSAMIAIbIRMgDSEOIAwMAQsgBBArIQMgBCgCECICKwNYIAIrA2CgIgwgAisDUCINIAMoAhAtAHRBAXEiAxshESANIAwgAxshEyACKwNwRAAAAAAAAFJAoiEOIAIrAyhEAAAAAAAAUkCiIQ0gAisDIEQAAAAAAABSQKIhDCACKwNoRAAAAAAAAFJAogshDyAAIA5EAAAAAAAA4D+iOQNAIAAgD0QAAAAAAADgP6I5AzggACANIA0gEaMgEb1QGzkDMCAAIAwgDCAToyATvVAbOQMoQQAhAiAEQZiNCygCAEEBQQAQUCEIAkAgACgCGCgCBCIDRSAIQQBMckUEQCABIANsIQIMAQsgA0UNACADQQFrIAFsIQILIAAgBDYCCCAAIAI2AiAMAQsgACgCGCICKAIIIQEgAigCLCEHCyAAKwM4Ig8gEiAAKwMooiIMmWMNACAAKwNAIg4gECAAKwMwoiINmWMNACABQQJNBEAgDCAPoyANIA6jEE9EAAAAAAAA8D9jIQYMAQsgDSAHIAAoAhwgAXAiBEEBaiICQQAgASACRxsiAiAAKAIgIghqQQR0aiIDKwMAIhAgByAEIAhqQQR0aiIJKwMAIg+hIhGiIAMrAwgiEiAJKwMIIg6hIhMgDKKhIA4gEaIgEyAPoqEiFKFEAAAAAAAAAABmIBFEAAAAAAAAAACiIBNEAAAAAAAAAACioSAUoUQAAAAAAAAAAGZzDQAgDUQAAAAAAAAAACAQoSIRokQAAAAAAAAAACASoSITIAyioSASIBGiIBMgEKKhIhShRAAAAAAAAAAAZiAOIBGiIBMgD6KhIBShRAAAAAAAAAAAZnMiCUUEQEEBIQYgDSAPoiAOIAyioSAPRAAAAAAAAAAAoiAORAAAAAAAAAAAoqEiEaFEAAAAAAAAAABmIA8gEqIgDiAQoqEgEaFEAAAAAAAAAABmRg0BCyABQQFrIQpBASEGAkADQCABIAZGDQEgBkEBaiEGIA0gByAIAn8gCUUEQCACIgNBAWogAXAMAQsgBCAKaiABcCEDIAQLIgJqQQR0aiILKwAAIAcgCCADIgRqQQR0aiIDKwAAIhChIg+iIAsrAAggAysACCISoSIOIAyioSASIA+iIA4gEKKhIhChRAAAAAAAAAAAZiAPRAAAAAAAAAAAoiAORAAAAAAAAAAAoqEgEKFEAAAAAAAAAABmRg0ACyAAIAQ2AhxBACEGDAELIAAgBDYCHEEBIQYLIAVBMGokACAGC7wCAQN/IwBBkAFrIgQkAAJAIAItAABFBEAgAEGQjgVBKBAgGgwBCyAEQQ86AGcCQAJAIAEoAhAiBSgCeC0AUkEBRgRAAkAgASgCECgCeCgCSCIFLQAEQQJGDQAgBSgCACACEIMPIgVFDQAgBCAFLQAjOgBnIAVBMGohBgsgBg0BIAEoAhAhBQsgBEEYaiIGQQBByAAQMxpBACEDIAUoAggoAghB6KQKRwRAIAQgATYCGCAGIQMLIAFBACAEQegAaiACIAQtAGcgAxC9BEUNASABIAIQzw4MAQsgASAGIARB6ABqIANBy8IBIAMbIgMgBC0AZ0EAEL0ERQ0AIAEQHiEBIAQgAzYCCCAEIAI2AgQgBCABNgIAQfWvBCAEECcLIARBADYCjAEgACAEQegAakEoECAaCyAEQZABaiQACxoAIAAoAhAoAgwiAARAIAAoAiwQFyAAEBcLC5UFAgR8CX9BMBBNIQYgACgCECgCCCgCCCgCBCEKAnwgAEGMjAsoAgBEAAAAAAAA8L9EexSuR+F6hD8QUyAAQYiMCygCAEQAAAAAAADwv0R7FK5H4XqUPxBTIgEQMiICvUKAgICAgICA+L9/UiABvUKAgICAgICA+L9/UnJFBEAgACgCECIFQpqz5syZs+bUPzcDICAFQpqz5syZs+bUPzcDKETNzMzMzMwMQAwBCyACRGEyVTAqqTM/ECQhASAAKAIQIgUgASACIAJEAAAAAAAAAABkGyIBOQMgIAUgATkDKCABRAAAAAAAAFJAogshA0EBIQtBASAAQeSMCygCACAKQQAQUCIHIAdBAU0bIAdBAEcgAEGYjQsoAgBBAUEAEFAiDUEASnEiCmoiBUEBdEEQEBgiCCADRAAAAAAAAOA/oiICOQMYIAggAjkDECAIIAKaIgE5AwggCCABOQMAQQIhCQJAIAdBAkkEQCACIQEMAQsgAiEBA0AgByALRkUEQCAIIAlBBHRqIgwgAUQAAAAAAAAQQKAiAZo5AwggDCACRAAAAAAAABBAoCICmjkDACAMIAI5AxAgDCABOQMYIAtBAWohCyAJQQJqIQkMAQsLIAIgAqAhAwsgCkUgBSAHTXJFBEAgCCAJQQR0aiIFIA23RAAAAAAAAOA/oiIEIAGgIgE5AxggBSAEIAKgIgI5AxAgBSABmjkDCCAFIAKaOQMACyAGQgA3AxAgBkECNgIIIAYgBzYCBCAGQQE2AgAgBiAINgIsIAZCADcDGCAGQgA3AyAgACgCECIAIAIgAqBEAAAAAAAAUkCjIgE5A3AgACABOQNoIAAgA0QAAAAAAABSQKMiATkDKCAAIAE5AyAgACAGNgIMC8EDAgR/AnwjAEHQAGsiASQAIAAQKygCECgCdCECQaiRCyAAKAIQKAJ4KAIAIgM2AgAgACACQQRxRSIEQQFBAiADEDciAiACQQJNG0EBakEBEBgiAxCUCCICRQRAIAEgACgCECgCeCgCADYCIEG35AMgAUEgahAxQaiRC0GWzQE2AgAgACAEQQEgAxCUCCECCyADEBcgAUFAayAAIAIQ1A4gASAAKAIQIgMrAyBEAAAAAAAAUkCiIgU5A0AgASADKwMoRAAAAAAAAFJAoiIGOQNIIABB+IwLKAIAQfqTARB6EGpFBEAgASACKwMAIAUQJCIFOQNAIAEgAisDCCAGECQiBjkDSAsgAEHUjAsoAgBB+pMBEHoQaiEDIAEgASkDSDcDGCABIAEpA0A3AxAgAiABQRBqIAMQ0w4gASAGRAAAAAAAAOA/ojkDOCABIAEpAzg3AwggASAFRAAAAAAAAOC/ojkDMCABIAEpAzA3AwAgAiABQQ8Q0g4gACgCECIAIAIrAwBEAAAAAAAAUkCjOQMgIAIrAwghBSAAIAI2AgwgACAFRAAAAAAAAPA/oEQAAAAAAABSQKM5AyggAUHQAGokAAuAHgMPfxp8A34jAEGAAWsiASQAQTAQTSEIIAAoAhAoAggoAggiBisDGCEaIAYrAyAhHCAGKwMQIAYoAgghBCAGKAIEIQcgBigCAEEARyAAQYE7ECMQanIhDQJAIAZBoKQKRg0AIA0EQCAAQYyMCygCAEQAAAAAAAAAAER7FK5H4XqEPxBTIABBiIwLKAIARAAAAAAAAAAARHsUrkfhepQ/EFMQJEQAAAAAAABSQKIiEyEVIBNEAAAAAAAAAABkDQEgACgCECICKwMgIAIrAygQMkQAAAAAAABSQKIiEyEVDAELIAAoAhAiAisDKEQAAAAAAABSQKIhEyACKwMgRAAAAAAAAFJAoiEVCyAAQeSMCygCACAHQQAQUCEJIABB7IwLKAIARAAAAAAAAAAARAAAAAAAgHbAEFMgBEUEQCAAQfCMCygCAEQAAAAAAAAAAEQAAAAAAABZwBBTIRwgAEHgjAsoAgBBBEEAEFAhBCAAQfSMCygCAEQAAAAAAAAAAEQAAAAAAABZwBBTIRoLAkAgACgCECgCeCICKwMgIhZEAAAAAAAAAABkRSACKwMYIhFEAAAAAAAAAABkQX9zcSAGQaCkCkZyDQAgAEGr5AAQIyICBEAgAUIANwN4IAFCADcDcCABIAFB+ABqNgJAIAEgAUHwAGo2AkQgAkHThAEgAUFAaxBJIQIgASABKwN4RAAAAAAAAAAAECQiEDkDeCABIAErA3BEAAAAAAAAAAAQJCIXOQNwIAJBAEoEQCAQRAAAAAAAAFJAoiIQIBCgIhAgEaAhESACQQFHBEAgF0QAAAAAAABSQKIiECAQoCAWoCEWDAMLIBAgFqAhFgwCCyAWRAAAAAAAACBAoCEWIBFEAAAAAAAAMECgIREMAQsgFkQAAAAAAAAgQKAhFiARRAAAAAAAADBAoCERCyAAKAIQKAJ4KwMYIRQgABArKAIQKAIIKwMAIhBEAAAAAAAAAABkBHwgEEQAAAAAAABSQKIiECAWIBCjm6IhFiAQIBEgEKObogUgEQshHyABIBYCfwJAIAAoAhAoAggiAi0ADEEBRgRAIAIoAgBB5+sAEEdFDQEgAEGXmgEQIyEGIAFB4ABqIAAQKyAGEI4GIAEoAmAiByABKAJkIgJxQX9GBEAgASAAEB42AiQgASAGQfrYASAGGzYCIEGS7gQgAUEgahAnDAILIAAQKygCEEEBOgByIAdBAmohAyACQQJqDAILIABBrp0BECMiBkUNACAGLQAARQ0AIAFB4ABqIAAQKyAGEI4GIAEoAmAiByABKAJkIgJxQX9GBEAgASAAEB42AjQgASAGNgIwQb/uBCABQTBqECcMAQsgABArKAIQQQE6AHIgB0ECaiEDIAJBAmoMAQtBAAu3IiAQJDkDaCABIB8gA7cQJDkDYCAEQfgAIBq9IBy9hFAgBEECS3IbIQQgAEGKswEQIyICBH9B9ABB4gBB4wAgAi0AACICQeIARhsgAkH0AEYbBUHjAAshA6AhIiAAKAIQIgIoAnggAzoAUAJAAkAgBEEERw0AICIQugeZRAAAAAAAAOA/Y0UgGr1CAFJyDQBBASEKIBy9UA0BCyACKAIIKAIIKAIsIgIEQCACKAIAIQIgASABKQNoNwMYIAEgASkDYDcDECABQdAAaiABQRBqIAIRBAAgASABKQNYNwNoIAEgASkDUDcDYEEAIQoMAQsCQCATIAErA2giF0TNO39mnqD2P6IiEGRFIANB4wBHckUEQCABRAAAAAAAAPA/RAAAAAAAAPA/IBcgE6MiECAQoqGjnyABKwNgoiIYOQNgIBchEAwBCyABIBA5A2ggASABKwNgRM07f2aeoPY/oiIYOQNgC0EAIQogBEEDSQ0AIAEgEEQYLURU+yEJQCAEuKMQRCIQozkDaCABIBggEKM5A2ALIAErA2ghFwJAAkAgAEH4jAsoAgBB+pMBEHoiAi0AAEHzAEcNACACQYKWARBHRQ0AIAEgEzkDaCABIBU5A2AgCCAIKAIoQYAQcjYCKAwBCyACEGoEQAJAIBUgACgCECgCeCICKwMYY0UEQCATIAIrAyBjRQ0BCyAAEB4hAiABIAAQKxAeNgIEIAEgAjYCAEHzgwQgARAnCyABIBM5A2ggASAVOQNgDAELIAEgFSABKwNgECQiFTkDYCABIBMgASsDaBAkIhM5A2gLIA0EQCABIBUgExAkIhM5A2AgASATOQNoIBMhFQsgESAUoSEQAnwgHyIRIABB1IwLKAIAQfqTARB6EGoNABogCgRAIBEgASsDYBAkDAELIB8gFiABKwNoIhRjRQ0AGiARRAAAAAAAAPA/IBYgFqIgFCAUoqOhnyABKwNgohAkCyERIAAoAhAoAngiAiARIBChOQMoIAgoAihBgBBxIg9FBEAgAiAWICAgFqEgASsDaCAXoSIRoCARIBYgIGMboDkDMAtBASELQQEgCSAJQQFNGyIGIAlBAEcgAEGYjQsoAgBBAUEAEFAiAkEASnFqIQwgArchI0ECIQcCQAJAAkAgBEECTQRAIAxBAXRBEBAYIQUgASsDYCEUIAUgASsDaCITRAAAAAAAAOA/oiIROQMYIAUgFEQAAAAAAADgP6IiEDkDECAFIBGaOQMIIAUgEJo5AwAgCUECSQ0BA0AgCSALRgRAIBEgEaAhEyAQIBCgIRQMAwUgBSAHQQR0aiICIBFEAAAAAAAAEECgIhGaOQMIIAIgEEQAAAAAAAAQQKAiEJo5AwAgAiAQOQMQIAIgETkDGCALQQFqIQsgB0ECaiEHDAELAAsACyAEIAxsQRAQGCEFAkAgACgCECgCCCgCCCgCLCICBEAgBSABQeAAaiACKAIEEQQAIAErA2hEAAAAAAAA4D+iIRkgASsDYEQAAAAAAADgP6IhGAwBC0QYLURU+yEZQCAEuKMiJEQYLURU+yEJwKBEAAAAAAAA4D+iIhREGC1EVPshCUAgJKFEAAAAAAAA4D+ioCEQIBpEzTt/Zp6g9j+iICREAAAAAAAA4D+iIhcQRKMhKCAcRAAAAAAAAOA/oiEpIBQQVyIdRAAAAAAAAOA/oiERIBQQRCIeRAAAAAAAAOA/oiEmQQAhA0QAAAAAAAAAACEYIByZIBqZoEQAAAAAAADwPxBPISAgASsDaCEhIAErA2AhGyAXEFchJyAiRAAAAAAAgGZAo0QYLURU+yEJQKIhFANAIAMgBEYNASAkIBCgIhAQRCESIAUgA0EEdGoiAiAUICcgEBBXoiARoCIRICcgEqIgJqAiJiARICiiICCgoiApIBGioCISEKcBoCIXEFciHSASIBEQTyISoiAhoiIlOQMIIAIgGyASIBcQRCIeoqIiEjkDACADQQFqIQMgJZkgGRAkIRkgEpkgGBAkIRggCkUNAAsgBSASOQMwIAUgJTkDGCAFICWaIhE5AzggBSAROQMoIAUgEpoiETkDICAFIBE5AxALIAEgEyAZIBmgIhEQJCITOQNoIAEgFSAYIBigIhAQJCIUOQNgIBMgEaMhESAUIBCjIRBBACEDA0AgAyAERkUEQCAFIANBBHRqIgIgESACKwMIojkDCCACIBAgAisDAKI5AwAgA0EBaiEDDAELCyAMQQJJDQFBASAEIARBAU0bIQsgBSsDCCIZvSEqIAUrAwAiGL0hK0EBIQMDQAJAIAMgC0YEQCASvSEsDAELIAUgBCADayAEcEEEdGoiAisDCCEQIAIrAwAiEr0iLCArUg0AIANBAWohAyAQvSAqUQ0BCwsgKyAsUSAqIBC9UXFFBEBBACEKIBkgEKEgGCASoRCnASERIAQgCWxBBHQhBwJAA0AgBCAKRgRAQQAhAyAEIAlBAWtsQQR0IQsgDEEBayAEbEEEdCEGIBQhECATIREDQCADIARGDQcgBSADQQR0aiIHIAtqIgIrAwAgAisDCCAGIAdqIgIrAwAgA0EBaiEDIAIrAwiZIhIgEqAgERAkIRGZIhIgEqAgEBAkIRCZIhIgEqAgExAkIROZIhIgEqAgFBAkIRQMAAsACyAFIApBBHRqIg4rAwgiFb0hKkEBIQMCQCAOKwMAIhe9IisgEr1SICogEL1SckUEQCARIRIMAQsDQAJAIAMgC0YEQCAYvSEsDAELIAUgAyAKaiAEcEEEdGoiAisDCCEZIAIrAwAiGL0iLCArUg0AIANBAWohAyAqIBm9UQ0BCwsgKyAsUSAqIBm9UXENAiARRBgtRFT7IQlAoCAZIBWhIBggF6EQpwEiEqFEAAAAAAAA4D+iIhAQVyEbIBEgEKEiEBBERAAAAAAAABBAIBujIhGiIR4gEBBXIBGiIR0LQQEhAwJAAkAgHkQAAAAAAAAAAGIEQCAVIREgFyEQDAELIBUhESAXIRAgHUQAAAAAAAAAAGENAQsDQCADIAZGBEAgCSAMSQRAIAcgDmoiAiAdICOiRAAAAAAAAOA/okQAAAAAAADQP6IgEaA5AwggAiAeICOiRAAAAAAAAOA/okQAAAAAAADQP6IgEKA5AwALIApBAWohCiASIREgFSEQIBchEgwDBSAOIAMgBGxBBHRqIgIgHSARoCIROQMIIAIgHiAQoCIQOQMAIANBAWohAwwBCwALAAsLQfOVA0HcuAFBmBJBhR8QAAALQdyYA0HcuAFBixJBhR8QAAALQdyYA0HcuAFB9RFBhR8QAAALQQIhBCAJIAxPDQAgBSAJQQV0aiICICNEAAAAAAAA4D+iIhIgEKAiEDkDECACIBIgEaAiEZo5AwggAiAQmjkDACACIBE5AxggESARoCERIBAgEKAhEAwBCyAUIRAgEyERCyAIIBw5AyAgCCAiOQMQIAggBDYCCCAIIAk2AgQgCCANNgIAIAggBTYCLCAIIBo5AxgCQCAPBEAgHyAQECQhECAAKAIQIgMgEEQAAAAAAABSQKM5A2ggAyAWIBMQJEQAAAAAAABSQKM5AyggAyAfIBQQJEQAAAAAAABSQKM5AyAgFiARECQhEQwBCyAAKAIQIgMgEEQAAAAAAABSQKM5A2ggAyATRAAAAAAAAFJAozkDKCADIBREAAAAAAAAUkCjOQMgCyADIAg2AgwgAyARRAAAAAAAAFJAozkDcCABQYABaiQACwkAIAAoAkQQFwsLACAAIAFBARCQAQsMACAAKAIQKAIMEBcLvAUCCH8CfCMAQcAJayIBJAACQAJAIABBl5oBECMQ4QUiBQRAQfiQCygCACICRQRAQfiQC0GYnApB7MkKKAIAEH8iAjYCAAsgAiAFQYAEIAIoAgARAwAiAkUEQCAFQcU7EKAEIgZFDQJBACECAkACQAJAAkADQCABQcABaiIEQYAIIAYQoQQEQCABIAFB0ABqNgJMIAEgAUHUAGo2AkggASABQdgAajYCRCABIAFB3ABqNgJAQQEhByAEQfCxASABQUBrEElBBEYgAnIiAiABLQDAAUElRwRAIARB/rABEJ4EQQBHIANyIQMLIANxQQFxRQ0BDAILCyADIQcgAkEBcUUNAQtB0AAQTSICIAEoAlwiA7c5AyAgAiABKAJYIgS3OQMoIAIgASgCVCADa7c5AzAgASgCUCEDIAIgBTYCCCACIAMgBGu3OQM4QZCRC0GQkQsoAgAiA0EBajYCACACIAM2AgwgBhDEDCABQeAAahDADCACIAEoAngiBEEBakEBEBgiAzYCRCAGQQBBABDLARogAyAEQQEgBhC7BUEBRgRAIAMgBGpBADoAAEH4kAsoAgAiAyACQQEgAygCABEDABogAiAHQQFxOgAQDAMLIAEgBTYCIEGR7wMgAUEgahAnIAMQFyACEBcMAQsgASAFNgIwQc7uAyABQTBqECcLQQAhAgsgBhDfAyACRQ0DCyACKwMwIQkgACgCECIDIAIrAzgiCkQAAAAAAABSQKM5AyggAyAJRAAAAAAAAFJAozkDIEEYEE0hAyAAKAIQIAM2AgwgAyACKAIMNgIAIAMgAisDIJogCUQAAAAAAADgP6KhOQMIIAMgAisDKJogCkQAAAAAAADgP6KhOQMQDAILIAEgABAeNgIAQb7vAyABECcMAQsgASAFNgIQQfXuAyABQRBqECcLIAFBwAlqJAALHABBFBBNIgEgACkCCDcCCCABIAAoAhA2AhAgAQtDAQJ8An9BASAAKwMAIgIgASsDACIDZA0AGkF/IAIgA2MNABpBASAAKwMIIgIgASsDCCIDZA0AGkF/QQAgAiADYxsLCycAQX8gACgCACgCECgC9AEiACABKAIAKAIQKAL0ASIBSiAAIAFIGwsnAEF/IAEoAgAoAhAoAvQBIgEgACgCACgCECgC9AEiAEogACABShsLRgEBfyMAQRBrIgEkAEEBQQwQRiICRQRAIAFBDDYCAEHo+gYoAgBBqd0DIAEQHRoQJgALIAIgACgCADYCACABQRBqJAAgAgsOACAAKAIIEHkaIAAQFwtKAQN/IAAoAgwiAwRAIAAoAgghAQNAIAIgA08EQCAAKAIIEBcFIAEoAgAQFyACQQFqIQIgAUE4aiEBIAAoAgwhAwwBCwsLIAAQFws+AQF/AkACQAJAIAAoAggiAS0AXEEBaw4CAAECCyABKAJYEI4PDAELIAEoAlgQhA8LIAEQ7wUgARAXIAAQFwsaACAAIAAgAUEBEHMgACACQQEQc0EAQQEQUgsOACAAIAEQpAE2AiBBAAsOACAAIAEQpAE2AiRBAAtwAQF/IwBBEGsiAiQAAn8gAUGZywEQKkUEQCAAQfIANgIAQQAMAQsgAUGoywEQKkUEQCAAQewANgIAQQAMAQsgAUGczAEQKkUEQCAAQe4ANgIAQQAMAQsgAiABNgIAQdqtBCACECdBAQsgAkEQaiQAC0ABAn8jAEEQayICJABBASEDIAFB+9QBQQBB/wEgAkEMahC0AkUEQCAAIAIoAgy3OQMQQQAhAwsgAkEQaiQAIAMLCwAgACABNgIAQQALCwAgACABNgIEQQALUwECfyMAQRBrIgIkAEEBIQMCQCABQa7NAUEAQf//AyACQQxqELQCDQAgAigCDCIBRQRAQauvBEEAECcMAQsgACABOwFSQQAhAwsgAkEQaiQAIAMLUwECfyMAQRBrIgIkAEEBIQMCQCABQbbNAUEAQf//AyACQQxqELQCDQAgAigCDCIBRQRAQdCvBEEAECcMAQsgACABOwFQQQAhAwsgAkEQaiQAIAMLHwAgACABQdKuBEGczAFBgAJBmcsBQYAEQajLARD7BguNAQEBfyMAQRBrIgIkAAJ/AkACQCABQajLARAqRQRAIAAgAC8BJEEEcjsBJAwBCyABQZnLARAqRQRAIAAgAC8BJEECcjsBJAwBCyABQajKARAqRQRAIAAgAC8BJEEGcjsBJAwBCyABQZzMARAqDQELQQAMAQsgAiABNgIAQf+uBCACECdBAQsgAkEQaiQAC0ABAn8jAEEQayICJABBASEDIAFBhtMBQQBB//8DIAJBDGoQtAJFBEAgACACKAIMOwEmQQAhAwsgAkEQaiQAIAMLHQAgACABQbOtBEG+1QFBCEGLzQFBEEHFzQEQ+wYLDgAgACABEKQBNgIMQQALDgAgACABEKQBNgIIQQALjwQBBX8jAEHQAGsiAiQAAkAgAQRAAkADQCAFQQJGDQEgBUG9mANqIAVBvpgDaiEDIAVBAWohBS0AACEEA0AgAy0AACIGRQ0BIANBAWohAyAEIAZHDQALC0GOqgNBqf0AQTVB4PIAEAAAC0EAIQUgAUG9mAMQ2QMhBCABIQMDQCADRQ0CIAIgBDYCTCACIAM2AkggAiACKQJINwNAAkAgAkFAa0Gh1wEQswMEQCAAIAAtACpBAnI6ACoMAQsgAiACKQJINwM4IAJBOGpB8NEBELMDBEAgACAALQAqQQFyOgAqDAELIAIgAikCSDcDMCACQTBqQYPXARCzAwRAIAAgAC0AKkHnAXE6ACoMAQsgAiACKQJINwMoAkAgAkEoakHF1QEQswNFBEAgAiACKQJINwMgIAJBIGpBy8sBELMDRQ0BCyAAIAAtACpBBHI6ACoMAQsgAiACKQJINwMYIAJBGGpBk9cBELMDBEAgACAALQAqQQhyOgAqDAELIAIgAikCSDcDECACQRBqQZrXARCzAwRAIAAgAC0AKkEQcjoAKgwBCyACIAM2AgQgAiAENgIAQaquBCACECdBASEFCyADIARqIQZBACEDQQAhBCAGIAEQNyABakYNACAGQb2YAxC1BSAGaiIDQb2YAxDZAyEEDAALAAtB9c4BQan9AEEtQeDyABAAAAsgAkHQAGokACAFC78BAQN/IwBBEGsiBCQAA0AgAS0AACIDBEAgAUEBaiEBAkACQAJAAkACQCADQSBqIAMgA8AiA0HBAGtBGkkbwEHiAGtBH3cOCgMEBAQEAAQEAgEECyACQYAIciECDAULIAJBgBByIQIMBAsgAkGAIHIhAgwDCyACQYDAAHIhAgwCCyAEIAM2AgQgBCADNgIAQdKfBCAEECcMAQsLIAJB//8DcUGA+ABHBEAgACAALwEkIAJyOwEkCyAEQRBqJABBAAsPACAAIAFBAUHmrAQQ6goLDgAgACABEKQBNgIEQQALDgAgACABEKQBNgIQQQALDgAgACABEKQBNgIAQQALQAECfyMAQRBrIgIkAEEBIQMgAUGfywFBAEH//wMgAkEMahC0AkUEQCAAIAIoAgw7AShBACEDCyACQRBqJAAgAws/AQJ/IwBBEGsiAiQAQQEhAyABQafVAUEAQegCIAJBDGoQtAJFBEAgACACLwEMNgIcQQAhAwsgAkEQaiQAIAMLVwEBfyMAQRBrIgIkAAJ/AkACQCABQYbVARAqRQRAIAAgAC8BJEEBcjsBJAwBCyABQZHVARAqDQELQQAMAQsgAiABNgIAQYCuBCACECdBAQsgAkEQaiQACw8AIAAgAUECQYutBBDqCgsOACAAIAEQpAE2AhhBAAtOAQJ/IwBBEGsiAiQAQQEhAyABQYrUAUGAf0H/ACACQQxqELQCRQRAIAAgAigCDDoAICAAIAAvASRBgAFyOwEkQQAhAwsgAkEQaiQAIAMLTQECfyMAQRBrIgIkAEEBIQMgAUH+0wFBAEH/ASACQQxqELQCRQRAIAAgAigCDDoAIiAAIAAvASRBwAByOwEkQQAhAwsgAkEQaiQAIAMLPwECfyMAQRBrIgIkAEEBIQMgAUHrzAFBAEH/ACACQQxqELQCRQRAIAAgAigCDDoAWEEAIQMLIAJBEGokACADC0wBAn8jAEEQayICJABBASEDIAFB78wBQQBB/wEgAkEMahC0AkUEQCAAIAIoAgw6ACEgACAALwEkQSByOwEkQQAhAwsgAkEQaiQAIAMLDgAgACABEKQBNgIUQQALHQAgACABQdqtBEGczAFBAkGZywFBBEGoywEQ+wYLXQEBf0EAIQACQEHojgstAABFDQADQCACBEAgAS0AACIDQSBPBEBBzI4LKAIAIAPAEM8BIABBAWohAAsgAUEBaiEBIAJBAWshAgwBCwsgAEUNAEHIjgtBiwI2AgALC/kDACABQc/VARAqRQRAQeiOC0EBOgAAQciOC0GIAjYCAA8LAkAgAUHdywEQKgRAIAFBoNMBECoNAQtByI4LQYUCNgIADwsgAUG91gEQKkUEQEHIjgtBiQI2AgBB6I4LQQA6AAAPCyABQfzNARAqRQRAQciOC0GHAjYCAA8LIAFBjcsBECpFBEBByI4LQYoCNgIADwsgAUHC2AEQKkUEQEHIjgtBjgI2AgAPCyABQaPKARAqRQRAQciOC0GPAjYCAA8LIAFBj80BECpFBEBByI4LQZACNgIADwsgAUH90gEQKkUEQEHIjgtBjQI2AgAPCyABQYfNARAqRQRAQciOC0GRAjYCAA8LIAFBjNgBECpFBEBByI4LQZICNgIADwsgAUHYywEQKkUEQEHIjgtBkwI2AgAPCyABQfbMARAqRQRAQciOCygCAEGbAkYEQEHIjgtBmgI2AgAPC0HIjgtBggI2AgAPCyABQZnMARAqRQRAQciOCygCAEGVAkYEQEHIjgtBlAI2AgAPC0HIjgtBlgI2AgAPCyABQdrLARAqRQRAQciOCygCAEGYAkYEQEHIjgtBlwI2AgAPC0HIjgtBmQI2AgAPCyABQZvUARAqRQRAQciOCygCAEGdAkYEQEHIjgtBnAI2AgAPC0HIjgtBgwI2AgAPCyABEJkPC4wFACABQc/VARAqRQRAQfgAEE0iAEH/AToAWCAAQX82AmQgAEHglwpBFiACQYXaARDGBEGEjwsgADYCAEHIjgtBngI2AgBB6I4LQQA6AAAPCwJAIAFB3csBECoEQCABQaDTARAqDQELQciOC0GEAjYCAEHojgtBADoAAA8LAkAgAUG91gEQKkUEQEHojgtBAToAAEHoABBNIgBBgYAENgJQIABBkJkKQRYgAkHA2gEQxgRByI4LQZ8CNgIADAELIAFBjcsBECpFBEAgACACQQAQggMhAEHIjgtBoAI2AgAMAQsgAUHC2AEQKkUEQCAAQQBBARCCAyEAQciOC0GiAjYCAAwBCyABQdjLARAqRQRAIABBAEEgEIIDIQBByI4LQacCNgIADAELIAFBo8oBECpFBEAgAEEAQQQQggMhAEHIjgtBowI2AgAMAQsgAUGPzQEQKkUEQCAAQQBBwAAQggMhAEHIjgtBpAI2AgAMAQsgAUH90gEQKkUEQCAAQQBBAhCCAyEAQciOC0GhAjYCAAwBCyABQYfNARAqRQRAIABBAEEIEIIDIQBByI4LQaUCNgIADAELIAFBjNgBECpFBEAgAEEAQRAQggMhAEHIjgtBpgI2AgAMAQsgAUH2zAEQKkUEQEGEjwtBADYCAEGEjwtB2JoKQQEgAkHA2QEQxgRByI4LQZsCNgIADwsgAUGZzAEQKkUEQEHIjgtBlQI2AgAPCyABQdrLARAqRQRAQciOC0GYAjYCAA8LIAFBm9QBECpFBEBBKBBNIgBB4JoKQQIgAkHU2QEQxgRByI4LQZ0CNgIADAELIAFB/M0BECpFBEBByI4LQYYCNgIADwsgARCZDw8LQYSPCyAANgIACw4AIAJEAAAAAAAA4D+iCyUAIAAgAaMiAEQAAAAAAADwPyAAoSAARAAAAAAAAOA/ZRsgAqILFAAgACABoyACokQAAAAAAADgP6ILHgBEAAAAAAAA8D8gACABo6EgAqJEAAAAAAAA4D+iCxcAIAAoAgBBB0YEQCAAKAJwQQEQ+A4LCwoAIAAgAUEBEHMLCwBB2IsLIAA2AgALC8KGCqMDAEGACAvl7AT/2P/gAMXQ08YAfgB7JXN9ACAtdGFncyB7JWQlcyVwfQAgJS4wZn0AJXMgeyAlcyB9AHxlZGdlbGFiZWx8ACAtZm9udCB7AHF1YXJ0egBpZHggPT0gc3oAY250ID09IHN6AGxvegBncmFwaHZpegBndndyaXRlX25vX3oAcG9ydGhveHkAc2NhbGV4eQAvc3ZnL25hdnkAaW52ZW1wdHkAbm9kZV9zZXRfaXNfZW1wdHkAbm9kZV9zdGFja19pc19lbXB0eQByZWZlcmVuY2UgdG8gYmluYXJ5IGVudGl0eQBhc3luY2hyb25vdXMgZW50aXR5AGluY29tcGxldGUgbWFya3VwIGluIHBhcmFtZXRlciBlbnRpdHkAZW50aXR5IGRlY2xhcmVkIGluIHBhcmFtZXRlciBlbnRpdHkAY2Fubm90IHN1c3BlbmQgaW4gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eQBYTUwgb3IgdGV4dCBkZWNsYXJhdGlvbiBub3QgYXQgc3RhcnQgb2YgZW50aXR5AHVuZGVmaW5lZCBlbnRpdHkAaW5maW5pdHkAZmFudGFzeQBTcGFyc2VNYXRyaXhfY29vcmRpbmF0ZV9mb3JtX2FkZF9lbnRyeQAvc3ZnL2l2b3J5AG91dCBvZiBtZW1vcnkARmVicnVhcnkASmFudWFyeQBndnBsdWdpbl9kb3RfbGF5b3V0X0xUWF9saWJyYXJ5AGd2cGx1Z2luX25lYXRvX2xheW91dF9MVFhfbGlicmFyeQBndnBsdWdpbl9jb3JlX0xUWF9saWJyYXJ5AGdhdGhlcl90aW1lX2VudHJvcHkAbm9kZXNfY29weQBhbGJhbnkASnVseQBTcGFyc2VNYXRyaXhfbXVsdGlwbHkAZXF1YWxseQBhc3NlbWJseQBzdW1tZXJza3kAc2h5AHNhdGlzZnkAYmVhdXRpZnkAbm9qdXN0aWZ5AENsYXNzaWZ5AC9zdmcvbGlnaHRncmV5AC9zdmcvZGltZ3JleQAvc3ZnL2RhcmtncmV5AC9zdmcvbGlnaHRzbGF0ZWdyZXkAL3N2Zy9kYXJrc2xhdGVncmV5AC9zdmcvc2xhdGVncmV5AHdlYmdyZXkAeDExZ3JleQAvc3ZnL2dyZXkAbW92ZSB0byBmcm9udCBsb2NrIGluY29uc2lzdGVuY3kAZXh0cmFjdF9hZGphY2VuY3kAbWVyZ2Vfb25ld2F5AGFycmF5AGFsbG9jQXJyYXkAL3N2Zy9saWdodGdyYXkAL3N2Zy9kaW1ncmF5AC9zdmcvZGFya2dyYXkAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyYXkAd2ViZ3JheQB4MTFncmF5AC9zdmcvZ3JheQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkALi4vLi4vbGliL2NncmFwaC9ncmFtbWFyLnkAJW0vJWQvJXkAcG9ydGhveXgAcG9ydGhvX3l4AHh4eABib3gAdmlld0JveABjaGtCb3VuZEJveAAvTWVkaWFCb3gAZ2V0X2VkZ2VfbGFiZWxfbWF0cml4AGlkZWFsX2Rpc3RhbmNlX21hdHJpeABtdXN0IG5vdCB1bmRlY2xhcmUgcHJlZml4AHVuYm91bmQgcHJlZml4AGh0bWxsZXgAbm9kZV9zZXRfaW5kZXgAbWF4ACMlMDJ4JTAyeCUwMnglMDJ4ACMlMDJ4JTAyeCUwMngAIyUyeCUyeCUyeCUyeAAjJTF4JTF4JTF4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAcmFycm93AGxhcnJvdwBIZWx2ZXRpY2EtTmFycm93AGFycm93X2xlbmd0aF9jcm93AC9zdmcvc25vdwBzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfc2xvdwAvc3ZnL2xpZ2h0eWVsbG93AC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL3llbGxvdwBmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93AGZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3cAY291cmllcm5ldwBTcHJpbmdTbW9vdGhlcl9uZXcAVHJpYW5nbGVTbW9vdGhlcl9uZXcAZGlhZ19wcmVjb25fbmV3AFF1YWRUcmVlX25ldwBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcjJfbmV3AHIgJiYgbiAmJiBuZXcAc2tldwBzdHJ2aWV3AC9zdmcvaG9uZXlkZXcAIC1hbmNob3IgdwBzb3J0dgBwb3Y6cG92AE5vdgBpbnYAZXF1aXYAcGl2AG5vbmFtZS5ndgBjYyVzXyV6dQBjYyVzKyV6dQAvc3ZnL3BlcnUAbnUAbXUAJWMlbGx1AFRodQB0YXUAVGF1AE51AE11AF9wb3J0XyVzXyglZClfKCVkKV8ldQBwbGFpbnRleHQAPHRleHQAc3RyZXNzd3QAaW5wdXQAdGV4dGxheW91dABkb3RfbGF5b3V0AG5lYXRvX2xheW91dABpbml0TGF5b3V0AGNsdXN0AG1hcENsdXN0AGxhYmVsanVzdABzY0FkanVzdABBdWd1c3QAZWRnZXNmaXJzdABub2Rlc2ZpcnN0AG1heGltYWxfaW5kZXBlbmRlbnRfZWRnZV9zZXRfaGVhdmVzdF9lZGdlX3Blcm5vZGVfc3VwZXJub2Rlc19maXJzdABleGlzdAByZWFsaWduTm9kZWxpc3QAYXBwZW5kTm9kZWxpc3QAZGVmYXVsdGRpc3QAbWluZGlzdABwb3dlcl9kaXN0AGdyYXBoX2Rpc3QAYXZnX2Rpc3QAZ2V0RWRnZUxpc3QAaXF1ZXN0AGxvd2FzdABzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfZmFzdABndl9zb3J0AGRlZ2xpc3Rfc29ydAB2aWV3cG9ydAB0YWlscG9ydAB1bmV4cGVjdGVkIHBhcnNlciBzdGF0ZSAtIHBsZWFzZSBzZW5kIGEgYnVnIHJlcG9ydABoZWFkcG9ydABpbnNlcnQAUlRyZWVJbnNlcnQAZmluZFNWZXJ0AHN0YXJ0AHBhcnQAZXN0aW1hdGVfdGV4dF93aWR0aF8xcHQAcXVvdAB/cm9vdABub3QAZW1pdF94ZG90AHhkb3Q6eGRvdABlcHM6eGRvdABzdmc6eGRvdABqcGc6eGRvdABwbmc6eGRvdABqcGVnOnhkb3QAZ2lmOnhkb3QAanBlOnhkb3QAeGRvdDEuNDp4ZG90AHhkb3QxLjI6eGRvdABzZG90AG1pZGRvdABndjpkb3QAcGxhaW4tZXh0OmRvdABkb3Q6ZG90AGVwczpkb3QAY2Fub246ZG90AHBsYWluOmRvdABzdmc6ZG90AGpwZzpkb3QAcG5nOmRvdABqcGVnOmRvdABnaWY6ZG90AGpwZTpkb3QAf2JvdABkb0RvdABvYmpsaXN0X2Zyb250AG5vZGVsaXN0X2Zyb250AHBvaW50c19mcm9udABzcGFuLT5mb250AHZhZ3hicHJpbnQAbG9jYXRlX2VuZHBvaW50AGRlY2lkZV9wb2ludABVbnNhdGlzZmllZCBjb25zdHJhaW50AHRyYW5zcGFyZW50AGNvbXBvbmVudABpbnZhbGlkIGFyZ3VtZW50AGNvbW1lbnQAanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50AGNlbnQAaSA9PSBlY250AGFyaWFsbXQAbHQAY2lyY3VpdABwb2x5X2luaXQATXVsdGlsZXZlbF9pbml0AG5zbGltaXQAbWNsaW1pdABQb3J0cmFpdABsaWdodAB2aXJ0dWFsX3dlaWdodABsaGVpZ2h0AEtQX1JpZ2h0AEJvb2ttYW4tTGlnaHQAZ3QAS1BfTGVmdABhZ3hzZXQAY2hhcnNldABpbnNldABiaXRhcnJheV9yZXNldABzdWJzZXQAYml0YXJyYXlfc2V0AG5vZGVsaXN0X3NldABpbnRzX3NldABub2Rlc19zZXQAc2NhcmxldAAvc3ZnL2Rhcmt2aW9sZXQAL3N2Zy9ibHVldmlvbGV0AC9zdmcvdmlvbGV0AFRyZWJ1Y2hldABhZ3hnZXQAdGFpbHRhcmdldABsYWJlbHRhcmdldABlZGdldGFyZ2V0AGhlYWR0YXJnZXQAYml0YXJyYXlfZ2V0AG5vZGVsaXN0X2dldABzZWdfbGlzdF9nZXQAc2FtZV9saXN0X2dldABlZGdlX2xpc3RfZ2V0AHBvaW50c19nZXQAYm94ZXNfZ2V0AHRyaWFuZ2xlc19nZXQAY3ljbGVzX2dldABub2Rlc19nZXQAYmV6aWVyX3BhdGhfZ2V0AHN0eWxlc2hlZXQAc3RyaWN0AGFnY29weWRpY3QAYWdtYWtlZGF0YWRpY3QAcmVjLT5kaWN0ID09IGRhdGFkaWN0AHdyaXRlX2RpY3QAc2VjdABlbmNvZGluZyBzcGVjaWZpZWQgaW4gWE1MIGRlY2xhcmF0aW9uIGlzIGluY29ycmVjdABhc3BlY3QAbGF5ZXJzZWxlY3QAQ29tYmluZVJlY3QAS1BfU3VidHJhY3QAUXVhZFRyZWVfcmVwdWxzaXZlX2ZvcmNlX2ludGVyYWN0AGNvbXBhY3QAT2N0AHJlcXVlc3RlZCBmZWF0dXJlIHJlcXVpcmVzIFhNTF9EVEQgc3VwcG9ydCBpbiBFeHBhdABsYWJlbGZsb2F0AGxhYmVsX2Zsb2F0AFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfZm9ybWF0AC9zdmcvd2hlYXQAb2JqbGlzdF9hdABub2RlbGlzdF9hdABzYW1lX2xpc3RfYXQAcG9pbnRzX2F0AHRyaWFuZ2xlc19hdABub2Rlc19hdABTYXQAQWdyYXBoaW5mb190AEFnZWRnZWluZm9fdABBZ25vZGVpbmZvX3QAXHQAZmxhdGluZGV4KGFnaGVhZChlKSkgPCBNLT5ucm93cwBtaW51cwBvcGx1cwBoZWFydHMAc2FtcGxlcG9pbnRzAGRpcmVkZ2Vjb25zdHJhaW50cwBsZXZlbCBhc3NpZ25tZW50IGNvbnN0cmFpbnRzAHh5IHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHl4IHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHh5IG9ydGhvZ29uYWwgY29uc3RyYWludHMAeXggb3J0aG9nb25hbCBjb25zdHJhaW50cwBsaW5lIHNlZ21lbnRzAHJlY3RzAGFjY291bnRpbmdSZXBvcnRTdGF0cwBlbnRpdHlUcmFja2luZ1JlcG9ydFN0YXRzAFphcGZEaW5nYmF0cwByZW1pbmNyb3NzAGNvbXByZXNzAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAGJyYXNzAGNsYXNzAGFwcGx5YXR0cnMAYWdtYWtlYXR0cnMAYmluZGF0dHJzAHBhcnNlX2xheWVycwBta0NsdXN0ZXJzAHJvdW5kX2Nvcm5lcnMAbWFrZV9iYXJyaWVycwBjZGF0YS5udG9wbGV2ZWwgPT0gYWdubm9kZXMoZykgLSBjZGF0YS5udmFycwBjYW5ub3QgcmVhbGxvYyBvcHMAY2Fubm90IHJlYWxsb2MgcG5scHMAZXBzAGNvcmVfbG9hZGltYWdlX3BzAGVwczpwcwBwczI6cHMAKGxpYik6cHMAZ3ZfdHJpbV96ZXJvcwBhZ3hidWZfdHJpbV96ZXJvcwB0ZXhneXJlaGVyb3MAaW1hZ2Vwb3MAdGlub3MAc2V0RWRnZUxhYmVsUG9zAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMAeGxpbnRlcnNlY3Rpb25zAGNvbHVtbnMAbm9kZXNfY29udGFpbnMAZGVqYXZ1c2FucwBuaW1idXNzYW5zAGxpYmVyYXRpb25zYW5zAGZyZWVzYW5zAE9wZW5TYW5zAG9mZnNldCA9PSBuX3Rlcm1zAGRpdGVtcwBkaWFtcwBmbGF0aW5kZXgoYWd0YWlsKGUpKSA8IE0tPm5jb2xzAGNhbm5vdCByZWFsbG9jIGRxLnBubHMAY2Fubm90IHJlYWxsb2MgcG5scwBsZXZlbHMAZm9yY2VsYWJlbHMAZGlhZ29uYWxzAG1lcmdlX3JhbmtzAGJ1aWxkX3JhbmtzAG9ianBscG1rcwBzcGxpdEJsb2NrcwBpbnZpcwBjYW5ub3QgcmVhbGxvYyB0cmlzAENhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzAHllcwBzaG93Ym94ZXMAYmVhdXRpZnlfbGVhdmVzAGF0dGFjaF9lZGdlX2xhYmVsX2Nvb3JkaW5hdGVzAHBvbHlsaW5lcwBzcGxpbmVzAG9ydGhvZ29uYWwgbGluZXMAdGV4Z3lyZXRlcm1lcwBvdGltZXMAVGltZXMAZm9udG5hbWVzAHByZWZpeCBtdXN0IG5vdCBiZSBib3VuZCB0byBvbmUgb2YgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBuYW1lcwBTcGFyc2VNYXRyaXhfc3VtX3JlcGVhdF9lbnRyaWVzAHBlcmlwaGVyaWVzAEdldEJyYW5jaGVzAGYgPCBncmFwaFtqXS5uZWRnZXMAbWlubWF4X2VkZ2VzAG1ha2VTdHJhaWdodEVkZ2VzAHVuZG9DbHVzdGVyRWRnZXMAY29tcG91bmRFZGdlcwBtZXJnZV90cmVlcwBfX2NsdXN0ZXJub2RlcwBhZ25ub2RlcwBORF9pZChucCkgPT0gbl9ub2RlcwBMb2FkTm9kZXMAc2lkZXMAc3BhZGVzAHZlcnRpY2VzAGNvb3JkcwBzZXRib3VuZHMAbWRzAGNkcwBtYWtlU2VsZkFyY3MAZW1pdF9lZGdlX2dyYXBoaWNzAGNsdWJzAGNvbnNvbGFzACVsZiUycwAKU3RyaW5nIHN0YXJ0aW5nOjwlLjgwcwAKU3RyaW5nIHN0YXJ0aW5nOiIlLjgwcwAgJS4qcwAlLipzJXMlcwBleHBhdDogQWNjb3VudGluZyglcCk6IERpcmVjdCAlMTBsbHUsIGluZGlyZWN0ICUxMGxsdSwgYW1wbGlmaWNhdGlvbiAlOC4yZiVzACAlczolcwBfXyVkOiVzAC8lcy8lcwAlcy0lcwAsJXMAIGZvbnQtZmFtaWx5PSIlcwAiIHN0cm9rZS1kYXNoYXJyYXk9IiVzACIgY2xhc3M9IiVzAHBvbHkgJXMAKCglZiwlZiksKCVmLCVmKSkgJXMgJXMAY29sb3IgJXMAIFRpdGxlOiAlcwAic3RyaWN0IjogJXMAciAmJiBzAGNvdXIAdXRyAGFwcGVuZGF0dHIAYWRkYXR0cgBiZWdpbnN0cgBzdHJ2aWV3X3N0cgBwb3ZfY29sb3JfYXNfc3RyAHZwc2MhPW51bGxwdHIAYmVuZFRvU3RyAHVhcnIAY3JhcnIAbGFycgBoYXJyAGRhcnIAdUFycgByQXJyAGxBcnIAaEFycgBkQXJyAHIgJiYgcnIAQXByAFNwYXJzZU1hdHJpeF9tdWx0aXBseV92ZWN0b3IAdGVybWluYXRvcgBpbnN1bGF0b3IAdGV4Z3lyZWN1cnNvcgBzeW50YXggZXJyb3IAbW9uZXlfZ2V0IGVycm9yAEVycm9yAHJmbG9vcgBsZmxvb3IAbGFiZWxmb250Y29sb3IAcGVuY29sb3IAZmlsbGNvbG9yAGJnY29sb3IAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBuZWlnaGJvcgBzdHlsZV9vcgBtcgByYW5rZGlyAHBhZ2VkaXIAbGF5ZXIATm9kZUNvdmVyAC9zdmcvc2lsdmVyAGNsdXN0ZXIAZXhwYW5kQ2x1c3RlcgBycHJvbW90ZXIAbHByb21vdGVyAGNlbnRlcgBtYXhpdGVyAHBhcnRpYWwgY2hhcmFjdGVyACEgcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIAZGtncmVlbmNvcHBlcgBjb29sY29wcGVyAGd2X3NvcnRfY29tcGFyX3dyYXBwZXIAdGFwZXIAb3ZlcmxhcF9iZXppZXIAZmlnX2JlemllcgBjb3VyaWVyAENvdXJpZXIAaGllcgBkYWdnZXIARGFnZ2VyAG91dHB1dG9yZGVyAHBvc3RvcmRlcgBmbGF0X3Jlb3JkZXIAY2VsbGJvcmRlcgBmaXhMYWJlbE9yZGVyAGN5bGluZGVyAC9zdmcvbGF2ZW5kZXIAcmVuZGVyAGZvbGRlcgBjbHVzdGVyX2xlYWRlcgBORF9VRl9zaXplKG4pIDw9IDEgfHwgbiA9PSBsZWFkZXIAT2N0b2JlcgByZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIgbnVtYmVyAE5vdmVtYmVyAFNlcHRlbWJlcgBEZWNlbWJlcgBtYWNyAGJyAHN0YXIAZmVsZHNwYXIAcmVndWxhcgBzYW1lX2xpc3RfY2xlYXIAaW9zX2Jhc2U6OmNsZWFyAGJydmJhcgBNYXIAXHIATkRfcmFuayh2KSA9PSByAHN0cmVxAHN0cnZpZXdfZXEAc3Rydmlld19zdHJfZXEAc3Rydmlld19jYXNlX3N0cl9lcQBzdHJ2aWV3X2Nhc2VfZXEAdnAAJSVCZWdpblByb2xvZwovRG90RGljdCAyMDAgZGljdCBkZWYKRG90RGljdCBiZWdpbgoKL3NldHVwTGF0aW4xIHsKbWFyawovRW5jb2RpbmdWZWN0b3IgMjU2IGFycmF5IGRlZgogRW5jb2RpbmdWZWN0b3IgMAoKSVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwKRW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQKCiUgU2V0IHVwIElTTyBMYXRpbiAxIGNoYXJhY3RlciBlbmNvZGluZwovc3Rhcm5ldElTTyB7CiAgICAgICAgZHVwIGR1cCBmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KICAgICAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9eyBwb3AgcG9wIH0gaWZlbHNlCiAgICAgICAgfSBmb3JhbGwKICAgICAgICAvRW5jb2RpbmcgRW5jb2RpbmdWZWN0b3IgZGVmCiAgICAgICAgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQKfSBkZWYKL1RpbWVzLVJvbWFuIHN0YXJuZXRJU08gZGVmCi9UaW1lcy1JdGFsaWMgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGQgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGRJdGFsaWMgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYSBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhLU9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYS1Cb2xkIHN0YXJuZXRJU08gZGVmCi9IZWx2ZXRpY2EtQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXIgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXItT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovQ291cmllci1Cb2xkIHN0YXJuZXRJU08gZGVmCi9Db3VyaWVyLUJvbGRPYmxpcXVlIHN0YXJuZXRJU08gZGVmCmNsZWFydG9tYXJrCn0gYmluZCBkZWYKCiUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCBncmFwaHZpeiAwIDAKL2Nvb3JkLWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYKL2RlZmF1bHQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgovY29vcmRmb250IGNvb3JkLWZvbnQtZmFtaWx5IGZpbmRmb250IDggc2NhbGVmb250IGRlZgoKL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYKL3NldF9zY2FsZSB7CiAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYKICAgICAgIHNjYWxlCn0gYmluZCBkZWYKCiUgc3R5bGVzCi9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmCi9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYKL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmCi9maWxsZWQgeyB9IGJpbmQgZGVmCi91bmZpbGxlZCB7IH0gYmluZCBkZWYKL3JvdW5kZWQgeyB9IGJpbmQgZGVmCi9kaWFnb25hbHMgeyB9IGJpbmQgZGVmCi90YXBlcmVkIHsgfSBiaW5kIGRlZgoKJSBob29rcyBmb3Igc2V0dGluZyBjb2xvciAKL25vZGVjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2VkZ2Vjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2dyYXBoY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmCi9ub3Bjb2xvciB7cG9wIHBvcCBwb3B9IGJpbmQgZGVmCgovYmVnaW5wYWdlIHsJJSBpIGogbnBhZ2VzCgkvbnBhZ2VzIGV4Y2ggZGVmCgkvaiBleGNoIGRlZgoJL2kgZXhjaCBkZWYKCS9zdHIgMTAgc3RyaW5nIGRlZgoJbnBhZ2VzIDEgZ3QgewoJCWdzYXZlCgkJCWNvb3JkZm9udCBzZXRmb250CgkJCTAgMCBtb3ZldG8KCQkJKFwoKSBzaG93IGkgc3RyIGN2cyBzaG93ICgsKSBzaG93IGogc3RyIGN2cyBzaG93IChcKSkgc2hvdwoJCWdyZXN0b3JlCgl9IGlmCn0gYmluZCBkZWYKCi9zZXRfZm9udCB7CglmaW5kZm9udCBleGNoCglzY2FsZWZvbnQgc2V0Zm9udAp9IGRlZgoKJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAovYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAoJL3RleHQgZXhjaCBkZWYKCS93aWR0aCBleGNoIGRlZgoJZ3NhdmUKCQl3aWR0aCAwIGd0IHsKCQkJW10gMCBzZXRkYXNoCgkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cKCQl9IGlmCglncmVzdG9yZQp9IGRlZgoKL2JveHByaW0gewkJCQklIHhjb3JuZXIgeWNvcm5lciB4c2l6ZSB5c2l6ZQoJCTQgMiByb2xsCgkJbW92ZXRvCgkJMiBjb3B5CgkJZXhjaCAwIHJsaW5ldG8KCQkwIGV4Y2ggcmxpbmV0bwoJCXBvcCBuZWcgMCBybGluZXRvCgkJY2xvc2VwYXRoCn0gYmluZCBkZWYKCi9lbGxpcHNlX3BhdGggewoJL3J5IGV4Y2ggZGVmCgkvcnggZXhjaCBkZWYKCS95IGV4Y2ggZGVmCgkveCBleGNoIGRlZgoJbWF0cml4IGN1cnJlbnRtYXRyaXgKCW5ld3BhdGgKCXggeSB0cmFuc2xhdGUKCXJ4IHJ5IHNjYWxlCgkwIDAgMSAwIDM2MCBhcmMKCXNldG1hdHJpeAp9IGJpbmQgZGVmCgovZW5kcGFnZSB7IHNob3dwYWdlIH0gYmluZCBkZWYKL3Nob3dwYWdlIHsgfSBkZWYKCi9sYXllcmNvbG9yc2VxCglbCSUgbGF5ZXIgY29sb3Igc2VxdWVuY2UgLSBkYXJrZXN0IHRvIGxpZ2h0ZXN0CgkJWzAgMCAwXQoJCVsuMiAuOCAuOF0KCQlbLjQgLjggLjhdCgkJWy42IC44IC44XQoJCVsuOCAuOCAuOF0KCV0KZGVmCgovbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmCgovc2V0bGF5ZXIgey9tYXhsYXllciBleGNoIGRlZiAvY3VybGF5ZXIgZXhjaCBkZWYKCWxheWVyY29sb3JzZXEgY3VybGF5ZXIgMSBzdWIgbGF5ZXJsZW4gbW9kIGdldAoJYWxvYWQgcG9wIHNldGhzYmNvbG9yCgkvbm9kZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZWRnZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZ3JhcGhjb2xvciB7bm9wY29sb3J9IGRlZgp9IGJpbmQgZGVmCgovb25sYXllciB7IGN1cmxheWVyIG5lIHtpbnZpc30gaWYgfSBkZWYKCi9vbmxheWVycyB7CgkvbXl1cHBlciBleGNoIGRlZgoJL215bG93ZXIgZXhjaCBkZWYKCWN1cmxheWVyIG15bG93ZXIgbHQKCWN1cmxheWVyIG15dXBwZXIgZ3QKCW9yCgl7aW52aXN9IGlmCn0gZGVmCgovY3VybGF5ZXIgMCBkZWYKCiUlRW5kUmVzb3VyY2UKJSVFbmRQcm9sb2cKJSVCZWdpblNldHVwCjE0IGRlZmF1bHQtZm9udC1mYW1pbHkgc2V0X2ZvbnQKJSAvYXJyb3dsZW5ndGggMTAgZGVmCiUgL2Fycm93d2lkdGggNSBkZWYKCiUgbWFrZSBzdXJlIHBkZm1hcmsgaXMgaGFybWxlc3MgZm9yIFBTLWludGVycHJldGVycyBvdGhlciB0aGFuIERpc3RpbGxlcgovcGRmbWFyayB3aGVyZSB7cG9wfSB7dXNlcmRpY3QgL3BkZm1hcmsgL2NsZWFydG9tYXJrIGxvYWQgcHV0fSBpZmVsc2UKJSBtYWtlICc8PCcgYW5kICc+Picgc2FmZSBvbiBQUyBMZXZlbCAxIGRldmljZXMKL2xhbmd1YWdlbGV2ZWwgd2hlcmUge3BvcCBsYW5ndWFnZWxldmVsfXsxfSBpZmVsc2UKMiBsdCB7CiAgICB1c2VyZGljdCAoPDwpIGN2biAoWykgY3ZuIGxvYWQgcHV0CiAgICB1c2VyZGljdCAoPj4pIGN2biAoWykgY3ZuIGxvYWQgcHV0Cn0gaWYKCiUlRW5kU2V0dXAAc3VwAGdyb3VwAGN1cAB0aGluc3AAZW5zcABlbXNwAG5ic3AAcGVycAB3ZWllcnAAZ2VuZXJhdGUtY29uc3RyYWludHMuY3BwAGJsb2NrLmNwcABjc29sdmVfVlBTQy5jcHAAf3RvcABwcm9wAGFneGJwb3AAbm9wAGFzeW1wAGNvbXAAZmluZENDb21wAGJtcABzY2FsZV9jbGFtcAB4bHAAbHAgIT0gY2xwAHRhaWxfbHAAaGVhZF9scAB0YWlsdG9vbHRpcABsYWJlbHRvb2x0aXAAZWRnZXRvb2x0aXAAaGVhZHRvb2x0aXAAaGVsbGlwAHRhaWxjbGlwAGhlYWRjbGlwAC9zdmcvcGFwYXlhd2hpcABocAB0cmFuc3Bvc2Vfc3RlcABsYXllcmxpc3RzZXAAbGF5ZXJzZXAAaXBzZXAAcmFua3NlcABub2Rlc2VwAHN1YmdyYXBocyBuZXN0ZWQgbW9yZSB0aGFuICVkIGRlZXAAU2VwAHNmZHAAY3AAd2VicABpZG1hcABjbHVzdGVyX21hcABjbWFweDptYXAAZXBzOm1hcABjbWFweF9ucDptYXAAaW1hcF9ucDptYXAAaXNtYXA6bWFwAGltYXA6bWFwAGNtYXA6bWFwAHN2ZzptYXAAanBnOm1hcABwbmc6bWFwAGpwZWc6bWFwAGdpZjptYXAAanBlOm1hcABvdmVybGFwAE92ZXJsYXAAbGV2ZWxzZ2FwAGNhcABLUF9VcAAlSTolTTolUyAlcABzdGFydCA8PSBwAHJzcXVvAGxzcXVvAHJkcXVvAGxkcXVvAGJkcXVvAHNicXVvAHJzYXF1bwBsc2FxdW8AcmFxdW8AbGFxdW8AYXV0bwBOdW5pdG8AL3N2Zy90b21hdG8AbmVhdG8AZXVybwAvc3ZnL2dhaW5zYm9ybwBNZXRob2RaZXJvAG1pY3JvAG5pbWJ1c21vbm8AbGliZXJhdGlvbm1vbm8AZnJlZW1vbm8AYXJpbW8AcmF0aW8AcG9ydGhvAHJobwBSaG8AL3N2Zy9pbmRpZ28AcGluZm8AY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AY2xfZWRnZV9pbmZvAGdldFBhY2tJbmZvAG1ha2VJbmZvAHBhcnNlUGFja01vZGVJbmZvAGNpcmNvAGljbwBcJTAzbwAvc3ZnL3Jvc3licm93bgAvc3ZnL3NhbmR5YnJvd24AdmVyeWRhcmticm93bgAvc3ZnL3NhZGRsZWJyb3duAC9zdmcvYnJvd24AS1BfRG93bgBjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1bgBTdW4ASnVuAHRob3JuAC9zdmcvY3JpbXNvbgB4ZG90X2pzb24AeGRvdF9qc29uOmpzb24AanNvbjA6anNvbgBvbWljcm9uAE9taWNyb24Ac2Nhcm9uAFNjYXJvbgB3ZWJtYXJvb24AeDExbWFyb29uAC9zdmcvbWFyb29uAC9zdmcvbGlnaHRzYWxtb24AL3N2Zy9kYXJrc2FsbW9uAC9zdmcvc2FsbW9uAHVwc2lsb24AZXBzaWxvbgBVcHNpbG9uAEVwc2lsb24AcmVzb2x1dGlvbgBkaXN0b3J0aW9uAHN0ZDo6ZXhjZXB0aW9uAGRvdF9wb3NpdGlvbgBTZXR0aW5nIHVwIHN0cmVzcyBmdW5jdGlvbgB1bmNsb3NlZCBDREFUQSBzZWN0aW9uAHBvc3RhY3Rpb24Acm90YXRpb24Ab3JpZW50YXRpb24AYWJvbWluYXRpb24AYWNjb3VudGluZ0dldEN1cnJlbnRBbXBsaWZpY2F0aW9uAHhkb3R2ZXJzaW9uAFNUc2V0VW5pb24APHBvbHlnb24AaGV4YWdvbgBzZXB0YWdvbgBwZW50YWdvbgB0cmlwbGVvY3RhZ29uAGRvdWJsZW9jdGFnb24AL3N2Zy9sZW1vbmNoaWZmb24ATW9uAHBsdXNtbgBub3RpbgBpc2luAC9zdmcvbW9jY2FzaW4AcGluAG1pbgB2b3JvX21hcmdpbgBpbmZpbgBvbmVkX29wdGltaXplcl90cmFpbgBwbGFpbgBtYWtlX2NoYWluAG1lcmdlX2NoYWluAGRlbGV0ZU1pbgBmaW5kTWluAHZhbGlnbgBiYWxpZ24AeWVuAE11bHRpbGV2ZWxfY29hcnNlbgBjdXJyZW4AUG9ic29wZW4AZ3Z1c2Vyc2hhcGVfb3BlbgBlbnRpdHlUcmFja2luZ09uT3BlbgAvc3ZnL2xpbmVuAGRpbWVuAG1pbmxlbgBzdHlsZV90b2tlbgB1bmNsb3NlZCB0b2tlbgAvc3ZnL3llbGxvd2dyZWVuAG1lZGl1bWZvcmVzdGdyZWVuAC9zdmcvZm9yZXN0Z3JlZW4AL3N2Zy9saWdodGdyZWVuAGh1bnRlcnNncmVlbgAvc3ZnL2xhd25ncmVlbgAvc3ZnL2RhcmtncmVlbgAvc3ZnL21lZGl1bXNwcmluZ2dyZWVuAC9zdmcvc3ByaW5nZ3JlZW4AL3N2Zy9kYXJrb2xpdmVncmVlbgAvc3ZnL2xpbWVncmVlbgAvc3ZnL3BhbGVncmVlbgB3ZWJncmVlbgAvc3ZnL2xpZ2h0c2VhZ3JlZW4AL3N2Zy9tZWRpdW1zZWFncmVlbgAvc3ZnL2RhcmtzZWFncmVlbgAvc3ZnL3NlYWdyZWVuAHgxMWdyZWVuAC9zdmcvZ3JlZW4AR3JlZW4AL3N2Zy9saWdodGN5YW4AL3N2Zy9kYXJrY3lhbgAvc3ZnL2N5YW4AbmV3dGFuAGRhcmt0YW4AL3N2Zy90YW4Acm93c3BhbgBjb2xzcGFuAG5hbgB0aW1lc25ld3JvbWFuAG5pbWJ1c3JvbWFuAHRpbWVzcm9tYW4AVGltZXMtUm9tYW4AUGFsYXRpbm8tUm9tYW4ATmV3Q2VudHVyeVNjaGxiay1Sb21hbgBKYW4AR0RfcmFuayhnKVtyXS5uIDw9IEdEX3JhbmsoZylbcl0uYW4AYWd4YnB1dF9uAFxuAG5fbm9kZXMgPT0gZ3JhcGgtPm4AQS0+bSA9PSBBLT5uAGpvYi0+b2JqLT51Lm4AcywlbGYsJWxmJW4AIGUsJWxmLCVsZiVuACVkICUxWyJdJW4AdiA9PSBuAG56YyA9PSBuAGIgPT0gbgBuY2x1c3RlciA8PSBuAHIgJiYgbgBwc3ltAGFsZWZzeW0AdGhldGFzeW0AcXVhbnR1bQBzdW0AL3N2Zy9wbHVtAGludnRyYXBleml1bQBtZWRpdW0AOTpwcmlzbQBscm0AY3VzdG9tAGFwdHItPnRhZyA9PSBUX2F0b20AL2Rldi91cmFuZG9tAHJsbQBzaW0ASU1EU19naXZlbl9kaW0Ab3JkbQBwYXJhbGxlbG9ncmFtAC9zdmcvbWludGNyZWFtAEp1bAB0bABmcmFzbABTeW1ib2wAZmluZENvbAA8P3htbAB5dW1sAHV1bWwAb3VtbABpdW1sAGV1bWwAYXVtbABZdW1sAFV1bWwAT3VtbABJdW1sAEV1bWwAQXVtbABjb3JlX2xvYWRpbWFnZV92cm1sAGpwZzp2cm1sAHBuZzp2cm1sAGpwZWc6dnJtbABnaWY6dnJtbABqcGU6dnJtbABidWxsAGZpbGwAL3N2Zy9zZWFzaGVsbABmb3JhbGwAQXByaWwAcGVybWlsAHJjZWlsAGxjZWlsAGNjZWRpbABDY2VkaWwAYXJyb3d0YWlsAGx0YWlsAHNhbWV0YWlsAGxldmVsID49IDAgJiYgbGV2ZWwgPD0gbi0+bGV2ZWwAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAoKm4pLT5sZXZlbABzdHJlc3NfbWFqb3JpemF0aW9uX2tEX21rZXJuZWwAaXNfcGFyYWxsZWwAQ2FsY3VsYXRpbmcgY2lyY3VpdCBtb2RlbABDYWxjdWxhdGluZyBzdWJzZXQgbW9kZWwAQ2FsY3VsYXRpbmcgTURTIG1vZGVsAHhsYWJlbAB0YWlsbGFiZWwAaGVhZGxhYmVsAG1ha2VfbGFiZWwAZ3JhcGggbGFiZWwAaWV4Y2wAb2JqcC0+bGJsAG92YWwAbWVyZ2V2aXJ0dWFsAC9zdmcvbGlnaHRjb3JhbAAvc3ZnL2NvcmFsAFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfYXJyYXlzX2ludGVybmFsAE11bHRpbGV2ZWxfY29hcnNlbl9pbnRlcm5hbABRdWFkVHJlZV9hZGRfaW50ZXJuYWwAYXJyb3dfbGVuZ3RoX25vcm1hbABhcmlhbAByYWRpYWwAL3N2Zy90ZWFsAHJlYWwAbG9jYWwAZXN0aW1hdGVfY2hhcmFjdGVyX3dpZHRoX2Nhbm9uaWNhbABnbG9iYWwAcS0+bAAuLi8uLi9saWIvY2dyYXBoL3NjYW4ubAB0azp0awBnaWY6dGsAcGF0Y2h3b3JrAHRvawBib29rAEF2YW50R2FyZGUtQm9vawBzaW5rAG92ZXJsYXBfc2hyaW5rAHNwaWN5cGluawAvc3ZnL2hvdHBpbmsAL3N2Zy9saWdodHBpbmsAL3N2Zy9kZWVwcGluawBuZW9ucGluawAvc3ZnL3BpbmsAbmV3cmFuawBjbHVzdGVycmFuawBfbmV3X3JhbmsAaW5zdGFsbF9pbl9yYW5rAHJlbW92ZV9mcm9tX3JhbmsAL3N2Zy9jb3Juc2lsawBvbmVibG9jawB2LT5sZWZ0LT5ibG9jayA9PSB2LT5yaWdodC0+YmxvY2sAL3N2Zy9maXJlYnJpY2sAUFFjaGVjawBwYWNrAC9zdmcvYmxhY2sAQmxhY2sAZXN0YWNrX3BvcF9iYWNrAHp3agB6d25qAGpvYi0+b2JqAGdldGludHJzeGkAcHNpAFBzaQBDYWxpYnJpAEZyaQB0d29waQBkcGkAdm9yb25vaQBWb3Jvbm9pAGNoYW5pAGRlbWkAQm9va21hbi1EZW1pAEF2YW50R2FyZGUtRGVtaQAvc3ZnL2RhcmtraGFraQAvc3ZnL2toYWtpAHBoaQBjaGkAUGhpAENoaQBkaQBYaQBQaQBORF9pZChucCkgPT0gaQBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcl9zbW9vdGgAU3ByaW5nU21vb3RoZXJfc21vb3RoAGJvdGgAc3RhcnRzd2l0aABsaW5lbGVuZ3RoAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGF2ZXJhZ2VfZWRnZV9sZW5ndGgAZXRoAHBlbndpZHRoAGx3aWR0aABzZXRsaW5ld2lkdGgAUHNob3J0ZXN0cGF0aABzaG9ydHBhdGgAZm9udHBhdGgAUG9ic3BhdGgAYmVnaW5wYXRoAGltYWdlcGF0aABlbmRwYXRoAHN0cmFpZ2h0X3BhdGgAbWFwX3BhdGgAPHBhdGgAY2Fubm90IGZpbmQgdHJpYW5nbGUgcGF0aABxdWV1ZV9wdXNoAC9zdmcvbGF2ZW5kZXJibHVzaABmbGVzaABvc2xhc2gAT3NsYXNoAGR0c3RyaGFzaABuZGFzaABtZGFzaABkaWdyYXBoAHN1YmdyYXBoAGNvbnN0cnVjdF9ncmFwaABjaGtTZ3JhcGgAY2xvc2VzdF9wYWlyczJncmFwaABhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABjb25uZWN0R3JhcGgAdXBzaWgAJXNsaW5lLXRocm91Z2gAZmxhdF9zZWFyY2gAY2hhblNlYXJjaABSVHJlZVNlYXJjaABNYXJjaABEaXNjb25CcmFuY2gAUGlja0JyYW5jaABBZGRCcmFuY2gALi4vLi4vbGliL2NncmFwaC9iaXRhcnJheS5oAC4uLy4uL2xpYi9jZ3JhcGgvc3Rydmlldy5oAC4uLy4uL2xpYi9jaXJjb2dlbi9ub2RlbGlzdC5oAC4uLy4uL2xpYi9jZ3JhcGgvc29ydC5oAC4uLy4uL2xpYi9jZ3JhcGgvbm9kZV9zZXQuaAAuLi8uLi9saWIvY29tbW9uL2JveGVzLmgALi4vLi4vbGliL29ydGhvL3N0cnVjdHVyZXMuaAAuLi8uLi9saWIvZG90Z2VuL2RvdHByb2NzLmgALi4vLi4vbGliL3V0aWwvc3RyZXEuaAAuLi8uLi9saWIvY2dyYXBoL3N0YXJ0c3dpdGguaAAuLi8uLi9saWIvY2dyYXBoL2d2X21hdGguaAAuLi8uLi9saWIvY2dyYXBoL2FneGJ1Zi5oAC4uLy4uL2xpYi9jZ3JhcGgvdG9rZW5pemUuaAAuLi8uLi9saWIvY2dyYXBoL3F1ZXVlLmgALi4vLi4vbGliL2NncmFwaC9hbGxvYy5oAGF1eGcAcm93ZwBjb3JlX2xvYWRpbWFnZV9zdmcAc3ZnOnN2ZwBqcGc6c3ZnAHBuZzpzdmcAanBlZzpzdmcAZ2lmOnN2ZwBqcGU6c3ZnAHN2Z19pbmxpbmU6c3ZnAEF1ZwBkb1Byb2xvZwBwb3dlcl9pdGVyYXRpb25fb3J0aG9nAHBuZwBpZGVhbF9kaXN0X3NjaGVtZSB2YWx1ZSB3cm9uZwB4ZG90IHZlcnNpb24gIiVzIiB0b28gbG9uZwBjb25nAGxibGVuY2xvc2luZwBiYXNpY19zdHJpbmcAZmFpbHVyZSBtYWxsb2MnaW5nIGZvciByZXN1bHQgc3RyaW5nAHNwcmluZwBvcmRlcmluZwBhcmluZwBBcmluZwBEYW1waW5nAFdhcm5pbmcAb3ZlcmxhcF9zY2FsaW5nAHggYW5kIHkgc2NhbGluZwBvbGQgc2NhbGluZwBzbW9vdGhpbmcAdW5rbm93biBlbmNvZGluZwBtdWx0aWxldmVsX3NwcmluZ19lbGVjdHJpY2FsX2VtYmVkZGluZwBzcHJpbmdfZWxlY3RyaWNhbF9zcHJpbmdfZW1iZWRkaW5nAGNlbGxwYWRkaW5nAGNlbGxzcGFjaW5nAHJhbmcAbGFuZwBmaXZlcG92ZXJoYW5nAHRocmVlcG92ZXJoYW5nAG5vdmVyaGFuZwBlbWl0X2h0bWxfaW1nAGNvbGcAb3JpZwBzemxpZwBvZWxpZwBhZWxpZwBPRWxpZwBBRWxpZwBjb3JlX2xvYWRpbWFnZV9maWcAanBnOmZpZwBwbmc6ZmlnAGZpZzpmaWcAanBlZzpmaWcAZ2lmOmZpZwBqcGU6ZmlnAGVnZwBuZXh0X3NlZwByZWcAanBlZwBpID09IGRlZwBkZwBjZwBjbG9zZXN1YmcAbWlzbWF0Y2hlZCB0YWcAYmV6LT5zZmxhZwBiZXotPmVmbGFnACFmbGFnADxnACUuNWcsJS41ZywlLjVnLCUuNWcAJS41ZyAlLjVnACVnICVnAGJveEludGVyc2VjdGYAZXBzZgBhZ2VkZ2VzZXFjbXBmAGNjd3JvdGF0ZXBmAGZub2YAaW5mAHNlbGYAaGFsZgAlbGYlbGYlbGYlbGYAJWxmLCVsZiwlbGYsJWxmLCVsZgAlbGYgJWxmICVsZiAlbGYAbGliZXJhdGlvbnNlcmlmAGZyZWVzZXJpZgBzYW5zLVNlcmlmAGdpZgAvc3ZnL3BlYWNocHVmZgByaWZmAGFjY291bnRpbmdSZXBvcnREaWZmAHRhaWxocmVmAGxhYmVsaHJlZgBlZGdlaHJlZgBoZWFkaHJlZgBvcmRmAHBkZgBzaWdtYWYAXGYAJS4wTGYAJUxmAHVzLT5mACUuMDNmACVzIHRyYW5zbWl0ICUuM2YAcmdiPCU5LjNmLCAlOS4zZiwgJTkuM2Y+IHRyYW5zbWl0ICUuM2YAJS4wMmYAJS4yZgAlLjBmLCUuMGYsJS4wZiwlLjBmACAlLjBmLCUuMGYAJS4wZiAlLjBmICUuMGYgJS4wZgAiIGZpbGwtb3BhY2l0eT0iJWYAIiBzdHJva2Utb3BhY2l0eT0iJWYACmZpbmFsIGUgPSAlZgBicm9uemUAYXJyb3dzaXplAGxhYmVsZm9udHNpemUAc2VhcmNoc2l6ZQBub2RlbGlzdF9yZXNpemUAZml4ZWRzaXplAG9iamxpc3Rfc2l6ZQBub2RlbGlzdF9zaXplAHNhbWVfbGlzdF9zaXplAG5vZGVfc2V0X3NpemUAYm94ZXNfc2l6ZQBjeWNsZXNfc2l6ZQBub2Rlc19zaXplAHRleHRzcGFuX3NpemUAYmV6aWVyX3BhdGhfc2l6ZQBzdmdfc2l6ZQBzZWxmLT5jYXBhY2l0eSA+IHNlbGYtPnNpemUAYnouc2l6ZQBwb2ludC1zaXplAG5vcm1hbGl6ZQBpY3VydmUAbm9kZWxpc3RfcmVtb3ZlAG5vZGVfc2V0X3JlbW92ZQBzb2x2ZQAhdi0+YWN0aXZlAC1hY3RpdmUAZm9udF9pbl9saXN0X3Blcm1pc3NpdmUAL3N2Zy9vbGl2ZQB1Z3JhdmUAb2dyYXZlAGlncmF2ZQBlZ3JhdmUAYWdyYXZlAFVncmF2ZQBPZ3JhdmUASWdyYXZlAEVncmF2ZQBBZ3JhdmUAdHJ1ZQAvc3ZnL2Jpc3F1ZQBvYmxpcXVlAEF2YW50R2FyZGUtQm9va09ibGlxdWUAQXZhbnRHYXJkZS1EZW1pT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LUJvbGRPYmxpcXVlAENvdXJpZXItQm9sZE9ibGlxdWUASGVsdmV0aWNhLUJvbGRPYmxpcXVlAEhlbHZldGljYS1OYXJyb3ctT2JsaXF1ZQBDb3VyaWVyLU9ibGlxdWUASGVsdmV0aWNhLU9ibGlxdWUAbmF2eWJsdWUAL3N2Zy9saWdodHNreWJsdWUAL3N2Zy9kZWVwc2t5Ymx1ZQAvc3ZnL3NreWJsdWUAbmV3bWlkbmlnaHRibHVlAC9zdmcvbWlkbmlnaHRibHVlAC9zdmcvbGlnaHRibHVlAC9zdmcvY2FkZXRibHVlAC9zdmcvY29ybmZsb3dlcmJsdWUAL3N2Zy9kb2RnZXJibHVlAC9zdmcvcG93ZGVyYmx1ZQBuZW9uYmx1ZQAvc3ZnL21lZGl1bWJsdWUAL3N2Zy9saWdodHN0ZWVsYmx1ZQAvc3ZnL3N0ZWVsYmx1ZQAvc3ZnL3JveWFsYmx1ZQAvc3ZnL2RhcmtibHVlAHJpY2hibHVlAGxpZ2h0c2xhdGVibHVlAC9zdmcvbWVkaXVtc2xhdGVibHVlAC9zdmcvZGFya3NsYXRlYmx1ZQAvc3ZnL3NsYXRlYmx1ZQAvc3ZnL2FsaWNlYmx1ZQAvc3ZnL2JsdWUAQmx1ZQBuZWF0b19lbnF1ZXVlAFR1ZQBjb252ZXJ0U1B0b1JvdXRlAHlhY3V0ZQB1YWN1dGUAb2FjdXRlAGlhY3V0ZQBlYWN1dGUAYWFjdXRlAFlhY3V0ZQBVYWN1dGUAT2FjdXRlAElhY3V0ZQBFYWN1dGUAQWFjdXRlAHJlZmVyZW5jZSB0byBleHRlcm5hbCBlbnRpdHkgaW4gYXR0cmlidXRlAGR1cGxpY2F0ZSBhdHRyaWJ1dGUAbm90ZQBwcmltZXJzaXRlAHJpYm9zaXRlAHJlc3RyaWN0aW9uc2l0ZQBwcm90ZWFzZXNpdGUAL3N2Zy9naG9zdHdoaXRlAC9zdmcvbmF2YWpvd2hpdGUAL3N2Zy9mbG9yYWx3aGl0ZQAvc3ZnL2FudGlxdWV3aGl0ZQAvc3ZnL3doaXRlAFdoaXRlAHBvcF9vYmpfc3RhdGUAcGNwX3JvdGF0ZQBjb25jZW50cmF0ZQBkZWNvcmF0ZQBRdWFkVHJlZV9yZXB1bHNpdmVfZm9yY2VfYWNjdW11bGF0ZQBub3RyYW5zbGF0ZQAvc3ZnL2Nob2NvbGF0ZQBnZW9tVXBkYXRlAGludmhvdXNlAC9zdmcvY2hhcnRyZXVzZQBub2RlbGlzdF9yZXZlcnNlAFhNTF9QYXJzZQA8ZWxsaXBzZQBkdXN0eXJvc2UAL3N2Zy9taXN0eXJvc2UAU3BhcnNlTWF0cml4X3RyYW5zcG9zZQBhZ2Nsb3NlAGVudGl0eVRyYWNraW5nT25DbG9zZQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UAZmFsc2UAL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3R1cnF1b2lzZQBwaGFzZQAvc3ZnL2F6dXJlAHNpZ25hdHVyZQBtZW1vcnkgcmUtYWxsb2NhdGlvbiBmYWlsdXJlAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUAY29yZQBNc3F1YXJlAFBhbGF0aW5vIExpbm90eXBlAEEtPnR5cGUgPT0gQi0+dHlwZQBzdXBlAGVsbGlwc2VfdGFuZ2VudF9zbG9wZQBndnJlbmRlcl91c2Vyc2hhcGUAbWl0ZXJfc2hhcGUAbGFuZHNjYXBlAExhbmRzY2FwZQBKdW5lAG5vbmUAZG9jdW1lbnQgaXMgbm90IHN0YW5kYWxvbmUAY291c2luZQAvc3ZnL21lZGl1bWFxdWFtYXJpbmUAL3N2Zy9hcXVhbWFyaW5lADxwb2x5bGluZQAlc292ZXJsaW5lAHVuZGVybGluZQBQcm91dGVzcGxpbmUAbGluZWFyX3NwbGluZQBiX3NwbGluZQBvbGluZQBhZ3hidWZfaXNfaW5saW5lAHN2Z19pbmxpbmUAcmVmaW5lAHByaW1lAFByaW1lAC9zdmcvbGltZQBjb2xvcnNjaGVtZQBsYWJlbF9zY2hlbWUAc2FtZQBsYWJlbGZvbnRuYW1lAFVGX3NldG5hbWUAZm9udF9uYW1lAGZvbnQtPm5hbWUAdXMtPm5hbWUAcmVzZXJ2ZWQgcHJlZml4ICh4bWwpIG11c3Qgbm90IGJlIHVuZGVjbGFyZWQgb3IgYm91bmQgdG8gYW5vdGhlciBuYW1lc3BhY2UgbmFtZQBzdHlsZQAvc3ZnL3RoaXN0bGUAdGl0bGUAL3N2Zy9tZWRpdW1wdXJwbGUAZGFya3B1cnBsZQB3ZWJwdXJwbGUAcmViZWNjYXB1cnBsZQB2ZXJ5X2xpZ2h0X3B1cnBsZQBtZWRfcHVycGxlAHgxMXB1cnBsZQAvc3ZnL3B1cnBsZQBzaGFwZWZpbGUAZ3JhZGllbnRhbmdsZQByZWN0YW5nbGUAUmVjdGFuZ2xlAGxhYmVsYW5nbGUAaW52dHJpYW5nbGUAZGVzdGluYXRpb24gcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBzb3VyY2UgcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBkZnNDeWNsZQBkb3VibGVjaXJjbGUATWNpcmNsZQBpbnZpc2libGUAdGhvcm5kYWxlAGlucHV0c2NhbGUAb3NjYWxlAGltYWdlc2NhbGUAL3N2Zy93aGl0ZXNtb2tlAG1hbmRhcmlub3JhbmdlAC9zdmcvZGFya29yYW5nZQAvc3ZnL29yYW5nZQAvc3ZnL2JlaWdlAG5ld2VkZ2UAZGVsZXRlX2Zhc3RfZWRnZQBkZWxldGVfZmxhdF9lZGdlAGFkZF90cmVlX2VkZ2UAbWFrZVN0cmFpZ2h0RWRnZQBtYWtlU2VsZkVkZ2UAbWFrZUNvbXBvdW5kRWRnZQBvc2FnZQBwYWdlAGd2bG9hZGltYWdlAHZlZQB0ZWUAUVVBRF9UUkVFX0hZQlJJRCwgc2l6ZSBsYXJnZXIgdGhhbiAlZCwgc3dpdGNoIHRvIGZhc3QgcXVhZHRyZWUAZmVhc2libGVfdHJlZQBTcGFyc2VNYXRyaXhfZGl2aWRlX3Jvd19ieV9kZWdyZWUAb2JqbGlzdF9mcmVlAG5vZGVsaXN0X2ZyZWUAc2FtZV9saXN0X2ZyZWUAbm9kZV9zZXRfZnJlZQBwb2ludHNfZnJlZQBib3hlc19mcmVlAGN5Y2xlc19mcmVlAG5vZGVfc3RhY2tfZnJlZQBuZXdub2RlAGluc3RhbGxub2RlAGFnbm9kZQBkZWxldGVfZmFzdF9ub2RlAHBhY2ttb2RlAFNwbGl0Tm9kZQBvdGlsZGUAbnRpbGRlAGF0aWxkZQBPdGlsZGUATnRpbGRlAEF0aWxkZQBkaXZpZGUAdHJhZGUAZ3JhcGh2aXpfbm9kZV9pbmR1Y2UAc291cmNlAHJlcHVsc2l2ZWZvcmNlAGlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UAZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlAHJlY3Vyc2l2ZSBlbnRpdHkgcmVmZXJlbmNlAGxhYmVsZGlzdGFuY2UAVEJfYmFsYW5jZQBUQmJhbGFuY2UAZGV2aWNlAG1vbm9zcGFjZQAvc3ZnL29sZGxhY2UAZmFjZQBzdWJlACAtYW5jaG9yIGUAczEtPmNvbW1fY29vcmQ9PXMyLT5jb21tX2Nvb3JkAE1yZWNvcmQAZm9yd2FyZABwcm9kAGxpZ2h0Z29sZGVucm9kAG1lZGl1bWdvbGRlbnJvZAAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9wYWxlZ29sZGVucm9kAC9zdmcvZ29sZGVucm9kAC9zdmcvYnVybHl3b29kAGxpZ2h0d29vZABtZWRpdW13b29kAGRhcmt3b29kAF9iYWNrZ3JvdW5kAGNvbXBvdW5kAG5vIGVsZW1lbnQgZm91bmQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQAL3N2Zy9ibGFuY2hlZGFsbW9uZABhcnJvd19sZW5ndGhfZGlhbW9uZABNZGlhbW9uZABub2RlX3NldF9maW5kAGd2dXNlcnNoYXBlX2ZpbmQAb2JqbGlzdF90cnlfYXBwZW5kAGRlZ2xpc3RfdHJ5X2FwcGVuZABub2RlbGlzdF90cnlfYXBwZW5kAGNsaXN0X3RyeV9hcHBlbmQAc2FtZV9saXN0X3RyeV9hcHBlbmQAZWRnZV9saXN0X3RyeV9hcHBlbmQAcG9pbnRzX3RyeV9hcHBlbmQAYm94ZXNfdHJ5X2FwcGVuZABsYXllcl9uYW1lc190cnlfYXBwZW5kAGN5Y2xlc190cnlfYXBwZW5kAG5vZGVzX3RyeV9hcHBlbmQAdmFyYXJyX3RyeV9hcHBlbmQAZXN0YWNrX3RyeV9hcHBlbmQAaW50X3N0YWNrX3RyeV9hcHBlbmQAbm9kZV9zdGFja190cnlfYXBwZW5kAGJlemllcl9wYXRoX3RyeV9hcHBlbmQAaXJhbmQAZXhwYW5kAGN1bWJlcmxhbmQAYnJpZ2h0Z29sZABvbGRnb2xkAC9zdmcvZ29sZABib2xkAEhlbHZldGljYS1OYXJyb3ctQm9sZABUaW1lcy1Cb2xkAENvdXJpZXItQm9sZABQYWxhdGluby1Cb2xkAE5ld0NlbnR1cnlTY2hsYmstQm9sZABIZWx2ZXRpY2EtQm9sZAAlMCpsbGQAJSpsbGQAKyVsbGQAbi0+YnJhbmNoW2ldLmNoaWxkACUrLjRsZAAlcyVsZABzb2xpZAAvc3ZnL21lZGl1bW9yY2hpZAAvc3ZnL2RhcmtvcmNoaWQAL3N2Zy9vcmNoaWQAaWxsZWdhbCBjaGFyYWN0ZXIocykgaW4gcHVibGljIGlkAGRpamtzdHJhX3NnZABmaXhlZABjdXJ2ZWQAZGVyaXZlZABkb3R0ZWQAbWVtb3J5IGV4aGF1c3RlZABsb2NhbGUgbm90IHN1cHBvcnRlZABwYXJzaW5nIGFib3J0ZWQAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAYWNjb3VudGluZ0RpZmZUb2xlcmF0ZWQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZABjb25kZW5zZWQAL3N2Zy9tZWRpdW12aW9sZXRyZWQAL3N2Zy9wYWxldmlvbGV0cmVkAEltcHJvcGVyICVzIHZhbHVlICVzIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA8ICVkIC0gdG9vIHNtYWxsIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA+ICVkIC0gdG9vIGxhcmdlIC0gaWdub3JlZAAvc3ZnL2luZGlhbnJlZAAvc3ZnL2RhcmtyZWQAYSBzdWNjZXNzZnVsIHByaW9yIGNhbGwgdG8gZnVuY3Rpb24gWE1MX0dldEJ1ZmZlciBpcyByZXF1aXJlZAB0YXBlcmVkAC9zdmcvb3JhbmdlcmVkAHJlc2VydmVkIHByZWZpeCAoeG1sbnMpIG11c3Qgbm90IGJlIGRlY2xhcmVkIG9yIHVuZGVjbGFyZWQAL3N2Zy9yZWQAc3RyaXBlZABpbGwtY29uZGl0aW9uZWQAdW5kZWZpbmVkAG5vdCBjb25zdHJhaW5lZABsYWJlbGFsaWduZWQAdGV4dCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQAWE1MIGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZAB1bmZpbGxlZABpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkAHRyaWFuZ3VsYXRpb24gZmFpbGVkAHBhcnNpbmcgZmluaXNoZWQAZGFzaGVkAGxpbWl0IG9uIGlucHV0IGFtcGxpZmljYXRpb24gZmFjdG9yIChmcm9tIERURCBhbmQgZW50aXRpZXMpIGJyZWFjaGVkAHdlZGdlZABzaXplPT1mcmVlZAByb3VuZGVkAHBhcnNlciBub3Qgc3VzcGVuZGVkAHBhcnNlciBzdXNwZW5kZWQAV2VkAFJlZABTcGFyc2VNYXRyaXhfYWRkAG5vZGVfc2V0X2FkZABkZCAhPSBwYXJlbnRfZGQAS1BfQWRkAHBhZAB4bGhkeHVubG9hZAByZWFkAGFycm93aGVhZABsaGVhZABzYW1laGVhZABib3gzZAAlc18lZABfc3Bhbl8lZABfYmxvY2tfJWQAX3dlYWtfJWQAX2Nsb25lXyVkAC4lZAAlWS0lbS0lZAAlbGYsJWQAJXMgaW4gbGluZSAlZAAlJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkACJfc3ViZ3JhcGhfY250IjogJWQAIl9ndmlkIjogJWQAImhlYWQiOiAlZABhZ3hicHV0YwB2cHNjAGNwLT5zcmMAdWNpcmMAb2NpcmMAaWNpcmMAZWNpcmMAYWNpcmMAVWNpcmMAT2NpcmMASWNpcmMARWNpcmMAQWNpcmMAbGFiZWxsb2MAZ3ZfcmVjYWxsb2MAc3RkOjpiYWRfYWxsb2MAYmFrZXJzY2hvYwBzZW1pU3dlZXRDaG9jAG1jAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMAcGljOnBpYwBpdGFsaWMAQm9va21hbi1MaWdodEl0YWxpYwBaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljAEJvb2ttYW4tRGVtaUl0YWxpYwBUaW1lcy1Cb2xkSXRhbGljAFBhbGF0aW5vLUJvbGRJdGFsaWMATmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljAFRpbWVzLUl0YWxpYwBQYWxhdGluby1JdGFsaWMATmV3Q2VudHVyeVNjaGxiay1JdGFsaWMAcmFkaWMAI2ZjZmNmYwA6ICUuMmYgc2VjAGxpc3RkZWxyZWMAbGV2ZWwgZ3JhcGggcmVjAGxldmVsIGVkZ2UgcmVjAGxldmVsIG5vZGUgcmVjAERlYwBfbmVhdG9fY2MAYmMAdmlzaWJpbGl0eS5jAFNwYXJzZU1hdHJpeC5jAGh0bWxsZXguYwBpbmRleC5jAHNtYXJ0X2luaV94LmMAZ3ZyZW5kZXJfY29yZV9wb3YuYwBjdnQuYwBsYXlvdXQuYwB0ZXh0c3Bhbl9sdXQuYwBhZGp1c3QuYwBub2RlbGlzdC5jAHNob3J0ZXN0LmMAY2xvc2VzdC5jAHNhbWVwb3J0LmMAZ3ZyZW5kZXJfY29yZV9kb3QuYwBjb25zdHJhaW50LmMAZG90aW5pdC5jAG5lYXRvaW5pdC5jAHBhdGNod29ya2luaXQuYwBvc2FnZWluaXQuYwBlbWl0LmMAZmxhdC5jAGFycm93cy5jAG1pbmNyb3NzLmMAc3RyZXNzLmMAcG9zdF9wcm9jZXNzLmMAY2NvbXBzLmMAbnMuYwB1dGlscy5jAHhsYWJlbHMuYwBzaGFwZXMuYwBkb3RzcGxpbmVzLmMAbmVhdG9zcGxpbmVzLmMAY2x1c3RlcmVkZ2VzLmMAYXR0ci5jAGZhc3Rnci5jAGNsdXN0ZXIuYwB0YXBlci5jAGd2cmVuZGVyLmMAc3BsaXQucS5jAGRlY29tcC5jAGd2cmVuZGVyX2NvcmVfbWFwLmMAb3J0aG8uYwBndnJlbmRlcl9jb3JlX2pzb24uYwBwb3NpdGlvbi5jAHRleHRzcGFuLmMAZ2VvbS5jAHJvdXRlc3BsLmMAeG1sLmMATXVsdGlsZXZlbC5jAGdlbmVyYWwuYwBzcHJpbmdfZWxlY3RyaWNhbC5jAGd2cmVuZGVyX2NvcmVfdGsuYwByYW5rLmMAcGFjay5jAGJsb2NrcGF0aC5jAGR0c3RyaGFzaC5jAHJhd2dyYXBoLmMAZ3ZyZW5kZXJfY29yZV9zdmcuYwBndnJlbmRlcl9jb3JlX2ZpZy5jAHN0dWZmLmMAbWF6ZS5jAHF1YWRfcHJvZ19zb2x2ZS5jAHNwYXJzZV9zb2x2ZS5jAHJvdXRlLmMAd3JpdGUuYwBjb2x4bGF0ZS5jAHhtbHBhcnNlLmMAZWxsaXBzZS5jAGd2bG9hZGltYWdlX2NvcmUuYwBndnVzZXJzaGFwZS5jAHJlY3RhbmdsZS5jAGNpcmNsZS5jAGh0bWx0YWJsZS5jAGVkZ2UuYwBndmxvYWRpbWFnZS5jAGJsb2NrdHJlZS5jAFF1YWRUcmVlLmMAbm9kZS5jAG5vZGVfaW5kdWNlLmMAZ3ZkZXZpY2UuYwBjb21wb3VuZC5jAHRyYXBlem9pZC5jAHNnZC5jAGNvbmMuYwByZWMuYwBkaWprc3RyYS5jAGZQUS5jAGNsYXNzMi5jACVsZiwlbGYsJWxmLCVsZiVjACVsZiwlbGYsJWxmLCVbXixdJWMAXCVjACRjAG5zdWIAc2V0aHNiAHJiAHByb3RlY3RfcnNxYgBqb2IAY29yZV9sb2FkaW1hZ2VfcHNsaWIARmViAG9kYgBpbml0X3NwbGluZXNfYmIAYmV6aWVyX2JiAHByb3RlaW5zdGFiAHJuYXN0YWIAL3N2Zy9vbGl2ZWRyYWIAXGIAcndhAC9zdmcvYXF1YQBpb3RhAElvdGEAL3N2Zy9kYXJrbWFnZW50YQAvc3ZnL21hZ2VudGEAZGVsdGEARGVsdGEAemV0YQB0aGV0YQBUaGV0YQBiZXRhAFpldGEAQmV0YQBfQUdfc3RyZGF0YQBwcmV2ICE9IG9iai0+ZGF0YQBtYWtlR3JhcGhEYXRhAEV0YQBuaW1idXNzYW5zYQBwYXJhAGthcHBhAEthcHBhAC9zdmcvc2llbm5hAFZlcmRhbmEAZ2FtbWEAR2FtbWEAc2lnbWEAU2lnbWEAY29uc29sYQBuYWJsYQAvc3ZnL2Z1Y2hzaWEAR2VvcmdpYQBhbHBoYQBBbHBoYQBvbWVnYQBPbWVnYQBhcmVhAFJlY3RBcmVhAGxhbWJkYQBMYW1iZGEAaGVsdmV0aWNhAEhlbHZldGljYQBtaWNhAD48YQBgAF90ZHJhd18AX3RsZHJhd18AX2hsZHJhd18AX2xkcmF3XwBfaGRyYXdfAF9kcmF3XwBkb3Rfc3BsaW5lc18AJXNfAHBhZ2UlZCwlZF8AX2NjXwAgaWQ9ImFfAF4Abl9lZGdlcyA9PSBncmFwaC0+c291cmNlc1tncmFwaC0+bl0AamRbbWFza1tqY1trXV1dID09IGpjW2tdAGpjW21hc2tbamJba11dXSA9PSBqYltrXQBqYVttYXNrW2phW2pdXV0gPT0gamFbal0AcS0+cXRzW2lpXQAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAHItPmJvdW5kYXJ5W2ldIDw9IHItPmJvdW5kYXJ5W05VTURJTVMgKyBpXQBbJS4wM2YsJS4wM2ZdAFtpbnRlcm5hbCBoYXJkLWNvZGVkXQBucC0+Y2VsbHNbMV0AbnAtPmNlbGxzWzBdAHVzLT5uYW1lWzBdAGNwLT5zcmNbMF0AWy4uXQBcXAAicG9pbnRzIjogWwAic3RvcHMiOiBbAAlbAFoAY29tcHV0ZVNjYWxlWFkAeTw9WQAlYSAlYiAlZCAlSDolTTolUyAlWQBQT1NJWAB0YXJnZXQgPD0gKHNpemVfdClJTlRfTUFYAHcgPj0gMCAmJiB3IDw9IElOVF9NQVgAZV9jbnQgPD0gSU5UX01BWABwYWlyLnJpZ2h0IDw9IElOVF9NQVgAcGFpci5sZWZ0IDw9IElOVF9NQVgAbl9lZGdlcyA8PSBJTlRfTUFYAHN0cC5udmVydGljZXMgPD0gSU5UX01BWABvYnNbcG9seV9pXS0+cG4gPD0gSU5UX01BWABpbnB1dF9yb3V0ZS5wbiA8PSBJTlRfTUFYAGdyYXBoLT5uIDw9IElOVF9NQVgAcG5sbCA8PSBJTlRfTUFYAGggPj0gMCAmJiBoIDw9IElOVF9NQVgAVHJlZV9lZGdlLnNpemUgPD0gSU5UX01BWABlX2NudCAtIDEgPD0gSU5UX01BWABjbGlzdF9zaXplKCZsaXN0KSAtIDEgPD0gSU5UX01BWABsYXllcl9uYW1lc19zaXplKCZsYXllcklEcykgLSAxIDw9IElOVF9NQVgAc3RybGVuKGFyZ3MpIDw9IElOVF9NQVgAb2JqbGlzdF9zaXplKCZvYmpsKSA8PSBJTlRfTUFYAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPD0gSU5UX01BWAByZWN0LmJvdW5kYXJ5WzNdIDwgSU5UX01BWAByZWN0LmJvdW5kYXJ5WzJdIDwgSU5UX01BWAByZXN1bHQgPD0gKGludClVQ0hBUl9NQVgAc3N6IDw9IFVDSEFSX01BWABjb2wgPj0gMCAmJiBjb2wgPD0gVUlOVDE2X01BWAB4PD1YAFcAVgBVAFxUAFRFWFQAU1RSRVNTX01BSk9SSVpBVElPTl9QT1dFUl9ESVNUAFNUUkVTU19NQUpPUklaQVRJT05fR1JBUEhfRElTVABTVFJFU1NfTUFKT1JJWkFUSU9OX0FWR19ESVNUAEZBU1QARk9OVABiID09IEJfUklHSFQASEVJR0hUAEJfTEVGVABfJWxsdV9TVVNQRUNUAEJUAFRyZWJ1Y2hldCBNUwBJTlZJUwAlSDolTTolUwBWUgBUUgBBLT5mb3JtYXQgPT0gQi0+Zm9ybWF0ICYmIEEtPmZvcm1hdCA9PSBGT1JNQVRfQ1NSAExSAERJUgBIUgBDRU5URVIAJSVUUkFJTEVSAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTCB8fCBBLT50eXBlID09IE1BVFJJWF9UWVBFX0lOVEVHRVIAQ0VMTEJPUkRFUgBCUgAqUgBRAEVYUABCX1VQAFNVUABUT1AATwBtYXBOAFxOAEJfRE9XTgBUSE9STgAlJUJFR0lOAFJPV1NQQU4AQ09MU1BBTgBOQU4AUE0AQk9UVE9NAEJNAEFNACVIOiVNAFxMAHRhaWxVUkwAbGFiZWxVUkwAZWRnZVVSTABoZWFkVVJMAEhUTUwAeCE9TlVMTABxdWV1ZV9wb3AoJnEpID09IE5VTEwARURfdG9fdmlydChvcmlnKSA9PSBOVUxMAEVEX3RvX3ZpcnQoZSkgPT0gTlVMTABwcmVmaXggIT0gTlVMTABkdGQtPnNjYWZmSW5kZXggIT0gTlVMTABpbnB1dCAhPSBOVUxMAGxpc3QgIT0gTlVMTAByZWZlcmVudCAhPSBOVUxMAHMgIT0gTlVMTABhdHRyICE9IE5VTEwAbGVhZGVyICE9IE5VTEwAcSAhPSBOVUxMAGl0ZW0gIT0gTlVMTABoYXlzdGFjayAhPSBOVUxMAHNjcmF0Y2ggIT0gTlVMTABvcnRob2cgIT0gTlVMTABzZWxmICE9IE5VTEwAdmFsdWUgIT0gTlVMTABqb2ItPm91dHB1dF9maWxlICE9IE5VTEwAc291cmNlICE9IE5VTEwAam9iICE9IE5VTEwAc291cmNlLmRhdGEgIT0gTlVMTABiLmRhdGEgIT0gTlVMTABhLmRhdGEgIT0gTlVMTABsaXN0ICYmIGxpc3RbMF0gIT0gTlVMTABBRiAhPSBOVUxMAEVEX3RvX3ZpcnQob3JpZykgIT0gTlVMTABMQ19BTEwAQkwAYmVzdGNvc3QgPCBIVUdFX1ZBTABOT1JNQUwAUkFESUFMAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTABVUlcgQ2hhbmNlcnkgTABVUlcgQm9va21hbiBMAENlbnR1cnkgU2Nob29sYm9vayBMAFVSVyBHb3RoaWMgTABLSwBKAGkgPCBNQVhfSQBQLT5lbmQudGhldGEgPCAyICogTV9QSQBBU0NJSQBcSABFVEgAV0lEVEgARE9URk9OVFBBVEgAR0RGT05UUEFUSABta05Db25zdHJhaW50RwBcRwBFWFBBVF9FTlRJVFlfREVCVUcARVhQQVRfRU5UUk9QWV9ERUJVRwBFWFBBVF9BQ0NPVU5USU5HX0RFQlVHAFJORwBTUFJJTkcAQ0VMTFBBRERJTkcAQ0VMTFNQQUNJTkcATEFORwBJTUcAXHhGACUlRU9GAElORgBceEZGAFJJRkYAZGVsdGEgPD0gMHhGRkZGAFx4RUYAXHhERgBceENGAFx4QkYAXHhBRgBceDlGAFx4OEYAXHg3RgBceDFGAFx4RQBcRQBQT0lOVC1TSVpFAFRSVUUAQ0xPU0UARkFMU0UAa2luZCA9PSBMVF9OT05FAEdSQURJRU5UQU5HTEUAVFJJQU5HTEUATUlERExFAElOVklTSUJMRQBUQUJMRQBBR1RZUEUob2JqKSA9PSBBR0lORURHRSB8fCBBR1RZUEUob2JqKSA9PSBBR09VVEVER0UAXHhGRQBceEVFAFx4REUAQl9OT0RFAFx4Q0UAXHhCRQBceEFFAFx4OUUAXHg4RQBceDFFAFREAEEtPmZvcm1hdCA9PSBGT1JNQVRfQ09PUkQAbiAmJiBpID49IDAgJiYgaSA8IE5PREVDQVJEACUlRU5EAEhZQlJJRABTT0xJRABceEZEAFx4RUQARE9UVEVEAERBU0hFRABST1VOREVEAFx4REQAXHhDRABceEJEAFx4QUQAXHg5RABceDhEAFx4MUQAXHhDAGRlbGV0ZVZQU0MAXHhGQwBceEVDAFx4REMAXHhDQwBceEJDAFx4QUMAXHg5QwBceDhDAFx4MUMAXHhCAFNVQgBceEZCAFx4RUIAXHhEQgBceENCAFx4QkIAXHhBQgBceDlCAFx4OEIAXHgxQgBBICYmIEIAXHhGQQBceEVBAFx4REEAXHhDQQBceEJBAFx4QUEAXHg5QQBceDhBAFx4MUEAQAA/ADwlcz4APG5pbD4APC90c3Bhbj48L3RleHRQYXRoPgAKICAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPgA+Cjx0aXRsZT4APEZPTlQ+ADxCUj4APEhUTUw+ADwvSFRNTD4APElNRz4AU3ludGF4IGVycm9yOiBub24tc3BhY2Ugc3RyaW5nIHVzZWQgYmVmb3JlIDxUQUJMRT4AU3ludGF4IGVycm9yOiBub24tc3BhY2Ugc3RyaW5nIHVzZWQgYWZ0ZXIgPC9UQUJMRT4APFREPgAtPgAiPgAJW2tleT0APD0APAAmI3gleDsAJnF1b3Q7ACZsdDsAJmd0OwAmYW1wOwAjJWQ7ACYjMzk7ACYjNDU7ACYjOTM7ACYjMTM7ACYjMTYwOwAmIzEwOwA7c3RvcC1vcGFjaXR5OgAlJUJvdW5kaW5nQm94OgBjYWxjdWxhdGluZyBzaG9ydGVzdCBwYXRocyBhbmQgc2V0dGluZyB1cCBzdHJlc3MgdGVybXM6ADxzdG9wIG9mZnNldD0iJS4wM2YiIHN0eWxlPSJzdG9wLWNvbG9yOgA8c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOgA8c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOgBzb2x2aW5nIG1vZGVsOgAvXDoAZ3JleTkAZ3JheTkAXHhGOQBceEU5AFx4RDkAXHhDOQBceEI5AFx4QTkAZ3JleTk5AGdyYXk5OQBceDk5AGdyZXk4OQBncmF5ODkAXHg4OQAwMTIzNDU2Nzg5AGdyZXk3OQBncmF5NzkAZ3JleTY5AGdyYXk2OQBncmV5NTkAZ3JheTU5AGdyZXk0OQBncmF5NDkAZ3JleTM5AGdyYXkzOQBncmV5MjkAZ3JheTI5AGdyZXkxOQBncmF5MTkAXHgxOQAvcmRneTkvOQAvYnVwdTkvOQAvcmRwdTkvOQAvcHVidTkvOQAveWxnbmJ1OS85AC9nbmJ1OS85AC9yZHlsYnU5LzkAL3JkYnU5LzkAL2dyZXlzOS85AC9ncmVlbnM5LzkAL2JsdWVzOS85AC9wdXJwbGVzOS85AC9vcmFuZ2VzOS85AC9yZWRzOS85AC9wdW9yOS85AC95bG9yYnI5LzkAL3B1YnVnbjkvOQAvYnVnbjkvOQAvcHJnbjkvOQAvcmR5bGduOS85AC95bGduOS85AC9zcGVjdHJhbDkvOQAvcGl5ZzkvOQAvYnJiZzkvOQAvcHVyZDkvOQAveWxvcnJkOS85AC9vcnJkOS85AC9wYWlyZWQ5LzkAL3NldDM5LzkAL3NldDE5LzkAL3Bhc3RlbDE5LzkAL3BhaXJlZDEyLzkAL3NldDMxMi85AC9yZGd5MTEvOQAvcmR5bGJ1MTEvOQAvcmRidTExLzkAL3B1b3IxMS85AC9wcmduMTEvOQAvcmR5bGduMTEvOQAvc3BlY3RyYWwxMS85AC9waXlnMTEvOQAvYnJiZzExLzkAL3BhaXJlZDExLzkAL3NldDMxMS85AC9yZGd5MTAvOQAvcmR5bGJ1MTAvOQAvcmRidTEwLzkAL3B1b3IxMC85AC9wcmduMTAvOQAvcmR5bGduMTAvOQAvc3BlY3RyYWwxMC85AC9waXlnMTAvOQAvYnJiZzEwLzkAL3BhaXJlZDEwLzkAL3NldDMxMC85AGdyZXk4AGdyYXk4AFx4OAB1dGY4ACNmOGY4ZjgAI2U4ZThlOABceEY4AEdJRjgAXHhFOABceEQ4AFx4QzgAXHhCOABceEE4AGdyZXk5OABncmF5OTgAXHg5OABncmV5ODgAZ3JheTg4AFx4ODgAZ3JleTc4AGdyYXk3OABncmV5NjgAZ3JheTY4AGdyZXk1OABncmF5NTgAZ3JleTQ4AGdyYXk0OABncmV5MzgAZ3JheTM4AGdyZXkyOABncmF5MjgAZ3JleTE4AGdyYXkxOABceDE4AC9yZGd5OS84AC9idXB1OS84AC9yZHB1OS84AC9wdWJ1OS84AC95bGduYnU5LzgAL2duYnU5LzgAL3JkeWxidTkvOAAvcmRidTkvOAAvZ3JleXM5LzgAL2dyZWVuczkvOAAvYmx1ZXM5LzgAL3B1cnBsZXM5LzgAL29yYW5nZXM5LzgAL3JlZHM5LzgAL3B1b3I5LzgAL3lsb3JicjkvOAAvcHVidWduOS84AC9idWduOS84AC9wcmduOS84AC9yZHlsZ245LzgAL3lsZ245LzgAL3NwZWN0cmFsOS84AC9waXlnOS84AC9icmJnOS84AC9wdXJkOS84AC95bG9ycmQ5LzgAL29ycmQ5LzgAL3BhaXJlZDkvOAAvc2V0MzkvOAAvc2V0MTkvOAAvcGFzdGVsMTkvOAAvcmRneTgvOAAvYnVwdTgvOAAvcmRwdTgvOAAvcHVidTgvOAAveWxnbmJ1OC84AC9nbmJ1OC84AC9yZHlsYnU4LzgAL3JkYnU4LzgAL2FjY2VudDgvOAAvZ3JleXM4LzgAL2dyZWVuczgvOAAvYmx1ZXM4LzgAL3B1cnBsZXM4LzgAL29yYW5nZXM4LzgAL3JlZHM4LzgAL3B1b3I4LzgAL3lsb3JicjgvOAAvcHVidWduOC84AC9idWduOC84AC9wcmduOC84AC9yZHlsZ244LzgAL3lsZ244LzgAL3NwZWN0cmFsOC84AC9waXlnOC84AC9icmJnOC84AC9wdXJkOC84AC95bG9ycmQ4LzgAL29ycmQ4LzgAL3BhaXJlZDgvOAAvc2V0MzgvOAAvc2V0MjgvOAAvcGFzdGVsMjgvOAAvZGFyazI4LzgAL3NldDE4LzgAL3Bhc3RlbDE4LzgAL3BhaXJlZDEyLzgAL3NldDMxMi84AC9yZGd5MTEvOAAvcmR5bGJ1MTEvOAAvcmRidTExLzgAL3B1b3IxMS84AC9wcmduMTEvOAAvcmR5bGduMTEvOAAvc3BlY3RyYWwxMS84AC9waXlnMTEvOAAvYnJiZzExLzgAL3BhaXJlZDExLzgAL3NldDMxMS84AC9yZGd5MTAvOAAvcmR5bGJ1MTAvOAAvcmRidTEwLzgAL3B1b3IxMC84AC9wcmduMTAvOAAvcmR5bGduMTAvOAAvc3BlY3RyYWwxMC84AC9waXlnMTAvOAAvYnJiZzEwLzgAL3BhaXJlZDEwLzgAL3NldDMxMC84AHV0Zi04AEMuVVRGLTgAZ3JleTcAZ3JheTcAXHg3AFx4RjcAXHhFNwBceEQ3AFx4QzcAXHhCNwBceEE3AGdyZXk5NwBncmF5OTcAXHg5NwBncmV5ODcAZ3JheTg3AFx4ODcAZ3JleTc3AGdyYXk3NwBncmV5NjcAZ3JheTY3AGdyZXk1NwBncmF5NTcAZ3JleTQ3AGdyYXk0NwBncmV5MzcAZ3JheTM3AGdyZXkyNwBncmF5MjcAZ3JleTE3AGdyYXkxNwBceDE3AC9yZGd5OS83AC9idXB1OS83AC9yZHB1OS83AC9wdWJ1OS83AC95bGduYnU5LzcAL2duYnU5LzcAL3JkeWxidTkvNwAvcmRidTkvNwAvZ3JleXM5LzcAL2dyZWVuczkvNwAvYmx1ZXM5LzcAL3B1cnBsZXM5LzcAL29yYW5nZXM5LzcAL3JlZHM5LzcAL3B1b3I5LzcAL3lsb3JicjkvNwAvcHVidWduOS83AC9idWduOS83AC9wcmduOS83AC9yZHlsZ245LzcAL3lsZ245LzcAL3NwZWN0cmFsOS83AC9waXlnOS83AC9icmJnOS83AC9wdXJkOS83AC95bG9ycmQ5LzcAL29ycmQ5LzcAL3BhaXJlZDkvNwAvc2V0MzkvNwAvc2V0MTkvNwAvcGFzdGVsMTkvNwAvcmRneTgvNwAvYnVwdTgvNwAvcmRwdTgvNwAvcHVidTgvNwAveWxnbmJ1OC83AC9nbmJ1OC83AC9yZHlsYnU4LzcAL3JkYnU4LzcAL2FjY2VudDgvNwAvZ3JleXM4LzcAL2dyZWVuczgvNwAvYmx1ZXM4LzcAL3B1cnBsZXM4LzcAL29yYW5nZXM4LzcAL3JlZHM4LzcAL3B1b3I4LzcAL3lsb3JicjgvNwAvcHVidWduOC83AC9idWduOC83AC9wcmduOC83AC9yZHlsZ244LzcAL3lsZ244LzcAL3NwZWN0cmFsOC83AC9waXlnOC83AC9icmJnOC83AC9wdXJkOC83AC95bG9ycmQ4LzcAL29ycmQ4LzcAL3BhaXJlZDgvNwAvc2V0MzgvNwAvc2V0MjgvNwAvcGFzdGVsMjgvNwAvZGFyazI4LzcAL3NldDE4LzcAL3Bhc3RlbDE4LzcAL3JkZ3k3LzcAL2J1cHU3LzcAL3JkcHU3LzcAL3B1YnU3LzcAL3lsZ25idTcvNwAvZ25idTcvNwAvcmR5bGJ1Ny83AC9yZGJ1Ny83AC9hY2NlbnQ3LzcAL2dyZXlzNy83AC9ncmVlbnM3LzcAL2JsdWVzNy83AC9wdXJwbGVzNy83AC9vcmFuZ2VzNy83AC9yZWRzNy83AC9wdW9yNy83AC95bG9yYnI3LzcAL3B1YnVnbjcvNwAvYnVnbjcvNwAvcHJnbjcvNwAvcmR5bGduNy83AC95bGduNy83AC9zcGVjdHJhbDcvNwAvcGl5ZzcvNwAvYnJiZzcvNwAvcHVyZDcvNwAveWxvcnJkNy83AC9vcnJkNy83AC9wYWlyZWQ3LzcAL3NldDM3LzcAL3NldDI3LzcAL3Bhc3RlbDI3LzcAL2RhcmsyNy83AC9zZXQxNy83AC9wYXN0ZWwxNy83AC9wYWlyZWQxMi83AC9zZXQzMTIvNwAvcmRneTExLzcAL3JkeWxidTExLzcAL3JkYnUxMS83AC9wdW9yMTEvNwAvcHJnbjExLzcAL3JkeWxnbjExLzcAL3NwZWN0cmFsMTEvNwAvcGl5ZzExLzcAL2JyYmcxMS83AC9wYWlyZWQxMS83AC9zZXQzMTEvNwAvcmRneTEwLzcAL3JkeWxidTEwLzcAL3JkYnUxMC83AC9wdW9yMTAvNwAvcHJnbjEwLzcAL3JkeWxnbjEwLzcAL3NwZWN0cmFsMTAvNwAvcGl5ZzEwLzcAL2JyYmcxMC83AC9wYWlyZWQxMC83AC9zZXQzMTAvNwAxLjcAZ3JleTYAZ3JheTYAXHg2AFx4RjYAXHhFNgBceEQ2AFx4QzYAXHhCNgBceEE2AGdyZXk5NgBncmF5OTYAXHg5NgBncmV5ODYAZ3JheTg2AFx4ODYAZ3JleTc2AGdyYXk3NgBncmV5NjYAZ3JheTY2AGdyZXk1NgBncmF5NTYAZ3JleTQ2AGdyYXk0NgBncmV5MzYAZ3JheTM2AGdyZXkyNgBncmF5MjYAZ3JleTE2AGdyYXkxNgBceDE2AC9yZGd5OS82AC9idXB1OS82AC9yZHB1OS82AC9wdWJ1OS82AC95bGduYnU5LzYAL2duYnU5LzYAL3JkeWxidTkvNgAvcmRidTkvNgAvZ3JleXM5LzYAL2dyZWVuczkvNgAvYmx1ZXM5LzYAL3B1cnBsZXM5LzYAL29yYW5nZXM5LzYAL3JlZHM5LzYAL3B1b3I5LzYAL3lsb3JicjkvNgAvcHVidWduOS82AC9idWduOS82AC9wcmduOS82AC9yZHlsZ245LzYAL3lsZ245LzYAL3NwZWN0cmFsOS82AC9waXlnOS82AC9icmJnOS82AC9wdXJkOS82AC95bG9ycmQ5LzYAL29ycmQ5LzYAL3BhaXJlZDkvNgAvc2V0MzkvNgAvc2V0MTkvNgAvcGFzdGVsMTkvNgAvcmRneTgvNgAvYnVwdTgvNgAvcmRwdTgvNgAvcHVidTgvNgAveWxnbmJ1OC82AC9nbmJ1OC82AC9yZHlsYnU4LzYAL3JkYnU4LzYAL2FjY2VudDgvNgAvZ3JleXM4LzYAL2dyZWVuczgvNgAvYmx1ZXM4LzYAL3B1cnBsZXM4LzYAL29yYW5nZXM4LzYAL3JlZHM4LzYAL3B1b3I4LzYAL3lsb3JicjgvNgAvcHVidWduOC82AC9idWduOC82AC9wcmduOC82AC9yZHlsZ244LzYAL3lsZ244LzYAL3NwZWN0cmFsOC82AC9waXlnOC82AC9icmJnOC82AC9wdXJkOC82AC95bG9ycmQ4LzYAL29ycmQ4LzYAL3BhaXJlZDgvNgAvc2V0MzgvNgAvc2V0MjgvNgAvcGFzdGVsMjgvNgAvZGFyazI4LzYAL3NldDE4LzYAL3Bhc3RlbDE4LzYAL3JkZ3k3LzYAL2J1cHU3LzYAL3JkcHU3LzYAL3B1YnU3LzYAL3lsZ25idTcvNgAvZ25idTcvNgAvcmR5bGJ1Ny82AC9yZGJ1Ny82AC9hY2NlbnQ3LzYAL2dyZXlzNy82AC9ncmVlbnM3LzYAL2JsdWVzNy82AC9wdXJwbGVzNy82AC9vcmFuZ2VzNy82AC9yZWRzNy82AC9wdW9yNy82AC95bG9yYnI3LzYAL3B1YnVnbjcvNgAvYnVnbjcvNgAvcHJnbjcvNgAvcmR5bGduNy82AC95bGduNy82AC9zcGVjdHJhbDcvNgAvcGl5ZzcvNgAvYnJiZzcvNgAvcHVyZDcvNgAveWxvcnJkNy82AC9vcnJkNy82AC9wYWlyZWQ3LzYAL3NldDM3LzYAL3NldDI3LzYAL3Bhc3RlbDI3LzYAL2RhcmsyNy82AC9zZXQxNy82AC9wYXN0ZWwxNy82AC9yZGd5Ni82AC9idXB1Ni82AC9yZHB1Ni82AC9wdWJ1Ni82AC95bGduYnU2LzYAL2duYnU2LzYAL3JkeWxidTYvNgAvcmRidTYvNgAvYWNjZW50Ni82AC9ncmV5czYvNgAvZ3JlZW5zNi82AC9ibHVlczYvNgAvcHVycGxlczYvNgAvb3JhbmdlczYvNgAvcmVkczYvNgAvcHVvcjYvNgAveWxvcmJyNi82AC9wdWJ1Z242LzYAL2J1Z242LzYAL3ByZ242LzYAL3JkeWxnbjYvNgAveWxnbjYvNgAvc3BlY3RyYWw2LzYAL3BpeWc2LzYAL2JyYmc2LzYAL3B1cmQ2LzYAL3lsb3JyZDYvNgAvb3JyZDYvNgAvcGFpcmVkNi82AC9zZXQzNi82AC9zZXQyNi82AC9wYXN0ZWwyNi82AC9kYXJrMjYvNgAvc2V0MTYvNgAvcGFzdGVsMTYvNgAvcGFpcmVkMTIvNgAvc2V0MzEyLzYAL3JkZ3kxMS82AC9yZHlsYnUxMS82AC9yZGJ1MTEvNgAvcHVvcjExLzYAL3ByZ24xMS82AC9yZHlsZ24xMS82AC9zcGVjdHJhbDExLzYAL3BpeWcxMS82AC9icmJnMTEvNgAvcGFpcmVkMTEvNgAvc2V0MzExLzYAL3JkZ3kxMC82AC9yZHlsYnUxMC82AC9yZGJ1MTAvNgAvcHVvcjEwLzYAL3ByZ24xMC82AC9yZHlsZ24xMC82AC9zcGVjdHJhbDEwLzYAL3BpeWcxMC82AC9icmJnMTAvNgAvcGFpcmVkMTAvNgAvc2V0MzEwLzYAZ3JleTUAZ3JheTUAXHg1AGJpZzUAXHhGNQBceEU1AFx4RDUAXHhDNQBceEI1AFx4QTUAZ3JleTk1AGdyYXk5NQBceDk1AGdyZXk4NQBncmF5ODUAXHg4NQBncmV5NzUAZ3JheTc1AGdyZXk2NQBncmF5NjUAZ3JleTU1AGdyYXk1NQBncmV5NDUAZ3JheTQ1AGdyZXkzNQBncmF5MzUAZ3JleTI1AGdyYXkyNQBncmV5MTUAZ3JheTE1AFx4MTUAZ3JheTA1AC9yZGd5OS81AC9idXB1OS81AC9yZHB1OS81AC9wdWJ1OS81AC95bGduYnU5LzUAL2duYnU5LzUAL3JkeWxidTkvNQAvcmRidTkvNQAvZ3JleXM5LzUAL2dyZWVuczkvNQAvYmx1ZXM5LzUAL3B1cnBsZXM5LzUAL29yYW5nZXM5LzUAL3JlZHM5LzUAL3B1b3I5LzUAL3lsb3JicjkvNQAvcHVidWduOS81AC9idWduOS81AC9wcmduOS81AC9yZHlsZ245LzUAL3lsZ245LzUAL3NwZWN0cmFsOS81AC9waXlnOS81AC9icmJnOS81AC9wdXJkOS81AC95bG9ycmQ5LzUAL29ycmQ5LzUAL3BhaXJlZDkvNQAvc2V0MzkvNQAvc2V0MTkvNQAvcGFzdGVsMTkvNQAvcmRneTgvNQAvYnVwdTgvNQAvcmRwdTgvNQAvcHVidTgvNQAveWxnbmJ1OC81AC9nbmJ1OC81AC9yZHlsYnU4LzUAL3JkYnU4LzUAL2FjY2VudDgvNQAvZ3JleXM4LzUAL2dyZWVuczgvNQAvYmx1ZXM4LzUAL3B1cnBsZXM4LzUAL29yYW5nZXM4LzUAL3JlZHM4LzUAL3B1b3I4LzUAL3lsb3JicjgvNQAvcHVidWduOC81AC9idWduOC81AC9wcmduOC81AC9yZHlsZ244LzUAL3lsZ244LzUAL3NwZWN0cmFsOC81AC9waXlnOC81AC9icmJnOC81AC9wdXJkOC81AC95bG9ycmQ4LzUAL29ycmQ4LzUAL3BhaXJlZDgvNQAvc2V0MzgvNQAvc2V0MjgvNQAvcGFzdGVsMjgvNQAvZGFyazI4LzUAL3NldDE4LzUAL3Bhc3RlbDE4LzUAL3JkZ3k3LzUAL2J1cHU3LzUAL3JkcHU3LzUAL3B1YnU3LzUAL3lsZ25idTcvNQAvZ25idTcvNQAvcmR5bGJ1Ny81AC9yZGJ1Ny81AC9hY2NlbnQ3LzUAL2dyZXlzNy81AC9ncmVlbnM3LzUAL2JsdWVzNy81AC9wdXJwbGVzNy81AC9vcmFuZ2VzNy81AC9yZWRzNy81AC9wdW9yNy81AC95bG9yYnI3LzUAL3B1YnVnbjcvNQAvYnVnbjcvNQAvcHJnbjcvNQAvcmR5bGduNy81AC95bGduNy81AC9zcGVjdHJhbDcvNQAvcGl5ZzcvNQAvYnJiZzcvNQAvcHVyZDcvNQAveWxvcnJkNy81AC9vcnJkNy81AC9wYWlyZWQ3LzUAL3NldDM3LzUAL3NldDI3LzUAL3Bhc3RlbDI3LzUAL2RhcmsyNy81AC9zZXQxNy81AC9wYXN0ZWwxNy81AC9yZGd5Ni81AC9idXB1Ni81AC9yZHB1Ni81AC9wdWJ1Ni81AC95bGduYnU2LzUAL2duYnU2LzUAL3JkeWxidTYvNQAvcmRidTYvNQAvYWNjZW50Ni81AC9ncmV5czYvNQAvZ3JlZW5zNi81AC9ibHVlczYvNQAvcHVycGxlczYvNQAvb3JhbmdlczYvNQAvcmVkczYvNQAvcHVvcjYvNQAveWxvcmJyNi81AC9wdWJ1Z242LzUAL2J1Z242LzUAL3ByZ242LzUAL3JkeWxnbjYvNQAveWxnbjYvNQAvc3BlY3RyYWw2LzUAL3BpeWc2LzUAL2JyYmc2LzUAL3B1cmQ2LzUAL3lsb3JyZDYvNQAvb3JyZDYvNQAvcGFpcmVkNi81AC9zZXQzNi81AC9zZXQyNi81AC9wYXN0ZWwyNi81AC9kYXJrMjYvNQAvc2V0MTYvNQAvcGFzdGVsMTYvNQAvcmRneTUvNQAvYnVwdTUvNQAvcmRwdTUvNQAvcHVidTUvNQAveWxnbmJ1NS81AC9nbmJ1NS81AC9yZHlsYnU1LzUAL3JkYnU1LzUAL2FjY2VudDUvNQAvZ3JleXM1LzUAL2dyZWVuczUvNQAvYmx1ZXM1LzUAL3B1cnBsZXM1LzUAL29yYW5nZXM1LzUAL3JlZHM1LzUAL3B1b3I1LzUAL3lsb3JicjUvNQAvcHVidWduNS81AC9idWduNS81AC9wcmduNS81AC9yZHlsZ241LzUAL3lsZ241LzUAL3NwZWN0cmFsNS81AC9waXlnNS81AC9icmJnNS81AC9wdXJkNS81AC95bG9ycmQ1LzUAL29ycmQ1LzUAL3BhaXJlZDUvNQAvc2V0MzUvNQAvc2V0MjUvNQAvcGFzdGVsMjUvNQAvZGFyazI1LzUAL3NldDE1LzUAL3Bhc3RlbDE1LzUAL3BhaXJlZDEyLzUAL3NldDMxMi81AC9yZGd5MTEvNQAvcmR5bGJ1MTEvNQAvcmRidTExLzUAL3B1b3IxMS81AC9wcmduMTEvNQAvcmR5bGduMTEvNQAvc3BlY3RyYWwxMS81AC9waXlnMTEvNQAvYnJiZzExLzUAL3BhaXJlZDExLzUAL3NldDMxMS81AC9yZGd5MTAvNQAvcmR5bGJ1MTAvNQAvcmRidTEwLzUAL3B1b3IxMC81AC9wcmduMTAvNQAvcmR5bGduMTAvNQAvc3BlY3RyYWwxMC81AC9waXlnMTAvNQAvYnJiZzEwLzUAL3BhaXJlZDEwLzUAL3NldDMxMC81AGJpZy01AEJJRy01ACAtZGFzaCA1AGl2b3J5NABncmV5NABkYXJrc2xhdGVncmF5NABceDQAc25vdzQAbGlnaHR5ZWxsb3c0AGhvbmV5ZGV3NAB3aGVhdDQAdG9tYXRvNAByb3N5YnJvd240AG1hcm9vbjQAbGlnaHRzYWxtb240AGxlbW9uY2hpZmZvbjQAc3ByaW5nZ3JlZW40AGRhcmtvbGl2ZWdyZWVuNABwYWxlZ3JlZW40AGRhcmtzZWFncmVlbjQAbGlnaHRjeWFuNAB0YW40AHBsdW00AHNlYXNoZWxsNABjb3JhbDQAaG90cGluazQAbGlnaHRwaW5rNABkZWVwcGluazQAY29ybnNpbGs0AGZpcmVicmljazQAa2hha2k0AGxhdmVuZGVyYmx1c2g0AHBlYWNocHVmZjQAYmlzcXVlNABsaWdodHNreWJsdWU0AGRlZXBza3libHVlNABsaWdodGJsdWU0AGNhZGV0Ymx1ZTQAZG9kZ2VyYmx1ZTQAbGlnaHRzdGVlbGJsdWU0AHJveWFsYmx1ZTQAc2xhdGVibHVlNABuYXZham93aGl0ZTQAYW50aXF1ZXdoaXRlNABjaG9jb2xhdGU0AGNoYXJ0cmV1c2U0AG1pc3R5cm9zZTQAcGFsZXR1cnF1b2lzZTQAYXp1cmU0AHRoZXJlNABhcXVhbWFyaW5lNAB0aGlzdGxlNABtZWRpdW1wdXJwbGU0AGRhcmtvcmFuZ2U0AGxpZ2h0Z29sZGVucm9kNABkYXJrZ29sZGVucm9kNABidXJseXdvb2Q0AGdvbGQ0AG1lZGl1bW9yY2hpZDQAZGFya29yY2hpZDQAcGFsZXZpb2xldHJlZDQAaW5kaWFucmVkNABvcmFuZ2VyZWQ0AG9saXZlZHJhYjQAbWFnZW50YTQAc2llbm5hNABceEY0AFx4RTQAXHhENABceEM0AFx4QjQAXHhBNABncmV5OTQAZ3JheTk0AFx4OTQAZ3JleTg0AGdyYXk4NABceDg0AGdyZXk3NABncmF5NzQAZ3JleTY0AGdyYXk2NABncmV5NTQAZ3JheTU0AGdyZXk0NABncmF5NDQAZ3JleTM0AGdyYXkzNABmcmFjMzQAZ3JleTI0AGdyYXkyNABncmV5MTQAZ3JheTE0AFx4MTQAZnJhYzE0AC9yZGd5OS80AC9idXB1OS80AC9yZHB1OS80AC9wdWJ1OS80AC95bGduYnU5LzQAL2duYnU5LzQAL3JkeWxidTkvNAAvcmRidTkvNAAvZ3JleXM5LzQAL2dyZWVuczkvNAAvYmx1ZXM5LzQAL3B1cnBsZXM5LzQAL29yYW5nZXM5LzQAL3JlZHM5LzQAL3B1b3I5LzQAL3lsb3JicjkvNAAvcHVidWduOS80AC9idWduOS80AC9wcmduOS80AC9yZHlsZ245LzQAL3lsZ245LzQAL3NwZWN0cmFsOS80AC9waXlnOS80AC9icmJnOS80AC9wdXJkOS80AC95bG9ycmQ5LzQAL29ycmQ5LzQAL3BhaXJlZDkvNAAvc2V0MzkvNAAvc2V0MTkvNAAvcGFzdGVsMTkvNAAvcmRneTgvNAAvYnVwdTgvNAAvcmRwdTgvNAAvcHVidTgvNAAveWxnbmJ1OC80AC9nbmJ1OC80AC9yZHlsYnU4LzQAL3JkYnU4LzQAL2FjY2VudDgvNAAvZ3JleXM4LzQAL2dyZWVuczgvNAAvYmx1ZXM4LzQAL3B1cnBsZXM4LzQAL29yYW5nZXM4LzQAL3JlZHM4LzQAL3B1b3I4LzQAL3lsb3JicjgvNAAvcHVidWduOC80AC9idWduOC80AC9wcmduOC80AC9yZHlsZ244LzQAL3lsZ244LzQAL3NwZWN0cmFsOC80AC9waXlnOC80AC9icmJnOC80AC9wdXJkOC80AC95bG9ycmQ4LzQAL29ycmQ4LzQAL3BhaXJlZDgvNAAvc2V0MzgvNAAvc2V0MjgvNAAvcGFzdGVsMjgvNAAvZGFyazI4LzQAL3NldDE4LzQAL3Bhc3RlbDE4LzQAL3JkZ3k3LzQAL2J1cHU3LzQAL3JkcHU3LzQAL3B1YnU3LzQAL3lsZ25idTcvNAAvZ25idTcvNAAvcmR5bGJ1Ny80AC9yZGJ1Ny80AC9hY2NlbnQ3LzQAL2dyZXlzNy80AC9ncmVlbnM3LzQAL2JsdWVzNy80AC9wdXJwbGVzNy80AC9vcmFuZ2VzNy80AC9yZWRzNy80AC9wdW9yNy80AC95bG9yYnI3LzQAL3B1YnVnbjcvNAAvYnVnbjcvNAAvcHJnbjcvNAAvcmR5bGduNy80AC95bGduNy80AC9zcGVjdHJhbDcvNAAvcGl5ZzcvNAAvYnJiZzcvNAAvcHVyZDcvNAAveWxvcnJkNy80AC9vcnJkNy80AC9wYWlyZWQ3LzQAL3NldDM3LzQAL3NldDI3LzQAL3Bhc3RlbDI3LzQAL2RhcmsyNy80AC9zZXQxNy80AC9wYXN0ZWwxNy80AC9yZGd5Ni80AC9idXB1Ni80AC9yZHB1Ni80AC9wdWJ1Ni80AC95bGduYnU2LzQAL2duYnU2LzQAL3JkeWxidTYvNAAvcmRidTYvNAAvYWNjZW50Ni80AC9ncmV5czYvNAAvZ3JlZW5zNi80AC9ibHVlczYvNAAvcHVycGxlczYvNAAvb3JhbmdlczYvNAAvcmVkczYvNAAvcHVvcjYvNAAveWxvcmJyNi80AC9wdWJ1Z242LzQAL2J1Z242LzQAL3ByZ242LzQAL3JkeWxnbjYvNAAveWxnbjYvNAAvc3BlY3RyYWw2LzQAL3BpeWc2LzQAL2JyYmc2LzQAL3B1cmQ2LzQAL3lsb3JyZDYvNAAvb3JyZDYvNAAvcGFpcmVkNi80AC9zZXQzNi80AC9zZXQyNi80AC9wYXN0ZWwyNi80AC9kYXJrMjYvNAAvc2V0MTYvNAAvcGFzdGVsMTYvNAAvcmRneTUvNAAvYnVwdTUvNAAvcmRwdTUvNAAvcHVidTUvNAAveWxnbmJ1NS80AC9nbmJ1NS80AC9yZHlsYnU1LzQAL3JkYnU1LzQAL2FjY2VudDUvNAAvZ3JleXM1LzQAL2dyZWVuczUvNAAvYmx1ZXM1LzQAL3B1cnBsZXM1LzQAL29yYW5nZXM1LzQAL3JlZHM1LzQAL3B1b3I1LzQAL3lsb3JicjUvNAAvcHVidWduNS80AC9idWduNS80AC9wcmduNS80AC9yZHlsZ241LzQAL3lsZ241LzQAL3NwZWN0cmFsNS80AC9waXlnNS80AC9icmJnNS80AC9wdXJkNS80AC95bG9ycmQ1LzQAL29ycmQ1LzQAL3BhaXJlZDUvNAAvc2V0MzUvNAAvc2V0MjUvNAAvcGFzdGVsMjUvNAAvZGFyazI1LzQAL3NldDE1LzQAL3Bhc3RlbDE1LzQAL3JkZ3k0LzQAL2J1cHU0LzQAL3JkcHU0LzQAL3B1YnU0LzQAL3lsZ25idTQvNAAvZ25idTQvNAAvcmR5bGJ1NC80AC9yZGJ1NC80AC9hY2NlbnQ0LzQAL2dyZXlzNC80AC9ncmVlbnM0LzQAL2JsdWVzNC80AC9wdXJwbGVzNC80AC9vcmFuZ2VzNC80AC9yZWRzNC80AC9wdW9yNC80AC95bG9yYnI0LzQAL3B1YnVnbjQvNAAvYnVnbjQvNAAvcHJnbjQvNAAvcmR5bGduNC80AC95bGduNC80AC9zcGVjdHJhbDQvNAAvcGl5ZzQvNAAvYnJiZzQvNAAvcHVyZDQvNAAveWxvcnJkNC80AC9vcnJkNC80AC9wYWlyZWQ0LzQAL3NldDM0LzQAL3NldDI0LzQAL3Bhc3RlbDI0LzQAL2RhcmsyNC80AC9zZXQxNC80AC9wYXN0ZWwxNC80AC9wYWlyZWQxMi80AC9zZXQzMTIvNAAvcmRneTExLzQAL3JkeWxidTExLzQAL3JkYnUxMS80AC9wdW9yMTEvNAAvcHJnbjExLzQAL3JkeWxnbjExLzQAL3NwZWN0cmFsMTEvNAAvcGl5ZzExLzQAL2JyYmcxMS80AC9wYWlyZWQxMS80AC9zZXQzMTEvNAAvcmRneTEwLzQAL3JkeWxidTEwLzQAL3JkYnUxMC80AC9wdW9yMTAvNAAvcHJnbjEwLzQAL3JkeWxnbjEwLzQAL3NwZWN0cmFsMTAvNAAvcGl5ZzEwLzQAL2JyYmcxMC80AC9wYWlyZWQxMC80AC9zZXQzMTAvNAAxLjQAbiA+PSA0AHNpZGVzID09IDQAaXZvcnkzAFNwYXJzZU1hdHJpeF9tdWx0aXBseTMAZ3JleTMAZGFya3NsYXRlZ3JheTMAXHgzAHNub3czAGxpZ2h0eWVsbG93MwBob25leWRldzMAd2hlYXQzAHN1cDMAdG9tYXRvMwByb3N5YnJvd24zAG1hcm9vbjMAbGlnaHRzYWxtb24zAGxlbW9uY2hpZmZvbjMAc3ByaW5nZ3JlZW4zAGRhcmtvbGl2ZWdyZWVuMwBwYWxlZ3JlZW4zAGRhcmtzZWFncmVlbjMAbGlnaHRjeWFuMwB0YW4zAHBsdW0zAHNlYXNoZWxsMwBjb3JhbDMAaG90cGluazMAbGlnaHRwaW5rMwBkZWVwcGluazMAY29ybnNpbGszAGZpcmVicmljazMAa2hha2kzAGxhdmVuZGVyYmx1c2gzAHBlYWNocHVmZjMAYmlzcXVlMwBsaWdodHNreWJsdWUzAGRlZXBza3libHVlMwBsaWdodGJsdWUzAGNhZGV0Ymx1ZTMAZG9kZ2VyYmx1ZTMAbGlnaHRzdGVlbGJsdWUzAHJveWFsYmx1ZTMAc2xhdGVibHVlMwBuYXZham93aGl0ZTMAYW50aXF1ZXdoaXRlMwBjaG9jb2xhdGUzAGNoYXJ0cmV1c2UzAG1pc3R5cm9zZTMAcGFsZXR1cnF1b2lzZTMAYXp1cmUzAGFxdWFtYXJpbmUzAHRoaXN0bGUzAG1lZGl1bXB1cnBsZTMAZGFya29yYW5nZTMAbGlnaHRnb2xkZW5yb2QzAGRhcmtnb2xkZW5yb2QzAGJ1cmx5d29vZDMAZ29sZDMAbWVkaXVtb3JjaGlkMwBkYXJrb3JjaGlkMwBwYWxldmlvbGV0cmVkMwBpbmRpYW5yZWQzAG9yYW5nZXJlZDMAb2xpdmVkcmFiMwBtYWdlbnRhMwBzaWVubmEzAFx4RjMAXHhFMwBceEQzAFx4QzMAXHhCMwBceEEzAGdyZXk5MwBncmF5OTMAXHg5MwBncmV5ODMAZ3JheTgzAFx4ODMAZ3JleTczAGdyYXk3MwBncmV5NjMAZ3JheTYzAGdyZXk1MwBncmF5NTMAZ3JleTQzAGdyYXk0MwBncmV5MzMAZ3JheTMzADIwMjQwODExLjIyMzMAZ3JleTIzAGdyYXkyMwBncmV5MTMAZ3JheTEzAFx4MTMAL3JkZ3k5LzMAL2J1cHU5LzMAL3JkcHU5LzMAL3B1YnU5LzMAL3lsZ25idTkvMwAvZ25idTkvMwAvcmR5bGJ1OS8zAC9yZGJ1OS8zAC9ncmV5czkvMwAvZ3JlZW5zOS8zAC9ibHVlczkvMwAvcHVycGxlczkvMwAvb3JhbmdlczkvMwAvcmVkczkvMwAvcHVvcjkvMwAveWxvcmJyOS8zAC9wdWJ1Z245LzMAL2J1Z245LzMAL3ByZ245LzMAL3JkeWxnbjkvMwAveWxnbjkvMwAvc3BlY3RyYWw5LzMAL3BpeWc5LzMAL2JyYmc5LzMAL3B1cmQ5LzMAL3lsb3JyZDkvMwAvb3JyZDkvMwAvcGFpcmVkOS8zAC9zZXQzOS8zAC9zZXQxOS8zAC9wYXN0ZWwxOS8zAC9yZGd5OC8zAC9idXB1OC8zAC9yZHB1OC8zAC9wdWJ1OC8zAC95bGduYnU4LzMAL2duYnU4LzMAL3JkeWxidTgvMwAvcmRidTgvMwAvYWNjZW50OC8zAC9ncmV5czgvMwAvZ3JlZW5zOC8zAC9ibHVlczgvMwAvcHVycGxlczgvMwAvb3JhbmdlczgvMwAvcmVkczgvMwAvcHVvcjgvMwAveWxvcmJyOC8zAC9wdWJ1Z244LzMAL2J1Z244LzMAL3ByZ244LzMAL3JkeWxnbjgvMwAveWxnbjgvMwAvc3BlY3RyYWw4LzMAL3BpeWc4LzMAL2JyYmc4LzMAL3B1cmQ4LzMAL3lsb3JyZDgvMwAvb3JyZDgvMwAvcGFpcmVkOC8zAC9zZXQzOC8zAC9zZXQyOC8zAC9wYXN0ZWwyOC8zAC9kYXJrMjgvMwAvc2V0MTgvMwAvcGFzdGVsMTgvMwAvcmRneTcvMwAvYnVwdTcvMwAvcmRwdTcvMwAvcHVidTcvMwAveWxnbmJ1Ny8zAC9nbmJ1Ny8zAC9yZHlsYnU3LzMAL3JkYnU3LzMAL2FjY2VudDcvMwAvZ3JleXM3LzMAL2dyZWVuczcvMwAvYmx1ZXM3LzMAL3B1cnBsZXM3LzMAL29yYW5nZXM3LzMAL3JlZHM3LzMAL3B1b3I3LzMAL3lsb3JicjcvMwAvcHVidWduNy8zAC9idWduNy8zAC9wcmduNy8zAC9yZHlsZ243LzMAL3lsZ243LzMAL3NwZWN0cmFsNy8zAC9waXlnNy8zAC9icmJnNy8zAC9wdXJkNy8zAC95bG9ycmQ3LzMAL29ycmQ3LzMAL3BhaXJlZDcvMwAvc2V0MzcvMwAvc2V0MjcvMwAvcGFzdGVsMjcvMwAvZGFyazI3LzMAL3NldDE3LzMAL3Bhc3RlbDE3LzMAL3JkZ3k2LzMAL2J1cHU2LzMAL3JkcHU2LzMAL3B1YnU2LzMAL3lsZ25idTYvMwAvZ25idTYvMwAvcmR5bGJ1Ni8zAC9yZGJ1Ni8zAC9hY2NlbnQ2LzMAL2dyZXlzNi8zAC9ncmVlbnM2LzMAL2JsdWVzNi8zAC9wdXJwbGVzNi8zAC9vcmFuZ2VzNi8zAC9yZWRzNi8zAC9wdW9yNi8zAC95bG9yYnI2LzMAL3B1YnVnbjYvMwAvYnVnbjYvMwAvcHJnbjYvMwAvcmR5bGduNi8zAC95bGduNi8zAC9zcGVjdHJhbDYvMwAvcGl5ZzYvMwAvYnJiZzYvMwAvcHVyZDYvMwAveWxvcnJkNi8zAC9vcnJkNi8zAC9wYWlyZWQ2LzMAL3NldDM2LzMAL3NldDI2LzMAL3Bhc3RlbDI2LzMAL2RhcmsyNi8zAC9zZXQxNi8zAC9wYXN0ZWwxNi8zAC9yZGd5NS8zAC9idXB1NS8zAC9yZHB1NS8zAC9wdWJ1NS8zAC95bGduYnU1LzMAL2duYnU1LzMAL3JkeWxidTUvMwAvcmRidTUvMwAvYWNjZW50NS8zAC9ncmV5czUvMwAvZ3JlZW5zNS8zAC9ibHVlczUvMwAvcHVycGxlczUvMwAvb3JhbmdlczUvMwAvcmVkczUvMwAvcHVvcjUvMwAveWxvcmJyNS8zAC9wdWJ1Z241LzMAL2J1Z241LzMAL3ByZ241LzMAL3JkeWxnbjUvMwAveWxnbjUvMwAvc3BlY3RyYWw1LzMAL3BpeWc1LzMAL2JyYmc1LzMAL3B1cmQ1LzMAL3lsb3JyZDUvMwAvb3JyZDUvMwAvcGFpcmVkNS8zAC9zZXQzNS8zAC9zZXQyNS8zAC9wYXN0ZWwyNS8zAC9kYXJrMjUvMwAvc2V0MTUvMwAvcGFzdGVsMTUvMwAvcmRneTQvMwAvYnVwdTQvMwAvcmRwdTQvMwAvcHVidTQvMwAveWxnbmJ1NC8zAC9nbmJ1NC8zAC9yZHlsYnU0LzMAL3JkYnU0LzMAL2FjY2VudDQvMwAvZ3JleXM0LzMAL2dyZWVuczQvMwAvYmx1ZXM0LzMAL3B1cnBsZXM0LzMAL29yYW5nZXM0LzMAL3JlZHM0LzMAL3B1b3I0LzMAL3lsb3JicjQvMwAvcHVidWduNC8zAC9idWduNC8zAC9wcmduNC8zAC9yZHlsZ240LzMAL3lsZ240LzMAL3NwZWN0cmFsNC8zAC9waXlnNC8zAC9icmJnNC8zAC9wdXJkNC8zAC95bG9ycmQ0LzMAL29ycmQ0LzMAL3BhaXJlZDQvMwAvc2V0MzQvMwAvc2V0MjQvMwAvcGFzdGVsMjQvMwAvZGFyazI0LzMAL3NldDE0LzMAL3Bhc3RlbDE0LzMAL3JkZ3kzLzMAL2J1cHUzLzMAL3JkcHUzLzMAL3B1YnUzLzMAL3lsZ25idTMvMwAvZ25idTMvMwAvcmR5bGJ1My8zAC9yZGJ1My8zAC9hY2NlbnQzLzMAL2dyZXlzMy8zAC9ncmVlbnMzLzMAL2JsdWVzMy8zAC9wdXJwbGVzMy8zAC9vcmFuZ2VzMy8zAC9yZWRzMy8zAC9wdW9yMy8zAC95bG9yYnIzLzMAL3B1YnVnbjMvMwAvYnVnbjMvMwAvcHJnbjMvMwAvcmR5bGduMy8zAC95bGduMy8zAC9zcGVjdHJhbDMvMwAvcGl5ZzMvMwAvYnJiZzMvMwAvcHVyZDMvMwAveWxvcnJkMy8zAC9vcnJkMy8zAC9wYWlyZWQzLzMAL3NldDMzLzMAL3NldDIzLzMAL3Bhc3RlbDIzLzMAL2RhcmsyMy8zAC9zZXQxMy8zAC9wYXN0ZWwxMy8zAC9wYWlyZWQxMi8zAC9zZXQzMTIvMwAvcmRneTExLzMAL3JkeWxidTExLzMAL3JkYnUxMS8zAC9wdW9yMTEvMwAvcHJnbjExLzMAL3JkeWxnbjExLzMAL3NwZWN0cmFsMTEvMwAvcGl5ZzExLzMAL2JyYmcxMS8zAC9wYWlyZWQxMS8zAC9zZXQzMTEvMwAvcmRneTEwLzMAL3JkeWxidTEwLzMAL3JkYnUxMC8zAC9wdW9yMTAvMwAvcHJnbjEwLzMAL3JkeWxnbjEwLzMAL3NwZWN0cmFsMTAvMwAvcGl5ZzEwLzMAL2JyYmcxMC8zAC9wYWlyZWQxMC8zAC9zZXQzMTAvMwBpdm9yeTIAZ3JleTIAZGFya3NsYXRlZ3JheTIAXHgyAHNub3cyAGxpZ2h0eWVsbG93MgBob25leWRldzIAUlRyZWVJbnNlcnQyAHdoZWF0MgBzdXAyAG5vcDIAdG9tYXRvMgByb3N5YnJvd24yAG1hcm9vbjIAbGlnaHRzYWxtb24yAGxlbW9uY2hpZmZvbjIAc3ByaW5nZ3JlZW4yAGRhcmtvbGl2ZWdyZWVuMgBwYWxlZ3JlZW4yAGRhcmtzZWFncmVlbjIAbGlnaHRjeWFuMgB0YW4yAHBsdW0yAHNlYXNoZWxsMgBjb3JhbDIAaG90cGluazIAbGlnaHRwaW5rMgBkZWVwcGluazIAY29ybnNpbGsyAGZpcmVicmljazIAa2hha2kyAGxhdmVuZGVyYmx1c2gyAHBlYWNocHVmZjIAYnJvbnplMgBiaXNxdWUyAGxpZ2h0c2t5Ymx1ZTIAZGVlcHNreWJsdWUyAGxpZ2h0Ymx1ZTIAY2FkZXRibHVlMgBkb2RnZXJibHVlMgBsaWdodHN0ZWVsYmx1ZTIAcm95YWxibHVlMgBzbGF0ZWJsdWUyAG5hdmFqb3doaXRlMgBhbnRpcXVld2hpdGUyAGNob2NvbGF0ZTIAY2hhcnRyZXVzZTIAbWlzdHlyb3NlMgBwYWxldHVycXVvaXNlMgBhenVyZTIAYXF1YW1hcmluZTIAdGhpc3RsZTIAbWVkaXVtcHVycGxlMgBkYXJrb3JhbmdlMgBsaWdodGdvbGRlbnJvZDIAZGFya2dvbGRlbnJvZDIAYnVybHl3b29kMgBnb2xkMgBtZWRpdW1vcmNoaWQyAGRhcmtvcmNoaWQyAHBhbGV2aW9sZXRyZWQyAGluZGlhbnJlZDIAb3JhbmdlcmVkMgBvbGl2ZWRyYWIyAG1hZ2VudGEyAHNpZW5uYTIAXHhGMgBceEUyAFx4RDIAXHhDMgBceEIyAFx4QTIAZ3JleTkyAGdyYXk5MgBceDkyAGdyZXk4MgBncmF5ODIAXHg4MgBncmV5NzIAZ3JheTcyAGdyZXk2MgBncmF5NjIAZ3JleTUyAGdyYXk1MgBncmV5NDIAZ3JheTQyAGdyZXkzMgBncmF5MzIAZ3JleTIyAGdyYXkyMgBncmV5MTIAZ3JheTEyAFx4MTIAZnJhYzEyAC9wYWlyZWQxMi8xMgAvc2V0MzEyLzEyAC9yZGd5OS8yAC9idXB1OS8yAC9yZHB1OS8yAC9wdWJ1OS8yAC95bGduYnU5LzIAL2duYnU5LzIAL3JkeWxidTkvMgAvcmRidTkvMgAvZ3JleXM5LzIAL2dyZWVuczkvMgAvYmx1ZXM5LzIAL3B1cnBsZXM5LzIAL29yYW5nZXM5LzIAL3JlZHM5LzIAL3B1b3I5LzIAL3lsb3JicjkvMgAvcHVidWduOS8yAC9idWduOS8yAC9wcmduOS8yAC9yZHlsZ245LzIAL3lsZ245LzIAL3NwZWN0cmFsOS8yAC9waXlnOS8yAC9icmJnOS8yAC9wdXJkOS8yAC95bG9ycmQ5LzIAL29ycmQ5LzIAL3BhaXJlZDkvMgAvc2V0MzkvMgAvc2V0MTkvMgAvcGFzdGVsMTkvMgAvcmRneTgvMgAvYnVwdTgvMgAvcmRwdTgvMgAvcHVidTgvMgAveWxnbmJ1OC8yAC9nbmJ1OC8yAC9yZHlsYnU4LzIAL3JkYnU4LzIAL2FjY2VudDgvMgAvZ3JleXM4LzIAL2dyZWVuczgvMgAvYmx1ZXM4LzIAL3B1cnBsZXM4LzIAL29yYW5nZXM4LzIAL3JlZHM4LzIAL3B1b3I4LzIAL3lsb3JicjgvMgAvcHVidWduOC8yAC9idWduOC8yAC9wcmduOC8yAC9yZHlsZ244LzIAL3lsZ244LzIAL3NwZWN0cmFsOC8yAC9waXlnOC8yAC9icmJnOC8yAC9wdXJkOC8yAC95bG9ycmQ4LzIAL29ycmQ4LzIAL3BhaXJlZDgvMgAvc2V0MzgvMgAvc2V0MjgvMgAvcGFzdGVsMjgvMgAvZGFyazI4LzIAL3NldDE4LzIAL3Bhc3RlbDE4LzIAL3JkZ3k3LzIAL2J1cHU3LzIAL3JkcHU3LzIAL3B1YnU3LzIAL3lsZ25idTcvMgAvZ25idTcvMgAvcmR5bGJ1Ny8yAC9yZGJ1Ny8yAC9hY2NlbnQ3LzIAL2dyZXlzNy8yAC9ncmVlbnM3LzIAL2JsdWVzNy8yAC9wdXJwbGVzNy8yAC9vcmFuZ2VzNy8yAC9yZWRzNy8yAC9wdW9yNy8yAC95bG9yYnI3LzIAL3B1YnVnbjcvMgAvYnVnbjcvMgAvcHJnbjcvMgAvcmR5bGduNy8yAC95bGduNy8yAC9zcGVjdHJhbDcvMgAvcGl5ZzcvMgAvYnJiZzcvMgAvcHVyZDcvMgAveWxvcnJkNy8yAC9vcnJkNy8yAC9wYWlyZWQ3LzIAL3NldDM3LzIAL3NldDI3LzIAL3Bhc3RlbDI3LzIAL2RhcmsyNy8yAC9zZXQxNy8yAC9wYXN0ZWwxNy8yAC9yZGd5Ni8yAC9idXB1Ni8yAC9yZHB1Ni8yAC9wdWJ1Ni8yAC95bGduYnU2LzIAL2duYnU2LzIAL3JkeWxidTYvMgAvcmRidTYvMgAvYWNjZW50Ni8yAC9ncmV5czYvMgAvZ3JlZW5zNi8yAC9ibHVlczYvMgAvcHVycGxlczYvMgAvb3JhbmdlczYvMgAvcmVkczYvMgAvcHVvcjYvMgAveWxvcmJyNi8yAC9wdWJ1Z242LzIAL2J1Z242LzIAL3ByZ242LzIAL3JkeWxnbjYvMgAveWxnbjYvMgAvc3BlY3RyYWw2LzIAL3BpeWc2LzIAL2JyYmc2LzIAL3B1cmQ2LzIAL3lsb3JyZDYvMgAvb3JyZDYvMgAvcGFpcmVkNi8yAC9zZXQzNi8yAC9zZXQyNi8yAC9wYXN0ZWwyNi8yAC9kYXJrMjYvMgAvc2V0MTYvMgAvcGFzdGVsMTYvMgAvcmRneTUvMgAvYnVwdTUvMgAvcmRwdTUvMgAvcHVidTUvMgAveWxnbmJ1NS8yAC9nbmJ1NS8yAC9yZHlsYnU1LzIAL3JkYnU1LzIAL2FjY2VudDUvMgAvZ3JleXM1LzIAL2dyZWVuczUvMgAvYmx1ZXM1LzIAL3B1cnBsZXM1LzIAL29yYW5nZXM1LzIAL3JlZHM1LzIAL3B1b3I1LzIAL3lsb3JicjUvMgAvcHVidWduNS8yAC9idWduNS8yAC9wcmduNS8yAC9yZHlsZ241LzIAL3lsZ241LzIAL3NwZWN0cmFsNS8yAC9waXlnNS8yAC9icmJnNS8yAC9wdXJkNS8yAC95bG9ycmQ1LzIAL29ycmQ1LzIAL3BhaXJlZDUvMgAvc2V0MzUvMgAvc2V0MjUvMgAvcGFzdGVsMjUvMgAvZGFyazI1LzIAL3NldDE1LzIAL3Bhc3RlbDE1LzIAL3JkZ3k0LzIAL2J1cHU0LzIAL3JkcHU0LzIAL3B1YnU0LzIAL3lsZ25idTQvMgAvZ25idTQvMgAvcmR5bGJ1NC8yAC9yZGJ1NC8yAC9hY2NlbnQ0LzIAL2dyZXlzNC8yAC9ncmVlbnM0LzIAL2JsdWVzNC8yAC9wdXJwbGVzNC8yAC9vcmFuZ2VzNC8yAC9yZWRzNC8yAC9wdW9yNC8yAC95bG9yYnI0LzIAL3B1YnVnbjQvMgAvYnVnbjQvMgAvcHJnbjQvMgAvcmR5bGduNC8yAC95bGduNC8yAC9zcGVjdHJhbDQvMgAvcGl5ZzQvMgAvYnJiZzQvMgAvcHVyZDQvMgAveWxvcnJkNC8yAC9vcnJkNC8yAC9wYWlyZWQ0LzIAL3NldDM0LzIAL3NldDI0LzIAL3Bhc3RlbDI0LzIAL2RhcmsyNC8yAC9zZXQxNC8yAC9wYXN0ZWwxNC8yAC9yZGd5My8yAC9idXB1My8yAC9yZHB1My8yAC9wdWJ1My8yAC95bGduYnUzLzIAL2duYnUzLzIAL3JkeWxidTMvMgAvcmRidTMvMgAvYWNjZW50My8yAC9ncmV5czMvMgAvZ3JlZW5zMy8yAC9ibHVlczMvMgAvcHVycGxlczMvMgAvb3JhbmdlczMvMgAvcmVkczMvMgAvcHVvcjMvMgAveWxvcmJyMy8yAC9wdWJ1Z24zLzIAL2J1Z24zLzIAL3ByZ24zLzIAL3JkeWxnbjMvMgAveWxnbjMvMgAvc3BlY3RyYWwzLzIAL3BpeWczLzIAL2JyYmczLzIAL3B1cmQzLzIAL3lsb3JyZDMvMgAvb3JyZDMvMgAvcGFpcmVkMy8yAC9zZXQzMy8yAC9zZXQyMy8yAC9wYXN0ZWwyMy8yAC9kYXJrMjMvMgAvc2V0MTMvMgAvcGFzdGVsMTMvMgAvcGFpcmVkMTIvMgAvc2V0MzEyLzIAL3JkZ3kxMS8yAC9yZHlsYnUxMS8yAC9yZGJ1MTEvMgAvcHVvcjExLzIAL3ByZ24xMS8yAC9yZHlsZ24xMS8yAC9zcGVjdHJhbDExLzIAL3BpeWcxMS8yAC9icmJnMTEvMgAvcGFpcmVkMTEvMgAvc2V0MzExLzIAL3JkZ3kxMC8yAC9yZHlsYnUxMC8yAC9yZGJ1MTAvMgAvcHVvcjEwLzIAL3ByZ24xMC8yAC9yZHlsZ24xMC8yAC9zcGVjdHJhbDEwLzIAL3BpeWcxMC8yAC9icmJnMTAvMgAvcGFpcmVkMTAvMgAvc2V0MzEwLzIAMS4yACAtZGFzaCAyAHN6ID49IDIAbGVuID49IDIAZXhwID09IDEgfHwgZXhwID09IDIAZGltID09IDIATkRfb3V0KHYpLnNpemUgPT0gMgBpdm9yeTEAZ3JleTEAZGFya3NsYXRlZ3JheTEAXHgxAHNub3cxAGxpZ2h0eWVsbG93MQBob25leWRldzEAbnNsaW1pdDEAd2hlYXQxAHN1cDEAbm9wMQB0b21hdG8xAHJvc3licm93bjEAbWFyb29uMQBsaWdodHNhbG1vbjEAbGVtb25jaGlmZm9uMQBsYXRpbjEAYWdvcGVuMQBzcHJpbmdncmVlbjEAZGFya29saXZlZ3JlZW4xAHBhbGVncmVlbjEAZGFya3NlYWdyZWVuMQBsaWdodGN5YW4xAHRhbjEAcGx1bTEAc2Vhc2hlbGwxAGNvcmFsMQBob3RwaW5rMQBsaWdodHBpbmsxAGRlZXBwaW5rMQBjb3Juc2lsazEAZmlyZWJyaWNrMQBqMCA8PSBpMSAmJiBpMSA8PSBqMQBraGFraTEAbGF2ZW5kZXJibHVzaDEAcGVhY2hwdWZmMQBiaXNxdWUxAGxpZ2h0c2t5Ymx1ZTEAZGVlcHNreWJsdWUxAGxpZ2h0Ymx1ZTEAY2FkZXRibHVlMQBkb2RnZXJibHVlMQBsaWdodHN0ZWVsYmx1ZTEAcm95YWxibHVlMQBzbGF0ZWJsdWUxAG5hdmFqb3doaXRlMQBhbnRpcXVld2hpdGUxAGNob2NvbGF0ZTEAY2hhcnRyZXVzZTEAbWlzdHlyb3NlMQBwYWxldHVycXVvaXNlMQBhenVyZTEAYXF1YW1hcmluZTEAdGhpc3RsZTEAbWVkaXVtcHVycGxlMQBkYXJrb3JhbmdlMQBhcmdfZTAgJiYgYXJnX2UxAGxpZ2h0Z29sZGVucm9kMQBkYXJrZ29sZGVucm9kMQBidXJseXdvb2QxAGdvbGQxAG1lZGl1bW9yY2hpZDEAZGFya29yY2hpZDEAcGFsZXZpb2xldHJlZDEAaW5kaWFucmVkMQBvcmFuZ2VyZWQxAG9saXZlZHJhYjEAbWFnZW50YTEAc2llbm5hMQBceEYxAFx4RTEAXHhEMQBceEMxAFx4QjEAXHhBMQBncmV5OTEAZ3JheTkxAFx4OTEAZ3JleTgxAGdyYXk4MQBceDgxAGdyZXk3MQBncmF5NzEAZ3JleTYxAGdyYXk2MQBncmV5NTEAZ3JheTUxAGdyZXk0MQBncmF5NDEAZ3JleTMxAGdyYXkzMQBncmV5MjEAZ3JheTIxAGdyZXkxMQBncmF5MTEAXHgxMQAvcGFpcmVkMTIvMTEAL3NldDMxMi8xMQAvcmRneTExLzExAC9yZHlsYnUxMS8xMQAvcmRidTExLzExAC9wdW9yMTEvMTEAL3ByZ24xMS8xMQAvcmR5bGduMTEvMTEAL3NwZWN0cmFsMTEvMTEAL3BpeWcxMS8xMQAvYnJiZzExLzExAC9wYWlyZWQxMS8xMQAvc2V0MzExLzExAGNzW2ldLT5zbGFjaygpPi0wLjAwMDAwMDEAL3JkZ3k5LzEAL2J1cHU5LzEAL3JkcHU5LzEAL3B1YnU5LzEAL3lsZ25idTkvMQAvZ25idTkvMQAvcmR5bGJ1OS8xAC9yZGJ1OS8xAC9ncmV5czkvMQAvZ3JlZW5zOS8xAC9ibHVlczkvMQAvcHVycGxlczkvMQAvb3JhbmdlczkvMQAvcmVkczkvMQAvcHVvcjkvMQAveWxvcmJyOS8xAC9wdWJ1Z245LzEAL2J1Z245LzEAL3ByZ245LzEAL3JkeWxnbjkvMQAveWxnbjkvMQAvc3BlY3RyYWw5LzEAL3BpeWc5LzEAL2JyYmc5LzEAL3B1cmQ5LzEAL3lsb3JyZDkvMQAvb3JyZDkvMQAvcGFpcmVkOS8xAC9zZXQzOS8xAC9zZXQxOS8xAC9wYXN0ZWwxOS8xAC9yZGd5OC8xAC9idXB1OC8xAC9yZHB1OC8xAC9wdWJ1OC8xAC95bGduYnU4LzEAL2duYnU4LzEAL3JkeWxidTgvMQAvcmRidTgvMQAvYWNjZW50OC8xAC9ncmV5czgvMQAvZ3JlZW5zOC8xAC9ibHVlczgvMQAvcHVycGxlczgvMQAvb3JhbmdlczgvMQAvcmVkczgvMQAvcHVvcjgvMQAveWxvcmJyOC8xAC9wdWJ1Z244LzEAL2J1Z244LzEAL3ByZ244LzEAL3JkeWxnbjgvMQAveWxnbjgvMQAvc3BlY3RyYWw4LzEAL3BpeWc4LzEAL2JyYmc4LzEAL3B1cmQ4LzEAL3lsb3JyZDgvMQAvb3JyZDgvMQAvcGFpcmVkOC8xAC9zZXQzOC8xAC9zZXQyOC8xAC9wYXN0ZWwyOC8xAC9kYXJrMjgvMQAvc2V0MTgvMQAvcGFzdGVsMTgvMQAvcmRneTcvMQAvYnVwdTcvMQAvcmRwdTcvMQAvcHVidTcvMQAveWxnbmJ1Ny8xAC9nbmJ1Ny8xAC9yZHlsYnU3LzEAL3JkYnU3LzEAL2FjY2VudDcvMQAvZ3JleXM3LzEAL2dyZWVuczcvMQAvYmx1ZXM3LzEAL3B1cnBsZXM3LzEAL29yYW5nZXM3LzEAL3JlZHM3LzEAL3B1b3I3LzEAL3lsb3JicjcvMQAvcHVidWduNy8xAC9idWduNy8xAC9wcmduNy8xAC9yZHlsZ243LzEAL3lsZ243LzEAL3NwZWN0cmFsNy8xAC9waXlnNy8xAC9icmJnNy8xAC9wdXJkNy8xAC95bG9ycmQ3LzEAL29ycmQ3LzEAL3BhaXJlZDcvMQAvc2V0MzcvMQAvc2V0MjcvMQAvcGFzdGVsMjcvMQAvZGFyazI3LzEAL3NldDE3LzEAL3Bhc3RlbDE3LzEAL3JkZ3k2LzEAL2J1cHU2LzEAL3JkcHU2LzEAL3B1YnU2LzEAL3lsZ25idTYvMQAvZ25idTYvMQAvcmR5bGJ1Ni8xAC9yZGJ1Ni8xAC9hY2NlbnQ2LzEAL2dyZXlzNi8xAC9ncmVlbnM2LzEAL2JsdWVzNi8xAC9wdXJwbGVzNi8xAC9vcmFuZ2VzNi8xAC9yZWRzNi8xAC9wdW9yNi8xAC95bG9yYnI2LzEAL3B1YnVnbjYvMQAvYnVnbjYvMQAvcHJnbjYvMQAvcmR5bGduNi8xAC95bGduNi8xAC9zcGVjdHJhbDYvMQAvcGl5ZzYvMQAvYnJiZzYvMQAvcHVyZDYvMQAveWxvcnJkNi8xAC9vcnJkNi8xAC9wYWlyZWQ2LzEAL3NldDM2LzEAL3NldDI2LzEAL3Bhc3RlbDI2LzEAL2RhcmsyNi8xAC9zZXQxNi8xAC9wYXN0ZWwxNi8xAC9yZGd5NS8xAC9idXB1NS8xAC9yZHB1NS8xAC9wdWJ1NS8xAC95bGduYnU1LzEAL2duYnU1LzEAL3JkeWxidTUvMQAvcmRidTUvMQAvYWNjZW50NS8xAC9ncmV5czUvMQAvZ3JlZW5zNS8xAC9ibHVlczUvMQAvcHVycGxlczUvMQAvb3JhbmdlczUvMQAvcmVkczUvMQAvcHVvcjUvMQAveWxvcmJyNS8xAC9wdWJ1Z241LzEAL2J1Z241LzEAL3ByZ241LzEAL3JkeWxnbjUvMQAveWxnbjUvMQAvc3BlY3RyYWw1LzEAL3BpeWc1LzEAL2JyYmc1LzEAL3B1cmQ1LzEAL3lsb3JyZDUvMQAvb3JyZDUvMQAvcGFpcmVkNS8xAC9zZXQzNS8xAC9zZXQyNS8xAC9wYXN0ZWwyNS8xAC9kYXJrMjUvMQAvc2V0MTUvMQAvcGFzdGVsMTUvMQAvcmRneTQvMQAvYnVwdTQvMQAvcmRwdTQvMQAvcHVidTQvMQAveWxnbmJ1NC8xAC9nbmJ1NC8xAC9yZHlsYnU0LzEAL3JkYnU0LzEAL2FjY2VudDQvMQAvZ3JleXM0LzEAL2dyZWVuczQvMQAvYmx1ZXM0LzEAL3B1cnBsZXM0LzEAL29yYW5nZXM0LzEAL3JlZHM0LzEAL3B1b3I0LzEAL3lsb3JicjQvMQAvcHVidWduNC8xAC9idWduNC8xAC9wcmduNC8xAC9yZHlsZ240LzEAL3lsZ240LzEAL3NwZWN0cmFsNC8xAC9waXlnNC8xAC9icmJnNC8xAC9wdXJkNC8xAC95bG9ycmQ0LzEAL29ycmQ0LzEAL3BhaXJlZDQvMQAvc2V0MzQvMQAvc2V0MjQvMQAvcGFzdGVsMjQvMQAvZGFyazI0LzEAL3NldDE0LzEAL3Bhc3RlbDE0LzEAL3JkZ3kzLzEAL2J1cHUzLzEAL3JkcHUzLzEAL3B1YnUzLzEAL3lsZ25idTMvMQAvZ25idTMvMQAvcmR5bGJ1My8xAC9yZGJ1My8xAC9hY2NlbnQzLzEAL2dyZXlzMy8xAC9ncmVlbnMzLzEAL2JsdWVzMy8xAC9wdXJwbGVzMy8xAC9vcmFuZ2VzMy8xAC9yZWRzMy8xAC9wdW9yMy8xAC95bG9yYnIzLzEAL3B1YnVnbjMvMQAvYnVnbjMvMQAvcHJnbjMvMQAvcmR5bGduMy8xAC95bGduMy8xAC9zcGVjdHJhbDMvMQAvcGl5ZzMvMQAvYnJiZzMvMQAvcHVyZDMvMQAveWxvcnJkMy8xAC9vcnJkMy8xAC9wYWlyZWQzLzEAL3NldDMzLzEAL3NldDIzLzEAL3Bhc3RlbDIzLzEAL2RhcmsyMy8xAC9zZXQxMy8xAC9wYXN0ZWwxMy8xAC9wYWlyZWQxMi8xAC9zZXQzMTIvMQAvcmRneTExLzEAL3JkeWxidTExLzEAL3JkYnUxMS8xAC9wdW9yMTEvMQAvcHJnbjExLzEAL3JkeWxnbjExLzEAL3NwZWN0cmFsMTEvMQAvcGl5ZzExLzEAL2JyYmcxMS8xAC9wYWlyZWQxMS8xAC9zZXQzMTEvMQAvcmRneTEwLzEAL3JkeWxidTEwLzEAL3JkYnUxMC8xAC9wdW9yMTAvMQAvcHJnbjEwLzEAL3JkeWxnbjEwLzEAL3NwZWN0cmFsMTAvMQAvcGl5ZzEwLzEAL2JyYmcxMC8xAC9wYWlyZWQxMC8xAC9zZXQzMTAvMQBsYXRpbi0xAElTT184ODU5LTEASVNPODg1OS0xAElTTy04ODU5LTEAbiA+IDEAaSA+PSAxAHEtPm4gPT0gMQBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0ucGFydGl0aW9uW2ldID09IDAgfHwgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAxAGJ6LnNpemUgJSAzID09IDEAVHJlZV9lZGdlLnNpemUgPT0gTl9ub2RlcyAtIDEAbm9kZV9zZXRfc2l6ZShnLT5uX2lkKSA9PSBvc2l6ZSArIDEAbi0+Y291bnQgKyAoKm5uKS0+Y291bnQgPT0gTk9ERUNBUkQgKyAxAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSArIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA9PSBOT0RFQ0FSRCArIDEAZ3JleTAAZ3JheTAAanNvbjAAI2YwZjBmMAAjZTBlMGUwAHhiLT51LnMubG9jYXRlZCA+IEFHWEJVRl9JTkxJTkVfU0laRV8wAFwwAFQwAFx4RjAAXHhFMABceEQwAFx4QzAAXHhCMABceEEwAGdyZXk5MABncmF5OTAAXHg5MABncmV5ODAAZ3JheTgwAFx4ODAAIzgwODA4MABncmV5NzAAZ3JheTcwAGNjd3JvdCA9PSAwIHx8IGNjd3JvdCA9PSA5MCB8fCBjY3dyb3QgPT0gMTgwIHx8IGNjd3JvdCA9PSAyNzAAY3dyb3QgPT0gMCB8fCBjd3JvdCA9PSA5MCB8fCBjd3JvdCA9PSAxODAgfHwgY3dyb3QgPT0gMjcwAGdyZXk2MABncmF5NjAAZ3JleTUwAGdyYXk1MABncmV5NDAAZ3JheTQwAHIud2lkdGgoKTwxZTQwAGdyZXkzMABncmF5MzAAIzMwMzAzMABncmV5MjAAZ3JheTIwAGdyZXkxMABncmF5MTAAXHgxMAAjMTAxMDEwAC9wYWlyZWQxMi8xMAAvc2V0MzEyLzEwAC9yZGd5MTEvMTAAL3JkeWxidTExLzEwAC9yZGJ1MTEvMTAAL3B1b3IxMS8xMAAvcHJnbjExLzEwAC9yZHlsZ24xMS8xMAAvc3BlY3RyYWwxMS8xMAAvcGl5ZzExLzEwAC9icmJnMTEvMTAAL3BhaXJlZDExLzEwAC9zZXQzMTEvMTAAL3JkZ3kxMC8xMAAvcmR5bGJ1MTAvMTAAL3JkYnUxMC8xMAAvcHVvcjEwLzEwAC9wcmduMTAvMTAAL3JkeWxnbjEwLzEwAC9zcGVjdHJhbDEwLzEwAC9waXlnMTAvMTAAL2JyYmcxMC8xMAAvcGFpcmVkMTAvMTAAL3NldDMxMC8xMAAxMjAwAGdyZXkxMDAAZ3JheTEwMABJU08tSVItMTAwADEwMDAwACUhUFMtQWRvYmUtMy4wADEyLjEuMABueiA+IDAAZGlzdCA+IDAAcGF0aGNvdW50ID4gMAB3Z3QgPiAwAG5zaXRlcyA+IDAAc2lkZXMgPiAwAChydiA9PSAwKSB8fCAoTkRfb3JkZXIocnYpLU5EX29yZGVyKHYpKSpkaXIgPiAwAGxlbiA+IDAAcXQxLT5uID4gMCAmJiBxdDItPm4gPiAwAHdpZHRoID4gMABsaXN0LT5zaXplID4gMABzcGwtPnNpemUgPiAwAHNlbGYtPnNpemUgPiAwAGJ6LnNpemUgPiAwAGdyYXBoLT53ZWlnaHRzW3hdID4gMABncmFwaC0+d2VpZ2h0c1tuX2VkZ2VzXSA+IDAAbSA+IDAgJiYgbiA+IDAgJiYgbnogPj0gMAB0ID49IDAAbm5vZGVzID49IDAAbl9vYnMgPj0gMABuID49IDAAbi0+bGV2ZWwgPj0gMAB0b3RhbCA+PSAwAG9yaWdpbmFsID49IDAATWF4cmFuayA+PSAwAFBhY2sgPj0gMABpaSA8IDE8PGRpbSAmJiBpaSA+PSAwAHdpZHRoID49IDAAamRpYWcgPj0gMABpZGlhZyA+PSAwAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSA+PSAwICYmIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA+PSAwAFYgPj0gMABhZ25ub2RlcyhncmFwaCkgPj0gMABhZ25ub2RlcyhnKSA+PSAwAEVEX2NvdW50KGUpID49IDAAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGNfY250ID09IDAAcmFua19yZXN1bHQgPT0gMABnZXR0aW1lb2ZkYXlfcmVzID09IDAAaiA9PSAwAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAYS5zaGFwZSA9PSAwIHx8IGIuc2hhcGUgPT0gMABkdHNpemUoZGVzdCkgPT0gMABkdHNpemUoZy0+bl9zZXEpID09IDAAZHRzaXplKGctPmdfc2VxKSA9PSAwAGR0c2l6ZShnLT5lX3NlcSkgPT0gMABHRF9taW5yYW5rKGcpID09IDAAZHRzaXplKGctPmdfaWQpID09IDAAZHRzaXplKGctPmVfaWQpID09IDAAc2VsZi0+Y2FwYWNpdHkgIT0gMABjb3N4ICE9IDAgfHwgc2lueCAhPSAwAG1lbWNtcCgmc3R5bGUsICYoZ3JhcGh2aXpfcG9seWdvbl9zdHlsZV90KXswfSwgc2l6ZW9mKHN0eWxlKSkgIT0gMAByZXN1bHQgPT0gKGludCkoc2l6ZSAtIDEpIHx8IHJlc3VsdCA8IDAAbWFza1tpaV0gPCAwAE5EX2hlYXBpbmRleCh2KSA8IDAAXC8AWDExLwAlLipzLgBzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AR3JhcGggJXMgaGFzIGFycmF5IHBhY2tpbmcgd2l0aCB1c2VyIHZhbHVlcyBidXQgbm8gInNvcnR2IiBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLgAxLgAtMC4AJSFQUy1BZG9iZS0AJVBERi0APCEtLQAgLAArACoAc3RyZXEoYXB0ci0+dS5uYW1lLEtleSkAIWlzX2V4YWN0bHlfZXF1YWwoUi54LCBRLngpIHx8ICFpc19leGFjdGx5X2VxdWFsKFIueSwgUS55KQBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAHUgPT0gVUZfZmluZCh1KQAhcG9pbnRzX2lzX2VtcHR5KHBsaXN0KQAhb2JqbGlzdF9pc19lbXB0eShsaXN0KQAhbm9kZWxpc3RfaXNfZW1wdHkobGlzdCkAIXBvaW50c19pc19lbXB0eShsaXN0KQBvbmUgPD0gbm9kZWxpc3Rfc2l6ZShsaXN0KQBucCA8IG5vZGVsaXN0X3NpemUobGlzdCkAc3RkOjppc19oZWFwKGhlYXAuYmVnaW4oKSwgaGVhcC5lbmQoKSwgZ3QpACEocS0+cXRzKQAhaW50c19pc19lbXB0eSgmbGVhdmVzKQBvbl9oZWFwKHIpAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPT0gKHNpemVfdClkdHNpemUoZy0+bl9zZXEpAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBub3Qgd2VsbC1mb3JtZWQgKGludmFsaWQgdG9rZW4pAGFnc3VicmVwKGcsbikAbiAhPSBORF9uZXh0KG4pAGZpbmRfZmFzdF9ub2RlKGcsIG4pAChudWxsKQAoIWpjbikgJiYgKCF2YWwpACEocS0+bCkAc3ltLT5pZCA+PSAwICYmIHN5bS0+aWQgPCB0b3BkaWN0c2l6ZShvYmopACEoKmZsYWcpAG1vdmUgdG8gKCUuMGYsICUuMGYpADsgc3BsaW5lIHRvICglLjBmLCAlLjBmKQA7IGxpbmUgdG8gKCUuMGYsICUuMGYpAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMoQSwgdHJ1ZSkAdmFsdWUgJiYgc3RybGVuKHZhbHVlKQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljKEEsIGZhbHNlKQBFRF9sYWJlbChmZSkAIVRSRUVfRURHRShlKQAhY29uc3RyYWluaW5nX2ZsYXRfZWRnZShnLCBlKQBub2RlX3NldF9pc19lbXB0eShnLT5uX2lkKQByXyVkKQBsXyVkKQAobGliKQAhU3BhcnNlTWF0cml4X2hhc19kaWFnb25hbChBKQBTcGFyc2VNYXRyaXhfa25vd25fc3RydWN1cmFsX3N5bW1ldHJpYyhBKQAgc2Nhbm5pbmcgYSBIVE1MIHN0cmluZyAobWlzc2luZyAnPic/IGJhZCBuZXN0aW5nPyBsb25nZXIgdGhhbiAlZD8pACBzY2FubmluZyBhIHF1b3RlZCBzdHJpbmcgKG1pc3NpbmcgZW5kcXVvdGU/IGxvbmdlciB0aGFuICVkPykAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmYWxsYmFjayg0KQBvbl9oZWFwKHIwKSB8fCBvbl9oZWFwKHIxKQBhZ3RhaWwoZSkgPT0gVUZfZmluZChhZ3RhaWwoZSkpAGFnaGVhZChlKSA9PSBVRl9maW5kKGFnaGVhZChlKSkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpAG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpAHNldGxpbmV3aWR0aCgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAIHRyYW5zZm9ybT0ic2NhbGUoAE5PVEFUSU9OKAAgKAAgbmVhciAnJXMnACVsZiwlbGYsJWxmLCclW14nXScAaXNkaWdpdCgoaW50KWRvdHBbMV0pICYmIGlzZGlnaXQoKGludClkb3RwWzJdKSAmJiBkb3RwWzNdID09ICdcMCcAJgAlACQAdXJsKCMAPHRleHRQYXRoIHhsaW5rOmhyZWY9IiMAPGFyZWEgc2hhcGU9InBvbHkiACBmaWxsPSIjJTAyeCUwMnglMDJ4IgAoc2VxICYgU0VRX01BU0spID09IHNlcSAmJiAic2VxdWVuY2UgSUQgb3ZlcmZsb3ciAGd2X3NvcnRfY29tcGFyID09IE5VTEwgJiYgZ3Zfc29ydF9hcmcgPT0gTlVMTCAmJiAidW5zdXBwb3J0ZWQgcmVjdXJzaXZlIGNhbGwgdG8gZ3Zfc29ydCIAZ3Zfc29ydF9jb21wYXIgIT0gTlVMTCAmJiAibm8gY29tcGFyYXRvciBzZXQgaW4gZ3Zfc29ydCIAb3AtPm9wLnUucG9seWdvbi5jbnQgPD0gSU5UX01BWCAmJiAicG9seWdvbiBjb3VudCBleGNlZWRzIGd2cmVuZGVyX3BvbHlnb24gc3VwcG9ydCIAIHRleHQtYW5jaG9yPSJzdGFydCIAcC54ICE9IGEgJiYgImNhbm5vdCBoYW5kbGUgZWxsaXBzZSB0YW5nZW50IHNsb3BlIGluIGhvcml6b250YWwgZXh0cmVtZSBwb2ludCIAZnVsbF9sZW5ndGhfd2l0aG91dF9zaGFmdCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCB3aXRob3V0IHNoYWZ0IgA8YXJlYSBzaGFwZT0icmVjdCIAc2l6ZSA+IDAgJiYgImF0dGVtcHQgdG8gYWxsb2NhdGUgYXJyYXkgb2YgMC1zaXplZCBlbGVtZW50cyIAaW5kZXggPCBzZWxmLT5zaXplX2JpdHMgJiYgIm91dCBvZiBib3VuZHMgYWNjZXNzIgBpbmRleCA8IHNlbGYuc2l6ZV9iaXRzICYmICJvdXQgb2YgYm91bmRzIGFjY2VzcyIAKnMxICE9ICpzMiAmJiAiZHVwbGljYXRlIHNlcGFyYXRvciBjaGFyYWN0ZXJzIgBHRF9taW5yYW5rKHN1YmcpIDw9IEdEX21heHJhbmsoc3ViZykgJiYgImNvcnJ1cHRlZCByYW5rIGJvdW5kcyIAaW5kZXggPCBsaXN0LT5zaXplICYmICJpbmRleCBvdXQgb2YgYm91bmRzIgBpbmRleCA8IG5vZGVsaXN0X3NpemUobGlzdCkgJiYgImluZGV4IG91dCBvZiBib3VuZHMiAGluZGV4IDwgaW50c19zaXplKGxpc3QpICYmICJpbmRleCBvdXQgb2YgYm91bmRzIgBpbmRleCA8IG5vZGVzX3NpemUobGlzdCkgJiYgImluZGV4IG91dCBvZiBib3VuZHMiACh1aW50cHRyX3QpcyAlIDIgPT0gMCAmJiAiaGVhcCBwb2ludGVyIHdpdGggbG93IGJpdCBzZXQgd2lsbCBjb2xsaWRlIHdpdGggYW5vbnltb3VzIElEcyIAICgrJTZkIGJ5dGVzICVzfCVkLCB4bWxwYXJzZS5jOiVkKSAlKnMiACBmb250LWZhbWlseT0iJXMiACBmb250LXdlaWdodD0iJXMiACBmaWxsPSIlcyIAIGZvbnQtc3RyZXRjaD0iJXMiACBmb250LXN0eWxlPSIlcyIAYmFkIGVkZ2UgbGVuICIlcyIAIGJhc2VsaW5lLXNoaWZ0PSJzdXBlciIAYWd4Ymxlbih4YikgPD0gc2l6ZW9mKHhiLT51LnN0b3JlKSAmJiAiYWd4YnVmIGNvcnJ1cHRpb24iACB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgBmdWxsX2xlbmd0aCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCIAZnVsbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIGZ1bGwgYmFzZSB3aWR0aCIAbm9taW5hbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIG5vbWluYWwgYmFzZSB3aWR0aCIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0IiB4PSIlZyIgeT0iJWciACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgeD0iJWciIHk9IiVnIgAgZm9udC1zaXplPSIlLjJmIgAgdmlld0JveD0iJS4yZiAlLjJmICUuMmYgJS4yZiIAIGZpbGwtb3BhY2l0eT0iJWYiAGlzZmluaXRlKG0pICYmICJlbGxpcHNlIHRhbmdlbnQgc2xvcGUgaXMgaW5maW5pdGUiACh4Yi0+dS5zLmxvY2F0ZWQgPT0gQUdYQlVGX09OX0hFQVAgfHwgeGItPnUucy5sb2NhdGVkIDw9IHNpemVvZih4Yi0+dS5zdG9yZSkpICYmICJjb3JydXB0ZWQgYWd4YnVmIHR5cGUiACB0ZXh0LWFuY2hvcj0ibWlkZGxlIgA8YXJlYSBzaGFwZT0iY2lyY2xlIgBvbGRfbm1lbWIgPCBTSVpFX01BWCAvIHNpemUgJiYgImNsYWltZWQgcHJldmlvdXMgZXh0ZW50IGlzIHRvbyBsYXJnZSIAdGhldGEgPj0gMCAmJiB0aGV0YSA8PSBNX1BJICYmICJ0aGV0YSBvdXQgb2YgcmFuZ2UiACB0ZXh0LWFuY2hvcj0iZW5kIgAgZm9udC13ZWlnaHQ9ImJvbGQiACBmb250LXN0eWxlPSJpdGFsaWMiACBiYXNlbGluZS1zaGlmdD0ic3ViIgBcIgBsbGVuIDw9IChzaXplX3QpSU5UX01BWCAmJiAiWE1MIHRva2VuIHRvbyBsb25nIGZvciBleHBhdCBBUEkiACIgcnk9IgBfcCIgc3RhcnRPZmZzZXQ9IjUwJSI+PHRzcGFuIHg9IjAiIGR5PSIAIiBjeT0iACIgeT0iACIgcng9IgAgY3g9IgAgeD0iACB0YXJnZXQ9IgAgcG9pbnRzPSIAIGNvb3Jkcz0iACB0ZXh0LWRlY29yYXRpb249IgAgZmlsbD0iACIgc3Ryb2tlLXdpZHRoPSIAPGltYWdlIHhsaW5rOmhyZWY9IgA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIG5hbWU9IgAgeGxpbms6dGl0bGU9IgAgdGl0bGU9IgAiIHN0cm9rZT0iADxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9IgA8ZGVmcz4KPHJhZGlhbEdyYWRpZW50IGlkPSIAPG1hcCBpZD0iADxnIGlkPSIAIGQ9IgAiIHkyPSIAIiB4Mj0iACIgeTE9IgB4MT0iACB0cmFuc2Zvcm09InJvdGF0ZSglZCAlZyAlZykiAGFneGJsZW4oJlNidWYpID09IDAgJiYgInBlbmRpbmcgc3RyaW5nIGRhdGEgdGhhdCB3YXMgbm90IGNvbnN1bWVkIChtaXNzaW5nICIgImVuZHN0cigpL2VuZGh0bWxzdHIoKT8pIgAgYWx0PSIiAEN5Y2xlIEVycm9yIQBQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkIQA8IS0tIEdlbmVyYXRlZCBieSAAJWMgJXp1IAB0ICV1IAAgY3JlYXRlIHRleHQgAHhMYXlvdXQgAGRlZmF1bHQgAHN0cmljdCAAJXMlenUgLSVzIAAgLXNtb290aCBiZXppZXIgACBtb3ZldG8gACB2ZXJzaW9uIAAgY3JlYXRlIHBvbHlnb24gACAtdGV4dCB7JXN9IC1maWxsIAAgY3JlYXRlIG92YWwgACAtd2lkdGggAG5ld3BhdGggAGdyYXBoIABzLCUuNWcsJS41ZyAAJS41ZywlLjVnLCUuNWcsJS41ZyAAZSwlLjVnLCUuNWcgACVnICVnIAAlLjAzbGYgACUuM2YgACVkICVkICVkICVkICVkICVkICUuMWYgJS40ZiAlZCAlLjFmICUuMWYgJS4wZiAlLjBmIAAgLW91dGxpbmUgACBjcmVhdGUgbGluZSAAbm9kZSAAJWQgAFRvdGFsIHNpemUgPiAxIGluICIlcyIgY29sb3Igc3BlYyAAWyAvUmVjdCBbIABUIABTIABPUEVOIABJIABGIABFIABDIAAgLT4gAFJhbmsgc2VwYXJhdGlvbiA9IABuZXR3b3JrIHNpbXBsZXg6IABVbnNhdGlzZmllZCBjb25zdHJhaW50OiAAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHM6IAAlczogAFNvbHZpbmcgbW9kZWw6IABTZXR0aW5nIHVwIHNwcmluZyBtb2RlbDogAGNvbnZlcnQgZ3JhcGg6IAAgVGl0bGU6IAAidGV4dCI6IAB7ImZyYWMiOiAlLjAzZiwgImNvbG9yIjogACJuYW1lIjogACJzdHlsZSI6IAAiZmFjZSI6IAAyIAA8IS0tIAAgLS0gACUgAF9wIiAAbF8lZCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIAANICAgICAgICAgICAgICAgIGl0ZXIgPSAlZCwgc3RlcCA9ICVmIEZub3JtID0gJWYgbnogPSAlZCAgSyA9ICVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAKICAgIAA6CSAAICAgICVzfQoAdHJ5aW5nIHRvIGFkZCB0byByZWN0IHslZiArLy0gJWYsICVmICsvLSAlZn0KACNkZWZhdWx0IHsgZmluaXNoIHsgYW1iaWVudCAwLjEgZGlmZnVzZSAwLjkgfSB9CgBwaWdtZW50IHsgY29sb3IgJXMgfQoAbGlnaHRfc291cmNlIHsgPDE1MDAsMzAwMCwtMjUwMD4gY29sb3IgV2hpdGUgfQoAZ2xvYmFsX3NldHRpbmdzIHsgYXNzdW1lZF9nYW1tYSAxLjAgfQoAICAgIHRleHR1cmUgSW1hZ2VUZXh0dXJlIHsgdXJsICIlcyIgfQoAICAgIH0KAC8vc2t5CnBsYW5lIHsgPDAsIDEsIDA+LCAxIGhvbGxvdwogICAgdGV4dHVyZSB7CiAgICAgICAgcGlnbWVudCB7IGJvem8gdHVyYnVsZW5jZSAwLjk1CiAgICAgICAgICAgIGNvbG9yX21hcCB7CiAgICAgICAgICAgICAgICBbMC4wMCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNTAgcmdiIDwwLjA1LCAwLjIwLCAwLjUwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MS4wMCwgMS4wMCwgMS4wMD5dCiAgICAgICAgICAgICAgICBbMC43NSByZ2IgPDAuMjUsIDAuMjUsIDAuMjU+XQogICAgICAgICAgICAgICAgWzEuMDAgcmdiIDwwLjUwLCAwLjUwLCAwLjUwPl0KICAgICAgICAgICAgfQogICAgICAgICAgICBzY2FsZSA8MS4wMCwgMS4wMCwgMS41MD4gKiAyLjUwCiAgICAgICAgICAgIHRyYW5zbGF0ZSA8MC4wMCwgMC4wMCwgMC4wMD4KICAgICAgICB9CiAgICAgICAgZmluaXNoIHsgYW1iaWVudCAxIGRpZmZ1c2UgMCB9CiAgICB9CiAgICBzY2FsZSAxMDAwMAp9Ci8vbWlzdApmb2cgeyBmb2dfdHlwZSAyCiAgICBkaXN0YW5jZSA1MAogICAgY29sb3IgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPiAqIDAuNzUKICAgIGZvZ19vZmZzZXQgMC4xMAogICAgZm9nX2FsdCAxLjUwCiAgICB0dXJidWxlbmNlIDEuNzUKfQovL2duZApwbGFuZSB7IDwwLjAwLCAxLjAwLCAwLjAwPiwgMAogICAgdGV4dHVyZSB7CiAgICAgICAgcGlnbWVudHsgY29sb3IgcmdiIDwwLjI1LCAwLjQ1LCAwLjAwPiB9CiAgICAgICAgbm9ybWFsIHsgYnVtcHMgMC43NSBzY2FsZSAwLjAxIH0KICAgICAgICBmaW5pc2ggeyBwaG9uZyAwLjEwIH0KICAgIH0KfQoAY2FtZXJhIHsgbG9jYXRpb24gPCUuM2YgLCAlLjNmICwgLTUwMC4wMDA+CiAgICAgICAgIGxvb2tfYXQgIDwlLjNmICwgJS4zZiAsIDAuMDAwPgogICAgICAgICByaWdodCB4ICogaW1hZ2Vfd2lkdGggLyBpbWFnZV9oZWlnaHQKICAgICAgICAgYW5nbGUgJS4zZgp9CgAgICAgbWF0ZXJpYWwgTWF0ZXJpYWwgewoAU2hhcGUgewoAICBhcHBlYXJhbmNlIEFwcGVhcmFuY2UgewoAL3VzZXJfc2hhcGVfJWQgewoAZ3JhcGggRyB7CgBhcnJvd2hlYWQgPSA3ICVzIG5vdCB1c2VkIGJ5IGdyYXBodml6CgBib3hyYWQgPSAwICVzIG5vIHJvdW5kZWQgY29ybmVycyBpbiBncmFwaHZpegoAb3V0IG9mIG1lbW9yeQoAJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkKAEdyYXBodml6IGJ1aWx0IHdpdGhvdXQgYW55IHRyaWFuZ3VsYXRpb24gbGlicmFyeQoAcmVtb3ZlX292ZXJsYXA6IEdyYXBodml6IG5vdCBidWlsdCB3aXRoIHRyaWFuZ3VsYXRpb24gbGlicmFyeQoAJXMgZmlsbCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgZ3BpYyBjYW4gdXNlIGZpbGwgb3IgZmlsbGVkLCAxMHRoIEVkaXRpb24gdXNlcyBmaWxsIG9ubHkKAGJveHJhZD0yLjAgJXMgd2lsbCBiZSByZXNldCB0byAwLjAgYnkgZ3BpYyBvbmx5CgBpbiBjaGVja3BhdGgsIHN0YXJ0IHBvcnQgbm90IGluIGZpcnN0IGJveAoAaW4gY2hlY2twYXRoLCBlbmQgcG9ydCBub3QgaW4gbGFzdCBib3gKACVkICVkICMlMDJ4JTAyeCUwMngKAEhlYXAgb3ZlcmZsb3cKAHRleHQgewogICAgdHRmICIlcyIsCiAgICAiJXMiLCAlLjNmLCAlLjNmCiAgICAgICAgbm9fc2hhZG93CgAlZCAlZCAlZCAlLjBmICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJXp1CgB0b3RhbCBhZGRlZCBzbyBmYXIgPSAlenUKAHJvb3QgPSAlcyBtYXggc3RlcHMgdG8gcm9vdCA9ICVsbHUKAC5wcyAlLjBmKlxuKFNGdS8lLjBmdQoAICBtYXJnaW4gJXUKAE51bWJlciBvZiBpdGVyYXRpb25zID0gJXUKAE51bWJlciBvZiBpbmNyZWFzZXMgPSAldQoAb3ZlcmxhcCBbJXVdIDogJXUKACAlcyBhbGlnbmVkdGV4dAoAbGF5ZXJzIG5vdCBzdXBwb3J0ZWQgaW4gJXMgb3V0cHV0CgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBvdXRlZGdlIGxpc3QKAGFkZF90cmVlX2VkZ2U6IGVtcHR5IGluZWRnZSBsaXN0CgBObyBsaWJ6IHN1cHBvcnQKACVzIC5QUyB3L28gYXJncyBjYXVzZXMgR05VIHBpYyB0byBzY2FsZSBkcmF3aW5nIHRvIGZpdCA4LjV4MTEgcGFwZXI7IERXQiBkb2VzIG5vdAoAJXMgR05VIHBpYyBzdXBwb3J0cyBhIGxpbmV0aGljayB2YXJpYWJsZSB0byBzZXQgbGluZSB0aGlja25lc3M7IERXQiBhbmQgMTB0aCBFZC4gZG8gbm90CgAlcyBHTlUgcGljIHN1cHBvcnRzIGEgYm94cmFkIHZhcmlhYmxlIHRvIGRyYXcgYm94ZXMgd2l0aCByb3VuZGVkIGNvcm5lcnM7IERXQiBhbmQgMTB0aCBFZC4gZG8gbm90CgAgLyVzIHNldF9mb250CgAlcyUuKnMgaXMgbm90IGEgdHJvZmYgZm9udAoAdW5leHBlY3RlZCBjYXNlIGluIGxvY2F0ZV9lbmRwb2ludAoAY2VsbCBzaXplIHRvbyBzbWFsbCBmb3IgY29udGVudAoAdGFibGUgc2l6ZSB0b28gc21hbGwgZm9yIGNvbnRlbnQKACUlRW5kRG9jdW1lbnQKAFVuY2xvc2VkIGNvbW1lbnQKAExhYmVsIGNsb3NlZCBiZWZvcmUgZW5kIG9mIEhUTUwgZWxlbWVudAoAUG9ydHJhaXQKAGZpeGVkIGNlbGwgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoAZml4ZWQgdGFibGUgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoAcG9zIGF0dHJpYnV0ZSBmb3IgZWRnZSAoJXMsJXMpIGRvZXNuJ3QgaGF2ZSAzbisxIHBvaW50cwoAICBnZW5lcmF0ZWQgJWQgY29uc3RyYWludHMKAHNwbGluZXMgYW5kIGNsdXN0ZXIgZWRnZXMgbm90IHN1cHBvcnRlZCAtIHVzaW5nIGxpbmUgc2VnbWVudHMKAG9iamVjdHMKAFdhcm5pbmc6IG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZmxvYXRzCgBmb250IG5hbWUgJXMgY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IG1heSBub3QgYmUgYWNjZXB0ZWQgYnkgc29tZSBQUyB2aWV3ZXJzCgBmb250IG5hbWUgJXMgaXMgbG9uZ2VyIHRoYW4gMjkgY2hhcmFjdGVycyB3aGljaCBtYXkgYmUgcmVqZWN0ZWQgYnkgc29tZSBQUyB2aWV3ZXJzCgBjYW5ub3QgYWxsb2NhdGUgcHMKAHNjYWxlPTEuMCAlcyByZXF1aXJlZCBmb3IgY29tcGFyaXNvbnMKAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMKACVzIERXQiAyIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMKAGFycmF5IHBhY2tpbmc6ICVzICV6dSByb3dzICV6dSBjb2x1bW5zCgBzeW50YXggYW1iaWd1aXR5IC0gYmFkbHkgZGVsaW1pdGVkIG51bWJlciAnJXMnIGluIGxpbmUgJWQgb2YgJXMgc3BsaXRzIGludG8gdHdvIHRva2VucwoAZWRnZSBsYWJlbHMgd2l0aCBzcGxpbmVzPWN1cnZlZCBub3Qgc3VwcG9ydGVkIGluIGRvdCAtIHVzZSB4bGFiZWxzCgBmbGF0IGVkZ2UgYmV0d2VlbiBhZGphY2VudCBub2RlcyBvbmUgb2Ygd2hpY2ggaGFzIGEgcmVjb3JkIHNoYXBlIC0gcmVwbGFjZSByZWNvcmRzIHdpdGggSFRNTC1saWtlIGxhYmVscwoAb3V0IG9mIG1lbW9yeSB3aGVuIHRyeWluZyB0byBhbGxvY2F0ZSAlenUgYnl0ZXMKAGludGVnZXIgb3ZlcmZsb3cgd2hlbiB0cnlpbmcgdG8gYWxsb2NhdGUgJXp1ICogJXp1IGJ5dGVzCgB1cGRhdGU6IG1pc21hdGNoZWQgbGNhIGluIHRyZWV1cGRhdGVzCgBncmFwaCAlcywgY29vcmQgJXMsIGV4cGVjdGVkIGZvdXIgZG91YmxlcwoAbm9kZSAlcywgcG9zaXRpb24gJXMsIGV4cGVjdGVkIHR3byBkb3VibGVzCgBGb3VuZCAlZCBEaUctQ29MYSBib3VuZGFyaWVzCgBJbmNoZXMKACglNHp1KSAlN3p1IG5vZGVzICU3enUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IGNvdWxkIG5vdCBjb25zdHJ1Y3Qgb2JzdGFjbGVzIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHRoZSBib3VuZGluZyBib3hlcyBvZiBzb21lIG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHNvbWUgbm9kZXMgd2l0aCBtYXJnaW4gKCUuMDJmLCUuMDJmKSB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBtZXJnZTI6IGdyYXBoICVzLCByYW5rICVkIGhhcyBvbmx5ICVkIDwgJWQgbm9kZXMKAFNjYW5uaW5nIGdyYXBoICVzLCAlZCBub2RlcwoAV2FybmluZzogbm8gaGFyZC1jb2RlZCBtZXRyaWNzIGZvciAnJXMnLiAgRmFsbGluZyBiYWNrIHRvICdUaW1lcycgbWV0cmljcwoAaW4gZWRnZSAlcyVzJXMKAFVzaW5nICVzOiAlczolcwoARm9ybWF0OiAiJXMiIG5vdCByZWNvZ25pemVkLiBVc2Ugb25lIG9mOiVzCgBMYXlvdXQgdHlwZTogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoAbGF5b3V0ICVzCgAuZnQgJXMKAGJhZCBsYWJlbCBmb3JtYXQgJXMKAGluIHJvdXRlc3BsaW5lcywgZWRnZSBpcyBhIGxvb3AgYXQgJXMKACAgICAgICAlN2Qgbm9kZXMgJTdkIGVkZ2VzICU3enUgY29tcG9uZW50cyAlcwoAaW4gbGFiZWwgb2YgZWRnZSAlcyAlcyAlcwoAICBFZGdlICVzICVzICVzCgBvcnRobyAlcyAlcwoAcG9seWxpbmUgJXMgJXMKAHNwbGluZSAlcyAlcwoAcmVjdGFuZ2xlICglLjBmLCUuMGYpICglLjBmLCUuMGYpICVzICVzCgBpbiBjbHVzdGVyICVzCgAlcyB3YXMgYWxyZWFkeSBpbiBhIHJhbmtzZXQsIGRlbGV0ZWQgZnJvbSBjbHVzdGVyICVzCgAlcyAtPiAlczogdGFpbCBub3QgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgaXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAaGVhZCBjbHVzdGVyICVzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAGhlYWQgbm9kZSAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgAlcyAtPiAlczogaGVhZCBub3QgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgaXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAdGFpbCBjbHVzdGVyICVzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAHRhaWwgbm9kZSAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgBVbmhhbmRsZWQgYWRqdXN0IG9wdGlvbiAlcwoAcmVwb3NpdGlvbiAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB4bGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggdGFpbCBsYWJlbCAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCBsYWJlbCAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCBoZWFkIGxhYmVsICVzCgAvLyoqKiBiZWdpbl9ncmFwaCAlcwoATWF4LiBpdGVyYXRpb25zICglZCkgcmVhY2hlZCBvbiBncmFwaCAlcwoAQ291bGQgbm90IHBhcnNlICJfYmFja2dyb3VuZCIgYXR0cmlidXRlIGluIGdyYXBoICVzCgBpbiBsYWJlbCBvZiBncmFwaCAlcwoAQ3JlYXRpbmcgZWRnZXMgdXNpbmcgJXMKAEFkanVzdGluZyAlcyB1c2luZyAlcwoAJXMgd2hpbGUgb3BlbmluZyAlcwoAZGVyaXZlIGdyYXBoIF9kZ18lZCBvZiAlcwoAIF0gICV6dSB0cnVlICVzCgBdICAlZCB0cnVlICVzCgAgXSAgJXp1IGZhbHNlICVzCgBdICAlZCBmYWxzZSAlcwoAbWFrZVBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAbWFrZUFkZFBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAdXNpbmcgJXMgZm9yIHVua25vd24gc2hhcGUgJXMKACAgb2N0cmVlIHNjaGVtZSAlcwoAY2FuJ3Qgb3BlbiBsaWJyYXJ5IGZpbGUgJXMKAGNhbid0IGZpbmQgbGlicmFyeSBmaWxlICVzCgBCb3VuZGluZ0JveCBub3QgZm91bmQgaW4gZXBzZiBmaWxlICVzCgBjb3VsZG4ndCBvcGVuIGVwc2YgZmlsZSAlcwoAY291bGRuJ3QgcmVhZCBmcm9tIGVwc2YgZmlsZSAlcwoAaW4gbm9kZSAlcwoAc2hhcGVmaWxlIG5vdCBzZXQgb3Igbm90IGZvdW5kIGZvciBlcHNmIG5vZGUgJXMKAGluIGxhYmVsIG9mIG5vZGUgJXMKAGVuZCAlcwoAcmFua2luZzogZmFpbHVyZSB0byBjcmVhdGUgc3Ryb25nIGNvbnN0cmFpbnQgZWRnZSBiZXR3ZWVuIG5vZGVzICVzIGFuZCAlcwoAb29wcywgaW50ZXJuYWwgZXJyb3I6IHVuaGFuZGxlZCBjb2xvciB0eXBlPSVkICVzCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkICVkICVkCiAlZCAlcwoAcm9vdCA9ICVzCgAvLyoqKiB0ZXh0c3BhbjogJXMsIGZvbnRzaXplID0gJS4zZiwgZm9udG5hbWUgPSAlcwoAdHJpZXMgPSAlZCwgbW9kZSA9ICVzCgAvLyoqKiBjb21tZW50OiAlcwoAZm9udG5hbWU6ICIlcyIgcmVzb2x2ZWQgdG86ICVzCgAlJSUlUGFnZU9yaWVudGF0aW9uOiAlcwoAZGVsYXVuYXlfdHJpYW5ndWxhdGlvbjogJXMKAGRlbGF1bmF5X3RyaTogJXMKAGd2cHJpbnRmOiAlcwoAbmVzdGluZyBub3QgYWxsb3dlZCBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKScgaW4gc3R5bGU6ICVzCgB1bm1hdGNoZWQgJygnIGluIHN0eWxlOiAlcwoAJSUlJVRpdGxlOiAlcwoAJXMgVGl0bGU6ICVzCgAjIFRpdGxlOiAlcwoALy8qKiogYmVnaW5fbm9kZTogJXMKAHJlYWxsb2MgZmFpbGVkOiAlcwoAbGliL3BhdGhwbGFuLyVzOiVkOiAlcwoAZ3JpZCglZCwlZCk6ICVzCgBDb3VsZCBub3Qgb3BlbiAiJXMiIGZvciB3cml0aW5nIDogJXMKAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgAgWyV6dV0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAJSUgJXMKACMgJXMKACAgbW9kZSAgICVzCgBjb25qdWdhdGVfZ3JhZGllbnQ6IHVuZXhwZWN0ZWQgbGVuZ3RoIDAgdmVjdG9yCgAlcyB0byBjaGFuZ2UgZHJhd2luZyBzaXplLCBtdWx0aXBseSB0aGUgd2lkdGggYW5kIGhlaWdodCBvbiB0aGUgLlBTIGxpbmUgYWJvdmUgYW5kIHRoZSBudW1iZXIgb24gdGhlIHR3byBsaW5lcyBiZWxvdyAocm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKSBieSBhIHNjYWxlIGZhY3RvcgoAYWRkX3NlZ21lbnQ6IGVycm9yCgAlLjVnICUuNWcgJS41ZyAlc2NvbG9yCgAwIDAgMCBlZGdlY29sb3IKADAuOCAwLjggMC44IHNldHJnYmNvbG9yCgAwIDAgMSBzZXRyZ2Jjb2xvcgoAMSAwIDAgc2V0cmdiY29sb3IKADAgMCAwIHNldHJnYmNvbG9yCgAlZCAlZCBzZXRsYXllcgoALy8qKiogZW5kX2xheWVyCgBVVEYtOCBpbnB1dCB1c2VzIG5vbi1MYXRpbjEgY2hhcmFjdGVycyB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIFBvc3RTY3JpcHQgZHJpdmVyCgBMZXR0ZXIKAC8vKioqIGJlZ2luX2NsdXN0ZXIKAC8vKioqIGVuZF9jbHVzdGVyCgByZW1vdmluZyBlbXB0eSBjbHVzdGVyCgBDZW50ZXIKAFdhcm5pbmc6IG5vIHZhbHVlIGZvciB3aWR0aCBvZiBub24tQVNDSUkgY2hhcmFjdGVyICV1LiBGYWxsaW5nIGJhY2sgdG8gd2lkdGggb2Ygc3BhY2UgY2hhcmFjdGVyCgBiYXNlIHJlZmVyZXIKACUlUGFnZVRyYWlsZXIKACUlVHJhaWxlcgoALy8qKiogYmV6aWVyCgAiJXMiIHdhcyBub3QgZm91bmQgYXMgYSBmaWxlIG9yIGFzIGEgc2hhcGUgbGlicmFyeSBtZW1iZXIKAHN0b3AKACBjdXJ2ZXRvCgBuZXdwYXRoICUuMGYgJS4wZiBtb3ZldG8KACUuMGYgJS4wZiBsaW5ldG8KACBsYXlvdXQ9bmVhdG8KAG5vZGUgJXMgaW4gZ3JhcGggJXMgaGFzIG5vIHBvc2l0aW9uCgAlcyBtYXhwc2h0IGFuZCBtYXhwc3dpZCBoYXZlIG5vIG1lYW5pbmcgaW4gRFdCIDIuMCwgc2V0IHBhZ2UgYm91bmRhcmllcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIGFycm93aGVhZCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgYXJyb3doZWFkID0gNyBtYWtlcyBmaWxsZWQgYXJyb3doZWFkcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIGFycm93aGVhZCBpcyB1bmRlZmluZWQgaW4gRFdCIDIsIGluaXRpYWxseSAxIGluIGdwaWMsIDIgaW4gMTB0aCBFZGl0aW9uCgBtYWpvcml6YXRpb24KAC8vKioqIHBvbHlnb24KAG92ZXJmbG93IHdoZW4gY29tcHV0aW5nIGVkZ2Ugd2VpZ2h0IHN1bQoAc2ZkcCBvbmx5IHN1cHBvcnRzIHN0YXJ0PXJhbmRvbQoAbm9kZSBwb3NpdGlvbnMgYXJlIGlnbm9yZWQgdW5sZXNzIHN0YXJ0PXJhbmRvbQoAY2xvc2VwYXRoIGZpbGwKACBlbGxpcHNlX3BhdGggZmlsbAoAICAlLjBmICUuMGYgY2VsbAoAJWYgJWYgJWYgJWYgY2VsbAoAZ3JhcGggJXMgaXMgZGlzY29ubmVjdGVkLiBIZW5jZSwgdGhlIGNpcmN1aXQgbW9kZWwKAGdyYXBoIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBlZGdlcyBpbiBncmFwaCAlcyBoYXZlIG5vIGxlbiBhdHRyaWJ1dGUuIEhlbmNlLCB0aGUgbWRzIG1vZGVsCgBjaXJjdWl0IG1vZGVsIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdtb2RlPXNnZCwgcmV2ZXJ0aW5nIHRvIHNob3J0cGF0aCBtb2RlbAoAbWRzIG1vZGVsIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdtb2RlPXNnZCwgcmV2ZXJ0aW5nIHRvIHNob3J0cGF0aCBtb2RlbAoAbm9kZSAnJXMnLCBncmFwaCAnJXMnIHNpemUgdG9vIHNtYWxsIGZvciBsYWJlbAoAJXMgRFdCIDIgZG9lc24ndCB1c2UgZmlsbCBhbmQgZG9lc24ndCBkZWZpbmUgZmlsbHZhbAoAWyB7Q2F0YWxvZ30gPDwgL1VSSSA8PCAvQmFzZSAlcyA+PiA+PgovUFVUIHBkZm1hcmsKAFsgL0Nyb3BCb3ggWyVkICVkICVkICVkXSAvUEFHRVMgcGRmbWFyawoAICAvQm9yZGVyIFsgMCAwIDAgXQogIC9BY3Rpb24gPDwgL1N1YnR5cGUgL1VSSSAvVVJJICVzID4+CiAgL1N1YnR5cGUgL0xpbmsKL0FOTiBwZGZtYXJrCgB0cm91YmxlIGluIGluaXRfcmFuawoAbGluZXRoaWNrID0gMDsgb2xkbGluZXRoaWNrID0gbGluZXRoaWNrCgAgc2V0bGluZXdpZHRoCgBnc2F2ZQolZCAlZCAlZCAlZCBib3hwcmltIGNsaXAgbmV3cGF0aAoAZ3NhdmUgJWcgJWcgdHJhbnNsYXRlIG5ld3BhdGgKAC8vKioqIGVuZF9ncmFwaAoAbGF5b3V0IGF0dHJpYnV0ZSBpcyBpbnZhbGlkIGV4Y2VwdCBvbiB0aGUgcm9vdCBncmFwaAoAaW4gY2hlY2twYXRoLCBib3hlcyAlenUgYW5kICV6dSBkb24ndCB0b3VjaAoAbWVyZ2Vfb25ld2F5IGdsaXRjaAoAJXMgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSBpbiB0aGlzIGRyYXdpbmcKAE5vZGUgbm90IGFkamFjZW50IHRvIGNlbGwgLS0gQWJvcnRpbmcKAGluY29tcGFyYWJsZSBzZWdtZW50cyAhISAtLSBBYm9ydGluZwoAQWx0ZXJuYXRpdmVseSwgY29uc2lkZXIgcnVubmluZyBuZWF0byB1c2luZyAtR3BhY2s9dHJ1ZSBvciBkZWNvbXBvc2luZwoAbGFiZWxfc2NoZW1lID0gJWQgPiA0IDogaWdub3JpbmcKAGd2cmVuZGVyX3NldF9zdHlsZTogdW5zdXBwb3J0ZWQgc3R5bGUgJXMgLSBpZ25vcmluZwoAQXJyb3cgdHlwZSAiJXMiIHVua25vd24gLSBpZ25vcmluZwoAZmRwIGRvZXMgbm90IHN1cHBvcnQgc3RhcnQ9c2VsZiAtIGlnbm9yaW5nCgAlcyBhdHRyaWJ1dGUgdmFsdWUgbXVzdCBiZSAxIG9yIDIgLSBpZ25vcmluZwoATW9yZSB0aGFuIDIgY29sb3JzIHNwZWNpZmllZCBmb3IgYSBncmFkaWVudCAtIGlnbm9yaW5nIHJlbWFpbmluZwoAYXMgcmVxdWlyZWQgYnkgdGhlIC1uIGZsYWcKAGJiWyVzXSAlLjVnICUuNWcgJS41ZyAlLjVnCgAvcGF0aGJveCB7CiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL1ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCiB9IGRlZgovZGJnc3RhcnQgeyBnc2F2ZSAlLjVnICUuNWcgdHJhbnNsYXRlIH0gZGVmCi9hcnJvd2xlbmd0aCAxMCBkZWYKL2Fycm93d2lkdGggYXJyb3dsZW5ndGggMiBkaXYgZGVmCi9hcnJvd2hlYWQgewogICAgZ3NhdmUKICAgIHJvdGF0ZQogICAgY3VycmVudHBvaW50CiAgICBuZXdwYXRoCiAgICBtb3ZldG8KICAgIGFycm93bGVuZ3RoIGFycm93d2lkdGggMiBkaXYgcmxpbmV0bwogICAgMCBhcnJvd3dpZHRoIG5lZyBybGluZXRvCiAgICBjbG9zZXBhdGggZmlsbAogICAgZ3Jlc3RvcmUKfSBiaW5kIGRlZgovbWFrZWFycm93IHsKICAgIGN1cnJlbnRwb2ludCBleGNoIHBvcCBzdWIgZXhjaCBjdXJyZW50cG9pbnQgcG9wIHN1YiBhdGFuCiAgICBhcnJvd2hlYWQKfSBiaW5kIGRlZgovcG9pbnQgeyAgICBuZXdwYXRoICAgIDIgMCAzNjAgYXJjIGZpbGx9IGRlZi9tYWtldmVjIHsKICAgIC9ZIGV4Y2ggZGVmCiAgICAvWCBleGNoIGRlZgogICAgL3kgZXhjaCBkZWYKICAgIC94IGV4Y2ggZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggWSBsaW5ldG8gc3Ryb2tlCiAgICBYIFkgbW92ZXRvCiAgICB4IHkgbWFrZWFycm93Cn0gZGVmCgAvcGF0aGJveCB7CiAgICAvWCBleGNoIG5lZyAlLjVnIHN1YiBkZWYKICAgIC9ZIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoIG5lZyAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggeSBsaW5ldG8KICAgIFggWSBsaW5ldG8KICAgIHggWSBsaW5ldG8KICAgIGNsb3NlcGF0aCBzdHJva2UKfSBkZWYKACUhUFMtQWRvYmUtMi4wCi9ub2RlIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIGZpbGwKfSBkZWYKL2NlbGwgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICAveSBleGNoIGRlZgogIC94IGV4Y2ggZGVmCiAgbmV3cGF0aAogIHggeSBtb3ZldG8KICB4IFkgbGluZXRvCiAgWCBZIGxpbmV0bwogIFggeSBsaW5ldG8KICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgB9IGJpbmQgZGVmCgAuUFMgJS41ZiAlLjVmCgBvdmVybGFwOiAlcyB2YWx1ZSAlZCBzY2FsaW5nICUuMDRmCgAgIGJlYXV0aWZ5X2xlYXZlcyAlZCBub2RlIHdlaWdodHMgJWQgcm90YXRpb24gJS4wM2YKACAgcmVwdWxzaXZlIGV4cG9uZW50OiAlLjAzZgoAICBLIDogJS4wM2YgQyA6ICUuMDNmCgAlcyAlLjNmCgAKaW50ZXJzZWN0aW9uIGF0ICUuM2YgJS4zZgoAICAgIHNjYWxlICUuM2YKAHRvcnVzIHsgJS4zZiwgJS4zZgoAICAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPiwgJS4zZgoAIGluICVzIC0gc2V0dGluZyB0byAlLjAyZgoAY2lyY2xlICVzICUuMGYsJS4wZiwlLjBmCgByZWN0ICVzICUuMGYsJS4wZiAlLjBmLCUuMGYKACVkICVkICVkICUuMGYgJWQgJWQgJWQgJWQgJWQgJS4zZiAlZCAlLjRmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZgoAICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYKACUlJSVQYWdlOiAxIDEKJSUlJVBhZ2VCb3VuZGluZ0JveDogJS4wZiAlLjBmICUuMGYgJS4wZgoAcG9zWyV6dV0gJS4wZiAlLjBmCgAubnIgU0YgJS4wZgpzY2FsZXRoaWNrbmVzcyA9ICUuMGYKACVzIHNhdmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoubnIgLlMgXG4oLnMKLm5yIERGIFxuKC5mCgBzaG93cGFnZQolJSUlVHJhaWxlcgolJSUlQm91bmRpbmdCb3g6ICUuZiAlLmYgJS5mICUuZgoAYWRkaW5nICV6dSBpdGVtcywgdG90YWwgYXJlYSA9ICVmLCB3ID0gJWYsIGFyZWEvdz0lZgoAZ2FwPSVmLCVmCgAgIGFzcGVjdCAlZgoAYSAlZiBiICVmIGMgJWYgZCAlZiByICVmCgBtb2RlbCAlZCBzbWFydF9pbml0ICVkIHN0cmVzc3d0ICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgBTb2x2aW5nIG1vZGVsICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgAlcyBjb29yZCAlLjVnICUuNWcgaHQgJWYgd2lkdGggJWYKAHJlYyAlZiAlZiAlZiAlZgoAJXMgOiAlZiAlZiAlZiAlZgoAJXMgOiAlZiAlZgoAbWF4cHNodCA9ICVmCm1heHBzd2lkID0gJWYKAG1kc01vZGVsOiBkZWx0YSA9ICVmCgAgcjEgJWYgcjIgJWYKAFBhY2tpbmc6IGNvbXB1dGUgZ3JpZCBzaXplCgBnc2F2ZQoAJSVFbmRDb21tZW50cwpzYXZlCgBVbnJlY29nbml6ZWQgY2hhcmFjdGVyICclYycgKCVkKSBpbiBzaWRlcyBhdHRyaWJ1dGUKAEltYWdlcyB1bnN1cHBvcnRlZCBpbiAiYmFja2dyb3VuZCIgYXR0cmlidXRlCgAlcyBHTlUgcGljIHZzLiAxMHRoIEVkaXRpb24gZFwoZSd0ZW50ZQoAcmVzZXQgJXMgc2V0IHRvIGtub3duIHN0YXRlCgAlZyAlZyBzZXRfc2NhbGUgJWQgcm90YXRlICVnICVnIHRyYW5zbGF0ZQoAJWYgJWYgdHJhbnNsYXRlCgAlZCAlZCB0cmFuc2xhdGUKAC8vKioqIGVsbGlwc2UKAFVucmVjb2duaXplZCBvdmVybGFwIHZhbHVlICIlcyIgLSB1c2luZyBmYWxzZQoAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQoAJXM6IHZzbnByaW50ZiBmYWlsdXJlCgBlbmRwYWdlCnNob3dwYWdlCmdyZXN0b3JlCgBlbmQKcmVzdG9yZQoAbGF5b3V0IHdhcyBub3QgZG9uZQoATGF5b3V0IHdhcyBub3QgZG9uZQoALy8qKiogcG9seWxpbmUKAHRyeWluZyB0byBkZWxldGUgYSBub24tbGluZQoAIyBlbmQgb2YgRklHIGZpbGUKAFNpbmdsZQoAcmVuZGVyZXIgZm9yICVzIGlzIHVuYXZhaWxhYmxlCgBkeW5hbWljIGxvYWRpbmcgbm90IGF2YWlsYWJsZQoAJS4wZiAlLjBmIGxpbmV0byBzdHJva2UKAGNsb3NlcGF0aCBzdHJva2UKACBlbGxpcHNlX3BhdGggc3Ryb2tlCgAvLyoqKiBiZWdpbl9lZGdlCgAvLyoqKiBlbmRfZWRnZQoAbG9zdCAlcyAlcyBlZGdlCgBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIHZpcnR1YWwgd2VpZ2h0IG9mIGVkZ2UKAGFkZF90cmVlX2VkZ2U6IG1pc3NpbmcgdHJlZSBlZGdlCgBpbiByb3V0ZXNwbGluZXMsIGNhbm5vdCBmaW5kIE5PUk1BTCBlZGdlCgBzaG93cGFnZQoAJWQgJWQgJWQgYmVnaW5wYWdlCgAvLyoqKiBiZWdpbl9wYWdlCgAvLyoqKiBlbmRfcGFnZQoARmlsZW5hbWUgIiVzIiBpcyB1bnNhZmUKAGxhYmVsOiBhcmVhIHRvbyBsYXJnZSBmb3IgcnRyZWUKAC8vKioqIGVuZF9ub2RlCgBVc2luZyBkZWZhdWx0IGNhbGN1bGF0aW9uIGZvciByb290IG5vZGUKAGNvbnRhaW5fbm9kZXMgY2x1c3QgJXMgcmFuayAlZCBtaXNzaW5nIG5vZGUKACVmICVmICVmICVmIG5vZGUKADw8IC9QYWdlU2l6ZSBbJWQgJWRdID4+IHNldHBhZ2VkZXZpY2UKAGluIGNoZWNrcGF0aCwgYm94ICV6dSBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAaW4gY2hlY2twYXRoLCBib3ggMCBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAY2x1c3RlciBuYW1lZCAlcyBub3QgZm91bmQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlcyVzIHVuc3VwcG9ydGVkCgBjbHVzdGVyIGN5Y2xlICVzIC0tICVzIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAbGF5b3V0IGFib3J0ZWQKAHBhZ2VkaXI9JXMgaWdub3JlZAoAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgYXR0cmlidXRlICJtb2RlbCIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAc3RhcnQ9MCBub3Qgc3VwcG9ydGVkIHdpdGggbW9kZT1zZWxmIC0gaWdub3JlZAoAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgUk9XUyAtIGlnbm9yZWQKAFVua25vd24gdmFsdWUgJXMgZm9yIENPTFVNTlMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJS4qcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiBpbiBURCAtIGlnbm9yZWQKAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDT0xTUEFOIHZhbHVlIGNhbm5vdCBiZSAwIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAaW4gcm91dGVzcGxpbmVzLCBQc2hvcnRlc3RwYXRoIGZhaWxlZAoAaW4gcm91dGVzcGxpbmVzLCBQcm91dGVzcGxpbmUgZmFpbGVkCgAjIHBsdWdpbiBsb2FkaW5nIG9mIGRlcGVuZGVuY3kgIiUuKnMiIGZhaWxlZAoAJXM6JWQ6IGNsYWltZWQgdW5yZWFjaGFibGUgY29kZSB3YXMgcmVhY2hlZAoAIyB1bnN1Y2Nlc3NmdWwgcGx1Z2luIGxvYWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBuc2l6ZXNjYWxlPSVmLGl0ZXJhdGlvbnM9JWQKAGN0cmwtPm92ZXJsYXA9JWQKACVzICVkIG5vZGVzICVkIGVkZ2VzIG1heGl0ZXI9JWQgYmFsYW5jZT0lZAoALy8qKiogYmVnaW5fbGF5ZXI6ICVzLCAlZC8lZAoAZGVnZW5lcmF0ZSBjb25jZW50cmF0ZWQgcmFuayAlcywlZAoAbWluY3Jvc3M6IHBhc3MgJWQgaXRlciAlZCB0cnlpbmcgJWQgY3VyX2Nyb3NzICVkIGJlc3RfY3Jvc3MgJWQKACAgbWF4IGxldmVscyAlZAoACSVzICVkCgAgIEJhcm5lcy1IdXR0IGNvbnN0YW50ICUuMDNmIHRvbGVyYW5jZSAgJS4wM2YgbWF4aXRlciAlZAoAZ3Z3cml0ZV9ub196IHByb2JsZW0gJWQKACAgcXVhZHRyZWUgc2l6ZSAlZCBtYXhfbGV2ZWwgJWQKAHJlYnVpbGRfdmxpc3RzOiBsZWFkIGlzIG51bGwgZm9yIHJhbmsgJWQKAHJlYnVpbGRfdmxpc3RzOiByYW5rIGxlYWQgJXMgbm90IGluIG9yZGVyICVkIG9mIHJhbmsgJWQKACAgc21vb3RoaW5nICVzIG92ZXJsYXAgJWQgaW5pdGlhbF9zY2FsaW5nICUuMDNmIGRvX3Nocmlua2luZyAlZAoAICBjb29saW5nICUuMDNmIHN0ZXAgc2l6ZSAgJS4wM2YgYWRhcHRpdmUgJWQKAFVuc3VwcG9ydGVkIGNoYXJzZXQgdmFsdWUgJWQKAGluIHJvdXRlc3BsaW5lcywgaWxsZWdhbCB2YWx1ZXMgb2YgcHJldiAlZCBhbmQgbmV4dCAlZCwgbGluZSAlZAoAICBlZGdlX2xhYmVsaW5nX3NjaGVtZSAlZAoAYWdkaWN0b2Y6IHVua25vd24ga2luZCAlZAoAICByYW5kb20gc3RhcnQgJWQgc2VlZCAlZAoAJWQgJWQgJWQgJS4wZiAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkCgAlJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJSUlJVBhZ2U6ICVkICVkCgAlcyBuby4gY2VsbHMgJWQgVyAlZCBIICVkCgBNYXhyYW5rID0gJWQsIG1pbnJhbmsgPSAlZAoAc3RlcCBzaXplID0gJWQKACUlJSVQ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cmFuY2UgMC4wMQoAICAgIHRvbGVyYW5jZSAwLjEKACUlUGFnZXM6IDEKACAgICAgICAgZGlmZnVzZUNvbG9yIDEgMSAxCgAxMDAuMDAKACBFUFNGLTMuMAoAJXMgYm94cmFkIGlzIG5vdyAwLjAgaW4gZ3BpYywgZWxzZSBpdCByZW1haW5zIDIuMAoAc3BoZXJlIHs8JTkuM2YsICU5LjNmLCAlOS4zZj4sIDEuMAoAV2FybmluZzogbm8gdmFsdWUgZm9yIHdpZHRoIG9mIEFTQ0lJIGNoYXJhY3RlciAldS4gRmFsbGluZyBiYWNrIHRvIDAKAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogJXMgJXMgcmFuayAlZCBpID0gJWQgYW4gPSAwCgBjb25jZW50cmF0ZT10cnVlIG1heSBub3Qgd29yayBjb3JyZWN0bHkuCgBObyBsaWJ6IHN1cHBvcnQuCgB0d29waTogdXNlIG9mIHdlaWdodD0wIGNyZWF0ZXMgZGlzY29ubmVjdGVkIGNvbXBvbmVudC4KAHRoZSBncmFwaCBpbnRvIGNvbm5lY3RlZCBjb21wb25lbnRzLgoAT3J0aG9nb25hbCBlZGdlcyBkbyBub3QgY3VycmVudGx5IGhhbmRsZSBlZGdlIGxhYmVscy4gVHJ5IHVzaW5nIHhsYWJlbHMuCgBndlJlbmRlckpvYnMgJXM6ICUuMmYgc2Vjcy4KAG1pbmNyb3NzICVzOiAlZCBjcm9zc2luZ3MsICUuMmYgc2Vjcy4KACVzIGlzIG5vdCBhIGtub3duIGNvbG9yLgoAaXMgaW5hcHByb3ByaWF0ZS4gUmV2ZXJ0aW5nIHRvIHRoZSBzaG9ydGVzdCBwYXRoIG1vZGVsLgoAaXMgdW5kZWZpbmVkLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBVbmFibGUgdG8gcmVjbGFpbSBib3ggc3BhY2UgaW4gc3BsaW5lIHJvdXRpbmcgZm9yIGVkZ2UgIiVzIiAtPiAiJXMiLiBTb21ldGhpbmcgaXMgcHJvYmFibHkgc2VyaW91c2x5IHdyb25nLgoARXJyb3IgZHVyaW5nIGNvbnZlcnNpb24gdG8gIlVURi04Ii4gUXVpdGluZy4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQuCgBncmFkaWVudCBwZW4gY29sb3JzIG5vdCB5ZXQgc3VwcG9ydGVkLgoAICBpbml0Q01halZQU0MgZG9uZTogJWQgZ2xvYmFsIGNvbnN0cmFpbnRzIGdlbmVyYXRlZC4KAFRoZSBjaGFyYWN0ZXIgJyVjJyBhcHBlYXJzIGluIGJvdGggdGhlIGxheWVyc2VwIGFuZCBsYXllcmxpc3RzZXAgYXR0cmlidXRlcyAtIGxheWVybGlzdHNlcCBpZ25vcmVkLgoAdGhlIGFzcGVjdCBhdHRyaWJ1dGUgaGFzIGJlZW4gZGlzYWJsZWQgZHVlIHRvIGltcGxlbWVudGF0aW9uIGZsYXdzIC0gYXR0cmlidXRlIGlnbm9yZWQuCgBUaGUgbGF5ZXJzZWxlY3QgYXR0cmlidXRlICIlcyIgZG9lcyBub3QgbWF0Y2ggYW55IGxheWVyIHNwZWNpZmVkIGJ5IHRoZSBsYXllcnMgYXR0cmlidXRlIC0gaWdub3JlZC4KACV6dSBvdXQgb2YgJXp1IGxhYmVscyBwb3NpdGlvbmVkLgoAJXp1IG91dCBvZiAlenUgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAgIGdlbmVyYXRlIGVkZ2UgY29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgTm9uLW92ZXJsYXAgQ29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgRWRnZSBDb25zdHJhaW50cy4uLgoAR2VuZXJhdGluZyBEaUctQ29MYSBFZGdlIENvbnN0cmFpbnRzLi4uCgBSZW1vdmluZyBvdmVybGFwcyBhcyBwb3N0cHJvY2Vzcy4uLgoALi4uICUuKnMlLipzIC4uLgoARWRnZSBsZW5ndGggJWYgbGFyZ2VyIHRoYW4gbWF4aW11bSAlZCBhbGxvd2VkLgpDaGVjayBmb3Igb3ZlcndpZGUgbm9kZShzKS4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQgZm9yIG5vZGUgJyVzJy4KAHBvbHlnb24geyAlenUsCgBzcGhlcmVfc3dlZXAgewogICAgJXMKICAgICV6dSwKACJkaXJlY3RlZCI6ICVzLAoAIndpZHRoIjogJS4wM2YsCgAic2l6ZSI6ICUuMDNm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ICUuMmYgJS4yZiAtaW1hZ2UgInBob3RvXyVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2UgZmlsZT0iJXMiCgBmaWxlIGxvYWRpbmcgaXMgZGlzYWJsZWQgYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgY29udGFpbnMgU0VSVkVSX05BTUU9IiVzIgoAQ291bGQgbm90IHBhcnNlIHhkb3QgIiVzIgoATm8gbG9hZGltYWdlIHBsdWdpbiBmb3IgIiVzIgoAIFslenVdICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcCAiJXMiCgBmb250bmFtZTogdW5hYmxlIHRvIHJlc29sdmUgIiVzIgoARHVwbGljYXRlIGNsdXN0ZXIgbmFtZSAiJXMiCgB1bnJlY29nbml6ZWQgYXBpIG5hbWUgIiVzIgoAaW1hZ2UgY3JlYXRlIHBob3RvICJwaG90b18lcyIgLWZpbGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgc2hhcGVmaWxlPSIlcyIgZm9yIG5vZGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2U9IiVzIiBmb3Igbm9kZSAiJXMiCgBub2RlICIlcyIgaXMgY29udGFpbmVkIGluIHR3byBub24tY29tcGFyYWJsZSBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgBFcnJvcjogbm9kZSAiJXMiIGJlbG9uZ3MgdG8gdHdvIG5vbi1uZXN0ZWQgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAICAiJXMiCgAjaW5jbHVkZSAiY29sb3JzLmluYyIKI2luY2x1ZGUgInRleHR1cmVzLmluYyIKI2luY2x1ZGUgInNoYXBlcy5pbmMiCgBVbmtub3duIEhUTUwgZWxlbWVudCA8JXM+IG9uIGxpbmUgJWx1IAoAJXMgaW4gbGluZSAlbHUgCgBzY2FsZSBieSAlZywlZyAKAGNvbXByZXNzICVnIAoATGF5b3V0IHdhcyBub3QgZG9uZS4gIE1pc3NpbmcgbGF5b3V0IHBsdWdpbnM/IAoAiVBORw0KGgoAJSUhUFMtQWRvYmUtMi4wCiUlJSVCb3VuZGluZ0JveDogKGF0ZW5kKQovcG9pbnQgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICBuZXdw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BgAAAAAAAACamZmZmZnpP98AAADgAAAABwBBzoEFCwvwP+EAAADiAAAACABB5oEFC6IC4D/jAAAA5AAAAA4AAABsbnJzb2xpZAAAc2V0bGluZXdpZHRoADEAAAAA73UAACTDAABQiwAAAAAAAAgArv/RAAoArv+u/wsArv+u/67/rv+u/67/rv+u/wUA0QCu/9EA0QDRANEA0QDRANEA0QCu//v/rv8OAOz/rv+u/67/rv/RANEA0QDRANEADQAlAAwAQgAQAFAAEwBtAHsAFACYAA8ApgDDAK7/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/xcArv93AK7/BwAuAK7/JgCu/xcAEQAjAK7/DQCu/67/rv+u/zoArv+u/zUArv+u/67/KACu/wcArv87AEUArv9IAK7/rv+u/67/rv8AQZGEBQvBBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygAAAAAAAAAAAICAgICAhAMWQEAH1AIAwcSExRXFhcIC2kMHwoFDA4pESsPLRAvMCAyBjQ1GxwdHgsMISIjJCUmJygMGBkXBAobHBogKgohIiMkJSYnKAwKDlMKLFgxWFhYWFhYDBscDy5YMyEiIyQlJicoGxz/U///ISIjJCUmJygM//8F////CRT//////wwbHP8QFRYhIiMkJSYnKBsc/////yEiIyQlJicoDP8SExQRFhf///////8MGxz///8SISIjJCUmJygbHP////8hIiMkJSYnKAz///////8T////////DBsc/////yEiIyQlJicoGxz/////ISIjJCUmJygSExQVFhcYGf///////////yMkJSYnGxITFBYXIjZoAR84ViEgAhsbG14bGzc5cDbSwk8EPCJHIj8iRCIiWCJlIiIFBl9gOQQHCAkKCwwNDgRmZ11qbQUGb1g7cQcICQoLDA0OBHI8W3M+YUYbEhMUFhcEBQY/QWJJBwgJCgsMDQ4FBgBcAAAHCAkKCwwNDgQAAE8AAABTQgAAAAAABAUGAERUVQcICQoLDA0OBQYAAAAABwgJCgsMDQ4EACosLkcxMwAAAAAAAAQFBgAAAEoHCAkKCwwNDgUGAAAAAAcICQoLDA0OBAAAAAAAAEwAAAAAAAAEBQYAAAAABwgJCgsMDQ4FBgAAAAAHCAkKCwwNDikrLS8wMjQ1AEHbigULLikrLTAyAAQvACQjABIUFhocHiAYAAUHLy8vAC8vAAAJCCgAAAEiAgYAAAAAAAgAQZaLBQs+JQMmEwopFQsqFw4tGREbDCsdDSwfDyEQADMAMAAvQwAxAC8ANS4nQjJBADo4ADw0RQA2AEAAAD8ARDc7OT0AQeGLBQtFAgMDAQECAQEBAwMDAwMDAwMBAQEBAQEBAQEBAQEBAQEBAgEBAgAGAQMDAwMDAQABAgMABAECAwAEAAQABAADAgECAQIBAEGxjAULRSkqKiorLCwtLS0tLS0tLS0tLi8wMTIzNDU2Nzg5Ojs8PT4+Pz9BQEJCQkJCQkNDRERERkVHR0dJSEpIS0hMSE1NTk5PTwBBgI0FC40Brv+u//z/6AD2////GgAAACcAAQAyAK7/rv8CACQAAwAvAK7/rv+u/67/rv/+/5QArv8JABsArv+8/67/rv+v/67/rv+u/67/rv+u/67/AAD/Aw8QESM6JD0lQBVDJkUnSBhLGU0aKBxOHR5QUVJZWmxrbmNkV2kASAAAACgAAAAYAAAAOAAAABgAAAAIAEGmjgULCfC/AAAAAAAAAQBBuI4FCw1pbnZpcwAAZmlsbGVkAEHQjgULswImGgAA91AAAJk1AAAkCwAADAAAAAQAAAAGAAAAAgAAAAMAAAABAAAACQAAAAgAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEQAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAA3KECAEGOkQULhQigQP////////////////////////////////////////////////////////////////////////////////////8AAqoCRAMABAAEqgY5BnEBqgKqAgAEgwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEOQI5AoMEgwSDBI0DXgfHBVYFVgXHBeMEcwTHBccFqgIdA8cF4wQdB8cFxwVzBMcFVgVzBOMExwXHBY0HxwXHBeMEqgI5AqoCwQMABKoCjQMABI0DAASNA6oCAAQABDkCOQIABDkCOQYABAAEAAQABKoCHQM5AgAEAATHBQAEAASNA9cDmgHXA1QE////////////////////////////////////////////////////////////////////////////////////////AAKqAnEEAAQABAAIqgY5AqoCqgIABI8EAAKqAgACOQIABAAEAAQABAAEAAQABAAEAAQABKoCqgKPBI8EjwQABHEHxwVWBccFxwVWBeMEOQY5Bh0DAAQ5BlYFjQfHBTkG4wQ5BscFcwRWBccFxwUACMcFxwVWBaoCOQKqAqYEAASqAgAEcwSNA3MEjQOqAgAEcwQ5AqoCcwQ5AqoGcwQABHMEcwSNAx0DqgJzBAAExwUABAAEjQMnA8MBJwMpBP///////////////////////////////////////////////////////////////////////////////////////wACqgJcAwAEAASqBjkGtgGqAqoCAARmBQACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAASqAqoCZgVmBWYFAARcB+ME4wRWBccF4wTjBMcFxwWqAo0DVgVzBKoGVgXHBeMExwXjBAAEcwTHBeMEqgbjBHMEcwQdAzkCHQNgAwAEqgIABAAEjQMABI0DOQIABAAEOQI5Ao0DOQLHBQAEAAQABAAEHQMdAzkCAASNA1YFjQONAx0DMwMzAjMDVAT///////////////////////////////////////////////////////////////////////////////////////8AAh0DcQQABAAEqgY5BjkCqgKqAgAEjwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEqgKqAo8EjwSPBAAEqAZWBVYFVgXHBVYFVgXHBTkGHQMABFYF4wQdB8cFxwXjBMcFVgVzBOMExwVWBR0HVgXjBOMEqgI5AqoCjwQABKoCAAQABI0DAASNA6oCAARzBDkCOQIABDkCOQZzBAAEAAQABB0DHQM5AnMEjQNWBQAEjQMdA8kCwwHJAo8E//8EogIAQZ6ZBQuFCKBA/////////////////////////////////////////////////////////////////////////////////////zkCOQLXAnMEcwQdB1YFhwGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwQ5AjkCrASsBKwEcwQfCFYFVgXHBccFVgXjBDkGxwU5AgAEVgVzBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wQ5AjkCOQLBA3MEqgJzBHMEAARzBHMEOQJzBHMExwHHAQAExwGqBnMEcwRzBHMEqgIABDkCcwQABMcFAAQABAAErAIUAqwCrAT///////////////////////////////////////////////////////////////////////////////////////85AqoCywNzBHMEHQfHBecBqgKqAh0DrAQ5AqoCOQI5AnMEcwRzBHMEcwRzBHMEcwRzBHMEqgKqAqwErASsBOMEzQfHBccFxwXHBVYF4wQ5BscFOQJzBMcF4wSqBscFOQZWBTkGxwVWBeMExwVWBY0HVgVWBeMEqgI5AqoCrARzBKoCcwTjBHME4wRzBKoC4wTjBDkCOQJzBDkCHQfjBOME4wTjBB0DcwSqAuMEcwQ5BnMEcwQABB0DPQIdA6wE////////////////////////////////////////////////////////////////////////////////////////OQI5AtcCcwRzBB0HVgWHAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBDkCOQKsBKwErARzBB8IVgVWBccFxwVWBeMEOQbHBTkCAARWBXMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBDkCOQI5AsEDcwSqAnMEcwQABHMEcwQ5AnMEcwTHAccBAATHAaoGcwRzBHMEcwSqAgAEOQJzBAAExwUABAAEAASsAhQCrAKsBP///////////////////////////////////////////////////////////////////////////////////////zkCqgLLA3MEcwQdB8cF5wGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwSqAqoCrASsBKwE4wTNB8cFxwXHBccFVgXjBDkGxwU5AnMExwXjBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wSqAjkCqgKsBHMEqgJzBOMEcwTjBHMEqgLjBOMEOQI5AnMEOQIdB+ME4wTjBOMEHQNzBKoC4wRzBDkGcwRzBAAEHQM9Ah0DrAT//ziiAgBBrqEFC4UIoED/////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP///////////////////////////////////////////////////////////////////////////////////////80EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQT////////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E////////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP//YKICAEG9qQULhghAj0AAAP///////////////////////////////wIB////////////////////////////////////////////////AgHkAIgBWAJYAqIDtQLdAD0BPQHCAVgC5ACoAeQAGwFYAlgCWAJYAlgCWAJYAlgCWAJYAuQA5ABYAlgCWAK7AbID2QKkAqEC5gJHAiQC1gL5AgEBRAFxAh8CVwPkAv8CeQL/Ap0CZwJaAtgCsQJNBIoCVAJNAjsBGwE7AVgC9AH0ARICRwLPAUcCFAJNAUoCOALoAOwA9AEoAVgDOAIsAkcCRwJmAeEBXgExAgMCSQMNAgICzwFgAQkBYAFYAv//AAD///////////////////////////////8PAf///////////////////////////////////////////////w8B+ADAAVgCWAKxA9YC8wBmAWYBxQFYAvgAsgH4ADkBWAJYAlgCWAJYAlgCWAJYAlgCWAL4APgAWAJYAlgCywG2A+gCsAKoAvoCVQIyAuACBQMaAWIBmQIyAmQD7AIRA4wCEQOuAncCbQLiAskCWQSgAmoCXQJiATkBYgFYAvQB9AEjAlgC2AFYAh4CbAFcAkkC/wADARgCPwFtA0kCQAJYAlgCiAHoAYABQwIPAlUDIgIOAtoBhwEgAYcBWAL//wAA////////////////////////////////AgH///////////////////////////////////////////////8CAeQAiAFYAlgCogO1At0APQE9AcIBWALkAKgB5AAbAVgCWAJYAlgCWAJYAlgCWAJYAlgC5ADkAFgCWAJYArsBsgPZAqQCoQLmAkcCJALWAvkCAQFEAXECHwJYA+MC/wJ5Av8CnQJnAloC2AKwAk0EigJUAk0COwEbATsBWAL0AfQBEgJHAs8BRwIUAk0BSgI4AugA7AD0ASgBWAM4AiwCRwJHAmYB4QFeATECAwJJAw0CAgLPAWABCQFgAVgC//8AAP///////////////////////////////w8B////////////////////////////////////////////////DwH4AMABWAJYArED1gLzAGYBZgHFAVgC+ACyAfgAOQFYAlgCWAJYAlgCWAJYAlgCWAJYAvgA+ABYAlgCWALLAbYD6AKwAqgC+gJVAjIC4AIFAxoBYgGYAjICZQPrAhEDjAIRA64CdwJtAuICyQJZBKACagJdAmIBOQFiAVgC9AH0ASMCWALYAVgCHgJsAVwCSQL/AAMBGAI/AW0DSQJAAlgCWAKIAegBgAFDAg8CVQMiAg4C2gGHASABhwFYAv//aKICAEHOsQULhQigQP////////////////////////////////////////////////////////////////////////////////////+LAjUDrgO0BhcFmgc9BjMCHwMfAwAEtAaLAuMCiwKyAhcFFwUXBRcFFwUXBRcFFwUXBRcFsgKyArQGtAa0Bj8EAAh5BX0FlgUpBg4FmgQzBgQGXAJcAj8FdQTnBvwFTAbTBEwGjwUUBeME2wV5BekHewXjBHsFHwOyAh8DtAYABAAE5wQUBWYEFAXsBNECFAUSBTkCOQKiBDkCywcSBeUEFAUUBUoDKwQjAxIFvASLBrwEvAQzBBcFsgIXBbQG////////////////////////////////////////////////////////////////////////////////////////yQKmAysEtAaRBQQI+gZzAqgDqAMvBLQGCgNSAwoD7AKRBZEFkQWRBZEFkQWRBZEFkQWRBTMDMwO0BrQGtAakBAAIMQYZBt8FpAZ3BXcFkQayBvoC+gIzBhkF9geyBs0G3QXNBikGwwV1BX8GMQbTCCsGywXNBagD7AKoA7QGAAQABGYFugW+BLoFbQV7A7oFsgW+Ar4CUgW+AlYIsgV/BboFugXyA8ME0wOyBTcFZAcpBTcFqASyBewCsgW0Bv///////////////////////////////////////////////////////////////////////////////////////4sCNQOuA7QGFwWaBz0GMwIfAx8DAAS0BosC4wKLArICFwUXBRcFFwUXBRcFFwUXBRcFFwWyArICtAa0BrQGPwQACHkFfQWWBSkGDgWaBDMGBAZcAlwCPwV1BOcG/AVMBtMETAaPBRQF4wTbBXkF6Qd7BeMEewUfA7ICHwO0BgAEAATnBBQFZgQUBewE0QIUBRIFOQI5AqIEOQLLBxIF5QQUBRQFSgMrBCMDEgW8BIsGvAS8BDMEFwWyAhcFtAb////////////////////////////////////////////////////////////////////////////////////////JAqYDKwSRBZEFBAj6BnMCqAOoAy8EtAYKA1IDCgPsApEFkQWRBZEFkQWRBZEFkQWRBZEFMwMzA7QGtAa0BqQEAAgxBhkG3wWkBncFdwWRBrIG+gL6AjMGGQX2B7IGzQbdBc0GKQbDBXUFfwYxBtMIKwbLBc0FqAPsAqgDtAYABAAEZgW6Bb4EugVtBXsDugWyBb4CvgJSBb4CVgiyBX8FugW6BfIDwwTTA7IFNwVkBykFNwWoBLIF7AKyBbQG//9wogIAQd65BQuFCKBAZgT///////////////////////////////8AAP///////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//2YE////////////////////////////////AAD///////////////////////////////////////////////9mBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYE//9mBP///////////////////////////////wAA////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP///////////////////////////////////////////////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//3yiAgBB7sEFC4UIoED/////////////////////////////////////////////////////////////////////////////////////aQLwApkCMgQyBM0EpgVHAfAC8ALwAjIE8ALwAvACMgQyBDIEMgQyBDIEMgQyBDIEMgQyBPAC8AIyBDIEMgTwAioGuASHBMkE6ARJBDMEaQU8BToC0AObBA0ErQUbBWQFdgRoBagE2QOlBDAFswTRBnQEkARnBPAC2ALwAjIEMgQyBDQEdQT2A3UEXQT1AgQEXwRIAu8CCQRcAqQGXwRLBHUEdQQcAz0DLANfBOsD9AUCBPIDzAPwAjIE8AIyBP///////////////////////////////////////////////////////////////////////////////////////2kC8ALvArAEsAR5BaYF1gHwAvACdQOwBPAC8ALwAh8DsASwBLAEsASwBLAEsASwBLAEsATwAvACsASwBLAEgQMqBhEFwwTlBCQFjQSrBF8FeAU6AkME8ARsBPYFVwWgBbIErAXjBBcE5QRsBfkEEgfOBOgEewQ3A9gCNwOwBLAEsARDBKcEGASlBJkE9QIEBL4EYwLvAmIEXALgBrkEhwSpBKwEawNyAywDugQ4BEUGawRFBDoEeAOwBHgDsAT///////////////////////////////////////////////////////////////////////////////////////9pAvACmQIyBNkDzQSmBUcB8ALwAvACMgTwAvAC8AIyBDIEMgQyBDIEMgQyBDIEMgQyBDIE8ALwAjIEMgQyBPACKgbjBIcEyQToBEkEMwRpBTwFOgLQA5sEDQQXBhsFZAVZBGQFqATZA6UEMAWzBNEGdASQBGcE8ALYAvACMgQyBDIENAR1BK4DdQRMBDYDBAR1BHQC7wIJBJACpAZfBEsEdQR1BFUDPQNcA3QE6wP0BQIE8gPMA/ACMgTwAjIE////////////////////////////////////////////////////////////////////////////////////////aQLwAiADsASwBNwFpgVpAvAC8AJ1A7AE8ALwAvACLQOwBLAEsASwBLAEsASwBLAEsASwBPAC8AKwBLAEsAQtAyoG6QS4BOcEDwW/BK8EaQVtBToC/QMzBToESgZIBZ4FqwQoBv0EAwR7BUsFdwVpB0EFeAXkBOID0gPiA7AEsASwBL4EvwTxA78EagRIA0gEfwSdAhoDUQSPAqQGfwSPBMoEygSTA6wDgQN1BGsEMAabBIMEQwTiA7AE4gOwBP//iKICAEH+yQULhQigQP/////////////////////////////////////////////////////////////////////////////////////QAiYDrAOMBhYFnAjQBSYCogOiAxYFjAbpAqID6QKiAxYFFgUWBRYFFgUWBRYFFgUWBRYFogOiA4wGjAaMBl0EAAh4BXwFlgUqBg8FmQQ0BgMGXgOjA4sFdAS+BvwFTAbTBEwGkAV4Be4E2wV4BekHewXsBHsFogOiA6IDjAYWBRYFzgT8BCsE/ATEBNAC/AQQBTICwQK8BDICyAcQBdsE/AT8BGoDKwQnAxAFvASMBrwEvAQ0BBQFogMUBYwG////////////////////////////////////////////////////////////////////////////////////////vAI4A7ME8AawBS0K5gaoAlkEWQSwBfAG5ALXA+QChAWwBbAFsAWwBbAFsAWwBbAFsAWwBTgDOAPwBvAG8AbvBLYHNgYYBsoFpAZ3BTQFfQazBl4EcQQrBhkFlQfGBs0G3QXNBkIGrwV0BX8GHAYHCRwG5QWJBVkEhAVZBPAGsAWwBVgFmAW1BJgFUAVhA5gFswW8AjkDXgW8AncIswV+BZgFmAX6A78EpQOzBTMF1gdaBTUFxgSwBVkEsAXwBv///////////////////////////////////////////////////////////////////////////////////////9ACJgOsA4wGFgWcCNAFJgKiA6IDFgWMBukCogPpAqIDFgUWBRYFFgUWBRYFFgUWBRYFFgWiA6IDjAaMBowGXQQACHYFfAWWBSAGDwWZBDQGAwZeA6MDiwV0BL4G/AVMBtMETAaQBXgF7gTbBXYF7Ad7BewEewWiA6IDogOMBhYFFgXOBPwEKwT8BMQE0AL5BBAFMgLBArIEMgLJBxAF2wT8BPwEagMrBCcDEAW6BIwGvAS6BDQEFAWiAxQFjAb///////////////////////////////////////////////////////////////////////////////////////+8AjgDswTwBrAFLQrmBqgCWQRZBLAF8AbkAtcD5AKEBbAFsAWwBbAFsAWwBbAFsAWwBbAFOAM4A/AG8AbwBu8Etgc2BhgGygWkBncFNAV9BrMGXgRxBCsGGQWVB8YGzQbdBc0GQgavBXQFfwYcBgcJHAblBYkFWQSEBVkE8AawBbAFWAWYBbUEmAVQBWEDmAWzBbwCOQNeBbwCdwizBXwFmAWYBfoDvwSlA7MFMQXWB1oFNQXGBLAFWQSwBfAG//+QogIAQY7SBQuFCKBA/////////////////////////////////////////////////////////////////////////////////////xQCIwI1AysFkwSWBtcFxQFeAl4CagSTBPYBkwIhAvACkwSTBJMEkwSTBJMEkwSTBJMEkwQhAiECkwSTBJMEbwMxBxAFLwUMBdUFcwQhBNMF5wU7AiMC6QQnBDkHCAY7BtEEOwbyBGQEbQTTBcMEaAeeBHsEkQSiAvACogJWBJYDngRzBOcEzwPnBH0EtgJiBOkEBgIGAjMEBgJxB+kE1QTnBOcERAPRA9MC6QQCBDkGMQQIBL4DCANoBAgDkwT///////////////////////////////////////////////////////////////////////////////////////8UAkoCxwMrBZEENQcABiECtgK2AlwEkQRSApMCSAJOA5EEkQSRBJEEkQSRBJEEkQSRBJEESAJSApEEkQSRBNEDLQeFBWAFGQXsBXsEZATLBR8GpgKmAlAFhQSLB4EGXgYGBV4GSAVoBKIEDAYzBbwHVgX+BKIEpgJOA6YCQgRKA9sE1QQQBR0EEAW6BBkDhQRCBXECcQL2BHEC2wdCBfQEEAUQBaID+gN5A0IFjQTZBqAEjQTnAycDaAQnA5EE////////////////////////////////////////////////////////////////////////////////////////FAISAhcDKwVoBFgGXAW8AUgCSAJqBGgE7AF/AgYCzQJoBGgEaARoBGgEaARoBGgEaARoBAYCBgJoBGgEaARqA8cGcQTJBK4EVAUXBMcDagVtBS8CIwJ1BMsDsgaeBcMFhwTDBY0EBAT8A2gFYgTRBicEBgQ/BEoCzQJKAiMEJwNvBIUEngSaA54E8gOBAgIEngQIAggC5wMIAvoGngR9BJ4EngQrA20DmAKeBLIDvAXTA7IDjQPLAmgEywJoBP///////////////////////////////////////////////////////////////////////////////////////xQCSgKgAysFaATZBqoFCgK2ArYCXARoBDkCkwJIAl4DaARoBGgEaARoBGgEaARoBGgEaARIAkgCaARoBGgErAPZBgYF9gTlBGoFVgQ/BIUFmgWTAqYC5wQlBAoHCgbXBaQE1wXfBD0EPwSHBbgEJwfZBIMESgSmAl4DpgI5BDMDbwTBBMME3QPBBHUE/AJUBNUEYAJgAosEYAI9B9UErgTDBMEEXgPJA0gD1QQZBE4GPwQnBKQD1wJoBNcCaAT//5iiAgBBntoFC4UIoED/////////////////////////////////////////////////////////////////////////////////////7gGmAksDJQXhBIoGrwW5AQADAAPHAyUFKAL+AigCwAPpBHADeARqBIUEOgSHBAUExQSHBIACgAIlBSUFJQXUA24HXgU7BSMF/gU6BcsEzQWFBh4DJASOBdQEawcjBvQF4QT0BZ0FfQTzBA0GVQXOB68F7ATQBAADwAMAAyUFJQUABAgEewSiA5gE3gOaAhMEqARYAlYCSQRKAgwHugRQBJIEegRHA3UDwwKaBPkD5gUKBPADjQNxAwADcQMlBf///////////////////////////////////////////////////////////////////////////////////////wgCAwMUBKAFIAUJB2UGJwKTA5MD2wOgBaACCAOgAsYDnAXrAwMF/wQyBcsELwVvBGkFLwXwAvACoAWgBaAFYwS8BxEGDwa5BawGxQVfBXUGTgeRA8MEiQZ8BTAItwaPBpwFjwZhBjEFeQWrBhkGAwl4BtsFhAWTA8YDkwOgBaAFAATEBCoFQAROBZMEJQOdBHAF1ALFAg4FwQIgCIUFFgVDBTAFKQQaBC4DagWJBOgGtAR/BDQEAAQaAwAEoAX////////////////////////////////////////////////////////////////////////////////////////uAaYCSwMlBeEEigavBbkBAAMAA8cDJQUoAv4CKALAA+kEcAN4BGoEhQQ6BIcE+QPFBIcEEgMSAyUFJQUlBdQDbgdeBTsFIwX+BToFywTNBYUGHgMkBI4F1ARrByMG2AXhBNgFnQV9BPMEDQZVBc4HrwXsBNAEAAPAAwADJQUlBQAElQRuBKEDmgTGA6EClQSABGECVAI5BEgCCQe4BEwEoARxBLEDcwPHApoETgSUBgIEegSNA3EDAANxAyUF////////////////////////////////////////////////////////////////////////////////////////CAIDAxQEoAUgBQkHZQYnApMDkwPbA6AFoAIIA6ACxgOcBesDAwX/BDIFywQvBYgEaQUvBfAC8AKgBaAFoAVjBLwHEQYTBrkFrAbFBV8FdQZOB5sDwwSJBnwFRAijBo8GpgWPBmEGOQV5BasGGQYDCWsG2wWEBZMDxgOTA6AFoAUABEgFMQVJBE0FdQQMAzIFZwXtAusCIQXWAgQIhQUWBU0FMwVFBCMEVgN7BeYEeAerBFsFIwQABBoDAASgBf//oKICAEGu4gULhBigQP/////////////////////////////////////////////////////////////////////////////////////PAZsCNQP8Aw4EuAV1BcQBbQJtAvwD/AP/AXMCBQIXAw4EDgQOBA4EDgQOBA4EDgQOBA4EJAIkAvwD/AP8A7UDJwehBFoERATsBOgDrQMMBfwEBAKNAigEXQPXBioFTAUiBGIFWAStA+YDIgWKBB4HJwTmA78DdAIXA3QC/AP8A1QC1QM0BGIDNAT7A3ECxAM0BNYB6gGjA9YBZAY0BDgENAQ0BMoCIQOuAjQEnQO4BXcDnwMpA4QCrwOEAvwD//8AAP///////////////////////////////wAA////////////////////////////////////////////////zwGbAoID/AMOBNUFowXeAX4CfgL8A/wDEAJzAiMCcAMOBA4EDgQOBA4EDgQOBA4EDgQOBDUCNQL8A/wD/AO1AzAH2QR8BDwECwXnA6wDGQUMBSICpgJgBGID/gZFBWkFQgR9BYEEyAP2AzkFuwRAB2gEKATTA5kCcAOZAvwD/ANnAvMDSwRZA0sEBwSIAssDSwT3AQsC1wP3AYIGSwRNBEsESwTYAjEDxgJLBMkD9gWtA8oDLgPAAs0DwAL8A////////////////////////////////////////////////////////////////////////////////////////88BmwI1A/wDDgS4BXUFxAFtAm0C/AP8A/8BcwIFAhoDDgQOBA4EDgQOBA4EDgQOBA4EDgQkAiQC/AP8A/wDtQMnB6EEWgQuBOwE6AOtAwwF/AQEAo0CKARdA9cGKAU8BSIEUAVYBJ4D5gMiBYoEHwcnBOYDvwN0AhMDdAL8A/wDVAIdBB0EVAMdBNIDcQIdBB0E1gHqAaMD1gFUBh0EGwQdBB0EvgIdA64CHQSRA7gFdwOUAykDhAKvA4QC/AP////////////////////////////////////////////////////////////////////////////////////////PAZsCggP8Aw4E1QWjBd4BfgJ+AvwD/AMQAnMCIwJ5Aw4EDgQOBA4EDgQOBA4EDgQOBA4ENQI1AvwD/AP8A7UDMAfZBHwEJgQLBecDrAMZBQwFIgKmAmAEYgP+BkAFWQVCBGsFgQS5A/YDOQW7BEEHaAQoBNMDmQJmA5kC/AP8A2cCOQQ5BEsDOQTuA4gCOQQ4BPcBCwLXA/cBbgY4BDgEOQQ5BNECJwPGAjgEwQP2Ba0DwwMuA8ACzQPAAvwD//8vQQAAxgAAAAtIAADBAAAAhFkAAMIAAABYRQAAwAAAAKZgAACRAwAAD0AAAMUAAAD4TwAAwwAAAKE2AADEAAAA/18AAJIDAAAnNwAAxwAAACI7AACnAwAAiBwAACEgAADeXwAAlAMAAIJpAADQAAAABEgAAMkAAAB+WQAAygAAAFFFAADIAAAA2DAA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AMUDAABvNgAA/AAAAEcsAAAYIQAAozoAAL4DAAC+RwAA/QAAAIoyAAClAAAAajYAAP8AAADkXwAAtgMAAIk6AAANIAAAjToAAAwgAAAYawAAgmYAAKZlAACZZgAAl2UAAFMBAABUAQAAVQEAAFUBAEHA+gUL0QUR7u4TCAPu/u7u7gHu7u4B7u4J/u4SFRfuEgHu7u7uCg3u7u7u7u7u7u4B7u4WCAEBGQ4Y7u4bGBru7h3u7u7uARX77u7u7hAe7u7uAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWEQICAgICAgICAgICAgISEAITAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIUAhUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4CDwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNAAAACwMEBQ8HAwwNBgwNDgwNGhUAAQADBw4GDwgMDRITCSoQERAWLzANMhETLjIUEhQSQRMsE0JAKkIZ//8sAAAAACIMDQ4jDwkQEQoQEcwQES1F/AEG9g8H9iQCEBEvMCg2SUomMTs8PTYqOTo+Py/YQEQwNyVHQzVIKwAAOAAAAAAAAwkAAAABDgILDAgjJCUzODoADRASGxYcEicvIhcwHjkGBzIFDxEUGCkAEykAAAAAADQVKB0eACEmMR8uOxksABsAIBoqKzcANTYtAAAAAAACAgEAAwMBAAEAAQEBAAIBAQACAgMBAQAABQABAwEDBQMBAQEBAgABAAQCAAIDAQADAgEAAQEAAQEBAwAAAAAAFxgYGBkaGxscHB0dHh4fHyAgISEiIyMlJiQkJycoKCgpKSoqKisrLCwtLi4vMDEzMjQ0NDU1NTY2NzcAAAAA7u787u7u7u7uHyDu+e/u7u4M7u7uBg/u7vLu7u7u7vXuAEGggAYLJP8DCAQhBQsSEycUFRYpMkEXGBkaLDM0QkYbHB0uHksfIGtleQBB0YAGC7YDAQEBAQEBAQECAwEBAgEBAQEBAQEBAQEBAQEBAQEBAQIBBAUBAQEBAQEGAQEHCAkKCgoKCgoKCgoKAQELAQwBDQ4PEBESExQVFhMTExMXGBkTGhscHRMTExMTAR4BARMBHyAhIiMTJCUmExMTEycoKRMqKywtExMTExMBAQEBARMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTLhMTEy8TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEzATExMTExMTExMTExMTExMTAAAAAAAABAAEABwAHAAhACEAJAAiAAoAAgAWAAkAIgAiACIAFQAdAAEAFAAUABQAFAAUABQAFAAIAAQABQAcABsAFwAcACEAIAAfAB4ACQATAAAAFQASABUAAwAHABUAFQAUABQAFAAUABQAFAAUABQACAAEAAUABQAGABwAGgAYABkAIQAHABUAFAAUABQAFAAUABQACwAUAA0AFAAMABQAFAAUAA4AFAAUABQAEAAUAA8AFAARAEGShAYLlQQBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAQABwADAAQABQAFAAYABgAIAAcABwARABYAEgARABIACAAIAA8ADwAXAA8AGAAPABkAGgAaAB4AFgA0AB4ABQAyAAYAIgAiADMAFwAYADUAGQAaABoAKgA2ACoANAA3ADIARQA7ADwAMwA7ADwARgA1AEcASABMADYAIgBJAEoANwBFAE4AUABiAFEAUgBUAEYARwBVAEgATABWAEkASgBYAFoATgBEAFAAUQBSAFQAOAAvACwAVQApAFYAGwAQAFgAWgBdAF0AXQBdAF0AXQBdAF4AXgBeAF4AXgBeAF4AXwBfAF8AXwBfAF8AXwBgAAkAYABgAGAAYABgAGEAYQBjAAIAYwBjAGMAYwBjAGQAAABkAAAAZABkAGQAZQAAAGUAZQBlAGUAZQBmAAAAAABmAGYAZgBmAGcAAABnAGcAZwBnAGgAAABoAGgAaABoAGgAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABBtIgGC80BrgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAA2wDbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wBBkooGC88BXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBcAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAEHxiwYLMAEBAgMBBAEFAQYHBwEGBgYGBgYGBgYGBgYGBgYGAwYGBgYGBgYGBgYGBgYGBgYGBgBBsowGC5UECgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBc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HBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAEHwngYLef//////////////////////////////////////////AAAAAAAAAAT+//+H/v//BwAAAAAAAAAA//9/////f//////////zf/79//////9///////////8P4P////8x/P///wAAAAAAAAD//////////////wEA+AMAQYCgBgtBQNf///v/////f39U/f8PAP7f///////////+3/////8DAP///////58Z////zz8DAAAAAAAA/v///38C/v///38AQcqgBguzAf///wcHAAAAAAD+//8H/gcAAAAA/v//////////fP9/LwBgAAAA4P///////yMAAAD/AwAAAOCf+f///cUDAAAAsAMAAwDgh/n///1tAwAAAF4AABwA4K/7///97SMAAAAAAQAAAOCf+f///c0jAAAAsAMAAADgxz3WGMe/AwAAAAAAAAAA4N/9///97wMAAAAAAwAAAODf/f///e8DAAAAQAMAAADg3/3///3/AwAAAAADAEGQogYLGf7/////fw0APwAAAAAAAACWJfD+rmwNIB8AQbiiBgsG//7///8DAEHkogYLcv////8/AP////9/AO3aBwAAAABQAVAxgqtiLAAAAABAAMmA9QcAAAAACAEC/////////////////////////w///////////////wP//z8//////z8//6r///8/////////31/cH88P/x/cHwAAAABATABB4KMGCwEHAEHwowYLJoAAAAD+AwAA/v///////////x8A/v////////////8H4P////8fAEGwpAYLFf//////////////////////////PwBB0KQGCxX//////////////////////////w8AQfWkBgvJAmD/B/7//4f+//8HAAAAAAAAgAD//3////9//////wAAAAAAAAD//////////////wEA+AMAAwAAAAAA//////////8/AAAAAwAAAMDX///7/////39/VP3/DwD+3////////////t//////ewD///////+fGf///88/AwAAAAAAAP7///9/Av7///9/AP7/+///uxYA////BwcAAAAAAP7//wf//wcA/wP///////////98/3/v//89/wPu////////8/8/Hv/P/wAA7p/5///9xdOfOYCwz/8DAOSH+f///W3ThzkAXsD/HwDur/v///3t8787AADB/wAA7p/5///9zfOPOcCww/8AAOzHPdYYx7/Dxz2AAID/AADu3/3///3vw989YADD/wAA7N/9///978PfPWBAw/8AAOzf/f///f/Dzz2AAMP/AEHQpwYLOP7/////f/8H/3//AwAAAACWJfD+rmz/O18//wMAAAAAAAAAA/8DoML//v///wP+/98Pv/7/P/4CAEGqqAYLa/8fAgAAAKAAAAD+/z4A/v///////////x9m/v////////////93kAEAAJEBAACSAQAAkwEAAJQBAACVAQAAlgEAAJcBAACYAQAAmQEAAJoBAACbAQAAnAEAAJ0BAACgAQAAoQEAAAEAAAABAEGhqQYLBRUKAAAVAEG4qQYL1QEVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUGBgYGBgYGBgYGBgYGBgYGBwcHBwcAQZarBgtrAQGiAQAAowEAAKQBAAClAQAApgEAAKQBAACnAQAAqAEAAKkBAACQAQAAkQEAAJIBAACTAQAAlAEAAJUBAACWAQAAlwEAAJgBAACZAQAAmgEAAJsBAACcAQAAnQEAAKABAAChAQAAAQAAAAEAQY2sBgsFFQoAABUAQaSsBgvVARUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI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TExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAEHQ+gYLB0MuVVRGLTgAQej6BgugEBilAgCwpQIAQKYCAE5vIGVycm9yIGluZm9ybWF0aW9uAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZABSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZQBLZXkgaGFzIGV4cGlyZWQAS2V5IGhhcyBiZWVuIHJldm9rZWQAS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlAAAAAAClAlsA8AG1BYwFJQGDBh0DlAT/AMcDMQMLBrwBjwF/A8oEKwDaBq8AQgNOA9wBDgQVAKEGDQGUAgsCOAZkArwC/wJdA+cECwfPAssF7wXbBeECHgZFAoUAggJsA28E8QDzAxgF2QDaA0wGVAJ7AZ0DvQQAAFEAFQK7ALMDbQD/AYUELwX5BDgAZQFGAZ8AtwaoAXMCUwEAQbiLBwsMIQQAAAAAAAAAAC8CAEHYiwcLBjUERwRWBABB7osHCwKgBABBgowHCyJGBWAFbgVhBgAAzwEAAAAAAAAAAMkG6Qb5Bh4HOQdJB14HAEGwjAcLkQHRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAABkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRjQcLIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi44HCwEMAEGXjgcLFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxY4HCwEQAEHRjgcLFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/44HCwESAEGLjwcLHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwo8HCw4aAAAAGhoaAAAAAAAACQBB848HCwEUAEH/jwcLFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrZAHCwEWAEG5kAcLJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBBhJEHCwIGAgBBrJEHCwj//////////wBB8JEHC/cI/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAA6MsBAAgCAAAJAgAACgIAAAsCAAAMAgAADQIAAA4CAAAPAgAAEAIAABECAAASAgAAEwIAABQCAAAVAgAABAAAAAAAAAAgzAEAFgIAABcCAAD8/////P///yDMAQAYAgAAGQIAABjLAQAsywEAAAAAAHzMAQAaAgAAGwIAAAoCAAALAgAAHAIAAB0CAAAOAgAADwIAABACAAAeAgAAEgIAAB8CAAAUAgAAIAIAAE5TdDNfXzI5YmFzaWNfaW9zSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAWPgBAHzLAQBgzQEATlN0M19fMjE1YmFzaWNfc3RyZWFtYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAADD4AQC0ywEATlN0M19fMjEzYmFzaWNfb3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAtPgBAPDLAQAAAAAAAQAAAKjLAQAD9P//TlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAABY+AEAOMwBAOjLAQA4AAAAAAAAADDNAQAh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\";function M(){const A=atob(G),I=new Uint8Array(A.length);for(let g=0;gnew o(A)))}export{y as engines,F as formats,R as graphvizVersion,s as instance};\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending(value, maxValue) > 0\n : ascending(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export default x => () => x;\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","function responseBlob(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.blob();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n","function responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.arrayBuffer();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n","export {default as blob} from \"./blob.js\";\nexport {default as buffer} from \"./buffer.js\";\nexport {default as dsv, csv, tsv} from \"./dsv.js\";\nexport {default as image} from \"./image.js\";\nexport {default as json} from \"./json.js\";\nexport {default as text} from \"./text.js\";\nexport {default as xml, html, svg} from \"./xml.js\";\n","function responseJson(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseJson);\n}\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import text from \"./text.js\";\n\nfunction parser(type) {\n return (input, init) => text(input, init)\n .then(text => (new DOMParser).parseFromString(text, type));\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export {default as cluster} from \"./cluster.js\";\nexport {default as hierarchy, Node} from \"./hierarchy/index.js\";\nexport {default as pack} from \"./pack/index.js\";\nexport {default as packSiblings} from \"./pack/siblings.js\";\nexport {default as packEnclose} from \"./pack/enclose.js\";\nexport {default as partition} from \"./partition.js\";\nexport {default as stratify} from \"./stratify.js\";\nexport {default as tree} from \"./tree.js\";\nexport {default as treemap} from \"./treemap/index.js\";\nexport {default as treemapBinary} from \"./treemap/binary.js\";\nexport {default as treemapDice} from \"./treemap/dice.js\";\nexport {default as treemapSlice} from \"./treemap/slice.js\";\nexport {default as treemapSliceDice} from \"./treemap/sliceDice.js\";\nexport {default as treemapSquarify} from \"./treemap/squarify.js\";\nexport {default as treemapResquarify} from \"./treemap/resquarify.js\";\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packSiblingsRandom(circles, lcg());\n return circles;\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","export default x => () => x;\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","export {default as schemeCategory10} from \"./categorical/category10.js\";\nexport {default as schemeAccent} from \"./categorical/Accent.js\";\nexport {default as schemeDark2} from \"./categorical/Dark2.js\";\nexport {default as schemeObservable10} from \"./categorical/observable10.js\";\nexport {default as schemePaired} from \"./categorical/Paired.js\";\nexport {default as schemePastel1} from \"./categorical/Pastel1.js\";\nexport {default as schemePastel2} from \"./categorical/Pastel2.js\";\nexport {default as schemeSet1} from \"./categorical/Set1.js\";\nexport {default as schemeSet2} from \"./categorical/Set2.js\";\nexport {default as schemeSet3} from \"./categorical/Set3.js\";\nexport {default as schemeTableau10} from \"./categorical/Tableau10.js\";\nexport {default as interpolateBrBG, scheme as schemeBrBG} from \"./diverging/BrBG.js\";\nexport {default as interpolatePRGn, scheme as schemePRGn} from \"./diverging/PRGn.js\";\nexport {default as interpolatePiYG, scheme as schemePiYG} from \"./diverging/PiYG.js\";\nexport {default as interpolatePuOr, scheme as schemePuOr} from \"./diverging/PuOr.js\";\nexport {default as interpolateRdBu, scheme as schemeRdBu} from \"./diverging/RdBu.js\";\nexport {default as interpolateRdGy, scheme as schemeRdGy} from \"./diverging/RdGy.js\";\nexport {default as interpolateRdYlBu, scheme as schemeRdYlBu} from \"./diverging/RdYlBu.js\";\nexport {default as interpolateRdYlGn, scheme as schemeRdYlGn} from \"./diverging/RdYlGn.js\";\nexport {default as interpolateSpectral, scheme as schemeSpectral} from \"./diverging/Spectral.js\";\nexport {default as interpolateBuGn, scheme as schemeBuGn} from \"./sequential-multi/BuGn.js\";\nexport {default as interpolateBuPu, scheme as schemeBuPu} from \"./sequential-multi/BuPu.js\";\nexport {default as interpolateGnBu, scheme as schemeGnBu} from \"./sequential-multi/GnBu.js\";\nexport {default as interpolateOrRd, scheme as schemeOrRd} from \"./sequential-multi/OrRd.js\";\nexport {default as interpolatePuBuGn, scheme as schemePuBuGn} from \"./sequential-multi/PuBuGn.js\";\nexport {default as interpolatePuBu, scheme as schemePuBu} from \"./sequential-multi/PuBu.js\";\nexport {default as interpolatePuRd, scheme as schemePuRd} from \"./sequential-multi/PuRd.js\";\nexport {default as interpolateRdPu, scheme as schemeRdPu} from \"./sequential-multi/RdPu.js\";\nexport {default as interpolateYlGnBu, scheme as schemeYlGnBu} from \"./sequential-multi/YlGnBu.js\";\nexport {default as interpolateYlGn, scheme as schemeYlGn} from \"./sequential-multi/YlGn.js\";\nexport {default as interpolateYlOrBr, scheme as schemeYlOrBr} from \"./sequential-multi/YlOrBr.js\";\nexport {default as interpolateYlOrRd, scheme as schemeYlOrRd} from \"./sequential-multi/YlOrRd.js\";\nexport {default as interpolateBlues, scheme as schemeBlues} from \"./sequential-single/Blues.js\";\nexport {default as interpolateGreens, scheme as schemeGreens} from \"./sequential-single/Greens.js\";\nexport {default as interpolateGreys, scheme as schemeGreys} from \"./sequential-single/Greys.js\";\nexport {default as interpolatePurples, scheme as schemePurples} from \"./sequential-single/Purples.js\";\nexport {default as interpolateReds, scheme as schemeReds} from \"./sequential-single/Reds.js\";\nexport {default as interpolateOranges, scheme as schemeOranges} from \"./sequential-single/Oranges.js\";\nexport {default as interpolateCividis} from \"./sequential-multi/cividis.js\";\nexport {default as interpolateCubehelixDefault} from \"./sequential-multi/cubehelix.js\";\nexport {default as interpolateRainbow, warm as interpolateWarm, cool as interpolateCool} from \"./sequential-multi/rainbow.js\";\nexport {default as interpolateSinebow} from \"./sequential-multi/sinebow.js\";\nexport {default as interpolateTurbo} from \"./sequential-multi/turbo.js\";\nexport {default as interpolateViridis, magma as interpolateMagma, inferno as interpolateInferno, plasma as interpolatePlasma} from \"./sequential-multi/viridis.js\";\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export {\n default as scaleBand,\n point as scalePoint\n} from \"./band.js\";\n\nexport {\n default as scaleIdentity\n} from \"./identity.js\";\n\nexport {\n default as scaleLinear\n} from \"./linear.js\";\n\nexport {\n default as scaleLog\n} from \"./log.js\";\n\nexport {\n default as scaleSymlog\n} from \"./symlog.js\";\n\nexport {\n default as scaleOrdinal,\n implicit as scaleImplicit\n} from \"./ordinal.js\";\n\nexport {\n default as scalePow,\n sqrt as scaleSqrt\n} from \"./pow.js\";\n\nexport {\n default as scaleRadial\n} from \"./radial.js\";\n\nexport {\n default as scaleQuantile\n} from \"./quantile.js\";\n\nexport {\n default as scaleQuantize\n} from \"./quantize.js\";\n\nexport {\n default as scaleThreshold\n} from \"./threshold.js\";\n\nexport {\n default as scaleTime\n} from \"./time.js\";\n\nexport {\n default as scaleUtc\n} from \"./utcTime.js\";\n\nexport {\n default as scaleSequential,\n sequentialLog as scaleSequentialLog,\n sequentialPow as scaleSequentialPow,\n sequentialSqrt as scaleSequentialSqrt,\n sequentialSymlog as scaleSequentialSymlog\n} from \"./sequential.js\";\n\nexport {\n default as scaleSequentialQuantile\n} from \"./sequentialQuantile.js\";\n\nexport {\n default as scaleDiverging,\n divergingLog as scaleDivergingLog,\n divergingPow as scaleDivergingPow,\n divergingSqrt as scaleDivergingSqrt,\n divergingSymlog as scaleDivergingSymlog\n} from \"./diverging.js\";\n\nexport {\n default as tickFormat\n} from \"./tickFormat.js\";\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","export default function number(x) {\n return +x;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n var squared = continuous(),\n range = [0, 1],\n round = false,\n unknown;\n\n function scale(x) {\n var y = unsquare(squared(x));\n return isNaN(y) ? unknown : round ? Math.round(y) : y;\n }\n\n scale.invert = function(y) {\n return squared.invert(square(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (squared.domain(_), scale) : squared.domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return scale.range(_).round(true);\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, scale) : round;\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return radial(squared.domain(), range)\n .round(round)\n .clamp(squared.clamp())\n .unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n var domain = [],\n interpolator = identity;\n\n function scale(x) {\n if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.range = function() {\n return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n };\n\n scale.quantiles = function(n) {\n return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import creator from \"./creator.js\";\nimport select from \"./select.js\";\n\nexport default function(name) {\n return select(creator(name).call(document.documentElement));\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","export {default as create} from \"./create.js\";\nexport {default as creator} from \"./creator.js\";\nexport {default as local} from \"./local.js\";\nexport {default as matcher} from \"./matcher.js\";\nexport {default as namespace} from \"./namespace.js\";\nexport {default as namespaces} from \"./namespaces.js\";\nexport {default as pointer} from \"./pointer.js\";\nexport {default as pointers} from \"./pointers.js\";\nexport {default as select} from \"./select.js\";\nexport {default as selectAll} from \"./selectAll.js\";\nexport {default as selection} from \"./selection/index.js\";\nexport {default as selector} from \"./selector.js\";\nexport {default as selectorAll} from \"./selectorAll.js\";\nexport {styleValue as style} from \"./selection/style.js\";\nexport {default as window} from \"./window.js\";\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","import pointer from \"./pointer.js\";\nimport sourceEvent from \"./sourceEvent.js\";\n\nexport default function(events, node) {\n if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n events = sourceEvent(events);\n if (node === undefined) node = events.currentTarget;\n events = events.touches || [events];\n }\n return Array.from(events, event => pointer(event, node));\n}\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([array(selector)], root);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","export default function() {\n return !this.node();\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n return Array.from(this);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Transition} from \"./transition/index.js\";\nimport {SCHEDULED} from \"./transition/schedule.js\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import \"./selection/index.js\";\nexport {default as transition} from \"./transition/index.js\";\nexport {default as active} from \"./active.js\";\nexport {default as interrupt} from \"./interrupt.js\";\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export {default as zoom} from \"./zoom.js\";\nexport {default as zoomTransform, identity as zoomIdentity, Transform as ZoomTransform} from \"./transform.js\";\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"main\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// no jsonp function","__webpack_require__.nc = undefined;","import '../style/index.css';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {NowVisPanel} from './nowpanel';\nimport {ConfigWidget} from './config_widget';\nimport {ProjectWidget} from './project_widget';\nimport {GroupWidget} from './group_widget';\nimport {HistoryWidget} from './graph/history_graph';\nimport { AnnontationWidget } from './annotation_widget';\nimport {DatabaseWidget} from './database_widget';\n//import { json } from '@noworkflow/utils';\n\n\nfunction main(): void {\n // ToDo: parse URL to open specific graphs\n var experimentsIn = (document.getElementById(\"experimentsIn\")).value;\n var selectedExp = (document.getElementById(\"selectedExperiment\")).value;\n var server = (document.getElementById(\"server\")).value;\n var experiments=[];\n\n if(experimentsIn)\n experiments=JSON.parse(experimentsIn);\n\n var mainpanel = new NowVisPanel();\n mainpanel.id = 'main';\n if(server==\"True\"){\n var projectWidget = new ProjectWidget(experiments);\n var groupWidget = new GroupWidget();\n var databaseWidget = new DatabaseWidget(mainpanel);\n\n mainpanel.addMainWidget(projectWidget);\n mainpanel.addMainWidget(groupWidget);\n mainpanel.addMainWidget(databaseWidget);\n }\n else{\n var config = new ConfigWidget();\n var annotationn = new AnnontationWidget(selectedExp);\n var history = new HistoryWidget(config, \"History\", \"History\", selectedExp,annotationn);\n var databaseWidget = new DatabaseWidget(mainpanel);\n\n mainpanel.addMainWidget(history);\n mainpanel.addMainWidget(config);\n mainpanel.addMainWidget(annotationn);\n mainpanel.addMainWidget(databaseWidget);\n history.load();\n } \n \n Widget.attach(mainpanel, document.body);\n window.onresize = () => { mainpanel.update() };\n}\n\nwindow.onload = main;"],"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","_classCallCheck","_defineProperties","_toPropertyKey","key","_createClass","_toPrimitive","toPrimitive","String","Number","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","_assertThisInitialized","ReferenceError","Boolean","valueOf","bind","_inherits","_setPrototypeOf","Widget","select","d3_select","AnnontationWidget","_Widget","expId","_this","node","createNode","d3node","addClass","title","label","closable","caption","setNode","setAnnotationLevelToExperiment","onBeforeHide","msg","trialId","fetchUrl","annotationLevel","anntTitle","text","setAnnotations","setAnnotationLevelToTrial","activeAnnotation","parentDock","parent","activateWidget","_fillAnnotations","_callee","_thiss","response","obj","_callee$","_context","annotations","Array","fetch","headers","status","json","item","annt","id","provenanceType","annotationFormat","description","relatedTrial","relatedExperiment","showNode","errorFeedback","fillAnnotations","addAnntRow","tBody","append","attr","actions","addMemberButton","classed","on","window","open","_setAnnotations","_callee2","header","_callee2$","_context2","table","html","addFormInput","form","fieldId","fieldLabel","fieldType","grp","divIn","inp","addFeedBackinfo","baseNode","cls","txt","desc","feedbackNode","hideNode","getValueFromSelect","defaultVale","option","options","selectedIndex","createAddGroupForm","projectsDiv","inputsDiv","descIn","annotationIn","annotationFormatIn","provenanceTypeIn","confimButton","addAnntButton","successFeedback","newAnnotation","annotation","property","body","JSON","stringify","content","document","createElement","BaseActivationGraphWidget","ConfigWidget","showTrial","showInfo","graphType","useCache","historydiv","showGraph","trialdiv","graphTypeForm","useCacheForm","_defineProperty","_createForOfIteratorHelper","isArray","_unsupportedIterableToArray","_n","F","_arrayLikeToArray","toString","from","test","forceSimulation","forceLink","forceManyBody","forceCenter","forceCollide","scaleOrdinal","schemeTableau10","drag","QueryWidget","QueryResultWidget","DatabaseTabWidget","TableInfoWidget","_DatabaseTabWidget","tableName","details","concat","style","display","flexDirection","height","overflow","contentContainer","error","columnsTable","columnsThead","_i","_arr","columnsTbody","columns","col","row","notnull","pk","foreign_keys","fkTable","fkThead","_i2","_arr2","fkTbody","_iterator","_step","fk","to","err","referenced_by","columnReferences","ref","referenced_column","refTable","refThead","_i3","_arr3","refTbody","_iterator2","_step2","referencing_table","referencing_column","DatabaseWidget","_Widget2","panel","_this2","nodes","links","Set","container","headerContainer","controlsContainer","tablesDropdown","dropdownButton","openNewQueryTab","clearSelection","color","dropdown","getElementById","isVisible","event","button","contains","target","showLoadingMessage","onAfterShow","fetchAndRenderTables","querySelector","selectAll","remove","_fetchAndRenderTables","dropdownMenu","data","console","showLoadingState","ok","renderTableList","tables","buildGraphDataFromTablesResponse","initializeGraph","renderGraph","dataLoaded","t0","showErrorMessage","message","_this3","graphData","map","sourceTable","tableForeignKeys","existingLink","find","link","source","sourceColumn","targetColumn","createArrowMarker","svg","createSimulation","width","isInitial","undefined","simulation","linkDistance","chargeStrength","chargeDistanceMax","collisionRadius","force","distance","strength","distanceMax","radius","alphaDecay","velocityDecay","rect","getBoundingClientRect","Math","max","_this4","svgNode","centerX","centerY","nodesCount","min","index","angle","PI","x","sin","cos","enter","selection","handleNodeClick","isValidNumber","boundedX","boundedY","widget","isSelected","selectedNodes","has","linkData","sourceId","targetId","nodeData","isConnected","some","isNodeSelected","updateSelection","active","alphaTarget","restart","fx","fy","isFinite","toggleSelection","nodeId","add","clear","each","nodeElement","newQueryBtn","clearBtn","size","innerHTML","ctrlKey","metaKey","preventDefault","stopPropagation","openTableInfoTab","getSelectedTables","selectTables","tableNames","_this5","_this6","d3menu","setAttribute","_openTableInfoTab","refWidget","_iterator3","_step3","w","encodeURIComponent","widgets","addInfoWidget","mode","_x","onResize","getInitialQuery","selectedTables","initialQuery","usedTables","joins","currentTable","joinFound","_iterator4","_step4","log","targetTable","join","_openNewQueryTab","_callee4","columnNames","_ref2","columnPromises","columnArrays","queryWidget","_callee4$","_context4","_ref","_callee3","_callee3$","_context3","_x2","all","_toConsumableArray","warn","TrialGraph","setGraph","config","showDiffFunction","nowVisPanel","sub","getElementsByClassName","graph","load","t1","t2","graphDefinition","selectedGraph","genDataflow","customForm","selectorDiv","typeOptions","useCacheDiv","selectorToggle","graphId","visible","selectorToggleI","selectorLabel","optionsNode","customLoadTooltip","div","trialid","aid","url","createResponse","activationId","div2","activationStorage","updateTooltipDiv","queryTooltip","configureGraph","updateWindow","fn","selectorReload","DiffGraphWidget","_BaseActivationGraphW","createForm","trial1","trial2","cache","functionDiffWindow","functionDiffJson","windowIdAndTitle","alert","functionDiffWidget","addGraphWidget","addHideShowButton","elementToAppendTo","buttonId","spanId","crypto","randomUUID","spanToHideOrShow","thisButton","filterVariablesArray","array","opVariables","defaultVariables","filteredArray","filter","arrayElement","includes","writeHTMLDiffVariables","spanVariables","trial1VariablesThatChanged","trial2VariablesAdded","trial1VariablesRemoved","variablesChangedTitle","spanVariablesChanged","diffVar","variablesLines","match","differentAttributes","findDifferenceBetweenVariables","colorJsonAttributesHTML","variablesAddedTitle","spanVariablesAdded","varAdded","variablesRemovedTitle","spanVariablesRemoved","varRemoved","variable1","variable2","jsonVariable1","parse","replace","jsonVariable2","jsonAsString","attributesArray","coloredJsonAsString","regex","regexMatches","RegExp","raw","_templateObject","_taggedTemplateLiteral","colorArrayElementsHTML","symDifference","coloredArray","argument","indexOf","writeFileAccess","fileAccessArray","file","buffering","content_hash_before","downloadFileContent","content_hash_after","timestamp","stack","didntChange","changeText","textChangeTitle","spanProperty","buttonDiv","lower","trial1ChangedVariablesFiltered","trial2AddedVariablesFiltered","trial1RemovedVariablesFiltered","fileAccessAddedTitle","spanFileAccessAdded","fileAccessRemovedTitle","spanFileAccessRemoved","fileAccessReplacedTitle","spanFileAccessReplaced","content_hash_before_first_trial","content_hash_before_second_trial","content_hash_after_first_trial","content_hash_after_second_trial","timestamp_first_trial","timestamp_second_trial","checkpoint_first_trial","checkpoint_second_trial","fileHash","fileName","download","href","location","origin","appendChild","click","removeChild","HistoryGraph","makeid","TrialGraphWidget","TrialInfoWidget","DiffInfoWidget","fs","instance","pl","require","svgPanZoom","HistoryWidget","annontationWidget","rightClickMenu","buildModal","buildRightClickMenu","script","execution","summarize","customCtrlClick","redTrial","state","selectedNode","greenTrial","diffGraphWidget","diffInfoWidget","customWindowTabCommand","trialIdSimplified","windowId","command","trialExportWidget","customSelectNode","trialGraphWidget","trialInfoWidget","filterDiv","scriptOptions","currentScript","scripts","filterToggle","filterToggleI","filterLabel","buildPushCommand","modal","modalBody","buildPullCommand","buildAddRemote","buildEditRemote","buildDeleteRemote","modalContent","modalHeader","cleanModalBodyAndClose","buildRestoreTrialCommand","buildRestoreFileCommand","buildProvCommand","buildExportPrologCommand","buildDataflowCommand","buildTrialFunctionDiffCommand","self","_parent$getAttribute","parentNode","getAttribute","buildTrialFunctionDiffModal","_parent$getAttribute2","buildDataflowModal","exportUrl","exportWindowId","buildExportPrologModal","provWindowId","provUrl","provWindow","prov_lines","prov","split","line","trialFiles","_submitButton","files","changeTitle","submitButton","showModal","createFormSelectInput","createFormTextInput","fileToRestore","selectedOptions","fileIdentifier","getTextInputFormByID","targetPath","restoreUrl","getRestoreOrCollabCommand","addAlert","_submitButton2","createFormCheckInput","skipScript","checked","skipModules","skipFileAccess","_submitButton3","textContent","remoteURL","remoteName","addRemoteURL","terminal_text","executeCollabCommand","remotes","_ref3","_x3","_this7","_ref4","_x4","serverUrlId","_submitButton4","server_url","remoteURLText","serverUrl","collabCommandUrl","d3content","filterInternal","executionOptions","filterReload","secondTrialId","firstTrialSelectActivation","activation","substring","secondTrialSelect","trial","tag","secondTrialSelectActivation","getSecondTrialFunctionActivations","firstTrialFunctionId","secondTrialFunctionId","_submitButton5","inferenceRules","hideTimestamps","buildExportPrologTab","exportWindow","prologSession","answerCallback","answer","answerString","answerCardTextId","answerCardText","answerWindow","format_answer","prologProgram","userQuery","consult","success","query","scrollableModal","modalDialog","overflowY","maxHeight","getDataflow","dataflowWindowId","dataflowUrl","dataflow","viz","dataflowWindow","dataflowButtons","selectedEdge","svgElement","renderSVGElement","preventMouseEventsDefault","dblClickZoomEnabled","_loop","nodeIndex","presentNode","children","tagName","toLowerCase","presentNodeSelection","shiftKey","deletePriorNodes","checkboxOpenDataflowExcludeProvenanceNewWindow","dataflowWindowD3Select","checkboxID","excludePriorProvenanceHint","chooseDataflowExcludedProvenanceWindowId","presentWindowId","newWindowId","lastIndexOf","selectedNodeEvaluationTitle","presentNodeOrderEvaluationTitle","firstEvaluationOrder","lastEvaluationOrder","dataflowUrlLastEvaluation","dataflowUrlFirstEvaluation","excludingProvenanceWindow","getDataflowWindowExcludeSomeProvenance","responseLastEvaluation","jsonLastEvaluation","dataflowLastEvaluation","responseFirstEvaluation","jsonFirstEvaluation","dataflowFirstEvaluation","dataflowAMinusDataflowB","excludingProvenanceWindowId","dataflowA","dataflowB","selectedEvaluationOrder","lastEvaluationId","linesDataflowA","linesDataflowB","newDataflow","removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation","dataflowIsAligned","addsDeletedNodeSettingsAndChecksIfDataflowIsAligned","removesDeletedEvaluationsFromAligment","newDataflowString","addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow","_loop2","selectedNodeSelection","deletePriorNodesAfterDeletingPriorNodes","_excludingProvenanceW","selectedNodeOrderEvaluationTitle","dataflowUrlPresentEvaluation","selectedEvaluationDataflow","evaluations","lineIndex","trim","alignedEvaluations","alignedEvalIndex","alignedEval","_loop3","indexOfDataflowLineToRemove","lineToRemove","findIndex","dataflowLine","splice","tempArray","isAligned","evaluationWithoutSettings","lineToAdd","string","evaluationList","selectedEvaluation","dataflowTextInputEvaluation","createFormNumberInput","dataflowEvaluationInput","addsAutocompleteToDataflowWDF","dataFlowShowType","dataFlowHideTimestamps","dataFlowHideInternals","dataFlowHideNotCode","dataFlowActivationNames","dataFlowHideFunc","dataflowFileAccesses","dataflowEvaluation","dataflowGroup","dataflowMode","dataflowDepth","dataflowValueLength","dataflowName","input","autocompleteSuggestionsResults","evaluationInputHint","suggestions","opacity","border","padding","marginTop","evaluation","_loop4","evaluationSuggestionId","evaluation_id","first_char_line","downloadDataflowAsSVG","dataflowDOT","appendDiv","saveAs","Blob","outerHTML","downloadDataflowAsDOT","excludeProvenanceHint","commandTitle","trialIdTitle","hideModal","alertType","feedbackAlert","checkInputId","checkDiv","textInputId","helpId","helpText","textDiv","textInput","selectId","selectText","minOptionNumber","maxOptionNumber","defaultOption","optionsLabels","selectDiv","selectInput","optionNumber","inputLabel","minValue","defaultValue","numberDiv","formTextInput","result","_superPropGet","assign","GroupWidget","onBeforeShow","groups","setGroups","setUsers","_setUsers","userIn","users","login","userLogin","resfreshGroups","_setGroups","group","members","user","addGrpRow","_deleteGrp","grpId","deleteGrp","membersText","addMemberForm","currentGroup","deleteGroupButton","confirm","nameIn","addGrpButton","newGrp","createAddMemberForm","userId","ModulesInfoWidget","EnvironmentInfoWidget","FileAccessesInfoWidget","display1","display2","createMain","loadModules","loadEnvironment","loadFileAccess","main","h1","code_hash","info","start","duration_text","filter_trial","filterfn","select_trial","filterdiv","newfilter","on_change","modules_url","modules","modules_added","modules_removed","modules_replaced","fold","createFold","foldable","createFilter","ul","strial","element","valid","t1_path","mod_li","t2_path","elements","rem","li","version","path","createFilterFold","environment_url","environment","env_added","env_removed","env_replaced","env_li","_iterator5","_step5","_iterator6","_step6","env_cli","accesses_url","accesses","fa_added","fa_removed","fa_replaced","_iterator7","_step7","fa_li","_iterator8","_step8","_iterator9","_step9","fa_cfield","value1","value2","attr1","attr2","mod","env_field","env","fa_field","fa","v1","v2","trialDisplay","default_local","createItem","createFilterDiv","text_filter","select_local","stext","slocal","check_text","check_local","createList","list","trial_path","mode_filter","select_hash","local","smode","shash","check_mode","check_hash","startsWith","pos","select_version","sversion","check_version","file_accesses","idAttr","scriptAttr","startAttr","str_start","finishAttr","str_finish","durationAttr","argumentsAttr","anntButton","foldI","spanI","foldA","foldAI","DockPanel","findInLayout","area","splitconfig","every","child","tabconfig","tabwidget","temp","NowVisPanel","_DockPanel","addMainWidget","nowVis","wnow","addWidget","operation","layout","saveLayout","sublayout","sizes","restoreLayout","ProjectWidget","experiments","addExpRow","exp","expTBody","cloneCommandText","navigator","clipboard","writeText","divCopied","setTimeout","addExpButton","newExp","rows","count","renderTable","csv","blob","URL","createObjectURL","revokeObjectURL","paginationContainer","startIndex","currentPage","endIndex","paginationButtons","totalPages","ceil","tableContainer","thead","tbody","startRow","endRow","currentPageRows","tr","editorId","createQueryInterface","_createQueryInterface","headerRow","queryContainer","executeQuery","aceEditor","ace","edit","setTheme","session","setMode","setOptions","fontSize","minLines","showPrintMargin","enableBasicAutocompletion","enableLiveAutocompletion","commands","addCommand","bindKey","win","mac","exec","langTools","tableCompleter","getCompletions","editor","prefix","callback","completions","meta","addCompleter","setValue","focus","_executeQuery","statusArea","sql","getValue","displayQueryResults","_displayQueryResults","resultWidget","editorElement","availableHeight","minHeight","resize","experimentsIn","selectedExp","server","mainpanel","projectWidget","groupWidget","databaseWidget","annotationn","history","attach","onresize","update","onload"],"sourceRoot":""} \ No newline at end of file From f4dc902a728bb7e4fdbd553dfa7faa22744e7b5c Mon Sep 17 00:00:00 2001 From: Felipe Coutinho Date: Mon, 13 Oct 2025 22:23:49 -0300 Subject: [PATCH 2/2] Remove build change. --- src/noworkflow/now/vis/static/dist/bundle.js | 65423 ++++++++-------- .../now/vis/static/dist/bundle.js.map | 2 +- 2 files changed, 32710 insertions(+), 32715 deletions(-) diff --git a/src/noworkflow/now/vis/static/dist/bundle.js b/src/noworkflow/now/vis/static/dist/bundle.js index e97971e7..8ba6d67f 100644 --- a/src/noworkflow/now/vis/static/dist/bundle.js +++ b/src/noworkflow/now/vis/static/dist/bundle.js @@ -24942,27949 +24942,2974 @@ var Private; /***/ }), -/***/ "../../node_modules/ace-builds/src-noconflict/ace.js": -/*!***********************************************************!*\ - !*** ../../node_modules/ace-builds/src-noconflict/ace.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "../../node_modules/asn1.js/lib/asn1.js": +/*!**********************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -/* module decorator */ module = __webpack_require__.nmd(module); -/* ***** BEGIN LICENSE BLOCK ***** - * Distributed under the BSD license: - * - * Copyright (c) 2010, Ajax.org B.V. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Ajax.org B.V. nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ***** END LICENSE BLOCK ***** */ +var asn1 = exports; -/** - * Define a module along with a payload - * @param module a name for the payload - * @param payload a function to call with (require, exports, module) params - */ +asn1.bignum = __webpack_require__(/*! bn.js */ "../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js"); -(function() { +asn1.define = (__webpack_require__(/*! ./asn1/api */ "../../node_modules/asn1.js/lib/asn1/api.js").define); +asn1.base = __webpack_require__(/*! ./asn1/base */ "../../node_modules/asn1.js/lib/asn1/base/index.js"); +asn1.constants = __webpack_require__(/*! ./asn1/constants */ "../../node_modules/asn1.js/lib/asn1/constants/index.js"); +asn1.decoders = __webpack_require__(/*! ./asn1/decoders */ "../../node_modules/asn1.js/lib/asn1/decoders/index.js"); +asn1.encoders = __webpack_require__(/*! ./asn1/encoders */ "../../node_modules/asn1.js/lib/asn1/encoders/index.js"); -var ACE_NAMESPACE = "ace"; -var global = (function() { return this; })(); -if (!global && typeof window != "undefined") global = window; // strict mode +/***/ }), +/***/ "../../node_modules/asn1.js/lib/asn1/api.js": +/*!**************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/api.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -if (!ACE_NAMESPACE && typeof requirejs !== "undefined") - return; +var asn1 = __webpack_require__(/*! ../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var api = exports; -var define = function(module, deps, payload) { - if (typeof module !== "string") { - if (define.original) - define.original.apply(this, arguments); - else { - console.error("dropping module because define wasn\'t a string."); - console.trace(); - } - return; - } - if (arguments.length == 2) - payload = deps; - if (!define.modules[module]) { - define.payloads[module] = payload; - define.modules[module] = null; - } +api.define = function define(name, body) { + return new Entity(name, body); }; -define.modules = {}; -define.payloads = {}; +function Entity(name, body) { + this.name = name; + this.body = body; -/** - * Get at functionality define()ed using the function above - */ -var _require = function(parentId, module, callback) { - if (typeof module === "string") { - var payload = lookup(parentId, module); - if (payload != undefined) { - callback && callback(); - return payload; - } - } else if (Object.prototype.toString.call(module) === "[object Array]") { - var params = []; - for (var i = 0, l = module.length; i < l; ++i) { - var dep = lookup(parentId, module[i]); - if (dep == undefined && require.original) - return; - params.push(dep); - } - return callback && callback.apply(null, params) || true; - } + this.decoders = {}; + this.encoders = {}; }; -var require = function(module, callback) { - var packagedModule = _require("", module, callback); - if (packagedModule == undefined && require.original) - return require.original.apply(this, arguments); - return packagedModule; +Entity.prototype._createNamed = function createNamed(base) { + var named; + try { + named = (__webpack_require__(/*! vm */ "../../node_modules/vm-browserify/index.js").runInThisContext)( + '(function ' + this.name + '(entity) {\n' + + ' this._initNamed(entity);\n' + + '})' + ); + } catch (e) { + named = function (entity) { + this._initNamed(entity); + }; + } + inherits(named, base); + named.prototype._initNamed = function initnamed(entity) { + base.call(this, entity); + }; + + return new named(this); }; -var normalizeModule = function(parentId, moduleName) { - // normalize plugin requires - if (moduleName.indexOf("!") !== -1) { - var chunks = moduleName.split("!"); - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); - } - // normalize relative requires - if (moduleName.charAt(0) == ".") { - var base = parentId.split("/").slice(0, -1).join("/"); - moduleName = base + "/" + moduleName; +Entity.prototype._getDecoder = function _getDecoder(enc) { + enc = enc || 'der'; + // Lazily create decoder + if (!this.decoders.hasOwnProperty(enc)) + this.decoders[enc] = this._createNamed(asn1.decoders[enc]); + return this.decoders[enc]; +}; - while(moduleName.indexOf(".") !== -1 && previous != moduleName) { - var previous = moduleName; - moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); - } - } - return moduleName; +Entity.prototype.decode = function decode(data, enc, options) { + return this._getDecoder(enc).decode(data, options); }; -/** - * Internal function to lookup moduleNames and resolve them by calling the - * definition function if needed. - */ -var lookup = function(parentId, moduleName) { - moduleName = normalizeModule(parentId, moduleName); +Entity.prototype._getEncoder = function _getEncoder(enc) { + enc = enc || 'der'; + // Lazily create encoder + if (!this.encoders.hasOwnProperty(enc)) + this.encoders[enc] = this._createNamed(asn1.encoders[enc]); + return this.encoders[enc]; +}; - var module = define.modules[moduleName]; - if (!module) { - module = define.payloads[moduleName]; - if (typeof module === 'function') { - var exports = {}; - var mod = { - id: moduleName, - uri: '', - exports: exports, - packaged: true - }; +Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { + return this._getEncoder(enc).encode(data, reporter); +}; - var req = function(module, callback) { - return _require(moduleName, module, callback); - }; - var returnValue = module(req, exports, mod); - exports = returnValue || mod.exports; - define.modules[moduleName] = exports; - delete define.payloads[moduleName]; - } - module = define.modules[moduleName] = exports || module; - } - return module; -}; +/***/ }), -function exportAce(ns) { - var root = global; - if (ns) { - if (!global[ns]) - global[ns] = {}; - root = global[ns]; - } +/***/ "../../node_modules/asn1.js/lib/asn1/base/buffer.js": +/*!**********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/base/buffer.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - if (!root.define || !root.define.packaged) { - define.original = root.define; - root.define = define; - root.define.packaged = true; - } +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var Reporter = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").Reporter); +var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); - if (!root.require || !root.require.packaged) { - require.original = root.require; - root.require = require; - root.require.packaged = true; - } +function DecoderBuffer(base, options) { + Reporter.call(this, options); + if (!Buffer.isBuffer(base)) { + this.error('Input not Buffer'); + return; + } + + this.base = base; + this.offset = 0; + this.length = base.length; } +inherits(DecoderBuffer, Reporter); +exports.DecoderBuffer = DecoderBuffer; -exportAce(ACE_NAMESPACE); +DecoderBuffer.prototype.save = function save() { + return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; +}; -})(); +DecoderBuffer.prototype.restore = function restore(save) { + // Return skipped data + var res = new DecoderBuffer(this.base); + res.offset = save.offset; + res.length = this.offset; -ace.define("ace/lib/es6-shim",["require","exports","module"], function(require, exports, module){function defineProp(obj, name, val) { - Object.defineProperty(obj, name, { - value: val, - enumerable: false, - writable: true, - configurable: true - }); -} -if (!String.prototype.startsWith) { - defineProp(String.prototype, "startsWith", function (searchString, position) { - position = position || 0; - return this.lastIndexOf(searchString, position) === position; - }); -} -if (!String.prototype.endsWith) { - defineProp(String.prototype, "endsWith", function (searchString, position) { - var subjectString = this; - if (position === undefined || position > subjectString.length) { - position = subjectString.length; - } - position -= searchString.length; - var lastIndex = subjectString.indexOf(searchString, position); - return lastIndex !== -1 && lastIndex === position; - }); -} -if (!String.prototype.repeat) { - defineProp(String.prototype, "repeat", function (count) { - var result = ""; - var string = this; - while (count > 0) { - if (count & 1) - result += string; - if ((count >>= 1)) - string += string; - } - return result; - }); -} -if (!String.prototype.includes) { - defineProp(String.prototype, "includes", function (str, position) { - return this.indexOf(str, position) != -1; - }); -} -if (!Object.assign) { - Object.assign = function (target) { - if (target === undefined || target === null) { - throw new TypeError("Cannot convert undefined or null to object"); - } - var output = Object(target); - for (var index = 1; index < arguments.length; index++) { - var source = arguments[index]; - if (source !== undefined && source !== null) { - Object.keys(source).forEach(function (key) { - output[key] = source[key]; - }); - } - } - return output; - }; -} -if (!Object.values) { - Object.values = function (o) { - return Object.keys(o).map(function (k) { - return o[k]; - }); - }; -} -if (!Array.prototype.find) { - defineProp(Array.prototype, "find", function (predicate) { - var len = this.length; - var thisArg = arguments[1]; - for (var k = 0; k < len; k++) { - var kValue = this[k]; - if (predicate.call(thisArg, kValue, k, this)) { - return kValue; - } - } - }); -} -if (!Array.prototype.findIndex) { - defineProp(Array.prototype, "findIndex", function (predicate) { - var len = this.length; - var thisArg = arguments[1]; - for (var k = 0; k < len; k++) { - var kValue = this[k]; - if (predicate.call(thisArg, kValue, k, this)) { - return k; - } - } - }); + this.offset = save.offset; + Reporter.prototype.restore.call(this, save.reporter); + + return res; +}; + +DecoderBuffer.prototype.isEmpty = function isEmpty() { + return this.offset === this.length; +}; + +DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { + if (this.offset + 1 <= this.length) + return this.base.readUInt8(this.offset++, true); + else + return this.error(fail || 'DecoderBuffer overrun'); } -if (!Array.prototype.includes) { - defineProp(Array.prototype, "includes", function (item, position) { - return this.indexOf(item, position) != -1; - }); + +DecoderBuffer.prototype.skip = function skip(bytes, fail) { + if (!(this.offset + bytes <= this.length)) + return this.error(fail || 'DecoderBuffer overrun'); + + var res = new DecoderBuffer(this.base); + + // Share reporter state + res._reporterState = this._reporterState; + + res.offset = this.offset; + res.length = this.offset + bytes; + this.offset += bytes; + return res; } -if (!Array.prototype.fill) { - defineProp(Array.prototype, "fill", function (value) { - var O = this; - var len = O.length >>> 0; - var start = arguments[1]; - var relativeStart = start >> 0; - var k = relativeStart < 0 - ? Math.max(len + relativeStart, 0) - : Math.min(relativeStart, len); - var end = arguments[2]; - var relativeEnd = end === undefined ? len : end >> 0; - var final = relativeEnd < 0 - ? Math.max(len + relativeEnd, 0) - : Math.min(relativeEnd, len); - while (k < final) { - O[k] = value; - k++; - } - return O; - }); + +DecoderBuffer.prototype.raw = function raw(save) { + return this.base.slice(save ? save.offset : this.offset, this.length); } -if (!Array.of) { - defineProp(Array, "of", function () { - return Array.prototype.slice.call(arguments); - }); + +function EncoderBuffer(value, reporter) { + if (Array.isArray(value)) { + this.length = 0; + this.value = value.map(function(item) { + if (!(item instanceof EncoderBuffer)) + item = new EncoderBuffer(item, reporter); + this.length += item.length; + return item; + }, this); + } else if (typeof value === 'number') { + if (!(0 <= value && value <= 0xff)) + return reporter.error('non-byte EncoderBuffer value'); + this.value = value; + this.length = 1; + } else if (typeof value === 'string') { + this.value = value; + this.length = Buffer.byteLength(value); + } else if (Buffer.isBuffer(value)) { + this.value = value; + this.length = value.length; + } else { + return reporter.error('Unsupported type: ' + typeof value); + } } +exports.EncoderBuffer = EncoderBuffer; -}); +EncoderBuffer.prototype.join = function join(out, offset) { + if (!out) + out = new Buffer(this.length); + if (!offset) + offset = 0; -ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/es6-shim"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st: -"use strict"; -require("./es6-shim"); + if (this.length === 0) + return out; -}); + if (Array.isArray(this.value)) { + this.value.forEach(function(item) { + item.join(out, offset); + offset += item.length; + }); + } else { + if (typeof this.value === 'number') + out[offset] = this.value; + else if (typeof this.value === 'string') + out.write(this.value, offset); + else if (Buffer.isBuffer(this.value)) + this.value.copy(out, offset); + offset += this.length; + } -ace.define("ace/lib/deep_copy",["require","exports","module"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) { - if (typeof obj !== "object" || !obj) - return obj; - var copy; - if (Array.isArray(obj)) { - copy = []; - for (var key = 0; key < obj.length; key++) { - copy[key] = deepCopy(obj[key]); - } - return copy; - } - if (Object.prototype.toString.call(obj) !== "[object Object]") - return obj; - copy = {}; - for (var key in obj) - copy[key] = deepCopy(obj[key]); - return copy; + return out; }; -}); -ace.define("ace/lib/lang",["require","exports","module","ace/lib/deep_copy"], function(require, exports, module){"use strict"; -exports.last = function (a) { - return a[a.length - 1]; -}; -exports.stringReverse = function (string) { - return string.split("").reverse().join(""); -}; -exports.stringRepeat = function (string, count) { - var result = ''; - while (count > 0) { - if (count & 1) - result += string; - if (count >>= 1) - string += string; - } - return result; -}; -var trimBeginRegexp = /^\s\s*/; -var trimEndRegexp = /\s\s*$/; -exports.stringTrimLeft = function (string) { - return string.replace(trimBeginRegexp, ''); -}; -exports.stringTrimRight = function (string) { - return string.replace(trimEndRegexp, ''); -}; -exports.copyObject = function (obj) { - var copy = {}; - for (var key in obj) { - copy[key] = obj[key]; - } - return copy; -}; -exports.copyArray = function (array) { - var copy = []; - for (var i = 0, l = array.length; i < l; i++) { - if (array[i] && typeof array[i] == "object") - copy[i] = this.copyObject(array[i]); - else - copy[i] = array[i]; - } - return copy; -}; -exports.deepCopy = require("./deep_copy").deepCopy; -exports.arrayToMap = function (arr) { - var map = {}; - for (var i = 0; i < arr.length; i++) { - map[arr[i]] = 1; - } - return map; -}; -exports.createMap = function (props) { - var map = Object.create(null); - for (var i in props) { - map[i] = props[i]; - } - return map; -}; -exports.arrayRemove = function (array, value) { - for (var i = 0; i <= array.length; i++) { - if (value === array[i]) { - array.splice(i, 1); - } - } -}; -exports.escapeRegExp = function (str) { - return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1'); -}; -exports.escapeHTML = function (str) { - return ("" + str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/ { + +var base = exports; + +base.Reporter = (__webpack_require__(/*! ./reporter */ "../../node_modules/asn1.js/lib/asn1/base/reporter.js").Reporter); +base.DecoderBuffer = (__webpack_require__(/*! ./buffer */ "../../node_modules/asn1.js/lib/asn1/base/buffer.js").DecoderBuffer); +base.EncoderBuffer = (__webpack_require__(/*! ./buffer */ "../../node_modules/asn1.js/lib/asn1/base/buffer.js").EncoderBuffer); +base.Node = __webpack_require__(/*! ./node */ "../../node_modules/asn1.js/lib/asn1/base/node.js"); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/base/node.js": +/*!********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/base/node.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var Reporter = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").Reporter); +var EncoderBuffer = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").EncoderBuffer); +var DecoderBuffer = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").DecoderBuffer); +var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); + +// Supported tags +var tags = [ + 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', + 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', + 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', + 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' +]; + +// Public methods list +var methods = [ + 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', + 'any', 'contains' +].concat(tags); + +// Overrided methods list +var overrided = [ + '_peekTag', '_decodeTag', '_use', + '_decodeStr', '_decodeObjid', '_decodeTime', + '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', + + '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', + '_encodeNull', '_encodeInt', '_encodeBool' +]; + +function Node(enc, parent) { + var state = {}; + this._baseState = state; + + state.enc = enc; + + state.parent = parent || null; + state.children = null; + + // State + state.tag = null; + state.args = null; + state.reverseArgs = null; + state.choice = null; + state.optional = false; + state.any = false; + state.obj = false; + state.use = null; + state.useDecoder = null; + state.key = null; + state['default'] = null; + state.explicit = null; + state.implicit = null; + state.contains = null; + + // Should create new instance on each method + if (!state.parent) { + state.children = []; + this._wrap(); + } +} +module.exports = Node; + +var stateProps = [ + 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', + 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', + 'implicit', 'contains' +]; + +Node.prototype.clone = function clone() { + var state = this._baseState; + var cstate = {}; + stateProps.forEach(function(prop) { + cstate[prop] = state[prop]; + }); + var res = new this.constructor(cstate.parent); + res._baseState = cstate; + return res; }; -exports.delayedCall = function (fcn, defaultTimeout) { - var timer = null; - var callback = function () { - timer = null; - fcn(); - }; - var _self = function (timeout) { - if (timer == null) - timer = setTimeout(callback, timeout || defaultTimeout); - }; - _self.delay = function (timeout) { - timer && clearTimeout(timer); - timer = setTimeout(callback, timeout || defaultTimeout); - }; - _self.schedule = _self; - _self.call = function () { - this.cancel(); - fcn(); - }; - _self.cancel = function () { - timer && clearTimeout(timer); - timer = null; - }; - _self.isPending = function () { - return timer; + +Node.prototype._wrap = function wrap() { + var state = this._baseState; + methods.forEach(function(method) { + this[method] = function _wrappedMethod() { + var clone = new this.constructor(this); + state.children.push(clone); + return clone[method].apply(clone, arguments); }; - return _self; + }, this); }; -exports.supportsLookbehind = function () { - try { - new RegExp('(?<=.)'); - } - catch (e) { - return false; - } - return true; + +Node.prototype._init = function init(body) { + var state = this._baseState; + + assert(state.parent === null); + body.call(this); + + // Filter children + state.children = state.children.filter(function(child) { + return child._baseState.parent === this; + }, this); + assert.equal(state.children.length, 1, 'Root node can have only one child'); }; -exports.skipEmptyMatch = function (line, last, supportsUnicodeFlag) { - return supportsUnicodeFlag && line.codePointAt(last) > 0xffff ? 2 : 1; + +Node.prototype._useArgs = function useArgs(args) { + var state = this._baseState; + + // Filter children and args + var children = args.filter(function(arg) { + return arg instanceof this.constructor; + }, this); + args = args.filter(function(arg) { + return !(arg instanceof this.constructor); + }, this); + + if (children.length !== 0) { + assert(state.children === null); + state.children = children; + + // Replace parent to maintain backward link + children.forEach(function(child) { + child._baseState.parent = this; + }, this); + } + if (args.length !== 0) { + assert(state.args === null); + state.args = args; + state.reverseArgs = args.map(function(arg) { + if (typeof arg !== 'object' || arg.constructor !== Object) + return arg; + + var res = {}; + Object.keys(arg).forEach(function(key) { + if (key == (key | 0)) + key |= 0; + var value = arg[key]; + res[value] = key; + }); + return res; + }); + } }; +// +// Overrided methods +// + +overrided.forEach(function(method) { + Node.prototype[method] = function _overrided() { + var state = this._baseState; + throw new Error(method + ' not implemented for encoding: ' + state.enc); + }; }); -ace.define("ace/lib/useragent",["require","exports","module"], function(require, exports, module){"use strict"; -exports.OS = { - LINUX: "LINUX", - MAC: "MAC", - WINDOWS: "WINDOWS" -}; -exports.getOS = function () { - if (exports.isMac) { - return exports.OS.MAC; - } - else if (exports.isLinux) { - return exports.OS.LINUX; - } - else { - return exports.OS.WINDOWS; - } -}; -var _navigator = typeof navigator == "object" ? navigator : {}; -var os = (/mac|win|linux/i.exec(_navigator.platform) || ["other"])[0].toLowerCase(); -var ua = _navigator.userAgent || ""; -var appName = _navigator.appName || ""; -exports.isWin = (os == "win"); -exports.isMac = (os == "mac"); -exports.isLinux = (os == "linux"); -exports.isIE = - (appName == "Microsoft Internet Explorer" || appName.indexOf("MSAppHost") >= 0) - ? parseFloat((ua.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/) || [])[1]) - : parseFloat((ua.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/) || [])[1]); // for ie -exports.isOldIE = exports.isIE && exports.isIE < 9; -exports.isGecko = exports.isMozilla = ua.match(/ Gecko\/\d+/); -exports.isOpera = typeof opera == "object" && Object.prototype.toString.call(window["opera"]) == "[object Opera]"; -exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; -exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; -exports.isSafari = parseFloat(ua.split(" Safari/")[1]) && !exports.isChrome || undefined; -exports.isEdge = parseFloat(ua.split(" Edge/")[1]) || undefined; -exports.isAIR = ua.indexOf("AdobeAIR") >= 0; -exports.isAndroid = ua.indexOf("Android") >= 0; -exports.isChromeOS = ua.indexOf(" CrOS ") >= 0; -exports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window["MSStream"]; -if (exports.isIOS) - exports.isMac = true; -exports.isMobile = exports.isIOS || exports.isAndroid; +// +// Public methods +// + +tags.forEach(function(tag) { + Node.prototype[tag] = function _tagMethod() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + assert(state.tag === null); + state.tag = tag; + + this._useArgs(args); + return this; + }; }); -ace.define("ace/lib/dom",["require","exports","module","ace/lib/useragent"], function(require, exports, module){"use strict"; -var useragent = require("./useragent"); -var XHTML_NS = "http://www.w3.org/1999/xhtml"; -exports.buildDom = function buildDom(arr, parent, refs) { - if (typeof arr == "string" && arr) { - var txt = document.createTextNode(arr); - if (parent) - parent.appendChild(txt); - return txt; - } - if (!Array.isArray(arr)) { - if (arr && arr.appendChild && parent) - parent.appendChild(arr); - return arr; - } - if (typeof arr[0] != "string" || !arr[0]) { - var els = []; - for (var i = 0; i < arr.length; i++) { - var ch = buildDom(arr[i], parent, refs); - ch && els.push(ch); - } - return els; - } - var el = document.createElement(arr[0]); - var options = arr[1]; - var childIndex = 1; - if (options && typeof options == "object" && !Array.isArray(options)) - childIndex = 2; - for (var i = childIndex; i < arr.length; i++) - buildDom(arr[i], el, refs); - if (childIndex == 2) { - Object.keys(options).forEach(function (n) { - var val = options[n]; - if (n === "class") { - el.className = Array.isArray(val) ? val.join(" ") : val; - } - else if (typeof val == "function" || n == "value" || n[0] == "$") { - el[n] = val; - } - else if (n === "ref") { - if (refs) - refs[val] = el; - } - else if (n === "style") { - if (typeof val == "string") - el.style.cssText = val; - } - else if (val != null) { - el.setAttribute(n, val); - } - }); - } - if (parent) - parent.appendChild(el); - return el; +Node.prototype.use = function use(item) { + assert(item); + var state = this._baseState; + + assert(state.use === null); + state.use = item; + + return this; }; -exports.getDocumentHead = function (doc) { - if (!doc) - doc = document; - return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; + +Node.prototype.optional = function optional() { + var state = this._baseState; + + state.optional = true; + + return this; }; -exports.createElement = function (tag, ns) { - return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag); + +Node.prototype.def = function def(val) { + var state = this._baseState; + + assert(state['default'] === null); + state['default'] = val; + state.optional = true; + + return this; }; -exports.removeChildren = function (element) { - element.innerHTML = ""; + +Node.prototype.explicit = function explicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.explicit = num; + + return this; }; -exports.createTextNode = function (textContent, element) { - var doc = element ? element.ownerDocument : document; - return doc.createTextNode(textContent); + +Node.prototype.implicit = function implicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.implicit = num; + + return this; }; -exports.createFragment = function (element) { - var doc = element ? element.ownerDocument : document; - return doc.createDocumentFragment(); + +Node.prototype.obj = function obj() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + state.obj = true; + + if (args.length !== 0) + this._useArgs(args); + + return this; }; -exports.hasCssClass = function (el, name) { - var classes = (el.className + "").split(/\s+/g); - return classes.indexOf(name) !== -1; + +Node.prototype.key = function key(newKey) { + var state = this._baseState; + + assert(state.key === null); + state.key = newKey; + + return this; }; -exports.addCssClass = function (el, name) { - if (!exports.hasCssClass(el, name)) { - el.className += " " + name; - } + +Node.prototype.any = function any() { + var state = this._baseState; + + state.any = true; + + return this; }; -exports.removeCssClass = function (el, name) { - var classes = el.className.split(/\s+/g); - while (true) { - var index = classes.indexOf(name); - if (index == -1) { - break; - } - classes.splice(index, 1); - } - el.className = classes.join(" "); + +Node.prototype.choice = function choice(obj) { + var state = this._baseState; + + assert(state.choice === null); + state.choice = obj; + this._useArgs(Object.keys(obj).map(function(key) { + return obj[key]; + })); + + return this; }; -exports.toggleCssClass = function (el, name) { - var classes = el.className.split(/\s+/g), add = true; - while (true) { - var index = classes.indexOf(name); - if (index == -1) { - break; - } - add = false; - classes.splice(index, 1); - } - if (add) - classes.push(name); - el.className = classes.join(" "); - return add; + +Node.prototype.contains = function contains(item) { + var state = this._baseState; + + assert(state.use === null); + state.contains = item; + + return this; }; -exports.setCssClass = function (node, className, include) { - if (include) { - exports.addCssClass(node, className); - } - else { - exports.removeCssClass(node, className); - } -}; -exports.hasCssString = function (id, doc) { - var index = 0, sheets; - doc = doc || document; - if ((sheets = doc.querySelectorAll("style"))) { - while (index < sheets.length) { - if (sheets[index++].id === id) { - return true; - } - } + +// +// Decoding +// + +Node.prototype._decode = function decode(input, options) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return input.wrapResult(state.children[0]._decode(input, options)); + + var result = state['default']; + var present = true; + + var prevKey = null; + if (state.key !== null) + prevKey = input.enterKey(state.key); + + // Check if tag is there + if (state.optional) { + var tag = null; + if (state.explicit !== null) + tag = state.explicit; + else if (state.implicit !== null) + tag = state.implicit; + else if (state.tag !== null) + tag = state.tag; + + if (tag === null && !state.any) { + // Trial and Error + var save = input.save(); + try { + if (state.choice === null) + this._decodeGeneric(state.tag, input, options); + else + this._decodeChoice(input, options); + present = true; + } catch (e) { + present = false; + } + input.restore(save); + } else { + present = this._peekTag(input, tag, state.any); + + if (input.isError(present)) + return present; } -}; -exports.removeElementById = function (id, doc) { - doc = doc || document; - if (doc.getElementById(id)) { - doc.getElementById(id).remove(); + } + + // Push object on stack + var prevObj; + if (state.obj && present) + prevObj = input.enterObject(); + + if (present) { + // Unwrap explicit values + if (state.explicit !== null) { + var explicit = this._decodeTag(input, state.explicit); + if (input.isError(explicit)) + return explicit; + input = explicit; } -}; -var strictCSP; -var cssCache = []; -exports.useStrictCSP = function (value) { - strictCSP = value; - if (value == false) - insertPendingStyles(); - else if (!cssCache) - cssCache = []; -}; -function insertPendingStyles() { - var cache = cssCache; - cssCache = null; - cache && cache.forEach(function (item) { - importCssString(item[0], item[1]); - }); -} -function importCssString(cssText, id, target) { - if (typeof document == "undefined") - return; - if (cssCache) { - if (target) { - insertPendingStyles(); - } - else if (target === false) { - return cssCache.push([cssText, id]); - } + + var start = input.offset; + + // Unwrap implicit and normal values + if (state.use === null && state.choice === null) { + if (state.any) + var save = input.save(); + var body = this._decodeTag( + input, + state.implicit !== null ? state.implicit : state.tag, + state.any + ); + if (input.isError(body)) + return body; + + if (state.any) + result = input.raw(save); + else + input = body; } - if (strictCSP) - return; - var container = target; - if (!target || !target.getRootNode) { - container = document; + + if (options && options.track && state.tag !== null) + options.track(input.path(), start, input.length, 'tagged'); + + if (options && options.track && state.tag !== null) + options.track(input.path(), input.offset, input.length, 'content'); + + // Select proper method for tag + if (state.any) + result = result; + else if (state.choice === null) + result = this._decodeGeneric(state.tag, input, options); + else + result = this._decodeChoice(input, options); + + if (input.isError(result)) + return result; + + // Decode children + if (!state.any && state.choice === null && state.children !== null) { + state.children.forEach(function decodeChildren(child) { + // NOTE: We are ignoring errors here, to let parser continue with other + // parts of encoded data + child._decode(input, options); + }); } - else { - container = target.getRootNode(); - if (!container || container == target) - container = document; + + // Decode contained/encoded by schema, only in bit or octet strings + if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { + var data = new DecoderBuffer(result); + result = this._getUse(state.contains, input._reporterState.obj) + ._decode(data, options); } - var doc = container.ownerDocument || container; - if (id && exports.hasCssString(id, container)) - return null; - if (id) - cssText += "\n/*# sourceURL=ace/css/" + id + " */"; - var style = exports.createElement("style"); - style.appendChild(doc.createTextNode(cssText)); - if (id) - style.id = id; - if (container == doc) - container = exports.getDocumentHead(doc); - container.insertBefore(style, container.firstChild); -} -exports.importCssString = importCssString; -exports.importCssStylsheet = function (uri, doc) { - exports.buildDom(["link", { rel: "stylesheet", href: uri }], exports.getDocumentHead(doc)); + } + + // Pop object + if (state.obj && present) + result = input.leaveObject(prevObj); + + // Set key + if (state.key !== null && (result !== null || present === true)) + input.leaveKey(prevKey, state.key, result); + else if (prevKey !== null) + input.exitKey(prevKey); + + return result; }; -exports.scrollbarWidth = function (doc) { - var inner = exports.createElement("ace_inner"); - inner.style.width = "100%"; - inner.style.minWidth = "0px"; - inner.style.height = "200px"; - inner.style.display = "block"; - var outer = exports.createElement("ace_outer"); - var style = outer.style; - style.position = "absolute"; - style.left = "-10000px"; - style.overflow = "hidden"; - style.width = "200px"; - style.minWidth = "0px"; - style.height = "150px"; - style.display = "block"; - outer.appendChild(inner); - var body = (doc && doc.documentElement) || (document && document.documentElement); - if (!body) - return 0; - body.appendChild(outer); - var noScrollbar = inner.offsetWidth; - style.overflow = "scroll"; - var withScrollbar = inner.offsetWidth; - if (noScrollbar === withScrollbar) { - withScrollbar = outer.clientWidth; - } - body.removeChild(outer); - return noScrollbar - withScrollbar; + +Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { + var state = this._baseState; + + if (tag === 'seq' || tag === 'set') + return null; + if (tag === 'seqof' || tag === 'setof') + return this._decodeList(input, tag, state.args[0], options); + else if (/str$/.test(tag)) + return this._decodeStr(input, tag, options); + else if (tag === 'objid' && state.args) + return this._decodeObjid(input, state.args[0], state.args[1], options); + else if (tag === 'objid') + return this._decodeObjid(input, null, null, options); + else if (tag === 'gentime' || tag === 'utctime') + return this._decodeTime(input, tag, options); + else if (tag === 'null_') + return this._decodeNull(input, options); + else if (tag === 'bool') + return this._decodeBool(input, options); + else if (tag === 'objDesc') + return this._decodeStr(input, tag, options); + else if (tag === 'int' || tag === 'enum') + return this._decodeInt(input, state.args && state.args[0], options); + + if (state.use !== null) { + return this._getUse(state.use, input._reporterState.obj) + ._decode(input, options); + } else { + return input.error('unknown tag: ' + tag); + } }; -exports.computedStyle = function (element, style) { - return window.getComputedStyle(element, "") || {}; + +Node.prototype._getUse = function _getUse(entity, obj) { + + var state = this._baseState; + // Create altered use decoder if implicit is set + state.useDecoder = this._use(entity, obj); + assert(state.useDecoder._baseState.parent === null); + state.useDecoder = state.useDecoder._baseState.children[0]; + if (state.implicit !== state.useDecoder._baseState.implicit) { + state.useDecoder = state.useDecoder.clone(); + state.useDecoder._baseState.implicit = state.implicit; + } + return state.useDecoder; }; -exports.setStyle = function (styles, property, value) { - if (styles[property] !== value) { - styles[property] = value; + +Node.prototype._decodeChoice = function decodeChoice(input, options) { + var state = this._baseState; + var result = null; + var match = false; + + Object.keys(state.choice).some(function(key) { + var save = input.save(); + var node = state.choice[key]; + try { + var value = node._decode(input, options); + if (input.isError(value)) + return false; + + result = { type: key, value: value }; + match = true; + } catch (e) { + input.restore(save); + return false; } -}; -exports.HAS_CSS_ANIMATION = false; -exports.HAS_CSS_TRANSFORMS = false; -exports.HI_DPI = useragent.isWin - ? typeof window !== "undefined" && window.devicePixelRatio >= 1.5 - : true; -if (useragent.isChromeOS) - exports.HI_DPI = false; -if (typeof document !== "undefined") { - var div = document.createElement("div"); - if (exports.HI_DPI && div.style.transform !== undefined) - exports.HAS_CSS_TRANSFORMS = true; - if (!useragent.isEdge && typeof div.style.animationName !== "undefined") - exports.HAS_CSS_ANIMATION = true; - div = null; -} -if (exports.HAS_CSS_TRANSFORMS) { - exports.translate = function (element, tx, ty) { - element.style.transform = "translate(" + Math.round(tx) + "px, " + Math.round(ty) + "px)"; - }; -} -else { - exports.translate = function (element, tx, ty) { - element.style.top = Math.round(ty) + "px"; - element.style.left = Math.round(tx) + "px"; - }; -} + return true; + }, this); -}); + if (!match) + return input.error('Choice not matched'); -ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(require, exports, module){/* - * based on code from: - * - * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -"use strict"; -var dom = require("./dom"); -exports.get = function (url, callback) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - callback(xhr.responseText); - } - }; - xhr.send(null); + return result; }; -exports.loadScript = function (path, callback) { - var head = dom.getDocumentHead(); - var s = document.createElement('script'); - s.src = path; - head.appendChild(s); - s.onload = s.onreadystatechange = function (_, isAbort) { - if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") { - s = s.onload = s.onreadystatechange = null; - if (!isAbort) - callback(); - } - }; + +// +// Encoding +// + +Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { + return new EncoderBuffer(data, this.reporter); }; -exports.qualifyURL = function (url) { - var a = document.createElement('a'); - a.href = url; - return a.href; + +Node.prototype._encode = function encode(data, reporter, parent) { + var state = this._baseState; + if (state['default'] !== null && state['default'] === data) + return; + + var result = this._encodeValue(data, reporter, parent); + if (result === undefined) + return; + + if (this._skipDefault(result, reporter, parent)) + return; + + return result; }; -}); +Node.prototype._encodeValue = function encode(data, reporter, parent) { + var state = this._baseState; -ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module){"use strict"; -exports.inherits = function (ctor, superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } + // Decode root node + if (state.parent === null) + return state.children[0]._encode(data, reporter || new Reporter()); + + var result = null; + + // Set reporter to share it with a child class + this.reporter = reporter; + + // Check if data is there + if (state.optional && data === undefined) { + if (state['default'] !== null) + data = state['default'] + else + return; + } + + // Encode children first + var content = null; + var primitive = false; + if (state.any) { + // Anything that was given is translated to buffer + result = this._createEncoderBuffer(data); + } else if (state.choice) { + result = this._encodeChoice(data, reporter); + } else if (state.contains) { + content = this._getUse(state.contains, parent)._encode(data, reporter); + primitive = true; + } else if (state.children) { + content = state.children.map(function(child) { + if (child._baseState.tag === 'null_') + return child._encode(null, reporter, data); + + if (child._baseState.key === null) + return reporter.error('Child should have a key'); + var prevKey = reporter.enterKey(child._baseState.key); + + if (typeof data !== 'object') + return reporter.error('Child expected, but input is not object'); + + var res = child._encode(data[child._baseState.key], reporter, data); + reporter.leaveKey(prevKey); + + return res; + }, this).filter(function(child) { + return child; }); -}; -exports.mixin = function (obj, mixin) { - for (var key in mixin) { - obj[key] = mixin[key]; + content = this._createEncoderBuffer(content); + } else { + if (state.tag === 'seqof' || state.tag === 'setof') { + // TODO(indutny): this should be thrown on DSL level + if (!(state.args && state.args.length === 1)) + return reporter.error('Too many args for : ' + state.tag); + + if (!Array.isArray(data)) + return reporter.error('seqof/setof, but data is not Array'); + + var child = this.clone(); + child._baseState.implicit = null; + content = this._createEncoderBuffer(data.map(function(item) { + var state = this._baseState; + + return this._getUse(state.args[0], data)._encode(item, reporter); + }, child)); + } else if (state.use !== null) { + result = this._getUse(state.use, parent)._encode(data, reporter); + } else { + content = this._encodePrimitive(state.tag, data); + primitive = true; } - return obj; + } + + // Encode data itself + var result; + if (!state.any && state.choice === null) { + var tag = state.implicit !== null ? state.implicit : state.tag; + var cls = state.implicit === null ? 'universal' : 'context'; + + if (tag === null) { + if (state.use === null) + reporter.error('Tag could be omitted only for .use()'); + } else { + if (state.use === null) + result = this._encodeComposite(tag, primitive, cls, content); + } + } + + // Wrap in explicit + if (state.explicit !== null) + result = this._encodeComposite(state.explicit, false, 'context', result); + + return result; }; -exports.implement = function (proto, mixin) { - exports.mixin(proto, mixin); + +Node.prototype._encodeChoice = function encodeChoice(data, reporter) { + var state = this._baseState; + + var node = state.choice[data.type]; + if (!node) { + assert( + false, + data.type + ' not found in ' + + JSON.stringify(Object.keys(state.choice))); + } + return node._encode(data.value, reporter); }; -}); +Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { + var state = this._baseState; -ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module){"use strict"; -var EventEmitter = {}; -var stopPropagation = function () { this.propagationStopped = true; }; -var preventDefault = function () { this.defaultPrevented = true; }; -EventEmitter._emit = - EventEmitter._dispatchEvent = function (eventName, e) { - this._eventRegistry || (this._eventRegistry = {}); - this._defaultHandlers || (this._defaultHandlers = {}); - var listeners = this._eventRegistry[eventName] || []; - var defaultHandler = this._defaultHandlers[eventName]; - if (!listeners.length && !defaultHandler) - return; - if (typeof e != "object" || !e) - e = {}; - if (!e.type) - e.type = eventName; - if (!e.stopPropagation) - e.stopPropagation = stopPropagation; - if (!e.preventDefault) - e.preventDefault = preventDefault; - listeners = listeners.slice(); - for (var i = 0; i < listeners.length; i++) { - listeners[i](e, this); - if (e.propagationStopped) - break; - } - if (defaultHandler && !e.defaultPrevented) - return defaultHandler(e, this); - }; -EventEmitter._signal = function (eventName, e) { - var listeners = (this._eventRegistry || {})[eventName]; - if (!listeners) - return; - listeners = listeners.slice(); - for (var i = 0; i < listeners.length; i++) - listeners[i](e, this); -}; -EventEmitter.once = function (eventName, callback) { - var _self = this; - this.on(eventName, function newCallback() { - _self.off(eventName, newCallback); - callback.apply(null, arguments); - }); - if (!callback) { - return new Promise(function (resolve) { - callback = resolve; - }); - } + if (/str$/.test(tag)) + return this._encodeStr(data, tag); + else if (tag === 'objid' && state.args) + return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); + else if (tag === 'objid') + return this._encodeObjid(data, null, null); + else if (tag === 'gentime' || tag === 'utctime') + return this._encodeTime(data, tag); + else if (tag === 'null_') + return this._encodeNull(); + else if (tag === 'int' || tag === 'enum') + return this._encodeInt(data, state.args && state.reverseArgs[0]); + else if (tag === 'bool') + return this._encodeBool(data); + else if (tag === 'objDesc') + return this._encodeStr(data, tag); + else + throw new Error('Unsupported tag: ' + tag); }; -EventEmitter.setDefaultHandler = function (eventName, callback) { - var handlers = this._defaultHandlers; - if (!handlers) - handlers = this._defaultHandlers = { _disabled_: {} }; - if (handlers[eventName]) { - var old = handlers[eventName]; - var disabled = handlers._disabled_[eventName]; - if (!disabled) - handlers._disabled_[eventName] = disabled = []; - disabled.push(old); - var i = disabled.indexOf(callback); - if (i != -1) - disabled.splice(i, 1); - } - handlers[eventName] = callback; + +Node.prototype._isNumstr = function isNumstr(str) { + return /^[0-9 ]*$/.test(str); }; -EventEmitter.removeDefaultHandler = function (eventName, callback) { - var handlers = this._defaultHandlers; - if (!handlers) - return; - var disabled = handlers._disabled_[eventName]; - if (handlers[eventName] == callback) { - if (disabled) - this.setDefaultHandler(eventName, disabled.pop()); - } - else if (disabled) { - var i = disabled.indexOf(callback); - if (i != -1) - disabled.splice(i, 1); - } + +Node.prototype._isPrintstr = function isPrintstr(str) { + return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); }; -EventEmitter.on = - EventEmitter.addEventListener = function (eventName, callback, capturing) { - this._eventRegistry = this._eventRegistry || {}; - var listeners = this._eventRegistry[eventName]; - if (!listeners) - listeners = this._eventRegistry[eventName] = []; - if (listeners.indexOf(callback) == -1) - listeners[capturing ? "unshift" : "push"](callback); - return callback; - }; -EventEmitter.off = - EventEmitter.removeListener = - EventEmitter.removeEventListener = function (eventName, callback) { - this._eventRegistry = this._eventRegistry || {}; - var listeners = this._eventRegistry[eventName]; - if (!listeners) - return; - var index = listeners.indexOf(callback); - if (index !== -1) - listeners.splice(index, 1); - }; -EventEmitter.removeAllListeners = function (eventName) { - if (!eventName) - this._eventRegistry = this._defaultHandlers = undefined; - if (this._eventRegistry) - this._eventRegistry[eventName] = undefined; - if (this._defaultHandlers) - this._defaultHandlers[eventName] = undefined; + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/base/reporter.js": +/*!************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/base/reporter.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +function Reporter(options) { + this._reporterState = { + obj: null, + path: [], + options: options || {}, + errors: [] + }; +} +exports.Reporter = Reporter; + +Reporter.prototype.isError = function isError(obj) { + return obj instanceof ReporterError; }; -exports.EventEmitter = EventEmitter; -}); +Reporter.prototype.save = function save() { + var state = this._reporterState; -ace.define("ace/lib/report_error",["require","exports","module"], function(require, exports, module){exports.reportError = function reportError(msg, data) { - var e = new Error(msg); - e["data"] = data; - if (typeof console == "object" && console.error) - console.error(e); - setTimeout(function () { throw e; }); + return { obj: state.obj, pathLen: state.path.length }; }; -}); +Reporter.prototype.restore = function restore(data) { + var state = this._reporterState; -ace.define("ace/lib/default_english_messages",["require","exports","module"], function(require, exports, module){var defaultEnglishMessages = { - "autocomplete.popup.aria-roledescription": "Autocomplete suggestions", - "autocomplete.popup.aria-label": "Autocomplete suggestions", - "autocomplete.popup.item.aria-roledescription": "item", - "autocomplete.loading": "Loading...", - "editor.scroller.aria-roledescription": "editor", - "editor.scroller.aria-label": "Editor content, press Enter to start editing, press Escape to exit", - "editor.gutter.aria-roledescription": "editor gutter", - "editor.gutter.aria-label": "Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit", - "error-marker.good-state": "Looks good!", - "prompt.recently-used": "Recently used", - "prompt.other-commands": "Other commands", - "prompt.no-matching-commands": "No matching commands", - "search-box.find.placeholder": "Search for", - "search-box.find-all.text": "All", - "search-box.replace.placeholder": "Replace with", - "search-box.replace-next.text": "Replace", - "search-box.replace-all.text": "All", - "search-box.toggle-replace.title": "Toggle Replace mode", - "search-box.toggle-regexp.title": "RegExp Search", - "search-box.toggle-case.title": "CaseSensitive Search", - "search-box.toggle-whole-word.title": "Whole Word Search", - "search-box.toggle-in-selection.title": "Search In Selection", - "search-box.search-counter": "$0 of $1", - "text-input.aria-roledescription": "editor", - "text-input.aria-label": "Cursor at row $0", - "gutter.code-folding.range.aria-label": "Toggle code folding, rows $0 through $1", - "gutter.code-folding.closed.aria-label": "Toggle code folding, rows $0 through $1", - "gutter.code-folding.open.aria-label": "Toggle code folding, row $0", - "gutter.code-folding.closed.title": "Unfold code", - "gutter.code-folding.open.title": "Fold code", - "gutter.annotation.aria-label.error": "Error, read annotations row $0", - "gutter.annotation.aria-label.warning": "Warning, read annotations row $0", - "gutter.annotation.aria-label.info": "Info, read annotations row $0", - "inline-fold.closed.title": "Unfold code", - "gutter-tooltip.aria-label.error.singular": "error", - "gutter-tooltip.aria-label.error.plural": "errors", - "gutter-tooltip.aria-label.warning.singular": "warning", - "gutter-tooltip.aria-label.warning.plural": "warnings", - "gutter-tooltip.aria-label.info.singular": "information message", - "gutter-tooltip.aria-label.info.plural": "information messages", - "gutter.annotation.aria-label.security": "Security finding, read annotations row $0", - "gutter.annotation.aria-label.hint": "Suggestion, read annotations row $0", - "gutter-tooltip.aria-label.security.singular": "security finding", - "gutter-tooltip.aria-label.security.plural": "security findings", - "gutter-tooltip.aria-label.hint.singular": "suggestion", - "gutter-tooltip.aria-label.hint.plural": "suggestions", - "editor.tooltip.disable-editing": "Editing is disabled" + state.obj = data.obj; + state.path = state.path.slice(0, data.pathLen); }; -exports.defaultEnglishMessages = defaultEnglishMessages; -}); +Reporter.prototype.enterKey = function enterKey(key) { + return this._reporterState.path.push(key); +}; -ace.define("ace/lib/app_config",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/report_error","ace/lib/default_english_messages"], function(require, exports, module){"no use strict"; -var oop = require("./oop"); -var EventEmitter = require("./event_emitter").EventEmitter; -var reportError = require("./report_error").reportError; -var defaultEnglishMessages = require("./default_english_messages").defaultEnglishMessages; -var optionsProvider = { - setOptions: function (optList) { - Object.keys(optList).forEach(function (key) { - this.setOption(key, optList[key]); - }, this); - }, - getOptions: function (optionNames) { - var result = {}; - if (!optionNames) { - var options = this.$options; - optionNames = Object.keys(options).filter(function (key) { - return !options[key].hidden; - }); - } - else if (!Array.isArray(optionNames)) { - optionNames = Object.keys(optionNames); - } - optionNames.forEach(function (key) { - result[key] = this.getOption(key); - }, this); - return result; - }, - setOption: function (name, value) { - if (this["$" + name] === value) - return; - var opt = this.$options[name]; - if (!opt) { - return warn('misspelled option "' + name + '"'); - } - if (opt.forwardTo) - return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value); - if (!opt.handlesSet) - this["$" + name] = value; - if (opt && opt.set) - opt.set.call(this, value); - }, - getOption: function (name) { - var opt = this.$options[name]; - if (!opt) { - return warn('misspelled option "' + name + '"'); - } - if (opt.forwardTo) - return this[opt.forwardTo] && this[opt.forwardTo].getOption(name); - return opt && opt.get ? opt.get.call(this) : this["$" + name]; - } +Reporter.prototype.exitKey = function exitKey(index) { + var state = this._reporterState; + + state.path = state.path.slice(0, index - 1); }; -function warn(message) { - if (typeof console != "undefined" && console.warn) - console.warn.apply(console, arguments); -} -var messages; -var nlsPlaceholders; -var AppConfig = /** @class */ (function () { - function AppConfig() { - this.$defaultOptions = {}; - messages = defaultEnglishMessages; - nlsPlaceholders = "dollarSigns"; - } - AppConfig.prototype.defineOptions = function (obj, path, options) { - if (!obj.$options) - this.$defaultOptions[path] = obj.$options = {}; - Object.keys(options).forEach(function (key) { - var opt = options[key]; - if (typeof opt == "string") - opt = { forwardTo: opt }; - opt.name || (opt.name = key); - obj.$options[opt.name] = opt; - if ("initialValue" in opt) - obj["$" + opt.name] = opt.initialValue; - }); - oop.implement(obj, optionsProvider); - return this; - }; - AppConfig.prototype.resetOptions = function (obj) { - Object.keys(obj.$options).forEach(function (key) { - var opt = obj.$options[key]; - if ("value" in opt) - obj.setOption(key, opt.value); - }); - }; - AppConfig.prototype.setDefaultValue = function (path, name, value) { - if (!path) { - for (path in this.$defaultOptions) - if (this.$defaultOptions[path][name]) - break; - if (!this.$defaultOptions[path][name]) - return false; - } - var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {}); - if (opts[name]) { - if (opts.forwardTo) - this.setDefaultValue(opts.forwardTo, name, value); - else - opts[name].value = value; - } - }; - AppConfig.prototype.setDefaultValues = function (path, optionHash) { - Object.keys(optionHash).forEach(function (key) { - this.setDefaultValue(path, key, optionHash[key]); - }, this); - }; - AppConfig.prototype.setMessages = function (value, options) { - messages = value; - if (options && options.placeholders) { - nlsPlaceholders = options.placeholders; - } - }; - AppConfig.prototype.nls = function (key, defaultString, params) { - if (!messages[key]) { - warn("No message found for the key '" + key + "' in messages with id " + messages.$id + ", trying to find a translation for the default string '" + defaultString + "'."); - if (!messages[defaultString]) { - warn("No message found for the default string '" + defaultString + "' in the provided messages. Falling back to the default English message."); - } - } - var translated = messages[key] || messages[defaultString] || defaultString; - if (params) { - if (nlsPlaceholders === "dollarSigns") { - translated = translated.replace(/\$(\$|[\d]+)/g, function (_, dollarMatch) { - if (dollarMatch == "$") - return "$"; - return params[dollarMatch]; - }); - } - if (nlsPlaceholders === "curlyBrackets") { - translated = translated.replace(/\{([^\}]+)\}/g, function (_, curlyBracketMatch) { - return params[curlyBracketMatch]; - }); - } - } - return translated; - }; - return AppConfig; -}()); -AppConfig.prototype.warn = warn; -AppConfig.prototype.reportError = reportError; -oop.implement(AppConfig.prototype, EventEmitter); -exports.AppConfig = AppConfig; -}); +Reporter.prototype.leaveKey = function leaveKey(index, key, value) { + var state = this._reporterState; -ace.define("ace/theme/textmate-css",["require","exports","module"], function(require, exports, module){module.exports = ".ace-tm .ace_gutter {\n background: #f0f0f0;\n color: #333;\n}\n\n.ace-tm .ace_print-margin {\n width: 1px;\n background: #e8e8e8;\n}\n\n.ace-tm .ace_fold {\n background-color: #6B72E6;\n}\n\n.ace-tm {\n background-color: #FFFFFF;\n color: black;\n}\n\n.ace-tm .ace_cursor {\n color: black;\n}\n \n.ace-tm .ace_invisible {\n color: rgb(191, 191, 191);\n}\n\n.ace-tm .ace_storage,\n.ace-tm .ace_keyword {\n color: blue;\n}\n\n.ace-tm .ace_constant {\n color: rgb(197, 6, 11);\n}\n\n.ace-tm .ace_constant.ace_buildin {\n color: rgb(88, 72, 246);\n}\n\n.ace-tm .ace_constant.ace_language {\n color: rgb(88, 92, 246);\n}\n\n.ace-tm .ace_constant.ace_library {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_invalid {\n background-color: rgba(255, 0, 0, 0.1);\n color: red;\n}\n\n.ace-tm .ace_support.ace_function {\n color: rgb(60, 76, 114);\n}\n\n.ace-tm .ace_support.ace_constant {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_support.ace_type,\n.ace-tm .ace_support.ace_class {\n color: rgb(109, 121, 222);\n}\n\n.ace-tm .ace_keyword.ace_operator {\n color: rgb(104, 118, 135);\n}\n\n.ace-tm .ace_string {\n color: rgb(3, 106, 7);\n}\n\n.ace-tm .ace_comment {\n color: rgb(76, 136, 107);\n}\n\n.ace-tm .ace_comment.ace_doc {\n color: rgb(0, 102, 255);\n}\n\n.ace-tm .ace_comment.ace_doc.ace_tag {\n color: rgb(128, 159, 191);\n}\n\n.ace-tm .ace_constant.ace_numeric {\n color: rgb(0, 0, 205);\n}\n\n.ace-tm .ace_variable {\n color: rgb(49, 132, 149);\n}\n\n.ace-tm .ace_xml-pe {\n color: rgb(104, 104, 91);\n}\n\n.ace-tm .ace_entity.ace_name.ace_function {\n color: #0000A2;\n}\n\n\n.ace-tm .ace_heading {\n color: rgb(12, 7, 255);\n}\n\n.ace-tm .ace_list {\n color:rgb(185, 6, 144);\n}\n\n.ace-tm .ace_meta.ace_tag {\n color:rgb(0, 22, 142);\n}\n\n.ace-tm .ace_string.ace_regex {\n color: rgb(255, 0, 0)\n}\n\n.ace-tm .ace_marker-layer .ace_selection {\n background: rgb(181, 213, 255);\n}\n.ace-tm.ace_multiselect .ace_selection.ace_start {\n box-shadow: 0 0 3px 0px white;\n}\n.ace-tm .ace_marker-layer .ace_step {\n background: rgb(252, 255, 0);\n}\n\n.ace-tm .ace_marker-layer .ace_stack {\n background: rgb(164, 229, 101);\n}\n\n.ace-tm .ace_marker-layer .ace_bracket {\n margin: -1px 0 0 -1px;\n border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-tm .ace_marker-layer .ace_active-line {\n background: rgba(0, 0, 0, 0.07);\n}\n\n.ace-tm .ace_gutter-active-line {\n background-color : #dcdcdc;\n}\n\n.ace-tm .ace_marker-layer .ace_selected-word {\n background: rgb(250, 250, 255);\n border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-tm .ace_indent-guide {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}\n\n.ace-tm .ace_indent-guide-active {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\") right repeat-y;\n}\n"; + this.exitKey(index); + if (state.obj !== null) + state.obj[key] = value; +}; -}); +Reporter.prototype.path = function path() { + return this._reporterState.path.join('/'); +}; -ace.define("ace/theme/textmate",["require","exports","module","ace/theme/textmate-css","ace/lib/dom"], function(require, exports, module){"use strict"; -exports.isDark = false; -exports.cssClass = "ace-tm"; -exports.cssText = require("./textmate-css"); -exports.$id = "ace/theme/textmate"; -var dom = require("../lib/dom"); -dom.importCssString(exports.cssText, exports.cssClass, false); +Reporter.prototype.enterObject = function enterObject() { + var state = this._reporterState; -}); + var prev = state.obj; + state.obj = {}; + return prev; +}; -ace.define("ace/config",["require","exports","module","ace/lib/lang","ace/lib/net","ace/lib/dom","ace/lib/app_config","ace/theme/textmate"], function(require, exports, module){"no use strict"; -var lang = require("./lib/lang"); -var net = require("./lib/net"); -var dom = require("./lib/dom"); -var AppConfig = require("./lib/app_config").AppConfig; -module.exports = exports = new AppConfig(); -var options = { - packaged: false, - workerPath: null, - modePath: null, - themePath: null, - basePath: "", - suffix: ".js", - $moduleUrls: {}, - loadWorkerFromBlob: true, - sharedPopups: false, - useStrictCSP: null +Reporter.prototype.leaveObject = function leaveObject(prev) { + var state = this._reporterState; + + var now = state.obj; + state.obj = prev; + return now; }; -exports.get = function (key) { - if (!options.hasOwnProperty(key)) - throw new Error("Unknown config key: " + key); - return options[key]; + +Reporter.prototype.error = function error(msg) { + var err; + var state = this._reporterState; + + var inherited = msg instanceof ReporterError; + if (inherited) { + err = msg; + } else { + err = new ReporterError(state.path.map(function(elem) { + return '[' + JSON.stringify(elem) + ']'; + }).join(''), msg.message || msg, msg.stack); + } + + if (!state.options.partial) + throw err; + + if (!inherited) + state.errors.push(err); + + return err; }; -exports.set = function (key, value) { - if (options.hasOwnProperty(key)) - options[key] = value; - else if (this.setDefaultValue("", key, value) == false) - throw new Error("Unknown config key: " + key); - if (key == "useStrictCSP") - dom.useStrictCSP(value); + +Reporter.prototype.wrapResult = function wrapResult(result) { + var state = this._reporterState; + if (!state.options.partial) + return result; + + return { + result: this.isError(result) ? null : result, + errors: state.errors + }; }; -exports.all = function () { - return lang.copyObject(options); + +function ReporterError(path, msg) { + this.path = path; + this.rethrow(msg); }; -exports.$modes = {}; -exports.moduleUrl = function (name, component) { - if (options.$moduleUrls[name]) - return options.$moduleUrls[name]; - var parts = name.split("/"); - component = component || parts[parts.length - 2] || ""; - var sep = component == "snippets" ? "/" : "-"; - var base = parts[parts.length - 1]; - if (component == "worker" && sep == "-") { - var re = new RegExp("^" + component + "[\\-_]|[\\-_]" + component + "$", "g"); - base = base.replace(re, ""); - } - if ((!base || base == component) && parts.length > 1) - base = parts[parts.length - 2]; - var path = options[component + "Path"]; - if (path == null) { - path = options.basePath; - } - else if (sep == "/") { - component = sep = ""; +inherits(ReporterError, Error); + +ReporterError.prototype.rethrow = function rethrow(msg) { + this.message = msg + ' at: ' + (this.path || '(shallow)'); + if (Error.captureStackTrace) + Error.captureStackTrace(this, ReporterError); + + if (!this.stack) { + try { + // IE only adds stack when thrown + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; } - if (path && path.slice(-1) != "/") - path += "/"; - return path + component + sep + base + this.get("suffix"); + } + return this; }; -exports.setModuleUrl = function (name, subst) { - return options.$moduleUrls[name] = subst; + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/constants/der.js": +/*!************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/constants/der.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var constants = __webpack_require__(/*! ../constants */ "../../node_modules/asn1.js/lib/asn1/constants/index.js"); + +exports.tagClass = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private' }; -var loader = function (moduleName, cb) { - if (moduleName === "ace/theme/textmate" || moduleName === "./theme/textmate") - return cb(null, require("./theme/textmate")); - if (customLoader) - return customLoader(moduleName, cb); - console.error("loader is not configured"); +exports.tagClassByName = constants._reverse(exports.tagClass); + +exports.tag = { + 0x00: 'end', + 0x01: 'bool', + 0x02: 'int', + 0x03: 'bitstr', + 0x04: 'octstr', + 0x05: 'null_', + 0x06: 'objid', + 0x07: 'objDesc', + 0x08: 'external', + 0x09: 'real', + 0x0a: 'enum', + 0x0b: 'embed', + 0x0c: 'utf8str', + 0x0d: 'relativeOid', + 0x10: 'seq', + 0x11: 'set', + 0x12: 'numstr', + 0x13: 'printstr', + 0x14: 't61str', + 0x15: 'videostr', + 0x16: 'ia5str', + 0x17: 'utctime', + 0x18: 'gentime', + 0x19: 'graphstr', + 0x1a: 'iso646str', + 0x1b: 'genstr', + 0x1c: 'unistr', + 0x1d: 'charstr', + 0x1e: 'bmpstr' }; -var customLoader; -exports.setLoader = function (cb) { - customLoader = cb; +exports.tagByName = constants._reverse(exports.tag); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/constants/index.js": +/*!**************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/constants/index.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var constants = exports; + +// Helper +constants._reverse = function reverse(map) { + var res = {}; + + Object.keys(map).forEach(function(key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) + key = key | 0; + + var value = map[key]; + res[value] = key; + }); + + return res; }; -exports.dynamicModules = Object.create(null); -exports.$loading = {}; -exports.$loaded = {}; -exports.loadModule = function (moduleId, onLoad) { - var loadedModule; - if (Array.isArray(moduleId)) { - var moduleType = moduleId[0]; - var moduleName = moduleId[1]; - } - else if (typeof moduleId == "string") { - var moduleName = moduleId; + +constants.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/constants/der.js"); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/decoders/der.js": +/*!***********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/decoders/der.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +var asn1 = __webpack_require__(/*! ../../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); +var base = asn1.base; +var bignum = asn1.bignum; + +// Import DER constants +var der = asn1.constants.der; + +function DERDecoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DERDecoder; + +DERDecoder.prototype.decode = function decode(data, options) { + if (!(data instanceof base.DecoderBuffer)) + data = new base.DecoderBuffer(data, options); + + return this.tree._decode(data, options); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { + if (buffer.isEmpty()) + return false; + + var state = buffer.save(); + var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + buffer.restore(state); + + return decodedTag.tag === tag || decodedTag.tagStr === tag || + (decodedTag.tagStr + 'of') === tag || any; +}; + +DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { + var decodedTag = derDecodeTag(buffer, + 'Failed to decode tag of "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + var len = derDecodeLen(buffer, + decodedTag.primitive, + 'Failed to get length of "' + tag + '"'); + + // Failure + if (buffer.isError(len)) + return len; + + if (!any && + decodedTag.tag !== tag && + decodedTag.tagStr !== tag && + decodedTag.tagStr + 'of' !== tag) { + return buffer.error('Failed to match tag: "' + tag + '"'); + } + + if (decodedTag.primitive || len !== null) + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); + + // Indefinite length... find END tag + var state = buffer.save(); + var res = this._skipUntilEnd( + buffer, + 'Failed to skip indefinite length body: "' + this.tag + '"'); + if (buffer.isError(res)) + return res; + + len = buffer.offset - state.offset; + buffer.restore(state); + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +}; + +DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { + while (true) { + var tag = derDecodeTag(buffer, fail); + if (buffer.isError(tag)) + return tag; + var len = derDecodeLen(buffer, tag.primitive, fail); + if (buffer.isError(len)) + return len; + + var res; + if (tag.primitive || len !== null) + res = buffer.skip(len) + else + res = this._skipUntilEnd(buffer, fail); + + // Failure + if (buffer.isError(res)) + return res; + + if (tag.tagStr === 'end') + break; + } +}; + +DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, + options) { + var result = []; + while (!buffer.isEmpty()) { + var possibleEnd = this._peekTag(buffer, 'end'); + if (buffer.isError(possibleEnd)) + return possibleEnd; + + var res = decoder.decode(buffer, 'der', options); + if (buffer.isError(res) && possibleEnd) + break; + result.push(res); + } + return result; +}; + +DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { + if (tag === 'bitstr') { + var unused = buffer.readUInt8(); + if (buffer.isError(unused)) + return unused; + return { unused: unused, data: buffer.raw() }; + } else if (tag === 'bmpstr') { + var raw = buffer.raw(); + if (raw.length % 2 === 1) + return buffer.error('Decoding of string type: bmpstr length mismatch'); + + var str = ''; + for (var i = 0; i < raw.length / 2; i++) { + str += String.fromCharCode(raw.readUInt16BE(i * 2)); } - var load = function (module) { - if (module && !exports.$loading[moduleName]) - return onLoad && onLoad(module); - if (!exports.$loading[moduleName]) - exports.$loading[moduleName] = []; - exports.$loading[moduleName].push(onLoad); - if (exports.$loading[moduleName].length > 1) - return; - var afterLoad = function () { - loader(moduleName, function (err, module) { - if (module) - exports.$loaded[moduleName] = module; - exports._emit("load.module", { name: moduleName, module: module }); - var listeners = exports.$loading[moduleName]; - exports.$loading[moduleName] = null; - listeners.forEach(function (onLoad) { - onLoad && onLoad(module); - }); - }); - }; - if (!exports.get("packaged")) - return afterLoad(); - net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); - reportErrorIfPathIsNotConfigured(); - }; - if (exports.dynamicModules[moduleName]) { - exports.dynamicModules[moduleName]().then(function (module) { - if (module.default) { - load(module.default); - } - else { - load(module); - } - }); + return str; + } else if (tag === 'numstr') { + var numstr = buffer.raw().toString('ascii'); + if (!this._isNumstr(numstr)) { + return buffer.error('Decoding of string type: ' + + 'numstr unsupported characters'); } - else { - try { - loadedModule = this.$require(moduleName); - } - catch (e) { } - load(loadedModule || exports.$loaded[moduleName]); + return numstr; + } else if (tag === 'octstr') { + return buffer.raw(); + } else if (tag === 'objDesc') { + return buffer.raw(); + } else if (tag === 'printstr') { + var printstr = buffer.raw().toString('ascii'); + if (!this._isPrintstr(printstr)) { + return buffer.error('Decoding of string type: ' + + 'printstr unsupported characters'); } + return printstr; + } else if (/str$/.test(tag)) { + return buffer.raw().toString(); + } else { + return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + } }; -exports.$require = function (moduleName) { - if (typeof module["require"] == "function") { - var req = "require"; - return module[req](moduleName); + +DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { + var result; + var identifiers = []; + var ident = 0; + while (!buffer.isEmpty()) { + var subident = buffer.readUInt8(); + ident <<= 7; + ident |= subident & 0x7f; + if ((subident & 0x80) === 0) { + identifiers.push(ident); + ident = 0; } + } + if (subident & 0x80) + identifiers.push(ident); + + var first = (identifiers[0] / 40) | 0; + var second = identifiers[0] % 40; + + if (relative) + result = identifiers; + else + result = [first, second].concat(identifiers.slice(1)); + + if (values) { + var tmp = values[result.join(' ')]; + if (tmp === undefined) + tmp = values[result.join('.')]; + if (tmp !== undefined) + result = tmp; + } + + return result; }; -exports.setModuleLoader = function (moduleName, onLoad) { - exports.dynamicModules[moduleName] = onLoad; -}; -var reportErrorIfPathIsNotConfigured = function () { - if (!options.basePath && !options.workerPath - && !options.modePath && !options.themePath - && !Object.keys(options.$moduleUrls).length) { - console.error("Unable to infer path to ace from script src,", "use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes", "or with webpack use ace/webpack-resolver"); - reportErrorIfPathIsNotConfigured = function () { }; - } + +DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { + var str = buffer.raw().toString(); + if (tag === 'gentime') { + var year = str.slice(0, 4) | 0; + var mon = str.slice(4, 6) | 0; + var day = str.slice(6, 8) | 0; + var hour = str.slice(8, 10) | 0; + var min = str.slice(10, 12) | 0; + var sec = str.slice(12, 14) | 0; + } else if (tag === 'utctime') { + var year = str.slice(0, 2) | 0; + var mon = str.slice(2, 4) | 0; + var day = str.slice(4, 6) | 0; + var hour = str.slice(6, 8) | 0; + var min = str.slice(8, 10) | 0; + var sec = str.slice(10, 12) | 0; + if (year < 70) + year = 2000 + year; + else + year = 1900 + year; + } else { + return buffer.error('Decoding ' + tag + ' time is not supported yet'); + } + + return Date.UTC(year, mon - 1, day, hour, min, sec, 0); }; -exports.version = "1.43.3"; -}); +DERNode.prototype._decodeNull = function decodeNull(buffer) { + return null; +}; -ace.define("ace/loader_build",["require","exports","module","ace/lib/fixoldbrowsers","ace/config"], function(require, exports, module) { -"use strict"; +DERNode.prototype._decodeBool = function decodeBool(buffer) { + var res = buffer.readUInt8(); + if (buffer.isError(res)) + return res; + else + return res !== 0; +}; -require("./lib/fixoldbrowsers"); -var config = require("./config"); -config.setLoader(function(moduleName, cb) { - require([moduleName], function(module) { - cb(null, module); - }); -}); +DERNode.prototype._decodeInt = function decodeInt(buffer, values) { + // Bigint, return as it is (assume big endian) + var raw = buffer.raw(); + var res = new bignum(raw); -var global = (function() { - return this || typeof window != "undefined" && window; -})(); + if (values) + res = values[res.toString(10)] || res; -module.exports = function(ace) { - config.init = init; - config.$require = require; - ace.require = require; + return res; +}; - if (true) - ace.define = __webpack_require__.amdD; +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getDecoder('der').tree; }; -init(true);function init(packaged) { - if (!global || !global.document) - return; - - config.set("packaged", packaged || require.packaged || module.packaged || (global.define && __webpack_require__.amdD.packaged)); +// Utility methods - var scriptOptions = {}; - var scriptUrl = ""; - var currentScript = (document.currentScript || document._currentScript ); // native or polyfill - var currentDocument = currentScript && currentScript.ownerDocument || document; - - if (currentScript && currentScript.src) { - scriptUrl = currentScript.src.split(/[?#]/)[0].split("/").slice(0, -1).join("/") || ""; - } - - var scripts = currentDocument.getElementsByTagName("script"); - for (var i=0; i> 6]; + var primitive = (tag & 0x20) === 0; - var attributes = script.attributes; - for (var j=0, l=attributes.length; j < l; j++) { - var attr = attributes[j]; - if (attr.name.indexOf("data-ace-") === 0) { - scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, ""))] = attr.value; - } - } + // Multi-octet tag - load + if ((tag & 0x1f) === 0x1f) { + var oct = tag; + tag = 0; + while ((oct & 0x80) === 0x80) { + oct = buf.readUInt8(fail); + if (buf.isError(oct)) + return oct; - var m = src.match(/^(.*)\/ace([\-.]\w+)?\.js(\?|$)/); - if (m) - scriptUrl = m[1]; + tag <<= 7; + tag |= oct & 0x7f; } + } else { + tag &= 0x1f; + } + var tagStr = der.tag[tag]; - if (scriptUrl) { - scriptOptions.base = scriptOptions.base || scriptUrl; - scriptOptions.packaged = true; - } + return { + cls: cls, + primitive: primitive, + tag: tag, + tagStr: tagStr + }; +} - scriptOptions.basePath = scriptOptions.base; - scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base; - scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base; - scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base; - delete scriptOptions.base; +function derDecodeLen(buf, primitive, fail) { + var len = buf.readUInt8(fail); + if (buf.isError(len)) + return len; - for (var key in scriptOptions) - if (typeof scriptOptions[key] !== "undefined") - config.set(key, scriptOptions[key]); -} + // Indefinite form + if (!primitive && len === 0x80) + return null; -function deHyphenate(str) { - return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); }); + // Definite form + if ((len & 0x80) === 0) { + // Short form + return len; + } + + // Long form + var num = len & 0x7f; + if (num > 4) + return buf.error('length octect is too long'); + + len = 0; + for (var i = 0; i < num; i++) { + len <<= 8; + var j = buf.readUInt8(fail); + if (buf.isError(j)) + return j; + len |= j; + } + + return len; } -}); -ace.define("ace/range",["require","exports","module"], function(require, exports, module){"use strict"; -var Range = /** @class */ (function () { - function Range(startRow, startColumn, endRow, endColumn) { - this.start = { - row: startRow, - column: startColumn - }; - this.end = { - row: endRow, - column: endColumn - }; - } - Range.prototype.isEqual = function (range) { - return this.start.row === range.start.row && - this.end.row === range.end.row && - this.start.column === range.start.column && - this.end.column === range.end.column; - }; - Range.prototype.toString = function () { - return ("Range: [" + this.start.row + "/" + this.start.column + - "] -> [" + this.end.row + "/" + this.end.column + "]"); - }; - Range.prototype.contains = function (row, column) { - return this.compare(row, column) == 0; - }; - Range.prototype.compareRange = function (range) { - var cmp, end = range.end, start = range.start; - cmp = this.compare(end.row, end.column); - if (cmp == 1) { - cmp = this.compare(start.row, start.column); - if (cmp == 1) { - return 2; - } - else if (cmp == 0) { - return 1; - } - else { - return 0; - } - } - else if (cmp == -1) { - return -2; - } - else { - cmp = this.compare(start.row, start.column); - if (cmp == -1) { - return -1; - } - else if (cmp == 1) { - return 42; - } - else { - return 0; - } - } - }; - Range.prototype.comparePoint = function (p) { - return this.compare(p.row, p.column); - }; - Range.prototype.containsRange = function (range) { - return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; - }; - Range.prototype.intersects = function (range) { - var cmp = this.compareRange(range); - return (cmp == -1 || cmp == 0 || cmp == 1); - }; - Range.prototype.isEnd = function (row, column) { - return this.end.row == row && this.end.column == column; - }; - Range.prototype.isStart = function (row, column) { - return this.start.row == row && this.start.column == column; - }; - Range.prototype.setStart = function (row, column) { - if (typeof row == "object") { - this.start.column = row.column; - this.start.row = row.row; - } - else { - this.start.row = row; - this.start.column = column; - } - }; - Range.prototype.setEnd = function (row, column) { - if (typeof row == "object") { - this.end.column = row.column; - this.end.row = row.row; - } - else { - this.end.row = row; - this.end.column = column; - } - }; - Range.prototype.inside = function (row, column) { - if (this.compare(row, column) == 0) { - if (this.isEnd(row, column) || this.isStart(row, column)) { - return false; - } - else { - return true; - } - } - return false; - }; - Range.prototype.insideStart = function (row, column) { - if (this.compare(row, column) == 0) { - if (this.isEnd(row, column)) { - return false; - } - else { - return true; - } - } - return false; - }; - Range.prototype.insideEnd = function (row, column) { - if (this.compare(row, column) == 0) { - if (this.isStart(row, column)) { - return false; - } - else { - return true; - } - } - return false; - }; - Range.prototype.compare = function (row, column) { - if (!this.isMultiLine()) { - if (row === this.start.row) { - return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); - } - } - if (row < this.start.row) - return -1; - if (row > this.end.row) - return 1; - if (this.start.row === row) - return column >= this.start.column ? 0 : -1; - if (this.end.row === row) - return column <= this.end.column ? 0 : 1; - return 0; - }; - Range.prototype.compareStart = function (row, column) { - if (this.start.row == row && this.start.column == column) { - return -1; - } - else { - return this.compare(row, column); - } - }; - Range.prototype.compareEnd = function (row, column) { - if (this.end.row == row && this.end.column == column) { - return 1; - } - else { - return this.compare(row, column); - } - }; - Range.prototype.compareInside = function (row, column) { - if (this.end.row == row && this.end.column == column) { - return 1; - } - else if (this.start.row == row && this.start.column == column) { - return -1; - } - else { - return this.compare(row, column); - } - }; - Range.prototype.clipRows = function (firstRow, lastRow) { - if (this.end.row > lastRow) - var end = { row: lastRow + 1, column: 0 }; - else if (this.end.row < firstRow) - var end = { row: firstRow, column: 0 }; - if (this.start.row > lastRow) - var start = { row: lastRow + 1, column: 0 }; - else if (this.start.row < firstRow) - var start = { row: firstRow, column: 0 }; - return Range.fromPoints(start || this.start, end || this.end); - }; - Range.prototype.extend = function (row, column) { - var cmp = this.compare(row, column); - if (cmp == 0) - return this; - else if (cmp == -1) - var start = { row: row, column: column }; - else - var end = { row: row, column: column }; - return Range.fromPoints(start || this.start, end || this.end); - }; - Range.prototype.isEmpty = function () { - return (this.start.row === this.end.row && this.start.column === this.end.column); - }; - Range.prototype.isMultiLine = function () { - return (this.start.row !== this.end.row); - }; - Range.prototype.clone = function () { - return Range.fromPoints(this.start, this.end); - }; - Range.prototype.collapseRows = function () { - if (this.end.column == 0) - return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0); - else - return new Range(this.start.row, 0, this.end.row, 0); - }; - Range.prototype.toScreenRange = function (session) { - var screenPosStart = session.documentToScreenPosition(this.start); - var screenPosEnd = session.documentToScreenPosition(this.end); - return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column); - }; - Range.prototype.moveBy = function (row, column) { - this.start.row += row; - this.start.column += column; - this.end.row += row; - this.end.column += column; - }; - return Range; -}()); -Range.fromPoints = function (start, end) { - return new Range(start.row, start.column, end.row, end.column); -}; -Range.comparePoints = function (p1, p2) { - return p1.row - p2.row || p1.column - p2.column; + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/decoders/index.js": +/*!*************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/decoders/index.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var decoders = exports; + +decoders.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/decoders/der.js"); +decoders.pem = __webpack_require__(/*! ./pem */ "../../node_modules/asn1.js/lib/asn1/decoders/pem.js"); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/decoders/pem.js": +/*!***********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/decoders/pem.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); + +var DERDecoder = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/decoders/der.js"); + +function PEMDecoder(entity) { + DERDecoder.call(this, entity); + this.enc = 'pem'; }; -exports.Range = Range; +inherits(PEMDecoder, DERDecoder); +module.exports = PEMDecoder; -}); +PEMDecoder.prototype.decode = function decode(data, options) { + var lines = data.toString().split(/[\r\n]+/g); -ace.define("ace/lib/keys",["require","exports","module","ace/lib/oop"], function(require, exports, module){"use strict"; -var oop = require("./oop"); -var Keys = { - MODIFIER_KEYS: { - 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta', - 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu' - }, - KEY_MODS: { - "ctrl": 1, "alt": 2, "option": 2, "shift": 4, - "super": 8, "meta": 8, "command": 8, "cmd": 8, - "control": 1 - }, - FUNCTION_KEYS: { - 8: "Backspace", - 9: "Tab", - 13: "Return", - 19: "Pause", - 27: "Esc", - 32: "Space", - 33: "PageUp", - 34: "PageDown", - 35: "End", - 36: "Home", - 37: "Left", - 38: "Up", - 39: "Right", - 40: "Down", - 44: "Print", - 45: "Insert", - 46: "Delete", - '-13': "NumpadEnter", - 144: "Numlock", - 145: "Scrolllock" - }, - PRINTABLE_KEYS: { - 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.', - 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', - 219: '[', 220: '\\', 221: ']', 222: "'", 111: '/', 106: '*' + var label = options.label.toUpperCase(); + + var re = /^-----(BEGIN|END) ([^-]+)-----$/; + var start = -1; + var end = -1; + for (var i = 0; i < lines.length; i++) { + var match = lines[i].match(re); + if (match === null) + continue; + + if (match[2] !== label) + continue; + + if (start === -1) { + if (match[1] !== 'BEGIN') + break; + start = i; + } else { + if (match[1] !== 'END') + break; + end = i; + break; } + } + if (start === -1 || end === -1) + throw new Error('PEM section not found for: ' + label); + + var base64 = lines.slice(start + 1, end).join(''); + // Remove excessive symbols + base64.replace(/[^a-z0-9\+\/=]+/gi, ''); + + var input = new Buffer(base64, 'base64'); + return DERDecoder.prototype.decode.call(this, input, options); }; -var codeToKeyCode = { - Command: 224, - Backspace: 8, - Tab: 9, - Return: 13, - Enter: 13, - Pause: 19, - Escape: 27, - PageUp: 33, - PageDown: 34, - End: 35, - Home: 36, - Insert: 45, - Delete: 46, - ArrowLeft: 37, - ArrowUp: 38, - ArrowRight: 39, - ArrowDown: 40, - Backquote: 192, - Minus: 189, - Equal: 187, - BracketLeft: 219, - Backslash: 220, - BracketRight: 221, - Semicolon: 186, - Quote: 222, - Comma: 188, - Period: 190, - Slash: 191, - Space: 32, - NumpadAdd: 107, - NumpadDecimal: 110, - NumpadSubtract: 109, - NumpadDivide: 111, - NumpadMultiply: 106 -}; -for (var i = 0; i < 10; i++) { - codeToKeyCode["Digit" + i] = 48 + i; - codeToKeyCode["Numpad" + i] = 96 + i; - Keys.PRINTABLE_KEYS[48 + i] = "" + i; - Keys.FUNCTION_KEYS[96 + i] = "Numpad" + i; -} -for (var i = 65; i < 91; i++) { - var chr = String.fromCharCode(i + 32); - codeToKeyCode["Key" + chr.toUpperCase()] = i; - Keys.PRINTABLE_KEYS[i] = chr; -} -for (var i = 1; i < 13; i++) { - codeToKeyCode["F" + i] = 111 + i; - Keys.FUNCTION_KEYS[111 + i] = "F" + i; -} -var modifiers = { - Shift: 16, - Control: 17, - Alt: 18, - Meta: 224 + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/encoders/der.js": +/*!***********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/encoders/der.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); +var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); + +var asn1 = __webpack_require__(/*! ../../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); +var base = asn1.base; + +// Import DER constants +var der = asn1.constants.der; + +function DEREncoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); }; -for (var mod in modifiers) { - codeToKeyCode[mod] = codeToKeyCode[mod + "Left"] - = codeToKeyCode[mod + "Right"] = modifiers[mod]; -} -exports.$codeToKeyCode = codeToKeyCode; -Keys.PRINTABLE_KEYS[173] = '-'; -for (var j in Keys.FUNCTION_KEYS) { - var name = Keys.FUNCTION_KEYS[j].toLowerCase(); - Keys[name] = parseInt(j, 10); -} -for (var j in Keys.PRINTABLE_KEYS) { - var name = Keys.PRINTABLE_KEYS[j].toLowerCase(); - Keys[name] = parseInt(j, 10); -} -oop.mixin(Keys, Keys.MODIFIER_KEYS); -oop.mixin(Keys, Keys.PRINTABLE_KEYS); -oop.mixin(Keys, Keys.FUNCTION_KEYS); -Keys.enter = Keys["return"]; -Keys.escape = Keys.esc; -Keys.del = Keys["delete"]; -(function () { - var mods = ["cmd", "ctrl", "alt", "shift"]; - for (var i = Math.pow(2, mods.length); i--;) { - Keys.KEY_MODS[i] = mods.filter(function (x) { - return i & Keys.KEY_MODS[x]; - }).join("-") + "-"; - } -})(); -Keys.KEY_MODS[0] = ""; -Keys.KEY_MODS[-1] = "input-"; -oop.mixin(exports, Keys); -exports.default = exports; -exports.keyCodeToString = function (keyCode) { - var keyString = Keys[keyCode]; - if (typeof keyString != "string") - keyString = String.fromCharCode(keyCode); - return keyString.toLowerCase(); +module.exports = DEREncoder; + +DEREncoder.prototype.encode = function encode(data, reporter) { + return this.tree._encode(data, reporter).join(); }; -}); +// Tree methods -ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module){"use strict"; var keys = require("./keys"); -var useragent = require("./useragent"); -var pressedKeys = null; -var ts = 0; -var activeListenerOptions; -function detectListenerOptionsSupport() { - activeListenerOptions = false; - try { - document.createComment("").addEventListener("test", function () { }, { - get passive() { - activeListenerOptions = { passive: false }; - return true; - } - }); - } - catch (e) { } -} -function getListenerOptions() { - if (activeListenerOptions == undefined) - detectListenerOptionsSupport(); - return activeListenerOptions; -} -function EventListener(elem, type, callback) { - this.elem = elem; - this.type = type; - this.callback = callback; +function DERNode(parent) { + base.Node.call(this, 'der', parent); } -EventListener.prototype.destroy = function () { - removeListener(this.elem, this.type, this.callback); - this.elem = this.type = this.callback = undefined; +inherits(DERNode, base.Node); + +DERNode.prototype._encodeComposite = function encodeComposite(tag, + primitive, + cls, + content) { + var encodedTag = encodeTag(tag, primitive, cls, this.reporter); + + // Short form + if (content.length < 0x80) { + var header = new Buffer(2); + header[0] = encodedTag; + header[1] = content.length; + return this._createEncoderBuffer([ header, content ]); + } + + // Long form + // Count octets required to store length + var lenOctets = 1; + for (var i = content.length; i >= 0x100; i >>= 8) + lenOctets++; + + var header = new Buffer(1 + 1 + lenOctets); + header[0] = encodedTag; + header[1] = 0x80 | lenOctets; + + for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) + header[i] = j & 0xff; + + return this._createEncoderBuffer([ header, content ]); }; -var addListener = exports.addListener = function (elem, type, callback, destroyer) { - elem.addEventListener(type, callback, getListenerOptions()); - if (destroyer) - destroyer.$toDestroy.push(new EventListener(elem, type, callback)); -}; -var removeListener = exports.removeListener = function (elem, type, callback) { - elem.removeEventListener(type, callback, getListenerOptions()); -}; -exports.stopEvent = function (e) { - exports.stopPropagation(e); - exports.preventDefault(e); - return false; + +DERNode.prototype._encodeStr = function encodeStr(str, tag) { + if (tag === 'bitstr') { + return this._createEncoderBuffer([ str.unused | 0, str.data ]); + } else if (tag === 'bmpstr') { + var buf = new Buffer(str.length * 2); + for (var i = 0; i < str.length; i++) { + buf.writeUInt16BE(str.charCodeAt(i), i * 2); + } + return this._createEncoderBuffer(buf); + } else if (tag === 'numstr') { + if (!this._isNumstr(str)) { + return this.reporter.error('Encoding of string type: numstr supports ' + + 'only digits and space'); + } + return this._createEncoderBuffer(str); + } else if (tag === 'printstr') { + if (!this._isPrintstr(str)) { + return this.reporter.error('Encoding of string type: printstr supports ' + + 'only latin upper and lower case letters, ' + + 'digits, space, apostrophe, left and rigth ' + + 'parenthesis, plus sign, comma, hyphen, ' + + 'dot, slash, colon, equal sign, ' + + 'question mark'); + } + return this._createEncoderBuffer(str); + } else if (/str$/.test(tag)) { + return this._createEncoderBuffer(str); + } else if (tag === 'objDesc') { + return this._createEncoderBuffer(str); + } else { + return this.reporter.error('Encoding of string type: ' + tag + + ' unsupported'); + } }; -exports.stopPropagation = function (e) { - if (e.stopPropagation) - e.stopPropagation(); + +DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { + if (typeof id === 'string') { + if (!values) + return this.reporter.error('string objid given, but no values map found'); + if (!values.hasOwnProperty(id)) + return this.reporter.error('objid not found in values map'); + id = values[id].split(/[\s\.]+/g); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } else if (Array.isArray(id)) { + id = id.slice(); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } + + if (!Array.isArray(id)) { + return this.reporter.error('objid() should be either array or string, ' + + 'got: ' + JSON.stringify(id)); + } + + if (!relative) { + if (id[1] >= 40) + return this.reporter.error('Second objid identifier OOB'); + id.splice(0, 2, id[0] * 40 + id[1]); + } + + // Count number of octets + var size = 0; + for (var i = 0; i < id.length; i++) { + var ident = id[i]; + for (size++; ident >= 0x80; ident >>= 7) + size++; + } + + var objid = new Buffer(size); + var offset = objid.length - 1; + for (var i = id.length - 1; i >= 0; i--) { + var ident = id[i]; + objid[offset--] = ident & 0x7f; + while ((ident >>= 7) > 0) + objid[offset--] = 0x80 | (ident & 0x7f); + } + + return this._createEncoderBuffer(objid); }; -exports.preventDefault = function (e) { - if (e.preventDefault) - e.preventDefault(); + +function two(num) { + if (num < 10) + return '0' + num; + else + return num; +} + +DERNode.prototype._encodeTime = function encodeTime(time, tag) { + var str; + var date = new Date(time); + + if (tag === 'gentime') { + str = [ + two(date.getFullYear()), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else if (tag === 'utctime') { + str = [ + two(date.getFullYear() % 100), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else { + this.reporter.error('Encoding ' + tag + ' time is not supported yet'); + } + + return this._encodeStr(str, 'octstr'); }; -exports.getButton = function (e) { - if (e.type == "dblclick") - return 0; - if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey))) - return 2; - return e.button; + +DERNode.prototype._encodeNull = function encodeNull() { + return this._createEncoderBuffer(''); }; -exports.capture = function (el, eventHandler, releaseCaptureHandler) { - var ownerDocument = el && el.ownerDocument || document; - function onMouseUp(e) { - eventHandler && eventHandler(e); - releaseCaptureHandler && releaseCaptureHandler(e); - removeListener(ownerDocument, "mousemove", eventHandler); - removeListener(ownerDocument, "mouseup", onMouseUp); - removeListener(ownerDocument, "dragstart", onMouseUp); + +DERNode.prototype._encodeInt = function encodeInt(num, values) { + if (typeof num === 'string') { + if (!values) + return this.reporter.error('String int or enum given, but no values map'); + if (!values.hasOwnProperty(num)) { + return this.reporter.error('Values map doesn\'t contain: ' + + JSON.stringify(num)); } - addListener(ownerDocument, "mousemove", eventHandler); - addListener(ownerDocument, "mouseup", onMouseUp); - addListener(ownerDocument, "dragstart", onMouseUp); - return onMouseUp; -}; -exports.addMouseWheelListener = function (el, callback, destroyer) { - addListener(el, "wheel", function (e) { - var factor = 0.15; - var deltaX = e.deltaX || 0; - var deltaY = e.deltaY || 0; - switch (e.deltaMode) { - case e.DOM_DELTA_PIXEL: - e.wheelX = deltaX * factor; - e.wheelY = deltaY * factor; - break; - case e.DOM_DELTA_LINE: - var linePixels = 15; - e.wheelX = deltaX * linePixels; - e.wheelY = deltaY * linePixels; - break; - case e.DOM_DELTA_PAGE: - var pagePixels = 150; - e.wheelX = deltaX * pagePixels; - e.wheelY = deltaY * pagePixels; - break; - } - callback(e); - }, destroyer); -}; -exports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) { - var clicks = 0; - var startX, startY, timer; - var eventNames = { - 2: "dblclick", - 3: "tripleclick", - 4: "quadclick" - }; - function onMousedown(e) { - if (exports.getButton(e) !== 0) { - clicks = 0; - } - else if (e.detail > 1) { - clicks++; - if (clicks > 4) - clicks = 1; - } - else { - clicks = 1; - } - if (useragent.isIE) { - var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; - if (!timer || isNewClick) - clicks = 1; - if (timer) - clearTimeout(timer); - timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600); - if (clicks == 1) { - startX = e.clientX; - startY = e.clientY; - } - } - e._clicks = clicks; - eventHandler[callbackName]("mousedown", e); - if (clicks > 4) - clicks = 0; - else if (clicks > 1) - return eventHandler[callbackName](eventNames[clicks], e); + num = values[num]; + } + + // Bignum, assume big endian + if (typeof num !== 'number' && !Buffer.isBuffer(num)) { + var numArray = num.toArray(); + if (!num.sign && numArray[0] & 0x80) { + numArray.unshift(0); } - if (!Array.isArray(elements)) - elements = [elements]; - elements.forEach(function (el) { - addListener(el, "mousedown", onMousedown, destroyer); - }); + num = new Buffer(numArray); + } + + if (Buffer.isBuffer(num)) { + var size = num.length; + if (num.length === 0) + size++; + + var out = new Buffer(size); + num.copy(out); + if (num.length === 0) + out[0] = 0 + return this._createEncoderBuffer(out); + } + + if (num < 0x80) + return this._createEncoderBuffer(num); + + if (num < 0x100) + return this._createEncoderBuffer([0, num]); + + var size = 1; + for (var i = num; i >= 0x100; i >>= 8) + size++; + + var out = new Array(size); + for (var i = out.length - 1; i >= 0; i--) { + out[i] = num & 0xff; + num >>= 8; + } + if(out[0] & 0x80) { + out.unshift(0); + } + + return this._createEncoderBuffer(new Buffer(out)); }; -function getModifierHash(e) { - return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); -} -exports.getModifierString = function (e) { - return keys.KEY_MODS[getModifierHash(e)]; + +DERNode.prototype._encodeBool = function encodeBool(value) { + return this._createEncoderBuffer(value ? 0xff : 0); }; -function normalizeCommandKeys(callback, e, keyCode) { - var hashId = getModifierHash(e); - if (!keyCode && e.code) { - keyCode = keys.$codeToKeyCode[e.code] || keyCode; - } - if (!useragent.isMac && pressedKeys) { - if (e.getModifierState && (e.getModifierState("OS") || e.getModifierState("Win"))) - hashId |= 8; - if (pressedKeys.altGr) { - if ((3 & hashId) != 3) - pressedKeys.altGr = 0; - else - return; - } - if (keyCode === 18 || keyCode === 17) { - var location = e.location; - if (keyCode === 17 && location === 1) { - if (pressedKeys[keyCode] == 1) - ts = e.timeStamp; - } - else if (keyCode === 18 && hashId === 3 && location === 2) { - var dt = e.timeStamp - ts; - if (dt < 50) - pressedKeys.altGr = true; - } - } - } - if (keyCode in keys.MODIFIER_KEYS) { - keyCode = -1; - } - if (!hashId && keyCode === 13) { - if (e.location === 3) { - callback(e, hashId, -keyCode); - if (e.defaultPrevented) - return; - } - } - if (useragent.isChromeOS && hashId & 8) { - callback(e, hashId, keyCode); - if (e.defaultPrevented) - return; - else - hashId &= ~8; - } - if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { - return false; - } - return callback(e, hashId, keyCode); -} -exports.addCommandKeyListener = function (el, callback, destroyer) { - var lastDefaultPrevented = null; - addListener(el, "keydown", function (e) { - pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1; - var result = normalizeCommandKeys(callback, e, e.keyCode); - lastDefaultPrevented = e.defaultPrevented; - return result; - }, destroyer); - addListener(el, "keypress", function (e) { - if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { - exports.stopEvent(e); - lastDefaultPrevented = null; - } - }, destroyer); - addListener(el, "keyup", function (e) { - pressedKeys[e.keyCode] = null; - }, destroyer); - if (!pressedKeys) { - resetPressedKeys(); - addListener(window, "focus", resetPressedKeys); - } + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getEncoder('der').tree; }; -function resetPressedKeys() { - pressedKeys = Object.create(null); -} -if (typeof window == "object" && window.postMessage && !useragent.isOldIE) { - var postMessageId = 1; - exports.nextTick = function (callback, win) { - win = win || window; - var messageName = "zero-timeout-message-" + (postMessageId++); - var listener = function (e) { - if (e.data == messageName) { - exports.stopPropagation(e); - removeListener(win, "message", listener); - callback(); - } - }; - addListener(win, "message", listener); - win.postMessage(messageName, "*"); - }; -} -exports.$idleBlocked = false; -exports.onIdle = function (cb, timeout) { - return setTimeout(function handler() { - if (!exports.$idleBlocked) { - cb(); - } - else { - setTimeout(handler, 100); - } - }, timeout); + +DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { + var state = this._baseState; + var i; + if (state['default'] === null) + return false; + + var data = dataBuffer.join(); + if (state.defaultBuffer === undefined) + state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); + + if (data.length !== state.defaultBuffer.length) + return false; + + for (i=0; i < data.length; i++) + if (data[i] !== state.defaultBuffer[i]) + return false; + + return true; }; -exports.$idleBlockId = null; -exports.blockIdle = function (delay) { - if (exports.$idleBlockId) - clearTimeout(exports.$idleBlockId); - exports.$idleBlocked = true; - exports.$idleBlockId = setTimeout(function () { - exports.$idleBlocked = false; - }, delay || 100); + +// Utility methods + +function encodeTag(tag, primitive, cls, reporter) { + var res; + + if (tag === 'seqof') + tag = 'seq'; + else if (tag === 'setof') + tag = 'set'; + + if (der.tagByName.hasOwnProperty(tag)) + res = der.tagByName[tag]; + else if (typeof tag === 'number' && (tag | 0) === tag) + res = tag; + else + return reporter.error('Unknown tag: ' + tag); + + if (res >= 0x1f) + return reporter.error('Multi-octet tag encoding unsupported'); + + if (!primitive) + res |= 0x20; + + res |= (der.tagClassByName[cls || 'universal'] << 6); + + return res; +} + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/encoders/index.js": +/*!*************************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/encoders/index.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var encoders = exports; + +encoders.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/encoders/der.js"); +encoders.pem = __webpack_require__(/*! ./pem */ "../../node_modules/asn1.js/lib/asn1/encoders/pem.js"); + + +/***/ }), + +/***/ "../../node_modules/asn1.js/lib/asn1/encoders/pem.js": +/*!***********************************************************!*\ + !*** ../../node_modules/asn1.js/lib/asn1/encoders/pem.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); + +var DEREncoder = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/encoders/der.js"); + +function PEMEncoder(entity) { + DEREncoder.call(this, entity); + this.enc = 'pem'; }; -exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame - || window["mozRequestAnimationFrame"] - || window["webkitRequestAnimationFrame"] - || window["msRequestAnimationFrame"] - || window["oRequestAnimationFrame"]); -if (exports.nextFrame) - exports.nextFrame = exports.nextFrame.bind(window); -else - exports.nextFrame = function (callback) { - setTimeout(callback, 17); - }; +inherits(PEMEncoder, DEREncoder); +module.exports = PEMEncoder; -}); +PEMEncoder.prototype.encode = function encode(data, options) { + var buf = DEREncoder.prototype.encode.call(this, data); -ace.define("ace/clipboard",["require","exports","module"], function(require, exports, module){"use strict"; -var $cancelT; -module.exports = { - lineMode: false, - pasteCancelled: function () { - if ($cancelT && $cancelT > Date.now() - 50) - return true; - return $cancelT = false; - }, - cancel: function () { - $cancelT = Date.now(); - } + var p = buf.toString('base64'); + var out = [ '-----BEGIN ' + options.label + '-----' ]; + for (var i = 0; i < p.length; i += 64) + out.push(p.slice(i, i + 64)); + out.push('-----END ' + options.label + '-----'); + return out.join('\n'); }; -}); -ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/config","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/clipboard","ace/lib/keys"], function(require, exports, module){"use strict"; -var event = require("../lib/event"); -var nls = require("../config").nls; -var useragent = require("../lib/useragent"); -var dom = require("../lib/dom"); -var lang = require("../lib/lang"); -var clipboard = require("../clipboard"); -var BROKEN_SETDATA = useragent.isChrome < 18; -var USE_IE_MIME_TYPE = useragent.isIE; -var HAS_FOCUS_ARGS = useragent.isChrome > 63; -var MAX_LINE_LENGTH = 400; -var KEYS = require("../lib/keys"); -var MODS = KEYS.KEY_MODS; -var isIOS = useragent.isIOS; -var valueResetRegex = isIOS ? /\s/ : /\n/; -var isMobile = useragent.isMobile; -var TextInput = /** @class */ (function () { - function TextInput(parentNode, host) { - var _this = this; - this.host = host; - this.text = dom.createElement("textarea"); - this.text.className = "ace_text-input"; - this.text.setAttribute("wrap", "off"); - this.text.setAttribute("autocomplete", "off"); - this.text.setAttribute("autocorrect", "off"); - this.text.setAttribute("autocapitalize", "off"); - this.text.setAttribute("spellcheck", "false"); - this.text.style.opacity = "0"; - parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false; - this.pasted = false; - this.inComposition = false; - this.sendingText = false; - this.tempStyle = ''; - if (!isMobile) - this.text.style.fontSize = "1px"; - this.commandMode = false; - this.ignoreFocusEvents = false; - this.lastValue = ""; - this.lastSelectionStart = 0; - this.lastSelectionEnd = 0; - this.lastRestoreEnd = 0; - this.rowStart = Number.MAX_SAFE_INTEGER; - this.rowEnd = Number.MIN_SAFE_INTEGER; - this.numberOfExtraLines = 0; - try { - this.$isFocused = document.activeElement === this.text; +/***/ }), + +/***/ "../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js": +/*!***************************************************************!*\ + !*** ../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js ***! + \***************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +/* module decorator */ module = __webpack_require__.nmd(module); +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { + Buffer = window.Buffer; + } else { + Buffer = (__webpack_require__(/*! buffer */ "?98fd").Buffer); + } + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + this.negative = 1; + } + + if (start < number.length) { + if (base === 16) { + this._parseHex(number, start, endian); + } else { + this._parseBase(number, base, start); + if (endian === 'le') { + this._initArray(this.toArray(), base, endian); } - catch (e) { + } + } + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - this.cancelComposition = this.cancelComposition.bind(this); - this.setAriaOptions({ role: "textbox" }); - event.addListener(this.text, "blur", function (e) { - if (_this.ignoreFocusEvents) - return; - host.onBlur(e); - _this.$isFocused = false; - }, host); - event.addListener(this.text, "focus", function (e) { - if (_this.ignoreFocusEvents) - return; - _this.$isFocused = true; - if (useragent.isEdge) { - try { - if (!document.hasFocus()) - return; - } - catch (e) { - } - } - host.onFocus(e); - if (useragent.isEdge) - setTimeout(_this.resetSelection.bind(_this)); - else - _this.resetSelection(); - }, host); this.$focusScroll = false; - host.on("beforeEndOperation", function () { - var curOp = host.curOp; - var commandName = curOp && curOp.command && curOp.command.name; - if (commandName == "insertstring") - return; - var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged); - if (_this.inComposition && isUserAction) { - _this.lastValue = _this.text.value = ""; - _this.onCompositionEnd(); - } - _this.resetSelection(); - }); - host.on("changeSelection", this.setAriaLabel.bind(this)); - this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection; - if (this.$isFocused) - host.onFocus(); - this.inputHandler = null; - this.afterContextMenu = false; - event.addCommandKeyListener(this.text, function (e, hashId, keyCode) { - if (_this.inComposition) - return; - return host.onCommandKey(e, hashId, keyCode); - }, host); - event.addListener(this.text, "select", this.onSelect.bind(this), host); - event.addListener(this.text, "input", this.onInput.bind(this), host); - event.addListener(this.text, "cut", this.onCut.bind(this), host); - event.addListener(this.text, "copy", this.onCopy.bind(this), host); - event.addListener(this.text, "paste", this.onPaste.bind(this), host); - if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) { - event.addListener(parentNode, "keydown", function (e) { - if ((useragent.isMac && !e.metaKey) || !e.ctrlKey) - return; - switch (e.keyCode) { - case 67: - _this.onCopy(e); - break; - case 86: - _this.onPaste(e); - break; - case 88: - _this.onCut(e); - break; - } - }, host); + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this - event.addListener(this.text, "compositionstart", this.onCompositionStart.bind(this), host); - event.addListener(this.text, "compositionupdate", this.onCompositionUpdate.bind(this), host); - event.addListener(this.text, "keyup", this.onKeyup.bind(this), host); - event.addListener(this.text, "keydown", this.syncComposition.bind(this), host); - event.addListener(this.text, "compositionend", this.onCompositionEnd.bind(this), host); - this.closeTimeout; - event.addListener(this.text, "mouseup", this.$onContextMenu.bind(this), host); - event.addListener(this.text, "mousedown", function (e) { - e.preventDefault(); - _this.onContextMenuClose(); - }, host); - event.addListener(host.renderer.scroller, "contextmenu", this.$onContextMenu.bind(this), host); - event.addListener(this.text, "contextmenu", this.$onContextMenu.bind(this), host); - if (isIOS) - this.addIosSelectionHandler(parentNode, host, this.text); + } } - TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) { - var _this = this; - var typingResetTimeout = null; - var typing = false; - text.addEventListener("keydown", function (e) { - if (typingResetTimeout) - clearTimeout(typingResetTimeout); - typing = true; - }, true); - text.addEventListener("keyup", function (e) { - typingResetTimeout = setTimeout(function () { - typing = false; - }, 100); - }, true); - var detectArrowKeys = function (e) { - if (document.activeElement !== text) - return; - if (typing || _this.inComposition || host.$mouseHandler.isMousePressed) - return; - if (_this.copied) { - return; - } - var selectionStart = text.selectionStart; - var selectionEnd = text.selectionEnd; - var key = null; - var modifier = 0; - if (selectionStart == 0) { - key = KEYS.up; - } - else if (selectionStart == 1) { - key = KEYS.home; - } - else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == "\n") { - key = KEYS.end; - } - else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == " ") { - key = KEYS.left; - modifier = MODS.option; - } - else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart - && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) { - key = KEYS.left; - } - else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split("\n").length > 2) { - key = KEYS.down; - } - else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == " ") { - key = KEYS.right; - modifier = MODS.option; - } - else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd - && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) { - key = KEYS.right; - } - if (selectionStart !== selectionEnd) - modifier |= MODS.shift; - if (key) { - var result = host.onCommandKey({}, modifier, key); - if (!result && host.commands) { - key = KEYS.keyCodeToString(key); - var command = host.commands.findKeyCommand(modifier, key); - if (command) - host.execCommand(command); - } - _this.lastSelectionStart = selectionStart; - _this.lastSelectionEnd = selectionEnd; - _this.resetSelection(""); - } - }; - document.addEventListener("selectionchange", detectArrowKeys); - host.on("destroy", function () { - document.removeEventListener("selectionchange", detectArrowKeys); - }); - }; - TextInput.prototype.onContextMenuClose = function () { - var _this = this; - clearTimeout(this.closeTimeout); - this.closeTimeout = setTimeout(function () { - if (_this.tempStyle) { - _this.text.style.cssText = _this.tempStyle; - _this.tempStyle = ''; - } - _this.host.renderer.$isMousePressed = false; - if (_this.host.renderer.$keepTextAreaAtCursor) - _this.host.renderer.$moveTextAreaToCursor(); - }, 0); - }; - TextInput.prototype.$onContextMenu = function (e) { - this.host.textInput.onContextMenu(e); - this.onContextMenuClose(); - }; - TextInput.prototype.onKeyup = function (e) { - if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) { - if (!this.inComposition) - this.lastValue = this.text.value; - this.lastSelectionStart = this.lastSelectionEnd = -1; - this.resetSelection(); - } - this.syncComposition(); - }; - TextInput.prototype.cancelComposition = function () { - this.ignoreFocusEvents = true; - this.text.blur(); - this.text.focus(); - this.ignoreFocusEvents = false; - }; - TextInput.prototype.onCompositionStart = function (e) { - if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly) - return; - this.inComposition = {}; - if (this.commandMode) - return; - if (e.data) - this.inComposition.useTextareaForIME = false; - setTimeout(this.onCompositionUpdate.bind(this), 0); - this.host._signal("compositionStart"); - this.host.on("mousedown", this.cancelComposition); //TODO: - var range = this.host.getSelectionRange(); - range.end.row = range.start.row; - range.end.column = range.start.column; - this.inComposition.markerRange = range; - this.inComposition.selectionStart = this.lastSelectionStart; - this.host.onCompositionStart(this.inComposition); - if (this.inComposition.useTextareaForIME) { - this.lastValue = this.text.value = ""; - this.lastSelectionStart = 0; - this.lastSelectionEnd = 0; + return this.strip(); + }; + + function parseHex4Bits (string, index) { + var c = string.charCodeAt(index); + // 'A' - 'F' + if (c >= 65 && c <= 70) { + return c - 55; + // 'a' - 'f' + } else if (c >= 97 && c <= 102) { + return c - 87; + // '0' - '9' + } else { + return (c - 48) & 0xf; + } + } + + function parseHexByte (string, lowerBound, index) { + var r = parseHex4Bits(string, index); + if (index - 1 >= lowerBound) { + r |= parseHex4Bits(string, index - 1) << 4; + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start, endian) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + // 24-bits chunks + var off = 0; + var j = 0; + + var w; + if (endian === 'be') { + for (i = number.length - 1; i >= start; i -= 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - else { - if (this.text.msGetInputContext) - this.inComposition.context = this.text.msGetInputContext(); - if (this.text.getInputContext) - this.inComposition.context = this.text.getInputContext(); + } + } else { + var parseLength = number.length - start; + for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { + w = parseHexByte(number, start, i) << off; + this.words[j] |= w & 0x3ffffff; + if (off >= 18) { + off -= 18; + j += 1; + this.words[j] |= w >>> 26; + } else { + off += 8; } - }; - TextInput.prototype.onCompositionUpdate = function () { - if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly) - return; - if (this.commandMode) - return this.cancelComposition(); - if (this.inComposition.useTextareaForIME) { - this.host.onCompositionUpdate(this.text.value); - } - else { - var data = this.text.value; - this.sendText(data); - if (this.inComposition.markerRange) { - if (this.inComposition.context) { - this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset; - } - this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column - + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd; - } - } - }; - TextInput.prototype.onCompositionEnd = function (e) { - if (!this.host.onCompositionEnd || this.host.$readOnly) - return; - this.inComposition = false; - this.host.onCompositionEnd(); - this.host.off("mousedown", this.cancelComposition); - if (e) - this.onInput(); - }; - TextInput.prototype.onCut = function (e) { - this.doCopy(e, true); - }; - TextInput.prototype.onCopy = function (e) { - this.doCopy(e, false); - }; - TextInput.prototype.onPaste = function (e) { - var data = this.handleClipboardData(e); - if (clipboard.pasteCancelled()) - return; - if (typeof data == "string") { - if (data) - this.host.onPaste(data, e); - if (useragent.isIE) - setTimeout(this.resetSelection); - event.preventDefault(e); - } - else { - this.text.value = ""; - this.pasted = true; - } - }; - TextInput.prototype.doCopy = function (e, isCut) { - var _this = this; - var data = this.host.getCopyText(); - if (!data) - return event.preventDefault(e); - if (this.handleClipboardData(e, data)) { - if (isIOS) { - this.resetSelection(data); - this.copied = data; - setTimeout(function () { - _this.copied = false; - }, 10); - } - isCut ? this.host.onCut() : this.host.onCopy(); - event.preventDefault(e); - } - else { - this.copied = true; - this.text.value = data; - this.text.select(); - setTimeout(function () { - _this.copied = false; - _this.resetSelection(); - isCut ? _this.host.onCut() : _this.host.onCopy(); - }); + } + } + + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + this.strip(); + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; } - }; - TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) { - var clipboardData = e.clipboardData || window["clipboardData"]; - if (!clipboardData || BROKEN_SETDATA) - return; - var mime = USE_IE_MIME_TYPE || forceIEMime ? "Text" : "text/plain"; - try { - if (data) { - return clipboardData.setData(mime, data) !== false; - } - else { - return clipboardData.getData(mime); - } + off += 2; + if (off >= 26) { + off -= 26; + i--; } - catch (e) { - if (!forceIEMime) - return this.handleClipboardData(e, data, true); + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); }; - TextInput.prototype.onInput = function (e) { - if (this.inComposition) - return this.onCompositionUpdate(); - if (e && e.inputType) { - if (e.inputType == "historyUndo") - return this.host.execCommand("undo"); - if (e.inputType == "historyRedo") - return this.host.execCommand("redo"); - } - var data = this.text.value; - var inserted = this.sendText(data, true); - if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart - < 1 && this.lastSelectionStart == this.lastSelectionEnd) { - this.resetSelection(); - } + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; }; - TextInput.prototype.sendText = function (value, fromInput) { - if (this.afterContextMenu) - this.afterContextMenu = false; - if (this.pasted) { - this.resetSelection(); - if (value) - this.host.onPaste(value); - this.pasted = false; - return ""; - } - else { - var selectionStart = this.text.selectionStart; - var selectionEnd = this.text.selectionEnd; - var extendLeft = this.lastSelectionStart; - var extendRight = this.lastValue.length - this.lastSelectionEnd; - var inserted = value; - var restoreStart = value.length - selectionStart; - var restoreEnd = value.length - selectionEnd; - var i = 0; - while (extendLeft > 0 && this.lastValue[i] == value[i]) { - i++; - extendLeft--; - } - inserted = inserted.slice(i); - i = 1; - while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1 - && this.lastValue[this.lastValue.length - i] == value[value.length - i]) { - i++; - extendRight--; - } - restoreStart -= i - 1; - restoreEnd -= i - 1; - var endIndex = inserted.length - i + 1; - if (endIndex < 0) { - extendLeft = -endIndex; - endIndex = 0; - } - inserted = inserted.slice(0, endIndex); - if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd) - return ""; - this.sendingText = true; - var shouldReset = false; - if (useragent.isAndroid && inserted == ". ") { - inserted = " "; - shouldReset = true; - } - if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) { - this.host.onTextInput(inserted); - } - else { - this.host.onTextInput(inserted, { - extendLeft: extendLeft, - extendRight: extendRight, - restoreStart: restoreStart, - restoreEnd: restoreEnd - }); - } - this.sendingText = false; - this.lastValue = value; - this.lastSelectionStart = selectionStart; - this.lastSelectionEnd = selectionEnd; - this.lastRestoreEnd = restoreEnd; - return shouldReset ? "\n" : inserted; - } - }; - TextInput.prototype.onSelect = function (e) { - var _this = this; - if (this.inComposition) - return; - var isAllSelected = function (text) { - return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value - === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd; - }; - if (this.copied) { - this.copied = false; - } - else if (isAllSelected(this.text)) { - this.host.selectAll(); - this.resetSelection(); - } - else if (isMobile && this.text.selectionStart != this.lastSelectionStart) { - this.resetSelection(); - } - }; - TextInput.prototype.$resetSelectionIOS = function (value) { - if (!this.$isFocused || (this.copied && !value) || this.sendingText) - return; - if (!value) - value = ""; - var newValue = "\n ab" + value + "cde fg\n"; - if (newValue != this.text.value) - this.text.value = this.lastValue = newValue; - var selectionStart = 4; - var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1)); - if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) { - this.text.setSelectionRange(selectionStart, selectionEnd); - } - this.lastSelectionStart = selectionStart; - this.lastSelectionEnd = selectionEnd; - }; - TextInput.prototype.$resetSelection = function () { - var _this = this; - if (this.inComposition || this.sendingText) - return; - if (!this.$isFocused && !this.afterContextMenu) - return; - this.inComposition = true; - var selectionStart = 0; - var selectionEnd = 0; - var line = ""; - var positionToSelection = function (row, column) { - var selection = column; - for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) { - selection += _this.host.session.getLine(row - i).length + 1; - } - return selection; - }; - if (this.host.session) { - var selection = this.host.selection; - var range = selection.getRange(); - var row = selection.cursor.row; - if (row === this.rowEnd + 1) { - this.rowStart = this.rowEnd + 1; - this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines; - } - else if (row === this.rowStart - 1) { - this.rowEnd = this.rowStart - 1; - this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines; - } - else if (row < this.rowStart - 1 || row > this.rowEnd + 1) { - this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0; - this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2 - * this.numberOfExtraLines; - } - var lines = []; - for (var i = this.rowStart; i <= this.rowEnd; i++) { - lines.push(this.host.session.getLine(i)); - } - line = lines.join('\n'); - selectionStart = positionToSelection(range.start.row, range.start.column); - selectionEnd = positionToSelection(range.end.row, range.end.column); - if (range.start.row < this.rowStart) { - var prevLine = this.host.session.getLine(this.rowStart - 1); - selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart; - selectionEnd += prevLine.length + 1; - line = prevLine + "\n" + line; - } - else if (range.end.row > this.rowEnd) { - var nextLine = this.host.session.getLine(this.rowEnd + 1); - selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column; - selectionEnd += line.length + 1; - line = line + "\n" + nextLine; - } - else if (isMobile && row > 0) { - line = "\n" + line; - selectionEnd += 1; - selectionStart += 1; - } - if (line.length > MAX_LINE_LENGTH) { - if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) { - line = line.slice(0, MAX_LINE_LENGTH); - } - else { - line = "\n"; - if (selectionStart == selectionEnd) { - selectionStart = selectionEnd = 0; - } - else { - selectionStart = 0; - selectionEnd = 1; - } - } - } - var newValue = line + "\n\n"; - if (newValue != this.lastValue) { - this.text.value = this.lastValue = newValue; - this.lastSelectionStart = this.lastSelectionEnd = newValue.length; - } - } - if (this.afterContextMenu) { - this.lastSelectionStart = this.text.selectionStart; - this.lastSelectionEnd = this.text.selectionEnd; - } - if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd - != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization - ) { - try { - this.text.setSelectionRange(selectionStart, selectionEnd); - this.lastSelectionStart = selectionStart; - this.lastSelectionEnd = selectionEnd; - } - catch (e) { - } - } - this.inComposition = false; - }; - TextInput.prototype.setHost = function (newHost) { - this.host = newHost; - }; - TextInput.prototype.setNumberOfExtraLines = function (number) { - this.rowStart = Number.MAX_SAFE_INTEGER; - this.rowEnd = Number.MIN_SAFE_INTEGER; - if (number < 0) { - this.numberOfExtraLines = 0; - return; - } - this.numberOfExtraLines = number; - }; - TextInput.prototype.setAriaLabel = function () { - var ariaLabel = ""; - if (this.host.$textInputAriaLabel) { - ariaLabel += "".concat(this.host.$textInputAriaLabel, ", "); - } - if (this.host.session) { - var row = this.host.session.selection.cursor.row; - ariaLabel += nls("text-input.aria-label", "Cursor at row $0", [row + 1]); - } - this.text.setAttribute("aria-label", ariaLabel); - }; - TextInput.prototype.setAriaOptions = function (options) { - if (options.activeDescendant) { - this.text.setAttribute("aria-haspopup", "true"); - this.text.setAttribute("aria-autocomplete", options.inline ? "both" : "list"); - this.text.setAttribute("aria-activedescendant", options.activeDescendant); - } - else { - this.text.setAttribute("aria-haspopup", "false"); - this.text.setAttribute("aria-autocomplete", "both"); - this.text.removeAttribute("aria-activedescendant"); - } - if (options.role) { - this.text.setAttribute("role", options.role); - } - if (options.setLabel) { - this.text.setAttribute("aria-roledescription", nls("text-input.aria-roledescription", "editor")); - this.setAriaLabel(); - } - }; - TextInput.prototype.focus = function () { - var _this = this; - this.setAriaOptions({ - setLabel: this.host.renderer.enableKeyboardAccessibility - }); - if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == "browser") - return this.text.focus({ preventScroll: true }); - var top = this.text.style.top; - this.text.style.position = "fixed"; - this.text.style.top = "0px"; - try { - var isTransformed = this.text.getBoundingClientRect().top != 0; - } - catch (e) { - return; - } - var ancestors = []; - if (isTransformed) { - var t = this.text.parentElement; - while (t && t.nodeType == 1) { - ancestors.push(t); - t.setAttribute("ace_nocontext", "true"); - if (!t.parentElement && t.getRootNode) - t = t.getRootNode()["host"]; - else - t = t.parentElement; - } - } - this.text.focus({ preventScroll: true }); - if (isTransformed) { - ancestors.forEach(function (p) { - p.removeAttribute("ace_nocontext"); - }); - } - setTimeout(function () { - _this.text.style.position = ""; - if (_this.text.style.top == "0px") - _this.text.style.top = top; - }, 0); - }; - TextInput.prototype.blur = function () { - this.text.blur(); - }; - TextInput.prototype.isFocused = function () { - return this.$isFocused; - }; - TextInput.prototype.setInputHandler = function (cb) { - this.inputHandler = cb; - }; - TextInput.prototype.getInputHandler = function () { - return this.inputHandler; - }; - TextInput.prototype.getElement = function () { - return this.text; - }; - TextInput.prototype.setCommandMode = function (value) { - this.commandMode = value; - this.text.readOnly = false; - }; - TextInput.prototype.setReadOnly = function (readOnly) { - if (!this.commandMode) - this.text.readOnly = readOnly; - }; - TextInput.prototype.setCopyWithEmptySelection = function (value) { - }; - TextInput.prototype.onContextMenu = function (e) { - this.afterContextMenu = true; - this.resetSelection(); - this.host._emit("nativecontextmenu", { - target: this.host, - domEvent: e - }); - this.moveToMouse(e, true); - }; - TextInput.prototype.moveToMouse = function (e, bringToFront) { - var _this = this; - if (!this.tempStyle) - this.tempStyle = this.text.style.cssText; - this.text.style.cssText = (bringToFront ? "z-index:100000;" : "") + (useragent.isIE ? "opacity:0.1;" : "") - + "text-indent: -" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth - * 0.5 + "px;"; - var rect = this.host.container.getBoundingClientRect(); - var style = dom.computedStyle(this.host.container); - var top = rect.top + (parseInt(style.borderTopWidth) || 0); - var left = rect.left + (parseInt(style.borderLeftWidth) || 0); - var maxTop = rect.bottom - top - this.text.clientHeight - 2; - var move = function (e) { - dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop)); - }; - move(e); - if (e.type != "mousedown") - return; - this.host.renderer.$isMousePressed = true; - clearTimeout(this.closeTimeout); - if (useragent.isWin) - event.capture(this.host.container, move, this.onContextMenuClose.bind(this)); - }; - TextInput.prototype.destroy = function () { - if (this.text.parentElement) - this.text.parentElement.removeChild(this.text); - }; - return TextInput; -}()); -exports.TextInput = TextInput; -exports.$setUserAgentForTests = function (_isMobile, _isIOS) { - isMobile = _isMobile; - isIOS = _isIOS; -}; + } -}); + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; -ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"], function(require, exports, module){"use strict"; -var useragent = require("../lib/useragent"); -var DRAG_OFFSET = 0; // pixels -var SCROLL_COOLDOWN_T = 550; // milliseconds -var DefaultHandlers = /** @class */ (function () { - function DefaultHandlers(mouseHandler) { - mouseHandler.$clickSelection = null; - var editor = mouseHandler.editor; - editor.setDefaultHandler("mousedown", this.onMouseDown.bind(mouseHandler)); - editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(mouseHandler)); - editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler)); - editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler)); - editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler)); - var exports = ["select", "startSelect", "selectEnd", "selectAllEnd", "selectByWordsEnd", - "selectByLinesEnd", "dragWait", "dragWaitEnd", "focusWait"]; - exports.forEach(function (x) { - mouseHandler[x] = this[x]; - }, this); - mouseHandler["selectByLines"] = this.extendSelectionBy.bind(mouseHandler, "getLineRange"); - mouseHandler["selectByWords"] = this.extendSelectionBy.bind(mouseHandler, "getWordRange"); + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; } - DefaultHandlers.prototype.onMouseDown = function (ev) { - var inSelection = ev.inSelection(); - var pos = ev.getDocumentPosition(); - this.mousedownEvent = ev; - var editor = this.editor; - var button = ev.getButton(); - if (button !== 0) { - var selectionRange = editor.getSelectionRange(); - var selectionEmpty = selectionRange.isEmpty(); - if (selectionEmpty || button == 1) - editor.selection.moveToPosition(pos); - if (button == 2) { - editor.textInput.onContextMenu(ev.domEvent); - if (!useragent.isMozilla) - ev.preventDefault(); - } - return; - } - this.mousedownEvent.time = Date.now(); - if (inSelection && !editor.isFocused()) { - editor.focus(); - if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) { - this.setState("focusWait"); - this.captureMouse(ev); - return; - } - } - this.captureMouse(ev); - this.startSelect(pos, ev.domEvent._clicks > 1); - return ev.preventDefault(); - }; - DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) { - pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); - var editor = this.editor; - if (!this.mousedownEvent) - return; - if (this.mousedownEvent.getShiftKey()) - editor.selection.selectToPosition(pos); - else if (!waitForClickSelection) - editor.selection.moveToPosition(pos); - if (!waitForClickSelection) - this.select(); - editor.setStyle("ace_selecting"); - this.setState("select"); - }; - DefaultHandlers.prototype.select = function () { - var anchor, editor = this.editor; - var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); - if (this.$clickSelection) { - var cmp = this.$clickSelection.comparePoint(cursor); - if (cmp == -1) { - anchor = this.$clickSelection.end; - } - else if (cmp == 1) { - anchor = this.$clickSelection.start; - } - else { - var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); - cursor = orientedRange.cursor; - anchor = orientedRange.anchor; - } - editor.selection.setSelectionAnchor(anchor.row, anchor.column); - } - editor.selection.selectToPosition(cursor); - editor.renderer.scrollCursorIntoView(); - }; - DefaultHandlers.prototype.extendSelectionBy = function (unitName) { - var anchor, editor = this.editor; - var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); - var range = editor.selection[unitName](cursor.row, cursor.column); - if (this.$clickSelection) { - var cmpStart = this.$clickSelection.comparePoint(range.start); - var cmpEnd = this.$clickSelection.comparePoint(range.end); - if (cmpStart == -1 && cmpEnd <= 0) { - anchor = this.$clickSelection.end; - if (range.end.row != cursor.row || range.end.column != cursor.column) - cursor = range.start; - } - else if (cmpEnd == 1 && cmpStart >= 0) { - anchor = this.$clickSelection.start; - if (range.start.row != cursor.row || range.start.column != cursor.column) - cursor = range.end; - } - else if (cmpStart == -1 && cmpEnd == 1) { - cursor = range.end; - anchor = range.start; - } - else { - var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); - cursor = orientedRange.cursor; - anchor = orientedRange.anchor; - } - editor.selection.setSelectionAnchor(anchor.row, anchor.column); - } - editor.selection.selectToPosition(cursor); - editor.renderer.scrollCursorIntoView(); - }; - DefaultHandlers.prototype.selectByLinesEnd = function () { - this.$clickSelection = null; - this.editor.unsetStyle("ace_selecting"); - }; - DefaultHandlers.prototype.focusWait = function () { - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); - var time = Date.now(); - if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout) - this.startSelect(this.mousedownEvent.getDocumentPosition()); - }; - DefaultHandlers.prototype.onDoubleClick = function (ev) { - var pos = ev.getDocumentPosition(); - var editor = this.editor; - var session = editor.session; - var range = session.getBracketRange(pos); - if (range) { - if (range.isEmpty()) { - range.start.column--; - range.end.column++; - } - this.setState("select"); - } - else { - range = editor.selection.getWordRange(pos.row, pos.column); - this.setState("selectByWords"); - } - this.$clickSelection = range; - this.select(); - }; - DefaultHandlers.prototype.onTripleClick = function (ev) { - var pos = ev.getDocumentPosition(); - var editor = this.editor; - this.setState("selectByLines"); - var range = editor.getSelectionRange(); - if (range.isMultiLine() && range.contains(pos.row, pos.column)) { - this.$clickSelection = editor.selection.getLineRange(range.start.row); - this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end; - } - else { - this.$clickSelection = editor.selection.getLineRange(pos.row); - } - this.select(); - }; - DefaultHandlers.prototype.onQuadClick = function (ev) { - var editor = this.editor; - editor.selectAll(); - this.$clickSelection = editor.getSelectionRange(); - this.setState("selectAll"); - }; - DefaultHandlers.prototype.onMouseWheel = function (ev) { - if (ev.getAccelKey()) - return; - if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) { - ev.wheelX = ev.wheelY; - ev.wheelY = 0; - } - var editor = this.editor; - if (!this.$lastScroll) - this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 }; - var prevScroll = this.$lastScroll; - var t = ev.domEvent.timeStamp; - var dt = t - prevScroll.t; - var vx = dt ? ev.wheelX / dt : prevScroll.vx; - var vy = dt ? ev.wheelY / dt : prevScroll.vy; - if (dt < SCROLL_COOLDOWN_T) { - vx = (vx + prevScroll.vx) / 2; - vy = (vy + prevScroll.vy) / 2; - } - var direction = Math.abs(vx / vy); - var canScroll = false; - if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0)) - canScroll = true; - if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed)) - canScroll = true; - if (canScroll) { - prevScroll.allowed = t; - } - else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) { - var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx) - && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy); - if (isSlower) { - canScroll = true; - prevScroll.allowed = t; - } - else { - prevScroll.allowed = 0; - } - } - prevScroll.t = t; - prevScroll.vx = vx; - prevScroll.vy = vy; - if (canScroll) { - editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); - return ev.stop(); - } - }; - return DefaultHandlers; -}()); -DefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd; -DefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd; -DefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd; -exports.DefaultHandlers = DefaultHandlers; -function calcDistance(ax, ay, bx, by) { - return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); -} -function calcRangeOrientation(range, cursor) { - if (range.start.row == range.end.row) - var cmp = 2 * cursor.column - range.start.column - range.end.column; - else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) - var cmp = cursor.column - 4; - else - var cmp = 2 * cursor.row - range.start.row - range.end.row; - if (cmp < 0) - return { cursor: range.start, anchor: range.end }; - else - return { cursor: range.end, anchor: range.start }; -} + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; -}); + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; -ace.define("ace/lib/scroll",["require","exports","module"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) { - event.stopPropagation(); - var target = event.currentTarget; - var contentOverflows = target.scrollHeight > target.clientHeight; - if (!contentOverflows) { - event.preventDefault(); + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; } -}; -}); + return w; + } -ace.define("ace/tooltip",["require","exports","module","ace/lib/dom","ace/lib/event","ace/range","ace/lib/scroll"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var dom = require("./lib/dom"); -var event = require("./lib/event"); -var Range = require("./range").Range; -var preventParentScroll = require("./lib/scroll").preventParentScroll; -var CLASSNAME = "ace_tooltip"; -var Tooltip = /** @class */ (function () { - function Tooltip(parentNode) { - this.isOpen = false; - this.$element = null; - this.$parentNode = parentNode; + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; } - Tooltip.prototype.$init = function () { - this.$element = dom.createElement("div"); - this.$element.className = CLASSNAME; - this.$element.style.display = "none"; - this.$parentNode.appendChild(this.$element); - return this.$element; - }; - Tooltip.prototype.getElement = function () { - return this.$element || this.$init(); - }; - Tooltip.prototype.setText = function (text) { - this.getElement().textContent = text; - }; - Tooltip.prototype.setHtml = function (html) { - this.getElement().innerHTML = html; - }; - Tooltip.prototype.setPosition = function (x, y) { - var el = this.getElement(); - var rootRect = el.offsetParent && el.offsetParent.getBoundingClientRect(); - el.style.left = x - (rootRect ? rootRect.left : 0) + "px"; - el.style.top = y - (rootRect ? rootRect.top : 0) + "px"; - }; - Tooltip.prototype.setClassName = function (className) { - dom.addCssClass(this.getElement(), className); - }; - Tooltip.prototype.setTheme = function (theme) { - this.$element.className = CLASSNAME + " " + - (theme.isDark ? "ace_dark " : "") + (theme.cssClass || ""); - }; - Tooltip.prototype.show = function (text, x, y) { - if (text != null) - this.setText(text); - if (x != null && y != null) - this.setPosition(x, y); - if (!this.isOpen) { - this.getElement().style.display = "block"; - this.isOpen = true; - } - }; - Tooltip.prototype.hide = function (e) { - if (this.isOpen) { - this.getElement().style.display = "none"; - this.getElement().className = CLASSNAME; - this.isOpen = false; - } - }; - Tooltip.prototype.getHeight = function () { - return this.getElement().offsetHeight; - }; - Tooltip.prototype.getWidth = function () { - return this.getElement().offsetWidth; - }; - Tooltip.prototype.destroy = function () { - this.isOpen = false; - if (this.$element && this.$element.parentNode) { - this.$element.parentNode.removeChild(this.$element); - } - }; - return Tooltip; -}()); -var PopupManager = /** @class */ (function () { - function PopupManager() { - this.popups = []; + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); } - PopupManager.prototype.addPopup = function (popup) { - this.popups.push(popup); - this.updatePopups(); - }; - PopupManager.prototype.removePopup = function (popup) { - var index = this.popups.indexOf(popup); - if (index !== -1) { - this.popups.splice(index, 1); - this.updatePopups(); - } - }; - PopupManager.prototype.updatePopups = function () { - var e_1, _a, e_2, _b; - this.popups.sort(function (a, b) { return b.priority - a.priority; }); - var visiblepopups = []; - try { - for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) { - var popup = _d.value; - var shouldDisplay = true; - try { - for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) { - var visiblePopup = visiblepopups_1_1.value; - if (this.doPopupsOverlap(visiblePopup, popup)) { - shouldDisplay = false; - break; - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1); - } - finally { if (e_2) throw e_2.error; } - } - if (shouldDisplay) { - visiblepopups.push(popup); - } - else { - popup.hide(); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); - } - finally { if (e_1) throw e_1.error; } - } - }; - PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) { - var rectA = popupA.getElement().getBoundingClientRect(); - var rectB = popupB.getElement().getBoundingClientRect(); - return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom - > rectB.top); - }; - return PopupManager; -}()); -var popupManager = new PopupManager(); -exports.popupManager = popupManager; -exports.Tooltip = Tooltip; -var HoverTooltip = /** @class */ (function (_super) { - __extends(HoverTooltip, _super); - function HoverTooltip(parentNode) { - if (parentNode === void 0) { parentNode = document.body; } - var _this = _super.call(this, parentNode) || this; - _this.timeout = undefined; - _this.lastT = 0; - _this.idleTime = 350; - _this.lastEvent = undefined; - _this.onMouseOut = _this.onMouseOut.bind(_this); - _this.onMouseMove = _this.onMouseMove.bind(_this); - _this.waitForHover = _this.waitForHover.bind(_this); - _this.hide = _this.hide.bind(_this); - var el = _this.getElement(); - el.style.whiteSpace = "pre-wrap"; - el.style.pointerEvents = "auto"; - el.addEventListener("mouseout", _this.onMouseOut); - el.tabIndex = -1; - el.addEventListener("blur", function () { - if (!el.contains(document.activeElement)) - this.hide(); - }.bind(_this)); - el.addEventListener("wheel", preventParentScroll); - return _this; + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); } - HoverTooltip.prototype.addToEditor = function (editor) { - editor.on("mousemove", this.onMouseMove); - editor.on("mousedown", this.hide); - editor.renderer.getMouseEventTarget().addEventListener("mouseout", this.onMouseOut, true); - }; - HoverTooltip.prototype.removeFromEditor = function (editor) { - editor.off("mousemove", this.onMouseMove); - editor.off("mousedown", this.hide); - editor.renderer.getMouseEventTarget().removeEventListener("mouseout", this.onMouseOut, true); - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - }; - HoverTooltip.prototype.onMouseMove = function (e, editor) { - this.lastEvent = e; - this.lastT = Date.now(); - var isMousePressed = editor.$mouseHandler.isMousePressed; - if (this.isOpen) { - var pos = this.lastEvent && this.lastEvent.getDocumentPosition(); - if (!this.range - || !this.range.contains(pos.row, pos.column) - || isMousePressed - || this.isOutsideOfText(this.lastEvent)) { - this.hide(); - } - } - if (this.timeout || isMousePressed) - return; - this.lastEvent = e; - this.timeout = setTimeout(this.waitForHover, this.idleTime); - }; - HoverTooltip.prototype.waitForHover = function () { - if (this.timeout) - clearTimeout(this.timeout); - var dt = Date.now() - this.lastT; - if (this.idleTime - dt > 10) { - this.timeout = setTimeout(this.waitForHover, this.idleTime - dt); - return; - } - this.timeout = null; - if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) { - this.$gatherData(this.lastEvent, this.lastEvent.editor); - } - }; - HoverTooltip.prototype.isOutsideOfText = function (e) { - var editor = e.editor; - var docPos = e.getDocumentPosition(); - var line = editor.session.getLine(docPos.row); - if (docPos.column == line.length) { - var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY); - var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column); - if (clippedPos.column != screenPos.column - || clippedPos.row != screenPos.row) { - return true; - } - } - return false; - }; - HoverTooltip.prototype.setDataProvider = function (value) { - this.$gatherData = value; - }; - HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) { - var MARGIN = 10; - if (startingEvent && startingEvent != this.lastEvent) - return; - if (this.isOpen && document.activeElement == this.getElement()) - return; - var renderer = editor.renderer; - if (!this.isOpen) { - popupManager.addPopup(this); - this.$registerCloseEvents(); - this.setTheme(renderer.theme); - } - this.isOpen = true; - this.addMarker(range, editor.session); - this.range = Range.fromPoints(range.start, range.end); - var position = renderer.textToScreenCoordinates(range.start.row, range.start.column); - var rect = renderer.scroller.getBoundingClientRect(); - if (position.pageX < rect.left) - position.pageX = rect.left; - var element = this.getElement(); - element.innerHTML = ""; - element.appendChild(domNode); - element.style.maxHeight = ""; - element.style.display = "block"; - var labelHeight = element.clientHeight; - var labelWidth = element.clientWidth; - var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight; - var isAbove = true; - if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) { - isAbove = false; - } - element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + "px"; - element.style.top = isAbove ? "" : position.pageY + renderer.lineHeight + "px"; - element.style.bottom = isAbove ? window.innerHeight - position.pageY + "px" : ""; - element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + "px"; - }; - HoverTooltip.prototype.addMarker = function (range, session) { - if (this.marker) { - this.$markerSession.removeMarker(this.marker); - } - this.$markerSession = session; - this.marker = session && session.addMarker(range, "ace_highlight-marker", "text"); - }; - HoverTooltip.prototype.hide = function (e) { - if (!e && document.activeElement == this.getElement()) - return; - if (e && e.target && (e.type != "keydown" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target)) - return; - this.lastEvent = null; - if (this.timeout) - clearTimeout(this.timeout); - this.timeout = null; - this.addMarker(null); - if (this.isOpen) { - this.$removeCloseEvents(); - this.getElement().style.display = "none"; - this.isOpen = false; - popupManager.removePopup(this); - } - }; - HoverTooltip.prototype.$registerCloseEvents = function () { - window.addEventListener("keydown", this.hide, true); - window.addEventListener("wheel", this.hide, true); - window.addEventListener("mousedown", this.hide, true); - }; - HoverTooltip.prototype.$removeCloseEvents = function () { - window.removeEventListener("keydown", this.hide, true); - window.removeEventListener("wheel", this.hide, true); - window.removeEventListener("mousedown", this.hide, true); - }; - HoverTooltip.prototype.onMouseOut = function (e) { - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.lastEvent = null; - if (!this.isOpen) - return; - if (!e.relatedTarget || this.getElement().contains(e.relatedTarget)) - return; - if (e && e.currentTarget.contains(e.relatedTarget)) - return; - if (!e.relatedTarget.classList.contains("ace_content")) - this.hide(); - }; - return HoverTooltip; -}(Tooltip)); -exports.HoverTooltip = HoverTooltip; + return this.clone(); + }; -}); + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; -ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/tooltip","ace/config"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var dom = require("../lib/dom"); -var event = require("../lib/event"); -var Tooltip = require("../tooltip").Tooltip; -var nls = require("../config").nls; -var GUTTER_TOOLTIP_LEFT_OFFSET = 5; -var GUTTER_TOOLTIP_TOP_OFFSET = 3; -exports.GUTTER_TOOLTIP_LEFT_OFFSET = GUTTER_TOOLTIP_LEFT_OFFSET; -exports.GUTTER_TOOLTIP_TOP_OFFSET = GUTTER_TOOLTIP_TOP_OFFSET; -function GutterHandler(mouseHandler) { - var editor = mouseHandler.editor; - var gutter = editor.renderer.$gutterLayer; - var tooltip = new GutterTooltip(editor, true); - mouseHandler.editor.setDefaultHandler("guttermousedown", function (e) { - if (!editor.isFocused() || e.getButton() != 0) - return; - var gutterRegion = gutter.getRegion(e); - if (gutterRegion == "foldWidgets") - return; - var row = e.getDocumentPosition().row; - var selection = editor.session.selection; - if (e.getShiftKey()) - selection.selectTo(row, 0); - else { - if (e.domEvent.detail == 2) { - editor.selectAll(); - return e.preventDefault(); - } - mouseHandler.$clickSelection = editor.selection.getLineRange(row); - } - mouseHandler.setState("selectByLines"); - mouseHandler.captureMouse(e); - return e.preventDefault(); - }); - var tooltipTimeout, mouseEvent; - function showTooltip() { - var row = mouseEvent.getDocumentPosition().row; - var maxRow = editor.session.getLength(); - if (row == maxRow) { - var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; - var pos = mouseEvent.$pos; - if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) - return hideTooltip(); - } - tooltip.showTooltip(row); - if (!tooltip.isOpen) - return; - editor.on("mousewheel", hideTooltip); - editor.on("changeSession", hideTooltip); - window.addEventListener("keydown", hideTooltip, true); - if (mouseHandler.$tooltipFollowsMouse) { - moveTooltip(mouseEvent); - } - else { - var gutterRow = mouseEvent.getGutterRow(); - var gutterCell = gutter.$lines.get(gutterRow); - if (gutterCell) { - var gutterElement = gutterCell.element.querySelector(".ace_gutter_annotation"); - var rect = gutterElement.getBoundingClientRect(); - var style = tooltip.getElement().style; - style.left = (rect.right - GUTTER_TOOLTIP_LEFT_OFFSET) + "px"; - style.top = (rect.bottom - GUTTER_TOOLTIP_TOP_OFFSET) + "px"; - } - else { - moveTooltip(mouseEvent); - } - } + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; } - function hideTooltip(e) { - if (e && e.type === "keydown" && (e.ctrlKey || e.metaKey)) - return; - if (e && e.type === "mouseout" && (!e.relatedTarget || tooltip.getElement().contains(e.relatedTarget))) - return; - if (tooltipTimeout) - tooltipTimeout = clearTimeout(tooltipTimeout); - if (tooltip.isOpen) { - tooltip.hideTooltip(); - editor.off("mousewheel", hideTooltip); - editor.off("changeSession", hideTooltip); - window.removeEventListener("keydown", hideTooltip, true); - } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; } - function moveTooltip(e) { - tooltip.setPosition(e.x, e.y); + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; } - mouseHandler.editor.setDefaultHandler("guttermousemove", function (e) { - var target = e.domEvent.target || e.domEvent.srcElement; - if (dom.hasCssClass(target, "ace_fold-widget") || dom.hasCssClass(target, "ace_custom-widget")) - return hideTooltip(); - if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse) - moveTooltip(e); - mouseEvent = e; - if (tooltipTimeout) - return; - tooltipTimeout = setTimeout(function () { - tooltipTimeout = null; - if (mouseEvent && !mouseHandler.isMousePressed) - showTooltip(); - }, 50); - }); - event.addListener(editor.renderer.$gutter, "mouseout", function (e) { - mouseEvent = null; - if (!tooltip.isOpen) - return; - tooltipTimeout = setTimeout(function () { - tooltipTimeout = null; - hideTooltip(e); - }, 50); - }, editor); -} -exports.GutterHandler = GutterHandler; -var GutterTooltip = /** @class */ (function (_super) { - __extends(GutterTooltip, _super); - function GutterTooltip(editor, isHover) { - if (isHover === void 0) { isHover = false; } - var _this = _super.call(this, editor.container) || this; - _this.id = "gt" + (++GutterTooltip.$uid); - _this.editor = editor; - _this.visibleTooltipRow; - var el = _this.getElement(); - el.setAttribute("role", "tooltip"); - el.setAttribute("id", _this.id); - el.style.pointerEvents = "auto"; - if (isHover) { - _this.onMouseOut = _this.onMouseOut.bind(_this); - el.addEventListener("mouseout", _this.onMouseOut); - } - return _this; + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; } - GutterTooltip.prototype.onMouseOut = function (e) { - if (!this.isOpen) - return; - if (!e.relatedTarget || this.getElement().contains(e.relatedTarget)) - return; - if (e && e.currentTarget.contains(e.relatedTarget)) - return; - this.hideTooltip(); - }; - GutterTooltip.prototype.setPosition = function (x, y) { - var windowWidth = window.innerWidth || document.documentElement.clientWidth; - var windowHeight = window.innerHeight || document.documentElement.clientHeight; - var width = this.getWidth(); - var height = this.getHeight(); - x += 15; - y += 15; - if (x + width > windowWidth) { - x -= (x + width) - windowWidth; - } - if (y + height > windowHeight) { - y -= 20 + height; - } - Tooltip.prototype.setPosition.call(this, x, y); - }; - Object.defineProperty(GutterTooltip, "annotationLabels", { - get: function () { - return { - error: { - singular: nls("gutter-tooltip.aria-label.error.singular", "error"), - plural: nls("gutter-tooltip.aria-label.error.plural", "errors") - }, - security: { - singular: nls("gutter-tooltip.aria-label.security.singular", "security finding"), - plural: nls("gutter-tooltip.aria-label.security.plural", "security findings") - }, - warning: { - singular: nls("gutter-tooltip.aria-label.warning.singular", "warning"), - plural: nls("gutter-tooltip.aria-label.warning.plural", "warnings") - }, - info: { - singular: nls("gutter-tooltip.aria-label.info.singular", "information message"), - plural: nls("gutter-tooltip.aria-label.info.plural", "information messages") - }, - hint: { - singular: nls("gutter-tooltip.aria-label.hint.singular", "suggestion"), - plural: nls("gutter-tooltip.aria-label.hint.plural", "suggestions") - } - }; - }, - enumerable: false, - configurable: true - }); - GutterTooltip.prototype.showTooltip = function (row) { - var _a; - var gutter = this.editor.renderer.$gutterLayer; - var annotationsInRow = gutter.$annotations[row]; - var annotation; - if (annotationsInRow) - annotation = { - displayText: Array.from(annotationsInRow.displayText), - type: Array.from(annotationsInRow.type) - }; - else - annotation = { displayText: [], type: [] }; - var fold = gutter.session.getFoldLine(row); - if (fold && gutter.$showFoldedAnnotations) { - var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] }; - var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 }; - var mostSevereAnnotationTypeInFold; - for (var i = row + 1; i <= fold.end.row; i++) { - if (!gutter.$annotations[i]) - continue; - for (var j = 0; j < gutter.$annotations[i].text.length; j++) { - var annotationType = gutter.$annotations[i].type[j]; - annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]); - if (!mostSevereAnnotationTypeInFold || - severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) { - mostSevereAnnotationTypeInFold = annotationType; - } - } - } - if (["error", "security", "warning"].includes(mostSevereAnnotationTypeInFold)) { - var summaryFoldedAnnotations = "".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), " in folded code."); - annotation.displayText.push(summaryFoldedAnnotations); - annotation.type.push(mostSevereAnnotationTypeInFold + "_fold"); - } - } - if (annotation.displayText.length === 0) - return this.hideTooltip(); - var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] }; - var iconClassName = gutter.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; - for (var i = 0; i < annotation.displayText.length; i++) { - var lineElement = dom.createElement("span"); - var iconElement = dom.createElement("span"); - (_a = iconElement.classList).add.apply(_a, ["ace_".concat(annotation.type[i]), iconClassName]); - iconElement.setAttribute("aria-label", "".concat(GutterTooltip.annotationLabels[annotation.type[i].replace("_fold", "")].singular)); - iconElement.setAttribute("role", "img"); - iconElement.appendChild(dom.createTextNode(" ")); - lineElement.appendChild(iconElement); - lineElement.appendChild(dom.createTextNode(annotation.displayText[i])); - lineElement.appendChild(dom.createElement("br")); - annotationMessages[annotation.type[i].replace("_fold", "")].push(lineElement); - } - var tooltipElement = this.getElement(); - dom.removeChildren(tooltipElement); - annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); }); - annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); }); - annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); }); - annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); }); - annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); }); - tooltipElement.setAttribute("aria-live", "polite"); - if (!this.isOpen) { - this.setTheme(this.editor.renderer.theme); - this.setClassName("ace_gutter-tooltip"); - } - var annotationNode = this.$findLinkedAnnotationNode(row); - if (annotationNode) { - annotationNode.setAttribute("aria-describedby", this.id); - } - this.show(); - this.visibleTooltipRow = row; - this.editor._signal("showGutterTooltip", this); - }; - GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) { - var cell = this.$findCellByRow(row); - if (cell) { - var element = cell.element; - if (element.childNodes.length > 2) { - return element.childNodes[2]; - } - } - }; - GutterTooltip.prototype.$findCellByRow = function (row) { - return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; }); - }; - GutterTooltip.prototype.hideTooltip = function () { - if (!this.isOpen) { - return; - } - this.$element.removeAttribute("aria-live"); - this.hide(); - if (this.visibleTooltipRow != undefined) { - var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow); - if (annotationNode) { - annotationNode.removeAttribute("aria-describedby"); - } - } - this.visibleTooltipRow = undefined; - this.editor._signal("hideGutterTooltip", this); - }; - GutterTooltip.annotationsToSummaryString = function (annotations) { - var e_1, _a; - var summary = []; - var annotationTypes = ["error", "security", "warning", "info", "hint"]; - try { - for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) { - var annotationType = annotationTypes_1_1.value; - if (!annotations[annotationType].length) - continue; - var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural; - summary.push("".concat(annotations[annotationType].length, " ").concat(label)); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1); - } - finally { if (e_1) throw e_1.error; } - } - return summary.join(", "); - }; - return GutterTooltip; -}(Tooltip)); -GutterTooltip.$uid = 0; -exports.GutterTooltip = GutterTooltip; -}); + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } -ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module){"use strict"; -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -var MouseEvent = /** @class */ (function () { - function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY; - this.domEvent = domEvent; - this.editor = editor; - this.x = this.clientX = domEvent.clientX; - this.y = this.clientY = domEvent.clientY; - this.$pos = null; - this.$inSelection = null; - this.propagationStopped = false; - this.defaultPrevented = false; + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; } - MouseEvent.prototype.stopPropagation = function () { - event.stopPropagation(this.domEvent); - this.propagationStopped = true; - }; - MouseEvent.prototype.preventDefault = function () { - event.preventDefault(this.domEvent); - this.defaultPrevented = true; - }; - MouseEvent.prototype.stop = function () { - this.stopPropagation(); - this.preventDefault(); - }; - MouseEvent.prototype.getDocumentPosition = function () { - if (this.$pos) - return this.$pos; - this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); - return this.$pos; - }; - MouseEvent.prototype.getGutterRow = function () { - var documentRow = this.getDocumentPosition().row; - var screenRow = this.editor.session.documentToScreenRow(documentRow, 0); - var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0); - return screenRow - screenTopRow; - }; - MouseEvent.prototype.inSelection = function () { - if (this.$inSelection !== null) - return this.$inSelection; - var editor = this.editor; - var selectionRange = editor.getSelectionRange(); - if (selectionRange.isEmpty()) - this.$inSelection = false; - else { - var pos = this.getDocumentPosition(); - this.$inSelection = selectionRange.contains(pos.row, pos.column); - } - return this.$inSelection; - }; - MouseEvent.prototype.getButton = function () { - return event.getButton(this.domEvent); - }; - MouseEvent.prototype.getShiftKey = function () { - return this.domEvent.shiftKey; - }; - MouseEvent.prototype.getAccelKey = function () { - return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey; - }; - return MouseEvent; -}()); -exports.MouseEvent = MouseEvent; -}); + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } -ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -var AUTOSCROLL_DELAY = 200; -var SCROLL_CURSOR_DELAY = 200; -var SCROLL_CURSOR_HYSTERESIS = 5; -function DragdropHandler(mouseHandler) { - var editor = mouseHandler.editor; - var dragImage = dom.createElement("div"); - dragImage.style.cssText = "top:-100px;position:absolute;z-index:2147483647;opacity:0.5"; - dragImage.textContent = "\xa0"; - var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; - exports.forEach(function (x) { - mouseHandler[x] = this[x]; - }, this); - editor.on("mousedown", this.onMouseDown.bind(mouseHandler)); - var mouseTarget = editor.container; - var dragSelectionMarker, x, y; - var timerId, range; - var dragCursor, counter = 0; - var dragOperation; - var isInternal; - var autoScrollStartTime; - var cursorMovedTime; - var cursorPointOnCaretMoved; - this.onDragStart = function (e) { - if (this.cancelDrag || !mouseTarget.draggable) { - var self = this; - setTimeout(function () { - self.startSelect(); - self.captureMouse(e); - }, 0); - return e.preventDefault(); - } - range = editor.getSelectionRange(); - var dataTransfer = e.dataTransfer; - dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; - editor.container.appendChild(dragImage); - dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0); - setTimeout(function () { - editor.container.removeChild(dragImage); - }); - dataTransfer.clearData(); - dataTransfer.setData("Text", editor.session.getTextRange()); - isInternal = true; - this.setState("drag"); - }; - this.onDragEnd = function (e) { - mouseTarget.draggable = false; - isInternal = false; - this.setState(null); - if (!editor.getReadOnly()) { - var dropEffect = e.dataTransfer.dropEffect; - if (!dragOperation && dropEffect == "move") - editor.session.remove(editor.getSelectionRange()); - editor.$resetCursorStyle(); - } - this.editor.unsetStyle("ace_dragging"); - this.editor.renderer.setCursorStyle(""); - }; - this.onDragEnter = function (e) { - if (editor.getReadOnly() || !canAccept(e.dataTransfer)) - return; - x = e.clientX; - y = e.clientY; - if (!dragSelectionMarker) - addDragMarker(); - counter++; - e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); - return event.preventDefault(e); - }; - this.onDragOver = function (e) { - if (editor.getReadOnly() || !canAccept(e.dataTransfer)) - return; - x = e.clientX; - y = e.clientY; - if (!dragSelectionMarker) { - addDragMarker(); - counter++; - } - if (onMouseMoveTimer !== null) - onMouseMoveTimer = null; - e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); - return event.preventDefault(e); - }; - this.onDragLeave = function (e) { - counter--; - if (counter <= 0 && dragSelectionMarker) { - clearDragMarker(); - dragOperation = null; - return event.preventDefault(e); - } - }; - this.onDrop = function (e) { - if (!dragCursor) - return; - var dataTransfer = e.dataTransfer; - if (isInternal) { - switch (dragOperation) { - case "move": - if (range.contains(dragCursor.row, dragCursor.column)) { - range = { - start: dragCursor, - end: dragCursor - }; - } - else { - range = editor.moveText(range, dragCursor); - } - break; - case "copy": - range = editor.moveText(range, dragCursor, true); - break; - } - } - else { - var dropData = dataTransfer.getData('Text'); - range = { - start: dragCursor, - end: editor.session.insert(dragCursor, dropData) - }; - editor.focus(); - dragOperation = null; - } - clearDragMarker(); - return event.preventDefault(e); - }; - event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler), editor); - event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler), editor); - event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler), editor); - event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler), editor); - event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler), editor); - event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler), editor); - function scrollCursorIntoView(cursor, prevCursor) { - var now = Date.now(); - var vMovement = !prevCursor || cursor.row != prevCursor.row; - var hMovement = !prevCursor || cursor.column != prevCursor.column; - if (!cursorMovedTime || vMovement || hMovement) { - editor.moveCursorToPosition(cursor); - cursorMovedTime = now; - cursorPointOnCaretMoved = { x: x, y: y }; - } - else { - var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); - if (distance > SCROLL_CURSOR_HYSTERESIS) { - cursorMovedTime = null; - } - else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { - editor.renderer.scrollCursorIntoView(); - cursorMovedTime = null; - } - } + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } } - function autoScroll(cursor, prevCursor) { - var now = Date.now(); - var lineHeight = editor.renderer.layerConfig.lineHeight; - var characterWidth = editor.renderer.layerConfig.characterWidth; - var editorRect = editor.renderer.scroller.getBoundingClientRect(); - var offsets = { - x: { - left: x - editorRect.left, - right: editorRect.right - x - }, - y: { - top: y - editorRect.top, - bottom: editorRect.bottom - y - } - }; - var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); - var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); - var scrollCursor = { row: cursor.row, column: cursor.column }; - if (nearestXOffset / characterWidth <= 2) { - scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); - } - if (nearestYOffset / lineHeight <= 1) { - scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); - } - var vScroll = cursor.row != scrollCursor.row; - var hScroll = cursor.column != scrollCursor.column; - var vMovement = !prevCursor || cursor.row != prevCursor.row; - if (vScroll || (hScroll && !vMovement)) { - if (!autoScrollStartTime) - autoScrollStartTime = now; - else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) - editor.renderer.scrollCursorIntoView(scrollCursor); - } - else { - autoScrollStartTime = null; - } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; } - function onDragInterval() { - var prevCursor = dragCursor; - dragCursor = editor.renderer.screenToTextCoordinates(x, y); - scrollCursorIntoView(dragCursor, prevCursor); - autoScroll(dragCursor, prevCursor); + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; } - function addDragMarker() { - range = editor.selection.toOrientedRange(); - dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); - editor.clearSelection(); - if (editor.isFocused()) - editor.renderer.$cursorLayer.setBlinking(false); - clearInterval(timerId); - onDragInterval(); - timerId = setInterval(onDragInterval, 20); - counter = 0; - event.addListener(document, "mousemove", onMouseMove); + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); } - function clearDragMarker() { - clearInterval(timerId); - editor.session.removeMarker(dragSelectionMarker); - dragSelectionMarker = null; - editor.selection.fromOrientedRange(range); - if (editor.isFocused() && !isInternal) - editor.$resetCursorStyle(); - range = null; - dragCursor = null; - counter = 0; - autoScrollStartTime = null; - cursorMovedTime = null; - event.removeListener(document, "mousemove", onMouseMove); + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); } - var onMouseMoveTimer = null; - function onMouseMove() { - if (onMouseMoveTimer == null) { - onMouseMoveTimer = setTimeout(function () { - if (onMouseMoveTimer != null && dragSelectionMarker) - clearDragMarker(); - }, 20); - } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); } - function canAccept(dataTransfer) { - var types = dataTransfer.types; - return !types || Array.prototype.some.call(types, function (type) { - return type == 'text/plain' || type == 'Text'; - }); + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; } - function getDropEffect(e) { - var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; - var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; - var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; - var effectAllowed = "uninitialized"; - try { - effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); - } - catch (e) { } - var dropEffect = "none"; - if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) - dropEffect = "copy"; - else if (moveAllowed.indexOf(effectAllowed) >= 0) - dropEffect = "move"; - else if (copyAllowed.indexOf(effectAllowed) >= 0) - dropEffect = "copy"; - return dropEffect; + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; } -} -(function () { - this.dragWait = function () { - var interval = Date.now() - this.mousedownEvent.time; - if (interval > this.editor.getDragDelay()) - this.startDrag(); - }; - this.dragWaitEnd = function () { - var target = this.editor.container; - target.draggable = false; - this.startSelect(this.mousedownEvent.getDocumentPosition()); - this.selectEnd(); - }; - this.dragReadyEnd = function (e) { - this.editor.$resetCursorStyle(); - this.editor.unsetStyle("ace_dragging"); - this.editor.renderer.setCursorStyle(""); - this.dragWaitEnd(); - }; - this.startDrag = function () { - this.cancelDrag = false; - var editor = this.editor; - var target = editor.container; - target.draggable = true; - editor.renderer.$cursorLayer.setBlinking(false); - editor.setStyle("ace_dragging"); - var cursorStyle = useragent.isWin ? "default" : "move"; - editor.renderer.setCursorStyle(cursorStyle); - this.setState("dragReady"); - }; - this.onMouseDrag = function (e) { - var target = this.editor.container; - if (useragent.isIE && this.state == "dragReady") { - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); - if (distance > 3) - target.dragDrop(); - } - if (this.state === "dragWait") { - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); - if (distance > 0) { - target.draggable = false; - this.startSelect(this.mousedownEvent.getDocumentPosition()); - } - } - }; - this.onMouseDown = function (e) { - if (!this.$dragEnabled) - return; - this.mousedownEvent = e; - var editor = this.editor; - var inSelection = e.inSelection(); - var button = e.getButton(); - var clickCount = e.domEvent.detail || 1; - if (clickCount === 1 && button === 0 && inSelection) { - if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) - return; - this.mousedownEvent.time = Date.now(); - var eventTarget = e.domEvent.target || e.domEvent.srcElement; - if ("unselectable" in eventTarget) - eventTarget.unselectable = "on"; - if (editor.getDragDelay()) { - if (useragent.isWebKit) { - this.cancelDrag = true; - var mouseTarget = editor.container; - mouseTarget.draggable = true; - } - this.setState("dragWait"); - } - else { - this.startDrag(); - } - this.captureMouse(e, this.onMouseDrag.bind(this)); - e.defaultPrevented = true; - } - }; -}).call(DragdropHandler.prototype); -function calcDistance(ax, ay, bx, by) { - return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); -} -exports.DragdropHandler = DragdropHandler; -}); + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } -ace.define("ace/mouse/touch_handler",["require","exports","module","ace/mouse/mouse_event","ace/lib/event","ace/lib/dom"], function(require, exports, module){"use strict"; -var MouseEvent = require("./mouse_event").MouseEvent; -var event = require("../lib/event"); -var dom = require("../lib/dom"); -exports.addTouchListeners = function (el, editor) { - var mode = "scroll"; - var startX; - var startY; - var touchStartT; - var lastT; - var longTouchTimer; - var animationTimer; - var animationSteps = 0; - var pos; - var clickCount = 0; - var vX = 0; - var vY = 0; - var pressed; - var contextMenu; - function createContextMenu() { - var clipboard = window.navigator && window.navigator.clipboard; - var isOpen = false; - var updateMenu = function () { - var selected = editor.getCopyText(); - var hasUndo = editor.session.getUndoManager().hasUndo(); - contextMenu.replaceChild(dom.buildDom(isOpen ? ["span", - !selected && canExecuteCommand("selectall") && ["span", { class: "ace_mobile-button", action: "selectall" }, "Select All"], - selected && canExecuteCommand("copy") && ["span", { class: "ace_mobile-button", action: "copy" }, "Copy"], - selected && canExecuteCommand("cut") && ["span", { class: "ace_mobile-button", action: "cut" }, "Cut"], - clipboard && canExecuteCommand("paste") && ["span", { class: "ace_mobile-button", action: "paste" }, "Paste"], - hasUndo && canExecuteCommand("undo") && ["span", { class: "ace_mobile-button", action: "undo" }, "Undo"], - canExecuteCommand("find") && ["span", { class: "ace_mobile-button", action: "find" }, "Find"], - canExecuteCommand("openCommandPalette") && ["span", { class: "ace_mobile-button", action: "openCommandPalette" }, "Palette"] - ] : ["span"]), contextMenu.firstChild); - }; - var canExecuteCommand = function (/** @type {string} */ cmd) { - return editor.commands.canExecute(cmd, editor); - }; - var handleClick = function (e) { - var action = e.target.getAttribute("action"); - if (action == "more" || !isOpen) { - isOpen = !isOpen; - return updateMenu(); - } - if (action == "paste") { - clipboard.readText().then(function (text) { - editor.execCommand(action, text); - }); - } - else if (action) { - if (action == "cut" || action == "copy") { - if (clipboard) - clipboard.writeText(editor.getCopyText()); - else - document.execCommand("copy"); - } - editor.execCommand(action); - } - contextMenu.firstChild.style.display = "none"; - isOpen = false; - if (action != "openCommandPalette") - editor.focus(); - }; - contextMenu = dom.buildDom(["div", - { - class: "ace_mobile-menu", - ontouchstart: function (e) { - mode = "menu"; - e.stopPropagation(); - e.preventDefault(); - editor.textInput.focus(); - }, - ontouchend: function (e) { - e.stopPropagation(); - e.preventDefault(); - handleClick(e); - }, - onclick: handleClick - }, - ["span"], - ["span", { class: "ace_mobile-button", action: "more" }, "..."] - ], editor.container); + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; } - function showContextMenu() { - if (!editor.getOption("enableMobileMenu")) { - if (contextMenu) { - hideContextMenu(); - } - return; - } - if (!contextMenu) - createContextMenu(); - var cursor = editor.selection.cursor; - var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column); - var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX; - var scrollLeft = editor.renderer.scrollLeft; - var rect = editor.container.getBoundingClientRect(); - contextMenu.style.top = pagePos.pageY - rect.top - 3 + "px"; - if (pagePos.pageX - rect.left < rect.width - 70) { - contextMenu.style.left = ""; - contextMenu.style.right = "10px"; - } - else { - contextMenu.style.right = ""; - contextMenu.style.left = leftOffset + scrollLeft - rect.left + "px"; - } - contextMenu.style.display = ""; - contextMenu.firstChild.style.display = "none"; - editor.on("input", hideContextMenu); + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); } - function hideContextMenu(e) { - if (contextMenu) - contextMenu.style.display = "none"; - editor.off("input", hideContextMenu); + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; } - function handleLongTap() { - longTouchTimer = null; - clearTimeout(longTouchTimer); - var range = editor.selection.getRange(); - var inSelection = range.contains(pos.row, pos.column); - if (range.isEmpty() || !inSelection) { - editor.selection.moveToPosition(pos); - editor.selection.selectWord(); - } - mode = "wait"; - showContextMenu(); + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; } - function switchToSelectionMode() { - longTouchTimer = null; - clearTimeout(longTouchTimer); - editor.selection.moveToPosition(pos); - var range = clickCount >= 2 - ? editor.selection.getLineRange(pos.row) - : editor.session.getBracketRange(pos); - if (range && !range.isEmpty()) { - editor.selection.setRange(range); - } - else { - editor.selection.selectWord(); - } - mode = "wait"; + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; } - event.addListener(el, "contextmenu", function (e) { - if (!pressed) - return; - var textarea = editor.textInput.getElement(); - textarea.focus(); - }, editor); - event.addListener(el, "touchstart", function (e) { - var touches = e.touches; - if (longTouchTimer || touches.length > 1) { - clearTimeout(longTouchTimer); - longTouchTimer = null; - touchStartT = -1; - mode = "zoom"; - return; - } - pressed = editor.$mouseHandler.isMousePressed = true; - var h = editor.renderer.layerConfig.lineHeight; - var w = editor.renderer.layerConfig.lineHeight; - var t = e.timeStamp; - lastT = t; - var touchObj = touches[0]; - var x = touchObj.clientX; - var y = touchObj.clientY; - if (Math.abs(startX - x) + Math.abs(startY - y) > h) - touchStartT = -1; - startX = e.clientX = x; - startY = e.clientY = y; - vX = vY = 0; - var ev = new MouseEvent(e, editor); - pos = ev.getDocumentPosition(); - if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) { - clickCount++; - e.preventDefault(); - e.button = 0; - switchToSelectionMode(); - } - else { - clickCount = 0; - var cursor = editor.selection.cursor; - var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor; - var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true); - var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true); - var rect = editor.renderer.scroller.getBoundingClientRect(); - var offsetTop = editor.renderer.layerConfig.offset; - var offsetLeft = editor.renderer.scrollLeft; - var weightedDistance = function (x, y) { - x = x / w; - y = y / h - 0.75; - return x * x + y * y; - }; - if (e.clientX < rect.left) { - mode = "zoom"; - return; - } - var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop); - var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop); - if (diff1 < 3.5 && diff2 < 3.5) - mode = diff1 > diff2 ? "cursor" : "anchor"; - if (diff2 < 3.5) - mode = "anchor"; - else if (diff1 < 3.5) - mode = "cursor"; - else - mode = "scroll"; - longTouchTimer = setTimeout(handleLongTap, 450); - } - touchStartT = t; - }, editor); - event.addListener(el, "touchend", function (e) { - pressed = editor.$mouseHandler.isMousePressed = false; - if (animationTimer) - clearInterval(animationTimer); - if (mode == "zoom") { - mode = ""; - animationSteps = 0; - } - else if (longTouchTimer) { - editor.selection.moveToPosition(pos); - animationSteps = 0; - showContextMenu(); - } - else if (mode == "scroll") { - animate(); - hideContextMenu(); - } - else { - showContextMenu(); - } - clearTimeout(longTouchTimer); - longTouchTimer = null; - }, editor); - event.addListener(el, "touchmove", function (e) { - if (longTouchTimer) { - clearTimeout(longTouchTimer); - longTouchTimer = null; - } - var touches = e.touches; - if (touches.length > 1 || mode == "zoom") - return; - var touchObj = touches[0]; - var wheelX = startX - touchObj.clientX; - var wheelY = startY - touchObj.clientY; - if (mode == "wait") { - if (wheelX * wheelX + wheelY * wheelY > 4) - mode = "cursor"; - else - return e.preventDefault(); - } - startX = touchObj.clientX; - startY = touchObj.clientY; - e.clientX = touchObj.clientX; - e.clientY = touchObj.clientY; - var t = e.timeStamp; - var dt = t - lastT; - lastT = t; - if (mode == "scroll") { - var mouseEvent = new MouseEvent(e, editor); - mouseEvent.speed = 1; - mouseEvent.wheelX = wheelX; - mouseEvent.wheelY = wheelY; - if (10 * Math.abs(wheelX) < Math.abs(wheelY)) - wheelX = 0; - if (10 * Math.abs(wheelY) < Math.abs(wheelX)) - wheelY = 0; - if (dt != 0) { - vX = wheelX / dt; - vY = wheelY / dt; - } - editor._emit("mousewheel", mouseEvent); - if (!mouseEvent.propagationStopped) { - vX = vY = 0; - } - } - else { - var ev = new MouseEvent(e, editor); - var pos = ev.getDocumentPosition(); - if (mode == "cursor") - editor.selection.moveCursorToPosition(pos); - else if (mode == "anchor") - editor.selection.setSelectionAnchor(pos.row, pos.column); - editor.renderer.scrollCursorIntoView(pos); - e.preventDefault(); - } - }, editor); - function animate() { - animationSteps += 60; - animationTimer = setInterval(function () { - if (animationSteps-- <= 0) { - clearInterval(animationTimer); - animationTimer = null; - } - if (Math.abs(vX) < 0.01) - vX = 0; - if (Math.abs(vY) < 0.01) - vY = 0; - if (animationSteps < 20) - vX = 0.9 * vX; - if (animationSteps < 20) - vY = 0.9 * vY; - var oldScrollTop = editor.session.getScrollTop(); - editor.renderer.scrollBy(10 * vX, 10 * vY); - if (oldScrollTop == editor.session.getScrollTop()) - animationSteps = 0; - }, 10); + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; } -}; - -}); -ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/mouse/touch_handler","ace/config"], function(require, exports, module){"use strict"; -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -var DefaultHandlers = require("./default_handlers").DefaultHandlers; -var DefaultGutterHandler = require("./default_gutter_handler").GutterHandler; -var MouseEvent = require("./mouse_event").MouseEvent; -var DragdropHandler = require("./dragdrop_handler").DragdropHandler; -var addTouchListeners = require("./touch_handler").addTouchListeners; -var config = require("../config"); -var MouseHandler = /** @class */ (function () { - function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout; - var _self = this; - this.editor = editor; - new DefaultHandlers(this); - new DefaultGutterHandler(this); - new DragdropHandler(this); - var focusEditor = function (e) { - var windowBlurred = !document.hasFocus || !document.hasFocus() - || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement()); - if (windowBlurred) - window.focus(); - editor.focus(); - setTimeout(function () { - if (!editor.isFocused()) - editor.focus(); - }); - }; - var mouseTarget = editor.renderer.getMouseEventTarget(); - event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"), editor); - event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"), editor); - event.addMultiMouseDownListener([ - mouseTarget, - editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner, - editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner, - editor.textInput && editor.textInput.getElement() - ].filter(Boolean), [400, 300, 250], this, "onMouseEvent", editor); - event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"), editor); - addTouchListeners(editor.container, editor); - var gutterEl = editor.renderer.$gutter; - event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown"), editor); - event.addListener(gutterEl, "click", this.onMouseEvent.bind(this, "gutterclick"), editor); - event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick"), editor); - event.addListener(gutterEl, "mousemove", this.onMouseEvent.bind(this, "guttermousemove"), editor); - event.addListener(mouseTarget, "mousedown", focusEditor, editor); - event.addListener(gutterEl, "mousedown", focusEditor, editor); - if (useragent.isIE && editor.renderer.scrollBarV) { - event.addListener(editor.renderer.scrollBarV.element, "mousedown", focusEditor, editor); - event.addListener(editor.renderer.scrollBarH.element, "mousedown", focusEditor, editor); - } - editor.on("mousemove", function (e) { - if (_self.state || _self.$dragDelay || !_self.$dragEnabled) - return; - var character = editor.renderer.screenToTextCoordinates(e.x, e.y); - var range = editor.session.selection.getRange(); - var renderer = editor.renderer; - if (!range.isEmpty() && range.insideStart(character.row, character.column)) { - renderer.setCursorStyle("default"); - } - else { - renderer.setCursorStyle(""); - } - }, //@ts-expect-error TODO: seems mistyping - should be boolean - editor); + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } } - MouseHandler.prototype.onMouseEvent = function (name, e) { - if (!this.editor.session) - return; - this.editor._emit(name, new MouseEvent(e, this.editor)); - }; - MouseHandler.prototype.onMouseMove = function (name, e) { - var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove; - if (!listeners || !listeners.length) - return; - this.editor._emit(name, new MouseEvent(e, this.editor)); - }; - MouseHandler.prototype.onMouseWheel = function (name, e) { - var mouseEvent = new MouseEvent(e, this.editor); - mouseEvent.speed = this.$scrollSpeed * 2; - mouseEvent.wheelX = e.wheelX; - mouseEvent.wheelY = e.wheelY; - this.editor._emit(name, mouseEvent); - }; - MouseHandler.prototype.setState = function (state) { - this.state = state; - }; - MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) { - this.x = ev.x; - this.y = ev.y; - this.isMousePressed = true; - var editor = this.editor; - var renderer = this.editor.renderer; - renderer.$isMousePressed = true; - var self = this; - var continueCapture = true; - var onMouseMove = function (e) { - if (!e) - return; - if (useragent.isWebKit && !e.which && self.releaseMouse) - return self.releaseMouse(); - self.x = e.clientX; - self.y = e.clientY; - mouseMoveHandler && mouseMoveHandler(e); - self.mouseEvent = new MouseEvent(e, self.editor); - self.$mouseMoved = true; - }; - var onCaptureEnd = function (e) { - editor.off("beforeEndOperation", onOperationEnd); - continueCapture = false; - if (editor.session) - onCaptureUpdate(); - self[self.state + "End"] && self[self.state + "End"](e); - self.state = ""; - self.isMousePressed = renderer.$isMousePressed = false; - if (renderer.$keepTextAreaAtCursor) - renderer.$moveTextAreaToCursor(); - self.$onCaptureMouseMove = self.releaseMouse = null; - e && self.onMouseEvent("mouseup", e); - editor.endOperation(); - }; - var onCaptureUpdate = function () { - self[self.state] && self[self.state](); - self.$mouseMoved = false; - }; - var onCaptureInterval = function () { - if (continueCapture) { - onCaptureUpdate(); - event.nextFrame(onCaptureInterval); - } - }; - if (useragent.isOldIE && ev.domEvent.type == "dblclick") { - return setTimeout(function () { onCaptureEnd(ev); }); - } - var onOperationEnd = function (e) { - if (!self.releaseMouse) - return; - if (editor.curOp.command.name && editor.curOp.selectionChanged) { - self[self.state + "End"] && self[self.state + "End"](); - self.state = ""; - self.releaseMouse(); - } - }; - editor.on("beforeEndOperation", onOperationEnd); - editor.startOperation({ command: { name: "mouse" } }); - self.$onCaptureMouseMove = onMouseMove; - self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd); - onCaptureInterval(); - }; - MouseHandler.prototype.cancelContextMenu = function () { - var stop = function (e) { - if (e && e.domEvent && e.domEvent.type != "contextmenu") - return; - this.editor.off("nativecontextmenu", stop); - if (e && e.domEvent) - event.stopEvent(e.domEvent); - }.bind(this); - setTimeout(stop, 10); - this.editor.on("nativecontextmenu", stop); - }; - MouseHandler.prototype.destroy = function () { - if (this.releaseMouse) - this.releaseMouse(); - }; - return MouseHandler; -}()); -MouseHandler.prototype.releaseMouse = null; -config.defineOptions(MouseHandler.prototype, "mouseHandler", { - scrollSpeed: { initialValue: 2 }, - dragDelay: { initialValue: (useragent.isMac ? 150 : 0) }, - dragEnabled: { initialValue: true }, - focusTimeout: { initialValue: 0 }, - tooltipFollowsMouse: { initialValue: true } -}); -exports.MouseHandler = MouseHandler; -}); + this.length = Math.max(this.length, i); -ace.define("ace/mouse/fold_handler",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var FoldHandler = /** @class */ (function () { - function FoldHandler(editor) { - editor.on("click", function (e) { - var position = e.getDocumentPosition(); - var session = editor.session; - var fold = session.getFoldAt(position.row, position.column, 1); - if (fold) { - if (e.getAccelKey()) - session.removeFold(fold); - else - session.expandFold(fold); - e.stop(); - } - var target = e.domEvent && e.domEvent.target; - if (target && dom.hasCssClass(target, "ace_inline_button")) { - if (dom.hasCssClass(target, "ace_toggle_wrap")) { - session.setOption("wrap", !session.getUseWrapMode()); - editor.renderer.scrollCursorIntoView(); - } - } - }); - editor.on("gutterclick", function (e) { - var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); - if (gutterRegion == "foldWidgets") { - var row = e.getDocumentPosition().row; - var session = editor.session; - if (session.foldWidgets && session.foldWidgets[row]) - editor.session.onFoldWidgetClick(row, e); - if (!editor.isFocused()) - editor.focus(); - e.stop(); - } - }); - editor.on("gutterdblclick", function (e) { - var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); - if (gutterRegion == "foldWidgets") { - var row = e.getDocumentPosition().row; - var session = editor.session; - var data = session.getParentFoldRangeData(row, true); - var range = data.range || data.firstRange; - if (range) { - row = range.start.row; - var fold = session.getFoldAt(row, session.getLine(row).length, 1); - if (fold) { - session.removeFold(fold); - } - else { - session.addFold("...", range); - editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 }); - } - } - e.stop(); - } - }); + if (a !== this) { + this.negative = 1; } - return FoldHandler; -}()); -exports.FoldHandler = FoldHandler; -}); + return this.strip(); + }; -ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"], function(require, exports, module){"use strict"; -var keyUtil = require("../lib/keys"); -var event = require("../lib/event"); -var KeyBinding = /** @class */ (function () { - function KeyBinding(editor) { - this.$editor = editor; - this.$data = { editor: editor }; - this.$handlers = []; - this.setDefaultHandler(editor.commands); + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; } - KeyBinding.prototype.setDefaultHandler = function (kb) { - this.removeKeyboardHandler(this.$defaultHandler); - this.$defaultHandler = kb; - this.addKeyboardHandler(kb, 0); - }; - KeyBinding.prototype.setKeyboardHandler = function (kb) { - var h = this.$handlers; - if (h[h.length - 1] == kb) - return; - while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) - this.removeKeyboardHandler(h[h.length - 1]); - this.addKeyboardHandler(kb, 1); - }; - KeyBinding.prototype.addKeyboardHandler = function (kb, pos) { - if (!kb) - return; - if (typeof kb == "function" && !kb.handleKeyboard) - kb.handleKeyboard = kb; - var i = this.$handlers.indexOf(kb); - if (i != -1) - this.$handlers.splice(i, 1); - if (pos == undefined) - this.$handlers.push(kb); - else - this.$handlers.splice(pos, 0, kb); - if (i == -1 && kb.attach) - kb.attach(this.$editor); - }; - KeyBinding.prototype.removeKeyboardHandler = function (kb) { - var i = this.$handlers.indexOf(kb); - if (i == -1) - return false; - this.$handlers.splice(i, 1); - kb.detach && kb.detach(this.$editor); - return true; - }; - KeyBinding.prototype.getKeyboardHandler = function () { - return this.$handlers[this.$handlers.length - 1]; - }; - KeyBinding.prototype.getStatusText = function () { - var data = this.$data; - var editor = data.editor; - return this.$handlers.map(function (h) { - return h.getStatusText && h.getStatusText(editor, data) || ""; - }).filter(Boolean).join(" "); - }; - KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) { - var toExecute; - var success = false; - var commands = this.$editor.commands; - for (var i = this.$handlers.length; i--;) { - toExecute = this.$handlers[i].handleKeyboard( - this.$data, hashId, keyString, keyCode, e); - if (!toExecute || !toExecute.command) - continue; - if (toExecute.command == "null") { - success = true; - } - else { - success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); - } - if (success && e && hashId != -1 && - toExecute["passEvent"] != true && toExecute.command["passEvent"] != true) { - event.stopEvent(e); - } - if (success) - break; - } - if (!success && hashId == -1) { - toExecute = { command: "insertstring" }; - success = commands.exec("insertstring", this.$editor, keyString); - } - if (success && this.$editor._signal) - this.$editor._signal("keyboardActivity", toExecute); - return success; - }; - KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) { - var keyString = keyUtil.keyCodeToString(keyCode); - return this.$callKeyboardHandlers(hashId, keyString, keyCode, e); - }; - KeyBinding.prototype.onTextInput = function (text) { - return this.$callKeyboardHandlers(-1, text); - }; - return KeyBinding; -}()); -exports.KeyBinding = KeyBinding; - -}); - -ace.define("ace/lib/bidiutil",["require","exports","module"], function(require, exports, module){"use strict"; -var ArabicAlefBetIntervalsBegine = ['\u0621', '\u0641']; -var ArabicAlefBetIntervalsEnd = ['\u063A', '\u064a']; -var dir = 0, hiLevel = 0; -var lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false; -var impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0] -]; -var impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1] -]; -var LTR = 0, RTL = 1; -var L = 0; -var R = 1; -var EN = 2; -var AN = 3; -var ON = 4; -var B = 5; -var S = 6; -var AL = 7; -var WS = 8; -var CS = 9; -var ES = 10; -var ET = 11; -var NSM = 12; -var LRE = 13; -var RLE = 14; -var PDF = 15; -var LRO = 16; -var RLO = 17; -var BN = 18; -var UnicodeTBL00 = [ - BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN, - BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S, - WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS, - EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON, - ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, - L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, - ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, - L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN, - BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, - BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, - CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON, - ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON -]; -var UnicodeTBL20 = [ - WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R, - ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, - ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS, - ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, - ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, - ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS -]; -function _computeLevels(chars, levels, len, charTypes) { - var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = []; - if (!charTypes) { - for (i = 0, charTypes = []; i < len; i++) { - charTypes[i] = _getCharacterType(chars[i]); - } - } - hiLevel = dir; - lastArabic = false; - hasUBAT_AL = false; - hasUBAT_B = false; - hasUBAT_S = false; - for (ix = 0; ix < len; ix++) { - prevState = newState; - classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix); - newState = impTab[prevState][newClass]; - action = newState & 0xF0; - newState &= 0x0F; - levels[ix] = newLevel = impTab[newState][5]; - if (action > 0) { - if (action == 0x10) { - for (i = condPos; i < ix; i++) { - levels[i] = 1; - } - condPos = -1; - } - else { - condPos = -1; - } - } - cond = impTab[newState][6]; - if (cond) { - if (condPos == -1) { - condPos = ix; - } - } - else { - if (condPos > -1) { - for (i = condPos; i < ix; i++) { - levels[i] = newLevel; - } - condPos = -1; - } - } - if (charTypes[ix] == B) { - levels[ix] = 0; - } - hiLevel |= newLevel; - } - if (hasUBAT_S) { - for (i = 0; i < len; i++) { - if (charTypes[i] == S) { - levels[i] = dir; - for (var j = i - 1; j >= 0; j--) { - if (charTypes[j] == WS) { - levels[j] = dir; - } - else { - break; - } - } - } - } - } -} -function _invertLevel(lev, levels, _array) { - if (hiLevel < lev) { - return; - } - if (lev == 1 && dir == RTL && !hasUBAT_B) { - _array.reverse(); - return; - } - var len = _array.length, start = 0, end, lo, hi, tmp; - while (start < len) { - if (levels[start] >= lev) { - end = start + 1; - while (end < len && levels[end] >= lev) { - end++; - } - for (lo = start, hi = end - 1; lo < hi; lo++, hi--) { - tmp = _array[lo]; - _array[lo] = _array[hi]; - _array[hi] = tmp; - } - start = end; - } - start++; - } -} -function _getCharClass(chars, types, classes, ix) { - var cType = types[ix], wType, nType, len, i; - switch (cType) { - case L: - case R: - lastArabic = false; - case ON: - case AN: - return cType; - case EN: - return lastArabic ? AN : EN; - case AL: - lastArabic = true; - hasUBAT_AL = true; - return R; - case WS: - return ON; - case CS: - if (ix < 1 || (ix + 1) >= types.length || - ((wType = classes[ix - 1]) != EN && wType != AN) || - ((nType = types[ix + 1]) != EN && nType != AN)) { - return ON; - } - if (lastArabic) { - nType = AN; - } - return nType == wType ? nType : ON; - case ES: - wType = ix > 0 ? classes[ix - 1] : B; - if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) { - return EN; - } - return ON; - case ET: - if (ix > 0 && classes[ix - 1] == EN) { - return EN; - } - if (lastArabic) { - return ON; - } - i = ix + 1; - len = types.length; - while (i < len && types[i] == ET) { - i++; - } - if (i < len && types[i] == EN) { - return EN; - } - return ON; - case NSM: - len = types.length; - i = ix + 1; - while (i < len && types[i] == NSM) { - i++; - } - if (i < len) { - var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E; - wType = types[i]; - if (rtlCandidate && (wType == R || wType == AL)) { - return R; - } - } - if (ix < 1 || (wType = types[ix - 1]) == B) { - return ON; - } - return classes[ix - 1]; - case B: - lastArabic = false; - hasUBAT_B = true; - return dir; - case S: - hasUBAT_S = true; - return ON; - case LRE: - case RLE: - case LRO: - case RLO: - case PDF: - lastArabic = false; - case BN: - return ON; - } -} -function _getCharacterType(ch) { - var uc = ch.charCodeAt(0), hi = uc >> 8; - if (hi == 0) { - return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]); - } - else if (hi == 5) { - return (/[\u0591-\u05f4]/.test(ch) ? R : L); - } - else if (hi == 6) { - if (/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(ch)) - return NSM; - else if (/[\u0660-\u0669\u066b-\u066c]/.test(ch)) - return AN; - else if (uc == 0x066A) - return ET; - else if (/[\u06f0-\u06f9]/.test(ch)) - return EN; - else - return AL; - } - else if (hi == 0x20 && uc <= 0x205F) { - return UnicodeTBL20[uc & 0xFF]; - } - else if (hi == 0xFE) { - return (uc >= 0xFE70 ? AL : ON); - } - return ON; -} -function _isArabicDiacritics(ch) { - return (ch >= '\u064b' && ch <= '\u0655'); -} -exports.L = L; -exports.R = R; -exports.EN = EN; -exports.ON_R = 3; -exports.AN = 4; -exports.R_H = 5; -exports.B = 6; -exports.RLE = 7; -exports.DOT = "\xB7"; -exports.doBidiReorder = function (text, textCharTypes, isRtl) { - if (text.length < 2) - return {}; - var chars = text.split(""), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = []; - dir = isRtl ? RTL : LTR; - _computeLevels(chars, levels, chars.length, textCharTypes); - for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++) - ; - _invertLevel(2, levels, logicalFromVisual); - _invertLevel(1, levels, logicalFromVisual); - for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width - if (textCharTypes[i] === AN) { - levels[i] = exports.AN; - } - else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) - || textCharTypes[i] === ON || textCharTypes[i] === BN)) { - levels[i] = exports.ON_R; - } - else if ((i > 0 && chars[i - 1] === '\u0644') && /\u0622|\u0623|\u0625|\u0627/.test(chars[i])) { - levels[i - 1] = levels[i] = exports.R_H; - i++; - } - } - if (chars[chars.length - 1] === exports.DOT) - levels[chars.length - 1] = exports.B; - if (chars[0] === '\u202B') - levels[0] = exports.RLE; - for (var i = 0; i < logicalFromVisual.length; i++) { - bidiLevels[i] = levels[logicalFromVisual[i]]; - } - return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels }; -}; -exports.hasBidiCharacters = function (text, textCharTypes) { - var ret = false; - for (var i = 0; i < text.length; i++) { - textCharTypes[i] = _getCharacterType(text.charAt(i)); - if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN)) - ret = true; - } - return ret; -}; -exports.getVisualFromLogicalIdx = function (logIdx, rowMap) { - for (var i = 0; i < rowMap.logicalFromVisual.length; i++) { - if (rowMap.logicalFromVisual[i] == logIdx) - return i; + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; } - return 0; -}; -}); + return out.strip(); + } -ace.define("ace/bidihandler",["require","exports","module","ace/lib/bidiutil","ace/lib/lang"], function(require, exports, module){"use strict"; -var bidiUtil = require("./lib/bidiutil"); -var lang = require("./lib/lang"); -var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac\u202B]/; -var BidiHandler = /** @class */ (function () { - function BidiHandler(session) { - this.session = session; - this.bidiMap = {}; - this.currentRow = null; - this.bidiUtil = bidiUtil; - this.charWidths = []; - this.EOL = "\xAC"; - this.showInvisibles = true; - this.isRtlDir = false; - this.$isRtl = false; - this.line = ""; - this.wrapIndent = 0; - this.EOF = "\xB6"; - this.RLE = "\u202B"; - this.contentWidth = 0; - this.fontMetrics = null; - this.rtlLineOffset = 0; - this.wrapOffset = 0; - this.isMoveLeftOperation = false; - this.seenBidi = bidiRE.test(session.getValue()); - } - BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) { - if (!this.seenBidi) - return false; - if (screenRow !== this.currentRow) { - this.currentRow = screenRow; - this.updateRowLine(docRow, splitIndex); - this.updateBidiMap(); - } - return this.bidiMap.bidiLevels; - }; - BidiHandler.prototype.onChange = function (delta) { - if (!this.seenBidi) { - if (delta.action == "insert" && bidiRE.test(delta.lines.join("\n"))) { - this.seenBidi = true; - this.currentRow = null; - } - } - else { - this.currentRow = null; - } - }; - BidiHandler.prototype.getDocumentRow = function () { - var docRow = 0; - var rowCache = this.session.$screenRowCache; - if (rowCache.length) { - var index = this.session.$getRowCacheIndex(rowCache, this.currentRow); - if (index >= 0) - docRow = this.session.$docRowCache[index]; - } - return docRow; - }; - BidiHandler.prototype.getSplitIndex = function () { - var splitIndex = 0; - var rowCache = this.session.$screenRowCache; - if (rowCache.length) { - var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow); - while (this.currentRow - splitIndex > 0) { - currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1); - if (currentIndex !== prevIndex) - break; - prevIndex = currentIndex; - splitIndex++; - } - } - else { - splitIndex = this.currentRow; - } - return splitIndex; - }; - BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) { - if (docRow === undefined) - docRow = this.getDocumentRow(); - var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL; - this.wrapIndent = 0; - this.line = this.session.getLine(docRow); - this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE; - if (this.session.$useWrapMode) { - var splits = this.session.$wrapData[docRow]; - if (splits) { - if (splitIndex === undefined) - splitIndex = this.getSplitIndex(); - if (splitIndex > 0 && splits.length) { - this.wrapIndent = splits.indent; - this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L]; - this.line = (splitIndex < splits.length) ? - this.line.substring(splits[splitIndex - 1], splits[splitIndex]) : - this.line.substring(splits[splits.length - 1]); - } - else { - this.line = this.line.substring(0, splits[splitIndex]); - } - if (splitIndex == splits.length) { - this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT; - } - } - } - else { - this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT; - } - var session = this.session, shift = 0, size; - this.line = this.line.replace(/\t|[\u1100-\u2029, \u202F-\uFFE6]/g, function (ch, i) { - if (ch === '\t' || session.isFullWidth(ch.charCodeAt(0))) { - size = (ch === '\t') ? session.getScreenTabSize(i + shift) : 2; - shift += size - 1; - return lang.stringRepeat(bidiUtil.DOT, size); - } - return ch; - }); - if (this.isRtlDir) { - this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line; - this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width; - } - }; - BidiHandler.prototype.updateBidiMap = function () { - var textCharTypes = []; - if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) { - this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir); - } - else { - this.bidiMap = {}; - } - }; - BidiHandler.prototype.markAsDirty = function () { - this.currentRow = null; - }; - BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) { - if (this.characterWidth === fontMetrics.$characterSize.width) - return; - this.fontMetrics = fontMetrics; - var characterWidth = this.characterWidth = fontMetrics.$characterSize.width; - var bidiCharWidth = fontMetrics.$measureCharWidth("\u05d4"); - this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth; - this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth; - this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45; - this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0; - this.currentRow = null; - }; - BidiHandler.prototype.setShowInvisibles = function (showInvisibles) { - this.showInvisibles = showInvisibles; - this.currentRow = null; - }; - BidiHandler.prototype.setEolChar = function (eolChar) { - this.EOL = eolChar; - }; - BidiHandler.prototype.setContentWidth = function (width) { - this.contentWidth = width; - }; - BidiHandler.prototype.isRtlLine = function (row) { - if (this.$isRtl) - return true; - if (row != undefined) - return (this.session.getLine(row).charAt(0) == this.RLE); - else - return this.isRtlDir; - }; - BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) { - var cursor = editor.getCursorPosition(); - for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) { - if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE) - editor.session.doc.removeInLine(row, 0, 1); - else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE) - editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE); - } - }; - BidiHandler.prototype.getPosLeft = function (col) { - col -= this.wrapIndent; - var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0; - var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary; - var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0; - if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0) - visualIdx++; - for (var i = 0; i < visualIdx; i++) { - left += this.charWidths[levels[i]]; - } - if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0)) - left += this.charWidths[levels[visualIdx]]; - if (this.wrapIndent) - left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; - if (this.isRtlDir) - left += this.rtlLineOffset; - return left; - }; - BidiHandler.prototype.getSelections = function (startCol, endCol) { - var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0; - if (this.wrapIndent) - offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; - for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) { - logIdx = map.logicalFromVisual[visIdx]; - level = levels[visIdx]; - isSelected = (logIdx >= selColMin) && (logIdx < selColMax); - if (isSelected && !isSelectedPrev) { - selectionStart = offset; - } - else if (!isSelected && isSelectedPrev) { - selections.push({ left: selectionStart, width: offset - selectionStart }); - } - offset += this.charWidths[level]; - isSelectedPrev = isSelected; - } - if (isSelected && (visIdx === levels.length)) { - selections.push({ left: selectionStart, width: offset - selectionStart }); - } - if (this.isRtlDir) { - for (var i = 0; i < selections.length; i++) { - selections[i].left += this.rtlLineOffset; - } - } - return selections; - }; - BidiHandler.prototype.offsetToCol = function (posX) { - if (this.isRtlDir) - posX -= this.rtlLineOffset; - var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]]; - if (this.wrapIndent) - posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; - while (posX > offset + charWidth / 2) { - offset += charWidth; - if (visualIdx === levels.length - 1) { - charWidth = 0; - break; - } - charWidth = this.charWidths[levels[++visualIdx]]; - } - if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) { - if (posX < offset) - visualIdx--; - logicalIdx = this.bidiMap.logicalFromVisual[visualIdx]; - } - else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) { - logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx] - : this.bidiMap.logicalFromVisual[visualIdx - 1]); - } - else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0)) - || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) { - logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx]; - } - else { - if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0) - visualIdx--; - logicalIdx = this.bidiMap.logicalFromVisual[visualIdx]; - } - if (logicalIdx === 0 && this.isRtlDir) - logicalIdx++; - return (logicalIdx + this.wrapIndent); - }; - return BidiHandler; -}()); -exports.BidiHandler = BidiHandler; - -}); - -ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var lang = require("./lib/lang"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Range = require("./range").Range; -var Selection = /** @class */ (function () { - function Selection(session) { - this.session = session; - this.doc = session.getDocument(); - this.clearSelection(); - this.cursor = this.lead = this.doc.createAnchor(0, 0); - this.anchor = this.doc.createAnchor(0, 0); - this.$silent = false; - var self = this; - this.cursor.on("change", function (e) { - self.$cursorChanged = true; - if (!self.$silent) - self._emit("changeCursor"); - if (!self.$isEmpty && !self.$silent) - self._emit("changeSelection"); - if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) - self.$desiredColumn = null; - }); - this.anchor.on("change", function () { - self.$anchorChanged = true; - if (!self.$isEmpty && !self.$silent) - self._emit("changeSelection"); - }); - } - Selection.prototype.isEmpty = function () { - return this.$isEmpty || (this.anchor.row == this.lead.row && - this.anchor.column == this.lead.column); - }; - Selection.prototype.isMultiLine = function () { - return !this.$isEmpty && this.anchor.row != this.cursor.row; - }; - Selection.prototype.getCursor = function () { - return this.lead.getPosition(); - }; - Selection.prototype.setAnchor = function (row, column) { - this.$isEmpty = false; - this.anchor.setPosition(row, column); - }; - Selection.prototype.getAnchor = function () { - if (this.$isEmpty) - return this.getSelectionLead(); - return this.anchor.getPosition(); - }; - Selection.prototype.getSelectionLead = function () { - return this.lead.getPosition(); - }; - Selection.prototype.isBackwards = function () { - var anchor = this.anchor; - var lead = this.lead; - return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); - }; - Selection.prototype.getRange = function () { - var anchor = this.anchor; - var lead = this.lead; - if (this.$isEmpty) - return Range.fromPoints(lead, lead); - return this.isBackwards() - ? Range.fromPoints(lead, anchor) - : Range.fromPoints(anchor, lead); - }; - Selection.prototype.clearSelection = function () { - if (!this.$isEmpty) { - this.$isEmpty = true; - this._emit("changeSelection"); - } - }; - Selection.prototype.selectAll = function () { - this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE); - }; - Selection.prototype.setRange = function (range, reverse) { - var start = reverse ? range.end : range.start; - var end = reverse ? range.start : range.end; - this.$setSelection(start.row, start.column, end.row, end.column); - }; - Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) { - if (this.$silent) - return; - var wasEmpty = this.$isEmpty; - var wasMultiselect = this.inMultiSelectMode; - this.$silent = true; - this.$cursorChanged = this.$anchorChanged = false; - this.anchor.setPosition(anchorRow, anchorColumn); - this.cursor.setPosition(cursorRow, cursorColumn); - this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor); - this.$silent = false; - if (this.$cursorChanged) - this._emit("changeCursor"); - if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect) - this._emit("changeSelection"); - }; - Selection.prototype.$moveSelection = function (mover) { - var lead = this.lead; - if (this.$isEmpty) - this.setSelectionAnchor(lead.row, lead.column); - mover.call(this); - }; - Selection.prototype.selectTo = function (row, column) { - this.$moveSelection(function () { - this.moveCursorTo(row, column); - }); - }; - Selection.prototype.selectToPosition = function (pos) { - this.$moveSelection(function () { - this.moveCursorToPosition(pos); - }); - }; - Selection.prototype.moveTo = function (row, column) { - this.clearSelection(); - this.moveCursorTo(row, column); - }; - Selection.prototype.moveToPosition = function (pos) { - this.clearSelection(); - this.moveCursorToPosition(pos); - }; - Selection.prototype.selectUp = function () { - this.$moveSelection(this.moveCursorUp); - }; - Selection.prototype.selectDown = function () { - this.$moveSelection(this.moveCursorDown); - }; - Selection.prototype.selectRight = function () { - this.$moveSelection(this.moveCursorRight); - }; - Selection.prototype.selectLeft = function () { - this.$moveSelection(this.moveCursorLeft); - }; - Selection.prototype.selectLineStart = function () { - this.$moveSelection(this.moveCursorLineStart); - }; - Selection.prototype.selectLineEnd = function () { - this.$moveSelection(this.moveCursorLineEnd); - }; - Selection.prototype.selectFileEnd = function () { - this.$moveSelection(this.moveCursorFileEnd); - }; - Selection.prototype.selectFileStart = function () { - this.$moveSelection(this.moveCursorFileStart); - }; - Selection.prototype.selectWordRight = function () { - this.$moveSelection(this.moveCursorWordRight); - }; - Selection.prototype.selectWordLeft = function () { - this.$moveSelection(this.moveCursorWordLeft); - }; - Selection.prototype.getWordRange = function (row, column) { - if (typeof column == "undefined") { - var cursor = row || this.lead; - row = cursor.row; - column = cursor.column; - } - return this.session.getWordRange(row, column); - }; - Selection.prototype.selectWord = function () { - this.setSelectionRange(this.getWordRange()); - }; - Selection.prototype.selectAWord = function () { - var cursor = this.getCursor(); - var range = this.session.getAWordRange(cursor.row, cursor.column); - this.setSelectionRange(range); - }; - Selection.prototype.getLineRange = function (row, excludeLastChar) { - var rowStart = typeof row == "number" ? row : this.lead.row; - var rowEnd; - var foldLine = this.session.getFoldLine(rowStart); - if (foldLine) { - rowStart = foldLine.start.row; - rowEnd = foldLine.end.row; - } - else { - rowEnd = rowStart; - } - if (excludeLastChar === true) - return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); - else - return new Range(rowStart, 0, rowEnd + 1, 0); - }; - Selection.prototype.selectLine = function () { - this.setSelectionRange(this.getLineRange()); - }; - Selection.prototype.moveCursorUp = function () { - this.moveCursorBy(-1, 0); - }; - Selection.prototype.moveCursorDown = function () { - this.moveCursorBy(1, 0); - }; - Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) { - var start = cursor.column; - var end = cursor.column + tabSize; - if (direction < 0) { - start = cursor.column - tabSize; - end = cursor.column; - } - return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(" ").length - 1 == tabSize; - }; - Selection.prototype.moveCursorLeft = function () { - var cursor = this.lead.getPosition(), fold; - if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { - this.moveCursorTo(fold.start.row, fold.start.column); - } - else if (cursor.column === 0) { - if (cursor.row > 0) { - this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); - } - } - else { - var tabSize = this.session.getTabSize(); - if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) { - this.moveCursorBy(0, -tabSize); - } - else { - this.moveCursorBy(0, -1); - } - } - }; - Selection.prototype.moveCursorRight = function () { - var cursor = this.lead.getPosition(), fold; - if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { - this.moveCursorTo(fold.end.row, fold.end.column); - } - else if (this.lead.column == this.doc.getLine(this.lead.row).length) { - if (this.lead.row < this.doc.getLength() - 1) { - this.moveCursorTo(this.lead.row + 1, 0); - } - } - else { - var tabSize = this.session.getTabSize(); - var cursor = this.lead; - if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) { - this.moveCursorBy(0, tabSize); - } - else { - this.moveCursorBy(0, 1); - } - } - }; - Selection.prototype.moveCursorLineStart = function () { - var row = this.lead.row; - var column = this.lead.column; - var screenRow = this.session.documentToScreenRow(row, column); - var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); - var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column); - var leadingSpace = beforeCursor.match(/^\s*/); - if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) - firstColumnPosition.column += leadingSpace[0].length; - this.moveCursorToPosition(firstColumnPosition); - }; - Selection.prototype.moveCursorLineEnd = function () { - var lead = this.lead; - var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); - if (this.lead.column == lineEnd.column) { - var line = this.session.getLine(lineEnd.row); - if (lineEnd.column == line.length) { - var textEnd = line.search(/\s+$/); - if (textEnd > 0) - lineEnd.column = textEnd; - } - } - this.moveCursorTo(lineEnd.row, lineEnd.column); - }; - Selection.prototype.moveCursorFileEnd = function () { - var row = this.doc.getLength() - 1; - var column = this.doc.getLine(row).length; - this.moveCursorTo(row, column); - }; - Selection.prototype.moveCursorFileStart = function () { - this.moveCursorTo(0, 0); - }; - Selection.prototype.moveCursorLongWordRight = function () { - var row = this.lead.row; - var column = this.lead.column; - var line = this.doc.getLine(row); - var rightOfCursor = line.substring(column); - this.session.nonTokenRe.lastIndex = 0; - this.session.tokenRe.lastIndex = 0; - var fold = this.session.getFoldAt(row, column, 1); - if (fold) { - this.moveCursorTo(fold.end.row, fold.end.column); - return; - } - if (this.session.nonTokenRe.exec(rightOfCursor)) { - column += this.session.nonTokenRe.lastIndex; - this.session.nonTokenRe.lastIndex = 0; - rightOfCursor = line.substring(column); - } - if (column >= line.length) { - this.moveCursorTo(row, line.length); - this.moveCursorRight(); - if (row < this.doc.getLength() - 1) - this.moveCursorWordRight(); - return; - } - if (this.session.tokenRe.exec(rightOfCursor)) { - column += this.session.tokenRe.lastIndex; - this.session.tokenRe.lastIndex = 0; - } - this.moveCursorTo(row, column); - }; - Selection.prototype.moveCursorLongWordLeft = function () { - var row = this.lead.row; - var column = this.lead.column; - var fold; - if (fold = this.session.getFoldAt(row, column, -1)) { - this.moveCursorTo(fold.start.row, fold.start.column); - return; - } - var str = this.session.getFoldStringAt(row, column, -1); - if (str == null) { - str = this.doc.getLine(row).substring(0, column); - } - var leftOfCursor = lang.stringReverse(str); - this.session.nonTokenRe.lastIndex = 0; - this.session.tokenRe.lastIndex = 0; - if (this.session.nonTokenRe.exec(leftOfCursor)) { - column -= this.session.nonTokenRe.lastIndex; - leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); - this.session.nonTokenRe.lastIndex = 0; - } - if (column <= 0) { - this.moveCursorTo(row, 0); - this.moveCursorLeft(); - if (row > 0) - this.moveCursorWordLeft(); - return; - } - if (this.session.tokenRe.exec(leftOfCursor)) { - column -= this.session.tokenRe.lastIndex; - this.session.tokenRe.lastIndex = 0; - } - this.moveCursorTo(row, column); - }; - Selection.prototype.$shortWordEndIndex = function (rightOfCursor) { - var index = 0, ch; - var whitespaceRe = /\s/; - var tokenRe = this.session.tokenRe; - tokenRe.lastIndex = 0; - if (this.session.tokenRe.exec(rightOfCursor)) { - index = this.session.tokenRe.lastIndex; - } - else { - while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) - index++; - if (index < 1) { - tokenRe.lastIndex = 0; - while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { - tokenRe.lastIndex = 0; - index++; - if (whitespaceRe.test(ch)) { - if (index > 2) { - index--; - break; - } - else { - while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) - index++; - if (index > 2) - break; - } - } - } - } - } - tokenRe.lastIndex = 0; - return index; - }; - Selection.prototype.moveCursorShortWordRight = function () { - var row = this.lead.row; - var column = this.lead.column; - var line = this.doc.getLine(row); - var rightOfCursor = line.substring(column); - var fold = this.session.getFoldAt(row, column, 1); - if (fold) - return this.moveCursorTo(fold.end.row, fold.end.column); - if (column == line.length) { - var l = this.doc.getLength(); - do { - row++; - rightOfCursor = this.doc.getLine(row); - } while (row < l && /^\s*$/.test(rightOfCursor)); - if (!/^\s+/.test(rightOfCursor)) - rightOfCursor = ""; - column = 0; - } - var index = this.$shortWordEndIndex(rightOfCursor); - this.moveCursorTo(row, column + index); - }; - Selection.prototype.moveCursorShortWordLeft = function () { - var row = this.lead.row; - var column = this.lead.column; - var fold; - if (fold = this.session.getFoldAt(row, column, -1)) - return this.moveCursorTo(fold.start.row, fold.start.column); - var line = this.session.getLine(row).substring(0, column); - if (column === 0) { - do { - row--; - line = this.doc.getLine(row); - } while (row > 0 && /^\s*$/.test(line)); - column = line.length; - if (!/\s+$/.test(line)) - line = ""; - } - var leftOfCursor = lang.stringReverse(line); - var index = this.$shortWordEndIndex(leftOfCursor); - return this.moveCursorTo(row, column - index); - }; - Selection.prototype.moveCursorWordRight = function () { - if (this.session.$selectLongWords) - this.moveCursorLongWordRight(); - else - this.moveCursorShortWordRight(); - }; - Selection.prototype.moveCursorWordLeft = function () { - if (this.session.$selectLongWords) - this.moveCursorLongWordLeft(); - else - this.moveCursorShortWordLeft(); - }; - Selection.prototype.moveCursorBy = function (rows, chars) { - var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column); - var offsetX; - if (chars === 0) { - if (rows !== 0) { - if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) { - offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column); - screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]); - } - else { - offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0]; - } - } - if (this.$desiredColumn) - screenPos.column = this.$desiredColumn; - else - this.$desiredColumn = screenPos.column; - } - if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) { - var widget = this.session.lineWidgets[this.lead.row]; - if (rows < 0) - rows -= widget.rowsAbove || 0; - else if (rows > 0) - rows += widget.rowCount - (widget.rowsAbove || 0); - } - var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX); - if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { - } - this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); - }; - Selection.prototype.moveCursorToPosition = function (position) { - this.moveCursorTo(position.row, position.column); - }; - Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) { - var fold = this.session.getFoldAt(row, column, 1); - if (fold) { - row = fold.start.row; - column = fold.start.column; - } - this.$keepDesiredColumnOnChange = true; - var line = this.session.getLine(row); - if (/[\uDC00-\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) { - if (this.lead.row == row && this.lead.column == column + 1) - column = column - 1; - else - column = column + 1; - } - this.lead.setPosition(row, column); - this.$keepDesiredColumnOnChange = false; - if (!keepDesiredColumn) - this.$desiredColumn = null; - }; - Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) { - var pos = this.session.screenToDocumentPosition(row, column); - this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); - }; - Selection.prototype.detach = function () { - this.lead.detach(); - this.anchor.detach(); - }; - Selection.prototype.fromOrientedRange = function (range) { - this.setSelectionRange(range, range.cursor == range.start); - this.$desiredColumn = range.desiredColumn || this.$desiredColumn; - }; - Selection.prototype.toOrientedRange = function (range) { - var r = this.getRange(); - if (range) { - range.start.column = r.start.column; - range.start.row = r.start.row; - range.end.column = r.end.column; - range.end.row = r.end.row; - } - else { - range = r; - } - range.cursor = this.isBackwards() ? range.start : range.end; - range.desiredColumn = this.$desiredColumn; - return range; - }; - Selection.prototype.getRangeOfMovements = function (func) { - var start = this.getCursor(); - try { - func(this); - var end = this.getCursor(); - return Range.fromPoints(start, end); - } - catch (e) { - return Range.fromPoints(start, start); - } - finally { - this.moveCursorToPosition(start); - } - }; - Selection.prototype.toJSON = function () { - if (this.rangeCount) { var data = this.ranges.map(function (r) { - var r1 = r.clone(); - r1.isBackwards = r.cursor == r.start; - return r1; - }); - } - else { var data = this.getRange(); - data.isBackwards = this.isBackwards(); - } - return data; - }; - Selection.prototype.fromJSON = function (data) { - if (data.start == undefined) { - if (this.rangeList && data.length > 1) { - this.toSingleRange(data[0]); - for (var i = data.length; i--;) { - var r = Range.fromPoints(data[i].start, data[i].end); - if (data[i].isBackwards) - r.cursor = r.start; - this.addRange(r, true); - } - return; - } - else { - data = data[0]; - } - } - if (this.rangeList) - this.toSingleRange(data); - this.setSelectionRange(data, data.isBackwards); - }; - Selection.prototype.isEqual = function (data) { - if ((data.length || this.rangeCount) && data.length != this.rangeCount) - return false; - if (!data.length || !this.ranges) - return this.getRange().isEqual(data); - for (var i = this.ranges.length; i--;) { - if (!this.ranges[i].isEqual(data[i])) - return false; - } - return true; - }; - return Selection; -}()); -Selection.prototype.setSelectionAnchor = Selection.prototype.setAnchor; -Selection.prototype.getSelectionAnchor = Selection.prototype.getAnchor; -Selection.prototype.setSelectionRange = Selection.prototype.setRange; -oop.implement(Selection.prototype, EventEmitter); -exports.Selection = Selection; - -}); - -ace.define("ace/tokenizer",["require","exports","module","ace/lib/report_error"], function(require, exports, module){"use strict"; -var reportError = require("./lib/report_error").reportError; -var MAX_TOKEN_COUNT = 2000; -var Tokenizer = /** @class */ (function () { - function Tokenizer(rules) { - this.splitRegex; - this.states = rules; - this.regExps = {}; - this.matchMappings = {}; - for (var key in this.states) { - var state = this.states[key]; - var ruleRegExps = []; - var matchTotal = 0; - var mapping = this.matchMappings[key] = { defaultToken: "text" }; - var flag = "g"; - var splitterRurles = []; - for (var i = 0; i < state.length; i++) { - var rule = state[i]; - if (rule.defaultToken) - mapping.defaultToken = rule.defaultToken; - if (rule.caseInsensitive && flag.indexOf("i") === -1) - flag += "i"; - if (rule.unicode && flag.indexOf("u") === -1) - flag += "u"; - if (rule.regex == null) - continue; - if (rule.regex instanceof RegExp) - rule.regex = rule.regex.toString().slice(1, -1); - var adjustedregex = rule.regex; - var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; - if (Array.isArray(rule.token)) { - if (rule.token.length == 1 || matchcount == 1) { - rule.token = rule.token[0]; - } - else if (matchcount - 1 != rule.token.length) { - this.reportError("number of classes and regexp groups doesn't match", { - rule: rule, - groupCount: matchcount - 1 - }); - rule.token = rule.token[0]; - } - else { - rule.tokenArray = rule.token; - rule.token = null; - rule.onMatch = this.$arrayTokens; - } - } - else if (typeof rule.token == "function" && !rule.onMatch) { - if (matchcount > 1) - rule.onMatch = this.$applyToken; - else - rule.onMatch = rule.token; - } - if (matchcount > 1) { - if (/\\\d/.test(rule.regex)) { - adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function (match, digit) { - return "\\" + (parseInt(digit, 10) + matchTotal + 1); - }); - } - else { - matchcount = 1; - adjustedregex = this.removeCapturingGroups(rule.regex); - } - if (!rule.splitRegex && typeof rule.token != "string") - splitterRurles.push(rule); // flag will be known only at the very end - } - mapping[matchTotal] = i; - matchTotal += matchcount; - ruleRegExps.push(adjustedregex); - if (!rule.onMatch) - rule.onMatch = null; - } - if (!ruleRegExps.length) { - mapping[0] = 0; - ruleRegExps.push("$"); - } - splitterRurles.forEach(function (rule) { - rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); - }, this); - this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); - } - } - Tokenizer.prototype.$setMaxTokenCount = function (m) { - MAX_TOKEN_COUNT = m | 0; - }; - Tokenizer.prototype.$applyToken = function (str) { - var values = this.splitRegex.exec(str).slice(1); - var types = this.token.apply(this, values); - if (typeof types === "string") - return [{ type: types, value: str }]; - var tokens = []; - for (var i = 0, l = types.length; i < l; i++) { - if (values[i]) - tokens[tokens.length] = { - type: types[i], - value: values[i] - }; - } - return tokens; - }; - Tokenizer.prototype.$arrayTokens = function (str) { - if (!str) - return []; - var values = this.splitRegex.exec(str); - if (!values) - return "text"; - var tokens = []; - var types = this.tokenArray; - for (var i = 0, l = types.length; i < l; i++) { - if (values[i + 1]) - tokens[tokens.length] = { - type: types[i], - value: values[i + 1] - }; - } - return tokens; - }; - Tokenizer.prototype.removeCapturingGroups = function (src) { - var r = src.replace(/\\.|\[(?:\\.|[^\\\]])*|\(\?[:=!<]|(\()/g, function (x, y) { return y ? "(?:" : x; }); - return r; - }; - Tokenizer.prototype.createSplitterRegexp = function (src, flag) { - if (src.indexOf("(?=") != -1) { - var stack = 0; - var inChClass = false; - var lastCapture = {}; - src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function (m, esc, parenOpen, parenClose, square, index) { - if (inChClass) { - inChClass = square != "]"; - } - else if (square) { - inChClass = true; - } - else if (parenClose) { - if (stack == lastCapture.stack) { - lastCapture.end = index + 1; - lastCapture.stack = -1; - } - stack--; - } - else if (parenOpen) { - stack++; - if (parenOpen.length != 1) { - lastCapture.stack = stack; - lastCapture.start = index; - } - } - return m; - }); - if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) - src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); - } - if (src.charAt(0) != "^") - src = "^" + src; - if (src.charAt(src.length - 1) != "$") - src += "$"; - return new RegExp(src, (flag || "").replace("g", "")); - }; - Tokenizer.prototype.getLineTokens = function (line, startState) { - if (startState && typeof startState != "string") { - var stack = startState.slice(0); - startState = stack[0]; - if (startState === "#tmp") { - stack.shift(); - startState = stack.shift(); - } - } - else - var stack = []; - var currentState = /**@type{string}*/ (startState) || "start"; - var state = this.states[currentState]; - if (!state) { - currentState = "start"; - state = this.states[currentState]; - } - var mapping = this.matchMappings[currentState]; - var re = this.regExps[currentState]; - re.lastIndex = 0; - var match, tokens = []; - var lastIndex = 0; - var matchAttempts = 0; - var token = { type: null, value: "" }; - while (match = re.exec(line)) { - var type = mapping.defaultToken; - var rule = null; - var value = match[0]; - var index = re.lastIndex; - if (index - value.length > lastIndex) { - var skipped = line.substring(lastIndex, index - value.length); - if (token.type == type) { - token.value += skipped; - } - else { - if (token.type) - tokens.push(token); - token = { type: type, value: skipped }; - } - } - for (var i = 0; i < match.length - 2; i++) { - if (match[i + 1] === undefined) - continue; - rule = state[mapping[i]]; - if (rule.onMatch) - type = rule.onMatch(value, currentState, stack, line); - else - type = rule.token; - if (rule.next) { - if (typeof rule.next == "string") { - currentState = rule.next; - } - else { - currentState = rule.next(currentState, stack); - } - state = this.states[currentState]; - if (!state) { - this.reportError("state doesn't exist", currentState); - currentState = "start"; - state = this.states[currentState]; - } - mapping = this.matchMappings[currentState]; - lastIndex = index; - re = this.regExps[currentState]; - re.lastIndex = index; - } - if (rule.consumeLineEnd) - lastIndex = index; - break; - } - if (value) { - if (typeof type === "string") { - if ((!rule || rule.merge !== false) && token.type === type) { - token.value += value; - } - else { - if (token.type) - tokens.push(token); - token = { type: type, value: value }; - } - } - else if (type) { - if (token.type) - tokens.push(token); - token = { type: null, value: "" }; - for (var i = 0; i < type.length; i++) - tokens.push(type[i]); - } - } - if (lastIndex == line.length) - break; - lastIndex = index; - if (matchAttempts++ > MAX_TOKEN_COUNT) { - if (matchAttempts > 2 * line.length) { - this.reportError("infinite loop with in ace tokenizer", { - startState: startState, - line: line - }); - } - while (lastIndex < line.length) { - if (token.type) - tokens.push(token); - token = { - value: line.substring(lastIndex, lastIndex += 500), - type: "overflow" - }; - } - currentState = "start"; - stack = []; - break; - } - } - if (token.type) - tokens.push(token); - if (stack.length > 1) { - if (stack[0] !== currentState) - stack.unshift("#tmp", currentState); - } - return { - tokens: tokens, - state: stack.length ? stack : currentState - }; - }; - return Tokenizer; -}()); -Tokenizer.prototype.reportError = reportError; -exports.Tokenizer = Tokenizer; - -}); - -ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/deep_copy"], function(require, exports, module){"use strict"; -var deepCopy = require("../lib/deep_copy").deepCopy; -var TextHighlightRules; -TextHighlightRules = function () { - this.$rules = { - "start": [{ - token: "empty_line", - regex: '^$' - }, { - defaultToken: "text" - }] - }; -}; -(function () { - this.addRules = function (rules, prefix) { - if (!prefix) { - for (var key in rules) - this.$rules[key] = rules[key]; - return; - } - for (var key in rules) { - var state = rules[key]; - for (var i = 0; i < state.length; i++) { - var rule = state[i]; - if (rule.next || rule.onMatch) { - if (typeof rule.next == "string") { - if (rule.next.indexOf(prefix) !== 0) - rule.next = prefix + rule.next; - } - if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) - rule.nextState = prefix + rule.nextState; - } - } - this.$rules[prefix + key] = state; - } - }; - this.getRules = function () { - return this.$rules; - }; - this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { - var embedRules = typeof HighlightRules == "function" - ? new HighlightRules().getRules() - : HighlightRules; - if (states) { - for (var i = 0; i < states.length; i++) - states[i] = prefix + states[i]; - } - else { - states = []; - for (var key in embedRules) - states.push(prefix + key); - } - this.addRules(embedRules, prefix); - if (escapeRules) { - var addRules = Array.prototype[append ? "push" : "unshift"]; - for (var i = 0; i < states.length; i++) - addRules.apply(this.$rules[states[i]], deepCopy(escapeRules)); - } - if (!this.$embeds) - this.$embeds = []; - this.$embeds.push(prefix); - }; - this.getEmbeds = function () { - return this.$embeds; - }; - var pushState = function (currentState, stack) { - if (currentState != "start" || stack.length) - stack.unshift(this.nextState, currentState); - return this.nextState; - }; - var popState = function (currentState, stack) { - stack.shift(); - return stack.shift() || "start"; - }; - this.normalizeRules = function () { - var id = 0; - var rules = this.$rules; - function processState(key) { - var state = rules[key]; - state["processed"] = true; - for (var i = 0; i < state.length; i++) { - var rule = state[i]; - var toInsert = null; - if (Array.isArray(rule)) { - toInsert = rule; - rule = {}; - } - if (!rule.regex && rule.start) { - rule.regex = rule.start; - if (!rule.next) - rule.next = []; - rule.next.push({ - defaultToken: rule.token - }, { - token: rule.token + ".end", - regex: rule.end || rule.start, - next: "pop" - }); - rule.token = rule.token + ".start"; - rule.push = true; - } - var next = rule.next || rule.push; - if (next && Array.isArray(next)) { - var stateName = rule.stateName; - if (!stateName) { - stateName = rule.token; - if (typeof stateName != "string") - stateName = stateName[0] || ""; - if (rules[stateName]) - stateName += id++; - } - rules[stateName] = next; - rule.next = stateName; - processState(stateName); - } - else if (next == "pop") { - rule.next = popState; - } - if (rule.push) { - rule.nextState = rule.next || rule.push; - rule.next = pushState; - delete rule.push; - } - if (rule.rules) { - for (var r in rule.rules) { - if (rules[r]) { - if (rules[r].push) - rules[r].push.apply(rules[r], rule.rules[r]); - } - else { - rules[r] = rule.rules[r]; - } - } - } - var includeName = typeof rule == "string" ? rule : rule.include; - if (includeName) { - if (includeName === "$self") - includeName = "start"; - if (Array.isArray(includeName)) - toInsert = includeName.map(function (x) { return rules[x]; }); - else - toInsert = rules[includeName]; - } - if (toInsert) { - var args = [i, 1].concat(toInsert); - if (rule.noEscape) - args = args.filter(function (x) { return !x.next; }); - state.splice.apply(state, args); - i--; - } - if (rule.keywordMap) { - rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive); - delete rule.defaultToken; - } - } - } - Object.keys(rules).forEach(processState, this); - }; - this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) { - var keywords = Object.create(null); - this.$keywordList = []; - Object.keys(map).forEach(function (className) { - var a = map[className]; - var list = a.split(splitChar || "|"); - for (var i = list.length; i--;) { - var word = list[i]; - this.$keywordList.push(word); - if (ignoreCase) - word = word.toLowerCase(); - keywords[word] = className; - } - }, this); - map = null; - return ignoreCase - ? function (value) { return keywords[value.toLowerCase()] || defaultToken; } - : function (value) { return keywords[value] || defaultToken; }; - }; - this.getKeywords = function () { - return this.$keywords; - }; -}).call(TextHighlightRules.prototype); -exports.TextHighlightRules = TextHighlightRules; - -}); - -ace.define("ace/mode/behaviour",["require","exports","module"], function(require, exports, module){"use strict"; -var Behaviour; -Behaviour = function () { - this.$behaviours = {}; -}; -(function () { - this.add = function (name, action, callback) { - switch (undefined) { - case this.$behaviours: - this.$behaviours = {}; - case this.$behaviours[name]: - this.$behaviours[name] = {}; - } - this.$behaviours[name][action] = callback; - }; - this.addBehaviours = function (behaviours) { - for (var key in behaviours) { - for (var action in behaviours[key]) { - this.add(key, action, behaviours[key][action]); - } - } - }; - this.remove = function (name) { - if (this.$behaviours && this.$behaviours[name]) { - delete this.$behaviours[name]; - } - }; - this.inherit = function (mode, filter) { - if (typeof mode === "function") { - var behaviours = new mode().getBehaviours(filter); - } - else { - var behaviours = mode.getBehaviours(filter); - } - this.addBehaviours(behaviours); - }; - this.getBehaviours = function (filter) { - if (!filter) { - return this.$behaviours; - } - else { - var ret = {}; - for (var i = 0; i < filter.length; i++) { - if (this.$behaviours[filter[i]]) { - ret[filter[i]] = this.$behaviours[filter[i]]; - } - } - return ret; - } - }; -}).call(Behaviour.prototype); -exports.Behaviour = Behaviour; - -}); - -ace.define("ace/token_iterator",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; -var Range = require("./range").Range; -var TokenIterator = /** @class */ (function () { - function TokenIterator(session, initialRow, initialColumn) { - this.$session = session; - this.$row = initialRow; - this.$rowTokens = session.getTokens(initialRow); - var token = session.getTokenAt(initialRow, initialColumn); - this.$tokenIndex = token ? token.index : -1; - } - TokenIterator.prototype.stepBackward = function () { - this.$tokenIndex -= 1; - while (this.$tokenIndex < 0) { - this.$row -= 1; - if (this.$row < 0) { - this.$row = 0; - return null; - } - this.$rowTokens = this.$session.getTokens(this.$row); - this.$tokenIndex = this.$rowTokens.length - 1; - } - return this.$rowTokens[this.$tokenIndex]; - }; - TokenIterator.prototype.stepForward = function () { - this.$tokenIndex += 1; - var rowCount; - while (this.$tokenIndex >= this.$rowTokens.length) { - this.$row += 1; - if (!rowCount) - rowCount = this.$session.getLength(); - if (this.$row >= rowCount) { - this.$row = rowCount - 1; - return null; - } - this.$rowTokens = this.$session.getTokens(this.$row); - this.$tokenIndex = 0; - } - return this.$rowTokens[this.$tokenIndex]; - }; - TokenIterator.prototype.getCurrentToken = function () { - return this.$rowTokens[this.$tokenIndex]; - }; - TokenIterator.prototype.getCurrentTokenRow = function () { - return this.$row; - }; - TokenIterator.prototype.getCurrentTokenColumn = function () { - var rowTokens = this.$rowTokens; - var tokenIndex = this.$tokenIndex; - var column = rowTokens[tokenIndex].start; - if (column !== undefined) - return column; - column = 0; - while (tokenIndex > 0) { - tokenIndex -= 1; - column += rowTokens[tokenIndex].value.length; - } - return column; - }; - TokenIterator.prototype.getCurrentTokenPosition = function () { - return { row: this.$row, column: this.getCurrentTokenColumn() }; - }; - TokenIterator.prototype.getCurrentTokenRange = function () { - var token = this.$rowTokens[this.$tokenIndex]; - var column = this.getCurrentTokenColumn(); - return new Range(this.$row, column, this.$row, column + token.value.length); - }; - return TokenIterator; -}()); -exports.TokenIterator = TokenIterator; - -}); - -ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module){"use strict"; -var oop = require("../../lib/oop"); -var Behaviour = require("../behaviour").Behaviour; -var TokenIterator = require("../../token_iterator").TokenIterator; -var lang = require("../../lib/lang"); -var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "rparen", "paren", "punctuation.operator"]; -var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "rparen", "paren", "punctuation.operator", "comment"]; -var context; -var contextCache = {}; -var defaultQuotes = { '"': '"', "'": "'" }; -var initContext = function (editor) { - var id = -1; - if (editor.multiSelect) { - id = editor.selection.index; - if (contextCache.rangeCount != editor.multiSelect.rangeCount) - contextCache = { rangeCount: editor.multiSelect.rangeCount }; - } - if (contextCache[id]) - return context = contextCache[id]; - context = contextCache[id] = { - autoInsertedBrackets: 0, - autoInsertedRow: -1, - autoInsertedLineEnd: "", - maybeInsertedBrackets: 0, - maybeInsertedRow: -1, - maybeInsertedLineStart: "", - maybeInsertedLineEnd: "" - }; -}; -var getWrapped = function (selection, selected, opening, closing) { - var rowDiff = selection.end.row - selection.start.row; - return { - text: opening + selected + closing, - selection: [ - 0, - selection.start.column + 1, - rowDiff, - selection.end.column + (rowDiff ? 0 : 1) - ] - }; -}; -var CstyleBehaviour; -CstyleBehaviour = function (options) { - options = options || {}; - this.add("braces", "insertion", function (state, action, editor, session, text) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - if (text == '{') { - initContext(editor); - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - var token = session.getTokenAt(cursor.row, cursor.column); - if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, '{', '}'); - } - else if (token && /(?:string)\.quasi|\.xml/.test(token.type)) { - var excludeTokens = [ - /tag\-(?:open|name)/, /attribute\-name/ - ]; - if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\.quasi/.test(token.type) - && token.value[cursor.column - token.start - 1] !== '$') - return; - CstyleBehaviour.recordAutoInsert(editor, session, "}"); - return { - text: '{}', - selection: [1, 1] - }; - } - else if (CstyleBehaviour.isSaneInsertion(editor, session)) { - if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) { - CstyleBehaviour.recordAutoInsert(editor, session, "}"); - return { - text: '{}', - selection: [1, 1] - }; - } - else { - CstyleBehaviour.recordMaybeInsert(editor, session, "{"); - return { - text: '{', - selection: [1, 1] - }; - } - } - } - else if (text == '}') { - initContext(editor); - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar == '}') { - var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row }); - if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { - CstyleBehaviour.popAutoInsertedClosing(); - return { - text: '', - selection: [1, 1] - }; - } - } - } - else if (text == "\n" || text == "\r\n") { - initContext(editor); - var closing = ""; - if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { - closing = lang.stringRepeat("}", context.maybeInsertedBrackets); - CstyleBehaviour.clearMaybeInsertedClosing(); - } - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar === '}') { - var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}'); - if (!openBracePos) - return null; - var next_indent = this.$getIndent(session.getLine(openBracePos.row)); - } - else if (closing) { - var next_indent = this.$getIndent(line); - } - else { - CstyleBehaviour.clearMaybeInsertedClosing(); - return; - } - var indent = next_indent + session.getTabString(); - return { - text: '\n' + indent + '\n' + next_indent + closing, - selection: [1, indent.length, 1, indent.length] - }; - } - else { - CstyleBehaviour.clearMaybeInsertedClosing(); - } - }); - this.add("braces", "deletion", function (state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && selected == '{') { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.end.column, range.end.column + 1); - if (rightChar == '}') { - range.end.column++; - return range; - } - else { - context.maybeInsertedBrackets--; - } - } - }); - this.add("parens", "insertion", function (state, action, editor, session, text) { - if (text == '(') { - initContext(editor); - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, '(', ')'); - } - else if (CstyleBehaviour.isSaneInsertion(editor, session)) { - CstyleBehaviour.recordAutoInsert(editor, session, ")"); - return { - text: '()', - selection: [1, 1] - }; - } - } - else if (text == ')') { - initContext(editor); - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar == ')') { - var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row }); - if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { - CstyleBehaviour.popAutoInsertedClosing(); - return { - text: '', - selection: [1, 1] - }; - } - } - } - }); - this.add("parens", "deletion", function (state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && selected == '(') { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.start.column + 1, range.start.column + 2); - if (rightChar == ')') { - range.end.column++; - return range; - } - } - }); - this.add("brackets", "insertion", function (state, action, editor, session, text) { - if (text == '[') { - initContext(editor); - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, '[', ']'); - } - else if (CstyleBehaviour.isSaneInsertion(editor, session)) { - CstyleBehaviour.recordAutoInsert(editor, session, "]"); - return { - text: '[]', - selection: [1, 1] - }; - } - } - else if (text == ']') { - initContext(editor); - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar == ']') { - var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row }); - if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { - CstyleBehaviour.popAutoInsertedClosing(); - return { - text: '', - selection: [1, 1] - }; - } - } - } - }); - this.add("brackets", "deletion", function (state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && selected == '[') { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.start.column + 1, range.start.column + 2); - if (rightChar == ']') { - range.end.column++; - return range; - } - } - }); - this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { - var quotes = session.$mode.$quotes || defaultQuotes; - if (text.length == 1 && quotes[text]) { - if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) - return; - initContext(editor); - var quote = text; - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, quote, quote); - } - else if (!selected) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - var leftChar = line.substring(cursor.column - 1, cursor.column); - var rightChar = line.substring(cursor.column, cursor.column + 1); - var token = session.getTokenAt(cursor.row, cursor.column); - var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); - if (leftChar == "\\" && token && /escape/.test(token.type)) - return null; - var stringBefore = token && /string|escape/.test(token.type); - var stringAfter = !rightToken || /string|escape/.test(rightToken.type); - var pair; - if (rightChar == quote) { - pair = stringBefore !== stringAfter; - if (pair && /string\.end/.test(rightToken.type)) - pair = false; - } - else { - if (stringBefore && !stringAfter) - return null; // wrap string with different quote - if (stringBefore && stringAfter) - return null; // do not pair quotes inside strings - var wordRe = session.$mode.tokenRe; - wordRe.lastIndex = 0; - var isWordBefore = wordRe.test(leftChar); - wordRe.lastIndex = 0; - var isWordAfter = wordRe.test(rightChar); - var pairQuotesAfter = session.$mode.$pairQuotesAfter; - var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar); - if ((!shouldPairQuotes && isWordBefore) || isWordAfter) - return null; // before or after alphanumeric - if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) - return null; // there is rightChar and it isn't closing - var charBefore = line[cursor.column - 2]; - if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore))) - return null; - pair = true; - } - return { - text: pair ? quote + quote : "", - selection: [1, 1] - }; - } - } - }); - this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { - var quotes = session.$mode.$quotes || defaultQuotes; - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.start.column + 1, range.start.column + 2); - if (rightChar == selected) { - range.end.column++; - return range; - } - } - }); - if (options.closeDocComment !== false) { - this.add("doc comment end", "insertion", function (state, action, editor, session, text) { - if (state === "doc-start" && (text === "\n" || text === "\r\n") && editor.selection.isEmpty()) { - var cursor = editor.getCursorPosition(); - if (cursor.column === 0) { - return; - } - var line = session.doc.getLine(cursor.row); - var nextLine = session.doc.getLine(cursor.row + 1); - var tokens = session.getTokens(cursor.row); - var index = 0; - for (var i = 0; i < tokens.length; i++) { - index += tokens[i].value.length; - var currentToken = tokens[i]; - if (index >= cursor.column) { - if (index === cursor.column) { - if (!/\.doc/.test(currentToken.type)) { - return; - } - if (/\*\//.test(currentToken.value)) { - var nextToken = tokens[i + 1]; - if (!nextToken || !/\.doc/.test(nextToken.type)) { - return; - } - } - } - var cursorPosInToken = cursor.column - (index - currentToken.value.length); - var closeDocPos = currentToken.value.indexOf("*/"); - var openDocPos = currentToken.value.indexOf("/**", closeDocPos > -1 ? closeDocPos + 2 : 0); - if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) { - return; - } - if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos - && cursorPosInToken <= openDocPos || !/\.doc/.test(currentToken.type)) { - return; - } - break; - } - } - var indent = this.$getIndent(line); - if (/\s*\*/.test(nextLine)) { - if (/^\s*\*/.test(line)) { - return { - text: text + indent + "* ", - selection: [1, 2 + indent.length, 1, 2 + indent.length] - }; - } - else { - return { - text: text + indent + " * ", - selection: [1, 3 + indent.length, 1, 3 + indent.length] - }; - } - } - if (/\/\*\*/.test(line.substring(0, cursor.column))) { - return { - text: text + indent + " * " + text + " " + indent + "*/", - selection: [1, 4 + indent.length, 1, 4 + indent.length] - }; - } - } - }); - } -}; -CstyleBehaviour.isSaneInsertion = function (editor, session) { - var cursor = editor.getCursorPosition(); - var iterator = new TokenIterator(session, cursor.row, cursor.column); - if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { - if (/[)}\]]/.test(editor.session.getLine(cursor.row)[cursor.column])) - return true; - var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); - if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) - return false; - } - iterator.stepForward(); - return iterator.getCurrentTokenRow() !== cursor.row || - this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); -}; -CstyleBehaviour["$matchTokenType"] = function (token, types) { - return types.indexOf(token.type || token) > -1; -}; -CstyleBehaviour["recordAutoInsert"] = function (editor, session, bracket) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - if (!this["isAutoInsertedClosing"](cursor, line, context.autoInsertedLineEnd[0])) - context.autoInsertedBrackets = 0; - context.autoInsertedRow = cursor.row; - context.autoInsertedLineEnd = bracket + line.substr(cursor.column); - context.autoInsertedBrackets++; -}; -CstyleBehaviour["recordMaybeInsert"] = function (editor, session, bracket) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - if (!this["isMaybeInsertedClosing"](cursor, line)) - context.maybeInsertedBrackets = 0; - context.maybeInsertedRow = cursor.row; - context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; - context.maybeInsertedLineEnd = line.substr(cursor.column); - context.maybeInsertedBrackets++; -}; -CstyleBehaviour["isAutoInsertedClosing"] = function (cursor, line, bracket) { - return context.autoInsertedBrackets > 0 && - cursor.row === context.autoInsertedRow && - bracket === context.autoInsertedLineEnd[0] && - line.substr(cursor.column) === context.autoInsertedLineEnd; -}; -CstyleBehaviour["isMaybeInsertedClosing"] = function (cursor, line) { - return context.maybeInsertedBrackets > 0 && - cursor.row === context.maybeInsertedRow && - line.substr(cursor.column) === context.maybeInsertedLineEnd && - line.substr(0, cursor.column) == context.maybeInsertedLineStart; -}; -CstyleBehaviour["popAutoInsertedClosing"] = function () { - context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); - context.autoInsertedBrackets--; -}; -CstyleBehaviour["clearMaybeInsertedClosing"] = function () { - if (context) { - context.maybeInsertedBrackets = 0; - context.maybeInsertedRow = -1; - } -}; -oop.inherits(CstyleBehaviour, Behaviour); -exports.CstyleBehaviour = CstyleBehaviour; - -}); - -ace.define("ace/unicode",["require","exports","module"], function(require, exports, module){"use strict"; -var wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2]; -var code = 0; -var str = []; -for (var i = 0; i < wordChars.length; i += 2) { - str.push(code += wordChars[i]); - if (wordChars[i + 1]) - str.push(45, code += wordChars[i + 1]); -} -exports.wordChars = String.fromCharCode.apply(null, str); - -}); - -ace.define("ace/mode/text",["require","exports","module","ace/config","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"], function(require, exports, module){"use strict"; -var config = require("../config"); -var Tokenizer = require("../tokenizer").Tokenizer; -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; -var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; -var unicode = require("../unicode"); -var lang = require("../lib/lang"); -var TokenIterator = require("../token_iterator").TokenIterator; -var Range = require("../range").Range; -var Mode; -Mode = function () { - this.HighlightRules = TextHighlightRules; -}; -(function () { - this.$defaultBehaviour = new CstyleBehaviour(); - this.tokenRe = new RegExp("^[" + unicode.wordChars + "\\$_]+", "g"); - this.nonTokenRe = new RegExp("^(?:[^" + unicode.wordChars + "\\$_]|\\s])+", "g"); - this.getTokenizer = function () { - if (!this.$tokenizer) { - this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig); - this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); - } - return this.$tokenizer; - }; - this.lineCommentStart = ""; - this.blockComment = ""; - this.toggleCommentLines = function (state, session, startRow, endRow) { - var doc = session.doc; - var ignoreBlankLines = true; - var shouldRemove = true; - var minIndent = Infinity; - var tabSize = session.getTabSize(); - var insertAtTabStop = false; - if (!this.lineCommentStart) { - if (!this.blockComment) - return false; - var lineCommentStart = this.blockComment.start; - var lineCommentEnd = this.blockComment.end; - var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); - var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); - var comment = function (line, i) { - if (testRemove(line, i)) - return; - if (!ignoreBlankLines || /\S/.test(line)) { - doc.insertInLine({ row: i, column: line.length }, lineCommentEnd); - doc.insertInLine({ row: i, column: minIndent }, lineCommentStart); - } - }; - var uncomment = function (line, i) { - var m; - if (m = line.match(regexpEnd)) - doc.removeInLine(i, line.length - m[0].length, line.length); - if (m = line.match(regexpStart)) - doc.removeInLine(i, m[1].length, m[0].length); - }; - var testRemove = function (line, row) { - if (regexpStart.test(line)) - return true; - var tokens = session.getTokens(row); - for (var i = 0; i < tokens.length; i++) { - if (tokens[i].type === "comment") - return true; - } - }; - } - else { - if (Array.isArray(this.lineCommentStart)) { - var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); - var lineCommentStart = this.lineCommentStart[0]; - } - else { - var regexpStart = lang.escapeRegExp(this.lineCommentStart); - var lineCommentStart = this.lineCommentStart; - } - regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); - insertAtTabStop = session.getUseSoftTabs(); - var uncomment = function (line, i) { - var m = line.match(regexpStart); - if (!m) - return; - var start = m[1].length, end = m[0].length; - if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") - end--; - doc.removeInLine(i, start, end); - }; - var commentWithSpace = lineCommentStart + " "; - var comment = function (line, i) { - if (!ignoreBlankLines || /\S/.test(line)) { - if (shouldInsertSpace(line, minIndent, minIndent)) - doc.insertInLine({ row: i, column: minIndent }, commentWithSpace); - else - doc.insertInLine({ row: i, column: minIndent }, lineCommentStart); - } - }; - var testRemove = function (line, i) { - return regexpStart.test(line); - }; - var shouldInsertSpace = function (line, before, after) { - var spaces = 0; - while (before-- && line.charAt(before) == " ") - spaces++; - if (spaces % tabSize != 0) - return false; - var spaces = 0; - while (line.charAt(after++) == " ") - spaces++; - if (tabSize > 2) - return spaces % tabSize != tabSize - 1; - else - return spaces % tabSize == 0; - }; - } - function iter(fun) { - for (var i = startRow; i <= endRow; i++) - fun(doc.getLine(i), i); - } - var minEmptyLength = Infinity; - iter(function (line, i) { - var indent = line.search(/\S/); - if (indent !== -1) { - if (indent < minIndent) - minIndent = indent; - if (shouldRemove && !testRemove(line, i)) - shouldRemove = false; - } - else if (minEmptyLength > line.length) { - minEmptyLength = line.length; - } - }); - if (minIndent == Infinity) { - minIndent = minEmptyLength; - ignoreBlankLines = false; - shouldRemove = false; - } - if (insertAtTabStop && minIndent % tabSize != 0) - minIndent = Math.floor(minIndent / tabSize) * tabSize; - iter(shouldRemove ? uncomment : comment); - }; - this.toggleBlockComment = function (state, session, range, cursor) { - var comment = this.blockComment; - if (!comment) - return; - if (!comment.start && comment[0]) - comment = comment[0]; - var iterator = new TokenIterator(session, cursor.row, cursor.column); - var token = iterator.getCurrentToken(); - var sel = session.selection; - var initialRange = session.selection.toOrientedRange(); - var startRow, colDiff; - if (token && /comment/.test(token.type)) { - var startRange, endRange; - while (token && /comment/.test(token.type)) { - var i = token.value.indexOf(comment.start); - if (i != -1) { - var row = iterator.getCurrentTokenRow(); - var column = iterator.getCurrentTokenColumn() + i; - startRange = new Range(row, column, row, column + comment.start.length); - break; - } - token = iterator.stepBackward(); - } - var iterator = new TokenIterator(session, cursor.row, cursor.column); - var token = iterator.getCurrentToken(); - while (token && /comment/.test(token.type)) { - var i = token.value.indexOf(comment.end); - if (i != -1) { - var row = iterator.getCurrentTokenRow(); - var column = iterator.getCurrentTokenColumn() + i; - endRange = new Range(row, column, row, column + comment.end.length); - break; - } - token = iterator.stepForward(); - } - if (endRange) - session.remove(endRange); - if (startRange) { - session.remove(startRange); - startRow = startRange.start.row; - colDiff = -comment.start.length; - } - } - else { - colDiff = comment.start.length; - startRow = range.start.row; - session.insert(range.end, comment.end); - session.insert(range.start, comment.start); - } - if (initialRange.start.row == startRow) - initialRange.start.column += colDiff; - if (initialRange.end.row == startRow) - initialRange.end.column += colDiff; - session.selection.fromOrientedRange(initialRange); - }; - this.getNextLineIndent = function (state, line, tab) { - return this.$getIndent(line); - }; - this.checkOutdent = function (state, line, input) { - return false; - }; - this.autoOutdent = function (state, doc, row) { - }; - this.$getIndent = function (line) { - return line.match(/^\s*/)[0]; - }; - this.createWorker = function (session) { - return null; - }; - this.createModeDelegates = function (mapping) { - this.$embeds = []; - this.$modes = {}; - for (var i in mapping) { - if (mapping[i]) { - var Mode = mapping[i]; - var id = Mode.prototype.$id; - var mode = config.$modes[id]; - if (!mode) - config.$modes[id] = mode = new Mode(); - if (!config.$modes[i]) - config.$modes[i] = mode; - this.$embeds.push(i); - this.$modes[i] = mode; - } - } - var delegations = ["toggleBlockComment", "toggleCommentLines", "getNextLineIndent", - "checkOutdent", "autoOutdent", "transformAction", "getCompletions"]; - var _loop_1 = function (i) { - (function (scope) { - var functionName = delegations[i]; - var defaultHandler = scope[functionName]; - scope[delegations[i]] = - function () { - return this.$delegator(functionName, arguments, defaultHandler); - }; - }(this_1)); - }; - var this_1 = this; - for (var i = 0; i < delegations.length; i++) { - _loop_1(i); - } - }; - this.$delegator = function (method, args, defaultHandler) { - var state = args[0] || "start"; - if (typeof state != "string") { - if (Array.isArray(state[2])) { - var language = state[2][state[2].length - 1]; - var mode = this.$modes[language]; - if (mode) - return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1))); - } - state = state[0] || "start"; - } - for (var i = 0; i < this.$embeds.length; i++) { - if (!this.$modes[this.$embeds[i]]) - continue; - var split = state.split(this.$embeds[i]); - if (!split[0] && split[1]) { - args[0] = split[1]; - var mode = this.$modes[this.$embeds[i]]; - return mode[method].apply(mode, args); - } - } - var ret = defaultHandler.apply(this, args); - return defaultHandler ? ret : undefined; - }; - this.transformAction = function (state, action, editor, session, param) { - if (this.$behaviour) { - var behaviours = this.$behaviour.getBehaviours(); - for (var key in behaviours) { - if (behaviours[key][action]) { - var ret = behaviours[key][action].apply(this, arguments); - if (ret) { - return ret; - } - } - } - } - }; - this.getKeywords = function (append) { - if (!this.completionKeywords) { - var rules = this.$tokenizer["rules"]; - var completionKeywords = []; - for (var rule in rules) { - var ruleItr = rules[rule]; - for (var r = 0, l = ruleItr.length; r < l; r++) { - if (typeof ruleItr[r].token === "string") { - if (/keyword|support|storage/.test(ruleItr[r].token)) - completionKeywords.push(ruleItr[r].regex); - } - else if (typeof ruleItr[r].token === "object") { - for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { - if (/keyword|support|storage/.test(ruleItr[r].token[a])) { - var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; - completionKeywords.push(rule.substr(1, rule.length - 2)); - } - } - } - } - } - this.completionKeywords = completionKeywords; - } - if (!append) - return this.$keywordList; - return completionKeywords.concat(this.$keywordList || []); - }; - this.$createKeywordList = function () { - if (!this.$highlightRules) - this.getTokenizer(); - return this.$keywordList = this.$highlightRules.$keywordList || []; - }; - this.getCompletions = function (state, session, pos, prefix) { - var keywords = this.$keywordList || this.$createKeywordList(); - return keywords.map(function (word) { - return { - name: word, - value: word, - score: 0, - meta: "keyword" - }; - }); - }; - this.$id = "ace/mode/text"; -}).call(Mode.prototype); -exports.Mode = Mode; - -}); - -ace.define("ace/line_widgets",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; -var dom = require("./lib/dom"); -var LineWidgets = /** @class */ (function () { - function LineWidgets(session) { - this.session = session; - this.session.widgetManager = this; - this.session.getRowLength = this.getRowLength; - this.session.$getWidgetScreenLength = this.$getWidgetScreenLength; - this.updateOnChange = this.updateOnChange.bind(this); - this.renderWidgets = this.renderWidgets.bind(this); - this.measureWidgets = this.measureWidgets.bind(this); - this.session._changedWidgets = []; - this.$onChangeEditor = this.$onChangeEditor.bind(this); - this.session.on("change", this.updateOnChange); - this.session.on("changeFold", this.updateOnFold); - this.session.on("changeEditor", this.$onChangeEditor); - } - LineWidgets.prototype.getRowLength = function (row) { - var h; - if (this.lineWidgets) - h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; - else - h = 0; - if (!this["$useWrapMode"] || !this["$wrapData"][row]) { - return 1 + h; - } - else { - return this["$wrapData"][row].length + 1 + h; - } - }; - LineWidgets.prototype.$getWidgetScreenLength = function () { - var screenRows = 0; - this.lineWidgets.forEach(function (w) { - if (w && w.rowCount && !w.hidden) - screenRows += w.rowCount; - }); - return screenRows; - }; - LineWidgets.prototype.$onChangeEditor = function (e) { - this.attach(e.editor); - }; - LineWidgets.prototype.attach = function (editor) { - if (editor && editor.widgetManager && editor.widgetManager != this) - editor.widgetManager.detach(); - if (this.editor == editor) - return; - this.detach(); - this.editor = editor; - if (editor) { - editor.widgetManager = this; - editor.renderer.on("beforeRender", this.measureWidgets); - editor.renderer.on("afterRender", this.renderWidgets); - } - }; - LineWidgets.prototype.detach = function (e) { - var editor = this.editor; - if (!editor) - return; - this.editor = null; - editor.widgetManager = null; - editor.renderer.off("beforeRender", this.measureWidgets); - editor.renderer.off("afterRender", this.renderWidgets); - var lineWidgets = this.session.lineWidgets; - lineWidgets && lineWidgets.forEach(function (w) { - if (w && w.el && w.el.parentNode) { - w._inDocument = false; - w.el.parentNode.removeChild(w.el); - } - }); - }; - LineWidgets.prototype.updateOnFold = function (e, session) { - var lineWidgets = session.lineWidgets; - if (!lineWidgets || !e.action) - return; - var fold = e.data; - var start = fold.start.row; - var end = fold.end.row; - var hide = e.action == "add"; - for (var i = start + 1; i < end; i++) { - if (lineWidgets[i]) - lineWidgets[i].hidden = hide; - } - if (lineWidgets[end]) { - if (hide) { - if (!lineWidgets[start]) - lineWidgets[start] = lineWidgets[end]; - else - lineWidgets[end].hidden = hide; - } - else { - if (lineWidgets[start] == lineWidgets[end]) - lineWidgets[start] = undefined; - lineWidgets[end].hidden = hide; - } - } - }; - LineWidgets.prototype.updateOnChange = function (delta) { - var lineWidgets = this.session.lineWidgets; - if (!lineWidgets) - return; - var startRow = delta.start.row; - var len = delta.end.row - startRow; - if (len === 0) { - } - else if (delta.action == "remove") { - var removed = lineWidgets.splice(startRow + 1, len); - if (!lineWidgets[startRow] && removed[removed.length - 1]) { - lineWidgets[startRow] = removed.pop(); - } - removed.forEach(function (w) { - w && this.removeLineWidget(w); - }, this); - this.$updateRows(); - } - else { - var args = new Array(len); - if (lineWidgets[startRow] && lineWidgets[startRow].column != null) { - if (delta.start.column > lineWidgets[startRow].column) - startRow++; - } - args.unshift(startRow, 0); - lineWidgets.splice.apply(lineWidgets, args); - this.$updateRows(); - } - }; - LineWidgets.prototype.$updateRows = function () { - var lineWidgets = this.session.lineWidgets; - if (!lineWidgets) - return; - var noWidgets = true; - lineWidgets.forEach(function (w, i) { - if (w) { - noWidgets = false; - w.row = i; - while (w.$oldWidget) { - w.$oldWidget.row = i; - w = w.$oldWidget; - } - } - }); - if (noWidgets) - this.session.lineWidgets = null; - }; - LineWidgets.prototype.$registerLineWidget = function (w) { - if (!this.session.lineWidgets) - this.session.lineWidgets = new Array(this.session.getLength()); - var old = this.session.lineWidgets[w.row]; - if (old) { - w.$oldWidget = old; - if (old.el && old.el.parentNode) { - old.el.parentNode.removeChild(old.el); - old._inDocument = false; - } - } - this.session.lineWidgets[w.row] = w; - return w; - }; - LineWidgets.prototype.addLineWidget = function (w) { - this.$registerLineWidget(w); - w.session = this.session; - if (!this.editor) - return w; - var renderer = this.editor.renderer; - if (w.html && !w.el) { - w.el = dom.createElement("div"); - w.el.innerHTML = w.html; - } - if (w.text && !w.el) { - w.el = dom.createElement("div"); - w.el.textContent = w.text; - } - if (w.el) { - dom.addCssClass(w.el, "ace_lineWidgetContainer"); - if (w.className) { - dom.addCssClass(w.el, w.className); - } - w.el.style.position = "absolute"; - w.el.style.zIndex = "5"; - renderer.container.appendChild(w.el); - w._inDocument = true; - if (!w.coverGutter) { - w.el.style.zIndex = "3"; - } - if (w.pixelHeight == null) { - w.pixelHeight = w.el.offsetHeight; - } - } - if (w.rowCount == null) { - w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; - } - var fold = this.session.getFoldAt(w.row, 0); - w.$fold = fold; - if (fold) { - var lineWidgets = this.session.lineWidgets; - if (w.row == fold.end.row && !lineWidgets[fold.start.row]) - lineWidgets[fold.start.row] = w; - else - w.hidden = true; - } - this.session._emit("changeFold", { data: { start: { row: w.row } } }); - this.$updateRows(); - this.renderWidgets(null, renderer); - this.onWidgetChanged(w); - return w; - }; - LineWidgets.prototype.removeLineWidget = function (w) { - w._inDocument = false; - w.session = null; - if (w.el && w.el.parentNode) - w.el.parentNode.removeChild(w.el); - if (w.editor && w.editor.destroy) - try { - w.editor.destroy(); - } - catch (e) { } - if (this.session.lineWidgets) { - var w1 = this.session.lineWidgets[w.row]; - if (w1 == w) { - this.session.lineWidgets[w.row] = w.$oldWidget; - if (w.$oldWidget) - this.onWidgetChanged(w.$oldWidget); - } - else { - while (w1) { - if (w1.$oldWidget == w) { - w1.$oldWidget = w.$oldWidget; - break; - } - w1 = w1.$oldWidget; - } - } - } - this.session._emit("changeFold", { data: { start: { row: w.row } } }); - this.$updateRows(); - }; - LineWidgets.prototype.getWidgetsAtRow = function (row) { - var lineWidgets = this.session.lineWidgets; - var w = lineWidgets && lineWidgets[row]; - var list = []; - while (w) { - list.push(w); - w = w.$oldWidget; - } - return list; - }; - LineWidgets.prototype.onWidgetChanged = function (w) { - this.session._changedWidgets.push(w); - this.editor && this.editor.renderer.updateFull(); - }; - LineWidgets.prototype.measureWidgets = function (e, renderer) { - var changedWidgets = this.session._changedWidgets; - var config = renderer.layerConfig; - if (!changedWidgets || !changedWidgets.length) - return; - var min = Infinity; - for (var i = 0; i < changedWidgets.length; i++) { - var w = changedWidgets[i]; - if (!w || !w.el) - continue; - if (w.session != this.session) - continue; - if (!w._inDocument) { - if (this.session.lineWidgets[w.row] != w) - continue; - w._inDocument = true; - renderer.container.appendChild(w.el); - } - w.h = w.el.offsetHeight; - if (!w.fixedWidth) { - w.w = w.el.offsetWidth; - w.screenWidth = Math.ceil(w.w / config.characterWidth); - } - var rowCount = w.h / config.lineHeight; - if (w.coverLine) { - rowCount -= this.session.getRowLineCount(w.row); - if (rowCount < 0) - rowCount = 0; - } - if (w.rowCount != rowCount) { - w.rowCount = rowCount; - if (w.row < min) - min = w.row; - } - } - if (min != Infinity) { - this.session._emit("changeFold", { data: { start: { row: min } } }); - this.session.lineWidgetWidth = null; - } - this.session._changedWidgets = []; - }; - LineWidgets.prototype.renderWidgets = function (e, renderer) { - var config = renderer.layerConfig; - var lineWidgets = this.session.lineWidgets; - if (!lineWidgets) - return; - var first = Math.min(this.firstRow, config.firstRow); - var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length); - while (first > 0 && !lineWidgets[first]) - first--; - this.firstRow = config.firstRow; - this.lastRow = config.lastRow; - renderer.$cursorLayer.config = config; - for (var i = first; i <= last; i++) { - var w = lineWidgets[i]; - if (!w || !w.el) - continue; - if (w.hidden) { - w.el.style.top = -100 - (w.pixelHeight || 0) + "px"; - continue; - } - if (!w._inDocument) { - w._inDocument = true; - renderer.container.appendChild(w.el); - } - var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top; - if (!w.coverLine) - top += config.lineHeight * this.session.getRowLineCount(w.row); - w.el.style.top = top - config.offset + "px"; - var left = w.coverGutter ? 0 : renderer.gutterWidth; - if (!w.fixedWidth) - left -= renderer.scrollLeft; - w.el.style.left = left + "px"; - if (w.fullWidth && w.screenWidth) { - w.el.style.minWidth = config.width + 2 * config.padding + "px"; - } - if (w.fixedWidth) { - w.el.style.right = renderer.scrollBar.getWidth() + "px"; - } - else { - w.el.style.right = ""; - } - } - }; - return LineWidgets; -}()); -exports.LineWidgets = LineWidgets; - -}); - -ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module){"use strict"; -function throwDeltaError(delta, errorText) { - console.log("Invalid Delta:", delta); - throw "Invalid Delta: " + errorText; -} -function positionInDocument(docLines, position) { - return position.row >= 0 && position.row < docLines.length && - position.column >= 0 && position.column <= docLines[position.row].length; -} -function validateDelta(docLines, delta) { - if (delta.action != "insert" && delta.action != "remove") - throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); - if (!(delta.lines instanceof Array)) - throwDeltaError(delta, "delta.lines must be an Array"); - if (!delta.start || !delta.end) - throwDeltaError(delta, "delta.start/end must be an present"); - var start = delta.start; - if (!positionInDocument(docLines, delta.start)) - throwDeltaError(delta, "delta.start must be contained in document"); - var end = delta.end; - if (delta.action == "remove" && !positionInDocument(docLines, end)) - throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); - var numRangeRows = end.row - start.row; - var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); - if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) - throwDeltaError(delta, "delta.range must match delta lines"); -} -exports.applyDelta = function (docLines, delta, doNotValidate) { - var row = delta.start.row; - var startColumn = delta.start.column; - var line = docLines[row] || ""; - switch (delta.action) { - case "insert": - var lines = delta.lines; - if (lines.length === 1) { - docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); - } - else { - var args = [row, 1].concat(delta.lines); - docLines.splice.apply(docLines, args); - docLines[row] = line.substring(0, startColumn) + docLines[row]; - docLines[row + delta.lines.length - 1] += line.substring(startColumn); - } - break; - case "remove": - var endColumn = delta.end.column; - var endRow = delta.end.row; - if (row === endRow) { - docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); - } - else { - docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn)); - } - break; - } -}; - -}); - -ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Anchor = /** @class */ (function () { - function Anchor(doc, row, column) { - this.$onChange = this.onChange.bind(this); - this.attach(doc); - if (typeof row != "number") - this.setPosition(row.row, row.column); - else - this.setPosition(row, column); - } - Anchor.prototype.getPosition = function () { - return this.$clipPositionToDocument(this.row, this.column); - }; - Anchor.prototype.getDocument = function () { - return this.document; - }; - Anchor.prototype.onChange = function (delta) { - if (delta.start.row == delta.end.row && delta.start.row != this.row) - return; - if (delta.start.row > this.row) - return; - var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight); - this.setPosition(point.row, point.column, true); - }; - Anchor.prototype.setPosition = function (row, column, noClip) { - var pos; - if (noClip) { - pos = { - row: row, - column: column - }; - } - else { - pos = this.$clipPositionToDocument(row, column); - } - if (this.row == pos.row && this.column == pos.column) - return; - var old = { - row: this.row, - column: this.column - }; - this.row = pos.row; - this.column = pos.column; - this._signal("change", { - old: old, - value: pos - }); - }; - Anchor.prototype.detach = function () { - this.document.off("change", this.$onChange); - }; - Anchor.prototype.attach = function (doc) { - this.document = doc || this.document; - this.document.on("change", this.$onChange); - }; - Anchor.prototype.$clipPositionToDocument = function (row, column) { - var pos = {}; - if (row >= this.document.getLength()) { - pos.row = Math.max(0, this.document.getLength() - 1); - pos.column = this.document.getLine(pos.row).length; - } - else if (row < 0) { - pos.row = 0; - pos.column = 0; - } - else { - pos.row = row; - pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); - } - if (column < 0) - pos.column = 0; - return pos; - }; - return Anchor; -}()); -Anchor.prototype.$insertRight = false; -oop.implement(Anchor.prototype, EventEmitter); -function $pointsInOrder(point1, point2, equalPointsInOrder) { - var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; - return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); -} -function $getTransformedPoint(delta, point, moveIfEqual) { - var deltaIsInsert = delta.action == "insert"; - var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); - var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); - var deltaStart = delta.start; - var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. - if ($pointsInOrder(point, deltaStart, moveIfEqual)) { - return { - row: point.row, - column: point.column - }; - } - if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { - return { - row: point.row + deltaRowShift, - column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) - }; - } - return { - row: deltaStart.row, - column: deltaStart.column - }; -} -exports.Anchor = Anchor; - -}); - -ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var applyDelta = require("./apply_delta").applyDelta; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Range = require("./range").Range; -var Anchor = require("./anchor").Anchor; -var Document = /** @class */ (function () { - function Document(textOrLines) { - this.$lines = [""]; - if (textOrLines.length === 0) { - this.$lines = [""]; - } - else if (Array.isArray(textOrLines)) { - this.insertMergedLines({ row: 0, column: 0 }, textOrLines); - } - else { - this.insert({ row: 0, column: 0 }, textOrLines); - } - } - Document.prototype.setValue = function (text) { - var len = this.getLength() - 1; - this.remove(new Range(0, 0, len, this.getLine(len).length)); - this.insert({ row: 0, column: 0 }, text || ""); - }; - Document.prototype.getValue = function () { - return this.getAllLines().join(this.getNewLineCharacter()); - }; - Document.prototype.createAnchor = function (row, column) { - return new Anchor(this, row, column); - }; - Document.prototype.$detectNewLine = function (text) { - var match = text.match(/^.*?(\r\n|\r|\n)/m); - this.$autoNewLine = match ? match[1] : "\n"; - this._signal("changeNewLineMode"); - }; - Document.prototype.getNewLineCharacter = function () { - switch (this.$newLineMode) { - case "windows": - return "\r\n"; - case "unix": - return "\n"; - default: - return this.$autoNewLine || "\n"; - } - }; - Document.prototype.setNewLineMode = function (newLineMode) { - if (this.$newLineMode === newLineMode) - return; - this.$newLineMode = newLineMode; - this._signal("changeNewLineMode"); - }; - Document.prototype.getNewLineMode = function () { - return this.$newLineMode; - }; - Document.prototype.isNewLine = function (text) { - return (text == "\r\n" || text == "\r" || text == "\n"); - }; - Document.prototype.getLine = function (row) { - return this.$lines[row] || ""; - }; - Document.prototype.getLines = function (firstRow, lastRow) { - return this.$lines.slice(firstRow, lastRow + 1); - }; - Document.prototype.getAllLines = function () { - return this.getLines(0, this.getLength()); - }; - Document.prototype.getLength = function () { - return this.$lines.length; - }; - Document.prototype.getTextRange = function (range) { - return this.getLinesForRange(range).join(this.getNewLineCharacter()); - }; - Document.prototype.getLinesForRange = function (range) { - var lines; - if (range.start.row === range.end.row) { - lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; - } - else { - lines = this.getLines(range.start.row, range.end.row); - lines[0] = (lines[0] || "").substring(range.start.column); - var l = lines.length - 1; - if (range.end.row - range.start.row == l) - lines[l] = lines[l].substring(0, range.end.column); - } - return lines; - }; - Document.prototype.insertLines = function (row, lines) { - console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); - return this.insertFullLines(row, lines); - }; - Document.prototype.removeLines = function (firstRow, lastRow) { - console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); - return this.removeFullLines(firstRow, lastRow); - }; - Document.prototype.insertNewLine = function (position) { - console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."); - return this.insertMergedLines(position, ["", ""]); - }; - Document.prototype.insert = function (position, text) { - if (this.getLength() <= 1) - this.$detectNewLine(text); - return this.insertMergedLines(position, this.$split(text)); - }; - Document.prototype.insertInLine = function (position, text) { - var start = this.clippedPos(position.row, position.column); - var end = this.pos(position.row, position.column + text.length); - this.applyDelta({ - start: start, - end: end, - action: "insert", - lines: [text] - }, true); - return this.clonePos(end); - }; - Document.prototype.clippedPos = function (row, column) { - var length = this.getLength(); - if (row === undefined) { - row = length; - } - else if (row < 0) { - row = 0; - } - else if (row >= length) { - row = length - 1; - column = undefined; - } - var line = this.getLine(row); - if (column == undefined) - column = line.length; - column = Math.min(Math.max(column, 0), line.length); - return { row: row, column: column }; - }; - Document.prototype.clonePos = function (pos) { - return { row: pos.row, column: pos.column }; - }; - Document.prototype.pos = function (row, column) { - return { row: row, column: column }; - }; - Document.prototype.$clipPosition = function (position) { - var length = this.getLength(); - if (position.row >= length) { - position.row = Math.max(0, length - 1); - position.column = this.getLine(length - 1).length; - } - else { - position.row = Math.max(0, position.row); - position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); - } - return position; - }; - Document.prototype.insertFullLines = function (row, lines) { - row = Math.min(Math.max(row, 0), this.getLength()); - var column = 0; - if (row < this.getLength()) { - lines = lines.concat([""]); - column = 0; - } - else { - lines = [""].concat(lines); - row--; - column = this.$lines[row].length; - } - this.insertMergedLines({ row: row, column: column }, lines); - }; - Document.prototype.insertMergedLines = function (position, lines) { - var start = this.clippedPos(position.row, position.column); - var end = { - row: start.row + lines.length - 1, - column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length - }; - this.applyDelta({ - start: start, - end: end, - action: "insert", - lines: lines - }); - return this.clonePos(end); - }; - Document.prototype.remove = function (range) { - var start = this.clippedPos(range.start.row, range.start.column); - var end = this.clippedPos(range.end.row, range.end.column); - this.applyDelta({ - start: start, - end: end, - action: "remove", - lines: this.getLinesForRange({ start: start, end: end }) - }); - return this.clonePos(start); - }; - Document.prototype.removeInLine = function (row, startColumn, endColumn) { - var start = this.clippedPos(row, startColumn); - var end = this.clippedPos(row, endColumn); - this.applyDelta({ - start: start, - end: end, - action: "remove", - lines: this.getLinesForRange({ start: start, end: end }) - }, true); - return this.clonePos(start); - }; - Document.prototype.removeFullLines = function (firstRow, lastRow) { - firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); - lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1); - var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; - var deleteLastNewLine = lastRow < this.getLength() - 1; - var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow); - var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0); - var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow); - var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length); - var range = new Range(startRow, startCol, endRow, endCol); - var deletedLines = this.$lines.slice(firstRow, lastRow + 1); - this.applyDelta({ - start: range.start, - end: range.end, - action: "remove", - lines: this.getLinesForRange(range) - }); - return deletedLines; - }; - Document.prototype.removeNewLine = function (row) { - if (row < this.getLength() - 1 && row >= 0) { - this.applyDelta({ - start: this.pos(row, this.getLine(row).length), - end: this.pos(row + 1, 0), - action: "remove", - lines: ["", ""] - }); - } - }; - Document.prototype.replace = function (range, text) { - if (!(range instanceof Range)) - range = Range.fromPoints(range.start, range.end); - if (text.length === 0 && range.isEmpty()) - return range.start; - if (text == this.getTextRange(range)) - return range.end; - this.remove(range); - var end; - if (text) { - end = this.insert(range.start, text); - } - else { - end = range.start; - } - return end; - }; - Document.prototype.applyDeltas = function (deltas) { - for (var i = 0; i < deltas.length; i++) { - this.applyDelta(deltas[i]); - } - }; - Document.prototype.revertDeltas = function (deltas) { - for (var i = deltas.length - 1; i >= 0; i--) { - this.revertDelta(deltas[i]); - } - }; - Document.prototype.applyDelta = function (delta, doNotValidate) { - var isInsert = delta.action == "insert"; - if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] - : !Range.comparePoints(delta.start, delta.end)) { - return; - } - if (isInsert && delta.lines.length > 20000) { - this.$splitAndapplyLargeDelta(delta, 20000); - } - else { - applyDelta(this.$lines, delta, doNotValidate); - this._signal("change", delta); - } - }; - Document.prototype.$safeApplyDelta = function (delta) { - var docLength = this.$lines.length; - if (delta.action == "remove" && delta.start.row < docLength && delta.end.row < docLength - || delta.action == "insert" && delta.start.row <= docLength) { - this.applyDelta(delta); - } - }; - Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) { - var lines = delta.lines; - var l = lines.length - MAX + 1; - var row = delta.start.row; - var column = delta.start.column; - for (var from = 0, to = 0; from < l; from = to) { - to += MAX - 1; - var chunk = lines.slice(from, to); - chunk.push(""); - this.applyDelta({ - start: this.pos(row + from, column), - end: this.pos(row + to, column = 0), - action: delta.action, - lines: chunk - }, true); - } - delta.lines = lines.slice(from); - delta.start.row = row + from; - delta.start.column = column; - this.applyDelta(delta, true); - }; - Document.prototype.revertDelta = function (delta) { - this.$safeApplyDelta({ - start: this.clonePos(delta.start), - end: this.clonePos(delta.end), - action: (delta.action == "insert" ? "remove" : "insert"), - lines: delta.lines.slice() - }); - }; - Document.prototype.indexToPosition = function (index, startRow) { - var lines = this.$lines || this.getAllLines(); - var newlineLength = this.getNewLineCharacter().length; - for (var i = startRow || 0, l = lines.length; i < l; i++) { - index -= lines[i].length + newlineLength; - if (index < 0) - return { row: i, column: index + lines[i].length + newlineLength }; - } - return { row: l - 1, column: index + lines[l - 1].length + newlineLength }; - }; - Document.prototype.positionToIndex = function (pos, startRow) { - var lines = this.$lines || this.getAllLines(); - var newlineLength = this.getNewLineCharacter().length; - var index = 0; - var row = Math.min(pos.row, lines.length); - for (var i = startRow || 0; i < row; ++i) - index += lines[i].length + newlineLength; - return index + pos.column; - }; - Document.prototype.$split = function (text) { - return text.split(/\r\n|\r|\n/); - }; - return Document; -}()); -Document.prototype.$autoNewLine = ""; -Document.prototype.$newLineMode = "auto"; -oop.implement(Document.prototype, EventEmitter); -exports.Document = Document; - -}); - -ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var BackgroundTokenizer = /** @class */ (function () { - function BackgroundTokenizer(tokenizer, session) { - this.running = false; - this.lines = []; - this.states = []; - this.currentLine = 0; - this.tokenizer = tokenizer; - var self = this; - this.$worker = function () { - if (!self.running) { - return; - } - var workerStart = new Date(); - var currentLine = self.currentLine; - var endLine = -1; - var doc = self.doc; - var startLine = currentLine; - while (self.lines[currentLine]) - currentLine++; - var len = doc.getLength(); - var processedLines = 0; - self.running = false; - while (currentLine < len) { - self.$tokenizeRow(currentLine); - endLine = currentLine; - do { - currentLine++; - } while (self.lines[currentLine]); - processedLines++; - if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { - self.running = setTimeout(self.$worker, 20); - break; - } - } - self.currentLine = currentLine; - if (endLine == -1) - endLine = currentLine; - if (startLine <= endLine) - self.fireUpdateEvent(startLine, endLine); - }; - } - BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) { - this.tokenizer = tokenizer; - this.lines = []; - this.states = []; - this.start(0); - }; - BackgroundTokenizer.prototype.setDocument = function (doc) { - this.doc = doc; - this.lines = []; - this.states = []; - this.stop(); - }; - BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) { - var data = { - first: firstRow, - last: lastRow - }; - this._signal("update", { data: data }); - }; - BackgroundTokenizer.prototype.start = function (startRow) { - this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); - this.lines.splice(this.currentLine, this.lines.length); - this.states.splice(this.currentLine, this.states.length); - this.stop(); - this.running = setTimeout(this.$worker, 700); - }; - BackgroundTokenizer.prototype.scheduleStart = function () { - if (!this.running) - this.running = setTimeout(this.$worker, 700); - }; - BackgroundTokenizer.prototype.$updateOnChange = function (delta) { - var startRow = delta.start.row; - var len = delta.end.row - startRow; - if (len === 0) { - this.lines[startRow] = null; - } - else if (delta.action == "remove") { - this.lines.splice(startRow, len + 1, null); - this.states.splice(startRow, len + 1, null); - } - else { - var args = Array(len + 1); - args.unshift(startRow, 1); - this.lines.splice.apply(this.lines, args); - this.states.splice.apply(this.states, args); - } - this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); - this.stop(); - }; - BackgroundTokenizer.prototype.stop = function () { - if (this.running) - clearTimeout(this.running); - this.running = false; - }; - BackgroundTokenizer.prototype.getTokens = function (row) { - return this.lines[row] || this.$tokenizeRow(row); - }; - BackgroundTokenizer.prototype.getState = function (row) { - if (this.currentLine == row) - this.$tokenizeRow(row); - return this.states[row] || "start"; - }; - BackgroundTokenizer.prototype.$tokenizeRow = function (row) { - var line = this.doc.getLine(row); - var state = this.states[row - 1]; - var data = this.tokenizer.getLineTokens(line, state, row); - if (this.states[row] + "" !== data.state + "") { - this.states[row] = data.state; - this.lines[row + 1] = null; - if (this.currentLine > row + 1) - this.currentLine = row + 1; - } - else if (this.currentLine == row) { - this.currentLine = row + 1; - } - return this.lines[row] = data.tokens; - }; - BackgroundTokenizer.prototype.cleanup = function () { - this.running = false; - this.lines = []; - this.states = []; - this.currentLine = 0; - this.removeAllListeners(); - }; - return BackgroundTokenizer; -}()); -oop.implement(BackgroundTokenizer.prototype, EventEmitter); -exports.BackgroundTokenizer = BackgroundTokenizer; - -}); - -ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/range"], function(require, exports, module){"use strict"; -var lang = require("./lib/lang"); -var Range = require("./range").Range; -var SearchHighlight = /** @class */ (function () { - function SearchHighlight(regExp, clazz, type) { - if (type === void 0) { type = "text"; } - this.setRegexp(regExp); - this.clazz = clazz; - this.type = type; - this.docLen = 0; - } - SearchHighlight.prototype.setRegexp = function (regExp) { - if (this.regExp + "" == regExp + "") - return; - this.regExp = regExp; - this.cache = []; - }; - SearchHighlight.prototype.update = function (html, markerLayer, session, config) { - if (!this.regExp) - return; - var start = config.firstRow; - var end = config.lastRow; - var renderedMarkerRanges = {}; - var _search = session.$editor && session.$editor.$search; - var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions()); - for (var i = start; i <= end; i++) { - var ranges = this.cache[i]; - if (ranges == null || session.getValue().length != this.docLen) { - if (mtSearch) { - ranges = []; - var match = _search.$multiLineForward(session, this.regExp, i, end); - if (match) { - var end_row = match.endRow <= end ? match.endRow - 1 : end; - if (end_row > i) - i = end_row; - ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol)); - } - if (ranges.length > this.MAX_RANGES) - ranges = ranges.slice(0, this.MAX_RANGES); - } - else { - ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); - if (ranges.length > this.MAX_RANGES) - ranges = ranges.slice(0, this.MAX_RANGES); - ranges = ranges.map(function (match) { - return new Range(i, match.offset, i, match.offset + match.length); - }); - } - this.cache[i] = ranges.length ? ranges : ""; - } - if (ranges.length === 0) - continue; - for (var j = ranges.length; j--;) { - var rangeToAddMarkerTo = ranges[j].toScreenRange(session); - var rangeAsString = rangeToAddMarkerTo.toString(); - if (renderedMarkerRanges[rangeAsString]) - continue; - renderedMarkerRanges[rangeAsString] = true; - markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config); - } - } - this.docLen = session.getValue().length; - }; - return SearchHighlight; -}()); -SearchHighlight.prototype.MAX_RANGES = 500; -exports.SearchHighlight = SearchHighlight; - -}); - -ace.define("ace/undomanager",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; -var UndoManager = /** @class */ (function () { - function UndoManager() { - this.$keepRedoStack; - this.$maxRev = 0; - this.$fromUndo = false; - this.$undoDepth = Infinity; - this.reset(); - } - UndoManager.prototype.addSession = function (session) { - this.$session = session; - }; - UndoManager.prototype.add = function (delta, allowMerge, session) { - if (this.$fromUndo) - return; - if (delta == this.$lastDelta) - return; - if (!this.$keepRedoStack) - this.$redoStack.length = 0; - if (allowMerge === false || !this.lastDeltas) { - this.lastDeltas = []; - var undoStackLength = this.$undoStack.length; - if (undoStackLength > this.$undoDepth - 1) { - this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1); - } - this.$undoStack.push(this.lastDeltas); - delta.id = this.$rev = ++this.$maxRev; - } - if (delta.action == "remove" || delta.action == "insert") - this.$lastDelta = delta; - this.lastDeltas.push(delta); - }; - UndoManager.prototype.addSelection = function (selection, rev) { - this.selections.push({ - value: selection, - rev: rev || this.$rev - }); - }; - UndoManager.prototype.startNewGroup = function () { - this.lastDeltas = null; - return this.$rev; - }; - UndoManager.prototype.markIgnored = function (from, to) { - if (to == null) - to = this.$rev + 1; - var stack = this.$undoStack; - for (var i = stack.length; i--;) { - var delta = stack[i][0]; - if (delta.id <= from) - break; - if (delta.id < to) - delta.ignore = true; - } - this.lastDeltas = null; - }; - UndoManager.prototype.getSelection = function (rev, after) { - var stack = this.selections; - for (var i = stack.length; i--;) { - var selection = stack[i]; - if (selection.rev < rev) { - if (after) - selection = stack[i + 1]; - return selection; - } - } - }; - UndoManager.prototype.getRevision = function () { - return this.$rev; - }; - UndoManager.prototype.getDeltas = function (from, to) { - if (to == null) - to = this.$rev + 1; - var stack = this.$undoStack; - var end = null, start = 0; - for (var i = stack.length; i--;) { - var delta = stack[i][0]; - if (delta.id < to && !end) - end = i + 1; - if (delta.id <= from) { - start = i + 1; - break; - } - } - return stack.slice(start, end); - }; - UndoManager.prototype.getChangedRanges = function (from, to) { - if (to == null) - to = this.$rev + 1; - }; - UndoManager.prototype.getChangedLines = function (from, to) { - if (to == null) - to = this.$rev + 1; - }; - UndoManager.prototype.undo = function (session, dontSelect) { - this.lastDeltas = null; - var stack = this.$undoStack; - if (!rearrangeUndoStack(stack, stack.length)) - return; - if (!session) - session = this.$session; - if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length) - this.$redoStack = []; - this.$fromUndo = true; - var deltaSet = stack.pop(); - var undoSelectionRange = null; - if (deltaSet) { - undoSelectionRange = session.undoChanges(deltaSet, dontSelect); - this.$redoStack.push(deltaSet); - this.$syncRev(); - } - this.$fromUndo = false; - return undoSelectionRange; - }; - UndoManager.prototype.redo = function (session, dontSelect) { - this.lastDeltas = null; - if (!session) - session = this.$session; - this.$fromUndo = true; - if (this.$redoStackBaseRev != this.$rev) { - var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1); - rebaseRedoStack(this.$redoStack, diff); - this.$redoStackBaseRev = this.$rev; - this.$redoStack.forEach(function (x) { - x[0].id = ++this.$maxRev; - }, this); - } - var deltaSet = this.$redoStack.pop(); - var redoSelectionRange = null; - if (deltaSet) { - redoSelectionRange = session.redoChanges(deltaSet, dontSelect); - this.$undoStack.push(deltaSet); - this.$syncRev(); - } - this.$fromUndo = false; - return redoSelectionRange; - }; - UndoManager.prototype.$syncRev = function () { - var stack = this.$undoStack; - var nextDelta = stack[stack.length - 1]; - var id = nextDelta && nextDelta[0].id || 0; - this.$redoStackBaseRev = id; - this.$rev = id; - }; - UndoManager.prototype.reset = function () { - this.lastDeltas = null; - this.$lastDelta = null; - this.$undoStack = []; - this.$redoStack = []; - this.$rev = 0; - this.mark = 0; - this.$redoStackBaseRev = this.$rev; - this.selections = []; - }; - UndoManager.prototype.canUndo = function () { - return this.$undoStack.length > 0; - }; - UndoManager.prototype.canRedo = function () { - return this.$redoStack.length > 0; - }; - UndoManager.prototype.bookmark = function (rev) { - if (rev == undefined) - rev = this.$rev; - this.mark = rev; - }; - UndoManager.prototype.isAtBookmark = function () { - return this.$rev === this.mark; - }; - UndoManager.prototype.toJSON = function () { - return { - $redoStack: this.$redoStack, - $undoStack: this.$undoStack - }; - }; - UndoManager.prototype.fromJSON = function (json) { - this.reset(); - this.$undoStack = json.$undoStack; - this.$redoStack = json.$redoStack; - }; - UndoManager.prototype.$prettyPrint = function (delta) { - if (delta) - return stringifyDelta(delta); - return stringifyDelta(this.$undoStack) + "\n---\n" + stringifyDelta(this.$redoStack); - }; - return UndoManager; -}()); -UndoManager.prototype.hasUndo = UndoManager.prototype.canUndo; -UndoManager.prototype.hasRedo = UndoManager.prototype.canRedo; -UndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark; -UndoManager.prototype.markClean = UndoManager.prototype.bookmark; -function rearrangeUndoStack(stack, pos) { - for (var i = pos; i--;) { - var deltaSet = stack[i]; - if (deltaSet && !deltaSet[0].ignore) { - while (i < pos - 1) { - var swapped = swapGroups(stack[i], stack[i + 1]); - stack[i] = swapped[0]; - stack[i + 1] = swapped[1]; - i++; - } - return true; - } - } -} -var Range = require("./range").Range; -var cmp = Range.comparePoints; -var comparePoints = Range.comparePoints; -function $updateMarkers(delta) { - var isInsert = delta.action == "insert"; - var start = delta.start; - var end = delta.end; - var rowShift = (end.row - start.row) * (isInsert ? 1 : -1); - var colShift = (end.column - start.column) * (isInsert ? 1 : -1); - if (isInsert) - end = start; - for (var i in this.marks) { - var point = this.marks[i]; - var cmp = comparePoints(point, start); - if (cmp < 0) { - continue; // delta starts after the range - } - if (cmp === 0) { - if (isInsert) { - if (point.bias == 1) { - cmp = 1; - } - else { - point.bias == -1; - continue; - } - } - } - var cmp2 = isInsert ? cmp : comparePoints(point, end); - if (cmp2 > 0) { - point.row += rowShift; - point.column += point.row == end.row ? colShift : 0; - continue; - } - if (!isInsert && cmp2 <= 0) { - point.row = start.row; - point.column = start.column; - if (cmp2 === 0) - point.bias = 1; - } - } -} -function clonePos(pos) { - return { row: pos.row, column: pos.column }; -} -function cloneDelta(d) { - return { - start: clonePos(d.start), - end: clonePos(d.end), - action: d.action, - lines: d.lines.slice() - }; -} -function stringifyDelta(d) { - d = d || this; - if (Array.isArray(d)) { - return d.map(stringifyDelta).join("\n"); - } - var type = ""; - if (d.action) { - type = d.action == "insert" ? "+" : "-"; - type += "[" + d.lines + "]"; - } - else if (d.value) { - if (Array.isArray(d.value)) { - type = d.value.map(stringifyRange).join("\n"); - } - else { - type = stringifyRange(d.value); - } - } - if (d.start) { - type += stringifyRange(d); - } - if (d.id || d.rev) { - type += "\t(" + (d.id || d.rev) + ")"; - } - return type; -} -function stringifyRange(r) { - return r.start.row + ":" + r.start.column - + "=>" + r.end.row + ":" + r.end.column; -} -function swap(d1, d2) { - var i1 = d1.action == "insert"; - var i2 = d2.action == "insert"; - if (i1 && i2) { - if (cmp(d2.start, d1.end) >= 0) { - shift(d2, d1, -1); - } - else if (cmp(d2.start, d1.start) <= 0) { - shift(d1, d2, +1); - } - else { - return null; - } - } - else if (i1 && !i2) { - if (cmp(d2.start, d1.end) >= 0) { - shift(d2, d1, -1); - } - else if (cmp(d2.end, d1.start) <= 0) { - shift(d1, d2, -1); - } - else { - return null; - } - } - else if (!i1 && i2) { - if (cmp(d2.start, d1.start) >= 0) { - shift(d2, d1, +1); - } - else if (cmp(d2.start, d1.start) <= 0) { - shift(d1, d2, +1); - } - else { - return null; - } - } - else if (!i1 && !i2) { - if (cmp(d2.start, d1.start) >= 0) { - shift(d2, d1, +1); - } - else if (cmp(d2.end, d1.start) <= 0) { - shift(d1, d2, -1); - } - else { - return null; - } - } - return [d2, d1]; -} -function swapGroups(ds1, ds2) { - for (var i = ds1.length; i--;) { - for (var j = 0; j < ds2.length; j++) { - if (!swap(ds1[i], ds2[j])) { - while (i < ds1.length) { - while (j--) { - swap(ds2[j], ds1[i]); - } - j = ds2.length; - i++; - } - return [ds1, ds2]; - } - } - } - ds1.selectionBefore = ds2.selectionBefore = - ds1.selectionAfter = ds2.selectionAfter = null; - return [ds2, ds1]; -} -function xform(d1, c1) { - var i1 = d1.action == "insert"; - var i2 = c1.action == "insert"; - if (i1 && i2) { - if (cmp(d1.start, c1.start) < 0) { - shift(c1, d1, 1); - } - else { - shift(d1, c1, 1); - } - } - else if (i1 && !i2) { - if (cmp(d1.start, c1.end) >= 0) { - shift(d1, c1, -1); - } - else if (cmp(d1.start, c1.start) <= 0) { - shift(c1, d1, +1); - } - else { - shift(d1, Range.fromPoints(c1.start, d1.start), -1); - shift(c1, d1, +1); - } - } - else if (!i1 && i2) { - if (cmp(c1.start, d1.end) >= 0) { - shift(c1, d1, -1); - } - else if (cmp(c1.start, d1.start) <= 0) { - shift(d1, c1, +1); - } - else { - shift(c1, Range.fromPoints(d1.start, c1.start), -1); - shift(d1, c1, +1); - } - } - else if (!i1 && !i2) { - if (cmp(c1.start, d1.end) >= 0) { - shift(c1, d1, -1); - } - else if (cmp(c1.end, d1.start) <= 0) { - shift(d1, c1, -1); - } - else { - var before, after; - if (cmp(d1.start, c1.start) < 0) { - before = d1; - d1 = splitDelta(d1, c1.start); - } - if (cmp(d1.end, c1.end) > 0) { - after = splitDelta(d1, c1.end); - } - shiftPos(c1.end, d1.start, d1.end, -1); - if (after && !before) { - d1.lines = after.lines; - d1.start = after.start; - d1.end = after.end; - after = d1; - } - return [c1, before, after].filter(Boolean); - } - } - return [c1, d1]; -} -function shift(d1, d2, dir) { - shiftPos(d1.start, d2.start, d2.end, dir); - shiftPos(d1.end, d2.start, d2.end, dir); -} -function shiftPos(pos, start, end, dir) { - if (pos.row == (dir == 1 ? start : end).row) { - pos.column += dir * (end.column - start.column); - } - pos.row += dir * (end.row - start.row); -} -function splitDelta(c, pos) { - var lines = c.lines; - var end = c.end; - c.end = clonePos(pos); - var rowsBefore = c.end.row - c.start.row; - var otherLines = lines.splice(rowsBefore, lines.length); - var col = rowsBefore ? pos.column : pos.column - c.start.column; - lines.push(otherLines[0].substring(0, col)); - otherLines[0] = otherLines[0].substr(col); - var rest = { - start: clonePos(pos), - end: end, - lines: otherLines, - action: c.action - }; - return rest; -} -function moveDeltasByOne(redoStack, d) { - d = cloneDelta(d); - for (var j = redoStack.length; j--;) { - var deltaSet = redoStack[j]; - for (var i = 0; i < deltaSet.length; i++) { - var x = deltaSet[i]; - var xformed = xform(x, d); - d = xformed[0]; - if (xformed.length != 2) { - if (xformed[2]) { - deltaSet.splice(i + 1, 1, xformed[1], xformed[2]); - i++; - } - else if (!xformed[1]) { - deltaSet.splice(i, 1); - i--; - } - } - } - if (!deltaSet.length) { - redoStack.splice(j, 1); - } - } - return redoStack; -} -function rebaseRedoStack(redoStack, deltaSets) { - for (var i = 0; i < deltaSets.length; i++) { - var deltas = deltaSets[i]; - for (var j = 0; j < deltas.length; j++) { - moveDeltasByOne(redoStack, deltas[j]); - } - } -} -exports.UndoManager = UndoManager; - -}); - -ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; -var Range = require("../range").Range; -var FoldLine = /** @class */ (function () { - function FoldLine(foldData, folds) { - this.foldData = foldData; - if (Array.isArray(folds)) { - this.folds = folds; - } - else { - folds = this.folds = [folds]; - } - var last = folds[folds.length - 1]; - this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column); - this.start = this.range.start; - this.end = this.range.end; - this.folds.forEach(function (fold) { - fold.setFoldLine(this); - }, this); - } - FoldLine.prototype.shiftRow = function (shift) { - this.start.row += shift; - this.end.row += shift; - this.folds.forEach(function (fold) { - fold.start.row += shift; - fold.end.row += shift; - }); - }; - FoldLine.prototype.addFold = function (fold) { - if (fold.sameRow) { - if (fold.start.row < this.startRow || fold.endRow > this.endRow) { - throw new Error("Can't add a fold to this FoldLine as it has no connection"); - } - this.folds.push(fold); - this.folds.sort(function (a, b) { - return -a.range.compareEnd(b.start.row, b.start.column); - }); - if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { - this.end.row = fold.end.row; - this.end.column = fold.end.column; - } - else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { - this.start.row = fold.start.row; - this.start.column = fold.start.column; - } - } - else if (fold.start.row == this.end.row) { - this.folds.push(fold); - this.end.row = fold.end.row; - this.end.column = fold.end.column; - } - else if (fold.end.row == this.start.row) { - this.folds.unshift(fold); - this.start.row = fold.start.row; - this.start.column = fold.start.column; - } - else { - throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); - } - fold.foldLine = this; - }; - FoldLine.prototype.containsRow = function (row) { - return row >= this.start.row && row <= this.end.row; - }; - FoldLine.prototype.walk = function (callback, endRow, endColumn) { - var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true; - if (endRow == null) { - endRow = this.end.row; - endColumn = this.end.column; - } - for (var i = 0; i < folds.length; i++) { - fold = folds[i]; - cmp = fold.range.compareStart(endRow, endColumn); - if (cmp == -1) { - callback(null, endRow, endColumn, lastEnd, isNewRow); - return; - } - stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); - stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); - if (stop || cmp === 0) { - return; - } - isNewRow = !fold.sameRow; - lastEnd = fold.end.column; - } - callback(null, endRow, endColumn, lastEnd, isNewRow); - }; - FoldLine.prototype.getNextFoldTo = function (row, column) { - var fold, cmp; - for (var i = 0; i < this.folds.length; i++) { - fold = this.folds[i]; - cmp = fold.range.compareEnd(row, column); - if (cmp == -1) { - return { - fold: fold, - kind: "after" - }; - } - else if (cmp === 0) { - return { - fold: fold, - kind: "inside" - }; - } - } - return null; - }; - FoldLine.prototype.addRemoveChars = function (row, column, len) { - var ret = this.getNextFoldTo(row, column), fold, folds; - if (ret) { - fold = ret.fold; - if (ret.kind == "inside" - && fold.start.column != column - && fold.start.row != row) { - window.console && window.console.log(row, column, fold); - } - else if (fold.start.row == row) { - folds = this.folds; - var i = folds.indexOf(fold); - if (i === 0) { - this.start.column += len; - } - for (i; i < folds.length; i++) { - fold = folds[i]; - fold.start.column += len; - if (!fold.sameRow) { - return; - } - fold.end.column += len; - } - this.end.column += len; - } - } - }; - FoldLine.prototype.split = function (row, column) { - var pos = this.getNextFoldTo(row, column); - if (!pos || pos.kind == "inside") - return null; - var fold = pos.fold; - var folds = this.folds; - var foldData = this.foldData; - var i = folds.indexOf(fold); - var foldBefore = folds[i - 1]; - this.end.row = foldBefore.end.row; - this.end.column = foldBefore.end.column; - folds = folds.splice(i, folds.length - i); - var newFoldLine = new FoldLine(foldData, folds); - foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); - return newFoldLine; - }; - FoldLine.prototype.merge = function (foldLineNext) { - var folds = foldLineNext.folds; - for (var i = 0; i < folds.length; i++) { - this.addFold(folds[i]); - } - var foldData = this.foldData; - foldData.splice(foldData.indexOf(foldLineNext), 1); - }; - FoldLine.prototype.toString = function () { - var ret = [this.range.toString() + ": ["]; - this.folds.forEach(function (fold) { - ret.push(" " + fold.toString()); - }); - ret.push("]"); - return ret.join("\n"); - }; - FoldLine.prototype.idxToPosition = function (idx) { - var lastFoldEndColumn = 0; - for (var i = 0; i < this.folds.length; i++) { - var fold = this.folds[i]; - idx -= fold.start.column - lastFoldEndColumn; - if (idx < 0) { - return { - row: fold.start.row, - column: fold.start.column + idx - }; - } - idx -= fold.placeholder.length; - if (idx < 0) { - return fold.start; - } - lastFoldEndColumn = fold.end.column; - } - return { - row: this.end.row, - column: this.end.column + idx - }; - }; - return FoldLine; -}()); -exports.FoldLine = FoldLine; - -}); - -ace.define("ace/range_list",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; -var Range = require("./range").Range; -var comparePoints = Range.comparePoints; -var RangeList = /** @class */ (function () { - function RangeList() { - this.ranges = []; - this.$bias = 1; - } - RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) { - var list = this.ranges; - for (var i = startIndex || 0; i < list.length; i++) { - var range = list[i]; - var cmpEnd = comparePoints(pos, range.end); - if (cmpEnd > 0) - continue; - var cmpStart = comparePoints(pos, range.start); - if (cmpEnd === 0) - return excludeEdges && cmpStart !== 0 ? -i - 2 : i; - if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) - return i; - return -i - 1; - } - return -i - 1; - }; - RangeList.prototype.add = function (range) { - var excludeEdges = !range.isEmpty(); - var startIndex = this.pointIndex(range.start, excludeEdges); - if (startIndex < 0) - startIndex = -startIndex - 1; - var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); - if (endIndex < 0) - endIndex = -endIndex - 1; - else - endIndex++; - return this.ranges.splice(startIndex, endIndex - startIndex, range); - }; - RangeList.prototype.addList = function (list) { - var removed = []; - for (var i = list.length; i--;) { - removed.push.apply(removed, this.add(list[i])); - } - return removed; - }; - RangeList.prototype.substractPoint = function (pos) { - var i = this.pointIndex(pos); - if (i >= 0) - return this.ranges.splice(i, 1); - }; - RangeList.prototype.merge = function () { - var removed = []; - var list = this.ranges; - list = list.sort(function (a, b) { - return comparePoints(a.start, b.start); - }); - var next = list[0], range; - for (var i = 1; i < list.length; i++) { - range = next; - next = list[i]; - var cmp = comparePoints(range.end, next.start); - if (cmp < 0) - continue; - if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) - continue; - if (comparePoints(range.end, next.end) < 0) { - range.end.row = next.end.row; - range.end.column = next.end.column; - } - list.splice(i, 1); - removed.push(next); - next = range; - i--; - } - this.ranges = list; - return removed; - }; - RangeList.prototype.contains = function (row, column) { - return this.pointIndex({ row: row, column: column }) >= 0; - }; - RangeList.prototype.containsPoint = function (pos) { - return this.pointIndex(pos) >= 0; - }; - RangeList.prototype.rangeAtPoint = function (pos) { - var i = this.pointIndex(pos); - if (i >= 0) - return this.ranges[i]; - }; - RangeList.prototype.clipRows = function (startRow, endRow) { - var list = this.ranges; - if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) - return []; - var startIndex = this.pointIndex({ row: startRow, column: 0 }); - if (startIndex < 0) - startIndex = -startIndex - 1; - var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex); - if (endIndex < 0) - endIndex = -endIndex - 1; - var clipped = []; - for (var i = startIndex; i < endIndex; i++) { - clipped.push(list[i]); - } - return clipped; - }; - RangeList.prototype.removeAll = function () { - return this.ranges.splice(0, this.ranges.length); - }; - RangeList.prototype.attach = function (session) { - if (this.session) - this.detach(); - this.session = session; - this.onChange = this.$onChange.bind(this); - this.session.on('change', this.onChange); - }; - RangeList.prototype.detach = function () { - if (!this.session) - return; - this.session.removeListener('change', this.onChange); - this.session = null; - }; - RangeList.prototype.$onChange = function (delta) { - var start = delta.start; - var end = delta.end; - var startRow = start.row; - var endRow = end.row; - var ranges = this.ranges; - for (var i = 0, n = ranges.length; i < n; i++) { - var r = ranges[i]; - if (r.end.row >= startRow) - break; - } - if (delta.action == "insert") { - var lineDif = endRow - startRow; - var colDiff = -start.column + end.column; - for (; i < n; i++) { - var r = ranges[i]; - if (r.start.row > startRow) - break; - if (r.start.row == startRow && r.start.column >= start.column) { - if (r.start.column == start.column && this.$bias <= 0) { - } - else { - r.start.column += colDiff; - r.start.row += lineDif; - } - } - if (r.end.row == startRow && r.end.column >= start.column) { - if (r.end.column == start.column && this.$bias < 0) { - continue; - } - if (r.end.column == start.column && colDiff > 0 && i < n - 1) { - if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column) - r.end.column -= colDiff; - } - r.end.column += colDiff; - r.end.row += lineDif; - } - } - } - else { - var lineDif = startRow - endRow; - var colDiff = start.column - end.column; - for (; i < n; i++) { - var r = ranges[i]; - if (r.start.row > endRow) - break; - if (r.end.row < endRow - && (startRow < r.end.row - || startRow == r.end.row && start.column < r.end.column)) { - r.end.row = startRow; - r.end.column = start.column; - } - else if (r.end.row == endRow) { - if (r.end.column <= end.column) { - if (lineDif || r.end.column > start.column) { - r.end.column = start.column; - r.end.row = start.row; - } - } - else { - r.end.column += colDiff; - r.end.row += lineDif; - } - } - else if (r.end.row > endRow) { - r.end.row += lineDif; - } - if (r.start.row < endRow - && (startRow < r.start.row - || startRow == r.start.row && start.column < r.start.column)) { - r.start.row = startRow; - r.start.column = start.column; - } - else if (r.start.row == endRow) { - if (r.start.column <= end.column) { - if (lineDif || r.start.column > start.column) { - r.start.column = start.column; - r.start.row = start.row; - } - } - else { - r.start.column += colDiff; - r.start.row += lineDif; - } - } - else if (r.start.row > endRow) { - r.start.row += lineDif; - } - } - } - if (lineDif != 0 && i < n) { - for (; i < n; i++) { - var r = ranges[i]; - r.start.row += lineDif; - r.end.row += lineDif; - } - } - }; - return RangeList; -}()); -RangeList.prototype.comparePoints = comparePoints; -exports.RangeList = RangeList; - -}); - -ace.define("ace/edit_session/fold",["require","exports","module","ace/range_list"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var RangeList = require("../range_list").RangeList; -var Fold = /** @class */ (function (_super) { - __extends(Fold, _super); - function Fold(range, placeholder) { - var _this = _super.call(this) || this; - _this.foldLine = null; - _this.placeholder = placeholder; - _this.range = range; - _this.start = range.start; - _this.end = range.end; - _this.sameRow = range.start.row == range.end.row; - _this.subFolds = _this.ranges = []; - return _this; - } - Fold.prototype.toString = function () { - return '"' + this.placeholder + '" ' + this.range.toString(); - }; - Fold.prototype.setFoldLine = function (foldLine) { - this.foldLine = foldLine; - this.subFolds.forEach(function (fold) { - fold.setFoldLine(foldLine); - }); - }; - Fold.prototype.clone = function () { - var range = this.range.clone(); - var fold = new Fold(range, this.placeholder); - this.subFolds.forEach(function (subFold) { - fold.subFolds.push(subFold.clone()); - }); - fold.collapseChildren = this.collapseChildren; - return fold; - }; - Fold.prototype.addSubFold = function (fold) { - if (this.range.isEqual(fold)) - return; - consumeRange(fold, this.start); - var row = fold.start.row, column = fold.start.column; - for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { - cmp = this.subFolds[i].range.compare(row, column); - if (cmp != 1) - break; - } - var afterStart = this.subFolds[i]; - var firstConsumed = 0; - if (cmp == 0) { - if (afterStart.range.containsRange(fold)) - return afterStart.addSubFold(fold); - else - firstConsumed = 1; - } - var row = fold.range.end.row, column = fold.range.end.column; - for (var j = i, cmp = -1; j < this.subFolds.length; j++) { - cmp = this.subFolds[j].range.compare(row, column); - if (cmp != 1) - break; - } - if (cmp == 0) - j++; - var consumedFolds = this.subFolds.splice(i, j - i, fold); - var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length; - for (var k = firstConsumed; k < last; k++) { - fold.addSubFold(consumedFolds[k]); - } - fold.setFoldLine(this.foldLine); - return fold; - }; - Fold.prototype.restoreRange = function (range) { - return restoreRange(range, this.start); - }; - return Fold; -}(RangeList)); -function consumePoint(point, anchor) { - point.row -= anchor.row; - if (point.row == 0) - point.column -= anchor.column; -} -function consumeRange(range, anchor) { - consumePoint(range.start, anchor); - consumePoint(range.end, anchor); -} -function restorePoint(point, anchor) { - if (point.row == 0) - point.column += anchor.column; - point.row += anchor.row; -} -function restoreRange(range, anchor) { - restorePoint(range.start, anchor); - restorePoint(range.end, anchor); -} -exports.Fold = Fold; - -}); - -ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator","ace/mouse/mouse_event"], function(require, exports, module){// @ts-nocheck -"use strict"; -var Range = require("../range").Range; -var FoldLine = require("./fold_line").FoldLine; -var Fold = require("./fold").Fold; -var TokenIterator = require("../token_iterator").TokenIterator; -var MouseEvent = require("../mouse/mouse_event").MouseEvent; -function Folding() { - this.getFoldAt = function (row, column, side) { - var foldLine = this.getFoldLine(row); - if (!foldLine) - return null; - var folds = foldLine.folds; - for (var i = 0; i < folds.length; i++) { - var range = folds[i].range; - if (range.contains(row, column)) { - if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) { - continue; - } - else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) { - continue; - } - return folds[i]; - } - } - }; - this.getFoldsInRange = function (range) { - var start = range.start; - var end = range.end; - var foldLines = this.$foldData; - var foundFolds = []; - start.column += 1; - end.column -= 1; - for (var i = 0; i < foldLines.length; i++) { - var cmp = foldLines[i].range.compareRange(range); - if (cmp == 2) { - continue; - } - else if (cmp == -2) { - break; - } - var folds = foldLines[i].folds; - for (var j = 0; j < folds.length; j++) { - var fold = folds[j]; - cmp = fold.range.compareRange(range); - if (cmp == -2) { - break; - } - else if (cmp == 2) { - continue; - } - else - if (cmp == 42) { - break; - } - foundFolds.push(fold); - } - } - start.column -= 1; - end.column += 1; - return foundFolds; - }; - this.getFoldsInRangeList = function (ranges) { - if (Array.isArray(ranges)) { - var folds = []; - ranges.forEach(function (range) { - folds = folds.concat(this.getFoldsInRange(range)); - }, this); - } - else { - var folds = this.getFoldsInRange(ranges); - } - return folds; - }; - this.getAllFolds = function () { - var folds = []; - var foldLines = this.$foldData; - for (var i = 0; i < foldLines.length; i++) - for (var j = 0; j < foldLines[i].folds.length; j++) - folds.push(foldLines[i].folds[j]); - return folds; - }; - this.getFoldStringAt = function (row, column, trim, foldLine) { - foldLine = foldLine || this.getFoldLine(row); - if (!foldLine) - return null; - var lastFold = { - end: { column: 0 } - }; - var str, fold; - for (var i = 0; i < foldLine.folds.length; i++) { - fold = foldLine.folds[i]; - var cmp = fold.range.compareEnd(row, column); - if (cmp == -1) { - str = this - .getLine(fold.start.row) - .substring(lastFold.end.column, fold.start.column); - break; - } - else if (cmp === 0) { - return null; - } - lastFold = fold; - } - if (!str) - str = this.getLine(fold.start.row).substring(lastFold.end.column); - if (trim == -1) - return str.substring(0, column - lastFold.end.column); - else if (trim == 1) - return str.substring(column - lastFold.end.column); - else - return str; - }; - this.getFoldLine = function (docRow, startFoldLine) { - var foldData = this.$foldData; - var i = 0; - if (startFoldLine) - i = foldData.indexOf(startFoldLine); - if (i == -1) - i = 0; - for (i; i < foldData.length; i++) { - var foldLine = foldData[i]; - if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { - return foldLine; - } - else if (foldLine.end.row > docRow) { - return null; - } - } - return null; - }; - this.getNextFoldLine = function (docRow, startFoldLine) { - var foldData = this.$foldData; - var i = 0; - if (startFoldLine) - i = foldData.indexOf(startFoldLine); - if (i == -1) - i = 0; - for (i; i < foldData.length; i++) { - var foldLine = foldData[i]; - if (foldLine.end.row >= docRow) { - return foldLine; - } - } - return null; - }; - this.getFoldedRowCount = function (first, last) { - var foldData = this.$foldData, rowCount = last - first + 1; - for (var i = 0; i < foldData.length; i++) { - var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row; - if (end >= last) { - if (start < last) { - if (start >= first) - rowCount -= last - start; - else - rowCount = 0; // in one fold - } - break; - } - else if (end >= first) { - if (start >= first) // fold inside range - rowCount -= end - start; - else - rowCount -= end - first + 1; - } - } - return rowCount; - }; - this.$addFoldLine = function (foldLine) { - this.$foldData.push(foldLine); - this.$foldData.sort(function (a, b) { - return a.start.row - b.start.row; - }); - return foldLine; - }; - this.addFold = function (placeholder, range) { - var foldData = this.$foldData; - var added = false; - var fold; - if (placeholder instanceof Fold) - fold = placeholder; - else { - fold = new Fold(range, placeholder); - fold.collapseChildren = range.collapseChildren; - } - this.$clipRangeToDocument(fold.range); - var startRow = fold.start.row; - var startColumn = fold.start.column; - var endRow = fold.end.row; - var endColumn = fold.end.column; - var startFold = this.getFoldAt(startRow, startColumn, 1); - var endFold = this.getFoldAt(endRow, endColumn, -1); - if (startFold && endFold == startFold) - return startFold.addSubFold(fold); - if (startFold && !startFold.range.isStart(startRow, startColumn)) - this.removeFold(startFold); - if (endFold && !endFold.range.isEnd(endRow, endColumn)) - this.removeFold(endFold); - var folds = this.getFoldsInRange(fold.range); - if (folds.length > 0) { - this.removeFolds(folds); - if (!fold.collapseChildren) { - folds.forEach(function (subFold) { - fold.addSubFold(subFold); - }); - } - } - for (var i = 0; i < foldData.length; i++) { - var foldLine = foldData[i]; - if (endRow == foldLine.start.row) { - foldLine.addFold(fold); - added = true; - break; - } - else if (startRow == foldLine.end.row) { - foldLine.addFold(fold); - added = true; - if (!fold.sameRow) { - var foldLineNext = foldData[i + 1]; - if (foldLineNext && foldLineNext.start.row == endRow) { - foldLine.merge(foldLineNext); - break; - } - } - break; - } - else if (endRow <= foldLine.start.row) { - break; - } - } - if (!added) - foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); - if (this.$useWrapMode) - this.$updateWrapData(foldLine.start.row, foldLine.start.row); - else - this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); - this.$modified = true; - this._signal("changeFold", { data: fold, action: "add" }); - return fold; - }; - this.addFolds = function (folds) { - folds.forEach(function (fold) { - this.addFold(fold); - }, this); - }; - this.removeFold = function (fold) { - var foldLine = fold.foldLine; - var startRow = foldLine.start.row; - var endRow = foldLine.end.row; - var foldLines = this.$foldData; - var folds = foldLine.folds; - if (folds.length == 1) { - foldLines.splice(foldLines.indexOf(foldLine), 1); - } - else - if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { - folds.pop(); - foldLine.end.row = folds[folds.length - 1].end.row; - foldLine.end.column = folds[folds.length - 1].end.column; - } - else - if (foldLine.range.isStart(fold.start.row, fold.start.column)) { - folds.shift(); - foldLine.start.row = folds[0].start.row; - foldLine.start.column = folds[0].start.column; - } - else - if (fold.sameRow) { - folds.splice(folds.indexOf(fold), 1); - } - else - { - var newFoldLine = foldLine.split(fold.start.row, fold.start.column); - folds = newFoldLine.folds; - folds.shift(); - newFoldLine.start.row = folds[0].start.row; - newFoldLine.start.column = folds[0].start.column; - } - if (!this.$updating) { - if (this.$useWrapMode) - this.$updateWrapData(startRow, endRow); - else - this.$updateRowLengthCache(startRow, endRow); - } - this.$modified = true; - this._signal("changeFold", { data: fold, action: "remove" }); - }; - this.removeFolds = function (folds) { - var cloneFolds = []; - for (var i = 0; i < folds.length; i++) { - cloneFolds.push(folds[i]); - } - cloneFolds.forEach(function (fold) { - this.removeFold(fold); - }, this); - this.$modified = true; - }; - this.expandFold = function (fold) { - this.removeFold(fold); - fold.subFolds.forEach(function (subFold) { - fold.restoreRange(subFold); - this.addFold(subFold); - }, this); - if (fold.collapseChildren > 0) { - this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1); - } - fold.subFolds = []; - }; - this.expandFolds = function (folds) { - folds.forEach(function (fold) { - this.expandFold(fold); - }, this); - }; - this.unfold = function (location, expandInner) { - var range, folds; - if (location == null) { - range = new Range(0, 0, this.getLength(), 0); - if (expandInner == null) - expandInner = true; - } - else if (typeof location == "number") { - range = new Range(location, 0, location, this.getLine(location).length); - } - else if ("row" in location) { - range = Range.fromPoints(location, location); - } - else if (Array.isArray(location)) { - folds = []; - location.forEach(function (range) { - folds = folds.concat(this.unfold(range)); - }, this); - return folds; - } - else { - range = location; - } - folds = this.getFoldsInRangeList(range); - var outermostFolds = folds; - while (folds.length == 1 - && Range.comparePoints(folds[0].start, range.start) < 0 - && Range.comparePoints(folds[0].end, range.end) > 0) { - this.expandFolds(folds); - folds = this.getFoldsInRangeList(range); - } - if (expandInner != false) { - this.removeFolds(folds); - } - else { - this.expandFolds(folds); - } - if (outermostFolds.length) - return outermostFolds; - }; - this.isRowFolded = function (docRow, startFoldRow) { - return !!this.getFoldLine(docRow, startFoldRow); - }; - this.getRowFoldEnd = function (docRow, startFoldRow) { - var foldLine = this.getFoldLine(docRow, startFoldRow); - return foldLine ? foldLine.end.row : docRow; - }; - this.getRowFoldStart = function (docRow, startFoldRow) { - var foldLine = this.getFoldLine(docRow, startFoldRow); - return foldLine ? foldLine.start.row : docRow; - }; - this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) { - if (startRow == null) - startRow = foldLine.start.row; - if (startColumn == null) - startColumn = 0; - if (endRow == null) - endRow = foldLine.end.row; - if (endColumn == null) - endColumn = this.getLine(endRow).length; - var doc = this.doc; - var textLine = ""; - foldLine.walk(function (placeholder, row, column, lastColumn) { - if (row < startRow) - return; - if (row == startRow) { - if (column < startColumn) - return; - lastColumn = Math.max(startColumn, lastColumn); - } - if (placeholder != null) { - textLine += placeholder; - } - else { - textLine += doc.getLine(row).substring(lastColumn, column); - } - }, endRow, endColumn); - return textLine; - }; - this.getDisplayLine = function (row, endColumn, startRow, startColumn) { - var foldLine = this.getFoldLine(row); - if (!foldLine) { - var line; - line = this.doc.getLine(row); - return line.substring(startColumn || 0, endColumn || line.length); - } - else { - return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn); - } - }; - this.$cloneFoldData = function () { - var fd = []; - fd = this.$foldData.map(function (foldLine) { - var folds = foldLine.folds.map(function (fold) { - return fold.clone(); - }); - return new FoldLine(fd, folds); - }); - return fd; - }; - this.toggleFold = function (tryToUnfold) { - var selection = this.selection; - var range = selection.getRange(); - var fold; - var bracketPos; - if (range.isEmpty()) { - var cursor = range.start; - fold = this.getFoldAt(cursor.row, cursor.column); - if (fold) { - this.expandFold(fold); - return; - } - else if (tryToUnfold) { - var foldLine = this.getFoldLine(cursor.row); - if (foldLine) - this.expandFolds(foldLine.folds); - return; - } - else if (bracketPos = this.findMatchingBracket(cursor)) { - if (range.comparePoint(bracketPos) == 1) { - range.end = bracketPos; - } - else { - range.start = bracketPos; - range.start.column++; - range.end.column--; - } - } - else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) { - if (range.comparePoint(bracketPos) == 1) - range.end = bracketPos; - else - range.start = bracketPos; - range.start.column++; - } - else { - range = this.getCommentFoldRange(cursor.row, cursor.column) || range; - } - } - else { - var folds = this.getFoldsInRange(range); - if (tryToUnfold && folds.length) { - this.expandFolds(folds); - return; - } - else if (folds.length == 1) { - fold = folds[0]; - } - } - if (!fold) - fold = this.getFoldAt(range.start.row, range.start.column); - if (fold && fold.range.toString() == range.toString()) { - this.expandFold(fold); - return; - } - var placeholder = "..."; - if (!range.isMultiLine()) { - placeholder = this.getTextRange(range); - if (placeholder.length < 4) - return; - placeholder = placeholder.trim().substring(0, 2) + ".."; - } - this.addFold(placeholder, range); - }; - this.getCommentFoldRange = function (row, column, dir) { - var iterator = new TokenIterator(this, row, column); - var token = iterator.getCurrentToken(); - var type = token && token.type; - if (token && /^comment|string/.test(type)) { - type = type.match(/comment|string/)[0]; - if (type == "comment") - type += "|doc-start|\\.doc"; - var re = new RegExp(type); - var range = new Range(); - if (dir != 1) { - do { - token = iterator.stepBackward(); - } while (token && re.test(token.type)); - token = iterator.stepForward(); - } - range.start.row = iterator.getCurrentTokenRow(); - range.start.column = iterator.getCurrentTokenColumn() + token.value.length; - iterator = new TokenIterator(this, row, column); - var initState = this.getState(iterator.$row); - if (dir != -1) { - var lastRow = -1; - do { - token = iterator.stepForward(); - if (lastRow == -1) { - var state = this.getState(iterator.$row); - if (initState.toString() !== state.toString()) - lastRow = iterator.$row; - } - else if (iterator.$row > lastRow) { - break; - } - } while (token && re.test(token.type)); - token = iterator.stepBackward(); - } - else - token = iterator.getCurrentToken(); - range.end.row = iterator.getCurrentTokenRow(); - range.end.column = iterator.getCurrentTokenColumn(); - if (range.start.row == range.end.row && range.start.column > range.end.column) - return; - return range; - } - }; - this.foldAll = function (startRow, endRow, depth, test) { - if (depth == undefined) - depth = 100000; // JSON.stringify doesn't hanle Infinity - var foldWidgets = this.foldWidgets; - if (!foldWidgets) - return; // mode doesn't support folding - endRow = endRow || this.getLength(); - startRow = startRow || 0; - for (var row = startRow; row < endRow; row++) { - if (foldWidgets[row] == null) - foldWidgets[row] = this.getFoldWidget(row); - if (foldWidgets[row] != "start") - continue; - if (test && !test(row)) - continue; - var range = this.getFoldWidgetRange(row); - if (range && range.isMultiLine() - && range.end.row <= endRow - && range.start.row >= startRow) { - row = range.end.row; - range.collapseChildren = depth; - this.addFold("...", range); - } - } - }; - this.foldToLevel = function (level) { - this.foldAll(); - while (level-- > 0) - this.unfold(null, false); - }; - this.foldAllComments = function () { - var session = this; - this.foldAll(null, null, null, function (row) { - var tokens = session.getTokens(row); - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (token.type == "text" && /^\s+$/.test(token.value)) - continue; - if (/comment/.test(token.type)) - return true; - return false; - } - }); - }; - this.$foldStyles = { - "manual": 1, - "markbegin": 1, - "markbeginend": 1 - }; - this.$foldStyle = "markbegin"; - this.setFoldStyle = function (style) { - if (!this.$foldStyles[style]) - throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); - if (this.$foldStyle == style) - return; - this.$foldStyle = style; - if (style == "manual") - this.unfold(); - var mode = this.$foldMode; - this.$setFolding(null); - this.$setFolding(mode); - }; - this.$setFolding = function (foldMode) { - if (this.$foldMode == foldMode) - return; - this.$foldMode = foldMode; - this.off('change', this.$updateFoldWidgets); - this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); - this._signal("changeAnnotation"); - if (!foldMode || this.$foldStyle == "manual") { - this.foldWidgets = null; - return; - } - this.foldWidgets = []; - this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); - this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); - this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); - this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); - this.on('change', this.$updateFoldWidgets); - this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); - }; - this.getParentFoldRangeData = function (row, ignoreCurrent) { - var fw = this.foldWidgets; - if (!fw || (ignoreCurrent && fw[row])) - return {}; - var i = row - 1, firstRange; - while (i >= 0) { - var c = fw[i]; - if (c == null) - c = fw[i] = this.getFoldWidget(i); - if (c == "start") { - var range = this.getFoldWidgetRange(i); - if (!firstRange) - firstRange = range; - if (range && range.end.row >= row) - break; - } - i--; - } - return { - range: i !== -1 && range, - firstRange: firstRange - }; - }; - this.onFoldWidgetClick = function (row, e) { - if (e instanceof MouseEvent) - e = e.domEvent; - var options = { - children: e.shiftKey, - all: e.ctrlKey || e.metaKey, - siblings: e.altKey - }; - var range = this.$toggleFoldWidget(row, options); - if (!range) { - var el = (e.target || e.srcElement); - if (el && /ace_fold-widget/.test(el.className)) - el.className += " ace_invalid"; - } - }; - this.$toggleFoldWidget = function (row, options) { - if (!this.getFoldWidget) - return; - var type = this.getFoldWidget(row); - var line = this.getLine(row); - var dir = type === "end" ? -1 : 1; - var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); - if (fold) { - if (options.children || options.all) - this.removeFold(fold); - else - this.expandFold(fold); - return fold; - } - var range = this.getFoldWidgetRange(row, true); - if (range && !range.isMultiLine()) { - fold = this.getFoldAt(range.start.row, range.start.column, 1); - if (fold && range.isEqual(fold.range)) { - this.removeFold(fold); - return fold; - } - } - if (options.siblings) { - var data = this.getParentFoldRangeData(row); - if (data.range) { - var startRow = data.range.start.row + 1; - var endRow = data.range.end.row; - } - this.foldAll(startRow, endRow, options.all ? 10000 : 0); - } - else if (options.children) { - endRow = range ? range.end.row : this.getLength(); - this.foldAll(row + 1, endRow, options.all ? 10000 : 0); - } - else if (range) { - if (options.all) - range.collapseChildren = 10000; - this.addFold("...", range); - } - return range; - }; - this.toggleFoldWidget = function (toggleParent) { - var row = this.selection.getCursor().row; - row = this.getRowFoldStart(row); - var range = this.$toggleFoldWidget(row, {}); - if (range) - return; - var data = this.getParentFoldRangeData(row, true); - range = data.range || data.firstRange; - if (range) { - row = range.start.row; - var fold = this.getFoldAt(row, this.getLine(row).length, 1); - if (fold) { - this.removeFold(fold); - } - else { - this.addFold("...", range); - } - } - }; - this.updateFoldWidgets = function (delta) { - var firstRow = delta.start.row; - var len = delta.end.row - firstRow; - if (len === 0) { - this.foldWidgets[firstRow] = null; - } - else if (delta.action == 'remove') { - this.foldWidgets.splice(firstRow, len + 1, null); - } - else { - var args = Array(len + 1); - args.unshift(firstRow, 1); - this.foldWidgets.splice.apply(this.foldWidgets, args); - } - }; - this.tokenizerUpdateFoldWidgets = function (e) { - var rows = e.data; - if (rows.first != rows.last) { - if (this.foldWidgets.length > rows.first) - this.foldWidgets.splice(rows.first, this.foldWidgets.length); - } - }; -} -exports.Folding = Folding; - -}); - -ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(require, exports, module){"use strict"; -var TokenIterator = require("../token_iterator").TokenIterator; -var Range = require("../range").Range; -function BracketMatch() { - this.findMatchingBracket = function (position, chr) { - if (position.column == 0) - return null; - var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1); - if (charBeforeCursor == "") - return null; - var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); - if (!match) - return null; - if (match[1]) - return this.$findClosingBracket(match[1], position); - else - return this.$findOpeningBracket(match[2], position); - }; - this.getBracketRange = function (pos) { - var line = this.getLine(pos.row); - var before = true, range; - var chr = line.charAt(pos.column - 1); - var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); - if (!match) { - chr = line.charAt(pos.column); - pos = { row: pos.row, column: pos.column + 1 }; - match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); - before = false; - } - if (!match) - return null; - if (match[1]) { - var bracketPos = this.$findClosingBracket(match[1], pos); - if (!bracketPos) - return null; - range = Range.fromPoints(pos, bracketPos); - if (!before) { - range.end.column++; - range.start.column--; - } - range.cursor = range.end; - } - else { - var bracketPos = this.$findOpeningBracket(match[2], pos); - if (!bracketPos) - return null; - range = Range.fromPoints(bracketPos, pos); - if (!before) { - range.start.column++; - range.end.column--; - } - range.cursor = range.start; - } - return range; - }; - this.getMatchingBracketRanges = function (pos, isBackwards) { - var line = this.getLine(pos.row); - var bracketsRegExp = /([\(\[\{])|([\)\]\}])/; - var chr = !isBackwards && line.charAt(pos.column - 1); - var match = chr && chr.match(bracketsRegExp); - if (!match) { - chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column); - pos = { - row: pos.row, - column: pos.column + 1 - }; - match = chr && chr.match(bracketsRegExp); - } - if (!match) - return null; - var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column); - var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos) - : this.$findOpeningBracket(match[2], pos); - if (!bracketPos) - return [startRange]; - var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1); - return [startRange, endRange]; - }; - this.$brackets = { - ")": "(", - "(": ")", - "]": "[", - "[": "]", - "{": "}", - "}": "{", - "<": ">", - ">": "<" - }; - this.$findOpeningBracket = function (bracket, position, typeRe) { - var openBracket = this.$brackets[bracket]; - var depth = 1; - var iterator = new TokenIterator(this, position.row, position.column); - var token = iterator.getCurrentToken(); - if (!token) - token = iterator.stepForward(); - if (!token) - return; - if (!typeRe) { - typeRe = new RegExp("(\\.?" + - token.type.replace(".", "\\.").replace("rparen", ".paren") - .replace(/\b(?:end)\b/, "(?:start|begin|end)") - .replace(/-close\b/, "-(close|open)") - + ")+"); - } - var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; - var value = token.value; - while (true) { - while (valueIndex >= 0) { - var chr = value.charAt(valueIndex); - if (chr == openBracket) { - depth -= 1; - if (depth == 0) { - return { row: iterator.getCurrentTokenRow(), - column: valueIndex + iterator.getCurrentTokenColumn() }; - } - } - else if (chr == bracket) { - depth += 1; - } - valueIndex -= 1; - } - do { - token = iterator.stepBackward(); - } while (token && !typeRe.test(token.type)); - if (token == null) - break; - value = token.value; - valueIndex = value.length - 1; - } - return null; - }; - this.$findClosingBracket = function (bracket, position, typeRe) { - var closingBracket = this.$brackets[bracket]; - var depth = 1; - var iterator = new TokenIterator(this, position.row, position.column); - var token = iterator.getCurrentToken(); - if (!token) - token = iterator.stepForward(); - if (!token) - return; - if (!typeRe) { - typeRe = new RegExp("(\\.?" + - token.type.replace(".", "\\.").replace("lparen", ".paren") - .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)") - .replace(/-open\b/, "-(close|open)") - + ")+"); - } - var valueIndex = position.column - iterator.getCurrentTokenColumn(); - while (true) { - var value = token.value; - var valueLength = value.length; - while (valueIndex < valueLength) { - var chr = value.charAt(valueIndex); - if (chr == closingBracket) { - depth -= 1; - if (depth == 0) { - return { row: iterator.getCurrentTokenRow(), - column: valueIndex + iterator.getCurrentTokenColumn() }; - } - } - else if (chr == bracket) { - depth += 1; - } - valueIndex += 1; - } - do { - token = iterator.stepForward(); - } while (token && !typeRe.test(token.type)); - if (token == null) - break; - valueIndex = 0; - } - return null; - }; - this.getMatchingTags = function (pos) { - var iterator = new TokenIterator(this, pos.row, pos.column); - var token = this.$findTagName(iterator); - if (!token) - return; - var prevToken = iterator.stepBackward(); - if (prevToken.value === '<') { - return this.$findClosingTag(iterator, token); - } - else { - return this.$findOpeningTag(iterator, token); - } - }; - this.$findTagName = function (iterator) { - var token = iterator.getCurrentToken(); - var found = false; - var backward = false; - if (token && token.type.indexOf('tag-name') === -1) { - do { - if (backward) - token = iterator.stepBackward(); - else - token = iterator.stepForward(); - if (token) { - if (token.value === "/>") { - backward = true; - } - else if (token.type.indexOf('tag-name') !== -1) { - found = true; - } - } - } while (token && !found); - } - return token; - }; - this.$findClosingTag = function (iterator, token) { - var prevToken; - var currentTag = token.value; - var tag = token.value; - var depth = 0; - var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); - token = iterator.stepForward(); - var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length); - var foundOpenTagEnd = false; - do { - prevToken = token; - if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) { - var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>` - foundOpenTagEnd = true; - } - token = iterator.stepForward(); - if (token) { - if (token.value === '>' && !foundOpenTagEnd) { - var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>` - foundOpenTagEnd = true; - } - if (token.type.indexOf('tag-name') !== -1) { - currentTag = token.value; - if (tag === currentTag) { - if (prevToken.value === '<') { - depth++; - } - else if (prevToken.value === '') { - var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > - } - else { - return; - } - } - } - } - } - else if (tag === currentTag && token.value === '/>') { // self-closing tag - depth--; - if (depth < 0) { //found self-closing tag end - var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); - var closeTagName = closeTagStart; - var closeTagEnd = closeTagName; - var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1); - } - } - } - } while (token && depth >= 0); - if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) { - return { - openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column), - closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column), - openTagName: openTagName, - closeTagName: closeTagName - }; - } - }; - this.$findOpeningTag = function (iterator, token) { - var prevToken = iterator.getCurrentToken(); - var tag = token.value; - var depth = 0; - var startRow = iterator.getCurrentTokenRow(); - var startColumn = iterator.getCurrentTokenColumn(); - var endColumn = startColumn + 2; - var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for ") - return; - var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > - iterator.stepBackward(); - iterator.stepBackward(); - do { - token = prevToken; - startRow = iterator.getCurrentTokenRow(); - startColumn = iterator.getCurrentTokenColumn(); - endColumn = startColumn + token.value.length; - prevToken = iterator.stepBackward(); - if (token) { - if (token.type.indexOf('tag-name') !== -1) { - if (tag === token.value) { - if (prevToken.value === '<') { - depth++; - if (depth > 0) { //found opening tag - var openTagName = new Range(startRow, startColumn, startRow, endColumn); - var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for < - do { - token = iterator.stepForward(); - } while (token && token.value !== '>'); - var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > - } - } - else if (prevToken.value === '') { // self-closing tag - var stepCount = 0; - var tmpToken = prevToken; - while (tmpToken) { - if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) { - depth--; - break; - } - else if (tmpToken.value === '<') { - break; - } - tmpToken = iterator.stepBackward(); - stepCount++; - } - for (var i = 0; i < stepCount; i++) { - iterator.stepForward(); - } - } - } - } while (prevToken && depth <= 0); - if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) { - return { - openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column), - closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column), - openTagName: openTagName, - closeTagName: closeTagName - }; - } - }; -} -exports.BracketMatch = BracketMatch; - -}); - -ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/bidihandler","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/line_widgets","ace/document","ace/background_tokenizer","ace/search_highlight","ace/undomanager","ace/edit_session/folding","ace/edit_session/bracket_match"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var lang = require("./lib/lang"); -var BidiHandler = require("./bidihandler").BidiHandler; -var config = require("./config"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Selection = require("./selection").Selection; -var TextMode = require("./mode/text").Mode; -var Range = require("./range").Range; -var LineWidgets = require("./line_widgets").LineWidgets; -var Document = require("./document").Document; -var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer; -var SearchHighlight = require("./search_highlight").SearchHighlight; -var UndoManager = require("./undomanager").UndoManager; -var EditSession = /** @class */ (function () { - function EditSession(text, mode) { this.doc; - this.$breakpoints = []; - this.$decorations = []; - this.$frontMarkers = {}; - this.$backMarkers = {}; - this.$markerId = 1; - this.$undoSelect = true; - this.$editor = null; - this.prevOp = {}; - this.$foldData = []; - this.id = "session" + (++EditSession.$uid); - this.$foldData.toString = function () { - return this.join("\n"); - }; - this.$gutterCustomWidgets = {}; - this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this); - var _self = this; - this.bgTokenizer.on("update", function (e) { - _self._signal("tokenizerUpdate", e); - }); - this.on("changeFold", this.onChangeFold.bind(this)); - this.$onChange = this.onChange.bind(this); - if (typeof text != "object" || !text.getLine) - text = new Document(/**@type{string}*/ (text)); - this.setDocument(text); - this.selection = new Selection(this); - this.$onSelectionChange = this.onSelectionChange.bind(this); - this.selection.on("changeSelection", this.$onSelectionChange); - this.selection.on("changeCursor", this.$onSelectionChange); - this.$bidiHandler = new BidiHandler(this); - config.resetOptions(this); - this.setMode(mode); - config._signal("session", this); - this.destroyed = false; - this.$initOperationListeners(); - } - EditSession.prototype.$initOperationListeners = function () { - var _this = this; - this.curOp = null; - this.on("change", function () { - if (!_this.curOp) { - _this.startOperation(); - _this.curOp.selectionBefore = _this.$lastSel; - } - _this.curOp.docChanged = true; - }, true); - this.on("changeSelection", function () { - if (!_this.curOp) { - _this.startOperation(); - _this.curOp.selectionBefore = _this.$lastSel; - } - _this.curOp.selectionChanged = true; - }, true); - this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true)); - }; - EditSession.prototype.startOperation = function (commandEvent) { - if (this.curOp) { - if (!commandEvent || this.curOp.command) { - return; - } - this.prevOp = this.curOp; - } - if (!commandEvent) { - commandEvent = {}; - } - this.$operationResetTimer.schedule(); - this.curOp = { - command: commandEvent.command || {}, - args: commandEvent.args - }; - this.curOp.selectionBefore = this.selection.toJSON(); - this._signal("startOperation", commandEvent); - }; - EditSession.prototype.endOperation = function (e) { - if (this.curOp) { - if (e && e.returnValue === false) { - this.curOp = null; - this._signal("endOperation", e); - return; - } - if (e == true && this.curOp.command && this.curOp.command.name == "mouse") { - return; - } - var currentSelection = this.selection.toJSON(); - this.curOp.selectionAfter = currentSelection; - this.$lastSel = this.selection.toJSON(); - this.getUndoManager().addSelection(currentSelection); - this._signal("beforeEndOperation"); - this.prevOp = this.curOp; - this.curOp = null; - this._signal("endOperation", e); - } - }; - EditSession.prototype.setDocument = function (doc) { - if (this.doc) - this.doc.off("change", this.$onChange); - this.doc = doc; - doc.on("change", this.$onChange, true); - this.bgTokenizer.setDocument(this.getDocument()); - this.resetCaches(); - }; - EditSession.prototype.getDocument = function () { - return this.doc; - }; - Object.defineProperty(EditSession.prototype, "widgetManager", { - get: function () { - var widgetManager = new LineWidgets(this); - this.widgetManager = widgetManager; - if (this.$editor) - widgetManager.attach(this.$editor); - return widgetManager; - }, - set: function (value) { - Object.defineProperty(this, "widgetManager", { - writable: true, - enumerable: true, - configurable: true, - value: value, - }); - }, - enumerable: false, - configurable: true - }); - EditSession.prototype.$resetRowCache = function (docRow) { - if (!docRow) { - this.$docRowCache = []; - this.$screenRowCache = []; - return; - } - var l = this.$docRowCache.length; - var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1; - if (l > i) { - this.$docRowCache.splice(i, l); - this.$screenRowCache.splice(i, l); - } - }; - EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) { - var low = 0; - var hi = cacheArray.length - 1; - while (low <= hi) { - var mid = (low + hi) >> 1; - var c = cacheArray[mid]; - if (val > c) - low = mid + 1; - else if (val < c) - hi = mid - 1; - else - return mid; - } - return low - 1; - }; - EditSession.prototype.resetCaches = function () { - this.$modified = true; - this.$wrapData = []; - this.$rowLengthCache = []; - this.$resetRowCache(0); - if (!this.destroyed) - this.bgTokenizer.start(0); - }; - EditSession.prototype.onChangeFold = function (e) { - var fold = e.data; - this.$resetRowCache(fold.start.row); - }; - EditSession.prototype.onChange = function (delta) { - this.$modified = true; - this.$bidiHandler.onChange(delta); - this.$resetRowCache(delta.start.row); - var removedFolds = this.$updateInternalDataOnChange(delta); - if (!this.$fromUndo && this.$undoManager) { - if (removedFolds && removedFolds.length) { - this.$undoManager.add({ - action: "removeFolds", - folds: removedFolds - }, this.mergeUndoDeltas); - this.mergeUndoDeltas = true; - } - this.$undoManager.add(delta, this.mergeUndoDeltas); - this.mergeUndoDeltas = true; - this.$informUndoManager.schedule(); - } - this.bgTokenizer.$updateOnChange(delta); - this._signal("change", delta); - }; - EditSession.prototype.onSelectionChange = function () { - this._signal("changeSelection"); - }; - EditSession.prototype.setValue = function (text) { - this.doc.setValue(text); - this.selection.moveTo(0, 0); - this.$resetRowCache(0); - this.setUndoManager(this.$undoManager); - this.getUndoManager().reset(); - }; - EditSession.fromJSON = function (session) { - if (typeof session == "string") - session = JSON.parse(session); - var undoManager = new UndoManager(); - undoManager.$undoStack = session.history.undo; - undoManager.$redoStack = session.history.redo; - undoManager.mark = session.history.mark; - undoManager.$rev = session.history.rev; - var editSession = new EditSession(session.value); - session.folds.forEach(function (fold) { - editSession.addFold("...", Range.fromPoints(fold.start, fold.end)); - }); - editSession.setAnnotations(session.annotations); - editSession.setBreakpoints(session.breakpoints); - editSession.setMode(session.mode); - editSession.setScrollLeft(session.scrollLeft); - editSession.setScrollTop(session.scrollTop); - editSession.setUndoManager(undoManager); - editSession.selection.fromJSON(session.selection); - return editSession; - }; - EditSession.prototype.toJSON = function () { - return { - annotations: this.$annotations, - breakpoints: this.$breakpoints, - folds: this.getAllFolds().map(function (fold) { - return fold.range; - }), - history: this.getUndoManager(), - mode: this.$mode.$id, - scrollLeft: this.$scrollLeft, - scrollTop: this.$scrollTop, - selection: this.selection.toJSON(), - value: this.doc.getValue() - }; - }; - EditSession.prototype.toString = function () { - return this.doc.getValue(); - }; - EditSession.prototype.getSelection = function () { - return this.selection; - }; - EditSession.prototype.getState = function (row) { - return this.bgTokenizer.getState(row); - }; - EditSession.prototype.getTokens = function (row) { - return this.bgTokenizer.getTokens(row); - }; - EditSession.prototype.getTokenAt = function (row, column) { - var tokens = this.bgTokenizer.getTokens(row); - var token, c = 0; - if (column == null) { - var i = tokens.length - 1; - c = this.getLine(row).length; - } - else { - for (var i = 0; i < tokens.length; i++) { - c += tokens[i].value.length; - if (c >= column) - break; - } - } - token = tokens[i]; - if (!token) - return null; - token.index = i; - token.start = c - token.value.length; - return token; - }; - EditSession.prototype.setUndoManager = function (undoManager) { - this.$undoManager = undoManager; - if (this.$informUndoManager) - this.$informUndoManager.cancel(); - if (undoManager) { - var self = this; - undoManager.addSession(this); - this.$syncInformUndoManager = function () { - self.$informUndoManager.cancel(); - self.mergeUndoDeltas = false; - }; - this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); - } - else { - this.$syncInformUndoManager = function () { }; - } - }; - EditSession.prototype.markUndoGroup = function () { - if (this.$syncInformUndoManager) - this.$syncInformUndoManager(); - }; - EditSession.prototype.getUndoManager = function () { - return this.$undoManager || this.$defaultUndoManager; - }; - EditSession.prototype.getTabString = function () { - if (this.getUseSoftTabs()) { - return lang.stringRepeat(" ", this.getTabSize()); - } - else { - return "\t"; - } - }; - EditSession.prototype.setUseSoftTabs = function (val) { - this.setOption("useSoftTabs", val); - }; - EditSession.prototype.getUseSoftTabs = function () { - return this.$useSoftTabs && !this.$mode.$indentWithTabs; - }; - EditSession.prototype.setTabSize = function (tabSize) { - this.setOption("tabSize", tabSize); - }; - EditSession.prototype.getTabSize = function () { - return this.$tabSize; - }; - EditSession.prototype.isTabStop = function (position) { - return this.$useSoftTabs && (position.column % this.$tabSize === 0); - }; - EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) { - this.setOption("navigateWithinSoftTabs", navigateWithinSoftTabs); - }; - EditSession.prototype.getNavigateWithinSoftTabs = function () { - return this.$navigateWithinSoftTabs; - }; - EditSession.prototype.setOverwrite = function (overwrite) { - this.setOption("overwrite", overwrite); - }; - EditSession.prototype.getOverwrite = function () { - return this.$overwrite; - }; - EditSession.prototype.toggleOverwrite = function () { - this.setOverwrite(!this.$overwrite); - }; - EditSession.prototype.addGutterDecoration = function (row, className) { - if (!this.$decorations[row]) - this.$decorations[row] = ""; - this.$decorations[row] += " " + className; - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.removeGutterCustomWidget = function (row) { - if (this.$editor) { - this.$editor.renderer.$gutterLayer.$removeCustomWidget(row); - } - }; - EditSession.prototype.addGutterCustomWidget = function (row, attributes) { - if (this.$editor) { - this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes); - } - }; - EditSession.prototype.removeGutterDecoration = function (row, className) { - this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.getBreakpoints = function () { - return this.$breakpoints; - }; - EditSession.prototype.setBreakpoints = function (rows) { - this.$breakpoints = []; - for (var i = 0; i < rows.length; i++) { - this.$breakpoints[rows[i]] = "ace_breakpoint"; - } - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.clearBreakpoints = function () { - this.$breakpoints = []; - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.setBreakpoint = function (row, className) { - if (className === undefined) - className = "ace_breakpoint"; - if (className) - this.$breakpoints[row] = className; - else - delete this.$breakpoints[row]; - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.clearBreakpoint = function (row) { - delete this.$breakpoints[row]; - this._signal("changeBreakpoint", {}); - }; - EditSession.prototype.addMarker = function (range, clazz, type, inFront) { - var id = this.$markerId++; - var marker = { - range: range, - type: type || "line", - renderer: typeof type == "function" ? type : null, - clazz: clazz, - inFront: !!inFront, - id: id - }; - if (inFront) { - this.$frontMarkers[id] = marker; - this._signal("changeFrontMarker"); - } - else { - this.$backMarkers[id] = marker; - this._signal("changeBackMarker"); - } - return id; - }; - EditSession.prototype.addDynamicMarker = function (marker, inFront) { - if (!marker.update) - return; - var id = this.$markerId++; - marker.id = id; - marker.inFront = !!inFront; - if (inFront) { - this.$frontMarkers[id] = marker; - this._signal("changeFrontMarker"); - } - else { - this.$backMarkers[id] = marker; - this._signal("changeBackMarker"); - } - return marker; - }; - EditSession.prototype.removeMarker = function (markerId) { - var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId]; - if (!marker) - return; - var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers; - delete (markers[markerId]); - this._signal(marker.inFront ? "changeFrontMarker" : "changeBackMarker"); - }; - EditSession.prototype.getMarkers = function (inFront) { - return inFront ? this.$frontMarkers : this.$backMarkers; - }; - EditSession.prototype.highlight = function (re) { - if (!this.$searchHighlight) { - var highlight = new SearchHighlight(null, "ace_selected-word", "text"); - this.$searchHighlight = this.addDynamicMarker(highlight); - } - this.$searchHighlight.setRegexp(re); - }; - EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) { - if (typeof endRow != "number") { - clazz = endRow; - endRow = startRow; - } - if (!clazz) - clazz = "ace_step"; - var range = new Range(startRow, 0, endRow, Infinity); - range.id = this.addMarker(range, clazz, "fullLine", inFront); - return range; - }; - EditSession.prototype.setAnnotations = function (annotations) { - this.$annotations = annotations; - this._signal("changeAnnotation", {}); - }; - EditSession.prototype.getAnnotations = function () { - return this.$annotations || []; - }; - EditSession.prototype.clearAnnotations = function () { - this.setAnnotations([]); - }; - EditSession.prototype.$detectNewLine = function (text) { - var match = text.match(/^.*?(\r?\n)/m); - if (match) { - this.$autoNewLine = match[1]; - } - else { - this.$autoNewLine = "\n"; - } - }; - EditSession.prototype.getWordRange = function (row, column) { - var line = this.getLine(row); - var inToken = false; - if (column > 0) - inToken = !!line.charAt(column - 1).match(this.tokenRe); - if (!inToken) - inToken = !!line.charAt(column).match(this.tokenRe); - if (inToken) - var re = this.tokenRe; - else if (/^\s+$/.test(line.slice(column - 1, column + 1))) - var re = /\s/; - else - var re = this.nonTokenRe; - var start = column; - if (start > 0) { - do { - start--; - } while (start >= 0 && line.charAt(start).match(re)); - start++; - } - var end = column; - while (end < line.length && line.charAt(end).match(re)) { - end++; - } - return new Range(row, start, row, end); - }; - EditSession.prototype.getAWordRange = function (row, column) { - var wordRange = this.getWordRange(row, column); - var line = this.getLine(wordRange.end.row); - while (line.charAt(wordRange.end.column).match(/[ \t]/)) { - wordRange.end.column += 1; - } - return wordRange; - }; - EditSession.prototype.setNewLineMode = function (newLineMode) { - this.doc.setNewLineMode(newLineMode); - }; - EditSession.prototype.getNewLineMode = function () { - return this.doc.getNewLineMode(); - }; - EditSession.prototype.setUseWorker = function (useWorker) { this.setOption("useWorker", useWorker); }; - EditSession.prototype.getUseWorker = function () { return this.$useWorker; }; - EditSession.prototype.onReloadTokenizer = function (e) { - var rows = e.data; - this.bgTokenizer.start(rows.first); - this._signal("tokenizerUpdate", e); - }; - EditSession.prototype.setMode = function (mode, cb) { - if (mode && typeof mode === "object") { - if (mode.getTokenizer) - return this.$onChangeMode(mode); - var options = mode; - var path = options.path; - } - else { - path = /**@type{string}*/ (mode) || "ace/mode/text"; - } - if (!this.$modes["ace/mode/text"]) - this.$modes["ace/mode/text"] = new TextMode(); - if (this.$modes[path] && !options) { - this.$onChangeMode(this.$modes[path]); - cb && cb(); - return; - } - this.$modeId = path; - config.loadModule(["mode", path], function (m) { - if (this.destroyed) { - return; - } - if (this.$modeId !== path) - return cb && cb(); - if (this.$modes[path] && !options) { - this.$onChangeMode(this.$modes[path]); - } - else if (m && m.Mode) { - m = new m.Mode(options); - if (!options) { - this.$modes[path] = m; - m.$id = path; - } - this.$onChangeMode(m); - } - cb && cb(); - }.bind(this)); - if (!this.$mode) - this.$onChangeMode(this.$modes["ace/mode/text"], true); - }; - EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) { - if (!$isPlaceholder) - this.$modeId = mode.$id; - if (this.$mode === mode) - return; - var oldMode = this.$mode; - this.$mode = mode; - this.$stopWorker(); - if (this.$useWorker) - this.$startWorker(); - var tokenizer = mode.getTokenizer(); - if (tokenizer.on !== undefined) { - var onReloadTokenizer = this.onReloadTokenizer.bind(this); - tokenizer.on("update", onReloadTokenizer); - } - this.bgTokenizer.setTokenizer(tokenizer); - this.bgTokenizer.setDocument(this.getDocument()); - this.tokenRe = mode.tokenRe; - this.nonTokenRe = mode.nonTokenRe; - if (!$isPlaceholder) { - if (mode.attachToSession) - mode.attachToSession(this); - this.$options.wrapMethod.set.call(this, this.$wrapMethod); - this.$setFolding(mode.foldingRules); - this.bgTokenizer.start(0); - this._emit("changeMode", { oldMode: oldMode, mode: mode }); - } - }; - EditSession.prototype.$stopWorker = function () { - if (this.$worker) { - this.$worker.terminate(); - this.$worker = null; - } - }; - EditSession.prototype.$startWorker = function () { - try { - this.$worker = this.$mode.createWorker(this); - } - catch (e) { - config.warn("Could not load worker", e); - this.$worker = null; - } - }; - EditSession.prototype.getMode = function () { - return this.$mode; - }; - EditSession.prototype.setScrollTop = function (scrollTop) { - if (this.$scrollTop === scrollTop || isNaN(scrollTop)) - return; - this.$scrollTop = scrollTop; - this._signal("changeScrollTop", scrollTop); - }; - EditSession.prototype.getScrollTop = function () { - return this.$scrollTop; - }; - EditSession.prototype.setScrollLeft = function (scrollLeft) { - if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) - return; - this.$scrollLeft = scrollLeft; - this._signal("changeScrollLeft", scrollLeft); - }; - EditSession.prototype.getScrollLeft = function () { - return this.$scrollLeft; - }; - EditSession.prototype.getScreenWidth = function () { - this.$computeWidth(); - if (this.lineWidgets) - return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth); - return this.screenWidth; - }; - EditSession.prototype.getLineWidgetMaxWidth = function () { - if (this.lineWidgetsWidth != null) - return this.lineWidgetsWidth; - var width = 0; - this.lineWidgets.forEach(function (w) { - if (w && w.screenWidth > width) - width = w.screenWidth; - }); - return this.lineWidgetWidth = width; - }; - EditSession.prototype.$computeWidth = function (force) { - if (this.$modified || force) { - this.$modified = false; - if (this.$useWrapMode) - return this.screenWidth = this.$wrapLimit; - var lines = this.doc.getAllLines(); - var cache = this.$rowLengthCache; - var longestScreenLine = 0; - var foldIndex = 0; - var foldLine = this.$foldData[foldIndex]; - var foldStart = foldLine ? foldLine.start.row : Infinity; - var len = lines.length; - for (var i = 0; i < len; i++) { - if (i > foldStart) { - i = foldLine.end.row + 1; - if (i >= len) - break; - foldLine = this.$foldData[foldIndex++]; - foldStart = foldLine ? foldLine.start.row : Infinity; - } - if (cache[i] == null) - cache[i] = this.$getStringScreenWidth(lines[i])[0]; - if (cache[i] > longestScreenLine) - longestScreenLine = cache[i]; - } - this.screenWidth = longestScreenLine; - } - }; - EditSession.prototype.getLine = function (row) { - return this.doc.getLine(row); - }; - EditSession.prototype.getLines = function (firstRow, lastRow) { - return this.doc.getLines(firstRow, lastRow); - }; - EditSession.prototype.getLength = function () { - return this.doc.getLength(); - }; - EditSession.prototype.getTextRange = function (range) { - return this.doc.getTextRange(range || this.selection.getRange()); - }; - EditSession.prototype.insert = function (position, text) { - return this.doc.insert(position, text); - }; - EditSession.prototype.remove = function (range) { - return this.doc.remove(range); - }; - EditSession.prototype.removeFullLines = function (firstRow, lastRow) { - return this.doc.removeFullLines(firstRow, lastRow); - }; - EditSession.prototype.undoChanges = function (deltas, dontSelect) { - if (!deltas.length) - return; - this.$fromUndo = true; - for (var i = deltas.length - 1; i != -1; i--) { - var delta = deltas[i]; - if (delta.action == "insert" || delta.action == "remove") { - this.doc.revertDelta(delta); - } - else if (delta.folds) { - this.addFolds(delta.folds); - } - } - if (!dontSelect && this.$undoSelect) { - if (deltas.selectionBefore) - this.selection.fromJSON(deltas.selectionBefore); - else - this.selection.setRange(this.$getUndoSelection(deltas, true)); - } - this.$fromUndo = false; - }; - EditSession.prototype.redoChanges = function (deltas, dontSelect) { - if (!deltas.length) - return; - this.$fromUndo = true; - for (var i = 0; i < deltas.length; i++) { - var delta = deltas[i]; - if (delta.action == "insert" || delta.action == "remove") { - this.doc.$safeApplyDelta(delta); - } - } - if (!dontSelect && this.$undoSelect) { - if (deltas.selectionAfter) - this.selection.fromJSON(deltas.selectionAfter); - else - this.selection.setRange(this.$getUndoSelection(deltas, false)); - } - this.$fromUndo = false; - }; - EditSession.prototype.setUndoSelect = function (enable) { - this.$undoSelect = enable; - }; - EditSession.prototype.$getUndoSelection = function (deltas, isUndo) { - function isInsert(delta) { - return isUndo ? delta.action !== "insert" : delta.action === "insert"; - } - var range, point; - for (var i = 0; i < deltas.length; i++) { - var delta = deltas[i]; - if (!delta.start) - continue; // skip folds - if (!range) { - if (isInsert(delta)) { - range = Range.fromPoints(delta.start, delta.end); - } - else { - range = Range.fromPoints(delta.start, delta.start); - } - continue; - } - if (isInsert(delta)) { - point = delta.start; - if (range.compare(point.row, point.column) == -1) { - range.setStart(point); - } - point = delta.end; - if (range.compare(point.row, point.column) == 1) { - range.setEnd(point); - } - } - else { - point = delta.start; - if (range.compare(point.row, point.column) == -1) { - range = Range.fromPoints(delta.start, delta.start); - } - } - } - return range; - }; - EditSession.prototype.replace = function (range, text) { - return this.doc.replace(range, text); - }; - EditSession.prototype.moveText = function (fromRange, toPosition, copy) { - var text = this.getTextRange(fromRange); - var folds = this.getFoldsInRange(fromRange); - var toRange = Range.fromPoints(toPosition, toPosition); - if (!copy) { - this.remove(fromRange); - var rowDiff = fromRange.start.row - fromRange.end.row; - var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; - if (collDiff) { - if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) - toRange.start.column += collDiff; - if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) - toRange.end.column += collDiff; - } - if (rowDiff && toRange.start.row >= fromRange.end.row) { - toRange.start.row += rowDiff; - toRange.end.row += rowDiff; - } - } - toRange.end = this.insert(toRange.start, text); - if (folds.length) { - var oldStart = fromRange.start; - var newStart = toRange.start; - var rowDiff = newStart.row - oldStart.row; - var collDiff = newStart.column - oldStart.column; - this.addFolds(folds.map(function (x) { - x = x.clone(); - if (x.start.row == oldStart.row) - x.start.column += collDiff; - if (x.end.row == oldStart.row) - x.end.column += collDiff; - x.start.row += rowDiff; - x.end.row += rowDiff; - return x; - })); - } - return toRange; - }; - EditSession.prototype.indentRows = function (startRow, endRow, indentString) { - indentString = indentString.replace(/\t/g, this.getTabString()); - for (var row = startRow; row <= endRow; row++) - this.doc.insertInLine({ row: row, column: 0 }, indentString); - }; - EditSession.prototype.outdentRows = function (range) { - var rowRange = range.collapseRows(); - var deleteRange = new Range(0, 0, 0, 0); - var size = this.getTabSize(); - for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { - var line = this.getLine(i); - deleteRange.start.row = i; - deleteRange.end.row = i; - for (var j = 0; j < size; ++j) - if (line.charAt(j) != ' ') - break; - if (j < size && line.charAt(j) == '\t') { - deleteRange.start.column = j; - deleteRange.end.column = j + 1; - } - else { - deleteRange.start.column = 0; - deleteRange.end.column = j; - } - this.remove(deleteRange); - } - }; - EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) { - firstRow = this.getRowFoldStart(firstRow); - lastRow = this.getRowFoldEnd(lastRow); - if (dir < 0) { - var row = this.getRowFoldStart(firstRow + dir); - if (row < 0) - return 0; - var diff = row - firstRow; - } - else if (dir > 0) { - var row = this.getRowFoldEnd(lastRow + dir); - if (row > this.doc.getLength() - 1) - return 0; - var diff = row - lastRow; - } - else { - firstRow = this.$clipRowToDocument(firstRow); - lastRow = this.$clipRowToDocument(lastRow); - var diff = lastRow - firstRow + 1; - } - var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); - var folds = this.getFoldsInRange(range).map(function (x) { - x = x.clone(); - x.start.row += diff; - x.end.row += diff; - return x; - }); - var lines = dir == 0 - ? this.doc.getLines(firstRow, lastRow) - : this.doc.removeFullLines(firstRow, lastRow); - this.doc.insertFullLines(firstRow + diff, lines); - folds.length && this.addFolds(folds); - return diff; - }; - EditSession.prototype.moveLinesUp = function (firstRow, lastRow) { - return this.$moveLines(firstRow, lastRow, -1); - }; - EditSession.prototype.moveLinesDown = function (firstRow, lastRow) { - return this.$moveLines(firstRow, lastRow, 1); - }; - EditSession.prototype.duplicateLines = function (firstRow, lastRow) { - return this.$moveLines(firstRow, lastRow, 0); - }; - EditSession.prototype.$clipRowToDocument = function (row) { - return Math.max(0, Math.min(row, this.doc.getLength() - 1)); - }; - EditSession.prototype.$clipColumnToRow = function (row, column) { - if (column < 0) - return 0; - return Math.min(this.doc.getLine(row).length, column); - }; - EditSession.prototype.$clipPositionToDocument = function (row, column) { - column = Math.max(0, column); - if (row < 0) { - row = 0; - column = 0; - } - else { - var len = this.doc.getLength(); - if (row >= len) { - row = len - 1; - column = this.doc.getLine(len - 1).length; - } - else { - column = Math.min(this.doc.getLine(row).length, column); - } - } - return { - row: row, - column: column - }; - }; - EditSession.prototype.$clipRangeToDocument = function (range) { - if (range.start.row < 0) { - range.start.row = 0; - range.start.column = 0; - } - else { - range.start.column = this.$clipColumnToRow(range.start.row, range.start.column); - } - var len = this.doc.getLength() - 1; - if (range.end.row > len) { - range.end.row = len; - range.end.column = this.doc.getLine(len).length; - } - else { - range.end.column = this.$clipColumnToRow(range.end.row, range.end.column); - } - return range; - }; - EditSession.prototype.setUseWrapMode = function (useWrapMode) { - if (useWrapMode != this.$useWrapMode) { - this.$useWrapMode = useWrapMode; - this.$modified = true; - this.$resetRowCache(0); - if (useWrapMode) { - var len = this.getLength(); - this.$wrapData = Array(len); - this.$updateWrapData(0, len - 1); - } - this._signal("changeWrapMode"); - } - }; - EditSession.prototype.getUseWrapMode = function () { - return this.$useWrapMode; - }; - EditSession.prototype.setWrapLimitRange = function (min, max) { - if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { - this.$wrapLimitRange = { min: min, max: max }; - this.$modified = true; - this.$bidiHandler.markAsDirty(); - if (this.$useWrapMode) - this._signal("changeWrapMode"); - } - }; - EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) { - var limits = this.$wrapLimitRange; - if (limits.max < 0) - limits = { min: $printMargin, max: $printMargin }; - var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); - if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { - this.$wrapLimit = wrapLimit; - this.$modified = true; - if (this.$useWrapMode) { - this.$updateWrapData(0, this.getLength() - 1); - this.$resetRowCache(0); - this._signal("changeWrapLimit"); - } - return true; - } - return false; - }; - EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) { - if (min) - wrapLimit = Math.max(min, wrapLimit); - if (max) - wrapLimit = Math.min(max, wrapLimit); - return wrapLimit; - }; - EditSession.prototype.getWrapLimit = function () { - return this.$wrapLimit; - }; - EditSession.prototype.setWrapLimit = function (limit) { - this.setWrapLimitRange(limit, limit); - }; - EditSession.prototype.getWrapLimitRange = function () { - return { - min: this.$wrapLimitRange.min, - max: this.$wrapLimitRange.max - }; - }; - EditSession.prototype.$updateInternalDataOnChange = function (delta) { - var useWrapMode = this.$useWrapMode; - var action = delta.action; - var start = delta.start; - var end = delta.end; - var firstRow = start.row; - var lastRow = end.row; - var len = lastRow - firstRow; - var removedFolds = null; - this.$updating = true; - if (len != 0) { - if (action === "remove") { - this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); - var foldLines = this.$foldData; - removedFolds = this.getFoldsInRange(delta); - this.removeFolds(removedFolds); - var foldLine = this.getFoldLine(end.row); - var idx = 0; - if (foldLine) { - foldLine.addRemoveChars(end.row, end.column, start.column - end.column); - foldLine.shiftRow(-len); - var foldLineBefore = this.getFoldLine(firstRow); - if (foldLineBefore && foldLineBefore !== foldLine) { - foldLineBefore.merge(foldLine); - foldLine = foldLineBefore; - } - idx = foldLines.indexOf(foldLine) + 1; - } - for (idx; idx < foldLines.length; idx++) { - var foldLine = foldLines[idx]; - if (foldLine.start.row >= end.row) { - foldLine.shiftRow(-len); - } - } - lastRow = firstRow; - } - else { - var args = Array(len); - args.unshift(firstRow, 0); - var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache; - arr.splice.apply(arr, args); - var foldLines = this.$foldData; - var foldLine = this.getFoldLine(firstRow); - var idx = 0; - if (foldLine) { - var cmp = foldLine.range.compareInside(start.row, start.column); - if (cmp == 0) { - foldLine = foldLine.split(start.row, start.column); - if (foldLine) { - foldLine.shiftRow(len); - foldLine.addRemoveChars(lastRow, 0, end.column - start.column); - } - } - else - if (cmp == -1) { - foldLine.addRemoveChars(firstRow, 0, end.column - start.column); - foldLine.shiftRow(len); - } - idx = foldLines.indexOf(foldLine) + 1; - } - for (idx; idx < foldLines.length; idx++) { - var foldLine = foldLines[idx]; - if (foldLine.start.row >= firstRow) { - foldLine.shiftRow(len); - } - } - } - } - else { - len = Math.abs(delta.start.column - delta.end.column); - if (action === "remove") { - removedFolds = this.getFoldsInRange(delta); - this.removeFolds(removedFolds); - len = -len; - } - var foldLine = this.getFoldLine(firstRow); - if (foldLine) { - foldLine.addRemoveChars(firstRow, start.column, len); - } - } - if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { - console.error("doc.getLength() and $wrapData.length have to be the same!"); - } - this.$updating = false; - if (useWrapMode) - this.$updateWrapData(firstRow, lastRow); - else - this.$updateRowLengthCache(firstRow, lastRow); - return removedFolds; - }; - EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) { - this.$rowLengthCache[firstRow] = null; - this.$rowLengthCache[lastRow] = null; - }; - EditSession.prototype.$updateWrapData = function (firstRow, lastRow) { - var lines = this.doc.getAllLines(); - var tabSize = this.getTabSize(); - var wrapData = this.$wrapData; - var wrapLimit = this.$wrapLimit; - var tokens; - var foldLine; - var row = firstRow; - lastRow = Math.min(lastRow, lines.length - 1); - while (row <= lastRow) { - foldLine = this.getFoldLine(row, foldLine); - if (!foldLine) { - tokens = this.$getDisplayTokens(lines[row]); - wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); - row++; - } - else { - tokens = []; - foldLine.walk(function (placeholder, row, column, lastColumn) { - var walkTokens; - if (placeholder != null) { - walkTokens = this.$getDisplayTokens(placeholder, tokens.length); - walkTokens[0] = PLACEHOLDER_START; - for (var i = 1; i < walkTokens.length; i++) { - walkTokens[i] = PLACEHOLDER_BODY; - } - } - else { - walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length); - } - tokens = tokens.concat(walkTokens); - }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1); - wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); - row = foldLine.end.row + 1; - } - } - }; - EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) { - if (tokens.length == 0) { - return []; - } - var splits = []; - var displayLength = tokens.length; - var lastSplit = 0, lastDocSplit = 0; - var isCode = this.$wrapAsCode; - var indentedSoftWrap = this.$indentedSoftWrap; - var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) - || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2); - function getWrapIndent() { - var indentation = 0; - if (maxIndent === 0) - return indentation; - if (indentedSoftWrap) { - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (token == SPACE) - indentation += 1; - else if (token == TAB) - indentation += tabSize; - else if (token == TAB_SPACE) - continue; - else - break; - } - } - if (isCode && indentedSoftWrap !== false) - indentation += tabSize; - return Math.min(indentation, maxIndent); - } - function addSplit(screenPos) { - var len = screenPos - lastSplit; - for (var i = lastSplit; i < screenPos; i++) { - var ch = tokens[i]; - if (ch === 12 || ch === 2) - len -= 1; - } - if (!splits.length) { - indent = getWrapIndent(); - splits.indent = indent; - } - lastDocSplit += len; - splits.push(lastDocSplit); - lastSplit = screenPos; - } - var indent = 0; - while (displayLength - lastSplit > wrapLimit - indent) { - var split = lastSplit + wrapLimit - indent; - if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { - addSplit(split); - continue; - } - if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { - for (split; split != lastSplit - 1; split--) { - if (tokens[split] == PLACEHOLDER_START) { - break; - } - } - if (split > lastSplit) { - addSplit(split); - continue; - } - split = lastSplit + wrapLimit; - for (split; split < tokens.length; split++) { - if (tokens[split] != PLACEHOLDER_BODY) { - break; - } - } - if (split == tokens.length) { - break; // Breaks the while-loop. - } - addSplit(split); - continue; - } - var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1); - while (split > minSplit && tokens[split] < PLACEHOLDER_START) { - split--; - } - if (isCode) { - while (split > minSplit && tokens[split] < PLACEHOLDER_START) { - split--; - } - while (split > minSplit && tokens[split] == PUNCTUATION) { - split--; - } - } - else { - while (split > minSplit && tokens[split] < SPACE) { - split--; - } - } - if (split > minSplit) { - addSplit(++split); - continue; - } - split = lastSplit + wrapLimit; - if (tokens[split] == CHAR_EXT) - split--; - addSplit(split - indent); - } - return splits; - }; - EditSession.prototype.$getDisplayTokens = function (str, offset) { - var arr = []; - var tabSize; - offset = offset || 0; - for (var i = 0; i < str.length; i++) { - var c = str.charCodeAt(i); - if (c == 9) { - tabSize = this.getScreenTabSize(arr.length + offset); - arr.push(TAB); - for (var n = 1; n < tabSize; n++) { - arr.push(TAB_SPACE); - } - } - else if (c == 32) { - arr.push(SPACE); - } - else if ((c > 39 && c < 48) || (c > 57 && c < 64)) { - arr.push(PUNCTUATION); - } - else if (c >= 0x1100 && isFullWidth(c)) { - arr.push(CHAR, CHAR_EXT); - } - else { - arr.push(CHAR); - } - } - return arr; - }; - EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) { - if (maxScreenColumn == 0) - return [0, 0]; - if (maxScreenColumn == null) - maxScreenColumn = Infinity; - screenColumn = screenColumn || 0; - var c, column; - for (column = 0; column < str.length; column++) { - c = str.charCodeAt(column); - if (c == 9) { - screenColumn += this.getScreenTabSize(screenColumn); - } - else if (c >= 0x1100 && isFullWidth(c)) { - screenColumn += 2; - } - else { - screenColumn += 1; - } - if (screenColumn > maxScreenColumn) { - break; - } - } - return [screenColumn, column]; - }; - EditSession.prototype.getRowLength = function (row) { - var h = 1; - if (this.lineWidgets) - h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; - if (!this.$useWrapMode || !this.$wrapData[row]) - return h; - else - return this.$wrapData[row].length + h; - }; - EditSession.prototype.getRowLineCount = function (row) { - if (!this.$useWrapMode || !this.$wrapData[row]) { - return 1; - } - else { - return this.$wrapData[row].length + 1; - } - }; - EditSession.prototype.getRowWrapIndent = function (screenRow) { - if (this.$useWrapMode) { - var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); - var splits = this.$wrapData[pos.row]; - return splits.length && splits[0] < pos.column ? splits.indent : 0; - } - else { - return 0; - } - }; - EditSession.prototype.getScreenLastRowColumn = function (screenRow) { - var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); - return this.documentToScreenColumn(pos.row, pos.column); - }; - EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) { - var screenRow = this.documentToScreenRow(docRow, docColumn); - return this.getScreenLastRowColumn(screenRow); - }; - EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) { - var screenRow = this.documentToScreenRow(docRow, docColumn); - return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); - }; - EditSession.prototype.getRowSplitData = function (row) { - if (!this.$useWrapMode) { - return undefined; - } - else { - return this.$wrapData[row]; - } - }; - EditSession.prototype.getScreenTabSize = function (screenColumn) { - return this.$tabSize - (screenColumn % this.$tabSize | 0); - }; - EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) { - return this.screenToDocumentPosition(screenRow, screenColumn).row; - }; - EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) { - return this.screenToDocumentPosition(screenRow, screenColumn).column; - }; - EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) { - if (screenRow < 0) - return { row: 0, column: 0 }; - var line; - var docRow = 0; - var docColumn = 0; - var column; - var row = 0; - var rowLength = 0; - var rowCache = this.$screenRowCache; - var i = this.$getRowCacheIndex(rowCache, screenRow); - var l = rowCache.length; - if (l && i >= 0) { - var row = rowCache[i]; - var docRow = this.$docRowCache[i]; - var doCache = screenRow > rowCache[l - 1]; - } - else { - var doCache = !l; - } - var maxRow = this.getLength() - 1; - var foldLine = this.getNextFoldLine(docRow); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (row <= screenRow) { - rowLength = this.getRowLength(docRow); - if (row + rowLength > screenRow || docRow >= maxRow) { - break; - } - else { - row += rowLength; - docRow++; - if (docRow > foldStart) { - docRow = foldLine.end.row + 1; - foldLine = this.getNextFoldLine(docRow, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - } - if (doCache) { - this.$docRowCache.push(docRow); - this.$screenRowCache.push(row); - } - } - if (foldLine && foldLine.start.row <= docRow) { - line = this.getFoldDisplayLine(foldLine); - docRow = foldLine.start.row; - } - else if (row + rowLength <= screenRow || docRow > maxRow) { - return { - row: maxRow, - column: this.getLine(maxRow).length - }; - } - else { - line = this.getLine(docRow); - foldLine = null; - } - var wrapIndent = 0, splitIndex = Math.floor(screenRow - row); - if (this.$useWrapMode) { - var splits = this.$wrapData[docRow]; - if (splits) { - column = splits[splitIndex]; - if (splitIndex > 0 && splits.length) { - wrapIndent = splits.indent; - docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; - line = line.substring(docColumn); - } - } - } - if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex)) - screenColumn = this.$bidiHandler.offsetToCol(offsetX); - docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1]; - if (this.$useWrapMode && docColumn >= column) - docColumn = column - 1; - if (foldLine) - return foldLine.idxToPosition(docColumn); - return { row: docRow, column: docColumn }; - }; - EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) { - if (typeof docColumn === "undefined") - var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column); - else - pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn); - docRow = pos.row; - docColumn = pos.column; - var screenRow = 0; - var foldStartRow = null; - var fold = null; - fold = this.getFoldAt(docRow, docColumn, 1); - if (fold) { - docRow = fold.start.row; - docColumn = fold.start.column; - } - var rowEnd, row = 0; - var rowCache = this.$docRowCache; - var i = this.$getRowCacheIndex(rowCache, docRow); - var l = rowCache.length; - if (l && i >= 0) { - var row = rowCache[i]; - var screenRow = this.$screenRowCache[i]; - var doCache = docRow > rowCache[l - 1]; - } - else { - var doCache = !l; - } - var foldLine = this.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (row < docRow) { - if (row >= foldStart) { - rowEnd = foldLine.end.row + 1; - if (rowEnd > docRow) - break; - foldLine = this.getNextFoldLine(rowEnd, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - else { - rowEnd = row + 1; - } - screenRow += this.getRowLength(row); - row = rowEnd; - if (doCache) { - this.$docRowCache.push(row); - this.$screenRowCache.push(screenRow); - } - } - var textLine = ""; - if (foldLine && row >= foldStart) { - textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); - foldStartRow = foldLine.start.row; - } - else { - textLine = this.getLine(docRow).substring(0, docColumn); - foldStartRow = docRow; - } - var wrapIndent = 0; - if (this.$useWrapMode) { - var wrapRow = this.$wrapData[foldStartRow]; - if (wrapRow) { - var screenRowOffset = 0; - while (textLine.length >= wrapRow[screenRowOffset]) { - screenRow++; - screenRowOffset++; - } - textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length); - wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0; - } - } - if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove) - screenRow += this.lineWidgets[row].rowsAbove; - return { - row: screenRow, - column: wrapIndent + this.$getStringScreenWidth(textLine)[0] - }; - }; - EditSession.prototype.documentToScreenColumn = function (row, docColumn) { - return this.documentToScreenPosition(row, docColumn).column; - }; - EditSession.prototype.documentToScreenRow = function (docRow, docColumn) { - return this.documentToScreenPosition(docRow, docColumn).row; - }; - EditSession.prototype.getScreenLength = function () { - var screenRows = 0; - var fold = null; - if (!this.$useWrapMode) { - screenRows = this.getLength(); - var foldData = this.$foldData; - for (var i = 0; i < foldData.length; i++) { - fold = foldData[i]; - screenRows -= fold.end.row - fold.start.row; - } - } - else { - var lastRow = this.$wrapData.length; - var row = 0, i = 0; - var fold = this.$foldData[i++]; - var foldStart = fold ? fold.start.row : Infinity; - while (row < lastRow) { - var splits = this.$wrapData[row]; - screenRows += splits ? splits.length + 1 : 1; - row++; - if (row > foldStart) { - row = fold.end.row + 1; - fold = this.$foldData[i++]; - foldStart = fold ? fold.start.row : Infinity; - } - } - } - if (this.lineWidgets) - screenRows += this.$getWidgetScreenLength(); - return screenRows; - }; - EditSession.prototype.$setFontMetrics = function (fm) { - if (!this.$enableVarChar) - return; - this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) { - if (maxScreenColumn === 0) - return [0, 0]; - if (!maxScreenColumn) - maxScreenColumn = Infinity; - screenColumn = screenColumn || 0; - var c, column; - for (column = 0; column < str.length; column++) { - c = str.charAt(column); - if (c === "\t") { - screenColumn += this.getScreenTabSize(screenColumn); - } - else { - screenColumn += fm.getCharacterWidth(c); - } - if (screenColumn > maxScreenColumn) { - break; - } - } - return [screenColumn, column]; - }; - }; - EditSession.prototype.getPrecedingCharacter = function () { - var pos = this.selection.getCursor(); - if (pos.column === 0) { - return pos.row === 0 ? "" : this.doc.getNewLineCharacter(); - } - var currentLine = this.getLine(pos.row); - return currentLine[pos.column - 1]; - }; - EditSession.prototype.destroy = function () { - if (!this.destroyed) { - this.bgTokenizer.setDocument(null); - this.bgTokenizer.cleanup(); - this.destroyed = true; - } - this.endOperation(); - this.$stopWorker(); - this.removeAllListeners(); - if (this.doc) { - this.doc.off("change", this.$onChange); - } - if (this.selection) { - this.selection.off("changeCursor", this.$onSelectionChange); - this.selection.off("changeSelection", this.$onSelectionChange); - } - this.selection.detach(); - }; - return EditSession; -}()); -EditSession.$uid = 0; -EditSession.prototype.$modes = config.$modes; -EditSession.prototype.getValue = EditSession.prototype.toString; -EditSession.prototype.$defaultUndoManager = { - undo: function () { }, - redo: function () { }, - hasUndo: function () { }, - hasRedo: function () { }, - reset: function () { }, - add: function () { }, - addSelection: function () { }, - startNewGroup: function () { }, - addSession: function () { } -}; -EditSession.prototype.$overwrite = false; -EditSession.prototype.$mode = null; -EditSession.prototype.$modeId = null; -EditSession.prototype.$scrollTop = 0; -EditSession.prototype.$scrollLeft = 0; -EditSession.prototype.$wrapLimit = 80; -EditSession.prototype.$useWrapMode = false; -EditSession.prototype.$wrapLimitRange = { - min: null, - max: null -}; -EditSession.prototype.lineWidgets = null; -EditSession.prototype.isFullWidth = isFullWidth; -oop.implement(EditSession.prototype, EventEmitter); -var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12; -function isFullWidth(c) { - if (c < 0x1100) - return false; - return c >= 0x1100 && c <= 0x115F || - c >= 0x11A3 && c <= 0x11A7 || - c >= 0x11FA && c <= 0x11FF || - c >= 0x2329 && c <= 0x232A || - c >= 0x2E80 && c <= 0x2E99 || - c >= 0x2E9B && c <= 0x2EF3 || - c >= 0x2F00 && c <= 0x2FD5 || - c >= 0x2FF0 && c <= 0x2FFB || - c >= 0x3000 && c <= 0x303E || - c >= 0x3041 && c <= 0x3096 || - c >= 0x3099 && c <= 0x30FF || - c >= 0x3105 && c <= 0x312D || - c >= 0x3131 && c <= 0x318E || - c >= 0x3190 && c <= 0x31BA || - c >= 0x31C0 && c <= 0x31E3 || - c >= 0x31F0 && c <= 0x321E || - c >= 0x3220 && c <= 0x3247 || - c >= 0x3250 && c <= 0x32FE || - c >= 0x3300 && c <= 0x4DBF || - c >= 0x4E00 && c <= 0xA48C || - c >= 0xA490 && c <= 0xA4C6 || - c >= 0xA960 && c <= 0xA97C || - c >= 0xAC00 && c <= 0xD7A3 || - c >= 0xD7B0 && c <= 0xD7C6 || - c >= 0xD7CB && c <= 0xD7FB || - c >= 0xF900 && c <= 0xFAFF || - c >= 0xFE10 && c <= 0xFE19 || - c >= 0xFE30 && c <= 0xFE52 || - c >= 0xFE54 && c <= 0xFE66 || - c >= 0xFE68 && c <= 0xFE6B || - c >= 0xFF01 && c <= 0xFF60 || - c >= 0xFFE0 && c <= 0xFFE6; -} -require("./edit_session/folding").Folding.call(EditSession.prototype); -require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); -config.defineOptions(EditSession.prototype, "session", { - wrap: { - set: function (value) { - if (!value || value == "off") - value = false; - else if (value == "free") - value = true; - else if (value == "printMargin") - value = -1; - else if (typeof value == "string") - value = parseInt(value, 10) || false; - if (this.$wrap == value) - return; - this.$wrap = value; - if (!value) { - this.setUseWrapMode(false); - } - else { - var col = typeof value == "number" ? value : null; - this.setWrapLimitRange(col, col); - this.setUseWrapMode(true); - } - }, - get: function () { - if (this.getUseWrapMode()) { - if (this.$wrap == -1) - return "printMargin"; - if (!this.getWrapLimitRange().min) - return "free"; - return this.$wrap; - } - return "off"; - }, - handlesSet: true - }, - wrapMethod: { - set: function (val) { - val = val == "auto" - ? this.$mode.type != "text" - : val != "text"; - if (val != this.$wrapAsCode) { - this.$wrapAsCode = val; - if (this.$useWrapMode) { - this.$useWrapMode = false; - this.setUseWrapMode(true); - } - } - }, - initialValue: "auto" - }, - indentedSoftWrap: { - set: function () { - if (this.$useWrapMode) { - this.$useWrapMode = false; - this.setUseWrapMode(true); - } - }, - initialValue: true - }, - firstLineNumber: { - set: function () { this._signal("changeBreakpoint"); }, - initialValue: 1 - }, - useWorker: { - set: function (useWorker) { - this.$useWorker = useWorker; - this.$stopWorker(); - if (useWorker) - this.$startWorker(); - }, - initialValue: true - }, - useSoftTabs: { initialValue: true }, - tabSize: { - set: function (tabSize) { - tabSize = parseInt(tabSize); - if (tabSize > 0 && this.$tabSize !== tabSize) { - this.$modified = true; - this.$rowLengthCache = []; - this.$tabSize = tabSize; - this._signal("changeTabSize"); - } - }, - initialValue: 4, - handlesSet: true - }, - navigateWithinSoftTabs: { initialValue: false }, - foldStyle: { - set: function (val) { this.setFoldStyle(val); }, - handlesSet: true - }, - overwrite: { - set: function (val) { this._signal("changeOverwrite"); }, - initialValue: false - }, - newLineMode: { - set: function (val) { this.doc.setNewLineMode(val); }, - get: function () { return this.doc.getNewLineMode(); }, - handlesSet: true - }, - mode: { - set: function (val) { this.setMode(val); }, - get: function () { return this.$modeId; }, - handlesSet: true - } -}); -exports.EditSession = EditSession; - -}); - -ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module){"use strict"; -var lang = require("./lib/lang"); -var oop = require("./lib/oop"); -var Range = require("./range").Range; -var Search = /** @class */ (function () { - function Search() { - this.$options = {}; - } - Search.prototype.set = function (options) { - oop.mixin(this.$options, options); - return this; - }; - Search.prototype.getOptions = function () { - return lang.copyObject(this.$options); - }; - Search.prototype.setOptions = function (options) { - this.$options = options; - }; - Search.prototype.find = function (session) { - var options = this.$options; - var iterator = this.$matchIterator(session, options); - if (!iterator) - return false; - var firstRange = null; - iterator.forEach(function (sr, sc, er, ec) { - firstRange = new Range(sr, sc, er, ec); - if (sc == ec && options.start && /**@type{Range}*/ (options.start).start - && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) { - firstRange = null; - return false; - } - return true; - }); - return firstRange; - }; - Search.prototype.findAll = function (session) { - var options = this.$options; - if (!options.needle) - return []; - this.$assembleRegExp(options); - var range = options.range; - var lines = range - ? session.getLines(range.start.row, range.end.row) - : session.doc.getAllLines(); - var ranges = []; - var re = options.re; - if (options.$isMultiLine) { - var len = re.length; - var maxRow = lines.length - len; - var prevRange; - outer: for (var row = re.offset || 0; row <= maxRow; row++) { - for (var j = 0; j < len; j++) - if (lines[row + j].search(re[j]) == -1) - continue outer; - var startLine = lines[row]; - var line = lines[row + len - 1]; - var startIndex = startLine.length - startLine.match(re[0])[0].length; - var endIndex = line.match(re[len - 1])[0].length; - if (prevRange && prevRange.end.row === row && - prevRange.end.column > startIndex) { - continue; - } - ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex)); - if (len > 2) - row = row + len - 2; - } - } - else { - for (var matches, i = 0; i < lines.length; i++) { - if (this.$isMultilineSearch(options)) { - var lng = lines.length - 1; - matches = this.$multiLineForward(session, re, i, lng); - if (matches) { - var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng; - if (end_row > i) - i = end_row; - ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol)); - } - } - else { - matches = lang.getMatchOffsets(lines[i], re); - for (var j = 0; j < matches.length; j++) { - var match = matches[j]; - ranges.push(new Range(i, match.offset, i, match.offset + match.length)); - } - } - } - } - if (range) { - var startColumn = range.start.column; - var endColumn = range.end.column; - var i = 0, j = ranges.length - 1; - while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0) - i++; - var endRow = range.end.row - range.start.row; - while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow) - j--; - ranges = ranges.slice(i, j + 1); - for (i = 0, j = ranges.length; i < j; i++) { - ranges[i].start.row += range.start.row; - ranges[i].end.row += range.start.row; - } - } - return ranges; - }; - Search.prototype.parseReplaceString = function (replaceString) { - var CharCode = { - DollarSign: 36, - Ampersand: 38, - Digit0: 48, - Digit1: 49, - Digit9: 57, - Backslash: 92, - n: 110, - t: 116 - }; - var replacement = ''; - for (var i = 0, len = replaceString.length; i < len; i++) { - var chCode = replaceString.charCodeAt(i); - if (chCode === CharCode.Backslash) { - i++; - if (i >= len) { - replacement += "\\"; - break; - } - var nextChCode = replaceString.charCodeAt(i); - switch (nextChCode) { - case CharCode.Backslash: - replacement += "\\"; - break; - case CharCode.n: - replacement += "\n"; - break; - case CharCode.t: - replacement += "\t"; - break; - } - continue; - } - if (chCode === CharCode.DollarSign) { - i++; - if (i >= len) { - replacement += "$"; - break; - } - var nextChCode_1 = replaceString.charCodeAt(i); - if (nextChCode_1 === CharCode.DollarSign) { - replacement += "$$"; - continue; - } - if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) { - replacement += "$&"; - continue; - } - if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) { - replacement += "$" + replaceString[i]; - continue; - } - } - replacement += replaceString[i]; - } - return replacement || replaceString; - }; - Search.prototype.replace = function (input, replacement) { - var options = this.$options; - var re = this.$assembleRegExp(options); - if (options.$isMultiLine) - return replacement; - if (!re) - return; - var mtSearch = this.$isMultilineSearch(options); - if (mtSearch) - input = input.replace(/\r\n|\r|\n/g, "\n"); - var match = re.exec(input); - if (!match || (!mtSearch && match[0].length != input.length)) - return null; - replacement = options.regExp - ? this.parseReplaceString(replacement) - : replacement.replace(/\$/g, "$$$$"); - replacement = input.replace(re, replacement); - if (options.preserveCase) { - replacement = replacement.split(""); - for (var i = Math.min(input.length, input.length); i--;) { - var ch = input[i]; - if (ch && ch.toLowerCase() != ch) - replacement[i] = replacement[i].toUpperCase(); - else - replacement[i] = replacement[i].toLowerCase(); - } - replacement = replacement.join(""); - } - return replacement; - }; - Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) { - if (options.needle instanceof RegExp) - return options.re = options.needle; - var needle = options.needle; - if (!options.needle) - return options.re = false; - if (!options.regExp) - needle = lang.escapeRegExp(needle); - var modifier = options.caseSensitive ? "gm" : "gmi"; - try { - new RegExp(needle, "u"); - options.$supportsUnicodeFlag = true; - modifier += "u"; - } - catch (e) { - options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\{2}/gu - } - if (options.wholeWord) - needle = addWordBoundary(needle, options); - options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); - if (options.$isMultiLine) - return options.re = this.$assembleMultilineRegExp(needle, modifier); - try { - var re = new RegExp(needle, modifier); - } - catch (e) { - re = false; - } - return options.re = re; - }; - Search.prototype.$assembleMultilineRegExp = function (needle, modifier) { - var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); - var re = []; - for (var i = 0; i < parts.length; i++) - try { - re.push(new RegExp(parts[i], modifier)); - } - catch (e) { - return false; - } - return re; - }; - Search.prototype.$isMultilineSearch = function (options) { - return options.re && /\\r\\n|\\r|\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine; - }; - Search.prototype.$multiLineForward = function (session, re, start, last) { - var line, chunk = chunkEnd(session, start); - for (var row = start; row <= last;) { - for (var i = 0; i < chunk; i++) { - if (row > last) - break; - var next = session.getLine(row++); - line = line == null ? next : line + "\n" + next; - } - var match = re.exec(line); - re.lastIndex = 0; - if (match) { - var beforeMatch = line.slice(0, match.index).split("\n"); - var matchedText = match[0].split("\n"); - var startRow = start + beforeMatch.length - 1; - var startCol = beforeMatch[beforeMatch.length - 1].length; - var endRow = startRow + matchedText.length - 1; - var endCol = matchedText.length == 1 - ? startCol + matchedText[0].length - : matchedText[matchedText.length - 1].length; - return { - startRow: startRow, - startCol: startCol, - endRow: endRow, - endCol: endCol - }; - } - } - return null; - }; - Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) { - var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex; - for (var row = start; row >= first;) { - for (var i = 0; i < chunk && row >= first; i++) { - var next = session.getLine(row--); - line = line == null ? next : next + "\n" + line; - } - var match = multiLineBackwardMatch(line, re, endMargin); - if (match) { - var beforeMatch = line.slice(0, match.index).split("\n"); - var matchedText = match[0].split("\n"); - var startRow = row + beforeMatch.length; - var startCol = beforeMatch[beforeMatch.length - 1].length; - var endRow = startRow + matchedText.length - 1; - var endCol = matchedText.length == 1 - ? startCol + matchedText[0].length - : matchedText[matchedText.length - 1].length; - return { - startRow: startRow, - startCol: startCol, - endRow: endRow, - endCol: endCol - }; - } - } - return null; - }; - Search.prototype.$matchIterator = function (session, options) { - var re = this.$assembleRegExp(options); - if (!re) - return false; - var mtSearch = this.$isMultilineSearch(options); - var mtForward = this.$multiLineForward; - var mtBackward = this.$multiLineBackward; - var backwards = options.backwards == true; - var skipCurrent = options.skipCurrent != false; - var supportsUnicodeFlag = re.unicode; - var range = options.range; - var start = options.start; - if (!start) - start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); - if (start.start) - start = start[skipCurrent != backwards ? "end" : "start"]; - var firstRow = range ? range.start.row : 0; - var lastRow = range ? range.end.row : session.getLength() - 1; - if (backwards) { - var forEach = function (callback) { - var row = start.row; - if (forEachInLine(row, start.column, callback)) - return; - for (row--; row >= firstRow; row--) - if (forEachInLine(row, Number.MAX_VALUE, callback)) - return; - if (options.wrap == false) - return; - for (row = lastRow, firstRow = start.row; row >= firstRow; row--) - if (forEachInLine(row, Number.MAX_VALUE, callback)) - return; - }; - } - else { - var forEach = function (callback) { - var row = start.row; - if (forEachInLine(row, start.column, callback)) - return; - for (row = row + 1; row <= lastRow; row++) - if (forEachInLine(row, 0, callback)) - return; - if (options.wrap == false) - return; - for (row = firstRow, lastRow = start.row; row <= lastRow; row++) - if (forEachInLine(row, 0, callback)) - return; - }; - } - if (options.$isMultiLine) { - var len = re.length; - var forEachInLine = function (row, offset, callback) { - var startRow = backwards ? row - len + 1 : row; - if (startRow < 0 || startRow + len > session.getLength()) - return; - var line = session.getLine(startRow); - var startIndex = line.search(re[0]); - if (!backwards && startIndex < offset || startIndex === -1) - return; - for (var i = 1; i < len; i++) { - line = session.getLine(startRow + i); - if (line.search(re[i]) == -1) - return; - } - var endIndex = line.match(re[len - 1])[0].length; - if (backwards && endIndex > offset) - return; - if (callback(startRow, startIndex, startRow + len - 1, endIndex)) - return true; - }; - } - else if (backwards) { - var forEachInLine = function (row, endIndex, callback) { - if (mtSearch) { - var pos = mtBackward(session, re, endIndex, row, firstRow); - if (!pos) - return false; - if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol)) - return true; - } - else { - var line = session.getLine(row); - var matches = []; - var m, last = 0; - re.lastIndex = 0; - while ((m = re.exec(line))) { - var length = m[0].length; - last = m.index; - if (!length) { - if (last >= line.length) - break; - re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag); - } - if (m.index + length > endIndex) - break; - matches.push(m.index, length); - } - for (var i = matches.length - 1; i >= 0; i -= 2) { - var column = matches[i - 1]; - var length = matches[i]; - if (callback(row, column, row, column + length)) - return true; - } - } - }; - } - else { - var forEachInLine = function (row, startIndex, callback) { - re.lastIndex = startIndex; - if (mtSearch) { - var pos = mtForward(session, re, row, lastRow); - if (pos) { - var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow; - if (end_row > row) - row = end_row; - } - if (!pos) - return false; - if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol)) - return true; - } - else { - var line = session.getLine(row); - var last; - var m; - while ((m = re.exec(line))) { - var length = m[0].length; - last = m.index; - if (callback(row, last, row, last + length)) - return true; - if (!length) { - re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag); - if (last >= line.length) - return false; - } - } - } - }; - } - return { forEach: forEach }; - }; - return Search; -}()); -function addWordBoundary(needle, options) { - var supportsLookbehind = lang.supportsLookbehind(); - function wordBoundary(c, firstChar) { - if (firstChar === void 0) { firstChar = true; } - var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp("[\\p{L}\\p{N}_]", "u") : new RegExp("\\w"); - if (wordRegExp.test(c) || options.regExp) { - if (supportsLookbehind && options.$supportsUnicodeFlag) { - if (firstChar) - return "(?<=^|[^\\p{L}\\p{N}_])"; - return "(?=[^\\p{L}\\p{N}_]|$)"; - } - return "\\b"; - } - return ""; - } - var needleArray = Array.from(needle); - var firstChar = needleArray[0]; - var lastChar = needleArray[needleArray.length - 1]; - return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false); -} -function multiLineBackwardMatch(line, re, endMargin) { - var match = null; - var from = 0; - while (from <= line.length) { - re.lastIndex = from; - var newMatch = re.exec(line); - if (!newMatch) - break; - var end = newMatch.index + newMatch[0].length; - if (end > line.length - endMargin) - break; - if (!match || end > match.index + match[0].length) - match = newMatch; - from = newMatch.index + 1; - } - return match; -} -function chunkEnd(session, start) { - var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row; - return targetLine + 1; -} -exports.Search = Search; - -}); - -ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); var keyUtil = require("../lib/keys"); -var useragent = require("../lib/useragent"); -var KEY_MODS = keyUtil.KEY_MODS; -var MultiHashHandler = /** @class */ (function () { - function MultiHashHandler(config, platform) { - this.$init(config, platform, false); - } - MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) { - this.platform = platform || (useragent.isMac ? "mac" : "win"); - this.commands = {}; - this.commandKeyBinding = {}; - this.addCommands(config); - this.$singleCommand = $singleCommand; - }; - MultiHashHandler.prototype.addCommand = function (command) { - if (this.commands[command.name]) - this.removeCommand(command); - this.commands[command.name] = command; - if (command.bindKey) - this._buildKeyHash(command); - }; - MultiHashHandler.prototype.removeCommand = function (command, keepCommand) { - var name = command && (typeof command === 'string' ? command : command.name); - command = this.commands[name]; - if (!keepCommand) - delete this.commands[name]; - var ckb = this.commandKeyBinding; - for (var keyId in ckb) { - var cmdGroup = ckb[keyId]; - if (cmdGroup == command) { - delete ckb[keyId]; - } - else if (Array.isArray(cmdGroup)) { - var i = cmdGroup.indexOf(command); - if (i != -1) { - cmdGroup.splice(i, 1); - if (cmdGroup.length == 1) - ckb[keyId] = cmdGroup[0]; - } - } - } - }; - MultiHashHandler.prototype.bindKey = function (key, command, position) { - if (typeof key == "object" && key) { - if (position == undefined) - position = key.position; - key = key[this.platform]; - } - if (!key) - return; - if (typeof command == "function") - return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split("|").forEach(function (keyPart) { - var chain = ""; - if (keyPart.indexOf(" ") != -1) { - var parts = keyPart.split(/\s+/); - keyPart = parts.pop(); - parts.forEach(function (keyPart) { - var binding = this.parseKeys(keyPart); - var id = KEY_MODS[binding.hashId] + binding.key; - chain += (chain ? " " : "") + id; - this._addCommandToBinding(chain, "chainKeys"); - }, this); - chain += " "; - } - var binding = this.parseKeys(keyPart); - var id = KEY_MODS[binding.hashId] + binding.key; - this._addCommandToBinding(chain + id, command, position); - }, this); - }; - MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) { - var ckb = this.commandKeyBinding, i; - if (!command) { - delete ckb[keyId]; - } - else if (!ckb[keyId] || this.$singleCommand) { - ckb[keyId] = command; - } - else { - if (!Array.isArray(ckb[keyId])) { - ckb[keyId] = [ckb[keyId]]; - } - else if ((i = ckb[keyId].indexOf(command)) != -1) { - ckb[keyId].splice(i, 1); - } - if (typeof position != "number") { - position = getPosition(command); - } - var commands = ckb[keyId]; - for (i = 0; i < commands.length; i++) { - var other = commands[i]; - var otherPos = getPosition(other); - if (otherPos > position) - break; - } - commands.splice(i, 0, command); - } - }; - MultiHashHandler.prototype.addCommands = function (commands) { - commands && Object.keys(commands).forEach(function (name) { - var command = commands[name]; - if (!command) - return; - if (typeof command === "string") - return this.bindKey(command, name); - if (typeof command === "function") - command = { exec: command }; - if (typeof command !== "object") - return; - if (!command.name) - command.name = name; - this.addCommand(command); - }, this); - }; - MultiHashHandler.prototype.removeCommands = function (commands) { - Object.keys(commands).forEach(function (name) { - this.removeCommand(commands[name]); - }, this); - }; - MultiHashHandler.prototype.bindKeys = function (keyList) { - Object.keys(keyList).forEach(function (key) { - this.bindKey(key, keyList[key]); - }, this); - }; - MultiHashHandler.prototype._buildKeyHash = function (command) { - this.bindKey(command.bindKey, command); - }; - MultiHashHandler.prototype.parseKeys = function (keys) { - var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function (x) { return x; }); - var key = parts.pop(); - var keyCode = keyUtil[key]; - if (keyUtil.FUNCTION_KEYS[keyCode]) - key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); - else if (!parts.length) - return { key: key, hashId: -1 }; - else if (parts.length == 1 && parts[0] == "shift") - return { key: key.toUpperCase(), hashId: -1 }; - var hashId = 0; - for (var i = parts.length; i--;) { - var modifier = keyUtil.KEY_MODS[parts[i]]; - if (modifier == null) { - if (typeof console != "undefined") - console.error("invalid modifier " + parts[i] + " in " + keys); - return false; - } - hashId |= modifier; - } - return { key: key, hashId: hashId }; - }; - MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) { - var key = KEY_MODS[hashId] + keyString; - return this.commandKeyBinding[key]; - }; - MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) { - if (keyCode < 0) - return; - var key = KEY_MODS[hashId] + keyString; - var command = this.commandKeyBinding[key]; - if (data.$keyChain) { - data.$keyChain += " " + key; - command = this.commandKeyBinding[data.$keyChain] || command; - } - if (command) { - if (command == "chainKeys" || command[command.length - 1] == "chainKeys") { - data.$keyChain = data.$keyChain || key; - return { command: "null" }; - } - } - if (data.$keyChain) { - if ((!hashId || hashId == 4) && keyString.length == 1) - data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input - else if (hashId == -1 || keyCode > 0) - data.$keyChain = ""; // reset keyChain - } - return { command: command }; - }; - MultiHashHandler.prototype.getStatusText = function (editor, data) { - return data.$keyChain || ""; - }; - return MultiHashHandler; -}()); -function getPosition(command) { - return typeof command == "object" && command.bindKey - && command.bindKey.position - || (command.isDefault ? -100 : 0); -} -var HashHandler = /** @class */ (function (_super) { - __extends(HashHandler, _super); - function HashHandler(config, platform) { - var _this = _super.call(this, config, platform) || this; - _this.$singleCommand = true; - return _this; - } - return HashHandler; -}(MultiHashHandler)); -HashHandler.call = function (thisArg, config, platform) { - MultiHashHandler.prototype.$init.call(thisArg, config, platform, true); -}; -MultiHashHandler.call = function (thisArg, config, platform) { - MultiHashHandler.prototype.$init.call(thisArg, config, platform, false); -}; -exports.HashHandler = HashHandler; -exports.MultiHashHandler = MultiHashHandler; - -}); - -ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var oop = require("../lib/oop"); -var MultiHashHandler = require("../keyboard/hash_handler").MultiHashHandler; -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var CommandManager = /** @class */ (function (_super) { - __extends(CommandManager, _super); - function CommandManager(platform, commands) { - var _this = _super.call(this, commands, platform) || this; - _this.byName = _this.commands; - _this.setDefaultHandler("exec", function (e) { - if (!e.args) { - return e.command.exec(e.editor, {}, e.event, true); - } - return e.command.exec(e.editor, e.args, e.event, false); - }); - return _this; - } - CommandManager.prototype.exec = function (command, editor, args) { - if (Array.isArray(command)) { - for (var i = command.length; i--;) { - if (this.exec(command[i], editor, args)) - return true; - } - return false; - } - if (typeof command === "string") - command = this.commands[command]; - var e = { editor: editor, command: command, args: args }; - if (!this.canExecute(command, editor)) { - this._signal("commandUnavailable", e); - return false; - } - e.returnValue = this._emit("exec", e); - this._signal("afterExec", e); - return e.returnValue === false ? false : true; - }; - CommandManager.prototype.canExecute = function (command, editor) { - if (typeof command === "string") - command = this.commands[command]; - if (!command) - return false; - if (editor && editor.$readOnly && !command.readOnly) - return false; - if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor)) - return false; - return true; - }; - CommandManager.prototype.toggleRecording = function (editor) { - if (this.$inReplay) - return; - editor && editor._emit("changeStatus"); - if (this.recording) { - this.macro.pop(); - this.off("exec", this.$addCommandToMacro); - if (!this.macro.length) - this.macro = this.oldMacro; - return this.recording = false; - } - if (!this.$addCommandToMacro) { - this.$addCommandToMacro = function (e) { - this.macro.push([e.command, e.args]); - }.bind(this); - } - this.oldMacro = this.macro; - this.macro = []; - this.on("exec", this.$addCommandToMacro); - return this.recording = true; - }; - CommandManager.prototype.replay = function (editor) { - if (this.$inReplay || !this.macro) - return; - if (this.recording) - return this.toggleRecording(editor); - try { - this.$inReplay = true; - this.macro.forEach(function (x) { - if (typeof x == "string") - this.exec(x, editor); - else - this.exec(x[0], editor, x[1]); - }, this); - } - finally { - this.$inReplay = false; - } - }; - CommandManager.prototype.trimMacro = function (m) { - return m.map(function (x) { - if (typeof x[0] != "string") - x[0] = x[0].name; - if (!x[1]) - x = x[0]; - return x; - }); - }; - return CommandManager; -}(MultiHashHandler)); -oop.implement(CommandManager.prototype, EventEmitter); -exports.CommandManager = CommandManager; - -}); - -ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(require, exports, module){"use strict"; -var lang = require("../lib/lang"); -var config = require("../config"); -var Range = require("../range").Range; -function bindKey(win, mac) { - return { win: win, mac: mac }; -} -exports.commands = [{ - name: "showSettingsMenu", - description: "Show settings menu", - bindKey: bindKey("Ctrl-,", "Command-,"), - exec: function (editor) { - config.loadModule("ace/ext/settings_menu", function (module) { - module.init(editor); - editor.showSettingsMenu(); - }); - }, - readOnly: true - }, { - name: "goToNextError", - description: "Go to next error", - bindKey: bindKey("Alt-E", "F4"), - exec: function (editor) { - config.loadModule("ace/ext/error_marker", function (module) { - module.showErrorMarker(editor, 1); - }); - }, - scrollIntoView: "animate", - readOnly: true - }, { - name: "goToPreviousError", - description: "Go to previous error", - bindKey: bindKey("Alt-Shift-E", "Shift-F4"), - exec: function (editor) { - config.loadModule("ace/ext/error_marker", function (module) { - module.showErrorMarker(editor, -1); - }); - }, - scrollIntoView: "animate", - readOnly: true - }, { - name: "selectall", - description: "Select all", - bindKey: bindKey("Ctrl-A", "Command-A"), - exec: function (editor) { editor.selectAll(); }, - readOnly: true - }, { - name: "centerselection", - description: "Center selection", - bindKey: bindKey(null, "Ctrl-L"), - exec: function (editor) { editor.centerSelection(); }, - readOnly: true - }, { - name: "gotoline", - description: "Go to line...", - bindKey: bindKey("Ctrl-L", "Command-L"), - exec: function (editor, line) { - if (typeof line === "number" && !isNaN(line)) - editor.gotoLine(line); - editor.prompt({ $type: "gotoLine" }); - }, - readOnly: true - }, { - name: "fold", - bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), - exec: function (editor) { editor.session.toggleFold(false); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "unfold", - bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), - exec: function (editor) { editor.session.toggleFold(true); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "toggleFoldWidget", - description: "Toggle fold widget", - bindKey: bindKey("F2", "F2"), - exec: function (editor) { editor.session.toggleFoldWidget(); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "toggleParentFoldWidget", - description: "Toggle parent fold widget", - bindKey: bindKey("Alt-F2", "Alt-F2"), - exec: function (editor) { editor.session.toggleFoldWidget(true); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "foldall", - description: "Fold all", - bindKey: bindKey(null, "Ctrl-Command-Option-0"), - exec: function (editor) { editor.session.foldAll(); }, - scrollIntoView: "center", - readOnly: true - }, { - name: "foldAllComments", - description: "Fold all comments", - bindKey: bindKey(null, "Ctrl-Command-Option-0"), - exec: function (editor) { editor.session.foldAllComments(); }, - scrollIntoView: "center", - readOnly: true - }, { - name: "foldOther", - description: "Fold other", - bindKey: bindKey("Alt-0", "Command-Option-0"), - exec: function (editor) { - editor.session.foldAll(); - editor.session.unfold(editor.selection.getAllRanges()); - }, - scrollIntoView: "center", - readOnly: true - }, { - name: "unfoldall", - description: "Unfold all", - bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), - exec: function (editor) { editor.session.unfold(); }, - scrollIntoView: "center", - readOnly: true - }, { - name: "findnext", - description: "Find next", - bindKey: bindKey("Ctrl-K", "Command-G"), - exec: function (editor) { editor.findNext(); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "findprevious", - description: "Find previous", - bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), - exec: function (editor) { editor.findPrevious(); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true - }, { - name: "selectOrFindNext", - description: "Select or find next", - bindKey: bindKey("Alt-K", "Ctrl-G"), - exec: function (editor) { - if (editor.selection.isEmpty()) - editor.selection.selectWord(); - else - editor.findNext(); - }, - readOnly: true - }, { - name: "selectOrFindPrevious", - description: "Select or find previous", - bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"), - exec: function (editor) { - if (editor.selection.isEmpty()) - editor.selection.selectWord(); - else - editor.findPrevious(); - }, - readOnly: true - }, { - name: "find", - description: "Find", - bindKey: bindKey("Ctrl-F", "Command-F"), - exec: function (editor) { - config.loadModule("ace/ext/searchbox", function (e) { e.Search(editor); }); - }, - readOnly: true - }, { - name: "overwrite", - description: "Overwrite", - bindKey: "Insert", - exec: function (editor) { editor.toggleOverwrite(); }, - readOnly: true - }, { - name: "selecttostart", - description: "Select to start", - bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Home|Command-Shift-Up"), - exec: function (editor) { editor.getSelection().selectFileStart(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" - }, { - name: "gotostart", - description: "Go to start", - bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), - exec: function (editor) { editor.navigateFileStart(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" - }, { - name: "selectup", - description: "Select up", - bindKey: bindKey("Shift-Up", "Shift-Up|Ctrl-Shift-P"), - exec: function (editor) { editor.getSelection().selectUp(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "golineup", - description: "Go line up", - bindKey: bindKey("Up", "Up|Ctrl-P"), - exec: function (editor, args) { editor.navigateUp(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selecttoend", - description: "Select to end", - bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-End|Command-Shift-Down"), - exec: function (editor) { editor.getSelection().selectFileEnd(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" - }, { - name: "gotoend", - description: "Go to end", - bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), - exec: function (editor) { editor.navigateFileEnd(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" - }, { - name: "selectdown", - description: "Select down", - bindKey: bindKey("Shift-Down", "Shift-Down|Ctrl-Shift-N"), - exec: function (editor) { editor.getSelection().selectDown(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "golinedown", - description: "Go line down", - bindKey: bindKey("Down", "Down|Ctrl-N"), - exec: function (editor, args) { editor.navigateDown(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectwordleft", - description: "Select word left", - bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), - exec: function (editor) { editor.getSelection().selectWordLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotowordleft", - description: "Go to word left", - bindKey: bindKey("Ctrl-Left", "Option-Left"), - exec: function (editor) { editor.navigateWordLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selecttolinestart", - description: "Select to line start", - bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left|Ctrl-Shift-A"), - exec: function (editor) { editor.getSelection().selectLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotolinestart", - description: "Go to line start", - bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), - exec: function (editor) { editor.navigateLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectleft", - description: "Select left", - bindKey: bindKey("Shift-Left", "Shift-Left|Ctrl-Shift-B"), - exec: function (editor) { editor.getSelection().selectLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotoleft", - description: "Go to left", - bindKey: bindKey("Left", "Left|Ctrl-B"), - exec: function (editor, args) { editor.navigateLeft(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectwordright", - description: "Select word right", - bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), - exec: function (editor) { editor.getSelection().selectWordRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotowordright", - description: "Go to word right", - bindKey: bindKey("Ctrl-Right", "Option-Right"), - exec: function (editor) { editor.navigateWordRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selecttolineend", - description: "Select to line end", - bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right|Shift-End|Ctrl-Shift-E"), - exec: function (editor) { editor.getSelection().selectLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotolineend", - description: "Go to line end", - bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), - exec: function (editor) { editor.navigateLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectright", - description: "Select right", - bindKey: bindKey("Shift-Right", "Shift-Right"), - exec: function (editor) { editor.getSelection().selectRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "gotoright", - description: "Go to right", - bindKey: bindKey("Right", "Right|Ctrl-F"), - exec: function (editor, args) { editor.navigateRight(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectpagedown", - description: "Select page down", - bindKey: "Shift-PageDown", - exec: function (editor) { editor.selectPageDown(); }, - readOnly: true - }, { - name: "pagedown", - description: "Page down", - bindKey: bindKey(null, "Option-PageDown"), - exec: function (editor) { editor.scrollPageDown(); }, - readOnly: true - }, { - name: "gotopagedown", - description: "Go to page down", - bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), - exec: function (editor) { editor.gotoPageDown(); }, - readOnly: true - }, { - name: "selectpageup", - description: "Select page up", - bindKey: "Shift-PageUp", - exec: function (editor) { editor.selectPageUp(); }, - readOnly: true - }, { - name: "pageup", - description: "Page up", - bindKey: bindKey(null, "Option-PageUp"), - exec: function (editor) { editor.scrollPageUp(); }, - readOnly: true - }, { - name: "gotopageup", - description: "Go to page up", - bindKey: "PageUp", - exec: function (editor) { editor.gotoPageUp(); }, - readOnly: true - }, { - name: "scrollup", - description: "Scroll up", - bindKey: bindKey("Ctrl-Up", null), - exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, - readOnly: true - }, { - name: "scrolldown", - description: "Scroll down", - bindKey: bindKey("Ctrl-Down", null), - exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, - readOnly: true - }, { - name: "selectlinestart", - description: "Select line start", - bindKey: "Shift-Home", - exec: function (editor) { editor.getSelection().selectLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectlineend", - description: "Select line end", - bindKey: "Shift-End", - exec: function (editor) { editor.getSelection().selectLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "togglerecording", - description: "Toggle recording", - bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), - exec: function (editor) { editor.commands.toggleRecording(editor); }, - readOnly: true - }, { - name: "replaymacro", - description: "Replay macro", - bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), - exec: function (editor) { editor.commands.replay(editor); }, - readOnly: true - }, { - name: "jumptomatching", - description: "Jump to matching", - bindKey: bindKey("Ctrl-\\|Ctrl-P", "Command-\\"), - exec: function (editor) { editor.jumpToMatching(); }, - multiSelectAction: "forEach", - scrollIntoView: "animate", - readOnly: true - }, { - name: "selecttomatching", - description: "Select to matching", - bindKey: bindKey("Ctrl-Shift-\\|Ctrl-Shift-P", "Command-Shift-\\"), - exec: function (editor) { editor.jumpToMatching(true); }, - multiSelectAction: "forEach", - scrollIntoView: "animate", - readOnly: true - }, { - name: "expandToMatching", - description: "Expand to matching", - bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"), - exec: function (editor) { editor.jumpToMatching(true, true); }, - multiSelectAction: "forEach", - scrollIntoView: "animate", - readOnly: true - }, { - name: "passKeysToBrowser", - description: "Pass keys to browser", - bindKey: bindKey(null, null), - exec: function () { }, - passEvent: true, - readOnly: true - }, { - name: "copy", - description: "Copy", - exec: function (editor) { - }, - readOnly: true - }, - { - name: "cut", - description: "Cut", - exec: function (editor) { - var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty(); - var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange(); - editor._emit("cut", range); - if (!range.isEmpty()) - editor.session.remove(range); - editor.clearSelection(); - }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" - }, { - name: "paste", - description: "Paste", - exec: function (editor, args) { - editor.$handlePaste(args); - }, - scrollIntoView: "cursor" - }, { - name: "removeline", - description: "Remove line", - bindKey: bindKey("Ctrl-D", "Command-D"), - exec: function (editor) { editor.removeLines(); }, - scrollIntoView: "cursor", - multiSelectAction: "forEachLine" - }, { - name: "duplicateSelection", - description: "Duplicate selection", - bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), - exec: function (editor) { editor.duplicateSelection(); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" - }, { - name: "sortlines", - description: "Sort lines", - bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), - exec: function (editor) { editor.sortLines(); }, - scrollIntoView: "selection", - multiSelectAction: "forEachLine" - }, { - name: "togglecomment", - description: "Toggle comment", - bindKey: bindKey("Ctrl-/", "Command-/"), - exec: function (editor) { editor.toggleCommentLines(); }, - multiSelectAction: "forEachLine", - scrollIntoView: "selectionPart" - }, { - name: "toggleBlockComment", - description: "Toggle block comment", - bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), - exec: function (editor) { editor.toggleBlockComment(); }, - multiSelectAction: "forEach", - scrollIntoView: "selectionPart" - }, { - name: "modifyNumberUp", - description: "Modify number up", - bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), - exec: function (editor) { editor.modifyNumber(1); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" - }, { - name: "modifyNumberDown", - description: "Modify number down", - bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), - exec: function (editor) { editor.modifyNumber(-1); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" - }, { - name: "replace", - description: "Replace", - bindKey: bindKey("Ctrl-H", "Command-Option-F"), - exec: function (editor) { - config.loadModule("ace/ext/searchbox", function (e) { e.Search(editor, true); }); - } - }, { - name: "undo", - description: "Undo", - bindKey: bindKey("Ctrl-Z", "Command-Z"), - exec: function (editor) { editor.undo(); } - }, { - name: "redo", - description: "Redo", - bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), - exec: function (editor) { editor.redo(); } - }, { - name: "copylinesup", - description: "Copy lines up", - bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), - exec: function (editor) { editor.copyLinesUp(); }, - scrollIntoView: "cursor" - }, { - name: "movelinesup", - description: "Move lines up", - bindKey: bindKey("Alt-Up", "Option-Up"), - exec: function (editor) { editor.moveLinesUp(); }, - scrollIntoView: "cursor" - }, { - name: "copylinesdown", - description: "Copy lines down", - bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), - exec: function (editor) { editor.copyLinesDown(); }, - scrollIntoView: "cursor" - }, { - name: "movelinesdown", - description: "Move lines down", - bindKey: bindKey("Alt-Down", "Option-Down"), - exec: function (editor) { editor.moveLinesDown(); }, - scrollIntoView: "cursor" - }, { - name: "del", - description: "Delete", - bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), - exec: function (editor) { editor.remove("right"); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "backspace", - description: "Backspace", - bindKey: bindKey("Shift-Backspace|Backspace", "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"), - exec: function (editor) { editor.remove("left"); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "cut_or_delete", - description: "Cut or delete", - bindKey: bindKey("Shift-Delete", null), - exec: function (editor) { - if (editor.selection.isEmpty()) { - editor.remove("left"); - } - else { - return false; - } - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removetolinestart", - description: "Remove to line start", - bindKey: bindKey("Alt-Backspace", "Command-Backspace"), - exec: function (editor) { editor.removeToLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removetolineend", - description: "Remove to line end", - bindKey: bindKey("Alt-Delete", "Ctrl-K|Command-Delete"), - exec: function (editor) { editor.removeToLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removetolinestarthard", - description: "Remove to line start hard", - bindKey: bindKey("Ctrl-Shift-Backspace", null), - exec: function (editor) { - var range = editor.selection.getRange(); - range.start.column = 0; - editor.session.remove(range); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removetolineendhard", - description: "Remove to line end hard", - bindKey: bindKey("Ctrl-Shift-Delete", null), - exec: function (editor) { - var range = editor.selection.getRange(); - range.end.column = Number.MAX_VALUE; - editor.session.remove(range); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removewordleft", - description: "Remove word left", - bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), - exec: function (editor) { editor.removeWordLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "removewordright", - description: "Remove word right", - bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), - exec: function (editor) { editor.removeWordRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "outdent", - description: "Outdent", - bindKey: bindKey("Shift-Tab", "Shift-Tab"), - exec: function (editor) { editor.blockOutdent(); }, - multiSelectAction: "forEach", - scrollIntoView: "selectionPart" - }, { - name: "indent", - description: "Indent", - bindKey: bindKey("Tab", "Tab"), - exec: function (editor) { editor.indent(); }, - multiSelectAction: "forEach", - scrollIntoView: "selectionPart" - }, { - name: "blockoutdent", - description: "Block outdent", - bindKey: bindKey("Ctrl-[", "Ctrl-["), - exec: function (editor) { editor.blockOutdent(); }, - multiSelectAction: "forEachLine", - scrollIntoView: "selectionPart" - }, { - name: "blockindent", - description: "Block indent", - bindKey: bindKey("Ctrl-]", "Ctrl-]"), - exec: function (editor) { editor.blockIndent(); }, - multiSelectAction: "forEachLine", - scrollIntoView: "selectionPart" - }, { - name: "insertstring", - description: "Insert string", - exec: function (editor, str) { editor.insert(str); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "inserttext", - description: "Insert text", - exec: function (editor, args) { - editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "splitline", - description: "Split line", - bindKey: bindKey(null, "Ctrl-O"), - exec: function (editor) { editor.splitLine(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "transposeletters", - description: "Transpose letters", - bindKey: bindKey("Alt-Shift-X", "Ctrl-T"), - exec: function (editor) { editor.transposeLetters(); }, - multiSelectAction: function (editor) { editor.transposeSelections(1); }, - scrollIntoView: "cursor" - }, { - name: "touppercase", - description: "To uppercase", - bindKey: bindKey("Ctrl-U", "Ctrl-U"), - exec: function (editor) { editor.toUpperCase(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "tolowercase", - description: "To lowercase", - bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), - exec: function (editor) { editor.toLowerCase(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "autoindent", - description: "Auto Indent", - bindKey: bindKey(null, null), - exec: function (editor) { editor.autoIndent(); }, - scrollIntoView: "animate" - }, { - name: "expandtoline", - description: "Expand to line", - bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"), - exec: function (editor) { - var range = editor.selection.getRange(); - range.start.column = range.end.column = 0; - range.end.row++; - editor.selection.setRange(range, false); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true - }, { - name: "openlink", - bindKey: bindKey("Ctrl+F3", "F3"), - exec: function (editor) { editor.openLink(); } - }, { - name: "joinlines", - description: "Join lines", - bindKey: bindKey(null, null), - exec: function (editor) { - var isBackwards = editor.selection.isBackwards(); - var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor(); - var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead(); - var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length; - var selectedText = editor.session.doc.getTextRange(editor.selection.getRange()); - var selectedCount = selectedText.replace(/\n\s*/, " ").length; - var insertLine = editor.session.doc.getLine(selectionStart.row); - for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) { - var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i))); - if (curLine.length !== 0) { - curLine = " " + curLine; - } - insertLine += curLine; - } - if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) { - insertLine += editor.session.doc.getNewLineCharacter(); - } - editor.clearSelection(); - editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine); - if (selectedCount > 0) { - editor.selection.moveCursorTo(selectionStart.row, selectionStart.column); - editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount); - } - else { - firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol; - editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol); - } - }, - multiSelectAction: "forEach", - readOnly: true - }, { - name: "invertSelection", - description: "Invert selection", - bindKey: bindKey(null, null), - exec: function (editor) { - var endRow = editor.session.doc.getLength() - 1; - var endCol = editor.session.doc.getLine(endRow).length; - var ranges = editor.selection.rangeList.ranges; - var newRanges = []; - if (ranges.length < 1) { - ranges = [editor.selection.getRange()]; - } - for (var i = 0; i < ranges.length; i++) { - if (i == (ranges.length - 1)) { - if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) { - newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol)); - } - } - if (i === 0) { - if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) { - newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column)); - } - } - else { - newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column)); - } - } - editor.exitMultiSelectMode(); - editor.clearSelection(); - for (var i = 0; i < newRanges.length; i++) { - editor.selection.addRange(newRanges[i], false); - } - }, - readOnly: true, - scrollIntoView: "none" - }, { - name: "addLineAfter", - description: "Add new line after the current line", - exec: function (editor) { - editor.selection.clearSelection(); - editor.navigateLineEnd(); - editor.insert("\n"); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "addLineBefore", - description: "Add new line before the current line", - exec: function (editor) { - editor.selection.clearSelection(); - var cursor = editor.getCursorPosition(); - editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE); - editor.insert("\n"); - if (cursor.row === 0) - editor.navigateUp(); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" - }, { - name: "openCommandPallete", - exec: function (editor) { - console.warn("This is an obsolete command. Please use `openCommandPalette` instead."); - editor.prompt({ $type: "commands" }); - }, - readOnly: true - }, { - name: "openCommandPalette", - description: "Open command palette", - bindKey: bindKey("F1", "F1"), - exec: function (editor) { - editor.prompt({ $type: "commands" }); - }, - readOnly: true - }, { - name: "modeSelect", - description: "Change language mode...", - bindKey: bindKey(null, null), - exec: function (editor) { - editor.prompt({ $type: "modes" }); - }, - readOnly: true - }]; -for (var i = 1; i < 9; i++) { - exports.commands.push({ - name: "foldToLevel" + i, - description: "Fold To Level " + i, - level: i, - exec: function (editor) { editor.session.foldToLevel(this.level); }, - scrollIntoView: "center", - readOnly: true - }); -} - -}); - -ace.define("ace/keyboard/gutter_handler",["require","exports","module","ace/lib/keys","ace/mouse/default_gutter_handler"], function(require, exports, module){"use strict"; -var keys = require('../lib/keys'); -var GutterTooltip = require("../mouse/default_gutter_handler").GutterTooltip; -var GutterKeyboardHandler = /** @class */ (function () { - function GutterKeyboardHandler(editor) { - this.editor = editor; - this.gutterLayer = editor.renderer.$gutterLayer; - this.element = editor.renderer.$gutter; - this.lines = editor.renderer.$gutterLayer.$lines; - this.activeRowIndex = null; - this.activeLane = null; - this.annotationTooltip = new GutterTooltip(this.editor); - } - GutterKeyboardHandler.prototype.addListener = function () { - this.element.addEventListener("keydown", this.$onGutterKeyDown.bind(this)); - this.element.addEventListener("focusout", this.$blurGutter.bind(this)); - this.editor.on("mousewheel", this.$blurGutter.bind(this)); - }; - GutterKeyboardHandler.prototype.removeListener = function () { - this.element.removeEventListener("keydown", this.$onGutterKeyDown.bind(this)); - this.element.removeEventListener("focusout", this.$blurGutter.bind(this)); - this.editor.off("mousewheel", this.$blurGutter.bind(this)); - }; - GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) { - if (this.annotationTooltip.isOpen) { - e.preventDefault(); - if (e.keyCode === keys["escape"]) - this.annotationTooltip.hideTooltip(); - return; - } - if (e.target === this.element) { - if (e.keyCode != keys["enter"]) { - return; - } - e.preventDefault(); - var row = this.editor.getCursorPosition().row; - if (!this.editor.isRowVisible(row)) - this.editor.scrollToLine(row, true, true); - setTimeout( - function () { - var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row); - var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index); - var nearestAnnotationIndex = this.$findNearestAnnotation(index); - if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null) - return; - var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index); - if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) { - this.activeLane = "fold"; - this.activeRowIndex = nearestFoldLaneWidgetIndex; - if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) { - this.$focusCustomWidget(this.activeRowIndex); - return; - } - else { - this.$focusFoldWidget(this.activeRowIndex); - return; - } - } - else { - this.activeRowIndex = nearestAnnotationIndex; - this.activeLane = "annotation"; - this.$focusAnnotation(this.activeRowIndex); - return; - } - }.bind(this), 10); - return; - } - this.$handleGutterKeyboardInteraction(e); - setTimeout(function () { - this.editor._signal("gutterkeydown", new GutterKeyboardEvent(e, this)); - }.bind(this), 10); - }; - GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) { - if (e.keyCode === keys["tab"]) { - e.preventDefault(); - return; - } - if (e.keyCode === keys["escape"]) { - e.preventDefault(); - this.$blurGutter(); - this.element.focus(); - this.lane = null; - return; - } - if (e.keyCode === keys["up"]) { - e.preventDefault(); - switch (this.activeLane) { - case "fold": - this.$moveFoldWidgetUp(); - break; - case "annotation": - this.$moveAnnotationUp(); - break; - } - return; - } - if (e.keyCode === keys["down"]) { - e.preventDefault(); - switch (this.activeLane) { - case "fold": - this.$moveFoldWidgetDown(); - break; - case "annotation": - this.$moveAnnotationDown(); - break; - } - return; - } - if (e.keyCode === keys["left"]) { - e.preventDefault(); - this.$switchLane("annotation"); - return; - } - if (e.keyCode === keys["right"]) { - e.preventDefault(); - this.$switchLane("fold"); - return; - } - if (e.keyCode === keys["enter"] || e.keyCode === keys["space"]) { - e.preventDefault(); - switch (this.activeLane) { - case "fold": - var row = this.$rowIndexToRow(this.activeRowIndex); - var customWidget = this.editor.session.$gutterCustomWidgets[row]; - if (customWidget) { - if (customWidget.callbacks && customWidget.callbacks.onClick) { - customWidget.callbacks.onClick(e, row); - } - } - else if (this.gutterLayer.session.foldWidgets[row] === 'start') { - this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e); - setTimeout( - function () { - if (this.$rowIndexToRow(this.activeRowIndex) !== row) { - this.$blurFoldWidget(this.activeRowIndex); - this.activeRowIndex = this.$rowToRowIndex(row); - this.$focusFoldWidget(this.activeRowIndex); - } - }.bind(this), 10); - break; - } - else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') { - break; - } - return; - case "annotation": - var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2]; - var rect = gutterElement.getBoundingClientRect(); - var style = this.annotationTooltip.getElement().style; - style.left = rect.right + "px"; - style.top = rect.bottom + "px"; - this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex)); - break; - } - return; - } - }; - GutterKeyboardHandler.prototype.$blurGutter = function () { - if (this.activeRowIndex !== null) { - switch (this.activeLane) { - case "fold": - this.$blurFoldWidget(this.activeRowIndex); - this.$blurCustomWidget(this.activeRowIndex); - break; - case "annotation": - this.$blurAnnotation(this.activeRowIndex); - break; - } - } - if (this.annotationTooltip.isOpen) - this.annotationTooltip.hideTooltip(); - return; - }; - GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) { - var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); - var isIconVisible = this.$getFoldWidget(index).style.display !== "none"; - return isRowFullyVisible && isIconVisible; - }; - GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) { - var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); - var isIconVisible = !!this.$getCustomWidget(index); - return isRowFullyVisible && isIconVisible; - }; - GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) { - var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); - var isIconVisible = this.$getAnnotation(index).style.display !== "none"; - return isRowFullyVisible && isIconVisible; - }; - GutterKeyboardHandler.prototype.$getFoldWidget = function (index) { - var cell = this.lines.get(index); - var element = cell.element; - return element.childNodes[1]; - }; - GutterKeyboardHandler.prototype.$getCustomWidget = function (index) { - var cell = this.lines.get(index); - var element = cell.element; - return element.childNodes[3]; - }; - GutterKeyboardHandler.prototype.$getAnnotation = function (index) { - var cell = this.lines.get(index); - var element = cell.element; - return element.childNodes[2]; - }; - GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) { - if (this.$isCustomWidgetVisible(index)) - return index; - if (this.$isFoldWidgetVisible(index)) - return index; - var i = 0; - while (index - i > 0 || index + i < this.lines.getLength() - 1) { - i++; - if (index - i >= 0 && this.$isCustomWidgetVisible(index - i)) - return index - i; - if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i)) - return index + i; - if (index - i >= 0 && this.$isFoldWidgetVisible(index - i)) - return index - i; - if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i)) - return index + i; - } - return null; - }; - GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) { - if (this.$isAnnotationVisible(index)) - return index; - var i = 0; - while (index - i > 0 || index + i < this.lines.getLength() - 1) { - i++; - if (index - i >= 0 && this.$isAnnotationVisible(index - i)) - return index - i; - if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i)) - return index + i; - } - return null; - }; - GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) { - if (index == null) - return; - var foldWidget = this.$getFoldWidget(index); - foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName); - foldWidget.focus(); - }; - GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) { - if (index == null) - return; - var customWidget = this.$getCustomWidget(index); - if (customWidget) { - customWidget.classList.add(this.editor.renderer.keyboardFocusClassName); - customWidget.focus(); - } - }; - GutterKeyboardHandler.prototype.$focusAnnotation = function (index) { - if (index == null) - return; - var annotation = this.$getAnnotation(index); - annotation.classList.add(this.editor.renderer.keyboardFocusClassName); - annotation.focus(); - }; - GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) { - var foldWidget = this.$getFoldWidget(index); - foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName); - foldWidget.blur(); - }; - GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) { - var customWidget = this.$getCustomWidget(index); - if (customWidget) { - customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName); - customWidget.blur(); - } - }; - GutterKeyboardHandler.prototype.$blurAnnotation = function (index) { - var annotation = this.$getAnnotation(index); - annotation.classList.remove(this.editor.renderer.keyboardFocusClassName); - annotation.blur(); - }; - GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () { - var index = this.activeRowIndex; - while (index > 0) { - index--; - if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) { - this.$blurFoldWidget(this.activeRowIndex); - this.$blurCustomWidget(this.activeRowIndex); - this.activeRowIndex = index; - if (this.$isFoldWidgetVisible(index)) { - this.$focusFoldWidget(this.activeRowIndex); - } - else { - this.$focusCustomWidget(this.activeRowIndex); - } - return; - } - } - return; - }; - GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () { - var index = this.activeRowIndex; - while (index < this.lines.getLength() - 1) { - index++; - if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) { - this.$blurFoldWidget(this.activeRowIndex); - this.$blurCustomWidget(this.activeRowIndex); - this.activeRowIndex = index; - if (this.$isFoldWidgetVisible(index)) { - this.$focusFoldWidget(this.activeRowIndex); - } - else { - this.$focusCustomWidget(this.activeRowIndex); - } - return; - } - } - return; - }; - GutterKeyboardHandler.prototype.$moveAnnotationUp = function () { - var index = this.activeRowIndex; - while (index > 0) { - index--; - if (this.$isAnnotationVisible(index)) { - this.$blurAnnotation(this.activeRowIndex); - this.activeRowIndex = index; - this.$focusAnnotation(this.activeRowIndex); - return; - } - } - return; - }; - GutterKeyboardHandler.prototype.$moveAnnotationDown = function () { - var index = this.activeRowIndex; - while (index < this.lines.getLength() - 1) { - index++; - if (this.$isAnnotationVisible(index)) { - this.$blurAnnotation(this.activeRowIndex); - this.activeRowIndex = index; - this.$focusAnnotation(this.activeRowIndex); - return; - } - } - return; - }; - GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) { - if (num1 === null) - return num2; - if (num2 === null) - return num1; - return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2; - }; - GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) { - switch (desinationLane) { - case "annotation": - if (this.activeLane === "annotation") { - break; - } - var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex); - if (annotationIndex == null) { - break; - } - this.activeLane = "annotation"; - this.$blurFoldWidget(this.activeRowIndex); - this.$blurCustomWidget(this.activeRowIndex); - this.activeRowIndex = annotationIndex; - this.$focusAnnotation(this.activeRowIndex); - break; - case "fold": - if (this.activeLane === "fold") { - break; - } - var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex); - if (foldLaneWidgetIndex === null) { - break; - } - this.activeLane = "fold"; - this.$blurAnnotation(this.activeRowIndex); - this.activeRowIndex = foldLaneWidgetIndex; - if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) { - this.$focusCustomWidget(this.activeRowIndex); - } - else { - this.$focusFoldWidget(this.activeRowIndex); - } - break; - } - return; - }; - GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) { - var cell = this.lines.get(index); - if (cell) - return cell.row; - return null; - }; - GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) { - for (var i = 0; i < this.lines.getLength(); i++) { - var cell = this.lines.get(i); - if (cell.row == row) - return i; - } - return null; - }; - return GutterKeyboardHandler; -}()); -exports.GutterKeyboardHandler = GutterKeyboardHandler; -var GutterKeyboardEvent = /** @class */ (function () { - function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) { - this.gutterKeyboardHandler = gutterKeyboardHandler; - this.domEvent = domEvent; - } - GutterKeyboardEvent.prototype.getKey = function () { - return keys.keyCodeToString(this.domEvent.keyCode); - }; - GutterKeyboardEvent.prototype.getRow = function () { - return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex); - }; - GutterKeyboardEvent.prototype.isInAnnotationLane = function () { - return this.gutterKeyboardHandler.activeLane === "annotation"; - }; - GutterKeyboardEvent.prototype.isInFoldLane = function () { - return this.gutterKeyboardHandler.activeLane === "fold"; - }; - return GutterKeyboardEvent; -}()); -exports.GutterKeyboardEvent = GutterKeyboardEvent; - -}); - -ace.define("ace/editor",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator","ace/keyboard/gutter_handler","ace/config","ace/clipboard","ace/lib/keys","ace/lib/event","ace/tooltip"], function(require, exports, module){"use strict"; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var lang = require("./lib/lang"); -var useragent = require("./lib/useragent"); -var TextInput = require("./keyboard/textinput").TextInput; -var MouseHandler = require("./mouse/mouse_handler").MouseHandler; -var FoldHandler = require("./mouse/fold_handler").FoldHandler; -var KeyBinding = require("./keyboard/keybinding").KeyBinding; -var EditSession = require("./edit_session").EditSession; -var Search = require("./search").Search; -var Range = require("./range").Range; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var CommandManager = require("./commands/command_manager").CommandManager; -var defaultCommands = require("./commands/default_commands").commands; -var config = require("./config"); -var TokenIterator = require("./token_iterator").TokenIterator; -var GutterKeyboardHandler = require("./keyboard/gutter_handler").GutterKeyboardHandler; -var nls = require("./config").nls; -var clipboard = require("./clipboard"); -var keys = require('./lib/keys'); -var event = require("./lib/event"); -var HoverTooltip = require("./tooltip").HoverTooltip; -var Editor = /** @class */ (function () { - function Editor(renderer, session, options) { - this.id = "editor" + (++Editor.$uid); this.session; - this.$toDestroy = []; - var container = renderer.getContainerElement(); - this.container = container; - this.renderer = renderer; - this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); - if (typeof document == "object") { - this.textInput = new TextInput(renderer.getTextAreaContainer(), this); - this.renderer.textarea = this.textInput.getElement(); - this.$mouseHandler = new MouseHandler(this); - new FoldHandler(this); - } - this.keyBinding = new KeyBinding(this); - this.$search = new Search().set({ - wrap: true - }); - this.$historyTracker = this.$historyTracker.bind(this); - this.commands.on("exec", this.$historyTracker); - this.$initOperationListeners(); - this._$emitInputEvent = lang.delayedCall(function () { - this._signal("input", {}); - if (this.session && !this.session.destroyed) - this.session.bgTokenizer.scheduleStart(); - }.bind(this)); - this.on("change", function (_, _self) { - _self._$emitInputEvent.schedule(31); - }); - this.setSession(session || options && options.session || new EditSession("")); - config.resetOptions(this); - if (options) - this.setOptions(options); - config._signal("editor", this); - } - Editor.prototype.$initOperationListeners = function () { - this.commands.on("exec", this.startOperation.bind(this), true); - this.commands.on("afterExec", this.endOperation.bind(this), true); - }; - Editor.prototype.startOperation = function (commandEvent) { - this.session.startOperation(commandEvent); - }; - Editor.prototype.endOperation = function (e) { - this.session.endOperation(e); - }; - Editor.prototype.onStartOperation = function (commandEvent) { - this.curOp = this.session.curOp; - this.curOp.scrollTop = this.renderer.scrollTop; - this.prevOp = this.session.prevOp; - if (!commandEvent) { - this.previousCommand = null; - } - }; - Editor.prototype.onEndOperation = function (e) { - if (this.curOp && this.session) { - if (e && e.returnValue === false) { - this.curOp = null; - return; - } - this._signal("beforeEndOperation"); - if (!this.curOp) - return; - var command = this.curOp.command; - var scrollIntoView = command && command.scrollIntoView; - if (scrollIntoView) { - switch (scrollIntoView) { - case "center-animate": - scrollIntoView = "animate"; - case "center": - this.renderer.scrollCursorIntoView(null, 0.5); - break; - case "animate": - case "cursor": - this.renderer.scrollCursorIntoView(); - break; - case "selectionPart": - var range = this.selection.getRange(); - var config = this.renderer.layerConfig; - if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { - this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); - } - break; - default: - break; - } - if (scrollIntoView == "animate") - this.renderer.animateScrolling(this.curOp.scrollTop); - } - this.$lastSel = this.session.selection.toJSON(); - this.prevOp = this.curOp; - this.curOp = null; - } - }; - Editor.prototype.$historyTracker = function (e) { - if (!this.$mergeUndoDeltas) - return; - var prev = this.prevOp; - var mergeableCommands = this.$mergeableCommands; - var shouldMerge = prev.command && (e.command.name == prev.command.name); - if (e.command.name == "insertstring") { - var text = e.args; - if (this.mergeNextCommand === undefined) - this.mergeNextCommand = true; - shouldMerge = shouldMerge - && this.mergeNextCommand // previous command allows to coalesce with - && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type - this.mergeNextCommand = true; - } - else { - shouldMerge = shouldMerge - && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable - } - if (this.$mergeUndoDeltas != "always" - && Date.now() - this.sequenceStartTime > 2000) { - shouldMerge = false; // the sequence is too long - } - if (shouldMerge) - this.session.mergeUndoDeltas = true; - else if (mergeableCommands.indexOf(e.command.name) !== -1) - this.sequenceStartTime = Date.now(); - }; - Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) { - if (keyboardHandler && typeof keyboardHandler === "string" && keyboardHandler != "ace") { - this.$keybindingId = keyboardHandler; - var _self = this; - config.loadModule(["keybinding", keyboardHandler], function (module) { - if (_self.$keybindingId == keyboardHandler) - _self.keyBinding.setKeyboardHandler(module && module.handler); - cb && cb(); - }); - } - else { - this.$keybindingId = null; - this.keyBinding.setKeyboardHandler(keyboardHandler); - cb && cb(); - } - }; - Editor.prototype.getKeyboardHandler = function () { - return this.keyBinding.getKeyboardHandler(); - }; - Editor.prototype.setSession = function (session) { - if (this.session == session) - return; - if (this.curOp) - this.endOperation(); - this.curOp = {}; - var oldSession = this.session; - if (oldSession) { - this.session.off("change", this.$onDocumentChange); - this.session.off("changeMode", this.$onChangeMode); - this.session.off("tokenizerUpdate", this.$onTokenizerUpdate); - this.session.off("changeTabSize", this.$onChangeTabSize); - this.session.off("changeWrapLimit", this.$onChangeWrapLimit); - this.session.off("changeWrapMode", this.$onChangeWrapMode); - this.session.off("changeFold", this.$onChangeFold); - this.session.off("changeFrontMarker", this.$onChangeFrontMarker); - this.session.off("changeBackMarker", this.$onChangeBackMarker); - this.session.off("changeBreakpoint", this.$onChangeBreakpoint); - this.session.off("changeAnnotation", this.$onChangeAnnotation); - this.session.off("changeOverwrite", this.$onCursorChange); - this.session.off("changeScrollTop", this.$onScrollTopChange); - this.session.off("changeScrollLeft", this.$onScrollLeftChange); - this.session.off("startOperation", this.$onStartOperation); - this.session.off("endOperation", this.$onEndOperation); - var selection = this.session.getSelection(); - selection.off("changeCursor", this.$onCursorChange); - selection.off("changeSelection", this.$onSelectionChange); - } - this.session = session; - if (session) { - this.$onDocumentChange = this.onDocumentChange.bind(this); - session.on("change", this.$onDocumentChange); - this.renderer.setSession(session); - this.$onChangeMode = this.onChangeMode.bind(this); - session.on("changeMode", this.$onChangeMode); - this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); - session.on("tokenizerUpdate", this.$onTokenizerUpdate); - this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); - session.on("changeTabSize", this.$onChangeTabSize); - this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); - session.on("changeWrapLimit", this.$onChangeWrapLimit); - this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); - session.on("changeWrapMode", this.$onChangeWrapMode); - this.$onChangeFold = this.onChangeFold.bind(this); - session.on("changeFold", this.$onChangeFold); - this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); - this.session.on("changeFrontMarker", this.$onChangeFrontMarker); - this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); - this.session.on("changeBackMarker", this.$onChangeBackMarker); - this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); - this.session.on("changeBreakpoint", this.$onChangeBreakpoint); - this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); - this.session.on("changeAnnotation", this.$onChangeAnnotation); - this.$onCursorChange = this.onCursorChange.bind(this); - this.session.on("changeOverwrite", this.$onCursorChange); - this.$onScrollTopChange = this.onScrollTopChange.bind(this); - this.session.on("changeScrollTop", this.$onScrollTopChange); - this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); - this.session.on("changeScrollLeft", this.$onScrollLeftChange); - this.selection = session.getSelection(); - this.selection.on("changeCursor", this.$onCursorChange); - this.$onSelectionChange = this.onSelectionChange.bind(this); - this.selection.on("changeSelection", this.$onSelectionChange); - this.$onStartOperation = this.onStartOperation.bind(this); - this.session.on("startOperation", this.$onStartOperation); - this.$onEndOperation = this.onEndOperation.bind(this); - this.session.on("endOperation", this.$onEndOperation); - this.onChangeMode(); - this.onCursorChange(); - this.onScrollTopChange(); - this.onScrollLeftChange(); - this.onSelectionChange(); - this.onChangeFrontMarker(); - this.onChangeBackMarker(); - this.onChangeBreakpoint(); - this.onChangeAnnotation(); - this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); - this.renderer.updateFull(); - } - else { - this.selection = null; - this.renderer.setSession(session); - } - this._signal("changeSession", { - session: session, - oldSession: oldSession - }); - this.curOp = null; - oldSession && oldSession._signal("changeEditor", { oldEditor: this }); - if (oldSession) - oldSession.$editor = null; - session && session._signal("changeEditor", { editor: this }); - if (session) - session.$editor = this; - if (session && !session.destroyed) - session.bgTokenizer.scheduleStart(); - }; - Editor.prototype.getSession = function () { - return this.session; - }; - Editor.prototype.setValue = function (val, cursorPos) { - this.session.doc.setValue(val); - if (!cursorPos) - this.selectAll(); - else if (cursorPos == 1) - this.navigateFileEnd(); - else if (cursorPos == -1) - this.navigateFileStart(); - return val; - }; - Editor.prototype.getValue = function () { - return this.session.getValue(); - }; - Editor.prototype.getSelection = function () { - return this.selection; - }; - Editor.prototype.resize = function (force) { - this.renderer.onResize(force); - }; - Editor.prototype.setTheme = function (theme, cb) { - this.renderer.setTheme(theme, cb); - }; - Editor.prototype.getTheme = function () { - return this.renderer.getTheme(); - }; - Editor.prototype.setStyle = function (style, incluude) { - this.renderer.setStyle(style, incluude); - }; - Editor.prototype.unsetStyle = function (style) { - this.renderer.unsetStyle(style); - }; - Editor.prototype.getFontSize = function () { - return this.getOption("fontSize") || - dom.computedStyle(this.container).fontSize; - }; - Editor.prototype.setFontSize = function (size) { - this.setOption("fontSize", size); - }; - Editor.prototype.$highlightBrackets = function () { - if (this.$highlightPending) { - return; - } - var self = this; - this.$highlightPending = true; - setTimeout(function () { - self.$highlightPending = false; - var session = self.session; - if (!session || session.destroyed) - return; - if (session.$bracketHighlight) { - session.$bracketHighlight.markerIds.forEach(function (id) { - session.removeMarker(id); - }); - session.$bracketHighlight = null; - } - var pos = self.getCursorPosition(); - var handler = self.getKeyboardHandler(); - var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self); - var ranges = session.getMatchingBracketRanges(pos, isBackwards); - if (!ranges) { - var iterator = new TokenIterator(session, pos.row, pos.column); - var token = iterator.getCurrentToken(); - if (token && /\b(?:tag-open|tag-name)/.test(token.type)) { - var tagNamesRanges = session.getMatchingTags(pos); - if (tagNamesRanges) { - ranges = [ - tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName, - tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName - ]; - } - } - } - if (!ranges && session.$mode.getMatching) - ranges = session.$mode.getMatching(self.session); - if (!ranges) { - if (self.getHighlightIndentGuides()) - self.renderer.$textLayer.$highlightIndentGuide(); - return; - } - var markerType = "ace_bracket"; - if (!Array.isArray(ranges)) { - ranges = [ranges]; - } - else if (ranges.length == 1) { - markerType = "ace_error_bracket"; - } - if (ranges.length == 2) { - if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0) - ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)]; - else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0) - ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)]; - } - session.$bracketHighlight = { - ranges: ranges, - markerIds: ranges.map(function (range) { - return session.addMarker(range, markerType, "text"); - }) - }; - if (self.getHighlightIndentGuides()) - self.renderer.$textLayer.$highlightIndentGuide(); - }, 50); - }; - Editor.prototype.focus = function () { - this.textInput.focus(); - }; - Editor.prototype.isFocused = function () { - return this.textInput.isFocused(); - }; - Editor.prototype.blur = function () { - this.textInput.blur(); - }; - Editor.prototype.onFocus = function (e) { - if (this.$isFocused) - return; - this.$isFocused = true; - this.renderer.showCursor(); - this.renderer.visualizeFocus(); - this._emit("focus", e); - }; - Editor.prototype.onBlur = function (e) { - if (!this.$isFocused) - return; - this.$isFocused = false; - this.renderer.hideCursor(); - this.renderer.visualizeBlur(); - this._emit("blur", e); - }; - Editor.prototype.$cursorChange = function () { - this.renderer.updateCursor(); - this.$highlightBrackets(); - this.$updateHighlightActiveLine(); - }; - Editor.prototype.onDocumentChange = function (delta) { - var wrap = this.session.$useWrapMode; - var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity); - this.renderer.updateLines(delta.start.row, lastRow, wrap); - this._signal("change", delta); - this.$cursorChange(); - }; - Editor.prototype.onTokenizerUpdate = function (e) { - var rows = e.data; - this.renderer.updateLines(rows.first, rows.last); - }; - Editor.prototype.onScrollTopChange = function () { - this.renderer.scrollToY(this.session.getScrollTop()); - }; - Editor.prototype.onScrollLeftChange = function () { - this.renderer.scrollToX(this.session.getScrollLeft()); - }; - Editor.prototype.onCursorChange = function () { - this.$cursorChange(); - this._signal("changeSelection"); - }; - Editor.prototype.$updateHighlightActiveLine = function () { - var session = this.getSession(); - var highlight; - if (this.$highlightActiveLine) { - if (this.$selectionStyle != "line" || !this.selection.isMultiLine()) - highlight = this.getCursorPosition(); - if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty()) - highlight = false; - if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1)) - highlight = false; - } - if (session.$highlightLineMarker && !highlight) { - session.removeMarker(session.$highlightLineMarker.id); - session.$highlightLineMarker = null; - } - else if (!session.$highlightLineMarker && highlight) { - var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); - range.id = session.addMarker(range, "ace_active-line", "screenLine"); - session.$highlightLineMarker = range; - } - else if (highlight) { - session.$highlightLineMarker.start.row = highlight.row; - session.$highlightLineMarker.end.row = highlight.row; - session.$highlightLineMarker.start.column = highlight.column; - session._signal("changeBackMarker"); - } - }; - Editor.prototype.onSelectionChange = function (e) { - var session = this.session; - if (session.$selectionMarker) { - session.removeMarker(session.$selectionMarker); - } - session.$selectionMarker = null; - if (!this.selection.isEmpty()) { - var range = this.selection.getRange(); - var style = this.getSelectionStyle(); - session.$selectionMarker = session.addMarker(range, "ace_selection", style); - } - else { - this.$updateHighlightActiveLine(); - } - var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp(); - this.session.highlight(re); - this._signal("changeSelection"); - }; - Editor.prototype.$getSelectionHighLightRegexp = function () { - var session = this.session; - var selection = this.getSelectionRange(); - if (selection.isEmpty() || selection.isMultiLine()) - return; - var startColumn = selection.start.column; - var endColumn = selection.end.column; - var line = session.getLine(selection.start.row); - var needle = line.substring(startColumn, endColumn); - if (needle.length > 5000 || !/[\w\d]/.test(needle)) - return; - var re = this.$search.$assembleRegExp({ - wholeWord: true, - caseSensitive: true, - needle: needle - }); - var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1); - if (!re.test(wordWithBoundary)) - return; - return re; - }; - Editor.prototype.onChangeFrontMarker = function () { - this.renderer.updateFrontMarkers(); - }; - Editor.prototype.onChangeBackMarker = function () { - this.renderer.updateBackMarkers(); - }; - Editor.prototype.onChangeBreakpoint = function () { - this.renderer.updateBreakpoints(); - }; - Editor.prototype.onChangeAnnotation = function () { - this.renderer.setAnnotations(this.session.getAnnotations()); - }; - Editor.prototype.onChangeMode = function (e) { - this.renderer.updateText(); - this._emit("changeMode", e); - }; - Editor.prototype.onChangeWrapLimit = function () { - this.renderer.updateFull(); - }; - Editor.prototype.onChangeWrapMode = function () { - this.renderer.onResize(true); - }; - Editor.prototype.onChangeFold = function () { - this.$updateHighlightActiveLine(); - this.renderer.updateFull(); - }; - Editor.prototype.getSelectedText = function () { - return this.session.getTextRange(this.getSelectionRange()); - }; - Editor.prototype.getCopyText = function () { - var text = this.getSelectedText(); - var nl = this.session.doc.getNewLineCharacter(); - var copyLine = false; - if (!text && this.$copyWithEmptySelection) { - copyLine = true; - var ranges = this.selection.getAllRanges(); - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (i && ranges[i - 1].start.row == range.start.row) - continue; - text += this.session.getLine(range.start.row) + nl; - } - } - var e = { text: text }; - this._signal("copy", e); - clipboard.lineMode = copyLine ? e.text : false; - return e.text; - }; - Editor.prototype.onCopy = function () { - this.commands.exec("copy", this); - }; - Editor.prototype.onCut = function () { - this.commands.exec("cut", this); - }; - Editor.prototype.onPaste = function (text, event) { - var e = { text: text, event: event }; - this.commands.exec("paste", this, e); - }; - Editor.prototype.$handlePaste = function (e) { - if (typeof e == "string") - e = { text: e }; - this._signal("paste", e); - var text = e.text; - var lineMode = text === clipboard.lineMode; - var session = this.session; - if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { - if (lineMode) - session.insert({ row: this.selection.lead.row, column: 0 }, text); - else - this.insert(text); - } - else if (lineMode) { - this.selection.rangeList.ranges.forEach(function (range) { - session.insert({ row: range.start.row, column: 0 }, text); - }); - } - else { - var lines = text.split(/\r\n|\r|\n/); - var ranges = this.selection.rangeList.ranges; - var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]); - if (lines.length != ranges.length || isFullLine) - return this.commands.exec("insertstring", this, text); - for (var i = ranges.length; i--;) { - var range = ranges[i]; - if (!range.isEmpty()) - session.remove(range); - session.insert(range.start, lines[i]); - } - } - }; - Editor.prototype.execCommand = function (command, args) { - return this.commands.exec(command, this, args); - }; - Editor.prototype.insert = function (text, pasted) { - var session = this.session; - var mode = session.getMode(); - var cursor = this.getCursorPosition(); - if (this.getBehavioursEnabled() && !pasted) { - var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); - if (transform) { - if (text !== transform.text) { - if (!this.inVirtualSelectionMode) { - this.session.mergeUndoDeltas = false; - this.mergeNextCommand = false; - } - } - text = transform.text; - } - } - if (text == "\t") - text = this.session.getTabString(); - if (!this.selection.isEmpty()) { - var range = this.getSelectionRange(); - cursor = this.session.remove(range); - this.clearSelection(); - } - else if (this.session.getOverwrite() && text.indexOf("\n") == -1) { - var range = Range.fromPoints(cursor, cursor); - range.end.column += text.length; - this.session.remove(range); - } - if (text == "\n" || text == "\r\n") { - var line = session.getLine(cursor.row); - if (cursor.column > line.search(/\S|$/)) { - var d = line.substr(cursor.column).search(/\S|$/); - session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); - } - } - this.clearSelection(); - var start = cursor.column; - var lineState = session.getState(cursor.row); - var line = session.getLine(cursor.row); - var shouldOutdent = mode.checkOutdent(lineState, line, text); - session.insert(cursor, text); - if (transform && transform.selection) { - if (transform.selection.length == 2) { // Transform relative to the current column - this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1])); - } - else { // Transform relative to the current row. - this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3])); - } - } - if (this.$enableAutoIndent) { - if (session.getDocument().isNewLine(text)) { - var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); - session.insert({ row: cursor.row + 1, column: 0 }, lineIndent); - } - if (shouldOutdent) - mode.autoOutdent(lineState, session, cursor.row); - } - }; - Editor.prototype.autoIndent = function () { - var session = this.session; - var mode = session.getMode(); - var ranges = this.selection.isEmpty() - ? [new Range(0, 0, session.doc.getLength() - 1, 0)] - : this.selection.getAllRanges(); - var prevLineState = ""; - var prevLine = ""; - var lineIndent = ""; - var tab = session.getTabString(); - for (var i = 0; i < ranges.length; i++) { - var startRow = ranges[i].start.row; - var endRow = ranges[i].end.row; - for (var row = startRow; row <= endRow; row++) { - if (row > 0) { - prevLineState = session.getState(row - 1); - prevLine = session.getLine(row - 1); - lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab); - } - var line = session.getLine(row); - var currIndent = mode.$getIndent(line); - if (lineIndent !== currIndent) { - if (currIndent.length > 0) { - var range = new Range(row, 0, row, currIndent.length); - session.remove(range); - } - if (lineIndent.length > 0) { - session.insert({ row: row, column: 0 }, lineIndent); - } - } - mode.autoOutdent(prevLineState, session, row); - } - } - }; - Editor.prototype.onTextInput = function (text, composition) { - if (!composition) - return this.keyBinding.onTextInput(text); - this.startOperation({ command: { name: "insertstring" } }); - var applyComposition = this.applyComposition.bind(this, text, composition); - if (this.selection.rangeCount) - this.forEachSelection(applyComposition); - else - applyComposition(); - this.endOperation(); - }; - Editor.prototype.applyComposition = function (text, composition) { - if (composition.extendLeft || composition.extendRight) { - var r = this.selection.getRange(); - r.start.column -= composition.extendLeft; - r.end.column += composition.extendRight; - if (r.start.column < 0) { - r.start.row--; - r.start.column += this.session.getLine(r.start.row).length + 1; - } - this.selection.setRange(r); - if (!text && !r.isEmpty()) - this.remove(); - } - if (text || !this.selection.isEmpty()) - this.insert(text, true); - if (composition.restoreStart || composition.restoreEnd) { - var r = this.selection.getRange(); - r.start.column -= composition.restoreStart; - r.end.column -= composition.restoreEnd; - this.selection.setRange(r); - } - }; - Editor.prototype.onCommandKey = function (e, hashId, keyCode) { - return this.keyBinding.onCommandKey(e, hashId, keyCode); - }; - Editor.prototype.setOverwrite = function (overwrite) { - this.session.setOverwrite(overwrite); - }; - Editor.prototype.getOverwrite = function () { - return this.session.getOverwrite(); - }; - Editor.prototype.toggleOverwrite = function () { - this.session.toggleOverwrite(); - }; - Editor.prototype.setScrollSpeed = function (speed) { - this.setOption("scrollSpeed", speed); - }; - Editor.prototype.getScrollSpeed = function () { - return this.getOption("scrollSpeed"); - }; - Editor.prototype.setDragDelay = function (dragDelay) { - this.setOption("dragDelay", dragDelay); - }; - Editor.prototype.getDragDelay = function () { - return this.getOption("dragDelay"); - }; - Editor.prototype.setSelectionStyle = function (val) { - this.setOption("selectionStyle", val); - }; - Editor.prototype.getSelectionStyle = function () { - return this.getOption("selectionStyle"); - }; - Editor.prototype.setHighlightActiveLine = function (shouldHighlight) { - this.setOption("highlightActiveLine", shouldHighlight); - }; - Editor.prototype.getHighlightActiveLine = function () { - return this.getOption("highlightActiveLine"); - }; - Editor.prototype.setHighlightGutterLine = function (shouldHighlight) { - this.setOption("highlightGutterLine", shouldHighlight); - }; - Editor.prototype.getHighlightGutterLine = function () { - return this.getOption("highlightGutterLine"); - }; - Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) { - this.setOption("highlightSelectedWord", shouldHighlight); - }; - Editor.prototype.getHighlightSelectedWord = function () { - return this.$highlightSelectedWord; - }; - Editor.prototype.setAnimatedScroll = function (shouldAnimate) { - this.renderer.setAnimatedScroll(shouldAnimate); - }; - Editor.prototype.getAnimatedScroll = function () { - return this.renderer.getAnimatedScroll(); - }; - Editor.prototype.setShowInvisibles = function (showInvisibles) { - this.renderer.setShowInvisibles(showInvisibles); - }; - Editor.prototype.getShowInvisibles = function () { - return this.renderer.getShowInvisibles(); - }; - Editor.prototype.setDisplayIndentGuides = function (display) { - this.renderer.setDisplayIndentGuides(display); - }; - Editor.prototype.getDisplayIndentGuides = function () { - return this.renderer.getDisplayIndentGuides(); - }; - Editor.prototype.setHighlightIndentGuides = function (highlight) { - this.renderer.setHighlightIndentGuides(highlight); - }; - Editor.prototype.getHighlightIndentGuides = function () { - return this.renderer.getHighlightIndentGuides(); - }; - Editor.prototype.setShowPrintMargin = function (showPrintMargin) { - this.renderer.setShowPrintMargin(showPrintMargin); - }; - Editor.prototype.getShowPrintMargin = function () { - return this.renderer.getShowPrintMargin(); - }; - Editor.prototype.setPrintMarginColumn = function (showPrintMargin) { - this.renderer.setPrintMarginColumn(showPrintMargin); - }; - Editor.prototype.getPrintMarginColumn = function () { - return this.renderer.getPrintMarginColumn(); - }; - Editor.prototype.setReadOnly = function (readOnly) { - this.setOption("readOnly", readOnly); - }; - Editor.prototype.getReadOnly = function () { - return this.getOption("readOnly"); - }; - Editor.prototype.setBehavioursEnabled = function (enabled) { - this.setOption("behavioursEnabled", enabled); - }; - Editor.prototype.getBehavioursEnabled = function () { - return this.getOption("behavioursEnabled"); - }; - Editor.prototype.setWrapBehavioursEnabled = function (enabled) { - this.setOption("wrapBehavioursEnabled", enabled); - }; - Editor.prototype.getWrapBehavioursEnabled = function () { - return this.getOption("wrapBehavioursEnabled"); - }; - Editor.prototype.setShowFoldWidgets = function (show) { - this.setOption("showFoldWidgets", show); - }; - Editor.prototype.getShowFoldWidgets = function () { - return this.getOption("showFoldWidgets"); - }; - Editor.prototype.setFadeFoldWidgets = function (fade) { - this.setOption("fadeFoldWidgets", fade); - }; - Editor.prototype.getFadeFoldWidgets = function () { - return this.getOption("fadeFoldWidgets"); - }; - Editor.prototype.remove = function (dir) { - if (this.selection.isEmpty()) { - if (dir == "left") - this.selection.selectLeft(); - else - this.selection.selectRight(); - } - var range = this.getSelectionRange(); - if (this.getBehavioursEnabled()) { - var session = this.session; - var state = session.getState(range.start.row); - var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); - if (range.end.column === 0) { - var text = session.getTextRange(range); - if (text[text.length - 1] == "\n") { - var line = session.getLine(range.end.row); - if (/^\s+$/.test(line)) { - range.end.column = line.length; - } - } - } - if (new_range) - range = new_range; - } - this.session.remove(range); - this.clearSelection(); - }; - Editor.prototype.removeWordRight = function () { - if (this.selection.isEmpty()) - this.selection.selectWordRight(); - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - }; - Editor.prototype.removeWordLeft = function () { - if (this.selection.isEmpty()) - this.selection.selectWordLeft(); - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - }; - Editor.prototype.removeToLineStart = function () { - if (this.selection.isEmpty()) - this.selection.selectLineStart(); - if (this.selection.isEmpty()) - this.selection.selectLeft(); - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - }; - Editor.prototype.removeToLineEnd = function () { - if (this.selection.isEmpty()) - this.selection.selectLineEnd(); - var range = this.getSelectionRange(); - if (range.start.column == range.end.column && range.start.row == range.end.row) { - range.end.column = 0; - range.end.row++; - } - this.session.remove(range); - this.clearSelection(); - }; - Editor.prototype.splitLine = function () { - if (!this.selection.isEmpty()) { - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - } - var cursor = this.getCursorPosition(); - this.insert("\n"); - this.moveCursorToPosition(cursor); - }; - Editor.prototype.setGhostText = function (text, position) { - this.renderer.setGhostText(text, position); - }; - Editor.prototype.removeGhostText = function () { - this.renderer.removeGhostText(); - }; - Editor.prototype.transposeLetters = function () { - if (!this.selection.isEmpty()) { - return; - } - var cursor = this.getCursorPosition(); - var column = cursor.column; - if (column === 0) - return; - var line = this.session.getLine(cursor.row); - var swap, range; - if (column < line.length) { - swap = line.charAt(column) + line.charAt(column - 1); - range = new Range(cursor.row, column - 1, cursor.row, column + 1); - } - else { - swap = line.charAt(column - 1) + line.charAt(column - 2); - range = new Range(cursor.row, column - 2, cursor.row, column); - } - this.session.replace(range, swap); - this.session.selection.moveToPosition(range.end); - }; - Editor.prototype.toLowerCase = function () { - var originalRange = this.getSelectionRange(); - if (this.selection.isEmpty()) { - this.selection.selectWord(); - } - var range = this.getSelectionRange(); - var text = this.session.getTextRange(range); - this.session.replace(range, text.toLowerCase()); - this.selection.setSelectionRange(originalRange); - }; - Editor.prototype.toUpperCase = function () { - var originalRange = this.getSelectionRange(); - if (this.selection.isEmpty()) { - this.selection.selectWord(); - } - var range = this.getSelectionRange(); - var text = this.session.getTextRange(range); - this.session.replace(range, text.toUpperCase()); - this.selection.setSelectionRange(originalRange); - }; - Editor.prototype.indent = function () { - var session = this.session; - var range = this.getSelectionRange(); - if (range.start.row < range.end.row) { - var rows = this.$getSelectedRows(); - session.indentRows(rows.first, rows.last, "\t"); - return; - } - else if (range.start.column < range.end.column) { - var text = session.getTextRange(range); - if (!/^\s+$/.test(text)) { - var rows = this.$getSelectedRows(); - session.indentRows(rows.first, rows.last, "\t"); - return; - } - } - var line = session.getLine(range.start.row); - var position = range.start; - var size = session.getTabSize(); - var column = session.documentToScreenColumn(position.row, position.column); - if (this.session.getUseSoftTabs()) { - var count = (size - column % size); - var indentString = lang.stringRepeat(" ", count); - } - else { - var count = column % size; - while (line[range.start.column - 1] == " " && count) { - range.start.column--; - count--; - } - this.selection.setSelectionRange(range); - indentString = "\t"; - } - return this.insert(indentString); - }; - Editor.prototype.blockIndent = function () { - var rows = this.$getSelectedRows(); - this.session.indentRows(rows.first, rows.last, "\t"); - }; - Editor.prototype.blockOutdent = function () { - var selection = this.session.getSelection(); - this.session.outdentRows(selection.getRange()); - }; - Editor.prototype.sortLines = function () { - var rows = this.$getSelectedRows(); - var session = this.session; - var lines = []; - for (var i = rows.first; i <= rows.last; i++) - lines.push(session.getLine(i)); - lines.sort(function (a, b) { - if (a.toLowerCase() < b.toLowerCase()) - return -1; - if (a.toLowerCase() > b.toLowerCase()) - return 1; - return 0; - }); - var deleteRange = new Range(0, 0, 0, 0); - for (var i = rows.first; i <= rows.last; i++) { - var line = session.getLine(i); - deleteRange.start.row = i; - deleteRange.end.row = i; - deleteRange.end.column = line.length; - session.replace(deleteRange, lines[i - rows.first]); - } - }; - Editor.prototype.toggleCommentLines = function () { - var state = this.session.getState(this.getCursorPosition().row); - var rows = this.$getSelectedRows(); - this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); - }; - Editor.prototype.toggleBlockComment = function () { - var cursor = this.getCursorPosition(); - var state = this.session.getState(cursor.row); - var range = this.getSelectionRange(); - this.session.getMode().toggleBlockComment(state, this.session, range, cursor); - }; - Editor.prototype.getNumberAt = function (row, column) { - var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g; - _numberRx.lastIndex = 0; - var s = this.session.getLine(row); - while (_numberRx.lastIndex < column) { - var m = _numberRx.exec(s); - if (m.index <= column && m.index + m[0].length >= column) { - var number = { - value: m[0], - start: m.index, - end: m.index + m[0].length - }; - return number; - } - } - return null; - }; - Editor.prototype.modifyNumber = function (amount) { - var row = this.selection.getCursor().row; - var column = this.selection.getCursor().column; - var charRange = new Range(row, column - 1, row, column); - var c = this.session.getTextRange(charRange); - if (!isNaN(parseFloat(c)) && isFinite(c)) { - var nr = this.getNumberAt(row, column); - if (nr) { - var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; - var decimals = nr.start + nr.value.length - fp; - var t = parseFloat(nr.value); - t *= Math.pow(10, decimals); - if (fp !== nr.end && column < fp) { - amount *= Math.pow(10, nr.end - column - 1); - } - else { - amount *= Math.pow(10, nr.end - column); - } - t += amount; - t /= Math.pow(10, decimals); - var nnr = t.toFixed(decimals); - var replaceRange = new Range(row, nr.start, row, nr.end); - this.session.replace(replaceRange, nnr); - this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length)); - } - } - else { - this.toggleWord(); - } - }; - Editor.prototype.toggleWord = function () { - var row = this.selection.getCursor().row; - var column = this.selection.getCursor().column; - this.selection.selectWord(); - var currentState = this.getSelectedText(); - var currWordStart = this.selection.getWordRange().start.column; - var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\s/); - var delta = column - currWordStart - 1; - if (delta < 0) - delta = 0; - var curLength = 0, itLength = 0; - var that = this; - if (currentState.match(/[A-Za-z0-9_]+/)) { - wordParts.forEach(function (item, i) { - itLength = curLength + item.length; - if (delta >= curLength && delta <= itLength) { - currentState = item; - that.selection.clearSelection(); - that.moveCursorTo(row, curLength + currWordStart); - that.selection.selectTo(row, itLength + currWordStart); - } - curLength = itLength; - }); - } - var wordPairs = this.$toggleWordPairs; - var reg; - for (var i = 0; i < wordPairs.length; i++) { - var item = wordPairs[i]; - for (var j = 0; j <= 1; j++) { - var negate = +!j; - var firstCondition = currentState.match(new RegExp('^\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\s?$', 'i')); - if (firstCondition) { - var secondCondition = currentState.match(new RegExp('([_]|^|\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\s)', 'g')); - if (secondCondition) { - reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) { - var res = item[negate]; - if (result.toUpperCase() == result) { - res = res.toUpperCase(); - } - else if (result.charAt(0).toUpperCase() == result.charAt(0)) { - res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1); - } - return res; - }); - this.insert(reg); - reg = ""; - } - } - } - } - }; - Editor.prototype.findLinkAt = function (row, column) { - var e_1, _a; - var line = this.session.getLine(row); - var wordParts = line.split(/((?:https?|ftp):\/\/[\S]+)/); - var columnPosition = column; - if (columnPosition < 0) - columnPosition = 0; - var previousPosition = 0, currentPosition = 0, match; - try { - for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) { - var item = wordParts_1_1.value; - currentPosition = previousPosition + item.length; - if (columnPosition >= previousPosition && columnPosition <= currentPosition) { - if (item.match(/((?:https?|ftp):\/\/[\S]+)/)) { - match = item.replace(/[\s:.,'";}\]]+$/, ""); - break; - } - } - previousPosition = currentPosition; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1); - } - finally { if (e_1) throw e_1.error; } - } - return match; - }; - Editor.prototype.openLink = function () { - var cursor = this.selection.getCursor(); - var url = this.findLinkAt(cursor.row, cursor.column); - if (url) - window.open(url, '_blank'); - return url != null; - }; - Editor.prototype.removeLines = function () { - var rows = this.$getSelectedRows(); - this.session.removeFullLines(rows.first, rows.last); - this.clearSelection(); - }; - Editor.prototype.duplicateSelection = function () { - var sel = this.selection; - var doc = this.session; - var range = sel.getRange(); - var reverse = sel.isBackwards(); - if (range.isEmpty()) { - var row = range.start.row; - doc.duplicateLines(row, row); - } - else { - var point = reverse ? range.start : range.end; - var endPoint = doc.insert(point, doc.getTextRange(range)); - range.start = point; - range.end = endPoint; - sel.setSelectionRange(range, reverse); - } - }; - Editor.prototype.moveLinesDown = function () { - this.$moveLines(1, false); - }; - Editor.prototype.moveLinesUp = function () { - this.$moveLines(-1, false); - }; - Editor.prototype.moveText = function (range, toPosition, copy) { - return this.session.moveText(range, toPosition, copy); - }; - Editor.prototype.copyLinesUp = function () { - this.$moveLines(-1, true); - }; - Editor.prototype.copyLinesDown = function () { - this.$moveLines(1, true); - }; - Editor.prototype.$moveLines = function (dir, copy) { - var rows, moved; - var selection = this.selection; - if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { - var range = selection.toOrientedRange(); - rows = this.$getSelectedRows(range); - moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir); - if (copy && dir == -1) - moved = 0; - range.moveBy(moved, 0); - selection.fromOrientedRange(range); - } - else { - var ranges = selection.rangeList.ranges; - selection.rangeList.detach(this.session); - this.inVirtualSelectionMode = true; - var diff = 0; - var totalDiff = 0; - var l = ranges.length; - for (var i = 0; i < l; i++) { - var rangeIndex = i; - ranges[i].moveBy(diff, 0); - rows = this.$getSelectedRows(ranges[i]); - var first = rows.first; - var last = rows.last; - while (++i < l) { - if (totalDiff) - ranges[i].moveBy(totalDiff, 0); - var subRows = this.$getSelectedRows(ranges[i]); - if (copy && subRows.first != last) - break; - else if (!copy && subRows.first > last + 1) - break; - last = subRows.last; - } - i--; - diff = this.session.$moveLines(first, last, copy ? 0 : dir); - if (copy && dir == -1) - rangeIndex = i + 1; - while (rangeIndex <= i) { - ranges[rangeIndex].moveBy(diff, 0); - rangeIndex++; - } - if (!copy) - diff = 0; - totalDiff += diff; - } - selection.fromOrientedRange(selection.ranges[0]); - selection.rangeList.attach(this.session); - this.inVirtualSelectionMode = false; - } - }; - Editor.prototype.$getSelectedRows = function (range) { - range = (range || this.getSelectionRange()).collapseRows(); - return { - first: this.session.getRowFoldStart(range.start.row), - last: this.session.getRowFoldEnd(range.end.row) - }; - }; - Editor.prototype.onCompositionStart = function (compositionState) { - this.renderer.showComposition(compositionState); - }; - Editor.prototype.onCompositionUpdate = function (text) { - this.renderer.setCompositionText(text); - }; - Editor.prototype.onCompositionEnd = function () { - this.renderer.hideComposition(); - }; - Editor.prototype.getFirstVisibleRow = function () { - return this.renderer.getFirstVisibleRow(); - }; - Editor.prototype.getLastVisibleRow = function () { - return this.renderer.getLastVisibleRow(); - }; - Editor.prototype.isRowVisible = function (row) { - return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); - }; - Editor.prototype.isRowFullyVisible = function (row) { - return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); - }; - Editor.prototype.$getVisibleRowCount = function () { - return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; - }; - Editor.prototype.$moveByPage = function (dir, select) { - var renderer = this.renderer; - var config = this.renderer.layerConfig; - var rows = dir * Math.floor(config.height / config.lineHeight); - if (select === true) { - this.selection.$moveSelection(function () { - this.moveCursorBy(rows, 0); - }); - } - else if (select === false) { - this.selection.moveCursorBy(rows, 0); - this.selection.clearSelection(); - } - var scrollTop = renderer.scrollTop; - renderer.scrollBy(0, rows * config.lineHeight); - if (select != null) - renderer.scrollCursorIntoView(null, 0.5); - renderer.animateScrolling(scrollTop); - }; - Editor.prototype.selectPageDown = function () { - this.$moveByPage(1, true); - }; - Editor.prototype.selectPageUp = function () { - this.$moveByPage(-1, true); - }; - Editor.prototype.gotoPageDown = function () { - this.$moveByPage(1, false); - }; - Editor.prototype.gotoPageUp = function () { - this.$moveByPage(-1, false); - }; - Editor.prototype.scrollPageDown = function () { - this.$moveByPage(1); - }; - Editor.prototype.scrollPageUp = function () { - this.$moveByPage(-1); - }; - Editor.prototype.scrollToRow = function (row) { - this.renderer.scrollToRow(row); - }; - Editor.prototype.scrollToLine = function (line, center, animate, callback) { - this.renderer.scrollToLine(line, center, animate, callback); - }; - Editor.prototype.centerSelection = function () { - var range = this.getSelectionRange(); - var pos = { - row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), - column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) - }; - this.renderer.alignCursor(pos, 0.5); - }; - Editor.prototype.getCursorPosition = function () { - return this.selection.getCursor(); - }; - Editor.prototype.getCursorPositionScreen = function () { - return this.session.documentToScreenPosition(this.getCursorPosition()); - }; - Editor.prototype.getSelectionRange = function () { - return this.selection.getRange(); - }; - Editor.prototype.selectAll = function () { - this.selection.selectAll(); - }; - Editor.prototype.clearSelection = function () { - this.selection.clearSelection(); - }; - Editor.prototype.moveCursorTo = function (row, column) { - this.selection.moveCursorTo(row, column); - }; - Editor.prototype.moveCursorToPosition = function (pos) { - this.selection.moveCursorToPosition(pos); - }; - Editor.prototype.jumpToMatching = function (select, expand) { - var cursor = this.getCursorPosition(); - var iterator = new TokenIterator(this.session, cursor.row, cursor.column); - var prevToken = iterator.getCurrentToken(); - var tokenCount = 0; - if (prevToken && prevToken.type.indexOf('tag-name') !== -1) { - prevToken = iterator.stepBackward(); - } - var token = prevToken || iterator.stepForward(); - if (!token) - return; - var matchType; - var found = false; - var depth = {}; - var i = cursor.column - token.start; - var bracketType; - var brackets = { - ")": "(", - "(": "(", - "]": "[", - "[": "[", - "{": "{", - "}": "{" - }; - do { - if (token.value.match(/[{}()\[\]]/g)) { - for (; i < token.value.length && !found; i++) { - if (!brackets[token.value[i]]) { - continue; - } - bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen"); - if (isNaN(depth[bracketType])) { - depth[bracketType] = 0; - } - switch (token.value[i]) { - case '(': - case '[': - case '{': - depth[bracketType]++; - break; - case ')': - case ']': - case '}': - depth[bracketType]--; - if (depth[bracketType] === -1) { - matchType = 'bracket'; - found = true; - } - break; - } - } - } - else if (token.type.indexOf('tag-name') !== -1) { - if (isNaN(depth[token.value])) { - depth[token.value] = 0; - } - if (prevToken.value === '<' && tokenCount > 1) { - depth[token.value]++; - } - else if (prevToken.value === '= 0; --i) { - if (this.$tryReplace(ranges[i], replacement)) { - replaced++; - } - } - this.selection.setSelectionRange(selection); - return replaced; - }; - Editor.prototype.$tryReplace = function (range, replacement) { - var input = this.session.getTextRange(range); - replacement = this.$search.replace(input, replacement); - if (replacement !== null) { - range.end = this.session.replace(range, replacement); - return range; - } - else { - return null; - } - }; - Editor.prototype.getLastSearchOptions = function () { - return this.$search.getOptions(); - }; - Editor.prototype.find = function (needle, options, animate) { - if (!options) - options = {}; - if (typeof needle == "string" || needle instanceof RegExp) - options.needle = needle; - else if (typeof needle == "object") - oop.mixin(options, needle); - var range = this.selection.getRange(); - if (options.needle == null) { - needle = this.session.getTextRange(range) - || this.$search.$options.needle; - if (!needle) { - range = this.session.getWordRange(range.start.row, range.start.column); - needle = this.session.getTextRange(range); - } - this.$search.set({ needle: needle }); - } - this.$search.set(options); - if (!options.start) - this.$search.set({ start: range }); - var newRange = this.$search.find(this.session); - if (options.preventScroll) - return newRange; - if (newRange) { - this.revealRange(newRange, animate); - return newRange; - } - if (options.backwards) - range.start = range.end; - else - range.end = range.start; - this.selection.setRange(range); - }; - Editor.prototype.findNext = function (options, animate) { - this.find({ skipCurrent: true, backwards: false }, options, animate); - }; - Editor.prototype.findPrevious = function (options, animate) { - this.find(options, { skipCurrent: true, backwards: true }, animate); - }; - Editor.prototype.revealRange = function (range, animate) { - this.session.unfold(range); - this.selection.setSelectionRange(range); - var scrollTop = this.renderer.scrollTop; - this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); - if (animate !== false) - this.renderer.animateScrolling(scrollTop); - }; - Editor.prototype.undo = function () { - this.session.getUndoManager().undo(this.session); - this.renderer.scrollCursorIntoView(null, 0.5); - }; - Editor.prototype.redo = function () { - this.session.getUndoManager().redo(this.session); - this.renderer.scrollCursorIntoView(null, 0.5); - }; - Editor.prototype.destroy = function () { - this.destroyed = true; - if (this.$toDestroy) { - this.$toDestroy.forEach(function (el) { - el.destroy(); - }); - this.$toDestroy = []; - } - if (this.$mouseHandler) - this.$mouseHandler.destroy(); - this.renderer.destroy(); - this._signal("destroy", this); - if (this.session) - this.session.destroy(); - if (this._$emitInputEvent) - this._$emitInputEvent.cancel(); - this.removeAllListeners(); - }; - Editor.prototype.setAutoScrollEditorIntoView = function (enable) { - if (!enable) - return; - var rect; - var self = this; - var shouldScroll = false; - if (!this.$scrollAnchor) - this.$scrollAnchor = document.createElement("div"); - var scrollAnchor = this.$scrollAnchor; - scrollAnchor.style.cssText = "position:absolute"; - this.container.insertBefore(scrollAnchor, this.container.firstChild); - var onChangeSelection = this.on("changeSelection", function () { - shouldScroll = true; - }); - var onBeforeRender = this.renderer.on("beforeRender", function () { - if (shouldScroll) - rect = self.renderer.container.getBoundingClientRect(); - }); - var onAfterRender = this.renderer.on("afterRender", function () { - if (shouldScroll && rect && (self.isFocused() - || self.searchBox && self.searchBox.isFocused())) { - var renderer = self.renderer; - var pos = renderer.$cursorLayer.$pixelPos; - var config = renderer.layerConfig; - var top = pos.top - config.offset; - if (pos.top >= 0 && top + rect.top < 0) { - shouldScroll = true; - } - else if (pos.top < config.height && - pos.top + rect.top + config.lineHeight > window.innerHeight) { - shouldScroll = false; - } - else { - shouldScroll = null; - } - if (shouldScroll != null) { - scrollAnchor.style.top = top + "px"; - scrollAnchor.style.left = pos.left + "px"; - scrollAnchor.style.height = config.lineHeight + "px"; - scrollAnchor.scrollIntoView(shouldScroll); - } - shouldScroll = rect = null; - } - }); - this.setAutoScrollEditorIntoView = function (enable) { - if (enable) - return; - delete this.setAutoScrollEditorIntoView; - this.off("changeSelection", onChangeSelection); - this.renderer.off("afterRender", onAfterRender); - this.renderer.off("beforeRender", onBeforeRender); - }; - }; - Editor.prototype.$resetCursorStyle = function () { - var style = this.$cursorStyle || "ace"; - var cursorLayer = this.renderer.$cursorLayer; - if (!cursorLayer) - return; - cursorLayer.setSmoothBlinking(/smooth/.test(style)); - cursorLayer.isBlinking = !this.$readOnly && style != "wide"; - dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style)); - }; - Editor.prototype.prompt = function (message, options, callback) { - var editor = this; - config.loadModule("ace/ext/prompt", function (module) { - module.prompt(editor, message, options, callback); - }); - }; - return Editor; -}()); -Editor.$uid = 0; -Editor.prototype.curOp = null; -Editor.prototype.prevOp = {}; -Editor.prototype.$mergeableCommands = ["backspace", "del", "insertstring"]; -Editor.prototype.$toggleWordPairs = [ - ["first", "last"], - ["true", "false"], - ["yes", "no"], - ["width", "height"], - ["top", "bottom"], - ["right", "left"], - ["on", "off"], - ["x", "y"], - ["get", "set"], - ["max", "min"], - ["horizontal", "vertical"], - ["show", "hide"], - ["add", "remove"], - ["up", "down"], - ["before", "after"], - ["even", "odd"], - ["in", "out"], - ["inside", "outside"], - ["next", "previous"], - ["increase", "decrease"], - ["attach", "detach"], - ["&&", "||"], - ["==", "!="] -]; -oop.implement(Editor.prototype, EventEmitter); -config.defineOptions(Editor.prototype, "editor", { - selectionStyle: { - set: function (style) { - this.onSelectionChange(); - this._signal("changeSelectionStyle", { data: style }); - }, - initialValue: "line" - }, - highlightActiveLine: { - set: function () { this.$updateHighlightActiveLine(); }, - initialValue: true - }, - highlightSelectedWord: { - set: function (shouldHighlight) { this.$onSelectionChange(); }, - initialValue: true - }, - readOnly: { - set: function (/**@type{boolean}*/ readOnly) { - var _this = this; - this.textInput.setReadOnly(readOnly); - if (this.destroyed) - return; - this.$resetCursorStyle(); - if (!this.$readOnlyCallback) { - this.$readOnlyCallback = function (e) { - var shouldShow = false; - if (e && e.type == "keydown") { - if (e && e.key && !e.ctrlKey && !e.metaKey) { - if (e.key == " ") - e.preventDefault(); - shouldShow = e.key.length == 1; - } - if (!shouldShow) - return; - } - else if (e && e.type !== "exec") { - shouldShow = true; - } - if (shouldShow) { - if (!_this.hoverTooltip) { - _this.hoverTooltip = new HoverTooltip(); - } - var domNode = dom.createElement("div"); - domNode.textContent = nls("editor.tooltip.disable-editing", "Editing is disabled"); - if (!_this.hoverTooltip.isOpen) { - _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode); - } - } - else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) { - _this.hoverTooltip.hide(); - } - }; - } - var textArea = this.textInput.getElement(); - if (readOnly) { - event.addListener(textArea, "keydown", this.$readOnlyCallback, this); - this.commands.on("exec", this.$readOnlyCallback); - this.commands.on("commandUnavailable", this.$readOnlyCallback); - } - else { - event.removeListener(textArea, "keydown", this.$readOnlyCallback); - this.commands.off("exec", this.$readOnlyCallback); - this.commands.off("commandUnavailable", this.$readOnlyCallback); - if (this.hoverTooltip) { - this.hoverTooltip.destroy(); - this.hoverTooltip = null; - } - } - }, - initialValue: false - }, - copyWithEmptySelection: { - set: function (value) { - this.textInput.setCopyWithEmptySelection(value); - }, - initialValue: false - }, - cursorStyle: { - set: function (val) { this.$resetCursorStyle(); }, - values: ["ace", "slim", "smooth", "wide"], - initialValue: "ace" - }, - mergeUndoDeltas: { - values: [false, true, "always"], - initialValue: true - }, - behavioursEnabled: { initialValue: true }, - wrapBehavioursEnabled: { initialValue: true }, - enableAutoIndent: { initialValue: true }, - autoScrollEditorIntoView: { - set: function (val) { this.setAutoScrollEditorIntoView(val); } - }, - keyboardHandler: { - set: function (val) { this.setKeyboardHandler(val); }, - get: function () { return this.$keybindingId; }, - handlesSet: true - }, - value: { - set: function (val) { this.session.setValue(val); }, - get: function () { return this.getValue(); }, - handlesSet: true, - hidden: true - }, - session: { - set: function (val) { this.setSession(val); }, - get: function () { return this.session; }, - handlesSet: true, - hidden: true - }, - showLineNumbers: { - set: function (show) { - this.renderer.$gutterLayer.setShowLineNumbers(show); - this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER); - if (show && this.$relativeLineNumbers) - relativeNumberRenderer.attach(this); - else - relativeNumberRenderer.detach(this); - }, - initialValue: true - }, - relativeLineNumbers: { - set: function (value) { - if (this.$showLineNumbers && value) - relativeNumberRenderer.attach(this); - else - relativeNumberRenderer.detach(this); - } - }, - placeholder: { - set: function (message) { - if (!this.$updatePlaceholder) { - this.$updatePlaceholder = function () { - var hasValue = this.session && (this.renderer.$composition || - this.session.getLength() > 1 || this.session.getLine(0).length > 0); - if (hasValue && this.renderer.placeholderNode) { - this.renderer.off("afterRender", this.$updatePlaceholder); - dom.removeCssClass(this.container, "ace_hasPlaceholder"); - this.renderer.placeholderNode.remove(); - this.renderer.placeholderNode = null; - } - else if (!hasValue && !this.renderer.placeholderNode) { - this.renderer.on("afterRender", this.$updatePlaceholder); - dom.addCssClass(this.container, "ace_hasPlaceholder"); - var el = dom.createElement("div"); - el.className = "ace_placeholder"; - el.textContent = this.$placeholder || ""; - this.renderer.placeholderNode = el; - this.renderer.content.appendChild(this.renderer.placeholderNode); - } - else if (!hasValue && this.renderer.placeholderNode) { - this.renderer.placeholderNode.textContent = this.$placeholder || ""; - } - }.bind(this); - this.on("input", this.$updatePlaceholder); - } - this.$updatePlaceholder(); - } - }, - enableKeyboardAccessibility: { - set: function (value) { - var blurCommand = { - name: "blurTextInput", - description: "Set focus to the editor content div to allow tabbing through the page", - bindKey: "Esc", - exec: function (editor) { - editor.blur(); - editor.renderer.scroller.focus(); - }, - readOnly: true - }; - var focusOnEnterKeyup = function (e) { - if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) { - e.preventDefault(); - var row = this.getCursorPosition().row; - if (!this.isRowVisible(row)) - this.scrollToLine(row, true, true); - this.focus(); - } - }; - var gutterKeyboardHandler; - if (value) { - this.renderer.enableKeyboardAccessibility = true; - this.renderer.keyboardFocusClassName = "ace_keyboard-focus"; - this.textInput.getElement().setAttribute("tabindex", -1); - this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0); - this.renderer.scroller.setAttribute("tabindex", 0); - this.renderer.scroller.setAttribute("role", "group"); - this.renderer.scroller.setAttribute("aria-roledescription", nls("editor.scroller.aria-roledescription", "editor")); - this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName); - this.renderer.scroller.setAttribute("aria-label", nls("editor.scroller.aria-label", "Editor content, press Enter to start editing, press Escape to exit")); - this.renderer.scroller.addEventListener("keyup", focusOnEnterKeyup.bind(this)); - this.commands.addCommand(blurCommand); - this.renderer.$gutter.setAttribute("tabindex", 0); - this.renderer.$gutter.setAttribute("aria-hidden", false); - this.renderer.$gutter.setAttribute("role", "group"); - this.renderer.$gutter.setAttribute("aria-roledescription", nls("editor.gutter.aria-roledescription", "editor gutter")); - this.renderer.$gutter.setAttribute("aria-label", nls("editor.gutter.aria-label", "Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit")); - this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName); - this.renderer.content.setAttribute("aria-hidden", true); - if (!gutterKeyboardHandler) - gutterKeyboardHandler = new GutterKeyboardHandler(this); - gutterKeyboardHandler.addListener(); - this.textInput.setAriaOptions({ - setLabel: true - }); - } - else { - this.renderer.enableKeyboardAccessibility = false; - this.textInput.getElement().setAttribute("tabindex", 0); - this.textInput.setNumberOfExtraLines(0); - this.renderer.scroller.setAttribute("tabindex", -1); - this.renderer.scroller.removeAttribute("role"); - this.renderer.scroller.removeAttribute("aria-roledescription"); - this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName); - this.renderer.scroller.removeAttribute("aria-label"); - this.renderer.scroller.removeEventListener("keyup", focusOnEnterKeyup.bind(this)); - this.commands.removeCommand(blurCommand); - this.renderer.content.removeAttribute("aria-hidden"); - this.renderer.$gutter.setAttribute("tabindex", -1); - this.renderer.$gutter.setAttribute("aria-hidden", true); - this.renderer.$gutter.removeAttribute("role"); - this.renderer.$gutter.removeAttribute("aria-roledescription"); - this.renderer.$gutter.removeAttribute("aria-label"); - this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName); - if (gutterKeyboardHandler) - gutterKeyboardHandler.removeListener(); - } - }, - initialValue: false - }, - textInputAriaLabel: { - set: function (val) { this.$textInputAriaLabel = val; }, - initialValue: "" - }, - enableMobileMenu: { - set: function (val) { this.$enableMobileMenu = val; }, - initialValue: true - }, - customScrollbar: "renderer", - hScrollBarAlwaysVisible: "renderer", - vScrollBarAlwaysVisible: "renderer", - highlightGutterLine: "renderer", - animatedScroll: "renderer", - showInvisibles: "renderer", - showPrintMargin: "renderer", - printMarginColumn: "renderer", - printMargin: "renderer", - fadeFoldWidgets: "renderer", - showFoldWidgets: "renderer", - displayIndentGuides: "renderer", - highlightIndentGuides: "renderer", - showGutter: "renderer", - fontSize: "renderer", - fontFamily: "renderer", - maxLines: "renderer", - minLines: "renderer", - scrollPastEnd: "renderer", - fixedWidthGutter: "renderer", - theme: "renderer", - hasCssTransforms: "renderer", - maxPixelHeight: "renderer", - useTextareaForIME: "renderer", - useResizeObserver: "renderer", - useSvgGutterIcons: "renderer", - showFoldedAnnotations: "renderer", - scrollSpeed: "$mouseHandler", - dragDelay: "$mouseHandler", - dragEnabled: "$mouseHandler", - focusTimeout: "$mouseHandler", - tooltipFollowsMouse: "$mouseHandler", - firstLineNumber: "session", - overwrite: "session", - newLineMode: "session", - useWorker: "session", - useSoftTabs: "session", - navigateWithinSoftTabs: "session", - tabSize: "session", - wrap: "session", - indentedSoftWrap: "session", - foldStyle: "session", - mode: "session" -}); -var relativeNumberRenderer = { - getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) { - return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? "\xb7" : ""))) + ""; - }, - getWidth: function (session, /**@type{number}*/ lastLineNumber, config) { - return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth; - }, - update: function (e, /**@type{Editor}*/ editor) { - editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER); - }, - attach: function (/**@type{Editor}*/ editor) { - editor.renderer.$gutterLayer.$renderer = this; - editor.on("changeSelection", this.update); - this.update(null, editor); - }, - detach: function (/**@type{Editor}*/ editor) { - if (editor.renderer.$gutterLayer.$renderer == this) - editor.renderer.$gutterLayer.$renderer = null; - editor.off("changeSelection", this.update); - this.update(null, editor); - } -}; -exports.Editor = Editor; - -}); - -ace.define("ace/layer/lines",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var Lines = /** @class */ (function () { - function Lines(element, canvasHeight) { - this.element = element; - this.canvasHeight = canvasHeight || 500000; - this.element.style.height = (this.canvasHeight * 2) + "px"; - this.cells = []; - this.cellCache = []; - this.$offsetCoefficient = 0; - } - Lines.prototype.moveContainer = function (config) { - dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient); - }; - Lines.prototype.pageChanged = function (oldConfig, newConfig) { - return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !== - Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)); - }; - Lines.prototype.computeLineTop = function (row, config, session) { - var screenTop = config.firstRowScreen * config.lineHeight; - var screenPage = Math.floor(screenTop / this.canvasHeight); - var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight; - return lineTop - (screenPage * this.canvasHeight); - }; - Lines.prototype.computeLineHeight = function (row, config, session) { - return config.lineHeight * session.getRowLineCount(row); - }; - Lines.prototype.getLength = function () { - return this.cells.length; - }; - Lines.prototype.get = function (index) { - return this.cells[index]; - }; - Lines.prototype.shift = function () { - this.$cacheCell(this.cells.shift()); - }; - Lines.prototype.pop = function () { - this.$cacheCell(this.cells.pop()); - }; - Lines.prototype.push = function (cell) { - if (Array.isArray(cell)) { - this.cells.push.apply(this.cells, cell); - var fragment = dom.createFragment(this.element); - for (var i = 0; i < cell.length; i++) { - fragment.appendChild(cell[i].element); - } - this.element.appendChild(fragment); - } - else { - this.cells.push(cell); - this.element.appendChild(cell.element); - } - }; - Lines.prototype.unshift = function (cell) { - if (Array.isArray(cell)) { - this.cells.unshift.apply(this.cells, cell); - var fragment = dom.createFragment(this.element); - for (var i = 0; i < cell.length; i++) { - fragment.appendChild(cell[i].element); - } - if (this.element.firstChild) - this.element.insertBefore(fragment, this.element.firstChild); - else - this.element.appendChild(fragment); - } - else { - this.cells.unshift(cell); - this.element.insertAdjacentElement("afterbegin", cell.element); - } - }; - Lines.prototype.last = function () { - if (this.cells.length) - return this.cells[this.cells.length - 1]; - else - return null; - }; - Lines.prototype.$cacheCell = function (cell) { - if (!cell) - return; - cell.element.remove(); - this.cellCache.push(cell); - }; - Lines.prototype.createCell = function (row, config, session, initElement) { - var cell = this.cellCache.pop(); - if (!cell) { - var element = dom.createElement("div"); - if (initElement) - initElement(element); - this.element.appendChild(element); - cell = { - element: element, - text: "", - row: row - }; - } - cell.row = row; - return cell; - }; - return Lines; -}()); -exports.Lines = Lines; - -}); - -ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/layer/lines","ace/config"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var oop = require("../lib/oop"); -var lang = require("../lib/lang"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var Lines = require("./lines").Lines; -var nls = require("../config").nls; -var Gutter = /** @class */ (function () { - function Gutter(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_gutter-layer"; - parentEl.appendChild(this.element); - this.setShowFoldWidgets(this.$showFoldWidgets); - this.gutterWidth = 0; - this.$annotations = []; - this.$updateAnnotations = this.$updateAnnotations.bind(this); - this.$lines = new Lines(this.element); - this.$lines.$offsetCoefficient = 1; - } - Gutter.prototype.setSession = function (session) { - if (this.session) - this.session.off("change", this.$updateAnnotations); - this.session = session; - if (session) - session.on("change", this.$updateAnnotations); - }; - Gutter.prototype.addGutterDecoration = function (row, className) { - if (window.console) - console.warn && console.warn("deprecated use session.addGutterDecoration"); - this.session.addGutterDecoration(row, className); - }; - Gutter.prototype.removeGutterDecoration = function (row, className) { - if (window.console) - console.warn && console.warn("deprecated use session.removeGutterDecoration"); - this.session.removeGutterDecoration(row, className); - }; - Gutter.prototype.setAnnotations = function (annotations) { - this.$annotations = []; - for (var i = 0; i < annotations.length; i++) { - var annotation = annotations[i]; - var row = annotation.row; - var rowInfo = this.$annotations[row]; - if (!rowInfo) - rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] }; - var annoText = annotation.text; - var displayAnnoText = annotation.text; - var annoType = annotation.type; - annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; - displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || ""; - if (rowInfo.text.indexOf(annoText) === -1) { - rowInfo.text.push(annoText); - rowInfo.type.push(annoType); - rowInfo.displayText.push(displayAnnoText); - } - var className = annotation.className; - if (className) { - rowInfo.className = className; - } - else if (annoType === "error") { - rowInfo.className = " ace_error"; - } - else if (annoType === "security" && !/\bace_error\b/.test(rowInfo.className)) { - rowInfo.className = " ace_security"; - } - else if (annoType === "warning" && !/\bace_(error|security)\b/.test(rowInfo.className)) { - rowInfo.className = " ace_warning"; - } - else if (annoType === "info" && !rowInfo.className) { - rowInfo.className = " ace_info"; - } - else if (annoType === "hint" && !rowInfo.className) { - rowInfo.className = " ace_hint"; - } - } - }; - Gutter.prototype.$updateAnnotations = function (delta) { - if (!this.$annotations.length) - return; - var firstRow = delta.start.row; - var len = delta.end.row - firstRow; - if (len === 0) { - } - else if (delta.action == 'remove') { - this.$annotations.splice(firstRow, len + 1, null); - } - else { - var args = new Array(len + 1); - args.unshift(firstRow, 1); - this.$annotations.splice.apply(this.$annotations, args); - } - }; - Gutter.prototype.update = function (config) { - this.config = config; - var session = this.session; - var firstRow = config.firstRow; - var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar - session.getLength() - 1); - this.oldLastRow = lastRow; - this.config = config; - this.$lines.moveContainer(config); - this.$updateCursorRow(); - var fold = session.getNextFoldLine(firstRow); - var foldStart = fold ? fold.start.row : Infinity; - var cell = null; - var index = -1; - var row = firstRow; - while (true) { - if (row > foldStart) { - row = fold.end.row + 1; - fold = session.getNextFoldLine(row, fold); - foldStart = fold ? fold.start.row : Infinity; - } - if (row > lastRow) { - while (this.$lines.getLength() > index + 1) - this.$lines.pop(); - break; - } - cell = this.$lines.get(++index); - if (cell) { - cell.row = row; - } - else { - cell = this.$lines.createCell(row, config, this.session, onCreateCell); - this.$lines.push(cell); - } - this.$renderCell(cell, config, fold, row); - row++; - } - this._signal("afterRender"); - this.$updateGutterWidth(config); - }; - Gutter.prototype.$updateGutterWidth = function (config) { - var session = this.session; - var gutterRenderer = session.gutterRenderer || this.$renderer; - var firstLineNumber = session.$firstLineNumber; - var lastLineText = this.$lines.last() ? this.$lines.last().text : ""; - if (this.$fixedWidth || session.$useWrapMode) - lastLineText = session.getLength() + firstLineNumber - 1; - var gutterWidth = gutterRenderer - ? gutterRenderer.getWidth(session, lastLineText, config) - : lastLineText.toString().length * config.characterWidth; - var padding = this.$padding || this.$computePadding(); - gutterWidth += padding.left + padding.right; - if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { - this.gutterWidth = gutterWidth; (this.element.parentNode).style.width = - this.element.style.width = Math.ceil(this.gutterWidth) + "px"; - this._signal("changeGutterWidth", gutterWidth); - } - }; - Gutter.prototype.$updateCursorRow = function () { - if (!this.$highlightGutterLine) - return; - var position = this.session.selection.getCursor(); - if (this.$cursorRow === position.row) - return; - this.$cursorRow = position.row; - }; - Gutter.prototype.updateLineHighlight = function () { - if (!this.$highlightGutterLine) - return; - var row = this.session.selection.cursor.row; - this.$cursorRow = row; - if (this.$cursorCell && this.$cursorCell.row == row) - return; - if (this.$cursorCell) - this.$cursorCell.element.className = this.$cursorCell.element.className.replace("ace_gutter-active-line ", ""); - var cells = this.$lines.cells; - this.$cursorCell = null; - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - if (cell.row >= this.$cursorRow) { - if (cell.row > this.$cursorRow) { - var fold = this.session.getFoldLine(this.$cursorRow); - if (i > 0 && fold && fold.start.row == cells[i - 1].row) - cell = cells[i - 1]; - else - break; - } - cell.element.className = "ace_gutter-active-line " + cell.element.className; - this.$cursorCell = cell; - break; - } - } - }; - Gutter.prototype.scrollLines = function (config) { - var oldConfig = this.config; - this.config = config; - this.$updateCursorRow(); - if (this.$lines.pageChanged(oldConfig, config)) - return this.update(config); - this.$lines.moveContainer(config); - var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar - this.session.getLength() - 1); - var oldLastRow = this.oldLastRow; - this.oldLastRow = lastRow; - if (!oldConfig || oldLastRow < config.firstRow) - return this.update(config); - if (lastRow < oldConfig.firstRow) - return this.update(config); - if (oldConfig.firstRow < config.firstRow) - for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) - this.$lines.shift(); - if (oldLastRow > lastRow) - for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--) - this.$lines.pop(); - if (config.firstRow < oldConfig.firstRow) { - this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1)); - } - if (lastRow > oldLastRow) { - this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow)); - } - this.updateLineHighlight(); - this._signal("afterRender"); - this.$updateGutterWidth(config); - }; - Gutter.prototype.$renderLines = function (config, firstRow, lastRow) { - var fragment = []; - var row = firstRow; - var foldLine = this.session.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (true) { - if (row > foldStart) { - row = foldLine.end.row + 1; - foldLine = this.session.getNextFoldLine(row, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - if (row > lastRow) - break; - var cell = this.$lines.createCell(row, config, this.session, onCreateCell); - this.$renderCell(cell, config, foldLine, row); - fragment.push(cell); - row++; - } - return fragment; - }; - Gutter.prototype.$renderCell = function (cell, config, fold, row) { - var element = cell.element; - var session = this.session; - var textNode = element.childNodes[0]; - var foldWidget = element.childNodes[1]; - var annotationNode = element.childNodes[2]; - var customWidget = element.childNodes[3]; - var annotationIconNode = annotationNode.firstChild; - var firstLineNumber = session.$firstLineNumber; - var breakpoints = session.$breakpoints; - var decorations = session.$decorations; - var gutterRenderer = session.gutterRenderer || this.$renderer; - var foldWidgets = this.$showFoldWidgets && session.foldWidgets; - var foldStart = fold ? fold.start.row : Number.MAX_VALUE; - var lineHeight = config.lineHeight + "px"; - var className = this.$useSvgGutterIcons ? "ace_gutter-cell_svg-icons " : "ace_gutter-cell "; - var iconClassName = this.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; - var rowText = (gutterRenderer - ? gutterRenderer.getText(session, row) - : row + firstLineNumber).toString(); - if (this.$highlightGutterLine) { - if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) { - className += "ace_gutter-active-line "; - if (this.$cursorCell != cell) { - if (this.$cursorCell) - this.$cursorCell.element.className = this.$cursorCell.element.className.replace("ace_gutter-active-line ", ""); - this.$cursorCell = cell; - } - } - } - if (breakpoints[row]) - className += breakpoints[row]; - if (decorations[row]) - className += decorations[row]; - if (this.$annotations[row] && row !== foldStart) - className += this.$annotations[row].className; - if (foldWidgets) { - var c = foldWidgets[row]; - if (c == null) - c = foldWidgets[row] = session.getFoldWidget(row); - } - if (c) { - var foldClass = "ace_fold-widget ace_" + c; - var isClosedFold = c == "start" && row == foldStart && row < fold.end.row; - if (isClosedFold) { - foldClass += " ace_closed"; - var foldAnnotationClass = ""; - var annotationInFold = false; - for (var i = row + 1; i <= fold.end.row; i++) { - if (!this.$annotations[i]) - continue; - if (this.$annotations[i].className === " ace_error") { - annotationInFold = true; - foldAnnotationClass = " ace_error_fold"; - break; - } - if (this.$annotations[i].className === " ace_security") { - annotationInFold = true; - foldAnnotationClass = " ace_security_fold"; - } - else if (this.$annotations[i].className === " ace_warning" && - foldAnnotationClass !== " ace_security_fold") { - annotationInFold = true; - foldAnnotationClass = " ace_warning_fold"; - } - } - className += foldAnnotationClass; - } - else - foldClass += " ace_open"; - if (foldWidget.className != foldClass) - foldWidget.className = foldClass; - dom.setStyle(foldWidget.style, "height", lineHeight); - dom.setStyle(foldWidget.style, "display", "inline-block"); - foldWidget.setAttribute("role", "button"); - foldWidget.setAttribute("tabindex", "-1"); - var foldRange = session.getFoldWidgetRange(row); - if (foldRange) - foldWidget.setAttribute("aria-label", nls("gutter.code-folding.range.aria-label", "Toggle code folding, rows $0 through $1", [ - foldRange.start.row + 1, - foldRange.end.row + 1 - ])); - else { - if (fold) - foldWidget.setAttribute("aria-label", nls("gutter.code-folding.closed.aria-label", "Toggle code folding, rows $0 through $1", [ - fold.start.row + 1, - fold.end.row + 1 - ])); - else - foldWidget.setAttribute("aria-label", nls("gutter.code-folding.open.aria-label", "Toggle code folding, row $0", [row + 1])); - } - if (isClosedFold) { - foldWidget.setAttribute("aria-expanded", "false"); - foldWidget.setAttribute("title", nls("gutter.code-folding.closed.title", "Unfold code")); - } - else { - foldWidget.setAttribute("aria-expanded", "true"); - foldWidget.setAttribute("title", nls("gutter.code-folding.open.title", "Fold code")); - } - } - else { - if (foldWidget) { - dom.setStyle(foldWidget.style, "display", "none"); - foldWidget.setAttribute("tabindex", "0"); - foldWidget.removeAttribute("role"); - foldWidget.removeAttribute("aria-label"); - } - } - var customWidgetAttributes = this.session.$gutterCustomWidgets[row]; - if (customWidgetAttributes) { - this.$addCustomWidget(row, customWidgetAttributes, cell); - } - else if (customWidget) { - this.$removeCustomWidget(row, cell); - } - if (annotationInFold && this.$showFoldedAnnotations) { - annotationNode.className = "ace_gutter_annotation"; - annotationIconNode.className = iconClassName; - annotationIconNode.className += foldAnnotationClass; - dom.setStyle(annotationIconNode.style, "height", lineHeight); - dom.setStyle(annotationNode.style, "display", "block"); - dom.setStyle(annotationNode.style, "height", lineHeight); - var ariaLabel; - switch (foldAnnotationClass) { - case " ace_error_fold": - ariaLabel = nls("gutter.annotation.aria-label.error", "Error, read annotations row $0", [rowText]); - break; - case " ace_security_fold": - ariaLabel = nls("gutter.annotation.aria-label.security", "Security finding, read annotations row $0", [rowText]); - break; - case " ace_warning_fold": - ariaLabel = nls("gutter.annotation.aria-label.warning", "Warning, read annotations row $0", [rowText]); - break; - } - annotationNode.setAttribute("aria-label", ariaLabel); - annotationNode.setAttribute("tabindex", "-1"); - annotationNode.setAttribute("role", "button"); - } - else if (this.$annotations[row]) { - annotationNode.className = "ace_gutter_annotation"; - annotationIconNode.className = iconClassName; - if (this.$useSvgGutterIcons) - annotationIconNode.className += this.$annotations[row].className; - else - element.classList.add(this.$annotations[row].className.replace(" ", "")); - dom.setStyle(annotationIconNode.style, "height", lineHeight); - dom.setStyle(annotationNode.style, "display", "block"); - dom.setStyle(annotationNode.style, "height", lineHeight); - var ariaLabel; - switch (this.$annotations[row].className) { - case " ace_error": - ariaLabel = nls("gutter.annotation.aria-label.error", "Error, read annotations row $0", [rowText]); - break; - case " ace_security": - ariaLabel = nls("gutter.annotation.aria-label.security", "Security finding, read annotations row $0", [rowText]); - break; - case " ace_warning": - ariaLabel = nls("gutter.annotation.aria-label.warning", "Warning, read annotations row $0", [rowText]); - break; - case " ace_info": - ariaLabel = nls("gutter.annotation.aria-label.info", "Info, read annotations row $0", [rowText]); - break; - case " ace_hint": - ariaLabel = nls("gutter.annotation.aria-label.hint", "Suggestion, read annotations row $0", [rowText]); - break; - } - annotationNode.setAttribute("aria-label", ariaLabel); - annotationNode.setAttribute("tabindex", "-1"); - annotationNode.setAttribute("role", "button"); - } - else { - dom.setStyle(annotationNode.style, "display", "none"); - annotationNode.removeAttribute("aria-label"); - annotationNode.removeAttribute("role"); - annotationNode.setAttribute("tabindex", "0"); - } - if (rowText !== textNode.data) { - textNode.data = rowText; - } - if (element.className != className) - element.className = className; - dom.setStyle(cell.element.style, "height", this.$lines.computeLineHeight(row, config, session) + "px"); - dom.setStyle(cell.element.style, "top", this.$lines.computeLineTop(row, config, session) + "px"); - cell.text = rowText; - if (annotationNode.style.display === "none" && foldWidget.style.display === "none" && !customWidgetAttributes) - cell.element.setAttribute("aria-hidden", true); - else - cell.element.setAttribute("aria-hidden", false); - return cell; - }; - Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) { - this.$highlightGutterLine = highlightGutterLine; - }; - Gutter.prototype.setShowLineNumbers = function (show) { - this.$renderer = !show && { - getWidth: function () { return 0; }, - getText: function () { return ""; } - }; - }; - Gutter.prototype.getShowLineNumbers = function () { - return this.$showLineNumbers; - }; - Gutter.prototype.setShowFoldWidgets = function (show) { - if (show) - dom.addCssClass(this.element, "ace_folding-enabled"); - else - dom.removeCssClass(this.element, "ace_folding-enabled"); - this.$showFoldWidgets = show; - this.$padding = null; - }; - Gutter.prototype.getShowFoldWidgets = function () { - return this.$showFoldWidgets; - }; - Gutter.prototype.$hideFoldWidget = function (row, cell) { - var rowCell = cell || this.$getGutterCell(row); - if (rowCell && rowCell.element) { - var foldWidget = rowCell.element.childNodes[1]; - if (foldWidget) { - dom.setStyle(foldWidget.style, "display", "none"); - } - } - }; - Gutter.prototype.$showFoldWidget = function (row, cell) { - var rowCell = cell || this.$getGutterCell(row); - if (rowCell && rowCell.element) { - var foldWidget = rowCell.element.childNodes[1]; - if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) { - dom.setStyle(foldWidget.style, "display", "inline-block"); - } - } - }; - Gutter.prototype.$getGutterCell = function (row) { - var cells = this.$lines.cells; - var visibileRow = this.session.documentToScreenRow(row, 0); - return cells[row - this.config.firstRowScreen - (row - visibileRow)]; - }; - Gutter.prototype.$addCustomWidget = function (row, _a, cell) { - var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks; - this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks }; - this.$hideFoldWidget(row, cell); - var rowCell = cell || this.$getGutterCell(row); - if (rowCell && rowCell.element) { - var customWidget = rowCell.element.querySelector(".ace_custom-widget"); - if (customWidget) { - customWidget.remove(); - } - customWidget = dom.createElement("span"); - customWidget.className = "ace_custom-widget ".concat(className); - customWidget.setAttribute("tabindex", "-1"); - customWidget.setAttribute("role", 'button'); - customWidget.setAttribute("aria-label", label); - customWidget.setAttribute("title", title); - dom.setStyle(customWidget.style, "display", "inline-block"); - dom.setStyle(customWidget.style, "height", "inherit"); - if (callbacks && callbacks.onClick) { - customWidget.addEventListener("click", function (e) { - callbacks.onClick(e, row); - e.stopPropagation(); - }); - } - rowCell.element.appendChild(customWidget); - } - }; - Gutter.prototype.$removeCustomWidget = function (row, cell) { - delete this.session.$gutterCustomWidgets[row]; - this.$showFoldWidget(row, cell); - var rowCell = cell || this.$getGutterCell(row); - if (rowCell && rowCell.element) { - var customWidget = rowCell.element.querySelector(".ace_custom-widget"); - if (customWidget) { - rowCell.element.removeChild(customWidget); - } - } - }; - Gutter.prototype.$computePadding = function () { - if (!this.element.firstChild) - return { left: 0, right: 0 }; - var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild)); - this.$padding = {}; - this.$padding.left = (parseInt(style.borderLeftWidth) || 0) - + (parseInt(style.paddingLeft) || 0) + 1; - this.$padding.right = (parseInt(style.borderRightWidth) || 0) - + (parseInt(style.paddingRight) || 0); - return this.$padding; - }; - Gutter.prototype.getRegion = function (point) { - var padding = this.$padding || this.$computePadding(); - var rect = this.element.getBoundingClientRect(); - if (point.x < padding.left + rect.left) - return "markers"; - if (this.$showFoldWidgets && point.x > rect.right - padding.right) - return "foldWidgets"; - }; - return Gutter; -}()); -Gutter.prototype.$fixedWidth = false; -Gutter.prototype.$highlightGutterLine = true; -Gutter.prototype.$renderer = ""; -Gutter.prototype.$showLineNumbers = true; -Gutter.prototype.$showFoldWidgets = true; -oop.implement(Gutter.prototype, EventEmitter); -function onCreateCell(element) { - var textNode = document.createTextNode(''); - element.appendChild(textNode); - var foldWidget = dom.createElement("span"); - element.appendChild(foldWidget); - var annotationNode = dom.createElement("span"); - element.appendChild(annotationNode); - var annotationIconNode = dom.createElement("span"); - annotationNode.appendChild(annotationIconNode); - return element; -} -exports.Gutter = Gutter; - -}); - -ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(require, exports, module){"use strict"; -var Range = require("../range").Range; -var dom = require("../lib/dom"); -var Marker = /** @class */ (function () { - function Marker(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_marker-layer"; - parentEl.appendChild(this.element); - } - Marker.prototype.setPadding = function (padding) { - this.$padding = padding; - }; - Marker.prototype.setSession = function (session) { - this.session = session; - }; - Marker.prototype.setMarkers = function (markers) { - this.markers = markers; - }; - Marker.prototype.elt = function (className, css) { - var x = this.i != -1 && this.element.childNodes[this.i]; - if (!x) { - x = document.createElement("div"); - this.element.appendChild(x); - this.i = -1; - } - else { - this.i++; - } - x.style.cssText = css; - x.className = className; - }; - Marker.prototype.update = function (config) { - if (!config) - return; - this.config = config; - this.i = 0; - var html; - for (var key in this.markers) { - var marker = this.markers[key]; - if (!marker.range) { - marker.update(html, this, this.session, config); - continue; - } - var range = marker.range.clipRows(config.firstRow, config.lastRow); - if (range.isEmpty()) - continue; - range = range.toScreenRange(this.session); - if (marker.renderer) { - var top = this.$getTop(range.start.row, config); - var left = this.$padding + range.start.column * config.characterWidth; - marker.renderer(html, range, left, top, config); - } - else if (marker.type == "fullLine") { - this.drawFullLineMarker(html, range, marker.clazz, config); - } - else if (marker.type == "screenLine") { - this.drawScreenLineMarker(html, range, marker.clazz, config); - } - else if (range.isMultiLine()) { - if (marker.type == "text") - this.drawTextMarker(html, range, marker.clazz, config); - else - this.drawMultiLineMarker(html, range, marker.clazz, config); - } - else { - this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config); - } - } - if (this.i != -1) { - while (this.i < this.element.childElementCount) - this.element.removeChild(this.element.lastChild); - } - }; - Marker.prototype.$getTop = function (row, layerConfig) { - return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; - }; - Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) { - var session = this.session; - var start = range.start.row; - var end = range.end.row; - var row = start; - var prev = 0; - var curr = 0; - var next = session.getScreenLastRowColumn(row); - var lineRange = new Range(row, range.start.column, row, curr); - for (; row <= end; row++) { - lineRange.start.row = lineRange.end.row = row; - lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row); - lineRange.end.column = next; - prev = curr; - curr = next; - next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column; - this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? " ace_start" : "") + " ace_br" - + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle); - } - }; - Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { - var padding = this.$padding; - var height = config.lineHeight; - var top = this.$getTop(range.start.row, config); - var left = padding + range.start.column * config.characterWidth; - extraStyle = extraStyle || ""; - if (this.session.$bidiHandler.isBidiRow(range.start.row)) { - var range1 = range.clone(); - range1.end.row = range1.start.row; - range1.end.column = this.session.getLine(range1.start.row).length; - this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + " ace_br1 ace_start", config, null, extraStyle); - } - else { - this.elt(clazz + " ace_br1 ace_start", "height:" + height + "px;" + "right:" + padding + "px;" + "top:" + top + "px;left:" + left + "px;" + (extraStyle || "")); - } - if (this.session.$bidiHandler.isBidiRow(range.end.row)) { - var range1 = range.clone(); - range1.start.row = range1.end.row; - range1.start.column = 0; - this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + " ace_br12", config, null, extraStyle); - } - else { - top = this.$getTop(range.end.row, config); - var width = range.end.column * config.characterWidth; - this.elt(clazz + " ace_br12", "height:" + height + "px;" + - "width:" + width + "px;" + - "top:" + top + "px;" + - "left:" + padding + "px;" + (extraStyle || "")); - } - height = (range.end.row - range.start.row - 1) * config.lineHeight; - if (height <= 0) - return; - top = this.$getTop(range.start.row + 1, config); - var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8); - this.elt(clazz + (radiusClass ? " ace_br" + radiusClass : ""), "height:" + height + "px;" + - "right:" + padding + "px;" + - "top:" + top + "px;" + - "left:" + padding + "px;" + (extraStyle || "")); - }; - Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) { - if (this.session.$bidiHandler.isBidiRow(range.start.row)) - return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle); - var height = config.lineHeight; - var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; - var top = this.$getTop(range.start.row, config); - var left = this.$padding + range.start.column * config.characterWidth; - this.elt(clazz, "height:" + height + "px;" + - "width:" + width + "px;" + - "top:" + top + "px;" + - "left:" + left + "px;" + (extraStyle || "")); - }; - Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) { - var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding; - var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column); - selections.forEach(function (selection) { - this.elt(clazz, "height:" + height + "px;" + - "width:" + (selection.width + (extraLength || 0)) + "px;" + - "top:" + top + "px;" + - "left:" + (padding + selection.left) + "px;" + (extraStyle || "")); - }, this); - }; - Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { - var top = this.$getTop(range.start.row, config); - var height = config.lineHeight; - if (range.start.row != range.end.row) - height += this.$getTop(range.end.row, config) - top; - this.elt(clazz, "height:" + height + "px;" + - "top:" + top + "px;" + - "left:0;right:0;" + (extraStyle || "")); - }; - Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { - var top = this.$getTop(range.start.row, config); - var height = config.lineHeight; - this.elt(clazz, "height:" + height + "px;" + - "top:" + top + "px;" + - "left:0;right:0;" + (extraStyle || "")); - }; - return Marker; -}()); -Marker.prototype.$padding = 0; -function getBorderClass(tl, tr, br, bl) { - return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0); -} -exports.Marker = Marker; - -}); - -ace.define("ace/layer/text_util",["require","exports","module"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className. -var textTokens = new Set(["text", "rparen", "lparen"]); -exports.isTextToken = function (tokenType) { - return textTokens.has(tokenType); -}; - -}); - -ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter","ace/config","ace/layer/text_util"], function(require, exports, module){"use strict"; -var oop = require("../lib/oop"); -var dom = require("../lib/dom"); -var lang = require("../lib/lang"); -var Lines = require("./lines").Lines; -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var nls = require("../config").nls; -var isTextToken = require("./text_util").isTextToken; -var Text = /** @class */ (function () { - function Text(parentEl) { - this.dom = dom; - this.element = this.dom.createElement("div"); - this.element.className = "ace_layer ace_text-layer"; - parentEl.appendChild(this.element); - this.$updateEolChar = this.$updateEolChar.bind(this); - this.$lines = new Lines(this.element); - } - Text.prototype.$updateEolChar = function () { - var doc = this.session.doc; - var unixMode = doc.getNewLineCharacter() == "\n" && doc.getNewLineMode() != "windows"; - var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF; - if (this.EOL_CHAR != EOL_CHAR) { - this.EOL_CHAR = EOL_CHAR; - return true; - } - }; - Text.prototype.setPadding = function (padding) { - this.$padding = padding; - this.element.style.margin = "0 " + padding + "px"; - }; - Text.prototype.getLineHeight = function () { - return this.$fontMetrics.$characterSize.height || 0; - }; - Text.prototype.getCharacterWidth = function () { - return this.$fontMetrics.$characterSize.width || 0; - }; - Text.prototype.$setFontMetrics = function (measure) { - this.$fontMetrics = measure; - this.$fontMetrics.on("changeCharacterSize", - function (e) { - this._signal("changeCharacterSize", e); - }.bind(this)); - this.$pollSizeChanges(); - }; - Text.prototype.checkForSizeChanges = function () { - this.$fontMetrics.checkForSizeChanges(); - }; - Text.prototype.$pollSizeChanges = function () { - return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges(); - }; - Text.prototype.setSession = function (session) { - this.session = session; - if (session) - this.$computeTabString(); - }; - Text.prototype.setShowInvisibles = function (showInvisibles) { - if (this.showInvisibles == showInvisibles) - return false; - this.showInvisibles = showInvisibles; - if (typeof showInvisibles == "string") { - this.showSpaces = /tab/i.test(showInvisibles); - this.showTabs = /space/i.test(showInvisibles); - this.showEOL = /eol/i.test(showInvisibles); - } - else { - this.showSpaces = this.showTabs = this.showEOL = showInvisibles; - } - this.$computeTabString(); - return true; - }; - Text.prototype.setDisplayIndentGuides = function (display) { - if (this.displayIndentGuides == display) - return false; - this.displayIndentGuides = display; - this.$computeTabString(); - return true; - }; - Text.prototype.setHighlightIndentGuides = function (highlight) { - if (this.$highlightIndentGuides === highlight) - return false; - this.$highlightIndentGuides = highlight; - return highlight; - }; - Text.prototype.$computeTabString = function () { - var tabSize = this.session.getTabSize(); - this.tabSize = tabSize; var tabStr = this.$tabStrings = [0]; - for (var i = 1; i < tabSize + 1; i++) { - if (this.showTabs) { - var span = this.dom.createElement("span"); - span.className = "ace_invisible ace_invisible_tab"; - span.textContent = lang.stringRepeat(this.TAB_CHAR, i); - tabStr.push(span); - } - else { - tabStr.push(this.dom.createTextNode(lang.stringRepeat(" ", i), this.element)); - } - } - if (this.displayIndentGuides) { - this.$indentGuideRe = /\s\S| \t|\t |\s$/; - var className = "ace_indent-guide"; - var spaceClass = this.showSpaces ? " ace_invisible ace_invisible_space" : ""; - var spaceContent = this.showSpaces - ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize) - : lang.stringRepeat(" ", this.tabSize); - var tabClass = this.showTabs ? " ace_invisible ace_invisible_tab" : ""; - var tabContent = this.showTabs - ? lang.stringRepeat(this.TAB_CHAR, this.tabSize) - : spaceContent; - var span = this.dom.createElement("span"); - span.className = className + spaceClass; - span.textContent = spaceContent; - this.$tabStrings[" "] = span; - var span = this.dom.createElement("span"); - span.className = className + tabClass; - span.textContent = tabContent; - this.$tabStrings["\t"] = span; - } - }; - Text.prototype.updateLines = function (config, firstRow, lastRow) { - if (this.config.lastRow != config.lastRow || - this.config.firstRow != config.firstRow) { - return this.update(config); - } - this.config = config; - var first = Math.max(firstRow, config.firstRow); - var last = Math.min(lastRow, config.lastRow); - var lineElements = this.element.childNodes; - var lineElementsIdx = 0; - for (var row = config.firstRow; row < first; row++) { - var foldLine = this.session.getFoldLine(row); - if (foldLine) { - if (foldLine.containsRow(first)) { - first = foldLine.start.row; - break; - } - else { - row = foldLine.end.row; - } - } - lineElementsIdx++; - } - var heightChanged = false; - var row = first; - var foldLine = this.session.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (true) { - if (row > foldStart) { - row = foldLine.end.row + 1; - foldLine = this.session.getNextFoldLine(row, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - if (row > last) - break; var lineElement = lineElements[lineElementsIdx++]; - if (lineElement) { - this.dom.removeChildren(lineElement); - this.$renderLine(lineElement, row, row == foldStart ? foldLine : false); - if (heightChanged) - lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + "px"; - var height = (config.lineHeight * this.session.getRowLength(row)) + "px"; - if (lineElement.style.height != height) { - heightChanged = true; - lineElement.style.height = height; - } - } - row++; - } - if (heightChanged) { - while (lineElementsIdx < this.$lines.cells.length) { - var cell = this.$lines.cells[lineElementsIdx++]; - cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + "px"; - } - } - }; - Text.prototype.scrollLines = function (config) { - var oldConfig = this.config; - this.config = config; - if (this.$lines.pageChanged(oldConfig, config)) - return this.update(config); - this.$lines.moveContainer(config); - var lastRow = config.lastRow; - var oldLastRow = oldConfig ? oldConfig.lastRow : -1; - if (!oldConfig || oldLastRow < config.firstRow) - return this.update(config); - if (lastRow < oldConfig.firstRow) - return this.update(config); - if (!oldConfig || oldConfig.lastRow < config.firstRow) - return this.update(config); - if (config.lastRow < oldConfig.firstRow) - return this.update(config); - if (oldConfig.firstRow < config.firstRow) - for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) - this.$lines.shift(); - if (oldConfig.lastRow > config.lastRow) - for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--) - this.$lines.pop(); - if (config.firstRow < oldConfig.firstRow) { - this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1)); - } - if (config.lastRow > oldConfig.lastRow) { - this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow)); - } - this.$highlightIndentGuide(); - }; - Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) { - var fragment = []; - var row = firstRow; - var foldLine = this.session.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - while (true) { - if (row > foldStart) { - row = foldLine.end.row + 1; - foldLine = this.session.getNextFoldLine(row, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - if (row > lastRow) - break; - var line = this.$lines.createCell(row, config, this.session); - var lineEl = line.element; - this.dom.removeChildren(lineEl); - dom.setStyle(lineEl.style, "height", this.$lines.computeLineHeight(row, config, this.session) + "px"); - dom.setStyle(lineEl.style, "top", this.$lines.computeLineTop(row, config, this.session) + "px"); - this.$renderLine(lineEl, row, row == foldStart ? foldLine : false); - if (this.$useLineGroups()) { - lineEl.className = "ace_line_group"; - } - else { - lineEl.className = "ace_line"; - } - fragment.push(line); - row++; - } - return fragment; - }; - Text.prototype.update = function (config) { - this.$lines.moveContainer(config); - this.config = config; - var firstRow = config.firstRow; - var lastRow = config.lastRow; - var lines = this.$lines; - while (lines.getLength()) - lines.pop(); - lines.push(this.$renderLinesFragment(config, firstRow, lastRow)); - }; - Text.prototype.$renderToken = function (parent, screenColumn, token, value) { - var self = this; - var re = /(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC\u2066\u2067\u2068\u202A\u202B\u202D\u202E\u202C\u2069\u2060\u2061\u2062\u2063\u2064\u206A\u206B\u206B\u206C\u206D\u206E\u206F]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g; - var valueFragment = this.dom.createFragment(this.element); - var m; - var i = 0; - while (m = re.exec(value)) { - var tab = m[1]; - var simpleSpace = m[2]; - var controlCharacter = m[3]; - var cjkSpace = m[4]; - var cjk = m[5]; - if (!self.showSpaces && simpleSpace) - continue; - var before = i != m.index ? value.slice(i, m.index) : ""; - i = m.index + m[0].length; - if (before) { - valueFragment.appendChild(this.dom.createTextNode(before, this.element)); - } - if (tab) { - var tabSize = self.session.getScreenTabSize(screenColumn + m.index); - var text = self.$tabStrings[tabSize].cloneNode(true); - text["charCount"] = 1; - valueFragment.appendChild(text); - screenColumn += tabSize - 1; - } - else if (simpleSpace) { - if (self.showSpaces) { - var span = this.dom.createElement("span"); - span.className = "ace_invisible ace_invisible_space"; - span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length); - valueFragment.appendChild(span); - } - else { - valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element)); - } - } - else if (controlCharacter) { - var span = this.dom.createElement("span"); - span.className = "ace_invisible ace_invisible_space ace_invalid"; - span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length); - valueFragment.appendChild(span); - } - else if (cjkSpace) { - screenColumn += 1; - var span = this.dom.createElement("span"); - span.style.width = (self.config.characterWidth * 2) + "px"; - span.className = self.showSpaces ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk"; - span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace; - valueFragment.appendChild(span); - } - else if (cjk) { - screenColumn += 1; - var span = this.dom.createElement("span"); - span.style.width = (self.config.characterWidth * 2) + "px"; - span.className = "ace_cjk"; - span.textContent = cjk; - valueFragment.appendChild(span); - } - } - valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element)); - if (!isTextToken(token.type)) { - var classes = "ace_" + token.type.replace(/\./g, " ace_"); - var span = this.dom.createElement("span"); - if (token.type == "fold") { - span.style.width = (token.value.length * this.config.characterWidth) + "px"; - span.setAttribute("title", nls("inline-fold.closed.title", "Unfold code")); - } - span.className = classes; - span.appendChild(valueFragment); - parent.appendChild(span); - } - else { - parent.appendChild(valueFragment); - } - return screenColumn + value.length; - }; - Text.prototype.renderIndentGuide = function (parent, value, max) { - var cols = value.search(this.$indentGuideRe); - if (cols <= 0 || cols >= max) - return value; - if (value[0] == " ") { - cols -= cols % this.tabSize; - var count = cols / this.tabSize; - for (var i = 0; i < count; i++) { - parent.appendChild(this.$tabStrings[" "].cloneNode(true)); - } - this.$highlightIndentGuide(); - return value.substr(cols); - } - else if (value[0] == "\t") { - for (var i = 0; i < cols; i++) { - parent.appendChild(this.$tabStrings["\t"].cloneNode(true)); - } - this.$highlightIndentGuide(); - return value.substr(cols); - } - this.$highlightIndentGuide(); - return value; - }; - Text.prototype.$highlightIndentGuide = function () { - if (!this.$highlightIndentGuides || !this.displayIndentGuides) - return; - this.$highlightIndentGuideMarker = { - indentLevel: undefined, - start: undefined, - end: undefined, - dir: undefined - }; - var lines = this.session.doc.$lines; - if (!lines) - return; - var cursor = this.session.selection.getCursor(); - var initialIndent = /^\s*/.exec(this.session.doc.getLine(cursor.row))[0].length; - var elementIndentLevel = Math.floor(initialIndent / this.tabSize); - this.$highlightIndentGuideMarker = { - indentLevel: elementIndentLevel, - start: cursor.row - }; - var bracketHighlight = this.session.$bracketHighlight; - if (bracketHighlight) { - var ranges = this.session.$bracketHighlight.ranges; - for (var i = 0; i < ranges.length; i++) { - if (cursor.row !== ranges[i].start.row) { - this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1; - if (cursor.row > ranges[i].start.row) { - this.$highlightIndentGuideMarker.dir = -1; - } - else { - this.$highlightIndentGuideMarker.dir = 1; - } - break; - } - } - } - if (!this.$highlightIndentGuideMarker.end) { - if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) { - this.$highlightIndentGuideMarker.dir = 1; - for (var i = cursor.row + 1; i < lines.length; i++) { - var line = lines[i]; - var currentIndent = /^\s*/.exec(line)[0].length; - if (line !== '') { - this.$highlightIndentGuideMarker.end = i; - if (currentIndent <= initialIndent) - break; - } - } - } - } - this.$renderHighlightIndentGuide(); - }; - Text.prototype.$clearActiveIndentGuide = function () { - var activeIndentGuides = this.element.querySelectorAll(".ace_indent-guide-active"); - for (var i = 0; i < activeIndentGuides.length; i++) { - activeIndentGuides[i].classList.remove("ace_indent-guide-active"); - } - }; - Text.prototype.$setIndentGuideActive = function (cell, indentLevel) { - var line = this.session.doc.getLine(cell.row); - if (line !== "") { - var element = cell.element; - if (cell.element.classList && cell.element.classList.contains("ace_line_group")) { - if (cell.element.childNodes.length > 0) { - element = cell.element.childNodes[0]; - } - else { - return; - } - } - var childNodes = element.childNodes; - if (childNodes) { - var node = childNodes[indentLevel - 1]; - if (node && node.classList && node.classList.contains("ace_indent-guide")) - node.classList.add("ace_indent-guide-active"); - } - } - }; - Text.prototype.$renderHighlightIndentGuide = function () { - if (!this.$lines) - return; - var cells = this.$lines.cells; - this.$clearActiveIndentGuide(); - var indentLevel = this.$highlightIndentGuideMarker.indentLevel; - if (indentLevel !== 0) { - if (this.$highlightIndentGuideMarker.dir === 1) { - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start - + 1) { - if (cell.row >= this.$highlightIndentGuideMarker.end) - break; - this.$setIndentGuideActive(cell, indentLevel); - } - } - } - else { - for (var i = cells.length - 1; i >= 0; i--) { - var cell = cells[i]; - if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) { - if (cell.row < this.$highlightIndentGuideMarker.end) - break; - this.$setIndentGuideActive(cell, indentLevel); - } - } - } - } - }; - Text.prototype.$createLineElement = function (parent) { - var lineEl = this.dom.createElement("div"); - lineEl.className = "ace_line"; - lineEl.style.height = this.config.lineHeight + "px"; - return lineEl; - }; - Text.prototype.$renderWrappedLine = function (parent, tokens, splits) { - var chars = 0; - var split = 0; - var splitChars = splits[0]; - var screenColumn = 0; - var lineEl = this.$createLineElement(); - parent.appendChild(lineEl); - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - var value = token.value; - if (i == 0 && this.displayIndentGuides) { - chars = value.length; - value = this.renderIndentGuide(lineEl, value, splitChars); - if (!value) - continue; - chars -= value.length; - } - if (chars + value.length < splitChars) { - screenColumn = this.$renderToken(lineEl, screenColumn, token, value); - chars += value.length; - } - else { - while (chars + value.length >= splitChars) { - screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars)); - value = value.substring(splitChars - chars); - chars = splitChars; - lineEl = this.$createLineElement(); - parent.appendChild(lineEl); - var text = this.dom.createTextNode(lang.stringRepeat("\xa0", splits.indent), this.element); - text["charCount"] = 0; // not to take into account when we are counting columns - lineEl.appendChild(text); - split++; - screenColumn = 0; - splitChars = splits[split] || Number.MAX_VALUE; - } - if (value.length != 0) { - chars += value.length; - screenColumn = this.$renderToken(lineEl, screenColumn, token, value); - } - } - } - if (splits[splits.length - 1] > this.MAX_LINE_LENGTH) - this.$renderOverflowMessage(lineEl, screenColumn, null, "", true); - }; - Text.prototype.$renderSimpleLine = function (parent, tokens) { - var screenColumn = 0; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - var value = token.value; - if (i == 0 && this.displayIndentGuides) { - value = this.renderIndentGuide(parent, value); - if (!value) - continue; - } - if (screenColumn + value.length > this.MAX_LINE_LENGTH) - return this.$renderOverflowMessage(parent, screenColumn, token, value); - screenColumn = this.$renderToken(parent, screenColumn, token, value); - } - }; - Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) { - token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn)); - var overflowEl = this.dom.createElement("span"); - overflowEl.className = "ace_inline_button ace_keyword ace_toggle_wrap"; - overflowEl.textContent = hide ? "" : ""; - parent.appendChild(overflowEl); - }; - Text.prototype.$renderLine = function (parent, row, foldLine) { - if (!foldLine && foldLine != false) - foldLine = this.session.getFoldLine(row); - if (foldLine) - var tokens = this.$getFoldLineTokens(row, foldLine); - else - var tokens = this.session.getTokens(row); - var lastLineEl = parent; - if (tokens.length) { - var splits = this.session.getRowSplitData(row); - if (splits && splits.length) { - this.$renderWrappedLine(parent, tokens, splits); - var lastLineEl = parent.lastChild; - } - else { - var lastLineEl = parent; - if (this.$useLineGroups()) { - lastLineEl = this.$createLineElement(); - parent.appendChild(lastLineEl); - } - this.$renderSimpleLine(lastLineEl, tokens); - } - } - else if (this.$useLineGroups()) { - lastLineEl = this.$createLineElement(); - parent.appendChild(lastLineEl); - } - if (this.showEOL && lastLineEl) { - if (foldLine) - row = foldLine.end.row; - var invisibleEl = this.dom.createElement("span"); - invisibleEl.className = "ace_invisible ace_invisible_eol"; - invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR; - lastLineEl.appendChild(invisibleEl); - } - }; - Text.prototype.$getFoldLineTokens = function (row, foldLine) { - var session = this.session; - var renderTokens = []; - function addTokens(tokens, from, to) { - var idx = 0, col = 0; - while ((col + tokens[idx].value.length) < from) { - col += tokens[idx].value.length; - idx++; - if (idx == tokens.length) - return; - } - if (col != from) { - var value = tokens[idx].value.substring(from - col); - if (value.length > (to - from)) - value = value.substring(0, to - from); - renderTokens.push({ - type: tokens[idx].type, - value: value - }); - col = from + value.length; - idx += 1; - } - while (col < to && idx < tokens.length) { - var value = tokens[idx].value; - if (value.length + col > to) { - renderTokens.push({ - type: tokens[idx].type, - value: value.substring(0, to - col) - }); - } - else - renderTokens.push(tokens[idx]); - col += value.length; - idx += 1; - } - } - var tokens = session.getTokens(row); - foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) { - if (placeholder != null) { - renderTokens.push({ - type: "fold", - value: placeholder - }); - } - else { - if (isNewRow) - tokens = session.getTokens(row); - if (tokens.length) - addTokens(tokens, lastColumn, column); - } - }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); - return renderTokens; - }; - Text.prototype.$useLineGroups = function () { - return this.session.getUseWrapMode(); - }; - return Text; -}()); -Text.prototype.EOF_CHAR = "\xB6"; -Text.prototype.EOL_CHAR_LF = "\xAC"; -Text.prototype.EOL_CHAR_CRLF = "\xa4"; -Text.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF; -Text.prototype.TAB_CHAR = "\u2014"; //"\u21E5"; -Text.prototype.SPACE_CHAR = "\xB7"; -Text.prototype.$padding = 0; -Text.prototype.MAX_LINE_LENGTH = 10000; -Text.prototype.showInvisibles = false; -Text.prototype.showSpaces = false; -Text.prototype.showTabs = false; -Text.prototype.showEOL = false; -Text.prototype.displayIndentGuides = true; -Text.prototype.$highlightIndentGuides = true; -Text.prototype.$tabStrings = []; -Text.prototype.destroy = {}; -Text.prototype.onChangeTabSize = Text.prototype.$computeTabString; -oop.implement(Text.prototype, EventEmitter); -exports.Text = Text; - -}); - -ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var Cursor = /** @class */ (function () { - function Cursor(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_cursor-layer"; - parentEl.appendChild(this.element); - this.isVisible = false; - this.isBlinking = true; - this.blinkInterval = 1000; - this.smoothBlinking = false; - this.cursors = []; - this.cursor = this.addCursor(); - dom.addCssClass(this.element, "ace_hidden-cursors"); - this.$updateCursors = this.$updateOpacity.bind(this); - } - Cursor.prototype.$updateOpacity = function (val) { - var cursors = this.cursors; - for (var i = cursors.length; i--;) - dom.setStyle(cursors[i].style, "opacity", val ? "" : "0"); - }; - Cursor.prototype.$startCssAnimation = function () { - var cursors = this.cursors; - for (var i = cursors.length; i--;) - cursors[i].style.animationDuration = this.blinkInterval + "ms"; - this.$isAnimating = true; - setTimeout(function () { - if (this.$isAnimating) { - dom.addCssClass(this.element, "ace_animate-blinking"); - } - }.bind(this)); - }; - Cursor.prototype.$stopCssAnimation = function () { - this.$isAnimating = false; - dom.removeCssClass(this.element, "ace_animate-blinking"); - }; - Cursor.prototype.setPadding = function (padding) { - this.$padding = padding; - }; - Cursor.prototype.setSession = function (session) { - this.session = session; - }; - Cursor.prototype.setBlinking = function (blinking) { - if (blinking != this.isBlinking) { - this.isBlinking = blinking; - this.restartTimer(); - } - }; - Cursor.prototype.setBlinkInterval = function (blinkInterval) { - if (blinkInterval != this.blinkInterval) { - this.blinkInterval = blinkInterval; - this.restartTimer(); - } - }; - Cursor.prototype.setSmoothBlinking = function (smoothBlinking) { - if (smoothBlinking != this.smoothBlinking) { - this.smoothBlinking = smoothBlinking; - dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); - this.$updateCursors(true); - this.restartTimer(); - } - }; - Cursor.prototype.addCursor = function () { - var el = dom.createElement("div"); - el.className = "ace_cursor"; - this.element.appendChild(el); - this.cursors.push(el); - return el; - }; - Cursor.prototype.removeCursor = function () { - if (this.cursors.length > 1) { - var el = this.cursors.pop(); - el.parentNode.removeChild(el); - return el; - } - }; - Cursor.prototype.hideCursor = function () { - this.isVisible = false; - dom.addCssClass(this.element, "ace_hidden-cursors"); - this.restartTimer(); - }; - Cursor.prototype.showCursor = function () { - this.isVisible = true; - dom.removeCssClass(this.element, "ace_hidden-cursors"); - this.restartTimer(); - }; - Cursor.prototype.restartTimer = function () { - var update = this.$updateCursors; - clearInterval(this.intervalId); - clearTimeout(this.timeoutId); - this.$stopCssAnimation(); - if (this.smoothBlinking) { - this.$isSmoothBlinking = false; - dom.removeCssClass(this.element, "ace_smooth-blinking"); - } - update(true); - if (!this.isBlinking || !this.blinkInterval || !this.isVisible) { - this.$stopCssAnimation(); - return; - } - if (this.smoothBlinking) { - this.$isSmoothBlinking = true; - setTimeout(function () { - if (this.$isSmoothBlinking) { - dom.addCssClass(this.element, "ace_smooth-blinking"); - } - }.bind(this)); - } - if (dom.HAS_CSS_ANIMATION) { - this.$startCssAnimation(); - } - else { - var blink = /**@this{Cursor}*/ function () { - this.timeoutId = setTimeout(function () { - update(false); - }, 0.6 * this.blinkInterval); - }.bind(this); - this.intervalId = setInterval(function () { - update(true); - blink(); - }, this.blinkInterval); - blink(); - } - }; - Cursor.prototype.getPixelPosition = function (position, onScreen) { - if (!this.config || !this.session) - return { left: 0, top: 0 }; - if (!position) - position = this.session.selection.getCursor(); - var pos = this.session.documentToScreenPosition(position); - var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row) - ? this.session.$bidiHandler.getPosLeft(pos.column) - : pos.column * this.config.characterWidth); - var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * - this.config.lineHeight; - return { left: cursorLeft, top: cursorTop }; - }; - Cursor.prototype.isCursorInView = function (pixelPos, config) { - return pixelPos.top >= 0 && pixelPos.top < config.maxHeight; - }; - Cursor.prototype.update = function (config) { - this.config = config; - var selections = this.session.$selectionMarkers; - var i = 0, cursorIndex = 0; - if (selections === undefined || selections.length === 0) { - selections = [{ cursor: null }]; - } - for (var i = 0, n = selections.length; i < n; i++) { - var pixelPos = this.getPixelPosition(selections[i].cursor, true); - if ((pixelPos.top > config.height + config.offset || - pixelPos.top < 0) && i > 1) { - continue; - } - var element = this.cursors[cursorIndex++] || this.addCursor(); - var style = element.style; - if (!this.drawCursor) { - if (!this.isCursorInView(pixelPos, config)) { - dom.setStyle(style, "display", "none"); - } - else { - dom.setStyle(style, "display", "block"); - dom.translate(element, pixelPos.left, pixelPos.top); - dom.setStyle(style, "width", Math.round(config.characterWidth) + "px"); - dom.setStyle(style, "height", config.lineHeight + "px"); - } - } - else { - this.drawCursor(element, pixelPos, config, selections[i], this.session); - } - } - while (this.cursors.length > cursorIndex) - this.removeCursor(); - var overwrite = this.session.getOverwrite(); - this.$setOverwrite(overwrite); - this.$pixelPos = pixelPos; - this.restartTimer(); - }; - Cursor.prototype.$setOverwrite = function (overwrite) { - if (overwrite != this.overwrite) { - this.overwrite = overwrite; - if (overwrite) - dom.addCssClass(this.element, "ace_overwrite-cursors"); - else - dom.removeCssClass(this.element, "ace_overwrite-cursors"); - } - }; - Cursor.prototype.destroy = function () { - clearInterval(this.intervalId); - clearTimeout(this.timeoutId); - }; - return Cursor; -}()); -Cursor.prototype.$padding = 0; -Cursor.prototype.drawCursor = null; -exports.Cursor = Cursor; - -}); - -ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var event = require("./lib/event"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var MAX_SCROLL_H = 0x8000; -var Scrollbar = /** @class */ (function () { - function Scrollbar(parent, classSuffix) { - this.element = dom.createElement("div"); - this.element.className = "ace_scrollbar ace_scrollbar" + classSuffix; - this.inner = dom.createElement("div"); - this.inner.className = "ace_scrollbar-inner"; - this.inner.textContent = "\xa0"; - this.element.appendChild(this.inner); - parent.appendChild(this.element); - this.setVisible(false); - this.skipEvent = false; - event.addListener(this.element, "scroll", this.onScroll.bind(this)); - event.addListener(this.element, "mousedown", event.preventDefault); - } - Scrollbar.prototype.setVisible = function (isVisible) { - this.element.style.display = isVisible ? "" : "none"; - this.isVisible = isVisible; - this.coeff = 1; - }; - return Scrollbar; -}()); -oop.implement(Scrollbar.prototype, EventEmitter); -var VScrollBar = /** @class */ (function (_super) { - __extends(VScrollBar, _super); - function VScrollBar(parent, renderer) { - var _this = _super.call(this, parent, '-v') || this; - _this.scrollTop = 0; - _this.scrollHeight = 0; - renderer.$scrollbarWidth = - _this.width = dom.scrollbarWidth(parent.ownerDocument); - _this.inner.style.width = - _this.element.style.width = (_this.width || 15) + 5 + "px"; - _this.$minWidth = 0; - return _this; - } - VScrollBar.prototype.onScroll = function () { - if (!this.skipEvent) { - this.scrollTop = this.element.scrollTop; - if (this.coeff != 1) { - var h = this.element.clientHeight / this.scrollHeight; - this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h); - } - this._emit("scroll", { data: this.scrollTop }); - } - this.skipEvent = false; - }; - VScrollBar.prototype.getWidth = function () { - return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0); - }; - VScrollBar.prototype.setHeight = function (height) { - this.element.style.height = height + "px"; - }; - VScrollBar.prototype.setScrollHeight = function (height) { - this.scrollHeight = height; - if (height > MAX_SCROLL_H) { - this.coeff = MAX_SCROLL_H / height; - height = MAX_SCROLL_H; - } - else if (this.coeff != 1) { - this.coeff = 1; - } - this.inner.style.height = height + "px"; - }; - VScrollBar.prototype.setScrollTop = function (scrollTop) { - if (this.scrollTop != scrollTop) { - this.skipEvent = true; - this.scrollTop = scrollTop; - this.element.scrollTop = scrollTop * this.coeff; - } - }; - return VScrollBar; -}(Scrollbar)); -VScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight; -var HScrollBar = /** @class */ (function (_super) { - __extends(HScrollBar, _super); - function HScrollBar(parent, renderer) { - var _this = _super.call(this, parent, '-h') || this; - _this.scrollLeft = 0; - _this.height = renderer.$scrollbarWidth; - _this.inner.style.height = - _this.element.style.height = (_this.height || 15) + 5 + "px"; - return _this; - } - HScrollBar.prototype.onScroll = function () { - if (!this.skipEvent) { - this.scrollLeft = this.element.scrollLeft; - this._emit("scroll", { data: this.scrollLeft }); - } - this.skipEvent = false; - }; - HScrollBar.prototype.getHeight = function () { - return this.isVisible ? this.height : 0; - }; - HScrollBar.prototype.setWidth = function (width) { - this.element.style.width = width + "px"; - }; - HScrollBar.prototype.setInnerWidth = function (width) { - this.inner.style.width = width + "px"; - }; - HScrollBar.prototype.setScrollWidth = function (width) { - this.inner.style.width = width + "px"; - }; - HScrollBar.prototype.setScrollLeft = function (scrollLeft) { - if (this.scrollLeft != scrollLeft) { - this.skipEvent = true; - this.scrollLeft = this.element.scrollLeft = scrollLeft; - } - }; - return HScrollBar; -}(Scrollbar)); -exports.ScrollBar = VScrollBar; // backward compatibility -exports.ScrollBarV = VScrollBar; // backward compatibility -exports.ScrollBarH = HScrollBar; // backward compatibility -exports.VScrollBar = VScrollBar; -exports.HScrollBar = HScrollBar; - -}); - -ace.define("ace/scrollbar_custom",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var event = require("./lib/event"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -dom.importCssString(".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\n position: absolute;\n background: rgba(128, 128, 128, 0.6);\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n border: 1px solid #bbb;\n border-radius: 2px;\n z-index: 8;\n}\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\n position: absolute;\n z-index: 6;\n background: none;\n overflow: hidden!important;\n}\n.ace_editor>.ace_sb-v {\n z-index: 6;\n right: 0;\n top: 0;\n width: 12px;\n}\n.ace_editor>.ace_sb-v div {\n z-index: 8;\n right: 0;\n width: 100%;\n}\n.ace_editor>.ace_sb-h {\n bottom: 0;\n left: 0;\n height: 12px;\n}\n.ace_editor>.ace_sb-h div {\n bottom: 0;\n height: 100%;\n}\n.ace_editor>.ace_sb_grabbed {\n z-index: 8;\n background: #000;\n}", "ace_scrollbar.css", false); -var ScrollBar = /** @class */ (function () { - function ScrollBar(parent, classSuffix) { - this.element = dom.createElement("div"); - this.element.className = "ace_sb" + classSuffix; - this.inner = dom.createElement("div"); - this.inner.className = ""; - this.element.appendChild(this.inner); - this.VScrollWidth = 12; - this.HScrollHeight = 12; - parent.appendChild(this.element); - this.setVisible(false); - this.skipEvent = false; - event.addMultiMouseDownListener(this.element, [500, 300, 300], this, "onMouseDown"); - } - ScrollBar.prototype.setVisible = function (isVisible) { - this.element.style.display = isVisible ? "" : "none"; - this.isVisible = isVisible; - this.coeff = 1; - }; - return ScrollBar; -}()); -oop.implement(ScrollBar.prototype, EventEmitter); -var VScrollBar = /** @class */ (function (_super) { - __extends(VScrollBar, _super); - function VScrollBar(parent, renderer) { - var _this = _super.call(this, parent, '-v') || this; - _this.scrollTop = 0; - _this.scrollHeight = 0; - _this.parent = parent; - _this.width = _this.VScrollWidth; - _this.renderer = renderer; - _this.inner.style.width = _this.element.style.width = (_this.width || 15) + "px"; - _this.$minWidth = 0; - return _this; - } - VScrollBar.prototype.onMouseDown = function (eType, e) { - if (eType !== "mousedown") - return; - if (event.getButton(e) !== 0 || e.detail === 2) { - return; - } - if (e.target === this.inner) { - var self = this; - var mousePageY = e.clientY; - var onMouseMove = function (e) { - mousePageY = e.clientY; - }; - var onMouseUp = function () { - clearInterval(timerId); - }; - var startY = e.clientY; - var startTop = this.thumbTop; - var onScrollInterval = function () { - if (mousePageY === undefined) - return; - var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY); - if (scrollTop === self.scrollTop) - return; - self._emit("scroll", { data: scrollTop }); - }; - event.capture(this.inner, onMouseMove, onMouseUp); - var timerId = setInterval(onScrollInterval, 20); - return event.preventDefault(e); - } - var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2; - this._emit("scroll", { data: this.scrollTopFromThumbTop(top) }); - return event.preventDefault(e); - }; - VScrollBar.prototype.getHeight = function () { - return this.height; - }; - VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) { - var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight); - scrollTop = scrollTop >> 0; - if (scrollTop < 0) { - scrollTop = 0; - } - else if (scrollTop > this.pageHeight - this.viewHeight) { - scrollTop = this.pageHeight - this.viewHeight; - } - return scrollTop; - }; - VScrollBar.prototype.getWidth = function () { - return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0); - }; - VScrollBar.prototype.setHeight = function (height) { - this.height = Math.max(0, height); - this.slideHeight = this.height; - this.viewHeight = this.height; - this.setScrollHeight(this.pageHeight, true); - }; - VScrollBar.prototype.setScrollHeight = function (height, force) { - if (this.pageHeight === height && !force) - return; - this.pageHeight = height; - this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight; - if (this.thumbHeight > this.slideHeight) - this.thumbHeight = this.slideHeight; - if (this.thumbHeight < 15) - this.thumbHeight = 15; - this.inner.style.height = this.thumbHeight + "px"; - if (this.scrollTop > (this.pageHeight - this.viewHeight)) { - this.scrollTop = (this.pageHeight - this.viewHeight); - if (this.scrollTop < 0) - this.scrollTop = 0; - this._emit("scroll", { data: this.scrollTop }); - } - }; - VScrollBar.prototype.setScrollTop = function (scrollTop) { - this.scrollTop = scrollTop; - if (scrollTop < 0) - scrollTop = 0; - this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight); - this.inner.style.top = this.thumbTop + "px"; - }; - return VScrollBar; -}(ScrollBar)); -VScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight; -var HScrollBar = /** @class */ (function (_super) { - __extends(HScrollBar, _super); - function HScrollBar(parent, renderer) { - var _this = _super.call(this, parent, '-h') || this; - _this.scrollLeft = 0; - _this.scrollWidth = 0; - _this.height = _this.HScrollHeight; - _this.inner.style.height = _this.element.style.height = (_this.height || 12) + "px"; - _this.renderer = renderer; - return _this; - } - HScrollBar.prototype.onMouseDown = function (eType, e) { - if (eType !== "mousedown") - return; - if (event.getButton(e) !== 0 || e.detail === 2) { - return; - } - if (e.target === this.inner) { - var self = this; - var mousePageX = e.clientX; - var onMouseMove = function (e) { - mousePageX = e.clientX; - }; - var onMouseUp = function () { - clearInterval(timerId); - }; - var startX = e.clientX; - var startLeft = this.thumbLeft; - var onScrollInterval = function () { - if (mousePageX === undefined) - return; - var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX); - if (scrollLeft === self.scrollLeft) - return; - self._emit("scroll", { data: scrollLeft }); - }; - event.capture(this.inner, onMouseMove, onMouseUp); - var timerId = setInterval(onScrollInterval, 20); - return event.preventDefault(e); - } - var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2; - this._emit("scroll", { data: this.scrollLeftFromThumbLeft(left) }); - return event.preventDefault(e); - }; - HScrollBar.prototype.getHeight = function () { - return this.isVisible ? this.height : 0; - }; - HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) { - var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth); - scrollLeft = scrollLeft >> 0; - if (scrollLeft < 0) { - scrollLeft = 0; - } - else if (scrollLeft > this.pageWidth - this.viewWidth) { - scrollLeft = this.pageWidth - this.viewWidth; - } - return scrollLeft; - }; - HScrollBar.prototype.setWidth = function (width) { - this.width = Math.max(0, width); - this.element.style.width = this.width + "px"; - this.slideWidth = this.width; - this.viewWidth = this.width; - this.setScrollWidth(this.pageWidth, true); - }; - HScrollBar.prototype.setScrollWidth = function (width, force) { - if (this.pageWidth === width && !force) - return; - this.pageWidth = width; - this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth; - if (this.thumbWidth > this.slideWidth) - this.thumbWidth = this.slideWidth; - if (this.thumbWidth < 15) - this.thumbWidth = 15; - this.inner.style.width = this.thumbWidth + "px"; - if (this.scrollLeft > (this.pageWidth - this.viewWidth)) { - this.scrollLeft = (this.pageWidth - this.viewWidth); - if (this.scrollLeft < 0) - this.scrollLeft = 0; - this._emit("scroll", { data: this.scrollLeft }); - } - }; - HScrollBar.prototype.setScrollLeft = function (scrollLeft) { - this.scrollLeft = scrollLeft; - if (scrollLeft < 0) - scrollLeft = 0; - this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth); - this.inner.style.left = (this.thumbLeft) + "px"; - }; - return HScrollBar; -}(ScrollBar)); -HScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth; -exports.ScrollBar = VScrollBar; // backward compatibility -exports.ScrollBarV = VScrollBar; // backward compatibility -exports.ScrollBarH = HScrollBar; // backward compatibility -exports.VScrollBar = VScrollBar; -exports.HScrollBar = HScrollBar; - -}); - -ace.define("ace/renderloop",["require","exports","module","ace/lib/event"], function(require, exports, module){"use strict"; -var event = require("./lib/event"); -var RenderLoop = /** @class */ (function () { - function RenderLoop(onRender, win) { - this.onRender = onRender; - this.pending = false; - this.changes = 0; - this.$recursionLimit = 2; - this.window = win || window; - var _self = this; - this._flush = function (ts) { - _self.pending = false; - var changes = _self.changes; - if (changes) { - event.blockIdle(100); - _self.changes = 0; - _self.onRender(changes); - } - if (_self.changes) { - if (_self.$recursionLimit-- < 0) - return; - _self.schedule(); - } - else { - _self.$recursionLimit = 2; - } - }; - } - RenderLoop.prototype.schedule = function (change) { - this.changes = this.changes | change; - if (this.changes && !this.pending) { - event.nextFrame(this._flush); - this.pending = true; - } - }; - RenderLoop.prototype.clear = function (change) { - var changes = this.changes; - this.changes = 0; - return changes; - }; - return RenderLoop; -}()); -exports.RenderLoop = RenderLoop; - -}); - -ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module){var oop = require("../lib/oop"); -var dom = require("../lib/dom"); -var lang = require("../lib/lang"); -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var CHAR_COUNT = 512; -var USE_OBSERVER = typeof ResizeObserver == "function"; -var L = 200; -var FontMetrics = /** @class */ (function () { - function FontMetrics(parentEl) { - this.el = dom.createElement("div"); - this.$setMeasureNodeStyles(this.el.style, true); - this.$main = dom.createElement("div"); - this.$setMeasureNodeStyles(this.$main.style); - this.$measureNode = dom.createElement("div"); - this.$setMeasureNodeStyles(this.$measureNode.style); - this.el.appendChild(this.$main); - this.el.appendChild(this.$measureNode); - parentEl.appendChild(this.el); - this.$measureNode.textContent = lang.stringRepeat("X", CHAR_COUNT); - this.$characterSize = { width: 0, height: 0 }; - if (USE_OBSERVER) - this.$addObserver(); - else - this.checkForSizeChanges(); - } - FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) { - style.width = style.height = "auto"; - style.left = style.top = "0px"; - style.visibility = "hidden"; - style.position = "absolute"; - style.whiteSpace = "pre"; - if (useragent.isIE < 8) { - style["font-family"] = "inherit"; - } - else { - style.font = "inherit"; - } - style.overflow = isRoot ? "hidden" : "visible"; - }; - FontMetrics.prototype.checkForSizeChanges = function (size) { - if (size === undefined) - size = this.$measureSizes(); - if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { - this.$measureNode.style.fontWeight = "bold"; - var boldSize = this.$measureSizes(); - this.$measureNode.style.fontWeight = ""; - this.$characterSize = size; - this.charSizes = Object.create(null); - this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; - this._emit("changeCharacterSize", { data: size }); - } - }; - FontMetrics.prototype.$addObserver = function () { - var self = this; - this.$observer = new window.ResizeObserver(function (e) { - self.checkForSizeChanges(); - }); - this.$observer.observe(this.$measureNode); - }; - FontMetrics.prototype.$pollSizeChanges = function () { - if (this.$pollSizeChangesTimer || this.$observer) - return this.$pollSizeChangesTimer; - var self = this; - return this.$pollSizeChangesTimer = event.onIdle(function cb() { - self.checkForSizeChanges(); - event.onIdle(cb, 500); - }, 500); - }; - FontMetrics.prototype.setPolling = function (val) { - if (val) { - this.$pollSizeChanges(); - } - else if (this.$pollSizeChangesTimer) { - clearInterval(this.$pollSizeChangesTimer); - this.$pollSizeChangesTimer = 0; - } - }; - FontMetrics.prototype.$measureSizes = function (node) { - var size = { - height: (node || this.$measureNode).clientHeight, - width: (node || this.$measureNode).clientWidth / CHAR_COUNT - }; - if (size.width === 0 || size.height === 0) - return null; - return size; - }; - FontMetrics.prototype.$measureCharWidth = function (ch) { - this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT); - var rect = this.$main.getBoundingClientRect(); - return rect.width / CHAR_COUNT; - }; - FontMetrics.prototype.getCharacterWidth = function (ch) { - var w = this.charSizes[ch]; - if (w === undefined) { - w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width; - } - return w; - }; - FontMetrics.prototype.destroy = function () { - clearInterval(this.$pollSizeChangesTimer); - if (this.$observer) - this.$observer.disconnect(); - if (this.el && this.el.parentNode) - this.el.parentNode.removeChild(this.el); - }; - FontMetrics.prototype.$getZoom = function (element) { - if (!element || !element.parentElement) - return 1; - return (Number(window.getComputedStyle(element)["zoom"]) || 1) * this.$getZoom(element.parentElement); - }; - FontMetrics.prototype.$initTransformMeasureNodes = function () { - var t = function (t, l) { - return ["div", { - style: "position: absolute;top:" + t + "px;left:" + l + "px;" - }]; - }; - this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el); - }; - FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) { - if (clientPos) { - var zoom = this.$getZoom(this.el); - clientPos = mul(1 / zoom, clientPos); - } - function solve(l1, l2, r) { - var det = l1[1] * l2[0] - l1[0] * l2[1]; - return [ - (-l2[1] * r[0] + l2[0] * r[1]) / det, - (+l1[1] * r[0] - l1[0] * r[1]) / det - ]; - } - function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; } - function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; } - function mul(a, b) { return [a * b[0], a * b[1]]; } - if (!this.els) - this.$initTransformMeasureNodes(); - function p(el) { - var r = el.getBoundingClientRect(); - return [r.left, r.top]; - } - var a = p(this.els[0]); - var b = p(this.els[1]); - var c = p(this.els[2]); - var d = p(this.els[3]); - var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a))); - var m1 = mul(1 + h[0], sub(b, a)); - var m2 = mul(1 + h[1], sub(c, a)); - if (elPos) { - var x = elPos; - var k = h[0] * x[0] / L + h[1] * x[1] / L + 1; - var ut = add(mul(x[0], m1), mul(x[1], m2)); - return add(mul(1 / k / L, ut), a); - } - var u = sub(clientPos, a); - var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u); - return mul(L, f); - }; - return FontMetrics; -}()); -FontMetrics.prototype.$characterSize = { width: 0, height: 0 }; -oop.implement(FontMetrics.prototype, EventEmitter); -exports.FontMetrics = FontMetrics; - -}); - -ace.define("ace/css/editor-css",["require","exports","module"], function(require, exports, module){/* -styles = [] -for (var i = 1; i < 16; i++) { - styles.push(".ace_br" + i + "{" + ( - ["top-left", "top-right", "bottom-right", "bottom-left"] - ).map(function(x, j) { - return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\n contain: style size layout;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n}\n\n.ace_hidpi .ace_text-layer,\n.ace_hidpi .ace_gutter-layer,\n.ace_hidpi .ace_content,\n.ace_hidpi .ace_gutter {\n contain: strict;\n}\n.ace_hidpi .ace_text-layer > .ace_line, \n.ace_hidpi .ace_text-layer > .ace_line_group {\n contain: strict;\n}\n\n.ace_cjk {\n display: inline-block;\n text-align: center;\n}\n\n.ace_cursor-layer {\n z-index: 4;\n}\n\n.ace_cursor {\n z-index: 4;\n position: absolute;\n box-sizing: border-box;\n border-left: 2px solid;\n /* workaround for smooth cursor repaintng whole screen in chrome */\n transform: translatez(0);\n}\n\n.ace_multiselect .ace_cursor {\n border-left-width: 1px;\n}\n\n.ace_slim-cursors .ace_cursor {\n border-left-width: 1px;\n}\n\n.ace_overwrite-cursors .ace_cursor {\n border-left-width: 0;\n border-bottom: 1px solid;\n}\n\n.ace_hidden-cursors .ace_cursor {\n opacity: 0.2;\n}\n\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\n opacity: 0;\n}\n\n.ace_smooth-blinking .ace_cursor {\n transition: opacity 0.18s;\n}\n\n.ace_animate-blinking .ace_cursor {\n animation-duration: 1000ms;\n animation-timing-function: step-end;\n animation-name: blink-ace-animate;\n animation-iteration-count: infinite;\n}\n\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\n animation-duration: 1000ms;\n animation-timing-function: ease-in-out;\n animation-name: blink-ace-animate-smooth;\n}\n \n@keyframes blink-ace-animate {\n from, to { opacity: 1; }\n 60% { opacity: 0; }\n}\n\n@keyframes blink-ace-animate-smooth {\n from, to { opacity: 1; }\n 45% { opacity: 1; }\n 60% { opacity: 0; }\n 85% { opacity: 0; }\n}\n\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\n position: absolute;\n z-index: 3;\n}\n\n.ace_marker-layer .ace_selection {\n position: absolute;\n z-index: 5;\n}\n\n.ace_marker-layer .ace_bracket {\n position: absolute;\n z-index: 6;\n}\n\n.ace_marker-layer .ace_error_bracket {\n position: absolute;\n border-bottom: 1px solid #DE5555;\n border-radius: 0;\n}\n\n.ace_marker-layer .ace_active-line {\n position: absolute;\n z-index: 2;\n}\n\n.ace_marker-layer .ace_selected-word {\n position: absolute;\n z-index: 4;\n box-sizing: border-box;\n}\n\n.ace_line .ace_fold {\n box-sizing: border-box;\n\n display: inline-block;\n height: 11px;\n margin-top: -2px;\n vertical-align: middle;\n\n background-image:\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n color: transparent;\n\n border: 1px solid black;\n border-radius: 2px;\n\n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_dark .ace_fold {\n}\n\n.ace_fold:hover{\n background-image:\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\n}\n\n.ace_tooltip {\n background-color: #f5f5f5;\n border: 1px solid gray;\n border-radius: 1px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n color: black;\n padding: 3px 4px;\n position: absolute;\n z-index: 999999;\n box-sizing: border-box;\n cursor: default;\n white-space: pre-wrap;\n word-wrap: break-word;\n line-height: normal;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n pointer-events: none;\n overflow: auto;\n max-width: min(33em, 66vw);\n overscroll-behavior: contain;\n}\n.ace_tooltip pre {\n white-space: pre-wrap;\n}\n\n.ace_tooltip.ace_dark {\n background-color: #636363;\n color: #fff;\n}\n\n.ace_tooltip:focus {\n outline: 1px solid #5E9ED6;\n}\n\n.ace_icon {\n display: inline-block;\n width: 18px;\n vertical-align: top;\n}\n\n.ace_icon_svg {\n display: inline-block;\n width: 12px;\n vertical-align: top;\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-size: 12px;\n -webkit-mask-position: center;\n}\n\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\n padding-right: 13px;\n}\n\n.ace_fold-widget, .ace_custom-widget {\n box-sizing: border-box;\n\n margin: 0 -12px 0 1px;\n display: none;\n width: 11px;\n vertical-align: top;\n\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\n background-repeat: no-repeat;\n background-position: center;\n\n border-radius: 3px;\n \n border: 1px solid transparent;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_custom-widget {\n background: none;\n}\n\n.ace_folding-enabled .ace_fold-widget {\n display: inline-block; \n}\n\n.ace_fold-widget.ace_end {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\n}\n\n.ace_fold-widget.ace_closed {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\n}\n\n.ace_fold-widget:hover {\n border: 1px solid rgba(0, 0, 0, 0.3);\n background-color: rgba(255, 255, 255, 0.2);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n}\n\n.ace_fold-widget:active {\n border: 1px solid rgba(0, 0, 0, 0.4);\n background-color: rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n}\n/**\n * Dark version for fold widgets\n */\n.ace_dark .ace_fold-widget {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\n}\n.ace_dark .ace_fold-widget.ace_end {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget.ace_closed {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget:hover {\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n background-color: rgba(255, 255, 255, 0.1);\n}\n.ace_dark .ace_fold-widget:active {\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n}\n\n.ace_inline_button {\n border: 1px solid lightgray;\n display: inline-block;\n margin: -1px 8px;\n padding: 0 5px;\n pointer-events: auto;\n cursor: pointer;\n}\n.ace_inline_button:hover {\n border-color: gray;\n background: rgba(200,200,200,0.2);\n display: inline-block;\n pointer-events: auto;\n}\n\n.ace_fold-widget.ace_invalid {\n background-color: #FFB4B4;\n border-color: #DE5555;\n}\n\n.ace_fade-fold-widgets .ace_fold-widget {\n transition: opacity 0.4s ease 0.05s;\n opacity: 0;\n}\n\n.ace_fade-fold-widgets:hover .ace_fold-widget {\n transition: opacity 0.05s ease 0.05s;\n opacity:1;\n}\n\n.ace_underline {\n text-decoration: underline;\n}\n\n.ace_bold {\n font-weight: bold;\n}\n\n.ace_nobold .ace_bold {\n font-weight: normal;\n}\n\n.ace_italic {\n font-style: italic;\n}\n\n\n.ace_error-marker {\n background-color: rgba(255, 0, 0,0.2);\n position: absolute;\n z-index: 9;\n}\n\n.ace_highlight-marker {\n background-color: rgba(255, 255, 0,0.2);\n position: absolute;\n z-index: 8;\n}\n\n.ace_mobile-menu {\n position: absolute;\n line-height: 1.5;\n border-radius: 4px;\n -ms-user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n background: white;\n box-shadow: 1px 3px 2px grey;\n border: 1px solid #dcdcdc;\n color: black;\n}\n.ace_dark > .ace_mobile-menu {\n background: #333;\n color: #ccc;\n box-shadow: 1px 3px 2px grey;\n border: 1px solid #444;\n\n}\n.ace_mobile-button {\n padding: 2px;\n cursor: pointer;\n overflow: hidden;\n}\n.ace_mobile-button:hover {\n background-color: #eee;\n opacity:1;\n}\n.ace_mobile-button:active {\n background-color: #ddd;\n}\n\n.ace_placeholder {\n position: relative;\n font-family: arial;\n transform: scale(0.9);\n transform-origin: left;\n white-space: pre;\n opacity: 0.7;\n margin: 0 10px;\n z-index: 1;\n}\n\n.ace_ghost_text {\n opacity: 0.5;\n font-style: italic;\n}\n\n.ace_ghost_text_container > div {\n white-space: pre;\n}\n\n.ghost_text_line_wrapped::after {\n content: \"\u21A9\";\n position: absolute;\n}\n\n.ace_lineWidgetContainer.ace_ghost_text {\n margin: 0px 4px\n}\n\n.ace_screenreader-only {\n position:absolute;\n left:-10000px;\n top:auto;\n width:1px;\n height:1px;\n overflow:hidden;\n}\n\n.ace_hidden_token {\n display: none;\n}"; - -}); - -ace.define("ace/layer/decorators",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; -var dom = require("../lib/dom"); -var oop = require("../lib/oop"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var Decorator = /** @class */ (function () { - function Decorator(scrollbarV, renderer) { - this.renderer = renderer; - this.pixelRatio = 1; - this.maxHeight = renderer.layerConfig.maxHeight; - this.lineHeight = renderer.layerConfig.lineHeight; - this.minDecorationHeight = (2 * this.pixelRatio) | 0; - this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0; - this.colors = {}; - this.colors.dark = { - "error": "rgba(255, 18, 18, 1)", - "warning": "rgba(18, 136, 18, 1)", - "info": "rgba(18, 18, 136, 1)", - }; - this.colors.light = { - "error": "rgb(255,51,51)", - "warning": "rgb(32,133,72)", - "info": "rgb(35,68,138)", - }; - this.setScrollBarV(scrollbarV); - } - Decorator.prototype.$createCanvas = function () { - this.canvas = dom.createElement("canvas"); - this.canvas.style.top = 0 + "px"; - this.canvas.style.right = 0 + "px"; - this.canvas.style.zIndex = "7"; - this.canvas.style.position = "absolute"; - }; - Decorator.prototype.setScrollBarV = function (scrollbarV) { - this.$createCanvas(); - this.scrollbarV = scrollbarV; - scrollbarV.element.appendChild(this.canvas); - this.setDimensions(); - }; - Decorator.prototype.$updateDecorators = function (config) { - if (typeof this.canvas.getContext !== "function") { - return; - } - var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light; - this.setDimensions(config); - var ctx = this.canvas.getContext("2d"); - function compare(a, b) { - if (a.priority < b.priority) - return -1; - if (a.priority > b.priority) - return 1; - return 0; - } - var annotations = this.renderer.session.$annotations; - ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); - if (annotations) { - var priorities = { - "info": 1, - "warning": 2, - "error": 3 - }; - annotations.forEach(function (item) { - item["priority"] = priorities[item.type] || null; - }); - annotations = annotations.sort(compare); - for (var i = 0; i < annotations.length; i++) { - var row = annotations[i].row; - var offset1 = this.getVerticalOffsetForRow(row); - var offset2 = offset1 + this.lineHeight; - var y1 = Math.round(this.heightRatio * offset1); - var y2 = Math.round(this.heightRatio * offset2); - var ycenter = Math.round((y1 + y2) / 2); - var halfHeight = (y2 - ycenter); - if (halfHeight < this.halfMinDecorationHeight) { - halfHeight = this.halfMinDecorationHeight; - } - if (ycenter - halfHeight < 0) { - ycenter = halfHeight; - } - if (ycenter + halfHeight > this.canvasHeight) { - ycenter = this.canvasHeight - halfHeight; - } - var from = ycenter - halfHeight; - var to = ycenter + halfHeight; - var zoneHeight = to - from; - ctx.fillStyle = colors[annotations[i].type] || null; - ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight); - } - } - var cursor = this.renderer.session.selection.getCursor(); - if (cursor) { - var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio); - ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; - ctx.fillRect(0, currentY, this.canvasWidth, 2); - } - }; - Decorator.prototype.getVerticalOffsetForRow = function (row) { - row = row | 0; - var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight; - return offset; - }; - Decorator.prototype.setDimensions = function (config) { - config = config || this.renderer.layerConfig; - this.maxHeight = config.maxHeight; - this.lineHeight = config.lineHeight; - this.canvasHeight = config.height; - this.canvasWidth = this.scrollbarV.width || this.canvasWidth; - this.setZoneWidth(); - this.canvas.width = this.canvasWidth; - this.canvas.height = this.canvasHeight; - if (this.maxHeight < this.canvasHeight) { - this.heightRatio = 1; - } - else { - this.heightRatio = this.canvasHeight / this.maxHeight; - } - }; - Decorator.prototype.setZoneWidth = function () { - this.oneZoneWidth = this.canvasWidth; - }; - Decorator.prototype.destroy = function () { - this.canvas.parentNode.removeChild(this.canvas); - }; - return Decorator; -}()); -oop.implement(Decorator.prototype, EventEmitter); -exports.Decorator = Decorator; - -}); - -ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/scrollbar_custom","ace/scrollbar_custom","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/css/editor-css","ace/layer/decorators","ace/lib/useragent","ace/layer/text_util"], function(require, exports, module){"use strict"; -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var lang = require("./lib/lang"); -var config = require("./config"); -var GutterLayer = require("./layer/gutter").Gutter; -var MarkerLayer = require("./layer/marker").Marker; -var TextLayer = require("./layer/text").Text; -var CursorLayer = require("./layer/cursor").Cursor; -var HScrollBar = require("./scrollbar").HScrollBar; -var VScrollBar = require("./scrollbar").VScrollBar; -var HScrollBarCustom = require("./scrollbar_custom").HScrollBar; -var VScrollBarCustom = require("./scrollbar_custom").VScrollBar; -var RenderLoop = require("./renderloop").RenderLoop; -var FontMetrics = require("./layer/font_metrics").FontMetrics; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var editorCss = require("./css/editor-css"); -var Decorator = require("./layer/decorators").Decorator; -var useragent = require("./lib/useragent"); -var isTextToken = require("./layer/text_util").isTextToken; -dom.importCssString(editorCss, "ace_editor.css", false); -var VirtualRenderer = /** @class */ (function () { - function VirtualRenderer(container, theme) { - var _self = this; - this.container = container || dom.createElement("div"); - dom.addCssClass(this.container, "ace_editor"); - if (dom.HI_DPI) - dom.addCssClass(this.container, "ace_hidpi"); - this.setTheme(theme); - if (config.get("useStrictCSP") == null) - config.set("useStrictCSP", false); - this.$gutter = dom.createElement("div"); - this.$gutter.className = "ace_gutter"; - this.container.appendChild(this.$gutter); - this.$gutter.setAttribute("aria-hidden", "true"); - this.scroller = dom.createElement("div"); - this.scroller.className = "ace_scroller"; - this.container.appendChild(this.scroller); - this.content = dom.createElement("div"); - this.content.className = "ace_content"; - this.scroller.appendChild(this.content); - this.$gutterLayer = new GutterLayer(this.$gutter); - this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); - this.$markerBack = new MarkerLayer(this.content); - var textLayer = this.$textLayer = new TextLayer(this.content); - this.canvas = textLayer.element; - this.$markerFront = new MarkerLayer(this.content); - this.$cursorLayer = new CursorLayer(this.content); - this.$horizScroll = false; - this.$vScroll = false; - this.scrollBar = - this.scrollBarV = new VScrollBar(this.container, this); - this.scrollBarH = new HScrollBar(this.container, this); - this.scrollBarV.on("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollTop(e.data - _self.scrollMargin.top); - }); - this.scrollBarH.on("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollLeft(e.data - _self.scrollMargin.left); - }); - this.scrollTop = 0; - this.scrollLeft = 0; - this.cursorPos = { - row: 0, - column: 0 - }; - this.$fontMetrics = new FontMetrics(this.container); - this.$textLayer.$setFontMetrics(this.$fontMetrics); - this.$textLayer.on("changeCharacterSize", function (e) { - _self.updateCharacterSize(); - _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height); - _self._signal("changeCharacterSize", e); - }); - this.$size = { - width: 0, - height: 0, - scrollerHeight: 0, - scrollerWidth: 0, - $dirty: true - }; - this.layerConfig = { - width: 1, - padding: 0, - firstRow: 0, - firstRowScreen: 0, - lastRow: 0, - lineHeight: 0, - characterWidth: 0, - minHeight: 1, - maxHeight: 1, - offset: 0, - height: 1, - gutterOffset: 1 - }; - this.scrollMargin = { - left: 0, - right: 0, - top: 0, - bottom: 0, - v: 0, - h: 0 - }; - this.margin = { - left: 0, - right: 0, - top: 0, - bottom: 0, - v: 0, - h: 0 - }; - this.$keepTextAreaAtCursor = !useragent.isIOS; - this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView); - this.$loop.schedule(this.CHANGE_FULL); - this.updateCharacterSize(); - this.setPadding(4); - this.$addResizeObserver(); - config.resetOptions(this); - config._signal("renderer", this); - } - VirtualRenderer.prototype.updateCharacterSize = function () { - if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { - this.$allowBoldFonts = this.$textLayer.allowBoldFonts; - this.setStyle("ace_nobold", !this.$allowBoldFonts); - } - this.layerConfig.characterWidth = - this.characterWidth = this.$textLayer.getCharacterWidth(); - this.layerConfig.lineHeight = - this.lineHeight = this.$textLayer.getLineHeight(); - this.$updatePrintMargin(); - dom.setStyle(this.scroller.style, "line-height", this.lineHeight + "px"); - }; - VirtualRenderer.prototype.setSession = function (session) { - if (this.session) - this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode); - this.session = session; - if (session && this.scrollMargin.top && session.getScrollTop() <= 0) - session.setScrollTop(-this.scrollMargin.top); - this.$cursorLayer.setSession(session); - this.$markerBack.setSession(session); - this.$markerFront.setSession(session); - this.$gutterLayer.setSession(session); - this.$textLayer.setSession(session); - if (!session) - return; - this.$loop.schedule(this.CHANGE_FULL); - this.session.$setFontMetrics(this.$fontMetrics); - this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null; - this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this); - this.onChangeNewLineMode(); - this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode); - }; - VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) { - if (lastRow === undefined) - lastRow = Infinity; - if (!this.$changedLines) { - this.$changedLines = { - firstRow: firstRow, - lastRow: lastRow - }; - } - else { - if (this.$changedLines.firstRow > firstRow) - this.$changedLines.firstRow = firstRow; - if (this.$changedLines.lastRow < lastRow) - this.$changedLines.lastRow = lastRow; - } - if (this.$changedLines.lastRow < this.layerConfig.firstRow) { - if (force) - this.$changedLines.lastRow = this.layerConfig.lastRow; - else - return; - } - if (this.$changedLines.firstRow > this.layerConfig.lastRow) - return; - this.$loop.schedule(this.CHANGE_LINES); - }; - VirtualRenderer.prototype.onChangeNewLineMode = function () { - this.$loop.schedule(this.CHANGE_TEXT); - this.$textLayer.$updateEolChar(); - this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR); - }; - VirtualRenderer.prototype.onChangeTabSize = function () { - this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); - this.$textLayer.onChangeTabSize(); - }; - VirtualRenderer.prototype.updateText = function () { - this.$loop.schedule(this.CHANGE_TEXT); - }; - VirtualRenderer.prototype.updateFull = function (force) { - if (force) - this.$renderChanges(this.CHANGE_FULL, true); - else - this.$loop.schedule(this.CHANGE_FULL); - }; - VirtualRenderer.prototype.updateFontSize = function () { - this.$textLayer.checkForSizeChanges(); - }; - VirtualRenderer.prototype.$updateSizeAsync = function () { - if (this.$loop.pending) - this.$size.$dirty = true; - else - this.onResize(); - }; - VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) { - if (this.resizing > 2) - return; - else if (this.resizing > 0) - this.resizing++; - else - this.resizing = force ? 1 : 0; - var el = this.container; - if (!height) - height = el.clientHeight || el.scrollHeight; - if (!height && this.$maxLines && this.lineHeight > 1) { - if (!el.style.height || el.style.height == "0px") { - el.style.height = "1px"; - height = el.clientHeight || el.scrollHeight; - } - } - if (!width) - width = el.clientWidth || el.scrollWidth; - var changes = this.$updateCachedSize(force, gutterWidth, width, height); - if (this.$resizeTimer) - this.$resizeTimer.cancel(); - if (!this.$size.scrollerHeight || (!width && !height)) - return this.resizing = 0; - if (force) - this.$gutterLayer.$padding = null; - if (force) - this.$renderChanges(changes | this.$changes, true); - else - this.$loop.schedule(changes | this.$changes); - if (this.resizing) - this.resizing = 0; - this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null; - if (this.$customScrollbar) { - this.$updateCustomScrollbar(true); - } - }; - VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) { - height -= (this.$extraHeight || 0); - var changes = 0; - var size = this.$size; - var oldSize = { - width: size.width, - height: size.height, - scrollerHeight: size.scrollerHeight, - scrollerWidth: size.scrollerWidth - }; - if (height && (force || size.height != height)) { - size.height = height; - changes |= this.CHANGE_SIZE; - size.scrollerHeight = size.height; - if (this.$horizScroll) - size.scrollerHeight -= this.scrollBarH.getHeight(); - this.scrollBarV.setHeight(size.scrollerHeight); - this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; - changes = changes | this.CHANGE_SCROLL; - } - if (width && (force || size.width != width)) { - changes |= this.CHANGE_SIZE; - size.width = width; - if (gutterWidth == null) - gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; - this.gutterWidth = gutterWidth; - dom.setStyle(this.scrollBarH.element.style, "left", gutterWidth + "px"); - dom.setStyle(this.scroller.style, "left", gutterWidth + this.margin.left + "px"); - size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h); - dom.setStyle(this.$gutter.style, "left", this.margin.left + "px"); - var right = this.scrollBarV.getWidth() + "px"; - dom.setStyle(this.scrollBarH.element.style, "right", right); - dom.setStyle(this.scroller.style, "right", right); - dom.setStyle(this.scroller.style, "bottom", this.scrollBarH.getHeight()); - this.scrollBarH.setWidth(size.scrollerWidth); - if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) { - changes |= this.CHANGE_FULL; - } - } - size.$dirty = !width || !height; - if (changes) - this._signal("resize", oldSize); - return changes; - }; - VirtualRenderer.prototype.onGutterResize = function (width) { - var gutterWidth = this.$showGutter ? width : 0; - if (gutterWidth != this.gutterWidth) - this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); - if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { - this.$loop.schedule(this.CHANGE_FULL); - } - else if (this.$size.$dirty) { - this.$loop.schedule(this.CHANGE_FULL); - } - else { - this.$computeLayerConfig(); - } - }; - VirtualRenderer.prototype.adjustWrapLimit = function () { - var availableWidth = this.$size.scrollerWidth - this.$padding * 2; - var limit = Math.floor(availableWidth / this.characterWidth); - return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); - }; - VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) { - this.setOption("animatedScroll", shouldAnimate); - }; - VirtualRenderer.prototype.getAnimatedScroll = function () { - return this.$animatedScroll; - }; - VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) { - this.setOption("showInvisibles", showInvisibles); - this.session.$bidiHandler.setShowInvisibles(showInvisibles); - }; - VirtualRenderer.prototype.getShowInvisibles = function () { - return this.getOption("showInvisibles"); - }; - VirtualRenderer.prototype.getDisplayIndentGuides = function () { - return this.getOption("displayIndentGuides"); - }; - VirtualRenderer.prototype.setDisplayIndentGuides = function (display) { - this.setOption("displayIndentGuides", display); - }; - VirtualRenderer.prototype.getHighlightIndentGuides = function () { - return this.getOption("highlightIndentGuides"); - }; - VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) { - this.setOption("highlightIndentGuides", highlight); - }; - VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) { - this.setOption("showPrintMargin", showPrintMargin); - }; - VirtualRenderer.prototype.getShowPrintMargin = function () { - return this.getOption("showPrintMargin"); - }; - VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) { - this.setOption("printMarginColumn", printMarginColumn); - }; - VirtualRenderer.prototype.getPrintMarginColumn = function () { - return this.getOption("printMarginColumn"); - }; - VirtualRenderer.prototype.getShowGutter = function () { - return this.getOption("showGutter"); - }; - VirtualRenderer.prototype.setShowGutter = function (show) { - return this.setOption("showGutter", show); - }; - VirtualRenderer.prototype.getFadeFoldWidgets = function () { - return this.getOption("fadeFoldWidgets"); - }; - VirtualRenderer.prototype.setFadeFoldWidgets = function (show) { - this.setOption("fadeFoldWidgets", show); - }; - VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) { - this.setOption("highlightGutterLine", shouldHighlight); - }; - VirtualRenderer.prototype.getHighlightGutterLine = function () { - return this.getOption("highlightGutterLine"); - }; - VirtualRenderer.prototype.$updatePrintMargin = function () { - if (!this.$showPrintMargin && !this.$printMarginEl) - return; - if (!this.$printMarginEl) { - var containerEl = dom.createElement("div"); - containerEl.className = "ace_layer ace_print-margin-layer"; - this.$printMarginEl = dom.createElement("div"); - this.$printMarginEl.className = "ace_print-margin"; - containerEl.appendChild(this.$printMarginEl); - this.content.insertBefore(containerEl, this.content.firstChild); - } - var style = this.$printMarginEl.style; - style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + "px"; - style.visibility = this.$showPrintMargin ? "visible" : "hidden"; - if (this.session && this.session.$wrap == -1) - this.adjustWrapLimit(); - }; - VirtualRenderer.prototype.getContainerElement = function () { - return this.container; - }; - VirtualRenderer.prototype.getMouseEventTarget = function () { - return this.scroller; - }; - VirtualRenderer.prototype.getTextAreaContainer = function () { - return this.container; - }; - VirtualRenderer.prototype.$moveTextAreaToCursor = function () { - if (this.$isMousePressed) - return; - var style = this.textarea.style; - var composition = this.$composition; - if (!this.$keepTextAreaAtCursor && !composition) { - dom.translate(this.textarea, -100, 0); - return; - } - var pixelPos = this.$cursorLayer.$pixelPos; - if (!pixelPos) - return; - if (composition && composition.markerRange) - pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true); - var config = this.layerConfig; - var posTop = pixelPos.top; - var posLeft = pixelPos.left; - posTop -= config.offset; - var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1; - if (posTop < 0 || posTop > config.height - h) { - dom.translate(this.textarea, 0, 0); - return; - } - var w = 1; - var maxTop = this.$size.height - h; - if (!composition) { - posTop += this.lineHeight; - } - else { - if (composition.useTextareaForIME) { - var val = this.textarea.value; - w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]); - } - else { - posTop += this.lineHeight + 2; - } - } - posLeft -= this.scrollLeft; - if (posLeft > this.$size.scrollerWidth - w) - posLeft = this.$size.scrollerWidth - w; - posLeft += this.gutterWidth + this.margin.left; - dom.setStyle(style, "height", h + "px"); - dom.setStyle(style, "width", w + "px"); - dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop)); - }; - VirtualRenderer.prototype.getFirstVisibleRow = function () { - return this.layerConfig.firstRow; - }; - VirtualRenderer.prototype.getFirstFullyVisibleRow = function () { - return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); - }; - VirtualRenderer.prototype.getLastFullyVisibleRow = function () { - var config = this.layerConfig; - var lastRow = config.lastRow; - var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight; - if (top - this.session.getScrollTop() > config.height - config.lineHeight) - return lastRow - 1; - return lastRow; - }; - VirtualRenderer.prototype.getLastVisibleRow = function () { - return this.layerConfig.lastRow; - }; - VirtualRenderer.prototype.setPadding = function (padding) { - this.$padding = padding; - this.$textLayer.setPadding(padding); - this.$cursorLayer.setPadding(padding); - this.$markerFront.setPadding(padding); - this.$markerBack.setPadding(padding); - this.$loop.schedule(this.CHANGE_FULL); - this.$updatePrintMargin(); - }; - VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) { - var sm = this.scrollMargin; - sm.top = top | 0; - sm.bottom = bottom | 0; - sm.right = right | 0; - sm.left = left | 0; - sm.v = sm.top + sm.bottom; - sm.h = sm.left + sm.right; - if (sm.top && this.scrollTop <= 0 && this.session) - this.session.setScrollTop(-sm.top); - this.updateFull(); - }; - VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) { - var sm = this.margin; - sm.top = top | 0; - sm.bottom = bottom | 0; - sm.right = right | 0; - sm.left = left | 0; - sm.v = sm.top + sm.bottom; - sm.h = sm.left + sm.right; - this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height); - this.updateFull(); - }; - VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () { - return this.$hScrollBarAlwaysVisible; - }; - VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) { - this.setOption("hScrollBarAlwaysVisible", alwaysVisible); - }; - VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () { - return this.$vScrollBarAlwaysVisible; - }; - VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) { - this.setOption("vScrollBarAlwaysVisible", alwaysVisible); - }; - VirtualRenderer.prototype.$updateScrollBarV = function () { - var scrollHeight = this.layerConfig.maxHeight; - var scrollerHeight = this.$size.scrollerHeight; - if (!this.$maxLines && this.$scrollPastEnd) { - scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd; - if (this.scrollTop > scrollHeight - scrollerHeight) { - scrollHeight = this.scrollTop + scrollerHeight; - this.scrollBarV.scrollTop = null; - } - } - this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v); - this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); - }; - VirtualRenderer.prototype.$updateScrollBarH = function () { - this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); - this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); - }; - VirtualRenderer.prototype.freeze = function () { - this.$frozen = true; - }; - VirtualRenderer.prototype.unfreeze = function () { - this.$frozen = false; - }; - VirtualRenderer.prototype.$renderChanges = function (changes, force) { - if (this.$changes) { - changes |= this.$changes; - this.$changes = 0; - } - if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) { - this.$changes |= changes; - return; - } - if (this.$size.$dirty) { - this.$changes |= changes; - return this.onResize(true); - } - if (!this.lineHeight) { - this.$textLayer.checkForSizeChanges(); - } - this._signal("beforeRender", changes); - if (this.session && this.session.$bidiHandler) - this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics); - var config = this.layerConfig; - if (changes & this.CHANGE_FULL || - changes & this.CHANGE_SIZE || - changes & this.CHANGE_TEXT || - changes & this.CHANGE_LINES || - changes & this.CHANGE_SCROLL || - changes & this.CHANGE_H_SCROLL) { - changes |= this.$computeLayerConfig() | this.$loop.clear(); - if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) { - var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight; - if (st > 0) { - this.scrollTop = st; - changes = changes | this.CHANGE_SCROLL; - changes |= this.$computeLayerConfig() | this.$loop.clear(); - } - } - config = this.layerConfig; - this.$updateScrollBarV(); - if (changes & this.CHANGE_H_SCROLL) - this.$updateScrollBarH(); - dom.translate(this.content, -this.scrollLeft, -config.offset); - var width = config.width + 2 * this.$padding + "px"; - var height = config.minHeight + "px"; - dom.setStyle(this.content.style, "width", width); - dom.setStyle(this.content.style, "height", height); - } - if (changes & this.CHANGE_H_SCROLL) { - dom.translate(this.content, -this.scrollLeft, -config.offset); - this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller " : "ace_scroller ace_scroll-left "; - if (this.enableKeyboardAccessibility) - this.scroller.className += this.keyboardFocusClassName; - } - if (changes & this.CHANGE_FULL) { - this.$changedLines = null; - this.$textLayer.update(config); - if (this.$showGutter) - this.$gutterLayer.update(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } - this.$markerBack.update(config); - this.$markerFront.update(config); - this.$cursorLayer.update(config); - this.$moveTextAreaToCursor(); - this._signal("afterRender", changes); - return; - } - if (changes & this.CHANGE_SCROLL) { - this.$changedLines = null; - if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) - this.$textLayer.update(config); - else - this.$textLayer.scrollLines(config); - if (this.$showGutter) { - if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES) - this.$gutterLayer.update(config); - else - this.$gutterLayer.scrollLines(config); - } - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } - this.$markerBack.update(config); - this.$markerFront.update(config); - this.$cursorLayer.update(config); - this.$moveTextAreaToCursor(); - this._signal("afterRender", changes); - return; - } - if (changes & this.CHANGE_TEXT) { - this.$changedLines = null; - this.$textLayer.update(config); - if (this.$showGutter) - this.$gutterLayer.update(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } - } - else if (changes & this.CHANGE_LINES) { - if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) - this.$gutterLayer.update(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } - } - else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { - if (this.$showGutter) - this.$gutterLayer.update(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } - } - else if (changes & this.CHANGE_CURSOR) { - if (this.$highlightGutterLine) - this.$gutterLayer.updateLineHighlight(config); - if (this.$customScrollbar) { - this.$scrollDecorator.$updateDecorators(config); - } - } - if (changes & this.CHANGE_CURSOR) { - this.$cursorLayer.update(config); - this.$moveTextAreaToCursor(); - } - if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { - this.$markerFront.update(config); - } - if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { - this.$markerBack.update(config); - } - this._signal("afterRender", changes); - }; - VirtualRenderer.prototype.$autosize = function () { - var height = this.session.getScreenLength() * this.lineHeight; - var maxHeight = this.$maxLines * this.lineHeight; - var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0); - if (this.$horizScroll) - desiredHeight += this.scrollBarH.getHeight(); - if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight) - desiredHeight = this.$maxPixelHeight; - var hideScrollbars = desiredHeight <= 2 * this.lineHeight; - var vScroll = !hideScrollbars && height > maxHeight; - if (desiredHeight != this.desiredHeight || - this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { - if (vScroll != this.$vScroll) { - this.$vScroll = vScroll; - this.scrollBarV.setVisible(vScroll); - } - var w = this.container.clientWidth; - this.container.style.height = desiredHeight + "px"; - this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); - this.desiredHeight = desiredHeight; - this._signal("autosize"); - } - }; - VirtualRenderer.prototype.$computeLayerConfig = function () { - var session = this.session; - var size = this.$size; - var hideScrollbars = size.height <= 2 * this.lineHeight; - var screenLines = this.session.getScreenLength(); - var maxHeight = screenLines * this.lineHeight; - var longestLine = this.$getLongestLine(); - var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || - size.scrollerWidth - longestLine - 2 * this.$padding < 0); - var hScrollChanged = this.$horizScroll !== horizScroll; - if (hScrollChanged) { - this.$horizScroll = horizScroll; - this.scrollBarH.setVisible(horizScroll); - } - var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine - if (this.$maxLines && this.lineHeight > 1) { - this.$autosize(); - hideScrollbars = size.height <= 2 * this.lineHeight; - } - var minHeight = size.scrollerHeight + this.lineHeight; - var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd - ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd - : 0; - maxHeight += scrollPastEnd; - var sm = this.scrollMargin; - this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom))); - this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right))); - var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || - size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top); - var vScrollChanged = vScrollBefore !== vScroll; - if (vScrollChanged) { - this.$vScroll = vScroll; - this.scrollBarV.setVisible(vScroll); - } - var offset = this.scrollTop % this.lineHeight; - var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; - var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); - var lastRow = firstRow + lineCount; - var firstRowScreen, firstRowHeight; - var lineHeight = this.lineHeight; - firstRow = session.screenToDocumentRow(firstRow, 0); - var foldLine = session.getFoldLine(firstRow); - if (foldLine) { - firstRow = foldLine.start.row; - } - firstRowScreen = session.documentToScreenRow(firstRow, 0); - firstRowHeight = session.getRowLength(firstRow) * lineHeight; - lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); - minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + - firstRowHeight; - offset = this.scrollTop - firstRowScreen * lineHeight; - if (offset < 0 && firstRowScreen > 0) { - firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight)); - offset = this.scrollTop - firstRowScreen * lineHeight; - } - var changes = 0; - if (this.layerConfig.width != longestLine || hScrollChanged) - changes = this.CHANGE_H_SCROLL; - if (hScrollChanged || vScrollChanged) { - changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height); - this._signal("scrollbarVisibilityChanged"); - if (vScrollChanged) - longestLine = this.$getLongestLine(); - } - this.layerConfig = { - width: longestLine, - padding: this.$padding, - firstRow: firstRow, - firstRowScreen: firstRowScreen, - lastRow: lastRow, - lineHeight: lineHeight, - characterWidth: this.characterWidth, - minHeight: minHeight, - maxHeight: maxHeight, - offset: offset, - gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0, - height: this.$size.scrollerHeight - }; - if (this.session.$bidiHandler) - this.session.$bidiHandler.setContentWidth(longestLine - this.$padding); - return changes; - }; - VirtualRenderer.prototype.$updateLines = function () { - if (!this.$changedLines) - return; - var firstRow = this.$changedLines.firstRow; - var lastRow = this.$changedLines.lastRow; - this.$changedLines = null; - var layerConfig = this.layerConfig; - if (firstRow > layerConfig.lastRow + 1) { - return; - } - if (lastRow < layerConfig.firstRow) { - return; - } - if (lastRow === Infinity) { - if (this.$showGutter) - this.$gutterLayer.update(layerConfig); - this.$textLayer.update(layerConfig); - return; - } - this.$textLayer.updateLines(layerConfig, firstRow, lastRow); - return true; - }; - VirtualRenderer.prototype.$getLongestLine = function () { - var charCount = this.session.getScreenWidth(); - if (this.showInvisibles && !this.session.$useWrapMode) - charCount += 1; - if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH) - charCount = this.$textLayer.MAX_LINE_LENGTH + 30; - return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); - }; - VirtualRenderer.prototype.updateFrontMarkers = function () { - this.$markerFront.setMarkers(this.session.getMarkers(true)); - this.$loop.schedule(this.CHANGE_MARKER_FRONT); - }; - VirtualRenderer.prototype.updateBackMarkers = function () { - this.$markerBack.setMarkers(this.session.getMarkers()); - this.$loop.schedule(this.CHANGE_MARKER_BACK); - }; - VirtualRenderer.prototype.addGutterDecoration = function (row, className) { - this.$gutterLayer.addGutterDecoration(row, className); - }; - VirtualRenderer.prototype.removeGutterDecoration = function (row, className) { - this.$gutterLayer.removeGutterDecoration(row, className); - }; - VirtualRenderer.prototype.updateBreakpoints = function (rows) { - this._rows = rows; - this.$loop.schedule(this.CHANGE_GUTTER); - }; - VirtualRenderer.prototype.setAnnotations = function (annotations) { - this.$gutterLayer.setAnnotations(annotations); - this.$loop.schedule(this.CHANGE_GUTTER); - }; - VirtualRenderer.prototype.updateCursor = function () { - this.$loop.schedule(this.CHANGE_CURSOR); - }; - VirtualRenderer.prototype.hideCursor = function () { - this.$cursorLayer.hideCursor(); - }; - VirtualRenderer.prototype.showCursor = function () { - this.$cursorLayer.showCursor(); - }; - VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) { - this.scrollCursorIntoView(anchor, offset); - this.scrollCursorIntoView(lead, offset); - }; - VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) { - if (this.$size.scrollerHeight === 0) - return; - var pos = this.$cursorLayer.getPixelPosition(cursor); - var newLeft = pos.left; - var newTop = pos.top; - var topMargin = $viewMargin && $viewMargin.top || 0; - var bottomMargin = $viewMargin && $viewMargin.bottom || 0; - if (this.$scrollAnimation) { - this.$stopAnimation = true; - } - var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; - if (currentTop + topMargin > newTop) { - if (offset && currentTop + topMargin > newTop + this.lineHeight) - newTop -= offset * this.$size.scrollerHeight; - if (newTop === 0) - newTop = -this.scrollMargin.top; - this.session.setScrollTop(newTop); - } - else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) { - if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight) - newTop += offset * this.$size.scrollerHeight; - this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight); - } - var currentLeft = this.scrollLeft; - var twoCharsWidth = 2 * this.layerConfig.characterWidth; - if (newLeft - twoCharsWidth < currentLeft) { - newLeft -= twoCharsWidth; - if (newLeft < this.$padding + twoCharsWidth) { - newLeft = -this.scrollMargin.left; - } - this.session.setScrollLeft(newLeft); - } - else { - newLeft += twoCharsWidth; - if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) { - this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth)); - } - else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) { - this.session.setScrollLeft(0); - } - } - }; - VirtualRenderer.prototype.getScrollTop = function () { - return this.session.getScrollTop(); - }; - VirtualRenderer.prototype.getScrollLeft = function () { - return this.session.getScrollLeft(); - }; - VirtualRenderer.prototype.getScrollTopRow = function () { - return this.scrollTop / this.lineHeight; - }; - VirtualRenderer.prototype.getScrollBottomRow = function () { - return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); - }; - VirtualRenderer.prototype.scrollToRow = function (row) { - this.session.setScrollTop(row * this.lineHeight); - }; - VirtualRenderer.prototype.alignCursor = function (cursor, alignment) { - if (typeof cursor == "number") - cursor = { row: cursor, column: 0 }; - var pos = this.$cursorLayer.getPixelPosition(cursor); - var h = this.$size.scrollerHeight - this.lineHeight; - var offset = pos.top - h * (alignment || 0); - this.session.setScrollTop(offset); - return offset; - }; - VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) { - var i = 0; - var l = this.STEPS; - var steps = []; - var func = function (t, x_min, dx) { - return dx * (Math.pow(t - 1, 3) + 1) + x_min; - }; - for (i = 0; i < l; ++i) - steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); - return steps; - }; - VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) { - var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 }); - var offset = pos.top; - if (center) - offset -= this.$size.scrollerHeight / 2; - var initialScroll = this.scrollTop; - this.session.setScrollTop(offset); - if (animate !== false) - this.animateScrolling(initialScroll, callback); - }; - VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) { - var toValue = this.scrollTop; - if (!this.$animatedScroll) - return; - var _self = this; - if (fromValue == toValue) - return; - if (this.$scrollAnimation) { - var oldSteps = this.$scrollAnimation.steps; - if (oldSteps.length) { - fromValue = oldSteps[0]; - if (fromValue == toValue) - return; - } - } - var steps = _self.$calcSteps(fromValue, toValue); - this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps }; - clearInterval(this.$timer); - _self.session.setScrollTop(steps.shift()); - _self.session.$scrollTop = toValue; - function endAnimation() { - _self.$timer = clearInterval(_self.$timer); - _self.$scrollAnimation = null; - _self.$stopAnimation = false; - callback && callback(); - } - this.$timer = setInterval(function () { - if (_self.$stopAnimation) { - endAnimation(); - return; - } - if (!_self.session) - return clearInterval(_self.$timer); - if (steps.length) { - _self.session.setScrollTop(steps.shift()); - _self.session.$scrollTop = toValue; - } - else if (toValue != null) { - _self.session.$scrollTop = -1; - _self.session.setScrollTop(toValue); - toValue = null; - } - else { - endAnimation(); - } - }, 10); - }; - VirtualRenderer.prototype.scrollToY = function (scrollTop) { - if (this.scrollTop !== scrollTop) { - this.$loop.schedule(this.CHANGE_SCROLL); - this.scrollTop = scrollTop; - } - }; - VirtualRenderer.prototype.scrollToX = function (scrollLeft) { - if (this.scrollLeft !== scrollLeft) - this.scrollLeft = scrollLeft; - this.$loop.schedule(this.CHANGE_H_SCROLL); - }; - VirtualRenderer.prototype.scrollTo = function (x, y) { - this.session.setScrollTop(y); - this.session.setScrollLeft(x); - }; - VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) { - deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); - deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); - }; - VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) { - if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) - return true; - if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) - return true; - if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) - return true; - if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - - this.layerConfig.width < -1 + this.scrollMargin.right) - return true; - }; - VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) { - var canvasPos; - if (this.$hasCssTransforms) { - canvasPos = { top: 0, left: 0 }; - var p = this.$fontMetrics.transformCoordinates([x, y]); - x = p[1] - this.gutterWidth - this.margin.left; - y = p[0]; - } - else { - canvasPos = this.scroller.getBoundingClientRect(); - } - var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding; - var offset = offsetX / this.characterWidth; - var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); - var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset); - return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX }; - }; - VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) { - var canvasPos; - if (this.$hasCssTransforms) { - canvasPos = { top: 0, left: 0 }; - var p = this.$fontMetrics.transformCoordinates([x, y]); - x = p[1] - this.gutterWidth - this.margin.left; - y = p[0]; - } - else { - canvasPos = this.scroller.getBoundingClientRect(); - } - var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding; - var offset = offsetX / this.characterWidth; - var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset); - var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); - return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX); - }; - VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) { - var canvasPos = this.scroller.getBoundingClientRect(); - var pos = this.session.documentToScreenPosition(row, column); - var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row) - ? this.session.$bidiHandler.getPosLeft(pos.column) - : Math.round(pos.column * this.characterWidth)); - var y = pos.row * this.lineHeight; - return { - pageX: canvasPos.left + x - this.scrollLeft, - pageY: canvasPos.top + y - this.scrollTop - }; - }; - VirtualRenderer.prototype.visualizeFocus = function () { - dom.addCssClass(this.container, "ace_focus"); - }; - VirtualRenderer.prototype.visualizeBlur = function () { - dom.removeCssClass(this.container, "ace_focus"); - }; - VirtualRenderer.prototype.showComposition = function (composition) { - this.$composition = composition; - if (!composition.cssText) { - composition.cssText = this.textarea.style.cssText; - } - if (composition.useTextareaForIME == undefined) - composition.useTextareaForIME = this.$useTextareaForIME; - if (this.$useTextareaForIME) { - dom.addCssClass(this.textarea, "ace_composition"); - this.textarea.style.cssText = ""; - this.$moveTextAreaToCursor(); - this.$cursorLayer.element.style.display = "none"; - } - else { - composition.markerId = this.session.addMarker(composition.markerRange, "ace_composition_marker", "text"); - } - }; - VirtualRenderer.prototype.setCompositionText = function (text) { - var cursor = this.session.selection.cursor; - this.addToken(text, "composition_placeholder", cursor.row, cursor.column); - this.$moveTextAreaToCursor(); - }; - VirtualRenderer.prototype.hideComposition = function () { - if (!this.$composition) - return; - if (this.$composition.markerId) - this.session.removeMarker(this.$composition.markerId); - dom.removeCssClass(this.textarea, "ace_composition"); - this.textarea.style.cssText = this.$composition.cssText; - var cursor = this.session.selection.cursor; - this.removeExtraToken(cursor.row, cursor.column); - this.$composition = null; - this.$cursorLayer.element.style.display = ""; - }; - VirtualRenderer.prototype.setGhostText = function (text, position) { - var cursor = this.session.selection.cursor; - var insertPosition = position || { row: cursor.row, column: cursor.column }; - this.removeGhostText(); - var textChunks = this.$calculateWrappedTextChunks(text, insertPosition); - this.addToken(textChunks[0].text, "ghost_text", insertPosition.row, insertPosition.column); - this.$ghostText = { - text: text, - position: { - row: insertPosition.row, - column: insertPosition.column - } - }; - var widgetDiv = dom.createElement("div"); - if (textChunks.length > 1) { - var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column); - var lastLineDiv; - textChunks.slice(1).forEach(function (el) { - var chunkDiv = dom.createElement("div"); - var chunkSpan = dom.createElement("span"); - chunkSpan.className = "ace_ghost_text"; - if (el.wrapped) - chunkDiv.className = "ghost_text_line_wrapped"; - if (el.text.length === 0) - el.text = " "; - chunkSpan.appendChild(dom.createTextNode(el.text)); - chunkDiv.appendChild(chunkSpan); - widgetDiv.appendChild(chunkDiv); - lastLineDiv = chunkDiv; - }); - hiddenTokens.forEach(function (token) { - var element = dom.createElement("span"); - if (!isTextToken(token.type)) - element.className = "ace_" + token.type.replace(/\./g, " ace_"); - element.appendChild(dom.createTextNode(token.value)); - lastLineDiv.appendChild(element); - }); - this.$ghostTextWidget = { - el: widgetDiv, - row: insertPosition.row, - column: insertPosition.column, - className: "ace_ghost_text_container" - }; - this.session.widgetManager.addLineWidget(this.$ghostTextWidget); - var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true); - var el = this.container; - var height = el.getBoundingClientRect().height; - var ghostTextHeight = textChunks.length * this.lineHeight; - var fitsY = ghostTextHeight < (height - pixelPosition.top); - if (fitsY) - return; - if (ghostTextHeight < height) { - this.scrollBy(0, (textChunks.length - 1) * this.lineHeight); - } - else { - this.scrollToRow(insertPosition.row); - } - } - }; - VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) { - var availableWidth = this.$size.scrollerWidth - this.$padding * 2; - var limit = Math.floor(availableWidth / this.characterWidth) - 2; - limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small - var textLines = text.split(/\r?\n/); - var textChunks = []; - for (var i = 0; i < textLines.length; i++) { - var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column); - var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize); - if (wrapSplits.length > 0) { - var start = 0; - wrapSplits.push(textLines[i].length); - for (var j = 0; j < wrapSplits.length; j++) { - var textSlice = textLines[i].slice(start, wrapSplits[j]); - textChunks.push({ text: textSlice, wrapped: true }); - start = wrapSplits[j]; - } - } - else { - textChunks.push({ text: textLines[i], wrapped: false }); - } - } - return textChunks; - }; - VirtualRenderer.prototype.removeGhostText = function () { - if (!this.$ghostText) - return; - var position = this.$ghostText.position; - this.removeExtraToken(position.row, position.column); - if (this.$ghostTextWidget) { - this.session.widgetManager.removeLineWidget(this.$ghostTextWidget); - this.$ghostTextWidget = null; - } - this.$ghostText = null; - }; - VirtualRenderer.prototype.addToken = function (text, type, row, column) { - var session = this.session; - session.bgTokenizer.lines[row] = null; - var newToken = { type: type, value: text }; - var tokens = session.getTokens(row); - if (column == null || !tokens.length) { - tokens.push(newToken); - } - else { - var l = 0; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - l += token.value.length; - if (column <= l) { - var diff = token.value.length - (l - column); - var before = token.value.slice(0, diff); - var after = token.value.slice(diff); - tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after }); - break; - } - } - } - this.updateLines(row, row); - }; - VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) { - var tokens = this.session.getTokens(row); - var l = 0; - var hasPassedCursor = false; - var hiddenTokens = []; - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - l += token.value.length; - if (token.type === "ghost_text") - continue; - if (hasPassedCursor) { - hiddenTokens.push({ type: token.type, value: token.value }); - token.type = "hidden_token"; - continue; - } - if (l === column) { - hasPassedCursor = true; - } - } - this.updateLines(row, row); - return hiddenTokens; - }; - VirtualRenderer.prototype.removeExtraToken = function (row, column) { - this.session.bgTokenizer.lines[row] = null; - this.updateLines(row, row); - }; - VirtualRenderer.prototype.setTheme = function (theme, cb) { - var _self = this; - this.$themeId = theme; - _self._dispatchEvent('themeChange', { theme: theme }); - if (!theme || typeof theme == "string") { - var moduleName = theme || this.$options.theme.initialValue; - config.loadModule(["theme", moduleName], afterLoad); - } - else { - afterLoad(theme); - } - function afterLoad(module) { - if (_self.$themeId != theme) - return cb && cb(); - if (!module || !module.cssClass) - throw new Error("couldn't load module " + theme + " or it didn't call define"); - if (module.$id) - _self.$themeId = module.$id; - dom.importCssString(module.cssText, module.cssClass, _self.container); - if (_self.theme) - dom.removeCssClass(_self.container, _self.theme.cssClass); - var padding = "padding" in module ? module.padding - : "padding" in (_self.theme || {}) ? 4 : _self.$padding; - if (_self.$padding && padding != _self.$padding) - _self.setPadding(padding); - _self.$theme = module.cssClass; - _self.theme = module; - dom.addCssClass(_self.container, module.cssClass); - dom.setCssClass(_self.container, "ace_dark", module.isDark); - if (_self.$size) { - _self.$size.width = 0; - _self.$updateSizeAsync(); - } - _self._dispatchEvent('themeLoaded', { theme: module }); - cb && cb(); - if (useragent.isSafari && _self.scroller) { - _self.scroller.style.background = "red"; - _self.scroller.style.background = ""; - } - } - }; - VirtualRenderer.prototype.getTheme = function () { - return this.$themeId; - }; - VirtualRenderer.prototype.setStyle = function (style, include) { - dom.setCssClass(this.container, style, include !== false); - }; - VirtualRenderer.prototype.unsetStyle = function (style) { - dom.removeCssClass(this.container, style); - }; - VirtualRenderer.prototype.setCursorStyle = function (style) { - dom.setStyle(this.scroller.style, "cursor", style); - }; - VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) { - dom.setStyle(this.scroller.style, "cursor", cursorStyle); - }; - VirtualRenderer.prototype.attachToShadowRoot = function () { - dom.importCssString(editorCss, "ace_editor.css", this.container); - }; - VirtualRenderer.prototype.destroy = function () { - this.freeze(); - this.$fontMetrics.destroy(); - this.$cursorLayer.destroy(); - this.removeAllListeners(); - this.container.textContent = ""; - this.setOption("useResizeObserver", false); - }; - VirtualRenderer.prototype.$updateCustomScrollbar = function (val) { - var _self = this; - this.$horizScroll = this.$vScroll = null; - this.scrollBarV.element.remove(); - this.scrollBarH.element.remove(); - if (val === true) { - this.scrollBarV = new VScrollBarCustom(this.container, this); - this.scrollBarH = new HScrollBarCustom(this.container, this); - this.scrollBarV.setHeight(this.$size.scrollerHeight); - this.scrollBarH.setWidth(this.$size.scrollerWidth); - this.scrollBarV.addEventListener("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollTop(e.data - _self.scrollMargin.top); - }); - this.scrollBarH.addEventListener("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollLeft(e.data - _self.scrollMargin.left); - }); - if (!this.$scrollDecorator) { - this.$scrollDecorator = new Decorator(this.scrollBarV, this); - this.$scrollDecorator.$updateDecorators(); - } - else { - this.$scrollDecorator.setScrollBarV(this.scrollBarV); - this.$scrollDecorator.$updateDecorators(); - } - } - else { - this.scrollBarV = new VScrollBar(this.container, this); - this.scrollBarH = new HScrollBar(this.container, this); - this.scrollBarV.addEventListener("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollTop(e.data - _self.scrollMargin.top); - }); - this.scrollBarH.addEventListener("scroll", function (e) { - if (!_self.$scrollAnimation) - _self.session.setScrollLeft(e.data - _self.scrollMargin.left); - }); - } - }; - VirtualRenderer.prototype.$addResizeObserver = function () { - if (!window.ResizeObserver || this.$resizeObserver) - return; - var self = this; - this.$resizeTimer = lang.delayedCall(function () { - if (!self.destroyed) - self.onResize(); - }, 50); - this.$resizeObserver = new window.ResizeObserver(function (e) { - var w = e[0].contentRect.width; - var h = e[0].contentRect.height; - if (Math.abs(self.$size.width - w) > 1 - || Math.abs(self.$size.height - h) > 1) { - self.$resizeTimer.delay(); - } - else { - self.$resizeTimer.cancel(); - } - }); - this.$resizeObserver.observe(this.container); - }; - return VirtualRenderer; -}()); -VirtualRenderer.prototype.CHANGE_CURSOR = 1; -VirtualRenderer.prototype.CHANGE_MARKER = 2; -VirtualRenderer.prototype.CHANGE_GUTTER = 4; -VirtualRenderer.prototype.CHANGE_SCROLL = 8; -VirtualRenderer.prototype.CHANGE_LINES = 16; -VirtualRenderer.prototype.CHANGE_TEXT = 32; -VirtualRenderer.prototype.CHANGE_SIZE = 64; -VirtualRenderer.prototype.CHANGE_MARKER_BACK = 128; -VirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256; -VirtualRenderer.prototype.CHANGE_FULL = 512; -VirtualRenderer.prototype.CHANGE_H_SCROLL = 1024; -VirtualRenderer.prototype.$changes = 0; -VirtualRenderer.prototype.$padding = null; -VirtualRenderer.prototype.$frozen = false; -VirtualRenderer.prototype.STEPS = 8; -oop.implement(VirtualRenderer.prototype, EventEmitter); -config.defineOptions(VirtualRenderer.prototype, "renderer", { - useResizeObserver: { - set: function (value) { - if (!value && this.$resizeObserver) { - this.$resizeObserver.disconnect(); - this.$resizeTimer.cancel(); - this.$resizeTimer = this.$resizeObserver = null; - } - else if (value && !this.$resizeObserver) { - this.$addResizeObserver(); - } - } - }, - animatedScroll: { initialValue: false }, - showInvisibles: { - set: function (value) { - if (this.$textLayer.setShowInvisibles(value)) - this.$loop.schedule(this.CHANGE_TEXT); - }, - initialValue: false - }, - showPrintMargin: { - set: function () { this.$updatePrintMargin(); }, - initialValue: true - }, - printMarginColumn: { - set: function () { this.$updatePrintMargin(); }, - initialValue: 80 - }, - printMargin: { - set: function (val) { - if (typeof val == "number") - this.$printMarginColumn = val; - this.$showPrintMargin = !!val; - this.$updatePrintMargin(); - }, - get: function () { - return this.$showPrintMargin && this.$printMarginColumn; - } - }, - showGutter: { - set: function (show) { - this.$gutter.style.display = show ? "block" : "none"; - this.$loop.schedule(this.CHANGE_FULL); - this.onGutterResize(); - }, - initialValue: true - }, - useSvgGutterIcons: { - set: function (value) { - this.$gutterLayer.$useSvgGutterIcons = value; - }, - initialValue: false - }, - showFoldedAnnotations: { - set: function (value) { - this.$gutterLayer.$showFoldedAnnotations = value; - }, - initialValue: false - }, - fadeFoldWidgets: { - set: function (show) { - dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); - }, - initialValue: false - }, - showFoldWidgets: { - set: function (show) { - this.$gutterLayer.setShowFoldWidgets(show); - this.$loop.schedule(this.CHANGE_GUTTER); - }, - initialValue: true - }, - displayIndentGuides: { - set: function (show) { - if (this.$textLayer.setDisplayIndentGuides(show)) - this.$loop.schedule(this.CHANGE_TEXT); - }, - initialValue: true - }, - highlightIndentGuides: { - set: function (show) { - if (this.$textLayer.setHighlightIndentGuides(show) == true) { - this.$textLayer.$highlightIndentGuide(); - } - else { - this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells); - } - }, - initialValue: true - }, - highlightGutterLine: { - set: function (shouldHighlight) { - this.$gutterLayer.setHighlightGutterLine(shouldHighlight); - this.$loop.schedule(this.CHANGE_GUTTER); - }, - initialValue: true - }, - hScrollBarAlwaysVisible: { - set: function (val) { - if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) - this.$loop.schedule(this.CHANGE_SCROLL); - }, - initialValue: false - }, - vScrollBarAlwaysVisible: { - set: function (val) { - if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) - this.$loop.schedule(this.CHANGE_SCROLL); - }, - initialValue: false - }, - fontSize: { - set: function (size) { - if (typeof size == "number") - size = size + "px"; - this.container.style.fontSize = size; - this.updateFontSize(); - }, - initialValue: 12 - }, - fontFamily: { - set: function (name) { - this.container.style.fontFamily = name; - this.updateFontSize(); - } - }, - maxLines: { - set: function (val) { - this.updateFull(); - } - }, - minLines: { - set: function (val) { - if (!(this.$minLines < 0x1ffffffffffff)) - this.$minLines = 0; - this.updateFull(); - } - }, - maxPixelHeight: { - set: function (val) { - this.updateFull(); - }, - initialValue: 0 - }, - scrollPastEnd: { - set: function (val) { - val = +val || 0; - if (this.$scrollPastEnd == val) - return; - this.$scrollPastEnd = val; - this.$loop.schedule(this.CHANGE_SCROLL); - }, - initialValue: 0, - handlesSet: true - }, - fixedWidthGutter: { - set: function (val) { - this.$gutterLayer.$fixedWidth = !!val; - this.$loop.schedule(this.CHANGE_GUTTER); - } - }, - customScrollbar: { - set: function (val) { - this.$updateCustomScrollbar(val); - }, - initialValue: false - }, - theme: { - set: function (val) { this.setTheme(val); }, - get: function () { return this.$themeId || this.theme; }, - initialValue: "./theme/textmate", - handlesSet: true - }, - hasCssTransforms: {}, - useTextareaForIME: { - initialValue: !useragent.isMobile && !useragent.isIE - } -}); -exports.VirtualRenderer = VirtualRenderer; - -}); - -ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(require, exports, module) { -"use strict"; - -var oop = require("../lib/oop"); -var net = require("../lib/net"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var config = require("../config"); - -function $workerBlob(workerUrl) { - var script = "importScripts('" + net.qualifyURL(workerUrl) + "');"; - try { - return new Blob([script], {"type": "application/javascript"}); - } catch (e) { // Backwards-compatibility - var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; - var blobBuilder = new BlobBuilder(); - blobBuilder.append(script); - return blobBuilder.getBlob("application/javascript"); - } -} - -function createWorker(workerUrl) { - if (typeof Worker == "undefined") - return { postMessage: function() {}, terminate: function() {} }; - if (config.get("loadWorkerFromBlob")) { - var blob = $workerBlob(workerUrl); - var URL = window.URL || window.webkitURL; - var blobURL = URL.createObjectURL(blob); - return new Worker(blobURL); - } - return new Worker(workerUrl); -} - -var WorkerClient = function(worker) { - if (!worker.postMessage) - worker = this.$createWorkerFromOldConfig.apply(this, arguments); - - this.$worker = worker; - this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); - this.changeListener = this.changeListener.bind(this); - this.onMessage = this.onMessage.bind(this); - - this.callbackId = 1; - this.callbacks = {}; - - this.$worker.onmessage = this.onMessage; -}; - -(function(){ - - oop.implement(this, EventEmitter); - - this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) { - if (require.nameToUrl && !require.toUrl) - require.toUrl = require.nameToUrl; - - if (config.get("packaged") || !require.toUrl) { - workerUrl = workerUrl || config.moduleUrl(mod, "worker"); - } else { - var normalizePath = this.$normalizePath; - workerUrl = workerUrl || normalizePath(require.toUrl("ace/worker/worker.js", null, "_")); - - var tlns = {}; - topLevelNamespaces.forEach(function(ns) { - tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); - }); - } - - this.$worker = createWorker(workerUrl); - if (importScripts) { - this.send("importScripts", importScripts); - } - this.$worker.postMessage({ - init : true, - tlns : tlns, - module : mod, - classname : classname - }); - return this.$worker; - }; - - this.onMessage = function(e) { - var msg = e.data; - switch (msg.type) { - case "event": - this._signal(msg.name, {data: msg.data}); - break; - case "call": - var callback = this.callbacks[msg.id]; - if (callback) { - callback(msg.data); - delete this.callbacks[msg.id]; - } - break; - case "error": - this.reportError(msg.data); - break; - case "log": - window.console && console.log && console.log.apply(console, msg.data); - break; - } - }; - - this.reportError = function(err) { - window.console && console.error && console.error(err); - }; - - this.$normalizePath = function(path) { - return net.qualifyURL(path); - }; - - this.terminate = function() { - this._signal("terminate", {}); - this.deltaQueue = null; - this.$worker.terminate(); - this.$worker.onerror = function(e) { - e.preventDefault(); - }; - this.$worker = null; - if (this.$doc) - this.$doc.off("change", this.changeListener); - this.$doc = null; - }; - - this.send = function(cmd, args) { - this.$worker.postMessage({command: cmd, args: args}); - }; - - this.call = function(cmd, args, callback) { - if (callback) { - var id = this.callbackId++; - this.callbacks[id] = callback; - args.push(id); - } - this.send(cmd, args); - }; - - this.emit = function(event, data) { - try { - if (data.data && data.data.err) - data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code}; - this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}}); - } - catch(ex) { - console.error(ex.stack); - } - }; - - this.attachToDocument = function(doc) { - if (this.$doc) - this.terminate(); - - this.$doc = doc; - this.call("setValue", [doc.getValue()]); - doc.on("change", this.changeListener, true); - }; - - this.changeListener = function(delta) { - if (!this.deltaQueue) { - this.deltaQueue = []; - setTimeout(this.$sendDeltaQueue, 0); - } - if (delta.action == "insert") - this.deltaQueue.push(delta.start, delta.lines); - else - this.deltaQueue.push(delta.start, delta.end); - }; - - this.$sendDeltaQueue = function() { - var q = this.deltaQueue; - if (!q) return; - this.deltaQueue = null; - if (q.length > 50 && q.length > this.$doc.getLength() >> 1) { - this.call("setValue", [this.$doc.getValue()]); - } else - this.emit("change", {data: q}); - }; - -}).call(WorkerClient.prototype); - - -var UIWorkerClient = function(topLevelNamespaces, mod, classname) { - var main = null; - var emitSync = false; - var sender = Object.create(EventEmitter); - - var messageBuffer = []; - var workerClient = new WorkerClient({ - messageBuffer: messageBuffer, - terminate: function() {}, - postMessage: function(e) { - messageBuffer.push(e); - if (!main) return; - if (emitSync) - setTimeout(processNext); - else - processNext(); - } - }); - - workerClient.setEmitSync = function(val) { emitSync = val; }; - - var processNext = function() { - var msg = messageBuffer.shift(); - if (msg.command) - main[msg.command].apply(main, msg.args); - else if (msg.event) - sender._signal(msg.event, msg.data); - }; - - sender.postMessage = function(msg) { - workerClient.onMessage({data: msg}); - }; - sender.callback = function(data, callbackId) { - this.postMessage({type: "call", id: callbackId, data: data}); - }; - sender.emit = function(name, data) { - this.postMessage({type: "event", name: name, data: data}); - }; - - config.loadModule(["worker", mod], function(Main) { - main = new Main[classname](sender); - while (messageBuffer.length) - processNext(); - }); - - return workerClient; -}; - -exports.UIWorkerClient = UIWorkerClient; -exports.WorkerClient = WorkerClient; -exports.createWorker = createWorker; - - -}); - -ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(require, exports, module){"use strict"; -var Range = require("./range").Range; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var oop = require("./lib/oop"); -var PlaceHolder = /** @class */ (function () { - function PlaceHolder(session, length, pos, others, mainClass, othersClass) { - var _self = this; - this.length = length; - this.session = session; - this.doc = session.getDocument(); - this.mainClass = mainClass; - this.othersClass = othersClass; - this.$onUpdate = this.onUpdate.bind(this); - this.doc.on("change", this.$onUpdate, true); - this.$others = others; - this.$onCursorChange = function () { - setTimeout(function () { - _self.onCursorChange(); - }); - }; - this.$pos = pos; - var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()["$undostack"] || { length: -1 }; - this.$undoStackDepth = undoStack.length; - this.setup(); - session.selection.on("changeCursor", this.$onCursorChange); - } - PlaceHolder.prototype.setup = function () { - var _self = this; - var doc = this.doc; - var session = this.session; - this.selectionBefore = session.selection.toJSON(); - if (session.selection.inMultiSelectMode) - session.selection.toSingleRange(); - this.pos = doc.createAnchor(this.$pos.row, this.$pos.column); - var pos = this.pos; - pos.$insertRight = true; - pos.detach(); - pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); - this.others = []; - this.$others.forEach(function (other) { - var anchor = doc.createAnchor(other.row, other.column); - anchor.$insertRight = true; - anchor.detach(); - _self.others.push(anchor); - }); - session.setUndoSelect(false); - }; - PlaceHolder.prototype.showOtherMarkers = function () { - if (this.othersActive) - return; - var session = this.session; - var _self = this; - this.othersActive = true; - this.others.forEach(function (anchor) { - anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false); - }); - }; - PlaceHolder.prototype.hideOtherMarkers = function () { - if (!this.othersActive) - return; - this.othersActive = false; - for (var i = 0; i < this.others.length; i++) { - this.session.removeMarker(this.others[i].markerId); - } - }; - PlaceHolder.prototype.onUpdate = function (delta) { - if (this.$updating) - return this.updateAnchors(delta); - var range = delta; - if (range.start.row !== range.end.row) - return; - if (range.start.row !== this.pos.row) - return; - this.$updating = true; - var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column; - var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1; - var distanceFromStart = range.start.column - this.pos.column; - this.updateAnchors(delta); - if (inMainRange) - this.length += lengthDiff; - if (inMainRange && !this.session.$fromUndo) { - if (delta.action === 'insert') { - for (var i = this.others.length - 1; i >= 0; i--) { - var otherPos = this.others[i]; - var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart }; - this.doc.insertMergedLines(newPos, delta.lines); - } - } - else if (delta.action === 'remove') { - for (var i = this.others.length - 1; i >= 0; i--) { - var otherPos = this.others[i]; - var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart }; - this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); - } - } - } - this.$updating = false; - this.updateMarkers(); - }; - PlaceHolder.prototype.updateAnchors = function (delta) { - this.pos.onChange(delta); - for (var i = this.others.length; i--;) - this.others[i].onChange(delta); - this.updateMarkers(); - }; - PlaceHolder.prototype.updateMarkers = function () { - if (this.$updating) - return; - var _self = this; - var session = this.session; - var updateMarker = function (pos, className) { - session.removeMarker(pos.markerId); - pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false); - }; - updateMarker(this.pos, this.mainClass); - for (var i = this.others.length; i--;) - updateMarker(this.others[i], this.othersClass); - }; - PlaceHolder.prototype.onCursorChange = function (event) { - if (this.$updating || !this.session) - return; - var pos = this.session.selection.getCursor(); - if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { - this.showOtherMarkers(); - this._emit("cursorEnter", event); - } - else { - this.hideOtherMarkers(); - this._emit("cursorLeave", event); - } - }; - PlaceHolder.prototype.detach = function () { - this.session.removeMarker(this.pos && this.pos.markerId); - this.hideOtherMarkers(); - this.doc.off("change", this.$onUpdate); - this.session.selection.off("changeCursor", this.$onCursorChange); - this.session.setUndoSelect(true); - this.session = null; - }; - PlaceHolder.prototype.cancel = function () { - if (this.$undoStackDepth === -1) - return; - var undoManager = this.session.getUndoManager(); - var undosRequired = (undoManager.$undoStack || undoManager["$undostack"]).length - this.$undoStackDepth; - for (var i = 0; i < undosRequired; i++) { - undoManager.undo(this.session, true); - } - if (this.selectionBefore) - this.session.selection.fromJSON(this.selectionBefore); - }; - return PlaceHolder; -}()); -oop.implement(PlaceHolder.prototype, EventEmitter); -exports.PlaceHolder = PlaceHolder; - -}); - -ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module){var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -function isSamePoint(p1, p2) { - return p1.row == p2.row && p1.column == p2.column; -} -function onMouseDown(e) { - var ev = e.domEvent; - var alt = ev.altKey; - var shift = ev.shiftKey; - var ctrl = ev.ctrlKey; - var accel = e.getAccelKey(); - var button = e.getButton(); - if (ctrl && useragent.isMac) - button = ev.button; - if (e.editor.inMultiSelectMode && button == 2) { - e.editor.textInput.onContextMenu(e.domEvent); - return; - } - if (!ctrl && !alt && !accel) { - if (button === 0 && e.editor.inMultiSelectMode) - e.editor.exitMultiSelectMode(); - return; - } - if (button !== 0) - return; - var editor = e.editor; - var selection = editor.selection; - var isMultiSelect = editor.inMultiSelectMode; - var pos = e.getDocumentPosition(); - var cursor = selection.getCursor(); - var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); - var mouseX = e.x, mouseY = e.y; - var onMouseSelection = function (e) { - mouseX = e.clientX; - mouseY = e.clientY; - }; - var session = editor.session; - var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); - var screenCursor = screenAnchor; - var selectionMode; - if (editor.$mouseHandler.$enableJumpToDef) { - if (ctrl && alt || accel && alt) - selectionMode = shift ? "block" : "add"; - else if (alt && editor.$blockSelectEnabled) - selectionMode = "block"; - } - else { - if (accel && !alt) { - selectionMode = "add"; - if (!isMultiSelect && shift) - return; - } - else if (alt && editor.$blockSelectEnabled) { - selectionMode = "block"; - } - } - if (selectionMode && useragent.isMac && ev.ctrlKey) { - editor.$mouseHandler.cancelContextMenu(); - } - if (selectionMode == "add") { - if (!isMultiSelect && inSelection) - return; // dragging - if (!isMultiSelect) { - var range = selection.toOrientedRange(); - editor.addSelectionMarker(range); - } - var oldRange = selection.rangeList.rangeAtPoint(pos); - editor.inVirtualSelectionMode = true; - if (shift) { - oldRange = null; - range = selection.ranges[0] || range; - editor.removeSelectionMarker(range); - } - editor.once("mouseup", function () { - var tmpSel = selection.toOrientedRange(); - if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) - selection.substractPoint(tmpSel.cursor); - else { - if (shift) { - selection.substractPoint(range.cursor); - } - else if (range) { - editor.removeSelectionMarker(range); - selection.addRange(range); - } - selection.addRange(tmpSel); - } - editor.inVirtualSelectionMode = false; - }); - } - else if (selectionMode == "block") { - e.stop(); - editor.inVirtualSelectionMode = true; - var initialRange; - var rectSel = []; - var blockSelect = function () { - var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); - var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX); - if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) - return; - screenCursor = newCursor; - editor.selection.moveToPosition(cursor); - editor.renderer.scrollCursorIntoView(); - editor.removeSelectionMarkers(rectSel); - rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); - if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) - rectSel[0] = editor.$mouseHandler.$clickSelection.clone(); - rectSel.forEach(editor.addSelectionMarker, editor); - editor.updateSelectionMarkers(); - }; - if (isMultiSelect && !accel) { - selection.toSingleRange(); - } - else if (!isMultiSelect && accel) { - initialRange = selection.toOrientedRange(); - editor.addSelectionMarker(initialRange); - } - if (shift) - screenAnchor = session.documentToScreenPosition(selection.lead); - else - selection.moveToPosition(pos); - screenCursor = { row: -1, column: -1 }; - var onMouseSelectionEnd = function (e) { - blockSelect(); - clearInterval(timerId); - editor.removeSelectionMarkers(rectSel); - if (!rectSel.length) - rectSel = [selection.toOrientedRange()]; - if (initialRange) { - editor.removeSelectionMarker(initialRange); - selection.toSingleRange(initialRange); - } - for (var i = 0; i < rectSel.length; i++) - selection.addRange(rectSel[i]); - editor.inVirtualSelectionMode = false; - editor.$mouseHandler.$clickSelection = null; - }; - var onSelectionInterval = blockSelect; - event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); - var timerId = setInterval(function () { onSelectionInterval(); }, 20); - return e.preventDefault(); - } -} -exports.onMouseDown = onMouseDown; - -}); - -ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module){/** - * commands to enter multiselect mode - * @type {import("../../ace-internal").Ace.Command[]} - */ -exports.defaultCommands = [{ - name: "addCursorAbove", - description: "Add cursor above", - exec: function (editor) { editor.selectMoreLines(-1); }, - bindKey: { win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "addCursorBelow", - description: "Add cursor below", - exec: function (editor) { editor.selectMoreLines(1); }, - bindKey: { win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "addCursorAboveSkipCurrent", - description: "Add cursor above (skip current)", - exec: function (editor) { editor.selectMoreLines(-1, true); }, - bindKey: { win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "addCursorBelowSkipCurrent", - description: "Add cursor below (skip current)", - exec: function (editor) { editor.selectMoreLines(1, true); }, - bindKey: { win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectMoreBefore", - description: "Select more before", - exec: function (editor) { editor.selectMore(-1); }, - bindKey: { win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectMoreAfter", - description: "Select more after", - exec: function (editor) { editor.selectMore(1); }, - bindKey: { win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectNextBefore", - description: "Select next before", - exec: function (editor) { editor.selectMore(-1, true); }, - bindKey: { win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "selectNextAfter", - description: "Select next after", - exec: function (editor) { editor.selectMore(1, true); }, - bindKey: { win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right" }, - scrollIntoView: "cursor", - readOnly: true - }, { - name: "toggleSplitSelectionIntoLines", - description: "Split selection into lines", - exec: function (editor) { - if (editor.multiSelect.rangeCount > 1) - editor.multiSelect.joinSelections(); - else - editor.multiSelect.splitIntoLines(); - }, - bindKey: { win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L" }, - readOnly: true - }, { - name: "splitSelectionIntoLines", - description: "Split into lines", - exec: function (editor) { editor.multiSelect.splitIntoLines(); }, - readOnly: true - }, { - name: "alignCursors", - description: "Align cursors", - exec: function (editor) { editor.alignCursors(); }, - bindKey: { win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A" }, - scrollIntoView: "cursor" - }, { - name: "findAll", - description: "Find all", - exec: function (editor) { editor.findAll(); }, - bindKey: { win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G" }, - scrollIntoView: "cursor", - readOnly: true - }]; -exports.multiSelectCommands = [{ - name: "singleSelection", - description: "Single selection", - bindKey: "esc", - exec: function (editor) { editor.exitMultiSelectMode(); }, - scrollIntoView: "cursor", - readOnly: true, - isAvailable: function (editor) { return editor && editor.inMultiSelectMode; } - }]; -var HashHandler = require("../keyboard/hash_handler").HashHandler; -exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); - -}); - -ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"], function(require, exports, module){/** - * @typedef {import("./anchor").Anchor} Anchor - * @typedef {import("../ace-internal").Ace.Point} Point - * @typedef {import("../ace-internal").Ace.ScreenCoordinates} ScreenCoordinates - */ -var RangeList = require("./range_list").RangeList; -var Range = require("./range").Range; -var Selection = require("./selection").Selection; -var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; -var event = require("./lib/event"); -var lang = require("./lib/lang"); -var commands = require("./commands/multi_select_commands"); -exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); -var Search = require("./search").Search; -var search = new Search(); -function find(session, needle, dir) { - search.$options.wrap = true; - search.$options.needle = needle; - search.$options.backwards = dir == -1; - return search.find(session); -} -var EditSession = require("./edit_session").EditSession; -(function () { - this.getSelectionMarkers = function () { - return this.$selectionMarkers; - }; -}).call(EditSession.prototype); -(function () { - this.ranges = null; - this.rangeList = null; - this.addRange = function (range, $blockChangeEvents) { - if (!range) - return; - if (!this.inMultiSelectMode && this.rangeCount === 0) { - var oldRange = this.toOrientedRange(); - this.rangeList.add(oldRange); - this.rangeList.add(range); - if (this.rangeList.ranges.length != 2) { - this.rangeList.removeAll(); - return $blockChangeEvents || this.fromOrientedRange(range); - } - this.rangeList.removeAll(); - this.rangeList.add(oldRange); - this.$onAddRange(oldRange); - } - if (!range.cursor) - range.cursor = range.end; - var removed = this.rangeList.add(range); - this.$onAddRange(range); - if (removed.length) - this.$onRemoveRange(removed); - if (this.rangeCount > 1 && !this.inMultiSelectMode) { - this._signal("multiSelect"); - this.inMultiSelectMode = true; - this.session.$undoSelect = false; - this.rangeList.attach(this.session); - } - return $blockChangeEvents || this.fromOrientedRange(range); - }; - this.toSingleRange = function (range) { - range = range || this.ranges[0]; - var removed = this.rangeList.removeAll(); - if (removed.length) - this.$onRemoveRange(removed); - range && this.fromOrientedRange(range); - }; - this.substractPoint = function (pos) { - var removed = this.rangeList.substractPoint(pos); - if (removed) { - this.$onRemoveRange(removed); - return removed[0]; - } - }; - this.mergeOverlappingRanges = function () { - var removed = this.rangeList.merge(); - if (removed.length) - this.$onRemoveRange(removed); - }; - this.$onAddRange = function (range) { - this.rangeCount = this.rangeList.ranges.length; - this.ranges.unshift(range); - this._signal("addRange", { range: range }); - }; - this.$onRemoveRange = function (removed) { - this.rangeCount = this.rangeList.ranges.length; - if (this.rangeCount == 1 && this.inMultiSelectMode) { - var lastRange = this.rangeList.ranges.pop(); - removed.push(lastRange); - this.rangeCount = 0; - } - for (var i = removed.length; i--;) { - var index = this.ranges.indexOf(removed[i]); - this.ranges.splice(index, 1); - } - this._signal("removeRange", { ranges: removed }); - if (this.rangeCount === 0 && this.inMultiSelectMode) { - this.inMultiSelectMode = false; - this._signal("singleSelect"); - this.session.$undoSelect = true; - this.rangeList.detach(this.session); - } - lastRange = lastRange || this.ranges[0]; - if (lastRange && !lastRange.isEqual(this.getRange())) - this.fromOrientedRange(lastRange); - }; - this.$initRangeList = function () { - if (this.rangeList) - return; - this.rangeList = new RangeList(); - this.ranges = []; - this.rangeCount = 0; - }; - this.getAllRanges = function () { - return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; - }; - this.splitIntoLines = function () { - var ranges = this.ranges.length ? this.ranges : [this.getRange()]; - var newRanges = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - var row = range.start.row; - var endRow = range.end.row; - if (row === endRow) { - newRanges.push(range.clone()); - } - else { - newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length)); - while (++row < endRow) - newRanges.push(this.getLineRange(row, true)); - newRanges.push(new Range(endRow, 0, endRow, range.end.column)); - } - if (i == 0 && !this.isBackwards()) - newRanges = newRanges.reverse(); - } - this.toSingleRange(); - for (var i = newRanges.length; i--;) - this.addRange(newRanges[i]); - }; - this.joinSelections = function () { - var ranges = this.rangeList.ranges; - var lastRange = ranges[ranges.length - 1]; - var range = Range.fromPoints(ranges[0].start, lastRange.end); - this.toSingleRange(); - this.setSelectionRange(range, lastRange.cursor == lastRange.start); - }; - this.toggleBlockSelection = function () { - if (this.rangeCount > 1) { - var ranges = this.rangeList.ranges; - var lastRange = ranges[ranges.length - 1]; - var range = Range.fromPoints(ranges[0].start, lastRange.end); - this.toSingleRange(); - this.setSelectionRange(range, lastRange.cursor == lastRange.start); - } - else { - var cursor = this.session.documentToScreenPosition(this.cursor); - var anchor = this.session.documentToScreenPosition(this.anchor); - var rectSel = this.rectangularRangeBlock(cursor, anchor); - rectSel.forEach(this.addRange, this); - } - }; - this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) { - var rectSel = []; - var xBackwards = screenCursor.column < screenAnchor.column; - if (xBackwards) { - var startColumn = screenCursor.column; - var endColumn = screenAnchor.column; - var startOffsetX = screenCursor.offsetX; - var endOffsetX = screenAnchor.offsetX; - } - else { - var startColumn = screenAnchor.column; - var endColumn = screenCursor.column; - var startOffsetX = screenAnchor.offsetX; - var endOffsetX = screenCursor.offsetX; - } - var yBackwards = screenCursor.row < screenAnchor.row; - if (yBackwards) { - var startRow = screenCursor.row; - var endRow = screenAnchor.row; - } - else { - var startRow = screenAnchor.row; - var endRow = screenCursor.row; - } - if (startColumn < 0) - startColumn = 0; - if (startRow < 0) - startRow = 0; - if (startRow == endRow) - includeEmptyLines = true; - var docEnd; - for (var row = startRow; row <= endRow; row++) { - var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX)); - if (range.isEmpty()) { - if (docEnd && isSamePoint(range.end, docEnd)) - break; - docEnd = range.end; - } - range.cursor = xBackwards ? range.start : range.end; - rectSel.push(range); - } - if (yBackwards) - rectSel.reverse(); - if (!includeEmptyLines) { - var end = rectSel.length - 1; - while (rectSel[end].isEmpty() && end > 0) - end--; - if (end > 0) { - var start = 0; - while (rectSel[start].isEmpty()) - start++; - } - for (var i = end; i >= start; i--) { - if (rectSel[i].isEmpty()) - rectSel.splice(i, 1); - } - } - return rectSel; - }; -}).call(Selection.prototype); -var Editor = require("./editor").Editor; -(function () { - this.updateSelectionMarkers = function () { - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - this.addSelectionMarker = function (orientedRange) { - if (!orientedRange.cursor) - orientedRange.cursor = orientedRange.end; - var style = this.getSelectionStyle(); - orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); - this.session.$selectionMarkers.push(orientedRange); - this.session.selectionMarkerCount = this.session.$selectionMarkers.length; - return orientedRange; - }; - this.removeSelectionMarker = function (range) { - if (!range.marker) - return; - this.session.removeMarker(range.marker); - var index = this.session.$selectionMarkers.indexOf(range); - if (index != -1) - this.session.$selectionMarkers.splice(index, 1); - this.session.selectionMarkerCount = this.session.$selectionMarkers.length; - }; - this.removeSelectionMarkers = function (ranges) { - var markerList = this.session.$selectionMarkers; - for (var i = ranges.length; i--;) { - var range = ranges[i]; - if (!range.marker) - continue; - this.session.removeMarker(range.marker); - var index = markerList.indexOf(range); - if (index != -1) - markerList.splice(index, 1); - } - this.session.selectionMarkerCount = markerList.length; - }; - this.$onAddRange = function (e) { - this.addSelectionMarker(e.range); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - this.$onRemoveRange = function (e) { - this.removeSelectionMarkers(e.ranges); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - this.$onMultiSelect = function (e) { - if (this.inMultiSelectMode) - return; - this.inMultiSelectMode = true; - this.setStyle("ace_multiselect"); - this.keyBinding.addKeyboardHandler(commands.keyboardHandler); - this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - this.$onSingleSelect = function (e) { - if (this.session.multiSelect.inVirtualMode) - return; - this.inMultiSelectMode = false; - this.unsetStyle("ace_multiselect"); - this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); - this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - this._emit("changeSelection"); - }; - this.$onMultiSelectExec = function (e) { - var command = e.command; - var editor = e.editor; - if (!editor.multiSelect) - return; - if (!command.multiSelectAction) { - var result = command.exec(editor, e.args || {}); - editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); - editor.multiSelect.mergeOverlappingRanges(); - } - else if (command.multiSelectAction == "forEach") { - result = editor.forEachSelection(command, e.args); - } - else if (command.multiSelectAction == "forEachLine") { - result = editor.forEachSelection(command, e.args, true); - } - else if (command.multiSelectAction == "single") { - editor.exitMultiSelectMode(); - result = command.exec(editor, e.args || {}); - } - else { - result = command.multiSelectAction(editor, e.args || {}); - } - return result; - }; - this.forEachSelection = function (cmd, args, options) { - if (this.inVirtualSelectionMode) - return; - var keepOrder = options && options.keepOrder; - var $byLines = options == true || options && options.$byLines; - var session = this.session; - var selection = this.selection; - var rangeList = selection.rangeList; - var ranges = (keepOrder ? selection : rangeList).ranges; - var result; - if (!ranges.length) - return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); - var reg = selection._eventRegistry; - selection._eventRegistry = {}; - var tmpSel = new Selection(session); - this.inVirtualSelectionMode = true; - for (var i = ranges.length; i--;) { - if ($byLines) { - while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) - i--; - } - tmpSel.fromOrientedRange(ranges[i]); - tmpSel.index = i; - this.selection = session.selection = tmpSel; - var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); - if (!result && cmdResult !== undefined) - result = cmdResult; - tmpSel.toOrientedRange(ranges[i]); - } - tmpSel.detach(); - this.selection = session.selection = selection; - this.inVirtualSelectionMode = false; - selection._eventRegistry = reg; - selection.mergeOverlappingRanges(); - if (selection.ranges[0]) - selection.fromOrientedRange(selection.ranges[0]); - var anim = this.renderer.$scrollAnimation; - this.onCursorChange(); - this.onSelectionChange(); - if (anim && anim.from == anim.to) - this.renderer.animateScrolling(anim.from); - return result; - }; - this.exitMultiSelectMode = function () { - if (!this.inMultiSelectMode || this.inVirtualSelectionMode) - return; - this.multiSelect.toSingleRange(); - }; - this.getSelectedText = function () { - var text = ""; - if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { - var ranges = this.multiSelect.rangeList.ranges; - var buf = []; - for (var i = 0; i < ranges.length; i++) { - buf.push(this.session.getTextRange(ranges[i])); - } - var nl = this.session.getDocument().getNewLineCharacter(); - text = buf.join(nl); - if (text.length == (buf.length - 1) * nl.length) - text = ""; - } - else if (!this.selection.isEmpty()) { - text = this.session.getTextRange(this.getSelectionRange()); - } - return text; - }; - this.$checkMultiselectChange = function (e, anchor) { - if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { - var range = this.multiSelect.ranges[0]; - if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) - return; - var pos = anchor == this.multiSelect.anchor - ? range.cursor == range.start ? range.end : range.start - : range.cursor; - if (pos.row != anchor.row - || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) - this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()); - else - this.multiSelect.mergeOverlappingRanges(); - } - }; - this.findAll = function (needle, options, additive) { - options = options || {}; - options.needle = needle || options.needle; - if (options.needle == undefined) { - var range = this.selection.isEmpty() - ? this.selection.getWordRange() - : this.selection.getRange(); - options.needle = this.session.getTextRange(range); - } - this.$search.set(options); - var ranges = this.$search.findAll(this.session); - if (!ranges.length) - return 0; - var selection = this.multiSelect; - if (!additive) - selection.toSingleRange(ranges[0]); - for (var i = ranges.length; i--;) - selection.addRange(ranges[i], true); - if (range && selection.rangeList.rangeAtPoint(range.start)) - selection.addRange(range, true); - return ranges.length; - }; - this.selectMoreLines = function (dir, skip) { - var range = this.selection.toOrientedRange(); - var isBackwards = range.cursor == range.end; - var screenLead = this.session.documentToScreenPosition(range.cursor); - if (this.selection.$desiredColumn) - screenLead.column = this.selection.$desiredColumn; - var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); - if (!range.isEmpty()) { - var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); - var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); - } - else { - var anchor = lead; - } - if (isBackwards) { - var newRange = Range.fromPoints(lead, anchor); - newRange.cursor = newRange.start; - } - else { - var newRange = Range.fromPoints(anchor, lead); - newRange.cursor = newRange.end; - } - newRange.desiredColumn = screenLead.column; - if (!this.selection.inMultiSelectMode) { - this.selection.addRange(range); - } - else { - if (skip) - var toRemove = range.cursor; - } - this.selection.addRange(newRange); - if (toRemove) - this.selection.substractPoint(toRemove); - }; - this.transposeSelections = function (dir) { - var session = this.session; - var sel = session.multiSelect; - var all = sel.ranges; - for (var i = all.length; i--;) { - var range = all[i]; - if (range.isEmpty()) { - var tmp_1 = session.getWordRange(range.start.row, range.start.column); - range.start.row = tmp_1.start.row; - range.start.column = tmp_1.start.column; - range.end.row = tmp_1.end.row; - range.end.column = tmp_1.end.column; - } - } - sel.mergeOverlappingRanges(); - var words = []; - for (var i = all.length; i--;) { - var range = all[i]; - words.unshift(session.getTextRange(range)); - } - if (dir < 0) - words.unshift(words.pop()); - else - words.push(words.shift()); - for (var i = all.length; i--;) { - var range = all[i]; - var tmp = range.clone(); - session.replace(range, words[i]); - range.start.row = tmp.start.row; - range.start.column = tmp.start.column; - } - sel.fromOrientedRange(sel.ranges[0]); - }; - this.selectMore = function (dir, skip, stopAtFirst) { - var session = this.session; - var sel = session.multiSelect; - var range = sel.toOrientedRange(); - if (range.isEmpty()) { - range = session.getWordRange(range.start.row, range.start.column); - range.cursor = dir == -1 ? range.start : range.end; - this.multiSelect.addRange(range); - if (stopAtFirst) - return; - } - var needle = session.getTextRange(range); - var newRange = find(session, needle, dir); - if (newRange) { - newRange.cursor = dir == -1 ? newRange.start : newRange.end; - this.session.unfold(newRange); - this.multiSelect.addRange(newRange); - this.renderer.scrollCursorIntoView(null, 0.5); - } - if (skip) - this.multiSelect.substractPoint(range.cursor); - }; - this.alignCursors = function () { - var session = this.session; - var sel = session.multiSelect; - var ranges = sel.ranges; - var row = -1; - var sameRowRanges = ranges.filter(function (r) { - if (r.cursor.row == row) - return true; - row = r.cursor.row; - }); - if (!ranges.length || sameRowRanges.length == ranges.length - 1) { - var range = this.selection.getRange(); - var fr = range.start.row, lr = range.end.row; - var guessRange = fr == lr; - if (guessRange) { - var max = this.session.getLength(); - var line; - do { - line = this.session.getLine(lr); - } while (/[=:]/.test(line) && ++lr < max); - do { - line = this.session.getLine(fr); - } while (/[=:]/.test(line) && --fr > 0); - if (fr < 0) - fr = 0; - if (lr >= max) - lr = max - 1; - } - var lines = this.session.removeFullLines(fr, lr); - lines = this.$reAlignText(lines, guessRange); - this.session.insert({ row: fr, column: 0 }, lines.join("\n") + "\n"); - if (!guessRange) { - range.start.column = 0; - range.end.column = lines[lines.length - 1].length; - } - this.selection.setRange(range); - } - else { - sameRowRanges.forEach(function (r) { - sel.substractPoint(r.cursor); - }); - var maxCol = 0; - var minSpace = Infinity; - var spaceOffsets = ranges.map(function (r) { - var p = r.cursor; - var line = session.getLine(p.row); - var spaceOffset = line.substr(p.column).search(/\S/g); - if (spaceOffset == -1) - spaceOffset = 0; - if (p.column > maxCol) - maxCol = p.column; - if (spaceOffset < minSpace) - minSpace = spaceOffset; - return spaceOffset; - }); - ranges.forEach(function (r, i) { - var p = r.cursor; - var l = maxCol - p.column; - var d = spaceOffsets[i] - minSpace; - if (l > d) - session.insert(p, lang.stringRepeat(" ", l - d)); - else - session.remove(new Range(p.row, p.column, p.row, p.column - l + d)); - r.start.column = r.end.column = maxCol; - r.start.row = r.end.row = p.row; - r.cursor = r.end; - }); - sel.fromOrientedRange(ranges[0]); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - } - }; - this.$reAlignText = function (lines, forceLeft) { - var isLeftAligned = true, isRightAligned = true; - var startW, textW, endW; - return lines.map(function (line) { - var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); - if (!m) - return [line]; - if (startW == null) { - startW = m[1].length; - textW = m[2].length; - endW = m[3].length; - return m; - } - if (startW + textW + endW != m[1].length + m[2].length + m[3].length) - isRightAligned = false; - if (startW != m[1].length) - isLeftAligned = false; - if (startW > m[1].length) - startW = m[1].length; - if (textW < m[2].length) - textW = m[2].length; - if (endW > m[3].length) - endW = m[3].length; - return m; - }).map(forceLeft ? alignLeft : - isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); - function spaces(n) { - return lang.stringRepeat(" ", n); - } - function alignLeft(m) { - return !m[2] ? m[0] : spaces(startW) + m[2] - + spaces(textW - m[2].length + endW) - + m[4].replace(/^([=:])\s+/, "$1 "); - } - function alignRight(m) { - return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] - + spaces(endW) - + m[4].replace(/^([=:])\s+/, "$1 "); - } - function unAlign(m) { - return !m[2] ? m[0] : spaces(startW) + m[2] - + spaces(endW) - + m[4].replace(/^([=:])\s+/, "$1 "); - } - }; -}).call(Editor.prototype); -function isSamePoint(p1, p2) { - return p1.row == p2.row && p1.column == p2.column; -} -exports.onSessionChange = function (e) { - var session = e.session; - if (session && !session.multiSelect) { - session.$selectionMarkers = []; - session.selection.$initRangeList(); - session.multiSelect = session.selection; - } - this.multiSelect = session && session.multiSelect; - var oldSession = e.oldSession; - if (oldSession) { - oldSession.multiSelect.off("addRange", this.$onAddRange); - oldSession.multiSelect.off("removeRange", this.$onRemoveRange); - oldSession.multiSelect.off("multiSelect", this.$onMultiSelect); - oldSession.multiSelect.off("singleSelect", this.$onSingleSelect); - oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange); - oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange); - } - if (session) { - session.multiSelect.on("addRange", this.$onAddRange); - session.multiSelect.on("removeRange", this.$onRemoveRange); - session.multiSelect.on("multiSelect", this.$onMultiSelect); - session.multiSelect.on("singleSelect", this.$onSingleSelect); - session.multiSelect.lead.on("change", this.$checkMultiselectChange); - session.multiSelect.anchor.on("change", this.$checkMultiselectChange); - } - if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) { - if (session.selection.inMultiSelectMode) - this.$onMultiSelect(); - else - this.$onSingleSelect(); - } -}; -function MultiSelect(editor) { - if (editor.$multiselectOnSessionChange) - return; - editor.$onAddRange = editor.$onAddRange.bind(editor); - editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); - editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); - editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); - editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); - editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor); - editor.$multiselectOnSessionChange(editor); - editor.on("changeSession", editor.$multiselectOnSessionChange); - editor.on("mousedown", onMouseDown); - editor.commands.addCommands(commands.defaultCommands); - addAltCursorListeners(editor); -} -function addAltCursorListeners(editor) { - if (!editor.textInput) - return; - var el = editor.textInput.getElement(); - var altCursor = false; - event.addListener(el, "keydown", function (e) { - var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey); - if (editor.$blockSelectEnabled && altDown) { - if (!altCursor) { - editor.renderer.setMouseCursor("crosshair"); - altCursor = true; - } - } - else if (altCursor) { - reset(); - } - }, editor); - event.addListener(el, "keyup", reset, editor); - event.addListener(el, "blur", reset, editor); - function reset(e) { - if (altCursor) { - editor.renderer.setMouseCursor(""); - altCursor = false; - } - } -} -exports.MultiSelect = MultiSelect; -require("./config").defineOptions(Editor.prototype, "editor", { - enableMultiselect: { - set: function (val) { - MultiSelect(this); - if (val) { - this.on("mousedown", onMouseDown); - } - else { - this.off("mousedown", onMouseDown); - } - }, - value: true - }, - enableBlockSelect: { - set: function (val) { - this.$blockSelectEnabled = val; - }, - value: true - } -}); - -}); - -ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; -var Range = require("../../range").Range; -var FoldMode = exports.FoldMode = function () { }; -(function () { - this.foldingStartMarker = null; - this.foldingStopMarker = null; - this.getFoldWidget = function (session, foldStyle, row) { - var line = session.getLine(row); - if (this.foldingStartMarker.test(line)) - return "start"; - if (foldStyle == "markbeginend" - && this.foldingStopMarker - && this.foldingStopMarker.test(line)) - return "end"; - return ""; - }; - this.getFoldWidgetRange = function (session, foldStyle, row) { - return null; - }; - this.indentationBlock = function (session, row, column) { - var re = /\S/; - var line = session.getLine(row); - var startLevel = line.search(re); - if (startLevel == -1) - return; - var startColumn = column || line.length; - var maxRow = session.getLength(); - var startRow = row; - var endRow = row; - while (++row < maxRow) { - var level = session.getLine(row).search(re); - if (level == -1) - continue; - if (level <= startLevel) { - var token = session.getTokenAt(row, 0); - if (!token || token.type !== "string") - break; - } - endRow = row; - } - if (endRow > startRow) { - var endColumn = session.getLine(endRow).length; - return new Range(startRow, startColumn, endRow, endColumn); - } - }; - this.openingBracketBlock = function (session, bracket, row, column, typeRe) { - var start = { row: row, column: column + 1 }; - var end = session.$findClosingBracket(bracket, start, typeRe); - if (!end) - return; - var fw = session.foldWidgets[end.row]; - if (fw == null) - fw = session.getFoldWidget(end.row); - if (fw == "start" && end.row > start.row) { - end.row--; - end.column = session.getLine(end.row).length; - } - return Range.fromPoints(start, end); - }; - this.closingBracketBlock = function (session, bracket, row, column, typeRe) { - var end = { row: row, column: column }; - var start = session.$findOpeningBracket(bracket, end); - if (!start) - return; - start.column++; - end.column--; - return Range.fromPoints(start, end); - }; -}).call(FoldMode.prototype); - -}); - -ace.define("ace/ext/error_marker",["require","exports","module","ace/lib/dom","ace/range","ace/config"], function(require, exports, module){/** - * ## Error Marker extension - * - * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips - * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with - * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity. - * - * @module - */ -"use strict"; -var dom = require("../lib/dom"); -var Range = require("../range").Range; -var nls = require("../config").nls; -function binarySearch(array, needle, comparator) { - var first = 0; - var last = array.length - 1; - while (first <= last) { - var mid = (first + last) >> 1; - var c = comparator(needle, array[mid]); - if (c > 0) - first = mid + 1; - else if (c < 0) - last = mid - 1; - else - return mid; - } - return -(first + 1); -} -function findAnnotations(session, row, dir) { - var annotations = session.getAnnotations().sort(Range.comparePoints); - if (!annotations.length) - return; - var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints); - if (i < 0) - i = -i - 1; - if (i >= annotations.length) - i = dir > 0 ? 0 : annotations.length - 1; - else if (i === 0 && dir < 0) - i = annotations.length - 1; - var annotation = annotations[i]; - if (!annotation || !dir) - return; - if (annotation.row === row) { - do { - annotation = annotations[i += dir]; - } while (annotation && annotation.row === row); - if (!annotation) - return annotations.slice(); - } - var matched = []; - row = annotation.row; - do { - matched[dir < 0 ? "unshift" : "push"](annotation); - annotation = annotations[i += dir]; - } while (annotation && annotation.row == row); - return matched.length && matched; -} -exports.showErrorMarker = function (editor, dir) { - var session = editor.session; - var pos = editor.getCursorPosition(); - var row = pos.row; - var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) { - return w.type == "errorMarker"; - })[0]; - if (oldWidget) { - oldWidget.destroy(); - } - else { - row -= dir; - } - var annotations = findAnnotations(session, row, dir); - var gutterAnno; - if (annotations) { - var annotation = annotations[0]; - pos.column = (annotation.pos && typeof annotation.column != "number" - ? annotation.pos.sc - : annotation.column) || 0; - pos.row = annotation.row; - gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row]; - } - else if (oldWidget) { - return; - } - else { - gutterAnno = { - displayText: [nls("error-marker.good-state", "Looks good!")], - className: "ace_ok" - }; - } - editor.session.unfold(pos.row); - editor.selection.moveToPosition(pos); - var w = { - row: pos.row, - fixedWidth: true, - coverGutter: true, - el: dom.createElement("div"), - type: "errorMarker" - }; - var el = w.el.appendChild(dom.createElement("div")); - var arrow = w.el.appendChild(dom.createElement("div")); - arrow.className = "error_widget_arrow " + gutterAnno.className; - var left = editor.renderer.$cursorLayer - .getPixelPosition(pos).left; - arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px"; - w.el.className = "error_widget_wrapper"; - el.className = "error_widget " + gutterAnno.className; - gutterAnno.displayText.forEach(function (annoTextLine, i) { - el.appendChild(dom.createTextNode(annoTextLine)); - if (i < gutterAnno.displayText.length - 1) { - el.appendChild(dom.createElement("br")); - } - }); - el.appendChild(dom.createElement("div")); - var kb = function (_, hashId, keyString) { - if (hashId === 0 && (keyString === "esc" || keyString === "return")) { - w.destroy(); - return { command: "null" }; - } - }; - w.destroy = function () { - if (editor.$mouseHandler.isMousePressed) - return; - editor.keyBinding.removeKeyboardHandler(kb); - session.widgetManager.removeLineWidget(w); - editor.off("changeSelection", w.destroy); - editor.off("changeSession", w.destroy); - editor.off("mouseup", w.destroy); - editor.off("change", w.destroy); - }; - editor.keyBinding.addKeyboardHandler(kb); - editor.on("changeSelection", w.destroy); - editor.on("changeSession", w.destroy); - editor.on("mouseup", w.destroy); - editor.on("change", w.destroy); - editor.session.widgetManager.addLineWidget(w); - w.el.onmousedown = editor.focus.bind(editor); - editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight }); -}; -dom.importCssString("\n .error_widget_wrapper {\n background: inherit;\n color: inherit;\n border:none\n }\n .error_widget {\n border-top: solid 2px;\n border-bottom: solid 2px;\n margin: 5px 0;\n padding: 10px 40px;\n white-space: pre-wrap;\n }\n .error_widget.ace_error, .error_widget_arrow.ace_error{\n border-color: #ff5a5a\n }\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\n border-color: #F1D817\n }\n .error_widget.ace_info, .error_widget_arrow.ace_info{\n border-color: #5a5a5a\n }\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\n border-color: #5aaa5a\n }\n .error_widget_arrow {\n position: absolute;\n border: solid 5px;\n border-top-color: transparent!important;\n border-right-color: transparent!important;\n border-left-color: transparent!important;\n top: -5px;\n }\n", "error_marker.css", false); - -}); - -ace.define("ace/ace",["require","exports","module","ace/lib/dom","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config","ace/loader_build"], function(require, exports, module){/** - * The main class required to set up an Ace instance in the browser. - * - * @namespace Ace - **/ -"use strict"; -require("./loader_build")(exports) -var dom = require("./lib/dom"); -var Range = require("./range").Range; -var Editor = require("./editor").Editor; -var EditSession = require("./edit_session").EditSession; -var UndoManager = require("./undomanager").UndoManager; -var Renderer = require("./virtual_renderer").VirtualRenderer; -require("./worker/worker_client"); -require("./keyboard/hash_handler"); -require("./placeholder"); -require("./multi_select"); -require("./mode/folding/fold_mode"); -require("./theme/textmate"); -require("./ext/error_marker"); -exports.config = require("./config"); -exports.edit = function (el, options) { - if (typeof el == "string") { - var _id = el; - el = document.getElementById(_id); - if (!el) - throw new Error("ace.edit can't find div #" + _id); - } - if (el && el.env && el.env.editor instanceof Editor) - return el.env.editor; - var value = ""; - if (el && /input|textarea/i.test(el.tagName)) { - var oldNode = el; - value = oldNode.value; - el = dom.createElement("pre"); - oldNode.parentNode.replaceChild(el, oldNode); - } - else if (el) { - value = el.textContent; - el.innerHTML = ""; - } - var doc = exports.createEditSession(value); - var editor = new Editor(new Renderer(el), doc, options); - var env = { - document: doc, - editor: editor, - onResize: editor.resize.bind(editor, null) - }; - if (oldNode) - env.textarea = oldNode; - editor.on("destroy", function () { - env.editor.container.env = null; // prevent memory leak on old ie - }); - editor.container.env = editor.env = env; - return editor; -}; -exports.createEditSession = function (text, mode) { - var doc = new EditSession(text, mode); - doc.setUndoManager(new UndoManager()); - return doc; -}; -exports.Range = Range; -exports.Editor = Editor; -exports.EditSession = EditSession; -exports.UndoManager = UndoManager; -exports.VirtualRenderer = Renderer; -var version = exports.config.version; -exports.version = version; - -}); (function() { - ace.require(["ace/ace"], function(a) { - if (a) { - a.config.init(true); - a.define = ace.define; - } - var global = (function () { - return this; - })(); - if (!global && typeof window != "undefined") global = window; // can happen in strict mode - if (!global && typeof self != "undefined") global = self; // can happen in webworker - - if (!global.ace) - global.ace = a; - for (var key in a) if (a.hasOwnProperty(key)) - global.ace[key] = a[key]; - global.ace["default"] = global.ace; - if ( true && module) { - module.exports = global.ace; - } - }); - })(); - - -/***/ }), - -/***/ "../../node_modules/ace-builds/src-noconflict/ext-language_tools.js": -/*!**************************************************************************!*\ - !*** ../../node_modules/ace-builds/src-noconflict/ext-language_tools.js ***! - \**************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -/* module decorator */ module = __webpack_require__.nmd(module); -ace.define("ace/snippets",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/range_list","ace/keyboard/hash_handler","ace/tokenizer","ace/clipboard","ace/editor"], function(require, exports, module){"use strict"; -var dom = require("./lib/dom"); -var oop = require("./lib/oop"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var lang = require("./lib/lang"); -var Range = require("./range").Range; -var RangeList = require("./range_list").RangeList; -var HashHandler = require("./keyboard/hash_handler").HashHandler; -var Tokenizer = require("./tokenizer").Tokenizer; -var clipboard = require("./clipboard"); -var VARIABLES = { - CURRENT_WORD: function (editor) { - return editor.session.getTextRange(editor.session.getWordRange()); - }, - SELECTION: function (editor, name, indentation) { - var text = editor.session.getTextRange(); - if (indentation) - return text.replace(/\n\r?([ \t]*\S)/g, "\n" + indentation + "$1"); - return text; - }, - CURRENT_LINE: function (editor) { - return editor.session.getLine(editor.getCursorPosition().row); - }, - PREV_LINE: function (editor) { - return editor.session.getLine(editor.getCursorPosition().row - 1); - }, - LINE_INDEX: function (editor) { - return editor.getCursorPosition().row; - }, - LINE_NUMBER: function (editor) { - return editor.getCursorPosition().row + 1; - }, - SOFT_TABS: function (editor) { - return editor.session.getUseSoftTabs() ? "YES" : "NO"; - }, - TAB_SIZE: function (editor) { - return editor.session.getTabSize(); - }, - CLIPBOARD: function (editor) { - return clipboard.getText && clipboard.getText(); - }, - FILENAME: function (editor) { - return /[^/\\]*$/.exec(this.FILEPATH(editor))[0]; - }, - FILENAME_BASE: function (editor) { - return /[^/\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\.[^.]*$/, ""); - }, - DIRECTORY: function (editor) { - return this.FILEPATH(editor).replace(/[^/\\]*$/, ""); - }, - FILEPATH: function (editor) { return "/not implemented.txt"; }, - WORKSPACE_NAME: function () { return "Unknown"; }, - FULLNAME: function () { return "Unknown"; }, - BLOCK_COMMENT_START: function (editor) { - var mode = editor.session.$mode || {}; - return mode.blockComment && mode.blockComment.start || ""; - }, - BLOCK_COMMENT_END: function (editor) { - var mode = editor.session.$mode || {}; - return mode.blockComment && mode.blockComment.end || ""; - }, - LINE_COMMENT: function (editor) { - var mode = editor.session.$mode || {}; - return mode.lineCommentStart || ""; - }, - CURRENT_YEAR: date.bind(null, { year: "numeric" }), - CURRENT_YEAR_SHORT: date.bind(null, { year: "2-digit" }), - CURRENT_MONTH: date.bind(null, { month: "numeric" }), - CURRENT_MONTH_NAME: date.bind(null, { month: "long" }), - CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: "short" }), - CURRENT_DATE: date.bind(null, { day: "2-digit" }), - CURRENT_DAY_NAME: date.bind(null, { weekday: "long" }), - CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: "short" }), - CURRENT_HOUR: date.bind(null, { hour: "2-digit", hour12: false }), - CURRENT_MINUTE: date.bind(null, { minute: "2-digit" }), - CURRENT_SECOND: date.bind(null, { second: "2-digit" }) -}; -VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION; -function date(dateFormat) { - var str = new Date().toLocaleString("en-us", dateFormat); - return str.length == 1 ? "0" + str : str; -} -var SnippetManager = /** @class */ (function () { - function SnippetManager() { - this.snippetMap = {}; - this.snippetNameMap = {}; - this.variables = VARIABLES; - } - SnippetManager.prototype.getTokenizer = function () { - return SnippetManager["$tokenizer"] || this.createTokenizer(); - }; - SnippetManager.prototype.createTokenizer = function () { - function TabstopToken(str) { - str = str.substr(1); - if (/^\d+$/.test(str)) - return [{ tabstopId: parseInt(str, 10) }]; - return [{ text: str }]; - } - function escape(ch) { - return "(?:[^\\\\" + ch + "]|\\\\.)"; - } - var formatMatcher = { - regex: "/(" + escape("/") + "+)/", - onMatch: function (val, state, stack) { - var ts = stack[0]; - ts.fmtString = true; - ts.guard = val.slice(1, -1); - ts.flag = ""; - return ""; - }, - next: "formatString" - }; - SnippetManager["$tokenizer"] = new Tokenizer({ - start: [ - { regex: /\\./, onMatch: function (val, state, stack) { - var ch = val[1]; - if (ch == "}" && stack.length) { - val = ch; - } - else if ("`$\\".indexOf(ch) != -1) { - val = ch; - } - return [val]; - } }, - { regex: /}/, onMatch: function (val, state, stack) { - return [stack.length ? stack.shift() : val]; - } }, - { regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken }, - { regex: /\$\{[\dA-Z_a-z]+/, onMatch: function (str, state, stack) { - var t = TabstopToken(str.substr(1)); - stack.unshift(t[0]); - return t; - }, next: "snippetVar" }, - { regex: /\n/, token: "newline", merge: false } - ], - snippetVar: [ - { regex: "\\|" + escape("\\|") + "*\\|", onMatch: function (val, state, stack) { - var choices = val.slice(1, -1).replace(/\\[,|\\]|,/g, function (operator) { - return operator.length == 2 ? operator[1] : "\x00"; - }).split("\x00").map(function (value) { - return { value: value }; - }); - stack[0].choices = choices; - return [choices[0]]; - }, next: "start" }, - formatMatcher, - { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start" } - ], - formatString: [ - { regex: /:/, onMatch: function (val, state, stack) { - if (stack.length && stack[0].expectElse) { - stack[0].expectElse = false; - stack[0].ifEnd = { elseEnd: stack[0] }; - return [stack[0].ifEnd]; - } - return ":"; - } }, - { regex: /\\./, onMatch: function (val, state, stack) { - var ch = val[1]; - if (ch == "}" && stack.length) - val = ch; - else if ("`$\\".indexOf(ch) != -1) - val = ch; - else if (ch == "n") - val = "\n"; - else if (ch == "t") - val = "\t"; - else if ("ulULE".indexOf(ch) != -1) - val = { changeCase: ch, local: ch > "a" }; - return [val]; - } }, - { regex: "/\\w*}", onMatch: function (val, state, stack) { - var next = stack.shift(); - if (next) - next.flag = val.slice(1, -1); - this.next = next && next.tabstopId ? "start" : ""; - return [next || val]; - }, next: "start" }, - { regex: /\$(?:\d+|\w+)/, onMatch: function (val, state, stack) { - return [{ text: val.slice(1) }]; - } }, - { regex: /\${\w+/, onMatch: function (val, state, stack) { - var token = { text: val.slice(2) }; - stack.unshift(token); - return [token]; - }, next: "formatStringVar" }, - { regex: /\n/, token: "newline", merge: false }, - { regex: /}/, onMatch: function (val, state, stack) { - var next = stack.shift(); - this.next = next && next.tabstopId ? "start" : ""; - return [next || val]; - }, next: "start" } - ], - formatStringVar: [ - { regex: /:\/\w+}/, onMatch: function (val, state, stack) { - var ts = stack[0]; - ts.formatFunction = val.slice(2, -1); - return [stack.shift()]; - }, next: "formatString" }, - formatMatcher, - { regex: /:[\?\-+]?/, onMatch: function (val, state, stack) { - if (val[1] == "+") - stack[0].ifEnd = stack[0]; - if (val[1] == "?") - stack[0].expectElse = true; - }, next: "formatString" }, - { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "formatString" } - ] - }); - return SnippetManager["$tokenizer"]; - }; - SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) { - return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) { - return x.value || x; - }); - }; - SnippetManager.prototype.getVariableValue = function (editor, name, indentation) { - if (/^\d+$/.test(name)) - return (this.variables.__ || {})[name] || ""; - if (/^[A-Z]\d+$/.test(name)) - return (this.variables[name[0] + "__"] || {})[name.substr(1)] || ""; - name = name.replace(/^TM_/, ""); - if (!this.variables.hasOwnProperty(name)) - return ""; - var value = this.variables[name]; - if (typeof value == "function") - value = this.variables[name](editor, name, indentation); - return value == null ? "" : value; - }; - SnippetManager.prototype.tmStrFormat = function (str, ch, editor) { - if (!ch.fmt) - return str; - var flag = ch.flag || ""; - var re = ch.guard; - re = new RegExp(re, flag.replace(/[^gim]/g, "")); - var fmtTokens = typeof ch.fmt == "string" ? this.tokenizeTmSnippet(ch.fmt, "formatString") : ch.fmt; - var _self = this; - var formatted = str.replace(re, function () { - var oldArgs = _self.variables.__; - _self.variables.__ = [].slice.call(arguments); - var fmtParts = _self.resolveVariables(fmtTokens, editor); - var gChangeCase = "E"; - for (var i = 0; i < fmtParts.length; i++) { - var ch = fmtParts[i]; - if (typeof ch == "object") { - fmtParts[i] = ""; - if (ch.changeCase && ch.local) { - var next = fmtParts[i + 1]; - if (next && typeof next == "string") { - if (ch.changeCase == "u") - fmtParts[i] = next[0].toUpperCase(); - else - fmtParts[i] = next[0].toLowerCase(); - fmtParts[i + 1] = next.substr(1); - } - } - else if (ch.changeCase) { - gChangeCase = ch.changeCase; - } - } - else if (gChangeCase == "U") { - fmtParts[i] = ch.toUpperCase(); - } - else if (gChangeCase == "L") { - fmtParts[i] = ch.toLowerCase(); - } - } - _self.variables.__ = oldArgs; - return fmtParts.join(""); - }); - return formatted; - }; - SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) { - if (ch.formatFunction == "upcase") - return str.toUpperCase(); - if (ch.formatFunction == "downcase") - return str.toLowerCase(); - return str; - }; - SnippetManager.prototype.resolveVariables = function (snippet, editor) { - var result = []; - var indentation = ""; - var afterNewLine = true; - for (var i = 0; i < snippet.length; i++) { - var ch = snippet[i]; - if (typeof ch == "string") { - result.push(ch); - if (ch == "\n") { - afterNewLine = true; - indentation = ""; - } - else if (afterNewLine) { - indentation = /^\t*/.exec(ch)[0]; - afterNewLine = /\S/.test(ch); - } - continue; - } - if (!ch) - continue; - afterNewLine = false; - if (ch.fmtString) { - var j = snippet.indexOf(ch, i + 1); - if (j == -1) - j = snippet.length; - ch.fmt = snippet.slice(i + 1, j); - i = j; - } - if (ch.text) { - var value = this.getVariableValue(editor, ch.text, indentation) + ""; - if (ch.fmtString) - value = this.tmStrFormat(value, ch, editor); - if (ch.formatFunction) - value = this.tmFormatFunction(value, ch, editor); - if (value && !ch.ifEnd) { - result.push(value); - gotoNext(ch); - } - else if (!value && ch.ifEnd) { - gotoNext(ch.ifEnd); - } - } - else if (ch.elseEnd) { - gotoNext(ch.elseEnd); - } - else if (ch.tabstopId != null) { - result.push(ch); - } - else if (ch.changeCase != null) { - result.push(ch); - } - } - function gotoNext(ch) { - var i1 = snippet.indexOf(ch, i + 1); - if (i1 != -1) - i = i1; - } - return result; - }; - SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) { - var processedSnippet = processSnippetText.call(this, editor, snippetText); - return processedSnippet.text; - }; - SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) { - if (options === void 0) { options = {}; } - var processedSnippet = processSnippetText.call(this, editor, snippetText, options); - var range = editor.getSelectionRange(); - var end = editor.session.replace(range, processedSnippet.text); - var tabstopManager = new TabstopManager(editor); - var selectionId = editor.inVirtualSelectionMode && editor.selection.index; - tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId); - }; - SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) { - if (options === void 0) { options = {}; } - var self = this; - if (editor.inVirtualSelectionMode) - return self.insertSnippetForSelection(editor, snippetText, options); - editor.forEachSelection(function () { - self.insertSnippetForSelection(editor, snippetText, options); - }, null, { keepOrder: true }); - if (editor.tabstopManager) - editor.tabstopManager.tabNext(); - }; - SnippetManager.prototype.$getScope = function (editor) { - var scope = editor.session.$mode.$id || ""; - scope = scope.split("/").pop(); - if (scope === "html" || scope === "php") { - if (scope === "php" && !editor.session.$mode.inlinePhp) - scope = "html"; - var c = editor.getCursorPosition(); - var state = editor.session.getState(c.row); - if (typeof state === "object") { - state = state[0]; - } - if (state.substring) { - if (state.substring(0, 3) == "js-") - scope = "javascript"; - else if (state.substring(0, 4) == "css-") - scope = "css"; - else if (state.substring(0, 4) == "php-") - scope = "php"; - } - } - return scope; - }; - SnippetManager.prototype.getActiveScopes = function (editor) { - var scope = this.$getScope(editor); - var scopes = [scope]; - var snippetMap = this.snippetMap; - if (snippetMap[scope] && snippetMap[scope].includeScopes) { - scopes.push.apply(scopes, snippetMap[scope].includeScopes); - } - scopes.push("_"); - return scopes; - }; - SnippetManager.prototype.expandWithTab = function (editor, options) { - var self = this; - var result = editor.forEachSelection(function () { - return self.expandSnippetForSelection(editor, options); - }, null, { keepOrder: true }); - if (result && editor.tabstopManager) - editor.tabstopManager.tabNext(); - return result; - }; - SnippetManager.prototype.expandSnippetForSelection = function (editor, options) { - var cursor = editor.getCursorPosition(); - var line = editor.session.getLine(cursor.row); - var before = line.substring(0, cursor.column); - var after = line.substr(cursor.column); - var snippetMap = this.snippetMap; - var snippet; - this.getActiveScopes(editor).some(function (scope) { - var snippets = snippetMap[scope]; - if (snippets) - snippet = this.findMatchingSnippet(snippets, before, after); - return !!snippet; - }, this); - if (!snippet) - return false; - if (options && options.dryRun) - return true; - editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length); - this.variables.M__ = snippet.matchBefore; - this.variables.T__ = snippet.matchAfter; - this.insertSnippetForSelection(editor, snippet.content); - this.variables.M__ = this.variables.T__ = null; - return true; - }; - SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) { - for (var i = snippetList.length; i--;) { - var s = snippetList[i]; - if (s.startRe && !s.startRe.test(before)) - continue; - if (s.endRe && !s.endRe.test(after)) - continue; - if (!s.startRe && !s.endRe) - continue; - s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; - s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; - s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; - s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; - return s; - } - }; - SnippetManager.prototype.register = function (snippets, scope) { - var snippetMap = this.snippetMap; - var snippetNameMap = this.snippetNameMap; - var self = this; - if (!snippets) - snippets = []; - function wrapRegexp(src) { - if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) - src = "(?:" + src + ")"; - return src || ""; - } - function guardedRegexp(re, guard, opening) { - re = wrapRegexp(re); - guard = wrapRegexp(guard); - if (opening) { - re = guard + re; - if (re && re[re.length - 1] != "$") - re = re + "$"; - } - else { - re = re + guard; - if (re && re[0] != "^") - re = "^" + re; - } - return new RegExp(re); - } - function addSnippet(s) { - if (!s.scope) - s.scope = scope || "_"; - scope = s.scope; - if (!snippetMap[scope]) { - snippetMap[scope] = []; - snippetNameMap[scope] = {}; - } - var map = snippetNameMap[scope]; - if (s.name) { - var old = map[s.name]; - if (old) - self.unregister(old); - map[s.name] = s; - } - snippetMap[scope].push(s); - if (s.prefix) - s.tabTrigger = s.prefix; - if (!s.content && s.body) - s.content = Array.isArray(s.body) ? s.body.join("\n") : s.body; - if (s.tabTrigger && !s.trigger) { - if (!s.guard && /^\w/.test(s.tabTrigger)) - s.guard = "\\b"; - s.trigger = lang.escapeRegExp(s.tabTrigger); - } - if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) - return; - s.startRe = guardedRegexp(s.trigger, s.guard, true); - s.triggerRe = new RegExp(s.trigger); - s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); - s.endTriggerRe = new RegExp(s.endTrigger); - } - if (Array.isArray(snippets)) { - snippets.forEach(addSnippet); - } - else { - Object.keys(snippets).forEach(function (key) { - addSnippet(snippets[key]); - }); - } - this._signal("registerSnippets", { scope: scope }); - }; - SnippetManager.prototype.unregister = function (snippets, scope) { - var snippetMap = this.snippetMap; - var snippetNameMap = this.snippetNameMap; - function removeSnippet(s) { - var nameMap = snippetNameMap[s.scope || scope]; - if (nameMap && nameMap[s.name]) { - delete nameMap[s.name]; - var map = snippetMap[s.scope || scope]; - var i = map && map.indexOf(s); - if (i >= 0) - map.splice(i, 1); - } - } - if (snippets.content) - removeSnippet(snippets); - else if (Array.isArray(snippets)) - snippets.forEach(removeSnippet); - }; - SnippetManager.prototype.parseSnippetFile = function (str) { - str = str.replace(/\r/g, ""); - var list = [], /**@type{Snippet}*/ snippet = {}; - var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; - var m; - while (m = re.exec(str)) { - if (m[1]) { - try { - snippet = JSON.parse(m[1]); - list.push(snippet); - } - catch (e) { } - } - if (m[4]) { - snippet.content = m[4].replace(/^\t/gm, ""); - list.push(snippet); - snippet = {}; - } - else { - var key = m[2], val = m[3]; - if (key == "regex") { - var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; - snippet.guard = guardRe.exec(val)[1]; - snippet.trigger = guardRe.exec(val)[1]; - snippet.endTrigger = guardRe.exec(val)[1]; - snippet.endGuard = guardRe.exec(val)[1]; - } - else if (key == "snippet") { - snippet.tabTrigger = val.match(/^\S*/)[0]; - if (!snippet.name) - snippet.name = val; - } - else if (key) { - snippet[key] = val; - } - } - } - return list; - }; - SnippetManager.prototype.getSnippetByName = function (name, editor) { - var snippetMap = this.snippetNameMap; - var snippet; - this.getActiveScopes(editor).some(function (scope) { - var snippets = snippetMap[scope]; - if (snippets) - snippet = snippets[name]; - return !!snippet; - }, this); - return snippet; - }; - return SnippetManager; -}()); -oop.implement(SnippetManager.prototype, EventEmitter); -var processSnippetText = function (editor, snippetText, options) { - if (options === void 0) { options = {}; } - var cursor = editor.getCursorPosition(); - var line = editor.session.getLine(cursor.row); - var tabString = editor.session.getTabString(); - var indentString = line.match(/^\s*/)[0]; - if (cursor.column < indentString.length) - indentString = indentString.slice(0, cursor.column); - snippetText = snippetText.replace(/\r/g, ""); - var tokens = this.tokenizeTmSnippet(snippetText); - tokens = this.resolveVariables(tokens, editor); - tokens = tokens.map(function (x) { - if (x == "\n" && !options.excludeExtraIndent) - return x + indentString; - if (typeof x == "string") - return x.replace(/\t/g, tabString); - return x; - }); - var tabstops = []; - tokens.forEach(function (p, i) { - if (typeof p != "object") - return; - var id = p.tabstopId; - var ts = tabstops[id]; - if (!ts) { - ts = tabstops[id] = []; - ts.index = id; - ts.value = ""; - ts.parents = {}; - } - if (ts.indexOf(p) !== -1) - return; - if (p.choices && !ts.choices) - ts.choices = p.choices; - ts.push(p); - var i1 = tokens.indexOf(p, i + 1); - if (i1 === -1) - return; - var value = tokens.slice(i + 1, i1); - var isNested = value.some(function (t) { return typeof t === "object"; }); - if (isNested && !ts.value) { - ts.value = value; - } - else if (value.length && (!ts.value || typeof ts.value !== "string")) { - ts.value = value.join(""); - } - }); - tabstops.forEach(function (ts) { ts.length = 0; }); - var expanding = {}; - function copyValue(val) { - var copy = []; - for (var i = 0; i < val.length; i++) { - var p = val[i]; - if (typeof p == "object") { - if (expanding[p.tabstopId]) - continue; - var j = val.lastIndexOf(p, i - 1); - p = copy[j] || { tabstopId: p.tabstopId }; - } - copy[i] = p; - } - return copy; - } - for (var i = 0; i < tokens.length; i++) { - var p = tokens[i]; - if (typeof p != "object") - continue; - var id = p.tabstopId; - var ts = tabstops[id]; - var i1 = tokens.indexOf(p, i + 1); - if (expanding[id]) { - if (expanding[id] === p) { - delete expanding[id]; - Object.keys(expanding).forEach(function (parentId) { - ts.parents[parentId] = true; - }); - } - continue; - } - expanding[id] = p; - var value = ts.value; - if (typeof value !== "string") - value = copyValue(value); - else if (p.fmt) - value = this.tmStrFormat(value, p, editor); - tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p)); - if (ts.indexOf(p) === -1) - ts.push(p); - } - var row = 0, column = 0; - var text = ""; - tokens.forEach(function (t) { - if (typeof t === "string") { - var lines = t.split("\n"); - if (lines.length > 1) { - column = lines[lines.length - 1].length; - row += lines.length - 1; - } - else - column += t.length; - text += t; - } - else if (t) { - if (!t.start) - t.start = { row: row, column: column }; - else - t.end = { row: row, column: column }; - } - }); - return { - text: text, - tabstops: tabstops, - tokens: tokens - }; -}; -var TabstopManager = /** @class */ (function () { - function TabstopManager(editor) { - this.index = 0; - this.ranges = []; - this.tabstops = []; - if (editor.tabstopManager) - return editor.tabstopManager; - editor.tabstopManager = this; - this.$onChange = this.onChange.bind(this); - this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; - this.$onChangeSession = this.onChangeSession.bind(this); - this.$onAfterExec = this.onAfterExec.bind(this); - this.attach(editor); - } - TabstopManager.prototype.attach = function (editor) { - this.$openTabstops = null; - this.selectedTabstop = null; - this.editor = editor; - this.session = editor.session; - this.editor.on("change", this.$onChange); - this.editor.on("changeSelection", this.$onChangeSelection); - this.editor.on("changeSession", this.$onChangeSession); - this.editor.commands.on("afterExec", this.$onAfterExec); - this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); - }; - TabstopManager.prototype.detach = function () { - this.tabstops.forEach(this.removeTabstopMarkers, this); - this.ranges.length = 0; - this.tabstops.length = 0; - this.selectedTabstop = null; - this.editor.off("change", this.$onChange); - this.editor.off("changeSelection", this.$onChangeSelection); - this.editor.off("changeSession", this.$onChangeSession); - this.editor.commands.off("afterExec", this.$onAfterExec); - this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); - this.editor.tabstopManager = null; - this.session = null; - this.editor = null; - }; - TabstopManager.prototype.onChange = function (delta) { - var isRemove = delta.action[0] == "r"; - var selectedTabstop = this.selectedTabstop || {}; - var parents = selectedTabstop.parents || {}; - var tabstops = this.tabstops.slice(); - for (var i = 0; i < tabstops.length; i++) { - var ts = tabstops[i]; - var active = ts == selectedTabstop || parents[ts.index]; - ts.rangeList.$bias = active ? 0 : 1; - if (delta.action == "remove" && ts !== selectedTabstop) { - var parentActive = ts.parents && ts.parents[selectedTabstop.index]; - var startIndex = ts.rangeList.pointIndex(delta.start, parentActive); - startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1; - var endIndex = ts.rangeList.pointIndex(delta.end, parentActive); - endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1; - var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex); - for (var j = 0; j < toRemove.length; j++) - this.removeRange(toRemove[j]); - } - ts.rangeList.$onChange(delta); - } - var session = this.session; - if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue()) - this.detach(); - }; - TabstopManager.prototype.updateLinkedFields = function () { - var ts = this.selectedTabstop; - if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked) - return; - this.$inChange = true; - var session = this.session; - var text = session.getTextRange(ts.firstNonLinked); - for (var i = 0; i < ts.length; i++) { - var range = ts[i]; - if (!range.linked) - continue; - var original = range.original; - var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor); - session.replace(range, fmt); - } - this.$inChange = false; - }; - TabstopManager.prototype.onAfterExec = function (e) { - if (e.command && !e.command.readOnly) - this.updateLinkedFields(); - }; - TabstopManager.prototype.onChangeSelection = function () { - if (!this.editor) - return; - var lead = this.editor.selection.lead; - var anchor = this.editor.selection.anchor; - var isEmpty = this.editor.selection.isEmpty(); - for (var i = 0; i < this.ranges.length; i++) { - if (this.ranges[i].linked) - continue; - var containsLead = this.ranges[i].contains(lead.row, lead.column); - var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); - if (containsLead && containsAnchor) - return; - } - this.detach(); - }; - TabstopManager.prototype.onChangeSession = function () { - this.detach(); - }; - TabstopManager.prototype.tabNext = function (dir) { - var max = this.tabstops.length; - var index = this.index + (dir || 1); - index = Math.min(Math.max(index, 1), max); - if (index == max) - index = 0; - this.selectTabstop(index); - this.updateTabstopMarkers(); - if (index === 0) { - this.detach(); - } - }; - TabstopManager.prototype.selectTabstop = function (index) { - this.$openTabstops = null; - var ts = this.tabstops[this.index]; - if (ts) - this.addTabstopMarkers(ts); - this.index = index; - ts = this.tabstops[this.index]; - if (!ts || !ts.length) - return; - this.selectedTabstop = ts; - var range = ts.firstNonLinked || ts; - if (ts.choices) - range.cursor = range.start; - if (!this.editor.inVirtualSelectionMode) { - var sel = this.editor.multiSelect; - sel.toSingleRange(range); - for (var i = 0; i < ts.length; i++) { - if (ts.hasLinkedRanges && ts[i].linked) - continue; - sel.addRange(ts[i].clone(), true); - } - } - else { - this.editor.selection.fromOrientedRange(range); - } - this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); - if (this.selectedTabstop && this.selectedTabstop.choices) - this.editor.execCommand("startAutocomplete", { matches: this.selectedTabstop.choices }); - }; - TabstopManager.prototype.addTabstops = function (tabstops, start, end) { - var useLink = this.useLink || !this.editor.getOption("enableMultiselect"); - if (!this.$openTabstops) - this.$openTabstops = []; - if (!tabstops[0]) { - var p = Range.fromPoints(end, end); - moveRelative(p.start, start); - moveRelative(p.end, start); - tabstops[0] = [p]; - tabstops[0].index = 0; - } - var i = this.index; - var arg = [i + 1, 0]; - var ranges = this.ranges; - var snippetId = this.snippetId = (this.snippetId || 0) + 1; - tabstops.forEach(function (ts, index) { - var dest = this.$openTabstops[index] || ts; - dest.snippetId = snippetId; - for (var i = 0; i < ts.length; i++) { - var p = ts[i]; - var range = Range.fromPoints(p.start, p.end || p.start); - movePoint(range.start, start); - movePoint(range.end, start); - range.original = p; - range.tabstop = dest; - ranges.push(range); - if (dest != ts) - dest.unshift(range); - else - dest[i] = range; - if (p.fmtString || (dest.firstNonLinked && useLink)) { - range.linked = true; - dest.hasLinkedRanges = true; - } - else if (!dest.firstNonLinked) - dest.firstNonLinked = range; - } - if (!dest.firstNonLinked) - dest.hasLinkedRanges = false; - if (dest === ts) { - arg.push(dest); - this.$openTabstops[index] = dest; - } - this.addTabstopMarkers(dest); - dest.rangeList = dest.rangeList || new RangeList(); - dest.rangeList.$bias = 0; - dest.rangeList.addList(dest); - }, this); - if (arg.length > 2) { - if (this.tabstops.length) - arg.push(arg.splice(2, 1)[0]); - this.tabstops.splice.apply(this.tabstops, arg); - } - }; - TabstopManager.prototype.addTabstopMarkers = function (ts) { - var session = this.session; - ts.forEach(function (range) { - if (!range.markerId) - range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); - }); - }; - TabstopManager.prototype.removeTabstopMarkers = function (ts) { - var session = this.session; - ts.forEach(function (range) { - session.removeMarker(range.markerId); - range.markerId = null; - }); - }; - TabstopManager.prototype.updateTabstopMarkers = function () { - if (!this.selectedTabstop) - return; - var currentSnippetId = this.selectedTabstop.snippetId; - if (this.selectedTabstop.index === 0) { - currentSnippetId--; - } - this.tabstops.forEach(function (ts) { - if (ts.snippetId === currentSnippetId) - this.addTabstopMarkers(ts); - else - this.removeTabstopMarkers(ts); - }, this); - }; - TabstopManager.prototype.removeRange = function (range) { - var i = range.tabstop.indexOf(range); - if (i != -1) - range.tabstop.splice(i, 1); - i = this.ranges.indexOf(range); - if (i != -1) - this.ranges.splice(i, 1); - i = range.tabstop.rangeList.ranges.indexOf(range); - if (i != -1) - range.tabstop.splice(i, 1); - this.session.removeMarker(range.markerId); - if (!range.tabstop.length) { - i = this.tabstops.indexOf(range.tabstop); - if (i != -1) - this.tabstops.splice(i, 1); - if (!this.tabstops.length) - this.detach(); - } - }; - return TabstopManager; -}()); -TabstopManager.prototype.keyboardHandler = new HashHandler(); -TabstopManager.prototype.keyboardHandler.bindKeys({ - "Tab": function (editor) { - if (exports.snippetManager && exports.snippetManager.expandWithTab(editor)) - return; - editor.tabstopManager.tabNext(1); - editor.renderer.scrollCursorIntoView(); - }, - "Shift-Tab": function (editor) { - editor.tabstopManager.tabNext(-1); - editor.renderer.scrollCursorIntoView(); - }, - "Esc": function (editor) { - editor.tabstopManager.detach(); - } -}); -var movePoint = function (point, diff) { - if (point.row == 0) - point.column += diff.column; - point.row += diff.row; -}; -var moveRelative = function (point, start) { - if (point.row == start.row) - point.column -= start.column; - point.row -= start.row; -}; -dom.importCssString("\n.ace_snippet-marker {\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n background: rgba(194, 193, 208, 0.09);\n border: 1px dotted rgba(211, 208, 235, 0.62);\n position: absolute;\n}", "snippets.css", false); -exports.snippetManager = new SnippetManager(); -var Editor = require("./editor").Editor; -(function () { - this.insertSnippet = function (content, options) { - return exports.snippetManager.insertSnippet(this, content, options); - }; - this.expandSnippet = function (options) { - return exports.snippetManager.expandWithTab(this, options); - }; -}).call(Editor.prototype); - -}); - -ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/config","ace/lib/useragent"], function(require, exports, module){"use strict"; -var Renderer = require("../virtual_renderer").VirtualRenderer; -var Editor = require("../editor").Editor; -var Range = require("../range").Range; -var event = require("../lib/event"); -var lang = require("../lib/lang"); -var dom = require("../lib/dom"); -var nls = require("../config").nls; -var userAgent = require("./../lib/useragent"); -var getAriaId = function (index) { - return "suggest-aria-id:".concat(index); -}; -var popupAriaRole = userAgent.isSafari ? "menu" : "listbox"; -var optionAriaRole = userAgent.isSafari ? "menuitem" : "option"; -var ariaActiveState = userAgent.isSafari ? "aria-current" : "aria-selected"; -var $singleLineEditor = function (el) { - var renderer = new Renderer(el); - renderer.$maxLines = 4; - var editor = new Editor(renderer); - editor.setHighlightActiveLine(false); - editor.setShowPrintMargin(false); - editor.renderer.setShowGutter(false); - editor.renderer.setHighlightGutterLine(false); - editor.$mouseHandler.$focusTimeout = 0; - editor.$highlightTagPending = true; - return editor; -}; -var AcePopup = /** @class */ (function () { - function AcePopup(parentNode) { - var el = dom.createElement("div"); - var popup = $singleLineEditor(el); - if (parentNode) { - parentNode.appendChild(el); - } - el.style.display = "none"; - popup.renderer.content.style.cursor = "default"; - popup.renderer.setStyle("ace_autocomplete"); - popup.renderer.$textLayer.element.setAttribute("role", popupAriaRole); - popup.renderer.$textLayer.element.setAttribute("aria-roledescription", nls("autocomplete.popup.aria-roledescription", "Autocomplete suggestions")); - popup.renderer.$textLayer.element.setAttribute("aria-label", nls("autocomplete.popup.aria-label", "Autocomplete suggestions")); - popup.renderer.textarea.setAttribute("aria-hidden", "true"); - popup.setOption("displayIndentGuides", false); - popup.setOption("dragDelay", 150); - var noop = function () { }; - popup.focus = noop; - popup.$isFocused = true; - popup.renderer.$cursorLayer.restartTimer = noop; - popup.renderer.$cursorLayer.element.style.opacity = "0"; - popup.renderer.$maxLines = 8; - popup.renderer.$keepTextAreaAtCursor = false; - popup.setHighlightActiveLine(false); - popup.session.highlight(""); - popup.session.$searchHighlight.clazz = "ace_highlight-marker"; - popup.on("mousedown", function (e) { - var pos = e.getDocumentPosition(); - popup.selection.moveToPosition(pos); - selectionMarker.start.row = selectionMarker.end.row = pos.row; - e.stop(); - }); - var lastMouseEvent; - var hoverMarker = new Range(-1, 0, -1, Infinity); - var selectionMarker = new Range(-1, 0, -1, Infinity); - selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine"); - popup.setSelectOnHover = function (val) { - if (!val) { - hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine"); - } - else if (hoverMarker.id) { - popup.session.removeMarker(hoverMarker.id); - hoverMarker.id = null; - } - }; - popup.setSelectOnHover(false); - popup.on("mousemove", function (e) { - if (!lastMouseEvent) { - lastMouseEvent = e; - return; - } - if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) { - return; - } - lastMouseEvent = e; - lastMouseEvent.scrollTop = popup.renderer.scrollTop; - popup.isMouseOver = true; - var row = lastMouseEvent.getDocumentPosition().row; - if (hoverMarker.start.row != row) { - if (!hoverMarker.id) - popup.setRow(row); - setHoverMarker(row); - } - }); - popup.renderer.on("beforeRender", function () { - if (lastMouseEvent && hoverMarker.start.row != -1) { - lastMouseEvent.$pos = null; - var row = lastMouseEvent.getDocumentPosition().row; - if (!hoverMarker.id) - popup.setRow(row); - setHoverMarker(row, true); - } - }); - popup.renderer.on("afterRender", function () { - var t = popup.renderer.$textLayer; - for (var row = t.config.firstRow, l = t.config.lastRow; row <= l; row++) { - var popupRowElement = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]); - popupRowElement.setAttribute("role", optionAriaRole); - popupRowElement.setAttribute("aria-roledescription", nls("autocomplete.popup.item.aria-roledescription", "item")); - popupRowElement.setAttribute("aria-setsize", popup.data.length); - popupRowElement.setAttribute("aria-describedby", "doc-tooltip"); - popupRowElement.setAttribute("aria-posinset", row + 1); - var rowData = popup.getData(row); - if (rowData) { - var ariaLabel = "".concat(rowData.caption || rowData.value).concat(rowData.meta ? ", ".concat(rowData.meta) : ''); - popupRowElement.setAttribute("aria-label", ariaLabel); - } - var highlightedSpans = popupRowElement.querySelectorAll(".ace_completion-highlight"); - highlightedSpans.forEach(function (span) { - span.setAttribute("role", "mark"); - }); - } - }); - popup.renderer.on("afterRender", function () { - var row = popup.getRow(); - var t = popup.renderer.$textLayer; - var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]); - var el = document.activeElement; // Active element is textarea of main editor - if (selected !== popup.selectedNode && popup.selectedNode) { - dom.removeCssClass(popup.selectedNode, "ace_selected"); - popup.selectedNode.removeAttribute(ariaActiveState); - popup.selectedNode.removeAttribute("id"); - } - el.removeAttribute("aria-activedescendant"); - popup.selectedNode = selected; - if (selected) { - var ariaId = getAriaId(row); - dom.addCssClass(selected, "ace_selected"); - selected.id = ariaId; - t.element.setAttribute("aria-activedescendant", ariaId); - el.setAttribute("aria-activedescendant", ariaId); - selected.setAttribute(ariaActiveState, "true"); - } - }); - var hideHoverMarker = function () { setHoverMarker(-1); }; - var setHoverMarker = function (row, suppressRedraw) { - if (row !== hoverMarker.start.row) { - hoverMarker.start.row = hoverMarker.end.row = row; - if (!suppressRedraw) - popup.session._emit("changeBackMarker"); - popup._emit("changeHoverMarker"); - } - }; - popup.getHoveredRow = function () { - return hoverMarker.start.row; - }; - event.addListener(popup.container, "mouseout", function () { - popup.isMouseOver = false; - hideHoverMarker(); - }); - popup.on("hide", hideHoverMarker); - popup.on("changeSelection", hideHoverMarker); - popup.session.doc.getLength = function () { - return popup.data.length; - }; - popup.session.doc.getLine = function (i) { - var data = popup.data[i]; - if (typeof data == "string") - return data; - return (data && data.value) || ""; - }; - var bgTokenizer = popup.session.bgTokenizer; - bgTokenizer.$tokenizeRow = function (row) { - var data = popup.data[row]; - var tokens = []; - if (!data) - return tokens; - if (typeof data == "string") - data = { value: data }; - var caption = data.caption || data.value || data.name; - function addToken(value, className) { - value && tokens.push({ - type: (data.className || "") + (className || ""), - value: value - }); - } - var lower = caption.toLowerCase(); - var filterText = (popup.filterText || "").toLowerCase(); - var lastIndex = 0; - var lastI = 0; - for (var i = 0; i <= filterText.length; i++) { - if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) { - var sub = filterText.slice(lastI, i); - lastI = i; - var index = lower.indexOf(sub, lastIndex); - if (index == -1) - continue; - addToken(caption.slice(lastIndex, index), ""); - lastIndex = index + sub.length; - addToken(caption.slice(index, lastIndex), "completion-highlight"); - } - } - addToken(caption.slice(lastIndex, caption.length), ""); - tokens.push({ type: "completion-spacer", value: " " }); - if (data.meta) - tokens.push({ type: "completion-meta", value: data.meta }); - if (data.message) - tokens.push({ type: "completion-message", value: data.message }); - return tokens; - }; - bgTokenizer.$updateOnChange = noop; - bgTokenizer.start = noop; - popup.session.$computeWidth = function () { - return this.screenWidth = 0; - }; - popup.isOpen = false; - popup.isTopdown = false; - popup.autoSelect = true; - popup.filterText = ""; - popup.isMouseOver = false; - popup.data = []; - popup.setData = function (list, filterText) { - popup.filterText = filterText || ""; - popup.setValue(lang.stringRepeat("\n", list.length), -1); - popup.data = list || []; - popup.setRow(0); - }; - popup.getData = function (row) { - return popup.data[row]; - }; - popup.getRow = function () { - return selectionMarker.start.row; - }; - popup.setRow = function (line) { - line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line)); - if (selectionMarker.start.row != line) { - popup.selection.clearSelection(); - selectionMarker.start.row = selectionMarker.end.row = line || 0; - popup.session._emit("changeBackMarker"); - popup.moveCursorTo(line || 0, 0); - if (popup.isOpen) - popup._signal("select"); - } - }; - popup.on("changeSelection", function () { - if (popup.isOpen) - popup.setRow(popup.selection.lead.row); - popup.renderer.scrollCursorIntoView(); - }); - popup.hide = function () { - this.container.style.display = "none"; - popup.anchorPos = null; - popup.anchor = null; - if (popup.isOpen) { - popup.isOpen = false; - this._signal("hide"); - } - }; - popup.tryShow = function (pos, lineHeight, anchor, forceShow) { - if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor && - popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left && - popup.anchor === anchor) { - return true; - } - var el = this.container; - var scrollBarSize = this.renderer.scrollBar.width || 10; - var screenHeight = window.innerHeight - scrollBarSize; - var screenWidth = window.innerWidth - scrollBarSize; - var renderer = this.renderer; - var maxH = renderer.$maxLines * lineHeight * 1.4; - var dims = { top: 0, bottom: 0, left: 0 }; - var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight; - var spaceAbove = pos.top - 3 * this.$borderSize; - if (!anchor) { - if (spaceAbove <= spaceBelow || spaceBelow >= maxH) { - anchor = "bottom"; - } - else { - anchor = "top"; - } - } - if (anchor === "top") { - dims.bottom = pos.top - this.$borderSize; - dims.top = dims.bottom - maxH; - } - else if (anchor === "bottom") { - dims.top = pos.top + lineHeight + this.$borderSize; - dims.bottom = dims.top + maxH; - } - var fitsX = dims.top >= 0 && dims.bottom <= screenHeight; - if (!forceShow && !fitsX) { - return false; - } - if (!fitsX) { - if (anchor === "top") { - renderer.$maxPixelHeight = spaceAbove; - } - else { - renderer.$maxPixelHeight = spaceBelow; - } - } - else { - renderer.$maxPixelHeight = null; - } - el.style.display = ""; - var rootRect = el.offsetParent && el.offsetParent.getBoundingClientRect(); - if (anchor === "top") { - el.style.top = ""; - el.style.bottom = (screenHeight + scrollBarSize - dims.bottom) - - (rootRect ? screenHeight + scrollBarSize - rootRect.bottom : 0) + "px"; - popup.isTopdown = false; - } - else { - el.style.top = (dims.top - (rootRect ? rootRect.top : 0)) + "px"; - el.style.bottom = ""; - popup.isTopdown = true; - } - var left = pos.left; - if (left + el.offsetWidth > screenWidth) - left = screenWidth - el.offsetWidth; - el.style.left = (left - (rootRect ? rootRect.left : 0)) + "px"; - el.style.right = ""; - if (!popup.isOpen) { - popup.isOpen = true; - this._signal("show"); - lastMouseEvent = null; - } - popup.anchorPos = pos; - popup.anchor = anchor; - return true; - }; - popup.show = function (pos, lineHeight, topdownOnly) { - this.tryShow(pos, lineHeight, topdownOnly ? "bottom" : undefined, true); - }; - popup.goTo = function (where) { - var row = this.getRow(); - var max = this.session.getLength() - 1; - switch (where) { - case "up": - row = row <= 0 ? max : row - 1; - break; - case "down": - row = row >= max ? -1 : row + 1; - break; - case "start": - row = 0; - break; - case "end": - row = max; - break; - } - this.setRow(row); - }; - popup.getTextLeftOffset = function () { - return this.$borderSize + this.renderer.$padding + this.$imageSize; - }; - popup.$imageSize = 0; - popup.$borderSize = 1; - return popup; - } - return AcePopup; -}()); -dom.importCssString("\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n background-color: #CAD6FA;\n z-index: 1;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n background-color: #3a674e;\n}\n.ace_editor.ace_autocomplete .ace_line-hover {\n border: 1px solid #abbffe;\n margin-top: -1px;\n background: rgba(233,233,253,0.4);\n position: absolute;\n z-index: 2;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\n border: 1px solid rgba(109, 150, 13, 0.8);\n background: rgba(58, 103, 78, 0.62);\n}\n.ace_completion-meta {\n opacity: 0.5;\n margin-left: 0.9em;\n}\n.ace_completion-message {\n margin-left: 0.9em;\n color: blue;\n}\n.ace_editor.ace_autocomplete .ace_completion-highlight{\n color: #2d69c7;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\n color: #93ca12;\n}\n.ace_editor.ace_autocomplete {\n width: 300px;\n z-index: 200000;\n border: 1px lightgray solid;\n position: absolute;\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n line-height: 1.4;\n background: #fefefe;\n color: #111;\n}\n.ace_dark.ace_editor.ace_autocomplete {\n border: 1px #484747 solid;\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\n line-height: 1.4;\n background: #25282c;\n color: #c1c1c1;\n}\n.ace_autocomplete .ace_text-layer {\n width: calc(100% - 8px);\n}\n.ace_autocomplete .ace_line {\n display: flex;\n align-items: center;\n}\n.ace_autocomplete .ace_line > * {\n min-width: 0;\n flex: 0 0 auto;\n}\n.ace_autocomplete .ace_line .ace_ {\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ace_autocomplete .ace_completion-spacer {\n flex: 1;\n}\n.ace_autocomplete.ace_loading:after {\n content: \"\";\n position: absolute;\n top: 0px;\n height: 2px;\n width: 8%;\n background: blue;\n z-index: 100;\n animation: ace_progress 3s infinite linear;\n animation-delay: 300ms;\n transform: translateX(-100%) scaleX(1);\n}\n@keyframes ace_progress {\n 0% { transform: translateX(-100%) scaleX(1) }\n 50% { transform: translateX(625%) scaleX(2) } \n 100% { transform: translateX(1500%) scaleX(3) } \n}\n@media (prefers-reduced-motion) {\n .ace_autocomplete.ace_loading:after {\n transform: translateX(625%) scaleX(2);\n animation: none;\n }\n}\n", "autocompletion.css", false); -exports.AcePopup = AcePopup; -exports.$singleLineEditor = $singleLineEditor; -exports.getAriaId = getAriaId; - -}); - -ace.define("ace/autocomplete/inline_screenreader",["require","exports","module"], function(require, exports, module){"use strict"; -var AceInlineScreenReader = /** @class */ (function () { - function AceInlineScreenReader(editor) { - this.editor = editor; - this.screenReaderDiv = document.createElement("div"); - this.screenReaderDiv.classList.add("ace_screenreader-only"); - this.editor.container.appendChild(this.screenReaderDiv); - } - AceInlineScreenReader.prototype.setScreenReaderContent = function (content) { - if (!this.popup && this.editor.completer && /**@type{import("../autocomplete").Autocomplete}*/ (this.editor.completer).popup) { - this.popup = /**@type{import("../autocomplete").Autocomplete}*/ (this.editor.completer).popup; - this.popup.renderer.on("afterRender", function () { - var row = this.popup.getRow(); - var t = this.popup.renderer.$textLayer; - var selected = t.element.childNodes[row - t.config.firstRow]; - if (selected) { - var idString = "doc-tooltip "; - for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) { - idString += "ace-inline-screenreader-line-".concat(lineIndex, " "); - } - selected.setAttribute("aria-describedby", idString); - } - }.bind(this)); - } - while (this.screenReaderDiv.firstChild) { - this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild); - } - this._lines = content.split(/\r\n|\r|\n/); - var codeElement = this.createCodeBlock(); - this.screenReaderDiv.appendChild(codeElement); - }; - AceInlineScreenReader.prototype.destroy = function () { - this.screenReaderDiv.remove(); - }; - AceInlineScreenReader.prototype.createCodeBlock = function () { - var container = document.createElement("pre"); - container.setAttribute("id", "ace-inline-screenreader"); - for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) { - var codeElement = document.createElement("code"); - codeElement.setAttribute("id", "ace-inline-screenreader-line-".concat(lineIndex)); - var line = document.createTextNode(this._lines[lineIndex]); - codeElement.appendChild(line); - container.appendChild(codeElement); - } - return container; - }; - return AceInlineScreenReader; -}()); -exports.AceInlineScreenReader = AceInlineScreenReader; - -}); - -ace.define("ace/autocomplete/inline",["require","exports","module","ace/snippets","ace/autocomplete/inline_screenreader"], function(require, exports, module){"use strict"; -var snippetManager = require("../snippets").snippetManager; -var AceInlineScreenReader = require("./inline_screenreader").AceInlineScreenReader; -var AceInline = /** @class */ (function () { - function AceInline() { - this.editor = null; - } - AceInline.prototype.show = function (editor, completion, prefix) { - prefix = prefix || ""; - if (editor && this.editor && this.editor !== editor) { - this.hide(); - this.editor = null; - this.inlineScreenReader = null; - } - if (!editor || !completion) { - return false; - } - if (!this.inlineScreenReader) { - this.inlineScreenReader = new AceInlineScreenReader(editor); - } - var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value; - if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) { - return false; - } - this.editor = editor; - this.inlineScreenReader.setScreenReaderContent(displayText); - displayText = displayText.slice(prefix.length); - if (displayText === "") { - editor.removeGhostText(); - } - else { - editor.setGhostText(displayText); - } - return true; - }; - AceInline.prototype.isOpen = function () { - if (!this.editor) { - return false; - } - return !!this.editor.renderer.$ghostText; - }; - AceInline.prototype.hide = function () { - if (!this.editor) { - return false; - } - this.editor.removeGhostText(); - return true; - }; - AceInline.prototype.destroy = function () { - this.hide(); - this.editor = null; - if (this.inlineScreenReader) { - this.inlineScreenReader.destroy(); - this.inlineScreenReader = null; - } - }; - return AceInline; -}()); -exports.AceInline = AceInline; - -}); - -ace.define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module){"use strict"; -exports.parForEach = function (array, fn, callback) { - var completed = 0; - var arLength = array.length; - if (arLength === 0) - callback(); - for (var i = 0; i < arLength; i++) { - fn(array[i], function (result, err) { - completed++; - if (completed === arLength) - callback(result, err); - }); - } -}; -var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\u2000\u2070-\uFFFF]/; -exports.retrievePrecedingIdentifier = function (text, pos, regex) { - regex = regex || ID_REGEX; - var buf = []; - for (var i = pos - 1; i >= 0; i--) { - if (regex.test(text[i])) - buf.push(text[i]); - else - break; - } - return buf.reverse().join(""); -}; -exports.retrieveFollowingIdentifier = function (text, pos, regex) { - regex = regex || ID_REGEX; - var buf = []; - for (var i = pos; i < text.length; i++) { - if (regex.test(text[i])) - buf.push(text[i]); - else - break; - } - return buf; -}; -exports.getCompletionPrefix = function (editor) { - var pos = editor.getCursorPosition(); - var line = editor.session.getLine(pos.row); - var prefix; - editor.completers.forEach(function (completer) { - if (completer.identifierRegexps) { - completer.identifierRegexps.forEach(function (identifierRegex) { - if (!prefix && identifierRegex) - prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex); - }.bind(this)); - } - }.bind(this)); - return prefix || this.retrievePrecedingIdentifier(line, pos.column); -}; -exports.triggerAutocomplete = function (editor, previousChar) { - var previousChar = previousChar == null - ? editor.session.getPrecedingCharacter() - : previousChar; - return editor.completers.some(function (completer) { - if (completer.triggerCharacters && Array.isArray(completer.triggerCharacters)) { - return completer.triggerCharacters.includes(previousChar); - } - }); -}; - -}); - -ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/inline","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/lang","ace/lib/dom","ace/snippets","ace/config","ace/lib/event","ace/lib/scroll"], function(require, exports, module){"use strict"; -var HashHandler = require("./keyboard/hash_handler").HashHandler; -var AcePopup = require("./autocomplete/popup").AcePopup; -var AceInline = require("./autocomplete/inline").AceInline; -var getAriaId = require("./autocomplete/popup").getAriaId; -var util = require("./autocomplete/util"); -var lang = require("./lib/lang"); -var dom = require("./lib/dom"); -var snippetManager = require("./snippets").snippetManager; -var config = require("./config"); -var event = require("./lib/event"); -var preventParentScroll = require("./lib/scroll").preventParentScroll; -var destroyCompleter = function (e, editor) { - editor.completer && editor.completer.destroy(); -}; -var Autocomplete = /** @class */ (function () { - function Autocomplete() { - this.autoInsert = false; - this.autoSelect = true; - this.autoShown = false; - this.exactMatch = false; - this.inlineEnabled = false; - this.keyboardHandler = new HashHandler(); - this.keyboardHandler.bindKeys(this.commands); - this.parentNode = null; - this.setSelectOnHover = false; - this.hasSeen = new Set(); - this.showLoadingState = false; - this.stickySelectionDelay = 500; - this.blurListener = this.blurListener.bind(this); - this.changeListener = this.changeListener.bind(this); - this.mousedownListener = this.mousedownListener.bind(this); - this.mousewheelListener = this.mousewheelListener.bind(this); - this.onLayoutChange = this.onLayoutChange.bind(this); - this.changeTimer = lang.delayedCall(function () { - this.updateCompletions(true); - }.bind(this)); - this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50); - this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50); - this.stickySelectionTimer = lang.delayedCall(function () { - this.stickySelection = true; - }.bind(this), this.stickySelectionDelay); - this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () { - var initialPosition = this.completionProvider && this.completionProvider.initialPosition; - if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0) - return; - this.completions = new FilteredList(Autocomplete.completionsForLoading); - this.openPopup(this.editor, initialPosition.prefix, false); - this.popup.renderer.setStyle("ace_loading", true); - }.bind(this), this.stickySelectionDelay); - } - Object.defineProperty(Autocomplete, "completionsForLoading", { - get: function () { - return [{ - caption: config.nls("autocomplete.loading", "Loading..."), - value: "" - }]; - }, - enumerable: false, - configurable: true - }); - Autocomplete.prototype.$init = function () { - this.popup = new AcePopup(this.parentNode || document.body || document.documentElement); - this.popup.on("click", function (e) { - this.insertMatch(); - e.stop(); - }.bind(this)); - this.popup.focus = this.editor.focus.bind(this.editor); - this.popup.on("show", this.$onPopupShow.bind(this)); - this.popup.on("hide", this.$onHidePopup.bind(this)); - this.popup.on("select", this.$onPopupChange.bind(this)); - event.addListener(this.popup.container, "mouseout", this.mouseOutListener.bind(this)); - this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null)); - this.popup.renderer.on("afterRender", this.$onPopupRender.bind(this)); - return this.popup; - }; - Autocomplete.prototype.$initInline = function () { - if (!this.inlineEnabled || this.inlineRenderer) - return; - this.inlineRenderer = new AceInline(); - return this.inlineRenderer; - }; - Autocomplete.prototype.getPopup = function () { - return this.popup || this.$init(); - }; - Autocomplete.prototype.$onHidePopup = function () { - if (this.inlineRenderer) { - this.inlineRenderer.hide(); - } - this.hideDocTooltip(); - this.stickySelectionTimer.cancel(); - this.popupTimer.cancel(); - this.stickySelection = false; - }; - Autocomplete.prototype.$seen = function (completion) { - if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === "function") { - completion.completer.onSeen(this.editor, completion); - this.hasSeen.add(completion); - } - }; - Autocomplete.prototype.$onPopupChange = function (hide) { - if (this.inlineRenderer && this.inlineEnabled) { - var completion = hide ? null : this.popup.getData(this.popup.getRow()); - this.$updateGhostText(completion); - if (this.popup.isMouseOver && this.setSelectOnHover) { - this.tooltipTimer.call(null, null); - return; - } - this.popupTimer.schedule(); - this.tooltipTimer.schedule(); - } - else { - this.popupTimer.call(null, null); - this.tooltipTimer.call(null, null); - } - }; - Autocomplete.prototype.$updateGhostText = function (completion) { - var row = this.base.row; - var column = this.base.column; - var cursorColumn = this.editor.getCursorPosition().column; - var prefix = this.editor.session.getLine(row).slice(column, cursorColumn); - if (!this.inlineRenderer.show(this.editor, completion, prefix)) { - this.inlineRenderer.hide(); - } - else { - this.$seen(completion); - } - }; - Autocomplete.prototype.$onPopupRender = function () { - var inlineEnabled = this.inlineRenderer && this.inlineEnabled; - if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) { - for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) { - var completion = this.popup.getData(i); - if (completion && (!inlineEnabled || completion.hideInlinePreview)) { - this.$seen(completion); - } - } - } - }; - Autocomplete.prototype.$onPopupShow = function (hide) { - this.$onPopupChange(hide); - this.stickySelection = false; - if (this.stickySelectionDelay >= 0) - this.stickySelectionTimer.schedule(this.stickySelectionDelay); - }; - Autocomplete.prototype.observeLayoutChanges = function () { - if (this.$elements || !this.editor) - return; - window.addEventListener("resize", this.onLayoutChange, { passive: true }); - window.addEventListener("wheel", this.mousewheelListener); - var el = this.editor.container.parentNode; - var elements = []; - while (el) { - elements.push(el); - el.addEventListener("scroll", this.onLayoutChange, { passive: true }); - el = el.parentNode; - } - this.$elements = elements; - }; - Autocomplete.prototype.unObserveLayoutChanges = function () { - var _this = this; - window.removeEventListener("resize", this.onLayoutChange, { passive: true }); - window.removeEventListener("wheel", this.mousewheelListener); - this.$elements && this.$elements.forEach(function (el) { - el.removeEventListener("scroll", _this.onLayoutChange, { passive: true }); - }); - this.$elements = null; - }; - Autocomplete.prototype.onLayoutChange = function () { - if (!this.popup.isOpen) - return this.unObserveLayoutChanges(); - this.$updatePopupPosition(); - this.updateDocTooltip(); - }; - Autocomplete.prototype.$updatePopupPosition = function () { - var editor = this.editor; - var renderer = editor.renderer; - var lineHeight = renderer.layerConfig.lineHeight; - var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); - pos.left -= this.popup.getTextLeftOffset(); - var rect = editor.container.getBoundingClientRect(); - pos.top += rect.top - renderer.layerConfig.offset; - pos.left += rect.left - editor.renderer.scrollLeft; - pos.left += renderer.gutterWidth; - var posGhostText = { - top: pos.top, - left: pos.left - }; - if (renderer.$ghostText && renderer.$ghostTextWidget) { - if (this.base.row === renderer.$ghostText.position.row) { - posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight; - } - } - var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight; - var lowestPosition = editorContainerBottom < posGhostText.top ? - { top: editorContainerBottom, left: posGhostText.left } : - posGhostText; - if (this.popup.tryShow(lowestPosition, lineHeight, "bottom")) { - return; - } - if (this.popup.tryShow(pos, lineHeight, "top")) { - return; - } - this.popup.show(pos, lineHeight); - }; - Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) { - this.$firstOpenTimer.cancel(); - if (!this.popup) - this.$init(); - if (this.inlineEnabled && !this.inlineRenderer) - this.$initInline(); - this.popup.autoSelect = this.autoSelect; - this.popup.setSelectOnHover(this.setSelectOnHover); - var oldRow = this.popup.getRow(); - var previousSelectedItem = this.popup.data[oldRow]; - this.popup.setData(this.completions.filtered, this.completions.filterText); - if (this.editor.textInput.setAriaOptions) { - this.editor.textInput.setAriaOptions({ - activeDescendant: getAriaId(this.popup.getRow()), - inline: this.inlineEnabled - }); - } - editor.keyBinding.addKeyboardHandler(this.keyboardHandler); - var newRow; - if (this.stickySelection) - newRow = this.popup.data.indexOf(previousSelectedItem); - if (!newRow || newRow === -1) - newRow = 0; - this.popup.setRow(this.autoSelect ? newRow : -1); - if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow]) - this.$onPopupChange(); - var inlineEnabled = this.inlineRenderer && this.inlineEnabled; - if (newRow === oldRow && inlineEnabled) { - var completion = this.popup.getData(this.popup.getRow()); - this.$updateGhostText(completion); - } - if (!keepPopupPosition) { - this.popup.setTheme(editor.getTheme()); - this.popup.setFontSize(editor.getFontSize()); - this.$updatePopupPosition(); - if (this.tooltipNode) { - this.updateDocTooltip(); - } - } - this.changeTimer.cancel(); - this.observeLayoutChanges(); - }; - Autocomplete.prototype.detach = function () { - if (this.editor) { - this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); - this.editor.off("changeSelection", this.changeListener); - this.editor.off("blur", this.blurListener); - this.editor.off("mousedown", this.mousedownListener); - this.editor.off("mousewheel", this.mousewheelListener); - } - this.$firstOpenTimer.cancel(); - this.changeTimer.cancel(); - this.hideDocTooltip(); - if (this.completionProvider) { - this.completionProvider.detach(); - } - if (this.popup && this.popup.isOpen) - this.popup.hide(); - if (this.popup && this.popup.renderer) { - this.popup.renderer.off("afterRender", this.$onPopupRender); - } - if (this.base) - this.base.detach(); - this.activated = false; - this.completionProvider = this.completions = this.base = null; - this.unObserveLayoutChanges(); - }; - Autocomplete.prototype.changeListener = function (e) { - var cursor = this.editor.selection.lead; - if (cursor.row != this.base.row || cursor.column < this.base.column) { - this.detach(); - } - if (this.activated) - this.changeTimer.schedule(); - else - this.detach(); - }; - Autocomplete.prototype.blurListener = function (e) { - var el = document.activeElement; - var text = this.editor.textInput.getElement(); - var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget); - var container = this.popup && this.popup.container; - if (el != text && el.parentNode != container && !fromTooltip - && el != this.tooltipNode && e.relatedTarget != text) { - this.detach(); - } - }; - Autocomplete.prototype.mousedownListener = function (e) { - this.detach(); - }; - Autocomplete.prototype.mousewheelListener = function (e) { - if (this.popup && !this.popup.isMouseOver) - this.detach(); - }; - Autocomplete.prototype.mouseOutListener = function (e) { - if (this.popup.isOpen) - this.$updatePopupPosition(); - }; - Autocomplete.prototype.goTo = function (where) { - this.popup.goTo(where); - }; - Autocomplete.prototype.insertMatch = function (data, options) { - if (!data) - data = this.popup.getData(this.popup.getRow()); - if (!data) - return false; - if (data.value === "") // Explicitly given nothing to insert, e.g. "No suggestion state" - return this.detach(); - var completions = this.completions; - var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options); - if (this.completions == completions) - this.detach(); - return result; - }; - Autocomplete.prototype.showPopup = function (editor, options) { - if (this.editor) - this.detach(); - this.activated = true; - this.editor = editor; - if (editor.completer != this) { - if (editor.completer) - editor.completer.detach(); - editor.completer = this; - } - editor.on("changeSelection", this.changeListener); - editor.on("blur", this.blurListener); - editor.on("mousedown", this.mousedownListener); - editor.on("mousewheel", this.mousewheelListener); - this.updateCompletions(false, options); - }; - Autocomplete.prototype.getCompletionProvider = function (initialPosition) { - if (!this.completionProvider) - this.completionProvider = new CompletionProvider(initialPosition); - return this.completionProvider; - }; - Autocomplete.prototype.gatherCompletions = function (editor, callback) { - return this.getCompletionProvider().gatherCompletions(editor, callback); - }; - Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) { - if (keepPopupPosition && this.base && this.completions) { - var pos = this.editor.getCursorPosition(); - var prefix = this.editor.session.getTextRange({ start: this.base, end: pos }); - if (prefix == this.completions.filterText) - return; - this.completions.setFilter(prefix); - if (!this.completions.filtered.length) - return this.detach(); - if (this.completions.filtered.length == 1 - && this.completions.filtered[0].value == prefix - && !this.completions.filtered[0].snippet) - return this.detach(); - this.openPopup(this.editor, prefix, keepPopupPosition); - return; - } - if (options && options.matches) { - var pos = this.editor.getSelectionRange().start; - this.base = this.editor.session.doc.createAnchor(pos.row, pos.column); - this.base.$insertRight = true; - this.completions = new FilteredList(options.matches); - this.getCompletionProvider().completions = this.completions; - return this.openPopup(this.editor, "", keepPopupPosition); - } - var session = this.editor.getSession(); - var pos = this.editor.getCursorPosition(); - var prefix = util.getCompletionPrefix(this.editor); - this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length); - this.base.$insertRight = true; - var completionOptions = { - exactMatch: this.exactMatch, - ignoreCaption: this.ignoreCaption - }; - this.getCompletionProvider({ - prefix: prefix, - pos: pos - }).provideCompletions(this.editor, completionOptions, - function (err, completions, finished) { - var filtered = completions.filtered; - var prefix = util.getCompletionPrefix(this.editor); - this.$firstOpenTimer.cancel(); - if (finished) { - if (!filtered.length) { - var emptyMessage = !this.autoShown && this.emptyMessage; - if (typeof emptyMessage == "function") - emptyMessage = this.emptyMessage(prefix); - if (emptyMessage) { - var completionsForEmpty = [{ - caption: emptyMessage, - value: "" - } - ]; - this.completions = new FilteredList(completionsForEmpty); - this.openPopup(this.editor, prefix, keepPopupPosition); - this.popup.renderer.setStyle("ace_loading", false); - this.popup.renderer.setStyle("ace_empty-message", true); - return; - } - return this.detach(); - } - if (filtered.length == 1 && filtered[0].value == prefix - && !filtered[0].snippet) - return this.detach(); - if (this.autoInsert && !this.autoShown && filtered.length == 1) - return this.insertMatch(filtered[0]); - } - this.completions = !finished && this.showLoadingState ? - new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) : - completions; - this.openPopup(this.editor, prefix, keepPopupPosition); - this.popup.renderer.setStyle("ace_empty-message", false); - this.popup.renderer.setStyle("ace_loading", !finished); - }.bind(this)); - if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) { - this.$firstOpenTimer.delay(this.stickySelectionDelay / 2); - } - }; - Autocomplete.prototype.cancelContextMenu = function () { - this.editor.$mouseHandler.cancelContextMenu(); - }; - Autocomplete.prototype.updateDocTooltip = function () { - var popup = this.popup; - var all = this.completions && this.completions.filtered; - var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]); - var doc = null; - if (!selected || !this.editor || !this.popup.isOpen) - return this.hideDocTooltip(); - var completersLength = this.editor.completers.length; - for (var i = 0; i < completersLength; i++) { - var completer = this.editor.completers[i]; - if (completer.getDocTooltip && selected.completerId === completer.id) { - doc = completer.getDocTooltip(selected); - break; - } - } - if (!doc && typeof selected != "string") - doc = selected; - if (typeof doc == "string") - doc = { docText: doc }; - if (!doc || !(doc.docHTML || doc.docText)) - return this.hideDocTooltip(); - this.showDocTooltip(doc); - }; - Autocomplete.prototype.showDocTooltip = function (item) { - if (!this.tooltipNode) { - this.tooltipNode = dom.createElement("div"); - this.tooltipNode.style.margin = "0"; - this.tooltipNode.style.pointerEvents = "auto"; - this.tooltipNode.style.overscrollBehavior = "contain"; - this.tooltipNode.tabIndex = -1; - this.tooltipNode.onblur = this.blurListener.bind(this); - this.tooltipNode.onclick = this.onTooltipClick.bind(this); - this.tooltipNode.id = "doc-tooltip"; - this.tooltipNode.setAttribute("role", "tooltip"); - this.tooltipNode.addEventListener("wheel", preventParentScroll); - } - var theme = this.editor.renderer.theme; - this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " + - (theme.isDark ? "ace_dark " : "") + (theme.cssClass || ""); - var tooltipNode = this.tooltipNode; - if (item.docHTML) { - tooltipNode.innerHTML = item.docHTML; - } - else if (item.docText) { - tooltipNode.textContent = item.docText; - } - if (!tooltipNode.parentNode) - this.popup.container.appendChild(this.tooltipNode); - var popup = this.popup; - var rect = popup.container.getBoundingClientRect(); - var targetWidth = 400; - var targetHeight = 300; - var scrollBarSize = popup.renderer.scrollBar.width || 10; - var leftSize = rect.left; - var rightSize = window.innerWidth - rect.right - scrollBarSize; - var topSize = popup.isTopdown ? rect.top : window.innerHeight - scrollBarSize - rect.bottom; - var scores = [ - Math.min(rightSize / targetWidth, 1), - Math.min(leftSize / targetWidth, 1), - Math.min(topSize / targetHeight * 0.9), - ]; - var max = Math.max.apply(Math, scores); - var tooltipStyle = tooltipNode.style; - tooltipStyle.display = "block"; - if (max == scores[0]) { - tooltipStyle.left = (rect.right + 1) + "px"; - tooltipStyle.right = ""; - tooltipStyle.maxWidth = targetWidth * max + "px"; - tooltipStyle.top = rect.top + "px"; - tooltipStyle.bottom = ""; - tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + "px"; - } - else if (max == scores[1]) { - tooltipStyle.right = window.innerWidth - rect.left + "px"; - tooltipStyle.left = ""; - tooltipStyle.maxWidth = targetWidth * max + "px"; - tooltipStyle.top = rect.top + "px"; - tooltipStyle.bottom = ""; - tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + "px"; - } - else if (max == scores[2]) { - tooltipStyle.left = window.innerWidth - rect.left + "px"; - tooltipStyle.maxWidth = Math.min(targetWidth, window.innerWidth) + "px"; - if (popup.isTopdown) { - tooltipStyle.top = rect.bottom + "px"; - tooltipStyle.left = rect.left + "px"; - tooltipStyle.right = ""; - tooltipStyle.bottom = ""; - tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.bottom, targetHeight) + "px"; - } - else { - tooltipStyle.top = popup.container.offsetTop - tooltipNode.offsetHeight + "px"; - tooltipStyle.left = rect.left + "px"; - tooltipStyle.right = ""; - tooltipStyle.bottom = ""; - tooltipStyle.maxHeight = Math.min(popup.container.offsetTop, targetHeight) + "px"; - } - } - }; - Autocomplete.prototype.hideDocTooltip = function () { - this.tooltipTimer.cancel(); - if (!this.tooltipNode) - return; - var el = this.tooltipNode; - if (!this.editor.isFocused() && document.activeElement == el) - this.editor.focus(); - this.tooltipNode = null; - if (el.parentNode) - el.parentNode.removeChild(el); - }; - Autocomplete.prototype.onTooltipClick = function (e) { - var a = e.target; - while (a && a != this.tooltipNode) { - if (a.nodeName == "A" && a.href) { - a.rel = "noreferrer"; - a.target = "_blank"; - break; - } - a = a.parentNode; - } - }; - Autocomplete.prototype.destroy = function () { - this.detach(); - if (this.popup) { - this.popup.destroy(); - var el = this.popup.container; - if (el && el.parentNode) - el.parentNode.removeChild(el); - } - if (this.editor && this.editor.completer == this) { - this.editor.off("destroy", destroyCompleter); - this.editor.completer = null; - } - this.inlineRenderer = this.popup = this.editor = null; - }; - Autocomplete.for = function (editor) { - if (editor.completer instanceof Autocomplete) { - return editor.completer; - } - if (editor.completer) { - editor.completer.destroy(); - editor.completer = null; - } - if (config.get("sharedPopups")) { - if (!Autocomplete["$sharedInstance"]) - Autocomplete["$sharedInstance"] = new Autocomplete(); - editor.completer = Autocomplete["$sharedInstance"]; - } - else { - editor.completer = new Autocomplete(); - editor.once("destroy", destroyCompleter); - } - return editor.completer; - }; - return Autocomplete; -}()); -Autocomplete.prototype.commands = { - "Up": function (editor) { editor.completer.goTo("up"); }, - "Down": function (editor) { editor.completer.goTo("down"); }, - "Ctrl-Up|Ctrl-Home": function (editor) { editor.completer.goTo("start"); }, - "Ctrl-Down|Ctrl-End": function (editor) { editor.completer.goTo("end"); }, - "Esc": function (editor) { editor.completer.detach(); }, - "Return": function (editor) { return editor.completer.insertMatch(); }, - "Shift-Return": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); }, - "Tab": function (editor) { - var result = editor.completer.insertMatch(); - if (!result && !editor.tabstopManager) - editor.completer.goTo("down"); - else - return result; - }, - "Backspace": function (editor) { - editor.execCommand("backspace"); - var prefix = util.getCompletionPrefix(editor); - if (!prefix && editor.completer) - editor.completer.detach(); - }, - "PageUp": function (editor) { editor.completer.popup.gotoPageUp(); }, - "PageDown": function (editor) { editor.completer.popup.gotoPageDown(); } -}; -Autocomplete.startCommand = { - name: "startAutocomplete", - exec: function (editor, options) { - var completer = Autocomplete.for(editor); - completer.autoInsert = false; - completer.autoSelect = true; - completer.autoShown = false; - completer.showPopup(editor, options); - completer.cancelContextMenu(); - }, - bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space" -}; -var CompletionProvider = /** @class */ (function () { - function CompletionProvider(initialPosition) { - this.initialPosition = initialPosition; - this.active = true; - } - CompletionProvider.prototype.insertByIndex = function (editor, index, options) { - if (!this.completions || !this.completions.filtered) { - return false; - } - return this.insertMatch(editor, this.completions.filtered[index], options); - }; - CompletionProvider.prototype.insertMatch = function (editor, data, options) { - if (!data) - return false; - editor.startOperation({ command: { name: "insertMatch" } }); - if (data.completer && data.completer.insertMatch) { - data.completer.insertMatch(editor, data); - } - else { - if (!this.completions) - return false; - var replaceBefore = this.completions.filterText.length; - var replaceAfter = 0; - if (data.range && data.range.start.row === data.range.end.row) { - replaceBefore -= this.initialPosition.prefix.length; - replaceBefore += this.initialPosition.pos.column - data.range.start.column; - replaceAfter += data.range.end.column - this.initialPosition.pos.column; - } - if (replaceBefore || replaceAfter) { - var ranges; - if (editor.selection.getAllRanges) { - ranges = editor.selection.getAllRanges(); - } - else { - ranges = [editor.getSelectionRange()]; - } - for (var i = 0, range; range = ranges[i]; i++) { - range.start.column -= replaceBefore; - range.end.column += replaceAfter; - editor.session.remove(range); - } - } - if (data.snippet) { - snippetManager.insertSnippet(editor, data.snippet); - } - else { - this.$insertString(editor, data); - } - if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == "function") { - data.completer.onInsert(editor, data); - } - if (data.command && data.command === "startAutocomplete") { - editor.execCommand(data.command); - } - } - editor.endOperation(); - return true; - }; - CompletionProvider.prototype.$insertString = function (editor, data) { - var text = data.value || data; - editor.execCommand("insertstring", text); - }; - CompletionProvider.prototype.gatherCompletions = function (editor, callback) { - var session = editor.getSession(); - var pos = editor.getCursorPosition(); - var prefix = util.getCompletionPrefix(editor); - var matches = []; - this.completers = editor.completers; - var total = editor.completers.length; - editor.completers.forEach(function (completer, i) { - completer.getCompletions(editor, session, pos, prefix, function (err, results) { - if (completer.hideInlinePreview) - results = results.map(function (result) { - return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview }); - }); - if (!err && results) - matches = matches.concat(results); - callback(null, { - prefix: util.getCompletionPrefix(editor), - matches: matches, - finished: (--total === 0) - }); - }); - }); - return true; - }; - CompletionProvider.prototype.provideCompletions = function (editor, options, callback) { - var processResults = function (results) { - var prefix = results.prefix; - var matches = results.matches; - this.completions = new FilteredList(matches); - if (options.exactMatch) - this.completions.exactMatch = true; - if (options.ignoreCaption) - this.completions.ignoreCaption = true; - this.completions.setFilter(prefix); - if (results.finished || this.completions.filtered.length) - callback(null, this.completions, results.finished); - }.bind(this); - var isImmediate = true; - var immediateResults = null; - this.gatherCompletions(editor, function (err, results) { - if (!this.active) { - return; - } - if (err) { - callback(err, [], true); - this.detach(); - } - var prefix = results.prefix; - if (prefix.indexOf(results.prefix) !== 0) - return; - if (isImmediate) { - immediateResults = results; - return; - } - processResults(results); - }.bind(this)); - isImmediate = false; - if (immediateResults) { - var results = immediateResults; - immediateResults = null; - processResults(results); - } - }; - CompletionProvider.prototype.detach = function () { - this.active = false; - this.completers && this.completers.forEach(function (completer) { - if (typeof completer.cancel === "function") { - completer.cancel(); - } - }); - }; - return CompletionProvider; -}()); -var FilteredList = /** @class */ (function () { - function FilteredList(array, filterText) { - this.all = array; - this.filtered = array; - this.filterText = filterText || ""; - this.exactMatch = false; - this.ignoreCaption = false; - } - FilteredList.prototype.setFilter = function (str) { - if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) - var matches = this.filtered; - else - var matches = this.all; - this.filterText = str; - matches = this.filterCompletions(matches, this.filterText); - matches = matches.sort(function (a, b) { - return b.exactMatch - a.exactMatch || b.$score - a.$score - || (a.caption || a.value).localeCompare(b.caption || b.value); - }); - var prev = null; - matches = matches.filter(function (item) { - var caption = item.snippet || item.caption || item.value; - if (caption === prev) - return false; - prev = caption; - return true; - }); - this.filtered = matches; - }; - FilteredList.prototype.filterCompletions = function (items, needle) { - var results = []; - var upper = needle.toUpperCase(); - var lower = needle.toLowerCase(); - loop: for (var i = 0, item; item = items[i]; i++) { - if (item.skipFilter) { - item.$score = item.score; - results.push(item); - continue; - } - var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet; - if (!caption) - continue; - var lastIndex = -1; - var matchMask = 0; - var penalty = 0; - var index, distance; - if (this.exactMatch) { - if (needle !== caption.substr(0, needle.length)) - continue loop; - } - else { - var fullMatchIndex = caption.toLowerCase().indexOf(lower); - if (fullMatchIndex > -1) { - penalty = fullMatchIndex; - } - else { - for (var j = 0; j < needle.length; j++) { - var i1 = caption.indexOf(lower[j], lastIndex + 1); - var i2 = caption.indexOf(upper[j], lastIndex + 1); - index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2; - if (index < 0) - continue loop; - distance = index - lastIndex - 1; - if (distance > 0) { - if (lastIndex === -1) - penalty += 10; - penalty += distance; - matchMask = matchMask | (1 << j); - } - lastIndex = index; - } - } - } - item.matchMask = matchMask; - item.exactMatch = penalty ? 0 : 1; - item.$score = (item.score || 0) - penalty; - results.push(item); - } - return results; - }; - return FilteredList; -}()); -exports.Autocomplete = Autocomplete; -exports.CompletionProvider = CompletionProvider; -exports.FilteredList = FilteredList; - -}); - -ace.define("ace/marker_group",["require","exports","module"], function(require, exports, module){"use strict"; -var MarkerGroup = /** @class */ (function () { - function MarkerGroup(session, options) { - if (options) - this.markerType = options.markerType; - this.markers = []; - this.session = session; - session.addDynamicMarker(this); - } - MarkerGroup.prototype.getMarkerAtPosition = function (pos) { - return this.markers.find(function (marker) { - return marker.range.contains(pos.row, pos.column); - }); - }; - MarkerGroup.prototype.markersComparator = function (a, b) { - return a.range.start.row - b.range.start.row; - }; - MarkerGroup.prototype.setMarkers = function (markers) { - this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS); - this.session._signal("changeBackMarker"); - }; - MarkerGroup.prototype.update = function (html, markerLayer, session, config) { - if (!this.markers || !this.markers.length) - return; - var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow; - var foldLine; - var markersOnOneLine = 0; - var lastRow = 0; - for (var i = 0; i < this.markers.length; i++) { - var marker = this.markers[i]; - if (marker.range.end.row < visibleRangeStartRow) - continue; - if (marker.range.start.row > visibleRangeEndRow) - continue; - if (marker.range.start.row === lastRow) { - markersOnOneLine++; - } - else { - lastRow = marker.range.start.row; - markersOnOneLine = 0; - } - if (markersOnOneLine > 200) { - continue; - } - var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow); - if (markerVisibleRange.start.row === markerVisibleRange.end.row - && markerVisibleRange.start.column === markerVisibleRange.end.column) { - continue; // visible range is empty - } - var screenRange = markerVisibleRange.toScreenRange(session); - if (screenRange.isEmpty()) { - foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine); - if (foldLine && foldLine.end.row > markerVisibleRange.end.row) { - visibleRangeStartRow = foldLine.end.row; - } - continue; - } - if (this.markerType === "fullLine") { - markerLayer.drawFullLineMarker(html, screenRange, marker.className, config); - } - else if (screenRange.isMultiLine()) { - if (this.markerType === "line") - markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config); - else - markerLayer.drawTextMarker(html, screenRange, marker.className, config); - } - else { - markerLayer.drawSingleLineMarker(html, screenRange, marker.className + " ace_br15", config); - } - } - }; - return MarkerGroup; -}()); -MarkerGroup.prototype.MAX_MARKERS = 10000; -exports.MarkerGroup = MarkerGroup; - -}); - -ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(require, exports, module){var Range = require("../range").Range; -var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/; -function getWordIndex(doc, pos) { - var textBefore = doc.getTextRange(Range.fromPoints({ - row: 0, - column: 0 - }, pos)); - return textBefore.split(splitRegex).length - 1; -} -function wordDistance(doc, pos) { - var prefixPos = getWordIndex(doc, pos); - var words = doc.getValue().split(splitRegex); - var wordScores = Object.create(null); - var currentWord = words[prefixPos]; - words.forEach(function (word, idx) { - if (!word || word === currentWord) - return; - var distance = Math.abs(prefixPos - idx); - var score = words.length - distance; - if (wordScores[word]) { - wordScores[word] = Math.max(score, wordScores[word]); - } - else { - wordScores[word] = score; - } - }); - return wordScores; -} -exports.getCompletions = function (editor, session, pos, prefix, callback) { - var wordScore = wordDistance(session, pos); - var wordList = Object.keys(wordScore); - callback(null, wordList.map(function (word) { - return { - caption: word, - value: word, - score: wordScore[word], - meta: "local" - }; - })); -}; - -}); - -ace.define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/lib/lang","ace/autocomplete/util","ace/marker_group","ace/autocomplete/text_completer","ace/editor","ace/config"], function(require, exports, module){/** - * ## Language Tools extension for Ace Editor - * - * Provides autocompletion, snippets, and language intelligence features for the Ace code editor. - * This extension integrates multiple completion providers including keyword completion, snippet expansion, - * and text-based completion to enhance the coding experience with contextual suggestions and automated code generation. - * - * **Configuration Options:** - * - `enableBasicAutocompletion`: Enable/disable basic completion functionality - * - `enableLiveAutocompletion`: Enable/disable real-time completion suggestions - * - `enableSnippets`: Enable/disable snippet expansion with Tab key - * - `liveAutocompletionDelay`: Delay before showing live completion popup - * - `liveAutocompletionThreshold`: Minimum prefix length to trigger completion - * - * **Usage:** - * ```javascript - * editor.setOptions({ - * enableBasicAutocompletion: true, - * enableLiveAutocompletion: true, - * enableSnippets: true - * }); - * ``` - * - * @module - */ -"use strict"; -var snippetManager = require("../snippets").snippetManager; -var Autocomplete = require("../autocomplete").Autocomplete; -var config = require("../config"); -var lang = require("../lib/lang"); -var util = require("../autocomplete/util"); -var MarkerGroup = require("../marker_group").MarkerGroup; -var textCompleter = require("../autocomplete/text_completer"); -var keyWordCompleter = { - getCompletions: function (editor, session, pos, prefix, callback) { - if (session.$mode.completer) { - return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback); - } - var state = editor.session.getState(pos.row); - var completions = session.$mode.getCompletions(state, session, pos, prefix); - completions = completions.map(function (el) { - el.completerId = keyWordCompleter.id; - return el; - }); - callback(null, completions); - }, - id: "keywordCompleter" -}; -var transformSnippetTooltip = function (str) { - var record = {}; - return str.replace(/\${(\d+)(:(.*?))?}/g, function (_, p1, p2, p3) { - return (record[p1] = p3 || ''); - }).replace(/\$(\d+?)/g, function (_, p1) { - return record[p1]; - }); -}; -var snippetCompleter = { - getCompletions: function (editor, session, pos, prefix, callback) { - var scopes = []; - var token = session.getTokenAt(pos.row, pos.column); - if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\.xml$/)) - scopes.push('html-tag'); - else - scopes = snippetManager.getActiveScopes(editor); - var snippetMap = snippetManager.snippetMap; - var completions = []; - scopes.forEach(function (scope) { - var snippets = snippetMap[scope] || []; - for (var i = snippets.length; i--;) { - var s = snippets[i]; - var caption = s.name || s.tabTrigger; - if (!caption) - continue; - completions.push({ - caption: caption, - snippet: s.content, - meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet", - completerId: snippetCompleter.id - }); - } - }, this); - callback(null, completions); - }, - getDocTooltip: function (item) { - if (item.snippet && !item.docHTML) { - item.docHTML = [ - "", lang.escapeHTML(item.caption), "", "
          ", - lang.escapeHTML(transformSnippetTooltip(item.snippet)) - ].join(""); - } - }, - id: "snippetCompleter" -}; -var completers = [snippetCompleter, textCompleter, keyWordCompleter]; -exports.setCompleters = function (val) { - completers.length = 0; - if (val) - completers.push.apply(completers, val); -}; -exports.addCompleter = function (completer) { - completers.push(completer); -}; -exports.textCompleter = textCompleter; -exports.keyWordCompleter = keyWordCompleter; -exports.snippetCompleter = snippetCompleter; -var expandSnippet = { - name: "expandSnippet", - exec: function (editor) { - return snippetManager.expandWithTab(editor); - }, - bindKey: "Tab" -}; -var onChangeMode = function (e, editor) { - loadSnippetsForMode(editor.session.$mode); -}; -var loadSnippetsForMode = function (mode) { - if (typeof mode == "string") - mode = config.$modes[mode]; - if (!mode) - return; - if (!snippetManager.files) - snippetManager.files = {}; - loadSnippetFile(mode.$id, mode.snippetFileId); - if (mode.modes) - mode.modes.forEach(loadSnippetsForMode); -}; -var loadSnippetFile = function (id, snippetFilePath) { - if (!snippetFilePath || !id || snippetManager.files[id]) - return; - snippetManager.files[id] = {}; - config.loadModule(snippetFilePath, function (m) { - if (!m) - return; - snippetManager.files[id] = m; - if (!m.snippets && m.snippetText) - m.snippets = snippetManager.parseSnippetFile(m.snippetText); - snippetManager.register(m.snippets || [], m.scope); - if (m.includeScopes) { - snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes; - m.includeScopes.forEach(function (x) { - loadSnippetsForMode("ace/mode/" + x); - }); - } - }); -}; -var doLiveAutocomplete = function (e) { - var editor = e.editor; - var hasCompleter = editor.completer && editor.completer.activated; - if (e.command.name === "backspace") { - if (hasCompleter && !util.getCompletionPrefix(editor)) - editor.completer.detach(); - } - else if (e.command.name === "insertstring" && !hasCompleter) { - lastExecEvent = e; - var delay = e.editor.$liveAutocompletionDelay; - if (delay) { - liveAutocompleteTimer.delay(delay); - } - else { - showLiveAutocomplete(e); - } - } -}; -var lastExecEvent; -var liveAutocompleteTimer = lang.delayedCall(function () { - showLiveAutocomplete(lastExecEvent); -}, 0); -var showLiveAutocomplete = function (e) { - var editor = e.editor; - var prefix = util.getCompletionPrefix(editor); - var previousChar = e.args; - var triggerAutocomplete = util.triggerAutocomplete(editor, previousChar); - if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) { - var completer = Autocomplete.for(editor); - completer.autoShown = true; - completer.showPopup(editor); - } -}; -var Editor = require("../editor").Editor; -require("../config").defineOptions(Editor.prototype, "editor", { - enableBasicAutocompletion: { - set: function (val) { - if (val) { - Autocomplete.for(this); - if (!this.completers) - this.completers = Array.isArray(val) ? val : completers; - this.commands.addCommand(Autocomplete.startCommand); - } - else { - this.commands.removeCommand(Autocomplete.startCommand); - } - }, - value: false - }, - enableLiveAutocompletion: { - set: function (val) { - if (val) { - if (!this.completers) - this.completers = Array.isArray(val) ? val : completers; - this.commands.on('afterExec', doLiveAutocomplete); - } - else { - this.commands.off('afterExec', doLiveAutocomplete); - } - }, - value: false - }, - liveAutocompletionDelay: { - initialValue: 0 - }, - liveAutocompletionThreshold: { - initialValue: 0 - }, - enableSnippets: { - set: function (val) { - if (val) { - this.commands.addCommand(expandSnippet); - this.on("changeMode", onChangeMode); - onChangeMode(null, this); - } - else { - this.commands.removeCommand(expandSnippet); - this.off("changeMode", onChangeMode); - } - }, - value: false - } -}); -exports.MarkerGroup = MarkerGroup; - -}); (function() { - ace.require(["ace/ext/language_tools"], function(m) { - if ( true && module) { - module.exports = m; - } - }); - })(); - - -/***/ }), - -/***/ "../../node_modules/ace-builds/src-noconflict/mode-sql.js": -/*!****************************************************************!*\ - !*** ../../node_modules/ace-builds/src-noconflict/mode-sql.js ***! - \****************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -/* module decorator */ module = __webpack_require__.nmd(module); -ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict"; -var oop = require("../lib/oop"); -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; -var SqlHighlightRules = function () { - var keywords = ("select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|" + - "when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|" + - "foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct|is|in|" + - "all|alter|any|array|at|authorization|between|both|cast|check|collate|column|commit|constraint|" + - "cube|current|current_date|current_time|current_timestamp|current_user|describe|escape|except|" + - "exists|external|extract|fetch|filter|for|full|function|global|grouping|intersect|interval|" + - "into|leading|like|local|no|of|only|out|overlaps|partition|position|range|revoke|rollback|rollup|" + - "row|rows|session_user|set|some|start|tablesample|time|to|trailing|truncate|unique|unknown|" + - "user|using|values|window|with"); - var builtinConstants = ("true|false"); - var builtinFunctions = ("avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|" + - "coalesce|ifnull|isnull|nvl"); - var dataTypes = ("int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|" + - "money|real|number|integer|string"); - var keywordMapper = this.createKeywordMapper({ - "support.function": builtinFunctions, - "keyword": keywords, - "constant.language": builtinConstants, - "storage.type": dataTypes - }, "identifier", true); - this.$rules = { - "start": [{ - token: "comment", - regex: "--.*$" - }, { - token: "comment", - start: "/\\*", - end: "\\*/" - }, { - token: "string", // " string - regex: '".*?"' - }, { - token: "string", // ' string - regex: "'.*?'" - }, { - token: "string", // ` string (apache drill) - regex: "`.*?`" - }, { - token: "constant.numeric", // float - regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" - }, { - token: keywordMapper, - regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" - }, { - token: "keyword.operator", - regex: "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" - }, { - token: "paren.lparen", - regex: "[\\(]" - }, { - token: "paren.rparen", - regex: "[\\)]" - }, { - token: "text", - regex: "\\s+" - }] - }; - this.normalizeRules(); -}; -oop.inherits(SqlHighlightRules, TextHighlightRules); -exports.SqlHighlightRules = SqlHighlightRules; - -}); - -ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict"; -var oop = require("../../lib/oop"); -var Range = require("../../range").Range; -var BaseFoldMode = require("./fold_mode").FoldMode; -var FoldMode = exports.FoldMode = function (commentRegex) { - if (commentRegex) { - this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)); - this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)); - } -}; -oop.inherits(FoldMode, BaseFoldMode); -(function () { - this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/; - this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/; - this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/; - this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; - this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; - this._getFoldWidgetBase = this.getFoldWidget; - this.getFoldWidget = function (session, foldStyle, row) { - var line = session.getLine(row); - if (this.singleLineBlockCommentRe.test(line)) { - if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) - return ""; - } - var fw = this._getFoldWidgetBase(session, foldStyle, row); - if (!fw && this.startRegionRe.test(line)) - return "start"; // lineCommentRegionStart - return fw; - }; - this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) { - var line = session.getLine(row); - if (this.startRegionRe.test(line)) - return this.getCommentRegionBlock(session, line, row); - var match = line.match(this.foldingStartMarker); - if (match) { - var i = match.index; - if (match[1]) - return this.openingBracketBlock(session, match[1], row, i); - var range = session.getCommentFoldRange(row, i + match[0].length, 1); - if (range && !range.isMultiLine()) { - if (forceMultiline) { - range = this.getSectionRange(session, row); - } - else if (foldStyle != "all") - range = null; - } - return range; - } - if (foldStyle === "markbegin") - return; - var match = line.match(this.foldingStopMarker); - if (match) { - var i = match.index + match[0].length; - if (match[1]) - return this.closingBracketBlock(session, match[1], row, i); - return session.getCommentFoldRange(row, i, -1); - } - }; - this.getSectionRange = function (session, row) { - var line = session.getLine(row); - var startIndent = line.search(/\S/); - var startRow = row; - var startColumn = line.length; - row = row + 1; - var endRow = row; - var maxRow = session.getLength(); - while (++row < maxRow) { - line = session.getLine(row); - var indent = line.search(/\S/); - if (indent === -1) - continue; - if (startIndent > indent) - break; - var subRange = this.getFoldWidgetRange(session, "all", row); - if (subRange) { - if (subRange.start.row <= startRow) { - break; - } - else if (subRange.isMultiLine()) { - row = subRange.end.row; - } - else if (startIndent == indent) { - break; - } - } - endRow = row; - } - return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); - }; - this.getCommentRegionBlock = function (session, line, row) { - var startColumn = line.search(/\s*$/); - var maxRow = session.getLength(); - var startRow = row; - var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; - var depth = 1; - while (++row < maxRow) { - line = session.getLine(row); - var m = re.exec(line); - if (!m) - continue; - if (m[1]) - depth--; - else - depth++; - if (!depth) - break; - } - var endRow = row; - if (endRow > startRow) { - return new Range(startRow, startColumn, endRow, line.length); - } - }; -}).call(FoldMode.prototype); - -}); - -ace.define("ace/mode/folding/sql",["require","exports","module","ace/lib/oop","ace/mode/folding/cstyle"], function(require, exports, module){"use strict"; -var oop = require("../../lib/oop"); -var BaseFoldMode = require("./cstyle").FoldMode; -var FoldMode = exports.FoldMode = function () { }; -oop.inherits(FoldMode, BaseFoldMode); -(function () { -}).call(FoldMode.prototype); - -}); - -ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules","ace/mode/folding/sql"], function(require, exports, module){"use strict"; -var oop = require("../lib/oop"); -var TextMode = require("./text").Mode; -var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules; -var SqlFoldMode = require("./folding/sql").FoldMode; -var Mode = function () { - this.HighlightRules = SqlHighlightRules; - this.foldingRules = new SqlFoldMode(); - this.$behaviour = this.$defaultBehaviour; -}; -oop.inherits(Mode, TextMode); -(function () { - this.lineCommentStart = "--"; - this.blockComment = { start: "/*", end: "*/" }; - this.$id = "ace/mode/sql"; - this.snippetFileId = "ace/snippets/sql"; -}).call(Mode.prototype); -exports.Mode = Mode; - -}); (function() { - ace.require(["ace/mode/sql"], function(m) { - if ( true && module) { - module.exports = m; - } - }); - })(); - - -/***/ }), - -/***/ "../../node_modules/ace-builds/src-noconflict/theme-textmate.js": -/*!**********************************************************************!*\ - !*** ../../node_modules/ace-builds/src-noconflict/theme-textmate.js ***! - \**********************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -/* module decorator */ module = __webpack_require__.nmd(module); -ace.define("ace/theme/textmate",["require","exports","module","ace/theme/textmate-css","ace/lib/dom"], function(require, exports, module){"use strict"; -exports.isDark = false; -exports.cssClass = "ace-tm"; -exports.cssText = require("./textmate-css"); -exports.$id = "ace/theme/textmate"; -var dom = require("../lib/dom"); -dom.importCssString(exports.cssText, exports.cssClass, false); - -}); (function() { - ace.require(["ace/theme/textmate"], function(m) { - if ( true && module) { - module.exports = m; - } - }); - })(); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1.js": -/*!**********************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1.js ***! - \**********************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var asn1 = exports; - -asn1.bignum = __webpack_require__(/*! bn.js */ "../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js"); - -asn1.define = (__webpack_require__(/*! ./asn1/api */ "../../node_modules/asn1.js/lib/asn1/api.js").define); -asn1.base = __webpack_require__(/*! ./asn1/base */ "../../node_modules/asn1.js/lib/asn1/base/index.js"); -asn1.constants = __webpack_require__(/*! ./asn1/constants */ "../../node_modules/asn1.js/lib/asn1/constants/index.js"); -asn1.decoders = __webpack_require__(/*! ./asn1/decoders */ "../../node_modules/asn1.js/lib/asn1/decoders/index.js"); -asn1.encoders = __webpack_require__(/*! ./asn1/encoders */ "../../node_modules/asn1.js/lib/asn1/encoders/index.js"); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/api.js": -/*!**************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/api.js ***! - \**************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var asn1 = __webpack_require__(/*! ../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -var api = exports; - -api.define = function define(name, body) { - return new Entity(name, body); -}; - -function Entity(name, body) { - this.name = name; - this.body = body; - - this.decoders = {}; - this.encoders = {}; -}; - -Entity.prototype._createNamed = function createNamed(base) { - var named; - try { - named = (__webpack_require__(/*! vm */ "../../node_modules/vm-browserify/index.js").runInThisContext)( - '(function ' + this.name + '(entity) {\n' + - ' this._initNamed(entity);\n' + - '})' - ); - } catch (e) { - named = function (entity) { - this._initNamed(entity); - }; - } - inherits(named, base); - named.prototype._initNamed = function initnamed(entity) { - base.call(this, entity); - }; - - return new named(this); -}; - -Entity.prototype._getDecoder = function _getDecoder(enc) { - enc = enc || 'der'; - // Lazily create decoder - if (!this.decoders.hasOwnProperty(enc)) - this.decoders[enc] = this._createNamed(asn1.decoders[enc]); - return this.decoders[enc]; -}; - -Entity.prototype.decode = function decode(data, enc, options) { - return this._getDecoder(enc).decode(data, options); -}; - -Entity.prototype._getEncoder = function _getEncoder(enc) { - enc = enc || 'der'; - // Lazily create encoder - if (!this.encoders.hasOwnProperty(enc)) - this.encoders[enc] = this._createNamed(asn1.encoders[enc]); - return this.encoders[enc]; -}; - -Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { - return this._getEncoder(enc).encode(data, reporter); -}; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/base/buffer.js": -/*!**********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/base/buffer.js ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var Reporter = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").Reporter); -var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); - -function DecoderBuffer(base, options) { - Reporter.call(this, options); - if (!Buffer.isBuffer(base)) { - this.error('Input not Buffer'); - return; - } - - this.base = base; - this.offset = 0; - this.length = base.length; -} -inherits(DecoderBuffer, Reporter); -exports.DecoderBuffer = DecoderBuffer; - -DecoderBuffer.prototype.save = function save() { - return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; -}; - -DecoderBuffer.prototype.restore = function restore(save) { - // Return skipped data - var res = new DecoderBuffer(this.base); - res.offset = save.offset; - res.length = this.offset; - - this.offset = save.offset; - Reporter.prototype.restore.call(this, save.reporter); - - return res; -}; - -DecoderBuffer.prototype.isEmpty = function isEmpty() { - return this.offset === this.length; -}; - -DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { - if (this.offset + 1 <= this.length) - return this.base.readUInt8(this.offset++, true); - else - return this.error(fail || 'DecoderBuffer overrun'); -} - -DecoderBuffer.prototype.skip = function skip(bytes, fail) { - if (!(this.offset + bytes <= this.length)) - return this.error(fail || 'DecoderBuffer overrun'); - - var res = new DecoderBuffer(this.base); - - // Share reporter state - res._reporterState = this._reporterState; - - res.offset = this.offset; - res.length = this.offset + bytes; - this.offset += bytes; - return res; -} - -DecoderBuffer.prototype.raw = function raw(save) { - return this.base.slice(save ? save.offset : this.offset, this.length); -} - -function EncoderBuffer(value, reporter) { - if (Array.isArray(value)) { - this.length = 0; - this.value = value.map(function(item) { - if (!(item instanceof EncoderBuffer)) - item = new EncoderBuffer(item, reporter); - this.length += item.length; - return item; - }, this); - } else if (typeof value === 'number') { - if (!(0 <= value && value <= 0xff)) - return reporter.error('non-byte EncoderBuffer value'); - this.value = value; - this.length = 1; - } else if (typeof value === 'string') { - this.value = value; - this.length = Buffer.byteLength(value); - } else if (Buffer.isBuffer(value)) { - this.value = value; - this.length = value.length; - } else { - return reporter.error('Unsupported type: ' + typeof value); - } -} -exports.EncoderBuffer = EncoderBuffer; - -EncoderBuffer.prototype.join = function join(out, offset) { - if (!out) - out = new Buffer(this.length); - if (!offset) - offset = 0; - - if (this.length === 0) - return out; - - if (Array.isArray(this.value)) { - this.value.forEach(function(item) { - item.join(out, offset); - offset += item.length; - }); - } else { - if (typeof this.value === 'number') - out[offset] = this.value; - else if (typeof this.value === 'string') - out.write(this.value, offset); - else if (Buffer.isBuffer(this.value)) - this.value.copy(out, offset); - offset += this.length; - } - - return out; -}; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/base/index.js": -/*!*********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/base/index.js ***! - \*********************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var base = exports; - -base.Reporter = (__webpack_require__(/*! ./reporter */ "../../node_modules/asn1.js/lib/asn1/base/reporter.js").Reporter); -base.DecoderBuffer = (__webpack_require__(/*! ./buffer */ "../../node_modules/asn1.js/lib/asn1/base/buffer.js").DecoderBuffer); -base.EncoderBuffer = (__webpack_require__(/*! ./buffer */ "../../node_modules/asn1.js/lib/asn1/base/buffer.js").EncoderBuffer); -base.Node = __webpack_require__(/*! ./node */ "../../node_modules/asn1.js/lib/asn1/base/node.js"); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/base/node.js": -/*!********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/base/node.js ***! - \********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var Reporter = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").Reporter); -var EncoderBuffer = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").EncoderBuffer); -var DecoderBuffer = (__webpack_require__(/*! ../base */ "../../node_modules/asn1.js/lib/asn1/base/index.js").DecoderBuffer); -var assert = __webpack_require__(/*! minimalistic-assert */ "../../node_modules/minimalistic-assert/index.js"); - -// Supported tags -var tags = [ - 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', - 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', - 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', - 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' -]; - -// Public methods list -var methods = [ - 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', - 'any', 'contains' -].concat(tags); - -// Overrided methods list -var overrided = [ - '_peekTag', '_decodeTag', '_use', - '_decodeStr', '_decodeObjid', '_decodeTime', - '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', - - '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', - '_encodeNull', '_encodeInt', '_encodeBool' -]; - -function Node(enc, parent) { - var state = {}; - this._baseState = state; - - state.enc = enc; - - state.parent = parent || null; - state.children = null; - - // State - state.tag = null; - state.args = null; - state.reverseArgs = null; - state.choice = null; - state.optional = false; - state.any = false; - state.obj = false; - state.use = null; - state.useDecoder = null; - state.key = null; - state['default'] = null; - state.explicit = null; - state.implicit = null; - state.contains = null; - - // Should create new instance on each method - if (!state.parent) { - state.children = []; - this._wrap(); - } -} -module.exports = Node; - -var stateProps = [ - 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', - 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', - 'implicit', 'contains' -]; - -Node.prototype.clone = function clone() { - var state = this._baseState; - var cstate = {}; - stateProps.forEach(function(prop) { - cstate[prop] = state[prop]; - }); - var res = new this.constructor(cstate.parent); - res._baseState = cstate; - return res; -}; - -Node.prototype._wrap = function wrap() { - var state = this._baseState; - methods.forEach(function(method) { - this[method] = function _wrappedMethod() { - var clone = new this.constructor(this); - state.children.push(clone); - return clone[method].apply(clone, arguments); - }; - }, this); -}; - -Node.prototype._init = function init(body) { - var state = this._baseState; - - assert(state.parent === null); - body.call(this); - - // Filter children - state.children = state.children.filter(function(child) { - return child._baseState.parent === this; - }, this); - assert.equal(state.children.length, 1, 'Root node can have only one child'); -}; - -Node.prototype._useArgs = function useArgs(args) { - var state = this._baseState; - - // Filter children and args - var children = args.filter(function(arg) { - return arg instanceof this.constructor; - }, this); - args = args.filter(function(arg) { - return !(arg instanceof this.constructor); - }, this); - - if (children.length !== 0) { - assert(state.children === null); - state.children = children; - - // Replace parent to maintain backward link - children.forEach(function(child) { - child._baseState.parent = this; - }, this); - } - if (args.length !== 0) { - assert(state.args === null); - state.args = args; - state.reverseArgs = args.map(function(arg) { - if (typeof arg !== 'object' || arg.constructor !== Object) - return arg; - - var res = {}; - Object.keys(arg).forEach(function(key) { - if (key == (key | 0)) - key |= 0; - var value = arg[key]; - res[value] = key; - }); - return res; - }); - } -}; - -// -// Overrided methods -// - -overrided.forEach(function(method) { - Node.prototype[method] = function _overrided() { - var state = this._baseState; - throw new Error(method + ' not implemented for encoding: ' + state.enc); - }; -}); - -// -// Public methods -// - -tags.forEach(function(tag) { - Node.prototype[tag] = function _tagMethod() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); - - assert(state.tag === null); - state.tag = tag; - - this._useArgs(args); - - return this; - }; -}); - -Node.prototype.use = function use(item) { - assert(item); - var state = this._baseState; - - assert(state.use === null); - state.use = item; - - return this; -}; - -Node.prototype.optional = function optional() { - var state = this._baseState; - - state.optional = true; - - return this; -}; - -Node.prototype.def = function def(val) { - var state = this._baseState; - - assert(state['default'] === null); - state['default'] = val; - state.optional = true; - - return this; -}; - -Node.prototype.explicit = function explicit(num) { - var state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.explicit = num; - - return this; -}; - -Node.prototype.implicit = function implicit(num) { - var state = this._baseState; - - assert(state.explicit === null && state.implicit === null); - state.implicit = num; - - return this; -}; - -Node.prototype.obj = function obj() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); - - state.obj = true; - - if (args.length !== 0) - this._useArgs(args); - - return this; -}; - -Node.prototype.key = function key(newKey) { - var state = this._baseState; - - assert(state.key === null); - state.key = newKey; - - return this; -}; - -Node.prototype.any = function any() { - var state = this._baseState; - - state.any = true; - - return this; -}; - -Node.prototype.choice = function choice(obj) { - var state = this._baseState; - - assert(state.choice === null); - state.choice = obj; - this._useArgs(Object.keys(obj).map(function(key) { - return obj[key]; - })); - - return this; -}; - -Node.prototype.contains = function contains(item) { - var state = this._baseState; - - assert(state.use === null); - state.contains = item; - - return this; -}; - -// -// Decoding -// - -Node.prototype._decode = function decode(input, options) { - var state = this._baseState; - - // Decode root node - if (state.parent === null) - return input.wrapResult(state.children[0]._decode(input, options)); - - var result = state['default']; - var present = true; - - var prevKey = null; - if (state.key !== null) - prevKey = input.enterKey(state.key); - - // Check if tag is there - if (state.optional) { - var tag = null; - if (state.explicit !== null) - tag = state.explicit; - else if (state.implicit !== null) - tag = state.implicit; - else if (state.tag !== null) - tag = state.tag; - - if (tag === null && !state.any) { - // Trial and Error - var save = input.save(); - try { - if (state.choice === null) - this._decodeGeneric(state.tag, input, options); - else - this._decodeChoice(input, options); - present = true; - } catch (e) { - present = false; - } - input.restore(save); - } else { - present = this._peekTag(input, tag, state.any); - - if (input.isError(present)) - return present; - } - } - - // Push object on stack - var prevObj; - if (state.obj && present) - prevObj = input.enterObject(); - - if (present) { - // Unwrap explicit values - if (state.explicit !== null) { - var explicit = this._decodeTag(input, state.explicit); - if (input.isError(explicit)) - return explicit; - input = explicit; - } - - var start = input.offset; - - // Unwrap implicit and normal values - if (state.use === null && state.choice === null) { - if (state.any) - var save = input.save(); - var body = this._decodeTag( - input, - state.implicit !== null ? state.implicit : state.tag, - state.any - ); - if (input.isError(body)) - return body; - - if (state.any) - result = input.raw(save); - else - input = body; - } - - if (options && options.track && state.tag !== null) - options.track(input.path(), start, input.length, 'tagged'); - - if (options && options.track && state.tag !== null) - options.track(input.path(), input.offset, input.length, 'content'); - - // Select proper method for tag - if (state.any) - result = result; - else if (state.choice === null) - result = this._decodeGeneric(state.tag, input, options); - else - result = this._decodeChoice(input, options); - - if (input.isError(result)) - return result; - - // Decode children - if (!state.any && state.choice === null && state.children !== null) { - state.children.forEach(function decodeChildren(child) { - // NOTE: We are ignoring errors here, to let parser continue with other - // parts of encoded data - child._decode(input, options); - }); - } - - // Decode contained/encoded by schema, only in bit or octet strings - if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { - var data = new DecoderBuffer(result); - result = this._getUse(state.contains, input._reporterState.obj) - ._decode(data, options); - } - } - - // Pop object - if (state.obj && present) - result = input.leaveObject(prevObj); - - // Set key - if (state.key !== null && (result !== null || present === true)) - input.leaveKey(prevKey, state.key, result); - else if (prevKey !== null) - input.exitKey(prevKey); - - return result; -}; - -Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { - var state = this._baseState; - - if (tag === 'seq' || tag === 'set') - return null; - if (tag === 'seqof' || tag === 'setof') - return this._decodeList(input, tag, state.args[0], options); - else if (/str$/.test(tag)) - return this._decodeStr(input, tag, options); - else if (tag === 'objid' && state.args) - return this._decodeObjid(input, state.args[0], state.args[1], options); - else if (tag === 'objid') - return this._decodeObjid(input, null, null, options); - else if (tag === 'gentime' || tag === 'utctime') - return this._decodeTime(input, tag, options); - else if (tag === 'null_') - return this._decodeNull(input, options); - else if (tag === 'bool') - return this._decodeBool(input, options); - else if (tag === 'objDesc') - return this._decodeStr(input, tag, options); - else if (tag === 'int' || tag === 'enum') - return this._decodeInt(input, state.args && state.args[0], options); - - if (state.use !== null) { - return this._getUse(state.use, input._reporterState.obj) - ._decode(input, options); - } else { - return input.error('unknown tag: ' + tag); - } -}; - -Node.prototype._getUse = function _getUse(entity, obj) { - - var state = this._baseState; - // Create altered use decoder if implicit is set - state.useDecoder = this._use(entity, obj); - assert(state.useDecoder._baseState.parent === null); - state.useDecoder = state.useDecoder._baseState.children[0]; - if (state.implicit !== state.useDecoder._baseState.implicit) { - state.useDecoder = state.useDecoder.clone(); - state.useDecoder._baseState.implicit = state.implicit; - } - return state.useDecoder; -}; - -Node.prototype._decodeChoice = function decodeChoice(input, options) { - var state = this._baseState; - var result = null; - var match = false; - - Object.keys(state.choice).some(function(key) { - var save = input.save(); - var node = state.choice[key]; - try { - var value = node._decode(input, options); - if (input.isError(value)) - return false; - - result = { type: key, value: value }; - match = true; - } catch (e) { - input.restore(save); - return false; - } - return true; - }, this); - - if (!match) - return input.error('Choice not matched'); - - return result; -}; - -// -// Encoding -// - -Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { - return new EncoderBuffer(data, this.reporter); -}; - -Node.prototype._encode = function encode(data, reporter, parent) { - var state = this._baseState; - if (state['default'] !== null && state['default'] === data) - return; - - var result = this._encodeValue(data, reporter, parent); - if (result === undefined) - return; - - if (this._skipDefault(result, reporter, parent)) - return; - - return result; -}; - -Node.prototype._encodeValue = function encode(data, reporter, parent) { - var state = this._baseState; - - // Decode root node - if (state.parent === null) - return state.children[0]._encode(data, reporter || new Reporter()); - - var result = null; - - // Set reporter to share it with a child class - this.reporter = reporter; - - // Check if data is there - if (state.optional && data === undefined) { - if (state['default'] !== null) - data = state['default'] - else - return; - } - - // Encode children first - var content = null; - var primitive = false; - if (state.any) { - // Anything that was given is translated to buffer - result = this._createEncoderBuffer(data); - } else if (state.choice) { - result = this._encodeChoice(data, reporter); - } else if (state.contains) { - content = this._getUse(state.contains, parent)._encode(data, reporter); - primitive = true; - } else if (state.children) { - content = state.children.map(function(child) { - if (child._baseState.tag === 'null_') - return child._encode(null, reporter, data); - - if (child._baseState.key === null) - return reporter.error('Child should have a key'); - var prevKey = reporter.enterKey(child._baseState.key); - - if (typeof data !== 'object') - return reporter.error('Child expected, but input is not object'); - - var res = child._encode(data[child._baseState.key], reporter, data); - reporter.leaveKey(prevKey); - - return res; - }, this).filter(function(child) { - return child; - }); - content = this._createEncoderBuffer(content); - } else { - if (state.tag === 'seqof' || state.tag === 'setof') { - // TODO(indutny): this should be thrown on DSL level - if (!(state.args && state.args.length === 1)) - return reporter.error('Too many args for : ' + state.tag); - - if (!Array.isArray(data)) - return reporter.error('seqof/setof, but data is not Array'); - - var child = this.clone(); - child._baseState.implicit = null; - content = this._createEncoderBuffer(data.map(function(item) { - var state = this._baseState; - - return this._getUse(state.args[0], data)._encode(item, reporter); - }, child)); - } else if (state.use !== null) { - result = this._getUse(state.use, parent)._encode(data, reporter); - } else { - content = this._encodePrimitive(state.tag, data); - primitive = true; - } - } - - // Encode data itself - var result; - if (!state.any && state.choice === null) { - var tag = state.implicit !== null ? state.implicit : state.tag; - var cls = state.implicit === null ? 'universal' : 'context'; - - if (tag === null) { - if (state.use === null) - reporter.error('Tag could be omitted only for .use()'); - } else { - if (state.use === null) - result = this._encodeComposite(tag, primitive, cls, content); - } - } - - // Wrap in explicit - if (state.explicit !== null) - result = this._encodeComposite(state.explicit, false, 'context', result); - - return result; -}; - -Node.prototype._encodeChoice = function encodeChoice(data, reporter) { - var state = this._baseState; - - var node = state.choice[data.type]; - if (!node) { - assert( - false, - data.type + ' not found in ' + - JSON.stringify(Object.keys(state.choice))); - } - return node._encode(data.value, reporter); -}; - -Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { - var state = this._baseState; - - if (/str$/.test(tag)) - return this._encodeStr(data, tag); - else if (tag === 'objid' && state.args) - return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); - else if (tag === 'objid') - return this._encodeObjid(data, null, null); - else if (tag === 'gentime' || tag === 'utctime') - return this._encodeTime(data, tag); - else if (tag === 'null_') - return this._encodeNull(); - else if (tag === 'int' || tag === 'enum') - return this._encodeInt(data, state.args && state.reverseArgs[0]); - else if (tag === 'bool') - return this._encodeBool(data); - else if (tag === 'objDesc') - return this._encodeStr(data, tag); - else - throw new Error('Unsupported tag: ' + tag); -}; - -Node.prototype._isNumstr = function isNumstr(str) { - return /^[0-9 ]*$/.test(str); -}; - -Node.prototype._isPrintstr = function isPrintstr(str) { - return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); -}; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/base/reporter.js": -/*!************************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/base/reporter.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -function Reporter(options) { - this._reporterState = { - obj: null, - path: [], - options: options || {}, - errors: [] - }; -} -exports.Reporter = Reporter; - -Reporter.prototype.isError = function isError(obj) { - return obj instanceof ReporterError; -}; - -Reporter.prototype.save = function save() { - var state = this._reporterState; - - return { obj: state.obj, pathLen: state.path.length }; -}; - -Reporter.prototype.restore = function restore(data) { - var state = this._reporterState; - - state.obj = data.obj; - state.path = state.path.slice(0, data.pathLen); -}; - -Reporter.prototype.enterKey = function enterKey(key) { - return this._reporterState.path.push(key); -}; - -Reporter.prototype.exitKey = function exitKey(index) { - var state = this._reporterState; - - state.path = state.path.slice(0, index - 1); -}; - -Reporter.prototype.leaveKey = function leaveKey(index, key, value) { - var state = this._reporterState; - - this.exitKey(index); - if (state.obj !== null) - state.obj[key] = value; -}; - -Reporter.prototype.path = function path() { - return this._reporterState.path.join('/'); -}; - -Reporter.prototype.enterObject = function enterObject() { - var state = this._reporterState; - - var prev = state.obj; - state.obj = {}; - return prev; -}; - -Reporter.prototype.leaveObject = function leaveObject(prev) { - var state = this._reporterState; - - var now = state.obj; - state.obj = prev; - return now; -}; - -Reporter.prototype.error = function error(msg) { - var err; - var state = this._reporterState; - - var inherited = msg instanceof ReporterError; - if (inherited) { - err = msg; - } else { - err = new ReporterError(state.path.map(function(elem) { - return '[' + JSON.stringify(elem) + ']'; - }).join(''), msg.message || msg, msg.stack); - } - - if (!state.options.partial) - throw err; - - if (!inherited) - state.errors.push(err); - - return err; -}; - -Reporter.prototype.wrapResult = function wrapResult(result) { - var state = this._reporterState; - if (!state.options.partial) - return result; - - return { - result: this.isError(result) ? null : result, - errors: state.errors - }; -}; - -function ReporterError(path, msg) { - this.path = path; - this.rethrow(msg); -}; -inherits(ReporterError, Error); - -ReporterError.prototype.rethrow = function rethrow(msg) { - this.message = msg + ' at: ' + (this.path || '(shallow)'); - if (Error.captureStackTrace) - Error.captureStackTrace(this, ReporterError); - - if (!this.stack) { - try { - // IE only adds stack when thrown - throw new Error(this.message); - } catch (e) { - this.stack = e.stack; - } - } - return this; -}; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/constants/der.js": -/*!************************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/constants/der.js ***! - \************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var constants = __webpack_require__(/*! ../constants */ "../../node_modules/asn1.js/lib/asn1/constants/index.js"); - -exports.tagClass = { - 0: 'universal', - 1: 'application', - 2: 'context', - 3: 'private' -}; -exports.tagClassByName = constants._reverse(exports.tagClass); - -exports.tag = { - 0x00: 'end', - 0x01: 'bool', - 0x02: 'int', - 0x03: 'bitstr', - 0x04: 'octstr', - 0x05: 'null_', - 0x06: 'objid', - 0x07: 'objDesc', - 0x08: 'external', - 0x09: 'real', - 0x0a: 'enum', - 0x0b: 'embed', - 0x0c: 'utf8str', - 0x0d: 'relativeOid', - 0x10: 'seq', - 0x11: 'set', - 0x12: 'numstr', - 0x13: 'printstr', - 0x14: 't61str', - 0x15: 'videostr', - 0x16: 'ia5str', - 0x17: 'utctime', - 0x18: 'gentime', - 0x19: 'graphstr', - 0x1a: 'iso646str', - 0x1b: 'genstr', - 0x1c: 'unistr', - 0x1d: 'charstr', - 0x1e: 'bmpstr' -}; -exports.tagByName = constants._reverse(exports.tag); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/constants/index.js": -/*!**************************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/constants/index.js ***! - \**************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var constants = exports; - -// Helper -constants._reverse = function reverse(map) { - var res = {}; - - Object.keys(map).forEach(function(key) { - // Convert key to integer if it is stringified - if ((key | 0) == key) - key = key | 0; - - var value = map[key]; - res[value] = key; - }); - - return res; -}; - -constants.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/constants/der.js"); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/decoders/der.js": -/*!***********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/decoders/der.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -var asn1 = __webpack_require__(/*! ../../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); -var base = asn1.base; -var bignum = asn1.bignum; - -// Import DER constants -var der = asn1.constants.der; - -function DERDecoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); -}; -module.exports = DERDecoder; - -DERDecoder.prototype.decode = function decode(data, options) { - if (!(data instanceof base.DecoderBuffer)) - data = new base.DecoderBuffer(data, options); - - return this.tree._decode(data, options); -}; - -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); -} -inherits(DERNode, base.Node); - -DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { - if (buffer.isEmpty()) - return false; - - var state = buffer.save(); - var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - - buffer.restore(state); - - return decodedTag.tag === tag || decodedTag.tagStr === tag || - (decodedTag.tagStr + 'of') === tag || any; -}; - -DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { - var decodedTag = derDecodeTag(buffer, - 'Failed to decode tag of "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; - - var len = derDecodeLen(buffer, - decodedTag.primitive, - 'Failed to get length of "' + tag + '"'); - - // Failure - if (buffer.isError(len)) - return len; - - if (!any && - decodedTag.tag !== tag && - decodedTag.tagStr !== tag && - decodedTag.tagStr + 'of' !== tag) { - return buffer.error('Failed to match tag: "' + tag + '"'); - } - - if (decodedTag.primitive || len !== null) - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); - - // Indefinite length... find END tag - var state = buffer.save(); - var res = this._skipUntilEnd( - buffer, - 'Failed to skip indefinite length body: "' + this.tag + '"'); - if (buffer.isError(res)) - return res; - - len = buffer.offset - state.offset; - buffer.restore(state); - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); -}; - -DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { - while (true) { - var tag = derDecodeTag(buffer, fail); - if (buffer.isError(tag)) - return tag; - var len = derDecodeLen(buffer, tag.primitive, fail); - if (buffer.isError(len)) - return len; - - var res; - if (tag.primitive || len !== null) - res = buffer.skip(len) - else - res = this._skipUntilEnd(buffer, fail); - - // Failure - if (buffer.isError(res)) - return res; - - if (tag.tagStr === 'end') - break; - } -}; - -DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, - options) { - var result = []; - while (!buffer.isEmpty()) { - var possibleEnd = this._peekTag(buffer, 'end'); - if (buffer.isError(possibleEnd)) - return possibleEnd; - - var res = decoder.decode(buffer, 'der', options); - if (buffer.isError(res) && possibleEnd) - break; - result.push(res); - } - return result; -}; - -DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { - if (tag === 'bitstr') { - var unused = buffer.readUInt8(); - if (buffer.isError(unused)) - return unused; - return { unused: unused, data: buffer.raw() }; - } else if (tag === 'bmpstr') { - var raw = buffer.raw(); - if (raw.length % 2 === 1) - return buffer.error('Decoding of string type: bmpstr length mismatch'); - - var str = ''; - for (var i = 0; i < raw.length / 2; i++) { - str += String.fromCharCode(raw.readUInt16BE(i * 2)); - } - return str; - } else if (tag === 'numstr') { - var numstr = buffer.raw().toString('ascii'); - if (!this._isNumstr(numstr)) { - return buffer.error('Decoding of string type: ' + - 'numstr unsupported characters'); - } - return numstr; - } else if (tag === 'octstr') { - return buffer.raw(); - } else if (tag === 'objDesc') { - return buffer.raw(); - } else if (tag === 'printstr') { - var printstr = buffer.raw().toString('ascii'); - if (!this._isPrintstr(printstr)) { - return buffer.error('Decoding of string type: ' + - 'printstr unsupported characters'); - } - return printstr; - } else if (/str$/.test(tag)) { - return buffer.raw().toString(); - } else { - return buffer.error('Decoding of string type: ' + tag + ' unsupported'); - } -}; - -DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { - var result; - var identifiers = []; - var ident = 0; - while (!buffer.isEmpty()) { - var subident = buffer.readUInt8(); - ident <<= 7; - ident |= subident & 0x7f; - if ((subident & 0x80) === 0) { - identifiers.push(ident); - ident = 0; - } - } - if (subident & 0x80) - identifiers.push(ident); - - var first = (identifiers[0] / 40) | 0; - var second = identifiers[0] % 40; - - if (relative) - result = identifiers; - else - result = [first, second].concat(identifiers.slice(1)); - - if (values) { - var tmp = values[result.join(' ')]; - if (tmp === undefined) - tmp = values[result.join('.')]; - if (tmp !== undefined) - result = tmp; - } - - return result; -}; - -DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { - var str = buffer.raw().toString(); - if (tag === 'gentime') { - var year = str.slice(0, 4) | 0; - var mon = str.slice(4, 6) | 0; - var day = str.slice(6, 8) | 0; - var hour = str.slice(8, 10) | 0; - var min = str.slice(10, 12) | 0; - var sec = str.slice(12, 14) | 0; - } else if (tag === 'utctime') { - var year = str.slice(0, 2) | 0; - var mon = str.slice(2, 4) | 0; - var day = str.slice(4, 6) | 0; - var hour = str.slice(6, 8) | 0; - var min = str.slice(8, 10) | 0; - var sec = str.slice(10, 12) | 0; - if (year < 70) - year = 2000 + year; - else - year = 1900 + year; - } else { - return buffer.error('Decoding ' + tag + ' time is not supported yet'); - } - - return Date.UTC(year, mon - 1, day, hour, min, sec, 0); -}; - -DERNode.prototype._decodeNull = function decodeNull(buffer) { - return null; -}; - -DERNode.prototype._decodeBool = function decodeBool(buffer) { - var res = buffer.readUInt8(); - if (buffer.isError(res)) - return res; - else - return res !== 0; -}; - -DERNode.prototype._decodeInt = function decodeInt(buffer, values) { - // Bigint, return as it is (assume big endian) - var raw = buffer.raw(); - var res = new bignum(raw); - - if (values) - res = values[res.toString(10)] || res; - - return res; -}; - -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getDecoder('der').tree; -}; - -// Utility methods - -function derDecodeTag(buf, fail) { - var tag = buf.readUInt8(fail); - if (buf.isError(tag)) - return tag; - - var cls = der.tagClass[tag >> 6]; - var primitive = (tag & 0x20) === 0; - - // Multi-octet tag - load - if ((tag & 0x1f) === 0x1f) { - var oct = tag; - tag = 0; - while ((oct & 0x80) === 0x80) { - oct = buf.readUInt8(fail); - if (buf.isError(oct)) - return oct; - - tag <<= 7; - tag |= oct & 0x7f; - } - } else { - tag &= 0x1f; - } - var tagStr = der.tag[tag]; - - return { - cls: cls, - primitive: primitive, - tag: tag, - tagStr: tagStr - }; -} - -function derDecodeLen(buf, primitive, fail) { - var len = buf.readUInt8(fail); - if (buf.isError(len)) - return len; - - // Indefinite form - if (!primitive && len === 0x80) - return null; - - // Definite form - if ((len & 0x80) === 0) { - // Short form - return len; - } - - // Long form - var num = len & 0x7f; - if (num > 4) - return buf.error('length octect is too long'); - - len = 0; - for (var i = 0; i < num; i++) { - len <<= 8; - var j = buf.readUInt8(fail); - if (buf.isError(j)) - return j; - len |= j; - } - - return len; -} - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/decoders/index.js": -/*!*************************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/decoders/index.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var decoders = exports; - -decoders.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/decoders/der.js"); -decoders.pem = __webpack_require__(/*! ./pem */ "../../node_modules/asn1.js/lib/asn1/decoders/pem.js"); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/decoders/pem.js": -/*!***********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/decoders/pem.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); - -var DERDecoder = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/decoders/der.js"); - -function PEMDecoder(entity) { - DERDecoder.call(this, entity); - this.enc = 'pem'; -}; -inherits(PEMDecoder, DERDecoder); -module.exports = PEMDecoder; - -PEMDecoder.prototype.decode = function decode(data, options) { - var lines = data.toString().split(/[\r\n]+/g); - - var label = options.label.toUpperCase(); - - var re = /^-----(BEGIN|END) ([^-]+)-----$/; - var start = -1; - var end = -1; - for (var i = 0; i < lines.length; i++) { - var match = lines[i].match(re); - if (match === null) - continue; - - if (match[2] !== label) - continue; - - if (start === -1) { - if (match[1] !== 'BEGIN') - break; - start = i; - } else { - if (match[1] !== 'END') - break; - end = i; - break; - } - } - if (start === -1 || end === -1) - throw new Error('PEM section not found for: ' + label); - - var base64 = lines.slice(start + 1, end).join(''); - // Remove excessive symbols - base64.replace(/[^a-z0-9\+\/=]+/gi, ''); - - var input = new Buffer(base64, 'base64'); - return DERDecoder.prototype.decode.call(this, input, options); -}; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/encoders/der.js": -/*!***********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/encoders/der.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); -var Buffer = (__webpack_require__(/*! buffer */ "../../node_modules/buffer/index.js").Buffer); - -var asn1 = __webpack_require__(/*! ../../asn1 */ "../../node_modules/asn1.js/lib/asn1.js"); -var base = asn1.base; - -// Import DER constants -var der = asn1.constants.der; - -function DEREncoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); -}; -module.exports = DEREncoder; - -DEREncoder.prototype.encode = function encode(data, reporter) { - return this.tree._encode(data, reporter).join(); -}; - -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); -} -inherits(DERNode, base.Node); - -DERNode.prototype._encodeComposite = function encodeComposite(tag, - primitive, - cls, - content) { - var encodedTag = encodeTag(tag, primitive, cls, this.reporter); - - // Short form - if (content.length < 0x80) { - var header = new Buffer(2); - header[0] = encodedTag; - header[1] = content.length; - return this._createEncoderBuffer([ header, content ]); - } - - // Long form - // Count octets required to store length - var lenOctets = 1; - for (var i = content.length; i >= 0x100; i >>= 8) - lenOctets++; - - var header = new Buffer(1 + 1 + lenOctets); - header[0] = encodedTag; - header[1] = 0x80 | lenOctets; - - for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) - header[i] = j & 0xff; - - return this._createEncoderBuffer([ header, content ]); -}; - -DERNode.prototype._encodeStr = function encodeStr(str, tag) { - if (tag === 'bitstr') { - return this._createEncoderBuffer([ str.unused | 0, str.data ]); - } else if (tag === 'bmpstr') { - var buf = new Buffer(str.length * 2); - for (var i = 0; i < str.length; i++) { - buf.writeUInt16BE(str.charCodeAt(i), i * 2); - } - return this._createEncoderBuffer(buf); - } else if (tag === 'numstr') { - if (!this._isNumstr(str)) { - return this.reporter.error('Encoding of string type: numstr supports ' + - 'only digits and space'); - } - return this._createEncoderBuffer(str); - } else if (tag === 'printstr') { - if (!this._isPrintstr(str)) { - return this.reporter.error('Encoding of string type: printstr supports ' + - 'only latin upper and lower case letters, ' + - 'digits, space, apostrophe, left and rigth ' + - 'parenthesis, plus sign, comma, hyphen, ' + - 'dot, slash, colon, equal sign, ' + - 'question mark'); - } - return this._createEncoderBuffer(str); - } else if (/str$/.test(tag)) { - return this._createEncoderBuffer(str); - } else if (tag === 'objDesc') { - return this._createEncoderBuffer(str); - } else { - return this.reporter.error('Encoding of string type: ' + tag + - ' unsupported'); - } -}; - -DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { - if (typeof id === 'string') { - if (!values) - return this.reporter.error('string objid given, but no values map found'); - if (!values.hasOwnProperty(id)) - return this.reporter.error('objid not found in values map'); - id = values[id].split(/[\s\.]+/g); - for (var i = 0; i < id.length; i++) - id[i] |= 0; - } else if (Array.isArray(id)) { - id = id.slice(); - for (var i = 0; i < id.length; i++) - id[i] |= 0; - } - - if (!Array.isArray(id)) { - return this.reporter.error('objid() should be either array or string, ' + - 'got: ' + JSON.stringify(id)); - } - - if (!relative) { - if (id[1] >= 40) - return this.reporter.error('Second objid identifier OOB'); - id.splice(0, 2, id[0] * 40 + id[1]); - } - - // Count number of octets - var size = 0; - for (var i = 0; i < id.length; i++) { - var ident = id[i]; - for (size++; ident >= 0x80; ident >>= 7) - size++; - } - - var objid = new Buffer(size); - var offset = objid.length - 1; - for (var i = id.length - 1; i >= 0; i--) { - var ident = id[i]; - objid[offset--] = ident & 0x7f; - while ((ident >>= 7) > 0) - objid[offset--] = 0x80 | (ident & 0x7f); - } - - return this._createEncoderBuffer(objid); -}; - -function two(num) { - if (num < 10) - return '0' + num; - else - return num; -} - -DERNode.prototype._encodeTime = function encodeTime(time, tag) { - var str; - var date = new Date(time); - - if (tag === 'gentime') { - str = [ - two(date.getFullYear()), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else if (tag === 'utctime') { - str = [ - two(date.getFullYear() % 100), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else { - this.reporter.error('Encoding ' + tag + ' time is not supported yet'); - } - - return this._encodeStr(str, 'octstr'); -}; - -DERNode.prototype._encodeNull = function encodeNull() { - return this._createEncoderBuffer(''); -}; - -DERNode.prototype._encodeInt = function encodeInt(num, values) { - if (typeof num === 'string') { - if (!values) - return this.reporter.error('String int or enum given, but no values map'); - if (!values.hasOwnProperty(num)) { - return this.reporter.error('Values map doesn\'t contain: ' + - JSON.stringify(num)); - } - num = values[num]; - } - - // Bignum, assume big endian - if (typeof num !== 'number' && !Buffer.isBuffer(num)) { - var numArray = num.toArray(); - if (!num.sign && numArray[0] & 0x80) { - numArray.unshift(0); - } - num = new Buffer(numArray); - } - - if (Buffer.isBuffer(num)) { - var size = num.length; - if (num.length === 0) - size++; - - var out = new Buffer(size); - num.copy(out); - if (num.length === 0) - out[0] = 0 - return this._createEncoderBuffer(out); - } - - if (num < 0x80) - return this._createEncoderBuffer(num); - - if (num < 0x100) - return this._createEncoderBuffer([0, num]); - - var size = 1; - for (var i = num; i >= 0x100; i >>= 8) - size++; - - var out = new Array(size); - for (var i = out.length - 1; i >= 0; i--) { - out[i] = num & 0xff; - num >>= 8; - } - if(out[0] & 0x80) { - out.unshift(0); - } - - return this._createEncoderBuffer(new Buffer(out)); -}; - -DERNode.prototype._encodeBool = function encodeBool(value) { - return this._createEncoderBuffer(value ? 0xff : 0); -}; - -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getEncoder('der').tree; -}; - -DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { - var state = this._baseState; - var i; - if (state['default'] === null) - return false; - - var data = dataBuffer.join(); - if (state.defaultBuffer === undefined) - state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); - - if (data.length !== state.defaultBuffer.length) - return false; - - for (i=0; i < data.length; i++) - if (data[i] !== state.defaultBuffer[i]) - return false; - - return true; -}; - -// Utility methods - -function encodeTag(tag, primitive, cls, reporter) { - var res; - - if (tag === 'seqof') - tag = 'seq'; - else if (tag === 'setof') - tag = 'set'; - - if (der.tagByName.hasOwnProperty(tag)) - res = der.tagByName[tag]; - else if (typeof tag === 'number' && (tag | 0) === tag) - res = tag; - else - return reporter.error('Unknown tag: ' + tag); - - if (res >= 0x1f) - return reporter.error('Multi-octet tag encoding unsupported'); - - if (!primitive) - res |= 0x20; - - res |= (der.tagClassByName[cls || 'universal'] << 6); - - return res; -} - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/encoders/index.js": -/*!*************************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/encoders/index.js ***! - \*************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -var encoders = exports; - -encoders.der = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/encoders/der.js"); -encoders.pem = __webpack_require__(/*! ./pem */ "../../node_modules/asn1.js/lib/asn1/encoders/pem.js"); - - -/***/ }), - -/***/ "../../node_modules/asn1.js/lib/asn1/encoders/pem.js": -/*!***********************************************************!*\ - !*** ../../node_modules/asn1.js/lib/asn1/encoders/pem.js ***! - \***********************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -var inherits = __webpack_require__(/*! inherits */ "../../node_modules/inherits/inherits_browser.js"); - -var DEREncoder = __webpack_require__(/*! ./der */ "../../node_modules/asn1.js/lib/asn1/encoders/der.js"); - -function PEMEncoder(entity) { - DEREncoder.call(this, entity); - this.enc = 'pem'; -}; -inherits(PEMEncoder, DEREncoder); -module.exports = PEMEncoder; - -PEMEncoder.prototype.encode = function encode(data, options) { - var buf = DEREncoder.prototype.encode.call(this, data); - - var p = buf.toString('base64'); - var out = [ '-----BEGIN ' + options.label + '-----' ]; - for (var i = 0; i < p.length; i += 64) - out.push(p.slice(i, i + 64)); - out.push('-----END ' + options.label + '-----'); - return out.join('\n'); -}; - - -/***/ }), - -/***/ "../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js": -/*!***************************************************************!*\ - !*** ../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js ***! - \***************************************************************/ -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* module decorator */ module = __webpack_require__.nmd(module); -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { - Buffer = window.Buffer; - } else { - Buffer = (__webpack_require__(/*! buffer */ "?98fd").Buffer); - } - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - this.negative = 1; - } - - if (start < number.length) { - if (base === 16) { - this._parseHex(number, start, endian); - } else { - this._parseBase(number, base, start); - if (endian === 'le') { - this._initArray(this.toArray(), base, endian); - } - } - } - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex4Bits (string, index) { - var c = string.charCodeAt(index); - // 'A' - 'F' - if (c >= 65 && c <= 70) { - return c - 55; - // 'a' - 'f' - } else if (c >= 97 && c <= 102) { - return c - 87; - // '0' - '9' - } else { - return (c - 48) & 0xf; - } - } - - function parseHexByte (string, lowerBound, index) { - var r = parseHex4Bits(string, index); - if (index - 1 >= lowerBound) { - r |= parseHex4Bits(string, index - 1) << 4; - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start, endian) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - // 24-bits chunks - var off = 0; - var j = 0; - - var w; - if (endian === 'be') { - for (i = number.length - 1; i >= start; i -= 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } else { - var parseLength = number.length - start; - for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } - - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - this.strip(); - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; out.negative = self.negative ^ num.negative; out.length = 19; @@ -60300,13 +35325,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @lumino/widgets */ "../../node_modules/@lumino/widgets/dist/index.es6.js"); /* harmony import */ var d3_selection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/select.js"); /* harmony import */ var _database_widget__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./database_widget */ "./src/database_widget.ts"); -/* harmony import */ var ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ace-builds/src-noconflict/ace */ "../../node_modules/ace-builds/src-noconflict/ace.js"); +/* harmony import */ var ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ace-builds/src-noconflict/ace */ "../../../../../../../../node_modules/ace-builds/src-noconflict/ace.js"); /* harmony import */ var ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_ace__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ace-builds/src-noconflict/theme-textmate */ "../../node_modules/ace-builds/src-noconflict/theme-textmate.js"); +/* harmony import */ var ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ace-builds/src-noconflict/theme-textmate */ "../../../../../../../../node_modules/ace-builds/src-noconflict/theme-textmate.js"); /* harmony import */ var ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_theme_textmate__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ace-builds/src-noconflict/mode-sql */ "../../node_modules/ace-builds/src-noconflict/mode-sql.js"); +/* harmony import */ var ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ace-builds/src-noconflict/mode-sql */ "../../../../../../../../node_modules/ace-builds/src-noconflict/mode-sql.js"); /* harmony import */ var ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_mode_sql__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ace-builds/src-noconflict/ext-language_tools */ "../../node_modules/ace-builds/src-noconflict/ext-language_tools.js"); +/* harmony import */ var ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ace-builds/src-noconflict/ext-language_tools */ "../../../../../../../../node_modules/ace-builds/src-noconflict/ext-language_tools.js"); /* harmony import */ var ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(ace_builds_src_noconflict_ext_language_tools__WEBPACK_IMPORTED_MODULE_5__); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } @@ -115994,890 +91019,4706 @@ function requestTimeout(timeout) { /***/ }), -/***/ "../../node_modules/util-deprecate/browser.js": -/*!****************************************************!*\ - !*** ../../node_modules/util-deprecate/browser.js ***! - \****************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { +/***/ "../../node_modules/util-deprecate/browser.js": +/*!****************************************************!*\ + !*** ../../node_modules/util-deprecate/browser.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + + +/** + * Module exports. + */ + +module.exports = deprecate; + +/** + * Mark that a method should not be used. + * Returns a modified function which warns once by default. + * + * If `localStorage.noDeprecation = true` is set, then it is a no-op. + * + * If `localStorage.throwDeprecation = true` is set, then deprecated functions + * will throw an Error when invoked. + * + * If `localStorage.traceDeprecation = true` is set, then deprecated functions + * will invoke `console.trace()` instead of `console.error()`. + * + * @param {Function} fn - the function to deprecate + * @param {String} msg - the string to print to the console when `fn` is invoked + * @returns {Function} a new "deprecated" version of `fn` + * @api public + */ + +function deprecate (fn, msg) { + if (config('noDeprecation')) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (config('throwDeprecation')) { + throw new Error(msg); + } else if (config('traceDeprecation')) { + console.trace(msg); + } else { + console.warn(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +} + +/** + * Checks `localStorage` for boolean values for the given `name`. + * + * @param {String} name + * @returns {Boolean} + * @api private + */ + +function config (name) { + // accessing global.localStorage can trigger a DOMException in sandboxed iframes + try { + if (!__webpack_require__.g.localStorage) return false; + } catch (_) { + return false; + } + var val = __webpack_require__.g.localStorage[name]; + if (null == val) return false; + return String(val).toLowerCase() === 'true'; +} + + +/***/ }), + +/***/ "../../node_modules/util/node_modules/inherits/inherits_browser.js": +/*!*************************************************************************!*\ + !*** ../../node_modules/util/node_modules/inherits/inherits_browser.js ***! + \*************************************************************************/ +/***/ ((module) => { + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + + +/***/ }), + +/***/ "../../node_modules/util/support/isBufferBrowser.js": +/*!**********************************************************!*\ + !*** ../../node_modules/util/support/isBufferBrowser.js ***! + \**********************************************************/ +/***/ ((module) => { + +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} + +/***/ }), + +/***/ "../../node_modules/util/util.js": +/*!***************************************!*\ + !*** ../../node_modules/util/util.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(__webpack_require__.g.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ "../../node_modules/util/support/isBufferBrowser.js"); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = __webpack_require__(/*! inherits */ "../../node_modules/util/node_modules/inherits/inherits_browser.js"); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + + +/***/ }), + +/***/ "../../node_modules/vm-browserify/index.js": +/*!*************************************************!*\ + !*** ../../node_modules/vm-browserify/index.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +var indexOf = function (xs, item) { + if (xs.indexOf) return xs.indexOf(item); + else for (var i = 0; i < xs.length; i++) { + if (xs[i] === item) return i; + } + return -1; +}; +var Object_keys = function (obj) { + if (Object.keys) return Object.keys(obj) + else { + var res = []; + for (var key in obj) res.push(key) + return res; + } +}; + +var forEach = function (xs, fn) { + if (xs.forEach) return xs.forEach(fn) + else for (var i = 0; i < xs.length; i++) { + fn(xs[i], i, xs); + } +}; + +var defineProp = (function() { + try { + Object.defineProperty({}, '_', {}); + return function(obj, name, value) { + Object.defineProperty(obj, name, { + writable: true, + enumerable: false, + configurable: true, + value: value + }) + }; + } catch(e) { + return function(obj, name, value) { + obj[name] = value; + }; + } +}()); + +var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', +'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', +'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', +'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', +'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; + +function Context() {} +Context.prototype = {}; + +var Script = exports.Script = function NodeScript (code) { + if (!(this instanceof Script)) return new Script(code); + this.code = code; +}; + +Script.prototype.runInContext = function (context) { + if (!(context instanceof Context)) { + throw new TypeError("needs a 'context' argument."); + } + + var iframe = document.createElement('iframe'); + if (!iframe.style) iframe.style = {}; + iframe.style.display = 'none'; + + document.body.appendChild(iframe); + + var win = iframe.contentWindow; + var wEval = win.eval, wExecScript = win.execScript; + + if (!wEval && wExecScript) { + // win.eval() magically appears when this is called in IE: + wExecScript.call(win, 'null'); + wEval = win.eval; + } + + forEach(Object_keys(context), function (key) { + win[key] = context[key]; + }); + forEach(globals, function (key) { + if (context[key]) { + win[key] = context[key]; + } + }); + + var winKeys = Object_keys(win); + + var res = wEval.call(win, this.code); + + forEach(Object_keys(win), function (key) { + // Avoid copying circular objects like `top` and `window` by only + // updating existing context properties or new properties in the `win` + // that was only introduced after the eval. + if (key in context || indexOf(winKeys, key) === -1) { + context[key] = win[key]; + } + }); + + forEach(globals, function (key) { + if (!(key in context)) { + defineProp(context, key, win[key]); + } + }); + + document.body.removeChild(iframe); + + return res; +}; + +Script.prototype.runInThisContext = function () { + return eval(this.code); // maybe... +}; + +Script.prototype.runInNewContext = function (context) { + var ctx = Script.createContext(context); + var res = this.runInContext(ctx); + + if (context) { + forEach(Object_keys(ctx), function (key) { + context[key] = ctx[key]; + }); + } + + return res; +}; + +forEach(Object_keys(Script.prototype), function (name) { + exports[name] = Script[name] = function (code) { + var s = Script(code); + return s[name].apply(s, [].slice.call(arguments, 1)); + }; +}); + +exports.isContext = function (context) { + return context instanceof Context; +}; + +exports.createScript = function (code) { + return exports.Script(code); +}; + +exports.createContext = Script.createContext = function (context) { + var copy = new Context(); + if(typeof context === 'object') { + forEach(Object_keys(context), function (key) { + copy[key] = context[key]; + }); + } + return copy; +}; + + +/***/ }), + +/***/ "../history/lib/config.js": +/*!********************************!*\ + !*** ../history/lib/config.js ***! + \********************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "../history/lib/graph.js": +/*!*******************************!*\ + !*** ../history/lib/graph.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.HistoryGraph = void 0; +__webpack_require__(/*! d3-transition */ "../../node_modules/d3-transition/src/index.js"); +const d3_color_1 = __webpack_require__(/*! d3-color */ "../../node_modules/d3-color/src/index.js"); +const d3_scale_1 = __webpack_require__(/*! d3-scale */ "../../node_modules/d3-scale/src/index.js"); +const d3_scale_chromatic_1 = __webpack_require__(/*! d3-scale-chromatic */ "../../node_modules/d3-scale-chromatic/src/index.js"); +const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); +const d3_zoom_1 = __webpack_require__(/*! d3-zoom */ "../../node_modules/d3-zoom/src/index.js"); +const fs = __webpack_require__(/*! file-saver */ "../../node_modules/file-saver/dist/FileSaver.min.js"); +class HistoryGraph { + constructor(graphId, div, config = {}) { + this.nodes = []; + this.versionNodes = []; + this.edges = []; + this.maxX = 0; + this.maxY = 0; + this.maxId = 0; + this.i = 0; + var defaultConfig = { + customSelectNode: (g, d) => false, + customCtrlClick: (g, d) => false, + customForm: (g, form) => null, + customSize: (g) => [g.config.width, g.config.height], + customWindowTabCommand: (trialIdSimplified, trialId, command) => false, + hintMessage: "Ctrl+Shift click or ⌘+Shift click to diff trials", + width: 200, + height: 100, + radius: 20, + moveX: 20, + moveY: 25, + moveY2: 10, + spacing: 17, + margin: 50, + fontSize: 10, + useTooltip: false, + }; + this.config = Object.assign({}, defaultConfig, config); + this.graphId = graphId; + this.zoom = (0, d3_zoom_1.zoom)() + .on("zoom", (event) => { + return this.zoomFunction(event); + }) + .on("start", () => (0, d3_selection_1.select)('body').style("cursor", "move")) + .on("end", () => (0, d3_selection_1.select)('body').style("cursor", "auto")) + .wheelDelta(function () { + const e = event; + return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000; + }); + this.div = (0, d3_selection_1.select)(div); + let form = (0, d3_selection_1.select)(div) + .append("form") + .classed("history-toolbar", true); + this.svg = (0, d3_selection_1.select)(div) + .append("div") + .append("svg") + .attr("width", this.config.width) + .attr("height", this.config.height) + .call(this.zoom) + .on("mouseup", () => this.svgMouseUp()); + this.state = { + selectedNode: null, + mouseDownNode: null, + justScale: false + }; + // Tooltip + this.tooltipDiv = (0, d3_selection_1.select)("body").append("div") + .classed("now-tooltip now-history-tooltip", true) + .style("opacity", 0) + .style("max-width", "250px") + .on("mouseout", () => { + this.closeTooltip(); + }); + this.createToolbar(form); + this.createMarker('end-arrow', 'endarrow', '#000'); + this.g = this.svg.append("g") + .attr("id", this._graphId()) + .attr("transform", "translate(0,0)") + .classed('HistoryGraph', true); + } + createToolbar(form) { + let formdiv = form.append("div") + .classed("buttons", true); + this.config.customForm(this, formdiv); + // Reset zoom + formdiv.append("a") + .classed("toollink", true) + .attr("id", "history-" + this.graphId + "-history-zoom") + .attr("href", "#") + .attr("title", "Restore zoom") + .on("click", () => this.restorePosition()) + .append("i") + .classed("fa fa-eye", true); + // Toggle Tooltips + let tooltipsToggle = formdiv.append("input") + .attr("id", "history-" + this.graphId + "-toolbar-tooltips") + .attr("type", "checkbox") + .attr("name", "history-toolbar-tooltips") + .attr("value", "show") + .property("checked", this.config.useTooltip) + .on("change", () => { + this.closeTooltip(); + this.config.useTooltip = tooltipsToggle.property("checked"); + }); + formdiv.append("label") + .attr("for", "history-" + this.graphId + "-toolbar-tooltips") + .attr("title", "Show tooltips on mouse hover") + .append("i") + .classed("fa fa-comment", true); + // Download SVG + formdiv.append("a") + .classed("toollink", true) + .attr("id", "history-" + this.graphId + "-download") + .attr("href", "#") + .attr("title", "Download graph SVG") + .on("click", () => { + this.download(); + }) + .append("i") + .classed("fa fa-download", true); + // Set Font Size + let fontToggle = formdiv.append("input") + .attr("id", "history-" + this.graphId + "-toolbar-fonts") + .attr("type", "checkbox") + .attr("name", "history-toolbar-fonts") + .attr("value", "show") + .property("checked", false) + .on("change", () => { + let display = fontToggle.property("checked") ? "inline-block" : "none"; + fontSize.style("display", display); + }); + formdiv.append("label") + .attr("for", "history-" + this.graphId + "-toolbar-fonts") + .attr("title", "Set font size") + .append("i") + .classed("fa fa-font", true); + let fontSize = formdiv.append("input") + .attr("type", "number") + .attr("value", this.config.fontSize) + .style("width", "50px") + .style("display", "none") + .attr("title", "Node font size") + .on("change", () => { + this.config.fontSize = fontSize.property("value"); + this.svg.selectAll("text.trial-id") + .attr("font-size", this.config.fontSize); + }); + // Submit + formdiv.append("input") + .attr("type", "submit") + .attr("name", "prevent-enter") + .attr("onclick", "return false;") + .style("display", "none"); + formdiv.append("div"); + formdiv.append("div") + .text(this.config.hintMessage) + .style('font-family', 'sans-serif') + .style('font-size', '12px') + .style('pointer-events', 'none'); + } + load(data) { + let nodes = [], otherNodes = [], edges = [], spacing = this.config.spacing, margin = this.config.margin; + let spacing2 = 2 * spacing, spacing4 = 4 * spacing, start = margin, max = 0, id = 0, last = data.nodes.length - 1, tid = 0, useVersion = false; + let levels = []; + for (var i = 0; i <= last; i++) { + let node = data.nodes[i]; + var previous = levels[node.level]; + if (previous == undefined) { + previous = -1; + } + var trials = node.trials; + if (trials == undefined) { + trials = []; + } + levels[node.level] = Math.max(previous, trials.length); + } + let levelsy = []; + var current = margin; + for (var i = 0; i <= levels.length; i++) { + levelsy[i] = current; + current += spacing2 + levels[i] * spacing2; + } + for (var i = 0; i <= last; i++) { + let node = data.nodes[i]; + let x = start + spacing4 * id; + let y = levelsy[node.level]; + var new_node = { + id: id, + display: node.display, + x: x, + y: y, + title: node.id.toString(), + info: node, + radius: this.config.radius, + gradient: false, + status: node.status + }; + nodes.push(new_node); + if (typeof (node.trials) != "undefined") { + useVersion = true; + for (var j = 0; j < node.trials.length; j++) { + let trialNode = node.trials[j]; + let ny = y + (j + 1) * spacing2 + spacing; + otherNodes.push({ + id: tid, + display: trialNode.display, + x: x + this.config.radius / 2, + y: ny, + title: trialNode.id.toString(), + info: trialNode, + tooltip: trialNode.tooltip, + radius: this.config.radius / 2, + gradient: true, + status: trialNode.status + }); + tid += 1; + max = Math.max(max, y); + } + } + else { + new_node.tooltip = node.tooltip; + } + max = Math.max(max, y); + this.maxX = x; + id += 1; + } + max += spacing2; + this.maxY = max; + this.maxId = Math.max(tid, id); + for (var i = 0; i < data.edges.length; i++) { + let edge = Object.assign({}, data.edges[i]); + edge.id = edge.source + "-" + edge.target; + edge.source = nodes[edge.source]; + edge.target = nodes[edge.target]; + if (edge.source != edge.target) { + edges.push(edge); + } + } + if (useVersion) { + this.nodes = otherNodes; + this.versionNodes = nodes; + } + else { + this.nodes = nodes; + this.versionNodes = []; + } + this.edges = edges; + this.updateWindow(); + this.restorePosition(); + this.update(); + this.menuOnRightClick(); + return nodes; + } + updateWindow() { + let size = this.config.customSize(this); + this.config.width = size[0]; + this.config.height = size[1]; + this.svg + .attr("width", size[0]) + .attr("height", size[1]); + } + update() { + var nodes = this.g.selectAll('g.node') + .data(this.nodes, (d) => d.id); + var edges = this.g.selectAll('g.link') + .data(this.edges, (d) => d.id); + var version = this.g.selectAll('g.version') + .data(this.versionNodes, (d) => d.id); + this.updateNodes(nodes); + this.updateVersionNodes(version); + this.updateLinks(edges); + } + restorePosition() { + let scale = this.config.height / this.maxY; + if (scale <= 1.0) { + this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity + .translate(this.config.width + - this.maxX * scale + - this.config.margin, 0) + .scale(scale)); + } + else { + this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity + .scale(1) + .translate(this.config.width + - this.maxX + - this.config.margin, 0)); + } + this.state.justScale = false; + } + selectNode(node) { + this.state.selectedNode = node; + this.config.customSelectNode(this, node); + this.svg.selectAll('.node[attr-trial="' + node.title + '"] > rect') + .attr('stroke', 'rgb(200, 238, 241)') + .classed('selected', true); + } + selectTrial(trialId) { + for (var node of this.nodes) { + if (node.title == trialId) { + this.selectNode(node); + return; + } + } + } + download(name) { + var isFileSaverSupported = false; + try { + isFileSaverSupported = !!new Blob(); + } + catch (e) { + alert("blob not supported"); + } + name = (name === undefined) ? "history.svg" : name; + let gnode = this.g.node(); + var bbox = gnode.getBBox(); + var width = this.svg.attr("width"), height = this.svg.attr("height"); + this.g.attr("transform", "translate(" + (-bbox.x + 5) + ", " + (-bbox.y + 5) + ")"); + let svgNode = this.svg + .attr("title", "Trial") + .attr("version", 1.1) + .attr("width", bbox.width + 10) + .attr("height", bbox.height + 10) + .attr("xmlns", "http://www.w3.org/2000/svg") + .node(); + var html = svgNode.parentNode.innerHTML; + html = ' { + if (this.state.selectedNode == null) { + return false; + } + return cd.id === this.state.selectedNode.id; + }).select('rect') + .classed('selected', false) + .attr("stroke", "#000"); + this.state.selectedNode = null; + } + nodeMouseDown(event, d3node, d) { + event.stopPropagation(); + this.state.mouseDownNode = d; + this.closeTooltip(); + } + nodeMouseUp(event, d3node, d) { + event.stopPropagation(); + if (!this.state.mouseDownNode) { + return; + } + if (this.state.justScale) { + this.state.justScale = false; + } + else { + if (event.ctrlKey || event.shiftKey || event.altKey) { + this.config.customCtrlClick(this, d); + return; + } + if (this.state.selectedNode) { + this.unselectNode(); + } + d3node + .attr('stroke', 'rgb(200, 238, 241)') + .classed('selected', true); + this.state.selectedNode = d; + this.config.customSelectNode(this, d); + } + this.state.mouseDownNode = null; + } + svgMouseUp() { + if (this.state.justScale) { + this.state.justScale = false; + } + } + updateVersionNodes(nodes) { + var nodeEnter = nodes.enter().append("g") + .classed("version", true) + .attr("attr-trialid", (d) => d.title) + .attr("transform", (d) => { + return "translate(" + 0 + "," + 0 + ")"; + }); + // Circle for new nodes + nodeEnter.append('rect') + .attr("transform", (d) => { + return "translate(" + d.x + "," + d.y + ")"; + }) + .attr('width', (d) => 2 * d.radius) + .attr('height', (d) => 2 * d.radius) + .attr('rx', 0) + .attr('ry', 0) + //.attr('r', ) + .attr("stroke", "#000") + .attr("stroke-width", "2.5px") + .attr("fill", "#F6FBFF") + .attr("stroke", "#000") + .attr("stroke-width", "2.5px"); + nodeEnter.append('text') + .classed('trial-id', true) + .attr('font-family', 'sans-serif') + .attr('font-size', this.config.fontSize + 'px') + .attr('pointer-events', 'none') + .attr('x', (d) => d.radius) + .attr('y', (d) => d.radius + 4) + .attr('stroke', '#000') + .attr('text-anchor', 'middle') + //.attr('font-weight', 'bold') + .attr("transform", (d) => { + return "translate(" + d.x + "," + d.y + ")"; + }).text((d) => d.display); + nodeEnter.merge(nodes); // nodeUpdate + nodes.exit().remove(); // nodeExit + } + updateNodes(nodes) { + let self = this; + var nodeEnter = nodes.enter().append("g") + .classed("node", true) + .attr("attr-trialid", (d) => d.title) + .attr("cursor", "pointer") + .attr("transform", (d) => { + return "translate(" + 0 + "," + 0 + ")"; + }); + // Circle for new nodes + nodeEnter.append('rect') + .attr("transform", (d) => { + return "translate(" + d.x + "," + d.y + ")"; + }) + .attr('cursor', 'pointer') + .attr('title', (d) => d.info.display) + .attr('width', (d) => 2 * d.radius) + .attr('height', (d) => 2 * d.radius) + .attr('rx', (d) => 2 * d.radius) + .attr('ry', (d) => 2 * d.radius) + //.attr('r', ) + .attr("stroke", "#000") + .attr("stroke-width", "2.5px") + .attr("fill", function (d) { + var proportion = Math.round(200 * (1.0 - (parseInt(d.title) / self.maxId)) + 50); + if (d.status === 'unfinished') { + return d.gradient ? (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString() : "rgb(238, 200, 241)"; + } + if (d.status === 'finished') { + return d.gradient ? (0, d3_color_1.rgb)(proportion, proportion, proportion, 255).toString() : "#F6FBFF"; + } + if (d.status === 'backup') { + return d.gradient ? (0, d3_color_1.rgb)(255, 255, proportion, 255).toString() : "rgb(241, 238, 200)"; + } + return '#666'; + }) + .attr("stroke", function (d) { + return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : "#000"; + }) + .attr("stroke-width", "2.5px") + .on('mousedown', function (event, d) { + self.nodeMouseDown(event, (0, d3_selection_1.select)(this), d); + }).on('click', function (event, d) { + self.nodeMouseUp(event, (0, d3_selection_1.select)(this), d); + }).on('mouseover', function (event, d) { + if (!self.state.mouseDownNode && self.config.useTooltip) { + self.closeTooltip(); + self.showTooltip(event, d); + } + (0, d3_selection_1.select)(this) + .attr('stroke', 'rgb(200, 238, 241)'); + }).on('mouseout', function (event, d) { + (0, d3_selection_1.select)(this) + .attr("stroke", (d) => { + return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : "#000"; + }); + }) + .classed("custom-menu", true); + nodeEnter.append('text') + .classed('trial-id', true) + .attr('font-family', 'sans-serif') + .attr('font-size', this.config.fontSize + 'px') + .attr('pointer-events', 'none') + .attr('x', (d) => d.radius) + .attr('y', (d) => d.radius + 4) + .attr('stroke', '#000') + .attr('text-anchor', 'middle') + //.attr('font-weight', 'bold') + .attr("transform", (d) => { + return "translate(" + d.x + "," + d.y + ")"; + }).text((d) => d.gradient ? "" : d.display); + nodeEnter.merge(nodes); // nodeUpdate + nodes.exit().remove(); // nodeExit + } + updateLinks(link) { + // Enter any new links + let colors = (0, d3_scale_1.scaleOrdinal)(d3_scale_chromatic_1.schemeCategory10); + var linkEnter = link.enter().insert('path', 'g') + .classed('link', true) + .attr('cursor', 'crosshair') + .attr('fill', 'none') + .attr('stroke', '#000') + .attr('stroke-width', '4px'); + linkEnter + .attr("d", (d) => { + var deltaX = d.target.x - d.source.x, deltaY = d.target.y - d.source.y, dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY), normX = deltaX / dist, normY = deltaY / dist, sourcePadding = this.config.radius - 5, targetPadding = this.config.radius + (d.right ? 3 : -5), sourceX = d.source.x + this.config.radius + (sourcePadding * normX), sourceY = d.source.y + this.config.radius + (sourcePadding * normY), targetX = d.target.x + this.config.radius - (targetPadding * normX), targetY = d.target.y + this.config.radius - (targetPadding * normY); + var step = 0; + if (d.level > 0) { + step += this.config.moveY; + step += (d.level - 1) * this.config.moveY2; + } + return `M ${sourceX}, ${sourceY} + C ${(sourceX - this.config.moveX / 2)} ${sourceY} + ${(sourceX - this.config.moveX / 2)} ${(sourceY + 3 * step / 4)} + ${(sourceX - this.config.moveX)} ${(sourceY + step)} + L ${(sourceX - this.config.moveX)} ${(sourceY + step)} + ${(targetX + this.config.moveX)} ${(sourceY + step)} + C ${(targetX + this.config.moveX / 2)} ${(sourceY + 3 * step / 4)} + ${(targetX + this.config.moveX / 2)} ${sourceY} + ${targetX}, ${targetY}`; + }) + .attr('marker-end', (d) => { + return d.right ? 'url(#end-arrow)' : ''; + }) + .attr('stroke', (d) => { + return (0, d3_color_1.rgb)(colors(d.level.toString())).darker().toString(); + }); + // Update + linkEnter.merge(link); // linkUpdate + // Remove any exiting links + link.exit().remove(); // linkExit + } + zoomFunction(event) { + this.state.justScale = true; + this.closeTooltip(); + this.transform = event.transform; + this.g.attr("transform", event.transform); + } + _graphId() { + return "history-graph-" + this.graphId; + } + menuOnRightClick() { + let rightClickMenu = document.getElementById("context-menu"); + // Set up an event handler for the documnt right click + document.addEventListener("contextmenu", function (event) { + var _a; + //open right click menu + let target = event.target; + if (target && target.classList.contains("custom-menu")) { + event.preventDefault(); + if (rightClickMenu) { + rightClickMenu.setAttribute("selected-trial", (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("attr-trialid")); + rightClickMenu.setAttribute("selected-trial-simplified", target.getAttribute("title")); + rightClickMenu.style.top = (event.pageY - 10).toString(); + rightClickMenu.style.left = (event.pageX - 90).toString(); + rightClickMenu.style.display = "block"; + rightClickMenu.classList.add("show"); + } + } + }); + // close the menu + document.addEventListener("click", function (event) { + if (rightClickMenu) { + rightClickMenu.style.display = "none"; + rightClickMenu.classList.remove("show"); + } + }); + } +} +exports.HistoryGraph = HistoryGraph; + + +/***/ }), + +/***/ "../history/lib/index.js": +/*!*******************************!*\ + !*** ../history/lib/index.js ***! + \*******************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +__exportStar(__webpack_require__(/*! ./config */ "../history/lib/config.js"), exports); +__exportStar(__webpack_require__(/*! ./structures */ "../history/lib/structures.js"), exports); +__exportStar(__webpack_require__(/*! ./graph */ "../history/lib/graph.js"), exports); + + +/***/ }), + +/***/ "../history/lib/structures.js": +/*!************************************!*\ + !*** ../history/lib/structures.js ***! + \************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css ***! + \***************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.lm-AccordionPanel .lm-AccordionPanel-title { + box-sizing: border-box; + padding: 0px 10px; + background: #e5e5e5; + border: 1px solid #c0c0c0; + border-bottom: none; + font: + 12px Helvetica, + Arial, + sans-serif; + min-height: 22px; + max-height: 22px; + min-width: 35px; + line-height: 20px; + margin: 0px; +} + +.lm-AccordionPanel .lm-AccordionPanel-title:focus, +.lm-AccordionPanel .lm-AccordionPanel-title:hover { + background: #dbdbdb; +} + +.lm-AccordionPanel .lm-AccordionPanel-title:focus, +.lm-AccordionPanel + .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) { + border: 1px solid lightskyblue; +} + +.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) { + border-bottom: 1px solid #c0c0c0; +} + +.lm-AccordionPanel + .lm-AccordionPanel-title.lm-mod-expanded + .lm-AccordionPanel-titleCollapser:before { + content: '\\f0d8'; + font-family: FontAwesome; +} + +.lm-AccordionPanel + .lm-AccordionPanel-title + .lm-AccordionPanel-titleCollapser:before { + content: '\\f0d7'; + font-family: FontAwesome; + position: absolute; + right: 10px; +} + +.lm-AccordionPanel .lm-AccordionPanel-titleLabel { + padding: 0px 5px; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/accordionpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,sBAAsB;EACtB,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,WAAW;AACb;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;;;EAGE,8BAA8B;AAChC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel .lm-AccordionPanel-title {\n box-sizing: border-box;\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n min-height: 22px;\n max-height: 22px;\n min-width: 35px;\n line-height: 20px;\n margin: 0px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\n background: #dbdbdb;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\n border: 1px solid lightskyblue;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title.lm-mod-expanded\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\f0d8';\n font-family: FontAwesome;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\f0d7';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\n padding: 0px 5px;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css ***! + \***************************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + font-family: sans-serif; + background: #f5f5f5; +} + +.lm-CommandPalette-search { + padding: 8px; +} + +.lm-CommandPalette-wrapper { + padding: 4px 6px; + background: white; + border: 1px solid #e0e0e0; + position: relative; +} + +.lm-CommandPalette-input { + width: 92%; + border: none; + outline: none; + font-size: 16px; +} + +.lm-CommandPalette-header { + padding: 4px; + color: #757575; + font-size: 12px; + font-weight: 600; + background: #e1e1e1; + cursor: pointer; +} + +.lm-CommandPalette-header:hover::before { + content: '\\2026'; /* ellipsis */ + float: right; + margin-right: 4px; +} + +.lm-CommandPalette-header > mark { + background-color: transparent; + font-weight: bold; +} + +.lm-CommandPalette-item { + padding: 4px 8px; + color: #757575; + font-size: 13px; + font-weight: 500; +} + +.lm-CommandPalette-emptyMessage { + padding: 4px; + color: #757575; + font-size: 12px; + font-weight: 600; + text-align: center; +} + +.lm-CommandPalette-item.lm-mod-disabled { + color: rgba(0, 0, 0, 0.25); +} + +.lm-CommandPalette-item.lm-mod-active { + background: #7fdbff; +} + +.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) { + background: #e5e5e5; +} + +.lm-CommandPalette-itemIcon { + display: none; +} + +.lm-CommandPalette-itemLabel > mark { + background-color: transparent; + font-weight: bold; +} + +.lm-CommandPalette-item.lm-mod-disabled mark { + color: rgba(0, 0, 0, 0.4); +} + +.lm-CommandPalette-itemCaption { + color: #9e9e9e; + font-size: 11px; + font-weight: 400; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/commandpalette.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,gBAAgB,EAAE,aAAa;EAC/B,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n font-family: sans-serif;\n background: #f5f5f5;\n}\n\n.lm-CommandPalette-search {\n padding: 8px;\n}\n\n.lm-CommandPalette-wrapper {\n padding: 4px 6px;\n background: white;\n border: 1px solid #e0e0e0;\n position: relative;\n}\n\n.lm-CommandPalette-input {\n width: 92%;\n border: none;\n outline: none;\n font-size: 16px;\n}\n\n.lm-CommandPalette-header {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n background: #e1e1e1;\n cursor: pointer;\n}\n\n.lm-CommandPalette-header:hover::before {\n content: '\\2026'; /* ellipsis */\n float: right;\n margin-right: 4px;\n}\n\n.lm-CommandPalette-header > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item {\n padding: 4px 8px;\n color: #757575;\n font-size: 13px;\n font-weight: 500;\n}\n\n.lm-CommandPalette-emptyMessage {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n text-align: center;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-CommandPalette-item.lm-mod-active {\n background: #7fdbff;\n}\n\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\n background: #e5e5e5;\n}\n\n.lm-CommandPalette-itemIcon {\n display: none;\n}\n\n.lm-CommandPalette-itemLabel > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled mark {\n color: rgba(0, 0, 0, 0.4);\n}\n\n.lm-CommandPalette-itemCaption {\n color: #9e9e9e;\n font-size: 11px;\n font-weight: 400;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css ***! + \*********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2018, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-DataGrid { + min-width: 64px; + min-height: 64px; + border: 1px solid #a0a0a0; +} + +.lm-DataGrid-scrollCorner { + background-color: #f0f0f0; +} + +.lm-DataGrid-scrollCorner::after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 1px; + height: 1px; + background-color: #a0a0a0; +} + +.lm-DataGrid-cellEditorOccluder { + pointer-events: none; + position: absolute; + overflow: hidden; +} + +.lm-DataGrid-cellEditorContainer { + pointer-events: auto; + position: absolute; + background-color: #ffffff; + box-sizing: border-box; + box-shadow: 0px 0px 6px #006bf7; + border: 2px solid #006bf7; +} + +.lm-DataGrid-cellEditorContainer.lm-mod-invalid { + box-shadow: 0px 0px 6px red; + border: 2px solid red; +} + +.lm-DataGrid-cellEditorContainer > form { + width: 100%; + height: 100%; + overflow: hidden; +} + +.lm-DataGrid-cellEditorWidget { + width: 100%; + height: 100%; + outline: none; + box-sizing: border-box; +} + +.lm-DataGrid-cellEditorInput { + background-color: #ffffff; + border: 0; +} + +.lm-DataGrid-cellEditorCheckbox { + margin: 0; +} + +.lm-DataGrid-notification { + position: absolute; + display: flex; + overflow: visible; + animation: fade-in 300ms ease-out; +} + +.lm-DataGrid-notificationContainer { + box-shadow: 0px 2px 5px #999999; + border-radius: 3px; + background-color: white; + color: black; + border: 1px solid black; + font-family: sans-serif; + font-size: 13px; + padding: 4px; +} + +@keyframes fade-in { + 0% { + opacity: 0; + } + 50% { + opacity: 0.7; + } + 100% { + opacity: 1; + } +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/datagrid.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E;;AAE9E;EACE,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,yBAAyB;EACzB,sBAAsB;EACtB,+BAA+B;EAC/B,yBAAyB;AAC3B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,yBAAyB;EACzB,SAAS;AACX;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,iCAAiC;AACnC;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,uBAAuB;EACvB,YAAY;EACZ,uBAAuB;EACvB,uBAAuB;EACvB,eAAe;EACf,YAAY;AACd;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,YAAY;EACd;EACA;IACE,UAAU;EACZ;AACF","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DataGrid {\n min-width: 64px;\n min-height: 64px;\n border: 1px solid #a0a0a0;\n}\n\n.lm-DataGrid-scrollCorner {\n background-color: #f0f0f0;\n}\n\n.lm-DataGrid-scrollCorner::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n background-color: #a0a0a0;\n}\n\n.lm-DataGrid-cellEditorOccluder {\n pointer-events: none;\n position: absolute;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorContainer {\n pointer-events: auto;\n position: absolute;\n background-color: #ffffff;\n box-sizing: border-box;\n box-shadow: 0px 0px 6px #006bf7;\n border: 2px solid #006bf7;\n}\n\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\n box-shadow: 0px 0px 6px red;\n border: 2px solid red;\n}\n\n.lm-DataGrid-cellEditorContainer > form {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorWidget {\n width: 100%;\n height: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n.lm-DataGrid-cellEditorInput {\n background-color: #ffffff;\n border: 0;\n}\n\n.lm-DataGrid-cellEditorCheckbox {\n margin: 0;\n}\n\n.lm-DataGrid-notification {\n position: absolute;\n display: flex;\n overflow: visible;\n animation: fade-in 300ms ease-out;\n}\n\n.lm-DataGrid-notificationContainer {\n box-shadow: 0px 2px 5px #999999;\n border-radius: 3px;\n background-color: white;\n color: black;\n border: 1px solid black;\n font-family: sans-serif;\n font-size: 13px;\n padding: 4px;\n}\n\n@keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n opacity: 1;\n }\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css ***! + \**********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-DockPanel-overlay { + background: rgba(255, 255, 255, 0.6); + border: 1px dashed black; + transition-property: top, left, right, bottom; + transition-duration: 150ms; + transition-timing-function: ease; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/dockpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css": +/*!******************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css ***! + \******************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dragdrop_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../dragdrop/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_widgets_style_index_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../widgets/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_datagrid_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./datagrid.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css"); +// Imports + + + + + + + + + + + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dragdrop_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_widgets_style_index_css__WEBPACK_IMPORTED_MODULE_3__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_4__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_5__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_datagrid_css__WEBPACK_IMPORTED_MODULE_6__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_7__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_8__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_9__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_10__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_11__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2018, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n@import '@lumino/dragdrop/style/index.css';\n@import '@lumino/widgets/style/index.css';\n@import './accordionpanel.css';\n@import './commandpalette.css';\n@import './datagrid.css';\n@import './dockpanel.css';\n@import './menu.css';\n@import './menubar.css';\n@import './scrollbar.css';\n@import './tabbar.css';\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css ***! + \*****************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Menu { + padding: 3px 0px; + background: white; + color: rgba(0, 0, 0, 0.87); + border: 1px solid #c0c0c0; + font: + 12px Helvetica, + Arial, + sans-serif; + box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2); +} + +.lm-Menu-item.lm-mod-active { + background: #e5e5e5; +} + +.lm-Menu-item.lm-mod-disabled { + color: rgba(0, 0, 0, 0.25); +} + +.lm-Menu-itemIcon { + width: 21px; + padding: 4px 2px; +} + +.lm-Menu-itemLabel { + padding: 4px 35px 4px 2px; +} + +.lm-Menu-itemMnemonic { + text-decoration: underline; +} + +.lm-Menu-itemShortcut { + padding: 4px 0px; +} + +.lm-Menu-itemSubmenuIcon { + width: 16px; + padding: 4px 0px; +} + +.lm-Menu-item[data-type='separator'] > div { + padding: 0; + height: 9px; +} + +.lm-Menu-item[data-type='separator'] > div::after { + content: ''; + display: block; + position: relative; + top: 4px; + border-top: 1px solid #dddddd; +} + +.lm-Menu-itemIcon::before, +.lm-Menu-itemSubmenuIcon::before { + font-family: FontAwesome; +} + +.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before { + content: '\\f00c'; +} + +.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before { + content: '\\f0da'; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/menu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;EAC1B,yBAAyB;EACzB;;;cAGY;EACZ,0CAA0C;AAC5C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,WAAW;AACb;;AAEA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,6BAA6B;AAC/B;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n padding: 3px 0px;\n background: white;\n color: rgba(0, 0, 0, 0.87);\n border: 1px solid #c0c0c0;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-Menu-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-Menu-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-Menu-itemIcon {\n width: 21px;\n padding: 4px 2px;\n}\n\n.lm-Menu-itemLabel {\n padding: 4px 35px 4px 2px;\n}\n\n.lm-Menu-itemMnemonic {\n text-decoration: underline;\n}\n\n.lm-Menu-itemShortcut {\n padding: 4px 0px;\n}\n\n.lm-Menu-itemSubmenuIcon {\n width: 16px;\n padding: 4px 0px;\n}\n\n.lm-Menu-item[data-type='separator'] > div {\n padding: 0;\n height: 9px;\n}\n\n.lm-Menu-item[data-type='separator'] > div::after {\n content: '';\n display: block;\n position: relative;\n top: 4px;\n border-top: 1px solid #dddddd;\n}\n\n.lm-Menu-itemIcon::before,\n.lm-Menu-itemSubmenuIcon::before {\n font-family: FontAwesome;\n}\n\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\n content: '\\f00c';\n}\n\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\n content: '\\f0da';\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css": +/*!********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css ***! + \********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-MenuBar { + padding-left: 5px; + background: #fafafa; + color: rgba(0, 0, 0, 0.87); + border-bottom: 1px solid #dddddd; + font: + 13px Helvetica, + Arial, + sans-serif; +} + +.lm-MenuBar-menu { + transform: translateY(-1px); +} + +.lm-MenuBar-item { + padding: 4px 8px; + border-left: 1px solid transparent; + border-right: 1px solid transparent; +} + +.lm-MenuBar-item.lm-mod-active { + background: #e5e5e5; +} + +.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active { + z-index: 10001; + background: white; + border-left: 1px solid #c0c0c0; + border-right: 1px solid #c0c0c0; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); +} + +.lm-MenuBar-item:focus-visible { + outline: 2px solid #333; + outline-offset: -2px; +} + +.lm-MenuBar-item[aria-disabled='true'] { + color: rgba(0, 0, 0, 0.37); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/menubar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,iBAAiB;EACjB,mBAAmB;EACnB,0BAA0B;EAC1B,gCAAgC;EAChC;;;cAGY;AACd;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,kCAAkC;EAClC,mCAAmC;AACrC;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,iBAAiB;EACjB,8BAA8B;EAC9B,+BAA+B;EAC/B,0CAA0C;AAC5C;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,0BAA0B;AAC5B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n padding-left: 5px;\n background: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n border-bottom: 1px solid #dddddd;\n font:\n 13px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-MenuBar-menu {\n transform: translateY(-1px);\n}\n\n.lm-MenuBar-item {\n padding: 4px 8px;\n border-left: 1px solid transparent;\n border-right: 1px solid transparent;\n}\n\n.lm-MenuBar-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\n z-index: 10001;\n background: white;\n border-left: 1px solid #c0c0c0;\n border-right: 1px solid #c0c0c0;\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-MenuBar-item:focus-visible {\n outline: 2px solid #333;\n outline-offset: -2px;\n}\n\n.lm-MenuBar-item[aria-disabled='true'] {\n color: rgba(0, 0, 0, 0.37);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css ***! + \**********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); +// Imports + + + +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretleft.png */ "../../node_modules/@lumino/default-theme/images/caretleft.png"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretright.png */ "../../node_modules/@lumino/default-theme/images/caretright.png"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretup.png */ "../../node_modules/@lumino/default-theme/images/caretup.png"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretdown.png */ "../../node_modules/@lumino/default-theme/images/caretdown.png"), __webpack_require__.b); +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); +var ___CSS_LOADER_URL_REPLACEMENT_1___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); +var ___CSS_LOADER_URL_REPLACEMENT_2___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); +var ___CSS_LOADER_URL_REPLACEMENT_3___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-ScrollBar[data-orientation='horizontal'] { + min-height: 16px; + max-height: 16px; + min-width: 45px; + border-top: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] { + min-width: 16px; + max-width: 16px; + min-height: 45px; + border-left: 1px solid #a0a0a0; +} + +.lm-ScrollBar-button { + background-color: #f0f0f0; + background-position: center center; + min-height: 15px; + max-height: 15px; + min-width: 15px; + max-width: 15px; +} + +.lm-ScrollBar-button:hover { + background-color: #dadada; +} + +.lm-ScrollBar-button.lm-mod-active { + background-color: #cdcdcd; +} + +.lm-ScrollBar-track { + background: #f0f0f0; +} + +.lm-ScrollBar-thumb { + background: #cdcdcd; +} + +.lm-ScrollBar-thumb:hover { + background: #bababa; +} + +.lm-ScrollBar-thumb.lm-mod-active { + background: #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb { + height: 100%; + min-width: 15px; + border-left: 1px solid #a0a0a0; + border-right: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb { + width: 100%; + min-height: 15px; + border-top: 1px solid #a0a0a0; + border-bottom: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___}); +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___}); +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___}); +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___}); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/scrollbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,8BAA8B;AAChC;;AAEA;EACE,yBAAyB;EACzB,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,gCAAgC;AAClC;;AAEA;;EAEE,yDAA8C;AAChD;;AAEA;;EAEE,yDAA+C;AACjD;;AAEA;;EAEE,yDAA4C;AAC9C;;AAEA;;EAEE,yDAA8C;AAChD","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n min-height: 16px;\n max-height: 16px;\n min-width: 45px;\n border-top: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n min-width: 16px;\n max-width: 16px;\n min-height: 45px;\n border-left: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar-button {\n background-color: #f0f0f0;\n background-position: center center;\n min-height: 15px;\n max-height: 15px;\n min-width: 15px;\n max-width: 15px;\n}\n\n.lm-ScrollBar-button:hover {\n background-color: #dadada;\n}\n\n.lm-ScrollBar-button.lm-mod-active {\n background-color: #cdcdcd;\n}\n\n.lm-ScrollBar-track {\n background: #f0f0f0;\n}\n\n.lm-ScrollBar-thumb {\n background: #cdcdcd;\n}\n\n.lm-ScrollBar-thumb:hover {\n background: #bababa;\n}\n\n.lm-ScrollBar-thumb.lm-mod-active {\n background: #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\n height: 100%;\n min-width: 15px;\n border-left: 1px solid #a0a0a0;\n border-right: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\n width: 100%;\n min-height: 15px;\n border-top: 1px solid #a0a0a0;\n border-bottom: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(../images/caretleft.png);\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(../images/caretright.png);\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(../images/caretup.png);\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(../images/caretdown.png);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css ***! + \*******************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabBar { + min-height: 24px; + max-height: 24px; +} + +.lm-TabBar-content { + min-width: 0; + min-height: 0; + align-items: flex-end; + border-bottom: 1px solid #c0c0c0; +} + +.lm-TabBar-tab { + padding: 0px 10px; + background: #e5e5e5; + border: 1px solid #c0c0c0; + border-bottom: none; + font: + 12px Helvetica, + Arial, + sans-serif; + flex: 0 1 125px; + min-height: 20px; + max-height: 20px; + min-width: 35px; + margin-left: -1px; + line-height: 20px; +} + +.lm-TabBar-tabLabel .lm-TabBar-tabInput { + padding: 0px; + border: 0px; + font: + 12px Helvetica, + Arial, + sans-serif; +} + +.lm-TabBar-tab.lm-mod-current { + background: white; +} + +.lm-TabBar-tab:hover:not(.lm-mod-current) { + background: #f0f0f0; +} + +.lm-TabBar-tab:first-child { + margin-left: 0; +} + +.lm-TabBar-tab.lm-mod-current { + min-height: 23px; + max-height: 23px; + transform: translateY(1px); +} + +.lm-TabBar-tabIcon, +.lm-TabBar-tabLabel, +.lm-TabBar-tabCloseIcon { + display: inline-block; +} + +.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon { + margin-left: 4px; +} + +.lm-TabBar .lm-TabBar-addButton { + padding: 0px 6px; + border-bottom: 1px solid #c0c0c0; +} + +.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before { + content: '\\f00d'; + font-family: FontAwesome; +} + +.lm-TabBar .lm-TabBar-addButton:before { + content: '\\f067'; + font-family: FontAwesome; +} + +.lm-TabBar-tab.lm-mod-drag-image { + min-height: 23px; + max-height: 23px; + min-width: 125px; + border: none; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/tabbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX;;;cAGY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;AAEA;;;EAGE,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;AAC5C","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.lm-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab {\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n flex: 0 1 125px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n padding: 0px;\n border: 0px;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n background: white;\n}\n\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\n background: #f0f0f0;\n}\n\n.lm-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabLabel,\n.lm-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n.lm-TabBar .lm-TabBar-addButton {\n padding: 0px 6px;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\n content: '\\f00d';\n font-family: FontAwesome;\n}\n\n.lm-TabBar .lm-TabBar-addButton:before {\n content: '\\f067';\n font-family: FontAwesome;\n}\n\n.lm-TabBar-tab.lm-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css": +/*!*************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css ***! + \*************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-cursor-backdrop { + top: 0px; + left: 0px; + position: fixed; + width: 200px; + height: 200px; + margin-top: -100px; + margin-left: -100px; + will-change: transform; + z-index: 100; + scrollbar-width: none; + -ms-overflow-style: none; + overflow: scroll; +} + +.lm-cursor-backdrop::after { + content: ''; + height: 1200px; + width: 1200px; + display: block; +} + +.lm-cursor-backdrop::-webkit-scrollbar { + display: none; +} + +.lm-mod-drag-image { + top: 0px; + left: 0px; + will-change: transform; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/dragdrop/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,QAAQ;EACR,SAAS;EACT,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,wBAAwB;EACxB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,SAAS;EACT,sBAAsB;AACxB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-cursor-backdrop {\n top: 0px;\n left: 0px;\n position: fixed;\n width: 200px;\n height: 200px;\n margin-top: -100px;\n margin-left: -100px;\n will-change: transform;\n z-index: 100;\n scrollbar-width: none;\n -ms-overflow-style: none;\n overflow: scroll;\n}\n\n.lm-cursor-backdrop::after {\n content: '';\n height: 1200px;\n width: 1200px;\n display: block;\n}\n\n.lm-cursor-backdrop::-webkit-scrollbar {\n display: none;\n}\n\n.lm-mod-drag-image {\n top: 0px;\n left: 0px;\n will-change: transform;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css ***! + \*********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title { + /* Title is rotated for horizontal accordion panel using CSS */ + display: block; + transform-origin: top left; + transform: rotate(-90deg) translate(-100%); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/accordionpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\n /* Title is rotated for horizontal accordion panel using CSS */\n display: block;\n transform-origin: top left;\n transform: rotate(-90deg) translate(-100%);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css ***! + \*********************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + display: flex; + flex-direction: column; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-CommandPalette-search { + flex: 0 0 auto; +} + +.lm-CommandPalette-content { + flex: 1 1 auto; + margin: 0; + padding: 0; + min-height: 0; + overflow: auto; + list-style-type: none; +} + +.lm-CommandPalette-header { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-CommandPalette-item { + display: flex; + flex-direction: row; +} + +.lm-CommandPalette-itemIcon { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemContent { + flex: 1 1 auto; + overflow: hidden; +} + +.lm-CommandPalette-itemShortcut { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemLabel { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-close-icon { + border: 1px solid transparent; + background-color: transparent; + position: absolute; + z-index: 1; + right: 3%; + top: 0; + bottom: 0; + margin: auto; + padding: 7px 0; + display: none; + vertical-align: middle; + outline: 0; + cursor: pointer; +} +.lm-close-icon:after { + content: 'X'; + display: block; + width: 15px; + height: 15px; + text-align: center; + color: #000; + font-weight: normal; + font-size: 12px; + cursor: pointer; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/commandpalette.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;EAC7B,6BAA6B;EAC7B,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACZ,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,eAAe;AACjB;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,eAAe;AACjB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n display: flex;\n flex-direction: column;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-CommandPalette-search {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-content {\n flex: 1 1 auto;\n margin: 0;\n padding: 0;\n min-height: 0;\n overflow: auto;\n list-style-type: none;\n}\n\n.lm-CommandPalette-header {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-CommandPalette-item {\n display: flex;\n flex-direction: row;\n}\n\n.lm-CommandPalette-itemIcon {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemContent {\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.lm-CommandPalette-itemShortcut {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemLabel {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-close-icon {\n border: 1px solid transparent;\n background-color: transparent;\n position: absolute;\n z-index: 1;\n right: 3%;\n top: 0;\n bottom: 0;\n margin: auto;\n padding: 7px 0;\n display: none;\n vertical-align: middle;\n outline: 0;\n cursor: pointer;\n}\n.lm-close-icon:after {\n content: 'X';\n display: block;\n width: 15px;\n height: 15px;\n text-align: center;\n color: #000;\n font-weight: normal;\n font-size: 12px;\n cursor: pointer;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css": +/*!****************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css ***! + \****************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-DockPanel { + z-index: 0; +} + +.lm-DockPanel-widget { + z-index: 0; +} + +.lm-DockPanel-tabBar { + z-index: 1; +} + +.lm-DockPanel-handle { + z-index: 2; +} + +.lm-DockPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-DockPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-DockPanel-handle[data-orientation='horizontal'] { + cursor: ew-resize; +} + +.lm-DockPanel-handle[data-orientation='vertical'] { + cursor: ns-resize; +} + +.lm-DockPanel-handle[data-orientation='horizontal']:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-DockPanel-handle[data-orientation='vertical']:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + +.lm-DockPanel-overlay { + z-index: 3; + box-sizing: border-box; + pointer-events: none; +} + +.lm-DockPanel-overlay.lm-mod-hidden { + display: none !important; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/dockpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B;;AAEA;EACE,UAAU;EACV,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel {\n z-index: 0;\n}\n\n.lm-DockPanel-widget {\n z-index: 0;\n}\n\n.lm-DockPanel-tabBar {\n z-index: 1;\n}\n\n.lm-DockPanel-handle {\n z-index: 2;\n}\n\n.lm-DockPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-DockPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal'] {\n cursor: ew-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='vertical'] {\n cursor: ns-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-DockPanel-handle[data-orientation='vertical']:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n\n.lm-DockPanel-overlay {\n z-index: 3;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n.lm-DockPanel-overlay.lm-mod-hidden {\n display: none !important;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css": +/*!************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css ***! + \************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_widget_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./widget.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_splitpanel_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./splitpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabpanel_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css"); +// Imports + + + + + + + + + + + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_widget_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_3__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_4__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_5__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_6__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_7__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_8__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_splitpanel_css__WEBPACK_IMPORTED_MODULE_9__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_10__["default"]); +___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabpanel_css__WEBPACK_IMPORTED_MODULE_11__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n@import './widget.css';\n@import './accordionpanel.css';\n@import './commandpalette.css';\n@import './dockpanel.css';\n@import './menu.css';\n@import './menubar.css';\n@import './scrollbar.css';\n@import './splitpanel.css';\n@import './tabbar.css';\n@import './tabpanel.css';\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css": +/*!***********************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css ***! + \***********************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Menu { + z-index: 10000; + position: absolute; + white-space: nowrap; + overflow-x: hidden; + overflow-y: auto; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-Menu-content { + margin: 0; + padding: 0; + display: table; + list-style-type: none; +} + +.lm-Menu-item { + display: table-row; +} + +.lm-Menu-item.lm-mod-hidden, +.lm-Menu-item.lm-mod-collapsed { + display: none !important; +} + +.lm-Menu-itemIcon, +.lm-Menu-itemSubmenuIcon { + display: table-cell; + text-align: center; +} + +.lm-Menu-itemLabel { + display: table-cell; + text-align: left; +} + +.lm-Menu-itemShortcut { + display: table-cell; + text-align: right; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/menu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;;EAEE,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n z-index: 10000;\n position: absolute;\n white-space: nowrap;\n overflow-x: hidden;\n overflow-y: auto;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-Menu-content {\n margin: 0;\n padding: 0;\n display: table;\n list-style-type: none;\n}\n\n.lm-Menu-item {\n display: table-row;\n}\n\n.lm-Menu-item.lm-mod-hidden,\n.lm-Menu-item.lm-mod-collapsed {\n display: none !important;\n}\n\n.lm-Menu-itemIcon,\n.lm-Menu-itemSubmenuIcon {\n display: table-cell;\n text-align: center;\n}\n\n.lm-Menu-itemLabel {\n display: table-cell;\n text-align: left;\n}\n\n.lm-Menu-itemShortcut {\n display: table-cell;\n text-align: right;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css": +/*!**************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css ***! + \**************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-MenuBar { + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-MenuBar-content { + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + list-style-type: none; +} + +.lm-MenuBar-item { + box-sizing: border-box; +} + +.lm-MenuBar-itemIcon, +.lm-MenuBar-itemLabel { + display: inline-block; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/menubar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,qBAAqB;AACvB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-MenuBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n list-style-type: none;\n}\n\n.lm-MenuBar-item {\n box-sizing: border-box;\n}\n\n.lm-MenuBar-itemIcon,\n.lm-MenuBar-itemLabel {\n display: inline-block;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css": +/*!****************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css ***! + \****************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-ScrollBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-ScrollBar[data-orientation='horizontal'] { + flex-direction: row; +} + +.lm-ScrollBar[data-orientation='vertical'] { + flex-direction: column; +} + +.lm-ScrollBar-button { + box-sizing: border-box; + flex: 0 0 auto; +} + +.lm-ScrollBar-track { + box-sizing: border-box; + position: relative; + overflow: hidden; + flex: 1 1 auto; +} + +.lm-ScrollBar-thumb { + box-sizing: border-box; + position: absolute; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/scrollbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;AACpB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n flex-direction: row;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n flex-direction: column;\n}\n\n.lm-ScrollBar-button {\n box-sizing: border-box;\n flex: 0 0 auto;\n}\n\n.lm-ScrollBar-track {\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.lm-ScrollBar-thumb {\n box-sizing: border-box;\n position: absolute;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css ***! + \*****************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-SplitPanel-child { + z-index: 0; +} + +.lm-SplitPanel-handle { + z-index: 1; +} + +.lm-SplitPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-SplitPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle { + cursor: ew-resize; +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle { + cursor: ns-resize; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/splitpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-SplitPanel-child {\n z-index: 0;\n}\n\n.lm-SplitPanel-handle {\n z-index: 1;\n}\n\n.lm-SplitPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-SplitPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\n cursor: ew-resize;\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\n cursor: ns-resize;\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css": +/*!*************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css ***! + \*************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-TabBar[data-orientation='horizontal'] { + flex-direction: row; + align-items: flex-end; +} + +.lm-TabBar[data-orientation='vertical'] { + flex-direction: column; + align-items: flex-end; +} + +.lm-TabBar-content { + margin: 0; + padding: 0; + display: flex; + flex: 1 1 auto; + list-style-type: none; +} + +.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content { + flex-direction: row; +} + +.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content { + flex-direction: column; +} + +.lm-TabBar-tab { + display: flex; + flex-direction: row; + box-sizing: border-box; + overflow: hidden; + touch-action: none; /* Disable native Drag/Drop */ +} + +.lm-TabBar-tabIcon, +.lm-TabBar-tabCloseIcon { + flex: 0 0 auto; +} + +.lm-TabBar-tabLabel { + flex: 1 1 auto; + overflow: hidden; + white-space: nowrap; +} + +.lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; +} + +.lm-TabBar-tab.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar-addButton.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab { + position: relative; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab { + left: 0; + transition: left 150ms ease; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab { + top: 0; + transition: top 150ms ease; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging { + transition: none; +} + +.lm-TabBar-tabLabel .lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; + background: inherit; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/tabbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB,EAAE,6BAA6B;AACnD;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,OAAO;EACP,2BAA2B;AAC7B;;AAEA;EACE,MAAM;EACN,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;EACtB,mBAAmB;AACrB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] {\n flex-direction: row;\n align-items: flex-end;\n}\n\n.lm-TabBar[data-orientation='vertical'] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n.lm-TabBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex: 1 1 auto;\n list-style-type: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\n flex-direction: row;\n}\n\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\n flex-direction: column;\n}\n\n.lm-TabBar-tab {\n display: flex;\n flex-direction: row;\n box-sizing: border-box;\n overflow: hidden;\n touch-action: none; /* Disable native Drag/Drop */\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabCloseIcon {\n flex: 0 0 auto;\n}\n\n.lm-TabBar-tabLabel {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n}\n\n.lm-TabBar-tab.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar-addButton.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\n position: relative;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\n left: 0;\n transition: left 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\n top: 0;\n transition: top 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\n transition: none;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n background: inherit;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css": +/*!***************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css ***! + \***************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabPanel-tabBar { + z-index: 1; +} + +.lm-TabPanel-stackedPanel { + z-index: 0; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/tabpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabPanel-tabBar {\n z-index: 1;\n}\n\n.lm-TabPanel-stackedPanel {\n z-index: 0;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css": +/*!*************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css ***! + \*************************************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Widget { + box-sizing: border-box; + position: relative; +} + +.lm-Widget.lm-mod-hidden { + display: none !important; +} +`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/widget.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,wBAAwB;AAC1B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Widget {\n box-sizing: border-box;\n position: relative;\n}\n\n.lm-Widget.lm-mod-hidden {\n display: none !important;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css": +/*!************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../history/style/index.css ***! + \************************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.history-toolbar { + float: left; + overflow: none; + z-index: 3; + position: absolute; +} + +.history-toolbar .buttons { + height: 30px; + display: inline-block; + margin-left: 8px; +} + +.history-toolbar .buttons > input { + height: 30px; +} + +.history-toolbar .buttons > input[type=checkbox] { + display: none +} + +.history-toolbar .buttons > label, .history-toolbar > div > a { + margin: 8px 8px 8px 0; +} + +.history-toolbar .buttons > input[type=checkbox] + label { + display:inline-block; + color: black; + cursor: pointer; +} + +.history-toolbar .buttons > input[type=checkbox]:checked + label { + color: blue; +} + +.history-toolbar .buttons > a.toollink, +.history-toolbar .buttons > a.toollink:link, +.history-toolbar .buttons > a.toollink:visited { + color: black; +} + +.history-toolbar .buttons > a.toollink:active { + color: blue; +} +`, "",{"version":3,"sources":["webpack://./../history/style/index.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,cAAc;IACd,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;IAGI,YAAY;AAChB;;AAEA;IACI,WAAW;AACf","sourcesContent":[".history-toolbar {\n float: left;\n overflow: none;\n z-index: 3;\n position: absolute;\n}\n\n.history-toolbar .buttons {\n height: 30px;\n display: inline-block;\n margin-left: 8px;\n}\n\n.history-toolbar .buttons > input {\n height: 30px;\n}\n\n.history-toolbar .buttons > input[type=checkbox] {\n display: none\n}\n\n.history-toolbar .buttons > label, .history-toolbar > div > a {\n margin: 8px 8px 8px 0;\n}\n\n.history-toolbar .buttons > input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.history-toolbar .buttons > a.toollink,\n.history-toolbar .buttons > a.toollink:link,\n.history-toolbar .buttons > a.toollink:visited {\n color: black;\n}\n\n.history-toolbar .buttons > a.toollink:active {\n color: blue;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css": +/*!***********************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css ***! + \***********************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); +// Imports + + + +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_4___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_5___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_6___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_URL_IMPORT_7___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E"), __webpack_require__.b); +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); +var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); +var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); +var ___CSS_LOADER_URL_REPLACEMENT_3___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); +var ___CSS_LOADER_URL_REPLACEMENT_4___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_4___); +var ___CSS_LOADER_URL_REPLACEMENT_5___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_5___); +var ___CSS_LOADER_URL_REPLACEMENT_6___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_6___); +var ___CSS_LOADER_URL_REPLACEMENT_7___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_7___); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `/*! + * Bootstrap v4.0.0 (https://getbootstrap.com) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\\2014 \\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___})}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_2___})}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(${___CSS_LOADER_URL_REPLACEMENT_3___}) no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_4___})}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_5___})}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_6___})}.carousel-control-next-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_7___})}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}} +/*# sourceMappingURL=bootstrap.min.css.map */`, "",{"version":3,"sources":["webpack://./style/bootstrap.min.css"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.0.0 (https://getbootstrap.com)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\2014 \\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\"\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\n/*# sourceMappingURL=bootstrap.min.css.map */"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./style/history.css": +/*!*****************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/history.css ***! + \*****************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css"); +// Imports + + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.history-content, +.history-content .sub-content, +.history-content .sub-content > div { + overflow: hidden !important; +} + +.history-content .filter .internal { + margin: 4px 8px; +} + +.history-content .filter { +} + +.history-content .filter input, .history-content .filter label { + vertical-align: top; + display: inline-block; +} + + +.history-content .graph-attr { + display: inline-block; + margin-right: 5px; +} + +.history-content .graph-attr input, .history-content .graph-attr label { + vertical-align: middle; + display: inline-block; +} + +.history-content .select-style { + width: 170px; + margin-right: 5px; +} + +`, "",{"version":3,"sources":["webpack://./style/history.css"],"names":[],"mappings":"AAEA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,eAAe;AACnB;;AAEA;AACA;;AAEA;IACI,mBAAmB;IACnB,qBAAqB;AACzB;;;AAGA;CACC,qBAAqB;CACrB,iBAAiB;AAClB;;AAEA;IACI,sBAAsB;IACtB,qBAAqB;AACzB;;AAEA;IACI,YAAY;IACZ,iBAAiB;AACrB","sourcesContent":["@import '~@noworkflow/history/style/index.css';\n\n.history-content,\n.history-content .sub-content,\n.history-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.history-content .filter .internal {\n margin: 4px 8px;\n}\n\n.history-content .filter {\n}\n\n.history-content .filter input, .history-content .filter label {\n vertical-align: top;\n display: inline-block;\n}\n\n\n.history-content .graph-attr {\n\tdisplay: inline-block;\n\tmargin-right: 5px;\n}\n\n.history-content .graph-attr input, .history-content .graph-attr label {\n vertical-align: middle;\n display: inline-block;\n}\n\n.history-content .select-style {\n width: 170px;\n margin-right: 5px;\n}\n\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./style/index.css": +/*!***************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/index.css ***! + \***************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_utils_style_shared_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../utils/style/shared.css */ "./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_trial_style_index_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../trial/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../trial/style/index.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./panel.css */ "./node_modules/css-loader/dist/cjs.js!./style/panel.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./history.css */ "./node_modules/css-loader/dist/cjs.js!./style/history.css"); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_trial_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./trial.css */ "./node_modules/css-loader/dist/cjs.js!./style/trial.css"); +// Imports + + + + + + + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_utils_style_shared_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_3__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_trial_style_index_css__WEBPACK_IMPORTED_MODULE_4__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_5__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_css__WEBPACK_IMPORTED_MODULE_6__["default"]); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_trial_css__WEBPACK_IMPORTED_MODULE_7__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `body { + font-family: "Verdana", "Geneva", "sans-serif"; +} + +.loading { + font-size: 40px; +} + +/* Link Button */ + +a.link-button { + text-decoration: none; + display:inline-block; + padding: 4px 0; + /*padding: 4px 12px;*/ + margin-bottom: 0; + font-size: 14px; + width: 100px; + line-height: 15px; + color: #333; + text-align: center; + text-shadow: 0 1px 1px rgba(255,255,255,0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top,#fff,#e6e6e6); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6)); + background-image: -webkit-linear-gradient(top,#fff,#e6e6e6); + background-image: -o-linear-gradient(top,#fff,#e6e6e6); + background-image: linear-gradient(to bottom,#fff,#e6e6e6); + background-repeat: repeat-x; + border: 1px solid #ccc; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25); + border-bottom-color: #b3b3b3; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +} + +a.link-button:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); + background-color:#e0e0e0; +} + +.hide-toolbar { + overflow: hidden; + max-height: 0; + padding-top: 0; + padding-bottom: 0; + margin-top: 0; + margin-bottom: 0; + -moz-transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + -o-transition-duration: 0.3s; + transition-duration: 0.3s; + -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); + -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); + -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); + transition-timing-function: cubic-bezier(0, 1, 0.5, 1); +} + +.show-toolbar { + -moz-transition-duration: 0.3s; + -webkit-transition-duration: 0.3s; + -o-transition-duration: 0.3s; + transition-duration: 0.3s; + -moz-transition-timing-function: ease-in; + -webkit-transition-timing-function: ease-in; + -o-transition-timing-function: ease-in; + transition-timing-function: ease-in; + /*max-height: 1000px; + overflow: hidden;*/ +} + +.visible { + border-bottom: 1px solid black; +} + +.info-filter input, .info-filter select { + display: block; + width: 250px; + margin: 7px 0; +}`, "",{"version":3,"sources":["webpack://./style/index.css"],"names":[],"mappings":"AAQA;EACE,8CAA8C;AAChD;;AAEA;EACE,eAAe;AACjB;;AAEA,gBAAgB;;AAEhB;EACE,qBAAqB;EACrB,oBAAoB;EACpB,cAAc;CACf,qBAAqB;EACpB,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,kBAAkB;EAClB,6CAA6C;EAC7C,sBAAsB;EACtB,eAAe;EACf,yBAAyB;EACzB,wDAAwD;EACxD,4EAA4E;EAC5E,2DAA2D;EAC3D,sDAAsD;EACtD,yDAAyD;EACzD,2BAA2B;EAC3B,sBAAsB;EACtB,qCAAqC;EACrC,8DAA8D;EAC9D,4BAA4B;EAC5B,oHAAoH;EACpH,iEAAiE;EACjE,kFAAkF;EAClF,+EAA+E;EAC/E,0EAA0E;AAC5E;;AAEA;EACE,sBAAsB;EACtB,UAAU;EACV,+EAA+E;EAC/E,4EAA4E;EAC5E,uEAAuE;EACvE,wBAAwB;AAC1B;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,2DAA2D;IAC3D,8DAA8D;IAC9D,yDAAyD;IACzD,sDAAsD;AAC1D;;AAEA;IACI,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,wCAAwC;IACxC,2CAA2C;IAC3C,sCAAsC;IACtC,mCAAmC;IACnC;sBACkB;AACtB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;AACf","sourcesContent":["@import '~@noworkflow/utils/style/shared.css';\n@import '~@noworkflow/history/style/index.css';\n@import '~@noworkflow/trial/style/index.css';\n@import './panel.css';\n@import './history.css';\n@import './trial.css';\n\n\nbody {\n font-family: \"Verdana\", \"Geneva\", \"sans-serif\";\n}\n\n.loading {\n font-size: 40px;\n}\n\n/* Link Button */\n\na.link-button {\n text-decoration: none;\n display:inline-block;\n padding: 4px 0;\n /*padding: 4px 12px;*/\n margin-bottom: 0;\n font-size: 14px;\n width: 100px;\n line-height: 15px;\n color: #333;\n text-align: center;\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\n vertical-align: middle;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\n background-repeat: repeat-x;\n border: 1px solid #ccc;\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\n border-bottom-color: #b3b3b3;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n}\n\na.link-button:active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n background-color:#e0e0e0;\n}\n\n.hide-toolbar {\n overflow: hidden;\n max-height: 0;\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 0;\n margin-bottom: 0;\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.show-toolbar {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n /*max-height: 1000px;\n overflow: hidden;*/\n}\n\n.visible {\n border-bottom: 1px solid black;\n}\n\n.info-filter input, .info-filter select {\n display: block;\n width: 250px;\n margin: 7px 0;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js!./style/panel.css": +/*!***************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/panel.css ***! + \***************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_lumino_default_theme_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../../node_modules/@lumino/default-theme/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css"); +// Imports -/** - * Module exports. - */ -module.exports = deprecate; -/** - * Mark that a method should not be used. - * Returns a modified function which warns once by default. - * - * If `localStorage.noDeprecation = true` is set, then it is a no-op. - * - * If `localStorage.throwDeprecation = true` is set, then deprecated functions - * will throw an Error when invoked. - * - * If `localStorage.traceDeprecation = true` is set, then deprecated functions - * will invoke `console.trace()` instead of `console.error()`. - * - * @param {Function} fn - the function to deprecate - * @param {String} msg - the string to print to the console when `fn` is invoked - * @returns {Function} a new "deprecated" version of `fn` - * @api public - */ +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_node_modules_lumino_default_theme_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); +// Module +___CSS_LOADER_EXPORT___.push([module.id, ` +.p-TabBar { + min-height: 24px; + max-height: 24px; +} -function deprecate (fn, msg) { - if (config('noDeprecation')) { - return fn; - } +.p-TabBar-content { + min-width: 0; + min-height: 0; + align-items: flex-end; + border-bottom: 1px solid #C0C0C0; +} - var warned = false; - function deprecated() { - if (!warned) { - if (config('throwDeprecation')) { - throw new Error(msg); - } else if (config('traceDeprecation')) { - console.trace(msg); - } else { - console.warn(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - return deprecated; +.p-TabBar-tab { + padding: 0px 10px; + background: #E5E5E5; + border: 1px solid #C0C0C0; + border-bottom: none; + font: 12px Helvetica, Arial, sans-serif; + flex: 0 1 180px; + min-height: 20px; + max-height: 20px; + min-width: 35px; + margin-left: -1px; + line-height: 20px; } -/** - * Checks `localStorage` for boolean values for the given `name`. - * - * @param {String} name - * @returns {Boolean} - * @api private - */ -function config (name) { - // accessing global.localStorage can trigger a DOMException in sandboxed iframes - try { - if (!__webpack_require__.g.localStorage) return false; - } catch (_) { - return false; - } - var val = __webpack_require__.g.localStorage[name]; - if (null == val) return false; - return String(val).toLowerCase() === 'true'; +.p-TabBar-tab.p-mod-current { + background: white; } -/***/ }), +.p-TabBar-tab:hover:not(.p-mod-current) { + background: #F0F0F0; +} -/***/ "../../node_modules/util/node_modules/inherits/inherits_browser.js": -/*!*************************************************************************!*\ - !*** ../../node_modules/util/node_modules/inherits/inherits_browser.js ***! - \*************************************************************************/ -/***/ ((module) => { -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } +.p-TabBar-tab:first-child { + margin-left: 0; } -/***/ }), +.p-TabBar-tab.p-mod-current { + min-height: 23px; + max-height: 23px; + transform: translateY(1px); +} -/***/ "../../node_modules/util/support/isBufferBrowser.js": -/*!**********************************************************!*\ - !*** ../../node_modules/util/support/isBufferBrowser.js ***! - \**********************************************************/ -/***/ ((module) => { -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; +.p-TabBar-tabIcon, +.p-TabBar-tabLabel, +.p-TabBar-tabCloseIcon { + display: inline-block; } -/***/ }), -/***/ "../../node_modules/util/util.js": -/*!***************************************!*\ - !*** ../../node_modules/util/util.js ***! - \***************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon { + margin-left: 4px; +} -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } +.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before { + content: '\\f00d'; + font-family: FontAwesome; +} - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; -}; +.p-TabBar-tab.p-mod-drag-image { + min-height: 23px; + max-height: 23px; + min-width: 125px; + border: none; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); + transform: translateX(-40%) translateY(-58%); +} -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(__webpack_require__.g.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } +.p-DockPanel-overlay { + background: rgba(255, 255, 255, 0.6); + border: 1px dashed black; + transition-property: top, left, right, bottom; + transition-duration: 150ms; + transition-timing-function: ease; +} - if (process.noDeprecation === true) { - return fn; - } +.content { + min-width: 50px; + min-height: 50px; + display: flex; + flex-direction: column; + padding: 8px; + border: 1px solid #C0C0C0; + border-top: none; + background: white; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); +} - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } +.content > div { + flex: 1 1 auto; + overflow: auto; +} - return deprecated; -}; +body { + display: flex; + flex-direction: column; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; + padding: 0; + overflow: hidden; +} -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; +#main { + flex: 1 1 auto; +} -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); - } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); +.side-info { + margin: 5px; + font-size: 14px; } -exports.inspect = inspect; +.side-info .main h1 { + margin: 0; +} -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] -}; +.side-info .main h3 { + margin: 0 0 8px 0; +} + +.side-info .attr { + display: block; + margin: 3px 0; +} + +.side-info .desc { + font-weight: bold; +} + +.side-info .fold { + margin-top: 15px; + font-size: 2em; +} + +.side-info .fold:hover { + cursor: pointer; +} + +.side-info .fold span { + padding-left: 7px; +} + +.side-info .show-all { + color: rgb(50, 38, 41); + float: right; + margin-right: 10px; +} + +.side-info ul.mod-list, +.side-info ul.env-list, +.side-info ul.fac-list { + padding: 0; + margin: 0; + list-style-type: none; +} + +.side-info ul.mod-list li, +.side-info ul.fac-list li { + border-left: 3px solid black; + margin: 6px 4px; + padding: 1px 3px; +} + +.side-info ul.env-list li { + margin: 3px; + font-size: 0.8em; +} + +.side-info ul.env-list li .key { + font-weight: bold; +} + +.side-info ul.mod-list li .version, +.side-info ul.fac-list li .mode, +.side-info ul.fac-list li .buffering { + float: right; + margin-left: 20px; +} + +.side-info .clear { + clear: both; +} + +.hash { + font-size: 12px; + color: #666; +} + +.dbefore { + color: red !important; +} + +.dafter { + color: green !important; +} + +.dbefore::before { + color: red !important; + content: ' - '; + font-family: "Courier New", Courier, monospace; +} + +.dafter::before { + color: green !important; + content: ' + '; + font-family: "Courier New", Courier, monospace; +} + +.libefore { + border-left: 3px solid red !important; + color: red !important; +} + +.liafter { + border-left: 3px solid green !important; + color: green !important; +} + +.connection-error:hover { + cursor: pointer; +} + +.error-text { + font-size: 15px; + margin-left: 3px; + vertical-align: middle; +}`, "",{"version":3,"sources":["webpack://./style/panel.css"],"names":[],"mappings":";AAIA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;;AAGA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,uCAAuC;EACvC,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;;AAGA;EACE,iBAAiB;AACnB;;;AAGA;EACE,mBAAmB;AACrB;;;AAGA;EACE,cAAc;AAChB;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;;AAGA;;;EAGE,qBAAqB;AACvB;;;AAGA;EACE,gBAAgB;AAClB;;;AAGA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;EAC1C,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,0CAA0C;AAC5C;;AAEA;EACE,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,SAAS;EACT,UAAU;EACV,gBAAgB;;AAElB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;AACpB;;AAEA;;;EAGE,UAAU;EACV,SAAS;EACT,qBAAqB;AACvB;;AAEA;;EAEE,4BAA4B;EAC5B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;EAGE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,WAAW;AACb;;AAEA;IACI,eAAe;IACf,WAAW;AACf;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,uBAAuB;EACvB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,qCAAqC;EACrC,qBAAqB;AACvB;;AAEA;EACE,uCAAuC;EACvC,uBAAuB;AACzB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,sBAAsB;AACxB","sourcesContent":["\n@import '~@lumino/default-theme/style/index.css';\n\n\n.p-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.p-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #C0C0C0;\n}\n\n\n.p-TabBar-tab {\n padding: 0px 10px;\n background: #E5E5E5;\n border: 1px solid #C0C0C0;\n border-bottom: none;\n font: 12px Helvetica, Arial, sans-serif;\n flex: 0 1 180px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n background: white;\n}\n\n\n.p-TabBar-tab:hover:not(.p-mod-current) {\n background: #F0F0F0;\n}\n\n\n.p-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n\n.p-TabBar-tabIcon,\n.p-TabBar-tabLabel,\n.p-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\n content: '\\f00d';\n font-family: FontAwesome;\n}\n\n\n.p-TabBar-tab.p-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n transform: translateX(-40%) translateY(-58%);\n}\n\n.p-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n\n.content {\n min-width: 50px;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n padding: 8px;\n border: 1px solid #C0C0C0;\n border-top: none;\n background: white;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.content > div {\n flex: 1 1 auto;\n overflow: auto;\n}\n\nbody {\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n}\n\n#main {\n flex: 1 1 auto;\n}\n\n\n.side-info {\n margin: 5px;\n font-size: 14px;\n}\n\n.side-info .main h1 {\n margin: 0;\n}\n\n.side-info .main h3 {\n margin: 0 0 8px 0;\n}\n\n.side-info .attr {\n display: block;\n margin: 3px 0;\n}\n\n.side-info .desc {\n font-weight: bold;\n}\n\n.side-info .fold {\n margin-top: 15px;\n font-size: 2em;\n}\n\n.side-info .fold:hover {\n cursor: pointer;\n}\n\n.side-info .fold span {\n padding-left: 7px;\n}\n\n.side-info .show-all {\n color: rgb(50, 38, 41);\n float: right;\n margin-right: 10px;\n}\n\n.side-info ul.mod-list,\n.side-info ul.env-list,\n.side-info ul.fac-list {\n padding: 0;\n margin: 0;\n list-style-type: none;\n}\n\n.side-info ul.mod-list li,\n.side-info ul.fac-list li {\n border-left: 3px solid black;\n margin: 6px 4px;\n padding: 1px 3px;\n}\n\n.side-info ul.env-list li {\n margin: 3px;\n font-size: 0.8em;\n}\n\n.side-info ul.env-list li .key {\n font-weight: bold;\n}\n\n.side-info ul.mod-list li .version,\n.side-info ul.fac-list li .mode,\n.side-info ul.fac-list li .buffering {\n float: right;\n margin-left: 20px;\n}\n\n.side-info .clear {\n clear: both;\n}\n\n.hash {\n font-size: 12px;\n color: #666;\n}\n\n.dbefore {\n color: red !important;\n}\n\n.dafter {\n color: green !important;\n}\n\n.dbefore::before {\n color: red !important;\n content: ' - ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.dafter::before {\n color: green !important;\n content: ' + ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.libefore {\n border-left: 3px solid red !important;\n color: red !important;\n}\n\n.liafter {\n border-left: 3px solid green !important;\n color: green !important;\n}\n\n.connection-error:hover {\n cursor: pointer;\n}\n\n.error-text {\n font-size: 15px;\n margin-left: 3px;\n vertical-align: middle;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' -}; +/***/ }), -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; +/***/ "./node_modules/css-loader/dist/cjs.js!./style/trial.css": +/*!***************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!./style/trial.css ***! + \***************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports + + +var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.trial-content, +.trial-content .sub-content, +.trial-content .sub-content > div { + overflow: hidden !important; } +.trial-content .graphselector .graph-attr:first-child label { + margin-right: 17px; +} -function stylizeNoColor(str, styleType) { - return str; +.trial-content .graphselector { + width: 100%; + padding-left: 8px; } +.trial-content .graphselector .use-cache { + margin-top: 10px; + margin-left: 0px; +} -function arrayToHash(array) { - var hash = {}; +.trial-content .graphselector a.link-button { + margin-top: 10px; + width: 273px; +} - array.forEach(function(val, idx) { - hash[val] = true; - }); +.trial-content .toggle-label { + margin-right: 5px; +} - return hash; +.graphselector > div:first-child { + margin-top: 8px; } +.graphselector > a:last-child { + margin-bottom: 8px; +}`, "",{"version":3,"sources":["webpack://./style/trial.css"],"names":[],"mappings":"AAAA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,YAAY;AAChB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,kBAAkB;AACtB","sourcesContent":[".trial-content,\n.trial-content .sub-content,\n.trial-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.trial-content .graphselector .graph-attr:first-child label {\n margin-right: 17px;\n}\n\n.trial-content .graphselector {\n width: 100%;\n padding-left: 8px;\n}\n\n.trial-content .graphselector .use-cache {\n margin-top: 10px;\n margin-left: 0px;\n}\n\n.trial-content .graphselector a.link-button {\n margin-top: 10px;\n width: 273px;\n}\n\n.trial-content .toggle-label {\n margin-right: 5px;\n}\n\n.graphselector > div:first-child {\n margin-top: 8px;\n}\n\n.graphselector > a:last-child {\n margin-bottom: 8px;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; - } - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } +/***/ }), - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); +/***/ "./node_modules/css-loader/dist/cjs.js!../trial/style/index.css": +/*!**********************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../trial/style/index.css ***! + \**********************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } - } +var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `.trial-toolbar { + margin: 5px; + float: left; + overflow: none; + width: 375px; + height: 30px; + z-index: 3; + position: absolute; +} - var base = '', array = false, braces = ['{', '}']; +.trial-toolbar input { + height: 30px; +} - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } +.trial-toolbar input[type=checkbox] { + display: none +} - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } +.trial-toolbar label, .trial-toolbar a { + margin-right: 8px; + margin-top: 8px; +} - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } +.trial-toolbar input[type=checkbox] + label { + display:inline-block; + color: black; + cursor: pointer; +} - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } +.trial-toolbar input[type=checkbox]:checked + label { + color: blue; +} - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } +.trial-toolbar a.toollink, +.trial-toolbar a.toollink:link, +.trial-toolbar a.toollink:visited { + color: black; +} - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } +.trial-toolbar a.toollink:active { + color: blue; +} +`, "",{"version":3,"sources":["webpack://./../trial/style/index.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,WAAW;AACb","sourcesContent":[".trial-toolbar {\n margin: 5px;\n float: left;\n overflow: none;\n width: 375px;\n height: 30px;\n z-index: 3;\n position: absolute;\n}\n\n.trial-toolbar input {\n height: 30px;\n}\n\n.trial-toolbar input[type=checkbox] {\n display: none\n}\n\n.trial-toolbar label, .trial-toolbar a {\n margin-right: 8px;\n margin-top: 8px;\n}\n\n.trial-toolbar input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.trial-toolbar input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.trial-toolbar a.toollink,\n.trial-toolbar a.toollink:link,\n.trial-toolbar a.toollink:visited {\n color: black;\n}\n\n.trial-toolbar a.toollink:active {\n color: blue;\n}\n"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - ctx.seen.push(value); +/***/ }), - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } +/***/ "./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css": +/*!***********************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css ***! + \***********************************************************************/ +/***/ ((module, __webpack_exports__, __webpack_require__) => { - ctx.seen.pop(); +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); +/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); +// Imports - return reduceToSingleString(output, base, braces); + +var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); +// Module +___CSS_LOADER_EXPORT___.push([module.id, `div.now-tooltip { + position: absolute; + left: 1px; + right: 1px; + max-height: 200px; + max-width: 400px; + overflow: auto; + padding: 5px; + padding-bottom: 10px; + font: 12px sans-serif; + background: #DDD; + border: 0px; + border-radius: 8px; + z-index: 2000; } +.now-tooltip.hidden { + display: none; +}`, "",{"version":3,"sources":["webpack://./../utils/style/shared.css"],"names":[],"mappings":"AAAA;IACI,kBAAkB;IAClB,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,aAAa;AACjB;;AAEA;IACI,aAAa;AACjB","sourcesContent":["div.now-tooltip {\n position: absolute;\n left: 1px;\n right: 1px;\n max-height: 200px;\n max-width: 400px;\n overflow: auto;\n padding: 5px;\n padding-bottom: 10px;\n font: 12px sans-serif;\n background: #DDD;\n border: 0px;\n border-radius: 8px;\n z-index: 2000;\n}\n\n.now-tooltip.hidden {\n display: none;\n}"],"sourceRoot":""}]); +// Exports +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} +/***/ }), -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} +/***/ "./node_modules/css-loader/dist/runtime/api.js": +/*!*****************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/api.js ***! + \*****************************************************/ +/***/ ((module) => { +"use strict"; -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +module.exports = function (cssWithMappingToString) { + var list = []; -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); + // return the list of modules as css string + list.toString = function toString() { + return this.map(function (item) { + var content = ""; + var needLayer = typeof item[5] !== "undefined"; + if (item[4]) { + content += "@supports (".concat(item[4], ") {"); + } + if (item[2]) { + content += "@media ".concat(item[2], " {"); + } + if (needLayer) { + content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); + } + content += cssWithMappingToString(item); + if (needLayer) { + content += "}"; + } + if (item[2]) { + content += "}"; + } + if (item[4]) { + content += "}"; + } + return content; + }).join(""); + }; + + // import a list of modules into the list + list.i = function i(modules, media, dedupe, supports, layer) { + if (typeof modules === "string") { + modules = [[null, modules, undefined]]; } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); + var alreadyImportedModules = {}; + if (dedupe) { + for (var k = 0; k < this.length; k++) { + var id = this[k][0]; + if (id != null) { + alreadyImportedModules[id] = true; + } + } } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); + for (var _k = 0; _k < modules.length; _k++) { + var item = [].concat(modules[_k]); + if (dedupe && alreadyImportedModules[item[0]]) { + continue; } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); + if (typeof layer !== "undefined") { + if (typeof item[5] === "undefined") { + item[5] = layer; } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); + item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); + item[5] = layer; } } - } else { - str = ctx.stylize('[Circular]', 'special'); + if (media) { + if (!item[2]) { + item[2] = media; + } else { + item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); + item[2] = media; + } + } + if (supports) { + if (!item[4]) { + item[4] = "".concat(supports); + } else { + item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); + item[4] = supports; + } + } + list.push(item); } + }; + return list; +}; + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/getUrl.js": +/*!********************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***! + \********************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports = function (url, options) { + if (!options) { + options = {}; } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } + if (!url) { + return url; } + url = String(url.__esModule ? url.default : url); - return name + ': ' + str; -} + // If url is already wrapped in quotes, remove them + if (/^['"].*['"]$/.test(url)) { + url = url.slice(1, -1); + } + if (options.hash) { + url += options.hash; + } + + // Should url be wrapped? + // See https://drafts.csswg.org/css-values-3/#urls + if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) { + return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\""); + } + return url; +}; + +/***/ }), + +/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js": +/*!************************************************************!*\ + !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***! + \************************************************************/ +/***/ ((module) => { + +"use strict"; + + +module.exports = function (item) { + var content = item[1]; + var cssMapping = item[3]; + if (!cssMapping) { + return content; + } + if (typeof btoa === "function") { + var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); + var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); + var sourceMapping = "/*# ".concat(data, " */"); + return [content].concat([sourceMapping]).join("\n"); + } + return [content].join("\n"); +}; + +/***/ }), + +/***/ "./style/bootstrap.min.css": +/*!*********************************!*\ + !*** ./style/bootstrap.min.css ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css */ "./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css"); + + + + + + + + + -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); +var options = {}; - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } +options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); +options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); +options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); +options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); +options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} +var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; +/***/ }), -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; +/***/ "./style/index.css": +/*!*************************!*\ + !*** ./style/index.css ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); +/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./index.css */ "./node_modules/css-loader/dist/cjs.js!./style/index.css"); -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; + + + + + + + + + -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; +var options = {}; -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; +options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); +options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); +options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); +options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); +options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; +var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; -exports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ "../../node_modules/util/support/isBufferBrowser.js"); + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); -function objectToString(o) { - return Object.prototype.toString.call(o); -} +/***/ }), -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} +/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": +/*!****************************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! + \****************************************************************************/ +/***/ ((module) => { +"use strict"; -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); +var stylesInDOM = []; +function getIndexByIdentifier(identifier) { + var result = -1; + for (var i = 0; i < stylesInDOM.length; i++) { + if (stylesInDOM[i].identifier === identifier) { + result = i; + break; + } + } + return result; +} +function modulesToDom(list, options) { + var idCountMap = {}; + var identifiers = []; + for (var i = 0; i < list.length; i++) { + var item = list[i]; + var id = options.base ? item[0] + options.base : item[0]; + var count = idCountMap[id] || 0; + var identifier = "".concat(id, " ").concat(count); + idCountMap[id] = count + 1; + var indexByIdentifier = getIndexByIdentifier(identifier); + var obj = { + css: item[1], + media: item[2], + sourceMap: item[3], + supports: item[4], + layer: item[5] + }; + if (indexByIdentifier !== -1) { + stylesInDOM[indexByIdentifier].references++; + stylesInDOM[indexByIdentifier].updater(obj); + } else { + var updater = addElementStyle(obj, options); + options.byIndex = i; + stylesInDOM.splice(i, 0, { + identifier: identifier, + updater: updater, + references: 1 + }); + } + identifiers.push(identifier); + } + return identifiers; +} +function addElementStyle(obj, options) { + var api = options.domAPI(options); + api.update(obj); + var updater = function updater(newObj) { + if (newObj) { + if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) { + return; + } + api.update(obj = newObj); + } else { + api.remove(); + } + }; + return updater; } +module.exports = function (list, options) { + options = options || {}; + list = list || []; + var lastIdentifiers = modulesToDom(list, options); + return function update(newList) { + newList = newList || []; + for (var i = 0; i < lastIdentifiers.length; i++) { + var identifier = lastIdentifiers[i]; + var index = getIndexByIdentifier(identifier); + stylesInDOM[index].references--; + } + var newLastIdentifiers = modulesToDom(newList, options); + for (var _i = 0; _i < lastIdentifiers.length; _i++) { + var _identifier = lastIdentifiers[_i]; + var _index = getIndexByIdentifier(_identifier); + if (stylesInDOM[_index].references === 0) { + stylesInDOM[_index].updater(); + stylesInDOM.splice(_index, 1); + } + } + lastIdentifiers = newLastIdentifiers; + }; +}; +/***/ }), -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; +/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js": +/*!********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***! + \********************************************************************/ +/***/ ((module) => { +"use strict"; -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = __webpack_require__(/*! inherits */ "../../node_modules/util/node_modules/inherits/inherits_browser.js"); -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; +var memo = {}; - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; +/* istanbul ignore next */ +function getTarget(target) { + if (typeof memo[target] === "undefined") { + var styleTarget = document.querySelector(target); -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); + // Special case to return head of iframe instead of iframe itself + if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { + try { + // This will throw an exception if access to iframe is blocked + // due to cross-origin restrictions + styleTarget = styleTarget.contentDocument.head; + } catch (e) { + // istanbul ignore next + styleTarget = null; + } + } + memo[target] = styleTarget; + } + return memo[target]; } +/* istanbul ignore next */ +function insertBySelector(insert, style) { + var target = getTarget(insert); + if (!target) { + throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); + } + target.appendChild(style); +} +module.exports = insertBySelector; /***/ }), -/***/ "../../node_modules/vm-browserify/index.js": -/*!*************************************************!*\ - !*** ../../node_modules/vm-browserify/index.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, exports) => { +/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js": +/*!**********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***! + \**********************************************************************/ +/***/ ((module) => { -var indexOf = function (xs, item) { - if (xs.indexOf) return xs.indexOf(item); - else for (var i = 0; i < xs.length; i++) { - if (xs[i] === item) return i; - } - return -1; -}; -var Object_keys = function (obj) { - if (Object.keys) return Object.keys(obj) - else { - var res = []; - for (var key in obj) res.push(key) - return res; - } -}; +"use strict"; -var forEach = function (xs, fn) { - if (xs.forEach) return xs.forEach(fn) - else for (var i = 0; i < xs.length; i++) { - fn(xs[i], i, xs); - } -}; -var defineProp = (function() { - try { - Object.defineProperty({}, '_', {}); - return function(obj, name, value) { - Object.defineProperty(obj, name, { - writable: true, - enumerable: false, - configurable: true, - value: value - }) - }; - } catch(e) { - return function(obj, name, value) { - obj[name] = value; - }; - } -}()); +/* istanbul ignore next */ +function insertStyleElement(options) { + var element = document.createElement("style"); + options.setAttributes(element, options.attributes); + options.insert(element, options.options); + return element; +} +module.exports = insertStyleElement; -var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', -'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', -'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', -'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', -'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; +/***/ }), -function Context() {} -Context.prototype = {}; +/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***! + \**********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -var Script = exports.Script = function NodeScript (code) { - if (!(this instanceof Script)) return new Script(code); - this.code = code; -}; +"use strict"; -Script.prototype.runInContext = function (context) { - if (!(context instanceof Context)) { - throw new TypeError("needs a 'context' argument."); - } - - var iframe = document.createElement('iframe'); - if (!iframe.style) iframe.style = {}; - iframe.style.display = 'none'; - - document.body.appendChild(iframe); - - var win = iframe.contentWindow; - var wEval = win.eval, wExecScript = win.execScript; - if (!wEval && wExecScript) { - // win.eval() magically appears when this is called in IE: - wExecScript.call(win, 'null'); - wEval = win.eval; - } - - forEach(Object_keys(context), function (key) { - win[key] = context[key]; - }); - forEach(globals, function (key) { - if (context[key]) { - win[key] = context[key]; - } - }); - - var winKeys = Object_keys(win); +/* istanbul ignore next */ +function setAttributesWithoutAttributes(styleElement) { + var nonce = true ? __webpack_require__.nc : 0; + if (nonce) { + styleElement.setAttribute("nonce", nonce); + } +} +module.exports = setAttributesWithoutAttributes; - var res = wEval.call(win, this.code); - - forEach(Object_keys(win), function (key) { - // Avoid copying circular objects like `top` and `window` by only - // updating existing context properties or new properties in the `win` - // that was only introduced after the eval. - if (key in context || indexOf(winKeys, key) === -1) { - context[key] = win[key]; - } - }); +/***/ }), - forEach(globals, function (key) { - if (!(key in context)) { - defineProp(context, key, win[key]); - } - }); - - document.body.removeChild(iframe); - - return res; -}; +/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js": +/*!***************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***! + \***************************************************************/ +/***/ ((module) => { -Script.prototype.runInThisContext = function () { - return eval(this.code); // maybe... -}; +"use strict"; -Script.prototype.runInNewContext = function (context) { - var ctx = Script.createContext(context); - var res = this.runInContext(ctx); - if (context) { - forEach(Object_keys(ctx), function (key) { - context[key] = ctx[key]; - }); - } +/* istanbul ignore next */ +function apply(styleElement, options, obj) { + var css = ""; + if (obj.supports) { + css += "@supports (".concat(obj.supports, ") {"); + } + if (obj.media) { + css += "@media ".concat(obj.media, " {"); + } + var needLayer = typeof obj.layer !== "undefined"; + if (needLayer) { + css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {"); + } + css += obj.css; + if (needLayer) { + css += "}"; + } + if (obj.media) { + css += "}"; + } + if (obj.supports) { + css += "}"; + } + var sourceMap = obj.sourceMap; + if (sourceMap && typeof btoa !== "undefined") { + css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); + } - return res; -}; + // For old IE + /* istanbul ignore if */ + options.styleTagTransform(css, styleElement, options.options); +} +function removeStyleElement(styleElement) { + // istanbul ignore if + if (styleElement.parentNode === null) { + return false; + } + styleElement.parentNode.removeChild(styleElement); +} -forEach(Object_keys(Script.prototype), function (name) { - exports[name] = Script[name] = function (code) { - var s = Script(code); - return s[name].apply(s, [].slice.call(arguments, 1)); +/* istanbul ignore next */ +function domAPI(options) { + if (typeof document === "undefined") { + return { + update: function update() {}, + remove: function remove() {} }; -}); + } + var styleElement = options.insertStyleElement(options); + return { + update: function update(obj) { + apply(styleElement, options, obj); + }, + remove: function remove() { + removeStyleElement(styleElement); + } + }; +} +module.exports = domAPI; -exports.isContext = function (context) { - return context instanceof Context; -}; +/***/ }), -exports.createScript = function (code) { - return exports.Script(code); -}; +/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js": +/*!*********************************************************************!*\ + !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***! + \*********************************************************************/ +/***/ ((module) => { + +"use strict"; -exports.createContext = Script.createContext = function (context) { - var copy = new Context(); - if(typeof context === 'object') { - forEach(Object_keys(context), function (key) { - copy[key] = context[key]; - }); - } - return copy; -}; +/* istanbul ignore next */ +function styleTagTransform(css, styleElement) { + if (styleElement.styleSheet) { + styleElement.styleSheet.cssText = css; + } else { + while (styleElement.firstChild) { + styleElement.removeChild(styleElement.firstChild); + } + styleElement.appendChild(document.createTextNode(css)); + } +} +module.exports = styleTagTransform; /***/ }), -/***/ "../history/lib/config.js": -/*!********************************!*\ - !*** ../history/lib/config.js ***! - \********************************/ +/***/ "../trial/lib/config.js": +/*!******************************!*\ + !*** ../trial/lib/config.js ***! + \******************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -116887,49 +95728,54 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); /***/ }), -/***/ "../history/lib/graph.js": -/*!*******************************!*\ - !*** ../history/lib/graph.js ***! - \*******************************/ +/***/ "../trial/lib/graph.js": +/*!*****************************!*\ + !*** ../trial/lib/graph.js ***! + \*****************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HistoryGraph = void 0; +exports.TrialGraph = void 0; __webpack_require__(/*! d3-transition */ "../../node_modules/d3-transition/src/index.js"); const d3_color_1 = __webpack_require__(/*! d3-color */ "../../node_modules/d3-color/src/index.js"); -const d3_scale_1 = __webpack_require__(/*! d3-scale */ "../../node_modules/d3-scale/src/index.js"); -const d3_scale_chromatic_1 = __webpack_require__(/*! d3-scale-chromatic */ "../../node_modules/d3-scale-chromatic/src/index.js"); +const d3_hierarchy_1 = __webpack_require__(/*! d3-hierarchy */ "../../node_modules/d3-hierarchy/src/index.js"); const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); const d3_zoom_1 = __webpack_require__(/*! d3-zoom */ "../../node_modules/d3-zoom/src/index.js"); const fs = __webpack_require__(/*! file-saver */ "../../node_modules/file-saver/dist/FileSaver.min.js"); -class HistoryGraph { - constructor(graphId, div, config = {}) { - this.nodes = []; - this.versionNodes = []; - this.edges = []; - this.maxX = 0; - this.maxY = 0; - this.maxId = 0; +const utils_1 = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); +class TrialGraph { + constructor(graphId, div, config = {}, showDiffFunction, nowVisPanel) { + if (showDiffFunction && nowVisPanel) { + this.showDiffFunction = showDiffFunction; + this.nowVisPanel = nowVisPanel; + } this.i = 0; - var defaultConfig = { - customSelectNode: (g, d) => false, - customCtrlClick: (g, d) => false, + let defaultConfig = { + customSize: function (g) { + return [ + g.config.width, + g.config.height, + ]; + }, + customMouseOver: (g, d) => false, + customMouseOut: (g, d) => false, customForm: (g, form) => null, - customSize: (g) => [g.config.width, g.config.height], - customWindowTabCommand: (trialIdSimplified, trialId, command) => false, - hintMessage: "Ctrl+Shift click or ⌘+Shift click to diff trials", - width: 200, - height: 100, - radius: 20, - moveX: 20, - moveY: 25, - moveY2: 10, - spacing: 17, - margin: 50, - fontSize: 10, + customLoadTooltip: (g, div, text, trialid, aid) => null, + duration: 750, + top: 50, + right: 30, + bottom: 80, + left: 30, + width: 900, + height: 500, useTooltip: false, + fontSize: 10, + labelFontSize: 10, + nodeSizeX: 47, + nodeSizeY: 100, + queryTooltip: false }; this.config = Object.assign({}, defaultConfig, config); this.graphId = graphId; @@ -116944,69 +95790,94 @@ class HistoryGraph { return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000; }); this.div = (0, d3_selection_1.select)(div); - let form = (0, d3_selection_1.select)(div) + this.form = this.div .append("form") - .classed("history-toolbar", true); + .classed("trial-toolbar", true); this.svg = (0, d3_selection_1.select)(div) .append("div") .append("svg") .attr("width", this.config.width) .attr("height", this.config.height) - .call(this.zoom) - .on("mouseup", () => this.svgMouseUp()); - this.state = { - selectedNode: null, - mouseDownNode: null, - justScale: false - }; + .call(this.zoom); + this.createMarker('end', 'enormal', 'black'); + this.createMarker('endbefore', 'ebefore', 'red'); + this.createMarker('endafter', 'eafter', 'green'); + this.g = this.svg.append("g") + .attr("id", this._graphId()) + .attr("transform", "translate(0,0)") + .classed('TrialGraph', true); + this.tree = (0, d3_hierarchy_1.tree)() + .nodeSize([ + this.config.nodeSizeX, + this.config.nodeSizeY + ]); // Tooltip this.tooltipDiv = (0, d3_selection_1.select)("body").append("div") - .classed("now-tooltip now-history-tooltip", true) + .attr("class", "now-tooltip now-trial-tooltip") .style("opacity", 0) - .style("max-width", "250px") .on("mouseout", () => { this.closeTooltip(); }); - this.createToolbar(form); - this.createMarker('end-arrow', 'endarrow', '#000'); - this.g = this.svg.append("g") - .attr("id", this._graphId()) - .attr("transform", "translate(0,0)") - .classed('HistoryGraph', true); + // Zoom + this.svg + .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top)); + this.activationStorage = {}; + } + init(data, t1, t2) { + this.t1 = t1; + this.t2 = t2; + // **Toolbar** + this.createToolbar(this.form); + // **Graph** + this.minDuration = data.min_duration; + this.maxDuration = data.max_duration; + this.totalDuration = {}; + this.totalDuration[t1] = this.maxDuration[t1] - this.minDuration[t1]; + this.totalDuration[t2] = this.maxDuration[t2] - this.minDuration[t2]; + this.maxTotalDuration = Math.max(this.totalDuration[t1], this.totalDuration[t2]); + this.colors = data.colors; + if (!data.root) + return; + this.root = (0, d3_hierarchy_1.hierarchy)(data.root, function (d) { return d.children; }); + this.root.x0 = 0; + this.root.y0 = (this.config.width) / 2; + this.alledges = data.edges; + this.update(this.root); } createToolbar(form) { - let formdiv = form.append("div") - .classed("buttons", true); - this.config.customForm(this, formdiv); + let self = this; + form = form.append("div") + .classed("buttons buttonsGraph", true); + this.config.customForm(this, form); // Reset zoom - formdiv.append("a") + form.append("a") .classed("toollink", true) - .attr("id", "history-" + this.graphId + "-history-zoom") + .attr("id", "trial-" + this.graphId + "-restore-zoom") .attr("href", "#") .attr("title", "Restore zoom") .on("click", () => this.restorePosition()) .append("i") .classed("fa fa-eye", true); // Toggle Tooltips - let tooltipsToggle = formdiv.append("input") - .attr("id", "history-" + this.graphId + "-toolbar-tooltips") + let tooltipsToggle = form.append("input") + .attr("id", "trial-" + this.graphId + "-toolbar-tooltips") .attr("type", "checkbox") - .attr("name", "history-toolbar-tooltips") + .attr("name", "trial-toolbar-tooltips") .attr("value", "show") .property("checked", this.config.useTooltip) .on("change", () => { this.closeTooltip(); this.config.useTooltip = tooltipsToggle.property("checked"); }); - formdiv.append("label") - .attr("for", "history-" + this.graphId + "-toolbar-tooltips") + form.append("label") + .attr("for", "trial-" + this.graphId + "-toolbar-tooltips") .attr("title", "Show tooltips on mouse hover") .append("i") .classed("fa fa-comment", true); // Download SVG - formdiv.append("a") + form.append("a") .classed("toollink", true) - .attr("id", "history-" + this.graphId + "-download") + .attr("id", "trial-" + this.graphId + "-download") .attr("href", "#") .attr("title", "Download graph SVG") .on("click", () => { @@ -117015,22 +95886,23 @@ class HistoryGraph { .append("i") .classed("fa fa-download", true); // Set Font Size - let fontToggle = formdiv.append("input") - .attr("id", "history-" + this.graphId + "-toolbar-fonts") + let fontToggle = form.append("input") + .attr("id", "trial-" + this.graphId + "-toolbar-fonts") .attr("type", "checkbox") - .attr("name", "history-toolbar-fonts") + .attr("name", "trial-toolbar-fonts") .attr("value", "show") .property("checked", false) .on("change", () => { let display = fontToggle.property("checked") ? "inline-block" : "none"; fontSize.style("display", display); + labelFontSize.style("display", display); }); - formdiv.append("label") - .attr("for", "history-" + this.graphId + "-toolbar-fonts") + form.append("label") + .attr("for", "trial-" + this.graphId + "-toolbar-fonts") .attr("title", "Set font size") .append("i") .classed("fa fa-font", true); - let fontSize = formdiv.append("input") + let fontSize = form.append("input") .attr("type", "number") .attr("value", this.config.fontSize) .style("width", "50px") @@ -117038,114 +95910,91 @@ class HistoryGraph { .attr("title", "Node font size") .on("change", () => { this.config.fontSize = fontSize.property("value"); - this.svg.selectAll("text.trial-id") - .attr("font-size", this.config.fontSize); + this.svg.selectAll(".node text").attr("font-size", this.config.fontSize); + }); + let labelFontSize = form.append("input") + .attr("type", "number") + .attr("value", this.config.labelFontSize) + .style("width", "50px") + .style("display", "none") + .attr("title", "Arrow font size") + .on("change", () => { + this.config.labelFontSize = labelFontSize.property("value"); + this.svg.selectAll("text.label_text").attr("font-size", this.config.labelFontSize); + }); + // Set distances + let setDistances = function () { + self.config.nodeSizeX = distanceX.property("value"); + self.config.nodeSizeY = distanceY.property("value"); + self.wrapText(); + self.tree + .nodeSize([ + self.config.nodeSizeX, + self.config.nodeSizeY + ]); + self.update(self.root); + }; + // Set Distance X + let distanceXToggle = form.append("input") + .attr("id", "trial-" + this.graphId + "-toolbar-distance-x") + .attr("type", "checkbox") + .attr("name", "trial-toolbar-distance-x") + .attr("value", "show") + .property("checked", false) + .on("change", () => { + let display = distanceXToggle.property("checked") ? "inline-block" : "none"; + distanceX.style("display", display); + }); + form.append("label") + .attr("for", "trial-" + this.graphId + "-toolbar-distance-x") + .attr("title", "Set horizontal distance") + .append("i") + .classed("fa fa-arrows-h", true); + let distanceX = form.append("input") + .attr("type", "number") + .attr("value", this.config.nodeSizeX) + .style("width", "65px") + .style("display", "none") + .attr("title", "Node horizontal distance") + .on("change", setDistances); + // Set Distance Y + let distanceYToggle = form.append("input") + .attr("id", "trial-" + this.graphId + "-toolbar-distance-y") + .attr("type", "checkbox") + .attr("name", "trial-toolbar-distance-y") + .attr("value", "show") + .property("checked", false) + .on("change", () => { + let display = distanceYToggle.property("checked") ? "inline-block" : "none"; + distanceY.style("display", display); }); + form.append("label") + .attr("for", "trial-" + this.graphId + "-toolbar-distance-y") + .attr("title", "Set vertical distance") + .append("i") + .classed("fa fa-arrows-v", true); + let distanceY = form.append("input") + .attr("type", "number") + .attr("value", this.config.nodeSizeY) + .style("width", "65px") + .style("display", "none") + .attr("title", "Node vertical distance") + .on("change", setDistances); // Submit - formdiv.append("input") + form.append("input") .attr("type", "submit") .attr("name", "prevent-enter") .attr("onclick", "return false;") .style("display", "none"); - formdiv.append("div"); - formdiv.append("div") - .text(this.config.hintMessage) - .style('font-family', 'sans-serif') - .style('font-size', '12px') - .style('pointer-events', 'none'); } - load(data) { - let nodes = [], otherNodes = [], edges = [], spacing = this.config.spacing, margin = this.config.margin; - let spacing2 = 2 * spacing, spacing4 = 4 * spacing, start = margin, max = 0, id = 0, last = data.nodes.length - 1, tid = 0, useVersion = false; - let levels = []; - for (var i = 0; i <= last; i++) { - let node = data.nodes[i]; - var previous = levels[node.level]; - if (previous == undefined) { - previous = -1; - } - var trials = node.trials; - if (trials == undefined) { - trials = []; - } - levels[node.level] = Math.max(previous, trials.length); - } - let levelsy = []; - var current = margin; - for (var i = 0; i <= levels.length; i++) { - levelsy[i] = current; - current += spacing2 + levels[i] * spacing2; - } - for (var i = 0; i <= last; i++) { - let node = data.nodes[i]; - let x = start + spacing4 * id; - let y = levelsy[node.level]; - var new_node = { - id: id, - display: node.display, - x: x, - y: y, - title: node.id.toString(), - info: node, - radius: this.config.radius, - gradient: false, - status: node.status - }; - nodes.push(new_node); - if (typeof (node.trials) != "undefined") { - useVersion = true; - for (var j = 0; j < node.trials.length; j++) { - let trialNode = node.trials[j]; - let ny = y + (j + 1) * spacing2 + spacing; - otherNodes.push({ - id: tid, - display: trialNode.display, - x: x + this.config.radius / 2, - y: ny, - title: trialNode.id.toString(), - info: trialNode, - tooltip: trialNode.tooltip, - radius: this.config.radius / 2, - gradient: true, - status: trialNode.status - }); - tid += 1; - max = Math.max(max, y); - } - } - else { - new_node.tooltip = node.tooltip; - } - max = Math.max(max, y); - this.maxX = x; - id += 1; - } - max += spacing2; - this.maxY = max; - this.maxId = Math.max(tid, id); - for (var i = 0; i < data.edges.length; i++) { - let edge = Object.assign({}, data.edges[i]); - edge.id = edge.source + "-" + edge.target; - edge.source = nodes[edge.source]; - edge.target = nodes[edge.target]; - if (edge.source != edge.target) { - edges.push(edge); - } - } - if (useVersion) { - this.nodes = otherNodes; - this.versionNodes = nodes; - } - else { - this.nodes = nodes; - this.versionNodes = []; - } - this.edges = edges; + load(data, t1, t2) { + this.init(data, t1, t2); this.updateWindow(); - this.restorePosition(); - this.update(); - this.menuOnRightClick(); - return nodes; + } + restorePosition() { + this.wrapText(); + this.svg + .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top)); } updateWindow() { let size = this.config.customSize(this); @@ -117155,79 +96004,162 @@ class HistoryGraph { .attr("width", size[0]) .attr("height", size[1]); } - update() { - var nodes = this.g.selectAll('g.node') - .data(this.nodes, (d) => d.id); - var edges = this.g.selectAll('g.link') - .data(this.edges, (d) => d.id); - var version = this.g.selectAll('g.version') - .data(this.versionNodes, (d) => d.id); - this.updateNodes(nodes); - this.updateVersionNodes(version); - this.updateLinks(edges); + update(source) { + let treeData = this.tree(this.root); + this.nodes = treeData.descendants(); + var node = this.g.selectAll('g.node') + .data(this.nodes, (d) => { return d.id || (d.id = ++this.i); }); + let validNodes = {}; + this.nodes.forEach((node) => { + validNodes[node.data.index] = node; + }); + var edges = this.alledges.filter((edge) => { + let source = validNodes[edge.source]; + let target = validNodes[edge.target]; + if (source == undefined || target == undefined) { + return false; + } + return true; + }).map((edge) => { + let source = validNodes[edge.source]; + let target = validNodes[edge.target]; + var copy = Object.assign({}, edge); + copy.id = edge.source + "-" + edge.target; + copy.source = source; + copy.target = target; + return copy; + }); + this.updateNodes(source, node); + this.updateLinks(source, edges); + this.updateLinkLabels(edges); + // Store old positions for transition + this.nodes.forEach(function (d, i) { + d.x0 = d.x; + d.y0 = d.y; + }); + this.wrapText(); } - restorePosition() { - let scale = this.config.height / this.maxY; - if (scale <= 1.0) { - this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity - .translate(this.config.width - - this.maxX * scale - - this.config.margin, 0) - .scale(scale)); + download(name) { + var isFileSaverSupported = false; + try { + isFileSaverSupported = !!new Blob(); } - else { - this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity - .scale(1) - .translate(this.config.width - - this.maxX - - this.config.margin, 0)); + catch (e) { + alert("blob not supported"); + } + name = (name === undefined) ? "trial.svg" : name; + let gnode = this.g.node(); + var bbox = gnode.getBBox(); + var width = this.svg.attr("width"), height = this.svg.attr("height"); + this.g.attr("transform", "translate(" + (-bbox.x + 5) + ", " + (-bbox.y + 5) + ")"); + let svgNode = this.svg + .attr("title", "Trial") + .attr("version", 1.1) + .attr("width", bbox.width + 10) + .attr("height", bbox.height + 10) + .attr("xmlns", "http://www.w3.org/2000/svg") + .node(); + var html = svgNode.parentNode.innerHTML; + html = ' rect') - .attr('stroke', 'rgb(200, 238, 241)') - .classed('selected', true); + wrapText() { + this.svg.selectAll(".node text:not(.nowrap)") + .call(utils_1.wrap, this.config.nodeSizeX); } - selectTrial(trialId) { - for (var node of this.nodes) { - if (node.title == trialId) { - this.selectNode(node); - return; + calculateColor(d, trial_id) { + var proportion = Math.round(255 * (1.0 - (d.duration[trial_id] / this.maxTotalDuration))); + //Math.round(510 * (node.duration - self.min_duration[node.trial_id]) / self.total_duration[node.trial_id]); + return (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString(); + } + getFunctionDiff(activations, trial_ids) { + let showModal = (activations[trial_ids[0]].length > 1 || activations[trial_ids[1]].length > 1); + let modal; + let modalBody; + let button; + if (showModal) { + modal = (0, d3_selection_1.select)(document.getElementById("main")) + .append("div").classed("modal fade show", true) + .attr("id", "functionDiffModal") + .attr("tabindex", "-1") + .attr("role", "dialog") + .attr("aria-labelledby", "functionDiffModalLabel") + .style("display", "none") + .attr("aria-hidden", "false") + .style("display", "block"); + let modalDialog = modal.append("div").classed("modal-dialog", true).attr("role", "document"); + let modalContent = modalDialog.append("div").classed("modal-content", true); + let modalHeader = modalContent.append("div").classed("modal-header", true); + modalHeader.append("h5").classed("modal-title", true).attr("id", "functionDiffModalLabel").text("Select a function activation: "); + modalHeader.append("button").classed("close", true).attr("data-dismiss", "modal").attr("aria-label", "Close") + .append("span").attr("aria-hidden", "true").html("×").on("click", () => modal.remove()); + modalBody = modalContent.append("div").classed("modal-body", true); + modalBody.append("p").text("This function was called multipled times. Select the activations you want to see their diff").style("font-weight", "bold"); + button = modalContent.append("div").classed("modal-footer", true).append("button").classed("btn btn-primary", true).text("Confirm"); + } + let compareFunctionCallsUrl = "commands/diff"; + let windowLabel = "Diff"; + for (let i = 0; i < trial_ids.length; i++) { + let trial = trial_ids[i]; + if (showModal) { + let trialNumber = i == 0 ? "first" : "second"; + modalBody.append("span").text("Select the " + trialNumber + " trial activation: "); + let select = modalBody.append("select").classed("form-select", true).attr("arial-label", "functionTrial" + trial).attr("id", "functionTrial" + trial); + for (let activation in activations[trial]) { + fetch("/diff/getFunctionActivationArguments/" + trial + "/" + activations[trial][activation], { + method: 'GET', // *GET, POST, PUT, DELETE, etc. + headers: { + 'Content-Type': 'application/json' + }, + }).then((response) => { + response.json().then((json) => { + select.append("option").attr("value", activations[trial][activation]).text(activations[trial][activation] + " params: " + json.function_params.toString()); + }); + }); + } + modalBody.append("br"); + } + else { + if (compareFunctionCallsUrl.length > 0) + compareFunctionCallsUrl += "/"; + compareFunctionCallsUrl += trial + "/"; + compareFunctionCallsUrl += activations[trial]; + windowLabel += " trial " + trial + " activation_id " + activations[trial]; } } - } - download(name) { - var isFileSaverSupported = false; - try { - isFileSaverSupported = !!new Blob(); + if (showModal) { + button === null || button === void 0 ? void 0 : button.on("click", () => { + let firstTrialActivation = document.getElementById("functionTrial" + trial_ids[0]).selectedOptions[0].value; + let secondTrialActivation = document.getElementById("functionTrial" + trial_ids[1]).selectedOptions[0].value; + compareFunctionCallsUrl += "/" + trial_ids[0] + "/" + firstTrialActivation + "/" + trial_ids[1] + "/" + secondTrialActivation; + windowLabel += " trial " + trial_ids[0] + " activation_id " + firstTrialActivation + " trial " + trial_ids[1] + " activation_id " + secondTrialActivation; + makeRequest(this.showDiffFunction, this.nowVisPanel); + modal.remove(); + }); } - catch (e) { - alert("blob not supported"); + else { + makeRequest(this.showDiffFunction, this.nowVisPanel); } - name = (name === undefined) ? "history.svg" : name; - let gnode = this.g.node(); - var bbox = gnode.getBBox(); - var width = this.svg.attr("width"), height = this.svg.attr("height"); - this.g.attr("transform", "translate(" + (-bbox.x + 5) + ", " + (-bbox.y + 5) + ")"); - let svgNode = this.svg - .attr("title", "Trial") - .attr("version", 1.1) - .attr("width", bbox.width + 10) - .attr("height", bbox.height + 10) - .attr("xmlns", "http://www.w3.org/2000/svg") - .node(); - var html = svgNode.parentNode.innerHTML; - html = ' { + response.json().then((json) => { + if (showDiffFunction) + showDiffFunction(json, windowLabel, nowVisPanel); + }); + }); } } closeTooltip() { @@ -117236,275 +96168,473 @@ class HistoryGraph { .style("opacity", 0); this.tooltipDiv.classed("hidden", true); } - showTooltip(event, d) { - if (typeof (d.tooltip) == "undefined") { - return; - } + showTooltip(event, d, trial_id) { + var self = this; this.tooltipDiv.classed("hidden", false); this.tooltipDiv.transition() .duration(200) .style("opacity", 0.9); - this.tooltipDiv.html(d.tooltip) - .style("left", (event.pageX - 3) + "px") - .style("top", (event.pageY - 28) + "px"); + if (this.config.queryTooltip) { + var string = d.tooltip[trial_id]; + var regexp = (/T(.*) - (\d*)
          Line \d*?
          /g); + var match = regexp.exec(string); + this.tooltipDiv.html("") + .style("left", (event.pageX - 3) + "px") + .style("top", (event.pageY - 28) + "px"); + while (match != null) { + var div = document.createElement("div"); + //var div2 = document.createElement("div"); + this.tooltipDiv.append(() => div); + //this.tooltipDiv.append(() => div2); + var aid = match[2]; + if (aid in self.activationStorage) { + this.updateTooltipDiv(aid, div); + } + else { + self.config.customLoadTooltip(self, div, match[0], match[1], match[2]); + } + match = regexp.exec(string); + } + } + else { + this.tooltipDiv.html(d.tooltip[trial_id]) + .style("left", (event.pageX - 3) + "px") + .style("top", (event.pageY - 28) + "px"); + } + } + updateTooltipDiv(activationId, div) { + var data = this.activationStorage[activationId]; + var title = data.id + " - " + data.name; + if (data.hash != "") { + title = '' + title + ""; + } + var result = [ + ' ' + title + '', + ' Line: ' + data.line + "", + ' Start: ' + data.start + "", + ' Finish: ' + data.finish + "", + ' Duration: ' + data.duration + "ns", + ' Return: ' + data.return_value + "", + ]; + // ToDo: parameters and globals + div.outerHTML = result.join("
          ") + "

          "; } createMarker(name, cls, fill) { this.svg.append("svg:defs").selectAll("marker") .data([name]) .enter().append("svg:marker") - .attr("id", String) + .attr("id", this.graphId + "-" + name) .attr("viewBox", "0 -5 10 10") - .attr("refX", 6) + .attr("refX", 10) .attr("refY", 0) - .attr("markerWidth", 3) - .attr("markerHeight", 3) + .attr("markerWidth", 6) + .attr("markerHeight", 6) .attr("orient", "auto") .append("svg:path") .classed(cls, true) .attr("fill", fill) .attr("d", "M0,-5L10,0L0,5"); } - unselectNode() { - this.g.selectAll('g.node').filter((cd) => { - if (this.state.selectedNode == null) { - return false; - } - return cd.id === this.state.selectedNode.id; - }).select('rect') - .classed('selected', false) - .attr("stroke", "#000"); - this.state.selectedNode = null; - } - nodeMouseDown(event, d3node, d) { - event.stopPropagation(); - this.state.mouseDownNode = d; - this.closeTooltip(); - } - nodeMouseUp(event, d3node, d) { - event.stopPropagation(); - if (!this.state.mouseDownNode) { - return; - } - if (this.state.justScale) { - this.state.justScale = false; + defaultNodeStroke(d) { + let color = this.colors[d.data.trial_ids[0]]; + if (d.data.trial_ids.length > 1 || color == 0) { + return "#000"; } - else { - if (event.ctrlKey || event.shiftKey || event.altKey) { - this.config.customCtrlClick(this, d); - return; - } - if (this.state.selectedNode) { - this.unselectNode(); - } - d3node - .attr('stroke', 'rgb(200, 238, 241)') - .classed('selected', true); - this.state.selectedNode = d; - this.config.customSelectNode(this, d); + if (color == 1) { + return "red"; } - this.state.mouseDownNode = null; + return "green"; } - svgMouseUp() { - if (this.state.justScale) { - this.state.justScale = false; + nodeClick(d) { + if (d.children) { + d._children = d.children; + delete d.children; } + else { + d.children = d._children; + delete d._children; + } + this.update(d); } - updateVersionNodes(nodes) { - var nodeEnter = nodes.enter().append("g") - .classed("version", true) - .attr("attr-trialid", (d) => d.title) - .attr("transform", (d) => { - return "translate(" + 0 + "," + 0 + ")"; - }); - // Circle for new nodes - nodeEnter.append('rect') - .attr("transform", (d) => { - return "translate(" + d.x + "," + d.y + ")"; - }) - .attr('width', (d) => 2 * d.radius) - .attr('height', (d) => 2 * d.radius) - .attr('rx', 0) - .attr('ry', 0) - //.attr('r', ) - .attr("stroke", "#000") - .attr("stroke-width", "2.5px") - .attr("fill", "#F6FBFF") - .attr("stroke", "#000") - .attr("stroke-width", "2.5px"); - nodeEnter.append('text') - .classed('trial-id', true) - .attr('font-family', 'sans-serif') - .attr('font-size', this.config.fontSize + 'px') - .attr('pointer-events', 'none') - .attr('x', (d) => d.radius) - .attr('y', (d) => d.radius + 4) - .attr('stroke', '#000') - .attr('text-anchor', 'middle') - //.attr('font-weight', 'bold') - .attr("transform", (d) => { - return "translate(" + d.x + "," + d.y + ")"; - }).text((d) => d.display); - nodeEnter.merge(nodes); // nodeUpdate - nodes.exit().remove(); // nodeExit - } - updateNodes(nodes) { + updateNodes(source, node) { let self = this; - var nodeEnter = nodes.enter().append("g") - .classed("node", true) - .attr("attr-trialid", (d) => d.title) + var nodeEnter = node.enter().append('g') + .attr("id", (d) => { + return "node-" + this.graphId + "-" + d.data.index; + }) + .attr('class', 'node') .attr("cursor", "pointer") - .attr("transform", (d) => { - return "translate(" + 0 + "," + 0 + ")"; + .attr('transform', (d) => { + return "translate(" + source.x + "," + source.y + ")"; + }) + .on('click', (event, d) => { + let activations = d.data.activations; + if (event.ctrlKey && Object.keys(activations).length > 1) { + self.getFunctionDiff(activations, d.data.trial_ids); + } + else { + this.nodeClick(d); + } + }) + .on('mouseover', function (event, d) { + if (self.config.useTooltip) { + self.closeTooltip(); + if ((0, d3_selection_1.pointers)(event)[0][0] < 10) { + self.showTooltip(event, d.data, self.t1); + } + else { + self.showTooltip(event, d.data, self.t2); + } + } + self.config.customMouseOver(self, d); + return false; + }).on('mouseout', function (event, d) { + self.config.customMouseOut(self, d); }); + /* nodeEnter.attr("activations_ids", (d:VisibleTrialNode)=>{ + let activations = d.data.activations; + let attrValue = ""; + for(let trial in activations){ + if(attrValue.length > 0) attrValue+= "/"; + attrValue += trial + "/"; + attrValue += activations[trial]; + } + return attrValue; + }); */ // Circle for new nodes nodeEnter.append('rect') + .attr('class', 'node') + .attr('rx', 1e-6) + .attr('ry', 1e-6) + .attr('width', 1e-6) + .attr('height', 1e-6) + .attr("stroke", (d) => this.defaultNodeStroke(d)) + .attr("stroke-width", "3px") + .attr("fill", (d) => { + if (d.data.trial_ids.length == 1) { + return this.calculateColor(d.data, this.t1); + } + var grad = this.svg.append("svg:defs") + .append("linearGradient") + .attr("id", "grad-" + this.graphId + "-" + d.data.index) + .attr("x1", "100%") + .attr("x2", "0%") + .attr("y1", "0%") + .attr("y2", "0%"); + grad.append("stop") + .attr("offset", "50%") + .attr("stop-color", this.calculateColor(d.data, this.t2)); + grad.append("stop") + .attr("offset", "50%") + .attr("stop-color", this.calculateColor(d.data, this.t1)); + return "url(#grad-" + this.graphId + "-" + d.data.index + ")"; + }); + // Text for new nodes + nodeEnter.append('text') + .attr("dy", ".35em") + .attr("font-family", "sans-serif") + .attr("font-size", this.config.fontSize + "px") + .attr("pointer-events", "none") + .attr("fill", "#000") + .attr("y", 24) + .attr("x", 10) + .attr("text-anchor", "middle") + .each(function (d) { + const textLabel = (0, d3_selection_1.select)(this); + const name = d.data.name.split('
          '); + if (name.length > 1) { + textLabel.append("tspan") + .attr("x", "10") + .attr("dy", ".35em") + .attr("font-weight", "bold") + .text(name[0]); + textLabel.append("tspan") + .attr("x", "10") + .attr("dy", "1em") + .text(name[1]); + textLabel.attr("class", "nowrap"); + } + else { + return textLabel.text(d.data.name); + } + }); + nodeEnter.append("path") + .attr("stroke", "#000") + .attr("d", function (d) { + if (d.data.trial_ids.length > 1) { + return "M10," + 0 + + "L10," + 20; + } + return "M0,0L0,0"; + }); + // Update + var nodeUpdate = nodeEnter.merge(node); + // Transition to proper position + nodeUpdate.transition() + .duration(this.config.duration) .attr("transform", (d) => { - return "translate(" + d.x + "," + d.y + ")"; + let color = this.colors[d.data.trial_ids[0]]; + d.dy = 0; + if (color == 1) { + d.dy = -40; + } + else if (color == 2) { + d.dy = 40; + } + return "translate(" + (d.x - 10) + "," + (d.y + d.dy - 10) + ")"; + }); + // Update the node attributes and style + nodeUpdate.select('rect.node') + .attr('width', 20) + .attr('height', 20) + .attr('rx', 20) + .attr('ry', 20) + .attr("rx", (d) => { + return d._children ? 0 : 20; }) - .attr('cursor', 'pointer') - .attr('title', (d) => d.info.display) - .attr('width', (d) => 2 * d.radius) - .attr('height', (d) => 2 * d.radius) - .attr('rx', (d) => 2 * d.radius) - .attr('ry', (d) => 2 * d.radius) - //.attr('r', ) - .attr("stroke", "#000") - .attr("stroke-width", "2.5px") - .attr("fill", function (d) { - var proportion = Math.round(200 * (1.0 - (parseInt(d.title) / self.maxId)) + 50); - if (d.status === 'unfinished') { - return d.gradient ? (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString() : "rgb(238, 200, 241)"; + .attr("ry", (d) => { + return d._children ? 0 : 20; + }) + .attr('cursor', 'pointer'); + // Remove exiting nodes + var nodeExit = node.exit().transition() + .duration(this.config.duration) + .attr("transform", function (d) { + return "translate(" + source.x + "," + source.y + ")"; + }) + .remove(); + // Reduce node rects size to 0 on exit + nodeExit.select('rect') + .attr('rx', 1e-6) + .attr('ry', 1e-6) + .attr('width', 1e-6) + .attr('height', 1e-6); + // Reduce opacity of labels on exit + nodeExit.select('text') + .style('fill-opacity', 1e-6); + } + updateLinks(source, edges) { + var link = this.g.selectAll('path.link') + .data(edges, (d) => d.id); + // Enter any new links at the parent's previous position. + var linkEnter = link.enter().insert('path', "g") + .attr("class", "link") + .attr("id", (d, i) => { + return "pathId-" + this.graphId + "-" + d.id; + }) + .attr("fill", "none") + .attr("stroke-width", "1.5px") + .attr('d', (d) => { + var o = { y: source.y0, x: source.x0 }; + if (d.source.dy == undefined) { + d.source.dy = 0; } - if (d.status === 'finished') { - return d.gradient ? (0, d3_color_1.rgb)(proportion, proportion, proportion, 255).toString() : "#F6FBFF"; + if (d.target.dy == undefined) { + d.target.dy = 0; } - if (d.status === 'backup') { - return d.gradient ? (0, d3_color_1.rgb)(255, 255, proportion, 255).toString() : "rgb(241, 238, 200)"; + let ox = source.x0 || 0, oy = source.y0 || 0, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1; + if (d.type === 'initial' || d.type === 'call' || d.type == 'return') { + // Initial + return (0, utils_1.diagonal)(o, o); + } + else if (dx === 0 && dy === 0) { + // Loop + return `M ${ox}, ${oy} + A 15,20 + -45,1,1 + ${ox + 5},${oy + 8}`; + } + //return diagonal(d.source, d.target); + return (0, utils_1.diagonal)(o, o); + }) + .attr("marker-end", (d) => { + let count = 0; + for (let trial_id in d.count) { + if (trial_id == this.t1.toString()) { + count += 1; + } + if (trial_id == this.t2.toString()) { + count += 2; + } + } + if (count == 0 || count == 3) { // Single trial or diff + return "url(#" + this.graphId + "-end)"; + } + if (count == 1) { // First trial + return "url(#" + this.graphId + "-endbefore)"; + } + if (count == 2) { // Second trial + return "url(#" + this.graphId + "-endafter)"; + } + return ""; + }) + .attr('stroke', (d) => { + if (d.type === 'sequence') { + return '#07F'; + } + return '#666'; + }) + .attr('stroke-dasharray', (d) => { + if (d.type === 'return') { + return '10,2'; + } + return 'none'; + }); + // UPDATE + var linkUpdate = linkEnter.merge(link); + // Transition back to the parent element position + linkUpdate.transition() + .duration(this.config.duration) + .attr('d', (d) => { + if (d.source.dy == undefined) { + d.source.dy = 0; + } + if (d.target.dy == undefined) { + d.target.dy = 0; + } + let sd = d.source.data, td = d.target.data, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1, theta = Math.atan(dx / dy), phi = Math.atan(dy / dx), r = 10 + 2, sin_theta = r * Math.sin(theta), cos_theta = r * Math.cos(theta), sin_phi = r * Math.sin(phi), cos_phi = r * Math.cos(phi), m1 = (y2 > y1) ? 1 : -1, m2 = (x2 > x1) ? -1 : 1; + if (d.type === 'initial') { + // Initial + return `M ${(x2 - 20)},${(y2 - 20)} + L ${(x2 - r / 2.0)},${(y2 - r / 2.0)}`; + } + else if (d.type === 'call' || d.type == 'return') { + // Call/Return + x1 += m1 * sin_theta; + x2 += m2 * cos_phi; + y1 += m1 * cos_theta; + y2 += m2 * sin_phi; + if (dx === 0) { + if (y1 > y2) { + //y1 -= 10 + y2 += 20; + } + else { + //y1 += 10 + y2 -= 20; + } + } + return `M ${x1}, ${y1} + L ${x2}, ${y2}`; + } + else if (dx === 0 && dy === 0) { + // Loop + return `M ${x1}, ${y1} + A 15,20 + -45,1,1 + ${x2 + 5},${y2 + 8}`; } - return '#666'; - }) - .attr("stroke", function (d) { - return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : "#000"; - }) - .attr("stroke-width", "2.5px") - .on('mousedown', function (event, d) { - self.nodeMouseDown(event, (0, d3_selection_1.select)(this), d); - }).on('click', function (event, d) { - self.nodeMouseUp(event, (0, d3_selection_1.select)(this), d); - }).on('mouseover', function (event, d) { - if (!self.state.mouseDownNode && self.config.useTooltip) { - self.closeTooltip(); - self.showTooltip(event, d); + else if (sd.parent_index == td.parent_index) { + // Same caller + if (dy === 0 && sd.children_index == td.children_index - 1) { + // Immediate sequence + return `M ${x1}, ${y1} + L ${(x2 + m2 * cos_phi)}, ${y2}`; + } + else { + let sign = -1; + if (y1 < y2) { + x1 += m1 * sin_theta; + y1 += m1 * cos_theta; + y2 -= r; + sign = -1; + } + else if (y2 < y1) { + x1 += m1 * sin_theta; + y1 += m1 * cos_theta; + y2 += r; + sign = 1; + } + else if (x1 >= x2) { + y1 += r; + y2 += r; + sign = 2; + } + else { + y1 -= r; + y2 -= r; + sign = -1; + } + return `M ${x1}, ${y1} + C ${(x1 + x2) / 2} ${y1 + r * sign}, + ${(x1 + x2) / 2} ${y2 + r * sign}, + ${x2} ${y2}`; + } } - (0, d3_selection_1.select)(this) - .attr('stroke', 'rgb(200, 238, 241)'); - }).on('mouseout', function (event, d) { - (0, d3_selection_1.select)(this) - .attr("stroke", (d) => { - return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : "#000"; - }); + // Other caller + x1 += m1 * sin_theta; + y1 += m1 * cos_theta; + x2 += m2 * cos_phi; + y2 += m2 * sin_phi; + return `M ${x1} ${y1} + C ${(x1 + x2) / 2} ${y1}, + ${(x1 + x2) / 2} ${y2}, + ${x2} ${y2}`; + }); + // Remove any exiting links + link.exit() //.transition() + .attr('d', function (d) { + return (0, utils_1.diagonal)(d.source, d.target); }) - .classed("custom-menu", true); - nodeEnter.append('text') - .classed('trial-id', true) - .attr('font-family', 'sans-serif') - .attr('font-size', this.config.fontSize + 'px') - .attr('pointer-events', 'none') - .attr('x', (d) => d.radius) - .attr('y', (d) => d.radius + 4) - .attr('stroke', '#000') - .attr('text-anchor', 'middle') - //.attr('font-weight', 'bold') - .attr("transform", (d) => { - return "translate(" + d.x + "," + d.y + ")"; - }).text((d) => d.gradient ? "" : d.display); - nodeEnter.merge(nodes); // nodeUpdate - nodes.exit().remove(); // nodeExit + .remove(); // linkExit } - updateLinks(link) { - // Enter any new links - let colors = (0, d3_scale_1.scaleOrdinal)(d3_scale_chromatic_1.schemeCategory10); - var linkEnter = link.enter().insert('path', 'g') - .classed('link', true) - .attr('cursor', 'crosshair') - .attr('fill', 'none') - .attr('stroke', '#000') - .attr('stroke-width', '4px'); - linkEnter - .attr("d", (d) => { - var deltaX = d.target.x - d.source.x, deltaY = d.target.y - d.source.y, dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY), normX = deltaX / dist, normY = deltaY / dist, sourcePadding = this.config.radius - 5, targetPadding = this.config.radius + (d.right ? 3 : -5), sourceX = d.source.x + this.config.radius + (sourcePadding * normX), sourceY = d.source.y + this.config.radius + (sourcePadding * normY), targetX = d.target.x + this.config.radius - (targetPadding * normX), targetY = d.target.y + this.config.radius - (targetPadding * normY); - var step = 0; - if (d.level > 0) { - step += this.config.moveY; - step += (d.level - 1) * this.config.moveY2; + updateLinkLabels(edges) { + var labelPath = this.g.selectAll(".label_text") + .data(edges, (d) => d.id); + var labelEnter = labelPath.enter().append("text") + .attr("class", "label_text") + .attr("font-family", "sans-serif") + .attr("font-size", this.config.labelFontSize + "px") + .attr("pointer-events", "none") + .attr("fill", "#000") + .attr("text-anchor", "middle") + .attr("dx", (d) => { + if (d.source.x == d.target.x) { + return 29; } - return `M ${sourceX}, ${sourceY} - C ${(sourceX - this.config.moveX / 2)} ${sourceY} - ${(sourceX - this.config.moveX / 2)} ${(sourceY + 3 * step / 4)} - ${(sourceX - this.config.moveX)} ${(sourceY + step)} - L ${(sourceX - this.config.moveX)} ${(sourceY + step)} - ${(targetX + this.config.moveX)} ${(sourceY + step)} - C ${(targetX + this.config.moveX / 2)} ${(sourceY + 3 * step / 4)} - ${(targetX + this.config.moveX / 2)} ${sourceY} - ${targetX}, ${targetY}`; + return (Math.abs(d.source.x - d.target.x) - 10) / 2; }) - .attr('marker-end', (d) => { - return d.right ? 'url(#end-arrow)' : ''; + .attr("dy", -3) + .attr("id", (d, i) => { + return "pathlabel-" + this.graphId + "-" + d.id; }) - .attr('stroke', (d) => { - return (0, d3_color_1.rgb)(colors(d.level.toString())).darker().toString(); + .append("textPath") + .attr("xlink:href", (d, i) => { + return "#pathId-" + this.graphId + "-" + d.id; + }) + .text((d) => { + if (d.type === 'initial') { + return ''; + } + if (this.t1 == this.t2 || !d.count[this.t2]) { + return d.count[this.t1].toString(); + } + else if (!d.count[this.t1]) { + return d.count[this.t2].toString(); + } + return d.count[this.t1] + ', ' + d.count[this.t2]; }); - // Update - linkEnter.merge(link); // linkUpdate - // Remove any exiting links - link.exit().remove(); // linkExit + labelEnter.merge(labelPath); + labelPath.exit().remove(); } zoomFunction(event) { - this.state.justScale = true; this.closeTooltip(); this.transform = event.transform; this.g.attr("transform", event.transform); } _graphId() { - return "history-graph-" + this.graphId; - } - menuOnRightClick() { - let rightClickMenu = document.getElementById("context-menu"); - // Set up an event handler for the documnt right click - document.addEventListener("contextmenu", function (event) { - var _a; - //open right click menu - let target = event.target; - if (target && target.classList.contains("custom-menu")) { - event.preventDefault(); - if (rightClickMenu) { - rightClickMenu.setAttribute("selected-trial", (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute("attr-trialid")); - rightClickMenu.setAttribute("selected-trial-simplified", target.getAttribute("title")); - rightClickMenu.style.top = (event.pageY - 10).toString(); - rightClickMenu.style.left = (event.pageX - 90).toString(); - rightClickMenu.style.display = "block"; - rightClickMenu.classList.add("show"); - } - } - }); - // close the menu - document.addEventListener("click", function (event) { - if (rightClickMenu) { - rightClickMenu.style.display = "none"; - rightClickMenu.classList.remove("show"); - } - }); + return "trial-graph-" + this.graphId; } } -exports.HistoryGraph = HistoryGraph; +exports.TrialGraph = TrialGraph; /***/ }), -/***/ "../history/lib/index.js": -/*!*******************************!*\ - !*** ../history/lib/index.js ***! - \*******************************/ +/***/ "../trial/lib/index.js": +/*!*****************************!*\ + !*** ../trial/lib/index.js ***! + \*****************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; @@ -117524,17 +96654,17 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(/*! ./config */ "../history/lib/config.js"), exports); -__exportStar(__webpack_require__(/*! ./structures */ "../history/lib/structures.js"), exports); -__exportStar(__webpack_require__(/*! ./graph */ "../history/lib/graph.js"), exports); +__exportStar(__webpack_require__(/*! ./config */ "../trial/lib/config.js"), exports); +__exportStar(__webpack_require__(/*! ./structures */ "../trial/lib/structures.js"), exports); +__exportStar(__webpack_require__(/*! ./graph */ "../trial/lib/graph.js"), exports); /***/ }), -/***/ "../history/lib/structures.js": -/*!************************************!*\ - !*** ../history/lib/structures.js ***! - \************************************/ +/***/ "../trial/lib/structures.js": +/*!**********************************!*\ + !*** ../trial/lib/structures.js ***! + \**********************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; @@ -117544,4262 +96674,25127 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); /***/ }), -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css": -/*!***************************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css ***! - \***************************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -.lm-AccordionPanel .lm-AccordionPanel-title { - box-sizing: border-box; - padding: 0px 10px; - background: #e5e5e5; - border: 1px solid #c0c0c0; - border-bottom: none; - font: - 12px Helvetica, - Arial, - sans-serif; - min-height: 22px; - max-height: 22px; - min-width: 35px; - line-height: 20px; - margin: 0px; -} - -.lm-AccordionPanel .lm-AccordionPanel-title:focus, -.lm-AccordionPanel .lm-AccordionPanel-title:hover { - background: #dbdbdb; -} - -.lm-AccordionPanel .lm-AccordionPanel-title:focus, -.lm-AccordionPanel - .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) { - border: 1px solid lightskyblue; -} - -.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) { - border-bottom: 1px solid #c0c0c0; -} - -.lm-AccordionPanel - .lm-AccordionPanel-title.lm-mod-expanded - .lm-AccordionPanel-titleCollapser:before { - content: '\\f0d8'; - font-family: FontAwesome; -} - -.lm-AccordionPanel - .lm-AccordionPanel-title - .lm-AccordionPanel-titleCollapser:before { - content: '\\f0d7'; - font-family: FontAwesome; - position: absolute; - right: 10px; -} - -.lm-AccordionPanel .lm-AccordionPanel-titleLabel { - padding: 0px 5px; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/accordionpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,sBAAsB;EACtB,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,WAAW;AACb;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;;;EAGE,8BAA8B;AAChC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel .lm-AccordionPanel-title {\n box-sizing: border-box;\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n min-height: 22px;\n max-height: 22px;\n min-width: 35px;\n line-height: 20px;\n margin: 0px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\n background: #dbdbdb;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\n border: 1px solid lightskyblue;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title.lm-mod-expanded\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\f0d8';\n font-family: FontAwesome;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\f0d7';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\n padding: 0px 5px;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css": -/*!***************************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css ***! - \***************************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +/***/ "../utils/lib/d3svg.js": +/*!*****************************!*\ + !*** ../utils/lib/d3svg.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports) => { "use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-CommandPalette { - font-family: sans-serif; - background: #f5f5f5; -} - -.lm-CommandPalette-search { - padding: 8px; -} - -.lm-CommandPalette-wrapper { - padding: 4px 6px; - background: white; - border: 1px solid #e0e0e0; - position: relative; -} - -.lm-CommandPalette-input { - width: 92%; - border: none; - outline: none; - font-size: 16px; -} - -.lm-CommandPalette-header { - padding: 4px; - color: #757575; - font-size: 12px; - font-weight: 600; - background: #e1e1e1; - cursor: pointer; -} - -.lm-CommandPalette-header:hover::before { - content: '\\2026'; /* ellipsis */ - float: right; - margin-right: 4px; -} - -.lm-CommandPalette-header > mark { - background-color: transparent; - font-weight: bold; -} - -.lm-CommandPalette-item { - padding: 4px 8px; - color: #757575; - font-size: 13px; - font-weight: 500; -} -.lm-CommandPalette-emptyMessage { - padding: 4px; - color: #757575; - font-size: 12px; - font-weight: 600; - text-align: center; -} - -.lm-CommandPalette-item.lm-mod-disabled { - color: rgba(0, 0, 0, 0.25); -} - -.lm-CommandPalette-item.lm-mod-active { - background: #7fdbff; -} - -.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) { - background: #e5e5e5; -} - -.lm-CommandPalette-itemIcon { - display: none; -} - -.lm-CommandPalette-itemLabel > mark { - background-color: transparent; - font-weight: bold; -} - -.lm-CommandPalette-item.lm-mod-disabled mark { - color: rgba(0, 0, 0, 0.4); -} - -.lm-CommandPalette-itemCaption { - color: #9e9e9e; - font-size: 11px; - font-weight: 400; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.diagonal = diagonal; +/** + * Create diagonal line between two nodes + */ +function diagonal(s, d) { + if (s.dy == undefined) { + s.dy = 0; + } + if (d.dy == undefined) { + d.dy = 0; + } + let path = `M ${s.x} ${(s.y + s.dy)} + C ${(s.x + d.x) / 2} ${(s.y + s.dy)}, + ${(s.x + d.x) / 2} ${(d.y + d.dy)}, + ${d.x} ${(d.y + d.dy)}`; + return path; } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/commandpalette.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,gBAAgB,EAAE,aAAa;EAC/B,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n font-family: sans-serif;\n background: #f5f5f5;\n}\n\n.lm-CommandPalette-search {\n padding: 8px;\n}\n\n.lm-CommandPalette-wrapper {\n padding: 4px 6px;\n background: white;\n border: 1px solid #e0e0e0;\n position: relative;\n}\n\n.lm-CommandPalette-input {\n width: 92%;\n border: none;\n outline: none;\n font-size: 16px;\n}\n\n.lm-CommandPalette-header {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n background: #e1e1e1;\n cursor: pointer;\n}\n\n.lm-CommandPalette-header:hover::before {\n content: '\\2026'; /* ellipsis */\n float: right;\n margin-right: 4px;\n}\n\n.lm-CommandPalette-header > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item {\n padding: 4px 8px;\n color: #757575;\n font-size: 13px;\n font-weight: 500;\n}\n\n.lm-CommandPalette-emptyMessage {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n text-align: center;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-CommandPalette-item.lm-mod-active {\n background: #7fdbff;\n}\n\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\n background: #e5e5e5;\n}\n\n.lm-CommandPalette-itemIcon {\n display: none;\n}\n\n.lm-CommandPalette-itemLabel > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled mark {\n color: rgba(0, 0, 0, 0.4);\n}\n\n.lm-CommandPalette-itemCaption {\n color: #9e9e9e;\n font-size: 11px;\n font-weight: 400;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css": -/*!*********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css ***! - \*********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +/***/ "../utils/lib/index.js": +/*!*****************************!*\ + !*** ../utils/lib/index.js ***! + \*****************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) 2014-2018, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-DataGrid { - min-width: 64px; - min-height: 64px; - border: 1px solid #a0a0a0; -} - -.lm-DataGrid-scrollCorner { - background-color: #f0f0f0; -} -.lm-DataGrid-scrollCorner::after { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 1px; - height: 1px; - background-color: #a0a0a0; -} +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +__exportStar(__webpack_require__(/*! ./d3svg */ "../utils/lib/d3svg.js"), exports); +__exportStar(__webpack_require__(/*! ./random */ "../utils/lib/random.js"), exports); +__exportStar(__webpack_require__(/*! ./text */ "../utils/lib/text.js"), exports); +__exportStar(__webpack_require__(/*! ./web */ "../utils/lib/web.js"), exports); -.lm-DataGrid-cellEditorOccluder { - pointer-events: none; - position: absolute; - overflow: hidden; -} -.lm-DataGrid-cellEditorContainer { - pointer-events: auto; - position: absolute; - background-color: #ffffff; - box-sizing: border-box; - box-shadow: 0px 0px 6px #006bf7; - border: 2px solid #006bf7; -} +/***/ }), -.lm-DataGrid-cellEditorContainer.lm-mod-invalid { - box-shadow: 0px 0px 6px red; - border: 2px solid red; -} +/***/ "../utils/lib/random.js": +/*!******************************!*\ + !*** ../utils/lib/random.js ***! + \******************************/ +/***/ ((__unused_webpack_module, exports) => { -.lm-DataGrid-cellEditorContainer > form { - width: 100%; - height: 100%; - overflow: hidden; -} +"use strict"; -.lm-DataGrid-cellEditorWidget { - width: 100%; - height: 100%; - outline: none; - box-sizing: border-box; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.makeid = makeid; +function makeid() { + var text = ""; + var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (var i = 0; i < 5; i++) + text += possible.charAt(Math.floor(Math.random() * possible.length)); + return text; } -.lm-DataGrid-cellEditorInput { - background-color: #ffffff; - border: 0; -} -.lm-DataGrid-cellEditorCheckbox { - margin: 0; -} +/***/ }), -.lm-DataGrid-notification { - position: absolute; - display: flex; - overflow: visible; - animation: fade-in 300ms ease-out; -} +/***/ "../utils/lib/text.js": +/*!****************************!*\ + !*** ../utils/lib/text.js ***! + \****************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { -.lm-DataGrid-notificationContainer { - box-shadow: 0px 2px 5px #999999; - border-radius: 3px; - background-color: white; - color: black; - border: 1px solid black; - font-family: sans-serif; - font-size: 13px; - padding: 4px; -} +"use strict"; -@keyframes fade-in { - 0% { - opacity: 0; - } - 50% { - opacity: 0.7; - } - 100% { - opacity: 1; - } +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.wrap = wrap; +const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); +function wrap(text, width) { + text.each(function () { + var text = (0, d3_selection_1.select)(this), words = text.text().split(/(?=_)/).reverse(), word, line = [], lineNumber = 0, lineHeight = 1.1, // ems + y = text.attr("y"), dy = parseFloat(text.attr("dy")), tspan = text.text(null).append("tspan").attr("x", 10).attr("y", y).attr("dy", dy + "em"); + while (word = words.pop()) { + line.push(word); + tspan.text(line.join("")); + if (tspan.node().getComputedTextLength() > width) { + line.pop(); + tspan.text(line.join("")); + line = [word]; + tspan = text.append("tspan").attr("x", 10).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word); + } + } + }); } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/datagrid.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E;;AAE9E;EACE,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,yBAAyB;EACzB,sBAAsB;EACtB,+BAA+B;EAC/B,yBAAyB;AAC3B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,yBAAyB;EACzB,SAAS;AACX;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,iCAAiC;AACnC;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,uBAAuB;EACvB,YAAY;EACZ,uBAAuB;EACvB,uBAAuB;EACvB,eAAe;EACf,YAAY;AACd;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,YAAY;EACd;EACA;IACE,UAAU;EACZ;AACF","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DataGrid {\n min-width: 64px;\n min-height: 64px;\n border: 1px solid #a0a0a0;\n}\n\n.lm-DataGrid-scrollCorner {\n background-color: #f0f0f0;\n}\n\n.lm-DataGrid-scrollCorner::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n background-color: #a0a0a0;\n}\n\n.lm-DataGrid-cellEditorOccluder {\n pointer-events: none;\n position: absolute;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorContainer {\n pointer-events: auto;\n position: absolute;\n background-color: #ffffff;\n box-sizing: border-box;\n box-shadow: 0px 0px 6px #006bf7;\n border: 2px solid #006bf7;\n}\n\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\n box-shadow: 0px 0px 6px red;\n border: 2px solid red;\n}\n\n.lm-DataGrid-cellEditorContainer > form {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorWidget {\n width: 100%;\n height: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n.lm-DataGrid-cellEditorInput {\n background-color: #ffffff;\n border: 0;\n}\n\n.lm-DataGrid-cellEditorCheckbox {\n margin: 0;\n}\n\n.lm-DataGrid-notification {\n position: absolute;\n display: flex;\n overflow: visible;\n animation: fade-in 300ms ease-out;\n}\n\n.lm-DataGrid-notificationContainer {\n box-shadow: 0px 2px 5px #999999;\n border-radius: 3px;\n background-color: white;\n color: black;\n border: 1px solid black;\n font-family: sans-serif;\n font-size: 13px;\n padding: 4px;\n}\n\n@keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n opacity: 1;\n }\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css": -/*!**********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css ***! - \**********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +/***/ "../utils/lib/web.js": +/*!***************************!*\ + !*** ../utils/lib/web.js ***! + \***************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ -.lm-DockPanel-overlay { - background: rgba(255, 255, 255, 0.6); - border: 1px dashed black; - transition-property: top, left, right, bottom; - transition-duration: 150ms; - transition-timing-function: ease; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.json = json; +const d3_fetch_1 = __webpack_require__(/*! d3-fetch */ "../../node_modules/d3-fetch/src/index.js"); +function json(innertext, sub, url, fn) { + let i = document.createElement('i'); + i.classList.add("loading"); + i.classList.add("fa"); + i.classList.add("fa-spinner"); + i.classList.add("fa-pulse"); + sub.innerHTML = ""; + sub.appendChild(i); + sub.onclick = function () { + json(innertext, sub, url, fn); + }; + (0, d3_fetch_1.json)(url).then(function (data) { + sub.onclick = function () { + }; + fn(data); + }).catch(function (error) { + i.classList.remove("fa-spinner"); + i.classList.remove("fa-pulse"); + i.classList.add("fa-refresh"); + i.classList.add("connection-error"); + let text = document.createElement('span'); + text.classList.add("error-text"); + text.innerHTML = innertext; + i.appendChild(text); + }); } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/dockpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css": -/*!******************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css ***! - \******************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +/***/ "../../../../../../../../node_modules/ace-builds/src-noconflict/ace.js": +/*!*****************************************************************************!*\ + !*** ../../../../../../../../node_modules/ace-builds/src-noconflict/ace.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dragdrop_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../dragdrop/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_widgets_style_index_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../widgets/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/accordionpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/commandpalette.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_datagrid_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./datagrid.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/datagrid.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/dockpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/tabbar.css"); -// Imports +/* module decorator */ module = __webpack_require__.nmd(module); +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Ajax.org B.V. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** */ + +/** + * Define a module along with a payload + * @param module a name for the payload + * @param payload a function to call with (require, exports, module) params + */ + +(function() { +var ACE_NAMESPACE = "ace"; +var global = (function() { return this; })(); +if (!global && typeof window != "undefined") global = window; // strict mode +if (!ACE_NAMESPACE && typeof requirejs !== "undefined") + return; +var define = function(module, deps, payload) { + if (typeof module !== "string") { + if (define.original) + define.original.apply(this, arguments); + else { + console.error("dropping module because define wasn\'t a string."); + console.trace(); + } + return; + } + if (arguments.length == 2) + payload = deps; + if (!define.modules[module]) { + define.payloads[module] = payload; + define.modules[module] = null; + } +}; +define.modules = {}; +define.payloads = {}; +/** + * Get at functionality define()ed using the function above + */ +var _require = function(parentId, module, callback) { + if (typeof module === "string") { + var payload = lookup(parentId, module); + if (payload != undefined) { + callback && callback(); + return payload; + } + } else if (Object.prototype.toString.call(module) === "[object Array]") { + var params = []; + for (var i = 0, l = module.length; i < l; ++i) { + var dep = lookup(parentId, module[i]); + if (dep == undefined && require.original) + return; + params.push(dep); + } + return callback && callback.apply(null, params) || true; + } +}; +var require = function(module, callback) { + var packagedModule = _require("", module, callback); + if (packagedModule == undefined && require.original) + return require.original.apply(this, arguments); + return packagedModule; +}; +var normalizeModule = function(parentId, moduleName) { + // normalize plugin requires + if (moduleName.indexOf("!") !== -1) { + var chunks = moduleName.split("!"); + return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); + } + // normalize relative requires + if (moduleName.charAt(0) == ".") { + var base = parentId.split("/").slice(0, -1).join("/"); + moduleName = base + "/" + moduleName; + while(moduleName.indexOf(".") !== -1 && previous != moduleName) { + var previous = moduleName; + moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); + } + } + return moduleName; +}; -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dragdrop_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_widgets_style_index_css__WEBPACK_IMPORTED_MODULE_3__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_4__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_5__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_datagrid_css__WEBPACK_IMPORTED_MODULE_6__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_7__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_8__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_9__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_10__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_11__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. +/** + * Internal function to lookup moduleNames and resolve them by calling the + * definition function if needed. */ +var lookup = function(parentId, moduleName) { + moduleName = normalizeModule(parentId, moduleName); -/*----------------------------------------------------------------------------- -| Copyright (c) 2014-2018, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n@import '@lumino/dragdrop/style/index.css';\n@import '@lumino/widgets/style/index.css';\n@import './accordionpanel.css';\n@import './commandpalette.css';\n@import './datagrid.css';\n@import './dockpanel.css';\n@import './menu.css';\n@import './menubar.css';\n@import './scrollbar.css';\n@import './tabbar.css';\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + var module = define.modules[moduleName]; + if (!module) { + module = define.payloads[moduleName]; + if (typeof module === 'function') { + var exports = {}; + var mod = { + id: moduleName, + uri: '', + exports: exports, + packaged: true + }; + var req = function(module, callback) { + return _require(moduleName, module, callback); + }; -/***/ }), + var returnValue = module(req, exports, mod); + exports = returnValue || mod.exports; + define.modules[moduleName] = exports; + delete define.payloads[moduleName]; + } + module = define.modules[moduleName] = exports || module; + } + return module; +}; -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css": -/*!*****************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menu.css ***! - \*****************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +function exportAce(ns) { + var root = global; + if (ns) { + if (!global[ns]) + global[ns] = {}; + root = global[ns]; + } -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports + if (!root.define || !root.define.packaged) { + define.original = root.define; + root.define = define; + root.define.packaged = true; + } + if (!root.require || !root.require.packaged) { + require.original = root.require; + root.require = require; + root.require.packaged = true; + } +} -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ +exportAce(ACE_NAMESPACE); -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ +})(); -.lm-Menu { - padding: 3px 0px; - background: white; - color: rgba(0, 0, 0, 0.87); - border: 1px solid #c0c0c0; - font: - 12px Helvetica, - Arial, - sans-serif; - box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2); +ace.define("ace/lib/es6-shim",["require","exports","module"], function(require, exports, module){function defineProp(obj, name, val) { + Object.defineProperty(obj, name, { + value: val, + enumerable: false, + writable: true, + configurable: true + }); } - -.lm-Menu-item.lm-mod-active { - background: #e5e5e5; +if (!String.prototype.startsWith) { + defineProp(String.prototype, "startsWith", function (searchString, position) { + position = position || 0; + return this.lastIndexOf(searchString, position) === position; + }); } - -.lm-Menu-item.lm-mod-disabled { - color: rgba(0, 0, 0, 0.25); +if (!String.prototype.endsWith) { + defineProp(String.prototype, "endsWith", function (searchString, position) { + var subjectString = this; + if (position === undefined || position > subjectString.length) { + position = subjectString.length; + } + position -= searchString.length; + var lastIndex = subjectString.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; + }); } - -.lm-Menu-itemIcon { - width: 21px; - padding: 4px 2px; +if (!String.prototype.repeat) { + defineProp(String.prototype, "repeat", function (count) { + var result = ""; + var string = this; + while (count > 0) { + if (count & 1) + result += string; + if ((count >>= 1)) + string += string; + } + return result; + }); } - -.lm-Menu-itemLabel { - padding: 4px 35px 4px 2px; +if (!String.prototype.includes) { + defineProp(String.prototype, "includes", function (str, position) { + return this.indexOf(str, position) != -1; + }); } - -.lm-Menu-itemMnemonic { - text-decoration: underline; +if (!Object.assign) { + Object.assign = function (target) { + if (target === undefined || target === null) { + throw new TypeError("Cannot convert undefined or null to object"); + } + var output = Object(target); + for (var index = 1; index < arguments.length; index++) { + var source = arguments[index]; + if (source !== undefined && source !== null) { + Object.keys(source).forEach(function (key) { + output[key] = source[key]; + }); + } + } + return output; + }; } - -.lm-Menu-itemShortcut { - padding: 4px 0px; +if (!Object.values) { + Object.values = function (o) { + return Object.keys(o).map(function (k) { + return o[k]; + }); + }; } - -.lm-Menu-itemSubmenuIcon { - width: 16px; - padding: 4px 0px; +if (!Array.prototype.find) { + defineProp(Array.prototype, "find", function (predicate) { + var len = this.length; + var thisArg = arguments[1]; + for (var k = 0; k < len; k++) { + var kValue = this[k]; + if (predicate.call(thisArg, kValue, k, this)) { + return kValue; + } + } + }); } - -.lm-Menu-item[data-type='separator'] > div { - padding: 0; - height: 9px; +if (!Array.prototype.findIndex) { + defineProp(Array.prototype, "findIndex", function (predicate) { + var len = this.length; + var thisArg = arguments[1]; + for (var k = 0; k < len; k++) { + var kValue = this[k]; + if (predicate.call(thisArg, kValue, k, this)) { + return k; + } + } + }); } - -.lm-Menu-item[data-type='separator'] > div::after { - content: ''; - display: block; - position: relative; - top: 4px; - border-top: 1px solid #dddddd; +if (!Array.prototype.includes) { + defineProp(Array.prototype, "includes", function (item, position) { + return this.indexOf(item, position) != -1; + }); } - -.lm-Menu-itemIcon::before, -.lm-Menu-itemSubmenuIcon::before { - font-family: FontAwesome; +if (!Array.prototype.fill) { + defineProp(Array.prototype, "fill", function (value) { + var O = this; + var len = O.length >>> 0; + var start = arguments[1]; + var relativeStart = start >> 0; + var k = relativeStart < 0 + ? Math.max(len + relativeStart, 0) + : Math.min(relativeStart, len); + var end = arguments[2]; + var relativeEnd = end === undefined ? len : end >> 0; + var final = relativeEnd < 0 + ? Math.max(len + relativeEnd, 0) + : Math.min(relativeEnd, len); + while (k < final) { + O[k] = value; + k++; + } + return O; + }); } - -.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before { - content: '\\f00c'; +if (!Array.of) { + defineProp(Array, "of", function () { + return Array.prototype.slice.call(arguments); + }); } -.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before { - content: '\\f0da'; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/menu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;EAC1B,yBAAyB;EACzB;;;cAGY;EACZ,0CAA0C;AAC5C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,WAAW;AACb;;AAEA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,6BAA6B;AAC/B;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n padding: 3px 0px;\n background: white;\n color: rgba(0, 0, 0, 0.87);\n border: 1px solid #c0c0c0;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-Menu-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-Menu-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-Menu-itemIcon {\n width: 21px;\n padding: 4px 2px;\n}\n\n.lm-Menu-itemLabel {\n padding: 4px 35px 4px 2px;\n}\n\n.lm-Menu-itemMnemonic {\n text-decoration: underline;\n}\n\n.lm-Menu-itemShortcut {\n padding: 4px 0px;\n}\n\n.lm-Menu-itemSubmenuIcon {\n width: 16px;\n padding: 4px 0px;\n}\n\n.lm-Menu-item[data-type='separator'] > div {\n padding: 0;\n height: 9px;\n}\n\n.lm-Menu-item[data-type='separator'] > div::after {\n content: '';\n display: block;\n position: relative;\n top: 4px;\n border-top: 1px solid #dddddd;\n}\n\n.lm-Menu-itemIcon::before,\n.lm-Menu-itemSubmenuIcon::before {\n font-family: FontAwesome;\n}\n\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\n content: '\\f00c';\n}\n\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\n content: '\\f0da';\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); +}); +ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/es6-shim"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st: +"use strict"; +require("./es6-shim"); -/***/ }), +}); -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css": -/*!********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/menubar.css ***! - \********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +ace.define("ace/lib/deep_copy",["require","exports","module"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) { + if (typeof obj !== "object" || !obj) + return obj; + var copy; + if (Array.isArray(obj)) { + copy = []; + for (var key = 0; key < obj.length; key++) { + copy[key] = deepCopy(obj[key]); + } + return copy; + } + if (Object.prototype.toString.call(obj) !== "[object Object]") + return obj; + copy = {}; + for (var key in obj) + copy[key] = deepCopy(obj[key]); + return copy; +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports +}); +ace.define("ace/lib/lang",["require","exports","module","ace/lib/deep_copy"], function(require, exports, module){"use strict"; +exports.last = function (a) { + return a[a.length - 1]; +}; +exports.stringReverse = function (string) { + return string.split("").reverse().join(""); +}; +exports.stringRepeat = function (string, count) { + var result = ''; + while (count > 0) { + if (count & 1) + result += string; + if (count >>= 1) + string += string; + } + return result; +}; +var trimBeginRegexp = /^\s\s*/; +var trimEndRegexp = /\s\s*$/; +exports.stringTrimLeft = function (string) { + return string.replace(trimBeginRegexp, ''); +}; +exports.stringTrimRight = function (string) { + return string.replace(trimEndRegexp, ''); +}; +exports.copyObject = function (obj) { + var copy = {}; + for (var key in obj) { + copy[key] = obj[key]; + } + return copy; +}; +exports.copyArray = function (array) { + var copy = []; + for (var i = 0, l = array.length; i < l; i++) { + if (array[i] && typeof array[i] == "object") + copy[i] = this.copyObject(array[i]); + else + copy[i] = array[i]; + } + return copy; +}; +exports.deepCopy = require("./deep_copy").deepCopy; +exports.arrayToMap = function (arr) { + var map = {}; + for (var i = 0; i < arr.length; i++) { + map[arr[i]] = 1; + } + return map; +}; +exports.createMap = function (props) { + var map = Object.create(null); + for (var i in props) { + map[i] = props[i]; + } + return map; +}; +exports.arrayRemove = function (array, value) { + for (var i = 0; i <= array.length; i++) { + if (value === array[i]) { + array.splice(i, 1); + } + } +}; +exports.escapeRegExp = function (str) { + return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1'); +}; +exports.escapeHTML = function (str) { + return ("" + str).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/ 0xffff ? 2 : 1; +}; -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ +}); -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ +ace.define("ace/lib/useragent",["require","exports","module"], function(require, exports, module){"use strict"; +exports.OS = { + LINUX: "LINUX", + MAC: "MAC", + WINDOWS: "WINDOWS" +}; +exports.getOS = function () { + if (exports.isMac) { + return exports.OS.MAC; + } + else if (exports.isLinux) { + return exports.OS.LINUX; + } + else { + return exports.OS.WINDOWS; + } +}; +var _navigator = typeof navigator == "object" ? navigator : {}; +var os = (/mac|win|linux/i.exec(_navigator.platform) || ["other"])[0].toLowerCase(); +var ua = _navigator.userAgent || ""; +var appName = _navigator.appName || ""; +exports.isWin = (os == "win"); +exports.isMac = (os == "mac"); +exports.isLinux = (os == "linux"); +exports.isIE = + (appName == "Microsoft Internet Explorer" || appName.indexOf("MSAppHost") >= 0) + ? parseFloat((ua.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/) || [])[1]) + : parseFloat((ua.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/) || [])[1]); // for ie +exports.isOldIE = exports.isIE && exports.isIE < 9; +exports.isGecko = exports.isMozilla = ua.match(/ Gecko\/\d+/); +exports.isOpera = typeof opera == "object" && Object.prototype.toString.call(window["opera"]) == "[object Opera]"; +exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; +exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; +exports.isSafari = parseFloat(ua.split(" Safari/")[1]) && !exports.isChrome || undefined; +exports.isEdge = parseFloat(ua.split(" Edge/")[1]) || undefined; +exports.isAIR = ua.indexOf("AdobeAIR") >= 0; +exports.isAndroid = ua.indexOf("Android") >= 0; +exports.isChromeOS = ua.indexOf(" CrOS ") >= 0; +exports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window["MSStream"]; +if (exports.isIOS) + exports.isMac = true; +exports.isMobile = exports.isIOS || exports.isAndroid; -.lm-MenuBar { - padding-left: 5px; - background: #fafafa; - color: rgba(0, 0, 0, 0.87); - border-bottom: 1px solid #dddddd; - font: - 13px Helvetica, - Arial, - sans-serif; -} +}); -.lm-MenuBar-menu { - transform: translateY(-1px); +ace.define("ace/lib/dom",["require","exports","module","ace/lib/useragent"], function(require, exports, module){"use strict"; +var useragent = require("./useragent"); +var XHTML_NS = "http://www.w3.org/1999/xhtml"; +exports.buildDom = function buildDom(arr, parent, refs) { + if (typeof arr == "string" && arr) { + var txt = document.createTextNode(arr); + if (parent) + parent.appendChild(txt); + return txt; + } + if (!Array.isArray(arr)) { + if (arr && arr.appendChild && parent) + parent.appendChild(arr); + return arr; + } + if (typeof arr[0] != "string" || !arr[0]) { + var els = []; + for (var i = 0; i < arr.length; i++) { + var ch = buildDom(arr[i], parent, refs); + ch && els.push(ch); + } + return els; + } + var el = document.createElement(arr[0]); + var options = arr[1]; + var childIndex = 1; + if (options && typeof options == "object" && !Array.isArray(options)) + childIndex = 2; + for (var i = childIndex; i < arr.length; i++) + buildDom(arr[i], el, refs); + if (childIndex == 2) { + Object.keys(options).forEach(function (n) { + var val = options[n]; + if (n === "class") { + el.className = Array.isArray(val) ? val.join(" ") : val; + } + else if (typeof val == "function" || n == "value" || n[0] == "$") { + el[n] = val; + } + else if (n === "ref") { + if (refs) + refs[val] = el; + } + else if (n === "style") { + if (typeof val == "string") + el.style.cssText = val; + } + else if (val != null) { + el.setAttribute(n, val); + } + }); + } + if (parent) + parent.appendChild(el); + return el; +}; +exports.getDocumentHead = function (doc) { + if (!doc) + doc = document; + return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; +}; +exports.createElement = function (tag, ns) { + return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag); +}; +exports.removeChildren = function (element) { + element.innerHTML = ""; +}; +exports.createTextNode = function (textContent, element) { + var doc = element ? element.ownerDocument : document; + return doc.createTextNode(textContent); +}; +exports.createFragment = function (element) { + var doc = element ? element.ownerDocument : document; + return doc.createDocumentFragment(); +}; +exports.hasCssClass = function (el, name) { + var classes = (el.className + "").split(/\s+/g); + return classes.indexOf(name) !== -1; +}; +exports.addCssClass = function (el, name) { + if (!exports.hasCssClass(el, name)) { + el.className += " " + name; + } +}; +exports.removeCssClass = function (el, name) { + var classes = el.className.split(/\s+/g); + while (true) { + var index = classes.indexOf(name); + if (index == -1) { + break; + } + classes.splice(index, 1); + } + el.className = classes.join(" "); +}; +exports.toggleCssClass = function (el, name) { + var classes = el.className.split(/\s+/g), add = true; + while (true) { + var index = classes.indexOf(name); + if (index == -1) { + break; + } + add = false; + classes.splice(index, 1); + } + if (add) + classes.push(name); + el.className = classes.join(" "); + return add; +}; +exports.setCssClass = function (node, className, include) { + if (include) { + exports.addCssClass(node, className); + } + else { + exports.removeCssClass(node, className); + } +}; +exports.hasCssString = function (id, doc) { + var index = 0, sheets; + doc = doc || document; + if ((sheets = doc.querySelectorAll("style"))) { + while (index < sheets.length) { + if (sheets[index++].id === id) { + return true; + } + } + } +}; +exports.removeElementById = function (id, doc) { + doc = doc || document; + if (doc.getElementById(id)) { + doc.getElementById(id).remove(); + } +}; +var strictCSP; +var cssCache = []; +exports.useStrictCSP = function (value) { + strictCSP = value; + if (value == false) + insertPendingStyles(); + else if (!cssCache) + cssCache = []; +}; +function insertPendingStyles() { + var cache = cssCache; + cssCache = null; + cache && cache.forEach(function (item) { + importCssString(item[0], item[1]); + }); } - -.lm-MenuBar-item { - padding: 4px 8px; - border-left: 1px solid transparent; - border-right: 1px solid transparent; +function importCssString(cssText, id, target) { + if (typeof document == "undefined") + return; + if (cssCache) { + if (target) { + insertPendingStyles(); + } + else if (target === false) { + return cssCache.push([cssText, id]); + } + } + if (strictCSP) + return; + var container = target; + if (!target || !target.getRootNode) { + container = document; + } + else { + container = target.getRootNode(); + if (!container || container == target) + container = document; + } + var doc = container.ownerDocument || container; + if (id && exports.hasCssString(id, container)) + return null; + if (id) + cssText += "\n/*# sourceURL=ace/css/" + id + " */"; + var style = exports.createElement("style"); + style.appendChild(doc.createTextNode(cssText)); + if (id) + style.id = id; + if (container == doc) + container = exports.getDocumentHead(doc); + container.insertBefore(style, container.firstChild); } - -.lm-MenuBar-item.lm-mod-active { - background: #e5e5e5; +exports.importCssString = importCssString; +exports.importCssStylsheet = function (uri, doc) { + exports.buildDom(["link", { rel: "stylesheet", href: uri }], exports.getDocumentHead(doc)); +}; +exports.scrollbarWidth = function (doc) { + var inner = exports.createElement("ace_inner"); + inner.style.width = "100%"; + inner.style.minWidth = "0px"; + inner.style.height = "200px"; + inner.style.display = "block"; + var outer = exports.createElement("ace_outer"); + var style = outer.style; + style.position = "absolute"; + style.left = "-10000px"; + style.overflow = "hidden"; + style.width = "200px"; + style.minWidth = "0px"; + style.height = "150px"; + style.display = "block"; + outer.appendChild(inner); + var body = (doc && doc.documentElement) || (document && document.documentElement); + if (!body) + return 0; + body.appendChild(outer); + var noScrollbar = inner.offsetWidth; + style.overflow = "scroll"; + var withScrollbar = inner.offsetWidth; + if (noScrollbar === withScrollbar) { + withScrollbar = outer.clientWidth; + } + body.removeChild(outer); + return noScrollbar - withScrollbar; +}; +exports.computedStyle = function (element, style) { + return window.getComputedStyle(element, "") || {}; +}; +exports.setStyle = function (styles, property, value) { + if (styles[property] !== value) { + styles[property] = value; + } +}; +exports.HAS_CSS_ANIMATION = false; +exports.HAS_CSS_TRANSFORMS = false; +exports.HI_DPI = useragent.isWin + ? typeof window !== "undefined" && window.devicePixelRatio >= 1.5 + : true; +if (useragent.isChromeOS) + exports.HI_DPI = false; +if (typeof document !== "undefined") { + var div = document.createElement("div"); + if (exports.HI_DPI && div.style.transform !== undefined) + exports.HAS_CSS_TRANSFORMS = true; + if (!useragent.isEdge && typeof div.style.animationName !== "undefined") + exports.HAS_CSS_ANIMATION = true; + div = null; } - -.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active { - z-index: 10001; - background: white; - border-left: 1px solid #c0c0c0; - border-right: 1px solid #c0c0c0; - box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); +if (exports.HAS_CSS_TRANSFORMS) { + exports.translate = function (element, tx, ty) { + element.style.transform = "translate(" + Math.round(tx) + "px, " + Math.round(ty) + "px)"; + }; } - -.lm-MenuBar-item:focus-visible { - outline: 2px solid #333; - outline-offset: -2px; +else { + exports.translate = function (element, tx, ty) { + element.style.top = Math.round(ty) + "px"; + element.style.left = Math.round(tx) + "px"; + }; } -.lm-MenuBar-item[aria-disabled='true'] { - color: rgba(0, 0, 0, 0.37); -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/menubar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,iBAAiB;EACjB,mBAAmB;EACnB,0BAA0B;EAC1B,gCAAgC;EAChC;;;cAGY;AACd;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,kCAAkC;EAClC,mCAAmC;AACrC;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,iBAAiB;EACjB,8BAA8B;EAC9B,+BAA+B;EAC/B,0CAA0C;AAC5C;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,0BAA0B;AAC5B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n padding-left: 5px;\n background: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n border-bottom: 1px solid #dddddd;\n font:\n 13px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-MenuBar-menu {\n transform: translateY(-1px);\n}\n\n.lm-MenuBar-item {\n padding: 4px 8px;\n border-left: 1px solid transparent;\n border-right: 1px solid transparent;\n}\n\n.lm-MenuBar-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\n z-index: 10001;\n background: white;\n border-left: 1px solid #c0c0c0;\n border-right: 1px solid #c0c0c0;\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-MenuBar-item:focus-visible {\n outline: 2px solid #333;\n outline-offset: -2px;\n}\n\n.lm-MenuBar-item[aria-disabled='true'] {\n color: rgba(0, 0, 0, 0.37);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); +}); +ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(require, exports, module){/* + * based on code from: + * + * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/requirejs for details + */ +"use strict"; +var dom = require("./dom"); +exports.get = function (url, callback) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + callback(xhr.responseText); + } + }; + xhr.send(null); +}; +exports.loadScript = function (path, callback) { + var head = dom.getDocumentHead(); + var s = document.createElement('script'); + s.src = path; + head.appendChild(s); + s.onload = s.onreadystatechange = function (_, isAbort) { + if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") { + s = s.onload = s.onreadystatechange = null; + if (!isAbort) + callback(); + } + }; +}; +exports.qualifyURL = function (url) { + var a = document.createElement('a'); + a.href = url; + return a.href; +}; -/***/ }), +}); -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css": -/*!**********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/scrollbar.css ***! - \**********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module){"use strict"; +exports.inherits = function (ctor, superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); +}; +exports.mixin = function (obj, mixin) { + for (var key in mixin) { + obj[key] = mixin[key]; + } + return obj; +}; +exports.implement = function (proto, mixin) { + exports.mixin(proto, mixin); +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); -// Imports +}); +ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module){"use strict"; +var EventEmitter = {}; +var stopPropagation = function () { this.propagationStopped = true; }; +var preventDefault = function () { this.defaultPrevented = true; }; +EventEmitter._emit = + EventEmitter._dispatchEvent = function (eventName, e) { + this._eventRegistry || (this._eventRegistry = {}); + this._defaultHandlers || (this._defaultHandlers = {}); + var listeners = this._eventRegistry[eventName] || []; + var defaultHandler = this._defaultHandlers[eventName]; + if (!listeners.length && !defaultHandler) + return; + if (typeof e != "object" || !e) + e = {}; + if (!e.type) + e.type = eventName; + if (!e.stopPropagation) + e.stopPropagation = stopPropagation; + if (!e.preventDefault) + e.preventDefault = preventDefault; + listeners = listeners.slice(); + for (var i = 0; i < listeners.length; i++) { + listeners[i](e, this); + if (e.propagationStopped) + break; + } + if (defaultHandler && !e.defaultPrevented) + return defaultHandler(e, this); + }; +EventEmitter._signal = function (eventName, e) { + var listeners = (this._eventRegistry || {})[eventName]; + if (!listeners) + return; + listeners = listeners.slice(); + for (var i = 0; i < listeners.length; i++) + listeners[i](e, this); +}; +EventEmitter.once = function (eventName, callback) { + var _self = this; + this.on(eventName, function newCallback() { + _self.off(eventName, newCallback); + callback.apply(null, arguments); + }); + if (!callback) { + return new Promise(function (resolve) { + callback = resolve; + }); + } +}; +EventEmitter.setDefaultHandler = function (eventName, callback) { + var handlers = this._defaultHandlers; + if (!handlers) + handlers = this._defaultHandlers = { _disabled_: {} }; + if (handlers[eventName]) { + var old = handlers[eventName]; + var disabled = handlers._disabled_[eventName]; + if (!disabled) + handlers._disabled_[eventName] = disabled = []; + disabled.push(old); + var i = disabled.indexOf(callback); + if (i != -1) + disabled.splice(i, 1); + } + handlers[eventName] = callback; +}; +EventEmitter.removeDefaultHandler = function (eventName, callback) { + var handlers = this._defaultHandlers; + if (!handlers) + return; + var disabled = handlers._disabled_[eventName]; + if (handlers[eventName] == callback) { + if (disabled) + this.setDefaultHandler(eventName, disabled.pop()); + } + else if (disabled) { + var i = disabled.indexOf(callback); + if (i != -1) + disabled.splice(i, 1); + } +}; +EventEmitter.on = + EventEmitter.addEventListener = function (eventName, callback, capturing) { + this._eventRegistry = this._eventRegistry || {}; + var listeners = this._eventRegistry[eventName]; + if (!listeners) + listeners = this._eventRegistry[eventName] = []; + if (listeners.indexOf(callback) == -1) + listeners[capturing ? "unshift" : "push"](callback); + return callback; + }; +EventEmitter.off = + EventEmitter.removeListener = + EventEmitter.removeEventListener = function (eventName, callback) { + this._eventRegistry = this._eventRegistry || {}; + var listeners = this._eventRegistry[eventName]; + if (!listeners) + return; + var index = listeners.indexOf(callback); + if (index !== -1) + listeners.splice(index, 1); + }; +EventEmitter.removeAllListeners = function (eventName) { + if (!eventName) + this._eventRegistry = this._defaultHandlers = undefined; + if (this._eventRegistry) + this._eventRegistry[eventName] = undefined; + if (this._defaultHandlers) + this._defaultHandlers[eventName] = undefined; +}; +exports.EventEmitter = EventEmitter; +}); -var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretleft.png */ "../../node_modules/@lumino/default-theme/images/caretleft.png"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretright.png */ "../../node_modules/@lumino/default-theme/images/caretright.png"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretup.png */ "../../node_modules/@lumino/default-theme/images/caretup.png"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! ../images/caretdown.png */ "../../node_modules/@lumino/default-theme/images/caretdown.png"), __webpack_require__.b); -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -var ___CSS_LOADER_URL_REPLACEMENT_0___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); -var ___CSS_LOADER_URL_REPLACEMENT_1___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); -var ___CSS_LOADER_URL_REPLACEMENT_2___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); -var ___CSS_LOADER_URL_REPLACEMENT_3___ = _packages_nowvis_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ +ace.define("ace/lib/report_error",["require","exports","module"], function(require, exports, module){exports.reportError = function reportError(msg, data) { + var e = new Error(msg); + e["data"] = data; + if (typeof console == "object" && console.error) + console.error(e); + setTimeout(function () { throw e; }); +}; -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ +}); -.lm-ScrollBar[data-orientation='horizontal'] { - min-height: 16px; - max-height: 16px; - min-width: 45px; - border-top: 1px solid #a0a0a0; -} +ace.define("ace/lib/default_english_messages",["require","exports","module"], function(require, exports, module){var defaultEnglishMessages = { + "autocomplete.popup.aria-roledescription": "Autocomplete suggestions", + "autocomplete.popup.aria-label": "Autocomplete suggestions", + "autocomplete.popup.item.aria-roledescription": "item", + "autocomplete.loading": "Loading...", + "editor.scroller.aria-roledescription": "editor", + "editor.scroller.aria-label": "Editor content, press Enter to start editing, press Escape to exit", + "editor.gutter.aria-roledescription": "editor gutter", + "editor.gutter.aria-label": "Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit", + "error-marker.good-state": "Looks good!", + "prompt.recently-used": "Recently used", + "prompt.other-commands": "Other commands", + "prompt.no-matching-commands": "No matching commands", + "search-box.find.placeholder": "Search for", + "search-box.find-all.text": "All", + "search-box.replace.placeholder": "Replace with", + "search-box.replace-next.text": "Replace", + "search-box.replace-all.text": "All", + "search-box.toggle-replace.title": "Toggle Replace mode", + "search-box.toggle-regexp.title": "RegExp Search", + "search-box.toggle-case.title": "CaseSensitive Search", + "search-box.toggle-whole-word.title": "Whole Word Search", + "search-box.toggle-in-selection.title": "Search In Selection", + "search-box.search-counter": "$0 of $1", + "text-input.aria-roledescription": "editor", + "text-input.aria-label": "Cursor at row $0", + "gutter.code-folding.range.aria-label": "Toggle code folding, rows $0 through $1", + "gutter.code-folding.closed.aria-label": "Toggle code folding, rows $0 through $1", + "gutter.code-folding.open.aria-label": "Toggle code folding, row $0", + "gutter.code-folding.closed.title": "Unfold code", + "gutter.code-folding.open.title": "Fold code", + "gutter.annotation.aria-label.error": "Error, read annotations row $0", + "gutter.annotation.aria-label.warning": "Warning, read annotations row $0", + "gutter.annotation.aria-label.info": "Info, read annotations row $0", + "inline-fold.closed.title": "Unfold code", + "gutter-tooltip.aria-label.error.singular": "error", + "gutter-tooltip.aria-label.error.plural": "errors", + "gutter-tooltip.aria-label.warning.singular": "warning", + "gutter-tooltip.aria-label.warning.plural": "warnings", + "gutter-tooltip.aria-label.info.singular": "information message", + "gutter-tooltip.aria-label.info.plural": "information messages", + "gutter.annotation.aria-label.security": "Security finding, read annotations row $0", + "gutter.annotation.aria-label.hint": "Suggestion, read annotations row $0", + "gutter-tooltip.aria-label.security.singular": "security finding", + "gutter-tooltip.aria-label.security.plural": "security findings", + "gutter-tooltip.aria-label.hint.singular": "suggestion", + "gutter-tooltip.aria-label.hint.plural": "suggestions", + "editor.tooltip.disable-editing": "Editing is disabled" +}; +exports.defaultEnglishMessages = defaultEnglishMessages; -.lm-ScrollBar[data-orientation='vertical'] { - min-width: 16px; - max-width: 16px; - min-height: 45px; - border-left: 1px solid #a0a0a0; -} +}); -.lm-ScrollBar-button { - background-color: #f0f0f0; - background-position: center center; - min-height: 15px; - max-height: 15px; - min-width: 15px; - max-width: 15px; +ace.define("ace/lib/app_config",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/report_error","ace/lib/default_english_messages"], function(require, exports, module){"no use strict"; +var oop = require("./oop"); +var EventEmitter = require("./event_emitter").EventEmitter; +var reportError = require("./report_error").reportError; +var defaultEnglishMessages = require("./default_english_messages").defaultEnglishMessages; +var optionsProvider = { + setOptions: function (optList) { + Object.keys(optList).forEach(function (key) { + this.setOption(key, optList[key]); + }, this); + }, + getOptions: function (optionNames) { + var result = {}; + if (!optionNames) { + var options = this.$options; + optionNames = Object.keys(options).filter(function (key) { + return !options[key].hidden; + }); + } + else if (!Array.isArray(optionNames)) { + optionNames = Object.keys(optionNames); + } + optionNames.forEach(function (key) { + result[key] = this.getOption(key); + }, this); + return result; + }, + setOption: function (name, value) { + if (this["$" + name] === value) + return; + var opt = this.$options[name]; + if (!opt) { + return warn('misspelled option "' + name + '"'); + } + if (opt.forwardTo) + return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value); + if (!opt.handlesSet) + this["$" + name] = value; + if (opt && opt.set) + opt.set.call(this, value); + }, + getOption: function (name) { + var opt = this.$options[name]; + if (!opt) { + return warn('misspelled option "' + name + '"'); + } + if (opt.forwardTo) + return this[opt.forwardTo] && this[opt.forwardTo].getOption(name); + return opt && opt.get ? opt.get.call(this) : this["$" + name]; + } +}; +function warn(message) { + if (typeof console != "undefined" && console.warn) + console.warn.apply(console, arguments); } +var messages; +var nlsPlaceholders; +var AppConfig = /** @class */ (function () { + function AppConfig() { + this.$defaultOptions = {}; + messages = defaultEnglishMessages; + nlsPlaceholders = "dollarSigns"; + } + AppConfig.prototype.defineOptions = function (obj, path, options) { + if (!obj.$options) + this.$defaultOptions[path] = obj.$options = {}; + Object.keys(options).forEach(function (key) { + var opt = options[key]; + if (typeof opt == "string") + opt = { forwardTo: opt }; + opt.name || (opt.name = key); + obj.$options[opt.name] = opt; + if ("initialValue" in opt) + obj["$" + opt.name] = opt.initialValue; + }); + oop.implement(obj, optionsProvider); + return this; + }; + AppConfig.prototype.resetOptions = function (obj) { + Object.keys(obj.$options).forEach(function (key) { + var opt = obj.$options[key]; + if ("value" in opt) + obj.setOption(key, opt.value); + }); + }; + AppConfig.prototype.setDefaultValue = function (path, name, value) { + if (!path) { + for (path in this.$defaultOptions) + if (this.$defaultOptions[path][name]) + break; + if (!this.$defaultOptions[path][name]) + return false; + } + var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {}); + if (opts[name]) { + if (opts.forwardTo) + this.setDefaultValue(opts.forwardTo, name, value); + else + opts[name].value = value; + } + }; + AppConfig.prototype.setDefaultValues = function (path, optionHash) { + Object.keys(optionHash).forEach(function (key) { + this.setDefaultValue(path, key, optionHash[key]); + }, this); + }; + AppConfig.prototype.setMessages = function (value, options) { + messages = value; + if (options && options.placeholders) { + nlsPlaceholders = options.placeholders; + } + }; + AppConfig.prototype.nls = function (key, defaultString, params) { + if (!messages[key]) { + warn("No message found for the key '" + key + "' in messages with id " + messages.$id + ", trying to find a translation for the default string '" + defaultString + "'."); + if (!messages[defaultString]) { + warn("No message found for the default string '" + defaultString + "' in the provided messages. Falling back to the default English message."); + } + } + var translated = messages[key] || messages[defaultString] || defaultString; + if (params) { + if (nlsPlaceholders === "dollarSigns") { + translated = translated.replace(/\$(\$|[\d]+)/g, function (_, dollarMatch) { + if (dollarMatch == "$") + return "$"; + return params[dollarMatch]; + }); + } + if (nlsPlaceholders === "curlyBrackets") { + translated = translated.replace(/\{([^\}]+)\}/g, function (_, curlyBracketMatch) { + return params[curlyBracketMatch]; + }); + } + } + return translated; + }; + return AppConfig; +}()); +AppConfig.prototype.warn = warn; +AppConfig.prototype.reportError = reportError; +oop.implement(AppConfig.prototype, EventEmitter); +exports.AppConfig = AppConfig; -.lm-ScrollBar-button:hover { - background-color: #dadada; -} +}); -.lm-ScrollBar-button.lm-mod-active { - background-color: #cdcdcd; -} +ace.define("ace/theme/textmate-css",["require","exports","module"], function(require, exports, module){module.exports = ".ace-tm .ace_gutter {\n background: #f0f0f0;\n color: #333;\n}\n\n.ace-tm .ace_print-margin {\n width: 1px;\n background: #e8e8e8;\n}\n\n.ace-tm .ace_fold {\n background-color: #6B72E6;\n}\n\n.ace-tm {\n background-color: #FFFFFF;\n color: black;\n}\n\n.ace-tm .ace_cursor {\n color: black;\n}\n \n.ace-tm .ace_invisible {\n color: rgb(191, 191, 191);\n}\n\n.ace-tm .ace_storage,\n.ace-tm .ace_keyword {\n color: blue;\n}\n\n.ace-tm .ace_constant {\n color: rgb(197, 6, 11);\n}\n\n.ace-tm .ace_constant.ace_buildin {\n color: rgb(88, 72, 246);\n}\n\n.ace-tm .ace_constant.ace_language {\n color: rgb(88, 92, 246);\n}\n\n.ace-tm .ace_constant.ace_library {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_invalid {\n background-color: rgba(255, 0, 0, 0.1);\n color: red;\n}\n\n.ace-tm .ace_support.ace_function {\n color: rgb(60, 76, 114);\n}\n\n.ace-tm .ace_support.ace_constant {\n color: rgb(6, 150, 14);\n}\n\n.ace-tm .ace_support.ace_type,\n.ace-tm .ace_support.ace_class {\n color: rgb(109, 121, 222);\n}\n\n.ace-tm .ace_keyword.ace_operator {\n color: rgb(104, 118, 135);\n}\n\n.ace-tm .ace_string {\n color: rgb(3, 106, 7);\n}\n\n.ace-tm .ace_comment {\n color: rgb(76, 136, 107);\n}\n\n.ace-tm .ace_comment.ace_doc {\n color: rgb(0, 102, 255);\n}\n\n.ace-tm .ace_comment.ace_doc.ace_tag {\n color: rgb(128, 159, 191);\n}\n\n.ace-tm .ace_constant.ace_numeric {\n color: rgb(0, 0, 205);\n}\n\n.ace-tm .ace_variable {\n color: rgb(49, 132, 149);\n}\n\n.ace-tm .ace_xml-pe {\n color: rgb(104, 104, 91);\n}\n\n.ace-tm .ace_entity.ace_name.ace_function {\n color: #0000A2;\n}\n\n\n.ace-tm .ace_heading {\n color: rgb(12, 7, 255);\n}\n\n.ace-tm .ace_list {\n color:rgb(185, 6, 144);\n}\n\n.ace-tm .ace_meta.ace_tag {\n color:rgb(0, 22, 142);\n}\n\n.ace-tm .ace_string.ace_regex {\n color: rgb(255, 0, 0)\n}\n\n.ace-tm .ace_marker-layer .ace_selection {\n background: rgb(181, 213, 255);\n}\n.ace-tm.ace_multiselect .ace_selection.ace_start {\n box-shadow: 0 0 3px 0px white;\n}\n.ace-tm .ace_marker-layer .ace_step {\n background: rgb(252, 255, 0);\n}\n\n.ace-tm .ace_marker-layer .ace_stack {\n background: rgb(164, 229, 101);\n}\n\n.ace-tm .ace_marker-layer .ace_bracket {\n margin: -1px 0 0 -1px;\n border: 1px solid rgb(192, 192, 192);\n}\n\n.ace-tm .ace_marker-layer .ace_active-line {\n background: rgba(0, 0, 0, 0.07);\n}\n\n.ace-tm .ace_gutter-active-line {\n background-color : #dcdcdc;\n}\n\n.ace-tm .ace_marker-layer .ace_selected-word {\n background: rgb(250, 250, 255);\n border: 1px solid rgb(200, 200, 250);\n}\n\n.ace-tm .ace_indent-guide {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\n}\n\n.ace-tm .ace_indent-guide-active {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\") right repeat-y;\n}\n"; -.lm-ScrollBar-track { - background: #f0f0f0; -} +}); -.lm-ScrollBar-thumb { - background: #cdcdcd; -} +ace.define("ace/theme/textmate",["require","exports","module","ace/theme/textmate-css","ace/lib/dom"], function(require, exports, module){"use strict"; +exports.isDark = false; +exports.cssClass = "ace-tm"; +exports.cssText = require("./textmate-css"); +exports.$id = "ace/theme/textmate"; +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass, false); -.lm-ScrollBar-thumb:hover { - background: #bababa; -} +}); -.lm-ScrollBar-thumb.lm-mod-active { - background: #a0a0a0; -} +ace.define("ace/config",["require","exports","module","ace/lib/lang","ace/lib/net","ace/lib/dom","ace/lib/app_config","ace/theme/textmate"], function(require, exports, module){"no use strict"; +var lang = require("./lib/lang"); +var net = require("./lib/net"); +var dom = require("./lib/dom"); +var AppConfig = require("./lib/app_config").AppConfig; +module.exports = exports = new AppConfig(); +var options = { + packaged: false, + workerPath: null, + modePath: null, + themePath: null, + basePath: "", + suffix: ".js", + $moduleUrls: {}, + loadWorkerFromBlob: true, + sharedPopups: false, + useStrictCSP: null +}; +exports.get = function (key) { + if (!options.hasOwnProperty(key)) + throw new Error("Unknown config key: " + key); + return options[key]; +}; +exports.set = function (key, value) { + if (options.hasOwnProperty(key)) + options[key] = value; + else if (this.setDefaultValue("", key, value) == false) + throw new Error("Unknown config key: " + key); + if (key == "useStrictCSP") + dom.useStrictCSP(value); +}; +exports.all = function () { + return lang.copyObject(options); +}; +exports.$modes = {}; +exports.moduleUrl = function (name, component) { + if (options.$moduleUrls[name]) + return options.$moduleUrls[name]; + var parts = name.split("/"); + component = component || parts[parts.length - 2] || ""; + var sep = component == "snippets" ? "/" : "-"; + var base = parts[parts.length - 1]; + if (component == "worker" && sep == "-") { + var re = new RegExp("^" + component + "[\\-_]|[\\-_]" + component + "$", "g"); + base = base.replace(re, ""); + } + if ((!base || base == component) && parts.length > 1) + base = parts[parts.length - 2]; + var path = options[component + "Path"]; + if (path == null) { + path = options.basePath; + } + else if (sep == "/") { + component = sep = ""; + } + if (path && path.slice(-1) != "/") + path += "/"; + return path + component + sep + base + this.get("suffix"); +}; +exports.setModuleUrl = function (name, subst) { + return options.$moduleUrls[name] = subst; +}; +var loader = function (moduleName, cb) { + if (moduleName === "ace/theme/textmate" || moduleName === "./theme/textmate") + return cb(null, require("./theme/textmate")); + if (customLoader) + return customLoader(moduleName, cb); + console.error("loader is not configured"); +}; +var customLoader; +exports.setLoader = function (cb) { + customLoader = cb; +}; +exports.dynamicModules = Object.create(null); +exports.$loading = {}; +exports.$loaded = {}; +exports.loadModule = function (moduleId, onLoad) { + var loadedModule; + if (Array.isArray(moduleId)) { + var moduleType = moduleId[0]; + var moduleName = moduleId[1]; + } + else if (typeof moduleId == "string") { + var moduleName = moduleId; + } + var load = function (module) { + if (module && !exports.$loading[moduleName]) + return onLoad && onLoad(module); + if (!exports.$loading[moduleName]) + exports.$loading[moduleName] = []; + exports.$loading[moduleName].push(onLoad); + if (exports.$loading[moduleName].length > 1) + return; + var afterLoad = function () { + loader(moduleName, function (err, module) { + if (module) + exports.$loaded[moduleName] = module; + exports._emit("load.module", { name: moduleName, module: module }); + var listeners = exports.$loading[moduleName]; + exports.$loading[moduleName] = null; + listeners.forEach(function (onLoad) { + onLoad && onLoad(module); + }); + }); + }; + if (!exports.get("packaged")) + return afterLoad(); + net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); + reportErrorIfPathIsNotConfigured(); + }; + if (exports.dynamicModules[moduleName]) { + exports.dynamicModules[moduleName]().then(function (module) { + if (module.default) { + load(module.default); + } + else { + load(module); + } + }); + } + else { + try { + loadedModule = this.$require(moduleName); + } + catch (e) { } + load(loadedModule || exports.$loaded[moduleName]); + } +}; +exports.$require = function (moduleName) { + if (typeof module["require"] == "function") { + var req = "require"; + return module[req](moduleName); + } +}; +exports.setModuleLoader = function (moduleName, onLoad) { + exports.dynamicModules[moduleName] = onLoad; +}; +var reportErrorIfPathIsNotConfigured = function () { + if (!options.basePath && !options.workerPath + && !options.modePath && !options.themePath + && !Object.keys(options.$moduleUrls).length) { + console.error("Unable to infer path to ace from script src,", "use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes", "or with webpack use ace/webpack-resolver"); + reportErrorIfPathIsNotConfigured = function () { }; + } +}; +exports.version = "1.43.2"; -.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb { - height: 100%; - min-width: 15px; - border-left: 1px solid #a0a0a0; - border-right: 1px solid #a0a0a0; -} +}); -.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb { - width: 100%; - min-height: 15px; - border-top: 1px solid #a0a0a0; - border-bottom: 1px solid #a0a0a0; -} +ace.define("ace/loader_build",["require","exports","module","ace/lib/fixoldbrowsers","ace/config"], function(require, exports, module) { +"use strict"; -.lm-ScrollBar[data-orientation='horizontal'] - .lm-ScrollBar-button[data-action='decrement'] { - background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___}); -} +require("./lib/fixoldbrowsers"); +var config = require("./config"); +config.setLoader(function(moduleName, cb) { + require([moduleName], function(module) { + cb(null, module); + }); +}); -.lm-ScrollBar[data-orientation='horizontal'] - .lm-ScrollBar-button[data-action='increment'] { - background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___}); -} +var global = (function() { + return this || typeof window != "undefined" && window; +})(); -.lm-ScrollBar[data-orientation='vertical'] - .lm-ScrollBar-button[data-action='decrement'] { - background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___}); -} +module.exports = function(ace) { + config.init = init; + config.$require = require; + ace.require = require; -.lm-ScrollBar[data-orientation='vertical'] - .lm-ScrollBar-button[data-action='increment'] { - background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___}); -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/scrollbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,8BAA8B;AAChC;;AAEA;EACE,yBAAyB;EACzB,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,gCAAgC;AAClC;;AAEA;;EAEE,yDAA8C;AAChD;;AAEA;;EAEE,yDAA+C;AACjD;;AAEA;;EAEE,yDAA4C;AAC9C;;AAEA;;EAEE,yDAA8C;AAChD","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n min-height: 16px;\n max-height: 16px;\n min-width: 45px;\n border-top: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n min-width: 16px;\n max-width: 16px;\n min-height: 45px;\n border-left: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar-button {\n background-color: #f0f0f0;\n background-position: center center;\n min-height: 15px;\n max-height: 15px;\n min-width: 15px;\n max-width: 15px;\n}\n\n.lm-ScrollBar-button:hover {\n background-color: #dadada;\n}\n\n.lm-ScrollBar-button.lm-mod-active {\n background-color: #cdcdcd;\n}\n\n.lm-ScrollBar-track {\n background: #f0f0f0;\n}\n\n.lm-ScrollBar-thumb {\n background: #cdcdcd;\n}\n\n.lm-ScrollBar-thumb:hover {\n background: #bababa;\n}\n\n.lm-ScrollBar-thumb.lm-mod-active {\n background: #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\n height: 100%;\n min-width: 15px;\n border-left: 1px solid #a0a0a0;\n border-right: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\n width: 100%;\n min-height: 15px;\n border-top: 1px solid #a0a0a0;\n border-bottom: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(../images/caretleft.png);\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(../images/caretright.png);\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(../images/caretup.png);\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(../images/caretdown.png);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + if (true) + ace.define = __webpack_require__.amdD; +}; +init(true);function init(packaged) { + if (!global || !global.document) + return; + + config.set("packaged", packaged || require.packaged || module.packaged || (global.define && __webpack_require__.amdD.packaged)); -/***/ }), + var scriptOptions = {}; + var scriptUrl = ""; + var currentScript = (document.currentScript || document._currentScript ); // native or polyfill + var currentDocument = currentScript && currentScript.ownerDocument || document; + + if (currentScript && currentScript.src) { + scriptUrl = currentScript.src.split(/[?#]/)[0].split("/").slice(0, -1).join("/") || ""; + } + + var scripts = currentDocument.getElementsByTagName("script"); + for (var i=0; i { + var src = script.src || script.getAttribute("src"); + if (!src) + continue; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports + var attributes = script.attributes; + for (var j=0, l=attributes.length; j < l; j++) { + var attr = attributes[j]; + if (attr.name.indexOf("data-ace-") === 0) { + scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, ""))] = attr.value; + } + } + var m = src.match(/^(.*)\/ace([\-.]\w+)?\.js(\?|$)/); + if (m) + scriptUrl = m[1]; + } -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ + if (scriptUrl) { + scriptOptions.base = scriptOptions.base || scriptUrl; + scriptOptions.packaged = true; + } -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ + scriptOptions.basePath = scriptOptions.base; + scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base; + scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base; + scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base; + delete scriptOptions.base; -.lm-TabBar { - min-height: 24px; - max-height: 24px; + for (var key in scriptOptions) + if (typeof scriptOptions[key] !== "undefined") + config.set(key, scriptOptions[key]); } -.lm-TabBar-content { - min-width: 0; - min-height: 0; - align-items: flex-end; - border-bottom: 1px solid #c0c0c0; +function deHyphenate(str) { + return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); }); } +}); -.lm-TabBar-tab { - padding: 0px 10px; - background: #e5e5e5; - border: 1px solid #c0c0c0; - border-bottom: none; - font: - 12px Helvetica, - Arial, - sans-serif; - flex: 0 1 125px; - min-height: 20px; - max-height: 20px; - min-width: 35px; - margin-left: -1px; - line-height: 20px; -} +ace.define("ace/range",["require","exports","module"], function(require, exports, module){"use strict"; +var Range = /** @class */ (function () { + function Range(startRow, startColumn, endRow, endColumn) { + this.start = { + row: startRow, + column: startColumn + }; + this.end = { + row: endRow, + column: endColumn + }; + } + Range.prototype.isEqual = function (range) { + return this.start.row === range.start.row && + this.end.row === range.end.row && + this.start.column === range.start.column && + this.end.column === range.end.column; + }; + Range.prototype.toString = function () { + return ("Range: [" + this.start.row + "/" + this.start.column + + "] -> [" + this.end.row + "/" + this.end.column + "]"); + }; + Range.prototype.contains = function (row, column) { + return this.compare(row, column) == 0; + }; + Range.prototype.compareRange = function (range) { + var cmp, end = range.end, start = range.start; + cmp = this.compare(end.row, end.column); + if (cmp == 1) { + cmp = this.compare(start.row, start.column); + if (cmp == 1) { + return 2; + } + else if (cmp == 0) { + return 1; + } + else { + return 0; + } + } + else if (cmp == -1) { + return -2; + } + else { + cmp = this.compare(start.row, start.column); + if (cmp == -1) { + return -1; + } + else if (cmp == 1) { + return 42; + } + else { + return 0; + } + } + }; + Range.prototype.comparePoint = function (p) { + return this.compare(p.row, p.column); + }; + Range.prototype.containsRange = function (range) { + return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; + }; + Range.prototype.intersects = function (range) { + var cmp = this.compareRange(range); + return (cmp == -1 || cmp == 0 || cmp == 1); + }; + Range.prototype.isEnd = function (row, column) { + return this.end.row == row && this.end.column == column; + }; + Range.prototype.isStart = function (row, column) { + return this.start.row == row && this.start.column == column; + }; + Range.prototype.setStart = function (row, column) { + if (typeof row == "object") { + this.start.column = row.column; + this.start.row = row.row; + } + else { + this.start.row = row; + this.start.column = column; + } + }; + Range.prototype.setEnd = function (row, column) { + if (typeof row == "object") { + this.end.column = row.column; + this.end.row = row.row; + } + else { + this.end.row = row; + this.end.column = column; + } + }; + Range.prototype.inside = function (row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column) || this.isStart(row, column)) { + return false; + } + else { + return true; + } + } + return false; + }; + Range.prototype.insideStart = function (row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column)) { + return false; + } + else { + return true; + } + } + return false; + }; + Range.prototype.insideEnd = function (row, column) { + if (this.compare(row, column) == 0) { + if (this.isStart(row, column)) { + return false; + } + else { + return true; + } + } + return false; + }; + Range.prototype.compare = function (row, column) { + if (!this.isMultiLine()) { + if (row === this.start.row) { + return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); + } + } + if (row < this.start.row) + return -1; + if (row > this.end.row) + return 1; + if (this.start.row === row) + return column >= this.start.column ? 0 : -1; + if (this.end.row === row) + return column <= this.end.column ? 0 : 1; + return 0; + }; + Range.prototype.compareStart = function (row, column) { + if (this.start.row == row && this.start.column == column) { + return -1; + } + else { + return this.compare(row, column); + } + }; + Range.prototype.compareEnd = function (row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } + else { + return this.compare(row, column); + } + }; + Range.prototype.compareInside = function (row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } + else if (this.start.row == row && this.start.column == column) { + return -1; + } + else { + return this.compare(row, column); + } + }; + Range.prototype.clipRows = function (firstRow, lastRow) { + if (this.end.row > lastRow) + var end = { row: lastRow + 1, column: 0 }; + else if (this.end.row < firstRow) + var end = { row: firstRow, column: 0 }; + if (this.start.row > lastRow) + var start = { row: lastRow + 1, column: 0 }; + else if (this.start.row < firstRow) + var start = { row: firstRow, column: 0 }; + return Range.fromPoints(start || this.start, end || this.end); + }; + Range.prototype.extend = function (row, column) { + var cmp = this.compare(row, column); + if (cmp == 0) + return this; + else if (cmp == -1) + var start = { row: row, column: column }; + else + var end = { row: row, column: column }; + return Range.fromPoints(start || this.start, end || this.end); + }; + Range.prototype.isEmpty = function () { + return (this.start.row === this.end.row && this.start.column === this.end.column); + }; + Range.prototype.isMultiLine = function () { + return (this.start.row !== this.end.row); + }; + Range.prototype.clone = function () { + return Range.fromPoints(this.start, this.end); + }; + Range.prototype.collapseRows = function () { + if (this.end.column == 0) + return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0); + else + return new Range(this.start.row, 0, this.end.row, 0); + }; + Range.prototype.toScreenRange = function (session) { + var screenPosStart = session.documentToScreenPosition(this.start); + var screenPosEnd = session.documentToScreenPosition(this.end); + return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column); + }; + Range.prototype.moveBy = function (row, column) { + this.start.row += row; + this.start.column += column; + this.end.row += row; + this.end.column += column; + }; + return Range; +}()); +Range.fromPoints = function (start, end) { + return new Range(start.row, start.column, end.row, end.column); +}; +Range.comparePoints = function (p1, p2) { + return p1.row - p2.row || p1.column - p2.column; +}; +exports.Range = Range; -.lm-TabBar-tabLabel .lm-TabBar-tabInput { - padding: 0px; - border: 0px; - font: - 12px Helvetica, - Arial, - sans-serif; -} +}); -.lm-TabBar-tab.lm-mod-current { - background: white; +ace.define("ace/lib/keys",["require","exports","module","ace/lib/oop"], function(require, exports, module){"use strict"; +var oop = require("./oop"); +var Keys = { + MODIFIER_KEYS: { + 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta', + 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu' + }, + KEY_MODS: { + "ctrl": 1, "alt": 2, "option": 2, "shift": 4, + "super": 8, "meta": 8, "command": 8, "cmd": 8, + "control": 1 + }, + FUNCTION_KEYS: { + 8: "Backspace", + 9: "Tab", + 13: "Return", + 19: "Pause", + 27: "Esc", + 32: "Space", + 33: "PageUp", + 34: "PageDown", + 35: "End", + 36: "Home", + 37: "Left", + 38: "Up", + 39: "Right", + 40: "Down", + 44: "Print", + 45: "Insert", + 46: "Delete", + '-13': "NumpadEnter", + 144: "Numlock", + 145: "Scrolllock" + }, + PRINTABLE_KEYS: { + 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.', + 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', + 219: '[', 220: '\\', 221: ']', 222: "'", 111: '/', 106: '*' + } +}; +var codeToKeyCode = { + Command: 224, + Backspace: 8, + Tab: 9, + Return: 13, + Enter: 13, + Pause: 19, + Escape: 27, + PageUp: 33, + PageDown: 34, + End: 35, + Home: 36, + Insert: 45, + Delete: 46, + ArrowLeft: 37, + ArrowUp: 38, + ArrowRight: 39, + ArrowDown: 40, + Backquote: 192, + Minus: 189, + Equal: 187, + BracketLeft: 219, + Backslash: 220, + BracketRight: 221, + Semicolon: 186, + Quote: 222, + Comma: 188, + Period: 190, + Slash: 191, + Space: 32, + NumpadAdd: 107, + NumpadDecimal: 110, + NumpadSubtract: 109, + NumpadDivide: 111, + NumpadMultiply: 106 +}; +for (var i = 0; i < 10; i++) { + codeToKeyCode["Digit" + i] = 48 + i; + codeToKeyCode["Numpad" + i] = 96 + i; + Keys.PRINTABLE_KEYS[48 + i] = "" + i; + Keys.FUNCTION_KEYS[96 + i] = "Numpad" + i; } - -.lm-TabBar-tab:hover:not(.lm-mod-current) { - background: #f0f0f0; +for (var i = 65; i < 91; i++) { + var chr = String.fromCharCode(i + 32); + codeToKeyCode["Key" + chr.toUpperCase()] = i; + Keys.PRINTABLE_KEYS[i] = chr; } - -.lm-TabBar-tab:first-child { - margin-left: 0; +for (var i = 1; i < 13; i++) { + codeToKeyCode["F" + i] = 111 + i; + Keys.FUNCTION_KEYS[111 + i] = "F" + i; } - -.lm-TabBar-tab.lm-mod-current { - min-height: 23px; - max-height: 23px; - transform: translateY(1px); +var modifiers = { + Shift: 16, + Control: 17, + Alt: 18, + Meta: 224 +}; +for (var mod in modifiers) { + codeToKeyCode[mod] = codeToKeyCode[mod + "Left"] + = codeToKeyCode[mod + "Right"] = modifiers[mod]; } - -.lm-TabBar-tabIcon, -.lm-TabBar-tabLabel, -.lm-TabBar-tabCloseIcon { - display: inline-block; +exports.$codeToKeyCode = codeToKeyCode; +Keys.PRINTABLE_KEYS[173] = '-'; +for (var j in Keys.FUNCTION_KEYS) { + var name = Keys.FUNCTION_KEYS[j].toLowerCase(); + Keys[name] = parseInt(j, 10); } - -.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon { - margin-left: 4px; +for (var j in Keys.PRINTABLE_KEYS) { + var name = Keys.PRINTABLE_KEYS[j].toLowerCase(); + Keys[name] = parseInt(j, 10); } +oop.mixin(Keys, Keys.MODIFIER_KEYS); +oop.mixin(Keys, Keys.PRINTABLE_KEYS); +oop.mixin(Keys, Keys.FUNCTION_KEYS); +Keys.enter = Keys["return"]; +Keys.escape = Keys.esc; +Keys.del = Keys["delete"]; +(function () { + var mods = ["cmd", "ctrl", "alt", "shift"]; + for (var i = Math.pow(2, mods.length); i--;) { + Keys.KEY_MODS[i] = mods.filter(function (x) { + return i & Keys.KEY_MODS[x]; + }).join("-") + "-"; + } +})(); +Keys.KEY_MODS[0] = ""; +Keys.KEY_MODS[-1] = "input-"; +oop.mixin(exports, Keys); +exports.default = exports; +exports.keyCodeToString = function (keyCode) { + var keyString = Keys[keyCode]; + if (typeof keyString != "string") + keyString = String.fromCharCode(keyCode); + return keyString.toLowerCase(); +}; -.lm-TabBar .lm-TabBar-addButton { - padding: 0px 6px; - border-bottom: 1px solid #c0c0c0; -} +}); -.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before { - content: '\\f00d'; - font-family: FontAwesome; +ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module){"use strict"; var keys = require("./keys"); +var useragent = require("./useragent"); +var pressedKeys = null; +var ts = 0; +var activeListenerOptions; +function detectListenerOptionsSupport() { + activeListenerOptions = false; + try { + document.createComment("").addEventListener("test", function () { }, { + get passive() { + activeListenerOptions = { passive: false }; + return true; + } + }); + } + catch (e) { } } - -.lm-TabBar .lm-TabBar-addButton:before { - content: '\\f067'; - font-family: FontAwesome; +function getListenerOptions() { + if (activeListenerOptions == undefined) + detectListenerOptionsSupport(); + return activeListenerOptions; } - -.lm-TabBar-tab.lm-mod-drag-image { - min-height: 23px; - max-height: 23px; - min-width: 125px; - border: none; - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); +function EventListener(elem, type, callback) { + this.elem = elem; + this.type = type; + this.callback = callback; } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/default-theme/style/tabbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX;;;cAGY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;AAEA;;;EAGE,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;AAC5C","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.lm-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab {\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n flex: 0 1 125px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n padding: 0px;\n border: 0px;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n background: white;\n}\n\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\n background: #f0f0f0;\n}\n\n.lm-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabLabel,\n.lm-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n.lm-TabBar .lm-TabBar-addButton {\n padding: 0px 6px;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\n content: '\\f00d';\n font-family: FontAwesome;\n}\n\n.lm-TabBar .lm-TabBar-addButton:before {\n content: '\\f067';\n font-family: FontAwesome;\n}\n\n.lm-TabBar-tab.lm-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css": -/*!*************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/dragdrop/style/index.css ***! - \*************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-cursor-backdrop { - top: 0px; - left: 0px; - position: fixed; - width: 200px; - height: 200px; - margin-top: -100px; - margin-left: -100px; - will-change: transform; - z-index: 100; - scrollbar-width: none; - -ms-overflow-style: none; - overflow: scroll; +EventListener.prototype.destroy = function () { + removeListener(this.elem, this.type, this.callback); + this.elem = this.type = this.callback = undefined; +}; +var addListener = exports.addListener = function (elem, type, callback, destroyer) { + elem.addEventListener(type, callback, getListenerOptions()); + if (destroyer) + destroyer.$toDestroy.push(new EventListener(elem, type, callback)); +}; +var removeListener = exports.removeListener = function (elem, type, callback) { + elem.removeEventListener(type, callback, getListenerOptions()); +}; +exports.stopEvent = function (e) { + exports.stopPropagation(e); + exports.preventDefault(e); + return false; +}; +exports.stopPropagation = function (e) { + if (e.stopPropagation) + e.stopPropagation(); +}; +exports.preventDefault = function (e) { + if (e.preventDefault) + e.preventDefault(); +}; +exports.getButton = function (e) { + if (e.type == "dblclick") + return 0; + if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey))) + return 2; + return e.button; +}; +exports.capture = function (el, eventHandler, releaseCaptureHandler) { + var ownerDocument = el && el.ownerDocument || document; + function onMouseUp(e) { + eventHandler && eventHandler(e); + releaseCaptureHandler && releaseCaptureHandler(e); + removeListener(ownerDocument, "mousemove", eventHandler); + removeListener(ownerDocument, "mouseup", onMouseUp); + removeListener(ownerDocument, "dragstart", onMouseUp); + } + addListener(ownerDocument, "mousemove", eventHandler); + addListener(ownerDocument, "mouseup", onMouseUp); + addListener(ownerDocument, "dragstart", onMouseUp); + return onMouseUp; +}; +exports.addMouseWheelListener = function (el, callback, destroyer) { + addListener(el, "wheel", function (e) { + var factor = 0.15; + var deltaX = e.deltaX || 0; + var deltaY = e.deltaY || 0; + switch (e.deltaMode) { + case e.DOM_DELTA_PIXEL: + e.wheelX = deltaX * factor; + e.wheelY = deltaY * factor; + break; + case e.DOM_DELTA_LINE: + var linePixels = 15; + e.wheelX = deltaX * linePixels; + e.wheelY = deltaY * linePixels; + break; + case e.DOM_DELTA_PAGE: + var pagePixels = 150; + e.wheelX = deltaX * pagePixels; + e.wheelY = deltaY * pagePixels; + break; + } + callback(e); + }, destroyer); +}; +exports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) { + var clicks = 0; + var startX, startY, timer; + var eventNames = { + 2: "dblclick", + 3: "tripleclick", + 4: "quadclick" + }; + function onMousedown(e) { + if (exports.getButton(e) !== 0) { + clicks = 0; + } + else if (e.detail > 1) { + clicks++; + if (clicks > 4) + clicks = 1; + } + else { + clicks = 1; + } + if (useragent.isIE) { + var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; + if (!timer || isNewClick) + clicks = 1; + if (timer) + clearTimeout(timer); + timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600); + if (clicks == 1) { + startX = e.clientX; + startY = e.clientY; + } + } + e._clicks = clicks; + eventHandler[callbackName]("mousedown", e); + if (clicks > 4) + clicks = 0; + else if (clicks > 1) + return eventHandler[callbackName](eventNames[clicks], e); + } + if (!Array.isArray(elements)) + elements = [elements]; + elements.forEach(function (el) { + addListener(el, "mousedown", onMousedown, destroyer); + }); +}; +function getModifierHash(e) { + return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); } - -.lm-cursor-backdrop::after { - content: ''; - height: 1200px; - width: 1200px; - display: block; +exports.getModifierString = function (e) { + return keys.KEY_MODS[getModifierHash(e)]; +}; +function normalizeCommandKeys(callback, e, keyCode) { + var hashId = getModifierHash(e); + if (!keyCode && e.code) { + keyCode = keys.$codeToKeyCode[e.code] || keyCode; + } + if (!useragent.isMac && pressedKeys) { + if (e.getModifierState && (e.getModifierState("OS") || e.getModifierState("Win"))) + hashId |= 8; + if (pressedKeys.altGr) { + if ((3 & hashId) != 3) + pressedKeys.altGr = 0; + else + return; + } + if (keyCode === 18 || keyCode === 17) { + var location = e.location; + if (keyCode === 17 && location === 1) { + if (pressedKeys[keyCode] == 1) + ts = e.timeStamp; + } + else if (keyCode === 18 && hashId === 3 && location === 2) { + var dt = e.timeStamp - ts; + if (dt < 50) + pressedKeys.altGr = true; + } + } + } + if (keyCode in keys.MODIFIER_KEYS) { + keyCode = -1; + } + if (!hashId && keyCode === 13) { + if (e.location === 3) { + callback(e, hashId, -keyCode); + if (e.defaultPrevented) + return; + } + } + if (useragent.isChromeOS && hashId & 8) { + callback(e, hashId, keyCode); + if (e.defaultPrevented) + return; + else + hashId &= ~8; + } + if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { + return false; + } + return callback(e, hashId, keyCode); } - -.lm-cursor-backdrop::-webkit-scrollbar { - display: none; +exports.addCommandKeyListener = function (el, callback, destroyer) { + var lastDefaultPrevented = null; + addListener(el, "keydown", function (e) { + pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1; + var result = normalizeCommandKeys(callback, e, e.keyCode); + lastDefaultPrevented = e.defaultPrevented; + return result; + }, destroyer); + addListener(el, "keypress", function (e) { + if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { + exports.stopEvent(e); + lastDefaultPrevented = null; + } + }, destroyer); + addListener(el, "keyup", function (e) { + pressedKeys[e.keyCode] = null; + }, destroyer); + if (!pressedKeys) { + resetPressedKeys(); + addListener(window, "focus", resetPressedKeys); + } +}; +function resetPressedKeys() { + pressedKeys = Object.create(null); } - -.lm-mod-drag-image { - top: 0px; - left: 0px; - will-change: transform; +if (typeof window == "object" && window.postMessage && !useragent.isOldIE) { + var postMessageId = 1; + exports.nextTick = function (callback, win) { + win = win || window; + var messageName = "zero-timeout-message-" + (postMessageId++); + var listener = function (e) { + if (e.data == messageName) { + exports.stopPropagation(e); + removeListener(win, "message", listener); + callback(); + } + }; + addListener(win, "message", listener); + win.postMessage(messageName, "*"); + }; } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/dragdrop/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,QAAQ;EACR,SAAS;EACT,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,wBAAwB;EACxB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,SAAS;EACT,sBAAsB;AACxB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-cursor-backdrop {\n top: 0px;\n left: 0px;\n position: fixed;\n width: 200px;\n height: 200px;\n margin-top: -100px;\n margin-left: -100px;\n will-change: transform;\n z-index: 100;\n scrollbar-width: none;\n -ms-overflow-style: none;\n overflow: scroll;\n}\n\n.lm-cursor-backdrop::after {\n content: '';\n height: 1200px;\n width: 1200px;\n display: block;\n}\n\n.lm-cursor-backdrop::-webkit-scrollbar {\n display: none;\n}\n\n.lm-mod-drag-image {\n top: 0px;\n left: 0px;\n will-change: transform;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - +exports.$idleBlocked = false; +exports.onIdle = function (cb, timeout) { + return setTimeout(function handler() { + if (!exports.$idleBlocked) { + cb(); + } + else { + setTimeout(handler, 100); + } + }, timeout); +}; +exports.$idleBlockId = null; +exports.blockIdle = function (delay) { + if (exports.$idleBlockId) + clearTimeout(exports.$idleBlockId); + exports.$idleBlocked = true; + exports.$idleBlockId = setTimeout(function () { + exports.$idleBlocked = false; + }, delay || 100); +}; +exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame + || window["mozRequestAnimationFrame"] + || window["webkitRequestAnimationFrame"] + || window["msRequestAnimationFrame"] + || window["oRequestAnimationFrame"]); +if (exports.nextFrame) + exports.nextFrame = exports.nextFrame.bind(window); +else + exports.nextFrame = function (callback) { + setTimeout(callback, 17); + }; -/***/ }), +}); -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css": -/*!*********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css ***! - \*********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +ace.define("ace/clipboard",["require","exports","module"], function(require, exports, module){"use strict"; +var $cancelT; +module.exports = { + lineMode: false, + pasteCancelled: function () { + if ($cancelT && $cancelT > Date.now() - 50) + return true; + return $cancelT = false; + }, + cancel: function () { + $cancelT = Date.now(); + } +}; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports +}); +ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/config","ace/lib/useragent","ace/lib/dom","ace/lib/lang","ace/clipboard","ace/lib/keys"], function(require, exports, module){"use strict"; +var event = require("../lib/event"); +var nls = require("../config").nls; +var useragent = require("../lib/useragent"); +var dom = require("../lib/dom"); +var lang = require("../lib/lang"); +var clipboard = require("../clipboard"); +var BROKEN_SETDATA = useragent.isChrome < 18; +var USE_IE_MIME_TYPE = useragent.isIE; +var HAS_FOCUS_ARGS = useragent.isChrome > 63; +var MAX_LINE_LENGTH = 400; +var KEYS = require("../lib/keys"); +var MODS = KEYS.KEY_MODS; +var isIOS = useragent.isIOS; +var valueResetRegex = isIOS ? /\s/ : /\n/; +var isMobile = useragent.isMobile; +var TextInput = /** @class */ (function () { + function TextInput(parentNode, host) { + var _this = this; + this.host = host; + this.text = dom.createElement("textarea"); + this.text.className = "ace_text-input"; + this.text.setAttribute("wrap", "off"); + this.text.setAttribute("autocorrect", "off"); + this.text.setAttribute("autocapitalize", "off"); + this.text.setAttribute("spellcheck", "false"); + this.text.style.opacity = "0"; + parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false; + this.pasted = false; + this.inComposition = false; + this.sendingText = false; + this.tempStyle = ''; + if (!isMobile) + this.text.style.fontSize = "1px"; + this.commandMode = false; + this.ignoreFocusEvents = false; + this.lastValue = ""; + this.lastSelectionStart = 0; + this.lastSelectionEnd = 0; + this.lastRestoreEnd = 0; + this.rowStart = Number.MAX_SAFE_INTEGER; + this.rowEnd = Number.MIN_SAFE_INTEGER; + this.numberOfExtraLines = 0; + try { + this.$isFocused = document.activeElement === this.text; + } + catch (e) { + } + this.cancelComposition = this.cancelComposition.bind(this); + this.setAriaOptions({ role: "textbox" }); + event.addListener(this.text, "blur", function (e) { + if (_this.ignoreFocusEvents) + return; + host.onBlur(e); + _this.$isFocused = false; + }, host); + event.addListener(this.text, "focus", function (e) { + if (_this.ignoreFocusEvents) + return; + _this.$isFocused = true; + if (useragent.isEdge) { + try { + if (!document.hasFocus()) + return; + } + catch (e) { + } + } + host.onFocus(e); + if (useragent.isEdge) + setTimeout(_this.resetSelection.bind(_this)); + else + _this.resetSelection(); + }, host); this.$focusScroll = false; + host.on("beforeEndOperation", function () { + var curOp = host.curOp; + var commandName = curOp && curOp.command && curOp.command.name; + if (commandName == "insertstring") + return; + var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged); + if (_this.inComposition && isUserAction) { + _this.lastValue = _this.text.value = ""; + _this.onCompositionEnd(); + } + _this.resetSelection(); + }); + host.on("changeSelection", this.setAriaLabel.bind(this)); + this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection; + if (this.$isFocused) + host.onFocus(); + this.inputHandler = null; + this.afterContextMenu = false; + event.addCommandKeyListener(this.text, function (e, hashId, keyCode) { + if (_this.inComposition) + return; + return host.onCommandKey(e, hashId, keyCode); + }, host); + event.addListener(this.text, "select", this.onSelect.bind(this), host); + event.addListener(this.text, "input", this.onInput.bind(this), host); + event.addListener(this.text, "cut", this.onCut.bind(this), host); + event.addListener(this.text, "copy", this.onCopy.bind(this), host); + event.addListener(this.text, "paste", this.onPaste.bind(this), host); + if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) { + event.addListener(parentNode, "keydown", function (e) { + if ((useragent.isMac && !e.metaKey) || !e.ctrlKey) + return; + switch (e.keyCode) { + case 67: + _this.onCopy(e); + break; + case 86: + _this.onPaste(e); + break; + case 88: + _this.onCut(e); + break; + } + }, host); + } + this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this + event.addListener(this.text, "compositionstart", this.onCompositionStart.bind(this), host); + event.addListener(this.text, "compositionupdate", this.onCompositionUpdate.bind(this), host); + event.addListener(this.text, "keyup", this.onKeyup.bind(this), host); + event.addListener(this.text, "keydown", this.syncComposition.bind(this), host); + event.addListener(this.text, "compositionend", this.onCompositionEnd.bind(this), host); + this.closeTimeout; + event.addListener(this.text, "mouseup", this.$onContextMenu.bind(this), host); + event.addListener(this.text, "mousedown", function (e) { + e.preventDefault(); + _this.onContextMenuClose(); + }, host); + event.addListener(host.renderer.scroller, "contextmenu", this.$onContextMenu.bind(this), host); + event.addListener(this.text, "contextmenu", this.$onContextMenu.bind(this), host); + if (isIOS) + this.addIosSelectionHandler(parentNode, host, this.text); + } + TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) { + var _this = this; + var typingResetTimeout = null; + var typing = false; + text.addEventListener("keydown", function (e) { + if (typingResetTimeout) + clearTimeout(typingResetTimeout); + typing = true; + }, true); + text.addEventListener("keyup", function (e) { + typingResetTimeout = setTimeout(function () { + typing = false; + }, 100); + }, true); + var detectArrowKeys = function (e) { + if (document.activeElement !== text) + return; + if (typing || _this.inComposition || host.$mouseHandler.isMousePressed) + return; + if (_this.copied) { + return; + } + var selectionStart = text.selectionStart; + var selectionEnd = text.selectionEnd; + var key = null; + var modifier = 0; + if (selectionStart == 0) { + key = KEYS.up; + } + else if (selectionStart == 1) { + key = KEYS.home; + } + else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == "\n") { + key = KEYS.end; + } + else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == " ") { + key = KEYS.left; + modifier = MODS.option; + } + else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart + && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) { + key = KEYS.left; + } + else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split("\n").length > 2) { + key = KEYS.down; + } + else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == " ") { + key = KEYS.right; + modifier = MODS.option; + } + else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd + && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) { + key = KEYS.right; + } + if (selectionStart !== selectionEnd) + modifier |= MODS.shift; + if (key) { + var result = host.onCommandKey({}, modifier, key); + if (!result && host.commands) { + key = KEYS.keyCodeToString(key); + var command = host.commands.findKeyCommand(modifier, key); + if (command) + host.execCommand(command); + } + _this.lastSelectionStart = selectionStart; + _this.lastSelectionEnd = selectionEnd; + _this.resetSelection(""); + } + }; + document.addEventListener("selectionchange", detectArrowKeys); + host.on("destroy", function () { + document.removeEventListener("selectionchange", detectArrowKeys); + }); + }; + TextInput.prototype.onContextMenuClose = function () { + var _this = this; + clearTimeout(this.closeTimeout); + this.closeTimeout = setTimeout(function () { + if (_this.tempStyle) { + _this.text.style.cssText = _this.tempStyle; + _this.tempStyle = ''; + } + _this.host.renderer.$isMousePressed = false; + if (_this.host.renderer.$keepTextAreaAtCursor) + _this.host.renderer.$moveTextAreaToCursor(); + }, 0); + }; + TextInput.prototype.$onContextMenu = function (e) { + this.host.textInput.onContextMenu(e); + this.onContextMenuClose(); + }; + TextInput.prototype.onKeyup = function (e) { + if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) { + if (!this.inComposition) + this.lastValue = this.text.value; + this.lastSelectionStart = this.lastSelectionEnd = -1; + this.resetSelection(); + } + this.syncComposition(); + }; + TextInput.prototype.cancelComposition = function () { + this.ignoreFocusEvents = true; + this.text.blur(); + this.text.focus(); + this.ignoreFocusEvents = false; + }; + TextInput.prototype.onCompositionStart = function (e) { + if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly) + return; + this.inComposition = {}; + if (this.commandMode) + return; + if (e.data) + this.inComposition.useTextareaForIME = false; + setTimeout(this.onCompositionUpdate.bind(this), 0); + this.host._signal("compositionStart"); + this.host.on("mousedown", this.cancelComposition); //TODO: + var range = this.host.getSelectionRange(); + range.end.row = range.start.row; + range.end.column = range.start.column; + this.inComposition.markerRange = range; + this.inComposition.selectionStart = this.lastSelectionStart; + this.host.onCompositionStart(this.inComposition); + if (this.inComposition.useTextareaForIME) { + this.lastValue = this.text.value = ""; + this.lastSelectionStart = 0; + this.lastSelectionEnd = 0; + } + else { + if (this.text.msGetInputContext) + this.inComposition.context = this.text.msGetInputContext(); + if (this.text.getInputContext) + this.inComposition.context = this.text.getInputContext(); + } + }; + TextInput.prototype.onCompositionUpdate = function () { + if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly) + return; + if (this.commandMode) + return this.cancelComposition(); + if (this.inComposition.useTextareaForIME) { + this.host.onCompositionUpdate(this.text.value); + } + else { + var data = this.text.value; + this.sendText(data); + if (this.inComposition.markerRange) { + if (this.inComposition.context) { + this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset; + } + this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column + + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd; + } + } + }; + TextInput.prototype.onCompositionEnd = function (e) { + if (!this.host.onCompositionEnd || this.host.$readOnly) + return; + this.inComposition = false; + this.host.onCompositionEnd(); + this.host.off("mousedown", this.cancelComposition); + if (e) + this.onInput(); + }; + TextInput.prototype.onCut = function (e) { + this.doCopy(e, true); + }; + TextInput.prototype.onCopy = function (e) { + this.doCopy(e, false); + }; + TextInput.prototype.onPaste = function (e) { + var data = this.handleClipboardData(e); + if (clipboard.pasteCancelled()) + return; + if (typeof data == "string") { + if (data) + this.host.onPaste(data, e); + if (useragent.isIE) + setTimeout(this.resetSelection); + event.preventDefault(e); + } + else { + this.text.value = ""; + this.pasted = true; + } + }; + TextInput.prototype.doCopy = function (e, isCut) { + var _this = this; + var data = this.host.getCopyText(); + if (!data) + return event.preventDefault(e); + if (this.handleClipboardData(e, data)) { + if (isIOS) { + this.resetSelection(data); + this.copied = data; + setTimeout(function () { + _this.copied = false; + }, 10); + } + isCut ? this.host.onCut() : this.host.onCopy(); + event.preventDefault(e); + } + else { + this.copied = true; + this.text.value = data; + this.text.select(); + setTimeout(function () { + _this.copied = false; + _this.resetSelection(); + isCut ? _this.host.onCut() : _this.host.onCopy(); + }); + } + }; + TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) { + var clipboardData = e.clipboardData || window["clipboardData"]; + if (!clipboardData || BROKEN_SETDATA) + return; + var mime = USE_IE_MIME_TYPE || forceIEMime ? "Text" : "text/plain"; + try { + if (data) { + return clipboardData.setData(mime, data) !== false; + } + else { + return clipboardData.getData(mime); + } + } + catch (e) { + if (!forceIEMime) + return this.handleClipboardData(e, data, true); + } + }; + TextInput.prototype.onInput = function (e) { + if (this.inComposition) + return this.onCompositionUpdate(); + if (e && e.inputType) { + if (e.inputType == "historyUndo") + return this.host.execCommand("undo"); + if (e.inputType == "historyRedo") + return this.host.execCommand("redo"); + } + var data = this.text.value; + var inserted = this.sendText(data, true); + if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart + < 1 && this.lastSelectionStart == this.lastSelectionEnd) { + this.resetSelection(); + } + }; + TextInput.prototype.sendText = function (value, fromInput) { + if (this.afterContextMenu) + this.afterContextMenu = false; + if (this.pasted) { + this.resetSelection(); + if (value) + this.host.onPaste(value); + this.pasted = false; + return ""; + } + else { + var selectionStart = this.text.selectionStart; + var selectionEnd = this.text.selectionEnd; + var extendLeft = this.lastSelectionStart; + var extendRight = this.lastValue.length - this.lastSelectionEnd; + var inserted = value; + var restoreStart = value.length - selectionStart; + var restoreEnd = value.length - selectionEnd; + var i = 0; + while (extendLeft > 0 && this.lastValue[i] == value[i]) { + i++; + extendLeft--; + } + inserted = inserted.slice(i); + i = 1; + while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1 + && this.lastValue[this.lastValue.length - i] == value[value.length - i]) { + i++; + extendRight--; + } + restoreStart -= i - 1; + restoreEnd -= i - 1; + var endIndex = inserted.length - i + 1; + if (endIndex < 0) { + extendLeft = -endIndex; + endIndex = 0; + } + inserted = inserted.slice(0, endIndex); + if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd) + return ""; + this.sendingText = true; + var shouldReset = false; + if (useragent.isAndroid && inserted == ". ") { + inserted = " "; + shouldReset = true; + } + if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) { + this.host.onTextInput(inserted); + } + else { + this.host.onTextInput(inserted, { + extendLeft: extendLeft, + extendRight: extendRight, + restoreStart: restoreStart, + restoreEnd: restoreEnd + }); + } + this.sendingText = false; + this.lastValue = value; + this.lastSelectionStart = selectionStart; + this.lastSelectionEnd = selectionEnd; + this.lastRestoreEnd = restoreEnd; + return shouldReset ? "\n" : inserted; + } + }; + TextInput.prototype.onSelect = function (e) { + var _this = this; + if (this.inComposition) + return; + var isAllSelected = function (text) { + return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value + === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd; + }; + if (this.copied) { + this.copied = false; + } + else if (isAllSelected(this.text)) { + this.host.selectAll(); + this.resetSelection(); + } + else if (isMobile && this.text.selectionStart != this.lastSelectionStart) { + this.resetSelection(); + } + }; + TextInput.prototype.$resetSelectionIOS = function (value) { + if (!this.$isFocused || (this.copied && !value) || this.sendingText) + return; + if (!value) + value = ""; + var newValue = "\n ab" + value + "cde fg\n"; + if (newValue != this.text.value) + this.text.value = this.lastValue = newValue; + var selectionStart = 4; + var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1)); + if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) { + this.text.setSelectionRange(selectionStart, selectionEnd); + } + this.lastSelectionStart = selectionStart; + this.lastSelectionEnd = selectionEnd; + }; + TextInput.prototype.$resetSelection = function () { + var _this = this; + if (this.inComposition || this.sendingText) + return; + if (!this.$isFocused && !this.afterContextMenu) + return; + this.inComposition = true; + var selectionStart = 0; + var selectionEnd = 0; + var line = ""; + var positionToSelection = function (row, column) { + var selection = column; + for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) { + selection += _this.host.session.getLine(row - i).length + 1; + } + return selection; + }; + if (this.host.session) { + var selection = this.host.selection; + var range = selection.getRange(); + var row = selection.cursor.row; + if (row === this.rowEnd + 1) { + this.rowStart = this.rowEnd + 1; + this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines; + } + else if (row === this.rowStart - 1) { + this.rowEnd = this.rowStart - 1; + this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines; + } + else if (row < this.rowStart - 1 || row > this.rowEnd + 1) { + this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0; + this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2 + * this.numberOfExtraLines; + } + var lines = []; + for (var i = this.rowStart; i <= this.rowEnd; i++) { + lines.push(this.host.session.getLine(i)); + } + line = lines.join('\n'); + selectionStart = positionToSelection(range.start.row, range.start.column); + selectionEnd = positionToSelection(range.end.row, range.end.column); + if (range.start.row < this.rowStart) { + var prevLine = this.host.session.getLine(this.rowStart - 1); + selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart; + selectionEnd += prevLine.length + 1; + line = prevLine + "\n" + line; + } + else if (range.end.row > this.rowEnd) { + var nextLine = this.host.session.getLine(this.rowEnd + 1); + selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column; + selectionEnd += line.length + 1; + line = line + "\n" + nextLine; + } + else if (isMobile && row > 0) { + line = "\n" + line; + selectionEnd += 1; + selectionStart += 1; + } + if (line.length > MAX_LINE_LENGTH) { + if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) { + line = line.slice(0, MAX_LINE_LENGTH); + } + else { + line = "\n"; + if (selectionStart == selectionEnd) { + selectionStart = selectionEnd = 0; + } + else { + selectionStart = 0; + selectionEnd = 1; + } + } + } + var newValue = line + "\n\n"; + if (newValue != this.lastValue) { + this.text.value = this.lastValue = newValue; + this.lastSelectionStart = this.lastSelectionEnd = newValue.length; + } + } + if (this.afterContextMenu) { + this.lastSelectionStart = this.text.selectionStart; + this.lastSelectionEnd = this.text.selectionEnd; + } + if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd + != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization + ) { + try { + this.text.setSelectionRange(selectionStart, selectionEnd); + this.lastSelectionStart = selectionStart; + this.lastSelectionEnd = selectionEnd; + } + catch (e) { + } + } + this.inComposition = false; + }; + TextInput.prototype.setHost = function (newHost) { + this.host = newHost; + }; + TextInput.prototype.setNumberOfExtraLines = function (number) { + this.rowStart = Number.MAX_SAFE_INTEGER; + this.rowEnd = Number.MIN_SAFE_INTEGER; + if (number < 0) { + this.numberOfExtraLines = 0; + return; + } + this.numberOfExtraLines = number; + }; + TextInput.prototype.setAriaLabel = function () { + var ariaLabel = ""; + if (this.host.$textInputAriaLabel) { + ariaLabel += "".concat(this.host.$textInputAriaLabel, ", "); + } + if (this.host.session) { + var row = this.host.session.selection.cursor.row; + ariaLabel += nls("text-input.aria-label", "Cursor at row $0", [row + 1]); + } + this.text.setAttribute("aria-label", ariaLabel); + }; + TextInput.prototype.setAriaOptions = function (options) { + if (options.activeDescendant) { + this.text.setAttribute("aria-haspopup", "true"); + this.text.setAttribute("aria-autocomplete", options.inline ? "both" : "list"); + this.text.setAttribute("aria-activedescendant", options.activeDescendant); + } + else { + this.text.setAttribute("aria-haspopup", "false"); + this.text.setAttribute("aria-autocomplete", "both"); + this.text.removeAttribute("aria-activedescendant"); + } + if (options.role) { + this.text.setAttribute("role", options.role); + } + if (options.setLabel) { + this.text.setAttribute("aria-roledescription", nls("text-input.aria-roledescription", "editor")); + this.setAriaLabel(); + } + }; + TextInput.prototype.focus = function () { + var _this = this; + this.setAriaOptions({ + setLabel: this.host.renderer.enableKeyboardAccessibility + }); + if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == "browser") + return this.text.focus({ preventScroll: true }); + var top = this.text.style.top; + this.text.style.position = "fixed"; + this.text.style.top = "0px"; + try { + var isTransformed = this.text.getBoundingClientRect().top != 0; + } + catch (e) { + return; + } + var ancestors = []; + if (isTransformed) { + var t = this.text.parentElement; + while (t && t.nodeType == 1) { + ancestors.push(t); + t.setAttribute("ace_nocontext", "true"); + if (!t.parentElement && t.getRootNode) + t = t.getRootNode()["host"]; + else + t = t.parentElement; + } + } + this.text.focus({ preventScroll: true }); + if (isTransformed) { + ancestors.forEach(function (p) { + p.removeAttribute("ace_nocontext"); + }); + } + setTimeout(function () { + _this.text.style.position = ""; + if (_this.text.style.top == "0px") + _this.text.style.top = top; + }, 0); + }; + TextInput.prototype.blur = function () { + this.text.blur(); + }; + TextInput.prototype.isFocused = function () { + return this.$isFocused; + }; + TextInput.prototype.setInputHandler = function (cb) { + this.inputHandler = cb; + }; + TextInput.prototype.getInputHandler = function () { + return this.inputHandler; + }; + TextInput.prototype.getElement = function () { + return this.text; + }; + TextInput.prototype.setCommandMode = function (value) { + this.commandMode = value; + this.text.readOnly = false; + }; + TextInput.prototype.setReadOnly = function (readOnly) { + if (!this.commandMode) + this.text.readOnly = readOnly; + }; + TextInput.prototype.setCopyWithEmptySelection = function (value) { + }; + TextInput.prototype.onContextMenu = function (e) { + this.afterContextMenu = true; + this.resetSelection(); + this.host._emit("nativecontextmenu", { + target: this.host, + domEvent: e + }); + this.moveToMouse(e, true); + }; + TextInput.prototype.moveToMouse = function (e, bringToFront) { + var _this = this; + if (!this.tempStyle) + this.tempStyle = this.text.style.cssText; + this.text.style.cssText = (bringToFront ? "z-index:100000;" : "") + (useragent.isIE ? "opacity:0.1;" : "") + + "text-indent: -" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth + * 0.5 + "px;"; + var rect = this.host.container.getBoundingClientRect(); + var style = dom.computedStyle(this.host.container); + var top = rect.top + (parseInt(style.borderTopWidth) || 0); + var left = rect.left + (parseInt(style.borderLeftWidth) || 0); + var maxTop = rect.bottom - top - this.text.clientHeight - 2; + var move = function (e) { + dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop)); + }; + move(e); + if (e.type != "mousedown") + return; + this.host.renderer.$isMousePressed = true; + clearTimeout(this.closeTimeout); + if (useragent.isWin) + event.capture(this.host.container, move, this.onContextMenuClose.bind(this)); + }; + TextInput.prototype.destroy = function () { + if (this.text.parentElement) + this.text.parentElement.removeChild(this.text); + }; + return TextInput; +}()); +exports.TextInput = TextInput; +exports.$setUserAgentForTests = function (_isMobile, _isIOS) { + isMobile = _isMobile; + isIOS = _isIOS; +}; -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ +}); -.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title { - /* Title is rotated for horizontal accordion panel using CSS */ - display: block; - transform-origin: top left; - transform: rotate(-90deg) translate(-100%); +ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"], function(require, exports, module){"use strict"; +var useragent = require("../lib/useragent"); +var DRAG_OFFSET = 0; // pixels +var SCROLL_COOLDOWN_T = 550; // milliseconds +var DefaultHandlers = /** @class */ (function () { + function DefaultHandlers(mouseHandler) { + mouseHandler.$clickSelection = null; + var editor = mouseHandler.editor; + editor.setDefaultHandler("mousedown", this.onMouseDown.bind(mouseHandler)); + editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(mouseHandler)); + editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler)); + editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler)); + editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler)); + var exports = ["select", "startSelect", "selectEnd", "selectAllEnd", "selectByWordsEnd", + "selectByLinesEnd", "dragWait", "dragWaitEnd", "focusWait"]; + exports.forEach(function (x) { + mouseHandler[x] = this[x]; + }, this); + mouseHandler["selectByLines"] = this.extendSelectionBy.bind(mouseHandler, "getLineRange"); + mouseHandler["selectByWords"] = this.extendSelectionBy.bind(mouseHandler, "getWordRange"); + } + DefaultHandlers.prototype.onMouseDown = function (ev) { + var inSelection = ev.inSelection(); + var pos = ev.getDocumentPosition(); + this.mousedownEvent = ev; + var editor = this.editor; + var button = ev.getButton(); + if (button !== 0) { + var selectionRange = editor.getSelectionRange(); + var selectionEmpty = selectionRange.isEmpty(); + if (selectionEmpty || button == 1) + editor.selection.moveToPosition(pos); + if (button == 2) { + editor.textInput.onContextMenu(ev.domEvent); + if (!useragent.isMozilla) + ev.preventDefault(); + } + return; + } + this.mousedownEvent.time = Date.now(); + if (inSelection && !editor.isFocused()) { + editor.focus(); + if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) { + this.setState("focusWait"); + this.captureMouse(ev); + return; + } + } + this.captureMouse(ev); + this.startSelect(pos, ev.domEvent._clicks > 1); + return ev.preventDefault(); + }; + DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) { + pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); + var editor = this.editor; + if (!this.mousedownEvent) + return; + if (this.mousedownEvent.getShiftKey()) + editor.selection.selectToPosition(pos); + else if (!waitForClickSelection) + editor.selection.moveToPosition(pos); + if (!waitForClickSelection) + this.select(); + editor.setStyle("ace_selecting"); + this.setState("select"); + }; + DefaultHandlers.prototype.select = function () { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + if (this.$clickSelection) { + var cmp = this.$clickSelection.comparePoint(cursor); + if (cmp == -1) { + anchor = this.$clickSelection.end; + } + else if (cmp == 1) { + anchor = this.$clickSelection.start; + } + else { + var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); + cursor = orientedRange.cursor; + anchor = orientedRange.anchor; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + editor.renderer.scrollCursorIntoView(); + }; + DefaultHandlers.prototype.extendSelectionBy = function (unitName) { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + var range = editor.selection[unitName](cursor.row, cursor.column); + if (this.$clickSelection) { + var cmpStart = this.$clickSelection.comparePoint(range.start); + var cmpEnd = this.$clickSelection.comparePoint(range.end); + if (cmpStart == -1 && cmpEnd <= 0) { + anchor = this.$clickSelection.end; + if (range.end.row != cursor.row || range.end.column != cursor.column) + cursor = range.start; + } + else if (cmpEnd == 1 && cmpStart >= 0) { + anchor = this.$clickSelection.start; + if (range.start.row != cursor.row || range.start.column != cursor.column) + cursor = range.end; + } + else if (cmpStart == -1 && cmpEnd == 1) { + cursor = range.end; + anchor = range.start; + } + else { + var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); + cursor = orientedRange.cursor; + anchor = orientedRange.anchor; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + editor.renderer.scrollCursorIntoView(); + }; + DefaultHandlers.prototype.selectByLinesEnd = function () { + this.$clickSelection = null; + this.editor.unsetStyle("ace_selecting"); + }; + DefaultHandlers.prototype.focusWait = function () { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + var time = Date.now(); + if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout) + this.startSelect(this.mousedownEvent.getDocumentPosition()); + }; + DefaultHandlers.prototype.onDoubleClick = function (ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + var session = editor.session; + var range = session.getBracketRange(pos); + if (range) { + if (range.isEmpty()) { + range.start.column--; + range.end.column++; + } + this.setState("select"); + } + else { + range = editor.selection.getWordRange(pos.row, pos.column); + this.setState("selectByWords"); + } + this.$clickSelection = range; + this.select(); + }; + DefaultHandlers.prototype.onTripleClick = function (ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + this.setState("selectByLines"); + var range = editor.getSelectionRange(); + if (range.isMultiLine() && range.contains(pos.row, pos.column)) { + this.$clickSelection = editor.selection.getLineRange(range.start.row); + this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end; + } + else { + this.$clickSelection = editor.selection.getLineRange(pos.row); + } + this.select(); + }; + DefaultHandlers.prototype.onQuadClick = function (ev) { + var editor = this.editor; + editor.selectAll(); + this.$clickSelection = editor.getSelectionRange(); + this.setState("selectAll"); + }; + DefaultHandlers.prototype.onMouseWheel = function (ev) { + if (ev.getAccelKey()) + return; + if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) { + ev.wheelX = ev.wheelY; + ev.wheelY = 0; + } + var editor = this.editor; + if (!this.$lastScroll) + this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 }; + var prevScroll = this.$lastScroll; + var t = ev.domEvent.timeStamp; + var dt = t - prevScroll.t; + var vx = dt ? ev.wheelX / dt : prevScroll.vx; + var vy = dt ? ev.wheelY / dt : prevScroll.vy; + if (dt < SCROLL_COOLDOWN_T) { + vx = (vx + prevScroll.vx) / 2; + vy = (vy + prevScroll.vy) / 2; + } + var direction = Math.abs(vx / vy); + var canScroll = false; + if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0)) + canScroll = true; + if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed)) + canScroll = true; + if (canScroll) { + prevScroll.allowed = t; + } + else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) { + var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx) + && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy); + if (isSlower) { + canScroll = true; + prevScroll.allowed = t; + } + else { + prevScroll.allowed = 0; + } + } + prevScroll.t = t; + prevScroll.vx = vx; + prevScroll.vy = vy; + if (canScroll) { + editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + return ev.stop(); + } + }; + return DefaultHandlers; +}()); +DefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd; +DefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd; +DefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd; +exports.DefaultHandlers = DefaultHandlers; +function calcDistance(ax, ay, bx, by) { + return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/accordionpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\n /* Title is rotated for horizontal accordion panel using CSS */\n display: block;\n transform-origin: top left;\n transform: rotate(-90deg) translate(-100%);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css": -/*!*********************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css ***! - \*********************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-CommandPalette { - display: flex; - flex-direction: column; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; +function calcRangeOrientation(range, cursor) { + if (range.start.row == range.end.row) + var cmp = 2 * cursor.column - range.start.column - range.end.column; + else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) + var cmp = cursor.column - 4; + else + var cmp = 2 * cursor.row - range.start.row - range.end.row; + if (cmp < 0) + return { cursor: range.start, anchor: range.end }; + else + return { cursor: range.end, anchor: range.start }; } -.lm-CommandPalette-search { - flex: 0 0 auto; -} +}); -.lm-CommandPalette-content { - flex: 1 1 auto; - margin: 0; - padding: 0; - min-height: 0; - overflow: auto; - list-style-type: none; -} +ace.define("ace/lib/scroll",["require","exports","module"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) { + event.stopPropagation(); + var target = event.currentTarget; + var contentOverflows = target.scrollHeight > target.clientHeight; + if (!contentOverflows) { + event.preventDefault(); + } +}; -.lm-CommandPalette-header { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} +}); -.lm-CommandPalette-item { - display: flex; - flex-direction: row; -} +ace.define("ace/tooltip",["require","exports","module","ace/lib/dom","ace/lib/event","ace/range","ace/lib/scroll"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var Range = require("./range").Range; +var preventParentScroll = require("./lib/scroll").preventParentScroll; +var CLASSNAME = "ace_tooltip"; +var Tooltip = /** @class */ (function () { + function Tooltip(parentNode) { + this.isOpen = false; + this.$element = null; + this.$parentNode = parentNode; + } + Tooltip.prototype.$init = function () { + this.$element = dom.createElement("div"); + this.$element.className = CLASSNAME; + this.$element.style.display = "none"; + this.$parentNode.appendChild(this.$element); + return this.$element; + }; + Tooltip.prototype.getElement = function () { + return this.$element || this.$init(); + }; + Tooltip.prototype.setText = function (text) { + this.getElement().textContent = text; + }; + Tooltip.prototype.setHtml = function (html) { + this.getElement().innerHTML = html; + }; + Tooltip.prototype.setPosition = function (x, y) { + this.getElement().style.left = x + "px"; + this.getElement().style.top = y + "px"; + }; + Tooltip.prototype.setClassName = function (className) { + dom.addCssClass(this.getElement(), className); + }; + Tooltip.prototype.setTheme = function (theme) { + this.$element.className = CLASSNAME + " " + + (theme.isDark ? "ace_dark " : "") + (theme.cssClass || ""); + }; + Tooltip.prototype.show = function (text, x, y) { + if (text != null) + this.setText(text); + if (x != null && y != null) + this.setPosition(x, y); + if (!this.isOpen) { + this.getElement().style.display = "block"; + this.isOpen = true; + } + }; + Tooltip.prototype.hide = function (e) { + if (this.isOpen) { + this.getElement().style.display = "none"; + this.getElement().className = CLASSNAME; + this.isOpen = false; + } + }; + Tooltip.prototype.getHeight = function () { + return this.getElement().offsetHeight; + }; + Tooltip.prototype.getWidth = function () { + return this.getElement().offsetWidth; + }; + Tooltip.prototype.destroy = function () { + this.isOpen = false; + if (this.$element && this.$element.parentNode) { + this.$element.parentNode.removeChild(this.$element); + } + }; + return Tooltip; +}()); +var PopupManager = /** @class */ (function () { + function PopupManager() { + this.popups = []; + } + PopupManager.prototype.addPopup = function (popup) { + this.popups.push(popup); + this.updatePopups(); + }; + PopupManager.prototype.removePopup = function (popup) { + var index = this.popups.indexOf(popup); + if (index !== -1) { + this.popups.splice(index, 1); + this.updatePopups(); + } + }; + PopupManager.prototype.updatePopups = function () { + var e_1, _a, e_2, _b; + this.popups.sort(function (a, b) { return b.priority - a.priority; }); + var visiblepopups = []; + try { + for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) { + var popup = _d.value; + var shouldDisplay = true; + try { + for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) { + var visiblePopup = visiblepopups_1_1.value; + if (this.doPopupsOverlap(visiblePopup, popup)) { + shouldDisplay = false; + break; + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1); + } + finally { if (e_2) throw e_2.error; } + } + if (shouldDisplay) { + visiblepopups.push(popup); + } + else { + popup.hide(); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + }; + PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) { + var rectA = popupA.getElement().getBoundingClientRect(); + var rectB = popupB.getElement().getBoundingClientRect(); + return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom + > rectB.top); + }; + return PopupManager; +}()); +var popupManager = new PopupManager(); +exports.popupManager = popupManager; +exports.Tooltip = Tooltip; +var HoverTooltip = /** @class */ (function (_super) { + __extends(HoverTooltip, _super); + function HoverTooltip(parentNode) { + if (parentNode === void 0) { parentNode = document.body; } + var _this = _super.call(this, parentNode) || this; + _this.timeout = undefined; + _this.lastT = 0; + _this.idleTime = 350; + _this.lastEvent = undefined; + _this.onMouseOut = _this.onMouseOut.bind(_this); + _this.onMouseMove = _this.onMouseMove.bind(_this); + _this.waitForHover = _this.waitForHover.bind(_this); + _this.hide = _this.hide.bind(_this); + var el = _this.getElement(); + el.style.whiteSpace = "pre-wrap"; + el.style.pointerEvents = "auto"; + el.addEventListener("mouseout", _this.onMouseOut); + el.tabIndex = -1; + el.addEventListener("blur", function () { + if (!el.contains(document.activeElement)) + this.hide(); + }.bind(_this)); + el.addEventListener("wheel", preventParentScroll); + return _this; + } + HoverTooltip.prototype.addToEditor = function (editor) { + editor.on("mousemove", this.onMouseMove); + editor.on("mousedown", this.hide); + editor.renderer.getMouseEventTarget().addEventListener("mouseout", this.onMouseOut, true); + }; + HoverTooltip.prototype.removeFromEditor = function (editor) { + editor.off("mousemove", this.onMouseMove); + editor.off("mousedown", this.hide); + editor.renderer.getMouseEventTarget().removeEventListener("mouseout", this.onMouseOut, true); + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + }; + HoverTooltip.prototype.onMouseMove = function (e, editor) { + this.lastEvent = e; + this.lastT = Date.now(); + var isMousePressed = editor.$mouseHandler.isMousePressed; + if (this.isOpen) { + var pos = this.lastEvent && this.lastEvent.getDocumentPosition(); + if (!this.range + || !this.range.contains(pos.row, pos.column) + || isMousePressed + || this.isOutsideOfText(this.lastEvent)) { + this.hide(); + } + } + if (this.timeout || isMousePressed) + return; + this.lastEvent = e; + this.timeout = setTimeout(this.waitForHover, this.idleTime); + }; + HoverTooltip.prototype.waitForHover = function () { + if (this.timeout) + clearTimeout(this.timeout); + var dt = Date.now() - this.lastT; + if (this.idleTime - dt > 10) { + this.timeout = setTimeout(this.waitForHover, this.idleTime - dt); + return; + } + this.timeout = null; + if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) { + this.$gatherData(this.lastEvent, this.lastEvent.editor); + } + }; + HoverTooltip.prototype.isOutsideOfText = function (e) { + var editor = e.editor; + var docPos = e.getDocumentPosition(); + var line = editor.session.getLine(docPos.row); + if (docPos.column == line.length) { + var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY); + var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column); + if (clippedPos.column != screenPos.column + || clippedPos.row != screenPos.row) { + return true; + } + } + return false; + }; + HoverTooltip.prototype.setDataProvider = function (value) { + this.$gatherData = value; + }; + HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) { + var MARGIN = 10; + if (startingEvent && startingEvent != this.lastEvent) + return; + if (this.isOpen && document.activeElement == this.getElement()) + return; + var renderer = editor.renderer; + if (!this.isOpen) { + popupManager.addPopup(this); + this.$registerCloseEvents(); + this.setTheme(renderer.theme); + } + this.isOpen = true; + this.addMarker(range, editor.session); + this.range = Range.fromPoints(range.start, range.end); + var position = renderer.textToScreenCoordinates(range.start.row, range.start.column); + var rect = renderer.scroller.getBoundingClientRect(); + if (position.pageX < rect.left) + position.pageX = rect.left; + var element = this.getElement(); + element.innerHTML = ""; + element.appendChild(domNode); + element.style.maxHeight = ""; + element.style.display = "block"; + var labelHeight = element.clientHeight; + var labelWidth = element.clientWidth; + var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight; + var isAbove = true; + if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) { + isAbove = false; + } + element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + "px"; + element.style.top = isAbove ? "" : position.pageY + renderer.lineHeight + "px"; + element.style.bottom = isAbove ? window.innerHeight - position.pageY + "px" : ""; + element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + "px"; + }; + HoverTooltip.prototype.addMarker = function (range, session) { + if (this.marker) { + this.$markerSession.removeMarker(this.marker); + } + this.$markerSession = session; + this.marker = session && session.addMarker(range, "ace_highlight-marker", "text"); + }; + HoverTooltip.prototype.hide = function (e) { + if (!e && document.activeElement == this.getElement()) + return; + if (e && e.target && (e.type != "keydown" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target)) + return; + this.lastEvent = null; + if (this.timeout) + clearTimeout(this.timeout); + this.timeout = null; + this.addMarker(null); + if (this.isOpen) { + this.$removeCloseEvents(); + this.getElement().style.display = "none"; + this.isOpen = false; + popupManager.removePopup(this); + } + }; + HoverTooltip.prototype.$registerCloseEvents = function () { + window.addEventListener("keydown", this.hide, true); + window.addEventListener("wheel", this.hide, true); + window.addEventListener("mousedown", this.hide, true); + }; + HoverTooltip.prototype.$removeCloseEvents = function () { + window.removeEventListener("keydown", this.hide, true); + window.removeEventListener("wheel", this.hide, true); + window.removeEventListener("mousedown", this.hide, true); + }; + HoverTooltip.prototype.onMouseOut = function (e) { + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + this.lastEvent = null; + if (!this.isOpen) + return; + if (!e.relatedTarget || this.getElement().contains(e.relatedTarget)) + return; + if (e && e.currentTarget.contains(e.relatedTarget)) + return; + if (!e.relatedTarget.classList.contains("ace_content")) + this.hide(); + }; + return HoverTooltip; +}(Tooltip)); +exports.HoverTooltip = HoverTooltip; -.lm-CommandPalette-itemIcon { - flex: 0 0 auto; +}); + +ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/tooltip","ace/config"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var dom = require("../lib/dom"); +var event = require("../lib/event"); +var Tooltip = require("../tooltip").Tooltip; +var nls = require("../config").nls; +var GUTTER_TOOLTIP_LEFT_OFFSET = 5; +var GUTTER_TOOLTIP_TOP_OFFSET = 3; +exports.GUTTER_TOOLTIP_LEFT_OFFSET = GUTTER_TOOLTIP_LEFT_OFFSET; +exports.GUTTER_TOOLTIP_TOP_OFFSET = GUTTER_TOOLTIP_TOP_OFFSET; +function GutterHandler(mouseHandler) { + var editor = mouseHandler.editor; + var gutter = editor.renderer.$gutterLayer; + var tooltip = new GutterTooltip(editor, true); + mouseHandler.editor.setDefaultHandler("guttermousedown", function (e) { + if (!editor.isFocused() || e.getButton() != 0) + return; + var gutterRegion = gutter.getRegion(e); + if (gutterRegion == "foldWidgets") + return; + var row = e.getDocumentPosition().row; + var selection = editor.session.selection; + if (e.getShiftKey()) + selection.selectTo(row, 0); + else { + if (e.domEvent.detail == 2) { + editor.selectAll(); + return e.preventDefault(); + } + mouseHandler.$clickSelection = editor.selection.getLineRange(row); + } + mouseHandler.setState("selectByLines"); + mouseHandler.captureMouse(e); + return e.preventDefault(); + }); + var tooltipTimeout, mouseEvent; + function showTooltip() { + var row = mouseEvent.getDocumentPosition().row; + var maxRow = editor.session.getLength(); + if (row == maxRow) { + var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; + var pos = mouseEvent.$pos; + if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) + return hideTooltip(); + } + tooltip.showTooltip(row); + if (!tooltip.isOpen) + return; + editor.on("mousewheel", hideTooltip); + editor.on("changeSession", hideTooltip); + window.addEventListener("keydown", hideTooltip, true); + if (mouseHandler.$tooltipFollowsMouse) { + moveTooltip(mouseEvent); + } + else { + var gutterRow = mouseEvent.getGutterRow(); + var gutterCell = gutter.$lines.get(gutterRow); + if (gutterCell) { + var gutterElement = gutterCell.element.querySelector(".ace_gutter_annotation"); + var rect = gutterElement.getBoundingClientRect(); + var style = tooltip.getElement().style; + style.left = (rect.right - GUTTER_TOOLTIP_LEFT_OFFSET) + "px"; + style.top = (rect.bottom - GUTTER_TOOLTIP_TOP_OFFSET) + "px"; + } + else { + moveTooltip(mouseEvent); + } + } + } + function hideTooltip(e) { + if (e && e.type === "keydown" && (e.ctrlKey || e.metaKey)) + return; + if (e && e.type === "mouseout" && (!e.relatedTarget || tooltip.getElement().contains(e.relatedTarget))) + return; + if (tooltipTimeout) + tooltipTimeout = clearTimeout(tooltipTimeout); + if (tooltip.isOpen) { + tooltip.hideTooltip(); + editor.off("mousewheel", hideTooltip); + editor.off("changeSession", hideTooltip); + window.removeEventListener("keydown", hideTooltip, true); + } + } + function moveTooltip(e) { + tooltip.setPosition(e.x, e.y); + } + mouseHandler.editor.setDefaultHandler("guttermousemove", function (e) { + var target = e.domEvent.target || e.domEvent.srcElement; + if (dom.hasCssClass(target, "ace_fold-widget") || dom.hasCssClass(target, "ace_custom-widget")) + return hideTooltip(); + if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse) + moveTooltip(e); + mouseEvent = e; + if (tooltipTimeout) + return; + tooltipTimeout = setTimeout(function () { + tooltipTimeout = null; + if (mouseEvent && !mouseHandler.isMousePressed) + showTooltip(); + }, 50); + }); + event.addListener(editor.renderer.$gutter, "mouseout", function (e) { + mouseEvent = null; + if (!tooltip.isOpen) + return; + tooltipTimeout = setTimeout(function () { + tooltipTimeout = null; + hideTooltip(e); + }, 50); + }, editor); } +exports.GutterHandler = GutterHandler; +var GutterTooltip = /** @class */ (function (_super) { + __extends(GutterTooltip, _super); + function GutterTooltip(editor, isHover) { + if (isHover === void 0) { isHover = false; } + var _this = _super.call(this, editor.container) || this; + _this.id = "gt" + (++GutterTooltip.$uid); + _this.editor = editor; + _this.visibleTooltipRow; + var el = _this.getElement(); + el.setAttribute("role", "tooltip"); + el.setAttribute("id", _this.id); + el.style.pointerEvents = "auto"; + if (isHover) { + _this.onMouseOut = _this.onMouseOut.bind(_this); + el.addEventListener("mouseout", _this.onMouseOut); + } + return _this; + } + GutterTooltip.prototype.onMouseOut = function (e) { + if (!this.isOpen) + return; + if (!e.relatedTarget || this.getElement().contains(e.relatedTarget)) + return; + if (e && e.currentTarget.contains(e.relatedTarget)) + return; + this.hideTooltip(); + }; + GutterTooltip.prototype.setPosition = function (x, y) { + var windowWidth = window.innerWidth || document.documentElement.clientWidth; + var windowHeight = window.innerHeight || document.documentElement.clientHeight; + var width = this.getWidth(); + var height = this.getHeight(); + x += 15; + y += 15; + if (x + width > windowWidth) { + x -= (x + width) - windowWidth; + } + if (y + height > windowHeight) { + y -= 20 + height; + } + Tooltip.prototype.setPosition.call(this, x, y); + }; + Object.defineProperty(GutterTooltip, "annotationLabels", { + get: function () { + return { + error: { + singular: nls("gutter-tooltip.aria-label.error.singular", "error"), + plural: nls("gutter-tooltip.aria-label.error.plural", "errors") + }, + security: { + singular: nls("gutter-tooltip.aria-label.security.singular", "security finding"), + plural: nls("gutter-tooltip.aria-label.security.plural", "security findings") + }, + warning: { + singular: nls("gutter-tooltip.aria-label.warning.singular", "warning"), + plural: nls("gutter-tooltip.aria-label.warning.plural", "warnings") + }, + info: { + singular: nls("gutter-tooltip.aria-label.info.singular", "information message"), + plural: nls("gutter-tooltip.aria-label.info.plural", "information messages") + }, + hint: { + singular: nls("gutter-tooltip.aria-label.hint.singular", "suggestion"), + plural: nls("gutter-tooltip.aria-label.hint.plural", "suggestions") + } + }; + }, + enumerable: false, + configurable: true + }); + GutterTooltip.prototype.showTooltip = function (row) { + var _a; + var gutter = this.editor.renderer.$gutterLayer; + var annotationsInRow = gutter.$annotations[row]; + var annotation; + if (annotationsInRow) + annotation = { + displayText: Array.from(annotationsInRow.displayText), + type: Array.from(annotationsInRow.type) + }; + else + annotation = { displayText: [], type: [] }; + var fold = gutter.session.getFoldLine(row); + if (fold && gutter.$showFoldedAnnotations) { + var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] }; + var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 }; + var mostSevereAnnotationTypeInFold; + for (var i = row + 1; i <= fold.end.row; i++) { + if (!gutter.$annotations[i]) + continue; + for (var j = 0; j < gutter.$annotations[i].text.length; j++) { + var annotationType = gutter.$annotations[i].type[j]; + annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]); + if (!mostSevereAnnotationTypeInFold || + severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) { + mostSevereAnnotationTypeInFold = annotationType; + } + } + } + if (["error", "security", "warning"].includes(mostSevereAnnotationTypeInFold)) { + var summaryFoldedAnnotations = "".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), " in folded code."); + annotation.displayText.push(summaryFoldedAnnotations); + annotation.type.push(mostSevereAnnotationTypeInFold + "_fold"); + } + } + if (annotation.displayText.length === 0) + return this.hideTooltip(); + var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] }; + var iconClassName = gutter.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; + for (var i = 0; i < annotation.displayText.length; i++) { + var lineElement = dom.createElement("span"); + var iconElement = dom.createElement("span"); + (_a = iconElement.classList).add.apply(_a, ["ace_".concat(annotation.type[i]), iconClassName]); + iconElement.setAttribute("aria-label", "".concat(GutterTooltip.annotationLabels[annotation.type[i].replace("_fold", "")].singular)); + iconElement.setAttribute("role", "img"); + iconElement.appendChild(dom.createTextNode(" ")); + lineElement.appendChild(iconElement); + lineElement.appendChild(dom.createTextNode(annotation.displayText[i])); + lineElement.appendChild(dom.createElement("br")); + annotationMessages[annotation.type[i].replace("_fold", "")].push(lineElement); + } + var tooltipElement = this.getElement(); + dom.removeChildren(tooltipElement); + annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); }); + annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); }); + annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); }); + annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); }); + annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); }); + tooltipElement.setAttribute("aria-live", "polite"); + if (!this.isOpen) { + this.setTheme(this.editor.renderer.theme); + this.setClassName("ace_gutter-tooltip"); + } + var annotationNode = this.$findLinkedAnnotationNode(row); + if (annotationNode) { + annotationNode.setAttribute("aria-describedby", this.id); + } + this.show(); + this.visibleTooltipRow = row; + this.editor._signal("showGutterTooltip", this); + }; + GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) { + var cell = this.$findCellByRow(row); + if (cell) { + var element = cell.element; + if (element.childNodes.length > 2) { + return element.childNodes[2]; + } + } + }; + GutterTooltip.prototype.$findCellByRow = function (row) { + return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; }); + }; + GutterTooltip.prototype.hideTooltip = function () { + if (!this.isOpen) { + return; + } + this.$element.removeAttribute("aria-live"); + this.hide(); + if (this.visibleTooltipRow != undefined) { + var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow); + if (annotationNode) { + annotationNode.removeAttribute("aria-describedby"); + } + } + this.visibleTooltipRow = undefined; + this.editor._signal("hideGutterTooltip", this); + }; + GutterTooltip.annotationsToSummaryString = function (annotations) { + var e_1, _a; + var summary = []; + var annotationTypes = ["error", "security", "warning", "info", "hint"]; + try { + for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) { + var annotationType = annotationTypes_1_1.value; + if (!annotations[annotationType].length) + continue; + var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural; + summary.push("".concat(annotations[annotationType].length, " ").concat(label)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1); + } + finally { if (e_1) throw e_1.error; } + } + return summary.join(", "); + }; + return GutterTooltip; +}(Tooltip)); +GutterTooltip.$uid = 0; +exports.GutterTooltip = GutterTooltip; -.lm-CommandPalette-itemContent { - flex: 1 1 auto; - overflow: hidden; -} +}); -.lm-CommandPalette-itemShortcut { - flex: 0 0 auto; -} +ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module){"use strict"; +var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +var MouseEvent = /** @class */ (function () { + function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY; + this.domEvent = domEvent; + this.editor = editor; + this.x = this.clientX = domEvent.clientX; + this.y = this.clientY = domEvent.clientY; + this.$pos = null; + this.$inSelection = null; + this.propagationStopped = false; + this.defaultPrevented = false; + } + MouseEvent.prototype.stopPropagation = function () { + event.stopPropagation(this.domEvent); + this.propagationStopped = true; + }; + MouseEvent.prototype.preventDefault = function () { + event.preventDefault(this.domEvent); + this.defaultPrevented = true; + }; + MouseEvent.prototype.stop = function () { + this.stopPropagation(); + this.preventDefault(); + }; + MouseEvent.prototype.getDocumentPosition = function () { + if (this.$pos) + return this.$pos; + this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); + return this.$pos; + }; + MouseEvent.prototype.getGutterRow = function () { + var documentRow = this.getDocumentPosition().row; + var screenRow = this.editor.session.documentToScreenRow(documentRow, 0); + var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0); + return screenRow - screenTopRow; + }; + MouseEvent.prototype.inSelection = function () { + if (this.$inSelection !== null) + return this.$inSelection; + var editor = this.editor; + var selectionRange = editor.getSelectionRange(); + if (selectionRange.isEmpty()) + this.$inSelection = false; + else { + var pos = this.getDocumentPosition(); + this.$inSelection = selectionRange.contains(pos.row, pos.column); + } + return this.$inSelection; + }; + MouseEvent.prototype.getButton = function () { + return event.getButton(this.domEvent); + }; + MouseEvent.prototype.getShiftKey = function () { + return this.domEvent.shiftKey; + }; + MouseEvent.prototype.getAccelKey = function () { + return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey; + }; + return MouseEvent; +}()); +exports.MouseEvent = MouseEvent; -.lm-CommandPalette-itemLabel { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} +}); -.lm-close-icon { - border: 1px solid transparent; - background-color: transparent; - position: absolute; - z-index: 1; - right: 3%; - top: 0; - bottom: 0; - margin: auto; - padding: 7px 0; - display: none; - vertical-align: middle; - outline: 0; - cursor: pointer; -} -.lm-close-icon:after { - content: 'X'; - display: block; - width: 15px; - height: 15px; - text-align: center; - color: #000; - font-weight: normal; - font-size: 12px; - cursor: pointer; +ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +var AUTOSCROLL_DELAY = 200; +var SCROLL_CURSOR_DELAY = 200; +var SCROLL_CURSOR_HYSTERESIS = 5; +function DragdropHandler(mouseHandler) { + var editor = mouseHandler.editor; + var dragImage = dom.createElement("div"); + dragImage.style.cssText = "top:-100px;position:absolute;z-index:2147483647;opacity:0.5"; + dragImage.textContent = "\xa0"; + var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; + exports.forEach(function (x) { + mouseHandler[x] = this[x]; + }, this); + editor.on("mousedown", this.onMouseDown.bind(mouseHandler)); + var mouseTarget = editor.container; + var dragSelectionMarker, x, y; + var timerId, range; + var dragCursor, counter = 0; + var dragOperation; + var isInternal; + var autoScrollStartTime; + var cursorMovedTime; + var cursorPointOnCaretMoved; + this.onDragStart = function (e) { + if (this.cancelDrag || !mouseTarget.draggable) { + var self = this; + setTimeout(function () { + self.startSelect(); + self.captureMouse(e); + }, 0); + return e.preventDefault(); + } + range = editor.getSelectionRange(); + var dataTransfer = e.dataTransfer; + dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; + editor.container.appendChild(dragImage); + dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0); + setTimeout(function () { + editor.container.removeChild(dragImage); + }); + dataTransfer.clearData(); + dataTransfer.setData("Text", editor.session.getTextRange()); + isInternal = true; + this.setState("drag"); + }; + this.onDragEnd = function (e) { + mouseTarget.draggable = false; + isInternal = false; + this.setState(null); + if (!editor.getReadOnly()) { + var dropEffect = e.dataTransfer.dropEffect; + if (!dragOperation && dropEffect == "move") + editor.session.remove(editor.getSelectionRange()); + editor.$resetCursorStyle(); + } + this.editor.unsetStyle("ace_dragging"); + this.editor.renderer.setCursorStyle(""); + }; + this.onDragEnter = function (e) { + if (editor.getReadOnly() || !canAccept(e.dataTransfer)) + return; + x = e.clientX; + y = e.clientY; + if (!dragSelectionMarker) + addDragMarker(); + counter++; + e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); + return event.preventDefault(e); + }; + this.onDragOver = function (e) { + if (editor.getReadOnly() || !canAccept(e.dataTransfer)) + return; + x = e.clientX; + y = e.clientY; + if (!dragSelectionMarker) { + addDragMarker(); + counter++; + } + if (onMouseMoveTimer !== null) + onMouseMoveTimer = null; + e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); + return event.preventDefault(e); + }; + this.onDragLeave = function (e) { + counter--; + if (counter <= 0 && dragSelectionMarker) { + clearDragMarker(); + dragOperation = null; + return event.preventDefault(e); + } + }; + this.onDrop = function (e) { + if (!dragCursor) + return; + var dataTransfer = e.dataTransfer; + if (isInternal) { + switch (dragOperation) { + case "move": + if (range.contains(dragCursor.row, dragCursor.column)) { + range = { + start: dragCursor, + end: dragCursor + }; + } + else { + range = editor.moveText(range, dragCursor); + } + break; + case "copy": + range = editor.moveText(range, dragCursor, true); + break; + } + } + else { + var dropData = dataTransfer.getData('Text'); + range = { + start: dragCursor, + end: editor.session.insert(dragCursor, dropData) + }; + editor.focus(); + dragOperation = null; + } + clearDragMarker(); + return event.preventDefault(e); + }; + event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler), editor); + event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler), editor); + event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler), editor); + event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler), editor); + event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler), editor); + event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler), editor); + function scrollCursorIntoView(cursor, prevCursor) { + var now = Date.now(); + var vMovement = !prevCursor || cursor.row != prevCursor.row; + var hMovement = !prevCursor || cursor.column != prevCursor.column; + if (!cursorMovedTime || vMovement || hMovement) { + editor.moveCursorToPosition(cursor); + cursorMovedTime = now; + cursorPointOnCaretMoved = { x: x, y: y }; + } + else { + var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); + if (distance > SCROLL_CURSOR_HYSTERESIS) { + cursorMovedTime = null; + } + else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { + editor.renderer.scrollCursorIntoView(); + cursorMovedTime = null; + } + } + } + function autoScroll(cursor, prevCursor) { + var now = Date.now(); + var lineHeight = editor.renderer.layerConfig.lineHeight; + var characterWidth = editor.renderer.layerConfig.characterWidth; + var editorRect = editor.renderer.scroller.getBoundingClientRect(); + var offsets = { + x: { + left: x - editorRect.left, + right: editorRect.right - x + }, + y: { + top: y - editorRect.top, + bottom: editorRect.bottom - y + } + }; + var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); + var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); + var scrollCursor = { row: cursor.row, column: cursor.column }; + if (nearestXOffset / characterWidth <= 2) { + scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); + } + if (nearestYOffset / lineHeight <= 1) { + scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); + } + var vScroll = cursor.row != scrollCursor.row; + var hScroll = cursor.column != scrollCursor.column; + var vMovement = !prevCursor || cursor.row != prevCursor.row; + if (vScroll || (hScroll && !vMovement)) { + if (!autoScrollStartTime) + autoScrollStartTime = now; + else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) + editor.renderer.scrollCursorIntoView(scrollCursor); + } + else { + autoScrollStartTime = null; + } + } + function onDragInterval() { + var prevCursor = dragCursor; + dragCursor = editor.renderer.screenToTextCoordinates(x, y); + scrollCursorIntoView(dragCursor, prevCursor); + autoScroll(dragCursor, prevCursor); + } + function addDragMarker() { + range = editor.selection.toOrientedRange(); + dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); + editor.clearSelection(); + if (editor.isFocused()) + editor.renderer.$cursorLayer.setBlinking(false); + clearInterval(timerId); + onDragInterval(); + timerId = setInterval(onDragInterval, 20); + counter = 0; + event.addListener(document, "mousemove", onMouseMove); + } + function clearDragMarker() { + clearInterval(timerId); + editor.session.removeMarker(dragSelectionMarker); + dragSelectionMarker = null; + editor.selection.fromOrientedRange(range); + if (editor.isFocused() && !isInternal) + editor.$resetCursorStyle(); + range = null; + dragCursor = null; + counter = 0; + autoScrollStartTime = null; + cursorMovedTime = null; + event.removeListener(document, "mousemove", onMouseMove); + } + var onMouseMoveTimer = null; + function onMouseMove() { + if (onMouseMoveTimer == null) { + onMouseMoveTimer = setTimeout(function () { + if (onMouseMoveTimer != null && dragSelectionMarker) + clearDragMarker(); + }, 20); + } + } + function canAccept(dataTransfer) { + var types = dataTransfer.types; + return !types || Array.prototype.some.call(types, function (type) { + return type == 'text/plain' || type == 'Text'; + }); + } + function getDropEffect(e) { + var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; + var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; + var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; + var effectAllowed = "uninitialized"; + try { + effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); + } + catch (e) { } + var dropEffect = "none"; + if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) + dropEffect = "copy"; + else if (moveAllowed.indexOf(effectAllowed) >= 0) + dropEffect = "move"; + else if (copyAllowed.indexOf(effectAllowed) >= 0) + dropEffect = "copy"; + return dropEffect; + } } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/commandpalette.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;EAC7B,6BAA6B;EAC7B,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACZ,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,eAAe;AACjB;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,eAAe;AACjB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n display: flex;\n flex-direction: column;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-CommandPalette-search {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-content {\n flex: 1 1 auto;\n margin: 0;\n padding: 0;\n min-height: 0;\n overflow: auto;\n list-style-type: none;\n}\n\n.lm-CommandPalette-header {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-CommandPalette-item {\n display: flex;\n flex-direction: row;\n}\n\n.lm-CommandPalette-itemIcon {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemContent {\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.lm-CommandPalette-itemShortcut {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemLabel {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-close-icon {\n border: 1px solid transparent;\n background-color: transparent;\n position: absolute;\n z-index: 1;\n right: 3%;\n top: 0;\n bottom: 0;\n margin: auto;\n padding: 7px 0;\n display: none;\n vertical-align: middle;\n outline: 0;\n cursor: pointer;\n}\n.lm-close-icon:after {\n content: 'X';\n display: block;\n width: 15px;\n height: 15px;\n text-align: center;\n color: #000;\n font-weight: normal;\n font-size: 12px;\n cursor: pointer;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css": -/*!****************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css ***! - \****************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-DockPanel { - z-index: 0; +(function () { + this.dragWait = function () { + var interval = Date.now() - this.mousedownEvent.time; + if (interval > this.editor.getDragDelay()) + this.startDrag(); + }; + this.dragWaitEnd = function () { + var target = this.editor.container; + target.draggable = false; + this.startSelect(this.mousedownEvent.getDocumentPosition()); + this.selectEnd(); + }; + this.dragReadyEnd = function (e) { + this.editor.$resetCursorStyle(); + this.editor.unsetStyle("ace_dragging"); + this.editor.renderer.setCursorStyle(""); + this.dragWaitEnd(); + }; + this.startDrag = function () { + this.cancelDrag = false; + var editor = this.editor; + var target = editor.container; + target.draggable = true; + editor.renderer.$cursorLayer.setBlinking(false); + editor.setStyle("ace_dragging"); + var cursorStyle = useragent.isWin ? "default" : "move"; + editor.renderer.setCursorStyle(cursorStyle); + this.setState("dragReady"); + }; + this.onMouseDrag = function (e) { + var target = this.editor.container; + if (useragent.isIE && this.state == "dragReady") { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + if (distance > 3) + target.dragDrop(); + } + if (this.state === "dragWait") { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + if (distance > 0) { + target.draggable = false; + this.startSelect(this.mousedownEvent.getDocumentPosition()); + } + } + }; + this.onMouseDown = function (e) { + if (!this.$dragEnabled) + return; + this.mousedownEvent = e; + var editor = this.editor; + var inSelection = e.inSelection(); + var button = e.getButton(); + var clickCount = e.domEvent.detail || 1; + if (clickCount === 1 && button === 0 && inSelection) { + if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) + return; + this.mousedownEvent.time = Date.now(); + var eventTarget = e.domEvent.target || e.domEvent.srcElement; + if ("unselectable" in eventTarget) + eventTarget.unselectable = "on"; + if (editor.getDragDelay()) { + if (useragent.isWebKit) { + this.cancelDrag = true; + var mouseTarget = editor.container; + mouseTarget.draggable = true; + } + this.setState("dragWait"); + } + else { + this.startDrag(); + } + this.captureMouse(e, this.onMouseDrag.bind(this)); + e.defaultPrevented = true; + } + }; +}).call(DragdropHandler.prototype); +function calcDistance(ax, ay, bx, by) { + return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } +exports.DragdropHandler = DragdropHandler; -.lm-DockPanel-widget { - z-index: 0; -} +}); -.lm-DockPanel-tabBar { - z-index: 1; -} +ace.define("ace/mouse/touch_handler",["require","exports","module","ace/mouse/mouse_event","ace/lib/event","ace/lib/dom"], function(require, exports, module){"use strict"; +var MouseEvent = require("./mouse_event").MouseEvent; +var event = require("../lib/event"); +var dom = require("../lib/dom"); +exports.addTouchListeners = function (el, editor) { + var mode = "scroll"; + var startX; + var startY; + var touchStartT; + var lastT; + var longTouchTimer; + var animationTimer; + var animationSteps = 0; + var pos; + var clickCount = 0; + var vX = 0; + var vY = 0; + var pressed; + var contextMenu; + function createContextMenu() { + var clipboard = window.navigator && window.navigator.clipboard; + var isOpen = false; + var updateMenu = function () { + var selected = editor.getCopyText(); + var hasUndo = editor.session.getUndoManager().hasUndo(); + contextMenu.replaceChild(dom.buildDom(isOpen ? ["span", + !selected && canExecuteCommand("selectall") && ["span", { class: "ace_mobile-button", action: "selectall" }, "Select All"], + selected && canExecuteCommand("copy") && ["span", { class: "ace_mobile-button", action: "copy" }, "Copy"], + selected && canExecuteCommand("cut") && ["span", { class: "ace_mobile-button", action: "cut" }, "Cut"], + clipboard && canExecuteCommand("paste") && ["span", { class: "ace_mobile-button", action: "paste" }, "Paste"], + hasUndo && canExecuteCommand("undo") && ["span", { class: "ace_mobile-button", action: "undo" }, "Undo"], + canExecuteCommand("find") && ["span", { class: "ace_mobile-button", action: "find" }, "Find"], + canExecuteCommand("openCommandPalette") && ["span", { class: "ace_mobile-button", action: "openCommandPalette" }, "Palette"] + ] : ["span"]), contextMenu.firstChild); + }; + var canExecuteCommand = function (/** @type {string} */ cmd) { + return editor.commands.canExecute(cmd, editor); + }; + var handleClick = function (e) { + var action = e.target.getAttribute("action"); + if (action == "more" || !isOpen) { + isOpen = !isOpen; + return updateMenu(); + } + if (action == "paste") { + clipboard.readText().then(function (text) { + editor.execCommand(action, text); + }); + } + else if (action) { + if (action == "cut" || action == "copy") { + if (clipboard) + clipboard.writeText(editor.getCopyText()); + else + document.execCommand("copy"); + } + editor.execCommand(action); + } + contextMenu.firstChild.style.display = "none"; + isOpen = false; + if (action != "openCommandPalette") + editor.focus(); + }; + contextMenu = dom.buildDom(["div", + { + class: "ace_mobile-menu", + ontouchstart: function (e) { + mode = "menu"; + e.stopPropagation(); + e.preventDefault(); + editor.textInput.focus(); + }, + ontouchend: function (e) { + e.stopPropagation(); + e.preventDefault(); + handleClick(e); + }, + onclick: handleClick + }, + ["span"], + ["span", { class: "ace_mobile-button", action: "more" }, "..."] + ], editor.container); + } + function showContextMenu() { + if (!editor.getOption("enableMobileMenu")) { + if (contextMenu) { + hideContextMenu(); + } + return; + } + if (!contextMenu) + createContextMenu(); + var cursor = editor.selection.cursor; + var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column); + var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX; + var scrollLeft = editor.renderer.scrollLeft; + var rect = editor.container.getBoundingClientRect(); + contextMenu.style.top = pagePos.pageY - rect.top - 3 + "px"; + if (pagePos.pageX - rect.left < rect.width - 70) { + contextMenu.style.left = ""; + contextMenu.style.right = "10px"; + } + else { + contextMenu.style.right = ""; + contextMenu.style.left = leftOffset + scrollLeft - rect.left + "px"; + } + contextMenu.style.display = ""; + contextMenu.firstChild.style.display = "none"; + editor.on("input", hideContextMenu); + } + function hideContextMenu(e) { + if (contextMenu) + contextMenu.style.display = "none"; + editor.off("input", hideContextMenu); + } + function handleLongTap() { + longTouchTimer = null; + clearTimeout(longTouchTimer); + var range = editor.selection.getRange(); + var inSelection = range.contains(pos.row, pos.column); + if (range.isEmpty() || !inSelection) { + editor.selection.moveToPosition(pos); + editor.selection.selectWord(); + } + mode = "wait"; + showContextMenu(); + } + function switchToSelectionMode() { + longTouchTimer = null; + clearTimeout(longTouchTimer); + editor.selection.moveToPosition(pos); + var range = clickCount >= 2 + ? editor.selection.getLineRange(pos.row) + : editor.session.getBracketRange(pos); + if (range && !range.isEmpty()) { + editor.selection.setRange(range); + } + else { + editor.selection.selectWord(); + } + mode = "wait"; + } + event.addListener(el, "contextmenu", function (e) { + if (!pressed) + return; + var textarea = editor.textInput.getElement(); + textarea.focus(); + }, editor); + event.addListener(el, "touchstart", function (e) { + var touches = e.touches; + if (longTouchTimer || touches.length > 1) { + clearTimeout(longTouchTimer); + longTouchTimer = null; + touchStartT = -1; + mode = "zoom"; + return; + } + pressed = editor.$mouseHandler.isMousePressed = true; + var h = editor.renderer.layerConfig.lineHeight; + var w = editor.renderer.layerConfig.lineHeight; + var t = e.timeStamp; + lastT = t; + var touchObj = touches[0]; + var x = touchObj.clientX; + var y = touchObj.clientY; + if (Math.abs(startX - x) + Math.abs(startY - y) > h) + touchStartT = -1; + startX = e.clientX = x; + startY = e.clientY = y; + vX = vY = 0; + var ev = new MouseEvent(e, editor); + pos = ev.getDocumentPosition(); + if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) { + clickCount++; + e.preventDefault(); + e.button = 0; + switchToSelectionMode(); + } + else { + clickCount = 0; + var cursor = editor.selection.cursor; + var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor; + var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true); + var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true); + var rect = editor.renderer.scroller.getBoundingClientRect(); + var offsetTop = editor.renderer.layerConfig.offset; + var offsetLeft = editor.renderer.scrollLeft; + var weightedDistance = function (x, y) { + x = x / w; + y = y / h - 0.75; + return x * x + y * y; + }; + if (e.clientX < rect.left) { + mode = "zoom"; + return; + } + var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop); + var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop); + if (diff1 < 3.5 && diff2 < 3.5) + mode = diff1 > diff2 ? "cursor" : "anchor"; + if (diff2 < 3.5) + mode = "anchor"; + else if (diff1 < 3.5) + mode = "cursor"; + else + mode = "scroll"; + longTouchTimer = setTimeout(handleLongTap, 450); + } + touchStartT = t; + }, editor); + event.addListener(el, "touchend", function (e) { + pressed = editor.$mouseHandler.isMousePressed = false; + if (animationTimer) + clearInterval(animationTimer); + if (mode == "zoom") { + mode = ""; + animationSteps = 0; + } + else if (longTouchTimer) { + editor.selection.moveToPosition(pos); + animationSteps = 0; + showContextMenu(); + } + else if (mode == "scroll") { + animate(); + hideContextMenu(); + } + else { + showContextMenu(); + } + clearTimeout(longTouchTimer); + longTouchTimer = null; + }, editor); + event.addListener(el, "touchmove", function (e) { + if (longTouchTimer) { + clearTimeout(longTouchTimer); + longTouchTimer = null; + } + var touches = e.touches; + if (touches.length > 1 || mode == "zoom") + return; + var touchObj = touches[0]; + var wheelX = startX - touchObj.clientX; + var wheelY = startY - touchObj.clientY; + if (mode == "wait") { + if (wheelX * wheelX + wheelY * wheelY > 4) + mode = "cursor"; + else + return e.preventDefault(); + } + startX = touchObj.clientX; + startY = touchObj.clientY; + e.clientX = touchObj.clientX; + e.clientY = touchObj.clientY; + var t = e.timeStamp; + var dt = t - lastT; + lastT = t; + if (mode == "scroll") { + var mouseEvent = new MouseEvent(e, editor); + mouseEvent.speed = 1; + mouseEvent.wheelX = wheelX; + mouseEvent.wheelY = wheelY; + if (10 * Math.abs(wheelX) < Math.abs(wheelY)) + wheelX = 0; + if (10 * Math.abs(wheelY) < Math.abs(wheelX)) + wheelY = 0; + if (dt != 0) { + vX = wheelX / dt; + vY = wheelY / dt; + } + editor._emit("mousewheel", mouseEvent); + if (!mouseEvent.propagationStopped) { + vX = vY = 0; + } + } + else { + var ev = new MouseEvent(e, editor); + var pos = ev.getDocumentPosition(); + if (mode == "cursor") + editor.selection.moveCursorToPosition(pos); + else if (mode == "anchor") + editor.selection.setSelectionAnchor(pos.row, pos.column); + editor.renderer.scrollCursorIntoView(pos); + e.preventDefault(); + } + }, editor); + function animate() { + animationSteps += 60; + animationTimer = setInterval(function () { + if (animationSteps-- <= 0) { + clearInterval(animationTimer); + animationTimer = null; + } + if (Math.abs(vX) < 0.01) + vX = 0; + if (Math.abs(vY) < 0.01) + vY = 0; + if (animationSteps < 20) + vX = 0.9 * vX; + if (animationSteps < 20) + vY = 0.9 * vY; + var oldScrollTop = editor.session.getScrollTop(); + editor.renderer.scrollBy(10 * vX, 10 * vY); + if (oldScrollTop == editor.session.getScrollTop()) + animationSteps = 0; + }, 10); + } +}; -.lm-DockPanel-handle { - z-index: 2; -} +}); -.lm-DockPanel-handle.lm-mod-hidden { - display: none !important; -} +ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/mouse/touch_handler","ace/config"], function(require, exports, module){"use strict"; +var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +var DefaultHandlers = require("./default_handlers").DefaultHandlers; +var DefaultGutterHandler = require("./default_gutter_handler").GutterHandler; +var MouseEvent = require("./mouse_event").MouseEvent; +var DragdropHandler = require("./dragdrop_handler").DragdropHandler; +var addTouchListeners = require("./touch_handler").addTouchListeners; +var config = require("../config"); +var MouseHandler = /** @class */ (function () { + function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout; + var _self = this; + this.editor = editor; + new DefaultHandlers(this); + new DefaultGutterHandler(this); + new DragdropHandler(this); + var focusEditor = function (e) { + var windowBlurred = !document.hasFocus || !document.hasFocus() + || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement()); + if (windowBlurred) + window.focus(); + editor.focus(); + setTimeout(function () { + if (!editor.isFocused()) + editor.focus(); + }); + }; + var mouseTarget = editor.renderer.getMouseEventTarget(); + event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click"), editor); + event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove"), editor); + event.addMultiMouseDownListener([ + mouseTarget, + editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner, + editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner, + editor.textInput && editor.textInput.getElement() + ].filter(Boolean), [400, 300, 250], this, "onMouseEvent", editor); + event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel"), editor); + addTouchListeners(editor.container, editor); + var gutterEl = editor.renderer.$gutter; + event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown"), editor); + event.addListener(gutterEl, "click", this.onMouseEvent.bind(this, "gutterclick"), editor); + event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick"), editor); + event.addListener(gutterEl, "mousemove", this.onMouseEvent.bind(this, "guttermousemove"), editor); + event.addListener(mouseTarget, "mousedown", focusEditor, editor); + event.addListener(gutterEl, "mousedown", focusEditor, editor); + if (useragent.isIE && editor.renderer.scrollBarV) { + event.addListener(editor.renderer.scrollBarV.element, "mousedown", focusEditor, editor); + event.addListener(editor.renderer.scrollBarH.element, "mousedown", focusEditor, editor); + } + editor.on("mousemove", function (e) { + if (_self.state || _self.$dragDelay || !_self.$dragEnabled) + return; + var character = editor.renderer.screenToTextCoordinates(e.x, e.y); + var range = editor.session.selection.getRange(); + var renderer = editor.renderer; + if (!range.isEmpty() && range.insideStart(character.row, character.column)) { + renderer.setCursorStyle("default"); + } + else { + renderer.setCursorStyle(""); + } + }, //@ts-expect-error TODO: seems mistyping - should be boolean + editor); + } + MouseHandler.prototype.onMouseEvent = function (name, e) { + if (!this.editor.session) + return; + this.editor._emit(name, new MouseEvent(e, this.editor)); + }; + MouseHandler.prototype.onMouseMove = function (name, e) { + var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove; + if (!listeners || !listeners.length) + return; + this.editor._emit(name, new MouseEvent(e, this.editor)); + }; + MouseHandler.prototype.onMouseWheel = function (name, e) { + var mouseEvent = new MouseEvent(e, this.editor); + mouseEvent.speed = this.$scrollSpeed * 2; + mouseEvent.wheelX = e.wheelX; + mouseEvent.wheelY = e.wheelY; + this.editor._emit(name, mouseEvent); + }; + MouseHandler.prototype.setState = function (state) { + this.state = state; + }; + MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) { + this.x = ev.x; + this.y = ev.y; + this.isMousePressed = true; + var editor = this.editor; + var renderer = this.editor.renderer; + renderer.$isMousePressed = true; + var self = this; + var continueCapture = true; + var onMouseMove = function (e) { + if (!e) + return; + if (useragent.isWebKit && !e.which && self.releaseMouse) + return self.releaseMouse(); + self.x = e.clientX; + self.y = e.clientY; + mouseMoveHandler && mouseMoveHandler(e); + self.mouseEvent = new MouseEvent(e, self.editor); + self.$mouseMoved = true; + }; + var onCaptureEnd = function (e) { + editor.off("beforeEndOperation", onOperationEnd); + continueCapture = false; + if (editor.session) + onCaptureUpdate(); + self[self.state + "End"] && self[self.state + "End"](e); + self.state = ""; + self.isMousePressed = renderer.$isMousePressed = false; + if (renderer.$keepTextAreaAtCursor) + renderer.$moveTextAreaToCursor(); + self.$onCaptureMouseMove = self.releaseMouse = null; + e && self.onMouseEvent("mouseup", e); + editor.endOperation(); + }; + var onCaptureUpdate = function () { + self[self.state] && self[self.state](); + self.$mouseMoved = false; + }; + var onCaptureInterval = function () { + if (continueCapture) { + onCaptureUpdate(); + event.nextFrame(onCaptureInterval); + } + }; + if (useragent.isOldIE && ev.domEvent.type == "dblclick") { + return setTimeout(function () { onCaptureEnd(ev); }); + } + var onOperationEnd = function (e) { + if (!self.releaseMouse) + return; + if (editor.curOp.command.name && editor.curOp.selectionChanged) { + self[self.state + "End"] && self[self.state + "End"](); + self.state = ""; + self.releaseMouse(); + } + }; + editor.on("beforeEndOperation", onOperationEnd); + editor.startOperation({ command: { name: "mouse" } }); + self.$onCaptureMouseMove = onMouseMove; + self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd); + onCaptureInterval(); + }; + MouseHandler.prototype.cancelContextMenu = function () { + var stop = function (e) { + if (e && e.domEvent && e.domEvent.type != "contextmenu") + return; + this.editor.off("nativecontextmenu", stop); + if (e && e.domEvent) + event.stopEvent(e.domEvent); + }.bind(this); + setTimeout(stop, 10); + this.editor.on("nativecontextmenu", stop); + }; + MouseHandler.prototype.destroy = function () { + if (this.releaseMouse) + this.releaseMouse(); + }; + return MouseHandler; +}()); +MouseHandler.prototype.releaseMouse = null; +config.defineOptions(MouseHandler.prototype, "mouseHandler", { + scrollSpeed: { initialValue: 2 }, + dragDelay: { initialValue: (useragent.isMac ? 150 : 0) }, + dragEnabled: { initialValue: true }, + focusTimeout: { initialValue: 0 }, + tooltipFollowsMouse: { initialValue: true } +}); +exports.MouseHandler = MouseHandler; -.lm-DockPanel-handle:after { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - content: ''; -} +}); -.lm-DockPanel-handle[data-orientation='horizontal'] { - cursor: ew-resize; -} +ace.define("ace/mouse/fold_handler",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var FoldHandler = /** @class */ (function () { + function FoldHandler(editor) { + editor.on("click", function (e) { + var position = e.getDocumentPosition(); + var session = editor.session; + var fold = session.getFoldAt(position.row, position.column, 1); + if (fold) { + if (e.getAccelKey()) + session.removeFold(fold); + else + session.expandFold(fold); + e.stop(); + } + var target = e.domEvent && e.domEvent.target; + if (target && dom.hasCssClass(target, "ace_inline_button")) { + if (dom.hasCssClass(target, "ace_toggle_wrap")) { + session.setOption("wrap", !session.getUseWrapMode()); + editor.renderer.scrollCursorIntoView(); + } + } + }); + editor.on("gutterclick", function (e) { + var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); + if (gutterRegion == "foldWidgets") { + var row = e.getDocumentPosition().row; + var session = editor.session; + if (session.foldWidgets && session.foldWidgets[row]) + editor.session.onFoldWidgetClick(row, e); + if (!editor.isFocused()) + editor.focus(); + e.stop(); + } + }); + editor.on("gutterdblclick", function (e) { + var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); + if (gutterRegion == "foldWidgets") { + var row = e.getDocumentPosition().row; + var session = editor.session; + var data = session.getParentFoldRangeData(row, true); + var range = data.range || data.firstRange; + if (range) { + row = range.start.row; + var fold = session.getFoldAt(row, session.getLine(row).length, 1); + if (fold) { + session.removeFold(fold); + } + else { + session.addFold("...", range); + editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 }); + } + } + e.stop(); + } + }); + } + return FoldHandler; +}()); +exports.FoldHandler = FoldHandler; -.lm-DockPanel-handle[data-orientation='vertical'] { - cursor: ns-resize; -} +}); -.lm-DockPanel-handle[data-orientation='horizontal']:after { - left: 50%; - min-width: 8px; - transform: translateX(-50%); -} +ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"], function(require, exports, module){"use strict"; +var keyUtil = require("../lib/keys"); +var event = require("../lib/event"); +var KeyBinding = /** @class */ (function () { + function KeyBinding(editor) { + this.$editor = editor; + this.$data = { editor: editor }; + this.$handlers = []; + this.setDefaultHandler(editor.commands); + } + KeyBinding.prototype.setDefaultHandler = function (kb) { + this.removeKeyboardHandler(this.$defaultHandler); + this.$defaultHandler = kb; + this.addKeyboardHandler(kb, 0); + }; + KeyBinding.prototype.setKeyboardHandler = function (kb) { + var h = this.$handlers; + if (h[h.length - 1] == kb) + return; + while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) + this.removeKeyboardHandler(h[h.length - 1]); + this.addKeyboardHandler(kb, 1); + }; + KeyBinding.prototype.addKeyboardHandler = function (kb, pos) { + if (!kb) + return; + if (typeof kb == "function" && !kb.handleKeyboard) + kb.handleKeyboard = kb; + var i = this.$handlers.indexOf(kb); + if (i != -1) + this.$handlers.splice(i, 1); + if (pos == undefined) + this.$handlers.push(kb); + else + this.$handlers.splice(pos, 0, kb); + if (i == -1 && kb.attach) + kb.attach(this.$editor); + }; + KeyBinding.prototype.removeKeyboardHandler = function (kb) { + var i = this.$handlers.indexOf(kb); + if (i == -1) + return false; + this.$handlers.splice(i, 1); + kb.detach && kb.detach(this.$editor); + return true; + }; + KeyBinding.prototype.getKeyboardHandler = function () { + return this.$handlers[this.$handlers.length - 1]; + }; + KeyBinding.prototype.getStatusText = function () { + var data = this.$data; + var editor = data.editor; + return this.$handlers.map(function (h) { + return h.getStatusText && h.getStatusText(editor, data) || ""; + }).filter(Boolean).join(" "); + }; + KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) { + var toExecute; + var success = false; + var commands = this.$editor.commands; + for (var i = this.$handlers.length; i--;) { + toExecute = this.$handlers[i].handleKeyboard( + this.$data, hashId, keyString, keyCode, e); + if (!toExecute || !toExecute.command) + continue; + if (toExecute.command == "null") { + success = true; + } + else { + success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); + } + if (success && e && hashId != -1 && + toExecute["passEvent"] != true && toExecute.command["passEvent"] != true) { + event.stopEvent(e); + } + if (success) + break; + } + if (!success && hashId == -1) { + toExecute = { command: "insertstring" }; + success = commands.exec("insertstring", this.$editor, keyString); + } + if (success && this.$editor._signal) + this.$editor._signal("keyboardActivity", toExecute); + return success; + }; + KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) { + var keyString = keyUtil.keyCodeToString(keyCode); + return this.$callKeyboardHandlers(hashId, keyString, keyCode, e); + }; + KeyBinding.prototype.onTextInput = function (text) { + return this.$callKeyboardHandlers(-1, text); + }; + return KeyBinding; +}()); +exports.KeyBinding = KeyBinding; -.lm-DockPanel-handle[data-orientation='vertical']:after { - top: 50%; - min-height: 8px; - transform: translateY(-50%); -} +}); -.lm-DockPanel-overlay { - z-index: 3; - box-sizing: border-box; - pointer-events: none; +ace.define("ace/lib/bidiutil",["require","exports","module"], function(require, exports, module){"use strict"; +var ArabicAlefBetIntervalsBegine = ['\u0621', '\u0641']; +var ArabicAlefBetIntervalsEnd = ['\u063A', '\u064a']; +var dir = 0, hiLevel = 0; +var lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false; +var impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0] +]; +var impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1] +]; +var LTR = 0, RTL = 1; +var L = 0; +var R = 1; +var EN = 2; +var AN = 3; +var ON = 4; +var B = 5; +var S = 6; +var AL = 7; +var WS = 8; +var CS = 9; +var ES = 10; +var ET = 11; +var NSM = 12; +var LRE = 13; +var RLE = 14; +var PDF = 15; +var LRO = 16; +var RLO = 17; +var BN = 18; +var UnicodeTBL00 = [ + BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN, + BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S, + WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS, + EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON, + ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, + L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, + ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, + L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN, + BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, + BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, + CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON, + ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON +]; +var UnicodeTBL20 = [ + WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R, + ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, + ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS, + ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, + ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, + ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS +]; +function _computeLevels(chars, levels, len, charTypes) { + var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = []; + if (!charTypes) { + for (i = 0, charTypes = []; i < len; i++) { + charTypes[i] = _getCharacterType(chars[i]); + } + } + hiLevel = dir; + lastArabic = false; + hasUBAT_AL = false; + hasUBAT_B = false; + hasUBAT_S = false; + for (ix = 0; ix < len; ix++) { + prevState = newState; + classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix); + newState = impTab[prevState][newClass]; + action = newState & 0xF0; + newState &= 0x0F; + levels[ix] = newLevel = impTab[newState][5]; + if (action > 0) { + if (action == 0x10) { + for (i = condPos; i < ix; i++) { + levels[i] = 1; + } + condPos = -1; + } + else { + condPos = -1; + } + } + cond = impTab[newState][6]; + if (cond) { + if (condPos == -1) { + condPos = ix; + } + } + else { + if (condPos > -1) { + for (i = condPos; i < ix; i++) { + levels[i] = newLevel; + } + condPos = -1; + } + } + if (charTypes[ix] == B) { + levels[ix] = 0; + } + hiLevel |= newLevel; + } + if (hasUBAT_S) { + for (i = 0; i < len; i++) { + if (charTypes[i] == S) { + levels[i] = dir; + for (var j = i - 1; j >= 0; j--) { + if (charTypes[j] == WS) { + levels[j] = dir; + } + else { + break; + } + } + } + } + } } - -.lm-DockPanel-overlay.lm-mod-hidden { - display: none !important; +function _invertLevel(lev, levels, _array) { + if (hiLevel < lev) { + return; + } + if (lev == 1 && dir == RTL && !hasUBAT_B) { + _array.reverse(); + return; + } + var len = _array.length, start = 0, end, lo, hi, tmp; + while (start < len) { + if (levels[start] >= lev) { + end = start + 1; + while (end < len && levels[end] >= lev) { + end++; + } + for (lo = start, hi = end - 1; lo < hi; lo++, hi--) { + tmp = _array[lo]; + _array[lo] = _array[hi]; + _array[hi] = tmp; + } + start = end; + } + start++; + } } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/dockpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B;;AAEA;EACE,UAAU;EACV,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel {\n z-index: 0;\n}\n\n.lm-DockPanel-widget {\n z-index: 0;\n}\n\n.lm-DockPanel-tabBar {\n z-index: 1;\n}\n\n.lm-DockPanel-handle {\n z-index: 2;\n}\n\n.lm-DockPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-DockPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal'] {\n cursor: ew-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='vertical'] {\n cursor: ns-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-DockPanel-handle[data-orientation='vertical']:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n\n.lm-DockPanel-overlay {\n z-index: 3;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n.lm-DockPanel-overlay.lm-mod-hidden {\n display: none !important;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css": -/*!************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/index.css ***! - \************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_widget_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./widget.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/accordionpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/commandpalette.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/dockpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_splitpanel_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./splitpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_cjs_js_tabpanel_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! -!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabpanel.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css"); -// Imports - - - - - - - - - - - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_widget_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_accordionpanel_css__WEBPACK_IMPORTED_MODULE_3__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_commandpalette_css__WEBPACK_IMPORTED_MODULE_4__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_dockpanel_css__WEBPACK_IMPORTED_MODULE_5__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menu_css__WEBPACK_IMPORTED_MODULE_6__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_menubar_css__WEBPACK_IMPORTED_MODULE_7__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_scrollbar_css__WEBPACK_IMPORTED_MODULE_8__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_splitpanel_css__WEBPACK_IMPORTED_MODULE_9__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabbar_css__WEBPACK_IMPORTED_MODULE_10__["default"]); -___CSS_LOADER_EXPORT___.i(_packages_nowvis_node_modules_css_loader_dist_cjs_js_tabpanel_css__WEBPACK_IMPORTED_MODULE_11__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/index.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n@import './widget.css';\n@import './accordionpanel.css';\n@import './commandpalette.css';\n@import './dockpanel.css';\n@import './menu.css';\n@import './menubar.css';\n@import './scrollbar.css';\n@import './splitpanel.css';\n@import './tabbar.css';\n@import './tabpanel.css';\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css": -/*!***********************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menu.css ***! - \***********************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-Menu { - z-index: 10000; - position: absolute; - white-space: nowrap; - overflow-x: hidden; - overflow-y: auto; - outline: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; +function _getCharClass(chars, types, classes, ix) { + var cType = types[ix], wType, nType, len, i; + switch (cType) { + case L: + case R: + lastArabic = false; + case ON: + case AN: + return cType; + case EN: + return lastArabic ? AN : EN; + case AL: + lastArabic = true; + hasUBAT_AL = true; + return R; + case WS: + return ON; + case CS: + if (ix < 1 || (ix + 1) >= types.length || + ((wType = classes[ix - 1]) != EN && wType != AN) || + ((nType = types[ix + 1]) != EN && nType != AN)) { + return ON; + } + if (lastArabic) { + nType = AN; + } + return nType == wType ? nType : ON; + case ES: + wType = ix > 0 ? classes[ix - 1] : B; + if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) { + return EN; + } + return ON; + case ET: + if (ix > 0 && classes[ix - 1] == EN) { + return EN; + } + if (lastArabic) { + return ON; + } + i = ix + 1; + len = types.length; + while (i < len && types[i] == ET) { + i++; + } + if (i < len && types[i] == EN) { + return EN; + } + return ON; + case NSM: + len = types.length; + i = ix + 1; + while (i < len && types[i] == NSM) { + i++; + } + if (i < len) { + var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E; + wType = types[i]; + if (rtlCandidate && (wType == R || wType == AL)) { + return R; + } + } + if (ix < 1 || (wType = types[ix - 1]) == B) { + return ON; + } + return classes[ix - 1]; + case B: + lastArabic = false; + hasUBAT_B = true; + return dir; + case S: + hasUBAT_S = true; + return ON; + case LRE: + case RLE: + case LRO: + case RLO: + case PDF: + lastArabic = false; + case BN: + return ON; + } } - -.lm-Menu-content { - margin: 0; - padding: 0; - display: table; - list-style-type: none; +function _getCharacterType(ch) { + var uc = ch.charCodeAt(0), hi = uc >> 8; + if (hi == 0) { + return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]); + } + else if (hi == 5) { + return (/[\u0591-\u05f4]/.test(ch) ? R : L); + } + else if (hi == 6) { + if (/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(ch)) + return NSM; + else if (/[\u0660-\u0669\u066b-\u066c]/.test(ch)) + return AN; + else if (uc == 0x066A) + return ET; + else if (/[\u06f0-\u06f9]/.test(ch)) + return EN; + else + return AL; + } + else if (hi == 0x20 && uc <= 0x205F) { + return UnicodeTBL20[uc & 0xFF]; + } + else if (hi == 0xFE) { + return (uc >= 0xFE70 ? AL : ON); + } + return ON; } - -.lm-Menu-item { - display: table-row; +function _isArabicDiacritics(ch) { + return (ch >= '\u064b' && ch <= '\u0655'); } +exports.L = L; +exports.R = R; +exports.EN = EN; +exports.ON_R = 3; +exports.AN = 4; +exports.R_H = 5; +exports.B = 6; +exports.RLE = 7; +exports.DOT = "\xB7"; +exports.doBidiReorder = function (text, textCharTypes, isRtl) { + if (text.length < 2) + return {}; + var chars = text.split(""), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = []; + dir = isRtl ? RTL : LTR; + _computeLevels(chars, levels, chars.length, textCharTypes); + for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++) + ; + _invertLevel(2, levels, logicalFromVisual); + _invertLevel(1, levels, logicalFromVisual); + for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width + if (textCharTypes[i] === AN) { + levels[i] = exports.AN; + } + else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) + || textCharTypes[i] === ON || textCharTypes[i] === BN)) { + levels[i] = exports.ON_R; + } + else if ((i > 0 && chars[i - 1] === '\u0644') && /\u0622|\u0623|\u0625|\u0627/.test(chars[i])) { + levels[i - 1] = levels[i] = exports.R_H; + i++; + } + } + if (chars[chars.length - 1] === exports.DOT) + levels[chars.length - 1] = exports.B; + if (chars[0] === '\u202B') + levels[0] = exports.RLE; + for (var i = 0; i < logicalFromVisual.length; i++) { + bidiLevels[i] = levels[logicalFromVisual[i]]; + } + return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels }; +}; +exports.hasBidiCharacters = function (text, textCharTypes) { + var ret = false; + for (var i = 0; i < text.length; i++) { + textCharTypes[i] = _getCharacterType(text.charAt(i)); + if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN)) + ret = true; + } + return ret; +}; +exports.getVisualFromLogicalIdx = function (logIdx, rowMap) { + for (var i = 0; i < rowMap.logicalFromVisual.length; i++) { + if (rowMap.logicalFromVisual[i] == logIdx) + return i; + } + return 0; +}; -.lm-Menu-item.lm-mod-hidden, -.lm-Menu-item.lm-mod-collapsed { - display: none !important; -} +}); + +ace.define("ace/bidihandler",["require","exports","module","ace/lib/bidiutil","ace/lib/lang"], function(require, exports, module){"use strict"; +var bidiUtil = require("./lib/bidiutil"); +var lang = require("./lib/lang"); +var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac\u202B]/; +var BidiHandler = /** @class */ (function () { + function BidiHandler(session) { + this.session = session; + this.bidiMap = {}; + this.currentRow = null; + this.bidiUtil = bidiUtil; + this.charWidths = []; + this.EOL = "\xAC"; + this.showInvisibles = true; + this.isRtlDir = false; + this.$isRtl = false; + this.line = ""; + this.wrapIndent = 0; + this.EOF = "\xB6"; + this.RLE = "\u202B"; + this.contentWidth = 0; + this.fontMetrics = null; + this.rtlLineOffset = 0; + this.wrapOffset = 0; + this.isMoveLeftOperation = false; + this.seenBidi = bidiRE.test(session.getValue()); + } + BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) { + if (!this.seenBidi) + return false; + if (screenRow !== this.currentRow) { + this.currentRow = screenRow; + this.updateRowLine(docRow, splitIndex); + this.updateBidiMap(); + } + return this.bidiMap.bidiLevels; + }; + BidiHandler.prototype.onChange = function (delta) { + if (!this.seenBidi) { + if (delta.action == "insert" && bidiRE.test(delta.lines.join("\n"))) { + this.seenBidi = true; + this.currentRow = null; + } + } + else { + this.currentRow = null; + } + }; + BidiHandler.prototype.getDocumentRow = function () { + var docRow = 0; + var rowCache = this.session.$screenRowCache; + if (rowCache.length) { + var index = this.session.$getRowCacheIndex(rowCache, this.currentRow); + if (index >= 0) + docRow = this.session.$docRowCache[index]; + } + return docRow; + }; + BidiHandler.prototype.getSplitIndex = function () { + var splitIndex = 0; + var rowCache = this.session.$screenRowCache; + if (rowCache.length) { + var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow); + while (this.currentRow - splitIndex > 0) { + currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1); + if (currentIndex !== prevIndex) + break; + prevIndex = currentIndex; + splitIndex++; + } + } + else { + splitIndex = this.currentRow; + } + return splitIndex; + }; + BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) { + if (docRow === undefined) + docRow = this.getDocumentRow(); + var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL; + this.wrapIndent = 0; + this.line = this.session.getLine(docRow); + this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE; + if (this.session.$useWrapMode) { + var splits = this.session.$wrapData[docRow]; + if (splits) { + if (splitIndex === undefined) + splitIndex = this.getSplitIndex(); + if (splitIndex > 0 && splits.length) { + this.wrapIndent = splits.indent; + this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L]; + this.line = (splitIndex < splits.length) ? + this.line.substring(splits[splitIndex - 1], splits[splitIndex]) : + this.line.substring(splits[splits.length - 1]); + } + else { + this.line = this.line.substring(0, splits[splitIndex]); + } + if (splitIndex == splits.length) { + this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT; + } + } + } + else { + this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT; + } + var session = this.session, shift = 0, size; + this.line = this.line.replace(/\t|[\u1100-\u2029, \u202F-\uFFE6]/g, function (ch, i) { + if (ch === '\t' || session.isFullWidth(ch.charCodeAt(0))) { + size = (ch === '\t') ? session.getScreenTabSize(i + shift) : 2; + shift += size - 1; + return lang.stringRepeat(bidiUtil.DOT, size); + } + return ch; + }); + if (this.isRtlDir) { + this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line; + this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width; + } + }; + BidiHandler.prototype.updateBidiMap = function () { + var textCharTypes = []; + if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) { + this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir); + } + else { + this.bidiMap = {}; + } + }; + BidiHandler.prototype.markAsDirty = function () { + this.currentRow = null; + }; + BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) { + if (this.characterWidth === fontMetrics.$characterSize.width) + return; + this.fontMetrics = fontMetrics; + var characterWidth = this.characterWidth = fontMetrics.$characterSize.width; + var bidiCharWidth = fontMetrics.$measureCharWidth("\u05d4"); + this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth; + this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth; + this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45; + this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0; + this.currentRow = null; + }; + BidiHandler.prototype.setShowInvisibles = function (showInvisibles) { + this.showInvisibles = showInvisibles; + this.currentRow = null; + }; + BidiHandler.prototype.setEolChar = function (eolChar) { + this.EOL = eolChar; + }; + BidiHandler.prototype.setContentWidth = function (width) { + this.contentWidth = width; + }; + BidiHandler.prototype.isRtlLine = function (row) { + if (this.$isRtl) + return true; + if (row != undefined) + return (this.session.getLine(row).charAt(0) == this.RLE); + else + return this.isRtlDir; + }; + BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) { + var cursor = editor.getCursorPosition(); + for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) { + if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE) + editor.session.doc.removeInLine(row, 0, 1); + else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE) + editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE); + } + }; + BidiHandler.prototype.getPosLeft = function (col) { + col -= this.wrapIndent; + var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0; + var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary; + var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0; + if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0) + visualIdx++; + for (var i = 0; i < visualIdx; i++) { + left += this.charWidths[levels[i]]; + } + if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0)) + left += this.charWidths[levels[visualIdx]]; + if (this.wrapIndent) + left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; + if (this.isRtlDir) + left += this.rtlLineOffset; + return left; + }; + BidiHandler.prototype.getSelections = function (startCol, endCol) { + var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0; + if (this.wrapIndent) + offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; + for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) { + logIdx = map.logicalFromVisual[visIdx]; + level = levels[visIdx]; + isSelected = (logIdx >= selColMin) && (logIdx < selColMax); + if (isSelected && !isSelectedPrev) { + selectionStart = offset; + } + else if (!isSelected && isSelectedPrev) { + selections.push({ left: selectionStart, width: offset - selectionStart }); + } + offset += this.charWidths[level]; + isSelectedPrev = isSelected; + } + if (isSelected && (visIdx === levels.length)) { + selections.push({ left: selectionStart, width: offset - selectionStart }); + } + if (this.isRtlDir) { + for (var i = 0; i < selections.length; i++) { + selections[i].left += this.rtlLineOffset; + } + } + return selections; + }; + BidiHandler.prototype.offsetToCol = function (posX) { + if (this.isRtlDir) + posX -= this.rtlLineOffset; + var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]]; + if (this.wrapIndent) + posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset; + while (posX > offset + charWidth / 2) { + offset += charWidth; + if (visualIdx === levels.length - 1) { + charWidth = 0; + break; + } + charWidth = this.charWidths[levels[++visualIdx]]; + } + if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) { + if (posX < offset) + visualIdx--; + logicalIdx = this.bidiMap.logicalFromVisual[visualIdx]; + } + else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) { + logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx] + : this.bidiMap.logicalFromVisual[visualIdx - 1]); + } + else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0)) + || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) { + logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx]; + } + else { + if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0) + visualIdx--; + logicalIdx = this.bidiMap.logicalFromVisual[visualIdx]; + } + if (logicalIdx === 0 && this.isRtlDir) + logicalIdx++; + return (logicalIdx + this.wrapIndent); + }; + return BidiHandler; +}()); +exports.BidiHandler = BidiHandler; -.lm-Menu-itemIcon, -.lm-Menu-itemSubmenuIcon { - display: table-cell; - text-align: center; -} +}); -.lm-Menu-itemLabel { - display: table-cell; - text-align: left; -} +ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var lang = require("./lib/lang"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Range = require("./range").Range; +var Selection = /** @class */ (function () { + function Selection(session) { + this.session = session; + this.doc = session.getDocument(); + this.clearSelection(); + this.cursor = this.lead = this.doc.createAnchor(0, 0); + this.anchor = this.doc.createAnchor(0, 0); + this.$silent = false; + var self = this; + this.cursor.on("change", function (e) { + self.$cursorChanged = true; + if (!self.$silent) + self._emit("changeCursor"); + if (!self.$isEmpty && !self.$silent) + self._emit("changeSelection"); + if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) + self.$desiredColumn = null; + }); + this.anchor.on("change", function () { + self.$anchorChanged = true; + if (!self.$isEmpty && !self.$silent) + self._emit("changeSelection"); + }); + } + Selection.prototype.isEmpty = function () { + return this.$isEmpty || (this.anchor.row == this.lead.row && + this.anchor.column == this.lead.column); + }; + Selection.prototype.isMultiLine = function () { + return !this.$isEmpty && this.anchor.row != this.cursor.row; + }; + Selection.prototype.getCursor = function () { + return this.lead.getPosition(); + }; + Selection.prototype.setAnchor = function (row, column) { + this.$isEmpty = false; + this.anchor.setPosition(row, column); + }; + Selection.prototype.getAnchor = function () { + if (this.$isEmpty) + return this.getSelectionLead(); + return this.anchor.getPosition(); + }; + Selection.prototype.getSelectionLead = function () { + return this.lead.getPosition(); + }; + Selection.prototype.isBackwards = function () { + var anchor = this.anchor; + var lead = this.lead; + return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); + }; + Selection.prototype.getRange = function () { + var anchor = this.anchor; + var lead = this.lead; + if (this.$isEmpty) + return Range.fromPoints(lead, lead); + return this.isBackwards() + ? Range.fromPoints(lead, anchor) + : Range.fromPoints(anchor, lead); + }; + Selection.prototype.clearSelection = function () { + if (!this.$isEmpty) { + this.$isEmpty = true; + this._emit("changeSelection"); + } + }; + Selection.prototype.selectAll = function () { + this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE); + }; + Selection.prototype.setRange = function (range, reverse) { + var start = reverse ? range.end : range.start; + var end = reverse ? range.start : range.end; + this.$setSelection(start.row, start.column, end.row, end.column); + }; + Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) { + if (this.$silent) + return; + var wasEmpty = this.$isEmpty; + var wasMultiselect = this.inMultiSelectMode; + this.$silent = true; + this.$cursorChanged = this.$anchorChanged = false; + this.anchor.setPosition(anchorRow, anchorColumn); + this.cursor.setPosition(cursorRow, cursorColumn); + this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor); + this.$silent = false; + if (this.$cursorChanged) + this._emit("changeCursor"); + if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect) + this._emit("changeSelection"); + }; + Selection.prototype.$moveSelection = function (mover) { + var lead = this.lead; + if (this.$isEmpty) + this.setSelectionAnchor(lead.row, lead.column); + mover.call(this); + }; + Selection.prototype.selectTo = function (row, column) { + this.$moveSelection(function () { + this.moveCursorTo(row, column); + }); + }; + Selection.prototype.selectToPosition = function (pos) { + this.$moveSelection(function () { + this.moveCursorToPosition(pos); + }); + }; + Selection.prototype.moveTo = function (row, column) { + this.clearSelection(); + this.moveCursorTo(row, column); + }; + Selection.prototype.moveToPosition = function (pos) { + this.clearSelection(); + this.moveCursorToPosition(pos); + }; + Selection.prototype.selectUp = function () { + this.$moveSelection(this.moveCursorUp); + }; + Selection.prototype.selectDown = function () { + this.$moveSelection(this.moveCursorDown); + }; + Selection.prototype.selectRight = function () { + this.$moveSelection(this.moveCursorRight); + }; + Selection.prototype.selectLeft = function () { + this.$moveSelection(this.moveCursorLeft); + }; + Selection.prototype.selectLineStart = function () { + this.$moveSelection(this.moveCursorLineStart); + }; + Selection.prototype.selectLineEnd = function () { + this.$moveSelection(this.moveCursorLineEnd); + }; + Selection.prototype.selectFileEnd = function () { + this.$moveSelection(this.moveCursorFileEnd); + }; + Selection.prototype.selectFileStart = function () { + this.$moveSelection(this.moveCursorFileStart); + }; + Selection.prototype.selectWordRight = function () { + this.$moveSelection(this.moveCursorWordRight); + }; + Selection.prototype.selectWordLeft = function () { + this.$moveSelection(this.moveCursorWordLeft); + }; + Selection.prototype.getWordRange = function (row, column) { + if (typeof column == "undefined") { + var cursor = row || this.lead; + row = cursor.row; + column = cursor.column; + } + return this.session.getWordRange(row, column); + }; + Selection.prototype.selectWord = function () { + this.setSelectionRange(this.getWordRange()); + }; + Selection.prototype.selectAWord = function () { + var cursor = this.getCursor(); + var range = this.session.getAWordRange(cursor.row, cursor.column); + this.setSelectionRange(range); + }; + Selection.prototype.getLineRange = function (row, excludeLastChar) { + var rowStart = typeof row == "number" ? row : this.lead.row; + var rowEnd; + var foldLine = this.session.getFoldLine(rowStart); + if (foldLine) { + rowStart = foldLine.start.row; + rowEnd = foldLine.end.row; + } + else { + rowEnd = rowStart; + } + if (excludeLastChar === true) + return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); + else + return new Range(rowStart, 0, rowEnd + 1, 0); + }; + Selection.prototype.selectLine = function () { + this.setSelectionRange(this.getLineRange()); + }; + Selection.prototype.moveCursorUp = function () { + this.moveCursorBy(-1, 0); + }; + Selection.prototype.moveCursorDown = function () { + this.moveCursorBy(1, 0); + }; + Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) { + var start = cursor.column; + var end = cursor.column + tabSize; + if (direction < 0) { + start = cursor.column - tabSize; + end = cursor.column; + } + return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(" ").length - 1 == tabSize; + }; + Selection.prototype.moveCursorLeft = function () { + var cursor = this.lead.getPosition(), fold; + if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + } + else if (cursor.column === 0) { + if (cursor.row > 0) { + this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); + } + } + else { + var tabSize = this.session.getTabSize(); + if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) { + this.moveCursorBy(0, -tabSize); + } + else { + this.moveCursorBy(0, -1); + } + } + }; + Selection.prototype.moveCursorRight = function () { + var cursor = this.lead.getPosition(), fold; + if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { + this.moveCursorTo(fold.end.row, fold.end.column); + } + else if (this.lead.column == this.doc.getLine(this.lead.row).length) { + if (this.lead.row < this.doc.getLength() - 1) { + this.moveCursorTo(this.lead.row + 1, 0); + } + } + else { + var tabSize = this.session.getTabSize(); + var cursor = this.lead; + if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) { + this.moveCursorBy(0, tabSize); + } + else { + this.moveCursorBy(0, 1); + } + } + }; + Selection.prototype.moveCursorLineStart = function () { + var row = this.lead.row; + var column = this.lead.column; + var screenRow = this.session.documentToScreenRow(row, column); + var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); + var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column); + var leadingSpace = beforeCursor.match(/^\s*/); + if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) + firstColumnPosition.column += leadingSpace[0].length; + this.moveCursorToPosition(firstColumnPosition); + }; + Selection.prototype.moveCursorLineEnd = function () { + var lead = this.lead; + var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); + if (this.lead.column == lineEnd.column) { + var line = this.session.getLine(lineEnd.row); + if (lineEnd.column == line.length) { + var textEnd = line.search(/\s+$/); + if (textEnd > 0) + lineEnd.column = textEnd; + } + } + this.moveCursorTo(lineEnd.row, lineEnd.column); + }; + Selection.prototype.moveCursorFileEnd = function () { + var row = this.doc.getLength() - 1; + var column = this.doc.getLine(row).length; + this.moveCursorTo(row, column); + }; + Selection.prototype.moveCursorFileStart = function () { + this.moveCursorTo(0, 0); + }; + Selection.prototype.moveCursorLongWordRight = function () { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + this.session.nonTokenRe.lastIndex = 0; + this.session.tokenRe.lastIndex = 0; + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + this.moveCursorTo(fold.end.row, fold.end.column); + return; + } + if (this.session.nonTokenRe.exec(rightOfCursor)) { + column += this.session.nonTokenRe.lastIndex; + this.session.nonTokenRe.lastIndex = 0; + rightOfCursor = line.substring(column); + } + if (column >= line.length) { + this.moveCursorTo(row, line.length); + this.moveCursorRight(); + if (row < this.doc.getLength() - 1) + this.moveCursorWordRight(); + return; + } + if (this.session.tokenRe.exec(rightOfCursor)) { + column += this.session.tokenRe.lastIndex; + this.session.tokenRe.lastIndex = 0; + } + this.moveCursorTo(row, column); + }; + Selection.prototype.moveCursorLongWordLeft = function () { + var row = this.lead.row; + var column = this.lead.column; + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + return; + } + var str = this.session.getFoldStringAt(row, column, -1); + if (str == null) { + str = this.doc.getLine(row).substring(0, column); + } + var leftOfCursor = lang.stringReverse(str); + this.session.nonTokenRe.lastIndex = 0; + this.session.tokenRe.lastIndex = 0; + if (this.session.nonTokenRe.exec(leftOfCursor)) { + column -= this.session.nonTokenRe.lastIndex; + leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); + this.session.nonTokenRe.lastIndex = 0; + } + if (column <= 0) { + this.moveCursorTo(row, 0); + this.moveCursorLeft(); + if (row > 0) + this.moveCursorWordLeft(); + return; + } + if (this.session.tokenRe.exec(leftOfCursor)) { + column -= this.session.tokenRe.lastIndex; + this.session.tokenRe.lastIndex = 0; + } + this.moveCursorTo(row, column); + }; + Selection.prototype.$shortWordEndIndex = function (rightOfCursor) { + var index = 0, ch; + var whitespaceRe = /\s/; + var tokenRe = this.session.tokenRe; + tokenRe.lastIndex = 0; + if (this.session.tokenRe.exec(rightOfCursor)) { + index = this.session.tokenRe.lastIndex; + } + else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index++; + if (index < 1) { + tokenRe.lastIndex = 0; + while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { + tokenRe.lastIndex = 0; + index++; + if (whitespaceRe.test(ch)) { + if (index > 2) { + index--; + break; + } + else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index++; + if (index > 2) + break; + } + } + } + } + } + tokenRe.lastIndex = 0; + return index; + }; + Selection.prototype.moveCursorShortWordRight = function () { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + var fold = this.session.getFoldAt(row, column, 1); + if (fold) + return this.moveCursorTo(fold.end.row, fold.end.column); + if (column == line.length) { + var l = this.doc.getLength(); + do { + row++; + rightOfCursor = this.doc.getLine(row); + } while (row < l && /^\s*$/.test(rightOfCursor)); + if (!/^\s+/.test(rightOfCursor)) + rightOfCursor = ""; + column = 0; + } + var index = this.$shortWordEndIndex(rightOfCursor); + this.moveCursorTo(row, column + index); + }; + Selection.prototype.moveCursorShortWordLeft = function () { + var row = this.lead.row; + var column = this.lead.column; + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) + return this.moveCursorTo(fold.start.row, fold.start.column); + var line = this.session.getLine(row).substring(0, column); + if (column === 0) { + do { + row--; + line = this.doc.getLine(row); + } while (row > 0 && /^\s*$/.test(line)); + column = line.length; + if (!/\s+$/.test(line)) + line = ""; + } + var leftOfCursor = lang.stringReverse(line); + var index = this.$shortWordEndIndex(leftOfCursor); + return this.moveCursorTo(row, column - index); + }; + Selection.prototype.moveCursorWordRight = function () { + if (this.session.$selectLongWords) + this.moveCursorLongWordRight(); + else + this.moveCursorShortWordRight(); + }; + Selection.prototype.moveCursorWordLeft = function () { + if (this.session.$selectLongWords) + this.moveCursorLongWordLeft(); + else + this.moveCursorShortWordLeft(); + }; + Selection.prototype.moveCursorBy = function (rows, chars) { + var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column); + var offsetX; + if (chars === 0) { + if (rows !== 0) { + if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) { + offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column); + screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]); + } + else { + offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0]; + } + } + if (this.$desiredColumn) + screenPos.column = this.$desiredColumn; + else + this.$desiredColumn = screenPos.column; + } + if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) { + var widget = this.session.lineWidgets[this.lead.row]; + if (rows < 0) + rows -= widget.rowsAbove || 0; + else if (rows > 0) + rows += widget.rowCount - (widget.rowsAbove || 0); + } + var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX); + if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { + } + this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); + }; + Selection.prototype.moveCursorToPosition = function (position) { + this.moveCursorTo(position.row, position.column); + }; + Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) { + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + row = fold.start.row; + column = fold.start.column; + } + this.$keepDesiredColumnOnChange = true; + var line = this.session.getLine(row); + if (/[\uDC00-\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) { + if (this.lead.row == row && this.lead.column == column + 1) + column = column - 1; + else + column = column + 1; + } + this.lead.setPosition(row, column); + this.$keepDesiredColumnOnChange = false; + if (!keepDesiredColumn) + this.$desiredColumn = null; + }; + Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) { + var pos = this.session.screenToDocumentPosition(row, column); + this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); + }; + Selection.prototype.detach = function () { + this.lead.detach(); + this.anchor.detach(); + }; + Selection.prototype.fromOrientedRange = function (range) { + this.setSelectionRange(range, range.cursor == range.start); + this.$desiredColumn = range.desiredColumn || this.$desiredColumn; + }; + Selection.prototype.toOrientedRange = function (range) { + var r = this.getRange(); + if (range) { + range.start.column = r.start.column; + range.start.row = r.start.row; + range.end.column = r.end.column; + range.end.row = r.end.row; + } + else { + range = r; + } + range.cursor = this.isBackwards() ? range.start : range.end; + range.desiredColumn = this.$desiredColumn; + return range; + }; + Selection.prototype.getRangeOfMovements = function (func) { + var start = this.getCursor(); + try { + func(this); + var end = this.getCursor(); + return Range.fromPoints(start, end); + } + catch (e) { + return Range.fromPoints(start, start); + } + finally { + this.moveCursorToPosition(start); + } + }; + Selection.prototype.toJSON = function () { + if (this.rangeCount) { var data = this.ranges.map(function (r) { + var r1 = r.clone(); + r1.isBackwards = r.cursor == r.start; + return r1; + }); + } + else { var data = this.getRange(); + data.isBackwards = this.isBackwards(); + } + return data; + }; + Selection.prototype.fromJSON = function (data) { + if (data.start == undefined) { + if (this.rangeList && data.length > 1) { + this.toSingleRange(data[0]); + for (var i = data.length; i--;) { + var r = Range.fromPoints(data[i].start, data[i].end); + if (data[i].isBackwards) + r.cursor = r.start; + this.addRange(r, true); + } + return; + } + else { + data = data[0]; + } + } + if (this.rangeList) + this.toSingleRange(data); + this.setSelectionRange(data, data.isBackwards); + }; + Selection.prototype.isEqual = function (data) { + if ((data.length || this.rangeCount) && data.length != this.rangeCount) + return false; + if (!data.length || !this.ranges) + return this.getRange().isEqual(data); + for (var i = this.ranges.length; i--;) { + if (!this.ranges[i].isEqual(data[i])) + return false; + } + return true; + }; + return Selection; +}()); +Selection.prototype.setSelectionAnchor = Selection.prototype.setAnchor; +Selection.prototype.getSelectionAnchor = Selection.prototype.getAnchor; +Selection.prototype.setSelectionRange = Selection.prototype.setRange; +oop.implement(Selection.prototype, EventEmitter); +exports.Selection = Selection; -.lm-Menu-itemShortcut { - display: table-cell; - text-align: right; -} -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/menu.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;;EAEE,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n z-index: 10000;\n position: absolute;\n white-space: nowrap;\n overflow-x: hidden;\n overflow-y: auto;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-Menu-content {\n margin: 0;\n padding: 0;\n display: table;\n list-style-type: none;\n}\n\n.lm-Menu-item {\n display: table-row;\n}\n\n.lm-Menu-item.lm-mod-hidden,\n.lm-Menu-item.lm-mod-collapsed {\n display: none !important;\n}\n\n.lm-Menu-itemIcon,\n.lm-Menu-itemSubmenuIcon {\n display: table-cell;\n text-align: center;\n}\n\n.lm-Menu-itemLabel {\n display: table-cell;\n text-align: left;\n}\n\n.lm-Menu-itemShortcut {\n display: table-cell;\n text-align: right;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); +}); +ace.define("ace/tokenizer",["require","exports","module","ace/lib/report_error"], function(require, exports, module){"use strict"; +var reportError = require("./lib/report_error").reportError; +var MAX_TOKEN_COUNT = 2000; +var Tokenizer = /** @class */ (function () { + function Tokenizer(rules) { + this.splitRegex; + this.states = rules; + this.regExps = {}; + this.matchMappings = {}; + for (var key in this.states) { + var state = this.states[key]; + var ruleRegExps = []; + var matchTotal = 0; + var mapping = this.matchMappings[key] = { defaultToken: "text" }; + var flag = "g"; + var splitterRurles = []; + for (var i = 0; i < state.length; i++) { + var rule = state[i]; + if (rule.defaultToken) + mapping.defaultToken = rule.defaultToken; + if (rule.caseInsensitive && flag.indexOf("i") === -1) + flag += "i"; + if (rule.unicode && flag.indexOf("u") === -1) + flag += "u"; + if (rule.regex == null) + continue; + if (rule.regex instanceof RegExp) + rule.regex = rule.regex.toString().slice(1, -1); + var adjustedregex = rule.regex; + var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; + if (Array.isArray(rule.token)) { + if (rule.token.length == 1 || matchcount == 1) { + rule.token = rule.token[0]; + } + else if (matchcount - 1 != rule.token.length) { + this.reportError("number of classes and regexp groups doesn't match", { + rule: rule, + groupCount: matchcount - 1 + }); + rule.token = rule.token[0]; + } + else { + rule.tokenArray = rule.token; + rule.token = null; + rule.onMatch = this.$arrayTokens; + } + } + else if (typeof rule.token == "function" && !rule.onMatch) { + if (matchcount > 1) + rule.onMatch = this.$applyToken; + else + rule.onMatch = rule.token; + } + if (matchcount > 1) { + if (/\\\d/.test(rule.regex)) { + adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function (match, digit) { + return "\\" + (parseInt(digit, 10) + matchTotal + 1); + }); + } + else { + matchcount = 1; + adjustedregex = this.removeCapturingGroups(rule.regex); + } + if (!rule.splitRegex && typeof rule.token != "string") + splitterRurles.push(rule); // flag will be known only at the very end + } + mapping[matchTotal] = i; + matchTotal += matchcount; + ruleRegExps.push(adjustedregex); + if (!rule.onMatch) + rule.onMatch = null; + } + if (!ruleRegExps.length) { + mapping[0] = 0; + ruleRegExps.push("$"); + } + splitterRurles.forEach(function (rule) { + rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); + }, this); + this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); + } + } + Tokenizer.prototype.$setMaxTokenCount = function (m) { + MAX_TOKEN_COUNT = m | 0; + }; + Tokenizer.prototype.$applyToken = function (str) { + var values = this.splitRegex.exec(str).slice(1); + var types = this.token.apply(this, values); + if (typeof types === "string") + return [{ type: types, value: str }]; + var tokens = []; + for (var i = 0, l = types.length; i < l; i++) { + if (values[i]) + tokens[tokens.length] = { + type: types[i], + value: values[i] + }; + } + return tokens; + }; + Tokenizer.prototype.$arrayTokens = function (str) { + if (!str) + return []; + var values = this.splitRegex.exec(str); + if (!values) + return "text"; + var tokens = []; + var types = this.tokenArray; + for (var i = 0, l = types.length; i < l; i++) { + if (values[i + 1]) + tokens[tokens.length] = { + type: types[i], + value: values[i + 1] + }; + } + return tokens; + }; + Tokenizer.prototype.removeCapturingGroups = function (src) { + var r = src.replace(/\\.|\[(?:\\.|[^\\\]])*|\(\?[:=!<]|(\()/g, function (x, y) { return y ? "(?:" : x; }); + return r; + }; + Tokenizer.prototype.createSplitterRegexp = function (src, flag) { + if (src.indexOf("(?=") != -1) { + var stack = 0; + var inChClass = false; + var lastCapture = {}; + src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function (m, esc, parenOpen, parenClose, square, index) { + if (inChClass) { + inChClass = square != "]"; + } + else if (square) { + inChClass = true; + } + else if (parenClose) { + if (stack == lastCapture.stack) { + lastCapture.end = index + 1; + lastCapture.stack = -1; + } + stack--; + } + else if (parenOpen) { + stack++; + if (parenOpen.length != 1) { + lastCapture.stack = stack; + lastCapture.start = index; + } + } + return m; + }); + if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) + src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); + } + if (src.charAt(0) != "^") + src = "^" + src; + if (src.charAt(src.length - 1) != "$") + src += "$"; + return new RegExp(src, (flag || "").replace("g", "")); + }; + Tokenizer.prototype.getLineTokens = function (line, startState) { + if (startState && typeof startState != "string") { + var stack = startState.slice(0); + startState = stack[0]; + if (startState === "#tmp") { + stack.shift(); + startState = stack.shift(); + } + } + else + var stack = []; + var currentState = /**@type{string}*/ (startState) || "start"; + var state = this.states[currentState]; + if (!state) { + currentState = "start"; + state = this.states[currentState]; + } + var mapping = this.matchMappings[currentState]; + var re = this.regExps[currentState]; + re.lastIndex = 0; + var match, tokens = []; + var lastIndex = 0; + var matchAttempts = 0; + var token = { type: null, value: "" }; + while (match = re.exec(line)) { + var type = mapping.defaultToken; + var rule = null; + var value = match[0]; + var index = re.lastIndex; + if (index - value.length > lastIndex) { + var skipped = line.substring(lastIndex, index - value.length); + if (token.type == type) { + token.value += skipped; + } + else { + if (token.type) + tokens.push(token); + token = { type: type, value: skipped }; + } + } + for (var i = 0; i < match.length - 2; i++) { + if (match[i + 1] === undefined) + continue; + rule = state[mapping[i]]; + if (rule.onMatch) + type = rule.onMatch(value, currentState, stack, line); + else + type = rule.token; + if (rule.next) { + if (typeof rule.next == "string") { + currentState = rule.next; + } + else { + currentState = rule.next(currentState, stack); + } + state = this.states[currentState]; + if (!state) { + this.reportError("state doesn't exist", currentState); + currentState = "start"; + state = this.states[currentState]; + } + mapping = this.matchMappings[currentState]; + lastIndex = index; + re = this.regExps[currentState]; + re.lastIndex = index; + } + if (rule.consumeLineEnd) + lastIndex = index; + break; + } + if (value) { + if (typeof type === "string") { + if ((!rule || rule.merge !== false) && token.type === type) { + token.value += value; + } + else { + if (token.type) + tokens.push(token); + token = { type: type, value: value }; + } + } + else if (type) { + if (token.type) + tokens.push(token); + token = { type: null, value: "" }; + for (var i = 0; i < type.length; i++) + tokens.push(type[i]); + } + } + if (lastIndex == line.length) + break; + lastIndex = index; + if (matchAttempts++ > MAX_TOKEN_COUNT) { + if (matchAttempts > 2 * line.length) { + this.reportError("infinite loop with in ace tokenizer", { + startState: startState, + line: line + }); + } + while (lastIndex < line.length) { + if (token.type) + tokens.push(token); + token = { + value: line.substring(lastIndex, lastIndex += 500), + type: "overflow" + }; + } + currentState = "start"; + stack = []; + break; + } + } + if (token.type) + tokens.push(token); + if (stack.length > 1) { + if (stack[0] !== currentState) + stack.unshift("#tmp", currentState); + } + return { + tokens: tokens, + state: stack.length ? stack : currentState + }; + }; + return Tokenizer; +}()); +Tokenizer.prototype.reportError = reportError; +exports.Tokenizer = Tokenizer; -/***/ }), +}); -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css": -/*!**************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/menubar.css ***! - \**************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/deep_copy"], function(require, exports, module){"use strict"; +var deepCopy = require("../lib/deep_copy").deepCopy; +var TextHighlightRules; +TextHighlightRules = function () { + this.$rules = { + "start": [{ + token: "empty_line", + regex: '^$' + }, { + defaultToken: "text" + }] + }; +}; +(function () { + this.addRules = function (rules, prefix) { + if (!prefix) { + for (var key in rules) + this.$rules[key] = rules[key]; + return; + } + for (var key in rules) { + var state = rules[key]; + for (var i = 0; i < state.length; i++) { + var rule = state[i]; + if (rule.next || rule.onMatch) { + if (typeof rule.next == "string") { + if (rule.next.indexOf(prefix) !== 0) + rule.next = prefix + rule.next; + } + if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) + rule.nextState = prefix + rule.nextState; + } + } + this.$rules[prefix + key] = state; + } + }; + this.getRules = function () { + return this.$rules; + }; + this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { + var embedRules = typeof HighlightRules == "function" + ? new HighlightRules().getRules() + : HighlightRules; + if (states) { + for (var i = 0; i < states.length; i++) + states[i] = prefix + states[i]; + } + else { + states = []; + for (var key in embedRules) + states.push(prefix + key); + } + this.addRules(embedRules, prefix); + if (escapeRules) { + var addRules = Array.prototype[append ? "push" : "unshift"]; + for (var i = 0; i < states.length; i++) + addRules.apply(this.$rules[states[i]], deepCopy(escapeRules)); + } + if (!this.$embeds) + this.$embeds = []; + this.$embeds.push(prefix); + }; + this.getEmbeds = function () { + return this.$embeds; + }; + var pushState = function (currentState, stack) { + if (currentState != "start" || stack.length) + stack.unshift(this.nextState, currentState); + return this.nextState; + }; + var popState = function (currentState, stack) { + stack.shift(); + return stack.shift() || "start"; + }; + this.normalizeRules = function () { + var id = 0; + var rules = this.$rules; + function processState(key) { + var state = rules[key]; + state["processed"] = true; + for (var i = 0; i < state.length; i++) { + var rule = state[i]; + var toInsert = null; + if (Array.isArray(rule)) { + toInsert = rule; + rule = {}; + } + if (!rule.regex && rule.start) { + rule.regex = rule.start; + if (!rule.next) + rule.next = []; + rule.next.push({ + defaultToken: rule.token + }, { + token: rule.token + ".end", + regex: rule.end || rule.start, + next: "pop" + }); + rule.token = rule.token + ".start"; + rule.push = true; + } + var next = rule.next || rule.push; + if (next && Array.isArray(next)) { + var stateName = rule.stateName; + if (!stateName) { + stateName = rule.token; + if (typeof stateName != "string") + stateName = stateName[0] || ""; + if (rules[stateName]) + stateName += id++; + } + rules[stateName] = next; + rule.next = stateName; + processState(stateName); + } + else if (next == "pop") { + rule.next = popState; + } + if (rule.push) { + rule.nextState = rule.next || rule.push; + rule.next = pushState; + delete rule.push; + } + if (rule.rules) { + for (var r in rule.rules) { + if (rules[r]) { + if (rules[r].push) + rules[r].push.apply(rules[r], rule.rules[r]); + } + else { + rules[r] = rule.rules[r]; + } + } + } + var includeName = typeof rule == "string" ? rule : rule.include; + if (includeName) { + if (includeName === "$self") + includeName = "start"; + if (Array.isArray(includeName)) + toInsert = includeName.map(function (x) { return rules[x]; }); + else + toInsert = rules[includeName]; + } + if (toInsert) { + var args = [i, 1].concat(toInsert); + if (rule.noEscape) + args = args.filter(function (x) { return !x.next; }); + state.splice.apply(state, args); + i--; + } + if (rule.keywordMap) { + rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive); + delete rule.defaultToken; + } + } + } + Object.keys(rules).forEach(processState, this); + }; + this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) { + var keywords = Object.create(null); + this.$keywordList = []; + Object.keys(map).forEach(function (className) { + var a = map[className]; + var list = a.split(splitChar || "|"); + for (var i = list.length; i--;) { + var word = list[i]; + this.$keywordList.push(word); + if (ignoreCase) + word = word.toLowerCase(); + keywords[word] = className; + } + }, this); + map = null; + return ignoreCase + ? function (value) { return keywords[value.toLowerCase()] || defaultToken; } + : function (value) { return keywords[value] || defaultToken; }; + }; + this.getKeywords = function () { + return this.$keywords; + }; +}).call(TextHighlightRules.prototype); +exports.TextHighlightRules = TextHighlightRules; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports +}); +ace.define("ace/mode/behaviour",["require","exports","module"], function(require, exports, module){"use strict"; +var Behaviour; +Behaviour = function () { + this.$behaviours = {}; +}; +(function () { + this.add = function (name, action, callback) { + switch (undefined) { + case this.$behaviours: + this.$behaviours = {}; + case this.$behaviours[name]: + this.$behaviours[name] = {}; + } + this.$behaviours[name][action] = callback; + }; + this.addBehaviours = function (behaviours) { + for (var key in behaviours) { + for (var action in behaviours[key]) { + this.add(key, action, behaviours[key][action]); + } + } + }; + this.remove = function (name) { + if (this.$behaviours && this.$behaviours[name]) { + delete this.$behaviours[name]; + } + }; + this.inherit = function (mode, filter) { + if (typeof mode === "function") { + var behaviours = new mode().getBehaviours(filter); + } + else { + var behaviours = mode.getBehaviours(filter); + } + this.addBehaviours(behaviours); + }; + this.getBehaviours = function (filter) { + if (!filter) { + return this.$behaviours; + } + else { + var ret = {}; + for (var i = 0; i < filter.length; i++) { + if (this.$behaviours[filter[i]]) { + ret[filter[i]] = this.$behaviours[filter[i]]; + } + } + return ret; + } + }; +}).call(Behaviour.prototype); +exports.Behaviour = Behaviour; -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ +}); -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ +ace.define("ace/token_iterator",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var Range = require("./range").Range; +var TokenIterator = /** @class */ (function () { + function TokenIterator(session, initialRow, initialColumn) { + this.$session = session; + this.$row = initialRow; + this.$rowTokens = session.getTokens(initialRow); + var token = session.getTokenAt(initialRow, initialColumn); + this.$tokenIndex = token ? token.index : -1; + } + TokenIterator.prototype.stepBackward = function () { + this.$tokenIndex -= 1; + while (this.$tokenIndex < 0) { + this.$row -= 1; + if (this.$row < 0) { + this.$row = 0; + return null; + } + this.$rowTokens = this.$session.getTokens(this.$row); + this.$tokenIndex = this.$rowTokens.length - 1; + } + return this.$rowTokens[this.$tokenIndex]; + }; + TokenIterator.prototype.stepForward = function () { + this.$tokenIndex += 1; + var rowCount; + while (this.$tokenIndex >= this.$rowTokens.length) { + this.$row += 1; + if (!rowCount) + rowCount = this.$session.getLength(); + if (this.$row >= rowCount) { + this.$row = rowCount - 1; + return null; + } + this.$rowTokens = this.$session.getTokens(this.$row); + this.$tokenIndex = 0; + } + return this.$rowTokens[this.$tokenIndex]; + }; + TokenIterator.prototype.getCurrentToken = function () { + return this.$rowTokens[this.$tokenIndex]; + }; + TokenIterator.prototype.getCurrentTokenRow = function () { + return this.$row; + }; + TokenIterator.prototype.getCurrentTokenColumn = function () { + var rowTokens = this.$rowTokens; + var tokenIndex = this.$tokenIndex; + var column = rowTokens[tokenIndex].start; + if (column !== undefined) + return column; + column = 0; + while (tokenIndex > 0) { + tokenIndex -= 1; + column += rowTokens[tokenIndex].value.length; + } + return column; + }; + TokenIterator.prototype.getCurrentTokenPosition = function () { + return { row: this.$row, column: this.getCurrentTokenColumn() }; + }; + TokenIterator.prototype.getCurrentTokenRange = function () { + var token = this.$rowTokens[this.$tokenIndex]; + var column = this.getCurrentTokenColumn(); + return new Range(this.$row, column, this.$row, column + token.value.length); + }; + return TokenIterator; +}()); +exports.TokenIterator = TokenIterator; -.lm-MenuBar { - outline: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} +}); -.lm-MenuBar-content { - margin: 0; - padding: 0; - display: flex; - flex-direction: row; - list-style-type: none; -} +ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module){"use strict"; +var oop = require("../../lib/oop"); +var Behaviour = require("../behaviour").Behaviour; +var TokenIterator = require("../../token_iterator").TokenIterator; +var lang = require("../../lib/lang"); +var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "rparen", "paren", "punctuation.operator"]; +var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "rparen", "paren", "punctuation.operator", "comment"]; +var context; +var contextCache = {}; +var defaultQuotes = { '"': '"', "'": "'" }; +var initContext = function (editor) { + var id = -1; + if (editor.multiSelect) { + id = editor.selection.index; + if (contextCache.rangeCount != editor.multiSelect.rangeCount) + contextCache = { rangeCount: editor.multiSelect.rangeCount }; + } + if (contextCache[id]) + return context = contextCache[id]; + context = contextCache[id] = { + autoInsertedBrackets: 0, + autoInsertedRow: -1, + autoInsertedLineEnd: "", + maybeInsertedBrackets: 0, + maybeInsertedRow: -1, + maybeInsertedLineStart: "", + maybeInsertedLineEnd: "" + }; +}; +var getWrapped = function (selection, selected, opening, closing) { + var rowDiff = selection.end.row - selection.start.row; + return { + text: opening + selected + closing, + selection: [ + 0, + selection.start.column + 1, + rowDiff, + selection.end.column + (rowDiff ? 0 : 1) + ] + }; +}; +var CstyleBehaviour; +CstyleBehaviour = function (options) { + options = options || {}; + this.add("braces", "insertion", function (state, action, editor, session, text) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (text == '{') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + var token = session.getTokenAt(cursor.row, cursor.column); + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '{', '}'); + } + else if (token && /(?:string)\.quasi|\.xml/.test(token.type)) { + var excludeTokens = [ + /tag\-(?:open|name)/, /attribute\-name/ + ]; + if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\.quasi/.test(token.type) + && token.value[cursor.column - token.start - 1] !== '$') + return; + CstyleBehaviour.recordAutoInsert(editor, session, "}"); + return { + text: '{}', + selection: [1, 1] + }; + } + else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) { + CstyleBehaviour.recordAutoInsert(editor, session, "}"); + return { + text: '{}', + selection: [1, 1] + }; + } + else { + CstyleBehaviour.recordMaybeInsert(editor, session, "{"); + return { + text: '{', + selection: [1, 1] + }; + } + } + } + else if (text == '}') { + initContext(editor); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == '}') { + var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row }); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + else if (text == "\n" || text == "\r\n") { + initContext(editor); + var closing = ""; + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { + closing = lang.stringRepeat("}", context.maybeInsertedBrackets); + CstyleBehaviour.clearMaybeInsertedClosing(); + } + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar === '}') { + var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}'); + if (!openBracePos) + return null; + var next_indent = this.$getIndent(session.getLine(openBracePos.row)); + } + else if (closing) { + var next_indent = this.$getIndent(line); + } + else { + CstyleBehaviour.clearMaybeInsertedClosing(); + return; + } + var indent = next_indent + session.getTabString(); + return { + text: '\n' + indent + '\n' + next_indent + closing, + selection: [1, indent.length, 1, indent.length] + }; + } + else { + CstyleBehaviour.clearMaybeInsertedClosing(); + } + }); + this.add("braces", "deletion", function (state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '{') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.end.column, range.end.column + 1); + if (rightChar == '}') { + range.end.column++; + return range; + } + else { + context.maybeInsertedBrackets--; + } + } + }); + this.add("parens", "insertion", function (state, action, editor, session, text) { + if (text == '(') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '(', ')'); + } + else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, ")"); + return { + text: '()', + selection: [1, 1] + }; + } + } + else if (text == ')') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ')') { + var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row }); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + this.add("parens", "deletion", function (state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '(') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ')') { + range.end.column++; + return range; + } + } + }); + this.add("brackets", "insertion", function (state, action, editor, session, text) { + if (text == '[') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '[', ']'); + } + else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, "]"); + return { + text: '[]', + selection: [1, 1] + }; + } + } + else if (text == ']') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ']') { + var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row }); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + this.add("brackets", "deletion", function (state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '[') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ']') { + range.end.column++; + return range; + } + } + }); + this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { + var quotes = session.$mode.$quotes || defaultQuotes; + if (text.length == 1 && quotes[text]) { + if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) + return; + initContext(editor); + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, quote, quote); + } + else if (!selected) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var leftChar = line.substring(cursor.column - 1, cursor.column); + var rightChar = line.substring(cursor.column, cursor.column + 1); + var token = session.getTokenAt(cursor.row, cursor.column); + var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); + if (leftChar == "\\" && token && /escape/.test(token.type)) + return null; + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); + var pair; + if (rightChar == quote) { + pair = stringBefore !== stringAfter; + if (pair && /string\.end/.test(rightToken.type)) + pair = false; + } + else { + if (stringBefore && !stringAfter) + return null; // wrap string with different quote + if (stringBefore && stringAfter) + return null; // do not pair quotes inside strings + var wordRe = session.$mode.tokenRe; + wordRe.lastIndex = 0; + var isWordBefore = wordRe.test(leftChar); + wordRe.lastIndex = 0; + var isWordAfter = wordRe.test(rightChar); + var pairQuotesAfter = session.$mode.$pairQuotesAfter; + var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar); + if ((!shouldPairQuotes && isWordBefore) || isWordAfter) + return null; // before or after alphanumeric + if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) + return null; // there is rightChar and it isn't closing + var charBefore = line[cursor.column - 2]; + if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore))) + return null; + pair = true; + } + return { + text: pair ? quote + quote : "", + selection: [1, 1] + }; + } + } + }); + this.add("string_dquotes", "deletion", function (state, action, editor, session, range) { + var quotes = session.$mode.$quotes || defaultQuotes; + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == selected) { + range.end.column++; + return range; + } + } + }); + if (options.closeDocComment !== false) { + this.add("doc comment end", "insertion", function (state, action, editor, session, text) { + if (state === "doc-start" && (text === "\n" || text === "\r\n") && editor.selection.isEmpty()) { + var cursor = editor.getCursorPosition(); + if (cursor.column === 0) { + return; + } + var line = session.doc.getLine(cursor.row); + var nextLine = session.doc.getLine(cursor.row + 1); + var tokens = session.getTokens(cursor.row); + var index = 0; + for (var i = 0; i < tokens.length; i++) { + index += tokens[i].value.length; + var currentToken = tokens[i]; + if (index >= cursor.column) { + if (index === cursor.column) { + if (!/\.doc/.test(currentToken.type)) { + return; + } + if (/\*\//.test(currentToken.value)) { + var nextToken = tokens[i + 1]; + if (!nextToken || !/\.doc/.test(nextToken.type)) { + return; + } + } + } + var cursorPosInToken = cursor.column - (index - currentToken.value.length); + var closeDocPos = currentToken.value.indexOf("*/"); + var openDocPos = currentToken.value.indexOf("/**", closeDocPos > -1 ? closeDocPos + 2 : 0); + if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) { + return; + } + if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos + && cursorPosInToken <= openDocPos || !/\.doc/.test(currentToken.type)) { + return; + } + break; + } + } + var indent = this.$getIndent(line); + if (/\s*\*/.test(nextLine)) { + if (/^\s*\*/.test(line)) { + return { + text: text + indent + "* ", + selection: [1, 2 + indent.length, 1, 2 + indent.length] + }; + } + else { + return { + text: text + indent + " * ", + selection: [1, 3 + indent.length, 1, 3 + indent.length] + }; + } + } + if (/\/\*\*/.test(line.substring(0, cursor.column))) { + return { + text: text + indent + " * " + text + " " + indent + "*/", + selection: [1, 4 + indent.length, 1, 4 + indent.length] + }; + } + } + }); + } +}; +CstyleBehaviour.isSaneInsertion = function (editor, session) { + var cursor = editor.getCursorPosition(); + var iterator = new TokenIterator(session, cursor.row, cursor.column); + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { + if (/[)}\]]/.test(editor.session.getLine(cursor.row)[cursor.column])) + return true; + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) + return false; + } + iterator.stepForward(); + return iterator.getCurrentTokenRow() !== cursor.row || + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); +}; +CstyleBehaviour["$matchTokenType"] = function (token, types) { + return types.indexOf(token.type || token) > -1; +}; +CstyleBehaviour["recordAutoInsert"] = function (editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this["isAutoInsertedClosing"](cursor, line, context.autoInsertedLineEnd[0])) + context.autoInsertedBrackets = 0; + context.autoInsertedRow = cursor.row; + context.autoInsertedLineEnd = bracket + line.substr(cursor.column); + context.autoInsertedBrackets++; +}; +CstyleBehaviour["recordMaybeInsert"] = function (editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this["isMaybeInsertedClosing"](cursor, line)) + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = cursor.row; + context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; + context.maybeInsertedLineEnd = line.substr(cursor.column); + context.maybeInsertedBrackets++; +}; +CstyleBehaviour["isAutoInsertedClosing"] = function (cursor, line, bracket) { + return context.autoInsertedBrackets > 0 && + cursor.row === context.autoInsertedRow && + bracket === context.autoInsertedLineEnd[0] && + line.substr(cursor.column) === context.autoInsertedLineEnd; +}; +CstyleBehaviour["isMaybeInsertedClosing"] = function (cursor, line) { + return context.maybeInsertedBrackets > 0 && + cursor.row === context.maybeInsertedRow && + line.substr(cursor.column) === context.maybeInsertedLineEnd && + line.substr(0, cursor.column) == context.maybeInsertedLineStart; +}; +CstyleBehaviour["popAutoInsertedClosing"] = function () { + context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); + context.autoInsertedBrackets--; +}; +CstyleBehaviour["clearMaybeInsertedClosing"] = function () { + if (context) { + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = -1; + } +}; +oop.inherits(CstyleBehaviour, Behaviour); +exports.CstyleBehaviour = CstyleBehaviour; -.lm-MenuBar-item { - box-sizing: border-box; -} +}); -.lm-MenuBar-itemIcon, -.lm-MenuBar-itemLabel { - display: inline-block; +ace.define("ace/unicode",["require","exports","module"], function(require, exports, module){"use strict"; +var wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2]; +var code = 0; +var str = []; +for (var i = 0; i < wordChars.length; i += 2) { + str.push(code += wordChars[i]); + if (wordChars[i + 1]) + str.push(45, code += wordChars[i + 1]); } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/menubar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,qBAAqB;AACvB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-MenuBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n list-style-type: none;\n}\n\n.lm-MenuBar-item {\n box-sizing: border-box;\n}\n\n.lm-MenuBar-itemIcon,\n.lm-MenuBar-itemLabel {\n display: inline-block;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), +exports.wordChars = String.fromCharCode.apply(null, str); -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css": -/*!****************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/scrollbar.css ***! - \****************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +}); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports +ace.define("ace/mode/text",["require","exports","module","ace/config","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"], function(require, exports, module){"use strict"; +var config = require("../config"); +var Tokenizer = require("../tokenizer").Tokenizer; +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; +var unicode = require("../unicode"); +var lang = require("../lib/lang"); +var TokenIterator = require("../token_iterator").TokenIterator; +var Range = require("../range").Range; +var Mode; +Mode = function () { + this.HighlightRules = TextHighlightRules; +}; +(function () { + this.$defaultBehaviour = new CstyleBehaviour(); + this.tokenRe = new RegExp("^[" + unicode.wordChars + "\\$_]+", "g"); + this.nonTokenRe = new RegExp("^(?:[^" + unicode.wordChars + "\\$_]|\\s])+", "g"); + this.getTokenizer = function () { + if (!this.$tokenizer) { + this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig); + this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); + } + return this.$tokenizer; + }; + this.lineCommentStart = ""; + this.blockComment = ""; + this.toggleCommentLines = function (state, session, startRow, endRow) { + var doc = session.doc; + var ignoreBlankLines = true; + var shouldRemove = true; + var minIndent = Infinity; + var tabSize = session.getTabSize(); + var insertAtTabStop = false; + if (!this.lineCommentStart) { + if (!this.blockComment) + return false; + var lineCommentStart = this.blockComment.start; + var lineCommentEnd = this.blockComment.end; + var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); + var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); + var comment = function (line, i) { + if (testRemove(line, i)) + return; + if (!ignoreBlankLines || /\S/.test(line)) { + doc.insertInLine({ row: i, column: line.length }, lineCommentEnd); + doc.insertInLine({ row: i, column: minIndent }, lineCommentStart); + } + }; + var uncomment = function (line, i) { + var m; + if (m = line.match(regexpEnd)) + doc.removeInLine(i, line.length - m[0].length, line.length); + if (m = line.match(regexpStart)) + doc.removeInLine(i, m[1].length, m[0].length); + }; + var testRemove = function (line, row) { + if (regexpStart.test(line)) + return true; + var tokens = session.getTokens(row); + for (var i = 0; i < tokens.length; i++) { + if (tokens[i].type === "comment") + return true; + } + }; + } + else { + if (Array.isArray(this.lineCommentStart)) { + var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); + var lineCommentStart = this.lineCommentStart[0]; + } + else { + var regexpStart = lang.escapeRegExp(this.lineCommentStart); + var lineCommentStart = this.lineCommentStart; + } + regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); + insertAtTabStop = session.getUseSoftTabs(); + var uncomment = function (line, i) { + var m = line.match(regexpStart); + if (!m) + return; + var start = m[1].length, end = m[0].length; + if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") + end--; + doc.removeInLine(i, start, end); + }; + var commentWithSpace = lineCommentStart + " "; + var comment = function (line, i) { + if (!ignoreBlankLines || /\S/.test(line)) { + if (shouldInsertSpace(line, minIndent, minIndent)) + doc.insertInLine({ row: i, column: minIndent }, commentWithSpace); + else + doc.insertInLine({ row: i, column: minIndent }, lineCommentStart); + } + }; + var testRemove = function (line, i) { + return regexpStart.test(line); + }; + var shouldInsertSpace = function (line, before, after) { + var spaces = 0; + while (before-- && line.charAt(before) == " ") + spaces++; + if (spaces % tabSize != 0) + return false; + var spaces = 0; + while (line.charAt(after++) == " ") + spaces++; + if (tabSize > 2) + return spaces % tabSize != tabSize - 1; + else + return spaces % tabSize == 0; + }; + } + function iter(fun) { + for (var i = startRow; i <= endRow; i++) + fun(doc.getLine(i), i); + } + var minEmptyLength = Infinity; + iter(function (line, i) { + var indent = line.search(/\S/); + if (indent !== -1) { + if (indent < minIndent) + minIndent = indent; + if (shouldRemove && !testRemove(line, i)) + shouldRemove = false; + } + else if (minEmptyLength > line.length) { + minEmptyLength = line.length; + } + }); + if (minIndent == Infinity) { + minIndent = minEmptyLength; + ignoreBlankLines = false; + shouldRemove = false; + } + if (insertAtTabStop && minIndent % tabSize != 0) + minIndent = Math.floor(minIndent / tabSize) * tabSize; + iter(shouldRemove ? uncomment : comment); + }; + this.toggleBlockComment = function (state, session, range, cursor) { + var comment = this.blockComment; + if (!comment) + return; + if (!comment.start && comment[0]) + comment = comment[0]; + var iterator = new TokenIterator(session, cursor.row, cursor.column); + var token = iterator.getCurrentToken(); + var sel = session.selection; + var initialRange = session.selection.toOrientedRange(); + var startRow, colDiff; + if (token && /comment/.test(token.type)) { + var startRange, endRange; + while (token && /comment/.test(token.type)) { + var i = token.value.indexOf(comment.start); + if (i != -1) { + var row = iterator.getCurrentTokenRow(); + var column = iterator.getCurrentTokenColumn() + i; + startRange = new Range(row, column, row, column + comment.start.length); + break; + } + token = iterator.stepBackward(); + } + var iterator = new TokenIterator(session, cursor.row, cursor.column); + var token = iterator.getCurrentToken(); + while (token && /comment/.test(token.type)) { + var i = token.value.indexOf(comment.end); + if (i != -1) { + var row = iterator.getCurrentTokenRow(); + var column = iterator.getCurrentTokenColumn() + i; + endRange = new Range(row, column, row, column + comment.end.length); + break; + } + token = iterator.stepForward(); + } + if (endRange) + session.remove(endRange); + if (startRange) { + session.remove(startRange); + startRow = startRange.start.row; + colDiff = -comment.start.length; + } + } + else { + colDiff = comment.start.length; + startRow = range.start.row; + session.insert(range.end, comment.end); + session.insert(range.start, comment.start); + } + if (initialRange.start.row == startRow) + initialRange.start.column += colDiff; + if (initialRange.end.row == startRow) + initialRange.end.column += colDiff; + session.selection.fromOrientedRange(initialRange); + }; + this.getNextLineIndent = function (state, line, tab) { + return this.$getIndent(line); + }; + this.checkOutdent = function (state, line, input) { + return false; + }; + this.autoOutdent = function (state, doc, row) { + }; + this.$getIndent = function (line) { + return line.match(/^\s*/)[0]; + }; + this.createWorker = function (session) { + return null; + }; + this.createModeDelegates = function (mapping) { + this.$embeds = []; + this.$modes = {}; + for (var i in mapping) { + if (mapping[i]) { + var Mode = mapping[i]; + var id = Mode.prototype.$id; + var mode = config.$modes[id]; + if (!mode) + config.$modes[id] = mode = new Mode(); + if (!config.$modes[i]) + config.$modes[i] = mode; + this.$embeds.push(i); + this.$modes[i] = mode; + } + } + var delegations = ["toggleBlockComment", "toggleCommentLines", "getNextLineIndent", + "checkOutdent", "autoOutdent", "transformAction", "getCompletions"]; + var _loop_1 = function (i) { + (function (scope) { + var functionName = delegations[i]; + var defaultHandler = scope[functionName]; + scope[delegations[i]] = + function () { + return this.$delegator(functionName, arguments, defaultHandler); + }; + }(this_1)); + }; + var this_1 = this; + for (var i = 0; i < delegations.length; i++) { + _loop_1(i); + } + }; + this.$delegator = function (method, args, defaultHandler) { + var state = args[0] || "start"; + if (typeof state != "string") { + if (Array.isArray(state[2])) { + var language = state[2][state[2].length - 1]; + var mode = this.$modes[language]; + if (mode) + return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1))); + } + state = state[0] || "start"; + } + for (var i = 0; i < this.$embeds.length; i++) { + if (!this.$modes[this.$embeds[i]]) + continue; + var split = state.split(this.$embeds[i]); + if (!split[0] && split[1]) { + args[0] = split[1]; + var mode = this.$modes[this.$embeds[i]]; + return mode[method].apply(mode, args); + } + } + var ret = defaultHandler.apply(this, args); + return defaultHandler ? ret : undefined; + }; + this.transformAction = function (state, action, editor, session, param) { + if (this.$behaviour) { + var behaviours = this.$behaviour.getBehaviours(); + for (var key in behaviours) { + if (behaviours[key][action]) { + var ret = behaviours[key][action].apply(this, arguments); + if (ret) { + return ret; + } + } + } + } + }; + this.getKeywords = function (append) { + if (!this.completionKeywords) { + var rules = this.$tokenizer["rules"]; + var completionKeywords = []; + for (var rule in rules) { + var ruleItr = rules[rule]; + for (var r = 0, l = ruleItr.length; r < l; r++) { + if (typeof ruleItr[r].token === "string") { + if (/keyword|support|storage/.test(ruleItr[r].token)) + completionKeywords.push(ruleItr[r].regex); + } + else if (typeof ruleItr[r].token === "object") { + for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { + if (/keyword|support|storage/.test(ruleItr[r].token[a])) { + var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; + completionKeywords.push(rule.substr(1, rule.length - 2)); + } + } + } + } + } + this.completionKeywords = completionKeywords; + } + if (!append) + return this.$keywordList; + return completionKeywords.concat(this.$keywordList || []); + }; + this.$createKeywordList = function () { + if (!this.$highlightRules) + this.getTokenizer(); + return this.$keywordList = this.$highlightRules.$keywordList || []; + }; + this.getCompletions = function (state, session, pos, prefix) { + var keywords = this.$keywordList || this.$createKeywordList(); + return keywords.map(function (word) { + return { + name: word, + value: word, + score: 0, + meta: "keyword" + }; + }); + }; + this.$id = "ace/mode/text"; +}).call(Mode.prototype); +exports.Mode = Mode; +}); -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ +ace.define("ace/line_widgets",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; +var dom = require("./lib/dom"); +var LineWidgets = /** @class */ (function () { + function LineWidgets(session) { + this.session = session; + this.session.widgetManager = this; + this.session.getRowLength = this.getRowLength; + this.session.$getWidgetScreenLength = this.$getWidgetScreenLength; + this.updateOnChange = this.updateOnChange.bind(this); + this.renderWidgets = this.renderWidgets.bind(this); + this.measureWidgets = this.measureWidgets.bind(this); + this.session._changedWidgets = []; + this.$onChangeEditor = this.$onChangeEditor.bind(this); + this.session.on("change", this.updateOnChange); + this.session.on("changeFold", this.updateOnFold); + this.session.on("changeEditor", this.$onChangeEditor); + } + LineWidgets.prototype.getRowLength = function (row) { + var h; + if (this.lineWidgets) + h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; + else + h = 0; + if (!this["$useWrapMode"] || !this["$wrapData"][row]) { + return 1 + h; + } + else { + return this["$wrapData"][row].length + 1 + h; + } + }; + LineWidgets.prototype.$getWidgetScreenLength = function () { + var screenRows = 0; + this.lineWidgets.forEach(function (w) { + if (w && w.rowCount && !w.hidden) + screenRows += w.rowCount; + }); + return screenRows; + }; + LineWidgets.prototype.$onChangeEditor = function (e) { + this.attach(e.editor); + }; + LineWidgets.prototype.attach = function (editor) { + if (editor && editor.widgetManager && editor.widgetManager != this) + editor.widgetManager.detach(); + if (this.editor == editor) + return; + this.detach(); + this.editor = editor; + if (editor) { + editor.widgetManager = this; + editor.renderer.on("beforeRender", this.measureWidgets); + editor.renderer.on("afterRender", this.renderWidgets); + } + }; + LineWidgets.prototype.detach = function (e) { + var editor = this.editor; + if (!editor) + return; + this.editor = null; + editor.widgetManager = null; + editor.renderer.off("beforeRender", this.measureWidgets); + editor.renderer.off("afterRender", this.renderWidgets); + var lineWidgets = this.session.lineWidgets; + lineWidgets && lineWidgets.forEach(function (w) { + if (w && w.el && w.el.parentNode) { + w._inDocument = false; + w.el.parentNode.removeChild(w.el); + } + }); + }; + LineWidgets.prototype.updateOnFold = function (e, session) { + var lineWidgets = session.lineWidgets; + if (!lineWidgets || !e.action) + return; + var fold = e.data; + var start = fold.start.row; + var end = fold.end.row; + var hide = e.action == "add"; + for (var i = start + 1; i < end; i++) { + if (lineWidgets[i]) + lineWidgets[i].hidden = hide; + } + if (lineWidgets[end]) { + if (hide) { + if (!lineWidgets[start]) + lineWidgets[start] = lineWidgets[end]; + else + lineWidgets[end].hidden = hide; + } + else { + if (lineWidgets[start] == lineWidgets[end]) + lineWidgets[start] = undefined; + lineWidgets[end].hidden = hide; + } + } + }; + LineWidgets.prototype.updateOnChange = function (delta) { + var lineWidgets = this.session.lineWidgets; + if (!lineWidgets) + return; + var startRow = delta.start.row; + var len = delta.end.row - startRow; + if (len === 0) { + } + else if (delta.action == "remove") { + var removed = lineWidgets.splice(startRow + 1, len); + if (!lineWidgets[startRow] && removed[removed.length - 1]) { + lineWidgets[startRow] = removed.pop(); + } + removed.forEach(function (w) { + w && this.removeLineWidget(w); + }, this); + this.$updateRows(); + } + else { + var args = new Array(len); + if (lineWidgets[startRow] && lineWidgets[startRow].column != null) { + if (delta.start.column > lineWidgets[startRow].column) + startRow++; + } + args.unshift(startRow, 0); + lineWidgets.splice.apply(lineWidgets, args); + this.$updateRows(); + } + }; + LineWidgets.prototype.$updateRows = function () { + var lineWidgets = this.session.lineWidgets; + if (!lineWidgets) + return; + var noWidgets = true; + lineWidgets.forEach(function (w, i) { + if (w) { + noWidgets = false; + w.row = i; + while (w.$oldWidget) { + w.$oldWidget.row = i; + w = w.$oldWidget; + } + } + }); + if (noWidgets) + this.session.lineWidgets = null; + }; + LineWidgets.prototype.$registerLineWidget = function (w) { + if (!this.session.lineWidgets) + this.session.lineWidgets = new Array(this.session.getLength()); + var old = this.session.lineWidgets[w.row]; + if (old) { + w.$oldWidget = old; + if (old.el && old.el.parentNode) { + old.el.parentNode.removeChild(old.el); + old._inDocument = false; + } + } + this.session.lineWidgets[w.row] = w; + return w; + }; + LineWidgets.prototype.addLineWidget = function (w) { + this.$registerLineWidget(w); + w.session = this.session; + if (!this.editor) + return w; + var renderer = this.editor.renderer; + if (w.html && !w.el) { + w.el = dom.createElement("div"); + w.el.innerHTML = w.html; + } + if (w.text && !w.el) { + w.el = dom.createElement("div"); + w.el.textContent = w.text; + } + if (w.el) { + dom.addCssClass(w.el, "ace_lineWidgetContainer"); + if (w.className) { + dom.addCssClass(w.el, w.className); + } + w.el.style.position = "absolute"; + w.el.style.zIndex = "5"; + renderer.container.appendChild(w.el); + w._inDocument = true; + if (!w.coverGutter) { + w.el.style.zIndex = "3"; + } + if (w.pixelHeight == null) { + w.pixelHeight = w.el.offsetHeight; + } + } + if (w.rowCount == null) { + w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; + } + var fold = this.session.getFoldAt(w.row, 0); + w.$fold = fold; + if (fold) { + var lineWidgets = this.session.lineWidgets; + if (w.row == fold.end.row && !lineWidgets[fold.start.row]) + lineWidgets[fold.start.row] = w; + else + w.hidden = true; + } + this.session._emit("changeFold", { data: { start: { row: w.row } } }); + this.$updateRows(); + this.renderWidgets(null, renderer); + this.onWidgetChanged(w); + return w; + }; + LineWidgets.prototype.removeLineWidget = function (w) { + w._inDocument = false; + w.session = null; + if (w.el && w.el.parentNode) + w.el.parentNode.removeChild(w.el); + if (w.editor && w.editor.destroy) + try { + w.editor.destroy(); + } + catch (e) { } + if (this.session.lineWidgets) { + var w1 = this.session.lineWidgets[w.row]; + if (w1 == w) { + this.session.lineWidgets[w.row] = w.$oldWidget; + if (w.$oldWidget) + this.onWidgetChanged(w.$oldWidget); + } + else { + while (w1) { + if (w1.$oldWidget == w) { + w1.$oldWidget = w.$oldWidget; + break; + } + w1 = w1.$oldWidget; + } + } + } + this.session._emit("changeFold", { data: { start: { row: w.row } } }); + this.$updateRows(); + }; + LineWidgets.prototype.getWidgetsAtRow = function (row) { + var lineWidgets = this.session.lineWidgets; + var w = lineWidgets && lineWidgets[row]; + var list = []; + while (w) { + list.push(w); + w = w.$oldWidget; + } + return list; + }; + LineWidgets.prototype.onWidgetChanged = function (w) { + this.session._changedWidgets.push(w); + this.editor && this.editor.renderer.updateFull(); + }; + LineWidgets.prototype.measureWidgets = function (e, renderer) { + var changedWidgets = this.session._changedWidgets; + var config = renderer.layerConfig; + if (!changedWidgets || !changedWidgets.length) + return; + var min = Infinity; + for (var i = 0; i < changedWidgets.length; i++) { + var w = changedWidgets[i]; + if (!w || !w.el) + continue; + if (w.session != this.session) + continue; + if (!w._inDocument) { + if (this.session.lineWidgets[w.row] != w) + continue; + w._inDocument = true; + renderer.container.appendChild(w.el); + } + w.h = w.el.offsetHeight; + if (!w.fixedWidth) { + w.w = w.el.offsetWidth; + w.screenWidth = Math.ceil(w.w / config.characterWidth); + } + var rowCount = w.h / config.lineHeight; + if (w.coverLine) { + rowCount -= this.session.getRowLineCount(w.row); + if (rowCount < 0) + rowCount = 0; + } + if (w.rowCount != rowCount) { + w.rowCount = rowCount; + if (w.row < min) + min = w.row; + } + } + if (min != Infinity) { + this.session._emit("changeFold", { data: { start: { row: min } } }); + this.session.lineWidgetWidth = null; + } + this.session._changedWidgets = []; + }; + LineWidgets.prototype.renderWidgets = function (e, renderer) { + var config = renderer.layerConfig; + var lineWidgets = this.session.lineWidgets; + if (!lineWidgets) + return; + var first = Math.min(this.firstRow, config.firstRow); + var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length); + while (first > 0 && !lineWidgets[first]) + first--; + this.firstRow = config.firstRow; + this.lastRow = config.lastRow; + renderer.$cursorLayer.config = config; + for (var i = first; i <= last; i++) { + var w = lineWidgets[i]; + if (!w || !w.el) + continue; + if (w.hidden) { + w.el.style.top = -100 - (w.pixelHeight || 0) + "px"; + continue; + } + if (!w._inDocument) { + w._inDocument = true; + renderer.container.appendChild(w.el); + } + var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top; + if (!w.coverLine) + top += config.lineHeight * this.session.getRowLineCount(w.row); + w.el.style.top = top - config.offset + "px"; + var left = w.coverGutter ? 0 : renderer.gutterWidth; + if (!w.fixedWidth) + left -= renderer.scrollLeft; + w.el.style.left = left + "px"; + if (w.fullWidth && w.screenWidth) { + w.el.style.minWidth = config.width + 2 * config.padding + "px"; + } + if (w.fixedWidth) { + w.el.style.right = renderer.scrollBar.getWidth() + "px"; + } + else { + w.el.style.right = ""; + } + } + }; + return LineWidgets; +}()); +exports.LineWidgets = LineWidgets; -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ +}); -.lm-ScrollBar { - display: flex; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; +ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module){"use strict"; +function throwDeltaError(delta, errorText) { + console.log("Invalid Delta:", delta); + throw "Invalid Delta: " + errorText; } - -.lm-ScrollBar[data-orientation='horizontal'] { - flex-direction: row; +function positionInDocument(docLines, position) { + return position.row >= 0 && position.row < docLines.length && + position.column >= 0 && position.column <= docLines[position.row].length; } - -.lm-ScrollBar[data-orientation='vertical'] { - flex-direction: column; +function validateDelta(docLines, delta) { + if (delta.action != "insert" && delta.action != "remove") + throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); + if (!(delta.lines instanceof Array)) + throwDeltaError(delta, "delta.lines must be an Array"); + if (!delta.start || !delta.end) + throwDeltaError(delta, "delta.start/end must be an present"); + var start = delta.start; + if (!positionInDocument(docLines, delta.start)) + throwDeltaError(delta, "delta.start must be contained in document"); + var end = delta.end; + if (delta.action == "remove" && !positionInDocument(docLines, end)) + throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); + var numRangeRows = end.row - start.row; + var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); + if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) + throwDeltaError(delta, "delta.range must match delta lines"); } +exports.applyDelta = function (docLines, delta, doNotValidate) { + var row = delta.start.row; + var startColumn = delta.start.column; + var line = docLines[row] || ""; + switch (delta.action) { + case "insert": + var lines = delta.lines; + if (lines.length === 1) { + docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); + } + else { + var args = [row, 1].concat(delta.lines); + docLines.splice.apply(docLines, args); + docLines[row] = line.substring(0, startColumn) + docLines[row]; + docLines[row + delta.lines.length - 1] += line.substring(startColumn); + } + break; + case "remove": + var endColumn = delta.end.column; + var endRow = delta.end.row; + if (row === endRow) { + docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); + } + else { + docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn)); + } + break; + } +}; -.lm-ScrollBar-button { - box-sizing: border-box; - flex: 0 0 auto; -} +}); -.lm-ScrollBar-track { - box-sizing: border-box; - position: relative; - overflow: hidden; - flex: 1 1 auto; +ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Anchor = /** @class */ (function () { + function Anchor(doc, row, column) { + this.$onChange = this.onChange.bind(this); + this.attach(doc); + if (typeof row != "number") + this.setPosition(row.row, row.column); + else + this.setPosition(row, column); + } + Anchor.prototype.getPosition = function () { + return this.$clipPositionToDocument(this.row, this.column); + }; + Anchor.prototype.getDocument = function () { + return this.document; + }; + Anchor.prototype.onChange = function (delta) { + if (delta.start.row == delta.end.row && delta.start.row != this.row) + return; + if (delta.start.row > this.row) + return; + var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight); + this.setPosition(point.row, point.column, true); + }; + Anchor.prototype.setPosition = function (row, column, noClip) { + var pos; + if (noClip) { + pos = { + row: row, + column: column + }; + } + else { + pos = this.$clipPositionToDocument(row, column); + } + if (this.row == pos.row && this.column == pos.column) + return; + var old = { + row: this.row, + column: this.column + }; + this.row = pos.row; + this.column = pos.column; + this._signal("change", { + old: old, + value: pos + }); + }; + Anchor.prototype.detach = function () { + this.document.off("change", this.$onChange); + }; + Anchor.prototype.attach = function (doc) { + this.document = doc || this.document; + this.document.on("change", this.$onChange); + }; + Anchor.prototype.$clipPositionToDocument = function (row, column) { + var pos = {}; + if (row >= this.document.getLength()) { + pos.row = Math.max(0, this.document.getLength() - 1); + pos.column = this.document.getLine(pos.row).length; + } + else if (row < 0) { + pos.row = 0; + pos.column = 0; + } + else { + pos.row = row; + pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); + } + if (column < 0) + pos.column = 0; + return pos; + }; + return Anchor; +}()); +Anchor.prototype.$insertRight = false; +oop.implement(Anchor.prototype, EventEmitter); +function $pointsInOrder(point1, point2, equalPointsInOrder) { + var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; + return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); } - -.lm-ScrollBar-thumb { - box-sizing: border-box; - position: absolute; +function $getTransformedPoint(delta, point, moveIfEqual) { + var deltaIsInsert = delta.action == "insert"; + var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); + var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); + var deltaStart = delta.start; + var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. + if ($pointsInOrder(point, deltaStart, moveIfEqual)) { + return { + row: point.row, + column: point.column + }; + } + if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { + return { + row: point.row + deltaRowShift, + column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) + }; + } + return { + row: deltaStart.row, + column: deltaStart.column + }; } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/scrollbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;AACpB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n flex-direction: row;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n flex-direction: column;\n}\n\n.lm-ScrollBar-button {\n box-sizing: border-box;\n flex: 0 0 auto;\n}\n\n.lm-ScrollBar-track {\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.lm-ScrollBar-thumb {\n box-sizing: border-box;\n position: absolute;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); +exports.Anchor = Anchor; +}); -/***/ }), +ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var applyDelta = require("./apply_delta").applyDelta; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Range = require("./range").Range; +var Anchor = require("./anchor").Anchor; +var Document = /** @class */ (function () { + function Document(textOrLines) { + this.$lines = [""]; + if (textOrLines.length === 0) { + this.$lines = [""]; + } + else if (Array.isArray(textOrLines)) { + this.insertMergedLines({ row: 0, column: 0 }, textOrLines); + } + else { + this.insert({ row: 0, column: 0 }, textOrLines); + } + } + Document.prototype.setValue = function (text) { + var len = this.getLength() - 1; + this.remove(new Range(0, 0, len, this.getLine(len).length)); + this.insert({ row: 0, column: 0 }, text || ""); + }; + Document.prototype.getValue = function () { + return this.getAllLines().join(this.getNewLineCharacter()); + }; + Document.prototype.createAnchor = function (row, column) { + return new Anchor(this, row, column); + }; + Document.prototype.$detectNewLine = function (text) { + var match = text.match(/^.*?(\r\n|\r|\n)/m); + this.$autoNewLine = match ? match[1] : "\n"; + this._signal("changeNewLineMode"); + }; + Document.prototype.getNewLineCharacter = function () { + switch (this.$newLineMode) { + case "windows": + return "\r\n"; + case "unix": + return "\n"; + default: + return this.$autoNewLine || "\n"; + } + }; + Document.prototype.setNewLineMode = function (newLineMode) { + if (this.$newLineMode === newLineMode) + return; + this.$newLineMode = newLineMode; + this._signal("changeNewLineMode"); + }; + Document.prototype.getNewLineMode = function () { + return this.$newLineMode; + }; + Document.prototype.isNewLine = function (text) { + return (text == "\r\n" || text == "\r" || text == "\n"); + }; + Document.prototype.getLine = function (row) { + return this.$lines[row] || ""; + }; + Document.prototype.getLines = function (firstRow, lastRow) { + return this.$lines.slice(firstRow, lastRow + 1); + }; + Document.prototype.getAllLines = function () { + return this.getLines(0, this.getLength()); + }; + Document.prototype.getLength = function () { + return this.$lines.length; + }; + Document.prototype.getTextRange = function (range) { + return this.getLinesForRange(range).join(this.getNewLineCharacter()); + }; + Document.prototype.getLinesForRange = function (range) { + var lines; + if (range.start.row === range.end.row) { + lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; + } + else { + lines = this.getLines(range.start.row, range.end.row); + lines[0] = (lines[0] || "").substring(range.start.column); + var l = lines.length - 1; + if (range.end.row - range.start.row == l) + lines[l] = lines[l].substring(0, range.end.column); + } + return lines; + }; + Document.prototype.insertLines = function (row, lines) { + console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); + return this.insertFullLines(row, lines); + }; + Document.prototype.removeLines = function (firstRow, lastRow) { + console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); + return this.removeFullLines(firstRow, lastRow); + }; + Document.prototype.insertNewLine = function (position) { + console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."); + return this.insertMergedLines(position, ["", ""]); + }; + Document.prototype.insert = function (position, text) { + if (this.getLength() <= 1) + this.$detectNewLine(text); + return this.insertMergedLines(position, this.$split(text)); + }; + Document.prototype.insertInLine = function (position, text) { + var start = this.clippedPos(position.row, position.column); + var end = this.pos(position.row, position.column + text.length); + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: [text] + }, true); + return this.clonePos(end); + }; + Document.prototype.clippedPos = function (row, column) { + var length = this.getLength(); + if (row === undefined) { + row = length; + } + else if (row < 0) { + row = 0; + } + else if (row >= length) { + row = length - 1; + column = undefined; + } + var line = this.getLine(row); + if (column == undefined) + column = line.length; + column = Math.min(Math.max(column, 0), line.length); + return { row: row, column: column }; + }; + Document.prototype.clonePos = function (pos) { + return { row: pos.row, column: pos.column }; + }; + Document.prototype.pos = function (row, column) { + return { row: row, column: column }; + }; + Document.prototype.$clipPosition = function (position) { + var length = this.getLength(); + if (position.row >= length) { + position.row = Math.max(0, length - 1); + position.column = this.getLine(length - 1).length; + } + else { + position.row = Math.max(0, position.row); + position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); + } + return position; + }; + Document.prototype.insertFullLines = function (row, lines) { + row = Math.min(Math.max(row, 0), this.getLength()); + var column = 0; + if (row < this.getLength()) { + lines = lines.concat([""]); + column = 0; + } + else { + lines = [""].concat(lines); + row--; + column = this.$lines[row].length; + } + this.insertMergedLines({ row: row, column: column }, lines); + }; + Document.prototype.insertMergedLines = function (position, lines) { + var start = this.clippedPos(position.row, position.column); + var end = { + row: start.row + lines.length - 1, + column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length + }; + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: lines + }); + return this.clonePos(end); + }; + Document.prototype.remove = function (range) { + var start = this.clippedPos(range.start.row, range.start.column); + var end = this.clippedPos(range.end.row, range.end.column); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({ start: start, end: end }) + }); + return this.clonePos(start); + }; + Document.prototype.removeInLine = function (row, startColumn, endColumn) { + var start = this.clippedPos(row, startColumn); + var end = this.clippedPos(row, endColumn); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({ start: start, end: end }) + }, true); + return this.clonePos(start); + }; + Document.prototype.removeFullLines = function (firstRow, lastRow) { + firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); + lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1); + var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; + var deleteLastNewLine = lastRow < this.getLength() - 1; + var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow); + var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0); + var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow); + var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length); + var range = new Range(startRow, startCol, endRow, endCol); + var deletedLines = this.$lines.slice(firstRow, lastRow + 1); + this.applyDelta({ + start: range.start, + end: range.end, + action: "remove", + lines: this.getLinesForRange(range) + }); + return deletedLines; + }; + Document.prototype.removeNewLine = function (row) { + if (row < this.getLength() - 1 && row >= 0) { + this.applyDelta({ + start: this.pos(row, this.getLine(row).length), + end: this.pos(row + 1, 0), + action: "remove", + lines: ["", ""] + }); + } + }; + Document.prototype.replace = function (range, text) { + if (!(range instanceof Range)) + range = Range.fromPoints(range.start, range.end); + if (text.length === 0 && range.isEmpty()) + return range.start; + if (text == this.getTextRange(range)) + return range.end; + this.remove(range); + var end; + if (text) { + end = this.insert(range.start, text); + } + else { + end = range.start; + } + return end; + }; + Document.prototype.applyDeltas = function (deltas) { + for (var i = 0; i < deltas.length; i++) { + this.applyDelta(deltas[i]); + } + }; + Document.prototype.revertDeltas = function (deltas) { + for (var i = deltas.length - 1; i >= 0; i--) { + this.revertDelta(deltas[i]); + } + }; + Document.prototype.applyDelta = function (delta, doNotValidate) { + var isInsert = delta.action == "insert"; + if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] + : !Range.comparePoints(delta.start, delta.end)) { + return; + } + if (isInsert && delta.lines.length > 20000) { + this.$splitAndapplyLargeDelta(delta, 20000); + } + else { + applyDelta(this.$lines, delta, doNotValidate); + this._signal("change", delta); + } + }; + Document.prototype.$safeApplyDelta = function (delta) { + var docLength = this.$lines.length; + if (delta.action == "remove" && delta.start.row < docLength && delta.end.row < docLength + || delta.action == "insert" && delta.start.row <= docLength) { + this.applyDelta(delta); + } + }; + Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) { + var lines = delta.lines; + var l = lines.length - MAX + 1; + var row = delta.start.row; + var column = delta.start.column; + for (var from = 0, to = 0; from < l; from = to) { + to += MAX - 1; + var chunk = lines.slice(from, to); + chunk.push(""); + this.applyDelta({ + start: this.pos(row + from, column), + end: this.pos(row + to, column = 0), + action: delta.action, + lines: chunk + }, true); + } + delta.lines = lines.slice(from); + delta.start.row = row + from; + delta.start.column = column; + this.applyDelta(delta, true); + }; + Document.prototype.revertDelta = function (delta) { + this.$safeApplyDelta({ + start: this.clonePos(delta.start), + end: this.clonePos(delta.end), + action: (delta.action == "insert" ? "remove" : "insert"), + lines: delta.lines.slice() + }); + }; + Document.prototype.indexToPosition = function (index, startRow) { + var lines = this.$lines || this.getAllLines(); + var newlineLength = this.getNewLineCharacter().length; + for (var i = startRow || 0, l = lines.length; i < l; i++) { + index -= lines[i].length + newlineLength; + if (index < 0) + return { row: i, column: index + lines[i].length + newlineLength }; + } + return { row: l - 1, column: index + lines[l - 1].length + newlineLength }; + }; + Document.prototype.positionToIndex = function (pos, startRow) { + var lines = this.$lines || this.getAllLines(); + var newlineLength = this.getNewLineCharacter().length; + var index = 0; + var row = Math.min(pos.row, lines.length); + for (var i = startRow || 0; i < row; ++i) + index += lines[i].length + newlineLength; + return index + pos.column; + }; + Document.prototype.$split = function (text) { + return text.split(/\r\n|\r|\n/); + }; + return Document; +}()); +Document.prototype.$autoNewLine = ""; +Document.prototype.$newLineMode = "auto"; +oop.implement(Document.prototype, EventEmitter); +exports.Document = Document; -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css": -/*!*****************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/splitpanel.css ***! - \*****************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +}); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports +ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var BackgroundTokenizer = /** @class */ (function () { + function BackgroundTokenizer(tokenizer, session) { + this.running = false; + this.lines = []; + this.states = []; + this.currentLine = 0; + this.tokenizer = tokenizer; + var self = this; + this.$worker = function () { + if (!self.running) { + return; + } + var workerStart = new Date(); + var currentLine = self.currentLine; + var endLine = -1; + var doc = self.doc; + var startLine = currentLine; + while (self.lines[currentLine]) + currentLine++; + var len = doc.getLength(); + var processedLines = 0; + self.running = false; + while (currentLine < len) { + self.$tokenizeRow(currentLine); + endLine = currentLine; + do { + currentLine++; + } while (self.lines[currentLine]); + processedLines++; + if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { + self.running = setTimeout(self.$worker, 20); + break; + } + } + self.currentLine = currentLine; + if (endLine == -1) + endLine = currentLine; + if (startLine <= endLine) + self.fireUpdateEvent(startLine, endLine); + }; + } + BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) { + this.tokenizer = tokenizer; + this.lines = []; + this.states = []; + this.start(0); + }; + BackgroundTokenizer.prototype.setDocument = function (doc) { + this.doc = doc; + this.lines = []; + this.states = []; + this.stop(); + }; + BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) { + var data = { + first: firstRow, + last: lastRow + }; + this._signal("update", { data: data }); + }; + BackgroundTokenizer.prototype.start = function (startRow) { + this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); + this.lines.splice(this.currentLine, this.lines.length); + this.states.splice(this.currentLine, this.states.length); + this.stop(); + this.running = setTimeout(this.$worker, 700); + }; + BackgroundTokenizer.prototype.scheduleStart = function () { + if (!this.running) + this.running = setTimeout(this.$worker, 700); + }; + BackgroundTokenizer.prototype.$updateOnChange = function (delta) { + var startRow = delta.start.row; + var len = delta.end.row - startRow; + if (len === 0) { + this.lines[startRow] = null; + } + else if (delta.action == "remove") { + this.lines.splice(startRow, len + 1, null); + this.states.splice(startRow, len + 1, null); + } + else { + var args = Array(len + 1); + args.unshift(startRow, 1); + this.lines.splice.apply(this.lines, args); + this.states.splice.apply(this.states, args); + } + this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); + this.stop(); + }; + BackgroundTokenizer.prototype.stop = function () { + if (this.running) + clearTimeout(this.running); + this.running = false; + }; + BackgroundTokenizer.prototype.getTokens = function (row) { + return this.lines[row] || this.$tokenizeRow(row); + }; + BackgroundTokenizer.prototype.getState = function (row) { + if (this.currentLine == row) + this.$tokenizeRow(row); + return this.states[row] || "start"; + }; + BackgroundTokenizer.prototype.$tokenizeRow = function (row) { + var line = this.doc.getLine(row); + var state = this.states[row - 1]; + var data = this.tokenizer.getLineTokens(line, state, row); + if (this.states[row] + "" !== data.state + "") { + this.states[row] = data.state; + this.lines[row + 1] = null; + if (this.currentLine > row + 1) + this.currentLine = row + 1; + } + else if (this.currentLine == row) { + this.currentLine = row + 1; + } + return this.lines[row] = data.tokens; + }; + BackgroundTokenizer.prototype.cleanup = function () { + this.running = false; + this.lines = []; + this.states = []; + this.currentLine = 0; + this.removeAllListeners(); + }; + return BackgroundTokenizer; +}()); +oop.implement(BackgroundTokenizer.prototype, EventEmitter); +exports.BackgroundTokenizer = BackgroundTokenizer; +}); -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ +ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/range"], function(require, exports, module){"use strict"; +var lang = require("./lib/lang"); +var Range = require("./range").Range; +var SearchHighlight = /** @class */ (function () { + function SearchHighlight(regExp, clazz, type) { + if (type === void 0) { type = "text"; } + this.setRegexp(regExp); + this.clazz = clazz; + this.type = type; + this.docLen = 0; + } + SearchHighlight.prototype.setRegexp = function (regExp) { + if (this.regExp + "" == regExp + "") + return; + this.regExp = regExp; + this.cache = []; + }; + SearchHighlight.prototype.update = function (html, markerLayer, session, config) { + if (!this.regExp) + return; + var start = config.firstRow; + var end = config.lastRow; + var renderedMarkerRanges = {}; + var _search = session.$editor && session.$editor.$search; + var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions()); + for (var i = start; i <= end; i++) { + var ranges = this.cache[i]; + if (ranges == null || session.getValue().length != this.docLen) { + if (mtSearch) { + ranges = []; + var match = _search.$multiLineForward(session, this.regExp, i, end); + if (match) { + var end_row = match.endRow <= end ? match.endRow - 1 : end; + if (end_row > i) + i = end_row; + ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol)); + } + if (ranges.length > this.MAX_RANGES) + ranges = ranges.slice(0, this.MAX_RANGES); + } + else { + ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); + if (ranges.length > this.MAX_RANGES) + ranges = ranges.slice(0, this.MAX_RANGES); + ranges = ranges.map(function (match) { + return new Range(i, match.offset, i, match.offset + match.length); + }); + } + this.cache[i] = ranges.length ? ranges : ""; + } + if (ranges.length === 0) + continue; + for (var j = ranges.length; j--;) { + var rangeToAddMarkerTo = ranges[j].toScreenRange(session); + var rangeAsString = rangeToAddMarkerTo.toString(); + if (renderedMarkerRanges[rangeAsString]) + continue; + renderedMarkerRanges[rangeAsString] = true; + markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config); + } + } + this.docLen = session.getValue().length; + }; + return SearchHighlight; +}()); +SearchHighlight.prototype.MAX_RANGES = 500; +exports.SearchHighlight = SearchHighlight; -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ +}); -.lm-SplitPanel-child { - z-index: 0; +ace.define("ace/undomanager",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var UndoManager = /** @class */ (function () { + function UndoManager() { + this.$keepRedoStack; + this.$maxRev = 0; + this.$fromUndo = false; + this.$undoDepth = Infinity; + this.reset(); + } + UndoManager.prototype.addSession = function (session) { + this.$session = session; + }; + UndoManager.prototype.add = function (delta, allowMerge, session) { + if (this.$fromUndo) + return; + if (delta == this.$lastDelta) + return; + if (!this.$keepRedoStack) + this.$redoStack.length = 0; + if (allowMerge === false || !this.lastDeltas) { + this.lastDeltas = []; + var undoStackLength = this.$undoStack.length; + if (undoStackLength > this.$undoDepth - 1) { + this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1); + } + this.$undoStack.push(this.lastDeltas); + delta.id = this.$rev = ++this.$maxRev; + } + if (delta.action == "remove" || delta.action == "insert") + this.$lastDelta = delta; + this.lastDeltas.push(delta); + }; + UndoManager.prototype.addSelection = function (selection, rev) { + this.selections.push({ + value: selection, + rev: rev || this.$rev + }); + }; + UndoManager.prototype.startNewGroup = function () { + this.lastDeltas = null; + return this.$rev; + }; + UndoManager.prototype.markIgnored = function (from, to) { + if (to == null) + to = this.$rev + 1; + var stack = this.$undoStack; + for (var i = stack.length; i--;) { + var delta = stack[i][0]; + if (delta.id <= from) + break; + if (delta.id < to) + delta.ignore = true; + } + this.lastDeltas = null; + }; + UndoManager.prototype.getSelection = function (rev, after) { + var stack = this.selections; + for (var i = stack.length; i--;) { + var selection = stack[i]; + if (selection.rev < rev) { + if (after) + selection = stack[i + 1]; + return selection; + } + } + }; + UndoManager.prototype.getRevision = function () { + return this.$rev; + }; + UndoManager.prototype.getDeltas = function (from, to) { + if (to == null) + to = this.$rev + 1; + var stack = this.$undoStack; + var end = null, start = 0; + for (var i = stack.length; i--;) { + var delta = stack[i][0]; + if (delta.id < to && !end) + end = i + 1; + if (delta.id <= from) { + start = i + 1; + break; + } + } + return stack.slice(start, end); + }; + UndoManager.prototype.getChangedRanges = function (from, to) { + if (to == null) + to = this.$rev + 1; + }; + UndoManager.prototype.getChangedLines = function (from, to) { + if (to == null) + to = this.$rev + 1; + }; + UndoManager.prototype.undo = function (session, dontSelect) { + this.lastDeltas = null; + var stack = this.$undoStack; + if (!rearrangeUndoStack(stack, stack.length)) + return; + if (!session) + session = this.$session; + if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length) + this.$redoStack = []; + this.$fromUndo = true; + var deltaSet = stack.pop(); + var undoSelectionRange = null; + if (deltaSet) { + undoSelectionRange = session.undoChanges(deltaSet, dontSelect); + this.$redoStack.push(deltaSet); + this.$syncRev(); + } + this.$fromUndo = false; + return undoSelectionRange; + }; + UndoManager.prototype.redo = function (session, dontSelect) { + this.lastDeltas = null; + if (!session) + session = this.$session; + this.$fromUndo = true; + if (this.$redoStackBaseRev != this.$rev) { + var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1); + rebaseRedoStack(this.$redoStack, diff); + this.$redoStackBaseRev = this.$rev; + this.$redoStack.forEach(function (x) { + x[0].id = ++this.$maxRev; + }, this); + } + var deltaSet = this.$redoStack.pop(); + var redoSelectionRange = null; + if (deltaSet) { + redoSelectionRange = session.redoChanges(deltaSet, dontSelect); + this.$undoStack.push(deltaSet); + this.$syncRev(); + } + this.$fromUndo = false; + return redoSelectionRange; + }; + UndoManager.prototype.$syncRev = function () { + var stack = this.$undoStack; + var nextDelta = stack[stack.length - 1]; + var id = nextDelta && nextDelta[0].id || 0; + this.$redoStackBaseRev = id; + this.$rev = id; + }; + UndoManager.prototype.reset = function () { + this.lastDeltas = null; + this.$lastDelta = null; + this.$undoStack = []; + this.$redoStack = []; + this.$rev = 0; + this.mark = 0; + this.$redoStackBaseRev = this.$rev; + this.selections = []; + }; + UndoManager.prototype.canUndo = function () { + return this.$undoStack.length > 0; + }; + UndoManager.prototype.canRedo = function () { + return this.$redoStack.length > 0; + }; + UndoManager.prototype.bookmark = function (rev) { + if (rev == undefined) + rev = this.$rev; + this.mark = rev; + }; + UndoManager.prototype.isAtBookmark = function () { + return this.$rev === this.mark; + }; + UndoManager.prototype.toJSON = function () { + return { + $redoStack: this.$redoStack, + $undoStack: this.$undoStack + }; + }; + UndoManager.prototype.fromJSON = function (json) { + this.reset(); + this.$undoStack = json.$undoStack; + this.$redoStack = json.$redoStack; + }; + UndoManager.prototype.$prettyPrint = function (delta) { + if (delta) + return stringifyDelta(delta); + return stringifyDelta(this.$undoStack) + "\n---\n" + stringifyDelta(this.$redoStack); + }; + return UndoManager; +}()); +UndoManager.prototype.hasUndo = UndoManager.prototype.canUndo; +UndoManager.prototype.hasRedo = UndoManager.prototype.canRedo; +UndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark; +UndoManager.prototype.markClean = UndoManager.prototype.bookmark; +function rearrangeUndoStack(stack, pos) { + for (var i = pos; i--;) { + var deltaSet = stack[i]; + if (deltaSet && !deltaSet[0].ignore) { + while (i < pos - 1) { + var swapped = swapGroups(stack[i], stack[i + 1]); + stack[i] = swapped[0]; + stack[i + 1] = swapped[1]; + i++; + } + return true; + } + } } - -.lm-SplitPanel-handle { - z-index: 1; +var Range = require("./range").Range; +var cmp = Range.comparePoints; +var comparePoints = Range.comparePoints; +function $updateMarkers(delta) { + var isInsert = delta.action == "insert"; + var start = delta.start; + var end = delta.end; + var rowShift = (end.row - start.row) * (isInsert ? 1 : -1); + var colShift = (end.column - start.column) * (isInsert ? 1 : -1); + if (isInsert) + end = start; + for (var i in this.marks) { + var point = this.marks[i]; + var cmp = comparePoints(point, start); + if (cmp < 0) { + continue; // delta starts after the range + } + if (cmp === 0) { + if (isInsert) { + if (point.bias == 1) { + cmp = 1; + } + else { + point.bias == -1; + continue; + } + } + } + var cmp2 = isInsert ? cmp : comparePoints(point, end); + if (cmp2 > 0) { + point.row += rowShift; + point.column += point.row == end.row ? colShift : 0; + continue; + } + if (!isInsert && cmp2 <= 0) { + point.row = start.row; + point.column = start.column; + if (cmp2 === 0) + point.bias = 1; + } + } } - -.lm-SplitPanel-handle.lm-mod-hidden { - display: none !important; +function clonePos(pos) { + return { row: pos.row, column: pos.column }; } - -.lm-SplitPanel-handle:after { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - content: ''; +function cloneDelta(d) { + return { + start: clonePos(d.start), + end: clonePos(d.end), + action: d.action, + lines: d.lines.slice() + }; } - -.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle { - cursor: ew-resize; +function stringifyDelta(d) { + d = d || this; + if (Array.isArray(d)) { + return d.map(stringifyDelta).join("\n"); + } + var type = ""; + if (d.action) { + type = d.action == "insert" ? "+" : "-"; + type += "[" + d.lines + "]"; + } + else if (d.value) { + if (Array.isArray(d.value)) { + type = d.value.map(stringifyRange).join("\n"); + } + else { + type = stringifyRange(d.value); + } + } + if (d.start) { + type += stringifyRange(d); + } + if (d.id || d.rev) { + type += "\t(" + (d.id || d.rev) + ")"; + } + return type; } - -.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle { - cursor: ns-resize; +function stringifyRange(r) { + return r.start.row + ":" + r.start.column + + "=>" + r.end.row + ":" + r.end.column; } - -.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after { - left: 50%; - min-width: 8px; - transform: translateX(-50%); +function swap(d1, d2) { + var i1 = d1.action == "insert"; + var i2 = d2.action == "insert"; + if (i1 && i2) { + if (cmp(d2.start, d1.end) >= 0) { + shift(d2, d1, -1); + } + else if (cmp(d2.start, d1.start) <= 0) { + shift(d1, d2, +1); + } + else { + return null; + } + } + else if (i1 && !i2) { + if (cmp(d2.start, d1.end) >= 0) { + shift(d2, d1, -1); + } + else if (cmp(d2.end, d1.start) <= 0) { + shift(d1, d2, -1); + } + else { + return null; + } + } + else if (!i1 && i2) { + if (cmp(d2.start, d1.start) >= 0) { + shift(d2, d1, +1); + } + else if (cmp(d2.start, d1.start) <= 0) { + shift(d1, d2, +1); + } + else { + return null; + } + } + else if (!i1 && !i2) { + if (cmp(d2.start, d1.start) >= 0) { + shift(d2, d1, +1); + } + else if (cmp(d2.end, d1.start) <= 0) { + shift(d1, d2, -1); + } + else { + return null; + } + } + return [d2, d1]; +} +function swapGroups(ds1, ds2) { + for (var i = ds1.length; i--;) { + for (var j = 0; j < ds2.length; j++) { + if (!swap(ds1[i], ds2[j])) { + while (i < ds1.length) { + while (j--) { + swap(ds2[j], ds1[i]); + } + j = ds2.length; + i++; + } + return [ds1, ds2]; + } + } + } + ds1.selectionBefore = ds2.selectionBefore = + ds1.selectionAfter = ds2.selectionAfter = null; + return [ds2, ds1]; +} +function xform(d1, c1) { + var i1 = d1.action == "insert"; + var i2 = c1.action == "insert"; + if (i1 && i2) { + if (cmp(d1.start, c1.start) < 0) { + shift(c1, d1, 1); + } + else { + shift(d1, c1, 1); + } + } + else if (i1 && !i2) { + if (cmp(d1.start, c1.end) >= 0) { + shift(d1, c1, -1); + } + else if (cmp(d1.start, c1.start) <= 0) { + shift(c1, d1, +1); + } + else { + shift(d1, Range.fromPoints(c1.start, d1.start), -1); + shift(c1, d1, +1); + } + } + else if (!i1 && i2) { + if (cmp(c1.start, d1.end) >= 0) { + shift(c1, d1, -1); + } + else if (cmp(c1.start, d1.start) <= 0) { + shift(d1, c1, +1); + } + else { + shift(c1, Range.fromPoints(d1.start, c1.start), -1); + shift(d1, c1, +1); + } + } + else if (!i1 && !i2) { + if (cmp(c1.start, d1.end) >= 0) { + shift(c1, d1, -1); + } + else if (cmp(c1.end, d1.start) <= 0) { + shift(d1, c1, -1); + } + else { + var before, after; + if (cmp(d1.start, c1.start) < 0) { + before = d1; + d1 = splitDelta(d1, c1.start); + } + if (cmp(d1.end, c1.end) > 0) { + after = splitDelta(d1, c1.end); + } + shiftPos(c1.end, d1.start, d1.end, -1); + if (after && !before) { + d1.lines = after.lines; + d1.start = after.start; + d1.end = after.end; + after = d1; + } + return [c1, before, after].filter(Boolean); + } + } + return [c1, d1]; } - -.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after { - top: 50%; - min-height: 8px; - transform: translateY(-50%); +function shift(d1, d2, dir) { + shiftPos(d1.start, d2.start, d2.end, dir); + shiftPos(d1.end, d2.start, d2.end, dir); } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/splitpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-SplitPanel-child {\n z-index: 0;\n}\n\n.lm-SplitPanel-handle {\n z-index: 1;\n}\n\n.lm-SplitPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-SplitPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\n cursor: ew-resize;\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\n cursor: ns-resize;\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css": -/*!*************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabbar.css ***! - \*************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ - -.lm-TabBar { - display: flex; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; +function shiftPos(pos, start, end, dir) { + if (pos.row == (dir == 1 ? start : end).row) { + pos.column += dir * (end.column - start.column); + } + pos.row += dir * (end.row - start.row); } - -.lm-TabBar[data-orientation='horizontal'] { - flex-direction: row; - align-items: flex-end; +function splitDelta(c, pos) { + var lines = c.lines; + var end = c.end; + c.end = clonePos(pos); + var rowsBefore = c.end.row - c.start.row; + var otherLines = lines.splice(rowsBefore, lines.length); + var col = rowsBefore ? pos.column : pos.column - c.start.column; + lines.push(otherLines[0].substring(0, col)); + otherLines[0] = otherLines[0].substr(col); + var rest = { + start: clonePos(pos), + end: end, + lines: otherLines, + action: c.action + }; + return rest; } - -.lm-TabBar[data-orientation='vertical'] { - flex-direction: column; - align-items: flex-end; +function moveDeltasByOne(redoStack, d) { + d = cloneDelta(d); + for (var j = redoStack.length; j--;) { + var deltaSet = redoStack[j]; + for (var i = 0; i < deltaSet.length; i++) { + var x = deltaSet[i]; + var xformed = xform(x, d); + d = xformed[0]; + if (xformed.length != 2) { + if (xformed[2]) { + deltaSet.splice(i + 1, 1, xformed[1], xformed[2]); + i++; + } + else if (!xformed[1]) { + deltaSet.splice(i, 1); + i--; + } + } + } + if (!deltaSet.length) { + redoStack.splice(j, 1); + } + } + return redoStack; } - -.lm-TabBar-content { - margin: 0; - padding: 0; - display: flex; - flex: 1 1 auto; - list-style-type: none; +function rebaseRedoStack(redoStack, deltaSets) { + for (var i = 0; i < deltaSets.length; i++) { + var deltas = deltaSets[i]; + for (var j = 0; j < deltas.length; j++) { + moveDeltasByOne(redoStack, deltas[j]); + } + } } +exports.UndoManager = UndoManager; -.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content { - flex-direction: row; -} +}); -.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content { - flex-direction: column; -} +ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var Range = require("../range").Range; +var FoldLine = /** @class */ (function () { + function FoldLine(foldData, folds) { + this.foldData = foldData; + if (Array.isArray(folds)) { + this.folds = folds; + } + else { + folds = this.folds = [folds]; + } + var last = folds[folds.length - 1]; + this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column); + this.start = this.range.start; + this.end = this.range.end; + this.folds.forEach(function (fold) { + fold.setFoldLine(this); + }, this); + } + FoldLine.prototype.shiftRow = function (shift) { + this.start.row += shift; + this.end.row += shift; + this.folds.forEach(function (fold) { + fold.start.row += shift; + fold.end.row += shift; + }); + }; + FoldLine.prototype.addFold = function (fold) { + if (fold.sameRow) { + if (fold.start.row < this.startRow || fold.endRow > this.endRow) { + throw new Error("Can't add a fold to this FoldLine as it has no connection"); + } + this.folds.push(fold); + this.folds.sort(function (a, b) { + return -a.range.compareEnd(b.start.row, b.start.column); + }); + if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } + else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } + } + else if (fold.start.row == this.end.row) { + this.folds.push(fold); + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } + else if (fold.end.row == this.start.row) { + this.folds.unshift(fold); + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } + else { + throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); + } + fold.foldLine = this; + }; + FoldLine.prototype.containsRow = function (row) { + return row >= this.start.row && row <= this.end.row; + }; + FoldLine.prototype.walk = function (callback, endRow, endColumn) { + var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true; + if (endRow == null) { + endRow = this.end.row; + endColumn = this.end.column; + } + for (var i = 0; i < folds.length; i++) { + fold = folds[i]; + cmp = fold.range.compareStart(endRow, endColumn); + if (cmp == -1) { + callback(null, endRow, endColumn, lastEnd, isNewRow); + return; + } + stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); + stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); + if (stop || cmp === 0) { + return; + } + isNewRow = !fold.sameRow; + lastEnd = fold.end.column; + } + callback(null, endRow, endColumn, lastEnd, isNewRow); + }; + FoldLine.prototype.getNextFoldTo = function (row, column) { + var fold, cmp; + for (var i = 0; i < this.folds.length; i++) { + fold = this.folds[i]; + cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + return { + fold: fold, + kind: "after" + }; + } + else if (cmp === 0) { + return { + fold: fold, + kind: "inside" + }; + } + } + return null; + }; + FoldLine.prototype.addRemoveChars = function (row, column, len) { + var ret = this.getNextFoldTo(row, column), fold, folds; + if (ret) { + fold = ret.fold; + if (ret.kind == "inside" + && fold.start.column != column + && fold.start.row != row) { + window.console && window.console.log(row, column, fold); + } + else if (fold.start.row == row) { + folds = this.folds; + var i = folds.indexOf(fold); + if (i === 0) { + this.start.column += len; + } + for (i; i < folds.length; i++) { + fold = folds[i]; + fold.start.column += len; + if (!fold.sameRow) { + return; + } + fold.end.column += len; + } + this.end.column += len; + } + } + }; + FoldLine.prototype.split = function (row, column) { + var pos = this.getNextFoldTo(row, column); + if (!pos || pos.kind == "inside") + return null; + var fold = pos.fold; + var folds = this.folds; + var foldData = this.foldData; + var i = folds.indexOf(fold); + var foldBefore = folds[i - 1]; + this.end.row = foldBefore.end.row; + this.end.column = foldBefore.end.column; + folds = folds.splice(i, folds.length - i); + var newFoldLine = new FoldLine(foldData, folds); + foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); + return newFoldLine; + }; + FoldLine.prototype.merge = function (foldLineNext) { + var folds = foldLineNext.folds; + for (var i = 0; i < folds.length; i++) { + this.addFold(folds[i]); + } + var foldData = this.foldData; + foldData.splice(foldData.indexOf(foldLineNext), 1); + }; + FoldLine.prototype.toString = function () { + var ret = [this.range.toString() + ": ["]; + this.folds.forEach(function (fold) { + ret.push(" " + fold.toString()); + }); + ret.push("]"); + return ret.join("\n"); + }; + FoldLine.prototype.idxToPosition = function (idx) { + var lastFoldEndColumn = 0; + for (var i = 0; i < this.folds.length; i++) { + var fold = this.folds[i]; + idx -= fold.start.column - lastFoldEndColumn; + if (idx < 0) { + return { + row: fold.start.row, + column: fold.start.column + idx + }; + } + idx -= fold.placeholder.length; + if (idx < 0) { + return fold.start; + } + lastFoldEndColumn = fold.end.column; + } + return { + row: this.end.row, + column: this.end.column + idx + }; + }; + return FoldLine; +}()); +exports.FoldLine = FoldLine; -.lm-TabBar-tab { - display: flex; - flex-direction: row; - box-sizing: border-box; - overflow: hidden; - touch-action: none; /* Disable native Drag/Drop */ -} +}); -.lm-TabBar-tabIcon, -.lm-TabBar-tabCloseIcon { - flex: 0 0 auto; -} +ace.define("ace/range_list",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var Range = require("./range").Range; +var comparePoints = Range.comparePoints; +var RangeList = /** @class */ (function () { + function RangeList() { + this.ranges = []; + this.$bias = 1; + } + RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) { + var list = this.ranges; + for (var i = startIndex || 0; i < list.length; i++) { + var range = list[i]; + var cmpEnd = comparePoints(pos, range.end); + if (cmpEnd > 0) + continue; + var cmpStart = comparePoints(pos, range.start); + if (cmpEnd === 0) + return excludeEdges && cmpStart !== 0 ? -i - 2 : i; + if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) + return i; + return -i - 1; + } + return -i - 1; + }; + RangeList.prototype.add = function (range) { + var excludeEdges = !range.isEmpty(); + var startIndex = this.pointIndex(range.start, excludeEdges); + if (startIndex < 0) + startIndex = -startIndex - 1; + var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); + if (endIndex < 0) + endIndex = -endIndex - 1; + else + endIndex++; + return this.ranges.splice(startIndex, endIndex - startIndex, range); + }; + RangeList.prototype.addList = function (list) { + var removed = []; + for (var i = list.length; i--;) { + removed.push.apply(removed, this.add(list[i])); + } + return removed; + }; + RangeList.prototype.substractPoint = function (pos) { + var i = this.pointIndex(pos); + if (i >= 0) + return this.ranges.splice(i, 1); + }; + RangeList.prototype.merge = function () { + var removed = []; + var list = this.ranges; + list = list.sort(function (a, b) { + return comparePoints(a.start, b.start); + }); + var next = list[0], range; + for (var i = 1; i < list.length; i++) { + range = next; + next = list[i]; + var cmp = comparePoints(range.end, next.start); + if (cmp < 0) + continue; + if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) + continue; + if (comparePoints(range.end, next.end) < 0) { + range.end.row = next.end.row; + range.end.column = next.end.column; + } + list.splice(i, 1); + removed.push(next); + next = range; + i--; + } + this.ranges = list; + return removed; + }; + RangeList.prototype.contains = function (row, column) { + return this.pointIndex({ row: row, column: column }) >= 0; + }; + RangeList.prototype.containsPoint = function (pos) { + return this.pointIndex(pos) >= 0; + }; + RangeList.prototype.rangeAtPoint = function (pos) { + var i = this.pointIndex(pos); + if (i >= 0) + return this.ranges[i]; + }; + RangeList.prototype.clipRows = function (startRow, endRow) { + var list = this.ranges; + if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) + return []; + var startIndex = this.pointIndex({ row: startRow, column: 0 }); + if (startIndex < 0) + startIndex = -startIndex - 1; + var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex); + if (endIndex < 0) + endIndex = -endIndex - 1; + var clipped = []; + for (var i = startIndex; i < endIndex; i++) { + clipped.push(list[i]); + } + return clipped; + }; + RangeList.prototype.removeAll = function () { + return this.ranges.splice(0, this.ranges.length); + }; + RangeList.prototype.attach = function (session) { + if (this.session) + this.detach(); + this.session = session; + this.onChange = this.$onChange.bind(this); + this.session.on('change', this.onChange); + }; + RangeList.prototype.detach = function () { + if (!this.session) + return; + this.session.removeListener('change', this.onChange); + this.session = null; + }; + RangeList.prototype.$onChange = function (delta) { + var start = delta.start; + var end = delta.end; + var startRow = start.row; + var endRow = end.row; + var ranges = this.ranges; + for (var i = 0, n = ranges.length; i < n; i++) { + var r = ranges[i]; + if (r.end.row >= startRow) + break; + } + if (delta.action == "insert") { + var lineDif = endRow - startRow; + var colDiff = -start.column + end.column; + for (; i < n; i++) { + var r = ranges[i]; + if (r.start.row > startRow) + break; + if (r.start.row == startRow && r.start.column >= start.column) { + if (r.start.column == start.column && this.$bias <= 0) { + } + else { + r.start.column += colDiff; + r.start.row += lineDif; + } + } + if (r.end.row == startRow && r.end.column >= start.column) { + if (r.end.column == start.column && this.$bias < 0) { + continue; + } + if (r.end.column == start.column && colDiff > 0 && i < n - 1) { + if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column) + r.end.column -= colDiff; + } + r.end.column += colDiff; + r.end.row += lineDif; + } + } + } + else { + var lineDif = startRow - endRow; + var colDiff = start.column - end.column; + for (; i < n; i++) { + var r = ranges[i]; + if (r.start.row > endRow) + break; + if (r.end.row < endRow + && (startRow < r.end.row + || startRow == r.end.row && start.column < r.end.column)) { + r.end.row = startRow; + r.end.column = start.column; + } + else if (r.end.row == endRow) { + if (r.end.column <= end.column) { + if (lineDif || r.end.column > start.column) { + r.end.column = start.column; + r.end.row = start.row; + } + } + else { + r.end.column += colDiff; + r.end.row += lineDif; + } + } + else if (r.end.row > endRow) { + r.end.row += lineDif; + } + if (r.start.row < endRow + && (startRow < r.start.row + || startRow == r.start.row && start.column < r.start.column)) { + r.start.row = startRow; + r.start.column = start.column; + } + else if (r.start.row == endRow) { + if (r.start.column <= end.column) { + if (lineDif || r.start.column > start.column) { + r.start.column = start.column; + r.start.row = start.row; + } + } + else { + r.start.column += colDiff; + r.start.row += lineDif; + } + } + else if (r.start.row > endRow) { + r.start.row += lineDif; + } + } + } + if (lineDif != 0 && i < n) { + for (; i < n; i++) { + var r = ranges[i]; + r.start.row += lineDif; + r.end.row += lineDif; + } + } + }; + return RangeList; +}()); +RangeList.prototype.comparePoints = comparePoints; +exports.RangeList = RangeList; -.lm-TabBar-tabLabel { - flex: 1 1 auto; - overflow: hidden; - white-space: nowrap; -} +}); -.lm-TabBar-tabInput { - user-select: all; - width: 100%; - box-sizing: border-box; +ace.define("ace/edit_session/fold",["require","exports","module","ace/range_list"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var RangeList = require("../range_list").RangeList; +var Fold = /** @class */ (function (_super) { + __extends(Fold, _super); + function Fold(range, placeholder) { + var _this = _super.call(this) || this; + _this.foldLine = null; + _this.placeholder = placeholder; + _this.range = range; + _this.start = range.start; + _this.end = range.end; + _this.sameRow = range.start.row == range.end.row; + _this.subFolds = _this.ranges = []; + return _this; + } + Fold.prototype.toString = function () { + return '"' + this.placeholder + '" ' + this.range.toString(); + }; + Fold.prototype.setFoldLine = function (foldLine) { + this.foldLine = foldLine; + this.subFolds.forEach(function (fold) { + fold.setFoldLine(foldLine); + }); + }; + Fold.prototype.clone = function () { + var range = this.range.clone(); + var fold = new Fold(range, this.placeholder); + this.subFolds.forEach(function (subFold) { + fold.subFolds.push(subFold.clone()); + }); + fold.collapseChildren = this.collapseChildren; + return fold; + }; + Fold.prototype.addSubFold = function (fold) { + if (this.range.isEqual(fold)) + return; + consumeRange(fold, this.start); + var row = fold.start.row, column = fold.start.column; + for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { + cmp = this.subFolds[i].range.compare(row, column); + if (cmp != 1) + break; + } + var afterStart = this.subFolds[i]; + var firstConsumed = 0; + if (cmp == 0) { + if (afterStart.range.containsRange(fold)) + return afterStart.addSubFold(fold); + else + firstConsumed = 1; + } + var row = fold.range.end.row, column = fold.range.end.column; + for (var j = i, cmp = -1; j < this.subFolds.length; j++) { + cmp = this.subFolds[j].range.compare(row, column); + if (cmp != 1) + break; + } + if (cmp == 0) + j++; + var consumedFolds = this.subFolds.splice(i, j - i, fold); + var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length; + for (var k = firstConsumed; k < last; k++) { + fold.addSubFold(consumedFolds[k]); + } + fold.setFoldLine(this.foldLine); + return fold; + }; + Fold.prototype.restoreRange = function (range) { + return restoreRange(range, this.start); + }; + return Fold; +}(RangeList)); +function consumePoint(point, anchor) { + point.row -= anchor.row; + if (point.row == 0) + point.column -= anchor.column; } - -.lm-TabBar-tab.lm-mod-hidden { - display: none !important; +function consumeRange(range, anchor) { + consumePoint(range.start, anchor); + consumePoint(range.end, anchor); } - -.lm-TabBar-addButton.lm-mod-hidden { - display: none !important; +function restorePoint(point, anchor) { + if (point.row == 0) + point.column += anchor.column; + point.row += anchor.row; } - -.lm-TabBar.lm-mod-dragging .lm-TabBar-tab { - position: relative; +function restoreRange(range, anchor) { + restorePoint(range.start, anchor); + restorePoint(range.end, anchor); } +exports.Fold = Fold; -.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab { - left: 0; - transition: left 150ms ease; -} +}); -.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab { - top: 0; - transition: top 150ms ease; +ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator","ace/mouse/mouse_event"], function(require, exports, module){// @ts-nocheck +"use strict"; +var Range = require("../range").Range; +var FoldLine = require("./fold_line").FoldLine; +var Fold = require("./fold").Fold; +var TokenIterator = require("../token_iterator").TokenIterator; +var MouseEvent = require("../mouse/mouse_event").MouseEvent; +function Folding() { + this.getFoldAt = function (row, column, side) { + var foldLine = this.getFoldLine(row); + if (!foldLine) + return null; + var folds = foldLine.folds; + for (var i = 0; i < folds.length; i++) { + var range = folds[i].range; + if (range.contains(row, column)) { + if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) { + continue; + } + else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) { + continue; + } + return folds[i]; + } + } + }; + this.getFoldsInRange = function (range) { + var start = range.start; + var end = range.end; + var foldLines = this.$foldData; + var foundFolds = []; + start.column += 1; + end.column -= 1; + for (var i = 0; i < foldLines.length; i++) { + var cmp = foldLines[i].range.compareRange(range); + if (cmp == 2) { + continue; + } + else if (cmp == -2) { + break; + } + var folds = foldLines[i].folds; + for (var j = 0; j < folds.length; j++) { + var fold = folds[j]; + cmp = fold.range.compareRange(range); + if (cmp == -2) { + break; + } + else if (cmp == 2) { + continue; + } + else + if (cmp == 42) { + break; + } + foundFolds.push(fold); + } + } + start.column -= 1; + end.column += 1; + return foundFolds; + }; + this.getFoldsInRangeList = function (ranges) { + if (Array.isArray(ranges)) { + var folds = []; + ranges.forEach(function (range) { + folds = folds.concat(this.getFoldsInRange(range)); + }, this); + } + else { + var folds = this.getFoldsInRange(ranges); + } + return folds; + }; + this.getAllFolds = function () { + var folds = []; + var foldLines = this.$foldData; + for (var i = 0; i < foldLines.length; i++) + for (var j = 0; j < foldLines[i].folds.length; j++) + folds.push(foldLines[i].folds[j]); + return folds; + }; + this.getFoldStringAt = function (row, column, trim, foldLine) { + foldLine = foldLine || this.getFoldLine(row); + if (!foldLine) + return null; + var lastFold = { + end: { column: 0 } + }; + var str, fold; + for (var i = 0; i < foldLine.folds.length; i++) { + fold = foldLine.folds[i]; + var cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + str = this + .getLine(fold.start.row) + .substring(lastFold.end.column, fold.start.column); + break; + } + else if (cmp === 0) { + return null; + } + lastFold = fold; + } + if (!str) + str = this.getLine(fold.start.row).substring(lastFold.end.column); + if (trim == -1) + return str.substring(0, column - lastFold.end.column); + else if (trim == 1) + return str.substring(column - lastFold.end.column); + else + return str; + }; + this.getFoldLine = function (docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { + return foldLine; + } + else if (foldLine.end.row > docRow) { + return null; + } + } + return null; + }; + this.getNextFoldLine = function (docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.end.row >= docRow) { + return foldLine; + } + } + return null; + }; + this.getFoldedRowCount = function (first, last) { + var foldData = this.$foldData, rowCount = last - first + 1; + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row; + if (end >= last) { + if (start < last) { + if (start >= first) + rowCount -= last - start; + else + rowCount = 0; // in one fold + } + break; + } + else if (end >= first) { + if (start >= first) // fold inside range + rowCount -= end - start; + else + rowCount -= end - first + 1; + } + } + return rowCount; + }; + this.$addFoldLine = function (foldLine) { + this.$foldData.push(foldLine); + this.$foldData.sort(function (a, b) { + return a.start.row - b.start.row; + }); + return foldLine; + }; + this.addFold = function (placeholder, range) { + var foldData = this.$foldData; + var added = false; + var fold; + if (placeholder instanceof Fold) + fold = placeholder; + else { + fold = new Fold(range, placeholder); + fold.collapseChildren = range.collapseChildren; + } + this.$clipRangeToDocument(fold.range); + var startRow = fold.start.row; + var startColumn = fold.start.column; + var endRow = fold.end.row; + var endColumn = fold.end.column; + var startFold = this.getFoldAt(startRow, startColumn, 1); + var endFold = this.getFoldAt(endRow, endColumn, -1); + if (startFold && endFold == startFold) + return startFold.addSubFold(fold); + if (startFold && !startFold.range.isStart(startRow, startColumn)) + this.removeFold(startFold); + if (endFold && !endFold.range.isEnd(endRow, endColumn)) + this.removeFold(endFold); + var folds = this.getFoldsInRange(fold.range); + if (folds.length > 0) { + this.removeFolds(folds); + if (!fold.collapseChildren) { + folds.forEach(function (subFold) { + fold.addSubFold(subFold); + }); + } + } + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (endRow == foldLine.start.row) { + foldLine.addFold(fold); + added = true; + break; + } + else if (startRow == foldLine.end.row) { + foldLine.addFold(fold); + added = true; + if (!fold.sameRow) { + var foldLineNext = foldData[i + 1]; + if (foldLineNext && foldLineNext.start.row == endRow) { + foldLine.merge(foldLineNext); + break; + } + } + break; + } + else if (endRow <= foldLine.start.row) { + break; + } + } + if (!added) + foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); + if (this.$useWrapMode) + this.$updateWrapData(foldLine.start.row, foldLine.start.row); + else + this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); + this.$modified = true; + this._signal("changeFold", { data: fold, action: "add" }); + return fold; + }; + this.addFolds = function (folds) { + folds.forEach(function (fold) { + this.addFold(fold); + }, this); + }; + this.removeFold = function (fold) { + var foldLine = fold.foldLine; + var startRow = foldLine.start.row; + var endRow = foldLine.end.row; + var foldLines = this.$foldData; + var folds = foldLine.folds; + if (folds.length == 1) { + foldLines.splice(foldLines.indexOf(foldLine), 1); + } + else + if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { + folds.pop(); + foldLine.end.row = folds[folds.length - 1].end.row; + foldLine.end.column = folds[folds.length - 1].end.column; + } + else + if (foldLine.range.isStart(fold.start.row, fold.start.column)) { + folds.shift(); + foldLine.start.row = folds[0].start.row; + foldLine.start.column = folds[0].start.column; + } + else + if (fold.sameRow) { + folds.splice(folds.indexOf(fold), 1); + } + else + { + var newFoldLine = foldLine.split(fold.start.row, fold.start.column); + folds = newFoldLine.folds; + folds.shift(); + newFoldLine.start.row = folds[0].start.row; + newFoldLine.start.column = folds[0].start.column; + } + if (!this.$updating) { + if (this.$useWrapMode) + this.$updateWrapData(startRow, endRow); + else + this.$updateRowLengthCache(startRow, endRow); + } + this.$modified = true; + this._signal("changeFold", { data: fold, action: "remove" }); + }; + this.removeFolds = function (folds) { + var cloneFolds = []; + for (var i = 0; i < folds.length; i++) { + cloneFolds.push(folds[i]); + } + cloneFolds.forEach(function (fold) { + this.removeFold(fold); + }, this); + this.$modified = true; + }; + this.expandFold = function (fold) { + this.removeFold(fold); + fold.subFolds.forEach(function (subFold) { + fold.restoreRange(subFold); + this.addFold(subFold); + }, this); + if (fold.collapseChildren > 0) { + this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1); + } + fold.subFolds = []; + }; + this.expandFolds = function (folds) { + folds.forEach(function (fold) { + this.expandFold(fold); + }, this); + }; + this.unfold = function (location, expandInner) { + var range, folds; + if (location == null) { + range = new Range(0, 0, this.getLength(), 0); + if (expandInner == null) + expandInner = true; + } + else if (typeof location == "number") { + range = new Range(location, 0, location, this.getLine(location).length); + } + else if ("row" in location) { + range = Range.fromPoints(location, location); + } + else if (Array.isArray(location)) { + folds = []; + location.forEach(function (range) { + folds = folds.concat(this.unfold(range)); + }, this); + return folds; + } + else { + range = location; + } + folds = this.getFoldsInRangeList(range); + var outermostFolds = folds; + while (folds.length == 1 + && Range.comparePoints(folds[0].start, range.start) < 0 + && Range.comparePoints(folds[0].end, range.end) > 0) { + this.expandFolds(folds); + folds = this.getFoldsInRangeList(range); + } + if (expandInner != false) { + this.removeFolds(folds); + } + else { + this.expandFolds(folds); + } + if (outermostFolds.length) + return outermostFolds; + }; + this.isRowFolded = function (docRow, startFoldRow) { + return !!this.getFoldLine(docRow, startFoldRow); + }; + this.getRowFoldEnd = function (docRow, startFoldRow) { + var foldLine = this.getFoldLine(docRow, startFoldRow); + return foldLine ? foldLine.end.row : docRow; + }; + this.getRowFoldStart = function (docRow, startFoldRow) { + var foldLine = this.getFoldLine(docRow, startFoldRow); + return foldLine ? foldLine.start.row : docRow; + }; + this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) { + if (startRow == null) + startRow = foldLine.start.row; + if (startColumn == null) + startColumn = 0; + if (endRow == null) + endRow = foldLine.end.row; + if (endColumn == null) + endColumn = this.getLine(endRow).length; + var doc = this.doc; + var textLine = ""; + foldLine.walk(function (placeholder, row, column, lastColumn) { + if (row < startRow) + return; + if (row == startRow) { + if (column < startColumn) + return; + lastColumn = Math.max(startColumn, lastColumn); + } + if (placeholder != null) { + textLine += placeholder; + } + else { + textLine += doc.getLine(row).substring(lastColumn, column); + } + }, endRow, endColumn); + return textLine; + }; + this.getDisplayLine = function (row, endColumn, startRow, startColumn) { + var foldLine = this.getFoldLine(row); + if (!foldLine) { + var line; + line = this.doc.getLine(row); + return line.substring(startColumn || 0, endColumn || line.length); + } + else { + return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn); + } + }; + this.$cloneFoldData = function () { + var fd = []; + fd = this.$foldData.map(function (foldLine) { + var folds = foldLine.folds.map(function (fold) { + return fold.clone(); + }); + return new FoldLine(fd, folds); + }); + return fd; + }; + this.toggleFold = function (tryToUnfold) { + var selection = this.selection; + var range = selection.getRange(); + var fold; + var bracketPos; + if (range.isEmpty()) { + var cursor = range.start; + fold = this.getFoldAt(cursor.row, cursor.column); + if (fold) { + this.expandFold(fold); + return; + } + else if (tryToUnfold) { + var foldLine = this.getFoldLine(cursor.row); + if (foldLine) + this.expandFolds(foldLine.folds); + return; + } + else if (bracketPos = this.findMatchingBracket(cursor)) { + if (range.comparePoint(bracketPos) == 1) { + range.end = bracketPos; + } + else { + range.start = bracketPos; + range.start.column++; + range.end.column--; + } + } + else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) { + if (range.comparePoint(bracketPos) == 1) + range.end = bracketPos; + else + range.start = bracketPos; + range.start.column++; + } + else { + range = this.getCommentFoldRange(cursor.row, cursor.column) || range; + } + } + else { + var folds = this.getFoldsInRange(range); + if (tryToUnfold && folds.length) { + this.expandFolds(folds); + return; + } + else if (folds.length == 1) { + fold = folds[0]; + } + } + if (!fold) + fold = this.getFoldAt(range.start.row, range.start.column); + if (fold && fold.range.toString() == range.toString()) { + this.expandFold(fold); + return; + } + var placeholder = "..."; + if (!range.isMultiLine()) { + placeholder = this.getTextRange(range); + if (placeholder.length < 4) + return; + placeholder = placeholder.trim().substring(0, 2) + ".."; + } + this.addFold(placeholder, range); + }; + this.getCommentFoldRange = function (row, column, dir) { + var iterator = new TokenIterator(this, row, column); + var token = iterator.getCurrentToken(); + var type = token && token.type; + if (token && /^comment|string/.test(type)) { + type = type.match(/comment|string/)[0]; + if (type == "comment") + type += "|doc-start|\\.doc"; + var re = new RegExp(type); + var range = new Range(); + if (dir != 1) { + do { + token = iterator.stepBackward(); + } while (token && re.test(token.type)); + token = iterator.stepForward(); + } + range.start.row = iterator.getCurrentTokenRow(); + range.start.column = iterator.getCurrentTokenColumn() + token.value.length; + iterator = new TokenIterator(this, row, column); + var initState = this.getState(iterator.$row); + if (dir != -1) { + var lastRow = -1; + do { + token = iterator.stepForward(); + if (lastRow == -1) { + var state = this.getState(iterator.$row); + if (initState.toString() !== state.toString()) + lastRow = iterator.$row; + } + else if (iterator.$row > lastRow) { + break; + } + } while (token && re.test(token.type)); + token = iterator.stepBackward(); + } + else + token = iterator.getCurrentToken(); + range.end.row = iterator.getCurrentTokenRow(); + range.end.column = iterator.getCurrentTokenColumn(); + if (range.start.row == range.end.row && range.start.column > range.end.column) + return; + return range; + } + }; + this.foldAll = function (startRow, endRow, depth, test) { + if (depth == undefined) + depth = 100000; // JSON.stringify doesn't hanle Infinity + var foldWidgets = this.foldWidgets; + if (!foldWidgets) + return; // mode doesn't support folding + endRow = endRow || this.getLength(); + startRow = startRow || 0; + for (var row = startRow; row < endRow; row++) { + if (foldWidgets[row] == null) + foldWidgets[row] = this.getFoldWidget(row); + if (foldWidgets[row] != "start") + continue; + if (test && !test(row)) + continue; + var range = this.getFoldWidgetRange(row); + if (range && range.isMultiLine() + && range.end.row <= endRow + && range.start.row >= startRow) { + row = range.end.row; + range.collapseChildren = depth; + this.addFold("...", range); + } + } + }; + this.foldToLevel = function (level) { + this.foldAll(); + while (level-- > 0) + this.unfold(null, false); + }; + this.foldAllComments = function () { + var session = this; + this.foldAll(null, null, null, function (row) { + var tokens = session.getTokens(row); + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (token.type == "text" && /^\s+$/.test(token.value)) + continue; + if (/comment/.test(token.type)) + return true; + return false; + } + }); + }; + this.$foldStyles = { + "manual": 1, + "markbegin": 1, + "markbeginend": 1 + }; + this.$foldStyle = "markbegin"; + this.setFoldStyle = function (style) { + if (!this.$foldStyles[style]) + throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); + if (this.$foldStyle == style) + return; + this.$foldStyle = style; + if (style == "manual") + this.unfold(); + var mode = this.$foldMode; + this.$setFolding(null); + this.$setFolding(mode); + }; + this.$setFolding = function (foldMode) { + if (this.$foldMode == foldMode) + return; + this.$foldMode = foldMode; + this.off('change', this.$updateFoldWidgets); + this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); + this._signal("changeAnnotation"); + if (!foldMode || this.$foldStyle == "manual") { + this.foldWidgets = null; + return; + } + this.foldWidgets = []; + this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); + this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); + this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); + this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); + this.on('change', this.$updateFoldWidgets); + this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); + }; + this.getParentFoldRangeData = function (row, ignoreCurrent) { + var fw = this.foldWidgets; + if (!fw || (ignoreCurrent && fw[row])) + return {}; + var i = row - 1, firstRange; + while (i >= 0) { + var c = fw[i]; + if (c == null) + c = fw[i] = this.getFoldWidget(i); + if (c == "start") { + var range = this.getFoldWidgetRange(i); + if (!firstRange) + firstRange = range; + if (range && range.end.row >= row) + break; + } + i--; + } + return { + range: i !== -1 && range, + firstRange: firstRange + }; + }; + this.onFoldWidgetClick = function (row, e) { + if (e instanceof MouseEvent) + e = e.domEvent; + var options = { + children: e.shiftKey, + all: e.ctrlKey || e.metaKey, + siblings: e.altKey + }; + var range = this.$toggleFoldWidget(row, options); + if (!range) { + var el = (e.target || e.srcElement); + if (el && /ace_fold-widget/.test(el.className)) + el.className += " ace_invalid"; + } + }; + this.$toggleFoldWidget = function (row, options) { + if (!this.getFoldWidget) + return; + var type = this.getFoldWidget(row); + var line = this.getLine(row); + var dir = type === "end" ? -1 : 1; + var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); + if (fold) { + if (options.children || options.all) + this.removeFold(fold); + else + this.expandFold(fold); + return fold; + } + var range = this.getFoldWidgetRange(row, true); + if (range && !range.isMultiLine()) { + fold = this.getFoldAt(range.start.row, range.start.column, 1); + if (fold && range.isEqual(fold.range)) { + this.removeFold(fold); + return fold; + } + } + if (options.siblings) { + var data = this.getParentFoldRangeData(row); + if (data.range) { + var startRow = data.range.start.row + 1; + var endRow = data.range.end.row; + } + this.foldAll(startRow, endRow, options.all ? 10000 : 0); + } + else if (options.children) { + endRow = range ? range.end.row : this.getLength(); + this.foldAll(row + 1, endRow, options.all ? 10000 : 0); + } + else if (range) { + if (options.all) + range.collapseChildren = 10000; + this.addFold("...", range); + } + return range; + }; + this.toggleFoldWidget = function (toggleParent) { + var row = this.selection.getCursor().row; + row = this.getRowFoldStart(row); + var range = this.$toggleFoldWidget(row, {}); + if (range) + return; + var data = this.getParentFoldRangeData(row, true); + range = data.range || data.firstRange; + if (range) { + row = range.start.row; + var fold = this.getFoldAt(row, this.getLine(row).length, 1); + if (fold) { + this.removeFold(fold); + } + else { + this.addFold("...", range); + } + } + }; + this.updateFoldWidgets = function (delta) { + var firstRow = delta.start.row; + var len = delta.end.row - firstRow; + if (len === 0) { + this.foldWidgets[firstRow] = null; + } + else if (delta.action == 'remove') { + this.foldWidgets.splice(firstRow, len + 1, null); + } + else { + var args = Array(len + 1); + args.unshift(firstRow, 1); + this.foldWidgets.splice.apply(this.foldWidgets, args); + } + }; + this.tokenizerUpdateFoldWidgets = function (e) { + var rows = e.data; + if (rows.first != rows.last) { + if (this.foldWidgets.length > rows.first) + this.foldWidgets.splice(rows.first, this.foldWidgets.length); + } + }; } +exports.Folding = Folding; -.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging { - transition: none; -} +}); -.lm-TabBar-tabLabel .lm-TabBar-tabInput { - user-select: all; - width: 100%; - box-sizing: border-box; - background: inherit; +ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(require, exports, module){"use strict"; +var TokenIterator = require("../token_iterator").TokenIterator; +var Range = require("../range").Range; +function BracketMatch() { + this.findMatchingBracket = function (position, chr) { + if (position.column == 0) + return null; + var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1); + if (charBeforeCursor == "") + return null; + var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); + if (!match) + return null; + if (match[1]) + return this.$findClosingBracket(match[1], position); + else + return this.$findOpeningBracket(match[2], position); + }; + this.getBracketRange = function (pos) { + var line = this.getLine(pos.row); + var before = true, range; + var chr = line.charAt(pos.column - 1); + var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); + if (!match) { + chr = line.charAt(pos.column); + pos = { row: pos.row, column: pos.column + 1 }; + match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); + before = false; + } + if (!match) + return null; + if (match[1]) { + var bracketPos = this.$findClosingBracket(match[1], pos); + if (!bracketPos) + return null; + range = Range.fromPoints(pos, bracketPos); + if (!before) { + range.end.column++; + range.start.column--; + } + range.cursor = range.end; + } + else { + var bracketPos = this.$findOpeningBracket(match[2], pos); + if (!bracketPos) + return null; + range = Range.fromPoints(bracketPos, pos); + if (!before) { + range.start.column++; + range.end.column--; + } + range.cursor = range.start; + } + return range; + }; + this.getMatchingBracketRanges = function (pos, isBackwards) { + var line = this.getLine(pos.row); + var bracketsRegExp = /([\(\[\{])|([\)\]\}])/; + var chr = !isBackwards && line.charAt(pos.column - 1); + var match = chr && chr.match(bracketsRegExp); + if (!match) { + chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column); + pos = { + row: pos.row, + column: pos.column + 1 + }; + match = chr && chr.match(bracketsRegExp); + } + if (!match) + return null; + var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column); + var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos) + : this.$findOpeningBracket(match[2], pos); + if (!bracketPos) + return [startRange]; + var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1); + return [startRange, endRange]; + }; + this.$brackets = { + ")": "(", + "(": ")", + "]": "[", + "[": "]", + "{": "}", + "}": "{", + "<": ">", + ">": "<" + }; + this.$findOpeningBracket = function (bracket, position, typeRe) { + var openBracket = this.$brackets[bracket]; + var depth = 1; + var iterator = new TokenIterator(this, position.row, position.column); + var token = iterator.getCurrentToken(); + if (!token) + token = iterator.stepForward(); + if (!token) + return; + if (!typeRe) { + typeRe = new RegExp("(\\.?" + + token.type.replace(".", "\\.").replace("rparen", ".paren") + .replace(/\b(?:end)\b/, "(?:start|begin|end)") + .replace(/-close\b/, "-(close|open)") + + ")+"); + } + var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; + var value = token.value; + while (true) { + while (valueIndex >= 0) { + var chr = value.charAt(valueIndex); + if (chr == openBracket) { + depth -= 1; + if (depth == 0) { + return { row: iterator.getCurrentTokenRow(), + column: valueIndex + iterator.getCurrentTokenColumn() }; + } + } + else if (chr == bracket) { + depth += 1; + } + valueIndex -= 1; + } + do { + token = iterator.stepBackward(); + } while (token && !typeRe.test(token.type)); + if (token == null) + break; + value = token.value; + valueIndex = value.length - 1; + } + return null; + }; + this.$findClosingBracket = function (bracket, position, typeRe) { + var closingBracket = this.$brackets[bracket]; + var depth = 1; + var iterator = new TokenIterator(this, position.row, position.column); + var token = iterator.getCurrentToken(); + if (!token) + token = iterator.stepForward(); + if (!token) + return; + if (!typeRe) { + typeRe = new RegExp("(\\.?" + + token.type.replace(".", "\\.").replace("lparen", ".paren") + .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)") + .replace(/-open\b/, "-(close|open)") + + ")+"); + } + var valueIndex = position.column - iterator.getCurrentTokenColumn(); + while (true) { + var value = token.value; + var valueLength = value.length; + while (valueIndex < valueLength) { + var chr = value.charAt(valueIndex); + if (chr == closingBracket) { + depth -= 1; + if (depth == 0) { + return { row: iterator.getCurrentTokenRow(), + column: valueIndex + iterator.getCurrentTokenColumn() }; + } + } + else if (chr == bracket) { + depth += 1; + } + valueIndex += 1; + } + do { + token = iterator.stepForward(); + } while (token && !typeRe.test(token.type)); + if (token == null) + break; + valueIndex = 0; + } + return null; + }; + this.getMatchingTags = function (pos) { + var iterator = new TokenIterator(this, pos.row, pos.column); + var token = this.$findTagName(iterator); + if (!token) + return; + var prevToken = iterator.stepBackward(); + if (prevToken.value === '<') { + return this.$findClosingTag(iterator, token); + } + else { + return this.$findOpeningTag(iterator, token); + } + }; + this.$findTagName = function (iterator) { + var token = iterator.getCurrentToken(); + var found = false; + var backward = false; + if (token && token.type.indexOf('tag-name') === -1) { + do { + if (backward) + token = iterator.stepBackward(); + else + token = iterator.stepForward(); + if (token) { + if (token.value === "/>") { + backward = true; + } + else if (token.type.indexOf('tag-name') !== -1) { + found = true; + } + } + } while (token && !found); + } + return token; + }; + this.$findClosingTag = function (iterator, token) { + var prevToken; + var currentTag = token.value; + var tag = token.value; + var depth = 0; + var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); + token = iterator.stepForward(); + var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length); + var foundOpenTagEnd = false; + do { + prevToken = token; + if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) { + var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>` + foundOpenTagEnd = true; + } + token = iterator.stepForward(); + if (token) { + if (token.value === '>' && !foundOpenTagEnd) { + var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>` + foundOpenTagEnd = true; + } + if (token.type.indexOf('tag-name') !== -1) { + currentTag = token.value; + if (tag === currentTag) { + if (prevToken.value === '<') { + depth++; + } + else if (prevToken.value === '') { + var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > + } + else { + return; + } + } + } + } + } + else if (tag === currentTag && token.value === '/>') { // self-closing tag + depth--; + if (depth < 0) { //found self-closing tag end + var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2); + var closeTagName = closeTagStart; + var closeTagEnd = closeTagName; + var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1); + } + } + } + } while (token && depth >= 0); + if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) { + return { + openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column), + closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column), + openTagName: openTagName, + closeTagName: closeTagName + }; + } + }; + this.$findOpeningTag = function (iterator, token) { + var prevToken = iterator.getCurrentToken(); + var tag = token.value; + var depth = 0; + var startRow = iterator.getCurrentTokenRow(); + var startColumn = iterator.getCurrentTokenColumn(); + var endColumn = startColumn + 2; + var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for ") + return; + var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > + iterator.stepBackward(); + iterator.stepBackward(); + do { + token = prevToken; + startRow = iterator.getCurrentTokenRow(); + startColumn = iterator.getCurrentTokenColumn(); + endColumn = startColumn + token.value.length; + prevToken = iterator.stepBackward(); + if (token) { + if (token.type.indexOf('tag-name') !== -1) { + if (tag === token.value) { + if (prevToken.value === '<') { + depth++; + if (depth > 0) { //found opening tag + var openTagName = new Range(startRow, startColumn, startRow, endColumn); + var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for < + do { + token = iterator.stepForward(); + } while (token && token.value !== '>'); + var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for > + } + } + else if (prevToken.value === '') { // self-closing tag + var stepCount = 0; + var tmpToken = prevToken; + while (tmpToken) { + if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) { + depth--; + break; + } + else if (tmpToken.value === '<') { + break; + } + tmpToken = iterator.stepBackward(); + stepCount++; + } + for (var i = 0; i < stepCount; i++) { + iterator.stepForward(); + } + } + } + } while (prevToken && depth <= 0); + if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) { + return { + openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column), + closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column), + openTagName: openTagName, + closeTagName: closeTagName + }; + } + }; } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/tabbar.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB,EAAE,6BAA6B;AACnD;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,OAAO;EACP,2BAA2B;AAC7B;;AAEA;EACE,MAAM;EACN,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;EACtB,mBAAmB;AACrB","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] {\n flex-direction: row;\n align-items: flex-end;\n}\n\n.lm-TabBar[data-orientation='vertical'] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n.lm-TabBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex: 1 1 auto;\n list-style-type: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\n flex-direction: row;\n}\n\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\n flex-direction: column;\n}\n\n.lm-TabBar-tab {\n display: flex;\n flex-direction: row;\n box-sizing: border-box;\n overflow: hidden;\n touch-action: none; /* Disable native Drag/Drop */\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabCloseIcon {\n flex: 0 0 auto;\n}\n\n.lm-TabBar-tabLabel {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n}\n\n.lm-TabBar-tab.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar-addButton.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\n position: relative;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\n left: 0;\n transition: left 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\n top: 0;\n transition: top 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\n transition: none;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n background: inherit;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css": -/*!***************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/tabpanel.css ***! - \***************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ +exports.BracketMatch = BracketMatch; -.lm-TabPanel-tabBar { - z-index: 1; -} +}); -.lm-TabPanel-stackedPanel { - z-index: 0; +ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/bidihandler","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/line_widgets","ace/document","ace/background_tokenizer","ace/search_highlight","ace/undomanager","ace/edit_session/folding","ace/edit_session/bracket_match"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var lang = require("./lib/lang"); +var BidiHandler = require("./bidihandler").BidiHandler; +var config = require("./config"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var Selection = require("./selection").Selection; +var TextMode = require("./mode/text").Mode; +var Range = require("./range").Range; +var LineWidgets = require("./line_widgets").LineWidgets; +var Document = require("./document").Document; +var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer; +var SearchHighlight = require("./search_highlight").SearchHighlight; +var UndoManager = require("./undomanager").UndoManager; +var EditSession = /** @class */ (function () { + function EditSession(text, mode) { this.doc; + this.$breakpoints = []; + this.$decorations = []; + this.$frontMarkers = {}; + this.$backMarkers = {}; + this.$markerId = 1; + this.$undoSelect = true; + this.$editor = null; + this.prevOp = {}; + this.$foldData = []; + this.id = "session" + (++EditSession.$uid); + this.$foldData.toString = function () { + return this.join("\n"); + }; + this.$gutterCustomWidgets = {}; + this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this); + var _self = this; + this.bgTokenizer.on("update", function (e) { + _self._signal("tokenizerUpdate", e); + }); + this.on("changeFold", this.onChangeFold.bind(this)); + this.$onChange = this.onChange.bind(this); + if (typeof text != "object" || !text.getLine) + text = new Document(/**@type{string}*/ (text)); + this.setDocument(text); + this.selection = new Selection(this); + this.$onSelectionChange = this.onSelectionChange.bind(this); + this.selection.on("changeSelection", this.$onSelectionChange); + this.selection.on("changeCursor", this.$onSelectionChange); + this.$bidiHandler = new BidiHandler(this); + config.resetOptions(this); + this.setMode(mode); + config._signal("session", this); + this.destroyed = false; + this.$initOperationListeners(); + } + EditSession.prototype.$initOperationListeners = function () { + var _this = this; + this.curOp = null; + this.on("change", function () { + if (!_this.curOp) { + _this.startOperation(); + _this.curOp.selectionBefore = _this.$lastSel; + } + _this.curOp.docChanged = true; + }, true); + this.on("changeSelection", function () { + if (!_this.curOp) { + _this.startOperation(); + _this.curOp.selectionBefore = _this.$lastSel; + } + _this.curOp.selectionChanged = true; + }, true); + this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true)); + }; + EditSession.prototype.startOperation = function (commandEvent) { + if (this.curOp) { + if (!commandEvent || this.curOp.command) { + return; + } + this.prevOp = this.curOp; + } + if (!commandEvent) { + commandEvent = {}; + } + this.$operationResetTimer.schedule(); + this.curOp = { + command: commandEvent.command || {}, + args: commandEvent.args + }; + this.curOp.selectionBefore = this.selection.toJSON(); + this._signal("startOperation", commandEvent); + }; + EditSession.prototype.endOperation = function (e) { + if (this.curOp) { + if (e && e.returnValue === false) { + this.curOp = null; + this._signal("endOperation", e); + return; + } + if (e == true && this.curOp.command && this.curOp.command.name == "mouse") { + return; + } + var currentSelection = this.selection.toJSON(); + this.curOp.selectionAfter = currentSelection; + this.$lastSel = this.selection.toJSON(); + this.getUndoManager().addSelection(currentSelection); + this._signal("beforeEndOperation"); + this.prevOp = this.curOp; + this.curOp = null; + this._signal("endOperation", e); + } + }; + EditSession.prototype.setDocument = function (doc) { + if (this.doc) + this.doc.off("change", this.$onChange); + this.doc = doc; + doc.on("change", this.$onChange, true); + this.bgTokenizer.setDocument(this.getDocument()); + this.resetCaches(); + }; + EditSession.prototype.getDocument = function () { + return this.doc; + }; + Object.defineProperty(EditSession.prototype, "widgetManager", { + get: function () { + var widgetManager = new LineWidgets(this); + this.widgetManager = widgetManager; + if (this.$editor) + widgetManager.attach(this.$editor); + return widgetManager; + }, + set: function (value) { + Object.defineProperty(this, "widgetManager", { + writable: true, + enumerable: true, + configurable: true, + value: value, + }); + }, + enumerable: false, + configurable: true + }); + EditSession.prototype.$resetRowCache = function (docRow) { + if (!docRow) { + this.$docRowCache = []; + this.$screenRowCache = []; + return; + } + var l = this.$docRowCache.length; + var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1; + if (l > i) { + this.$docRowCache.splice(i, l); + this.$screenRowCache.splice(i, l); + } + }; + EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) { + var low = 0; + var hi = cacheArray.length - 1; + while (low <= hi) { + var mid = (low + hi) >> 1; + var c = cacheArray[mid]; + if (val > c) + low = mid + 1; + else if (val < c) + hi = mid - 1; + else + return mid; + } + return low - 1; + }; + EditSession.prototype.resetCaches = function () { + this.$modified = true; + this.$wrapData = []; + this.$rowLengthCache = []; + this.$resetRowCache(0); + if (!this.destroyed) + this.bgTokenizer.start(0); + }; + EditSession.prototype.onChangeFold = function (e) { + var fold = e.data; + this.$resetRowCache(fold.start.row); + }; + EditSession.prototype.onChange = function (delta) { + this.$modified = true; + this.$bidiHandler.onChange(delta); + this.$resetRowCache(delta.start.row); + var removedFolds = this.$updateInternalDataOnChange(delta); + if (!this.$fromUndo && this.$undoManager) { + if (removedFolds && removedFolds.length) { + this.$undoManager.add({ + action: "removeFolds", + folds: removedFolds + }, this.mergeUndoDeltas); + this.mergeUndoDeltas = true; + } + this.$undoManager.add(delta, this.mergeUndoDeltas); + this.mergeUndoDeltas = true; + this.$informUndoManager.schedule(); + } + this.bgTokenizer.$updateOnChange(delta); + this._signal("change", delta); + }; + EditSession.prototype.onSelectionChange = function () { + this._signal("changeSelection"); + }; + EditSession.prototype.setValue = function (text) { + this.doc.setValue(text); + this.selection.moveTo(0, 0); + this.$resetRowCache(0); + this.setUndoManager(this.$undoManager); + this.getUndoManager().reset(); + }; + EditSession.fromJSON = function (session) { + if (typeof session == "string") + session = JSON.parse(session); + var undoManager = new UndoManager(); + undoManager.$undoStack = session.history.undo; + undoManager.$redoStack = session.history.redo; + undoManager.mark = session.history.mark; + undoManager.$rev = session.history.rev; + var editSession = new EditSession(session.value); + session.folds.forEach(function (fold) { + editSession.addFold("...", Range.fromPoints(fold.start, fold.end)); + }); + editSession.setAnnotations(session.annotations); + editSession.setBreakpoints(session.breakpoints); + editSession.setMode(session.mode); + editSession.setScrollLeft(session.scrollLeft); + editSession.setScrollTop(session.scrollTop); + editSession.setUndoManager(undoManager); + editSession.selection.fromJSON(session.selection); + return editSession; + }; + EditSession.prototype.toJSON = function () { + return { + annotations: this.$annotations, + breakpoints: this.$breakpoints, + folds: this.getAllFolds().map(function (fold) { + return fold.range; + }), + history: this.getUndoManager(), + mode: this.$mode.$id, + scrollLeft: this.$scrollLeft, + scrollTop: this.$scrollTop, + selection: this.selection.toJSON(), + value: this.doc.getValue() + }; + }; + EditSession.prototype.toString = function () { + return this.doc.getValue(); + }; + EditSession.prototype.getSelection = function () { + return this.selection; + }; + EditSession.prototype.getState = function (row) { + return this.bgTokenizer.getState(row); + }; + EditSession.prototype.getTokens = function (row) { + return this.bgTokenizer.getTokens(row); + }; + EditSession.prototype.getTokenAt = function (row, column) { + var tokens = this.bgTokenizer.getTokens(row); + var token, c = 0; + if (column == null) { + var i = tokens.length - 1; + c = this.getLine(row).length; + } + else { + for (var i = 0; i < tokens.length; i++) { + c += tokens[i].value.length; + if (c >= column) + break; + } + } + token = tokens[i]; + if (!token) + return null; + token.index = i; + token.start = c - token.value.length; + return token; + }; + EditSession.prototype.setUndoManager = function (undoManager) { + this.$undoManager = undoManager; + if (this.$informUndoManager) + this.$informUndoManager.cancel(); + if (undoManager) { + var self = this; + undoManager.addSession(this); + this.$syncInformUndoManager = function () { + self.$informUndoManager.cancel(); + self.mergeUndoDeltas = false; + }; + this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); + } + else { + this.$syncInformUndoManager = function () { }; + } + }; + EditSession.prototype.markUndoGroup = function () { + if (this.$syncInformUndoManager) + this.$syncInformUndoManager(); + }; + EditSession.prototype.getUndoManager = function () { + return this.$undoManager || this.$defaultUndoManager; + }; + EditSession.prototype.getTabString = function () { + if (this.getUseSoftTabs()) { + return lang.stringRepeat(" ", this.getTabSize()); + } + else { + return "\t"; + } + }; + EditSession.prototype.setUseSoftTabs = function (val) { + this.setOption("useSoftTabs", val); + }; + EditSession.prototype.getUseSoftTabs = function () { + return this.$useSoftTabs && !this.$mode.$indentWithTabs; + }; + EditSession.prototype.setTabSize = function (tabSize) { + this.setOption("tabSize", tabSize); + }; + EditSession.prototype.getTabSize = function () { + return this.$tabSize; + }; + EditSession.prototype.isTabStop = function (position) { + return this.$useSoftTabs && (position.column % this.$tabSize === 0); + }; + EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) { + this.setOption("navigateWithinSoftTabs", navigateWithinSoftTabs); + }; + EditSession.prototype.getNavigateWithinSoftTabs = function () { + return this.$navigateWithinSoftTabs; + }; + EditSession.prototype.setOverwrite = function (overwrite) { + this.setOption("overwrite", overwrite); + }; + EditSession.prototype.getOverwrite = function () { + return this.$overwrite; + }; + EditSession.prototype.toggleOverwrite = function () { + this.setOverwrite(!this.$overwrite); + }; + EditSession.prototype.addGutterDecoration = function (row, className) { + if (!this.$decorations[row]) + this.$decorations[row] = ""; + this.$decorations[row] += " " + className; + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.removeGutterCustomWidget = function (row) { + if (this.$editor) { + this.$editor.renderer.$gutterLayer.$removeCustomWidget(row); + } + }; + EditSession.prototype.addGutterCustomWidget = function (row, attributes) { + if (this.$editor) { + this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes); + } + }; + EditSession.prototype.removeGutterDecoration = function (row, className) { + this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.getBreakpoints = function () { + return this.$breakpoints; + }; + EditSession.prototype.setBreakpoints = function (rows) { + this.$breakpoints = []; + for (var i = 0; i < rows.length; i++) { + this.$breakpoints[rows[i]] = "ace_breakpoint"; + } + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.clearBreakpoints = function () { + this.$breakpoints = []; + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.setBreakpoint = function (row, className) { + if (className === undefined) + className = "ace_breakpoint"; + if (className) + this.$breakpoints[row] = className; + else + delete this.$breakpoints[row]; + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.clearBreakpoint = function (row) { + delete this.$breakpoints[row]; + this._signal("changeBreakpoint", {}); + }; + EditSession.prototype.addMarker = function (range, clazz, type, inFront) { + var id = this.$markerId++; + var marker = { + range: range, + type: type || "line", + renderer: typeof type == "function" ? type : null, + clazz: clazz, + inFront: !!inFront, + id: id + }; + if (inFront) { + this.$frontMarkers[id] = marker; + this._signal("changeFrontMarker"); + } + else { + this.$backMarkers[id] = marker; + this._signal("changeBackMarker"); + } + return id; + }; + EditSession.prototype.addDynamicMarker = function (marker, inFront) { + if (!marker.update) + return; + var id = this.$markerId++; + marker.id = id; + marker.inFront = !!inFront; + if (inFront) { + this.$frontMarkers[id] = marker; + this._signal("changeFrontMarker"); + } + else { + this.$backMarkers[id] = marker; + this._signal("changeBackMarker"); + } + return marker; + }; + EditSession.prototype.removeMarker = function (markerId) { + var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId]; + if (!marker) + return; + var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers; + delete (markers[markerId]); + this._signal(marker.inFront ? "changeFrontMarker" : "changeBackMarker"); + }; + EditSession.prototype.getMarkers = function (inFront) { + return inFront ? this.$frontMarkers : this.$backMarkers; + }; + EditSession.prototype.highlight = function (re) { + if (!this.$searchHighlight) { + var highlight = new SearchHighlight(null, "ace_selected-word", "text"); + this.$searchHighlight = this.addDynamicMarker(highlight); + } + this.$searchHighlight.setRegexp(re); + }; + EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) { + if (typeof endRow != "number") { + clazz = endRow; + endRow = startRow; + } + if (!clazz) + clazz = "ace_step"; + var range = new Range(startRow, 0, endRow, Infinity); + range.id = this.addMarker(range, clazz, "fullLine", inFront); + return range; + }; + EditSession.prototype.setAnnotations = function (annotations) { + this.$annotations = annotations; + this._signal("changeAnnotation", {}); + }; + EditSession.prototype.getAnnotations = function () { + return this.$annotations || []; + }; + EditSession.prototype.clearAnnotations = function () { + this.setAnnotations([]); + }; + EditSession.prototype.$detectNewLine = function (text) { + var match = text.match(/^.*?(\r?\n)/m); + if (match) { + this.$autoNewLine = match[1]; + } + else { + this.$autoNewLine = "\n"; + } + }; + EditSession.prototype.getWordRange = function (row, column) { + var line = this.getLine(row); + var inToken = false; + if (column > 0) + inToken = !!line.charAt(column - 1).match(this.tokenRe); + if (!inToken) + inToken = !!line.charAt(column).match(this.tokenRe); + if (inToken) + var re = this.tokenRe; + else if (/^\s+$/.test(line.slice(column - 1, column + 1))) + var re = /\s/; + else + var re = this.nonTokenRe; + var start = column; + if (start > 0) { + do { + start--; + } while (start >= 0 && line.charAt(start).match(re)); + start++; + } + var end = column; + while (end < line.length && line.charAt(end).match(re)) { + end++; + } + return new Range(row, start, row, end); + }; + EditSession.prototype.getAWordRange = function (row, column) { + var wordRange = this.getWordRange(row, column); + var line = this.getLine(wordRange.end.row); + while (line.charAt(wordRange.end.column).match(/[ \t]/)) { + wordRange.end.column += 1; + } + return wordRange; + }; + EditSession.prototype.setNewLineMode = function (newLineMode) { + this.doc.setNewLineMode(newLineMode); + }; + EditSession.prototype.getNewLineMode = function () { + return this.doc.getNewLineMode(); + }; + EditSession.prototype.setUseWorker = function (useWorker) { this.setOption("useWorker", useWorker); }; + EditSession.prototype.getUseWorker = function () { return this.$useWorker; }; + EditSession.prototype.onReloadTokenizer = function (e) { + var rows = e.data; + this.bgTokenizer.start(rows.first); + this._signal("tokenizerUpdate", e); + }; + EditSession.prototype.setMode = function (mode, cb) { + if (mode && typeof mode === "object") { + if (mode.getTokenizer) + return this.$onChangeMode(mode); + var options = mode; + var path = options.path; + } + else { + path = /**@type{string}*/ (mode) || "ace/mode/text"; + } + if (!this.$modes["ace/mode/text"]) + this.$modes["ace/mode/text"] = new TextMode(); + if (this.$modes[path] && !options) { + this.$onChangeMode(this.$modes[path]); + cb && cb(); + return; + } + this.$modeId = path; + config.loadModule(["mode", path], function (m) { + if (this.destroyed) { + return; + } + if (this.$modeId !== path) + return cb && cb(); + if (this.$modes[path] && !options) { + this.$onChangeMode(this.$modes[path]); + } + else if (m && m.Mode) { + m = new m.Mode(options); + if (!options) { + this.$modes[path] = m; + m.$id = path; + } + this.$onChangeMode(m); + } + cb && cb(); + }.bind(this)); + if (!this.$mode) + this.$onChangeMode(this.$modes["ace/mode/text"], true); + }; + EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) { + if (!$isPlaceholder) + this.$modeId = mode.$id; + if (this.$mode === mode) + return; + var oldMode = this.$mode; + this.$mode = mode; + this.$stopWorker(); + if (this.$useWorker) + this.$startWorker(); + var tokenizer = mode.getTokenizer(); + if (tokenizer.on !== undefined) { + var onReloadTokenizer = this.onReloadTokenizer.bind(this); + tokenizer.on("update", onReloadTokenizer); + } + this.bgTokenizer.setTokenizer(tokenizer); + this.bgTokenizer.setDocument(this.getDocument()); + this.tokenRe = mode.tokenRe; + this.nonTokenRe = mode.nonTokenRe; + if (!$isPlaceholder) { + if (mode.attachToSession) + mode.attachToSession(this); + this.$options.wrapMethod.set.call(this, this.$wrapMethod); + this.$setFolding(mode.foldingRules); + this.bgTokenizer.start(0); + this._emit("changeMode", { oldMode: oldMode, mode: mode }); + } + }; + EditSession.prototype.$stopWorker = function () { + if (this.$worker) { + this.$worker.terminate(); + this.$worker = null; + } + }; + EditSession.prototype.$startWorker = function () { + try { + this.$worker = this.$mode.createWorker(this); + } + catch (e) { + config.warn("Could not load worker", e); + this.$worker = null; + } + }; + EditSession.prototype.getMode = function () { + return this.$mode; + }; + EditSession.prototype.setScrollTop = function (scrollTop) { + if (this.$scrollTop === scrollTop || isNaN(scrollTop)) + return; + this.$scrollTop = scrollTop; + this._signal("changeScrollTop", scrollTop); + }; + EditSession.prototype.getScrollTop = function () { + return this.$scrollTop; + }; + EditSession.prototype.setScrollLeft = function (scrollLeft) { + if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) + return; + this.$scrollLeft = scrollLeft; + this._signal("changeScrollLeft", scrollLeft); + }; + EditSession.prototype.getScrollLeft = function () { + return this.$scrollLeft; + }; + EditSession.prototype.getScreenWidth = function () { + this.$computeWidth(); + if (this.lineWidgets) + return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth); + return this.screenWidth; + }; + EditSession.prototype.getLineWidgetMaxWidth = function () { + if (this.lineWidgetsWidth != null) + return this.lineWidgetsWidth; + var width = 0; + this.lineWidgets.forEach(function (w) { + if (w && w.screenWidth > width) + width = w.screenWidth; + }); + return this.lineWidgetWidth = width; + }; + EditSession.prototype.$computeWidth = function (force) { + if (this.$modified || force) { + this.$modified = false; + if (this.$useWrapMode) + return this.screenWidth = this.$wrapLimit; + var lines = this.doc.getAllLines(); + var cache = this.$rowLengthCache; + var longestScreenLine = 0; + var foldIndex = 0; + var foldLine = this.$foldData[foldIndex]; + var foldStart = foldLine ? foldLine.start.row : Infinity; + var len = lines.length; + for (var i = 0; i < len; i++) { + if (i > foldStart) { + i = foldLine.end.row + 1; + if (i >= len) + break; + foldLine = this.$foldData[foldIndex++]; + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (cache[i] == null) + cache[i] = this.$getStringScreenWidth(lines[i])[0]; + if (cache[i] > longestScreenLine) + longestScreenLine = cache[i]; + } + this.screenWidth = longestScreenLine; + } + }; + EditSession.prototype.getLine = function (row) { + return this.doc.getLine(row); + }; + EditSession.prototype.getLines = function (firstRow, lastRow) { + return this.doc.getLines(firstRow, lastRow); + }; + EditSession.prototype.getLength = function () { + return this.doc.getLength(); + }; + EditSession.prototype.getTextRange = function (range) { + return this.doc.getTextRange(range || this.selection.getRange()); + }; + EditSession.prototype.insert = function (position, text) { + return this.doc.insert(position, text); + }; + EditSession.prototype.remove = function (range) { + return this.doc.remove(range); + }; + EditSession.prototype.removeFullLines = function (firstRow, lastRow) { + return this.doc.removeFullLines(firstRow, lastRow); + }; + EditSession.prototype.undoChanges = function (deltas, dontSelect) { + if (!deltas.length) + return; + this.$fromUndo = true; + for (var i = deltas.length - 1; i != -1; i--) { + var delta = deltas[i]; + if (delta.action == "insert" || delta.action == "remove") { + this.doc.revertDelta(delta); + } + else if (delta.folds) { + this.addFolds(delta.folds); + } + } + if (!dontSelect && this.$undoSelect) { + if (deltas.selectionBefore) + this.selection.fromJSON(deltas.selectionBefore); + else + this.selection.setRange(this.$getUndoSelection(deltas, true)); + } + this.$fromUndo = false; + }; + EditSession.prototype.redoChanges = function (deltas, dontSelect) { + if (!deltas.length) + return; + this.$fromUndo = true; + for (var i = 0; i < deltas.length; i++) { + var delta = deltas[i]; + if (delta.action == "insert" || delta.action == "remove") { + this.doc.$safeApplyDelta(delta); + } + } + if (!dontSelect && this.$undoSelect) { + if (deltas.selectionAfter) + this.selection.fromJSON(deltas.selectionAfter); + else + this.selection.setRange(this.$getUndoSelection(deltas, false)); + } + this.$fromUndo = false; + }; + EditSession.prototype.setUndoSelect = function (enable) { + this.$undoSelect = enable; + }; + EditSession.prototype.$getUndoSelection = function (deltas, isUndo) { + function isInsert(delta) { + return isUndo ? delta.action !== "insert" : delta.action === "insert"; + } + var range, point; + for (var i = 0; i < deltas.length; i++) { + var delta = deltas[i]; + if (!delta.start) + continue; // skip folds + if (!range) { + if (isInsert(delta)) { + range = Range.fromPoints(delta.start, delta.end); + } + else { + range = Range.fromPoints(delta.start, delta.start); + } + continue; + } + if (isInsert(delta)) { + point = delta.start; + if (range.compare(point.row, point.column) == -1) { + range.setStart(point); + } + point = delta.end; + if (range.compare(point.row, point.column) == 1) { + range.setEnd(point); + } + } + else { + point = delta.start; + if (range.compare(point.row, point.column) == -1) { + range = Range.fromPoints(delta.start, delta.start); + } + } + } + return range; + }; + EditSession.prototype.replace = function (range, text) { + return this.doc.replace(range, text); + }; + EditSession.prototype.moveText = function (fromRange, toPosition, copy) { + var text = this.getTextRange(fromRange); + var folds = this.getFoldsInRange(fromRange); + var toRange = Range.fromPoints(toPosition, toPosition); + if (!copy) { + this.remove(fromRange); + var rowDiff = fromRange.start.row - fromRange.end.row; + var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; + if (collDiff) { + if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) + toRange.start.column += collDiff; + if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) + toRange.end.column += collDiff; + } + if (rowDiff && toRange.start.row >= fromRange.end.row) { + toRange.start.row += rowDiff; + toRange.end.row += rowDiff; + } + } + toRange.end = this.insert(toRange.start, text); + if (folds.length) { + var oldStart = fromRange.start; + var newStart = toRange.start; + var rowDiff = newStart.row - oldStart.row; + var collDiff = newStart.column - oldStart.column; + this.addFolds(folds.map(function (x) { + x = x.clone(); + if (x.start.row == oldStart.row) + x.start.column += collDiff; + if (x.end.row == oldStart.row) + x.end.column += collDiff; + x.start.row += rowDiff; + x.end.row += rowDiff; + return x; + })); + } + return toRange; + }; + EditSession.prototype.indentRows = function (startRow, endRow, indentString) { + indentString = indentString.replace(/\t/g, this.getTabString()); + for (var row = startRow; row <= endRow; row++) + this.doc.insertInLine({ row: row, column: 0 }, indentString); + }; + EditSession.prototype.outdentRows = function (range) { + var rowRange = range.collapseRows(); + var deleteRange = new Range(0, 0, 0, 0); + var size = this.getTabSize(); + for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { + var line = this.getLine(i); + deleteRange.start.row = i; + deleteRange.end.row = i; + for (var j = 0; j < size; ++j) + if (line.charAt(j) != ' ') + break; + if (j < size && line.charAt(j) == '\t') { + deleteRange.start.column = j; + deleteRange.end.column = j + 1; + } + else { + deleteRange.start.column = 0; + deleteRange.end.column = j; + } + this.remove(deleteRange); + } + }; + EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) { + firstRow = this.getRowFoldStart(firstRow); + lastRow = this.getRowFoldEnd(lastRow); + if (dir < 0) { + var row = this.getRowFoldStart(firstRow + dir); + if (row < 0) + return 0; + var diff = row - firstRow; + } + else if (dir > 0) { + var row = this.getRowFoldEnd(lastRow + dir); + if (row > this.doc.getLength() - 1) + return 0; + var diff = row - lastRow; + } + else { + firstRow = this.$clipRowToDocument(firstRow); + lastRow = this.$clipRowToDocument(lastRow); + var diff = lastRow - firstRow + 1; + } + var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); + var folds = this.getFoldsInRange(range).map(function (x) { + x = x.clone(); + x.start.row += diff; + x.end.row += diff; + return x; + }); + var lines = dir == 0 + ? this.doc.getLines(firstRow, lastRow) + : this.doc.removeFullLines(firstRow, lastRow); + this.doc.insertFullLines(firstRow + diff, lines); + folds.length && this.addFolds(folds); + return diff; + }; + EditSession.prototype.moveLinesUp = function (firstRow, lastRow) { + return this.$moveLines(firstRow, lastRow, -1); + }; + EditSession.prototype.moveLinesDown = function (firstRow, lastRow) { + return this.$moveLines(firstRow, lastRow, 1); + }; + EditSession.prototype.duplicateLines = function (firstRow, lastRow) { + return this.$moveLines(firstRow, lastRow, 0); + }; + EditSession.prototype.$clipRowToDocument = function (row) { + return Math.max(0, Math.min(row, this.doc.getLength() - 1)); + }; + EditSession.prototype.$clipColumnToRow = function (row, column) { + if (column < 0) + return 0; + return Math.min(this.doc.getLine(row).length, column); + }; + EditSession.prototype.$clipPositionToDocument = function (row, column) { + column = Math.max(0, column); + if (row < 0) { + row = 0; + column = 0; + } + else { + var len = this.doc.getLength(); + if (row >= len) { + row = len - 1; + column = this.doc.getLine(len - 1).length; + } + else { + column = Math.min(this.doc.getLine(row).length, column); + } + } + return { + row: row, + column: column + }; + }; + EditSession.prototype.$clipRangeToDocument = function (range) { + if (range.start.row < 0) { + range.start.row = 0; + range.start.column = 0; + } + else { + range.start.column = this.$clipColumnToRow(range.start.row, range.start.column); + } + var len = this.doc.getLength() - 1; + if (range.end.row > len) { + range.end.row = len; + range.end.column = this.doc.getLine(len).length; + } + else { + range.end.column = this.$clipColumnToRow(range.end.row, range.end.column); + } + return range; + }; + EditSession.prototype.setUseWrapMode = function (useWrapMode) { + if (useWrapMode != this.$useWrapMode) { + this.$useWrapMode = useWrapMode; + this.$modified = true; + this.$resetRowCache(0); + if (useWrapMode) { + var len = this.getLength(); + this.$wrapData = Array(len); + this.$updateWrapData(0, len - 1); + } + this._signal("changeWrapMode"); + } + }; + EditSession.prototype.getUseWrapMode = function () { + return this.$useWrapMode; + }; + EditSession.prototype.setWrapLimitRange = function (min, max) { + if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { + this.$wrapLimitRange = { min: min, max: max }; + this.$modified = true; + this.$bidiHandler.markAsDirty(); + if (this.$useWrapMode) + this._signal("changeWrapMode"); + } + }; + EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) { + var limits = this.$wrapLimitRange; + if (limits.max < 0) + limits = { min: $printMargin, max: $printMargin }; + var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); + if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { + this.$wrapLimit = wrapLimit; + this.$modified = true; + if (this.$useWrapMode) { + this.$updateWrapData(0, this.getLength() - 1); + this.$resetRowCache(0); + this._signal("changeWrapLimit"); + } + return true; + } + return false; + }; + EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) { + if (min) + wrapLimit = Math.max(min, wrapLimit); + if (max) + wrapLimit = Math.min(max, wrapLimit); + return wrapLimit; + }; + EditSession.prototype.getWrapLimit = function () { + return this.$wrapLimit; + }; + EditSession.prototype.setWrapLimit = function (limit) { + this.setWrapLimitRange(limit, limit); + }; + EditSession.prototype.getWrapLimitRange = function () { + return { + min: this.$wrapLimitRange.min, + max: this.$wrapLimitRange.max + }; + }; + EditSession.prototype.$updateInternalDataOnChange = function (delta) { + var useWrapMode = this.$useWrapMode; + var action = delta.action; + var start = delta.start; + var end = delta.end; + var firstRow = start.row; + var lastRow = end.row; + var len = lastRow - firstRow; + var removedFolds = null; + this.$updating = true; + if (len != 0) { + if (action === "remove") { + this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); + var foldLines = this.$foldData; + removedFolds = this.getFoldsInRange(delta); + this.removeFolds(removedFolds); + var foldLine = this.getFoldLine(end.row); + var idx = 0; + if (foldLine) { + foldLine.addRemoveChars(end.row, end.column, start.column - end.column); + foldLine.shiftRow(-len); + var foldLineBefore = this.getFoldLine(firstRow); + if (foldLineBefore && foldLineBefore !== foldLine) { + foldLineBefore.merge(foldLine); + foldLine = foldLineBefore; + } + idx = foldLines.indexOf(foldLine) + 1; + } + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= end.row) { + foldLine.shiftRow(-len); + } + } + lastRow = firstRow; + } + else { + var args = Array(len); + args.unshift(firstRow, 0); + var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache; + arr.splice.apply(arr, args); + var foldLines = this.$foldData; + var foldLine = this.getFoldLine(firstRow); + var idx = 0; + if (foldLine) { + var cmp = foldLine.range.compareInside(start.row, start.column); + if (cmp == 0) { + foldLine = foldLine.split(start.row, start.column); + if (foldLine) { + foldLine.shiftRow(len); + foldLine.addRemoveChars(lastRow, 0, end.column - start.column); + } + } + else + if (cmp == -1) { + foldLine.addRemoveChars(firstRow, 0, end.column - start.column); + foldLine.shiftRow(len); + } + idx = foldLines.indexOf(foldLine) + 1; + } + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= firstRow) { + foldLine.shiftRow(len); + } + } + } + } + else { + len = Math.abs(delta.start.column - delta.end.column); + if (action === "remove") { + removedFolds = this.getFoldsInRange(delta); + this.removeFolds(removedFolds); + len = -len; + } + var foldLine = this.getFoldLine(firstRow); + if (foldLine) { + foldLine.addRemoveChars(firstRow, start.column, len); + } + } + if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { + console.error("doc.getLength() and $wrapData.length have to be the same!"); + } + this.$updating = false; + if (useWrapMode) + this.$updateWrapData(firstRow, lastRow); + else + this.$updateRowLengthCache(firstRow, lastRow); + return removedFolds; + }; + EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) { + this.$rowLengthCache[firstRow] = null; + this.$rowLengthCache[lastRow] = null; + }; + EditSession.prototype.$updateWrapData = function (firstRow, lastRow) { + var lines = this.doc.getAllLines(); + var tabSize = this.getTabSize(); + var wrapData = this.$wrapData; + var wrapLimit = this.$wrapLimit; + var tokens; + var foldLine; + var row = firstRow; + lastRow = Math.min(lastRow, lines.length - 1); + while (row <= lastRow) { + foldLine = this.getFoldLine(row, foldLine); + if (!foldLine) { + tokens = this.$getDisplayTokens(lines[row]); + wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); + row++; + } + else { + tokens = []; + foldLine.walk(function (placeholder, row, column, lastColumn) { + var walkTokens; + if (placeholder != null) { + walkTokens = this.$getDisplayTokens(placeholder, tokens.length); + walkTokens[0] = PLACEHOLDER_START; + for (var i = 1; i < walkTokens.length; i++) { + walkTokens[i] = PLACEHOLDER_BODY; + } + } + else { + walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length); + } + tokens = tokens.concat(walkTokens); + }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1); + wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); + row = foldLine.end.row + 1; + } + } + }; + EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) { + if (tokens.length == 0) { + return []; + } + var splits = []; + var displayLength = tokens.length; + var lastSplit = 0, lastDocSplit = 0; + var isCode = this.$wrapAsCode; + var indentedSoftWrap = this.$indentedSoftWrap; + var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) + || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2); + function getWrapIndent() { + var indentation = 0; + if (maxIndent === 0) + return indentation; + if (indentedSoftWrap) { + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (token == SPACE) + indentation += 1; + else if (token == TAB) + indentation += tabSize; + else if (token == TAB_SPACE) + continue; + else + break; + } + } + if (isCode && indentedSoftWrap !== false) + indentation += tabSize; + return Math.min(indentation, maxIndent); + } + function addSplit(screenPos) { + var len = screenPos - lastSplit; + for (var i = lastSplit; i < screenPos; i++) { + var ch = tokens[i]; + if (ch === 12 || ch === 2) + len -= 1; + } + if (!splits.length) { + indent = getWrapIndent(); + splits.indent = indent; + } + lastDocSplit += len; + splits.push(lastDocSplit); + lastSplit = screenPos; + } + var indent = 0; + while (displayLength - lastSplit > wrapLimit - indent) { + var split = lastSplit + wrapLimit - indent; + if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { + addSplit(split); + continue; + } + if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { + for (split; split != lastSplit - 1; split--) { + if (tokens[split] == PLACEHOLDER_START) { + break; + } + } + if (split > lastSplit) { + addSplit(split); + continue; + } + split = lastSplit + wrapLimit; + for (split; split < tokens.length; split++) { + if (tokens[split] != PLACEHOLDER_BODY) { + break; + } + } + if (split == tokens.length) { + break; // Breaks the while-loop. + } + addSplit(split); + continue; + } + var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1); + while (split > minSplit && tokens[split] < PLACEHOLDER_START) { + split--; + } + if (isCode) { + while (split > minSplit && tokens[split] < PLACEHOLDER_START) { + split--; + } + while (split > minSplit && tokens[split] == PUNCTUATION) { + split--; + } + } + else { + while (split > minSplit && tokens[split] < SPACE) { + split--; + } + } + if (split > minSplit) { + addSplit(++split); + continue; + } + split = lastSplit + wrapLimit; + if (tokens[split] == CHAR_EXT) + split--; + addSplit(split - indent); + } + return splits; + }; + EditSession.prototype.$getDisplayTokens = function (str, offset) { + var arr = []; + var tabSize; + offset = offset || 0; + for (var i = 0; i < str.length; i++) { + var c = str.charCodeAt(i); + if (c == 9) { + tabSize = this.getScreenTabSize(arr.length + offset); + arr.push(TAB); + for (var n = 1; n < tabSize; n++) { + arr.push(TAB_SPACE); + } + } + else if (c == 32) { + arr.push(SPACE); + } + else if ((c > 39 && c < 48) || (c > 57 && c < 64)) { + arr.push(PUNCTUATION); + } + else if (c >= 0x1100 && isFullWidth(c)) { + arr.push(CHAR, CHAR_EXT); + } + else { + arr.push(CHAR); + } + } + return arr; + }; + EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) { + if (maxScreenColumn == 0) + return [0, 0]; + if (maxScreenColumn == null) + maxScreenColumn = Infinity; + screenColumn = screenColumn || 0; + var c, column; + for (column = 0; column < str.length; column++) { + c = str.charCodeAt(column); + if (c == 9) { + screenColumn += this.getScreenTabSize(screenColumn); + } + else if (c >= 0x1100 && isFullWidth(c)) { + screenColumn += 2; + } + else { + screenColumn += 1; + } + if (screenColumn > maxScreenColumn) { + break; + } + } + return [screenColumn, column]; + }; + EditSession.prototype.getRowLength = function (row) { + var h = 1; + if (this.lineWidgets) + h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; + if (!this.$useWrapMode || !this.$wrapData[row]) + return h; + else + return this.$wrapData[row].length + h; + }; + EditSession.prototype.getRowLineCount = function (row) { + if (!this.$useWrapMode || !this.$wrapData[row]) { + return 1; + } + else { + return this.$wrapData[row].length + 1; + } + }; + EditSession.prototype.getRowWrapIndent = function (screenRow) { + if (this.$useWrapMode) { + var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); + var splits = this.$wrapData[pos.row]; + return splits.length && splits[0] < pos.column ? splits.indent : 0; + } + else { + return 0; + } + }; + EditSession.prototype.getScreenLastRowColumn = function (screenRow) { + var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); + return this.documentToScreenColumn(pos.row, pos.column); + }; + EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.getScreenLastRowColumn(screenRow); + }; + EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); + }; + EditSession.prototype.getRowSplitData = function (row) { + if (!this.$useWrapMode) { + return undefined; + } + else { + return this.$wrapData[row]; + } + }; + EditSession.prototype.getScreenTabSize = function (screenColumn) { + return this.$tabSize - (screenColumn % this.$tabSize | 0); + }; + EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).row; + }; + EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).column; + }; + EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) { + if (screenRow < 0) + return { row: 0, column: 0 }; + var line; + var docRow = 0; + var docColumn = 0; + var column; + var row = 0; + var rowLength = 0; + var rowCache = this.$screenRowCache; + var i = this.$getRowCacheIndex(rowCache, screenRow); + var l = rowCache.length; + if (l && i >= 0) { + var row = rowCache[i]; + var docRow = this.$docRowCache[i]; + var doCache = screenRow > rowCache[l - 1]; + } + else { + var doCache = !l; + } + var maxRow = this.getLength() - 1; + var foldLine = this.getNextFoldLine(docRow); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (row <= screenRow) { + rowLength = this.getRowLength(docRow); + if (row + rowLength > screenRow || docRow >= maxRow) { + break; + } + else { + row += rowLength; + docRow++; + if (docRow > foldStart) { + docRow = foldLine.end.row + 1; + foldLine = this.getNextFoldLine(docRow, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + } + if (doCache) { + this.$docRowCache.push(docRow); + this.$screenRowCache.push(row); + } + } + if (foldLine && foldLine.start.row <= docRow) { + line = this.getFoldDisplayLine(foldLine); + docRow = foldLine.start.row; + } + else if (row + rowLength <= screenRow || docRow > maxRow) { + return { + row: maxRow, + column: this.getLine(maxRow).length + }; + } + else { + line = this.getLine(docRow); + foldLine = null; + } + var wrapIndent = 0, splitIndex = Math.floor(screenRow - row); + if (this.$useWrapMode) { + var splits = this.$wrapData[docRow]; + if (splits) { + column = splits[splitIndex]; + if (splitIndex > 0 && splits.length) { + wrapIndent = splits.indent; + docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; + line = line.substring(docColumn); + } + } + } + if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex)) + screenColumn = this.$bidiHandler.offsetToCol(offsetX); + docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1]; + if (this.$useWrapMode && docColumn >= column) + docColumn = column - 1; + if (foldLine) + return foldLine.idxToPosition(docColumn); + return { row: docRow, column: docColumn }; + }; + EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) { + if (typeof docColumn === "undefined") + var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column); + else + pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn); + docRow = pos.row; + docColumn = pos.column; + var screenRow = 0; + var foldStartRow = null; + var fold = null; + fold = this.getFoldAt(docRow, docColumn, 1); + if (fold) { + docRow = fold.start.row; + docColumn = fold.start.column; + } + var rowEnd, row = 0; + var rowCache = this.$docRowCache; + var i = this.$getRowCacheIndex(rowCache, docRow); + var l = rowCache.length; + if (l && i >= 0) { + var row = rowCache[i]; + var screenRow = this.$screenRowCache[i]; + var doCache = docRow > rowCache[l - 1]; + } + else { + var doCache = !l; + } + var foldLine = this.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (row < docRow) { + if (row >= foldStart) { + rowEnd = foldLine.end.row + 1; + if (rowEnd > docRow) + break; + foldLine = this.getNextFoldLine(rowEnd, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + else { + rowEnd = row + 1; + } + screenRow += this.getRowLength(row); + row = rowEnd; + if (doCache) { + this.$docRowCache.push(row); + this.$screenRowCache.push(screenRow); + } + } + var textLine = ""; + if (foldLine && row >= foldStart) { + textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); + foldStartRow = foldLine.start.row; + } + else { + textLine = this.getLine(docRow).substring(0, docColumn); + foldStartRow = docRow; + } + var wrapIndent = 0; + if (this.$useWrapMode) { + var wrapRow = this.$wrapData[foldStartRow]; + if (wrapRow) { + var screenRowOffset = 0; + while (textLine.length >= wrapRow[screenRowOffset]) { + screenRow++; + screenRowOffset++; + } + textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length); + wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0; + } + } + if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove) + screenRow += this.lineWidgets[row].rowsAbove; + return { + row: screenRow, + column: wrapIndent + this.$getStringScreenWidth(textLine)[0] + }; + }; + EditSession.prototype.documentToScreenColumn = function (row, docColumn) { + return this.documentToScreenPosition(row, docColumn).column; + }; + EditSession.prototype.documentToScreenRow = function (docRow, docColumn) { + return this.documentToScreenPosition(docRow, docColumn).row; + }; + EditSession.prototype.getScreenLength = function () { + var screenRows = 0; + var fold = null; + if (!this.$useWrapMode) { + screenRows = this.getLength(); + var foldData = this.$foldData; + for (var i = 0; i < foldData.length; i++) { + fold = foldData[i]; + screenRows -= fold.end.row - fold.start.row; + } + } + else { + var lastRow = this.$wrapData.length; + var row = 0, i = 0; + var fold = this.$foldData[i++]; + var foldStart = fold ? fold.start.row : Infinity; + while (row < lastRow) { + var splits = this.$wrapData[row]; + screenRows += splits ? splits.length + 1 : 1; + row++; + if (row > foldStart) { + row = fold.end.row + 1; + fold = this.$foldData[i++]; + foldStart = fold ? fold.start.row : Infinity; + } + } + } + if (this.lineWidgets) + screenRows += this.$getWidgetScreenLength(); + return screenRows; + }; + EditSession.prototype.$setFontMetrics = function (fm) { + if (!this.$enableVarChar) + return; + this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) { + if (maxScreenColumn === 0) + return [0, 0]; + if (!maxScreenColumn) + maxScreenColumn = Infinity; + screenColumn = screenColumn || 0; + var c, column; + for (column = 0; column < str.length; column++) { + c = str.charAt(column); + if (c === "\t") { + screenColumn += this.getScreenTabSize(screenColumn); + } + else { + screenColumn += fm.getCharacterWidth(c); + } + if (screenColumn > maxScreenColumn) { + break; + } + } + return [screenColumn, column]; + }; + }; + EditSession.prototype.getPrecedingCharacter = function () { + var pos = this.selection.getCursor(); + if (pos.column === 0) { + return pos.row === 0 ? "" : this.doc.getNewLineCharacter(); + } + var currentLine = this.getLine(pos.row); + return currentLine[pos.column - 1]; + }; + EditSession.prototype.destroy = function () { + if (!this.destroyed) { + this.bgTokenizer.setDocument(null); + this.bgTokenizer.cleanup(); + this.destroyed = true; + } + this.endOperation(); + this.$stopWorker(); + this.removeAllListeners(); + if (this.doc) { + this.doc.off("change", this.$onChange); + } + if (this.selection) { + this.selection.off("changeCursor", this.$onSelectionChange); + this.selection.off("changeSelection", this.$onSelectionChange); + } + this.selection.detach(); + }; + return EditSession; +}()); +EditSession.$uid = 0; +EditSession.prototype.$modes = config.$modes; +EditSession.prototype.getValue = EditSession.prototype.toString; +EditSession.prototype.$defaultUndoManager = { + undo: function () { }, + redo: function () { }, + hasUndo: function () { }, + hasRedo: function () { }, + reset: function () { }, + add: function () { }, + addSelection: function () { }, + startNewGroup: function () { }, + addSession: function () { } +}; +EditSession.prototype.$overwrite = false; +EditSession.prototype.$mode = null; +EditSession.prototype.$modeId = null; +EditSession.prototype.$scrollTop = 0; +EditSession.prototype.$scrollLeft = 0; +EditSession.prototype.$wrapLimit = 80; +EditSession.prototype.$useWrapMode = false; +EditSession.prototype.$wrapLimitRange = { + min: null, + max: null +}; +EditSession.prototype.lineWidgets = null; +EditSession.prototype.isFullWidth = isFullWidth; +oop.implement(EditSession.prototype, EventEmitter); +var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12; +function isFullWidth(c) { + if (c < 0x1100) + return false; + return c >= 0x1100 && c <= 0x115F || + c >= 0x11A3 && c <= 0x11A7 || + c >= 0x11FA && c <= 0x11FF || + c >= 0x2329 && c <= 0x232A || + c >= 0x2E80 && c <= 0x2E99 || + c >= 0x2E9B && c <= 0x2EF3 || + c >= 0x2F00 && c <= 0x2FD5 || + c >= 0x2FF0 && c <= 0x2FFB || + c >= 0x3000 && c <= 0x303E || + c >= 0x3041 && c <= 0x3096 || + c >= 0x3099 && c <= 0x30FF || + c >= 0x3105 && c <= 0x312D || + c >= 0x3131 && c <= 0x318E || + c >= 0x3190 && c <= 0x31BA || + c >= 0x31C0 && c <= 0x31E3 || + c >= 0x31F0 && c <= 0x321E || + c >= 0x3220 && c <= 0x3247 || + c >= 0x3250 && c <= 0x32FE || + c >= 0x3300 && c <= 0x4DBF || + c >= 0x4E00 && c <= 0xA48C || + c >= 0xA490 && c <= 0xA4C6 || + c >= 0xA960 && c <= 0xA97C || + c >= 0xAC00 && c <= 0xD7A3 || + c >= 0xD7B0 && c <= 0xD7C6 || + c >= 0xD7CB && c <= 0xD7FB || + c >= 0xF900 && c <= 0xFAFF || + c >= 0xFE10 && c <= 0xFE19 || + c >= 0xFE30 && c <= 0xFE52 || + c >= 0xFE54 && c <= 0xFE66 || + c >= 0xFE68 && c <= 0xFE6B || + c >= 0xFF01 && c <= 0xFF60 || + c >= 0xFFE0 && c <= 0xFFE6; } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/tabpanel.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabPanel-tabBar {\n z-index: 1;\n}\n\n.lm-TabPanel-stackedPanel {\n z-index: 0;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css": -/*!*************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/widgets/style/widget.css ***! - \*************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _packages_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_packages_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/* - * Copyright (c) Jupyter Development Team. - * Distributed under the terms of the Modified BSD License. - */ - -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Copyright (c) 2014-2017, PhosphorJS Contributors -| -| Distributed under the terms of the BSD 3-Clause License. -| -| The full license is in the file LICENSE, distributed with this software. -|----------------------------------------------------------------------------*/ +require("./edit_session/folding").Folding.call(EditSession.prototype); +require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); +config.defineOptions(EditSession.prototype, "session", { + wrap: { + set: function (value) { + if (!value || value == "off") + value = false; + else if (value == "free") + value = true; + else if (value == "printMargin") + value = -1; + else if (typeof value == "string") + value = parseInt(value, 10) || false; + if (this.$wrap == value) + return; + this.$wrap = value; + if (!value) { + this.setUseWrapMode(false); + } + else { + var col = typeof value == "number" ? value : null; + this.setWrapLimitRange(col, col); + this.setUseWrapMode(true); + } + }, + get: function () { + if (this.getUseWrapMode()) { + if (this.$wrap == -1) + return "printMargin"; + if (!this.getWrapLimitRange().min) + return "free"; + return this.$wrap; + } + return "off"; + }, + handlesSet: true + }, + wrapMethod: { + set: function (val) { + val = val == "auto" + ? this.$mode.type != "text" + : val != "text"; + if (val != this.$wrapAsCode) { + this.$wrapAsCode = val; + if (this.$useWrapMode) { + this.$useWrapMode = false; + this.setUseWrapMode(true); + } + } + }, + initialValue: "auto" + }, + indentedSoftWrap: { + set: function () { + if (this.$useWrapMode) { + this.$useWrapMode = false; + this.setUseWrapMode(true); + } + }, + initialValue: true + }, + firstLineNumber: { + set: function () { this._signal("changeBreakpoint"); }, + initialValue: 1 + }, + useWorker: { + set: function (useWorker) { + this.$useWorker = useWorker; + this.$stopWorker(); + if (useWorker) + this.$startWorker(); + }, + initialValue: true + }, + useSoftTabs: { initialValue: true }, + tabSize: { + set: function (tabSize) { + tabSize = parseInt(tabSize); + if (tabSize > 0 && this.$tabSize !== tabSize) { + this.$modified = true; + this.$rowLengthCache = []; + this.$tabSize = tabSize; + this._signal("changeTabSize"); + } + }, + initialValue: 4, + handlesSet: true + }, + navigateWithinSoftTabs: { initialValue: false }, + foldStyle: { + set: function (val) { this.setFoldStyle(val); }, + handlesSet: true + }, + overwrite: { + set: function (val) { this._signal("changeOverwrite"); }, + initialValue: false + }, + newLineMode: { + set: function (val) { this.doc.setNewLineMode(val); }, + get: function () { return this.doc.getNewLineMode(); }, + handlesSet: true + }, + mode: { + set: function (val) { this.setMode(val); }, + get: function () { return this.$modeId; }, + handlesSet: true + } +}); +exports.EditSession = EditSession; -.lm-Widget { - box-sizing: border-box; - position: relative; -} +}); -.lm-Widget.lm-mod-hidden { - display: none !important; +ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module){"use strict"; +var lang = require("./lib/lang"); +var oop = require("./lib/oop"); +var Range = require("./range").Range; +var Search = /** @class */ (function () { + function Search() { + this.$options = {}; + } + Search.prototype.set = function (options) { + oop.mixin(this.$options, options); + return this; + }; + Search.prototype.getOptions = function () { + return lang.copyObject(this.$options); + }; + Search.prototype.setOptions = function (options) { + this.$options = options; + }; + Search.prototype.find = function (session) { + var options = this.$options; + var iterator = this.$matchIterator(session, options); + if (!iterator) + return false; + var firstRange = null; + iterator.forEach(function (sr, sc, er, ec) { + firstRange = new Range(sr, sc, er, ec); + if (sc == ec && options.start && /**@type{Range}*/ (options.start).start + && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) { + firstRange = null; + return false; + } + return true; + }); + return firstRange; + }; + Search.prototype.findAll = function (session) { + var options = this.$options; + if (!options.needle) + return []; + this.$assembleRegExp(options); + var range = options.range; + var lines = range + ? session.getLines(range.start.row, range.end.row) + : session.doc.getAllLines(); + var ranges = []; + var re = options.re; + if (options.$isMultiLine) { + var len = re.length; + var maxRow = lines.length - len; + var prevRange; + outer: for (var row = re.offset || 0; row <= maxRow; row++) { + for (var j = 0; j < len; j++) + if (lines[row + j].search(re[j]) == -1) + continue outer; + var startLine = lines[row]; + var line = lines[row + len - 1]; + var startIndex = startLine.length - startLine.match(re[0])[0].length; + var endIndex = line.match(re[len - 1])[0].length; + if (prevRange && prevRange.end.row === row && + prevRange.end.column > startIndex) { + continue; + } + ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex)); + if (len > 2) + row = row + len - 2; + } + } + else { + for (var matches, i = 0; i < lines.length; i++) { + if (this.$isMultilineSearch(options)) { + var lng = lines.length - 1; + matches = this.$multiLineForward(session, re, i, lng); + if (matches) { + var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng; + if (end_row > i) + i = end_row; + ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol)); + } + } + else { + matches = lang.getMatchOffsets(lines[i], re); + for (var j = 0; j < matches.length; j++) { + var match = matches[j]; + ranges.push(new Range(i, match.offset, i, match.offset + match.length)); + } + } + } + } + if (range) { + var startColumn = range.start.column; + var endColumn = range.end.column; + var i = 0, j = ranges.length - 1; + while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0) + i++; + var endRow = range.end.row - range.start.row; + while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow) + j--; + ranges = ranges.slice(i, j + 1); + for (i = 0, j = ranges.length; i < j; i++) { + ranges[i].start.row += range.start.row; + ranges[i].end.row += range.start.row; + } + } + return ranges; + }; + Search.prototype.parseReplaceString = function (replaceString) { + var CharCode = { + DollarSign: 36, + Ampersand: 38, + Digit0: 48, + Digit1: 49, + Digit9: 57, + Backslash: 92, + n: 110, + t: 116 + }; + var replacement = ''; + for (var i = 0, len = replaceString.length; i < len; i++) { + var chCode = replaceString.charCodeAt(i); + if (chCode === CharCode.Backslash) { + i++; + if (i >= len) { + replacement += "\\"; + break; + } + var nextChCode = replaceString.charCodeAt(i); + switch (nextChCode) { + case CharCode.Backslash: + replacement += "\\"; + break; + case CharCode.n: + replacement += "\n"; + break; + case CharCode.t: + replacement += "\t"; + break; + } + continue; + } + if (chCode === CharCode.DollarSign) { + i++; + if (i >= len) { + replacement += "$"; + break; + } + var nextChCode_1 = replaceString.charCodeAt(i); + if (nextChCode_1 === CharCode.DollarSign) { + replacement += "$$"; + continue; + } + if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) { + replacement += "$&"; + continue; + } + if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) { + replacement += "$" + replaceString[i]; + continue; + } + } + replacement += replaceString[i]; + } + return replacement || replaceString; + }; + Search.prototype.replace = function (input, replacement) { + var options = this.$options; + var re = this.$assembleRegExp(options); + if (options.$isMultiLine) + return replacement; + if (!re) + return; + var mtSearch = this.$isMultilineSearch(options); + if (mtSearch) + input = input.replace(/\r\n|\r|\n/g, "\n"); + var match = re.exec(input); + if (!match || (!mtSearch && match[0].length != input.length)) + return null; + replacement = options.regExp + ? this.parseReplaceString(replacement) + : replacement.replace(/\$/g, "$$$$"); + replacement = input.replace(re, replacement); + if (options.preserveCase) { + replacement = replacement.split(""); + for (var i = Math.min(input.length, input.length); i--;) { + var ch = input[i]; + if (ch && ch.toLowerCase() != ch) + replacement[i] = replacement[i].toUpperCase(); + else + replacement[i] = replacement[i].toLowerCase(); + } + replacement = replacement.join(""); + } + return replacement; + }; + Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) { + if (options.needle instanceof RegExp) + return options.re = options.needle; + var needle = options.needle; + if (!options.needle) + return options.re = false; + if (!options.regExp) + needle = lang.escapeRegExp(needle); + var modifier = options.caseSensitive ? "gm" : "gmi"; + try { + new RegExp(needle, "u"); + options.$supportsUnicodeFlag = true; + modifier += "u"; + } + catch (e) { + options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\{2}/gu + } + if (options.wholeWord) + needle = addWordBoundary(needle, options); + options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); + if (options.$isMultiLine) + return options.re = this.$assembleMultilineRegExp(needle, modifier); + try { + var re = new RegExp(needle, modifier); + } + catch (e) { + re = false; + } + return options.re = re; + }; + Search.prototype.$assembleMultilineRegExp = function (needle, modifier) { + var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); + var re = []; + for (var i = 0; i < parts.length; i++) + try { + re.push(new RegExp(parts[i], modifier)); + } + catch (e) { + return false; + } + return re; + }; + Search.prototype.$isMultilineSearch = function (options) { + return options.re && /\\r\\n|\\r|\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine; + }; + Search.prototype.$multiLineForward = function (session, re, start, last) { + var line, chunk = chunkEnd(session, start); + for (var row = start; row <= last;) { + for (var i = 0; i < chunk; i++) { + if (row > last) + break; + var next = session.getLine(row++); + line = line == null ? next : line + "\n" + next; + } + var match = re.exec(line); + re.lastIndex = 0; + if (match) { + var beforeMatch = line.slice(0, match.index).split("\n"); + var matchedText = match[0].split("\n"); + var startRow = start + beforeMatch.length - 1; + var startCol = beforeMatch[beforeMatch.length - 1].length; + var endRow = startRow + matchedText.length - 1; + var endCol = matchedText.length == 1 + ? startCol + matchedText[0].length + : matchedText[matchedText.length - 1].length; + return { + startRow: startRow, + startCol: startCol, + endRow: endRow, + endCol: endCol + }; + } + } + return null; + }; + Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) { + var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex; + for (var row = start; row >= first;) { + for (var i = 0; i < chunk && row >= first; i++) { + var next = session.getLine(row--); + line = line == null ? next : next + "\n" + line; + } + var match = multiLineBackwardMatch(line, re, endMargin); + if (match) { + var beforeMatch = line.slice(0, match.index).split("\n"); + var matchedText = match[0].split("\n"); + var startRow = row + beforeMatch.length; + var startCol = beforeMatch[beforeMatch.length - 1].length; + var endRow = startRow + matchedText.length - 1; + var endCol = matchedText.length == 1 + ? startCol + matchedText[0].length + : matchedText[matchedText.length - 1].length; + return { + startRow: startRow, + startCol: startCol, + endRow: endRow, + endCol: endCol + }; + } + } + return null; + }; + Search.prototype.$matchIterator = function (session, options) { + var re = this.$assembleRegExp(options); + if (!re) + return false; + var mtSearch = this.$isMultilineSearch(options); + var mtForward = this.$multiLineForward; + var mtBackward = this.$multiLineBackward; + var backwards = options.backwards == true; + var skipCurrent = options.skipCurrent != false; + var supportsUnicodeFlag = re.unicode; + var range = options.range; + var start = options.start; + if (!start) + start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); + if (start.start) + start = start[skipCurrent != backwards ? "end" : "start"]; + var firstRow = range ? range.start.row : 0; + var lastRow = range ? range.end.row : session.getLength() - 1; + if (backwards) { + var forEach = function (callback) { + var row = start.row; + if (forEachInLine(row, start.column, callback)) + return; + for (row--; row >= firstRow; row--) + if (forEachInLine(row, Number.MAX_VALUE, callback)) + return; + if (options.wrap == false) + return; + for (row = lastRow, firstRow = start.row; row >= firstRow; row--) + if (forEachInLine(row, Number.MAX_VALUE, callback)) + return; + }; + } + else { + var forEach = function (callback) { + var row = start.row; + if (forEachInLine(row, start.column, callback)) + return; + for (row = row + 1; row <= lastRow; row++) + if (forEachInLine(row, 0, callback)) + return; + if (options.wrap == false) + return; + for (row = firstRow, lastRow = start.row; row <= lastRow; row++) + if (forEachInLine(row, 0, callback)) + return; + }; + } + if (options.$isMultiLine) { + var len = re.length; + var forEachInLine = function (row, offset, callback) { + var startRow = backwards ? row - len + 1 : row; + if (startRow < 0 || startRow + len > session.getLength()) + return; + var line = session.getLine(startRow); + var startIndex = line.search(re[0]); + if (!backwards && startIndex < offset || startIndex === -1) + return; + for (var i = 1; i < len; i++) { + line = session.getLine(startRow + i); + if (line.search(re[i]) == -1) + return; + } + var endIndex = line.match(re[len - 1])[0].length; + if (backwards && endIndex > offset) + return; + if (callback(startRow, startIndex, startRow + len - 1, endIndex)) + return true; + }; + } + else if (backwards) { + var forEachInLine = function (row, endIndex, callback) { + if (mtSearch) { + var pos = mtBackward(session, re, endIndex, row, firstRow); + if (!pos) + return false; + if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol)) + return true; + } + else { + var line = session.getLine(row); + var matches = []; + var m, last = 0; + re.lastIndex = 0; + while ((m = re.exec(line))) { + var length = m[0].length; + last = m.index; + if (!length) { + if (last >= line.length) + break; + re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag); + } + if (m.index + length > endIndex) + break; + matches.push(m.index, length); + } + for (var i = matches.length - 1; i >= 0; i -= 2) { + var column = matches[i - 1]; + var length = matches[i]; + if (callback(row, column, row, column + length)) + return true; + } + } + }; + } + else { + var forEachInLine = function (row, startIndex, callback) { + re.lastIndex = startIndex; + if (mtSearch) { + var pos = mtForward(session, re, row, lastRow); + if (pos) { + var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow; + if (end_row > row) + row = end_row; + } + if (!pos) + return false; + if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol)) + return true; + } + else { + var line = session.getLine(row); + var last; + var m; + while ((m = re.exec(line))) { + var length = m[0].length; + last = m.index; + if (callback(row, last, row, last + length)) + return true; + if (!length) { + re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag); + if (last >= line.length) + return false; + } + } + } + }; + } + return { forEach: forEach }; + }; + return Search; +}()); +function addWordBoundary(needle, options) { + var supportsLookbehind = lang.supportsLookbehind(); + function wordBoundary(c, firstChar) { + if (firstChar === void 0) { firstChar = true; } + var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp("[\\p{L}\\p{N}_]", "u") : new RegExp("\\w"); + if (wordRegExp.test(c) || options.regExp) { + if (supportsLookbehind && options.$supportsUnicodeFlag) { + if (firstChar) + return "(?<=^|[^\\p{L}\\p{N}_])"; + return "(?=[^\\p{L}\\p{N}_]|$)"; + } + return "\\b"; + } + return ""; + } + var needleArray = Array.from(needle); + var firstChar = needleArray[0]; + var lastChar = needleArray[needleArray.length - 1]; + return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false); } -`, "",{"version":3,"sources":["webpack://./../../node_modules/@lumino/widgets/style/widget.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,wBAAwB;AAC1B","sourcesContent":["/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Widget {\n box-sizing: border-box;\n position: relative;\n}\n\n.lm-Widget.lm-mod-hidden {\n display: none !important;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css": -/*!************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../history/style/index.css ***! - \************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `.history-toolbar { - float: left; - overflow: none; - z-index: 3; - position: absolute; +function multiLineBackwardMatch(line, re, endMargin) { + var match = null; + var from = 0; + while (from <= line.length) { + re.lastIndex = from; + var newMatch = re.exec(line); + if (!newMatch) + break; + var end = newMatch.index + newMatch[0].length; + if (end > line.length - endMargin) + break; + if (!match || end > match.index + match[0].length) + match = newMatch; + from = newMatch.index + 1; + } + return match; } - -.history-toolbar .buttons { - height: 30px; - display: inline-block; - margin-left: 8px; +function chunkEnd(session, start) { + var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row; + return targetLine + 1; } +exports.Search = Search; -.history-toolbar .buttons > input { - height: 30px; -} +}); -.history-toolbar .buttons > input[type=checkbox] { - display: none +ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); var keyUtil = require("../lib/keys"); +var useragent = require("../lib/useragent"); +var KEY_MODS = keyUtil.KEY_MODS; +var MultiHashHandler = /** @class */ (function () { + function MultiHashHandler(config, platform) { + this.$init(config, platform, false); + } + MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) { + this.platform = platform || (useragent.isMac ? "mac" : "win"); + this.commands = {}; + this.commandKeyBinding = {}; + this.addCommands(config); + this.$singleCommand = $singleCommand; + }; + MultiHashHandler.prototype.addCommand = function (command) { + if (this.commands[command.name]) + this.removeCommand(command); + this.commands[command.name] = command; + if (command.bindKey) + this._buildKeyHash(command); + }; + MultiHashHandler.prototype.removeCommand = function (command, keepCommand) { + var name = command && (typeof command === 'string' ? command : command.name); + command = this.commands[name]; + if (!keepCommand) + delete this.commands[name]; + var ckb = this.commandKeyBinding; + for (var keyId in ckb) { + var cmdGroup = ckb[keyId]; + if (cmdGroup == command) { + delete ckb[keyId]; + } + else if (Array.isArray(cmdGroup)) { + var i = cmdGroup.indexOf(command); + if (i != -1) { + cmdGroup.splice(i, 1); + if (cmdGroup.length == 1) + ckb[keyId] = cmdGroup[0]; + } + } + } + }; + MultiHashHandler.prototype.bindKey = function (key, command, position) { + if (typeof key == "object" && key) { + if (position == undefined) + position = key.position; + key = key[this.platform]; + } + if (!key) + return; + if (typeof command == "function") + return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split("|").forEach(function (keyPart) { + var chain = ""; + if (keyPart.indexOf(" ") != -1) { + var parts = keyPart.split(/\s+/); + keyPart = parts.pop(); + parts.forEach(function (keyPart) { + var binding = this.parseKeys(keyPart); + var id = KEY_MODS[binding.hashId] + binding.key; + chain += (chain ? " " : "") + id; + this._addCommandToBinding(chain, "chainKeys"); + }, this); + chain += " "; + } + var binding = this.parseKeys(keyPart); + var id = KEY_MODS[binding.hashId] + binding.key; + this._addCommandToBinding(chain + id, command, position); + }, this); + }; + MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) { + var ckb = this.commandKeyBinding, i; + if (!command) { + delete ckb[keyId]; + } + else if (!ckb[keyId] || this.$singleCommand) { + ckb[keyId] = command; + } + else { + if (!Array.isArray(ckb[keyId])) { + ckb[keyId] = [ckb[keyId]]; + } + else if ((i = ckb[keyId].indexOf(command)) != -1) { + ckb[keyId].splice(i, 1); + } + if (typeof position != "number") { + position = getPosition(command); + } + var commands = ckb[keyId]; + for (i = 0; i < commands.length; i++) { + var other = commands[i]; + var otherPos = getPosition(other); + if (otherPos > position) + break; + } + commands.splice(i, 0, command); + } + }; + MultiHashHandler.prototype.addCommands = function (commands) { + commands && Object.keys(commands).forEach(function (name) { + var command = commands[name]; + if (!command) + return; + if (typeof command === "string") + return this.bindKey(command, name); + if (typeof command === "function") + command = { exec: command }; + if (typeof command !== "object") + return; + if (!command.name) + command.name = name; + this.addCommand(command); + }, this); + }; + MultiHashHandler.prototype.removeCommands = function (commands) { + Object.keys(commands).forEach(function (name) { + this.removeCommand(commands[name]); + }, this); + }; + MultiHashHandler.prototype.bindKeys = function (keyList) { + Object.keys(keyList).forEach(function (key) { + this.bindKey(key, keyList[key]); + }, this); + }; + MultiHashHandler.prototype._buildKeyHash = function (command) { + this.bindKey(command.bindKey, command); + }; + MultiHashHandler.prototype.parseKeys = function (keys) { + var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function (x) { return x; }); + var key = parts.pop(); + var keyCode = keyUtil[key]; + if (keyUtil.FUNCTION_KEYS[keyCode]) + key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); + else if (!parts.length) + return { key: key, hashId: -1 }; + else if (parts.length == 1 && parts[0] == "shift") + return { key: key.toUpperCase(), hashId: -1 }; + var hashId = 0; + for (var i = parts.length; i--;) { + var modifier = keyUtil.KEY_MODS[parts[i]]; + if (modifier == null) { + if (typeof console != "undefined") + console.error("invalid modifier " + parts[i] + " in " + keys); + return false; + } + hashId |= modifier; + } + return { key: key, hashId: hashId }; + }; + MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) { + var key = KEY_MODS[hashId] + keyString; + return this.commandKeyBinding[key]; + }; + MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) { + if (keyCode < 0) + return; + var key = KEY_MODS[hashId] + keyString; + var command = this.commandKeyBinding[key]; + if (data.$keyChain) { + data.$keyChain += " " + key; + command = this.commandKeyBinding[data.$keyChain] || command; + } + if (command) { + if (command == "chainKeys" || command[command.length - 1] == "chainKeys") { + data.$keyChain = data.$keyChain || key; + return { command: "null" }; + } + } + if (data.$keyChain) { + if ((!hashId || hashId == 4) && keyString.length == 1) + data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input + else if (hashId == -1 || keyCode > 0) + data.$keyChain = ""; // reset keyChain + } + return { command: command }; + }; + MultiHashHandler.prototype.getStatusText = function (editor, data) { + return data.$keyChain || ""; + }; + return MultiHashHandler; +}()); +function getPosition(command) { + return typeof command == "object" && command.bindKey + && command.bindKey.position + || (command.isDefault ? -100 : 0); } +var HashHandler = /** @class */ (function (_super) { + __extends(HashHandler, _super); + function HashHandler(config, platform) { + var _this = _super.call(this, config, platform) || this; + _this.$singleCommand = true; + return _this; + } + return HashHandler; +}(MultiHashHandler)); +HashHandler.call = function (thisArg, config, platform) { + MultiHashHandler.prototype.$init.call(thisArg, config, platform, true); +}; +MultiHashHandler.call = function (thisArg, config, platform) { + MultiHashHandler.prototype.$init.call(thisArg, config, platform, false); +}; +exports.HashHandler = HashHandler; +exports.MultiHashHandler = MultiHashHandler; -.history-toolbar .buttons > label, .history-toolbar > div > a { - margin: 8px 8px 8px 0; -} +}); -.history-toolbar .buttons > input[type=checkbox] + label { - display:inline-block; - color: black; - cursor: pointer; -} +ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var oop = require("../lib/oop"); +var MultiHashHandler = require("../keyboard/hash_handler").MultiHashHandler; +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var CommandManager = /** @class */ (function (_super) { + __extends(CommandManager, _super); + function CommandManager(platform, commands) { + var _this = _super.call(this, commands, platform) || this; + _this.byName = _this.commands; + _this.setDefaultHandler("exec", function (e) { + if (!e.args) { + return e.command.exec(e.editor, {}, e.event, true); + } + return e.command.exec(e.editor, e.args, e.event, false); + }); + return _this; + } + CommandManager.prototype.exec = function (command, editor, args) { + if (Array.isArray(command)) { + for (var i = command.length; i--;) { + if (this.exec(command[i], editor, args)) + return true; + } + return false; + } + if (typeof command === "string") + command = this.commands[command]; + var e = { editor: editor, command: command, args: args }; + if (!this.canExecute(command, editor)) { + this._signal("commandUnavailable", e); + return false; + } + e.returnValue = this._emit("exec", e); + this._signal("afterExec", e); + return e.returnValue === false ? false : true; + }; + CommandManager.prototype.canExecute = function (command, editor) { + if (typeof command === "string") + command = this.commands[command]; + if (!command) + return false; + if (editor && editor.$readOnly && !command.readOnly) + return false; + if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor)) + return false; + return true; + }; + CommandManager.prototype.toggleRecording = function (editor) { + if (this.$inReplay) + return; + editor && editor._emit("changeStatus"); + if (this.recording) { + this.macro.pop(); + this.off("exec", this.$addCommandToMacro); + if (!this.macro.length) + this.macro = this.oldMacro; + return this.recording = false; + } + if (!this.$addCommandToMacro) { + this.$addCommandToMacro = function (e) { + this.macro.push([e.command, e.args]); + }.bind(this); + } + this.oldMacro = this.macro; + this.macro = []; + this.on("exec", this.$addCommandToMacro); + return this.recording = true; + }; + CommandManager.prototype.replay = function (editor) { + if (this.$inReplay || !this.macro) + return; + if (this.recording) + return this.toggleRecording(editor); + try { + this.$inReplay = true; + this.macro.forEach(function (x) { + if (typeof x == "string") + this.exec(x, editor); + else + this.exec(x[0], editor, x[1]); + }, this); + } + finally { + this.$inReplay = false; + } + }; + CommandManager.prototype.trimMacro = function (m) { + return m.map(function (x) { + if (typeof x[0] != "string") + x[0] = x[0].name; + if (!x[1]) + x = x[0]; + return x; + }); + }; + return CommandManager; +}(MultiHashHandler)); +oop.implement(CommandManager.prototype, EventEmitter); +exports.CommandManager = CommandManager; -.history-toolbar .buttons > input[type=checkbox]:checked + label { - color: blue; -} +}); -.history-toolbar .buttons > a.toollink, -.history-toolbar .buttons > a.toollink:link, -.history-toolbar .buttons > a.toollink:visited { - color: black; +ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(require, exports, module){"use strict"; +var lang = require("../lib/lang"); +var config = require("../config"); +var Range = require("../range").Range; +function bindKey(win, mac) { + return { win: win, mac: mac }; } - -.history-toolbar .buttons > a.toollink:active { - color: blue; +exports.commands = [{ + name: "showSettingsMenu", + description: "Show settings menu", + bindKey: bindKey("Ctrl-,", "Command-,"), + exec: function (editor) { + config.loadModule("ace/ext/settings_menu", function (module) { + module.init(editor); + editor.showSettingsMenu(); + }); + }, + readOnly: true + }, { + name: "goToNextError", + description: "Go to next error", + bindKey: bindKey("Alt-E", "F4"), + exec: function (editor) { + config.loadModule("ace/ext/error_marker", function (module) { + module.showErrorMarker(editor, 1); + }); + }, + scrollIntoView: "animate", + readOnly: true + }, { + name: "goToPreviousError", + description: "Go to previous error", + bindKey: bindKey("Alt-Shift-E", "Shift-F4"), + exec: function (editor) { + config.loadModule("ace/ext/error_marker", function (module) { + module.showErrorMarker(editor, -1); + }); + }, + scrollIntoView: "animate", + readOnly: true + }, { + name: "selectall", + description: "Select all", + bindKey: bindKey("Ctrl-A", "Command-A"), + exec: function (editor) { editor.selectAll(); }, + readOnly: true + }, { + name: "centerselection", + description: "Center selection", + bindKey: bindKey(null, "Ctrl-L"), + exec: function (editor) { editor.centerSelection(); }, + readOnly: true + }, { + name: "gotoline", + description: "Go to line...", + bindKey: bindKey("Ctrl-L", "Command-L"), + exec: function (editor, line) { + if (typeof line === "number" && !isNaN(line)) + editor.gotoLine(line); + editor.prompt({ $type: "gotoLine" }); + }, + readOnly: true + }, { + name: "fold", + bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), + exec: function (editor) { editor.session.toggleFold(false); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "unfold", + bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), + exec: function (editor) { editor.session.toggleFold(true); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "toggleFoldWidget", + description: "Toggle fold widget", + bindKey: bindKey("F2", "F2"), + exec: function (editor) { editor.session.toggleFoldWidget(); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "toggleParentFoldWidget", + description: "Toggle parent fold widget", + bindKey: bindKey("Alt-F2", "Alt-F2"), + exec: function (editor) { editor.session.toggleFoldWidget(true); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "foldall", + description: "Fold all", + bindKey: bindKey(null, "Ctrl-Command-Option-0"), + exec: function (editor) { editor.session.foldAll(); }, + scrollIntoView: "center", + readOnly: true + }, { + name: "foldAllComments", + description: "Fold all comments", + bindKey: bindKey(null, "Ctrl-Command-Option-0"), + exec: function (editor) { editor.session.foldAllComments(); }, + scrollIntoView: "center", + readOnly: true + }, { + name: "foldOther", + description: "Fold other", + bindKey: bindKey("Alt-0", "Command-Option-0"), + exec: function (editor) { + editor.session.foldAll(); + editor.session.unfold(editor.selection.getAllRanges()); + }, + scrollIntoView: "center", + readOnly: true + }, { + name: "unfoldall", + description: "Unfold all", + bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), + exec: function (editor) { editor.session.unfold(); }, + scrollIntoView: "center", + readOnly: true + }, { + name: "findnext", + description: "Find next", + bindKey: bindKey("Ctrl-K", "Command-G"), + exec: function (editor) { editor.findNext(); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "findprevious", + description: "Find previous", + bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), + exec: function (editor) { editor.findPrevious(); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true + }, { + name: "selectOrFindNext", + description: "Select or find next", + bindKey: bindKey("Alt-K", "Ctrl-G"), + exec: function (editor) { + if (editor.selection.isEmpty()) + editor.selection.selectWord(); + else + editor.findNext(); + }, + readOnly: true + }, { + name: "selectOrFindPrevious", + description: "Select or find previous", + bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"), + exec: function (editor) { + if (editor.selection.isEmpty()) + editor.selection.selectWord(); + else + editor.findPrevious(); + }, + readOnly: true + }, { + name: "find", + description: "Find", + bindKey: bindKey("Ctrl-F", "Command-F"), + exec: function (editor) { + config.loadModule("ace/ext/searchbox", function (e) { e.Search(editor); }); + }, + readOnly: true + }, { + name: "overwrite", + description: "Overwrite", + bindKey: "Insert", + exec: function (editor) { editor.toggleOverwrite(); }, + readOnly: true + }, { + name: "selecttostart", + description: "Select to start", + bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Home|Command-Shift-Up"), + exec: function (editor) { editor.getSelection().selectFileStart(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" + }, { + name: "gotostart", + description: "Go to start", + bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), + exec: function (editor) { editor.navigateFileStart(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" + }, { + name: "selectup", + description: "Select up", + bindKey: bindKey("Shift-Up", "Shift-Up|Ctrl-Shift-P"), + exec: function (editor) { editor.getSelection().selectUp(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "golineup", + description: "Go line up", + bindKey: bindKey("Up", "Up|Ctrl-P"), + exec: function (editor, args) { editor.navigateUp(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selecttoend", + description: "Select to end", + bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-End|Command-Shift-Down"), + exec: function (editor) { editor.getSelection().selectFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" + }, { + name: "gotoend", + description: "Go to end", + bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), + exec: function (editor) { editor.navigateFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" + }, { + name: "selectdown", + description: "Select down", + bindKey: bindKey("Shift-Down", "Shift-Down|Ctrl-Shift-N"), + exec: function (editor) { editor.getSelection().selectDown(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "golinedown", + description: "Go line down", + bindKey: bindKey("Down", "Down|Ctrl-N"), + exec: function (editor, args) { editor.navigateDown(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectwordleft", + description: "Select word left", + bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), + exec: function (editor) { editor.getSelection().selectWordLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotowordleft", + description: "Go to word left", + bindKey: bindKey("Ctrl-Left", "Option-Left"), + exec: function (editor) { editor.navigateWordLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selecttolinestart", + description: "Select to line start", + bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left|Ctrl-Shift-A"), + exec: function (editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotolinestart", + description: "Go to line start", + bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), + exec: function (editor) { editor.navigateLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectleft", + description: "Select left", + bindKey: bindKey("Shift-Left", "Shift-Left|Ctrl-Shift-B"), + exec: function (editor) { editor.getSelection().selectLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotoleft", + description: "Go to left", + bindKey: bindKey("Left", "Left|Ctrl-B"), + exec: function (editor, args) { editor.navigateLeft(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectwordright", + description: "Select word right", + bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), + exec: function (editor) { editor.getSelection().selectWordRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotowordright", + description: "Go to word right", + bindKey: bindKey("Ctrl-Right", "Option-Right"), + exec: function (editor) { editor.navigateWordRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selecttolineend", + description: "Select to line end", + bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right|Shift-End|Ctrl-Shift-E"), + exec: function (editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotolineend", + description: "Go to line end", + bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), + exec: function (editor) { editor.navigateLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectright", + description: "Select right", + bindKey: bindKey("Shift-Right", "Shift-Right"), + exec: function (editor) { editor.getSelection().selectRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "gotoright", + description: "Go to right", + bindKey: bindKey("Right", "Right|Ctrl-F"), + exec: function (editor, args) { editor.navigateRight(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectpagedown", + description: "Select page down", + bindKey: "Shift-PageDown", + exec: function (editor) { editor.selectPageDown(); }, + readOnly: true + }, { + name: "pagedown", + description: "Page down", + bindKey: bindKey(null, "Option-PageDown"), + exec: function (editor) { editor.scrollPageDown(); }, + readOnly: true + }, { + name: "gotopagedown", + description: "Go to page down", + bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), + exec: function (editor) { editor.gotoPageDown(); }, + readOnly: true + }, { + name: "selectpageup", + description: "Select page up", + bindKey: "Shift-PageUp", + exec: function (editor) { editor.selectPageUp(); }, + readOnly: true + }, { + name: "pageup", + description: "Page up", + bindKey: bindKey(null, "Option-PageUp"), + exec: function (editor) { editor.scrollPageUp(); }, + readOnly: true + }, { + name: "gotopageup", + description: "Go to page up", + bindKey: "PageUp", + exec: function (editor) { editor.gotoPageUp(); }, + readOnly: true + }, { + name: "scrollup", + description: "Scroll up", + bindKey: bindKey("Ctrl-Up", null), + exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, + readOnly: true + }, { + name: "scrolldown", + description: "Scroll down", + bindKey: bindKey("Ctrl-Down", null), + exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, + readOnly: true + }, { + name: "selectlinestart", + description: "Select line start", + bindKey: "Shift-Home", + exec: function (editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectlineend", + description: "Select line end", + bindKey: "Shift-End", + exec: function (editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "togglerecording", + description: "Toggle recording", + bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), + exec: function (editor) { editor.commands.toggleRecording(editor); }, + readOnly: true + }, { + name: "replaymacro", + description: "Replay macro", + bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), + exec: function (editor) { editor.commands.replay(editor); }, + readOnly: true + }, { + name: "jumptomatching", + description: "Jump to matching", + bindKey: bindKey("Ctrl-\\|Ctrl-P", "Command-\\"), + exec: function (editor) { editor.jumpToMatching(); }, + multiSelectAction: "forEach", + scrollIntoView: "animate", + readOnly: true + }, { + name: "selecttomatching", + description: "Select to matching", + bindKey: bindKey("Ctrl-Shift-\\|Ctrl-Shift-P", "Command-Shift-\\"), + exec: function (editor) { editor.jumpToMatching(true); }, + multiSelectAction: "forEach", + scrollIntoView: "animate", + readOnly: true + }, { + name: "expandToMatching", + description: "Expand to matching", + bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"), + exec: function (editor) { editor.jumpToMatching(true, true); }, + multiSelectAction: "forEach", + scrollIntoView: "animate", + readOnly: true + }, { + name: "passKeysToBrowser", + description: "Pass keys to browser", + bindKey: bindKey(null, null), + exec: function () { }, + passEvent: true, + readOnly: true + }, { + name: "copy", + description: "Copy", + exec: function (editor) { + }, + readOnly: true + }, + { + name: "cut", + description: "Cut", + exec: function (editor) { + var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty(); + var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange(); + editor._emit("cut", range); + if (!range.isEmpty()) + editor.session.remove(range); + editor.clearSelection(); + }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" + }, { + name: "paste", + description: "Paste", + exec: function (editor, args) { + editor.$handlePaste(args); + }, + scrollIntoView: "cursor" + }, { + name: "removeline", + description: "Remove line", + bindKey: bindKey("Ctrl-D", "Command-D"), + exec: function (editor) { editor.removeLines(); }, + scrollIntoView: "cursor", + multiSelectAction: "forEachLine" + }, { + name: "duplicateSelection", + description: "Duplicate selection", + bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), + exec: function (editor) { editor.duplicateSelection(); }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" + }, { + name: "sortlines", + description: "Sort lines", + bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), + exec: function (editor) { editor.sortLines(); }, + scrollIntoView: "selection", + multiSelectAction: "forEachLine" + }, { + name: "togglecomment", + description: "Toggle comment", + bindKey: bindKey("Ctrl-/", "Command-/"), + exec: function (editor) { editor.toggleCommentLines(); }, + multiSelectAction: "forEachLine", + scrollIntoView: "selectionPart" + }, { + name: "toggleBlockComment", + description: "Toggle block comment", + bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), + exec: function (editor) { editor.toggleBlockComment(); }, + multiSelectAction: "forEach", + scrollIntoView: "selectionPart" + }, { + name: "modifyNumberUp", + description: "Modify number up", + bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), + exec: function (editor) { editor.modifyNumber(1); }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" + }, { + name: "modifyNumberDown", + description: "Modify number down", + bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), + exec: function (editor) { editor.modifyNumber(-1); }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" + }, { + name: "replace", + description: "Replace", + bindKey: bindKey("Ctrl-H", "Command-Option-F"), + exec: function (editor) { + config.loadModule("ace/ext/searchbox", function (e) { e.Search(editor, true); }); + } + }, { + name: "undo", + description: "Undo", + bindKey: bindKey("Ctrl-Z", "Command-Z"), + exec: function (editor) { editor.undo(); } + }, { + name: "redo", + description: "Redo", + bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), + exec: function (editor) { editor.redo(); } + }, { + name: "copylinesup", + description: "Copy lines up", + bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), + exec: function (editor) { editor.copyLinesUp(); }, + scrollIntoView: "cursor" + }, { + name: "movelinesup", + description: "Move lines up", + bindKey: bindKey("Alt-Up", "Option-Up"), + exec: function (editor) { editor.moveLinesUp(); }, + scrollIntoView: "cursor" + }, { + name: "copylinesdown", + description: "Copy lines down", + bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), + exec: function (editor) { editor.copyLinesDown(); }, + scrollIntoView: "cursor" + }, { + name: "movelinesdown", + description: "Move lines down", + bindKey: bindKey("Alt-Down", "Option-Down"), + exec: function (editor) { editor.moveLinesDown(); }, + scrollIntoView: "cursor" + }, { + name: "del", + description: "Delete", + bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), + exec: function (editor) { editor.remove("right"); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "backspace", + description: "Backspace", + bindKey: bindKey("Shift-Backspace|Backspace", "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"), + exec: function (editor) { editor.remove("left"); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "cut_or_delete", + description: "Cut or delete", + bindKey: bindKey("Shift-Delete", null), + exec: function (editor) { + if (editor.selection.isEmpty()) { + editor.remove("left"); + } + else { + return false; + } + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removetolinestart", + description: "Remove to line start", + bindKey: bindKey("Alt-Backspace", "Command-Backspace"), + exec: function (editor) { editor.removeToLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removetolineend", + description: "Remove to line end", + bindKey: bindKey("Alt-Delete", "Ctrl-K|Command-Delete"), + exec: function (editor) { editor.removeToLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removetolinestarthard", + description: "Remove to line start hard", + bindKey: bindKey("Ctrl-Shift-Backspace", null), + exec: function (editor) { + var range = editor.selection.getRange(); + range.start.column = 0; + editor.session.remove(range); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removetolineendhard", + description: "Remove to line end hard", + bindKey: bindKey("Ctrl-Shift-Delete", null), + exec: function (editor) { + var range = editor.selection.getRange(); + range.end.column = Number.MAX_VALUE; + editor.session.remove(range); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removewordleft", + description: "Remove word left", + bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), + exec: function (editor) { editor.removeWordLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "removewordright", + description: "Remove word right", + bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), + exec: function (editor) { editor.removeWordRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "outdent", + description: "Outdent", + bindKey: bindKey("Shift-Tab", "Shift-Tab"), + exec: function (editor) { editor.blockOutdent(); }, + multiSelectAction: "forEach", + scrollIntoView: "selectionPart" + }, { + name: "indent", + description: "Indent", + bindKey: bindKey("Tab", "Tab"), + exec: function (editor) { editor.indent(); }, + multiSelectAction: "forEach", + scrollIntoView: "selectionPart" + }, { + name: "blockoutdent", + description: "Block outdent", + bindKey: bindKey("Ctrl-[", "Ctrl-["), + exec: function (editor) { editor.blockOutdent(); }, + multiSelectAction: "forEachLine", + scrollIntoView: "selectionPart" + }, { + name: "blockindent", + description: "Block indent", + bindKey: bindKey("Ctrl-]", "Ctrl-]"), + exec: function (editor) { editor.blockIndent(); }, + multiSelectAction: "forEachLine", + scrollIntoView: "selectionPart" + }, { + name: "insertstring", + description: "Insert string", + exec: function (editor, str) { editor.insert(str); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "inserttext", + description: "Insert text", + exec: function (editor, args) { + editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "splitline", + description: "Split line", + bindKey: bindKey(null, "Ctrl-O"), + exec: function (editor) { editor.splitLine(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "transposeletters", + description: "Transpose letters", + bindKey: bindKey("Alt-Shift-X", "Ctrl-T"), + exec: function (editor) { editor.transposeLetters(); }, + multiSelectAction: function (editor) { editor.transposeSelections(1); }, + scrollIntoView: "cursor" + }, { + name: "touppercase", + description: "To uppercase", + bindKey: bindKey("Ctrl-U", "Ctrl-U"), + exec: function (editor) { editor.toUpperCase(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "tolowercase", + description: "To lowercase", + bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), + exec: function (editor) { editor.toLowerCase(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "autoindent", + description: "Auto Indent", + bindKey: bindKey(null, null), + exec: function (editor) { editor.autoIndent(); }, + scrollIntoView: "animate" + }, { + name: "expandtoline", + description: "Expand to line", + bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"), + exec: function (editor) { + var range = editor.selection.getRange(); + range.start.column = range.end.column = 0; + range.end.row++; + editor.selection.setRange(range, false); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true + }, { + name: "openlink", + bindKey: bindKey("Ctrl+F3", "F3"), + exec: function (editor) { editor.openLink(); } + }, { + name: "joinlines", + description: "Join lines", + bindKey: bindKey(null, null), + exec: function (editor) { + var isBackwards = editor.selection.isBackwards(); + var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor(); + var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead(); + var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length; + var selectedText = editor.session.doc.getTextRange(editor.selection.getRange()); + var selectedCount = selectedText.replace(/\n\s*/, " ").length; + var insertLine = editor.session.doc.getLine(selectionStart.row); + for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) { + var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i))); + if (curLine.length !== 0) { + curLine = " " + curLine; + } + insertLine += curLine; + } + if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) { + insertLine += editor.session.doc.getNewLineCharacter(); + } + editor.clearSelection(); + editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine); + if (selectedCount > 0) { + editor.selection.moveCursorTo(selectionStart.row, selectionStart.column); + editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount); + } + else { + firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol; + editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol); + } + }, + multiSelectAction: "forEach", + readOnly: true + }, { + name: "invertSelection", + description: "Invert selection", + bindKey: bindKey(null, null), + exec: function (editor) { + var endRow = editor.session.doc.getLength() - 1; + var endCol = editor.session.doc.getLine(endRow).length; + var ranges = editor.selection.rangeList.ranges; + var newRanges = []; + if (ranges.length < 1) { + ranges = [editor.selection.getRange()]; + } + for (var i = 0; i < ranges.length; i++) { + if (i == (ranges.length - 1)) { + if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) { + newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol)); + } + } + if (i === 0) { + if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) { + newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column)); + } + } + else { + newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column)); + } + } + editor.exitMultiSelectMode(); + editor.clearSelection(); + for (var i = 0; i < newRanges.length; i++) { + editor.selection.addRange(newRanges[i], false); + } + }, + readOnly: true, + scrollIntoView: "none" + }, { + name: "addLineAfter", + description: "Add new line after the current line", + exec: function (editor) { + editor.selection.clearSelection(); + editor.navigateLineEnd(); + editor.insert("\n"); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "addLineBefore", + description: "Add new line before the current line", + exec: function (editor) { + editor.selection.clearSelection(); + var cursor = editor.getCursorPosition(); + editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE); + editor.insert("\n"); + if (cursor.row === 0) + editor.navigateUp(); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" + }, { + name: "openCommandPallete", + exec: function (editor) { + console.warn("This is an obsolete command. Please use `openCommandPalette` instead."); + editor.prompt({ $type: "commands" }); + }, + readOnly: true + }, { + name: "openCommandPalette", + description: "Open command palette", + bindKey: bindKey("F1", "F1"), + exec: function (editor) { + editor.prompt({ $type: "commands" }); + }, + readOnly: true + }, { + name: "modeSelect", + description: "Change language mode...", + bindKey: bindKey(null, null), + exec: function (editor) { + editor.prompt({ $type: "modes" }); + }, + readOnly: true + }]; +for (var i = 1; i < 9; i++) { + exports.commands.push({ + name: "foldToLevel" + i, + description: "Fold To Level " + i, + level: i, + exec: function (editor) { editor.session.foldToLevel(this.level); }, + scrollIntoView: "center", + readOnly: true + }); } -`, "",{"version":3,"sources":["webpack://./../history/style/index.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,cAAc;IACd,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;IAGI,YAAY;AAChB;;AAEA;IACI,WAAW;AACf","sourcesContent":[".history-toolbar {\n float: left;\n overflow: none;\n z-index: 3;\n position: absolute;\n}\n\n.history-toolbar .buttons {\n height: 30px;\n display: inline-block;\n margin-left: 8px;\n}\n\n.history-toolbar .buttons > input {\n height: 30px;\n}\n\n.history-toolbar .buttons > input[type=checkbox] {\n display: none\n}\n\n.history-toolbar .buttons > label, .history-toolbar > div > a {\n margin: 8px 8px 8px 0;\n}\n\n.history-toolbar .buttons > input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.history-toolbar .buttons > a.toollink,\n.history-toolbar .buttons > a.toollink:link,\n.history-toolbar .buttons > a.toollink:visited {\n color: black;\n}\n\n.history-toolbar .buttons > a.toollink:active {\n color: blue;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css": -/*!***********************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css ***! - \***********************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); -// Imports - - - -var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_3___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_4___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_5___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_6___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_URL_IMPORT_7___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E */ "data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E"), __webpack_require__.b); -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); -var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___); -var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___); -var ___CSS_LOADER_URL_REPLACEMENT_3___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_3___); -var ___CSS_LOADER_URL_REPLACEMENT_4___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_4___); -var ___CSS_LOADER_URL_REPLACEMENT_5___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_5___); -var ___CSS_LOADER_URL_REPLACEMENT_6___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_6___); -var ___CSS_LOADER_URL_REPLACEMENT_7___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_7___); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `/*! - * Bootstrap v4.0.0 (https://getbootstrap.com) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\\2014 \\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___})}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_2___})}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(${___CSS_LOADER_URL_REPLACEMENT_3___}) no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_4___})}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_5___})}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_6___})}.carousel-control-next-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_7___})}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}} -/*# sourceMappingURL=bootstrap.min.css.map */`, "",{"version":3,"sources":["webpack://./style/bootstrap.min.css"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.0.0 (https://getbootstrap.com)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\2014 \\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\"\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\n/*# sourceMappingURL=bootstrap.min.css.map */"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!./style/history.css": -/*!*****************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/history.css ***! - \*****************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css"); -// Imports +}); +ace.define("ace/keyboard/gutter_handler",["require","exports","module","ace/lib/keys","ace/mouse/default_gutter_handler"], function(require, exports, module){"use strict"; +var keys = require('../lib/keys'); +var GutterTooltip = require("../mouse/default_gutter_handler").GutterTooltip; +var GutterKeyboardHandler = /** @class */ (function () { + function GutterKeyboardHandler(editor) { + this.editor = editor; + this.gutterLayer = editor.renderer.$gutterLayer; + this.element = editor.renderer.$gutter; + this.lines = editor.renderer.$gutterLayer.$lines; + this.activeRowIndex = null; + this.activeLane = null; + this.annotationTooltip = new GutterTooltip(this.editor); + } + GutterKeyboardHandler.prototype.addListener = function () { + this.element.addEventListener("keydown", this.$onGutterKeyDown.bind(this)); + this.element.addEventListener("focusout", this.$blurGutter.bind(this)); + this.editor.on("mousewheel", this.$blurGutter.bind(this)); + }; + GutterKeyboardHandler.prototype.removeListener = function () { + this.element.removeEventListener("keydown", this.$onGutterKeyDown.bind(this)); + this.element.removeEventListener("focusout", this.$blurGutter.bind(this)); + this.editor.off("mousewheel", this.$blurGutter.bind(this)); + }; + GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) { + if (this.annotationTooltip.isOpen) { + e.preventDefault(); + if (e.keyCode === keys["escape"]) + this.annotationTooltip.hideTooltip(); + return; + } + if (e.target === this.element) { + if (e.keyCode != keys["enter"]) { + return; + } + e.preventDefault(); + var row = this.editor.getCursorPosition().row; + if (!this.editor.isRowVisible(row)) + this.editor.scrollToLine(row, true, true); + setTimeout( + function () { + var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row); + var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index); + var nearestAnnotationIndex = this.$findNearestAnnotation(index); + if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null) + return; + var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index); + if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) { + this.activeLane = "fold"; + this.activeRowIndex = nearestFoldLaneWidgetIndex; + if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) { + this.$focusCustomWidget(this.activeRowIndex); + return; + } + else { + this.$focusFoldWidget(this.activeRowIndex); + return; + } + } + else { + this.activeRowIndex = nearestAnnotationIndex; + this.activeLane = "annotation"; + this.$focusAnnotation(this.activeRowIndex); + return; + } + }.bind(this), 10); + return; + } + this.$handleGutterKeyboardInteraction(e); + setTimeout(function () { + this.editor._signal("gutterkeydown", new GutterKeyboardEvent(e, this)); + }.bind(this), 10); + }; + GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) { + if (e.keyCode === keys["tab"]) { + e.preventDefault(); + return; + } + if (e.keyCode === keys["escape"]) { + e.preventDefault(); + this.$blurGutter(); + this.element.focus(); + this.lane = null; + return; + } + if (e.keyCode === keys["up"]) { + e.preventDefault(); + switch (this.activeLane) { + case "fold": + this.$moveFoldWidgetUp(); + break; + case "annotation": + this.$moveAnnotationUp(); + break; + } + return; + } + if (e.keyCode === keys["down"]) { + e.preventDefault(); + switch (this.activeLane) { + case "fold": + this.$moveFoldWidgetDown(); + break; + case "annotation": + this.$moveAnnotationDown(); + break; + } + return; + } + if (e.keyCode === keys["left"]) { + e.preventDefault(); + this.$switchLane("annotation"); + return; + } + if (e.keyCode === keys["right"]) { + e.preventDefault(); + this.$switchLane("fold"); + return; + } + if (e.keyCode === keys["enter"] || e.keyCode === keys["space"]) { + e.preventDefault(); + switch (this.activeLane) { + case "fold": + var row = this.$rowIndexToRow(this.activeRowIndex); + var customWidget = this.editor.session.$gutterCustomWidgets[row]; + if (customWidget) { + if (customWidget.callbacks && customWidget.callbacks.onClick) { + customWidget.callbacks.onClick(e, row); + } + } + else if (this.gutterLayer.session.foldWidgets[row] === 'start') { + this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e); + setTimeout( + function () { + if (this.$rowIndexToRow(this.activeRowIndex) !== row) { + this.$blurFoldWidget(this.activeRowIndex); + this.activeRowIndex = this.$rowToRowIndex(row); + this.$focusFoldWidget(this.activeRowIndex); + } + }.bind(this), 10); + break; + } + else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') { + break; + } + return; + case "annotation": + var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2]; + var rect = gutterElement.getBoundingClientRect(); + var style = this.annotationTooltip.getElement().style; + style.left = rect.right + "px"; + style.top = rect.bottom + "px"; + this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex)); + break; + } + return; + } + }; + GutterKeyboardHandler.prototype.$blurGutter = function () { + if (this.activeRowIndex !== null) { + switch (this.activeLane) { + case "fold": + this.$blurFoldWidget(this.activeRowIndex); + this.$blurCustomWidget(this.activeRowIndex); + break; + case "annotation": + this.$blurAnnotation(this.activeRowIndex); + break; + } + } + if (this.annotationTooltip.isOpen) + this.annotationTooltip.hideTooltip(); + return; + }; + GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) { + var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); + var isIconVisible = this.$getFoldWidget(index).style.display !== "none"; + return isRowFullyVisible && isIconVisible; + }; + GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) { + var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); + var isIconVisible = !!this.$getCustomWidget(index); + return isRowFullyVisible && isIconVisible; + }; + GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) { + var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index)); + var isIconVisible = this.$getAnnotation(index).style.display !== "none"; + return isRowFullyVisible && isIconVisible; + }; + GutterKeyboardHandler.prototype.$getFoldWidget = function (index) { + var cell = this.lines.get(index); + var element = cell.element; + return element.childNodes[1]; + }; + GutterKeyboardHandler.prototype.$getCustomWidget = function (index) { + var cell = this.lines.get(index); + var element = cell.element; + return element.childNodes[3]; + }; + GutterKeyboardHandler.prototype.$getAnnotation = function (index) { + var cell = this.lines.get(index); + var element = cell.element; + return element.childNodes[2]; + }; + GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) { + if (this.$isCustomWidgetVisible(index)) + return index; + if (this.$isFoldWidgetVisible(index)) + return index; + var i = 0; + while (index - i > 0 || index + i < this.lines.getLength() - 1) { + i++; + if (index - i >= 0 && this.$isCustomWidgetVisible(index - i)) + return index - i; + if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i)) + return index + i; + if (index - i >= 0 && this.$isFoldWidgetVisible(index - i)) + return index - i; + if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i)) + return index + i; + } + return null; + }; + GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) { + if (this.$isAnnotationVisible(index)) + return index; + var i = 0; + while (index - i > 0 || index + i < this.lines.getLength() - 1) { + i++; + if (index - i >= 0 && this.$isAnnotationVisible(index - i)) + return index - i; + if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i)) + return index + i; + } + return null; + }; + GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) { + if (index == null) + return; + var foldWidget = this.$getFoldWidget(index); + foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName); + foldWidget.focus(); + }; + GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) { + if (index == null) + return; + var customWidget = this.$getCustomWidget(index); + if (customWidget) { + customWidget.classList.add(this.editor.renderer.keyboardFocusClassName); + customWidget.focus(); + } + }; + GutterKeyboardHandler.prototype.$focusAnnotation = function (index) { + if (index == null) + return; + var annotation = this.$getAnnotation(index); + annotation.classList.add(this.editor.renderer.keyboardFocusClassName); + annotation.focus(); + }; + GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) { + var foldWidget = this.$getFoldWidget(index); + foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName); + foldWidget.blur(); + }; + GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) { + var customWidget = this.$getCustomWidget(index); + if (customWidget) { + customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName); + customWidget.blur(); + } + }; + GutterKeyboardHandler.prototype.$blurAnnotation = function (index) { + var annotation = this.$getAnnotation(index); + annotation.classList.remove(this.editor.renderer.keyboardFocusClassName); + annotation.blur(); + }; + GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () { + var index = this.activeRowIndex; + while (index > 0) { + index--; + if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) { + this.$blurFoldWidget(this.activeRowIndex); + this.$blurCustomWidget(this.activeRowIndex); + this.activeRowIndex = index; + if (this.$isFoldWidgetVisible(index)) { + this.$focusFoldWidget(this.activeRowIndex); + } + else { + this.$focusCustomWidget(this.activeRowIndex); + } + return; + } + } + return; + }; + GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () { + var index = this.activeRowIndex; + while (index < this.lines.getLength() - 1) { + index++; + if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) { + this.$blurFoldWidget(this.activeRowIndex); + this.$blurCustomWidget(this.activeRowIndex); + this.activeRowIndex = index; + if (this.$isFoldWidgetVisible(index)) { + this.$focusFoldWidget(this.activeRowIndex); + } + else { + this.$focusCustomWidget(this.activeRowIndex); + } + return; + } + } + return; + }; + GutterKeyboardHandler.prototype.$moveAnnotationUp = function () { + var index = this.activeRowIndex; + while (index > 0) { + index--; + if (this.$isAnnotationVisible(index)) { + this.$blurAnnotation(this.activeRowIndex); + this.activeRowIndex = index; + this.$focusAnnotation(this.activeRowIndex); + return; + } + } + return; + }; + GutterKeyboardHandler.prototype.$moveAnnotationDown = function () { + var index = this.activeRowIndex; + while (index < this.lines.getLength() - 1) { + index++; + if (this.$isAnnotationVisible(index)) { + this.$blurAnnotation(this.activeRowIndex); + this.activeRowIndex = index; + this.$focusAnnotation(this.activeRowIndex); + return; + } + } + return; + }; + GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) { + if (num1 === null) + return num2; + if (num2 === null) + return num1; + return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2; + }; + GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) { + switch (desinationLane) { + case "annotation": + if (this.activeLane === "annotation") { + break; + } + var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex); + if (annotationIndex == null) { + break; + } + this.activeLane = "annotation"; + this.$blurFoldWidget(this.activeRowIndex); + this.$blurCustomWidget(this.activeRowIndex); + this.activeRowIndex = annotationIndex; + this.$focusAnnotation(this.activeRowIndex); + break; + case "fold": + if (this.activeLane === "fold") { + break; + } + var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex); + if (foldLaneWidgetIndex === null) { + break; + } + this.activeLane = "fold"; + this.$blurAnnotation(this.activeRowIndex); + this.activeRowIndex = foldLaneWidgetIndex; + if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) { + this.$focusCustomWidget(this.activeRowIndex); + } + else { + this.$focusFoldWidget(this.activeRowIndex); + } + break; + } + return; + }; + GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) { + var cell = this.lines.get(index); + if (cell) + return cell.row; + return null; + }; + GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) { + for (var i = 0; i < this.lines.getLength(); i++) { + var cell = this.lines.get(i); + if (cell.row == row) + return i; + } + return null; + }; + return GutterKeyboardHandler; +}()); +exports.GutterKeyboardHandler = GutterKeyboardHandler; +var GutterKeyboardEvent = /** @class */ (function () { + function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) { + this.gutterKeyboardHandler = gutterKeyboardHandler; + this.domEvent = domEvent; + } + GutterKeyboardEvent.prototype.getKey = function () { + return keys.keyCodeToString(this.domEvent.keyCode); + }; + GutterKeyboardEvent.prototype.getRow = function () { + return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex); + }; + GutterKeyboardEvent.prototype.isInAnnotationLane = function () { + return this.gutterKeyboardHandler.activeLane === "annotation"; + }; + GutterKeyboardEvent.prototype.isInFoldLane = function () { + return this.gutterKeyboardHandler.activeLane === "fold"; + }; + return GutterKeyboardEvent; +}()); +exports.GutterKeyboardEvent = GutterKeyboardEvent; -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `.history-content, -.history-content .sub-content, -.history-content .sub-content > div { - overflow: hidden !important; -} +}); -.history-content .filter .internal { - margin: 4px 8px; -} +ace.define("ace/editor",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator","ace/keyboard/gutter_handler","ace/config","ace/clipboard","ace/lib/keys","ace/lib/event","ace/tooltip"], function(require, exports, module){"use strict"; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var oop = require("./lib/oop"); +var dom = require("./lib/dom"); +var lang = require("./lib/lang"); +var useragent = require("./lib/useragent"); +var TextInput = require("./keyboard/textinput").TextInput; +var MouseHandler = require("./mouse/mouse_handler").MouseHandler; +var FoldHandler = require("./mouse/fold_handler").FoldHandler; +var KeyBinding = require("./keyboard/keybinding").KeyBinding; +var EditSession = require("./edit_session").EditSession; +var Search = require("./search").Search; +var Range = require("./range").Range; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var CommandManager = require("./commands/command_manager").CommandManager; +var defaultCommands = require("./commands/default_commands").commands; +var config = require("./config"); +var TokenIterator = require("./token_iterator").TokenIterator; +var GutterKeyboardHandler = require("./keyboard/gutter_handler").GutterKeyboardHandler; +var nls = require("./config").nls; +var clipboard = require("./clipboard"); +var keys = require('./lib/keys'); +var event = require("./lib/event"); +var HoverTooltip = require("./tooltip").HoverTooltip; +var Editor = /** @class */ (function () { + function Editor(renderer, session, options) { + this.id = "editor" + (++Editor.$uid); this.session; + this.$toDestroy = []; + var container = renderer.getContainerElement(); + this.container = container; + this.renderer = renderer; + this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); + if (typeof document == "object") { + this.textInput = new TextInput(renderer.getTextAreaContainer(), this); + this.renderer.textarea = this.textInput.getElement(); + this.$mouseHandler = new MouseHandler(this); + new FoldHandler(this); + } + this.keyBinding = new KeyBinding(this); + this.$search = new Search().set({ + wrap: true + }); + this.$historyTracker = this.$historyTracker.bind(this); + this.commands.on("exec", this.$historyTracker); + this.$initOperationListeners(); + this._$emitInputEvent = lang.delayedCall(function () { + this._signal("input", {}); + if (this.session && !this.session.destroyed) + this.session.bgTokenizer.scheduleStart(); + }.bind(this)); + this.on("change", function (_, _self) { + _self._$emitInputEvent.schedule(31); + }); + this.setSession(session || options && options.session || new EditSession("")); + config.resetOptions(this); + if (options) + this.setOptions(options); + config._signal("editor", this); + } + Editor.prototype.$initOperationListeners = function () { + this.commands.on("exec", this.startOperation.bind(this), true); + this.commands.on("afterExec", this.endOperation.bind(this), true); + }; + Editor.prototype.startOperation = function (commandEvent) { + this.session.startOperation(commandEvent); + }; + Editor.prototype.endOperation = function (e) { + this.session.endOperation(e); + }; + Editor.prototype.onStartOperation = function (commandEvent) { + this.curOp = this.session.curOp; + this.curOp.scrollTop = this.renderer.scrollTop; + this.prevOp = this.session.prevOp; + if (!commandEvent) { + this.previousCommand = null; + } + }; + Editor.prototype.onEndOperation = function (e) { + if (this.curOp && this.session) { + if (e && e.returnValue === false) { + this.curOp = null; + return; + } + this._signal("beforeEndOperation"); + if (!this.curOp) + return; + var command = this.curOp.command; + var scrollIntoView = command && command.scrollIntoView; + if (scrollIntoView) { + switch (scrollIntoView) { + case "center-animate": + scrollIntoView = "animate"; + case "center": + this.renderer.scrollCursorIntoView(null, 0.5); + break; + case "animate": + case "cursor": + this.renderer.scrollCursorIntoView(); + break; + case "selectionPart": + var range = this.selection.getRange(); + var config = this.renderer.layerConfig; + if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { + this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); + } + break; + default: + break; + } + if (scrollIntoView == "animate") + this.renderer.animateScrolling(this.curOp.scrollTop); + } + this.$lastSel = this.session.selection.toJSON(); + this.prevOp = this.curOp; + this.curOp = null; + } + }; + Editor.prototype.$historyTracker = function (e) { + if (!this.$mergeUndoDeltas) + return; + var prev = this.prevOp; + var mergeableCommands = this.$mergeableCommands; + var shouldMerge = prev.command && (e.command.name == prev.command.name); + if (e.command.name == "insertstring") { + var text = e.args; + if (this.mergeNextCommand === undefined) + this.mergeNextCommand = true; + shouldMerge = shouldMerge + && this.mergeNextCommand // previous command allows to coalesce with + && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type + this.mergeNextCommand = true; + } + else { + shouldMerge = shouldMerge + && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable + } + if (this.$mergeUndoDeltas != "always" + && Date.now() - this.sequenceStartTime > 2000) { + shouldMerge = false; // the sequence is too long + } + if (shouldMerge) + this.session.mergeUndoDeltas = true; + else if (mergeableCommands.indexOf(e.command.name) !== -1) + this.sequenceStartTime = Date.now(); + }; + Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) { + if (keyboardHandler && typeof keyboardHandler === "string" && keyboardHandler != "ace") { + this.$keybindingId = keyboardHandler; + var _self = this; + config.loadModule(["keybinding", keyboardHandler], function (module) { + if (_self.$keybindingId == keyboardHandler) + _self.keyBinding.setKeyboardHandler(module && module.handler); + cb && cb(); + }); + } + else { + this.$keybindingId = null; + this.keyBinding.setKeyboardHandler(keyboardHandler); + cb && cb(); + } + }; + Editor.prototype.getKeyboardHandler = function () { + return this.keyBinding.getKeyboardHandler(); + }; + Editor.prototype.setSession = function (session) { + if (this.session == session) + return; + if (this.curOp) + this.endOperation(); + this.curOp = {}; + var oldSession = this.session; + if (oldSession) { + this.session.off("change", this.$onDocumentChange); + this.session.off("changeMode", this.$onChangeMode); + this.session.off("tokenizerUpdate", this.$onTokenizerUpdate); + this.session.off("changeTabSize", this.$onChangeTabSize); + this.session.off("changeWrapLimit", this.$onChangeWrapLimit); + this.session.off("changeWrapMode", this.$onChangeWrapMode); + this.session.off("changeFold", this.$onChangeFold); + this.session.off("changeFrontMarker", this.$onChangeFrontMarker); + this.session.off("changeBackMarker", this.$onChangeBackMarker); + this.session.off("changeBreakpoint", this.$onChangeBreakpoint); + this.session.off("changeAnnotation", this.$onChangeAnnotation); + this.session.off("changeOverwrite", this.$onCursorChange); + this.session.off("changeScrollTop", this.$onScrollTopChange); + this.session.off("changeScrollLeft", this.$onScrollLeftChange); + this.session.off("startOperation", this.$onStartOperation); + this.session.off("endOperation", this.$onEndOperation); + var selection = this.session.getSelection(); + selection.off("changeCursor", this.$onCursorChange); + selection.off("changeSelection", this.$onSelectionChange); + } + this.session = session; + if (session) { + this.$onDocumentChange = this.onDocumentChange.bind(this); + session.on("change", this.$onDocumentChange); + this.renderer.setSession(session); + this.$onChangeMode = this.onChangeMode.bind(this); + session.on("changeMode", this.$onChangeMode); + this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); + session.on("tokenizerUpdate", this.$onTokenizerUpdate); + this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); + session.on("changeTabSize", this.$onChangeTabSize); + this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); + session.on("changeWrapLimit", this.$onChangeWrapLimit); + this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); + session.on("changeWrapMode", this.$onChangeWrapMode); + this.$onChangeFold = this.onChangeFold.bind(this); + session.on("changeFold", this.$onChangeFold); + this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); + this.session.on("changeFrontMarker", this.$onChangeFrontMarker); + this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); + this.session.on("changeBackMarker", this.$onChangeBackMarker); + this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); + this.session.on("changeBreakpoint", this.$onChangeBreakpoint); + this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); + this.session.on("changeAnnotation", this.$onChangeAnnotation); + this.$onCursorChange = this.onCursorChange.bind(this); + this.session.on("changeOverwrite", this.$onCursorChange); + this.$onScrollTopChange = this.onScrollTopChange.bind(this); + this.session.on("changeScrollTop", this.$onScrollTopChange); + this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); + this.session.on("changeScrollLeft", this.$onScrollLeftChange); + this.selection = session.getSelection(); + this.selection.on("changeCursor", this.$onCursorChange); + this.$onSelectionChange = this.onSelectionChange.bind(this); + this.selection.on("changeSelection", this.$onSelectionChange); + this.$onStartOperation = this.onStartOperation.bind(this); + this.session.on("startOperation", this.$onStartOperation); + this.$onEndOperation = this.onEndOperation.bind(this); + this.session.on("endOperation", this.$onEndOperation); + this.onChangeMode(); + this.onCursorChange(); + this.onScrollTopChange(); + this.onScrollLeftChange(); + this.onSelectionChange(); + this.onChangeFrontMarker(); + this.onChangeBackMarker(); + this.onChangeBreakpoint(); + this.onChangeAnnotation(); + this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); + this.renderer.updateFull(); + } + else { + this.selection = null; + this.renderer.setSession(session); + } + this._signal("changeSession", { + session: session, + oldSession: oldSession + }); + this.curOp = null; + oldSession && oldSession._signal("changeEditor", { oldEditor: this }); + if (oldSession) + oldSession.$editor = null; + session && session._signal("changeEditor", { editor: this }); + if (session) + session.$editor = this; + if (session && !session.destroyed) + session.bgTokenizer.scheduleStart(); + }; + Editor.prototype.getSession = function () { + return this.session; + }; + Editor.prototype.setValue = function (val, cursorPos) { + this.session.doc.setValue(val); + if (!cursorPos) + this.selectAll(); + else if (cursorPos == 1) + this.navigateFileEnd(); + else if (cursorPos == -1) + this.navigateFileStart(); + return val; + }; + Editor.prototype.getValue = function () { + return this.session.getValue(); + }; + Editor.prototype.getSelection = function () { + return this.selection; + }; + Editor.prototype.resize = function (force) { + this.renderer.onResize(force); + }; + Editor.prototype.setTheme = function (theme, cb) { + this.renderer.setTheme(theme, cb); + }; + Editor.prototype.getTheme = function () { + return this.renderer.getTheme(); + }; + Editor.prototype.setStyle = function (style, incluude) { + this.renderer.setStyle(style, incluude); + }; + Editor.prototype.unsetStyle = function (style) { + this.renderer.unsetStyle(style); + }; + Editor.prototype.getFontSize = function () { + return this.getOption("fontSize") || + dom.computedStyle(this.container).fontSize; + }; + Editor.prototype.setFontSize = function (size) { + this.setOption("fontSize", size); + }; + Editor.prototype.$highlightBrackets = function () { + if (this.$highlightPending) { + return; + } + var self = this; + this.$highlightPending = true; + setTimeout(function () { + self.$highlightPending = false; + var session = self.session; + if (!session || session.destroyed) + return; + if (session.$bracketHighlight) { + session.$bracketHighlight.markerIds.forEach(function (id) { + session.removeMarker(id); + }); + session.$bracketHighlight = null; + } + var pos = self.getCursorPosition(); + var handler = self.getKeyboardHandler(); + var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self); + var ranges = session.getMatchingBracketRanges(pos, isBackwards); + if (!ranges) { + var iterator = new TokenIterator(session, pos.row, pos.column); + var token = iterator.getCurrentToken(); + if (token && /\b(?:tag-open|tag-name)/.test(token.type)) { + var tagNamesRanges = session.getMatchingTags(pos); + if (tagNamesRanges) { + ranges = [ + tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName, + tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName + ]; + } + } + } + if (!ranges && session.$mode.getMatching) + ranges = session.$mode.getMatching(self.session); + if (!ranges) { + if (self.getHighlightIndentGuides()) + self.renderer.$textLayer.$highlightIndentGuide(); + return; + } + var markerType = "ace_bracket"; + if (!Array.isArray(ranges)) { + ranges = [ranges]; + } + else if (ranges.length == 1) { + markerType = "ace_error_bracket"; + } + if (ranges.length == 2) { + if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0) + ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)]; + else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0) + ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)]; + } + session.$bracketHighlight = { + ranges: ranges, + markerIds: ranges.map(function (range) { + return session.addMarker(range, markerType, "text"); + }) + }; + if (self.getHighlightIndentGuides()) + self.renderer.$textLayer.$highlightIndentGuide(); + }, 50); + }; + Editor.prototype.focus = function () { + this.textInput.focus(); + }; + Editor.prototype.isFocused = function () { + return this.textInput.isFocused(); + }; + Editor.prototype.blur = function () { + this.textInput.blur(); + }; + Editor.prototype.onFocus = function (e) { + if (this.$isFocused) + return; + this.$isFocused = true; + this.renderer.showCursor(); + this.renderer.visualizeFocus(); + this._emit("focus", e); + }; + Editor.prototype.onBlur = function (e) { + if (!this.$isFocused) + return; + this.$isFocused = false; + this.renderer.hideCursor(); + this.renderer.visualizeBlur(); + this._emit("blur", e); + }; + Editor.prototype.$cursorChange = function () { + this.renderer.updateCursor(); + this.$highlightBrackets(); + this.$updateHighlightActiveLine(); + }; + Editor.prototype.onDocumentChange = function (delta) { + var wrap = this.session.$useWrapMode; + var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity); + this.renderer.updateLines(delta.start.row, lastRow, wrap); + this._signal("change", delta); + this.$cursorChange(); + }; + Editor.prototype.onTokenizerUpdate = function (e) { + var rows = e.data; + this.renderer.updateLines(rows.first, rows.last); + }; + Editor.prototype.onScrollTopChange = function () { + this.renderer.scrollToY(this.session.getScrollTop()); + }; + Editor.prototype.onScrollLeftChange = function () { + this.renderer.scrollToX(this.session.getScrollLeft()); + }; + Editor.prototype.onCursorChange = function () { + this.$cursorChange(); + this._signal("changeSelection"); + }; + Editor.prototype.$updateHighlightActiveLine = function () { + var session = this.getSession(); + var highlight; + if (this.$highlightActiveLine) { + if (this.$selectionStyle != "line" || !this.selection.isMultiLine()) + highlight = this.getCursorPosition(); + if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty()) + highlight = false; + if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1)) + highlight = false; + } + if (session.$highlightLineMarker && !highlight) { + session.removeMarker(session.$highlightLineMarker.id); + session.$highlightLineMarker = null; + } + else if (!session.$highlightLineMarker && highlight) { + var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); + range.id = session.addMarker(range, "ace_active-line", "screenLine"); + session.$highlightLineMarker = range; + } + else if (highlight) { + session.$highlightLineMarker.start.row = highlight.row; + session.$highlightLineMarker.end.row = highlight.row; + session.$highlightLineMarker.start.column = highlight.column; + session._signal("changeBackMarker"); + } + }; + Editor.prototype.onSelectionChange = function (e) { + var session = this.session; + if (session.$selectionMarker) { + session.removeMarker(session.$selectionMarker); + } + session.$selectionMarker = null; + if (!this.selection.isEmpty()) { + var range = this.selection.getRange(); + var style = this.getSelectionStyle(); + session.$selectionMarker = session.addMarker(range, "ace_selection", style); + } + else { + this.$updateHighlightActiveLine(); + } + var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp(); + this.session.highlight(re); + this._signal("changeSelection"); + }; + Editor.prototype.$getSelectionHighLightRegexp = function () { + var session = this.session; + var selection = this.getSelectionRange(); + if (selection.isEmpty() || selection.isMultiLine()) + return; + var startColumn = selection.start.column; + var endColumn = selection.end.column; + var line = session.getLine(selection.start.row); + var needle = line.substring(startColumn, endColumn); + if (needle.length > 5000 || !/[\w\d]/.test(needle)) + return; + var re = this.$search.$assembleRegExp({ + wholeWord: true, + caseSensitive: true, + needle: needle + }); + var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1); + if (!re.test(wordWithBoundary)) + return; + return re; + }; + Editor.prototype.onChangeFrontMarker = function () { + this.renderer.updateFrontMarkers(); + }; + Editor.prototype.onChangeBackMarker = function () { + this.renderer.updateBackMarkers(); + }; + Editor.prototype.onChangeBreakpoint = function () { + this.renderer.updateBreakpoints(); + }; + Editor.prototype.onChangeAnnotation = function () { + this.renderer.setAnnotations(this.session.getAnnotations()); + }; + Editor.prototype.onChangeMode = function (e) { + this.renderer.updateText(); + this._emit("changeMode", e); + }; + Editor.prototype.onChangeWrapLimit = function () { + this.renderer.updateFull(); + }; + Editor.prototype.onChangeWrapMode = function () { + this.renderer.onResize(true); + }; + Editor.prototype.onChangeFold = function () { + this.$updateHighlightActiveLine(); + this.renderer.updateFull(); + }; + Editor.prototype.getSelectedText = function () { + return this.session.getTextRange(this.getSelectionRange()); + }; + Editor.prototype.getCopyText = function () { + var text = this.getSelectedText(); + var nl = this.session.doc.getNewLineCharacter(); + var copyLine = false; + if (!text && this.$copyWithEmptySelection) { + copyLine = true; + var ranges = this.selection.getAllRanges(); + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (i && ranges[i - 1].start.row == range.start.row) + continue; + text += this.session.getLine(range.start.row) + nl; + } + } + var e = { text: text }; + this._signal("copy", e); + clipboard.lineMode = copyLine ? e.text : false; + return e.text; + }; + Editor.prototype.onCopy = function () { + this.commands.exec("copy", this); + }; + Editor.prototype.onCut = function () { + this.commands.exec("cut", this); + }; + Editor.prototype.onPaste = function (text, event) { + var e = { text: text, event: event }; + this.commands.exec("paste", this, e); + }; + Editor.prototype.$handlePaste = function (e) { + if (typeof e == "string") + e = { text: e }; + this._signal("paste", e); + var text = e.text; + var lineMode = text === clipboard.lineMode; + var session = this.session; + if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { + if (lineMode) + session.insert({ row: this.selection.lead.row, column: 0 }, text); + else + this.insert(text); + } + else if (lineMode) { + this.selection.rangeList.ranges.forEach(function (range) { + session.insert({ row: range.start.row, column: 0 }, text); + }); + } + else { + var lines = text.split(/\r\n|\r|\n/); + var ranges = this.selection.rangeList.ranges; + var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]); + if (lines.length != ranges.length || isFullLine) + return this.commands.exec("insertstring", this, text); + for (var i = ranges.length; i--;) { + var range = ranges[i]; + if (!range.isEmpty()) + session.remove(range); + session.insert(range.start, lines[i]); + } + } + }; + Editor.prototype.execCommand = function (command, args) { + return this.commands.exec(command, this, args); + }; + Editor.prototype.insert = function (text, pasted) { + var session = this.session; + var mode = session.getMode(); + var cursor = this.getCursorPosition(); + if (this.getBehavioursEnabled() && !pasted) { + var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); + if (transform) { + if (text !== transform.text) { + if (!this.inVirtualSelectionMode) { + this.session.mergeUndoDeltas = false; + this.mergeNextCommand = false; + } + } + text = transform.text; + } + } + if (text == "\t") + text = this.session.getTabString(); + if (!this.selection.isEmpty()) { + var range = this.getSelectionRange(); + cursor = this.session.remove(range); + this.clearSelection(); + } + else if (this.session.getOverwrite() && text.indexOf("\n") == -1) { + var range = Range.fromPoints(cursor, cursor); + range.end.column += text.length; + this.session.remove(range); + } + if (text == "\n" || text == "\r\n") { + var line = session.getLine(cursor.row); + if (cursor.column > line.search(/\S|$/)) { + var d = line.substr(cursor.column).search(/\S|$/); + session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); + } + } + this.clearSelection(); + var start = cursor.column; + var lineState = session.getState(cursor.row); + var line = session.getLine(cursor.row); + var shouldOutdent = mode.checkOutdent(lineState, line, text); + session.insert(cursor, text); + if (transform && transform.selection) { + if (transform.selection.length == 2) { // Transform relative to the current column + this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1])); + } + else { // Transform relative to the current row. + this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3])); + } + } + if (this.$enableAutoIndent) { + if (session.getDocument().isNewLine(text)) { + var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); + session.insert({ row: cursor.row + 1, column: 0 }, lineIndent); + } + if (shouldOutdent) + mode.autoOutdent(lineState, session, cursor.row); + } + }; + Editor.prototype.autoIndent = function () { + var session = this.session; + var mode = session.getMode(); + var ranges = this.selection.isEmpty() + ? [new Range(0, 0, session.doc.getLength() - 1, 0)] + : this.selection.getAllRanges(); + var prevLineState = ""; + var prevLine = ""; + var lineIndent = ""; + var tab = session.getTabString(); + for (var i = 0; i < ranges.length; i++) { + var startRow = ranges[i].start.row; + var endRow = ranges[i].end.row; + for (var row = startRow; row <= endRow; row++) { + if (row > 0) { + prevLineState = session.getState(row - 1); + prevLine = session.getLine(row - 1); + lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab); + } + var line = session.getLine(row); + var currIndent = mode.$getIndent(line); + if (lineIndent !== currIndent) { + if (currIndent.length > 0) { + var range = new Range(row, 0, row, currIndent.length); + session.remove(range); + } + if (lineIndent.length > 0) { + session.insert({ row: row, column: 0 }, lineIndent); + } + } + mode.autoOutdent(prevLineState, session, row); + } + } + }; + Editor.prototype.onTextInput = function (text, composition) { + if (!composition) + return this.keyBinding.onTextInput(text); + this.startOperation({ command: { name: "insertstring" } }); + var applyComposition = this.applyComposition.bind(this, text, composition); + if (this.selection.rangeCount) + this.forEachSelection(applyComposition); + else + applyComposition(); + this.endOperation(); + }; + Editor.prototype.applyComposition = function (text, composition) { + if (composition.extendLeft || composition.extendRight) { + var r = this.selection.getRange(); + r.start.column -= composition.extendLeft; + r.end.column += composition.extendRight; + if (r.start.column < 0) { + r.start.row--; + r.start.column += this.session.getLine(r.start.row).length + 1; + } + this.selection.setRange(r); + if (!text && !r.isEmpty()) + this.remove(); + } + if (text || !this.selection.isEmpty()) + this.insert(text, true); + if (composition.restoreStart || composition.restoreEnd) { + var r = this.selection.getRange(); + r.start.column -= composition.restoreStart; + r.end.column -= composition.restoreEnd; + this.selection.setRange(r); + } + }; + Editor.prototype.onCommandKey = function (e, hashId, keyCode) { + return this.keyBinding.onCommandKey(e, hashId, keyCode); + }; + Editor.prototype.setOverwrite = function (overwrite) { + this.session.setOverwrite(overwrite); + }; + Editor.prototype.getOverwrite = function () { + return this.session.getOverwrite(); + }; + Editor.prototype.toggleOverwrite = function () { + this.session.toggleOverwrite(); + }; + Editor.prototype.setScrollSpeed = function (speed) { + this.setOption("scrollSpeed", speed); + }; + Editor.prototype.getScrollSpeed = function () { + return this.getOption("scrollSpeed"); + }; + Editor.prototype.setDragDelay = function (dragDelay) { + this.setOption("dragDelay", dragDelay); + }; + Editor.prototype.getDragDelay = function () { + return this.getOption("dragDelay"); + }; + Editor.prototype.setSelectionStyle = function (val) { + this.setOption("selectionStyle", val); + }; + Editor.prototype.getSelectionStyle = function () { + return this.getOption("selectionStyle"); + }; + Editor.prototype.setHighlightActiveLine = function (shouldHighlight) { + this.setOption("highlightActiveLine", shouldHighlight); + }; + Editor.prototype.getHighlightActiveLine = function () { + return this.getOption("highlightActiveLine"); + }; + Editor.prototype.setHighlightGutterLine = function (shouldHighlight) { + this.setOption("highlightGutterLine", shouldHighlight); + }; + Editor.prototype.getHighlightGutterLine = function () { + return this.getOption("highlightGutterLine"); + }; + Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) { + this.setOption("highlightSelectedWord", shouldHighlight); + }; + Editor.prototype.getHighlightSelectedWord = function () { + return this.$highlightSelectedWord; + }; + Editor.prototype.setAnimatedScroll = function (shouldAnimate) { + this.renderer.setAnimatedScroll(shouldAnimate); + }; + Editor.prototype.getAnimatedScroll = function () { + return this.renderer.getAnimatedScroll(); + }; + Editor.prototype.setShowInvisibles = function (showInvisibles) { + this.renderer.setShowInvisibles(showInvisibles); + }; + Editor.prototype.getShowInvisibles = function () { + return this.renderer.getShowInvisibles(); + }; + Editor.prototype.setDisplayIndentGuides = function (display) { + this.renderer.setDisplayIndentGuides(display); + }; + Editor.prototype.getDisplayIndentGuides = function () { + return this.renderer.getDisplayIndentGuides(); + }; + Editor.prototype.setHighlightIndentGuides = function (highlight) { + this.renderer.setHighlightIndentGuides(highlight); + }; + Editor.prototype.getHighlightIndentGuides = function () { + return this.renderer.getHighlightIndentGuides(); + }; + Editor.prototype.setShowPrintMargin = function (showPrintMargin) { + this.renderer.setShowPrintMargin(showPrintMargin); + }; + Editor.prototype.getShowPrintMargin = function () { + return this.renderer.getShowPrintMargin(); + }; + Editor.prototype.setPrintMarginColumn = function (showPrintMargin) { + this.renderer.setPrintMarginColumn(showPrintMargin); + }; + Editor.prototype.getPrintMarginColumn = function () { + return this.renderer.getPrintMarginColumn(); + }; + Editor.prototype.setReadOnly = function (readOnly) { + this.setOption("readOnly", readOnly); + }; + Editor.prototype.getReadOnly = function () { + return this.getOption("readOnly"); + }; + Editor.prototype.setBehavioursEnabled = function (enabled) { + this.setOption("behavioursEnabled", enabled); + }; + Editor.prototype.getBehavioursEnabled = function () { + return this.getOption("behavioursEnabled"); + }; + Editor.prototype.setWrapBehavioursEnabled = function (enabled) { + this.setOption("wrapBehavioursEnabled", enabled); + }; + Editor.prototype.getWrapBehavioursEnabled = function () { + return this.getOption("wrapBehavioursEnabled"); + }; + Editor.prototype.setShowFoldWidgets = function (show) { + this.setOption("showFoldWidgets", show); + }; + Editor.prototype.getShowFoldWidgets = function () { + return this.getOption("showFoldWidgets"); + }; + Editor.prototype.setFadeFoldWidgets = function (fade) { + this.setOption("fadeFoldWidgets", fade); + }; + Editor.prototype.getFadeFoldWidgets = function () { + return this.getOption("fadeFoldWidgets"); + }; + Editor.prototype.remove = function (dir) { + if (this.selection.isEmpty()) { + if (dir == "left") + this.selection.selectLeft(); + else + this.selection.selectRight(); + } + var range = this.getSelectionRange(); + if (this.getBehavioursEnabled()) { + var session = this.session; + var state = session.getState(range.start.row); + var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); + if (range.end.column === 0) { + var text = session.getTextRange(range); + if (text[text.length - 1] == "\n") { + var line = session.getLine(range.end.row); + if (/^\s+$/.test(line)) { + range.end.column = line.length; + } + } + } + if (new_range) + range = new_range; + } + this.session.remove(range); + this.clearSelection(); + }; + Editor.prototype.removeWordRight = function () { + if (this.selection.isEmpty()) + this.selection.selectWordRight(); + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + Editor.prototype.removeWordLeft = function () { + if (this.selection.isEmpty()) + this.selection.selectWordLeft(); + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + Editor.prototype.removeToLineStart = function () { + if (this.selection.isEmpty()) + this.selection.selectLineStart(); + if (this.selection.isEmpty()) + this.selection.selectLeft(); + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + Editor.prototype.removeToLineEnd = function () { + if (this.selection.isEmpty()) + this.selection.selectLineEnd(); + var range = this.getSelectionRange(); + if (range.start.column == range.end.column && range.start.row == range.end.row) { + range.end.column = 0; + range.end.row++; + } + this.session.remove(range); + this.clearSelection(); + }; + Editor.prototype.splitLine = function () { + if (!this.selection.isEmpty()) { + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + } + var cursor = this.getCursorPosition(); + this.insert("\n"); + this.moveCursorToPosition(cursor); + }; + Editor.prototype.setGhostText = function (text, position) { + this.renderer.setGhostText(text, position); + }; + Editor.prototype.removeGhostText = function () { + this.renderer.removeGhostText(); + }; + Editor.prototype.transposeLetters = function () { + if (!this.selection.isEmpty()) { + return; + } + var cursor = this.getCursorPosition(); + var column = cursor.column; + if (column === 0) + return; + var line = this.session.getLine(cursor.row); + var swap, range; + if (column < line.length) { + swap = line.charAt(column) + line.charAt(column - 1); + range = new Range(cursor.row, column - 1, cursor.row, column + 1); + } + else { + swap = line.charAt(column - 1) + line.charAt(column - 2); + range = new Range(cursor.row, column - 2, cursor.row, column); + } + this.session.replace(range, swap); + this.session.selection.moveToPosition(range.end); + }; + Editor.prototype.toLowerCase = function () { + var originalRange = this.getSelectionRange(); + if (this.selection.isEmpty()) { + this.selection.selectWord(); + } + var range = this.getSelectionRange(); + var text = this.session.getTextRange(range); + this.session.replace(range, text.toLowerCase()); + this.selection.setSelectionRange(originalRange); + }; + Editor.prototype.toUpperCase = function () { + var originalRange = this.getSelectionRange(); + if (this.selection.isEmpty()) { + this.selection.selectWord(); + } + var range = this.getSelectionRange(); + var text = this.session.getTextRange(range); + this.session.replace(range, text.toUpperCase()); + this.selection.setSelectionRange(originalRange); + }; + Editor.prototype.indent = function () { + var session = this.session; + var range = this.getSelectionRange(); + if (range.start.row < range.end.row) { + var rows = this.$getSelectedRows(); + session.indentRows(rows.first, rows.last, "\t"); + return; + } + else if (range.start.column < range.end.column) { + var text = session.getTextRange(range); + if (!/^\s+$/.test(text)) { + var rows = this.$getSelectedRows(); + session.indentRows(rows.first, rows.last, "\t"); + return; + } + } + var line = session.getLine(range.start.row); + var position = range.start; + var size = session.getTabSize(); + var column = session.documentToScreenColumn(position.row, position.column); + if (this.session.getUseSoftTabs()) { + var count = (size - column % size); + var indentString = lang.stringRepeat(" ", count); + } + else { + var count = column % size; + while (line[range.start.column - 1] == " " && count) { + range.start.column--; + count--; + } + this.selection.setSelectionRange(range); + indentString = "\t"; + } + return this.insert(indentString); + }; + Editor.prototype.blockIndent = function () { + var rows = this.$getSelectedRows(); + this.session.indentRows(rows.first, rows.last, "\t"); + }; + Editor.prototype.blockOutdent = function () { + var selection = this.session.getSelection(); + this.session.outdentRows(selection.getRange()); + }; + Editor.prototype.sortLines = function () { + var rows = this.$getSelectedRows(); + var session = this.session; + var lines = []; + for (var i = rows.first; i <= rows.last; i++) + lines.push(session.getLine(i)); + lines.sort(function (a, b) { + if (a.toLowerCase() < b.toLowerCase()) + return -1; + if (a.toLowerCase() > b.toLowerCase()) + return 1; + return 0; + }); + var deleteRange = new Range(0, 0, 0, 0); + for (var i = rows.first; i <= rows.last; i++) { + var line = session.getLine(i); + deleteRange.start.row = i; + deleteRange.end.row = i; + deleteRange.end.column = line.length; + session.replace(deleteRange, lines[i - rows.first]); + } + }; + Editor.prototype.toggleCommentLines = function () { + var state = this.session.getState(this.getCursorPosition().row); + var rows = this.$getSelectedRows(); + this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); + }; + Editor.prototype.toggleBlockComment = function () { + var cursor = this.getCursorPosition(); + var state = this.session.getState(cursor.row); + var range = this.getSelectionRange(); + this.session.getMode().toggleBlockComment(state, this.session, range, cursor); + }; + Editor.prototype.getNumberAt = function (row, column) { + var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g; + _numberRx.lastIndex = 0; + var s = this.session.getLine(row); + while (_numberRx.lastIndex < column) { + var m = _numberRx.exec(s); + if (m.index <= column && m.index + m[0].length >= column) { + var number = { + value: m[0], + start: m.index, + end: m.index + m[0].length + }; + return number; + } + } + return null; + }; + Editor.prototype.modifyNumber = function (amount) { + var row = this.selection.getCursor().row; + var column = this.selection.getCursor().column; + var charRange = new Range(row, column - 1, row, column); + var c = this.session.getTextRange(charRange); + if (!isNaN(parseFloat(c)) && isFinite(c)) { + var nr = this.getNumberAt(row, column); + if (nr) { + var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; + var decimals = nr.start + nr.value.length - fp; + var t = parseFloat(nr.value); + t *= Math.pow(10, decimals); + if (fp !== nr.end && column < fp) { + amount *= Math.pow(10, nr.end - column - 1); + } + else { + amount *= Math.pow(10, nr.end - column); + } + t += amount; + t /= Math.pow(10, decimals); + var nnr = t.toFixed(decimals); + var replaceRange = new Range(row, nr.start, row, nr.end); + this.session.replace(replaceRange, nnr); + this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length)); + } + } + else { + this.toggleWord(); + } + }; + Editor.prototype.toggleWord = function () { + var row = this.selection.getCursor().row; + var column = this.selection.getCursor().column; + this.selection.selectWord(); + var currentState = this.getSelectedText(); + var currWordStart = this.selection.getWordRange().start.column; + var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\s/); + var delta = column - currWordStart - 1; + if (delta < 0) + delta = 0; + var curLength = 0, itLength = 0; + var that = this; + if (currentState.match(/[A-Za-z0-9_]+/)) { + wordParts.forEach(function (item, i) { + itLength = curLength + item.length; + if (delta >= curLength && delta <= itLength) { + currentState = item; + that.selection.clearSelection(); + that.moveCursorTo(row, curLength + currWordStart); + that.selection.selectTo(row, itLength + currWordStart); + } + curLength = itLength; + }); + } + var wordPairs = this.$toggleWordPairs; + var reg; + for (var i = 0; i < wordPairs.length; i++) { + var item = wordPairs[i]; + for (var j = 0; j <= 1; j++) { + var negate = +!j; + var firstCondition = currentState.match(new RegExp('^\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\s?$', 'i')); + if (firstCondition) { + var secondCondition = currentState.match(new RegExp('([_]|^|\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\s)', 'g')); + if (secondCondition) { + reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) { + var res = item[negate]; + if (result.toUpperCase() == result) { + res = res.toUpperCase(); + } + else if (result.charAt(0).toUpperCase() == result.charAt(0)) { + res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1); + } + return res; + }); + this.insert(reg); + reg = ""; + } + } + } + } + }; + Editor.prototype.findLinkAt = function (row, column) { + var e_1, _a; + var line = this.session.getLine(row); + var wordParts = line.split(/((?:https?|ftp):\/\/[\S]+)/); + var columnPosition = column; + if (columnPosition < 0) + columnPosition = 0; + var previousPosition = 0, currentPosition = 0, match; + try { + for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) { + var item = wordParts_1_1.value; + currentPosition = previousPosition + item.length; + if (columnPosition >= previousPosition && columnPosition <= currentPosition) { + if (item.match(/((?:https?|ftp):\/\/[\S]+)/)) { + match = item.replace(/[\s:.,'";}\]]+$/, ""); + break; + } + } + previousPosition = currentPosition; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1); + } + finally { if (e_1) throw e_1.error; } + } + return match; + }; + Editor.prototype.openLink = function () { + var cursor = this.selection.getCursor(); + var url = this.findLinkAt(cursor.row, cursor.column); + if (url) + window.open(url, '_blank'); + return url != null; + }; + Editor.prototype.removeLines = function () { + var rows = this.$getSelectedRows(); + this.session.removeFullLines(rows.first, rows.last); + this.clearSelection(); + }; + Editor.prototype.duplicateSelection = function () { + var sel = this.selection; + var doc = this.session; + var range = sel.getRange(); + var reverse = sel.isBackwards(); + if (range.isEmpty()) { + var row = range.start.row; + doc.duplicateLines(row, row); + } + else { + var point = reverse ? range.start : range.end; + var endPoint = doc.insert(point, doc.getTextRange(range)); + range.start = point; + range.end = endPoint; + sel.setSelectionRange(range, reverse); + } + }; + Editor.prototype.moveLinesDown = function () { + this.$moveLines(1, false); + }; + Editor.prototype.moveLinesUp = function () { + this.$moveLines(-1, false); + }; + Editor.prototype.moveText = function (range, toPosition, copy) { + return this.session.moveText(range, toPosition, copy); + }; + Editor.prototype.copyLinesUp = function () { + this.$moveLines(-1, true); + }; + Editor.prototype.copyLinesDown = function () { + this.$moveLines(1, true); + }; + Editor.prototype.$moveLines = function (dir, copy) { + var rows, moved; + var selection = this.selection; + if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { + var range = selection.toOrientedRange(); + rows = this.$getSelectedRows(range); + moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir); + if (copy && dir == -1) + moved = 0; + range.moveBy(moved, 0); + selection.fromOrientedRange(range); + } + else { + var ranges = selection.rangeList.ranges; + selection.rangeList.detach(this.session); + this.inVirtualSelectionMode = true; + var diff = 0; + var totalDiff = 0; + var l = ranges.length; + for (var i = 0; i < l; i++) { + var rangeIndex = i; + ranges[i].moveBy(diff, 0); + rows = this.$getSelectedRows(ranges[i]); + var first = rows.first; + var last = rows.last; + while (++i < l) { + if (totalDiff) + ranges[i].moveBy(totalDiff, 0); + var subRows = this.$getSelectedRows(ranges[i]); + if (copy && subRows.first != last) + break; + else if (!copy && subRows.first > last + 1) + break; + last = subRows.last; + } + i--; + diff = this.session.$moveLines(first, last, copy ? 0 : dir); + if (copy && dir == -1) + rangeIndex = i + 1; + while (rangeIndex <= i) { + ranges[rangeIndex].moveBy(diff, 0); + rangeIndex++; + } + if (!copy) + diff = 0; + totalDiff += diff; + } + selection.fromOrientedRange(selection.ranges[0]); + selection.rangeList.attach(this.session); + this.inVirtualSelectionMode = false; + } + }; + Editor.prototype.$getSelectedRows = function (range) { + range = (range || this.getSelectionRange()).collapseRows(); + return { + first: this.session.getRowFoldStart(range.start.row), + last: this.session.getRowFoldEnd(range.end.row) + }; + }; + Editor.prototype.onCompositionStart = function (compositionState) { + this.renderer.showComposition(compositionState); + }; + Editor.prototype.onCompositionUpdate = function (text) { + this.renderer.setCompositionText(text); + }; + Editor.prototype.onCompositionEnd = function () { + this.renderer.hideComposition(); + }; + Editor.prototype.getFirstVisibleRow = function () { + return this.renderer.getFirstVisibleRow(); + }; + Editor.prototype.getLastVisibleRow = function () { + return this.renderer.getLastVisibleRow(); + }; + Editor.prototype.isRowVisible = function (row) { + return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); + }; + Editor.prototype.isRowFullyVisible = function (row) { + return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); + }; + Editor.prototype.$getVisibleRowCount = function () { + return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; + }; + Editor.prototype.$moveByPage = function (dir, select) { + var renderer = this.renderer; + var config = this.renderer.layerConfig; + var rows = dir * Math.floor(config.height / config.lineHeight); + if (select === true) { + this.selection.$moveSelection(function () { + this.moveCursorBy(rows, 0); + }); + } + else if (select === false) { + this.selection.moveCursorBy(rows, 0); + this.selection.clearSelection(); + } + var scrollTop = renderer.scrollTop; + renderer.scrollBy(0, rows * config.lineHeight); + if (select != null) + renderer.scrollCursorIntoView(null, 0.5); + renderer.animateScrolling(scrollTop); + }; + Editor.prototype.selectPageDown = function () { + this.$moveByPage(1, true); + }; + Editor.prototype.selectPageUp = function () { + this.$moveByPage(-1, true); + }; + Editor.prototype.gotoPageDown = function () { + this.$moveByPage(1, false); + }; + Editor.prototype.gotoPageUp = function () { + this.$moveByPage(-1, false); + }; + Editor.prototype.scrollPageDown = function () { + this.$moveByPage(1); + }; + Editor.prototype.scrollPageUp = function () { + this.$moveByPage(-1); + }; + Editor.prototype.scrollToRow = function (row) { + this.renderer.scrollToRow(row); + }; + Editor.prototype.scrollToLine = function (line, center, animate, callback) { + this.renderer.scrollToLine(line, center, animate, callback); + }; + Editor.prototype.centerSelection = function () { + var range = this.getSelectionRange(); + var pos = { + row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), + column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) + }; + this.renderer.alignCursor(pos, 0.5); + }; + Editor.prototype.getCursorPosition = function () { + return this.selection.getCursor(); + }; + Editor.prototype.getCursorPositionScreen = function () { + return this.session.documentToScreenPosition(this.getCursorPosition()); + }; + Editor.prototype.getSelectionRange = function () { + return this.selection.getRange(); + }; + Editor.prototype.selectAll = function () { + this.selection.selectAll(); + }; + Editor.prototype.clearSelection = function () { + this.selection.clearSelection(); + }; + Editor.prototype.moveCursorTo = function (row, column) { + this.selection.moveCursorTo(row, column); + }; + Editor.prototype.moveCursorToPosition = function (pos) { + this.selection.moveCursorToPosition(pos); + }; + Editor.prototype.jumpToMatching = function (select, expand) { + var cursor = this.getCursorPosition(); + var iterator = new TokenIterator(this.session, cursor.row, cursor.column); + var prevToken = iterator.getCurrentToken(); + var tokenCount = 0; + if (prevToken && prevToken.type.indexOf('tag-name') !== -1) { + prevToken = iterator.stepBackward(); + } + var token = prevToken || iterator.stepForward(); + if (!token) + return; + var matchType; + var found = false; + var depth = {}; + var i = cursor.column - token.start; + var bracketType; + var brackets = { + ")": "(", + "(": "(", + "]": "[", + "[": "[", + "{": "{", + "}": "{" + }; + do { + if (token.value.match(/[{}()\[\]]/g)) { + for (; i < token.value.length && !found; i++) { + if (!brackets[token.value[i]]) { + continue; + } + bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen"); + if (isNaN(depth[bracketType])) { + depth[bracketType] = 0; + } + switch (token.value[i]) { + case '(': + case '[': + case '{': + depth[bracketType]++; + break; + case ')': + case ']': + case '}': + depth[bracketType]--; + if (depth[bracketType] === -1) { + matchType = 'bracket'; + found = true; + } + break; + } + } + } + else if (token.type.indexOf('tag-name') !== -1) { + if (isNaN(depth[token.value])) { + depth[token.value] = 0; + } + if (prevToken.value === '<' && tokenCount > 1) { + depth[token.value]++; + } + else if (prevToken.value === '= 0; --i) { + if (this.$tryReplace(ranges[i], replacement)) { + replaced++; + } + } + this.selection.setSelectionRange(selection); + return replaced; + }; + Editor.prototype.$tryReplace = function (range, replacement) { + var input = this.session.getTextRange(range); + replacement = this.$search.replace(input, replacement); + if (replacement !== null) { + range.end = this.session.replace(range, replacement); + return range; + } + else { + return null; + } + }; + Editor.prototype.getLastSearchOptions = function () { + return this.$search.getOptions(); + }; + Editor.prototype.find = function (needle, options, animate) { + if (!options) + options = {}; + if (typeof needle == "string" || needle instanceof RegExp) + options.needle = needle; + else if (typeof needle == "object") + oop.mixin(options, needle); + var range = this.selection.getRange(); + if (options.needle == null) { + needle = this.session.getTextRange(range) + || this.$search.$options.needle; + if (!needle) { + range = this.session.getWordRange(range.start.row, range.start.column); + needle = this.session.getTextRange(range); + } + this.$search.set({ needle: needle }); + } + this.$search.set(options); + if (!options.start) + this.$search.set({ start: range }); + var newRange = this.$search.find(this.session); + if (options.preventScroll) + return newRange; + if (newRange) { + this.revealRange(newRange, animate); + return newRange; + } + if (options.backwards) + range.start = range.end; + else + range.end = range.start; + this.selection.setRange(range); + }; + Editor.prototype.findNext = function (options, animate) { + this.find({ skipCurrent: true, backwards: false }, options, animate); + }; + Editor.prototype.findPrevious = function (options, animate) { + this.find(options, { skipCurrent: true, backwards: true }, animate); + }; + Editor.prototype.revealRange = function (range, animate) { + this.session.unfold(range); + this.selection.setSelectionRange(range); + var scrollTop = this.renderer.scrollTop; + this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); + if (animate !== false) + this.renderer.animateScrolling(scrollTop); + }; + Editor.prototype.undo = function () { + this.session.getUndoManager().undo(this.session); + this.renderer.scrollCursorIntoView(null, 0.5); + }; + Editor.prototype.redo = function () { + this.session.getUndoManager().redo(this.session); + this.renderer.scrollCursorIntoView(null, 0.5); + }; + Editor.prototype.destroy = function () { + this.destroyed = true; + if (this.$toDestroy) { + this.$toDestroy.forEach(function (el) { + el.destroy(); + }); + this.$toDestroy = []; + } + if (this.$mouseHandler) + this.$mouseHandler.destroy(); + this.renderer.destroy(); + this._signal("destroy", this); + if (this.session) + this.session.destroy(); + if (this._$emitInputEvent) + this._$emitInputEvent.cancel(); + this.removeAllListeners(); + }; + Editor.prototype.setAutoScrollEditorIntoView = function (enable) { + if (!enable) + return; + var rect; + var self = this; + var shouldScroll = false; + if (!this.$scrollAnchor) + this.$scrollAnchor = document.createElement("div"); + var scrollAnchor = this.$scrollAnchor; + scrollAnchor.style.cssText = "position:absolute"; + this.container.insertBefore(scrollAnchor, this.container.firstChild); + var onChangeSelection = this.on("changeSelection", function () { + shouldScroll = true; + }); + var onBeforeRender = this.renderer.on("beforeRender", function () { + if (shouldScroll) + rect = self.renderer.container.getBoundingClientRect(); + }); + var onAfterRender = this.renderer.on("afterRender", function () { + if (shouldScroll && rect && (self.isFocused() + || self.searchBox && self.searchBox.isFocused())) { + var renderer = self.renderer; + var pos = renderer.$cursorLayer.$pixelPos; + var config = renderer.layerConfig; + var top = pos.top - config.offset; + if (pos.top >= 0 && top + rect.top < 0) { + shouldScroll = true; + } + else if (pos.top < config.height && + pos.top + rect.top + config.lineHeight > window.innerHeight) { + shouldScroll = false; + } + else { + shouldScroll = null; + } + if (shouldScroll != null) { + scrollAnchor.style.top = top + "px"; + scrollAnchor.style.left = pos.left + "px"; + scrollAnchor.style.height = config.lineHeight + "px"; + scrollAnchor.scrollIntoView(shouldScroll); + } + shouldScroll = rect = null; + } + }); + this.setAutoScrollEditorIntoView = function (enable) { + if (enable) + return; + delete this.setAutoScrollEditorIntoView; + this.off("changeSelection", onChangeSelection); + this.renderer.off("afterRender", onAfterRender); + this.renderer.off("beforeRender", onBeforeRender); + }; + }; + Editor.prototype.$resetCursorStyle = function () { + var style = this.$cursorStyle || "ace"; + var cursorLayer = this.renderer.$cursorLayer; + if (!cursorLayer) + return; + cursorLayer.setSmoothBlinking(/smooth/.test(style)); + cursorLayer.isBlinking = !this.$readOnly && style != "wide"; + dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style)); + }; + Editor.prototype.prompt = function (message, options, callback) { + var editor = this; + config.loadModule("ace/ext/prompt", function (module) { + module.prompt(editor, message, options, callback); + }); + }; + return Editor; +}()); +Editor.$uid = 0; +Editor.prototype.curOp = null; +Editor.prototype.prevOp = {}; +Editor.prototype.$mergeableCommands = ["backspace", "del", "insertstring"]; +Editor.prototype.$toggleWordPairs = [ + ["first", "last"], + ["true", "false"], + ["yes", "no"], + ["width", "height"], + ["top", "bottom"], + ["right", "left"], + ["on", "off"], + ["x", "y"], + ["get", "set"], + ["max", "min"], + ["horizontal", "vertical"], + ["show", "hide"], + ["add", "remove"], + ["up", "down"], + ["before", "after"], + ["even", "odd"], + ["in", "out"], + ["inside", "outside"], + ["next", "previous"], + ["increase", "decrease"], + ["attach", "detach"], + ["&&", "||"], + ["==", "!="] +]; +oop.implement(Editor.prototype, EventEmitter); +config.defineOptions(Editor.prototype, "editor", { + selectionStyle: { + set: function (style) { + this.onSelectionChange(); + this._signal("changeSelectionStyle", { data: style }); + }, + initialValue: "line" + }, + highlightActiveLine: { + set: function () { this.$updateHighlightActiveLine(); }, + initialValue: true + }, + highlightSelectedWord: { + set: function (shouldHighlight) { this.$onSelectionChange(); }, + initialValue: true + }, + readOnly: { + set: function (/**@type{boolean}*/ readOnly) { + var _this = this; + this.textInput.setReadOnly(readOnly); + if (this.destroyed) + return; + this.$resetCursorStyle(); + if (!this.$readOnlyCallback) { + this.$readOnlyCallback = function (e) { + var shouldShow = false; + if (e && e.type == "keydown") { + if (e && e.key && !e.ctrlKey && !e.metaKey) { + if (e.key == " ") + e.preventDefault(); + shouldShow = e.key.length == 1; + } + if (!shouldShow) + return; + } + else if (e && e.type !== "exec") { + shouldShow = true; + } + if (shouldShow) { + if (!_this.hoverTooltip) { + _this.hoverTooltip = new HoverTooltip(); + } + var domNode = dom.createElement("div"); + domNode.textContent = nls("editor.tooltip.disable-editing", "Editing is disabled"); + if (!_this.hoverTooltip.isOpen) { + _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode); + } + } + else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) { + _this.hoverTooltip.hide(); + } + }; + } + var textArea = this.textInput.getElement(); + if (readOnly) { + event.addListener(textArea, "keydown", this.$readOnlyCallback, this); + this.commands.on("exec", this.$readOnlyCallback); + this.commands.on("commandUnavailable", this.$readOnlyCallback); + } + else { + event.removeListener(textArea, "keydown", this.$readOnlyCallback); + this.commands.off("exec", this.$readOnlyCallback); + this.commands.off("commandUnavailable", this.$readOnlyCallback); + if (this.hoverTooltip) { + this.hoverTooltip.destroy(); + this.hoverTooltip = null; + } + } + }, + initialValue: false + }, + copyWithEmptySelection: { + set: function (value) { + this.textInput.setCopyWithEmptySelection(value); + }, + initialValue: false + }, + cursorStyle: { + set: function (val) { this.$resetCursorStyle(); }, + values: ["ace", "slim", "smooth", "wide"], + initialValue: "ace" + }, + mergeUndoDeltas: { + values: [false, true, "always"], + initialValue: true + }, + behavioursEnabled: { initialValue: true }, + wrapBehavioursEnabled: { initialValue: true }, + enableAutoIndent: { initialValue: true }, + autoScrollEditorIntoView: { + set: function (val) { this.setAutoScrollEditorIntoView(val); } + }, + keyboardHandler: { + set: function (val) { this.setKeyboardHandler(val); }, + get: function () { return this.$keybindingId; }, + handlesSet: true + }, + value: { + set: function (val) { this.session.setValue(val); }, + get: function () { return this.getValue(); }, + handlesSet: true, + hidden: true + }, + session: { + set: function (val) { this.setSession(val); }, + get: function () { return this.session; }, + handlesSet: true, + hidden: true + }, + showLineNumbers: { + set: function (show) { + this.renderer.$gutterLayer.setShowLineNumbers(show); + this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER); + if (show && this.$relativeLineNumbers) + relativeNumberRenderer.attach(this); + else + relativeNumberRenderer.detach(this); + }, + initialValue: true + }, + relativeLineNumbers: { + set: function (value) { + if (this.$showLineNumbers && value) + relativeNumberRenderer.attach(this); + else + relativeNumberRenderer.detach(this); + } + }, + placeholder: { + set: function (message) { + if (!this.$updatePlaceholder) { + this.$updatePlaceholder = function () { + var hasValue = this.session && (this.renderer.$composition || + this.session.getLength() > 1 || this.session.getLine(0).length > 0); + if (hasValue && this.renderer.placeholderNode) { + this.renderer.off("afterRender", this.$updatePlaceholder); + dom.removeCssClass(this.container, "ace_hasPlaceholder"); + this.renderer.placeholderNode.remove(); + this.renderer.placeholderNode = null; + } + else if (!hasValue && !this.renderer.placeholderNode) { + this.renderer.on("afterRender", this.$updatePlaceholder); + dom.addCssClass(this.container, "ace_hasPlaceholder"); + var el = dom.createElement("div"); + el.className = "ace_placeholder"; + el.textContent = this.$placeholder || ""; + this.renderer.placeholderNode = el; + this.renderer.content.appendChild(this.renderer.placeholderNode); + } + else if (!hasValue && this.renderer.placeholderNode) { + this.renderer.placeholderNode.textContent = this.$placeholder || ""; + } + }.bind(this); + this.on("input", this.$updatePlaceholder); + } + this.$updatePlaceholder(); + } + }, + enableKeyboardAccessibility: { + set: function (value) { + var blurCommand = { + name: "blurTextInput", + description: "Set focus to the editor content div to allow tabbing through the page", + bindKey: "Esc", + exec: function (editor) { + editor.blur(); + editor.renderer.scroller.focus(); + }, + readOnly: true + }; + var focusOnEnterKeyup = function (e) { + if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) { + e.preventDefault(); + var row = this.getCursorPosition().row; + if (!this.isRowVisible(row)) + this.scrollToLine(row, true, true); + this.focus(); + } + }; + var gutterKeyboardHandler; + if (value) { + this.renderer.enableKeyboardAccessibility = true; + this.renderer.keyboardFocusClassName = "ace_keyboard-focus"; + this.textInput.getElement().setAttribute("tabindex", -1); + this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0); + this.renderer.scroller.setAttribute("tabindex", 0); + this.renderer.scroller.setAttribute("role", "group"); + this.renderer.scroller.setAttribute("aria-roledescription", nls("editor.scroller.aria-roledescription", "editor")); + this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName); + this.renderer.scroller.setAttribute("aria-label", nls("editor.scroller.aria-label", "Editor content, press Enter to start editing, press Escape to exit")); + this.renderer.scroller.addEventListener("keyup", focusOnEnterKeyup.bind(this)); + this.commands.addCommand(blurCommand); + this.renderer.$gutter.setAttribute("tabindex", 0); + this.renderer.$gutter.setAttribute("aria-hidden", false); + this.renderer.$gutter.setAttribute("role", "group"); + this.renderer.$gutter.setAttribute("aria-roledescription", nls("editor.gutter.aria-roledescription", "editor gutter")); + this.renderer.$gutter.setAttribute("aria-label", nls("editor.gutter.aria-label", "Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit")); + this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName); + this.renderer.content.setAttribute("aria-hidden", true); + if (!gutterKeyboardHandler) + gutterKeyboardHandler = new GutterKeyboardHandler(this); + gutterKeyboardHandler.addListener(); + this.textInput.setAriaOptions({ + setLabel: true + }); + } + else { + this.renderer.enableKeyboardAccessibility = false; + this.textInput.getElement().setAttribute("tabindex", 0); + this.textInput.setNumberOfExtraLines(0); + this.renderer.scroller.setAttribute("tabindex", -1); + this.renderer.scroller.removeAttribute("role"); + this.renderer.scroller.removeAttribute("aria-roledescription"); + this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName); + this.renderer.scroller.removeAttribute("aria-label"); + this.renderer.scroller.removeEventListener("keyup", focusOnEnterKeyup.bind(this)); + this.commands.removeCommand(blurCommand); + this.renderer.content.removeAttribute("aria-hidden"); + this.renderer.$gutter.setAttribute("tabindex", -1); + this.renderer.$gutter.setAttribute("aria-hidden", true); + this.renderer.$gutter.removeAttribute("role"); + this.renderer.$gutter.removeAttribute("aria-roledescription"); + this.renderer.$gutter.removeAttribute("aria-label"); + this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName); + if (gutterKeyboardHandler) + gutterKeyboardHandler.removeListener(); + } + }, + initialValue: false + }, + textInputAriaLabel: { + set: function (val) { this.$textInputAriaLabel = val; }, + initialValue: "" + }, + enableMobileMenu: { + set: function (val) { this.$enableMobileMenu = val; }, + initialValue: true + }, + customScrollbar: "renderer", + hScrollBarAlwaysVisible: "renderer", + vScrollBarAlwaysVisible: "renderer", + highlightGutterLine: "renderer", + animatedScroll: "renderer", + showInvisibles: "renderer", + showPrintMargin: "renderer", + printMarginColumn: "renderer", + printMargin: "renderer", + fadeFoldWidgets: "renderer", + showFoldWidgets: "renderer", + displayIndentGuides: "renderer", + highlightIndentGuides: "renderer", + showGutter: "renderer", + fontSize: "renderer", + fontFamily: "renderer", + maxLines: "renderer", + minLines: "renderer", + scrollPastEnd: "renderer", + fixedWidthGutter: "renderer", + theme: "renderer", + hasCssTransforms: "renderer", + maxPixelHeight: "renderer", + useTextareaForIME: "renderer", + useResizeObserver: "renderer", + useSvgGutterIcons: "renderer", + showFoldedAnnotations: "renderer", + scrollSpeed: "$mouseHandler", + dragDelay: "$mouseHandler", + dragEnabled: "$mouseHandler", + focusTimeout: "$mouseHandler", + tooltipFollowsMouse: "$mouseHandler", + firstLineNumber: "session", + overwrite: "session", + newLineMode: "session", + useWorker: "session", + useSoftTabs: "session", + navigateWithinSoftTabs: "session", + tabSize: "session", + wrap: "session", + indentedSoftWrap: "session", + foldStyle: "session", + mode: "session" +}); +var relativeNumberRenderer = { + getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) { + return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? "\xb7" : ""))) + ""; + }, + getWidth: function (session, /**@type{number}*/ lastLineNumber, config) { + return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth; + }, + update: function (e, /**@type{Editor}*/ editor) { + editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER); + }, + attach: function (/**@type{Editor}*/ editor) { + editor.renderer.$gutterLayer.$renderer = this; + editor.on("changeSelection", this.update); + this.update(null, editor); + }, + detach: function (/**@type{Editor}*/ editor) { + if (editor.renderer.$gutterLayer.$renderer == this) + editor.renderer.$gutterLayer.$renderer = null; + editor.off("changeSelection", this.update); + this.update(null, editor); + } +}; +exports.Editor = Editor; -.history-content .filter { -} +}); -.history-content .filter input, .history-content .filter label { - vertical-align: top; - display: inline-block; -} +ace.define("ace/layer/lines",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var Lines = /** @class */ (function () { + function Lines(element, canvasHeight) { + this.element = element; + this.canvasHeight = canvasHeight || 500000; + this.element.style.height = (this.canvasHeight * 2) + "px"; + this.cells = []; + this.cellCache = []; + this.$offsetCoefficient = 0; + } + Lines.prototype.moveContainer = function (config) { + dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient); + }; + Lines.prototype.pageChanged = function (oldConfig, newConfig) { + return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !== + Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)); + }; + Lines.prototype.computeLineTop = function (row, config, session) { + var screenTop = config.firstRowScreen * config.lineHeight; + var screenPage = Math.floor(screenTop / this.canvasHeight); + var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight; + return lineTop - (screenPage * this.canvasHeight); + }; + Lines.prototype.computeLineHeight = function (row, config, session) { + return config.lineHeight * session.getRowLineCount(row); + }; + Lines.prototype.getLength = function () { + return this.cells.length; + }; + Lines.prototype.get = function (index) { + return this.cells[index]; + }; + Lines.prototype.shift = function () { + this.$cacheCell(this.cells.shift()); + }; + Lines.prototype.pop = function () { + this.$cacheCell(this.cells.pop()); + }; + Lines.prototype.push = function (cell) { + if (Array.isArray(cell)) { + this.cells.push.apply(this.cells, cell); + var fragment = dom.createFragment(this.element); + for (var i = 0; i < cell.length; i++) { + fragment.appendChild(cell[i].element); + } + this.element.appendChild(fragment); + } + else { + this.cells.push(cell); + this.element.appendChild(cell.element); + } + }; + Lines.prototype.unshift = function (cell) { + if (Array.isArray(cell)) { + this.cells.unshift.apply(this.cells, cell); + var fragment = dom.createFragment(this.element); + for (var i = 0; i < cell.length; i++) { + fragment.appendChild(cell[i].element); + } + if (this.element.firstChild) + this.element.insertBefore(fragment, this.element.firstChild); + else + this.element.appendChild(fragment); + } + else { + this.cells.unshift(cell); + this.element.insertAdjacentElement("afterbegin", cell.element); + } + }; + Lines.prototype.last = function () { + if (this.cells.length) + return this.cells[this.cells.length - 1]; + else + return null; + }; + Lines.prototype.$cacheCell = function (cell) { + if (!cell) + return; + cell.element.remove(); + this.cellCache.push(cell); + }; + Lines.prototype.createCell = function (row, config, session, initElement) { + var cell = this.cellCache.pop(); + if (!cell) { + var element = dom.createElement("div"); + if (initElement) + initElement(element); + this.element.appendChild(element); + cell = { + element: element, + text: "", + row: row + }; + } + cell.row = row; + return cell; + }; + return Lines; +}()); +exports.Lines = Lines; +}); -.history-content .graph-attr { - display: inline-block; - margin-right: 5px; +ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/layer/lines","ace/config"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var oop = require("../lib/oop"); +var lang = require("../lib/lang"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var Lines = require("./lines").Lines; +var nls = require("../config").nls; +var Gutter = /** @class */ (function () { + function Gutter(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_gutter-layer"; + parentEl.appendChild(this.element); + this.setShowFoldWidgets(this.$showFoldWidgets); + this.gutterWidth = 0; + this.$annotations = []; + this.$updateAnnotations = this.$updateAnnotations.bind(this); + this.$lines = new Lines(this.element); + this.$lines.$offsetCoefficient = 1; + } + Gutter.prototype.setSession = function (session) { + if (this.session) + this.session.off("change", this.$updateAnnotations); + this.session = session; + if (session) + session.on("change", this.$updateAnnotations); + }; + Gutter.prototype.addGutterDecoration = function (row, className) { + if (window.console) + console.warn && console.warn("deprecated use session.addGutterDecoration"); + this.session.addGutterDecoration(row, className); + }; + Gutter.prototype.removeGutterDecoration = function (row, className) { + if (window.console) + console.warn && console.warn("deprecated use session.removeGutterDecoration"); + this.session.removeGutterDecoration(row, className); + }; + Gutter.prototype.setAnnotations = function (annotations) { + this.$annotations = []; + for (var i = 0; i < annotations.length; i++) { + var annotation = annotations[i]; + var row = annotation.row; + var rowInfo = this.$annotations[row]; + if (!rowInfo) + rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] }; + var annoText = annotation.text; + var displayAnnoText = annotation.text; + var annoType = annotation.type; + annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; + displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || ""; + if (rowInfo.text.indexOf(annoText) === -1) { + rowInfo.text.push(annoText); + rowInfo.type.push(annoType); + rowInfo.displayText.push(displayAnnoText); + } + var className = annotation.className; + if (className) { + rowInfo.className = className; + } + else if (annoType === "error") { + rowInfo.className = " ace_error"; + } + else if (annoType === "security" && !/\bace_error\b/.test(rowInfo.className)) { + rowInfo.className = " ace_security"; + } + else if (annoType === "warning" && !/\bace_(error|security)\b/.test(rowInfo.className)) { + rowInfo.className = " ace_warning"; + } + else if (annoType === "info" && !rowInfo.className) { + rowInfo.className = " ace_info"; + } + else if (annoType === "hint" && !rowInfo.className) { + rowInfo.className = " ace_hint"; + } + } + }; + Gutter.prototype.$updateAnnotations = function (delta) { + if (!this.$annotations.length) + return; + var firstRow = delta.start.row; + var len = delta.end.row - firstRow; + if (len === 0) { + } + else if (delta.action == 'remove') { + this.$annotations.splice(firstRow, len + 1, null); + } + else { + var args = new Array(len + 1); + args.unshift(firstRow, 1); + this.$annotations.splice.apply(this.$annotations, args); + } + }; + Gutter.prototype.update = function (config) { + this.config = config; + var session = this.session; + var firstRow = config.firstRow; + var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar + session.getLength() - 1); + this.oldLastRow = lastRow; + this.config = config; + this.$lines.moveContainer(config); + this.$updateCursorRow(); + var fold = session.getNextFoldLine(firstRow); + var foldStart = fold ? fold.start.row : Infinity; + var cell = null; + var index = -1; + var row = firstRow; + while (true) { + if (row > foldStart) { + row = fold.end.row + 1; + fold = session.getNextFoldLine(row, fold); + foldStart = fold ? fold.start.row : Infinity; + } + if (row > lastRow) { + while (this.$lines.getLength() > index + 1) + this.$lines.pop(); + break; + } + cell = this.$lines.get(++index); + if (cell) { + cell.row = row; + } + else { + cell = this.$lines.createCell(row, config, this.session, onCreateCell); + this.$lines.push(cell); + } + this.$renderCell(cell, config, fold, row); + row++; + } + this._signal("afterRender"); + this.$updateGutterWidth(config); + }; + Gutter.prototype.$updateGutterWidth = function (config) { + var session = this.session; + var gutterRenderer = session.gutterRenderer || this.$renderer; + var firstLineNumber = session.$firstLineNumber; + var lastLineText = this.$lines.last() ? this.$lines.last().text : ""; + if (this.$fixedWidth || session.$useWrapMode) + lastLineText = session.getLength() + firstLineNumber - 1; + var gutterWidth = gutterRenderer + ? gutterRenderer.getWidth(session, lastLineText, config) + : lastLineText.toString().length * config.characterWidth; + var padding = this.$padding || this.$computePadding(); + gutterWidth += padding.left + padding.right; + if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { + this.gutterWidth = gutterWidth; (this.element.parentNode).style.width = + this.element.style.width = Math.ceil(this.gutterWidth) + "px"; + this._signal("changeGutterWidth", gutterWidth); + } + }; + Gutter.prototype.$updateCursorRow = function () { + if (!this.$highlightGutterLine) + return; + var position = this.session.selection.getCursor(); + if (this.$cursorRow === position.row) + return; + this.$cursorRow = position.row; + }; + Gutter.prototype.updateLineHighlight = function () { + if (!this.$highlightGutterLine) + return; + var row = this.session.selection.cursor.row; + this.$cursorRow = row; + if (this.$cursorCell && this.$cursorCell.row == row) + return; + if (this.$cursorCell) + this.$cursorCell.element.className = this.$cursorCell.element.className.replace("ace_gutter-active-line ", ""); + var cells = this.$lines.cells; + this.$cursorCell = null; + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + if (cell.row >= this.$cursorRow) { + if (cell.row > this.$cursorRow) { + var fold = this.session.getFoldLine(this.$cursorRow); + if (i > 0 && fold && fold.start.row == cells[i - 1].row) + cell = cells[i - 1]; + else + break; + } + cell.element.className = "ace_gutter-active-line " + cell.element.className; + this.$cursorCell = cell; + break; + } + } + }; + Gutter.prototype.scrollLines = function (config) { + var oldConfig = this.config; + this.config = config; + this.$updateCursorRow(); + if (this.$lines.pageChanged(oldConfig, config)) + return this.update(config); + this.$lines.moveContainer(config); + var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar + this.session.getLength() - 1); + var oldLastRow = this.oldLastRow; + this.oldLastRow = lastRow; + if (!oldConfig || oldLastRow < config.firstRow) + return this.update(config); + if (lastRow < oldConfig.firstRow) + return this.update(config); + if (oldConfig.firstRow < config.firstRow) + for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) + this.$lines.shift(); + if (oldLastRow > lastRow) + for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--) + this.$lines.pop(); + if (config.firstRow < oldConfig.firstRow) { + this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1)); + } + if (lastRow > oldLastRow) { + this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow)); + } + this.updateLineHighlight(); + this._signal("afterRender"); + this.$updateGutterWidth(config); + }; + Gutter.prototype.$renderLines = function (config, firstRow, lastRow) { + var fragment = []; + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (true) { + if (row > foldStart) { + row = foldLine.end.row + 1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (row > lastRow) + break; + var cell = this.$lines.createCell(row, config, this.session, onCreateCell); + this.$renderCell(cell, config, foldLine, row); + fragment.push(cell); + row++; + } + return fragment; + }; + Gutter.prototype.$renderCell = function (cell, config, fold, row) { + var element = cell.element; + var session = this.session; + var textNode = element.childNodes[0]; + var foldWidget = element.childNodes[1]; + var annotationNode = element.childNodes[2]; + var customWidget = element.childNodes[3]; + var annotationIconNode = annotationNode.firstChild; + var firstLineNumber = session.$firstLineNumber; + var breakpoints = session.$breakpoints; + var decorations = session.$decorations; + var gutterRenderer = session.gutterRenderer || this.$renderer; + var foldWidgets = this.$showFoldWidgets && session.foldWidgets; + var foldStart = fold ? fold.start.row : Number.MAX_VALUE; + var lineHeight = config.lineHeight + "px"; + var className = this.$useSvgGutterIcons ? "ace_gutter-cell_svg-icons " : "ace_gutter-cell "; + var iconClassName = this.$useSvgGutterIcons ? "ace_icon_svg" : "ace_icon"; + var rowText = (gutterRenderer + ? gutterRenderer.getText(session, row) + : row + firstLineNumber).toString(); + if (this.$highlightGutterLine) { + if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) { + className += "ace_gutter-active-line "; + if (this.$cursorCell != cell) { + if (this.$cursorCell) + this.$cursorCell.element.className = this.$cursorCell.element.className.replace("ace_gutter-active-line ", ""); + this.$cursorCell = cell; + } + } + } + if (breakpoints[row]) + className += breakpoints[row]; + if (decorations[row]) + className += decorations[row]; + if (this.$annotations[row] && row !== foldStart) + className += this.$annotations[row].className; + if (foldWidgets) { + var c = foldWidgets[row]; + if (c == null) + c = foldWidgets[row] = session.getFoldWidget(row); + } + if (c) { + var foldClass = "ace_fold-widget ace_" + c; + var isClosedFold = c == "start" && row == foldStart && row < fold.end.row; + if (isClosedFold) { + foldClass += " ace_closed"; + var foldAnnotationClass = ""; + var annotationInFold = false; + for (var i = row + 1; i <= fold.end.row; i++) { + if (!this.$annotations[i]) + continue; + if (this.$annotations[i].className === " ace_error") { + annotationInFold = true; + foldAnnotationClass = " ace_error_fold"; + break; + } + if (this.$annotations[i].className === " ace_security") { + annotationInFold = true; + foldAnnotationClass = " ace_security_fold"; + } + else if (this.$annotations[i].className === " ace_warning" && + foldAnnotationClass !== " ace_security_fold") { + annotationInFold = true; + foldAnnotationClass = " ace_warning_fold"; + } + } + className += foldAnnotationClass; + } + else + foldClass += " ace_open"; + if (foldWidget.className != foldClass) + foldWidget.className = foldClass; + dom.setStyle(foldWidget.style, "height", lineHeight); + dom.setStyle(foldWidget.style, "display", "inline-block"); + foldWidget.setAttribute("role", "button"); + foldWidget.setAttribute("tabindex", "-1"); + var foldRange = session.getFoldWidgetRange(row); + if (foldRange) + foldWidget.setAttribute("aria-label", nls("gutter.code-folding.range.aria-label", "Toggle code folding, rows $0 through $1", [ + foldRange.start.row + 1, + foldRange.end.row + 1 + ])); + else { + if (fold) + foldWidget.setAttribute("aria-label", nls("gutter.code-folding.closed.aria-label", "Toggle code folding, rows $0 through $1", [ + fold.start.row + 1, + fold.end.row + 1 + ])); + else + foldWidget.setAttribute("aria-label", nls("gutter.code-folding.open.aria-label", "Toggle code folding, row $0", [row + 1])); + } + if (isClosedFold) { + foldWidget.setAttribute("aria-expanded", "false"); + foldWidget.setAttribute("title", nls("gutter.code-folding.closed.title", "Unfold code")); + } + else { + foldWidget.setAttribute("aria-expanded", "true"); + foldWidget.setAttribute("title", nls("gutter.code-folding.open.title", "Fold code")); + } + } + else { + if (foldWidget) { + dom.setStyle(foldWidget.style, "display", "none"); + foldWidget.setAttribute("tabindex", "0"); + foldWidget.removeAttribute("role"); + foldWidget.removeAttribute("aria-label"); + } + } + var customWidgetAttributes = this.session.$gutterCustomWidgets[row]; + if (customWidgetAttributes) { + this.$addCustomWidget(row, customWidgetAttributes, cell); + } + else if (customWidget) { + this.$removeCustomWidget(row, cell); + } + if (annotationInFold && this.$showFoldedAnnotations) { + annotationNode.className = "ace_gutter_annotation"; + annotationIconNode.className = iconClassName; + annotationIconNode.className += foldAnnotationClass; + dom.setStyle(annotationIconNode.style, "height", lineHeight); + dom.setStyle(annotationNode.style, "display", "block"); + dom.setStyle(annotationNode.style, "height", lineHeight); + var ariaLabel; + switch (foldAnnotationClass) { + case " ace_error_fold": + ariaLabel = nls("gutter.annotation.aria-label.error", "Error, read annotations row $0", [rowText]); + break; + case " ace_security_fold": + ariaLabel = nls("gutter.annotation.aria-label.security", "Security finding, read annotations row $0", [rowText]); + break; + case " ace_warning_fold": + ariaLabel = nls("gutter.annotation.aria-label.warning", "Warning, read annotations row $0", [rowText]); + break; + } + annotationNode.setAttribute("aria-label", ariaLabel); + annotationNode.setAttribute("tabindex", "-1"); + annotationNode.setAttribute("role", "button"); + } + else if (this.$annotations[row]) { + annotationNode.className = "ace_gutter_annotation"; + annotationIconNode.className = iconClassName; + if (this.$useSvgGutterIcons) + annotationIconNode.className += this.$annotations[row].className; + else + element.classList.add(this.$annotations[row].className.replace(" ", "")); + dom.setStyle(annotationIconNode.style, "height", lineHeight); + dom.setStyle(annotationNode.style, "display", "block"); + dom.setStyle(annotationNode.style, "height", lineHeight); + var ariaLabel; + switch (this.$annotations[row].className) { + case " ace_error": + ariaLabel = nls("gutter.annotation.aria-label.error", "Error, read annotations row $0", [rowText]); + break; + case " ace_security": + ariaLabel = nls("gutter.annotation.aria-label.security", "Security finding, read annotations row $0", [rowText]); + break; + case " ace_warning": + ariaLabel = nls("gutter.annotation.aria-label.warning", "Warning, read annotations row $0", [rowText]); + break; + case " ace_info": + ariaLabel = nls("gutter.annotation.aria-label.info", "Info, read annotations row $0", [rowText]); + break; + case " ace_hint": + ariaLabel = nls("gutter.annotation.aria-label.hint", "Suggestion, read annotations row $0", [rowText]); + break; + } + annotationNode.setAttribute("aria-label", ariaLabel); + annotationNode.setAttribute("tabindex", "-1"); + annotationNode.setAttribute("role", "button"); + } + else { + dom.setStyle(annotationNode.style, "display", "none"); + annotationNode.removeAttribute("aria-label"); + annotationNode.removeAttribute("role"); + annotationNode.setAttribute("tabindex", "0"); + } + if (rowText !== textNode.data) { + textNode.data = rowText; + } + if (element.className != className) + element.className = className; + dom.setStyle(cell.element.style, "height", this.$lines.computeLineHeight(row, config, session) + "px"); + dom.setStyle(cell.element.style, "top", this.$lines.computeLineTop(row, config, session) + "px"); + cell.text = rowText; + if (annotationNode.style.display === "none" && foldWidget.style.display === "none" && !customWidgetAttributes) + cell.element.setAttribute("aria-hidden", true); + else + cell.element.setAttribute("aria-hidden", false); + return cell; + }; + Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) { + this.$highlightGutterLine = highlightGutterLine; + }; + Gutter.prototype.setShowLineNumbers = function (show) { + this.$renderer = !show && { + getWidth: function () { return 0; }, + getText: function () { return ""; } + }; + }; + Gutter.prototype.getShowLineNumbers = function () { + return this.$showLineNumbers; + }; + Gutter.prototype.setShowFoldWidgets = function (show) { + if (show) + dom.addCssClass(this.element, "ace_folding-enabled"); + else + dom.removeCssClass(this.element, "ace_folding-enabled"); + this.$showFoldWidgets = show; + this.$padding = null; + }; + Gutter.prototype.getShowFoldWidgets = function () { + return this.$showFoldWidgets; + }; + Gutter.prototype.$hideFoldWidget = function (row, cell) { + var rowCell = cell || this.$getGutterCell(row); + if (rowCell && rowCell.element) { + var foldWidget = rowCell.element.childNodes[1]; + if (foldWidget) { + dom.setStyle(foldWidget.style, "display", "none"); + } + } + }; + Gutter.prototype.$showFoldWidget = function (row, cell) { + var rowCell = cell || this.$getGutterCell(row); + if (rowCell && rowCell.element) { + var foldWidget = rowCell.element.childNodes[1]; + if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) { + dom.setStyle(foldWidget.style, "display", "inline-block"); + } + } + }; + Gutter.prototype.$getGutterCell = function (row) { + var cells = this.$lines.cells; + var visibileRow = this.session.documentToScreenRow(row, 0); + return cells[row - this.config.firstRowScreen - (row - visibileRow)]; + }; + Gutter.prototype.$addCustomWidget = function (row, _a, cell) { + var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks; + this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks }; + this.$hideFoldWidget(row, cell); + var rowCell = cell || this.$getGutterCell(row); + if (rowCell && rowCell.element) { + var customWidget = rowCell.element.querySelector(".ace_custom-widget"); + if (customWidget) { + customWidget.remove(); + } + customWidget = dom.createElement("span"); + customWidget.className = "ace_custom-widget ".concat(className); + customWidget.setAttribute("tabindex", "-1"); + customWidget.setAttribute("role", 'button'); + customWidget.setAttribute("aria-label", label); + customWidget.setAttribute("title", title); + dom.setStyle(customWidget.style, "display", "inline-block"); + dom.setStyle(customWidget.style, "height", "inherit"); + if (callbacks && callbacks.onClick) { + customWidget.addEventListener("click", function (e) { + callbacks.onClick(e, row); + e.stopPropagation(); + }); + } + rowCell.element.appendChild(customWidget); + } + }; + Gutter.prototype.$removeCustomWidget = function (row, cell) { + delete this.session.$gutterCustomWidgets[row]; + this.$showFoldWidget(row, cell); + var rowCell = cell || this.$getGutterCell(row); + if (rowCell && rowCell.element) { + var customWidget = rowCell.element.querySelector(".ace_custom-widget"); + if (customWidget) { + rowCell.element.removeChild(customWidget); + } + } + }; + Gutter.prototype.$computePadding = function () { + if (!this.element.firstChild) + return { left: 0, right: 0 }; + var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild)); + this.$padding = {}; + this.$padding.left = (parseInt(style.borderLeftWidth) || 0) + + (parseInt(style.paddingLeft) || 0) + 1; + this.$padding.right = (parseInt(style.borderRightWidth) || 0) + + (parseInt(style.paddingRight) || 0); + return this.$padding; + }; + Gutter.prototype.getRegion = function (point) { + var padding = this.$padding || this.$computePadding(); + var rect = this.element.getBoundingClientRect(); + if (point.x < padding.left + rect.left) + return "markers"; + if (this.$showFoldWidgets && point.x > rect.right - padding.right) + return "foldWidgets"; + }; + return Gutter; +}()); +Gutter.prototype.$fixedWidth = false; +Gutter.prototype.$highlightGutterLine = true; +Gutter.prototype.$renderer = ""; +Gutter.prototype.$showLineNumbers = true; +Gutter.prototype.$showFoldWidgets = true; +oop.implement(Gutter.prototype, EventEmitter); +function onCreateCell(element) { + var textNode = document.createTextNode(''); + element.appendChild(textNode); + var foldWidget = dom.createElement("span"); + element.appendChild(foldWidget); + var annotationNode = dom.createElement("span"); + element.appendChild(annotationNode); + var annotationIconNode = dom.createElement("span"); + annotationNode.appendChild(annotationIconNode); + return element; } +exports.Gutter = Gutter; -.history-content .graph-attr input, .history-content .graph-attr label { - vertical-align: middle; - display: inline-block; -} +}); -.history-content .select-style { - width: 170px; - margin-right: 5px; +ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(require, exports, module){"use strict"; +var Range = require("../range").Range; +var dom = require("../lib/dom"); +var Marker = /** @class */ (function () { + function Marker(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_marker-layer"; + parentEl.appendChild(this.element); + } + Marker.prototype.setPadding = function (padding) { + this.$padding = padding; + }; + Marker.prototype.setSession = function (session) { + this.session = session; + }; + Marker.prototype.setMarkers = function (markers) { + this.markers = markers; + }; + Marker.prototype.elt = function (className, css) { + var x = this.i != -1 && this.element.childNodes[this.i]; + if (!x) { + x = document.createElement("div"); + this.element.appendChild(x); + this.i = -1; + } + else { + this.i++; + } + x.style.cssText = css; + x.className = className; + }; + Marker.prototype.update = function (config) { + if (!config) + return; + this.config = config; + this.i = 0; + var html; + for (var key in this.markers) { + var marker = this.markers[key]; + if (!marker.range) { + marker.update(html, this, this.session, config); + continue; + } + var range = marker.range.clipRows(config.firstRow, config.lastRow); + if (range.isEmpty()) + continue; + range = range.toScreenRange(this.session); + if (marker.renderer) { + var top = this.$getTop(range.start.row, config); + var left = this.$padding + range.start.column * config.characterWidth; + marker.renderer(html, range, left, top, config); + } + else if (marker.type == "fullLine") { + this.drawFullLineMarker(html, range, marker.clazz, config); + } + else if (marker.type == "screenLine") { + this.drawScreenLineMarker(html, range, marker.clazz, config); + } + else if (range.isMultiLine()) { + if (marker.type == "text") + this.drawTextMarker(html, range, marker.clazz, config); + else + this.drawMultiLineMarker(html, range, marker.clazz, config); + } + else { + this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config); + } + } + if (this.i != -1) { + while (this.i < this.element.childElementCount) + this.element.removeChild(this.element.lastChild); + } + }; + Marker.prototype.$getTop = function (row, layerConfig) { + return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; + }; + Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) { + var session = this.session; + var start = range.start.row; + var end = range.end.row; + var row = start; + var prev = 0; + var curr = 0; + var next = session.getScreenLastRowColumn(row); + var lineRange = new Range(row, range.start.column, row, curr); + for (; row <= end; row++) { + lineRange.start.row = lineRange.end.row = row; + lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row); + lineRange.end.column = next; + prev = curr; + curr = next; + next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column; + this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? " ace_start" : "") + " ace_br" + + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle); + } + }; + Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { + var padding = this.$padding; + var height = config.lineHeight; + var top = this.$getTop(range.start.row, config); + var left = padding + range.start.column * config.characterWidth; + extraStyle = extraStyle || ""; + if (this.session.$bidiHandler.isBidiRow(range.start.row)) { + var range1 = range.clone(); + range1.end.row = range1.start.row; + range1.end.column = this.session.getLine(range1.start.row).length; + this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + " ace_br1 ace_start", config, null, extraStyle); + } + else { + this.elt(clazz + " ace_br1 ace_start", "height:" + height + "px;" + "right:" + padding + "px;" + "top:" + top + "px;left:" + left + "px;" + (extraStyle || "")); + } + if (this.session.$bidiHandler.isBidiRow(range.end.row)) { + var range1 = range.clone(); + range1.start.row = range1.end.row; + range1.start.column = 0; + this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + " ace_br12", config, null, extraStyle); + } + else { + top = this.$getTop(range.end.row, config); + var width = range.end.column * config.characterWidth; + this.elt(clazz + " ace_br12", "height:" + height + "px;" + + "width:" + width + "px;" + + "top:" + top + "px;" + + "left:" + padding + "px;" + (extraStyle || "")); + } + height = (range.end.row - range.start.row - 1) * config.lineHeight; + if (height <= 0) + return; + top = this.$getTop(range.start.row + 1, config); + var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8); + this.elt(clazz + (radiusClass ? " ace_br" + radiusClass : ""), "height:" + height + "px;" + + "right:" + padding + "px;" + + "top:" + top + "px;" + + "left:" + padding + "px;" + (extraStyle || "")); + }; + Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) { + if (this.session.$bidiHandler.isBidiRow(range.start.row)) + return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle); + var height = config.lineHeight; + var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; + var top = this.$getTop(range.start.row, config); + var left = this.$padding + range.start.column * config.characterWidth; + this.elt(clazz, "height:" + height + "px;" + + "width:" + width + "px;" + + "top:" + top + "px;" + + "left:" + left + "px;" + (extraStyle || "")); + }; + Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) { + var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding; + var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column); + selections.forEach(function (selection) { + this.elt(clazz, "height:" + height + "px;" + + "width:" + (selection.width + (extraLength || 0)) + "px;" + + "top:" + top + "px;" + + "left:" + (padding + selection.left) + "px;" + (extraStyle || "")); + }, this); + }; + Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { + var top = this.$getTop(range.start.row, config); + var height = config.lineHeight; + if (range.start.row != range.end.row) + height += this.$getTop(range.end.row, config) - top; + this.elt(clazz, "height:" + height + "px;" + + "top:" + top + "px;" + + "left:0;right:0;" + (extraStyle || "")); + }; + Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) { + var top = this.$getTop(range.start.row, config); + var height = config.lineHeight; + this.elt(clazz, "height:" + height + "px;" + + "top:" + top + "px;" + + "left:0;right:0;" + (extraStyle || "")); + }; + return Marker; +}()); +Marker.prototype.$padding = 0; +function getBorderClass(tl, tr, br, bl) { + return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0); } +exports.Marker = Marker; -`, "",{"version":3,"sources":["webpack://./style/history.css"],"names":[],"mappings":"AAEA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,eAAe;AACnB;;AAEA;AACA;;AAEA;IACI,mBAAmB;IACnB,qBAAqB;AACzB;;;AAGA;CACC,qBAAqB;CACrB,iBAAiB;AAClB;;AAEA;IACI,sBAAsB;IACtB,qBAAqB;AACzB;;AAEA;IACI,YAAY;IACZ,iBAAiB;AACrB","sourcesContent":["@import '~@noworkflow/history/style/index.css';\n\n.history-content,\n.history-content .sub-content,\n.history-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.history-content .filter .internal {\n margin: 4px 8px;\n}\n\n.history-content .filter {\n}\n\n.history-content .filter input, .history-content .filter label {\n vertical-align: top;\n display: inline-block;\n}\n\n\n.history-content .graph-attr {\n\tdisplay: inline-block;\n\tmargin-right: 5px;\n}\n\n.history-content .graph-attr input, .history-content .graph-attr label {\n vertical-align: middle;\n display: inline-block;\n}\n\n.history-content .select-style {\n width: 170px;\n margin-right: 5px;\n}\n\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!./style/index.css": -/*!***************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/index.css ***! - \***************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +}); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_utils_style_shared_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../utils/style/shared.css */ "./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../history/style/index.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_trial_style_index_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../trial/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../trial/style/index.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./panel.css */ "./node_modules/css-loader/dist/cjs.js!./style/panel.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_history_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./history.css */ "./node_modules/css-loader/dist/cjs.js!./style/history.css"); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_trial_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!./trial.css */ "./node_modules/css-loader/dist/cjs.js!./style/trial.css"); -// Imports +ace.define("ace/layer/text_util",["require","exports","module"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className. +var textTokens = new Set(["text", "rparen", "lparen"]); +exports.isTextToken = function (tokenType) { + return textTokens.has(tokenType); +}; +}); +ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter","ace/config","ace/layer/text_util"], function(require, exports, module){"use strict"; +var oop = require("../lib/oop"); +var dom = require("../lib/dom"); +var lang = require("../lib/lang"); +var Lines = require("./lines").Lines; +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var nls = require("../config").nls; +var isTextToken = require("./text_util").isTextToken; +var Text = /** @class */ (function () { + function Text(parentEl) { + this.dom = dom; + this.element = this.dom.createElement("div"); + this.element.className = "ace_layer ace_text-layer"; + parentEl.appendChild(this.element); + this.$updateEolChar = this.$updateEolChar.bind(this); + this.$lines = new Lines(this.element); + } + Text.prototype.$updateEolChar = function () { + var doc = this.session.doc; + var unixMode = doc.getNewLineCharacter() == "\n" && doc.getNewLineMode() != "windows"; + var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF; + if (this.EOL_CHAR != EOL_CHAR) { + this.EOL_CHAR = EOL_CHAR; + return true; + } + }; + Text.prototype.setPadding = function (padding) { + this.$padding = padding; + this.element.style.margin = "0 " + padding + "px"; + }; + Text.prototype.getLineHeight = function () { + return this.$fontMetrics.$characterSize.height || 0; + }; + Text.prototype.getCharacterWidth = function () { + return this.$fontMetrics.$characterSize.width || 0; + }; + Text.prototype.$setFontMetrics = function (measure) { + this.$fontMetrics = measure; + this.$fontMetrics.on("changeCharacterSize", + function (e) { + this._signal("changeCharacterSize", e); + }.bind(this)); + this.$pollSizeChanges(); + }; + Text.prototype.checkForSizeChanges = function () { + this.$fontMetrics.checkForSizeChanges(); + }; + Text.prototype.$pollSizeChanges = function () { + return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges(); + }; + Text.prototype.setSession = function (session) { + this.session = session; + if (session) + this.$computeTabString(); + }; + Text.prototype.setShowInvisibles = function (showInvisibles) { + if (this.showInvisibles == showInvisibles) + return false; + this.showInvisibles = showInvisibles; + if (typeof showInvisibles == "string") { + this.showSpaces = /tab/i.test(showInvisibles); + this.showTabs = /space/i.test(showInvisibles); + this.showEOL = /eol/i.test(showInvisibles); + } + else { + this.showSpaces = this.showTabs = this.showEOL = showInvisibles; + } + this.$computeTabString(); + return true; + }; + Text.prototype.setDisplayIndentGuides = function (display) { + if (this.displayIndentGuides == display) + return false; + this.displayIndentGuides = display; + this.$computeTabString(); + return true; + }; + Text.prototype.setHighlightIndentGuides = function (highlight) { + if (this.$highlightIndentGuides === highlight) + return false; + this.$highlightIndentGuides = highlight; + return highlight; + }; + Text.prototype.$computeTabString = function () { + var tabSize = this.session.getTabSize(); + this.tabSize = tabSize; var tabStr = this.$tabStrings = [0]; + for (var i = 1; i < tabSize + 1; i++) { + if (this.showTabs) { + var span = this.dom.createElement("span"); + span.className = "ace_invisible ace_invisible_tab"; + span.textContent = lang.stringRepeat(this.TAB_CHAR, i); + tabStr.push(span); + } + else { + tabStr.push(this.dom.createTextNode(lang.stringRepeat(" ", i), this.element)); + } + } + if (this.displayIndentGuides) { + this.$indentGuideRe = /\s\S| \t|\t |\s$/; + var className = "ace_indent-guide"; + var spaceClass = this.showSpaces ? " ace_invisible ace_invisible_space" : ""; + var spaceContent = this.showSpaces + ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize) + : lang.stringRepeat(" ", this.tabSize); + var tabClass = this.showTabs ? " ace_invisible ace_invisible_tab" : ""; + var tabContent = this.showTabs + ? lang.stringRepeat(this.TAB_CHAR, this.tabSize) + : spaceContent; + var span = this.dom.createElement("span"); + span.className = className + spaceClass; + span.textContent = spaceContent; + this.$tabStrings[" "] = span; + var span = this.dom.createElement("span"); + span.className = className + tabClass; + span.textContent = tabContent; + this.$tabStrings["\t"] = span; + } + }; + Text.prototype.updateLines = function (config, firstRow, lastRow) { + if (this.config.lastRow != config.lastRow || + this.config.firstRow != config.firstRow) { + return this.update(config); + } + this.config = config; + var first = Math.max(firstRow, config.firstRow); + var last = Math.min(lastRow, config.lastRow); + var lineElements = this.element.childNodes; + var lineElementsIdx = 0; + for (var row = config.firstRow; row < first; row++) { + var foldLine = this.session.getFoldLine(row); + if (foldLine) { + if (foldLine.containsRow(first)) { + first = foldLine.start.row; + break; + } + else { + row = foldLine.end.row; + } + } + lineElementsIdx++; + } + var heightChanged = false; + var row = first; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (true) { + if (row > foldStart) { + row = foldLine.end.row + 1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (row > last) + break; var lineElement = lineElements[lineElementsIdx++]; + if (lineElement) { + this.dom.removeChildren(lineElement); + this.$renderLine(lineElement, row, row == foldStart ? foldLine : false); + if (heightChanged) + lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + "px"; + var height = (config.lineHeight * this.session.getRowLength(row)) + "px"; + if (lineElement.style.height != height) { + heightChanged = true; + lineElement.style.height = height; + } + } + row++; + } + if (heightChanged) { + while (lineElementsIdx < this.$lines.cells.length) { + var cell = this.$lines.cells[lineElementsIdx++]; + cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + "px"; + } + } + }; + Text.prototype.scrollLines = function (config) { + var oldConfig = this.config; + this.config = config; + if (this.$lines.pageChanged(oldConfig, config)) + return this.update(config); + this.$lines.moveContainer(config); + var lastRow = config.lastRow; + var oldLastRow = oldConfig ? oldConfig.lastRow : -1; + if (!oldConfig || oldLastRow < config.firstRow) + return this.update(config); + if (lastRow < oldConfig.firstRow) + return this.update(config); + if (!oldConfig || oldConfig.lastRow < config.firstRow) + return this.update(config); + if (config.lastRow < oldConfig.firstRow) + return this.update(config); + if (oldConfig.firstRow < config.firstRow) + for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) + this.$lines.shift(); + if (oldConfig.lastRow > config.lastRow) + for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--) + this.$lines.pop(); + if (config.firstRow < oldConfig.firstRow) { + this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1)); + } + if (config.lastRow > oldConfig.lastRow) { + this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow)); + } + this.$highlightIndentGuide(); + }; + Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) { + var fragment = []; + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + while (true) { + if (row > foldStart) { + row = foldLine.end.row + 1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (row > lastRow) + break; + var line = this.$lines.createCell(row, config, this.session); + var lineEl = line.element; + this.dom.removeChildren(lineEl); + dom.setStyle(lineEl.style, "height", this.$lines.computeLineHeight(row, config, this.session) + "px"); + dom.setStyle(lineEl.style, "top", this.$lines.computeLineTop(row, config, this.session) + "px"); + this.$renderLine(lineEl, row, row == foldStart ? foldLine : false); + if (this.$useLineGroups()) { + lineEl.className = "ace_line_group"; + } + else { + lineEl.className = "ace_line"; + } + fragment.push(line); + row++; + } + return fragment; + }; + Text.prototype.update = function (config) { + this.$lines.moveContainer(config); + this.config = config; + var firstRow = config.firstRow; + var lastRow = config.lastRow; + var lines = this.$lines; + while (lines.getLength()) + lines.pop(); + lines.push(this.$renderLinesFragment(config, firstRow, lastRow)); + }; + Text.prototype.$renderToken = function (parent, screenColumn, token, value) { + var self = this; + var re = /(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC\u2066\u2067\u2068\u202A\u202B\u202D\u202E\u202C\u2069\u2060\u2061\u2062\u2063\u2064\u206A\u206B\u206B\u206C\u206D\u206E\u206F]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g; + var valueFragment = this.dom.createFragment(this.element); + var m; + var i = 0; + while (m = re.exec(value)) { + var tab = m[1]; + var simpleSpace = m[2]; + var controlCharacter = m[3]; + var cjkSpace = m[4]; + var cjk = m[5]; + if (!self.showSpaces && simpleSpace) + continue; + var before = i != m.index ? value.slice(i, m.index) : ""; + i = m.index + m[0].length; + if (before) { + valueFragment.appendChild(this.dom.createTextNode(before, this.element)); + } + if (tab) { + var tabSize = self.session.getScreenTabSize(screenColumn + m.index); + var text = self.$tabStrings[tabSize].cloneNode(true); + text["charCount"] = 1; + valueFragment.appendChild(text); + screenColumn += tabSize - 1; + } + else if (simpleSpace) { + if (self.showSpaces) { + var span = this.dom.createElement("span"); + span.className = "ace_invisible ace_invisible_space"; + span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length); + valueFragment.appendChild(span); + } + else { + valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element)); + } + } + else if (controlCharacter) { + var span = this.dom.createElement("span"); + span.className = "ace_invisible ace_invisible_space ace_invalid"; + span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length); + valueFragment.appendChild(span); + } + else if (cjkSpace) { + screenColumn += 1; + var span = this.dom.createElement("span"); + span.style.width = (self.config.characterWidth * 2) + "px"; + span.className = self.showSpaces ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk"; + span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace; + valueFragment.appendChild(span); + } + else if (cjk) { + screenColumn += 1; + var span = this.dom.createElement("span"); + span.style.width = (self.config.characterWidth * 2) + "px"; + span.className = "ace_cjk"; + span.textContent = cjk; + valueFragment.appendChild(span); + } + } + valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element)); + if (!isTextToken(token.type)) { + var classes = "ace_" + token.type.replace(/\./g, " ace_"); + var span = this.dom.createElement("span"); + if (token.type == "fold") { + span.style.width = (token.value.length * this.config.characterWidth) + "px"; + span.setAttribute("title", nls("inline-fold.closed.title", "Unfold code")); + } + span.className = classes; + span.appendChild(valueFragment); + parent.appendChild(span); + } + else { + parent.appendChild(valueFragment); + } + return screenColumn + value.length; + }; + Text.prototype.renderIndentGuide = function (parent, value, max) { + var cols = value.search(this.$indentGuideRe); + if (cols <= 0 || cols >= max) + return value; + if (value[0] == " ") { + cols -= cols % this.tabSize; + var count = cols / this.tabSize; + for (var i = 0; i < count; i++) { + parent.appendChild(this.$tabStrings[" "].cloneNode(true)); + } + this.$highlightIndentGuide(); + return value.substr(cols); + } + else if (value[0] == "\t") { + for (var i = 0; i < cols; i++) { + parent.appendChild(this.$tabStrings["\t"].cloneNode(true)); + } + this.$highlightIndentGuide(); + return value.substr(cols); + } + this.$highlightIndentGuide(); + return value; + }; + Text.prototype.$highlightIndentGuide = function () { + if (!this.$highlightIndentGuides || !this.displayIndentGuides) + return; + this.$highlightIndentGuideMarker = { + indentLevel: undefined, + start: undefined, + end: undefined, + dir: undefined + }; + var lines = this.session.doc.$lines; + if (!lines) + return; + var cursor = this.session.selection.getCursor(); + var initialIndent = /^\s*/.exec(this.session.doc.getLine(cursor.row))[0].length; + var elementIndentLevel = Math.floor(initialIndent / this.tabSize); + this.$highlightIndentGuideMarker = { + indentLevel: elementIndentLevel, + start: cursor.row + }; + var bracketHighlight = this.session.$bracketHighlight; + if (bracketHighlight) { + var ranges = this.session.$bracketHighlight.ranges; + for (var i = 0; i < ranges.length; i++) { + if (cursor.row !== ranges[i].start.row) { + this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1; + if (cursor.row > ranges[i].start.row) { + this.$highlightIndentGuideMarker.dir = -1; + } + else { + this.$highlightIndentGuideMarker.dir = 1; + } + break; + } + } + } + if (!this.$highlightIndentGuideMarker.end) { + if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) { + this.$highlightIndentGuideMarker.dir = 1; + for (var i = cursor.row + 1; i < lines.length; i++) { + var line = lines[i]; + var currentIndent = /^\s*/.exec(line)[0].length; + if (line !== '') { + this.$highlightIndentGuideMarker.end = i; + if (currentIndent <= initialIndent) + break; + } + } + } + } + this.$renderHighlightIndentGuide(); + }; + Text.prototype.$clearActiveIndentGuide = function () { + var activeIndentGuides = this.element.querySelectorAll(".ace_indent-guide-active"); + for (var i = 0; i < activeIndentGuides.length; i++) { + activeIndentGuides[i].classList.remove("ace_indent-guide-active"); + } + }; + Text.prototype.$setIndentGuideActive = function (cell, indentLevel) { + var line = this.session.doc.getLine(cell.row); + if (line !== "") { + var element = cell.element; + if (cell.element.classList && cell.element.classList.contains("ace_line_group")) { + if (cell.element.childNodes.length > 0) { + element = cell.element.childNodes[0]; + } + else { + return; + } + } + var childNodes = element.childNodes; + if (childNodes) { + var node = childNodes[indentLevel - 1]; + if (node && node.classList && node.classList.contains("ace_indent-guide")) + node.classList.add("ace_indent-guide-active"); + } + } + }; + Text.prototype.$renderHighlightIndentGuide = function () { + if (!this.$lines) + return; + var cells = this.$lines.cells; + this.$clearActiveIndentGuide(); + var indentLevel = this.$highlightIndentGuideMarker.indentLevel; + if (indentLevel !== 0) { + if (this.$highlightIndentGuideMarker.dir === 1) { + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start + + 1) { + if (cell.row >= this.$highlightIndentGuideMarker.end) + break; + this.$setIndentGuideActive(cell, indentLevel); + } + } + } + else { + for (var i = cells.length - 1; i >= 0; i--) { + var cell = cells[i]; + if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) { + if (cell.row < this.$highlightIndentGuideMarker.end) + break; + this.$setIndentGuideActive(cell, indentLevel); + } + } + } + } + }; + Text.prototype.$createLineElement = function (parent) { + var lineEl = this.dom.createElement("div"); + lineEl.className = "ace_line"; + lineEl.style.height = this.config.lineHeight + "px"; + return lineEl; + }; + Text.prototype.$renderWrappedLine = function (parent, tokens, splits) { + var chars = 0; + var split = 0; + var splitChars = splits[0]; + var screenColumn = 0; + var lineEl = this.$createLineElement(); + parent.appendChild(lineEl); + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + var value = token.value; + if (i == 0 && this.displayIndentGuides) { + chars = value.length; + value = this.renderIndentGuide(lineEl, value, splitChars); + if (!value) + continue; + chars -= value.length; + } + if (chars + value.length < splitChars) { + screenColumn = this.$renderToken(lineEl, screenColumn, token, value); + chars += value.length; + } + else { + while (chars + value.length >= splitChars) { + screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars)); + value = value.substring(splitChars - chars); + chars = splitChars; + lineEl = this.$createLineElement(); + parent.appendChild(lineEl); + var text = this.dom.createTextNode(lang.stringRepeat("\xa0", splits.indent), this.element); + text["charCount"] = 0; // not to take into account when we are counting columns + lineEl.appendChild(text); + split++; + screenColumn = 0; + splitChars = splits[split] || Number.MAX_VALUE; + } + if (value.length != 0) { + chars += value.length; + screenColumn = this.$renderToken(lineEl, screenColumn, token, value); + } + } + } + if (splits[splits.length - 1] > this.MAX_LINE_LENGTH) + this.$renderOverflowMessage(lineEl, screenColumn, null, "", true); + }; + Text.prototype.$renderSimpleLine = function (parent, tokens) { + var screenColumn = 0; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + var value = token.value; + if (i == 0 && this.displayIndentGuides) { + value = this.renderIndentGuide(parent, value); + if (!value) + continue; + } + if (screenColumn + value.length > this.MAX_LINE_LENGTH) + return this.$renderOverflowMessage(parent, screenColumn, token, value); + screenColumn = this.$renderToken(parent, screenColumn, token, value); + } + }; + Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) { + token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn)); + var overflowEl = this.dom.createElement("span"); + overflowEl.className = "ace_inline_button ace_keyword ace_toggle_wrap"; + overflowEl.textContent = hide ? "" : ""; + parent.appendChild(overflowEl); + }; + Text.prototype.$renderLine = function (parent, row, foldLine) { + if (!foldLine && foldLine != false) + foldLine = this.session.getFoldLine(row); + if (foldLine) + var tokens = this.$getFoldLineTokens(row, foldLine); + else + var tokens = this.session.getTokens(row); + var lastLineEl = parent; + if (tokens.length) { + var splits = this.session.getRowSplitData(row); + if (splits && splits.length) { + this.$renderWrappedLine(parent, tokens, splits); + var lastLineEl = parent.lastChild; + } + else { + var lastLineEl = parent; + if (this.$useLineGroups()) { + lastLineEl = this.$createLineElement(); + parent.appendChild(lastLineEl); + } + this.$renderSimpleLine(lastLineEl, tokens); + } + } + else if (this.$useLineGroups()) { + lastLineEl = this.$createLineElement(); + parent.appendChild(lastLineEl); + } + if (this.showEOL && lastLineEl) { + if (foldLine) + row = foldLine.end.row; + var invisibleEl = this.dom.createElement("span"); + invisibleEl.className = "ace_invisible ace_invisible_eol"; + invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR; + lastLineEl.appendChild(invisibleEl); + } + }; + Text.prototype.$getFoldLineTokens = function (row, foldLine) { + var session = this.session; + var renderTokens = []; + function addTokens(tokens, from, to) { + var idx = 0, col = 0; + while ((col + tokens[idx].value.length) < from) { + col += tokens[idx].value.length; + idx++; + if (idx == tokens.length) + return; + } + if (col != from) { + var value = tokens[idx].value.substring(from - col); + if (value.length > (to - from)) + value = value.substring(0, to - from); + renderTokens.push({ + type: tokens[idx].type, + value: value + }); + col = from + value.length; + idx += 1; + } + while (col < to && idx < tokens.length) { + var value = tokens[idx].value; + if (value.length + col > to) { + renderTokens.push({ + type: tokens[idx].type, + value: value.substring(0, to - col) + }); + } + else + renderTokens.push(tokens[idx]); + col += value.length; + idx += 1; + } + } + var tokens = session.getTokens(row); + foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) { + if (placeholder != null) { + renderTokens.push({ + type: "fold", + value: placeholder + }); + } + else { + if (isNewRow) + tokens = session.getTokens(row); + if (tokens.length) + addTokens(tokens, lastColumn, column); + } + }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); + return renderTokens; + }; + Text.prototype.$useLineGroups = function () { + return this.session.getUseWrapMode(); + }; + return Text; +}()); +Text.prototype.EOF_CHAR = "\xB6"; +Text.prototype.EOL_CHAR_LF = "\xAC"; +Text.prototype.EOL_CHAR_CRLF = "\xa4"; +Text.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF; +Text.prototype.TAB_CHAR = "\u2014"; //"\u21E5"; +Text.prototype.SPACE_CHAR = "\xB7"; +Text.prototype.$padding = 0; +Text.prototype.MAX_LINE_LENGTH = 10000; +Text.prototype.showInvisibles = false; +Text.prototype.showSpaces = false; +Text.prototype.showTabs = false; +Text.prototype.showEOL = false; +Text.prototype.displayIndentGuides = true; +Text.prototype.$highlightIndentGuides = true; +Text.prototype.$tabStrings = []; +Text.prototype.destroy = {}; +Text.prototype.onChangeTabSize = Text.prototype.$computeTabString; +oop.implement(Text.prototype, EventEmitter); +exports.Text = Text; +}); +ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var Cursor = /** @class */ (function () { + function Cursor(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_cursor-layer"; + parentEl.appendChild(this.element); + this.isVisible = false; + this.isBlinking = true; + this.blinkInterval = 1000; + this.smoothBlinking = false; + this.cursors = []; + this.cursor = this.addCursor(); + dom.addCssClass(this.element, "ace_hidden-cursors"); + this.$updateCursors = this.$updateOpacity.bind(this); + } + Cursor.prototype.$updateOpacity = function (val) { + var cursors = this.cursors; + for (var i = cursors.length; i--;) + dom.setStyle(cursors[i].style, "opacity", val ? "" : "0"); + }; + Cursor.prototype.$startCssAnimation = function () { + var cursors = this.cursors; + for (var i = cursors.length; i--;) + cursors[i].style.animationDuration = this.blinkInterval + "ms"; + this.$isAnimating = true; + setTimeout(function () { + if (this.$isAnimating) { + dom.addCssClass(this.element, "ace_animate-blinking"); + } + }.bind(this)); + }; + Cursor.prototype.$stopCssAnimation = function () { + this.$isAnimating = false; + dom.removeCssClass(this.element, "ace_animate-blinking"); + }; + Cursor.prototype.setPadding = function (padding) { + this.$padding = padding; + }; + Cursor.prototype.setSession = function (session) { + this.session = session; + }; + Cursor.prototype.setBlinking = function (blinking) { + if (blinking != this.isBlinking) { + this.isBlinking = blinking; + this.restartTimer(); + } + }; + Cursor.prototype.setBlinkInterval = function (blinkInterval) { + if (blinkInterval != this.blinkInterval) { + this.blinkInterval = blinkInterval; + this.restartTimer(); + } + }; + Cursor.prototype.setSmoothBlinking = function (smoothBlinking) { + if (smoothBlinking != this.smoothBlinking) { + this.smoothBlinking = smoothBlinking; + dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); + this.$updateCursors(true); + this.restartTimer(); + } + }; + Cursor.prototype.addCursor = function () { + var el = dom.createElement("div"); + el.className = "ace_cursor"; + this.element.appendChild(el); + this.cursors.push(el); + return el; + }; + Cursor.prototype.removeCursor = function () { + if (this.cursors.length > 1) { + var el = this.cursors.pop(); + el.parentNode.removeChild(el); + return el; + } + }; + Cursor.prototype.hideCursor = function () { + this.isVisible = false; + dom.addCssClass(this.element, "ace_hidden-cursors"); + this.restartTimer(); + }; + Cursor.prototype.showCursor = function () { + this.isVisible = true; + dom.removeCssClass(this.element, "ace_hidden-cursors"); + this.restartTimer(); + }; + Cursor.prototype.restartTimer = function () { + var update = this.$updateCursors; + clearInterval(this.intervalId); + clearTimeout(this.timeoutId); + this.$stopCssAnimation(); + if (this.smoothBlinking) { + this.$isSmoothBlinking = false; + dom.removeCssClass(this.element, "ace_smooth-blinking"); + } + update(true); + if (!this.isBlinking || !this.blinkInterval || !this.isVisible) { + this.$stopCssAnimation(); + return; + } + if (this.smoothBlinking) { + this.$isSmoothBlinking = true; + setTimeout(function () { + if (this.$isSmoothBlinking) { + dom.addCssClass(this.element, "ace_smooth-blinking"); + } + }.bind(this)); + } + if (dom.HAS_CSS_ANIMATION) { + this.$startCssAnimation(); + } + else { + var blink = /**@this{Cursor}*/ function () { + this.timeoutId = setTimeout(function () { + update(false); + }, 0.6 * this.blinkInterval); + }.bind(this); + this.intervalId = setInterval(function () { + update(true); + blink(); + }, this.blinkInterval); + blink(); + } + }; + Cursor.prototype.getPixelPosition = function (position, onScreen) { + if (!this.config || !this.session) + return { left: 0, top: 0 }; + if (!position) + position = this.session.selection.getCursor(); + var pos = this.session.documentToScreenPosition(position); + var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row) + ? this.session.$bidiHandler.getPosLeft(pos.column) + : pos.column * this.config.characterWidth); + var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * + this.config.lineHeight; + return { left: cursorLeft, top: cursorTop }; + }; + Cursor.prototype.isCursorInView = function (pixelPos, config) { + return pixelPos.top >= 0 && pixelPos.top < config.maxHeight; + }; + Cursor.prototype.update = function (config) { + this.config = config; + var selections = this.session.$selectionMarkers; + var i = 0, cursorIndex = 0; + if (selections === undefined || selections.length === 0) { + selections = [{ cursor: null }]; + } + for (var i = 0, n = selections.length; i < n; i++) { + var pixelPos = this.getPixelPosition(selections[i].cursor, true); + if ((pixelPos.top > config.height + config.offset || + pixelPos.top < 0) && i > 1) { + continue; + } + var element = this.cursors[cursorIndex++] || this.addCursor(); + var style = element.style; + if (!this.drawCursor) { + if (!this.isCursorInView(pixelPos, config)) { + dom.setStyle(style, "display", "none"); + } + else { + dom.setStyle(style, "display", "block"); + dom.translate(element, pixelPos.left, pixelPos.top); + dom.setStyle(style, "width", Math.round(config.characterWidth) + "px"); + dom.setStyle(style, "height", config.lineHeight + "px"); + } + } + else { + this.drawCursor(element, pixelPos, config, selections[i], this.session); + } + } + while (this.cursors.length > cursorIndex) + this.removeCursor(); + var overwrite = this.session.getOverwrite(); + this.$setOverwrite(overwrite); + this.$pixelPos = pixelPos; + this.restartTimer(); + }; + Cursor.prototype.$setOverwrite = function (overwrite) { + if (overwrite != this.overwrite) { + this.overwrite = overwrite; + if (overwrite) + dom.addCssClass(this.element, "ace_overwrite-cursors"); + else + dom.removeCssClass(this.element, "ace_overwrite-cursors"); + } + }; + Cursor.prototype.destroy = function () { + clearInterval(this.intervalId); + clearTimeout(this.timeoutId); + }; + return Cursor; +}()); +Cursor.prototype.$padding = 0; +Cursor.prototype.drawCursor = null; +exports.Cursor = Cursor; +}); +ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var oop = require("./lib/oop"); +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var MAX_SCROLL_H = 0x8000; +var Scrollbar = /** @class */ (function () { + function Scrollbar(parent, classSuffix) { + this.element = dom.createElement("div"); + this.element.className = "ace_scrollbar ace_scrollbar" + classSuffix; + this.inner = dom.createElement("div"); + this.inner.className = "ace_scrollbar-inner"; + this.inner.textContent = "\xa0"; + this.element.appendChild(this.inner); + parent.appendChild(this.element); + this.setVisible(false); + this.skipEvent = false; + event.addListener(this.element, "scroll", this.onScroll.bind(this)); + event.addListener(this.element, "mousedown", event.preventDefault); + } + Scrollbar.prototype.setVisible = function (isVisible) { + this.element.style.display = isVisible ? "" : "none"; + this.isVisible = isVisible; + this.coeff = 1; + }; + return Scrollbar; +}()); +oop.implement(Scrollbar.prototype, EventEmitter); +var VScrollBar = /** @class */ (function (_super) { + __extends(VScrollBar, _super); + function VScrollBar(parent, renderer) { + var _this = _super.call(this, parent, '-v') || this; + _this.scrollTop = 0; + _this.scrollHeight = 0; + renderer.$scrollbarWidth = + _this.width = dom.scrollbarWidth(parent.ownerDocument); + _this.inner.style.width = + _this.element.style.width = (_this.width || 15) + 5 + "px"; + _this.$minWidth = 0; + return _this; + } + VScrollBar.prototype.onScroll = function () { + if (!this.skipEvent) { + this.scrollTop = this.element.scrollTop; + if (this.coeff != 1) { + var h = this.element.clientHeight / this.scrollHeight; + this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h); + } + this._emit("scroll", { data: this.scrollTop }); + } + this.skipEvent = false; + }; + VScrollBar.prototype.getWidth = function () { + return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0); + }; + VScrollBar.prototype.setHeight = function (height) { + this.element.style.height = height + "px"; + }; + VScrollBar.prototype.setScrollHeight = function (height) { + this.scrollHeight = height; + if (height > MAX_SCROLL_H) { + this.coeff = MAX_SCROLL_H / height; + height = MAX_SCROLL_H; + } + else if (this.coeff != 1) { + this.coeff = 1; + } + this.inner.style.height = height + "px"; + }; + VScrollBar.prototype.setScrollTop = function (scrollTop) { + if (this.scrollTop != scrollTop) { + this.skipEvent = true; + this.scrollTop = scrollTop; + this.element.scrollTop = scrollTop * this.coeff; + } + }; + return VScrollBar; +}(Scrollbar)); +VScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight; +var HScrollBar = /** @class */ (function (_super) { + __extends(HScrollBar, _super); + function HScrollBar(parent, renderer) { + var _this = _super.call(this, parent, '-h') || this; + _this.scrollLeft = 0; + _this.height = renderer.$scrollbarWidth; + _this.inner.style.height = + _this.element.style.height = (_this.height || 15) + 5 + "px"; + return _this; + } + HScrollBar.prototype.onScroll = function () { + if (!this.skipEvent) { + this.scrollLeft = this.element.scrollLeft; + this._emit("scroll", { data: this.scrollLeft }); + } + this.skipEvent = false; + }; + HScrollBar.prototype.getHeight = function () { + return this.isVisible ? this.height : 0; + }; + HScrollBar.prototype.setWidth = function (width) { + this.element.style.width = width + "px"; + }; + HScrollBar.prototype.setInnerWidth = function (width) { + this.inner.style.width = width + "px"; + }; + HScrollBar.prototype.setScrollWidth = function (width) { + this.inner.style.width = width + "px"; + }; + HScrollBar.prototype.setScrollLeft = function (scrollLeft) { + if (this.scrollLeft != scrollLeft) { + this.skipEvent = true; + this.scrollLeft = this.element.scrollLeft = scrollLeft; + } + }; + return HScrollBar; +}(Scrollbar)); +exports.ScrollBar = VScrollBar; // backward compatibility +exports.ScrollBarV = VScrollBar; // backward compatibility +exports.ScrollBarH = HScrollBar; // backward compatibility +exports.VScrollBar = VScrollBar; +exports.HScrollBar = HScrollBar; +}); -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_utils_style_shared_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_style_index_css__WEBPACK_IMPORTED_MODULE_3__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_trial_style_index_css__WEBPACK_IMPORTED_MODULE_4__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_panel_css__WEBPACK_IMPORTED_MODULE_5__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_history_css__WEBPACK_IMPORTED_MODULE_6__["default"]); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_trial_css__WEBPACK_IMPORTED_MODULE_7__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `body { - font-family: "Verdana", "Geneva", "sans-serif"; -} +ace.define("ace/scrollbar_custom",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var oop = require("./lib/oop"); +var dom = require("./lib/dom"); +var event = require("./lib/event"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +dom.importCssString(".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\n position: absolute;\n background: rgba(128, 128, 128, 0.6);\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n border: 1px solid #bbb;\n border-radius: 2px;\n z-index: 8;\n}\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\n position: absolute;\n z-index: 6;\n background: none;\n overflow: hidden!important;\n}\n.ace_editor>.ace_sb-v {\n z-index: 6;\n right: 0;\n top: 0;\n width: 12px;\n}\n.ace_editor>.ace_sb-v div {\n z-index: 8;\n right: 0;\n width: 100%;\n}\n.ace_editor>.ace_sb-h {\n bottom: 0;\n left: 0;\n height: 12px;\n}\n.ace_editor>.ace_sb-h div {\n bottom: 0;\n height: 100%;\n}\n.ace_editor>.ace_sb_grabbed {\n z-index: 8;\n background: #000;\n}", "ace_scrollbar.css", false); +var ScrollBar = /** @class */ (function () { + function ScrollBar(parent, classSuffix) { + this.element = dom.createElement("div"); + this.element.className = "ace_sb" + classSuffix; + this.inner = dom.createElement("div"); + this.inner.className = ""; + this.element.appendChild(this.inner); + this.VScrollWidth = 12; + this.HScrollHeight = 12; + parent.appendChild(this.element); + this.setVisible(false); + this.skipEvent = false; + event.addMultiMouseDownListener(this.element, [500, 300, 300], this, "onMouseDown"); + } + ScrollBar.prototype.setVisible = function (isVisible) { + this.element.style.display = isVisible ? "" : "none"; + this.isVisible = isVisible; + this.coeff = 1; + }; + return ScrollBar; +}()); +oop.implement(ScrollBar.prototype, EventEmitter); +var VScrollBar = /** @class */ (function (_super) { + __extends(VScrollBar, _super); + function VScrollBar(parent, renderer) { + var _this = _super.call(this, parent, '-v') || this; + _this.scrollTop = 0; + _this.scrollHeight = 0; + _this.parent = parent; + _this.width = _this.VScrollWidth; + _this.renderer = renderer; + _this.inner.style.width = _this.element.style.width = (_this.width || 15) + "px"; + _this.$minWidth = 0; + return _this; + } + VScrollBar.prototype.onMouseDown = function (eType, e) { + if (eType !== "mousedown") + return; + if (event.getButton(e) !== 0 || e.detail === 2) { + return; + } + if (e.target === this.inner) { + var self = this; + var mousePageY = e.clientY; + var onMouseMove = function (e) { + mousePageY = e.clientY; + }; + var onMouseUp = function () { + clearInterval(timerId); + }; + var startY = e.clientY; + var startTop = this.thumbTop; + var onScrollInterval = function () { + if (mousePageY === undefined) + return; + var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY); + if (scrollTop === self.scrollTop) + return; + self._emit("scroll", { data: scrollTop }); + }; + event.capture(this.inner, onMouseMove, onMouseUp); + var timerId = setInterval(onScrollInterval, 20); + return event.preventDefault(e); + } + var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2; + this._emit("scroll", { data: this.scrollTopFromThumbTop(top) }); + return event.preventDefault(e); + }; + VScrollBar.prototype.getHeight = function () { + return this.height; + }; + VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) { + var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight); + scrollTop = scrollTop >> 0; + if (scrollTop < 0) { + scrollTop = 0; + } + else if (scrollTop > this.pageHeight - this.viewHeight) { + scrollTop = this.pageHeight - this.viewHeight; + } + return scrollTop; + }; + VScrollBar.prototype.getWidth = function () { + return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0); + }; + VScrollBar.prototype.setHeight = function (height) { + this.height = Math.max(0, height); + this.slideHeight = this.height; + this.viewHeight = this.height; + this.setScrollHeight(this.pageHeight, true); + }; + VScrollBar.prototype.setScrollHeight = function (height, force) { + if (this.pageHeight === height && !force) + return; + this.pageHeight = height; + this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight; + if (this.thumbHeight > this.slideHeight) + this.thumbHeight = this.slideHeight; + if (this.thumbHeight < 15) + this.thumbHeight = 15; + this.inner.style.height = this.thumbHeight + "px"; + if (this.scrollTop > (this.pageHeight - this.viewHeight)) { + this.scrollTop = (this.pageHeight - this.viewHeight); + if (this.scrollTop < 0) + this.scrollTop = 0; + this._emit("scroll", { data: this.scrollTop }); + } + }; + VScrollBar.prototype.setScrollTop = function (scrollTop) { + this.scrollTop = scrollTop; + if (scrollTop < 0) + scrollTop = 0; + this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight); + this.inner.style.top = this.thumbTop + "px"; + }; + return VScrollBar; +}(ScrollBar)); +VScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight; +var HScrollBar = /** @class */ (function (_super) { + __extends(HScrollBar, _super); + function HScrollBar(parent, renderer) { + var _this = _super.call(this, parent, '-h') || this; + _this.scrollLeft = 0; + _this.scrollWidth = 0; + _this.height = _this.HScrollHeight; + _this.inner.style.height = _this.element.style.height = (_this.height || 12) + "px"; + _this.renderer = renderer; + return _this; + } + HScrollBar.prototype.onMouseDown = function (eType, e) { + if (eType !== "mousedown") + return; + if (event.getButton(e) !== 0 || e.detail === 2) { + return; + } + if (e.target === this.inner) { + var self = this; + var mousePageX = e.clientX; + var onMouseMove = function (e) { + mousePageX = e.clientX; + }; + var onMouseUp = function () { + clearInterval(timerId); + }; + var startX = e.clientX; + var startLeft = this.thumbLeft; + var onScrollInterval = function () { + if (mousePageX === undefined) + return; + var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX); + if (scrollLeft === self.scrollLeft) + return; + self._emit("scroll", { data: scrollLeft }); + }; + event.capture(this.inner, onMouseMove, onMouseUp); + var timerId = setInterval(onScrollInterval, 20); + return event.preventDefault(e); + } + var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2; + this._emit("scroll", { data: this.scrollLeftFromThumbLeft(left) }); + return event.preventDefault(e); + }; + HScrollBar.prototype.getHeight = function () { + return this.isVisible ? this.height : 0; + }; + HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) { + var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth); + scrollLeft = scrollLeft >> 0; + if (scrollLeft < 0) { + scrollLeft = 0; + } + else if (scrollLeft > this.pageWidth - this.viewWidth) { + scrollLeft = this.pageWidth - this.viewWidth; + } + return scrollLeft; + }; + HScrollBar.prototype.setWidth = function (width) { + this.width = Math.max(0, width); + this.element.style.width = this.width + "px"; + this.slideWidth = this.width; + this.viewWidth = this.width; + this.setScrollWidth(this.pageWidth, true); + }; + HScrollBar.prototype.setScrollWidth = function (width, force) { + if (this.pageWidth === width && !force) + return; + this.pageWidth = width; + this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth; + if (this.thumbWidth > this.slideWidth) + this.thumbWidth = this.slideWidth; + if (this.thumbWidth < 15) + this.thumbWidth = 15; + this.inner.style.width = this.thumbWidth + "px"; + if (this.scrollLeft > (this.pageWidth - this.viewWidth)) { + this.scrollLeft = (this.pageWidth - this.viewWidth); + if (this.scrollLeft < 0) + this.scrollLeft = 0; + this._emit("scroll", { data: this.scrollLeft }); + } + }; + HScrollBar.prototype.setScrollLeft = function (scrollLeft) { + this.scrollLeft = scrollLeft; + if (scrollLeft < 0) + scrollLeft = 0; + this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth); + this.inner.style.left = (this.thumbLeft) + "px"; + }; + return HScrollBar; +}(ScrollBar)); +HScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth; +exports.ScrollBar = VScrollBar; // backward compatibility +exports.ScrollBarV = VScrollBar; // backward compatibility +exports.ScrollBarH = HScrollBar; // backward compatibility +exports.VScrollBar = VScrollBar; +exports.HScrollBar = HScrollBar; -.loading { - font-size: 40px; -} +}); -/* Link Button */ +ace.define("ace/renderloop",["require","exports","module","ace/lib/event"], function(require, exports, module){"use strict"; +var event = require("./lib/event"); +var RenderLoop = /** @class */ (function () { + function RenderLoop(onRender, win) { + this.onRender = onRender; + this.pending = false; + this.changes = 0; + this.$recursionLimit = 2; + this.window = win || window; + var _self = this; + this._flush = function (ts) { + _self.pending = false; + var changes = _self.changes; + if (changes) { + event.blockIdle(100); + _self.changes = 0; + _self.onRender(changes); + } + if (_self.changes) { + if (_self.$recursionLimit-- < 0) + return; + _self.schedule(); + } + else { + _self.$recursionLimit = 2; + } + }; + } + RenderLoop.prototype.schedule = function (change) { + this.changes = this.changes | change; + if (this.changes && !this.pending) { + event.nextFrame(this._flush); + this.pending = true; + } + }; + RenderLoop.prototype.clear = function (change) { + var changes = this.changes; + this.changes = 0; + return changes; + }; + return RenderLoop; +}()); +exports.RenderLoop = RenderLoop; -a.link-button { - text-decoration: none; - display:inline-block; - padding: 4px 0; - /*padding: 4px 12px;*/ - margin-bottom: 0; - font-size: 14px; - width: 100px; - line-height: 15px; - color: #333; - text-align: center; - text-shadow: 0 1px 1px rgba(255,255,255,0.75); - vertical-align: middle; - cursor: pointer; - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top,#fff,#e6e6e6); - background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6)); - background-image: -webkit-linear-gradient(top,#fff,#e6e6e6); - background-image: -o-linear-gradient(top,#fff,#e6e6e6); - background-image: linear-gradient(to bottom,#fff,#e6e6e6); - background-repeat: repeat-x; - border: 1px solid #ccc; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25); - border-bottom-color: #b3b3b3; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); -} +}); -a.link-button:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); - background-color:#e0e0e0; -} +ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module){var oop = require("../lib/oop"); +var dom = require("../lib/dom"); +var lang = require("../lib/lang"); +var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var CHAR_COUNT = 512; +var USE_OBSERVER = typeof ResizeObserver == "function"; +var L = 200; +var FontMetrics = /** @class */ (function () { + function FontMetrics(parentEl) { + this.el = dom.createElement("div"); + this.$setMeasureNodeStyles(this.el.style, true); + this.$main = dom.createElement("div"); + this.$setMeasureNodeStyles(this.$main.style); + this.$measureNode = dom.createElement("div"); + this.$setMeasureNodeStyles(this.$measureNode.style); + this.el.appendChild(this.$main); + this.el.appendChild(this.$measureNode); + parentEl.appendChild(this.el); + this.$measureNode.textContent = lang.stringRepeat("X", CHAR_COUNT); + this.$characterSize = { width: 0, height: 0 }; + if (USE_OBSERVER) + this.$addObserver(); + else + this.checkForSizeChanges(); + } + FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) { + style.width = style.height = "auto"; + style.left = style.top = "0px"; + style.visibility = "hidden"; + style.position = "absolute"; + style.whiteSpace = "pre"; + if (useragent.isIE < 8) { + style["font-family"] = "inherit"; + } + else { + style.font = "inherit"; + } + style.overflow = isRoot ? "hidden" : "visible"; + }; + FontMetrics.prototype.checkForSizeChanges = function (size) { + if (size === undefined) + size = this.$measureSizes(); + if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { + this.$measureNode.style.fontWeight = "bold"; + var boldSize = this.$measureSizes(); + this.$measureNode.style.fontWeight = ""; + this.$characterSize = size; + this.charSizes = Object.create(null); + this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; + this._emit("changeCharacterSize", { data: size }); + } + }; + FontMetrics.prototype.$addObserver = function () { + var self = this; + this.$observer = new window.ResizeObserver(function (e) { + self.checkForSizeChanges(); + }); + this.$observer.observe(this.$measureNode); + }; + FontMetrics.prototype.$pollSizeChanges = function () { + if (this.$pollSizeChangesTimer || this.$observer) + return this.$pollSizeChangesTimer; + var self = this; + return this.$pollSizeChangesTimer = event.onIdle(function cb() { + self.checkForSizeChanges(); + event.onIdle(cb, 500); + }, 500); + }; + FontMetrics.prototype.setPolling = function (val) { + if (val) { + this.$pollSizeChanges(); + } + else if (this.$pollSizeChangesTimer) { + clearInterval(this.$pollSizeChangesTimer); + this.$pollSizeChangesTimer = 0; + } + }; + FontMetrics.prototype.$measureSizes = function (node) { + var size = { + height: (node || this.$measureNode).clientHeight, + width: (node || this.$measureNode).clientWidth / CHAR_COUNT + }; + if (size.width === 0 || size.height === 0) + return null; + return size; + }; + FontMetrics.prototype.$measureCharWidth = function (ch) { + this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT); + var rect = this.$main.getBoundingClientRect(); + return rect.width / CHAR_COUNT; + }; + FontMetrics.prototype.getCharacterWidth = function (ch) { + var w = this.charSizes[ch]; + if (w === undefined) { + w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width; + } + return w; + }; + FontMetrics.prototype.destroy = function () { + clearInterval(this.$pollSizeChangesTimer); + if (this.$observer) + this.$observer.disconnect(); + if (this.el && this.el.parentNode) + this.el.parentNode.removeChild(this.el); + }; + FontMetrics.prototype.$getZoom = function (element) { + if (!element || !element.parentElement) + return 1; + return (Number(window.getComputedStyle(element)["zoom"]) || 1) * this.$getZoom(element.parentElement); + }; + FontMetrics.prototype.$initTransformMeasureNodes = function () { + var t = function (t, l) { + return ["div", { + style: "position: absolute;top:" + t + "px;left:" + l + "px;" + }]; + }; + this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el); + }; + FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) { + if (clientPos) { + var zoom = this.$getZoom(this.el); + clientPos = mul(1 / zoom, clientPos); + } + function solve(l1, l2, r) { + var det = l1[1] * l2[0] - l1[0] * l2[1]; + return [ + (-l2[1] * r[0] + l2[0] * r[1]) / det, + (+l1[1] * r[0] - l1[0] * r[1]) / det + ]; + } + function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; } + function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; } + function mul(a, b) { return [a * b[0], a * b[1]]; } + if (!this.els) + this.$initTransformMeasureNodes(); + function p(el) { + var r = el.getBoundingClientRect(); + return [r.left, r.top]; + } + var a = p(this.els[0]); + var b = p(this.els[1]); + var c = p(this.els[2]); + var d = p(this.els[3]); + var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a))); + var m1 = mul(1 + h[0], sub(b, a)); + var m2 = mul(1 + h[1], sub(c, a)); + if (elPos) { + var x = elPos; + var k = h[0] * x[0] / L + h[1] * x[1] / L + 1; + var ut = add(mul(x[0], m1), mul(x[1], m2)); + return add(mul(1 / k / L, ut), a); + } + var u = sub(clientPos, a); + var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u); + return mul(L, f); + }; + return FontMetrics; +}()); +FontMetrics.prototype.$characterSize = { width: 0, height: 0 }; +oop.implement(FontMetrics.prototype, EventEmitter); +exports.FontMetrics = FontMetrics; -.hide-toolbar { - overflow: hidden; - max-height: 0; - padding-top: 0; - padding-bottom: 0; - margin-top: 0; - margin-bottom: 0; - -moz-transition-duration: 0.3s; - -webkit-transition-duration: 0.3s; - -o-transition-duration: 0.3s; - transition-duration: 0.3s; - -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); - -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); - -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1); - transition-timing-function: cubic-bezier(0, 1, 0.5, 1); -} +}); -.show-toolbar { - -moz-transition-duration: 0.3s; - -webkit-transition-duration: 0.3s; - -o-transition-duration: 0.3s; - transition-duration: 0.3s; - -moz-transition-timing-function: ease-in; - -webkit-transition-timing-function: ease-in; - -o-transition-timing-function: ease-in; - transition-timing-function: ease-in; - /*max-height: 1000px; - overflow: hidden;*/ +ace.define("ace/css/editor-css",["require","exports","module"], function(require, exports, module){/* +styles = [] +for (var i = 1; i < 16; i++) { + styles.push(".ace_br" + i + "{" + ( + ["top-left", "top-right", "bottom-right", "bottom-left"] + ).map(function(x, j) { + return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\n contain: style size layout;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n}\n\n.ace_hidpi .ace_text-layer,\n.ace_hidpi .ace_gutter-layer,\n.ace_hidpi .ace_content,\n.ace_hidpi .ace_gutter {\n contain: strict;\n}\n.ace_hidpi .ace_text-layer > .ace_line, \n.ace_hidpi .ace_text-layer > .ace_line_group {\n contain: strict;\n}\n\n.ace_cjk {\n display: inline-block;\n text-align: center;\n}\n\n.ace_cursor-layer {\n z-index: 4;\n}\n\n.ace_cursor {\n z-index: 4;\n position: absolute;\n box-sizing: border-box;\n border-left: 2px solid;\n /* workaround for smooth cursor repaintng whole screen in chrome */\n transform: translatez(0);\n}\n\n.ace_multiselect .ace_cursor {\n border-left-width: 1px;\n}\n\n.ace_slim-cursors .ace_cursor {\n border-left-width: 1px;\n}\n\n.ace_overwrite-cursors .ace_cursor {\n border-left-width: 0;\n border-bottom: 1px solid;\n}\n\n.ace_hidden-cursors .ace_cursor {\n opacity: 0.2;\n}\n\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\n opacity: 0;\n}\n\n.ace_smooth-blinking .ace_cursor {\n transition: opacity 0.18s;\n}\n\n.ace_animate-blinking .ace_cursor {\n animation-duration: 1000ms;\n animation-timing-function: step-end;\n animation-name: blink-ace-animate;\n animation-iteration-count: infinite;\n}\n\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\n animation-duration: 1000ms;\n animation-timing-function: ease-in-out;\n animation-name: blink-ace-animate-smooth;\n}\n \n@keyframes blink-ace-animate {\n from, to { opacity: 1; }\n 60% { opacity: 0; }\n}\n\n@keyframes blink-ace-animate-smooth {\n from, to { opacity: 1; }\n 45% { opacity: 1; }\n 60% { opacity: 0; }\n 85% { opacity: 0; }\n}\n\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\n position: absolute;\n z-index: 3;\n}\n\n.ace_marker-layer .ace_selection {\n position: absolute;\n z-index: 5;\n}\n\n.ace_marker-layer .ace_bracket {\n position: absolute;\n z-index: 6;\n}\n\n.ace_marker-layer .ace_error_bracket {\n position: absolute;\n border-bottom: 1px solid #DE5555;\n border-radius: 0;\n}\n\n.ace_marker-layer .ace_active-line {\n position: absolute;\n z-index: 2;\n}\n\n.ace_marker-layer .ace_selected-word {\n position: absolute;\n z-index: 4;\n box-sizing: border-box;\n}\n\n.ace_line .ace_fold {\n box-sizing: border-box;\n\n display: inline-block;\n height: 11px;\n margin-top: -2px;\n vertical-align: middle;\n\n background-image:\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n color: transparent;\n\n border: 1px solid black;\n border-radius: 2px;\n\n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_dark .ace_fold {\n}\n\n.ace_fold:hover{\n background-image:\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\n}\n\n.ace_tooltip {\n background-color: #f5f5f5;\n border: 1px solid gray;\n border-radius: 1px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n color: black;\n padding: 3px 4px;\n position: fixed;\n z-index: 999999;\n box-sizing: border-box;\n cursor: default;\n white-space: pre-wrap;\n word-wrap: break-word;\n line-height: normal;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n pointer-events: none;\n overflow: auto;\n max-width: min(33em, 66vw);\n overscroll-behavior: contain;\n}\n.ace_tooltip pre {\n white-space: pre-wrap;\n}\n\n.ace_tooltip.ace_dark {\n background-color: #636363;\n color: #fff;\n}\n\n.ace_tooltip:focus {\n outline: 1px solid #5E9ED6;\n}\n\n.ace_icon {\n display: inline-block;\n width: 18px;\n vertical-align: top;\n}\n\n.ace_icon_svg {\n display: inline-block;\n width: 12px;\n vertical-align: top;\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-size: 12px;\n -webkit-mask-position: center;\n}\n\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\n padding-right: 13px;\n}\n\n.ace_fold-widget, .ace_custom-widget {\n box-sizing: border-box;\n\n margin: 0 -12px 0 1px;\n display: none;\n width: 11px;\n vertical-align: top;\n\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\n background-repeat: no-repeat;\n background-position: center;\n\n border-radius: 3px;\n \n border: 1px solid transparent;\n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_custom-widget {\n background: none;\n}\n\n.ace_folding-enabled .ace_fold-widget {\n display: inline-block; \n}\n\n.ace_fold-widget.ace_end {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\n}\n\n.ace_fold-widget.ace_closed {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\n}\n\n.ace_fold-widget:hover {\n border: 1px solid rgba(0, 0, 0, 0.3);\n background-color: rgba(255, 255, 255, 0.2);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n}\n\n.ace_fold-widget:active {\n border: 1px solid rgba(0, 0, 0, 0.4);\n background-color: rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n}\n/**\n * Dark version for fold widgets\n */\n.ace_dark .ace_fold-widget {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\n}\n.ace_dark .ace_fold-widget.ace_end {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget.ace_closed {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\n}\n.ace_dark .ace_fold-widget:hover {\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n background-color: rgba(255, 255, 255, 0.1);\n}\n.ace_dark .ace_fold-widget:active {\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\n}\n\n.ace_inline_button {\n border: 1px solid lightgray;\n display: inline-block;\n margin: -1px 8px;\n padding: 0 5px;\n pointer-events: auto;\n cursor: pointer;\n}\n.ace_inline_button:hover {\n border-color: gray;\n background: rgba(200,200,200,0.2);\n display: inline-block;\n pointer-events: auto;\n}\n\n.ace_fold-widget.ace_invalid {\n background-color: #FFB4B4;\n border-color: #DE5555;\n}\n\n.ace_fade-fold-widgets .ace_fold-widget {\n transition: opacity 0.4s ease 0.05s;\n opacity: 0;\n}\n\n.ace_fade-fold-widgets:hover .ace_fold-widget {\n transition: opacity 0.05s ease 0.05s;\n opacity:1;\n}\n\n.ace_underline {\n text-decoration: underline;\n}\n\n.ace_bold {\n font-weight: bold;\n}\n\n.ace_nobold .ace_bold {\n font-weight: normal;\n}\n\n.ace_italic {\n font-style: italic;\n}\n\n\n.ace_error-marker {\n background-color: rgba(255, 0, 0,0.2);\n position: absolute;\n z-index: 9;\n}\n\n.ace_highlight-marker {\n background-color: rgba(255, 255, 0,0.2);\n position: absolute;\n z-index: 8;\n}\n\n.ace_mobile-menu {\n position: absolute;\n line-height: 1.5;\n border-radius: 4px;\n -ms-user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n background: white;\n box-shadow: 1px 3px 2px grey;\n border: 1px solid #dcdcdc;\n color: black;\n}\n.ace_dark > .ace_mobile-menu {\n background: #333;\n color: #ccc;\n box-shadow: 1px 3px 2px grey;\n border: 1px solid #444;\n\n}\n.ace_mobile-button {\n padding: 2px;\n cursor: pointer;\n overflow: hidden;\n}\n.ace_mobile-button:hover {\n background-color: #eee;\n opacity:1;\n}\n.ace_mobile-button:active {\n background-color: #ddd;\n}\n\n.ace_placeholder {\n position: relative;\n font-family: arial;\n transform: scale(0.9);\n transform-origin: left;\n white-space: pre;\n opacity: 0.7;\n margin: 0 10px;\n z-index: 1;\n}\n\n.ace_ghost_text {\n opacity: 0.5;\n font-style: italic;\n}\n\n.ace_ghost_text_container > div {\n white-space: pre;\n}\n\n.ghost_text_line_wrapped::after {\n content: \"\u21A9\";\n position: absolute;\n}\n\n.ace_lineWidgetContainer.ace_ghost_text {\n margin: 0px 4px\n}\n\n.ace_screenreader-only {\n position:absolute;\n left:-10000px;\n top:auto;\n width:1px;\n height:1px;\n overflow:hidden;\n}\n\n.ace_hidden_token {\n display: none;\n}"; -.visible { - border-bottom: 1px solid black; -} +}); -.info-filter input, .info-filter select { - display: block; - width: 250px; - margin: 7px 0; -}`, "",{"version":3,"sources":["webpack://./style/index.css"],"names":[],"mappings":"AAQA;EACE,8CAA8C;AAChD;;AAEA;EACE,eAAe;AACjB;;AAEA,gBAAgB;;AAEhB;EACE,qBAAqB;EACrB,oBAAoB;EACpB,cAAc;CACf,qBAAqB;EACpB,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,kBAAkB;EAClB,6CAA6C;EAC7C,sBAAsB;EACtB,eAAe;EACf,yBAAyB;EACzB,wDAAwD;EACxD,4EAA4E;EAC5E,2DAA2D;EAC3D,sDAAsD;EACtD,yDAAyD;EACzD,2BAA2B;EAC3B,sBAAsB;EACtB,qCAAqC;EACrC,8DAA8D;EAC9D,4BAA4B;EAC5B,oHAAoH;EACpH,iEAAiE;EACjE,kFAAkF;EAClF,+EAA+E;EAC/E,0EAA0E;AAC5E;;AAEA;EACE,sBAAsB;EACtB,UAAU;EACV,+EAA+E;EAC/E,4EAA4E;EAC5E,uEAAuE;EACvE,wBAAwB;AAC1B;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,2DAA2D;IAC3D,8DAA8D;IAC9D,yDAAyD;IACzD,sDAAsD;AAC1D;;AAEA;IACI,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,wCAAwC;IACxC,2CAA2C;IAC3C,sCAAsC;IACtC,mCAAmC;IACnC;sBACkB;AACtB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;AACf","sourcesContent":["@import '~@noworkflow/utils/style/shared.css';\n@import '~@noworkflow/history/style/index.css';\n@import '~@noworkflow/trial/style/index.css';\n@import './panel.css';\n@import './history.css';\n@import './trial.css';\n\n\nbody {\n font-family: \"Verdana\", \"Geneva\", \"sans-serif\";\n}\n\n.loading {\n font-size: 40px;\n}\n\n/* Link Button */\n\na.link-button {\n text-decoration: none;\n display:inline-block;\n padding: 4px 0;\n /*padding: 4px 12px;*/\n margin-bottom: 0;\n font-size: 14px;\n width: 100px;\n line-height: 15px;\n color: #333;\n text-align: center;\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\n vertical-align: middle;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\n background-repeat: repeat-x;\n border: 1px solid #ccc;\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\n border-bottom-color: #b3b3b3;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n}\n\na.link-button:active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n background-color:#e0e0e0;\n}\n\n.hide-toolbar {\n overflow: hidden;\n max-height: 0;\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 0;\n margin-bottom: 0;\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.show-toolbar {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n /*max-height: 1000px;\n overflow: hidden;*/\n}\n\n.visible {\n border-bottom: 1px solid black;\n}\n\n.info-filter input, .info-filter select {\n display: block;\n width: 250px;\n margin: 7px 0;\n}"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); +ace.define("ace/layer/decorators",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module){"use strict"; +var dom = require("../lib/dom"); +var oop = require("../lib/oop"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var Decorator = /** @class */ (function () { + function Decorator(scrollbarV, renderer) { + this.renderer = renderer; + this.pixelRatio = 1; + this.maxHeight = renderer.layerConfig.maxHeight; + this.lineHeight = renderer.layerConfig.lineHeight; + this.minDecorationHeight = (2 * this.pixelRatio) | 0; + this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0; + this.colors = {}; + this.colors.dark = { + "error": "rgba(255, 18, 18, 1)", + "warning": "rgba(18, 136, 18, 1)", + "info": "rgba(18, 18, 136, 1)", + }; + this.colors.light = { + "error": "rgb(255,51,51)", + "warning": "rgb(32,133,72)", + "info": "rgb(35,68,138)", + }; + this.setScrollBarV(scrollbarV); + } + Decorator.prototype.$createCanvas = function () { + this.canvas = dom.createElement("canvas"); + this.canvas.style.top = 0 + "px"; + this.canvas.style.right = 0 + "px"; + this.canvas.style.zIndex = "7"; + this.canvas.style.position = "absolute"; + }; + Decorator.prototype.setScrollBarV = function (scrollbarV) { + this.$createCanvas(); + this.scrollbarV = scrollbarV; + scrollbarV.element.appendChild(this.canvas); + this.setDimensions(); + }; + Decorator.prototype.$updateDecorators = function (config) { + if (typeof this.canvas.getContext !== "function") { + return; + } + var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light; + this.setDimensions(config); + var ctx = this.canvas.getContext("2d"); + function compare(a, b) { + if (a.priority < b.priority) + return -1; + if (a.priority > b.priority) + return 1; + return 0; + } + var annotations = this.renderer.session.$annotations; + ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + if (annotations) { + var priorities = { + "info": 1, + "warning": 2, + "error": 3 + }; + annotations.forEach(function (item) { + item["priority"] = priorities[item.type] || null; + }); + annotations = annotations.sort(compare); + for (var i = 0; i < annotations.length; i++) { + var row = annotations[i].row; + var offset1 = this.getVerticalOffsetForRow(row); + var offset2 = offset1 + this.lineHeight; + var y1 = Math.round(this.heightRatio * offset1); + var y2 = Math.round(this.heightRatio * offset2); + var ycenter = Math.round((y1 + y2) / 2); + var halfHeight = (y2 - ycenter); + if (halfHeight < this.halfMinDecorationHeight) { + halfHeight = this.halfMinDecorationHeight; + } + if (ycenter - halfHeight < 0) { + ycenter = halfHeight; + } + if (ycenter + halfHeight > this.canvasHeight) { + ycenter = this.canvasHeight - halfHeight; + } + var from = ycenter - halfHeight; + var to = ycenter + halfHeight; + var zoneHeight = to - from; + ctx.fillStyle = colors[annotations[i].type] || null; + ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight); + } + } + var cursor = this.renderer.session.selection.getCursor(); + if (cursor) { + var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio); + ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; + ctx.fillRect(0, currentY, this.canvasWidth, 2); + } + }; + Decorator.prototype.getVerticalOffsetForRow = function (row) { + row = row | 0; + var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight; + return offset; + }; + Decorator.prototype.setDimensions = function (config) { + config = config || this.renderer.layerConfig; + this.maxHeight = config.maxHeight; + this.lineHeight = config.lineHeight; + this.canvasHeight = config.height; + this.canvasWidth = this.scrollbarV.width || this.canvasWidth; + this.setZoneWidth(); + this.canvas.width = this.canvasWidth; + this.canvas.height = this.canvasHeight; + if (this.maxHeight < this.canvasHeight) { + this.heightRatio = 1; + } + else { + this.heightRatio = this.canvasHeight / this.maxHeight; + } + }; + Decorator.prototype.setZoneWidth = function () { + this.oneZoneWidth = this.canvasWidth; + }; + Decorator.prototype.destroy = function () { + this.canvas.parentNode.removeChild(this.canvas); + }; + return Decorator; +}()); +oop.implement(Decorator.prototype, EventEmitter); +exports.Decorator = Decorator; +}); -/***/ }), +ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/scrollbar_custom","ace/scrollbar_custom","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/css/editor-css","ace/layer/decorators","ace/lib/useragent","ace/layer/text_util"], function(require, exports, module){"use strict"; +var oop = require("./lib/oop"); +var dom = require("./lib/dom"); +var lang = require("./lib/lang"); +var config = require("./config"); +var GutterLayer = require("./layer/gutter").Gutter; +var MarkerLayer = require("./layer/marker").Marker; +var TextLayer = require("./layer/text").Text; +var CursorLayer = require("./layer/cursor").Cursor; +var HScrollBar = require("./scrollbar").HScrollBar; +var VScrollBar = require("./scrollbar").VScrollBar; +var HScrollBarCustom = require("./scrollbar_custom").HScrollBar; +var VScrollBarCustom = require("./scrollbar_custom").VScrollBar; +var RenderLoop = require("./renderloop").RenderLoop; +var FontMetrics = require("./layer/font_metrics").FontMetrics; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var editorCss = require("./css/editor-css"); +var Decorator = require("./layer/decorators").Decorator; +var useragent = require("./lib/useragent"); +var isTextToken = require("./layer/text_util").isTextToken; +dom.importCssString(editorCss, "ace_editor.css", false); +var VirtualRenderer = /** @class */ (function () { + function VirtualRenderer(container, theme) { + var _self = this; + this.container = container || dom.createElement("div"); + dom.addCssClass(this.container, "ace_editor"); + if (dom.HI_DPI) + dom.addCssClass(this.container, "ace_hidpi"); + this.setTheme(theme); + if (config.get("useStrictCSP") == null) + config.set("useStrictCSP", false); + this.$gutter = dom.createElement("div"); + this.$gutter.className = "ace_gutter"; + this.container.appendChild(this.$gutter); + this.$gutter.setAttribute("aria-hidden", "true"); + this.scroller = dom.createElement("div"); + this.scroller.className = "ace_scroller"; + this.container.appendChild(this.scroller); + this.content = dom.createElement("div"); + this.content.className = "ace_content"; + this.scroller.appendChild(this.content); + this.$gutterLayer = new GutterLayer(this.$gutter); + this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); + this.$markerBack = new MarkerLayer(this.content); + var textLayer = this.$textLayer = new TextLayer(this.content); + this.canvas = textLayer.element; + this.$markerFront = new MarkerLayer(this.content); + this.$cursorLayer = new CursorLayer(this.content); + this.$horizScroll = false; + this.$vScroll = false; + this.scrollBar = + this.scrollBarV = new VScrollBar(this.container, this); + this.scrollBarH = new HScrollBar(this.container, this); + this.scrollBarV.on("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollTop(e.data - _self.scrollMargin.top); + }); + this.scrollBarH.on("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollLeft(e.data - _self.scrollMargin.left); + }); + this.scrollTop = 0; + this.scrollLeft = 0; + this.cursorPos = { + row: 0, + column: 0 + }; + this.$fontMetrics = new FontMetrics(this.container); + this.$textLayer.$setFontMetrics(this.$fontMetrics); + this.$textLayer.on("changeCharacterSize", function (e) { + _self.updateCharacterSize(); + _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height); + _self._signal("changeCharacterSize", e); + }); + this.$size = { + width: 0, + height: 0, + scrollerHeight: 0, + scrollerWidth: 0, + $dirty: true + }; + this.layerConfig = { + width: 1, + padding: 0, + firstRow: 0, + firstRowScreen: 0, + lastRow: 0, + lineHeight: 0, + characterWidth: 0, + minHeight: 1, + maxHeight: 1, + offset: 0, + height: 1, + gutterOffset: 1 + }; + this.scrollMargin = { + left: 0, + right: 0, + top: 0, + bottom: 0, + v: 0, + h: 0 + }; + this.margin = { + left: 0, + right: 0, + top: 0, + bottom: 0, + v: 0, + h: 0 + }; + this.$keepTextAreaAtCursor = !useragent.isIOS; + this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView); + this.$loop.schedule(this.CHANGE_FULL); + this.updateCharacterSize(); + this.setPadding(4); + this.$addResizeObserver(); + config.resetOptions(this); + config._signal("renderer", this); + } + VirtualRenderer.prototype.updateCharacterSize = function () { + if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { + this.$allowBoldFonts = this.$textLayer.allowBoldFonts; + this.setStyle("ace_nobold", !this.$allowBoldFonts); + } + this.layerConfig.characterWidth = + this.characterWidth = this.$textLayer.getCharacterWidth(); + this.layerConfig.lineHeight = + this.lineHeight = this.$textLayer.getLineHeight(); + this.$updatePrintMargin(); + dom.setStyle(this.scroller.style, "line-height", this.lineHeight + "px"); + }; + VirtualRenderer.prototype.setSession = function (session) { + if (this.session) + this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode); + this.session = session; + if (session && this.scrollMargin.top && session.getScrollTop() <= 0) + session.setScrollTop(-this.scrollMargin.top); + this.$cursorLayer.setSession(session); + this.$markerBack.setSession(session); + this.$markerFront.setSession(session); + this.$gutterLayer.setSession(session); + this.$textLayer.setSession(session); + if (!session) + return; + this.$loop.schedule(this.CHANGE_FULL); + this.session.$setFontMetrics(this.$fontMetrics); + this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null; + this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this); + this.onChangeNewLineMode(); + this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode); + }; + VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) { + if (lastRow === undefined) + lastRow = Infinity; + if (!this.$changedLines) { + this.$changedLines = { + firstRow: firstRow, + lastRow: lastRow + }; + } + else { + if (this.$changedLines.firstRow > firstRow) + this.$changedLines.firstRow = firstRow; + if (this.$changedLines.lastRow < lastRow) + this.$changedLines.lastRow = lastRow; + } + if (this.$changedLines.lastRow < this.layerConfig.firstRow) { + if (force) + this.$changedLines.lastRow = this.layerConfig.lastRow; + else + return; + } + if (this.$changedLines.firstRow > this.layerConfig.lastRow) + return; + this.$loop.schedule(this.CHANGE_LINES); + }; + VirtualRenderer.prototype.onChangeNewLineMode = function () { + this.$loop.schedule(this.CHANGE_TEXT); + this.$textLayer.$updateEolChar(); + this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR); + }; + VirtualRenderer.prototype.onChangeTabSize = function () { + this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); + this.$textLayer.onChangeTabSize(); + }; + VirtualRenderer.prototype.updateText = function () { + this.$loop.schedule(this.CHANGE_TEXT); + }; + VirtualRenderer.prototype.updateFull = function (force) { + if (force) + this.$renderChanges(this.CHANGE_FULL, true); + else + this.$loop.schedule(this.CHANGE_FULL); + }; + VirtualRenderer.prototype.updateFontSize = function () { + this.$textLayer.checkForSizeChanges(); + }; + VirtualRenderer.prototype.$updateSizeAsync = function () { + if (this.$loop.pending) + this.$size.$dirty = true; + else + this.onResize(); + }; + VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) { + if (this.resizing > 2) + return; + else if (this.resizing > 0) + this.resizing++; + else + this.resizing = force ? 1 : 0; + var el = this.container; + if (!height) + height = el.clientHeight || el.scrollHeight; + if (!height && this.$maxLines && this.lineHeight > 1) { + if (!el.style.height || el.style.height == "0px") { + el.style.height = "1px"; + height = el.clientHeight || el.scrollHeight; + } + } + if (!width) + width = el.clientWidth || el.scrollWidth; + var changes = this.$updateCachedSize(force, gutterWidth, width, height); + if (this.$resizeTimer) + this.$resizeTimer.cancel(); + if (!this.$size.scrollerHeight || (!width && !height)) + return this.resizing = 0; + if (force) + this.$gutterLayer.$padding = null; + if (force) + this.$renderChanges(changes | this.$changes, true); + else + this.$loop.schedule(changes | this.$changes); + if (this.resizing) + this.resizing = 0; + this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null; + if (this.$customScrollbar) { + this.$updateCustomScrollbar(true); + } + }; + VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) { + height -= (this.$extraHeight || 0); + var changes = 0; + var size = this.$size; + var oldSize = { + width: size.width, + height: size.height, + scrollerHeight: size.scrollerHeight, + scrollerWidth: size.scrollerWidth + }; + if (height && (force || size.height != height)) { + size.height = height; + changes |= this.CHANGE_SIZE; + size.scrollerHeight = size.height; + if (this.$horizScroll) + size.scrollerHeight -= this.scrollBarH.getHeight(); + this.scrollBarV.setHeight(size.scrollerHeight); + this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; + changes = changes | this.CHANGE_SCROLL; + } + if (width && (force || size.width != width)) { + changes |= this.CHANGE_SIZE; + size.width = width; + if (gutterWidth == null) + gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; + this.gutterWidth = gutterWidth; + dom.setStyle(this.scrollBarH.element.style, "left", gutterWidth + "px"); + dom.setStyle(this.scroller.style, "left", gutterWidth + this.margin.left + "px"); + size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h); + dom.setStyle(this.$gutter.style, "left", this.margin.left + "px"); + var right = this.scrollBarV.getWidth() + "px"; + dom.setStyle(this.scrollBarH.element.style, "right", right); + dom.setStyle(this.scroller.style, "right", right); + dom.setStyle(this.scroller.style, "bottom", this.scrollBarH.getHeight()); + this.scrollBarH.setWidth(size.scrollerWidth); + if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) { + changes |= this.CHANGE_FULL; + } + } + size.$dirty = !width || !height; + if (changes) + this._signal("resize", oldSize); + return changes; + }; + VirtualRenderer.prototype.onGutterResize = function (width) { + var gutterWidth = this.$showGutter ? width : 0; + if (gutterWidth != this.gutterWidth) + this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); + if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { + this.$loop.schedule(this.CHANGE_FULL); + } + else if (this.$size.$dirty) { + this.$loop.schedule(this.CHANGE_FULL); + } + else { + this.$computeLayerConfig(); + } + }; + VirtualRenderer.prototype.adjustWrapLimit = function () { + var availableWidth = this.$size.scrollerWidth - this.$padding * 2; + var limit = Math.floor(availableWidth / this.characterWidth); + return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); + }; + VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) { + this.setOption("animatedScroll", shouldAnimate); + }; + VirtualRenderer.prototype.getAnimatedScroll = function () { + return this.$animatedScroll; + }; + VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) { + this.setOption("showInvisibles", showInvisibles); + this.session.$bidiHandler.setShowInvisibles(showInvisibles); + }; + VirtualRenderer.prototype.getShowInvisibles = function () { + return this.getOption("showInvisibles"); + }; + VirtualRenderer.prototype.getDisplayIndentGuides = function () { + return this.getOption("displayIndentGuides"); + }; + VirtualRenderer.prototype.setDisplayIndentGuides = function (display) { + this.setOption("displayIndentGuides", display); + }; + VirtualRenderer.prototype.getHighlightIndentGuides = function () { + return this.getOption("highlightIndentGuides"); + }; + VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) { + this.setOption("highlightIndentGuides", highlight); + }; + VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) { + this.setOption("showPrintMargin", showPrintMargin); + }; + VirtualRenderer.prototype.getShowPrintMargin = function () { + return this.getOption("showPrintMargin"); + }; + VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) { + this.setOption("printMarginColumn", printMarginColumn); + }; + VirtualRenderer.prototype.getPrintMarginColumn = function () { + return this.getOption("printMarginColumn"); + }; + VirtualRenderer.prototype.getShowGutter = function () { + return this.getOption("showGutter"); + }; + VirtualRenderer.prototype.setShowGutter = function (show) { + return this.setOption("showGutter", show); + }; + VirtualRenderer.prototype.getFadeFoldWidgets = function () { + return this.getOption("fadeFoldWidgets"); + }; + VirtualRenderer.prototype.setFadeFoldWidgets = function (show) { + this.setOption("fadeFoldWidgets", show); + }; + VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) { + this.setOption("highlightGutterLine", shouldHighlight); + }; + VirtualRenderer.prototype.getHighlightGutterLine = function () { + return this.getOption("highlightGutterLine"); + }; + VirtualRenderer.prototype.$updatePrintMargin = function () { + if (!this.$showPrintMargin && !this.$printMarginEl) + return; + if (!this.$printMarginEl) { + var containerEl = dom.createElement("div"); + containerEl.className = "ace_layer ace_print-margin-layer"; + this.$printMarginEl = dom.createElement("div"); + this.$printMarginEl.className = "ace_print-margin"; + containerEl.appendChild(this.$printMarginEl); + this.content.insertBefore(containerEl, this.content.firstChild); + } + var style = this.$printMarginEl.style; + style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + "px"; + style.visibility = this.$showPrintMargin ? "visible" : "hidden"; + if (this.session && this.session.$wrap == -1) + this.adjustWrapLimit(); + }; + VirtualRenderer.prototype.getContainerElement = function () { + return this.container; + }; + VirtualRenderer.prototype.getMouseEventTarget = function () { + return this.scroller; + }; + VirtualRenderer.prototype.getTextAreaContainer = function () { + return this.container; + }; + VirtualRenderer.prototype.$moveTextAreaToCursor = function () { + if (this.$isMousePressed) + return; + var style = this.textarea.style; + var composition = this.$composition; + if (!this.$keepTextAreaAtCursor && !composition) { + dom.translate(this.textarea, -100, 0); + return; + } + var pixelPos = this.$cursorLayer.$pixelPos; + if (!pixelPos) + return; + if (composition && composition.markerRange) + pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true); + var config = this.layerConfig; + var posTop = pixelPos.top; + var posLeft = pixelPos.left; + posTop -= config.offset; + var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1; + if (posTop < 0 || posTop > config.height - h) { + dom.translate(this.textarea, 0, 0); + return; + } + var w = 1; + var maxTop = this.$size.height - h; + if (!composition) { + posTop += this.lineHeight; + } + else { + if (composition.useTextareaForIME) { + var val = this.textarea.value; + w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]); + } + else { + posTop += this.lineHeight + 2; + } + } + posLeft -= this.scrollLeft; + if (posLeft > this.$size.scrollerWidth - w) + posLeft = this.$size.scrollerWidth - w; + posLeft += this.gutterWidth + this.margin.left; + dom.setStyle(style, "height", h + "px"); + dom.setStyle(style, "width", w + "px"); + dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop)); + }; + VirtualRenderer.prototype.getFirstVisibleRow = function () { + return this.layerConfig.firstRow; + }; + VirtualRenderer.prototype.getFirstFullyVisibleRow = function () { + return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); + }; + VirtualRenderer.prototype.getLastFullyVisibleRow = function () { + var config = this.layerConfig; + var lastRow = config.lastRow; + var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight; + if (top - this.session.getScrollTop() > config.height - config.lineHeight) + return lastRow - 1; + return lastRow; + }; + VirtualRenderer.prototype.getLastVisibleRow = function () { + return this.layerConfig.lastRow; + }; + VirtualRenderer.prototype.setPadding = function (padding) { + this.$padding = padding; + this.$textLayer.setPadding(padding); + this.$cursorLayer.setPadding(padding); + this.$markerFront.setPadding(padding); + this.$markerBack.setPadding(padding); + this.$loop.schedule(this.CHANGE_FULL); + this.$updatePrintMargin(); + }; + VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) { + var sm = this.scrollMargin; + sm.top = top | 0; + sm.bottom = bottom | 0; + sm.right = right | 0; + sm.left = left | 0; + sm.v = sm.top + sm.bottom; + sm.h = sm.left + sm.right; + if (sm.top && this.scrollTop <= 0 && this.session) + this.session.setScrollTop(-sm.top); + this.updateFull(); + }; + VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) { + var sm = this.margin; + sm.top = top | 0; + sm.bottom = bottom | 0; + sm.right = right | 0; + sm.left = left | 0; + sm.v = sm.top + sm.bottom; + sm.h = sm.left + sm.right; + this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height); + this.updateFull(); + }; + VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () { + return this.$hScrollBarAlwaysVisible; + }; + VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) { + this.setOption("hScrollBarAlwaysVisible", alwaysVisible); + }; + VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () { + return this.$vScrollBarAlwaysVisible; + }; + VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) { + this.setOption("vScrollBarAlwaysVisible", alwaysVisible); + }; + VirtualRenderer.prototype.$updateScrollBarV = function () { + var scrollHeight = this.layerConfig.maxHeight; + var scrollerHeight = this.$size.scrollerHeight; + if (!this.$maxLines && this.$scrollPastEnd) { + scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd; + if (this.scrollTop > scrollHeight - scrollerHeight) { + scrollHeight = this.scrollTop + scrollerHeight; + this.scrollBarV.scrollTop = null; + } + } + this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v); + this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); + }; + VirtualRenderer.prototype.$updateScrollBarH = function () { + this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); + this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); + }; + VirtualRenderer.prototype.freeze = function () { + this.$frozen = true; + }; + VirtualRenderer.prototype.unfreeze = function () { + this.$frozen = false; + }; + VirtualRenderer.prototype.$renderChanges = function (changes, force) { + if (this.$changes) { + changes |= this.$changes; + this.$changes = 0; + } + if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) { + this.$changes |= changes; + return; + } + if (this.$size.$dirty) { + this.$changes |= changes; + return this.onResize(true); + } + if (!this.lineHeight) { + this.$textLayer.checkForSizeChanges(); + } + this._signal("beforeRender", changes); + if (this.session && this.session.$bidiHandler) + this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics); + var config = this.layerConfig; + if (changes & this.CHANGE_FULL || + changes & this.CHANGE_SIZE || + changes & this.CHANGE_TEXT || + changes & this.CHANGE_LINES || + changes & this.CHANGE_SCROLL || + changes & this.CHANGE_H_SCROLL) { + changes |= this.$computeLayerConfig() | this.$loop.clear(); + if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) { + var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight; + if (st > 0) { + this.scrollTop = st; + changes = changes | this.CHANGE_SCROLL; + changes |= this.$computeLayerConfig() | this.$loop.clear(); + } + } + config = this.layerConfig; + this.$updateScrollBarV(); + if (changes & this.CHANGE_H_SCROLL) + this.$updateScrollBarH(); + dom.translate(this.content, -this.scrollLeft, -config.offset); + var width = config.width + 2 * this.$padding + "px"; + var height = config.minHeight + "px"; + dom.setStyle(this.content.style, "width", width); + dom.setStyle(this.content.style, "height", height); + } + if (changes & this.CHANGE_H_SCROLL) { + dom.translate(this.content, -this.scrollLeft, -config.offset); + this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller " : "ace_scroller ace_scroll-left "; + if (this.enableKeyboardAccessibility) + this.scroller.className += this.keyboardFocusClassName; + } + if (changes & this.CHANGE_FULL) { + this.$changedLines = null; + this.$textLayer.update(config); + if (this.$showGutter) + this.$gutterLayer.update(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); + } + this.$markerBack.update(config); + this.$markerFront.update(config); + this.$cursorLayer.update(config); + this.$moveTextAreaToCursor(); + this._signal("afterRender", changes); + return; + } + if (changes & this.CHANGE_SCROLL) { + this.$changedLines = null; + if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) + this.$textLayer.update(config); + else + this.$textLayer.scrollLines(config); + if (this.$showGutter) { + if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES) + this.$gutterLayer.update(config); + else + this.$gutterLayer.scrollLines(config); + } + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); + } + this.$markerBack.update(config); + this.$markerFront.update(config); + this.$cursorLayer.update(config); + this.$moveTextAreaToCursor(); + this._signal("afterRender", changes); + return; + } + if (changes & this.CHANGE_TEXT) { + this.$changedLines = null; + this.$textLayer.update(config); + if (this.$showGutter) + this.$gutterLayer.update(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); + } + } + else if (changes & this.CHANGE_LINES) { + if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) + this.$gutterLayer.update(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); + } + } + else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { + if (this.$showGutter) + this.$gutterLayer.update(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); + } + } + else if (changes & this.CHANGE_CURSOR) { + if (this.$highlightGutterLine) + this.$gutterLayer.updateLineHighlight(config); + if (this.$customScrollbar) { + this.$scrollDecorator.$updateDecorators(config); + } + } + if (changes & this.CHANGE_CURSOR) { + this.$cursorLayer.update(config); + this.$moveTextAreaToCursor(); + } + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { + this.$markerFront.update(config); + } + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { + this.$markerBack.update(config); + } + this._signal("afterRender", changes); + }; + VirtualRenderer.prototype.$autosize = function () { + var height = this.session.getScreenLength() * this.lineHeight; + var maxHeight = this.$maxLines * this.lineHeight; + var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0); + if (this.$horizScroll) + desiredHeight += this.scrollBarH.getHeight(); + if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight) + desiredHeight = this.$maxPixelHeight; + var hideScrollbars = desiredHeight <= 2 * this.lineHeight; + var vScroll = !hideScrollbars && height > maxHeight; + if (desiredHeight != this.desiredHeight || + this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { + if (vScroll != this.$vScroll) { + this.$vScroll = vScroll; + this.scrollBarV.setVisible(vScroll); + } + var w = this.container.clientWidth; + this.container.style.height = desiredHeight + "px"; + this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); + this.desiredHeight = desiredHeight; + this._signal("autosize"); + } + }; + VirtualRenderer.prototype.$computeLayerConfig = function () { + var session = this.session; + var size = this.$size; + var hideScrollbars = size.height <= 2 * this.lineHeight; + var screenLines = this.session.getScreenLength(); + var maxHeight = screenLines * this.lineHeight; + var longestLine = this.$getLongestLine(); + var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || + size.scrollerWidth - longestLine - 2 * this.$padding < 0); + var hScrollChanged = this.$horizScroll !== horizScroll; + if (hScrollChanged) { + this.$horizScroll = horizScroll; + this.scrollBarH.setVisible(horizScroll); + } + var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine + if (this.$maxLines && this.lineHeight > 1) { + this.$autosize(); + hideScrollbars = size.height <= 2 * this.lineHeight; + } + var minHeight = size.scrollerHeight + this.lineHeight; + var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd + ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd + : 0; + maxHeight += scrollPastEnd; + var sm = this.scrollMargin; + this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom))); + this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right))); + var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || + size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top); + var vScrollChanged = vScrollBefore !== vScroll; + if (vScrollChanged) { + this.$vScroll = vScroll; + this.scrollBarV.setVisible(vScroll); + } + var offset = this.scrollTop % this.lineHeight; + var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; + var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); + var lastRow = firstRow + lineCount; + var firstRowScreen, firstRowHeight; + var lineHeight = this.lineHeight; + firstRow = session.screenToDocumentRow(firstRow, 0); + var foldLine = session.getFoldLine(firstRow); + if (foldLine) { + firstRow = foldLine.start.row; + } + firstRowScreen = session.documentToScreenRow(firstRow, 0); + firstRowHeight = session.getRowLength(firstRow) * lineHeight; + lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); + minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + + firstRowHeight; + offset = this.scrollTop - firstRowScreen * lineHeight; + if (offset < 0 && firstRowScreen > 0) { + firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight)); + offset = this.scrollTop - firstRowScreen * lineHeight; + } + var changes = 0; + if (this.layerConfig.width != longestLine || hScrollChanged) + changes = this.CHANGE_H_SCROLL; + if (hScrollChanged || vScrollChanged) { + changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height); + this._signal("scrollbarVisibilityChanged"); + if (vScrollChanged) + longestLine = this.$getLongestLine(); + } + this.layerConfig = { + width: longestLine, + padding: this.$padding, + firstRow: firstRow, + firstRowScreen: firstRowScreen, + lastRow: lastRow, + lineHeight: lineHeight, + characterWidth: this.characterWidth, + minHeight: minHeight, + maxHeight: maxHeight, + offset: offset, + gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0, + height: this.$size.scrollerHeight + }; + if (this.session.$bidiHandler) + this.session.$bidiHandler.setContentWidth(longestLine - this.$padding); + return changes; + }; + VirtualRenderer.prototype.$updateLines = function () { + if (!this.$changedLines) + return; + var firstRow = this.$changedLines.firstRow; + var lastRow = this.$changedLines.lastRow; + this.$changedLines = null; + var layerConfig = this.layerConfig; + if (firstRow > layerConfig.lastRow + 1) { + return; + } + if (lastRow < layerConfig.firstRow) { + return; + } + if (lastRow === Infinity) { + if (this.$showGutter) + this.$gutterLayer.update(layerConfig); + this.$textLayer.update(layerConfig); + return; + } + this.$textLayer.updateLines(layerConfig, firstRow, lastRow); + return true; + }; + VirtualRenderer.prototype.$getLongestLine = function () { + var charCount = this.session.getScreenWidth(); + if (this.showInvisibles && !this.session.$useWrapMode) + charCount += 1; + if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH) + charCount = this.$textLayer.MAX_LINE_LENGTH + 30; + return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); + }; + VirtualRenderer.prototype.updateFrontMarkers = function () { + this.$markerFront.setMarkers(this.session.getMarkers(true)); + this.$loop.schedule(this.CHANGE_MARKER_FRONT); + }; + VirtualRenderer.prototype.updateBackMarkers = function () { + this.$markerBack.setMarkers(this.session.getMarkers()); + this.$loop.schedule(this.CHANGE_MARKER_BACK); + }; + VirtualRenderer.prototype.addGutterDecoration = function (row, className) { + this.$gutterLayer.addGutterDecoration(row, className); + }; + VirtualRenderer.prototype.removeGutterDecoration = function (row, className) { + this.$gutterLayer.removeGutterDecoration(row, className); + }; + VirtualRenderer.prototype.updateBreakpoints = function (rows) { + this._rows = rows; + this.$loop.schedule(this.CHANGE_GUTTER); + }; + VirtualRenderer.prototype.setAnnotations = function (annotations) { + this.$gutterLayer.setAnnotations(annotations); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + VirtualRenderer.prototype.updateCursor = function () { + this.$loop.schedule(this.CHANGE_CURSOR); + }; + VirtualRenderer.prototype.hideCursor = function () { + this.$cursorLayer.hideCursor(); + }; + VirtualRenderer.prototype.showCursor = function () { + this.$cursorLayer.showCursor(); + }; + VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) { + this.scrollCursorIntoView(anchor, offset); + this.scrollCursorIntoView(lead, offset); + }; + VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) { + if (this.$size.scrollerHeight === 0) + return; + var pos = this.$cursorLayer.getPixelPosition(cursor); + var newLeft = pos.left; + var newTop = pos.top; + var topMargin = $viewMargin && $viewMargin.top || 0; + var bottomMargin = $viewMargin && $viewMargin.bottom || 0; + if (this.$scrollAnimation) { + this.$stopAnimation = true; + } + var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; + if (currentTop + topMargin > newTop) { + if (offset && currentTop + topMargin > newTop + this.lineHeight) + newTop -= offset * this.$size.scrollerHeight; + if (newTop === 0) + newTop = -this.scrollMargin.top; + this.session.setScrollTop(newTop); + } + else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) { + if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight) + newTop += offset * this.$size.scrollerHeight; + this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight); + } + var currentLeft = this.scrollLeft; + var twoCharsWidth = 2 * this.layerConfig.characterWidth; + if (newLeft - twoCharsWidth < currentLeft) { + newLeft -= twoCharsWidth; + if (newLeft < this.$padding + twoCharsWidth) { + newLeft = -this.scrollMargin.left; + } + this.session.setScrollLeft(newLeft); + } + else { + newLeft += twoCharsWidth; + if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) { + this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth)); + } + else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) { + this.session.setScrollLeft(0); + } + } + }; + VirtualRenderer.prototype.getScrollTop = function () { + return this.session.getScrollTop(); + }; + VirtualRenderer.prototype.getScrollLeft = function () { + return this.session.getScrollLeft(); + }; + VirtualRenderer.prototype.getScrollTopRow = function () { + return this.scrollTop / this.lineHeight; + }; + VirtualRenderer.prototype.getScrollBottomRow = function () { + return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); + }; + VirtualRenderer.prototype.scrollToRow = function (row) { + this.session.setScrollTop(row * this.lineHeight); + }; + VirtualRenderer.prototype.alignCursor = function (cursor, alignment) { + if (typeof cursor == "number") + cursor = { row: cursor, column: 0 }; + var pos = this.$cursorLayer.getPixelPosition(cursor); + var h = this.$size.scrollerHeight - this.lineHeight; + var offset = pos.top - h * (alignment || 0); + this.session.setScrollTop(offset); + return offset; + }; + VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) { + var i = 0; + var l = this.STEPS; + var steps = []; + var func = function (t, x_min, dx) { + return dx * (Math.pow(t - 1, 3) + 1) + x_min; + }; + for (i = 0; i < l; ++i) + steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); + return steps; + }; + VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) { + var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 }); + var offset = pos.top; + if (center) + offset -= this.$size.scrollerHeight / 2; + var initialScroll = this.scrollTop; + this.session.setScrollTop(offset); + if (animate !== false) + this.animateScrolling(initialScroll, callback); + }; + VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) { + var toValue = this.scrollTop; + if (!this.$animatedScroll) + return; + var _self = this; + if (fromValue == toValue) + return; + if (this.$scrollAnimation) { + var oldSteps = this.$scrollAnimation.steps; + if (oldSteps.length) { + fromValue = oldSteps[0]; + if (fromValue == toValue) + return; + } + } + var steps = _self.$calcSteps(fromValue, toValue); + this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps }; + clearInterval(this.$timer); + _self.session.setScrollTop(steps.shift()); + _self.session.$scrollTop = toValue; + function endAnimation() { + _self.$timer = clearInterval(_self.$timer); + _self.$scrollAnimation = null; + _self.$stopAnimation = false; + callback && callback(); + } + this.$timer = setInterval(function () { + if (_self.$stopAnimation) { + endAnimation(); + return; + } + if (!_self.session) + return clearInterval(_self.$timer); + if (steps.length) { + _self.session.setScrollTop(steps.shift()); + _self.session.$scrollTop = toValue; + } + else if (toValue != null) { + _self.session.$scrollTop = -1; + _self.session.setScrollTop(toValue); + toValue = null; + } + else { + endAnimation(); + } + }, 10); + }; + VirtualRenderer.prototype.scrollToY = function (scrollTop) { + if (this.scrollTop !== scrollTop) { + this.$loop.schedule(this.CHANGE_SCROLL); + this.scrollTop = scrollTop; + } + }; + VirtualRenderer.prototype.scrollToX = function (scrollLeft) { + if (this.scrollLeft !== scrollLeft) + this.scrollLeft = scrollLeft; + this.$loop.schedule(this.CHANGE_H_SCROLL); + }; + VirtualRenderer.prototype.scrollTo = function (x, y) { + this.session.setScrollTop(y); + this.session.setScrollLeft(x); + }; + VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) { + deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); + deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); + }; + VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) { + if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) + return true; + if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight + - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) + return true; + if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) + return true; + if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth + - this.layerConfig.width < -1 + this.scrollMargin.right) + return true; + }; + VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) { + var canvasPos; + if (this.$hasCssTransforms) { + canvasPos = { top: 0, left: 0 }; + var p = this.$fontMetrics.transformCoordinates([x, y]); + x = p[1] - this.gutterWidth - this.margin.left; + y = p[0]; + } + else { + canvasPos = this.scroller.getBoundingClientRect(); + } + var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding; + var offset = offsetX / this.characterWidth; + var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); + var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset); + return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX }; + }; + VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) { + var canvasPos; + if (this.$hasCssTransforms) { + canvasPos = { top: 0, left: 0 }; + var p = this.$fontMetrics.transformCoordinates([x, y]); + x = p[1] - this.gutterWidth - this.margin.left; + y = p[0]; + } + else { + canvasPos = this.scroller.getBoundingClientRect(); + } + var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding; + var offset = offsetX / this.characterWidth; + var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset); + var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); + return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX); + }; + VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) { + var canvasPos = this.scroller.getBoundingClientRect(); + var pos = this.session.documentToScreenPosition(row, column); + var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row) + ? this.session.$bidiHandler.getPosLeft(pos.column) + : Math.round(pos.column * this.characterWidth)); + var y = pos.row * this.lineHeight; + return { + pageX: canvasPos.left + x - this.scrollLeft, + pageY: canvasPos.top + y - this.scrollTop + }; + }; + VirtualRenderer.prototype.visualizeFocus = function () { + dom.addCssClass(this.container, "ace_focus"); + }; + VirtualRenderer.prototype.visualizeBlur = function () { + dom.removeCssClass(this.container, "ace_focus"); + }; + VirtualRenderer.prototype.showComposition = function (composition) { + this.$composition = composition; + if (!composition.cssText) { + composition.cssText = this.textarea.style.cssText; + } + if (composition.useTextareaForIME == undefined) + composition.useTextareaForIME = this.$useTextareaForIME; + if (this.$useTextareaForIME) { + dom.addCssClass(this.textarea, "ace_composition"); + this.textarea.style.cssText = ""; + this.$moveTextAreaToCursor(); + this.$cursorLayer.element.style.display = "none"; + } + else { + composition.markerId = this.session.addMarker(composition.markerRange, "ace_composition_marker", "text"); + } + }; + VirtualRenderer.prototype.setCompositionText = function (text) { + var cursor = this.session.selection.cursor; + this.addToken(text, "composition_placeholder", cursor.row, cursor.column); + this.$moveTextAreaToCursor(); + }; + VirtualRenderer.prototype.hideComposition = function () { + if (!this.$composition) + return; + if (this.$composition.markerId) + this.session.removeMarker(this.$composition.markerId); + dom.removeCssClass(this.textarea, "ace_composition"); + this.textarea.style.cssText = this.$composition.cssText; + var cursor = this.session.selection.cursor; + this.removeExtraToken(cursor.row, cursor.column); + this.$composition = null; + this.$cursorLayer.element.style.display = ""; + }; + VirtualRenderer.prototype.setGhostText = function (text, position) { + var cursor = this.session.selection.cursor; + var insertPosition = position || { row: cursor.row, column: cursor.column }; + this.removeGhostText(); + var textChunks = this.$calculateWrappedTextChunks(text, insertPosition); + this.addToken(textChunks[0].text, "ghost_text", insertPosition.row, insertPosition.column); + this.$ghostText = { + text: text, + position: { + row: insertPosition.row, + column: insertPosition.column + } + }; + var widgetDiv = dom.createElement("div"); + if (textChunks.length > 1) { + var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column); + var lastLineDiv; + textChunks.slice(1).forEach(function (el) { + var chunkDiv = dom.createElement("div"); + var chunkSpan = dom.createElement("span"); + chunkSpan.className = "ace_ghost_text"; + if (el.wrapped) + chunkDiv.className = "ghost_text_line_wrapped"; + if (el.text.length === 0) + el.text = " "; + chunkSpan.appendChild(dom.createTextNode(el.text)); + chunkDiv.appendChild(chunkSpan); + widgetDiv.appendChild(chunkDiv); + lastLineDiv = chunkDiv; + }); + hiddenTokens.forEach(function (token) { + var element = dom.createElement("span"); + if (!isTextToken(token.type)) + element.className = "ace_" + token.type.replace(/\./g, " ace_"); + element.appendChild(dom.createTextNode(token.value)); + lastLineDiv.appendChild(element); + }); + this.$ghostTextWidget = { + el: widgetDiv, + row: insertPosition.row, + column: insertPosition.column, + className: "ace_ghost_text_container" + }; + this.session.widgetManager.addLineWidget(this.$ghostTextWidget); + var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true); + var el = this.container; + var height = el.getBoundingClientRect().height; + var ghostTextHeight = textChunks.length * this.lineHeight; + var fitsY = ghostTextHeight < (height - pixelPosition.top); + if (fitsY) + return; + if (ghostTextHeight < height) { + this.scrollBy(0, (textChunks.length - 1) * this.lineHeight); + } + else { + this.scrollToRow(insertPosition.row); + } + } + }; + VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) { + var availableWidth = this.$size.scrollerWidth - this.$padding * 2; + var limit = Math.floor(availableWidth / this.characterWidth) - 2; + limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small + var textLines = text.split(/\r?\n/); + var textChunks = []; + for (var i = 0; i < textLines.length; i++) { + var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column); + var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize); + if (wrapSplits.length > 0) { + var start = 0; + wrapSplits.push(textLines[i].length); + for (var j = 0; j < wrapSplits.length; j++) { + var textSlice = textLines[i].slice(start, wrapSplits[j]); + textChunks.push({ text: textSlice, wrapped: true }); + start = wrapSplits[j]; + } + } + else { + textChunks.push({ text: textLines[i], wrapped: false }); + } + } + return textChunks; + }; + VirtualRenderer.prototype.removeGhostText = function () { + if (!this.$ghostText) + return; + var position = this.$ghostText.position; + this.removeExtraToken(position.row, position.column); + if (this.$ghostTextWidget) { + this.session.widgetManager.removeLineWidget(this.$ghostTextWidget); + this.$ghostTextWidget = null; + } + this.$ghostText = null; + }; + VirtualRenderer.prototype.addToken = function (text, type, row, column) { + var session = this.session; + session.bgTokenizer.lines[row] = null; + var newToken = { type: type, value: text }; + var tokens = session.getTokens(row); + if (column == null || !tokens.length) { + tokens.push(newToken); + } + else { + var l = 0; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + l += token.value.length; + if (column <= l) { + var diff = token.value.length - (l - column); + var before = token.value.slice(0, diff); + var after = token.value.slice(diff); + tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after }); + break; + } + } + } + this.updateLines(row, row); + }; + VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) { + var tokens = this.session.getTokens(row); + var l = 0; + var hasPassedCursor = false; + var hiddenTokens = []; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + l += token.value.length; + if (token.type === "ghost_text") + continue; + if (hasPassedCursor) { + hiddenTokens.push({ type: token.type, value: token.value }); + token.type = "hidden_token"; + continue; + } + if (l === column) { + hasPassedCursor = true; + } + } + this.updateLines(row, row); + return hiddenTokens; + }; + VirtualRenderer.prototype.removeExtraToken = function (row, column) { + this.session.bgTokenizer.lines[row] = null; + this.updateLines(row, row); + }; + VirtualRenderer.prototype.setTheme = function (theme, cb) { + var _self = this; + this.$themeId = theme; + _self._dispatchEvent('themeChange', { theme: theme }); + if (!theme || typeof theme == "string") { + var moduleName = theme || this.$options.theme.initialValue; + config.loadModule(["theme", moduleName], afterLoad); + } + else { + afterLoad(theme); + } + function afterLoad(module) { + if (_self.$themeId != theme) + return cb && cb(); + if (!module || !module.cssClass) + throw new Error("couldn't load module " + theme + " or it didn't call define"); + if (module.$id) + _self.$themeId = module.$id; + dom.importCssString(module.cssText, module.cssClass, _self.container); + if (_self.theme) + dom.removeCssClass(_self.container, _self.theme.cssClass); + var padding = "padding" in module ? module.padding + : "padding" in (_self.theme || {}) ? 4 : _self.$padding; + if (_self.$padding && padding != _self.$padding) + _self.setPadding(padding); + _self.$theme = module.cssClass; + _self.theme = module; + dom.addCssClass(_self.container, module.cssClass); + dom.setCssClass(_self.container, "ace_dark", module.isDark); + if (_self.$size) { + _self.$size.width = 0; + _self.$updateSizeAsync(); + } + _self._dispatchEvent('themeLoaded', { theme: module }); + cb && cb(); + if (useragent.isSafari && _self.scroller) { + _self.scroller.style.background = "red"; + _self.scroller.style.background = ""; + } + } + }; + VirtualRenderer.prototype.getTheme = function () { + return this.$themeId; + }; + VirtualRenderer.prototype.setStyle = function (style, include) { + dom.setCssClass(this.container, style, include !== false); + }; + VirtualRenderer.prototype.unsetStyle = function (style) { + dom.removeCssClass(this.container, style); + }; + VirtualRenderer.prototype.setCursorStyle = function (style) { + dom.setStyle(this.scroller.style, "cursor", style); + }; + VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) { + dom.setStyle(this.scroller.style, "cursor", cursorStyle); + }; + VirtualRenderer.prototype.attachToShadowRoot = function () { + dom.importCssString(editorCss, "ace_editor.css", this.container); + }; + VirtualRenderer.prototype.destroy = function () { + this.freeze(); + this.$fontMetrics.destroy(); + this.$cursorLayer.destroy(); + this.removeAllListeners(); + this.container.textContent = ""; + this.setOption("useResizeObserver", false); + }; + VirtualRenderer.prototype.$updateCustomScrollbar = function (val) { + var _self = this; + this.$horizScroll = this.$vScroll = null; + this.scrollBarV.element.remove(); + this.scrollBarH.element.remove(); + if (val === true) { + this.scrollBarV = new VScrollBarCustom(this.container, this); + this.scrollBarH = new HScrollBarCustom(this.container, this); + this.scrollBarV.setHeight(this.$size.scrollerHeight); + this.scrollBarH.setWidth(this.$size.scrollerWidth); + this.scrollBarV.addEventListener("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollTop(e.data - _self.scrollMargin.top); + }); + this.scrollBarH.addEventListener("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollLeft(e.data - _self.scrollMargin.left); + }); + if (!this.$scrollDecorator) { + this.$scrollDecorator = new Decorator(this.scrollBarV, this); + this.$scrollDecorator.$updateDecorators(); + } + else { + this.$scrollDecorator.setScrollBarV(this.scrollBarV); + this.$scrollDecorator.$updateDecorators(); + } + } + else { + this.scrollBarV = new VScrollBar(this.container, this); + this.scrollBarH = new HScrollBar(this.container, this); + this.scrollBarV.addEventListener("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollTop(e.data - _self.scrollMargin.top); + }); + this.scrollBarH.addEventListener("scroll", function (e) { + if (!_self.$scrollAnimation) + _self.session.setScrollLeft(e.data - _self.scrollMargin.left); + }); + } + }; + VirtualRenderer.prototype.$addResizeObserver = function () { + if (!window.ResizeObserver || this.$resizeObserver) + return; + var self = this; + this.$resizeTimer = lang.delayedCall(function () { + if (!self.destroyed) + self.onResize(); + }, 50); + this.$resizeObserver = new window.ResizeObserver(function (e) { + var w = e[0].contentRect.width; + var h = e[0].contentRect.height; + if (Math.abs(self.$size.width - w) > 1 + || Math.abs(self.$size.height - h) > 1) { + self.$resizeTimer.delay(); + } + else { + self.$resizeTimer.cancel(); + } + }); + this.$resizeObserver.observe(this.container); + }; + return VirtualRenderer; +}()); +VirtualRenderer.prototype.CHANGE_CURSOR = 1; +VirtualRenderer.prototype.CHANGE_MARKER = 2; +VirtualRenderer.prototype.CHANGE_GUTTER = 4; +VirtualRenderer.prototype.CHANGE_SCROLL = 8; +VirtualRenderer.prototype.CHANGE_LINES = 16; +VirtualRenderer.prototype.CHANGE_TEXT = 32; +VirtualRenderer.prototype.CHANGE_SIZE = 64; +VirtualRenderer.prototype.CHANGE_MARKER_BACK = 128; +VirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256; +VirtualRenderer.prototype.CHANGE_FULL = 512; +VirtualRenderer.prototype.CHANGE_H_SCROLL = 1024; +VirtualRenderer.prototype.$changes = 0; +VirtualRenderer.prototype.$padding = null; +VirtualRenderer.prototype.$frozen = false; +VirtualRenderer.prototype.STEPS = 8; +oop.implement(VirtualRenderer.prototype, EventEmitter); +config.defineOptions(VirtualRenderer.prototype, "renderer", { + useResizeObserver: { + set: function (value) { + if (!value && this.$resizeObserver) { + this.$resizeObserver.disconnect(); + this.$resizeTimer.cancel(); + this.$resizeTimer = this.$resizeObserver = null; + } + else if (value && !this.$resizeObserver) { + this.$addResizeObserver(); + } + } + }, + animatedScroll: { initialValue: false }, + showInvisibles: { + set: function (value) { + if (this.$textLayer.setShowInvisibles(value)) + this.$loop.schedule(this.CHANGE_TEXT); + }, + initialValue: false + }, + showPrintMargin: { + set: function () { this.$updatePrintMargin(); }, + initialValue: true + }, + printMarginColumn: { + set: function () { this.$updatePrintMargin(); }, + initialValue: 80 + }, + printMargin: { + set: function (val) { + if (typeof val == "number") + this.$printMarginColumn = val; + this.$showPrintMargin = !!val; + this.$updatePrintMargin(); + }, + get: function () { + return this.$showPrintMargin && this.$printMarginColumn; + } + }, + showGutter: { + set: function (show) { + this.$gutter.style.display = show ? "block" : "none"; + this.$loop.schedule(this.CHANGE_FULL); + this.onGutterResize(); + }, + initialValue: true + }, + useSvgGutterIcons: { + set: function (value) { + this.$gutterLayer.$useSvgGutterIcons = value; + }, + initialValue: false + }, + showFoldedAnnotations: { + set: function (value) { + this.$gutterLayer.$showFoldedAnnotations = value; + }, + initialValue: false + }, + fadeFoldWidgets: { + set: function (show) { + dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); + }, + initialValue: false + }, + showFoldWidgets: { + set: function (show) { + this.$gutterLayer.setShowFoldWidgets(show); + this.$loop.schedule(this.CHANGE_GUTTER); + }, + initialValue: true + }, + displayIndentGuides: { + set: function (show) { + if (this.$textLayer.setDisplayIndentGuides(show)) + this.$loop.schedule(this.CHANGE_TEXT); + }, + initialValue: true + }, + highlightIndentGuides: { + set: function (show) { + if (this.$textLayer.setHighlightIndentGuides(show) == true) { + this.$textLayer.$highlightIndentGuide(); + } + else { + this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells); + } + }, + initialValue: true + }, + highlightGutterLine: { + set: function (shouldHighlight) { + this.$gutterLayer.setHighlightGutterLine(shouldHighlight); + this.$loop.schedule(this.CHANGE_GUTTER); + }, + initialValue: true + }, + hScrollBarAlwaysVisible: { + set: function (val) { + if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: false + }, + vScrollBarAlwaysVisible: { + set: function (val) { + if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: false + }, + fontSize: { + set: function (size) { + if (typeof size == "number") + size = size + "px"; + this.container.style.fontSize = size; + this.updateFontSize(); + }, + initialValue: 12 + }, + fontFamily: { + set: function (name) { + this.container.style.fontFamily = name; + this.updateFontSize(); + } + }, + maxLines: { + set: function (val) { + this.updateFull(); + } + }, + minLines: { + set: function (val) { + if (!(this.$minLines < 0x1ffffffffffff)) + this.$minLines = 0; + this.updateFull(); + } + }, + maxPixelHeight: { + set: function (val) { + this.updateFull(); + }, + initialValue: 0 + }, + scrollPastEnd: { + set: function (val) { + val = +val || 0; + if (this.$scrollPastEnd == val) + return; + this.$scrollPastEnd = val; + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: 0, + handlesSet: true + }, + fixedWidthGutter: { + set: function (val) { + this.$gutterLayer.$fixedWidth = !!val; + this.$loop.schedule(this.CHANGE_GUTTER); + } + }, + customScrollbar: { + set: function (val) { + this.$updateCustomScrollbar(val); + }, + initialValue: false + }, + theme: { + set: function (val) { this.setTheme(val); }, + get: function () { return this.$themeId || this.theme; }, + initialValue: "./theme/textmate", + handlesSet: true + }, + hasCssTransforms: {}, + useTextareaForIME: { + initialValue: !useragent.isMobile && !useragent.isIE + } +}); +exports.VirtualRenderer = VirtualRenderer; -/***/ "./node_modules/css-loader/dist/cjs.js!./style/panel.css": -/*!***************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/panel.css ***! - \***************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +}); +ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(require, exports, module) { "use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_lumino_default_theme_style_index_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! -!../node_modules/css-loader/dist/cjs.js!../../../node_modules/@lumino/default-theme/style/index.css */ "./node_modules/css-loader/dist/cjs.js!../../node_modules/@lumino/default-theme/style/index.css"); -// Imports - - - -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -___CSS_LOADER_EXPORT___.i(_node_modules_css_loader_dist_cjs_js_node_modules_lumino_default_theme_style_index_css__WEBPACK_IMPORTED_MODULE_2__["default"]); -// Module -___CSS_LOADER_EXPORT___.push([module.id, ` -.p-TabBar { - min-height: 24px; - max-height: 24px; -} - -.p-TabBar-content { - min-width: 0; - min-height: 0; - align-items: flex-end; - border-bottom: 1px solid #C0C0C0; -} - - -.p-TabBar-tab { - padding: 0px 10px; - background: #E5E5E5; - border: 1px solid #C0C0C0; - border-bottom: none; - font: 12px Helvetica, Arial, sans-serif; - flex: 0 1 180px; - min-height: 20px; - max-height: 20px; - min-width: 35px; - margin-left: -1px; - line-height: 20px; -} - - -.p-TabBar-tab.p-mod-current { - background: white; -} - - -.p-TabBar-tab:hover:not(.p-mod-current) { - background: #F0F0F0; -} - - -.p-TabBar-tab:first-child { - margin-left: 0; -} - - -.p-TabBar-tab.p-mod-current { - min-height: 23px; - max-height: 23px; - transform: translateY(1px); -} - - -.p-TabBar-tabIcon, -.p-TabBar-tabLabel, -.p-TabBar-tabCloseIcon { - display: inline-block; -} - - -.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon { - margin-left: 4px; -} - - -.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before { - content: '\\f00d'; - font-family: FontAwesome; -} +var oop = require("../lib/oop"); +var net = require("../lib/net"); +var EventEmitter = require("../lib/event_emitter").EventEmitter; +var config = require("../config"); -.p-TabBar-tab.p-mod-drag-image { - min-height: 23px; - max-height: 23px; - min-width: 125px; - border: none; - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); - transform: translateX(-40%) translateY(-58%); -} - -.p-DockPanel-overlay { - background: rgba(255, 255, 255, 0.6); - border: 1px dashed black; - transition-property: top, left, right, bottom; - transition-duration: 150ms; - transition-timing-function: ease; +function $workerBlob(workerUrl) { + var script = "importScripts('" + net.qualifyURL(workerUrl) + "');"; + try { + return new Blob([script], {"type": "application/javascript"}); + } catch (e) { // Backwards-compatibility + var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; + var blobBuilder = new BlobBuilder(); + blobBuilder.append(script); + return blobBuilder.getBlob("application/javascript"); + } } -.content { - min-width: 50px; - min-height: 50px; - display: flex; - flex-direction: column; - padding: 8px; - border: 1px solid #C0C0C0; - border-top: none; - background: white; - box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); +function createWorker(workerUrl) { + if (typeof Worker == "undefined") + return { postMessage: function() {}, terminate: function() {} }; + if (config.get("loadWorkerFromBlob")) { + var blob = $workerBlob(workerUrl); + var URL = window.URL || window.webkitURL; + var blobURL = URL.createObjectURL(blob); + return new Worker(blobURL); + } + return new Worker(workerUrl); } -.content > div { - flex: 1 1 auto; - overflow: auto; -} +var WorkerClient = function(worker) { + if (!worker.postMessage) + worker = this.$createWorkerFromOldConfig.apply(this, arguments); -body { - display: flex; - flex-direction: column; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - margin: 0; - padding: 0; - overflow: hidden; + this.$worker = worker; + this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); + this.changeListener = this.changeListener.bind(this); + this.onMessage = this.onMessage.bind(this); -} + this.callbackId = 1; + this.callbacks = {}; -#main { - flex: 1 1 auto; -} + this.$worker.onmessage = this.onMessage; +}; +(function(){ -.side-info { - margin: 5px; - font-size: 14px; -} + oop.implement(this, EventEmitter); -.side-info .main h1 { - margin: 0; -} + this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) { + if (require.nameToUrl && !require.toUrl) + require.toUrl = require.nameToUrl; -.side-info .main h3 { - margin: 0 0 8px 0; -} + if (config.get("packaged") || !require.toUrl) { + workerUrl = workerUrl || config.moduleUrl(mod, "worker"); + } else { + var normalizePath = this.$normalizePath; + workerUrl = workerUrl || normalizePath(require.toUrl("ace/worker/worker.js", null, "_")); -.side-info .attr { - display: block; - margin: 3px 0; -} + var tlns = {}; + topLevelNamespaces.forEach(function(ns) { + tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); + }); + } -.side-info .desc { - font-weight: bold; -} + this.$worker = createWorker(workerUrl); + if (importScripts) { + this.send("importScripts", importScripts); + } + this.$worker.postMessage({ + init : true, + tlns : tlns, + module : mod, + classname : classname + }); + return this.$worker; + }; -.side-info .fold { - margin-top: 15px; - font-size: 2em; -} + this.onMessage = function(e) { + var msg = e.data; + switch (msg.type) { + case "event": + this._signal(msg.name, {data: msg.data}); + break; + case "call": + var callback = this.callbacks[msg.id]; + if (callback) { + callback(msg.data); + delete this.callbacks[msg.id]; + } + break; + case "error": + this.reportError(msg.data); + break; + case "log": + window.console && console.log && console.log.apply(console, msg.data); + break; + } + }; + + this.reportError = function(err) { + window.console && console.error && console.error(err); + }; -.side-info .fold:hover { - cursor: pointer; -} + this.$normalizePath = function(path) { + return net.qualifyURL(path); + }; -.side-info .fold span { - padding-left: 7px; -} + this.terminate = function() { + this._signal("terminate", {}); + this.deltaQueue = null; + this.$worker.terminate(); + this.$worker.onerror = function(e) { + e.preventDefault(); + }; + this.$worker = null; + if (this.$doc) + this.$doc.off("change", this.changeListener); + this.$doc = null; + }; -.side-info .show-all { - color: rgb(50, 38, 41); - float: right; - margin-right: 10px; -} + this.send = function(cmd, args) { + this.$worker.postMessage({command: cmd, args: args}); + }; -.side-info ul.mod-list, -.side-info ul.env-list, -.side-info ul.fac-list { - padding: 0; - margin: 0; - list-style-type: none; -} + this.call = function(cmd, args, callback) { + if (callback) { + var id = this.callbackId++; + this.callbacks[id] = callback; + args.push(id); + } + this.send(cmd, args); + }; -.side-info ul.mod-list li, -.side-info ul.fac-list li { - border-left: 3px solid black; - margin: 6px 4px; - padding: 1px 3px; -} + this.emit = function(event, data) { + try { + if (data.data && data.data.err) + data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code}; + this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}}); + } + catch(ex) { + console.error(ex.stack); + } + }; -.side-info ul.env-list li { - margin: 3px; - font-size: 0.8em; -} + this.attachToDocument = function(doc) { + if (this.$doc) + this.terminate(); -.side-info ul.env-list li .key { - font-weight: bold; -} + this.$doc = doc; + this.call("setValue", [doc.getValue()]); + doc.on("change", this.changeListener, true); + }; -.side-info ul.mod-list li .version, -.side-info ul.fac-list li .mode, -.side-info ul.fac-list li .buffering { - float: right; - margin-left: 20px; -} + this.changeListener = function(delta) { + if (!this.deltaQueue) { + this.deltaQueue = []; + setTimeout(this.$sendDeltaQueue, 0); + } + if (delta.action == "insert") + this.deltaQueue.push(delta.start, delta.lines); + else + this.deltaQueue.push(delta.start, delta.end); + }; -.side-info .clear { - clear: both; -} + this.$sendDeltaQueue = function() { + var q = this.deltaQueue; + if (!q) return; + this.deltaQueue = null; + if (q.length > 50 && q.length > this.$doc.getLength() >> 1) { + this.call("setValue", [this.$doc.getValue()]); + } else + this.emit("change", {data: q}); + }; -.hash { - font-size: 12px; - color: #666; -} +}).call(WorkerClient.prototype); -.dbefore { - color: red !important; -} -.dafter { - color: green !important; -} +var UIWorkerClient = function(topLevelNamespaces, mod, classname) { + var main = null; + var emitSync = false; + var sender = Object.create(EventEmitter); -.dbefore::before { - color: red !important; - content: ' - '; - font-family: "Courier New", Courier, monospace; -} + var messageBuffer = []; + var workerClient = new WorkerClient({ + messageBuffer: messageBuffer, + terminate: function() {}, + postMessage: function(e) { + messageBuffer.push(e); + if (!main) return; + if (emitSync) + setTimeout(processNext); + else + processNext(); + } + }); -.dafter::before { - color: green !important; - content: ' + '; - font-family: "Courier New", Courier, monospace; -} + workerClient.setEmitSync = function(val) { emitSync = val; }; -.libefore { - border-left: 3px solid red !important; - color: red !important; -} + var processNext = function() { + var msg = messageBuffer.shift(); + if (msg.command) + main[msg.command].apply(main, msg.args); + else if (msg.event) + sender._signal(msg.event, msg.data); + }; -.liafter { - border-left: 3px solid green !important; - color: green !important; -} + sender.postMessage = function(msg) { + workerClient.onMessage({data: msg}); + }; + sender.callback = function(data, callbackId) { + this.postMessage({type: "call", id: callbackId, data: data}); + }; + sender.emit = function(name, data) { + this.postMessage({type: "event", name: name, data: data}); + }; -.connection-error:hover { - cursor: pointer; -} + config.loadModule(["worker", mod], function(Main) { + main = new Main[classname](sender); + while (messageBuffer.length) + processNext(); + }); -.error-text { - font-size: 15px; - margin-left: 3px; - vertical-align: middle; -}`, "",{"version":3,"sources":["webpack://./style/panel.css"],"names":[],"mappings":";AAIA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;;AAGA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,uCAAuC;EACvC,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;;AAGA;EACE,iBAAiB;AACnB;;;AAGA;EACE,mBAAmB;AACrB;;;AAGA;EACE,cAAc;AAChB;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;;AAGA;;;EAGE,qBAAqB;AACvB;;;AAGA;EACE,gBAAgB;AAClB;;;AAGA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;EAC1C,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,0CAA0C;AAC5C;;AAEA;EACE,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,SAAS;EACT,UAAU;EACV,gBAAgB;;AAElB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;AACpB;;AAEA;;;EAGE,UAAU;EACV,SAAS;EACT,qBAAqB;AACvB;;AAEA;;EAEE,4BAA4B;EAC5B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;EAGE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,WAAW;AACb;;AAEA;IACI,eAAe;IACf,WAAW;AACf;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,uBAAuB;EACvB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,qCAAqC;EACrC,qBAAqB;AACvB;;AAEA;EACE,uCAAuC;EACvC,uBAAuB;AACzB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,sBAAsB;AACxB","sourcesContent":["\n@import '~@lumino/default-theme/style/index.css';\n\n\n.p-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.p-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #C0C0C0;\n}\n\n\n.p-TabBar-tab {\n padding: 0px 10px;\n background: #E5E5E5;\n border: 1px solid #C0C0C0;\n border-bottom: none;\n font: 12px Helvetica, Arial, sans-serif;\n flex: 0 1 180px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n background: white;\n}\n\n\n.p-TabBar-tab:hover:not(.p-mod-current) {\n background: #F0F0F0;\n}\n\n\n.p-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n\n.p-TabBar-tabIcon,\n.p-TabBar-tabLabel,\n.p-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\n content: '\\f00d';\n font-family: FontAwesome;\n}\n\n\n.p-TabBar-tab.p-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n transform: translateX(-40%) translateY(-58%);\n}\n\n.p-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n\n.content {\n min-width: 50px;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n padding: 8px;\n border: 1px solid #C0C0C0;\n border-top: none;\n background: white;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.content > div {\n flex: 1 1 auto;\n overflow: auto;\n}\n\nbody {\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n}\n\n#main {\n flex: 1 1 auto;\n}\n\n\n.side-info {\n margin: 5px;\n font-size: 14px;\n}\n\n.side-info .main h1 {\n margin: 0;\n}\n\n.side-info .main h3 {\n margin: 0 0 8px 0;\n}\n\n.side-info .attr {\n display: block;\n margin: 3px 0;\n}\n\n.side-info .desc {\n font-weight: bold;\n}\n\n.side-info .fold {\n margin-top: 15px;\n font-size: 2em;\n}\n\n.side-info .fold:hover {\n cursor: pointer;\n}\n\n.side-info .fold span {\n padding-left: 7px;\n}\n\n.side-info .show-all {\n color: rgb(50, 38, 41);\n float: right;\n margin-right: 10px;\n}\n\n.side-info ul.mod-list,\n.side-info ul.env-list,\n.side-info ul.fac-list {\n padding: 0;\n margin: 0;\n list-style-type: none;\n}\n\n.side-info ul.mod-list li,\n.side-info ul.fac-list li {\n border-left: 3px solid black;\n margin: 6px 4px;\n padding: 1px 3px;\n}\n\n.side-info ul.env-list li {\n margin: 3px;\n font-size: 0.8em;\n}\n\n.side-info ul.env-list li .key {\n font-weight: bold;\n}\n\n.side-info ul.mod-list li .version,\n.side-info ul.fac-list li .mode,\n.side-info ul.fac-list li .buffering {\n float: right;\n margin-left: 20px;\n}\n\n.side-info .clear {\n clear: both;\n}\n\n.hash {\n font-size: 12px;\n color: #666;\n}\n\n.dbefore {\n color: red !important;\n}\n\n.dafter {\n color: green !important;\n}\n\n.dbefore::before {\n color: red !important;\n content: ' - ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.dafter::before {\n color: green !important;\n content: ' + ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.libefore {\n border-left: 3px solid red !important;\n color: red !important;\n}\n\n.liafter {\n border-left: 3px solid green !important;\n color: green !important;\n}\n\n.connection-error:hover {\n cursor: pointer;\n}\n\n.error-text {\n font-size: 15px;\n margin-left: 3px;\n vertical-align: middle;\n}"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); + return workerClient; +}; +exports.UIWorkerClient = UIWorkerClient; +exports.WorkerClient = WorkerClient; +exports.createWorker = createWorker; -/***/ }), -/***/ "./node_modules/css-loader/dist/cjs.js!./style/trial.css": -/*!***************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!./style/trial.css ***! - \***************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +}); -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports +ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(require, exports, module){"use strict"; +var Range = require("./range").Range; +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var oop = require("./lib/oop"); +var PlaceHolder = /** @class */ (function () { + function PlaceHolder(session, length, pos, others, mainClass, othersClass) { + var _self = this; + this.length = length; + this.session = session; + this.doc = session.getDocument(); + this.mainClass = mainClass; + this.othersClass = othersClass; + this.$onUpdate = this.onUpdate.bind(this); + this.doc.on("change", this.$onUpdate, true); + this.$others = others; + this.$onCursorChange = function () { + setTimeout(function () { + _self.onCursorChange(); + }); + }; + this.$pos = pos; + var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()["$undostack"] || { length: -1 }; + this.$undoStackDepth = undoStack.length; + this.setup(); + session.selection.on("changeCursor", this.$onCursorChange); + } + PlaceHolder.prototype.setup = function () { + var _self = this; + var doc = this.doc; + var session = this.session; + this.selectionBefore = session.selection.toJSON(); + if (session.selection.inMultiSelectMode) + session.selection.toSingleRange(); + this.pos = doc.createAnchor(this.$pos.row, this.$pos.column); + var pos = this.pos; + pos.$insertRight = true; + pos.detach(); + pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); + this.others = []; + this.$others.forEach(function (other) { + var anchor = doc.createAnchor(other.row, other.column); + anchor.$insertRight = true; + anchor.detach(); + _self.others.push(anchor); + }); + session.setUndoSelect(false); + }; + PlaceHolder.prototype.showOtherMarkers = function () { + if (this.othersActive) + return; + var session = this.session; + var _self = this; + this.othersActive = true; + this.others.forEach(function (anchor) { + anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false); + }); + }; + PlaceHolder.prototype.hideOtherMarkers = function () { + if (!this.othersActive) + return; + this.othersActive = false; + for (var i = 0; i < this.others.length; i++) { + this.session.removeMarker(this.others[i].markerId); + } + }; + PlaceHolder.prototype.onUpdate = function (delta) { + if (this.$updating) + return this.updateAnchors(delta); + var range = delta; + if (range.start.row !== range.end.row) + return; + if (range.start.row !== this.pos.row) + return; + this.$updating = true; + var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column; + var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1; + var distanceFromStart = range.start.column - this.pos.column; + this.updateAnchors(delta); + if (inMainRange) + this.length += lengthDiff; + if (inMainRange && !this.session.$fromUndo) { + if (delta.action === 'insert') { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart }; + this.doc.insertMergedLines(newPos, delta.lines); + } + } + else if (delta.action === 'remove') { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart }; + this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); + } + } + } + this.$updating = false; + this.updateMarkers(); + }; + PlaceHolder.prototype.updateAnchors = function (delta) { + this.pos.onChange(delta); + for (var i = this.others.length; i--;) + this.others[i].onChange(delta); + this.updateMarkers(); + }; + PlaceHolder.prototype.updateMarkers = function () { + if (this.$updating) + return; + var _self = this; + var session = this.session; + var updateMarker = function (pos, className) { + session.removeMarker(pos.markerId); + pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false); + }; + updateMarker(this.pos, this.mainClass); + for (var i = this.others.length; i--;) + updateMarker(this.others[i], this.othersClass); + }; + PlaceHolder.prototype.onCursorChange = function (event) { + if (this.$updating || !this.session) + return; + var pos = this.session.selection.getCursor(); + if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { + this.showOtherMarkers(); + this._emit("cursorEnter", event); + } + else { + this.hideOtherMarkers(); + this._emit("cursorLeave", event); + } + }; + PlaceHolder.prototype.detach = function () { + this.session.removeMarker(this.pos && this.pos.markerId); + this.hideOtherMarkers(); + this.doc.off("change", this.$onUpdate); + this.session.selection.off("changeCursor", this.$onCursorChange); + this.session.setUndoSelect(true); + this.session = null; + }; + PlaceHolder.prototype.cancel = function () { + if (this.$undoStackDepth === -1) + return; + var undoManager = this.session.getUndoManager(); + var undosRequired = (undoManager.$undoStack || undoManager["$undostack"]).length - this.$undoStackDepth; + for (var i = 0; i < undosRequired; i++) { + undoManager.undo(this.session, true); + } + if (this.selectionBefore) + this.session.selection.fromJSON(this.selectionBefore); + }; + return PlaceHolder; +}()); +oop.implement(PlaceHolder.prototype, EventEmitter); +exports.PlaceHolder = PlaceHolder; +}); -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `.trial-content, -.trial-content .sub-content, -.trial-content .sub-content > div { - overflow: hidden !important; +ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module){var event = require("../lib/event"); +var useragent = require("../lib/useragent"); +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; } - -.trial-content .graphselector .graph-attr:first-child label { - margin-right: 17px; +function onMouseDown(e) { + var ev = e.domEvent; + var alt = ev.altKey; + var shift = ev.shiftKey; + var ctrl = ev.ctrlKey; + var accel = e.getAccelKey(); + var button = e.getButton(); + if (ctrl && useragent.isMac) + button = ev.button; + if (e.editor.inMultiSelectMode && button == 2) { + e.editor.textInput.onContextMenu(e.domEvent); + return; + } + if (!ctrl && !alt && !accel) { + if (button === 0 && e.editor.inMultiSelectMode) + e.editor.exitMultiSelectMode(); + return; + } + if (button !== 0) + return; + var editor = e.editor; + var selection = editor.selection; + var isMultiSelect = editor.inMultiSelectMode; + var pos = e.getDocumentPosition(); + var cursor = selection.getCursor(); + var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); + var mouseX = e.x, mouseY = e.y; + var onMouseSelection = function (e) { + mouseX = e.clientX; + mouseY = e.clientY; + }; + var session = editor.session; + var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var screenCursor = screenAnchor; + var selectionMode; + if (editor.$mouseHandler.$enableJumpToDef) { + if (ctrl && alt || accel && alt) + selectionMode = shift ? "block" : "add"; + else if (alt && editor.$blockSelectEnabled) + selectionMode = "block"; + } + else { + if (accel && !alt) { + selectionMode = "add"; + if (!isMultiSelect && shift) + return; + } + else if (alt && editor.$blockSelectEnabled) { + selectionMode = "block"; + } + } + if (selectionMode && useragent.isMac && ev.ctrlKey) { + editor.$mouseHandler.cancelContextMenu(); + } + if (selectionMode == "add") { + if (!isMultiSelect && inSelection) + return; // dragging + if (!isMultiSelect) { + var range = selection.toOrientedRange(); + editor.addSelectionMarker(range); + } + var oldRange = selection.rangeList.rangeAtPoint(pos); + editor.inVirtualSelectionMode = true; + if (shift) { + oldRange = null; + range = selection.ranges[0] || range; + editor.removeSelectionMarker(range); + } + editor.once("mouseup", function () { + var tmpSel = selection.toOrientedRange(); + if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) + selection.substractPoint(tmpSel.cursor); + else { + if (shift) { + selection.substractPoint(range.cursor); + } + else if (range) { + editor.removeSelectionMarker(range); + selection.addRange(range); + } + selection.addRange(tmpSel); + } + editor.inVirtualSelectionMode = false; + }); + } + else if (selectionMode == "block") { + e.stop(); + editor.inVirtualSelectionMode = true; + var initialRange; + var rectSel = []; + var blockSelect = function () { + var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX); + if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) + return; + screenCursor = newCursor; + editor.selection.moveToPosition(cursor); + editor.renderer.scrollCursorIntoView(); + editor.removeSelectionMarkers(rectSel); + rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); + if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) + rectSel[0] = editor.$mouseHandler.$clickSelection.clone(); + rectSel.forEach(editor.addSelectionMarker, editor); + editor.updateSelectionMarkers(); + }; + if (isMultiSelect && !accel) { + selection.toSingleRange(); + } + else if (!isMultiSelect && accel) { + initialRange = selection.toOrientedRange(); + editor.addSelectionMarker(initialRange); + } + if (shift) + screenAnchor = session.documentToScreenPosition(selection.lead); + else + selection.moveToPosition(pos); + screenCursor = { row: -1, column: -1 }; + var onMouseSelectionEnd = function (e) { + blockSelect(); + clearInterval(timerId); + editor.removeSelectionMarkers(rectSel); + if (!rectSel.length) + rectSel = [selection.toOrientedRange()]; + if (initialRange) { + editor.removeSelectionMarker(initialRange); + selection.toSingleRange(initialRange); + } + for (var i = 0; i < rectSel.length; i++) + selection.addRange(rectSel[i]); + editor.inVirtualSelectionMode = false; + editor.$mouseHandler.$clickSelection = null; + }; + var onSelectionInterval = blockSelect; + event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); + var timerId = setInterval(function () { onSelectionInterval(); }, 20); + return e.preventDefault(); + } } +exports.onMouseDown = onMouseDown; + +}); + +ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module){/** + * commands to enter multiselect mode + * @type {import("../../ace-internal").Ace.Command[]} + */ +exports.defaultCommands = [{ + name: "addCursorAbove", + description: "Add cursor above", + exec: function (editor) { editor.selectMoreLines(-1); }, + bindKey: { win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "addCursorBelow", + description: "Add cursor below", + exec: function (editor) { editor.selectMoreLines(1); }, + bindKey: { win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "addCursorAboveSkipCurrent", + description: "Add cursor above (skip current)", + exec: function (editor) { editor.selectMoreLines(-1, true); }, + bindKey: { win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "addCursorBelowSkipCurrent", + description: "Add cursor below (skip current)", + exec: function (editor) { editor.selectMoreLines(1, true); }, + bindKey: { win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectMoreBefore", + description: "Select more before", + exec: function (editor) { editor.selectMore(-1); }, + bindKey: { win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectMoreAfter", + description: "Select more after", + exec: function (editor) { editor.selectMore(1); }, + bindKey: { win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectNextBefore", + description: "Select next before", + exec: function (editor) { editor.selectMore(-1, true); }, + bindKey: { win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "selectNextAfter", + description: "Select next after", + exec: function (editor) { editor.selectMore(1, true); }, + bindKey: { win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right" }, + scrollIntoView: "cursor", + readOnly: true + }, { + name: "toggleSplitSelectionIntoLines", + description: "Split selection into lines", + exec: function (editor) { + if (editor.multiSelect.rangeCount > 1) + editor.multiSelect.joinSelections(); + else + editor.multiSelect.splitIntoLines(); + }, + bindKey: { win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L" }, + readOnly: true + }, { + name: "splitSelectionIntoLines", + description: "Split into lines", + exec: function (editor) { editor.multiSelect.splitIntoLines(); }, + readOnly: true + }, { + name: "alignCursors", + description: "Align cursors", + exec: function (editor) { editor.alignCursors(); }, + bindKey: { win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A" }, + scrollIntoView: "cursor" + }, { + name: "findAll", + description: "Find all", + exec: function (editor) { editor.findAll(); }, + bindKey: { win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G" }, + scrollIntoView: "cursor", + readOnly: true + }]; +exports.multiSelectCommands = [{ + name: "singleSelection", + description: "Single selection", + bindKey: "esc", + exec: function (editor) { editor.exitMultiSelectMode(); }, + scrollIntoView: "cursor", + readOnly: true, + isAvailable: function (editor) { return editor && editor.inMultiSelectMode; } + }]; +var HashHandler = require("../keyboard/hash_handler").HashHandler; +exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); -.trial-content .graphselector { - width: 100%; - padding-left: 8px; -} +}); -.trial-content .graphselector .use-cache { - margin-top: 10px; - margin-left: 0px; +ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"], function(require, exports, module){/** + * @typedef {import("./anchor").Anchor} Anchor + * @typedef {import("../ace-internal").Ace.Point} Point + * @typedef {import("../ace-internal").Ace.ScreenCoordinates} ScreenCoordinates + */ +var RangeList = require("./range_list").RangeList; +var Range = require("./range").Range; +var Selection = require("./selection").Selection; +var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; +var event = require("./lib/event"); +var lang = require("./lib/lang"); +var commands = require("./commands/multi_select_commands"); +exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); +var Search = require("./search").Search; +var search = new Search(); +function find(session, needle, dir) { + search.$options.wrap = true; + search.$options.needle = needle; + search.$options.backwards = dir == -1; + return search.find(session); } - -.trial-content .graphselector a.link-button { - margin-top: 10px; - width: 273px; +var EditSession = require("./edit_session").EditSession; +(function () { + this.getSelectionMarkers = function () { + return this.$selectionMarkers; + }; +}).call(EditSession.prototype); +(function () { + this.ranges = null; + this.rangeList = null; + this.addRange = function (range, $blockChangeEvents) { + if (!range) + return; + if (!this.inMultiSelectMode && this.rangeCount === 0) { + var oldRange = this.toOrientedRange(); + this.rangeList.add(oldRange); + this.rangeList.add(range); + if (this.rangeList.ranges.length != 2) { + this.rangeList.removeAll(); + return $blockChangeEvents || this.fromOrientedRange(range); + } + this.rangeList.removeAll(); + this.rangeList.add(oldRange); + this.$onAddRange(oldRange); + } + if (!range.cursor) + range.cursor = range.end; + var removed = this.rangeList.add(range); + this.$onAddRange(range); + if (removed.length) + this.$onRemoveRange(removed); + if (this.rangeCount > 1 && !this.inMultiSelectMode) { + this._signal("multiSelect"); + this.inMultiSelectMode = true; + this.session.$undoSelect = false; + this.rangeList.attach(this.session); + } + return $blockChangeEvents || this.fromOrientedRange(range); + }; + this.toSingleRange = function (range) { + range = range || this.ranges[0]; + var removed = this.rangeList.removeAll(); + if (removed.length) + this.$onRemoveRange(removed); + range && this.fromOrientedRange(range); + }; + this.substractPoint = function (pos) { + var removed = this.rangeList.substractPoint(pos); + if (removed) { + this.$onRemoveRange(removed); + return removed[0]; + } + }; + this.mergeOverlappingRanges = function () { + var removed = this.rangeList.merge(); + if (removed.length) + this.$onRemoveRange(removed); + }; + this.$onAddRange = function (range) { + this.rangeCount = this.rangeList.ranges.length; + this.ranges.unshift(range); + this._signal("addRange", { range: range }); + }; + this.$onRemoveRange = function (removed) { + this.rangeCount = this.rangeList.ranges.length; + if (this.rangeCount == 1 && this.inMultiSelectMode) { + var lastRange = this.rangeList.ranges.pop(); + removed.push(lastRange); + this.rangeCount = 0; + } + for (var i = removed.length; i--;) { + var index = this.ranges.indexOf(removed[i]); + this.ranges.splice(index, 1); + } + this._signal("removeRange", { ranges: removed }); + if (this.rangeCount === 0 && this.inMultiSelectMode) { + this.inMultiSelectMode = false; + this._signal("singleSelect"); + this.session.$undoSelect = true; + this.rangeList.detach(this.session); + } + lastRange = lastRange || this.ranges[0]; + if (lastRange && !lastRange.isEqual(this.getRange())) + this.fromOrientedRange(lastRange); + }; + this.$initRangeList = function () { + if (this.rangeList) + return; + this.rangeList = new RangeList(); + this.ranges = []; + this.rangeCount = 0; + }; + this.getAllRanges = function () { + return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; + }; + this.splitIntoLines = function () { + var ranges = this.ranges.length ? this.ranges : [this.getRange()]; + var newRanges = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + var row = range.start.row; + var endRow = range.end.row; + if (row === endRow) { + newRanges.push(range.clone()); + } + else { + newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length)); + while (++row < endRow) + newRanges.push(this.getLineRange(row, true)); + newRanges.push(new Range(endRow, 0, endRow, range.end.column)); + } + if (i == 0 && !this.isBackwards()) + newRanges = newRanges.reverse(); + } + this.toSingleRange(); + for (var i = newRanges.length; i--;) + this.addRange(newRanges[i]); + }; + this.joinSelections = function () { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); + }; + this.toggleBlockSelection = function () { + if (this.rangeCount > 1) { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); + } + else { + var cursor = this.session.documentToScreenPosition(this.cursor); + var anchor = this.session.documentToScreenPosition(this.anchor); + var rectSel = this.rectangularRangeBlock(cursor, anchor); + rectSel.forEach(this.addRange, this); + } + }; + this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) { + var rectSel = []; + var xBackwards = screenCursor.column < screenAnchor.column; + if (xBackwards) { + var startColumn = screenCursor.column; + var endColumn = screenAnchor.column; + var startOffsetX = screenCursor.offsetX; + var endOffsetX = screenAnchor.offsetX; + } + else { + var startColumn = screenAnchor.column; + var endColumn = screenCursor.column; + var startOffsetX = screenAnchor.offsetX; + var endOffsetX = screenCursor.offsetX; + } + var yBackwards = screenCursor.row < screenAnchor.row; + if (yBackwards) { + var startRow = screenCursor.row; + var endRow = screenAnchor.row; + } + else { + var startRow = screenAnchor.row; + var endRow = screenCursor.row; + } + if (startColumn < 0) + startColumn = 0; + if (startRow < 0) + startRow = 0; + if (startRow == endRow) + includeEmptyLines = true; + var docEnd; + for (var row = startRow; row <= endRow; row++) { + var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX)); + if (range.isEmpty()) { + if (docEnd && isSamePoint(range.end, docEnd)) + break; + docEnd = range.end; + } + range.cursor = xBackwards ? range.start : range.end; + rectSel.push(range); + } + if (yBackwards) + rectSel.reverse(); + if (!includeEmptyLines) { + var end = rectSel.length - 1; + while (rectSel[end].isEmpty() && end > 0) + end--; + if (end > 0) { + var start = 0; + while (rectSel[start].isEmpty()) + start++; + } + for (var i = end; i >= start; i--) { + if (rectSel[i].isEmpty()) + rectSel.splice(i, 1); + } + } + return rectSel; + }; +}).call(Selection.prototype); +var Editor = require("./editor").Editor; +(function () { + this.updateSelectionMarkers = function () { + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + this.addSelectionMarker = function (orientedRange) { + if (!orientedRange.cursor) + orientedRange.cursor = orientedRange.end; + var style = this.getSelectionStyle(); + orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); + this.session.$selectionMarkers.push(orientedRange); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + return orientedRange; + }; + this.removeSelectionMarker = function (range) { + if (!range.marker) + return; + this.session.removeMarker(range.marker); + var index = this.session.$selectionMarkers.indexOf(range); + if (index != -1) + this.session.$selectionMarkers.splice(index, 1); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + }; + this.removeSelectionMarkers = function (ranges) { + var markerList = this.session.$selectionMarkers; + for (var i = ranges.length; i--;) { + var range = ranges[i]; + if (!range.marker) + continue; + this.session.removeMarker(range.marker); + var index = markerList.indexOf(range); + if (index != -1) + markerList.splice(index, 1); + } + this.session.selectionMarkerCount = markerList.length; + }; + this.$onAddRange = function (e) { + this.addSelectionMarker(e.range); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + this.$onRemoveRange = function (e) { + this.removeSelectionMarkers(e.ranges); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + this.$onMultiSelect = function (e) { + if (this.inMultiSelectMode) + return; + this.inMultiSelectMode = true; + this.setStyle("ace_multiselect"); + this.keyBinding.addKeyboardHandler(commands.keyboardHandler); + this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + this.$onSingleSelect = function (e) { + if (this.session.multiSelect.inVirtualMode) + return; + this.inMultiSelectMode = false; + this.unsetStyle("ace_multiselect"); + this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); + this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + this._emit("changeSelection"); + }; + this.$onMultiSelectExec = function (e) { + var command = e.command; + var editor = e.editor; + if (!editor.multiSelect) + return; + if (!command.multiSelectAction) { + var result = command.exec(editor, e.args || {}); + editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); + editor.multiSelect.mergeOverlappingRanges(); + } + else if (command.multiSelectAction == "forEach") { + result = editor.forEachSelection(command, e.args); + } + else if (command.multiSelectAction == "forEachLine") { + result = editor.forEachSelection(command, e.args, true); + } + else if (command.multiSelectAction == "single") { + editor.exitMultiSelectMode(); + result = command.exec(editor, e.args || {}); + } + else { + result = command.multiSelectAction(editor, e.args || {}); + } + return result; + }; + this.forEachSelection = function (cmd, args, options) { + if (this.inVirtualSelectionMode) + return; + var keepOrder = options && options.keepOrder; + var $byLines = options == true || options && options.$byLines; + var session = this.session; + var selection = this.selection; + var rangeList = selection.rangeList; + var ranges = (keepOrder ? selection : rangeList).ranges; + var result; + if (!ranges.length) + return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); + var reg = selection._eventRegistry; + selection._eventRegistry = {}; + var tmpSel = new Selection(session); + this.inVirtualSelectionMode = true; + for (var i = ranges.length; i--;) { + if ($byLines) { + while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) + i--; + } + tmpSel.fromOrientedRange(ranges[i]); + tmpSel.index = i; + this.selection = session.selection = tmpSel; + var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); + if (!result && cmdResult !== undefined) + result = cmdResult; + tmpSel.toOrientedRange(ranges[i]); + } + tmpSel.detach(); + this.selection = session.selection = selection; + this.inVirtualSelectionMode = false; + selection._eventRegistry = reg; + selection.mergeOverlappingRanges(); + if (selection.ranges[0]) + selection.fromOrientedRange(selection.ranges[0]); + var anim = this.renderer.$scrollAnimation; + this.onCursorChange(); + this.onSelectionChange(); + if (anim && anim.from == anim.to) + this.renderer.animateScrolling(anim.from); + return result; + }; + this.exitMultiSelectMode = function () { + if (!this.inMultiSelectMode || this.inVirtualSelectionMode) + return; + this.multiSelect.toSingleRange(); + }; + this.getSelectedText = function () { + var text = ""; + if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { + var ranges = this.multiSelect.rangeList.ranges; + var buf = []; + for (var i = 0; i < ranges.length; i++) { + buf.push(this.session.getTextRange(ranges[i])); + } + var nl = this.session.getDocument().getNewLineCharacter(); + text = buf.join(nl); + if (text.length == (buf.length - 1) * nl.length) + text = ""; + } + else if (!this.selection.isEmpty()) { + text = this.session.getTextRange(this.getSelectionRange()); + } + return text; + }; + this.$checkMultiselectChange = function (e, anchor) { + if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { + var range = this.multiSelect.ranges[0]; + if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) + return; + var pos = anchor == this.multiSelect.anchor + ? range.cursor == range.start ? range.end : range.start + : range.cursor; + if (pos.row != anchor.row + || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) + this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()); + else + this.multiSelect.mergeOverlappingRanges(); + } + }; + this.findAll = function (needle, options, additive) { + options = options || {}; + options.needle = needle || options.needle; + if (options.needle == undefined) { + var range = this.selection.isEmpty() + ? this.selection.getWordRange() + : this.selection.getRange(); + options.needle = this.session.getTextRange(range); + } + this.$search.set(options); + var ranges = this.$search.findAll(this.session); + if (!ranges.length) + return 0; + var selection = this.multiSelect; + if (!additive) + selection.toSingleRange(ranges[0]); + for (var i = ranges.length; i--;) + selection.addRange(ranges[i], true); + if (range && selection.rangeList.rangeAtPoint(range.start)) + selection.addRange(range, true); + return ranges.length; + }; + this.selectMoreLines = function (dir, skip) { + var range = this.selection.toOrientedRange(); + var isBackwards = range.cursor == range.end; + var screenLead = this.session.documentToScreenPosition(range.cursor); + if (this.selection.$desiredColumn) + screenLead.column = this.selection.$desiredColumn; + var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); + if (!range.isEmpty()) { + var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); + var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); + } + else { + var anchor = lead; + } + if (isBackwards) { + var newRange = Range.fromPoints(lead, anchor); + newRange.cursor = newRange.start; + } + else { + var newRange = Range.fromPoints(anchor, lead); + newRange.cursor = newRange.end; + } + newRange.desiredColumn = screenLead.column; + if (!this.selection.inMultiSelectMode) { + this.selection.addRange(range); + } + else { + if (skip) + var toRemove = range.cursor; + } + this.selection.addRange(newRange); + if (toRemove) + this.selection.substractPoint(toRemove); + }; + this.transposeSelections = function (dir) { + var session = this.session; + var sel = session.multiSelect; + var all = sel.ranges; + for (var i = all.length; i--;) { + var range = all[i]; + if (range.isEmpty()) { + var tmp_1 = session.getWordRange(range.start.row, range.start.column); + range.start.row = tmp_1.start.row; + range.start.column = tmp_1.start.column; + range.end.row = tmp_1.end.row; + range.end.column = tmp_1.end.column; + } + } + sel.mergeOverlappingRanges(); + var words = []; + for (var i = all.length; i--;) { + var range = all[i]; + words.unshift(session.getTextRange(range)); + } + if (dir < 0) + words.unshift(words.pop()); + else + words.push(words.shift()); + for (var i = all.length; i--;) { + var range = all[i]; + var tmp = range.clone(); + session.replace(range, words[i]); + range.start.row = tmp.start.row; + range.start.column = tmp.start.column; + } + sel.fromOrientedRange(sel.ranges[0]); + }; + this.selectMore = function (dir, skip, stopAtFirst) { + var session = this.session; + var sel = session.multiSelect; + var range = sel.toOrientedRange(); + if (range.isEmpty()) { + range = session.getWordRange(range.start.row, range.start.column); + range.cursor = dir == -1 ? range.start : range.end; + this.multiSelect.addRange(range); + if (stopAtFirst) + return; + } + var needle = session.getTextRange(range); + var newRange = find(session, needle, dir); + if (newRange) { + newRange.cursor = dir == -1 ? newRange.start : newRange.end; + this.session.unfold(newRange); + this.multiSelect.addRange(newRange); + this.renderer.scrollCursorIntoView(null, 0.5); + } + if (skip) + this.multiSelect.substractPoint(range.cursor); + }; + this.alignCursors = function () { + var session = this.session; + var sel = session.multiSelect; + var ranges = sel.ranges; + var row = -1; + var sameRowRanges = ranges.filter(function (r) { + if (r.cursor.row == row) + return true; + row = r.cursor.row; + }); + if (!ranges.length || sameRowRanges.length == ranges.length - 1) { + var range = this.selection.getRange(); + var fr = range.start.row, lr = range.end.row; + var guessRange = fr == lr; + if (guessRange) { + var max = this.session.getLength(); + var line; + do { + line = this.session.getLine(lr); + } while (/[=:]/.test(line) && ++lr < max); + do { + line = this.session.getLine(fr); + } while (/[=:]/.test(line) && --fr > 0); + if (fr < 0) + fr = 0; + if (lr >= max) + lr = max - 1; + } + var lines = this.session.removeFullLines(fr, lr); + lines = this.$reAlignText(lines, guessRange); + this.session.insert({ row: fr, column: 0 }, lines.join("\n") + "\n"); + if (!guessRange) { + range.start.column = 0; + range.end.column = lines[lines.length - 1].length; + } + this.selection.setRange(range); + } + else { + sameRowRanges.forEach(function (r) { + sel.substractPoint(r.cursor); + }); + var maxCol = 0; + var minSpace = Infinity; + var spaceOffsets = ranges.map(function (r) { + var p = r.cursor; + var line = session.getLine(p.row); + var spaceOffset = line.substr(p.column).search(/\S/g); + if (spaceOffset == -1) + spaceOffset = 0; + if (p.column > maxCol) + maxCol = p.column; + if (spaceOffset < minSpace) + minSpace = spaceOffset; + return spaceOffset; + }); + ranges.forEach(function (r, i) { + var p = r.cursor; + var l = maxCol - p.column; + var d = spaceOffsets[i] - minSpace; + if (l > d) + session.insert(p, lang.stringRepeat(" ", l - d)); + else + session.remove(new Range(p.row, p.column, p.row, p.column - l + d)); + r.start.column = r.end.column = maxCol; + r.start.row = r.end.row = p.row; + r.cursor = r.end; + }); + sel.fromOrientedRange(ranges[0]); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + } + }; + this.$reAlignText = function (lines, forceLeft) { + var isLeftAligned = true, isRightAligned = true; + var startW, textW, endW; + return lines.map(function (line) { + var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); + if (!m) + return [line]; + if (startW == null) { + startW = m[1].length; + textW = m[2].length; + endW = m[3].length; + return m; + } + if (startW + textW + endW != m[1].length + m[2].length + m[3].length) + isRightAligned = false; + if (startW != m[1].length) + isLeftAligned = false; + if (startW > m[1].length) + startW = m[1].length; + if (textW < m[2].length) + textW = m[2].length; + if (endW > m[3].length) + endW = m[3].length; + return m; + }).map(forceLeft ? alignLeft : + isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); + function spaces(n) { + return lang.stringRepeat(" ", n); + } + function alignLeft(m) { + return !m[2] ? m[0] : spaces(startW) + m[2] + + spaces(textW - m[2].length + endW) + + m[4].replace(/^([=:])\s+/, "$1 "); + } + function alignRight(m) { + return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + + spaces(endW) + + m[4].replace(/^([=:])\s+/, "$1 "); + } + function unAlign(m) { + return !m[2] ? m[0] : spaces(startW) + m[2] + + spaces(endW) + + m[4].replace(/^([=:])\s+/, "$1 "); + } + }; +}).call(Editor.prototype); +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; } - -.trial-content .toggle-label { - margin-right: 5px; +exports.onSessionChange = function (e) { + var session = e.session; + if (session && !session.multiSelect) { + session.$selectionMarkers = []; + session.selection.$initRangeList(); + session.multiSelect = session.selection; + } + this.multiSelect = session && session.multiSelect; + var oldSession = e.oldSession; + if (oldSession) { + oldSession.multiSelect.off("addRange", this.$onAddRange); + oldSession.multiSelect.off("removeRange", this.$onRemoveRange); + oldSession.multiSelect.off("multiSelect", this.$onMultiSelect); + oldSession.multiSelect.off("singleSelect", this.$onSingleSelect); + oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange); + oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange); + } + if (session) { + session.multiSelect.on("addRange", this.$onAddRange); + session.multiSelect.on("removeRange", this.$onRemoveRange); + session.multiSelect.on("multiSelect", this.$onMultiSelect); + session.multiSelect.on("singleSelect", this.$onSingleSelect); + session.multiSelect.lead.on("change", this.$checkMultiselectChange); + session.multiSelect.anchor.on("change", this.$checkMultiselectChange); + } + if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) { + if (session.selection.inMultiSelectMode) + this.$onMultiSelect(); + else + this.$onSingleSelect(); + } +}; +function MultiSelect(editor) { + if (editor.$multiselectOnSessionChange) + return; + editor.$onAddRange = editor.$onAddRange.bind(editor); + editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); + editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); + editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); + editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); + editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor); + editor.$multiselectOnSessionChange(editor); + editor.on("changeSession", editor.$multiselectOnSessionChange); + editor.on("mousedown", onMouseDown); + editor.commands.addCommands(commands.defaultCommands); + addAltCursorListeners(editor); } - -.graphselector > div:first-child { - margin-top: 8px; +function addAltCursorListeners(editor) { + if (!editor.textInput) + return; + var el = editor.textInput.getElement(); + var altCursor = false; + event.addListener(el, "keydown", function (e) { + var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey); + if (editor.$blockSelectEnabled && altDown) { + if (!altCursor) { + editor.renderer.setMouseCursor("crosshair"); + altCursor = true; + } + } + else if (altCursor) { + reset(); + } + }, editor); + event.addListener(el, "keyup", reset, editor); + event.addListener(el, "blur", reset, editor); + function reset(e) { + if (altCursor) { + editor.renderer.setMouseCursor(""); + altCursor = false; + } + } } +exports.MultiSelect = MultiSelect; +require("./config").defineOptions(Editor.prototype, "editor", { + enableMultiselect: { + set: function (val) { + MultiSelect(this); + if (val) { + this.on("mousedown", onMouseDown); + } + else { + this.off("mousedown", onMouseDown); + } + }, + value: true + }, + enableBlockSelect: { + set: function (val) { + this.$blockSelectEnabled = val; + }, + value: true + } +}); -.graphselector > a:last-child { - margin-bottom: 8px; -}`, "",{"version":3,"sources":["webpack://./style/trial.css"],"names":[],"mappings":"AAAA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,YAAY;AAChB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,kBAAkB;AACtB","sourcesContent":[".trial-content,\n.trial-content .sub-content,\n.trial-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.trial-content .graphselector .graph-attr:first-child label {\n margin-right: 17px;\n}\n\n.trial-content .graphselector {\n width: 100%;\n padding-left: 8px;\n}\n\n.trial-content .graphselector .use-cache {\n margin-top: 10px;\n margin-left: 0px;\n}\n\n.trial-content .graphselector a.link-button {\n margin-top: 10px;\n width: 273px;\n}\n\n.trial-content .toggle-label {\n margin-right: 5px;\n}\n\n.graphselector > div:first-child {\n margin-top: 8px;\n}\n\n.graphselector > a:last-child {\n margin-bottom: 8px;\n}"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - +}); -/***/ }), +ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(require, exports, module){"use strict"; +var Range = require("../../range").Range; +var FoldMode = exports.FoldMode = function () { }; +(function () { + this.foldingStartMarker = null; + this.foldingStopMarker = null; + this.getFoldWidget = function (session, foldStyle, row) { + var line = session.getLine(row); + if (this.foldingStartMarker.test(line)) + return "start"; + if (foldStyle == "markbeginend" + && this.foldingStopMarker + && this.foldingStopMarker.test(line)) + return "end"; + return ""; + }; + this.getFoldWidgetRange = function (session, foldStyle, row) { + return null; + }; + this.indentationBlock = function (session, row, column) { + var re = /\S/; + var line = session.getLine(row); + var startLevel = line.search(re); + if (startLevel == -1) + return; + var startColumn = column || line.length; + var maxRow = session.getLength(); + var startRow = row; + var endRow = row; + while (++row < maxRow) { + var level = session.getLine(row).search(re); + if (level == -1) + continue; + if (level <= startLevel) { + var token = session.getTokenAt(row, 0); + if (!token || token.type !== "string") + break; + } + endRow = row; + } + if (endRow > startRow) { + var endColumn = session.getLine(endRow).length; + return new Range(startRow, startColumn, endRow, endColumn); + } + }; + this.openingBracketBlock = function (session, bracket, row, column, typeRe) { + var start = { row: row, column: column + 1 }; + var end = session.$findClosingBracket(bracket, start, typeRe); + if (!end) + return; + var fw = session.foldWidgets[end.row]; + if (fw == null) + fw = session.getFoldWidget(end.row); + if (fw == "start" && end.row > start.row) { + end.row--; + end.column = session.getLine(end.row).length; + } + return Range.fromPoints(start, end); + }; + this.closingBracketBlock = function (session, bracket, row, column, typeRe) { + var end = { row: row, column: column }; + var start = session.$findOpeningBracket(bracket, end); + if (!start) + return; + start.column++; + end.column--; + return Range.fromPoints(start, end); + }; +}).call(FoldMode.prototype); -/***/ "./node_modules/css-loader/dist/cjs.js!../trial/style/index.css": -/*!**********************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../trial/style/index.css ***! - \**********************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { +}); +ace.define("ace/ext/error_marker",["require","exports","module","ace/lib/dom","ace/range","ace/config"], function(require, exports, module){/** + * ## Error Marker extension + * + * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips + * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with + * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity. + * + * @module + */ "use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `.trial-toolbar { - margin: 5px; - float: left; - overflow: none; - width: 375px; - height: 30px; - z-index: 3; - position: absolute; -} - -.trial-toolbar input { - height: 30px; -} - -.trial-toolbar input[type=checkbox] { - display: none -} - -.trial-toolbar label, .trial-toolbar a { - margin-right: 8px; - margin-top: 8px; -} - -.trial-toolbar input[type=checkbox] + label { - display:inline-block; - color: black; - cursor: pointer; -} - -.trial-toolbar input[type=checkbox]:checked + label { - color: blue; -} - -.trial-toolbar a.toollink, -.trial-toolbar a.toollink:link, -.trial-toolbar a.toollink:visited { - color: black; -} - -.trial-toolbar a.toollink:active { - color: blue; +var dom = require("../lib/dom"); +var Range = require("../range").Range; +var nls = require("../config").nls; +function binarySearch(array, needle, comparator) { + var first = 0; + var last = array.length - 1; + while (first <= last) { + var mid = (first + last) >> 1; + var c = comparator(needle, array[mid]); + if (c > 0) + first = mid + 1; + else if (c < 0) + last = mid - 1; + else + return mid; + } + return -(first + 1); } -`, "",{"version":3,"sources":["webpack://./../trial/style/index.css"],"names":[],"mappings":"AAAA;IACI,WAAW;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,WAAW;AACb","sourcesContent":[".trial-toolbar {\n margin: 5px;\n float: left;\n overflow: none;\n width: 375px;\n height: 30px;\n z-index: 3;\n position: absolute;\n}\n\n.trial-toolbar input {\n height: 30px;\n}\n\n.trial-toolbar input[type=checkbox] {\n display: none\n}\n\n.trial-toolbar label, .trial-toolbar a {\n margin-right: 8px;\n margin-top: 8px;\n}\n\n.trial-toolbar input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.trial-toolbar input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.trial-toolbar a.toollink,\n.trial-toolbar a.toollink:link,\n.trial-toolbar a.toollink:visited {\n color: black;\n}\n\n.trial-toolbar a.toollink:active {\n color: blue;\n}\n"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css": -/*!***********************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js!../utils/style/shared.css ***! - \***********************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../nowvis/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _nowvis_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_nowvis_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, `div.now-tooltip { - position: absolute; - left: 1px; - right: 1px; - max-height: 200px; - max-width: 400px; - overflow: auto; - padding: 5px; - padding-bottom: 10px; - font: 12px sans-serif; - background: #DDD; - border: 0px; - border-radius: 8px; - z-index: 2000; +function findAnnotations(session, row, dir) { + var annotations = session.getAnnotations().sort(Range.comparePoints); + if (!annotations.length) + return; + var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints); + if (i < 0) + i = -i - 1; + if (i >= annotations.length) + i = dir > 0 ? 0 : annotations.length - 1; + else if (i === 0 && dir < 0) + i = annotations.length - 1; + var annotation = annotations[i]; + if (!annotation || !dir) + return; + if (annotation.row === row) { + do { + annotation = annotations[i += dir]; + } while (annotation && annotation.row === row); + if (!annotation) + return annotations.slice(); + } + var matched = []; + row = annotation.row; + do { + matched[dir < 0 ? "unshift" : "push"](annotation); + annotation = annotations[i += dir]; + } while (annotation && annotation.row == row); + return matched.length && matched; } +exports.showErrorMarker = function (editor, dir) { + var session = editor.session; + var pos = editor.getCursorPosition(); + var row = pos.row; + var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) { + return w.type == "errorMarker"; + })[0]; + if (oldWidget) { + oldWidget.destroy(); + } + else { + row -= dir; + } + var annotations = findAnnotations(session, row, dir); + var gutterAnno; + if (annotations) { + var annotation = annotations[0]; + pos.column = (annotation.pos && typeof annotation.column != "number" + ? annotation.pos.sc + : annotation.column) || 0; + pos.row = annotation.row; + gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row]; + } + else if (oldWidget) { + return; + } + else { + gutterAnno = { + displayText: [nls("error-marker.good-state", "Looks good!")], + className: "ace_ok" + }; + } + editor.session.unfold(pos.row); + editor.selection.moveToPosition(pos); + var w = { + row: pos.row, + fixedWidth: true, + coverGutter: true, + el: dom.createElement("div"), + type: "errorMarker" + }; + var el = w.el.appendChild(dom.createElement("div")); + var arrow = w.el.appendChild(dom.createElement("div")); + arrow.className = "error_widget_arrow " + gutterAnno.className; + var left = editor.renderer.$cursorLayer + .getPixelPosition(pos).left; + arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px"; + w.el.className = "error_widget_wrapper"; + el.className = "error_widget " + gutterAnno.className; + gutterAnno.displayText.forEach(function (annoTextLine, i) { + el.appendChild(dom.createTextNode(annoTextLine)); + if (i < gutterAnno.displayText.length - 1) { + el.appendChild(dom.createElement("br")); + } + }); + el.appendChild(dom.createElement("div")); + var kb = function (_, hashId, keyString) { + if (hashId === 0 && (keyString === "esc" || keyString === "return")) { + w.destroy(); + return { command: "null" }; + } + }; + w.destroy = function () { + if (editor.$mouseHandler.isMousePressed) + return; + editor.keyBinding.removeKeyboardHandler(kb); + session.widgetManager.removeLineWidget(w); + editor.off("changeSelection", w.destroy); + editor.off("changeSession", w.destroy); + editor.off("mouseup", w.destroy); + editor.off("change", w.destroy); + }; + editor.keyBinding.addKeyboardHandler(kb); + editor.on("changeSelection", w.destroy); + editor.on("changeSession", w.destroy); + editor.on("mouseup", w.destroy); + editor.on("change", w.destroy); + editor.session.widgetManager.addLineWidget(w); + w.el.onmousedown = editor.focus.bind(editor); + editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight }); +}; +dom.importCssString("\n .error_widget_wrapper {\n background: inherit;\n color: inherit;\n border:none\n }\n .error_widget {\n border-top: solid 2px;\n border-bottom: solid 2px;\n margin: 5px 0;\n padding: 10px 40px;\n white-space: pre-wrap;\n }\n .error_widget.ace_error, .error_widget_arrow.ace_error{\n border-color: #ff5a5a\n }\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\n border-color: #F1D817\n }\n .error_widget.ace_info, .error_widget_arrow.ace_info{\n border-color: #5a5a5a\n }\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\n border-color: #5aaa5a\n }\n .error_widget_arrow {\n position: absolute;\n border: solid 5px;\n border-top-color: transparent!important;\n border-right-color: transparent!important;\n border-left-color: transparent!important;\n top: -5px;\n }\n", "error_marker.css", false); -.now-tooltip.hidden { - display: none; -}`, "",{"version":3,"sources":["webpack://./../utils/style/shared.css"],"names":[],"mappings":"AAAA;IACI,kBAAkB;IAClB,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,aAAa;AACjB;;AAEA;IACI,aAAa;AACjB","sourcesContent":["div.now-tooltip {\n position: absolute;\n left: 1px;\n right: 1px;\n max-height: 200px;\n max-width: 400px;\n overflow: auto;\n padding: 5px;\n padding-bottom: 10px;\n font: 12px sans-serif;\n background: #DDD;\n border: 0px;\n border-radius: 8px;\n z-index: 2000;\n}\n\n.now-tooltip.hidden {\n display: none;\n}"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/api.js": -/*!*****************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/api.js ***! - \*****************************************************/ -/***/ ((module) => { +}); +ace.define("ace/ace",["require","exports","module","ace/lib/dom","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config","ace/loader_build"], function(require, exports, module){/** + * The main class required to set up an Ace instance in the browser. + * + * @namespace Ace + **/ "use strict"; +require("./loader_build")(exports) +var dom = require("./lib/dom"); +var Range = require("./range").Range; +var Editor = require("./editor").Editor; +var EditSession = require("./edit_session").EditSession; +var UndoManager = require("./undomanager").UndoManager; +var Renderer = require("./virtual_renderer").VirtualRenderer; +require("./worker/worker_client"); +require("./keyboard/hash_handler"); +require("./placeholder"); +require("./multi_select"); +require("./mode/folding/fold_mode"); +require("./theme/textmate"); +require("./ext/error_marker"); +exports.config = require("./config"); +exports.edit = function (el, options) { + if (typeof el == "string") { + var _id = el; + el = document.getElementById(_id); + if (!el) + throw new Error("ace.edit can't find div #" + _id); + } + if (el && el.env && el.env.editor instanceof Editor) + return el.env.editor; + var value = ""; + if (el && /input|textarea/i.test(el.tagName)) { + var oldNode = el; + value = oldNode.value; + el = dom.createElement("pre"); + oldNode.parentNode.replaceChild(el, oldNode); + } + else if (el) { + value = el.textContent; + el.innerHTML = ""; + } + var doc = exports.createEditSession(value); + var editor = new Editor(new Renderer(el), doc, options); + var env = { + document: doc, + editor: editor, + onResize: editor.resize.bind(editor, null) + }; + if (oldNode) + env.textarea = oldNode; + editor.on("destroy", function () { + env.editor.container.env = null; // prevent memory leak on old ie + }); + editor.container.env = editor.env = env; + return editor; +}; +exports.createEditSession = function (text, mode) { + var doc = new EditSession(text, mode); + doc.setUndoManager(new UndoManager()); + return doc; +}; +exports.Range = Range; +exports.Editor = Editor; +exports.EditSession = EditSession; +exports.UndoManager = UndoManager; +exports.VirtualRenderer = Renderer; +var version = exports.config.version; +exports.version = version; +}); (function() { + ace.require(["ace/ace"], function(a) { + if (a) { + a.config.init(true); + a.define = ace.define; + } + var global = (function () { + return this; + })(); + if (!global && typeof window != "undefined") global = window; // can happen in strict mode + if (!global && typeof self != "undefined") global = self; // can happen in webworker + + if (!global.ace) + global.ace = a; + for (var key in a) if (a.hasOwnProperty(key)) + global.ace[key] = a[key]; + global.ace["default"] = global.ace; + if ( true && module) { + module.exports = global.ace; + } + }); + })(); + -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -module.exports = function (cssWithMappingToString) { - var list = []; +/***/ }), - // return the list of modules as css string - list.toString = function toString() { - return this.map(function (item) { - var content = ""; - var needLayer = typeof item[5] !== "undefined"; - if (item[4]) { - content += "@supports (".concat(item[4], ") {"); - } - if (item[2]) { - content += "@media ".concat(item[2], " {"); - } - if (needLayer) { - content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); - } - content += cssWithMappingToString(item); - if (needLayer) { - content += "}"; - } - if (item[2]) { - content += "}"; - } - if (item[4]) { - content += "}"; - } - return content; - }).join(""); - }; +/***/ "../../../../../../../../node_modules/ace-builds/src-noconflict/ext-language_tools.js": +/*!********************************************************************************************!*\ + !*** ../../../../../../../../node_modules/ace-builds/src-noconflict/ext-language_tools.js ***! + \********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - // import a list of modules into the list - list.i = function i(modules, media, dedupe, supports, layer) { - if (typeof modules === "string") { - modules = [[null, modules, undefined]]; +/* module decorator */ module = __webpack_require__.nmd(module); +ace.define("ace/snippets",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/range_list","ace/keyboard/hash_handler","ace/tokenizer","ace/clipboard","ace/editor"], function(require, exports, module){"use strict"; +var dom = require("./lib/dom"); +var oop = require("./lib/oop"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var lang = require("./lib/lang"); +var Range = require("./range").Range; +var RangeList = require("./range_list").RangeList; +var HashHandler = require("./keyboard/hash_handler").HashHandler; +var Tokenizer = require("./tokenizer").Tokenizer; +var clipboard = require("./clipboard"); +var VARIABLES = { + CURRENT_WORD: function (editor) { + return editor.session.getTextRange(editor.session.getWordRange()); + }, + SELECTION: function (editor, name, indentation) { + var text = editor.session.getTextRange(); + if (indentation) + return text.replace(/\n\r?([ \t]*\S)/g, "\n" + indentation + "$1"); + return text; + }, + CURRENT_LINE: function (editor) { + return editor.session.getLine(editor.getCursorPosition().row); + }, + PREV_LINE: function (editor) { + return editor.session.getLine(editor.getCursorPosition().row - 1); + }, + LINE_INDEX: function (editor) { + return editor.getCursorPosition().row; + }, + LINE_NUMBER: function (editor) { + return editor.getCursorPosition().row + 1; + }, + SOFT_TABS: function (editor) { + return editor.session.getUseSoftTabs() ? "YES" : "NO"; + }, + TAB_SIZE: function (editor) { + return editor.session.getTabSize(); + }, + CLIPBOARD: function (editor) { + return clipboard.getText && clipboard.getText(); + }, + FILENAME: function (editor) { + return /[^/\\]*$/.exec(this.FILEPATH(editor))[0]; + }, + FILENAME_BASE: function (editor) { + return /[^/\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\.[^.]*$/, ""); + }, + DIRECTORY: function (editor) { + return this.FILEPATH(editor).replace(/[^/\\]*$/, ""); + }, + FILEPATH: function (editor) { return "/not implemented.txt"; }, + WORKSPACE_NAME: function () { return "Unknown"; }, + FULLNAME: function () { return "Unknown"; }, + BLOCK_COMMENT_START: function (editor) { + var mode = editor.session.$mode || {}; + return mode.blockComment && mode.blockComment.start || ""; + }, + BLOCK_COMMENT_END: function (editor) { + var mode = editor.session.$mode || {}; + return mode.blockComment && mode.blockComment.end || ""; + }, + LINE_COMMENT: function (editor) { + var mode = editor.session.$mode || {}; + return mode.lineCommentStart || ""; + }, + CURRENT_YEAR: date.bind(null, { year: "numeric" }), + CURRENT_YEAR_SHORT: date.bind(null, { year: "2-digit" }), + CURRENT_MONTH: date.bind(null, { month: "numeric" }), + CURRENT_MONTH_NAME: date.bind(null, { month: "long" }), + CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: "short" }), + CURRENT_DATE: date.bind(null, { day: "2-digit" }), + CURRENT_DAY_NAME: date.bind(null, { weekday: "long" }), + CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: "short" }), + CURRENT_HOUR: date.bind(null, { hour: "2-digit", hour12: false }), + CURRENT_MINUTE: date.bind(null, { minute: "2-digit" }), + CURRENT_SECOND: date.bind(null, { second: "2-digit" }) +}; +VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION; +function date(dateFormat) { + var str = new Date().toLocaleString("en-us", dateFormat); + return str.length == 1 ? "0" + str : str; +} +var SnippetManager = /** @class */ (function () { + function SnippetManager() { + this.snippetMap = {}; + this.snippetNameMap = {}; + this.variables = VARIABLES; } - var alreadyImportedModules = {}; - if (dedupe) { - for (var k = 0; k < this.length; k++) { - var id = this[k][0]; - if (id != null) { - alreadyImportedModules[id] = true; + SnippetManager.prototype.getTokenizer = function () { + return SnippetManager["$tokenizer"] || this.createTokenizer(); + }; + SnippetManager.prototype.createTokenizer = function () { + function TabstopToken(str) { + str = str.substr(1); + if (/^\d+$/.test(str)) + return [{ tabstopId: parseInt(str, 10) }]; + return [{ text: str }]; + } + function escape(ch) { + return "(?:[^\\\\" + ch + "]|\\\\.)"; + } + var formatMatcher = { + regex: "/(" + escape("/") + "+)/", + onMatch: function (val, state, stack) { + var ts = stack[0]; + ts.fmtString = true; + ts.guard = val.slice(1, -1); + ts.flag = ""; + return ""; + }, + next: "formatString" + }; + SnippetManager["$tokenizer"] = new Tokenizer({ + start: [ + { regex: /\\./, onMatch: function (val, state, stack) { + var ch = val[1]; + if (ch == "}" && stack.length) { + val = ch; + } + else if ("`$\\".indexOf(ch) != -1) { + val = ch; + } + return [val]; + } }, + { regex: /}/, onMatch: function (val, state, stack) { + return [stack.length ? stack.shift() : val]; + } }, + { regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken }, + { regex: /\$\{[\dA-Z_a-z]+/, onMatch: function (str, state, stack) { + var t = TabstopToken(str.substr(1)); + stack.unshift(t[0]); + return t; + }, next: "snippetVar" }, + { regex: /\n/, token: "newline", merge: false } + ], + snippetVar: [ + { regex: "\\|" + escape("\\|") + "*\\|", onMatch: function (val, state, stack) { + var choices = val.slice(1, -1).replace(/\\[,|\\]|,/g, function (operator) { + return operator.length == 2 ? operator[1] : "\x00"; + }).split("\x00").map(function (value) { + return { value: value }; + }); + stack[0].choices = choices; + return [choices[0]]; + }, next: "start" }, + formatMatcher, + { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start" } + ], + formatString: [ + { regex: /:/, onMatch: function (val, state, stack) { + if (stack.length && stack[0].expectElse) { + stack[0].expectElse = false; + stack[0].ifEnd = { elseEnd: stack[0] }; + return [stack[0].ifEnd]; + } + return ":"; + } }, + { regex: /\\./, onMatch: function (val, state, stack) { + var ch = val[1]; + if (ch == "}" && stack.length) + val = ch; + else if ("`$\\".indexOf(ch) != -1) + val = ch; + else if (ch == "n") + val = "\n"; + else if (ch == "t") + val = "\t"; + else if ("ulULE".indexOf(ch) != -1) + val = { changeCase: ch, local: ch > "a" }; + return [val]; + } }, + { regex: "/\\w*}", onMatch: function (val, state, stack) { + var next = stack.shift(); + if (next) + next.flag = val.slice(1, -1); + this.next = next && next.tabstopId ? "start" : ""; + return [next || val]; + }, next: "start" }, + { regex: /\$(?:\d+|\w+)/, onMatch: function (val, state, stack) { + return [{ text: val.slice(1) }]; + } }, + { regex: /\${\w+/, onMatch: function (val, state, stack) { + var token = { text: val.slice(2) }; + stack.unshift(token); + return [token]; + }, next: "formatStringVar" }, + { regex: /\n/, token: "newline", merge: false }, + { regex: /}/, onMatch: function (val, state, stack) { + var next = stack.shift(); + this.next = next && next.tabstopId ? "start" : ""; + return [next || val]; + }, next: "start" } + ], + formatStringVar: [ + { regex: /:\/\w+}/, onMatch: function (val, state, stack) { + var ts = stack[0]; + ts.formatFunction = val.slice(2, -1); + return [stack.shift()]; + }, next: "formatString" }, + formatMatcher, + { regex: /:[\?\-+]?/, onMatch: function (val, state, stack) { + if (val[1] == "+") + stack[0].ifEnd = stack[0]; + if (val[1] == "?") + stack[0].expectElse = true; + }, next: "formatString" }, + { regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "formatString" } + ] + }); + return SnippetManager["$tokenizer"]; + }; + SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) { + return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) { + return x.value || x; + }); + }; + SnippetManager.prototype.getVariableValue = function (editor, name, indentation) { + if (/^\d+$/.test(name)) + return (this.variables.__ || {})[name] || ""; + if (/^[A-Z]\d+$/.test(name)) + return (this.variables[name[0] + "__"] || {})[name.substr(1)] || ""; + name = name.replace(/^TM_/, ""); + if (!this.variables.hasOwnProperty(name)) + return ""; + var value = this.variables[name]; + if (typeof value == "function") + value = this.variables[name](editor, name, indentation); + return value == null ? "" : value; + }; + SnippetManager.prototype.tmStrFormat = function (str, ch, editor) { + if (!ch.fmt) + return str; + var flag = ch.flag || ""; + var re = ch.guard; + re = new RegExp(re, flag.replace(/[^gim]/g, "")); + var fmtTokens = typeof ch.fmt == "string" ? this.tokenizeTmSnippet(ch.fmt, "formatString") : ch.fmt; + var _self = this; + var formatted = str.replace(re, function () { + var oldArgs = _self.variables.__; + _self.variables.__ = [].slice.call(arguments); + var fmtParts = _self.resolveVariables(fmtTokens, editor); + var gChangeCase = "E"; + for (var i = 0; i < fmtParts.length; i++) { + var ch = fmtParts[i]; + if (typeof ch == "object") { + fmtParts[i] = ""; + if (ch.changeCase && ch.local) { + var next = fmtParts[i + 1]; + if (next && typeof next == "string") { + if (ch.changeCase == "u") + fmtParts[i] = next[0].toUpperCase(); + else + fmtParts[i] = next[0].toLowerCase(); + fmtParts[i + 1] = next.substr(1); + } + } + else if (ch.changeCase) { + gChangeCase = ch.changeCase; + } + } + else if (gChangeCase == "U") { + fmtParts[i] = ch.toUpperCase(); + } + else if (gChangeCase == "L") { + fmtParts[i] = ch.toLowerCase(); + } + } + _self.variables.__ = oldArgs; + return fmtParts.join(""); + }); + return formatted; + }; + SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) { + if (ch.formatFunction == "upcase") + return str.toUpperCase(); + if (ch.formatFunction == "downcase") + return str.toLowerCase(); + return str; + }; + SnippetManager.prototype.resolveVariables = function (snippet, editor) { + var result = []; + var indentation = ""; + var afterNewLine = true; + for (var i = 0; i < snippet.length; i++) { + var ch = snippet[i]; + if (typeof ch == "string") { + result.push(ch); + if (ch == "\n") { + afterNewLine = true; + indentation = ""; + } + else if (afterNewLine) { + indentation = /^\t*/.exec(ch)[0]; + afterNewLine = /\S/.test(ch); + } + continue; + } + if (!ch) + continue; + afterNewLine = false; + if (ch.fmtString) { + var j = snippet.indexOf(ch, i + 1); + if (j == -1) + j = snippet.length; + ch.fmt = snippet.slice(i + 1, j); + i = j; + } + if (ch.text) { + var value = this.getVariableValue(editor, ch.text, indentation) + ""; + if (ch.fmtString) + value = this.tmStrFormat(value, ch, editor); + if (ch.formatFunction) + value = this.tmFormatFunction(value, ch, editor); + if (value && !ch.ifEnd) { + result.push(value); + gotoNext(ch); + } + else if (!value && ch.ifEnd) { + gotoNext(ch.ifEnd); + } + } + else if (ch.elseEnd) { + gotoNext(ch.elseEnd); + } + else if (ch.tabstopId != null) { + result.push(ch); + } + else if (ch.changeCase != null) { + result.push(ch); + } } - } - } - for (var _k = 0; _k < modules.length; _k++) { - var item = [].concat(modules[_k]); - if (dedupe && alreadyImportedModules[item[0]]) { - continue; - } - if (typeof layer !== "undefined") { - if (typeof item[5] === "undefined") { - item[5] = layer; - } else { - item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); - item[5] = layer; + function gotoNext(ch) { + var i1 = snippet.indexOf(ch, i + 1); + if (i1 != -1) + i = i1; } - } - if (media) { - if (!item[2]) { - item[2] = media; - } else { - item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); - item[2] = media; + return result; + }; + SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) { + var processedSnippet = processSnippetText.call(this, editor, snippetText); + return processedSnippet.text; + }; + SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) { + if (options === void 0) { options = {}; } + var processedSnippet = processSnippetText.call(this, editor, snippetText, options); + var range = editor.getSelectionRange(); + var end = editor.session.replace(range, processedSnippet.text); + var tabstopManager = new TabstopManager(editor); + var selectionId = editor.inVirtualSelectionMode && editor.selection.index; + tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId); + }; + SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) { + if (options === void 0) { options = {}; } + var self = this; + if (editor.inVirtualSelectionMode) + return self.insertSnippetForSelection(editor, snippetText, options); + editor.forEachSelection(function () { + self.insertSnippetForSelection(editor, snippetText, options); + }, null, { keepOrder: true }); + if (editor.tabstopManager) + editor.tabstopManager.tabNext(); + }; + SnippetManager.prototype.$getScope = function (editor) { + var scope = editor.session.$mode.$id || ""; + scope = scope.split("/").pop(); + if (scope === "html" || scope === "php") { + if (scope === "php" && !editor.session.$mode.inlinePhp) + scope = "html"; + var c = editor.getCursorPosition(); + var state = editor.session.getState(c.row); + if (typeof state === "object") { + state = state[0]; + } + if (state.substring) { + if (state.substring(0, 3) == "js-") + scope = "javascript"; + else if (state.substring(0, 4) == "css-") + scope = "css"; + else if (state.substring(0, 4) == "php-") + scope = "php"; + } } - } - if (supports) { - if (!item[4]) { - item[4] = "".concat(supports); - } else { - item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); - item[4] = supports; + return scope; + }; + SnippetManager.prototype.getActiveScopes = function (editor) { + var scope = this.$getScope(editor); + var scopes = [scope]; + var snippetMap = this.snippetMap; + if (snippetMap[scope] && snippetMap[scope].includeScopes) { + scopes.push.apply(scopes, snippetMap[scope].includeScopes); } - } - list.push(item); - } - }; - return list; -}; - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/getUrl.js": -/*!********************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***! - \********************************************************/ -/***/ ((module) => { - -"use strict"; - - -module.exports = function (url, options) { - if (!options) { - options = {}; - } - if (!url) { - return url; - } - url = String(url.__esModule ? url.default : url); - - // If url is already wrapped in quotes, remove them - if (/^['"].*['"]$/.test(url)) { - url = url.slice(1, -1); - } - if (options.hash) { - url += options.hash; - } - - // Should url be wrapped? - // See https://drafts.csswg.org/css-values-3/#urls - if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) { - return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\""); - } - return url; -}; - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js": -/*!************************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***! - \************************************************************/ -/***/ ((module) => { - -"use strict"; - - -module.exports = function (item) { - var content = item[1]; - var cssMapping = item[3]; - if (!cssMapping) { - return content; - } - if (typeof btoa === "function") { - var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); - var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); - var sourceMapping = "/*# ".concat(data, " */"); - return [content].concat([sourceMapping]).join("\n"); - } - return [content].join("\n"); -}; - -/***/ }), - -/***/ "./style/bootstrap.min.css": -/*!*********************************!*\ - !*** ./style/bootstrap.min.css ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css */ "./node_modules/css-loader/dist/cjs.js!./style/bootstrap.min.css"); - - - - - - - - - - - -var options = {}; - -options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); -options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); -options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); -options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); -options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); - -var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); - - - - - /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_bootstrap_min_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); - - -/***/ }), - -/***/ "./style/index.css": -/*!*************************!*\ - !*** ./style/index.css ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); -/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./index.css */ "./node_modules/css-loader/dist/cjs.js!./style/index.css"); - - - - - - - - - - - -var options = {}; - -options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); -options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); -options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); -options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); -options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); - -var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); - - - - - /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_index_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); - - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": -/*!****************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! - \****************************************************************************/ -/***/ ((module) => { - -"use strict"; - - -var stylesInDOM = []; -function getIndexByIdentifier(identifier) { - var result = -1; - for (var i = 0; i < stylesInDOM.length; i++) { - if (stylesInDOM[i].identifier === identifier) { - result = i; - break; - } - } - return result; -} -function modulesToDom(list, options) { - var idCountMap = {}; - var identifiers = []; - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var id = options.base ? item[0] + options.base : item[0]; - var count = idCountMap[id] || 0; - var identifier = "".concat(id, " ").concat(count); - idCountMap[id] = count + 1; - var indexByIdentifier = getIndexByIdentifier(identifier); - var obj = { - css: item[1], - media: item[2], - sourceMap: item[3], - supports: item[4], - layer: item[5] + scopes.push("_"); + return scopes; + }; + SnippetManager.prototype.expandWithTab = function (editor, options) { + var self = this; + var result = editor.forEachSelection(function () { + return self.expandSnippetForSelection(editor, options); + }, null, { keepOrder: true }); + if (result && editor.tabstopManager) + editor.tabstopManager.tabNext(); + return result; + }; + SnippetManager.prototype.expandSnippetForSelection = function (editor, options) { + var cursor = editor.getCursorPosition(); + var line = editor.session.getLine(cursor.row); + var before = line.substring(0, cursor.column); + var after = line.substr(cursor.column); + var snippetMap = this.snippetMap; + var snippet; + this.getActiveScopes(editor).some(function (scope) { + var snippets = snippetMap[scope]; + if (snippets) + snippet = this.findMatchingSnippet(snippets, before, after); + return !!snippet; + }, this); + if (!snippet) + return false; + if (options && options.dryRun) + return true; + editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length); + this.variables.M__ = snippet.matchBefore; + this.variables.T__ = snippet.matchAfter; + this.insertSnippetForSelection(editor, snippet.content); + this.variables.M__ = this.variables.T__ = null; + return true; + }; + SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) { + for (var i = snippetList.length; i--;) { + var s = snippetList[i]; + if (s.startRe && !s.startRe.test(before)) + continue; + if (s.endRe && !s.endRe.test(after)) + continue; + if (!s.startRe && !s.endRe) + continue; + s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; + s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; + s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; + s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; + return s; + } + }; + SnippetManager.prototype.register = function (snippets, scope) { + var snippetMap = this.snippetMap; + var snippetNameMap = this.snippetNameMap; + var self = this; + if (!snippets) + snippets = []; + function wrapRegexp(src) { + if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) + src = "(?:" + src + ")"; + return src || ""; + } + function guardedRegexp(re, guard, opening) { + re = wrapRegexp(re); + guard = wrapRegexp(guard); + if (opening) { + re = guard + re; + if (re && re[re.length - 1] != "$") + re = re + "$"; + } + else { + re = re + guard; + if (re && re[0] != "^") + re = "^" + re; + } + return new RegExp(re); + } + function addSnippet(s) { + if (!s.scope) + s.scope = scope || "_"; + scope = s.scope; + if (!snippetMap[scope]) { + snippetMap[scope] = []; + snippetNameMap[scope] = {}; + } + var map = snippetNameMap[scope]; + if (s.name) { + var old = map[s.name]; + if (old) + self.unregister(old); + map[s.name] = s; + } + snippetMap[scope].push(s); + if (s.prefix) + s.tabTrigger = s.prefix; + if (!s.content && s.body) + s.content = Array.isArray(s.body) ? s.body.join("\n") : s.body; + if (s.tabTrigger && !s.trigger) { + if (!s.guard && /^\w/.test(s.tabTrigger)) + s.guard = "\\b"; + s.trigger = lang.escapeRegExp(s.tabTrigger); + } + if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) + return; + s.startRe = guardedRegexp(s.trigger, s.guard, true); + s.triggerRe = new RegExp(s.trigger); + s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); + s.endTriggerRe = new RegExp(s.endTrigger); + } + if (Array.isArray(snippets)) { + snippets.forEach(addSnippet); + } + else { + Object.keys(snippets).forEach(function (key) { + addSnippet(snippets[key]); + }); + } + this._signal("registerSnippets", { scope: scope }); + }; + SnippetManager.prototype.unregister = function (snippets, scope) { + var snippetMap = this.snippetMap; + var snippetNameMap = this.snippetNameMap; + function removeSnippet(s) { + var nameMap = snippetNameMap[s.scope || scope]; + if (nameMap && nameMap[s.name]) { + delete nameMap[s.name]; + var map = snippetMap[s.scope || scope]; + var i = map && map.indexOf(s); + if (i >= 0) + map.splice(i, 1); + } + } + if (snippets.content) + removeSnippet(snippets); + else if (Array.isArray(snippets)) + snippets.forEach(removeSnippet); + }; + SnippetManager.prototype.parseSnippetFile = function (str) { + str = str.replace(/\r/g, ""); + var list = [], /**@type{Snippet}*/ snippet = {}; + var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; + var m; + while (m = re.exec(str)) { + if (m[1]) { + try { + snippet = JSON.parse(m[1]); + list.push(snippet); + } + catch (e) { } + } + if (m[4]) { + snippet.content = m[4].replace(/^\t/gm, ""); + list.push(snippet); + snippet = {}; + } + else { + var key = m[2], val = m[3]; + if (key == "regex") { + var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; + snippet.guard = guardRe.exec(val)[1]; + snippet.trigger = guardRe.exec(val)[1]; + snippet.endTrigger = guardRe.exec(val)[1]; + snippet.endGuard = guardRe.exec(val)[1]; + } + else if (key == "snippet") { + snippet.tabTrigger = val.match(/^\S*/)[0]; + if (!snippet.name) + snippet.name = val; + } + else if (key) { + snippet[key] = val; + } + } + } + return list; }; - if (indexByIdentifier !== -1) { - stylesInDOM[indexByIdentifier].references++; - stylesInDOM[indexByIdentifier].updater(obj); - } else { - var updater = addElementStyle(obj, options); - options.byIndex = i; - stylesInDOM.splice(i, 0, { - identifier: identifier, - updater: updater, - references: 1 - }); - } - identifiers.push(identifier); - } - return identifiers; -} -function addElementStyle(obj, options) { - var api = options.domAPI(options); - api.update(obj); - var updater = function updater(newObj) { - if (newObj) { - if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) { - return; - } - api.update(obj = newObj); - } else { - api.remove(); - } - }; - return updater; -} -module.exports = function (list, options) { - options = options || {}; - list = list || []; - var lastIdentifiers = modulesToDom(list, options); - return function update(newList) { - newList = newList || []; - for (var i = 0; i < lastIdentifiers.length; i++) { - var identifier = lastIdentifiers[i]; - var index = getIndexByIdentifier(identifier); - stylesInDOM[index].references--; + SnippetManager.prototype.getSnippetByName = function (name, editor) { + var snippetMap = this.snippetNameMap; + var snippet; + this.getActiveScopes(editor).some(function (scope) { + var snippets = snippetMap[scope]; + if (snippets) + snippet = snippets[name]; + return !!snippet; + }, this); + return snippet; + }; + return SnippetManager; +}()); +oop.implement(SnippetManager.prototype, EventEmitter); +var processSnippetText = function (editor, snippetText, options) { + if (options === void 0) { options = {}; } + var cursor = editor.getCursorPosition(); + var line = editor.session.getLine(cursor.row); + var tabString = editor.session.getTabString(); + var indentString = line.match(/^\s*/)[0]; + if (cursor.column < indentString.length) + indentString = indentString.slice(0, cursor.column); + snippetText = snippetText.replace(/\r/g, ""); + var tokens = this.tokenizeTmSnippet(snippetText); + tokens = this.resolveVariables(tokens, editor); + tokens = tokens.map(function (x) { + if (x == "\n" && !options.excludeExtraIndent) + return x + indentString; + if (typeof x == "string") + return x.replace(/\t/g, tabString); + return x; + }); + var tabstops = []; + tokens.forEach(function (p, i) { + if (typeof p != "object") + return; + var id = p.tabstopId; + var ts = tabstops[id]; + if (!ts) { + ts = tabstops[id] = []; + ts.index = id; + ts.value = ""; + ts.parents = {}; + } + if (ts.indexOf(p) !== -1) + return; + if (p.choices && !ts.choices) + ts.choices = p.choices; + ts.push(p); + var i1 = tokens.indexOf(p, i + 1); + if (i1 === -1) + return; + var value = tokens.slice(i + 1, i1); + var isNested = value.some(function (t) { return typeof t === "object"; }); + if (isNested && !ts.value) { + ts.value = value; + } + else if (value.length && (!ts.value || typeof ts.value !== "string")) { + ts.value = value.join(""); + } + }); + tabstops.forEach(function (ts) { ts.length = 0; }); + var expanding = {}; + function copyValue(val) { + var copy = []; + for (var i = 0; i < val.length; i++) { + var p = val[i]; + if (typeof p == "object") { + if (expanding[p.tabstopId]) + continue; + var j = val.lastIndexOf(p, i - 1); + p = copy[j] || { tabstopId: p.tabstopId }; + } + copy[i] = p; + } + return copy; } - var newLastIdentifiers = modulesToDom(newList, options); - for (var _i = 0; _i < lastIdentifiers.length; _i++) { - var _identifier = lastIdentifiers[_i]; - var _index = getIndexByIdentifier(_identifier); - if (stylesInDOM[_index].references === 0) { - stylesInDOM[_index].updater(); - stylesInDOM.splice(_index, 1); - } + for (var i = 0; i < tokens.length; i++) { + var p = tokens[i]; + if (typeof p != "object") + continue; + var id = p.tabstopId; + var ts = tabstops[id]; + var i1 = tokens.indexOf(p, i + 1); + if (expanding[id]) { + if (expanding[id] === p) { + delete expanding[id]; + Object.keys(expanding).forEach(function (parentId) { + ts.parents[parentId] = true; + }); + } + continue; + } + expanding[id] = p; + var value = ts.value; + if (typeof value !== "string") + value = copyValue(value); + else if (p.fmt) + value = this.tmStrFormat(value, p, editor); + tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p)); + if (ts.indexOf(p) === -1) + ts.push(p); } - lastIdentifiers = newLastIdentifiers; - }; + var row = 0, column = 0; + var text = ""; + tokens.forEach(function (t) { + if (typeof t === "string") { + var lines = t.split("\n"); + if (lines.length > 1) { + column = lines[lines.length - 1].length; + row += lines.length - 1; + } + else + column += t.length; + text += t; + } + else if (t) { + if (!t.start) + t.start = { row: row, column: column }; + else + t.end = { row: row, column: column }; + } + }); + return { + text: text, + tabstops: tabstops, + tokens: tokens + }; }; - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js": -/*!********************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***! - \********************************************************************/ -/***/ ((module) => { - -"use strict"; - - -var memo = {}; - -/* istanbul ignore next */ -function getTarget(target) { - if (typeof memo[target] === "undefined") { - var styleTarget = document.querySelector(target); - - // Special case to return head of iframe instead of iframe itself - if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { - try { - // This will throw an exception if access to iframe is blocked - // due to cross-origin restrictions - styleTarget = styleTarget.contentDocument.head; - } catch (e) { - // istanbul ignore next - styleTarget = null; - } +var TabstopManager = /** @class */ (function () { + function TabstopManager(editor) { + this.index = 0; + this.ranges = []; + this.tabstops = []; + if (editor.tabstopManager) + return editor.tabstopManager; + editor.tabstopManager = this; + this.$onChange = this.onChange.bind(this); + this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; + this.$onChangeSession = this.onChangeSession.bind(this); + this.$onAfterExec = this.onAfterExec.bind(this); + this.attach(editor); } - memo[target] = styleTarget; - } - return memo[target]; -} - -/* istanbul ignore next */ -function insertBySelector(insert, style) { - var target = getTarget(insert); - if (!target) { - throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); - } - target.appendChild(style); -} -module.exports = insertBySelector; - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js": -/*!**********************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***! - \**********************************************************************/ -/***/ ((module) => { - -"use strict"; - - -/* istanbul ignore next */ -function insertStyleElement(options) { - var element = document.createElement("style"); - options.setAttributes(element, options.attributes); - options.insert(element, options.options); - return element; -} -module.exports = insertStyleElement; - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js": -/*!**********************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***! - \**********************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -"use strict"; - - -/* istanbul ignore next */ -function setAttributesWithoutAttributes(styleElement) { - var nonce = true ? __webpack_require__.nc : 0; - if (nonce) { - styleElement.setAttribute("nonce", nonce); - } -} -module.exports = setAttributesWithoutAttributes; - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js": -/*!***************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***! - \***************************************************************/ -/***/ ((module) => { - -"use strict"; - - -/* istanbul ignore next */ -function apply(styleElement, options, obj) { - var css = ""; - if (obj.supports) { - css += "@supports (".concat(obj.supports, ") {"); - } - if (obj.media) { - css += "@media ".concat(obj.media, " {"); - } - var needLayer = typeof obj.layer !== "undefined"; - if (needLayer) { - css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {"); - } - css += obj.css; - if (needLayer) { - css += "}"; - } - if (obj.media) { - css += "}"; - } - if (obj.supports) { - css += "}"; - } - var sourceMap = obj.sourceMap; - if (sourceMap && typeof btoa !== "undefined") { - css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); - } - - // For old IE - /* istanbul ignore if */ - options.styleTagTransform(css, styleElement, options.options); -} -function removeStyleElement(styleElement) { - // istanbul ignore if - if (styleElement.parentNode === null) { - return false; - } - styleElement.parentNode.removeChild(styleElement); -} - -/* istanbul ignore next */ -function domAPI(options) { - if (typeof document === "undefined") { - return { - update: function update() {}, - remove: function remove() {} + TabstopManager.prototype.attach = function (editor) { + this.$openTabstops = null; + this.selectedTabstop = null; + this.editor = editor; + this.session = editor.session; + this.editor.on("change", this.$onChange); + this.editor.on("changeSelection", this.$onChangeSelection); + this.editor.on("changeSession", this.$onChangeSession); + this.editor.commands.on("afterExec", this.$onAfterExec); + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + }; + TabstopManager.prototype.detach = function () { + this.tabstops.forEach(this.removeTabstopMarkers, this); + this.ranges.length = 0; + this.tabstops.length = 0; + this.selectedTabstop = null; + this.editor.off("change", this.$onChange); + this.editor.off("changeSelection", this.$onChangeSelection); + this.editor.off("changeSession", this.$onChangeSession); + this.editor.commands.off("afterExec", this.$onAfterExec); + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); + this.editor.tabstopManager = null; + this.session = null; + this.editor = null; + }; + TabstopManager.prototype.onChange = function (delta) { + var isRemove = delta.action[0] == "r"; + var selectedTabstop = this.selectedTabstop || {}; + var parents = selectedTabstop.parents || {}; + var tabstops = this.tabstops.slice(); + for (var i = 0; i < tabstops.length; i++) { + var ts = tabstops[i]; + var active = ts == selectedTabstop || parents[ts.index]; + ts.rangeList.$bias = active ? 0 : 1; + if (delta.action == "remove" && ts !== selectedTabstop) { + var parentActive = ts.parents && ts.parents[selectedTabstop.index]; + var startIndex = ts.rangeList.pointIndex(delta.start, parentActive); + startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1; + var endIndex = ts.rangeList.pointIndex(delta.end, parentActive); + endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1; + var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex); + for (var j = 0; j < toRemove.length; j++) + this.removeRange(toRemove[j]); + } + ts.rangeList.$onChange(delta); + } + var session = this.session; + if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue()) + this.detach(); + }; + TabstopManager.prototype.updateLinkedFields = function () { + var ts = this.selectedTabstop; + if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked) + return; + this.$inChange = true; + var session = this.session; + var text = session.getTextRange(ts.firstNonLinked); + for (var i = 0; i < ts.length; i++) { + var range = ts[i]; + if (!range.linked) + continue; + var original = range.original; + var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor); + session.replace(range, fmt); + } + this.$inChange = false; + }; + TabstopManager.prototype.onAfterExec = function (e) { + if (e.command && !e.command.readOnly) + this.updateLinkedFields(); + }; + TabstopManager.prototype.onChangeSelection = function () { + if (!this.editor) + return; + var lead = this.editor.selection.lead; + var anchor = this.editor.selection.anchor; + var isEmpty = this.editor.selection.isEmpty(); + for (var i = 0; i < this.ranges.length; i++) { + if (this.ranges[i].linked) + continue; + var containsLead = this.ranges[i].contains(lead.row, lead.column); + var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); + if (containsLead && containsAnchor) + return; + } + this.detach(); + }; + TabstopManager.prototype.onChangeSession = function () { + this.detach(); + }; + TabstopManager.prototype.tabNext = function (dir) { + var max = this.tabstops.length; + var index = this.index + (dir || 1); + index = Math.min(Math.max(index, 1), max); + if (index == max) + index = 0; + this.selectTabstop(index); + this.updateTabstopMarkers(); + if (index === 0) { + this.detach(); + } + }; + TabstopManager.prototype.selectTabstop = function (index) { + this.$openTabstops = null; + var ts = this.tabstops[this.index]; + if (ts) + this.addTabstopMarkers(ts); + this.index = index; + ts = this.tabstops[this.index]; + if (!ts || !ts.length) + return; + this.selectedTabstop = ts; + var range = ts.firstNonLinked || ts; + if (ts.choices) + range.cursor = range.start; + if (!this.editor.inVirtualSelectionMode) { + var sel = this.editor.multiSelect; + sel.toSingleRange(range); + for (var i = 0; i < ts.length; i++) { + if (ts.hasLinkedRanges && ts[i].linked) + continue; + sel.addRange(ts[i].clone(), true); + } + } + else { + this.editor.selection.fromOrientedRange(range); + } + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + if (this.selectedTabstop && this.selectedTabstop.choices) + this.editor.execCommand("startAutocomplete", { matches: this.selectedTabstop.choices }); + }; + TabstopManager.prototype.addTabstops = function (tabstops, start, end) { + var useLink = this.useLink || !this.editor.getOption("enableMultiselect"); + if (!this.$openTabstops) + this.$openTabstops = []; + if (!tabstops[0]) { + var p = Range.fromPoints(end, end); + moveRelative(p.start, start); + moveRelative(p.end, start); + tabstops[0] = [p]; + tabstops[0].index = 0; + } + var i = this.index; + var arg = [i + 1, 0]; + var ranges = this.ranges; + var snippetId = this.snippetId = (this.snippetId || 0) + 1; + tabstops.forEach(function (ts, index) { + var dest = this.$openTabstops[index] || ts; + dest.snippetId = snippetId; + for (var i = 0; i < ts.length; i++) { + var p = ts[i]; + var range = Range.fromPoints(p.start, p.end || p.start); + movePoint(range.start, start); + movePoint(range.end, start); + range.original = p; + range.tabstop = dest; + ranges.push(range); + if (dest != ts) + dest.unshift(range); + else + dest[i] = range; + if (p.fmtString || (dest.firstNonLinked && useLink)) { + range.linked = true; + dest.hasLinkedRanges = true; + } + else if (!dest.firstNonLinked) + dest.firstNonLinked = range; + } + if (!dest.firstNonLinked) + dest.hasLinkedRanges = false; + if (dest === ts) { + arg.push(dest); + this.$openTabstops[index] = dest; + } + this.addTabstopMarkers(dest); + dest.rangeList = dest.rangeList || new RangeList(); + dest.rangeList.$bias = 0; + dest.rangeList.addList(dest); + }, this); + if (arg.length > 2) { + if (this.tabstops.length) + arg.push(arg.splice(2, 1)[0]); + this.tabstops.splice.apply(this.tabstops, arg); + } }; - } - var styleElement = options.insertStyleElement(options); - return { - update: function update(obj) { - apply(styleElement, options, obj); + TabstopManager.prototype.addTabstopMarkers = function (ts) { + var session = this.session; + ts.forEach(function (range) { + if (!range.markerId) + range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); + }); + }; + TabstopManager.prototype.removeTabstopMarkers = function (ts) { + var session = this.session; + ts.forEach(function (range) { + session.removeMarker(range.markerId); + range.markerId = null; + }); + }; + TabstopManager.prototype.updateTabstopMarkers = function () { + if (!this.selectedTabstop) + return; + var currentSnippetId = this.selectedTabstop.snippetId; + if (this.selectedTabstop.index === 0) { + currentSnippetId--; + } + this.tabstops.forEach(function (ts) { + if (ts.snippetId === currentSnippetId) + this.addTabstopMarkers(ts); + else + this.removeTabstopMarkers(ts); + }, this); + }; + TabstopManager.prototype.removeRange = function (range) { + var i = range.tabstop.indexOf(range); + if (i != -1) + range.tabstop.splice(i, 1); + i = this.ranges.indexOf(range); + if (i != -1) + this.ranges.splice(i, 1); + i = range.tabstop.rangeList.ranges.indexOf(range); + if (i != -1) + range.tabstop.splice(i, 1); + this.session.removeMarker(range.markerId); + if (!range.tabstop.length) { + i = this.tabstops.indexOf(range.tabstop); + if (i != -1) + this.tabstops.splice(i, 1); + if (!this.tabstops.length) + this.detach(); + } + }; + return TabstopManager; +}()); +TabstopManager.prototype.keyboardHandler = new HashHandler(); +TabstopManager.prototype.keyboardHandler.bindKeys({ + "Tab": function (editor) { + if (exports.snippetManager && exports.snippetManager.expandWithTab(editor)) + return; + editor.tabstopManager.tabNext(1); + editor.renderer.scrollCursorIntoView(); }, - remove: function remove() { - removeStyleElement(styleElement); + "Shift-Tab": function (editor) { + editor.tabstopManager.tabNext(-1); + editor.renderer.scrollCursorIntoView(); + }, + "Esc": function (editor) { + editor.tabstopManager.detach(); } - }; -} -module.exports = domAPI; +}); +var movePoint = function (point, diff) { + if (point.row == 0) + point.column += diff.column; + point.row += diff.row; +}; +var moveRelative = function (point, start) { + if (point.row == start.row) + point.column -= start.column; + point.row -= start.row; +}; +dom.importCssString("\n.ace_snippet-marker {\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n background: rgba(194, 193, 208, 0.09);\n border: 1px dotted rgba(211, 208, 235, 0.62);\n position: absolute;\n}", "snippets.css", false); +exports.snippetManager = new SnippetManager(); +var Editor = require("./editor").Editor; +(function () { + this.insertSnippet = function (content, options) { + return exports.snippetManager.insertSnippet(this, content, options); + }; + this.expandSnippet = function (options) { + return exports.snippetManager.expandWithTab(this, options); + }; +}).call(Editor.prototype); -/***/ }), +}); -/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js": -/*!*********************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***! - \*********************************************************************/ -/***/ ((module) => { +ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/config","ace/lib/useragent"], function(require, exports, module){"use strict"; +var Renderer = require("../virtual_renderer").VirtualRenderer; +var Editor = require("../editor").Editor; +var Range = require("../range").Range; +var event = require("../lib/event"); +var lang = require("../lib/lang"); +var dom = require("../lib/dom"); +var nls = require("../config").nls; +var userAgent = require("./../lib/useragent"); +var getAriaId = function (index) { + return "suggest-aria-id:".concat(index); +}; +var popupAriaRole = userAgent.isSafari ? "menu" : "listbox"; +var optionAriaRole = userAgent.isSafari ? "menuitem" : "option"; +var ariaActiveState = userAgent.isSafari ? "aria-current" : "aria-selected"; +var $singleLineEditor = function (el) { + var renderer = new Renderer(el); + renderer.$maxLines = 4; + var editor = new Editor(renderer); + editor.setHighlightActiveLine(false); + editor.setShowPrintMargin(false); + editor.renderer.setShowGutter(false); + editor.renderer.setHighlightGutterLine(false); + editor.$mouseHandler.$focusTimeout = 0; + editor.$highlightTagPending = true; + return editor; +}; +var AcePopup = /** @class */ (function () { + function AcePopup(parentNode) { + var el = dom.createElement("div"); + var popup = $singleLineEditor(el); + if (parentNode) { + parentNode.appendChild(el); + } + el.style.display = "none"; + popup.renderer.content.style.cursor = "default"; + popup.renderer.setStyle("ace_autocomplete"); + popup.renderer.$textLayer.element.setAttribute("role", popupAriaRole); + popup.renderer.$textLayer.element.setAttribute("aria-roledescription", nls("autocomplete.popup.aria-roledescription", "Autocomplete suggestions")); + popup.renderer.$textLayer.element.setAttribute("aria-label", nls("autocomplete.popup.aria-label", "Autocomplete suggestions")); + popup.renderer.textarea.setAttribute("aria-hidden", "true"); + popup.setOption("displayIndentGuides", false); + popup.setOption("dragDelay", 150); + var noop = function () { }; + popup.focus = noop; + popup.$isFocused = true; + popup.renderer.$cursorLayer.restartTimer = noop; + popup.renderer.$cursorLayer.element.style.opacity = "0"; + popup.renderer.$maxLines = 8; + popup.renderer.$keepTextAreaAtCursor = false; + popup.setHighlightActiveLine(false); + popup.session.highlight(""); + popup.session.$searchHighlight.clazz = "ace_highlight-marker"; + popup.on("mousedown", function (e) { + var pos = e.getDocumentPosition(); + popup.selection.moveToPosition(pos); + selectionMarker.start.row = selectionMarker.end.row = pos.row; + e.stop(); + }); + var lastMouseEvent; + var hoverMarker = new Range(-1, 0, -1, Infinity); + var selectionMarker = new Range(-1, 0, -1, Infinity); + selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine"); + popup.setSelectOnHover = function (val) { + if (!val) { + hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine"); + } + else if (hoverMarker.id) { + popup.session.removeMarker(hoverMarker.id); + hoverMarker.id = null; + } + }; + popup.setSelectOnHover(false); + popup.on("mousemove", function (e) { + if (!lastMouseEvent) { + lastMouseEvent = e; + return; + } + if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) { + return; + } + lastMouseEvent = e; + lastMouseEvent.scrollTop = popup.renderer.scrollTop; + popup.isMouseOver = true; + var row = lastMouseEvent.getDocumentPosition().row; + if (hoverMarker.start.row != row) { + if (!hoverMarker.id) + popup.setRow(row); + setHoverMarker(row); + } + }); + popup.renderer.on("beforeRender", function () { + if (lastMouseEvent && hoverMarker.start.row != -1) { + lastMouseEvent.$pos = null; + var row = lastMouseEvent.getDocumentPosition().row; + if (!hoverMarker.id) + popup.setRow(row); + setHoverMarker(row, true); + } + }); + popup.renderer.on("afterRender", function () { + var t = popup.renderer.$textLayer; + for (var row = t.config.firstRow, l = t.config.lastRow; row <= l; row++) { + var popupRowElement = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]); + popupRowElement.setAttribute("role", optionAriaRole); + popupRowElement.setAttribute("aria-roledescription", nls("autocomplete.popup.item.aria-roledescription", "item")); + popupRowElement.setAttribute("aria-setsize", popup.data.length); + popupRowElement.setAttribute("aria-describedby", "doc-tooltip"); + popupRowElement.setAttribute("aria-posinset", row + 1); + var rowData = popup.getData(row); + if (rowData) { + var ariaLabel = "".concat(rowData.caption || rowData.value).concat(rowData.meta ? ", ".concat(rowData.meta) : ''); + popupRowElement.setAttribute("aria-label", ariaLabel); + } + var highlightedSpans = popupRowElement.querySelectorAll(".ace_completion-highlight"); + highlightedSpans.forEach(function (span) { + span.setAttribute("role", "mark"); + }); + } + }); + popup.renderer.on("afterRender", function () { + var row = popup.getRow(); + var t = popup.renderer.$textLayer; + var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]); + var el = document.activeElement; // Active element is textarea of main editor + if (selected !== popup.selectedNode && popup.selectedNode) { + dom.removeCssClass(popup.selectedNode, "ace_selected"); + popup.selectedNode.removeAttribute(ariaActiveState); + popup.selectedNode.removeAttribute("id"); + } + el.removeAttribute("aria-activedescendant"); + popup.selectedNode = selected; + if (selected) { + var ariaId = getAriaId(row); + dom.addCssClass(selected, "ace_selected"); + selected.id = ariaId; + t.element.setAttribute("aria-activedescendant", ariaId); + el.setAttribute("aria-activedescendant", ariaId); + selected.setAttribute(ariaActiveState, "true"); + } + }); + var hideHoverMarker = function () { setHoverMarker(-1); }; + var setHoverMarker = function (row, suppressRedraw) { + if (row !== hoverMarker.start.row) { + hoverMarker.start.row = hoverMarker.end.row = row; + if (!suppressRedraw) + popup.session._emit("changeBackMarker"); + popup._emit("changeHoverMarker"); + } + }; + popup.getHoveredRow = function () { + return hoverMarker.start.row; + }; + event.addListener(popup.container, "mouseout", function () { + popup.isMouseOver = false; + hideHoverMarker(); + }); + popup.on("hide", hideHoverMarker); + popup.on("changeSelection", hideHoverMarker); + popup.session.doc.getLength = function () { + return popup.data.length; + }; + popup.session.doc.getLine = function (i) { + var data = popup.data[i]; + if (typeof data == "string") + return data; + return (data && data.value) || ""; + }; + var bgTokenizer = popup.session.bgTokenizer; + bgTokenizer.$tokenizeRow = function (row) { + var data = popup.data[row]; + var tokens = []; + if (!data) + return tokens; + if (typeof data == "string") + data = { value: data }; + var caption = data.caption || data.value || data.name; + function addToken(value, className) { + value && tokens.push({ + type: (data.className || "") + (className || ""), + value: value + }); + } + var lower = caption.toLowerCase(); + var filterText = (popup.filterText || "").toLowerCase(); + var lastIndex = 0; + var lastI = 0; + for (var i = 0; i <= filterText.length; i++) { + if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) { + var sub = filterText.slice(lastI, i); + lastI = i; + var index = lower.indexOf(sub, lastIndex); + if (index == -1) + continue; + addToken(caption.slice(lastIndex, index), ""); + lastIndex = index + sub.length; + addToken(caption.slice(index, lastIndex), "completion-highlight"); + } + } + addToken(caption.slice(lastIndex, caption.length), ""); + tokens.push({ type: "completion-spacer", value: " " }); + if (data.meta) + tokens.push({ type: "completion-meta", value: data.meta }); + if (data.message) + tokens.push({ type: "completion-message", value: data.message }); + return tokens; + }; + bgTokenizer.$updateOnChange = noop; + bgTokenizer.start = noop; + popup.session.$computeWidth = function () { + return this.screenWidth = 0; + }; + popup.isOpen = false; + popup.isTopdown = false; + popup.autoSelect = true; + popup.filterText = ""; + popup.isMouseOver = false; + popup.data = []; + popup.setData = function (list, filterText) { + popup.filterText = filterText || ""; + popup.setValue(lang.stringRepeat("\n", list.length), -1); + popup.data = list || []; + popup.setRow(0); + }; + popup.getData = function (row) { + return popup.data[row]; + }; + popup.getRow = function () { + return selectionMarker.start.row; + }; + popup.setRow = function (line) { + line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line)); + if (selectionMarker.start.row != line) { + popup.selection.clearSelection(); + selectionMarker.start.row = selectionMarker.end.row = line || 0; + popup.session._emit("changeBackMarker"); + popup.moveCursorTo(line || 0, 0); + if (popup.isOpen) + popup._signal("select"); + } + }; + popup.on("changeSelection", function () { + if (popup.isOpen) + popup.setRow(popup.selection.lead.row); + popup.renderer.scrollCursorIntoView(); + }); + popup.hide = function () { + this.container.style.display = "none"; + popup.anchorPos = null; + popup.anchor = null; + if (popup.isOpen) { + popup.isOpen = false; + this._signal("hide"); + } + }; + popup.tryShow = function (pos, lineHeight, anchor, forceShow) { + if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor && + popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left && + popup.anchor === anchor) { + return true; + } + var el = this.container; + var scrollBarSize = this.renderer.scrollBar.width || 10; + var screenHeight = window.innerHeight - scrollBarSize; + var screenWidth = window.innerWidth - scrollBarSize; + var renderer = this.renderer; + var maxH = renderer.$maxLines * lineHeight * 1.4; + var dims = { top: 0, bottom: 0, left: 0 }; + var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight; + var spaceAbove = pos.top - 3 * this.$borderSize; + if (!anchor) { + if (spaceAbove <= spaceBelow || spaceBelow >= maxH) { + anchor = "bottom"; + } + else { + anchor = "top"; + } + } + if (anchor === "top") { + dims.bottom = pos.top - this.$borderSize; + dims.top = dims.bottom - maxH; + } + else if (anchor === "bottom") { + dims.top = pos.top + lineHeight + this.$borderSize; + dims.bottom = dims.top + maxH; + } + var fitsX = dims.top >= 0 && dims.bottom <= screenHeight; + if (!forceShow && !fitsX) { + return false; + } + if (!fitsX) { + if (anchor === "top") { + renderer.$maxPixelHeight = spaceAbove; + } + else { + renderer.$maxPixelHeight = spaceBelow; + } + } + else { + renderer.$maxPixelHeight = null; + } + if (anchor === "top") { + el.style.top = ""; + el.style.bottom = (screenHeight + scrollBarSize - dims.bottom) + "px"; + popup.isTopdown = false; + } + else { + el.style.top = dims.top + "px"; + el.style.bottom = ""; + popup.isTopdown = true; + } + el.style.display = ""; + var left = pos.left; + if (left + el.offsetWidth > screenWidth) + left = screenWidth - el.offsetWidth; + el.style.left = left + "px"; + el.style.right = ""; + if (!popup.isOpen) { + popup.isOpen = true; + this._signal("show"); + lastMouseEvent = null; + } + popup.anchorPos = pos; + popup.anchor = anchor; + return true; + }; + popup.show = function (pos, lineHeight, topdownOnly) { + this.tryShow(pos, lineHeight, topdownOnly ? "bottom" : undefined, true); + }; + popup.goTo = function (where) { + var row = this.getRow(); + var max = this.session.getLength() - 1; + switch (where) { + case "up": + row = row <= 0 ? max : row - 1; + break; + case "down": + row = row >= max ? -1 : row + 1; + break; + case "start": + row = 0; + break; + case "end": + row = max; + break; + } + this.setRow(row); + }; + popup.getTextLeftOffset = function () { + return this.$borderSize + this.renderer.$padding + this.$imageSize; + }; + popup.$imageSize = 0; + popup.$borderSize = 1; + return popup; + } + return AcePopup; +}()); +dom.importCssString("\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n background-color: #CAD6FA;\n z-index: 1;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\n background-color: #3a674e;\n}\n.ace_editor.ace_autocomplete .ace_line-hover {\n border: 1px solid #abbffe;\n margin-top: -1px;\n background: rgba(233,233,253,0.4);\n position: absolute;\n z-index: 2;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\n border: 1px solid rgba(109, 150, 13, 0.8);\n background: rgba(58, 103, 78, 0.62);\n}\n.ace_completion-meta {\n opacity: 0.5;\n margin-left: 0.9em;\n}\n.ace_completion-message {\n margin-left: 0.9em;\n color: blue;\n}\n.ace_editor.ace_autocomplete .ace_completion-highlight{\n color: #2d69c7;\n}\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\n color: #93ca12;\n}\n.ace_editor.ace_autocomplete {\n width: 300px;\n z-index: 200000;\n border: 1px lightgray solid;\n position: fixed;\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n line-height: 1.4;\n background: #fefefe;\n color: #111;\n}\n.ace_dark.ace_editor.ace_autocomplete {\n border: 1px #484747 solid;\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\n line-height: 1.4;\n background: #25282c;\n color: #c1c1c1;\n}\n.ace_autocomplete .ace_text-layer {\n width: calc(100% - 8px);\n}\n.ace_autocomplete .ace_line {\n display: flex;\n align-items: center;\n}\n.ace_autocomplete .ace_line > * {\n min-width: 0;\n flex: 0 0 auto;\n}\n.ace_autocomplete .ace_line .ace_ {\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ace_autocomplete .ace_completion-spacer {\n flex: 1;\n}\n.ace_autocomplete.ace_loading:after {\n content: \"\";\n position: absolute;\n top: 0px;\n height: 2px;\n width: 8%;\n background: blue;\n z-index: 100;\n animation: ace_progress 3s infinite linear;\n animation-delay: 300ms;\n transform: translateX(-100%) scaleX(1);\n}\n@keyframes ace_progress {\n 0% { transform: translateX(-100%) scaleX(1) }\n 50% { transform: translateX(625%) scaleX(2) } \n 100% { transform: translateX(1500%) scaleX(3) } \n}\n@media (prefers-reduced-motion) {\n .ace_autocomplete.ace_loading:after {\n transform: translateX(625%) scaleX(2);\n animation: none;\n }\n}\n", "autocompletion.css", false); +exports.AcePopup = AcePopup; +exports.$singleLineEditor = $singleLineEditor; +exports.getAriaId = getAriaId; -"use strict"; +}); + +ace.define("ace/autocomplete/inline_screenreader",["require","exports","module"], function(require, exports, module){"use strict"; +var AceInlineScreenReader = /** @class */ (function () { + function AceInlineScreenReader(editor) { + this.editor = editor; + this.screenReaderDiv = document.createElement("div"); + this.screenReaderDiv.classList.add("ace_screenreader-only"); + this.editor.container.appendChild(this.screenReaderDiv); + } + AceInlineScreenReader.prototype.setScreenReaderContent = function (content) { + if (!this.popup && this.editor.completer && /**@type{import("../autocomplete").Autocomplete}*/ (this.editor.completer).popup) { + this.popup = /**@type{import("../autocomplete").Autocomplete}*/ (this.editor.completer).popup; + this.popup.renderer.on("afterRender", function () { + var row = this.popup.getRow(); + var t = this.popup.renderer.$textLayer; + var selected = t.element.childNodes[row - t.config.firstRow]; + if (selected) { + var idString = "doc-tooltip "; + for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) { + idString += "ace-inline-screenreader-line-".concat(lineIndex, " "); + } + selected.setAttribute("aria-describedby", idString); + } + }.bind(this)); + } + while (this.screenReaderDiv.firstChild) { + this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild); + } + this._lines = content.split(/\r\n|\r|\n/); + var codeElement = this.createCodeBlock(); + this.screenReaderDiv.appendChild(codeElement); + }; + AceInlineScreenReader.prototype.destroy = function () { + this.screenReaderDiv.remove(); + }; + AceInlineScreenReader.prototype.createCodeBlock = function () { + var container = document.createElement("pre"); + container.setAttribute("id", "ace-inline-screenreader"); + for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) { + var codeElement = document.createElement("code"); + codeElement.setAttribute("id", "ace-inline-screenreader-line-".concat(lineIndex)); + var line = document.createTextNode(this._lines[lineIndex]); + codeElement.appendChild(line); + container.appendChild(codeElement); + } + return container; + }; + return AceInlineScreenReader; +}()); +exports.AceInlineScreenReader = AceInlineScreenReader; +}); -/* istanbul ignore next */ -function styleTagTransform(css, styleElement) { - if (styleElement.styleSheet) { - styleElement.styleSheet.cssText = css; - } else { - while (styleElement.firstChild) { - styleElement.removeChild(styleElement.firstChild); +ace.define("ace/autocomplete/inline",["require","exports","module","ace/snippets","ace/autocomplete/inline_screenreader"], function(require, exports, module){"use strict"; +var snippetManager = require("../snippets").snippetManager; +var AceInlineScreenReader = require("./inline_screenreader").AceInlineScreenReader; +var AceInline = /** @class */ (function () { + function AceInline() { + this.editor = null; } - styleElement.appendChild(document.createTextNode(css)); - } -} -module.exports = styleTagTransform; - -/***/ }), - -/***/ "../trial/lib/config.js": -/*!******************************!*\ - !*** ../trial/lib/config.js ***! - \******************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); - + AceInline.prototype.show = function (editor, completion, prefix) { + prefix = prefix || ""; + if (editor && this.editor && this.editor !== editor) { + this.hide(); + this.editor = null; + this.inlineScreenReader = null; + } + if (!editor || !completion) { + return false; + } + if (!this.inlineScreenReader) { + this.inlineScreenReader = new AceInlineScreenReader(editor); + } + var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value; + if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) { + return false; + } + this.editor = editor; + this.inlineScreenReader.setScreenReaderContent(displayText); + displayText = displayText.slice(prefix.length); + if (displayText === "") { + editor.removeGhostText(); + } + else { + editor.setGhostText(displayText); + } + return true; + }; + AceInline.prototype.isOpen = function () { + if (!this.editor) { + return false; + } + return !!this.editor.renderer.$ghostText; + }; + AceInline.prototype.hide = function () { + if (!this.editor) { + return false; + } + this.editor.removeGhostText(); + return true; + }; + AceInline.prototype.destroy = function () { + this.hide(); + this.editor = null; + if (this.inlineScreenReader) { + this.inlineScreenReader.destroy(); + this.inlineScreenReader = null; + } + }; + return AceInline; +}()); +exports.AceInline = AceInline; -/***/ }), +}); -/***/ "../trial/lib/graph.js": -/*!*****************************!*\ - !*** ../trial/lib/graph.js ***! - \*****************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +ace.define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module){"use strict"; +exports.parForEach = function (array, fn, callback) { + var completed = 0; + var arLength = array.length; + if (arLength === 0) + callback(); + for (var i = 0; i < arLength; i++) { + fn(array[i], function (result, err) { + completed++; + if (completed === arLength) + callback(result, err); + }); + } +}; +var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\u2000\u2070-\uFFFF]/; +exports.retrievePrecedingIdentifier = function (text, pos, regex) { + regex = regex || ID_REGEX; + var buf = []; + for (var i = pos - 1; i >= 0; i--) { + if (regex.test(text[i])) + buf.push(text[i]); + else + break; + } + return buf.reverse().join(""); +}; +exports.retrieveFollowingIdentifier = function (text, pos, regex) { + regex = regex || ID_REGEX; + var buf = []; + for (var i = pos; i < text.length; i++) { + if (regex.test(text[i])) + buf.push(text[i]); + else + break; + } + return buf; +}; +exports.getCompletionPrefix = function (editor) { + var pos = editor.getCursorPosition(); + var line = editor.session.getLine(pos.row); + var prefix; + editor.completers.forEach(function (completer) { + if (completer.identifierRegexps) { + completer.identifierRegexps.forEach(function (identifierRegex) { + if (!prefix && identifierRegex) + prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex); + }.bind(this)); + } + }.bind(this)); + return prefix || this.retrievePrecedingIdentifier(line, pos.column); +}; +exports.triggerAutocomplete = function (editor, previousChar) { + var previousChar = previousChar == null + ? editor.session.getPrecedingCharacter() + : previousChar; + return editor.completers.some(function (completer) { + if (completer.triggerCharacters && Array.isArray(completer.triggerCharacters)) { + return completer.triggerCharacters.includes(previousChar); + } + }); +}; -"use strict"; +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TrialGraph = void 0; -__webpack_require__(/*! d3-transition */ "../../node_modules/d3-transition/src/index.js"); -const d3_color_1 = __webpack_require__(/*! d3-color */ "../../node_modules/d3-color/src/index.js"); -const d3_hierarchy_1 = __webpack_require__(/*! d3-hierarchy */ "../../node_modules/d3-hierarchy/src/index.js"); -const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); -const d3_zoom_1 = __webpack_require__(/*! d3-zoom */ "../../node_modules/d3-zoom/src/index.js"); -const fs = __webpack_require__(/*! file-saver */ "../../node_modules/file-saver/dist/FileSaver.min.js"); -const utils_1 = __webpack_require__(/*! @noworkflow/utils */ "../utils/lib/index.js"); -class TrialGraph { - constructor(graphId, div, config = {}, showDiffFunction, nowVisPanel) { - if (showDiffFunction && nowVisPanel) { - this.showDiffFunction = showDiffFunction; - this.nowVisPanel = nowVisPanel; +ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/inline","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/lang","ace/lib/dom","ace/snippets","ace/config","ace/lib/event","ace/lib/scroll"], function(require, exports, module){"use strict"; +var HashHandler = require("./keyboard/hash_handler").HashHandler; +var AcePopup = require("./autocomplete/popup").AcePopup; +var AceInline = require("./autocomplete/inline").AceInline; +var getAriaId = require("./autocomplete/popup").getAriaId; +var util = require("./autocomplete/util"); +var lang = require("./lib/lang"); +var dom = require("./lib/dom"); +var snippetManager = require("./snippets").snippetManager; +var config = require("./config"); +var event = require("./lib/event"); +var preventParentScroll = require("./lib/scroll").preventParentScroll; +var destroyCompleter = function (e, editor) { + editor.completer && editor.completer.destroy(); +}; +var Autocomplete = /** @class */ (function () { + function Autocomplete() { + this.autoInsert = false; + this.autoSelect = true; + this.autoShown = false; + this.exactMatch = false; + this.inlineEnabled = false; + this.keyboardHandler = new HashHandler(); + this.keyboardHandler.bindKeys(this.commands); + this.parentNode = null; + this.setSelectOnHover = false; + this.hasSeen = new Set(); + this.showLoadingState = false; + this.stickySelectionDelay = 500; + this.blurListener = this.blurListener.bind(this); + this.changeListener = this.changeListener.bind(this); + this.mousedownListener = this.mousedownListener.bind(this); + this.mousewheelListener = this.mousewheelListener.bind(this); + this.onLayoutChange = this.onLayoutChange.bind(this); + this.changeTimer = lang.delayedCall(function () { + this.updateCompletions(true); + }.bind(this)); + this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50); + this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50); + this.stickySelectionTimer = lang.delayedCall(function () { + this.stickySelection = true; + }.bind(this), this.stickySelectionDelay); + this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () { + var initialPosition = this.completionProvider && this.completionProvider.initialPosition; + if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0) + return; + this.completions = new FilteredList(Autocomplete.completionsForLoading); + this.openPopup(this.editor, initialPosition.prefix, false); + this.popup.renderer.setStyle("ace_loading", true); + }.bind(this), this.stickySelectionDelay); + } + Object.defineProperty(Autocomplete, "completionsForLoading", { + get: function () { + return [{ + caption: config.nls("autocomplete.loading", "Loading..."), + value: "" + }]; + }, + enumerable: false, + configurable: true + }); + Autocomplete.prototype.$init = function () { + this.popup = new AcePopup(this.parentNode || document.body || document.documentElement); + this.popup.on("click", function (e) { + this.insertMatch(); + e.stop(); + }.bind(this)); + this.popup.focus = this.editor.focus.bind(this.editor); + this.popup.on("show", this.$onPopupShow.bind(this)); + this.popup.on("hide", this.$onHidePopup.bind(this)); + this.popup.on("select", this.$onPopupChange.bind(this)); + event.addListener(this.popup.container, "mouseout", this.mouseOutListener.bind(this)); + this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null)); + this.popup.renderer.on("afterRender", this.$onPopupRender.bind(this)); + return this.popup; + }; + Autocomplete.prototype.$initInline = function () { + if (!this.inlineEnabled || this.inlineRenderer) + return; + this.inlineRenderer = new AceInline(); + return this.inlineRenderer; + }; + Autocomplete.prototype.getPopup = function () { + return this.popup || this.$init(); + }; + Autocomplete.prototype.$onHidePopup = function () { + if (this.inlineRenderer) { + this.inlineRenderer.hide(); + } + this.hideDocTooltip(); + this.stickySelectionTimer.cancel(); + this.popupTimer.cancel(); + this.stickySelection = false; + }; + Autocomplete.prototype.$seen = function (completion) { + if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === "function") { + completion.completer.onSeen(this.editor, completion); + this.hasSeen.add(completion); + } + }; + Autocomplete.prototype.$onPopupChange = function (hide) { + if (this.inlineRenderer && this.inlineEnabled) { + var completion = hide ? null : this.popup.getData(this.popup.getRow()); + this.$updateGhostText(completion); + if (this.popup.isMouseOver && this.setSelectOnHover) { + this.tooltipTimer.call(null, null); + return; + } + this.popupTimer.schedule(); + this.tooltipTimer.schedule(); + } + else { + this.popupTimer.call(null, null); + this.tooltipTimer.call(null, null); + } + }; + Autocomplete.prototype.$updateGhostText = function (completion) { + var row = this.base.row; + var column = this.base.column; + var cursorColumn = this.editor.getCursorPosition().column; + var prefix = this.editor.session.getLine(row).slice(column, cursorColumn); + if (!this.inlineRenderer.show(this.editor, completion, prefix)) { + this.inlineRenderer.hide(); + } + else { + this.$seen(completion); + } + }; + Autocomplete.prototype.$onPopupRender = function () { + var inlineEnabled = this.inlineRenderer && this.inlineEnabled; + if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) { + for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) { + var completion = this.popup.getData(i); + if (completion && (!inlineEnabled || completion.hideInlinePreview)) { + this.$seen(completion); + } + } + } + }; + Autocomplete.prototype.$onPopupShow = function (hide) { + this.$onPopupChange(hide); + this.stickySelection = false; + if (this.stickySelectionDelay >= 0) + this.stickySelectionTimer.schedule(this.stickySelectionDelay); + }; + Autocomplete.prototype.observeLayoutChanges = function () { + if (this.$elements || !this.editor) + return; + window.addEventListener("resize", this.onLayoutChange, { passive: true }); + window.addEventListener("wheel", this.mousewheelListener); + var el = this.editor.container.parentNode; + var elements = []; + while (el) { + elements.push(el); + el.addEventListener("scroll", this.onLayoutChange, { passive: true }); + el = el.parentNode; + } + this.$elements = elements; + }; + Autocomplete.prototype.unObserveLayoutChanges = function () { + var _this = this; + window.removeEventListener("resize", this.onLayoutChange, { passive: true }); + window.removeEventListener("wheel", this.mousewheelListener); + this.$elements && this.$elements.forEach(function (el) { + el.removeEventListener("scroll", _this.onLayoutChange, { passive: true }); + }); + this.$elements = null; + }; + Autocomplete.prototype.onLayoutChange = function () { + if (!this.popup.isOpen) + return this.unObserveLayoutChanges(); + this.$updatePopupPosition(); + this.updateDocTooltip(); + }; + Autocomplete.prototype.$updatePopupPosition = function () { + var editor = this.editor; + var renderer = editor.renderer; + var lineHeight = renderer.layerConfig.lineHeight; + var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); + pos.left -= this.popup.getTextLeftOffset(); + var rect = editor.container.getBoundingClientRect(); + pos.top += rect.top - renderer.layerConfig.offset; + pos.left += rect.left - editor.renderer.scrollLeft; + pos.left += renderer.gutterWidth; + var posGhostText = { + top: pos.top, + left: pos.left + }; + if (renderer.$ghostText && renderer.$ghostTextWidget) { + if (this.base.row === renderer.$ghostText.position.row) { + posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight; + } + } + var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight; + var lowestPosition = editorContainerBottom < posGhostText.top ? + { top: editorContainerBottom, left: posGhostText.left } : + posGhostText; + if (this.popup.tryShow(lowestPosition, lineHeight, "bottom")) { + return; + } + if (this.popup.tryShow(pos, lineHeight, "top")) { + return; + } + this.popup.show(pos, lineHeight); + }; + Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) { + this.$firstOpenTimer.cancel(); + if (!this.popup) + this.$init(); + if (this.inlineEnabled && !this.inlineRenderer) + this.$initInline(); + this.popup.autoSelect = this.autoSelect; + this.popup.setSelectOnHover(this.setSelectOnHover); + var oldRow = this.popup.getRow(); + var previousSelectedItem = this.popup.data[oldRow]; + this.popup.setData(this.completions.filtered, this.completions.filterText); + if (this.editor.textInput.setAriaOptions) { + this.editor.textInput.setAriaOptions({ + activeDescendant: getAriaId(this.popup.getRow()), + inline: this.inlineEnabled + }); + } + editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + var newRow; + if (this.stickySelection) + newRow = this.popup.data.indexOf(previousSelectedItem); + if (!newRow || newRow === -1) + newRow = 0; + this.popup.setRow(this.autoSelect ? newRow : -1); + if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow]) + this.$onPopupChange(); + var inlineEnabled = this.inlineRenderer && this.inlineEnabled; + if (newRow === oldRow && inlineEnabled) { + var completion = this.popup.getData(this.popup.getRow()); + this.$updateGhostText(completion); + } + if (!keepPopupPosition) { + this.popup.setTheme(editor.getTheme()); + this.popup.setFontSize(editor.getFontSize()); + this.$updatePopupPosition(); + if (this.tooltipNode) { + this.updateDocTooltip(); + } + } + this.changeTimer.cancel(); + this.observeLayoutChanges(); + }; + Autocomplete.prototype.detach = function () { + if (this.editor) { + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); + this.editor.off("changeSelection", this.changeListener); + this.editor.off("blur", this.blurListener); + this.editor.off("mousedown", this.mousedownListener); + this.editor.off("mousewheel", this.mousewheelListener); + } + this.$firstOpenTimer.cancel(); + this.changeTimer.cancel(); + this.hideDocTooltip(); + if (this.completionProvider) { + this.completionProvider.detach(); + } + if (this.popup && this.popup.isOpen) + this.popup.hide(); + if (this.popup && this.popup.renderer) { + this.popup.renderer.off("afterRender", this.$onPopupRender); + } + if (this.base) + this.base.detach(); + this.activated = false; + this.completionProvider = this.completions = this.base = null; + this.unObserveLayoutChanges(); + }; + Autocomplete.prototype.changeListener = function (e) { + var cursor = this.editor.selection.lead; + if (cursor.row != this.base.row || cursor.column < this.base.column) { + this.detach(); + } + if (this.activated) + this.changeTimer.schedule(); + else + this.detach(); + }; + Autocomplete.prototype.blurListener = function (e) { + var el = document.activeElement; + var text = this.editor.textInput.getElement(); + var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget); + var container = this.popup && this.popup.container; + if (el != text && el.parentNode != container && !fromTooltip + && el != this.tooltipNode && e.relatedTarget != text) { + this.detach(); + } + }; + Autocomplete.prototype.mousedownListener = function (e) { + this.detach(); + }; + Autocomplete.prototype.mousewheelListener = function (e) { + if (this.popup && !this.popup.isMouseOver) + this.detach(); + }; + Autocomplete.prototype.mouseOutListener = function (e) { + if (this.popup.isOpen) + this.$updatePopupPosition(); + }; + Autocomplete.prototype.goTo = function (where) { + this.popup.goTo(where); + }; + Autocomplete.prototype.insertMatch = function (data, options) { + if (!data) + data = this.popup.getData(this.popup.getRow()); + if (!data) + return false; + if (data.value === "") // Explicitly given nothing to insert, e.g. "No suggestion state" + return this.detach(); + var completions = this.completions; + var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options); + if (this.completions == completions) + this.detach(); + return result; + }; + Autocomplete.prototype.showPopup = function (editor, options) { + if (this.editor) + this.detach(); + this.activated = true; + this.editor = editor; + if (editor.completer != this) { + if (editor.completer) + editor.completer.detach(); + editor.completer = this; } - this.i = 0; - let defaultConfig = { - customSize: function (g) { - return [ - g.config.width, - g.config.height, - ]; - }, - customMouseOver: (g, d) => false, - customMouseOut: (g, d) => false, - customForm: (g, form) => null, - customLoadTooltip: (g, div, text, trialid, aid) => null, - duration: 750, - top: 50, - right: 30, - bottom: 80, - left: 30, - width: 900, - height: 500, - useTooltip: false, - fontSize: 10, - labelFontSize: 10, - nodeSizeX: 47, - nodeSizeY: 100, - queryTooltip: false - }; - this.config = Object.assign({}, defaultConfig, config); - this.graphId = graphId; - this.zoom = (0, d3_zoom_1.zoom)() - .on("zoom", (event) => { - return this.zoomFunction(event); - }) - .on("start", () => (0, d3_selection_1.select)('body').style("cursor", "move")) - .on("end", () => (0, d3_selection_1.select)('body').style("cursor", "auto")) - .wheelDelta(function () { - const e = event; - return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000; - }); - this.div = (0, d3_selection_1.select)(div); - this.form = this.div - .append("form") - .classed("trial-toolbar", true); - this.svg = (0, d3_selection_1.select)(div) - .append("div") - .append("svg") - .attr("width", this.config.width) - .attr("height", this.config.height) - .call(this.zoom); - this.createMarker('end', 'enormal', 'black'); - this.createMarker('endbefore', 'ebefore', 'red'); - this.createMarker('endafter', 'eafter', 'green'); - this.g = this.svg.append("g") - .attr("id", this._graphId()) - .attr("transform", "translate(0,0)") - .classed('TrialGraph', true); - this.tree = (0, d3_hierarchy_1.tree)() - .nodeSize([ - this.config.nodeSizeX, - this.config.nodeSizeY - ]); - // Tooltip - this.tooltipDiv = (0, d3_selection_1.select)("body").append("div") - .attr("class", "now-tooltip now-trial-tooltip") - .style("opacity", 0) - .on("mouseout", () => { - this.closeTooltip(); - }); - // Zoom - this.svg - .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top)); - this.activationStorage = {}; - } - init(data, t1, t2) { - this.t1 = t1; - this.t2 = t2; - // **Toolbar** - this.createToolbar(this.form); - // **Graph** - this.minDuration = data.min_duration; - this.maxDuration = data.max_duration; - this.totalDuration = {}; - this.totalDuration[t1] = this.maxDuration[t1] - this.minDuration[t1]; - this.totalDuration[t2] = this.maxDuration[t2] - this.minDuration[t2]; - this.maxTotalDuration = Math.max(this.totalDuration[t1], this.totalDuration[t2]); - this.colors = data.colors; - if (!data.root) + editor.on("changeSelection", this.changeListener); + editor.on("blur", this.blurListener); + editor.on("mousedown", this.mousedownListener); + editor.on("mousewheel", this.mousewheelListener); + this.updateCompletions(false, options); + }; + Autocomplete.prototype.getCompletionProvider = function (initialPosition) { + if (!this.completionProvider) + this.completionProvider = new CompletionProvider(initialPosition); + return this.completionProvider; + }; + Autocomplete.prototype.gatherCompletions = function (editor, callback) { + return this.getCompletionProvider().gatherCompletions(editor, callback); + }; + Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) { + if (keepPopupPosition && this.base && this.completions) { + var pos = this.editor.getCursorPosition(); + var prefix = this.editor.session.getTextRange({ start: this.base, end: pos }); + if (prefix == this.completions.filterText) + return; + this.completions.setFilter(prefix); + if (!this.completions.filtered.length) + return this.detach(); + if (this.completions.filtered.length == 1 + && this.completions.filtered[0].value == prefix + && !this.completions.filtered[0].snippet) + return this.detach(); + this.openPopup(this.editor, prefix, keepPopupPosition); return; - this.root = (0, d3_hierarchy_1.hierarchy)(data.root, function (d) { return d.children; }); - this.root.x0 = 0; - this.root.y0 = (this.config.width) / 2; - this.alledges = data.edges; - this.update(this.root); - } - createToolbar(form) { - let self = this; - form = form.append("div") - .classed("buttons buttonsGraph", true); - this.config.customForm(this, form); - // Reset zoom - form.append("a") - .classed("toollink", true) - .attr("id", "trial-" + this.graphId + "-restore-zoom") - .attr("href", "#") - .attr("title", "Restore zoom") - .on("click", () => this.restorePosition()) - .append("i") - .classed("fa fa-eye", true); - // Toggle Tooltips - let tooltipsToggle = form.append("input") - .attr("id", "trial-" + this.graphId + "-toolbar-tooltips") - .attr("type", "checkbox") - .attr("name", "trial-toolbar-tooltips") - .attr("value", "show") - .property("checked", this.config.useTooltip) - .on("change", () => { - this.closeTooltip(); - this.config.useTooltip = tooltipsToggle.property("checked"); - }); - form.append("label") - .attr("for", "trial-" + this.graphId + "-toolbar-tooltips") - .attr("title", "Show tooltips on mouse hover") - .append("i") - .classed("fa fa-comment", true); - // Download SVG - form.append("a") - .classed("toollink", true) - .attr("id", "trial-" + this.graphId + "-download") - .attr("href", "#") - .attr("title", "Download graph SVG") - .on("click", () => { - this.download(); - }) - .append("i") - .classed("fa fa-download", true); - // Set Font Size - let fontToggle = form.append("input") - .attr("id", "trial-" + this.graphId + "-toolbar-fonts") - .attr("type", "checkbox") - .attr("name", "trial-toolbar-fonts") - .attr("value", "show") - .property("checked", false) - .on("change", () => { - let display = fontToggle.property("checked") ? "inline-block" : "none"; - fontSize.style("display", display); - labelFontSize.style("display", display); - }); - form.append("label") - .attr("for", "trial-" + this.graphId + "-toolbar-fonts") - .attr("title", "Set font size") - .append("i") - .classed("fa fa-font", true); - let fontSize = form.append("input") - .attr("type", "number") - .attr("value", this.config.fontSize) - .style("width", "50px") - .style("display", "none") - .attr("title", "Node font size") - .on("change", () => { - this.config.fontSize = fontSize.property("value"); - this.svg.selectAll(".node text").attr("font-size", this.config.fontSize); - }); - let labelFontSize = form.append("input") - .attr("type", "number") - .attr("value", this.config.labelFontSize) - .style("width", "50px") - .style("display", "none") - .attr("title", "Arrow font size") - .on("change", () => { - this.config.labelFontSize = labelFontSize.property("value"); - this.svg.selectAll("text.label_text").attr("font-size", this.config.labelFontSize); - }); - // Set distances - let setDistances = function () { - self.config.nodeSizeX = distanceX.property("value"); - self.config.nodeSizeY = distanceY.property("value"); - self.wrapText(); - self.tree - .nodeSize([ - self.config.nodeSizeX, - self.config.nodeSizeY - ]); - self.update(self.root); + } + if (options && options.matches) { + var pos = this.editor.getSelectionRange().start; + this.base = this.editor.session.doc.createAnchor(pos.row, pos.column); + this.base.$insertRight = true; + this.completions = new FilteredList(options.matches); + this.getCompletionProvider().completions = this.completions; + return this.openPopup(this.editor, "", keepPopupPosition); + } + var session = this.editor.getSession(); + var pos = this.editor.getCursorPosition(); + var prefix = util.getCompletionPrefix(this.editor); + this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length); + this.base.$insertRight = true; + var completionOptions = { + exactMatch: this.exactMatch, + ignoreCaption: this.ignoreCaption }; - // Set Distance X - let distanceXToggle = form.append("input") - .attr("id", "trial-" + this.graphId + "-toolbar-distance-x") - .attr("type", "checkbox") - .attr("name", "trial-toolbar-distance-x") - .attr("value", "show") - .property("checked", false) - .on("change", () => { - let display = distanceXToggle.property("checked") ? "inline-block" : "none"; - distanceX.style("display", display); - }); - form.append("label") - .attr("for", "trial-" + this.graphId + "-toolbar-distance-x") - .attr("title", "Set horizontal distance") - .append("i") - .classed("fa fa-arrows-h", true); - let distanceX = form.append("input") - .attr("type", "number") - .attr("value", this.config.nodeSizeX) - .style("width", "65px") - .style("display", "none") - .attr("title", "Node horizontal distance") - .on("change", setDistances); - // Set Distance Y - let distanceYToggle = form.append("input") - .attr("id", "trial-" + this.graphId + "-toolbar-distance-y") - .attr("type", "checkbox") - .attr("name", "trial-toolbar-distance-y") - .attr("value", "show") - .property("checked", false) - .on("change", () => { - let display = distanceYToggle.property("checked") ? "inline-block" : "none"; - distanceY.style("display", display); - }); - form.append("label") - .attr("for", "trial-" + this.graphId + "-toolbar-distance-y") - .attr("title", "Set vertical distance") - .append("i") - .classed("fa fa-arrows-v", true); - let distanceY = form.append("input") - .attr("type", "number") - .attr("value", this.config.nodeSizeY) - .style("width", "65px") - .style("display", "none") - .attr("title", "Node vertical distance") - .on("change", setDistances); - // Submit - form.append("input") - .attr("type", "submit") - .attr("name", "prevent-enter") - .attr("onclick", "return false;") - .style("display", "none"); - } - load(data, t1, t2) { - this.init(data, t1, t2); - this.updateWindow(); - } - restorePosition() { - this.wrapText(); - this.svg - .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top)); - } - updateWindow() { - let size = this.config.customSize(this); - this.config.width = size[0]; - this.config.height = size[1]; - this.svg - .attr("width", size[0]) - .attr("height", size[1]); - } - update(source) { - let treeData = this.tree(this.root); - this.nodes = treeData.descendants(); - var node = this.g.selectAll('g.node') - .data(this.nodes, (d) => { return d.id || (d.id = ++this.i); }); - let validNodes = {}; - this.nodes.forEach((node) => { - validNodes[node.data.index] = node; - }); - var edges = this.alledges.filter((edge) => { - let source = validNodes[edge.source]; - let target = validNodes[edge.target]; - if (source == undefined || target == undefined) { - return false; + this.getCompletionProvider({ + prefix: prefix, + pos: pos + }).provideCompletions(this.editor, completionOptions, + function (err, completions, finished) { + var filtered = completions.filtered; + var prefix = util.getCompletionPrefix(this.editor); + this.$firstOpenTimer.cancel(); + if (finished) { + if (!filtered.length) { + var emptyMessage = !this.autoShown && this.emptyMessage; + if (typeof emptyMessage == "function") + emptyMessage = this.emptyMessage(prefix); + if (emptyMessage) { + var completionsForEmpty = [{ + caption: emptyMessage, + value: "" + } + ]; + this.completions = new FilteredList(completionsForEmpty); + this.openPopup(this.editor, prefix, keepPopupPosition); + this.popup.renderer.setStyle("ace_loading", false); + this.popup.renderer.setStyle("ace_empty-message", true); + return; + } + return this.detach(); + } + if (filtered.length == 1 && filtered[0].value == prefix + && !filtered[0].snippet) + return this.detach(); + if (this.autoInsert && !this.autoShown && filtered.length == 1) + return this.insertMatch(filtered[0]); } - return true; - }).map((edge) => { - let source = validNodes[edge.source]; - let target = validNodes[edge.target]; - var copy = Object.assign({}, edge); - copy.id = edge.source + "-" + edge.target; - copy.source = source; - copy.target = target; - return copy; - }); - this.updateNodes(source, node); - this.updateLinks(source, edges); - this.updateLinkLabels(edges); - // Store old positions for transition - this.nodes.forEach(function (d, i) { - d.x0 = d.x; - d.y0 = d.y; - }); - this.wrapText(); - } - download(name) { - var isFileSaverSupported = false; - try { - isFileSaverSupported = !!new Blob(); + this.completions = !finished && this.showLoadingState ? + new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) : + completions; + this.openPopup(this.editor, prefix, keepPopupPosition); + this.popup.renderer.setStyle("ace_empty-message", false); + this.popup.renderer.setStyle("ace_loading", !finished); + }.bind(this)); + if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) { + this.$firstOpenTimer.delay(this.stickySelectionDelay / 2); } - catch (e) { - alert("blob not supported"); + }; + Autocomplete.prototype.cancelContextMenu = function () { + this.editor.$mouseHandler.cancelContextMenu(); + }; + Autocomplete.prototype.updateDocTooltip = function () { + var popup = this.popup; + var all = this.completions && this.completions.filtered; + var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]); + var doc = null; + if (!selected || !this.editor || !this.popup.isOpen) + return this.hideDocTooltip(); + var completersLength = this.editor.completers.length; + for (var i = 0; i < completersLength; i++) { + var completer = this.editor.completers[i]; + if (completer.getDocTooltip && selected.completerId === completer.id) { + doc = completer.getDocTooltip(selected); + break; + } } - name = (name === undefined) ? "trial.svg" : name; - let gnode = this.g.node(); - var bbox = gnode.getBBox(); - var width = this.svg.attr("width"), height = this.svg.attr("height"); - this.g.attr("transform", "translate(" + (-bbox.x + 5) + ", " + (-bbox.y + 5) + ")"); - let svgNode = this.svg - .attr("title", "Trial") - .attr("version", 1.1) - .attr("width", bbox.width + 10) - .attr("height", bbox.height + 10) - .attr("xmlns", "http://www.w3.org/2000/svg") - .node(); - var html = svgNode.parentNode.innerHTML; - html = ' 1 || activations[trial_ids[1]].length > 1); - let modal; - let modalBody; - let button; - if (showModal) { - modal = (0, d3_selection_1.select)(document.getElementById("main")) - .append("div").classed("modal fade show", true) - .attr("id", "functionDiffModal") - .attr("tabindex", "-1") - .attr("role", "dialog") - .attr("aria-labelledby", "functionDiffModalLabel") - .style("display", "none") - .attr("aria-hidden", "false") - .style("display", "block"); - let modalDialog = modal.append("div").classed("modal-dialog", true).attr("role", "document"); - let modalContent = modalDialog.append("div").classed("modal-content", true); - let modalHeader = modalContent.append("div").classed("modal-header", true); - modalHeader.append("h5").classed("modal-title", true).attr("id", "functionDiffModalLabel").text("Select a function activation: "); - modalHeader.append("button").classed("close", true).attr("data-dismiss", "modal").attr("aria-label", "Close") - .append("span").attr("aria-hidden", "true").html("×").on("click", () => modal.remove()); - modalBody = modalContent.append("div").classed("modal-body", true); - modalBody.append("p").text("This function was called multipled times. Select the activations you want to see their diff").style("font-weight", "bold"); - button = modalContent.append("div").classed("modal-footer", true).append("button").classed("btn btn-primary", true).text("Confirm"); + var theme = this.editor.renderer.theme; + this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " + + (theme.isDark ? "ace_dark " : "") + (theme.cssClass || ""); + var tooltipNode = this.tooltipNode; + if (item.docHTML) { + tooltipNode.innerHTML = item.docHTML; + } + else if (item.docText) { + tooltipNode.textContent = item.docText; + } + if (!tooltipNode.parentNode) + this.popup.container.appendChild(this.tooltipNode); + var popup = this.popup; + var rect = popup.container.getBoundingClientRect(); + var targetWidth = 400; + var targetHeight = 300; + var scrollBarSize = popup.renderer.scrollBar.width || 10; + var leftSize = rect.left; + var rightSize = window.innerWidth - rect.right - scrollBarSize; + var topSize = popup.isTopdown ? rect.top : window.innerHeight - scrollBarSize - rect.bottom; + var scores = [ + Math.min(rightSize / targetWidth, 1), + Math.min(leftSize / targetWidth, 1), + Math.min(topSize / targetHeight * 0.9), + ]; + var max = Math.max.apply(Math, scores); + var tooltipStyle = tooltipNode.style; + tooltipStyle.display = "block"; + if (max == scores[0]) { + tooltipStyle.left = (rect.right + 1) + "px"; + tooltipStyle.right = ""; + tooltipStyle.maxWidth = targetWidth * max + "px"; + tooltipStyle.top = rect.top + "px"; + tooltipStyle.bottom = ""; + tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + "px"; + } + else if (max == scores[1]) { + tooltipStyle.right = window.innerWidth - rect.left + "px"; + tooltipStyle.left = ""; + tooltipStyle.maxWidth = targetWidth * max + "px"; + tooltipStyle.top = rect.top + "px"; + tooltipStyle.bottom = ""; + tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + "px"; } - let compareFunctionCallsUrl = "commands/diff"; - let windowLabel = "Diff"; - for (let i = 0; i < trial_ids.length; i++) { - let trial = trial_ids[i]; - if (showModal) { - let trialNumber = i == 0 ? "first" : "second"; - modalBody.append("span").text("Select the " + trialNumber + " trial activation: "); - let select = modalBody.append("select").classed("form-select", true).attr("arial-label", "functionTrial" + trial).attr("id", "functionTrial" + trial); - for (let activation in activations[trial]) { - fetch("/diff/getFunctionActivationArguments/" + trial + "/" + activations[trial][activation], { - method: 'GET', // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - }, - }).then((response) => { - response.json().then((json) => { - select.append("option").attr("value", activations[trial][activation]).text(activations[trial][activation] + " params: " + json.function_params.toString()); - }); - }); - } - modalBody.append("br"); + else if (max == scores[2]) { + tooltipStyle.left = window.innerWidth - rect.left + "px"; + tooltipStyle.maxWidth = Math.min(targetWidth, window.innerWidth) + "px"; + if (popup.isTopdown) { + tooltipStyle.top = rect.bottom + "px"; + tooltipStyle.left = rect.left + "px"; + tooltipStyle.right = ""; + tooltipStyle.bottom = ""; + tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.bottom, targetHeight) + "px"; } else { - if (compareFunctionCallsUrl.length > 0) - compareFunctionCallsUrl += "/"; - compareFunctionCallsUrl += trial + "/"; - compareFunctionCallsUrl += activations[trial]; - windowLabel += " trial " + trial + " activation_id " + activations[trial]; + tooltipStyle.top = popup.container.offsetTop - tooltipNode.offsetHeight + "px"; + tooltipStyle.left = rect.left + "px"; + tooltipStyle.right = ""; + tooltipStyle.bottom = ""; + tooltipStyle.maxHeight = Math.min(popup.container.offsetTop, targetHeight) + "px"; } } - if (showModal) { - button === null || button === void 0 ? void 0 : button.on("click", () => { - let firstTrialActivation = document.getElementById("functionTrial" + trial_ids[0]).selectedOptions[0].value; - let secondTrialActivation = document.getElementById("functionTrial" + trial_ids[1]).selectedOptions[0].value; - compareFunctionCallsUrl += "/" + trial_ids[0] + "/" + firstTrialActivation + "/" + trial_ids[1] + "/" + secondTrialActivation; - windowLabel += " trial " + trial_ids[0] + " activation_id " + firstTrialActivation + " trial " + trial_ids[1] + " activation_id " + secondTrialActivation; - makeRequest(this.showDiffFunction, this.nowVisPanel); - modal.remove(); - }); - } - else { - makeRequest(this.showDiffFunction, this.nowVisPanel); - } - function makeRequest(showDiffFunction, nowVisPanel) { - fetch(compareFunctionCallsUrl, { - method: 'GET', // *GET, POST, PUT, DELETE, etc. - headers: { - 'Content-Type': 'application/json' - }, - }).then((response) => { - response.json().then((json) => { - if (showDiffFunction) - showDiffFunction(json, windowLabel, nowVisPanel); - }); - }); - } - } - closeTooltip() { - this.tooltipDiv.transition() - .duration(500) - .style("opacity", 0); - this.tooltipDiv.classed("hidden", true); - } - showTooltip(event, d, trial_id) { - var self = this; - this.tooltipDiv.classed("hidden", false); - this.tooltipDiv.transition() - .duration(200) - .style("opacity", 0.9); - if (this.config.queryTooltip) { - var string = d.tooltip[trial_id]; - var regexp = (/T(.*) - (\d*)
          Line \d*?
          /g); - var match = regexp.exec(string); - this.tooltipDiv.html("") - .style("left", (event.pageX - 3) + "px") - .style("top", (event.pageY - 28) + "px"); - while (match != null) { - var div = document.createElement("div"); - //var div2 = document.createElement("div"); - this.tooltipDiv.append(() => div); - //this.tooltipDiv.append(() => div2); - var aid = match[2]; - if (aid in self.activationStorage) { - this.updateTooltipDiv(aid, div); - } - else { - self.config.customLoadTooltip(self, div, match[0], match[1], match[2]); - } - match = regexp.exec(string); + }; + Autocomplete.prototype.hideDocTooltip = function () { + this.tooltipTimer.cancel(); + if (!this.tooltipNode) + return; + var el = this.tooltipNode; + if (!this.editor.isFocused() && document.activeElement == el) + this.editor.focus(); + this.tooltipNode = null; + if (el.parentNode) + el.parentNode.removeChild(el); + }; + Autocomplete.prototype.onTooltipClick = function (e) { + var a = e.target; + while (a && a != this.tooltipNode) { + if (a.nodeName == "A" && a.href) { + a.rel = "noreferrer"; + a.target = "_blank"; + break; } + a = a.parentNode; } - else { - this.tooltipDiv.html(d.tooltip[trial_id]) - .style("left", (event.pageX - 3) + "px") - .style("top", (event.pageY - 28) + "px"); + }; + Autocomplete.prototype.destroy = function () { + this.detach(); + if (this.popup) { + this.popup.destroy(); + var el = this.popup.container; + if (el && el.parentNode) + el.parentNode.removeChild(el); } - } - updateTooltipDiv(activationId, div) { - var data = this.activationStorage[activationId]; - var title = data.id + " - " + data.name; - if (data.hash != "") { - title = '' + title + ""; + if (this.editor && this.editor.completer == this) { + this.editor.off("destroy", destroyCompleter); + this.editor.completer = null; } - var result = [ - ' ' + title + '', - ' Line: ' + data.line + "", - ' Start: ' + data.start + "", - ' Finish: ' + data.finish + "", - ' Duration: ' + data.duration + "ns", - ' Return: ' + data.return_value + "", - ]; - // ToDo: parameters and globals - div.outerHTML = result.join("
          ") + "

          "; - } - createMarker(name, cls, fill) { - this.svg.append("svg:defs").selectAll("marker") - .data([name]) - .enter().append("svg:marker") - .attr("id", this.graphId + "-" + name) - .attr("viewBox", "0 -5 10 10") - .attr("refX", 10) - .attr("refY", 0) - .attr("markerWidth", 6) - .attr("markerHeight", 6) - .attr("orient", "auto") - .append("svg:path") - .classed(cls, true) - .attr("fill", fill) - .attr("d", "M0,-5L10,0L0,5"); - } - defaultNodeStroke(d) { - let color = this.colors[d.data.trial_ids[0]]; - if (d.data.trial_ids.length > 1 || color == 0) { - return "#000"; + this.inlineRenderer = this.popup = this.editor = null; + }; + Autocomplete.for = function (editor) { + if (editor.completer instanceof Autocomplete) { + return editor.completer; } - if (color == 1) { - return "red"; + if (editor.completer) { + editor.completer.destroy(); + editor.completer = null; } - return "green"; - } - nodeClick(d) { - if (d.children) { - d._children = d.children; - delete d.children; + if (config.get("sharedPopups")) { + if (!Autocomplete["$sharedInstance"]) + Autocomplete["$sharedInstance"] = new Autocomplete(); + editor.completer = Autocomplete["$sharedInstance"]; } else { - d.children = d._children; - delete d._children; + editor.completer = new Autocomplete(); + editor.once("destroy", destroyCompleter); } - this.update(d); + return editor.completer; + }; + return Autocomplete; +}()); +Autocomplete.prototype.commands = { + "Up": function (editor) { editor.completer.goTo("up"); }, + "Down": function (editor) { editor.completer.goTo("down"); }, + "Ctrl-Up|Ctrl-Home": function (editor) { editor.completer.goTo("start"); }, + "Ctrl-Down|Ctrl-End": function (editor) { editor.completer.goTo("end"); }, + "Esc": function (editor) { editor.completer.detach(); }, + "Return": function (editor) { return editor.completer.insertMatch(); }, + "Shift-Return": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); }, + "Tab": function (editor) { + var result = editor.completer.insertMatch(); + if (!result && !editor.tabstopManager) + editor.completer.goTo("down"); + else + return result; + }, + "Backspace": function (editor) { + editor.execCommand("backspace"); + var prefix = util.getCompletionPrefix(editor); + if (!prefix && editor.completer) + editor.completer.detach(); + }, + "PageUp": function (editor) { editor.completer.popup.gotoPageUp(); }, + "PageDown": function (editor) { editor.completer.popup.gotoPageDown(); } +}; +Autocomplete.startCommand = { + name: "startAutocomplete", + exec: function (editor, options) { + var completer = Autocomplete.for(editor); + completer.autoInsert = false; + completer.autoSelect = true; + completer.autoShown = false; + completer.showPopup(editor, options); + completer.cancelContextMenu(); + }, + bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space" +}; +var CompletionProvider = /** @class */ (function () { + function CompletionProvider(initialPosition) { + this.initialPosition = initialPosition; + this.active = true; } - updateNodes(source, node) { - let self = this; - var nodeEnter = node.enter().append('g') - .attr("id", (d) => { - return "node-" + this.graphId + "-" + d.data.index; - }) - .attr('class', 'node') - .attr("cursor", "pointer") - .attr('transform', (d) => { - return "translate(" + source.x + "," + source.y + ")"; - }) - .on('click', (event, d) => { - let activations = d.data.activations; - if (event.ctrlKey && Object.keys(activations).length > 1) { - self.getFunctionDiff(activations, d.data.trial_ids); - } - else { - this.nodeClick(d); + CompletionProvider.prototype.insertByIndex = function (editor, index, options) { + if (!this.completions || !this.completions.filtered) { + return false; + } + return this.insertMatch(editor, this.completions.filtered[index], options); + }; + CompletionProvider.prototype.insertMatch = function (editor, data, options) { + if (!data) + return false; + editor.startOperation({ command: { name: "insertMatch" } }); + if (data.completer && data.completer.insertMatch) { + data.completer.insertMatch(editor, data); + } + else { + if (!this.completions) + return false; + var replaceBefore = this.completions.filterText.length; + var replaceAfter = 0; + if (data.range && data.range.start.row === data.range.end.row) { + replaceBefore -= this.initialPosition.prefix.length; + replaceBefore += this.initialPosition.pos.column - data.range.start.column; + replaceAfter += data.range.end.column - this.initialPosition.pos.column; } - }) - .on('mouseover', function (event, d) { - if (self.config.useTooltip) { - self.closeTooltip(); - if ((0, d3_selection_1.pointers)(event)[0][0] < 10) { - self.showTooltip(event, d.data, self.t1); + if (replaceBefore || replaceAfter) { + var ranges; + if (editor.selection.getAllRanges) { + ranges = editor.selection.getAllRanges(); } else { - self.showTooltip(event, d.data, self.t2); + ranges = [editor.getSelectionRange()]; + } + for (var i = 0, range; range = ranges[i]; i++) { + range.start.column -= replaceBefore; + range.end.column += replaceAfter; + editor.session.remove(range); } } - self.config.customMouseOver(self, d); - return false; - }).on('mouseout', function (event, d) { - self.config.customMouseOut(self, d); - }); - /* nodeEnter.attr("activations_ids", (d:VisibleTrialNode)=>{ - let activations = d.data.activations; - let attrValue = ""; - for(let trial in activations){ - if(attrValue.length > 0) attrValue+= "/"; - attrValue += trial + "/"; - attrValue += activations[trial]; - } - return attrValue; - }); */ - // Circle for new nodes - nodeEnter.append('rect') - .attr('class', 'node') - .attr('rx', 1e-6) - .attr('ry', 1e-6) - .attr('width', 1e-6) - .attr('height', 1e-6) - .attr("stroke", (d) => this.defaultNodeStroke(d)) - .attr("stroke-width", "3px") - .attr("fill", (d) => { - if (d.data.trial_ids.length == 1) { - return this.calculateColor(d.data, this.t1); - } - var grad = this.svg.append("svg:defs") - .append("linearGradient") - .attr("id", "grad-" + this.graphId + "-" + d.data.index) - .attr("x1", "100%") - .attr("x2", "0%") - .attr("y1", "0%") - .attr("y2", "0%"); - grad.append("stop") - .attr("offset", "50%") - .attr("stop-color", this.calculateColor(d.data, this.t2)); - grad.append("stop") - .attr("offset", "50%") - .attr("stop-color", this.calculateColor(d.data, this.t1)); - return "url(#grad-" + this.graphId + "-" + d.data.index + ")"; - }); - // Text for new nodes - nodeEnter.append('text') - .attr("dy", ".35em") - .attr("font-family", "sans-serif") - .attr("font-size", this.config.fontSize + "px") - .attr("pointer-events", "none") - .attr("fill", "#000") - .attr("y", 24) - .attr("x", 10) - .attr("text-anchor", "middle") - .each(function (d) { - const textLabel = (0, d3_selection_1.select)(this); - const name = d.data.name.split('
          '); - if (name.length > 1) { - textLabel.append("tspan") - .attr("x", "10") - .attr("dy", ".35em") - .attr("font-weight", "bold") - .text(name[0]); - textLabel.append("tspan") - .attr("x", "10") - .attr("dy", "1em") - .text(name[1]); - textLabel.attr("class", "nowrap"); + if (data.snippet) { + snippetManager.insertSnippet(editor, data.snippet); } else { - return textLabel.text(d.data.name); - } - }); - nodeEnter.append("path") - .attr("stroke", "#000") - .attr("d", function (d) { - if (d.data.trial_ids.length > 1) { - return "M10," + 0 + - "L10," + 20; + this.$insertString(editor, data); } - return "M0,0L0,0"; - }); - // Update - var nodeUpdate = nodeEnter.merge(node); - // Transition to proper position - nodeUpdate.transition() - .duration(this.config.duration) - .attr("transform", (d) => { - let color = this.colors[d.data.trial_ids[0]]; - d.dy = 0; - if (color == 1) { - d.dy = -40; + if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == "function") { + data.completer.onInsert(editor, data); } - else if (color == 2) { - d.dy = 40; + if (data.command && data.command === "startAutocomplete") { + editor.execCommand(data.command); } - return "translate(" + (d.x - 10) + "," + (d.y + d.dy - 10) + ")"; + } + editor.endOperation(); + return true; + }; + CompletionProvider.prototype.$insertString = function (editor, data) { + var text = data.value || data; + editor.execCommand("insertstring", text); + }; + CompletionProvider.prototype.gatherCompletions = function (editor, callback) { + var session = editor.getSession(); + var pos = editor.getCursorPosition(); + var prefix = util.getCompletionPrefix(editor); + var matches = []; + this.completers = editor.completers; + var total = editor.completers.length; + editor.completers.forEach(function (completer, i) { + completer.getCompletions(editor, session, pos, prefix, function (err, results) { + if (completer.hideInlinePreview) + results = results.map(function (result) { + return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview }); + }); + if (!err && results) + matches = matches.concat(results); + callback(null, { + prefix: util.getCompletionPrefix(editor), + matches: matches, + finished: (--total === 0) + }); + }); }); - // Update the node attributes and style - nodeUpdate.select('rect.node') - .attr('width', 20) - .attr('height', 20) - .attr('rx', 20) - .attr('ry', 20) - .attr("rx", (d) => { - return d._children ? 0 : 20; - }) - .attr("ry", (d) => { - return d._children ? 0 : 20; - }) - .attr('cursor', 'pointer'); - // Remove exiting nodes - var nodeExit = node.exit().transition() - .duration(this.config.duration) - .attr("transform", function (d) { - return "translate(" + source.x + "," + source.y + ")"; - }) - .remove(); - // Reduce node rects size to 0 on exit - nodeExit.select('rect') - .attr('rx', 1e-6) - .attr('ry', 1e-6) - .attr('width', 1e-6) - .attr('height', 1e-6); - // Reduce opacity of labels on exit - nodeExit.select('text') - .style('fill-opacity', 1e-6); - } - updateLinks(source, edges) { - var link = this.g.selectAll('path.link') - .data(edges, (d) => d.id); - // Enter any new links at the parent's previous position. - var linkEnter = link.enter().insert('path', "g") - .attr("class", "link") - .attr("id", (d, i) => { - return "pathId-" + this.graphId + "-" + d.id; - }) - .attr("fill", "none") - .attr("stroke-width", "1.5px") - .attr('d', (d) => { - var o = { y: source.y0, x: source.x0 }; - if (d.source.dy == undefined) { - d.source.dy = 0; - } - if (d.target.dy == undefined) { - d.target.dy = 0; - } - let ox = source.x0 || 0, oy = source.y0 || 0, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1; - if (d.type === 'initial' || d.type === 'call' || d.type == 'return') { - // Initial - return (0, utils_1.diagonal)(o, o); - } - else if (dx === 0 && dy === 0) { - // Loop - return `M ${ox}, ${oy} - A 15,20 - -45,1,1 - ${ox + 5},${oy + 8}`; - } - //return diagonal(d.source, d.target); - return (0, utils_1.diagonal)(o, o); - }) - .attr("marker-end", (d) => { - let count = 0; - for (let trial_id in d.count) { - if (trial_id == this.t1.toString()) { - count += 1; - } - if (trial_id == this.t2.toString()) { - count += 2; - } + return true; + }; + CompletionProvider.prototype.provideCompletions = function (editor, options, callback) { + var processResults = function (results) { + var prefix = results.prefix; + var matches = results.matches; + this.completions = new FilteredList(matches); + if (options.exactMatch) + this.completions.exactMatch = true; + if (options.ignoreCaption) + this.completions.ignoreCaption = true; + this.completions.setFilter(prefix); + if (results.finished || this.completions.filtered.length) + callback(null, this.completions, results.finished); + }.bind(this); + var isImmediate = true; + var immediateResults = null; + this.gatherCompletions(editor, function (err, results) { + if (!this.active) { + return; } - if (count == 0 || count == 3) { // Single trial or diff - return "url(#" + this.graphId + "-end)"; + if (err) { + callback(err, [], true); + this.detach(); } - if (count == 1) { // First trial - return "url(#" + this.graphId + "-endbefore)"; + var prefix = results.prefix; + if (prefix.indexOf(results.prefix) !== 0) + return; + if (isImmediate) { + immediateResults = results; + return; } - if (count == 2) { // Second trial - return "url(#" + this.graphId + "-endafter)"; + processResults(results); + }.bind(this)); + isImmediate = false; + if (immediateResults) { + var results = immediateResults; + immediateResults = null; + processResults(results); + } + }; + CompletionProvider.prototype.detach = function () { + this.active = false; + this.completers && this.completers.forEach(function (completer) { + if (typeof completer.cancel === "function") { + completer.cancel(); } - return ""; - }) - .attr('stroke', (d) => { - if (d.type === 'sequence') { - return '#07F'; + }); + }; + return CompletionProvider; +}()); +var FilteredList = /** @class */ (function () { + function FilteredList(array, filterText) { + this.all = array; + this.filtered = array; + this.filterText = filterText || ""; + this.exactMatch = false; + this.ignoreCaption = false; + } + FilteredList.prototype.setFilter = function (str) { + if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) + var matches = this.filtered; + else + var matches = this.all; + this.filterText = str; + matches = this.filterCompletions(matches, this.filterText); + matches = matches.sort(function (a, b) { + return b.exactMatch - a.exactMatch || b.$score - a.$score + || (a.caption || a.value).localeCompare(b.caption || b.value); + }); + var prev = null; + matches = matches.filter(function (item) { + var caption = item.snippet || item.caption || item.value; + if (caption === prev) + return false; + prev = caption; + return true; + }); + this.filtered = matches; + }; + FilteredList.prototype.filterCompletions = function (items, needle) { + var results = []; + var upper = needle.toUpperCase(); + var lower = needle.toLowerCase(); + loop: for (var i = 0, item; item = items[i]; i++) { + if (item.skipFilter) { + item.$score = item.score; + results.push(item); + continue; } - return '#666'; - }) - .attr('stroke-dasharray', (d) => { - if (d.type === 'return') { - return '10,2'; + var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet; + if (!caption) + continue; + var lastIndex = -1; + var matchMask = 0; + var penalty = 0; + var index, distance; + if (this.exactMatch) { + if (needle !== caption.substr(0, needle.length)) + continue loop; } - return 'none'; + else { + var fullMatchIndex = caption.toLowerCase().indexOf(lower); + if (fullMatchIndex > -1) { + penalty = fullMatchIndex; + } + else { + for (var j = 0; j < needle.length; j++) { + var i1 = caption.indexOf(lower[j], lastIndex + 1); + var i2 = caption.indexOf(upper[j], lastIndex + 1); + index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2; + if (index < 0) + continue loop; + distance = index - lastIndex - 1; + if (distance > 0) { + if (lastIndex === -1) + penalty += 10; + penalty += distance; + matchMask = matchMask | (1 << j); + } + lastIndex = index; + } + } + } + item.matchMask = matchMask; + item.exactMatch = penalty ? 0 : 1; + item.$score = (item.score || 0) - penalty; + results.push(item); + } + return results; + }; + return FilteredList; +}()); +exports.Autocomplete = Autocomplete; +exports.CompletionProvider = CompletionProvider; +exports.FilteredList = FilteredList; + +}); + +ace.define("ace/marker_group",["require","exports","module"], function(require, exports, module){"use strict"; +var MarkerGroup = /** @class */ (function () { + function MarkerGroup(session, options) { + if (options) + this.markerType = options.markerType; + this.markers = []; + this.session = session; + session.addDynamicMarker(this); + } + MarkerGroup.prototype.getMarkerAtPosition = function (pos) { + return this.markers.find(function (marker) { + return marker.range.contains(pos.row, pos.column); }); - // UPDATE - var linkUpdate = linkEnter.merge(link); - // Transition back to the parent element position - linkUpdate.transition() - .duration(this.config.duration) - .attr('d', (d) => { - if (d.source.dy == undefined) { - d.source.dy = 0; + }; + MarkerGroup.prototype.markersComparator = function (a, b) { + return a.range.start.row - b.range.start.row; + }; + MarkerGroup.prototype.setMarkers = function (markers) { + this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS); + this.session._signal("changeBackMarker"); + }; + MarkerGroup.prototype.update = function (html, markerLayer, session, config) { + if (!this.markers || !this.markers.length) + return; + var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow; + var foldLine; + var markersOnOneLine = 0; + var lastRow = 0; + for (var i = 0; i < this.markers.length; i++) { + var marker = this.markers[i]; + if (marker.range.end.row < visibleRangeStartRow) + continue; + if (marker.range.start.row > visibleRangeEndRow) + continue; + if (marker.range.start.row === lastRow) { + markersOnOneLine++; } - if (d.target.dy == undefined) { - d.target.dy = 0; + else { + lastRow = marker.range.start.row; + markersOnOneLine = 0; } - let sd = d.source.data, td = d.target.data, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1, theta = Math.atan(dx / dy), phi = Math.atan(dy / dx), r = 10 + 2, sin_theta = r * Math.sin(theta), cos_theta = r * Math.cos(theta), sin_phi = r * Math.sin(phi), cos_phi = r * Math.cos(phi), m1 = (y2 > y1) ? 1 : -1, m2 = (x2 > x1) ? -1 : 1; - if (d.type === 'initial') { - // Initial - return `M ${(x2 - 20)},${(y2 - 20)} - L ${(x2 - r / 2.0)},${(y2 - r / 2.0)}`; + if (markersOnOneLine > 200) { + continue; } - else if (d.type === 'call' || d.type == 'return') { - // Call/Return - x1 += m1 * sin_theta; - x2 += m2 * cos_phi; - y1 += m1 * cos_theta; - y2 += m2 * sin_phi; - if (dx === 0) { - if (y1 > y2) { - //y1 -= 10 - y2 += 20; - } - else { - //y1 += 10 - y2 -= 20; - } + var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow); + if (markerVisibleRange.start.row === markerVisibleRange.end.row + && markerVisibleRange.start.column === markerVisibleRange.end.column) { + continue; // visible range is empty + } + var screenRange = markerVisibleRange.toScreenRange(session); + if (screenRange.isEmpty()) { + foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine); + if (foldLine && foldLine.end.row > markerVisibleRange.end.row) { + visibleRangeStartRow = foldLine.end.row; } - return `M ${x1}, ${y1} - L ${x2}, ${y2}`; + continue; } - else if (dx === 0 && dy === 0) { - // Loop - return `M ${x1}, ${y1} - A 15,20 - -45,1,1 - ${x2 + 5},${y2 + 8}`; + if (this.markerType === "fullLine") { + markerLayer.drawFullLineMarker(html, screenRange, marker.className, config); } - else if (sd.parent_index == td.parent_index) { - // Same caller - if (dy === 0 && sd.children_index == td.children_index - 1) { - // Immediate sequence - return `M ${x1}, ${y1} - L ${(x2 + m2 * cos_phi)}, ${y2}`; - } - else { - let sign = -1; - if (y1 < y2) { - x1 += m1 * sin_theta; - y1 += m1 * cos_theta; - y2 -= r; - sign = -1; - } - else if (y2 < y1) { - x1 += m1 * sin_theta; - y1 += m1 * cos_theta; - y2 += r; - sign = 1; - } - else if (x1 >= x2) { - y1 += r; - y2 += r; - sign = 2; - } - else { - y1 -= r; - y2 -= r; - sign = -1; - } - return `M ${x1}, ${y1} - C ${(x1 + x2) / 2} ${y1 + r * sign}, - ${(x1 + x2) / 2} ${y2 + r * sign}, - ${x2} ${y2}`; - } + else if (screenRange.isMultiLine()) { + if (this.markerType === "line") + markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config); + else + markerLayer.drawTextMarker(html, screenRange, marker.className, config); } - // Other caller - x1 += m1 * sin_theta; - y1 += m1 * cos_theta; - x2 += m2 * cos_phi; - y2 += m2 * sin_phi; - return `M ${x1} ${y1} - C ${(x1 + x2) / 2} ${y1}, - ${(x1 + x2) / 2} ${y2}, - ${x2} ${y2}`; + else { + markerLayer.drawSingleLineMarker(html, screenRange, marker.className + " ace_br15", config); + } + } + }; + return MarkerGroup; +}()); +MarkerGroup.prototype.MAX_MARKERS = 10000; +exports.MarkerGroup = MarkerGroup; + +}); + +ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(require, exports, module){var Range = require("../range").Range; +var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/; +function getWordIndex(doc, pos) { + var textBefore = doc.getTextRange(Range.fromPoints({ + row: 0, + column: 0 + }, pos)); + return textBefore.split(splitRegex).length - 1; +} +function wordDistance(doc, pos) { + var prefixPos = getWordIndex(doc, pos); + var words = doc.getValue().split(splitRegex); + var wordScores = Object.create(null); + var currentWord = words[prefixPos]; + words.forEach(function (word, idx) { + if (!word || word === currentWord) + return; + var distance = Math.abs(prefixPos - idx); + var score = words.length - distance; + if (wordScores[word]) { + wordScores[word] = Math.max(score, wordScores[word]); + } + else { + wordScores[word] = score; + } + }); + return wordScores; +} +exports.getCompletions = function (editor, session, pos, prefix, callback) { + var wordScore = wordDistance(session, pos); + var wordList = Object.keys(wordScore); + callback(null, wordList.map(function (word) { + return { + caption: word, + value: word, + score: wordScore[word], + meta: "local" + }; + })); +}; + +}); + +ace.define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/lib/lang","ace/autocomplete/util","ace/marker_group","ace/autocomplete/text_completer","ace/editor","ace/config"], function(require, exports, module){/** + * ## Language Tools extension for Ace Editor + * + * Provides autocompletion, snippets, and language intelligence features for the Ace code editor. + * This extension integrates multiple completion providers including keyword completion, snippet expansion, + * and text-based completion to enhance the coding experience with contextual suggestions and automated code generation. + * + * **Configuration Options:** + * - `enableBasicAutocompletion`: Enable/disable basic completion functionality + * - `enableLiveAutocompletion`: Enable/disable real-time completion suggestions + * - `enableSnippets`: Enable/disable snippet expansion with Tab key + * - `liveAutocompletionDelay`: Delay before showing live completion popup + * - `liveAutocompletionThreshold`: Minimum prefix length to trigger completion + * + * **Usage:** + * ```javascript + * editor.setOptions({ + * enableBasicAutocompletion: true, + * enableLiveAutocompletion: true, + * enableSnippets: true + * }); + * ``` + * + * @module + */ +"use strict"; +var snippetManager = require("../snippets").snippetManager; +var Autocomplete = require("../autocomplete").Autocomplete; +var config = require("../config"); +var lang = require("../lib/lang"); +var util = require("../autocomplete/util"); +var MarkerGroup = require("../marker_group").MarkerGroup; +var textCompleter = require("../autocomplete/text_completer"); +var keyWordCompleter = { + getCompletions: function (editor, session, pos, prefix, callback) { + if (session.$mode.completer) { + return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback); + } + var state = editor.session.getState(pos.row); + var completions = session.$mode.getCompletions(state, session, pos, prefix); + completions = completions.map(function (el) { + el.completerId = keyWordCompleter.id; + return el; }); - // Remove any exiting links - link.exit() //.transition() - .attr('d', function (d) { - return (0, utils_1.diagonal)(d.source, d.target); - }) - .remove(); // linkExit + callback(null, completions); + }, + id: "keywordCompleter" +}; +var transformSnippetTooltip = function (str) { + var record = {}; + return str.replace(/\${(\d+)(:(.*?))?}/g, function (_, p1, p2, p3) { + return (record[p1] = p3 || ''); + }).replace(/\$(\d+?)/g, function (_, p1) { + return record[p1]; + }); +}; +var snippetCompleter = { + getCompletions: function (editor, session, pos, prefix, callback) { + var scopes = []; + var token = session.getTokenAt(pos.row, pos.column); + if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\.xml$/)) + scopes.push('html-tag'); + else + scopes = snippetManager.getActiveScopes(editor); + var snippetMap = snippetManager.snippetMap; + var completions = []; + scopes.forEach(function (scope) { + var snippets = snippetMap[scope] || []; + for (var i = snippets.length; i--;) { + var s = snippets[i]; + var caption = s.name || s.tabTrigger; + if (!caption) + continue; + completions.push({ + caption: caption, + snippet: s.content, + meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet", + completerId: snippetCompleter.id + }); + } + }, this); + callback(null, completions); + }, + getDocTooltip: function (item) { + if (item.snippet && !item.docHTML) { + item.docHTML = [ + "", lang.escapeHTML(item.caption), "", "
          ", + lang.escapeHTML(transformSnippetTooltip(item.snippet)) + ].join(""); + } + }, + id: "snippetCompleter" +}; +var completers = [snippetCompleter, textCompleter, keyWordCompleter]; +exports.setCompleters = function (val) { + completers.length = 0; + if (val) + completers.push.apply(completers, val); +}; +exports.addCompleter = function (completer) { + completers.push(completer); +}; +exports.textCompleter = textCompleter; +exports.keyWordCompleter = keyWordCompleter; +exports.snippetCompleter = snippetCompleter; +var expandSnippet = { + name: "expandSnippet", + exec: function (editor) { + return snippetManager.expandWithTab(editor); + }, + bindKey: "Tab" +}; +var onChangeMode = function (e, editor) { + loadSnippetsForMode(editor.session.$mode); +}; +var loadSnippetsForMode = function (mode) { + if (typeof mode == "string") + mode = config.$modes[mode]; + if (!mode) + return; + if (!snippetManager.files) + snippetManager.files = {}; + loadSnippetFile(mode.$id, mode.snippetFileId); + if (mode.modes) + mode.modes.forEach(loadSnippetsForMode); +}; +var loadSnippetFile = function (id, snippetFilePath) { + if (!snippetFilePath || !id || snippetManager.files[id]) + return; + snippetManager.files[id] = {}; + config.loadModule(snippetFilePath, function (m) { + if (!m) + return; + snippetManager.files[id] = m; + if (!m.snippets && m.snippetText) + m.snippets = snippetManager.parseSnippetFile(m.snippetText); + snippetManager.register(m.snippets || [], m.scope); + if (m.includeScopes) { + snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes; + m.includeScopes.forEach(function (x) { + loadSnippetsForMode("ace/mode/" + x); + }); + } + }); +}; +var doLiveAutocomplete = function (e) { + var editor = e.editor; + var hasCompleter = editor.completer && editor.completer.activated; + if (e.command.name === "backspace") { + if (hasCompleter && !util.getCompletionPrefix(editor)) + editor.completer.detach(); + } + else if (e.command.name === "insertstring" && !hasCompleter) { + lastExecEvent = e; + var delay = e.editor.$liveAutocompletionDelay; + if (delay) { + liveAutocompleteTimer.delay(delay); + } + else { + showLiveAutocomplete(e); + } + } +}; +var lastExecEvent; +var liveAutocompleteTimer = lang.delayedCall(function () { + showLiveAutocomplete(lastExecEvent); +}, 0); +var showLiveAutocomplete = function (e) { + var editor = e.editor; + var prefix = util.getCompletionPrefix(editor); + var previousChar = e.args; + var triggerAutocomplete = util.triggerAutocomplete(editor, previousChar); + if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) { + var completer = Autocomplete.for(editor); + completer.autoShown = true; + completer.showPopup(editor); } - updateLinkLabels(edges) { - var labelPath = this.g.selectAll(".label_text") - .data(edges, (d) => d.id); - var labelEnter = labelPath.enter().append("text") - .attr("class", "label_text") - .attr("font-family", "sans-serif") - .attr("font-size", this.config.labelFontSize + "px") - .attr("pointer-events", "none") - .attr("fill", "#000") - .attr("text-anchor", "middle") - .attr("dx", (d) => { - if (d.source.x == d.target.x) { - return 29; +}; +var Editor = require("../editor").Editor; +require("../config").defineOptions(Editor.prototype, "editor", { + enableBasicAutocompletion: { + set: function (val) { + if (val) { + Autocomplete.for(this); + if (!this.completers) + this.completers = Array.isArray(val) ? val : completers; + this.commands.addCommand(Autocomplete.startCommand); } - return (Math.abs(d.source.x - d.target.x) - 10) / 2; - }) - .attr("dy", -3) - .attr("id", (d, i) => { - return "pathlabel-" + this.graphId + "-" + d.id; - }) - .append("textPath") - .attr("xlink:href", (d, i) => { - return "#pathId-" + this.graphId + "-" + d.id; - }) - .text((d) => { - if (d.type === 'initial') { - return ''; + else { + this.commands.removeCommand(Autocomplete.startCommand); } - if (this.t1 == this.t2 || !d.count[this.t2]) { - return d.count[this.t1].toString(); + }, + value: false + }, + enableLiveAutocompletion: { + set: function (val) { + if (val) { + if (!this.completers) + this.completers = Array.isArray(val) ? val : completers; + this.commands.on('afterExec', doLiveAutocomplete); } - else if (!d.count[this.t1]) { - return d.count[this.t2].toString(); + else { + this.commands.off('afterExec', doLiveAutocomplete); } - return d.count[this.t1] + ', ' + d.count[this.t2]; - }); - labelEnter.merge(labelPath); - labelPath.exit().remove(); - } - zoomFunction(event) { - this.closeTooltip(); - this.transform = event.transform; - this.g.attr("transform", event.transform); - } - _graphId() { - return "trial-graph-" + this.graphId; + }, + value: false + }, + liveAutocompletionDelay: { + initialValue: 0 + }, + liveAutocompletionThreshold: { + initialValue: 0 + }, + enableSnippets: { + set: function (val) { + if (val) { + this.commands.addCommand(expandSnippet); + this.on("changeMode", onChangeMode); + onChangeMode(null, this); + } + else { + this.commands.removeCommand(expandSnippet); + this.off("changeMode", onChangeMode); + } + }, + value: false } -} -exports.TrialGraph = TrialGraph; +}); +exports.MarkerGroup = MarkerGroup; +}); (function() { + ace.require(["ace/ext/language_tools"], function(m) { + if ( true && module) { + module.exports = m; + } + }); + })(); + /***/ }), -/***/ "../trial/lib/index.js": -/*!*****************************!*\ - !*** ../trial/lib/index.js ***! - \*****************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; +/***/ "../../../../../../../../node_modules/ace-builds/src-noconflict/mode-sql.js": +/*!**********************************************************************************!*\ + !*** ../../../../../../../../node_modules/ace-builds/src-noconflict/mode-sql.js ***! + \**********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +/* module decorator */ module = __webpack_require__.nmd(module); +ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){"use strict"; +var oop = require("../lib/oop"); +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; +var SqlHighlightRules = function () { + var keywords = ("select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|" + + "when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|" + + "foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct|is|in|" + + "all|alter|any|array|at|authorization|between|both|cast|check|collate|column|commit|constraint|" + + "cube|current|current_date|current_time|current_timestamp|current_user|describe|escape|except|" + + "exists|external|extract|fetch|filter|for|full|function|global|grouping|intersect|interval|" + + "into|leading|like|local|no|of|only|out|overlaps|partition|position|range|revoke|rollback|rollup|" + + "row|rows|session_user|set|some|start|tablesample|time|to|trailing|truncate|unique|unknown|" + + "user|using|values|window|with"); + var builtinConstants = ("true|false"); + var builtinFunctions = ("avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|" + + "coalesce|ifnull|isnull|nvl"); + var dataTypes = ("int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|" + + "money|real|number|integer|string"); + var keywordMapper = this.createKeywordMapper({ + "support.function": builtinFunctions, + "keyword": keywords, + "constant.language": builtinConstants, + "storage.type": dataTypes + }, "identifier", true); + this.$rules = { + "start": [{ + token: "comment", + regex: "--.*$" + }, { + token: "comment", + start: "/\\*", + end: "\\*/" + }, { + token: "string", // " string + regex: '".*?"' + }, { + token: "string", // ' string + regex: "'.*?'" + }, { + token: "string", // ` string (apache drill) + regex: "`.*?`" + }, { + token: "constant.numeric", // float + regex: "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" + }, { + token: keywordMapper, + regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" + }, { + token: "keyword.operator", + regex: "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" + }, { + token: "paren.lparen", + regex: "[\\(]" + }, { + token: "paren.rparen", + regex: "[\\)]" + }, { + token: "text", + regex: "\\s+" + }] + }; + this.normalizeRules(); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(/*! ./config */ "../trial/lib/config.js"), exports); -__exportStar(__webpack_require__(/*! ./structures */ "../trial/lib/structures.js"), exports); -__exportStar(__webpack_require__(/*! ./graph */ "../trial/lib/graph.js"), exports); - - -/***/ }), - -/***/ "../trial/lib/structures.js": -/*!**********************************!*\ - !*** ../trial/lib/structures.js ***! - \**********************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); - - -/***/ }), - -/***/ "../utils/lib/d3svg.js": -/*!*****************************!*\ - !*** ../utils/lib/d3svg.js ***! - \*****************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.diagonal = diagonal; -/** - * Create diagonal line between two nodes - */ -function diagonal(s, d) { - if (s.dy == undefined) { - s.dy = 0; - } - if (d.dy == undefined) { - d.dy = 0; - } - let path = `M ${s.x} ${(s.y + s.dy)} - C ${(s.x + d.x) / 2} ${(s.y + s.dy)}, - ${(s.x + d.x) / 2} ${(d.y + d.dy)}, - ${d.x} ${(d.y + d.dy)}`; - return path; -} - - -/***/ }), - -/***/ "../utils/lib/index.js": -/*!*****************************!*\ - !*** ../utils/lib/index.js ***! - \*****************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +oop.inherits(SqlHighlightRules, TextHighlightRules); +exports.SqlHighlightRules = SqlHighlightRules; -"use strict"; +}); -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; +ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict"; +var oop = require("../../lib/oop"); +var Range = require("../../range").Range; +var BaseFoldMode = require("./fold_mode").FoldMode; +var FoldMode = exports.FoldMode = function (commentRegex) { + if (commentRegex) { + this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)); + this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)); } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(/*! ./d3svg */ "../utils/lib/d3svg.js"), exports); -__exportStar(__webpack_require__(/*! ./random */ "../utils/lib/random.js"), exports); -__exportStar(__webpack_require__(/*! ./text */ "../utils/lib/text.js"), exports); -__exportStar(__webpack_require__(/*! ./web */ "../utils/lib/web.js"), exports); - - -/***/ }), - -/***/ "../utils/lib/random.js": -/*!******************************!*\ - !*** ../utils/lib/random.js ***! - \******************************/ -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.makeid = makeid; -function makeid() { - var text = ""; - var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - for (var i = 0; i < 5; i++) - text += possible.charAt(Math.floor(Math.random() * possible.length)); - return text; -} - +oop.inherits(FoldMode, BaseFoldMode); +(function () { + this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/; + this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/; + this.singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/; + this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; + this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; + this._getFoldWidgetBase = this.getFoldWidget; + this.getFoldWidget = function (session, foldStyle, row) { + var line = session.getLine(row); + if (this.singleLineBlockCommentRe.test(line)) { + if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) + return ""; + } + var fw = this._getFoldWidgetBase(session, foldStyle, row); + if (!fw && this.startRegionRe.test(line)) + return "start"; // lineCommentRegionStart + return fw; + }; + this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) { + var line = session.getLine(row); + if (this.startRegionRe.test(line)) + return this.getCommentRegionBlock(session, line, row); + var match = line.match(this.foldingStartMarker); + if (match) { + var i = match.index; + if (match[1]) + return this.openingBracketBlock(session, match[1], row, i); + var range = session.getCommentFoldRange(row, i + match[0].length, 1); + if (range && !range.isMultiLine()) { + if (forceMultiline) { + range = this.getSectionRange(session, row); + } + else if (foldStyle != "all") + range = null; + } + return range; + } + if (foldStyle === "markbegin") + return; + var match = line.match(this.foldingStopMarker); + if (match) { + var i = match.index + match[0].length; + if (match[1]) + return this.closingBracketBlock(session, match[1], row, i); + return session.getCommentFoldRange(row, i, -1); + } + }; + this.getSectionRange = function (session, row) { + var line = session.getLine(row); + var startIndent = line.search(/\S/); + var startRow = row; + var startColumn = line.length; + row = row + 1; + var endRow = row; + var maxRow = session.getLength(); + while (++row < maxRow) { + line = session.getLine(row); + var indent = line.search(/\S/); + if (indent === -1) + continue; + if (startIndent > indent) + break; + var subRange = this.getFoldWidgetRange(session, "all", row); + if (subRange) { + if (subRange.start.row <= startRow) { + break; + } + else if (subRange.isMultiLine()) { + row = subRange.end.row; + } + else if (startIndent == indent) { + break; + } + } + endRow = row; + } + return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); + }; + this.getCommentRegionBlock = function (session, line, row) { + var startColumn = line.search(/\s*$/); + var maxRow = session.getLength(); + var startRow = row; + var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; + var depth = 1; + while (++row < maxRow) { + line = session.getLine(row); + var m = re.exec(line); + if (!m) + continue; + if (m[1]) + depth--; + else + depth++; + if (!depth) + break; + } + var endRow = row; + if (endRow > startRow) { + return new Range(startRow, startColumn, endRow, line.length); + } + }; +}).call(FoldMode.prototype); -/***/ }), +}); -/***/ "../utils/lib/text.js": -/*!****************************!*\ - !*** ../utils/lib/text.js ***! - \****************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { +ace.define("ace/mode/folding/sql",["require","exports","module","ace/lib/oop","ace/mode/folding/cstyle"], function(require, exports, module){"use strict"; +var oop = require("../../lib/oop"); +var BaseFoldMode = require("./cstyle").FoldMode; +var FoldMode = exports.FoldMode = function () { }; +oop.inherits(FoldMode, BaseFoldMode); +(function () { +}).call(FoldMode.prototype); -"use strict"; +}); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.wrap = wrap; -const d3_selection_1 = __webpack_require__(/*! d3-selection */ "../../node_modules/d3-selection/src/index.js"); -function wrap(text, width) { - text.each(function () { - var text = (0, d3_selection_1.select)(this), words = text.text().split(/(?=_)/).reverse(), word, line = [], lineNumber = 0, lineHeight = 1.1, // ems - y = text.attr("y"), dy = parseFloat(text.attr("dy")), tspan = text.text(null).append("tspan").attr("x", 10).attr("y", y).attr("dy", dy + "em"); - while (word = words.pop()) { - line.push(word); - tspan.text(line.join("")); - if (tspan.node().getComputedTextLength() > width) { - line.pop(); - tspan.text(line.join("")); - line = [word]; - tspan = text.append("tspan").attr("x", 10).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word); - } - } - }); -} +ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules","ace/mode/folding/sql"], function(require, exports, module){"use strict"; +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules; +var SqlFoldMode = require("./folding/sql").FoldMode; +var Mode = function () { + this.HighlightRules = SqlHighlightRules; + this.foldingRules = new SqlFoldMode(); + this.$behaviour = this.$defaultBehaviour; +}; +oop.inherits(Mode, TextMode); +(function () { + this.lineCommentStart = "--"; + this.blockComment = { start: "/*", end: "*/" }; + this.$id = "ace/mode/sql"; + this.snippetFileId = "ace/snippets/sql"; +}).call(Mode.prototype); +exports.Mode = Mode; +}); (function() { + ace.require(["ace/mode/sql"], function(m) { + if ( true && module) { + module.exports = m; + } + }); + })(); + /***/ }), -/***/ "../utils/lib/web.js": -/*!***************************!*\ - !*** ../utils/lib/web.js ***! - \***************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; +/***/ "../../../../../../../../node_modules/ace-builds/src-noconflict/theme-textmate.js": +/*!****************************************************************************************!*\ + !*** ../../../../../../../../node_modules/ace-builds/src-noconflict/theme-textmate.js ***! + \****************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.json = json; -const d3_fetch_1 = __webpack_require__(/*! d3-fetch */ "../../node_modules/d3-fetch/src/index.js"); -function json(innertext, sub, url, fn) { - let i = document.createElement('i'); - i.classList.add("loading"); - i.classList.add("fa"); - i.classList.add("fa-spinner"); - i.classList.add("fa-pulse"); - sub.innerHTML = ""; - sub.appendChild(i); - sub.onclick = function () { - json(innertext, sub, url, fn); - }; - (0, d3_fetch_1.json)(url).then(function (data) { - sub.onclick = function () { - }; - fn(data); - }).catch(function (error) { - i.classList.remove("fa-spinner"); - i.classList.remove("fa-pulse"); - i.classList.add("fa-refresh"); - i.classList.add("connection-error"); - let text = document.createElement('span'); - text.classList.add("error-text"); - text.innerHTML = innertext; - i.appendChild(text); - }); -} +/* module decorator */ module = __webpack_require__.nmd(module); +ace.define("ace/theme/textmate",["require","exports","module","ace/theme/textmate-css","ace/lib/dom"], function(require, exports, module){"use strict"; +exports.isDark = false; +exports.cssClass = "ace-tm"; +exports.cssText = require("./textmate-css"); +exports.$id = "ace/theme/textmate"; +var dom = require("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass, false); +}); (function() { + ace.require(["ace/theme/textmate"], function(m) { + if ( true && module) { + module.exports = m; + } + }); + })(); + /***/ }), diff --git a/src/noworkflow/now/vis/static/dist/bundle.js.map b/src/noworkflow/now/vis/static/dist/bundle.js.map index a1a1ee38..ac39c654 100644 --- a/src/noworkflow/now/vis/static/dist/bundle.js.map +++ b/src/noworkflow/now/vis/static/dist/bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA,uCAAuC;AACvC,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qDAAqD;AACrD,8BAA8B,UAAU,aAAa;AACrD,8BAA8B,mBAAmB,IAAI;AACrD,8BAA8B,SAAS,cAAc;AACrD,8BAA8B,UAAU,aAAa;AACrD;AACA;AACA,sCAAsC;AACtC;AACA,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,mCAAmC;AACnC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,2CAA2C;AAC3C,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,OAAO;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C;AACA;AACA;;AAEoN;AACpN;;;;;;;;;;;;;;;;ACr+EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEL;AACtB;;;;;;;;;;;;;;;;;;;;;;;ACrf6C;AACD;AACY;AACF;AACD;AACV;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,oCAAoC,qDAAM;AAC1C,sCAAsC,qDAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA,wCAAwC,qBAAqB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA,oCAAoC,2CAA2C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sDAAO;AAClC;AACA;AACA,yJAAyJ,YAAY;AACrK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sDAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA,wDAAwD,GAAG;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA,mBAAmB,kEAAkB;AACrC;AACA,YAAY,uDAAQ;AACpB;AACA,2CAA2C,0BAA0B;AACrE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,QAAQ,+GAA+G;AACxL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,4BAA4B,wCAAwC;AACpE;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,mCAAmC,QAAQ,WAAW,KAAK;AAC3D,4BAA4B,MAAM,EAAE,KAAK;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oCAAoC;AACxD,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iBAAiB;AAChF;AACA,aAAa,sDAAQ;AACrB,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEA;AAC3B;;;;;;;;;;;AC/kCA;AACA,IAAI,KAA4D,oBAAoB,mBAAO,CAAC,iFAAmB;AAC/G,IAAI,CAC0I;AAC9I,CAAC,yCAAyC;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0CAA0C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA,2CAA2C,UAAU;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,GAAG;AACxD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,GAAG;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU,2CAA2C,GAAG;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,WAAW;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0BAA0B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,wCAAwC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oCAAoC;;AAEzC;AACA;AACA;AACA;;AAEA,CAAC;AACD;;;;;;;;;;;;;;;;;;;;AC1hC2C;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0DAA0D;;AAEyC;AACpG;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE6B;AACxD;;;;;;;;;;;;;;;;;AC/bwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,0BAA0B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc,MAAM,cAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEX;AAChB;;;;;;;;;;;;;;;;;;;ACh9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE2C;AACtE;;;;;;;;;;;;;;;;;;;;ACjRiE;AAChB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAK,CAAC,wDAAK;AAChC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;;AAEiB;AACpD;;;;;;;;;;;;;;;;AC7fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,KAAK;AAC/B,0BAA0B,KAAK,GAAG,KAAK;AACvC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEC;AAC5B;;;;;;;;;;;;;;;;;;;;ACjMmD;AACC;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8DAAe;AACzD,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,uDAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAED;AAC1B;;;;;;;;;;;;;;;;;;;;;;AC7lB6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,cAAc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB;AACjF;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,KAAK;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA,6CAA6C,KAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEsD;AACjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrqB0E;AACd;AACM;AACW;AACvB;AACX;AACH;AACW;AACA;AACK;AACH;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe,KAAK,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,qBAAqB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qBAAqB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qDAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,0DAAW;AACnB,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,8CAA8C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kCAAkC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iEAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iEAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAkB;AACjD,KAAK,gCAAgC;AACrC;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oEAAoE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gEAAgB;AAChD;AACA,qCAAqC,OAAO;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO;AACrC;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gEAAgB;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,cAAc;AACjD,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,MAAM;AACzC,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mDAAI,SAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI;AAChC,6BAA6B,KAAK;AAClC,+BAA+B,kBAAkB;AACjD;AACA,kCAAkC,OAAO;AACzC;AACA;AACA,kCAAkC,MAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,gCAAgC,qDAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,qDAAqD;AACrE;AACA,qCAAqC,qDAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW,GAAG,gBAAgB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oCAAoC,gEAAgB;AACpD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gBAAgB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA,6DAA6D,OAAO;AACpE,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,qDAAqD,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA,mDAAmD,uBAAuB;AAC1E;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6BAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,uCAAuC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC;AACxB;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D,iBAAiB;AACjB;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,6CAA6C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,0CAA0C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,6CAA6C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,wCAAwC,iDAAC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,0CAA0C,iDAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU,EAAE,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA,kBAAkB,sCAAsC;AACxD;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAoD;AACnF;AACA;AACA,2BAA2B,2CAA2C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC,oBAAoB,uDAAQ;AAC5B,iDAAiD,sDAAO;AACxD,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qDAAM;AACvC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,gCAAgC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,sCAAsC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yBAAyB;AAC3C;AACA,2BAA2B;AAC3B;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,mCAAmC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM;AACpC,gBAAgB,wDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,kBAAkB,wDAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC,wBAAwB,uDAAQ;AAChC,qDAAqD,sDAAO;AAC5D,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kEAAkB;AACrC,YAAY,uDAAQ;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,SAAS;AACxE;AACA,aAAa,sDAAQ;AACrB,iDAAiD,SAAS;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sDAAQ;AACzB,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC,sCAAsC,qDAAM;AAC5C,uCAAuC,qDAAM;AAC7C,yCAAyC,qDAAM;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA,8CAA8C,kCAAkC;AAChF;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAI;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAQ;AAChC,uBAAuB,wDAAU;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,YAAY,0DAAW;AACvB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,iCAAiC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,qCAAqC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,WAAW,GAAG,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,YAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAA2D;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,2BAA2B,4CAA4C;AACvE;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA;AACA;AACA;AACA;AACA,2BAA2B,+CAA+C;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,MAAM;AAC3C;AACA;AACA,oCAAoC,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wDAAK;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,wDAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wDAAK;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mCAAmC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,QAAQ;AACnD,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,MAAM;AACjD,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mBAAmB;AAC5D;AACA;AACA,yCAAyC,oBAAoB;AAC7D;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA,yCAAyC,sBAAsB;AAC/D;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA,yCAAyC,2BAA2B;AACpE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAU,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8BAA8B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uCAAuC;AACrD;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C,uCAAuC,SAAS;AAChD;AACA;AACA,yBAAyB,kDAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC,4BAA4B,SAAS;AACrC,6BAA6B,UAAU;AACvC,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iEAAkB;AACnD;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAM;AACxC,mCAAmC,qDAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAG;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,yCAAyC;AACjF;AACA;AACA;AACA,uCAAuC,uCAAuC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA,0DAA0D,OAAO;AACjE;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gEAAgB;AACrD;AACA,yBAAyB,8CAA8C;AACvE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,cAAc,6DAAe,IAAI;AACrF;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa;AAC5D;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,cAAc,YAAY;AAC1B;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA,uCAAuC,IAAI,sCAAsC;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,sCAAsC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAM;AACrC,kCAAkC,qDAAM;AACxC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,MAAM;AACvC,kCAAkC,KAAK;AACvC,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA,gCAAgC,MAAM;AACtC,mCAAmC,KAAK;AACxC,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,EAAE;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2DAA2D;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEkT;AAC7U;;;;;;;;;;;;AC7seA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,2BAA2B,cAAc;AACzC,8DAA8D;;;AAG9D;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,0HAA0H;AAC1H;AACA;;AAEA,CAAC;;AAED,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iHAAiH;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,0CAA0C,uBAAuB,uBAAuB,uBAAuB;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,2DAA2D,qCAAqC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gHAAgH;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,0GAA0G;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,4FAA4F;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,sGAAsG;AACtG;AACA,oCAAoC;AACpC,mCAAmC;AACnC;AACA;AACA,wDAAwD;AACxD,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qGAAqG;AACrG;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;;AAEA,CAAC;;AAED,iHAAiH;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,mMAAmM;AACnM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,mDAAmD,KAAK,KAAK;AAC7D;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uGAAuG,uCAAuC,wBAAwB,gBAAgB,GAAG,+BAA+B,eAAe,wBAAwB,GAAG,uBAAuB,gCAAgC,GAAG,aAAa,8BAA8B,iBAAiB,GAAG,yBAAyB,iBAAiB,GAAG,oCAAoC,8BAA8B,GAAG,iDAAiD,gBAAgB,GAAG,2BAA2B,2BAA2B,GAAG,uCAAuC,4BAA4B,GAAG,wCAAwC,4BAA4B,GAAG,uCAAuC,2BAA2B,GAAG,0BAA0B,2CAA2C,eAAe,GAAG,uCAAuC,4BAA4B,GAAG,uCAAuC,2BAA2B,GAAG,oEAAoE,8BAA8B,GAAG,uCAAuC,8BAA8B,GAAG,yBAAyB,0BAA0B,GAAG,0BAA0B,6BAA6B,GAAG,kCAAkC,4BAA4B,GAAG,0CAA0C,8BAA8B,GAAG,uCAAuC,0BAA0B,GAAG,2BAA2B,6BAA6B,GAAG,yBAAyB,6BAA6B,GAAG,+CAA+C,mBAAmB,GAAG,4BAA4B,2BAA2B,GAAG,uBAAuB,2BAA2B,GAAG,+BAA+B,0BAA0B,GAAG,mCAAmC,4BAA4B,8CAA8C,mCAAmC,GAAG,oDAAoD,kCAAkC,GAAG,uCAAuC,iCAAiC,GAAG,0CAA0C,mCAAmC,GAAG,4CAA4C,0BAA0B,yCAAyC,GAAG,gDAAgD,oCAAoC,GAAG,qCAAqC,iCAAiC,GAAG,kDAAkD,mCAAmC,yCAAyC,GAAG,+BAA+B,qCAAqC,kIAAkI,GAAG,sCAAsC,qCAAqC,8NAA8N,GAAG;;AAE9nG,CAAC;;AAED,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gLAAgL;AAChL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,kCAAkC;AACjF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA,QAAQ,IAA4B;AACpC,qBAAqB,wBAAM;AAC3B;AACA,WAAW;;AAEX;AACA;AACA;AACA,gGAAgG,wBAAM;;AAEtG;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;;AAEA;AACA;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,0BAA0B;AAC5E;AACA,CAAC;;AAED,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,wBAAwB;AACxB;AACA,0BAA0B;AAC1B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,uBAAuB;AACvB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,IAAI;AAC/C;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iIAAiI,cAAc;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA,0CAA0C;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,eAAe;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8FAA8F;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,CAAC;;AAED,oNAAoN;AACpN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,oHAAoH;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mEAAmE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qBAAqB;AAC/C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,yCAAyC;AAC3G;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+HAA+H;AAC/H;AACA,qBAAqB;AACrB,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;;AAEA,CAAC;;AAED,+FAA+F;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uJAAuJ;AACvJ;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iCAAiC;AAC5E;AACA;AACA,iEAAiE,UAAU;AAC3E;AACA;AACA;AACA,oIAAoI,yBAAyB;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,0KAA0K;AAC1K;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,sCAAsC;AACtC,iCAAiC;AACjC;AACA,kCAAkC,mBAAmB;AACrD;AACA;AACA,gCAAgC,wCAAwC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC;AACjG,4DAA4D,wCAAwC;AACpG,2DAA2D,wCAAwC;AACnG,wDAAwD,wCAAwC;AAChG,wDAAwD,wCAAwC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wBAAwB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oHAAoH,2BAA2B;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,0IAA0I;AAC1I;AACA;AACA;AACA,4CAA4C,YAAY,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,6JAA6J;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,kBAAkB,mBAAmB;AAC/E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,iDAAiD;AAC3H,oEAAoE,4CAA4C;AAChH,mEAAmE,2CAA2C;AAC9G,sEAAsE,6CAA6C;AACnH,mEAAmE,4CAA4C;AAC/G,wDAAwD,4CAA4C;AACpG,sEAAsE,0DAA0D;AAChI;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,uBAAuB,4CAA4C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA,CAAC;;AAED,wSAAwS;AACxS;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB,mBAAmB,kBAAkB,iBAAiB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,iBAAiB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,mBAAmB,iBAAiB;AACpC,iBAAiB,2CAA2C;AAC5D,mBAAmB,oBAAoB;AACvC,oBAAoB,iBAAiB;AACrC,2BAA2B;AAC3B,CAAC;AACD;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iCAAiC;AAChG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,uIAAuI;AACvI;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4CAA4C,IAAI;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA,oBAAoB,kCAAkC,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,kIAAkI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB;AACrF;AACA;AACA;AACA,4CAA4C,qBAAqB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wBAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAsD;AACxF;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAsD;AACpF;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+JAA+J;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,IAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yBAAyB;AAC/C;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,uBAAuB;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,kIAAkI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,kBAAkB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,IAAI;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iCAAiC;AACjC,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,mGAAmG;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,iLAAiL;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,kDAAkD;AAClD,yDAAyD,KAAK;AAC9D;AACA;AACA;AACA;AACA;AACA,uDAAuD,6BAA6B;AACpF;AACA;AACA,oEAAoE;AACpE;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,wEAAwE;AACxE;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,+BAA+B;AAC/B,6DAA6D,KAAK,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,gCAAgC;AAChC,iEAAiE,4CAA4C,IAAI;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,2CAA2C,GAAG;AAC9C,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,4FAA4F;AAC5F;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qPAAqP;AACrP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE,uCAAuC,2BAA2B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,aAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA,2EAA2E,aAAa;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,SAAS,gBAAgB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,SAAS,gBAAgB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ,SAAS,cAAc;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,mBAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,gGAAgG;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iIAAiI;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,oCAAoC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8KAA8K;AAC9K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mBAAmB;AACxD;AACA;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+IAA+I;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,gIAAgI;AAChI;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,wCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,4GAA4G;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,sBAAsB,IAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,IAAI;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0BAA0B;AACrE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uNAAuN;AACvN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2BAA2B;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8BAA8B;AACnE;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,4CAA4C;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,oBAAoB;AACpB;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gJAAgJ;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,WAAW;AACzD;AACA;AACA,oBAAoB;AACpB,8CAA8C,WAAW;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,WAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf,UAAU,KAAK;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kLAAkL;AAClL;AACA;AACA;AACA;AACA;AACA,sLAAsL;AACtL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,qMAAqM;AACrM;AACA;AACA;AACA;AACA;AACA;AACA,uMAAuM;AACvM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2KAA2K;AAC3K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,oMAAoM;AACpM;AACA;AACA,kCAAkC;AAClC,kMAAkM;AAClM;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,mYAAmY;AACnY;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAe;AAChD,oCAAoC,qBAAqB;AACzD;AACA;AACA;AACA;AACA;AACA,yCAAyC,uBAAuB;AAChE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,4DAA4D,MAAM,0BAA0B,MAAM;AAClG;AACA,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,yBAAyB;AACzB,yBAAyB;AACzB,4BAA4B;AAC5B,4BAA4B;AAC5B,0BAA0B;AAC1B,wBAAwB;AACxB,iCAAiC;AACjC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,mCAAmC;AAC9D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,8BAA8B,qBAAqB;AACnD;AACA,8BAA8B,yBAAyB;AACvD;AACA,KAAK;AACL;AACA,8BAA8B,kCAAkC;AAChE;AACA,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D,2BAA2B,mCAAmC;AAC9D;AACA,KAAK;AACL;AACA,8BAA8B,oBAAoB;AAClD,2BAA2B,sBAAsB;AACjD;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,MAAM;AAC5D,+EAA+E,MAAM;AACrF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6EAA6E,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,oCAAoC;AACpC,+FAA+F,EAAE,IAAI,EAAE;AACvG;AACA;AACA;AACA,wCAAwC,EAAE,IAAI,EAAE;AAChD,iCAAiC,EAAE,IAAI,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;AACA;;AAEA,CAAC;;AAED,6IAA6I;AAC7I;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC,KAAK;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,4DAA4D,OAAO,UAAU,GAAG;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sFAAsF,WAAW;AACjG;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA,qCAAqC;AACrC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+KAA+K;AAC/K;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,sJAAsJ;AACtJ;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,kCAAkC;AACpE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB;AACrF,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,gCAAgC;AACxE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,4BAA4B;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sBAAsB;AACxD;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B,iEAAiE;AAC9F;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B,gEAAgE;AAC7F;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kEAAkE,yBAAyB;AAC3F;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA,uCAAuC,qBAAqB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,4BAA4B;AAC9D,+CAA+C,gCAAgC;AAC/E;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sBAAsB;AACxD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2BAA2B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C,SAAS;AACT;AACA,KAAK;AACL,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,6gBAA6gB;AAC7gB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,2DAA2D,iBAAiB;AAC5E;AACA;AACA,qDAAqD,cAAc;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAyC;AAC1E;AACA;AACA;AACA;AACA;AACA,iCAAiC,iCAAiC;AAClE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gCAAgC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA,qCAAqC,eAAe;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAW,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,qBAAqB;AACjH;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,KAAK;AACnB,cAAc,KAAK;AACnB;AACA;AACA,sCAAsC;AACtC,uBAAuB,kCAAkC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAA0C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gBAAgB;AAC/C;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA,6BAA6B,oCAAoC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,aAAa;AAChE,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,oCAAoC;AAC/D;AACA,KAAK;AACL;AACA,0CAA0C,4BAA4B;AACtE;AACA,KAAK;AACL;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,2BAA2B;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,yBAAyB,oBAAoB;AAC7C,6BAA6B,oBAAoB;AACjD,wBAAwB,oBAAoB;AAC5C;AACA,8BAA8B;AAC9B,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA,8BAA8B,6BAA6B;AAC3D,2BAA2B,yBAAyB;AACpD;AACA;AACA,KAAK;AACL;AACA,8BAA8B,uBAAuB;AACrD,2BAA2B,sBAAsB;AACjD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,iCAAiC;AAC/D;AACA,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,gCAAgC,YAAY,qBAAqB,OAAO;AACxE;AACA,KAAK;AACL,0CAA0C,OAAO;AACjD;AACA,KAAK;AACL,kCAAkC,OAAO;AACzC;AACA,KAAK;AACL,+BAA+B,OAAO;AACtC;AACA;AACA;AACA,KAAK;AACL,+BAA+B,OAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8GAA8G;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,mMAAmM;AACnM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,SAAS;AAC7G;AACA;AACA,oFAAoF,SAAS;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,WAAW;AAC/C,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,2HAA2H;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,6BAA6B,uBAAuB,oBAAoB;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE,uCAAuC;AACvC,mCAAmC;AACnC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG;AAChG,qCAAqC;AACrC,+BAA+B;AAC/B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,mCAAmC;AACnC,+BAA+B;AAC/B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,wEAAwE;AACxE,mCAAmC;AACnC,2DAA2D;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,+BAA+B;AAC/B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,iDAAiD;AACjD,+BAA+B;AAC/B,oBAAoB,QAAQ;AAC5B;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,oGAAoG;AACpG;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uNAAuN;AACvN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,SAAS;AAC7G;AACA;AACA,kGAAkG,SAAS;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,kBAAkB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA,+CAA+C,OAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,CAAC;;AAED,kKAAkK;AAClK;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gCAAgC;AAChC,iCAAiC;AACjC,iCAAiC;AACjC;AACA;;AAEA,CAAC;;AAED,yKAAyK;AACzK;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0EAA0E,uBAAuB,yCAAyC,gCAAgC,2BAA2B,2BAA2B,uBAAuB,eAAe,GAAG,gDAAgD,uBAAuB,eAAe,qBAAqB,+BAA+B,GAAG,yBAAyB,eAAe,aAAa,WAAW,gBAAgB,GAAG,6BAA6B,eAAe,aAAa,gBAAgB,GAAG,yBAAyB,cAAc,YAAY,iBAAiB,GAAG,6BAA6B,cAAc,iBAAiB,GAAG,+BAA+B,eAAe,qBAAqB,GAAG;AACjwB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,uCAAuC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0CAA0C;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,gCAAgC;AAChC,iCAAiC;AACjC,iCAAiC;AACjC;AACA;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,8MAA8M;AAC9M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,YAAY;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,gBAAgB,iBAAiB;AAChF,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,6BAA6B;AAC7B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,yCAAyC;AACzC;AACA;;AAEA,CAAC;;AAED,mGAAmG;AACnG;AACA,gBAAgB,QAAQ;AACxB,kCAAkC;AAClC;AACA;AACA,0DAA0D;AAC1D,KAAK,gCAAgC;AACrC;AACA;AACA;AACA,8BAA8B,iCAAiC,YAAY,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,YAAY,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,YAAY,iCAAiC,iCAAiC,iCAAiC,gCAAgC,mBAAmB,yBAAyB,u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uBAAuB,kBAAkB,mCAAmC,6BAA6B,KAAK,sBAAsB,mBAAmB,sBAAsB,uBAAuB,GAAG,4BAA4B,6BAA6B,gBAAgB,GAAG,6BAA6B,6BAA6B,GAAG,sBAAsB,yBAAyB,yBAAyB,4BAA4B,6BAA6B,uBAAuB,mBAAmB,qBAAqB,iBAAiB,GAAG,qBAAqB,mBAAmB,yBAAyB,GAAG,qCAAqC,uBAAuB,GAAG,qCAAqC,0BAA0B,yBAAyB,GAAG,6CAA6C,wBAAwB,4BAA4B,wBAAwB,oBAAoB,eAAe,gBAAgB,iBAAiB,sBAAsB,GAAG,uBAAuB,oBAAoB,GAAG;;AAEh14B,CAAC;;AAED,yJAAyJ;AACzJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,6cAA6c;AAC7c;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iCAAiC,cAAc,gCAAgC;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,oCAAoC,sCAAsC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,qBAAqB;AACnD,2BAA2B,qCAAqC;AAChE;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qEAAqE;AACrE;AACA,mCAAmC,iCAAiC;AACpE,MAAM,YAAY;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,wCAAwC,eAAe;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,yBAAyB;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,0DAA0D,qBAAqB,iBAAiB;AAChG;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iCAAiC,QAAQ;AACzC;;AAEA,CAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,UAAU;AAC1C;AACA;AACA,0BAA0B,yCAAyC;AACnE;AACA;AACA,0BAA0B,sCAAsC;AAChE;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;;AAGA,CAAC;;AAED,kJAAkJ;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,mJAAmJ;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wBAAwB;AACxE;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+IAA+I;AAC/I;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D,mBAAmB,wCAAwC;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,4BAA4B;AAC9D,mBAAmB,4CAA4C;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mCAAmC;AACrE,mBAAmB,oDAAoD;AACvE;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,kCAAkC;AACpE,mBAAmB,wDAAwD;AAC3E;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,wBAAwB;AAC1D,mBAAmB,4CAA4C;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,uBAAuB;AACzD,mBAAmB,8CAA8C;AACjE;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,8BAA8B;AAChE,mBAAmB,wDAAwD;AAC3E;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,6BAA6B;AAC/D,mBAAmB,0DAA0D;AAC7E;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,sCAAsC;AACzD;AACA,KAAK;AACL;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA,KAAK;AACL;AACA;AACA,kCAAkC,wBAAwB;AAC1D,mBAAmB,sCAAsC;AACzD;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mBAAmB;AACrD,mBAAmB,sCAAsC;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;AACA;;AAEA,CAAC;;AAED,6SAA6S;AAC7S,aAAa,2BAA2B;AACxC,aAAa,qCAAqC;AAClD,aAAa,iDAAiD;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA,sCAAsC,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,IAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAe;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wBAAwB;AAC/E;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,wBAAwB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;;AAED,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,4IAA4I;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,2BAA2B;AACjF;AACA,kDAAkD,8BAA8B,yBAAyB,4BAA4B,qBAAqB,gCAAgC,mCAAmC,wBAAwB,6BAA6B,gCAAgC,OAAO,6DAA6D,sCAAsC,iEAAiE,sCAAsC,2DAA2D,sCAAsC,uDAAuD,sCAAsC,2BAA2B,6BAA6B,4BAA4B,kDAAkD,oDAAoD,mDAAmD,oBAAoB,OAAO;;AAEz8B,CAAC;;AAED,gYAAgY;AAChY;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,cAAc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kFAAkF;AAClF,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,KAAuD;AAC/E;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;;;;;;;;;;;ACn9qBA,sQAAsQ;AACtQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,kCAAkC,gCAAgC;AAClE,kCAAkC,mBAAmB;AACrD,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,oCAAoC,iBAAiB;AACrD,0CAA0C,iBAAiB;AAC3D,qCAAqC,kBAAkB;AACvD,0CAA0C,eAAe;AACzD,gDAAgD,gBAAgB;AAChE,oCAAoC,gBAAgB;AACpD,wCAAwC,iBAAiB;AACzD,8CAA8C,kBAAkB;AAChE,oCAAoC,gCAAgC;AACpE,sCAAsC,mBAAmB;AACzD,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAA8B;AACxD,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,kBAAkB,SAAS;AAC3B;AACA,uBAAuB;AACvB,kBAAkB,+CAA+C;AACjE,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,yBAAyB;AACzB,qCAAqC;AACrC,yBAAyB;AACzB;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA,kBAAkB;AAClB;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,uBAAuB;AACvB,kBAAkB;AAClB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,uBAAuB;AACvB,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC,kBAAkB;AAClB,kCAAkC,oBAAoB;AACtD,uBAAuB;AACvB,kBAAkB,WAAW;AAC7B,sCAAsC;AACtC;AACA;AACA,qBAAqB,2BAA2B;AAChD,kBAAkB,6CAA6C;AAC/D,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,2CAA2C,cAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,+BAA+B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,qCAAqC,gBAAgB;AACrD;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uCAAuC;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,kCAAkC,6BAA6B,4CAA4C,mDAAmD,yBAAyB,GAAG;AACtO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,qOAAqO;AACrO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oEAAoE,UAAU;AAC9E,iDAAiD,kBAAkB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,sCAAsC,kBAAkB;AACxD,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uCAAuC;AACjE;AACA,8BAA8B,2CAA2C;AACzE;AACA,8BAA8B,iDAAiD;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,wFAAwF,gCAAgC,iBAAiB,GAAG,4EAA4E,gCAAgC,GAAG,gDAAgD,gCAAgC,uBAAuB,wCAAwC,yBAAyB,iBAAiB,GAAG,yDAAyD,gDAAgD,0CAA0C,GAAG,wBAAwB,mBAAmB,yBAAyB,GAAG,2BAA2B,yBAAyB,kBAAkB,GAAG,yDAAyD,qBAAqB,GAAG,kEAAkE,qBAAqB,GAAG,gCAAgC,mBAAmB,sBAAsB,kCAAkC,yBAAyB,6CAA6C,uBAAuB,0BAA0B,kBAAkB,GAAG,yCAAyC,gCAAgC,kDAAkD,uBAAuB,0BAA0B,qBAAqB,GAAG,sCAAsC,8BAA8B,GAAG,+BAA+B,oBAAoB,0BAA0B,GAAG,mCAAmC,mBAAmB,qBAAqB,GAAG,qCAAqC,qBAAqB,uBAAuB,8BAA8B,GAAG,4CAA4C,cAAc,GAAG,wCAAwC,oBAAoB,yBAAyB,eAAe,kBAAkB,gBAAgB,uBAAuB,mBAAmB,iDAAiD,6BAA6B,6CAA6C,GAAG,2BAA2B,WAAW,wCAAwC,YAAY,wCAAwC,aAAa,yCAAyC,GAAG,mCAAmC,2CAA2C,gDAAgD,0BAA0B,QAAQ,GAAG;AACn2E;AACA;AACA;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,uCAAuC;AACpG,kCAAkC,uCAAuC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gCAAgC;AAC5E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gCAAgC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,sGAAsG;AACtG;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,2TAA2T;AAC3T;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,yDAAyD,aAAa;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,qCAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,eAAe;AAChF;AACA;AACA;AACA;AACA;AACA,iEAAiE,eAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,eAAe;AACnF;AACA;AACA,qEAAqE,eAAe;AACpF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sDAAsD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,4BAA4B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,8BAA8B,8BAA8B;AAC5D,gCAAgC,gCAAgC;AAChE,6CAA6C,iCAAiC;AAC9E,8CAA8C,+BAA+B;AAC7E,+BAA+B,4BAA4B;AAC3D,kCAAkC,wCAAwC;AAC1E,wCAAwC,qCAAqC,oBAAoB,IAAI;AACrG;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,kCAAkC,sCAAsC;AACxE,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,uBAAuB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mBAAmB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gDAAgD;AACvG,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,4HAA4H;AAC5H;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,4QAA4Q;AAC5Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,IAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;;ACrqFA,2JAA2J;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+JAA+J;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,6IAA6I;AAC7I;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,iLAAiL;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,CAAC;AACD;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;;AC5NA,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;ACfA;;AAEA,cAAc,mBAAO,CAAC,sEAAO;;AAE7B,cAAc,4FAA4B;AAC1C,YAAY,mBAAO,CAAC,sEAAa;AACjC,iBAAiB,mBAAO,CAAC,gFAAkB;AAC3C,gBAAgB,mBAAO,CAAC,8EAAiB;AACzC,gBAAgB,mBAAO,CAAC,8EAAiB;;;;;;;;;;;ACRzC,WAAW,mBAAO,CAAC,uDAAS;AAC5B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,6FAA8B;AAC1C,4CAA4C;AAC5C,iCAAiC;AACjC,QAAQ;AACR;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC5DA,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,kGAA2B;AAC1C,aAAa,gFAAwB;;AAErC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACnHA;;AAEA,gBAAgB,wGAA8B;AAC9C,qBAAqB,yGAAiC;AACtD,qBAAqB,yGAAiC;AACtD,YAAY,mBAAO,CAAC,gEAAQ;;;;;;;;;;;ACL5B,eAAe,kGAA2B;AAC1C,oBAAoB,uGAAgC;AACpD,oBAAoB,uGAAgC;AACpD,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACznBA,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;;AAEA;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxHA,gBAAgB,mBAAO,CAAC,4EAAc;;AAEtC,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;;;;;;;;;;ACzCjB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,gBAAgB,mBAAO,CAAC,mEAAO;;;;;;;;;;;AClB/B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,WAAW,mBAAO,CAAC,0DAAY;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,IAAI;AACJ;AACA;AACA;;AAEA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACnUA;;AAEA,eAAe,mBAAO,CAAC,kEAAO;AAC9B,eAAe,mBAAO,CAAC,kEAAO;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,gFAAwB;;AAErC,iBAAiB,mBAAO,CAAC,kEAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AChDA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,gFAAwB;;AAErC,WAAW,mBAAO,CAAC,0DAAY;AAC/B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,YAAY;AAC3C;;AAEA;AACA;AACA;;AAEA,kDAAkD,OAAO;AACzD;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA,IAAI;AACJ;AACA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA,iBAAiB,eAAe;AAChC;AACA;;AAEA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;;AAEA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,YAAY,iBAAiB;AAC7B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;ACtSA;;AAEA,eAAe,mBAAO,CAAC,kEAAO;AAC9B,eAAe,mBAAO,CAAC,kEAAO;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,iBAAiB,mBAAO,CAAC,kEAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;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CAAC;MAC9C,IAAM2xB,eAAe,GAAG5xB,IAAI,CAAC9G,MAAM,GAAG,GAAG;MACzC,IAAM24B,SAAS,GAAG,GAAG;MACrB,IAAM9Y,SAAS,GAAG7Y,IAAI,CAACC,GAAG,CAAC0xB,SAAS,EAAED,eAAe,GAAG,GAAG,CAAC;MAC5DD,aAAa,CAAC54B,KAAK,CAACG,MAAM,MAAAJ,MAAA,CAAMigB,SAAS,OAAI;MAE7C,IAAI,IAAI,CAACwW,SAAS,EAAE;QAClB,IAAI,CAACA,SAAS,CAACuC,MAAM,CAAC,CAAC;MACzB;IACF;EAAC;AAAA,EAhO8BliC,mDAAM;AAiOtCyH,eAAA,CAjOYkB,WAAW,WAES,CAAC;;;;;;;;;;;AC7KtB;;AAEZ,kBAAkB;AAClB,mBAAmB;AACnB,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,UAAU;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACrJA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;AC19GhC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,iBAAiB,mBAAO,CAAC,qBAAQ;AACjC;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;AChEA;AACA;AACA;AACA;;AAEA,aAAa,0FAA6B;;AAE1C;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,aAAa;AAC/B;AACA;;AAEA,oBAAoB,YAAY;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,aAAa;AAChC;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;;;;;;;;;;;ACnOlB,UAAU,mBAAO,CAAC,uDAAO;AACzB,aAAa,0FAA6B;AAC1C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,eAAe,mBAAO,CAAC,iEAAU;AACjC,YAAY,mBAAO,CAAC,2DAAS;AAC7B,UAAU,mBAAO,CAAC,0DAAY;AAC9B,aAAa,mBAAO,CAAC,6DAAU;;AAE/B;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACpHA,cAAc,mBAAO,CAAC,mEAAa;AACnC,gBAAgB,mBAAO,CAAC,mEAAa;AACrC,YAAY,mBAAO,CAAC,4EAAmB;;AAEvC;AACA;AACA;;AAEA,oBAAoB,GAAG,cAAc;AACrC,sBAAsB,GAAG,gBAAgB;AACzC,sBAAsB,GAAG,gBAAgB;AACzC,wBAAwB,GAAG,kBAAkB;AAC7C,mBAAmB,GAAG,kBAAkB;;;;;;;;;;;ACZxC,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;AAC1C,YAAY,mBAAO,CAAC,iEAAS;AAC7B,mBAAmB,mBAAO,CAAC,yEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,UAAU,mBAAO,CAAC,uDAAO;AACzB,WAAW,mBAAO,CAAC,kEAAgB;AACnC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB,wBAAwB;;;;;;;;;;;AC3HxB,YAAY,mBAAO,CAAC,iEAAS;AAC7B,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;AAC1C,mBAAmB,mBAAO,CAAC,yEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,UAAU,mBAAO,CAAC,uDAAO;AACzB,WAAW,mBAAO,CAAC,kEAAgB;AACnC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB,oBAAoB;;;;;;;;;;;ACjHpB,aAAa,0FAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA,UAAU,mBAAO,CAAC,0DAAY;;AAE9B,eAAe;AACf;;AAEA;AACA;AACA;;AAEA,eAAe;AACf;;A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A;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,IAAI;AACJ,8BAA8B;AAC9B;AACA;AACA,wDAAwD;AACxD,wEAAwE;;AAExE;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,8BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,sBAAsB;;;;;;;;;;;;ACrJT;;AAEb;AACA,aAAa,0FAA6B;AAC1C,SAAS,mBAAO,CAAC,iDAAO;AACxB,SAAS,uFAAsB;AAC/B,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,aAAa,mBAAO,CAAC,6EAAe;;AAEpC;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,IAAI;AACJ,8BAA8B;AAC9B;AACA;AACA,wDAAwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;;AAEA;;;;;;;;;;;ACrFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA,eAAe,mBAAO,CAAC,mHAAoB;AAC3C,eAAe,mBAAO,CAAC,mHAAoB;;AAE3C;;AAEA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,gBAAgB,mBAAO,CAAC,qHAAqB;;AAE7C;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;;AAEA;AACA,cAAc,mBAAO,CAAC,iFAAS;AAC/B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,uFAA8B;;AAEvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,yIAA2B;AAChD;;AAEA;;AAEA,aAAa,oJAA6B;AAC1C,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,yIAA+B;AACxD,kBAAkB,mBAAO,CAAC,mIAA4B;AACtD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,6EAA6E;AACtJ;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,kJAAwC;AAChF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,kGAAkG;AAClG,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA,4FAA4F;AAC5F,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,kJAAwC;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B,sCAAsC,mBAAmB;AACzD,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA,4EAA4E;;AAE5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA,mDAAmD,iEAAiE;AACpH;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,uCAAuC;AACvC,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;;;;;;;;;;;AC1/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mBAAO,CAAC,+GAAkB;;AAEvC;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,oEAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,yIAA2B;AAChD;;AAEA;;AAEA,aAAa,oJAA6B;AAC1C,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kBAAkB,mBAAO,CAAC,mIAA4B;;AAEtD;;AAEA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC;;AAEA,2CAA2C;AAC3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oDAAoD;AACpD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5qBa;;AAEb,kDAAkD,0CAA0C;;AAE5F,aAAa,oJAA6B;AAC1C,WAAW,mBAAO,CAAC,mBAAM;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;;;;;;;;;;;AC7Ea;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;ACnFA,sGAA+C;;;;;;;;;;;ACA/C;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7DA,UAAU,gKAAqD;AAC/D,cAAc;AACd,gBAAgB;AAChB,kKAAuD;AACvD,4JAAmD;AACnD,qKAAyD;AACzD,2KAA6D;;;;;;;;;;;;ACN7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mJAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;ACvSA;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7DA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;AACA;;AAEA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,eAAe,mBAAO,CAAC,wDAAW;AAClC,gBAAgB,mBAAO,CAAC,oDAAS;AACjC;AACA;AACA;AACA;;AAEA,cAAc;AACd,kBAAkB;AAClB,yBAAyB;;AAEzB;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,yBAAyB,QAAQ;AACjC;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,qBAAqB,WAAW,GAAG,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,gBAAgB,WAAW,GAAG,IAAI,KAAK,aAAa;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;;AAEA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,KAAK,mDAAmD,cAAc;AACzF,GAAG;AACH;AACA;AACA,+BAA+B,IAAI;AACnC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,MAAM,aAAa,SAAS;AACtD;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB,cAAc,oBAAoB,EAAE,IAAI;AACxC;AACA,YAAY,gBAAgB,EAAE,IAAI;AAClC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,GAAG,SAAS,GAAG,KAAK,qBAAqB,EAAE,EAAE;AACpE,QAAQ;AACR,yBAAyB,GAAG,KAAK,yBAAyB,EAAE,EAAE;AAC9D,mBAAmB,yBAAyB,EAAE,EAAE;AAChD;AACA,MAAM;AACN,oBAAoB,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,EAAE;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C,cAAc,SAAS,OAAO;AACxE;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACzjEA,aAAa,0FAA6B;AAC1C,gBAAgB,8FAA2B;AAC3C,oBAAoB,oHAAuC;AAC3D,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,0GAAoD;;AAEpD;AACA;AACA;;;;;;;;;;;AC1GA,eAAe,mBAAO,CAAC,6DAAU;AACjC,SAAS,mBAAO,CAAC,0EAAO;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;AC3HA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GpB;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,gBAAgB,mBAAO,CAAC,wDAAW;AACnC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,WAAW,mBAAO,CAAC,4DAAa;;AAEhC;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AC7BA,UAAU,m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AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;;AAEA;AACA,SAAS,wBAAwB;AACjC;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,SAAS,WAAW;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AC7Ia;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,YAAY,mBAAO,CAAC,2DAAS;AAC7B,aAAa,mBAAO,CAAC,6DAAU;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,mBAAmB;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,mBAAmB;AACvD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,uBAAuB;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,QAAQ;AAC9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACrJa;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,aAAa,mBAAO,CAAC,6DAAU;AAC/B,UAAU,mBAAO,CAAC,uDAAO;;AAEzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,0BAA0B;AAC7C,mBAAmB,0BAA0B;AAC7C,mBAAmB,0BAA0B;AAC7C;AACA,IAAI;AACJ;AACA,mBAAmB,0BAA0B;AAC7C,mBAAmB,0BAA0B;AAC7C,mBAAmB,0BAA0B;AAC7C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACrDa;;AAEb,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA,UAAU;AACV;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,WAAW;AACX;AACA;;AAEA,kBAAkB,OAAO;AACzB,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,WAAW;AACX;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA,kBAAkB,yBAAyB;AAC3C;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;;;;;;;;;;;AC/PA,oBAAoB,mBAAO,CAAC,mFAAqB;AACjD,aAAa,mBAAO,CAAC,4EAAmB;;AAExC,SAAS,mBAAO,CAAC,6DAAU;;AAE3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B,GAAG,gCAAgC,GAAG,wBAAwB;AACxF,2BAA2B,GAAG,qBAAqB;;;;;;;;;;;ACzCnD,SAAS,mBAAO,CAAC,6EAAO;AACxB,kBAAkB,mBAAO,CAAC,+DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,+EAAiB;AACtC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;ACnKA,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;AACA;AACA;AACA,SAAS,mBAAO,CAAC,6EAAO;AACxB;AACA,kBAAkB,mBAAO,CAAC,+DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,WAAW;AACpC;AACA,oBAAoB,yBAAyB;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GnB;;AAEb;;AAEA,mBAAmB,gGAAkC;AACrD,iBAAiB,mBAAO,CAAC,2EAAkB;AAC3C,gBAAgB,mBAAO,CAAC,oDAAS;AACjC,iBAAiB,mBAAO,CAAC,iFAAkB;AAC3C,kBAAkB,mBAAO,CAAC,6EAAmB;;AAE7C;AACA,cAAc,mBAAO,CAAC,2EAAe;AACrC,iBAAiB,mBAAO,CAAC,iFAAkB;;;;;;;;;;;;ACZ9B;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,WAAW;AAC7B,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;;;;;;;;;;;AC5Xa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AClba;;AAEb;;AAEA,aAAa,mBAAO,CAAC,sEAAQ;AAC7B,cAAc,mBAAO,CAAC,wEAAS;AAC/B,aAAa,mBAAO,CAAC,sEAAQ;AAC7B,gBAAgB,mBAAO,CAAC,4EAAW;;;;;;;;;;;;ACPtB;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B,YAAY,mBAAO,CAAC,mEAAU;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB,wCAAwC;AACxC,gBAAgB;;AAEhB,sBAAsB,iBAAiB;AACvC;;AAEA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACjLa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,cAAc;AACpB,MAAM,cAAc;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACz6Ba;;AAEb;;AAEA,WAAW,mBAAO,CAAC,uDAAS;AAC5B,YAAY,mBAAO,CAAC,wEAAS;AAC7B,YAAY,mBAAO,CAAC,kEAAS;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,QAAQ,mBAAO,CAAC,kGAAyB;AACzC,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC7MY;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,gEAAW;AAClC,YAAY,mBAAO,CAAC,mEAAU;AAC9B,aAAa,mBAAO,CAAC,qEAAW;AAChC,WAAW,mBAAO,CAAC,oDAAS;AAC5B;;AAEA,cAAc,mBAAO,CAAC,iEAAO;AAC7B,gBAAgB,mBAAO,CAAC,6EAAa;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,0CAA0C;AACrE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClPa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;;AAEb,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACxHa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;;AAExB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/Ka;;AAEb,WAAW,mBAAO,CAAC,uDAAS;AAC5B,aAAa,mBAAO,CAAC,qEAAW;AAChC,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA,cAAc,mBAAO,CAAC,oEAAO;AAC7B,gBAAgB,mBAAO,CAAC,gFAAa;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,UAAU,cAAc;AACxB,UAAU,sBAAsB;AAChC,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gCAAgC;AAC9D;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,wBAAwB;AAClC,UAAU,4BAA4B;AACtC,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACxHa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,QAAQ;AAClB;AACA,UAAU,aAAa;AACvB,UAAU,OAAO;AACjB,UAAU,aAAa;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;;AAEA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9Fa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,qBAAqB;AAC/B,UAAU,oBAAoB;AAC9B,UAAU,iBAAiB;AAC3B,UAAU,cAAc;AACxB,UAAU,cAAc;AACxB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;AC3wBa;;AAEb;AACA,SAAS,mBAAO,CAAC,uEAAO;AACxB,gBAAgB,mBAAO,CAAC,4EAAqB;AAC7C,eAAe,mBAAO,CAAC,4FAA2B;;AAElD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;;AAEA;AACA;;AAEA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACxHA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;;;;AChfA,aAAa,0FAA6B;AAC1C,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;;AAEA;;;;;;;;;;;AC5CA,+GAAe,GAAG,IAAqC,CAAC,iCAAO,EAAE,oCAAC,CAAC;AAAA;AAAA;AAAA,kGAAC,CAAC,KAAK,EAA6E,CAAC,kBAAkB,aAAa,gBAAgB,+BAA+B,WAAW,4FAA4F,WAAW,kEAAkE,4DAA4D,YAAY,IAAI,kBAAkB,yBAAyB,0DAA0D,kBAAkB,sBAAsB,yCAAyC,UAAU,cAAc,yBAAyB,oBAAoB,IAAI,SAAS,UAAU,oCAAoC,cAAc,IAAI,yCAAyC,SAAS,0CAA0C,0FAA0F,2HAA2H,qBAAM,EAAE,qBAAM,UAAU,qBAAM,CAAC,qBAAM,wMAAwM,8DAA8D,uDAAuD,iNAAiN,0BAA0B,4BAA4B,KAAK,KAAK,gDAAgD,mFAAmF,sBAAsB,KAAK,kCAAkC,iDAAiD,KAAK,GAAG,mBAAmB,8HAA8H,oIAAoI,iDAAiD,qBAAqB,uBAAuB,eAAe,0BAA0B,GAAG,wBAAwB,yCAAyC,oBAAoB,KAAK,gDAAgD,4DAA4D,qBAAqB,OAAO,EAAE,oBAAoB,KAA0B,qBAAqB;;AAEhpF;;;;;;;;;;;ACFY;AACZ,aAAa,0FAA6B;AAC1C,gBAAgB,8FAA2B;AAC3C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,WAAW;AACtD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;;AAEzB;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AC9FA;;AAEA,aAAa,mBAAO,CAAC,kEAAc;AACnC,cAAc,mBAAO,CAAC,oEAAe;AACrC,WAAW,mBAAO,CAAC,8DAAY;AAC/B,cAAc,mBAAO,CAAC,oEAAe;AACrC,YAAY,mBAAO,CAAC,gEAAa;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACda;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;;AAEA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,oBAAoB;AACpC;AACA;;AAEA;AACA;;;;;;;;;;;;AC3Fa;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,oBAAoB;AAC/C;;AAEA,cAAc,gBAAgB;AAC9B;AACA;;AAEA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AC9Ca;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,+DAAU;;AAE/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjJa;;AAEb,iGAAiC;AACjC,uGAAqC;AACrC,uGAAqC;AACrC,uGAAqC;AACrC,uGAAqC;;;;;;;;;;;;ACNxB;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,gBAAgB,mBAAO,CAAC,mEAAU;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA,QAAQ,cAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,6DAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5Ba;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,gBAAgB,mBAAO,CAAC,mEAAU;AAClC,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxGa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;;AAE9B,aAAa,mBAAO,CAAC,6DAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB,gDAAgD;AAChD;AACA,4BAA4B;AAC5B;AACA,kDAAkD;AAClD;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzUa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;;;;;;;;;;;AChDD;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA,IAAI;AACJ,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;;;;;;;;;;;ACrRH;;AAEb,WAAW,mBAAO,CAAC,uDAAS;AAC5B,YAAY,mBAAO,CAAC,4FAA2B;AAC/C,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChHA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA,SAAS,WAAW;;AAEpB;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BY;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,mBAAO,CAAC,wDAAW;AAClC,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACjJA,SAAS,mBAAO,CAAC,2EAAO;AACxB,cAAc,mBAAO,CAAC,oDAAS;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;;AAEA;;AAEA;AACA,SAAS,OAAO;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;;AAEA;;AAEA,SAAS,OAAO;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AClHA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;ACr3GhC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACVa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA,IAAI;AACJ,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzDA,gFAA8B;;;;;;;;;;;;ACA9B;AACA;;AAEa;;AAEb,WAAW,mBAAO,CAAC,uDAAS;;AAE5B,8GAA8C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,qBAAqB;;AAErB,gBAAgB;AAChB;AACA,CAAC;;AAED;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,oBAAoB;;AAEpB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC1HD;AACA;;AAEa;;AAEb,UAAU,mBAAO,CAAC,uDAAS;;AAE3B;AACA;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;ACxFa;;AAEb;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,kEAAgB;AAClC,cAAc,mBAAO,CAAC,oEAAgB;AACtC,aAAa,0FAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCa;;AAEb,WAAW,mBAAO,CAAC,qDAAQ;AAC3B,YAAY,mBAAO,CAAC,8DAAc;AAClC,cAAc,mBAAO,CAAC,2DAAW;AACjC,cAAc,mBAAO,CAAC,oEAAgB;AACtC,aAAa,mBAAO,CAAC,oDAAQ;AAC7B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AACb;AACA;AACA;AACA,WAAW,mBAAO,CAAC,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB;AAC7B;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE;AAC1B;AACA;AACA;AACA,uBAAuB,IAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,gBAAgB,EAAE;AAClB,qCAAqC,GAAG;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8BAA8B;AACnE;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;;;;;;;;;;;ACnnBpB,iGAAuC;AACvC,2GAA0C;;;;;;;;;;;ACD1C,aAAa,0FAA6B;;AAE1C,sBAAsB,mBAAO,CAAC,qEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,6EAAoB;AAClD,WAAW,mBAAO,CAAC,6DAAQ;AAC3B,eAAe,mBAAO,CAAC,+DAAa;;AAEpC;AACA,aAAa,qBAAM,WAAW,qBAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAM,aAAa,qBAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAM,YAAY,qBAAM;AAC9B,eAAe,qBAAM;AACrB,IAAI,SAAS,qBAAM;AACnB,eAAe,qBAAM;AACrB,IAAI,SAAS,qBAAM;AACnB,eAAe,qBAAM;AACrB,IAAI;AACJ,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,qBAAM;AAC5B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;ACrHA;AACA;AACA,IAAI,qBAAM,YAAY,qBAAM;AAC5B;AACA,EAAE,SAAS,qBAAM,YAAY,qBAAM;AACnC;;AAEA;AACA,EAAE;AACF;AACA;AACA;;;;;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+DAA+D;AAC/D;AACA;AACA;;;;;;;;;;;AClBA,UAAU,mBAAO,CAAC,8DAAiB;AACnC,gBAAgB,mBAAO,CAAC,wDAAW;AACnC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,aAAa,0FAA6B;;AAE1C,sBAAsB,mBAAO,CAAC,qEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,6EAAoB;AAClD,eAAe,mBAAO,CAAC,+DAAa;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA,sBAAsB,UAAU;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACxGA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;ACZa;;AAEb;AACA;AACA;AACA;AACA,qBAAqB;AACrB,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;AC3CA,wHAAkD;AAClD,2HAAoD;;AAEpD,sBAAsB;AACtB;AACA;;AAEA,qBAAqB;AACrB;AACA;;;;;;;;;;;ACTA,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;ACr3GhC,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,UAAU,mBAAO,CAAC,uDAAO;AACzB,UAAU,mBAAO,CAAC,uDAAO;AACzB,SAAS,mBAAO,CAAC,6EAAO;AACxB,UAAU,mBAAO,CAAC,kEAAgB;AAClC,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxGA,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,UAAU,mBAAO,CAAC,uDAAO;AACzB,UAAU,mBAAO,CAAC,uDAAO;AACzB,SAAS,mBAAO,CAAC,6EAAO;AACxB,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,UAAU,mBAAO,CAAC,kEAAgB;AAClC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvFA,SAAS,mBAAO,CAAC,6EAAO;AACxB,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,0FAA6B;AAC1C,aAAa,qBAAM,WAAW,qBAAM;;AAEpC;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,mBAAmB;AACnB,4BAA4B;AAC5B;AACA,8BAA8B,kBAAkB;AAChD;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;;;;;;;;;;;ACjDY;;AAEZ;AACA;AACA;AACA,iBAAiB,mBAAO,CAAC,4DAAa;AACtC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;AACA;AACA,aAAa,qBAAM,WAAW,qBAAM;AACpC;AACA;AACA,yDAAyD;AACzD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB;AACpB,EAAE,sBAAsB;AACxB,EAAE;AACF,EAAE,kBAAkB;AACpB,EAAE,sBAAsB;AACxB;AACA;AACA,gDAAgD,qBAAM;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,qBAAM;AACtD;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;;;;;;;;;;;AC3Ga;;AAEb,gDAAgD,0DAA0D,2CAA2C;;AAErJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;;;AAGF;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,oBAAoB;;;;;;;;;;;;AC9HpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,mBAAO,CAAC,sFAAoB;AAC3C,eAAe,mBAAO,CAAC,sFAAoB;AAC3C,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;AC7HD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;AACA,gBAAgB,mBAAO,CAAC,wFAAqB;AAC7C,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,uFAA8B;AACvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,4GAA2B;AAChD;;AAEA,aAAa,gFAAwB;AACrC,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,8GAAgC;AACzD,kBAAkB,mBAAO,CAAC,sGAA4B;AACtD,eAAe,mBAAO,CAAC,kGAA0B;AACjD;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,mFAAmF;AAC5J;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qHAAwC;AAChF;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,+FAA+F;AAC/F,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA,4FAA4F;AAC5F,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,qHAAwC;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mBAAO,CAAC,oHAAmC;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA,mDAAmD,+DAA+D;AAClH;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,wGAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;;;;;;;;;;;AClgCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,kFAAkB;AACvC,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,oEAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,4GAA2B;AAChD;;AAEA,aAAa,gFAAwB;AACrC,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,sGAA4B;AACtD,eAAe,mBAAO,CAAC,kGAA0B;AACjD;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,sDAAsD;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;;;;;;;;;;AChoBa;;AAEb;AACA,4CAA4C,2BAA2B,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;AAC/N,+BAA+B,uCAAuC;AACtE,qCAAqC,+DAA+D,sCAAsC,0BAA0B,+CAA+C,yCAAyC,uEAAuE;AACnU,eAAe,mBAAO,CAAC,iGAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA,yFAAyF;AACzF;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;ACnLa;;AAEb,2CAA2C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACvU,iCAAiC,gBAAgB,sBAAsB,OAAO,uDAAuD,6DAA6D,4CAA4C,oKAAoK,mFAAmF,KAAK;AAC1e,4CAA4C,2BAA2B,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;AAC/N,kDAAkD,0CAA0C;AAC5F,4CAA4C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD;AAC/P,8DAA8D,sEAAsE,8DAA8D,kDAAkD,iBAAiB,GAAG;AACxQ,+BAA+B,uCAAuC;AACtE,qCAAqC,+DAA+D,sCAAsC,0BAA0B,+CAA+C,yCAAyC,uEAAuE;AACnU,eAAe,mBAAO,CAAC,kDAAQ;AAC/B;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,yDAAyD,cAAc;AACvE;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA,CAAC;;;;;;;;;;;ACtLY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/FA;AACA;;AAEa;;AAEb,iCAAiC,0GAAgC;AACjE;AACA;AACA;AACA;AACA;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrFA;AACA;AACA;;;;;;;;;;;;ACFA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0GAAgC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,+BAA+B,mBAAO,CAAC,iGAAiB;AACxD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;;;;;;;;;;ACrFa;;AAEb,4BAA4B,0GAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrBA,sGAA+C;;;;;;;;;;;;;ACA/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA,OAAO,mBAAO,CAAC,iBAAI;AACnB;AACA,cAAc,mBAAO,CAAC,4BAAe;AACrC,aAAa,mBAAO,CAAC,6CAAM;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA,yBAAyB,wEAAoB;;AAE7C;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,6DAAQ;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,0BAA0B;AAC1B;AACA,uCAAuC,iDAAiD;AACxF,WAAW;AACX,yCAAyC,SAAS;AAClD;AACA;AACA,SAAS;AACT;AACA,0BAA0B;AAC1B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,2BAA2B,qBAAqB;AACpF;AACA,iCAAiC,2BAA2B;AAC5D;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA,IAAI;AACJ,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB;AACxB,mBAAmB;;AAEnB;AACA;AACA,sCAAsC;AACtC;AACA,8DAA8D,SAAS,kBAAkB;AACzF,QAAQ,8BAA8B;AACtC;AACA,mCAAmC,SAAS,oBAAoB;AAChE;AACA,MAAM;AACN;AACA,qBAAqB,SAAS,gBAAgB;AAC9C;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,MAAM,YAAY;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA,2BAA2B;;AAE3B,gBAAgB;AAChB;;AAEA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU,YAAY;AACtB,uCAAuC;AACvC;AACA;AACA,YAAY,YAAY;AACxB;AACA;;AAEA,MAAM;AACN;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,UAAU,YAAY;AACtB,QAAQ;AACR;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU,YAAY;AACtB;AACA;AACA,GAAG;;AAEH,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC,yCAAyC;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD;AACpD;;AAEA,gCAAgC;AAChC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,iEAAiE;AACnF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG,IAAI;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD,oBAAoB;;AAEvE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,8CAA8C;AAC7E;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oCAAoC;AACpC,iBAAiB,sBAAsB;AACvC,UAAU;AACV;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,oBAAoB,oBAAoB,gBAAgB;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC;AAClC,8BAA8B;;AAE9B;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;;AAEA,wCAAwC;;AAExC;AACA,8DAA8D;AAC9D;AACA,0BAA0B;AAC1B;AACA,UAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;;AAEA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C,6BAA6B,mBAAmB;AAChD,4BAA4B,mBAAmB;AAC/C,yBAAyB,gBAAgB,gBAAgB;;AAEzD;;AAEA,yBAAyB;AACzB;AACA,6BAA6B;AAC7B;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,wBAAwB,sDAAsD;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA,KAAK;AACL,GAAG;;AAEH;AACA,sBAAsB,0CAA0C;;AAEhE;AACA;;AAEA;;AAEA,qBAAqB;AACrB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,qDAAqD,EAAE,gCAAgC,KAAK,6CAA6C,KAAK;AAC9I;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2EAA2E;AAC3E,2EAA2E;AAC3E;AACA,OAAO,wBAAwB;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB;AACnB,wDAAwD,6BAA6B;AACrF;AACA,qBAAqB;AACrB;AACA;;AAEA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,qCAAqC;AACrC;AACA,sCAAsC;AACtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,0DAA0D;AAC1D,cAAc;AACd;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iBAAiB,iDAAiD;AAClE;AACA;;AAEA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;;AAEA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,qBAAqB,8BAA8B;;AAEnD,kBAAkB;AAClB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,gBAAgB;;AAEnC;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA;AACA,gBAAgB,gBAAgB;AAChC,iBAAiB,gBAAgB;AACjC,mBAAmB,gBAAgB;AACnC,eAAe,gBAAgB;AAC/B,qBAAqB,gBAAgB;;;;;;;;;;;;ACrxCzB;AACZ,aAAa,gFAAwB;AACrC,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,mBAAO,CAAC,wDAAW;;AAElC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM,OAAO;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AClKA;AACA;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChEA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uBAAuB,gBAAgB;AACvC;AACA;;AAEA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AChFA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,cAAc,mBAAO,CAAC,+CAAO;AAC7B,eAAe,mBAAO,CAAC,iDAAQ;AAC/B,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;;;;;;;;;;;ACdnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,qDAAU;AAC/B,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACtIA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,qDAAU;AAC/B,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACxDA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAS,uFAA8B;AACvC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA,kBAAkB,mBAAO,CAAC,2GAAyC;AACnE,kBAAkB,mBAAO,CAAC,2GAAyC;AACnE,gBAAgB,mBAAO,CAAC,uGAAuC;AAC/D,mBAAmB,mBAAO,CAAC,6GAA0C;AACrE,qBAAqB,mBAAO,CAAC,iHAA4C;AACzE,kBAAkB,mBAAO,CAAC,uIAAuD;AACjF,kBAAkB,mBAAO,CAAC,6HAAkD;;AAE5E;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;;;;;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,0FAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;ACvSA,iBAAiB,mBAAO,CAAC,8EAAmB;;AAE5C;;;;;;;;;;;ACFA,eAAe,mBAAO,CAAC,6EAAiB;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB,aAAa,uBAAuB,8BAA8B,qBAAqB,mCAAmC,aAAa,qBAAqB,mCAAmC,oBAAoB;AACrQ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,6EAA6E;AAC7E;AACA;AACA,oDAAoD;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,8EAA8E;AAC9E;AACA;AACA,qDAAqD;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtMA,eAAe,mBAAO,CAAC,6EAAiB;AACxC,UAAU,mBAAO,CAAC,qEAAa;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,uBAAuB;;AAEvB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;AACzB,2CAA2C;AAC3C,2CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC7WA,YAAY,mBAAO,CAAC,mEAAY;AAChC,iBAAiB,mBAAO,CAAC,6EAAiB;AAC1C,UAAU,mBAAO,CAAC,qEAAa;AAC/B,aAAa,mBAAO,CAAC,6EAAiB;AACtC,mBAAmB,mBAAO,CAAC,iFAAmB;;AAE9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B;;AAE9B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,kDAAkD,QAAQ;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wEAAwE;;AAExE;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,iBAAiB;AAC7B,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oEAAoE;AACpE,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA,6BAA6B;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,wBAAwB;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACr8BA,YAAY,mBAAO,CAAC,qEAAa;AACjC;;AAEA;AACA,iBAAiB,MAAK;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,aAAa;AAC3B;AACA;AACA;AACA,eAAe;AACf,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,aAAa,YAAY;AACzB,aAAa,WAAW;AACxB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA,aAAa,OAAO;AACpB,cAAc,eAAe;AAC7B,cAAc,cAAc;AAC5B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc;AACd;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AChPA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;;;AAG9B;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;AC1ID;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B,cAAc,WAAW;AACzB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,+BAA+B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,UAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvSA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,iBAAI;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,4EAAe;AAC7C;AACA,2DAA2D,qBAAqB;AAChF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ,kDAAkD,EAAE;AACpD;AACA,IAAI;AACJ,IAAI;AACJ;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,6BAA6B;AAC7B,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B,gCAAgC;AAChC,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qEAAqE;AACzG;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,aAAa,gHAAgH;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO;AAChB,QAAQ,OAAO;AACf;AACA;AACA,KAAK;AACL,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,WAAW;AACX;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,cAAc;AACd;AACA,KAAK;AACL,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA,0DAA0D,4CAA4C;AACtG,SAAS;AACT;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yDAAyD;AAC7D;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,IAAI,0DAA0D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wCAAwC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kDAAkD;AAClD,kEAAkE;AAClE,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4CAA4C;AAC5C,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oDAAoD;AAC/D,WAAW,0BAA0B;AACrC,WAAW,EAAE,YAAY;AACzB,WAAW,+BAA+B;AAC1C,WAAW,cAAc;AACzB,UAAU,eAAe;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,UAAU,cAAc;AACxB,UAAU,4DAA4D;AACtE;AACA;AACA;AACA,IAAI;AACJ,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,2EAA2E;AAC3E,iFAAiF;AACjF,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAkD;AACtE;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,uCAAuC,0CAA0C;AACjF;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,cAAc,yCAAyC;AACvD,MAAM;AACN,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH,uCAAuC;AAC7J;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yCAAyC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,6CAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,UAAU,sBAAsB;AACzE;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sCAAsC;AACzD;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,iBAAI;AACzB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,gEAAgE;AAChE,4DAA4D;AAC5D,0DAA0D;AAC1D,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,yBAAyB;AACzB;AACA,2CAA2C;AAC3C;AACA,yCAAyC;AACzC,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,mBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,cAAc;AACd;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,sCAAsC;AACtC,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,YAAY;AACZ;AACA,+CAA+C;AAC/C,4CAA4C;AAC5C,uBAAuB;AACvB,2EAA2E;AAC3E,gBAAgB;AAChB,cAAc,MAAM;AACpB,yEAAyE;AACzE,aAAa;AACb,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,yBAAyB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAM;AAC7B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,gCAAgC;AAChC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kDAAkD;AAClD;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ,4BAA4B;AACpC;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR,mBAAmB;AACnB;AACA;AACA;AACA;AACA,iDAAiD,eAAe;AAChE,iDAAiD,eAAe;AAChE,iDAAiD,gBAAgB;AACjE,iDAAiD,gBAAgB;AACjE,kDAAkD,cAAc;AAChE,kDAAkD,cAAc;AAChE,kDAAkD,cAAc;AAChE;AACA;AACA;AACA;AACA,wDAAwD;AACxD,yDAAyD;AACzD,0CAA0C;AAC1C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,8CAA8C,gDAAgD;AAC9F;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IAA8I,uFAAuF;AACrO,mDAAmD,2CAA2C,gDAAgD,uFAAuF;AACrO,gJAAgJ,uFAAuF;AACvO,gLAAgL,uFAAuF;AACvQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mLAAmL;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO,4BAA4B;AACnC;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,kBAAkB;AAClB;AACA;AACA;AACA;AACA,gDAAgD,eAAe;AAC/D,gDAAgD,eAAe;AAC/D,gDAAgD,gBAAgB;AAChE,gDAAgD,gBAAgB;AAChE,iDAAiD,cAAc;AAC/D,iDAAiD,cAAc;AAC/D,iDAAiD,cAAc;AAC/D;AACA;AACA;AACA;AACA,uDAAuD;AACvD,wDAAwD;AACxD,yCAAyC;AACzC;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAA6C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qCAAqC;AACrC;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,6CAA6C;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,gDAAgD,QAAQ;AACxD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C,qCAAqC,yBAAyB;AAC9D,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,sCAAsC,yBAAyB;AAC/D,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,2CAA2C,UAAU,wBAAwB;AAC7E;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,2CAA2C,UAAU,wBAAwB;AAC7E;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAA6C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,oBAAoB;AACpB;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,gQAAgQ;AAChQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qCAAqC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qBAAqB;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+dAA+d,+BAA+B;AAC9f;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,gBAAgB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,KAAK,IAA6B;AAClC;AACA,GAAG,KAAK,EAEN;AACF;AACA,CAAC;;;;;;;;;;;;AC14RD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,UAAU;AACvB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,SAAS,qBAAM;AACf,IAAI;AACJ;AACA;AACA,YAAY,qBAAM;AAClB;AACA;AACA;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,wBAAwB,SAAS;AACjC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,kBAAkB,qBAAM;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;;AAGf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,sHAAgD;;AAEhD;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,WAAW;AACX;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,WAAW,UAAU;AACrB;AACA,2HAAsC;;AAEtC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACzkBA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,iBAAiB;AACjB;AACA;;AAEA,oBAAoB;AACpB;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;ACpJa;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,oBAAoB;AACpB,mBAAO,CAAC,oEAAe;AACvB,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,6BAA6B,mBAAO,CAAC,8EAAoB;AACzD,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,kBAAkB,mBAAO,CAAC,wDAAS;AACnC,WAAW,mBAAO,CAAC,uEAAY;AAC/B;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wBAAwB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC;AAChC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC;AAChC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ,IAAI;AACpC,cAAc,mCAAmC,EAAE;AACnD,cAAc,mCAAmC,EAAE;AACnD,cAAc,+BAA+B,EAAE;AAC/C,cAAc,+BAA+B,EAAE;AAC/C,cAAc,+BAA+B,EAAE;AAC/C,cAAc,mCAAmC,EAAE;AACnD,cAAc,mCAAmC,EAAE;AACnD,cAAc,QAAQ,IAAI,QAAQ;AAClC,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,+BAA+B;AAC/B;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB;;;;;;;;;;;;AC1lBP;AACb;AAC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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjCa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTa;;AAEb;AACA;AACA,cAAc,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AACjF;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTa;;AAEb;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5Da;;AAEb;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACba;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB;AAClB,mBAAO,CAAC,oEAAe;AACvB,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,kBAAkB,mBAAO,CAAC,wDAAS;AACnC,WAAW,mBAAO,CAAC,uEAAY;AAC/B,gBAAgB,mBAAO,CAAC,gDAAmB;AAC3C;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,oBAAoB;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mCAAmC;AAC1E;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC;AACA;AACA,gBAAgB,OAAO,GAAG,OAAO;AACjC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU,GAAG;AACzC,gBAAgB,eAAe,GAAG,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC,gBAAgB,GAAG,IAAI,GAAG;AAC1B;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC;AACA;AACA,gBAAgB,OAAO,GAAG,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA,gCAAgC,GAAG,IAAI;AACvC,kBAAkB,oBAAoB,IAAI,GAAG;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,GAAG,IAAI;AACvC,oBAAoB,eAAe,EAAE,cAAc;AACnD,gBAAgB,eAAe,EAAE,cAAc;AAC/C,gBAAgB,IAAI,EAAE,GAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,IAAI,EAAE;AAC9B,gBAAgB,eAAe,EAAE,GAAG;AACpC,gBAAgB,eAAe,EAAE,GAAG;AACpC,gBAAgB,IAAI,EAAE,GAAG;AACzB,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;;;;;;;;;;;;AC33BL;AACb;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,wCAAU;AAC/B,aAAa,mBAAO,CAAC,gDAAc;AACnC,aAAa,mBAAO,CAAC,sCAAS;;;;;;;;;;;;AClBjB;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,KAAK,EAAE;AAC3B,cAAc,iBAAiB,EAAE,aAAa;AAC9C,cAAc,iBAAiB,EAAE,aAAa;AAC9C,cAAc,KAAK,EAAE,aAAa;AAClC;AACA;;;;;;;;;;;;AClBa;AACb;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ACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,UAAU;AACV;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACvDe;AACf;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACNuC;;AAExB,oCAAoC,qDAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yDAAS;AACrB,YAAY,yDAAS;AACrB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC5Be;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACrBe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACF2B;AACU;AACV;AACU;AACM;AACC;AACD;AACN;;AAEtB;AACf,6BAA6B,mDAAO;AACpC;AACA,8BAA8B,mDAAG;AACjC,qBAAqB,mDAAG;AACxB;AACA;AACA;AACA,eAAe,mDAAG,CAAC,2DAAW;AAC9B,eAAe,mDAAG;AAClB;AACA;;AAEO,6CAA6C,kDAAM;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,4CAA4C,kDAAM;AACzD;AACA,gDAAgD,sDAAM;AACtD,qBAAqB,wDAAQ;AAC7B,qBAAqB,wDAAQ;AAC7B;AACA;AACA;AACA;AACA,EAAE,2DAAW,2BAA2B,0DAAgB;AACxD,MAAM,wDAAQ;AACd;AACA;;;;;;;;;;;;;;;;;AC9C2D;;AAE3D;AACA;AACe;AACf;AACA;AACA;;AAEA;;AAEA,oCAAoC,sDAAgB,GAAG,wDAAc;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpDe;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACZuC;AACJ;;AAEpB;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA,WAAW,uDAAO;AAClB;AACA;AACA;;AAEO,kCAAkC,qDAAS;AAClD,kBAAkB,qDAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC,IAAI;AACJ,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACtD2C;;AAEpC;;AAEA;AACA;;AAEP;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY;AACrD;;AAEA;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,oDAAoD;AAC3G;;AAEA;AACA;AACA,YAAY,2BAA2B,EAAE,eAAe,IAAI,eAAe,IAAI,eAAe,EAAE,qBAAqB,EAAE,GAAG;AAC1H;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,cAAc,2BAA2B,EAAE,eAAe,IAAI,qBAAqB,KAAK,qBAAqB,GAAG,qBAAqB,EAAE,GAAG;AAC1I;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC3Y2C;AACyB;AACzB;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,0CAAG,OAAO,qDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAO;AACzC;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,uBAAuB,kDAAM,CAAC,4CAAK;AACzC;AACA,oBAAoB,+CAAQ,YAAY,+CAAQ;AAChD;AACA,GAAG;AACH;AACA,oBAAoB,6CAAM,YAAY,6CAAM;AAC5C;AACA,GAAG;AACH;AACA,iDAAiD,6CAAO;AACxD;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;;;;AC5DD,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACTsD;AACE;AACJ;;;;;;;;;;;;;;;;;;;;;;;;ACFT;AACO;AACP;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,0CAAG,OAAO,qDAAU;AACzC;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC,6CAAO;AACxC;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,6CAAO;AACvB;AACA;;AAEA,sDAAM,WAAW,kDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;;;;AC1HM;AACA;;;;;;;;;;;;;;;;ACDP,YAAY;;AAEZ;AACA,8CAA8C,KAAK,OAAO;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA,mFAAmF,OAAO;AAC1F;AACA,gDAAgD,OAAO;AACvD,GAAG;AACH;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;;AAEA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B;AAC/D;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;ACnFxB,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;;;;;;;;ACAS;AACQ;AACD;AACuC;AAC9C;AACF;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,wBAAwB;AAC9C;;AAEA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA,mBAAmB;AACnB,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mDAAU;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,wDAAM;AACV,wCAAwC,0DAAiB;AACzD,sCAAsC,0DAAiB;AACvD,IAAI,sDAAM;AACV,IAAI,0DAAa;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,uDAAO;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,wDAAM;AACV,IAAI,mDAAO;AACX,IAAI,uDAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA,QAAQ,0DAAa;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA,QAAQ,uDAAO;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C,qBAAqB,QAAQ;AACvE,gBAAgB,OAAO;AACvB;AACA,QAAQ,0DAAa;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,wDAAO;AACnB;;AAEA,oCAAoC,iDAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA,oEAAoE;AACpE,2DAA2D;AAC3D,yBAAyB,wDAAO,yCAAyC;AACzE;AACA;AACA;AACA;AACA,YAAY,iDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA,uEAAuE,wDAAQ;AAC/E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACjMe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,cAAc,qDAAqD;AACnE,aAAa,oDAAoD;AACjE,iBAAiB,wDAAwD;AACzE,aAAa,oDAAoD;AACjE,QAAQ,+CAA+C;AACvD,QAAQ,+CAA+C;AACvD,SAAS,gDAAgD;AACzD,SAAS,gDAAgD;AACzD,QAAQ;AACR,GAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3BoC;AACoB;;AAExD,6BAAe,oCAAS;AACxB;AACA,kBAAkB,wDAAM,4BAA4B,mDAAO,EAAE,0DAAiB;AAC9E;AACA,qCAAqC,mDAAO,EAAE,0DAAiB;AAC/D,IAAI;AACJ;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,wDAAM;AACxB;AACA,+BAA+B,mDAAO,EAAE,0DAAiB;AACzD,4BAA4B,mCAAmC;AAC/D;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACO,oBAAoB;AACpB,2BAA2B;;AAE3B;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACZ2B;;AAE3B,UAAU,mDAAG;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACVP,YAAY;AACZ,YAAY;AACZ;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA,GAAG,gBAAgB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACnK2B;;AAE3B,UAAU,mDAAG;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACVA;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;;;;ACPqD;AACxB;;AAE7B;AACA;AACA;AACA,WAAW,oDAAI;AACf;AACA,KAAK;AACL;AACA;;AAEe;AACf;AACA,eAAe,kDAAS;AACxB,SAAS,oDAAI;AACb;AACA,GAAG;AACH;;AAEO,mBAAmB,4CAAQ;AAC3B,mBAAmB,4CAAQ;;;;;;;;;;;;;;;;ACrBlC,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR0C;AACI;AACI;AACN;AACF;AACA;AACS;;;;;;;;;;;;;;;;ACNnD;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;ACP6B;;AAE7B;AACA,0BAA0B,oDAAI;AAC9B;AACA;;AAEA,iEAAe,yBAAyB,EAAC;;AAElC;;AAEA;;;;;;;;;;;;;;;;ACXP,6BAAe,oCAAS;AACxB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;;AAEA,4EAA4E,OAAO;AACnF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;ACvCqC;AACA;AACJ;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA,6CAA6C,wDAAQ;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC,aAAa,uDAAQ;AACrB,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAM;AACnC,6BAA6B,sDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA;;;;;;;;;;;;;;;;ACnGA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA,sBAAsB;;AAEtB,6BAAe,sCAAW;AAC1B;AACA;AACA;;;;;;;;;;;;;;;;;;ACRqC;AACJ;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA,iBAAiB,wDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,gBAAgB;AACtD,wDAAwD,OAAO;AAC/D;AACA,2DAA2D,sDAAM;AACjE,2DAA2D,sDAAM;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC,OAAO;AAC5C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACpHqC;AACA;AACJ;AACI;;AAErC,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA,iBAAiB,wDAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,uDAAQ,QAAQ,6CAAC,EAAE,6CAAC;AACxD,2BAA2B,OAAO;AAClC;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;;AAEA;AACA;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA;AACA,yBAAyB,sDAAM;AAC/B,yBAAyB,sDAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0CAA0C;AAC1C;AACA,uBAAuB,sDAAM;AAC7B,uBAAuB,sDAAM;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;ACnHqC;AACN;AACJ;;AAEpB;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+CAAK;AACrB,cAAc,uDAAQ;AACtB,eAAe,mDAAG;;AAElB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,oBAAoB,gBAAgB;AACpC;;AAEA;AACA;AACA,OAAO;;AAEP,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3JuC;;AAEvC;AACO;AACA;;AAEP;AACA;AACA;AACA;AACA,CAAC;;AAEc;AACf,WAAW,sDAAY;AACvB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjBsD;;AAEtD,6BAAe,oCAAS;AACxB,aAAa,qEAAkB;AAC/B;;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP,gGAAgG;AAChG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACjBA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;;;;;ACNsD;;AAE/C;;AAEP,6BAAe,oCAAS;AACxB,UAAU,qEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAkB,gCAAgC;AAC9F;;;;;;;;;;;;;;;;;ACfsD;;AAEtD,6BAAe,oCAAS;AACxB,UAAU,qEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACVA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,uDAAuD;;AAEhD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9CA;AACA,6BAAe,oCAAS;AACxB,kDAAkD,OAAO;AACzD;AACA,6BAA6B;AAC7B,sCAAsC,QAAQ;AAC9C,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACV+C;AACM;AACN;;AAE/C,iEAAe;AACf;AACA;AACA;AACA,OAAO,yDAAa;AACpB;AACA;AACA;AACA;AACA,iBAAiB,6DAAa;AAC9B,OAAO,yDAAa;AACpB,OAAO,4DAAgB;AACvB;AACA;AACA,CAAC,EAAC;;;;;;;;;;;;;;;;AClBF,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACFqC;AACM;AACM;AACE;AACV;AACE;AACU;AAChB;;AAErC;AACA;;AAEA,6BAAe,oCAAS;AACxB,gFAAgF,oDAAQ,GAAG,2DAAW;AACtG;AACA;AACA;AACA,iDAAiD,oDAAQ,GAAG,8DAAc;AAC1E;AACA;AACA;;AAEA;AACA,gBAAgB,+DAAe;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,uDAAW;;AAEzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B,0DAAU;;AAEpC;AACA;;AAEA;AACA;AACA,mDAAmD,gEAAc;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,uEAAuE;AACvE,sIAAsI;AACtI,sEAAsE;AACtE;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mCAAmC,+DAAe;AAClD,gDAAgD,wDAAQ;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnJqC;;AAErC,6BAAe,oCAAS;AACxB,sBAAsB,wDAAQ;AAC9B;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB,yDAAyD,wDAAQ,qBAAqB,wDAAQ;AAC9F;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB;AACA,qBAAqB,wDAAQ,QAAQ,wDAAQ;AAC7C;;;;;;;;;;;;;;;;;ACLO;AACP;AACA;;AAEO;AACP;AACA;AACA;;;;;;;;;;;;;;;;;ACPA,6BAAe,oCAAS;AACxB;AACA;AACA,qBAAqB;AACrB;;AAEO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;ACnFO;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACXA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACFA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACdA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACXA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPoC;AACF;AACY;AACF;AACV;AACF;AACE;AACA;AACU;AACI;AACV;AACF;AACM;;AAE3B;AACf;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,iDAAU;AACnB,QAAQ,gDAAS;AACjB,aAAa,qDAAc;AAC3B,cAAc,sDAAe;AAC7B,QAAQ,gDAAS;AACjB,OAAO,+CAAQ;AACf,QAAQ,gDAAS;AACjB,QAAQ,gDAAS;AACjB,aAAa,qDAAc;AAC3B,eAAe,uDAAgB;AAC/B,UAAU,mDAAW;AACrB,SAAS,kDAAU;AACnB;AACA,qBAAqB,qDAAa;AAClC;;;;;;;;;;;;;;;;AC1FA,6BAAe,uCAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,IAAI;AACJ;;;;;;;;;;;;;;;;ACbA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,sCAAW;AAC1B;AACA;AACA,yBAAyB;AACzB,kBAAkB,kCAAkC;AACpD;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7BA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRgD;AACgB;AAChB;AACW;AACF;AACL;AACF;AACR;AACY;AACO;AACJ;AACE;AACQ;AACF;AACI;;;;;;;;;;;;;;;;ACdrE;AACA;AACA;AACA,sBAAsB;;AAEtB,6BAAe,sCAAW;AAC1B;AACA;AACA;;;;;;;;;;;;;;;;;;;ACRoC;AACR;;AAE5B,6BAAe,oCAAS;AACxB,oCAAoC,mDAAG;AACvC;;AAEO;AACP,4BAA4B,kDAAO;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAkB;AAChC,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC1HyC;AACa;AAC1B;AACqB;;AAEjD;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA,gBAAgB,sDAAY;;AAE5B;AACA,mBAAmB,mDAAG;AACtB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,wCAAwC,sDAAY;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,uDAAQ;AAChD;;AAEA;AACA;AACA;;AAEA;AACA,uEAAuE,wDAAQ;AAC/E;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,OAAO;AAChC,UAAU,gEAAkB;AAC5B,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AChFgC;AACJ;AACmB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO;AACP,uBAAuB,qDAAK;;AAE5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,wCAAwC,IAAI,8DAAiB;;AAEjF;AACA,cAAc,OAAO;;AAErB;AACA;;AAEA,6BAAe,oCAAS;AACxB,8BAA8B,mDAAG;AACjC;AACA;;;;;;;;;;;;;;;;;;ACvH2C;AACC;;AAE5C,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA,QAAQ,4DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;ACnDwC;AACiB;;AAEzD,eAAe,UAAU;AACzB,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC,OAAO;AACzC,0CAA0C,qDAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,oCAAoC,MAAM,aAAa,8DAAa;AACzG;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC,uDAAQ;AAC5C;;AAEA;AACA,0CAA0C,uDAAQ;AAClD;;AAEA;AACA,sCAAsC,uDAAQ;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA,sCAAsC,KAAK;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChJ0C;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,iBAAiB;AACjB,cAAc;AACd;;AAEA,mCAAmC,qDAAI;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;AC5OA,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEA,8BAA8B,OAAO;AACrC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7CA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACXmC;AACE;AACI;AACa;;AAEtD,6BAAe,sCAAW;AAC1B,aAAa,oDAAQ;AACrB;AACA;AACA;AACA;AACA,qBAAqB,sDAAY;AACjC,mBAAmB,sDAAY;AAC/B,qBAAqB,sDAAY;AACjC,sBAAsB,sDAAY;AAClC,oBAAoB,sDAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,uDAAQ;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA,4EAA4E,wDAAQ;AACpF;;AAEA;AACA;AACA;;AAEA;AACA,0EAA0E,wDAAQ;AAClF;;AAEA;AACA,4EAA4E,wDAAQ;AACpF;;AAEA;AACA,6EAA6E,wDAAQ;AACrF;;AAEA;AACA,2EAA2E,wDAAQ;AACnF;;AAEA;AACA;;;;;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AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC,IAAI,EAAC;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,cAAc,6CAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,yBAAyB,iDAAK;AAC9B,+BAA+B,uDAAW;;;;;;;;;;;;;;;;ACtDjD,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJiC;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA,yCAAyC;AACzC,4BAA4B;AAC5B;AACA,MAAM,OAAO;AACb;AACA,cAAc,SAAS,sDAAM,SAAS;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA,SAAS;AACT;;;;;;;;;;;;;;;;;AC/DA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzBkC;AACY;;AAE9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,sDAAM,SAAS,GAAG,aAAa,sDAAM,SAAS;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,gCAAgC;AACjE,cAAc,sDAAsD,sDAAM,OAAO;AACjF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,cAAc,qDAAqD,sDAAM,OAAO;AAChF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,sDAAM,SAAS,GAAG,aAAa,sDAAM,SAAS;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,mDAAmD,+CAAQ;AAC3D,mDAAmD,+CAAQ;;;;;;;;;;;;;;;;;;AC9Df;;AAEnD;;AAEA;AACO;AACP;AACA,wBAAwB,mDAAQ,GAAG,yDAAS;AAC5C;;AAEO;AACP,4BAA4B,mDAAQ;AACpC;AACA;AACA,iEAAiE,mDAAQ;AACzE;AACA,SAAS,yDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;ACjB+B;AACJ;AACa;AACX;AACI;AACA;AACA;AACI;AACuB;;AAE5D,6BAAe,oCAAS;AACxB;AACA,wCAAwC,wDAAQ;AAChD,0BAA0B,kDAAM;AAChC,+BAA+B,oDAAK,eAAe,+CAAG,IAAI,kDAAM;AAChE,qBAAqB,gDAAK,GAAG,+CAAG;AAChC,4BAA4B,gDAAI;AAChC,QAAQ,8DAAa,MAAM,uDAAW;AACtC,2BAA2B,mDAAY;AACvC,0FAA0F,kDAAM;AAChG,QAAQ,kDAAM;AACd;;;;;;;;;;;;;;;;ACrBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iEAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC,mBAAmB,EAAC;;;;;;;;;;;;;;;;;ACtErB,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;;AAEzC;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD,IAAI;AACJ;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACnFA,6BAAe,oCAAS;AACxB,mDAAmD;;AAEnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1CA,6BAAe,sCAAW;AAC1B;AACA;AACA,+CAA+C;AAC/C,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJ6B;;AAE7B,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,gDAAI;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACrEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNyD;AA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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,oDAAM;AAClB;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,sDAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wFAAwF,sDAAiB;AACzG;;AAEA;AACA,sDAAsD,kDAAM;AAC5D;;AAEA;AACA;AACA;;AAEA;AACA,gDAAgD,sDAAgB;AAChE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HwE;AAC/B;AACE;AACL;AACL;AACI;AACC;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kEAAkE,0DAAS;AAC3E;AACA;;AAEA,sBAAsB,sDAAW;;AAEjC,2BAA2B,sDAAgB;;AAE3C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf,cAAc,qDAAS,eAAe,oDAAQ;;AAE9C;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,gDAAO;;AAErB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,qDAAS;;AAEvB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,+CAAM;;AAEpB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;ACvGsC;AACL;;AAElB;AACf;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,sDAAsD,kDAAM;AAC5D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iDAAiD,kDAAM;;AAEvD,SAAS,qDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBmB;;AAII;;AAIF;;AAIH;;AAIG;;AAKC;;AAKJ;;AAIG;;AAIE;;AAIA;;AAIC;;AAIL;;AAIG;;AAQG;;AAIQ;;AAQT;;AAIC;;;;;;;;;;;;;;;;;AC7ElB;AACP;AACA;AACA,gCAAgC;AAChC,+CAA+C;AAC/C;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACzB8C;AACG;AACb;AACK;;AAElC;AACP;;AAEA;AACA;AACA,WAAW,oDAAK;AAChB;;AAEA;AACA;AACA,WAAW,0DAAU;AACrB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAa;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEe;AACf,cAAc,0DAAU;;AAExB;AACA,WAAW,oDAAI;AACf;;AAEA,EAAE,+CAAS;;AAEX;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrE+B;AACmB;AACrB;AACqB;AACd;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,QAAQ;AAChC,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ,YAAY,QAAQ;AAC5B,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oDAAK;AACrC,MAAM;AACN,UAAU,oDAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC,qDAAe;AACrD,kBAAkB,iDAAM;AACxB;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,oDAAI;AACtB;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEe;AACf,wBAAwB,2DAAW;AACnC,qBAAqB,oDAAI;AACzB,EAAE,+CAAS;AACX;AACA;;;;;;;;;;;;;;;;AC3Ie;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjBe;AACf;AACA;;;;;;;;;;;;;;;;;;;ACFmC;AACC;;AAE7B;;AAEQ;AACf,kBAAkB,+CAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,+CAAS;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,EAAE,+CAAS;;AAEX;AACA;;;;;;;;;;;;;;;;;;;;;AC7CsC;AACsB;AACxB;;AAEpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP,wBAAwB,oDAAQ,EAAE,oDAAQ;AAC1C;;AAEA;AACA,sCAAsC,oDAAQ,EAAE,oDAAQ;AACxD;AACA;AACA;;AAEA;AACA;AACA;;AAEA,SAAS,qDAAS;AAClB;;AAEe;AACf,qBAAqB,2DAAW;;AAEhC;AACA,WAAW,oDAAI;AACf;;AAEA,EAAE,+CAAS;;AAEX;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;;;ACjDwE;AACpC;;AAErB;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,wDAAS;AACjD;AACA;;AAEA;AACA,wDAAwD,oDAAM;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,gDAAS;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,+CAAS;AAClB;;;;;;;;;;;;;;;;;;;ACxDgC;AACM;AACF;;AAErB;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,oDAAM;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,+CAAS,OAAO,qDAAS;AAClC;;;;;;;;;;;;;;;;;;;;ACvDyC;AACL;AACE;AACL;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf,gBAAgB,0DAAU;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oEAAoE,kDAAM;AAC1E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,+CAAS;;AAEX,SAAS,qDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9D6D;AACpB;AACE;AACL;AACL;AACK;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,sDAAW;;AAEjC,2BAA2B,sDAAgB;;AAE3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ACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,iBAAiB,yDAAS;;AAE1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACxDA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1EA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;ACZqC;AACA;AACC;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA,MAAM;AACN,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,SAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;;AAEA,2CAA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B;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;;;;;;;;;;;;;;;ACdA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;;ACNqC;;AAErC,6BAAe,oCAAS;AACxB;;AAEA,+JAA+J,OAAO;AACtK,yHAAyH,OAAO;AAChI;AACA;AACA;AACA;AACA;;AAEA,SAAS,QAAQ;AACjB;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;AClBA,6BAAe,sCAAW;;AAE1B,4DAA4D,OAAO;AACnE,yDAAyD,OAAO;AAChE;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACVA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA,8CAA8C,OAAO;AACrD,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;;;;;;;;;;;;;;;AClEA,6BAAe,sCAAW;;AAE1B,6DAA6D,QAAQ;AACrE,6EAA6E,SAAS;AACtF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;;;ACPqC;AACC;;AAEtC,6BAAe,oCAAS;AACxB,6CAA6C,wDAAQ;;AAErD,sFAAsF,OAAO;AAC7F,gHAAgH,OAAO;AACvH;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;;;;AChBqC;AACL;AACY;;AAE5C;AACA;AACA,WAAW,qDAAK;AAChB;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,gBAAgB,2DAAW;;AAE3B,0FAA0F,OAAO;AACjG,+DAA+D,OAAO;AACtE;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;;ACxB2C;;AAE3C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,wDAAwD,yDAAY;AACpE;;;;;;;;;;;;;;;;;ACjB2C;;AAE3C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,6DAA6D,yDAAY;AACzE;;;;;;;;;;;;;;;;ACjBA,6BAAe,sCAAW;AAC1B;AACA,mCAAmC;AACnC;AACA;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;;AAEA,uFAAuF,OAAO;AAC9F,yGAAyG,OAAO;AAChH;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACvBA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;ACFuC;;AAEvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,SAAS,sDAAW;AACpB;;;;;;;;;;;;;;;;AClCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACxBA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA,2BAA2B;AAC3B;;;;;;;;;;;;;;;;;;;;;ACJuC;;AAEvC;AACO;AACA;AACA;AACA;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAEc;AACf,WAAW,sDAAY;AACvB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACfiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,8CAAS,cAAc,kDAAS;AACxE,iBAAiB,2CAAM;AACvB;AACA;AACA;AACA,UAAU;AACV;AACA,wCAAwC,+CAAU,cAAc,mDAAU;AAC1E,iBAAiB,4CAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA,YAAY,4BAA4B;AACxC;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,4CAAO,OAAO,iDAAQ;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,+CAAU,OAAO,iDAAQ;AACtC;;AAEA;AACA;AACA,mCAAmC,qDAAY,MAAM,iDAAY;AACjE;;AAEA;AACA;AACA,aAAa,iDAAY,OAAO,iDAAQ,WAAW,iDAAQ;AAC3D;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,+CAAU,OAAO,iDAAQ;AACtC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,qDAAY,MAAM,iDAAY;AAC9D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,2CAAM,OAAO,gDAAO;AACrC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;A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AAgB,0DAAY;AACnC;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,2DAA2D,0DAAY;AACvE;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEO;;;;;;;;;;;;;;;;;AChD0B;;AAEjC,6BAAe,oCAAS;AACxB,cAAc,4CAAK;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sIAAsI;;AAE/H;AACP;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP,SAAS;AACT,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC7GiD;AACE;;AAEnD;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,8DAAS;AACrD,mBAAmB,4DAAU;AAC7B;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpB8B;AAC8B;AACd;AACM;;;;;;;;;;;;;;;;;ACHa;;AAEjE,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,mDAAmD,eAAe;AAClE,8BAA8B,6DAAQ,qBAAqB,2DAAM;AACjE,qBAAqB,0DAAK;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACvBuC;AACU;AACE;;AAEnD,oDAAS,uBAAuB,qDAAmB;AACnD,oDAAS,wBAAwB,sDAAoB;;;;;;;;;;;;;;;;;ACLb;;AAExC,6BAAe,oCAAS;AACxB;AACA,IAAI,yDAAS;AACb,GAAG;AACH;;;;;;;;;;;;;;;;;;;;ACNyD;AACR;AACV;AACV;;AAE7B;AACA;AACA;AACA;AACA,QAAQ,+CAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;AAEA,sBAAsB,4DAAU;AAChC;AACA,IAAI;AACJ,SAAS,2DAAK,oCAAoC,6CAAG;AACrD;;AAEA,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA,QAAQ,mEAAQ;AAChB;AACA;AACA;;AAEA,aAAa,4DAAU;AACvB;;;;;;;;;;;;;;;;;;;;ACzC+E;AACxC;AACD;AACK;;AAE3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,iBAAiB,wDAAS,uCAAuC,mEAAoB,GAAG,uDAAW;AACnG;AACA,sEAAsE,qDAAU;AAChF;AACA;AACA;;;;;;;;;;;;;;;;;AC7EuC;;AAEvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,iBAAiB,w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ACK;;AAE3C;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB,oDAAoD,wDAAK;AACzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB;AACA;AACA,6EAA6E,wDAAK;AAClF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,yCAAyC,mEAAoB,GAAG,uDAAW;AAC3E;AACA;AACA;AACA;AACA,+CAA+C,qDAAU;AACzD;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC/EA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACvBsC;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,qBAAqB,qDAAU;AAC/B;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACvB6C;AACD;;AAE5C,6BAAe,sCAAW;AAC1B;AACA;AACA,YAAY,gDAAK;;AAEjB,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA,sBAAsB,iDAAG;AACzB,QAAQ,wDAAQ;AAChB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,aAAa,iDAAU;AACvB;;;;;;;;;;;;;;;;;;ACvBuC;;AAEvC;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB,4BAA4B,OAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;;AAEA;AACA,gBAAgB,iDAAG;AACnB,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA,mBAAmB,iDAAG;AACtB,2CAA2C;AAC3C,GAAG;;AAEH;AACA,WAAW,iDAAG;AACd;AACA;;;;;;;;;;;;;;;;AChFA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;ACAb;AACf;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,aAAa,oDAAoD;AACjE,gBAAgB,uDAAuD;AACvE,QAAQ;AACR,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;ACb0C;AACoE;;;;;;;;;;;;;;;;;ACDvG;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;;ACPO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;;AAEP;;AAEe;AACf;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AClDqC;AACW;AACD;AACF;AACL;AACH;AACF;AACgB;AACC;;AAEpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,mDAAQ;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAe;AACnC,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mDAAQ;AAC/B;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,+CAA+C,oDAAS;AACxD;;AAEA;AACA;AACA,oEAAoE,oDAAS;AAC7E;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,gDAAgD;AACvF,oDAAoD,8CAA8C;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,mBAAmB,4BAA4B,QAAQ,oDAAS;AAChE;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,cAAc,wDAAM;AACpB;AACA;AACA;AACA,YAAY,iDAAS;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAO;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM,wDAAS;AACf;AACA;;AAEA,IAAI,uDAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,wDAAM;AAClB,YAAY,wDAAO;AACnB;AACA;;AAEA,IAAI,mDAAW;AACf,IAAI,0DAAa;AACjB;AACA,IAAI,wDAAS;AACb;;AAEA;AACA,MAAM,uDAAO;AACb;AACA;AACA;AACA;AACA;AACA,sEAAsE,wDAAO;AAC7E;;AAEA;AACA;AACA,MAAM,gDAAU;AAChB,MAAM,uDAAO;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,wDAAO;AACpB;AACA;AACA;;AAEA,IAAI,uDAAO;AACX,sBAAsB,wDAAM;AAC5B,SAAS,wDAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,0DAAa;AACjB,gBAAgB,OAAO;AACvB,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iFAAiF,uBAAuB;AACxG,MAAM,wDAAS;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,uDAAO;AACX,gBAAgB,OAAO;AACvB,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,0DAAa;AACjB;AACA,0CAA0C,qBAAqB;AAC/D,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAO;AACnB;AACA,kBAAkB,wDAAM;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA,0EAA0E,wDAAQ;AAClF;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;AC9bO;AACP;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UC5DA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WC5BA;WACA;WACA;;;;;WCFA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;;;;;WCJA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WClBA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;;;;WCrBA;;;;;;;;;;;;;;;;;;;;;ACA4B;AAEW;AAEA;AACM;AACE;AACJ;AACS;AACI;AACP;AACjD;;AAGA,SAASssB,IAAIA,CAAA,EAAS;EACpB;EACA,IAAIkN,aAAa,GAAsBv7B,QAAQ,CAACgG,cAAc,CAAC,eAAe,CAAC,CAAErU,KAAK;EACtF,IAAI6pC,WAAW,GAAsBx7B,QAAQ,CAACgG,cAAc,CAAC,oBAAoB,CAAC,CAAErU,KAAK;EACzF,IAAI8pC,MAAM,GAAsBz7B,QAAQ,CAACgG,cAAc,CAAC,QAAQ,CAAC,CAAErU,KAAK;EACxE,IAAI4kC,WAAW,GAAC,EAAE;EAElB,IAAGgF,aAAa,EAChBhF,WAAW,GAAC12B,IAAI,CAAC0V,KAAK,CAACgmB,aAAa,CAAC;EAErC,IAAIG,SAAS,GAAG,IAAIhG,kDAAW,CAAC,CAAC;EACjCgG,SAAS,CAACz/B,EAAE,GAAG,MAAM;EACrB,IAAGw/B,MAAM,IAAE,MAAM,EAAC;IAChB,IAAIE,aAAa,GAAG,IAAIrF,0DAAa,CAACC,WAAW,CAAC;IAClD,IAAIqF,WAAW,GAAG,IAAI7P,sDAAW,CAAC,CAAC;IACnC,IAAI8P,cAAc,GAAG,IAAI72B,4DAAc,CAAC02B,SAAS,CAAC;IAElDA,SAAS,CAAC9F,aAAa,CAAC+F,aAAa,CAAC;IACtCD,SAAS,CAAC9F,aAAa,CAACgG,WAAW,CAAC;IACpCF,SAAS,CAAC9F,aAAa,CAACiG,cAAc,CAAC;EACzC,CAAC,MACG;IACF,IAAI7rB,MAAM,GAAG,IAAI7P,wDAAY,CAAC,CAAC;IAC/B,IAAI27B,WAAW,GAAG,IAAIviC,iEAAiB,CAACiiC,WAAW,CAAC;IACpD,IAAIO,OAAO,GAAG,IAAIpiB,+DAAa,CAAC3J,MAAM,EAAE,SAAS,EAAE,SAAS,EAAEwrB,WAAW,EAACM,WAAW,CAAC;IACtF,IAAID,cAAc,GAAG,IAAI72B,4DAAc,CAAC02B,SAAS,CAAC;IAElDA,SAAS,CAAC9F,aAAa,CAACmG,OAAO,CAAC;IAChCL,SAAS,CAAC9F,aAAa,CAAC5lB,MAAM,CAAC;IAC/B0rB,SAAS,CAAC9F,aAAa,CAACkG,WAAW,CAAC;IACpCJ,SAAS,CAAC9F,aAAa,CAACiG,cAAc,CAAC;IACvCE,OAAO,CAACzrB,IAAI,CAAC,CAAC;EAChB;EAEAlX,mDAAM,CAAC4iC,MAAM,CAACN,SAAS,EAAE17B,QAAQ,CAACJ,IAAI,CAAC;EACvC1C,MAAM,CAAC++B,QAAQ,GAAG,YAAM;IAAEP,SAAS,CAACQ,MAAM,CAAC,CAAC;EAAC,CAAC;AAChD;AAEAh/B,MAAM,CAACi/B,MAAM,GAAG9N,IAAI,C","sources":["webpack://@noworkflow/nowvis/../../node_modules/@lumino/algorithm/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/collections/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/commands/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/coreutils/dist/index.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/disposable/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/domutils/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/dragdrop/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/keyboard/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/messaging/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/properties/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/signaling/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/virtualdom/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/ace-builds/src-noconflict/ace.js","webpack://@noworkflow/nowvis/../../node_modules/ace-builds/src-noconflict/ext-language_tools.js","webpack://@noworkflow/nowvis/../../node_modules/ace-builds/src-noconflict/mode-sql.js","webpack://@noworkflow/nowvis/../../node_modules/ace-builds/src-noconflict/theme-textmate.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/api.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/buffer.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/node.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/reporter.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/constants/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/constants/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/./src/annotation_widget.ts","webpack://@noworkflow/nowvis/./src/config_widget.ts","webpack://@noworkflow/nowvis/./src/database_widget.ts","webpack://@noworkflow/nowvis/./src/graph/base_activation_graph.ts","webpack://@noworkflow/nowvis/./src/graph/diff_graph.ts","webpack://@noworkflow/nowvis/./src/graph/function_diff.ts","webpack://@noworkflow/nowvis/./src/graph/history_graph.ts","webpack://@noworkflow/nowvis/./src/graph/trial_graph.ts","webpack://@noworkflow/nowvis/./src/group_widget.ts","webpack://@noworkflow/nowvis/./src/info/diff_info.ts","webpack://@noworkflow/nowvis/./src/info/environment_info.ts","webpack://@noworkflow/nowvis/./src/info/file_accesses_info.ts","webpack://@noworkflow/nowvis/./src/info/modules_info.ts","webpack://@noworkflow/nowvis/./src/info/trial_info.ts","webpack://@noworkflow/nowvis/./src/nowpanel.ts","webpack://@noworkflow/nowvis/./src/project_widget.ts","webpack://@noworkflow/nowvis/./src/query_widget.ts","webpack://@noworkflow/nowvis/../../node_modules/base64-js/index.js","webpack://@noworkflow/nowvis/../../node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/brorand/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/aes.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/authCipher.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/decrypter.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/encrypter.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/ghash.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/incr32.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cbc.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb1.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb8.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ctr.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ecb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ofb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/streamCipher.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-cipher/browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-des/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-des/modes.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-rsa/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/algos.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/sign.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/verify.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/isarray/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/buffer-xor/index.js","webpack://@noworkflow/nowvis/../../node_modules/buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/cipher-base/index.js","webpack://@noworkflow/nowvis/../../node_modules/core-util-is/lib/util.js","webpack://@noworkflow/nowvis/../../node_modules/create-ecdh/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/create-hash/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-hash/md5.js","webpack://@noworkflow/nowvis/../../node_modules/create-hmac/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-hmac/legacy.js","webpack://@noworkflow/nowvis/../../node_modules/crypto-browserify/index.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/cbc.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/cipher.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/des.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/ede.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/utils.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/browser.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/lib/dh.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/lib/generatePrime.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/base.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/mont.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/short.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curves.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/key.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/signature.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/utils.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/events/events.js","webpack://@noworkflow/nowvis/../../node_modules/evp_bytestokey/index.js","webpack://@noworkflow/nowvis/../../node_modules/file-saver/dist/FileSaver.min.js","webpack://@noworkflow/nowvis/../../node_modules/hash-base/index.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/common.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/hmac.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/ripemd.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/1.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/224.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/256.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/384.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/512.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/common.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/utils.js","webpack://@noworkflow/nowvis/../../node_modules/hmac-drbg/lib/hmac-drbg.js","webpack://@noworkflow/nowvis/../../node_modules/ieee754/index.js","webpack://@noworkflow/nowvis/../../node_modules/inherits/inherits_browser.js","webpack://@noworkflow/nowvis/../../node_modules/md5.js/index.js","webpack://@noworkflow/nowvis/../../node_modules/miller-rabin/lib/mr.js","webpack://@noworkflow/nowvis/../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/minimalistic-assert/index.js","webpack://@noworkflow/nowvis/../../node_modules/minimalistic-crypto-utils/lib/utils.js","webpack://@noworkflow/nowvis/../../node_modules/os/index.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/asn1.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/certificate.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/fixProc.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/index.js","webpack://@noworkflow/nowvis/../../node_modules/path/path.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/browser.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/async.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/default-encoding.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/precondition.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/sync-browser.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/to-buffer.js","webpack://@noworkflow/nowvis/../../node_modules/process-nextick-args/index.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/browser.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/mgf.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/privateDecrypt.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/publicEncrypt.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/withPublic.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/xor.js","webpack://@noworkflow/nowvis/../../node_modules/randombytes/browser.js","webpack://@noworkflow/nowvis/../../node_modules/randomfill/browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/errors-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_duplex.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_readable.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_transform.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_writable.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/state.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readline-sync/lib/readline-sync.js","webpack://@noworkflow/nowvis/../../node_modules/ripemd160/index.js","webpack://@noworkflow/nowvis/../../node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/hash.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/index.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha1.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha224.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha256.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha384.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha512.js","webpack://@noworkflow/nowvis/../../node_modules/stream-browserify/index.js","webpack://@noworkflow/nowvis/../../node_modules/string_decoder/lib/string_decoder.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/browserify.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/control-icons.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/shadow-viewport.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/svg-utilities.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/uniwheel.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/utilities.js","webpack://@noworkflow/nowvis/../../node_modules/tau-prolog/modules/core.js","webpack://@noworkflow/nowvis/../../node_modules/util-deprecate/browser.js","webpack://@noworkflow/nowvis/../../node_modules/util/node_modules/inherits/inherits_browser.js","webpack://@noworkflow/nowvis/../../node_modules/util/support/isBufferBrowser.js","webpack://@noworkflow/nowvis/../../node_modules/util/util.js","webpack://@noworkflow/nowvis/../../node_modules/vm-browserify/index.js","webpack://@noworkflow/nowvis/../history/lib/config.js","webpack://@noworkflow/nowvis/../history/lib/graph.js","webpack://@noworkflow/nowvis/../history/lib/index.js","webpack://@noworkflow/nowvis/../history/lib/structures.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/accordionpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/commandpalette.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/datagrid.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/dockpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/menu.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/menubar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/scrollbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/tabbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/dragdrop/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/accordionpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/commandpalette.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/dockpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/menu.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/menubar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/scrollbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/splitpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/tabbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/tabpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/widget.css","webpack://@noworkflow/nowvis/../history/style/index.css","webpack://@noworkflow/nowvis/./style/bootstrap.min.css","webpack://@noworkflow/nowvis/./style/history.css","webpack://@noworkflow/nowvis/./style/index.css","webpack://@noworkflow/nowvis/./style/panel.css","webpack://@noworkflow/nowvis/./style/trial.css","webpack://@noworkflow/nowvis/../trial/style/index.css","webpack://@noworkflow/nowvis/../utils/style/shared.css","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/api.js","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/getUrl.js","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://@noworkflow/nowvis/./style/bootstrap.min.css?f8e0","webpack://@noworkflow/nowvis/./style/index.css?b7f0","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://@noworkflow/nowvis/../trial/lib/config.js","webpack://@noworkflow/nowvis/../trial/lib/graph.js","webpack://@noworkflow/nowvis/../trial/lib/index.js","webpack://@noworkflow/nowvis/../trial/lib/structures.js","webpack://@noworkflow/nowvis/../utils/lib/d3svg.js","webpack://@noworkflow/nowvis/../utils/lib/index.js","webpack://@noworkflow/nowvis/../utils/lib/random.js","webpack://@noworkflow/nowvis/../utils/lib/text.js","webpack://@noworkflow/nowvis/../utils/lib/web.js","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/asn1.js/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/brorand|crypto","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams|util","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/browserify-sign/node_modules/readable-stream/lib|util","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/create-ecdh/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/diffie-hellman/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/elliptic/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/miller-rabin/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/public-encrypt/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/readable-stream/lib/internal/streams|util","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/readable-stream/lib|util","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/readline-sync/lib|child_process","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/readline-sync/lib|fs","webpack://@noworkflow/nowvis/ignored|/Users/felipe/Repositories/icuff/noworkflow/src/frontend/node_modules/tau-prolog/modules|fs","webpack://@noworkflow/nowvis/../../node_modules/@viz-js/viz/lib/viz-standalone.mjs","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/ascending.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/bisect.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/bisector.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/descending.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/greatest.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/max.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/maxIndex.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/min.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/minIndex.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/permute.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/quantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/quickselect.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/range.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/ticks.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/color.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/define.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/lab.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/math.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dispatch/src/dispatch.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/drag.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/event.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/nodrag.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/noevent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/csv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/dsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/tsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-ease/src/cubic.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/blob.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/buffer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/dsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/image.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/json.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/xml.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/center.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/collide.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/jiggle.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/lcg.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/link.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/manyBody.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/simulation.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/defaultLocale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/exponent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatDecimal.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatGroup.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatNumerals.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatPrefixAuto.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatRounded.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatSpecifier.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatTrim.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatTypes.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/identity.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/locale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionFixed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionPrefix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionRound.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/accessors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/cluster.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/count.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/each.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/find.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/links.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/path.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/lcg.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/enclose.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/siblings.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/partition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/stratify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/tree.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/binary.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/dice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/round.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/slice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/sliceDice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/squarify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/basis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/basisClosed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/color.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/date.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/numberArray.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/object.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/piecewise.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/rgb.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/round.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/string.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/decompose.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/parse.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/value.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/zoom.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/add.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/cover.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/data.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/extent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/find.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/quad.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/quadtree.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/root.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/size.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/visit.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/visitAfter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/x.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/y.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/observable10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/colors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/ramp.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/band.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/continuous.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/diverging.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/identity.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/init.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/linear.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/log.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/nice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/ordinal.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/pow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/quantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/quantize.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/radial.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/sequential.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/sequentialQuantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/symlog.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/threshold.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/tickFormat.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/time.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/utcTime.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/create.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/creator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/local.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/matcher.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/namespace.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/namespaces.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/pointer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/pointers.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/append.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/attr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/call.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/classed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/clone.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/data.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/datum.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/dispatch.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/each.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/empty.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/enter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/exit.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/filter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/html.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/insert.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/iterator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/join.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/lower.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/merge.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/node.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/nodes.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/on.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/order.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/property.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/raise.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectChild.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectChildren.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/size.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/sparse.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/style.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selector.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selectorAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/sourceEvent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/window.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time-format/src/defaultLocale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time-format/src/locale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/day.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/duration.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/hour.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/interval.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/millisecond.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/minute.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/month.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/second.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/ticks.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/week.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/year.js","webpack://@noworkflow/nowvis/../../node_modules/d3-timer/src/timeout.js","webpack://@noworkflow/nowvis/../../node_modules/d3-timer/src/timer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/active.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/interrupt.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/interrupt.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/transition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/attr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/attrTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/delay.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/duration.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/ease.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/easeVarying.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/end.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/filter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/interpolate.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/merge.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/on.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/schedule.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/selection.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/style.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/styleTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/textTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/transition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/tween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/event.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/noevent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/transform.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/zoom.js","webpack://@noworkflow/nowvis/../../node_modules/internmap/src/index.js","webpack://@noworkflow/nowvis/webpack/bootstrap","webpack://@noworkflow/nowvis/webpack/runtime/amd define","webpack://@noworkflow/nowvis/webpack/runtime/compat get default export","webpack://@noworkflow/nowvis/webpack/runtime/define property getters","webpack://@noworkflow/nowvis/webpack/runtime/global","webpack://@noworkflow/nowvis/webpack/runtime/hasOwnProperty shorthand","webpack://@noworkflow/nowvis/webpack/runtime/make namespace object","webpack://@noworkflow/nowvis/webpack/runtime/node module decorator","webpack://@noworkflow/nowvis/webpack/runtime/publicPath","webpack://@noworkflow/nowvis/webpack/runtime/jsonp chunk loading","webpack://@noworkflow/nowvis/webpack/runtime/nonce","webpack://@noworkflow/nowvis/./src/index.ts"],"sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for array-specific algorithms.\n */\nvar ArrayExt;\n(function (ArrayExt) {\n /**\n * Find the index of the first occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.firstIndexOf(data, 'red'); // -1\n * ArrayExt.firstIndexOf(data, 'one'); // 0\n * ArrayExt.firstIndexOf(data, 'one', 1); // 4\n * ArrayExt.firstIndexOf(data, 'two', 2); // -1\n * ArrayExt.firstIndexOf(data, 'two', 2, 1); // 1\n * ```\n */\n function firstIndexOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.firstIndexOf = firstIndexOf;\n /**\n * Find the index of the last occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.lastIndexOf(data, 'red'); // -1\n * ArrayExt.lastIndexOf(data, 'one'); // 4\n * ArrayExt.lastIndexOf(data, 'one', 1); // 0\n * ArrayExt.lastIndexOf(data, 'two', 0); // -1\n * ArrayExt.lastIndexOf(data, 'two', 0, 1); // 1\n * ```\n */\n function lastIndexOf(array, value, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (start < stop) {\n span = start + 1 + (n - stop);\n }\n else {\n span = start - stop + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start - i + n) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.lastIndexOf = lastIndexOf;\n /**\n * Find the index of the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstIndex(data, isEven); // 1\n * ArrayExt.findFirstIndex(data, isEven, 4); // 5\n * ArrayExt.findFirstIndex(data, isEven, 6); // -1\n * ArrayExt.findFirstIndex(data, isEven, 6, 5); // 1\n * ```\n */\n function findFirstIndex(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findFirstIndex = findFirstIndex;\n /**\n * Find the index of the last value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastIndex(data, isEven); // 5\n * ArrayExt.findLastIndex(data, isEven, 4); // 3\n * ArrayExt.findLastIndex(data, isEven, 0); // -1\n * ArrayExt.findLastIndex(data, isEven, 0, 1); // 5\n * ```\n */\n function findLastIndex(array, fn, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let d;\n if (start < stop) {\n d = start + 1 + (n - stop);\n }\n else {\n d = start - stop + 1;\n }\n for (let i = 0; i < d; ++i) {\n let j = (start - i + n) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findLastIndex = findLastIndex;\n /**\n * Find the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstValue(data, isEven); // 2\n * ArrayExt.findFirstValue(data, isEven, 2); // 4\n * ArrayExt.findFirstValue(data, isEven, 6); // undefined\n * ArrayExt.findFirstValue(data, isEven, 6, 5); // 2\n * ```\n */\n function findFirstValue(array, fn, start = 0, stop = -1) {\n let index = findFirstIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findFirstValue = findFirstValue;\n /**\n * Find the last value which matches a predicate.\n *\n * @param object - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The last matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastValue(data, isEven); // 2\n * ArrayExt.findLastValue(data, isEven, 4); // 4\n * ArrayExt.findLastValue(data, isEven, 0); // undefined\n * ArrayExt.findLastValue(data, isEven, 0, 1); // 2\n * ```\n */\n function findLastValue(array, fn, start = -1, stop = 0) {\n let index = findLastIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findLastValue = findLastValue;\n /**\n * Find the index of the first element which compares `>=` to a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>=` to the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.lowerBound(data, 0, numberCmp); // 0\n * ArrayExt.lowerBound(data, 6, numberCmp); // 3\n * ArrayExt.lowerBound(data, 7, numberCmp); // 3\n * ArrayExt.lowerBound(data, -1, numberCmp); // 0\n * ArrayExt.lowerBound(data, 10, numberCmp); // 6\n * ```\n */\n function lowerBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) < 0) {\n begin = middle + 1;\n span -= half + 1;\n }\n else {\n span = half;\n }\n }\n return begin;\n }\n ArrayExt.lowerBound = lowerBound;\n /**\n * Find the index of the first element which compares `>` than a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>` than the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.upperBound(data, 0, numberCmp); // 1\n * ArrayExt.upperBound(data, 6, numberCmp); // 3\n * ArrayExt.upperBound(data, 7, numberCmp); // 5\n * ArrayExt.upperBound(data, -1, numberCmp); // 0\n * ArrayExt.upperBound(data, 10, numberCmp); // 6\n * ```\n */\n function upperBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) > 0) {\n span = half;\n }\n else {\n begin = middle + 1;\n span -= half + 1;\n }\n }\n return begin;\n }\n ArrayExt.upperBound = upperBound;\n /**\n * Test whether two arrays are shallowly equal.\n *\n * @param a - The first array-like object to compare.\n *\n * @param b - The second array-like object to compare.\n *\n * @param fn - The comparison function to apply to the elements. It\n * should return `true` if the elements are \"equal\". The default\n * compares elements using strict `===` equality.\n *\n * @returns Whether the two arrays are shallowly equal.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * Modifying the length of the arrays while comparing.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let d1 = [0, 3, 4, 7, 7, 9];\n * let d2 = [0, 3, 4, 7, 7, 9];\n * let d3 = [42];\n * ArrayExt.shallowEqual(d1, d2); // true\n * ArrayExt.shallowEqual(d2, d3); // false\n * ```\n */\n function shallowEqual(a, b, fn) {\n // Check for object identity first.\n if (a === b) {\n return true;\n }\n // Bail early if the lengths are different.\n if (a.length !== b.length) {\n return false;\n }\n // Compare each element for equality.\n for (let i = 0, n = a.length; i < n; ++i) {\n if (fn ? !fn(a[i], b[i]) : a[i] !== b[i]) {\n return false;\n }\n }\n // The array are shallowly equal.\n return true;\n }\n ArrayExt.shallowEqual = shallowEqual;\n /**\n * Create a slice of an array subject to an optional step.\n *\n * @param array - The array-like object of interest.\n *\n * @param options - The options for configuring the slice.\n *\n * @returns A new array with the specified values.\n *\n * @throws An exception if the slice `step` is `0`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start`, `stop`, or `step` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.slice(data); // [0, 3, 4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 2 }); // [4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 0, stop: 4 }); // [0, 3, 4, 7]\n * ArrayExt.slice(data, { step: 2 }); // [0, 4, 7]\n * ArrayExt.slice(data, { step: -1 }); // [9, 7, 7, 4, 3, 0]\n * ```\n */\n function slice(array, options = {}) {\n // Extract the options.\n let { start, stop, step } = options;\n // Set up the `step` value.\n if (step === undefined) {\n step = 1;\n }\n // Validate the step size.\n if (step === 0) {\n throw new Error('Slice `step` cannot be zero.');\n }\n // Look up the length of the array.\n let n = array.length;\n // Set up the `start` value.\n if (start === undefined) {\n start = step < 0 ? n - 1 : 0;\n }\n else if (start < 0) {\n start = Math.max(start + n, step < 0 ? -1 : 0);\n }\n else if (start >= n) {\n start = step < 0 ? n - 1 : n;\n }\n // Set up the `stop` value.\n if (stop === undefined) {\n stop = step < 0 ? -1 : n;\n }\n else if (stop < 0) {\n stop = Math.max(stop + n, step < 0 ? -1 : 0);\n }\n else if (stop >= n) {\n stop = step < 0 ? n - 1 : n;\n }\n // Compute the slice length.\n let length;\n if ((step < 0 && stop >= start) || (step > 0 && start >= stop)) {\n length = 0;\n }\n else if (step < 0) {\n length = Math.floor((stop - start + 1) / step + 1);\n }\n else {\n length = Math.floor((stop - start - 1) / step + 1);\n }\n // Compute the sliced result.\n let result = [];\n for (let i = 0; i < length; ++i) {\n result[i] = array[start + i * step];\n }\n // Return the result.\n return result;\n }\n ArrayExt.slice = slice;\n /**\n * Move an element in an array from one index to another.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param fromIndex - The index of the element to move. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param toIndex - The target index of the element. Negative\n * values are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `fromIndex` or `toIndex` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.move(data, 1, 2); // [0, 2, 1, 3, 4]\n * ArrayExt.move(data, 4, 2); // [0, 2, 4, 1, 3]\n * ```\n */\n function move(array, fromIndex, toIndex) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (fromIndex < 0) {\n fromIndex = Math.max(0, fromIndex + n);\n }\n else {\n fromIndex = Math.min(fromIndex, n - 1);\n }\n if (toIndex < 0) {\n toIndex = Math.max(0, toIndex + n);\n }\n else {\n toIndex = Math.min(toIndex, n - 1);\n }\n if (fromIndex === toIndex) {\n return;\n }\n let value = array[fromIndex];\n let d = fromIndex < toIndex ? 1 : -1;\n for (let i = fromIndex; i !== toIndex; i += d) {\n array[i] = array[i + d];\n }\n array[toIndex] = value;\n }\n ArrayExt.move = move;\n /**\n * Reverse an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param start - The index of the first element in the range to be\n * reversed, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * reversed, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` index which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.reverse(data, 1, 3); // [0, 3, 2, 1, 4]\n * ArrayExt.reverse(data, 3); // [0, 3, 2, 4, 1]\n * ArrayExt.reverse(data); // [1, 4, 2, 3, 0]\n * ```\n */\n function reverse(array, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n while (start < stop) {\n let a = array[start];\n let b = array[stop];\n array[start++] = b;\n array[stop--] = a;\n }\n }\n ArrayExt.reverse = reverse;\n /**\n * Rotate the elements of an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param delta - The amount of rotation to apply to the elements. A\n * positive value will rotate the elements to the left. A negative\n * value will rotate the elements to the right.\n *\n * @param start - The index of the first element in the range to be\n * rotated, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * rotated, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `delta`, `start`, or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.rotate(data, 2); // [2, 3, 4, 0, 1]\n * ArrayExt.rotate(data, -2); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 10); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 9); // [4, 0, 1, 2, 3]\n * ArrayExt.rotate(data, 2, 1, 3); // [4, 2, 0, 1, 3]\n * ```\n */\n function rotate(array, delta, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n if (start >= stop) {\n return;\n }\n let length = stop - start + 1;\n if (delta > 0) {\n delta = delta % length;\n }\n else if (delta < 0) {\n delta = ((delta % length) + length) % length;\n }\n if (delta === 0) {\n return;\n }\n let pivot = start + delta;\n reverse(array, start, pivot - 1);\n reverse(array, pivot, stop);\n reverse(array, start, stop);\n }\n ArrayExt.rotate = rotate;\n /**\n * Fill an array with a static value.\n *\n * @param array - The mutable array-like object to fill.\n *\n * @param value - The static value to use to fill the array.\n *\n * @param start - The index of the first element in the range to be\n * filled, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * filled, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Notes\n * If `stop < start` the fill will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four'];\n * ArrayExt.fill(data, 'r'); // ['r', 'r', 'r', 'r']\n * ArrayExt.fill(data, 'g', 1); // ['r', 'g', 'g', 'g']\n * ArrayExt.fill(data, 'b', 2, 3); // ['r', 'g', 'b', 'b']\n * ArrayExt.fill(data, 'z', 3, 1); // ['z', 'z', 'b', 'z']\n * ```\n */\n function fill(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n array[(start + i) % n] = value;\n }\n }\n ArrayExt.fill = fill;\n /**\n * Insert a value into an array at a specific index.\n *\n * @param array - The array of interest.\n *\n * @param index - The index at which to insert the value. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param value - The value to set at the specified index.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2];\n * ArrayExt.insert(data, 0, -1); // [-1, 0, 1, 2]\n * ArrayExt.insert(data, 2, 12); // [-1, 0, 12, 1, 2]\n * ArrayExt.insert(data, -1, 7); // [-1, 0, 12, 1, 7, 2]\n * ArrayExt.insert(data, 6, 19); // [-1, 0, 12, 1, 7, 2, 19]\n * ```\n */\n function insert(array, index, value) {\n let n = array.length;\n if (index < 0) {\n index = Math.max(0, index + n);\n }\n else {\n index = Math.min(index, n);\n }\n for (let i = n; i > index; --i) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n }\n ArrayExt.insert = insert;\n /**\n * Remove and return a value at a specific index in an array.\n *\n * @param array - The array of interest.\n *\n * @param index - The index of the value to remove. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The value at the specified index, or `undefined` if the\n * index is out of range.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeAt(data, 2); // 23\n * ArrayExt.removeAt(data, -2); // 12\n * ArrayExt.removeAt(data, 10); // undefined;\n * ```\n */\n function removeAt(array, index) {\n let n = array.length;\n if (index < 0) {\n index += n;\n }\n if (index < 0 || index >= n) {\n return undefined;\n }\n let value = array[index];\n for (let i = index + 1; i < n; ++i) {\n array[i - 1] = array[i];\n }\n array.length = n - 1;\n return value;\n }\n ArrayExt.removeAt = removeAt;\n /**\n * Remove the first occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstOf(data, 12); // 1\n * ArrayExt.removeFirstOf(data, 17); // -1\n * ArrayExt.removeFirstOf(data, 39, 3); // -1\n * ArrayExt.removeFirstOf(data, 39, 3, 2); // 2\n * ```\n */\n function removeFirstOf(array, value, start = 0, stop = -1) {\n let index = firstIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeFirstOf = removeFirstOf;\n /**\n * Remove the last occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastOf(data, 12); // 5\n * ArrayExt.removeLastOf(data, 17); // -1\n * ArrayExt.removeLastOf(data, 39, 2); // -1\n * ArrayExt.removeLastOf(data, 39, 2, 3); // 3\n * ```\n */\n function removeLastOf(array, value, start = -1, stop = 0) {\n let index = lastIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeLastOf = removeLastOf;\n /**\n * Remove all occurrences of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [14, 12, 23, 39, 14, 12, 19, 14];\n * ArrayExt.removeAllOf(data, 12); // 2\n * ArrayExt.removeAllOf(data, 17); // 0\n * ArrayExt.removeAllOf(data, 14, 1, 4); // 1\n * ```\n */\n function removeAllOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && array[i] === value) {\n count++;\n }\n else if (stop < start &&\n (i <= stop || i >= start) &&\n array[i] === value) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllOf = removeAllOf;\n /**\n * Remove the first occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstWhere(data, isEven); // { index: 0, value: 0 }\n * ArrayExt.removeFirstWhere(data, isEven, 2); // { index: 3, value: 14 }\n * ArrayExt.removeFirstWhere(data, isEven, 4); // { index: -1, value: undefined }\n * ```\n */\n function removeFirstWhere(array, fn, start = 0, stop = -1) {\n let value;\n let index = findFirstIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeFirstWhere = removeFirstWhere;\n /**\n * Remove the last occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastWhere(data, isEven); // { index: 5, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2); // { index: 1, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2, 1); // { index: -1, value: undefined }\n * ```\n */\n function removeLastWhere(array, fn, start = -1, stop = 0) {\n let value;\n let index = findLastIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeLastWhere = removeLastWhere;\n /**\n * Remove all occurrences of values which match a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * function isNegative(value: number): boolean {\n * return value < 0;\n * }\n *\n * let data = [0, 12, -13, -9, 23, 39, 14, -15, 12, 75];\n * ArrayExt.removeAllWhere(data, isEven); // 4\n * ArrayExt.removeAllWhere(data, isNegative, 0, 3); // 2\n * ```\n */\n function removeAllWhere(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && fn(array[i], i)) {\n count++;\n }\n else if (stop < start && (i <= stop || i >= start) && fn(array[i], i)) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllWhere = removeAllWhere;\n})(ArrayExt || (ArrayExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Chain together several iterables.\n *\n * @deprecated\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields the values of the iterables\n * in the order in which they are supplied.\n *\n * #### Example\n * ```typescript\n * import { chain } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = chain(data1, data2);\n *\n * Array.from(stream); // [1, 2, 3, 4, 5, 6]\n * ```\n */\nfunction* chain(...objects) {\n for (const object of objects) {\n yield* object;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an empty iterator.\n *\n * @returns A new iterator which yields nothing.\n *\n * #### Example\n * ```typescript\n * import { empty } from '@lumino/algorithm';\n *\n * let stream = empty();\n *\n * Array.from(stream); // []\n * ```\n */\n// eslint-disable-next-line require-yield\nfunction* empty() {\n return;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Enumerate an iterable object.\n *\n * @param object - The iterable object of interest.\n *\n * @param start - The starting enum value. The default is `0`.\n *\n * @returns An iterator which yields the enumerated values.\n *\n * #### Example\n * ```typescript\n * import { enumerate } from '@lumino/algorithm';\n *\n * let data = ['foo', 'bar', 'baz'];\n *\n * let stream = enumerate(data, 1);\n *\n * Array.from(stream); // [[1, 'foo'], [2, 'bar'], [3, 'baz']]\n * ```\n */\nfunction* enumerate(object, start = 0) {\n for (const value of object) {\n yield [start++, value];\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Filter an iterable for values which pass a test.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns An iterator which yields the values which pass the test.\n *\n * #### Example\n * ```typescript\n * import { filter } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = filter(data, value => value % 2 === 0);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* filter(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Find the first value in an iterable which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { find } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * find(data, isCat).name; // 'fluffy'\n * ```\n */\nfunction find(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return value;\n }\n }\n return undefined;\n}\n/**\n * Find the index of the first value which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { findIndex } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * findIndex(data, isCat); // 1\n * ```\n */\nfunction findIndex(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return index - 1;\n }\n }\n return -1;\n}\n/**\n * Find the minimum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The minimum value in the iterable. If multiple values are\n * equivalent to the minimum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { min } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * min([7, 4, 0, 3, 9, 4], numberCmp); // 0\n * ```\n */\nfunction min(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) < 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the maximum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The maximum value in the iterable. If multiple values are\n * equivalent to the maximum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { max } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * max([7, 4, 0, 3, 9, 4], numberCmp); // 9\n * ```\n */\nfunction max(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) > 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the minimum and maximum values in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns A 2-tuple of the `[min, max]` values in the iterable. If\n * multiple values are equivalent, the left-most values are returned.\n * If the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { minmax } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * minmax([7, 4, 0, 3, 9, 4], numberCmp); // [0, 9]\n * ```\n */\nfunction minmax(object, fn) {\n let empty = true;\n let vmin;\n let vmax;\n for (const value of object) {\n if (empty) {\n vmin = value;\n vmax = value;\n empty = false;\n }\n else if (fn(value, vmin) < 0) {\n vmin = value;\n }\n else if (fn(value, vmax) > 0) {\n vmax = value;\n }\n }\n return empty ? undefined : [vmin, vmax];\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an array from an iterable of values.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new array of values from the given object.\n *\n * #### Example\n * ```typescript\n * import { toArray } from '@lumino/algorithm';\n *\n * let stream = [1, 2, 3, 4, 5, 6][Symbol.iterator]();\n *\n * toArray(stream); // [1, 2, 3, 4, 5, 6];\n * ```\n */\nfunction toArray(object) {\n return Array.from(object);\n}\n/**\n * Create an object from an iterable of key/value pairs.\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new object mapping keys to values.\n *\n * #### Example\n * ```typescript\n * import { toObject } from '@lumino/algorithm';\n *\n * let data: [string, number][] = [['one', 1], ['two', 2], ['three', 3]];\n *\n * toObject(data); // { one: 1, two: 2, three: 3 }\n * ```\n */\nfunction toObject(object) {\n const result = {};\n for (const [key, value] of object) {\n result[key] = value;\n }\n return result;\n}\n/**\n * Invoke a function for each value in an iterable.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The callback function to invoke for each value.\n *\n * #### Notes\n * Iteration can be terminated early by returning `false` from the\n * callback function.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { each } from '@lumino/algorithm';\n *\n * let data = [5, 7, 0, -2, 9];\n *\n * each(data, value => { console.log(value); });\n * ```\n */\nfunction each(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return;\n }\n }\n}\n/**\n * Test whether all values in an iterable satisfy a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if all values pass the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `false` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { every } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * every(data, value => value % 2 === 0); // false\n * every(data, value => value % 2 === 1); // true\n * ```\n */\nfunction every(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Test whether any value in an iterable satisfies a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if any value passes the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `true` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { some } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * some(data, value => value === 7); // true\n * some(data, value => value === 3); // false\n * ```\n */\nfunction some(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return true;\n }\n }\n return false;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Transform the values of an iterable with a mapping function.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The mapping function to invoke for each value.\n *\n * @returns An iterator which yields the transformed values.\n *\n * #### Example\n * ```typescript\n * import { map } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3];\n *\n * let stream = map(data, value => value * 2);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* map(object, fn) {\n let index = 0;\n for (const value of object) {\n yield fn(value, index++);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator of evenly spaced values.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns An iterator which produces evenly spaced values.\n *\n * #### Notes\n * In the single argument form of `range(stop)`, `start` defaults to\n * `0` and `step` defaults to `1`.\n *\n * In the two argument form of `range(start, stop)`, `step` defaults\n * to `1`.\n *\n * #### Example\n * ```typescript\n * import { range } from '@lumino/algorithm';\n *\n * let stream = range(2, 4);\n *\n * Array.from(stream); // [2, 3]\n * ```\n */\nfunction* range(start, stop, step) {\n if (stop === undefined) {\n stop = start;\n start = 0;\n step = 1;\n }\n else if (step === undefined) {\n step = 1;\n }\n const length = Private.rangeLength(start, stop, step);\n for (let index = 0; index < length; index++) {\n yield start + step * index;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Compute the effective length of a range.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns The number of steps need to traverse the range.\n */\n function rangeLength(start, stop, step) {\n if (step === 0) {\n return Infinity;\n }\n if (start > stop && step > 0) {\n return 0;\n }\n if (start < stop && step < 0) {\n return 0;\n }\n return Math.ceil((stop - start) / step);\n }\n Private.rangeLength = rangeLength;\n})(Private || (Private = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nfunction reduce(object, fn, initial) {\n // Setup the iterator and fetch the first value.\n const it = object[Symbol.iterator]();\n let index = 0;\n let first = it.next();\n // An empty iterator and no initial value is an error.\n if (first.done && initial === undefined) {\n throw new TypeError('Reduce of empty iterable with no initial value.');\n }\n // If the iterator is empty, return the initial value.\n if (first.done) {\n return initial;\n }\n // If the iterator has a single item and no initial value, the\n // reducer is not invoked and the first item is the return value.\n let second = it.next();\n if (second.done && initial === undefined) {\n return first.value;\n }\n // If iterator has a single item and an initial value is provided,\n // the reducer is invoked and that result is the return value.\n if (second.done) {\n return fn(initial, first.value, index++);\n }\n // Setup the initial accumlated value.\n let accumulator;\n if (initial === undefined) {\n accumulator = fn(first.value, second.value, index++);\n }\n else {\n accumulator = fn(fn(initial, first.value, index++), second.value, index++);\n }\n // Iterate the rest of the values, updating the accumulator.\n let next;\n while (!(next = it.next()).done) {\n accumulator = fn(accumulator, next.value, index++);\n }\n // Return the final accumulated value.\n return accumulator;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator which repeats a value a number of times.\n *\n * @deprecated\n *\n * @param value - The value to repeat.\n *\n * @param count - The number of times to repeat the value.\n *\n * @returns A new iterator which repeats the specified value.\n *\n * #### Example\n * ```typescript\n * import { repeat } from '@lumino/algorithm';\n *\n * let stream = repeat(7, 3);\n *\n * Array.from(stream); // [7, 7, 7]\n * ```\n */\nfunction* repeat(value, count) {\n while (0 < count--) {\n yield value;\n }\n}\n/**\n * Create an iterator which yields a value a single time.\n *\n * @deprecated\n *\n * @param value - The value to wrap in an iterator.\n *\n * @returns A new iterator which yields the value a single time.\n *\n * #### Example\n * ```typescript\n * import { once } from '@lumino/algorithm';\n *\n * let stream = once(7);\n *\n * Array.from(stream); // [7]\n * ```\n */\nfunction* once(value) {\n yield value;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator for a retroable object.\n *\n * @param object - The retroable or array-like object of interest.\n *\n * @returns An iterator which traverses the object's values in reverse.\n *\n * #### Example\n * ```typescript\n * import { retro } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = retro(data);\n *\n * Array.from(stream); // [6, 5, 4, 3, 2, 1]\n * ```\n */\nfunction* retro(object) {\n if (typeof object.retro === 'function') {\n yield* object.retro();\n }\n else {\n for (let index = object.length - 1; index > -1; index--) {\n yield object[index];\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Topologically sort an iterable of edges.\n *\n * @param edges - The iterable object of edges to sort.\n * An edge is represented as a 2-tuple of `[fromNode, toNode]`.\n *\n * @returns The topologically sorted array of nodes.\n *\n * #### Notes\n * If a cycle is present in the graph, the cycle will be ignored and\n * the return value will be only approximately sorted.\n *\n * #### Example\n * ```typescript\n * import { topologicSort } from '@lumino/algorithm';\n *\n * let data = [\n * ['d', 'e'],\n * ['c', 'd'],\n * ['a', 'b'],\n * ['b', 'c']\n * ];\n *\n * topologicSort(data); // ['a', 'b', 'c', 'd', 'e']\n * ```\n */\nfunction topologicSort(edges) {\n // Setup the shared sorting state.\n let sorted = [];\n let visited = new Set();\n let graph = new Map();\n // Add the edges to the graph.\n for (const edge of edges) {\n addEdge(edge);\n }\n // Visit each node in the graph.\n for (const [k] of graph) {\n visit(k);\n }\n // Return the sorted results.\n return sorted;\n // Add an edge to the graph.\n function addEdge(edge) {\n let [fromNode, toNode] = edge;\n let children = graph.get(toNode);\n if (children) {\n children.push(fromNode);\n }\n else {\n graph.set(toNode, [fromNode]);\n }\n }\n // Recursively visit the node.\n function visit(node) {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n let children = graph.get(node);\n if (children) {\n for (const child of children) {\n visit(child);\n }\n }\n sorted.push(node);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate over an iterable using a stepped increment.\n *\n * @param object - The iterable object of interest.\n *\n * @param step - The distance to step on each iteration. A value\n * of less than `1` will behave the same as a value of `1`.\n *\n * @returns An iterator which traverses the iterable step-wise.\n *\n * #### Example\n * ```typescript\n * import { stride } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = stride(data, 2);\n *\n * Array.from(stream); // [1, 3, 5];\n * ```\n */\nfunction* stride(object, step) {\n let count = 0;\n for (const value of object) {\n if (0 === count++ % step) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for string-specific algorithms.\n */\nvar StringExt;\n(function (StringExt) {\n /**\n * Find the indices of characters in a source text.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The matched indices, or `null` if there is no match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * In order for there to be a match, all of the characters in `query`\n * **must** appear in `source` in the order given by `query`.\n *\n * Characters are matched using strict `===` equality.\n */\n function findIndices(source, query, start = 0) {\n let indices = new Array(query.length);\n for (let i = 0, j = start, n = query.length; i < n; ++i, ++j) {\n j = source.indexOf(query[i], j);\n if (j === -1) {\n return null;\n }\n indices[i] = j;\n }\n return indices;\n }\n StringExt.findIndices = findIndices;\n /**\n * A string matcher which uses a sum-of-squares algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-squares approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The index of each\n * matching character is squared and added to the score. This means\n * that early and consecutive character matches are preferred, while\n * late matches are heavily penalized.\n */\n function matchSumOfSquares(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i] - start;\n score += j * j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfSquares = matchSumOfSquares;\n /**\n * A string matcher which uses a sum-of-deltas algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-deltas approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The delta between\n * the indices are summed to create the score. This means that groups\n * of matched characters are preferred, while fragmented matches are\n * penalized.\n */\n function matchSumOfDeltas(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n let last = start - 1;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i];\n score += j - last - 1;\n last = j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfDeltas = matchSumOfDeltas;\n /**\n * Highlight the matched characters of a source text.\n *\n * @param source - The text which should be highlighted.\n *\n * @param indices - The indices of the matched characters. They must\n * appear in increasing order and must be in bounds of the source.\n *\n * @param fn - The function to apply to the matched chunks.\n *\n * @returns An array of unmatched and highlighted chunks.\n */\n function highlight(source, indices, fn) {\n // Set up the result array.\n let result = [];\n // Set up the counter variables.\n let k = 0;\n let last = 0;\n let n = indices.length;\n // Iterator over each index.\n while (k < n) {\n // Set up the chunk indices.\n let i = indices[k];\n let j = indices[k];\n // Advance the right chunk index until it's non-contiguous.\n while (++k < n && indices[k] === j + 1) {\n j++;\n }\n // Extract the unmatched text.\n if (last < i) {\n result.push(source.slice(last, i));\n }\n // Extract and highlight the matched text.\n if (i < j + 1) {\n result.push(fn(source.slice(i, j + 1)));\n }\n // Update the last visited index.\n last = j + 1;\n }\n // Extract any remaining unmatched text.\n if (last < source.length) {\n result.push(source.slice(last));\n }\n // Return the highlighted result.\n return result;\n }\n StringExt.highlight = highlight;\n /**\n * A 3-way string comparison function.\n *\n * @param a - The first string of interest.\n *\n * @param b - The second string of interest.\n *\n * @returns `-1` if `a < b`, else `1` if `a > b`, else `0`.\n */\n function cmp(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n StringExt.cmp = cmp;\n})(StringExt || (StringExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Take a fixed number of items from an iterable.\n *\n * @param object - The iterable object of interest.\n *\n * @param count - The number of items to take from the iterable.\n *\n * @returns An iterator which yields the specified number of items\n * from the source iterable.\n *\n * #### Notes\n * The returned iterator will exhaust early if the source iterable\n * contains an insufficient number of items.\n *\n * #### Example\n * ```typescript\n * import { take } from '@lumino/algorithm';\n *\n * let stream = take([5, 4, 3, 2, 1, 0, -1], 3);\n *\n * Array.from(stream); // [5, 4, 3]\n * ```\n */\nfunction* take(object, count) {\n if (count < 1) {\n return;\n }\n const it = object[Symbol.iterator]();\n let item;\n while (0 < count-- && !(item = it.next()).done) {\n yield item.value;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate several iterables in lockstep.\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields successive tuples of values where\n * each value is taken in turn from the provided iterables. It will\n * be as long as the shortest provided iterable.\n *\n * #### Example\n * ```typescript\n * import { zip } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = zip(data1, data2);\n *\n * Array.from(stream); // [[1, 4], [2, 5], [3, 6]]\n * ```\n */\nfunction* zip(...objects) {\n const iters = objects.map(obj => obj[Symbol.iterator]());\n let tuple = iters.map(it => it.next());\n for (; every(tuple, item => !item.done); tuple = iters.map(it => it.next())) {\n yield tuple.map(item => item.value);\n }\n}\n\nexport { ArrayExt, StringExt, chain, each, empty, enumerate, every, filter, find, findIndex, map, max, min, minmax, once, range, reduce, repeat, retro, some, stride, take, toArray, toObject, topologicSort, zip };\n//# sourceMappingURL=index.es6.js.map\n","/**\n * A generic doubly-linked list.\n */\nclass LinkedList {\n constructor() {\n this._first = null;\n this._last = null;\n this._size = 0;\n }\n /**\n * Whether the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get isEmpty() {\n return this._size === 0;\n }\n /**\n * The size of the list.\n *\n * #### Complexity\n * `O(1)`\n *\n * #### Notes\n * This is equivalent to `length`.\n */\n get size() {\n return this._size;\n }\n /**\n * The length of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `size`.\n *\n * This property is deprecated.\n */\n get length() {\n return this._size;\n }\n /**\n * The first value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get first() {\n return this._first ? this._first.value : undefined;\n }\n /**\n * The last value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get last() {\n return this._last ? this._last.value : undefined;\n }\n /**\n * The first node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get firstNode() {\n return this._first;\n }\n /**\n * The last node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get lastNode() {\n return this._last;\n }\n /**\n * Create an iterator over the values in the list.\n *\n * @returns A new iterator starting with the first value.\n *\n * #### Complexity\n * Constant.\n */\n *[Symbol.iterator]() {\n let node = this._first;\n while (node) {\n yield node.value;\n node = node.next;\n }\n }\n /**\n * Create a reverse iterator over the values in the list.\n *\n * @returns A new iterator starting with the last value.\n *\n * #### Complexity\n * Constant.\n */\n *retro() {\n let node = this._last;\n while (node) {\n yield node.value;\n node = node.prev;\n }\n }\n /**\n * Create an iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the first node.\n *\n * #### Complexity\n * Constant.\n */\n *nodes() {\n let node = this._first;\n while (node) {\n yield node;\n node = node.next;\n }\n }\n /**\n * Create a reverse iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the last node.\n *\n * #### Complexity\n * Constant.\n */\n *retroNodes() {\n let node = this._last;\n while (node) {\n yield node;\n node = node.prev;\n }\n }\n /**\n * Assign new values to the list, replacing all current values.\n *\n * @param values - The values to assign to the list.\n *\n * #### Complexity\n * Linear.\n */\n assign(values) {\n this.clear();\n for (const value of values) {\n this.addLast(value);\n }\n }\n /**\n * Add a value to the end of the list.\n *\n * @param value - The value to add to the end of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `addLast`.\n */\n push(value) {\n this.addLast(value);\n }\n /**\n * Remove and return the value at the end of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `removeLast`.\n */\n pop() {\n return this.removeLast();\n }\n /**\n * Add a value to the beginning of the list.\n *\n * @param value - The value to add to the beginning of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `addFirst`.\n */\n shift(value) {\n this.addFirst(value);\n }\n /**\n * Remove and return the value at the beginning of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `removeFirst`.\n */\n unshift() {\n return this.removeFirst();\n }\n /**\n * Add a value to the beginning of the list.\n *\n * @param value - The value to add to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n addFirst(value) {\n let node = new Private.LinkedListNode(this, value);\n if (!this._first) {\n this._first = node;\n this._last = node;\n }\n else {\n node.next = this._first;\n this._first.prev = node;\n this._first = node;\n }\n this._size++;\n return node;\n }\n /**\n * Add a value to the end of the list.\n *\n * @param value - The value to add to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n addLast(value) {\n let node = new Private.LinkedListNode(this, value);\n if (!this._last) {\n this._first = node;\n this._last = node;\n }\n else {\n node.prev = this._last;\n this._last.next = node;\n this._last = node;\n }\n this._size++;\n return node;\n }\n /**\n * Insert a value before a specific node in the list.\n *\n * @param value - The value to insert before the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n insertBefore(value, ref) {\n if (!ref || ref === this._first) {\n return this.addFirst(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n let node = new Private.LinkedListNode(this, value);\n let _ref = ref;\n let prev = _ref.prev;\n node.next = _ref;\n node.prev = prev;\n _ref.prev = node;\n prev.next = node;\n this._size++;\n return node;\n }\n /**\n * Insert a value after a specific node in the list.\n *\n * @param value - The value to insert after the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n insertAfter(value, ref) {\n if (!ref || ref === this._last) {\n return this.addLast(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n let node = new Private.LinkedListNode(this, value);\n let _ref = ref;\n let next = _ref.next;\n node.next = next;\n node.prev = _ref;\n _ref.next = node;\n next.prev = node;\n this._size++;\n return node;\n }\n /**\n * Remove and return the value at the beginning of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n removeFirst() {\n let node = this._first;\n if (!node) {\n return undefined;\n }\n if (node === this._last) {\n this._first = null;\n this._last = null;\n }\n else {\n this._first = node.next;\n this._first.prev = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._size--;\n return node.value;\n }\n /**\n * Remove and return the value at the end of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n removeLast() {\n let node = this._last;\n if (!node) {\n return undefined;\n }\n if (node === this._first) {\n this._first = null;\n this._last = null;\n }\n else {\n this._last = node.prev;\n this._last.next = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._size--;\n return node.value;\n }\n /**\n * Remove a specific node from the list.\n *\n * @param node - The node to remove from the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * The node must be owned by the list.\n */\n removeNode(node) {\n if (!(node instanceof Private.LinkedListNode) || node.list !== this) {\n throw new Error('Node is not owned by the list.');\n }\n let _node = node;\n if (_node === this._first && _node === this._last) {\n this._first = null;\n this._last = null;\n }\n else if (_node === this._first) {\n this._first = _node.next;\n this._first.prev = null;\n }\n else if (_node === this._last) {\n this._last = _node.prev;\n this._last.next = null;\n }\n else {\n _node.next.prev = _node.prev;\n _node.prev.next = _node.next;\n }\n _node.list = null;\n _node.next = null;\n _node.prev = null;\n this._size--;\n }\n /**\n * Remove all values from the list.\n *\n * #### Complexity\n * Linear.\n */\n clear() {\n let node = this._first;\n while (node) {\n let next = node.next;\n node.list = null;\n node.prev = null;\n node.next = null;\n node = next;\n }\n this._first = null;\n this._last = null;\n this._size = 0;\n }\n}\n/**\n * The namespace for the `LinkedList` class statics.\n */\n(function (LinkedList) {\n /**\n * Create a linked list from an iterable of values.\n *\n * @param values - The iterable object of interest.\n *\n * @returns A new linked list initialized with the given values.\n *\n * #### Complexity\n * Linear.\n */\n function from(values) {\n let list = new LinkedList();\n list.assign(values);\n return list;\n }\n LinkedList.from = from;\n})(LinkedList || (LinkedList = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The internal linked list node implementation.\n */\n class LinkedListNode {\n /**\n * Construct a new linked list node.\n *\n * @param list - The list which owns the node.\n *\n * @param value - The value for the link.\n */\n constructor(list, value) {\n /**\n * The linked list which created and owns the node.\n */\n this.list = null;\n /**\n * The next node in the list.\n */\n this.next = null;\n /**\n * The previous node in the list.\n */\n this.prev = null;\n this.list = list;\n this.value = value;\n }\n }\n Private.LinkedListNode = LinkedListNode;\n})(Private || (Private = {}));\n\nexport { LinkedList };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Platform, Selector } from '@lumino/domutils';\nimport { getKeyboardLayout } from '@lumino/keyboard';\nimport { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module commands\n */\n/**\n * An object which manages a collection of commands.\n *\n * #### Notes\n * A command registry can be used to populate a variety of action-based\n * widgets, such as command palettes, menus, and toolbars.\n */\nclass CommandRegistry {\n constructor() {\n this._timerID = 0;\n this._timerModifierID = 0;\n this._replaying = false;\n this._keystrokes = [];\n this._keydownEvents = [];\n this._keyBindings = [];\n this._exactKeyMatch = null;\n this._commands = new Map();\n this._commandChanged = new Signal(this);\n this._commandExecuted = new Signal(this);\n this._keyBindingChanged = new Signal(this);\n this._holdKeyBindingPromises = new Map();\n }\n /**\n * A signal emitted when a command has changed.\n *\n * #### Notes\n * This signal is useful for visual representations of commands which\n * need to refresh when the state of a relevant command has changed.\n */\n get commandChanged() {\n return this._commandChanged;\n }\n /**\n * A signal emitted when a command has executed.\n *\n * #### Notes\n * Care should be taken when consuming this signal. The command system is used\n * by many components for many user actions. Handlers registered with this\n * signal must return quickly to ensure the overall application remains responsive.\n */\n get commandExecuted() {\n return this._commandExecuted;\n }\n /**\n * A signal emitted when a key binding is changed.\n */\n get keyBindingChanged() {\n return this._keyBindingChanged;\n }\n /**\n * A read-only array of the key bindings in the registry.\n */\n get keyBindings() {\n return this._keyBindings;\n }\n /**\n * List the ids of the registered commands.\n *\n * @returns A new array of the registered command ids.\n */\n listCommands() {\n return Array.from(this._commands.keys());\n }\n /**\n * Test whether a specific command is registered.\n *\n * @param id - The id of the command of interest.\n *\n * @returns `true` if the command is registered, `false` otherwise.\n */\n hasCommand(id) {\n return this._commands.has(id);\n }\n /**\n * Add a command to the registry.\n *\n * @param id - The unique id of the command.\n *\n * @param options - The options for the command.\n *\n * @returns A disposable which will remove the command.\n *\n * @throws An error if the given `id` is already registered.\n */\n addCommand(id, options) {\n // Throw an error if the id is already registered.\n if (this._commands.has(id)) {\n throw new Error(`Command '${id}' already registered.`);\n }\n // Add the command to the registry.\n this._commands.set(id, Private.createCommand(options));\n // Emit the `commandChanged` signal.\n this._commandChanged.emit({ id, type: 'added' });\n // Return a disposable which will remove the command.\n return new DisposableDelegate(() => {\n // Remove the command from the registry.\n this._commands.delete(id);\n // Emit the `commandChanged` signal.\n this._commandChanged.emit({ id, type: 'removed' });\n });\n }\n /**\n * Notify listeners that the state of a command has changed.\n *\n * @param id - The id of the command which has changed. If more than\n * one command has changed, this argument should be omitted.\n *\n * @throws An error if the given `id` is not registered.\n *\n * #### Notes\n * This method should be called by the command author whenever the\n * application state changes such that the results of the command\n * metadata functions may have changed.\n *\n * This will cause the `commandChanged` signal to be emitted.\n */\n notifyCommandChanged(id) {\n if (id !== undefined && !this._commands.has(id)) {\n throw new Error(`Command '${id}' is not registered.`);\n }\n this._commandChanged.emit({ id, type: id ? 'changed' : 'many-changed' });\n }\n /**\n * Get the description for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The description for the command.\n */\n describedBy(id, args = JSONExt.emptyObject) {\n var _a;\n let cmd = this._commands.get(id);\n return Promise.resolve((_a = cmd === null || cmd === void 0 ? void 0 : cmd.describedBy.call(undefined, args)) !== null && _a !== void 0 ? _a : { args: null });\n }\n /**\n * Get the display label for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The display label for the command, or an empty string\n * if the command is not registered.\n */\n label(id, args = JSONExt.emptyObject) {\n var _a;\n let cmd = this._commands.get(id);\n return (_a = cmd === null || cmd === void 0 ? void 0 : cmd.label.call(undefined, args)) !== null && _a !== void 0 ? _a : '';\n }\n /**\n * Get the mnemonic index for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The mnemonic index for the command, or `-1` if the\n * command is not registered.\n */\n mnemonic(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.mnemonic.call(undefined, args) : -1;\n }\n /**\n * Get the icon renderer for a specific command.\n *\n * DEPRECATED: if set to a string value, the .icon field will\n * function as an alias for the .iconClass field, for backwards\n * compatibility. In the future when this is removed, the default\n * return type will become undefined.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon renderer for the command or `undefined`.\n */\n icon(id, args = JSONExt.emptyObject) {\n var _a;\n return (_a = this._commands.get(id)) === null || _a === void 0 ? void 0 : _a.icon.call(undefined, args);\n }\n /**\n * Get the icon class for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon class for the command, or an empty string if\n * the command is not registered.\n */\n iconClass(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.iconClass.call(undefined, args) : '';\n }\n /**\n * Get the icon label for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon label for the command, or an empty string if\n * the command is not registered.\n */\n iconLabel(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.iconLabel.call(undefined, args) : '';\n }\n /**\n * Get the short form caption for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The caption for the command, or an empty string if the\n * command is not registered.\n */\n caption(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.caption.call(undefined, args) : '';\n }\n /**\n * Get the usage help text for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The usage text for the command, or an empty string if\n * the command is not registered.\n */\n usage(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.usage.call(undefined, args) : '';\n }\n /**\n * Get the extra class name for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The class name for the command, or an empty string if\n * the command is not registered.\n */\n className(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.className.call(undefined, args) : '';\n }\n /**\n * Get the dataset for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The dataset for the command, or an empty dataset if\n * the command is not registered.\n */\n dataset(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.dataset.call(undefined, args) : {};\n }\n /**\n * Test whether a specific command is enabled.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is enabled,\n * or `false` if the command is not registered.\n */\n isEnabled(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isEnabled.call(undefined, args) : false;\n }\n /**\n * Test whether a specific command is toggled.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is toggled,\n * or `false` if the command is not registered.\n */\n isToggled(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isToggled.call(undefined, args) : false;\n }\n /**\n * Test whether a specific command is toggleable.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is toggleable,\n * or `false` if the command is not registered.\n */\n isToggleable(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isToggleable : false;\n }\n /**\n * Test whether a specific command is visible.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is visible,\n * or `false` if the command is not registered.\n */\n isVisible(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isVisible.call(undefined, args) : false;\n }\n /**\n * Execute a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A promise which resolves with the result of the command.\n *\n * #### Notes\n * The promise will reject if the command throws an exception,\n * or if the command is not registered.\n */\n execute(id, args = JSONExt.emptyObject) {\n // Reject if the command is not registered.\n let cmd = this._commands.get(id);\n if (!cmd) {\n return Promise.reject(new Error(`Command '${id}' not registered.`));\n }\n // Execute the command and reject if an exception is thrown.\n let value;\n try {\n value = cmd.execute.call(undefined, args);\n }\n catch (err) {\n value = Promise.reject(err);\n }\n // Create the return promise which resolves the result.\n let result = Promise.resolve(value);\n // Emit the command executed signal.\n this._commandExecuted.emit({ id, args, result });\n // Return the result promise to the caller.\n return result;\n }\n /**\n * Add a key binding to the registry.\n *\n * @param options - The options for creating the key binding.\n *\n * @returns A disposable which removes the added key binding.\n *\n * #### Notes\n * If multiple key bindings are registered for the same sequence, the\n * binding with the highest selector specificity is executed first. A\n * tie is broken by using the most recently added key binding.\n *\n * Ambiguous key bindings are resolved with a timeout. As an example,\n * suppose two key bindings are registered: one with the key sequence\n * `['Ctrl D']`, and another with `['Ctrl D', 'Ctrl W']`. If the user\n * presses `Ctrl D`, the first binding cannot be immediately executed\n * since the user may intend to complete the chord with `Ctrl W`. For\n * such cases, a timer is used to allow the chord to be completed. If\n * the chord is not completed before the timeout, the first binding\n * is executed.\n */\n addKeyBinding(options) {\n // Create the binding for the given options.\n let binding = Private.createKeyBinding(options);\n // Add the key binding to the bindings array.\n this._keyBindings.push(binding);\n // Emit the `bindingChanged` signal.\n this._keyBindingChanged.emit({ binding, type: 'added' });\n // Return a disposable which will remove the binding.\n return new DisposableDelegate(() => {\n // Remove the binding from the array.\n ArrayExt.removeFirstOf(this._keyBindings, binding);\n // Emit the `bindingChanged` signal.\n this._keyBindingChanged.emit({ binding, type: 'removed' });\n });\n }\n /**\n * Process a `'keydown'` event and invoke a matching key binding.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * #### Notes\n * This should be called in response to a `'keydown'` event in order\n * to invoke the command for the best matching key binding.\n *\n * The registry **does not** install its own listener for `'keydown'`\n * events. This allows the application full control over the nodes\n * and phase for which the registry processes `'keydown'` events.\n *\n * When the keydown event is processed, if the event target or any of its\n * ancestor nodes has a `data-lm-suppress-shortcuts` attribute, its keydown\n * events will not invoke commands.\n */\n processKeydownEvent(event) {\n // Bail immediately if playing back keystrokes.\n if (event.defaultPrevented || this._replaying) {\n return;\n }\n // Get the normalized keystroke for the event.\n const keystroke = CommandRegistry.keystrokeForKeydownEvent(event);\n // If the keystroke is not valid for the keyboard layout, replay\n // any suppressed events and clear the pending state.\n if (!keystroke) {\n this._replayKeydownEvents();\n this._clearPendingState();\n return;\n }\n // Check that only mod key(s) have been pressed.\n if (CommandRegistry.isModifierKeyPressed(event)) {\n // Find the exact match for the modifier keys.\n let { exact } = Private.matchKeyBinding(this._keyBindings, [keystroke], event);\n if (exact) {\n // If the mod keys match an exact shortcut, start a dedicated timer.\n event.preventDefault();\n event.stopPropagation();\n this._startModifierTimer(exact);\n }\n else {\n // Otherwise stop potential existing timer.\n this._clearModifierTimer();\n }\n return;\n }\n // Add the keystroke to the current key sequence.\n this._keystrokes.push(keystroke);\n // Find the exact and partial matches for the key sequence.\n const { exact, partial } = Private.matchKeyBinding(this._keyBindings, this._keystrokes, event);\n // Whether there is any partial match.\n const hasPartial = partial.length !== 0;\n // If there is no exact match and no partial match, replay\n // any suppressed events and clear the pending state.\n if (!exact && !hasPartial) {\n this._replayKeydownEvents();\n this._clearPendingState();\n return;\n }\n // Stop propagation of the event. If there is only a partial match,\n // the event will be replayed if a final exact match never occurs.\n if ((exact === null || exact === void 0 ? void 0 : exact.preventDefault) || partial.some(match => match.preventDefault)) {\n event.preventDefault();\n event.stopPropagation();\n }\n // Store the event for possible playback in the future and for\n // the use in execution hold check.\n this._keydownEvents.push(event);\n // If there is an exact match but no partial match, the exact match\n // can be dispatched immediately. The pending state is cleared so\n // the next key press starts from the default state.\n if (exact && !hasPartial) {\n this._executeKeyBinding(exact);\n this._clearPendingState();\n return;\n }\n // If there is both an exact match and a partial match, the exact\n // match is stored for future dispatch in case the timer expires\n // before a more specific match is triggered.\n if (exact) {\n this._exactKeyMatch = exact;\n }\n // (Re)start the timer to dispatch the most recent exact match\n // in case the partial match fails to result in an exact match.\n this._startTimer();\n }\n /**\n * Delay the execution of any command matched against the given 'keydown' event\n * until the `permission` to execute is granted.\n *\n * @param event - The event object for a `'keydown'` event.\n * @param permission - The promise with value indicating whether to proceed with the execution.\n *\n * ### Note\n * This enables the caller of `processKeydownEvent` to asynchronously prevent the\n * execution of the command based on external events.\n */\n holdKeyBindingExecution(event, permission) {\n this._holdKeyBindingPromises.set(event, permission);\n }\n /**\n * Process a ``keyup`` event to clear the timer on the modifier, if it exists.\n *\n * @param event - The event object for a `'keydown'` event.\n */\n processKeyupEvent(event) {\n this._clearModifierTimer();\n }\n /**\n * Start or restart the timeout on the modifier keys.\n *\n * This timeout will end only if the keys are hold.\n */\n _startModifierTimer(exact) {\n this._clearModifierTimer();\n this._timerModifierID = window.setTimeout(() => {\n this._executeKeyBinding(exact);\n }, Private.modifierkeyTimeOut);\n }\n /**\n * Clear the timeout on modifier keys.\n */\n _clearModifierTimer() {\n if (this._timerModifierID !== 0) {\n clearTimeout(this._timerModifierID);\n this._timerModifierID = 0;\n }\n }\n /**\n * Start or restart the pending timeout.\n */\n _startTimer() {\n this._clearTimer();\n this._timerID = window.setTimeout(() => {\n this._onPendingTimeout();\n }, Private.CHORD_TIMEOUT);\n }\n /**\n * Clear the pending timeout.\n */\n _clearTimer() {\n if (this._timerID !== 0) {\n clearTimeout(this._timerID);\n this._timerID = 0;\n }\n }\n /**\n * Replay the keydown events which were suppressed.\n */\n _replayKeydownEvents() {\n if (this._keydownEvents.length === 0) {\n return;\n }\n this._replaying = true;\n this._keydownEvents.forEach(Private.replayKeyEvent);\n this._replaying = false;\n }\n /**\n * Execute the command for the given key binding.\n *\n * If the command is missing or disabled, a warning will be logged.\n *\n * The execution will not proceed if any of the events leading to\n * the keybinding matching were held with the permission resolving to false.\n */\n async _executeKeyBinding(binding) {\n if (this._holdKeyBindingPromises.size !== 0) {\n // Copy keydown events list to ensure it is available in async code.\n const keydownEvents = [...this._keydownEvents];\n // Wait until all hold requests on execution are lifted.\n const executionAllowed = (await Promise.race([\n Promise.all(keydownEvents.map(async (event) => { var _a; return (_a = this._holdKeyBindingPromises.get(event)) !== null && _a !== void 0 ? _a : Promise.resolve(true); })),\n new Promise(resolve => {\n setTimeout(() => resolve([false]), Private.KEYBINDING_HOLD_TIMEOUT);\n })\n ])).every(Boolean);\n // Clear the hold requests.\n this._holdKeyBindingPromises.clear();\n // Do not proceed with the execution if any of the hold requests did not get the permission to proceed.\n if (!executionAllowed) {\n return;\n }\n }\n let { command, args } = binding;\n let newArgs = {\n _luminoEvent: { type: 'keybinding', keys: binding.keys },\n ...args\n };\n if (!this.hasCommand(command) || !this.isEnabled(command, newArgs)) {\n let word = this.hasCommand(command) ? 'enabled' : 'registered';\n let keys = binding.keys.join(', ');\n let msg1 = `Cannot execute key binding '${keys}':`;\n let msg2 = `command '${command}' is not ${word}.`;\n console.warn(`${msg1} ${msg2}`);\n return;\n }\n await this.execute(command, newArgs);\n }\n /**\n * Clear the internal pending state.\n */\n _clearPendingState() {\n this._clearTimer();\n this._clearModifierTimer();\n this._exactKeyMatch = null;\n this._keystrokes.length = 0;\n this._keydownEvents.length = 0;\n }\n /**\n * Handle the partial match timeout.\n */\n _onPendingTimeout() {\n this._timerID = 0;\n if (this._exactKeyMatch) {\n this._executeKeyBinding(this._exactKeyMatch);\n }\n else {\n this._replayKeydownEvents();\n }\n this._clearPendingState();\n }\n}\n/**\n * The namespace for the `CommandRegistry` class statics.\n */\n(function (CommandRegistry) {\n /**\n * Parse a keystroke into its constituent components.\n *\n * @param keystroke - The keystroke of interest.\n *\n * @returns The parsed components of the keystroke.\n *\n * #### Notes\n * The keystroke should be of the form:\n * `[ [ [ ]]]`\n *\n * The supported modifiers are: `Accel`, `Alt`, `Cmd`, `Ctrl`, and\n * `Shift`. The `Accel` modifier is translated to `Cmd` on Mac and\n * `Ctrl` on all other platforms.\n *\n * The parsing is tolerant and will not throw exceptions. Notably:\n * - Duplicate modifiers are ignored.\n * - Extra primary keys are ignored.\n * - The order of modifiers and primary key is irrelevant.\n * - The keystroke parts should be separated by whitespace.\n * - The keystroke is case sensitive.\n */\n function parseKeystroke(keystroke) {\n let key = '';\n let alt = false;\n let cmd = false;\n let ctrl = false;\n let shift = false;\n for (let token of keystroke.split(/\\s+/)) {\n if (token === 'Accel') {\n if (Platform.IS_MAC) {\n cmd = true;\n }\n else {\n ctrl = true;\n }\n }\n else if (token === 'Alt') {\n alt = true;\n }\n else if (token === 'Cmd') {\n cmd = true;\n }\n else if (token === 'Ctrl') {\n ctrl = true;\n }\n else if (token === 'Shift') {\n shift = true;\n }\n else if (token.length > 0) {\n key = token;\n }\n }\n return { cmd, ctrl, alt, shift, key };\n }\n CommandRegistry.parseKeystroke = parseKeystroke;\n /**\n * Normalize a keystroke into a canonical representation.\n *\n * @param keystroke - The keystroke of interest.\n *\n * @returns The normalized representation of the keystroke.\n *\n * #### Notes\n * This normalizes the keystroke by removing duplicate modifiers and\n * extra primary keys, and assembling the parts in a canonical order.\n *\n * The `Cmd` modifier is ignored on non-Mac platforms.\n */\n function normalizeKeystroke(keystroke) {\n let mods = '';\n let parts = parseKeystroke(keystroke);\n if (parts.ctrl) {\n mods += 'Ctrl ';\n }\n if (parts.alt) {\n mods += 'Alt ';\n }\n if (parts.shift) {\n mods += 'Shift ';\n }\n if (parts.cmd && Platform.IS_MAC) {\n mods += 'Cmd ';\n }\n if (!parts.key) {\n return mods.trim();\n }\n return mods + parts.key;\n }\n CommandRegistry.normalizeKeystroke = normalizeKeystroke;\n /**\n * Get the platform-specific normalized keys for an options object.\n *\n * @param options - The options for the key binding.\n *\n * @returns Array of combined, normalized keys.\n */\n function normalizeKeys(options) {\n let keys;\n if (Platform.IS_WIN) {\n keys = options.winKeys || options.keys;\n }\n else if (Platform.IS_MAC) {\n keys = options.macKeys || options.keys;\n }\n else {\n keys = options.linuxKeys || options.keys;\n }\n return keys.map(normalizeKeystroke);\n }\n CommandRegistry.normalizeKeys = normalizeKeys;\n /**\n * Format keystrokes for display on the local system.\n *\n * If a list of keystrokes is provided, it will be displayed as\n * a comma-separated string\n *\n * @param keystroke The keystrokes to format\n * @returns The keystrokes representation\n */\n function formatKeystroke(keystroke) {\n return typeof keystroke === 'string'\n ? formatSingleKey(keystroke)\n : keystroke.map(formatSingleKey).join(', ');\n function formatSingleKey(key) {\n let mods = [];\n let separator = Platform.IS_MAC ? ' ' : '+';\n let parts = parseKeystroke(key);\n if (parts.ctrl) {\n mods.push('Ctrl');\n }\n if (parts.alt) {\n mods.push('Alt');\n }\n if (parts.shift) {\n mods.push('Shift');\n }\n if (Platform.IS_MAC && parts.cmd) {\n mods.push('Cmd');\n }\n mods.push(parts.key);\n return mods.map(Private.formatKey).join(separator);\n }\n }\n CommandRegistry.formatKeystroke = formatKeystroke;\n /**\n * Check if `'keydown'` event is caused by pressing a modifier key that should be ignored.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns `true` if modifier key was pressed, `false` otherwise.\n */\n function isModifierKeyPressed(event) {\n let layout = getKeyboardLayout();\n let key = layout.keyForKeydownEvent(event);\n return layout.isModifierKey(key);\n }\n CommandRegistry.isModifierKeyPressed = isModifierKeyPressed;\n /**\n * Create a normalized keystroke for a `'keydown'` event.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns A normalized keystroke, or an empty string if the event\n * does not represent a valid keystroke for the given layout.\n */\n function keystrokeForKeydownEvent(event) {\n let layout = getKeyboardLayout();\n let key = layout.keyForKeydownEvent(event);\n let mods = [];\n if (event.ctrlKey) {\n mods.push('Ctrl');\n }\n if (event.altKey) {\n mods.push('Alt');\n }\n if (event.shiftKey) {\n mods.push('Shift');\n }\n if (event.metaKey && Platform.IS_MAC) {\n mods.push('Cmd');\n }\n if (!layout.isModifierKey(key)) {\n mods.push(key);\n }\n // for purely modifier key strings\n return mods.join(' ');\n }\n CommandRegistry.keystrokeForKeydownEvent = keystrokeForKeydownEvent;\n})(CommandRegistry || (CommandRegistry = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The timeout in ms for triggering a key binding chord.\n */\n Private.CHORD_TIMEOUT = 1000;\n /**\n * The timeout in ms for stopping the hold on keybinding execution.\n */\n Private.KEYBINDING_HOLD_TIMEOUT = 1000;\n /**\n * The timeout in ms for triggering a modifer key binding.\n */\n Private.modifierkeyTimeOut = 500;\n /**\n * Create a normalized command from an options object.\n */\n function createCommand(options) {\n return {\n execute: options.execute,\n describedBy: asFunc(typeof options.describedBy === 'function'\n ? options.describedBy\n : { args: null, ...options.describedBy }, () => {\n return { args: null };\n }),\n label: asFunc(options.label, emptyStringFunc),\n mnemonic: asFunc(options.mnemonic, negativeOneFunc),\n icon: asFunc(options.icon, undefinedFunc),\n iconClass: asFunc(options.iconClass, emptyStringFunc),\n iconLabel: asFunc(options.iconLabel, emptyStringFunc),\n caption: asFunc(options.caption, emptyStringFunc),\n usage: asFunc(options.usage, emptyStringFunc),\n className: asFunc(options.className, emptyStringFunc),\n dataset: asFunc(options.dataset, emptyDatasetFunc),\n isEnabled: options.isEnabled || trueFunc,\n isToggled: options.isToggled || falseFunc,\n isToggleable: options.isToggleable || !!options.isToggled,\n isVisible: options.isVisible || trueFunc\n };\n }\n Private.createCommand = createCommand;\n /**\n * Create a key binding object from key binding options.\n */\n function createKeyBinding(options) {\n var _a;\n return {\n keys: CommandRegistry.normalizeKeys(options),\n selector: validateSelector(options),\n command: options.command,\n args: options.args || JSONExt.emptyObject,\n preventDefault: (_a = options.preventDefault) !== null && _a !== void 0 ? _a : true\n };\n }\n Private.createKeyBinding = createKeyBinding;\n /**\n * Find the key bindings which match a key sequence.\n *\n * This returns a match result which contains the best exact matching\n * binding, and a flag which indicates if there are partial matches.\n */\n function matchKeyBinding(bindings, keys, event) {\n // The current best exact match.\n let exact = null;\n // Partial matches.\n let partial = [];\n // The match distance for the exact match.\n let distance = Infinity;\n // The specificity for the exact match.\n let specificity = 0;\n // Iterate over the bindings and search for the best match.\n for (let i = 0, n = bindings.length; i < n; ++i) {\n // Lookup the current binding.\n let binding = bindings[i];\n // Check whether the key binding sequence is a match.\n let sqm = matchSequence(binding.keys, keys);\n // If there is no match, the binding is ignored.\n if (sqm === 0 /* SequenceMatch.None */) {\n continue;\n }\n // If it is a partial match and no other partial match has been\n // found, ensure the selector matches and set the partial flag.\n if (sqm === 2 /* SequenceMatch.Partial */) {\n if (targetDistance(binding.selector, event) !== -1) {\n partial.push(binding);\n }\n continue;\n }\n // Ignore the match if the selector doesn't match, or if the\n // matched node is farther away than the current best match.\n let td = targetDistance(binding.selector, event);\n if (td === -1 || td > distance) {\n continue;\n }\n // Get the specificity for the selector.\n let sp = Selector.calculateSpecificity(binding.selector);\n // Update the best match if this match is stronger.\n if (!exact || td < distance || sp >= specificity) {\n exact = binding;\n distance = td;\n specificity = sp;\n }\n }\n // Return the match result.\n return { exact, partial };\n }\n Private.matchKeyBinding = matchKeyBinding;\n /**\n * Replay a keyboard event.\n *\n * This synthetically dispatches a clone of the keyboard event.\n */\n function replayKeyEvent(event) {\n event.target.dispatchEvent(cloneKeyboardEvent(event));\n }\n Private.replayKeyEvent = replayKeyEvent;\n function formatKey(key) {\n if (Platform.IS_MAC) {\n return MAC_DISPLAY.hasOwnProperty(key) ? MAC_DISPLAY[key] : key;\n }\n else {\n return WIN_DISPLAY.hasOwnProperty(key) ? WIN_DISPLAY[key] : key;\n }\n }\n Private.formatKey = formatKey;\n const MAC_DISPLAY = {\n Backspace: '⌫',\n Tab: '⇥',\n Enter: '⏎',\n Shift: '⇧',\n Ctrl: '⌃',\n Alt: '⌥',\n Escape: '⎋',\n PageUp: '⇞',\n PageDown: '⇟',\n End: '↘',\n Home: '↖',\n ArrowLeft: '←',\n ArrowUp: '↑',\n ArrowRight: '→',\n ArrowDown: '↓',\n Delete: '⌦',\n Cmd: '⌘'\n };\n const WIN_DISPLAY = {\n Escape: 'Esc',\n PageUp: 'Page Up',\n PageDown: 'Page Down',\n ArrowLeft: 'Left',\n ArrowUp: 'Up',\n ArrowRight: 'Right',\n ArrowDown: 'Down',\n Delete: 'Del'\n };\n /**\n * A singleton empty string function.\n */\n const emptyStringFunc = () => '';\n /**\n * A singleton `-1` number function\n */\n const negativeOneFunc = () => -1;\n /**\n * A singleton true boolean function.\n */\n const trueFunc = () => true;\n /**\n * A singleton false boolean function.\n */\n const falseFunc = () => false;\n /**\n * A singleton empty dataset function.\n */\n const emptyDatasetFunc = () => ({});\n /**\n * A singleton undefined function\n */\n const undefinedFunc = () => undefined;\n /**\n * Cast a value or command func to a command func.\n */\n function asFunc(value, dfault) {\n if (value === undefined) {\n return dfault;\n }\n if (typeof value === 'function') {\n return value;\n }\n return () => value;\n }\n /**\n * Validate the selector for an options object.\n *\n * This returns the validated selector, or throws if the selector is\n * invalid or contains commas.\n */\n function validateSelector(options) {\n if (options.selector.indexOf(',') !== -1) {\n throw new Error(`Selector cannot contain commas: ${options.selector}`);\n }\n if (!Selector.isValid(options.selector)) {\n throw new Error(`Invalid selector: ${options.selector}`);\n }\n return options.selector;\n }\n /**\n * Test whether a key binding sequence matches a key sequence.\n *\n * Returns a `SequenceMatch` value indicating the type of match.\n */\n function matchSequence(bindKeys, userKeys) {\n if (bindKeys.length < userKeys.length) {\n return 0 /* SequenceMatch.None */;\n }\n for (let i = 0, n = userKeys.length; i < n; ++i) {\n if (bindKeys[i] !== userKeys[i]) {\n return 0 /* SequenceMatch.None */;\n }\n }\n if (bindKeys.length > userKeys.length) {\n return 2 /* SequenceMatch.Partial */;\n }\n return 1 /* SequenceMatch.Exact */;\n }\n /**\n * Find the distance from the target node to the first matching node.\n *\n * This traverses the event path from `target` to `currentTarget` and\n * computes the distance from `target` to the first node which matches\n * the CSS selector. If no match is found, `-1` is returned.\n */\n function targetDistance(selector, event) {\n let targ = event.target;\n let curr = event.currentTarget;\n for (let dist = 0; targ !== null; targ = targ.parentElement, ++dist) {\n if (targ.hasAttribute('data-lm-suppress-shortcuts')) {\n return -1;\n }\n if (Selector.matches(targ, selector)) {\n return dist;\n }\n if (targ === curr) {\n return -1;\n }\n }\n return -1;\n }\n /**\n * Clone a keyboard event.\n */\n function cloneKeyboardEvent(event) {\n // A custom event is required because Chrome nulls out the\n // `keyCode` field in user-generated `KeyboardEvent` types.\n let clone = document.createEvent('Event');\n let bubbles = event.bubbles || true;\n let cancelable = event.cancelable || true;\n clone.initEvent(event.type || 'keydown', bubbles, cancelable);\n clone.key = event.key || '';\n clone.keyCode = event.keyCode || 0;\n clone.which = event.keyCode || 0;\n clone.ctrlKey = event.ctrlKey || false;\n clone.altKey = event.altKey || false;\n clone.shiftKey = event.shiftKey || false;\n clone.metaKey = event.metaKey || false;\n clone.view = event.view || window;\n return clone;\n }\n})(Private || (Private = {}));\n\nexport { CommandRegistry };\n//# sourceMappingURL=index.es6.js.map\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@lumino/algorithm')) :\n typeof define === 'function' && define.amd ? define(['exports', '@lumino/algorithm'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.lumino_coreutils = {}, global.lumino_algorithm));\n})(this, (function (exports, algorithm) { 'use strict';\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for JSON-specific functions.\n */\n exports.JSONExt = void 0;\n (function (JSONExt) {\n /**\n * A shared frozen empty JSONObject\n */\n JSONExt.emptyObject = Object.freeze({});\n /**\n * A shared frozen empty JSONArray\n */\n JSONExt.emptyArray = Object.freeze([]);\n /**\n * Test whether a JSON value is a primitive.\n *\n * @param value - The JSON value of interest.\n *\n * @returns `true` if the value is a primitive,`false` otherwise.\n */\n function isPrimitive(value) {\n return (value === null ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string');\n }\n JSONExt.isPrimitive = isPrimitive;\n function isArray(value) {\n return Array.isArray(value);\n }\n JSONExt.isArray = isArray;\n function isObject(value) {\n return !isPrimitive(value) && !isArray(value);\n }\n JSONExt.isObject = isObject;\n /**\n * Compare two JSON values for deep equality.\n *\n * @param first - The first JSON value of interest.\n *\n * @param second - The second JSON value of interest.\n *\n * @returns `true` if the values are equivalent, `false` otherwise.\n */\n function deepEqual(first, second) {\n // Check referential and primitive equality first.\n if (first === second) {\n return true;\n }\n // If one is a primitive, the `===` check ruled out the other.\n if (isPrimitive(first) || isPrimitive(second)) {\n return false;\n }\n // Test whether they are arrays.\n let a1 = isArray(first);\n let a2 = isArray(second);\n // Bail if the types are different.\n if (a1 !== a2) {\n return false;\n }\n // If they are both arrays, compare them.\n if (a1 && a2) {\n return deepArrayEqual(first, second);\n }\n // At this point, they must both be objects.\n return deepObjectEqual(first, second);\n }\n JSONExt.deepEqual = deepEqual;\n /**\n * Create a deep copy of a JSON value.\n *\n * @param value - The JSON value to copy.\n *\n * @returns A deep copy of the given JSON value.\n */\n function deepCopy(value) {\n // Do nothing for primitive values.\n if (isPrimitive(value)) {\n return value;\n }\n // Deep copy an array.\n if (isArray(value)) {\n return deepArrayCopy(value);\n }\n // Deep copy an object.\n return deepObjectCopy(value);\n }\n JSONExt.deepCopy = deepCopy;\n /**\n * Compare two JSON arrays for deep equality.\n */\n function deepArrayEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Test the arrays for equal length.\n if (first.length !== second.length) {\n return false;\n }\n // Compare the values for equality.\n for (let i = 0, n = first.length; i < n; ++i) {\n if (!deepEqual(first[i], second[i])) {\n return false;\n }\n }\n // At this point, the arrays are equal.\n return true;\n }\n /**\n * Compare two JSON objects for deep equality.\n */\n function deepObjectEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Check for the first object's keys in the second object.\n for (let key in first) {\n if (first[key] !== undefined && !(key in second)) {\n return false;\n }\n }\n // Check for the second object's keys in the first object.\n for (let key in second) {\n if (second[key] !== undefined && !(key in first)) {\n return false;\n }\n }\n // Compare the values for equality.\n for (let key in first) {\n // Get the values.\n let firstValue = first[key];\n let secondValue = second[key];\n // If both are undefined, ignore the key.\n if (firstValue === undefined && secondValue === undefined) {\n continue;\n }\n // If only one value is undefined, the objects are not equal.\n if (firstValue === undefined || secondValue === undefined) {\n return false;\n }\n // Compare the values.\n if (!deepEqual(firstValue, secondValue)) {\n return false;\n }\n }\n // At this point, the objects are equal.\n return true;\n }\n /**\n * Create a deep copy of a JSON array.\n */\n function deepArrayCopy(value) {\n let result = new Array(value.length);\n for (let i = 0, n = value.length; i < n; ++i) {\n result[i] = deepCopy(value[i]);\n }\n return result;\n }\n /**\n * Create a deep copy of a JSON object.\n */\n function deepObjectCopy(value) {\n let result = {};\n for (let key in value) {\n // Ignore undefined values.\n let subvalue = value[key];\n if (subvalue === undefined) {\n continue;\n }\n result[key] = deepCopy(subvalue);\n }\n return result;\n }\n })(exports.JSONExt || (exports.JSONExt = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * An object which stores MIME data for general application use.\n *\n * #### Notes\n * This class does not attempt to enforce \"correctness\" of MIME types\n * and their associated data. Since this class is designed to transfer\n * arbitrary data and objects within the same application, it assumes\n * that the user provides correct and accurate data.\n */\n class MimeData {\n constructor() {\n this._types = [];\n this._values = [];\n }\n /**\n * Get an array of the MIME types contained within the dataset.\n *\n * @returns A new array of the MIME types, in order of insertion.\n */\n types() {\n return this._types.slice();\n }\n /**\n * Test whether the dataset has an entry for the given type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns `true` if the dataset contains a value for the given\n * MIME type, `false` otherwise.\n */\n hasData(mime) {\n return this._types.indexOf(mime) !== -1;\n }\n /**\n * Get the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns The value for the given MIME type, or `undefined` if\n * the dataset does not contain a value for the type.\n */\n getData(mime) {\n let i = this._types.indexOf(mime);\n return i !== -1 ? this._values[i] : undefined;\n }\n /**\n * Set the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @param data - The data value for the given MIME type.\n *\n * #### Notes\n * This will overwrite any previous entry for the MIME type.\n */\n setData(mime, data) {\n this.clearData(mime);\n this._types.push(mime);\n this._values.push(data);\n }\n /**\n * Remove the data entry for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * #### Notes\n * This is a no-op if there is no entry for the given MIME type.\n */\n clearData(mime) {\n let i = this._types.indexOf(mime);\n if (i !== -1) {\n this._types.splice(i, 1);\n this._values.splice(i, 1);\n }\n }\n /**\n * Remove all data entries from the dataset.\n */\n clear() {\n this._types.length = 0;\n this._values.length = 0;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /**\n * Plugin registry.\n */\n class PluginRegistry {\n constructor(options = {}) {\n this._application = null;\n this._validatePlugin = () => true;\n this._plugins = new Map();\n this._services = new Map();\n if (options.validatePlugin) {\n console.info('Plugins may be rejected by the custom validation plugin method.');\n this._validatePlugin = options.validatePlugin;\n }\n }\n /**\n * The application object.\n *\n * It will be provided as first argument to the\n * plugins activation and deactivation functions.\n *\n * It can only be set once.\n *\n * By default, it is `null`.\n */\n get application() {\n return this._application;\n }\n set application(v) {\n if (this._application !== null) {\n throw Error('PluginRegistry.application is already set. It cannot be overridden.');\n }\n this._application = v;\n }\n /**\n * The list of all the deferred plugins.\n */\n get deferredPlugins() {\n return Array.from(this._plugins)\n .filter(([id, plugin]) => plugin.autoStart === 'defer')\n .map(([id, plugin]) => id);\n }\n /**\n * Get a plugin description.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns The plugin description.\n */\n getPluginDescription(id) {\n var _a, _b;\n return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.description) !== null && _b !== void 0 ? _b : '';\n }\n /**\n * Test whether a plugin is registered with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns `true` if the plugin is registered, `false` otherwise.\n */\n hasPlugin(id) {\n return this._plugins.has(id);\n }\n /**\n * Test whether a plugin is activated with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns `true` if the plugin is activated, `false` otherwise.\n */\n isPluginActivated(id) {\n var _a, _b;\n return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.activated) !== null && _b !== void 0 ? _b : false;\n }\n /**\n * List the IDs of the plugins registered with the application.\n *\n * @returns A new array of the registered plugin IDs.\n */\n listPlugins() {\n return Array.from(this._plugins.keys());\n }\n /**\n * Register a plugin with the application.\n *\n * @param plugin - The plugin to register.\n *\n * #### Notes\n * An error will be thrown if a plugin with the same ID is already\n * registered, or if the plugin has a circular dependency.\n *\n * If the plugin provides a service which has already been provided\n * by another plugin, the new service will override the old service.\n */\n registerPlugin(plugin) {\n // Throw an error if the plugin ID is already registered.\n if (this._plugins.has(plugin.id)) {\n throw new TypeError(`Plugin '${plugin.id}' is already registered.`);\n }\n if (!this._validatePlugin(plugin)) {\n throw new Error(`Plugin '${plugin.id}' is not valid.`);\n }\n // Create the normalized plugin data.\n const data = Private.createPluginData(plugin);\n // Ensure the plugin does not cause a cyclic dependency.\n Private.ensureNoCycle(data, this._plugins, this._services);\n // Add the service token to the service map.\n if (data.provides) {\n this._services.set(data.provides, data.id);\n }\n // Add the plugin to the plugin map.\n this._plugins.set(data.id, data);\n }\n /**\n * Register multiple plugins with the application.\n *\n * @param plugins - The plugins to register.\n *\n * #### Notes\n * This calls `registerPlugin()` for each of the given plugins.\n */\n registerPlugins(plugins) {\n for (const plugin of plugins) {\n this.registerPlugin(plugin);\n }\n }\n /**\n * Deregister a plugin with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @param force - Whether to deregister the plugin even if it is active.\n */\n deregisterPlugin(id, force) {\n const plugin = this._plugins.get(id);\n if (!plugin) {\n return;\n }\n if (plugin.activated && !force) {\n throw new Error(`Plugin '${id}' is still active.`);\n }\n this._plugins.delete(id);\n }\n /**\n * Activate the plugin with the given ID.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns A promise which resolves when the plugin is activated\n * or rejects with an error if it cannot be activated.\n */\n async activatePlugin(id) {\n // Reject the promise if the plugin is not registered.\n const plugin = this._plugins.get(id);\n if (!plugin) {\n throw new ReferenceError(`Plugin '${id}' is not registered.`);\n }\n // Resolve immediately if the plugin is already activated.\n if (plugin.activated) {\n return;\n }\n // Return the pending resolver promise if it exists.\n if (plugin.promise) {\n return plugin.promise;\n }\n // Resolve the required services for the plugin.\n const required = plugin.requires.map(t => this.resolveRequiredService(t));\n // Resolve the optional services for the plugin.\n const optional = plugin.optional.map(t => this.resolveOptionalService(t));\n // Setup the resolver promise for the plugin.\n plugin.promise = Promise.all([...required, ...optional])\n .then(services => plugin.activate.apply(undefined, [this.application, ...services]))\n .then(service => {\n plugin.service = service;\n plugin.activated = true;\n plugin.promise = null;\n })\n .catch(error => {\n plugin.promise = null;\n throw error;\n });\n // Return the pending resolver promise.\n return plugin.promise;\n }\n /**\n * Activate all the deferred plugins.\n *\n * @returns A promise which will resolve when each plugin is activated\n * or rejects with an error if one cannot be activated.\n */\n async activatePlugins(kind, options = {}) {\n switch (kind) {\n case 'defer': {\n const promises = this.deferredPlugins\n .filter(pluginId => this._plugins.get(pluginId).autoStart)\n .map(pluginId => {\n return this.activatePlugin(pluginId);\n });\n await Promise.all(promises);\n break;\n }\n case 'startUp': {\n // Collect the ids of the startup plugins.\n const startups = Private.collectStartupPlugins(this._plugins, options);\n // Generate the activation promises.\n const promises = startups.map(async (id) => {\n try {\n return await this.activatePlugin(id);\n }\n catch (error) {\n console.error(`Plugin '${id}' failed to activate.`, error);\n }\n });\n await Promise.all(promises);\n break;\n }\n }\n }\n /**\n * Deactivate the plugin and its downstream dependents if and only if the\n * plugin and its dependents all support `deactivate`.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns A list of IDs of downstream plugins deactivated with this one.\n */\n async deactivatePlugin(id) {\n // Reject the promise if the plugin is not registered.\n const plugin = this._plugins.get(id);\n if (!plugin) {\n throw new ReferenceError(`Plugin '${id}' is not registered.`);\n }\n // Bail early if the plugin is not activated.\n if (!plugin.activated) {\n return [];\n }\n // Check that this plugin can deactivate.\n if (!plugin.deactivate) {\n throw new TypeError(`Plugin '${id}'#deactivate() method missing`);\n }\n // Find the optimal deactivation order for plugins downstream of this one.\n const manifest = Private.findDependents(id, this._plugins, this._services);\n const downstream = manifest.map(id => this._plugins.get(id));\n // Check that all downstream plugins can deactivate.\n for (const plugin of downstream) {\n if (!plugin.deactivate) {\n throw new TypeError(`Plugin ${plugin.id}#deactivate() method missing (depends on ${id})`);\n }\n }\n // Deactivate all downstream plugins.\n for (const plugin of downstream) {\n const services = [...plugin.requires, ...plugin.optional].map(service => {\n const id = this._services.get(service);\n return id ? this._plugins.get(id).service : null;\n });\n // Await deactivation so the next plugins only receive active services.\n await plugin.deactivate(this.application, ...services);\n plugin.service = null;\n plugin.activated = false;\n }\n // Remove plugin ID and return manifest of deactivated plugins.\n manifest.pop();\n return manifest;\n }\n /**\n * Resolve a required service of a given type.\n *\n * @param token - The token for the service type of interest.\n *\n * @returns A promise which resolves to an instance of the requested\n * service, or rejects with an error if it cannot be resolved.\n *\n * #### Notes\n * Services are singletons. The same instance will be returned each\n * time a given service token is resolved.\n *\n * If the plugin which provides the service has not been activated,\n * resolving the service will automatically activate the plugin.\n *\n * User code will not typically call this method directly. Instead,\n * the required services for the user's plugins will be resolved\n * automatically when the plugin is activated.\n */\n async resolveRequiredService(token) {\n // Reject the promise if there is no provider for the type.\n const id = this._services.get(token);\n if (!id) {\n throw new TypeError(`No provider for: ${token.name}.`);\n }\n // Activate the plugin if necessary.\n const plugin = this._plugins.get(id);\n if (!plugin.activated) {\n await this.activatePlugin(id);\n }\n return plugin.service;\n }\n /**\n * Resolve an optional service of a given type.\n *\n * @param token - The token for the service type of interest.\n *\n * @returns A promise which resolves to an instance of the requested\n * service, or `null` if it cannot be resolved.\n *\n * #### Notes\n * Services are singletons. The same instance will be returned each\n * time a given service token is resolved.\n *\n * If the plugin which provides the service has not been activated,\n * resolving the service will automatically activate the plugin.\n *\n * User code will not typically call this method directly. Instead,\n * the optional services for the user's plugins will be resolved\n * automatically when the plugin is activated.\n */\n async resolveOptionalService(token) {\n // Resolve with `null` if there is no provider for the type.\n const id = this._services.get(token);\n if (!id) {\n return null;\n }\n // Activate the plugin if necessary.\n const plugin = this._plugins.get(id);\n if (!plugin.activated) {\n try {\n await this.activatePlugin(id);\n }\n catch (reason) {\n console.error(reason);\n return null;\n }\n }\n return plugin.service;\n }\n }\n /**\n * The namespace for the module implementation details.\n */\n var Private;\n (function (Private) {\n class PluginData {\n constructor(plugin) {\n var _a, _b, _c, _d;\n this._activated = false;\n this._promise = null;\n this._service = null;\n this.id = plugin.id;\n this.description = (_a = plugin.description) !== null && _a !== void 0 ? _a : '';\n this.activate = plugin.activate;\n this.deactivate = (_b = plugin.deactivate) !== null && _b !== void 0 ? _b : null;\n this.provides = (_c = plugin.provides) !== null && _c !== void 0 ? _c : null;\n this.autoStart = (_d = plugin.autoStart) !== null && _d !== void 0 ? _d : false;\n this.requires = plugin.requires ? plugin.requires.slice() : [];\n this.optional = plugin.optional ? plugin.optional.slice() : [];\n }\n /**\n * Whether the plugin has been activated.\n */\n get activated() {\n return this._activated;\n }\n set activated(a) {\n this._activated = a;\n }\n /**\n * The resolved service for the plugin, or `null`.\n */\n get service() {\n return this._service;\n }\n set service(s) {\n this._service = s;\n }\n /**\n * The pending resolver promise, or `null`.\n */\n get promise() {\n return this._promise;\n }\n set promise(p) {\n this._promise = p;\n }\n }\n /**\n * Create a normalized plugin data object for the given plugin.\n */\n function createPluginData(plugin) {\n return new PluginData(plugin);\n }\n Private.createPluginData = createPluginData;\n /**\n * Ensure no cycle is present in the plugin resolution graph.\n *\n * If a cycle is detected, an error will be thrown.\n */\n function ensureNoCycle(plugin, plugins, services) {\n const dependencies = [...plugin.requires, ...plugin.optional];\n const visit = (token) => {\n if (token === plugin.provides) {\n return true;\n }\n const id = services.get(token);\n if (!id) {\n return false;\n }\n const visited = plugins.get(id);\n const dependencies = [...visited.requires, ...visited.optional];\n if (dependencies.length === 0) {\n return false;\n }\n trace.push(id);\n if (dependencies.some(visit)) {\n return true;\n }\n trace.pop();\n return false;\n };\n // Bail early if there cannot be a cycle.\n if (!plugin.provides || dependencies.length === 0) {\n return;\n }\n // Setup a stack to trace service resolution.\n const trace = [plugin.id];\n // Throw an exception if a cycle is present.\n if (dependencies.some(visit)) {\n throw new ReferenceError(`Cycle detected: ${trace.join(' -> ')}.`);\n }\n }\n Private.ensureNoCycle = ensureNoCycle;\n /**\n * Find dependents in deactivation order.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @param plugins - The map containing all plugins.\n *\n * @param services - The map containing all services.\n *\n * @returns A list of dependent plugin IDs in order of deactivation\n *\n * #### Notes\n * The final item of the returned list is always the plugin of interest.\n */\n function findDependents(id, plugins, services) {\n const edges = new Array();\n const add = (id) => {\n const plugin = plugins.get(id);\n // FIXME In the case of missing optional dependencies, we may consider\n // deactivating and reactivating the plugin without the missing service.\n const dependencies = [...plugin.requires, ...plugin.optional];\n edges.push(...dependencies.reduce((acc, dep) => {\n const service = services.get(dep);\n if (service) {\n // An edge is oriented from dependent to provider.\n acc.push([id, service]);\n }\n return acc;\n }, []));\n };\n for (const id of plugins.keys()) {\n add(id);\n }\n // Filter edges\n // - Get all packages that dependent on the package to be deactivated\n const newEdges = edges.filter(edge => edge[1] === id);\n let oldSize = 0;\n while (newEdges.length > oldSize) {\n const previousSize = newEdges.length;\n // Get all packages that dependent on packages that will be deactivated\n const packagesOfInterest = new Set(newEdges.map(edge => edge[0]));\n for (const poi of packagesOfInterest) {\n edges\n .filter(edge => edge[1] === poi)\n .forEach(edge => {\n // We check it is not already included to deal with circular dependencies\n if (!newEdges.includes(edge)) {\n newEdges.push(edge);\n }\n });\n }\n oldSize = previousSize;\n }\n const sorted = algorithm.topologicSort(newEdges);\n const index = sorted.findIndex(candidate => candidate === id);\n if (index === -1) {\n return [id];\n }\n return sorted.slice(0, index + 1);\n }\n Private.findDependents = findDependents;\n /**\n * Collect the IDs of the plugins to activate on startup.\n */\n function collectStartupPlugins(plugins, options) {\n // Create a set to hold the plugin IDs.\n const collection = new Set();\n // Collect the auto-start (non deferred) plugins.\n for (const id of plugins.keys()) {\n if (plugins.get(id).autoStart === true) {\n collection.add(id);\n }\n }\n // Add the startup plugins.\n if (options.startPlugins) {\n for (const id of options.startPlugins) {\n collection.add(id);\n }\n }\n // Remove the ignored plugins.\n if (options.ignorePlugins) {\n for (const id of options.ignorePlugins) {\n collection.delete(id);\n }\n }\n // Return the collected startup plugins.\n return Array.from(collection);\n }\n Private.collectStartupPlugins = collectStartupPlugins;\n })(Private || (Private = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A class which wraps a promise into a delegate object.\n *\n * #### Notes\n * This class is useful when the logic to resolve or reject a promise\n * cannot be defined at the point where the promise is created.\n */\n class PromiseDelegate {\n /**\n * Construct a new promise delegate.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n /**\n * Resolve the wrapped promise with the given value.\n *\n * @param value - The value to use for resolving the promise.\n */\n resolve(value) {\n let resolve = this._resolve;\n resolve(value);\n }\n /**\n * Reject the wrapped promise with the given value.\n *\n * @reason - The reason for rejecting the promise.\n */\n reject(reason) {\n let reject = this._reject;\n reject(reason);\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A runtime object which captures compile-time type information.\n *\n * #### Notes\n * A token captures the compile-time type of an interface or class in\n * an object which can be used at runtime in a type-safe fashion.\n */\n class Token {\n /**\n * Construct a new token.\n *\n * @param name - A human readable name for the token.\n * @param description - Token purpose description for documentation.\n */\n constructor(name, description) {\n this.name = name;\n this.description = description !== null && description !== void 0 ? description : '';\n this._tokenStructuralPropertyT = null;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n // Fallback\n function fallbackRandomValues(buffer) {\n let value = 0;\n for (let i = 0, n = buffer.length; i < n; ++i) {\n if (i % 4 === 0) {\n value = (Math.random() * 0xffffffff) >>> 0;\n }\n buffer[i] = value & 0xff;\n value >>>= 8;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for random number related functionality.\n */\n exports.Random = void 0;\n (function (Random) {\n /**\n * A function which generates random bytes.\n *\n * @param buffer - The `Uint8Array` to fill with random bytes.\n *\n * #### Notes\n * A cryptographically strong random number generator will be used if\n * available. Otherwise, `Math.random` will be used as a fallback for\n * randomness.\n *\n * The following RNGs are supported, listed in order of precedence:\n * - `window.crypto.getRandomValues`\n * - `window.msCrypto.getRandomValues`\n * - `require('crypto').randomFillSync\n * - `require('crypto').randomBytes\n * - `Math.random`\n */\n Random.getRandomValues = (() => {\n // Look up the crypto module if available.\n const crypto = (typeof window !== 'undefined' && (window.crypto || window.msCrypto)) ||\n null;\n // Modern browsers and IE 11\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return function getRandomValues(buffer) {\n return crypto.getRandomValues(buffer);\n };\n }\n // Fallback\n return fallbackRandomValues;\n })();\n })(exports.Random || (exports.Random = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A function which creates a function that generates UUID v4 identifiers.\n *\n * @returns A new function that creates a UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n function uuid4Factory(getRandomValues) {\n // Create a 16 byte array to hold the random values.\n const bytes = new Uint8Array(16);\n // Create a look up table from bytes to hex strings.\n const lut = new Array(256);\n // Pad the single character hex digits with a leading zero.\n for (let i = 0; i < 16; ++i) {\n lut[i] = '0' + i.toString(16);\n }\n // Populate the rest of the hex digits.\n for (let i = 16; i < 256; ++i) {\n lut[i] = i.toString(16);\n }\n // Return a function which generates the UUID.\n return function uuid4() {\n // Get a new batch of random values.\n getRandomValues(bytes);\n // Set the UUID version number to 4.\n bytes[6] = 0x40 | (bytes[6] & 0x0f);\n // Set the clock sequence bit to the RFC spec.\n bytes[8] = 0x80 | (bytes[8] & 0x3f);\n // Assemble the UUID string.\n return (lut[bytes[0]] +\n lut[bytes[1]] +\n lut[bytes[2]] +\n lut[bytes[3]] +\n '-' +\n lut[bytes[4]] +\n lut[bytes[5]] +\n '-' +\n lut[bytes[6]] +\n lut[bytes[7]] +\n '-' +\n lut[bytes[8]] +\n lut[bytes[9]] +\n '-' +\n lut[bytes[10]] +\n lut[bytes[11]] +\n lut[bytes[12]] +\n lut[bytes[13]] +\n lut[bytes[14]] +\n lut[bytes[15]]);\n };\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for UUID related functionality.\n */\n exports.UUID = void 0;\n (function (UUID) {\n /**\n * A function which generates UUID v4 identifiers.\n *\n * @returns A new UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n UUID.uuid4 = uuid4Factory(exports.Random.getRandomValues);\n })(exports.UUID || (exports.UUID = {}));\n\n exports.MimeData = MimeData;\n exports.PluginRegistry = PluginRegistry;\n exports.PromiseDelegate = PromiseDelegate;\n exports.Token = Token;\n\n}));\n//# sourceMappingURL=index.js.map\n","import { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module disposable\n */\n/**\n * A disposable object which delegates to a callback function.\n */\nclass DisposableDelegate {\n /**\n * Construct a new disposable delegate.\n *\n * @param fn - The callback function to invoke on dispose.\n */\n constructor(fn) {\n this._fn = fn;\n }\n /**\n * Test whether the delegate has been disposed.\n */\n get isDisposed() {\n return !this._fn;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (!this._fn) {\n return;\n }\n let fn = this._fn;\n this._fn = null;\n fn();\n }\n}\n/**\n * An observable disposable object which delegates to a callback function.\n */\nclass ObservableDisposableDelegate extends DisposableDelegate {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the delegate is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * An object which manages a collection of disposable items.\n */\nclass DisposableSet {\n constructor() {\n this._isDisposed = false;\n this._items = new Set();\n }\n /**\n * Test whether the set has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n this._items.forEach(item => {\n item.dispose();\n });\n this._items.clear();\n }\n /**\n * Test whether the set contains a specific item.\n *\n * @param item - The item of interest.\n *\n * @returns `true` if the set contains the item, `false` otherwise.\n */\n contains(item) {\n return this._items.has(item);\n }\n /**\n * Add a disposable item to the set.\n *\n * @param item - The item to add to the set.\n *\n * #### Notes\n * If the item is already contained in the set, this is a no-op.\n */\n add(item) {\n this._items.add(item);\n }\n /**\n * Remove a disposable item from the set.\n *\n * @param item - The item to remove from the set.\n *\n * #### Notes\n * If the item is not contained in the set, this is a no-op.\n */\n remove(item) {\n this._items.delete(item);\n }\n /**\n * Remove all items from the set.\n */\n clear() {\n this._items.clear();\n }\n}\n/**\n * The namespace for the `DisposableSet` class statics.\n */\n(function (DisposableSet) {\n /**\n * Create a disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new DisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n DisposableSet.from = from;\n})(DisposableSet || (DisposableSet = {}));\n/**\n * An observable object which manages a collection of disposable items.\n */\nclass ObservableDisposableSet extends DisposableSet {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the set is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * The namespace for the `ObservableDisposableSet` class statics.\n */\n(function (ObservableDisposableSet) {\n /**\n * Create an observable disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new ObservableDisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n ObservableDisposableSet.from = from;\n})(ObservableDisposableSet || (ObservableDisposableSet = {}));\n\nexport { DisposableDelegate, DisposableSet, ObservableDisposableDelegate, ObservableDisposableSet };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2019, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for clipboard related functionality.\n */\nvar ClipboardExt;\n(function (ClipboardExt) {\n /**\n * Copy text to the system clipboard.\n *\n * @param text - The text to copy to the clipboard.\n */\n function copyText(text) {\n // Fetch the document body.\n const body = document.body;\n // Set up the clipboard event listener.\n const handler = (event) => {\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Set the clipboard data.\n event.clipboardData.setData('text', text);\n // Remove the event listener.\n body.removeEventListener('copy', handler, true);\n };\n // Add the event listener.\n body.addEventListener('copy', handler, true);\n // Trigger the event.\n document.execCommand('copy');\n }\n ClipboardExt.copyText = copyText;\n})(ClipboardExt || (ClipboardExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for element related utilities.\n */\nvar ElementExt;\n(function (ElementExt) {\n /**\n * Compute the box sizing for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The box sizing data for the specified element.\n */\n function boxSizing(element) {\n let style = window.getComputedStyle(element);\n let bt = parseFloat(style.borderTopWidth) || 0;\n let bl = parseFloat(style.borderLeftWidth) || 0;\n let br = parseFloat(style.borderRightWidth) || 0;\n let bb = parseFloat(style.borderBottomWidth) || 0;\n let pt = parseFloat(style.paddingTop) || 0;\n let pl = parseFloat(style.paddingLeft) || 0;\n let pr = parseFloat(style.paddingRight) || 0;\n let pb = parseFloat(style.paddingBottom) || 0;\n let hs = bl + pl + pr + br;\n let vs = bt + pt + pb + bb;\n return {\n borderTop: bt,\n borderLeft: bl,\n borderRight: br,\n borderBottom: bb,\n paddingTop: pt,\n paddingLeft: pl,\n paddingRight: pr,\n paddingBottom: pb,\n horizontalSum: hs,\n verticalSum: vs\n };\n }\n ElementExt.boxSizing = boxSizing;\n /**\n * Compute the size limits for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The size limit data for the specified element.\n */\n function sizeLimits(element) {\n let style = window.getComputedStyle(element);\n let minWidth = parseFloat(style.minWidth) || 0;\n let minHeight = parseFloat(style.minHeight) || 0;\n let maxWidth = parseFloat(style.maxWidth) || Infinity;\n let maxHeight = parseFloat(style.maxHeight) || Infinity;\n maxWidth = Math.max(minWidth, maxWidth);\n maxHeight = Math.max(minHeight, maxHeight);\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n ElementExt.sizeLimits = sizeLimits;\n /**\n * Test whether a client position lies within an element.\n *\n * @param element - The DOM element of interest.\n *\n * @param clientX - The client X coordinate of interest.\n *\n * @param clientY - The client Y coordinate of interest.\n *\n * @returns Whether the point is within the given element.\n */\n function hitTest(element, clientX, clientY) {\n let rect = element.getBoundingClientRect();\n return (clientX >= rect.left &&\n clientX < rect.right &&\n clientY >= rect.top &&\n clientY < rect.bottom);\n }\n ElementExt.hitTest = hitTest;\n /**\n * Vertically scroll an element into view if needed.\n *\n * @param area - The scroll area element.\n *\n * @param element - The element of interest.\n *\n * #### Notes\n * This follows the \"nearest\" behavior of the native `scrollIntoView`\n * method, which is not supported by all browsers.\n * https://drafts.csswg.org/cssom-view/#element-scrolling-members\n *\n * If the element fully covers the visible area or is fully contained\n * within the visible area, no scrolling will take place. Otherwise,\n * the nearest edges of the area and element are aligned.\n */\n function scrollIntoViewIfNeeded(area, element) {\n let ar = area.getBoundingClientRect();\n let er = element.getBoundingClientRect();\n if (er.top <= ar.top && er.bottom >= ar.bottom) {\n return;\n }\n if (er.top < ar.top && er.height <= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.bottom > ar.bottom && er.height >= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.top < ar.top && er.height > ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n if (er.bottom > ar.bottom && er.height < ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n }\n ElementExt.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;\n})(ElementExt || (ElementExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for platform related utilities.\n */\nvar Platform;\n(function (Platform) {\n /**\n * A flag indicating whether the platform is Mac.\n */\n Platform.IS_MAC = !!navigator.platform.match(/Mac/i);\n /**\n * A flag indicating whether the platform is Windows.\n */\n Platform.IS_WIN = !!navigator.platform.match(/Win/i);\n /**\n * A flag indicating whether the browser is IE.\n */\n Platform.IS_IE = /Trident/.test(navigator.userAgent);\n /**\n * A flag indicating whether the browser is Edge.\n */\n Platform.IS_EDGE = /Edge/.test(navigator.userAgent);\n /**\n * Test whether the `accel` key is pressed.\n *\n * @param event - The keyboard or mouse event of interest.\n *\n * @returns Whether the `accel` key is pressed.\n *\n * #### Notes\n * On Mac the `accel` key is the command key. On all other\n * platforms the `accel` key is the control key.\n */\n function accelKey(event) {\n return Platform.IS_MAC ? event.metaKey : event.ctrlKey;\n }\n Platform.accelKey = accelKey;\n})(Platform || (Platform = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for selector related utilities.\n */\nvar Selector;\n(function (Selector) {\n /**\n * Calculate the specificity of a single CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns The specificity of the selector.\n *\n * #### Undefined Behavior\n * The selector is invalid.\n *\n * #### Notes\n * This is based on https://www.w3.org/TR/css3-selectors/#specificity\n *\n * A larger number represents a more specific selector.\n *\n * The smallest possible specificity is `0`.\n *\n * The result is represented as a hex number `0x` where\n * each component is the count of the respective selector clause.\n *\n * If the selector contains commas, only the first clause is used.\n *\n * The computed result is cached, so subsequent calculations for the\n * same selector are extremely fast.\n */\n function calculateSpecificity(selector) {\n if (selector in Private.specificityCache) {\n return Private.specificityCache[selector];\n }\n let result = Private.calculateSingle(selector);\n return (Private.specificityCache[selector] = result);\n }\n Selector.calculateSpecificity = calculateSpecificity;\n /**\n * Test whether a selector is a valid CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns `true` if the selector is valid, `false` otherwise.\n *\n * #### Notes\n * The computed result is cached, so subsequent tests for the same\n * selector are extremely fast.\n */\n function isValid(selector) {\n if (selector in Private.validityCache) {\n return Private.validityCache[selector];\n }\n let result = true;\n try {\n Private.testElem.querySelector(selector);\n }\n catch (err) {\n result = false;\n }\n return (Private.validityCache[selector] = result);\n }\n Selector.isValid = isValid;\n /**\n * Test whether an element matches a CSS selector.\n *\n * @param element - The element of interest.\n *\n * @param selector - The valid CSS selector of interest.\n *\n * @returns `true` if the element is a match, `false` otherwise.\n *\n * #### Notes\n * This function uses the builtin browser capabilities when possible,\n * falling back onto a document query otherwise.\n */\n function matches(element, selector) {\n return Private.protoMatchFunc.call(element, selector);\n }\n Selector.matches = matches;\n})(Selector || (Selector = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A cache of computed selector specificity values.\n */\n Private.specificityCache = Object.create(null);\n /**\n * A cache of computed selector validity.\n */\n Private.validityCache = Object.create(null);\n /**\n * An empty element for testing selector validity.\n */\n Private.testElem = document.createElement('div');\n /**\n * A cross-browser CSS selector matching prototype function.\n */\n Private.protoMatchFunc = (() => {\n let proto = Element.prototype;\n return (proto.matches ||\n proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector ||\n function (selector) {\n let elem = this;\n let matches = elem.ownerDocument\n ? elem.ownerDocument.querySelectorAll(selector)\n : [];\n return Array.prototype.indexOf.call(matches, elem) !== -1;\n });\n })();\n /**\n * Calculate the specificity of a single selector.\n *\n * The behavior is undefined if the selector is invalid.\n */\n function calculateSingle(selector) {\n // Ignore anything after the first comma.\n selector = selector.split(',', 1)[0];\n // Setup the aggregate counters.\n let a = 0;\n let b = 0;\n let c = 0;\n // Apply a regex to the front of the selector. If it succeeds, that\n // portion of the selector is removed. Returns a success/fail flag.\n function match(re) {\n let match = selector.match(re);\n if (match === null) {\n return false;\n }\n selector = selector.slice(match[0].length);\n return true;\n }\n // Replace the negation pseudo-class (which is ignored),\n // but keep its inner content (which is not ignored).\n selector = selector.replace(NEGATION_RE, ' $1 ');\n // Continue matching until the selector is consumed.\n while (selector.length > 0) {\n // Match an ID selector.\n if (match(ID_RE)) {\n a++;\n continue;\n }\n // Match a class selector.\n if (match(CLASS_RE)) {\n b++;\n continue;\n }\n // Match an attribute selector.\n if (match(ATTR_RE)) {\n b++;\n continue;\n }\n // Match a pseudo-element selector. This is done before matching\n // a pseudo-class since this regex overlaps with that regex.\n if (match(PSEUDO_ELEM_RE)) {\n c++;\n continue;\n }\n // Match a pseudo-class selector.\n if (match(PSEDUO_CLASS_RE)) {\n b++;\n continue;\n }\n // Match a plain type selector.\n if (match(TYPE_RE)) {\n c++;\n continue;\n }\n // Finally, match any ignored characters.\n if (match(IGNORE_RE)) {\n continue;\n }\n // At this point, the selector is assumed to be invalid.\n return 0;\n }\n // Clamp each component to a reasonable base.\n a = Math.min(a, 0xff);\n b = Math.min(b, 0xff);\n c = Math.min(c, 0xff);\n // Combine the components into a single result.\n return (a << 16) | (b << 8) | c;\n }\n Private.calculateSingle = calculateSingle;\n /**\n * A regex which matches an ID selector at string start.\n */\n const ID_RE = /^#[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a class selector at string start.\n */\n const CLASS_RE = /^\\.[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches an attribute selector at string start.\n */\n const ATTR_RE = /^\\[[^\\]]+\\]/;\n /**\n * A regex which matches a type selector at string start.\n */\n const TYPE_RE = /^[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a pseudo-element selector at string start.\n */\n const PSEUDO_ELEM_RE = /^(::[^\\s\\+>~#\\.\\[:]+|:first-line|:first-letter|:before|:after)/;\n /**\n * A regex which matches a pseudo-class selector at string start.\n */\n const PSEDUO_CLASS_RE = /^:[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches ignored characters at string start.\n */\n const IGNORE_RE = /^[\\s\\+>~\\*]+/;\n /**\n * A regex which matches the negation pseudo-class globally.\n */\n const NEGATION_RE = /:not\\(([^\\)]+)\\)/g;\n})(Private || (Private = {}));\n\nexport { ClipboardExt, ElementExt, Platform, Selector };\n//# sourceMappingURL=index.es6.js.map\n","import { DisposableDelegate } from '@lumino/disposable';\n\n/**\n * An object which manages a drag-drop operation.\n *\n * A drag object dispatches four different events to drop targets:\n *\n * - `'lm-dragenter'` - Dispatched when the mouse enters the target\n * element. This event must be canceled in order to receive any\n * of the other events.\n *\n * - `'lm-dragover'` - Dispatched when the mouse moves over the drop\n * target. It must cancel the event and set the `dropAction` to one\n * of the supported actions in order to receive drop events.\n *\n * - `'lm-dragleave'` - Dispatched when the mouse leaves the target\n * element. This includes moving the mouse into child elements.\n *\n * - `'lm-drop'`- Dispatched when the mouse is released over the target\n * element when the target indicates an appropriate drop action. If\n * the event is canceled, the indicated drop action is returned to\n * the initiator through the resolved promise.\n *\n * A drag operation can be terminated at any time by pressing `Escape`\n * or by disposing the drag object.\n *\n * A drag object has the ability to automatically scroll a scrollable\n * element when the mouse is hovered near one of its edges. To enable\n * this, add the `data-lm-dragscroll` attribute to any element which\n * the drag object should consider for scrolling.\n *\n * #### Notes\n * This class is designed to be used when dragging and dropping custom\n * data *within* a single application. It is *not* a replacement for\n * the native drag-drop API. Instead, it provides an API which allows\n * drag operations to be initiated programmatically and enables the\n * transfer of arbitrary non-string objects; features which are not\n * possible with the native drag-drop API.\n */\nclass Drag {\n /**\n * Construct a new drag object.\n *\n * @param options - The options for initializing the drag.\n */\n constructor(options) {\n /**\n * The scroll loop handler function.\n */\n this._onScrollFrame = () => {\n // Bail early if there is no scroll target.\n if (!this._scrollTarget) {\n return;\n }\n // Unpack the scroll target.\n let { element, edge, distance } = this._scrollTarget;\n // Calculate the scroll delta using nonlinear acceleration.\n let d = Private.SCROLL_EDGE_SIZE - distance;\n let f = Math.pow(d / Private.SCROLL_EDGE_SIZE, 2);\n let s = Math.max(1, Math.round(f * Private.SCROLL_EDGE_SIZE));\n // Scroll the element in the specified direction.\n switch (edge) {\n case 'top':\n element.scrollTop -= s;\n break;\n case 'left':\n element.scrollLeft -= s;\n break;\n case 'right':\n element.scrollLeft += s;\n break;\n case 'bottom':\n element.scrollTop += s;\n break;\n }\n // Request the next cycle of the scroll loop.\n requestAnimationFrame(this._onScrollFrame);\n };\n this._disposed = false;\n this._dropAction = 'none';\n this._override = null;\n this._currentTarget = null;\n this._currentElement = null;\n this._promise = null;\n this._scrollTarget = null;\n this._resolve = null;\n this.document = options.document || document;\n this.mimeData = options.mimeData;\n this.dragImage = options.dragImage || null;\n this.proposedAction = options.proposedAction || 'copy';\n this.supportedActions = options.supportedActions || 'all';\n this.source = options.source || null;\n }\n /**\n * Dispose of the resources held by the drag object.\n *\n * #### Notes\n * This will cancel the drag operation if it is active.\n */\n dispose() {\n // Do nothing if the drag object is already disposed.\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n // If there is a current target, dispatch a drag leave event.\n if (this._currentTarget) {\n let event = new PointerEvent('pointerup', {\n bubbles: true,\n cancelable: true,\n clientX: -1,\n clientY: -1\n });\n Private.dispatchDragLeave(this, this._currentTarget, null, event);\n }\n // Finalize the drag object with `'none'`.\n this._finalize('none');\n }\n /**\n * Test whether the drag object is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Start the drag operation at the specified client position.\n *\n * @param clientX - The client X position for the drag start.\n *\n * @param clientY - The client Y position for the drag start.\n *\n * @returns A promise which resolves to the result of the drag.\n *\n * #### Notes\n * If the drag has already been started, the promise created by the\n * first call to `start` is returned.\n *\n * If the drag operation has ended, or if the drag object has been\n * disposed, the returned promise will resolve to `'none'`.\n *\n * The drag object will be automatically disposed when drag operation\n * completes. This means `Drag` objects are for single-use only.\n *\n * This method assumes the left mouse button is already held down.\n */\n start(clientX, clientY) {\n // If the drag object is already disposed, resolve to `none`.\n if (this._disposed) {\n return Promise.resolve('none');\n }\n // If the drag has already been started, return the promise.\n if (this._promise) {\n return this._promise;\n }\n // Install the document listeners for the drag object.\n this._addListeners();\n // Attach the drag image at the specified client position.\n this._attachDragImage(clientX, clientY);\n // Create the promise which will be resolved on completion.\n this._promise = new Promise(resolve => {\n this._resolve = resolve;\n });\n // Trigger a fake move event to kick off the drag operation.\n let event = new PointerEvent('pointermove', {\n bubbles: true,\n cancelable: true,\n clientX,\n clientY\n });\n document.dispatchEvent(event);\n // Return the pending promise for the drag operation.\n return this._promise;\n }\n /**\n * Handle the DOM events for the drag operation.\n *\n * @param event - The DOM event sent to the drag object.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the document. It should not be\n * called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n default:\n // Stop all other events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * Move the drag image element to the specified location.\n *\n * This is a no-op if there is no drag image element.\n */\n moveDragImage(clientX, clientY) {\n if (!this.dragImage) {\n return;\n }\n let style = this.dragImage.style;\n style.transform = `translate(${clientX}px, ${clientY}px)`;\n }\n /**\n * Handle the `'pointermove'` event for the drag object.\n */\n _evtPointerMove(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Update the current target node and dispatch enter/leave events.\n this._updateCurrentTarget(event);\n // Update the drag scroll element.\n this._updateDragScroll(event);\n // Move the drag image to the specified client position. This is\n // performed *after* dispatching to prevent unnecessary reflows.\n this.moveDragImage(event.clientX, event.clientY);\n }\n /**\n * Handle the `'pointerup'` event for the drag object.\n */\n _evtPointerUp(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Do nothing if the left button is not released.\n if (event.button !== 0) {\n return;\n }\n // Update the current target node and dispatch enter/leave events.\n // This prevents a subtle issue where the DOM mutates under the\n // cursor after the last move event but before the drop event.\n this._updateCurrentTarget(event);\n // If there is no current target, finalize with `'none'`.\n if (!this._currentTarget) {\n this._finalize('none');\n return;\n }\n // If the last drop action was `'none'`, dispatch a leave event\n // to the current target and finalize the drag with `'none'`.\n if (this._dropAction === 'none') {\n Private.dispatchDragLeave(this, this._currentTarget, null, event);\n this._finalize('none');\n return;\n }\n // Dispatch the drop event at the current target and finalize\n // with the resulting drop action.\n let action = Private.dispatchDrop(this, this._currentTarget, event);\n this._finalize(action);\n }\n /**\n * Handle the `'keydown'` event for the drag object.\n */\n _evtKeyDown(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Cancel the drag if `Escape` is pressed.\n if (event.keyCode === 27) {\n this.dispose();\n }\n }\n /**\n * Add the document event listeners for the drag object.\n */\n _addListeners() {\n document.addEventListener('pointerdown', this, true);\n document.addEventListener('pointermove', this, true);\n document.addEventListener('pointerup', this, true);\n document.addEventListener('pointerenter', this, true);\n document.addEventListener('pointerleave', this, true);\n document.addEventListener('pointerover', this, true);\n document.addEventListener('pointerout', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('keyup', this, true);\n document.addEventListener('keypress', this, true);\n document.addEventListener('contextmenu', this, true);\n }\n /**\n * Remove the document event listeners for the drag object.\n */\n _removeListeners() {\n document.removeEventListener('pointerdown', this, true);\n document.removeEventListener('pointermove', this, true);\n document.removeEventListener('pointerup', this, true);\n document.removeEventListener('pointerenter', this, true);\n document.removeEventListener('pointerleave', this, true);\n document.removeEventListener('pointerover', this, true);\n document.removeEventListener('pointerout', this, true);\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('keyup', this, true);\n document.removeEventListener('keypress', this, true);\n document.removeEventListener('contextmenu', this, true);\n }\n /**\n * Update the drag scroll element under the mouse.\n */\n _updateDragScroll(event) {\n // Find the scroll target under the mouse.\n let target = Private.findScrollTarget(event);\n // Bail if there is nothing to scroll.\n if (!this._scrollTarget && !target) {\n return;\n }\n // Start the scroll loop if needed.\n if (!this._scrollTarget) {\n setTimeout(this._onScrollFrame, 500);\n }\n // Update the scroll target.\n this._scrollTarget = target;\n }\n /**\n * Update the current target node using the given mouse event.\n */\n _updateCurrentTarget(event) {\n // Fetch common local state.\n let prevTarget = this._currentTarget;\n let currTarget = this._currentTarget;\n let prevElem = this._currentElement;\n // Find the current indicated element at the given position.\n let currElem = Private.findElementBehindBackdrop(event, this.document);\n // Update the current element reference.\n this._currentElement = currElem;\n // If the indicated element changes from the previous iteration,\n // and is different from the current target, dispatch the exit\n // event to the target.\n if (currElem !== prevElem && currElem !== currTarget) {\n Private.dispatchDragExit(this, currTarget, currElem, event);\n }\n // If the indicated element changes from the previous iteration,\n // and is different from the current target, dispatch the enter\n // event and compute the new target element.\n if (currElem !== prevElem && currElem !== currTarget) {\n currTarget = Private.dispatchDragEnter(this, currElem, currTarget, event);\n }\n // If the current target element has changed, update the current\n // target reference and dispatch the leave event to the old target.\n if (currTarget !== prevTarget) {\n this._currentTarget = currTarget;\n Private.dispatchDragLeave(this, prevTarget, currTarget, event);\n }\n // Dispatch the drag over event and update the drop action.\n let action = Private.dispatchDragOver(this, currTarget, event);\n this._setDropAction(action);\n }\n /**\n * Attach the drag image element at the specified location.\n *\n * This is a no-op if there is no drag image element.\n */\n _attachDragImage(clientX, clientY) {\n if (!this.dragImage) {\n return;\n }\n this.dragImage.classList.add('lm-mod-drag-image');\n let style = this.dragImage.style;\n style.pointerEvents = 'none';\n style.position = 'fixed';\n style.transform = `translate(${clientX}px, ${clientY}px)`;\n const body = this.document instanceof Document\n ? this.document.body\n : this.document.firstElementChild;\n body.appendChild(this.dragImage);\n }\n /**\n * Detach the drag image element from the DOM.\n *\n * This is a no-op if there is no drag image element.\n */\n _detachDragImage() {\n if (!this.dragImage) {\n return;\n }\n let parent = this.dragImage.parentNode;\n if (!parent) {\n return;\n }\n parent.removeChild(this.dragImage);\n }\n /**\n * Set the internal drop action state and update the drag cursor.\n */\n _setDropAction(action) {\n action = Private.validateAction(action, this.supportedActions);\n if (this._override && this._dropAction === action) {\n return;\n }\n switch (action) {\n case 'none':\n this._dropAction = action;\n this._override = Drag.overrideCursor('no-drop', this.document);\n break;\n case 'copy':\n this._dropAction = action;\n this._override = Drag.overrideCursor('copy', this.document);\n break;\n case 'link':\n this._dropAction = action;\n this._override = Drag.overrideCursor('alias', this.document);\n break;\n case 'move':\n this._dropAction = action;\n this._override = Drag.overrideCursor('move', this.document);\n break;\n }\n }\n /**\n * Finalize the drag operation and resolve the drag promise.\n */\n _finalize(action) {\n // Store the resolve function as a temp variable.\n let resolve = this._resolve;\n // Remove the document event listeners.\n this._removeListeners();\n // Detach the drag image.\n this._detachDragImage();\n // Dispose of the cursor override.\n if (this._override) {\n this._override.dispose();\n this._override = null;\n }\n // Clear the mime data.\n this.mimeData.clear();\n // Clear the rest of the internal drag state.\n this._disposed = true;\n this._dropAction = 'none';\n this._currentTarget = null;\n this._currentElement = null;\n this._scrollTarget = null;\n this._promise = null;\n this._resolve = null;\n // Finally, resolve the promise to the given drop action.\n if (resolve) {\n resolve(action);\n }\n }\n}\n/**\n * The namespace for the `Drag` class statics.\n */\n(function (Drag) {\n /**\n * A custom event used for drag-drop operations.\n *\n * #### Notes\n * In order to receive `'lm-dragover'`, `'lm-dragleave'`, or `'lm-drop'`\n * events, a drop target must cancel the `'lm-dragenter'` event by\n * calling the event's `preventDefault()` method.\n */\n class Event extends DragEvent {\n constructor(event, options) {\n super(options.type, {\n bubbles: true,\n cancelable: true,\n altKey: event.altKey,\n button: event.button,\n clientX: event.clientX,\n clientY: event.clientY,\n ctrlKey: event.ctrlKey,\n detail: 0,\n metaKey: event.metaKey,\n relatedTarget: options.related,\n screenX: event.screenX,\n screenY: event.screenY,\n shiftKey: event.shiftKey,\n view: window\n });\n const { drag } = options;\n this.dropAction = 'none';\n this.mimeData = drag.mimeData;\n this.proposedAction = drag.proposedAction;\n this.supportedActions = drag.supportedActions;\n this.source = drag.source;\n }\n }\n Drag.Event = Event;\n /**\n * Override the cursor icon for the entire document.\n *\n * @param cursor - The string representing the cursor style.\n *\n * @returns A disposable which will clear the override when disposed.\n *\n * #### Notes\n * The most recent call to `overrideCursor` takes precedence.\n * Disposing an old override has no effect on the current override.\n *\n * This utility function is used by the `Drag` class to override the\n * mouse cursor during a drag-drop operation, but it can also be used\n * by other classes to fix the cursor icon during normal mouse drags.\n *\n * #### Example\n * ```typescript\n * import { Drag } from '@lumino/dragdrop';\n *\n * // Force the cursor to be 'wait' for the entire document.\n * let override = Drag.overrideCursor('wait');\n *\n * // Clear the override by disposing the return value.\n * override.dispose();\n * ```\n */\n function overrideCursor(cursor, doc = document) {\n return Private.overrideCursor(cursor, doc);\n }\n Drag.overrideCursor = overrideCursor;\n})(Drag || (Drag = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The size of a drag scroll edge, in pixels.\n */\n Private.SCROLL_EDGE_SIZE = 20;\n /**\n * Validate the given action is one of the supported actions.\n *\n * Returns the given action or `'none'` if the action is unsupported.\n */\n function validateAction(action, supported) {\n return actionTable[action] & supportedTable[supported] ? action : 'none';\n }\n Private.validateAction = validateAction;\n /**\n * Find the event target using pointer position if given, or otherwise\n * the central position of the backdrop.\n */\n function findElementBehindBackdrop(event, root = document) {\n if (event) {\n // Check if we already cached element for this event.\n if (lastElementEventSearch && event == lastElementEventSearch.event) {\n return lastElementEventSearch.element;\n }\n Private.cursorBackdrop.style.zIndex = '-1000';\n const element = root.elementFromPoint(event.clientX, event.clientY);\n Private.cursorBackdrop.style.zIndex = '';\n lastElementEventSearch = { event, element };\n return element;\n }\n else {\n const transform = Private.cursorBackdrop.style.transform;\n if (lastElementSearch && transform === lastElementSearch.transform) {\n return lastElementSearch.element;\n }\n const bbox = Private.cursorBackdrop.getBoundingClientRect();\n Private.cursorBackdrop.style.zIndex = '-1000';\n const element = root.elementFromPoint(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n Private.cursorBackdrop.style.zIndex = '';\n lastElementSearch = { transform, element };\n return element;\n }\n }\n Private.findElementBehindBackdrop = findElementBehindBackdrop;\n let lastElementEventSearch = null;\n let lastElementSearch = null;\n /**\n * Find the drag scroll target under the mouse, if any.\n */\n function findScrollTarget(event) {\n // Look up the client mouse position.\n let x = event.clientX;\n let y = event.clientY;\n // Get the element under the mouse.\n let element = findElementBehindBackdrop(event);\n // Search for a scrollable target based on the mouse position.\n // The null assert in third clause of for-loop is required due to:\n // https://github.com/Microsoft/TypeScript/issues/14143\n for (; element; element = element.parentElement) {\n // Ignore elements which are not marked as scrollable.\n if (!element.hasAttribute('data-lm-dragscroll')) {\n continue;\n }\n // Set up the coordinate offsets for the element.\n let offsetX = 0;\n let offsetY = 0;\n if (element === document.body) {\n offsetX = window.pageXOffset;\n offsetY = window.pageYOffset;\n }\n // Get the element bounds in viewport coordinates.\n let r = element.getBoundingClientRect();\n let top = r.top + offsetY;\n let left = r.left + offsetX;\n let right = left + r.width;\n let bottom = top + r.height;\n // Skip the element if it's not under the mouse.\n if (x < left || x >= right || y < top || y >= bottom) {\n continue;\n }\n // Compute the distance to each edge.\n let dl = x - left + 1;\n let dt = y - top + 1;\n let dr = right - x;\n let db = bottom - y;\n // Find the smallest of the edge distances.\n let distance = Math.min(dl, dt, dr, db);\n // Skip the element if the mouse is not within a scroll edge.\n if (distance > Private.SCROLL_EDGE_SIZE) {\n continue;\n }\n // Set up the edge result variable.\n let edge;\n // Find the edge for the computed distance.\n switch (distance) {\n case db:\n edge = 'bottom';\n break;\n case dt:\n edge = 'top';\n break;\n case dr:\n edge = 'right';\n break;\n case dl:\n edge = 'left';\n break;\n default:\n throw 'unreachable';\n }\n // Compute how much the element can scroll in width and height.\n let dsw = element.scrollWidth - element.clientWidth;\n let dsh = element.scrollHeight - element.clientHeight;\n // Determine if the element should be scrolled for the edge.\n let shouldScroll;\n switch (edge) {\n case 'top':\n shouldScroll = dsh > 0 && element.scrollTop > 0;\n break;\n case 'left':\n shouldScroll = dsw > 0 && element.scrollLeft > 0;\n break;\n case 'right':\n shouldScroll = dsw > 0 && element.scrollLeft < dsw;\n break;\n case 'bottom':\n shouldScroll = dsh > 0 && element.scrollTop < dsh;\n break;\n default:\n throw 'unreachable';\n }\n // Skip the element if it should not be scrolled.\n if (!shouldScroll) {\n continue;\n }\n // Return the drag scroll target.\n return { element, edge, distance };\n }\n // No drag scroll target was found.\n return null;\n }\n Private.findScrollTarget = findScrollTarget;\n /**\n * Dispatch a drag enter event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currElem - The currently indicated element, or `null`. This\n * is the \"immediate user selection\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The element to use as the current drag target. This is the\n * \"current target element\" from the whatwg spec, and may be `null`.\n *\n * #### Notes\n * This largely implements the drag enter portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragEnter(drag, currElem, currTarget, event) {\n // If the current element is null, return null as the new target.\n if (!currElem) {\n return null;\n }\n // Dispatch a drag enter event to the current element.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragenter'\n });\n let canceled = !currElem.dispatchEvent(dragEvent);\n // If the event was canceled, use the current element as the new target.\n if (canceled) {\n return currElem;\n }\n // If the current element is the document body, keep the original target.\n const body = drag.document instanceof Document\n ? drag.document.body\n : drag.document.firstElementChild;\n if (currElem === body) {\n return currTarget;\n }\n // Dispatch a drag enter event on the document body.\n dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragenter'\n });\n body.dispatchEvent(dragEvent);\n // Ignore the event cancellation, and use the body as the new target.\n return body;\n }\n Private.dispatchDragEnter = dispatchDragEnter;\n /**\n * Dispatch a drag exit event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param prevTarget - The previous target element, or `null`. This\n * is the previous \"current target element\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * #### Notes\n * This largely implements the drag exit portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragExit(drag, prevTarget, currTarget, event) {\n // If the previous target is null, do nothing.\n if (!prevTarget) {\n return;\n }\n // Dispatch the drag exit event to the previous target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragexit'\n });\n prevTarget.dispatchEvent(dragEvent);\n }\n Private.dispatchDragExit = dispatchDragExit;\n /**\n * Dispatch a drag leave event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param prevTarget - The previous target element, or `null`. This\n * is the previous \"current target element\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * #### Notes\n * This largely implements the drag leave portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragLeave(drag, prevTarget, currTarget, event) {\n // If the previous target is null, do nothing.\n if (!prevTarget) {\n return;\n }\n // Dispatch the drag leave event to the previous target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragleave'\n });\n prevTarget.dispatchEvent(dragEvent);\n }\n Private.dispatchDragLeave = dispatchDragLeave;\n /**\n * Dispatch a drag over event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The `DropAction` result of the drag over event.\n *\n * #### Notes\n * This largely implements the drag over portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragOver(drag, currTarget, event) {\n // If there is no current target, the drop action is none.\n if (!currTarget) {\n return 'none';\n }\n // Dispatch the drag over event to the current target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: null,\n type: 'lm-dragover'\n });\n let canceled = !currTarget.dispatchEvent(dragEvent);\n // If the event was canceled, return the drop action result.\n if (canceled) {\n return dragEvent.dropAction;\n }\n // Otherwise, the effective drop action is none.\n return 'none';\n }\n Private.dispatchDragOver = dispatchDragOver;\n /**\n * Dispatch a drop event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The `DropAction` result of the drop event.\n *\n * #### Notes\n * This largely implements the drag over portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDrop(drag, currTarget, event) {\n // If there is no current target, the drop action is none.\n if (!currTarget) {\n return 'none';\n }\n // Dispatch the drop event to the current target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: null,\n type: 'lm-drop'\n });\n let canceled = !currTarget.dispatchEvent(dragEvent);\n // If the event was canceled, return the drop action result.\n if (canceled) {\n return dragEvent.dropAction;\n }\n // Otherwise, the effective drop action is none.\n return 'none';\n }\n Private.dispatchDrop = dispatchDrop;\n /**\n * A lookup table from drop action to bit value.\n */\n const actionTable = {\n none: 0x0,\n copy: 0x1,\n link: 0x2,\n move: 0x4\n };\n /**\n * A lookup table from supported action to drop action bit mask.\n */\n const supportedTable = {\n none: actionTable['none'],\n copy: actionTable['copy'],\n link: actionTable['link'],\n move: actionTable['move'],\n 'copy-link': actionTable['copy'] | actionTable['link'],\n 'copy-move': actionTable['copy'] | actionTable['move'],\n 'link-move': actionTable['link'] | actionTable['move'],\n all: actionTable['copy'] | actionTable['link'] | actionTable['move']\n };\n /**\n * Implementation of `Drag.overrideCursor`.\n */\n function overrideCursor(cursor, doc = document) {\n let id = ++overrideCursorID;\n const body = doc instanceof Document\n ? doc.body\n : doc.firstElementChild;\n if (!Private.cursorBackdrop.isConnected) {\n // Hide the backdrop until the pointer moves to avoid issues with\n // native double click detection, used in e.g. datagrid editing.\n Private.cursorBackdrop.style.transform = 'scale(0)';\n body.appendChild(Private.cursorBackdrop);\n resetBackdropScroll();\n document.addEventListener('pointermove', alignBackdrop, {\n capture: true,\n passive: true\n });\n Private.cursorBackdrop.addEventListener('scroll', propagateBackdropScroll, {\n capture: true,\n passive: true\n });\n }\n Private.cursorBackdrop.style.cursor = cursor;\n return new DisposableDelegate(() => {\n if (id === overrideCursorID && Private.cursorBackdrop.isConnected) {\n document.removeEventListener('pointermove', alignBackdrop, true);\n Private.cursorBackdrop.removeEventListener('scroll', propagateBackdropScroll, true);\n body.removeChild(Private.cursorBackdrop);\n }\n });\n }\n Private.overrideCursor = overrideCursor;\n /**\n * Move cursor backdrop to match cursor position.\n */\n function alignBackdrop(event) {\n if (!Private.cursorBackdrop) {\n return;\n }\n Private.cursorBackdrop.style.transform = `translate(${event.clientX}px, ${event.clientY}px)`;\n }\n /**\n * Propagate the scroll event from the backdrop element to the scroll target.\n * The scroll target is defined by presence of `data-lm-dragscroll` attribute.\n */\n function propagateBackdropScroll(_event) {\n if (!Private.cursorBackdrop) {\n return;\n }\n // Get the element under behind the centre of the cursor backdrop\n // (essentially behind the cursor, but possibly a few pixels off).\n let element = findElementBehindBackdrop();\n if (!element) {\n return;\n }\n // Find scroll target.\n const scrollTarget = element.closest('[data-lm-dragscroll]');\n if (!scrollTarget) {\n return;\n }\n // Apply the scroll delta to the correct target.\n scrollTarget.scrollTop += Private.cursorBackdrop.scrollTop - backdropScrollOrigin;\n scrollTarget.scrollLeft += Private.cursorBackdrop.scrollLeft - backdropScrollOrigin;\n // Center the scroll position.\n resetBackdropScroll();\n }\n /**\n * Reset the backdrop scroll to allow further scrolling.\n */\n function resetBackdropScroll() {\n Private.cursorBackdrop.scrollTop = backdropScrollOrigin;\n Private.cursorBackdrop.scrollLeft = backdropScrollOrigin;\n }\n /**\n * The center of the backdrop node scroll area.\n */\n const backdropScrollOrigin = 500;\n /**\n * Create cursor backdrop node.\n */\n function createCursorBackdrop() {\n const backdrop = document.createElement('div');\n backdrop.classList.add('lm-cursor-backdrop');\n return backdrop;\n }\n /**\n * The internal id for the active cursor override.\n */\n let overrideCursorID = 0;\n /**\n * A backdrop node overriding pointer cursor.\n *\n * #### Notes\n * We use a backdrop node rather than setting the cursor directly on the body\n * because setting it on body requires more extensive style recalculation for\n * reliable application of the cursor, this is the cursor not being overriden\n * when over child elements with another style like `cursor: other!important`.\n */\n Private.cursorBackdrop = createCursorBackdrop();\n})(Private || (Private = {}));\n\nexport { Drag };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module keyboard\n */\n/**\n * Get the global application keyboard layout instance.\n *\n * @returns The keyboard layout for use by the application.\n *\n * #### Notes\n * The default keyboard layout is US-English.\n */\nfunction getKeyboardLayout() {\n return Private.keyboardLayout;\n}\n/**\n * Set the global application keyboard layout instance.\n *\n * @param layout The keyboard layout for use by the application.\n *\n * #### Notes\n * The keyboard layout should typically be set on application startup\n * to a layout which is appropriate for the user's system.\n */\nfunction setKeyboardLayout(layout) {\n Private.keyboardLayout = layout;\n}\n/**\n * A concrete implementation of {@link IKeyboardLayout} based on keycodes.\n *\n * The `keyCode` property of a `'keydown'` event is a browser and OS\n * specific representation of the physical key (not character) which\n * was pressed on a keyboard. While not the most convenient API, it\n * is currently the only one which works reliably on all browsers.\n *\n * This class accepts a user-defined mapping of keycode to key, which\n * allows for reliable shortcuts tailored to the user's system.\n */\nclass KeycodeLayout {\n /**\n * Construct a new keycode layout.\n *\n * @param name - The human readable name for the layout.\n *\n * @param codes - A mapping of keycode to key value.\n *\n * @param modifierKeys - Array of modifier key names\n */\n constructor(name, codes, modifierKeys = []) {\n this.name = name;\n this._codes = codes;\n this._keys = KeycodeLayout.extractKeys(codes);\n this._modifierKeys = KeycodeLayout.convertToKeySet(modifierKeys);\n }\n /**\n * Get an array of the key values supported by the layout.\n *\n * @returns A new array of the supported key values.\n */\n keys() {\n return Object.keys(this._keys);\n }\n /**\n * Test whether the given key is a valid value for the layout.\n *\n * @param key - The user provided key to test for validity.\n *\n * @returns `true` if the key is valid, `false` otherwise.\n */\n isValidKey(key) {\n return key in this._keys;\n }\n /**\n * Test whether the given key is a modifier key.\n *\n * @param key - The user provided key.\n *\n * @returns `true` if the key is a modifier key, `false` otherwise.\n */\n isModifierKey(key) {\n return key in this._modifierKeys;\n }\n /**\n * Get the key for a `'keydown'` event.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns The associated key value, or an empty string if\n * the event does not represent a valid primary key.\n */\n keyForKeydownEvent(event) {\n return this._codes[event.keyCode] || '';\n }\n}\n/**\n * The namespace for the `KeycodeLayout` class statics.\n */\n(function (KeycodeLayout) {\n /**\n * Extract the set of keys from a code map.\n *\n * @param codes - The code map of interest.\n *\n * @returns A set of the keys in the code map.\n */\n function extractKeys(codes) {\n let keys = Object.create(null);\n for (let c in codes) {\n keys[codes[c]] = true;\n }\n return keys;\n }\n KeycodeLayout.extractKeys = extractKeys;\n /**\n * Convert array of keys to a key set.\n *\n * @param keys - The array that needs to be converted\n *\n * @returns A set of the keys in the array.\n */\n function convertToKeySet(keys) {\n let keySet = Object(null);\n for (let i = 0, n = keys.length; i < n; ++i) {\n keySet[keys[i]] = true;\n }\n return keySet;\n }\n KeycodeLayout.convertToKeySet = convertToKeySet;\n})(KeycodeLayout || (KeycodeLayout = {}));\n/**\n * A keycode-based keyboard layout for US English keyboards.\n *\n * This layout is valid for the following OS/Browser combinations.\n *\n * - Windows\n * - Chrome\n * - Firefox\n * - IE\n *\n * - OSX\n * - Chrome\n * - Firefox\n * - Safari\n *\n * - Linux\n * - Chrome\n * - Firefox\n *\n * Other combinations may also work, but are untested.\n */\nconst EN_US = new KeycodeLayout('en-us', {\n 8: 'Backspace',\n 9: 'Tab',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 19: 'Pause',\n 27: 'Escape',\n 32: 'Space',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'A',\n 66: 'B',\n 67: 'C',\n 68: 'D',\n 69: 'E',\n 70: 'F',\n 71: 'G',\n 72: 'H',\n 73: 'I',\n 74: 'J',\n 75: 'K',\n 76: 'L',\n 77: 'M',\n 78: 'N',\n 79: 'O',\n 80: 'P',\n 81: 'Q',\n 82: 'R',\n 83: 'S',\n 84: 'T',\n 85: 'U',\n 86: 'V',\n 87: 'W',\n 88: 'X',\n 89: 'Y',\n 90: 'Z',\n 91: 'Meta',\n 93: 'ContextMenu',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9',\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111: '/',\n 112: 'F1',\n 113: 'F2',\n 114: 'F3',\n 115: 'F4',\n 116: 'F5',\n 117: 'F6',\n 118: 'F7',\n 119: 'F8',\n 120: 'F9',\n 121: 'F10',\n 122: 'F11',\n 123: 'F12',\n 173: '-',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 224: 'Meta' // firefox\n}, ['Shift', 'Ctrl', 'Alt', 'Meta'] // modifier keys\n);\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The global keyboard layout instance.\n */\n Private.keyboardLayout = EN_US;\n})(Private || (Private = {}));\n\nexport { EN_US, KeycodeLayout, getKeyboardLayout, setKeyboardLayout };\n//# sourceMappingURL=index.es6.js.map\n","import { every, retro, some, ArrayExt } from '@lumino/algorithm';\nimport { LinkedList } from '@lumino/collections';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module messaging\n */\n/**\n * A message which can be delivered to a message handler.\n *\n * #### Notes\n * This class may be subclassed to create complex message types.\n */\nclass Message {\n /**\n * Construct a new message.\n *\n * @param type - The type of the message.\n */\n constructor(type) {\n this.type = type;\n }\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * If a conflatable message is posted to a handler while another\n * conflatable message of the same `type` has already been posted\n * to the handler, the `conflate()` method of the existing message\n * will be invoked. If that method returns `true`, the new message\n * will not be enqueued. This allows messages to be compressed, so\n * that only a single instance of the message type is processed per\n * cycle, no matter how many times messages of that type are posted.\n *\n * Custom message types may reimplement this property.\n *\n * The default implementation is always `false`.\n */\n get isConflatable() {\n return false;\n }\n /**\n * Conflate this message with another message of the same `type`.\n *\n * @param other - A conflatable message of the same `type`.\n *\n * @returns `true` if the message was successfully conflated, or\n * `false` otherwise.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * This method is called automatically by the message loop when the\n * given message is posted to the handler paired with this message.\n * This message will already be enqueued and conflatable, and the\n * given message will have the same `type` and also be conflatable.\n *\n * This method should merge the state of the other message into this\n * message as needed so that when this message is finally delivered\n * to the handler, it receives the most up-to-date information.\n *\n * If this method returns `true`, it signals that the other message\n * was successfully conflated and that message will not be enqueued.\n *\n * If this method returns `false`, the other message will be enqueued\n * for normal delivery.\n *\n * Custom message types may reimplement this method.\n *\n * The default implementation always returns `false`.\n */\n conflate(other) {\n return false;\n }\n}\n/**\n * A convenience message class which conflates automatically.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most user code will not\n * make use of this class.\n *\n * This message class is useful for creating message instances which\n * should be conflated, but which have no state other than `type`.\n *\n * If conflation of stateful messages is required, a custom `Message`\n * subclass should be created.\n */\nclass ConflatableMessage extends Message {\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * This property is always `true`.\n */\n get isConflatable() {\n return true;\n }\n /**\n * Conflate this message with another message of the same `type`.\n *\n * #### Notes\n * This method always returns `true`.\n */\n conflate(other) {\n return true;\n }\n}\n/**\n * The namespace for the global singleton message loop.\n */\nvar MessageLoop;\n(function (MessageLoop) {\n /**\n * A function that cancels the pending loop task; `null` if unavailable.\n */\n let pending = null;\n /**\n * Schedules a function for invocation as soon as possible asynchronously.\n *\n * @param fn The function to invoke when called back.\n *\n * @returns An anonymous function that will unschedule invocation if possible.\n */\n const schedule = (resolved => (fn) => {\n let rejected = false;\n resolved.then(() => !rejected && fn());\n return () => {\n rejected = true;\n };\n })(Promise.resolve());\n /**\n * Send a message to a message handler to process immediately.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to deliver to the handler.\n *\n * #### Notes\n * The message will first be sent through any installed message hooks\n * for the handler. If the message passes all hooks, it will then be\n * delivered to the `processMessage` method of the handler.\n *\n * The message will not be conflated with pending posted messages.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function sendMessage(handler, msg) {\n // Lookup the message hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Handle the common case of no installed hooks.\n if (!hooks || hooks.length === 0) {\n invokeHandler(handler, msg);\n return;\n }\n // Invoke the message hooks starting with the newest first.\n let passed = every(retro(hooks), hook => {\n return hook ? invokeHook(hook, handler, msg) : true;\n });\n // Invoke the handler if the message passes all hooks.\n if (passed) {\n invokeHandler(handler, msg);\n }\n }\n MessageLoop.sendMessage = sendMessage;\n /**\n * Post a message to a message handler to process in the future.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to post to the handler.\n *\n * #### Notes\n * The message will be conflated with the pending posted messages for\n * the handler, if possible. If the message is not conflated, it will\n * be queued for normal delivery on the next cycle of the event loop.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function postMessage(handler, msg) {\n // Handle the common case of a non-conflatable message.\n if (!msg.isConflatable) {\n enqueueMessage(handler, msg);\n return;\n }\n // Conflate the message with an existing message if possible.\n let conflated = some(messageQueue, posted => {\n if (posted.handler !== handler) {\n return false;\n }\n if (!posted.msg) {\n return false;\n }\n if (posted.msg.type !== msg.type) {\n return false;\n }\n if (!posted.msg.isConflatable) {\n return false;\n }\n return posted.msg.conflate(msg);\n });\n // Enqueue the message if it was not conflated.\n if (!conflated) {\n enqueueMessage(handler, msg);\n }\n }\n MessageLoop.postMessage = postMessage;\n /**\n * Install a message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to install.\n *\n * #### Notes\n * A message hook is invoked before a message is delivered to the\n * handler. If the hook returns `false`, no other hooks will be\n * invoked and the message will not be delivered to the handler.\n *\n * The most recently installed message hook is executed first.\n *\n * If the hook is already installed, this is a no-op.\n */\n function installMessageHook(handler, hook) {\n // Look up the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Bail early if the hook is already installed.\n if (hooks && hooks.indexOf(hook) !== -1) {\n return;\n }\n // Add the hook to the end, so it will be the first to execute.\n if (!hooks) {\n messageHooks.set(handler, [hook]);\n }\n else {\n hooks.push(hook);\n }\n }\n MessageLoop.installMessageHook = installMessageHook;\n /**\n * Remove an installed message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to remove.\n *\n * #### Notes\n * It is safe to call this function while the hook is executing.\n *\n * If the hook is not installed, this is a no-op.\n */\n function removeMessageHook(handler, hook) {\n // Lookup the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Bail early if the hooks do not exist.\n if (!hooks) {\n return;\n }\n // Lookup the index of the hook and bail if not found.\n let i = hooks.indexOf(hook);\n if (i === -1) {\n return;\n }\n // Clear the hook and schedule a cleanup of the array.\n hooks[i] = null;\n scheduleCleanup(hooks);\n }\n MessageLoop.removeMessageHook = removeMessageHook;\n /**\n * Clear all message data associated with a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * #### Notes\n * This will clear all posted messages and hooks for the handler.\n */\n function clearData(handler) {\n // Lookup the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Clear all messsage hooks for the handler.\n if (hooks && hooks.length > 0) {\n ArrayExt.fill(hooks, null);\n scheduleCleanup(hooks);\n }\n // Clear all posted messages for the handler.\n for (const posted of messageQueue) {\n if (posted.handler === handler) {\n posted.handler = null;\n posted.msg = null;\n }\n }\n }\n MessageLoop.clearData = clearData;\n /**\n * Process the pending posted messages in the queue immediately.\n *\n * #### Notes\n * This function is useful when posted messages must be processed immediately.\n *\n * This function should normally not be needed, but it may be\n * required to work around certain browser idiosyncrasies.\n *\n * Recursing into this function is a no-op.\n */\n function flush() {\n // Bail if recursion is detected or if there is no pending task.\n if (flushGuard || pending === null) {\n return;\n }\n // Unschedule the pending loop task.\n pending();\n pending = null;\n // Run the message loop within the recursion guard.\n flushGuard = true;\n runMessageLoop();\n flushGuard = false;\n }\n MessageLoop.flush = flush;\n /**\n * Get the message loop exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return exceptionHandler;\n }\n MessageLoop.getExceptionHandler = getExceptionHandler;\n /**\n * Set the message loop exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a message handler or a\n * message hook throws an exception.\n */\n function setExceptionHandler(handler) {\n let old = exceptionHandler;\n exceptionHandler = handler;\n return old;\n }\n MessageLoop.setExceptionHandler = setExceptionHandler;\n /**\n * The queue of posted message pairs.\n */\n const messageQueue = new LinkedList();\n /**\n * A mapping of handler to array of installed message hooks.\n */\n const messageHooks = new WeakMap();\n /**\n * A set of message hook arrays which are pending cleanup.\n */\n const dirtySet = new Set();\n /**\n * The message loop exception handler.\n */\n let exceptionHandler = (err) => {\n console.error(err);\n };\n /**\n * A guard flag to prevent flush recursion.\n */\n let flushGuard = false;\n /**\n * Invoke a message hook with the specified handler and message.\n *\n * Returns the result of the hook, or `true` if the hook throws.\n *\n * Exceptions in the hook will be caught and logged.\n */\n function invokeHook(hook, handler, msg) {\n let result = true;\n try {\n if (typeof hook === 'function') {\n result = hook(handler, msg);\n }\n else {\n result = hook.messageHook(handler, msg);\n }\n }\n catch (err) {\n exceptionHandler(err);\n }\n return result;\n }\n /**\n * Invoke a message handler with the specified message.\n *\n * Exceptions in the handler will be caught and logged.\n */\n function invokeHandler(handler, msg) {\n try {\n handler.processMessage(msg);\n }\n catch (err) {\n exceptionHandler(err);\n }\n }\n /**\n * Add a message to the end of the message queue.\n *\n * This will automatically schedule a run of the message loop.\n */\n function enqueueMessage(handler, msg) {\n // Add the posted message to the queue.\n messageQueue.addLast({ handler, msg });\n // Bail if a loop task is already pending.\n if (pending !== null) {\n return;\n }\n // Schedule a run of the message loop.\n pending = schedule(runMessageLoop);\n }\n /**\n * Run an iteration of the message loop.\n *\n * This will process all pending messages in the queue. If a message\n * is added to the queue while the message loop is running, it will\n * be processed on the next cycle of the loop.\n */\n function runMessageLoop() {\n // Clear the task so the next loop can be scheduled.\n pending = null;\n // If the message queue is empty, there is nothing else to do.\n if (messageQueue.isEmpty) {\n return;\n }\n // Add a sentinel value to the end of the queue. The queue will\n // only be processed up to the sentinel. Messages posted during\n // this cycle will execute on the next cycle.\n let sentinel = { handler: null, msg: null };\n messageQueue.addLast(sentinel);\n // Enter the message loop.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // Remove the first posted message in the queue.\n let posted = messageQueue.removeFirst();\n // If the value is the sentinel, exit the loop.\n if (posted === sentinel) {\n return;\n }\n // Dispatch the message if it has not been cleared.\n if (posted.handler && posted.msg) {\n sendMessage(posted.handler, posted.msg);\n }\n }\n }\n /**\n * Schedule a cleanup of a message hooks array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any `null` hook will\n * be removed from the array.\n */\n function scheduleCleanup(hooks) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(hooks);\n }\n /**\n * Cleanup the message hook arrays in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupHooks);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty hooks in a message hooks array.\n *\n * This will remove any `null` hook from the array.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupHooks(hooks) {\n ArrayExt.removeAllWhere(hooks, isNull);\n }\n /**\n * Test whether a value is `null`.\n */\n function isNull(value) {\n return value === null;\n }\n})(MessageLoop || (MessageLoop = {}));\n\nexport { ConflatableMessage, Message, MessageLoop };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module properties\n */\n/**\n * A class which attaches a value to an external object.\n *\n * #### Notes\n * Attached properties are used to extend the state of an object with\n * semantic data from an unrelated class. They also encapsulate value\n * creation, coercion, and notification.\n *\n * Because attached property values are stored in a hash table, which\n * in turn is stored in a WeakMap keyed on the owner object, there is\n * non-trivial storage overhead involved in their use. The pattern is\n * therefore best used for the storage of rare data.\n */\nclass AttachedProperty {\n /**\n * Construct a new attached property.\n *\n * @param options - The options for initializing the property.\n */\n constructor(options) {\n this._pid = Private.nextPID();\n this.name = options.name;\n this._create = options.create;\n this._coerce = options.coerce || null;\n this._compare = options.compare || null;\n this._changed = options.changed || null;\n }\n /**\n * Get the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @returns The current value of the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and assigned as the current value of the property.\n */\n get(owner) {\n let value;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n value = map[this._pid];\n }\n else {\n value = map[this._pid] = this._createValue(owner);\n }\n return value;\n }\n /**\n * Set the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @param value - The value for the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n set(owner, value) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, value);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Explicitly coerce the current property value for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n coerce(owner) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, oldValue);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Get or create the default value for the given owner.\n */\n _createValue(owner) {\n let create = this._create;\n return create(owner);\n }\n /**\n * Coerce the value for the given owner.\n */\n _coerceValue(owner, value) {\n let coerce = this._coerce;\n return coerce ? coerce(owner, value) : value;\n }\n /**\n * Compare the old value and new value for equality.\n */\n _compareValue(oldValue, newValue) {\n let compare = this._compare;\n return compare ? compare(oldValue, newValue) : oldValue === newValue;\n }\n /**\n * Run the change notification if the given values are different.\n */\n _maybeNotify(owner, oldValue, newValue) {\n let changed = this._changed;\n if (changed && !this._compareValue(oldValue, newValue)) {\n changed(owner, oldValue, newValue);\n }\n }\n}\n/**\n * The namespace for the `AttachedProperty` class statics.\n */\n(function (AttachedProperty) {\n /**\n * Clear the stored property data for the given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * This will clear all property values for the owner, but it will\n * **not** run the change notification for any of the properties.\n */\n function clearData(owner) {\n Private.ownerData.delete(owner);\n }\n AttachedProperty.clearData = clearData;\n})(AttachedProperty || (AttachedProperty = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of property owner to property map.\n */\n Private.ownerData = new WeakMap();\n /**\n * A function which computes successive unique property ids.\n */\n Private.nextPID = (() => {\n let id = 0;\n return () => {\n let rand = Math.random();\n let stem = `${rand}`.slice(2);\n return `pid-${stem}-${id++}`;\n };\n })();\n /**\n * Lookup the data map for the property owner.\n *\n * This will create the map if one does not already exist.\n */\n function ensureMap(owner) {\n let map = Private.ownerData.get(owner);\n if (map) {\n return map;\n }\n map = Object.create(null);\n Private.ownerData.set(owner, map);\n return map;\n }\n Private.ensureMap = ensureMap;\n})(Private || (Private = {}));\n\nexport { AttachedProperty };\n//# sourceMappingURL=index.es6.js.map\n","import { find, ArrayExt } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module signaling\n */\n/**\n * A concrete implementation of `ISignal`.\n *\n * #### Example\n * ```typescript\n * import { ISignal, Signal } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get valueChanged: ISignal {\n * return this._valueChanged;\n * }\n *\n * get value(): number {\n * return this._value;\n * }\n *\n * set value(value: number) {\n * if (value === this._value) {\n * return;\n * }\n * this._value = value;\n * this._valueChanged.emit(value);\n * }\n *\n * private _value = 0;\n * private _valueChanged = new Signal(this);\n * }\n *\n * function logger(sender: SomeClass, value: number): void {\n * console.log(sender.name, value);\n * }\n *\n * let m1 = new SomeClass('foo');\n * let m2 = new SomeClass('bar');\n *\n * m1.valueChanged.connect(logger);\n * m2.valueChanged.connect(logger);\n *\n * m1.value = 42; // logs: foo 42\n * m2.value = 17; // logs: bar 17\n * ```\n */\nclass Signal {\n /**\n * Construct a new signal.\n *\n * @param sender - The sender which owns the signal.\n */\n constructor(sender) {\n this.sender = sender;\n }\n /**\n * Connect a slot to the signal.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n connect(slot, thisArg) {\n return Private.connect(this, slot, thisArg);\n }\n /**\n * Disconnect a slot from the signal.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n disconnect(slot, thisArg) {\n return Private.disconnect(this, slot, thisArg);\n }\n /**\n * Emit the signal and invoke the connected slots.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n emit(args) {\n Private.emit(this, args);\n }\n}\n/**\n * The namespace for the `Signal` class statics.\n */\n(function (Signal) {\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectBetween(sender, receiver) {\n Private.disconnectBetween(sender, receiver);\n }\n Signal.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n Private.disconnectSender(sender);\n }\n Signal.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectReceiver(receiver) {\n Private.disconnectReceiver(receiver);\n }\n Signal.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectAll(object) {\n Private.disconnectAll(object);\n }\n Signal.disconnectAll = disconnectAll;\n /**\n * Clear all signal data associated with the given object.\n *\n * @param object - The object for which the data should be cleared.\n *\n * #### Notes\n * This removes all signal connections and any other signal data\n * associated with the object.\n */\n function clearData(object) {\n Private.disconnectAll(object);\n }\n Signal.clearData = clearData;\n /**\n * Get the signal exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return Private.exceptionHandler;\n }\n Signal.getExceptionHandler = getExceptionHandler;\n /**\n * Set the signal exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a slot throws an exception.\n */\n function setExceptionHandler(handler) {\n let old = Private.exceptionHandler;\n Private.exceptionHandler = handler;\n return old;\n }\n Signal.setExceptionHandler = setExceptionHandler;\n})(Signal || (Signal = {}));\n/**\n * A concrete implementation of `IStream`.\n *\n * #### Example\n * ```typescript\n * import { IStream, Stream } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get pings(): IStream {\n * return this._pings;\n * }\n *\n * ping(value: string) {\n * this._pings.emit(value);\n * }\n *\n * private _pings = new Stream(this);\n * }\n *\n * let m1 = new SomeClass('foo');\n *\n * m1.pings.connect((_, value: string) => {\n * console.log('connect', value);\n * });\n *\n * void (async () => {\n * for await (const ping of m1.pings) {\n * console.log('iterator', ping);\n * }\n * })();\n *\n * m1.ping('alpha'); // logs: connect alpha\n * // logs: iterator alpha\n * m1.ping('beta'); // logs: connect beta\n * // logs: iterator beta\n * ```\n */\nclass Stream extends Signal {\n constructor() {\n super(...arguments);\n this._pending = new PromiseDelegate();\n }\n /**\n * Return an async iterator that yields every emission.\n */\n async *[Symbol.asyncIterator]() {\n let pending = this._pending;\n while (true) {\n try {\n const { args, next } = await pending.promise;\n pending = next;\n yield args;\n }\n catch (_) {\n return; // Any promise rejection stops the iterator.\n }\n }\n }\n /**\n * Emit the signal, invoke the connected slots, and yield the emission.\n *\n * @param args - The args to pass to the connected slots.\n */\n emit(args) {\n const pending = this._pending;\n const next = (this._pending = new PromiseDelegate());\n pending.resolve({ args, next });\n super.emit(args);\n }\n /**\n * Stop the stream's async iteration.\n */\n stop() {\n this._pending.promise.catch(() => undefined);\n this._pending.reject('stop');\n this._pending = new PromiseDelegate();\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The signal exception handler function.\n */\n Private.exceptionHandler = (err) => {\n console.error(err);\n };\n /**\n * Connect a slot to a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n function connect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Ensure the sender's array of receivers is created.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers) {\n receivers = [];\n receiversForSender.set(signal.sender, receivers);\n }\n // Bail if a matching connection already exists.\n if (findConnection(receivers, signal, slot, thisArg)) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Ensure the receiver's array of senders is created.\n let senders = sendersForReceiver.get(receiver);\n if (!senders) {\n senders = [];\n sendersForReceiver.set(receiver, senders);\n }\n // Create a new connection and add it to the end of each array.\n let connection = { signal, slot, thisArg };\n receivers.push(connection);\n senders.push(connection);\n // Indicate a successful connection.\n return true;\n }\n Private.connect = connect;\n /**\n * Disconnect a slot from a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n function disconnect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Lookup the list of receivers, and bail if none exist.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return false;\n }\n // Bail if no matching connection exits.\n let connection = findConnection(receivers, signal, slot, thisArg);\n if (!connection) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Lookup the array of senders, which is now known to exist.\n let senders = sendersForReceiver.get(receiver);\n // Clear the connection and schedule cleanup of the arrays.\n connection.signal = null;\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n // Indicate a successful disconnection.\n return true;\n }\n Private.disconnect = disconnect;\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectBetween(sender, receiver) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each connection between the sender and receiver.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Clear the connection if it matches the sender.\n if (connection.signal.sender === sender) {\n connection.signal = null;\n }\n }\n // Schedule a cleanup of the senders and receivers.\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n }\n Private.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Clear each receiver connection.\n for (const connection of receivers) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Choose the best object for the receiver.\n let receiver = connection.thisArg || connection.slot;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of senders, which is now known to exist.\n scheduleCleanup(sendersForReceiver.get(receiver));\n }\n // Schedule a cleanup of the receivers.\n scheduleCleanup(receivers);\n }\n Private.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectReceiver(receiver) {\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each sender connection.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Lookup the sender for the connection.\n let sender = connection.signal.sender;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of receivers, which is now known to exist.\n scheduleCleanup(receiversForSender.get(sender));\n }\n // Schedule a cleanup of the list of senders.\n scheduleCleanup(senders);\n }\n Private.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n */\n function disconnectAll(object) {\n // Remove all connections where the given object is the sender.\n disconnectSender(object);\n // Remove all connections where the given object is the receiver.\n disconnectReceiver(object);\n }\n Private.disconnectAll = disconnectAll;\n /**\n * Emit a signal and invoke its connected slots.\n *\n * @param signal - The signal of interest.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n function emit(signal, args) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Invoke the slots for connections with a matching signal.\n // Any connections added during emission are not invoked.\n for (let i = 0, n = receivers.length; i < n; ++i) {\n let connection = receivers[i];\n if (connection.signal === signal) {\n invokeSlot(connection, args);\n }\n }\n }\n Private.emit = emit;\n /**\n * A weak mapping of sender to array of receiver connections.\n */\n const receiversForSender = new WeakMap();\n /**\n * A weak mapping of receiver to array of sender connections.\n */\n const sendersForReceiver = new WeakMap();\n /**\n * A set of connection arrays which are pending cleanup.\n */\n const dirtySet = new Set();\n /**\n * A function to schedule an event loop callback.\n */\n const schedule = (() => {\n let ok = typeof requestAnimationFrame === 'function';\n return ok ? requestAnimationFrame : setImmediate;\n })();\n /**\n * Find a connection which matches the given parameters.\n */\n function findConnection(connections, signal, slot, thisArg) {\n return find(connections, connection => connection.signal === signal &&\n connection.slot === slot &&\n connection.thisArg === thisArg);\n }\n /**\n * Invoke a slot with the given parameters.\n *\n * The connection is assumed to be valid.\n *\n * Exceptions in the slot will be caught and logged.\n */\n function invokeSlot(connection, args) {\n let { signal, slot, thisArg } = connection;\n try {\n slot.call(thisArg, signal.sender, args);\n }\n catch (err) {\n Private.exceptionHandler(err);\n }\n }\n /**\n * Schedule a cleanup of a connection array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any connection with a\n * `null` signal will be removed from the array.\n */\n function scheduleCleanup(array) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(array);\n }\n /**\n * Cleanup the connection lists in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupConnections);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty connections in a connections array.\n *\n * This will remove any connection with a `null` signal.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupConnections(connections) {\n ArrayExt.removeAllWhere(connections, isDeadConnection);\n }\n /**\n * Test whether a connection is dead.\n *\n * A dead connection has a `null` signal.\n */\n function isDeadConnection(connection) {\n return connection.signal === null;\n }\n})(Private || (Private = {}));\n\nexport { Signal, Stream };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module virtualdom\n */\n/**\n * A virtual node which represents plain text content.\n *\n * #### Notes\n * User code will not typically create a `VirtualText` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualText {\n /**\n * Construct a new virtual text node.\n *\n * @param content - The text content for the node.\n */\n constructor(content) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'text';\n this.content = content;\n }\n}\n/**\n * A virtual node which represents an HTML element.\n *\n * #### Notes\n * User code will not typically create a `VirtualElement` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualElement {\n /**\n * Construct a new virtual element node.\n *\n * @param tag - The element tag name.\n *\n * @param attrs - The element attributes.\n *\n * @param children - The element children.\n *\n * @param renderer - An optional custom renderer for the element.\n */\n constructor(tag, attrs, children, renderer) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'element';\n this.tag = tag;\n this.attrs = attrs;\n this.children = children;\n this.renderer = renderer;\n }\n}\n/**\n * DEPRECATED - use VirtualElement with a defined renderer param instead.\n * This class is provided as a backwards compatibility shim\n *\n * A \"pass thru\" virtual node whose children are managed by a render and an\n * unrender callback. The intent of this flavor of virtual node is to make\n * it easy to blend other kinds of virtualdom (eg React) into Phosphor's\n * virtualdom.\n *\n * #### Notes\n * User code will not typically create a `VirtualElementPass` node directly.\n * Instead, the `hpass()` function will be used to create an element tree.\n */\nclass VirtualElementPass extends VirtualElement {\n /**\n * DEPRECATED - use VirtualElement with a defined renderer param instead\n *\n * Construct a new virtual element pass thru node.\n *\n * @param tag - the tag of the parent element of this node. Once the parent\n * element is rendered, it will be passed as an argument to\n * renderer.render\n *\n * @param attrs - attributes that will assigned to the\n * parent element\n *\n * @param renderer - an object with render and unrender\n * functions, each of which should take a single argument of type\n * HTMLElement and return nothing. If null, the parent element\n * will be rendered barren without any children.\n */\n constructor(tag, attrs, renderer) {\n super(tag, attrs, [], renderer || undefined);\n }\n}\nfunction h(tag) {\n let attrs = {};\n let renderer;\n let children = [];\n for (let i = 1, n = arguments.length; i < n; ++i) {\n // eslint-disable-next-line prefer-rest-params\n let arg = arguments[i];\n if (typeof arg === 'string') {\n children.push(new VirtualText(arg));\n }\n else if (arg instanceof VirtualText) {\n children.push(arg);\n }\n else if (arg instanceof VirtualElement) {\n children.push(arg);\n }\n else if (arg instanceof Array) {\n extend(children, arg);\n }\n else if ((i === 1 || i === 2) && arg && typeof arg === 'object') {\n if ('render' in arg) {\n renderer = arg;\n }\n else {\n attrs = arg;\n }\n }\n }\n return new VirtualElement(tag, attrs, children, renderer);\n function extend(array, values) {\n for (let child of values) {\n if (typeof child === 'string') {\n array.push(new VirtualText(child));\n }\n else if (child instanceof VirtualText) {\n array.push(child);\n }\n else if (child instanceof VirtualElement) {\n array.push(child);\n }\n }\n }\n}\n/**\n * The namespace for the `h` function statics.\n */\n(function (h) {\n h.a = h.bind(undefined, 'a');\n h.abbr = h.bind(undefined, 'abbr');\n h.address = h.bind(undefined, 'address');\n h.area = h.bind(undefined, 'area');\n h.article = h.bind(undefined, 'article');\n h.aside = h.bind(undefined, 'aside');\n h.audio = h.bind(undefined, 'audio');\n h.b = h.bind(undefined, 'b');\n h.bdi = h.bind(undefined, 'bdi');\n h.bdo = h.bind(undefined, 'bdo');\n h.blockquote = h.bind(undefined, 'blockquote');\n h.br = h.bind(undefined, 'br');\n h.button = h.bind(undefined, 'button');\n h.canvas = h.bind(undefined, 'canvas');\n h.caption = h.bind(undefined, 'caption');\n h.cite = h.bind(undefined, 'cite');\n h.code = h.bind(undefined, 'code');\n h.col = h.bind(undefined, 'col');\n h.colgroup = h.bind(undefined, 'colgroup');\n h.data = h.bind(undefined, 'data');\n h.datalist = h.bind(undefined, 'datalist');\n h.dd = h.bind(undefined, 'dd');\n h.del = h.bind(undefined, 'del');\n h.dfn = h.bind(undefined, 'dfn');\n h.div = h.bind(undefined, 'div');\n h.dl = h.bind(undefined, 'dl');\n h.dt = h.bind(undefined, 'dt');\n h.em = h.bind(undefined, 'em');\n h.embed = h.bind(undefined, 'embed');\n h.fieldset = h.bind(undefined, 'fieldset');\n h.figcaption = h.bind(undefined, 'figcaption');\n h.figure = h.bind(undefined, 'figure');\n h.footer = h.bind(undefined, 'footer');\n h.form = h.bind(undefined, 'form');\n h.h1 = h.bind(undefined, 'h1');\n h.h2 = h.bind(undefined, 'h2');\n h.h3 = h.bind(undefined, 'h3');\n h.h4 = h.bind(undefined, 'h4');\n h.h5 = h.bind(undefined, 'h5');\n h.h6 = h.bind(undefined, 'h6');\n h.header = h.bind(undefined, 'header');\n h.hr = h.bind(undefined, 'hr');\n h.i = h.bind(undefined, 'i');\n h.iframe = h.bind(undefined, 'iframe');\n h.img = h.bind(undefined, 'img');\n h.input = h.bind(undefined, 'input');\n h.ins = h.bind(undefined, 'ins');\n h.kbd = h.bind(undefined, 'kbd');\n h.label = h.bind(undefined, 'label');\n h.legend = h.bind(undefined, 'legend');\n h.li = h.bind(undefined, 'li');\n h.main = h.bind(undefined, 'main');\n h.map = h.bind(undefined, 'map');\n h.mark = h.bind(undefined, 'mark');\n h.meter = h.bind(undefined, 'meter');\n h.nav = h.bind(undefined, 'nav');\n h.noscript = h.bind(undefined, 'noscript');\n h.object = h.bind(undefined, 'object');\n h.ol = h.bind(undefined, 'ol');\n h.optgroup = h.bind(undefined, 'optgroup');\n h.option = h.bind(undefined, 'option');\n h.output = h.bind(undefined, 'output');\n h.p = h.bind(undefined, 'p');\n h.param = h.bind(undefined, 'param');\n h.pre = h.bind(undefined, 'pre');\n h.progress = h.bind(undefined, 'progress');\n h.q = h.bind(undefined, 'q');\n h.rp = h.bind(undefined, 'rp');\n h.rt = h.bind(undefined, 'rt');\n h.ruby = h.bind(undefined, 'ruby');\n h.s = h.bind(undefined, 's');\n h.samp = h.bind(undefined, 'samp');\n h.section = h.bind(undefined, 'section');\n h.select = h.bind(undefined, 'select');\n h.small = h.bind(undefined, 'small');\n h.source = h.bind(undefined, 'source');\n h.span = h.bind(undefined, 'span');\n h.strong = h.bind(undefined, 'strong');\n h.sub = h.bind(undefined, 'sub');\n h.summary = h.bind(undefined, 'summary');\n h.sup = h.bind(undefined, 'sup');\n h.table = h.bind(undefined, 'table');\n h.tbody = h.bind(undefined, 'tbody');\n h.td = h.bind(undefined, 'td');\n h.textarea = h.bind(undefined, 'textarea');\n h.tfoot = h.bind(undefined, 'tfoot');\n h.th = h.bind(undefined, 'th');\n h.thead = h.bind(undefined, 'thead');\n h.time = h.bind(undefined, 'time');\n h.title = h.bind(undefined, 'title');\n h.tr = h.bind(undefined, 'tr');\n h.track = h.bind(undefined, 'track');\n h.u = h.bind(undefined, 'u');\n h.ul = h.bind(undefined, 'ul');\n h.var_ = h.bind(undefined, 'var');\n h.video = h.bind(undefined, 'video');\n h.wbr = h.bind(undefined, 'wbr');\n})(h || (h = {}));\nfunction hpass(tag) {\n let attrs = {};\n let renderer = null;\n if (arguments.length === 2) {\n // eslint-disable-next-line prefer-rest-params\n const arg = arguments[1];\n if ('render' in arg) {\n renderer = arg;\n }\n else {\n attrs = arg;\n }\n }\n else if (arguments.length === 3) {\n // eslint-disable-next-line prefer-rest-params\n attrs = arguments[1];\n // eslint-disable-next-line prefer-rest-params\n renderer = arguments[2];\n }\n else if (arguments.length > 3) {\n throw new Error('hpass() should be called with 1, 2, or 3 arguments');\n }\n return new VirtualElementPass(tag, attrs, renderer);\n}\n/**\n * The namespace for the virtual DOM rendering functions.\n */\nvar VirtualDOM;\n(function (VirtualDOM) {\n function realize(node) {\n return Private.createDOMNode(node);\n }\n VirtualDOM.realize = realize;\n /**\n * Render virtual DOM content into a host element.\n *\n * @param content - The virtual DOM content to render.\n *\n * @param host - The host element for the rendered content.\n *\n * #### Notes\n * This renders the delta from the previous rendering. It assumes that\n * the content of the host element is not manipulated by external code.\n *\n * Providing `null` content will clear the rendering.\n *\n * Externally modifying the provided content or the host element will\n * result in undefined rendering behavior.\n */\n function render(content, host) {\n let oldContent = Private.hostMap.get(host) || [];\n let newContent = Private.asContentArray(content);\n Private.hostMap.set(host, newContent);\n Private.updateContent(host, oldContent, newContent);\n }\n VirtualDOM.render = render;\n})(VirtualDOM || (VirtualDOM = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of host element to virtual DOM content.\n */\n Private.hostMap = new WeakMap();\n /**\n * Cast a content value to a content array.\n */\n function asContentArray(value) {\n if (!value) {\n return [];\n }\n if (value instanceof Array) {\n return value;\n }\n return [value];\n }\n Private.asContentArray = asContentArray;\n function createDOMNode(node) {\n // eslint-disable-next-line prefer-rest-params\n let host = arguments[1] || null;\n // eslint-disable-next-line prefer-rest-params\n const before = arguments[2] || null;\n if (host) {\n host.insertBefore(createDOMNode(node), before);\n }\n else {\n // Create a text node for a virtual text node.\n if (node.type === 'text') {\n return document.createTextNode(node.content);\n }\n // Create the HTML element with the specified tag.\n host = document.createElement(node.tag);\n // Add the attributes for the new element.\n addAttrs(host, node.attrs);\n if (node.renderer) {\n node.renderer.render(host, {\n attrs: node.attrs,\n children: node.children\n });\n return host;\n }\n // Recursively populate the element with child content.\n for (let i = 0, n = node.children.length; i < n; ++i) {\n createDOMNode(node.children[i], host);\n }\n }\n return host;\n }\n Private.createDOMNode = createDOMNode;\n /**\n * Update a host element with the delta of the virtual content.\n *\n * This is the core \"diff\" algorithm. There is no explicit \"patch\"\n * phase. The host is patched at each step as the diff progresses.\n */\n function updateContent(host, oldContent, newContent) {\n // Bail early if the content is identical.\n if (oldContent === newContent) {\n return;\n }\n // Collect the old keyed elems into a mapping.\n let oldKeyed = collectKeys(host, oldContent);\n // Create a copy of the old content which can be modified in-place.\n let oldCopy = oldContent.slice();\n // Update the host with the new content. The diff always proceeds\n // forward and never modifies a previously visited index. The old\n // copy array is modified in-place to reflect the changes made to\n // the host children. This causes the stale nodes to be pushed to\n // the end of the host node and removed at the end of the loop.\n let currElem = host.firstChild;\n let newCount = newContent.length;\n for (let i = 0; i < newCount; ++i) {\n // If the old content is exhausted, create a new node.\n if (i >= oldCopy.length) {\n createDOMNode(newContent[i], host);\n continue;\n }\n // Lookup the old and new virtual nodes.\n let oldVNode = oldCopy[i];\n let newVNode = newContent[i];\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // Handle the simplest case of in-place text update first.\n if (oldVNode.type === 'text' && newVNode.type === 'text') {\n // Avoid spurious updates for performance.\n if (currElem.textContent !== newVNode.content) {\n currElem.textContent = newVNode.content;\n }\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old or new node is a text node, the other node is now\n // known to be an element node, so create and insert a new node.\n if (oldVNode.type === 'text' || newVNode.type === 'text') {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // If the old XOR new node has a custom renderer,\n // create and insert a new node.\n if (!oldVNode.renderer != !newVNode.renderer) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // At this point, both nodes are known to be element nodes.\n // If the new elem is keyed, move an old keyed elem to the proper\n // location before proceeding with the diff. The search can start\n // at the current index, since the unmatched old keyed elems are\n // pushed forward in the old copy array.\n let newKey = newVNode.attrs.key;\n if (newKey && newKey in oldKeyed) {\n let pair = oldKeyed[newKey];\n if (pair.vNode !== oldVNode) {\n ArrayExt.move(oldCopy, oldCopy.indexOf(pair.vNode, i + 1), i);\n host.insertBefore(pair.element, currElem);\n oldVNode = pair.vNode;\n currElem = pair.element;\n }\n }\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old elem is keyed and does not match the new elem key,\n // create a new node. This is necessary since the old keyed elem\n // may be matched at a later point in the diff.\n let oldKey = oldVNode.attrs.key;\n if (oldKey && oldKey !== newKey) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // If the tags are different, create a new node.\n if (oldVNode.tag !== newVNode.tag) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // At this point, the element can be updated in-place.\n // Update the element attributes.\n updateAttrs(currElem, oldVNode.attrs, newVNode.attrs);\n // Update the element content.\n if (newVNode.renderer) {\n newVNode.renderer.render(currElem, {\n attrs: newVNode.attrs,\n children: newVNode.children\n });\n }\n else {\n updateContent(currElem, oldVNode.children, newVNode.children);\n }\n // Step to the next sibling element.\n currElem = currElem.nextSibling;\n }\n // Cleanup stale DOM\n removeContent(host, oldCopy, newCount, true);\n }\n Private.updateContent = updateContent;\n /**\n * Handle cleanup of stale vdom and its associated DOM. The host node is\n * traversed recursively (in depth-first order), and any explicit cleanup\n * required by a child node is carried out when it is visited (eg if a node\n * has a custom renderer, the renderer.unrender function will be called).\n * Once the subtree beneath each child of host has been completely visited,\n * that child will be removed via a call to host.removeChild.\n */\n function removeContent(host, oldContent, newCount, _sentinel) {\n // Dispose of the old nodes pushed to the end of the host.\n for (let i = oldContent.length - 1; i >= newCount; --i) {\n const oldNode = oldContent[i];\n const child = (_sentinel ? host.lastChild : host.childNodes[i]);\n // recursively clean up host children\n if (oldNode.type === 'text') ;\n else if (oldNode.renderer && oldNode.renderer.unrender) {\n oldNode.renderer.unrender(child, {\n attrs: oldNode.attrs,\n children: oldNode.children\n });\n }\n else {\n removeContent(child, oldNode.children, 0, false);\n }\n if (_sentinel) {\n host.removeChild(child);\n }\n }\n }\n /**\n * A set of special-cased attribute names.\n */\n const specialAttrs = {\n key: true,\n className: true,\n htmlFor: true,\n dataset: true,\n style: true\n };\n /**\n * Add element attributes to a newly created HTML element.\n */\n function addAttrs(element, attrs) {\n // Add the inline event listeners and node attributes.\n for (let name in attrs) {\n if (name in specialAttrs) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = attrs[name];\n }\n else {\n element.setAttribute(name, attrs[name]);\n }\n }\n // Add the element `class` attribute.\n if (attrs.className !== undefined) {\n element.setAttribute('class', attrs.className);\n }\n // Add the element `for` attribute.\n if (attrs.htmlFor !== undefined) {\n element.setAttribute('for', attrs.htmlFor);\n }\n // Add the dataset values.\n if (attrs.dataset) {\n addDataset(element, attrs.dataset);\n }\n // Add the inline styles.\n if (attrs.style) {\n addStyle(element, attrs.style);\n }\n }\n /**\n * Update the element attributes of an HTML element.\n */\n function updateAttrs(element, oldAttrs, newAttrs) {\n // Do nothing if the attrs are the same object.\n if (oldAttrs === newAttrs) {\n return;\n }\n // Setup the strongly typed loop variable.\n let name;\n // Remove attributes and listeners which no longer exist.\n for (name in oldAttrs) {\n if (name in specialAttrs || name in newAttrs) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = null;\n }\n else {\n element.removeAttribute(name);\n }\n }\n // Add and update new and existing attributes and listeners.\n for (name in newAttrs) {\n if (name in specialAttrs || oldAttrs[name] === newAttrs[name]) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = newAttrs[name];\n }\n else {\n element.setAttribute(name, newAttrs[name]);\n }\n }\n // Update the element `class` attribute.\n if (oldAttrs.className !== newAttrs.className) {\n if (newAttrs.className !== undefined) {\n element.setAttribute('class', newAttrs.className);\n }\n else {\n element.removeAttribute('class');\n }\n }\n // Add the element `for` attribute.\n if (oldAttrs.htmlFor !== newAttrs.htmlFor) {\n if (newAttrs.htmlFor !== undefined) {\n element.setAttribute('for', newAttrs.htmlFor);\n }\n else {\n element.removeAttribute('for');\n }\n }\n // Update the dataset values.\n if (oldAttrs.dataset !== newAttrs.dataset) {\n updateDataset(element, oldAttrs.dataset || {}, newAttrs.dataset || {});\n }\n // Update the inline styles.\n if (oldAttrs.style !== newAttrs.style) {\n updateStyle(element, oldAttrs.style || {}, newAttrs.style || {});\n }\n }\n /**\n * Add dataset values to a newly created HTML element.\n */\n function addDataset(element, dataset) {\n for (let name in dataset) {\n element.setAttribute(`data-${name}`, dataset[name]);\n }\n }\n /**\n * Update the dataset values of an HTML element.\n */\n function updateDataset(element, oldDataset, newDataset) {\n for (let name in oldDataset) {\n if (!(name in newDataset)) {\n element.removeAttribute(`data-${name}`);\n }\n }\n for (let name in newDataset) {\n if (oldDataset[name] !== newDataset[name]) {\n element.setAttribute(`data-${name}`, newDataset[name]);\n }\n }\n }\n /**\n * Add inline style values to a newly created HTML element.\n */\n function addStyle(element, style) {\n let elemStyle = element.style;\n let name;\n for (name in style) {\n elemStyle[name] = style[name];\n }\n }\n /**\n * Update the inline style values of an HTML element.\n */\n function updateStyle(element, oldStyle, newStyle) {\n let elemStyle = element.style;\n let name;\n for (name in oldStyle) {\n if (!(name in newStyle)) {\n elemStyle[name] = '';\n }\n }\n for (name in newStyle) {\n if (oldStyle[name] !== newStyle[name]) {\n elemStyle[name] = newStyle[name];\n }\n }\n }\n /**\n * Collect a mapping of keyed elements for the host content.\n */\n function collectKeys(host, content) {\n let node = host.firstChild;\n let keyMap = Object.create(null);\n for (let vNode of content) {\n if (vNode.type === 'element' && vNode.attrs.key) {\n keyMap[vNode.attrs.key] = { vNode, element: node };\n }\n node = node.nextSibling;\n }\n return keyMap;\n }\n})(Private || (Private = {}));\n\nexport { VirtualDOM, VirtualElement, VirtualElementPass, VirtualText, h, hpass };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt, StringExt, empty, find, max } from '@lumino/algorithm';\nimport { UUID, JSONExt, MimeData } from '@lumino/coreutils';\nimport { ElementExt, Selector, Platform } from '@lumino/domutils';\nimport { Message, ConflatableMessage, MessageLoop } from '@lumino/messaging';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Signal } from '@lumino/signaling';\nimport { Drag } from '@lumino/dragdrop';\nimport { CommandRegistry } from '@lumino/commands';\nimport { VirtualDOM, h } from '@lumino/virtualdom';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { getKeyboardLayout } from '@lumino/keyboard';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A sizer object for use with the box engine layout functions.\n *\n * #### Notes\n * A box sizer holds the geometry information for an object along an\n * arbitrary layout orientation.\n *\n * For best performance, this class should be treated as a raw data\n * struct. It should not typically be subclassed.\n */\nclass BoxSizer {\n constructor() {\n /**\n * The preferred size for the sizer.\n *\n * #### Notes\n * The sizer will be given this initial size subject to its size\n * bounds. The sizer will not deviate from this size unless such\n * deviation is required to fit into the available layout space.\n *\n * There is no limit to this value, but it will be clamped to the\n * bounds defined by {@link minSize} and {@link maxSize}.\n *\n * The default value is `0`.\n */\n this.sizeHint = 0;\n /**\n * The minimum size of the sizer.\n *\n * #### Notes\n * The sizer will never be sized less than this value, even if\n * it means the sizer will overflow the available layout space.\n *\n * It is assumed that this value lies in the range `[0, Infinity)`\n * and that it is `<=` to {@link maxSize}. Failure to adhere to this\n * constraint will yield undefined results.\n *\n * The default value is `0`.\n */\n this.minSize = 0;\n /**\n * The maximum size of the sizer.\n *\n * #### Notes\n * The sizer will never be sized greater than this value, even if\n * it means the sizer will underflow the available layout space.\n *\n * It is assumed that this value lies in the range `[0, Infinity]`\n * and that it is `>=` to {@link minSize}. Failure to adhere to this\n * constraint will yield undefined results.\n *\n * The default value is `Infinity`.\n */\n this.maxSize = Infinity;\n /**\n * The stretch factor for the sizer.\n *\n * #### Notes\n * This controls how much the sizer stretches relative to its sibling\n * sizers when layout space is distributed. A stretch factor of zero\n * is special and will cause the sizer to only be resized after all\n * other sizers with a stretch factor greater than zero have been\n * resized to their limits.\n *\n * It is assumed that this value is an integer that lies in the range\n * `[0, Infinity)`. Failure to adhere to this constraint will yield\n * undefined results.\n *\n * The default value is `1`.\n */\n this.stretch = 1;\n /**\n * The computed size of the sizer.\n *\n * #### Notes\n * This value is the output of a call to {@link BoxEngine.calc}. It represents\n * the computed size for the object along the layout orientation,\n * and will always lie in the range `[minSize, maxSize]`.\n *\n * This value is output only.\n *\n * Changing this value will have no effect.\n */\n this.size = 0;\n /**\n * An internal storage property for the layout algorithm.\n *\n * #### Notes\n * This value is used as temporary storage by the layout algorithm.\n *\n * Changing this value will have no effect.\n */\n this.done = false;\n }\n}\n/**\n * The namespace for the box engine layout functions.\n */\nvar BoxEngine;\n(function (BoxEngine) {\n /**\n * Calculate the optimal layout sizes for a sequence of box sizers.\n *\n * This distributes the available layout space among the box sizers\n * according to the following algorithm:\n *\n * 1. Initialize the sizers's size to its size hint and compute the\n * sums for each of size hint, min size, and max size.\n *\n * 2. If the total size hint equals the available space, return.\n *\n * 3. If the available space is less than the total min size, set all\n * sizers to their min size and return.\n *\n * 4. If the available space is greater than the total max size, set\n * all sizers to their max size and return.\n *\n * 5. If the layout space is less than the total size hint, distribute\n * the negative delta as follows:\n *\n * a. Shrink each sizer with a stretch factor greater than zero by\n * an amount proportional to the negative space and the sum of\n * stretch factors. If the sizer reaches its min size, remove\n * it and its stretch factor from the computation.\n *\n * b. If after adjusting all stretch sizers there remains negative\n * space, distribute the space equally among the sizers with a\n * stretch factor of zero. If a sizer reaches its min size,\n * remove it from the computation.\n *\n * 6. If the layout space is greater than the total size hint,\n * distribute the positive delta as follows:\n *\n * a. Expand each sizer with a stretch factor greater than zero by\n * an amount proportional to the postive space and the sum of\n * stretch factors. If the sizer reaches its max size, remove\n * it and its stretch factor from the computation.\n *\n * b. If after adjusting all stretch sizers there remains positive\n * space, distribute the space equally among the sizers with a\n * stretch factor of zero. If a sizer reaches its max size,\n * remove it from the computation.\n *\n * 7. return\n *\n * @param sizers - The sizers for a particular layout line.\n *\n * @param space - The available layout space for the sizers.\n *\n * @returns The delta between the provided available space and the\n * actual consumed space. This value will be zero if the sizers\n * can be adjusted to fit, negative if the available space is too\n * small, and positive if the available space is too large.\n *\n * #### Notes\n * The {@link BoxSizer.size} of each sizer is updated with the computed size.\n *\n * This function can be called at any time to recompute the layout for\n * an existing sequence of sizers. The previously computed results will\n * have no effect on the new output. It is therefore not necessary to\n * create new sizer objects on each resize event.\n */\n function calc(sizers, space) {\n // Bail early if there is nothing to do.\n let count = sizers.length;\n if (count === 0) {\n return space;\n }\n // Setup the size and stretch counters.\n let totalMin = 0;\n let totalMax = 0;\n let totalSize = 0;\n let totalStretch = 0;\n let stretchCount = 0;\n // Setup the sizers and compute the totals.\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n let min = sizer.minSize;\n let max = sizer.maxSize;\n let hint = sizer.sizeHint;\n sizer.done = false;\n sizer.size = Math.max(min, Math.min(hint, max));\n totalSize += sizer.size;\n totalMin += min;\n totalMax += max;\n if (sizer.stretch > 0) {\n totalStretch += sizer.stretch;\n stretchCount++;\n }\n }\n // If the space is equal to the total size, return early.\n if (space === totalSize) {\n return 0;\n }\n // If the space is less than the total min, minimize each sizer.\n if (space <= totalMin) {\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n sizer.size = sizer.minSize;\n }\n return space - totalMin;\n }\n // If the space is greater than the total max, maximize each sizer.\n if (space >= totalMax) {\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n sizer.size = sizer.maxSize;\n }\n return space - totalMax;\n }\n // The loops below perform sub-pixel precision sizing. A near zero\n // value is used for compares instead of zero to ensure that the\n // loop terminates when the subdivided space is reasonably small.\n let nearZero = 0.01;\n // A counter which is decremented each time a sizer is resized to\n // its limit. This ensures the loops terminate even if there is\n // space remaining to distribute.\n let notDoneCount = count;\n // Distribute negative delta space.\n if (space < totalSize) {\n // Shrink each stretchable sizer by an amount proportional to its\n // stretch factor. If a sizer reaches its min size it's marked as\n // done. The loop progresses in phases where each sizer is given\n // a chance to consume its fair share for the pass, regardless of\n // whether a sizer before it reached its limit. This continues\n // until the stretchable sizers or the free space is exhausted.\n let freeSpace = totalSize - space;\n while (stretchCount > 0 && freeSpace > nearZero) {\n let distSpace = freeSpace;\n let distStretch = totalStretch;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done || sizer.stretch === 0) {\n continue;\n }\n let amt = (sizer.stretch * distSpace) / distStretch;\n if (sizer.size - amt <= sizer.minSize) {\n freeSpace -= sizer.size - sizer.minSize;\n totalStretch -= sizer.stretch;\n sizer.size = sizer.minSize;\n sizer.done = true;\n notDoneCount--;\n stretchCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size -= amt;\n }\n }\n }\n // Distribute any remaining space evenly among the non-stretchable\n // sizers. This progresses in phases in the same manner as above.\n while (notDoneCount > 0 && freeSpace > nearZero) {\n let amt = freeSpace / notDoneCount;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done) {\n continue;\n }\n if (sizer.size - amt <= sizer.minSize) {\n freeSpace -= sizer.size - sizer.minSize;\n sizer.size = sizer.minSize;\n sizer.done = true;\n notDoneCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size -= amt;\n }\n }\n }\n }\n // Distribute positive delta space.\n else {\n // Expand each stretchable sizer by an amount proportional to its\n // stretch factor. If a sizer reaches its max size it's marked as\n // done. The loop progresses in phases where each sizer is given\n // a chance to consume its fair share for the pass, regardless of\n // whether a sizer before it reached its limit. This continues\n // until the stretchable sizers or the free space is exhausted.\n let freeSpace = space - totalSize;\n while (stretchCount > 0 && freeSpace > nearZero) {\n let distSpace = freeSpace;\n let distStretch = totalStretch;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done || sizer.stretch === 0) {\n continue;\n }\n let amt = (sizer.stretch * distSpace) / distStretch;\n if (sizer.size + amt >= sizer.maxSize) {\n freeSpace -= sizer.maxSize - sizer.size;\n totalStretch -= sizer.stretch;\n sizer.size = sizer.maxSize;\n sizer.done = true;\n notDoneCount--;\n stretchCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size += amt;\n }\n }\n }\n // Distribute any remaining space evenly among the non-stretchable\n // sizers. This progresses in phases in the same manner as above.\n while (notDoneCount > 0 && freeSpace > nearZero) {\n let amt = freeSpace / notDoneCount;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done) {\n continue;\n }\n if (sizer.size + amt >= sizer.maxSize) {\n freeSpace -= sizer.maxSize - sizer.size;\n sizer.size = sizer.maxSize;\n sizer.done = true;\n notDoneCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size += amt;\n }\n }\n }\n }\n // Indicate that the consumed space equals the available space.\n return 0;\n }\n BoxEngine.calc = calc;\n /**\n * Adjust a sizer by a delta and update its neighbors accordingly.\n *\n * @param sizers - The sizers which should be adjusted.\n *\n * @param index - The index of the sizer to grow.\n *\n * @param delta - The amount to adjust the sizer, positive or negative.\n *\n * #### Notes\n * This will adjust the indicated sizer by the specified amount, along\n * with the sizes of the appropriate neighbors, subject to the limits\n * specified by each of the sizers.\n *\n * This is useful when implementing box layouts where the boundaries\n * between the sizers are interactively adjustable by the user.\n */\n function adjust(sizers, index, delta) {\n // Bail early when there is nothing to do.\n if (sizers.length === 0 || delta === 0) {\n return;\n }\n // Dispatch to the proper implementation.\n if (delta > 0) {\n growSizer(sizers, index, delta);\n }\n else {\n shrinkSizer(sizers, index, -delta);\n }\n }\n BoxEngine.adjust = adjust;\n /**\n * Grow a sizer by a positive delta and adjust neighbors.\n */\n function growSizer(sizers, index, delta) {\n // Compute how much the items to the left can expand.\n let growLimit = 0;\n for (let i = 0; i <= index; ++i) {\n let sizer = sizers[i];\n growLimit += sizer.maxSize - sizer.size;\n }\n // Compute how much the items to the right can shrink.\n let shrinkLimit = 0;\n for (let i = index + 1, n = sizers.length; i < n; ++i) {\n let sizer = sizers[i];\n shrinkLimit += sizer.size - sizer.minSize;\n }\n // Clamp the delta adjustment to the limits.\n delta = Math.min(delta, growLimit, shrinkLimit);\n // Grow the sizers to the left by the delta.\n let grow = delta;\n for (let i = index; i >= 0 && grow > 0; --i) {\n let sizer = sizers[i];\n let limit = sizer.maxSize - sizer.size;\n if (limit >= grow) {\n sizer.sizeHint = sizer.size + grow;\n grow = 0;\n }\n else {\n sizer.sizeHint = sizer.size + limit;\n grow -= limit;\n }\n }\n // Shrink the sizers to the right by the delta.\n let shrink = delta;\n for (let i = index + 1, n = sizers.length; i < n && shrink > 0; ++i) {\n let sizer = sizers[i];\n let limit = sizer.size - sizer.minSize;\n if (limit >= shrink) {\n sizer.sizeHint = sizer.size - shrink;\n shrink = 0;\n }\n else {\n sizer.sizeHint = sizer.size - limit;\n shrink -= limit;\n }\n }\n }\n /**\n * Shrink a sizer by a positive delta and adjust neighbors.\n */\n function shrinkSizer(sizers, index, delta) {\n // Compute how much the items to the right can expand.\n let growLimit = 0;\n for (let i = index + 1, n = sizers.length; i < n; ++i) {\n let sizer = sizers[i];\n growLimit += sizer.maxSize - sizer.size;\n }\n // Compute how much the items to the left can shrink.\n let shrinkLimit = 0;\n for (let i = 0; i <= index; ++i) {\n let sizer = sizers[i];\n shrinkLimit += sizer.size - sizer.minSize;\n }\n // Clamp the delta adjustment to the limits.\n delta = Math.min(delta, growLimit, shrinkLimit);\n // Grow the sizers to the right by the delta.\n let grow = delta;\n for (let i = index + 1, n = sizers.length; i < n && grow > 0; ++i) {\n let sizer = sizers[i];\n let limit = sizer.maxSize - sizer.size;\n if (limit >= grow) {\n sizer.sizeHint = sizer.size + grow;\n grow = 0;\n }\n else {\n sizer.sizeHint = sizer.size + limit;\n grow -= limit;\n }\n }\n // Shrink the sizers to the left by the delta.\n let shrink = delta;\n for (let i = index; i >= 0 && shrink > 0; --i) {\n let sizer = sizers[i];\n let limit = sizer.size - sizer.minSize;\n if (limit >= shrink) {\n sizer.sizeHint = sizer.size - shrink;\n shrink = 0;\n }\n else {\n sizer.sizeHint = sizer.size - limit;\n shrink -= limit;\n }\n }\n }\n})(BoxEngine || (BoxEngine = {}));\n\n/**\n * An object which holds data related to an object's title.\n *\n * #### Notes\n * A title object is intended to hold the data necessary to display a\n * header for a particular object. A common example is the `TabPanel`,\n * which uses the widget title to populate the tab for a child widget.\n *\n * It is the responsibility of the owner to call the title disposal.\n */\nclass Title {\n /**\n * Construct a new title.\n *\n * @param options - The options for initializing the title.\n */\n constructor(options) {\n this._label = '';\n this._caption = '';\n this._mnemonic = -1;\n this._icon = undefined;\n this._iconClass = '';\n this._iconLabel = '';\n this._className = '';\n this._closable = false;\n this._changed = new Signal(this);\n this._isDisposed = false;\n this.owner = options.owner;\n if (options.label !== undefined) {\n this._label = options.label;\n }\n if (options.mnemonic !== undefined) {\n this._mnemonic = options.mnemonic;\n }\n if (options.icon !== undefined) {\n this._icon = options.icon;\n }\n if (options.iconClass !== undefined) {\n this._iconClass = options.iconClass;\n }\n if (options.iconLabel !== undefined) {\n this._iconLabel = options.iconLabel;\n }\n if (options.caption !== undefined) {\n this._caption = options.caption;\n }\n if (options.className !== undefined) {\n this._className = options.className;\n }\n if (options.closable !== undefined) {\n this._closable = options.closable;\n }\n this._dataset = options.dataset || {};\n }\n /**\n * A signal emitted when the state of the title changes.\n */\n get changed() {\n return this._changed;\n }\n /**\n * Get the label for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get label() {\n return this._label;\n }\n /**\n * Set the label for the title.\n */\n set label(value) {\n if (this._label === value) {\n return;\n }\n this._label = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the mnemonic index for the title.\n *\n * #### Notes\n * The default value is `-1`.\n */\n get mnemonic() {\n return this._mnemonic;\n }\n /**\n * Set the mnemonic index for the title.\n */\n set mnemonic(value) {\n if (this._mnemonic === value) {\n return;\n }\n this._mnemonic = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon renderer for the title.\n *\n * #### Notes\n * The default value is undefined.\n */\n get icon() {\n return this._icon;\n }\n /**\n * Set the icon renderer for the title.\n *\n * #### Notes\n * A renderer is an object that supplies a render and unrender function.\n */\n set icon(value) {\n if (this._icon === value) {\n return;\n }\n this._icon = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon class name for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get iconClass() {\n return this._iconClass;\n }\n /**\n * Set the icon class name for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set iconClass(value) {\n if (this._iconClass === value) {\n return;\n }\n this._iconClass = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon label for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get iconLabel() {\n return this._iconLabel;\n }\n /**\n * Set the icon label for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set iconLabel(value) {\n if (this._iconLabel === value) {\n return;\n }\n this._iconLabel = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the caption for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get caption() {\n return this._caption;\n }\n /**\n * Set the caption for the title.\n */\n set caption(value) {\n if (this._caption === value) {\n return;\n }\n this._caption = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the extra class name for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get className() {\n return this._className;\n }\n /**\n * Set the extra class name for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set className(value) {\n if (this._className === value) {\n return;\n }\n this._className = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the closable state for the title.\n *\n * #### Notes\n * The default value is `false`.\n */\n get closable() {\n return this._closable;\n }\n /**\n * Set the closable state for the title.\n *\n * #### Notes\n * This controls the presence of a close icon when applicable.\n */\n set closable(value) {\n if (this._closable === value) {\n return;\n }\n this._closable = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the dataset for the title.\n *\n * #### Notes\n * The default value is an empty dataset.\n */\n get dataset() {\n return this._dataset;\n }\n /**\n * Set the dataset for the title.\n *\n * #### Notes\n * This controls the data attributes when applicable.\n */\n set dataset(value) {\n if (this._dataset === value) {\n return;\n }\n this._dataset = value;\n this._changed.emit(undefined);\n }\n /**\n * Test whether the title has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the resources held by the title.\n *\n * #### Notes\n * It is the responsibility of the owner to call the title disposal.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n Signal.clearData(this);\n }\n}\n\n/**\n * The base class of the lumino widget hierarchy.\n *\n * #### Notes\n * This class will typically be subclassed in order to create a useful\n * widget. However, it can be used directly to host externally created\n * content.\n */\nclass Widget {\n /**\n * Construct a new widget.\n *\n * @param options - The options for initializing the widget.\n */\n constructor(options = {}) {\n this._flags = 0;\n this._layout = null;\n this._parent = null;\n this._disposed = new Signal(this);\n this._hiddenMode = Widget.HiddenMode.Display;\n this.node = Private$j.createNode(options);\n this.addClass('lm-Widget');\n }\n /**\n * Dispose of the widget and its descendant widgets.\n *\n * #### Notes\n * It is unsafe to use the widget after it has been disposed.\n *\n * All calls made to this method after the first are a no-op.\n */\n dispose() {\n // Do nothing if the widget is already disposed.\n if (this.isDisposed) {\n return;\n }\n // Set the disposed flag and emit the disposed signal.\n this.setFlag(Widget.Flag.IsDisposed);\n this._disposed.emit(undefined);\n // Remove or detach the widget if necessary.\n if (this.parent) {\n this.parent = null;\n }\n else if (this.isAttached) {\n Widget.detach(this);\n }\n // Dispose of the widget layout.\n if (this._layout) {\n this._layout.dispose();\n this._layout = null;\n }\n // Dispose the title\n this.title.dispose();\n // Clear the extra data associated with the widget.\n Signal.clearData(this);\n MessageLoop.clearData(this);\n AttachedProperty.clearData(this);\n }\n /**\n * A signal emitted when the widget is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Test whether the widget has been disposed.\n */\n get isDisposed() {\n return this.testFlag(Widget.Flag.IsDisposed);\n }\n /**\n * Test whether the widget's node is attached to the DOM.\n */\n get isAttached() {\n return this.testFlag(Widget.Flag.IsAttached);\n }\n /**\n * Test whether the widget is explicitly hidden.\n */\n get isHidden() {\n return this.testFlag(Widget.Flag.IsHidden);\n }\n /**\n * Test whether the widget is visible.\n *\n * #### Notes\n * A widget is visible when it is attached to the DOM, is not\n * explicitly hidden, and has no explicitly hidden ancestors.\n */\n get isVisible() {\n return this.testFlag(Widget.Flag.IsVisible);\n }\n /**\n * The title object for the widget.\n *\n * #### Notes\n * The title object is used by some container widgets when displaying\n * the widget alongside some title, such as a tab panel or side bar.\n *\n * Since not all widgets will use the title, it is created on demand.\n *\n * The `owner` property of the title is set to this widget.\n */\n get title() {\n return Private$j.titleProperty.get(this);\n }\n /**\n * Get the id of the widget's DOM node.\n */\n get id() {\n return this.node.id;\n }\n /**\n * Set the id of the widget's DOM node.\n */\n set id(value) {\n this.node.id = value;\n }\n /**\n * The dataset for the widget's DOM node.\n */\n get dataset() {\n return this.node.dataset;\n }\n /**\n * Get the method for hiding the widget.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n /**\n * Set the method for hiding the widget.\n */\n set hiddenMode(value) {\n if (this._hiddenMode === value) {\n return;\n }\n if (this.isHidden) {\n // Reset styles set by previous mode.\n this._toggleHidden(false);\n }\n if (value == Widget.HiddenMode.Scale) {\n this.node.style.willChange = 'transform';\n }\n else {\n this.node.style.willChange = 'auto';\n }\n this._hiddenMode = value;\n if (this.isHidden) {\n // Set styles for new mode.\n this._toggleHidden(true);\n }\n }\n /**\n * Get the parent of the widget.\n */\n get parent() {\n return this._parent;\n }\n /**\n * Set the parent of the widget.\n *\n * #### Notes\n * Children are typically added to a widget by using a layout, which\n * means user code will not normally set the parent widget directly.\n *\n * The widget will be automatically removed from its old parent.\n *\n * This is a no-op if there is no effective parent change.\n */\n set parent(value) {\n if (this._parent === value) {\n return;\n }\n if (value && this.contains(value)) {\n throw new Error('Invalid parent widget.');\n }\n if (this._parent && !this._parent.isDisposed) {\n let msg = new Widget.ChildMessage('child-removed', this);\n MessageLoop.sendMessage(this._parent, msg);\n }\n this._parent = value;\n if (this._parent && !this._parent.isDisposed) {\n let msg = new Widget.ChildMessage('child-added', this);\n MessageLoop.sendMessage(this._parent, msg);\n }\n if (!this.isDisposed) {\n MessageLoop.sendMessage(this, Widget.Msg.ParentChanged);\n }\n }\n /**\n * Get the layout for the widget.\n */\n get layout() {\n return this._layout;\n }\n /**\n * Set the layout for the widget.\n *\n * #### Notes\n * The layout is single-use only. It cannot be changed after the\n * first assignment.\n *\n * The layout is disposed automatically when the widget is disposed.\n */\n set layout(value) {\n if (this._layout === value) {\n return;\n }\n if (this.testFlag(Widget.Flag.DisallowLayout)) {\n throw new Error('Cannot set widget layout.');\n }\n if (this._layout) {\n throw new Error('Cannot change widget layout.');\n }\n if (value.parent) {\n throw new Error('Cannot change layout parent.');\n }\n this._layout = value;\n value.parent = this;\n }\n /**\n * Create an iterator over the widget's children.\n *\n * @returns A new iterator over the children of the widget.\n *\n * #### Notes\n * The widget must have a populated layout in order to have children.\n *\n * If a layout is not installed, the returned iterator will be empty.\n */\n *children() {\n if (this._layout) {\n yield* this._layout;\n }\n }\n /**\n * Test whether a widget is a descendant of this widget.\n *\n * @param widget - The descendant widget of interest.\n *\n * @returns `true` if the widget is a descendant, `false` otherwise.\n */\n contains(widget) {\n for (let value = widget; value; value = value._parent) {\n if (value === this) {\n return true;\n }\n }\n return false;\n }\n /**\n * Test whether the widget's DOM node has the given class name.\n *\n * @param name - The class name of interest.\n *\n * @returns `true` if the node has the class, `false` otherwise.\n */\n hasClass(name) {\n return this.node.classList.contains(name);\n }\n /**\n * Add a class name to the widget's DOM node.\n *\n * @param name - The class name to add to the node.\n *\n * #### Notes\n * If the class name is already added to the node, this is a no-op.\n *\n * The class name must not contain whitespace.\n */\n addClass(name) {\n this.node.classList.add(name);\n }\n /**\n * Remove a class name from the widget's DOM node.\n *\n * @param name - The class name to remove from the node.\n *\n * #### Notes\n * If the class name is not yet added to the node, this is a no-op.\n *\n * The class name must not contain whitespace.\n */\n removeClass(name) {\n this.node.classList.remove(name);\n }\n /**\n * Toggle a class name on the widget's DOM node.\n *\n * @param name - The class name to toggle on the node.\n *\n * @param force - Whether to force add the class (`true`) or force\n * remove the class (`false`). If not provided, the presence of\n * the class will be toggled from its current state.\n *\n * @returns `true` if the class is now present, `false` otherwise.\n *\n * #### Notes\n * The class name must not contain whitespace.\n */\n toggleClass(name, force) {\n if (force === true) {\n this.node.classList.add(name);\n return true;\n }\n if (force === false) {\n this.node.classList.remove(name);\n return false;\n }\n return this.node.classList.toggle(name);\n }\n /**\n * Post an `'update-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n update() {\n MessageLoop.postMessage(this, Widget.Msg.UpdateRequest);\n }\n /**\n * Post a `'fit-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n fit() {\n MessageLoop.postMessage(this, Widget.Msg.FitRequest);\n }\n /**\n * Post an `'activate-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n activate() {\n MessageLoop.postMessage(this, Widget.Msg.ActivateRequest);\n }\n /**\n * Send a `'close-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for sending the message.\n */\n close() {\n MessageLoop.sendMessage(this, Widget.Msg.CloseRequest);\n }\n /**\n * Show the widget and make it visible to its parent widget.\n *\n * #### Notes\n * This causes the {@link isHidden} property to be `false`.\n *\n * If the widget is not explicitly hidden, this is a no-op.\n */\n show() {\n if (!this.testFlag(Widget.Flag.IsHidden)) {\n return;\n }\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.BeforeShow);\n }\n this.clearFlag(Widget.Flag.IsHidden);\n this._toggleHidden(false);\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.AfterShow);\n }\n if (this.parent) {\n let msg = new Widget.ChildMessage('child-shown', this);\n MessageLoop.sendMessage(this.parent, msg);\n }\n }\n /**\n * Hide the widget and make it hidden to its parent widget.\n *\n * #### Notes\n * This causes the {@link isHidden} property to be `true`.\n *\n * If the widget is explicitly hidden, this is a no-op.\n */\n hide() {\n if (this.testFlag(Widget.Flag.IsHidden)) {\n return;\n }\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.BeforeHide);\n }\n this.setFlag(Widget.Flag.IsHidden);\n this._toggleHidden(true);\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.AfterHide);\n }\n if (this.parent) {\n let msg = new Widget.ChildMessage('child-hidden', this);\n MessageLoop.sendMessage(this.parent, msg);\n }\n }\n /**\n * Show or hide the widget according to a boolean value.\n *\n * @param hidden - `true` to hide the widget, or `false` to show it.\n *\n * #### Notes\n * This is a convenience method for `hide()` and `show()`.\n */\n setHidden(hidden) {\n if (hidden) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n /**\n * Test whether the given widget flag is set.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n testFlag(flag) {\n return (this._flags & flag) !== 0;\n }\n /**\n * Set the given widget flag.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n setFlag(flag) {\n this._flags |= flag;\n }\n /**\n * Clear the given widget flag.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n clearFlag(flag) {\n this._flags &= ~flag;\n }\n /**\n * Process a message sent to the widget.\n *\n * @param msg - The message sent to the widget.\n *\n * #### Notes\n * Subclasses may reimplement this method as needed.\n */\n processMessage(msg) {\n switch (msg.type) {\n case 'resize':\n this.notifyLayout(msg);\n this.onResize(msg);\n break;\n case 'update-request':\n this.notifyLayout(msg);\n this.onUpdateRequest(msg);\n break;\n case 'fit-request':\n this.notifyLayout(msg);\n this.onFitRequest(msg);\n break;\n case 'before-show':\n this.notifyLayout(msg);\n this.onBeforeShow(msg);\n break;\n case 'after-show':\n this.setFlag(Widget.Flag.IsVisible);\n this.notifyLayout(msg);\n this.onAfterShow(msg);\n break;\n case 'before-hide':\n this.notifyLayout(msg);\n this.onBeforeHide(msg);\n break;\n case 'after-hide':\n this.clearFlag(Widget.Flag.IsVisible);\n this.notifyLayout(msg);\n this.onAfterHide(msg);\n break;\n case 'before-attach':\n this.notifyLayout(msg);\n this.onBeforeAttach(msg);\n break;\n case 'after-attach':\n if (!this.isHidden && (!this.parent || this.parent.isVisible)) {\n this.setFlag(Widget.Flag.IsVisible);\n }\n this.setFlag(Widget.Flag.IsAttached);\n this.notifyLayout(msg);\n this.onAfterAttach(msg);\n break;\n case 'before-detach':\n this.notifyLayout(msg);\n this.onBeforeDetach(msg);\n break;\n case 'after-detach':\n this.clearFlag(Widget.Flag.IsVisible);\n this.clearFlag(Widget.Flag.IsAttached);\n this.notifyLayout(msg);\n this.onAfterDetach(msg);\n break;\n case 'activate-request':\n this.notifyLayout(msg);\n this.onActivateRequest(msg);\n break;\n case 'close-request':\n this.notifyLayout(msg);\n this.onCloseRequest(msg);\n break;\n case 'child-added':\n this.notifyLayout(msg);\n this.onChildAdded(msg);\n break;\n case 'child-removed':\n this.notifyLayout(msg);\n this.onChildRemoved(msg);\n break;\n default:\n this.notifyLayout(msg);\n break;\n }\n }\n /**\n * Invoke the message processing routine of the widget's layout.\n *\n * @param msg - The message to dispatch to the layout.\n *\n * #### Notes\n * This is a no-op if the widget does not have a layout.\n *\n * This will not typically be called directly by user code.\n */\n notifyLayout(msg) {\n if (this._layout) {\n this._layout.processParentMessage(msg);\n }\n }\n /**\n * A message handler invoked on a `'close-request'` message.\n *\n * #### Notes\n * The default implementation unparents or detaches the widget.\n */\n onCloseRequest(msg) {\n if (this.parent) {\n this.parent = null;\n }\n else if (this.isAttached) {\n Widget.detach(this);\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onResize(msg) { }\n /**\n * A message handler invoked on an `'update-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onUpdateRequest(msg) { }\n /**\n * A message handler invoked on a `'fit-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onFitRequest(msg) { }\n /**\n * A message handler invoked on an `'activate-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onActivateRequest(msg) { }\n /**\n * A message handler invoked on a `'before-show'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeShow(msg) { }\n /**\n * A message handler invoked on an `'after-show'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterShow(msg) { }\n /**\n * A message handler invoked on a `'before-hide'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeHide(msg) { }\n /**\n * A message handler invoked on an `'after-hide'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterHide(msg) { }\n /**\n * A message handler invoked on a `'before-attach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeAttach(msg) { }\n /**\n * A message handler invoked on an `'after-attach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterAttach(msg) { }\n /**\n * A message handler invoked on a `'before-detach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeDetach(msg) { }\n /**\n * A message handler invoked on an `'after-detach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterDetach(msg) { }\n /**\n * A message handler invoked on a `'child-added'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildAdded(msg) { }\n /**\n * A message handler invoked on a `'child-removed'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildRemoved(msg) { }\n _toggleHidden(hidden) {\n if (hidden) {\n switch (this._hiddenMode) {\n case Widget.HiddenMode.Display:\n this.addClass('lm-mod-hidden');\n break;\n case Widget.HiddenMode.Scale:\n this.node.style.transform = 'scale(0)';\n this.node.setAttribute('aria-hidden', 'true');\n break;\n case Widget.HiddenMode.ContentVisibility:\n // @ts-expect-error content-visibility unknown by DOM lib types\n this.node.style.contentVisibility = 'hidden';\n this.node.style.zIndex = '-1';\n break;\n }\n }\n else {\n switch (this._hiddenMode) {\n case Widget.HiddenMode.Display:\n this.removeClass('lm-mod-hidden');\n break;\n case Widget.HiddenMode.Scale:\n this.node.style.transform = '';\n this.node.removeAttribute('aria-hidden');\n break;\n case Widget.HiddenMode.ContentVisibility:\n // @ts-expect-error content-visibility unknown by DOM lib types\n this.node.style.contentVisibility = '';\n this.node.style.zIndex = '';\n break;\n }\n }\n }\n}\n/**\n * The namespace for the `Widget` class statics.\n */\n(function (Widget) {\n (function (HiddenMode) {\n /**\n * Set a `lm-mod-hidden` CSS class to hide the widget using `display:none`\n * CSS from the standard Lumino CSS.\n */\n HiddenMode[HiddenMode[\"Display\"] = 0] = \"Display\";\n /**\n * Hide the widget by setting the `transform` to `'scale(0)'`.\n */\n HiddenMode[HiddenMode[\"Scale\"] = 1] = \"Scale\";\n /**\n *Hide the widget by setting the `content-visibility` to `'hidden'`.\n */\n HiddenMode[HiddenMode[\"ContentVisibility\"] = 2] = \"ContentVisibility\";\n })(Widget.HiddenMode || (Widget.HiddenMode = {}));\n (function (Flag) {\n /**\n * The widget has been disposed.\n */\n Flag[Flag[\"IsDisposed\"] = 1] = \"IsDisposed\";\n /**\n * The widget is attached to the DOM.\n */\n Flag[Flag[\"IsAttached\"] = 2] = \"IsAttached\";\n /**\n * The widget is hidden.\n */\n Flag[Flag[\"IsHidden\"] = 4] = \"IsHidden\";\n /**\n * The widget is visible.\n */\n Flag[Flag[\"IsVisible\"] = 8] = \"IsVisible\";\n /**\n * A layout cannot be set on the widget.\n */\n Flag[Flag[\"DisallowLayout\"] = 16] = \"DisallowLayout\";\n })(Widget.Flag || (Widget.Flag = {}));\n (function (Msg) {\n /**\n * A singleton `'before-show'` message.\n *\n * #### Notes\n * This message is sent to a widget before it becomes visible.\n *\n * This message is **not** sent when the widget is being attached.\n */\n Msg.BeforeShow = new Message('before-show');\n /**\n * A singleton `'after-show'` message.\n *\n * #### Notes\n * This message is sent to a widget after it becomes visible.\n *\n * This message is **not** sent when the widget is being attached.\n */\n Msg.AfterShow = new Message('after-show');\n /**\n * A singleton `'before-hide'` message.\n *\n * #### Notes\n * This message is sent to a widget before it becomes not-visible.\n *\n * This message is **not** sent when the widget is being detached.\n */\n Msg.BeforeHide = new Message('before-hide');\n /**\n * A singleton `'after-hide'` message.\n *\n * #### Notes\n * This message is sent to a widget after it becomes not-visible.\n *\n * This message is **not** sent when the widget is being detached.\n */\n Msg.AfterHide = new Message('after-hide');\n /**\n * A singleton `'before-attach'` message.\n *\n * #### Notes\n * This message is sent to a widget before it is attached.\n */\n Msg.BeforeAttach = new Message('before-attach');\n /**\n * A singleton `'after-attach'` message.\n *\n * #### Notes\n * This message is sent to a widget after it is attached.\n */\n Msg.AfterAttach = new Message('after-attach');\n /**\n * A singleton `'before-detach'` message.\n *\n * #### Notes\n * This message is sent to a widget before it is detached.\n */\n Msg.BeforeDetach = new Message('before-detach');\n /**\n * A singleton `'after-detach'` message.\n *\n * #### Notes\n * This message is sent to a widget after it is detached.\n */\n Msg.AfterDetach = new Message('after-detach');\n /**\n * A singleton `'parent-changed'` message.\n *\n * #### Notes\n * This message is sent to a widget when its parent has changed.\n */\n Msg.ParentChanged = new Message('parent-changed');\n /**\n * A singleton conflatable `'update-request'` message.\n *\n * #### Notes\n * This message can be dispatched to supporting widgets in order to\n * update their content based on the current widget state. Not all\n * widgets will respond to messages of this type.\n *\n * For widgets with a layout, this message will inform the layout to\n * update the position and size of its child widgets.\n */\n Msg.UpdateRequest = new ConflatableMessage('update-request');\n /**\n * A singleton conflatable `'fit-request'` message.\n *\n * #### Notes\n * For widgets with a layout, this message will inform the layout to\n * recalculate its size constraints to fit the space requirements of\n * its child widgets, and to update their position and size. Not all\n * layouts will respond to messages of this type.\n */\n Msg.FitRequest = new ConflatableMessage('fit-request');\n /**\n * A singleton conflatable `'activate-request'` message.\n *\n * #### Notes\n * This message should be dispatched to a widget when it should\n * perform the actions necessary to activate the widget, which\n * may include focusing its node or descendant node.\n */\n Msg.ActivateRequest = new ConflatableMessage('activate-request');\n /**\n * A singleton conflatable `'close-request'` message.\n *\n * #### Notes\n * This message should be dispatched to a widget when it should close\n * and remove itself from the widget hierarchy.\n */\n Msg.CloseRequest = new ConflatableMessage('close-request');\n })(Widget.Msg || (Widget.Msg = {}));\n /**\n * A message class for child related messages.\n */\n class ChildMessage extends Message {\n /**\n * Construct a new child message.\n *\n * @param type - The message type.\n *\n * @param child - The child widget for the message.\n */\n constructor(type, child) {\n super(type);\n this.child = child;\n }\n }\n Widget.ChildMessage = ChildMessage;\n /**\n * A message class for `'resize'` messages.\n */\n class ResizeMessage extends Message {\n /**\n * Construct a new resize message.\n *\n * @param width - The **offset width** of the widget, or `-1` if\n * the width is not known.\n *\n * @param height - The **offset height** of the widget, or `-1` if\n * the height is not known.\n */\n constructor(width, height) {\n super('resize');\n this.width = width;\n this.height = height;\n }\n }\n Widget.ResizeMessage = ResizeMessage;\n /**\n * The namespace for the `ResizeMessage` class statics.\n */\n (function (ResizeMessage) {\n /**\n * A singleton `'resize'` message with an unknown size.\n */\n ResizeMessage.UnknownSize = new ResizeMessage(-1, -1);\n })(ResizeMessage = Widget.ResizeMessage || (Widget.ResizeMessage = {}));\n /**\n * Attach a widget to a host DOM node.\n *\n * @param widget - The widget of interest.\n *\n * @param host - The DOM node to use as the widget's host.\n *\n * @param ref - The child of `host` to use as the reference element.\n * If this is provided, the widget will be inserted before this\n * node in the host. The default is `null`, which will cause the\n * widget to be added as the last child of the host.\n *\n * #### Notes\n * This will throw an error if the widget is not a root widget, if\n * the widget is already attached, or if the host is not attached\n * to the DOM.\n */\n function attach(widget, host, ref = null) {\n if (widget.parent) {\n throw new Error('Cannot attach a child widget.');\n }\n if (widget.isAttached || widget.node.isConnected) {\n throw new Error('Widget is already attached.');\n }\n if (!host.isConnected) {\n throw new Error('Host is not attached.');\n }\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n host.insertBefore(widget.node, ref);\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n Widget.attach = attach;\n /**\n * Detach the widget from its host DOM node.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will throw an error if the widget is not a root widget,\n * or if the widget is not attached to the DOM.\n */\n function detach(widget) {\n if (widget.parent) {\n throw new Error('Cannot detach a child widget.');\n }\n if (!widget.isAttached || !widget.node.isConnected) {\n throw new Error('Widget is not attached.');\n }\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n widget.node.parentNode.removeChild(widget.node);\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n Widget.detach = detach;\n})(Widget || (Widget = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$j;\n(function (Private) {\n /**\n * An attached property for the widget title object.\n */\n Private.titleProperty = new AttachedProperty({\n name: 'title',\n create: owner => new Title({ owner })\n });\n /**\n * Create a DOM node for the given widget options.\n */\n function createNode(options) {\n return options.node || document.createElement(options.tag || 'div');\n }\n Private.createNode = createNode;\n})(Private$j || (Private$j = {}));\n\n/**\n * An abstract base class for creating lumino layouts.\n *\n * #### Notes\n * A layout is used to add widgets to a parent and to arrange those\n * widgets within the parent's DOM node.\n *\n * This class implements the base functionality which is required of\n * nearly all layouts. It must be subclassed in order to be useful.\n *\n * Notably, this class does not define a uniform interface for adding\n * widgets to the layout. A subclass should define that API in a way\n * which is meaningful for its intended use.\n */\nclass Layout {\n /**\n * Construct a new layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n this._disposed = false;\n this._parent = null;\n this._fitPolicy = options.fitPolicy || 'set-min-size';\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This should be reimplemented to clear and dispose of the widgets.\n *\n * All reimplementations should call the superclass method.\n *\n * This method is called automatically when the parent is disposed.\n */\n dispose() {\n this._parent = null;\n this._disposed = true;\n Signal.clearData(this);\n AttachedProperty.clearData(this);\n }\n /**\n * Test whether the layout is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Get the parent widget of the layout.\n */\n get parent() {\n return this._parent;\n }\n /**\n * Set the parent widget of the layout.\n *\n * #### Notes\n * This is set automatically when installing the layout on the parent\n * widget. The parent widget should not be set directly by user code.\n */\n set parent(value) {\n if (this._parent === value) {\n return;\n }\n if (this._parent) {\n throw new Error('Cannot change parent widget.');\n }\n if (value.layout !== this) {\n throw new Error('Invalid parent widget.');\n }\n this._parent = value;\n this.init();\n }\n /**\n * Get the fit policy for the layout.\n *\n * #### Notes\n * The fit policy controls the computed size constraints which are\n * applied to the parent widget by the layout.\n *\n * Some layout implementations may ignore the fit policy.\n */\n get fitPolicy() {\n return this._fitPolicy;\n }\n /**\n * Set the fit policy for the layout.\n *\n * #### Notes\n * The fit policy controls the computed size constraints which are\n * applied to the parent widget by the layout.\n *\n * Some layout implementations may ignore the fit policy.\n *\n * Changing the fit policy will clear the current size constraint\n * for the parent widget and then re-fit the parent.\n */\n set fitPolicy(value) {\n // Bail if the policy does not change\n if (this._fitPolicy === value) {\n return;\n }\n // Update the internal policy.\n this._fitPolicy = value;\n // Clear the size constraints and schedule a fit of the parent.\n if (this._parent) {\n let style = this._parent.node.style;\n style.minWidth = '';\n style.minHeight = '';\n style.maxWidth = '';\n style.maxHeight = '';\n this._parent.fit();\n }\n }\n /**\n * Process a message sent to the parent widget.\n *\n * @param msg - The message sent to the parent widget.\n *\n * #### Notes\n * This method is called by the parent widget to process a message.\n *\n * Subclasses may reimplement this method as needed.\n */\n processParentMessage(msg) {\n switch (msg.type) {\n case 'resize':\n this.onResize(msg);\n break;\n case 'update-request':\n this.onUpdateRequest(msg);\n break;\n case 'fit-request':\n this.onFitRequest(msg);\n break;\n case 'before-show':\n this.onBeforeShow(msg);\n break;\n case 'after-show':\n this.onAfterShow(msg);\n break;\n case 'before-hide':\n this.onBeforeHide(msg);\n break;\n case 'after-hide':\n this.onAfterHide(msg);\n break;\n case 'before-attach':\n this.onBeforeAttach(msg);\n break;\n case 'after-attach':\n this.onAfterAttach(msg);\n break;\n case 'before-detach':\n this.onBeforeDetach(msg);\n break;\n case 'after-detach':\n this.onAfterDetach(msg);\n break;\n case 'child-removed':\n this.onChildRemoved(msg);\n break;\n case 'child-shown':\n this.onChildShown(msg);\n break;\n case 'child-hidden':\n this.onChildHidden(msg);\n break;\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n *\n * #### Notes\n * This method is invoked immediately after the layout is installed\n * on the parent widget.\n *\n * The default implementation reparents all of the widgets to the\n * layout parent widget.\n *\n * Subclasses should reimplement this method and attach the child\n * widget nodes to the parent widget's node.\n */\n init() {\n for (const widget of this) {\n widget.parent = this.parent;\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n *\n * #### Notes\n * The layout should ensure that its widgets are resized according\n * to the specified layout space, and that they are sent a `'resize'`\n * message if appropriate.\n *\n * The default implementation of this method sends an `UnknownSize`\n * resize message to all widgets.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onResize(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n *\n * #### Notes\n * The layout should ensure that its widgets are resized according\n * to the available layout space, and that they are sent a `'resize'`\n * message if appropriate.\n *\n * The default implementation of this method sends an `UnknownSize`\n * resize message to all widgets.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onUpdateRequest(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeAttach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on an `'after-attach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterAttach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on a `'before-detach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeDetach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterDetach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeShow(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on an `'after-show'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterShow(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on a `'before-hide'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeHide(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on an `'after-hide'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterHide(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n *\n * #### Notes\n * This will remove the child widget from the layout.\n *\n * Subclasses should **not** typically reimplement this method.\n */\n onChildRemoved(msg) {\n this.removeWidget(msg.child);\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onFitRequest(msg) { }\n /**\n * A message handler invoked on a `'child-shown'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildShown(msg) { }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildHidden(msg) { }\n}\n/**\n * The namespace for the `Layout` class statics.\n */\n(function (Layout) {\n /**\n * Get the horizontal alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The horizontal alignment for the widget.\n *\n * #### Notes\n * If the layout width allocated to a widget is larger than its max\n * width, the horizontal alignment controls how the widget is placed\n * within the extra horizontal space.\n *\n * If the allocated width is less than the widget's max width, the\n * horizontal alignment has no effect.\n *\n * Some layout implementations may ignore horizontal alignment.\n */\n function getHorizontalAlignment(widget) {\n return Private$i.horizontalAlignmentProperty.get(widget);\n }\n Layout.getHorizontalAlignment = getHorizontalAlignment;\n /**\n * Set the horizontal alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the horizontal alignment.\n *\n * #### Notes\n * If the layout width allocated to a widget is larger than its max\n * width, the horizontal alignment controls how the widget is placed\n * within the extra horizontal space.\n *\n * If the allocated width is less than the widget's max width, the\n * horizontal alignment has no effect.\n *\n * Some layout implementations may ignore horizontal alignment.\n *\n * Changing the horizontal alignment will post an `update-request`\n * message to widget's parent, provided the parent has a layout\n * installed.\n */\n function setHorizontalAlignment(widget, value) {\n Private$i.horizontalAlignmentProperty.set(widget, value);\n }\n Layout.setHorizontalAlignment = setHorizontalAlignment;\n /**\n * Get the vertical alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The vertical alignment for the widget.\n *\n * #### Notes\n * If the layout height allocated to a widget is larger than its max\n * height, the vertical alignment controls how the widget is placed\n * within the extra vertical space.\n *\n * If the allocated height is less than the widget's max height, the\n * vertical alignment has no effect.\n *\n * Some layout implementations may ignore vertical alignment.\n */\n function getVerticalAlignment(widget) {\n return Private$i.verticalAlignmentProperty.get(widget);\n }\n Layout.getVerticalAlignment = getVerticalAlignment;\n /**\n * Set the vertical alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the vertical alignment.\n *\n * #### Notes\n * If the layout height allocated to a widget is larger than its max\n * height, the vertical alignment controls how the widget is placed\n * within the extra vertical space.\n *\n * If the allocated height is less than the widget's max height, the\n * vertical alignment has no effect.\n *\n * Some layout implementations may ignore vertical alignment.\n *\n * Changing the horizontal alignment will post an `update-request`\n * message to widget's parent, provided the parent has a layout\n * installed.\n */\n function setVerticalAlignment(widget, value) {\n Private$i.verticalAlignmentProperty.set(widget, value);\n }\n Layout.setVerticalAlignment = setVerticalAlignment;\n})(Layout || (Layout = {}));\n/**\n * An object which assists in the absolute layout of widgets.\n *\n * #### Notes\n * This class is useful when implementing a layout which arranges its\n * widgets using absolute positioning.\n *\n * This class is used by nearly all of the built-in lumino layouts.\n */\nclass LayoutItem {\n /**\n * Construct a new layout item.\n *\n * @param widget - The widget to be managed by the item.\n *\n * #### Notes\n * The widget will be set to absolute positioning.\n * The widget will use strict CSS containment.\n */\n constructor(widget) {\n this._top = NaN;\n this._left = NaN;\n this._width = NaN;\n this._height = NaN;\n this._minWidth = 0;\n this._minHeight = 0;\n this._maxWidth = Infinity;\n this._maxHeight = Infinity;\n this._disposed = false;\n this.widget = widget;\n this.widget.node.style.position = 'absolute';\n this.widget.node.style.contain = 'strict';\n }\n /**\n * Dispose of the the layout item.\n *\n * #### Notes\n * This will reset the positioning of the widget.\n */\n dispose() {\n // Do nothing if the item is already disposed.\n if (this._disposed) {\n return;\n }\n // Mark the item as disposed.\n this._disposed = true;\n // Reset the widget style.\n let style = this.widget.node.style;\n style.position = '';\n style.top = '';\n style.left = '';\n style.width = '';\n style.height = '';\n style.contain = '';\n }\n /**\n * The computed minimum width of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get minWidth() {\n return this._minWidth;\n }\n /**\n * The computed minimum height of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get minHeight() {\n return this._minHeight;\n }\n /**\n * The computed maximum width of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get maxWidth() {\n return this._maxWidth;\n }\n /**\n * The computed maximum height of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get maxHeight() {\n return this._maxHeight;\n }\n /**\n * Whether the layout item is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Whether the managed widget is hidden.\n */\n get isHidden() {\n return this.widget.isHidden;\n }\n /**\n * Whether the managed widget is visible.\n */\n get isVisible() {\n return this.widget.isVisible;\n }\n /**\n * Whether the managed widget is attached.\n */\n get isAttached() {\n return this.widget.isAttached;\n }\n /**\n * Update the computed size limits of the managed widget.\n */\n fit() {\n let limits = ElementExt.sizeLimits(this.widget.node);\n this._minWidth = limits.minWidth;\n this._minHeight = limits.minHeight;\n this._maxWidth = limits.maxWidth;\n this._maxHeight = limits.maxHeight;\n }\n /**\n * Update the position and size of the managed widget.\n *\n * @param left - The left edge position of the layout box.\n *\n * @param top - The top edge position of the layout box.\n *\n * @param width - The width of the layout box.\n *\n * @param height - The height of the layout box.\n */\n update(left, top, width, height) {\n // Clamp the size to the computed size limits.\n let clampW = Math.max(this._minWidth, Math.min(width, this._maxWidth));\n let clampH = Math.max(this._minHeight, Math.min(height, this._maxHeight));\n // Adjust the left edge for the horizontal alignment, if needed.\n if (clampW < width) {\n switch (Layout.getHorizontalAlignment(this.widget)) {\n case 'left':\n break;\n case 'center':\n left += (width - clampW) / 2;\n break;\n case 'right':\n left += width - clampW;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Adjust the top edge for the vertical alignment, if needed.\n if (clampH < height) {\n switch (Layout.getVerticalAlignment(this.widget)) {\n case 'top':\n break;\n case 'center':\n top += (height - clampH) / 2;\n break;\n case 'bottom':\n top += height - clampH;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Set up the resize variables.\n let resized = false;\n let style = this.widget.node.style;\n // Update the top edge of the widget if needed.\n if (this._top !== top) {\n this._top = top;\n style.top = `${top}px`;\n }\n // Update the left edge of the widget if needed.\n if (this._left !== left) {\n this._left = left;\n style.left = `${left}px`;\n }\n // Update the width of the widget if needed.\n if (this._width !== clampW) {\n resized = true;\n this._width = clampW;\n style.width = `${clampW}px`;\n }\n // Update the height of the widget if needed.\n if (this._height !== clampH) {\n resized = true;\n this._height = clampH;\n style.height = `${clampH}px`;\n }\n // Send a resize message to the widget if needed.\n if (resized) {\n let msg = new Widget.ResizeMessage(clampW, clampH);\n MessageLoop.sendMessage(this.widget, msg);\n }\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$i;\n(function (Private) {\n /**\n * The attached property for a widget horizontal alignment.\n */\n Private.horizontalAlignmentProperty = new AttachedProperty({\n name: 'horizontalAlignment',\n create: () => 'center',\n changed: onAlignmentChanged\n });\n /**\n * The attached property for a widget vertical alignment.\n */\n Private.verticalAlignmentProperty = new AttachedProperty({\n name: 'verticalAlignment',\n create: () => 'top',\n changed: onAlignmentChanged\n });\n /**\n * The change handler for the attached alignment properties.\n */\n function onAlignmentChanged(child) {\n if (child.parent && child.parent.layout) {\n child.parent.update();\n }\n }\n})(Private$i || (Private$i = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation suitable for many use cases.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * layouts, but can also be used directly with standard CSS to layout a\n * collection of widgets.\n */\nclass PanelLayout extends Layout {\n constructor() {\n super(...arguments);\n this._widgets = [];\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This will clear and dispose all widgets in the layout.\n *\n * All reimplementations should call the superclass method.\n *\n * This method is called automatically when the parent is disposed.\n */\n dispose() {\n while (this._widgets.length > 0) {\n this._widgets.pop().dispose();\n }\n super.dispose();\n }\n /**\n * A read-only array of the widgets in the layout.\n */\n get widgets() {\n return this._widgets;\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n yield* this._widgets;\n }\n /**\n * Add a widget to the end of the layout.\n *\n * @param widget - The widget to add to the layout.\n *\n * #### Notes\n * If the widget is already contained in the layout, it will be moved.\n */\n addWidget(widget) {\n this.insertWidget(this._widgets.length, widget);\n }\n /**\n * Insert a widget into the layout at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into the layout.\n *\n * #### Notes\n * The index will be clamped to the bounds of the widgets.\n *\n * If the widget is already added to the layout, it will be moved.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n insertWidget(index, widget) {\n // Remove the widget from its current parent. This is a no-op\n // if the widget's parent is already the layout parent widget.\n widget.parent = this.parent;\n // Look up the current index of the widget.\n let i = this._widgets.indexOf(widget);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._widgets.length));\n // If the widget is not in the array, insert it.\n if (i === -1) {\n // Insert the widget into the array.\n ArrayExt.insert(this._widgets, j, widget);\n // If the layout is parented, attach the widget to the DOM.\n if (this.parent) {\n this.attachWidget(j, widget);\n }\n // There is nothing more to do.\n return;\n }\n // Otherwise, the widget exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._widgets.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return;\n }\n // Move the widget to the new location.\n ArrayExt.move(this._widgets, i, j);\n // If the layout is parented, move the widget in the DOM.\n if (this.parent) {\n this.moveWidget(i, j, widget);\n }\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n this.removeWidgetAt(this._widgets.indexOf(widget));\n }\n /**\n * Remove the widget at a given index from the layout.\n *\n * @param index - The index of the widget to remove.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n removeWidgetAt(index) {\n // Remove the widget from the array.\n let widget = ArrayExt.removeAt(this._widgets, index);\n // If the layout is parented, detach the widget from the DOM.\n if (widget && this.parent) {\n this.detachWidget(index, widget);\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n let index = 0;\n for (const widget of this) {\n this.attachWidget(index++, widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation adds the widgets's node to the parent's\n * node at the proper location, and sends the appropriate attach\n * messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is added to the parent's node.\n */\n attachWidget(index, widget) {\n // Look up the next sibling reference node.\n let ref = this.parent.node.children[index];\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Insert the widget's node before the sibling.\n this.parent.node.insertBefore(widget.node, ref);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation moves the widget's node to the proper\n * location in the parent's node and sends the appropriate attach and\n * detach messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is moved in the parent's node.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` and message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Look up the next sibling reference node.\n let ref = this.parent.node.children[toIndex];\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Insert the widget's node before the sibling.\n this.parent.node.insertBefore(widget.node, ref);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation removes the widget's node from the\n * parent's node, and sends the appropriate detach messages to the\n * widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is removed from the parent's node.\n */\n detachWidget(index, widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n }\n}\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nvar Utils;\n(function (Utils) {\n /**\n * Clamp a dimension value to an integer >= 0.\n */\n function clampDimension(value) {\n return Math.max(0, Math.floor(value));\n }\n Utils.clampDimension = clampDimension;\n})(Utils || (Utils = {}));\nvar Utils$1 = Utils;\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets into resizable sections.\n */\nclass SplitLayout extends PanelLayout {\n /**\n * Construct a new split layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options) {\n super();\n this.widgetOffset = 0;\n this._fixed = 0;\n this._spacing = 4;\n this._dirty = false;\n this._hasNormedSizes = false;\n this._sizers = [];\n this._items = [];\n this._handles = [];\n this._box = null;\n this._alignment = 'start';\n this._orientation = 'horizontal';\n this.renderer = options.renderer;\n if (options.orientation !== undefined) {\n this._orientation = options.orientation;\n }\n if (options.alignment !== undefined) {\n this._alignment = options.alignment;\n }\n if (options.spacing !== undefined) {\n this._spacing = Utils.clampDimension(options.spacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._sizers.length = 0;\n this._handles.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the layout orientation for the split layout.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the layout orientation for the split layout.\n */\n set orientation(value) {\n if (this._orientation === value) {\n return;\n }\n this._orientation = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['orientation'] = value;\n this.parent.fit();\n }\n /**\n * Get the content alignment for the split layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split layout.\n */\n get alignment() {\n return this._alignment;\n }\n /**\n * Set the content alignment for the split layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split layout.\n */\n set alignment(value) {\n if (this._alignment === value) {\n return;\n }\n this._alignment = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['alignment'] = value;\n this.parent.update();\n }\n /**\n * Get the inter-element spacing for the split layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the split layout.\n */\n set spacing(value) {\n value = Utils.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * A read-only array of the split handles in the layout.\n */\n get handles() {\n return this._handles;\n }\n /**\n * Get the absolute sizes of the widgets in the layout.\n *\n * @returns A new array of the absolute sizes of the widgets.\n *\n * This method **does not** measure the DOM nodes.\n */\n absoluteSizes() {\n return this._sizers.map(sizer => sizer.size);\n }\n /**\n * Get the relative sizes of the widgets in the layout.\n *\n * @returns A new array of the relative sizes of the widgets.\n *\n * #### Notes\n * The returned sizes reflect the sizes of the widgets normalized\n * relative to their siblings.\n *\n * This method **does not** measure the DOM nodes.\n */\n relativeSizes() {\n return Private$h.normalize(this._sizers.map(sizer => sizer.size));\n }\n /**\n * Set the relative sizes for the widgets in the layout.\n *\n * @param sizes - The relative sizes for the widgets in the panel.\n * @param update - Update the layout after setting relative sizes.\n * Default is True.\n *\n * #### Notes\n * Extra values are ignored, too few will yield an undefined layout.\n *\n * The actual geometry of the DOM nodes is updated asynchronously.\n */\n setRelativeSizes(sizes, update = true) {\n // Copy the sizes and pad with zeros as needed.\n let n = this._sizers.length;\n let temp = sizes.slice(0, n);\n while (temp.length < n) {\n temp.push(0);\n }\n // Normalize the padded sizes.\n let normed = Private$h.normalize(temp);\n // Apply the normalized sizes to the sizers.\n for (let i = 0; i < n; ++i) {\n let sizer = this._sizers[i];\n sizer.sizeHint = normed[i];\n sizer.size = normed[i];\n }\n // Set the flag indicating the sizes are normalized.\n this._hasNormedSizes = true;\n // Trigger an update of the parent widget.\n if (update && this.parent) {\n this.parent.update();\n }\n }\n /**\n * Move the offset position of a split handle.\n *\n * @param index - The index of the handle of the interest.\n *\n * @param position - The desired offset position of the handle.\n *\n * #### Notes\n * The position is relative to the offset parent.\n *\n * This will move the handle as close as possible to the desired\n * position. The sibling widgets will be adjusted as necessary.\n */\n moveHandle(index, position) {\n // Bail if the index is invalid or the handle is hidden.\n let handle = this._handles[index];\n if (!handle || handle.classList.contains('lm-mod-hidden')) {\n return;\n }\n // Compute the desired delta movement for the handle.\n let delta;\n if (this._orientation === 'horizontal') {\n delta = position - handle.offsetLeft;\n }\n else {\n delta = position - handle.offsetTop;\n }\n // Bail if there is no handle movement.\n if (delta === 0) {\n return;\n }\n // Prevent widget resizing unless needed.\n for (let sizer of this._sizers) {\n if (sizer.size > 0) {\n sizer.sizeHint = sizer.size;\n }\n }\n // Adjust the sizers to reflect the handle movement.\n BoxEngine.adjust(this._sizers, index, delta);\n // Update the layout of the widgets.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n this.parent.dataset['orientation'] = this.orientation;\n this.parent.dataset['alignment'] = this.alignment;\n super.init();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Create the item, handle, and sizer for the new widget.\n let item = new LayoutItem(widget);\n let handle = Private$h.createHandle(this.renderer);\n let average = Private$h.averageSize(this._sizers);\n let sizer = Private$h.createSizer(average);\n // Insert the item, handle, and sizer into the internal arrays.\n ArrayExt.insert(this._items, index, item);\n ArrayExt.insert(this._sizers, index, sizer);\n ArrayExt.insert(this._handles, index, handle);\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget and handle nodes to the parent.\n this.parent.node.appendChild(widget.node);\n this.parent.node.appendChild(handle);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the item, sizer, and handle for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n ArrayExt.move(this._sizers, fromIndex, toIndex);\n ArrayExt.move(this._handles, fromIndex, toIndex);\n // Post a fit request to the parent to show/hide last handle.\n this.parent.fit();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the item, handle, and sizer for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n let handle = ArrayExt.removeAt(this._handles, index);\n ArrayExt.removeAt(this._sizers, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget and handle nodes from the parent.\n this.parent.node.removeChild(widget.node);\n this.parent.node.removeChild(handle);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Update the item position.\n *\n * @param i Item index\n * @param isHorizontal Whether the layout is horizontal or not\n * @param left Left position in pixels\n * @param top Top position in pixels\n * @param height Item height\n * @param width Item width\n * @param size Item size\n */\n updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n const item = this._items[i];\n if (item.isHidden) {\n return;\n }\n // Fetch the style for the handle.\n let handleStyle = this._handles[i].style;\n // Update the widget and handle, and advance the relevant edge.\n if (isHorizontal) {\n left += this.widgetOffset;\n item.update(left, top, size, height);\n left += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${this._spacing}px`;\n handleStyle.height = `${height}px`;\n }\n else {\n top += this.widgetOffset;\n item.update(left, top, width, size);\n top += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${width}px`;\n handleStyle.height = `${this._spacing}px`;\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Update the handles and track the visible widget count.\n let nVisible = 0;\n let lastHandleIndex = -1;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n if (this._items[i].isHidden) {\n this._handles[i].classList.add('lm-mod-hidden');\n }\n else {\n this._handles[i].classList.remove('lm-mod-hidden');\n lastHandleIndex = i;\n nVisible++;\n }\n }\n // Hide the handle for the last visible widget.\n if (lastHandleIndex !== -1) {\n this._handles[lastHandleIndex].classList.add('lm-mod-hidden');\n }\n // Update the fixed space for the visible items.\n this._fixed =\n this._spacing * Math.max(0, nVisible - 1) +\n this.widgetOffset * this._items.length;\n // Setup the computed minimum size.\n let horz = this._orientation === 'horizontal';\n let minW = horz ? this._fixed : 0;\n let minH = horz ? 0 : this._fixed;\n // Update the sizers and computed size limits.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item and corresponding box sizer.\n let item = this._items[i];\n let sizer = this._sizers[i];\n // Prevent resizing unless necessary.\n if (sizer.size > 0) {\n sizer.sizeHint = sizer.size;\n }\n // If the item is hidden, it should consume zero size.\n if (item.isHidden) {\n sizer.minSize = 0;\n sizer.maxSize = 0;\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the stretch factor.\n sizer.stretch = SplitLayout.getStretch(item.widget);\n // Update the sizer limits and computed min size.\n if (horz) {\n sizer.minSize = item.minWidth;\n sizer.maxSize = item.maxWidth;\n minW += item.minWidth;\n minH = Math.max(minH, item.minHeight);\n }\n else {\n sizer.minSize = item.minHeight;\n sizer.maxSize = item.maxHeight;\n minH += item.minHeight;\n minW = Math.max(minW, item.minWidth);\n }\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0 && this.widgetOffset === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Set up the variables for justification and alignment offset.\n let extra = 0;\n let offset = 0;\n let horz = this._orientation === 'horizontal';\n if (nVisible > 0) {\n // Compute the adjusted layout space.\n let space;\n if (horz) {\n // left += this.widgetOffset;\n space = Math.max(0, width - this._fixed);\n }\n else {\n // top += this.widgetOffset;\n space = Math.max(0, height - this._fixed);\n }\n // Scale the size hints if they are normalized.\n if (this._hasNormedSizes) {\n for (let sizer of this._sizers) {\n sizer.sizeHint *= space;\n }\n this._hasNormedSizes = false;\n }\n // Distribute the layout space to the box sizers.\n let delta = BoxEngine.calc(this._sizers, space);\n // Account for alignment if there is extra layout space.\n if (delta > 0) {\n switch (this._alignment) {\n case 'start':\n break;\n case 'center':\n extra = 0;\n offset = delta / 2;\n break;\n case 'end':\n extra = 0;\n offset = delta;\n break;\n case 'justify':\n extra = delta / nVisible;\n offset = 0;\n break;\n default:\n throw 'unreachable';\n }\n }\n }\n // Layout the items using the computed box sizes.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n const item = this._items[i];\n // Fetch the computed size for the widget.\n const size = item.isHidden ? 0 : this._sizers[i].size + extra;\n this.updateItemPosition(i, horz, horz ? left + offset : left, horz ? top : top + offset, height, width, size);\n const fullOffset = this.widgetOffset +\n (this._handles[i].classList.contains('lm-mod-hidden')\n ? 0\n : this._spacing);\n if (horz) {\n left += size + fullOffset;\n }\n else {\n top += size + fullOffset;\n }\n }\n }\n}\n/**\n * The namespace for the `SplitLayout` class statics.\n */\n(function (SplitLayout) {\n /**\n * Get the split layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The split layout stretch factor for the widget.\n */\n function getStretch(widget) {\n return Private$h.stretchProperty.get(widget);\n }\n SplitLayout.getStretch = getStretch;\n /**\n * Set the split layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n Private$h.stretchProperty.set(widget, value);\n }\n SplitLayout.setStretch = setStretch;\n})(SplitLayout || (SplitLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$h;\n(function (Private) {\n /**\n * The property descriptor for a widget stretch factor.\n */\n Private.stretchProperty = new AttachedProperty({\n name: 'stretch',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * Create a new box sizer with the given size hint.\n */\n function createSizer(size) {\n let sizer = new BoxSizer();\n sizer.sizeHint = Math.floor(size);\n return sizer;\n }\n Private.createSizer = createSizer;\n /**\n * Create a new split handle node using the given renderer.\n */\n function createHandle(renderer) {\n let handle = renderer.createHandle();\n handle.style.position = 'absolute';\n // Do not use size containment to allow the handle to fill the available space\n handle.style.contain = 'style';\n return handle;\n }\n Private.createHandle = createHandle;\n /**\n * Compute the average size of an array of box sizers.\n */\n function averageSize(sizers) {\n return sizers.reduce((v, s) => v + s.size, 0) / sizers.length || 0;\n }\n Private.averageSize = averageSize;\n /**\n * Normalize an array of values.\n */\n function normalize(values) {\n let n = values.length;\n if (n === 0) {\n return [];\n }\n let sum = values.reduce((a, b) => a + Math.abs(b), 0);\n return sum === 0 ? values.map(v => 1 / n) : values.map(v => v / sum);\n }\n Private.normalize = normalize;\n /**\n * The change handler for the attached sizing properties.\n */\n function onChildSizingChanged(child) {\n if (child.parent && child.parent.layout instanceof SplitLayout) {\n child.parent.fit();\n }\n }\n})(Private$h || (Private$h = {}));\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * A layout which arranges its widgets into collapsible resizable sections.\n */\nclass AccordionLayout extends SplitLayout {\n /**\n * Construct a new accordion layout.\n *\n * @param options - The options for initializing the layout.\n *\n * #### Notes\n * The default orientation will be vertical.\n *\n * Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n */\n constructor(options) {\n super({ ...options, orientation: options.orientation || 'vertical' });\n this._titles = [];\n this.titleSpace = options.titleSpace || 22;\n }\n /**\n * The section title height or width depending on the orientation.\n */\n get titleSpace() {\n return this.widgetOffset;\n }\n set titleSpace(value) {\n value = Utils$1.clampDimension(value);\n if (this.widgetOffset === value) {\n return;\n }\n this.widgetOffset = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * A read-only array of the section titles in the panel.\n */\n get titles() {\n return this._titles;\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n // Clear the layout state.\n this._titles.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n updateTitle(index, widget) {\n const oldTitle = this._titles[index];\n const expanded = oldTitle.classList.contains('lm-mod-expanded');\n const newTitle = Private$g.createTitle(this.renderer, widget.title, expanded);\n this._titles[index] = newTitle;\n // Add the title node to the parent before the widget.\n this.parent.node.replaceChild(newTitle, oldTitle);\n }\n /**\n * Insert a widget into the layout at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into the layout.\n *\n * #### Notes\n * The index will be clamped to the bounds of the widgets.\n *\n * If the widget is already added to the layout, it will be moved.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n insertWidget(index, widget) {\n if (!widget.id) {\n widget.id = `id-${UUID.uuid4()}`;\n }\n super.insertWidget(index, widget);\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n */\n attachWidget(index, widget) {\n const title = Private$g.createTitle(this.renderer, widget.title);\n ArrayExt.insert(this._titles, index, title);\n // Add the title node to the parent before the widget.\n this.parent.node.appendChild(title);\n widget.node.setAttribute('role', 'region');\n widget.node.setAttribute('aria-labelledby', title.id);\n super.attachWidget(index, widget);\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n */\n moveWidget(fromIndex, toIndex, widget) {\n ArrayExt.move(this._titles, fromIndex, toIndex);\n super.moveWidget(fromIndex, toIndex, widget);\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n const title = ArrayExt.removeAt(this._titles, index);\n this.parent.node.removeChild(title);\n super.detachWidget(index, widget);\n }\n /**\n * Update the item position.\n *\n * @param i Item index\n * @param isHorizontal Whether the layout is horizontal or not\n * @param left Left position in pixels\n * @param top Top position in pixels\n * @param height Item height\n * @param width Item width\n * @param size Item size\n */\n updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n const titleStyle = this._titles[i].style;\n // Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n titleStyle.top = `${top}px`;\n titleStyle.left = `${left}px`;\n titleStyle.height = `${this.widgetOffset}px`;\n if (isHorizontal) {\n titleStyle.width = `${height}px`;\n }\n else {\n titleStyle.width = `${width}px`;\n }\n super.updateItemPosition(i, isHorizontal, left, top, height, width, size);\n }\n}\nvar Private$g;\n(function (Private) {\n /**\n * Create the title HTML element.\n *\n * @param renderer Accordion renderer\n * @param data Widget title\n * @returns Title HTML element\n */\n function createTitle(renderer, data, expanded = true) {\n const title = renderer.createSectionTitle(data);\n title.style.position = 'absolute';\n title.style.contain = 'strict';\n title.setAttribute('aria-label', `${data.label} Section`);\n title.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n title.setAttribute('aria-controls', data.owner.id);\n if (expanded) {\n title.classList.add('lm-mod-expanded');\n }\n return title;\n }\n Private.createTitle = createTitle;\n})(Private$g || (Private$g = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A simple and convenient panel widget class.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * convenience panel widgets, but can also be used directly with CSS to\n * arrange a collection of widgets.\n *\n * This class provides a convenience wrapper around a {@link PanelLayout}.\n */\nclass Panel extends Widget {\n /**\n * Construct a new panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super();\n this.addClass('lm-Panel');\n this.layout = Private$f.createLayout(options);\n }\n /**\n * A read-only array of the widgets in the panel.\n */\n get widgets() {\n return this.layout.widgets;\n }\n /**\n * Add a widget to the end of the panel.\n *\n * @param widget - The widget to add to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n addWidget(widget) {\n this.layout.addWidget(widget);\n }\n /**\n * Insert a widget at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n insertWidget(index, widget) {\n this.layout.insertWidget(index, widget);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$f;\n(function (Private) {\n /**\n * Create a panel layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new PanelLayout();\n }\n Private.createLayout = createLayout;\n})(Private$f || (Private$f = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets into resizable sections.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link SplitLayout}.\n */\nclass SplitPanel extends Panel {\n /**\n * Construct a new split panel.\n *\n * @param options - The options for initializing the split panel.\n */\n constructor(options = {}) {\n super({ layout: Private$e.createLayout(options) });\n this._handleMoved = new Signal(this);\n this._pressData = null;\n this.addClass('lm-SplitPanel');\n }\n /**\n * Dispose of the resources held by the panel.\n */\n dispose() {\n this._releaseMouse();\n super.dispose();\n }\n /**\n * Get the layout orientation for the split panel.\n */\n get orientation() {\n return this.layout.orientation;\n }\n /**\n * Set the layout orientation for the split panel.\n */\n set orientation(value) {\n this.layout.orientation = value;\n }\n /**\n * Get the content alignment for the split panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split panel.\n */\n get alignment() {\n return this.layout.alignment;\n }\n /**\n * Set the content alignment for the split panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split panel.\n */\n set alignment(value) {\n this.layout.alignment = value;\n }\n /**\n * Get the inter-element spacing for the split panel.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the inter-element spacing for the split panel.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * The renderer used by the split panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * A signal emitted when a split handle has moved.\n */\n get handleMoved() {\n return this._handleMoved;\n }\n /**\n * A read-only array of the split handles in the panel.\n */\n get handles() {\n return this.layout.handles;\n }\n /**\n * Get the relative sizes of the widgets in the panel.\n *\n * @returns A new array of the relative sizes of the widgets.\n *\n * #### Notes\n * The returned sizes reflect the sizes of the widgets normalized\n * relative to their siblings.\n *\n * This method **does not** measure the DOM nodes.\n */\n relativeSizes() {\n return this.layout.relativeSizes();\n }\n /**\n * Set the relative sizes for the widgets in the panel.\n *\n * @param sizes - The relative sizes for the widgets in the panel.\n * @param update - Update the layout after setting relative sizes.\n * Default is True.\n *\n * #### Notes\n * Extra values are ignored, too few will yield an undefined layout.\n *\n * The actual geometry of the DOM nodes is updated asynchronously.\n */\n setRelativeSizes(sizes, update = true) {\n this.layout.setRelativeSizes(sizes, update);\n }\n /**\n * Handle the DOM events for the split panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('pointerdown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('pointerdown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-SplitPanel-child');\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-SplitPanel-child');\n this._releaseMouse();\n }\n /**\n * Handle the `'keydown'` event for the split panel.\n */\n _evtKeyDown(event) {\n // Stop input events during drag.\n if (this._pressData) {\n event.preventDefault();\n event.stopPropagation();\n }\n // Release the mouse if `Escape` is pressed.\n if (event.keyCode === 27) {\n this._releaseMouse();\n }\n }\n /**\n * Handle the `'pointerdown'` event for the split panel.\n */\n _evtPointerDown(event) {\n // Do nothing if the primary button is not pressed.\n if (event.button !== 0) {\n return;\n }\n // Find the handle which contains the target, if any.\n let layout = this.layout;\n let index = ArrayExt.findFirstIndex(layout.handles, handle => {\n return handle.contains(event.target);\n });\n // Bail early if the mouse press was not on a handle.\n if (index === -1) {\n return;\n }\n // Stop the event when a split handle is pressed.\n event.preventDefault();\n event.stopPropagation();\n // Add the extra document listeners.\n document.addEventListener('pointerup', this, true);\n document.addEventListener('pointermove', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('contextmenu', this, true);\n // Compute the offset delta for the handle press.\n let delta;\n let handle = layout.handles[index];\n let rect = handle.getBoundingClientRect();\n if (layout.orientation === 'horizontal') {\n delta = event.clientX - rect.left;\n }\n else {\n delta = event.clientY - rect.top;\n }\n // Override the cursor and store the press data.\n let style = window.getComputedStyle(handle);\n let override = Drag.overrideCursor(style.cursor);\n this._pressData = { index, delta, override };\n }\n /**\n * Handle the `'pointermove'` event for the split panel.\n */\n _evtPointerMove(event) {\n // Stop the event when dragging a split handle.\n event.preventDefault();\n event.stopPropagation();\n // Compute the desired offset position for the handle.\n let pos;\n let layout = this.layout;\n let rect = this.node.getBoundingClientRect();\n if (layout.orientation === 'horizontal') {\n pos = event.clientX - rect.left - this._pressData.delta;\n }\n else {\n pos = event.clientY - rect.top - this._pressData.delta;\n }\n // Move the handle as close to the desired position as possible.\n layout.moveHandle(this._pressData.index, pos);\n }\n /**\n * Handle the `'pointerup'` event for the split panel.\n */\n _evtPointerUp(event) {\n // Do nothing if the primary button is not released.\n if (event.button !== 0) {\n return;\n }\n // Stop the event when releasing a handle.\n event.preventDefault();\n event.stopPropagation();\n // Finalize the mouse release.\n this._releaseMouse();\n }\n /**\n * Release the mouse grab for the split panel.\n */\n _releaseMouse() {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Clear the override cursor.\n this._pressData.override.dispose();\n this._pressData = null;\n // Emit the handle moved signal.\n this._handleMoved.emit();\n // Remove the extra document listeners.\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('pointerup', this, true);\n document.removeEventListener('pointermove', this, true);\n document.removeEventListener('contextmenu', this, true);\n }\n}\n/**\n * The namespace for the `SplitPanel` class statics.\n */\n(function (SplitPanel) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Create a new handle for use with a split panel.\n *\n * @returns A new handle element for a split panel.\n */\n createHandle() {\n let handle = document.createElement('div');\n handle.className = 'lm-SplitPanel-handle';\n return handle;\n }\n }\n SplitPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n SplitPanel.defaultRenderer = new Renderer();\n /**\n * Get the split panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The split panel stretch factor for the widget.\n */\n function getStretch(widget) {\n return SplitLayout.getStretch(widget);\n }\n SplitPanel.getStretch = getStretch;\n /**\n * Set the split panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n SplitLayout.setStretch(widget, value);\n }\n SplitPanel.setStretch = setStretch;\n})(SplitPanel || (SplitPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$e;\n(function (Private) {\n /**\n * Create a split layout for the given panel options.\n */\n function createLayout(options) {\n return (options.layout ||\n new SplitLayout({\n renderer: options.renderer || SplitPanel.defaultRenderer,\n orientation: options.orientation,\n alignment: options.alignment,\n spacing: options.spacing\n }));\n }\n Private.createLayout = createLayout;\n})(Private$e || (Private$e = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A panel which arranges its widgets into resizable sections separated by a title widget.\n *\n * #### Notes\n * This class provides a convenience wrapper around {@link AccordionLayout}.\n */\nclass AccordionPanel extends SplitPanel {\n /**\n * Construct a new accordion panel.\n *\n * @param options - The options for initializing the accordion panel.\n */\n constructor(options = {}) {\n super({ ...options, layout: Private$d.createLayout(options) });\n this._widgetSizesCache = new WeakMap();\n this._expansionToggled = new Signal(this);\n this.addClass('lm-AccordionPanel');\n }\n /**\n * The renderer used by the accordion panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * The section title space.\n *\n * This is the height if the panel is vertical and the width if it is\n * horizontal.\n */\n get titleSpace() {\n return this.layout.titleSpace;\n }\n set titleSpace(value) {\n this.layout.titleSpace = value;\n }\n /**\n * A read-only array of the section titles in the panel.\n */\n get titles() {\n return this.layout.titles;\n }\n /**\n * A signal emitted when a widget of the AccordionPanel is collapsed or expanded.\n */\n get expansionToggled() {\n return this._expansionToggled;\n }\n /**\n * Add a widget to the end of the panel.\n *\n * @param widget - The widget to add to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n addWidget(widget) {\n super.addWidget(widget);\n widget.title.changed.connect(this._onTitleChanged, this);\n }\n /**\n * Collapse the widget at position `index`.\n *\n * #### Notes\n * If no widget is found for `index`, this will bail.\n *\n * @param index Widget index\n */\n collapse(index) {\n const widget = this.layout.widgets[index];\n if (widget && !widget.isHidden) {\n this._toggleExpansion(index);\n }\n }\n /**\n * Expand the widget at position `index`.\n *\n * #### Notes\n * If no widget is found for `index`, this will bail.\n *\n * @param index Widget index\n */\n expand(index) {\n const widget = this.layout.widgets[index];\n if (widget && widget.isHidden) {\n this._toggleExpansion(index);\n }\n }\n /**\n * Insert a widget at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n insertWidget(index, widget) {\n super.insertWidget(index, widget);\n widget.title.changed.connect(this._onTitleChanged, this);\n }\n /**\n * Handle the DOM events for the accordion panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n super.handleEvent(event);\n switch (event.type) {\n case 'click':\n this._evtClick(event);\n break;\n case 'keydown':\n this._eventKeyDown(event);\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('click', this);\n this.node.addEventListener('keydown', this);\n super.onBeforeAttach(msg);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n super.onAfterDetach(msg);\n this.node.removeEventListener('click', this);\n this.node.removeEventListener('keydown', this);\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged(sender) {\n const index = ArrayExt.findFirstIndex(this.widgets, widget => {\n return widget.contains(sender.owner);\n });\n if (index >= 0) {\n this.layout.updateTitle(index, sender.owner);\n this.update();\n }\n }\n /**\n * Compute the size of widgets in this panel on the title click event.\n * On closing, the size of the widget is cached and we will try to expand\n * the last opened widget.\n * On opening, we will use the cached size if it is available to restore the\n * widget.\n * In both cases, if we can not compute the size of widgets, we will let\n * `SplitLayout` decide.\n *\n * @param index - The index of widget to be opened of closed\n *\n * @returns Relative size of widgets in this panel, if this size can\n * not be computed, return `undefined`\n */\n _computeWidgetSize(index) {\n const layout = this.layout;\n const widget = layout.widgets[index];\n if (!widget) {\n return undefined;\n }\n const isHidden = widget.isHidden;\n const widgetSizes = layout.absoluteSizes();\n const delta = (isHidden ? -1 : 1) * this.spacing;\n const totalSize = widgetSizes.reduce((prev, curr) => prev + curr);\n let newSize = [...widgetSizes];\n if (!isHidden) {\n // Hide the widget\n const currentSize = widgetSizes[index];\n this._widgetSizesCache.set(widget, currentSize);\n newSize[index] = 0;\n const widgetToCollapse = newSize.map(sz => sz > 0).lastIndexOf(true);\n if (widgetToCollapse === -1) {\n // All widget are closed, let the `SplitLayout` compute widget sizes.\n return undefined;\n }\n newSize[widgetToCollapse] =\n widgetSizes[widgetToCollapse] + currentSize + delta;\n }\n else {\n // Show the widget\n const previousSize = this._widgetSizesCache.get(widget);\n if (!previousSize) {\n // Previous size is unavailable, let the `SplitLayout` compute widget sizes.\n return undefined;\n }\n newSize[index] += previousSize;\n const widgetToCollapse = newSize\n .map(sz => sz - previousSize > 0)\n .lastIndexOf(true);\n if (widgetToCollapse === -1) {\n // Can not reduce the size of one widget, reduce all opened widgets\n // proportionally with its size.\n newSize.forEach((_, idx) => {\n if (idx !== index) {\n newSize[idx] -=\n (widgetSizes[idx] / totalSize) * (previousSize - delta);\n }\n });\n }\n else {\n newSize[widgetToCollapse] -= previousSize - delta;\n }\n }\n return newSize.map(sz => sz / (totalSize + delta));\n }\n /**\n * Handle the `'click'` event for the accordion panel\n */\n _evtClick(event) {\n const target = event.target;\n if (target) {\n const index = ArrayExt.findFirstIndex(this.titles, title => {\n return title.contains(target);\n });\n if (index >= 0) {\n event.preventDefault();\n event.stopPropagation();\n this._toggleExpansion(index);\n }\n }\n }\n /**\n * Handle the `'keydown'` event for the accordion panel.\n */\n _eventKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n const target = event.target;\n let handled = false;\n if (target) {\n const index = ArrayExt.findFirstIndex(this.titles, title => {\n return title.contains(target);\n });\n if (index >= 0) {\n const keyCode = event.keyCode.toString();\n // If Space or Enter is pressed on title, emulate click event\n if (event.key.match(/Space|Enter/) || keyCode.match(/13|32/)) {\n target.click();\n handled = true;\n }\n else if (this.orientation === 'horizontal'\n ? event.key.match(/ArrowLeft|ArrowRight/) || keyCode.match(/37|39/)\n : event.key.match(/ArrowUp|ArrowDown/) || keyCode.match(/38|40/)) {\n // If Up or Down (for vertical) / Left or Right (for horizontal) is pressed on title, loop on titles\n const direction = event.key.match(/ArrowLeft|ArrowUp/) || keyCode.match(/37|38/)\n ? -1\n : 1;\n const length = this.titles.length;\n const newIndex = (index + length + direction) % length;\n this.titles[newIndex].focus();\n handled = true;\n }\n else if (event.key === 'End' || keyCode === '35') {\n // If End is pressed on title, focus on the last title\n this.titles[this.titles.length - 1].focus();\n handled = true;\n }\n else if (event.key === 'Home' || keyCode === '36') {\n // If Home is pressed on title, focus on the first title\n this.titles[0].focus();\n handled = true;\n }\n }\n if (handled) {\n event.preventDefault();\n }\n }\n }\n _toggleExpansion(index) {\n const title = this.titles[index];\n const widget = this.layout.widgets[index];\n const newSize = this._computeWidgetSize(index);\n if (newSize) {\n this.setRelativeSizes(newSize, false);\n }\n if (widget.isHidden) {\n title.classList.add('lm-mod-expanded');\n title.setAttribute('aria-expanded', 'true');\n widget.show();\n }\n else {\n title.classList.remove('lm-mod-expanded');\n title.setAttribute('aria-expanded', 'false');\n widget.hide();\n }\n // Emit the expansion state signal.\n this._expansionToggled.emit(index);\n }\n}\n/**\n * The namespace for the `AccordionPanel` class statics.\n */\n(function (AccordionPanel) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer extends SplitPanel.Renderer {\n constructor() {\n super();\n /**\n * A selector which matches any title node in the accordion.\n */\n this.titleClassName = 'lm-AccordionPanel-title';\n this._titleID = 0;\n this._titleKeys = new WeakMap();\n this._uuid = ++Renderer._nInstance;\n }\n /**\n * Render the collapse indicator for a section title.\n *\n * @param data - The data to use for rendering the section title.\n *\n * @returns A element representing the collapse indicator.\n */\n createCollapseIcon(data) {\n return document.createElement('span');\n }\n /**\n * Render the element for a section title.\n *\n * @param data - The data to use for rendering the section title.\n *\n * @returns A element representing the section title.\n */\n createSectionTitle(data) {\n const handle = document.createElement('h3');\n handle.setAttribute('tabindex', '0');\n handle.id = this.createTitleKey(data);\n handle.className = this.titleClassName;\n for (const aData in data.dataset) {\n handle.dataset[aData] = data.dataset[aData];\n }\n const collapser = handle.appendChild(this.createCollapseIcon(data));\n collapser.className = 'lm-AccordionPanel-titleCollapser';\n const label = handle.appendChild(document.createElement('span'));\n label.className = 'lm-AccordionPanel-titleLabel';\n label.textContent = data.label;\n label.title = data.caption || data.label;\n return handle;\n }\n /**\n * Create a unique render key for the title.\n *\n * @param data - The data to use for the title.\n *\n * @returns The unique render key for the title.\n *\n * #### Notes\n * This method caches the key against the section title the first time\n * the key is generated.\n */\n createTitleKey(data) {\n let key = this._titleKeys.get(data);\n if (key === undefined) {\n key = `title-key-${this._uuid}-${this._titleID++}`;\n this._titleKeys.set(data, key);\n }\n return key;\n }\n }\n Renderer._nInstance = 0;\n AccordionPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n AccordionPanel.defaultRenderer = new Renderer();\n})(AccordionPanel || (AccordionPanel = {}));\nvar Private$d;\n(function (Private) {\n /**\n * Create an accordion layout for the given panel options.\n *\n * @param options Panel options\n * @returns Panel layout\n */\n function createLayout(options) {\n return (options.layout ||\n new AccordionLayout({\n renderer: options.renderer || AccordionPanel.defaultRenderer,\n orientation: options.orientation,\n alignment: options.alignment,\n spacing: options.spacing,\n titleSpace: options.titleSpace\n }));\n }\n Private.createLayout = createLayout;\n})(Private$d || (Private$d = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a single row or column.\n */\nclass BoxLayout extends PanelLayout {\n /**\n * Construct a new box layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n super();\n this._fixed = 0;\n this._spacing = 4;\n this._dirty = false;\n this._sizers = [];\n this._items = [];\n this._box = null;\n this._alignment = 'start';\n this._direction = 'top-to-bottom';\n if (options.direction !== undefined) {\n this._direction = options.direction;\n }\n if (options.alignment !== undefined) {\n this._alignment = options.alignment;\n }\n if (options.spacing !== undefined) {\n this._spacing = Utils$1.clampDimension(options.spacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._sizers.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the layout direction for the box layout.\n */\n get direction() {\n return this._direction;\n }\n /**\n * Set the layout direction for the box layout.\n */\n set direction(value) {\n if (this._direction === value) {\n return;\n }\n this._direction = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['direction'] = value;\n this.parent.fit();\n }\n /**\n * Get the content alignment for the box layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n get alignment() {\n return this._alignment;\n }\n /**\n * Set the content alignment for the box layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n set alignment(value) {\n if (this._alignment === value) {\n return;\n }\n this._alignment = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['alignment'] = value;\n this.parent.update();\n }\n /**\n * Get the inter-element spacing for the box layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the box layout.\n */\n set spacing(value) {\n value = Utils$1.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n this.parent.dataset['direction'] = this.direction;\n this.parent.dataset['alignment'] = this.alignment;\n super.init();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Create and add a new layout item for the widget.\n ArrayExt.insert(this._items, index, new LayoutItem(widget));\n // Create and add a new sizer for the widget.\n ArrayExt.insert(this._sizers, index, new BoxSizer());\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the layout item for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n // Move the sizer for the widget.\n ArrayExt.move(this._sizers, fromIndex, toIndex);\n // Post an update request for the parent widget.\n this.parent.update();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the layout item for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n // Remove the sizer for the widget.\n ArrayExt.removeAt(this._sizers, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Update the fixed space for the visible items.\n this._fixed = this._spacing * Math.max(0, nVisible - 1);\n // Setup the computed minimum size.\n let horz = Private$c.isHorizontal(this._direction);\n let minW = horz ? this._fixed : 0;\n let minH = horz ? 0 : this._fixed;\n // Update the sizers and computed minimum size.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item and corresponding box sizer.\n let item = this._items[i];\n let sizer = this._sizers[i];\n // If the item is hidden, it should consume zero size.\n if (item.isHidden) {\n sizer.minSize = 0;\n sizer.maxSize = 0;\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the size basis and stretch factor.\n sizer.sizeHint = BoxLayout.getSizeBasis(item.widget);\n sizer.stretch = BoxLayout.getStretch(item.widget);\n // Update the sizer limits and computed min size.\n if (horz) {\n sizer.minSize = item.minWidth;\n sizer.maxSize = item.maxWidth;\n minW += item.minWidth;\n minH = Math.max(minH, item.minHeight);\n }\n else {\n sizer.minSize = item.minHeight;\n sizer.maxSize = item.maxHeight;\n minH += item.minHeight;\n minW = Math.max(minW, item.minWidth);\n }\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the layout area adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Distribute the layout space and adjust the start position.\n let delta;\n switch (this._direction) {\n case 'left-to-right':\n delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n break;\n case 'top-to-bottom':\n delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n break;\n case 'right-to-left':\n delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n left += width;\n break;\n case 'bottom-to-top':\n delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n top += height;\n break;\n default:\n throw 'unreachable';\n }\n // Setup the variables for justification and alignment offset.\n let extra = 0;\n let offset = 0;\n // Account for alignment if there is extra layout space.\n if (delta > 0) {\n switch (this._alignment) {\n case 'start':\n break;\n case 'center':\n extra = 0;\n offset = delta / 2;\n break;\n case 'end':\n extra = 0;\n offset = delta;\n break;\n case 'justify':\n extra = delta / nVisible;\n offset = 0;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Layout the items using the computed box sizes.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Fetch the computed size for the widget.\n let size = this._sizers[i].size;\n // Update the widget geometry and advance the relevant edge.\n switch (this._direction) {\n case 'left-to-right':\n item.update(left + offset, top, size + extra, height);\n left += size + extra + this._spacing;\n break;\n case 'top-to-bottom':\n item.update(left, top + offset, width, size + extra);\n top += size + extra + this._spacing;\n break;\n case 'right-to-left':\n item.update(left - offset - size - extra, top, size + extra, height);\n left -= size + extra + this._spacing;\n break;\n case 'bottom-to-top':\n item.update(left, top - offset - size - extra, width, size + extra);\n top -= size + extra + this._spacing;\n break;\n default:\n throw 'unreachable';\n }\n }\n }\n}\n/**\n * The namespace for the `BoxLayout` class statics.\n */\n(function (BoxLayout) {\n /**\n * Get the box layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box layout stretch factor for the widget.\n */\n function getStretch(widget) {\n return Private$c.stretchProperty.get(widget);\n }\n BoxLayout.getStretch = getStretch;\n /**\n * Set the box layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n Private$c.stretchProperty.set(widget, value);\n }\n BoxLayout.setStretch = setStretch;\n /**\n * Get the box layout size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box layout size basis for the widget.\n */\n function getSizeBasis(widget) {\n return Private$c.sizeBasisProperty.get(widget);\n }\n BoxLayout.getSizeBasis = getSizeBasis;\n /**\n * Set the box layout size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the size basis.\n */\n function setSizeBasis(widget, value) {\n Private$c.sizeBasisProperty.set(widget, value);\n }\n BoxLayout.setSizeBasis = setSizeBasis;\n})(BoxLayout || (BoxLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$c;\n(function (Private) {\n /**\n * The property descriptor for a widget stretch factor.\n */\n Private.stretchProperty = new AttachedProperty({\n name: 'stretch',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * The property descriptor for a widget size basis.\n */\n Private.sizeBasisProperty = new AttachedProperty({\n name: 'sizeBasis',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * Test whether a direction has horizontal orientation.\n */\n function isHorizontal(dir) {\n return dir === 'left-to-right' || dir === 'right-to-left';\n }\n Private.isHorizontal = isHorizontal;\n /**\n * Clamp a spacing value to an integer >= 0.\n */\n function clampSpacing(value) {\n return Math.max(0, Math.floor(value));\n }\n Private.clampSpacing = clampSpacing;\n /**\n * The change handler for the attached sizing properties.\n */\n function onChildSizingChanged(child) {\n if (child.parent && child.parent.layout instanceof BoxLayout) {\n child.parent.fit();\n }\n }\n})(Private$c || (Private$c = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets in a single row or column.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link BoxLayout}.\n */\nclass BoxPanel extends Panel {\n /**\n * Construct a new box panel.\n *\n * @param options - The options for initializing the box panel.\n */\n constructor(options = {}) {\n super({ layout: Private$b.createLayout(options) });\n this.addClass('lm-BoxPanel');\n }\n /**\n * Get the layout direction for the box panel.\n */\n get direction() {\n return this.layout.direction;\n }\n /**\n * Set the layout direction for the box panel.\n */\n set direction(value) {\n this.layout.direction = value;\n }\n /**\n * Get the content alignment for the box panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n get alignment() {\n return this.layout.alignment;\n }\n /**\n * Set the content alignment for the box panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n set alignment(value) {\n this.layout.alignment = value;\n }\n /**\n * Get the inter-element spacing for the box panel.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the inter-element spacing for the box panel.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-BoxPanel-child');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-BoxPanel-child');\n }\n}\n/**\n * The namespace for the `BoxPanel` class statics.\n */\n(function (BoxPanel) {\n /**\n * Get the box panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box panel stretch factor for the widget.\n */\n function getStretch(widget) {\n return BoxLayout.getStretch(widget);\n }\n BoxPanel.getStretch = getStretch;\n /**\n * Set the box panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n BoxLayout.setStretch(widget, value);\n }\n BoxPanel.setStretch = setStretch;\n /**\n * Get the box panel size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box panel size basis for the widget.\n */\n function getSizeBasis(widget) {\n return BoxLayout.getSizeBasis(widget);\n }\n BoxPanel.getSizeBasis = getSizeBasis;\n /**\n * Set the box panel size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the size basis.\n */\n function setSizeBasis(widget, value) {\n BoxLayout.setSizeBasis(widget, value);\n }\n BoxPanel.setSizeBasis = setSizeBasis;\n})(BoxPanel || (BoxPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$b;\n(function (Private) {\n /**\n * Create a box layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new BoxLayout(options);\n }\n Private.createLayout = createLayout;\n})(Private$b || (Private$b = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays command items as a searchable palette.\n */\nclass CommandPalette extends Widget {\n /**\n * Construct a new command palette.\n *\n * @param options - The options for initializing the palette.\n */\n constructor(options) {\n super({ node: Private$a.createNode() });\n this._activeIndex = -1;\n this._items = [];\n this._results = null;\n this.addClass('lm-CommandPalette');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.commands = options.commands;\n this.renderer = options.renderer || CommandPalette.defaultRenderer;\n this.commands.commandChanged.connect(this._onGenericChange, this);\n this.commands.keyBindingChanged.connect(this._onGenericChange, this);\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._items.length = 0;\n this._results = null;\n super.dispose();\n }\n /**\n * The command palette search node.\n *\n * #### Notes\n * This is the node which contains the search-related elements.\n */\n get searchNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-search')[0];\n }\n /**\n * The command palette input node.\n *\n * #### Notes\n * This is the actual input node for the search area.\n */\n get inputNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-input')[0];\n }\n /**\n * The command palette content node.\n *\n * #### Notes\n * This is the node which holds the command item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-content')[0];\n }\n /**\n * A read-only array of the command items in the palette.\n */\n get items() {\n return this._items;\n }\n /**\n * Add a command item to the command palette.\n *\n * @param options - The options for creating the command item.\n *\n * @returns The command item added to the palette.\n */\n addItem(options) {\n // Create a new command item for the options.\n let item = Private$a.createItem(this.commands, options);\n // Add the item to the array.\n this._items.push(item);\n // Refresh the search results.\n this.refresh();\n // Return the item added to the palette.\n return item;\n }\n /**\n * Adds command items to the command palette.\n *\n * @param items - An array of options for creating each command item.\n *\n * @returns The command items added to the palette.\n */\n addItems(items) {\n const newItems = items.map(item => Private$a.createItem(this.commands, item));\n newItems.forEach(item => this._items.push(item));\n this.refresh();\n return newItems;\n }\n /**\n * Remove an item from the command palette.\n *\n * @param item - The item to remove from the palette.\n *\n * #### Notes\n * This is a no-op if the item is not in the palette.\n */\n removeItem(item) {\n this.removeItemAt(this._items.indexOf(item));\n }\n /**\n * Remove the item at a given index from the command palette.\n *\n * @param index - The index of the item to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeItemAt(index) {\n // Remove the item from the array.\n let item = ArrayExt.removeAt(this._items, index);\n // Bail if the index is out of range.\n if (!item) {\n return;\n }\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Remove all items from the command palette.\n */\n clearItems() {\n // Bail if there is nothing to remove.\n if (this._items.length === 0) {\n return;\n }\n // Clear the array of items.\n this._items.length = 0;\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Clear the search results and schedule an update.\n *\n * #### Notes\n * This should be called whenever the search results of the palette\n * should be updated.\n *\n * This is typically called automatically by the palette as needed,\n * but can be called manually if the input text is programatically\n * changed.\n *\n * The rendered results are updated asynchronously.\n */\n refresh() {\n this._results = null;\n if (this.inputNode.value !== '') {\n let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n clear.style.display = 'inherit';\n }\n else {\n let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n clear.style.display = 'none';\n }\n this.update();\n }\n /**\n * Handle the DOM events for the command palette.\n *\n * @param event - The DOM event sent to the command palette.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the command palette's DOM node.\n * It should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'click':\n this._evtClick(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'input':\n this.refresh();\n break;\n case 'focus':\n case 'blur':\n this._toggleFocused();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('click', this);\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('input', this);\n this.node.addEventListener('focus', this, true);\n this.node.addEventListener('blur', this, true);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('click', this);\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('input', this);\n this.node.removeEventListener('focus', this, true);\n this.node.removeEventListener('blur', this, true);\n }\n /**\n * A message handler invoked on an `'after-show'` message.\n */\n onAfterShow(msg) {\n this.update();\n super.onAfterShow(msg);\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n let input = this.inputNode;\n input.focus();\n input.select();\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.isHidden) {\n return;\n }\n // Fetch the current query text and content node.\n let query = this.inputNode.value;\n let contentNode = this.contentNode;\n // Ensure the search results are generated.\n let results = this._results;\n if (!results) {\n // Generate and store the new search results.\n results = this._results = Private$a.search(this._items, query);\n // Reset the active index.\n this._activeIndex = query\n ? ArrayExt.findFirstIndex(results, Private$a.canActivate)\n : -1;\n }\n // If there is no query and no results, clear the content.\n if (!query && results.length === 0) {\n VirtualDOM.render(null, contentNode);\n return;\n }\n // If the is a query but no results, render the empty message.\n if (query && results.length === 0) {\n let content = this.renderer.renderEmptyMessage({ query });\n VirtualDOM.render(content, contentNode);\n return;\n }\n // Create the render content for the search results.\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let content = new Array(results.length);\n for (let i = 0, n = results.length; i < n; ++i) {\n let result = results[i];\n if (result.type === 'header') {\n let indices = result.indices;\n let category = result.category;\n content[i] = renderer.renderHeader({ category, indices });\n }\n else {\n let item = result.item;\n let indices = result.indices;\n let active = i === activeIndex;\n content[i] = renderer.renderItem({ item, indices, active });\n }\n }\n // Render the search result content.\n VirtualDOM.render(content, contentNode);\n // Adjust the scroll position as needed.\n if (activeIndex < 0 || activeIndex >= results.length) {\n contentNode.scrollTop = 0;\n }\n else {\n let element = contentNode.children[activeIndex];\n ElementExt.scrollIntoViewIfNeeded(contentNode, element);\n }\n }\n /**\n * Handle the `'click'` event for the command palette.\n */\n _evtClick(event) {\n // Bail if the click is not the left button.\n if (event.button !== 0) {\n return;\n }\n // Clear input if the target is clear button\n if (event.target.classList.contains('lm-close-icon')) {\n this.inputNode.value = '';\n this.refresh();\n return;\n }\n // Find the index of the item which was clicked.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return node.contains(event.target);\n });\n // Bail if the click was not on an item.\n if (index === -1) {\n return;\n }\n // Kill the event when a content item is clicked.\n event.preventDefault();\n event.stopPropagation();\n // Execute the item if possible.\n this._execute(index);\n }\n /**\n * Handle the `'keydown'` event for the command palette.\n */\n _evtKeyDown(event) {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n switch (event.keyCode) {\n case 13: // Enter\n event.preventDefault();\n event.stopPropagation();\n this._execute(this._activeIndex);\n break;\n case 38: // Up Arrow\n event.preventDefault();\n event.stopPropagation();\n this._activatePreviousItem();\n break;\n case 40: // Down Arrow\n event.preventDefault();\n event.stopPropagation();\n this._activateNextItem();\n break;\n }\n }\n /**\n * Activate the next enabled command item.\n */\n _activateNextItem() {\n // Bail if there are no search results.\n if (!this._results || this._results.length === 0) {\n return;\n }\n // Find the next enabled item index.\n let ai = this._activeIndex;\n let n = this._results.length;\n let start = ai < n - 1 ? ai + 1 : 0;\n let stop = start === 0 ? n - 1 : start - 1;\n this._activeIndex = ArrayExt.findFirstIndex(this._results, Private$a.canActivate, start, stop);\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Activate the previous enabled command item.\n */\n _activatePreviousItem() {\n // Bail if there are no search results.\n if (!this._results || this._results.length === 0) {\n return;\n }\n // Find the previous enabled item index.\n let ai = this._activeIndex;\n let n = this._results.length;\n let start = ai <= 0 ? n - 1 : ai - 1;\n let stop = start === n - 1 ? 0 : start + 1;\n this._activeIndex = ArrayExt.findLastIndex(this._results, Private$a.canActivate, start, stop);\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Execute the command item at the given index, if possible.\n */\n _execute(index) {\n // Bail if there are no search results.\n if (!this._results) {\n return;\n }\n // Bail if the index is out of range.\n let part = this._results[index];\n if (!part) {\n return;\n }\n // Update the search text if the item is a header.\n if (part.type === 'header') {\n let input = this.inputNode;\n input.value = `${part.category.toLowerCase()} `;\n input.focus();\n this.refresh();\n return;\n }\n // Bail if item is not enabled.\n if (!part.item.isEnabled) {\n return;\n }\n // Execute the item.\n this.commands.execute(part.item.command, part.item.args);\n // Clear the query text.\n this.inputNode.value = '';\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Toggle the focused modifier based on the input node focus state.\n */\n _toggleFocused() {\n let focused = document.activeElement === this.inputNode;\n this.toggleClass('lm-mod-focused', focused);\n }\n /**\n * A signal handler for generic command changes.\n */\n _onGenericChange() {\n this.refresh();\n }\n}\n/**\n * The namespace for the `CommandPalette` class statics.\n */\n(function (CommandPalette) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Render the virtual element for a command palette header.\n *\n * @param data - The data to use for rendering the header.\n *\n * @returns A virtual element representing the header.\n */\n renderHeader(data) {\n let content = this.formatHeader(data);\n return h.li({ className: 'lm-CommandPalette-header' }, content);\n }\n /**\n * Render the virtual element for a command palette item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n if (data.item.isToggleable) {\n return h.li({\n className,\n dataset,\n role: 'menuitemcheckbox',\n 'aria-checked': `${data.item.isToggled}`\n }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n }\n return h.li({\n className,\n dataset,\n role: 'menuitem'\n }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n }\n /**\n * Render the empty results message for a command palette.\n *\n * @param data - The data to use for rendering the message.\n *\n * @returns A virtual element representing the message.\n */\n renderEmptyMessage(data) {\n let content = this.formatEmptyMessage(data);\n return h.li({ className: 'lm-CommandPalette-emptyMessage' }, content);\n }\n /**\n * Render the icon for a command palette item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the icon.\n */\n renderItemIcon(data) {\n let className = this.createIconClass(data);\n // If data.item.icon is undefined, it will be ignored.\n return h.div({ className }, data.item.icon, data.item.iconLabel);\n }\n /**\n * Render the content for a command palette item.\n *\n * @param data - The data to use for rendering the content.\n *\n * @returns A virtual element representing the content.\n */\n renderItemContent(data) {\n return h.div({ className: 'lm-CommandPalette-itemContent' }, this.renderItemLabel(data), this.renderItemCaption(data));\n }\n /**\n * Render the label for a command palette item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the label.\n */\n renderItemLabel(data) {\n let content = this.formatItemLabel(data);\n return h.div({ className: 'lm-CommandPalette-itemLabel' }, content);\n }\n /**\n * Render the caption for a command palette item.\n *\n * @param data - The data to use for rendering the caption.\n *\n * @returns A virtual element representing the caption.\n */\n renderItemCaption(data) {\n let content = this.formatItemCaption(data);\n return h.div({ className: 'lm-CommandPalette-itemCaption' }, content);\n }\n /**\n * Render the shortcut for a command palette item.\n *\n * @param data - The data to use for rendering the shortcut.\n *\n * @returns A virtual element representing the shortcut.\n */\n renderItemShortcut(data) {\n let content = this.formatItemShortcut(data);\n return h.div({ className: 'lm-CommandPalette-itemShortcut' }, content);\n }\n /**\n * Create the class name for the command palette item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the command palette item.\n */\n createItemClass(data) {\n // Set up the initial class name.\n let name = 'lm-CommandPalette-item';\n // Add the boolean state classes.\n if (!data.item.isEnabled) {\n name += ' lm-mod-disabled';\n }\n if (data.item.isToggled) {\n name += ' lm-mod-toggled';\n }\n if (data.active) {\n name += ' lm-mod-active';\n }\n // Add the extra class.\n let extra = data.item.className;\n if (extra) {\n name += ` ${extra}`;\n }\n // Return the complete class name.\n return name;\n }\n /**\n * Create the dataset for the command palette item.\n *\n * @param data - The data to use for creating the dataset.\n *\n * @returns The dataset for the command palette item.\n */\n createItemDataset(data) {\n return { ...data.item.dataset, command: data.item.command };\n }\n /**\n * Create the class name for the command item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-CommandPalette-itemIcon';\n let extra = data.item.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the render content for the header node.\n *\n * @param data - The data to use for the header content.\n *\n * @returns The content to add to the header node.\n */\n formatHeader(data) {\n if (!data.indices || data.indices.length === 0) {\n return data.category;\n }\n return StringExt.highlight(data.category, data.indices, h.mark);\n }\n /**\n * Create the render content for the empty message node.\n *\n * @param data - The data to use for the empty message content.\n *\n * @returns The content to add to the empty message node.\n */\n formatEmptyMessage(data) {\n return `No commands found that match '${data.query}'`;\n }\n /**\n * Create the render content for the item shortcut node.\n *\n * @param data - The data to use for the shortcut content.\n *\n * @returns The content to add to the shortcut node.\n */\n formatItemShortcut(data) {\n let kb = data.item.keyBinding;\n return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n }\n /**\n * Create the render content for the item label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatItemLabel(data) {\n if (!data.indices || data.indices.length === 0) {\n return data.item.label;\n }\n return StringExt.highlight(data.item.label, data.indices, h.mark);\n }\n /**\n * Create the render content for the item caption node.\n *\n * @param data - The data to use for the caption content.\n *\n * @returns The content to add to the caption node.\n */\n formatItemCaption(data) {\n return data.item.caption;\n }\n }\n CommandPalette.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n CommandPalette.defaultRenderer = new Renderer();\n})(CommandPalette || (CommandPalette = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$a;\n(function (Private) {\n /**\n * Create the DOM node for a command palette.\n */\n function createNode() {\n let node = document.createElement('div');\n let search = document.createElement('div');\n let wrapper = document.createElement('div');\n let input = document.createElement('input');\n let content = document.createElement('ul');\n let clear = document.createElement('button');\n search.className = 'lm-CommandPalette-search';\n wrapper.className = 'lm-CommandPalette-wrapper';\n input.className = 'lm-CommandPalette-input';\n clear.className = 'lm-close-icon';\n content.className = 'lm-CommandPalette-content';\n content.setAttribute('role', 'menu');\n input.spellcheck = false;\n wrapper.appendChild(input);\n wrapper.appendChild(clear);\n search.appendChild(wrapper);\n node.appendChild(search);\n node.appendChild(content);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Create a new command item from a command registry and options.\n */\n function createItem(commands, options) {\n return new CommandItem(commands, options);\n }\n Private.createItem = createItem;\n /**\n * Search an array of command items for fuzzy matches.\n */\n function search(items, query) {\n // Fuzzy match the items for the query.\n let scores = matchItems(items, query);\n // Sort the items based on their score.\n scores.sort(scoreCmp);\n // Create the results for the search.\n return createResults(scores);\n }\n Private.search = search;\n /**\n * Test whether a result item can be activated.\n */\n function canActivate(result) {\n return result.type === 'item' && result.item.isEnabled;\n }\n Private.canActivate = canActivate;\n /**\n * Normalize a category for a command item.\n */\n function normalizeCategory(category) {\n return category.trim().replace(/\\s+/g, ' ');\n }\n /**\n * Normalize the query text for a fuzzy search.\n */\n function normalizeQuery(text) {\n return text.replace(/\\s+/g, '').toLowerCase();\n }\n /**\n * Perform a fuzzy match on an array of command items.\n */\n function matchItems(items, query) {\n // Normalize the query text to lower case with no whitespace.\n query = normalizeQuery(query);\n // Create the array to hold the scores.\n let scores = [];\n // Iterate over the items and match against the query.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Ignore items which are not visible.\n let item = items[i];\n if (!item.isVisible) {\n continue;\n }\n // If the query is empty, all items are matched by default.\n if (!query) {\n scores.push({\n matchType: 3 /* MatchType.Default */,\n categoryIndices: null,\n labelIndices: null,\n score: 0,\n item\n });\n continue;\n }\n // Run the fuzzy search for the item and query.\n let score = fuzzySearch(item, query);\n // Ignore the item if it is not a match.\n if (!score) {\n continue;\n }\n // Penalize disabled items.\n // TODO - push disabled items all the way down in sort cmp?\n if (!item.isEnabled) {\n score.score += 1000;\n }\n // Add the score to the results.\n scores.push(score);\n }\n // Return the final array of scores.\n return scores;\n }\n /**\n * Perform a fuzzy search on a single command item.\n */\n function fuzzySearch(item, query) {\n // Create the source text to be searched.\n let category = item.category.toLowerCase();\n let label = item.label.toLowerCase();\n let source = `${category} ${label}`;\n // Set up the match score and indices array.\n let score = Infinity;\n let indices = null;\n // The regex for search word boundaries\n let rgx = /\\b\\w/g;\n // Search the source by word boundary.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // Find the next word boundary in the source.\n let rgxMatch = rgx.exec(source);\n // Break if there is no more source context.\n if (!rgxMatch) {\n break;\n }\n // Run the string match on the relevant substring.\n let match = StringExt.matchSumOfDeltas(source, query, rgxMatch.index);\n // Break if there is no match.\n if (!match) {\n break;\n }\n // Update the match if the score is better.\n if (match.score <= score) {\n score = match.score;\n indices = match.indices;\n }\n }\n // Bail if there was no match.\n if (!indices || score === Infinity) {\n return null;\n }\n // Compute the pivot index between category and label text.\n let pivot = category.length + 1;\n // Find the slice index to separate matched indices.\n let j = ArrayExt.lowerBound(indices, pivot, (a, b) => a - b);\n // Extract the matched category and label indices.\n let categoryIndices = indices.slice(0, j);\n let labelIndices = indices.slice(j);\n // Adjust the label indices for the pivot offset.\n for (let i = 0, n = labelIndices.length; i < n; ++i) {\n labelIndices[i] -= pivot;\n }\n // Handle a pure label match.\n if (categoryIndices.length === 0) {\n return {\n matchType: 0 /* MatchType.Label */,\n categoryIndices: null,\n labelIndices,\n score,\n item\n };\n }\n // Handle a pure category match.\n if (labelIndices.length === 0) {\n return {\n matchType: 1 /* MatchType.Category */,\n categoryIndices,\n labelIndices: null,\n score,\n item\n };\n }\n // Handle a split match.\n return {\n matchType: 2 /* MatchType.Split */,\n categoryIndices,\n labelIndices,\n score,\n item\n };\n }\n /**\n * A sort comparison function for a match score.\n */\n function scoreCmp(a, b) {\n // First compare based on the match type\n let m1 = a.matchType - b.matchType;\n if (m1 !== 0) {\n return m1;\n }\n // Otherwise, compare based on the match score.\n let d1 = a.score - b.score;\n if (d1 !== 0) {\n return d1;\n }\n // Find the match index based on the match type.\n let i1 = 0;\n let i2 = 0;\n switch (a.matchType) {\n case 0 /* MatchType.Label */:\n i1 = a.labelIndices[0];\n i2 = b.labelIndices[0];\n break;\n case 1 /* MatchType.Category */:\n case 2 /* MatchType.Split */:\n i1 = a.categoryIndices[0];\n i2 = b.categoryIndices[0];\n break;\n }\n // Compare based on the match index.\n if (i1 !== i2) {\n return i1 - i2;\n }\n // Otherwise, compare by category.\n let d2 = a.item.category.localeCompare(b.item.category);\n if (d2 !== 0) {\n return d2;\n }\n // Otherwise, compare by rank.\n let r1 = a.item.rank;\n let r2 = b.item.rank;\n if (r1 !== r2) {\n return r1 < r2 ? -1 : 1; // Infinity safe\n }\n // Finally, compare by label.\n return a.item.label.localeCompare(b.item.label);\n }\n /**\n * Create the results from an array of sorted scores.\n */\n function createResults(scores) {\n // Set up the search results array.\n let results = [];\n // Iterate over each score in the array.\n for (let i = 0, n = scores.length; i < n; ++i) {\n // Extract the current item and indices.\n let { item, categoryIndices, labelIndices } = scores[i];\n // Extract the category for the current item.\n let category = item.category;\n // Is this the same category as the preceding result?\n if (i === 0 || category !== scores[i - 1].item.category) {\n // Add the header result for the category.\n results.push({ type: 'header', category, indices: categoryIndices });\n }\n // Create the item result for the score.\n results.push({ type: 'item', item, indices: labelIndices });\n }\n // Return the final results.\n return results;\n }\n /**\n * A concrete implementation of `CommandPalette.IItem`.\n */\n class CommandItem {\n /**\n * Construct a new command item.\n */\n constructor(commands, options) {\n this._commands = commands;\n this.category = normalizeCategory(options.category);\n this.command = options.command;\n this.args = options.args || JSONExt.emptyObject;\n this.rank = options.rank !== undefined ? options.rank : Infinity;\n }\n /**\n * The display label for the command item.\n */\n get label() {\n return this._commands.label(this.command, this.args);\n }\n /**\n * The icon renderer for the command item.\n */\n get icon() {\n return this._commands.icon(this.command, this.args);\n }\n /**\n * The icon class for the command item.\n */\n get iconClass() {\n return this._commands.iconClass(this.command, this.args);\n }\n /**\n * The icon label for the command item.\n */\n get iconLabel() {\n return this._commands.iconLabel(this.command, this.args);\n }\n /**\n * The display caption for the command item.\n */\n get caption() {\n return this._commands.caption(this.command, this.args);\n }\n /**\n * The extra class name for the command item.\n */\n get className() {\n return this._commands.className(this.command, this.args);\n }\n /**\n * The dataset for the command item.\n */\n get dataset() {\n return this._commands.dataset(this.command, this.args);\n }\n /**\n * Whether the command item is enabled.\n */\n get isEnabled() {\n return this._commands.isEnabled(this.command, this.args);\n }\n /**\n * Whether the command item is toggled.\n */\n get isToggled() {\n return this._commands.isToggled(this.command, this.args);\n }\n /**\n * Whether the command item is toggleable.\n */\n get isToggleable() {\n return this._commands.isToggleable(this.command, this.args);\n }\n /**\n * Whether the command item is visible.\n */\n get isVisible() {\n return this._commands.isVisible(this.command, this.args);\n }\n /**\n * The key binding for the command item.\n */\n get keyBinding() {\n let { command, args } = this;\n return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n return kb.command === command && JSONExt.deepEqual(kb.args, args);\n }) || null);\n }\n }\n})(Private$a || (Private$a = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays items as a canonical menu.\n */\nclass Menu extends Widget {\n /**\n * Construct a new menu.\n *\n * @param options - The options for initializing the menu.\n */\n constructor(options) {\n super({ node: Private$9.createNode() });\n this._childIndex = -1;\n this._activeIndex = -1;\n this._openTimerID = 0;\n this._closeTimerID = 0;\n this._items = [];\n this._childMenu = null;\n this._parentMenu = null;\n this._aboutToClose = new Signal(this);\n this._menuRequested = new Signal(this);\n this.addClass('lm-Menu');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.commands = options.commands;\n this.renderer = options.renderer || Menu.defaultRenderer;\n }\n /**\n * Dispose of the resources held by the menu.\n */\n dispose() {\n this.close();\n this._items.length = 0;\n super.dispose();\n }\n /**\n * A signal emitted just before the menu is closed.\n *\n * #### Notes\n * This signal is emitted when the menu receives a `'close-request'`\n * message, just before it removes itself from the DOM.\n *\n * This signal is not emitted if the menu is already detached from\n * the DOM when it receives the `'close-request'` message.\n */\n get aboutToClose() {\n return this._aboutToClose;\n }\n /**\n * A signal emitted when a new menu is requested by the user.\n *\n * #### Notes\n * This signal is emitted whenever the user presses the right or left\n * arrow keys, and a submenu cannot be opened or closed in response.\n *\n * This signal is useful when implementing menu bars in order to open\n * the next or previous menu in response to a user key press.\n *\n * This signal is only emitted for the root menu in a hierarchy.\n */\n get menuRequested() {\n return this._menuRequested;\n }\n /**\n * The parent menu of the menu.\n *\n * #### Notes\n * This is `null` unless the menu is an open submenu.\n */\n get parentMenu() {\n return this._parentMenu;\n }\n /**\n * The child menu of the menu.\n *\n * #### Notes\n * This is `null` unless the menu has an open submenu.\n */\n get childMenu() {\n return this._childMenu;\n }\n /**\n * The root menu of the menu hierarchy.\n */\n get rootMenu() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let menu = this;\n while (menu._parentMenu) {\n menu = menu._parentMenu;\n }\n return menu;\n }\n /**\n * The leaf menu of the menu hierarchy.\n */\n get leafMenu() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let menu = this;\n while (menu._childMenu) {\n menu = menu._childMenu;\n }\n return menu;\n }\n /**\n * The menu content node.\n *\n * #### Notes\n * This is the node which holds the menu item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-Menu-content')[0];\n }\n /**\n * Get the currently active menu item.\n */\n get activeItem() {\n return this._items[this._activeIndex] || null;\n }\n /**\n * Set the currently active menu item.\n *\n * #### Notes\n * If the item cannot be activated, the item will be set to `null`.\n */\n set activeItem(value) {\n this.activeIndex = value ? this._items.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently active menu item.\n *\n * #### Notes\n * This will be `-1` if no menu item is active.\n */\n get activeIndex() {\n return this._activeIndex;\n }\n /**\n * Set the index of the currently active menu item.\n *\n * #### Notes\n * If the item cannot be activated, the index will be set to `-1`.\n */\n set activeIndex(value) {\n // Adjust the value for an out of range index.\n if (value < 0 || value >= this._items.length) {\n value = -1;\n }\n // Ensure the item can be activated.\n if (value !== -1 && !Private$9.canActivate(this._items[value])) {\n value = -1;\n }\n // Bail if the index will not change.\n if (this._activeIndex === value) {\n return;\n }\n // Update the active index.\n this._activeIndex = value;\n // Make active element in focus\n if (this._activeIndex >= 0 &&\n this.contentNode.childNodes[this._activeIndex]) {\n this.contentNode.childNodes[this._activeIndex].focus();\n }\n // schedule an update of the items.\n this.update();\n }\n /**\n * A read-only array of the menu items in the menu.\n */\n get items() {\n return this._items;\n }\n /**\n * Activate the next selectable item in the menu.\n *\n * #### Notes\n * If no item is selectable, the index will be set to `-1`.\n */\n activateNextItem() {\n let n = this._items.length;\n let ai = this._activeIndex;\n let start = ai < n - 1 ? ai + 1 : 0;\n let stop = start === 0 ? n - 1 : start - 1;\n this.activeIndex = ArrayExt.findFirstIndex(this._items, Private$9.canActivate, start, stop);\n }\n /**\n * Activate the previous selectable item in the menu.\n *\n * #### Notes\n * If no item is selectable, the index will be set to `-1`.\n */\n activatePreviousItem() {\n let n = this._items.length;\n let ai = this._activeIndex;\n let start = ai <= 0 ? n - 1 : ai - 1;\n let stop = start === n - 1 ? 0 : start + 1;\n this.activeIndex = ArrayExt.findLastIndex(this._items, Private$9.canActivate, start, stop);\n }\n /**\n * Trigger the active menu item.\n *\n * #### Notes\n * If the active item is a submenu, it will be opened and the first\n * item will be activated.\n *\n * If the active item is a command, the command will be executed.\n *\n * If the menu is not attached, this is a no-op.\n *\n * If there is no active item, this is a no-op.\n */\n triggerActiveItem() {\n // Bail if the menu is not attached.\n if (!this.isAttached) {\n return;\n }\n // Bail if there is no active item.\n let item = this.activeItem;\n if (!item) {\n return;\n }\n // Cancel the pending timers.\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n // If the item is a submenu, open it.\n if (item.type === 'submenu') {\n this._openChildMenu(true);\n return;\n }\n // Close the root menu before executing the command.\n this.rootMenu.close();\n // Execute the command for the item.\n let { command, args } = item;\n if (this.commands.isEnabled(command, args)) {\n this.commands.execute(command, args);\n }\n else {\n console.log(`Command '${command}' is disabled.`);\n }\n }\n /**\n * Add a menu item to the end of the menu.\n *\n * @param options - The options for creating the menu item.\n *\n * @returns The menu item added to the menu.\n */\n addItem(options) {\n return this.insertItem(this._items.length, options);\n }\n /**\n * Insert a menu item into the menu at the specified index.\n *\n * @param index - The index at which to insert the item.\n *\n * @param options - The options for creating the menu item.\n *\n * @returns The menu item added to the menu.\n *\n * #### Notes\n * The index will be clamped to the bounds of the items.\n */\n insertItem(index, options) {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Clamp the insert index to the array bounds.\n let i = Math.max(0, Math.min(index, this._items.length));\n // Create the item for the options.\n let item = Private$9.createItem(this, options);\n // Insert the item into the array.\n ArrayExt.insert(this._items, i, item);\n // Schedule an update of the items.\n this.update();\n // Return the item added to the menu.\n return item;\n }\n /**\n * Remove an item from the menu.\n *\n * @param item - The item to remove from the menu.\n *\n * #### Notes\n * This is a no-op if the item is not in the menu.\n */\n removeItem(item) {\n this.removeItemAt(this._items.indexOf(item));\n }\n /**\n * Remove the item at a given index from the menu.\n *\n * @param index - The index of the item to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeItemAt(index) {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Remove the item from the array.\n let item = ArrayExt.removeAt(this._items, index);\n // Bail if the index is out of range.\n if (!item) {\n return;\n }\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Remove all menu items from the menu.\n */\n clearItems() {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Bail if there is nothing to remove.\n if (this._items.length === 0) {\n return;\n }\n // Clear the items.\n this._items.length = 0;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Open the menu at the specified location.\n *\n * @param x - The client X coordinate of the menu location.\n *\n * @param y - The client Y coordinate of the menu location.\n *\n * @param options - The additional options for opening the menu.\n *\n * #### Notes\n * The menu will be opened at the given location unless it will not\n * fully fit on the screen. If it will not fit, it will be adjusted\n * to fit naturally on the screen.\n *\n * The menu will be attached under the `host` element in the DOM\n * (or `document.body` if `host` is `null`) and before the `ref`\n * element (or as the last child of `host` if `ref` is `null`).\n * The menu may be displayed outside of the `host` element\n * following the rules of CSS absolute positioning.\n *\n * This is a no-op if the menu is already attached to the DOM.\n */\n open(x, y, options = {}) {\n var _a, _b;\n // Bail early if the menu is already attached.\n if (this.isAttached) {\n return;\n }\n // Extract the menu options.\n let forceX = options.forceX || false;\n let forceY = options.forceY || false;\n const host = (_a = options.host) !== null && _a !== void 0 ? _a : null;\n const ref = (_b = options.ref) !== null && _b !== void 0 ? _b : null;\n // Open the menu as a root menu.\n Private$9.openRootMenu(this, x, y, forceX, forceY, host, ref);\n // Activate the menu to accept keyboard input.\n this.activate();\n }\n /**\n * Handle the DOM events for the menu.\n *\n * @param event - The DOM event sent to the menu.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the menu's DOM nodes. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'mouseup':\n this._evtMouseUp(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'mouseenter':\n this._evtMouseEnter(event);\n break;\n case 'mouseleave':\n this._evtMouseLeave(event);\n break;\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('mouseup', this);\n this.node.addEventListener('mousemove', this);\n this.node.addEventListener('mouseenter', this);\n this.node.addEventListener('mouseleave', this);\n this.node.addEventListener('contextmenu', this);\n document.addEventListener('mousedown', this, true);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('mouseup', this);\n this.node.removeEventListener('mousemove', this);\n this.node.removeEventListener('mouseenter', this);\n this.node.removeEventListener('mouseleave', this);\n this.node.removeEventListener('contextmenu', this);\n document.removeEventListener('mousedown', this, true);\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n this.node.focus();\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n let items = this._items;\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let collapsedFlags = Private$9.computeCollapsed(items);\n let content = new Array(items.length);\n for (let i = 0, n = items.length; i < n; ++i) {\n let item = items[i];\n let active = i === activeIndex;\n let collapsed = collapsedFlags[i];\n content[i] = renderer.renderItem({\n item,\n active,\n collapsed,\n onfocus: () => {\n this.activeIndex = i;\n }\n });\n }\n VirtualDOM.render(content, this.contentNode);\n }\n /**\n * A message handler invoked on a `'close-request'` message.\n */\n onCloseRequest(msg) {\n // Cancel the pending timers.\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n // Reset the active index.\n this.activeIndex = -1;\n // Close any open child menu.\n let childMenu = this._childMenu;\n if (childMenu) {\n this._childIndex = -1;\n this._childMenu = null;\n childMenu._parentMenu = null;\n childMenu.close();\n }\n // Remove this menu from its parent and activate the parent.\n let parentMenu = this._parentMenu;\n if (parentMenu) {\n this._parentMenu = null;\n parentMenu._childIndex = -1;\n parentMenu._childMenu = null;\n parentMenu.activate();\n }\n // Emit the `aboutToClose` signal if the menu is attached.\n if (this.isAttached) {\n this._aboutToClose.emit(undefined);\n }\n // Finish closing the menu.\n super.onCloseRequest(msg);\n }\n /**\n * Handle the `'keydown'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtKeyDown(event) {\n // A menu handles all keydown events.\n event.preventDefault();\n event.stopPropagation();\n // Fetch the key code for the event.\n let kc = event.keyCode;\n // Enter\n if (kc === 13) {\n this.triggerActiveItem();\n return;\n }\n // Escape\n if (kc === 27) {\n this.close();\n return;\n }\n // Left Arrow\n if (kc === 37) {\n if (this._parentMenu) {\n this.close();\n }\n else {\n this._menuRequested.emit('previous');\n }\n return;\n }\n // Up Arrow\n if (kc === 38) {\n this.activatePreviousItem();\n return;\n }\n // Right Arrow\n if (kc === 39) {\n let item = this.activeItem;\n if (item && item.type === 'submenu') {\n this.triggerActiveItem();\n }\n else {\n this.rootMenu._menuRequested.emit('next');\n }\n return;\n }\n // Down Arrow\n if (kc === 40) {\n this.activateNextItem();\n return;\n }\n // Get the pressed key character.\n let key = getKeyboardLayout().keyForKeydownEvent(event);\n // Bail if the key is not valid.\n if (!key) {\n return;\n }\n // Search for the next best matching mnemonic item.\n let start = this._activeIndex + 1;\n let result = Private$9.findMnemonic(this._items, key, start);\n // Handle the requested mnemonic based on the search results.\n // If exactly one mnemonic is matched, that item is triggered.\n // Otherwise, the next mnemonic is activated if available,\n // followed by the auto mnemonic if available.\n if (result.index !== -1 && !result.multiple) {\n this.activeIndex = result.index;\n this.triggerActiveItem();\n }\n else if (result.index !== -1) {\n this.activeIndex = result.index;\n }\n else if (result.auto !== -1) {\n this.activeIndex = result.auto;\n }\n }\n /**\n * Handle the `'mouseup'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseUp(event) {\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.triggerActiveItem();\n }\n /**\n * Handle the `'mousemove'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseMove(event) {\n // Hit test the item nodes for the item under the mouse.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // Bail early if the mouse is already over the active index.\n if (index === this._activeIndex) {\n return;\n }\n // Update and coerce the active index.\n this.activeIndex = index;\n index = this.activeIndex;\n // If the index is the current child index, cancel the timers.\n if (index === this._childIndex) {\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n return;\n }\n // If a child menu is currently open, start the close timer.\n if (this._childIndex !== -1) {\n this._startCloseTimer();\n }\n // Cancel the open timer to give a full delay for opening.\n this._cancelOpenTimer();\n // Bail if the active item is not a valid submenu item.\n let item = this.activeItem;\n if (!item || item.type !== 'submenu' || !item.submenu) {\n return;\n }\n // Start the open timer to open the active item submenu.\n this._startOpenTimer();\n }\n /**\n * Handle the `'mouseenter'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseEnter(event) {\n // Synchronize the active ancestor items.\n for (let menu = this._parentMenu; menu; menu = menu._parentMenu) {\n menu._cancelOpenTimer();\n menu._cancelCloseTimer();\n menu.activeIndex = menu._childIndex;\n }\n }\n /**\n * Handle the `'mouseleave'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseLeave(event) {\n // Cancel any pending submenu opening.\n this._cancelOpenTimer();\n // If there is no open child menu, just reset the active index.\n if (!this._childMenu) {\n this.activeIndex = -1;\n return;\n }\n // If the mouse is over the child menu, cancel the close timer.\n let { clientX, clientY } = event;\n if (ElementExt.hitTest(this._childMenu.node, clientX, clientY)) {\n this._cancelCloseTimer();\n return;\n }\n // Otherwise, reset the active index and start the close timer.\n this.activeIndex = -1;\n this._startCloseTimer();\n }\n /**\n * Handle the `'mousedown'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the document node.\n */\n _evtMouseDown(event) {\n // Bail if the menu is not a root menu.\n if (this._parentMenu) {\n return;\n }\n // The mouse button which is pressed is irrelevant. If the press\n // is not on a menu, the entire hierarchy is closed and the event\n // is allowed to propagate. This allows other code to act on the\n // event, such as focusing the clicked element.\n if (Private$9.hitTestMenus(this, event.clientX, event.clientY)) {\n event.preventDefault();\n event.stopPropagation();\n }\n else {\n this.close();\n }\n }\n /**\n * Open the child menu at the active index immediately.\n *\n * If a different child menu is already open, it will be closed,\n * even if the active item is not a valid submenu.\n */\n _openChildMenu(activateFirst = false) {\n // If the item is not a valid submenu, close the child menu.\n let item = this.activeItem;\n if (!item || item.type !== 'submenu' || !item.submenu) {\n this._closeChildMenu();\n return;\n }\n // Do nothing if the child menu will not change.\n let submenu = item.submenu;\n if (submenu === this._childMenu) {\n return;\n }\n // Prior to any DOM modifications save window data\n Menu.saveWindowData();\n // Ensure the current child menu is closed.\n this._closeChildMenu();\n // Update the private child state.\n this._childMenu = submenu;\n this._childIndex = this._activeIndex;\n // Set the parent menu reference for the child.\n submenu._parentMenu = this;\n // Ensure the menu is updated and lookup the item node.\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n let itemNode = this.contentNode.children[this._activeIndex];\n // Open the submenu at the active node.\n Private$9.openSubmenu(submenu, itemNode);\n // Activate the first item if desired.\n if (activateFirst) {\n submenu.activeIndex = -1;\n submenu.activateNextItem();\n }\n // Activate the child menu.\n submenu.activate();\n }\n /**\n * Close the child menu immediately.\n *\n * This is a no-op if a child menu is not open.\n */\n _closeChildMenu() {\n if (this._childMenu) {\n this._childMenu.close();\n }\n }\n /**\n * Start the open timer, unless it is already pending.\n */\n _startOpenTimer() {\n if (this._openTimerID === 0) {\n this._openTimerID = window.setTimeout(() => {\n this._openTimerID = 0;\n this._openChildMenu();\n }, Private$9.TIMER_DELAY);\n }\n }\n /**\n * Start the close timer, unless it is already pending.\n */\n _startCloseTimer() {\n if (this._closeTimerID === 0) {\n this._closeTimerID = window.setTimeout(() => {\n this._closeTimerID = 0;\n this._closeChildMenu();\n }, Private$9.TIMER_DELAY);\n }\n }\n /**\n * Cancel the open timer, if the timer is pending.\n */\n _cancelOpenTimer() {\n if (this._openTimerID !== 0) {\n clearTimeout(this._openTimerID);\n this._openTimerID = 0;\n }\n }\n /**\n * Cancel the close timer, if the timer is pending.\n */\n _cancelCloseTimer() {\n if (this._closeTimerID !== 0) {\n clearTimeout(this._closeTimerID);\n this._closeTimerID = 0;\n }\n }\n /**\n * Save window data used for menu positioning in transient cache.\n *\n * In order to avoid layout trashing it is recommended to invoke this\n * method immediately prior to opening the menu and any DOM modifications\n * (like closing previously visible menu, or adding a class to menu widget).\n *\n * The transient cache will be released upon `open()` call.\n */\n static saveWindowData() {\n Private$9.saveWindowData();\n }\n}\n/**\n * The namespace for the `Menu` class statics.\n */\n(function (Menu) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n /**\n * Render the virtual element for a menu item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n let aria = this.createItemARIA(data);\n return h.li({\n className,\n dataset,\n tabindex: '0',\n onfocus: data.onfocus,\n ...aria\n }, this.renderIcon(data), this.renderLabel(data), this.renderShortcut(data), this.renderSubmenu(data));\n }\n /**\n * Render the icon element for a menu item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the item icon.\n */\n renderIcon(data) {\n let className = this.createIconClass(data);\n // If data.item.icon is undefined, it will be ignored.\n return h.div({ className }, data.item.icon, data.item.iconLabel);\n }\n /**\n * Render the label element for a menu item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the item label.\n */\n renderLabel(data) {\n let content = this.formatLabel(data);\n return h.div({ className: 'lm-Menu-itemLabel' }, content);\n }\n /**\n * Render the shortcut element for a menu item.\n *\n * @param data - The data to use for rendering the shortcut.\n *\n * @returns A virtual element representing the item shortcut.\n */\n renderShortcut(data) {\n let content = this.formatShortcut(data);\n return h.div({ className: 'lm-Menu-itemShortcut' }, content);\n }\n /**\n * Render the submenu icon element for a menu item.\n *\n * @param data - The data to use for rendering the submenu icon.\n *\n * @returns A virtual element representing the submenu icon.\n */\n renderSubmenu(data) {\n return h.div({ className: 'lm-Menu-itemSubmenuIcon' });\n }\n /**\n * Create the class name for the menu item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the menu item.\n */\n createItemClass(data) {\n // Setup the initial class name.\n let name = 'lm-Menu-item';\n // Add the boolean state classes.\n if (!data.item.isEnabled) {\n name += ' lm-mod-disabled';\n }\n if (data.item.isToggled) {\n name += ' lm-mod-toggled';\n }\n if (!data.item.isVisible) {\n name += ' lm-mod-hidden';\n }\n if (data.active) {\n name += ' lm-mod-active';\n }\n if (data.collapsed) {\n name += ' lm-mod-collapsed';\n }\n // Add the extra class.\n let extra = data.item.className;\n if (extra) {\n name += ` ${extra}`;\n }\n // Return the complete class name.\n return name;\n }\n /**\n * Create the dataset for the menu item.\n *\n * @param data - The data to use for creating the dataset.\n *\n * @returns The dataset for the menu item.\n */\n createItemDataset(data) {\n let result;\n let { type, command, dataset } = data.item;\n if (type === 'command') {\n result = { ...dataset, type, command };\n }\n else {\n result = { ...dataset, type };\n }\n return result;\n }\n /**\n * Create the class name for the menu item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-Menu-itemIcon';\n let extra = data.item.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the aria attributes for menu item.\n *\n * @param data - The data to use for the aria attributes.\n *\n * @returns The aria attributes object for the item.\n */\n createItemARIA(data) {\n let aria = {};\n switch (data.item.type) {\n case 'separator':\n aria.role = 'presentation';\n break;\n case 'submenu':\n aria['aria-haspopup'] = 'true';\n if (!data.item.isEnabled) {\n aria['aria-disabled'] = 'true';\n }\n break;\n default:\n if (!data.item.isEnabled) {\n aria['aria-disabled'] = 'true';\n }\n aria.role = 'menuitem';\n }\n return aria;\n }\n /**\n * Create the render content for the label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatLabel(data) {\n // Fetch the label text and mnemonic index.\n let { label, mnemonic } = data.item;\n // If the index is out of range, do not modify the label.\n if (mnemonic < 0 || mnemonic >= label.length) {\n return label;\n }\n // Split the label into parts.\n let prefix = label.slice(0, mnemonic);\n let suffix = label.slice(mnemonic + 1);\n let char = label[mnemonic];\n // Wrap the mnemonic character in a span.\n let span = h.span({ className: 'lm-Menu-itemMnemonic' }, char);\n // Return the content parts.\n return [prefix, span, suffix];\n }\n /**\n * Create the render content for the shortcut node.\n *\n * @param data - The data to use for the shortcut content.\n *\n * @returns The content to add to the shortcut node.\n */\n formatShortcut(data) {\n let kb = data.item.keyBinding;\n return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n }\n }\n Menu.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n Menu.defaultRenderer = new Renderer();\n})(Menu || (Menu = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$9;\n(function (Private) {\n /**\n * The ms delay for opening and closing a submenu.\n */\n Private.TIMER_DELAY = 300;\n /**\n * The horizontal pixel overlap for an open submenu.\n */\n Private.SUBMENU_OVERLAP = 3;\n let transientWindowDataCache = null;\n let transientCacheCounter = 0;\n function getWindowData() {\n // if transient cache is in use, take one from it\n if (transientCacheCounter > 0) {\n transientCacheCounter--;\n return transientWindowDataCache;\n }\n return _getWindowData();\n }\n /**\n * Store window data in transient cache.\n *\n * The transient cache will be released upon `getWindowData()` call.\n * If this function is called multiple times, the cache will be\n * retained until as many calls to `getWindowData()` were made.\n *\n * Note: should be called before any DOM modifications.\n */\n function saveWindowData() {\n transientWindowDataCache = _getWindowData();\n transientCacheCounter++;\n }\n Private.saveWindowData = saveWindowData;\n /**\n * Create the DOM node for a menu.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.className = 'lm-Menu-content';\n node.appendChild(content);\n content.setAttribute('role', 'menu');\n node.tabIndex = 0;\n return node;\n }\n Private.createNode = createNode;\n /**\n * Test whether a menu item can be activated.\n */\n function canActivate(item) {\n return item.type !== 'separator' && item.isEnabled && item.isVisible;\n }\n Private.canActivate = canActivate;\n /**\n * Create a new menu item for an owner menu.\n */\n function createItem(owner, options) {\n return new MenuItem(owner.commands, options);\n }\n Private.createItem = createItem;\n /**\n * Hit test a menu hierarchy starting at the given root.\n */\n function hitTestMenus(menu, x, y) {\n for (let temp = menu; temp; temp = temp.childMenu) {\n if (ElementExt.hitTest(temp.node, x, y)) {\n return true;\n }\n }\n return false;\n }\n Private.hitTestMenus = hitTestMenus;\n /**\n * Compute which extra separator items should be collapsed.\n */\n function computeCollapsed(items) {\n // Allocate the return array and fill it with `false`.\n let result = new Array(items.length);\n ArrayExt.fill(result, false);\n // Collapse the leading separators.\n let k1 = 0;\n let n = items.length;\n for (; k1 < n; ++k1) {\n let item = items[k1];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n break;\n }\n result[k1] = true;\n }\n // Hide the trailing separators.\n let k2 = n - 1;\n for (; k2 >= 0; --k2) {\n let item = items[k2];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n break;\n }\n result[k2] = true;\n }\n // Hide the remaining consecutive separators.\n let hide = false;\n while (++k1 < k2) {\n let item = items[k1];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n hide = false;\n }\n else if (hide) {\n result[k1] = true;\n }\n else {\n hide = true;\n }\n }\n // Return the resulting flags.\n return result;\n }\n Private.computeCollapsed = computeCollapsed;\n function _getWindowData() {\n return {\n pageXOffset: window.pageXOffset,\n pageYOffset: window.pageYOffset,\n clientWidth: document.documentElement.clientWidth,\n clientHeight: document.documentElement.clientHeight\n };\n }\n /**\n * Open a menu as a root menu at the target location.\n */\n function openRootMenu(menu, x, y, forceX, forceY, host, ref) {\n // Get the current position and size of the main viewport.\n const windowData = getWindowData();\n let px = windowData.pageXOffset;\n let py = windowData.pageYOffset;\n let cw = windowData.clientWidth;\n let ch = windowData.clientHeight;\n // Ensure the menu is updated before attaching and measuring.\n MessageLoop.sendMessage(menu, Widget.Msg.UpdateRequest);\n // Compute the maximum allowed height for the menu.\n let maxHeight = ch - (forceY ? y : 0);\n // Fetch common variables.\n let node = menu.node;\n let style = node.style;\n // Clear the menu geometry and prepare it for measuring.\n style.opacity = '0';\n style.maxHeight = `${maxHeight}px`;\n // Attach the menu to the document.\n Widget.attach(menu, host || document.body, ref);\n // Measure the size of the menu.\n let { width, height } = node.getBoundingClientRect();\n // Adjust the X position of the menu to fit on-screen.\n if (!forceX && x + width > px + cw) {\n x = px + cw - width;\n }\n // Adjust the Y position of the menu to fit on-screen.\n if (!forceY && y + height > py + ch) {\n if (y > py + ch) {\n y = py + ch - height;\n }\n else {\n y = y - height;\n }\n }\n // Update the position of the menu to the computed position.\n style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n // Finally, make the menu visible on the screen.\n style.opacity = '1';\n }\n Private.openRootMenu = openRootMenu;\n /**\n * Open a menu as a submenu using an item node for positioning.\n */\n function openSubmenu(submenu, itemNode) {\n // Get the current position and size of the main viewport.\n const windowData = getWindowData();\n let px = windowData.pageXOffset;\n let py = windowData.pageYOffset;\n let cw = windowData.clientWidth;\n let ch = windowData.clientHeight;\n // Ensure the menu is updated before opening.\n MessageLoop.sendMessage(submenu, Widget.Msg.UpdateRequest);\n // Compute the maximum allowed height for the menu.\n let maxHeight = ch;\n // Fetch common variables.\n let node = submenu.node;\n let style = node.style;\n // Clear the menu geometry and prepare it for measuring.\n style.opacity = '0';\n style.maxHeight = `${maxHeight}px`;\n // Attach the menu to the document.\n Widget.attach(submenu, document.body);\n // Measure the size of the menu.\n let { width, height } = node.getBoundingClientRect();\n // Compute the box sizing for the menu.\n let box = ElementExt.boxSizing(submenu.node);\n // Get the bounding rect for the target item node.\n let itemRect = itemNode.getBoundingClientRect();\n // Compute the target X position.\n let x = itemRect.right - Private.SUBMENU_OVERLAP;\n // Adjust the X position to fit on the screen.\n if (x + width > px + cw) {\n x = itemRect.left + Private.SUBMENU_OVERLAP - width;\n }\n // Compute the target Y position.\n let y = itemRect.top - box.borderTop - box.paddingTop;\n // Adjust the Y position to fit on the screen.\n if (y + height > py + ch) {\n y = itemRect.bottom + box.borderBottom + box.paddingBottom - height;\n }\n // Update the position of the menu to the computed position.\n style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n // Finally, make the menu visible on the screen.\n style.opacity = '1';\n }\n Private.openSubmenu = openSubmenu;\n /**\n * Find the best matching mnemonic item.\n *\n * The search starts at the given index and wraps around.\n */\n function findMnemonic(items, key, start) {\n // Setup the result variables.\n let index = -1;\n let auto = -1;\n let multiple = false;\n // Normalize the key to upper case.\n let upperKey = key.toUpperCase();\n // Search the items from the given start index.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Compute the wrapped index.\n let k = (i + start) % n;\n // Lookup the item\n let item = items[k];\n // Ignore items which cannot be activated.\n if (!canActivate(item)) {\n continue;\n }\n // Ignore items with an empty label.\n let label = item.label;\n if (label.length === 0) {\n continue;\n }\n // Lookup the mnemonic index for the label.\n let mn = item.mnemonic;\n // Handle a valid mnemonic index.\n if (mn >= 0 && mn < label.length) {\n if (label[mn].toUpperCase() === upperKey) {\n if (index === -1) {\n index = k;\n }\n else {\n multiple = true;\n }\n }\n continue;\n }\n // Finally, handle the auto index if possible.\n if (auto === -1 && label[0].toUpperCase() === upperKey) {\n auto = k;\n }\n }\n // Return the search results.\n return { index, multiple, auto };\n }\n Private.findMnemonic = findMnemonic;\n /**\n * A concrete implementation of `Menu.IItem`.\n */\n class MenuItem {\n /**\n * Construct a new menu item.\n */\n constructor(commands, options) {\n this._commands = commands;\n this.type = options.type || 'command';\n this.command = options.command || '';\n this.args = options.args || JSONExt.emptyObject;\n this.submenu = options.submenu || null;\n }\n /**\n * The display label for the menu item.\n */\n get label() {\n if (this.type === 'command') {\n return this._commands.label(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.label;\n }\n return '';\n }\n /**\n * The mnemonic index for the menu item.\n */\n get mnemonic() {\n if (this.type === 'command') {\n return this._commands.mnemonic(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.mnemonic;\n }\n return -1;\n }\n /**\n * The icon renderer for the menu item.\n */\n get icon() {\n if (this.type === 'command') {\n return this._commands.icon(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.icon;\n }\n return undefined;\n }\n /**\n * The icon class for the menu item.\n */\n get iconClass() {\n if (this.type === 'command') {\n return this._commands.iconClass(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.iconClass;\n }\n return '';\n }\n /**\n * The icon label for the menu item.\n */\n get iconLabel() {\n if (this.type === 'command') {\n return this._commands.iconLabel(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.iconLabel;\n }\n return '';\n }\n /**\n * The display caption for the menu item.\n */\n get caption() {\n if (this.type === 'command') {\n return this._commands.caption(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.caption;\n }\n return '';\n }\n /**\n * The extra class name for the menu item.\n */\n get className() {\n if (this.type === 'command') {\n return this._commands.className(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.className;\n }\n return '';\n }\n /**\n * The dataset for the menu item.\n */\n get dataset() {\n if (this.type === 'command') {\n return this._commands.dataset(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.dataset;\n }\n return {};\n }\n /**\n * Whether the menu item is enabled.\n */\n get isEnabled() {\n if (this.type === 'command') {\n return this._commands.isEnabled(this.command, this.args);\n }\n if (this.type === 'submenu') {\n return this.submenu !== null;\n }\n return true;\n }\n /**\n * Whether the menu item is toggled.\n */\n get isToggled() {\n if (this.type === 'command') {\n return this._commands.isToggled(this.command, this.args);\n }\n return false;\n }\n /**\n * Whether the menu item is visible.\n */\n get isVisible() {\n if (this.type === 'command') {\n return this._commands.isVisible(this.command, this.args);\n }\n if (this.type === 'submenu') {\n return this.submenu !== null;\n }\n return true;\n }\n /**\n * The key binding for the menu item.\n */\n get keyBinding() {\n if (this.type === 'command') {\n let { command, args } = this;\n return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n return kb.command === command && JSONExt.deepEqual(kb.args, args);\n }) || null);\n }\n return null;\n }\n }\n})(Private$9 || (Private$9 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * An object which implements a universal context menu.\n *\n * #### Notes\n * The items shown in the context menu are determined by CSS selector\n * matching against the DOM hierarchy at the site of the mouse click.\n * This is similar in concept to how keyboard shortcuts are matched\n * in the command registry.\n */\nclass ContextMenu {\n /**\n * Construct a new context menu.\n *\n * @param options - The options for initializing the menu.\n */\n constructor(options) {\n this._groupByTarget = true;\n this._idTick = 0;\n this._items = [];\n this._sortBySelector = true;\n const { groupByTarget, sortBySelector, ...others } = options;\n this.menu = new Menu(others);\n this._groupByTarget = groupByTarget !== false;\n this._sortBySelector = sortBySelector !== false;\n }\n /**\n * Add an item to the context menu.\n *\n * @param options - The options for creating the item.\n *\n * @returns A disposable which will remove the item from the menu.\n */\n addItem(options) {\n // Create an item from the given options.\n let item = Private$8.createItem(options, this._idTick++);\n // Add the item to the internal array.\n this._items.push(item);\n // Return a disposable which will remove the item.\n return new DisposableDelegate(() => {\n ArrayExt.removeFirstOf(this._items, item);\n });\n }\n /**\n * Open the context menu in response to a `'contextmenu'` event.\n *\n * @param event - The `'contextmenu'` event of interest.\n *\n * @returns `true` if the menu was opened, or `false` if no items\n * matched the event and the menu was not opened.\n *\n * #### Notes\n * This method will populate the context menu with items which match\n * the propagation path of the event, then open the menu at the mouse\n * position indicated by the event.\n */\n open(event) {\n // Prior to any DOM modifications update the window data.\n Menu.saveWindowData();\n // Clear the current contents of the context menu.\n this.menu.clearItems();\n // Bail early if there are no items to match.\n if (this._items.length === 0) {\n return false;\n }\n // Find the matching items for the event.\n let items = Private$8.matchItems(this._items, event, this._groupByTarget, this._sortBySelector);\n // Bail if there are no matching items.\n if (!items || items.length === 0) {\n return false;\n }\n // Add the filtered items to the menu.\n for (const item of items) {\n this.menu.addItem(item);\n }\n // Open the context menu at the current mouse position.\n this.menu.open(event.clientX, event.clientY);\n // Indicate success.\n return true;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$8;\n(function (Private) {\n /**\n * Create a normalized context menu item from an options object.\n */\n function createItem(options, id) {\n let selector = validateSelector(options.selector);\n let rank = options.rank !== undefined ? options.rank : Infinity;\n return { ...options, selector, rank, id };\n }\n Private.createItem = createItem;\n /**\n * Find the items which match a context menu event.\n *\n * The results are sorted by DOM level, specificity, and rank.\n */\n function matchItems(items, event, groupByTarget, sortBySelector) {\n // Look up the target of the event.\n let target = event.target;\n // Bail if there is no target.\n if (!target) {\n return null;\n }\n // Look up the current target of the event.\n let currentTarget = event.currentTarget;\n // Bail if there is no current target.\n if (!currentTarget) {\n return null;\n }\n // There are some third party libraries that cause the `target` to\n // be detached from the DOM before lumino can process the event.\n // If that happens, search for a new target node by point. If that\n // node is still dangling, bail.\n if (!currentTarget.contains(target)) {\n target = document.elementFromPoint(event.clientX, event.clientY);\n if (!target || !currentTarget.contains(target)) {\n return null;\n }\n }\n // Set up the result array.\n let result = [];\n // Copy the items array to allow in-place modification.\n let availableItems = items.slice();\n // Walk up the DOM hierarchy searching for matches.\n while (target !== null) {\n // Set up the match array for this DOM level.\n let matches = [];\n // Search the remaining items for matches.\n for (let i = 0, n = availableItems.length; i < n; ++i) {\n // Fetch the item.\n let item = availableItems[i];\n // Skip items which are already consumed.\n if (!item) {\n continue;\n }\n // Skip items which do not match the element.\n if (!Selector.matches(target, item.selector)) {\n continue;\n }\n // Add the matched item to the result for this DOM level.\n matches.push(item);\n // Mark the item as consumed.\n availableItems[i] = null;\n }\n // Sort the matches for this level and add them to the results.\n if (matches.length !== 0) {\n if (groupByTarget) {\n matches.sort(sortBySelector ? itemCmp : itemCmpRank);\n }\n result.push(...matches);\n }\n // Stop searching at the limits of the DOM range.\n if (target === currentTarget) {\n break;\n }\n // Step to the parent DOM level.\n target = target.parentElement;\n }\n if (!groupByTarget) {\n result.sort(sortBySelector ? itemCmp : itemCmpRank);\n }\n // Return the matched and sorted results.\n return result;\n }\n Private.matchItems = matchItems;\n /**\n * Validate the selector for a menu item.\n *\n * This returns the validated selector, or throws if the selector is\n * invalid or contains commas.\n */\n function validateSelector(selector) {\n if (selector.indexOf(',') !== -1) {\n throw new Error(`Selector cannot contain commas: ${selector}`);\n }\n if (!Selector.isValid(selector)) {\n throw new Error(`Invalid selector: ${selector}`);\n }\n return selector;\n }\n /**\n * A sort comparison function for a context menu item by ranks.\n */\n function itemCmpRank(a, b) {\n // Sort based on rank.\n let r1 = a.rank;\n let r2 = b.rank;\n if (r1 !== r2) {\n return r1 < r2 ? -1 : 1; // Infinity-safe\n }\n // When all else fails, sort by item id.\n return a.id - b.id;\n }\n /**\n * A sort comparison function for a context menu item by selectors and ranks.\n */\n function itemCmp(a, b) {\n // Sort first based on selector specificity.\n let s1 = Selector.calculateSpecificity(a.selector);\n let s2 = Selector.calculateSpecificity(b.selector);\n if (s1 !== s2) {\n return s2 - s1;\n }\n // If specificities are equal\n return itemCmpRank(a, b);\n }\n})(Private$8 || (Private$8 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nconst ARROW_KEYS = [\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowDown',\n 'Home',\n 'End'\n];\n/**\n * A widget which displays titles as a single row or column of tabs.\n *\n * #### Notes\n * If CSS transforms are used to rotate nodes for vertically oriented\n * text, then tab dragging will not work correctly. The `tabsMovable`\n * property should be set to `false` when rotating nodes from CSS.\n */\nclass TabBar extends Widget {\n /**\n * Construct a new tab bar.\n *\n * @param options - The options for initializing the tab bar.\n */\n constructor(options = {}) {\n super({ node: Private$7.createNode() });\n this._currentIndex = -1;\n this._titles = [];\n this._titlesEditable = false;\n this._previousTitle = null;\n this._dragData = null;\n this._addButtonEnabled = false;\n this._tabMoved = new Signal(this);\n this._currentChanged = new Signal(this);\n this._addRequested = new Signal(this);\n this._tabCloseRequested = new Signal(this);\n this._tabDetachRequested = new Signal(this);\n this._tabActivateRequested = new Signal(this);\n this.addClass('lm-TabBar');\n this.contentNode.setAttribute('role', 'tablist');\n this.setFlag(Widget.Flag.DisallowLayout);\n this._document = options.document || document;\n this.tabsMovable = options.tabsMovable || false;\n this.titlesEditable = options.titlesEditable || false;\n this.allowDeselect = options.allowDeselect || false;\n this.addButtonEnabled = options.addButtonEnabled || false;\n this.insertBehavior = options.insertBehavior || 'select-tab-if-needed';\n this.name = options.name || '';\n this.orientation = options.orientation || 'horizontal';\n this.removeBehavior = options.removeBehavior || 'select-tab-after';\n this.renderer = options.renderer || TabBar.defaultRenderer;\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._releaseMouse();\n this._titles.length = 0;\n this._previousTitle = null;\n super.dispose();\n }\n /**\n * A signal emitted when the current tab is changed.\n *\n * #### Notes\n * This signal is emitted when the currently selected tab is changed\n * either through user or programmatic interaction.\n *\n * Notably, this signal is not emitted when the index of the current\n * tab changes due to tabs being inserted, removed, or moved. It is\n * only emitted when the actual current tab node is changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * A signal emitted when a tab is moved by the user.\n *\n * #### Notes\n * This signal is emitted when a tab is moved by user interaction.\n *\n * This signal is not emitted when a tab is moved programmatically.\n */\n get tabMoved() {\n return this._tabMoved;\n }\n /**\n * A signal emitted when a tab is clicked by the user.\n *\n * #### Notes\n * If the clicked tab is not the current tab, the clicked tab will be\n * made current and the `currentChanged` signal will be emitted first.\n *\n * This signal is emitted even if the clicked tab is the current tab.\n */\n get tabActivateRequested() {\n return this._tabActivateRequested;\n }\n /**\n * A signal emitted when the tab bar add button is clicked.\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * A signal emitted when a tab close icon is clicked.\n *\n * #### Notes\n * This signal is not emitted unless the tab title is `closable`.\n */\n get tabCloseRequested() {\n return this._tabCloseRequested;\n }\n /**\n * A signal emitted when a tab is dragged beyond the detach threshold.\n *\n * #### Notes\n * This signal is emitted when the user drags a tab with the mouse,\n * and mouse is dragged beyond the detach threshold.\n *\n * The consumer of the signal should call `releaseMouse` and remove\n * the tab in order to complete the detach.\n *\n * This signal is only emitted once per drag cycle.\n */\n get tabDetachRequested() {\n return this._tabDetachRequested;\n }\n /**\n * The document to use with the tab bar.\n *\n * The default is the global `document` instance.\n */\n get document() {\n return this._document;\n }\n /**\n * Whether the titles can be user-edited.\n *\n */\n get titlesEditable() {\n return this._titlesEditable;\n }\n /**\n * Set whether titles can be user edited.\n *\n */\n set titlesEditable(value) {\n this._titlesEditable = value;\n }\n /**\n * Get the currently selected title.\n *\n * #### Notes\n * This will be `null` if no tab is selected.\n */\n get currentTitle() {\n return this._titles[this._currentIndex] || null;\n }\n /**\n * Set the currently selected title.\n *\n * #### Notes\n * If the title does not exist, the title will be set to `null`.\n */\n set currentTitle(value) {\n this.currentIndex = value ? this._titles.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently selected tab.\n *\n * #### Notes\n * This will be `-1` if no tab is selected.\n */\n get currentIndex() {\n return this._currentIndex;\n }\n /**\n * Set the index of the currently selected tab.\n *\n * #### Notes\n * If the value is out of range, the index will be set to `-1`.\n */\n set currentIndex(value) {\n // Adjust for an out of range index.\n if (value < 0 || value >= this._titles.length) {\n value = -1;\n }\n // Bail early if the index will not change.\n if (this._currentIndex === value) {\n return;\n }\n // Look up the previous index and title.\n let pi = this._currentIndex;\n let pt = this._titles[pi] || null;\n // Look up the current index and title.\n let ci = value;\n let ct = this._titles[ci] || null;\n // Update the current index and previous title.\n this._currentIndex = ci;\n this._previousTitle = pt;\n // Schedule an update of the tabs.\n this.update();\n // Emit the current changed signal.\n this._currentChanged.emit({\n previousIndex: pi,\n previousTitle: pt,\n currentIndex: ci,\n currentTitle: ct\n });\n }\n /**\n * Get the name of the tab bar.\n */\n get name() {\n return this._name;\n }\n /**\n * Set the name of the tab bar.\n */\n set name(value) {\n this._name = value;\n if (value) {\n this.contentNode.setAttribute('aria-label', value);\n }\n else {\n this.contentNode.removeAttribute('aria-label');\n }\n }\n /**\n * Get the orientation of the tab bar.\n *\n * #### Notes\n * This controls whether the tabs are arranged in a row or column.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the orientation of the tab bar.\n *\n * #### Notes\n * This controls whether the tabs are arranged in a row or column.\n */\n set orientation(value) {\n // Do nothing if the orientation does not change.\n if (this._orientation === value) {\n return;\n }\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Toggle the orientation values.\n this._orientation = value;\n this.dataset['orientation'] = value;\n this.contentNode.setAttribute('aria-orientation', value);\n }\n /**\n * Whether the add button is enabled.\n */\n get addButtonEnabled() {\n return this._addButtonEnabled;\n }\n /**\n * Set whether the add button is enabled.\n */\n set addButtonEnabled(value) {\n // Do nothing if the value does not change.\n if (this._addButtonEnabled === value) {\n return;\n }\n this._addButtonEnabled = value;\n if (value) {\n this.addButtonNode.classList.remove('lm-mod-hidden');\n }\n else {\n this.addButtonNode.classList.add('lm-mod-hidden');\n }\n }\n /**\n * A read-only array of the titles in the tab bar.\n */\n get titles() {\n return this._titles;\n }\n /**\n * The tab bar content node.\n *\n * #### Notes\n * This is the node which holds the tab nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-TabBar-content')[0];\n }\n /**\n * The tab bar add button node.\n *\n * #### Notes\n * This is the node which holds the add button.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get addButtonNode() {\n return this.node.getElementsByClassName('lm-TabBar-addButton')[0];\n }\n /**\n * Add a tab to the end of the tab bar.\n *\n * @param value - The title which holds the data for the tab,\n * or an options object to convert to a title.\n *\n * @returns The title object added to the tab bar.\n *\n * #### Notes\n * If the title is already added to the tab bar, it will be moved.\n */\n addTab(value) {\n return this.insertTab(this._titles.length, value);\n }\n /**\n * Insert a tab into the tab bar at the specified index.\n *\n * @param index - The index at which to insert the tab.\n *\n * @param value - The title which holds the data for the tab,\n * or an options object to convert to a title.\n *\n * @returns The title object added to the tab bar.\n *\n * #### Notes\n * The index will be clamped to the bounds of the tabs.\n *\n * If the title is already added to the tab bar, it will be moved.\n */\n insertTab(index, value) {\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Coerce the value to a title.\n let title = Private$7.asTitle(value);\n // Look up the index of the title.\n let i = this._titles.indexOf(title);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._titles.length));\n // If the title is not in the array, insert it.\n if (i === -1) {\n // Insert the title into the array.\n ArrayExt.insert(this._titles, j, title);\n // Connect to the title changed signal.\n title.changed.connect(this._onTitleChanged, this);\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the insert.\n this._adjustCurrentForInsert(j, title);\n // Return the title added to the tab bar.\n return title;\n }\n // Otherwise, the title exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._titles.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return title;\n }\n // Move the title to the new location.\n ArrayExt.move(this._titles, i, j);\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the move.\n this._adjustCurrentForMove(i, j);\n // Return the title added to the tab bar.\n return title;\n }\n /**\n * Remove a tab from the tab bar.\n *\n * @param title - The title for the tab to remove.\n *\n * #### Notes\n * This is a no-op if the title is not in the tab bar.\n */\n removeTab(title) {\n this.removeTabAt(this._titles.indexOf(title));\n }\n /**\n * Remove the tab at a given index from the tab bar.\n *\n * @param index - The index of the tab to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeTabAt(index) {\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Remove the title from the array.\n let title = ArrayExt.removeAt(this._titles, index);\n // Bail if the index is out of range.\n if (!title) {\n return;\n }\n // Disconnect from the title changed signal.\n title.changed.disconnect(this._onTitleChanged, this);\n // Clear the previous title if it's being removed.\n if (title === this._previousTitle) {\n this._previousTitle = null;\n }\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the remove.\n this._adjustCurrentForRemove(index, title);\n }\n /**\n * Remove all tabs from the tab bar.\n */\n clearTabs() {\n // Bail if there is nothing to remove.\n if (this._titles.length === 0) {\n return;\n }\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Disconnect from the title changed signals.\n for (let title of this._titles) {\n title.changed.disconnect(this._onTitleChanged, this);\n }\n // Get the current index and title.\n let pi = this.currentIndex;\n let pt = this.currentTitle;\n // Reset the current index and previous title.\n this._currentIndex = -1;\n this._previousTitle = null;\n // Clear the title array.\n this._titles.length = 0;\n // Schedule an update of the tabs.\n this.update();\n // If no tab was selected, there's nothing else to do.\n if (pi === -1) {\n return;\n }\n // Emit the current changed signal.\n this._currentChanged.emit({\n previousIndex: pi,\n previousTitle: pt,\n currentIndex: -1,\n currentTitle: null\n });\n }\n /**\n * Release the mouse and restore the non-dragged tab positions.\n *\n * #### Notes\n * This will cause the tab bar to stop handling mouse events and to\n * restore the tabs to their non-dragged positions.\n */\n releaseMouse() {\n this._releaseMouse();\n }\n /**\n * Handle the DOM events for the tab bar.\n *\n * @param event - The DOM event sent to the tab bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the tab bar's DOM node.\n *\n * This should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'dblclick':\n this._evtDblClick(event);\n break;\n case 'keydown':\n event.eventPhase === Event.CAPTURING_PHASE\n ? this._evtKeyDownCapturing(event)\n : this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('pointerdown', this);\n this.node.addEventListener('dblclick', this);\n this.node.addEventListener('keydown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('pointerdown', this);\n this.node.removeEventListener('dblclick', this);\n this.node.removeEventListener('keydown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n var _a;\n let titles = this._titles;\n let renderer = this.renderer;\n let currentTitle = this.currentTitle;\n let content = new Array(titles.length);\n // Keep the tabindex=\"0\" attribute to the tab which handled it before the update.\n // If the add button handles it, no need to do anything. If no element of the tab\n // bar handles it, set it on the current or the first tab to ensure one element\n // handles it after update.\n const tabHandlingTabindex = (_a = this._getCurrentTabindex()) !== null && _a !== void 0 ? _a : (this._currentIndex > -1 ? this._currentIndex : 0);\n for (let i = 0, n = titles.length; i < n; ++i) {\n let title = titles[i];\n let current = title === currentTitle;\n let zIndex = current ? n : n - i - 1;\n let tabIndex = tabHandlingTabindex === i ? 0 : -1;\n content[i] = renderer.renderTab({ title, current, zIndex, tabIndex });\n }\n VirtualDOM.render(content, this.contentNode);\n }\n /**\n * Get the index of the tab which handles tabindex=\"0\".\n * If the add button handles tabindex=\"0\", -1 is returned.\n * If none of the previous handles tabindex=\"0\", null is returned.\n */\n _getCurrentTabindex() {\n let index = null;\n const elemTabindex = this.contentNode.querySelector('li[tabindex=\"0\"]');\n if (elemTabindex) {\n index = [...this.contentNode.children].indexOf(elemTabindex);\n }\n else if (this._addButtonEnabled &&\n this.addButtonNode.getAttribute('tabindex') === '0') {\n index = -1;\n }\n return index;\n }\n /**\n * Handle the `'dblclick'` event for the tab bar.\n */\n _evtDblClick(event) {\n // Do nothing if titles are not editable\n if (!this.titlesEditable) {\n return;\n }\n let tabs = this.contentNode.children;\n // Find the index of the targeted tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the press is not on a tab.\n if (index === -1) {\n return;\n }\n let title = this.titles[index];\n let label = tabs[index].querySelector('.lm-TabBar-tabLabel');\n if (label && label.contains(event.target)) {\n let value = title.label || '';\n // Clear the label element\n let oldValue = label.innerHTML;\n label.innerHTML = '';\n let input = document.createElement('input');\n input.classList.add('lm-TabBar-tabInput');\n input.value = value;\n label.appendChild(input);\n let onblur = () => {\n input.removeEventListener('blur', onblur);\n label.innerHTML = oldValue;\n this.node.addEventListener('keydown', this);\n };\n input.addEventListener('dblclick', (event) => event.stopPropagation());\n input.addEventListener('blur', onblur);\n input.addEventListener('keydown', (event) => {\n if (event.key === 'Enter') {\n if (input.value !== '') {\n title.label = title.caption = input.value;\n }\n onblur();\n }\n else if (event.key === 'Escape') {\n onblur();\n }\n });\n this.node.removeEventListener('keydown', this);\n input.select();\n input.focus();\n if (label.children.length > 0) {\n label.children[0].focus();\n }\n }\n }\n /**\n * Handle the `'keydown'` event for the tab bar at capturing phase.\n */\n _evtKeyDownCapturing(event) {\n if (event.eventPhase !== Event.CAPTURING_PHASE) {\n return;\n }\n // Stop all input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse if `Escape` is pressed.\n if (event.key === 'Escape') {\n this._releaseMouse();\n }\n }\n /**\n * Handle the `'keydown'` event for the tab bar at target phase.\n */\n _evtKeyDown(event) {\n var _a, _b, _c;\n // Allow for navigation using tab key\n if (event.key === 'Tab' || event.eventPhase === Event.CAPTURING_PHASE) {\n return;\n }\n // Check if Enter or Spacebar key has been pressed and open that tab\n if (event.key === 'Enter' ||\n event.key === 'Spacebar' ||\n event.key === ' ') {\n // Get focus element that is in focus by the tab key\n const focusedElement = document.activeElement;\n // Test first if the focus is on the add button node\n if (this.addButtonEnabled &&\n this.addButtonNode.contains(focusedElement)) {\n event.preventDefault();\n event.stopPropagation();\n this._addRequested.emit();\n }\n else {\n const index = ArrayExt.findFirstIndex(this.contentNode.children, tab => tab.contains(focusedElement));\n if (index >= 0) {\n event.preventDefault();\n event.stopPropagation();\n this.currentIndex = index;\n }\n }\n // Handle the arrow keys to switch tabs.\n }\n else if (ARROW_KEYS.includes(event.key)) {\n // Create a list of all focusable elements in the tab bar.\n const focusable = [...this.contentNode.children];\n if (this.addButtonEnabled) {\n focusable.push(this.addButtonNode);\n }\n // If the tab bar contains only one element, nothing to do.\n if (focusable.length <= 1) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n // Get the current focused element.\n let focusedIndex = focusable.indexOf(document.activeElement);\n if (focusedIndex === -1) {\n focusedIndex = this._currentIndex;\n }\n // Find the next element to focus on.\n let nextFocused;\n if ((event.key === 'ArrowRight' && this._orientation === 'horizontal') ||\n (event.key === 'ArrowDown' && this._orientation === 'vertical')) {\n nextFocused = (_a = focusable[focusedIndex + 1]) !== null && _a !== void 0 ? _a : focusable[0];\n }\n else if ((event.key === 'ArrowLeft' && this._orientation === 'horizontal') ||\n (event.key === 'ArrowUp' && this._orientation === 'vertical')) {\n nextFocused =\n (_b = focusable[focusedIndex - 1]) !== null && _b !== void 0 ? _b : focusable[focusable.length - 1];\n }\n else if (event.key === 'Home') {\n nextFocused = focusable[0];\n }\n else if (event.key === 'End') {\n nextFocused = focusable[focusable.length - 1];\n }\n // Change the focused element and the tabindex value.\n if (nextFocused) {\n (_c = focusable[focusedIndex]) === null || _c === void 0 ? void 0 : _c.setAttribute('tabindex', '-1');\n nextFocused === null || nextFocused === void 0 ? void 0 : nextFocused.setAttribute('tabindex', '0');\n nextFocused.focus();\n }\n }\n }\n /**\n * Handle the `'pointerdown'` event for the tab bar.\n */\n _evtPointerDown(event) {\n // Do nothing if it's not a left or middle mouse press.\n if (event.button !== 0 && event.button !== 1) {\n return;\n }\n // Do nothing if a drag is in progress.\n if (this._dragData) {\n return;\n }\n // Do nothing if a title editable input was clicked.\n if (event.target.classList.contains('lm-TabBar-tabInput')) {\n return;\n }\n // Check if the add button was clicked.\n let addButtonClicked = this.addButtonEnabled &&\n this.addButtonNode.contains(event.target);\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Find the index of the pressed tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the press is not on a tab or the add button.\n if (index === -1 && !addButtonClicked) {\n return;\n }\n // Pressing on a tab stops the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Initialize the non-measured parts of the drag data.\n this._dragData = {\n tab: tabs[index],\n index: index,\n pressX: event.clientX,\n pressY: event.clientY,\n tabPos: -1,\n tabSize: -1,\n tabPressPos: -1,\n targetIndex: -1,\n tabLayout: null,\n contentRect: null,\n override: null,\n dragActive: false,\n dragAborted: false,\n detachRequested: false\n };\n // Add the document pointer up listener.\n this.document.addEventListener('pointerup', this, true);\n // Do nothing else if the middle button or add button is clicked.\n if (event.button === 1 || addButtonClicked) {\n return;\n }\n // Do nothing else if the close icon is clicked.\n let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n if (icon && icon.contains(event.target)) {\n return;\n }\n // Add the extra listeners if the tabs are movable.\n if (this.tabsMovable) {\n this.document.addEventListener('pointermove', this, true);\n this.document.addEventListener('keydown', this, true);\n this.document.addEventListener('contextmenu', this, true);\n }\n // Update the current index as appropriate.\n if (this.allowDeselect && this.currentIndex === index) {\n this.currentIndex = -1;\n }\n else {\n this.currentIndex = index;\n }\n // Do nothing else if there is no current tab.\n if (this.currentIndex === -1) {\n return;\n }\n // Emit the tab activate request signal.\n this._tabActivateRequested.emit({\n index: this.currentIndex,\n title: this.currentTitle\n });\n }\n /**\n * Handle the `'pointermove'` event for the tab bar.\n */\n _evtPointerMove(event) {\n // Do nothing if no drag is in progress.\n let data = this._dragData;\n if (!data) {\n return;\n }\n // Suppress the event during a drag.\n event.preventDefault();\n event.stopPropagation();\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Bail early if the drag threshold has not been met.\n if (!data.dragActive && !Private$7.dragExceeded(data, event)) {\n return;\n }\n // Activate the drag if necessary.\n if (!data.dragActive) {\n // Fill in the rest of the drag data measurements.\n let tabRect = data.tab.getBoundingClientRect();\n if (this._orientation === 'horizontal') {\n data.tabPos = data.tab.offsetLeft;\n data.tabSize = tabRect.width;\n data.tabPressPos = data.pressX - tabRect.left;\n }\n else {\n data.tabPos = data.tab.offsetTop;\n data.tabSize = tabRect.height;\n data.tabPressPos = data.pressY - tabRect.top;\n }\n data.tabPressOffset = {\n x: data.pressX - tabRect.left,\n y: data.pressY - tabRect.top\n };\n data.tabLayout = Private$7.snapTabLayout(tabs, this._orientation);\n data.contentRect = this.contentNode.getBoundingClientRect();\n data.override = Drag.overrideCursor('default');\n // Add the dragging style classes.\n data.tab.classList.add('lm-mod-dragging');\n this.addClass('lm-mod-dragging');\n // Mark the drag as active.\n data.dragActive = true;\n }\n // Emit the detach requested signal if the threshold is exceeded.\n if (!data.detachRequested && Private$7.detachExceeded(data, event)) {\n // Only emit the signal once per drag cycle.\n data.detachRequested = true;\n // Setup the arguments for the signal.\n let index = data.index;\n let clientX = event.clientX;\n let clientY = event.clientY;\n let tab = tabs[index];\n let title = this._titles[index];\n // Emit the tab detach requested signal.\n this._tabDetachRequested.emit({\n index,\n title,\n tab,\n clientX,\n clientY,\n offset: data.tabPressOffset\n });\n // Bail if the signal handler aborted the drag.\n if (data.dragAborted) {\n return;\n }\n }\n // Update the positions of the tabs.\n Private$7.layoutTabs(tabs, data, event, this._orientation);\n }\n /**\n * Handle the `'pointerup'` event for the document.\n */\n _evtPointerUp(event) {\n // Do nothing if it's not a left or middle mouse release.\n if (event.button !== 0 && event.button !== 1) {\n return;\n }\n // Do nothing if no drag is in progress.\n const data = this._dragData;\n if (!data) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Remove the extra mouse event listeners.\n this.document.removeEventListener('pointermove', this, true);\n this.document.removeEventListener('pointerup', this, true);\n this.document.removeEventListener('keydown', this, true);\n this.document.removeEventListener('contextmenu', this, true);\n // Handle a release when the drag is not active.\n if (!data.dragActive) {\n // Clear the drag data.\n this._dragData = null;\n // Handle clicking the add button.\n let addButtonClicked = this.addButtonEnabled &&\n this.addButtonNode.contains(event.target);\n if (addButtonClicked) {\n this._addRequested.emit(undefined);\n return;\n }\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Find the index of the released tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the release is not on the original pressed tab.\n if (index !== data.index) {\n return;\n }\n // Ignore the release if the title is not closable.\n let title = this._titles[index];\n if (!title.closable) {\n return;\n }\n // Emit the close requested signal if the middle button is released.\n if (event.button === 1) {\n this._tabCloseRequested.emit({ index, title });\n return;\n }\n // Emit the close requested signal if the close icon was released.\n let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n if (icon && icon.contains(event.target)) {\n this._tabCloseRequested.emit({ index, title });\n return;\n }\n // Otherwise, there is nothing left to do.\n return;\n }\n // Do nothing if the left button is not released.\n if (event.button !== 0) {\n return;\n }\n // Position the tab at its final resting position.\n Private$7.finalizeTabPosition(data, this._orientation);\n // Remove the dragging class from the tab so it can be transitioned.\n data.tab.classList.remove('lm-mod-dragging');\n // Parse the transition duration for releasing the tab.\n let duration = Private$7.parseTransitionDuration(data.tab);\n // Complete the release on a timer to allow the tab to transition.\n setTimeout(() => {\n // Do nothing if the drag has been aborted.\n if (data.dragAborted) {\n return;\n }\n // Clear the drag data reference.\n this._dragData = null;\n // Reset the positions of the tabs.\n Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n // Clear the cursor grab.\n data.override.dispose();\n // Remove the remaining dragging style.\n this.removeClass('lm-mod-dragging');\n // If the tab was not moved, there is nothing else to do.\n let i = data.index;\n let j = data.targetIndex;\n if (j === -1 || i === j) {\n return;\n }\n // Move the title to the new locations.\n ArrayExt.move(this._titles, i, j);\n // Adjust the current index for the move.\n this._adjustCurrentForMove(i, j);\n // Emit the tab moved signal.\n this._tabMoved.emit({\n fromIndex: i,\n toIndex: j,\n title: this._titles[j]\n });\n // Update the tabs immediately to prevent flicker.\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n }, duration);\n }\n /**\n * Release the mouse and restore the non-dragged tab positions.\n */\n _releaseMouse() {\n // Do nothing if no drag is in progress.\n let data = this._dragData;\n if (!data) {\n return;\n }\n // Clear the drag data reference.\n this._dragData = null;\n // Remove the extra document event listeners.\n this.document.removeEventListener('pointermove', this, true);\n this.document.removeEventListener('pointerup', this, true);\n this.document.removeEventListener('keydown', this, true);\n this.document.removeEventListener('contextmenu', this, true);\n // Indicate the drag has been aborted. This allows the mouse\n // event handlers to return early when the drag is canceled.\n data.dragAborted = true;\n // If the drag is not active, there's nothing more to do.\n if (!data.dragActive) {\n return;\n }\n // Reset the tabs to their non-dragged positions.\n Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n // Clear the cursor override.\n data.override.dispose();\n // Clear the dragging style classes.\n data.tab.classList.remove('lm-mod-dragging');\n this.removeClass('lm-mod-dragging');\n }\n /**\n * Adjust the current index for a tab insert operation.\n *\n * This method accounts for the tab bar's insertion behavior when\n * adjusting the current index and emitting the changed signal.\n */\n _adjustCurrentForInsert(i, title) {\n // Lookup commonly used variables.\n let ct = this.currentTitle;\n let ci = this._currentIndex;\n let bh = this.insertBehavior;\n // TODO: do we need to do an update to update the aria-selected attribute?\n // Handle the behavior where the new tab is always selected,\n // or the behavior where the new tab is selected if needed.\n if (bh === 'select-tab' || (bh === 'select-tab-if-needed' && ci === -1)) {\n this._currentIndex = i;\n this._previousTitle = ct;\n this._currentChanged.emit({\n previousIndex: ci,\n previousTitle: ct,\n currentIndex: i,\n currentTitle: title\n });\n return;\n }\n // Otherwise, silently adjust the current index if needed.\n if (ci >= i) {\n this._currentIndex++;\n }\n }\n /**\n * Adjust the current index for a tab move operation.\n *\n * This method will not cause the actual current tab to change.\n * It silently adjusts the index to account for the given move.\n */\n _adjustCurrentForMove(i, j) {\n if (this._currentIndex === i) {\n this._currentIndex = j;\n }\n else if (this._currentIndex < i && this._currentIndex >= j) {\n this._currentIndex++;\n }\n else if (this._currentIndex > i && this._currentIndex <= j) {\n this._currentIndex--;\n }\n }\n /**\n * Adjust the current index for a tab remove operation.\n *\n * This method accounts for the tab bar's remove behavior when\n * adjusting the current index and emitting the changed signal.\n */\n _adjustCurrentForRemove(i, title) {\n // Lookup commonly used variables.\n let ci = this._currentIndex;\n let bh = this.removeBehavior;\n // Silently adjust the index if the current tab is not removed.\n if (ci !== i) {\n if (ci > i) {\n this._currentIndex--;\n }\n return;\n }\n // TODO: do we need to do an update to adjust the aria-selected value?\n // No tab gets selected if the tab bar is empty.\n if (this._titles.length === 0) {\n this._currentIndex = -1;\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: -1,\n currentTitle: null\n });\n return;\n }\n // Handle behavior where the next sibling tab is selected.\n if (bh === 'select-tab-after') {\n this._currentIndex = Math.min(i, this._titles.length - 1);\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Handle behavior where the previous sibling tab is selected.\n if (bh === 'select-tab-before') {\n this._currentIndex = Math.max(0, i - 1);\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Handle behavior where the previous history tab is selected.\n if (bh === 'select-previous-tab') {\n if (this._previousTitle) {\n this._currentIndex = this._titles.indexOf(this._previousTitle);\n this._previousTitle = null;\n }\n else {\n this._currentIndex = Math.min(i, this._titles.length - 1);\n }\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Otherwise, no tab gets selected.\n this._currentIndex = -1;\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: -1,\n currentTitle: null\n });\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged(sender) {\n this.update();\n }\n}\n/**\n * The namespace for the `TabBar` class statics.\n */\n(function (TabBar) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n constructor() {\n /**\n * A selector which matches the close icon node in a tab.\n */\n this.closeIconSelector = '.lm-TabBar-tabCloseIcon';\n this._tabID = 0;\n this._tabKeys = new WeakMap();\n this._uuid = ++Renderer._nInstance;\n }\n /**\n * Render the virtual element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab.\n */\n renderTab(data) {\n let title = data.title.caption;\n let key = this.createTabKey(data);\n let id = key;\n let style = this.createTabStyle(data);\n let className = this.createTabClass(data);\n let dataset = this.createTabDataset(data);\n let aria = this.createTabARIA(data);\n if (data.title.closable) {\n return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data), this.renderCloseIcon(data));\n }\n else {\n return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data));\n }\n }\n /**\n * Render the icon element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab icon.\n */\n renderIcon(data) {\n const { title } = data;\n let className = this.createIconClass(data);\n // If title.icon is undefined, it will be ignored.\n return h.div({ className }, title.icon, title.iconLabel);\n }\n /**\n * Render the label element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab label.\n */\n renderLabel(data) {\n return h.div({ className: 'lm-TabBar-tabLabel' }, data.title.label);\n }\n /**\n * Render the close icon element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab close icon.\n */\n renderCloseIcon(data) {\n return h.div({ className: 'lm-TabBar-tabCloseIcon' });\n }\n /**\n * Create a unique render key for the tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The unique render key for the tab.\n *\n * #### Notes\n * This method caches the key against the tab title the first time\n * the key is generated. This enables efficient rendering of moved\n * tabs and avoids subtle hover style artifacts.\n */\n createTabKey(data) {\n let key = this._tabKeys.get(data.title);\n if (key === undefined) {\n key = `tab-key-${this._uuid}-${this._tabID++}`;\n this._tabKeys.set(data.title, key);\n }\n return key;\n }\n /**\n * Create the inline style object for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The inline style data for the tab.\n */\n createTabStyle(data) {\n return { zIndex: `${data.zIndex}` };\n }\n /**\n * Create the class name for the tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The full class name for the tab.\n */\n createTabClass(data) {\n let name = 'lm-TabBar-tab';\n if (data.title.className) {\n name += ` ${data.title.className}`;\n }\n if (data.title.closable) {\n name += ' lm-mod-closable';\n }\n if (data.current) {\n name += ' lm-mod-current';\n }\n return name;\n }\n /**\n * Create the dataset for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The dataset for the tab.\n */\n createTabDataset(data) {\n return data.title.dataset;\n }\n /**\n * Create the ARIA attributes for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The ARIA attributes for the tab.\n */\n createTabARIA(data) {\n var _a;\n return {\n role: 'tab',\n 'aria-selected': data.current.toString(),\n tabindex: `${(_a = data.tabIndex) !== null && _a !== void 0 ? _a : '-1'}`\n };\n }\n /**\n * Create the class name for the tab icon.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The full class name for the tab icon.\n */\n createIconClass(data) {\n let name = 'lm-TabBar-tabIcon';\n let extra = data.title.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n }\n Renderer._nInstance = 0;\n TabBar.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n TabBar.defaultRenderer = new Renderer();\n /**\n * A selector which matches the add button node in the tab bar.\n */\n TabBar.addButtonSelector = '.lm-TabBar-addButton';\n})(TabBar || (TabBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$7;\n(function (Private) {\n /**\n * The start drag distance threshold.\n */\n Private.DRAG_THRESHOLD = 5;\n /**\n * The detach distance threshold.\n */\n Private.DETACH_THRESHOLD = 20;\n /**\n * Create the DOM node for a tab bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.setAttribute('role', 'tablist');\n content.className = 'lm-TabBar-content';\n node.appendChild(content);\n let add = document.createElement('div');\n add.className = 'lm-TabBar-addButton lm-mod-hidden';\n add.setAttribute('tabindex', '-1');\n add.setAttribute('role', 'button');\n node.appendChild(add);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Coerce a title or options into a real title.\n */\n function asTitle(value) {\n return value instanceof Title ? value : new Title(value);\n }\n Private.asTitle = asTitle;\n /**\n * Parse the transition duration for a tab node.\n */\n function parseTransitionDuration(tab) {\n let style = window.getComputedStyle(tab);\n return 1000 * (parseFloat(style.transitionDuration) || 0);\n }\n Private.parseTransitionDuration = parseTransitionDuration;\n /**\n * Get a snapshot of the current tab layout values.\n */\n function snapTabLayout(tabs, orientation) {\n let layout = new Array(tabs.length);\n for (let i = 0, n = tabs.length; i < n; ++i) {\n let node = tabs[i];\n let style = window.getComputedStyle(node);\n if (orientation === 'horizontal') {\n layout[i] = {\n pos: node.offsetLeft,\n size: node.offsetWidth,\n margin: parseFloat(style.marginLeft) || 0\n };\n }\n else {\n layout[i] = {\n pos: node.offsetTop,\n size: node.offsetHeight,\n margin: parseFloat(style.marginTop) || 0\n };\n }\n }\n return layout;\n }\n Private.snapTabLayout = snapTabLayout;\n /**\n * Test if the event exceeds the drag threshold.\n */\n function dragExceeded(data, event) {\n let dx = Math.abs(event.clientX - data.pressX);\n let dy = Math.abs(event.clientY - data.pressY);\n return dx >= Private.DRAG_THRESHOLD || dy >= Private.DRAG_THRESHOLD;\n }\n Private.dragExceeded = dragExceeded;\n /**\n * Test if the event exceeds the drag detach threshold.\n */\n function detachExceeded(data, event) {\n let rect = data.contentRect;\n return (event.clientX < rect.left - Private.DETACH_THRESHOLD ||\n event.clientX >= rect.right + Private.DETACH_THRESHOLD ||\n event.clientY < rect.top - Private.DETACH_THRESHOLD ||\n event.clientY >= rect.bottom + Private.DETACH_THRESHOLD);\n }\n Private.detachExceeded = detachExceeded;\n /**\n * Update the relative tab positions and computed target index.\n */\n function layoutTabs(tabs, data, event, orientation) {\n // Compute the orientation-sensitive values.\n let pressPos;\n let localPos;\n let clientPos;\n let clientSize;\n if (orientation === 'horizontal') {\n pressPos = data.pressX;\n localPos = event.clientX - data.contentRect.left;\n clientPos = event.clientX;\n clientSize = data.contentRect.width;\n }\n else {\n pressPos = data.pressY;\n localPos = event.clientY - data.contentRect.top;\n clientPos = event.clientY;\n clientSize = data.contentRect.height;\n }\n // Compute the target data.\n let targetIndex = data.index;\n let targetPos = localPos - data.tabPressPos;\n let targetEnd = targetPos + data.tabSize;\n // Update the relative tab positions.\n for (let i = 0, n = tabs.length; i < n; ++i) {\n let pxPos;\n let layout = data.tabLayout[i];\n let threshold = layout.pos + (layout.size >> 1);\n if (i < data.index && targetPos < threshold) {\n pxPos = `${data.tabSize + data.tabLayout[i + 1].margin}px`;\n targetIndex = Math.min(targetIndex, i);\n }\n else if (i > data.index && targetEnd > threshold) {\n pxPos = `${-data.tabSize - layout.margin}px`;\n targetIndex = Math.max(targetIndex, i);\n }\n else if (i === data.index) {\n let ideal = clientPos - pressPos;\n let limit = clientSize - (data.tabPos + data.tabSize);\n pxPos = `${Math.max(-data.tabPos, Math.min(ideal, limit))}px`;\n }\n else {\n pxPos = '';\n }\n if (orientation === 'horizontal') {\n tabs[i].style.left = pxPos;\n }\n else {\n tabs[i].style.top = pxPos;\n }\n }\n // Update the computed target index.\n data.targetIndex = targetIndex;\n }\n Private.layoutTabs = layoutTabs;\n /**\n * Position the drag tab at its final resting relative position.\n */\n function finalizeTabPosition(data, orientation) {\n // Compute the orientation-sensitive client size.\n let clientSize;\n if (orientation === 'horizontal') {\n clientSize = data.contentRect.width;\n }\n else {\n clientSize = data.contentRect.height;\n }\n // Compute the ideal final tab position.\n let ideal;\n if (data.targetIndex === data.index) {\n ideal = 0;\n }\n else if (data.targetIndex > data.index) {\n let tgt = data.tabLayout[data.targetIndex];\n ideal = tgt.pos + tgt.size - data.tabSize - data.tabPos;\n }\n else {\n let tgt = data.tabLayout[data.targetIndex];\n ideal = tgt.pos - data.tabPos;\n }\n // Compute the tab position limit.\n let limit = clientSize - (data.tabPos + data.tabSize);\n let final = Math.max(-data.tabPos, Math.min(ideal, limit));\n // Set the final orientation-sensitive position.\n if (orientation === 'horizontal') {\n data.tab.style.left = `${final}px`;\n }\n else {\n data.tab.style.top = `${final}px`;\n }\n }\n Private.finalizeTabPosition = finalizeTabPosition;\n /**\n * Reset the relative positions of the given tabs.\n */\n function resetTabPositions(tabs, orientation) {\n for (const tab of tabs) {\n if (orientation === 'horizontal') {\n tab.style.left = '';\n }\n else {\n tab.style.top = '';\n }\n }\n }\n Private.resetTabPositions = resetTabPositions;\n})(Private$7 || (Private$7 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which provides a flexible docking arrangement.\n *\n * #### Notes\n * The consumer of this layout is responsible for handling all signals\n * from the generated tab bars and managing the visibility of widgets\n * and tab bars as needed.\n */\nclass DockLayout extends Layout {\n /**\n * Construct a new dock layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options) {\n super();\n this._spacing = 4;\n this._dirty = false;\n this._root = null;\n this._box = null;\n this._items = new Map();\n this.renderer = options.renderer;\n if (options.spacing !== undefined) {\n this._spacing = Utils$1.clampDimension(options.spacing);\n }\n this._document = options.document || document;\n this._hiddenMode =\n options.hiddenMode !== undefined\n ? options.hiddenMode\n : Widget.HiddenMode.Display;\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This will clear and dispose all widgets in the layout.\n */\n dispose() {\n // Get an iterator over the widgets in the layout.\n let widgets = this[Symbol.iterator]();\n // Dispose of the layout items.\n this._items.forEach(item => {\n item.dispose();\n });\n // Clear the layout state before disposing the widgets.\n this._box = null;\n this._root = null;\n this._items.clear();\n // Dispose of the widgets contained in the old layout root.\n for (const widget of widgets) {\n widget.dispose();\n }\n // Dispose of the base class.\n super.dispose();\n }\n /**\n * The method for hiding child widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n set hiddenMode(v) {\n if (this._hiddenMode === v) {\n return;\n }\n this._hiddenMode = v;\n for (const bar of this.tabBars()) {\n if (bar.titles.length > 1) {\n for (const title of bar.titles) {\n title.owner.hiddenMode = this._hiddenMode;\n }\n }\n }\n }\n /**\n * Get the inter-element spacing for the dock layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the dock layout.\n */\n set spacing(value) {\n value = Utils$1.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * Whether the dock layout is empty.\n */\n get isEmpty() {\n return this._root === null;\n }\n /**\n * Create an iterator over all widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n *\n * #### Notes\n * This iterator includes the generated tab bars.\n */\n [Symbol.iterator]() {\n return this._root ? this._root.iterAllWidgets() : empty();\n }\n /**\n * Create an iterator over the user widgets in the layout.\n *\n * @returns A new iterator over the user widgets in the layout.\n *\n * #### Notes\n * This iterator does not include the generated tab bars.\n */\n widgets() {\n return this._root ? this._root.iterUserWidgets() : empty();\n }\n /**\n * Create an iterator over the selected widgets in the layout.\n *\n * @returns A new iterator over the selected user widgets.\n *\n * #### Notes\n * This iterator yields the widgets corresponding to the current tab\n * of each tab bar in the layout.\n */\n selectedWidgets() {\n return this._root ? this._root.iterSelectedWidgets() : empty();\n }\n /**\n * Create an iterator over the tab bars in the layout.\n *\n * @returns A new iterator over the tab bars in the layout.\n *\n * #### Notes\n * This iterator does not include the user widgets.\n */\n tabBars() {\n return this._root ? this._root.iterTabBars() : empty();\n }\n /**\n * Create an iterator over the handles in the layout.\n *\n * @returns A new iterator over the handles in the layout.\n */\n handles() {\n return this._root ? this._root.iterHandles() : empty();\n }\n /**\n * Move a handle to the given offset position.\n *\n * @param handle - The handle to move.\n *\n * @param offsetX - The desired offset X position of the handle.\n *\n * @param offsetY - The desired offset Y position of the handle.\n *\n * #### Notes\n * If the given handle is not contained in the layout, this is no-op.\n *\n * The handle will be moved as close as possible to the desired\n * position without violating any of the layout constraints.\n *\n * Only one of the coordinates is used depending on the orientation\n * of the handle. This method accepts both coordinates to make it\n * easy to invoke from a mouse move event without needing to know\n * the handle orientation.\n */\n moveHandle(handle, offsetX, offsetY) {\n // Bail early if there is no root or if the handle is hidden.\n let hidden = handle.classList.contains('lm-mod-hidden');\n if (!this._root || hidden) {\n return;\n }\n // Lookup the split node for the handle.\n let data = this._root.findSplitNode(handle);\n if (!data) {\n return;\n }\n // Compute the desired delta movement for the handle.\n let delta;\n if (data.node.orientation === 'horizontal') {\n delta = offsetX - handle.offsetLeft;\n }\n else {\n delta = offsetY - handle.offsetTop;\n }\n // Bail if there is no handle movement.\n if (delta === 0) {\n return;\n }\n // Prevent sibling resizing unless needed.\n data.node.holdSizes();\n // Adjust the sizers to reflect the handle movement.\n BoxEngine.adjust(data.node.sizers, data.index, delta);\n // Update the layout of the widgets.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Save the current configuration of the dock layout.\n *\n * @returns A new config object for the current layout state.\n *\n * #### Notes\n * The return value can be provided to the `restoreLayout` method\n * in order to restore the layout to its current configuration.\n */\n saveLayout() {\n // Bail early if there is no root.\n if (!this._root) {\n return { main: null };\n }\n // Hold the current sizes in the layout tree.\n this._root.holdAllSizes();\n // Return the layout config.\n return { main: this._root.createConfig() };\n }\n /**\n * Restore the layout to a previously saved configuration.\n *\n * @param config - The layout configuration to restore.\n *\n * #### Notes\n * Widgets which currently belong to the layout but which are not\n * contained in the config will be unparented.\n */\n restoreLayout(config) {\n // Create the widget set for validating the config.\n let widgetSet = new Set();\n // Normalize the main area config and collect the widgets.\n let mainConfig;\n if (config.main) {\n mainConfig = Private$6.normalizeAreaConfig(config.main, widgetSet);\n }\n else {\n mainConfig = null;\n }\n // Create iterators over the old content.\n let oldWidgets = this.widgets();\n let oldTabBars = this.tabBars();\n let oldHandles = this.handles();\n // Clear the root before removing the old content.\n this._root = null;\n // Unparent the old widgets which are not in the new config.\n for (const widget of oldWidgets) {\n if (!widgetSet.has(widget)) {\n widget.parent = null;\n }\n }\n // Dispose of the old tab bars.\n for (const tabBar of oldTabBars) {\n tabBar.dispose();\n }\n // Remove the old handles.\n for (const handle of oldHandles) {\n if (handle.parentNode) {\n handle.parentNode.removeChild(handle);\n }\n }\n // Reparent the new widgets to the current parent.\n for (const widget of widgetSet) {\n widget.parent = this.parent;\n }\n // Create the root node for the new config.\n if (mainConfig) {\n this._root = Private$6.realizeAreaConfig(mainConfig, {\n // Ignoring optional `document` argument as we must reuse `this._document`\n createTabBar: (document) => this._createTabBar(),\n createHandle: () => this._createHandle()\n }, this._document);\n }\n else {\n this._root = null;\n }\n // If there is no parent, there is nothing more to do.\n if (!this.parent) {\n return;\n }\n // Attach the new widgets to the parent.\n widgetSet.forEach(widget => {\n this.attachWidget(widget);\n });\n // Post a fit request to the parent.\n this.parent.fit();\n }\n /**\n * Add a widget to the dock layout.\n *\n * @param widget - The widget to add to the dock layout.\n *\n * @param options - The additional options for adding the widget.\n *\n * #### Notes\n * The widget will be moved if it is already contained in the layout.\n *\n * An error will be thrown if the reference widget is invalid.\n */\n addWidget(widget, options = {}) {\n // Parse the options.\n let ref = options.ref || null;\n let mode = options.mode || 'tab-after';\n // Find the tab node which holds the reference widget.\n let refNode = null;\n if (this._root && ref) {\n refNode = this._root.findTabNode(ref);\n }\n // Throw an error if the reference widget is invalid.\n if (ref && !refNode) {\n throw new Error('Reference widget is not in the layout.');\n }\n // Reparent the widget to the current layout parent.\n widget.parent = this.parent;\n // Insert the widget according to the insert mode.\n switch (mode) {\n case 'tab-after':\n this._insertTab(widget, ref, refNode, true);\n break;\n case 'tab-before':\n this._insertTab(widget, ref, refNode, false);\n break;\n case 'split-top':\n this._insertSplit(widget, ref, refNode, 'vertical', false);\n break;\n case 'split-left':\n this._insertSplit(widget, ref, refNode, 'horizontal', false);\n break;\n case 'split-right':\n this._insertSplit(widget, ref, refNode, 'horizontal', true);\n break;\n case 'split-bottom':\n this._insertSplit(widget, ref, refNode, 'vertical', true);\n break;\n case 'merge-top':\n this._insertSplit(widget, ref, refNode, 'vertical', false, true);\n break;\n case 'merge-left':\n this._insertSplit(widget, ref, refNode, 'horizontal', false, true);\n break;\n case 'merge-right':\n this._insertSplit(widget, ref, refNode, 'horizontal', true, true);\n break;\n case 'merge-bottom':\n this._insertSplit(widget, ref, refNode, 'vertical', true, true);\n break;\n }\n // Do nothing else if there is no parent widget.\n if (!this.parent) {\n return;\n }\n // Ensure the widget is attached to the parent widget.\n this.attachWidget(widget);\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Remove the widget from its current layout location.\n this._removeWidget(widget);\n // Do nothing else if there is no parent widget.\n if (!this.parent) {\n return;\n }\n // Detach the widget from the parent widget.\n this.detachWidget(widget);\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Find the tab area which contains the given client position.\n *\n * @param clientX - The client X position of interest.\n *\n * @param clientY - The client Y position of interest.\n *\n * @returns The geometry of the tab area at the given position, or\n * `null` if there is no tab area at the given position.\n */\n hitTestTabAreas(clientX, clientY) {\n // Bail early if hit testing cannot produce valid results.\n if (!this._root || !this.parent || !this.parent.isVisible) {\n return null;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Convert from client to local coordinates.\n let rect = this.parent.node.getBoundingClientRect();\n let x = clientX - rect.left - this._box.borderLeft;\n let y = clientY - rect.top - this._box.borderTop;\n // Find the tab layout node at the local position.\n let tabNode = this._root.hitTestTabNodes(x, y);\n // Bail if a tab layout node was not found.\n if (!tabNode) {\n return null;\n }\n // Extract the data from the tab node.\n let { tabBar, top, left, width, height } = tabNode;\n // Compute the right and bottom edges of the tab area.\n let borderWidth = this._box.borderLeft + this._box.borderRight;\n let borderHeight = this._box.borderTop + this._box.borderBottom;\n let right = rect.width - borderWidth - (left + width);\n let bottom = rect.height - borderHeight - (top + height);\n // Return the hit test results.\n return { tabBar, x, y, top, left, right, bottom, width, height };\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n // Perform superclass initialization.\n super.init();\n // Attach each widget to the parent.\n for (const widget of this) {\n this.attachWidget(widget);\n }\n // Attach each handle to the parent.\n for (const handle of this.handles()) {\n this.parent.node.appendChild(handle);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Attach the widget to the layout parent widget.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a no-op if the widget is already attached.\n */\n attachWidget(widget) {\n // Do nothing if the widget is already attached.\n if (this.parent.node === widget.node.parentNode) {\n return;\n }\n // Create the layout item for the widget.\n this._items.set(widget, new LayoutItem(widget));\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach the widget from the layout parent widget.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a no-op if the widget is not attached.\n */\n detachWidget(widget) {\n // Do nothing if the widget is not attached.\n if (this.parent.node !== widget.node.parentNode) {\n return;\n }\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Delete the layout item for the widget.\n let item = this._items.get(widget);\n if (item) {\n this._items.delete(widget);\n item.dispose();\n }\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Remove the specified widget from the layout structure.\n *\n * #### Notes\n * This is a no-op if the widget is not in the layout tree.\n *\n * This does not detach the widget from the parent node.\n */\n _removeWidget(widget) {\n // Bail early if there is no layout root.\n if (!this._root) {\n return;\n }\n // Find the tab node which contains the given widget.\n let tabNode = this._root.findTabNode(widget);\n // Bail early if the tab node is not found.\n if (!tabNode) {\n return;\n }\n Private$6.removeAria(widget);\n // If there are multiple tabs, just remove the widget's tab.\n if (tabNode.tabBar.titles.length > 1) {\n tabNode.tabBar.removeTab(widget.title);\n if (this._hiddenMode === Widget.HiddenMode.Scale &&\n tabNode.tabBar.titles.length == 1) {\n const existingWidget = tabNode.tabBar.titles[0].owner;\n existingWidget.hiddenMode = Widget.HiddenMode.Display;\n }\n return;\n }\n // Otherwise, the tab node needs to be removed...\n // Dispose the tab bar.\n tabNode.tabBar.dispose();\n // Handle the case where the tab node is the root.\n if (this._root === tabNode) {\n this._root = null;\n return;\n }\n // Otherwise, remove the tab node from its parent...\n // Prevent widget resizing unless needed.\n this._root.holdAllSizes();\n // Clear the parent reference on the tab node.\n let splitNode = tabNode.parent;\n tabNode.parent = null;\n // Remove the tab node from its parent split node.\n let i = ArrayExt.removeFirstOf(splitNode.children, tabNode);\n let handle = ArrayExt.removeAt(splitNode.handles, i);\n ArrayExt.removeAt(splitNode.sizers, i);\n // Remove the handle from its parent DOM node.\n if (handle.parentNode) {\n handle.parentNode.removeChild(handle);\n }\n // If there are multiple children, just update the handles.\n if (splitNode.children.length > 1) {\n splitNode.syncHandles();\n return;\n }\n // Otherwise, the split node also needs to be removed...\n // Clear the parent reference on the split node.\n let maybeParent = splitNode.parent;\n splitNode.parent = null;\n // Lookup the remaining child node and handle.\n let childNode = splitNode.children[0];\n let childHandle = splitNode.handles[0];\n // Clear the split node data.\n splitNode.children.length = 0;\n splitNode.handles.length = 0;\n splitNode.sizers.length = 0;\n // Remove the child handle from its parent node.\n if (childHandle.parentNode) {\n childHandle.parentNode.removeChild(childHandle);\n }\n // Handle the case where the split node is the root.\n if (this._root === splitNode) {\n childNode.parent = null;\n this._root = childNode;\n return;\n }\n // Otherwise, move the child node to the parent node...\n let parentNode = maybeParent;\n // Lookup the index of the split node.\n let j = parentNode.children.indexOf(splitNode);\n // Handle the case where the child node is a tab node.\n if (childNode instanceof Private$6.TabLayoutNode) {\n childNode.parent = parentNode;\n parentNode.children[j] = childNode;\n return;\n }\n // Remove the split data from the parent.\n let splitHandle = ArrayExt.removeAt(parentNode.handles, j);\n ArrayExt.removeAt(parentNode.children, j);\n ArrayExt.removeAt(parentNode.sizers, j);\n // Remove the handle from its parent node.\n if (splitHandle.parentNode) {\n splitHandle.parentNode.removeChild(splitHandle);\n }\n // The child node and the split parent node will have the same\n // orientation. Merge the grand-children with the parent node.\n for (let i = 0, n = childNode.children.length; i < n; ++i) {\n let gChild = childNode.children[i];\n let gHandle = childNode.handles[i];\n let gSizer = childNode.sizers[i];\n ArrayExt.insert(parentNode.children, j + i, gChild);\n ArrayExt.insert(parentNode.handles, j + i, gHandle);\n ArrayExt.insert(parentNode.sizers, j + i, gSizer);\n gChild.parent = parentNode;\n }\n // Clear the child node.\n childNode.children.length = 0;\n childNode.handles.length = 0;\n childNode.sizers.length = 0;\n childNode.parent = null;\n // Sync the handles on the parent node.\n parentNode.syncHandles();\n }\n /**\n * Create the tab layout node to hold the widget.\n */\n _createTabNode(widget) {\n let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n tabNode.tabBar.addTab(widget.title);\n Private$6.addAria(widget, tabNode.tabBar);\n return tabNode;\n }\n /**\n * Insert a widget next to an existing tab.\n *\n * #### Notes\n * This does not attach the widget to the parent widget.\n */\n _insertTab(widget, ref, refNode, after) {\n // Do nothing if the tab is inserted next to itself.\n if (widget === ref) {\n return;\n }\n // Create the root if it does not exist.\n if (!this._root) {\n let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n tabNode.tabBar.addTab(widget.title);\n this._root = tabNode;\n Private$6.addAria(widget, tabNode.tabBar);\n return;\n }\n // Use the first tab node as the ref node if needed.\n if (!refNode) {\n refNode = this._root.findFirstTabNode();\n }\n // If the widget is not contained in the ref node, ensure it is\n // removed from the layout and hidden before being added again.\n if (refNode.tabBar.titles.indexOf(widget.title) === -1) {\n this._removeWidget(widget);\n widget.hide();\n }\n // Lookup the target index for inserting the tab.\n let index;\n if (ref) {\n index = refNode.tabBar.titles.indexOf(ref.title);\n }\n else {\n index = refNode.tabBar.currentIndex;\n }\n // Using transform create an additional layer in the pixel pipeline\n // to limit the number of layer, it is set only if there is more than one widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale) {\n if (refNode.tabBar.titles.length === 0) {\n // Singular tab should use display mode to limit number of layers.\n widget.hiddenMode = Widget.HiddenMode.Display;\n }\n else if (refNode.tabBar.titles.length == 1) {\n // If we are adding a second tab, switch the existing tab back to scale.\n const existingWidget = refNode.tabBar.titles[0].owner;\n existingWidget.hiddenMode = Widget.HiddenMode.Scale;\n }\n else {\n // For the third and subsequent tabs no special action is needed.\n widget.hiddenMode = Widget.HiddenMode.Scale;\n }\n }\n else {\n // For all other modes just propagate the current mode.\n widget.hiddenMode = this._hiddenMode;\n }\n // Insert the widget's tab relative to the target index.\n refNode.tabBar.insertTab(index + (after ? 1 : 0), widget.title);\n Private$6.addAria(widget, refNode.tabBar);\n }\n /**\n * Insert a widget as a new split area.\n *\n * #### Notes\n * This does not attach the widget to the parent widget.\n */\n _insertSplit(widget, ref, refNode, orientation, after, merge = false) {\n // Do nothing if there is no effective split.\n if (widget === ref && refNode && refNode.tabBar.titles.length === 1) {\n return;\n }\n // Ensure the widget is removed from the current layout.\n this._removeWidget(widget);\n // Set the root if it does not exist.\n if (!this._root) {\n this._root = this._createTabNode(widget);\n return;\n }\n // If the ref node parent is null, split the root.\n if (!refNode || !refNode.parent) {\n // Ensure the root is split with the correct orientation.\n let root = this._splitRoot(orientation);\n // Determine the insert index for the new tab node.\n let i = after ? root.children.length : 0;\n // Normalize the split node.\n root.normalizeSizes();\n // Create the sizer for new tab node.\n let sizer = Private$6.createSizer(refNode ? 1 : Private$6.GOLDEN_RATIO);\n // Insert the tab node sized to the golden ratio.\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(root.children, i, tabNode);\n ArrayExt.insert(root.sizers, i, sizer);\n ArrayExt.insert(root.handles, i, this._createHandle());\n tabNode.parent = root;\n // Re-normalize the split node to maintain the ratios.\n root.normalizeSizes();\n // Finally, synchronize the visibility of the handles.\n root.syncHandles();\n return;\n }\n // Lookup the split node for the ref widget.\n let splitNode = refNode.parent;\n // If the split node already had the correct orientation,\n // the widget can be inserted into the split node directly.\n if (splitNode.orientation === orientation) {\n // Find the index of the ref node.\n let i = splitNode.children.indexOf(refNode);\n // Conditionally reuse a tab layout found in the wanted position.\n if (merge) {\n let j = i + (after ? 1 : -1);\n let sibling = splitNode.children[j];\n if (sibling instanceof Private$6.TabLayoutNode) {\n this._insertTab(widget, null, sibling, true);\n ++sibling.tabBar.currentIndex;\n return;\n }\n }\n // Normalize the split node.\n splitNode.normalizeSizes();\n // Consume half the space for the insert location.\n let s = (splitNode.sizers[i].sizeHint /= 2);\n // Insert the tab node sized to the other half.\n let j = i + (after ? 1 : 0);\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(splitNode.children, j, tabNode);\n ArrayExt.insert(splitNode.sizers, j, Private$6.createSizer(s));\n ArrayExt.insert(splitNode.handles, j, this._createHandle());\n tabNode.parent = splitNode;\n // Finally, synchronize the visibility of the handles.\n splitNode.syncHandles();\n return;\n }\n // Remove the ref node from the split node.\n let i = ArrayExt.removeFirstOf(splitNode.children, refNode);\n // Create a new normalized split node for the children.\n let childNode = new Private$6.SplitLayoutNode(orientation);\n childNode.normalized = true;\n // Add the ref node sized to half the space.\n childNode.children.push(refNode);\n childNode.sizers.push(Private$6.createSizer(0.5));\n childNode.handles.push(this._createHandle());\n refNode.parent = childNode;\n // Add the tab node sized to the other half.\n let j = after ? 1 : 0;\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(childNode.children, j, tabNode);\n ArrayExt.insert(childNode.sizers, j, Private$6.createSizer(0.5));\n ArrayExt.insert(childNode.handles, j, this._createHandle());\n tabNode.parent = childNode;\n // Synchronize the visibility of the handles.\n childNode.syncHandles();\n // Finally, add the new child node to the original split node.\n ArrayExt.insert(splitNode.children, i, childNode);\n childNode.parent = splitNode;\n }\n /**\n * Ensure the root is a split node with the given orientation.\n */\n _splitRoot(orientation) {\n // Bail early if the root already meets the requirements.\n let oldRoot = this._root;\n if (oldRoot instanceof Private$6.SplitLayoutNode) {\n if (oldRoot.orientation === orientation) {\n return oldRoot;\n }\n }\n // Create a new root node with the specified orientation.\n let newRoot = (this._root = new Private$6.SplitLayoutNode(orientation));\n // Add the old root to the new root.\n if (oldRoot) {\n newRoot.children.push(oldRoot);\n newRoot.sizers.push(Private$6.createSizer(0));\n newRoot.handles.push(this._createHandle());\n oldRoot.parent = newRoot;\n }\n // Return the new root as a convenience.\n return newRoot;\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Set up the computed minimum size.\n let minW = 0;\n let minH = 0;\n // Update the size limits for the layout tree.\n if (this._root) {\n let limits = this._root.fit(this._spacing, this._items);\n minW = limits.minWidth;\n minH = limits.minHeight;\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Bail early if there is no root layout node.\n if (!this._root) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let x = this._box.paddingTop;\n let y = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Update the geometry of the layout tree.\n this._root.update(x, y, width, height, this._spacing, this._items);\n }\n /**\n * Create a new tab bar for use by the dock layout.\n *\n * #### Notes\n * The tab bar will be attached to the parent if it exists.\n */\n _createTabBar() {\n // Create the tab bar using the renderer.\n let tabBar = this.renderer.createTabBar(this._document);\n // Enforce necessary tab bar behavior.\n tabBar.orientation = 'horizontal';\n // Attach the tab bar to the parent if possible.\n if (this.parent) {\n this.attachWidget(tabBar);\n }\n // Return the initialized tab bar.\n return tabBar;\n }\n /**\n * Create a new handle for the dock layout.\n *\n * #### Notes\n * The handle will be attached to the parent if it exists.\n */\n _createHandle() {\n // Create the handle using the renderer.\n let handle = this.renderer.createHandle();\n // Initialize the handle layout behavior.\n let style = handle.style;\n style.position = 'absolute';\n style.contain = 'strict';\n style.top = '0';\n style.left = '0';\n style.width = '0';\n style.height = '0';\n // Attach the handle to the parent if it exists.\n if (this.parent) {\n this.parent.node.appendChild(handle);\n }\n // Return the initialized handle.\n return handle;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$6;\n(function (Private) {\n /**\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n */\n Private.GOLDEN_RATIO = 0.618;\n /**\n * Create a box sizer with an initial size hint.\n */\n function createSizer(hint) {\n let sizer = new BoxSizer();\n sizer.sizeHint = hint;\n sizer.size = hint;\n return sizer;\n }\n Private.createSizer = createSizer;\n /**\n * Normalize an area config object and collect the visited widgets.\n */\n function normalizeAreaConfig(config, widgetSet) {\n let result;\n if (config.type === 'tab-area') {\n result = normalizeTabAreaConfig(config, widgetSet);\n }\n else {\n result = normalizeSplitAreaConfig(config, widgetSet);\n }\n return result;\n }\n Private.normalizeAreaConfig = normalizeAreaConfig;\n /**\n * Convert a normalized area config into a layout tree.\n */\n function realizeAreaConfig(config, renderer, document) {\n let node;\n if (config.type === 'tab-area') {\n node = realizeTabAreaConfig(config, renderer, document);\n }\n else {\n node = realizeSplitAreaConfig(config, renderer, document);\n }\n return node;\n }\n Private.realizeAreaConfig = realizeAreaConfig;\n /**\n * A layout node which holds the data for a tabbed area.\n */\n class TabLayoutNode {\n /**\n * Construct a new tab layout node.\n *\n * @param tabBar - The tab bar to use for the layout node.\n */\n constructor(tabBar) {\n /**\n * The parent of the layout node.\n */\n this.parent = null;\n this._top = 0;\n this._left = 0;\n this._width = 0;\n this._height = 0;\n let tabSizer = new BoxSizer();\n let widgetSizer = new BoxSizer();\n tabSizer.stretch = 0;\n widgetSizer.stretch = 1;\n this.tabBar = tabBar;\n this.sizers = [tabSizer, widgetSizer];\n }\n /**\n * The most recent value for the `top` edge of the layout box.\n */\n get top() {\n return this._top;\n }\n /**\n * The most recent value for the `left` edge of the layout box.\n */\n get left() {\n return this._left;\n }\n /**\n * The most recent value for the `width` of the layout box.\n */\n get width() {\n return this._width;\n }\n /**\n * The most recent value for the `height` of the layout box.\n */\n get height() {\n return this._height;\n }\n /**\n * Create an iterator for all widgets in the layout tree.\n */\n *iterAllWidgets() {\n yield this.tabBar;\n yield* this.iterUserWidgets();\n }\n /**\n * Create an iterator for the user widgets in the layout tree.\n */\n *iterUserWidgets() {\n for (const title of this.tabBar.titles) {\n yield title.owner;\n }\n }\n /**\n * Create an iterator for the selected widgets in the layout tree.\n */\n *iterSelectedWidgets() {\n let title = this.tabBar.currentTitle;\n if (title) {\n yield title.owner;\n }\n }\n /**\n * Create an iterator for the tab bars in the layout tree.\n */\n *iterTabBars() {\n yield this.tabBar;\n }\n /**\n * Create an iterator for the handles in the layout tree.\n */\n // eslint-disable-next-line require-yield\n *iterHandles() {\n return;\n }\n /**\n * Find the tab layout node which contains the given widget.\n */\n findTabNode(widget) {\n return this.tabBar.titles.indexOf(widget.title) !== -1 ? this : null;\n }\n /**\n * Find the split layout node which contains the given handle.\n */\n findSplitNode(handle) {\n return null;\n }\n /**\n * Find the first tab layout node in a layout tree.\n */\n findFirstTabNode() {\n return this;\n }\n /**\n * Find the tab layout node which contains the local point.\n */\n hitTestTabNodes(x, y) {\n if (x < this._left || x >= this._left + this._width) {\n return null;\n }\n if (y < this._top || y >= this._top + this._height) {\n return null;\n }\n return this;\n }\n /**\n * Create a configuration object for the layout tree.\n */\n createConfig() {\n let widgets = this.tabBar.titles.map(title => title.owner);\n let currentIndex = this.tabBar.currentIndex;\n return { type: 'tab-area', widgets, currentIndex };\n }\n /**\n * Recursively hold all of the sizes in the layout tree.\n *\n * This ignores the sizers of tab layout nodes.\n */\n holdAllSizes() {\n return;\n }\n /**\n * Fit the layout tree.\n */\n fit(spacing, items) {\n // Set up the limit variables.\n let minWidth = 0;\n let minHeight = 0;\n let maxWidth = Infinity;\n let maxHeight = Infinity;\n // Lookup the tab bar layout item.\n let tabBarItem = items.get(this.tabBar);\n // Lookup the widget layout item.\n let current = this.tabBar.currentTitle;\n let widgetItem = current ? items.get(current.owner) : undefined;\n // Lookup the tab bar and widget sizers.\n let [tabBarSizer, widgetSizer] = this.sizers;\n // Update the tab bar limits.\n if (tabBarItem) {\n tabBarItem.fit();\n }\n // Update the widget limits.\n if (widgetItem) {\n widgetItem.fit();\n }\n // Update the results and sizer for the tab bar.\n if (tabBarItem && !tabBarItem.isHidden) {\n minWidth = Math.max(minWidth, tabBarItem.minWidth);\n minHeight += tabBarItem.minHeight;\n tabBarSizer.minSize = tabBarItem.minHeight;\n tabBarSizer.maxSize = tabBarItem.maxHeight;\n }\n else {\n tabBarSizer.minSize = 0;\n tabBarSizer.maxSize = 0;\n }\n // Update the results and sizer for the current widget.\n if (widgetItem && !widgetItem.isHidden) {\n minWidth = Math.max(minWidth, widgetItem.minWidth);\n minHeight += widgetItem.minHeight;\n widgetSizer.minSize = widgetItem.minHeight;\n widgetSizer.maxSize = Infinity;\n }\n else {\n widgetSizer.minSize = 0;\n widgetSizer.maxSize = Infinity;\n }\n // Return the computed size limits for the layout node.\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n /**\n * Update the layout tree.\n */\n update(left, top, width, height, spacing, items) {\n // Update the layout box values.\n this._top = top;\n this._left = left;\n this._width = width;\n this._height = height;\n // Lookup the tab bar layout item.\n let tabBarItem = items.get(this.tabBar);\n // Lookup the widget layout item.\n let current = this.tabBar.currentTitle;\n let widgetItem = current ? items.get(current.owner) : undefined;\n // Distribute the layout space to the sizers.\n BoxEngine.calc(this.sizers, height);\n // Update the tab bar item using the computed size.\n if (tabBarItem && !tabBarItem.isHidden) {\n let size = this.sizers[0].size;\n tabBarItem.update(left, top, width, size);\n top += size;\n }\n // Layout the widget using the computed size.\n if (widgetItem && !widgetItem.isHidden) {\n let size = this.sizers[1].size;\n widgetItem.update(left, top, width, size);\n }\n }\n }\n Private.TabLayoutNode = TabLayoutNode;\n /**\n * A layout node which holds the data for a split area.\n */\n class SplitLayoutNode {\n /**\n * Construct a new split layout node.\n *\n * @param orientation - The orientation of the node.\n */\n constructor(orientation) {\n /**\n * The parent of the layout node.\n */\n this.parent = null;\n /**\n * Whether the sizers have been normalized.\n */\n this.normalized = false;\n /**\n * The child nodes for the split node.\n */\n this.children = [];\n /**\n * The box sizers for the layout children.\n */\n this.sizers = [];\n /**\n * The handles for the layout children.\n */\n this.handles = [];\n this.orientation = orientation;\n }\n /**\n * Create an iterator for all widgets in the layout tree.\n */\n *iterAllWidgets() {\n for (const child of this.children) {\n yield* child.iterAllWidgets();\n }\n }\n /**\n * Create an iterator for the user widgets in the layout tree.\n */\n *iterUserWidgets() {\n for (const child of this.children) {\n yield* child.iterUserWidgets();\n }\n }\n /**\n * Create an iterator for the selected widgets in the layout tree.\n */\n *iterSelectedWidgets() {\n for (const child of this.children) {\n yield* child.iterSelectedWidgets();\n }\n }\n /**\n * Create an iterator for the tab bars in the layout tree.\n */\n *iterTabBars() {\n for (const child of this.children) {\n yield* child.iterTabBars();\n }\n }\n /**\n * Create an iterator for the handles in the layout tree.\n */\n *iterHandles() {\n yield* this.handles;\n for (const child of this.children) {\n yield* child.iterHandles();\n }\n }\n /**\n * Find the tab layout node which contains the given widget.\n */\n findTabNode(widget) {\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].findTabNode(widget);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Find the split layout node which contains the given handle.\n */\n findSplitNode(handle) {\n let index = this.handles.indexOf(handle);\n if (index !== -1) {\n return { index, node: this };\n }\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].findSplitNode(handle);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Find the first tab layout node in a layout tree.\n */\n findFirstTabNode() {\n if (this.children.length === 0) {\n return null;\n }\n return this.children[0].findFirstTabNode();\n }\n /**\n * Find the tab layout node which contains the local point.\n */\n hitTestTabNodes(x, y) {\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].hitTestTabNodes(x, y);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Create a configuration object for the layout tree.\n */\n createConfig() {\n let orientation = this.orientation;\n let sizes = this.createNormalizedSizes();\n let children = this.children.map(child => child.createConfig());\n return { type: 'split-area', orientation, children, sizes };\n }\n /**\n * Sync the visibility and orientation of the handles.\n */\n syncHandles() {\n this.handles.forEach((handle, i) => {\n handle.setAttribute('data-orientation', this.orientation);\n if (i === this.handles.length - 1) {\n handle.classList.add('lm-mod-hidden');\n }\n else {\n handle.classList.remove('lm-mod-hidden');\n }\n });\n }\n /**\n * Hold the current sizes of the box sizers.\n *\n * This sets the size hint of each sizer to its current size.\n */\n holdSizes() {\n for (const sizer of this.sizers) {\n sizer.sizeHint = sizer.size;\n }\n }\n /**\n * Recursively hold all of the sizes in the layout tree.\n *\n * This ignores the sizers of tab layout nodes.\n */\n holdAllSizes() {\n for (const child of this.children) {\n child.holdAllSizes();\n }\n this.holdSizes();\n }\n /**\n * Normalize the sizes of the split layout node.\n */\n normalizeSizes() {\n // Bail early if the sizers are empty.\n let n = this.sizers.length;\n if (n === 0) {\n return;\n }\n // Hold the current sizes of the sizers.\n this.holdSizes();\n // Compute the sum of the sizes.\n let sum = this.sizers.reduce((v, sizer) => v + sizer.sizeHint, 0);\n // Normalize the sizes based on the sum.\n if (sum === 0) {\n for (const sizer of this.sizers) {\n sizer.size = sizer.sizeHint = 1 / n;\n }\n }\n else {\n for (const sizer of this.sizers) {\n sizer.size = sizer.sizeHint /= sum;\n }\n }\n // Mark the sizes as normalized.\n this.normalized = true;\n }\n /**\n * Snap the normalized sizes of the split layout node.\n */\n createNormalizedSizes() {\n // Bail early if the sizers are empty.\n let n = this.sizers.length;\n if (n === 0) {\n return [];\n }\n // Grab the current sizes of the sizers.\n let sizes = this.sizers.map(sizer => sizer.size);\n // Compute the sum of the sizes.\n let sum = sizes.reduce((v, size) => v + size, 0);\n // Normalize the sizes based on the sum.\n if (sum === 0) {\n for (let i = sizes.length - 1; i > -1; i--) {\n sizes[i] = 1 / n;\n }\n }\n else {\n for (let i = sizes.length - 1; i > -1; i--) {\n sizes[i] /= sum;\n }\n }\n // Return the normalized sizes.\n return sizes;\n }\n /**\n * Fit the layout tree.\n */\n fit(spacing, items) {\n // Compute the required fixed space.\n let horizontal = this.orientation === 'horizontal';\n let fixed = Math.max(0, this.children.length - 1) * spacing;\n // Set up the limit variables.\n let minWidth = horizontal ? fixed : 0;\n let minHeight = horizontal ? 0 : fixed;\n let maxWidth = Infinity;\n let maxHeight = Infinity;\n // Fit the children and update the limits.\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let limits = this.children[i].fit(spacing, items);\n if (horizontal) {\n minHeight = Math.max(minHeight, limits.minHeight);\n minWidth += limits.minWidth;\n this.sizers[i].minSize = limits.minWidth;\n }\n else {\n minWidth = Math.max(minWidth, limits.minWidth);\n minHeight += limits.minHeight;\n this.sizers[i].minSize = limits.minHeight;\n }\n }\n // Return the computed limits for the layout node.\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n /**\n * Update the layout tree.\n */\n update(left, top, width, height, spacing, items) {\n // Compute the available layout space.\n let horizontal = this.orientation === 'horizontal';\n let fixed = Math.max(0, this.children.length - 1) * spacing;\n let space = Math.max(0, (horizontal ? width : height) - fixed);\n // De-normalize the sizes if needed.\n if (this.normalized) {\n for (const sizer of this.sizers) {\n sizer.sizeHint *= space;\n }\n this.normalized = false;\n }\n // Distribute the layout space to the sizers.\n BoxEngine.calc(this.sizers, space);\n // Update the geometry of the child nodes and handles.\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let child = this.children[i];\n let size = this.sizers[i].size;\n let handleStyle = this.handles[i].style;\n if (horizontal) {\n child.update(left, top, size, height, spacing, items);\n left += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${spacing}px`;\n handleStyle.height = `${height}px`;\n left += spacing;\n }\n else {\n child.update(left, top, width, size, spacing, items);\n top += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${width}px`;\n handleStyle.height = `${spacing}px`;\n top += spacing;\n }\n }\n }\n }\n Private.SplitLayoutNode = SplitLayoutNode;\n function addAria(widget, tabBar) {\n widget.node.setAttribute('role', 'tabpanel');\n let renderer = tabBar.renderer;\n if (renderer instanceof TabBar.Renderer) {\n let tabId = renderer.createTabKey({\n title: widget.title,\n current: false,\n zIndex: 0\n });\n widget.node.setAttribute('aria-labelledby', tabId);\n }\n }\n Private.addAria = addAria;\n function removeAria(widget) {\n widget.node.removeAttribute('role');\n widget.node.removeAttribute('aria-labelledby');\n }\n Private.removeAria = removeAria;\n /**\n * Normalize a tab area config and collect the visited widgets.\n */\n function normalizeTabAreaConfig(config, widgetSet) {\n // Bail early if there is no content.\n if (config.widgets.length === 0) {\n return null;\n }\n // Setup the filtered widgets array.\n let widgets = [];\n // Filter the config for unique widgets.\n for (const widget of config.widgets) {\n if (!widgetSet.has(widget)) {\n widgetSet.add(widget);\n widgets.push(widget);\n }\n }\n // Bail if there are no effective widgets.\n if (widgets.length === 0) {\n return null;\n }\n // Normalize the current index.\n let index = config.currentIndex;\n if (index !== -1 && (index < 0 || index >= widgets.length)) {\n index = 0;\n }\n // Return a normalized config object.\n return { type: 'tab-area', widgets, currentIndex: index };\n }\n /**\n * Normalize a split area config and collect the visited widgets.\n */\n function normalizeSplitAreaConfig(config, widgetSet) {\n // Set up the result variables.\n let orientation = config.orientation;\n let children = [];\n let sizes = [];\n // Normalize the config children.\n for (let i = 0, n = config.children.length; i < n; ++i) {\n // Normalize the child config.\n let child = normalizeAreaConfig(config.children[i], widgetSet);\n // Ignore an empty child.\n if (!child) {\n continue;\n }\n // Add the child or hoist its content as appropriate.\n if (child.type === 'tab-area' || child.orientation !== orientation) {\n children.push(child);\n sizes.push(Math.abs(config.sizes[i] || 0));\n }\n else {\n children.push(...child.children);\n sizes.push(...child.sizes);\n }\n }\n // Bail if there are no effective children.\n if (children.length === 0) {\n return null;\n }\n // If there is only one effective child, return that child.\n if (children.length === 1) {\n return children[0];\n }\n // Return a normalized config object.\n return { type: 'split-area', orientation, children, sizes };\n }\n /**\n * Convert a normalized tab area config into a layout tree.\n */\n function realizeTabAreaConfig(config, renderer, document) {\n // Create the tab bar for the layout node.\n let tabBar = renderer.createTabBar(document);\n // Hide each widget and add it to the tab bar.\n for (const widget of config.widgets) {\n widget.hide();\n tabBar.addTab(widget.title);\n Private.addAria(widget, tabBar);\n }\n // Set the current index of the tab bar.\n tabBar.currentIndex = config.currentIndex;\n // Return the new tab layout node.\n return new TabLayoutNode(tabBar);\n }\n /**\n * Convert a normalized split area config into a layout tree.\n */\n function realizeSplitAreaConfig(config, renderer, document) {\n // Create the split layout node.\n let node = new SplitLayoutNode(config.orientation);\n // Add each child to the layout node.\n config.children.forEach((child, i) => {\n // Create the child data for the layout node.\n let childNode = realizeAreaConfig(child, renderer, document);\n let sizer = createSizer(config.sizes[i]);\n let handle = renderer.createHandle();\n // Add the child data to the layout node.\n node.children.push(childNode);\n node.handles.push(handle);\n node.sizers.push(sizer);\n // Update the parent for the child node.\n childNode.parent = node;\n });\n // Synchronize the handle state for the layout node.\n node.syncHandles();\n // Normalize the sizes for the layout node.\n node.normalizeSizes();\n // Return the new layout node.\n return node;\n }\n})(Private$6 || (Private$6 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which provides a flexible docking area for widgets.\n */\nclass DockPanel extends Widget {\n /**\n * Construct a new dock panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super();\n this._drag = null;\n this._tabsMovable = true;\n this._tabsConstrained = false;\n this._addButtonEnabled = false;\n this._pressData = null;\n this._layoutModified = new Signal(this);\n this._addRequested = new Signal(this);\n this.addClass('lm-DockPanel');\n this._document = options.document || document;\n this._mode = options.mode || 'multiple-document';\n this._renderer = options.renderer || DockPanel.defaultRenderer;\n this._edges = options.edges || Private$5.DEFAULT_EDGES;\n if (options.tabsMovable !== undefined) {\n this._tabsMovable = options.tabsMovable;\n }\n if (options.tabsConstrained !== undefined) {\n this._tabsConstrained = options.tabsConstrained;\n }\n if (options.addButtonEnabled !== undefined) {\n this._addButtonEnabled = options.addButtonEnabled;\n }\n // Toggle the CSS mode attribute.\n this.dataset['mode'] = this._mode;\n // Create the delegate renderer for the layout.\n let renderer = {\n createTabBar: () => this._createTabBar(),\n createHandle: () => this._createHandle()\n };\n // Set up the dock layout for the panel.\n this.layout = new DockLayout({\n document: this._document,\n renderer,\n spacing: options.spacing,\n hiddenMode: options.hiddenMode\n });\n // Set up the overlay drop indicator.\n this.overlay = options.overlay || new DockPanel.Overlay();\n this.node.appendChild(this.overlay.node);\n }\n /**\n * Dispose of the resources held by the panel.\n */\n dispose() {\n // Ensure the mouse is released.\n this._releaseMouse();\n // Hide the overlay.\n this.overlay.hide(0);\n // Cancel a drag if one is in progress.\n if (this._drag) {\n this._drag.dispose();\n }\n // Dispose of the base class.\n super.dispose();\n }\n /**\n * The method for hiding widgets.\n */\n get hiddenMode() {\n return this.layout.hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n */\n set hiddenMode(v) {\n this.layout.hiddenMode = v;\n }\n /**\n * A signal emitted when the layout configuration is modified.\n *\n * #### Notes\n * This signal is emitted whenever the current layout configuration\n * may have changed.\n *\n * This signal is emitted asynchronously in a collapsed fashion, so\n * that multiple synchronous modifications results in only a single\n * emit of the signal.\n */\n get layoutModified() {\n return this._layoutModified;\n }\n /**\n * A signal emitted when the add button on a tab bar is clicked.\n *\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * The renderer used by the dock panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * Get the spacing between the widgets.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the spacing between the widgets.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * Get the mode for the dock panel.\n */\n get mode() {\n return this._mode;\n }\n /**\n * Set the mode for the dock panel.\n *\n * #### Notes\n * Changing the mode is a destructive operation with respect to the\n * panel's layout configuration. If layout state must be preserved,\n * save the current layout config before changing the mode.\n */\n set mode(value) {\n // Bail early if the mode does not change.\n if (this._mode === value) {\n return;\n }\n // Update the internal mode.\n this._mode = value;\n // Toggle the CSS mode attribute.\n this.dataset['mode'] = value;\n // Get the layout for the panel.\n let layout = this.layout;\n // Configure the layout for the specified mode.\n switch (value) {\n case 'multiple-document':\n for (const tabBar of layout.tabBars()) {\n tabBar.show();\n }\n break;\n case 'single-document':\n layout.restoreLayout(Private$5.createSingleDocumentConfig(this));\n break;\n default:\n throw 'unreachable';\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Whether the tabs can be dragged / moved at runtime.\n */\n get tabsMovable() {\n return this._tabsMovable;\n }\n /**\n * Enable / Disable draggable / movable tabs.\n */\n set tabsMovable(value) {\n this._tabsMovable = value;\n for (const tabBar of this.tabBars()) {\n tabBar.tabsMovable = value;\n }\n }\n /**\n * Whether the tabs are constrained to their source dock panel\n */\n get tabsConstrained() {\n return this._tabsConstrained;\n }\n /**\n * Constrain/Allow tabs to be dragged outside of this dock panel\n */\n set tabsConstrained(value) {\n this._tabsConstrained = value;\n }\n /**\n * Whether the add buttons for each tab bar are enabled.\n */\n get addButtonEnabled() {\n return this._addButtonEnabled;\n }\n /**\n * Set whether the add buttons for each tab bar are enabled.\n */\n set addButtonEnabled(value) {\n this._addButtonEnabled = value;\n for (const tabBar of this.tabBars()) {\n tabBar.addButtonEnabled = value;\n }\n }\n /**\n * Whether the dock panel is empty.\n */\n get isEmpty() {\n return this.layout.isEmpty;\n }\n /**\n * Create an iterator over the user widgets in the panel.\n *\n * @returns A new iterator over the user widgets in the panel.\n *\n * #### Notes\n * This iterator does not include the generated tab bars.\n */\n *widgets() {\n yield* this.layout.widgets();\n }\n /**\n * Create an iterator over the selected widgets in the panel.\n *\n * @returns A new iterator over the selected user widgets.\n *\n * #### Notes\n * This iterator yields the widgets corresponding to the current tab\n * of each tab bar in the panel.\n */\n *selectedWidgets() {\n yield* this.layout.selectedWidgets();\n }\n /**\n * Create an iterator over the tab bars in the panel.\n *\n * @returns A new iterator over the tab bars in the panel.\n *\n * #### Notes\n * This iterator does not include the user widgets.\n */\n *tabBars() {\n yield* this.layout.tabBars();\n }\n /**\n * Create an iterator over the handles in the panel.\n *\n * @returns A new iterator over the handles in the panel.\n */\n *handles() {\n yield* this.layout.handles();\n }\n /**\n * Select a specific widget in the dock panel.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will make the widget the current widget in its tab area.\n */\n selectWidget(widget) {\n // Find the tab bar which contains the widget.\n let tabBar = find(this.tabBars(), bar => {\n return bar.titles.indexOf(widget.title) !== -1;\n });\n // Throw an error if no tab bar is found.\n if (!tabBar) {\n throw new Error('Widget is not contained in the dock panel.');\n }\n // Ensure the widget is the current widget.\n tabBar.currentTitle = widget.title;\n }\n /**\n * Activate a specified widget in the dock panel.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will select and activate the given widget.\n */\n activateWidget(widget) {\n this.selectWidget(widget);\n widget.activate();\n }\n /**\n * Save the current layout configuration of the dock panel.\n *\n * @returns A new config object for the current layout state.\n *\n * #### Notes\n * The return value can be provided to the `restoreLayout` method\n * in order to restore the layout to its current configuration.\n */\n saveLayout() {\n return this.layout.saveLayout();\n }\n /**\n * Restore the layout to a previously saved configuration.\n *\n * @param config - The layout configuration to restore.\n *\n * #### Notes\n * Widgets which currently belong to the layout but which are not\n * contained in the config will be unparented.\n *\n * The dock panel automatically reverts to `'multiple-document'`\n * mode when a layout config is restored.\n */\n restoreLayout(config) {\n // Reset the mode.\n this._mode = 'multiple-document';\n // Restore the layout.\n this.layout.restoreLayout(config);\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Add a widget to the dock panel.\n *\n * @param widget - The widget to add to the dock panel.\n *\n * @param options - The additional options for adding the widget.\n *\n * #### Notes\n * If the panel is in single document mode, the options are ignored\n * and the widget is always added as tab in the hidden tab bar.\n */\n addWidget(widget, options = {}) {\n // Add the widget to the layout.\n if (this._mode === 'single-document') {\n this.layout.addWidget(widget);\n }\n else {\n this.layout.addWidget(widget, options);\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Process a message sent to the widget.\n *\n * @param msg - The message sent to the widget.\n */\n processMessage(msg) {\n if (msg.type === 'layout-modified') {\n this._layoutModified.emit(undefined);\n }\n else {\n super.processMessage(msg);\n }\n }\n /**\n * Handle the DOM events for the dock panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'lm-dragenter':\n this._evtDragEnter(event);\n break;\n case 'lm-dragleave':\n this._evtDragLeave(event);\n break;\n case 'lm-dragover':\n this._evtDragOver(event);\n break;\n case 'lm-drop':\n this._evtDrop(event);\n break;\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('lm-dragenter', this);\n this.node.addEventListener('lm-dragleave', this);\n this.node.addEventListener('lm-dragover', this);\n this.node.addEventListener('lm-drop', this);\n this.node.addEventListener('pointerdown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('lm-dragenter', this);\n this.node.removeEventListener('lm-dragleave', this);\n this.node.removeEventListener('lm-dragover', this);\n this.node.removeEventListener('lm-drop', this);\n this.node.removeEventListener('pointerdown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n // Ignore the generated tab bars.\n if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n return;\n }\n // Add the widget class to the child.\n msg.child.addClass('lm-DockPanel-widget');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n // Ignore the generated tab bars.\n if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n return;\n }\n // Remove the widget class from the child.\n msg.child.removeClass('lm-DockPanel-widget');\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `'lm-dragenter'` event for the dock panel.\n */\n _evtDragEnter(event) {\n // If the factory mime type is present, mark the event as\n // handled in order to get the rest of the drag events.\n if (event.mimeData.hasData('application/vnd.lumino.widget-factory')) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n /**\n * Handle the `'lm-dragleave'` event for the dock panel.\n */\n _evtDragLeave(event) {\n // Mark the event as handled.\n event.preventDefault();\n if (this._tabsConstrained && event.source !== this)\n return;\n event.stopPropagation();\n // The new target might be a descendant, so we might still handle the drop.\n // Hide asynchronously so that if a lm-dragover event bubbles up to us, the\n // hide is cancelled by the lm-dragover handler's show overlay logic.\n this.overlay.hide(1);\n }\n /**\n * Handle the `'lm-dragover'` event for the dock panel.\n */\n _evtDragOver(event) {\n // Mark the event as handled.\n event.preventDefault();\n // Show the drop indicator overlay and update the drop\n // action based on the drop target zone under the mouse.\n if ((this._tabsConstrained && event.source !== this) ||\n this._showOverlay(event.clientX, event.clientY) === 'invalid') {\n event.dropAction = 'none';\n }\n else {\n event.stopPropagation();\n event.dropAction = event.proposedAction;\n }\n }\n /**\n * Handle the `'lm-drop'` event for the dock panel.\n */\n _evtDrop(event) {\n // Mark the event as handled.\n event.preventDefault();\n // Hide the drop indicator overlay.\n this.overlay.hide(0);\n // Bail if the proposed action is to do nothing.\n if (event.proposedAction === 'none') {\n event.dropAction = 'none';\n return;\n }\n // Find the drop target under the mouse.\n let { clientX, clientY } = event;\n let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n // Bail if the drop zone is invalid.\n if ((this._tabsConstrained && event.source !== this) ||\n zone === 'invalid') {\n event.dropAction = 'none';\n return;\n }\n // Bail if the factory mime type has invalid data.\n let mimeData = event.mimeData;\n let factory = mimeData.getData('application/vnd.lumino.widget-factory');\n if (typeof factory !== 'function') {\n event.dropAction = 'none';\n return;\n }\n // Bail if the factory does not produce a widget.\n let widget = factory();\n if (!(widget instanceof Widget)) {\n event.dropAction = 'none';\n return;\n }\n // Bail if the widget is an ancestor of the dock panel.\n if (widget.contains(this)) {\n event.dropAction = 'none';\n return;\n }\n // Find the reference widget for the drop target.\n let ref = target ? Private$5.getDropRef(target.tabBar) : null;\n // Add the widget according to the indicated drop zone.\n switch (zone) {\n case 'root-all':\n this.addWidget(widget);\n break;\n case 'root-top':\n this.addWidget(widget, { mode: 'split-top' });\n break;\n case 'root-left':\n this.addWidget(widget, { mode: 'split-left' });\n break;\n case 'root-right':\n this.addWidget(widget, { mode: 'split-right' });\n break;\n case 'root-bottom':\n this.addWidget(widget, { mode: 'split-bottom' });\n break;\n case 'widget-all':\n this.addWidget(widget, { mode: 'tab-after', ref });\n break;\n case 'widget-top':\n this.addWidget(widget, { mode: 'split-top', ref });\n break;\n case 'widget-left':\n this.addWidget(widget, { mode: 'split-left', ref });\n break;\n case 'widget-right':\n this.addWidget(widget, { mode: 'split-right', ref });\n break;\n case 'widget-bottom':\n this.addWidget(widget, { mode: 'split-bottom', ref });\n break;\n case 'widget-tab':\n this.addWidget(widget, { mode: 'tab-after', ref });\n break;\n default:\n throw 'unreachable';\n }\n // Accept the proposed drop action.\n event.dropAction = event.proposedAction;\n // Stop propagation if we have not bailed so far.\n event.stopPropagation();\n // Activate the dropped widget.\n this.activateWidget(widget);\n }\n /**\n * Handle the `'keydown'` event for the dock panel.\n */\n _evtKeyDown(event) {\n // Stop input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse if `Escape` is pressed.\n if (event.keyCode === 27) {\n // Finalize the mouse release.\n this._releaseMouse();\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n }\n /**\n * Handle the `'pointerdown'` event for the dock panel.\n */\n _evtPointerDown(event) {\n // Do nothing if the left mouse button is not pressed.\n if (event.button !== 0) {\n return;\n }\n // Find the handle which contains the mouse target, if any.\n let layout = this.layout;\n let target = event.target;\n let handle = find(layout.handles(), handle => handle.contains(target));\n if (!handle) {\n return;\n }\n // Stop the event when a handle is pressed.\n event.preventDefault();\n event.stopPropagation();\n // Add the extra document listeners.\n this._document.addEventListener('keydown', this, true);\n this._document.addEventListener('pointerup', this, true);\n this._document.addEventListener('pointermove', this, true);\n this._document.addEventListener('contextmenu', this, true);\n // Compute the offset deltas for the handle press.\n let rect = handle.getBoundingClientRect();\n let deltaX = event.clientX - rect.left;\n let deltaY = event.clientY - rect.top;\n // Override the cursor and store the press data.\n let style = window.getComputedStyle(handle);\n let override = Drag.overrideCursor(style.cursor, this._document);\n this._pressData = { handle, deltaX, deltaY, override };\n }\n /**\n * Handle the `'pointermove'` event for the dock panel.\n */\n _evtPointerMove(event) {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Stop the event when dragging a handle.\n event.preventDefault();\n event.stopPropagation();\n // Compute the desired offset position for the handle.\n let rect = this.node.getBoundingClientRect();\n let xPos = event.clientX - rect.left - this._pressData.deltaX;\n let yPos = event.clientY - rect.top - this._pressData.deltaY;\n // Set the handle as close to the desired position as possible.\n let layout = this.layout;\n layout.moveHandle(this._pressData.handle, xPos, yPos);\n }\n /**\n * Handle the `'pointerup'` event for the dock panel.\n */\n _evtPointerUp(event) {\n // Do nothing if the left mouse button is not released.\n if (event.button !== 0) {\n return;\n }\n // Stop the event when releasing a handle.\n event.preventDefault();\n event.stopPropagation();\n // Finalize the mouse release.\n this._releaseMouse();\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Release the mouse grab for the dock panel.\n */\n _releaseMouse() {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Clear the override cursor.\n this._pressData.override.dispose();\n this._pressData = null;\n // Remove the extra document listeners.\n this._document.removeEventListener('keydown', this, true);\n this._document.removeEventListener('pointerup', this, true);\n this._document.removeEventListener('pointermove', this, true);\n this._document.removeEventListener('contextmenu', this, true);\n }\n /**\n * Show the overlay indicator at the given client position.\n *\n * Returns the drop zone at the specified client position.\n *\n * #### Notes\n * If the position is not over a valid zone, the overlay is hidden.\n */\n _showOverlay(clientX, clientY) {\n // Find the dock target for the given client position.\n let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n // If the drop zone is invalid, hide the overlay and bail.\n if (zone === 'invalid') {\n this.overlay.hide(100);\n return zone;\n }\n // Setup the variables needed to compute the overlay geometry.\n let top;\n let left;\n let right;\n let bottom;\n let box = ElementExt.boxSizing(this.node); // TODO cache this?\n let rect = this.node.getBoundingClientRect();\n // Compute the overlay geometry based on the dock zone.\n switch (zone) {\n case 'root-all':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'root-top':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = rect.height * Private$5.GOLDEN_RATIO;\n break;\n case 'root-left':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = rect.width * Private$5.GOLDEN_RATIO;\n bottom = box.paddingBottom;\n break;\n case 'root-right':\n top = box.paddingTop;\n left = rect.width * Private$5.GOLDEN_RATIO;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'root-bottom':\n top = rect.height * Private$5.GOLDEN_RATIO;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'widget-all':\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-top':\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom + target.height / 2;\n break;\n case 'widget-left':\n top = target.top;\n left = target.left;\n right = target.right + target.width / 2;\n bottom = target.bottom;\n break;\n case 'widget-right':\n top = target.top;\n left = target.left + target.width / 2;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-bottom':\n top = target.top + target.height / 2;\n left = target.left;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-tab': {\n const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom + target.height - tabHeight;\n break;\n }\n default:\n throw 'unreachable';\n }\n // Show the overlay with the computed geometry.\n this.overlay.show({ top, left, right, bottom });\n // Finally, return the computed drop zone.\n return zone;\n }\n /**\n * Create a new tab bar for use by the panel.\n */\n _createTabBar() {\n // Create the tab bar.\n let tabBar = this._renderer.createTabBar(this._document);\n // Set the generated tab bar property for the tab bar.\n Private$5.isGeneratedTabBarProperty.set(tabBar, true);\n // Hide the tab bar when in single document mode.\n if (this._mode === 'single-document') {\n tabBar.hide();\n }\n // Enforce necessary tab bar behavior.\n // TODO do we really want to enforce *all* of these?\n tabBar.tabsMovable = this._tabsMovable;\n tabBar.allowDeselect = false;\n tabBar.addButtonEnabled = this._addButtonEnabled;\n tabBar.removeBehavior = 'select-previous-tab';\n tabBar.insertBehavior = 'select-tab-if-needed';\n // Connect the signal handlers for the tab bar.\n tabBar.tabMoved.connect(this._onTabMoved, this);\n tabBar.currentChanged.connect(this._onCurrentChanged, this);\n tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n tabBar.tabDetachRequested.connect(this._onTabDetachRequested, this);\n tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n tabBar.addRequested.connect(this._onTabAddRequested, this);\n // Return the initialized tab bar.\n return tabBar;\n }\n /**\n * Create a new handle for use by the panel.\n */\n _createHandle() {\n return this._renderer.createHandle();\n }\n /**\n * Handle the `tabMoved` signal from a tab bar.\n */\n _onTabMoved() {\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `currentChanged` signal from a tab bar.\n */\n _onCurrentChanged(sender, args) {\n // Extract the previous and current title from the args.\n let { previousTitle, currentTitle } = args;\n // Hide the previous widget.\n if (previousTitle) {\n previousTitle.owner.hide();\n }\n // Show the current widget.\n if (currentTitle) {\n currentTitle.owner.show();\n }\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `addRequested` signal from a tab bar.\n */\n _onTabAddRequested(sender) {\n this._addRequested.emit(sender);\n }\n /**\n * Handle the `tabActivateRequested` signal from a tab bar.\n */\n _onTabActivateRequested(sender, args) {\n args.title.owner.activate();\n }\n /**\n * Handle the `tabCloseRequested` signal from a tab bar.\n */\n _onTabCloseRequested(sender, args) {\n args.title.owner.close();\n }\n /**\n * Handle the `tabDetachRequested` signal from a tab bar.\n */\n _onTabDetachRequested(sender, args) {\n // Do nothing if a drag is already in progress.\n if (this._drag) {\n return;\n }\n // Release the tab bar's hold on the mouse.\n sender.releaseMouse();\n // Extract the data from the args.\n let { title, tab, clientX, clientY, offset } = args;\n // Setup the mime data for the drag operation.\n let mimeData = new MimeData();\n let factory = () => title.owner;\n mimeData.setData('application/vnd.lumino.widget-factory', factory);\n // Create the drag image for the drag operation.\n let dragImage = tab.cloneNode(true);\n if (offset) {\n dragImage.style.top = `-${offset.y}px`;\n dragImage.style.left = `-${offset.x}px`;\n }\n // Create the drag object to manage the drag-drop operation.\n this._drag = new Drag({\n document: this._document,\n mimeData,\n dragImage,\n proposedAction: 'move',\n supportedActions: 'move',\n source: this\n });\n // Hide the tab node in the original tab.\n tab.classList.add('lm-mod-hidden');\n let cleanup = () => {\n this._drag = null;\n tab.classList.remove('lm-mod-hidden');\n };\n // Start the drag operation and cleanup when done.\n this._drag.start(clientX, clientY).then(cleanup);\n }\n}\n/**\n * The namespace for the `DockPanel` class statics.\n */\n(function (DockPanel) {\n /**\n * A concrete implementation of `IOverlay`.\n *\n * This is the default overlay implementation for a dock panel.\n */\n class Overlay {\n /**\n * Construct a new overlay.\n */\n constructor() {\n this._timer = -1;\n this._hidden = true;\n this.node = document.createElement('div');\n this.node.classList.add('lm-DockPanel-overlay');\n this.node.classList.add('lm-mod-hidden');\n this.node.style.position = 'absolute';\n this.node.style.contain = 'strict';\n }\n /**\n * Show the overlay using the given overlay geometry.\n *\n * @param geo - The desired geometry for the overlay.\n */\n show(geo) {\n // Update the position of the overlay.\n let style = this.node.style;\n style.top = `${geo.top}px`;\n style.left = `${geo.left}px`;\n style.right = `${geo.right}px`;\n style.bottom = `${geo.bottom}px`;\n // Clear any pending hide timer.\n clearTimeout(this._timer);\n this._timer = -1;\n // If the overlay is already visible, we're done.\n if (!this._hidden) {\n return;\n }\n // Clear the hidden flag.\n this._hidden = false;\n // Finally, show the overlay.\n this.node.classList.remove('lm-mod-hidden');\n }\n /**\n * Hide the overlay node.\n *\n * @param delay - The delay (in ms) before hiding the overlay.\n * A delay value <= 0 will hide the overlay immediately.\n */\n hide(delay) {\n // Do nothing if the overlay is already hidden.\n if (this._hidden) {\n return;\n }\n // Hide immediately if the delay is <= 0.\n if (delay <= 0) {\n clearTimeout(this._timer);\n this._timer = -1;\n this._hidden = true;\n this.node.classList.add('lm-mod-hidden');\n return;\n }\n // Do nothing if a hide is already pending.\n if (this._timer !== -1) {\n return;\n }\n // Otherwise setup the hide timer.\n this._timer = window.setTimeout(() => {\n this._timer = -1;\n this._hidden = true;\n this.node.classList.add('lm-mod-hidden');\n }, delay);\n }\n }\n DockPanel.Overlay = Overlay;\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Create a new tab bar for use with a dock panel.\n *\n * @returns A new tab bar for a dock panel.\n */\n createTabBar(document) {\n let bar = new TabBar({ document });\n bar.addClass('lm-DockPanel-tabBar');\n return bar;\n }\n /**\n * Create a new handle node for use with a dock panel.\n *\n * @returns A new handle node for a dock panel.\n */\n createHandle() {\n let handle = document.createElement('div');\n handle.className = 'lm-DockPanel-handle';\n return handle;\n }\n }\n DockPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n DockPanel.defaultRenderer = new Renderer();\n})(DockPanel || (DockPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$5;\n(function (Private) {\n /**\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n */\n Private.GOLDEN_RATIO = 0.618;\n /**\n * The default sizes for the edge drop zones, in pixels.\n */\n Private.DEFAULT_EDGES = {\n /**\n * The size of the top edge dock zone for the root panel, in pixels.\n * This is different from the others to distinguish between the top\n * tab bar and the top root zone.\n */\n top: 12,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n right: 40,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n bottom: 40,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n left: 40\n };\n /**\n * A singleton `'layout-modified'` conflatable message.\n */\n Private.LayoutModified = new ConflatableMessage('layout-modified');\n /**\n * An attached property used to track generated tab bars.\n */\n Private.isGeneratedTabBarProperty = new AttachedProperty({\n name: 'isGeneratedTabBar',\n create: () => false\n });\n /**\n * Create a single document config for the widgets in a dock panel.\n */\n function createSingleDocumentConfig(panel) {\n // Return an empty config if the panel is empty.\n if (panel.isEmpty) {\n return { main: null };\n }\n // Get a flat array of the widgets in the panel.\n let widgets = Array.from(panel.widgets());\n // Get the first selected widget in the panel.\n let selected = panel.selectedWidgets().next().value;\n // Compute the current index for the new config.\n let currentIndex = selected ? widgets.indexOf(selected) : -1;\n // Return the single document config.\n return { main: { type: 'tab-area', widgets, currentIndex } };\n }\n Private.createSingleDocumentConfig = createSingleDocumentConfig;\n /**\n * Find the drop target at the given client position.\n */\n function findDropTarget(panel, clientX, clientY, edges) {\n // Bail if the mouse is not over the dock panel.\n if (!ElementExt.hitTest(panel.node, clientX, clientY)) {\n return { zone: 'invalid', target: null };\n }\n // Look up the layout for the panel.\n let layout = panel.layout;\n // If the layout is empty, indicate the entire root drop zone.\n if (layout.isEmpty) {\n return { zone: 'root-all', target: null };\n }\n // Test the edge zones when in multiple document mode.\n if (panel.mode === 'multiple-document') {\n // Get the client rect for the dock panel.\n let panelRect = panel.node.getBoundingClientRect();\n // Compute the distance to each edge of the panel.\n let pl = clientX - panelRect.left + 1;\n let pt = clientY - panelRect.top + 1;\n let pr = panelRect.right - clientX;\n let pb = panelRect.bottom - clientY;\n // Find the minimum distance to an edge.\n let pd = Math.min(pt, pr, pb, pl);\n // Return a root zone if the mouse is within an edge.\n switch (pd) {\n case pt:\n if (pt < edges.top) {\n return { zone: 'root-top', target: null };\n }\n break;\n case pr:\n if (pr < edges.right) {\n return { zone: 'root-right', target: null };\n }\n break;\n case pb:\n if (pb < edges.bottom) {\n return { zone: 'root-bottom', target: null };\n }\n break;\n case pl:\n if (pl < edges.left) {\n return { zone: 'root-left', target: null };\n }\n break;\n default:\n throw 'unreachable';\n }\n }\n // Hit test the dock layout at the given client position.\n let target = layout.hitTestTabAreas(clientX, clientY);\n // Bail if no target area was found.\n if (!target) {\n return { zone: 'invalid', target: null };\n }\n // Return the whole tab area when in single document mode.\n if (panel.mode === 'single-document') {\n return { zone: 'widget-all', target };\n }\n // Compute the distance to each edge of the tab area.\n let al = target.x - target.left + 1;\n let at = target.y - target.top + 1;\n let ar = target.left + target.width - target.x;\n let ab = target.top + target.height - target.y;\n const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n if (at < tabHeight) {\n return { zone: 'widget-tab', target };\n }\n // Get the X and Y edge sizes for the area.\n let rx = Math.round(target.width / 3);\n let ry = Math.round(target.height / 3);\n // If the mouse is not within an edge, indicate the entire area.\n if (al > rx && ar > rx && at > ry && ab > ry) {\n return { zone: 'widget-all', target };\n }\n // Scale the distances by the slenderness ratio.\n al /= rx;\n at /= ry;\n ar /= rx;\n ab /= ry;\n // Find the minimum distance to the area edge.\n let ad = Math.min(al, at, ar, ab);\n // Find the widget zone for the area edge.\n let zone;\n switch (ad) {\n case al:\n zone = 'widget-left';\n break;\n case at:\n zone = 'widget-top';\n break;\n case ar:\n zone = 'widget-right';\n break;\n case ab:\n zone = 'widget-bottom';\n break;\n default:\n throw 'unreachable';\n }\n // Return the final drop target.\n return { zone, target };\n }\n Private.findDropTarget = findDropTarget;\n /**\n * Get the drop reference widget for a tab bar.\n */\n function getDropRef(tabBar) {\n if (tabBar.titles.length === 0) {\n return null;\n }\n if (tabBar.currentTitle) {\n return tabBar.currentTitle.owner;\n }\n return tabBar.titles[tabBar.titles.length - 1].owner;\n }\n Private.getDropRef = getDropRef;\n})(Private$5 || (Private$5 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A class which tracks focus among a set of widgets.\n *\n * This class is useful when code needs to keep track of the most\n * recently focused widget(s) among a set of related widgets.\n */\nclass FocusTracker {\n constructor() {\n this._counter = 0;\n this._widgets = [];\n this._activeWidget = null;\n this._currentWidget = null;\n this._numbers = new Map();\n this._nodes = new Map();\n this._activeChanged = new Signal(this);\n this._currentChanged = new Signal(this);\n }\n /**\n * Dispose of the resources held by the tracker.\n */\n dispose() {\n // Do nothing if the tracker is already disposed.\n if (this._counter < 0) {\n return;\n }\n // Mark the tracker as disposed.\n this._counter = -1;\n // Clear the connections for the tracker.\n Signal.clearData(this);\n // Remove all event listeners.\n for (const widget of this._widgets) {\n widget.node.removeEventListener('focus', this, true);\n widget.node.removeEventListener('blur', this, true);\n }\n // Clear the internal data structures.\n this._activeWidget = null;\n this._currentWidget = null;\n this._nodes.clear();\n this._numbers.clear();\n this._widgets.length = 0;\n }\n /**\n * A signal emitted when the current widget has changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * A signal emitted when the active widget has changed.\n */\n get activeChanged() {\n return this._activeChanged;\n }\n /**\n * A flag indicating whether the tracker is disposed.\n */\n get isDisposed() {\n return this._counter < 0;\n }\n /**\n * The current widget in the tracker.\n *\n * #### Notes\n * The current widget is the widget among the tracked widgets which\n * has the *descendant node* which has most recently been focused.\n *\n * The current widget will not be updated if the node loses focus. It\n * will only be updated when a different tracked widget gains focus.\n *\n * If the current widget is removed from the tracker, the previous\n * current widget will be restored.\n *\n * This behavior is intended to follow a user's conceptual model of\n * a semantically \"current\" widget, where the \"last thing of type X\"\n * to be interacted with is the \"current instance of X\", regardless\n * of whether that instance still has focus.\n */\n get currentWidget() {\n return this._currentWidget;\n }\n /**\n * The active widget in the tracker.\n *\n * #### Notes\n * The active widget is the widget among the tracked widgets which\n * has the *descendant node* which is currently focused.\n */\n get activeWidget() {\n return this._activeWidget;\n }\n /**\n * A read only array of the widgets being tracked.\n */\n get widgets() {\n return this._widgets;\n }\n /**\n * Get the focus number for a particular widget in the tracker.\n *\n * @param widget - The widget of interest.\n *\n * @returns The focus number for the given widget, or `-1` if the\n * widget has not had focus since being added to the tracker, or\n * is not contained by the tracker.\n *\n * #### Notes\n * The focus number indicates the relative order in which the widgets\n * have gained focus. A widget with a larger number has gained focus\n * more recently than a widget with a smaller number.\n *\n * The `currentWidget` will always have the largest focus number.\n *\n * All widgets start with a focus number of `-1`, which indicates that\n * the widget has not been focused since being added to the tracker.\n */\n focusNumber(widget) {\n let n = this._numbers.get(widget);\n return n === undefined ? -1 : n;\n }\n /**\n * Test whether the focus tracker contains a given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns `true` if the widget is tracked, `false` otherwise.\n */\n has(widget) {\n return this._numbers.has(widget);\n }\n /**\n * Add a widget to the focus tracker.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * A widget will be automatically removed from the tracker if it\n * is disposed after being added.\n *\n * If the widget is already tracked, this is a no-op.\n */\n add(widget) {\n // Do nothing if the widget is already tracked.\n if (this._numbers.has(widget)) {\n return;\n }\n // Test whether the widget has focus.\n let focused = widget.node.contains(document.activeElement);\n // Set up the initial focus number.\n let n = focused ? this._counter++ : -1;\n // Add the widget to the internal data structures.\n this._widgets.push(widget);\n this._numbers.set(widget, n);\n this._nodes.set(widget.node, widget);\n // Set up the event listeners. The capturing phase must be used\n // since the 'focus' and 'blur' events don't bubble and Firefox\n // doesn't support the 'focusin' or 'focusout' events.\n widget.node.addEventListener('focus', this, true);\n widget.node.addEventListener('blur', this, true);\n // Connect the disposed signal handler.\n widget.disposed.connect(this._onWidgetDisposed, this);\n // Set the current and active widgets if needed.\n if (focused) {\n this._setWidgets(widget, widget);\n }\n }\n /**\n * Remove a widget from the focus tracker.\n *\n * #### Notes\n * If the widget is the `currentWidget`, the previous current widget\n * will become the new `currentWidget`.\n *\n * A widget will be automatically removed from the tracker if it\n * is disposed after being added.\n *\n * If the widget is not tracked, this is a no-op.\n */\n remove(widget) {\n // Bail early if the widget is not tracked.\n if (!this._numbers.has(widget)) {\n return;\n }\n // Disconnect the disposed signal handler.\n widget.disposed.disconnect(this._onWidgetDisposed, this);\n // Remove the event listeners.\n widget.node.removeEventListener('focus', this, true);\n widget.node.removeEventListener('blur', this, true);\n // Remove the widget from the internal data structures.\n ArrayExt.removeFirstOf(this._widgets, widget);\n this._nodes.delete(widget.node);\n this._numbers.delete(widget);\n // Bail early if the widget is not the current widget.\n if (this._currentWidget !== widget) {\n return;\n }\n // Filter the widgets for those which have had focus.\n let valid = this._widgets.filter(w => this._numbers.get(w) !== -1);\n // Get the valid widget with the max focus number.\n let previous = max(valid, (first, second) => {\n let a = this._numbers.get(first);\n let b = this._numbers.get(second);\n return a - b;\n }) || null;\n // Set the current and active widgets.\n this._setWidgets(previous, null);\n }\n /**\n * Handle the DOM events for the focus tracker.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the tracked nodes. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'focus':\n this._evtFocus(event);\n break;\n case 'blur':\n this._evtBlur(event);\n break;\n }\n }\n /**\n * Set the current and active widgets for the tracker.\n */\n _setWidgets(current, active) {\n // Swap the current widget.\n let oldCurrent = this._currentWidget;\n this._currentWidget = current;\n // Swap the active widget.\n let oldActive = this._activeWidget;\n this._activeWidget = active;\n // Emit the `currentChanged` signal if needed.\n if (oldCurrent !== current) {\n this._currentChanged.emit({ oldValue: oldCurrent, newValue: current });\n }\n // Emit the `activeChanged` signal if needed.\n if (oldActive !== active) {\n this._activeChanged.emit({ oldValue: oldActive, newValue: active });\n }\n }\n /**\n * Handle the `'focus'` event for a tracked widget.\n */\n _evtFocus(event) {\n // Find the widget which gained focus, which is known to exist.\n let widget = this._nodes.get(event.currentTarget);\n // Update the focus number if necessary.\n if (widget !== this._currentWidget) {\n this._numbers.set(widget, this._counter++);\n }\n // Set the current and active widgets.\n this._setWidgets(widget, widget);\n }\n /**\n * Handle the `'blur'` event for a tracked widget.\n */\n _evtBlur(event) {\n // Find the widget which lost focus, which is known to exist.\n let widget = this._nodes.get(event.currentTarget);\n // Get the node which being focused after this blur.\n let focusTarget = event.relatedTarget;\n // If no other node is being focused, clear the active widget.\n if (!focusTarget) {\n this._setWidgets(this._currentWidget, null);\n return;\n }\n // Bail if the focus widget is not changing.\n if (widget.node.contains(focusTarget)) {\n return;\n }\n // If no tracked widget is being focused, clear the active widget.\n if (!find(this._widgets, w => w.node.contains(focusTarget))) {\n this._setWidgets(this._currentWidget, null);\n return;\n }\n }\n /**\n * Handle the `disposed` signal for a tracked widget.\n */\n _onWidgetDisposed(sender) {\n this.remove(sender);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a grid.\n */\nclass GridLayout extends Layout {\n /**\n * Construct a new grid layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n super(options);\n this._dirty = false;\n this._rowSpacing = 4;\n this._columnSpacing = 4;\n this._items = [];\n this._rowStarts = [];\n this._columnStarts = [];\n this._rowSizers = [new BoxSizer()];\n this._columnSizers = [new BoxSizer()];\n this._box = null;\n if (options.rowCount !== undefined) {\n Private$4.reallocSizers(this._rowSizers, options.rowCount);\n }\n if (options.columnCount !== undefined) {\n Private$4.reallocSizers(this._columnSizers, options.columnCount);\n }\n if (options.rowSpacing !== undefined) {\n this._rowSpacing = Private$4.clampValue(options.rowSpacing);\n }\n if (options.columnSpacing !== undefined) {\n this._columnSpacing = Private$4.clampValue(options.columnSpacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the widgets and layout items.\n for (const item of this._items) {\n let widget = item.widget;\n item.dispose();\n widget.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._rowStarts.length = 0;\n this._rowSizers.length = 0;\n this._columnStarts.length = 0;\n this._columnSizers.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the number of rows in the layout.\n */\n get rowCount() {\n return this._rowSizers.length;\n }\n /**\n * Set the number of rows in the layout.\n *\n * #### Notes\n * The minimum row count is `1`.\n */\n set rowCount(value) {\n // Do nothing if the row count does not change.\n if (value === this.rowCount) {\n return;\n }\n // Reallocate the row sizers.\n Private$4.reallocSizers(this._rowSizers, value);\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the number of columns in the layout.\n */\n get columnCount() {\n return this._columnSizers.length;\n }\n /**\n * Set the number of columns in the layout.\n *\n * #### Notes\n * The minimum column count is `1`.\n */\n set columnCount(value) {\n // Do nothing if the column count does not change.\n if (value === this.columnCount) {\n return;\n }\n // Reallocate the column sizers.\n Private$4.reallocSizers(this._columnSizers, value);\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the row spacing for the layout.\n */\n get rowSpacing() {\n return this._rowSpacing;\n }\n /**\n * Set the row spacing for the layout.\n */\n set rowSpacing(value) {\n // Clamp the spacing to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the spacing does not change\n if (this._rowSpacing === value) {\n return;\n }\n // Update the internal spacing.\n this._rowSpacing = value;\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the column spacing for the layout.\n */\n get columnSpacing() {\n return this._columnSpacing;\n }\n /**\n * Set the col spacing for the layout.\n */\n set columnSpacing(value) {\n // Clamp the spacing to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the spacing does not change\n if (this._columnSpacing === value) {\n return;\n }\n // Update the internal spacing.\n this._columnSpacing = value;\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the stretch factor for a specific row.\n *\n * @param index - The row index of interest.\n *\n * @returns The stretch factor for the row.\n *\n * #### Notes\n * This returns `-1` if the index is out of range.\n */\n rowStretch(index) {\n let sizer = this._rowSizers[index];\n return sizer ? sizer.stretch : -1;\n }\n /**\n * Set the stretch factor for a specific row.\n *\n * @param index - The row index of interest.\n *\n * @param value - The stretch factor for the row.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n setRowStretch(index, value) {\n // Look up the row sizer.\n let sizer = this._rowSizers[index];\n // Bail if the index is out of range.\n if (!sizer) {\n return;\n }\n // Clamp the value to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the stretch does not change.\n if (sizer.stretch === value) {\n return;\n }\n // Update the sizer stretch.\n sizer.stretch = value;\n // Schedule an update of the parent.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Get the stretch factor for a specific column.\n *\n * @param index - The column index of interest.\n *\n * @returns The stretch factor for the column.\n *\n * #### Notes\n * This returns `-1` if the index is out of range.\n */\n columnStretch(index) {\n let sizer = this._columnSizers[index];\n return sizer ? sizer.stretch : -1;\n }\n /**\n * Set the stretch factor for a specific column.\n *\n * @param index - The column index of interest.\n *\n * @param value - The stretch factor for the column.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n setColumnStretch(index, value) {\n // Look up the column sizer.\n let sizer = this._columnSizers[index];\n // Bail if the index is out of range.\n if (!sizer) {\n return;\n }\n // Clamp the value to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the stretch does not change.\n if (sizer.stretch === value) {\n return;\n }\n // Update the sizer stretch.\n sizer.stretch = value;\n // Schedule an update of the parent.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n for (const item of this._items) {\n yield item.widget;\n }\n }\n /**\n * Add a widget to the grid layout.\n *\n * @param widget - The widget to add to the layout.\n *\n * #### Notes\n * If the widget is already contained in the layout, this is no-op.\n */\n addWidget(widget) {\n // Look up the index for the widget.\n let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n // Bail if the widget is already in the layout.\n if (i !== -1) {\n return;\n }\n // Add the widget to the layout.\n this._items.push(new LayoutItem(widget));\n // Attach the widget to the parent.\n if (this.parent) {\n this.attachWidget(widget);\n }\n }\n /**\n * Remove a widget from the grid layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Look up the index for the widget.\n let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n // Bail if the widget is not in the layout.\n if (i === -1) {\n return;\n }\n // Remove the widget from the layout.\n let item = ArrayExt.removeAt(this._items, i);\n // Detach the widget from the parent.\n if (this.parent) {\n this.detachWidget(widget);\n }\n // Dispose the layout item.\n item.dispose();\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n for (const widget of this) {\n this.attachWidget(widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param widget - The widget to attach to the parent.\n */\n attachWidget(widget) {\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param widget - The widget to detach from the parent.\n */\n detachWidget(widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Reset the min sizes of the sizers.\n for (let i = 0, n = this.rowCount; i < n; ++i) {\n this._rowSizers[i].minSize = 0;\n }\n for (let i = 0, n = this.columnCount; i < n; ++i) {\n this._columnSizers[i].minSize = 0;\n }\n // Filter for the visible layout items.\n let items = this._items.filter(it => !it.isHidden);\n // Fit the layout items.\n for (let i = 0, n = items.length; i < n; ++i) {\n items[i].fit();\n }\n // Get the max row and column index.\n let maxRow = this.rowCount - 1;\n let maxCol = this.columnCount - 1;\n // Sort the items by row span.\n items.sort(Private$4.rowSpanCmp);\n // Update the min sizes of the row sizers.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Fetch the item.\n let item = items[i];\n // Get the row bounds for the item.\n let config = GridLayout.getCellConfig(item.widget);\n let r1 = Math.min(config.row, maxRow);\n let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n // Distribute the minimum height to the sizers as needed.\n Private$4.distributeMin(this._rowSizers, r1, r2, item.minHeight);\n }\n // Sort the items by column span.\n items.sort(Private$4.columnSpanCmp);\n // Update the min sizes of the column sizers.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Fetch the item.\n let item = items[i];\n // Get the column bounds for the item.\n let config = GridLayout.getCellConfig(item.widget);\n let c1 = Math.min(config.column, maxCol);\n let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n // Distribute the minimum width to the sizers as needed.\n Private$4.distributeMin(this._columnSizers, c1, c2, item.minWidth);\n }\n // If no size constraint is needed, just update the parent.\n if (this.fitPolicy === 'set-no-constraint') {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n return;\n }\n // Set up the computed min size.\n let minH = maxRow * this._rowSpacing;\n let minW = maxCol * this._columnSpacing;\n // Add the sizer minimums to the computed min size.\n for (let i = 0, n = this.rowCount; i < n; ++i) {\n minH += this._rowSizers[i].minSize;\n }\n for (let i = 0, n = this.columnCount; i < n; ++i) {\n minW += this._columnSizers[i].minSize;\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the layout area adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Get the max row and column index.\n let maxRow = this.rowCount - 1;\n let maxCol = this.columnCount - 1;\n // Compute the total fixed row and column space.\n let fixedRowSpace = maxRow * this._rowSpacing;\n let fixedColSpace = maxCol * this._columnSpacing;\n // Distribute the available space to the box sizers.\n BoxEngine.calc(this._rowSizers, Math.max(0, height - fixedRowSpace));\n BoxEngine.calc(this._columnSizers, Math.max(0, width - fixedColSpace));\n // Update the row start positions.\n for (let i = 0, pos = top, n = this.rowCount; i < n; ++i) {\n this._rowStarts[i] = pos;\n pos += this._rowSizers[i].size + this._rowSpacing;\n }\n // Update the column start positions.\n for (let i = 0, pos = left, n = this.columnCount; i < n; ++i) {\n this._columnStarts[i] = pos;\n pos += this._columnSizers[i].size + this._columnSpacing;\n }\n // Update the geometry of the layout items.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Fetch the cell bounds for the widget.\n let config = GridLayout.getCellConfig(item.widget);\n let r1 = Math.min(config.row, maxRow);\n let c1 = Math.min(config.column, maxCol);\n let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n // Compute the cell geometry.\n let x = this._columnStarts[c1];\n let y = this._rowStarts[r1];\n let w = this._columnStarts[c2] + this._columnSizers[c2].size - x;\n let h = this._rowStarts[r2] + this._rowSizers[r2].size - y;\n // Update the geometry of the layout item.\n item.update(x, y, w, h);\n }\n }\n}\n/**\n * The namespace for the `GridLayout` class statics.\n */\n(function (GridLayout) {\n /**\n * Get the cell config for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The cell config for the widget.\n */\n function getCellConfig(widget) {\n return Private$4.cellConfigProperty.get(widget);\n }\n GridLayout.getCellConfig = getCellConfig;\n /**\n * Set the cell config for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the cell config.\n */\n function setCellConfig(widget, value) {\n Private$4.cellConfigProperty.set(widget, Private$4.normalizeConfig(value));\n }\n GridLayout.setCellConfig = setCellConfig;\n})(GridLayout || (GridLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$4;\n(function (Private) {\n /**\n * The property descriptor for the widget cell config.\n */\n Private.cellConfigProperty = new AttachedProperty({\n name: 'cellConfig',\n create: () => ({ row: 0, column: 0, rowSpan: 1, columnSpan: 1 }),\n changed: onChildCellConfigChanged\n });\n /**\n * Normalize a partial cell config object.\n */\n function normalizeConfig(config) {\n let row = Math.max(0, Math.floor(config.row || 0));\n let column = Math.max(0, Math.floor(config.column || 0));\n let rowSpan = Math.max(1, Math.floor(config.rowSpan || 0));\n let columnSpan = Math.max(1, Math.floor(config.columnSpan || 0));\n return { row, column, rowSpan, columnSpan };\n }\n Private.normalizeConfig = normalizeConfig;\n /**\n * Clamp a value to an integer >= 0.\n */\n function clampValue(value) {\n return Math.max(0, Math.floor(value));\n }\n Private.clampValue = clampValue;\n /**\n * A sort comparison function for row spans.\n */\n function rowSpanCmp(a, b) {\n let c1 = Private.cellConfigProperty.get(a.widget);\n let c2 = Private.cellConfigProperty.get(b.widget);\n return c1.rowSpan - c2.rowSpan;\n }\n Private.rowSpanCmp = rowSpanCmp;\n /**\n * A sort comparison function for column spans.\n */\n function columnSpanCmp(a, b) {\n let c1 = Private.cellConfigProperty.get(a.widget);\n let c2 = Private.cellConfigProperty.get(b.widget);\n return c1.columnSpan - c2.columnSpan;\n }\n Private.columnSpanCmp = columnSpanCmp;\n /**\n * Reallocate the box sizers for the given grid dimensions.\n */\n function reallocSizers(sizers, count) {\n // Coerce the count to the valid range.\n count = Math.max(1, Math.floor(count));\n // Add the missing sizers.\n while (sizers.length < count) {\n sizers.push(new BoxSizer());\n }\n // Remove the extra sizers.\n if (sizers.length > count) {\n sizers.length = count;\n }\n }\n Private.reallocSizers = reallocSizers;\n /**\n * Distribute a min size constraint across a range of sizers.\n */\n function distributeMin(sizers, i1, i2, minSize) {\n // Sanity check the indices.\n if (i2 < i1) {\n return;\n }\n // Handle the simple case of no cell span.\n if (i1 === i2) {\n let sizer = sizers[i1];\n sizer.minSize = Math.max(sizer.minSize, minSize);\n return;\n }\n // Compute the total current min size of the span.\n let totalMin = 0;\n for (let i = i1; i <= i2; ++i) {\n totalMin += sizers[i].minSize;\n }\n // Do nothing if the total is greater than the required.\n if (totalMin >= minSize) {\n return;\n }\n // Compute the portion of the space to allocate to each sizer.\n let portion = (minSize - totalMin) / (i2 - i1 + 1);\n // Add the portion to each sizer.\n for (let i = i1; i <= i2; ++i) {\n sizers[i].minSize += portion;\n }\n }\n Private.distributeMin = distributeMin;\n /**\n * The change handler for the child cell config property.\n */\n function onChildCellConfigChanged(child) {\n if (child.parent && child.parent.layout instanceof GridLayout) {\n child.parent.fit();\n }\n }\n})(Private$4 || (Private$4 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays menus as a canonical menu bar.\n */\nclass MenuBar extends Widget {\n /**\n * Construct a new menu bar.\n *\n * @param options - The options for initializing the menu bar.\n */\n constructor(options = {}) {\n super({ node: Private$3.createNode() });\n // Track the index of the item that is currently focused or hovered. -1 means nothing focused or hovered.\n this._activeIndex = -1;\n // Track which item can be focused using the TAB key. Unlike _activeIndex will\n // always point to a menuitem. Whenever you update this value, it's important\n // to follow it with an \"update-request\" message so that the `tabindex`\n // attribute on each menubar item gets properly updated.\n this._tabFocusIndex = 0;\n this._menus = [];\n this._childMenu = null;\n this._overflowMenu = null;\n this._menuItemSizes = [];\n this._overflowIndex = -1;\n this.addClass('lm-MenuBar');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.renderer = options.renderer || MenuBar.defaultRenderer;\n this._forceItemsPosition = options.forceItemsPosition || {\n forceX: true,\n forceY: true\n };\n this._overflowMenuOptions = options.overflowMenuOptions || {\n isVisible: true\n };\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._closeChildMenu();\n this._menus.length = 0;\n super.dispose();\n }\n /**\n * The child menu of the menu bar.\n *\n * #### Notes\n * This will be `null` if the menu bar does not have an open menu.\n */\n get childMenu() {\n return this._childMenu;\n }\n /**\n * The overflow index of the menu bar.\n */\n get overflowIndex() {\n return this._overflowIndex;\n }\n /**\n * The overflow menu of the menu bar.\n */\n get overflowMenu() {\n return this._overflowMenu;\n }\n /**\n * Get the menu bar content node.\n *\n * #### Notes\n * This is the node which holds the menu title nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-MenuBar-content')[0];\n }\n /**\n * Get the currently active menu.\n */\n get activeMenu() {\n return this._menus[this._activeIndex] || null;\n }\n /**\n * Set the currently active menu.\n *\n * #### Notes\n * If the menu does not exist, the menu will be set to `null`.\n */\n set activeMenu(value) {\n this.activeIndex = value ? this._menus.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently active menu.\n *\n * #### Notes\n * This will be `-1` if no menu is active.\n */\n get activeIndex() {\n return this._activeIndex;\n }\n /**\n * Set the index of the currently active menu.\n *\n * #### Notes\n * If the menu cannot be activated, the index will be set to `-1`.\n */\n set activeIndex(value) {\n // Adjust the value for an out of range index.\n if (value < 0 || value >= this._menus.length) {\n value = -1;\n }\n // An empty menu cannot be active\n if (value > -1 && this._menus[value].items.length === 0) {\n value = -1;\n }\n // Bail early if the index will not change.\n if (this._activeIndex === value) {\n return;\n }\n // Update the active index.\n this._activeIndex = value;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * A read-only array of the menus in the menu bar.\n */\n get menus() {\n return this._menus;\n }\n /**\n * Open the active menu and activate its first menu item.\n *\n * #### Notes\n * If there is no active menu, this is a no-op.\n */\n openActiveMenu() {\n // Bail early if there is no active item.\n if (this._activeIndex === -1) {\n return;\n }\n // Open the child menu.\n this._openChildMenu();\n // Activate the first item in the child menu.\n if (this._childMenu) {\n this._childMenu.activeIndex = -1;\n this._childMenu.activateNextItem();\n }\n }\n /**\n * Add a menu to the end of the menu bar.\n *\n * @param menu - The menu to add to the menu bar.\n *\n * #### Notes\n * If the menu is already added to the menu bar, it will be moved.\n */\n addMenu(menu, update = true) {\n this.insertMenu(this._menus.length, menu, update);\n }\n /**\n * Insert a menu into the menu bar at the specified index.\n *\n * @param index - The index at which to insert the menu.\n *\n * @param menu - The menu to insert into the menu bar.\n *\n * #### Notes\n * The index will be clamped to the bounds of the menus.\n *\n * If the menu is already added to the menu bar, it will be moved.\n */\n insertMenu(index, menu, update = true) {\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Look up the index of the menu.\n let i = this._menus.indexOf(menu);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._menus.length));\n // If the menu is not in the array, insert it.\n if (i === -1) {\n // Insert the menu into the array.\n ArrayExt.insert(this._menus, j, menu);\n // Add the styling class to the menu.\n menu.addClass('lm-MenuBar-menu');\n // Connect to the menu signals.\n menu.aboutToClose.connect(this._onMenuAboutToClose, this);\n menu.menuRequested.connect(this._onMenuMenuRequested, this);\n menu.title.changed.connect(this._onTitleChanged, this);\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n // There is nothing more to do.\n return;\n }\n // Otherwise, the menu exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._menus.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return;\n }\n // Move the menu to the new locations.\n ArrayExt.move(this._menus, i, j);\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n }\n /**\n * Remove a menu from the menu bar.\n *\n * @param menu - The menu to remove from the menu bar.\n *\n * #### Notes\n * This is a no-op if the menu is not in the menu bar.\n */\n removeMenu(menu, update = true) {\n this.removeMenuAt(this._menus.indexOf(menu), update);\n }\n /**\n * Remove the menu at a given index from the menu bar.\n *\n * @param index - The index of the menu to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeMenuAt(index, update = true) {\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Remove the menu from the array.\n let menu = ArrayExt.removeAt(this._menus, index);\n // Bail if the index is out of range.\n if (!menu) {\n return;\n }\n // Disconnect from the menu signals.\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n menu.title.changed.disconnect(this._onTitleChanged, this);\n // Remove the styling class from the menu.\n menu.removeClass('lm-MenuBar-menu');\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n }\n /**\n * Remove all menus from the menu bar.\n */\n clearMenus() {\n // Bail if there is nothing to remove.\n if (this._menus.length === 0) {\n return;\n }\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Disconnect from the menu signals and remove the styling class.\n for (let menu of this._menus) {\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n menu.title.changed.disconnect(this._onTitleChanged, this);\n menu.removeClass('lm-MenuBar-menu');\n }\n // Clear the menus array.\n this._menus.length = 0;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Handle the DOM events for the menu bar.\n *\n * @param event - The DOM event sent to the menu bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the menu bar's DOM nodes. It\n * should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'focusout':\n this._evtFocusOut(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('mousedown', this);\n this.node.addEventListener('mousemove', this);\n this.node.addEventListener('focusout', this);\n this.node.addEventListener('contextmenu', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('mousedown', this);\n this.node.removeEventListener('mousemove', this);\n this.node.removeEventListener('focusout', this);\n this.node.removeEventListener('contextmenu', this);\n this._closeChildMenu();\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n this._focusItemAt(0);\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n this.update();\n super.onResize(msg);\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n var _a;\n let menus = this._menus;\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let tabFocusIndex = this._tabFocusIndex >= 0 && this._tabFocusIndex < menus.length\n ? this._tabFocusIndex\n : 0;\n let length = this._overflowIndex > -1 ? this._overflowIndex : menus.length;\n let totalMenuSize = 0;\n let isVisible = false;\n // Check that the overflow menu doesn't count\n length = this._overflowMenu !== null ? length - 1 : length;\n let content = new Array(length);\n // Render visible menus\n for (let i = 0; i < length; ++i) {\n content[i] = renderer.renderItem({\n title: menus[i].title,\n active: i === activeIndex,\n tabbable: i === tabFocusIndex,\n disabled: menus[i].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = i;\n this.activeIndex = i;\n }\n });\n // Calculate size of current menu\n totalMenuSize += this._menuItemSizes[i];\n // Check if overflow menu is already rendered\n if (menus[i].title.label === this._overflowMenuOptions.title) {\n isVisible = true;\n length--;\n }\n }\n // Render overflow menu if needed and active\n if (this._overflowMenuOptions.isVisible) {\n if (this._overflowIndex > -1 && !isVisible) {\n // Create overflow menu\n if (this._overflowMenu === null) {\n const overflowMenuTitle = (_a = this._overflowMenuOptions.title) !== null && _a !== void 0 ? _a : '...';\n this._overflowMenu = new Menu({ commands: new CommandRegistry() });\n this._overflowMenu.title.label = overflowMenuTitle;\n this._overflowMenu.title.mnemonic = 0;\n this.addMenu(this._overflowMenu, false);\n }\n // Move menus to overflow menu\n for (let i = menus.length - 2; i >= length; i--) {\n const submenu = this.menus[i];\n submenu.title.mnemonic = 0;\n this._overflowMenu.insertItem(0, {\n type: 'submenu',\n submenu: submenu\n });\n this.removeMenu(submenu, false);\n }\n content[length] = renderer.renderItem({\n title: this._overflowMenu.title,\n active: length === activeIndex && menus[length].items.length !== 0,\n tabbable: length === tabFocusIndex,\n disabled: menus[length].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = length;\n this.activeIndex = length;\n }\n });\n length++;\n }\n else if (this._overflowMenu !== null) {\n // Remove submenus from overflow menu\n let overflowMenuItems = this._overflowMenu.items;\n let screenSize = this.node.offsetWidth;\n let n = this._overflowMenu.items.length;\n for (let i = 0; i < n; ++i) {\n let index = menus.length - 1 - i;\n if (screenSize - totalMenuSize > this._menuItemSizes[index]) {\n let menu = overflowMenuItems[0].submenu;\n this._overflowMenu.removeItemAt(0);\n this.insertMenu(length, menu, false);\n content[length] = renderer.renderItem({\n title: menu.title,\n active: false,\n tabbable: length === tabFocusIndex,\n disabled: menus[length].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = length;\n this.activeIndex = length;\n }\n });\n length++;\n }\n }\n if (this._overflowMenu.items.length === 0) {\n this.removeMenu(this._overflowMenu, false);\n content.pop();\n this._overflowMenu = null;\n this._overflowIndex = -1;\n }\n }\n }\n VirtualDOM.render(content, this.contentNode);\n this._updateOverflowIndex();\n }\n /**\n * Calculate and update the current overflow index.\n */\n _updateOverflowIndex() {\n if (!this._overflowMenuOptions.isVisible) {\n return;\n }\n // Get elements visible in the main menu bar\n const itemMenus = this.contentNode.childNodes;\n let screenSize = this.node.offsetWidth;\n let totalMenuSize = 0;\n let index = -1;\n let n = itemMenus.length;\n if (this._menuItemSizes.length == 0) {\n // Check if it is the first resize and get info about menu items sizes\n for (let i = 0; i < n; i++) {\n let item = itemMenus[i];\n // Add sizes to array\n totalMenuSize += item.offsetWidth;\n this._menuItemSizes.push(item.offsetWidth);\n if (totalMenuSize > screenSize && index === -1) {\n index = i;\n }\n }\n }\n else {\n // Calculate current menu size\n for (let i = 0; i < this._menuItemSizes.length; i++) {\n totalMenuSize += this._menuItemSizes[i];\n if (totalMenuSize > screenSize) {\n index = i;\n break;\n }\n }\n }\n this._overflowIndex = index;\n }\n /**\n * Handle the `'keydown'` event for the menu bar.\n *\n * #### Notes\n * All keys are trapped except the tab key that is ignored.\n */\n _evtKeyDown(event) {\n // Fetch the key code for the event.\n let kc = event.keyCode;\n // Reset the active index on tab, but do not trap the tab key.\n if (kc === 9) {\n this.activeIndex = -1;\n return;\n }\n // A menu bar handles all other keydown events.\n event.preventDefault();\n event.stopPropagation();\n // Enter, Space, Up Arrow, Down Arrow\n if (kc === 13 || kc === 32 || kc === 38 || kc === 40) {\n // The active index may have changed (for example, user hovers over an\n // item with the mouse), so be sure to use the focus index.\n this.activeIndex = this._tabFocusIndex;\n if (this.activeIndex !== this._tabFocusIndex) {\n // Bail if the setter refused to set activeIndex to tabFocusIndex\n // because it means that the item at tabFocusIndex cannot be opened (for\n // example, it has an empty menu)\n return;\n }\n this.openActiveMenu();\n return;\n }\n // Escape\n if (kc === 27) {\n this._closeChildMenu();\n this._focusItemAt(this.activeIndex);\n return;\n }\n // Left or Right Arrow\n if (kc === 37 || kc === 39) {\n let direction = kc === 37 ? -1 : 1;\n let start = this._tabFocusIndex + direction;\n let n = this._menus.length;\n for (let i = 0; i < n; i++) {\n let index = (n + start + direction * i) % n;\n if (this._menus[index].items.length) {\n this._focusItemAt(index);\n return;\n }\n }\n return;\n }\n // Get the pressed key character.\n let key = getKeyboardLayout().keyForKeydownEvent(event);\n // Bail if the key is not valid.\n if (!key) {\n return;\n }\n // Search for the next best matching mnemonic item.\n let start = this._activeIndex + 1;\n let result = Private$3.findMnemonic(this._menus, key, start);\n // Handle the requested mnemonic based on the search results.\n // If exactly one mnemonic is matched, that menu is opened.\n // Otherwise, the next mnemonic is activated if available,\n // followed by the auto mnemonic if available.\n if (result.index !== -1 && !result.multiple) {\n this.activeIndex = result.index;\n this.openActiveMenu();\n }\n else if (result.index !== -1) {\n this.activeIndex = result.index;\n this._focusItemAt(this.activeIndex);\n }\n else if (result.auto !== -1) {\n this.activeIndex = result.auto;\n this._focusItemAt(this.activeIndex);\n }\n }\n /**\n * Handle the `'mousedown'` event for the menu bar.\n */\n _evtMouseDown(event) {\n // Bail if the mouse press was not on the menu bar. This can occur\n // when the document listener is installed for an active menu bar.\n if (!ElementExt.hitTest(this.node, event.clientX, event.clientY)) {\n return;\n }\n // Stop the propagation of the event. Immediate propagation is\n // also stopped so that an open menu does not handle the event.\n event.stopPropagation();\n event.stopImmediatePropagation();\n // Check if the mouse is over one of the menu items.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // If the press was not on an item, close the child menu.\n if (index === -1) {\n this._closeChildMenu();\n return;\n }\n // If the press was not the left mouse button, do nothing further.\n if (event.button !== 0) {\n return;\n }\n // Otherwise, toggle the open state of the child menu.\n if (this._childMenu) {\n this._closeChildMenu();\n this.activeIndex = index;\n }\n else {\n // If we don't call preventDefault() here, then the item in the menu\n // bar will take focus over the menu that is being opened.\n event.preventDefault();\n const position = this._positionForMenu(index);\n Menu.saveWindowData();\n // Begin DOM modifications.\n this.activeIndex = index;\n this._openChildMenu(position);\n }\n }\n /**\n * Handle the `'mousemove'` event for the menu bar.\n */\n _evtMouseMove(event) {\n // Check if the mouse is over one of the menu items.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // Bail early if the active index will not change.\n if (index === this._activeIndex) {\n return;\n }\n // Bail early if a child menu is open and the mouse is not over\n // an item. This allows the child menu to be kept open when the\n // mouse is over the empty part of the menu bar.\n if (index === -1 && this._childMenu) {\n return;\n }\n // Get position for the new menu >before< updating active index.\n const position = index >= 0 && this._childMenu ? this._positionForMenu(index) : null;\n // Before any modification, update window data.\n Menu.saveWindowData();\n // Begin DOM modifications.\n // Update the active index to the hovered item.\n this.activeIndex = index;\n // Open the new menu if a menu is already open.\n if (position) {\n this._openChildMenu(position);\n }\n }\n /**\n * Find initial position for the menu based on menubar item position.\n *\n * NOTE: this should be called before updating active index to avoid\n * an additional layout and style invalidation as changing active\n * index modifies DOM.\n */\n _positionForMenu(index) {\n let itemNode = this.contentNode.children[index];\n let { left, bottom } = itemNode.getBoundingClientRect();\n return {\n top: bottom,\n left\n };\n }\n /**\n * Handle the `'focusout'` event for the menu bar.\n */\n _evtFocusOut(event) {\n // Reset the active index if there is no open menu and the menubar is losing focus.\n if (!this._childMenu && !this.node.contains(event.relatedTarget)) {\n this.activeIndex = -1;\n }\n }\n /**\n * Focus an item in the menu bar.\n *\n * #### Notes\n * Does not open the associated menu.\n */\n _focusItemAt(index) {\n const itemNode = this.contentNode.childNodes[index];\n if (itemNode) {\n itemNode.focus();\n }\n }\n /**\n * Open the child menu at the active index immediately.\n *\n * If a different child menu is already open, it will be closed,\n * even if there is no active menu.\n */\n _openChildMenu(options = {}) {\n // If there is no active menu, close the current menu.\n let newMenu = this.activeMenu;\n if (!newMenu) {\n this._closeChildMenu();\n return;\n }\n // Bail if there is no effective menu change.\n let oldMenu = this._childMenu;\n if (oldMenu === newMenu) {\n return;\n }\n // Swap the internal menu reference.\n this._childMenu = newMenu;\n // Close the current menu, or setup for the new menu.\n if (oldMenu) {\n oldMenu.close();\n }\n else {\n document.addEventListener('mousedown', this, true);\n }\n // Update the tab focus index and ensure the menu bar is updated.\n this._tabFocusIndex = this.activeIndex;\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n // Get the positioning data for the new menu.\n let { left, top } = options;\n if (typeof left === 'undefined' || typeof top === 'undefined') {\n ({ left, top } = this._positionForMenu(this._activeIndex));\n }\n // Begin DOM modifications\n if (!oldMenu) {\n // Continue setup for new menu\n this.addClass('lm-mod-active');\n }\n // Open the new menu at the computed location.\n if (newMenu.items.length > 0) {\n newMenu.open(left, top, this._forceItemsPosition);\n }\n }\n /**\n * Close the child menu immediately.\n *\n * This is a no-op if a child menu is not open.\n */\n _closeChildMenu() {\n // Bail if no child menu is open.\n if (!this._childMenu) {\n return;\n }\n // Remove the active class from the menu bar.\n this.removeClass('lm-mod-active');\n // Remove the document listeners.\n document.removeEventListener('mousedown', this, true);\n // Clear the internal menu reference.\n let menu = this._childMenu;\n this._childMenu = null;\n // Close the menu.\n menu.close();\n // Reset the active index.\n this.activeIndex = -1;\n }\n /**\n * Handle the `aboutToClose` signal of a menu.\n */\n _onMenuAboutToClose(sender) {\n // Bail if the sender is not the child menu.\n if (sender !== this._childMenu) {\n return;\n }\n // Remove the active class from the menu bar.\n this.removeClass('lm-mod-active');\n // Remove the document listeners.\n document.removeEventListener('mousedown', this, true);\n // Clear the internal menu reference.\n this._childMenu = null;\n // Reset the active index.\n this.activeIndex = -1;\n }\n /**\n * Handle the `menuRequested` signal of a child menu.\n */\n _onMenuMenuRequested(sender, args) {\n // Bail if the sender is not the child menu.\n if (sender !== this._childMenu) {\n return;\n }\n // Look up the active index and menu count.\n let i = this._activeIndex;\n let n = this._menus.length;\n // Active the next requested index.\n switch (args) {\n case 'next':\n this.activeIndex = i === n - 1 ? 0 : i + 1;\n break;\n case 'previous':\n this.activeIndex = i === 0 ? n - 1 : i - 1;\n break;\n }\n // Open the active menu.\n this.openActiveMenu();\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged() {\n this.update();\n }\n}\n/**\n * The namespace for the `MenuBar` class statics.\n */\n(function (MenuBar) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n /**\n * Render the virtual element for a menu bar item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n let aria = this.createItemARIA(data);\n return h.li({\n className,\n dataset,\n ...(data.disabled ? {} : { tabindex: data.tabbable ? '0' : '-1' }),\n onfocus: data.onfocus,\n ...aria\n }, this.renderIcon(data), this.renderLabel(data));\n }\n /**\n * Render the icon element for a menu bar item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the item icon.\n */\n renderIcon(data) {\n let className = this.createIconClass(data);\n // If data.title.icon is undefined, it will be ignored.\n return h.div({ className }, data.title.icon, data.title.iconLabel);\n }\n /**\n * Render the label element for a menu item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the item label.\n */\n renderLabel(data) {\n let content = this.formatLabel(data);\n return h.div({ className: 'lm-MenuBar-itemLabel' }, content);\n }\n /**\n * Create the class name for the menu bar item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the menu item.\n */\n createItemClass(data) {\n let name = 'lm-MenuBar-item';\n if (data.title.className) {\n name += ` ${data.title.className}`;\n }\n if (data.active && !data.disabled) {\n name += ' lm-mod-active';\n }\n return name;\n }\n /**\n * Create the dataset for a menu bar item.\n *\n * @param data - The data to use for the item.\n *\n * @returns The dataset for the menu bar item.\n */\n createItemDataset(data) {\n return data.title.dataset;\n }\n /**\n * Create the aria attributes for menu bar item.\n *\n * @param data - The data to use for the aria attributes.\n *\n * @returns The aria attributes object for the item.\n */\n createItemARIA(data) {\n return {\n role: 'menuitem',\n 'aria-haspopup': 'true',\n 'aria-disabled': data.disabled ? 'true' : 'false'\n };\n }\n /**\n * Create the class name for the menu bar item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-MenuBar-itemIcon';\n let extra = data.title.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the render content for the label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatLabel(data) {\n // Fetch the label text and mnemonic index.\n let { label, mnemonic } = data.title;\n // If the index is out of range, do not modify the label.\n if (mnemonic < 0 || mnemonic >= label.length) {\n return label;\n }\n // Split the label into parts.\n let prefix = label.slice(0, mnemonic);\n let suffix = label.slice(mnemonic + 1);\n let char = label[mnemonic];\n // Wrap the mnemonic character in a span.\n let span = h.span({ className: 'lm-MenuBar-itemMnemonic' }, char);\n // Return the content parts.\n return [prefix, span, suffix];\n }\n }\n MenuBar.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n MenuBar.defaultRenderer = new Renderer();\n})(MenuBar || (MenuBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$3;\n(function (Private) {\n /**\n * Create the DOM node for a menu bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.className = 'lm-MenuBar-content';\n node.appendChild(content);\n content.setAttribute('role', 'menubar');\n return node;\n }\n Private.createNode = createNode;\n /**\n * Find the best matching mnemonic item.\n *\n * The search starts at the given index and wraps around.\n */\n function findMnemonic(menus, key, start) {\n // Setup the result variables.\n let index = -1;\n let auto = -1;\n let multiple = false;\n // Normalize the key to upper case.\n let upperKey = key.toUpperCase();\n // Search the items from the given start index.\n for (let i = 0, n = menus.length; i < n; ++i) {\n // Compute the wrapped index.\n let k = (i + start) % n;\n // Look up the menu title.\n let title = menus[k].title;\n // Ignore titles with an empty label.\n if (title.label.length === 0) {\n continue;\n }\n // Look up the mnemonic index for the label.\n let mn = title.mnemonic;\n // Handle a valid mnemonic index.\n if (mn >= 0 && mn < title.label.length) {\n if (title.label[mn].toUpperCase() === upperKey) {\n if (index === -1) {\n index = k;\n }\n else {\n multiple = true;\n }\n }\n continue;\n }\n // Finally, handle the auto index if possible.\n if (auto === -1 && title.label[0].toUpperCase() === upperKey) {\n auto = k;\n }\n }\n // Return the search results.\n return { index, multiple, auto };\n }\n Private.findMnemonic = findMnemonic;\n})(Private$3 || (Private$3 = {}));\n\n/**\n * A widget which implements a canonical scroll bar.\n */\nclass ScrollBar extends Widget {\n /**\n * Construct a new scroll bar.\n *\n * @param options - The options for initializing the scroll bar.\n */\n constructor(options = {}) {\n super({ node: Private$2.createNode() });\n /**\n * A timeout callback for repeating the mouse press.\n */\n this._onRepeat = () => {\n // Clear the repeat timer id.\n this._repeatTimer = -1;\n // Bail if the mouse has been released.\n if (!this._pressData) {\n return;\n }\n // Look up the part that was pressed.\n let part = this._pressData.part;\n // Bail if the thumb was pressed.\n if (part === 'thumb') {\n return;\n }\n // Schedule the timer for another repeat.\n this._repeatTimer = window.setTimeout(this._onRepeat, 20);\n // Get the current mouse position.\n let mouseX = this._pressData.mouseX;\n let mouseY = this._pressData.mouseY;\n // Handle a decrement button repeat.\n if (part === 'decrement') {\n // Bail if the mouse is not over the button.\n if (!ElementExt.hitTest(this.decrementNode, mouseX, mouseY)) {\n return;\n }\n // Emit the step requested signal.\n this._stepRequested.emit('decrement');\n // Finished.\n return;\n }\n // Handle an increment button repeat.\n if (part === 'increment') {\n // Bail if the mouse is not over the button.\n if (!ElementExt.hitTest(this.incrementNode, mouseX, mouseY)) {\n return;\n }\n // Emit the step requested signal.\n this._stepRequested.emit('increment');\n // Finished.\n return;\n }\n // Handle a track repeat.\n if (part === 'track') {\n // Bail if the mouse is not over the track.\n if (!ElementExt.hitTest(this.trackNode, mouseX, mouseY)) {\n return;\n }\n // Fetch the thumb node.\n let thumbNode = this.thumbNode;\n // Bail if the mouse is over the thumb.\n if (ElementExt.hitTest(thumbNode, mouseX, mouseY)) {\n return;\n }\n // Fetch the client rect for the thumb.\n let thumbRect = thumbNode.getBoundingClientRect();\n // Determine the direction for the page request.\n let dir;\n if (this._orientation === 'horizontal') {\n dir = mouseX < thumbRect.left ? 'decrement' : 'increment';\n }\n else {\n dir = mouseY < thumbRect.top ? 'decrement' : 'increment';\n }\n // Emit the page requested signal.\n this._pageRequested.emit(dir);\n // Finished.\n return;\n }\n };\n this._value = 0;\n this._page = 10;\n this._maximum = 100;\n this._repeatTimer = -1;\n this._pressData = null;\n this._thumbMoved = new Signal(this);\n this._stepRequested = new Signal(this);\n this._pageRequested = new Signal(this);\n this.addClass('lm-ScrollBar');\n this.setFlag(Widget.Flag.DisallowLayout);\n // Set the orientation.\n this._orientation = options.orientation || 'vertical';\n this.dataset['orientation'] = this._orientation;\n // Parse the rest of the options.\n if (options.maximum !== undefined) {\n this._maximum = Math.max(0, options.maximum);\n }\n if (options.page !== undefined) {\n this._page = Math.max(0, options.page);\n }\n if (options.value !== undefined) {\n this._value = Math.max(0, Math.min(options.value, this._maximum));\n }\n }\n /**\n * A signal emitted when the user moves the scroll thumb.\n *\n * #### Notes\n * The payload is the current value of the scroll bar.\n */\n get thumbMoved() {\n return this._thumbMoved;\n }\n /**\n * A signal emitted when the user clicks a step button.\n *\n * #### Notes\n * The payload is whether a decrease or increase is requested.\n */\n get stepRequested() {\n return this._stepRequested;\n }\n /**\n * A signal emitted when the user clicks the scroll track.\n *\n * #### Notes\n * The payload is whether a decrease or increase is requested.\n */\n get pageRequested() {\n return this._pageRequested;\n }\n /**\n * Get the orientation of the scroll bar.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the orientation of the scroll bar.\n */\n set orientation(value) {\n // Do nothing if the orientation does not change.\n if (this._orientation === value) {\n return;\n }\n // Release the mouse before making changes.\n this._releaseMouse();\n // Update the internal orientation.\n this._orientation = value;\n this.dataset['orientation'] = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the current value of the scroll bar.\n */\n get value() {\n return this._value;\n }\n /**\n * Set the current value of the scroll bar.\n *\n * #### Notes\n * The value will be clamped to the range `[0, maximum]`.\n */\n set value(value) {\n // Clamp the value to the allowable range.\n value = Math.max(0, Math.min(value, this._maximum));\n // Do nothing if the value does not change.\n if (this._value === value) {\n return;\n }\n // Update the internal value.\n this._value = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the page size of the scroll bar.\n *\n * #### Notes\n * The page size is the amount of visible content in the scrolled\n * region, expressed in data units. It determines the size of the\n * scroll bar thumb.\n */\n get page() {\n return this._page;\n }\n /**\n * Set the page size of the scroll bar.\n *\n * #### Notes\n * The page size will be clamped to the range `[0, Infinity]`.\n */\n set page(value) {\n // Clamp the page size to the allowable range.\n value = Math.max(0, value);\n // Do nothing if the value does not change.\n if (this._page === value) {\n return;\n }\n // Update the internal page size.\n this._page = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the maximum value of the scroll bar.\n */\n get maximum() {\n return this._maximum;\n }\n /**\n * Set the maximum value of the scroll bar.\n *\n * #### Notes\n * The max size will be clamped to the range `[0, Infinity]`.\n */\n set maximum(value) {\n // Clamp the value to the allowable range.\n value = Math.max(0, value);\n // Do nothing if the value does not change.\n if (this._maximum === value) {\n return;\n }\n // Update the internal values.\n this._maximum = value;\n // Clamp the current value to the new range.\n this._value = Math.min(this._value, value);\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * The scroll bar decrement button node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get decrementNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-button')[0];\n }\n /**\n * The scroll bar increment button node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get incrementNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-button')[1];\n }\n /**\n * The scroll bar track node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get trackNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-track')[0];\n }\n /**\n * The scroll bar thumb node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get thumbNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-thumb')[0];\n }\n /**\n * Handle the DOM events for the scroll bar.\n *\n * @param event - The DOM event sent to the scroll bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the scroll bar's DOM node.\n *\n * This should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'mouseup':\n this._evtMouseUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A method invoked on a 'before-attach' message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('mousedown', this);\n this.update();\n }\n /**\n * A method invoked on an 'after-detach' message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('mousedown', this);\n this._releaseMouse();\n }\n /**\n * A method invoked on an 'update-request' message.\n */\n onUpdateRequest(msg) {\n // Convert the value and page into percentages.\n let value = (this._value * 100) / this._maximum;\n let page = (this._page * 100) / (this._page + this._maximum);\n // Clamp the value and page to the relevant range.\n value = Math.max(0, Math.min(value, 100));\n page = Math.max(0, Math.min(page, 100));\n // Fetch the thumb style.\n let thumbStyle = this.thumbNode.style;\n // Update the thumb style for the current orientation.\n if (this._orientation === 'horizontal') {\n thumbStyle.top = '';\n thumbStyle.height = '';\n thumbStyle.left = `${value}%`;\n thumbStyle.width = `${page}%`;\n thumbStyle.transform = `translate(${-value}%, 0%)`;\n }\n else {\n thumbStyle.left = '';\n thumbStyle.width = '';\n thumbStyle.top = `${value}%`;\n thumbStyle.height = `${page}%`;\n thumbStyle.transform = `translate(0%, ${-value}%)`;\n }\n }\n /**\n * Handle the `'keydown'` event for the scroll bar.\n */\n _evtKeyDown(event) {\n // Stop all input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Ignore anything except the `Escape` key.\n if (event.keyCode !== 27) {\n return;\n }\n // Fetch the previous scroll value.\n let value = this._pressData ? this._pressData.value : -1;\n // Release the mouse.\n this._releaseMouse();\n // Restore the old scroll value if possible.\n if (value !== -1) {\n this._moveThumb(value);\n }\n }\n /**\n * Handle the `'mousedown'` event for the scroll bar.\n */\n _evtMouseDown(event) {\n // Do nothing if it's not a left mouse press.\n if (event.button !== 0) {\n return;\n }\n // Send an activate request to the scroll bar. This can be\n // used by message hooks to activate something relevant.\n this.activate();\n // Do nothing if the mouse is already captured.\n if (this._pressData) {\n return;\n }\n // Find the pressed scroll bar part.\n let part = Private$2.findPart(this, event.target);\n // Do nothing if the part is not of interest.\n if (!part) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Override the mouse cursor.\n let override = Drag.overrideCursor('default');\n // Set up the press data.\n this._pressData = {\n part,\n override,\n delta: -1,\n value: -1,\n mouseX: event.clientX,\n mouseY: event.clientY\n };\n // Add the extra event listeners.\n document.addEventListener('mousemove', this, true);\n document.addEventListener('mouseup', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('contextmenu', this, true);\n // Handle a thumb press.\n if (part === 'thumb') {\n // Fetch the thumb node.\n let thumbNode = this.thumbNode;\n // Fetch the client rect for the thumb.\n let thumbRect = thumbNode.getBoundingClientRect();\n // Update the press data delta for the current orientation.\n if (this._orientation === 'horizontal') {\n this._pressData.delta = event.clientX - thumbRect.left;\n }\n else {\n this._pressData.delta = event.clientY - thumbRect.top;\n }\n // Add the active class to the thumb node.\n thumbNode.classList.add('lm-mod-active');\n // Store the current value in the press data.\n this._pressData.value = this._value;\n // Finished.\n return;\n }\n // Handle a track press.\n if (part === 'track') {\n // Fetch the client rect for the thumb.\n let thumbRect = this.thumbNode.getBoundingClientRect();\n // Determine the direction for the page request.\n let dir;\n if (this._orientation === 'horizontal') {\n dir = event.clientX < thumbRect.left ? 'decrement' : 'increment';\n }\n else {\n dir = event.clientY < thumbRect.top ? 'decrement' : 'increment';\n }\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the page requested signal.\n this._pageRequested.emit(dir);\n // Finished.\n return;\n }\n // Handle a decrement button press.\n if (part === 'decrement') {\n // Add the active class to the decrement node.\n this.decrementNode.classList.add('lm-mod-active');\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the step requested signal.\n this._stepRequested.emit('decrement');\n // Finished.\n return;\n }\n // Handle an increment button press.\n if (part === 'increment') {\n // Add the active class to the increment node.\n this.incrementNode.classList.add('lm-mod-active');\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the step requested signal.\n this._stepRequested.emit('increment');\n // Finished.\n return;\n }\n }\n /**\n * Handle the `'mousemove'` event for the scroll bar.\n */\n _evtMouseMove(event) {\n // Do nothing if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Update the mouse position.\n this._pressData.mouseX = event.clientX;\n this._pressData.mouseY = event.clientY;\n // Bail if the thumb is not being dragged.\n if (this._pressData.part !== 'thumb') {\n return;\n }\n // Get the client rect for the thumb and track.\n let thumbRect = this.thumbNode.getBoundingClientRect();\n let trackRect = this.trackNode.getBoundingClientRect();\n // Fetch the scroll geometry based on the orientation.\n let trackPos;\n let trackSpan;\n if (this._orientation === 'horizontal') {\n trackPos = event.clientX - trackRect.left - this._pressData.delta;\n trackSpan = trackRect.width - thumbRect.width;\n }\n else {\n trackPos = event.clientY - trackRect.top - this._pressData.delta;\n trackSpan = trackRect.height - thumbRect.height;\n }\n // Compute the desired value from the scroll geometry.\n let value = trackSpan === 0 ? 0 : (trackPos * this._maximum) / trackSpan;\n // Move the thumb to the computed value.\n this._moveThumb(value);\n }\n /**\n * Handle the `'mouseup'` event for the scroll bar.\n */\n _evtMouseUp(event) {\n // Do nothing if it's not a left mouse release.\n if (event.button !== 0) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse.\n this._releaseMouse();\n }\n /**\n * Release the mouse and restore the node states.\n */\n _releaseMouse() {\n // Bail if there is no press data.\n if (!this._pressData) {\n return;\n }\n // Clear the repeat timer.\n clearTimeout(this._repeatTimer);\n this._repeatTimer = -1;\n // Clear the press data.\n this._pressData.override.dispose();\n this._pressData = null;\n // Remove the extra event listeners.\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('contextmenu', this, true);\n // Remove the active classes from the nodes.\n this.thumbNode.classList.remove('lm-mod-active');\n this.decrementNode.classList.remove('lm-mod-active');\n this.incrementNode.classList.remove('lm-mod-active');\n }\n /**\n * Move the thumb to the specified position.\n */\n _moveThumb(value) {\n // Clamp the value to the allowed range.\n value = Math.max(0, Math.min(value, this._maximum));\n // Bail if the value does not change.\n if (this._value === value) {\n return;\n }\n // Update the internal value.\n this._value = value;\n // Schedule an update of the scroll bar.\n this.update();\n // Emit the thumb moved signal.\n this._thumbMoved.emit(value);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$2;\n(function (Private) {\n /**\n * Create the DOM node for a scroll bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let decrement = document.createElement('div');\n let increment = document.createElement('div');\n let track = document.createElement('div');\n let thumb = document.createElement('div');\n decrement.className = 'lm-ScrollBar-button';\n increment.className = 'lm-ScrollBar-button';\n decrement.dataset['action'] = 'decrement';\n increment.dataset['action'] = 'increment';\n track.className = 'lm-ScrollBar-track';\n thumb.className = 'lm-ScrollBar-thumb';\n track.appendChild(thumb);\n node.appendChild(decrement);\n node.appendChild(track);\n node.appendChild(increment);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Find the scroll bar part which contains the given target.\n */\n function findPart(scrollBar, target) {\n // Test the thumb.\n if (scrollBar.thumbNode.contains(target)) {\n return 'thumb';\n }\n // Test the track.\n if (scrollBar.trackNode.contains(target)) {\n return 'track';\n }\n // Test the decrement button.\n if (scrollBar.decrementNode.contains(target)) {\n return 'decrement';\n }\n // Test the increment button.\n if (scrollBar.incrementNode.contains(target)) {\n return 'increment';\n }\n // Indicate no match.\n return null;\n }\n Private.findPart = findPart;\n})(Private$2 || (Private$2 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation which holds a single widget.\n *\n * #### Notes\n * This class is useful for creating simple container widgets which\n * hold a single child. The child should be positioned with CSS.\n */\nclass SingletonLayout extends Layout {\n constructor() {\n super(...arguments);\n this._widget = null;\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n if (this._widget) {\n let widget = this._widget;\n this._widget = null;\n widget.dispose();\n }\n super.dispose();\n }\n /**\n * Get the child widget for the layout.\n */\n get widget() {\n return this._widget;\n }\n /**\n * Set the child widget for the layout.\n *\n * #### Notes\n * Setting the child widget will cause the old child widget to be\n * automatically disposed. If that is not desired, set the parent\n * of the old child to `null` before assigning a new child.\n */\n set widget(widget) {\n // Remove the widget from its current parent. This is a no-op\n // if the widget's parent is already the layout parent widget.\n if (widget) {\n widget.parent = this.parent;\n }\n // Bail early if the widget does not change.\n if (this._widget === widget) {\n return;\n }\n // Dispose of the old child widget.\n if (this._widget) {\n this._widget.dispose();\n }\n // Update the internal widget.\n this._widget = widget;\n // Attach the new child widget if needed.\n if (this.parent && widget) {\n this.attachWidget(widget);\n }\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n if (this._widget) {\n yield this._widget;\n }\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Bail early if the widget does not exist in the layout.\n if (this._widget !== widget) {\n return;\n }\n // Clear the internal widget.\n this._widget = null;\n // If the layout is parented, detach the widget from the DOM.\n if (this.parent) {\n this.detachWidget(widget);\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n for (const widget of this) {\n this.attachWidget(widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This method is called automatically by the single layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation adds the widgets's node to the parent's\n * node at the proper location, and sends the appropriate attach\n * messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is added to the parent's node.\n */\n attachWidget(widget) {\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This method is called automatically by the single layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation removes the widget's node from the\n * parent's node, and sends the appropriate detach messages to the\n * widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is removed from the parent's node.\n */\n detachWidget(widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout where visible widgets are stacked atop one another.\n *\n * #### Notes\n * The Z-order of the visible widgets follows their layout order.\n */\nclass StackedLayout extends PanelLayout {\n constructor(options = {}) {\n super(options);\n this._dirty = false;\n this._items = [];\n this._box = null;\n this._hiddenMode =\n options.hiddenMode !== undefined\n ? options.hiddenMode\n : Widget.HiddenMode.Display;\n }\n /**\n * The method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n set hiddenMode(v) {\n if (this._hiddenMode === v) {\n return;\n }\n this._hiddenMode = v;\n if (this.widgets.length > 1) {\n this.widgets.forEach(w => {\n w.hiddenMode = this._hiddenMode;\n });\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Using transform create an additional layer in the pixel pipeline\n // to limit the number of layer, it is set only if there is more than one widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale &&\n this._items.length > 0) {\n if (this._items.length === 1) {\n this.widgets[0].hiddenMode = Widget.HiddenMode.Scale;\n }\n widget.hiddenMode = Widget.HiddenMode.Scale;\n }\n else {\n widget.hiddenMode = Widget.HiddenMode.Display;\n }\n // Create and add a new layout item for the widget.\n ArrayExt.insert(this._items, index, new LayoutItem(widget));\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the layout item for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n // Post an update request for the parent widget.\n this.parent.update();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the layout item for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Reset the z-index for the widget.\n item.widget.node.style.zIndex = '';\n // Reset the hidden mode for the widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale) {\n widget.hiddenMode = Widget.HiddenMode.Display;\n // Reset the hidden mode for the first widget if necessary.\n if (this._items.length === 1) {\n this._items[0].widget.hiddenMode = Widget.HiddenMode.Display;\n }\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Set up the computed minimum size.\n let minW = 0;\n let minH = 0;\n // Update the computed minimum size.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the computed minimum size.\n minW = Math.max(minW, item.minWidth);\n minH = Math.max(minH, item.minHeight);\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Update the widget stacking order and layout geometry.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Set the z-index for the widget.\n item.widget.node.style.zIndex = `${i}`;\n // Update the item geometry.\n item.update(left, top, width, height);\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel where visible widgets are stacked atop one another.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link StackedLayout}.\n */\nclass StackedPanel extends Panel {\n /**\n * Construct a new stacked panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super({ layout: Private$1.createLayout(options) });\n this._widgetRemoved = new Signal(this);\n this.addClass('lm-StackedPanel');\n }\n /**\n * The method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this.layout.hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n set hiddenMode(v) {\n this.layout.hiddenMode = v;\n }\n /**\n * A signal emitted when a widget is removed from a stacked panel.\n */\n get widgetRemoved() {\n return this._widgetRemoved;\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-StackedPanel-child');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-StackedPanel-child');\n this._widgetRemoved.emit(msg.child);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$1;\n(function (Private) {\n /**\n * Create a stacked layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new StackedLayout();\n }\n Private.createLayout = createLayout;\n})(Private$1 || (Private$1 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which combines a `TabBar` and a `StackedPanel`.\n *\n * #### Notes\n * This is a simple panel which handles the common case of a tab bar\n * placed next to a content area. The selected tab controls the widget\n * which is shown in the content area.\n *\n * For use cases which require more control than is provided by this\n * panel, the `TabBar` widget may be used independently.\n */\nclass TabPanel extends Widget {\n /**\n * Construct a new tab panel.\n *\n * @param options - The options for initializing the tab panel.\n */\n constructor(options = {}) {\n super();\n this._currentChanged = new Signal(this);\n this._addRequested = new Signal(this);\n this.addClass('lm-TabPanel');\n // Create the tab bar and stacked panel.\n this.tabBar = new TabBar(options);\n this.tabBar.addClass('lm-TabPanel-tabBar');\n this.stackedPanel = new StackedPanel();\n this.stackedPanel.addClass('lm-TabPanel-stackedPanel');\n // Connect the tab bar signal handlers.\n this.tabBar.tabMoved.connect(this._onTabMoved, this);\n this.tabBar.currentChanged.connect(this._onCurrentChanged, this);\n this.tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n this.tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n this.tabBar.addRequested.connect(this._onTabAddRequested, this);\n // Connect the stacked panel signal handlers.\n this.stackedPanel.widgetRemoved.connect(this._onWidgetRemoved, this);\n // Get the data related to the placement.\n this._tabPlacement = options.tabPlacement || 'top';\n let direction = Private.directionFromPlacement(this._tabPlacement);\n let orientation = Private.orientationFromPlacement(this._tabPlacement);\n // Configure the tab bar for the placement.\n this.tabBar.orientation = orientation;\n this.tabBar.dataset['placement'] = this._tabPlacement;\n // Create the box layout.\n let layout = new BoxLayout({ direction, spacing: 0 });\n // Set the stretch factors for the child widgets.\n BoxLayout.setStretch(this.tabBar, 0);\n BoxLayout.setStretch(this.stackedPanel, 1);\n // Add the child widgets to the layout.\n layout.addWidget(this.tabBar);\n layout.addWidget(this.stackedPanel);\n // Install the layout on the tab panel.\n this.layout = layout;\n }\n /**\n * A signal emitted when the current tab is changed.\n *\n * #### Notes\n * This signal is emitted when the currently selected tab is changed\n * either through user or programmatic interaction.\n *\n * Notably, this signal is not emitted when the index of the current\n * tab changes due to tabs being inserted, removed, or moved. It is\n * only emitted when the actual current tab node is changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * Get the index of the currently selected tab.\n *\n * #### Notes\n * This will be `-1` if no tab is selected.\n */\n get currentIndex() {\n return this.tabBar.currentIndex;\n }\n /**\n * Set the index of the currently selected tab.\n *\n * #### Notes\n * If the index is out of range, it will be set to `-1`.\n */\n set currentIndex(value) {\n this.tabBar.currentIndex = value;\n }\n /**\n * Get the currently selected widget.\n *\n * #### Notes\n * This will be `null` if there is no selected tab.\n */\n get currentWidget() {\n let title = this.tabBar.currentTitle;\n return title ? title.owner : null;\n }\n /**\n * Set the currently selected widget.\n *\n * #### Notes\n * If the widget is not in the panel, it will be set to `null`.\n */\n set currentWidget(value) {\n this.tabBar.currentTitle = value ? value.title : null;\n }\n /**\n * Get the whether the tabs are movable by the user.\n *\n * #### Notes\n * Tabs can always be moved programmatically.\n */\n get tabsMovable() {\n return this.tabBar.tabsMovable;\n }\n /**\n * Set the whether the tabs are movable by the user.\n *\n * #### Notes\n * Tabs can always be moved programmatically.\n */\n set tabsMovable(value) {\n this.tabBar.tabsMovable = value;\n }\n /**\n * Get the whether the add button is enabled.\n *\n */\n get addButtonEnabled() {\n return this.tabBar.addButtonEnabled;\n }\n /**\n * Set the whether the add button is enabled.\n *\n */\n set addButtonEnabled(value) {\n this.tabBar.addButtonEnabled = value;\n }\n /**\n * Get the tab placement for the tab panel.\n *\n * #### Notes\n * This controls the position of the tab bar relative to the content.\n */\n get tabPlacement() {\n return this._tabPlacement;\n }\n /**\n * Set the tab placement for the tab panel.\n *\n * #### Notes\n * This controls the position of the tab bar relative to the content.\n */\n set tabPlacement(value) {\n // Bail if the placement does not change.\n if (this._tabPlacement === value) {\n return;\n }\n // Update the internal value.\n this._tabPlacement = value;\n // Get the values related to the placement.\n let direction = Private.directionFromPlacement(value);\n let orientation = Private.orientationFromPlacement(value);\n // Configure the tab bar for the placement.\n this.tabBar.orientation = orientation;\n this.tabBar.dataset['placement'] = value;\n // Update the layout direction.\n this.layout.direction = direction;\n }\n /**\n * A signal emitted when the add button on a tab bar is clicked.\n *\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * A read-only array of the widgets in the panel.\n */\n get widgets() {\n return this.stackedPanel.widgets;\n }\n /**\n * Add a widget to the end of the tab panel.\n *\n * @param widget - The widget to add to the tab panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n *\n * The widget's `title` is used to populate the tab.\n */\n addWidget(widget) {\n this.insertWidget(this.widgets.length, widget);\n }\n /**\n * Insert a widget into the tab panel at a specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the tab panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n *\n * The widget's `title` is used to populate the tab.\n */\n insertWidget(index, widget) {\n if (widget !== this.currentWidget) {\n widget.hide();\n }\n this.stackedPanel.insertWidget(index, widget);\n this.tabBar.insertTab(index, widget.title);\n widget.node.setAttribute('role', 'tabpanel');\n let renderer = this.tabBar.renderer;\n if (renderer instanceof TabBar.Renderer) {\n let tabId = renderer.createTabKey({\n title: widget.title,\n current: false,\n zIndex: 0\n });\n widget.node.setAttribute('aria-labelledby', tabId);\n }\n }\n /**\n * Handle the `currentChanged` signal from the tab bar.\n */\n _onCurrentChanged(sender, args) {\n // Extract the previous and current title from the args.\n let { previousIndex, previousTitle, currentIndex, currentTitle } = args;\n // Extract the widgets from the titles.\n let previousWidget = previousTitle ? previousTitle.owner : null;\n let currentWidget = currentTitle ? currentTitle.owner : null;\n // Hide the previous widget.\n if (previousWidget) {\n previousWidget.hide();\n }\n // Show the current widget.\n if (currentWidget) {\n currentWidget.show();\n }\n // Emit the `currentChanged` signal for the tab panel.\n this._currentChanged.emit({\n previousIndex,\n previousWidget,\n currentIndex,\n currentWidget\n });\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n }\n /**\n * Handle the `tabAddRequested` signal from the tab bar.\n */\n _onTabAddRequested(sender, args) {\n this._addRequested.emit(sender);\n }\n /**\n * Handle the `tabActivateRequested` signal from the tab bar.\n */\n _onTabActivateRequested(sender, args) {\n args.title.owner.activate();\n }\n /**\n * Handle the `tabCloseRequested` signal from the tab bar.\n */\n _onTabCloseRequested(sender, args) {\n args.title.owner.close();\n }\n /**\n * Handle the `tabMoved` signal from the tab bar.\n */\n _onTabMoved(sender, args) {\n this.stackedPanel.insertWidget(args.toIndex, args.title.owner);\n }\n /**\n * Handle the `widgetRemoved` signal from the stacked panel.\n */\n _onWidgetRemoved(sender, widget) {\n widget.node.removeAttribute('role');\n widget.node.removeAttribute('aria-labelledby');\n this.tabBar.removeTab(widget.title);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Convert a tab placement to tab bar orientation.\n */\n function orientationFromPlacement(plc) {\n return placementToOrientationMap[plc];\n }\n Private.orientationFromPlacement = orientationFromPlacement;\n /**\n * Convert a tab placement to a box layout direction.\n */\n function directionFromPlacement(plc) {\n return placementToDirectionMap[plc];\n }\n Private.directionFromPlacement = directionFromPlacement;\n /**\n * A mapping of tab placement to tab bar orientation.\n */\n const placementToOrientationMap = {\n top: 'horizontal',\n left: 'vertical',\n right: 'vertical',\n bottom: 'horizontal'\n };\n /**\n * A mapping of tab placement to box layout direction.\n */\n const placementToDirectionMap = {\n top: 'top-to-bottom',\n left: 'left-to-right',\n right: 'right-to-left',\n bottom: 'bottom-to-top'\n };\n})(Private || (Private = {}));\n\nexport { AccordionLayout, AccordionPanel, BoxEngine, BoxLayout, BoxPanel, BoxSizer, CommandPalette, ContextMenu, DockLayout, DockPanel, FocusTracker, GridLayout, Layout, LayoutItem, Menu, MenuBar, Panel, PanelLayout, ScrollBar, SingletonLayout, SplitLayout, SplitPanel, StackedLayout, StackedPanel, TabBar, TabPanel, Title, Widget };\n//# sourceMappingURL=index.es6.js.map\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without 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\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n Object.defineProperty(obj, name, {\n value: val,\n enumerable: false,\n writable: true,\n configurable: true\n });\n}\nif (!String.prototype.startsWith) {\n defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n });\n}\nif (!String.prototype.endsWith) {\n defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n var subjectString = this;\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n });\n}\nif (!String.prototype.repeat) {\n defineProp(String.prototype, \"repeat\", function (count) {\n var result = \"\";\n var string = this;\n while (count > 0) {\n if (count & 1)\n result += string;\n if ((count >>= 1))\n string += string;\n }\n return result;\n });\n}\nif (!String.prototype.includes) {\n defineProp(String.prototype, \"includes\", function (str, position) {\n return this.indexOf(str, position) != -1;\n });\n}\nif (!Object.assign) {\n Object.assign = function (target) {\n if (target === undefined || target === null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n Object.keys(source).forEach(function (key) {\n output[key] = source[key];\n });\n }\n }\n return output;\n };\n}\nif (!Object.values) {\n Object.values = function (o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n };\n}\nif (!Array.prototype.find) {\n defineProp(Array.prototype, \"find\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return kValue;\n }\n }\n });\n}\nif (!Array.prototype.findIndex) {\n defineProp(Array.prototype, \"findIndex\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return k;\n }\n }\n });\n}\nif (!Array.prototype.includes) {\n defineProp(Array.prototype, \"includes\", function (item, position) {\n return this.indexOf(item, position) != -1;\n });\n}\nif (!Array.prototype.fill) {\n defineProp(Array.prototype, \"fill\", function (value) {\n var O = this;\n var len = O.length >>> 0;\n var start = arguments[1];\n var relativeStart = start >> 0;\n var k = relativeStart < 0\n ? Math.max(len + relativeStart, 0)\n : Math.min(relativeStart, len);\n var end = arguments[2];\n var relativeEnd = end === undefined ? len : end >> 0;\n var final = relativeEnd < 0\n ? Math.max(len + relativeEnd, 0)\n : Math.min(relativeEnd, len);\n while (k < final) {\n O[k] = value;\n k++;\n }\n return O;\n });\n}\nif (!Array.of) {\n defineProp(Array, \"of\", function () {\n return Array.prototype.slice.call(arguments);\n });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n if (count >>= 1)\n string += string;\n }\n return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\nexports.copyArray = function (array) {\n var copy = [];\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else\n copy[i] = array[i];\n }\n return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n};\nexports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\nexports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/ 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n }\n else if (exports.isLinux) {\n return exports.OS.LINUX;\n }\n else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n }\n else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n }\n else if (n === \"ref\") {\n if (refs)\n refs[val] = el;\n }\n else if (n === \"style\") {\n if (typeof val == \"string\")\n el.style.cssText = val;\n }\n else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\nexports.getDocumentHead = function (doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n }\n else {\n exports.removeCssClass(node, className);\n }\n};\nexports.hasCssString = function (id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) {\n return true;\n }\n }\n }\n};\nexports.removeElementById = function (id, doc) {\n doc = doc || document;\n if (doc.getElementById(id)) {\n doc.getElementById(id).remove();\n }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n strictCSP = value;\n if (value == false)\n insertPendingStyles();\n else if (!cssCache)\n cssCache = [];\n};\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function (item) {\n importCssString(item[0], item[1]);\n });\n}\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n }\n else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP)\n return;\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n }\n else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (doc) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = (doc && doc.documentElement) || (document && document.documentElement);\n if (!body)\n return 0;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n if (noScrollbar === withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\nif (useragent.isChromeOS)\n exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n}\nelse {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\nexports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\nexports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n if (typeof e != \"object\" || !e)\n e = {};\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n };\nEventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++)\n listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n var _self = this;\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n callback.apply(null, arguments);\n });\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = { _disabled_: {} };\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n }\n else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\nEventEmitter.on =\n EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\nEventEmitter.off =\n EventEmitter.removeListener =\n EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n };\nEventEmitter.removeAllListeners = function (eventName) {\n if (!eventName)\n this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry)\n this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers)\n this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n var e = new Error(msg);\n e[\"data\"] = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/default_english_messages\",[\"require\",\"exports\",\"module\"], function(require, exports, module){var defaultEnglishMessages = {\n \"autocomplete.popup.aria-roledescription\": \"Autocomplete suggestions\",\n \"autocomplete.popup.aria-label\": \"Autocomplete suggestions\",\n \"autocomplete.popup.item.aria-roledescription\": \"item\",\n \"autocomplete.loading\": \"Loading...\",\n \"editor.scroller.aria-roledescription\": \"editor\",\n \"editor.scroller.aria-label\": \"Editor content, press Enter to start editing, press Escape to exit\",\n \"editor.gutter.aria-roledescription\": \"editor gutter\",\n \"editor.gutter.aria-label\": \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\",\n \"error-marker.good-state\": \"Looks good!\",\n \"prompt.recently-used\": \"Recently used\",\n \"prompt.other-commands\": \"Other commands\",\n \"prompt.no-matching-commands\": \"No matching commands\",\n \"search-box.find.placeholder\": \"Search for\",\n \"search-box.find-all.text\": \"All\",\n \"search-box.replace.placeholder\": \"Replace with\",\n \"search-box.replace-next.text\": \"Replace\",\n \"search-box.replace-all.text\": \"All\",\n \"search-box.toggle-replace.title\": \"Toggle Replace mode\",\n \"search-box.toggle-regexp.title\": \"RegExp Search\",\n \"search-box.toggle-case.title\": \"CaseSensitive Search\",\n \"search-box.toggle-whole-word.title\": \"Whole Word Search\",\n \"search-box.toggle-in-selection.title\": \"Search In Selection\",\n \"search-box.search-counter\": \"$0 of $1\",\n \"text-input.aria-roledescription\": \"editor\",\n \"text-input.aria-label\": \"Cursor at row $0\",\n \"gutter.code-folding.range.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.closed.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.open.aria-label\": \"Toggle code folding, row $0\",\n \"gutter.code-folding.closed.title\": \"Unfold code\",\n \"gutter.code-folding.open.title\": \"Fold code\",\n \"gutter.annotation.aria-label.error\": \"Error, read annotations row $0\",\n \"gutter.annotation.aria-label.warning\": \"Warning, read annotations row $0\",\n \"gutter.annotation.aria-label.info\": \"Info, read annotations row $0\",\n \"inline-fold.closed.title\": \"Unfold code\",\n \"gutter-tooltip.aria-label.error.singular\": \"error\",\n \"gutter-tooltip.aria-label.error.plural\": \"errors\",\n \"gutter-tooltip.aria-label.warning.singular\": \"warning\",\n \"gutter-tooltip.aria-label.warning.plural\": \"warnings\",\n \"gutter-tooltip.aria-label.info.singular\": \"information message\",\n \"gutter-tooltip.aria-label.info.plural\": \"information messages\",\n \"gutter.annotation.aria-label.security\": \"Security finding, read annotations row $0\",\n \"gutter.annotation.aria-label.hint\": \"Suggestion, read annotations row $0\",\n \"gutter-tooltip.aria-label.security.singular\": \"security finding\",\n \"gutter-tooltip.aria-label.security.plural\": \"security findings\",\n \"gutter-tooltip.aria-label.hint.singular\": \"suggestion\",\n \"gutter-tooltip.aria-label.hint.plural\": \"suggestions\",\n \"editor.tooltip.disable-editing\": \"Editing is disabled\"\n};\nexports.defaultEnglishMessages = defaultEnglishMessages;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\",\"ace/lib/default_english_messages\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar defaultEnglishMessages = require(\"./default_english_messages\").defaultEnglishMessages;\nvar optionsProvider = {\n setOptions: function (optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function (optionNames) {\n var result = {};\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n }\n else if (!Array.isArray(optionNames)) {\n optionNames = Object.keys(optionNames);\n }\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function (name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function (name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\nvar messages;\nvar nlsPlaceholders;\nvar AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\n messages = defaultEnglishMessages;\n nlsPlaceholders = \"dollarSigns\";\n }\n AppConfig.prototype.defineOptions = function (obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = { forwardTo: opt };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n AppConfig.prototype.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n AppConfig.prototype.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions)\n if (this.$defaultOptions[path][name])\n break;\n if (!this.$defaultOptions[path][name])\n return false;\n }\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n AppConfig.prototype.setMessages = function (value, options) {\n messages = value;\n if (options && options.placeholders) {\n nlsPlaceholders = options.placeholders;\n }\n };\n AppConfig.prototype.nls = function (key, defaultString, params) {\n if (!messages[key]) {\n warn(\"No message found for the key '\" + key + \"' in messages with id \" + messages.$id + \", trying to find a translation for the default string '\" + defaultString + \"'.\");\n if (!messages[defaultString]) {\n warn(\"No message found for the default string '\" + defaultString + \"' in the provided messages. Falling back to the default English message.\");\n }\n }\n var translated = messages[key] || messages[defaultString] || defaultString;\n if (params) {\n if (nlsPlaceholders === \"dollarSigns\") {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, dollarMatch) {\n if (dollarMatch == \"$\")\n return \"$\";\n return params[dollarMatch];\n });\n }\n if (nlsPlaceholders === \"curlyBrackets\") {\n translated = translated.replace(/\\{([^\\}]+)\\}/g, function (_, curlyBracketMatch) {\n return params[curlyBracketMatch];\n });\n }\n }\n return translated;\n };\n return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n background: #f0f0f0;\\n color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n color: black;\\n}\\n \\n.ace-tm .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n background-color: rgba(255, 0, 0, 0.1);\\n color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n};\nexports.get = function (key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\nexports.set = function (key, value) {\n if (options.hasOwnProperty(key))\n options[key] = value;\n else if (this.setDefaultValue(\"\", key, value) == false)\n throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\")\n dom.useStrictCSP(value);\n};\nexports.all = function () {\n return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n }\n else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n return cb(null, require(\"./theme/textmate\"));\n if (customLoader)\n return customLoader(moduleName, cb);\n console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n var loadedModule;\n if (Array.isArray(moduleId)) {\n var moduleType = moduleId[0];\n var moduleName = moduleId[1];\n }\n else if (typeof moduleId == \"string\") {\n var moduleName = moduleId;\n }\n var load = function (module) {\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1)\n return;\n var afterLoad = function () {\n loader(moduleName, function (err, module) {\n if (module)\n exports.$loaded[moduleName] = module;\n exports._emit(\"load.module\", { name: moduleName, module: module });\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n };\n if (exports.dynamicModules[moduleName]) {\n exports.dynamicModules[moduleName]().then(function (module) {\n if (module.default) {\n load(module.default);\n }\n else {\n load(module);\n }\n });\n }\n else {\n try {\n loadedModule = this.$require(moduleName);\n }\n catch (e) { }\n load(loadedModule || exports.$loaded[moduleName]);\n }\n};\nexports.$require = function (moduleName) {\n if (typeof module[\"require\"] == \"function\") {\n var req = \"require\";\n return module[req](moduleName);\n }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n if (!options.basePath && !options.workerPath\n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n reportErrorIfPathIsNotConfigured = function () { };\n }\n};\nexports.version = \"1.43.3\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n require([moduleName], function(module) {\n cb(null, module);\n });\n});\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n config.init = init;\n config.$require = require;\n ace.require = require;\n\n if (typeof define === \"function\")\n ace.define = define;\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n if (currentScript && currentScript.src) {\n scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n }\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n Range.prototype.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n Range.prototype.compareRange = function (range) {\n var cmp, end = range.end, start = range.start;\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n }\n else if (cmp == 0) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (cmp == -1) {\n return -2;\n }\n else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n }\n else if (cmp == 1) {\n return 42;\n }\n else {\n return 0;\n }\n }\n };\n Range.prototype.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n Range.prototype.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n Range.prototype.intersects = function (range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n Range.prototype.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n Range.prototype.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n Range.prototype.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n }\n else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n Range.prototype.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n }\n else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n Range.prototype.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n if (row < this.start.row)\n return -1;\n if (row > this.end.row)\n return 1;\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n return 0;\n };\n Range.prototype.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = { row: lastRow + 1, column: 0 };\n else if (this.end.row < firstRow)\n var end = { row: firstRow, column: 0 };\n if (this.start.row > lastRow)\n var start = { row: lastRow + 1, column: 0 };\n else if (this.start.row < firstRow)\n var start = { row: firstRow, column: 0 };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = { row: row, column: column };\n else\n var end = { row: row, column: column };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.isEmpty = function () {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n Range.prototype.isMultiLine = function () {\n return (this.start.row !== this.end.row);\n };\n Range.prototype.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n Range.prototype.collapseRows = function () {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n Range.prototype.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n Range.prototype.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n return Range;\n}());\nRange.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n \"control\": 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n '-13': \"NumpadEnter\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n};\nvar codeToKeyCode = {\n Command: 224,\n Backspace: 8,\n Tab: 9,\n Return: 13,\n Enter: 13,\n Pause: 19,\n Escape: 27,\n PageUp: 33,\n PageDown: 34,\n End: 35,\n Home: 36,\n Insert: 45,\n Delete: 46,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Backquote: 192,\n Minus: 189,\n Equal: 187,\n BracketLeft: 219,\n Backslash: 220,\n BracketRight: 221,\n Semicolon: 186,\n Quote: 222,\n Comma: 188,\n Period: 190,\n Slash: 191,\n Space: 32,\n NumpadAdd: 107,\n NumpadDecimal: 110,\n NumpadSubtract: 109,\n NumpadDivide: 111,\n NumpadMultiply: 106\n};\nfor (var i = 0; i < 10; i++) {\n codeToKeyCode[\"Digit\" + i] = 48 + i;\n codeToKeyCode[\"Numpad\" + i] = 96 + i;\n Keys.PRINTABLE_KEYS[48 + i] = \"\" + i;\n Keys.FUNCTION_KEYS[96 + i] = \"Numpad\" + i;\n}\nfor (var i = 65; i < 91; i++) {\n var chr = String.fromCharCode(i + 32);\n codeToKeyCode[\"Key\" + chr.toUpperCase()] = i;\n Keys.PRINTABLE_KEYS[i] = chr;\n}\nfor (var i = 1; i < 13; i++) {\n codeToKeyCode[\"F\" + i] = 111 + i;\n Keys.FUNCTION_KEYS[111 + i] = \"F\" + i;\n}\nvar modifiers = {\n Shift: 16,\n Control: 17,\n Alt: 18,\n Meta: 224\n};\nfor (var mod in modifiers) {\n codeToKeyCode[mod] = codeToKeyCode[mod + \"Left\"]\n = codeToKeyCode[mod + \"Right\"] = modifiers[mod];\n}\nexports.$codeToKeyCode = codeToKeyCode;\nKeys.PRINTABLE_KEYS[173] = '-';\nfor (var j in Keys.FUNCTION_KEYS) {\n var name = Keys.FUNCTION_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\nfor (var j in Keys.PRINTABLE_KEYS) {\n var name = Keys.PRINTABLE_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\noop.mixin(Keys, Keys.MODIFIER_KEYS);\noop.mixin(Keys, Keys.PRINTABLE_KEYS);\noop.mixin(Keys, Keys.FUNCTION_KEYS);\nKeys.enter = Keys[\"return\"];\nKeys.escape = Keys.esc;\nKeys.del = Keys[\"delete\"];\n(function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n Keys.KEY_MODS[i] = mods.filter(function (x) {\n return i & Keys.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n})();\nKeys.KEY_MODS[0] = \"\";\nKeys.KEY_MODS[-1] = \"input-\";\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function () { }, {\n get passive() {\n activeListenerOptions = { passive: false };\n return true;\n }\n });\n }\n catch (e) { }\n}\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\nexports.stopPropagation = function (e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function (e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.15;\n var deltaX = e.deltaX || 0;\n var deltaY = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = deltaX * factor;\n e.wheelY = deltaY * factor;\n break;\n case e.DOM_DELTA_LINE:\n var linePixels = 15;\n e.wheelX = deltaX * linePixels;\n e.wheelY = deltaY * linePixels;\n break;\n case e.DOM_DELTA_PAGE:\n var pagePixels = 150;\n e.wheelX = deltaX * pagePixels;\n e.wheelY = deltaY * pagePixels;\n break;\n }\n callback(e);\n }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n }\n else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n }\n else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\nfunction getModifierHash(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n}\nexports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n if (!keyCode && e.code) {\n keyCode = keys.$codeToKeyCode[e.code] || keyCode;\n }\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = e.location;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n }\n else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (!hashId && keyCode === 13) {\n if (e.location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n var listener = function (e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n }\n else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window[\"mozRequestAnimationFrame\"]\n || window[\"webkitRequestAnimationFrame\"]\n || window[\"msRequestAnimationFrame\"]\n || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n lineMode: false,\n pasteCancelled: function () {\n if ($cancelT && $cancelT > Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function () {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput = /** @class */ (function () {\n function TextInput(parentNode, host) {\n var _this = this;\n this.host = host;\n this.text = dom.createElement(\"textarea\");\n this.text.className = \"ace_text-input\";\n this.text.setAttribute(\"wrap\", \"off\");\n this.text.setAttribute(\"autocomplete\", \"off\");\n this.text.setAttribute(\"autocorrect\", \"off\");\n this.text.setAttribute(\"autocapitalize\", \"off\");\n this.text.setAttribute(\"spellcheck\", \"false\");\n this.text.style.opacity = \"0\";\n parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false;\n this.pasted = false;\n this.inComposition = false;\n this.sendingText = false;\n this.tempStyle = '';\n if (!isMobile)\n this.text.style.fontSize = \"1px\";\n this.commandMode = false;\n this.ignoreFocusEvents = false;\n this.lastValue = \"\";\n this.lastSelectionStart = 0;\n this.lastSelectionEnd = 0;\n this.lastRestoreEnd = 0;\n this.rowStart = Number.MAX_SAFE_INTEGER;\n this.rowEnd = Number.MIN_SAFE_INTEGER;\n this.numberOfExtraLines = 0;\n try {\n this.$isFocused = document.activeElement === this.text;\n }\n catch (e) {\n }\n this.cancelComposition = this.cancelComposition.bind(this);\n this.setAriaOptions({ role: \"textbox\" });\n event.addListener(this.text, \"blur\", function (e) {\n if (_this.ignoreFocusEvents)\n return;\n host.onBlur(e);\n _this.$isFocused = false;\n }, host);\n event.addListener(this.text, \"focus\", function (e) {\n if (_this.ignoreFocusEvents)\n return;\n _this.$isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n }\n catch (e) {\n }\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(_this.resetSelection.bind(_this));\n else\n _this.resetSelection();\n }, host); this.$focusScroll = false;\n host.on(\"beforeEndOperation\", function () {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (_this.inComposition && isUserAction) {\n _this.lastValue = _this.text.value = \"\";\n _this.onCompositionEnd();\n }\n _this.resetSelection();\n });\n host.on(\"changeSelection\", this.setAriaLabel.bind(this));\n this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection;\n if (this.$isFocused)\n host.onFocus();\n this.inputHandler = null;\n this.afterContextMenu = false;\n event.addCommandKeyListener(this.text, function (e, hashId, keyCode) {\n if (_this.inComposition)\n return;\n return host.onCommandKey(e, hashId, keyCode);\n }, host);\n event.addListener(this.text, \"select\", this.onSelect.bind(this), host);\n event.addListener(this.text, \"input\", this.onInput.bind(this), host);\n event.addListener(this.text, \"cut\", this.onCut.bind(this), host);\n event.addListener(this.text, \"copy\", this.onCopy.bind(this), host);\n event.addListener(this.text, \"paste\", this.onPaste.bind(this), host);\n if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n switch (e.keyCode) {\n case 67:\n _this.onCopy(e);\n break;\n case 86:\n _this.onPaste(e);\n break;\n case 88:\n _this.onCut(e);\n break;\n }\n }, host);\n }\n this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this\n event.addListener(this.text, \"compositionstart\", this.onCompositionStart.bind(this), host);\n event.addListener(this.text, \"compositionupdate\", this.onCompositionUpdate.bind(this), host);\n event.addListener(this.text, \"keyup\", this.onKeyup.bind(this), host);\n event.addListener(this.text, \"keydown\", this.syncComposition.bind(this), host);\n event.addListener(this.text, \"compositionend\", this.onCompositionEnd.bind(this), host);\n this.closeTimeout;\n event.addListener(this.text, \"mouseup\", this.$onContextMenu.bind(this), host);\n event.addListener(this.text, \"mousedown\", function (e) {\n e.preventDefault();\n _this.onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", this.$onContextMenu.bind(this), host);\n event.addListener(this.text, \"contextmenu\", this.$onContextMenu.bind(this), host);\n if (isIOS)\n this.addIosSelectionHandler(parentNode, host, this.text);\n }\n TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) {\n var _this = this;\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout)\n clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function (e) {\n if (document.activeElement !== text)\n return;\n if (typing || _this.inComposition || host.$mouseHandler.isMousePressed)\n return;\n if (_this.copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n }\n else if (selectionStart == 1) {\n key = KEYS.home;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n }\n else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n }\n else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart\n && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n key = KEYS.left;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n }\n else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd\n && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n key = KEYS.right;\n }\n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n _this.lastSelectionStart = selectionStart;\n _this.lastSelectionEnd = selectionEnd;\n _this.resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n };\n TextInput.prototype.onContextMenuClose = function () {\n var _this = this;\n clearTimeout(this.closeTimeout);\n this.closeTimeout = setTimeout(function () {\n if (_this.tempStyle) {\n _this.text.style.cssText = _this.tempStyle;\n _this.tempStyle = '';\n }\n _this.host.renderer.$isMousePressed = false;\n if (_this.host.renderer.$keepTextAreaAtCursor)\n _this.host.renderer.$moveTextAreaToCursor();\n }, 0);\n };\n TextInput.prototype.$onContextMenu = function (e) {\n this.host.textInput.onContextMenu(e);\n this.onContextMenuClose();\n };\n TextInput.prototype.onKeyup = function (e) {\n if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) {\n if (!this.inComposition)\n this.lastValue = this.text.value;\n this.lastSelectionStart = this.lastSelectionEnd = -1;\n this.resetSelection();\n }\n this.syncComposition();\n };\n TextInput.prototype.cancelComposition = function () {\n this.ignoreFocusEvents = true;\n this.text.blur();\n this.text.focus();\n this.ignoreFocusEvents = false;\n };\n TextInput.prototype.onCompositionStart = function (e) {\n if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly)\n return;\n this.inComposition = {};\n if (this.commandMode)\n return;\n if (e.data)\n this.inComposition.useTextareaForIME = false;\n setTimeout(this.onCompositionUpdate.bind(this), 0);\n this.host._signal(\"compositionStart\");\n this.host.on(\"mousedown\", this.cancelComposition); //TODO:\n var range = this.host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n this.inComposition.markerRange = range;\n this.inComposition.selectionStart = this.lastSelectionStart;\n this.host.onCompositionStart(this.inComposition);\n if (this.inComposition.useTextareaForIME) {\n this.lastValue = this.text.value = \"\";\n this.lastSelectionStart = 0;\n this.lastSelectionEnd = 0;\n }\n else {\n if (this.text.msGetInputContext)\n this.inComposition.context = this.text.msGetInputContext();\n if (this.text.getInputContext)\n this.inComposition.context = this.text.getInputContext();\n }\n };\n TextInput.prototype.onCompositionUpdate = function () {\n if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly)\n return;\n if (this.commandMode)\n return this.cancelComposition();\n if (this.inComposition.useTextareaForIME) {\n this.host.onCompositionUpdate(this.text.value);\n }\n else {\n var data = this.text.value;\n this.sendText(data);\n if (this.inComposition.markerRange) {\n if (this.inComposition.context) {\n this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset;\n }\n this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column\n + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd;\n }\n }\n };\n TextInput.prototype.onCompositionEnd = function (e) {\n if (!this.host.onCompositionEnd || this.host.$readOnly)\n return;\n this.inComposition = false;\n this.host.onCompositionEnd();\n this.host.off(\"mousedown\", this.cancelComposition);\n if (e)\n this.onInput();\n };\n TextInput.prototype.onCut = function (e) {\n this.doCopy(e, true);\n };\n TextInput.prototype.onCopy = function (e) {\n this.doCopy(e, false);\n };\n TextInput.prototype.onPaste = function (e) {\n var data = this.handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n this.host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(this.resetSelection);\n event.preventDefault(e);\n }\n else {\n this.text.value = \"\";\n this.pasted = true;\n }\n };\n TextInput.prototype.doCopy = function (e, isCut) {\n var _this = this;\n var data = this.host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n if (this.handleClipboardData(e, data)) {\n if (isIOS) {\n this.resetSelection(data);\n this.copied = data;\n setTimeout(function () {\n _this.copied = false;\n }, 10);\n }\n isCut ? this.host.onCut() : this.host.onCopy();\n event.preventDefault(e);\n }\n else {\n this.copied = true;\n this.text.value = data;\n this.text.select();\n setTimeout(function () {\n _this.copied = false;\n _this.resetSelection();\n isCut ? _this.host.onCut() : _this.host.onCopy();\n });\n }\n };\n TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window[\"clipboardData\"];\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n }\n else {\n return clipboardData.getData(mime);\n }\n }\n catch (e) {\n if (!forceIEMime)\n return this.handleClipboardData(e, data, true);\n }\n };\n TextInput.prototype.onInput = function (e) {\n if (this.inComposition)\n return this.onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\")\n return this.host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\")\n return this.host.execCommand(\"redo\");\n }\n var data = this.text.value;\n var inserted = this.sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart\n < 1 && this.lastSelectionStart == this.lastSelectionEnd) {\n this.resetSelection();\n }\n };\n TextInput.prototype.sendText = function (value, fromInput) {\n if (this.afterContextMenu)\n this.afterContextMenu = false;\n if (this.pasted) {\n this.resetSelection();\n if (value)\n this.host.onPaste(value);\n this.pasted = false;\n return \"\";\n }\n else {\n var selectionStart = this.text.selectionStart;\n var selectionEnd = this.text.selectionEnd;\n var extendLeft = this.lastSelectionStart;\n var extendRight = this.lastValue.length - this.lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n while (extendLeft > 0 && this.lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1\n && this.lastValue[this.lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n this.sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) {\n this.host.onTextInput(inserted);\n }\n else {\n this.host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n this.sendingText = false;\n this.lastValue = value;\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n this.lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n TextInput.prototype.onSelect = function (e) {\n var _this = this;\n if (this.inComposition)\n return;\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value\n === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd;\n };\n if (this.copied) {\n this.copied = false;\n }\n else if (isAllSelected(this.text)) {\n this.host.selectAll();\n this.resetSelection();\n }\n else if (isMobile && this.text.selectionStart != this.lastSelectionStart) {\n this.resetSelection();\n }\n };\n TextInput.prototype.$resetSelectionIOS = function (value) {\n if (!this.$isFocused || (this.copied && !value) || this.sendingText)\n return;\n if (!value)\n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != this.text.value)\n this.text.value = this.lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1));\n if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) {\n this.text.setSelectionRange(selectionStart, selectionEnd);\n }\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n };\n TextInput.prototype.$resetSelection = function () {\n var _this = this;\n if (this.inComposition || this.sendingText)\n return;\n if (!this.$isFocused && !this.afterContextMenu)\n return;\n this.inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n var positionToSelection = function (row, column) {\n var selection = column;\n for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) {\n selection += _this.host.session.getLine(row - i).length + 1;\n }\n return selection;\n };\n if (this.host.session) {\n var selection = this.host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n if (row === this.rowEnd + 1) {\n this.rowStart = this.rowEnd + 1;\n this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines;\n }\n else if (row === this.rowStart - 1) {\n this.rowEnd = this.rowStart - 1;\n this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines;\n }\n else if (row < this.rowStart - 1 || row > this.rowEnd + 1) {\n this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0;\n this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2\n * this.numberOfExtraLines;\n }\n var lines = [];\n for (var i = this.rowStart; i <= this.rowEnd; i++) {\n lines.push(this.host.session.getLine(i));\n }\n line = lines.join('\\n');\n selectionStart = positionToSelection(range.start.row, range.start.column);\n selectionEnd = positionToSelection(range.end.row, range.end.column);\n if (range.start.row < this.rowStart) {\n var prevLine = this.host.session.getLine(this.rowStart - 1);\n selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row > this.rowEnd) {\n var nextLine = this.host.session.getLine(this.rowEnd + 1);\n selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n }\n else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n var newValue = line + \"\\n\\n\";\n if (newValue != this.lastValue) {\n this.text.value = this.lastValue = newValue;\n this.lastSelectionStart = this.lastSelectionEnd = newValue.length;\n }\n }\n if (this.afterContextMenu) {\n this.lastSelectionStart = this.text.selectionStart;\n this.lastSelectionEnd = this.text.selectionEnd;\n }\n if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd\n != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n this.text.setSelectionRange(selectionStart, selectionEnd);\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n }\n catch (e) {\n }\n }\n this.inComposition = false;\n };\n TextInput.prototype.setHost = function (newHost) {\n this.host = newHost;\n };\n TextInput.prototype.setNumberOfExtraLines = function (number) {\n this.rowStart = Number.MAX_SAFE_INTEGER;\n this.rowEnd = Number.MIN_SAFE_INTEGER;\n if (number < 0) {\n this.numberOfExtraLines = 0;\n return;\n }\n this.numberOfExtraLines = number;\n };\n TextInput.prototype.setAriaLabel = function () {\n var ariaLabel = \"\";\n if (this.host.$textInputAriaLabel) {\n ariaLabel += \"\".concat(this.host.$textInputAriaLabel, \", \");\n }\n if (this.host.session) {\n var row = this.host.session.selection.cursor.row;\n ariaLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n }\n this.text.setAttribute(\"aria-label\", ariaLabel);\n };\n TextInput.prototype.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n this.text.setAttribute(\"aria-haspopup\", \"true\");\n this.text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n this.text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n }\n else {\n this.text.setAttribute(\"aria-haspopup\", \"false\");\n this.text.setAttribute(\"aria-autocomplete\", \"both\");\n this.text.removeAttribute(\"aria-activedescendant\");\n }\n if (options.role) {\n this.text.setAttribute(\"role\", options.role);\n }\n if (options.setLabel) {\n this.text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n this.setAriaLabel();\n }\n };\n TextInput.prototype.focus = function () {\n var _this = this;\n this.setAriaOptions({\n setLabel: this.host.renderer.enableKeyboardAccessibility\n });\n if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return this.text.focus({ preventScroll: true });\n var top = this.text.style.top;\n this.text.style.position = \"fixed\";\n this.text.style.top = \"0px\";\n try {\n var isTransformed = this.text.getBoundingClientRect().top != 0;\n }\n catch (e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = this.text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", \"true\");\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode()[\"host\"];\n else\n t = t.parentElement;\n }\n }\n this.text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function () {\n _this.text.style.position = \"\";\n if (_this.text.style.top == \"0px\")\n _this.text.style.top = top;\n }, 0);\n };\n TextInput.prototype.blur = function () {\n this.text.blur();\n };\n TextInput.prototype.isFocused = function () {\n return this.$isFocused;\n };\n TextInput.prototype.setInputHandler = function (cb) {\n this.inputHandler = cb;\n };\n TextInput.prototype.getInputHandler = function () {\n return this.inputHandler;\n };\n TextInput.prototype.getElement = function () {\n return this.text;\n };\n TextInput.prototype.setCommandMode = function (value) {\n this.commandMode = value;\n this.text.readOnly = false;\n };\n TextInput.prototype.setReadOnly = function (readOnly) {\n if (!this.commandMode)\n this.text.readOnly = readOnly;\n };\n TextInput.prototype.setCopyWithEmptySelection = function (value) {\n };\n TextInput.prototype.onContextMenu = function (e) {\n this.afterContextMenu = true;\n this.resetSelection();\n this.host._emit(\"nativecontextmenu\", {\n target: this.host,\n domEvent: e\n });\n this.moveToMouse(e, true);\n };\n TextInput.prototype.moveToMouse = function (e, bringToFront) {\n var _this = this;\n if (!this.tempStyle)\n this.tempStyle = this.text.style.cssText;\n this.text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth\n * 0.5 + \"px;\";\n var rect = this.host.container.getBoundingClientRect();\n var style = dom.computedStyle(this.host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(style.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - this.text.clientHeight - 2;\n var move = function (e) {\n dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n move(e);\n if (e.type != \"mousedown\")\n return;\n this.host.renderer.$isMousePressed = true;\n clearTimeout(this.closeTimeout);\n if (useragent.isWin)\n event.capture(this.host.container, move, this.onContextMenuClose.bind(this));\n };\n TextInput.prototype.destroy = function () {\n if (this.text.parentElement)\n this.text.parentElement.removeChild(this.text);\n };\n return TextInput;\n}());\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n DefaultHandlers.prototype.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent)\n return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n DefaultHandlers.prototype.select = function () {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n }\n else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n }\n else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n }\n else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n };\n DefaultHandlers.prototype.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n DefaultHandlers.prototype.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n }\n else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n DefaultHandlers.prototype.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n }\n else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n DefaultHandlers.prototype.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n DefaultHandlers.prototype.onMouseWheel = function (ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n var editor = this.editor;\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n if (canScroll) {\n prevScroll.allowed = t;\n }\n else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0)\n return { cursor: range.start, anchor: range.end };\n else\n return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n event.stopPropagation();\n var target = event.currentTarget;\n var contentOverflows = target.scrollHeight > target.clientHeight;\n if (!contentOverflows) {\n event.preventDefault();\n }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n Tooltip.prototype.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = CLASSNAME;\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n Tooltip.prototype.getElement = function () {\n return this.$element || this.$init();\n };\n Tooltip.prototype.setText = function (text) {\n this.getElement().textContent = text;\n };\n Tooltip.prototype.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n Tooltip.prototype.setPosition = function (x, y) {\n var el = this.getElement();\n var rootRect = el.offsetParent && el.offsetParent.getBoundingClientRect();\n el.style.left = x - (rootRect ? rootRect.left : 0) + \"px\";\n el.style.top = y - (rootRect ? rootRect.top : 0) + \"px\";\n };\n Tooltip.prototype.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n Tooltip.prototype.setTheme = function (theme) {\n this.$element.className = CLASSNAME + \" \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n };\n Tooltip.prototype.show = function (text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n Tooltip.prototype.hide = function (e) {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.getElement().className = CLASSNAME;\n this.isOpen = false;\n }\n };\n Tooltip.prototype.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n Tooltip.prototype.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n Tooltip.prototype.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n function PopupManager() {\n this.popups = [];\n }\n PopupManager.prototype.addPopup = function (popup) {\n this.popups.push(popup);\n this.updatePopups();\n };\n PopupManager.prototype.removePopup = function (popup) {\n var index = this.popups.indexOf(popup);\n if (index !== -1) {\n this.popups.splice(index, 1);\n this.updatePopups();\n }\n };\n PopupManager.prototype.updatePopups = function () {\n var e_1, _a, e_2, _b;\n this.popups.sort(function (a, b) { return b.priority - a.priority; });\n var visiblepopups = [];\n try {\n for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n var popup = _d.value;\n var shouldDisplay = true;\n try {\n for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n var visiblePopup = visiblepopups_1_1.value;\n if (this.doPopupsOverlap(visiblePopup, popup)) {\n shouldDisplay = false;\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (shouldDisplay) {\n visiblepopups.push(popup);\n }\n else {\n popup.hide();\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n var rectA = popupA.getElement().getBoundingClientRect();\n var rectB = popupB.getElement().getBoundingClientRect();\n return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n > rectB.top);\n };\n return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n __extends(HoverTooltip, _super);\n function HoverTooltip(parentNode) {\n if (parentNode === void 0) { parentNode = document.body; }\n var _this = _super.call(this, parentNode) || this;\n _this.timeout = undefined;\n _this.lastT = 0;\n _this.idleTime = 350;\n _this.lastEvent = undefined;\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.waitForHover = _this.waitForHover.bind(_this);\n _this.hide = _this.hide.bind(_this);\n var el = _this.getElement();\n el.style.whiteSpace = \"pre-wrap\";\n el.style.pointerEvents = \"auto\";\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n el.tabIndex = -1;\n el.addEventListener(\"blur\", function () {\n if (!el.contains(document.activeElement))\n this.hide();\n }.bind(_this));\n el.addEventListener(\"wheel\", preventParentScroll);\n return _this;\n }\n HoverTooltip.prototype.addToEditor = function (editor) {\n editor.on(\"mousemove\", this.onMouseMove);\n editor.on(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, true);\n };\n HoverTooltip.prototype.removeFromEditor = function (editor) {\n editor.off(\"mousemove\", this.onMouseMove);\n editor.off(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, true);\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n };\n HoverTooltip.prototype.onMouseMove = function (e, editor) {\n this.lastEvent = e;\n this.lastT = Date.now();\n var isMousePressed = editor.$mouseHandler.isMousePressed;\n if (this.isOpen) {\n var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n if (!this.range\n || !this.range.contains(pos.row, pos.column)\n || isMousePressed\n || this.isOutsideOfText(this.lastEvent)) {\n this.hide();\n }\n }\n if (this.timeout || isMousePressed)\n return;\n this.lastEvent = e;\n this.timeout = setTimeout(this.waitForHover, this.idleTime);\n };\n HoverTooltip.prototype.waitForHover = function () {\n if (this.timeout)\n clearTimeout(this.timeout);\n var dt = Date.now() - this.lastT;\n if (this.idleTime - dt > 10) {\n this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n return;\n }\n this.timeout = null;\n if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n this.$gatherData(this.lastEvent, this.lastEvent.editor);\n }\n };\n HoverTooltip.prototype.isOutsideOfText = function (e) {\n var editor = e.editor;\n var docPos = e.getDocumentPosition();\n var line = editor.session.getLine(docPos.row);\n if (docPos.column == line.length) {\n var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n if (clippedPos.column != screenPos.column\n || clippedPos.row != screenPos.row) {\n return true;\n }\n }\n return false;\n };\n HoverTooltip.prototype.setDataProvider = function (value) {\n this.$gatherData = value;\n };\n HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n var MARGIN = 10;\n if (startingEvent && startingEvent != this.lastEvent)\n return;\n if (this.isOpen && document.activeElement == this.getElement())\n return;\n var renderer = editor.renderer;\n if (!this.isOpen) {\n popupManager.addPopup(this);\n this.$registerCloseEvents();\n this.setTheme(renderer.theme);\n }\n this.isOpen = true;\n this.addMarker(range, editor.session);\n this.range = Range.fromPoints(range.start, range.end);\n var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n var rect = renderer.scroller.getBoundingClientRect();\n if (position.pageX < rect.left)\n position.pageX = rect.left;\n var element = this.getElement();\n element.innerHTML = \"\";\n element.appendChild(domNode);\n element.style.maxHeight = \"\";\n element.style.display = \"block\";\n var labelHeight = element.clientHeight;\n var labelWidth = element.clientWidth;\n var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight;\n var isAbove = true;\n if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) {\n isAbove = false;\n }\n element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + \"px\";\n element.style.top = isAbove ? \"\" : position.pageY + renderer.lineHeight + \"px\";\n element.style.bottom = isAbove ? window.innerHeight - position.pageY + \"px\" : \"\";\n element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + \"px\";\n };\n HoverTooltip.prototype.addMarker = function (range, session) {\n if (this.marker) {\n this.$markerSession.removeMarker(this.marker);\n }\n this.$markerSession = session;\n this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n };\n HoverTooltip.prototype.hide = function (e) {\n if (!e && document.activeElement == this.getElement())\n return;\n if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n return;\n this.lastEvent = null;\n if (this.timeout)\n clearTimeout(this.timeout);\n this.timeout = null;\n this.addMarker(null);\n if (this.isOpen) {\n this.$removeCloseEvents();\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n popupManager.removePopup(this);\n }\n };\n HoverTooltip.prototype.$registerCloseEvents = function () {\n window.addEventListener(\"keydown\", this.hide, true);\n window.addEventListener(\"wheel\", this.hide, true);\n window.addEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.$removeCloseEvents = function () {\n window.removeEventListener(\"keydown\", this.hide, true);\n window.removeEventListener(\"wheel\", this.hide, true);\n window.removeEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.onMouseOut = function (e) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.lastEvent = null;\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n if (!e.relatedTarget.classList.contains(\"ace_content\"))\n this.hide();\n };\n return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/tooltip\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nvar nls = require(\"../config\").nls;\nvar GUTTER_TOOLTIP_LEFT_OFFSET = 5;\nvar GUTTER_TOOLTIP_TOP_OFFSET = 3;\nexports.GUTTER_TOOLTIP_LEFT_OFFSET = GUTTER_TOOLTIP_LEFT_OFFSET;\nexports.GUTTER_TOOLTIP_TOP_OFFSET = GUTTER_TOOLTIP_TOP_OFFSET;\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor, true);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\")\n return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n tooltip.showTooltip(row);\n if (!tooltip.isOpen)\n return;\n editor.on(\"mousewheel\", hideTooltip);\n editor.on(\"changeSession\", hideTooltip);\n window.addEventListener(\"keydown\", hideTooltip, true);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterRow = mouseEvent.getGutterRow();\n var gutterCell = gutter.$lines.get(gutterRow);\n if (gutterCell) {\n var gutterElement = gutterCell.element.querySelector(\".ace_gutter_annotation\");\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = (rect.right - GUTTER_TOOLTIP_LEFT_OFFSET) + \"px\";\n style.top = (rect.bottom - GUTTER_TOOLTIP_TOP_OFFSET) + \"px\";\n }\n else {\n moveTooltip(mouseEvent);\n }\n }\n }\n function hideTooltip(e) {\n if (e && e.type === \"keydown\" && (e.ctrlKey || e.metaKey))\n return;\n if (e && e.type === \"mouseout\" && (!e.relatedTarget || tooltip.getElement().contains(e.relatedTarget)))\n return;\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltip.isOpen) {\n tooltip.hideTooltip();\n editor.off(\"mousewheel\", hideTooltip);\n editor.off(\"changeSession\", hideTooltip);\n window.removeEventListener(\"keydown\", hideTooltip, true);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\") || dom.hasCssClass(target, \"ace_custom-widget\"))\n return hideTooltip();\n if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltip.isOpen)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip(e);\n }, 50);\n }, editor);\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n __extends(GutterTooltip, _super);\n function GutterTooltip(editor, isHover) {\n if (isHover === void 0) { isHover = false; }\n var _this = _super.call(this, editor.container) || this;\n _this.id = \"gt\" + (++GutterTooltip.$uid);\n _this.editor = editor;\n _this.visibleTooltipRow;\n var el = _this.getElement();\n el.setAttribute(\"role\", \"tooltip\");\n el.setAttribute(\"id\", _this.id);\n el.style.pointerEvents = \"auto\";\n if (isHover) {\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n }\n return _this;\n }\n GutterTooltip.prototype.onMouseOut = function (e) {\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n this.hideTooltip();\n };\n GutterTooltip.prototype.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n get: function () {\n return {\n error: {\n singular: nls(\"gutter-tooltip.aria-label.error.singular\", \"error\"),\n plural: nls(\"gutter-tooltip.aria-label.error.plural\", \"errors\")\n },\n security: {\n singular: nls(\"gutter-tooltip.aria-label.security.singular\", \"security finding\"),\n plural: nls(\"gutter-tooltip.aria-label.security.plural\", \"security findings\")\n },\n warning: {\n singular: nls(\"gutter-tooltip.aria-label.warning.singular\", \"warning\"),\n plural: nls(\"gutter-tooltip.aria-label.warning.plural\", \"warnings\")\n },\n info: {\n singular: nls(\"gutter-tooltip.aria-label.info.singular\", \"information message\"),\n plural: nls(\"gutter-tooltip.aria-label.info.plural\", \"information messages\")\n },\n hint: {\n singular: nls(\"gutter-tooltip.aria-label.hint.singular\", \"suggestion\"),\n plural: nls(\"gutter-tooltip.aria-label.hint.plural\", \"suggestions\")\n }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var _a;\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = {\n displayText: Array.from(annotationsInRow.displayText),\n type: Array.from(annotationsInRow.type)\n };\n else\n annotation = { displayText: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] };\n var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 };\n var mostSevereAnnotationTypeInFold;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!gutter.$annotations[i])\n continue;\n for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n var annotationType = gutter.$annotations[i].type[j];\n annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n if (!mostSevereAnnotationTypeInFold ||\n severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) {\n mostSevereAnnotationTypeInFold = annotationType;\n }\n }\n }\n if ([\"error\", \"security\", \"warning\"].includes(mostSevereAnnotationTypeInFold)) {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.displayText.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationTypeInFold + \"_fold\");\n }\n }\n if (annotation.displayText.length === 0)\n return this.hideTooltip();\n var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.displayText.length; i++) {\n var lineElement = dom.createElement(\"span\");\n var iconElement = dom.createElement(\"span\");\n (_a = iconElement.classList).add.apply(_a, [\"ace_\".concat(annotation.type[i]), iconClassName]);\n iconElement.setAttribute(\"aria-label\", \"\".concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular));\n iconElement.setAttribute(\"role\", \"img\");\n iconElement.appendChild(dom.createTextNode(\" \"));\n lineElement.appendChild(iconElement);\n lineElement.appendChild(dom.createTextNode(annotation.displayText[i]));\n lineElement.appendChild(dom.createElement(\"br\"));\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(lineElement);\n }\n var tooltipElement = this.getElement();\n dom.removeChildren(tooltipElement);\n annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); });\n tooltipElement.setAttribute(\"aria-live\", \"polite\");\n if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n var annotationNode = this.$findLinkedAnnotationNode(row);\n if (annotationNode) {\n annotationNode.setAttribute(\"aria-describedby\", this.id);\n }\n this.show();\n this.visibleTooltipRow = row;\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) {\n var cell = this.$findCellByRow(row);\n if (cell) {\n var element = cell.element;\n if (element.childNodes.length > 2) {\n return element.childNodes[2];\n }\n }\n };\n GutterTooltip.prototype.$findCellByRow = function (row) {\n return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; });\n };\n GutterTooltip.prototype.hideTooltip = function () {\n if (!this.isOpen) {\n return;\n }\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n if (this.visibleTooltipRow != undefined) {\n var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow);\n if (annotationNode) {\n annotationNode.removeAttribute(\"aria-describedby\");\n }\n }\n this.visibleTooltipRow = undefined;\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = [\"error\", \"security\", \"warning\", \"info\", \"hint\"];\n try {\n for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n var annotationType = annotationTypes_1_1.value;\n if (!annotations[annotationType].length)\n continue;\n var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return summary.join(\", \");\n };\n return GutterTooltip;\n}(Tooltip));\nGutterTooltip.$uid = 0;\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n }\n MouseEvent.prototype.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n MouseEvent.prototype.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n MouseEvent.prototype.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n MouseEvent.prototype.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n MouseEvent.prototype.getGutterRow = function () {\n var documentRow = this.getDocumentPosition().row;\n var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n return screenRow - screenTopRow;\n };\n MouseEvent.prototype.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n MouseEvent.prototype.getButton = function () {\n return event.getButton(this.domEvent);\n };\n MouseEvent.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n MouseEvent.prototype.getAccelKey = function () {\n return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n };\n return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && canExecuteCommand(\"selectall\") && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && canExecuteCommand(\"copy\") && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && canExecuteCommand(\"cut\") && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && canExecuteCommand(\"paste\") && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && canExecuteCommand(\"undo\") && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n canExecuteCommand(\"find\") && [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n canExecuteCommand(\"openCommandPalette\") && [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var canExecuteCommand = function (/** @type {string} */ cmd) {\n return editor.commands.canExecute(cmd, editor);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPalette\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!editor.getOption(\"enableMobileMenu\")) {\n if (contextMenu) {\n hideContextMenu();\n }\n return;\n }\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, //@ts-expect-error TODO: seems mistyping - should be boolean\n editor);\n }\n MouseHandler.prototype.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n MouseHandler.prototype.setState = function (state) {\n this.state = state;\n };\n MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var continueCapture = true;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n continueCapture = false;\n if (editor.session)\n onCaptureUpdate();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureUpdate = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n var onCaptureInterval = function () {\n if (continueCapture) {\n onCaptureUpdate();\n event.nextFrame(onCaptureInterval);\n }\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n onCaptureInterval();\n };\n MouseHandler.prototype.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n MouseHandler.prototype.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n }\n return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n }\n KeyBinding.prototype.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n KeyBinding.prototype.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n KeyBinding.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n KeyBinding.prototype.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n KeyBinding.prototype.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n }\n BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n BidiHandler.prototype.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n BidiHandler.prototype.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n BidiHandler.prototype.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n BidiHandler.prototype.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n BidiHandler.prototype.markAsDirty = function () {\n this.currentRow = null;\n };\n BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n BidiHandler.prototype.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n BidiHandler.prototype.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n BidiHandler.prototype.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n BidiHandler.prototype.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n BidiHandler.prototype.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n BidiHandler.prototype.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n }\n Selection.prototype.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n Selection.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n Selection.prototype.getCursor = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n Selection.prototype.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n Selection.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n Selection.prototype.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n Selection.prototype.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n Selection.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n Selection.prototype.setRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n Selection.prototype.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n Selection.prototype.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n Selection.prototype.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n Selection.prototype.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n Selection.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n Selection.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n Selection.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n Selection.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n Selection.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n Selection.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n Selection.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n Selection.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n Selection.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n Selection.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n Selection.prototype.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n Selection.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n Selection.prototype.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n Selection.prototype.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n Selection.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n Selection.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n Selection.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n Selection.prototype.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n Selection.prototype.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n Selection.prototype.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n Selection.prototype.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n Selection.prototype.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n Selection.prototype.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n Selection.prototype.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n Selection.prototype.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n Selection.prototype.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n Selection.prototype.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n Selection.prototype.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n Selection.prototype.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n Selection.prototype.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n Selection.prototype.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n Selection.prototype.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n Selection.prototype.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n Selection.prototype.toJSON = function () {\n if (this.rangeCount) { var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else { var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n Selection.prototype.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n Selection.prototype.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\n this.splitRegex;\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n }\n Tokenizer.prototype.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n Tokenizer.prototype.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n Tokenizer.prototype.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = /**@type{string}*/ (startState) || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state[\"processed\"] = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (includeName === \"$self\")\n includeName = \"start\";\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n }\n TokenIterator.prototype.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentTokenRow = function () {\n return this.$row;\n };\n TokenIterator.prototype.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n TokenIterator.prototype.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n TokenIterator.prototype.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n options = options || {};\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n var token = session.getTokenAt(cursor.row, cursor.column);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (token && /(?:string)\\.quasi|\\.xml/.test(token.type)) {\n var excludeTokens = [\n /tag\\-(?:open|name)/, /attribute\\-name/\n ];\n if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\\.quasi/.test(token.type)\n && token.value[cursor.column - token.start - 1] !== '$')\n return;\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(rightChar);\n var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n if (options.closeDocComment !== false) {\n this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n if (cursor.column === 0) {\n return;\n }\n var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\n var tokens = session.getTokens(cursor.row);\n var index = 0;\n for (var i = 0; i < tokens.length; i++) {\n index += tokens[i].value.length;\n var currentToken = tokens[i];\n if (index >= cursor.column) {\n if (index === cursor.column) {\n if (!/\\.doc/.test(currentToken.type)) {\n return;\n }\n if (/\\*\\//.test(currentToken.value)) {\n var nextToken = tokens[i + 1];\n if (!nextToken || !/\\.doc/.test(nextToken.type)) {\n return;\n }\n }\n }\n var cursorPosInToken = cursor.column - (index - currentToken.value.length);\n var closeDocPos = currentToken.value.indexOf(\"*/\");\n var openDocPos = currentToken.value.indexOf(\"/**\", closeDocPos > -1 ? closeDocPos + 2 : 0);\n if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) {\n return;\n }\n if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos\n && cursorPosInToken <= openDocPos || !/\\.doc/.test(currentToken.type)) {\n return;\n }\n break;\n }\n }\n var indent = this.$getIndent(line);\n if (/\\s*\\*/.test(nextLine)) {\n if (/^\\s*\\*/.test(line)) {\n return {\n text: text + indent + \"* \",\n selection: [1, 2 + indent.length, 1, 2 + indent.length]\n };\n }\n else {\n return {\n text: text + indent + \" * \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n }\n if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n return {\n text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n selection: [1, 4 + indent.length, 1, 4 + indent.length]\n };\n }\n }\n });\n }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n var _loop_1 = function (i) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] =\n function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this_1));\n };\n var this_1 = this;\n for (var i = 0; i < delegations.length; i++) {\n _loop_1(i);\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer[\"rules\"];\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n LineWidgets.prototype.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n return 1 + h;\n }\n else {\n return this[\"$wrapData\"][row].length + 1 + h;\n }\n };\n LineWidgets.prototype.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n LineWidgets.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n LineWidgets.prototype.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n LineWidgets.prototype.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n LineWidgets.prototype.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n LineWidgets.prototype.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n LineWidgets.prototype.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n LineWidgets.prototype.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n LineWidgets.prototype.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.text && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.textContent = w.text;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n if (w.className) {\n dom.addCssClass(w.el, w.className);\n }\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = \"5\";\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = \"3\";\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n LineWidgets.prototype.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n LineWidgets.prototype.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n LineWidgets.prototype.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n LineWidgets.prototype.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n LineWidgets.prototype.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n function Anchor(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof row != \"number\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n }\n Anchor.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n Anchor.prototype.getDocument = function () {\n return this.document;\n };\n Anchor.prototype.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n Anchor.prototype.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n Anchor.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n Anchor.prototype.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n Anchor.prototype.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n function Document(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n }\n Document.prototype.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n Document.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n Document.prototype.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n Document.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n Document.prototype.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n };\n Document.prototype.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n Document.prototype.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n Document.prototype.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n Document.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n Document.prototype.getLength = function () {\n return this.$lines.length;\n };\n Document.prototype.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n Document.prototype.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n Document.prototype.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n Document.prototype.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n Document.prototype.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n Document.prototype.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n Document.prototype.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n Document.prototype.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n Document.prototype.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n Document.prototype.pos = function (row, column) {\n return { row: row, column: column };\n };\n Document.prototype.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n Document.prototype.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n Document.prototype.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n Document.prototype.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n Document.prototype.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n Document.prototype.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n Document.prototype.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n Document.prototype.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n Document.prototype.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n Document.prototype.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n Document.prototype.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n Document.prototype.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n Document.prototype.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n Document.prototype.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n Document.prototype.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n function BackgroundTokenizer(tokenizer, session) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n }\n BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n BackgroundTokenizer.prototype.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n BackgroundTokenizer.prototype.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n BackgroundTokenizer.prototype.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n BackgroundTokenizer.prototype.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n BackgroundTokenizer.prototype.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n BackgroundTokenizer.prototype.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n function SearchHighlight(regExp, clazz, type) {\n if (type === void 0) { type = \"text\"; }\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type;\n this.docLen = 0;\n }\n SearchHighlight.prototype.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow;\n var end = config.lastRow;\n var renderedMarkerRanges = {};\n var _search = session.$editor && session.$editor.$search;\n var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions());\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null || session.getValue().length != this.docLen) {\n if (mtSearch) {\n ranges = [];\n var match = _search.$multiLineForward(session, this.regExp, i, end);\n if (match) {\n var end_row = match.endRow <= end ? match.endRow - 1 : end;\n if (end_row > i)\n i = end_row;\n ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol));\n }\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n }\n else {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n }\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n if (ranges.length === 0)\n continue;\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n this.docLen = session.getValue().length;\n };\n return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\n this.$keepRedoStack;\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n }\n UndoManager.prototype.addSession = function (session) {\n this.$session = session;\n };\n UndoManager.prototype.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n UndoManager.prototype.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n UndoManager.prototype.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n UndoManager.prototype.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n UndoManager.prototype.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n UndoManager.prototype.getRevision = function () {\n return this.$rev;\n };\n UndoManager.prototype.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n UndoManager.prototype.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n UndoManager.prototype.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n UndoManager.prototype.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n UndoManager.prototype.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n UndoManager.prototype.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n UndoManager.prototype.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n UndoManager.prototype.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n UndoManager.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n UndoManager.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n };\n UndoManager.prototype.fromJSON = function (json) {\n this.reset();\n this.$undoStack = json.$undoStack;\n this.$redoStack = json.$redoStack;\n };\n UndoManager.prototype.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n FoldLine.prototype.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n FoldLine.prototype.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n FoldLine.prototype.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n FoldLine.prototype.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n FoldLine.prototype.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n FoldLine.prototype.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n FoldLine.prototype.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n FoldLine.prototype.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n FoldLine.prototype.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n }\n RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n RangeList.prototype.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n RangeList.prototype.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n RangeList.prototype.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n RangeList.prototype.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n RangeList.prototype.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n RangeList.prototype.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n RangeList.prototype.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n RangeList.prototype.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n RangeList.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n RangeList.prototype.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n RangeList.prototype.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n RangeList.prototype.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n __extends(Fold, _super);\n function Fold(range, placeholder) {\n var _this = _super.call(this) || this;\n _this.foldLine = null;\n _this.placeholder = placeholder;\n _this.range = range;\n _this.start = range.start;\n _this.end = range.end;\n _this.sameRow = range.start.row == range.end.row;\n _this.subFolds = _this.ranges = [];\n return _this;\n }\n Fold.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n Fold.prototype.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n Fold.prototype.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n Fold.prototype.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n Fold.prototype.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (tryToUnfold) {\n var foldLine = this.getFoldLine(cursor.row);\n if (foldLine)\n this.expandFolds(foldLine.folds);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start|\\\\.doc\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator = new TokenIterator(this, row, column);\n var initState = this.getState(iterator.$row);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (initState.toString() !== state.toString())\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n if (range.start.row == range.end.row && range.start.column > range.end.column)\n return;\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n if (e instanceof MouseEvent)\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos, isBackwards) {\n var line = this.getLine(pos.row);\n var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n var chr = !isBackwards && line.charAt(pos.column - 1);\n var match = chr && chr.match(bracketsRegExp);\n if (!match) {\n chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(bracketsRegExp);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n .replace(/-close\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n .replace(/-open\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for \")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/line_widgets\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n function EditSession(text, mode) { this.doc;\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$editor = null;\n this.prevOp = {};\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.$gutterCustomWidgets = {};\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(/**@type{string}*/ (text));\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.selection.on(\"changeCursor\", this.$onSelectionChange);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n this.$initOperationListeners();\n }\n EditSession.prototype.$initOperationListeners = function () {\n var _this = this;\n this.curOp = null;\n this.on(\"change\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.docChanged = true;\n }, true);\n this.on(\"changeSelection\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.selectionChanged = true;\n }, true);\n this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n };\n EditSession.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command) {\n return;\n }\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n commandEvent = {};\n }\n this.$operationResetTimer.schedule();\n this.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n this._signal(\"startOperation\", commandEvent);\n };\n EditSession.prototype.endOperation = function (e) {\n if (this.curOp) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n this._signal(\"endOperation\", e);\n return;\n }\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\") {\n return;\n }\n var currentSelection = this.selection.toJSON();\n this.curOp.selectionAfter = currentSelection;\n this.$lastSel = this.selection.toJSON();\n this.getUndoManager().addSelection(currentSelection);\n this._signal(\"beforeEndOperation\");\n this.prevOp = this.curOp;\n this.curOp = null;\n this._signal(\"endOperation\", e);\n }\n };\n EditSession.prototype.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n EditSession.prototype.getDocument = function () {\n return this.doc;\n };\n Object.defineProperty(EditSession.prototype, \"widgetManager\", {\n get: function () {\n var widgetManager = new LineWidgets(this);\n this.widgetManager = widgetManager;\n if (this.$editor)\n widgetManager.attach(this.$editor);\n return widgetManager;\n },\n set: function (value) {\n Object.defineProperty(this, \"widgetManager\", {\n writable: true,\n enumerable: true,\n configurable: true,\n value: value,\n });\n },\n enumerable: false,\n configurable: true\n });\n EditSession.prototype.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n EditSession.prototype.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n EditSession.prototype.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n EditSession.prototype.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n EditSession.prototype.onSelectionChange = function () {\n this._signal(\"changeSelection\");\n };\n EditSession.prototype.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n EditSession.fromJSON = function (session) {\n if (typeof session == \"string\")\n session = JSON.parse(session);\n var undoManager = new UndoManager();\n undoManager.$undoStack = session.history.undo;\n undoManager.$redoStack = session.history.redo;\n undoManager.mark = session.history.mark;\n undoManager.$rev = session.history.rev;\n var editSession = new EditSession(session.value);\n session.folds.forEach(function (fold) {\n editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n });\n editSession.setAnnotations(session.annotations);\n editSession.setBreakpoints(session.breakpoints);\n editSession.setMode(session.mode);\n editSession.setScrollLeft(session.scrollLeft);\n editSession.setScrollTop(session.scrollTop);\n editSession.setUndoManager(undoManager);\n editSession.selection.fromJSON(session.selection);\n return editSession;\n };\n EditSession.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (fold) {\n return fold.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n };\n EditSession.prototype.toString = function () {\n return this.doc.getValue();\n };\n EditSession.prototype.getSelection = function () {\n return this.selection;\n };\n EditSession.prototype.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n EditSession.prototype.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n EditSession.prototype.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n EditSession.prototype.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n EditSession.prototype.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n EditSession.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n EditSession.prototype.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n EditSession.prototype.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n EditSession.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n EditSession.prototype.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n EditSession.prototype.getTabSize = function () {\n return this.$tabSize;\n };\n EditSession.prototype.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n EditSession.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n EditSession.prototype.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n EditSession.prototype.getOverwrite = function () {\n return this.$overwrite;\n };\n EditSession.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n EditSession.prototype.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.removeGutterCustomWidget = function (row) {\n if (this.$editor) {\n this.$editor.renderer.$gutterLayer.$removeCustomWidget(row);\n }\n };\n EditSession.prototype.addGutterCustomWidget = function (row, attributes) {\n if (this.$editor) {\n this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes);\n }\n };\n EditSession.prototype.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n };\n EditSession.prototype.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n EditSession.prototype.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n EditSession.prototype.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n EditSession.prototype.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n EditSession.prototype.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n EditSession.prototype.getAnnotations = function () {\n return this.$annotations || [];\n };\n EditSession.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n EditSession.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n EditSession.prototype.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n EditSession.prototype.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n EditSession.prototype.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n EditSession.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n EditSession.prototype.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n EditSession.prototype.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.destroyed) {\n return;\n }\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n EditSession.prototype.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n EditSession.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n EditSession.prototype.getMode = function () {\n return this.$mode;\n };\n EditSession.prototype.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n EditSession.prototype.getScrollTop = function () {\n return this.$scrollTop;\n };\n EditSession.prototype.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n EditSession.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n EditSession.prototype.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n EditSession.prototype.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n EditSession.prototype.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n EditSession.prototype.getLine = function (row) {\n return this.doc.getLine(row);\n };\n EditSession.prototype.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n EditSession.prototype.getLength = function () {\n return this.doc.getLength();\n };\n EditSession.prototype.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n EditSession.prototype.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n EditSession.prototype.remove = function (range) {\n return this.doc.remove(range);\n };\n EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n EditSession.prototype.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n EditSession.prototype.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n EditSession.prototype.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n EditSession.prototype.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n EditSession.prototype.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n EditSession.prototype.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n EditSession.prototype.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n EditSession.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n EditSession.prototype.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n EditSession.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n EditSession.prototype.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n EditSession.prototype.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n EditSession.prototype.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n EditSession.prototype.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n EditSession.prototype.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n EditSession.prototype.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n else\n pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n EditSession.prototype.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n EditSession.prototype.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n EditSession.prototype.getPrecedingCharacter = function () {\n var pos = this.selection.getCursor();\n if (pos.column === 0) {\n return pos.row === 0 ? \"\" : this.doc.getNewLineCharacter();\n }\n var currentLine = this.getLine(pos.row);\n return currentLine[pos.column - 1];\n };\n EditSession.prototype.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.endOperation();\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n if (this.selection) {\n this.selection.off(\"changeCursor\", this.$onSelectionChange);\n this.selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.selection.detach();\n };\n return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n min: null,\n max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n function Search() {\n this.$options = {};\n }\n Search.prototype.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n Search.prototype.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n Search.prototype.setOptions = function (options) {\n this.$options = options;\n };\n Search.prototype.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n Search.prototype.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var matches, i = 0; i < lines.length; i++) {\n if (this.$isMultilineSearch(options)) {\n var lng = lines.length - 1;\n matches = this.$multiLineForward(session, re, i, lng);\n if (matches) {\n var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng;\n if (end_row > i)\n i = end_row;\n ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol));\n }\n }\n else {\n matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n Search.prototype.parseReplaceString = function (replaceString) {\n var CharCode = {\n DollarSign: 36,\n Ampersand: 38,\n Digit0: 48,\n Digit1: 49,\n Digit9: 57,\n Backslash: 92,\n n: 110,\n t: 116\n };\n var replacement = '';\n for (var i = 0, len = replaceString.length; i < len; i++) {\n var chCode = replaceString.charCodeAt(i);\n if (chCode === CharCode.Backslash) {\n i++;\n if (i >= len) {\n replacement += \"\\\\\";\n break;\n }\n var nextChCode = replaceString.charCodeAt(i);\n switch (nextChCode) {\n case CharCode.Backslash:\n replacement += \"\\\\\";\n break;\n case CharCode.n:\n replacement += \"\\n\";\n break;\n case CharCode.t:\n replacement += \"\\t\";\n break;\n }\n continue;\n }\n if (chCode === CharCode.DollarSign) {\n i++;\n if (i >= len) {\n replacement += \"$\";\n break;\n }\n var nextChCode_1 = replaceString.charCodeAt(i);\n if (nextChCode_1 === CharCode.DollarSign) {\n replacement += \"$$\";\n continue;\n }\n if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) {\n replacement += \"$&\";\n continue;\n }\n if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) {\n replacement += \"$\" + replaceString[i];\n continue;\n }\n }\n replacement += replaceString[i];\n }\n return replacement || replaceString;\n };\n Search.prototype.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var mtSearch = this.$isMultilineSearch(options);\n if (mtSearch)\n input = input.replace(/\\r\\n|\\r|\\n/g, \"\\n\");\n var match = re.exec(input);\n if (!match || (!mtSearch && match[0].length != input.length))\n return null;\n replacement = options.regExp\n ? this.parseReplaceString(replacement)\n : replacement.replace(/\\$/g, \"$$$$\");\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n try {\n new RegExp(needle, \"u\");\n options.$supportsUnicodeFlag = true;\n modifier += \"u\";\n }\n catch (e) {\n options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n }\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n Search.prototype.$isMultilineSearch = function (options) {\n return options.re && /\\\\r\\\\n|\\\\r|\\\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine;\n };\n Search.prototype.$multiLineForward = function (session, re, start, last) {\n var line, chunk = chunkEnd(session, start);\n for (var row = start; row <= last;) {\n for (var i = 0; i < chunk; i++) {\n if (row > last)\n break;\n var next = session.getLine(row++);\n line = line == null ? next : line + \"\\n\" + next;\n }\n var match = re.exec(line);\n re.lastIndex = 0;\n if (match) {\n var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n var matchedText = match[0].split(\"\\n\");\n var startRow = start + beforeMatch.length - 1;\n var startCol = beforeMatch[beforeMatch.length - 1].length;\n var endRow = startRow + matchedText.length - 1;\n var endCol = matchedText.length == 1\n ? startCol + matchedText[0].length\n : matchedText[matchedText.length - 1].length;\n return {\n startRow: startRow,\n startCol: startCol,\n endRow: endRow,\n endCol: endCol\n };\n }\n }\n return null;\n };\n Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) {\n var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex;\n for (var row = start; row >= first;) {\n for (var i = 0; i < chunk && row >= first; i++) {\n var next = session.getLine(row--);\n line = line == null ? next : next + \"\\n\" + line;\n }\n var match = multiLineBackwardMatch(line, re, endMargin);\n if (match) {\n var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n var matchedText = match[0].split(\"\\n\");\n var startRow = row + beforeMatch.length;\n var startCol = beforeMatch[beforeMatch.length - 1].length;\n var endRow = startRow + matchedText.length - 1;\n var endCol = matchedText.length == 1\n ? startCol + matchedText[0].length\n : matchedText[matchedText.length - 1].length;\n return {\n startRow: startRow,\n startCol: startCol,\n endRow: endRow,\n endCol: endCol\n };\n }\n }\n return null;\n };\n Search.prototype.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var mtSearch = this.$isMultilineSearch(options);\n var mtForward = this.$multiLineForward;\n var mtBackward = this.$multiLineBackward;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var supportsUnicodeFlag = re.unicode;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n if (mtSearch) {\n var pos = mtBackward(session, re, endIndex, row, firstRow);\n if (!pos)\n return false;\n if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n return true;\n }\n else {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n re.lastIndex = startIndex;\n if (mtSearch) {\n var pos = mtForward(session, re, row, lastRow);\n if (pos) {\n var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow;\n if (end_row > row)\n row = end_row;\n }\n if (!pos)\n return false;\n if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n return true;\n }\n else {\n var line = session.getLine(row);\n var last;\n var m;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n if (last >= line.length)\n return false;\n }\n }\n }\n };\n }\n return { forEach: forEach };\n };\n return Search;\n}());\nfunction addWordBoundary(needle, options) {\n var supportsLookbehind = lang.supportsLookbehind();\n function wordBoundary(c, firstChar) {\n if (firstChar === void 0) { firstChar = true; }\n var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n if (wordRegExp.test(c) || options.regExp) {\n if (supportsLookbehind && options.$supportsUnicodeFlag) {\n if (firstChar)\n return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n }\n return \"\\\\b\";\n }\n return \"\";\n }\n var needleArray = Array.from(needle);\n var firstChar = needleArray[0];\n var lastChar = needleArray[needleArray.length - 1];\n return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nfunction multiLineBackwardMatch(line, re, endMargin) {\n var match = null;\n var from = 0;\n while (from <= line.length) {\n re.lastIndex = from;\n var newMatch = re.exec(line);\n if (!newMatch)\n break;\n var end = newMatch.index + newMatch[0].length;\n if (end > line.length - endMargin)\n break;\n if (!match || end > match.index + match[0].length)\n match = newMatch;\n from = newMatch.index + 1;\n }\n return match;\n}\nfunction chunkEnd(session, start) {\n var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row;\n return targetLine + 1;\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n function MultiHashHandler(config, platform) {\n this.$init(config, platform, false);\n }\n MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = $singleCommand;\n };\n MultiHashHandler.prototype.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n MultiHashHandler.prototype.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n MultiHashHandler.prototype.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n MultiHashHandler.prototype.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n MultiHashHandler.prototype.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n MultiHashHandler.prototype._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n MultiHashHandler.prototype.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n MultiHashHandler.prototype.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n return MultiHashHandler;\n}());\nfunction getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n __extends(HashHandler, _super);\n function HashHandler(config, platform) {\n var _this = _super.call(this, config, platform) || this;\n _this.$singleCommand = true;\n return _this;\n }\n return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager(platform, commands) {\n var _this = _super.call(this, commands, platform) || this;\n _this.byName = _this.commands;\n _this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n return _this;\n }\n CommandManager.prototype.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n var e = { editor: editor, command: command, args: args };\n if (!this.canExecute(command, editor)) {\n this._signal(\"commandUnavailable\", e);\n return false;\n }\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n CommandManager.prototype.canExecute = function (command, editor) {\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n return true;\n };\n CommandManager.prototype.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n CommandManager.prototype.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n CommandManager.prototype.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"openlink\",\n bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n exec: function (editor) { editor.openLink(); }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (editor) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\nvar GutterKeyboardHandler = /** @class */ (function () {\n function GutterKeyboardHandler(editor) {\n this.editor = editor;\n this.gutterLayer = editor.renderer.$gutterLayer;\n this.element = editor.renderer.$gutter;\n this.lines = editor.renderer.$gutterLayer.$lines;\n this.activeRowIndex = null;\n this.activeLane = null;\n this.annotationTooltip = new GutterTooltip(this.editor);\n }\n GutterKeyboardHandler.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n if (this.annotationTooltip.isOpen) {\n e.preventDefault();\n if (e.keyCode === keys[\"escape\"])\n this.annotationTooltip.hideTooltip();\n return;\n }\n if (e.target === this.element) {\n if (e.keyCode != keys[\"enter\"]) {\n return;\n }\n e.preventDefault();\n var row = this.editor.getCursorPosition().row;\n if (!this.editor.isRowVisible(row))\n this.editor.scrollToLine(row, true, true);\n setTimeout(\n function () {\n var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null)\n return;\n var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index);\n if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) {\n this.activeLane = \"fold\";\n this.activeRowIndex = nearestFoldLaneWidgetIndex;\n if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) {\n this.$focusCustomWidget(this.activeRowIndex);\n return;\n }\n else {\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n else {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }.bind(this), 10);\n return;\n }\n this.$handleGutterKeyboardInteraction(e);\n setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n }.bind(this), 10);\n };\n GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === keys[\"tab\"]) {\n e.preventDefault();\n return;\n }\n if (e.keyCode === keys[\"escape\"]) {\n e.preventDefault();\n this.$blurGutter();\n this.element.focus();\n this.lane = null;\n return;\n }\n if (e.keyCode === keys[\"up\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"down\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"left\"]) {\n e.preventDefault();\n this.$switchLane(\"annotation\");\n return;\n }\n if (e.keyCode === keys[\"right\"]) {\n e.preventDefault();\n this.$switchLane(\"fold\");\n return;\n }\n if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n var row = this.$rowIndexToRow(this.activeRowIndex);\n var customWidget = this.editor.session.$gutterCustomWidgets[row];\n if (customWidget) {\n if (customWidget.callbacks && customWidget.callbacks.onClick) {\n customWidget.callbacks.onClick(e, row);\n }\n }\n else if (this.gutterLayer.session.foldWidgets[row] === 'start') {\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(\n function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== row) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(row);\n this.$focusFoldWidget(this.activeRowIndex);\n }\n }.bind(this), 10);\n break;\n }\n else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n break;\n }\n return;\n case \"annotation\":\n var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n break;\n }\n return;\n }\n };\n GutterKeyboardHandler.prototype.$blurGutter = function () {\n if (this.activeRowIndex !== null) {\n switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\n return;\n };\n GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = !!this.$getCustomWidget(index);\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[1];\n };\n GutterKeyboardHandler.prototype.$getCustomWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[3];\n };\n GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) {\n if (this.$isCustomWidgetVisible(index))\n return index;\n if (this.$isFoldWidgetVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isCustomWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i))\n return index + i;\n if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n if (this.$isAnnotationVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n if (index == null)\n return;\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n foldWidget.focus();\n };\n GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) {\n if (index == null)\n return;\n var customWidget = this.$getCustomWidget(index);\n if (customWidget) {\n customWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n customWidget.focus();\n }\n };\n GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n if (index == null)\n return;\n var annotation = this.$getAnnotation(index);\n annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n annotation.focus();\n };\n GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n foldWidget.blur();\n };\n GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) {\n var customWidget = this.$getCustomWidget(index);\n if (customWidget) {\n customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n customWidget.blur();\n }\n };\n GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n var annotation = this.$getAnnotation(index);\n annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n annotation.blur();\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n if (this.$isFoldWidgetVisible(index)) {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n else {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n if (this.$isFoldWidgetVisible(index)) {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n else {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) {\n if (num1 === null)\n return num2;\n if (num2 === null)\n return num1;\n return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2;\n };\n GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n switch (desinationLane) {\n case \"annotation\":\n if (this.activeLane === \"annotation\") {\n break;\n }\n var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n if (annotationIndex == null) {\n break;\n }\n this.activeLane = \"annotation\";\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex);\n if (foldLaneWidgetIndex === null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldLaneWidgetIndex;\n if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n else {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n break;\n }\n return;\n };\n GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n var cell = this.lines.get(index);\n if (cell)\n return cell.row;\n return null;\n };\n GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n for (var i = 0; i < this.lines.getLength(); i++) {\n var cell = this.lines.get(i);\n if (cell.row == row)\n return i;\n }\n return null;\n };\n return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n this.gutterKeyboardHandler = gutterKeyboardHandler;\n this.domEvent = domEvent;\n }\n GutterKeyboardEvent.prototype.getKey = function () {\n return keys.keyCodeToString(this.domEvent.keyCode);\n };\n GutterKeyboardEvent.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n };\n GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"annotation\";\n };\n GutterKeyboardEvent.prototype.isInFoldLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"fold\";\n };\n return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar event = require(\"./lib/event\");\nvar HoverTooltip = require(\"./tooltip\").HoverTooltip;\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) {\n this.id = \"editor\" + (++Editor.$uid); this.session;\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n }\n Editor.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n this.session.startOperation(commandEvent);\n };\n Editor.prototype.endOperation = function (e) {\n this.session.endOperation(e);\n };\n Editor.prototype.onStartOperation = function (commandEvent) {\n this.curOp = this.session.curOp;\n this.curOp.scrollTop = this.renderer.scrollTop;\n this.prevOp = this.session.prevOp;\n if (!commandEvent) {\n this.previousCommand = null;\n }\n };\n Editor.prototype.onEndOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n return;\n }\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n this.$lastSel = this.session.selection.toJSON();\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n Editor.prototype.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n Editor.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n Editor.prototype.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.session.off(\"startOperation\", this.$onStartOperation);\n this.session.off(\"endOperation\", this.$onEndOperation);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.$onStartOperation = this.onStartOperation.bind(this);\n this.session.on(\"startOperation\", this.$onStartOperation);\n this.$onEndOperation = this.onEndOperation.bind(this);\n this.session.on(\"endOperation\", this.$onEndOperation);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n if (oldSession)\n oldSession.$editor = null;\n session && session._signal(\"changeEditor\", { editor: this });\n if (session)\n session.$editor = this;\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n Editor.prototype.getSession = function () {\n return this.session;\n };\n Editor.prototype.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n Editor.prototype.getValue = function () {\n return this.session.getValue();\n };\n Editor.prototype.getSelection = function () {\n return this.selection;\n };\n Editor.prototype.resize = function (force) {\n this.renderer.onResize(force);\n };\n Editor.prototype.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n Editor.prototype.getTheme = function () {\n return this.renderer.getTheme();\n };\n Editor.prototype.setStyle = function (style, incluude) {\n this.renderer.setStyle(style, incluude);\n };\n Editor.prototype.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n Editor.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n Editor.prototype.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n Editor.prototype.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var handler = self.getKeyboardHandler();\n var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges) {\n ranges = [\n tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName,\n tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName\n ];\n }\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n Editor.prototype.focus = function () {\n this.textInput.focus();\n };\n Editor.prototype.isFocused = function () {\n return this.textInput.isFocused();\n };\n Editor.prototype.blur = function () {\n this.textInput.blur();\n };\n Editor.prototype.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n Editor.prototype.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n Editor.prototype.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n Editor.prototype.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n Editor.prototype.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n Editor.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n Editor.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n Editor.prototype.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n Editor.prototype.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n Editor.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n Editor.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n Editor.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n Editor.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n Editor.prototype.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n Editor.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n Editor.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n Editor.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n Editor.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n Editor.prototype.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n Editor.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n Editor.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n Editor.prototype.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n Editor.prototype.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n Editor.prototype.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n Editor.prototype.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n Editor.prototype.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var ranges = this.selection.isEmpty()\n ? [new Range(0, 0, session.doc.getLength() - 1, 0)]\n : this.selection.getAllRanges();\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var tab = session.getTabString();\n for (var i = 0; i < ranges.length; i++) {\n var startRow = ranges[i].start.row;\n var endRow = ranges[i].end.row;\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n var line = session.getLine(row);\n var currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n var range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n }\n };\n Editor.prototype.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n Editor.prototype.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n Editor.prototype.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n Editor.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n Editor.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n Editor.prototype.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n Editor.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n Editor.prototype.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n Editor.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n Editor.prototype.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n Editor.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n Editor.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n Editor.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n Editor.prototype.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n Editor.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n Editor.prototype.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n Editor.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n Editor.prototype.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n Editor.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n Editor.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n Editor.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n Editor.prototype.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n Editor.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n Editor.prototype.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n Editor.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n Editor.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n Editor.prototype.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n Editor.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n Editor.prototype.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n Editor.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n Editor.prototype.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n Editor.prototype.setGhostText = function (text, position) {\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n this.renderer.removeGhostText();\n };\n Editor.prototype.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n Editor.prototype.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n Editor.prototype.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n Editor.prototype.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n Editor.prototype.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n Editor.prototype.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n Editor.prototype.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n Editor.prototype.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n Editor.prototype.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n Editor.prototype.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n Editor.prototype.findLinkAt = function (row, column) {\n var e_1, _a;\n var line = this.session.getLine(row);\n var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n var columnPosition = column;\n if (columnPosition < 0)\n columnPosition = 0;\n var previousPosition = 0, currentPosition = 0, match;\n try {\n for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n var item = wordParts_1_1.value;\n currentPosition = previousPosition + item.length;\n if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n }\n previousPosition = currentPosition;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return match;\n };\n Editor.prototype.openLink = function () {\n var cursor = this.selection.getCursor();\n var url = this.findLinkAt(cursor.row, cursor.column);\n if (url)\n window.open(url, '_blank');\n return url != null;\n };\n Editor.prototype.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n Editor.prototype.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range));\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n Editor.prototype.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n Editor.prototype.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n Editor.prototype.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n Editor.prototype.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n Editor.prototype.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n Editor.prototype.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n Editor.prototype.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n Editor.prototype.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n Editor.prototype.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n Editor.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n Editor.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n Editor.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n Editor.prototype.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n Editor.prototype.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n Editor.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n Editor.prototype.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n Editor.prototype.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n Editor.prototype.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n Editor.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n Editor.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n Editor.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n Editor.prototype.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n Editor.prototype.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n Editor.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n Editor.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n Editor.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n };\n Editor.prototype.selectAll = function () {\n this.selection.selectAll();\n };\n Editor.prototype.clearSelection = function () {\n this.selection.clearSelection();\n };\n Editor.prototype.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n Editor.prototype.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n Editor.prototype.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n Editor.prototype.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n Editor.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n Editor.prototype.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n Editor.prototype.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n Editor.prototype.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n Editor.prototype.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.destroy = function () {\n this.destroyed = true;\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = [];\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n Editor.prototype.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n Editor.prototype.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"ace/ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (/**@type{boolean}*/ readOnly) {\n var _this = this;\n this.textInput.setReadOnly(readOnly);\n if (this.destroyed)\n return;\n this.$resetCursorStyle();\n if (!this.$readOnlyCallback) {\n this.$readOnlyCallback = function (e) {\n var shouldShow = false;\n if (e && e.type == \"keydown\") {\n if (e && e.key && !e.ctrlKey && !e.metaKey) {\n if (e.key == \" \")\n e.preventDefault();\n shouldShow = e.key.length == 1;\n }\n if (!shouldShow)\n return;\n }\n else if (e && e.type !== \"exec\") {\n shouldShow = true;\n }\n if (shouldShow) {\n if (!_this.hoverTooltip) {\n _this.hoverTooltip = new HoverTooltip();\n }\n var domNode = dom.createElement(\"div\");\n domNode.textContent = nls(\"editor.tooltip.disable-editing\", \"Editing is disabled\");\n if (!_this.hoverTooltip.isOpen) {\n _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode);\n }\n }\n else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) {\n _this.hoverTooltip.hide();\n }\n };\n }\n var textArea = this.textInput.getElement();\n if (readOnly) {\n event.addListener(textArea, \"keydown\", this.$readOnlyCallback, this);\n this.commands.on(\"exec\", this.$readOnlyCallback);\n this.commands.on(\"commandUnavailable\", this.$readOnlyCallback);\n }\n else {\n event.removeListener(textArea, \"keydown\", this.$readOnlyCallback);\n this.commands.off(\"exec\", this.$readOnlyCallback);\n this.commands.off(\"commandUnavailable\", this.$readOnlyCallback);\n if (this.hoverTooltip) {\n this.hoverTooltip.destroy();\n this.hoverTooltip = null;\n }\n }\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var hasValue = this.session && (this.renderer.$composition ||\n this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n if (hasValue && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!hasValue && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!hasValue && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (value) {\n var blurCommand = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (editor) {\n editor.blur();\n editor.renderer.scroller.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n e.preventDefault();\n var row = this.getCursorPosition().row;\n if (!this.isRowVisible(row))\n this.scrollToLine(row, true, true);\n this.focus();\n }\n };\n var gutterKeyboardHandler;\n if (value) {\n this.renderer.enableKeyboardAccessibility = true;\n this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n this.renderer.scroller.setAttribute(\"tabindex\", 0);\n this.renderer.scroller.setAttribute(\"role\", \"group\");\n this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor.scroller.aria-roledescription\", \"editor\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"editor.scroller.aria-label\", \"Editor content, press Enter to start editing, press Escape to exit\"));\n this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n this.renderer.$gutter.setAttribute(\"role\", \"group\");\n this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor.gutter.aria-roledescription\", \"editor gutter\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"editor.gutter.aria-label\", \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-hidden\", true);\n if (!gutterKeyboardHandler)\n gutterKeyboardHandler = new GutterKeyboardHandler(this);\n gutterKeyboardHandler.addListener();\n this.textInput.setAriaOptions({\n setLabel: true\n });\n }\n else {\n this.renderer.enableKeyboardAccessibility = false;\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.textInput.setNumberOfExtraLines(0);\n this.renderer.scroller.setAttribute(\"tabindex\", -1);\n this.renderer.scroller.removeAttribute(\"role\");\n this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.removeAttribute(\"aria-label\");\n this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\n this.renderer.content.removeAttribute(\"aria-hidden\");\n this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n this.renderer.$gutter.removeAttribute(\"role\");\n this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n this.renderer.$gutter.removeAttribute(\"aria-label\");\n this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n if (gutterKeyboardHandler)\n gutterKeyboardHandler.removeListener();\n }\n },\n initialValue: false\n },\n textInputAriaLabel: {\n set: function (val) { this.$textInputAriaLabel = val; },\n initialValue: \"\"\n },\n enableMobileMenu: {\n set: function (val) { this.$enableMobileMenu = val; },\n initialValue: true\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, /**@type{Editor}*/ editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (/**@type{Editor}*/ editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (/**@type{Editor}*/ editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n }\n Lines.prototype.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n Lines.prototype.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n Lines.prototype.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n Lines.prototype.getLength = function () {\n return this.cells.length;\n };\n Lines.prototype.get = function (index) {\n return this.cells[index];\n };\n Lines.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n Lines.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n Lines.prototype.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n Lines.prototype.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n Lines.prototype.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n Lines.prototype.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n Lines.prototype.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n }\n Gutter.prototype.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n Gutter.prototype.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n Gutter.prototype.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n Gutter.prototype.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] };\n var annoText = annotation.text;\n var displayAnnoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n rowInfo.displayText.push(displayAnnoText);\n }\n var className = annotation.className;\n if (className) {\n rowInfo.className = className;\n }\n else if (annoType === \"error\") {\n rowInfo.className = \" ace_error\";\n }\n else if (annoType === \"security\" && !/\\bace_error\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_security\";\n }\n else if (annoType === \"warning\" && !/\\bace_(error|security)\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_warning\";\n }\n else if (annoType === \"info\" && !rowInfo.className) {\n rowInfo.className = \" ace_info\";\n }\n else if (annoType === \"hint\" && !rowInfo.className) {\n rowInfo.className = \" ace_hint\";\n }\n }\n };\n Gutter.prototype.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n Gutter.prototype.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n Gutter.prototype.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n Gutter.prototype.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n Gutter.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var annotationNode = element.childNodes[2];\n var customWidget = element.childNodes[3];\n var annotationIconNode = annotationNode.firstChild;\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var lineHeight = config.lineHeight + \"px\";\n var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n var rowText = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row] && row !== foldStart)\n className += this.$annotations[row].className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var foldClass = \"ace_fold-widget ace_\" + c;\n var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n if (isClosedFold) {\n foldClass += \" ace_closed\";\n var foldAnnotationClass = \"\";\n var annotationInFold = false;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!this.$annotations[i])\n continue;\n if (this.$annotations[i].className === \" ace_error\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_error_fold\";\n break;\n }\n if (this.$annotations[i].className === \" ace_security\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_security_fold\";\n }\n else if (this.$annotations[i].className === \" ace_warning\" &&\n foldAnnotationClass !== \" ace_security_fold\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n }\n }\n className += foldAnnotationClass;\n }\n else\n foldClass += \" ace_open\";\n if (foldWidget.className != foldClass)\n foldWidget.className = foldClass;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n foldWidget.setAttribute(\"role\", \"button\");\n foldWidget.setAttribute(\"tabindex\", \"-1\");\n var foldRange = session.getFoldWidgetRange(row);\n if (foldRange)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.range.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n foldRange.start.row + 1,\n foldRange.end.row + 1\n ]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.closed.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n fold.start.row + 1,\n fold.end.row + 1\n ]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.open.aria-label\", \"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.closed.title\", \"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.open.title\", \"Fold code\"));\n }\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n foldWidget.setAttribute(\"tabindex\", \"0\");\n foldWidget.removeAttribute(\"role\");\n foldWidget.removeAttribute(\"aria-label\");\n }\n }\n var customWidgetAttributes = this.session.$gutterCustomWidgets[row];\n if (customWidgetAttributes) {\n this.$addCustomWidget(row, customWidgetAttributes, cell);\n }\n else if (customWidget) {\n this.$removeCustomWidget(row, cell);\n }\n if (annotationInFold && this.$showFoldedAnnotations) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n annotationIconNode.className += foldAnnotationClass;\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (foldAnnotationClass) {\n case \" ace_error_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else if (this.$annotations[row]) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n if (this.$useSvgGutterIcons)\n annotationIconNode.className += this.$annotations[row].className;\n else\n element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (this.$annotations[row].className) {\n case \" ace_error\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n case \" ace_info\":\n ariaLabel = nls(\"gutter.annotation.aria-label.info\", \"Info, read annotations row $0\", [rowText]);\n break;\n case \" ace_hint\":\n ariaLabel = nls(\"gutter.annotation.aria-label.hint\", \"Suggestion, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n annotationNode.removeAttribute(\"aria-label\");\n annotationNode.removeAttribute(\"role\");\n annotationNode.setAttribute(\"tabindex\", \"0\");\n }\n if (rowText !== textNode.data) {\n textNode.data = rowText;\n }\n if (element.className != className)\n element.className = className;\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = rowText;\n if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\" && !customWidgetAttributes)\n cell.element.setAttribute(\"aria-hidden\", true);\n else\n cell.element.setAttribute(\"aria-hidden\", false);\n return cell;\n };\n Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n Gutter.prototype.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n Gutter.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n Gutter.prototype.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n Gutter.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n Gutter.prototype.$hideFoldWidget = function (row, cell) {\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var foldWidget = rowCell.element.childNodes[1];\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n };\n Gutter.prototype.$showFoldWidget = function (row, cell) {\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var foldWidget = rowCell.element.childNodes[1];\n if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) {\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n }\n }\n };\n Gutter.prototype.$getGutterCell = function (row) {\n var cells = this.$lines.cells;\n var visibileRow = this.session.documentToScreenRow(row, 0);\n return cells[row - this.config.firstRowScreen - (row - visibileRow)];\n };\n Gutter.prototype.$addCustomWidget = function (row, _a, cell) {\n var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks;\n this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks };\n this.$hideFoldWidget(row, cell);\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n if (customWidget) {\n customWidget.remove();\n }\n customWidget = dom.createElement(\"span\");\n customWidget.className = \"ace_custom-widget \".concat(className);\n customWidget.setAttribute(\"tabindex\", \"-1\");\n customWidget.setAttribute(\"role\", 'button');\n customWidget.setAttribute(\"aria-label\", label);\n customWidget.setAttribute(\"title\", title);\n dom.setStyle(customWidget.style, \"display\", \"inline-block\");\n dom.setStyle(customWidget.style, \"height\", \"inherit\");\n if (callbacks && callbacks.onClick) {\n customWidget.addEventListener(\"click\", function (e) {\n callbacks.onClick(e, row);\n e.stopPropagation();\n });\n }\n rowCell.element.appendChild(customWidget);\n }\n };\n Gutter.prototype.$removeCustomWidget = function (row, cell) {\n delete this.session.$gutterCustomWidgets[row];\n this.$showFoldWidget(row, cell);\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n if (customWidget) {\n rowCell.element.removeChild(customWidget);\n }\n }\n };\n Gutter.prototype.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n Gutter.prototype.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = \"\";\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n var annotationNode = dom.createElement(\"span\");\n element.appendChild(annotationNode);\n var annotationIconNode = dom.createElement(\"span\");\n annotationNode.appendChild(annotationIconNode);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n }\n Marker.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Marker.prototype.setSession = function (session) {\n this.session = session;\n };\n Marker.prototype.setMarkers = function (markers) {\n this.markers = markers;\n };\n Marker.prototype.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n Marker.prototype.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n Marker.prototype.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:\" + padding + \"px;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:\" + padding + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n }\n Text.prototype.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n Text.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n Text.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n Text.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n Text.prototype.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", \n function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n Text.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n Text.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n Text.prototype.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n Text.prototype.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n Text.prototype.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n Text.prototype.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n Text.prototype.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n Text.prototype.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break; var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n Text.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n Text.prototype.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069\\u2060\\u2061\\u2062\\u2063\\u2064\\u206A\\u206B\\u206B\\u206C\\u206D\\u206E\\u206F]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n var text = self.$tabStrings[tabSize].cloneNode(true);\n text[\"charCount\"] = 1;\n valueFragment.appendChild(text);\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!isTextToken(token.type)) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") {\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.setAttribute(\"title\", nls(\"inline-fold.closed.title\", \"Unfold code\"));\n }\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n Text.prototype.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n Text.prototype.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n Text.prototype.$clearActiveIndentGuide = function () {\n var activeIndentGuides = this.element.querySelectorAll(\".ace_indent-guide-active\");\n for (var i = 0; i < activeIndentGuides.length; i++) {\n activeIndentGuides[i].classList.remove(\"ace_indent-guide-active\");\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var element = cell.element;\n if (cell.element.classList && cell.element.classList.contains(\"ace_line_group\")) {\n if (cell.element.childNodes.length > 0) {\n element = cell.element.childNodes[0];\n }\n else {\n return;\n }\n }\n var childNodes = element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n Text.prototype.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row < this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n Text.prototype.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n var text = this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element);\n text[\"charCount\"] = 0; // not to take into account when we are counting columns\n lineEl.appendChild(text);\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n Text.prototype.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"\" : \"\";\n parent.appendChild(overflowEl);\n };\n Text.prototype.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n Text.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n }\n Cursor.prototype.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n Cursor.prototype.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n Cursor.prototype.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n Cursor.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Cursor.prototype.setSession = function (session) {\n this.session = session;\n };\n Cursor.prototype.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n Cursor.prototype.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n Cursor.prototype.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n Cursor.prototype.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = /**@this{Cursor}*/ function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n Cursor.prototype.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n Cursor.prototype.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n Cursor.prototype.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n Cursor.prototype.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n Cursor.prototype.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n function Scrollbar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n }\n Scrollbar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n _this.width = dom.scrollbarWidth(parent.ownerDocument);\n _this.inner.style.width =\n _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.height = renderer.$scrollbarWidth;\n _this.inner.style.height =\n _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n return _this;\n }\n HScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n HScrollBar.prototype.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n function ScrollBar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n ScrollBar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n _this.parent = parent;\n _this.width = _this.VScrollWidth;\n _this.renderer = renderer;\n _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n VScrollBar.prototype.getHeight = function () {\n return this.height;\n };\n VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n VScrollBar.prototype.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.scrollWidth = 0;\n _this.height = _this.HScrollHeight;\n _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n _this.renderer = renderer;\n return _this;\n }\n HScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n HScrollBar.prototype.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n }\n RenderLoop.prototype.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n RenderLoop.prototype.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n function FontMetrics(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n }\n FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n FontMetrics.prototype.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n FontMetrics.prototype.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n FontMetrics.prototype.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n FontMetrics.prototype.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n FontMetrics.prototype.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n FontMetrics.prototype.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n FontMetrics.prototype.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n FontMetrics.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n FontMetrics.prototype.$getZoom = function (element) {\n if (!element || !element.parentElement)\n return 1;\n return (Number(window.getComputedStyle(element)[\"zoom\"]) || 1) * this.$getZoom(element.parentElement);\n };\n FontMetrics.prototype.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n padding: 3px 4px;\\n position: absolute;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre-wrap;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n overflow: auto;\\n max-width: min(33em, 66vw);\\n overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget, .ace_custom-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_custom-widget {\\n background: none;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n position: relative;\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n z-index: 1;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n}\\n\\n.ace_ghost_text_container > div {\\n white-space: pre;\\n}\\n\\n.ghost_text_line_wrapped::after {\\n content: \\\"\\u21A9\\\";\\n position: absolute;\\n}\\n\\n.ace_lineWidgetContainer.ace_ghost_text {\\n margin: 0px 4px\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}\\n\\n.ace_hidden_token {\\n display: none;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n function Decorator(scrollbarV, renderer) {\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\",\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\",\n };\n this.setScrollBarV(scrollbarV);\n }\n Decorator.prototype.$createCanvas = function () {\n this.canvas = dom.createElement(\"canvas\");\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = \"7\";\n this.canvas.style.position = \"absolute\";\n };\n Decorator.prototype.setScrollBarV = function (scrollbarV) {\n this.$createCanvas();\n this.scrollbarV = scrollbarV;\n scrollbarV.element.appendChild(this.canvas);\n this.setDimensions();\n };\n Decorator.prototype.$updateDecorators = function (config) {\n if (typeof this.canvas.getContext !== \"function\") {\n return;\n }\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n this.setDimensions(config);\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item[\"priority\"] = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var offset1 = this.getVerticalOffsetForRow(row);\n var offset2 = offset1 + this.lineHeight;\n var y1 = Math.round(this.heightRatio * offset1);\n var y2 = Math.round(this.heightRatio * offset2);\n var ycenter = Math.round((y1 + y2) / 2);\n var halfHeight = (y2 - ycenter);\n if (halfHeight < this.halfMinDecorationHeight) {\n halfHeight = this.halfMinDecorationHeight;\n }\n if (ycenter - halfHeight < 0) {\n ycenter = halfHeight;\n }\n if (ycenter + halfHeight > this.canvasHeight) {\n ycenter = this.canvasHeight - halfHeight;\n }\n var from = ycenter - halfHeight;\n var to = ycenter + halfHeight;\n var zoneHeight = to - from;\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.getVerticalOffsetForRow = function (row) {\n row = row | 0;\n var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight;\n return offset;\n };\n Decorator.prototype.setDimensions = function (config) {\n config = config || this.renderer.layerConfig;\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n this.canvasWidth = this.scrollbarV.width || this.canvasWidth;\n this.setZoneWidth();\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n if (this.maxHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n };\n Decorator.prototype.setZoneWidth = function () {\n this.oneZoneWidth = this.canvasWidth;\n };\n Decorator.prototype.destroy = function () {\n this.canvas.parentNode.removeChild(this.canvas);\n };\n return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar isTextToken = require(\"./layer/text_util\").isTextToken;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n function VirtualRenderer(container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n this.$addResizeObserver();\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n }\n VirtualRenderer.prototype.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n VirtualRenderer.prototype.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n VirtualRenderer.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n VirtualRenderer.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n VirtualRenderer.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n VirtualRenderer.prototype.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n VirtualRenderer.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n VirtualRenderer.prototype.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!height && this.$maxLines && this.lineHeight > 1) {\n if (!el.style.height || el.style.height == \"0px\") {\n el.style.height = \"1px\";\n height = el.clientHeight || el.scrollHeight;\n }\n }\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (this.$resizeTimer)\n this.$resizeTimer.cancel();\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n VirtualRenderer.prototype.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n VirtualRenderer.prototype.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n VirtualRenderer.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n VirtualRenderer.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n VirtualRenderer.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n this.setOption(\"printMarginColumn\", printMarginColumn);\n };\n VirtualRenderer.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n VirtualRenderer.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n VirtualRenderer.prototype.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n VirtualRenderer.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n VirtualRenderer.prototype.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n VirtualRenderer.prototype.getContainerElement = function () {\n return this.container;\n };\n VirtualRenderer.prototype.getMouseEventTarget = function () {\n return this.scroller;\n };\n VirtualRenderer.prototype.getTextAreaContainer = function () {\n return this.container;\n };\n VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n VirtualRenderer.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n VirtualRenderer.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n VirtualRenderer.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n VirtualRenderer.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n VirtualRenderer.prototype.freeze = function () {\n this.$frozen = true;\n };\n VirtualRenderer.prototype.unfreeze = function () {\n this.$frozen = false;\n };\n VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n if (this.enableKeyboardAccessibility)\n this.scroller.className += this.keyboardFocusClassName;\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n VirtualRenderer.prototype.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n VirtualRenderer.prototype.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1) {\n this.$autosize();\n hideScrollbars = size.height <= 2 * this.lineHeight;\n }\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n if (offset < 0 && firstRowScreen > 0) {\n firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight));\n offset = this.scrollTop - firstRowScreen * lineHeight;\n }\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n VirtualRenderer.prototype.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n VirtualRenderer.prototype.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n VirtualRenderer.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n VirtualRenderer.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n this._rows = rows;\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n VirtualRenderer.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n VirtualRenderer.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var newLeft = pos.left;\n var newTop = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n if (this.$scrollAnimation) {\n this.$stopAnimation = true;\n }\n var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (currentTop + topMargin > newTop) {\n if (offset && currentTop + topMargin > newTop + this.lineHeight)\n newTop -= offset * this.$size.scrollerHeight;\n if (newTop === 0)\n newTop = -this.scrollMargin.top;\n this.session.setScrollTop(newTop);\n }\n else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n newTop += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var currentLeft = this.scrollLeft;\n var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n if (newLeft - twoCharsWidth < currentLeft) {\n newLeft -= twoCharsWidth;\n if (newLeft < this.$padding + twoCharsWidth) {\n newLeft = -this.scrollMargin.left;\n }\n this.session.setScrollLeft(newLeft);\n }\n else {\n newLeft += twoCharsWidth;\n if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n }\n };\n VirtualRenderer.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n VirtualRenderer.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n VirtualRenderer.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n VirtualRenderer.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n VirtualRenderer.prototype.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n function endAnimation() {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n _self.$stopAnimation = false;\n callback && callback();\n }\n this.$timer = setInterval(function () {\n if (_self.$stopAnimation) {\n endAnimation();\n return;\n }\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n endAnimation();\n }\n }, 10);\n };\n VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n VirtualRenderer.prototype.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n VirtualRenderer.prototype.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n VirtualRenderer.prototype.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n VirtualRenderer.prototype.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n VirtualRenderer.prototype.setGhostText = function (text, position) {\n var cursor = this.session.selection.cursor;\n var insertPosition = position || { row: cursor.row, column: cursor.column };\n this.removeGhostText();\n var textChunks = this.$calculateWrappedTextChunks(text, insertPosition);\n this.addToken(textChunks[0].text, \"ghost_text\", insertPosition.row, insertPosition.column);\n this.$ghostText = {\n text: text,\n position: {\n row: insertPosition.row,\n column: insertPosition.column\n }\n };\n var widgetDiv = dom.createElement(\"div\");\n if (textChunks.length > 1) {\n var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column);\n var lastLineDiv;\n textChunks.slice(1).forEach(function (el) {\n var chunkDiv = dom.createElement(\"div\");\n var chunkSpan = dom.createElement(\"span\");\n chunkSpan.className = \"ace_ghost_text\";\n if (el.wrapped)\n chunkDiv.className = \"ghost_text_line_wrapped\";\n if (el.text.length === 0)\n el.text = \" \";\n chunkSpan.appendChild(dom.createTextNode(el.text));\n chunkDiv.appendChild(chunkSpan);\n widgetDiv.appendChild(chunkDiv);\n lastLineDiv = chunkDiv;\n });\n hiddenTokens.forEach(function (token) {\n var element = dom.createElement(\"span\");\n if (!isTextToken(token.type))\n element.className = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n element.appendChild(dom.createTextNode(token.value));\n lastLineDiv.appendChild(element);\n });\n this.$ghostTextWidget = {\n el: widgetDiv,\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text_container\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n var el = this.container;\n var height = el.getBoundingClientRect().height;\n var ghostTextHeight = textChunks.length * this.lineHeight;\n var fitsY = ghostTextHeight < (height - pixelPosition.top);\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textChunks.length - 1) * this.lineHeight);\n }\n else {\n this.scrollToRow(insertPosition.row);\n }\n }\n };\n VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth) - 2;\n limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small\n var textLines = text.split(/\\r?\\n/);\n var textChunks = [];\n for (var i = 0; i < textLines.length; i++) {\n var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column);\n var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize);\n if (wrapSplits.length > 0) {\n var start = 0;\n wrapSplits.push(textLines[i].length);\n for (var j = 0; j < wrapSplits.length; j++) {\n var textSlice = textLines[i].slice(start, wrapSplits[j]);\n textChunks.push({ text: textSlice, wrapped: true });\n start = wrapSplits[j];\n }\n }\n else {\n textChunks.push({ text: textLines[i], wrapped: false });\n }\n }\n return textChunks;\n };\n VirtualRenderer.prototype.removeGhostText = function () {\n if (!this.$ghostText)\n return;\n var position = this.$ghostText.position;\n this.removeExtraToken(position.row, position.column);\n if (this.$ghostTextWidget) {\n this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n this.$ghostTextWidget = null;\n }\n this.$ghostText = null;\n };\n VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null || !tokens.length) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) {\n var tokens = this.session.getTokens(row);\n var l = 0;\n var hasPassedCursor = false;\n var hiddenTokens = [];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (token.type === \"ghost_text\")\n continue;\n if (hasPassedCursor) {\n hiddenTokens.push({ type: token.type, value: token.value });\n token.type = \"hidden_token\";\n continue;\n }\n if (l === column) {\n hasPassedCursor = true;\n }\n }\n this.updateLines(row, row);\n return hiddenTokens;\n };\n VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n this.session.bgTokenizer.lines[row] = null;\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n if (useragent.isSafari && _self.scroller) {\n _self.scroller.style.background = \"red\";\n _self.scroller.style.background = \"\";\n }\n }\n };\n VirtualRenderer.prototype.getTheme = function () {\n return this.$themeId;\n };\n VirtualRenderer.prototype.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n VirtualRenderer.prototype.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n VirtualRenderer.prototype.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n VirtualRenderer.prototype.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n VirtualRenderer.prototype.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n this.setOption(\"useResizeObserver\", false);\n };\n VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n if (!this.$scrollDecorator) {\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.$scrollDecorator.setScrollBarV(this.scrollBarV);\n this.$scrollDecorator.$updateDecorators();\n }\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n VirtualRenderer.prototype.$addResizeObserver = function () {\n if (!window.ResizeObserver || this.$resizeObserver)\n return;\n var self = this;\n this.$resizeTimer = lang.delayedCall(function () {\n if (!self.destroyed)\n self.onResize();\n }, 50);\n this.$resizeObserver = new window.ResizeObserver(function (e) {\n var w = e[0].contentRect.width;\n var h = e[0].contentRect.height;\n if (Math.abs(self.$size.width - w) > 1\n || Math.abs(self.$size.height - h) > 1) {\n self.$resizeTimer.delay();\n }\n else {\n self.$resizeTimer.cancel();\n }\n });\n this.$resizeObserver.observe(this.container);\n };\n return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (value) {\n if (!value && this.$resizeObserver) {\n this.$resizeObserver.disconnect();\n this.$resizeTimer.cancel();\n this.$resizeTimer = this.$resizeObserver = null;\n }\n else if (value && !this.$resizeObserver) {\n this.$addResizeObserver();\n }\n }\n },\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n useSvgGutterIcons: {\n set: function (value) {\n this.$gutterLayer.$useSvgGutterIcons = value;\n },\n initialValue: false\n },\n showFoldedAnnotations: {\n set: function (value) {\n this.$gutterLayer.$showFoldedAnnotations = value;\n },\n initialValue: false\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker.onerror = function(e) {\n e.preventDefault();\n };\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n PlaceHolder.prototype.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n PlaceHolder.prototype.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n PlaceHolder.prototype.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n PlaceHolder.prototype.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n PlaceHolder.prototype.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n PlaceHolder.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n PlaceHolder.prototype.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp_1.start.row;\n range.start.column = tmp_1.start.column;\n range.end.row = tmp_1.end.row;\n range.end.column = tmp_1.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){/**\n * ## Error Marker extension\n *\n * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips\n * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with\n * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity.\n *\n * @module\n */\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n displayText: [nls(\"error-marker.good-state\", \"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n gutterAnno.displayText.forEach(function (annoTextLine, i) {\n el.appendChild(dom.createTextNode(annoTextLine));\n if (i < gutterAnno.displayText.length - 1) {\n el.appendChild(dom.createElement(\"br\"));\n }\n });\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n editor.on(\"destroy\", function () {\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nvar version = exports.config.version;\nexports.version = version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n ","ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\nvar VARIABLES = {\n CURRENT_WORD: function (editor) {\n return editor.session.getTextRange(editor.session.getWordRange());\n },\n SELECTION: function (editor, name, indentation) {\n var text = editor.session.getTextRange();\n if (indentation)\n return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n return text;\n },\n CURRENT_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row);\n },\n PREV_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row - 1);\n },\n LINE_INDEX: function (editor) {\n return editor.getCursorPosition().row;\n },\n LINE_NUMBER: function (editor) {\n return editor.getCursorPosition().row + 1;\n },\n SOFT_TABS: function (editor) {\n return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function (editor) {\n return editor.session.getTabSize();\n },\n CLIPBOARD: function (editor) {\n return clipboard.getText && clipboard.getText();\n },\n FILENAME: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n },\n FILENAME_BASE: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function (editor) {\n return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function (editor) { return \"/not implemented.txt\"; },\n WORKSPACE_NAME: function () { return \"Unknown\"; },\n FULLNAME: function () { return \"Unknown\"; },\n BLOCK_COMMENT_START: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.end || \"\";\n },\n LINE_COMMENT: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.lineCommentStart || \"\";\n },\n CURRENT_YEAR: date.bind(null, { year: \"numeric\" }),\n CURRENT_YEAR_SHORT: date.bind(null, { year: \"2-digit\" }),\n CURRENT_MONTH: date.bind(null, { month: \"numeric\" }),\n CURRENT_MONTH_NAME: date.bind(null, { month: \"long\" }),\n CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: \"short\" }),\n CURRENT_DATE: date.bind(null, { day: \"2-digit\" }),\n CURRENT_DAY_NAME: date.bind(null, { weekday: \"long\" }),\n CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: \"short\" }),\n CURRENT_HOUR: date.bind(null, { hour: \"2-digit\", hour12: false }),\n CURRENT_MINUTE: date.bind(null, { minute: \"2-digit\" }),\n CURRENT_SECOND: date.bind(null, { second: \"2-digit\" })\n};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = /** @class */ (function () {\n function SnippetManager() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.variables = VARIABLES;\n }\n SnippetManager.prototype.getTokenizer = function () {\n return SnippetManager[\"$tokenizer\"] || this.createTokenizer();\n };\n SnippetManager.prototype.createTokenizer = function () {\n function TabstopToken(str) {\n str = str.substr(1);\n if (/^\\d+$/.test(str))\n return [{ tabstopId: parseInt(str, 10) }];\n return [{ text: str }];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n var formatMatcher = {\n regex: \"/(\" + escape(\"/\") + \"+)/\",\n onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.fmtString = true;\n ts.guard = val.slice(1, -1);\n ts.flag = \"\";\n return \"\";\n },\n next: \"formatString\"\n };\n SnippetManager[\"$tokenizer\"] = new Tokenizer({\n start: [\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n }\n else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n }\n return [val];\n } },\n { regex: /}/, onMatch: function (val, state, stack) {\n return [stack.length ? stack.shift() : val];\n } },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken },\n { regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function (str, state, stack) {\n var t = TabstopToken(str.substr(1));\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\" },\n { regex: /\\n/, token: \"newline\", merge: false }\n ],\n snippetVar: [\n { regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function (val, state, stack) {\n var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n return operator.length == 2 ? operator[1] : \"\\x00\";\n }).split(\"\\x00\").map(function (value) {\n return { value: value };\n });\n stack[0].choices = choices;\n return [choices[0]];\n }, next: \"start\" },\n formatMatcher,\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\" }\n ],\n formatString: [\n { regex: /:/, onMatch: function (val, state, stack) {\n if (stack.length && stack[0].expectElse) {\n stack[0].expectElse = false;\n stack[0].ifEnd = { elseEnd: stack[0] };\n return [stack[0].ifEnd];\n }\n return \":\";\n } },\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length)\n val = ch;\n else if (\"`$\\\\\".indexOf(ch) != -1)\n val = ch;\n else if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\t\";\n else if (\"ulULE\".indexOf(ch) != -1)\n val = { changeCase: ch, local: ch > \"a\" };\n return [val];\n } },\n { regex: \"/\\\\w*}\", onMatch: function (val, state, stack) {\n var next = stack.shift();\n if (next)\n next.flag = val.slice(1, -1);\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: function (val, state, stack) {\n return [{ text: val.slice(1) }];\n } },\n { regex: /\\${\\w+/, onMatch: function (val, state, stack) {\n var token = { text: val.slice(2) };\n stack.unshift(token);\n return [token];\n }, next: \"formatStringVar\" },\n { regex: /\\n/, token: \"newline\", merge: false },\n { regex: /}/, onMatch: function (val, state, stack) {\n var next = stack.shift();\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" }\n ],\n formatStringVar: [\n { regex: /:\\/\\w+}/, onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.formatFunction = val.slice(2, -1);\n return [stack.shift()];\n }, next: \"formatString\" },\n formatMatcher,\n { regex: /:[\\?\\-+]?/, onMatch: function (val, state, stack) {\n if (val[1] == \"+\")\n stack[0].ifEnd = stack[0];\n if (val[1] == \"?\")\n stack[0].expectElse = true;\n }, next: \"formatString\" },\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\" }\n ]\n });\n return SnippetManager[\"$tokenizer\"];\n };\n SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n return x.value || x;\n });\n };\n SnippetManager.prototype.getVariableValue = function (editor, name, indentation) {\n if (/^\\d+$/.test(name))\n return (this.variables.__ || {})[name] || \"\";\n if (/^[A-Z]\\d+$/.test(name))\n return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n name = name.replace(/^TM_/, \"\");\n if (!this.variables.hasOwnProperty(name))\n return \"\";\n var value = this.variables[name];\n if (typeof value == \"function\")\n value = this.variables[name](editor, name, indentation);\n return value == null ? \"\" : value;\n };\n SnippetManager.prototype.tmStrFormat = function (str, ch, editor) {\n if (!ch.fmt)\n return str;\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n var _self = this;\n var formatted = str.replace(re, function () {\n var oldArgs = _self.variables.__;\n _self.variables.__ = [].slice.call(arguments);\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n }\n else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n }\n else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n }\n else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n _self.variables.__ = oldArgs;\n return fmtParts.join(\"\");\n });\n return formatted;\n };\n SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) {\n if (ch.formatFunction == \"upcase\")\n return str.toUpperCase();\n if (ch.formatFunction == \"downcase\")\n return str.toLowerCase();\n return str;\n };\n SnippetManager.prototype.resolveVariables = function (snippet, editor) {\n var result = [];\n var indentation = \"\";\n var afterNewLine = true;\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n if (ch == \"\\n\") {\n afterNewLine = true;\n indentation = \"\";\n }\n else if (afterNewLine) {\n indentation = /^\\t*/.exec(ch)[0];\n afterNewLine = /\\S/.test(ch);\n }\n continue;\n }\n if (!ch)\n continue;\n afterNewLine = false;\n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1)\n j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\n }\n if (ch.text) {\n var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n if (ch.fmtString)\n value = this.tmStrFormat(value, ch, editor);\n if (ch.formatFunction)\n value = this.tmFormatFunction(value, ch, editor);\n if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n }\n else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n }\n else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n }\n else if (ch.tabstopId != null) {\n result.push(ch);\n }\n else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) {\n var processedSnippet = processSnippetText.call(this, editor, snippetText);\n return processedSnippet.text;\n };\n SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var processedSnippet = processSnippetText.call(this, editor, snippetText, options);\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, processedSnippet.text);\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId);\n };\n SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText, options);\n editor.forEachSelection(function () {\n self.insertSnippetForSelection(editor, snippetText, options);\n }, null, { keepOrder: true });\n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n SnippetManager.prototype.$getScope = function (editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp)\n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n return scope;\n };\n SnippetManager.prototype.getActiveScopes = function (editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n SnippetManager.prototype.expandWithTab = function (editor, options) {\n var self = this;\n var result = editor.forEachSelection(function () {\n return self.expandSnippetForSelection(editor, options);\n }, null, { keepOrder: true });\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n SnippetManager.prototype.expandSnippetForSelection = function (editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n SnippetManager.prototype.register = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n if (!snippets)\n snippets = [];\n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n }\n else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n if (s.prefix)\n s.tabTrigger = s.prefix;\n if (!s.content && s.body)\n s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n }\n else {\n Object.keys(snippets).forEach(function (key) {\n addSnippet(snippets[key]);\n });\n }\n this._signal(\"registerSnippets\", { scope: scope });\n };\n SnippetManager.prototype.unregister = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope || scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope || scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n SnippetManager.prototype.parseSnippetFile = function (str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], /**@type{Snippet}*/ snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n }\n catch (e) { }\n }\n if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n }\n else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n }\n else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n }\n else if (key) {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n SnippetManager.prototype.getSnippetByName = function (name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n return SnippetManager;\n}());\noop.implement(SnippetManager.prototype, EventEmitter);\nvar processSnippetText = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function (x) {\n if (x == \"\\n\" && !options.excludeExtraIndent)\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function (p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n ts.parents = {};\n }\n if (ts.indexOf(p) !== -1)\n return;\n if (p.choices && !ts.choices)\n ts.choices = p.choices;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function (t) { return typeof t === \"object\"; });\n if (isNested && !ts.value) {\n ts.value = value;\n }\n else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function (ts) { ts.length = 0; });\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || { tabstopId: p.tabstopId };\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var ts = tabstops[id];\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p) {\n delete expanding[id];\n Object.keys(expanding).forEach(function (parentId) {\n ts.parents[parentId] = true;\n });\n }\n continue;\n }\n expanding[id] = p;\n var value = ts.value;\n if (typeof value !== \"string\")\n value = copyValue(value);\n else if (p.fmt)\n value = this.tmStrFormat(value, p, editor);\n tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function (t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1) {\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n }\n else\n column += t.length;\n text += t;\n }\n else if (t) {\n if (!t.start)\n t.start = { row: row, column: column };\n else\n t.end = { row: row, column: column };\n }\n });\n return {\n text: text,\n tabstops: tabstops,\n tokens: tokens\n };\n};\nvar TabstopManager = /** @class */ (function () {\n function TabstopManager(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n }\n TabstopManager.prototype.attach = function (editor) {\n this.$openTabstops = null;\n this.selectedTabstop = null;\n this.editor = editor;\n this.session = editor.session;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n TabstopManager.prototype.detach = function () {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges.length = 0;\n this.tabstops.length = 0;\n this.selectedTabstop = null;\n this.editor.off(\"change\", this.$onChange);\n this.editor.off(\"changeSelection\", this.$onChangeSelection);\n this.editor.off(\"changeSession\", this.$onChangeSession);\n this.editor.commands.off(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.session = null;\n this.editor = null;\n };\n TabstopManager.prototype.onChange = function (delta) {\n var isRemove = delta.action[0] == \"r\";\n var selectedTabstop = this.selectedTabstop || {};\n var parents = selectedTabstop.parents || {};\n var tabstops = this.tabstops.slice();\n for (var i = 0; i < tabstops.length; i++) {\n var ts = tabstops[i];\n var active = ts == selectedTabstop || parents[ts.index];\n ts.rangeList.$bias = active ? 0 : 1;\n if (delta.action == \"remove\" && ts !== selectedTabstop) {\n var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n for (var j = 0; j < toRemove.length; j++)\n this.removeRange(toRemove[j]);\n }\n ts.rangeList.$onChange(delta);\n }\n var session = this.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n this.detach();\n };\n TabstopManager.prototype.updateLinkedFields = function () {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n return;\n this.$inChange = true;\n var session = this.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = 0; i < ts.length; i++) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var original = range.original;\n var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n TabstopManager.prototype.onAfterExec = function (e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n TabstopManager.prototype.onChangeSelection = function () {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = 0; i < this.ranges.length; i++) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n TabstopManager.prototype.onChangeSession = function () {\n this.detach();\n };\n TabstopManager.prototype.tabNext = function (dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n this.updateTabstopMarkers();\n if (index === 0) {\n this.detach();\n }\n };\n TabstopManager.prototype.selectTabstop = function (index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (ts.choices)\n range.cursor = range.start;\n if (!this.editor.inVirtualSelectionMode) {\n var sel = this.editor.multiSelect;\n sel.toSingleRange(range);\n for (var i = 0; i < ts.length; i++) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n }\n else {\n this.editor.selection.fromOrientedRange(range);\n }\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n if (this.selectedTabstop && this.selectedTabstop.choices)\n this.editor.execCommand(\"startAutocomplete\", { matches: this.selectedTabstop.choices });\n };\n TabstopManager.prototype.addTabstops = function (tabstops, start, end) {\n var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n var snippetId = this.snippetId = (this.snippetId || 0) + 1;\n tabstops.forEach(function (ts, index) {\n var dest = this.$openTabstops[index] || ts;\n dest.snippetId = snippetId;\n for (var i = 0; i < ts.length; i++) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString || (dest.firstNonLinked && useLink)) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n }\n else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n dest.rangeList = dest.rangeList || new RangeList();\n dest.rangeList.$bias = 0;\n dest.rangeList.addList(dest);\n }, this);\n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n TabstopManager.prototype.addTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n TabstopManager.prototype.removeTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n TabstopManager.prototype.updateTabstopMarkers = function () {\n if (!this.selectedTabstop)\n return;\n var currentSnippetId = this.selectedTabstop.snippetId;\n if (this.selectedTabstop.index === 0) {\n currentSnippetId--;\n }\n this.tabstops.forEach(function (ts) {\n if (ts.snippetId === currentSnippetId)\n this.addTabstopMarkers(ts);\n else\n this.removeTabstopMarkers(ts);\n }, this);\n };\n TabstopManager.prototype.removeRange = function (range) {\n var i = range.tabstop.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1)\n this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n this.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n return TabstopManager;\n}());\nTabstopManager.prototype.keyboardHandler = new HashHandler();\nTabstopManager.prototype.keyboardHandler.bindKeys({\n \"Tab\": function (editor) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n return;\n editor.tabstopManager.tabNext(1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Shift-Tab\": function (editor) {\n editor.tabstopManager.tabNext(-1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Esc\": function (editor) {\n editor.tabstopManager.detach();\n }\n});\nvar movePoint = function (point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\ndom.importCssString(\"\\n.ace_snippet-marker {\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n background: rgba(194, 193, 208, 0.09);\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\n position: absolute;\\n}\", \"snippets.css\", false);\nexports.snippetManager = new SnippetManager();\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.insertSnippet = function (content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function (options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\nvar nls = require(\"../config\").nls;\nvar userAgent = require(\"./../lib/useragent\");\nvar getAriaId = function (index) {\n return \"suggest-aria-id:\".concat(index);\n};\nvar popupAriaRole = userAgent.isSafari ? \"menu\" : \"listbox\";\nvar optionAriaRole = userAgent.isSafari ? \"menuitem\" : \"option\";\nvar ariaActiveState = userAgent.isSafari ? \"aria-current\" : \"aria-selected\";\nvar $singleLineEditor = function (el) {\n var renderer = new Renderer(el);\n renderer.$maxLines = 4;\n var editor = new Editor(renderer);\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n editor.$mouseHandler.$focusTimeout = 0;\n editor.$highlightTagPending = true;\n return editor;\n};\nvar AcePopup = /** @class */ (function () {\n function AcePopup(parentNode) {\n var el = dom.createElement(\"div\");\n var popup = $singleLineEditor(el);\n if (parentNode) {\n parentNode.appendChild(el);\n }\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n popup.renderer.$textLayer.element.setAttribute(\"role\", popupAriaRole);\n popup.renderer.$textLayer.element.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.aria-roledescription\", \"Autocomplete suggestions\"));\n popup.renderer.$textLayer.element.setAttribute(\"aria-label\", nls(\"autocomplete.popup.aria-label\", \"Autocomplete suggestions\"));\n popup.renderer.textarea.setAttribute(\"aria-hidden\", \"true\");\n popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n var noop = function () { };\n popup.focus = noop;\n popup.$isFocused = true;\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = \"0\";\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n popup.on(\"mousedown\", function (e) {\n var pos = e.getDocumentPosition();\n popup.selection.moveToPosition(pos);\n selectionMarker.start.row = selectionMarker.end.row = pos.row;\n e.stop();\n });\n var lastMouseEvent;\n var hoverMarker = new Range(-1, 0, -1, Infinity);\n var selectionMarker = new Range(-1, 0, -1, Infinity);\n selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n popup.setSelectOnHover = function (val) {\n if (!val) {\n hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n }\n else if (hoverMarker.id) {\n popup.session.removeMarker(hoverMarker.id);\n hoverMarker.id = null;\n }\n };\n popup.setSelectOnHover(false);\n popup.on(\"mousemove\", function (e) {\n if (!lastMouseEvent) {\n lastMouseEvent = e;\n return;\n }\n if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n return;\n }\n lastMouseEvent = e;\n lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n popup.isMouseOver = true;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (hoverMarker.start.row != row) {\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row);\n }\n });\n popup.renderer.on(\"beforeRender\", function () {\n if (lastMouseEvent && hoverMarker.start.row != -1) {\n lastMouseEvent.$pos = null;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row, true);\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var t = popup.renderer.$textLayer;\n for (var row = t.config.firstRow, l = t.config.lastRow; row <= l; row++) {\n var popupRowElement = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n popupRowElement.setAttribute(\"role\", optionAriaRole);\n popupRowElement.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.item.aria-roledescription\", \"item\"));\n popupRowElement.setAttribute(\"aria-setsize\", popup.data.length);\n popupRowElement.setAttribute(\"aria-describedby\", \"doc-tooltip\");\n popupRowElement.setAttribute(\"aria-posinset\", row + 1);\n var rowData = popup.getData(row);\n if (rowData) {\n var ariaLabel = \"\".concat(rowData.caption || rowData.value).concat(rowData.meta ? \", \".concat(rowData.meta) : '');\n popupRowElement.setAttribute(\"aria-label\", ariaLabel);\n }\n var highlightedSpans = popupRowElement.querySelectorAll(\".ace_completion-highlight\");\n highlightedSpans.forEach(function (span) {\n span.setAttribute(\"role\", \"mark\");\n });\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var row = popup.getRow();\n var t = popup.renderer.$textLayer;\n var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n var el = document.activeElement; // Active element is textarea of main editor\n if (selected !== popup.selectedNode && popup.selectedNode) {\n dom.removeCssClass(popup.selectedNode, \"ace_selected\");\n popup.selectedNode.removeAttribute(ariaActiveState);\n popup.selectedNode.removeAttribute(\"id\");\n }\n el.removeAttribute(\"aria-activedescendant\");\n popup.selectedNode = selected;\n if (selected) {\n var ariaId = getAriaId(row);\n dom.addCssClass(selected, \"ace_selected\");\n selected.id = ariaId;\n t.element.setAttribute(\"aria-activedescendant\", ariaId);\n el.setAttribute(\"aria-activedescendant\", ariaId);\n selected.setAttribute(ariaActiveState, \"true\");\n }\n });\n var hideHoverMarker = function () { setHoverMarker(-1); };\n var setHoverMarker = function (row, suppressRedraw) {\n if (row !== hoverMarker.start.row) {\n hoverMarker.start.row = hoverMarker.end.row = row;\n if (!suppressRedraw)\n popup.session._emit(\"changeBackMarker\");\n popup._emit(\"changeHoverMarker\");\n }\n };\n popup.getHoveredRow = function () {\n return hoverMarker.start.row;\n };\n event.addListener(popup.container, \"mouseout\", function () {\n popup.isMouseOver = false;\n hideHoverMarker();\n });\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\n popup.session.doc.getLength = function () {\n return popup.data.length;\n };\n popup.session.doc.getLine = function (i) {\n var data = popup.data[i];\n if (typeof data == \"string\")\n return data;\n return (data && data.value) || \"\";\n };\n var bgTokenizer = popup.session.bgTokenizer;\n bgTokenizer.$tokenizeRow = function (row) {\n var data = popup.data[row];\n var tokens = [];\n if (!data)\n return tokens;\n if (typeof data == \"string\")\n data = { value: data };\n var caption = data.caption || data.value || data.name;\n function addToken(value, className) {\n value && tokens.push({\n type: (data.className || \"\") + (className || \"\"),\n value: value\n });\n }\n var lower = caption.toLowerCase();\n var filterText = (popup.filterText || \"\").toLowerCase();\n var lastIndex = 0;\n var lastI = 0;\n for (var i = 0; i <= filterText.length; i++) {\n if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n var sub = filterText.slice(lastI, i);\n lastI = i;\n var index = lower.indexOf(sub, lastIndex);\n if (index == -1)\n continue;\n addToken(caption.slice(lastIndex, index), \"\");\n lastIndex = index + sub.length;\n addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n }\n }\n addToken(caption.slice(lastIndex, caption.length), \"\");\n tokens.push({ type: \"completion-spacer\", value: \" \" });\n if (data.meta)\n tokens.push({ type: \"completion-meta\", value: data.meta });\n if (data.message)\n tokens.push({ type: \"completion-message\", value: data.message });\n return tokens;\n };\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\n popup.session.$computeWidth = function () {\n return this.screenWidth = 0;\n };\n popup.isOpen = false;\n popup.isTopdown = false;\n popup.autoSelect = true;\n popup.filterText = \"\";\n popup.isMouseOver = false;\n popup.data = [];\n popup.setData = function (list, filterText) {\n popup.filterText = filterText || \"\";\n popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n popup.data = list || [];\n popup.setRow(0);\n };\n popup.getData = function (row) {\n return popup.data[row];\n };\n popup.getRow = function () {\n return selectionMarker.start.row;\n };\n popup.setRow = function (line) {\n line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line));\n if (selectionMarker.start.row != line) {\n popup.selection.clearSelection();\n selectionMarker.start.row = selectionMarker.end.row = line || 0;\n popup.session._emit(\"changeBackMarker\");\n popup.moveCursorTo(line || 0, 0);\n if (popup.isOpen)\n popup._signal(\"select\");\n }\n };\n popup.on(\"changeSelection\", function () {\n if (popup.isOpen)\n popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\n });\n popup.hide = function () {\n this.container.style.display = \"none\";\n popup.anchorPos = null;\n popup.anchor = null;\n if (popup.isOpen) {\n popup.isOpen = false;\n this._signal(\"hide\");\n }\n };\n popup.tryShow = function (pos, lineHeight, anchor, forceShow) {\n if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor &&\n popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left &&\n popup.anchor === anchor) {\n return true;\n }\n var el = this.container;\n var scrollBarSize = this.renderer.scrollBar.width || 10;\n var screenHeight = window.innerHeight - scrollBarSize;\n var screenWidth = window.innerWidth - scrollBarSize;\n var renderer = this.renderer;\n var maxH = renderer.$maxLines * lineHeight * 1.4;\n var dims = { top: 0, bottom: 0, left: 0 };\n var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight;\n var spaceAbove = pos.top - 3 * this.$borderSize;\n if (!anchor) {\n if (spaceAbove <= spaceBelow || spaceBelow >= maxH) {\n anchor = \"bottom\";\n }\n else {\n anchor = \"top\";\n }\n }\n if (anchor === \"top\") {\n dims.bottom = pos.top - this.$borderSize;\n dims.top = dims.bottom - maxH;\n }\n else if (anchor === \"bottom\") {\n dims.top = pos.top + lineHeight + this.$borderSize;\n dims.bottom = dims.top + maxH;\n }\n var fitsX = dims.top >= 0 && dims.bottom <= screenHeight;\n if (!forceShow && !fitsX) {\n return false;\n }\n if (!fitsX) {\n if (anchor === \"top\") {\n renderer.$maxPixelHeight = spaceAbove;\n }\n else {\n renderer.$maxPixelHeight = spaceBelow;\n }\n }\n else {\n renderer.$maxPixelHeight = null;\n }\n el.style.display = \"\";\n var rootRect = el.offsetParent && el.offsetParent.getBoundingClientRect();\n if (anchor === \"top\") {\n el.style.top = \"\";\n el.style.bottom = (screenHeight + scrollBarSize - dims.bottom)\n - (rootRect ? screenHeight + scrollBarSize - rootRect.bottom : 0) + \"px\";\n popup.isTopdown = false;\n }\n else {\n el.style.top = (dims.top - (rootRect ? rootRect.top : 0)) + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n el.style.left = (left - (rootRect ? rootRect.left : 0)) + \"px\";\n el.style.right = \"\";\n if (!popup.isOpen) {\n popup.isOpen = true;\n this._signal(\"show\");\n lastMouseEvent = null;\n }\n popup.anchorPos = pos;\n popup.anchor = anchor;\n return true;\n };\n popup.show = function (pos, lineHeight, topdownOnly) {\n this.tryShow(pos, lineHeight, topdownOnly ? \"bottom\" : undefined, true);\n };\n popup.goTo = function (where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n switch (where) {\n case \"up\":\n row = row <= 0 ? max : row - 1;\n break;\n case \"down\":\n row = row >= max ? -1 : row + 1;\n break;\n case \"start\":\n row = 0;\n break;\n case \"end\":\n row = max;\n break;\n }\n this.setRow(row);\n };\n popup.getTextLeftOffset = function () {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n return popup;\n }\n return AcePopup;\n}());\ndom.importCssString(\"\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #CAD6FA;\\n z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid #abbffe;\\n margin-top: -1px;\\n background: rgba(233,233,253,0.4);\\n position: absolute;\\n z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid rgba(109, 150, 13, 0.8);\\n background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n opacity: 0.5;\\n margin-left: 0.9em;\\n}\\n.ace_completion-message {\\n margin-left: 0.9em;\\n color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n width: 300px;\\n z-index: 200000;\\n border: 1px lightgray solid;\\n position: absolute;\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n line-height: 1.4;\\n background: #fefefe;\\n color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n border: 1px #484747 solid;\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n line-height: 1.4;\\n background: #25282c;\\n color: #c1c1c1;\\n}\\n.ace_autocomplete .ace_text-layer {\\n width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n display: flex;\\n align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n min-width: 0;\\n flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n flex: 0 1 auto;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0px;\\n height: 2px;\\n width: 8%;\\n background: blue;\\n z-index: 100;\\n animation: ace_progress 3s infinite linear;\\n animation-delay: 300ms;\\n transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n 0% { transform: translateX(-100%) scaleX(1) }\\n 50% { transform: translateX(625%) scaleX(2) } \\n 100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n .ace_autocomplete.ace_loading:after {\\n transform: translateX(625%) scaleX(2);\\n animation: none;\\n }\\n}\\n\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\nexports.getAriaId = getAriaId;\n\n});\n\nace.define(\"ace/autocomplete/inline_screenreader\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar AceInlineScreenReader = /** @class */ (function () {\n function AceInlineScreenReader(editor) {\n this.editor = editor;\n this.screenReaderDiv = document.createElement(\"div\");\n this.screenReaderDiv.classList.add(\"ace_screenreader-only\");\n this.editor.container.appendChild(this.screenReaderDiv);\n }\n AceInlineScreenReader.prototype.setScreenReaderContent = function (content) {\n if (!this.popup && this.editor.completer && /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup) {\n this.popup = /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup;\n this.popup.renderer.on(\"afterRender\", function () {\n var row = this.popup.getRow();\n var t = this.popup.renderer.$textLayer;\n var selected = t.element.childNodes[row - t.config.firstRow];\n if (selected) {\n var idString = \"doc-tooltip \";\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n idString += \"ace-inline-screenreader-line-\".concat(lineIndex, \" \");\n }\n selected.setAttribute(\"aria-describedby\", idString);\n }\n }.bind(this));\n }\n while (this.screenReaderDiv.firstChild) {\n this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);\n }\n this._lines = content.split(/\\r\\n|\\r|\\n/);\n var codeElement = this.createCodeBlock();\n this.screenReaderDiv.appendChild(codeElement);\n };\n AceInlineScreenReader.prototype.destroy = function () {\n this.screenReaderDiv.remove();\n };\n AceInlineScreenReader.prototype.createCodeBlock = function () {\n var container = document.createElement(\"pre\");\n container.setAttribute(\"id\", \"ace-inline-screenreader\");\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n var codeElement = document.createElement(\"code\");\n codeElement.setAttribute(\"id\", \"ace-inline-screenreader-line-\".concat(lineIndex));\n var line = document.createTextNode(this._lines[lineIndex]);\n codeElement.appendChild(line);\n container.appendChild(codeElement);\n }\n return container;\n };\n return AceInlineScreenReader;\n}());\nexports.AceInlineScreenReader = AceInlineScreenReader;\n\n});\n\nace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete/inline_screenreader\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar AceInlineScreenReader = require(\"./inline_screenreader\").AceInlineScreenReader;\nvar AceInline = /** @class */ (function () {\n function AceInline() {\n this.editor = null;\n }\n AceInline.prototype.show = function (editor, completion, prefix) {\n prefix = prefix || \"\";\n if (editor && this.editor && this.editor !== editor) {\n this.hide();\n this.editor = null;\n this.inlineScreenReader = null;\n }\n if (!editor || !completion) {\n return false;\n }\n if (!this.inlineScreenReader) {\n this.inlineScreenReader = new AceInlineScreenReader(editor);\n }\n var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value;\n if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) {\n return false;\n }\n this.editor = editor;\n this.inlineScreenReader.setScreenReaderContent(displayText);\n displayText = displayText.slice(prefix.length);\n if (displayText === \"\") {\n editor.removeGhostText();\n }\n else {\n editor.setGhostText(displayText);\n }\n return true;\n };\n AceInline.prototype.isOpen = function () {\n if (!this.editor) {\n return false;\n }\n return !!this.editor.renderer.$ghostText;\n };\n AceInline.prototype.hide = function () {\n if (!this.editor) {\n return false;\n }\n this.editor.removeGhostText();\n return true;\n };\n AceInline.prototype.destroy = function () {\n this.hide();\n this.editor = null;\n if (this.inlineScreenReader) {\n this.inlineScreenReader.destroy();\n this.inlineScreenReader = null;\n }\n };\n return AceInline;\n}());\nexports.AceInline = AceInline;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.parForEach = function (array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0)\n callback();\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function (result, err) {\n completed++;\n if (completed === arLength)\n callback(result, err);\n });\n }\n};\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\nexports.retrievePrecedingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos - 1; i >= 0; i--) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf.reverse().join(\"\");\n};\nexports.retrieveFollowingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf;\n};\nexports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function (completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function (identifierRegex) {\n if (!prefix && identifierRegex)\n prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\nexports.triggerAutocomplete = function (editor, previousChar) {\n var previousChar = previousChar == null\n ? editor.session.getPrecedingCharacter()\n : previousChar;\n return editor.completers.some(function (completer) {\n if (completer.triggerCharacters && Array.isArray(completer.triggerCharacters)) {\n return completer.triggerCharacters.includes(previousChar);\n }\n });\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/inline\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\",\"ace/lib/event\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar AceInline = require(\"./autocomplete/inline\").AceInline;\nvar getAriaId = require(\"./autocomplete/popup\").getAriaId;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\nvar event = require(\"./lib/event\");\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar destroyCompleter = function (e, editor) {\n editor.completer && editor.completer.destroy();\n};\nvar Autocomplete = /** @class */ (function () {\n function Autocomplete() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.autoShown = false;\n this.exactMatch = false;\n this.inlineEnabled = false;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n this.parentNode = null;\n this.setSelectOnHover = false;\n this.hasSeen = new Set();\n this.showLoadingState = false;\n this.stickySelectionDelay = 500;\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n this.onLayoutChange = this.onLayoutChange.bind(this);\n this.changeTimer = lang.delayedCall(function () {\n this.updateCompletions(true);\n }.bind(this));\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50);\n this.stickySelectionTimer = lang.delayedCall(function () {\n this.stickySelection = true;\n }.bind(this), this.stickySelectionDelay);\n this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () {\n var initialPosition = this.completionProvider && this.completionProvider.initialPosition;\n if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0)\n return;\n this.completions = new FilteredList(Autocomplete.completionsForLoading);\n this.openPopup(this.editor, initialPosition.prefix, false);\n this.popup.renderer.setStyle(\"ace_loading\", true);\n }.bind(this), this.stickySelectionDelay);\n }\n Object.defineProperty(Autocomplete, \"completionsForLoading\", {\n get: function () {\n return [{\n caption: config.nls(\"autocomplete.loading\", \"Loading...\"),\n value: \"\"\n }];\n },\n enumerable: false,\n configurable: true\n });\n Autocomplete.prototype.$init = function () {\n this.popup = new AcePopup(this.parentNode || document.body || document.documentElement);\n this.popup.on(\"click\", function (e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.$onPopupShow.bind(this));\n this.popup.on(\"hide\", this.$onHidePopup.bind(this));\n this.popup.on(\"select\", this.$onPopupChange.bind(this));\n event.addListener(this.popup.container, \"mouseout\", this.mouseOutListener.bind(this));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n this.popup.renderer.on(\"afterRender\", this.$onPopupRender.bind(this));\n return this.popup;\n };\n Autocomplete.prototype.$initInline = function () {\n if (!this.inlineEnabled || this.inlineRenderer)\n return;\n this.inlineRenderer = new AceInline();\n return this.inlineRenderer;\n };\n Autocomplete.prototype.getPopup = function () {\n return this.popup || this.$init();\n };\n Autocomplete.prototype.$onHidePopup = function () {\n if (this.inlineRenderer) {\n this.inlineRenderer.hide();\n }\n this.hideDocTooltip();\n this.stickySelectionTimer.cancel();\n this.popupTimer.cancel();\n this.stickySelection = false;\n };\n Autocomplete.prototype.$seen = function (completion) {\n if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === \"function\") {\n completion.completer.onSeen(this.editor, completion);\n this.hasSeen.add(completion);\n }\n };\n Autocomplete.prototype.$onPopupChange = function (hide) {\n if (this.inlineRenderer && this.inlineEnabled) {\n var completion = hide ? null : this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n if (this.popup.isMouseOver && this.setSelectOnHover) {\n this.tooltipTimer.call(null, null);\n return;\n }\n this.popupTimer.schedule();\n this.tooltipTimer.schedule();\n }\n else {\n this.popupTimer.call(null, null);\n this.tooltipTimer.call(null, null);\n }\n };\n Autocomplete.prototype.$updateGhostText = function (completion) {\n var row = this.base.row;\n var column = this.base.column;\n var cursorColumn = this.editor.getCursorPosition().column;\n var prefix = this.editor.session.getLine(row).slice(column, cursorColumn);\n if (!this.inlineRenderer.show(this.editor, completion, prefix)) {\n this.inlineRenderer.hide();\n }\n else {\n this.$seen(completion);\n }\n };\n Autocomplete.prototype.$onPopupRender = function () {\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) {\n for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) {\n var completion = this.popup.getData(i);\n if (completion && (!inlineEnabled || completion.hideInlinePreview)) {\n this.$seen(completion);\n }\n }\n }\n };\n Autocomplete.prototype.$onPopupShow = function (hide) {\n this.$onPopupChange(hide);\n this.stickySelection = false;\n if (this.stickySelectionDelay >= 0)\n this.stickySelectionTimer.schedule(this.stickySelectionDelay);\n };\n Autocomplete.prototype.observeLayoutChanges = function () {\n if (this.$elements || !this.editor)\n return;\n window.addEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.addEventListener(\"wheel\", this.mousewheelListener);\n var el = this.editor.container.parentNode;\n var elements = [];\n while (el) {\n elements.push(el);\n el.addEventListener(\"scroll\", this.onLayoutChange, { passive: true });\n el = el.parentNode;\n }\n this.$elements = elements;\n };\n Autocomplete.prototype.unObserveLayoutChanges = function () {\n var _this = this;\n window.removeEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.removeEventListener(\"wheel\", this.mousewheelListener);\n this.$elements && this.$elements.forEach(function (el) {\n el.removeEventListener(\"scroll\", _this.onLayoutChange, { passive: true });\n });\n this.$elements = null;\n };\n Autocomplete.prototype.onLayoutChange = function () {\n if (!this.popup.isOpen)\n return this.unObserveLayoutChanges();\n this.$updatePopupPosition();\n this.updateDocTooltip();\n };\n Autocomplete.prototype.$updatePopupPosition = function () {\n var editor = this.editor;\n var renderer = editor.renderer;\n var lineHeight = renderer.layerConfig.lineHeight;\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n var posGhostText = {\n top: pos.top,\n left: pos.left\n };\n if (renderer.$ghostText && renderer.$ghostTextWidget) {\n if (this.base.row === renderer.$ghostText.position.row) {\n posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight;\n }\n }\n var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight;\n var lowestPosition = editorContainerBottom < posGhostText.top ?\n { top: editorContainerBottom, left: posGhostText.left } :\n posGhostText;\n if (this.popup.tryShow(lowestPosition, lineHeight, \"bottom\")) {\n return;\n }\n if (this.popup.tryShow(pos, lineHeight, \"top\")) {\n return;\n }\n this.popup.show(pos, lineHeight);\n };\n Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) {\n this.$firstOpenTimer.cancel();\n if (!this.popup)\n this.$init();\n if (this.inlineEnabled && !this.inlineRenderer)\n this.$initInline();\n this.popup.autoSelect = this.autoSelect;\n this.popup.setSelectOnHover(this.setSelectOnHover);\n var oldRow = this.popup.getRow();\n var previousSelectedItem = this.popup.data[oldRow];\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n if (this.editor.textInput.setAriaOptions) {\n this.editor.textInput.setAriaOptions({\n activeDescendant: getAriaId(this.popup.getRow()),\n inline: this.inlineEnabled\n });\n }\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n var newRow;\n if (this.stickySelection)\n newRow = this.popup.data.indexOf(previousSelectedItem);\n if (!newRow || newRow === -1)\n newRow = 0;\n this.popup.setRow(this.autoSelect ? newRow : -1);\n if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow])\n this.$onPopupChange();\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (newRow === oldRow && inlineEnabled) {\n var completion = this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n }\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n this.$updatePopupPosition();\n if (this.tooltipNode) {\n this.updateDocTooltip();\n }\n }\n this.changeTimer.cancel();\n this.observeLayoutChanges();\n };\n Autocomplete.prototype.detach = function () {\n if (this.editor) {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n }\n this.$firstOpenTimer.cancel();\n this.changeTimer.cancel();\n this.hideDocTooltip();\n if (this.completionProvider) {\n this.completionProvider.detach();\n }\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n if (this.popup && this.popup.renderer) {\n this.popup.renderer.off(\"afterRender\", this.$onPopupRender);\n }\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completionProvider = this.completions = this.base = null;\n this.unObserveLayoutChanges();\n };\n Autocomplete.prototype.changeListener = function (e) {\n var cursor = this.editor.selection.lead;\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n if (this.activated)\n this.changeTimer.schedule();\n else\n this.detach();\n };\n Autocomplete.prototype.blurListener = function (e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n if (el != text && el.parentNode != container && !fromTooltip\n && el != this.tooltipNode && e.relatedTarget != text) {\n this.detach();\n }\n };\n Autocomplete.prototype.mousedownListener = function (e) {\n this.detach();\n };\n Autocomplete.prototype.mousewheelListener = function (e) {\n if (this.popup && !this.popup.isMouseOver)\n this.detach();\n };\n Autocomplete.prototype.mouseOutListener = function (e) {\n if (this.popup.isOpen)\n this.$updatePopupPosition();\n };\n Autocomplete.prototype.goTo = function (where) {\n this.popup.goTo(where);\n };\n Autocomplete.prototype.insertMatch = function (data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n if (data.value === \"\") // Explicitly given nothing to insert, e.g. \"No suggestion state\"\n return this.detach();\n var completions = this.completions;\n var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options);\n if (this.completions == completions)\n this.detach();\n return result;\n };\n Autocomplete.prototype.showPopup = function (editor, options) {\n if (this.editor)\n this.detach();\n this.activated = true;\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\n }\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n this.updateCompletions(false, options);\n };\n Autocomplete.prototype.getCompletionProvider = function (initialPosition) {\n if (!this.completionProvider)\n this.completionProvider = new CompletionProvider(initialPosition);\n return this.completionProvider;\n };\n Autocomplete.prototype.gatherCompletions = function (editor, callback) {\n return this.getCompletionProvider().gatherCompletions(editor, callback);\n };\n Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({ start: this.base, end: pos });\n if (prefix == this.completions.filterText)\n return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length)\n return this.detach();\n if (this.completions.filtered.length == 1\n && this.completions.filtered[0].value == prefix\n && !this.completions.filtered[0].snippet)\n return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n if (options && options.matches) {\n var pos = this.editor.getSelectionRange().start;\n this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n this.base.$insertRight = true;\n this.completions = new FilteredList(options.matches);\n this.getCompletionProvider().completions = this.completions;\n return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n var session = this.editor.getSession();\n var pos = this.editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(this.editor);\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n var completionOptions = {\n exactMatch: this.exactMatch,\n ignoreCaption: this.ignoreCaption\n };\n this.getCompletionProvider({\n prefix: prefix,\n pos: pos\n }).provideCompletions(this.editor, completionOptions, \n function (err, completions, finished) {\n var filtered = completions.filtered;\n var prefix = util.getCompletionPrefix(this.editor);\n this.$firstOpenTimer.cancel();\n if (finished) {\n if (!filtered.length) {\n var emptyMessage = !this.autoShown && this.emptyMessage;\n if (typeof emptyMessage == \"function\")\n emptyMessage = this.emptyMessage(prefix);\n if (emptyMessage) {\n var completionsForEmpty = [{\n caption: emptyMessage,\n value: \"\"\n }\n ];\n this.completions = new FilteredList(completionsForEmpty);\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_loading\", false);\n this.popup.renderer.setStyle(\"ace_empty-message\", true);\n return;\n }\n return this.detach();\n }\n if (filtered.length == 1 && filtered[0].value == prefix\n && !filtered[0].snippet)\n return this.detach();\n if (this.autoInsert && !this.autoShown && filtered.length == 1)\n return this.insertMatch(filtered[0]);\n }\n this.completions = !finished && this.showLoadingState ?\n new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) :\n completions;\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_empty-message\", false);\n this.popup.renderer.setStyle(\"ace_loading\", !finished);\n }.bind(this));\n if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) {\n this.$firstOpenTimer.delay(this.stickySelectionDelay / 2);\n }\n };\n Autocomplete.prototype.cancelContextMenu = function () {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n Autocomplete.prototype.updateDocTooltip = function () {\n var popup = this.popup;\n var all = this.completions && this.completions.filtered;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen)\n return this.hideDocTooltip();\n var completersLength = this.editor.completers.length;\n for (var i = 0; i < completersLength; i++) {\n var completer = this.editor.completers[i];\n if (completer.getDocTooltip && selected.completerId === completer.id) {\n doc = completer.getDocTooltip(selected);\n break;\n }\n }\n if (!doc && typeof selected != \"string\")\n doc = selected;\n if (typeof doc == \"string\")\n doc = { docText: doc };\n if (!doc || !(doc.docHTML || doc.docText))\n return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n Autocomplete.prototype.showDocTooltip = function (item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.style.margin = \"0\";\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.style.overscrollBehavior = \"contain\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n this.tooltipNode.id = \"doc-tooltip\";\n this.tooltipNode.setAttribute(\"role\", \"tooltip\");\n this.tooltipNode.addEventListener(\"wheel\", preventParentScroll);\n }\n var theme = this.editor.renderer.theme;\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n }\n else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n if (!tooltipNode.parentNode)\n this.popup.container.appendChild(this.tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n var targetWidth = 400;\n var targetHeight = 300;\n var scrollBarSize = popup.renderer.scrollBar.width || 10;\n var leftSize = rect.left;\n var rightSize = window.innerWidth - rect.right - scrollBarSize;\n var topSize = popup.isTopdown ? rect.top : window.innerHeight - scrollBarSize - rect.bottom;\n var scores = [\n Math.min(rightSize / targetWidth, 1),\n Math.min(leftSize / targetWidth, 1),\n Math.min(topSize / targetHeight * 0.9),\n ];\n var max = Math.max.apply(Math, scores);\n var tooltipStyle = tooltipNode.style;\n tooltipStyle.display = \"block\";\n if (max == scores[0]) {\n tooltipStyle.left = (rect.right + 1) + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.maxWidth = targetWidth * max + \"px\";\n tooltipStyle.top = rect.top + \"px\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n }\n else if (max == scores[1]) {\n tooltipStyle.right = window.innerWidth - rect.left + \"px\";\n tooltipStyle.left = \"\";\n tooltipStyle.maxWidth = targetWidth * max + \"px\";\n tooltipStyle.top = rect.top + \"px\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n }\n else if (max == scores[2]) {\n tooltipStyle.left = window.innerWidth - rect.left + \"px\";\n tooltipStyle.maxWidth = Math.min(targetWidth, window.innerWidth) + \"px\";\n if (popup.isTopdown) {\n tooltipStyle.top = rect.bottom + \"px\";\n tooltipStyle.left = rect.left + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.bottom, targetHeight) + \"px\";\n }\n else {\n tooltipStyle.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n tooltipStyle.left = rect.left + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(popup.container.offsetTop, targetHeight) + \"px\";\n }\n }\n };\n Autocomplete.prototype.hideDocTooltip = function () {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode)\n return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el)\n this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode)\n el.parentNode.removeChild(el);\n };\n Autocomplete.prototype.onTooltipClick = function (e) {\n var a = e.target;\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n a = a.parentNode;\n }\n };\n Autocomplete.prototype.destroy = function () {\n this.detach();\n if (this.popup) {\n this.popup.destroy();\n var el = this.popup.container;\n if (el && el.parentNode)\n el.parentNode.removeChild(el);\n }\n if (this.editor && this.editor.completer == this) {\n this.editor.off(\"destroy\", destroyCompleter);\n this.editor.completer = null;\n }\n this.inlineRenderer = this.popup = this.editor = null;\n };\n Autocomplete.for = function (editor) {\n if (editor.completer instanceof Autocomplete) {\n return editor.completer;\n }\n if (editor.completer) {\n editor.completer.destroy();\n editor.completer = null;\n }\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete[\"$sharedInstance\"])\n Autocomplete[\"$sharedInstance\"] = new Autocomplete();\n editor.completer = Autocomplete[\"$sharedInstance\"];\n }\n else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", destroyCompleter);\n }\n return editor.completer;\n };\n return Autocomplete;\n}());\nAutocomplete.prototype.commands = {\n \"Up\": function (editor) { editor.completer.goTo(\"up\"); },\n \"Down\": function (editor) { editor.completer.goTo(\"down\"); },\n \"Ctrl-Up|Ctrl-Home\": function (editor) { editor.completer.goTo(\"start\"); },\n \"Ctrl-Down|Ctrl-End\": function (editor) { editor.completer.goTo(\"end\"); },\n \"Esc\": function (editor) { editor.completer.detach(); },\n \"Return\": function (editor) { return editor.completer.insertMatch(); },\n \"Shift-Return\": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); },\n \"Tab\": function (editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager)\n editor.completer.goTo(\"down\");\n else\n return result;\n },\n \"Backspace\": function (editor) {\n editor.execCommand(\"backspace\");\n var prefix = util.getCompletionPrefix(editor);\n if (!prefix && editor.completer)\n editor.completer.detach();\n },\n \"PageUp\": function (editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function (editor) { editor.completer.popup.gotoPageDown(); }\n};\nAutocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function (editor, options) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.autoSelect = true;\n completer.autoShown = false;\n completer.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar CompletionProvider = /** @class */ (function () {\n function CompletionProvider(initialPosition) {\n this.initialPosition = initialPosition;\n this.active = true;\n }\n CompletionProvider.prototype.insertByIndex = function (editor, index, options) {\n if (!this.completions || !this.completions.filtered) {\n return false;\n }\n return this.insertMatch(editor, this.completions.filtered[index], options);\n };\n CompletionProvider.prototype.insertMatch = function (editor, data, options) {\n if (!data)\n return false;\n editor.startOperation({ command: { name: \"insertMatch\" } });\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(editor, data);\n }\n else {\n if (!this.completions)\n return false;\n var replaceBefore = this.completions.filterText.length;\n var replaceAfter = 0;\n if (data.range && data.range.start.row === data.range.end.row) {\n replaceBefore -= this.initialPosition.prefix.length;\n replaceBefore += this.initialPosition.pos.column - data.range.start.column;\n replaceAfter += data.range.end.column - this.initialPosition.pos.column;\n }\n if (replaceBefore || replaceAfter) {\n var ranges;\n if (editor.selection.getAllRanges) {\n ranges = editor.selection.getAllRanges();\n }\n else {\n ranges = [editor.getSelectionRange()];\n }\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= replaceBefore;\n range.end.column += replaceAfter;\n editor.session.remove(range);\n }\n }\n if (data.snippet) {\n snippetManager.insertSnippet(editor, data.snippet);\n }\n else {\n this.$insertString(editor, data);\n }\n if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == \"function\") {\n data.completer.onInsert(editor, data);\n }\n if (data.command && data.command === \"startAutocomplete\") {\n editor.execCommand(data.command);\n }\n }\n editor.endOperation();\n return true;\n };\n CompletionProvider.prototype.$insertString = function (editor, data) {\n var text = data.value || data;\n editor.execCommand(\"insertstring\", text);\n };\n CompletionProvider.prototype.gatherCompletions = function (editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(editor);\n var matches = [];\n this.completers = editor.completers;\n var total = editor.completers.length;\n editor.completers.forEach(function (completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function (err, results) {\n if (completer.hideInlinePreview)\n results = results.map(function (result) {\n return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview });\n });\n if (!err && results)\n matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: (--total === 0)\n });\n });\n });\n return true;\n };\n CompletionProvider.prototype.provideCompletions = function (editor, options, callback) {\n var processResults = function (results) {\n var prefix = results.prefix;\n var matches = results.matches;\n this.completions = new FilteredList(matches);\n if (options.exactMatch)\n this.completions.exactMatch = true;\n if (options.ignoreCaption)\n this.completions.ignoreCaption = true;\n this.completions.setFilter(prefix);\n if (results.finished || this.completions.filtered.length)\n callback(null, this.completions, results.finished);\n }.bind(this);\n var isImmediate = true;\n var immediateResults = null;\n this.gatherCompletions(editor, function (err, results) {\n if (!this.active) {\n return;\n }\n if (err) {\n callback(err, [], true);\n this.detach();\n }\n var prefix = results.prefix;\n if (prefix.indexOf(results.prefix) !== 0)\n return;\n if (isImmediate) {\n immediateResults = results;\n return;\n }\n processResults(results);\n }.bind(this));\n isImmediate = false;\n if (immediateResults) {\n var results = immediateResults;\n immediateResults = null;\n processResults(results);\n }\n };\n CompletionProvider.prototype.detach = function () {\n this.active = false;\n this.completers && this.completers.forEach(function (completer) {\n if (typeof completer.cancel === \"function\") {\n completer.cancel();\n }\n });\n };\n return CompletionProvider;\n}());\nvar FilteredList = /** @class */ (function () {\n function FilteredList(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n this.ignoreCaption = false;\n }\n FilteredList.prototype.setFilter = function (str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n var matches = this.filtered;\n else\n var matches = this.all;\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function (a, b) {\n return b.exactMatch - a.exactMatch || b.$score - a.$score\n || (a.caption || a.value).localeCompare(b.caption || b.value);\n });\n var prev = null;\n matches = matches.filter(function (item) {\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev)\n return false;\n prev = caption;\n return true;\n });\n this.filtered = matches;\n };\n FilteredList.prototype.filterCompletions = function (items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n loop: for (var i = 0, item; item = items[i]; i++) {\n if (item.skipFilter) {\n item.$score = item.score;\n results.push(item);\n continue;\n }\n var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet;\n if (!caption)\n continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n }\n else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n }\n else {\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n if (index < 0)\n continue loop;\n distance = index - lastIndex - 1;\n if (distance > 0) {\n if (lastIndex === -1)\n penalty += 10;\n penalty += distance;\n matchMask = matchMask | (1 << j);\n }\n lastIndex = index;\n }\n }\n }\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.$score = (item.score || 0) - penalty;\n results.push(item);\n }\n return results;\n };\n return FilteredList;\n}());\nexports.Autocomplete = Autocomplete;\nexports.CompletionProvider = CompletionProvider;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/marker_group\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar MarkerGroup = /** @class */ (function () {\n function MarkerGroup(session, options) {\n if (options)\n this.markerType = options.markerType;\n this.markers = [];\n this.session = session;\n session.addDynamicMarker(this);\n }\n MarkerGroup.prototype.getMarkerAtPosition = function (pos) {\n return this.markers.find(function (marker) {\n return marker.range.contains(pos.row, pos.column);\n });\n };\n MarkerGroup.prototype.markersComparator = function (a, b) {\n return a.range.start.row - b.range.start.row;\n };\n MarkerGroup.prototype.setMarkers = function (markers) {\n this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS);\n this.session._signal(\"changeBackMarker\");\n };\n MarkerGroup.prototype.update = function (html, markerLayer, session, config) {\n if (!this.markers || !this.markers.length)\n return;\n var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow;\n var foldLine;\n var markersOnOneLine = 0;\n var lastRow = 0;\n for (var i = 0; i < this.markers.length; i++) {\n var marker = this.markers[i];\n if (marker.range.end.row < visibleRangeStartRow)\n continue;\n if (marker.range.start.row > visibleRangeEndRow)\n continue;\n if (marker.range.start.row === lastRow) {\n markersOnOneLine++;\n }\n else {\n lastRow = marker.range.start.row;\n markersOnOneLine = 0;\n }\n if (markersOnOneLine > 200) {\n continue;\n }\n var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow);\n if (markerVisibleRange.start.row === markerVisibleRange.end.row\n && markerVisibleRange.start.column === markerVisibleRange.end.column) {\n continue; // visible range is empty\n }\n var screenRange = markerVisibleRange.toScreenRange(session);\n if (screenRange.isEmpty()) {\n foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine);\n if (foldLine && foldLine.end.row > markerVisibleRange.end.row) {\n visibleRangeStartRow = foldLine.end.row;\n }\n continue;\n }\n if (this.markerType === \"fullLine\") {\n markerLayer.drawFullLineMarker(html, screenRange, marker.className, config);\n }\n else if (screenRange.isMultiLine()) {\n if (this.markerType === \"line\")\n markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config);\n else\n markerLayer.drawTextMarker(html, screenRange, marker.className, config);\n }\n else {\n markerLayer.drawSingleLineMarker(html, screenRange, marker.className + \" ace_br15\", config);\n }\n }\n };\n return MarkerGroup;\n}());\nMarkerGroup.prototype.MAX_MARKERS = 10000;\nexports.MarkerGroup = MarkerGroup;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){var Range = require(\"../range\").Range;\nvar splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\nfunction getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({\n row: 0,\n column: 0\n }, pos));\n return textBefore.split(splitRegex).length - 1;\n}\nfunction wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n var currentWord = words[prefixPos];\n words.forEach(function (word, idx) {\n if (!word || word === currentWord)\n return;\n var distance = Math.abs(prefixPos - idx);\n var score = words.length - distance;\n if (wordScores[word]) {\n wordScores[word] = Math.max(score, wordScores[word]);\n }\n else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n}\nexports.getCompletions = function (editor, session, pos, prefix, callback) {\n var wordScore = wordDistance(session, pos);\n var wordList = Object.keys(wordScore);\n callback(null, wordList.map(function (word) {\n return {\n caption: word,\n value: word,\n score: wordScore[word],\n meta: \"local\"\n };\n }));\n};\n\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/marker_group\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * ## Language Tools extension for Ace Editor\n *\n * Provides autocompletion, snippets, and language intelligence features for the Ace code editor.\n * This extension integrates multiple completion providers including keyword completion, snippet expansion,\n * and text-based completion to enhance the coding experience with contextual suggestions and automated code generation.\n *\n * **Configuration Options:**\n * - `enableBasicAutocompletion`: Enable/disable basic completion functionality\n * - `enableLiveAutocompletion`: Enable/disable real-time completion suggestions\n * - `enableSnippets`: Enable/disable snippet expansion with Tab key\n * - `liveAutocompletionDelay`: Delay before showing live completion popup\n * - `liveAutocompletionThreshold`: Minimum prefix length to trigger completion\n *\n * **Usage:**\n * ```javascript\n * editor.setOptions({\n * enableBasicAutocompletion: true,\n * enableLiveAutocompletion: true,\n * enableSnippets: true\n * });\n * ```\n *\n * @module\n */\n\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\nvar MarkerGroup = require(\"../marker_group\").MarkerGroup;\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n if (session.$mode.completer) {\n return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n }\n var state = editor.session.getState(pos.row);\n var completions = session.$mode.getCompletions(state, session, pos, prefix);\n completions = completions.map(function (el) {\n el.completerId = keyWordCompleter.id;\n return el;\n });\n callback(null, completions);\n },\n id: \"keywordCompleter\"\n};\nvar transformSnippetTooltip = function (str) {\n var record = {};\n return str.replace(/\\${(\\d+)(:(.*?))?}/g, function (_, p1, p2, p3) {\n return (record[p1] = p3 || '');\n }).replace(/\\$(\\d+?)/g, function (_, p1) {\n return record[p1];\n });\n};\nvar snippetCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n var scopes = [];\n var token = session.getTokenAt(pos.row, pos.column);\n if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n scopes.push('html-tag');\n else\n scopes = snippetManager.getActiveScopes(editor);\n var snippetMap = snippetManager.snippetMap;\n var completions = [];\n scopes.forEach(function (scope) {\n var snippets = snippetMap[scope] || [];\n for (var i = snippets.length; i--;) {\n var s = snippets[i];\n var caption = s.name || s.tabTrigger;\n if (!caption)\n continue;\n completions.push({\n caption: caption,\n snippet: s.content,\n meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n completerId: snippetCompleter.id\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function (item) {\n if (item.snippet && !item.docHTML) {\n item.docHTML = [\n \"\", lang.escapeHTML(item.caption), \"\", \"
          \",\n lang.escapeHTML(transformSnippetTooltip(item.snippet))\n ].join(\"\");\n }\n },\n id: \"snippetCompleter\"\n};\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function (val) {\n completers.length = 0;\n if (val)\n completers.push.apply(completers, val);\n};\nexports.addCompleter = function (completer) {\n completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\nvar expandSnippet = {\n name: \"expandSnippet\",\n exec: function (editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n};\nvar onChangeMode = function (e, editor) {\n loadSnippetsForMode(editor.session.$mode);\n};\nvar loadSnippetsForMode = function (mode) {\n if (typeof mode == \"string\")\n mode = config.$modes[mode];\n if (!mode)\n return;\n if (!snippetManager.files)\n snippetManager.files = {};\n loadSnippetFile(mode.$id, mode.snippetFileId);\n if (mode.modes)\n mode.modes.forEach(loadSnippetsForMode);\n};\nvar loadSnippetFile = function (id, snippetFilePath) {\n if (!snippetFilePath || !id || snippetManager.files[id])\n return;\n snippetManager.files[id] = {};\n config.loadModule(snippetFilePath, function (m) {\n if (!m)\n return;\n snippetManager.files[id] = m;\n if (!m.snippets && m.snippetText)\n m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n snippetManager.register(m.snippets || [], m.scope);\n if (m.includeScopes) {\n snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n m.includeScopes.forEach(function (x) {\n loadSnippetsForMode(\"ace/mode/\" + x);\n });\n }\n });\n};\nvar doLiveAutocomplete = function (e) {\n var editor = e.editor;\n var hasCompleter = editor.completer && editor.completer.activated;\n if (e.command.name === \"backspace\") {\n if (hasCompleter && !util.getCompletionPrefix(editor))\n editor.completer.detach();\n }\n else if (e.command.name === \"insertstring\" && !hasCompleter) {\n lastExecEvent = e;\n var delay = e.editor.$liveAutocompletionDelay;\n if (delay) {\n liveAutocompleteTimer.delay(delay);\n }\n else {\n showLiveAutocomplete(e);\n }\n }\n};\nvar lastExecEvent;\nvar liveAutocompleteTimer = lang.delayedCall(function () {\n showLiveAutocomplete(lastExecEvent);\n}, 0);\nvar showLiveAutocomplete = function (e) {\n var editor = e.editor;\n var prefix = util.getCompletionPrefix(editor);\n var previousChar = e.args;\n var triggerAutocomplete = util.triggerAutocomplete(editor, previousChar);\n if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) {\n var completer = Autocomplete.for(editor);\n completer.autoShown = true;\n completer.showPopup(editor);\n }\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function (val) {\n if (val) {\n Autocomplete.for(this);\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.addCommand(Autocomplete.startCommand);\n }\n else {\n this.commands.removeCommand(Autocomplete.startCommand);\n }\n },\n value: false\n },\n enableLiveAutocompletion: {\n set: function (val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.on('afterExec', doLiveAutocomplete);\n }\n else {\n this.commands.off('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n liveAutocompletionDelay: {\n initialValue: 0\n },\n liveAutocompletionThreshold: {\n initialValue: 0\n },\n enableSnippets: {\n set: function (val) {\n if (val) {\n this.commands.addCommand(expandSnippet);\n this.on(\"changeMode\", onChangeMode);\n onChangeMode(null, this);\n }\n else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\n});\nexports.MarkerGroup = MarkerGroup;\n\n}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SqlHighlightRules = function () {\n var keywords = (\"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|\" +\n \"when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|\" +\n \"foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct|is|in|\" +\n \"all|alter|any|array|at|authorization|between|both|cast|check|collate|column|commit|constraint|\" +\n \"cube|current|current_date|current_time|current_timestamp|current_user|describe|escape|except|\" +\n \"exists|external|extract|fetch|filter|for|full|function|global|grouping|intersect|interval|\" +\n \"into|leading|like|local|no|of|only|out|overlaps|partition|position|range|revoke|rollback|rollup|\" +\n \"row|rows|session_user|set|some|start|tablesample|time|to|trailing|truncate|unique|unknown|\" +\n \"user|using|values|window|with\");\n var builtinConstants = (\"true|false\");\n var builtinFunctions = (\"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|\" +\n \"coalesce|ifnull|isnull|nvl\");\n var dataTypes = (\"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|\" +\n \"money|real|number|integer|string\");\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": builtinFunctions,\n \"keyword\": keywords,\n \"constant.language\": builtinConstants,\n \"storage.type\": dataTypes\n }, \"identifier\", true);\n this.$rules = {\n \"start\": [{\n token: \"comment\",\n regex: \"--.*$\"\n }, {\n token: \"comment\",\n start: \"/\\\\*\",\n end: \"\\\\*/\"\n }, {\n token: \"string\", // \" string\n regex: '\".*?\"'\n }, {\n token: \"string\", // ' string\n regex: \"'.*?'\"\n }, {\n token: \"string\", // ` string (apache drill)\n regex: \"`.*?`\"\n }, {\n token: \"constant.numeric\", // float\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: keywordMapper,\n regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n }, {\n token: \"keyword.operator\",\n regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n }, {\n token: \"paren.lparen\",\n regex: \"[\\\\(]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\)]\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }]\n };\n this.normalizeRules();\n};\noop.inherits(SqlHighlightRules, TextHighlightRules);\nexports.SqlHighlightRules = SqlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n return fw;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n }\n else if (foldStyle != \"all\")\n range = null;\n }\n return range;\n }\n if (foldStyle === \"markbegin\")\n return;\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n }\n else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n }\n else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m)\n continue;\n if (m[1])\n depth--;\n else\n depth++;\n if (!depth)\n break;\n }\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\",\"ace/mode/folding/sql\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlHighlightRules = require(\"./sql_highlight_rules\").SqlHighlightRules;\nvar SqlFoldMode = require(\"./folding/sql\").FoldMode;\nvar Mode = function () {\n this.HighlightRules = SqlHighlightRules;\n this.foldingRules = new SqlFoldMode();\n this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.lineCommentStart = \"--\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.$id = \"ace/mode/sql\";\n this.snippetFileId = \"ace/snippets/sql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/sql\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n}); (function() {\n ace.require([\"ace/theme/textmate\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = require('vm').runInThisContext(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","var constants = require('../constants');\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\nimport { Message } from '@lumino/messaging';\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\nimport {NowVisPanel} from './nowpanel';\ninterface IAnnotation {\n id: string;\n annotationFormat: string;\n annotation: string;\n description: string;\n annotationLevel: string;\n provenanceType: string;\n relatedTrial: string;\n relatedExperiment: string;\n }\nexport\nclass AnnontationWidget extends Widget {\n\n d3node: d3_Selection;\n tBody: d3_Selection;\n table: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n anntTitle: d3_Selection;\n expId: string;\n trialId: string;\n fetchUrl: string;\n annotationLevel: string;\n annotations: Array;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor( expId: string) {\n super({ node: AnnontationWidget.createNode() });\n this.d3node = d3_select(this.node);\n this.expId=expId;\n\n this.addClass('content');\n this.title.label = \"Annotation\";\n this.title.closable = false\n this.title.caption = `Annontation`;\n this.setNode();\n this.setAnnotationLevelToExperiment();\n\n }\n\n protected onBeforeHide(msg: Message): void {\n this.setAnnotationLevelToExperiment()\n \n }\n setAnnotationLevelToExperiment(){\n this.trialId=\"\";\n this.fetchUrl=\"/experiments/\"+this.expId+\"/extendedAnnotation\";\n this.annotationLevel=\"Experiment\";\n this.anntTitle.text(\"Annotations for Experiment: \" + this.expId)\n this.setAnnotations();\n\n }\n setAnnotationLevelToTrial(trialId:string){\n this.trialId=trialId;\n this.anntTitle.text(\"Annotations for Trial: \" + this.trialId)\n this.fetchUrl=\"/trials/\"+this.trialId+\"/extendedAnnotation\";\n this.annotationLevel=\"Trial\";\n this.setAnnotations();\n }\n activeAnnotation(trialId:string){\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n parentDock.activateWidget(this);\n this.setAnnotationLevelToTrial(trialId);\n }\n async fillAnnotations(){\n this.annotations=new Array();\n var _thiss=this;\n var response= await fetch(this.fetchUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.annotations= new Array();\n var obj=await response.json();\n\n obj.forEach( function(item: any){\n var annt={\n id: item.id,\n provenanceType: item.provenanceType,\n annotationFormat: item.annotationFormat,\n description: item.description,\n annotationLevel: item.annotationLevel,\n relatedTrial: item.relatedTrial,\n relatedExperiment: item.relatedExperiment,\n }\n\n _thiss.annotations.push(annt);\n }); \n }else{\n if(response.status!=404){\n this.showNode(_thiss.errorFeedback);\n }\n \n }\n\n \n }\n addAnntRow(annt : IAnnotation, tBody:d3_Selection){\n\n let item=tBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(annt.id);\n item.append(\"td\").text(annt.description);\n item.append(\"td\").text(annt.annotationFormat);\n\n item.append(\"td\").text(annt.provenanceType);\n\n var actions =item.append(\"td\")\n var addMemberButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Download Content\");\n addMemberButton.on(\"click\",function(){\n window.open(\"/extendedAnnotation/\"+annt.id+\"/annotation\");\n \n });\n \n }\n async setAnnotations(){\n let _thiss=this;\n \n this.table.html(\"\");\n let header=this.table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"description\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"annotation Format\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"provenance Type\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Actions\");\n var tBody=this.table.append(\"tbody\");\n\n await this.fillAnnotations();\n \n this.annotations.forEach(function (obj: any) {\n _thiss.addAnntRow(obj,tBody);\n });\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n getValueFromSelect(node: d3_Selection,defaultVale:String) :String{\n var option =defaultVale;\n\n var select = node.node() as HTMLSelectElement;\n if(select!=null){\n option = select.options[select.selectedIndex].value;\n }\n return option;;\n }\n createAddGroupForm(projectsDiv:d3_Selection){\n var _thiss=this;\n let inputsDiv=projectsDiv.append(\"div\");\n let descIn=this.addFormInput(inputsDiv,\"descriptionAnntInput\",\"Description\",\"textarea\");\n let annotationIn=this.addFormInput(inputsDiv,\"annotationNameInput\",\"Annotation\",\"textarea\");\n let annotationFormatIn=this.addFormInput(inputsDiv,\"annotationFormatInput\",\"Annotation Format\",\"select\");\n let provenanceTypeIn=this.addFormInput(inputsDiv,\"provenanceTypeInput\",\"Provenance Type\",\"select\");\n\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Data\").text(\"Data\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Interaction\").text(\"Interaction\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Insight\").text(\"Insight\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Other\").text(\"Other\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Rationale\").text(\"Rationale\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Visualization\").text(\"Visualization\");\n\n annotationFormatIn.append(\"option\").attr(\"value\",\"plainText\").text(\"plain text\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"base64\").text(\"base64\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"JSON\").text(\"JSON\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"XML\").text(\"XML\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addAnntButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Annotation\");\n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n var annotationFormat=_thiss.getValueFromSelect(annotationFormatIn,\"plainText\");\n var provenanceType=_thiss.getValueFromSelect(provenanceTypeIn,\"Other\");\n\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n\n let newAnnotation={\n annotation: annotationIn.property(\"value\"),\n description: descIn.property(\"value\"),\n annotationFormat: annotationFormat,\n annotationLevel: _thiss.annotationLevel,\n provenanceType: provenanceType\n };\n\n fetch(_thiss.fetchUrl, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newAnnotation) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n\n _thiss.showNode(_thiss.successFeedback);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addAnntButton);\n _thiss.setAnnotations();\n\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n \n }\n }); \n\n \n });\n\n addAnntButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addAnntButton);\n });\n\n }\n\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n this.anntTitle= projectsDiv.append(\"h2\");\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"\") ; \n this.hideNode(this.errorFeedback);\n this.hideNode(this.successFeedback);\n\n\n this.createAddGroupForm(projectsDiv);\n\n \n this.table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n\n \n }\n\n}","import {Widget} from '@lumino/widgets';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {BaseActivationGraphWidget} from './graph/base_activation_graph';\n\n\nexport\nclass ConfigWidget extends Widget {\n\n d3node: d3_Selection;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('config-content', true)\n\n let historydiv = content.append(\"div\")\n\n historydiv.append(\"h2\")\n .text(\"History Graph\")\n\n let showGraph = historydiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n showGraph.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"show_graph\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"show-graph\", true)\n .attr(\"id\", \"config-show-graph\")\n\n showGraph.append(\"label\")\n .attr(\"for\", \"config-show-graph\")\n .attr(\"title\", \"Open trial graph\")\n .text(\"Show trial graph on selection\")\n\n let showInfo = historydiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n showInfo.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"show_info\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"show-info\", true)\n .attr(\"id\", \"config-show-info\")\n\n showInfo.append(\"label\")\n .attr(\"for\", \"config-show-info\")\n .attr(\"title\", \"Open trial info\")\n .text(\"Show trial information on selection\")\n\n\n let trialdiv = content.append(\"div\")\n trialdiv.append(\"h2\")\n .text(\"Trial Graph\")\n\n BaseActivationGraphWidget.graphTypeForm(\"config\", trialdiv);\n BaseActivationGraphWidget.useCacheForm(\"config\", trialdiv);\n\n return node;\n }\n\n constructor() {\n super({ node: ConfigWidget.createNode() });\n this.d3node = d3_select(this.node);\n //this.setFlag(Widget.Flag.DisallowLayout);\n this.addClass('content');\n this.title.label = \"Config\";\n this.title.closable = false\n this.title.caption = `Configuration`;\n }\n\n\n showTrial(): boolean {\n return this.d3node.select(\".show-graph\").property(\"checked\");\n }\n\n showInfo(): boolean {\n return this.d3node.select(\".show-info\").property(\"checked\");\n }\n\n graphType(): string {\n return this.d3node.select(\".graph-type\").property(\"value\");\n }\n\n useCache(): boolean {\n return this.d3node.select(\".use-cache\").property(\"checked\");\n }\n\n}","import { Widget } from '@lumino/widgets';\nimport { Message } from '@lumino/messaging';\nimport { select as d3_select, Selection as d3_Selection, BaseType as d3_BaseType } from 'd3-selection';\nimport { forceSimulation, forceLink, forceManyBody, forceCenter, forceCollide, SimulationNodeDatum, SimulationLinkDatum } from 'd3-force';\nimport { scaleOrdinal } from 'd3-scale';\nimport { schemeTableau10 } from 'd3-scale-chromatic';\nimport { drag } from 'd3-drag';\nimport { NowVisPanel } from './nowpanel';\nimport { QueryWidget, QueryResultWidget } from './query_widget';\n\ninterface TableNode extends SimulationNodeDatum {\n id: string;\n name: string;\n selected?: boolean;\n}\n\ninterface TableLink extends SimulationLinkDatum {\n source: string | TableNode;\n target: string | TableNode;\n sourceColumn: string;\n targetColumn: string;\n}\n\ninterface DatabaseGraphData {\n nodes: TableNode[];\n links: TableLink[];\n}\n\nexport class DatabaseTabWidget extends Widget {}\n\nexport class TableInfoWidget extends DatabaseTabWidget {\n d3node: d3_Selection;\n constructor(tableName: string, details: any) {\n super({ node: TableInfoWidget.createNode(tableName, details) });\n this.title.label = tableName;\n this.title.caption = `Table: ${tableName}`;\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n }\n static createNode(tableName: string, details: any): HTMLElement {\n const node = document.createElement('div');\n \n node.style.display = 'flex';\n node.style.flexDirection = 'column';\n node.style.height = '100%';\n node.style.overflow = 'hidden';\n \n const header = d3_select(node).append('div')\n .style('flex-shrink', '0')\n .style('padding', '1rem')\n .style('border-bottom', '1px solid #eee')\n .style('background', '#f8f9fa');\n \n header.append('h4')\n .text(tableName)\n .style('margin', '0')\n .style('color', '#333');\n \n const contentContainer = d3_select(node).append('div')\n .style('flex', '1')\n .style('overflow-y', 'auto')\n .style('overflow-x', 'hidden')\n .style('padding', '1rem');\n \n if (details.error) {\n contentContainer.append('div')\n .style('color', 'red')\n .text('Failed to load table details.');\n } else {\n contentContainer.append('h5')\n .text('Columns')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const columnsTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const columnsThead = columnsTable.append('thead').append('tr');\n for( const h of ['Name', 'Type', 'NOT NULL', 'Default', 'PK']){\n columnsThead.append('th').text(h).style('font-size', '0.875rem')\n };\n \n const columnsTbody = columnsTable.append('tbody');\n details.columns.forEach((col: any) => {\n const row = columnsTbody.append('tr');\n row.append('td').text(col.name).style('font-size', '0.875rem');\n row.append('td').text(col.type).style('font-size', '0.875rem');\n row.append('td').text(col.notnull ? 'Yes' : '').style('font-size', '0.875rem');\n row.append('td').text(col.default === null ? '' : col.default).style('font-size', '0.875rem');\n row.append('td').text(col.pk ? 'Yes' : '').style('font-size', '0.875rem');\n });\n\n if (details.foreign_keys && details.foreign_keys.length > 0) {\n contentContainer.append('h5')\n .text('Foreign Keys')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const fkTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const fkThead = fkTable.append('thead').append('tr');\n for( const h of ['Column', 'References Table', 'References Column']){\n fkThead.append('th').text(h).style('font-size', '0.875rem');\n };\n \n const fkTbody = fkTable.append('tbody');\n for( const fk of details.foreign_keys){\n const row = fkTbody.append('tr');\n row.append('td').text(fk.from).style('font-size', '0.875rem');\n row.append('td').text(fk.table).style('font-size', '0.875rem');\n row.append('td').text(fk.to).style('font-size', '0.875rem');\n };\n }\n\n if (details.referenced_by && details.referenced_by.length > 0) {\n contentContainer.append('h5')\n .text('Referenced By')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const columnReferences: { [key: string]: any[] } = {};\n details.referenced_by.forEach((ref: any) => {\n if (!columnReferences[ref.referenced_column]) {\n columnReferences[ref.referenced_column] = [];\n }\n columnReferences[ref.referenced_column].push(ref);\n });\n\n const refTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const refThead = refTable.append('thead').append('tr');\n for( const h of ['Table', 'Column', 'References Column']){\n refThead.append('th').text(h).style('font-size', '0.875rem');\n };\n \n const refTbody = refTable.append('tbody');\n for( const ref of details.referenced_by){\n const row = refTbody.append('tr');\n row.append('td').text(ref.referencing_table).style('font-size', '0.875rem');\n row.append('td').text(ref.referencing_column).style('font-size', '0.875rem');\n row.append('td').text(ref.referenced_column).style('font-size', '0.875rem');\n };\n }\n }\n return node;\n }\n}\n\nexport class DatabaseWidget extends Widget {\n panel: NowVisPanel;\n graphData: DatabaseGraphData = { nodes: [], links: [] };\n simulation: any;\n svg: d3_Selection;\n color: any;\n dataLoaded: boolean = false;\n selectedNodes: Set = new Set();\n \n constructor(panel: NowVisPanel) {\n super();\n this.panel = panel;\n this.title.label = 'Database';\n this.title.caption = 'Database';\n \n const d3node = d3_select(this.node);\n \n const container = d3node.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('height', '100%')\n .style('padding', '1rem');\n\n const headerContainer = container.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem');\n\n headerContainer.append('h4')\n .text('Database')\n .style('margin', '0')\n .style('color', '#333');\n\n const controlsContainer = headerContainer.append('div')\n .style('display', 'flex')\n .style('gap', '0.5rem')\n .style('align-items', 'center');\n\n const tablesDropdown = controlsContainer.append('div')\n .style('position', 'relative')\n .style('display', 'inline-block');\n\n const dropdownButton = tablesDropdown.append('button')\n .classed('btn btn-outline-primary dropdown-toggle', true)\n .attr('type', 'button')\n .attr('data-toggle', 'dropdown')\n .attr('aria-haspopup', 'true')\n .attr('aria-expanded', 'false')\n .html('Tables ')\n .style('min-width', '120px');\n\n tablesDropdown.append('div')\n .attr('id', 'tables-dropdown')\n .classed('dropdown-menu', true)\n .style('position', 'absolute')\n .style('top', '100%')\n .style('left', '0')\n .style('z-index', '1000')\n .style('display', 'none')\n .style('min-width', '250px')\n .style('max-height', '300px')\n .style('overflow-y', 'auto')\n .style('background', '#fff')\n .style('border', '1px solid #ccc')\n .style('border-radius', '4px')\n .style('box-shadow', '0 2px 10px rgba(0,0,0,0.1)')\n .style('padding', '0.5rem');\n\n controlsContainer.append('button')\n .attr('id', 'new-query-btn')\n .classed('btn btn-primary', true)\n .on('click', () => this.openNewQueryTab())\n .html(' New Query');\n\n controlsContainer.append('button')\n .attr('id', 'clear-selection-btn')\n .classed('btn btn-outline-secondary', true)\n .style('display', 'none')\n .on('click', () => this.clearSelection())\n .html(' Clear Selection');\n\n container.append('div')\n .attr('id', 'graph-container')\n .style('flex', '1')\n .style('border', '1px solid #ddd')\n .style('border-radius', '4px')\n .style('background', '#f9f9f9')\n .style('position', 'relative');\n\n this.color = scaleOrdinal(schemeTableau10);\n\n dropdownButton.on('click', () => {\n const dropdown = document.getElementById('tables-dropdown');\n if (dropdown) {\n const isVisible = dropdown.style.display === 'block';\n dropdown.style.display = isVisible ? 'none' : 'block';\n dropdownButton.attr('aria-expanded', !isVisible);\n }\n });\n\n d3_select(document).on('click', (event) => {\n const dropdown = document.getElementById('tables-dropdown');\n const button = dropdownButton.node();\n if (dropdown && button && !button.contains(event.target) && !dropdown.contains(event.target)) {\n dropdown.style.display = 'none';\n dropdownButton.attr('aria-expanded', 'false');\n }\n });\n\n this.showLoadingMessage();\n }\n\n protected onAfterShow(msg: Message): void {\n this.fetchAndRenderTables();\n }\n\n private showLoadingMessage(): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#666')\n .style('font-size', '16px')\n .html(`\n \n
          Click on the Database tab to load database structure
          \n `);\n }\n\n async fetchAndRenderTables() {\n const dropdownMenu = this.node.querySelector('#tables-dropdown');\n if (!dropdownMenu) {\n console.error('Tables dropdown element not found');\n return;\n }\n\n this.showLoadingState();\n this.clearSelection();\n\n try {\n const response = await fetch('/db/tables');\n if (!response.ok) throw new Error('Failed to fetch table list');\n const data = await response.json();\n this.renderTableList(data.tables);\n this.buildGraphDataFromTablesResponse(data);\n this.initializeGraph();\n this.renderGraph();\n this.dataLoaded = true;\n } catch (e) {\n console.error('Error fetching tables:', e);\n this.showErrorMessage('Failed to load database structure');\n }\n }\n\n private showLoadingState(): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#666')\n .style('font-size', '16px')\n .html(`\n \n
          Loading database structure...
          \n `);\n }\n\n private showErrorMessage(message: string): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#dc3545')\n .style('font-size', '16px')\n .html(`\n \n
          ${message}
          \n `);\n }\n\n buildGraphDataFromTablesResponse(data: any) {\n const { tables, foreign_keys } = data;\n \n this.graphData.nodes = tables.map((tableName: string) => ({\n id: tableName,\n name: tableName\n }));\n\n this.graphData.links = [];\n\n if (foreign_keys) {\n Object.keys(foreign_keys).forEach(sourceTable => {\n const tableForeignKeys = foreign_keys[sourceTable];\n tableForeignKeys.forEach((fk: any) => {\n const existingLink = this.graphData.links.find(link => \n link.source === sourceTable && link.target === fk.table\n );\n \n if (!existingLink) {\n this.graphData.links.push({\n source: sourceTable,\n target: fk.table,\n sourceColumn: fk.from,\n targetColumn: fk.to\n });\n }\n });\n });\n }\n }\n\n private createArrowMarker(): void {\n this.svg.append('defs').append('marker')\n .attr('id', 'arrowhead')\n .attr('viewBox', '-0 -3 6 6')\n .attr('refX', 25)\n .attr('refY', 0)\n .attr('orient', 'auto')\n .attr('markerWidth', 5)\n .attr('markerHeight', 5)\n .attr('xoverflow', 'visible')\n .append('svg:path')\n .attr('d', 'M 0,-3 L 6 ,0 L 0,3')\n .attr('fill', '#999')\n .style('stroke', 'none');\n }\n\n private createSimulation(width: number, height: number, isInitial: boolean = false): void {\n if (this.simulation) {\n this.simulation.stop();\n }\n\n const linkDistance = isInitial ? 200 : 250;\n const chargeStrength = isInitial ? -200 : -400;\n const chargeDistanceMax = isInitial ? 800 : 400;\n const collisionRadius = isInitial ? 120 : 70;\n\n this.simulation = forceSimulation(this.graphData.nodes)\n .force('link', forceLink(this.graphData.links).id((d: any) => d.id).distance(linkDistance))\n .force('charge', forceManyBody().strength(chargeStrength).distanceMax(chargeDistanceMax))\n .force('center', forceCenter(width / 2, height / 2))\n .force('collision', forceCollide().radius(collisionRadius));\n\n if (!isInitial) {\n this.simulation.alphaDecay(0.1).velocityDecay(0.4);\n }\n }\n\n initializeGraph() {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n const rect = container.getBoundingClientRect();\n const width = Math.max(400, rect.width || 800);\n const height = Math.max(300, rect.height || 600);\n\n this.svg = d3_select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', height)\n .style('background', '#f9f9f9') as d3_Selection;\n\n this.createArrowMarker();\n\n if (this.graphData.nodes.length > 0) {\n this.createSimulation(width, height, true);\n }\n }\n\n renderGraph() {\n if (!this.svg) return;\n\n this.svg.selectAll('*').remove();\n\n this.createArrowMarker();\n\n if (this.graphData.nodes.length === 0) {\n this.svg.append('text')\n .attr('x', '50%')\n .attr('y', '50%')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '16px')\n .style('fill', '#666')\n .text('No database relationships found');\n return;\n }\n\n const svgNode = this.svg.node();\n const width = svgNode ? svgNode.getBoundingClientRect().width : 800;\n const height = svgNode ? svgNode.getBoundingClientRect().height : 600;\n\n const centerX = width / 2;\n const centerY = height / 2;\n const nodesCount = this.graphData.nodes.length;\n const radius = Math.min(width, height) / 2 - 50;\n this.graphData.nodes.forEach((node: any, index: number) => {\n const angle = 2 * Math.PI * index / nodesCount;\n node.x = centerX + radius * Math.sin(angle);\n node.y = centerY + radius * Math.cos(angle);\n });\n\n const link = this.svg.append('g')\n .selectAll('line')\n .data(this.graphData.links)\n .enter().append('line')\n .attr('stroke', '#999')\n .attr('stroke-opacity', 0.6)\n .attr('stroke-width', 2)\n .attr('marker-end', 'url(#arrowhead)');\n\n const node = this.svg.append('g')\n .selectAll('g')\n .data(this.graphData.nodes)\n .enter().append('g')\n .attr('class', 'node')\n .call((selection: any) => {\n selection.on('click', (event: any, d: any) => this.handleNodeClick(event, d));\n });\n\n node.append('circle')\n .attr('r', 35)\n .attr('fill', (d: any) => this.color(d.id))\n .attr('stroke', '#fff')\n .attr('stroke-width', 3);\n\n node.append('text')\n .text((d: any) => d.name)\n .attr('text-anchor', 'middle')\n .attr('dy', '.35em')\n .style('font-size', '12px')\n .style('font-weight', 'bold')\n .style('fill', '#fff')\n .style('text-shadow', '1px 1px 2px rgba(0,0,0,0.8), -1px -1px 2px rgba(0,0,0,0.8), 1px -1px 2px rgba(0,0,0,0.8), -1px 1px 2px rgba(0,0,0,0.8)')\n .style('pointer-events', 'none');\n\n node.append('title')\n .text((d: any) => `Table: ${d.name}\\nClick to view details\\nCtrl+Click to select (orange margin)`);\n\n this.svg.on('click', (event: any) => {\n if (event.target === this.svg.node()) {\n this.clearSelection();\n }\n });\n\n this.createSimulation(width, height, false);\n\n this.simulation.on('tick', () => {\n link\n .attr('x1', (d: any) => {\n const x = d.source.x;\n return this.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0;\n })\n .attr('y1', (d: any) => {\n const y = d.source.y;\n return this.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0;\n })\n .attr('x2', (d: any) => {\n const x = d.target.x;\n return this.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0;\n })\n .attr('y2', (d: any) => {\n const y = d.target.y;\n return this.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0;\n });\n\n node\n .attr('transform', (d: any) => {\n const x = d.x;\n const y = d.y;\n \n if (!this.isValidNumber(x) || !this.isValidNumber(y)) {\n d.x = width / 2;\n d.y = height / 2;\n return `translate(${width / 2},${height / 2})`;\n }\n \n const boundedX = Math.max(50, Math.min(width - 50, x));\n const boundedY = Math.max(50, Math.min(height - 50, y));\n \n if (boundedX !== x) {\n d.x = boundedX;\n }\n if (boundedY !== y) {\n d.y = boundedY;\n }\n \n return `translate(${boundedX},${boundedY})`;\n });\n });\n\n node.call((selection: any) => {\n const widget = this;\n selection.on('mouseover', function(event: any, d: any) {\n const isSelected = widget.selectedNodes.has(d.id);\n \n d3_select(this).select('circle')\n .attr('stroke-width', isSelected ? 6 : 4)\n .attr('stroke', isSelected ? '#ff8c00' : '#333');\n \n link\n .attr('stroke-opacity', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? 1 : 0.1;\n })\n .attr('stroke-width', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? 3 : 2;\n })\n .attr('stroke', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? '#87CEEB' : '#999';\n });\n \n node.select('circle')\n .attr('stroke-width', (nodeData: any) => {\n const isConnected = link.data().some((linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id && targetId === nodeData.id) || \n (targetId === d.id && sourceId === nodeData.id);\n });\n const isNodeSelected = widget.selectedNodes.has(nodeData.id);\n return isNodeSelected ? 6 : (isConnected ? 4 : 3);\n })\n .attr('stroke', (nodeData: any) => {\n const isConnected = link.data().some((linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id && targetId === nodeData.id) || \n (targetId === d.id && sourceId === nodeData.id);\n });\n const isNodeSelected = widget.selectedNodes.has(nodeData.id);\n return isConnected ? '#87CEEB' : (isNodeSelected ? '#ff8c00' : '#fff');\n });\n })\n .on('mouseout', function() {\n widget.updateSelection();\n \n link\n .attr('stroke-opacity', 0.6)\n .attr('stroke-width', 2)\n .attr('stroke', '#999');\n });\n });\n\n node.call(drag()\n .on('start', (event: any, d: any) => {\n if (!event.active) this.simulation.alphaTarget(0.3).restart();\n d.fx = this.isValidNumber(d.x) ? d.x : width / 2;\n d.fy = this.isValidNumber(d.y) ? d.y : height / 2;\n })\n .on('drag', (event: any, d: any) => {\n const boundedX = Math.max(50, Math.min(width - 50, event.x));\n const boundedY = Math.max(50, Math.min(height - 50, event.y));\n d.fx = boundedX;\n d.fy = boundedY;\n })\n .on('end', (event: any, d: any) => {\n if (!event.active) this.simulation.alphaTarget(0);\n d.fx = null;\n d.fy = null;\n }));\n }\n\n private isValidNumber(value: any): boolean {\n return typeof value === 'number' && !isNaN(value) && isFinite(value);\n }\n\n private toggleSelection(nodeId: string): void {\n if (this.selectedNodes.has(nodeId)) {\n this.selectedNodes.delete(nodeId);\n } else {\n this.selectedNodes.add(nodeId);\n }\n this.updateSelection();\n }\n\n private clearSelection(): void {\n this.selectedNodes.clear();\n this.updateSelection();\n }\n\n private updateSelection(): void {\n if (!this.svg) return;\n\n const widget = this;\n this.svg.selectAll('.node').each(function(d: any) {\n const nodeElement = d3_select(this);\n const isSelected = widget.selectedNodes.has(d.id);\n \n nodeElement.select('circle')\n .attr('stroke', isSelected ? '#ff8c00' : '#fff')\n .attr('stroke-width', isSelected ? 6 : 3)\n .attr('stroke-dasharray', 'none');\n });\n\n const newQueryBtn = this.node.querySelector('#new-query-btn') as HTMLElement;\n const clearBtn = this.node.querySelector('#clear-selection-btn') as HTMLElement;\n \n if (!newQueryBtn || !clearBtn) return;\n\n if (this.selectedNodes.size > 0) {\n newQueryBtn.innerHTML = ` New Query ${this.selectedNodes.size}`;\n clearBtn.style.display = 'inline-block';\n } else {\n newQueryBtn.innerHTML = ' New Query';\n clearBtn.style.display = 'none';\n }\n }\n\n private handleNodeClick(event: any, d: any): void {\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n event.stopPropagation();\n this.toggleSelection(d.id);\n } else {\n this.openTableInfoTab(d.name);\n }\n }\n\n getSelectedTables(): string[] {\n return Array.from(this.selectedNodes);\n }\n\n selectTables(tableNames: string[]): void {\n tableNames.forEach(name => {\n this.selectedNodes.add(name);\n });\n this.updateSelection();\n }\n\n renderTableList(tables: string[]) {\n const dropdownMenu = this.node.querySelector('#tables-dropdown') as HTMLElement;\n if (!dropdownMenu) {\n console.error('Tables dropdown element not found in renderTableList');\n return;\n }\n const d3menu = d3_select(dropdownMenu);\n d3menu.html('');\n \n if (!tables || tables.length === 0) {\n d3menu.append('div')\n .text('No tables found.')\n .style('padding', '0.5rem')\n .style('color', '#666')\n .style('font-style', 'italic');\n return;\n }\n\n d3menu.append('div')\n .text(`Tables (${tables.length})`)\n .style('font-weight', 'bold')\n .style('padding', '0.5rem')\n .style('border-bottom', '1px solid #eee')\n .style('margin-bottom', '0.5rem');\n\n tables.forEach(tableName => {\n const item = d3menu.append('div')\n .style('padding', '0.5rem')\n .style('cursor', 'pointer')\n .style('border-radius', '3px')\n .style('margin-bottom', '0.25rem')\n .style('transition', 'background-color 0.2s')\n .on('mouseover', function() {\n d3_select(this).style('background-color', '#f8f9fa');\n })\n .on('mouseout', function() {\n d3_select(this).style('background-color', 'transparent');\n })\n .on('click', () => {\n this.openTableInfoTab(tableName);\n dropdownMenu.style.display = 'none';\n const dropdownButton = this.node.querySelector('[data-toggle=\"dropdown\"]');\n if (dropdownButton) {\n dropdownButton.setAttribute('aria-expanded', 'false');\n }\n });\n\n item.append('i')\n .classed('fa fa-table', true)\n .style('margin-right', '0.5rem')\n .style('color', '#007bff');\n\n item.append('span')\n .text(tableName)\n .style('font-size', '14px');\n });\n }\n\n async openTableInfoTab(tableName: string) {\n let widget: Widget | null = null;\n try {\n const response = await fetch(`/db/table/${encodeURIComponent(tableName)}`);\n if (!response.ok) throw new Error('Failed to fetch table details');\n const details = await response.json();\n widget = new TableInfoWidget(tableName, details);\n } catch (e) {\n widget = new DatabaseTabWidget();\n widget.title.label = tableName;\n widget.node.innerHTML = `
          Error loading table info: ${e.message}
          `;\n }\n\n let refWidget: Widget | null = null;\n if(this.panel.widgets) {\n for (let w of this.panel.widgets()) {\n if (w instanceof TableInfoWidget || w instanceof QueryResultWidget) {\n refWidget = w;\n }\n }\n }\n if (refWidget) {\n this.panel.addInfoWidget(widget, { ref: refWidget, mode: 'tab-after' });\n } else {\n this.panel.addInfoWidget(widget, { ref: this, mode: 'split-bottom' });\n }\n this.panel.activateWidget(widget);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graphData.nodes.length > 0) {\n this.initializeGraph();\n this.renderGraph();\n }\n }\n\n private getInitialQuery(selectedTables: string[]): string {\n if (selectedTables.length === 0) \n return '';\n \n if (selectedTables.length === 1) {\n return `SELECT * FROM \"${selectedTables[0]}\" LIMIT 100;`;\n }\n \n let initialQuery = `SELECT *\\nFROM \"${selectedTables[0]}\"\\n`;\n \n const usedTables = new Set([selectedTables[0]]);\n const joins: string[] = [];\n \n for (let i = 1; i < selectedTables.length; i++) {\n const currentTable = selectedTables[i];\n let joinFound = false;\n \n for (const link of this.graphData.links) {\n console.log(link.source, link.target);\n const sourceTable = (link.source as TableNode).id;\n const targetTable = (link.target as TableNode).id;\n \n if (sourceTable === currentTable && usedTables.has(targetTable)) {\n joins.push(`JOIN \"${currentTable}\" ON \"${targetTable}\".${link.targetColumn} = \"${currentTable}\".${link.sourceColumn}`);\n usedTables.add(currentTable);\n joinFound = true;\n break;\n }\n \n if (targetTable === currentTable && usedTables.has(sourceTable)) {\n joins.push(`JOIN \"${currentTable}\" ON \"${sourceTable}\".${link.sourceColumn} = \"${currentTable}\".${link.targetColumn}`);\n usedTables.add(currentTable);\n joinFound = true;\n break;\n }\n }\n \n if (!joinFound) {\n joins.push(`CROSS JOIN \"${currentTable}\"`);\n usedTables.add(currentTable);\n }\n }\n \n return initialQuery + joins.join('\\n') + '\\nLIMIT 100;';\n }\n\n private async openNewQueryTab(): Promise {\n const selectedTables = this.getSelectedTables();\n const tableNames = this.graphData.nodes.map(n => n.name);\n const initialQuery = this.getInitialQuery(selectedTables);\n \n let columnNames: string[] = [];\n if (selectedTables.length > 0) {\n try {\n const columnPromises = selectedTables.map(async (tableName) => {\n const response = await fetch(`/db/table/${encodeURIComponent(tableName)}`);\n if (response.ok) {\n const details = await response.json();\n return details.columns ? details.columns.map((col: any) => col.name) : [];\n }\n return [];\n });\n \n const columnArrays = await Promise.all(columnPromises);\n columnNames = [].concat(...columnArrays);\n } catch (error) {\n console.warn('Failed to fetch column names:', error);\n }\n }\n \n const queryWidget = new QueryWidget(this.panel, tableNames, columnNames, initialQuery);\n \n this.panel.addInfoWidget(queryWidget, { ref: this, mode: 'tab-after' });\n this.panel.activateWidget(queryWidget);\n \n this.clearSelection();\n }\n} \n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {TrialGraph, TrialGraphData, ActivationData} from '@noworkflow/trial';\n\nimport {json} from '@noworkflow/utils';\n\nexport\nclass BaseActivationGraphWidget extends Widget {\n\n name: string;\n cls: string;\n t1: string;\n t2: string;\n graph: TrialGraph;\n d3node: d3_Selection;\n\n static graphTypeForm(name: string, selectorDiv: d3_Selection) {\n let graphType = selectorDiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n graphType.append(\"label\")\n .attr(\"for\", name + \"-graphtype\")\n .attr(\"title\", \"Select the graph type\")\n .text(\"Graph Type:\")\n\n let typeOptions = graphType.append(\"select\")\n .attr(\"id\", name + \"-graphtype\")\n .classed(\"graph-type\", true)\n .classed(\"select-style\", true);\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"tree\")\n .attr(\"data-description\", \"Activation tree. Edges represent order of execution\")\n .text(\"Activation Tree\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"no_match\")\n .attr(\"data-description\", \"Activation tree presented as a Graph\")\n .text(\"Activation No Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"exact_match\")\n .attr(\"data-description\", \"Calls have counting independent from caller activations\")\n .text(\"Activation Exact Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"namespace_match\")\n .attr(\"data-description\", \"Calls are combined and a function may have more than one call workflow\")\n .text(\"Activation Namespace Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"definition_tree\")\n .attr(\"data-description\", \"Definition tree. Edges represent order of script definition\")\n .text(\"Definition Tree\")\n\n typeOptions.property(\"value\", \"namespace_match\")\n }\n\n static useCacheForm(name: string, selectorDiv: d3_Selection) {\n let useCache = selectorDiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n useCache.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"use_cache\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"use-cache\", true)\n .attr(\"id\", name + \"-use-cache\")\n\n useCache.append(\"label\")\n .attr(\"for\", name + \"-use-cache\")\n .attr(\"title\", \"Select the graph type\")\n .text(\"Use Cache\")\n }\n\n static createNode(name:string, fn: (name: string, parent: d3_Selection) => void = (parent) => null): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('trial-content', true)\n\n let selectorDiv = content.append(\"div\")\n .classed(\"graphselector\", true)\n .classed(\"hide-toolbar\", true);\n\n BaseActivationGraphWidget.graphTypeForm(name, selectorDiv);\n\n fn(name, selectorDiv);\n\n BaseActivationGraphWidget.useCacheForm(name, selectorDiv);\n\n let selectorReload = selectorDiv.append(\"a\")\n .attr(\"href\", \"#\")\n .classed(\"link-button reload-button\", true)\n\n selectorReload.append('i')\n .classed(\"fa fa-refresh\", true);\n\n selectorReload.append('span')\n .text('Reload');\n\n content.append('div')\n .classed('sub-content', true);\n\n return node;\n }\n\n setGraph(data: TrialGraphData, config: any={}, showDiffFunction?:any, nowVisPanel?: any) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new TrialGraph(this.cls, sub, config, showDiffFunction, nowVisPanel);\n this.graph.load(data, this.t1, this.t2);\n }\n\n graphDefinition(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData) {\n return {\n width: this.node.getBoundingClientRect().width - 24,\n height: this.node.getBoundingClientRect().height - 24,\n customForm: (graph: TrialGraph, form: d3_Selection) => {\n // Toggle Tooltips\n let selectorDiv = this.d3node.select(\".trial-content .graphselector\");\n\n let typeOptions = selectorDiv.select(\".graph-type\");\n typeOptions.property(\"value\", selectedGraph);\n\n let useCacheDiv = selectorDiv.select(\".use-cache\");\n useCacheDiv.property(\"checked\", useCache);\n\n\n let selectorToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + graph.graphId + \"-toolbar-selector-check\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-selector-check\")\n .attr(\"value\", \"show\")\n .property(\"checked\", selectorDiv.classed('visible'))\n .on(\"change\", () => {\n let visible = selectorToggle.property(\"checked\");\n selectorToggleI\n .classed('fa-circle-o', visible)\n .classed('fa-circle', !visible);\n selectorDiv\n .classed('visible', visible)\n .classed('show-toolbar', visible)\n .classed('hide-toolbar', !visible)\n });\n let selectorLabel = form.append(\"label\")\n .attr(\"for\", \"trial-\" + graph.graphId + \"-toolbar-selector-check\")\n\n let optionsNode: any = typeOptions.node();\n\n selectorLabel.append(\"span\")\n .classed(\"toggle-label\", true)\n .text(optionsNode.options[optionsNode.selectedIndex].text)\n\n let selectorToggleI = selectorLabel.append(\"i\")\n .classed('fa', true)\n .classed(\"fa-circle\", !selectorDiv.classed('visible'))\n .classed(\"fa-circle-o\", selectorDiv.classed('visible'))\n },\n customLoadTooltip: (g: TrialGraph, div: HTMLDivElement, text: string, trialid: string, aid: string) => {\n var url = \"/trials/\" + trialid + \"/activations/\" + aid + \".json\";\n function createResponse(activationId: string, div2: Element) {\n return function(data: ActivationData) {\n g.activationStorage[activationId] = data;\n g.updateTooltipDiv(activationId, div2);\n }\n }\n json(text, div, url, createResponse(aid, div));\n },\n genDataflow: genDataflow,\n queryTooltip: true\n }\n }\n\n configureGraph(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData, showDiffFunction?:any, nowVisPanel?:any) {\n this.setGraph(data, this.graphDefinition(selectedGraph, useCache, genDataflow, data), showDiffFunction, nowVisPanel);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graph) {\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n }\n\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {json} from '@noworkflow/utils';\n\nimport {BaseActivationGraphWidget} from './base_activation_graph';\n\nimport {TrialGraphData} from '@noworkflow/trial';\n\n\nexport\nclass DiffGraphWidget extends BaseActivationGraphWidget {\n\n showDiffFunction : any;\n nowVisPanel : any\n\n static url(trial1: string, trial2: string, selectedGraph: string, useCache: boolean): string {\n let cache = useCache ? \"1\" : \"0\"\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/\" + selectedGraph + \"-\" + cache + \".json\"\n );\n }\n\n static createForm(name: string, parent: d3_Selection): void {\n }\n\n constructor(name: string, cls: string, t1: string, t2: string, showDiffFunction : any, nowVisPanel : any) {\n super({ node: BaseActivationGraphWidget.createNode(cls, DiffGraphWidget.createForm) });\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".graph-type\").property(\"value\"),\n this.d3node.select(\".use-cache\").property(\"checked\"),\n )\n })\n this.addClass('content');\n this.addClass('diff-widget');\n this.title.label = name;\n this.title.closable = true;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n this.t1 = t1;\n this.t2 = t2;\n this.showDiffFunction = showDiffFunction\n this.nowVisPanel = nowVisPanel\n }\n\n load(selectedGraph: string = \"namespace_match\", useCache: boolean = true) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n json(\"Diff\", sub, DiffGraphWidget.url(this.t1, this.t2, selectedGraph, useCache), (data: TrialGraphData) => {\n let selectorDiv = this.d3node.select(\".trial-content .graphselector\");\n\n let useCacheDiv = selectorDiv.select(\".use-cache\");\n useCacheDiv.property(\"checked\", useCache);\n\n this.configureGraph(selectedGraph, useCache, false, data, this.showDiffFunction, this.nowVisPanel);\n })\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n } from 'd3-selection';\n\nimport {NowVisPanel} from '../nowpanel';\nimport {Widget} from '@lumino/widgets';\n\nexport function functionDiffWindow(functionDiffJson : any, windowIdAndTitle:string, parentDock : NowVisPanel){ \n if(document.getElementById(windowIdAndTitle)){\n alert(\"This function diff is already open!\")\n return\n }\n \n let functionDiffWidget = new Widget();\n functionDiffWidget.title.label = windowIdAndTitle\n functionDiffWidget.id = windowIdAndTitle;\n functionDiffWidget.title.closable = true;\n parentDock.addGraphWidget(functionDiffWidget);\n parentDock.activateWidget(functionDiffWidget);\n\n let functionDiffWindow = d3_select(document.getElementById(windowIdAndTitle));\n functionDiffWindow.style(\"overflow-y\", \"auto\").style(\"padding\", \"2em 2em 2em 1em\");\n\n function addHideShowButton(elementToAppendTo : any, buttonId : string, spanId : string){\n buttonId += \"-\" + crypto.randomUUID();\n return elementToAppendTo.append(\"span\").append(\"i\").attr(\"id\", buttonId).classed(\"fa fa-compress\", true).on(\"click\",()=>{\n let spanToHideOrShow = d3_select(document.getElementById(spanId));\n let thisButton = d3_select(document.getElementById(buttonId));\n if(spanToHideOrShow.classed(\"d-none\")){\n spanToHideOrShow.classed(\"d-none\", false);\n thisButton.classed(\"fa fa-expand\", false);\n thisButton.classed(\"fa fa-compress\", true);\n }else{\n spanToHideOrShow.classed(\"d-none\", true);\n thisButton.classed(\"fa fa-compress\", false);\n thisButton.classed(\"fa fa-expand\", true);\n }\n });\n }\n\n function filterVariablesArray(array : any, opVariables: boolean){\n \n let defaultVariables: any[] = [\"name\", \"attribute\", \"access\"];\n if(opVariables) defaultVariables = defaultVariables.concat([\"add\", \"sub\", \"mult\", \"div\", \"mod\", \"pow\", \"floordiv\", // arithmetic operators\n \"add_assign\", \"sub_assign\", \"mult_assign\", \"div_assign\", // assignment operators 1\n \"mod_assign\", \"pow_assign\", \"floordiv_assign\", // assignment operators 2\n \"bitand_assign\", \"bitor_assign\", \"bitxor_assign\", // assignment operators 3\n \"rshift_assign\", \"lshift_assign\", // assignment operators 4\n \"eq\", \"noteq\", \"gt\", \"lt\", \"gte\", \"lte\", // comparison operators\n \"and\", \"or\", \"not\", // logical operators\n \"is\", \"isnot\", // identity operators\n \"in\", \"notin\", // membership operators\n \"bitand\", \"bitor\", \"bitxor\", \"invert\", \"rshift\", \"lshift\"]); // bitwise operators]\n\n \n\n let filteredArray = array.filter((arrayElement : string)=>{\n\n for(let i = 0; i < defaultVariables.length; i++){\n if(arrayElement.includes(\"'type': '\"+defaultVariables[i]+\"',\")) return true;\n }\n\n return false;\n });\n\n return filteredArray;\n\n }\n\n function writeHTMLDiffVariables(spanVariables: d3_Selection, trial1VariablesThatChanged: any[], trial2VariablesAdded: any[], trial1VariablesRemoved : any[]) {\n\n if(trial1VariablesThatChanged.length > 0){\n\n let variablesChangedTitle = spanVariables.append(\"p\").attr(\"style\",\"font-weight:bold;\").text(\"The variables changed:\");\n let spanVariablesChanged = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-changed-span-\" + crypto.randomUUID());\n addHideShowButton(variablesChangedTitle, \"hide-and-show-button-variables-changed\", spanVariablesChanged.attr(\"id\"));\n\n trial1VariablesThatChanged.forEach((diffVar: any) => {\n let variablesLines = diffVar.match(/\\{[^}]*\\}/g);\n let differentAttributes = findDifferenceBetweenVariables(variablesLines[0], variablesLines[1]);\n\n spanVariablesChanged.append(\"span\").html(colorJsonAttributesHTML(variablesLines[0], differentAttributes, \"red\"));\n spanVariablesChanged.append(\"br\");\n spanVariablesChanged.append(\"span\").html(colorJsonAttributesHTML(variablesLines[1], differentAttributes, \"green\"));\n spanVariablesChanged.append(\"br\");\n spanVariablesChanged.append(\"br\");\n });\n }\n\n if (trial2VariablesAdded.length > 0) {\n let variablesAddedTitle = spanVariables.append(\"p\").attr(\"style\", \"font-weight:bold;\").text(\"The variables added:\");\n let spanVariablesAdded = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-added-span-\"+crypto.randomUUID());\n addHideShowButton(variablesAddedTitle, \"hide-and-show-button-variables-added\", spanVariablesAdded.attr(\"id\"));\n\n trial2VariablesAdded.forEach((varAdded: any) => {\n spanVariablesAdded.append(\"span\").style(\"color\", \"green\").text(varAdded);\n spanVariablesAdded.append(\"br\");\n });\n }\n\n if (trial1VariablesRemoved.length > 0) {\n let variablesRemovedTitle = spanVariables.append(\"p\").attr(\"style\", \"font-weight:bold;\").text(\"The variables removed:\");\n let spanVariablesRemoved = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-removed-span\"+crypto.randomUUID());\n addHideShowButton(variablesRemovedTitle, \"hide-and-show-button-removed-added\", spanVariablesRemoved.attr(\"id\"));\n\n trial1VariablesRemoved.forEach((varRemoved: any) => {\n spanVariablesRemoved.append(\"span\").style(\"color\", \"red\").text(varRemoved);\n spanVariablesRemoved.append(\"br\");\n });\n }\n }\n\n\n function findDifferenceBetweenVariables(variable1 : string, variable2 : string){\n let jsonVariable1 = JSON.parse(variable1.replace(/\"'/g,\"\\\"\").replace(/'\"/g,\"\\\"\").replace(/'/g,\"\\\"\"));\n let jsonVariable2 = JSON.parse(variable2.replace(/\"'/g,\"\\\"\").replace(/'\"/g,\"\\\"\").replace(/'/g,\"\\\"\"));\n \n let differentAttributes = []\n for(let attr in jsonVariable1){\n if (jsonVariable1[attr] != jsonVariable2[attr]) differentAttributes.push(attr.toString());\n }\n \n return differentAttributes;\n }\n \n function colorJsonAttributesHTML(jsonAsString : string, attributesArray : any, color : string) : string{\n let coloredJsonAsString = jsonAsString.replace(/'<([^>]+)>'/g, \"'$1'\");\n attributesArray.forEach((attr : string)=>{\n // Annotated code = color only the attribute\n //attr = \"'\"+attr+\"':\";\n //coloredJsonAsString = coloredJsonAsString.replace(attr, \"\" + attr + \"\");\n let regex = \"'\"+attr+\"':\"+\"(.*?),\"\n let regexMatches = coloredJsonAsString.match(new RegExp(String.raw`\\s${regex}\\s`))!;\n coloredJsonAsString = coloredJsonAsString.replace(regexMatches[1], \"\" + regexMatches[1] + \"\");\n });\n return coloredJsonAsString;\n }\n\n function colorArrayElementsHTML(array : any, symDifference : any, color : string){\n let coloredArray = array;\n symDifference.forEach((argument: any) => { \n if (coloredArray.includes(argument)) coloredArray[coloredArray.indexOf(argument)] = \"\" + argument.toString() + \"\"; \n });\n return coloredArray.toString();\n }\n\n function writeFileAccess(fileAccessArray : any, window : any, color : string){\n fileAccessArray.forEach((file:any)=>{\n window.append(\"span\").style(\"color\", color).text(\"Name: \" + file.name);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Mode: \" + file.mode);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\" Buffering: \" + file.buffering);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Content hash before: \" + file.content_hash_before).on(\"click\", () => {\n downloadFileContent(file.content_hash_before, file.name);\n });\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Content hash after: \" + file.content_hash_after).on(\"click\", () => {\n downloadFileContent(file.content_hash_after, file.name);\n });\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Timestamp: \" + file.timestamp);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Function: \" + file.stack);\n window.append(\"br\");\n window.append(\"br\");\n });\n }\n \n [\"output\", \"arguments\", \"duration\", \"variables\"].forEach((property)=>{\n let didntChange = JSON.stringify(functionDiffJson[property+\"_function_trial1\"]) == JSON.stringify(functionDiffJson[property+\"_function_trial2\"]);\n let changeText = didntChange ? \"The \" + property + \" didn't change\" : \"The \" + property + \" changed:\";\n let textChangeTitle;\n if(property != \"variables\") textChangeTitle = functionDiffWindow.append(\"p\").attr(\"style\",\"font-weight:bold;\").text(changeText);\n\n if(changeText.includes(\"changed\")){\n if(property == \"duration\"){\n functionDiffJson[property+\"_function_trial1\"] = functionDiffJson[property+\"_function_trial1\"].toString() + \" miliseconds\"\n functionDiffJson[property+\"_function_trial2\"] = functionDiffJson[property+\"_function_trial2\"].toString() + \" miliseconds\"\n }\n\n let spanProperty = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-\"+property+\"-span-\"+crypto.randomUUID());\n\n if(property != \"variables\") addHideShowButton(textChangeTitle, \"hide-and-show-button-\"+property, spanProperty.attr(\"id\"));\n \n if(property == \"variables\"){\n\n let buttonDiv = functionDiffWindow.append(\"div\").attr(\"id\", \"div-diff-function-variables-filter\").lower();\n \n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-default\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show only name, attribute, and access variables\")\n .on(\"click\", () => {\n \n let trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_that_changed\"], false);\n let trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial2_variables_added\"], false);\n let trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_removed\"], false);\n\n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered);\n\n })\n .append(\"i\")\n .classed(\"fa fa-asterisk\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show only name, attribute, and access variables\");\n\n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-operation\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show all operation variables\")\n .on(\"click\", () => {\n \n let trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_that_changed\"], true);\n let trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial2_variables_added\"], true);\n let trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_removed\"], true);\n\n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered);\n\n })\n .append(\"i\")\n .classed(\"fa fa-plus-square\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show all operation variables\");;\n\n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-all\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show all variables\")\n .on(\"click\", () => {\n \n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, functionDiffJson[\"trial1_variables_that_changed\"], functionDiffJson[\"trial2_variables_added\"], functionDiffJson[\"trial1_variables_removed\"]);\n\n })\n .append(\"i\")\n .classed(\"fa fa-code\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show all variables\");\n\n writeHTMLDiffVariables(spanProperty, functionDiffJson[\"trial1_variables_that_changed\"], functionDiffJson[\"trial2_variables_added\"], functionDiffJson[\"trial1_variables_removed\"]);\n\n }else if(property == \"arguments\"){\n let symDifference = functionDiffJson[property+\"_function_trial1\"].filter((x: any) => !functionDiffJson[property+\"_function_trial2\"].includes(x))\n .concat(functionDiffJson[property+\"_function_trial2\"].filter((x: any) => !functionDiffJson[property+\"_function_trial1\"].includes(x)));\n\n spanProperty.append(\"span\").html(colorArrayElementsHTML(functionDiffJson[property+\"_function_trial1\"], symDifference, \"red\"));\n spanProperty.append(\"br\");\n spanProperty.append(\"span\").html(colorArrayElementsHTML(functionDiffJson[property+\"_function_trial2\"], symDifference, \"green\"));\n } else {\n spanProperty.append(\"span\").style(\"color\", \"red\").text(functionDiffJson[property+\"_function_trial1\"].toString());\n spanProperty.append(\"br\");\n spanProperty.append(\"span\").style(\"color\", \"green\").text(functionDiffJson[property+\"_function_trial2\"].toString());\n }\n\n }\n\n });\n\n let fileAccessAddedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_added\"].length + \" file accesses added:\");\n let spanFileAccessAdded = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-added-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessAddedTitle, \"hide-and-show-button-file-access-added\", spanFileAccessAdded.attr(\"id\"));\n writeFileAccess(functionDiffJson[\"file_accesses_added\"], spanFileAccessAdded, \"green\");\n\n\n let fileAccessRemovedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_removed\"].length + \" file accesses removed:\");\n let spanFileAccessRemoved = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-removed-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessRemovedTitle, \"hide-and-show-button-file-access-removed\", spanFileAccessRemoved.attr(\"id\"));\n writeFileAccess(functionDiffJson[\"file_accesses_removed\"], spanFileAccessRemoved, \"red\");\n \n \n let fileAccessReplacedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_replaced\"].length + \" file accesses replaced:\")\n let spanFileAccessReplaced = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-replaced-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessReplacedTitle, \"hide-and-show-button-file-access-replaced\", spanFileAccessReplaced.attr(\"id\"));\n \n functionDiffJson[\"file_accesses_replaced\"].forEach((file:any)=>{\n spanFileAccessReplaced.append(\"span\").text(\"Name: \" + file.name);\n spanFileAccessReplaced.append(\"br\");\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\"Mode: \" + file.mode);\n //spanFileAccessReplaced.append(\"br\");\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\" Buffering: \" + file.buffering);\n //spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Content hash before changed from \").append(\"span\").style(\"color\", \"red\").text(file.content_hash_before_first_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_before_first_trial, file.name);\n });\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.content_hash_before_second_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_before_second_trial, file.name);\n });\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Content hash after changed from \").append(\"span\").style(\"color\", \"red\").text(file.content_hash_after_first_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_after_first_trial, file.name);\n });\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.content_hash_after_second_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_after_second_trial, file.name);\n });\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Timestamp changed from \").append(\"span\").style(\"color\", \"red\").text(file.timestamp_first_trial);\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.timestamp_second_trial);\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Checkpoint changed from \").append(\"span\").style(\"color\", \"red\").text(file.checkpoint_first_trial);\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.checkpoint_second_trial);\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\"Function: \" + file.stack);\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"br\");\n });\n\n function downloadFileContent(fileHash: any, fileName : any) {\n var link = document.createElement(\"a\");\n link.download = fileName;\n link.href = window.location.origin + \"/downloadFile/\"+fileHash;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n link.remove();\n } \n\n /* function showFileContent(fileHash: any, fileName : any) {\n fetch(\"getFileContent/\" + fileHash, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n if(fileName.length > 50) fileName = fileName.substring(40);\n\n let modal = d3_select(document.getElementById(\"main\"))\n .append(\"div\").classed(\"modal fade show\", true)\n .attr(\"id\", \"fileContentModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"fileContentModal\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"false\")\n .style(\"display\", \"block\");\n \n let modalDialog = modal.append(\"div\").classed(\"modal-dialog\", true).attr(\"role\",\"document\").style(\"overflow-y\",\"initial\").style(\"max-height\", \"85%\");\n\n let modalContent = modalDialog.append(\"div\").classed(\"modal-content\", true);\n \n let modalHeader = modalContent.append(\"div\").classed(\"modal-header\", true);\n modalHeader.append(\"h5\").classed(\"modal-title\", true).attr(\"id\", \"fileContentModalLabel\").text(\"File \"+fileName+\"'s content:\");\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"data-dismiss\", \"modal\").attr(\"aria-label\", \"Close\")\n .append(\"span\").attr(\"aria-hidden\", \"true\").html(\"×\").on(\"click\", () => modal.remove());\n\n let modalBody = modalContent.append(\"div\").classed(\"modal-body\", true).style(\"overflow-y\", \"auto\").style(\"height\", \"80vh\");\n modalBody.append(\"p\").html(json.file_content.replace(\"\\r\\n\", \"
          \").replace(\"\\n\", \"
          \"));\n });\n });\n } */\n }","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {DockPanel, Widget} from '@lumino/widgets';\n\nimport {\n HistoryGraph,\n VisibleHistoryNode,\n HistoryGraphData,\n HistoryConfig\n} from '@noworkflow/history';\n\nimport {json, makeid} from '@noworkflow/utils';\n\nimport {TrialGraphWidget} from './trial_graph';\nimport {DiffGraphWidget} from './diff_graph';\nimport {NowVisPanel} from '../nowpanel';\nimport {TrialInfoWidget} from '../info/trial_info';\nimport {DiffInfoWidget} from '../info/diff_info';\nimport {ConfigWidget} from '../config_widget';\nimport {AnnontationWidget} from '../annotation_widget';\n\nimport { functionDiffWindow } from './function_diff';\n\nimport * as fs from 'file-saver';\nimport { instance } from \"@viz-js/viz\";\ndeclare var require: any;\nconst pl = require(\"tau-prolog\");\nconst svgPanZoom = require(\"svg-pan-zoom\"); \"svg-pan-zoom\";\n\nexport\nclass HistoryWidget extends Widget {\n\n name: string;\n expId: string;\n cls: string;\n graph: HistoryGraph;\n d3node: d3_Selection;\n config: ConfigWidget;\n annontationWidget: AnnontationWidget;\n rightClickMenu: d3_Selection;\n modal: d3_Selection;\n modalBody: d3_Selection;\n functionDiffWindow = functionDiffWindow;\n\n static url(script = \"*\", execution = \"*\", summarize=false) {\n return (\"trials.json\"\n + \"?script=\" + encodeURIComponent(script)\n + \"&execution=\" + encodeURIComponent(execution)\n + \"&summarize=\" + (summarize? \"1\" : \"0\")\n )\n }\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let content = document.createElement('div');\n node.appendChild(content);\n let d3node = d3_select(content);\n\n let d3content = d3node.append('div')\n .classed('history-content', true)\n\n let filterDiv = d3content.append(\"div\")\n //let filterDiv = form.insert(\"div\", \":first-child\")\n .classed(\"filter\", true)\n .classed(\"hide-toolbar\", true);\n\n let filterInternal = filterDiv.append(\"div\")\n .classed(\"internal\", true);\n let scriptOptions = filterInternal.append(\"select\")\n .attr(\"name\", \"script\")\n .classed(\"select-style script-options\", true);\n\n scriptOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Scripts\");\n\n let executionOptions = filterInternal.append(\"select\")\n .attr(\"name\", \"execution\")\n .classed(\"select-style exec-selection\", true)\n\n executionOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Statuses\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"finished\")\n .text(\"Finished Trials\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"unfinished\")\n .text(\"Unfinished Trials\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"backup\")\n .text(\"Backup Trials\");\n\n let summarize = filterInternal.append(\"div\")\n .classed(\"graph-attr\", true);\n\n summarize.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"summarize\")\n .attr(\"value\", \"\")\n .attr(\"checked\", false)\n .classed(\"summarize\", true)\n .attr(\"id\", \"history-summarize\")\n\n summarize.append(\"label\")\n .attr(\"for\", \"history-summarize\")\n .attr(\"title\", \"Summarize History\")\n .text(\"Summarize\")\n\n let filterReload = filterInternal.append(\"a\")\n .attr(\"href\", \"#\")\n .classed(\"link-button reload-button\", true)\n\n filterReload.append('i')\n .classed(\"fa fa-refresh\", true);\n\n filterReload.append('span')\n .text('Reload');\n\n d3content.append('div')\n .classed('sub-content', true);\n\n return node;\n }\n\n constructor(config: ConfigWidget, name: string, cls: string, expId: string,annontationWidget:AnnontationWidget) {\n super({ node: HistoryWidget.createNode() });\n this.expId = expId;\n this.config = config;\n this.annontationWidget = annontationWidget;\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".script-options\").property(\"value\"),\n this.d3node.select(\".exec-selection\").property(\"value\"),\n this.d3node.select(\".summarize\").property(\"checked\"),\n )\n })\n this.rightClickMenu = this.d3node.append(\"div\")\n .classed(\"dropdown-menu dropdown-menu-sm\", true)\n .attr(\"id\", \"context-menu\")\n .attr(\"selected-trial\", \"\")\n .style(\"display\", \"block\");\n this.buildModal(this.node);\n this.buildRightClickMenu();\n\n //this.setFlag(Widget.Flag.DisallowLayout);\n this.addClass('content');\n this.addClass('trial-widget');\n this.title.label = name;\n this.title.closable = false;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n }\n\n setGraph(data: HistoryGraphData, config: any={}) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new HistoryGraph(this.cls, sub, config);\n this.graph.load(data);\n }\n\n load(script = \"*\", execution = \"*\", summarize=false) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n\n json(\"History\", sub, HistoryWidget.url(script, execution, summarize), (data: HistoryGraphData) => {\n this.setGraph(data, {\n width: this.node.getBoundingClientRect().width - 24,\n height: this.node.getBoundingClientRect().height - 24,\n customCtrlClick: (g: HistoryGraph, d: VisibleHistoryNode) => {\n var redTrial = g.state.selectedNode;\n if (redTrial == null) {\n return true;\n }\n var greenTrial = d;\n let diffGraphWidget = new DiffGraphWidget(\n \"Diff \" + redTrial.display + \"-\" + greenTrial.display,\n \"diff-\" + redTrial.title + \"-\" + greenTrial.title + makeid(),\n redTrial.title, greenTrial.title, this.functionDiffWindow, (this.parent as NowVisPanel)\n );\n diffGraphWidget.d3node.append(\"span\")\n .text(\"Ctrl+(left click) on a function overlap to see the functions' diff\")\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none')\n .lower();\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n\n if (this.config.showInfo()) {\n let diffInfoWidget = new DiffInfoWidget(redTrial.display, greenTrial.display, redTrial.title, greenTrial.title);\n parentDock.addInfoWidget(diffInfoWidget);\n parentDock.activateWidget(diffInfoWidget);\n }\n\n if (this.config.showTrial()) {\n parentDock.addGraphWidget(diffGraphWidget);\n parentDock.activateWidget(diffGraphWidget);\n diffGraphWidget.load(\n this.config.graphType(),\n this.config.useCache()\n );\n }\n return true;\n },\n customWindowTabCommand: (trialIdSimplified : string, windowId : string, command: string)=>{\n \n let trialExportWidget = new Widget();\n trialExportWidget.title.label = command + \" trial \" + trialIdSimplified;\n trialExportWidget.title.closable = true;\n trialExportWidget.id = windowId;\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n parentDock.addGraphWidget(trialExportWidget);\n parentDock.activateWidget(trialExportWidget);\n return true;\n \n },\n customSelectNode: (g: HistoryGraph, d: VisibleHistoryNode) => {\n let trialGraphWidget = new TrialGraphWidget(\"Trial \" + d.display, \"trial-\" + d.title + makeid(), d.title, d.title);\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n\n if (this.config.showInfo()) {\n let trialInfoWidget = new TrialInfoWidget(d,this.annontationWidget);\n parentDock.addInfoWidget(trialInfoWidget);\n parentDock.activateWidget(trialInfoWidget);\n }\n if (this.config.showTrial()) {\n parentDock.addGraphWidget(trialGraphWidget);\n parentDock.activateWidget(trialGraphWidget);\n trialGraphWidget.load(\n this.config.graphType(),\n this.config.useCache()\n );\n }\n return true;\n },\n customForm: (graph: HistoryGraph, form: d3_Selection) => {\n // Toggle Tooltips\n let filterDiv = this.d3node.select(\".history-content .filter\");\n\n let scriptOptions = filterDiv.select(\".script-options\");\n\n let currentScript = scriptOptions.property(\"value\");\n\n scriptOptions.html(\"\");\n\n scriptOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Scripts\");\n\n for (let script of data.scripts) {\n scriptOptions.append(\"option\")\n .attr(\"value\", script)\n .text(script);\n }\n\n scriptOptions.property(\"value\", currentScript);\n\n let filterToggle = form.append(\"input\")\n .attr(\"id\", \"history-\" + graph.graphId + \"-toolbar-filter-check\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-filter-check\")\n .attr(\"value\", \"show\")\n .property(\"checked\", filterDiv.classed('visible'))\n .on(\"change\", () => {\n let visible = filterToggle.property(\"checked\");\n filterToggleI\n .classed('fa-circle-o', visible)\n .classed('fa-circle', !visible);\n filterDiv\n .classed('visible', visible)\n .classed('show-toolbar', visible)\n .classed('hide-toolbar', !visible)\n });\n let filterLabel = form.append(\"label\")\n .attr(\"for\", \"history-\" + graph.graphId + \"-toolbar-filter-check\")\n let filterToggleI = filterLabel.append(\"i\")\n .classed('fa', true)\n .classed(\"fa-circle\", !filterDiv.classed('visible'))\n .classed(\"fa-circle-o\", filterDiv.classed('visible'))\n\n \n // Push trial\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-push-trial\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Push trial\")\n .on(\"click\", () => this.buildPushCommand(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-cloud-upload\", true)\n\n // Pull trial\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-pull-trial\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Pull trial\")\n .on(\"click\", () => this.buildPullCommand(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-cloud-download\", true)\n\n // Add remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-add-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Add remote\")\n .on(\"click\", () => this.buildAddRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-plus-circle\", true)\n\n // Edit remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-edit-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Edit remote\")\n .on(\"click\", () => this.buildEditRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-pencil-square\", true)\n\n // Delete remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-delete-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Delete remote\")\n .on(\"click\", () => this.buildDeleteRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-trash\", true)\n\n \n }\n });\n });\n } \n\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (!this.graph) {\n return;\n }\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n\n private buildModal(div: any) {\n this.modal = d3_select(div).append(\"div\")\n .classed(\"modal fade\", true)\n .attr(\"id\", \"commandsModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"commandsModalTitle\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"true\");\n\n let modalContent = this.modal.append(\"div\")\n .classed(\"modal-dialog\", true)\n .attr(\"role\", \"document\")\n .append(\"div\").classed(\"modal-content\", true); //modal content\n\n let modalHeader = modalContent.append(\"div\")\n .classed(\"modal-header\", true)//modal header\n modalHeader.append(\"h5\")\n .classed(\"modal-title\", true)\n .attr(\"id\", \"exampleModalTitle\")\n .text(\"Change Temporary Title\") //modal title\n\n this.modalBody = modalContent.append(\"div\")\n .classed(\"modal-body\", true);\n\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"type\", \"button\").text(\"x\").style(\"float\", \"right\")\n .on(\"click\", () => cleanModalBodyAndClose(this.modal, this.modalBody)); //close modal\n }\n\n private buildRightClickMenu() {\n\n //let modal = document.getElementById(\"commandsModal\");\n this.buildRestoreTrialCommand(this.modal, this.modalBody);\n this.buildRestoreFileCommand(this.modal, this.modalBody);\n this.buildProvCommand();\n this.buildExportPrologCommand(this.modal, this.modalBody)\n this.buildDataflowCommand(this.modal, this.modalBody)\n this.buildTrialFunctionDiffCommand(this.modal, this.modalBody, this.functionDiffWindow)\n }\n\n buildTrialFunctionDiffCommand(modal: d3_Selection,\n modalBody: d3_Selection, functionDiffWindow : any) {\n\n let self = this\n\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"trial-function-diff-option\")\n .text(\"function activation diff\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\") ?? \"\";\n\n buildTrialFunctionDiffModal(modal, modalBody, parent, trialId, functionDiffWindow, self);\n });\n\n };\n\n buildDataflowCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"dataflow-option\")\n .text(\"export dataflow\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\") ?? \"\";\n\n buildDataflowModal(modal, modalBody, parent, self.graph.config, trialId);\n });\n\n };\n\n buildExportPrologCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"export-option\")\n .text(\"export prolog\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\");\n let exportUrl = \"/commands/export/\" + trialId;\n let exportWindowId = \"Export window \" + trialId;\n\n\n buildExportPrologModal(modal, modalBody, exportUrl, self.graph.config, parent, exportWindowId, trialId);\n\n });\n }\n\n buildProvCommand() {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"prov-option\")\n .text(\"export prov\")\n .on(\"click\", function () {\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n let provWindowId = \"Prov window \" + trialId;\n\n if (document.getElementById(provWindowId)) return;\n\n\n let provUrl = \"/commands/prov/\" + trialId;\n\n\n fetch(provUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n self.graph.config.customWindowTabCommand(parent.getAttribute(\"selected-trial-simplified\")!, provWindowId, \"Prov\");\n let provWindow = d3_select(document.getElementById(provWindowId));\n\n\n if (response.status == 200) {\n provWindow.style(\"overflow-y\", \"auto\");\n let prov_lines = json.prov.split(\"\\n\");\n for (var line in prov_lines) provWindow.append(\"p\").text(prov_lines[line]);\n\n } else {\n window.alert(\"No prov to export\");\n }\n\n });\n });\n });\n }\n\n private buildRestoreFileCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"restore-file-option\")\n .text(\"restore file\")\n .on(\"click\", function () {\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n\n let trialFiles: string[];\n\n fetch(\"/files/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n trialFiles = json.files\n\n changeTitle(parent, \"Restore file trial \")\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n //createFormTextInput(form, \"restoreFile\", \"Restore file\", \"restoreFileHelp\", \"Write the name of the file you want to restore\");\n createFormSelectInput(form, \"restoreFile\", \"Restore file\", 0, trialFiles.length - 1, 0, \"\", \"\", trialFiles);\n createFormTextInput(form, \"restoreFileID\", \"File identifier\", \"restoreIDHelp\", \"(optional) Identifies the file to be restored. It can be either the timestamp, the number of access, or the code hash\");\n createFormTextInput(form, \"restoreFileTarget\", \"Target file path\", \"restoreTargetHelp\", \"(optional) specifies the target path of the restored file\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).attr(\"type\", \"submit\").text(\"restore trial\");\n\n }\n\n submitButton?.on(\"click\", function () {\n //let fileToRestore : string | boolean = getTextInputFormByID(\"restoreFile\", true);\n let fileToRestore = (document.getElementById(\"restoreFile\")).selectedOptions[0].value;\n let fileIdentifier: string | boolean = getTextInputFormByID(\"restoreFileID\", true);\n let targetPath: string | boolean = getTextInputFormByID(\"restoreFileTarget\", false);\n\n let restoreUrl = \"/commands/restore/file/\" + trialId + \"/\" + fileToRestore + \"/\" + fileIdentifier + \"/\" + targetPath;\n\n if (fileToRestore) getRestoreOrCollabCommand(restoreUrl, form, modalBody);\n else addAlert(modalBody, \"alert-danger\", \"Error!\", \"The file's name is empty\");\n\n });\n });\n\n });\n });\n }\n\n private buildRestoreTrialCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"restore-trial-option\")\n .text(\"restore trial\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n changeTitle(parent, \"Restore trial \");\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormCheckInput(form, \"restoreSkipScript\", \"Skip Script\");\n createFormCheckInput(form, \"restoreSkipLocalModules\", \"Skip Local Modules\");\n createFormCheckInput(form, \"restoreSkipFileAccess\", \"Skip File Access\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).attr(\"type\", \"submit\").text(\"restore trial\");\n\n }\n\n submitButton?.on(\"click\", function () {\n let skipScript = (document.getElementById(\"restoreSkipScript\")).checked;\n let skipModules = (document.getElementById(\"restoreSkipLocalModules\")).checked;\n let skipFileAccess = (document.getElementById(\"restoreSkipFileAccess\")).checked;\n\n let restoreUrl = \"/commands/restore/trial/\" + trialId + \"/\" + skipScript + \"/\" + skipModules + \"/\" + skipFileAccess;\n\n getRestoreOrCollabCommand(restoreUrl, form, modalBody);\n\n });\n });\n }\n\n private buildAddRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Add new remote\";\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormTextInput(form, \"inputAddRemoteUrl\", \"Remote URL: \");\n createFormTextInput(form, \"inputAddRemoteName\", \"Remote name: \");\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Add remote\");\n }\n\n submitButton?.on(\"click\", function () {\n let remoteURL = (document.getElementById(\"inputAddRemoteUrl\")).value;\n let remoteName = (document.getElementById(\"inputAddRemoteName\")).value;\n\n let addRemoteURL = \"/collab/remotes/add/\" + remoteName + \"/\" + remoteURL;\n\n fetch(addRemoteURL, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then((json) => {\n form.remove();\n if (response.status == 200) {\n addAlert(modalBody, \"alert-success\", \"Success!\", json.terminal_text);\n } else {\n addAlert(modalBody, \"alert-danger\", \"Error!\", \"\");\n }\n\n });\n });\n\n });\n }\n\n private buildDeleteRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"editDeleteServerUrlId\", \"Delete remote\", \"delete\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildEditRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"editRemoteServerUrlId\", \"Edit remote\", \"edit\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildPushCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"pushServerUrlId\", \"Push experiment\", \"push\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildPullCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"pullServerUrlId\", \"Pull experiment\", \"pull\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private executeCollabCommand(modal: d3_Selection, modalBody: d3_Selection, serverUrlId: string, title: string, command: string, remotes: any) {\n document.getElementById(\"exampleModalTitle\")!.textContent = title;\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n let select: d3_Selection;\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n form.append(\"label\").attr(\"for\", \"remotes\").text(\"Remote: \");\n\n select = form.append(\"select\").attr(\"name\", \"remotes\").attr(\"id\", \"remotes\");\n for (let i = 0; i < remotes.length; i++) {\n select.append(\"option\").attr(\"value\", remotes[i].server_url).text(remotes[i].name);\n }\n\n form.append(\"br\");\n form.append(\"span\").text(\"Remote URL: \");\n let remoteURLText = form.append(\"span\").attr(\"id\", serverUrlId + \"Remote\").text(remotes[0].server_url);\n select.on(\"change\", () => {\n remoteURLText.text(select.node()!.value);\n })\n\n form.append(\"br\");\n if (command == \"edit\") {\n createFormTextInput(form, \"inputEditRemoteName\", \"Remote new name: \");\n }\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(title);\n }\n\n submitButton?.on(\"click\", function () {\n let serverUrl = select.node()!.value;\n\n let collabCommandUrl = \"/commands/\" + command + \"/\" + serverUrl;\n if (command == \"edit\") collabCommandUrl = \"/collab/remotes/edit/\" + (document.getElementById(\"inputEditRemoteName\")).value + \"/\" + serverUrl;\n if (command == \"delete\") collabCommandUrl = \"/collab/remotes/delete/\" + serverUrl;\n\n getRestoreOrCollabCommand(collabCommandUrl, form, modalBody);\n\n });\n }\n\n}\n\nfunction buildTrialFunctionDiffModal(modal: d3_Selection, modalBody: d3_Selection,\n parent: Element, trialId: string, functionDiffWindow : any, self : any) {\n\n let secondTrialId : string;\n changeTitle(parent, \"Function activation diff trial\")\n //document.getElementById(\"exampleModalTitle\")!.textContent = \"Function activation diff trial \" + trialId;\n\n fetch(\"/getFunctionActivations/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n showModal(modal);\n\n if (modalBody) {\n\n //scrollableModal(modalBody);\n\n modalBody.append(\"span\").text(\"Select this trial's activation: \");\n let firstTrialSelectActivation = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"firstTrialFunctionActivations\").attr(\"id\", \"firstTrialFunctionActivations\").style(\"max-width\", \"480px\");\n\n for(let activation in json[\"function_activations\"]){\n firstTrialSelectActivation.append(\"option\").attr(\"value\", json[\"function_activations\"][activation].id).text(JSON.stringify(json[\"function_activations\"][activation]).replace(/{|}/g,\"\").substring(0, 70));\n } \n\n modalBody.append(\"br\");\n\n modalBody.append(\"span\").text(\"Select the other trial: \");\n\n let secondTrialSelect = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"secondTrialSelect\").attr(\"id\", \"secondTrialSelect\");\n\n fetch(\"/getAllTrialsIdsAndTags\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n for(let trial in json){\n secondTrialSelect.append(\"option\").attr(\"value\", json[trial].id).text(json[trial].tag);\n }\n\n modalBody.append(\"br\");\n\n modalBody.append(\"span\").text(\"Select the other trial's activation: \");\n\n let secondTrialSelectActivation = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"secondTrialFunctionActivations\").attr(\"id\", \"secondTrialFunctionActivations\").style(\"max-width\", \"480px\");\n\n getSecondTrialFunctionActivations(secondTrialSelectActivation);\n\n secondTrialSelect.on(\"change\",()=>{\n\n getSecondTrialFunctionActivations(secondTrialSelectActivation);\n\n });\n \n \n modalBody.append(\"br\");\n\n let submitButton = modalBody.append(\"button\").classed(\"btn btn-primary mb-2\", true).style(\"margin-top\", \"10px\").text(\"Confirm\");\n\n submitButton!.on(\"click\", function () {\n\n let firstTrialFunctionId = (document.getElementById(\"firstTrialFunctionActivations\")).selectedOptions[0].value;\n let secondTrialFunctionId = (document.getElementById(\"secondTrialFunctionActivations\")).selectedOptions[0].value;\n \n let url = \"/commands/diff/\"+ trialId +\"/\"+ firstTrialFunctionId + \"/\"+ secondTrialId + \"/\" + secondTrialFunctionId;\n\n fetch(url, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n \n response.json().then((json) => {\n functionDiffWindow(json, \"Diff trial \" + trialId + \" activation_id \" + firstTrialFunctionId + \" trial \" + secondTrialId + \" activation_id \" + secondTrialFunctionId, self.parent as NowVisPanel);\n });\n });\n \n cleanModalBodyAndClose(modal, modalBody);\n \n \n \n });\n\n })});\n\n \n\n }\n\n });\n });\n\n\n\n function getSecondTrialFunctionActivations(secondTrialSelectActivation: d3_Selection) {\n secondTrialId = (document.getElementById(\"secondTrialSelect\")).selectedOptions[0].value;\n\n fetch(\"/getFunctionActivations/\" + secondTrialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n secondTrialSelectActivation.html(\"\");\n\n for (let activation in json[\"function_activations\"]) {\n secondTrialSelectActivation.append(\"option\").attr(\"value\", json[\"function_activations\"][activation].id).text(JSON.stringify(json[\"function_activations\"][activation]).replace(/{|}/g, \"\").substring(0, 70));\n }\n\n });\n });\n }\n}\n\nfunction buildExportPrologModal(modal: d3_Selection, modalBody: d3_Selection, exportUrl: string, config: HistoryConfig, parent: Element, exportWindowId: string, trialId: string | null) {\n let submitButton;\n let form: d3_Selection;\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Prolog\";\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n\n createFormCheckInput(form, \"exportProvRules\", \"Also exports inference rules\");\n createFormCheckInput(form, \"exportProvHideTimestamps\", \"Hide timestamps\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Generate prolog\");\n\n }\n\n submitButton?.on(\"click\", () => {\n let inferenceRules = (document.getElementById(\"exportProvRules\")).checked;\n let hideTimestamps = (document.getElementById(\"exportProvHideTimestamps\")).checked;\n\n exportUrl += \"/\" + inferenceRules + \"/\" + hideTimestamps;\n\n buildExportPrologTab(exportUrl, config, parent, exportWindowId, trialId);\n cleanModalBodyAndClose(modal, modalBody);\n });\n}\n\nfunction buildExportPrologTab(exportUrl: string, config: HistoryConfig, parent: Element, exportWindowId: string, trialId: string | null) {\n\n if (document.getElementById(exportWindowId)) {\n window.alert(\"Close trial \" + trialId + \" prolog tab before generating a new prolog\");\n return;\n }\n\n\n\n fetch(exportUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response: any) => {\n response.json().then((json: any) => {\n\n if (response.status == 200) {\n\n\n config.customWindowTabCommand(parent.getAttribute(\"selected-trial-simplified\")!, exportWindowId, \"Prolog\");\n let exportWindow = d3_select(document.getElementById(exportWindowId));\n\n let form: d3_Selection = (exportWindow.append(\"form\").attr(\"onsubmit\", \"return false;\") as d3_Selection)\n .append(\"div\").classed(\"form-row\", true);\n createFormTextInput(form, \"exportPrologProgram\" + trialId, \"Prolog\").classed(\"col-7\", true);\n createFormTextInput(form, \"exportPrologQuery\" + trialId, \"Query\").classed(\"col\", true);\n\n let submitButton = form.append(\"div\").classed(\"col-auto\", true).style(\"padding-top\", \"5vh\")\n .append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Execute Query\");\n\n\n (document.getElementById(\"exportPrologProgram\" + trialId))!.value = json.export;\n\n let prologSession = pl.create(1000);\n\n let answerCallback = (answer: any, answerString: string) => {\n if (answer == false) {\n\n let answerCardTextId = \"Answers prolog card text \" + trialId;\n let answerCardText = document.getElementById(answerCardTextId) ? d3_select(document.getElementById(answerCardTextId)) : null;\n if (answerCardText == null) {\n let answerWindow = exportWindow.append(\"div\");\n answerWindow.classed(\"card\", true).append(\"div\").classed(\"card-header\", true).text(\"Answers\");\n answerCardText = answerWindow.append(\"div\").classed(\"card-body\", true)\n .append(\"p\").classed(\"card-text\", true).attr(\"id\", answerCardTextId)\n .style(\"overflow-y\", \"auto\").style(\"max-height\", \"35vh\");\n }\n\n answerCardText!.html(answerString);\n return;\n }\n answerString += prologSession.format_answer(answer).toString() + \"
          \";\n\n prologSession.answer((answer: any) => answerCallback(answer, answerString));\n };\n\n submitButton.on(\"click\", () => {\n let prologProgram = getTextInputFormByID(\"exportPrologProgram\" + trialId);\n let userQuery = getTextInputFormByID(\"exportPrologQuery\" + trialId);\n if (prologProgram && userQuery) {\n\n prologSession.consult(prologProgram, {\n success: () => {\n console.log(\"Prolog consult success\");\n prologSession.query(userQuery, {\n success: () => {\n prologSession.answer((answer: any) => answerCallback(answer, \"\"));\n },\n error: () => {\n console.log(\"Erro query\");\n }\n });\n },\n error: () => {\n console.log(\"Prolog consult error\");\n }\n });\n }\n\n\n });\n\n } else {\n console.log(\"Export error\");\n }\n\n });\n });\n}\n\nfunction scrollableModal(modalBody: d3_Selection) {\n let modalDialog = (document.getElementsByClassName(\"modal-dialog\") as HTMLCollectionOf)[0];\n modalDialog.style.overflowY = \"initial\";\n modalDialog.style.maxHeight = \"85%\";\n modalBody.style(\"overflow-y\", \"auto\").style(\"height\", \"80vh\");\n}\n\nfunction getDataflow(response: any, config: HistoryConfig, parent: Element, dataflowWindowId: string, dataflowUrl: string) {\n response.json().then((json: any) => {\n if (response.status == 200) {\n\n let trialIdSimplified = parent.getAttribute(\"selected-trial-simplified\")!;\n\n config.customWindowTabCommand(trialIdSimplified, dataflowWindowId, \"Dataflow\");\n console.log(json.dataflow);\n\n instance().then(viz => {\n const dataflowWindow = document.getElementById(dataflowWindowId);\n\n // Download SVG Button, excluding hint, and excluding checkbox\n dataflowButtons(dataflowWindow, dataflowWindowId, \"Click on a function call, then (Ctrl or Shift)+click on another one to exclude prior provenience\", json.dataflow)\n\n let selectedNode: Element | undefined;\n let selectedEdge: Element | undefined;\n\n //dataflowWindow!.style.overflowY = dataflowWindow!.style.overflowX = \"auto\";\n let svgElement = viz.renderSVGElement(json.dataflow);\n dataflowWindow!.appendChild(svgElement);\n svgPanZoom(svgElement, {preventMouseEventsDefault: false, dblClickZoomEnabled: false});\n\n for (let nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) {\n\n let presentNode: Element | undefined = svgElement.children[0].children[0].children[nodeIndex];\n if (presentNode.getAttribute(\"class\") == \"node\" && presentNode.children[1].tagName.toLowerCase() == \"polygon\") {\n let presentNodeSelection = d3_select(presentNode);\n\n presentNodeSelection.style(\"cursor\", \"pointer\");\n\n presentNodeSelection.on(\"click\", (event: MouseEvent) => {\n\n if (selectedNode) { selectedNode.children[1].setAttribute(\"stroke\", \"black\"); }\n\n if (selectedNode && (event.ctrlKey || event.shiftKey)) {\n deletePriorNodes(selectedNode, presentNode!, viz, dataflowUrl, config, trialIdSimplified, dataflowWindowId);\n } else {\n selectedNode = svgElement.children[0].children[0].children[nodeIndex];\n selectedNode.children[1].setAttribute(\"stroke\", \"red\");\n }\n });\n } else if (presentNode.getAttribute(\"class\") == \"edge\" && presentNode.children[1].tagName.toLowerCase() == \"path\"){\n let presentNodeSelection = d3_select(presentNode);\n\n presentNodeSelection.style(\"cursor\", \"pointer\");\n\n presentNodeSelection.on(\"click\",()=>{\n if (selectedEdge) {selectedEdge.children[1].setAttribute(\"stroke\", \"black\");}\n selectedEdge = svgElement.children[0].children[0].children[nodeIndex];\n selectedEdge.children[1].setAttribute(\"stroke\", \"red\");\n });\n }\n }\n });\n\n\n } else {\n console.log(\"Dataflow error\");\n }\n\n });\n\n}\n\nfunction checkboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow: HTMLElement) {\n\n let dataflowWindowD3Select = d3_select(dataflowWindow);\n let checkboxID = dataflowWindow.getAttribute(\"id\") + \"OpenNewWindowOption\";\n \n dataflowWindowD3Select.append(\"input\")\n .attr(\"id\", checkboxID)\n .attr(\"type\", \"checkbox\");\n\n dataflowWindowD3Select.append(\"label\")\n .attr(\"for\", checkboxID)\n .text(\"Don't open dataflow with excluded provenance in a new tab\")\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n}\n\nfunction excludePriorProvenanceHint(dataflowWindow: HTMLElement | null, text : string) {\n d3_select(dataflowWindow).append(\"div\").append(\"div\")\n .text(text)\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n}\n\nfunction chooseDataflowExcludedProvenanceWindowId(presentWindowId : string, newWindowId : string){\n if((document.getElementById(presentWindowId + \"OpenNewWindowOption\") as HTMLInputElement).checked) return presentWindowId;\n return newWindowId;\n}\n\nfunction deletePriorNodes(selectedNode: Element, presentNode: Element, viz: any, dataflowUrl: string,\n config: HistoryConfig, trialIdSimplified: string, presentWindowId: string) {\n\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\"));\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\")) + \"/true/\";\n\n let selectedNodeEvaluationTitle = selectedNode.children[0].innerHTML;\n let presentNodeOrderEvaluationTitle = presentNode.children[0].innerHTML;\n\n let firstEvaluationOrder = Number(selectedNodeEvaluationTitle.replace(\"e_\", \"\"));\n let lastEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n if (firstEvaluationOrder > lastEvaluationOrder) {\n lastEvaluationOrder = firstEvaluationOrder;\n firstEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n }\n\n let dataflowUrlLastEvaluation = dataflowUrl + lastEvaluationOrder;\n let dataflowUrlFirstEvaluation = dataflowUrl + firstEvaluationOrder;\n\n let excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(presentWindowId, \"Dataflow excluding prior \" + presentNodeOrderEvaluationTitle + \" \" + selectedNodeEvaluationTitle\n + \" window \" + trialIdSimplified, trialIdSimplified, config);\n\n excludingProvenanceWindow!.textContent = \"Loading...\";\n\n fetch(dataflowUrlLastEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseLastEvaluation: any) => {\n responseLastEvaluation.json().then((jsonLastEvaluation: any) => {\n let dataflowLastEvaluation = jsonLastEvaluation.dataflow;\n fetch(dataflowUrlFirstEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseFirstEvaluation: any) => {\n responseFirstEvaluation.json().then((jsonFirstEvaluation: any) => {\n let dataflowFirstEvaluation = jsonFirstEvaluation.dataflow;\n\n dataflowAMinusDataflowB(dataflowLastEvaluation, dataflowFirstEvaluation, firstEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationOrder);\n\n });\n });\n });\n });\n\n}\n\nfunction getDataflowWindowExcludeSomeProvenance(presentWindowId: string, newWindowId: string, trialIdSimplified: string, config: HistoryConfig) {\n let excludingProvenanceWindowId = chooseDataflowExcludedProvenanceWindowId(presentWindowId, newWindowId);\n\n let excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId);\n\n if (!excludingProvenanceWindow) {\n\n config.customWindowTabCommand(trialIdSimplified, excludingProvenanceWindowId, \"Dataflow excluding some provenance\");\n\n excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId);\n\n }\n return excludingProvenanceWindow;\n}\n\nfunction dataflowAMinusDataflowB(dataflowA: any, dataflowB: any, selectedEvaluationOrder: number, excludingProvenanceWindow: HTMLElement | null, viz: any, dataflowUrl: string, config : HistoryConfig, lastEvaluationId : number) {\n //SET MINUS OPERATION A-B \"The set A−B consists of elements that are in A but not in B. For example if A={1,2,3} and B={3,5}, then A−B={1,2}.\"\n let linesDataflowA = dataflowA.split(\"\\n\");\n let linesDataflowB = dataflowB.split(\"\\n\");\n let newDataflow = linesDataflowA.slice(0);\n\n removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB, newDataflow, selectedEvaluationOrder);\n\n let dataflowIsAligned = addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow, selectedEvaluationOrder, linesDataflowA);\n\n removesDeletedEvaluationsFromAligment(dataflowIsAligned, newDataflow);\n\n console.log(\"------\");\n let newDataflowString = newDataflow.join(\"\\n\");\n console.log(newDataflowString);\n console.log(\"------\");\n\n excludingProvenanceWindow!.textContent = \"\";\n\n dataflowButtons(excludingProvenanceWindow, excludingProvenanceWindow!.getAttribute(\"id\")!, \"(Ctrl or Shift)+click on a function call to exclude prior provenience\", newDataflowString)\n\n let svgElement = viz.renderSVGElement(newDataflowString);\n excludingProvenanceWindow!.appendChild(svgElement);\n svgPanZoom(svgElement, {preventMouseEventsDefault: false, dblClickZoomEnabled: false});\n\n addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId);\n \n}\n\nfunction addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement: any, viz: any, dataflowUrl: string, newDataflowString: any, excludingProvenanceWindow: HTMLElement | null, config : HistoryConfig, lastEvaluationId : number) {\n let selectedEdge : Element | undefined;\n \n for (let nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) {\n\n let selectedNode: Element = svgElement.children[0].children[0].children[nodeIndex];\n if (selectedNode.getAttribute(\"class\") == \"node\" && selectedNode.children[1].tagName.toLowerCase() == \"polygon\") {\n\n let selectedNodeSelection = d3_select(selectedNode);\n \n selectedNodeSelection.style(\"cursor\", \"pointer\");\n \n selectedNodeSelection.on(\"click\", (event: MouseEvent) => {\n\n if (event.ctrlKey || event.shiftKey) deletePriorNodesAfterDeletingPriorNodes(selectedNode, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId);\n\n });\n } else if (selectedNode.getAttribute(\"class\") == \"edge\" && selectedNode.children[1].tagName.toLowerCase() == \"path\"){\n\n let selectedNodeSelection = d3_select(selectedNode);\n\n selectedNodeSelection.style(\"cursor\", \"pointer\");\n\n selectedNodeSelection.on(\"click\",()=>{\n if (selectedEdge) {selectedEdge.children[1].setAttribute(\"stroke\", \"black\");}\n selectedEdge = svgElement.children[0].children[0].children[nodeIndex];\n selectedEdge!.children[1].setAttribute(\"stroke\", \"red\");\n });\n }\n }\n}\n\nfunction deletePriorNodesAfterDeletingPriorNodes(selectedNode: Element, viz: any, dataflowUrl: string, newDataflowString: any, excludingProvenanceWindow: HTMLElement | null, config : HistoryConfig, lastEvaluationId : number) {\n\n let selectedNodeOrderEvaluationTitle = selectedNode.children[0].innerHTML;\n let selectedEvaluationOrder = Number(selectedNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n\n if(lastEvaluationId == selectedEvaluationOrder){\n window.alert(\"You can't remove everything.\")\n return undefined;\n } \n \n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\"));\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\")) + \"/true/\";\n\n \n\n let dataflowUrlPresentEvaluation = dataflowUrl + selectedEvaluationOrder;\n\n\n let excludingProvenanceWindowId = excludingProvenanceWindow?.getAttribute(\"id\");\n excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(excludingProvenanceWindowId!, excludingProvenanceWindowId+\"OneMore\", \"\", config);//TODO get simplifiedtrialid from wxcludingprovenancewindow\n\n excludingProvenanceWindow!.textContent = \"Loading...\";\n\n fetch(dataflowUrlPresentEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseLastEvaluation: any) => {\n responseLastEvaluation.json().then((json: any) => {\n\n let selectedEvaluationDataflow = json.dataflow;\n\n dataflowAMinusDataflowB(newDataflowString, selectedEvaluationDataflow, selectedEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationId);\n\n });\n });\n}\n\nfunction removesDeletedEvaluationsFromAligment(dataflowIsAligned: boolean, newDataflow: any) {\n if (dataflowIsAligned) {\n\n let evaluations: any = [];\n\n for (let lineIndex = 3; lineIndex < newDataflow.length; lineIndex++) {\n let line = newDataflow[lineIndex];\n if (line.includes(\"label\")) evaluations.push(line.replace(/\\[[^\\]]*?\\];/, \"\").split(\" \")[4].trim());\n\n else if (line.includes(\"{rank=\")) {\n let alignedEvaluations = line.split(\" \");\n\n for (let alignedEvalIndex = 5; alignedEvalIndex < alignedEvaluations.length; alignedEvalIndex++) {\n let alignedEval = alignedEvaluations[alignedEvalIndex].replace(\"}\\r\", \"\").trim();\n\n if (!evaluations.includes(alignedEval)) newDataflow[lineIndex] = newDataflow[lineIndex].replace(alignedEval, \"\");\n }\n }\n\n else if (line.includes(\"->\")) break;\n }\n }\n}\n\nfunction removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB: any, newDataflow: any, selectedEvaluationOrder: number) {\n for (let i = 3; i < linesDataflowB.length - 2; i++) {\n let indexOfDataflowLineToRemove;\n\n if (linesDataflowB[i].includes(\"->\") && linesDataflowB[i].includes(\"[\")) {\n\n let lineToRemove = linesDataflowB[i].replace(/\\[[^\\]]*\\]/, \"\");\n\n indexOfDataflowLineToRemove = newDataflow.findIndex((dataflowLine: string) => {\n return dataflowLine.replace(/\\[[^\\]]*\\]/, \"\") == lineToRemove;\n });\n\n\n } else indexOfDataflowLineToRemove = newDataflow.indexOf(linesDataflowB[i]);\n\n if (indexOfDataflowLineToRemove > -1 && (!linesDataflowB[i].includes(\"_\" + selectedEvaluationOrder + \" [\"))) newDataflow.splice(indexOfDataflowLineToRemove, 1);\n\n }\n}\n\nfunction addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow: any, selectedEvaluationOrder: number, linesDataflowA: any) {\n let tempArray: any[] = [];\n let isAligned = false;\n\n newDataflow.forEach((line: string) => {\n if (!isAligned && line.includes(\"{rank\")) isAligned = true;\n\n\n if (line.includes(\"->\")) {\n let evaluationWithoutSettings = line.split(\" \")[6];\n if (Number(evaluationWithoutSettings.replace(\"e_\", \"\").replace(\"a_\", \"\")) < selectedEvaluationOrder) { // TODO revise if firstEvaluationOrder is right\n let lineToAdd = linesDataflowA.find((string: string) => string.includes(evaluationWithoutSettings + \" [\"));\n if (newDataflow.indexOf(lineToAdd) < 0) tempArray.push(lineToAdd);\n }\n }\n });\n\n tempArray.forEach(item => newDataflow.splice(3, 0, item));\n\n return isAligned\n}\n\nfunction buildDataflowModal(modal: d3_Selection, modalBody: d3_Selection,\n parent: Element, config: HistoryConfig, trialId: string) {\n\n let submitButton;\n let evaluationList;\n let form: d3_Selection;\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Dataflow\";\n\n fetch(\"/dataflow/evaluations/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n evaluationList = json.evaluations;\n let selectedEvaluation: string | null;\n let dataflowTextInputEvaluation: HTMLSelectElement;\n\n showModal(modal);\n\n if (modalBody) {\n\n scrollableModal(modalBody);\n\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormCheckInput(form, \"dataFlowShowType\", \"Show type nodes\");\n createFormCheckInput(form, \"dataFlowHideTimestamps\", \"Hide timestamps\");\n createFormCheckInput(form, \"dataFlowHideInternals\", \"Show variables and functions which name starts with a leading underscore\");\n createFormCheckInput(form, \"dataFlowHideNotCode\", \"Hide evaluations that aren't from the code\");\n createFormCheckInput(form, \"dataFlowActivationNames\", \"Display nodes with their activation names instead\");\n createFormCheckInput(form, \"dataFlowHideFunc\", \"Hide func type evaluations\");\n\n createFormSelectInput(form, \"dataflowShowAccesses\", \"Show file accesses\", 0, 4, 1, \"dataflowShowAccessesHelp\",\n \"(default: Shows each file once (hide external accesses))\",\n [\"Hides file accesses\", \"Shows each file once (hide external accesses)\", \"Shows each file once (show external accesses)\",\n \"Shows all accesses (except external accesses)\", \"Shows all accesses (including external accesses)\"]);\n\n createFormSelectInput(form, \"dataflowEvaluation\", \"Combine evaluation nodes\", 0, 2, 1, \"dataflowEvaluationHelp\",\n \"(default: Combines evaluation nodes by assignment)\",\n [\"Not combine evaluation nodes\", \"Combines evaluation nodes by assignment\", \"Combines evaluation nodes by value\"]);\n\n createFormSelectInput(form, \"dataflowGroup\", \"Align evalutions in the same column\", 0, 2, 0,\n \"dataflowGroupHelp\",\n \"(default: Does no align). With this option, all variables in a loop appear grouped, reducing the width of the graph. It may affect the graph legibility. The alignment is independent for each activation.\",\n [\"Does no align\", \"Aligns by line\", \"Aligns by line and column\"]);\n\n createFormSelectInput(form, \"dataflowMode\", \"Graph mode\", 0, 4, 1, \"dataflowModeHelp\",\n \"(default: coarseGrain). 'activation' presents only function activations and file accesses. Dependencies on the dataflow are clustered by depth(-d). 'coarseGrain' is the same as the activation dataflow, but with the addition of parameters and variable assignment of function activations. 'looplessCoarseGrain' is the same as the coarseGrain dataflow, but it doesn't repeat function activations when they're in the same line in a loop. 'fineGrain' is the same as the coarseGrain dataflow with the addition of variables, all user defined evaluations and data values. 'all' presents a dataflow with all evaluations and function activations. Dependencies on the dataflow are not clustered.\",\n [\"activation\", \"coarseGrain\", \"looplessCoarseGrain\", \"fineGrain\", \"all\"]);\n\n createFormNumberInput(form, \"dataflowDepth\", \"Visualization depth\", 0, 0, \"dataflowDepthHelp\", \"(default: 0) 0 represents infinity. This parameter is ignored when the mode is \\\"all\\\"\");\n createFormNumberInput(form, \"dataflowValueLength\", \"Maximum length of values\", 0, 0, \"dataflowValueLengthHelp\",\n \"(default: 0). 0 indicates that values should be hidden.The values appear on the second line of node lables. E.g. if it is set to '10', it will show 'data.dat', but it will transform 'data2.dat' in to 'da...dat' to respect the length restriction (note that '' is part of the value). Minimum displayable value: 5. Suggested: 55.\");\n createFormNumberInput(form, \"dataflowName\", \"Maximum length of names\", 0, 55, \"dataflowNameHelp\",\n \"(default: 55). 0 indicates that values should be hidden. Minimum displayable value: 5. Suggested: 55.\");\n\n let dataflowEvaluationInput = createFormTextInput(form, \"dataflowTextInputEvaluation\", \"Evaluation was derived from: \", \"dataflowSelectEvaluationHelp\", \"Filter that shows only one evaluation and the ones that derived it\");\n\n form.append(\"div\").attr(\"id\", \"autocompleteSuggestionsResults\");\n\n dataflowTextInputEvaluation = (document.getElementById(\"dataflowTextInputEvaluation\"))\n\n\n addsAutocompleteToDataflowWDF(dataflowEvaluationInput, dataflowTextInputEvaluation, evaluationList);\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Generate dataflow\");\n\n }\n\n submitButton!.on(\"click\", function () {\n let dataFlowShowType = (document.getElementById(\"dataFlowShowType\")).checked;\n let dataFlowHideTimestamps = (document.getElementById(\"dataflowMode\")).checked;\n let dataFlowHideInternals = (document.getElementById(\"dataFlowHideInternals\")).checked;\n let dataFlowHideNotCode = (document.getElementById(\"dataFlowHideNotCode\")).checked;\n let dataFlowActivationNames = (document.getElementById(\"dataFlowActivationNames\")).checked;\n let dataFlowHideFunc = (document.getElementById(\"dataFlowHideFunc\")).checked;\n\n let dataflowFileAccesses = (document.getElementById(\"dataflowShowAccesses\")).selectedOptions[0].index;\n let dataflowEvaluation = (document.getElementById(\"dataflowEvaluation\")).selectedOptions[0].index;\n let dataflowGroup = (document.getElementById(\"dataflowGroup\")).selectedOptions[0].index;\n let dataflowMode = (document.getElementById(\"dataflowMode\")).selectedOptions[0].value;\n\n let dataflowDepth = (document.getElementById(\"dataflowDepth\")).value;\n let dataflowValueLength = (document.getElementById(\"dataflowValueLength\")).value;\n let dataflowName = (document.getElementById(\"dataflowName\")).value;\n\n let trialId = parent.getAttribute(\"selected-trial\");\n\n selectedEvaluation = dataflowTextInputEvaluation.getAttribute(\"selectedEvaluationID\");\n\n let dataflowUrl = \"/commands/dataflow/\" + trialId + \"/\" + dataFlowShowType + \"/\" + dataFlowHideTimestamps + \"/\" +\n dataFlowHideInternals + \"/\" + dataFlowHideNotCode + \"/\"+ dataFlowActivationNames + \"/\"+ dataFlowHideFunc + \"/\" +dataflowFileAccesses + \"/\" + dataflowEvaluation + \n \"/\" + dataflowGroup + \"/\" + dataflowDepth + \"/\" + dataflowValueLength + \"/\" + dataflowName + \"/\" + dataflowMode;\n dataflowUrl += (selectedEvaluation && !selectedEvaluation.includes(\"undefined\")) ? \"/true/\" + selectedEvaluation : \"/false/0\";\n\n let dataflowWindowId = \"Dataflow window \" + trialId;\n\n /* if (document.getElementById(dataflowWindowId)) {\n window.alert(\"Close trial \" + trialId + \" dataflow tab before generating a new dataflow\");\n return;\n } */\n\n if (document.getElementById(dataflowWindowId)) dataflowWindowId += crypto.randomUUID();\n\n fetch(dataflowUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response: any) => {\n console.log(dataflowMode);\n cleanModalBodyAndClose(modal, modalBody);\n getDataflow(response, config, parent, dataflowWindowId, dataflowUrl);\n });\n\n\n\n });\n\n });\n });\n\n\n}\n\nfunction addsAutocompleteToDataflowWDF(dataflowEvaluationInput: d3_Selection, dataflowTextInputEvaluation: HTMLSelectElement, evaluationList: any) {\n dataflowEvaluationInput.on(\"keyup\", () => {\n\n let input = dataflowTextInputEvaluation.value;\n let autocompleteSuggestionsResults = (document.getElementById(\"autocompleteSuggestionsResults\"));\n let evaluationInputHint = (document.getElementById(\"dataflowSelectEvaluationHelp\"));\n\n autocompleteSuggestionsResults.innerHTML = \"\";\n\n let suggestions: any[];\n\n if (input == \"\") {\n autocompleteSuggestionsResults.setAttribute(\"style\", \"\");\n evaluationInputHint.style.opacity = \"1\";\n suggestions = [];\n dataflowTextInputEvaluation.setAttribute(\"selectedEvaluationID\", \"undefined\");\n }\n else {\n autocompleteSuggestionsResults.style.border = \"1px solid #ccc\";\n autocompleteSuggestionsResults.style.padding = \"3px\";\n autocompleteSuggestionsResults.style.marginTop = \"-3rem\";\n evaluationInputHint.style.opacity = \"0\";\n\n suggestions = evaluationList!.filter((evaluation: any) => {\n if (evaluation.name.includes(input)) return evaluation;\n });\n\n autocompleteSuggestionsResults.innerHTML = \"
            \";\n\n\n for (let i = 0; i < suggestions.length; i++) {\n let evaluationSuggestionId = suggestions[i].evaluation_id + \" \" + \"evaluationSuggestionItem\";\n\n d3_select(document.getElementById(\"dataflowEvaluationSuggestionsBoxId\")).append(\"li\").attr(\"id\", evaluationSuggestionId)\n .style(\"padding\", \"5px 0\")\n .style(\"z-index\", 1)\n .text(\"Evaluation: \" + suggestions[i].name + \" \" + \"Code_line: \" + suggestions[i].first_char_line)\n .on(\"click\", () => {\n dataflowTextInputEvaluation.value = suggestions[i].name;\n input = suggestions[i].name;\n dataflowTextInputEvaluation.setAttribute(\"selectedEvaluationID\", suggestions[i].evaluation_id);\n })\n .on(\"mouseover\", () => { d3_select(document.getElementById(evaluationSuggestionId)).style(\"background-color\", \"#eee\"); })\n .on(\"mouseout\", () => { d3_select(document.getElementById(evaluationSuggestionId)).style(\"background-color\", \"\"); });\n }\n\n\n\n }\n\n });\n}\n\nfunction downloadDataflowAsSVG(dataflowWindow: HTMLElement | null, dataflowWindowId: string, dataflowDOT : string, appendDiv : boolean) {\n let div = appendDiv ? d3_select(dataflowWindow).append(\"div\").attr(\"id\", dataflowWindowId + \"-downloadDiv\") : d3_select(document.getElementById(dataflowWindowId + \"-downloadDiv\"));\n div.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", dataflowWindowId + \"-downloadSVG\")\n .attr(\"href\", \"#\")\n .style(\"color\", \"black\")\n .style(\"margin-right\", \"10px\")\n .attr(\"title\", \"Download dataflow SVG\")\n .on(\"click\", () => {\n instance().then(viz => {\n let svgElement = viz.renderSVGElement(dataflowDOT);\n fs.saveAs(new Blob([svgElement.outerHTML], { type: \"image/svg+xml\" }), \"dataflow.svg\");\n });\n //fs.saveAs(new Blob([dataflowWindow!.getElementsByTagName(\"svg\")[0].outerHTML], { type: \"image/svg+xml\" }), \"dataflow.svg\");\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n}\n\nfunction downloadDataflowAsDOT(dataflowWindow: HTMLElement | null, dataflowWindowId: string, dataflowDOT : string, appendDiv: boolean) {\n let div = appendDiv ? d3_select(dataflowWindow).append(\"div\").attr(\"id\", dataflowWindowId + \"-downloadDiv\") : d3_select(document.getElementById(dataflowWindowId + \"-downloadDiv\"));\n div.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", dataflowWindowId + \"-downloadDOT\")\n .attr(\"href\", \"#\")\n .style(\"color\", \"black\")\n .attr(\"title\", \"Download dataflow DOT\")\n .on(\"click\", () => {\n fs.saveAs(new Blob([dataflowDOT.trim()], { type: \"text/plain;charset=utf-8\" }), \"dataflow.dot\");\n })\n .append(\"i\")\n .classed(\"fa fa-file-text\", true);\n}\n\nfunction dataflowButtons(dataflowWindow: HTMLElement | null, dataflowWindowId: string, excludeProvenanceHint : string, dataflowDOT : string){\n downloadDataflowAsSVG(dataflowWindow, dataflowWindowId, dataflowDOT, true);\n\tdownloadDataflowAsDOT(dataflowWindow, dataflowWindowId, dataflowDOT, false)\n\texcludePriorProvenanceHint(dataflowWindow, excludeProvenanceHint);\n\tcheckboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow!);\n}\n\nfunction getRestoreOrCollabCommand(serverUrl: string, form: d3_Selection,\n modalBody: d3_Selection) {\n fetch(serverUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then((json) => {\n form.remove();\n if (response.status == 200 && (!json.terminal_text.includes(\"not\") || (serverUrl.includes(\"edit\")))) {\n addAlert(modalBody, \"alert-success\", \"Success!\", json.terminal_text);\n } else {\n addAlert(modalBody, \"alert-danger\", \"Error!\", json.terminal_text);\n }\n\n });\n });\n}\n\nfunction changeTitle(parent: Element, commandTitle: string) {\n let trialIdTitle = parent.getAttribute(\"selected-trial-simplified\");\n document.getElementById(\"exampleModalTitle\")!.textContent = commandTitle + trialIdTitle;\n}\n\nfunction cleanModalBodyAndClose(modal: d3_Selection,\n modalBody: d3_Selection) {\n document.getElementsByClassName(\"modal-body\")[0].textContent = \"\";\n modalBody.style(\"height\", null);\n hideModal(modal);\n}\n\nfunction addAlert(div: d3_Selection, alertType: string, title: string, text: string) {\n let feedbackAlert = div.append(\"div\").classed(\"alert \" + alertType, true).attr(\"role\", \"alert\");\n feedbackAlert.append(\"h4\").text(title).append(\"button\").classed(\"close\", true).attr(\"type\", \"button\").text(\"x\").on(\"click\", () => {\n feedbackAlert.remove();\n });\n feedbackAlert.append(\"p\").text(text);\n}\n\nfunction createFormCheckInput(form: d3_Selection, checkInputId: string, text: string) {\n let checkDiv = form.append(\"div\").classed(\"form-check\", true);\n checkDiv.append(\"input\").classed(\"form-check-input\", true).attr(\"value\", \"\").attr(\"id\", checkInputId)\n .attr(\"type\", \"checkbox\");\n checkDiv.append(\"label\").classed(\"form-check-label\", true).attr(\"for\", checkInputId)\n .text(text);\n}\n\nfunction createFormTextInput(form: d3_Selection, textInputId: string, text: string, helpId?: string, helpText?: string) {\n let textDiv = form.append(\"div\").classed(\"form-group\", true);\n textDiv.append(\"label\").attr(\"for\", textInputId).text(text);\n let textInput = textDiv.append(\"textarea\").classed(\"form-control\", true).attr(\"id\", textInputId);\n if (helpId && helpText) {\n textInput.attr(\"aria-describedby\", helpId);\n textDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n return textDiv;\n}\n\nfunction createFormSelectInput(form: d3_Selection,\n selectId: string, selectText: string, minOptionNumber: number, maxOptionNumber: number, defaultOption?: number,\n helpId?: string, helpText?: string, optionsLabels?: Array) {\n let selectDiv = form.append(\"div\").classed(\"form-group\", true);\n let selectInput = selectDiv.append(\"label\").attr(\"for\", selectId).text(selectText)\n .append(\"select\").classed(\"form-control\", true).attr(\"id\", selectId);\n\n if (helpId && helpText) {\n selectInput.attr(\"aria-describedby\", helpId);\n selectDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n for (var optionNumber = minOptionNumber; optionNumber <= maxOptionNumber; optionNumber++) {\n let inputLabel = optionsLabels ? optionsLabels[optionNumber] : optionNumber;\n let input = selectInput.append(\"option\").text(inputLabel);\n if (defaultOption && optionNumber == defaultOption) input.attr(\"selected\", \"selected\");\n }\n}\n\nfunction createFormNumberInput(form: d3_Selection, id: string, text: string, minValue: number, defaultValue: number,\n helpId?: string, helpText?: string) {\n let numberDiv = form.append(\"div\").classed(\"form-group\", true);\n numberDiv.append(\"label\").classed(\"form-check-label\", true).attr(\"for\", id)\n .text(text);\n\n numberDiv.append(\"input\").attr(\"type\", \"number\").attr(\"id\", id).attr(\"min\", minValue).attr(\"value\", defaultValue)\n .attr(\"oninput\", \"validity.valid||(value='');\").attr(\"aria-describedby\", \"dataflowDepthHelp\");\n\n if (helpId && helpText) {\n numberDiv.attr(\"aria-describedby\", helpId);\n numberDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n}\n\nfunction getTextInputFormByID(id: string, replace?: boolean) {\n let formTextInput: string | boolean = (document.getElementById(id)).value\n if (replace) formTextInput.replace(\"/\", \"%2F\").replace(\"\\\\\", \"%5C\");\n if (!formTextInput) formTextInput = false;\n return formTextInput;\n}\n\nfunction hideModal(modal: d3_Selection) {\n if (modal) modal.style(\"display\", \"none\").style(\"padding-right\", \"\").classed(\"show\", false).attr(\"aria-hidden\", \"true\");\n}\n\nfunction showModal(modal: d3_Selection) {\n if (modal) modal.style(\"display\", \"block\").style(\"padding-right\", \"17px\").classed(\"show\", true).attr(\"aria-hidden\", \"false\");\n}","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {json} from '@noworkflow/utils';\n\nimport {BaseActivationGraphWidget} from './base_activation_graph';\n\nimport {TrialGraph, TrialGraphData} from '@noworkflow/trial';\n\n\nexport\nclass TrialGraphWidget extends BaseActivationGraphWidget {\n\n name: string;\n cls: string;\n t1: string;\n t2: string;\n graph: TrialGraph;\n d3node: d3_Selection;\n\n static url(trialId: string, selectedGraph: string, useCache: boolean) {\n let cache = useCache ? \"1\" : \"0\"\n return (\"trials/\"\n + trialId + \"/\" + selectedGraph + \"/\" + cache + \".json\"\n );\n }\n\n constructor(name: string, cls: string, t1: string, t2: string) {\n super({ node: BaseActivationGraphWidget.createNode(cls) });\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".graph-type\").property(\"value\"),\n this.d3node.select(\".use-cache\").property(\"checked\"),\n )\n })\n this.addClass('content');\n this.addClass('trial-widget');\n this.title.label = name;\n this.title.closable = true;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n this.t1 = t1;\n this.t2 = t2;\n }\n\n setGraph(data: TrialGraphData, config: any={}) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new TrialGraph(this.cls, sub, config);\n this.graph.load(data, this.t1, this.t2);\n\n }\n\n graphDefinition(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData) {\n var result = super.graphDefinition(selectedGraph, useCache, genDataflow, data);\n return Object.assign({}, result, {\n queryTooltip: selectedGraph != \"definition_tree\"\n });\n }\n\n load(selectedGraph: string = \"namespace_match\", useCache: boolean = true) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n json(\"Trial\", sub, TrialGraphWidget.url(this.t1, selectedGraph, useCache), (data: TrialGraphData) => {\n this.configureGraph(selectedGraph, useCache, true, data);\n })\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graph) {\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n }\n\n}\n\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\nimport { Message } from '@lumino/messaging';\ninterface IAddMember {\n userId: string;\n }\ninterface IUser {\n id: string;\n login: string\n }\ninterface IGroup {\n id: string;\n name: string;\n members: Array;\n}\n\nexport \nclass GroupWidget extends Widget {\n\n d3node: d3_Selection;\n tBody: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n userIn: d3_Selection;\n addMemberForm: d3_Selection;\n groups: Array;\n users: Array;\n currentGroup: String;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor() {\n super({ node: GroupWidget.createNode() });\n this.d3node = d3_select(this.node);\n\n \n this.addClass('content');\n this.title.label = \"Group Information\";\n this.title.closable = false\n this.title.caption = `Group`;\n this.setNode();\n }\n protected onBeforeShow(msg: Message): void {\n if(!this.groups){\n this.setGroups();\n this.setUsers();\n }\n \n }\n async setUsers(){\n var _thiss=this;\n _thiss.userIn.html(\"\");\n var response= await fetch(\"users\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.users= new Array();\n\n var obj=await response.json();\n\n\n obj.forEach( function(item: any){\n \n _thiss.users.push({\n id: item.id,\n login: item.userLogin\n });\n }); \n }else{\n this.showNode(_thiss.errorFeedback);\n }\n _thiss.users.forEach(function (obj: IUser) {\n\n _thiss.userIn.append(\"option\").attr(\"value\",obj.id).text(obj.login);\n\n });\n\n }\n resfreshGroups(){\n this.tBody.html(\"\");\n this.setGroups();\n }\n async setGroups(){\n var _thiss=this;\n var response= await fetch(\"groups\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.groups= new Array();\n\n var obj=await response.json();\n\n obj.forEach( function(item: any){\n var group={\n id: item.id,\n name:item.name,\n members: new Array()\n }\n item.members.forEach( function(user: any){\n group.members.push( {\n id: user.id,\n login: user.userLogin\n });\n });\n _thiss.groups.push(group);\n }); \n }else{\n this.showNode(_thiss.errorFeedback);\n }\n\n this.groups.forEach(function (obj: any) {\n _thiss.addGrpRow(obj);\n });\n\n }\n async deleteGrp(grpId:String){\n var response= await fetch(\"/groups/\" +grpId, {\n method: 'DELETE', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n this.showNode(this.successFeedback);\n this.resfreshGroups();\n \n }else{\n this.showNode(this.errorFeedback);\n }\n\n\n }\n addGrpRow(grp : IGroup){\n let _thiss=this;\n let item=this.tBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(grp.id);\n item.append(\"td\").text(grp.name);\n var membersText=\"\";\n grp.members.forEach( function(user: IUser){\n membersText+= user.login + \" \"\n });\n item.append(\"td\").text(membersText);\n var actions =item.append(\"td\")\n var addMemberButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add User\");\n addMemberButton.on(\"click\",function(){\n _thiss.showNode(_thiss.addMemberForm);\n _thiss.currentGroup=grp.id\n\n });\n var deleteGroupButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Delete Group\");\n deleteGroupButton.on(\"click\",function(){\n\n if(confirm(\"Are you sure you want to delete group: \" + grp.name + \" ?\" )){\n _thiss.deleteGrp(grp.id);\n }\n\n });\n deleteGroupButton.style(\"margin-left\",4);\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n createAddGroupForm(projectsDiv:d3_Selection){\n var _thiss=this;\n let inputsDiv=projectsDiv.append(\"div\");\n let nameIn=this.addFormInput(inputsDiv,\"groupNameInput\",\"Name: \",\"input\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addGrpButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Group\");\n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n let newGrp={\n name:nameIn.property(\"value\"),\n members: new Array()\n };\n fetch(\"groups\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newGrp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n newGrp.id=obj.id;\n _thiss.addGrpRow(newGrp);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addGrpButton);\n _thiss.showNode(_thiss.successFeedback);\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n }\n }); \n \n \n });\n\n addGrpButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addGrpButton);\n });\n\n }\n createAddMemberForm(projectsDiv:d3_Selection){\n var _thiss=this;\n _thiss.addMemberForm=projectsDiv.append(\"div\");\n var inputsDiv =_thiss.addMemberForm;\n this.userIn=this.addFormInput(inputsDiv,\"groupUsersInput\",\"User\",\"select\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n \n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n\n var select = _thiss.userIn.node() as HTMLSelectElement;\n if(select!=null){\n var option = select.options[select.selectedIndex];\n\n \n \n \n let newGrp={\n userId: option.value,\n };\n fetch(\"groups/\"+_thiss.currentGroup+\"/users\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newGrp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n _thiss.hideNode(_thiss.addMemberForm);\n _thiss.showNode(_thiss.successFeedback);\n _thiss.resfreshGroups();\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n \n }\n }); \n }\n \n });\n _thiss.hideNode(_thiss.addMemberForm);\n\n }\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n projectsDiv.append(\"h2\")\n .text(\"Groups:\")\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"\") ; \n this.hideNode(this.errorFeedback);\n \n this.hideNode(this.successFeedback);\n\n this.createAddMemberForm(projectsDiv);\n projectsDiv.append(\"br\");\n this.createAddGroupForm(projectsDiv);\n\n \n let table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n let header=table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"name\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Members\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Actions\");\n \n this.tBody=table.append(\"tbody\");\n\n \n }\n\n}","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {json} from '@noworkflow/utils';\n\n\nimport {\n ModuleData, FileAccessData, EnvironmentItemData,\n DiffInfoData, DiffModuleData, DiffEnvironmentData, DiffAccessData,\n FilterObject\n} from './structures';\n\nimport {ModulesInfoWidget} from './modules_info';\nimport {EnvironmentInfoWidget} from './environment_info';\nimport {FileAccessesInfoWidget} from './file_accesses_info';\nimport {TrialInfoWidget} from './trial_info';\n\nexport\nclass DiffInfoWidget extends Widget {\n\n d3node: d3_Selection;\n display1: string;\n display2: string;\n\n static url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/info.json\"\n );\n }\n\n static modules_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/dependencies.json\"\n );\n }\n\n static environment_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/environment.json\"\n );\n }\n\n static accesses_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/file_accesses.json\"\n );\n }\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n d3node.append('div')\n .classed('trial-info', true)\n\n return node;\n }\n\n constructor(display1:string, display2: string, trial1: string, trial2: string) {\n super({ node: DiffInfoWidget.createNode() });\n this.display1 = display1;\n this.display2 = display2;\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info');\n this.title.label = display1 + \"<->\" + display2 + \" - Diff Info\";\n this.title.closable = true;\n this.title.caption = `Diff ${display1}-${display2} Information`;\n this.load(trial1, trial2);\n }\n\n load(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"trial-info\")[0];\n json(\"Info\", sub, DiffInfoWidget.url(trial1, trial2), (data: DiffInfoData) => {\n this.createMain(data);\n this.loadModules(trial1, trial2);\n this.loadEnvironment(trial1, trial2);\n this.loadFileAccess(trial1, trial2);\n })\n }\n\n createMain(data: DiffInfoData) {\n let trial = data.trial;\n let trial1 = data.trial1;\n let trial2 = data.trial2;\n\n let content = this.d3node.select('.trial-info').html(\"\")\n .append('div')\n .classed('side-info', true)\n let main = content.append('div')\n .classed('main', true)\n\n let h1 = main.append(\"h1\")\n\n // Title\n h1.append(\"span\")\n .classed(\"dbefore\", true)\n .text(\"Trial \" + this.display1);\n\n h1.append(\"span\")\n .text(\" <-> \");\n\n h1.append(\"span\")\n .classed(\"dafter\", true)\n .text(\"Trial \" + this.display2);\n\n // Code hash\n if (trial.code_hash == undefined) {\n main.append(\"h3\")\n .classed(\"hash\", true)\n .text(trial1.code_hash || \"\");\n } else {\n main.append(\"h3\")\n .classed(\"hash dbefore\", true)\n .text(trial.code_hash[0] || \"\");\n main.append(\"h3\")\n .classed(\"hash dafter\", true)\n .text(trial.code_hash[1] || \"\");\n }\n this.info(main, \"id\", \"Id\", trial1.id, trial2.id);\n this.info(main, \"script\", \"Script\", trial1.script, trial2.script);\n this.info(main, \"start\", \"Start\", trial1.start, trial2.start);\n this.info(main, \"finish\", \"Finish\", trial1.finish, trial2.finish);\n this.info(main, \"duration\", \"Duration\", trial1.duration_text, trial2.duration_text);\n\n\n if (trial.arguments == undefined) {\n if (trial1.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial1.arguments);\n }\n } else {\n if (trial1.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc dbefore\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial1.arguments);\n }\n if (trial2.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc dafter\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial2.arguments);\n }\n }\n\n content.append(\"div\")\n .classed(\"modules\", true);\n\n content.append(\"div\")\n .classed(\"environment\", true)\n\n content.append(\"div\")\n .classed(\"file-accesses\", true)\n }\n\n filter_trial(filter: FilterObject, filterfn: (strial: number) => void) {\n let select_trial = filter.filterdiv.append(\"select\");\n select_trial.append(\"option\")\n .attr(\"value\", \"3\")\n .text(\"Do not filter Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"First Trial Only\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"5\")\n .text(\"Exists in First Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Second Trial Only\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"6\")\n .text(\"Exists in Second Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"4\")\n .text(\"Both Trials Only\");\n select_trial.property(\"value\", \"3\");\n\n let newfilter = () => {\n filterfn(Number(select_trial.property(\"value\")));\n }\n select_trial.on(\"change\", newfilter);\n filter.on_change(newfilter);\n }\n\n loadModules(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"modules\")[0];\n\n json(\"Modules\", sub, DiffInfoWidget.modules_url(trial1, trial2), (data: DiffModuleData) => {\n let modules = this.d3node.select(\".modules\").html(\"\");\n if ((data.modules_added.length > 0) ||\n (data.modules_removed.length > 0) ||\n (data.modules_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(modules, \"Modules\");\n let foldable = modules.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = ModulesInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"mod-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n if ((strial & 1) == 1) {\n for (var element of data.modules_removed) {\n if (!filter.valid(data.t1_path, element)) {\n continue;\n }\n this.mod_li(ul, 'libefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.modules_added) {\n if (!filter.valid(data.t2_path, element)) {\n continue;\n }\n this.mod_li(ul, 'liafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.modules_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(data.t1_path, rem) ||\n !filter.valid(data.t2_path, add)) {\n continue;\n }\n let li = ul.append(\"li\")\n\n li.append(\"div\")\n .classed(\"name\", true)\n .text(rem.name);\n\n let version = li.append(\"div\")\n .classed(\"version\", true)\n version.append(\"div\")\n .classed(\"dbefore\", true)\n .text(rem.version)\n version.append(\"div\")\n .classed(\"dafter\", true)\n .text(add.version)\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n li.append(\"div\")\n .classed(\"hash dbefore\", true)\n .attr(\"title\", rem.path)\n .text(rem.code_hash);\n\n li.append(\"div\")\n .classed(\"hash dafter\", true)\n .attr(\"title\", add.path)\n .text(add.code_hash);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n loadEnvironment(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"environment\")[0];\n\n json(\"Environment\", sub, DiffInfoWidget.environment_url(trial1, trial2), (data: DiffEnvironmentData) => {\n let environment = this.d3node.select(\".environment\").html(\"\");\n if ((data.env_added.length > 0) ||\n (data.env_removed.length > 0) ||\n (data.env_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(environment, \"Environment\");\n let foldable = environment.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = EnvironmentInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"env-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n if ((strial & 1) == 1) {\n for (var element of data.env_removed) {\n if (!filter.valid(element)) {\n continue;\n }\n this.env_li(ul, 'dbefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.env_added) {\n if (!filter.valid(element)) {\n continue;\n }\n this.env_li(ul, 'dafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.env_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(rem) ||\n !filter.valid(add)) {\n continue;\n }\n this.env_cli(ul, rem, add);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n })\n }\n\n loadFileAccess(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"file-accesses\")[0];\n\n json(\"File Accesses\", sub, DiffInfoWidget.accesses_url(trial1, trial2), (data: DiffAccessData) => {\n let accesses = this.d3node.select(\".file-accesses\").html(\"\");\n if ((data.fa_added.length > 0) ||\n (data.fa_removed.length > 0) ||\n (data.fa_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(accesses, \"File Accesses\");\n let foldable = accesses.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = FileAccessesInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"fac-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n\n if ((strial & 1) == 1) {\n for (var element of data.fa_removed) {\n if (!filter.valid(data.t1_path, element)) {\n continue;\n }\n this.fa_li(ul, 'libefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.fa_added) {\n if (!filter.valid(data.t2_path, element)) {\n continue;\n }\n this.fa_li(ul, 'liafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.fa_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(data.t1_path, rem) ||\n !filter.valid(data.t2_path, add)) {\n continue;\n }\n let li = ul.append(\"li\")\n\n this.fa_cfield(li, 'name', 'Name', rem.name, add.name);\n this.fa_cfield(li, 'mode', 'Mode', rem.mode, add.mode);\n this.fa_cfield(li, 'buffering', 'Buffering', rem.buffering, add.buffering);\n li.append(\"div\")\n .classed(\"clear\", true)\n this.fa_cfield(li, 'timestamp', 'Time', rem.timestamp, add.timestamp);\n this.fa_cfield(li, 'content_hash_before hash', 'Content hash before', rem.content_hash_before, add.content_hash_before);\n this.fa_cfield(li, 'content_hash_after hash', 'Content hash after', rem.content_hash_after, add.content_hash_after);\n this.fa_cfield(li, 'stack', 'Stack', rem.stack, add.stack);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n private info(main: d3_Selection, cls: string, label: string, value1: any, value2: any) {\n if (value1 == value2) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr.append(\"span\")\n .classed(cls, true)\n .text(value1);\n } else {\n let attr1 = main.append(\"span\")\n .classed(\"attr dbefore\", true);\n attr1.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr1.append(\"span\")\n .classed(cls, true)\n .text(value1);\n\n let attr2 = main.append(\"span\")\n .classed(\"attr dafter\", true);\n attr2.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr2.append(\"span\")\n .classed(cls, true)\n .text(value2);\n }\n }\n\n private mod_li(element: d3_Selection, cls: string, mod: ModuleData) {\n let li = element.append(\"li\")\n .classed(cls, true);\n\n li.append(\"div\")\n .classed(\"name\", true)\n .text(mod.name);\n\n li.append(\"div\")\n .classed(\"version\", true)\n .text(mod.version);\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n li.append(\"div\")\n .classed(\"hash\", true)\n .attr(\"title\", mod.path)\n .text(mod.code_hash);\n }\n\n private env_field(element: d3_Selection, env: EnvironmentItemData) {\n element.append(\"span\")\n .classed(\"key\", true)\n .text(env.name);\n\n element.append(\"span\")\n .classed(\"equal\", true)\n .text(\" = \");\n\n element.append(\"span\")\n .classed(\"value\", true)\n .text(env.value);\n\n }\n\n private env_li(element: d3_Selection, cls: string, env: EnvironmentItemData) {\n this.env_field(\n element.append(\"li\")\n .classed(cls, true),\n env\n )\n }\n\n private env_cli(element: d3_Selection, rem: EnvironmentItemData, add: EnvironmentItemData) {\n let li = element.append(\"li\");\n this.env_field(\n li.append(\"div\")\n .classed(\"dbefore\", true),\n rem\n )\n this.env_field(\n li.append(\"div\")\n .classed(\"dafter\", true),\n add\n )\n }\n\n private fa_field(element: d3_Selection, cls: string, title: string, value: string) {\n element.append(\"div\")\n .classed(cls, true)\n .attr(\"title\", title)\n .text(value);\n }\n\n private fa_li(element: d3_Selection, cls: string, fa: FileAccessData) {\n let li = element.append(\"li\")\n .classed(cls, true);\n\n this.fa_field(li, 'name', 'Name', fa.name);\n this.fa_field(li, 'mode', 'Mode', fa.mode);\n this.fa_field(li, 'buffering', 'Buffering', fa.buffering);\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n this.fa_field(li, 'timestamp', 'Time', fa.timestamp);\n this.fa_field(li, 'content_hash_before hash', 'Content hash before', fa.content_hash_before);\n this.fa_field(li, 'content_hash_after hash', 'Content hash after', fa.content_hash_after);\n this.fa_field(li, 'stack', 'Stack', fa.stack);\n }\n\n private fa_cfield(element: d3_Selection, cls: string, title: string, v1: string, v2: string) {\n if (v1 == v2) {\n this.fa_field(element, cls, title, v1);\n } else {\n this.fa_field(element, cls + \" dbefore\", title, v1);\n this.fa_field(element, cls + \" dafter\", title, v2);\n }\n }\n\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {EnvironmentItemData, FilterObject} from './structures';\n\nexport\nclass EnvironmentInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/environment.json\";\n }\n\n static createItem(parent: d3_Selection, key: string, value: string): void {\n if (value) {\n let li = parent.append(\"li\");\n li.append(\"span\")\n .classed(\"key\", true)\n .text(key)\n li.append(\"span\")\n .classed(\"equal\", true)\n .text(\" = \")\n li.append(\"span\")\n .classed(\"value\", true)\n .text(value)\n }\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"type\", \"search\");\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Main\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Main Environment Only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-Main Environment Only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (element: EnvironmentItemData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return (\n element.name.toLowerCase().indexOf(stext) >= 0\n || element.value.toLowerCase().indexOf(stext) >= 0\n );\n }\n\n let check_local = () => {\n if (slocal == 0) return true;\n switch (element.name) {\n case 'PYTHON_IMPLEMENTATION': \n case 'PYTHON_VERSION':\n case 'OS_NAME':\n case 'OS_RELEASE':\n case 'OS_USER':\n case 'PWD':\n case 'PID':\n case 'HOSTNAME':\n case 'ARCH':\n case 'PROCESSOR':\n return (slocal == 1)\n default:\n return (slocal != 1)\n }\n }\n\n return check_text() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n }\n\n static createList(parent: d3_Selection, data: EnvironmentItemData[], default_local: string = \"0\"): FilterObject {\n let filter = EnvironmentInfoWidget.createFilter(parent, default_local);\n let list = parent.append(\"ul\")\n .classed(\"env-list\", true)\n\n filter.on_change(() => {\n list.html(\"\");\n for (var element of data) {\n if (!filter.valid(element)) {\n continue;\n }\n EnvironmentInfoWidget.createItem(list, element.name, element.value);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: EnvironmentItemData[], default_local: string = \"0\"): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"Environment (\" + trialDisplay + \")\");\n\n EnvironmentInfoWidget.createList(content, data, default_local);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: EnvironmentItemData[], default_local: string = \"0\") {\n super({ node: EnvironmentInfoWidget.createNode(trialDisplay, data, default_local) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Environment\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Environment`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {FileAccessData, FilterObject} from './structures';\n\n\nexport\nclass FileAccessesInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/file_accesses.json\";\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"placeholder\", \"Name\")\n .attr(\"type\", \"search\");\n\n let mode_filter = filterdiv.append(\"input\")\n .attr(\"placeholder\", \"Mode\")\n .attr(\"type\", \"search\");\n\n let select_hash = filterdiv.append(\"select\");\n select_hash.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Existence\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Exists only before trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Exists only after trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"3\")\n .text(\"Changes during trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"7\")\n .text(\"Does not change during trial\");\n\n select_hash.property(\"value\", \"0\");\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Locality\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Local files only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-local files only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (local: string, element: FileAccessData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let smode = mode_filter.property(\"value\").toLowerCase();\n let shash = Number(select_hash.property(\"value\"));\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return element.name.toLowerCase().indexOf(stext) >= 0;\n }\n\n let check_mode = () => {\n return element.mode.toLowerCase().indexOf(smode) >= 0;\n }\n\n let check_hash = () => {\n if (((shash & 1) == 1) && element.content_hash_before == null) return false;\n if (((shash & 2) == 2) && element.content_hash_after == null) return false;\n if (shash == 1) return element.content_hash_after == null;\n if (shash == 2) return element.content_hash_before == null;\n if (shash == 3) return element.content_hash_before != element.content_hash_after;\n if (shash == 4) return element.content_hash_before == element.content_hash_after;\n return true;\n } \n\n let check_local = () => {\n if (slocal == 0) return true;\n if (!/^((\\/)|(\\w+:\\\\))/.test(element.name)) return (slocal == 1); // not absolute path\n if (element.name.startsWith(local)) return (slocal == 1);\n return (slocal != 1);\n }\n\n return check_text() && check_mode() && check_hash() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n mode_filter.on(\"keyup\", filterfn);\n select_hash.on(\"change\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n }\n\n static createList(parent: d3_Selection, data: FileAccessData[], trial_path: string, default_local: string = \"0\"): FilterObject {\n let filter = FileAccessesInfoWidget.createFilter(parent, default_local);\n\n let list = parent.append(\"ul\")\n .classed(\"fac-list\", true)\n\n filter.on_change(() => {\n list.html(\"\");\n for (var element of data) {\n if (!filter.valid(trial_path, element)) {\n continue;\n }\n var li = list.append(\"li\");\n\n //name of file for request\n var name = element.name.split(\"/\");\n var pos = name.length -1;\n var fileName = name[pos];\n\n li.append(\"a\").classed(\"name\", true)\n .attr(\"title\", \"Name\")\n .text(element.name)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_after + \"/\" + fileName); //file after execution\n li.append(\"div\").classed(\"mode\", true)\n .attr(\"title\", \"Mode\")\n .text(element.mode);\n li.append(\"div\").classed(\"buffering\", true)\n .attr(\"title\", \"Buffering\")\n .text(element.buffering);\n li.append(\"div\").classed(\"clear\", true)\n li.append(\"div\").classed(\"timestamp\", true)\n .attr(\"title\", \"Time\")\n .text(element.timestamp);\n li.append(\"a\").classed(\"content_hash_before hash\", true)\n .attr(\"title\", \"Content hash before\")\n .text(element.content_hash_before)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_before + \"/\" + fileName);\n li.append(\"div\"); //spacing\n li.append(\"a\").classed(\"content_hash_after hash\", true)\n .attr(\"title\", \"Content hash after\")\n .text(element.content_hash_after)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_after + \"/\" + fileName);\n li.append(\"div\").classed(\"stack\", true)\n .attr(\"title\", \"Stack\")\n .text(element.stack);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: FileAccessData[], trial_path: string, default_local: string = \"0\"): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"File Accesses (\" + trialDisplay + \")\");\n\n FileAccessesInfoWidget.createList(content, data, trial_path, default_local);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: FileAccessData[], trial_path: string, default_local: string = \"0\") {\n super({ node: FileAccessesInfoWidget.createNode(trialDisplay, data, trial_path, default_local) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Accesses\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Accesses`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {ModuleData, FilterObject} from './structures';\n\n\nexport\nclass ModulesInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/dependencies.json\";\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"type\", \"search\");\n\n let select_version = filterdiv.append(\"select\");\n select_version.append(\"option\")\n .attr(\"value\", \"both\")\n .text(\"Do not filter Version\");\n\n select_version.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Filter In Version\");\n\n select_version.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Filter Out Version\");\n select_version.property(\"value\", \"both\")\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Locality\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Local Modules Only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-Local Modules Only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (local: string, element: ModuleData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let sversion = select_version.property(\"value\");\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return element.name.toLowerCase().indexOf(stext) >= 0;\n }\n\n let check_version = () => {\n if (sversion == \"both\") return true;\n if (sversion == \"1\") return element.version != null;\n if (sversion == \"0\") return element.version == null;\n return false;\n }\n\n let check_local = () => {\n if (slocal == 0) return true;\n if (element.path == null) return (slocal != 1);\n if (!/^((\\/)|(\\w+:\\\\))/.test(element.path)) return (slocal == 1); // not absolute path\n if (element.path.startsWith(local)) return (slocal == 1);\n return (slocal != 1);\n }\n\n return check_text() && check_version() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n select_version.on(\"change\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n \n }\n\n static createList(parent: d3_Selection, data: ModuleData[], trial_path: string, default_local: string = \"0\"): FilterObject {\n let filter = ModulesInfoWidget.createFilter(parent, default_local);\n\n let list = parent.append(\"ul\")\n .classed(\"mod-list\", true);\n\n filter.on_change(() => {\n list.html(\"\");\n\n for (var element of data) {\n if (!filter.valid(trial_path, element)) {\n continue;\n }\n var li = list.append(\"li\");\n li.append(\"div\").classed(\"name\", true)\n .text(element.name);\n li.append(\"div\").classed(\"version\", true)\n .text(element.version === null ? \"\" : element.version);\n li.append(\"div\").classed(\"clear\", true)\n li.append(\"div\").classed(\"hash\", true)\n .attr(\"title\", element.path)\n .text(element.code_hash);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: ModuleData[], trial_path: string): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"Modules (\" + trialDisplay + \")\");\n\n ModulesInfoWidget.createList(content, data, trial_path);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: ModuleData[], trial_path: string) {\n super({ node: ModulesInfoWidget.createNode(trialDisplay, data, trial_path) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Modules\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Modules`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {\n VisibleHistoryNode, HistoryTrialNodeData\n} from '@noworkflow/history';\nimport {json} from '@noworkflow/utils';\n\n\nimport {ModuleListData, EnvironmentData, FileAccessListData, FilterObject} from './structures';\n\nimport {ModulesInfoWidget} from './modules_info';\nimport {EnvironmentInfoWidget} from './environment_info';\nimport {FileAccessesInfoWidget} from './file_accesses_info';\nimport {AnnontationWidget} from '../annotation_widget';\n\nexport\nclass TrialInfoWidget extends Widget {\n\n d3node: d3_Selection;\n trial: VisibleHistoryNode;\n annontationWidget: AnnontationWidget;\n\n static createNode(trial: VisibleHistoryNode,annontationWidget: AnnontationWidget): HTMLElement {\n let node = document.createElement('div');\n let info = trial.info as HistoryTrialNodeData;\n\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('trial-info', true)\n .append('div')\n .classed('side-info', true)\n\n let main = content.append('div')\n .classed('main', true)\n\n main.append(\"h1\")\n .text(\"Trial \" + trial.display);\n\n main.append(\"a\")\n .classed(\"hash\", true)\n .text(info.code_hash || \"\")\n .attr('href','trials/'+ trial.id + '/' + info.code_hash + '/' + info.script);// href for script\n\n let idAttr = main.append(\"span\")\n .classed(\"attr\", true);\n idAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Id: \");\n idAttr.append(\"span\")\n .classed(\"id\", true)\n .text(trial.title);\n\n let scriptAttr = main.append(\"span\")\n .classed(\"attr\", true);\n scriptAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Script: \");\n scriptAttr.append(\"a\")\n .classed(\"script\", true)\n .text(info.script)\n .attr('href','trials/'+ trial.id + '/' + info.code_hash + '/' + info.script ); // href for script\n\n let startAttr = main.append(\"span\")\n .classed(\"attr\", true);\n startAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Start: \");\n startAttr.append(\"span\")\n .classed(\"start\", true)\n .text(info.str_start || \"\");\n\n let finishAttr = main.append(\"span\")\n .classed(\"attr\", true);\n finishAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Finish: \");\n finishAttr.append(\"span\")\n .classed(\"finish\", true)\n .text(info.str_finish || \"\");\n\n let durationAttr = main.append(\"span\")\n .classed(\"attr\", true);\n durationAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Duration: \");\n durationAttr.append(\"span\")\n .classed(\"duration\", true)\n .text(info.duration_text || \"\");\n\n if (info.command) {\n let argumentsAttr = main.append(\"span\")\n .classed(\"attr\", true);\n argumentsAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Arguments: \");\n argumentsAttr.append(\"span\")\n .classed(\"arguments\", true)\n .text(info.command);\n }\n\n\n\n \n\n content.append(\"div\")\n .classed(\"modules\", true)\n\n content.append(\"div\")\n .classed(\"environment\", true)\n\n content.append(\"div\")\n .classed(\"file-accesses\", true)\n\n var anntButton=content.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Manage Annotations\");\n\n anntButton.on(\"click\",function(){\n \n\n annontationWidget.activeAnnotation(trial.title);\n });\n\n return node;\n }\n\n constructor(trial: VisibleHistoryNode,annontationWidget: AnnontationWidget) {\n super({ node: TrialInfoWidget.createNode(trial,annontationWidget) });\n this.trial = trial;\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info');\n this.title.label = trial.display + \"- Information\";\n this.title.closable = true;\n this.title.caption = `Trial ${trial.display} Information`;\n this.loadModules();\n this.loadEnvironment();\n this.loadFileAccess();\n this.annontationWidget=annontationWidget;\n }\n\n static createFold(parent: d3_Selection, title: string) {\n let fold = parent.append(\"div\")\n .classed(\"fold\", true)\n let foldI = fold.append(\"i\")\n .classed(\"fa fa-minus\", true)\n let spanI = fold.append(\"span\")\n .text(title)\n \n let click = () => {\n let visible = foldI.classed(\"fa-plus\");\n foldI.classed(\"fa-plus\", !visible);\n foldI.classed(\"fa-minus\", visible);\n parent.select(\".foldable\")\n .classed(\"show-toolbar\", visible)\n .classed(\"hide-toolbar\", !visible)\n return false;\n };\n foldI.on(\"click\", click);\n spanI.on(\"click\", click);\n return fold;\n }\n\n static createFilterFold(fold: d3_Selection, filter: FilterObject) {\n filter.filterdiv\n .classed(\"info-filter\", true)\n .classed(\"show-toolbar\", false)\n .classed(\"hide-toolbar\", true);\n\n let foldA = fold.append(\"a\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Search\")\n .classed(\"show-all\", true);\n\n let foldAI = foldA.append(\"i\")\n .classed(\"fa fa-search-plus\", true);\n \n foldA.on(\"click\", () => {\n let visible = foldAI.classed(\"fa-search-plus\");\n foldAI.classed(\"fa-search-plus\", !visible);\n foldAI.classed(\"fa-search-minus\", visible);\n filter.filterdiv\n .classed(\"show-toolbar\", visible)\n .classed(\"hide-toolbar\", !visible)\n return false;\n });\n }\n\n loadModules() {\n let sub = this.node.getElementsByClassName(\"modules\")[0];\n json(\"Modules\", sub, ModulesInfoWidget.url(this.trial.title), (data: ModuleListData) => {\n let modules = this.d3node.select(\".modules\").html(\"\");\n if (data.all.length > 0) {\n \n let fold = TrialInfoWidget.createFold(modules, \"Modules\");\n let filter = ModulesInfoWidget.createList(\n modules.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.all, data.trial_path, \"1\"\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n loadEnvironment() {\n let sub = this.node.getElementsByClassName(\"environment\")[0];\n\n json(\"Environment\", sub, EnvironmentInfoWidget.url(this.trial.title), (data: EnvironmentData) => {\n let environment = this.d3node.select(\".environment\").html(\"\");\n\n let fold = TrialInfoWidget.createFold(environment, \"Environment\");\n let filter = EnvironmentInfoWidget.createList(\n environment.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.all, \"1\"\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n })\n }\n\n loadFileAccess() {\n let sub = this.node.getElementsByClassName(\"file-accesses\")[0];\n\n json(\"File Accesses\", sub, FileAccessesInfoWidget.url(this.trial.title), (data: FileAccessListData) => {\n let accesses = this.d3node.select(\".file-accesses\").html(\"\");\n\n if (data.file_accesses.length > 0) {\n\n let fold = TrialInfoWidget.createFold(accesses, \"File Accesses\");\n let filter = FileAccessesInfoWidget.createList(\n accesses.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.file_accesses, data.trial_path\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n}\n","import {DockPanel, Widget, DockLayout} from '@lumino/widgets';\n\n\nexport\ninterface VisWidget extends Widget {\n nowVis?: string;\n}\n\n\nexport\ninterface FindResult {\n area: DockLayout.AreaConfig | null;\n index: number;\n}\n\n\nexport\nfunction findInLayout(area: DockLayout.AreaConfig | null, widget: Widget): FindResult | null {\n if (area == null || area.type == 'tab-area') {\n return null;\n }\n var splitconfig: DockLayout.ISplitAreaConfig = area;\n var result: FindResult | null = null;\n splitconfig.children.every((child, index) => {\n if (child.type == 'tab-area') {\n var tabconfig: DockLayout.ITabAreaConfig = child;\n for (var tabwidget of tabconfig.widgets) {\n if (tabwidget == widget) {\n result = {\n area: area,\n index: index\n }\n return false;\n }\n }\n } else {\n var temp = findInLayout(child, widget);\n if (temp) {\n result = temp;\n return false;\n }\n }\n return true;\n });\n return result;\n}\n\n\nexport\nclass NowVisPanel extends DockPanel {\n\n addMainWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"main\") {\n console.log(\"Warning: options.ref is not 'main'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\") {\n options.ref = w;\n }\n }\n }\n (widget as VisWidget).nowVis = \"main\";\n this.addWidget(widget, options);\n }\n\n addGraphWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n var operation: string = \"none\";\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"graph\") {\n console.log(\"Warning: options.ref is not 'graph'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\" && !options.ref) {\n options.ref = w;\n options.mode = \"split-bottom\";\n operation = \"main\";\n } else if ((wnow.nowVis == \"info\") && (operation != \"graph\")) {\n options.ref = w;\n options.mode = \"split-left\";\n operation = \"info\";\n } else if (wnow.nowVis == \"graph\") {\n options.ref = w;\n options.mode = \"tab-after\";\n operation = \"graph\";\n }\n };\n }\n (widget as VisWidget).nowVis = \"graph\";\n this.addWidget(widget, options);\n\n if (operation == \"main\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.20;\n sizes[1] = 0.80;\n this.restoreLayout(layout);\n }\n }\n\n if (operation == \"info\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.80;\n sizes[1] = 0.20;\n this.restoreLayout(layout);\n }\n }\n }\n\n addInfoWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n var operation: string = \"none\";\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"info\") {\n console.log(\"Warning: options.ref is not 'info'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\" && !options.ref) {\n options.ref = w;\n options.mode = \"split-bottom\";\n operation = \"main\";\n } else if ((wnow.nowVis == \"graph\") && (operation != \"info\")) {\n options.ref = w;\n options.mode = \"split-right\";\n operation = \"graph\";\n } else if (wnow.nowVis == \"info\") {\n options.ref = w;\n options.mode = \"tab-after\";\n operation = \"info\";\n }\n };\n }\n (widget as VisWidget).nowVis = \"info\";\n this.addWidget(widget, options);\n\n if (operation == \"main\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.20;\n sizes[1] = 0.80;\n this.restoreLayout(layout);\n }\n }\n\n if (operation == \"graph\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.80;\n sizes[1] = 0.20;\n this.restoreLayout(layout);\n }\n }\n }\n\n}\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\ninterface IExperiment {\n id: string;\n name: string;\n description: string;\n}\n\nexport\nclass ProjectWidget extends Widget {\n\n d3node: d3_Selection;\n expTBody: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n experiments: Array;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor(experiments: Array) {\n super({ node: ProjectWidget.createNode() });\n this.d3node = d3_select(this.node);\n this.experiments=experiments;\n this.setNode();\n this.addClass('content');\n this.title.label = \"Experiment Selection\";\n this.title.closable = false\n this.title.caption = `Experiment`;\n }\n addExpRow(exp : IExperiment){\n var link=window.location.href + \"experiments/\"+exp.id;\n let item=this.expTBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(exp.id);\n item.append(\"td\").text(exp.name);\n item.append(\"td\").text(exp.description);\n item.append(\"td\").append(\"a\").attr(\"href\",link).text(link);\n\n let cloneCommandText = \"now pull --url \" + link;\n item.append(\"td\").text( cloneCommandText + \" \").append(\"i\").classed(\"fa fa-clone\", true).attr(\"aria-hidden\", \"true\")\n .attr(\"id\", exp.id + \"CopyIcon\").on(\"click\", ()=> {\n navigator.clipboard.writeText(cloneCommandText)\n .then(()=>{\n let divCopied = d3_select(document.getElementById(exp.id + \"CopyIcon\")!)\n .append(\"small\").classed(\"alert alert-secondary p-0\", true).text(\"Copied!\");\n setTimeout(()=>{divCopied.remove()}, 3000);\n });\n });\n\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n projectsDiv.append(\"h2\")\n .text(\"Experiments:\")\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"Experiment created successfully\") ; \n this.hideNode(this.errorFeedback);\n this.hideNode(this.successFeedback);\n\n let inputsDiv=projectsDiv.append(\"div\");\n let nameIn=this.addFormInput(inputsDiv,\"experimentNameInput\",\"Name\",\"input\");\n let descIn=this.addFormInput(inputsDiv,\"experimentDescInput\",\"Description\",\"textarea\");\n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addExpButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Experiment\");\n\n\n let table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n let header=table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"name\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"description\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"url\");\n header.append(\"th\").attr(\"scope\", \"col\").html(\" clone \")\n .append(\"i\").classed(\"fa fa-question-circle-o\", true).attr(\"aria-hidden\", \"true\")\n .attr(\"title\", \"Run this command on the command line, in the desired folder, to clone the experiment.\");\n \n this.expTBody=table.append(\"tbody\");\n\n \n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n let newExp={\n name:nameIn.property(\"value\"),\n description:descIn.property(\"value\")\n };\n fetch(\"experiments\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newExp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n newExp.id=obj.id;\n _thiss.addExpRow(newExp);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addExpButton);\n _thiss.showNode(_thiss.successFeedback);\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n }\n }); \n \n \n });\n var _thiss=this;\n addExpButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addExpButton);\n });\n \n this.experiments.forEach(function (obj) {\n _thiss.addExpRow(obj);\n });\n }\n\n}","import { Widget } from '@lumino/widgets';\nimport { select as d3_select, Selection as d3_Selection, BaseType as d3_BaseType } from 'd3-selection';\nimport { NowVisPanel } from './nowpanel';\nimport { TableInfoWidget } from './database_widget';\nimport 'ace-builds/src-noconflict/ace';\nimport 'ace-builds/src-noconflict/theme-textmate';\nimport 'ace-builds/src-noconflict/mode-sql';\nimport 'ace-builds/src-noconflict/ext-language_tools';\n\ndeclare global { interface Window { ace: any; } }\n\nexport class DatabaseTabWidget extends Widget {}\n\nexport class QueryResultWidget extends DatabaseTabWidget {\n d3node: d3_Selection;\n private columns: string[];\n private rows: any[];\n private query: string;\n private currentPage: number = 1;\n \n constructor(query: string, columns: string[], rows: any[], count: number) {\n super({ node: QueryResultWidget.createNode() });\n this.title.label = `Query Result (${count})`;\n this.title.caption = `Query Result (${count})`;\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n this.query = query;\n this.columns = columns;\n this.rows = rows;\n this.renderTable();\n }\n \n static createNode(): HTMLElement {\n const node = document.createElement('div');\n node.style.padding = '1rem';\n node.style.height = '100%';\n node.style.overflowY = 'auto';\n return node;\n }\n \n private renderTable(): void {\n this.d3node.selectAll('*').remove();\n \n this.d3node.append('a')\n .classed(\"toollink\", true)\n .attr('class', 'btn btn-secondary-outline')\n .attr('title', 'Download CSV')\n .style('margin-bottom', '1em')\n .on('click', () => {\n let csv = '';\n csv += this.columns.map(col => `\"${col.replace(/\"/g, '\"\"')}\"`).join(',') + '\\n';\n for (const row of this.rows) {\n csv += this.columns.map(col => `\"${String(row[col] !== undefined ? row[col] : '').replace(/\"/g, '\"\"')}\"`).join(',') + '\\n';\n }\n const blob = new Blob([csv], { type: 'text/csv' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'query_result.csv';\n document.body.appendChild(a);\n a.click();\n setTimeout(() => {\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, 100);\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n\n if (!this.columns.length || !this.rows.length) {\n this.d3node.append('div').text('No results.');\n return;\n }\n\n const paginationContainer = this.d3node.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem')\n .style('padding', '0.5rem')\n .style('background-color', '#f8f9fa')\n .style('border-radius', '4px');\n\n const startIndex = (this.currentPage - 1) * 50 + 1;\n const endIndex = Math.min(this.currentPage * 50, this.rows.length);\n paginationContainer.append('div')\n .style('font-size', '0.9em')\n .style('color', '#666')\n .text(`Showing ${startIndex}-${endIndex} of ${this.rows.length} rows`);\n\n const paginationButtons = paginationContainer.append('div')\n .style('display', 'flex')\n .style('gap', '0.25rem');\n\n const totalPages = Math.ceil(this.rows.length / 50);\n\n if (totalPages > 1) {\n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage = 1;\n this.renderTable();\n })\n .text('<<');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage--;\n this.renderTable();\n })\n .text('<');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-primary')\n .text(this.currentPage.toString());\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage++;\n this.renderTable();\n })\n .text('>');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage = totalPages;\n this.renderTable();\n })\n .text('>>');\n }\n\n const tableContainer = this.d3node.append('div')\n .style('max-height', '400px')\n .style('overflow-y', 'auto')\n .style('border', '1px solid #dee2e6')\n .style('border-radius', '4px');\n \n const table = tableContainer.append('table').attr('class', 'table table-bordered table-sm');\n table.style('border-collapse', 'separate')\n .style('border-spacing', '0');\n\n const thead = table.append('thead').append('tr');\n thead.style('position', 'sticky')\n .style('top', '0')\n .style('background-color', 'white')\n .style('z-index', '1');\n\n this.columns.forEach(col => thead.append('th').text(col));\n \n const tbody = table.append('tbody');\n \n const startRow = (this.currentPage - 1) * 50;\n const endRow = Math.min(startRow + 50, this.rows.length);\n const currentPageRows = this.rows.slice(startRow, endRow);\n \n currentPageRows.forEach(row => {\n const tr = tbody.append('tr');\n this.columns.forEach(col => tr.append('td').text(row[col] !== undefined ? row[col] : ''));\n });\n\n this.d3node.append('div')\n .attr('class', 'text-muted')\n .style('margin-top', '1rem')\n .style('margin-bottom', '0.5em')\n .html(`Query: ${this.query}`);\n }\n}\n\nexport class QueryWidget extends Widget {\n private panel: NowVisPanel;\n private static count: number = 0;\n d3node: d3_Selection;\n private aceEditor: any; // Ace editor instance\n private tableNames: string[] = [];\n private columnNames: string[] = [];\n private editorId: string;\n private initialQuery: string;\n \n constructor(panel: NowVisPanel, tableNames?: string[], columnNames?: string[], initialQuery?: string) {\n super();\n this.panel = panel;\n this.title.label = 'SQL Query';\n this.title.caption = 'SQL Query Interface';\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n this.tableNames = tableNames || [];\n this.columnNames = columnNames || [];\n this.editorId = `query-input-${++QueryWidget.count}`;\n this.initialQuery = initialQuery || '';\n\n this.createQueryInterface();\n }\n\n private async createQueryInterface(): Promise {\n const container = this.d3node.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('height', '100%')\n .style('padding', '1rem')\n .style('gap', '1rem')\n .style('overflow-y', 'auto')\n .style('overflow-x', 'hidden');\n\n const headerRow = container.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem')\n .style('flex-shrink', '0');\n\n headerRow.append('h4')\n .text('SQL Query Interface')\n .style('margin', '0')\n .style('color', '#333');\n\n headerRow.append('button')\n .attr('id', 'execute-query-btn')\n .attr(\"title\", \"Execute query. Use Ctrl+Enter for quick execution.\")\n .classed('btn btn-primary', true)\n .on('click', () => this.executeQuery())\n .html(' Execute Query');\n\n const queryContainer = container.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('min-height', '50%')\n .style('flex', '1 1 0');\n \n queryContainer.append('label')\n .attr('for', this.editorId)\n .text('Enter your SQL query:')\n .style('font-weight', 'bold')\n .style('margin-bottom', '0.5rem');\n \n queryContainer.append('div')\n .attr('id', this.editorId)\n .style('width', '100%')\n .style('min-height', '140px')\n .style('max-height', '30vh')\n .style('border', '1px solid #ccc')\n .style('border-radius', '4px')\n .style('font-size', '1em')\n .style('flex', '1');\n\n setTimeout(() => {\n // @ts-ignore\n this.aceEditor = window.ace.edit(this.editorId);\n this.aceEditor.setTheme('ace/theme/textmate');\n this.aceEditor.session.setMode('ace/mode/sql');\n this.aceEditor.setOptions({\n fontSize: '1em',\n minLines: 6,\n showPrintMargin: false,\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n });\n this.aceEditor.commands.addCommand({\n name: 'executeQuery',\n bindKey: { win: 'Ctrl-Enter', mac: 'Command-Enter' },\n exec: () => this.executeQuery()\n });\n\n if (window.ace && window.ace.require) {\n const langTools = window.ace.require('ace/ext/language_tools');\n const tableCompleter = {\n getCompletions: (editor: any, session: any, pos: any, prefix: string, callback: any) => {\n if (!prefix) { callback(null, []); return; }\n \n const completions = this.tableNames.map((name: string) => ({\n caption: name,\n value: name,\n meta: 'table'\n }));\n \n this.columnNames.forEach((name: string) => {\n completions.push({\n caption: name,\n value: name,\n meta: 'column'\n });\n });\n \n callback(null, completions);\n }\n };\n langTools.addCompleter(tableCompleter);\n }\n\n if (this.initialQuery) {\n this.aceEditor.setValue(this.initialQuery);\n this.aceEditor.clearSelection();\n this.aceEditor.focus();\n }\n }, 0);\n \n queryContainer.append('div')\n .attr('id', `query-status-${this.editorId}`)\n .style('min-height', '60px')\n .style('padding', '0.5rem')\n .style('border', '1px solid #e0e0e0')\n .style('border-radius', '4px')\n .style('background-color', '#f9f9f9')\n .style('font-family', 'monospace')\n .style('font-size', '0.9em')\n .style('overflow-y', 'auto')\n .style('flex-shrink', '0')\n .style('margin-top', '1rem')\n .text('Ready to execute queries. Use Ctrl+Enter for quick execution.');\n }\n\n private async executeQuery(): Promise {\n // const queryInput = this.node.querySelector('#query-input') as HTMLTextAreaElement;\n const statusArea = this.node.querySelector(`#query-status-${this.editorId}`) as HTMLDivElement;\n \n const sql = this.aceEditor ? this.aceEditor.getValue().trim() : '';\n \n if (!statusArea) return;\n \n statusArea.innerHTML = '';\n statusArea.style.color = '#333';\n \n if (!sql) {\n statusArea.textContent = 'Please enter a SQL query.';\n statusArea.style.color = '#d32f2f';\n return;\n }\n\n statusArea.textContent = 'Executing query...';\n statusArea.style.color = '#1976d2';\n \n try {\n const response = await fetch('/db/query', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query: sql })\n });\n \n const data = await response.json();\n \n if (data.error) {\n statusArea.textContent = `Error: ${data.error}`;\n statusArea.style.color = '#d32f2f';\n } else if (data.rows && data.columns) {\n statusArea.textContent = `Query executed successfully! Found ${data.rows.length} rows with ${data.columns.length} columns.`;\n statusArea.style.color = '#388e3c';\n \n await this.displayQueryResults(sql, data.columns, data.rows);\n } else {\n statusArea.textContent = 'Query executed successfully. No results returned.';\n statusArea.style.color = '#388e3c';\n }\n } catch (e) {\n statusArea.textContent = `Error executing query: ${e.message}`;\n statusArea.style.color = '#d32f2f';\n }\n }\n\n private async displayQueryResults(sql: string, columns: string[], rows: any[]): Promise {\n const resultWidget = new QueryResultWidget(sql, columns, rows, ++QueryWidget.count);\n \n let refWidget: Widget | null = null;\n if (this.panel.widgets) {\n for (let w of this.panel.widgets()) {\n if (w instanceof TableInfoWidget || w instanceof QueryResultWidget) {\n refWidget = w;\n }\n }\n }\n \n if (refWidget) {\n this.panel.addInfoWidget(resultWidget, { ref: refWidget, mode: 'tab-after' });\n } else {\n this.panel.addInfoWidget(resultWidget, { ref: this, mode: 'split-bottom' });\n }\n \n this.panel.activateWidget(resultWidget);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n const editorElement = this.node.querySelector(`#${this.editorId}`) as HTMLElement;\n if (!editorElement) \n return;\n\n const rect = this.node.getBoundingClientRect();\n const availableHeight = rect.height - 200;\n const minHeight = 250;\n const maxHeight = Math.max(minHeight, availableHeight * 0.6);\n editorElement.style.height = `${maxHeight}px`;\n \n if (this.aceEditor) {\n this.aceEditor.resize();\n }\n }\n} \n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","'use strict';\n\nmodule.exports = require('./browser/algorithms.json');\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar createHash = require('create-hash');\nvar stream = require('readable-stream');\nvar inherits = require('inherits');\nvar sign = require('./sign');\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');\n algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hashType = data.hash;\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nSign.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n this.end();\n var hash = this._hash.digest();\n var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;\n\n this.end();\n var hash = this._hash.digest();\n return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n return new Verify(algorithm);\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n};\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar createHmac = require('create-hmac');\nvar crt = require('browserify-rsa');\nvar EC = require('elliptic').ec;\nvar BN = require('bn.js');\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n var priv = parseKeys(key);\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n return ecSign(hash, priv);\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n return dsaSign(hash, priv, hashType);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = priv.modulus.byteLength();\n var pad = [0, 1];\n while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) { pad.push(hash[i]); }\n\n var out = crt(pad, priv);\n return out;\n}\n\nfunction ecSign(hash, priv) {\n var curveId = curves[priv.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n var curve = new EC(curveId);\n var key = curve.keyFromPrivate(priv.privateKey);\n var out = key.sign(hash);\n\n return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n var x = priv.params.priv_key;\n var p = priv.params.p;\n var q = priv.params.q;\n var g = priv.params.g;\n var r = new BN(0);\n var k;\n var H = bits2int(hash, q).mod(q);\n var s = false;\n var kv = getKey(x, q, hash, algo);\n while (s === false) {\n k = makeKey(q, kv, algo);\n r = makeR(g, k, p, q);\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n if (s.cmpn(0) === 0) {\n s = false;\n r = new BN(0);\n }\n }\n return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n r = r.toArray();\n s = s.toArray();\n\n // Pad values\n if (r[0] & 0x80) { r = [0].concat(r); }\n if (s[0] & 0x80) { s = [0].concat(s); }\n\n var total = r.length + s.length + 4;\n var res = [\n 0x30, total, 0x02, r.length\n ];\n res = res.concat(r, [0x02, s.length], s);\n return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n x = Buffer.from(x.toArray());\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length);\n x = Buffer.concat([zeros, x]);\n }\n var hlen = hash.length;\n var hbits = bits2octets(hash, q);\n var v = Buffer.alloc(hlen);\n v.fill(1);\n var k = Buffer.alloc(hlen);\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n var bits = new BN(obits);\n var shift = (obits.length << 3) - q.bitLength();\n if (shift > 0) { bits.ishrn(shift); }\n return bits;\n}\n\nfunction bits2octets(bits, q) {\n bits = bits2int(bits, q);\n bits = bits.mod(q);\n var out = Buffer.from(bits.toArray());\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length);\n out = Buffer.concat([zeros, out]);\n }\n return out;\n}\n\nfunction makeKey(q, kv, algo) {\n var t;\n var k;\n\n do {\n t = Buffer.alloc(0);\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n t = Buffer.concat([t, kv.v]);\n }\n\n k = bits2int(t, q);\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n } while (k.cmp(q) !== -1);\n\n return k;\n}\n\nfunction makeR(g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar BN = require('bn.js');\nvar EC = require('elliptic').ec;\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n var pub = parseKeys(key);\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n return ecVerify(sig, hash, pub);\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n return dsaVerify(sig, hash, pub);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = pub.modulus.byteLength();\n var pad = [1];\n var padNum = 0;\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff);\n padNum += 1;\n }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) {\n pad.push(hash[i]);\n }\n pad = Buffer.from(pad);\n var red = BN.mont(pub.modulus);\n sig = new BN(sig).toRed(red);\n\n sig = sig.redPow(new BN(pub.publicExponent));\n sig = Buffer.from(sig.fromRed().toArray());\n var out = padNum < 8 ? 1 : 0;\n len = Math.min(sig.length, pad.length);\n if (sig.length !== pad.length) { out = 1; }\n\n i = -1;\n while (++i < len) { out |= sig[i] ^ pad[i]; }\n return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n var curve = new EC(curveId);\n var pubkey = pub.data.subjectPrivateKey.data;\n\n return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n var p = pub.data.p;\n var q = pub.data.q;\n var g = pub.data.g;\n var y = pub.data.pub_key;\n var unpacked = parseKeys.signature.decode(sig, 'der');\n var s = unpacked.s;\n var r = unpacked.r;\n checkValue(s, q);\n checkValue(r, q);\n var montp = BN.mont(p);\n var w = s.invm(q);\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q);\n return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","module.exports = require('events').EventEmitter;\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","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\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'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\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","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\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 = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n if (this.padding === false) {\n return false;\n }\n\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n if (this.padding === false) {\n return buffer;\n }\n\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n if(buf[p.place] === 0x00) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) {\n return false;\n }\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size');\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n var i;\n for (i = 0; i < naf.length; i += 1) {\n naf[i] = 0;\n }\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\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'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","module.exports = require('os')\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n\n'use strict';\n\nvar asn1 = require('asn1.js');\n\nexports.certificate = require('./certificate');\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int'](),\n\t\tthis.key('privateExponent')['int'](),\n\t\tthis.key('prime1')['int'](),\n\t\tthis.key('prime2')['int'](),\n\t\tthis.key('exponent1')['int'](),\n\t\tthis.key('exponent2')['int'](),\n\t\tthis.key('coefficient')['int']()\n\t);\n});\nexports.RSAPrivateKey = RSAPrivateKey;\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int']()\n\t);\n});\nexports.RSAPublicKey = RSAPublicKey;\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('none').null_().optional(),\n\t\tthis.key('curve').objid().optional(),\n\t\tthis.key('params').seq().obj(\n\t\t\tthis.key('p')['int'](),\n\t\t\tthis.key('q')['int'](),\n\t\t\tthis.key('g')['int']()\n\t\t).optional()\n\t);\n});\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\nexports.PublicKey = PublicKey;\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\nexports.PrivateKey = PrivateKeyInfo;\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').seq().obj(\n\t\t\tthis.key('id').objid(),\n\t\t\tthis.key('decrypt').seq().obj(\n\t\t\t\tthis.key('kde').seq().obj(\n\t\t\t\t\tthis.key('id').objid(),\n\t\t\t\t\tthis.key('kdeparams').seq().obj(\n\t\t\t\t\t\tthis.key('salt').octstr(),\n\t\t\t\t\t\tthis.key('iters')['int']()\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tthis.key('cipher').seq().obj(\n\t\t\t\t\tthis.key('algo').objid(),\n\t\t\t\t\tthis.key('iv').octstr()\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('p')['int'](),\n\t\tthis.key('q')['int'](),\n\t\tthis.key('g')['int'](),\n\t\tthis.key('pub_key')['int'](),\n\t\tthis.key('priv_key')['int']()\n\t);\n});\nexports.DSAPrivateKey = DSAPrivateKey;\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n\tthis['int']();\n});\n\nvar ECParameters = asn1.define('ECParameters', function () {\n\tthis.choice({\n\t\tnamedCurve: this.objid()\n\t});\n});\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('privateKey').octstr(),\n\t\tthis.key('parameters').optional().explicit(0).use(ECParameters),\n\t\tthis.key('publicKey').optional().explicit(1).bitstr()\n\t);\n});\nexports.ECPrivateKey = ECPrivateKey;\n\nexports.signature = asn1.define('signature', function () {\n\tthis.seq().obj(\n\t\tthis.key('r')['int'](),\n\t\tthis.key('s')['int']()\n\t);\n});\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict';\n\nvar asn = require('asn1.js');\n\nvar Time = asn.define('Time', function () {\n\tthis.choice({\n\t\tutcTime: this.utctime(),\n\t\tgeneralTime: this.gentime()\n\t});\n});\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n\tthis.seq().obj(\n\t\tthis.key('type').objid(),\n\t\tthis.key('value').any()\n\t);\n});\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('parameters').optional(),\n\t\tthis.key('curve').objid().optional()\n\t);\n});\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n\tthis.setof(AttributeTypeValue);\n});\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n\tthis.seqof(RelativeDistinguishedName);\n});\n\nvar Name = asn.define('Name', function () {\n\tthis.choice({\n\t\trdnSequence: this.use(RDNSequence)\n\t});\n});\n\nvar Validity = asn.define('Validity', function () {\n\tthis.seq().obj(\n\t\tthis.key('notBefore').use(Time),\n\t\tthis.key('notAfter').use(Time)\n\t);\n});\n\nvar Extension = asn.define('Extension', function () {\n\tthis.seq().obj(\n\t\tthis.key('extnID').objid(),\n\t\tthis.key('critical').bool().def(false),\n\t\tthis.key('extnValue').octstr()\n\t);\n});\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('version').explicit(0)['int']().optional(),\n\t\tthis.key('serialNumber')['int'](),\n\t\tthis.key('signature').use(AlgorithmIdentifier),\n\t\tthis.key('issuer').use(Name),\n\t\tthis.key('validity').use(Validity),\n\t\tthis.key('subject').use(Name),\n\t\tthis.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n\t\tthis.key('issuerUniqueID').implicit(1).bitstr().optional(),\n\t\tthis.key('subjectUniqueID').implicit(2).bitstr().optional(),\n\t\tthis.key('extensions').explicit(3).seqof(Extension).optional()\n\t);\n});\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('tbsCertificate').use(TBSCertificate),\n\t\tthis.key('signatureAlgorithm').use(AlgorithmIdentifier),\n\t\tthis.key('signatureValue').bitstr()\n\t);\n});\n\nmodule.exports = X509Certificate;\n","'use strict';\n\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m;\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m;\nvar evp = require('evp_bytestokey');\nvar ciphers = require('browserify-aes');\nvar Buffer = require('safe-buffer').Buffer;\nmodule.exports = function (okey, password) {\n\tvar key = okey.toString();\n\tvar match = key.match(findProc);\n\tvar decrypted;\n\tif (!match) {\n\t\tvar match2 = key.match(fullRegex);\n\t\tdecrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64');\n\t} else {\n\t\tvar suite = 'aes' + match[1];\n\t\tvar iv = Buffer.from(match[2], 'hex');\n\t\tvar cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64');\n\t\tvar cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;\n\t\tvar out = [];\n\t\tvar cipher = ciphers.createDecipheriv(suite, cipherKey, iv);\n\t\tout.push(cipher.update(cipherText));\n\t\tout.push(cipher['final']());\n\t\tdecrypted = Buffer.concat(out);\n\t}\n\tvar tag = key.match(startRegex)[1];\n\treturn {\n\t\ttag: tag,\n\t\tdata: decrypted\n\t};\n};\n","'use strict';\n\nvar asn1 = require('./asn1');\nvar aesid = require('./aesid.json');\nvar fixProc = require('./fixProc');\nvar ciphers = require('browserify-aes');\nvar compat = require('pbkdf2');\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction decrypt(data, password) {\n\tvar salt = data.algorithm.decrypt.kde.kdeparams.salt;\n\tvar iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);\n\tvar algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];\n\tvar iv = data.algorithm.decrypt.cipher.iv;\n\tvar cipherText = data.subjectPrivateKey;\n\tvar keylen = parseInt(algo.split('-')[1], 10) / 8;\n\tvar key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');\n\tvar cipher = ciphers.createDecipheriv(algo, key, iv);\n\tvar out = [];\n\tout.push(cipher.update(cipherText));\n\tout.push(cipher['final']());\n\treturn Buffer.concat(out);\n}\n\nfunction parseKeys(buffer) {\n\tvar password;\n\tif (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n\t\tpassword = buffer.passphrase;\n\t\tbuffer = buffer.key;\n\t}\n\tif (typeof buffer === 'string') {\n\t\tbuffer = Buffer.from(buffer);\n\t}\n\n\tvar stripped = fixProc(buffer, password);\n\n\tvar type = stripped.tag;\n\tvar data = stripped.data;\n\tvar subtype, ndata;\n\tswitch (type) {\n\t\tcase 'CERTIFICATE':\n\t\t\tndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;\n\t\t\t// falls through\n\t\tcase 'PUBLIC KEY':\n\t\t\tif (!ndata) {\n\t\t\t\tndata = asn1.PublicKey.decode(data, 'der');\n\t\t\t}\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\tndata.subjectPrivateKey = ndata.subjectPublicKey;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'ec',\n\t\t\t\t\t\tdata: ndata\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tdata: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'ENCRYPTED PRIVATE KEY':\n\t\t\tdata = asn1.EncryptedPrivateKey.decode(data, 'der');\n\t\t\tdata = decrypt(data, password);\n\t\t\t// falls through\n\t\tcase 'PRIVATE KEY':\n\t\t\tndata = asn1.PrivateKey.decode(data, 'der');\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcurve: ndata.algorithm.curve,\n\t\t\t\t\t\tprivateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tparams: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'RSA PUBLIC KEY':\n\t\t\treturn asn1.RSAPublicKey.decode(data, 'der');\n\t\tcase 'RSA PRIVATE KEY':\n\t\t\treturn asn1.RSAPrivateKey.decode(data, 'der');\n\t\tcase 'DSA PRIVATE KEY':\n\t\t\treturn {\n\t\t\t\ttype: 'dsa',\n\t\t\t\tparams: asn1.DSAPrivateKey.decode(data, 'der')\n\t\t\t};\n\t\tcase 'EC PRIVATE KEY':\n\t\t\tdata = asn1.ECPrivateKey.decode(data, 'der');\n\t\t\treturn {\n\t\t\t\tcurve: data.parameters.value,\n\t\t\t\tprivateKey: data.privateKey\n\t\t\t};\n\t\tdefault: throw new Error('unknown key type ' + type);\n\t}\n}\nparseKeys.signature = asn1.signature;\n\nmodule.exports = parseKeys;\n","// Copyright Joyent, Inc. and other Node contributors.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a\r\n// copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n// persons to whom the Software is furnished to do so, subject to the\r\n// following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included\r\n// in all copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n'use strict';\r\n\r\n\r\nvar isWindows = process.platform === 'win32';\r\nvar util = require('util');\r\n\r\n\r\n// resolves . and .. elements in a path array with directory names there\r\n// must be no slashes or device names (c:\\) in the array\r\n// (so also no leading and trailing slashes - it does not distinguish\r\n// relative and absolute paths)\r\nfunction normalizeArray(parts, allowAboveRoot) {\r\n var res = [];\r\n for (var i = 0; i < parts.length; i++) {\r\n var p = parts[i];\r\n\r\n // ignore empty parts\r\n if (!p || p === '.')\r\n continue;\r\n\r\n if (p === '..') {\r\n if (res.length && res[res.length - 1] !== '..') {\r\n res.pop();\r\n } else if (allowAboveRoot) {\r\n res.push('..');\r\n }\r\n } else {\r\n res.push(p);\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n\r\n// returns an array with empty elements removed from either end of the input\r\n// array or the original array if no elements need to be removed\r\nfunction trimArray(arr) {\r\n var lastIndex = arr.length - 1;\r\n var start = 0;\r\n for (; start <= lastIndex; start++) {\r\n if (arr[start])\r\n break;\r\n }\r\n\r\n var end = lastIndex;\r\n for (; end >= 0; end--) {\r\n if (arr[end])\r\n break;\r\n }\r\n\r\n if (start === 0 && end === lastIndex)\r\n return arr;\r\n if (start > end)\r\n return [];\r\n return arr.slice(start, end + 1);\r\n}\r\n\r\n// Regex to split a windows path into three parts: [*, device, slash,\r\n// tail] windows-only\r\nvar splitDeviceRe =\r\n /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\r\n\r\n// Regex to split the tail part of the above into [*, dir, basename, ext]\r\nvar splitTailRe =\r\n /^([\\s\\S]*?)((?:\\.{1,2}|[^\\\\\\/]+?|)(\\.[^.\\/\\\\]*|))(?:[\\\\\\/]*)$/;\r\n\r\nvar win32 = {};\r\n\r\n// Function to split a filename into [root, dir, basename, ext]\r\nfunction win32SplitPath(filename) {\r\n // Separate device+slash from tail\r\n var result = splitDeviceRe.exec(filename),\r\n device = (result[1] || '') + (result[2] || ''),\r\n tail = result[3] || '';\r\n // Split the tail into dir, basename and extension\r\n var result2 = splitTailRe.exec(tail),\r\n dir = result2[1],\r\n basename = result2[2],\r\n ext = result2[3];\r\n return [device, dir, basename, ext];\r\n}\r\n\r\nfunction win32StatPath(path) {\r\n var result = splitDeviceRe.exec(path),\r\n device = result[1] || '',\r\n isUnc = !!device && device[1] !== ':';\r\n return {\r\n device: device,\r\n isUnc: isUnc,\r\n isAbsolute: isUnc || !!result[2], // UNC paths are always absolute\r\n tail: result[3]\r\n };\r\n}\r\n\r\nfunction normalizeUNCRoot(device) {\r\n return '\\\\\\\\' + device.replace(/^[\\\\\\/]+/, '').replace(/[\\\\\\/]+/g, '\\\\');\r\n}\r\n\r\n// path.resolve([from ...], to)\r\nwin32.resolve = function() {\r\n var resolvedDevice = '',\r\n resolvedTail = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1; i--) {\r\n var path;\r\n if (i >= 0) {\r\n path = arguments[i];\r\n } else if (!resolvedDevice) {\r\n path = process.cwd();\r\n } else {\r\n // Windows has the concept of drive-specific current working\r\n // directories. If we've resolved a drive letter but not yet an\r\n // absolute path, get cwd for that drive. We're sure the device is not\r\n // an unc path at this points, because unc paths are always absolute.\r\n path = process.env['=' + resolvedDevice];\r\n // Verify that a drive-local cwd was found and that it actually points\r\n // to our drive. If not, default to the drive's root.\r\n if (!path || path.substr(0, 3).toLowerCase() !==\r\n resolvedDevice.toLowerCase() + '\\\\') {\r\n path = resolvedDevice + '\\\\';\r\n }\r\n }\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail;\r\n\r\n if (device &&\r\n resolvedDevice &&\r\n device.toLowerCase() !== resolvedDevice.toLowerCase()) {\r\n // This path points to another device so it is not applicable\r\n continue;\r\n }\r\n\r\n if (!resolvedDevice) {\r\n resolvedDevice = device;\r\n }\r\n if (!resolvedAbsolute) {\r\n resolvedTail = tail + '\\\\' + resolvedTail;\r\n resolvedAbsolute = isAbsolute;\r\n }\r\n\r\n if (resolvedDevice && resolvedAbsolute) {\r\n break;\r\n }\r\n }\r\n\r\n // Convert slashes to backslashes when `resolvedDevice` points to an UNC\r\n // root. Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n resolvedDevice = normalizeUNCRoot(resolvedDevice);\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path,\r\n // but handle relative paths to be safe (might happen when process.cwd()\r\n // fails)\r\n\r\n // Normalize the tail path\r\n resolvedTail = normalizeArray(resolvedTail.split(/[\\\\\\/]+/),\r\n !resolvedAbsolute).join('\\\\');\r\n\r\n return (resolvedDevice + (resolvedAbsolute ? '\\\\' : '') + resolvedTail) ||\r\n '.';\r\n};\r\n\r\n\r\nwin32.normalize = function(path) {\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail,\r\n trailingSlash = /[\\\\\\/]$/.test(tail);\r\n\r\n // Normalize the tail path\r\n tail = normalizeArray(tail.split(/[\\\\\\/]+/), !isAbsolute).join('\\\\');\r\n\r\n if (!tail && !isAbsolute) {\r\n tail = '.';\r\n }\r\n if (tail && trailingSlash) {\r\n tail += '\\\\';\r\n }\r\n\r\n // Convert slashes to backslashes when `device` points to an UNC root.\r\n // Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n device = normalizeUNCRoot(device);\r\n }\r\n\r\n return device + (isAbsolute ? '\\\\' : '') + tail;\r\n};\r\n\r\n\r\nwin32.isAbsolute = function(path) {\r\n return win32StatPath(path).isAbsolute;\r\n};\r\n\r\nwin32.join = function() {\r\n var paths = [];\r\n for (var i = 0; i < arguments.length; i++) {\r\n var arg = arguments[i];\r\n if (!util.isString(arg)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (arg) {\r\n paths.push(arg);\r\n }\r\n }\r\n\r\n var joined = paths.join('\\\\');\r\n\r\n // Make sure that the joined path doesn't start with two slashes, because\r\n // normalize() will mistake it for an UNC path then.\r\n //\r\n // This step is skipped when it is very clear that the user actually\r\n // intended to point at an UNC path. This is assumed when the first\r\n // non-empty string arguments starts with exactly two slashes followed by\r\n // at least one more non-slash character.\r\n //\r\n // Note that for normalize() to treat a path as an UNC path it needs to\r\n // have at least 2 components, so we don't filter for that here.\r\n // This means that the user can use join to construct UNC paths from\r\n // a server name and a share name; for example:\r\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\')\r\n if (!/^[\\\\\\/]{2}[^\\\\\\/]/.test(paths[0])) {\r\n joined = joined.replace(/^[\\\\\\/]{2,}/, '\\\\');\r\n }\r\n\r\n return win32.normalize(joined);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// it will solve the relative path from 'from' to 'to', for instance:\r\n// from = 'C:\\\\orandea\\\\test\\\\aaa'\r\n// to = 'C:\\\\orandea\\\\impl\\\\bbb'\r\n// The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\r\nwin32.relative = function(from, to) {\r\n from = win32.resolve(from);\r\n to = win32.resolve(to);\r\n\r\n // windows is not case sensitive\r\n var lowerFrom = from.toLowerCase();\r\n var lowerTo = to.toLowerCase();\r\n\r\n var toParts = trimArray(to.split('\\\\'));\r\n\r\n var lowerFromParts = trimArray(lowerFrom.split('\\\\'));\r\n var lowerToParts = trimArray(lowerTo.split('\\\\'));\r\n\r\n var length = Math.min(lowerFromParts.length, lowerToParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (lowerFromParts[i] !== lowerToParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n if (samePartsLength == 0) {\r\n return to;\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < lowerFromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('\\\\');\r\n};\r\n\r\n\r\nwin32._makeLong = function(path) {\r\n // Note: this will *probably* throw somewhere.\r\n if (!util.isString(path))\r\n return path;\r\n\r\n if (!path) {\r\n return '';\r\n }\r\n\r\n var resolvedPath = win32.resolve(path);\r\n\r\n if (/^[a-zA-Z]\\:\\\\/.test(resolvedPath)) {\r\n // path is local filesystem path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\' + resolvedPath;\r\n } else if (/^\\\\\\\\[^?.]/.test(resolvedPath)) {\r\n // path is network UNC path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\UNC\\\\' + resolvedPath.substring(2);\r\n }\r\n\r\n return path;\r\n};\r\n\r\n\r\nwin32.dirname = function(path) {\r\n var result = win32SplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nwin32.basename = function(path, ext) {\r\n var f = win32SplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nwin32.extname = function(path) {\r\n return win32SplitPath(path)[3];\r\n};\r\n\r\n\r\nwin32.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir;\r\n var base = pathObject.base || '';\r\n if (!dir) {\r\n return base;\r\n }\r\n if (dir[dir.length - 1] === win32.sep) {\r\n return dir + base;\r\n }\r\n return dir + win32.sep + base;\r\n};\r\n\r\n\r\nwin32.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = win32SplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nwin32.sep = '\\\\';\r\nwin32.delimiter = ';';\r\n\r\n\r\n// Split a filename into [root, dir, basename, ext], unix version\r\n// 'root' is just a slash, or nothing.\r\nvar splitPathRe =\r\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\nvar posix = {};\r\n\r\n\r\nfunction posixSplitPath(filename) {\r\n return splitPathRe.exec(filename).slice(1);\r\n}\r\n\r\n\r\n// path.resolve([from ...], to)\r\n// posix version\r\nposix.resolve = function() {\r\n var resolvedPath = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\r\n var path = (i >= 0) ? arguments[i] : process.cwd();\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n resolvedPath = path + '/' + resolvedPath;\r\n resolvedAbsolute = path[0] === '/';\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path, but\r\n // handle relative paths to be safe (might happen when process.cwd() fails)\r\n\r\n // Normalize the path\r\n resolvedPath = normalizeArray(resolvedPath.split('/'),\r\n !resolvedAbsolute).join('/');\r\n\r\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\r\n};\r\n\r\n// path.normalize(path)\r\n// posix version\r\nposix.normalize = function(path) {\r\n var isAbsolute = posix.isAbsolute(path),\r\n trailingSlash = path && path[path.length - 1] === '/';\r\n\r\n // Normalize the path\r\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\r\n\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n\r\n return (isAbsolute ? '/' : '') + path;\r\n};\r\n\r\n// posix version\r\nposix.isAbsolute = function(path) {\r\n return path.charAt(0) === '/';\r\n};\r\n\r\n// posix version\r\nposix.join = function() {\r\n var path = '';\r\n for (var i = 0; i < arguments.length; i++) {\r\n var segment = arguments[i];\r\n if (!util.isString(segment)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (segment) {\r\n if (!path) {\r\n path += segment;\r\n } else {\r\n path += '/' + segment;\r\n }\r\n }\r\n }\r\n return posix.normalize(path);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// posix version\r\nposix.relative = function(from, to) {\r\n from = posix.resolve(from).substr(1);\r\n to = posix.resolve(to).substr(1);\r\n\r\n var fromParts = trimArray(from.split('/'));\r\n var toParts = trimArray(to.split('/'));\r\n\r\n var length = Math.min(fromParts.length, toParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (fromParts[i] !== toParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < fromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('/');\r\n};\r\n\r\n\r\nposix._makeLong = function(path) {\r\n return path;\r\n};\r\n\r\n\r\nposix.dirname = function(path) {\r\n var result = posixSplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nposix.basename = function(path, ext) {\r\n var f = posixSplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nposix.extname = function(path) {\r\n return posixSplitPath(path)[3];\r\n};\r\n\r\n\r\nposix.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\r\n var base = pathObject.base || '';\r\n return dir + base;\r\n};\r\n\r\n\r\nposix.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = posixSplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n allParts[1] = allParts[1] || '';\r\n allParts[2] = allParts[2] || '';\r\n allParts[3] = allParts[3] || '';\r\n\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nposix.sep = '/';\r\nposix.delimiter = ':';\r\n\r\n\r\nif (isWindows)\r\n module.exports = win32;\r\nelse /* posix */\r\n module.exports = posix;\r\n\r\nmodule.exports.posix = posix;\r\nmodule.exports.win32 = win32;\r\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","/*\n * readlineSync\n * https://github.com/anseki/readline-sync\n *\n * Copyright (c) 2018 anseki\n * Licensed under the MIT license.\n */\n\n'use strict';\n\nvar\n IS_WIN = process.platform === 'win32',\n\n ALGORITHM_CIPHER = 'aes-256-cbc',\n ALGORITHM_HASH = 'sha256',\n DEFAULT_ERR_MSG = 'The current environment doesn\\'t support interactive reading from TTY.',\n\n fs = require('fs'),\n TTY = process.binding('tty_wrap').TTY,\n childProc = require('child_process'),\n pathUtil = require('path'),\n\n defaultOptions = {\n /* eslint-disable key-spacing */\n prompt: '> ',\n hideEchoBack: false,\n mask: '*',\n limit: [],\n limitMessage: 'Input another, please.$<( [)limit(])>',\n defaultInput: '',\n trueValue: [],\n falseValue: [],\n caseSensitive: false,\n keepWhitespace: false,\n encoding: 'utf8',\n bufferSize: 1024,\n print: void 0,\n history: true,\n cd: false,\n phContent: void 0,\n preCheck: void 0\n /* eslint-enable key-spacing */\n },\n\n fdR = 'none', fdW, ttyR, isRawMode = false,\n extHostPath, extHostArgs, tempdir, salt = 0,\n lastInput = '', inputHistory = [], rawInput,\n _DBG_useExt = false, _DBG_checkOptions = false, _DBG_checkMethod = false;\n\nfunction getHostArgs(options) {\n // Send any text to crazy Windows shell safely.\n function encodeArg(arg) {\n return arg.replace(/[^\\w\\u0080-\\uFFFF]/g, function(chr) {\n return '#' + chr.charCodeAt(0) + ';';\n });\n }\n\n return extHostArgs.concat((function(conf) {\n var args = [];\n Object.keys(conf).forEach(function(optionName) {\n if (conf[optionName] === 'boolean') {\n if (options[optionName]) { args.push('--' + optionName); }\n } else if (conf[optionName] === 'string') {\n if (options[optionName]) {\n args.push('--' + optionName, encodeArg(options[optionName]));\n }\n }\n });\n return args;\n })({\n /* eslint-disable key-spacing */\n display: 'string',\n displayOnly: 'boolean',\n keyIn: 'boolean',\n hideEchoBack: 'boolean',\n mask: 'string',\n limit: 'string',\n caseSensitive: 'boolean'\n /* eslint-enable key-spacing */\n }));\n}\n\n// piping via files (for Node.js v0.10-)\nfunction _execFileSync(options, execOptions) {\n\n function getTempfile(name) {\n var filepath, suffix = '', fd;\n tempdir = tempdir || require('os').tmpdir();\n\n while (true) {\n filepath = pathUtil.join(tempdir, name + suffix);\n try {\n fd = fs.openSync(filepath, 'wx');\n } catch (e) {\n if (e.code === 'EEXIST') {\n suffix++;\n continue;\n } else {\n throw e;\n }\n }\n fs.closeSync(fd);\n break;\n }\n return filepath;\n }\n\n var hostArgs, shellPath, shellArgs, res = {}, exitCode, extMessage,\n pathStdout = getTempfile('readline-sync.stdout'),\n pathStderr = getTempfile('readline-sync.stderr'),\n pathExit = getTempfile('readline-sync.exit'),\n pathDone = getTempfile('readline-sync.done'),\n crypto = require('crypto'), shasum, decipher, password;\n\n shasum = crypto.createHash(ALGORITHM_HASH);\n shasum.update('' + process.pid + (salt++) + Math.random());\n password = shasum.digest('hex');\n decipher = crypto.createDecipher(ALGORITHM_CIPHER, password);\n\n hostArgs = getHostArgs(options);\n if (IS_WIN) {\n shellPath = process.env.ComSpec || 'cmd.exe';\n process.env.Q = '\"'; // The quote (\") that isn't escaped.\n // `()` for ignore space by echo\n shellArgs = ['/V:ON', '/S', '/C',\n '(%Q%' + shellPath + '%Q% /V:ON /S /C %Q%' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n '%Q%' + extHostPath + '%Q%' +\n hostArgs.map(function(arg) { return ' %Q%' + arg + '%Q%'; }).join('') +\n ' & (echo !ERRORLEVEL!)>%Q%' + pathExit + '%Q%%Q%) 2>%Q%' + pathStderr + '%Q%' +\n ' |%Q%' + process.execPath + '%Q% %Q%' + __dirname + '\\\\encrypt.js%Q%' +\n ' %Q%' + ALGORITHM_CIPHER + '%Q% %Q%' + password + '%Q%' +\n ' >%Q%' + pathStdout + '%Q%' +\n ' & (echo 1)>%Q%' + pathDone + '%Q%'];\n } else {\n shellPath = '/bin/sh';\n shellArgs = ['-c',\n // Use `()`, not `{}` for `-c` (text param)\n '(\"' + extHostPath + '\"' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n hostArgs.map(function(arg) { return \" '\" + arg.replace(/'/g, \"'\\\\''\") + \"'\"; }).join('') +\n '; echo $?>\"' + pathExit + '\") 2>\"' + pathStderr + '\"' +\n ' |\"' + process.execPath + '\" \"' + __dirname + '/encrypt.js\"' +\n ' \"' + ALGORITHM_CIPHER + '\" \"' + password + '\"' +\n ' >\"' + pathStdout + '\"' +\n '; echo 1 >\"' + pathDone + '\"'];\n }\n if (_DBG_checkMethod) { _DBG_checkMethod('_execFileSync', hostArgs); }\n try {\n childProc.spawn(shellPath, shellArgs, execOptions);\n } catch (e) {\n res.error = new Error(e.message);\n res.error.method = '_execFileSync - spawn';\n res.error.program = shellPath;\n res.error.args = shellArgs;\n }\n\n while (fs.readFileSync(pathDone, {encoding: options.encoding}).trim() !== '1') {} // eslint-disable-line no-empty\n if ((exitCode =\n fs.readFileSync(pathExit, {encoding: options.encoding}).trim()) === '0') {\n res.input =\n decipher.update(fs.readFileSync(pathStdout, {encoding: 'binary'}),\n 'hex', options.encoding) +\n decipher.final(options.encoding);\n } else {\n extMessage = fs.readFileSync(pathStderr, {encoding: options.encoding}).trim();\n res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n res.error.method = '_execFileSync';\n res.error.program = shellPath;\n res.error.args = shellArgs;\n res.error.extMessage = extMessage;\n res.error.exitCode = +exitCode;\n }\n\n fs.unlinkSync(pathStdout);\n fs.unlinkSync(pathStderr);\n fs.unlinkSync(pathExit);\n fs.unlinkSync(pathDone);\n\n return res;\n}\n\nfunction readlineExt(options) {\n var hostArgs, res = {}, extMessage,\n execOptions = {env: process.env, encoding: options.encoding};\n\n if (!extHostPath) {\n if (IS_WIN) {\n if (process.env.PSModulePath) { // Windows PowerShell\n extHostPath = 'powershell.exe';\n extHostArgs = ['-ExecutionPolicy', 'Bypass', '-File', __dirname + '\\\\read.ps1']; // eslint-disable-line no-path-concat\n } else { // Windows Script Host\n extHostPath = 'cscript.exe';\n extHostArgs = ['//nologo', __dirname + '\\\\read.cs.js']; // eslint-disable-line no-path-concat\n }\n } else {\n extHostPath = '/bin/sh';\n extHostArgs = [__dirname + '/read.sh']; // eslint-disable-line no-path-concat\n }\n }\n if (IS_WIN && !process.env.PSModulePath) { // Windows Script Host\n // ScriptPW (Win XP and Server2003) needs TTY stream as STDIN.\n // In this case, If STDIN isn't TTY, an error is thrown.\n execOptions.stdio = [process.stdin];\n }\n\n if (childProc.execFileSync) {\n hostArgs = getHostArgs(options);\n if (_DBG_checkMethod) { _DBG_checkMethod('execFileSync', hostArgs); }\n try {\n res.input = childProc.execFileSync(extHostPath, hostArgs, execOptions);\n } catch (e) { // non-zero exit code\n extMessage = e.stderr ? (e.stderr + '').trim() : '';\n res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n res.error.method = 'execFileSync';\n res.error.program = extHostPath;\n res.error.args = hostArgs;\n res.error.extMessage = extMessage;\n res.error.exitCode = e.status;\n res.error.code = e.code;\n res.error.signal = e.signal;\n }\n } else {\n res = _execFileSync(options, execOptions);\n }\n if (!res.error) {\n res.input = res.input.replace(/^\\s*'|'\\s*$/g, '');\n options.display = '';\n }\n\n return res;\n}\n\n/*\n display: string\n displayOnly: boolean\n keyIn: boolean\n hideEchoBack: boolean\n mask: string\n limit: string (pattern)\n caseSensitive: boolean\n keepWhitespace: boolean\n encoding, bufferSize, print\n*/\nfunction _readlineSync(options) {\n var input = '', displaySave = options.display,\n silent = !options.display &&\n options.keyIn && options.hideEchoBack && !options.mask;\n\n function tryExt() {\n var res = readlineExt(options);\n if (res.error) { throw res.error; }\n return res.input;\n }\n\n if (_DBG_checkOptions) { _DBG_checkOptions(options); }\n\n (function() { // open TTY\n var fsB, constants, verNum;\n\n function getFsB() {\n if (!fsB) {\n fsB = process.binding('fs'); // For raw device path\n constants = process.binding('constants');\n }\n return fsB;\n }\n\n if (typeof fdR !== 'string') { return; }\n fdR = null;\n\n if (IS_WIN) {\n // iojs-v2.3.2+ input stream can't read first line. (#18)\n // ** Don't get process.stdin before check! **\n // Fixed v5.1.0\n // Fixed v4.2.4\n // It regressed again in v5.6.0, it is fixed in v6.2.0.\n verNum = (function(ver) { // getVerNum\n var nums = ver.replace(/^\\D+/, '').split('.');\n var verNum = 0;\n if ((nums[0] = +nums[0])) { verNum += nums[0] * 10000; }\n if ((nums[1] = +nums[1])) { verNum += nums[1] * 100; }\n if ((nums[2] = +nums[2])) { verNum += nums[2]; }\n return verNum;\n })(process.version);\n if (!(verNum >= 20302 && verNum < 40204 || verNum >= 50000 && verNum < 50100 || verNum >= 50600 && verNum < 60200) &&\n process.stdin.isTTY) {\n process.stdin.pause();\n fdR = process.stdin.fd;\n ttyR = process.stdin._handle;\n } else {\n try {\n // The stream by fs.openSync('\\\\\\\\.\\\\CON', 'r') can't switch to raw mode.\n // 'CONIN$' might fail on XP, 2000, 7 (x86).\n fdR = getFsB().open('CONIN$', constants.O_RDWR, parseInt('0666', 8));\n ttyR = new TTY(fdR, true);\n } catch (e) { /* ignore */ }\n }\n\n if (process.stdout.isTTY) {\n fdW = process.stdout.fd;\n } else {\n try {\n fdW = fs.openSync('\\\\\\\\.\\\\CON', 'w');\n } catch (e) { /* ignore */ }\n if (typeof fdW !== 'number') { // Retry\n try {\n fdW = getFsB().open('CONOUT$', constants.O_RDWR, parseInt('0666', 8));\n } catch (e) { /* ignore */ }\n }\n }\n\n } else {\n if (process.stdin.isTTY) {\n process.stdin.pause();\n try {\n fdR = fs.openSync('/dev/tty', 'r'); // device file, not process.stdin\n ttyR = process.stdin._handle;\n } catch (e) { /* ignore */ }\n } else {\n // Node.js v0.12 read() fails.\n try {\n fdR = fs.openSync('/dev/tty', 'r');\n ttyR = new TTY(fdR, false);\n } catch (e) { /* ignore */ }\n }\n\n if (process.stdout.isTTY) {\n fdW = process.stdout.fd;\n } else {\n try {\n fdW = fs.openSync('/dev/tty', 'w');\n } catch (e) { /* ignore */ }\n }\n }\n })();\n\n (function() { // try read\n var atEol, limit,\n isCooked = !options.hideEchoBack && !options.keyIn,\n buffer, reqSize, readSize, chunk, line;\n rawInput = '';\n\n // Node.js v0.10- returns an error if same mode is set.\n function setRawMode(mode) {\n if (mode === isRawMode) { return true; }\n if (ttyR.setRawMode(mode) !== 0) { return false; }\n isRawMode = mode;\n return true;\n }\n\n if (_DBG_useExt || !ttyR ||\n typeof fdW !== 'number' && (options.display || !isCooked)) {\n input = tryExt();\n return;\n }\n\n if (options.display) {\n fs.writeSync(fdW, options.display);\n options.display = '';\n }\n if (options.displayOnly) { return; }\n\n if (!setRawMode(!isCooked)) {\n input = tryExt();\n return;\n }\n\n reqSize = options.keyIn ? 1 : options.bufferSize;\n // Check `allocUnsafe` to make sure of the new API.\n buffer = Buffer.allocUnsafe && Buffer.alloc ? Buffer.alloc(reqSize) : new Buffer(reqSize);\n\n if (options.keyIn && options.limit) {\n limit = new RegExp('[^' + options.limit + ']',\n 'g' + (options.caseSensitive ? '' : 'i'));\n }\n\n while (true) {\n readSize = 0;\n try {\n readSize = fs.readSync(fdR, buffer, 0, reqSize);\n } catch (e) {\n if (e.code !== 'EOF') {\n setRawMode(false);\n input += tryExt();\n return;\n }\n }\n if (readSize > 0) {\n chunk = buffer.toString(options.encoding, 0, readSize);\n rawInput += chunk;\n } else {\n chunk = '\\n';\n rawInput += String.fromCharCode(0);\n }\n\n if (chunk && typeof (line = (chunk.match(/^(.*?)[\\r\\n]/) || [])[1]) === 'string') {\n chunk = line;\n atEol = true;\n }\n\n // other ctrl-chars\n // eslint-disable-next-line no-control-regex\n if (chunk) { chunk = chunk.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, ''); }\n if (chunk && limit) { chunk = chunk.replace(limit, ''); }\n\n if (chunk) {\n if (!isCooked) {\n if (!options.hideEchoBack) {\n fs.writeSync(fdW, chunk);\n } else if (options.mask) {\n fs.writeSync(fdW, (new Array(chunk.length + 1)).join(options.mask));\n }\n }\n input += chunk;\n }\n\n if (!options.keyIn && atEol ||\n options.keyIn && input.length >= reqSize) { break; }\n }\n\n if (!isCooked && !silent) { fs.writeSync(fdW, '\\n'); }\n setRawMode(false);\n })();\n\n if (options.print && !silent) {\n options.print(displaySave + (options.displayOnly ? '' :\n (options.hideEchoBack ? (new Array(input.length + 1)).join(options.mask)\n : input) + '\\n'), // must at least write '\\n'\n options.encoding);\n }\n\n return options.displayOnly ? '' :\n (lastInput = options.keepWhitespace || options.keyIn ? input : input.trim());\n}\n\nfunction flattenArray(array, validator) {\n var flatArray = [];\n function _flattenArray(array) {\n if (array == null) {\n return;\n } else if (Array.isArray(array)) {\n array.forEach(_flattenArray);\n } else if (!validator || validator(array)) {\n flatArray.push(array);\n }\n }\n _flattenArray(array);\n return flatArray;\n}\n\nfunction escapePattern(pattern) {\n return pattern.replace(/[\\x00-\\x7f]/g, // eslint-disable-line no-control-regex\n function(s) { return '\\\\x' + ('00' + s.charCodeAt().toString(16)).substr(-2); });\n}\n\n// margeOptions(options1, options2 ... )\n// margeOptions(true, options1, options2 ... )\n// arg1=true : Start from defaultOptions and pick elements of that.\nfunction margeOptions() {\n var optionsList = Array.prototype.slice.call(arguments),\n optionNames, fromDefault;\n\n if (optionsList.length && typeof optionsList[0] === 'boolean') {\n fromDefault = optionsList.shift();\n if (fromDefault) {\n optionNames = Object.keys(defaultOptions);\n optionsList.unshift(defaultOptions);\n }\n }\n\n return optionsList.reduce(function(options, optionsPart) {\n if (optionsPart == null) { return options; }\n\n // ======== DEPRECATED ========\n if (optionsPart.hasOwnProperty('noEchoBack') &&\n !optionsPart.hasOwnProperty('hideEchoBack')) {\n optionsPart.hideEchoBack = optionsPart.noEchoBack;\n delete optionsPart.noEchoBack;\n }\n if (optionsPart.hasOwnProperty('noTrim') &&\n !optionsPart.hasOwnProperty('keepWhitespace')) {\n optionsPart.keepWhitespace = optionsPart.noTrim;\n delete optionsPart.noTrim;\n }\n // ======== /DEPRECATED ========\n\n if (!fromDefault) { optionNames = Object.keys(optionsPart); }\n optionNames.forEach(function(optionName) {\n var value;\n if (!optionsPart.hasOwnProperty(optionName)) { return; }\n value = optionsPart[optionName];\n switch (optionName) {\n // _readlineSync <- * * -> defaultOptions\n // ================ string\n case 'mask': // * *\n case 'limitMessage': // *\n case 'defaultInput': // *\n case 'encoding': // * *\n value = value != null ? value + '' : '';\n if (value && optionName !== 'limitMessage') { value = value.replace(/[\\r\\n]/g, ''); }\n options[optionName] = value;\n break;\n // ================ number(int)\n case 'bufferSize': // * *\n if (!isNaN(value = parseInt(value, 10)) && typeof value === 'number') {\n options[optionName] = value; // limited updating (number is needed)\n }\n break;\n // ================ boolean\n case 'displayOnly': // *\n case 'keyIn': // *\n case 'hideEchoBack': // * *\n case 'caseSensitive': // * *\n case 'keepWhitespace': // * *\n case 'history': // *\n case 'cd': // *\n options[optionName] = !!value;\n break;\n // ================ array\n case 'limit': // * * to string for readlineExt\n case 'trueValue': // *\n case 'falseValue': // *\n options[optionName] = flattenArray(value, function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number' ||\n type === 'function' || value instanceof RegExp;\n }).map(function(value) {\n return typeof value === 'string' ? value.replace(/[\\r\\n]/g, '') : value;\n });\n break;\n // ================ function\n case 'print': // * *\n case 'phContent': // *\n case 'preCheck': // *\n options[optionName] = typeof value === 'function' ? value : void 0;\n break;\n // ================ other\n case 'prompt': // *\n case 'display': // *\n options[optionName] = value != null ? value : '';\n break;\n // no default\n }\n });\n return options;\n }, {});\n}\n\nfunction isMatched(res, comps, caseSensitive) {\n return comps.some(function(comp) {\n var type = typeof comp;\n return type === 'string' ?\n (caseSensitive ? res === comp : res.toLowerCase() === comp.toLowerCase()) :\n type === 'number' ? parseFloat(res) === comp :\n type === 'function' ? comp(res) :\n comp instanceof RegExp ? comp.test(res) : false;\n });\n}\n\nfunction replaceHomePath(path, expand) {\n var homePath = pathUtil.normalize(\n IS_WIN ? (process.env.HOMEDRIVE || '') + (process.env.HOMEPATH || '') :\n process.env.HOME || '').replace(/[\\/\\\\]+$/, '');\n path = pathUtil.normalize(path);\n return expand ? path.replace(/^~(?=\\/|\\\\|$)/, homePath) :\n path.replace(new RegExp('^' + escapePattern(homePath) +\n '(?=\\\\/|\\\\\\\\|$)', IS_WIN ? 'i' : ''), '~');\n}\n\nfunction replacePlaceholder(text, generator) {\n var PTN_INNER = '(?:\\\\(([\\\\s\\\\S]*?)\\\\))?(\\\\w+|.-.)(?:\\\\(([\\\\s\\\\S]*?)\\\\))?',\n rePlaceholder = new RegExp('(\\\\$)?(\\\\$<' + PTN_INNER + '>)', 'g'),\n rePlaceholderCompat = new RegExp('(\\\\$)?(\\\\$\\\\{' + PTN_INNER + '\\\\})', 'g');\n\n function getPlaceholderText(s, escape, placeholder, pre, param, post) {\n var text;\n return escape || typeof (text = generator(param)) !== 'string' ? placeholder :\n text ? (pre || '') + text + (post || '') : '';\n }\n\n return text.replace(rePlaceholder, getPlaceholderText)\n .replace(rePlaceholderCompat, getPlaceholderText);\n}\n\nfunction array2charlist(array, caseSensitive, collectSymbols) {\n var values, group = [], groupClass = -1, charCode = 0, symbols = '', suppressed;\n function addGroup(groups, group) {\n if (group.length > 3) { // ellipsis\n groups.push(group[0] + '...' + group[group.length - 1]);\n suppressed = true;\n } else if (group.length) {\n groups = groups.concat(group);\n }\n return groups;\n }\n\n values = array.reduce(\n function(chars, value) { return chars.concat((value + '').split('')); }, [])\n .reduce(function(groups, curChar) {\n var curGroupClass, curCharCode;\n if (!caseSensitive) { curChar = curChar.toLowerCase(); }\n curGroupClass = /^\\d$/.test(curChar) ? 1 :\n /^[A-Z]$/.test(curChar) ? 2 : /^[a-z]$/.test(curChar) ? 3 : 0;\n if (collectSymbols && curGroupClass === 0) {\n symbols += curChar;\n } else {\n curCharCode = curChar.charCodeAt(0);\n if (curGroupClass && curGroupClass === groupClass &&\n curCharCode === charCode + 1) {\n group.push(curChar);\n } else {\n groups = addGroup(groups, group);\n group = [curChar];\n groupClass = curGroupClass;\n }\n charCode = curCharCode;\n }\n return groups;\n }, []);\n values = addGroup(values, group); // last group\n if (symbols) { values.push(symbols); suppressed = true; }\n return {values: values, suppressed: suppressed};\n}\n\nfunction joinChunks(chunks, suppressed) {\n return chunks.join(chunks.length > 2 ? ', ' : suppressed ? ' / ' : '/');\n}\n\nfunction getPhContent(param, options) {\n var text, values, resCharlist = {}, arg;\n if (options.phContent) {\n text = options.phContent(param, options);\n }\n if (typeof text !== 'string') {\n switch (param) {\n case 'hideEchoBack':\n case 'mask':\n case 'defaultInput':\n case 'caseSensitive':\n case 'keepWhitespace':\n case 'encoding':\n case 'bufferSize':\n case 'history':\n case 'cd':\n text = !options.hasOwnProperty(param) ? '' :\n typeof options[param] === 'boolean' ? (options[param] ? 'on' : 'off') :\n options[param] + '';\n break;\n // case 'prompt':\n // case 'query':\n // case 'display':\n // text = options.hasOwnProperty('displaySrc') ? options.displaySrc + '' : '';\n // break;\n case 'limit':\n case 'trueValue':\n case 'falseValue':\n values = options[options.hasOwnProperty(param + 'Src') ? param + 'Src' : param];\n if (options.keyIn) { // suppress\n resCharlist = array2charlist(values, options.caseSensitive);\n values = resCharlist.values;\n } else {\n values = values.filter(function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number';\n });\n }\n text = joinChunks(values, resCharlist.suppressed);\n break;\n case 'limitCount':\n case 'limitCountNotZero':\n text = options[options.hasOwnProperty('limitSrc') ?\n 'limitSrc' : 'limit'].length;\n text = text || param !== 'limitCountNotZero' ? text + '' : '';\n break;\n case 'lastInput':\n text = lastInput;\n break;\n case 'cwd':\n case 'CWD':\n case 'cwdHome':\n text = process.cwd();\n if (param === 'CWD') {\n text = pathUtil.basename(text);\n } else if (param === 'cwdHome') {\n text = replaceHomePath(text);\n }\n break;\n case 'date':\n case 'time':\n case 'localeDate':\n case 'localeTime':\n text = (new Date())['to' +\n param.replace(/^./, function(str) { return str.toUpperCase(); }) +\n 'String']();\n break;\n default: // with arg\n if (typeof (arg = (param.match(/^history_m(\\d+)$/) || [])[1]) === 'string') {\n text = inputHistory[inputHistory.length - arg] || '';\n }\n }\n }\n return text;\n}\n\nfunction getPhCharlist(param) {\n var matches = /^(.)-(.)$/.exec(param), text = '', from, to, code, step;\n if (!matches) { return null; }\n from = matches[1].charCodeAt(0);\n to = matches[2].charCodeAt(0);\n step = from < to ? 1 : -1;\n for (code = from; code !== to + step; code += step) { text += String.fromCharCode(code); }\n return text;\n}\n\n// cmd \"arg\" \" a r g \" \"\" 'a\"r\"g' \"a\"\"rg\" \"arg\nfunction parseCl(cl) {\n var reToken = new RegExp(/(\\s*)(?:(\"|')(.*?)(?:\\2|$)|(\\S+))/g), matches,\n taken = '', args = [], part;\n cl = cl.trim();\n while ((matches = reToken.exec(cl))) {\n part = matches[3] || matches[4] || '';\n if (matches[1]) {\n args.push(taken);\n taken = '';\n }\n taken += part;\n }\n if (taken) { args.push(taken); }\n return args;\n}\n\nfunction toBool(res, options) {\n return (\n (options.trueValue.length &&\n isMatched(res, options.trueValue, options.caseSensitive)) ? true :\n (options.falseValue.length &&\n isMatched(res, options.falseValue, options.caseSensitive)) ? false : res);\n}\n\nfunction getValidLine(options) {\n var res, forceNext, limitMessage,\n matches, histInput, args, resCheck;\n\n function _getPhContent(param) { return getPhContent(param, options); }\n function addDisplay(text) { options.display += (/[^\\r\\n]$/.test(options.display) ? '\\n' : '') + text; }\n\n options.limitSrc = options.limit;\n options.displaySrc = options.display;\n options.limit = ''; // for readlineExt\n options.display = replacePlaceholder(options.display + '', _getPhContent);\n\n while (true) {\n res = _readlineSync(options);\n forceNext = false;\n limitMessage = '';\n\n if (options.defaultInput && !res) { res = options.defaultInput; }\n\n if (options.history) {\n if ((matches = /^\\s*\\!(?:\\!|-1)(:p)?\\s*$/.exec(res))) { // `!!` `!-1` +`:p`\n histInput = inputHistory[0] || '';\n if (matches[1]) { // only display\n forceNext = true;\n } else { // replace input\n res = histInput;\n }\n // Show it even if it is empty (NL only).\n addDisplay(histInput + '\\n');\n if (!forceNext) { // Loop may break\n options.displayOnly = true;\n _readlineSync(options);\n options.displayOnly = false;\n }\n } else if (res && res !== inputHistory[inputHistory.length - 1]) {\n inputHistory = [res];\n }\n }\n\n if (!forceNext && options.cd && res) {\n args = parseCl(res);\n switch (args[0].toLowerCase()) {\n case 'cd':\n if (args[1]) {\n try {\n process.chdir(replaceHomePath(args[1], true));\n } catch (e) {\n addDisplay(e + '');\n }\n }\n forceNext = true;\n break;\n case 'pwd':\n addDisplay(process.cwd());\n forceNext = true;\n break;\n // no default\n }\n }\n\n if (!forceNext && options.preCheck) {\n resCheck = options.preCheck(res, options);\n res = resCheck.res;\n if (resCheck.forceNext) { forceNext = true; } // Don't switch to false.\n }\n\n if (!forceNext) {\n if (!options.limitSrc.length ||\n isMatched(res, options.limitSrc, options.caseSensitive)) { break; }\n if (options.limitMessage) {\n limitMessage = replacePlaceholder(options.limitMessage, _getPhContent);\n }\n }\n\n addDisplay((limitMessage ? limitMessage + '\\n' : '') +\n replacePlaceholder(options.displaySrc + '', _getPhContent));\n }\n return toBool(res, options);\n}\n\n// for dev\nexports._DBG_set_useExt = function(val) { _DBG_useExt = val; };\nexports._DBG_set_checkOptions = function(val) { _DBG_checkOptions = val; };\nexports._DBG_set_checkMethod = function(val) { _DBG_checkMethod = val; };\nexports._DBG_clearHistory = function() { lastInput = ''; inputHistory = []; };\n\n// ------------------------------------\n\nexports.setDefaultOptions = function(options) {\n defaultOptions = margeOptions(true, options);\n return margeOptions(true); // copy\n};\n\nexports.question = function(query, options) {\n /* eslint-disable key-spacing */\n return getValidLine(margeOptions(margeOptions(true, options), {\n display: query\n }));\n /* eslint-enable key-spacing */\n};\n\nexports.prompt = function(options) {\n var readOptions = margeOptions(true, options);\n readOptions.display = readOptions.prompt;\n return getValidLine(readOptions);\n};\n\nexports.keyIn = function(query, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions(margeOptions(true, options), {\n display: query,\n keyIn: true,\n keepWhitespace: true\n });\n /* eslint-enable key-spacing */\n\n // char list\n readOptions.limitSrc = readOptions.limit.filter(function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number';\n })\n .map(function(text) { return replacePlaceholder(text + '', getPhCharlist); });\n // pattern\n readOptions.limit = escapePattern(readOptions.limitSrc.join(''));\n\n ['trueValue', 'falseValue'].forEach(function(optionName) {\n readOptions[optionName] = readOptions[optionName].reduce(function(comps, comp) {\n var type = typeof comp;\n if (type === 'string' || type === 'number') {\n comps = comps.concat((comp + '').split(''));\n } else { comps.push(comp); }\n return comps;\n }, []);\n });\n\n readOptions.display = replacePlaceholder(readOptions.display + '',\n function(param) { return getPhContent(param, readOptions); });\n\n return toBool(_readlineSync(readOptions), readOptions);\n};\n\n// ------------------------------------\n\nexports.questionEMail = function(query, options) {\n if (query == null) { query = 'Input e-mail address: '; }\n /* eslint-disable key-spacing */\n return exports.question(query, margeOptions({\n // -------- default\n hideEchoBack: false,\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address\n limit: /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,\n limitMessage: 'Input valid e-mail address, please.',\n trueValue: null,\n falseValue: null\n }, options, {\n // -------- forced\n keepWhitespace: false,\n cd: false\n }));\n /* eslint-enable key-spacing */\n};\n\nexports.questionNewPassword = function(query, options) {\n /* eslint-disable key-spacing */\n var resCharlist, min, max,\n readOptions = margeOptions({\n // -------- default\n hideEchoBack: true,\n mask: '*',\n limitMessage: 'It can include: $\\n' +\n 'And the length must be: $',\n trueValue: null,\n falseValue: null,\n caseSensitive: true\n }, options, {\n // -------- forced\n history: false,\n cd: false,\n // limit (by charlist etc.),\n phContent: function(param) {\n return param === 'charlist' ? resCharlist.text :\n param === 'length' ? min + '...' + max : null;\n }\n }),\n // added: charlist, min, max, confirmMessage, unmatchMessage\n charlist, confirmMessage, unmatchMessage,\n limit, limitMessage, res1, res2;\n /* eslint-enable key-spacing */\n options = options || {};\n\n charlist = replacePlaceholder(\n options.charlist ? options.charlist + '' : '$', getPhCharlist);\n if (isNaN(min = parseInt(options.min, 10)) || typeof min !== 'number') { min = 12; }\n if (isNaN(max = parseInt(options.max, 10)) || typeof max !== 'number') { max = 24; }\n limit = new RegExp('^[' + escapePattern(charlist) +\n ']{' + min + ',' + max + '}$');\n resCharlist = array2charlist([charlist], readOptions.caseSensitive, true);\n resCharlist.text = joinChunks(resCharlist.values, resCharlist.suppressed);\n\n confirmMessage = options.confirmMessage != null ? options.confirmMessage :\n 'Reinput a same one to confirm it: ';\n unmatchMessage = options.unmatchMessage != null ? options.unmatchMessage :\n 'It differs from first one.' +\n ' Hit only the Enter key if you want to retry from first one.';\n\n if (query == null) { query = 'Input new password: '; }\n\n limitMessage = readOptions.limitMessage;\n while (!res2) {\n readOptions.limit = limit;\n readOptions.limitMessage = limitMessage;\n res1 = exports.question(query, readOptions);\n\n readOptions.limit = [res1, ''];\n readOptions.limitMessage = unmatchMessage;\n res2 = exports.question(confirmMessage, readOptions);\n }\n\n return res1;\n};\n\nfunction _questionNum(query, options, parser) {\n var validValue;\n function getValidValue(value) {\n validValue = parser(value);\n return !isNaN(validValue) && typeof validValue === 'number';\n }\n /* eslint-disable key-spacing */\n exports.question(query, margeOptions({\n // -------- default\n limitMessage: 'Input valid number, please.'\n }, options, {\n // -------- forced\n limit: getValidValue,\n cd: false\n // trueValue, falseValue, caseSensitive, keepWhitespace don't work.\n }));\n /* eslint-enable key-spacing */\n return validValue;\n}\nexports.questionInt = function(query, options) {\n return _questionNum(query, options, function(value) { return parseInt(value, 10); });\n};\nexports.questionFloat = function(query, options) {\n return _questionNum(query, options, parseFloat);\n};\n\nexports.questionPath = function(query, options) {\n /* eslint-disable key-spacing */\n var validPath, error = '',\n readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: '$Input valid path, please.' +\n '$<( Min:)min>$<( Max:)max>',\n history: true,\n cd: true\n }, options, {\n // -------- forced\n keepWhitespace: false,\n limit: function(value) {\n var exists, stat, res;\n value = replaceHomePath(value, true);\n error = ''; // for validate\n // mkdir -p\n function mkdirParents(dirPath) {\n dirPath.split(/\\/|\\\\/).reduce(function(parents, dir) {\n var path = pathUtil.resolve((parents += dir + pathUtil.sep));\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path);\n } else if (!fs.statSync(path).isDirectory()) {\n throw new Error('Non directory already exists: ' + path);\n }\n return parents;\n }, '');\n }\n\n try {\n exists = fs.existsSync(value);\n validPath = exists ? fs.realpathSync(value) : pathUtil.resolve(value);\n // options.exists default: true, not-bool: no-check\n if (!options.hasOwnProperty('exists') && !exists ||\n typeof options.exists === 'boolean' && options.exists !== exists) {\n error = (exists ? 'Already exists' : 'No such file or directory') +\n ': ' + validPath;\n return false;\n }\n if (!exists && options.create) {\n if (options.isDirectory) {\n mkdirParents(validPath);\n } else {\n mkdirParents(pathUtil.dirname(validPath));\n fs.closeSync(fs.openSync(validPath, 'w')); // touch\n }\n validPath = fs.realpathSync(validPath);\n }\n if (exists && (options.min || options.max ||\n options.isFile || options.isDirectory)) {\n stat = fs.statSync(validPath);\n // type check first (directory has zero size)\n if (options.isFile && !stat.isFile()) {\n error = 'Not file: ' + validPath;\n return false;\n } else if (options.isDirectory && !stat.isDirectory()) {\n error = 'Not directory: ' + validPath;\n return false;\n } else if (options.min && stat.size < +options.min ||\n options.max && stat.size > +options.max) {\n error = 'Size ' + stat.size + ' is out of range: ' + validPath;\n return false;\n }\n }\n if (typeof options.validate === 'function' &&\n (res = options.validate(validPath)) !== true) {\n if (typeof res === 'string') { error = res; }\n return false;\n }\n } catch (e) {\n error = e + '';\n return false;\n }\n return true;\n },\n // trueValue, falseValue, caseSensitive don't work.\n phContent: function(param) {\n return param === 'error' ? error :\n param !== 'min' && param !== 'max' ? null :\n options.hasOwnProperty(param) ? options[param] + '' : '';\n }\n });\n // added: exists, create, min, max, isFile, isDirectory, validate\n /* eslint-enable key-spacing */\n options = options || {};\n\n if (query == null) { query = 'Input path (you can \"cd\" and \"pwd\"): '; }\n\n exports.question(query, readOptions);\n return validPath;\n};\n\n// props: preCheck, args, hRes, limit\nfunction getClHandler(commandHandler, options) {\n var clHandler = {}, hIndex = {};\n if (typeof commandHandler === 'object') {\n Object.keys(commandHandler).forEach(function(cmd) {\n if (typeof commandHandler[cmd] === 'function') {\n hIndex[options.caseSensitive ? cmd : cmd.toLowerCase()] = commandHandler[cmd];\n }\n });\n clHandler.preCheck = function(res) {\n var cmdKey;\n clHandler.args = parseCl(res);\n cmdKey = clHandler.args[0] || '';\n if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n clHandler.hRes =\n cmdKey !== '_' && hIndex.hasOwnProperty(cmdKey) ?\n hIndex[cmdKey].apply(res, clHandler.args.slice(1)) :\n hIndex.hasOwnProperty('_') ? hIndex._.apply(res, clHandler.args) : null;\n return {res: res, forceNext: false};\n };\n if (!hIndex.hasOwnProperty('_')) {\n clHandler.limit = function() { // It's called after preCheck.\n var cmdKey = clHandler.args[0] || '';\n if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n return hIndex.hasOwnProperty(cmdKey);\n };\n }\n } else {\n clHandler.preCheck = function(res) {\n clHandler.args = parseCl(res);\n clHandler.hRes = typeof commandHandler === 'function' ?\n commandHandler.apply(res, clHandler.args) : true; // true for break loop\n return {res: res, forceNext: false};\n };\n }\n return clHandler;\n}\n\nexports.promptCL = function(commandHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: 'Requested command is not available.',\n caseSensitive: false,\n history: true\n }, options),\n // -------- forced\n // trueValue, falseValue, keepWhitespace don't work.\n // preCheck, limit (by clHandler)\n clHandler = getClHandler(commandHandler, readOptions);\n /* eslint-enable key-spacing */\n readOptions.limit = clHandler.limit;\n readOptions.preCheck = clHandler.preCheck;\n exports.prompt(readOptions);\n return clHandler.args;\n};\n\nexports.promptLoop = function(inputHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n trueValue: null,\n falseValue: null,\n caseSensitive: false,\n history: true\n }, options);\n /* eslint-enable key-spacing */\n while (true) { if (inputHandler(exports.prompt(readOptions))) { break; } }\n return;\n};\n\nexports.promptCLLoop = function(commandHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: 'Requested command is not available.',\n caseSensitive: false,\n history: true\n }, options),\n // -------- forced\n // trueValue, falseValue, keepWhitespace don't work.\n // preCheck, limit (by clHandler)\n clHandler = getClHandler(commandHandler, readOptions);\n /* eslint-enable key-spacing */\n readOptions.limit = clHandler.limit;\n readOptions.preCheck = clHandler.preCheck;\n while (true) {\n exports.prompt(readOptions);\n if (clHandler.hRes) { break; }\n }\n return;\n};\n\nexports.promptSimShell = function(options) {\n /* eslint-disable key-spacing */\n return exports.prompt(margeOptions({\n // -------- default\n hideEchoBack: false,\n history: true\n }, options, {\n // -------- forced\n prompt: (function() {\n return IS_WIN ?\n '$>' :\n // 'user@host:cwd$ '\n (process.env.USER || '') +\n (process.env.HOSTNAME ?\n '@' + process.env.HOSTNAME.replace(/\\..*$/, '') : '') +\n ':$$ ';\n })()\n }));\n /* eslint-enable key-spacing */\n};\n\nfunction _keyInYN(query, options, limit) {\n var res;\n if (query == null) { query = 'Are you sure? '; }\n if ((!options || options.guide !== false) && (query += '')) {\n query = query.replace(/\\s*:?\\s*$/, '') + ' [y/n]: ';\n }\n /* eslint-disable key-spacing */\n res = exports.keyIn(query, margeOptions(options, {\n // -------- forced\n hideEchoBack: false,\n limit: limit,\n trueValue: 'y',\n falseValue: 'n',\n caseSensitive: false\n // mask doesn't work.\n }));\n // added: guide\n /* eslint-enable key-spacing */\n return typeof res === 'boolean' ? res : '';\n}\nexports.keyInYN = function(query, options) { return _keyInYN(query, options); };\nexports.keyInYNStrict = function(query, options) { return _keyInYN(query, options, 'yn'); };\n\nexports.keyInPause = function(query, options) {\n if (query == null) { query = 'Continue...'; }\n if ((!options || options.guide !== false) && (query += '')) {\n query = query.replace(/\\s+$/, '') + ' (Hit any key)';\n }\n /* eslint-disable key-spacing */\n exports.keyIn(query, margeOptions({\n // -------- default\n limit: null\n }, options, {\n // -------- forced\n hideEchoBack: true,\n mask: ''\n }));\n // added: guide\n /* eslint-enable key-spacing */\n return;\n};\n\nexports.keyInSelect = function(items, query, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false\n }, options, {\n // -------- forced\n trueValue: null,\n falseValue: null,\n caseSensitive: false,\n // limit (by items),\n phContent: function(param) {\n return param === 'itemsCount' ? items.length + '' :\n param === 'firstItem' ? (items[0] + '').trim() :\n param === 'lastItem' ? (items[items.length - 1] + '').trim() : null;\n }\n }),\n // added: guide, cancel\n keylist = '', key2i = {}, charCode = 49 /* '1' */, display = '\\n';\n /* eslint-enable key-spacing */\n if (!Array.isArray(items) || !items.length || items.length > 35) {\n throw '`items` must be Array (max length: 35).';\n }\n\n items.forEach(function(item, i) {\n var key = String.fromCharCode(charCode);\n keylist += key;\n key2i[key] = i;\n display += '[' + key + '] ' + (item + '').trim() + '\\n';\n charCode = charCode === 57 /* '9' */ ? 97 /* 'a' */ : charCode + 1;\n });\n if (!options || options.cancel !== false) {\n keylist += '0';\n key2i['0'] = -1;\n display += '[0] ' +\n (options && options.cancel != null && typeof options.cancel !== 'boolean' ?\n (options.cancel + '').trim() : 'CANCEL') + '\\n';\n }\n readOptions.limit = keylist;\n display += '\\n';\n\n if (query == null) { query = 'Choose one from list: '; }\n if ((query += '')) {\n if (!options || options.guide !== false) {\n query = query.replace(/\\s*:?\\s*$/, '') + ' [$]: ';\n }\n display += query;\n }\n\n return key2i[exports.keyIn(display, readOptions).toLowerCase()];\n};\n\nexports.getRawInput = function() { return rawInput; };\n\n// ======== DEPRECATED ========\nfunction _setOption(optionName, args) {\n var options;\n if (args.length) { options = {}; options[optionName] = args[0]; }\n return exports.setDefaultOptions(options)[optionName];\n}\nexports.setPrint = function() { return _setOption('print', arguments); };\nexports.setPrompt = function() { return _setOption('prompt', arguments); };\nexports.setEncoding = function() { return _setOption('encoding', arguments); };\nexports.setMask = function() { return _setOption('mask', arguments); };\nexports.setBufferSize = function() { return _setOption('bufferSize', arguments); };\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\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\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\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'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var SvgPanZoom = require(\"./svg-pan-zoom.js\");\n\nmodule.exports = SvgPanZoom;\n","var SvgUtils = require(\"./svg-utilities\");\n\nmodule.exports = {\n enable: function(instance) {\n // Select (and create if necessary) defs\n var defs = instance.svg.querySelector(\"defs\");\n if (!defs) {\n defs = document.createElementNS(SvgUtils.svgNS, \"defs\");\n instance.svg.appendChild(defs);\n }\n\n // Check for style element, and create it if it doesn't exist\n var styleEl = defs.querySelector(\"style#svg-pan-zoom-controls-styles\");\n if (!styleEl) {\n var style = document.createElementNS(SvgUtils.svgNS, \"style\");\n style.setAttribute(\"id\", \"svg-pan-zoom-controls-styles\");\n style.setAttribute(\"type\", \"text/css\");\n style.textContent =\n \".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }\";\n defs.appendChild(style);\n }\n\n // Zoom Group\n var zoomGroup = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomGroup.setAttribute(\"id\", \"svg-pan-zoom-controls\");\n zoomGroup.setAttribute(\n \"transform\",\n \"translate(\" +\n (instance.width - 70) +\n \" \" +\n (instance.height - 76) +\n \") scale(0.75)\"\n );\n zoomGroup.setAttribute(\"class\", \"svg-pan-zoom-control\");\n\n // Control elements\n zoomGroup.appendChild(this._createZoomIn(instance));\n zoomGroup.appendChild(this._createZoomReset(instance));\n zoomGroup.appendChild(this._createZoomOut(instance));\n\n // Finally append created element\n instance.svg.appendChild(zoomGroup);\n\n // Cache control instance\n instance.controlIcons = zoomGroup;\n },\n\n _createZoomIn: function(instance) {\n var zoomIn = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomIn.setAttribute(\"id\", \"svg-pan-zoom-zoom-in\");\n zoomIn.setAttribute(\"transform\", \"translate(30.5 5) scale(0.015)\");\n zoomIn.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomIn.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n zoomIn.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n\n var zoomInBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomInBackground.setAttribute(\"x\", \"0\");\n zoomInBackground.setAttribute(\"y\", \"0\");\n zoomInBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomInBackground.setAttribute(\"height\", \"1400\");\n zoomInBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomIn.appendChild(zoomInBackground);\n\n var zoomInShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomInShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\"\n );\n zoomInShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomIn.appendChild(zoomInShape);\n\n return zoomIn;\n },\n\n _createZoomReset: function(instance) {\n // reset\n var resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, \"g\");\n resetPanZoomControl.setAttribute(\"id\", \"svg-pan-zoom-reset-pan-zoom\");\n resetPanZoomControl.setAttribute(\"transform\", \"translate(5 35) scale(0.4)\");\n resetPanZoomControl.setAttribute(\"class\", \"svg-pan-zoom-control\");\n resetPanZoomControl.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n resetPanZoomControl.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n\n var resetPanZoomControlBackground = document.createElementNS(\n SvgUtils.svgNS,\n \"rect\"\n ); // TODO change these background space fillers to rounded rectangles so they look prettier\n resetPanZoomControlBackground.setAttribute(\"x\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"y\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"width\", \"182\"); // larger than expected because the whole group is transformed to scale down\n resetPanZoomControlBackground.setAttribute(\"height\", \"58\");\n resetPanZoomControlBackground.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-background\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlBackground);\n\n var resetPanZoomControlShape1 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"d\",\n \"M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape1);\n\n var resetPanZoomControlShape2 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"d\",\n \"M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape2);\n\n return resetPanZoomControl;\n },\n\n _createZoomOut: function(instance) {\n // zoom out\n var zoomOut = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomOut.setAttribute(\"id\", \"svg-pan-zoom-zoom-out\");\n zoomOut.setAttribute(\"transform\", \"translate(30.5 70) scale(0.015)\");\n zoomOut.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomOut.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n zoomOut.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n\n var zoomOutBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomOutBackground.setAttribute(\"x\", \"0\");\n zoomOutBackground.setAttribute(\"y\", \"0\");\n zoomOutBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomOutBackground.setAttribute(\"height\", \"1400\");\n zoomOutBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomOut.appendChild(zoomOutBackground);\n\n var zoomOutShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomOutShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z\"\n );\n zoomOutShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomOut.appendChild(zoomOutShape);\n\n return zoomOut;\n },\n\n disable: function(instance) {\n if (instance.controlIcons) {\n instance.controlIcons.parentNode.removeChild(instance.controlIcons);\n instance.controlIcons = null;\n }\n }\n};\n","var SvgUtils = require(\"./svg-utilities\"),\n Utils = require(\"./utilities\");\n\nvar ShadowViewport = function(viewport, options) {\n this.init(viewport, options);\n};\n\n/**\n * Initialization\n *\n * @param {SVGElement} viewport\n * @param {Object} options\n */\nShadowViewport.prototype.init = function(viewport, options) {\n // DOM Elements\n this.viewport = viewport;\n this.options = options;\n\n // State cache\n this.originalState = { zoom: 1, x: 0, y: 0 };\n this.activeState = { zoom: 1, x: 0, y: 0 };\n\n this.updateCTMCached = Utils.proxy(this.updateCTM, this);\n\n // Create a custom requestAnimationFrame taking in account refreshRate\n this.requestAnimationFrame = Utils.createRequestAnimationFrame(\n this.options.refreshRate\n );\n\n // ViewBox\n this.viewBox = { x: 0, y: 0, width: 0, height: 0 };\n this.cacheViewBox();\n\n // Process CTM\n var newCTM = this.processCTM();\n\n // Update viewport CTM and cache zoom and pan\n this.setCTM(newCTM);\n\n // Update CTM in this frame\n this.updateCTM();\n};\n\n/**\n * Cache initial viewBox value\n * If no viewBox is defined, then use viewport size/position instead for viewBox values\n */\nShadowViewport.prototype.cacheViewBox = function() {\n var svgViewBox = this.options.svg.getAttribute(\"viewBox\");\n\n if (svgViewBox) {\n var viewBoxValues = svgViewBox\n .split(/[\\s\\,]/)\n .filter(function(v) {\n return v;\n })\n .map(parseFloat);\n\n // Cache viewbox x and y offset\n this.viewBox.x = viewBoxValues[0];\n this.viewBox.y = viewBoxValues[1];\n this.viewBox.width = viewBoxValues[2];\n this.viewBox.height = viewBoxValues[3];\n\n var zoom = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n\n // Update active state\n this.activeState.zoom = zoom;\n this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2;\n this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2;\n\n // Force updating CTM\n this.updateCTMOnNextFrame();\n\n this.options.svg.removeAttribute(\"viewBox\");\n } else {\n this.simpleViewBoxCache();\n }\n};\n\n/**\n * Recalculate viewport sizes and update viewBox cache\n */\nShadowViewport.prototype.simpleViewBoxCache = function() {\n var bBox = this.viewport.getBBox();\n\n this.viewBox.x = bBox.x;\n this.viewBox.y = bBox.y;\n this.viewBox.width = bBox.width;\n this.viewBox.height = bBox.height;\n};\n\n/**\n * Returns a viewbox object. Safe to alter\n *\n * @return {Object} viewbox object\n */\nShadowViewport.prototype.getViewBox = function() {\n return Utils.extend({}, this.viewBox);\n};\n\n/**\n * Get initial zoom and pan values. Save them into originalState\n * Parses viewBox attribute to alter initial sizes\n *\n * @return {CTM} CTM object based on options\n */\nShadowViewport.prototype.processCTM = function() {\n var newCTM = this.getCTM();\n\n if (this.options.fit || this.options.contain) {\n var newScale;\n if (this.options.fit) {\n newScale = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n } else {\n newScale = Math.max(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n }\n\n newCTM.a = newScale; //x-scale\n newCTM.d = newScale; //y-scale\n newCTM.e = -this.viewBox.x * newScale; //x-transform\n newCTM.f = -this.viewBox.y * newScale; //y-transform\n }\n\n if (this.options.center) {\n var offsetX =\n (this.options.width -\n (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) *\n 0.5,\n offsetY =\n (this.options.height -\n (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) *\n 0.5;\n\n newCTM.e = offsetX;\n newCTM.f = offsetY;\n }\n\n // Cache initial values. Based on activeState and fix+center opitons\n this.originalState.zoom = newCTM.a;\n this.originalState.x = newCTM.e;\n this.originalState.y = newCTM.f;\n\n return newCTM;\n};\n\n/**\n * Return originalState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getOriginalState = function() {\n return Utils.extend({}, this.originalState);\n};\n\n/**\n * Return actualState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getState = function() {\n return Utils.extend({}, this.activeState);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getZoom = function() {\n return this.activeState.zoom;\n};\n\n/**\n * Get zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getRelativeZoom = function() {\n return this.activeState.zoom / this.originalState.zoom;\n};\n\n/**\n * Compute zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.computeRelativeZoom = function(scale) {\n return scale / this.originalState.zoom;\n};\n\n/**\n * Get pan\n *\n * @return {Object}\n */\nShadowViewport.prototype.getPan = function() {\n return { x: this.activeState.x, y: this.activeState.y };\n};\n\n/**\n * Return cached viewport CTM value that can be safely modified\n *\n * @return {SVGMatrix}\n */\nShadowViewport.prototype.getCTM = function() {\n var safeCTM = this.options.svg.createSVGMatrix();\n\n // Copy values manually as in FF they are not itterable\n safeCTM.a = this.activeState.zoom;\n safeCTM.b = 0;\n safeCTM.c = 0;\n safeCTM.d = this.activeState.zoom;\n safeCTM.e = this.activeState.x;\n safeCTM.f = this.activeState.y;\n\n return safeCTM;\n};\n\n/**\n * Set a new CTM\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.setCTM = function(newCTM) {\n var willZoom = this.isZoomDifferent(newCTM),\n willPan = this.isPanDifferent(newCTM);\n\n if (willZoom || willPan) {\n // Before zoom\n if (willZoom) {\n // If returns false then cancel zooming\n if (\n this.options.beforeZoom(\n this.getRelativeZoom(),\n this.computeRelativeZoom(newCTM.a)\n ) === false\n ) {\n newCTM.a = newCTM.d = this.activeState.zoom;\n willZoom = false;\n } else {\n this.updateCache(newCTM);\n this.options.onZoom(this.getRelativeZoom());\n }\n }\n\n // Before pan\n if (willPan) {\n var preventPan = this.options.beforePan(this.getPan(), {\n x: newCTM.e,\n y: newCTM.f\n }),\n // If prevent pan is an object\n preventPanX = false,\n preventPanY = false;\n\n // If prevent pan is Boolean false\n if (preventPan === false) {\n // Set x and y same as before\n newCTM.e = this.getPan().x;\n newCTM.f = this.getPan().y;\n\n preventPanX = preventPanY = true;\n } else if (Utils.isObject(preventPan)) {\n // Check for X axes attribute\n if (preventPan.x === false) {\n // Prevent panning on x axes\n newCTM.e = this.getPan().x;\n preventPanX = true;\n } else if (Utils.isNumber(preventPan.x)) {\n // Set a custom pan value\n newCTM.e = preventPan.x;\n }\n\n // Check for Y axes attribute\n if (preventPan.y === false) {\n // Prevent panning on x axes\n newCTM.f = this.getPan().y;\n preventPanY = true;\n } else if (Utils.isNumber(preventPan.y)) {\n // Set a custom pan value\n newCTM.f = preventPan.y;\n }\n }\n\n // Update willPan flag\n // Check if newCTM is still different\n if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) {\n willPan = false;\n } else {\n this.updateCache(newCTM);\n this.options.onPan(this.getPan());\n }\n }\n\n // Check again if should zoom or pan\n if (willZoom || willPan) {\n this.updateCTMOnNextFrame();\n }\n }\n};\n\nShadowViewport.prototype.isZoomDifferent = function(newCTM) {\n return this.activeState.zoom !== newCTM.a;\n};\n\nShadowViewport.prototype.isPanDifferent = function(newCTM) {\n return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f;\n};\n\n/**\n * Update cached CTM and active state\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.updateCache = function(newCTM) {\n this.activeState.zoom = newCTM.a;\n this.activeState.x = newCTM.e;\n this.activeState.y = newCTM.f;\n};\n\nShadowViewport.prototype.pendingUpdate = false;\n\n/**\n * Place a request to update CTM on next Frame\n */\nShadowViewport.prototype.updateCTMOnNextFrame = function() {\n if (!this.pendingUpdate) {\n // Lock\n this.pendingUpdate = true;\n\n // Throttle next update\n this.requestAnimationFrame.call(window, this.updateCTMCached);\n }\n};\n\n/**\n * Update viewport CTM with cached CTM\n */\nShadowViewport.prototype.updateCTM = function() {\n var ctm = this.getCTM();\n\n // Updates SVG element\n SvgUtils.setCTM(this.viewport, ctm, this.defs);\n\n // Free the lock\n this.pendingUpdate = false;\n\n // Notify about the update\n if (this.options.onUpdatedCTM) {\n this.options.onUpdatedCTM(ctm);\n }\n};\n\nmodule.exports = function(viewport, options) {\n return new ShadowViewport(viewport, options);\n};\n","var Wheel = require(\"./uniwheel\"),\n ControlIcons = require(\"./control-icons\"),\n Utils = require(\"./utilities\"),\n SvgUtils = require(\"./svg-utilities\"),\n ShadowViewport = require(\"./shadow-viewport\");\n\nvar SvgPanZoom = function(svg, options) {\n this.init(svg, options);\n};\n\nvar optionsDefaults = {\n viewportSelector: \".svg-pan-zoom_viewport\", // Viewport selector. Can be querySelector string or SVGElement\n panEnabled: true, // enable or disable panning (default enabled)\n controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled)\n zoomEnabled: true, // enable or disable zooming (default enabled)\n dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled)\n mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled)\n preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events\n zoomScaleSensitivity: 0.1, // Zoom sensitivity\n minZoom: 0.5, // Minimum Zoom level\n maxZoom: 10, // Maximum Zoom level\n fit: true, // enable or disable viewport fit in SVG (default true)\n contain: false, // enable or disable viewport contain the svg (default false)\n center: true, // enable or disable viewport centering in SVG (default true)\n refreshRate: \"auto\", // Maximum number of frames per second (altering SVG's viewport)\n beforeZoom: null,\n onZoom: null,\n beforePan: null,\n onPan: null,\n customEventsHandler: null,\n eventsListenerElement: null,\n onUpdatedCTM: null\n};\n\nvar passiveListenerOption = { passive: true };\n\nSvgPanZoom.prototype.init = function(svg, options) {\n var that = this;\n\n this.svg = svg;\n this.defs = svg.querySelector(\"defs\");\n\n // Add default attributes to SVG\n SvgUtils.setupSvgAttributes(this.svg);\n\n // Set options\n this.options = Utils.extend(Utils.extend({}, optionsDefaults), options);\n\n // Set default state\n this.state = \"none\";\n\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Init shadow viewport\n this.viewport = ShadowViewport(\n SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector),\n {\n svg: this.svg,\n width: this.width,\n height: this.height,\n fit: this.options.fit,\n contain: this.options.contain,\n center: this.options.center,\n refreshRate: this.options.refreshRate,\n // Put callbacks into functions as they can change through time\n beforeZoom: function(oldScale, newScale) {\n if (that.viewport && that.options.beforeZoom) {\n return that.options.beforeZoom(oldScale, newScale);\n }\n },\n onZoom: function(scale) {\n if (that.viewport && that.options.onZoom) {\n return that.options.onZoom(scale);\n }\n },\n beforePan: function(oldPoint, newPoint) {\n if (that.viewport && that.options.beforePan) {\n return that.options.beforePan(oldPoint, newPoint);\n }\n },\n onPan: function(point) {\n if (that.viewport && that.options.onPan) {\n return that.options.onPan(point);\n }\n },\n onUpdatedCTM: function(ctm) {\n if (that.viewport && that.options.onUpdatedCTM) {\n return that.options.onUpdatedCTM(ctm);\n }\n }\n }\n );\n\n // Wrap callbacks into public API context\n var publicInstance = this.getPublicInstance();\n publicInstance.setBeforeZoom(this.options.beforeZoom);\n publicInstance.setOnZoom(this.options.onZoom);\n publicInstance.setBeforePan(this.options.beforePan);\n publicInstance.setOnPan(this.options.onPan);\n publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM);\n\n if (this.options.controlIconsEnabled) {\n ControlIcons.enable(this);\n }\n\n // Init events handlers\n this.lastMouseWheelEventTime = Date.now();\n this.setupHandlers();\n};\n\n/**\n * Register event handlers\n */\nSvgPanZoom.prototype.setupHandlers = function() {\n var that = this,\n prevEvt = null; // use for touchstart event to detect double tap\n\n this.eventListeners = {\n // Mouse down group\n mousedown: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n touchstart: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n\n // Mouse up group\n mouseup: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchend: function(evt) {\n return that.handleMouseUp(evt);\n },\n\n // Mouse move group\n mousemove: function(evt) {\n return that.handleMouseMove(evt);\n },\n touchmove: function(evt) {\n return that.handleMouseMove(evt);\n },\n\n // Mouse leave group\n mouseleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchcancel: function(evt) {\n return that.handleMouseUp(evt);\n }\n };\n\n // Init custom events handler if available\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.init({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n\n // Custom event handler may halt builtin listeners\n var haltEventListeners = this.options.customEventsHandler\n .haltEventListeners;\n if (haltEventListeners && haltEventListeners.length) {\n for (var i = haltEventListeners.length - 1; i >= 0; i--) {\n if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) {\n delete this.eventListeners[haltEventListeners[i]];\n }\n }\n }\n }\n\n // Bind eventListeners\n for (var event in this.eventListeners) {\n // Attach event to eventsListenerElement or SVG if not available\n (this.options.eventsListenerElement || this.svg).addEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Zoom using mouse wheel\n if (this.options.mouseWheelZoomEnabled) {\n this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true\n this.enableMouseWheelZoom();\n }\n};\n\n/**\n * Enable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.enableMouseWheelZoom = function() {\n if (!this.options.mouseWheelZoomEnabled) {\n var that = this;\n\n // Mouse wheel listener\n this.wheelListener = function(evt) {\n return that.handleMouseWheel(evt);\n };\n\n // Bind wheelListener\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.on(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n\n this.options.mouseWheelZoomEnabled = true;\n }\n};\n\n/**\n * Disable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.disableMouseWheelZoom = function() {\n if (this.options.mouseWheelZoomEnabled) {\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.off(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n this.options.mouseWheelZoomEnabled = false;\n }\n};\n\n/**\n * Handle mouse wheel event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseWheel = function(evt) {\n if (!this.options.zoomEnabled || this.state !== \"none\") {\n return;\n }\n\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Default delta in case that deltaY is not available\n var delta = evt.deltaY || 1,\n timeDelta = Date.now() - this.lastMouseWheelEventTime,\n divider = 3 + Math.max(0, 30 - timeDelta);\n\n // Update cache\n this.lastMouseWheelEventTime = Date.now();\n\n // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0)\n if (\"deltaMode\" in evt && evt.deltaMode === 0 && evt.wheelDelta) {\n delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY;\n }\n\n delta =\n -0.3 < delta && delta < 0.3\n ? delta\n : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider;\n\n var inversedScreenCTM = this.svg.getScreenCTM().inverse(),\n relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n inversedScreenCTM\n ),\n zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior\n\n this.zoomAtPoint(zoom, relativeMousePoint);\n};\n\n/**\n * Zoom in at a SVG point\n *\n * @param {SVGPoint} point\n * @param {Float} zoomScale Number representing how much to zoom\n * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value.\n * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%)\n */\nSvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) {\n var originalState = this.viewport.getOriginalState();\n\n if (!zoomAbsolute) {\n // Fit zoomScale in set bounds\n if (\n this.getZoom() * zoomScale <\n this.options.minZoom * originalState.zoom\n ) {\n zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom();\n } else if (\n this.getZoom() * zoomScale >\n this.options.maxZoom * originalState.zoom\n ) {\n zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom();\n }\n } else {\n // Fit zoomScale in set bounds\n zoomScale = Math.max(\n this.options.minZoom * originalState.zoom,\n Math.min(this.options.maxZoom * originalState.zoom, zoomScale)\n );\n // Find relative scale to achieve desired scale\n zoomScale = zoomScale / this.getZoom();\n }\n\n var oldCTM = this.viewport.getCTM(),\n relativePoint = point.matrixTransform(oldCTM.inverse()),\n modifier = this.svg\n .createSVGMatrix()\n .translate(relativePoint.x, relativePoint.y)\n .scale(zoomScale)\n .translate(-relativePoint.x, -relativePoint.y),\n newCTM = oldCTM.multiply(modifier);\n\n if (newCTM.a !== oldCTM.a) {\n this.viewport.setCTM(newCTM);\n }\n};\n\n/**\n * Zoom at center point\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.zoom = function(scale, absolute) {\n this.zoomAtPoint(\n scale,\n SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height),\n absolute\n );\n};\n\n/**\n * Zoom used by public instance\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoom = function(scale, absolute) {\n if (absolute) {\n scale = this.computeFromRelativeZoom(scale);\n }\n\n this.zoom(scale, absolute);\n};\n\n/**\n * Zoom at point used by public instance\n *\n * @param {Float} scale\n * @param {SVGPoint|Object} point An object that has x and y attributes\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) {\n if (absolute) {\n // Transform zoom into a relative value\n scale = this.computeFromRelativeZoom(scale);\n }\n\n // If not a SVGPoint but has x and y then create a SVGPoint\n if (Utils.getType(point) !== \"SVGPoint\") {\n if (\"x\" in point && \"y\" in point) {\n point = SvgUtils.createSVGPoint(this.svg, point.x, point.y);\n } else {\n throw new Error(\"Given point is invalid\");\n }\n }\n\n this.zoomAtPoint(scale, point, absolute);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getZoom = function() {\n return this.viewport.getZoom();\n};\n\n/**\n * Get zoom scale for public usage\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getRelativeZoom = function() {\n return this.viewport.getRelativeZoom();\n};\n\n/**\n * Compute actual zoom from public zoom\n *\n * @param {Float} zoom\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) {\n return zoom * this.viewport.getOriginalState().zoom;\n};\n\n/**\n * Set zoom to initial state\n */\nSvgPanZoom.prototype.resetZoom = function() {\n var originalState = this.viewport.getOriginalState();\n\n this.zoom(originalState.zoom, true);\n};\n\n/**\n * Set pan to initial state\n */\nSvgPanZoom.prototype.resetPan = function() {\n this.pan(this.viewport.getOriginalState());\n};\n\n/**\n * Set pan and zoom to initial state\n */\nSvgPanZoom.prototype.reset = function() {\n this.resetZoom();\n this.resetPan();\n};\n\n/**\n * Handle double click event\n * See handleMouseDown() for alternate detection method\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleDblClick = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Check if target was a control button\n if (this.options.controlIconsEnabled) {\n var targetClass = evt.target.getAttribute(\"class\") || \"\";\n if (targetClass.indexOf(\"svg-pan-zoom-control\") > -1) {\n return false;\n }\n }\n\n var zoomFactor;\n\n if (evt.shiftKey) {\n zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed\n } else {\n zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2;\n }\n\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.svg.getScreenCTM().inverse()\n );\n this.zoomAtPoint(zoomFactor, point);\n};\n\n/**\n * Handle click event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n Utils.mouseAndTouchNormalize(evt, this.svg);\n\n // Double click detection; more consistent than ondblclick\n if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) {\n this.handleDblClick(evt);\n } else {\n // Pan mode\n this.state = \"pan\";\n this.firstEventCTM = this.viewport.getCTM();\n this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n );\n }\n};\n\n/**\n * Handle mouse move event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseMove = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\" && this.options.panEnabled) {\n // Pan mode\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n ),\n viewportCTM = this.firstEventCTM.translate(\n point.x - this.stateOrigin.x,\n point.y - this.stateOrigin.y\n );\n\n this.viewport.setCTM(viewportCTM);\n }\n};\n\n/**\n * Handle mouse button release event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseUp = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\") {\n // Quit pan mode\n this.state = \"none\";\n }\n};\n\n/**\n * Adjust viewport size (only) so it will fit in SVG\n * Does not center image\n */\nSvgPanZoom.prototype.fit = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.min(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport size (only) so it will contain the SVG\n * Does not center image\n */\nSvgPanZoom.prototype.contain = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.max(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport pan (only) so it will be centered in SVG\n * Does not zoom/fit/contain image\n */\nSvgPanZoom.prototype.center = function() {\n var viewBox = this.viewport.getViewBox(),\n offsetX =\n (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5,\n offsetY =\n (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5;\n\n this.getPublicInstance().pan({ x: offsetX, y: offsetY });\n};\n\n/**\n * Update content cached BorderBox\n * Use when viewport contents change\n */\nSvgPanZoom.prototype.updateBBox = function() {\n this.viewport.simpleViewBoxCache();\n};\n\n/**\n * Pan to a rendered position\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.pan = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e = point.x;\n viewportCTM.f = point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Relatively pan the graph by a specified rendered position vector\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.panBy = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e += point.x;\n viewportCTM.f += point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Get pan vector\n *\n * @return {Object} {x: 0, y: 0}\n */\nSvgPanZoom.prototype.getPan = function() {\n var state = this.viewport.getState();\n\n return { x: state.x, y: state.y };\n};\n\n/**\n * Recalculates cached svg dimensions and controls position\n */\nSvgPanZoom.prototype.resize = function() {\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n this.svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Recalculate original state\n var viewport = this.viewport;\n viewport.options.width = this.width;\n viewport.options.height = this.height;\n viewport.processCTM();\n\n // Reposition control icons by re-enabling them\n if (this.options.controlIconsEnabled) {\n this.getPublicInstance().disableControlIcons();\n this.getPublicInstance().enableControlIcons();\n }\n};\n\n/**\n * Unbind mouse events, free callbacks and destroy public instance\n */\nSvgPanZoom.prototype.destroy = function() {\n var that = this;\n\n // Free callbacks\n this.beforeZoom = null;\n this.onZoom = null;\n this.beforePan = null;\n this.onPan = null;\n this.onUpdatedCTM = null;\n\n // Destroy custom event handlers\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.destroy({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n }\n\n // Unbind eventListeners\n for (var event in this.eventListeners) {\n (this.options.eventsListenerElement || this.svg).removeEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Unbind wheelListener\n this.disableMouseWheelZoom();\n\n // Remove control icons\n this.getPublicInstance().disableControlIcons();\n\n // Reset zoom and pan\n this.reset();\n\n // Remove instance from instancesStore\n instancesStore = instancesStore.filter(function(instance) {\n return instance.svg !== that.svg;\n });\n\n // Delete options and its contents\n delete this.options;\n\n // Delete viewport to make public shadow viewport functions uncallable\n delete this.viewport;\n\n // Destroy public instance and rewrite getPublicInstance\n delete this.publicInstance;\n delete this.pi;\n this.getPublicInstance = function() {\n return null;\n };\n};\n\n/**\n * Returns a public instance object\n *\n * @return {Object} Public instance object\n */\nSvgPanZoom.prototype.getPublicInstance = function() {\n var that = this;\n\n // Create cache\n if (!this.publicInstance) {\n this.publicInstance = this.pi = {\n // Pan\n enablePan: function() {\n that.options.panEnabled = true;\n return that.pi;\n },\n disablePan: function() {\n that.options.panEnabled = false;\n return that.pi;\n },\n isPanEnabled: function() {\n return !!that.options.panEnabled;\n },\n pan: function(point) {\n that.pan(point);\n return that.pi;\n },\n panBy: function(point) {\n that.panBy(point);\n return that.pi;\n },\n getPan: function() {\n return that.getPan();\n },\n // Pan event\n setBeforePan: function(fn) {\n that.options.beforePan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnPan: function(fn) {\n that.options.onPan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zoom and Control Icons\n enableZoom: function() {\n that.options.zoomEnabled = true;\n return that.pi;\n },\n disableZoom: function() {\n that.options.zoomEnabled = false;\n return that.pi;\n },\n isZoomEnabled: function() {\n return !!that.options.zoomEnabled;\n },\n enableControlIcons: function() {\n if (!that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = true;\n ControlIcons.enable(that);\n }\n return that.pi;\n },\n disableControlIcons: function() {\n if (that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = false;\n ControlIcons.disable(that);\n }\n return that.pi;\n },\n isControlIconsEnabled: function() {\n return !!that.options.controlIconsEnabled;\n },\n // Double click zoom\n enableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = true;\n return that.pi;\n },\n disableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = false;\n return that.pi;\n },\n isDblClickZoomEnabled: function() {\n return !!that.options.dblClickZoomEnabled;\n },\n // Mouse wheel zoom\n enableMouseWheelZoom: function() {\n that.enableMouseWheelZoom();\n return that.pi;\n },\n disableMouseWheelZoom: function() {\n that.disableMouseWheelZoom();\n return that.pi;\n },\n isMouseWheelZoomEnabled: function() {\n return !!that.options.mouseWheelZoomEnabled;\n },\n // Zoom scale and bounds\n setZoomScaleSensitivity: function(scale) {\n that.options.zoomScaleSensitivity = scale;\n return that.pi;\n },\n setMinZoom: function(zoom) {\n that.options.minZoom = zoom;\n return that.pi;\n },\n setMaxZoom: function(zoom) {\n that.options.maxZoom = zoom;\n return that.pi;\n },\n // Zoom event\n setBeforeZoom: function(fn) {\n that.options.beforeZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnZoom: function(fn) {\n that.options.onZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zooming\n zoom: function(scale) {\n that.publicZoom(scale, true);\n return that.pi;\n },\n zoomBy: function(scale) {\n that.publicZoom(scale, false);\n return that.pi;\n },\n zoomAtPoint: function(scale, point) {\n that.publicZoomAtPoint(scale, point, true);\n return that.pi;\n },\n zoomAtPointBy: function(scale, point) {\n that.publicZoomAtPoint(scale, point, false);\n return that.pi;\n },\n zoomIn: function() {\n this.zoomBy(1 + that.options.zoomScaleSensitivity);\n return that.pi;\n },\n zoomOut: function() {\n this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity));\n return that.pi;\n },\n getZoom: function() {\n return that.getRelativeZoom();\n },\n // CTM update\n setOnUpdatedCTM: function(fn) {\n that.options.onUpdatedCTM =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Reset\n resetZoom: function() {\n that.resetZoom();\n return that.pi;\n },\n resetPan: function() {\n that.resetPan();\n return that.pi;\n },\n reset: function() {\n that.reset();\n return that.pi;\n },\n // Fit, Contain and Center\n fit: function() {\n that.fit();\n return that.pi;\n },\n contain: function() {\n that.contain();\n return that.pi;\n },\n center: function() {\n that.center();\n return that.pi;\n },\n // Size and Resize\n updateBBox: function() {\n that.updateBBox();\n return that.pi;\n },\n resize: function() {\n that.resize();\n return that.pi;\n },\n getSizes: function() {\n return {\n width: that.width,\n height: that.height,\n realZoom: that.getZoom(),\n viewBox: that.viewport.getViewBox()\n };\n },\n // Destroy\n destroy: function() {\n that.destroy();\n return that.pi;\n }\n };\n }\n\n return this.publicInstance;\n};\n\n/**\n * Stores pairs of instances of SvgPanZoom and SVG\n * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom}\n *\n * @type {Array}\n */\nvar instancesStore = [];\n\nvar svgPanZoom = function(elementOrSelector, options) {\n var svg = Utils.getSvg(elementOrSelector);\n\n if (svg === null) {\n return null;\n } else {\n // Look for existent instance\n for (var i = instancesStore.length - 1; i >= 0; i--) {\n if (instancesStore[i].svg === svg) {\n return instancesStore[i].instance.getPublicInstance();\n }\n }\n\n // If instance not found - create one\n instancesStore.push({\n svg: svg,\n instance: new SvgPanZoom(svg, options)\n });\n\n // Return just pushed instance\n return instancesStore[\n instancesStore.length - 1\n ].instance.getPublicInstance();\n }\n};\n\nmodule.exports = svgPanZoom;\n","var Utils = require(\"./utilities\"),\n _browser = \"unknown\";\n\n// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser\nif (/*@cc_on!@*/ false || !!document.documentMode) {\n // internet explorer\n _browser = \"ie\";\n}\n\nmodule.exports = {\n svgNS: \"http://www.w3.org/2000/svg\",\n xmlNS: \"http://www.w3.org/XML/1998/namespace\",\n xmlnsNS: \"http://www.w3.org/2000/xmlns/\",\n xlinkNS: \"http://www.w3.org/1999/xlink\",\n evNS: \"http://www.w3.org/2001/xml-events\",\n\n /**\n * Get svg dimensions: width and height\n *\n * @param {SVGSVGElement} svg\n * @return {Object} {width: 0, height: 0}\n */\n getBoundingClientRectNormalized: function(svg) {\n if (svg.clientWidth && svg.clientHeight) {\n return { width: svg.clientWidth, height: svg.clientHeight };\n } else if (!!svg.getBoundingClientRect()) {\n return svg.getBoundingClientRect();\n } else {\n throw new Error(\"Cannot get BoundingClientRect for SVG.\");\n }\n },\n\n /**\n * Gets g element with class of \"viewport\" or creates it if it doesn't exist\n *\n * @param {SVGSVGElement} svg\n * @return {SVGElement} g (group) element\n */\n getOrCreateViewport: function(svg, selector) {\n var viewport = null;\n\n if (Utils.isElement(selector)) {\n viewport = selector;\n } else {\n viewport = svg.querySelector(selector);\n }\n\n // Check if there is just one main group in SVG\n if (!viewport) {\n var childNodes = Array.prototype.slice\n .call(svg.childNodes || svg.children)\n .filter(function(el) {\n return el.nodeName !== \"defs\" && el.nodeName !== \"#text\";\n });\n\n // Node name should be SVGGElement and should have no transform attribute\n // Groups with transform are not used as viewport because it involves parsing of all transform possibilities\n if (\n childNodes.length === 1 &&\n childNodes[0].nodeName === \"g\" &&\n childNodes[0].getAttribute(\"transform\") === null\n ) {\n viewport = childNodes[0];\n }\n }\n\n // If no favorable group element exists then create one\n if (!viewport) {\n var viewportId =\n \"viewport-\" + new Date().toISOString().replace(/\\D/g, \"\");\n viewport = document.createElementNS(this.svgNS, \"g\");\n viewport.setAttribute(\"id\", viewportId);\n\n // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes\n var svgChildren = svg.childNodes || svg.children;\n if (!!svgChildren && svgChildren.length > 0) {\n for (var i = svgChildren.length; i > 0; i--) {\n // Move everything into viewport except defs\n if (svgChildren[svgChildren.length - i].nodeName !== \"defs\") {\n viewport.appendChild(svgChildren[svgChildren.length - i]);\n }\n }\n }\n svg.appendChild(viewport);\n }\n\n // Parse class names\n var classNames = [];\n if (viewport.getAttribute(\"class\")) {\n classNames = viewport.getAttribute(\"class\").split(\" \");\n }\n\n // Set class (if not set already)\n if (!~classNames.indexOf(\"svg-pan-zoom_viewport\")) {\n classNames.push(\"svg-pan-zoom_viewport\");\n viewport.setAttribute(\"class\", classNames.join(\" \"));\n }\n\n return viewport;\n },\n\n /**\n * Set SVG attributes\n *\n * @param {SVGSVGElement} svg\n */\n setupSvgAttributes: function(svg) {\n // Setting default attributes\n svg.setAttribute(\"xmlns\", this.svgNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:xlink\", this.xlinkNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:ev\", this.evNS);\n\n // Needed for Internet Explorer, otherwise the viewport overflows\n if (svg.parentNode !== null) {\n var style = svg.getAttribute(\"style\") || \"\";\n if (style.toLowerCase().indexOf(\"overflow\") === -1) {\n svg.setAttribute(\"style\", \"overflow: hidden; \" + style);\n }\n }\n },\n\n /**\n * How long Internet Explorer takes to finish updating its display (ms).\n */\n internetExplorerRedisplayInterval: 300,\n\n /**\n * Forces the browser to redisplay all SVG elements that rely on an\n * element defined in a 'defs' section. It works globally, for every\n * available defs element on the page.\n * The throttling is intentionally global.\n *\n * This is only needed for IE. It is as a hack to make markers (and 'use' elements?)\n * visible after pan/zoom when there are multiple SVGs on the page.\n * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/\n * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62\n */\n refreshDefsGlobal: Utils.throttle(\n function() {\n var allDefs = document.querySelectorAll(\"defs\");\n var allDefsCount = allDefs.length;\n for (var i = 0; i < allDefsCount; i++) {\n var thisDefs = allDefs[i];\n thisDefs.parentNode.insertBefore(thisDefs, thisDefs);\n }\n },\n this ? this.internetExplorerRedisplayInterval : null\n ),\n\n /**\n * Sets the current transform matrix of an element\n *\n * @param {SVGElement} element\n * @param {SVGMatrix} matrix CTM\n * @param {SVGElement} defs\n */\n setCTM: function(element, matrix, defs) {\n var that = this,\n s =\n \"matrix(\" +\n matrix.a +\n \",\" +\n matrix.b +\n \",\" +\n matrix.c +\n \",\" +\n matrix.d +\n \",\" +\n matrix.e +\n \",\" +\n matrix.f +\n \")\";\n\n element.setAttributeNS(null, \"transform\", s);\n if (\"transform\" in element.style) {\n element.style.transform = s;\n } else if (\"-ms-transform\" in element.style) {\n element.style[\"-ms-transform\"] = s;\n } else if (\"-webkit-transform\" in element.style) {\n element.style[\"-webkit-transform\"] = s;\n }\n\n // IE has a bug that makes markers disappear on zoom (when the matrix \"a\" and/or \"d\" elements change)\n // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10\n // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/\n if (_browser === \"ie\" && !!defs) {\n // this refresh is intended for redisplaying the SVG during zooming\n defs.parentNode.insertBefore(defs, defs);\n // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG\n // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that\n // are located under any other element(s).\n window.setTimeout(function() {\n that.refreshDefsGlobal();\n }, that.internetExplorerRedisplayInterval);\n }\n },\n\n /**\n * Instantiate an SVGPoint object with given event coordinates\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n * @return {SVGPoint} point\n */\n getEventPoint: function(evt, svg) {\n var point = svg.createSVGPoint();\n\n Utils.mouseAndTouchNormalize(evt, svg);\n\n point.x = evt.clientX;\n point.y = evt.clientY;\n\n return point;\n },\n\n /**\n * Get SVG center point\n *\n * @param {SVGSVGElement} svg\n * @return {SVGPoint}\n */\n getSvgCenterPoint: function(svg, width, height) {\n return this.createSVGPoint(svg, width / 2, height / 2);\n },\n\n /**\n * Create a SVGPoint with given x and y\n *\n * @param {SVGSVGElement} svg\n * @param {Number} x\n * @param {Number} y\n * @return {SVGPoint}\n */\n createSVGPoint: function(svg, x, y) {\n var point = svg.createSVGPoint();\n point.x = x;\n point.y = y;\n\n return point;\n }\n};\n","// uniwheel 0.1.2 (customized)\n// A unified cross browser mouse wheel event handler\n// https://github.com/teemualap/uniwheel\n\nmodule.exports = (function(){\n\n //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel\n\n var prefix = \"\", _addEventListener, _removeEventListener, support, fns = [];\n var passiveOption = {passive: true};\n\n // detect event model\n if ( window.addEventListener ) {\n _addEventListener = \"addEventListener\";\n _removeEventListener = \"removeEventListener\";\n } else {\n _addEventListener = \"attachEvent\";\n _removeEventListener = \"detachEvent\";\n prefix = \"on\";\n }\n\n // detect available wheel event\n support = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\n document.onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\n\n\n function createCallback(element,callback) {\n\n var fn = function(originalEvent) {\n\n !originalEvent && ( originalEvent = window.event );\n\n // create a normalized event object\n var event = {\n // keep a ref to the original event object\n originalEvent: originalEvent,\n target: originalEvent.target || originalEvent.srcElement,\n type: \"wheel\",\n deltaMode: originalEvent.type == \"MozMousePixelScroll\" ? 0 : 1,\n deltaX: 0,\n delatZ: 0,\n preventDefault: function() {\n originalEvent.preventDefault ?\n originalEvent.preventDefault() :\n originalEvent.returnValue = false;\n }\n };\n\n // calculate deltaY (and deltaX) according to the event\n if ( support == \"mousewheel\" ) {\n event.deltaY = - 1/40 * originalEvent.wheelDelta;\n // Webkit also support wheelDeltaX\n originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX );\n } else {\n event.deltaY = originalEvent.detail;\n }\n\n // it's time to fire the callback\n return callback( event );\n\n };\n\n fns.push({\n element: element,\n fn: fn,\n });\n\n return fn;\n }\n\n function getCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns[i].fn;\n }\n }\n return function(){};\n }\n\n function removeCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns.splice(i,1);\n }\n }\n }\n\n function _addWheelListener(elem, eventName, callback, isPassiveListener ) {\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = createCallback(elem, callback);\n }\n\n elem[_addEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n }\n\n function _removeWheelListener(elem, eventName, callback, isPassiveListener ) {\n\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = getCallback(elem);\n }\n\n elem[_removeEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n\n removeCallback(elem);\n }\n\n function addWheelListener( elem, callback, isPassiveListener ) {\n _addWheelListener(elem, support, callback, isPassiveListener );\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _addWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener );\n }\n }\n\n function removeWheelListener(elem, callback, isPassiveListener){\n _removeWheelListener(elem, support, callback, isPassiveListener);\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _removeWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener);\n }\n }\n\n return {\n on: addWheelListener,\n off: removeWheelListener\n };\n\n})();\n","module.exports = {\n /**\n * Extends an object\n *\n * @param {Object} target object to extend\n * @param {Object} source object to take properties from\n * @return {Object} extended object\n */\n extend: function(target, source) {\n target = target || {};\n for (var prop in source) {\n // Go recursively\n if (this.isObject(source[prop])) {\n target[prop] = this.extend(target[prop], source[prop]);\n } else {\n target[prop] = source[prop];\n }\n }\n return target;\n },\n\n /**\n * Checks if an object is a DOM element\n *\n * @param {Object} o HTML element or String\n * @return {Boolean} returns true if object is a DOM element\n */\n isElement: function(o) {\n return (\n o instanceof HTMLElement ||\n o instanceof SVGElement ||\n o instanceof SVGSVGElement || //DOM2\n (o &&\n typeof o === \"object\" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === \"string\")\n );\n },\n\n /**\n * Checks if an object is an Object\n *\n * @param {Object} o Object\n * @return {Boolean} returns true if object is an Object\n */\n isObject: function(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n },\n\n /**\n * Checks if variable is Number\n *\n * @param {Integer|Float} n\n * @return {Boolean} returns true if variable is Number\n */\n isNumber: function(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n },\n\n /**\n * Search for an SVG element\n *\n * @param {Object|String} elementOrSelector DOM Element or selector String\n * @return {Object|Null} SVG or null\n */\n getSvg: function(elementOrSelector) {\n var element, svg;\n\n if (!this.isElement(elementOrSelector)) {\n // If selector provided\n if (\n typeof elementOrSelector === \"string\" ||\n elementOrSelector instanceof String\n ) {\n // Try to find the element\n element = document.querySelector(elementOrSelector);\n\n if (!element) {\n throw new Error(\n \"Provided selector did not find any elements. Selector: \" +\n elementOrSelector\n );\n return null;\n }\n } else {\n throw new Error(\"Provided selector is not an HTML object nor String\");\n return null;\n }\n } else {\n element = elementOrSelector;\n }\n\n if (element.tagName.toLowerCase() === \"svg\") {\n svg = element;\n } else {\n if (element.tagName.toLowerCase() === \"object\") {\n svg = element.contentDocument.documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"embed\") {\n svg = element.getSVGDocument().documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"img\") {\n throw new Error(\n 'Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.'\n );\n } else {\n throw new Error(\"Cannot get SVG.\");\n }\n return null;\n }\n }\n }\n\n return svg;\n },\n\n /**\n * Attach a given context to a function\n * @param {Function} fn Function\n * @param {Object} context Context\n * @return {Function} Function with certain context\n */\n proxy: function(fn, context) {\n return function() {\n return fn.apply(context, arguments);\n };\n },\n\n /**\n * Returns object type\n * Uses toString that returns [object SVGPoint]\n * And than parses object type from string\n *\n * @param {Object} o Any object\n * @return {String} Object type\n */\n getType: function(o) {\n return Object.prototype.toString\n .apply(o)\n .replace(/^\\[object\\s/, \"\")\n .replace(/\\]$/, \"\");\n },\n\n /**\n * If it is a touch event than add clientX and clientY to event object\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n */\n mouseAndTouchNormalize: function(evt, svg) {\n // If no clientX then fallback\n if (evt.clientX === void 0 || evt.clientX === null) {\n // Fallback\n evt.clientX = 0;\n evt.clientY = 0;\n\n // If it is a touch event\n if (evt.touches !== void 0 && evt.touches.length) {\n if (evt.touches[0].clientX !== void 0) {\n evt.clientX = evt.touches[0].clientX;\n evt.clientY = evt.touches[0].clientY;\n } else if (evt.touches[0].pageX !== void 0) {\n var rect = svg.getBoundingClientRect();\n\n evt.clientX = evt.touches[0].pageX - rect.left;\n evt.clientY = evt.touches[0].pageY - rect.top;\n }\n // If it is a custom event\n } else if (evt.originalEvent !== void 0) {\n if (evt.originalEvent.clientX !== void 0) {\n evt.clientX = evt.originalEvent.clientX;\n evt.clientY = evt.originalEvent.clientY;\n }\n }\n }\n },\n\n /**\n * Check if an event is a double click/tap\n * TODO: For touch gestures use a library (hammer.js) that takes in account other events\n * (touchmove and touchend). It should take in account tap duration and traveled distance\n *\n * @param {Event} evt\n * @param {Event} prevEvt Previous Event\n * @return {Boolean}\n */\n isDblClick: function(evt, prevEvt) {\n // Double click detected by browser\n if (evt.detail === 2) {\n return true;\n }\n // Try to compare events\n else if (prevEvt !== void 0 && prevEvt !== null) {\n var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms\n touchesDistance = Math.sqrt(\n Math.pow(evt.clientX - prevEvt.clientX, 2) +\n Math.pow(evt.clientY - prevEvt.clientY, 2)\n );\n\n return timeStampDiff < 250 && touchesDistance < 10;\n }\n\n // Nothing found\n return false;\n },\n\n /**\n * Returns current timestamp as an integer\n *\n * @return {Number}\n */\n now:\n Date.now ||\n function() {\n return new Date().getTime();\n },\n\n // From underscore.\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n throttle: function(func, wait, options) {\n var that = this;\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) {\n options = {};\n }\n var later = function() {\n previous = options.leading === false ? 0 : that.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n return function() {\n var now = that.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n context = this; // eslint-disable-line consistent-this\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n },\n\n /**\n * Create a requestAnimationFrame simulation\n *\n * @param {Number|String} refreshRate\n * @return {Function}\n */\n createRequestAnimationFrame: function(refreshRate) {\n var timeout = null;\n\n // Convert refreshRate to timeout\n if (refreshRate !== \"auto\" && refreshRate < 60 && refreshRate > 1) {\n timeout = Math.floor(1000 / refreshRate);\n }\n\n if (timeout === null) {\n return window.requestAnimationFrame || requestTimeout(33);\n } else {\n return requestTimeout(timeout);\n }\n }\n};\n\n/**\n * Create a callback that will execute after a given timeout\n *\n * @param {Function} timeout\n * @return {Function}\n */\nfunction requestTimeout(timeout) {\n return function(callback) {\n window.setTimeout(callback, timeout);\n };\n}\n","(function() {\r\n\t\r\n\t// VERSION\r\n\tvar version = { major: 0, minor: 3, patch: 4, status: \"beta\" };\r\n\r\n\r\n\r\n\t// IO FILE SYSTEM\r\n\t\r\n\t// Virtual file\r\n\tfunction TauFile(name, type, parent, text) {\r\n\t\ttext = text === undefined ? \"\" : text;\r\n\t\tthis.name = name;\r\n\t\tthis.type = type;\r\n\t\tthis.parent = parent;\r\n\t\tthis.text = text;\r\n\t\tthis.created = Date.now() / 1000;\r\n\t\tthis.modified = this.created;\r\n\t}\r\n\r\n\tTauFile.prototype.get = function(length, position) {\r\n\t\tif(position === this.text.length) {\r\n\t\t\treturn \"end_of_stream\";\r\n\t\t} else if(position > this.text.length) {\r\n\t\t\treturn \"end_of_stream\";\r\n\t\t} else {\r\n\t\t\treturn this.text.substring(position, position+length);\r\n\t\t}\r\n\t};\r\n\r\n\tTauFile.prototype.eof = function(position) {\r\n\t\treturn position === this.text.length;\r\n\t};\r\n\r\n\tTauFile.prototype.put = function(text, position) {\r\n\t\tif(position === \"end_of_stream\") {\r\n\t\t\tthis.text += text;\r\n\t\t\treturn true;\r\n\t\t} else if(position === \"past_end_of_stream\") {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\tthis.text = this.text.substring(0, position) + text + this.text.substring(position+text.length);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};\r\n\r\n\tTauFile.prototype.get_byte = function(position) {\r\n\t\tif(position === \"end_of_stream\")\r\n\t\t\treturn -1;\r\n\t\tvar index = Math.floor(position/2);\r\n\t\tif(this.text.length <= index)\r\n\t\t\treturn -1;\r\n\t\tvar code = codePointAt(this.text[Math.floor(position/2)], 0);\r\n\t\tif(position % 2 === 0)\r\n\t\t\treturn code & 0xff;\r\n\t\telse\r\n\t\t\treturn code / 256 >>> 0;\r\n\t};\r\n\r\n\tTauFile.prototype.put_byte = function(byte, position) {\r\n\t\tvar index = position === \"end_of_stream\" ? this.text.length : Math.floor(position/2);\r\n\t\tif(this.text.length < index)\r\n\t\t\treturn null;\r\n\t\tvar code = this.text.length === index ? -1 : codePointAt(this.text[Math.floor(position/2)], 0);\r\n\t\tif(position % 2 === 0) {\r\n\t\t\tcode = code / 256 >>> 0;\r\n\t\t\tcode = ((code & 0xff) << 8) | (byte & 0xff);\r\n\t\t} else {\r\n\t\t\tcode = code & 0xff;\r\n\t\t\tcode = ((byte & 0xff) << 8) | (code & 0xff);\r\n\t\t}\r\n\t\tif(this.text.length === index)\r\n\t\t\tthis.text += fromCodePoint(code);\r\n\t\telse \r\n\t\t\tthis.text = this.text.substring(0, index) + fromCodePoint(code) + this.text.substring(index+1);\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.flush = function() {\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.close = function() {\r\n\t\tthis.modified = Date.now() / 1000;\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.size = function() {\r\n\t\treturn this.text.length;\r\n\t};\r\n\r\n\t// Virtual directory\r\n\tfunction TauDirectory(name, parent) {\r\n\t\tthis.name = name;\r\n\t\tthis.parent = parent;\r\n\t\tthis.files = {};\r\n\t\tthis.length = 0;\r\n\t\tthis.created = Date.now() / 1000;\r\n\t\tthis.modified = this.created;\r\n\t}\r\n\r\n\tTauDirectory.prototype.lookup = function(file) {\r\n\t\tif(this.files.hasOwnProperty(file))\r\n\t\t\treturn this.files[file];\r\n\t\treturn null;\r\n\t};\r\n\r\n\tTauDirectory.prototype.push = function(name, file) {\r\n\t\tif(!this.files.hasOwnProperty(name))\r\n\t\t\tthis.length++;\r\n\t\tthis.files[name] = file;\r\n\t\tthis.modified = Date.now() / 1000;\r\n\t};\r\n\r\n\tTauDirectory.prototype.remove = function(name) {\r\n\t\tif(this.files.hasOwnProperty(name)) {\r\n\t\t\tthis.length--;\r\n\t\t\tdelete this.files[name];\r\n\t\t\tthis.modified = Date.now() / 1000;\r\n\t\t}\r\n\t};\r\n\r\n\tTauDirectory.prototype.empty = function() {\r\n\t\treturn this.length === 0;\r\n\t};\r\n\r\n\tTauDirectory.prototype.size = function() {\r\n\t\treturn 4096;\r\n\t};\r\n\r\n\t// Virtual file system for browser\r\n\ttau_file_system = {\r\n\t\t// Current files\r\n\t\tfiles: new TauDirectory(\"/\", \"/\", null),\r\n\t\t// Open file\r\n\t\topen: function(path, type, mode) {\r\n\t\t\tvar dirs = path.replace(/\\/$/, \"\").split(\"/\");\r\n\t\t\tvar dir = tau_file_system.files;\r\n\t\t\tvar name = dirs[dirs.length-1];\r\n\t\t\tfor(var i = 1; i < dirs.length-1; i++) {\r\n\t\t\t\tdir = dir.lookup(dirs[i]);\r\n\t\t\t\tif(!pl.type.is_directory(dir))\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tvar file = dir.lookup(name);\r\n\t\t\tif(file === null) {\r\n\t\t\t\tif(mode === \"read\")\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tfile = new TauFile(name, type, dir);\r\n\t\t\t\tdir.push(name, file);\r\n\t\t\t} else if(!pl.type.is_file(file)) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif(mode === \"write\")\r\n\t\t\t\tfile.text = \"\";\r\n\t\t\treturn file;\r\n\t\t},\r\n\t\t// Get item\r\n\t\tget: function(path) {\r\n\t\t\tvar dirs = path.replace(/\\/$/, \"\").split(\"/\");\r\n\t\t\tvar file = tau_file_system.files;\r\n\t\t\tfor(var i = 1; i < dirs.length; i++)\r\n\t\t\t\tif(pl.type.is_directory(file))\r\n\t\t\t\t\tfile = file.lookup(dirs[i]);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn null;\r\n\t\t\treturn file;\r\n\t\t}\r\n\t};\r\n\r\n\t// User input for browser\r\n\ttau_user_input = {\r\n\t\tbuffer: \"\",\r\n\t\tget: function( length, _ ) {\r\n\t\t\tvar text;\r\n\t\t\twhile( tau_user_input.buffer.length < length ) {\r\n\t\t\t\ttext = window.prompt();\r\n\t\t\t\tif( text.length === 0 )\r\n\t\t\t\t\treturn \"end_of_stream\";\r\n\t\t\t\tif( text ) {\r\n\t\t\t\t\ttau_user_input.buffer += text;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttext = tau_user_input.buffer.substr( 0, length );\r\n\t\t\ttau_user_input.buffer = tau_user_input.buffer.substr( length );\r\n\t\t\treturn text;\r\n\t\t},\r\n\t\teof: function(_) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t// User output for browser\r\n\ttau_user_output = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tconsole.log( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\r\n\t// User error for browser\r\n\ttau_user_error = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\t(console.error || console.log)( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\r\n\t// Virtual file system for Node.js\r\n\tnodejs_file_system = {\r\n\t\t// Open file\r\n\t\topen: function( path, type, mode ) {\r\n\t\t\tvar fd, fs = require('fs');\r\n\t\t\tif( mode === \"read\" && !fs.existsSync( path ) )\r\n\t\t\t\treturn null;\r\n\t\t\ttry {\r\n\t\t\t\tfd = fs.openSync( path, mode[0] );\r\n\t\t\t} catch(ex) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tget: function( length, position ) {\r\n\t\t\t\t\tvar buffer = new Buffer( length );\r\n\t\t\t\t\tfs.readSync( fd, buffer, 0, length, position );\r\n\t\t\t\t\tvar end_of_file = true;\r\n\t\t\t\t\tvar text = buffer.toString();\r\n\t\t\t\t\tfor(var i = 0; i < length && end_of_file; i++)\r\n\t\t\t\t\t\tend_of_file = text[i] === \"\\u0000\";\r\n\t\t\t\t\treturn end_of_file ? \"end_of_stream\" : buffer.toString();\r\n\t\t\t\t},\r\n\t\t\t\teof: function(position) {\r\n\t\t\t\t\tvar stats = fs.statSync(path)\r\n\t\t\t\t\treturn position === stats[\"size\"];\r\n\t\t\t\t},\r\n\t\t\t\tput: function( text, position ) {\r\n\t\t\t\t\tvar buffer = Buffer.from( text );\r\n\t\t\t\t\tif( position === \"end_of_stream\" )\r\n\t\t\t\t\t\tfs.writeSync( fd, buffer );\r\n\t\t\t\t\telse if( position === \"past_end_of_stream\" )\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfs.writeSync( fd, buffer, 0, buffer.length, position );\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tget_byte: function( position ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tvar buffer = Buffer.alloc(1);\r\n\t\t\t\t\t\tvar bytesRead = fs.readSync(fd, buffer, 0, 1, position);\r\n\t\t\t\t\t\t//var _text = buffer.toString(\"utf8\", 0, bytesRead);\r\n\t\t\t\t\t\tvar end_of_file = bytesRead < 1;\r\n\t\t\t\t\t\treturn end_of_file ? \"end_of_stream\" : buffer.readUInt8(0);\r\n\t\t\t\t\t} catch(ex) {\r\n\t\t\t\t\t\treturn \"end_of_stream\";\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tput_byte: function(byte, position) {\r\n\t\t\t\t\tvar buffer = Buffer.from([byte]);\r\n\t\t\t\t\tif(position === \"end_of_stream\")\r\n\t\t\t\t\t\tfs.writeSync(fd, buffer);\r\n\t\t\t\t\telse if(position === \"past_end_of_stream\")\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfs.writeSync(fd, buffer, 0, buffer.length, position);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tflush: function() {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tclose: function() {\r\n\t\t\t\t\tfs.closeSync( fd );\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n\r\n\t// User input for Node.js\r\n\tnodejs_user_input = {\r\n\t\tbuffer: \"\",\r\n\t\tget: function( length, _ ) {\r\n\t\t\tvar text;\r\n\t\t\tvar readlineSync = require('readline-sync');\r\n\t\t\twhile( nodejs_user_input.buffer.length < length )\r\n\t\t\t\tnodejs_user_input.buffer += readlineSync.question(\"\", {keepWhitespace: true}) + \"\\n\";\r\n\t\t\ttext = nodejs_user_input.buffer.substr( 0, length );\r\n\t\t\tnodejs_user_input.buffer = nodejs_user_input.buffer.substr( length );\r\n\t\t\treturn text;\r\n\t\t},\r\n\t\teof: function(length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t// User output for Node.js\r\n\tnodejs_user_output = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tprocess.stdout.write( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};\r\n\r\n\t// User error for Node.js\r\n\tnodejs_user_error = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tprocess.stderr.write( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPATITBILITY\r\n\t\r\n\tvar indexOf;\r\n\tif(!Array.prototype.indexOf) {\r\n\t\tindexOf = function(array, elem) {\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\tif(elem === array[i]) return i;\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\t} else {\r\n\t\tindexOf = function(array, elem) {\r\n\t\t\treturn array.indexOf(elem);\r\n\t\t};\r\n\t}\r\n\r\n\tvar reduce = function(array, fn) {\r\n\t\tif(array.length === 0) return undefined;\r\n\t\tvar elem = array[0];\r\n\t\tvar len = array.length;\r\n\t\tfor(var i = 1; i < len; i++) {\r\n\t\t\telem = fn(elem, array[i]);\r\n\t\t}\r\n\t\treturn elem;\r\n\t};\r\n\r\n\tvar map;\r\n\tif(!Array.prototype.map) {\r\n\t\tmap = function(array, fn) {\r\n\t\t\tvar a = [];\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\ta.push( fn(array[i]) );\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t};\r\n\t} else {\r\n\t\tmap = function(array, fn) {\r\n\t\t\treturn array.map(fn);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar filter;\r\n\tif(!Array.prototype.filter) {\r\n\t\tfilter = function(array, fn) {\r\n\t\t\tvar a = [];\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\tif(fn(array[i]))\r\n\t\t\t\t\ta.push( array[i] );\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t};\r\n\t} else {\r\n\t\tfilter = function(array, fn) {\r\n\t\t\treturn array.filter(fn);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar codePointAt;\r\n\tif(!String.prototype.codePointAt) {\r\n\t\tcodePointAt = function(str, i) {\r\n\t\t\treturn str.charCodeAt(i);\r\n\t\t};\r\n\t} else {\r\n\t\tcodePointAt = function(str, i) {\r\n\t\t\treturn str.codePointAt(i);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar fromCodePoint;\r\n\tif(!String.fromCodePoint) {\r\n\t\tfromCodePoint = function() {\r\n\t\t\treturn String.fromCharCode.apply(null, arguments);\r\n\t\t};\r\n\t} else {\r\n\t\tfromCodePoint = function() {\r\n\t\t\treturn String.fromCodePoint.apply(null, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tvar stringLength;\r\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\r\n\tif(Array.from)\r\n\t\tstringLength = function(str) {\r\n\t\t\treturn Array.from(str).length;\r\n\t\t};\r\n\telse\r\n\t\tstringLength = function(str) {\r\n\t\t\treturn str.replace(regexAstralSymbols, '_').length;\r\n\t\t};\r\n\r\n\t\r\n\t\r\n\t// PARSER\r\n\r\n\tvar ERROR = 0;\r\n\tvar SUCCESS = 1;\r\n\r\n\tvar regex_escape = /(\\\\a)|(\\\\b)|(\\\\d)|(\\\\e)|(\\\\f)|(\\\\n)|(\\\\r)|(\\\\s)|(\\\\t)|(\\\\v)|\\\\x([0-9a-fA-F]+)\\\\|\\\\([0-7]+)\\\\|(\\\\\\\\)|(\\\\')|('')|(\\\\\")|(\\\\`)|(\\\\.)|(.)/g;\r\n\tvar escape_map = {\"\\\\a\": 7, \"\\\\b\": 8, \"\\\\d\": 127, \"\\\\e\": 27, \"\\\\f\": 12, \"\\\\n\": 10, \"\\\\r\": 13, \"\\\\s\": 32, \"\\\\t\": 9, \"\\\\v\": 11};\r\n\tfunction escape(str) {\r\n\t\tvar stack = [];\r\n\t\tvar _error = false;\r\n\t\tstr.replace(regex_escape, function(match, a, b, d, e, f, n, r, s, t, v, hex, octal, back, single, dsingle, double, backquote, error, char) {\r\n\t\t\tswitch(true) {\r\n\t\t\t\tcase hex !== undefined:\r\n\t\t\t\t\tstack.push( parseInt(hex, 16) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase octal !== undefined:\r\n\t\t\t\t\tstack.push( parseInt(octal, 8) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase back !== undefined:\r\n\t\t\t\tcase single !== undefined:\r\n\t\t\t\tcase dsingle !== undefined:\r\n\t\t\t\tcase double !== undefined:\r\n\t\t\t\tcase backquote !== undefined:\r\n\t\t\t\t\tstack.push( codePointAt(match.substr(1),0) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase char !== undefined:\r\n\t\t\t\t\tstack.push( codePointAt(char,0) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase error !== undefined:\r\n\t\t\t\t\t_error = true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tstack.push(escape_map[match]);\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(_error)\r\n\t\t\treturn null;\r\n\t\treturn stack;\r\n\t}\r\n\r\n\t// Escape atoms\r\n\tfunction escapeAtom(str, quote) {\r\n\t\tvar atom = '';\r\n\t\tif( str === \"\\\\\" ) return null;\r\n\t\tif( str.length < 2 ) return str;\r\n\t\ttry {\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\([0-7]+)\\\\/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 8));\r\n\t\t\t});\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\x([0-9a-fA-F]+)\\\\/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 16));\r\n\t\t\t});\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\u([0-9a-fA-F]{4})/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 16));\r\n\t\t\t});\r\n\t\t} catch(error) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tfor( var i = 0; i < str.length; i++) {\r\n\t\t\tvar a = str.charAt(i);\r\n\t\t\tvar b = str.charAt(i+1);\r\n\t\t\tif( a === quote && b === quote ) {\r\n\t\t\t\ti++;\r\n\t\t\t\tatom += quote;\r\n\t\t\t} else if( a === '\\\\' ) {\r\n\t\t\t\tif( ['a','b','f','n','r','t','v',\"'\",'\"','\\\\','\\a','\\b','\\f','\\n','\\r','\\t','\\v'].indexOf(b) !== -1 ) {\r\n\t\t\t\t\ti += 1;\r\n\t\t\t\t\tswitch( b ) {\r\n\t\t\t\t\t\tcase 'a': atom += '\\a'; break;\r\n\t\t\t\t\t\tcase 'b': atom += '\\b'; break;\r\n\t\t\t\t\t\tcase 'f': atom += '\\f'; break;\r\n\t\t\t\t\t\tcase 'n': atom += '\\n'; break;\r\n\t\t\t\t\t\tcase 'r': atom += '\\r'; break;\r\n\t\t\t\t\t\tcase 't': atom += '\\t'; break;\r\n\t\t\t\t\t\tcase 'v': atom += '\\v'; break;\r\n\t\t\t\t\t\tcase \"'\": atom += \"'\"; break;\r\n\t\t\t\t\t\tcase '\"': atom += '\"'; break;\r\n\t\t\t\t\t\tcase '\\\\': atom += '\\\\'; break;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tatom += a;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn atom;\r\n\t}\r\n\t\r\n\t// Redo escape\r\n\tfunction redoEscape(str) {\r\n\t\tvar atom = '';\r\n\t\tfor( var i = 0; i < str.length; i++) {\r\n\t\t\tswitch( str.charAt(i) ) {\r\n\t\t\t\tcase \"'\": atom += \"\\\\'\"; break;\r\n\t\t\t\tcase '\\\\': atom += '\\\\\\\\'; break;\r\n\t\t\t\t//case '\\a': atom += '\\\\a'; break;\r\n\t\t\t\tcase '\\b': atom += '\\\\b'; break;\r\n\t\t\t\tcase '\\f': atom += '\\\\f'; break;\r\n\t\t\t\tcase '\\n': atom += '\\\\n'; break;\r\n\t\t\t\tcase '\\r': atom += '\\\\r'; break;\r\n\t\t\t\tcase '\\t': atom += '\\\\t'; break;\r\n\t\t\t\tcase '\\v': atom += '\\\\v'; break;\r\n\t\t\t\tdefault: atom += str.charAt(i); break;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn atom;\r\n\t}\r\n\r\n\t// String to num\r\n\tfunction convertNum(num) {\r\n\t\tvar n = num.substr(2);\r\n\t\tswitch(num.substr(0,2).toLowerCase()) {\r\n\t\t\tcase \"0x\":\r\n\t\t\t\treturn parseInt(n, 16);\r\n\t\t\tcase \"0b\":\r\n\t\t\t\treturn parseInt(n, 2);\r\n\t\t\tcase \"0o\":\r\n\t\t\t\treturn parseInt(n, 8);\r\n\t\t\tcase \"0'\":\r\n\t\t\t\treturn escape(n)[0];\r\n\t\t\tdefault:\r\n\t\t\t\treturn parseFloat(num);\r\n\t\t}\r\n\t}\r\n\r\n\t// Is graphic token\r\n\tfunction is_graphic_token(string) {\r\n\t\treturn /^[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+/.test(string);\r\n\t}\r\n\r\n\t// Regular expressions for tokens\r\n\tvar rules = {\r\n\t\twhitespace: /^\\s*(?:(?:%.*)|(?:\\/\\*(?:\\n|\\r|.)*?(?:\\*\\/|$))|(?:\\s+))\\s*/,\r\n\t\tvariable: /^(?:[A-Z_][a-zA-Z0-9_]*)/,\r\n\t\tatom: /^(\\!|,|;|[a-z][0-9a-zA-Z_]*|[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+|'(?:(?:'')|(?:\\\\\\\\)|(?:\\\\')|[^'])*')/,\r\n\t\tnumber: /^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\\\[abdefnrstv\\\\'\"`]|\\\\x?\\d+\\\\|[^\\\\])|\\d+(?:\\.\\d+(?:[eE][+-]?\\d+)?)?)/,\r\n\t\tstring: /^(?:\"([^\"]|\"\"|\\\\\")*\"|`([^`]|``|\\\\`)*`)/,\r\n\t\tl_brace: /^(?:\\[)/,\r\n\t\tr_brace: /^(?:\\])/,\r\n\t\tl_bracket: /^(?:\\{)/,\r\n\t\tr_bracket: /^(?:\\})/,\r\n\t\tbar: /^(?:\\|)/,\r\n\t\tl_paren: /^(?:\\()/,\r\n\t\tr_paren: /^(?:\\))/\r\n\t};\r\n\r\n\t// Replace chars of char_conversion session\r\n\tfunction replace( thread, text ) {\r\n\t\tif( thread.get_flag( \"char_conversion\" ).id === \"on\" ) {\r\n\t\t\treturn text.replace(/./g, function(char) {\r\n\t\t\t\treturn thread.get_char_conversion( char );\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn text;\r\n\t}\r\n\r\n\t// Tokenize strings\r\n\tfunction Tokenizer(thread) {\r\n\t\tthis.thread = thread;\r\n\t\tthis.text = \"\"; // Current text to be analized\r\n\t\tthis.tokens = []; // Consumed tokens\r\n\t}\r\n\r\n\tTokenizer.prototype.set_last_tokens = function(tokens) {\r\n\t\treturn this.tokens = tokens;\r\n\t};\r\n\r\n\tTokenizer.prototype.new_text = function(text) {\r\n\t\tthis.text = text;\r\n\t\tthis.tokens = [];\r\n\t};\r\n\r\n\tTokenizer.prototype.get_tokens = function(init) {\r\n\t\tvar text;\r\n\t\tvar len = 0; // Total length respect to text\r\n\t\tvar line = 0;\r\n\t\tvar start = 0;\r\n\t\tvar tokens = [];\r\n\t\tvar last_is_blank;\r\n\r\n\t\tif(init) {\r\n\t\t\tvar token = this.tokens[init-1];\r\n\t\t\tlen = token.len;\r\n\t\t\ttext = replace( this.thread, this.text.substr(token.len) );\r\n\t\t\tline = token.line;\r\n\t\t\tstart = token.start;\r\n\t\t}\r\n\t\telse\r\n\t\t\ttext = this.text;\r\n\r\n\r\n\t\t// If there is nothing to be analized, return null\r\n\t\tif(/^\\s*$/.test(text))\r\n\t\t\treturn null;\r\n\r\n\t\twhile(text !== \"\") {\r\n\t\t\tvar matches = [];\r\n\t\t\tlast_is_blank = false;\r\n\r\n\t\t\tif(/^\\n/.exec(text) !== null) {\r\n\t\t\t\tline++;\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tlen++;\r\n\t\t\t\ttext = text.replace(/\\n/, \"\");\r\n\t\t\t\tlast_is_blank = true;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var rule in rules) {\r\n\t\t\t\tif(rules.hasOwnProperty(rule)) {\r\n\t\t\t\t\tvar matchs = rules[rule].exec( text );\r\n\t\t\t\t\tif(matchs) {\r\n\t\t\t\t\t\tmatches.push({\r\n\t\t\t\t\t\t\tvalue: matchs[0],\r\n\t\t\t\t\t\t\tname: rule,\r\n\t\t\t\t\t\t\tmatches: matchs\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Lexical error\r\n\t\t\tif(!matches.length)\r\n\t\t\t\treturn this.set_last_tokens( [{ value: text, matches: [], name: \"lexical\", line: line, start: start }] );\r\n\r\n\t\t\tvar token = reduce( matches, function(a, b) {\r\n\t\t\t\treturn a.value.length >= b.value.length ? a : b;\r\n\t\t\t} );\r\n\r\n\t\t\ttoken.start = start;\r\n\t\t\ttoken.line = line;\r\n\r\n\t\t\ttext = text.replace(token.value, \"\");\r\n\t\t\tstart += token.value.length;\r\n\t\t\tlen += token.value.length;\r\n\r\n\t\t\tvar nl = (token.value.match(/\\n/g) || []).length;\r\n\t\t\tline += nl;\r\n\t\t\tif(nl > 0) \r\n\t\t\t\tstart = token.value.length - token.value.lastIndexOf(\"\\n\") - 1;\r\n\t\t\ttoken.line_count = line;\r\n\t\t\ttoken.line_position = start;\r\n\r\n\t\t\tswitch(token.name) {\r\n\t\t\t\tcase \"atom\":\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\tif(token.value.charAt(0) === \"'\") {\r\n\t\t\t\t\t\ttoken.value = escapeAtom( token.value.substring(1, token.value.length - 1), \"'\" );\r\n\t\t\t\t\t\tif( token.value === null ) {\r\n\t\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\t\ttoken.error = \"unknown_escape_sequence\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"number\":\r\n\t\t\t\t\tvar substr = token.value.substring(0,2);\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\ttoken.float = substr !== \"0x\" && substr !== \"0'\" && token.value.match(/[.eE]/) !== null;\r\n\t\t\t\t\ttoken.value = convertNum( token.value );\r\n\t\t\t\t\ttoken.blank = last_is_blank;\r\n\t\t\t\t\tif(!token.float && pl.flag.bounded.value.indicator === \"true/0\" && token.value > pl.flag.max_integer.value.value) {\r\n\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\ttoken.error = \"int_overflow\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tvar del = token.value.charAt(0);\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\ttoken.value = escapeAtom( token.value.substring(1, token.value.length - 1), del );\r\n\t\t\t\t\tif( token.value === null ) {\r\n\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\ttoken.error = \"unknown_escape_sequence\"\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"whitespace\":\r\n\t\t\t\t\tvar last = tokens[tokens.length-1];\r\n\t\t\t\t\tif(last) last.space = true;\r\n\t\t\t\t\tlast_is_blank = true;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase \"r_bracket\":\r\n\t\t\t\t\tif( tokens.length > 0 && tokens[tokens.length-1].name === \"l_bracket\" ) {\r\n\t\t\t\t\t\ttoken = tokens.pop();\r\n\t\t\t\t\t\ttoken.name = \"atom\";\r\n\t\t\t\t\t\ttoken.value = \"{}\";\r\n\t\t\t\t\t\ttoken.raw = \"{}\";\r\n\t\t\t\t\t\ttoken.space = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"r_brace\":\r\n\t\t\t\t\tif( tokens.length > 0 && tokens[tokens.length-1].name === \"l_brace\" ) {\r\n\t\t\t\t\t\ttoken = tokens.pop();\r\n\t\t\t\t\t\ttoken.name = \"atom\";\r\n\t\t\t\t\t\ttoken.value = \"[]\";\r\n\t\t\t\t\t\ttoken.raw = \"[]\";\r\n\t\t\t\t\t\ttoken.space = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\ttoken.len = len;\r\n\t\t\ttokens.push( token );\r\n\t\t\tlast_is_blank = false;\r\n\t\t}\r\n\r\n\t\tvar t = this.set_last_tokens( tokens );\r\n\t\treturn t.length === 0 ? null : t;\r\n\t};\r\n\r\n\t// Parse an expression\r\n\tfunction parseExpr(thread, tokens, start, priority, toplevel) {\r\n\t\tif(!tokens[start]) return {type: ERROR, value: pl.error.syntax(tokens[start-1], \"expression expected\", true)};\r\n\t\tvar error;\r\n\r\n\t\tif(priority === \"0\") {\r\n\t\t\tvar token = tokens[start];\r\n\t\t\tswitch(token.name) {\r\n\t\t\t\tcase \"number\":\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Num(token.value, token.float)};\r\n\t\t\t\tcase \"variable\":\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Var(token.value)};\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tvar str;\r\n\t\t\t\t\tswitch( thread.get_flag( \"double_quotes\" ).id ) {\r\n\t\t\t\t\t\tcase \"atom\":;\r\n\t\t\t\t\t\t\tstr = new Term( token.value, [] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"codes\":\r\n\t\t\t\t\t\t\tstr = new Term( \"[]\", [] );\r\n\t\t\t\t\t\t\tfor(var i = token.value.length-1; i >= 0; i-- )\r\n\t\t\t\t\t\t\t\tstr = new Term( \".\", [new pl.type.Num( codePointAt(token.value,i), false ), str] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"chars\":\r\n\t\t\t\t\t\t\tstr = new Term( \"[]\", [] );\r\n\t\t\t\t\t\t\tfor(var i = token.value.length-1; i >= 0; i-- )\r\n\t\t\t\t\t\t\t\tstr = new Term( \".\", [new pl.type.Term( token.value.charAt(i), [] ), str] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: str};\r\n\t\t\t\tcase \"l_paren\":\r\n\t\t\t\t\tvar expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true);\r\n\t\t\t\t\tif(expr.type !== SUCCESS) return expr;\r\n\t\t\t\t\tif(tokens[expr.len] && tokens[expr.len].name === \"r_paren\") {\r\n\t\t\t\t\t\texpr.len++;\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], \") or operator expected\", !tokens[expr.len])}\r\n\t\t\t\tcase \"l_bracket\":\r\n\t\t\t\t\tvar expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true);\r\n\t\t\t\t\tif(expr.type !== SUCCESS) return expr;\r\n\t\t\t\t\tif(tokens[expr.len] && tokens[expr.len].name === \"r_bracket\") {\r\n\t\t\t\t\t\texpr.len++;\r\n\t\t\t\t\t\texpr.value = new Term( \"{}\", [expr.value] );\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], \"} or operator expected\", !tokens[expr.len])}\r\n\t\t\t}\r\n\t\t\t// Compound term\r\n\t\t\tvar result = parseTerm(thread, tokens, start, toplevel);\r\n\t\t\tif(result.type === SUCCESS || result.derived)\r\n\t\t\t\treturn result;\r\n\t\t\t// List\r\n\t\t\tresult = parseList(thread, tokens, start);\r\n\t\t\tif(result.type === SUCCESS || result.derived)\r\n\t\t\t\treturn result;\r\n\t\t\t// Unexpected\r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], token.error || \"unexpected token\")};\r\n\t\t}\r\n\r\n\t\tvar max_priority = thread.__get_max_priority();\r\n\t\tvar next_priority = thread.__get_next_priority(priority);\r\n\t\tvar aux_start = start;\r\n\t\t\r\n\t\t// Prefix operators\r\n\t\tif(tokens[start].name === \"atom\" && tokens[start+1] && (tokens[start].space || tokens[start+1].name !== \"l_paren\")) {\r\n\t\t\tvar token = tokens[start++];\r\n\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\t\t\t\r\n\t\t\t// Associative prefix operator\r\n\t\t\tif(classes && classes.indexOf(\"fy\") > -1) {\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, start, priority, toplevel);\r\n\t\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\t\tif( token.value === \"-\" && !token.space && pl.type.is_number( expr.value ) ) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Num(-expr.value.value, expr.value.is_float),\r\n\t\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = expr;\r\n\t\t\t\t}\r\n\t\t\t// Non-associative prefix operator\r\n\t\t\t} else if(classes && classes.indexOf(\"fx\") > -1) {\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, start, next_priority, toplevel);\r\n\t\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t};\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = expr;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tstart = aux_start;\r\n\t\tvar expr = parseExpr(thread, tokens, start, next_priority, toplevel);\r\n\t\tif(expr.type === SUCCESS) {\r\n\t\t\tstart = expr.len;\r\n\t\t\tvar token = tokens[start];\r\n\t\t\tif(tokens[start] && (\r\n\t\t\t\ttokens[start].name === \"atom\" && thread.__lookup_operator_classes(priority, token.value) ||\r\n\t\t\t\ttokens[start].name === \"bar\" && thread.__lookup_operator_classes(priority, \"|\")\r\n\t\t\t) ) {\r\n\t\t\t\tvar next_priority_lt = next_priority;\r\n\t\t\t\tvar next_priority_eq = priority;\r\n\t\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\r\n\t\t\t\tif(classes.indexOf(\"xf\") > -1) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\tlen: ++expr.len,\r\n\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t};\r\n\t\t\t\t} else if(classes.indexOf(\"xfx\") > -1) {\r\n\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, start + 1, next_priority_lt, toplevel);\r\n\t\t\t\t\tif(expr2.type === SUCCESS) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\tlen: expr2.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(classes.indexOf(\"xfy\") > -1) {\r\n\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, start + 1, next_priority_eq, toplevel);\r\n\t\t\t\t\tif(expr2.type === SUCCESS) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\tlen: expr2.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(expr.type !== ERROR) {\r\n\t\t\t\t\twhile(true) {\r\n\t\t\t\t\t\tstart = expr.len;\r\n\t\t\t\t\t\tvar token = tokens[start];\r\n\t\t\t\t\t\tif(token && token.name === \"atom\" && thread.__lookup_operator_classes(priority, token.value)) {\r\n\t\t\t\t\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\t\t\t\t\t\t\tif( classes.indexOf(\"yf\") > -1 ) {\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\t\t\t\tlen: ++start,\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t} else if( classes.indexOf(\"yfx\") > -1 ) {\r\n\t\t\t\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, ++start, next_priority_lt, toplevel);\r\n\t\t\t\t\t\t\t\tif(expr2.type === ERROR) {\r\n\t\t\t\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstart = expr2.len;\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t} else { break; }\r\n\t\t\t\t\t\t} else { break; }\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\terror = {type: ERROR, value: pl.error.syntax(tokens[expr.len-1], \"operator expected\")};\r\n\t\t\t}\r\n\t\t\treturn expr;\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\r\n\t// Parse a compound term\r\n\tfunction parseTerm(thread, tokens, start, toplevel) {\r\n\t\tif(!tokens[start] || (tokens[start].name === \"atom\" && tokens[start].raw === \".\" && !toplevel && (tokens[start].space || !tokens[start+1] || tokens[start+1].name !== \"l_paren\")))\r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], \"unfounded token\")};\r\n\t\tvar atom = tokens[start];\r\n\t\tvar exprs = [];\r\n\t\tif(tokens[start].name === \"atom\" && tokens[start].raw !== \",\") {\r\n\t\t\tstart++;\r\n\t\t\tif(tokens[start-1].space) return {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)};\r\n\t\t\tif(tokens[start] && tokens[start].name === \"l_paren\") {\r\n\t\t\t\tif(tokens[start+1] && tokens[start+1].name === \"r_paren\") \r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1], \"argument expected\")};\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, ++start, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \"argument expected\", !tokens[start])};\r\n\t\t\t\t}\r\n\t\t\t\texprs.push(expr.value);\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t\twhile(tokens[start] && tokens[start].name === \"atom\" && tokens[start].value === \",\") {\r\n\t\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t\t}\r\n\t\t\t\t\texprs.push(expr.value);\r\n\t\t\t\t\tstart = expr.len;\r\n\t\t\t\t}\r\n\t\t\t\tif(tokens[start] && tokens[start].name === \"r_paren\") start++;\r\n\t\t\t\telse return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \", or ) expected\", !tokens[start])};\r\n\t\t\t}\r\n\t\t\treturn {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)};\r\n\t\t}\r\n\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], \"term expected\")};\r\n\t}\r\n\r\n\t// Parse a list\r\n\tfunction parseList(thread, tokens, start) {\r\n\t\tif(!tokens[start]) \r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], \"[ expected\")};\r\n\t\tif(tokens[start] && tokens[start].name === \"l_brace\") {\r\n\t\t\tvar expr = parseExpr(thread, tokens, ++start, \"999\", true);\r\n\t\t\tvar exprs = [expr.value];\r\n\t\t\tvar cons = undefined;\r\n\r\n\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\tif(tokens[start] && tokens[start].name === \"r_brace\") {\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Term(\"[]\", [])};\r\n\t\t\t\t}\r\n\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start], \"] expected\")};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tstart = expr.len;\r\n\r\n\t\t\twhile(tokens[start] && tokens[start].name === \"atom\" && tokens[start].value === \",\") {\r\n\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t}\r\n\t\t\t\texprs.push(expr.value);\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t}\r\n\t\t\tvar bar = false\r\n\t\t\tif(tokens[start] && tokens[start].name === \"bar\") {\r\n\t\t\t\tbar = true;\r\n\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t}\r\n\t\t\t\tcons = expr.value;\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t}\r\n\t\t\tif(tokens[start] && tokens[start].name === \"r_brace\")\r\n\t\t\t\treturn {type: SUCCESS, len: start+1, value: arrayToList(exprs, cons) };\r\n\t\t\telse\r\n\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], bar ? \"] expected\" : \", or | or ] expected\", !tokens[start])};\r\n\t\t}\r\n\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], \"list expected\")};\r\n\t}\r\n\r\n\t// Parse a rule\r\n\tfunction parseRule(thread, tokens, start) {\r\n\t\tvar line = tokens[start].line;\r\n\t\tvar expr = parseExpr(thread, tokens, start, thread.__get_max_priority(), false);\r\n\t\tvar rule = null;\r\n\t\tvar obj;\r\n\t\tif(expr.type !== ERROR) {\r\n\t\t\tstart = expr.len;\r\n\t\t\tif(tokens[start] && tokens[start].name === \"atom\" && tokens[start].raw === \".\") {\r\n\t\t\t\tstart++;\r\n\t\t\t\tif( pl.type.is_term(expr.value) ) {\r\n\t\t\t\t\tif(expr.value.indicator === \":-/2\") {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1]));\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else if(expr.value.indicator === \"-->/2\") {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1]));\r\n\t\t\t\t\t\trule = rule_to_dcg(rule, thread);\r\n\t\t\t\t\t\trule.body = body_conversion(rule.body);\r\n\t\t\t\t\t\tif(!pl.type.is_rule(rule))\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\t\ttype: ERROR\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: pl.type.is_rule( rule ) ? SUCCESS : ERROR\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value, null);\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( rule ) {\r\n\t\t\t\t\t\tvar singleton = rule.singleton_variables();\r\n\t\t\t\t\t\tif( singleton.length > 0 )\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.warning.singleton( singleton, rule.head.indicator, line ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn obj;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn { type: ERROR, value: pl.error.syntax(tokens[start], \"callable expected\") };\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn { type: ERROR, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \". or operator expected\") };\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\r\n\t// Parse a program\r\n\tfunction parseProgram(thread, string, options) {\r\n\t\tvar opts = {};\r\n\t\toptions = options ? options : {};\r\n\t\topts.success = options.success ? options.success : function(){};\r\n\t\topts.error = options.error ? options.error : function(){};\r\n\t\topts.from = options.from ? options.from : \"$tau-js\";\r\n\t\topts.reconsult = options.reconsult !== undefined ? options.reconsult : true;\r\n\t\topts.reconsulted = options.reconsulted === undefined ? {} : options.reconsulted;\r\n\t\topts.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\topts.initialization = options.initialization === undefined ? [] : options.initialization;\r\n\t\topts.current_token = options.current_token === undefined ? 0 : options.current_token;\r\n\t\topts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer;\r\n\t\topts.tokens = options.tokens === undefined ? null : options.tokens;\r\n\t\topts.string = string;\r\n\t\topts.term_expansion = false;\r\n\t\tvar reconsulted = opts.reconsulted;\r\n\t\tvar tokenizer = opts.tokenizer;\r\n\t\tvar tokens = opts.tokens;\r\n\t\tif(tokenizer === null) {\r\n\t\t\ttokenizer = new Tokenizer(thread);\r\n\t\t\ttokenizer.new_text(string);\r\n\t\t\topts.tokenizer = tokenizer;\r\n\t\t\ttokens = tokenizer.get_tokens(0);\r\n\t\t\topts.tokens = tokens;\r\n\t\t}\r\n\t\tvar n = opts.current_token;\r\n\t\twhile(tokens !== null && tokens[n]) {\r\n\t\t\tvar expr = parseRule(thread, tokens, n);\r\n\t\t\topts.current_token = expr.len;\r\n\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\tif(opts.error !== undefined)\r\n\t\t\t\topts.error(new Term(\"throw\", [expr.value]));\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\t// Term expansion\r\n\t\t\t\tvar context_module = opts.context_module;\r\n\t\t\t\tvar term_expansion = thread.session.modules[context_module].rules[\"term_expansion/2\"];\r\n\t\t\t\tif(term_expansion && term_expansion.length > 0) {\r\n\t\t\t\t\topts.term_expansion = true;\r\n\t\t\t\t\tvar n_thread = new Thread(thread.session);\r\n\t\t\t\t\tvar term = expr.value.body ? new Term(\":-\", [expr.value.head, expr.value.body]) : expr.value.head;\r\n\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\tterm = term.rename(thread.session);\r\n\t\t\t\t\tn_thread.query(context_module + \":term_expansion(\" + term.toString({quoted: true}) + \", X).\");\r\n\t\t\t\t\tn_thread.answer((function(thread, opts, reconsulted, expr) {\r\n\t\t\t\t\t\treturn function(answer) {\r\n\t\t\t\t\t\t\tif(answer && !pl.type.is_error(answer) && pl.type.is_term(answer.links['X'])) {\r\n\t\t\t\t\t\t\t\tvar term = answer.links['X'];\r\n\t\t\t\t\t\t\t\tvar rule = term.indicator === \":-/2\" ? new Rule(term.args[0], term.args[1]) : new Rule(term, null);\r\n\t\t\t\t\t\t\t\tparseProgramExpansion(thread, opts, reconsulted, {value: rule, len: expr.len, type: expr.type});\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tparseProgramExpansion(thread, opts, reconsulted, expr);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})(thread, opts, reconsulted, expr));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\topts.term_expansion = false;\r\n\t\t\t\t\tvar async = parseProgramExpansion(thread, opts, reconsulted, expr);\r\n\t\t\t\t\tif(async)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\tn = expr.len;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// run goals from initialization/1 directive\r\n\t\tvar callback = opts.success;\r\n\t\tvar nthread = new Thread(thread.session);\r\n\t\tfor(var i = opts.initialization.length-1; i > 0; i--) {\r\n\t\t\tvar next_callback = (function(init, callback) {\r\n\t\t\t\treturn function(answer) {\r\n\t\t\t\t\tif(answer === null) {\r\n\t\t\t\t\t\tnthread.answer();\r\n\t\t\t\t\t} else if(pl.type.is_error(answer)) {\r\n\t\t\t\t\t\topts.error(answer);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnthread.add_goal(init);\r\n\t\t\t\t\t\tnthread.answer(callback);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t})(opts.initialization[i], callback);\r\n\t\t\tcallback = next_callback;\r\n\t\t}\r\n\t\tif(opts.initialization.length > 0) {\r\n\t\t\tnthread.add_goal(opts.initialization[0]);\r\n\t\t\tnthread.answer(callback);\r\n\t\t} else {\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseGoalExpansion(thread, options, expr) {\r\n\t\tvar n_thread = new Thread( thread.session );\r\n\t\tn_thread.__goal_expansion = true;\r\n\t\tvar varterm = thread.next_free_variable();\r\n\t\tvar varhead = thread.next_free_variable();\r\n\t\tvar goal = varhead + \" = \" + expr.value.head + \", goal_expansion(\" + expr.value.body.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \", \" + varterm.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \").\";\r\n\t\tn_thread.query(goal);\r\n\t\tn_thread.answer(function(answer) {\r\n\t\t\tif(answer && !pl.type.is_error(answer) && answer.links[varterm]) {\r\n\t\t\t\texpr.value.head = answer.links[varhead];\r\n\t\t\t\texpr.value.body = body_conversion(answer.links[varterm]);\r\n\t\t\t\tparseGoalExpansion(thread, options, expr);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_rule(expr.value, options);\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction parseQueryExpansion(thread, term, options) {\r\n\t\tvar n_thread = new Thread(thread.session);\r\n\t\tn_thread.__goal_expansion = true;\r\n\t\tvar varterm = thread.next_free_variable();\r\n\t\tvar goal = \"goal_expansion(\" + term.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \", \" + varterm.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \").\";\r\n\t\tn_thread.query(goal);\r\n\t\tvar variables = n_thread.head_point().substitution.domain();\r\n\t\tn_thread.answer(function(answer) {\r\n\t\t\tif(answer && !pl.type.is_error(answer) && answer.links[varterm]) {\r\n\t\t\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\t\t\tif(variables[i] !== varterm.id && answer.links[variables[i]]) {\r\n\t\t\t\t\t\tvar subs = new Substitution();\r\n\t\t\t\t\t\tsubs.links[answer.links[variables[i]]] = variables[i];\r\n\t\t\t\t\t\tanswer.links[varterm] = answer.links[varterm].apply( subs );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tparseQueryExpansion(thread, body_conversion(answer.links[varterm]), options);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_goal(term);\r\n\t\t\t\toptions.success(term);\r\n\t\t\t\tparseQuery(thread, options.string, options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction parseProgramExpansion(thread, options, reconsulted, expr) {\r\n\t\tvar async = options.term_expansion === true;\r\n\t\tif(expr.value.body === null && expr.value.head.indicator === \"?-/1\") {\r\n\t\t\tasync = true;\r\n\t\t\tvar n_thread = new Thread(thread.session);\r\n\t\t\tn_thread.add_goal(expr.value.head.args[0]);\r\n\t\t\tn_thread.answer(function(answer) {\r\n\t\t\t\tif(pl.type.is_error(answer)) {\r\n\t\t\t\t\tthread.throw_warning(answer.args[0]);\r\n\t\t\t\t} else if(answer === false || answer === null) {\r\n\t\t\t\t\tthread.throw_warning(pl.warning.failed_goal(expr.value.head.args[0], expr.len));\r\n\t\t\t\t}\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t});\r\n\t\t} else if(expr.value.body === null && expr.value.head.indicator === \":-/1\") {\r\n\t\t\tvar result = thread.run_directive(expr.value.head.args[0], options);\r\n\t\t\tasync = async || (result === true);\r\n\t\t\tif(async)\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t} else {\r\n\t\t\tvar context_module = options.context_module;\r\n\t\t\tvar indicator = expr.value.head.indicator;\r\n\t\t\tif(expr.value.head.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = expr.value.head.args[0].id;\r\n\t\t\t\tindicator = expr.value.head.args[1].indicator;\r\n\t\t\t}\r\n\t\t\tif(!reconsulted.hasOwnProperty(context_module))\r\n\t\t\t\treconsulted[context_module] = {};\r\n\t\t\tif(options.reconsult !== false && reconsulted[context_module][indicator] !== true && !thread.is_multifile_predicate(indicator)) {\r\n\t\t\t\tvar get_module = thread.session.modules[context_module];\r\n\t\t\t\tif(context_module !== \"system\" && get_module && get_module.rules[indicator]) {\r\n\t\t\t\t\tget_module.rules[indicator] = filter(get_module.rules[indicator], function(rule) {\r\n\t\t\t\t\t\treturn rule.dynamic;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tget_module.update_indices_predicate(indicator);\r\n\t\t\t\t}\r\n\t\t\t\treconsulted[context_module][indicator] = true;\r\n\t\t\t}\r\n\t\t\tvar goal_expansion = thread.session.modules.user.rules[\"goal_expansion/2\"];\r\n\t\t\tif(expr.value.body !== null && goal_expansion && goal_expansion.length > 0) {\r\n\t\t\t\tasync = true;\r\n\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\tvar origin = {\r\n\t\t\t\t\thead: function() { return expr.value.head; },\r\n\t\t\t\t\tterm: function() { return expr.value.body; },\r\n\t\t\t\t\tset: function(h, p){\r\n\t\t\t\t\t\texpr.value.head = h;\r\n\t\t\t\t\t\texpr.value.body = p;\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tparseGoalExpansion(thread, options, expr, body_conversion(expr.value.body), origin.set, origin);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_rule(expr.value, options);\r\n\t\t\t\tif(async)\r\n\t\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn async;\r\n\t}\r\n\t\r\n\t// Parse a query\r\n\tfunction parseQuery(thread, string, options) {\r\n\t\tvar opts = {};\r\n\t\tvar callback = typeof options === \"function\" ? options : function(){};\r\n\t\toptions = options === undefined || typeof options === \"function\" ? {} : options;\r\n\t\topts.success = options.success === undefined ? callback : options.success;\r\n\t\topts.error = options.error === undefined ? callback : options.error;\r\n\t\topts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer;\r\n\t\topts.current_token = options.current_token === undefined ? 0 : options.current_token;\r\n\t\topts.string = string;\r\n\t\tvar tokenizer = opts.tokenizer;\r\n\t\tvar n = opts.current_token;\r\n\t\tif(tokenizer === null) {\r\n\t\t\ttokenizer = new Tokenizer(thread);\r\n\t\t\topts.tokenizer = tokenizer;\r\n\t\t\ttokenizer.new_text(string);\r\n\t\t}\r\n\t\tdo {\r\n\t\t\tvar tokens = tokenizer.get_tokens(n);\r\n\t\t\tif(tokens === null)\r\n\t\t\t\tbreak;\r\n\t\t\tvar expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false);\r\n\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\tvar expr_position = expr.len;\r\n\t\t\t\tn = expr.len + 1;\r\n\t\t\t\topts.current_token = n;\r\n\t\t\t\tif(tokens[expr_position] && tokens[expr_position].name === \"atom\" && tokens[expr_position].raw === \".\") {\r\n\t\t\t\t\texpr.value = body_conversion(expr.value);\r\n\t\t\t\t\t// Goal expansion\r\n\t\t\t\t\tvar goal_expansion = thread.session.modules.user.rules[\"goal_expansion/2\"];\r\n\t\t\t\t\tif(!thread.__goal_expansion && goal_expansion && goal_expansion.length > 0) {\r\n\t\t\t\t\t\tparseQueryExpansion(thread, expr.value, opts);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.add_goal(expr.value);\r\n\t\t\t\t\t\topts.success(expr.value);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar token = tokens[expr_position];\r\n\t\t\t\t\topts.error(\r\n\t\t\t\t\t\tnew Term(\"throw\", [\r\n\t\t\t\t\t\t\tpl.error.syntax(\r\n\t\t\t\t\t\t\t\ttoken ? token : tokens[expr_position-1],\r\n\t\t\t\t\t\t\t\ttoken && token.error ? token.error : \". or operator expected\",\r\n\t\t\t\t\t\t\t\t!token\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t])\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\topts.error(new Term(\"throw\", [expr.value]));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} while(true);\r\n\t}\r\n\r\n\r\n\t\r\n\t// UTILS\r\n\r\n\t// Rule to DCG\r\n\tfunction rule_to_dcg(rule, thread) {\r\n\t\tthread.session.renamed_variables = {};\r\n\t\trule = rule.rename(thread);\r\n\t\tvar begin = thread.next_free_variable();\r\n\t\tvar dcg = body_to_dcg( rule.body, begin, thread );\r\n\t\tif( dcg.error )\r\n\t\t\treturn dcg.value;\r\n\t\trule.body = dcg.value;\r\n\t\t// push-back lists\r\n\t\tif(rule.head.indicator === \",/2\") {\r\n\t\t\tvar terminals = rule.head.args[1];\r\n\t\t\trule.head = rule.head.args[0];\r\n\t\t\tvar last = thread.next_free_variable();\r\n\t\t\tvar pointer = terminals;\r\n\t\t\tif(!pl.type.is_list(pointer)) {\r\n\t\t\t\treturn pl.error.type(\"list\", pointer, \"DCG/0\");\r\n\t\t\t}\r\n\t\t\tif(pointer.indicator === \"[]/0\") {\r\n\t\t\t\tterminals = dcg.variable;\r\n\t\t\t} else {\r\n\t\t\t\twhile(pointer.indicator === \"./2\" && pl.type.is_list(pointer) && pointer.args[1].indicator !== \"[]/0\") {\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer))\r\n\t\t\t\t\treturn pl.error.instantiation(\"DCG/0\");\r\n\t\t\t\telse if(!pl.type.is_list(pointer))\r\n\t\t\t\t\treturn pl.error.type(\"list\", terminals, \"DCG/0\");\r\n\t\t\t\tpointer.args[1] = dcg.variable;\r\n\t\t\t}\r\n\t\t\trule.body = new Term(\",\", [rule.body, new Term(\"=\", [last, terminals])]);\r\n\t\t\trule.head = new Term(rule.head.id, rule.head.args.concat([begin, last]));\r\n\t\t} else {\r\n\t\t\t// replace first assignment\r\n\t\t\tvar first_assign = rule.body;\r\n\t\t\tif(pl.type.is_term(first_assign) && first_assign.indicator === \",/2\")\r\n\t\t\t\tfirst_assign = first_assign.args[0];\r\n\t\t\tif(pl.type.is_term(first_assign) && first_assign.indicator === \"=/2\" &&\r\n\t\t\t pl.type.is_variable(first_assign.args[0]) && first_assign.args[0] === begin) {\r\n\t\t\t\tbegin = first_assign.args[1];\r\n\t\t\t\trule.body = rule.body.replace(null);\r\n\t\t\t}\r\n\t\t\t// add first and last variables to the head\r\n\t\t\tif(rule.head.indicator === \":/2\")\r\n\t\t\t\trule.head = new Term(\":\", [\r\n\t\t\t\t\tnew Term(rule.head.args[0].id, []),\r\n\t\t\t\t\tnew Term(rule.head.args[1].id, rule.head.args[1].args.concat([begin, dcg.variable]))\r\n\t\t\t\t]);\r\n\t\t\telse\r\n\t\t\t\trule.head = new Term(rule.head.id, rule.head.args.concat([begin, dcg.variable]));\r\n\t\t}\r\n\t\treturn rule;\r\n\t}\r\n\r\n\t// Body to DCG\r\n\tfunction body_to_dcg(expr, last, thread) {\r\n\t\tvar free;\r\n\t\tif( pl.type.is_term( expr ) && expr.indicator === \"!/0\" ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [expr, new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \":/2\" ) {\r\n\t\t\tvar right = body_to_dcg(expr.args[1], last, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\":\", [expr.args[0], right.value]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \"\\\\+/1\" ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [new Term(expr.id, [left.value]), new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && (expr.indicator === \",/2\" || expr.indicator === \"->/2\") ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tvar right = body_to_dcg(expr.args[1], left.variable, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(expr.id, [left.value, right.value]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \";/2\" ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tvar right = body_to_dcg(expr.args[1], last, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [new Term(\";\", [left.value, right.value]), new Term(\"=\", [left.variable, right.variable])]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \"{}/1\" ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [expr.args[0], new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_empty_list( expr ) ) {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\"true\", []),\r\n\t\t\t\tvariable: last,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_list( expr ) ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\tvar pointer = expr;\r\n\t\t\tvar prev;\r\n\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\tprev = pointer;\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: pl.error.instantiation(\"DCG/0\"),\r\n\t\t\t\t\tvariable: last,\r\n\t\t\t\t\terror: true\r\n\t\t\t\t};\r\n\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: pl.error.type(\"list\", expr, \"DCG/0\"),\r\n\t\t\t\t\tvariable: last,\r\n\t\t\t\t\terror: true\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\tprev.args[1] = free;\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: new Term(\"=\", [last, expr]),\r\n\t\t\t\t\tvariable: free,\r\n\t\t\t\t\terror: false\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} else if( pl.type.is_callable( expr ) ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\texpr = new Term( expr.id, expr.args.concat([last,free]) );\r\n\t\t\treturn {\r\n\t\t\t\tvalue: expr,\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: pl.error.type( \"callable\", expr, \"DCG/0\" ),\r\n\t\t\t\tvariable: last,\r\n\t\t\t\terror: true\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\t\r\n\t// Body conversion\r\n\tfunction body_conversion( expr ) {\r\n\t\tif( pl.type.is_variable( expr ) )\r\n\t\t\treturn new Term( \"call\", [expr] );\r\n\t\telse if( pl.type.is_term( expr ) && [\",/2\", \";/2\", \"->/2\"].indexOf(expr.indicator) !== -1 )\r\n\t\t\treturn new Term( expr.id, [body_conversion( expr.args[0] ), body_conversion( expr.args[1] )] );\r\n\t\telse if( pl.type.is_term(expr) && expr.indicator === \":/2\" ) {\r\n\t\t\tvar body = body_conversion(expr.args[1]);\r\n\t\t\treturn new Term(\":\", [expr.args[0], body]);\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\t\r\n\t// List to Prolog list\r\n\tfunction arrayToList( array, cons ) {\r\n\t\tvar list = cons ? cons : new Term( \"[]\", [] );\r\n\t\tfor(var i = array.length-1; i >= 0; i-- )\r\n\t\t\tlist = new Term( \".\", [array[i], list] );\r\n\t\treturn list;\r\n\t}\r\n\r\n\t// Array difference\r\n\tfunction difference(xs, ys) {\r\n\t\tvar zs = [];\r\n\t\tfor(var i = 0; i < xs.length; i++) {\r\n\t\t\tif(indexOf(zs, xs[i]) === -1 && indexOf(ys, xs[i]) === -1)\r\n\t\t\t\tzs.push(xs[i]);\r\n\t\t}\r\n\t\treturn zs;\r\n\t}\r\n\t\r\n\t// Remove element from array\r\n\tfunction remove( array, element ) {\r\n\t\tfor( var i = array.length - 1; i >= 0; i-- ) {\r\n\t\t\tif( array[i] === element ) {\r\n\t\t\t\tarray.splice(i, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// Remove duplicate elements\r\n\tfunction nub( array ) {\r\n\t\tvar seen = {};\r\n\t\tvar unique = [];\r\n\t\tfor( var i = 0; i < array.length; i++ ) {\r\n\t\t\tif( !(array[i] in seen) ) {\r\n\t\t\t\tunique.push( array[i] );\r\n\t\t\t\tseen[array[i]] = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn unique;\r\n\t}\r\n\r\n\t// Retract a rule\r\n\tfunction retract(thread, point, indicator, rule, get_module) {\r\n\t\tif(get_module.rules[indicator]) {\r\n\t\t\tfor(var i = 0; i < get_module.rules[indicator].length; i++) {\r\n\t\t\t\tif(get_module.rules[indicator][i] === rule) {\r\n\t\t\t\t\tget_module.rules[indicator].splice(i, 1);\r\n\t\t\t\t\tget_module.update_indices_predicate(indicator);\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// call/n\r\n\tfunction callN(n) {\r\n\t\treturn function(thread, point, atom) {\r\n\t\t\tvar closure = atom.args[0], args = atom.args.slice(1, n);\r\n\t\t\tvar module_atom;\r\n\t\t\tif(pl.type.is_term(closure) && closure.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(closure.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", closure.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_atom = closure.args[0];\r\n\t\t\t\tclosure = closure.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(closure)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(closure)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", closure, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar goal = body_conversion(new Term(closure.id, closure.args.concat(args)));\r\n\t\t\t\tif(!pl.type.is_callable(goal)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(module_atom)\r\n\t\t\t\t\tgoal = new Term(\":\", [module_atom, goal]);\r\n\t\t\t\tthread.prepend([new State(point.goal.replace(goal), point.substitution, point)]);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\r\n\t// String to indicator\r\n\tfunction str_indicator( str ) {\r\n\t\tfor( var i = str.length - 1; i >= 0; i-- )\r\n\t\t\tif( str.charAt(i) === \"/\" )\r\n\t\t\t\treturn new Term( \"/\", [new Term( str.substring(0, i) ), new Num( parseInt(str.substring(i+1)), false )] );\r\n\t}\r\n\r\n\t// Greatest common divisor\r\n\tfunction gcd(a, b) {\r\n\t\tif(b === 0)\r\n\t\t\treturn a;\r\n\t\treturn Math.abs(gcd(b, a % b));\r\n\t}\r\n\t\r\n\t\r\n\r\n\t// PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tfunction Var( id ) {\r\n\t\tthis.id = id;\r\n\t\tthis.ground = false;\r\n\t}\r\n\t\r\n\t// Numbers\r\n\tfunction Num( value, is_float ) {\r\n\t\tthis.is_float = is_float !== undefined ? is_float : Math.trunc(value) !== value;\r\n\t\tthis.value = this.is_float ? value : Math.trunc(value);\r\n\t\tthis.index = this.value;\r\n\t\tthis.ground = true;\r\n\t}\r\n\t\r\n\t// Terms\r\n\tvar term_ref = 0;\r\n\tfunction Term( id, args, ref ) {\r\n\t\tterm_ref++;\r\n\t\tthis.ref = ref || term_ref;\r\n\t\tthis.id = id;\r\n\t\tthis.args = args || [];\r\n\t\tthis.indicator = id + \"/\" + this.args.length;\r\n\t\tthis.index = this.indicator;\r\n\t\tthis.ground = true;\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tif(this.args[i].hasOwnProperty(\"ground\") && this.args[i].ground === false) {\r\n\t\t\t\tthis.ground = false;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Streams\r\n\tvar stream_ref = 0;\r\n\tfunction Stream( stream, mode, alias, type, reposition, eof_action ) {\r\n\t\tthis.id = stream_ref++;\r\n\t\tthis.stream = stream;\r\n\t\tthis.mode = mode; // \"read\" or \"write\" or \"append\"\r\n\t\tthis.alias = alias;\r\n\t\tthis.type = type !== undefined ? type : \"text\"; // \"text\" or \"binary\"\r\n\t\tthis.reposition = reposition !== undefined ? reposition : true; // true or false\r\n\t\tthis.eof_action = eof_action !== undefined ? eof_action : \"eof_code\"; // \"error\" or \"eof_code\" or \"reset\"\r\n\t\tthis.position = this.mode === \"append\" ? \"end_of_stream\" : 0;\r\n\t\tthis.output = this.mode === \"write\" || this.mode === \"append\";\r\n\t\tthis.input = this.mode === \"read\";\r\n\t\tthis.line_position = 0;\r\n\t\tthis.line_count = 1;\r\n\t\tthis.char_count = 0;\r\n\t}\r\n\t\r\n\t// Substitutions\r\n\tfunction Substitution( links, attrs ) {\r\n\t\tlinks = links || {};\r\n\t\tattrs = attrs || {};\r\n\t\tthis.links = links;\r\n\t\tthis.attrs = attrs;\r\n\t}\r\n\t\r\n\t// States\r\n\tfunction State( goal, subs, parent ) {\r\n\t\tsubs = subs || new Substitution();\r\n\t\tparent = parent || null;\r\n\t\tthis.goal = goal;\r\n\t\tthis.substitution = subs;\r\n\t\tthis.parent = parent;\r\n\t}\r\n\t\r\n\t// Rules\r\n\tfunction Rule( head, body, dynamic ) {\r\n\t\tthis.head = head;\r\n\t\tthis.body = body;\r\n\t\tthis.dynamic = dynamic ? dynamic : false;\r\n\t}\r\n\r\n\t// Session\r\n\tfunction Session( limit ) {\r\n\t\tlimit = typeof limit === \"number\" && limit > 0 ? limit : null;\r\n\t\tthis.rename = 0;\r\n\t\tthis.modules = {};\r\n\t\tthis.modules.user = new Module(\"user\", {}, \"all\", {\r\n\t\t\tsession: this,\r\n\t\t\tdependencies: [\"system\"]\r\n\t\t});\r\n\t\tthis.modules.system = pl.modules.system;\r\n\t\tthis.rules = this.modules.user.rules;\r\n\t\tthis.total_threads = 0;\r\n\t\tthis.renamed_variables = {};\r\n\t\tthis.public_predicates = this.modules.user.public_predicates;\r\n\t\tthis.multifile_predicates = this.modules.user.multifile_predicates;\r\n\t\tthis.limit = limit;\r\n\t\tthis.streams = {\r\n\t\t\t\"user_input\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_input : tau_user_input,\r\n\t\t\t\t\"read\", \"user_input\", \"text\", false, \"reset\" ),\r\n\t\t\t\"user_output\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_output : tau_user_output,\r\n\t\t\t\t\"append\", \"user_output\", \"text\", false, \"reset\" ),\r\n\t\t\t\"user_error\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_error : tau_user_error,\r\n\t\t\t\t\"append\", \"user_error\", \"text\", false, \"reset\" ),\r\n\t\t};\r\n\t\tthis.file_system = nodejs_flag ? nodejs_file_system : tau_file_system;\r\n\t\tthis.standard_input = this.streams[\"user_input\"];\r\n\t\tthis.standard_output = this.streams[\"user_output\"];\r\n\t\tthis.standard_error = this.streams[\"user_error\"];\r\n\t\tthis.current_input = this.streams[\"user_input\"];\r\n\t\tthis.current_output = this.streams[\"user_output\"];\r\n\t\tthis.working_directory = \"/\"; // only for browser\r\n\t\tthis.format_success = function( state ) { return state.substitution; };\r\n\t\tthis.format_error = function( state ) { return state.goal; };\r\n\t\tthis.flag = {\t\r\n\t\t\tbounded: pl.flag.bounded.value,\r\n\t\t\tmax_integer: pl.flag.max_integer.value,\r\n\t\t\tmin_integer: pl.flag.min_integer.value,\r\n\t\t\tinteger_rounding_function: pl.flag.integer_rounding_function.value,\r\n\t\t\tchar_conversion: pl.flag.char_conversion.value,\r\n\t\t\tdebug: pl.flag.debug.value,\r\n\t\t\tmax_arity: pl.flag.max_arity.value,\r\n\t\t\tunknown: pl.flag.unknown.value,\r\n\t\t\tdouble_quotes: pl.flag.double_quotes.value,\r\n\t\t\toccurs_check: pl.flag.occurs_check.value,\r\n\t\t\tdialect: pl.flag.dialect.value,\r\n\t\t\tversion_data: pl.flag.version_data.value,\r\n\t\t\tnodejs: pl.flag.nodejs.value,\r\n\t\t\targv: pl.flag.argv.value\r\n\t\t};\r\n\t\tthis.__loaded_modules = [];\r\n\t\tthis.__char_conversion = {};\r\n\t\tthis.__operators = {\r\n\t\t\t1200: { \":-\": [\"fx\", \"xfx\"], \"-->\": [\"xfx\"], \"?-\": [\"fx\"] },\r\n\t\t\t1150: { \"meta_predicate\": [\"fx\"] },\r\n\t\t\t1100: { \";\": [\"xfy\"] },\r\n\t\t\t1050: { \"->\": [\"xfy\"], \"*->\": [\"xfy\"] },\r\n\t\t\t1000: { \",\": [\"xfy\"] },\r\n\t\t\t900: { \"\\\\+\": [\"fy\"] },\r\n\t\t\t700: {\r\n\t\t\t\t\"=\": [\"xfx\"], \"\\\\=\": [\"xfx\"], \"==\": [\"xfx\"], \"\\\\==\": [\"xfx\"],\r\n\t\t\t\t\"@<\": [\"xfx\"], \"@=<\": [\"xfx\"], \"@>\": [\"xfx\"], \"@>=\": [\"xfx\"],\r\n\t\t\t\t\"=..\": [\"xfx\"], \"is\": [\"xfx\"], \"=:=\": [\"xfx\"], \"=\\\\=\": [\"xfx\"],\r\n\t\t\t\t\"<\": [\"xfx\"], \"=<\": [\"xfx\"], \">\": [\"xfx\"], \">=\": [\"xfx\"]\r\n\t\t\t},\r\n\t\t\t600: { \":\": [\"xfy\"] },\r\n\t\t\t500: { \"+\": [\"yfx\"], \"-\": [\"yfx\"], \"/\\\\\": [\"yfx\"], \"\\\\/\": [\"yfx\"] },\r\n\t\t\t400: {\r\n\t\t\t\t\"*\": [\"yfx\"], \"/\": [\"yfx\"], \"//\": [\"yfx\"], \"rem\": [\"yfx\"],\r\n\t\t\t\t\"mod\": [\"yfx\"], \"<<\": [\"yfx\"], \">>\": [\"yfx\"], \"div\": [\"yfx\"]\r\n\t\t\t},\r\n\t\t\t200: { \"**\": [\"xfx\"], \"^\": [\"xfy\"], \"-\": [\"fy\"], \"+\": [\"fy\"], \"\\\\\": [\"fy\"] }\r\n\t\t};\r\n\t\tthis.thread = new Thread( this );\r\n\t}\r\n\t\r\n\t// Threads\r\n\tfunction Thread( session ) {\r\n\t\tthis.epoch = Date.now();\r\n\t\tthis.session = session;\r\n\t\tthis.session.total_threads++;\r\n\t\tthis.format_success = session.format_success;\r\n\t\tthis.format_error = session.format_error;\r\n\t\tthis.total_steps = 0;\r\n\t\tthis.cpu_time = 0;\r\n\t\tthis.points = [];\r\n\t\tthis.debugger = false;\r\n\t\tthis.debugger_states = [];\r\n\t\tthis.level = new Term(\"top_level\");\r\n\t\tthis.current_limit = this.session.limit;\r\n\t\tthis.has_limit = this.session.limit !== null;\r\n\t\tthis.warnings = [];\r\n\t\tthis.__calls = [];\r\n\t\tthis.__goal_expansion = false;\r\n\t\tthis.__stacks = {};\r\n\t}\r\n\t\r\n\t// Modules\r\n\tfunction Module(id, rules, exports, options) {\r\n\t\toptions = options === undefined ? {} : options;\r\n\t\toptions.public_predicates = options.public_predicates === undefined ? {} : options.public_predicates;\r\n\t\toptions.multifile_predicates = options.multifile_predicates === undefined ? {} : options.multifile_predicates;\r\n\t\toptions.meta_predicates = options.meta_predicates === undefined ? {} : options.meta_predicates;\r\n\t\toptions.session = options.session === undefined ? null : options.session;\r\n\t\toptions.dependencies = options.dependencies === undefined ? [] : options.dependencies;\r\n\t\tthis.id = id;\r\n\t\tthis.rules = rules;\r\n\t\tthis.indexed_clauses = {};\r\n\t\tthis.non_indexable_clauses = {};\r\n\t\tthis.public_predicates = options.public_predicates;\r\n\t\tthis.multifile_predicates = options.multifile_predicates;\r\n\t\tthis.meta_predicates = options.meta_predicates;\r\n\t\tthis.src_predicates = {};\r\n\t\tthis.dependencies = options.dependencies;\r\n\t\tthis.exports = exports;\r\n\t\tthis.is_library = options.session === null;\r\n\t\tthis.modules = {};\r\n\t\tif(options.session) {\r\n\t\t\toptions.session.modules[id] = this;\r\n\t\t\tfor(var i = 0; i < options.dependencies.length; i++) {\r\n\t\t\t\tvar lib = options.dependencies[i];\r\n\t\t\t\tif(!options.session.modules.hasOwnProperty(lib))\r\n\t\t\t\t\toptions.session.modules[lib] = pl.modules[lib];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tpl.modules[id] = this;\r\n\t\t}\r\n\t\tif(exports !== \"all\") {\r\n\t\t\tfor(var i = 0; i < exports.length; i++) {\r\n\t\t\t\tthis.public_predicates[exports[i]] =\r\n\t\t\t\t\toptions.public_predicates.hasOwnProperty(exports[i]) &&\r\n\t\t\t\t\toptions.public_predicates[exports[i]] === true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.update_indices_clauses();\r\n\t}\r\n\t\r\n\t// Check if a predicate is exported\r\n\tModule.prototype.exports_predicate = function(indicator) {\r\n\t\treturn this.exports === \"all\" || indexOf(this.exports, indicator) !== -1;\r\n\t};\r\n\r\n\t// Check if a predicate is public\r\n\tModule.prototype.is_public_predicate = function(indicator) {\r\n\t\treturn !this.public_predicates.hasOwnProperty(indicator) || this.public_predicates[indicator] === true;\r\n\t};\r\n\t\r\n\t// Check if a predicate is multifile\r\n\tModule.prototype.is_multifile_predicate = function( indicator ) {\r\n\t\treturn this.multifile_predicates.hasOwnProperty(indicator) && this.multifile_predicates[indicator] === true;\r\n\t};\r\n\r\n\t// Check if a predicate is a meta-predicate\r\n\tModule.prototype.is_meta_predicate = function( indicator ) {\r\n\t\tif(this.meta_predicates.hasOwnProperty(indicator))\r\n\t\t\treturn this.meta_predicates[indicator];\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Update indices of all predicates\r\n\tModule.prototype.update_indices_clauses = function() {\r\n\t\tthis.indexed_clauses = {};\r\n\t\tthis.non_indexable_clauses = {};\r\n\t\tfor(var indicator in this.rules)\r\n\t\t\tthis.update_indices_predicate(indicator);\r\n\t};\r\n\r\n\t// Update indices of a predicate\r\n\tModule.prototype.update_indices_predicate = function(indicator) {\r\n\t\tthis.indexed_clauses[indicator] = {};\r\n\t\tthis.non_indexable_clauses[indicator] = [];\r\n\t\tif(!Array.isArray(this.rules[indicator]))\r\n\t\t\treturn;\r\n\t\tfor(var i = 0; i < this.rules[indicator].length; i++) {\r\n\t\t\tvar clause = this.rules[indicator][i];\r\n\t\t\tthis.add_index_predicate(clause);\r\n\t\t}\r\n\t};\r\n\r\n\t// Add indexed cluuse to a predicate\r\n\tModule.prototype.add_index_predicate = function(clause) {\r\n\t\tvar indicator = clause.head.indicator;\r\n\t\tvar index = clause.head.args.length > 0 ? clause.head.args[0].index : undefined;\r\n\t\tif(index) {\r\n\t\t\tif(!this.indexed_clauses.hasOwnProperty(indicator))\r\n\t\t\t\tthis.indexed_clauses[indicator] = {};\r\n\t\t\tif(!this.indexed_clauses[indicator].hasOwnProperty(index)) {\r\n\t\t\t\tthis.indexed_clauses[indicator][index] = [];\r\n\t\t\t\tif(this.non_indexable_clauses.hasOwnProperty(indicator))\r\n\t\t\t\t\tfor(var j = 0; j < this.non_indexable_clauses[indicator].length; j++)\r\n\t\t\t\t\t\tthis.indexed_clauses[indicator][index].push(this.non_indexable_clauses[indicator][j]);\r\n\t\t\t}\r\n\t\t\tthis.indexed_clauses[indicator][index].push(clause);\r\n\t\t} else {\r\n\t\t\tif(!this.non_indexable_clauses.hasOwnProperty(indicator))\r\n\t\t\t\tthis.non_indexable_clauses[indicator] = [];\r\n\t\t\tthis.non_indexable_clauses[indicator].push(clause);\r\n\t\t\tfor(var index in this.indexed_clauses[indicator])\r\n\t\t\t\tthis.indexed_clauses[indicator][index].push(clause);\r\n\t\t}\r\n\t};\r\n\r\n\r\n\r\n\t// UNIFY PROLOG OBJECTS\r\n\r\n\t// Variables\r\n\tVar.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(occurs_check && indexOf(obj.variables(), this.id) !== -1 && !pl.type.is_variable(obj))\r\n\t\t\treturn null;\r\n\t\tvar links = {};\r\n\t\tlinks[this.id] = obj;\r\n\t\treturn new Substitution(links);\r\n\t};\r\n\r\n\t// Numbers\r\n\tNum.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(pl.type.is_number(obj) && this.value === obj.value && this.is_float === obj.is_float)\r\n\t\t\treturn new Substitution();\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Terms\r\n\tTerm.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(!pl.type.is_term(obj) && obj.unify !== undefined) {\r\n\t\t\treturn obj.unify(this, occurs_check);\r\n\t\t} else if(pl.type.is_term(obj) && this.indicator === obj.indicator) {\r\n\t\t\tvar subs = new Substitution();\r\n\t\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\t\tvar mgu = pl.unify(this.args[i].apply(subs), obj.args[i].apply(subs), occurs_check);\r\n\t\t\t\tif(mgu === null)\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tfor(var x in mgu.links)\r\n\t\t\t\t\tsubs.links[x] = mgu.links[x];\r\n\t\t\t\tsubs = subs.apply(mgu);\r\n\t\t\t}\r\n\t\t\treturn subs;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.unify = function(obj, _occurs_check) {\r\n\t\tif(pl.type.is_stream(obj) && this.id === obj.id)\r\n\t\t\treturn new Substitution();\r\n\t\treturn null;\r\n\t};\r\n\r\n\tStream.prototype.compare = function(obj) {\r\n\t\tif(this.id < obj.id)\r\n\t\t\treturn -1;\r\n\t\telse if(this.id === obj.id)\r\n\t\t\treturn 0;\r\n\t\telse\r\n\t\t\treturn 1;\r\n\t};\r\n\t\r\n\t\r\n\r\n\t// PROLOG OBJECTS TO STRING\r\n\t\r\n\t// Variables\r\n\tVar.prototype.toString = function( options ) {\r\n\t\toptions = options === undefined ? {} : options;\r\n\t\tif(options.variable_names) {\r\n\t\t\tvar pointer = options.variable_names;\r\n\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\tif(pl.type.is_term(head) && head.indicator === \"=/2\"\r\n\t\t\t\t&& pl.type.is_variable(head.args[1]) && head.args[1].id === this.id\r\n\t\t\t\t&& pl.type.is_atom(head.args[0]))\r\n\t\t\t\t\treturn head.args[0].id;\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.id;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.toString = function( _ ) {\r\n\t\tvar str = this.value.toString();\r\n\t\tvar e = str.indexOf(\"e\");\r\n\t\tif(e !== -1) {\r\n\t\t\tif(str.indexOf(\".\") !== -1)\r\n\t\t\t\treturn str;\r\n\t\t\telse\r\n\t\t\t\treturn str.replace(\"e\", \".0e\");\r\n\t\t}\r\n\t\treturn this.is_float && indexOf(str, \".\") === -1 ? this.value + \".0\" : str;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.toString = function( options, priority, from ) {\r\n\t\toptions = !options ? {} : options;\r\n\t\toptions.quoted = options.quoted === undefined ? false: options.quoted;\r\n\t\toptions.ignore_ops = options.ignore_ops === undefined ? false : options.ignore_ops;\r\n\t\toptions.numbervars = options.numbervars === undefined ? false : options.numbervars;\r\n\t\toptions.variable_names = options.variable_names === undefined ? false : options.variable_names;\r\n\t\tpriority = priority === undefined ? {priority: 1200, class: \"\", indicator: \"\"} : priority;\r\n\t\tfrom = from === undefined ? \"\" : from;\r\n\t\tvar arg_priority = {priority: 999, class: \"\", indicator: \"\"};\r\n\t\tif( options.numbervars && this.indicator === \"$VAR/1\" && pl.type.is_integer( this.args[0] ) && this.args[0].value >= 0 ) {\r\n\t\t\tvar i = this.args[0].value;\r\n\t\t\tvar number = Math.floor( i/26 );\r\n\t\t\tvar letter = i % 26;\r\n\t\t\treturn \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"[letter] + (number !== 0 ? number : \"\");\r\n\t\t}\r\n\t\tswitch( this.indicator ){\r\n\t\t\tcase \"[]/0\":\r\n\t\t\tcase \"{}/0\":\r\n\t\t\tcase \"!/0\":\r\n\t\t\t\treturn this.id;\r\n\t\t\tcase \"{}/1\":\r\n\t\t\t\tif( options.ignore_ops === false ) {\r\n\t\t\t\t\treturn \"{\" + this.args[0].toString( options ) + \"}\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn \"{}(\" + this.args[0].toString( options ) + \")\";\r\n\t\t\t\t}\r\n\t\t\tcase \"./2\":\r\n\t\t\t\tif( options.ignore_ops === false ) {\r\n\t\t\t\t\tvar list = \"[\" + this.args[0].toString( options, arg_priority );\r\n\t\t\t\t\tvar pointer = this.args[1];\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tlist += \",\" + pointer.args[0].toString( options, arg_priority );\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\t\tlist += \"|\" + pointer.toString( options, arg_priority );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist += \"]\";\r\n\t\t\t\t\treturn list;\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tvar id = this.id;\r\n\t\t\t\tvar operator = options.session ? options.session.lookup_operator( this.id, this.args.length ) : null;\r\n\t\t\t\tif( options.session === undefined || options.ignore_ops || operator === null ) {\r\n\t\t\t\t\tif( options.quoted && (! /^(!|[a-z][0-9a-zA-Z_]*|[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+)$/.test( id ) && id !== \"{}\" && id !== \"[]\" || indexOf([\".\",\",\",\";\"], id) !== -1 || id.substring(0,2) === \"/*\") )\r\n\t\t\t\t\t\tid = \"'\" + redoEscape(id) + \"'\";\r\n\t\t\t\t\tif( this.args.length === 0 && is_graphic_token(this.id) && priority.indicator !== \"\")\r\n\t\t\t\t\t\treturn \"(\" + id + \")\";\r\n\t\t\t\t\treturn id + (this.args.length > 0 ? \"(\" + map( this.args,\r\n\t\t\t\t\t\tfunction(x) { return x.toString(options, arg_priority); }\r\n\t\t\t\t\t).join(\",\") + \")\" : \"\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar priority_op = parseInt(operator.priority);\r\n\t\t\t\t\tvar priority_arg = parseInt(priority.priority);\r\n\t\t\t\t\tvar cond = priority_op > priority_arg || priority_op === priority_arg && (\r\n\t\t\t\t\t\toperator.class === \"xfx\" ||\r\n\t\t\t\t\t\toperator.class === \"xfy\" && this.indicator !== priority.indicator ||\r\n\t\t\t\t\t\toperator.class === \"yfx\" && this.indicator !== priority.indicator ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"yfx\" && from === \"right\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"xfy\" && from === \"left\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"xf\" && from === \"left\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"fx\" && from === \"right\");\r\n\t\t\t\t\toperator.indicator = this.indicator;\r\n\t\t\t\t\tvar lpar = cond ? \"(\" : \"\";\r\n\t\t\t\t\tvar rpar = cond ? \")\" : \"\";\r\n\t\t\t\t\tvar space = !(is_graphic_token(this.id) || this.id === \",\" || this.id === \";\")\r\n\t\t\t\t\t\t|| operator.class.length === 2\r\n\t\t\t\t\t\t|| operator.class.length === 3 && pl.type.is_number(this.args[1]) && this.args[1].value < 0 ? \" \" : \"\";\r\n\t\t\t\t\tif( this.args.length === 0 ) {\r\n\t\t\t\t\t\treturn lpar + this.id + rpar;\r\n\t\t\t\t\t} else if( [\"fy\",\"fx\"].indexOf( operator.class) !== -1 ) {\r\n\t\t\t\t\t\treturn lpar + id + space + this.args[0].toString( options, operator, \"right\" ) + rpar;\r\n\t\t\t\t\t} else if( [\"yf\",\"xf\"].indexOf( operator.class) !== -1 ) {\r\n\t\t\t\t\t\treturn lpar + this.args[0].toString( options, operator, \"left\" ) + space + id + rpar;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn lpar + this.args[0].toString( options, operator, \"left\" ) + space + this.id + space + this.args[1].toString( options, operator, \"right\" ) + rpar;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.toString = function( _ ) {\r\n\t\treturn \"(\" + this.id + \")\";\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.toString = function( options ) {\r\n\t\tvar str = \"{\";\r\n\t\tfor( var link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( str !== \"{\" ) {\r\n\t\t\t\tstr += \", \";\r\n\t\t\t}\r\n\t\t\tstr += link + \"/\" + this.links[link].toString( options );\r\n\t\t}\r\n\t\tstr += \"}\";\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.toString = function( options ) {\r\n\t\tif( this.goal === null ) {\r\n\t\t\treturn \"<\" + this.substitution.toString( options ) + \">\";\r\n\t\t} else {\r\n\t\t\treturn \"<\" + this.goal.toString( options ) + \", \" + this.substitution.toString( options ) + \">\";\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.toString = function( options ) {\r\n\t\tif( !this.body ) {\r\n\t\t\treturn this.head.toString( options ) + \".\";\r\n\t\t} else {\r\n\t\t\treturn this.head.toString( options, 1200, \"left\" ) + \" :- \" + this.body.toString( options, 1200, \"right\" ) + \".\";\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Session\r\n\tSession.prototype.toString = function( options ) {\r\n\t\tvar str = \"\";\r\n\t\tfor(var prop in this.modules) {\r\n\t\t\tif(this.modules.hasOwnProperty(prop) && this.modules[prop].is_library)\r\n\t\t\t\tstr += \":- use_module(library(\" + this.modules[prop] + \")).\\n\";\r\n\t\t}\r\n\t\tstr += \"\\n\";\r\n\t\tfor(var key in this.modules.user.rules) {\r\n\t\t\tif(!this.modules.user.rules.hasOwnProperty(key)) continue;\r\n\t\t\tfor(i = 0; i < this.modules.user.rules[key].length; i++) {\r\n\t\t\t\tstr += this.modules.user.rules[key][i].toString(options);\r\n\t\t\t\tstr += \"\\n\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// CLONE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.clone = function() {\r\n\t\treturn new Var( this.id );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.clone = function() {\r\n\t\treturn new Num( this.value, this.is_float );\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.clone = function() {\r\n\t\tvar term = new Term( this.id, map( this.args, function( arg ) {\r\n\t\t\treturn arg.clone();\r\n\t\t} ) );\r\n\t\tif(this.definition_module)\r\n\t\t\tterm.definition_module = this.definition_module;\r\n\t\treturn term;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.clone = function() {\r\n\t\treturn new Stream( this.stream, this.mode, this.alias, this.type, this.reposition, this.eof_action );\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.clone = function() {\r\n\t\tvar links = {};\r\n\t\tvar attrs = {};\r\n\t\tfor( var link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tlinks[link] = this.links[link].clone();\r\n\t\t}\r\n\t\tfor( var attr in this.attrs ) {\r\n\t\t\tif(!this.attrs.hasOwnProperty(attrs)) continue;\r\n\t\t\tattrs[attr] = {};\r\n\t\t\tfor( var m in this.attrs[attr] ) {\r\n\t\t\t\tif(!this.attrs[attr].hasOwnProperty(m)) continue;\r\n\t\t\t\tattrs[attr][m] = this.attrs[attr][m].clone();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, attrs );\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.clone = function() {\r\n\t\treturn new State( this.goal.clone(), this.substitution.clone(), this.parent );\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.clone = function() {\r\n\t\treturn new Rule( this.head.clone(), this.body !== null ? this.body.clone() : null );\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPARE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_variable( obj ) && this.id === obj.id;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_number( obj ) && this.value === obj.value && this.is_float === obj.is_float;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.equals = function( obj ) {\r\n\t\tif( !pl.type.is_term( obj ) || this.indicator !== obj.indicator ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor( var i = 0; i < this.args.length; i++ ) {\r\n\t\t\tif( !this.args[i].equals( obj.args[i] ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_stream( obj ) && this.id === obj.id;\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.equals = function( obj ) {\r\n\tvar link;\r\n\t\tif( !pl.type.is_substitution( obj ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor( link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( !obj.links[link] || !this.links[link].equals( obj.links[link] ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor( link in obj.links ) {\r\n\t\t\tif(!obj.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( !this.links[link] ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_state( obj ) && this.goal.equals( obj.goal ) && this.substitution.equals( obj.substitution ) && this.parent === obj.parent;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_rule( obj ) && this.head.equals( obj.head ) && (this.body === null && obj.body === null || this.body !== null && this.body.equals( obj.body ));\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// RENAME VARIABLES OF PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.rename = function( thread ) {\r\n\t\treturn thread.get_free_variable( this );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.rename = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.rename = function( thread ) {\r\n\t\t// ground\r\n\t\tif(this.ground)\r\n\t\t\treturn new Term(this.id, this.args);\r\n\t\t// list\r\n\t\tif(this.indicator === \"./2\") {\r\n\t\t\tvar arr = [];\r\n\t\t\tvar pointer = this;\r\n\t\t\twhile(pointer.indicator === \"./2\" && !pointer.ground) {\r\n\t\t\t\tvar app = pointer.args[0].rename(thread);\r\n\t\t\t\tarr.push(app);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar list = pointer.rename(thread);\r\n\t\t\tfor(var i = arr.length-1; i >= 0; i--)\r\n\t\t\t\tlist = new Term(\".\", [arr[i], list]);\r\n\t\t\treturn list;\r\n\t\t}\r\n\t\t// compound term\r\n\t\tvar args = [];\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tvar app = this.args[i].rename(thread);\r\n\t\t\targs.push(app);\r\n\t\t}\r\n\t\treturn new Term(this.id, args);\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.rename = function( thread ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.rename = function( thread ) {\r\n\t\treturn new Rule( this.head.rename( thread ), this.body !== null ? this.body.rename( thread ) : null );\r\n\t};\r\n\r\n\r\n\r\n\t// CHECK IF RENAME\r\n\r\n\t// Variables\r\n\tVar.prototype.is_rename = function(obj, links) {\r\n\t\tlinks = links || {};\r\n\t\tif(!pl.type.is_variable(obj)\r\n\t\t|| links.hasOwnProperty(this.id) && links[this.id] !== obj.id\r\n\t\t|| links.hasOwnProperty(obj.id) && links[obj.id] !== this.id)\r\n\t\t\treturn false;\r\n\t\tlinks[this.id] = obj.id;\r\n\t\tlinks[obj.id] = this.id;\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.is_rename = function(obj, _links) {\r\n\t\treturn this.equals(obj);\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.is_rename = function(obj, links) {\r\n\t\tlinks = links || {};\r\n\t\tif(!pl.type.is_term(obj) || this.indicator !== obj.indicator)\r\n\t\t\treturn false;\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tif(!pl.is_rename(this.args[i], obj.args[i], links))\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.is_rename = function(obj, _links) {\r\n\t\treturn this.equals(obj);\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// GET ID OF VARIABLES FROM PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.variables = function() {\r\n\t\treturn [this.id];\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.variables = function() {\r\n\t\treturn [];\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.variables = function() {\r\n\t\tif(this.ground)\r\n\t\t\treturn [];\r\n\t\treturn [].concat.apply( [], map( this.args, function( arg ) {\r\n\t\t\treturn arg.variables();\r\n\t\t} ) );\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.variables = function() {\r\n\t\treturn [];\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.variables = function() {\r\n\t\tif( this.body === null ) {\r\n\t\t\treturn this.head.variables();\r\n\t\t} else {\r\n\t\t\treturn this.head.variables().concat( this.body.variables() );\r\n\t\t}\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// APPLY SUBSTITUTIONS TO PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.apply = function( subs ) {\r\n\t\tif( subs.lookup( this.id ) ) {\r\n\t\t\treturn subs.lookup( this.id );\r\n\t\t}\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.apply = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.apply = function( subs ) {\r\n\t\t// ground atom\r\n\t\tif(this.ground)\r\n\t\t\treturn this;\r\n\t\t// list\r\n\t\tif(this.indicator === \"./2\") {\r\n\t\t\tvar arr = [];\r\n\t\t\tvar pointer = this;\r\n\t\t\twhile(pointer.indicator === \"./2\" && !pointer.ground) {\r\n\t\t\t\tvar app = pointer.args[0].apply(subs);\r\n\t\t\t\tarr.push(app);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar list = pointer.apply(subs);\r\n\t\t\tfor(var i = arr.length-1; i >= 0; i--)\r\n\t\t\t\tlist = new Term(\".\", [arr[i], list]);\r\n\t\t\treturn list;\r\n\t\t}\r\n\t\t// compound term\r\n\t\tvar args = [];\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tvar app = this.args[i].apply(subs);\r\n\t\t\targs.push(app);\r\n\t\t}\r\n\t\treturn new Term(this.id, args, this.ref);\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.apply = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.apply = function( subs ) {\r\n\t\treturn new Rule( this.head.apply( subs ), this.body !== null ? this.body.apply( subs ) : null );\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.apply = function( subs ) {\r\n\t\tvar link, links = {}, attr, attrs = {}, m;\r\n\t\tfor( link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tlinks[link] = this.links[link].apply(subs);\r\n\t\t}\r\n\t\tfor( attr in this.attrs ) {\r\n\t\t\tif(!this.attrs.hasOwnProperty(attr)) continue;\r\n\t\t\tattrs[attr] = {};\r\n\t\t\tfor( m in this.attrs[attr] ) {\r\n\t\t\t\tif(!this.attrs[attr].hasOwnProperty(m)) continue;\r\n\t\t\t\tattrs[attr][m] = this.attrs[attr][m].apply(subs);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, attrs );\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// SELECTION FUNCTION\r\n\t\r\n\t// Select term\r\n\tTerm.prototype.select = function() {\r\n\t\tvar pointer = this;\r\n\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \",/2\")\r\n\t\t\tpointer = pointer.args[0];\r\n\t\treturn pointer;\r\n\t};\r\n\t\r\n\t// Replace term\r\n\tTerm.prototype.replace = function( expr ) {\r\n\t\tif( this.indicator === \",/2\" ) {\r\n\t\t\tif( this.args[0].indicator === \",/2\" ) {\r\n\t\t\t\treturn new Term( \",\", [this.args[0].replace( expr ), this.args[1]] );\r\n\t\t\t} else {\r\n\t\t\t\treturn expr === null ? this.args[1] : new Term( \",\", [expr, this.args[1]] );\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn expr;\r\n\t\t}\r\n\t};\r\n\r\n\t// Search term\r\n\tTerm.prototype.search = function( expr ) {\r\n\t\tif(this == expr || this.ref === expr.ref)\r\n\t\t\treturn true;\r\n\t\tfor( var i = 0; i < this.args.length; i++ )\r\n\t\t\tif( pl.type.is_term( this.args[i] ) && this.args[i].search( expr ) )\r\n\t\t\t\treturn true;\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG SESSIONS AND THREADS\r\n\r\n\t// Push to a global stack\r\n\tSession.prototype.push_global_stack = function(stack, value) {\r\n\t\treturn this.thread.push_global_stack(stack, value);\r\n\t};\r\n\tThread.prototype.push_global_stack = function(stack, value) {\r\n\t\tif(!this.__stacks.hasOwnProperty(stack))\r\n\t\t\tthis.__stacks[stack] = [];\r\n\t\tthis.__stacks[stack].push(value);\r\n\t};\r\n\r\n\t// Pop all from a global stack\r\n\tSession.prototype.flush_global_stack = function(stack, tail) {\r\n\t\treturn this.thread.push_global_stack(stack, tail);\r\n\t};\r\n\tThread.prototype.flush_global_stack = function(stack, tail) {\r\n\t\tvar list = tail || new Term(\"[]\", []);\r\n\t\tif(this.__stacks.hasOwnProperty(stack)) {\r\n\t\t\twhile(this.__stacks[stack].length > 0)\r\n\t\t\t\tlist = new Term(\".\", [this.__stacks[stack].pop(), list]);\r\n\t\t\tdelete this.__stacks[stack];\r\n\t\t}\r\n\t\treturn list;\r\n\t};\r\n\r\n\t// Set max inferences\r\n\tSession.prototype.setMaxInferences = function(max) {\r\n\t\tthis.limit = typeof max === \"number\" && max > 0 ? max : null;\r\n\t};\r\n\tThread.prototype.setMaxInferences = function(max) {\r\n\t\tthis.session.setMaxInferences(max);\r\n\t\tthis.current_limit = this.session.limit;\r\n\t\tthis.has_limit = this.session.limit !== null;\r\n\t};\r\n\r\n\t// Format answer\r\n\tSession.prototype.format_answer = function(answer, options) {\r\n\t\treturn this.thread.format_answer(answer, options);\r\n\t};\r\n\tThread.prototype.format_answer = function(answer, options) {\r\n\t\treturn pl.format_answer(answer, this, options);\r\n\t};\r\n\r\n\t// Get current input\r\n\tSession.prototype.get_current_input = function() {\r\n\t\treturn this.current_input;\r\n\t};\r\n\tThread.prototype.get_current_input = function() {\r\n\t\treturn this.session.get_current_input();\r\n\t};\r\n\r\n\t// Get current output\r\n\tSession.prototype.get_current_output = function() {\r\n\t\treturn this.current_output;\r\n\t};\r\n\tThread.prototype.get_current_output = function() {\r\n\t\treturn this.session.get_current_output();\r\n\t};\r\n\r\n\t// Set current input\r\n\tSession.prototype.set_current_input = function( input ) {\r\n\t\tthis.current_input = input;\r\n\t};\r\n\tThread.prototype.set_current_input = function( input ) {\r\n\t\treturn this.session.set_current_input( input );\r\n\t};\r\n\r\n\t// Set current output\r\n\tSession.prototype.set_current_output = function( output ) {\r\n\t\tthis.current_output = output;\r\n\t};\r\n\tThread.prototype.set_current_output = function( output ) {\r\n\t\treturn this.session.set_current_output( output);\r\n\t};\r\n\r\n\t// Get stream by alias\r\n\tSession.prototype.get_stream_by_alias = function( alias ) {\r\n\t\treturn this.streams[alias];\r\n\t};\r\n\tThread.prototype.get_stream_by_alias = function( alias ) {\r\n\t\treturn this.session.get_stream_by_alias( alias );\r\n\t};\r\n\r\n\t// Open file\r\n\tSession.prototype.file_system_open = function( path, type, mode ) {\r\n\t\tif(this.get_flag(\"nodejs\").indicator === \"false/0\")\r\n\t\t\tpath = this.absolute_file_name(path);\r\n\t\treturn this.file_system.open( path, type, mode );\r\n\t};\r\n\tThread.prototype.file_system_open = function( path, type, mode ) {\r\n\t\treturn this.session.file_system_open( path, type, mode );\r\n\t};\r\n\r\n\t// Absolute file name\r\n\tSession.prototype.absolute_file_name = function(filename) {\r\n\t\tvar absolute;\r\n\t\t// node.js\r\n\t\tif(this.get_flag(\"nodejs\").indicator === \"true/0\") {\r\n\t\t\tvar path = require(\"path\");\r\n\t\t\tabsolute = filename;\r\n\t\t\tfor(var prop in process.env) {\r\n\t\t\t\tif(!process.env.hasOwnProperty(prop))\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tabsolute = absolute.replace(new RegExp(\"\\\\$\" + prop, \"g\"), process.env[prop]);\r\n\t\t\t}\r\n\t\t\treturn path.resolve(absolute);\r\n\t\t// browser\r\n\t\t} else {\r\n\t\t\tvar cwd = this.working_directory;\r\n\t\t\tif(filename[0] === \"/\")\r\n\t\t\t\tabsolute = filename;\r\n\t\t\telse\r\n\t\t\t\tabsolute = cwd + (cwd[cwd.length-1] === \"/\" ? filename : \"/\" + filename);\r\n\t\t\tabsolute = absolute.replace(/\\/\\.\\//g, \"/\");\r\n\t\t\tvar dirs = absolute.split(\"/\");\r\n\t\t\tvar dirs2 = [];\r\n\t\t\tfor(var i = 0; i < dirs.length; i++) {\r\n\t\t\t\tif(dirs[i] !== \"..\") {\r\n\t\t\t\t\tdirs2.push(dirs[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(dirs2.length !== 0)\r\n\t\t\t\t\t\tdirs2.pop();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tabsolute = dirs2.join(\"/\").replace(/\\/\\.$/, \"/\");\r\n\t\t}\r\n\t\treturn absolute;\r\n\t};\r\n\tThread.prototype.absolute_file_name = function(path, cwd) {\r\n\t\treturn this.session.absolute_file_name(path, cwd);\r\n\t};\r\n\r\n\t// Get conversion of the char\r\n\tSession.prototype.get_char_conversion = function( char ) {\r\n\t\treturn this.__char_conversion[char] || char;\r\n\t};\r\n\tThread.prototype.get_char_conversion = function( char ) {\r\n\t\treturn this.session.get_char_conversion( char );\r\n\t};\r\n\t\r\n\t// Parse an expression\r\n\tSession.prototype.parse = function( string ) {\r\n\t\treturn this.thread.parse( string );\r\n\t};\r\n\tThread.prototype.parse = function( string ) {\r\n\t\tvar tokenizer = new Tokenizer( this );\r\n\t\ttokenizer.new_text( string );\r\n\t\tvar tokens = tokenizer.get_tokens();\r\n\t\tif( tokens === null )\r\n\t\t\treturn false;\r\n\t\tvar expr = parseExpr(this, tokens, 0, this.__get_max_priority(), false);\r\n\t\tif( expr.len !== tokens.length )\r\n\t\t\treturn false;\r\n\t\treturn { value: expr.value, expr: expr, tokens: tokens };\r\n\t};\r\n\t\r\n\t// Get flag value\r\n\tSession.prototype.get_flag = function( flag ) {\r\n\t\treturn this.flag[flag];\r\n\t};\r\n\tThread.prototype.get_flag = function( flag ) {\r\n\t\treturn this.session.get_flag( flag );\r\n\t};\r\n\r\n\t// Add a rule\r\n\tSession.prototype.add_rule = function(rule, options) {\r\n\t\treturn this.thread.add_rule(rule, options);\r\n\t};\r\n\tThread.prototype.add_rule = function(rule, options) {\r\n\t\toptions = options ? options : {};\r\n\t\toptions.from = options.from ? options.from : \"$tau-js\";\r\n\t\tvar module_id, get_module;\r\n\t\tif(pl.type.is_term(rule.head) && rule.head.indicator === \":/2\") {\r\n\t\t\tif(!pl.type.is_atom(rule.head.args[0])) {\r\n\t\t\t\tthis.throw_warning(pl.error.type(\"module\", rule.head.args[0], \"top_level/0\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tmodule_id = rule.head.args[0].id;\r\n\t\t\trule.head = rule.head.args[1];\r\n\t\t}\r\n\t\tif(module_id) {\r\n\t\t\tget_module = this.session.modules[module_id];\r\n\t\t\tif(!pl.type.is_module(get_module)) {\r\n\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: this.session});\r\n\t\t\t\tthis.session.modules[module_id] = get_module;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tget_module = this.session.modules[options.context_module];\r\n\t\t}\r\n\t\tget_module.src_predicates[rule.head.indicator] = options.from;\r\n\t\tif(!get_module.rules.hasOwnProperty(rule.head.indicator)) {\r\n\t\t\tget_module.rules[rule.head.indicator] = [];\r\n\t\t}\r\n\t\tget_module.rules[rule.head.indicator].push(rule);\r\n\t\tif(!get_module.public_predicates.hasOwnProperty(rule.head.indicator))\r\n\t\t\tget_module.public_predicates[rule.head.indicator] = false;\r\n\t\t// update term indexing\r\n\t\tget_module.add_index_predicate(rule);\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Run a directive\r\n\tSession.prototype.run_directive = function(directive, options) {\r\n\t\treturn this.thread.run_directive(directive, options);\r\n\t};\r\n\tThread.prototype.run_directive = function(directive, options) {\r\n\t\tif(pl.type.is_directive(directive)) {\r\n\t\t\tif(pl.directive[directive.indicator])\r\n\t\t\t\treturn pl.directive[directive.indicator](this, directive, options);\r\n\t\t\telse\r\n\t\t\t\treturn pl.directive[directive.id + \"/*\"](this, directive, options);\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\t// Get maximum priority of the operators\r\n\tSession.prototype.__get_max_priority = function() {\r\n\t\treturn \"1200\";\r\n\t};\r\n\tThread.prototype.__get_max_priority = function() {\r\n\t\treturn this.session.__get_max_priority();\r\n\t};\r\n\t\r\n\t// Get next priority of the operators\r\n\tSession.prototype.__get_next_priority = function( priority ) {\r\n\t\tvar max = 0;\r\n\t\tpriority = parseInt( priority );\r\n\t\tfor( var key in this.__operators ) {\r\n\t\t\tif( !this.__operators.hasOwnProperty(key) ) continue;\r\n\t\t\tvar n = parseInt(key);\r\n\t\t\tif( n > max && n < priority ) max = n;\r\n\t\t}\r\n\t\treturn max.toString();\r\n\t};\r\n\tThread.prototype.__get_next_priority = function( priority ) {\r\n\t\treturn this.session.__get_next_priority( priority );\r\n\t};\r\n\t\r\n\t// Get classes of an operator\r\n\tSession.prototype.__lookup_operator_classes = function( priority, operator ) {\r\n\t\tif( this.__operators.hasOwnProperty( priority ) && this.__operators[priority][operator] instanceof Array ) {\r\n\t\t\treturn this.__operators[priority][operator] || false;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tThread.prototype.__lookup_operator_classes = function( priority, operator ) {\r\n\t\treturn this.session.__lookup_operator_classes( priority, operator );\r\n\t};\r\n\r\n\t// Get operator\r\n\tSession.prototype.lookup_operator = function( name, arity ) {\r\n\t\tfor(var p in this.__operators)\r\n\t\t\tif(this.__operators[p][name])\r\n\t\t\t\tfor(var i = 0; i < this.__operators[p][name].length; i++)\r\n\t\t\t\t\tif( this.__operators[p][name][i].length === arity+1 )\r\n\t\t\t\t\t\treturn {priority: p, class: this.__operators[p][name][i]};\r\n\t\treturn null;\r\n\t};\r\n\tThread.prototype.lookup_operator = function( name, arity ) {\r\n\t\treturn this.session.lookup_operator( name, arity );\r\n\t};\r\n\t\r\n\t// Throw a warning\r\n\tSession.prototype.throw_warning = function( warning ) {\r\n\t\tthis.thread.throw_warning( warning );\r\n\t};\r\n\tThread.prototype.throw_warning = function( warning ) {\r\n\t\tthis.warnings.push( warning );\r\n\t};\r\n\t\r\n\t// Get warnings\r\n\tSession.prototype.get_warnings = function() {\r\n\t\treturn this.thread.get_warnings();\r\n\t};\r\n\tThread.prototype.get_warnings = function() {\r\n\t\treturn this.warnings;\r\n\t};\r\n\r\n\t// Add a goal\r\n\tSession.prototype.add_goal = function( goal, unique ) {\r\n\t\tthis.thread.add_goal( goal, unique );\r\n\t};\r\n\tThread.prototype.add_goal = function( goal, unique, parent ) {\r\n\t\tparent = parent ? parent : null;\r\n\t\tif( unique === true )\r\n\t\t\tthis.points = [];\r\n\t\tvar vars = goal.variables();\r\n\t\tvar links = {};\r\n\t\tfor( var i = 0; i < vars.length; i++ )\r\n\t\t\tlinks[vars[i]] = new Var(vars[i]);\r\n\t\tthis.points.push( new State( goal, new Substitution(links), parent ) );\r\n\t};\r\n\r\n\t// Consult a program from a string\r\n\tSession.prototype.consult = function(program, options) {\r\n\t\treturn this.thread.consult(program, options);\r\n\t};\r\n\tThread.prototype.consult = function(program, options) {\r\n\t\tvar string = \"\", success = false;\r\n\t\tvar opts = {};\r\n\t\tvar callback = typeof options === \"function\" ? options : function(){};\r\n\t\toptions = options === undefined || typeof options === \"function\" ? {} : options;\r\n\t\topts.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\topts.text = options.text === undefined ? true : options.text;\r\n\t\topts.html = options.html === undefined ? true : options.html;\r\n\t\topts.url = options.url === undefined ? true : options.url;\r\n\t\topts.file = options.file === undefined ? true : options.file;\r\n\t\topts.script = options.script === undefined ? true : options.script;\r\n\t\topts.success = options.success === undefined ? callback : options.success;\r\n\t\topts.error = options.error === undefined ? callback : options.error;\r\n\t\t// string\r\n\t\tif(typeof program === \"string\") {\r\n\t\t\tstring = program;\r\n\t\t\t// script id\r\n\t\t\tif(opts.script && this.get_flag(\"nodejs\").indicator === \"false/0\" && program != \"\" && document.getElementById(string)) {\r\n\t\t\t\tvar script = document.getElementById(string);\r\n\t\t\t\tvar type = script.getAttribute(\"type\");\r\n\t\t\t\tif(type !== null && type.replace(/ /g, \"\").toLowerCase() === \"text/prolog\") {\r\n\t\t\t\t\tstring = script.text;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// file (node.js)\r\n\t\t\tif(!success && opts.file && this.get_flag(\"nodejs\").indicator === \"true/0\") {\r\n\t\t\t\tvar fs = require(\"fs\");\r\n\t\t\t\tvar thread = this;\r\n\t\t\t\tfs.readFile(program, function(error, data) {\r\n\t\t\t\t\tif(error) {\r\n\t\t\t\t\t\topts.file = false;\r\n\t\t\t\t\t\tthread.consult(program, opts);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tparseProgram(thread, data.toString(), opts);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// http request\r\n\t\t\tif(!success && this.get_flag(\"nodejs\").indicator === \"false/0\" && opts.url && program !== \"\" && !(/\\s/.test(program))) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tvar xhttp = new XMLHttpRequest();\r\n\t\t\t\t\tvar thread = this;\r\n\t\t\t\t\txhttp.onreadystatechange = function() {\r\n\t\t\t\t\t\tif(this.readyState == 4) {\r\n\t\t\t\t\t\t\tif(this.status == 200) {\r\n\t\t\t\t\t\t\t\tstring = xhttp.responseText;\r\n\t\t\t\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\t\t\t\tparseProgram(thread, string, opts);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\topts.url = false;\r\n\t\t\t\t\t\t\t\tthread.consult(program, opts);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\txhttp.open(\"GET\", program, true);\r\n\t\t\t\t\txhttp.send();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} catch(ex) {\r\n\t\t\t\t\topts.error(ex);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// text\r\n\t\t\tif(!success && opts.text) {\r\n\t\t\t\tsuccess = true;\r\n\t\t\t}\r\n\t\t// html\r\n\t\t} else if(opts.html && program.nodeName) {\r\n\t\t\tswitch(program.nodeName.toLowerCase()) {\r\n\t\t\t\tcase \"input\":\r\n\t\t\t\tcase \"textarea\":\r\n\t\t\t\t\tstring = program.value;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tstring = program.innerHTML;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\topts.error(pl.error.existence(\"source_sink\", new Term(string), \"top_level/0\"));\r\n\t\t}\r\n\t\tthis.warnings = [];\r\n\t\tparseProgram(this, string, opts);\r\n\t};\r\n\r\n\t// Query goal from a string (without ?-)\r\n\tSession.prototype.query = function(string, options) {\r\n\t\treturn this.thread.query(string, options);\r\n\t};\r\n\tThread.prototype.query = function(string, options) {\r\n\t\tthis.points = [];\r\n\t\tthis.debugger_states = [];\r\n\t\tthis.level = new Term(\"top_level\");\r\n\t\treturn parseQuery(this, string, options);\r\n\t};\r\n\t\r\n\t// Get first choice point\r\n\tSession.prototype.head_point = function() {\r\n\t\treturn this.thread.head_point();\r\n\t};\r\n\tThread.prototype.head_point = function() {\r\n\t\treturn this.points[this.points.length-1];\r\n\t};\r\n\t\r\n\t// Get free variable\r\n\tSession.prototype.get_free_variable = function( variable ) {\r\n\t\treturn this.thread.get_free_variable( variable );\r\n\t};\r\n\tThread.prototype.get_free_variable = function( variable ) {\r\n\t\tvar variables = [];\r\n\t\tif( variable.id === \"_\" || this.session.renamed_variables[variable.id] === undefined ) {\r\n\t\t\tthis.session.rename++;\r\n\t\t\tif( this.current_point )\r\n\t\t\t\tvariables = this.current_point.substitution.domain();\r\n\t\t\twhile( indexOf( variables, pl.format_variable( this.session.rename, variable.id ) ) !== -1 ) {\r\n\t\t\t\tthis.session.rename++;\r\n\t\t\t}\r\n\t\t\tif( variable.id === \"_\" ) {\r\n\t\t\t\treturn new Var( pl.format_variable( this.session.rename, variable.id ) );\r\n\t\t\t} else {\r\n\t\t\t\tthis.session.renamed_variables[variable.id] = pl.format_variable( this.session.rename, variable.id );\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Var( this.session.renamed_variables[variable.id] );\r\n\t};\r\n\t\r\n\t// Get next free variable\r\n\tSession.prototype.next_free_variable = function() {\r\n\t\treturn this.thread.next_free_variable();\r\n\t};\r\n\tThread.prototype.next_free_variable = function() {\r\n\t\tthis.session.rename++;\r\n\t\tvar variables = [];\r\n\t\tif( this.current_point )\r\n\t\t\tvariables = this.current_point.substitution.domain();\r\n\t\twhile( indexOf( variables, pl.format_variable( this.session.rename ) ) !== -1 ) {\r\n\t\t\tthis.session.rename++;\r\n\t\t}\r\n\t\treturn new Var( pl.format_variable( this.session.rename ) );\r\n\t};\r\n\t\r\n\t// Check if a predicate is public\r\n\tSession.prototype.is_public_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\treturn pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_public_predicate(indicator);\r\n\t};\r\n\tThread.prototype.is_public_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_public_predicate(indicator, module_id);\r\n\t};\r\n\t\r\n\t// Check if a predicate is multifile\r\n\tSession.prototype.is_multifile_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\treturn pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_multifile_predicate(indicator);\r\n\t};\r\n\tThread.prototype.is_multifile_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_multifile_predicate(indicator, module_id);\r\n\t};\r\n\r\n\t// Check if a predicate is a meta-predicate\r\n\tSession.prototype.is_meta_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\tif(pl.type.is_module(this.modules[module_id]))\r\n\t\t\treturn this.modules[module_id].is_meta_predicate(indicator);\r\n\t\treturn null;\r\n\t};\r\n\tThread.prototype.is_meta_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_meta_predicate(indicator, module_id);\r\n\t};\r\n\t\r\n\t// Insert states at the beginning\r\n\tSession.prototype.prepend = function( states ) {\r\n\t\treturn this.thread.prepend( states );\r\n\t};\r\n\tThread.prototype.prepend = function( states ) {\r\n\t\tfor(var i = states.length-1; i >= 0; i--)\r\n\t\t\tthis.points.push( states[i] );\r\n\t};\r\n\t\r\n\t// Remove the selected term and prepend the current state\r\n\tSession.prototype.success = function( point, parent ) {\r\n\t\treturn this.thread.success( point, parent );\r\n\t}\r\n\tThread.prototype.success = function( point, parent ) {\r\n\t\tvar parent = typeof parent === \"undefined\" ? point : parent;\r\n\t\tthis.prepend( [new State( point.goal.replace( null ), point.substitution, parent ) ] );\r\n\t};\r\n\t\r\n\t// Throw error\r\n\tSession.prototype.throw_error = function(error) {\r\n\t\treturn this.thread.throw_error(error);\r\n\t};\r\n\tThread.prototype.throw_error = function(error) {\r\n\t\tif(pl.type.is_variable(error))\r\n\t\t\terror = pl.error.instantiation(this.level.indicator);\r\n\t\tvar state = new State(\r\n\t\t\tnew Term(\"throw\", [error]),\r\n\t\t\tnew Substitution(),\r\n\t\t\tnull\r\n\t\t);\r\n\t\tstate.error = true;\r\n\t\tthis.prepend([state]);\r\n\t};\r\n\t\r\n\t// Get the module of a predicate\r\n\tSession.prototype.lookup_module = function(atom, context_module) {\r\n\t\treturn this.thread.lookup_module(atom, context_module);\r\n\t}\r\n\tThread.prototype.lookup_module = function(atom, context_module) {\r\n\t\tvar get_module = this.session.modules[context_module];\r\n\t\tif(!pl.type.is_module(get_module))\r\n\t\t\tget_module = this.session.modules.user;\r\n\t\tif(get_module.rules.hasOwnProperty(atom.indicator) && (\r\n\t\t\tget_module.exports_predicate(atom.indicator) ||\r\n\t\t\tget_module.rules.hasOwnProperty(this.level.indicator) ||\r\n\t\t\tcontext_module === get_module.id))\r\n\t\t\t\treturn get_module;\r\n\t\tget_module.modules.system = pl.modules.system;\r\n\t\tget_module.modules.user = this.session.modules.user;\r\n\t\tfor(var prop in get_module.modules) {\r\n\t\t\tif(!this.session.modules.hasOwnProperty(prop))\r\n\t\t\t\tcontinue;\r\n\t\t\tvar get_module = this.session.modules[prop];\r\n\t\t\tif(get_module.rules.hasOwnProperty(atom.indicator) && (\r\n\t\t\t\tget_module.exports_predicate(atom.indicator) ||\r\n\t\t\t\tget_module.rules.hasOwnProperty(this.level.indicator) ||\r\n\t\t\t\tcontext_module === get_module.id))\r\n\t\t\t\t\treturn get_module;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Expand a meta-predicate\r\n\tSession.prototype.expand_meta_predicate = function(atom, definition_module, context_module) {\r\n\t\treturn this.thread.expand_meta_predicate(atom, definition_module, context_module);\r\n\t};\r\n\tThread.prototype.expand_meta_predicate = function(atom, definition_module, context_module) {\r\n\t\tvar get_module = this.session.modules[definition_module];\r\n\t\tif(!get_module)\r\n\t\t\treturn;\r\n\t\tvar meta = get_module.is_meta_predicate(atom.indicator);\r\n\t\tif(!meta)\r\n\t\t\treturn;\r\n\t\tfor(var i = 0; i < meta.args.length; i++) {\r\n\t\t\tif(pl.type.is_integer(meta.args[i]) || pl.type.is_atom(meta.args[i]) && indexOf([\":\"], meta.args[i].id) !== -1) {\r\n\t\t\t\tif(!pl.type.is_term(atom.args[i]) || atom.args[i].indicator !== \":/2\") {\r\n\t\t\t\t\tatom.args[i] = new Term(\":\", [new Term(context_module), atom.args[i]]);\r\n\t\t\t\t}\r\n\t\t\t} else if(pl.type.is_atom(meta.args[i]) && meta.args[i].id === \"^\") {\r\n\t\t\t\tvar pointer_last = atom;\r\n\t\t\t\tvar pointer_index = i;\r\n\t\t\t\tvar pointer = atom.args[i];\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"^/2\") {\r\n\t\t\t\t\tpointer_last = pointer;\r\n\t\t\t\t\tpointer_index = 1;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(!pl.type.is_term(pointer) || pointer.indicator !== \":/2\") {\r\n\t\t\t\t\tpointer_last.args[pointer_index] = new Term(\":\", [new Term(context_module), pointer]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Resolution step\r\n\tSession.prototype.step = function() {\r\n\t\treturn this.thread.step();\r\n\t}\r\n\tThread.prototype.step = function() {\r\n\t\tif(this.points.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar asyn = false;\r\n\t\tvar point = this.points.pop();\r\n\t\tthis.current_point = point;\r\n\t\tif(this.debugger)\r\n\t\t\tthis.debugger_states.push(point);\r\n\t\tvar atom = pl.type.is_term(point.goal) ? point.goal.select() : point.goal;\r\n\t\tif(pl.type.is_term(atom) && (atom.indicator !== \":/2\" || pl.type.is_term(atom.args[1]))) {\r\n\t\t\tvar context_module = null;\r\n\t\t\tvar states = [];\r\n\t\t\tif(atom !== null) {\r\n\t\t\t\tthis.total_steps++;\r\n\t\t\t\tvar level = point;\r\n\t\t\t\twhile(level.parent !== null && level.parent.goal.search(atom))\r\n\t\t\t\t\tlevel = level.parent;\r\n\t\t\t\tif(level.parent === null) {\r\n\t\t\t\t\tthis.level = new Term(\"top_level\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.level = level.parent.goal.select();\r\n\t\t\t\t\tif(this.level.indicator === \":/2\")\r\n\t\t\t\t\t\tthis.level = this.level.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_term(atom) && atom.indicator === \":/2\") {\r\n\t\t\t\t\tcontext_module = atom.args[0];\r\n\t\t\t\t\tatom = atom.args[1];\r\n\t\t\t\t\tif(!pl.type.is_atom(context_module)) {\r\n\t\t\t\t\t\tthis.throw_error(pl.error.type(\"module\", context_module, this.level.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext_module = context_module.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(this.level.definition_module) {\r\n\t\t\t\t\t\tcontext_module = this.level.definition_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontext_module = \"user\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tatom.context_module = context_module;\r\n\t\t\t\tif(atom.indicator === \",/2\") {\r\n\t\t\t\t\tthis.prepend([new State(\r\n\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\":\", [new Term(context_module), atom.args[0]]),\r\n\t\t\t\t\t\t\tnew Term(\":\", [new Term(context_module), atom.args[1]])])),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.__call_indicator = atom.indicator;\r\n\t\t\t\tvar get_module = this.lookup_module(atom, context_module);\r\n\t\t\t\tatom.definition_module = pl.type.is_module(get_module) ? get_module.id : \"user\";\r\n\t\t\t\tthis.expand_meta_predicate(atom, atom.definition_module, context_module);\r\n\t\t\t\tvar clauses = null;\r\n\t\t\t\tif(get_module && atom.args.length > 0 && atom.args[0].index && get_module.indexed_clauses.hasOwnProperty(atom.indicator) && get_module.indexed_clauses[atom.indicator].hasOwnProperty(atom.args[0].index))\r\n\t\t\t\t\tclauses = get_module.indexed_clauses[atom.indicator][atom.args[0].index];\r\n\t\t\t\telse\r\n\t\t\t\t\tclauses = get_module === null ? null : get_module.rules[atom.indicator];\r\n\t\t\t\tif(clauses === null) {\r\n\t\t\t\t\tif(!this.session.modules.user.rules.hasOwnProperty(atom.indicator)) {\r\n\t\t\t\t\t\tif(this.get_flag(\"unknown\").id === \"error\") {\r\n\t\t\t\t\t\t\tthis.throw_error( pl.error.existence( \"procedure\", atom.indicator, this.level.indicator));\r\n\t\t\t\t\t\t} else if(this.get_flag(\"unknown\").id === \"warning\") {\r\n\t\t\t\t\t\t\tthis.throw_warning(\"unknown procedure \" + atom.indicator + \" (from \" + this.level.indicator + \")\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(clauses instanceof Function) {\r\n\t\t\t\t\tasyn = clauses(this, point, atom);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Goal expansion\r\n\t\t\t\t\tif(this.__goal_expansion && atom.indicator === \"goal_expansion/2\")\r\n\t\t\t\t\t\tclauses = clauses.concat(pl.builtin.rules[\"goal_expansion/2\"]);\r\n\t\t\t\t\tfor(var i = 0; i < clauses.length; i++) {\r\n\t\t\t\t\t\tthis.session.renamed_variables = {};\r\n\t\t\t\t\t\tvar clause = clauses[i].rename(this);\r\n\t\t\t\t\t\tvar occurs_check = this.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\t\tvar mgu = pl.unify(atom, clause.head, occurs_check);\r\n\t\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\t\tvar state = new State();\r\n\t\t\t\t\t\t\tstate.goal = point.goal.replace(clause.body);\r\n\t\t\t\t\t\t\tif(state.goal !== null)\r\n\t\t\t\t\t\t\t\tstate.goal = state.goal.apply(mgu);\r\n\t\t\t\t\t\t\tstate.substitution = point.substitution.apply(mgu);\r\n\t\t\t\t\t\t\tstate.parent = point;\r\n\t\t\t\t\t\t\tstates.push(state);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.prepend(states);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar term = pl.type.is_term(atom) && atom.indicator === \":/2\" ? atom.args[1] : atom;\r\n\t\t\tif(pl.type.is_variable(term))\r\n\t\t\t\tthis.throw_error(pl.error.instantiation(this.level.indicator));\r\n\t\t\telse\r\n\t\t\t\tthis.throw_error(pl.error.type(\"callable\", term, this.level.indicator));\r\n\t\t}\r\n\t\treturn asyn;\r\n\t};\r\n\t\r\n\t// Find next computed answer\r\n\tSession.prototype.answer = function(options) {\r\n\t\treturn this.thread.answer(options);\r\n\t};\r\n\tThread.prototype.answer = function(options) {\r\n\t\tvar opts = {};\r\n\t\toptions = options || function() {};\r\n\t\tif(typeof options === \"function\") {\r\n\t\t\topts = {\r\n\t\t\t\tsuccess: options,\r\n\t\t\t\terror: options,\r\n\t\t\t\tfail: options,\r\n\t\t\t\tlimit: options\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\topts.success = options.success === undefined ? function() {} : options.success;\r\n\t\t\topts.error = options.error === undefined ? function() {} : options.error;\r\n\t\t\topts.fail = options.fail === undefined ? function() {} : options.fail;\r\n\t\t\topts.limit = options.limit === undefined ? function() {} : options.limit;\r\n\t\t}\r\n\t\tthis.__calls.push(opts);\r\n\t\tif( this.__calls.length > 1 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.again();\r\n\t};\r\n\t\r\n\t// Find all computed answers\r\n\tSession.prototype.answers = function( callback, max, after ) {\r\n\t\treturn this.thread.answers( callback, max, after );\r\n\t}\r\n\tThread.prototype.answers = function( callback, max, after ) {\r\n\t\tvar answers = max === undefined ? 1000 : max;\r\n\t\tvar thread = this;\r\n\t\tif( answers <= 0 ) {\r\n\t\t\tif(after)\r\n\t\t\t\tafter();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.answer( function( answer ) {\r\n\t\t\tcallback( answer );\r\n\t\t\tif( answer !== false ) {\r\n\t\t\t\tsetTimeout( function() {\r\n\t\t\t\t\tthread.answers( callback, answers-1, after );\r\n\t\t\t\t}, 0 );\r\n\t\t\t} else if(after) {\r\n\t\t\t\tafter();\r\n\t\t\t}\r\n\t\t} );\r\n\t};\r\n\r\n\t// Again finding next computed answer\r\n\tSession.prototype.again = function(reset_limit) {\r\n\t\treturn this.thread.again(reset_limit);\r\n\t};\r\n\tThread.prototype.again = function(reset_limit) {\r\n\t\twhile(this.__calls.length > 0) {\r\n\t\t\tthis.warnings = [];\r\n\t\t\tif(reset_limit !== false)\r\n\t\t\t\tthis.current_limit = this.session.limit;\r\n\t\t\twhile((!this.has_limit || this.current_limit > 0) && this.points.length > 0 && this.head_point().goal !== null && !pl.type.is_error_state(this.head_point())) {\r\n\t\t\t\tif(this.has_limit)\r\n\t\t\t\t\tthis.current_limit--;\r\n\t\t\t\tvar t0 = Date.now();\r\n\t\t\t\tvar asyn = this.step();\r\n\t\t\t\tvar t1 = Date.now();\r\n\t\t\t\tthis.cpu_time += t1-t0;\r\n\t\t\t\tif(asyn === true)\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar call = this.__calls.shift();\r\n\t\t\t// limit of inferences\r\n\t\t\tif(this.has_limit && this.current_limit <= 0) {\r\n\t\t\t\t(function(call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.limit(null);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(call);\r\n\t\t\t// no answer\r\n\t\t\t} else if(this.points.length === 0) {\r\n\t\t\t\t(function(call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.fail(false);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(call);\r\n\t\t\t// error\r\n\t\t\t} else if(pl.type.is_error(this.head_point().goal)) {\r\n\t\t\t\tvar error = this.format_error(this.points.pop());\r\n\t\t\t\tthis.points = [];\r\n\t\t\t\t(function(error, call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.error(error);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(error, call);\r\n\t\t\t// computed answer\r\n\t\t\t} else {\r\n\t\t\t\tif(this.debugger)\r\n\t\t\t\t\tthis.debugger_states.push(this.head_point());\r\n\t\t\t\tvar answer = this.format_success(this.points.pop());\r\n\t\t\t\t(function(answer, call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.success(answer);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(answer, call);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Unfolding transformation\r\n\tSession.prototype.unfold = function( rule ) {\r\n\t\tif(rule.body === null)\r\n\t\t\treturn false;\r\n\t\tvar head = rule.head;\r\n\t\tvar body = rule.body;\r\n\t\tvar atom = body.select();\r\n\t\tvar thread = new Thread( this );\r\n\t\tvar unfolded = [];\r\n\t\tthread.add_goal( atom );\r\n\t\tthread.step();\r\n\t\tfor( var i = thread.points.length-1; i >= 0; i-- ) {\r\n\t\t\tvar point = thread.points[i];\r\n\t\t\tvar head2 = head.apply( point.substitution );\r\n\t\t\tvar body2 = body.replace( point.goal );\r\n\t\t\tif( body2 !== null )\r\n\t\t\t\tbody2 = body2.apply( point.substitution );\r\n\t\t\tunfolded.push( new Rule( head2, body2 ) );\r\n\t\t}\r\n\t\tvar rules = this.modules.user.rules[head.indicator];\r\n\t\tvar index = indexOf( rules, rule );\r\n\t\tif( unfolded.length > 0 && index !== -1 ) {\r\n\t\t\trules.splice.apply( rules, [index, 1].concat(unfolded) );\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tThread.prototype.unfold = function(rule) {\r\n\t\treturn this.session.unfold(rule);\r\n\t};\r\n\r\n\t\r\n\t\r\n\t// INTERPRET EXPRESSIONS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.interpret = function( thread ) {\r\n\t\treturn pl.error.instantiation( thread.level.indicator );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.interpret = function( thread ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.interpret = function( thread ) {\r\n\t\tif( pl.type.is_unitary_list( this ) ) {\r\n\t\t\treturn this.args[0].interpret( thread );\r\n\t\t} else {\r\n\t\t\treturn pl.operate( thread, this );\r\n\t\t}\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPARE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.compare = function( obj ) {\r\n\t\tif( this.id < obj.id ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.id > obj.id ) {\r\n\t\t\treturn 1;\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.compare = function( obj ) {\r\n\t\tif( this.value === obj.value && this.is_float === obj.is_float ) {\r\n\t\t\treturn 0;\r\n\t\t} else if( this.value < obj.value || this.value === obj.value && this.is_float && !obj.is_float ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.value > obj.value ) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.compare = function( obj ) {\r\n\t\tif( this.args.length < obj.args.length || this.args.length === obj.args.length && this.id < obj.id ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.args.length > obj.args.length || this.args.length === obj.args.length && this.id > obj.id ) {\r\n\t\t\treturn 1;\r\n\t\t} else {\r\n\t\t\tfor( var i = 0; i < this.args.length; i++ ) {\r\n\t\t\t\tvar arg = pl.compare( this.args[i], obj.args[i] );\r\n\t\t\t\tif( arg !== 0 ) {\r\n\t\t\t\t\treturn arg;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// SUBSTITUTIONS\r\n\t\r\n\t// Lookup variable\r\n\tSubstitution.prototype.lookup = function( variable ) {\r\n\t\tif( this.links[variable] ) {\r\n\t\t\treturn this.links[variable];\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Filter variables\r\n\tSubstitution.prototype.filter = function( predicate ) {\r\n\t\tvar links = {};\r\n\t\tfor( var id in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(id)) continue;\r\n\t\t\tvar value = this.links[id];\r\n\t\t\tif( predicate( id, value ) ) {\r\n\t\t\t\tlinks[id] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, this.attrs );\r\n\t};\r\n\t\r\n\t// Exclude variables\r\n\tSubstitution.prototype.exclude = function( variables ) {\r\n\t\tvar links = {};\r\n\t\tfor( var variable in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(variable)) continue;\r\n\t\t\tif( indexOf( variables, variable ) === -1 ) {\r\n\t\t\t\tlinks[variable] = this.links[variable];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, this.attrs );\r\n\t};\r\n\t\r\n\t// Add link\r\n\tSubstitution.prototype.add = function( variable, value ) {\r\n\t\tthis.links[variable] = value;\r\n\t};\r\n\t\r\n\t// Get domain\r\n\tSubstitution.prototype.domain = function( plain ) {\r\n\t\tvar f = plain === true ? function(x){return x;} : function(x){return new Var(x);};\r\n\t\tvar vars = [];\r\n\t\tfor( var x in this.links )\r\n\t\t\tvars.push( f(x) );\r\n\t\treturn vars;\r\n\t};\r\n\r\n\t// Get an attribute\r\n\tSubstitution.prototype.get_attribute = function( variable, module ) {\r\n\t\tif( this.attrs[variable] )\r\n\t\t\treturn this.attrs[variable][module];\r\n\t}\r\n\r\n\t// Set an attribute (in a new substitution)\r\n\tSubstitution.prototype.set_attribute = function( variable, module, value ) {\r\n\t\tvar subs = new Substitution( this.links );\r\n\t\tfor( var v in this.attrs ) {\r\n\t\t\tif( v === variable ) {\r\n\t\t\t\tsubs.attrs[v] = {};\r\n\t\t\t\tfor( var m in this.attrs[v] ) {\r\n\t\t\t\t\tsubs.attrs[v][m] = this.attrs[v][m];\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tsubs.attrs[v] = this.attrs[v];\r\n\t\t\t}\r\n\t\t}\r\n\t\tif( !subs.attrs[variable] ) {\r\n\t\t\tsubs.attrs[variable] = {};\r\n\t\t}\r\n\t\tsubs.attrs[variable][module] = value;\r\n\t\treturn subs;\r\n\t}\r\n\r\n\t// Check if a variables has attributes\r\n\tSubstitution.prototype.has_attributes = function( variable ) {\r\n\t\treturn this.attrs[variable] && this.attrs[variable] !== {};\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\t// GENERATE JAVASCRIPT CODE FROM PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Var(\"' + this.id.toString() + '\")';\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Num(' + this.value.toString() + ', ' + this.is_float.toString() + ')';\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Term(\"' + this.id.replace(/\"/g, '\\\\\"') + '\", [' + map( this.args, function( arg ) {\r\n\t\t\treturn arg.compile();\r\n\t\t} ) + '])';\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Rule(' + this.head.compile() + ', ' + (this.body === null ? 'null' : this.body.compile()) + ')';\r\n\t};\r\n\t\r\n\t// Sessions\r\n\tSession.prototype.compile = function() {\r\n\t\tvar str, obj = [], rules;\r\n\t\tfor( var _indicator in this.modules.user.rules ) {\r\n\t\t\tif(!this.modules.user.rules.hasOwnProperty(_indicator)) continue;\r\n\t\t\tvar indicator = this.modules.user.rules[_indicator];\r\n\t\t\trules = [];\r\n\t\t\tstr = \"\\\"\" + _indicator + \"\\\": [\";\r\n\t\t\tfor(var i = 0; i < indicator.length; i++) {\r\n\t\t\t\trules.push(indicator[i].compile());\r\n\t\t\t}\r\n\t\t\tstr += rules.join();\r\n\t\t\tstr += \"]\";\r\n\t\t\tobj.push( str );\r\n\t\t}\r\n\t\treturn \"{\" + obj.join() + \"};\";\r\n\t};\r\n\r\n\t// Module\r\n\tModule.prototype.compile = function() {\r\n\t\tvar length = 0;\r\n\t\tvar dependencies = 0;\r\n\t\tvar str = \"var pl;\\n\";\r\n\t\tstr += \"(function(pl) {\\n\";\r\n\t\t// name\r\n\t\tstr += \"\\tvar name = \\\"\" + this.id + \"\\\";\\n\";\r\n\t\t// predicates\r\n\t\tstr += \"\\tvar predicates = function() {\\n\";\r\n\t\tstr += \"\\t\\treturn {\\n\";\r\n\t\tfor(var prop in this.rules) {\r\n\t\t\tif(length > 0)\r\n\t\t\t\tstr += \",\\n\";\r\n\t\t\tstr += \"\\t\\t\\t\\\"\" + prop + \"\\\": \";\r\n\t\t\tif(typeof this.rules[prop] === \"function\") {\r\n\t\t\t\tstr += this.rules[prop];\r\n\t\t\t} else {\r\n\t\t\t\tstr += \"[\\n\";\r\n\t\t\t\tfor(var i = 0; i < this.rules[prop].length; i++) {\r\n\t\t\t\t\tstr += \"\\t\\t\\t\\t\" + this.rules[prop][i].compile();\r\n\t\t\t\t\tif(i < this.rules[prop].length-1)\r\n\t\t\t\t\t\tstr += \",\";\r\n\t\t\t\t\tstr += \"\\n\";\r\n\t\t\t\t}\r\n\t\t\t\tstr += \"\\t\\t\\t]\";\r\n\t\t\t}\r\n\t\t\tlength++;\r\n\t\t}\r\n\t\tstr += \"\\n\\t\\t};\\n\";\r\n\t\tstr += \"\\t};\\n\";\r\n\t\t// exports\r\n\t\tstr += \"\\tvar exports = [\";\r\n\t\tfor(var i = 0; i < this.exports.length; i++) {\r\n\t\t\tif(i > 0)\r\n\t\t\t\tstr += \", \";\r\n\t\t\tstr += \"\\\"\" + this.exports[i] + \"\\\"\";\r\n\t\t}\r\n\t\tstr += \"];\\n\";\r\n\t\t// options\r\n\t\tstr += \"\\tvar options = function() {\\n\";\r\n\t\tstr += \"\\t\\treturn {\\n\";\r\n\t\t// dependencies\r\n\t\tstr += \"\\t\\t\\tdependencies: [\";\r\n\t\tfor(var prop in this.modules) {\r\n\t\t\tif(dependencies > 0)\r\n\t\t\t\tstr += \", \";\r\n\t\t\tstr += \"\\\"\" + prop + \"\\\"\";\r\n\t\t\tdependencies++;\r\n\t\t}\r\n\t\tstr += \"]\\n\";\r\n\t\tstr += \"\\t\\t};\\n\";\r\n\t\tstr += \"};\\n\";\r\n\t\t// fixed code\r\n\t\tstr += \"\\tif(typeof module !== 'undefined') {\\n\";\r\n\t\tstr += \"\\t\\tmodule.exports = function(p) {\\n\";\r\n\t\tstr += \"\\t\\t\\tpl = p;\\n\";\r\n\t\tstr += \"\\t\\t\\tnew pl.type.Module(name, predicates(), exports, options());\\n\";\r\n\t\tstr += \"\\t\\t};\\n\";\r\n\t\tstr += \"\\t} else {\\n\";\r\n\t\tstr += \"\\t\\tnew pl.type.Module(name, predicates(), exports, options());\\n\";\r\n\t\tstr += \"\\t}\\n\";\r\n\t\tstr += \"})(pl);\\n\";\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG TO JAVASCRIPT\r\n\tVar.prototype.toJavaScript = function() {\r\n\t\treturn this.toString();\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.toJavaScript = function() {\r\n\t\treturn this.value;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.toJavaScript = function(options) {\r\n\t\t// Atom => String\r\n\t\tif( this.args.length === 0 && this.indicator !== \"[]/0\" ) {\r\n\t\t\treturn this.toString(options);\r\n\t\t} else if( pl.type.is_list( this ) ) {\r\n\t\t\t// List => Array\r\n\t\t\tvar all_obj = true;\r\n\t\t\tvar arr = [];\r\n\t\t\tvar obj = {};\r\n\t\t\tvar pointer = this;\r\n\t\t\tvar value;\r\n\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\tvalue = pointer.args[0].toJavaScript(options);\r\n\t\t\t\tarr.push( value );\r\n\t\t\t\tall_obj = all_obj && pl.type.is_term(pointer.args[0]) && pointer.args[0].indicator === \"-/2\" && pl.type.is_atom(pointer.args[0].args[0]);\r\n\t\t\t\tif(all_obj)\r\n\t\t\t\t\tobj[pointer.args[0].args[0].id] = pointer.args[0].args[1].toJavaScript(options);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tif( pointer.indicator === \"[]/0\" )\r\n\t\t\t\treturn all_obj && arr.length > 0 ? obj : arr;\r\n\r\n\t\t}\r\n\t\treturn this.toString(options);\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// RULES\r\n\t\r\n\t// Return singleton variables in the session\r\n\tRule.prototype.singleton_variables = function(include_named) {\r\n\t\tinclude_named = include_named || false;\r\n\t\tvar variables = this.head.variables();\r\n\t\tvar count = {};\r\n\t\tvar singleton = [];\r\n\t\tif(this.body !== null)\r\n\t\t\tvariables = variables.concat(this.body.variables());\r\n\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\tif(count[variables[i]] === undefined)\r\n\t\t\t\tcount[variables[i]] = 0;\r\n\t\t\tcount[variables[i]]++;\r\n\t\t}\r\n\t\tfor(var key in count) {\r\n\t\t\tif(!count.hasOwnProperty(key))\r\n\t\t\t\tcontinue;\r\n\t\t\tif(count[key] === 1) {\r\n\t\t\t\tvar charcode = codePointAt(key, 1);\r\n\t\t\t\tif(!include_named || key === \"_\")\r\n\t\t\t\t\tif(key === \"_\" || key[0] === \"_\" && (charcode === 95 || charcode >= 65 && charcode <= 90))\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\tsingleton.push(key);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn singleton;\r\n\t};\r\n\r\n\r\n\r\n\t// NODEJS\r\n\r\n\tvar nodejs_flag = typeof process !== 'undefined' && !process.browser\r\n\r\n\tvar nodejs_arguments = nodejs_flag ?\r\n\t\tarrayToList( map(process.argv.slice(1), function(arg) { return new Term( arg ); })) :\r\n\t\tnew Term(\"[]\", []);\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG\r\n\r\n\tvar pl = {\r\n\t\t\r\n\t\t// Environment\r\n\t\t__env: nodejs_flag ? global : window,\r\n\t\t\r\n\t\t// Modules\r\n\t\tmodules: {},\r\n\t\t\r\n\t\t// Version\r\n\t\tversion: version,\r\n\t\t\r\n\t\t// Parser\r\n\t\tparser: {\r\n\t\t\ttokenizer: Tokenizer,\r\n\t\t\texpression: parseExpr\r\n\t\t},\r\n\t\t\r\n\t\t// Utils\r\n\t\tutils: {\r\n\t\t\t\r\n\t\t\t// String to indicator\r\n\t\t\tstr_indicator: str_indicator,\r\n\t\t\t// Code point at\r\n\t\t\tcodePointAt: codePointAt,\r\n\t\t\t// From code point\r\n\t\t\tfromCodePoint: fromCodePoint,\r\n\t\t\t// Length of string\r\n\t\t\tstringLength: stringLength\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Statistics\r\n\t\tstatistics: {\r\n\t\t\t\r\n\t\t\t// Number of created terms\r\n\t\t\tgetCountTerms: function() {\r\n\t\t\t\treturn term_ref;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// JavaScript to Prolog\r\n\t\tfromJavaScript: {\r\n\t\t\t\r\n\t\t\t// Type testing\r\n\t\t\ttest: {\r\n\t\t\t\t\r\n\t\t\t\t// Boolean\r\n\t\t\t\tboolean: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj === true || obj === false;\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Number\r\n\t\t\t\tnumber: function( obj, tobj ) {\r\n\t\t\t\t\treturn typeof obj === \"number\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// String\r\n\t\t\t\tstring: function( obj, tobj ) {\r\n\t\t\t\t\treturn typeof obj === \"string\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// List\r\n\t\t\t\tlist: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj instanceof Array;\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Variable\r\n\t\t\t\tvariable: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj === undefined;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Object\r\n\t\t\t\tobject: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\treturn tobj && !(obj instanceof Array) && typeof obj === \"object\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Any\r\n\t\t\t\tany: function( _, tobj ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Function conversion\r\n\t\t\tconversion: {\r\n\t\t\t\t\r\n\t\t\t\t// Bolean\r\n\t\t\t\tboolean: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Term( obj ? \"true\" : \"false\", [] );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Number\r\n\t\t\t\tnumber: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Num( obj, obj % 1 !== 0 );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// String\r\n\t\t\t\tstring: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Term( obj, [] );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// List\r\n\t\t\t\tlist: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\tvar arr = [];\r\n\t\t\t\t\tvar elem;\r\n\t\t\t\t\tfor( var i = 0; i < obj.length; i++ ) {\r\n\t\t\t\t\t\telem = pl.fromJavaScript.apply( obj[i], tobj );\r\n\t\t\t\t\t\tif( elem === undefined )\r\n\t\t\t\t\t\t\treturn undefined;\r\n\t\t\t\t\t\tarr.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn arrayToList( arr );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Variable\r\n\t\t\t\tvariable: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Var( \"_\" );\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Object\r\n\t\t\t\tobject: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\tvar list = new Term(\"[]\", []);\r\n\t\t\t\t\tvar arr = [];\r\n\t\t\t\t\tfor(var prop in obj) {\r\n\t\t\t\t\t\tif(!obj.hasOwnProperty(prop)) continue;\r\n\t\t\t\t\t\tarr.push(new Term(\"-\", [\r\n\t\t\t\t\t\t\tpl.fromJavaScript.apply(prop, tobj),\r\n\t\t\t\t\t\t\tpl.fromJavaScript.apply(obj[prop], tobj)\r\n\t\t\t\t\t\t]));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn arrayToList(arr);\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Any\r\n\t\t\t\tany: function( obj, tobj ) {\r\n\t\t\t\t\treturn undefined;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Transform object\r\n\t\t\tapply: function( obj, tobj ) {\r\n\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\tfor( var i in pl.fromJavaScript.test )\r\n\t\t\t\t\tif( i !== \"any\" && pl.fromJavaScript.test[i]( obj, tobj ) )\r\n\t\t\t\t\t\treturn pl.fromJavaScript.conversion[i]( obj, tobj );\r\n\t\t\t\treturn pl.fromJavaScript.conversion.any( obj, tobj );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Types\r\n\t\ttype: {\r\n\t\t\t\r\n\t\t\t// Objects\r\n\t\t\tVar: Var,\r\n\t\t\tNum: Num,\r\n\t\t\tTerm: Term,\r\n\t\t\tRule: Rule,\r\n\t\t\tState: State,\r\n\t\t\tStream: Stream,\r\n\t\t\tModule: Module,\r\n\t\t\tThread: Thread,\r\n\t\t\tSession: Session,\r\n\t\t\tSubstitution: Substitution,\r\n\t\t\tFile: TauFile,\r\n\t\t\tDirectory: TauDirectory,\r\n\t\t\t\r\n\t\t\t// Order\r\n\t\t\torder: [Var, Num, Term, Stream],\r\n\t\t\t\r\n\t\t\t// Compare types\r\n\t\t\tcompare: function( x, y ) {\r\n\t\t\t\tvar ord_x = indexOf( pl.type.order, x.constructor );\r\n\t\t\t\tvar ord_y = indexOf( pl.type.order, y.constructor );\r\n\t\t\t\tif( ord_x < ord_y ) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else if( ord_x > ord_y ) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif( x.constructor === Num )\r\n\t\t\t\t\t\tif( x.is_float && y.is_float )\r\n\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\telse if( x.is_float )\r\n\t\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t\telse if( y.is_float )\r\n\t\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a substitution\r\n\t\t\tis_substitution: function( obj ) {\r\n\t\t\t\treturn obj instanceof Substitution;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a state\r\n\t\t\tis_state: function( obj ) {\r\n\t\t\t\treturn obj instanceof State;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a rule\r\n\t\t\tis_rule: function( obj ) {\r\n\t\t\t\treturn obj instanceof Rule;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a variable\r\n\t\t\tis_variable: function( obj ) {\r\n\t\t\t\treturn obj instanceof Var;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream\r\n\t\t\tis_stream: function( obj ) {\r\n\t\t\t\treturn obj instanceof Stream;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an anonymous variable\r\n\t\t\tis_anonymous_var: function( obj ) {\r\n\t\t\t\treturn obj instanceof Var && obj.id === \"_\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a callable term\r\n\t\t\tis_callable: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term\r\n\t\t\t\t&& (indexOf([\",/2\",\";/2\",\"->/2\"], obj.indicator) === -1\r\n\t\t\t\t|| pl.type.is_callable(obj.args[0]) && pl.type.is_callable(obj.args[1]))\r\n\t\t\t\t|| obj instanceof Var;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a number\r\n\t\t\tis_number: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an integer\r\n\t\t\tis_integer: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a float\r\n\t\t\tis_float: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && obj.is_float;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a term\r\n\t\t\tis_term: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an atom\r\n\t\t\tis_atom: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a ground term\r\n\t\t\tis_ground: function( obj ) {\r\n\t\t\t\tif( obj instanceof Var ) return false;\r\n\t\t\t\tif( obj instanceof Term )\r\n\t\t\t\t\tfor( var i = 0; i < obj.args.length; i++ )\r\n\t\t\t\t\t\tif( !pl.type.is_ground( obj.args[i] ) )\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\treturn true;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is atomic\r\n\t\t\tis_atomic: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 || obj instanceof Num;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is compound\r\n\t\t\tis_compound: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length > 0;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a list\r\n\t\t\tis_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (obj.indicator === \"[]/0\" || obj.indicator === \"./2\");\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an empty list\r\n\t\t\tis_empty_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a non empty list\r\n\t\t\tis_non_empty_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"./2\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a fully list\r\n\t\t\tis_fully_list: function( obj ) {\r\n\t\t\t\twhile( obj instanceof Term && obj.indicator === \"./2\" ) {\r\n\t\t\t\t\tobj = obj.args[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn obj instanceof Var || obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a instantiated list\r\n\t\t\tis_instantiated_list: function( obj ) {\r\n\t\t\t\twhile( obj instanceof Term && obj.indicator === \"./2\" ) {\r\n\t\t\t\t\tobj = obj.args[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an unitary list\r\n\t\t\tis_unitary_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"./2\" && obj.args[1] instanceof Term && obj.args[1].indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a character\r\n\t\t\tis_character: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 && (obj.id.length === 1 || obj.id.length > 0 && obj.id.length <= 2 && codePointAt( obj.id, 0 ) >= 65536);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a in_character\r\n\t\t\tis_in_character: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (obj.indicator === \"end_of_file/0\"\r\n\t\t\t\t|| obj.id.length === 1\r\n\t\t\t\t|| obj.id.length > 0 && obj.id.length <= 2 && codePointAt(obj.id, 0) >= 65536);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a character_code\r\n\t\t\tis_character_code: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 1114111;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a in_character_code\r\n\t\t\tis_in_character_code: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 1114111;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a byte\r\n\t\t\tis_byte: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 255;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a in_byte\r\n\t\t\tis_in_byte: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 255;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an operator\r\n\t\t\tis_operator: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && pl.arithmetic.evaluation[obj.indicator];\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a directive\r\n\t\t\tis_directive: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (pl.directive[obj.indicator] !== undefined || pl.directive[obj.id + \"/*\"] !== undefined);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a built-in predicate\r\n\t\t\tis_builtin: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && pl.builtin.rules.hasOwnProperty(obj.indicator) && obj.indicator !== \"goal_expansion/2\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an error\r\n\t\t\tis_error: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"throw/1\";\r\n\t\t\t},\r\n\r\n\t\t\t// Is an error state\r\n\t\t\tis_error_state: function( obj ) {\r\n\t\t\t\treturn pl.type.is_state( obj ) && obj.error && obj.error === true;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a predicate indicator\r\n\t\t\tis_predicate_indicator: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"//2\" && obj.args[0] instanceof Term && obj.args[0].args.length === 0 && obj.args[1] instanceof Num && obj.args[1].is_float === false;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a flag\r\n\t\t\tis_flag: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 && pl.flag[obj.id] !== undefined;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a valid value for a flag\r\n\t\t\tis_value_flag: function( flag, obj ) {\r\n\t\t\t\tif( !pl.type.is_flag( flag ) ) return false;\r\n\t\t\t\tfor( var value in pl.flag[flag.id].allowed ) {\r\n\t\t\t\t\tif(!pl.flag[flag.id].allowed.hasOwnProperty(value)) continue;\r\n\t\t\t\t\tif( pl.flag[flag.id].allowed[value].equals( obj ) ) return true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a io mode\r\n\t\t\tis_io_mode: function( obj ) {\r\n\t\t\t\treturn pl.type.is_atom( obj ) && [\"read\",\"write\",\"append\"].indexOf( obj.id ) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream option\r\n\t\t\tis_stream_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"alias/1\" && pl.type.is_atom(obj.args[0]) ||\r\n\t\t\t\t\tobj.indicator === \"reposition/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"type/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"text\" || obj.args[0].id === \"binary\") ||\r\n\t\t\t\t\tobj.indicator === \"eof_action/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"error\" || obj.args[0].id === \"eof_code\" || obj.args[0].id === \"reset\")\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream position\r\n\t\t\tis_stream_position: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term(obj) && (\r\n\t\t\t\t\tobj.indicator === \"end_of_stream/0\" ||\r\n\t\t\t\t\tobj.indicator === \"past_end_of_stream/0\" ||\r\n\t\t\t\t\tobj.indicator === \"position/3\"\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[0])\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[1])\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[2])\r\n\t\t\t\t)\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream property\r\n\t\t\tis_stream_property: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"input/0\" || \r\n\t\t\t\t\tobj.indicator === \"output/0\" || \r\n\t\t\t\t\tobj.indicator === \"alias/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) ||\r\n\t\t\t\t\tobj.indicator === \"file_name/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) ||\r\n\t\t\t\t\tobj.indicator === \"reposition/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\")) ||\r\n\t\t\t\t\tobj.indicator === \"type/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"text\" || obj.args[0].id === \"binary\")) ||\r\n\t\t\t\t\tobj.indicator === \"mode/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"read\" || obj.args[0].id === \"write\" || obj.args[0].id === \"append\")) ||\r\n\t\t\t\t\tobj.indicator === \"eof_action/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"error\" || obj.args[0].id === \"eof_code\" || obj.args[0].id === \"reset\")) ||\r\n\t\t\t\t\tobj.indicator === \"end_of_stream/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"at\" || obj.args[0].id === \"past\" || obj.args[0].id === \"not\")) ||\r\n\t\t\t\t\tobj.indicator === \"position/1\"\r\n\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0]) || pl.type.is_term(obj.args[0]) && obj.args[0].indicator === \"position/3\"\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[0]) || pl.type.is_integer(obj.args[0].args[0]))\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[1]) || pl.type.is_integer(obj.args[0].args[1]))\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[2]) || pl.type.is_integer(obj.args[0].args[2])))\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a streamable term\r\n\t\t\tis_streamable: function( obj ) {\r\n\t\t\t\treturn obj.__proto__.stream !== undefined;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a read option\r\n\t\t\tis_read_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && [\"variables/1\",\"variable_names/1\",\"singletons/1\"].indexOf( obj.indicator ) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a write option\r\n\t\t\tis_write_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"quoted/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"ignore_ops/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"numbervars/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"variable_names/1\" && pl.type.is_fully_list(obj.args[0])\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a close option\r\n\t\t\tis_close_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) &&\r\n\t\t\t\t\tobj.indicator === \"force/1\" &&\r\n\t\t\t\t\tpl.type.is_atom(obj.args[0]) &&\r\n\t\t\t\t\t(obj.args[0].id === \"true\" || obj.args[0].id === \"false\");\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a modifiable flag\r\n\t\t\tis_modifiable_flag: function( obj ) {\r\n\t\t\t\treturn pl.type.is_flag( obj ) && pl.flag[obj.id].changeable;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a module\r\n\t\t\tis_module: function( obj ) {\r\n\t\t\t\treturn obj instanceof Module;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a virtual file\r\n\t\t\tis_file: function( obj ) {\r\n\t\t\t\treturn obj instanceof TauFile;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a virtual directory\r\n\t\t\tis_directory: function( obj ) {\r\n\t\t\t\treturn obj instanceof TauDirectory;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a predicate property\r\n\t\t\tis_predicate_property: function(obj) {\r\n\t\t\t\treturn pl.type.is_term(obj) && (\r\n\t\t\t\t\tobj.indicator === \"built_in/0\" ||\r\n\t\t\t\t\tobj.indicator === \"static/0\" ||\r\n\t\t\t\t\tobj.indicator === \"dynamic/0\" ||\r\n\t\t\t\t\tobj.indicator === \"native_code/0\" ||\r\n\t\t\t\t\tobj.indicator === \"multifile/0\" ||\r\n\t\t\t\t\tobj.indicator === \"meta_predicate/1\"\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a meta-argument specifier\r\n\t\t\tis_meta_argument_specifier: function(obj) {\r\n\t\t\t\treturn pl.type.is_integer(obj) && obj.value >= 0 ||\r\n\t\t\t\t\tpl.type.is_atom(obj) && indexOf([\"+\", \"-\", \"?\", \"*\", \"^\", \":\", \"//\"], obj.id) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a time property\r\n\t\t\tis_time_property: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term(obj) && obj.args.length === 1 \r\n\t\t\t\t&& (pl.type.is_variable(obj.args[0]) || pl.type.is_integer(obj.args[0]))\r\n\t\t\t\t&& indexOf([\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\", \"weekday\"], obj.id) !== -1;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t},\r\n\r\n\t\t// Arithmetic functions\r\n\t\tarithmetic: {\r\n\t\t\t\r\n\t\t\t// Evaluation\r\n\t\t\tevaluation: {\r\n\t\t\t\t\"e/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Math.E; }\r\n\t\t\t\t},\r\n\t\t\t\t\"pi/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Math.PI; }\r\n\t\t\t\t},\r\n\t\t\t\t\"tau/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return 2*Math.PI; }\r\n\t\t\t\t},\r\n\t\t\t\t\"epsilon/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Number.EPSILON; }\r\n\t\t\t\t},\r\n\t\t\t\t\"+/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"-/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return -x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"\\\\/1\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return ~x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"abs/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.abs( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sign/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sign( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float_integer_part/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float_fractional_part/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return x - parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseFloat( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"floor/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.floor( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"truncate/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"round/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.round( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"ceiling/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.ceil( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sin/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sin( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"cos/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.cos( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"tan/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.tan( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"asin/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.asin(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"acos/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.acos(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atan/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.atan( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atan2/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x === 0 && y === 0 ? pl.error.evaluation(\"undefined\", thread.__call_indicator) : Math.atan2(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"acosh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x >= 1 ? Math.acosh(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"asinh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.asinh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atanh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) < 1 ? Math.atanh(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"cosh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.cosh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sinh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sinh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"tanh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.tanh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"exp/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.exp( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sqrt/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x >= 0 ? Math.sqrt( x ) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x > 0 ? Math.log( x ) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x > 0 && y > 0 ? Math.log(y)/Math.log(x) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log10/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x > 0 ? Math.log(x)/Math.log(10) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"+/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x + y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"-/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x - y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"*/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x * y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"//2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x / y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"///2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? Math.trunc( x / y ) : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"div/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? Math.floor( x / y ) : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"**/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation(\"zero_divisor\", thread.__call_indicator) : Math.pow(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"^/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation(\"zero_divisor\", thread.__call_indicator) : Math.pow(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"<>/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x >> y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"/\\\\/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x & y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"\\\\//2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x | y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"xor/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x ^ y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"rem/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x % y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"mod/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x - Math.floor( x / y ) * y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"max/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return Math.max( x, y ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"min/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return Math.min( x, y ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"gcd/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return gcd(x, y); }\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Directives\r\n\t\tdirective: {\r\n\t\t\t\r\n\t\t\t// dynamic/1\r\n\t\t\t\"dynamic/1\": function( thread, atom, options ) {\r\n\t\t\t\tvar indicators = atom.args[0];\r\n\t\t\t\tif(!pl.type.is_list(indicators))\r\n\t\t\t\t\tindicators = arrayToList([indicators]);\r\n\t\t\t\tvar pointer = indicators;\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tindicator = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( indicator ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_compound( indicator ) || indicator.indicator !== \"//2\" ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t\t} else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_atom( indicator.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", indicator.args[0], atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_integer( indicator.args[1] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", indicator.args[1], atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar key = indicator.args[0].id + \"/\" + indicator.args[1].value;\r\n\t\t\t\t\t\tvar get_module = thread.session.modules[options.context_module];\r\n\t\t\t\t\t\tget_module.public_predicates[key] = true;\r\n\t\t\t\t\t\tif( !get_module.rules[key] )\r\n\t\t\t\t\t\tget_module.rules[key] = [];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// dynamic/[2..]\r\n\t\t\t\"dynamic/*\": function( thread, atom ) {\r\n\t\t\t\tfor(var i = 0; i < atom.args.length; i++) {\r\n\t\t\t\t\tpl.directive[\"dynamic/1\"](thread, new Term(\"dynamic\", [atom.args[i]]));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// multifile/1\r\n\t\t\t\"multifile/1\": function( thread, atom, options ) {\r\n\t\t\t\tvar indicator = atom.args[0];\r\n\t\t\t\tif( pl.type.is_variable( indicator ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_compound( indicator ) || indicator.indicator !== \"//2\" ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t} else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( indicator.args[0] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", indicator.args[0], atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_integer( indicator.args[1] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", indicator.args[1], atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar predicate_indicator = atom.args[0].args[0].id + \"/\" + atom.args[0].args[1].value;\r\n\t\t\t\t\tvar get_module = thread.session.modules[options.context_module];\r\n\t\t\t\t\tget_module.multifile_predicates[predicate_indicator] = true;\r\n\t\t\t\t\tif(!get_module.rules.hasOwnProperty(predicate_indicator)) {\r\n\t\t\t\t\t\tget_module.rules[predicate_indicator] = [];\r\n\t\t\t\t\t\tget_module.public_predicates[predicate_indicator] = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// meta_predicate/1\r\n\t\t\t\"meta_predicate/1\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\tvar head = atom.args[0];\r\n\t\t\t\tif( pl.type.is_variable(head) ) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfor(var i = 0; i < head.args.length; i++) {\r\n\t\t\t\t\t\tvar arg = head.args[i];\r\n\t\t\t\t\t\tif(!pl.type.is_meta_argument_specifier(arg)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"meta_argument_specifier\", arg, atom.indicator));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.session.modules[options.context_module].meta_predicates[head.indicator] = head;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// set_prolog_flag\r\n\t\t\t\"set_prolog_flag/2\": function( thread, atom ) {\r\n\t\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\t\tif( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_flag( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_modifiable_flag( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.permission( \"modify\", \"flag\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_value_flag( flag, value ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.domain( \"flag_value\", new Term( \"+\", [flag, value] ), atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.session.flag[flag.id] = value;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// module/2\r\n\t\t\t\"module/2\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\toptions.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\t\t\tvar module_id = atom.args[0], exports = atom.args[1];\r\n\t\t\t\tif(pl.type.is_variable(module_id) || pl.type.is_variable(exports)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_atom(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"atom\", module_id, atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_list(exports)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"list\", exports, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id.indicator])) {\r\n\t\t\t\t\t\tvar pointer = exports;\r\n\t\t\t\t\t\tvar indicators = [];\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar predicate = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_predicate_indicator(predicate)) {\r\n\t\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"predicate_indicator\", predicate, atom.indicator));\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tindicators.push(predicate.args[0].id + \"/\" + predicate.args[1].value);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\t\t} else if(!pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"list\", exports, atom.indicator));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar new_module = new Module(module_id.id, {}, indicators, {\r\n\t\t\t\t\t\t\tsession: thread.session\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthread.session.modules[module_id.id] = new_module;\r\n\t\t\t\t\t\tthread.session.modules[options.context_module].modules[module_id.id] = new_module;\r\n\t\t\t\t\t\toptions.context_module = module_id.id;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_warning(pl.error.permission(\"create\", \"module\", module_id, atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// use_module/1\r\n\t\t\t\"use_module/1\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\toptions.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\t\t\tvar module_id = atom.args[0];\r\n\t\t\t\tif(pl.type.is_variable(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_term(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"term\", module_id, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(module_id.indicator === \"library/1\") {\r\n\t\t\t\t\t\tvar name = module_id.args[0].id;\r\n\t\t\t\t\t\tvar get_module = pl.modules[name];\r\n\t\t\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\t\t\tif(!thread.session.modules[options.context_module].modules.hasOwnProperty(name)) {\r\n\t\t\t\t\t\t\t\tthread.session.modules[name] = get_module;\r\n\t\t\t\t\t\t\t\tthread.session.modules[options.context_module].modules[name] = get_module;\r\n\t\t\t\t\t\t\t\tfor(var i = 0; i < get_module.dependencies.length; i++) {\r\n\t\t\t\t\t\t\t\t\tvar term = new Term(\"use_module\", [new Term(\"library\", [new Term(get_module.dependencies[i])])]);\r\n\t\t\t\t\t\t\t\t\tpl.directive[\"use_module/1\"](thread, term, {\r\n\t\t\t\t\t\t\t\t\t\tcontext_module: name\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.existence(\"module\", module_id, atom.indicator));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar name = module_id.id;\r\n\t\t\t\t\t\tthread.consult(name, {\r\n\t\t\t\t\t\t\tcontext_module: options.context_module,\r\n\t\t\t\t\t\t\ttext: false,\r\n\t\t\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\terror: function() {\r\n\t\t\t\t\t\t\t\toptions.error(pl.error.existence(\"module\", module_id, atom.indicator));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// char_conversion/2\r\n\t\t\t\"char_conversion/2\": function(thread, atom, options) {\r\n\t\t\t\tvar inchar = atom.args[0], outchar = atom.args[1];\r\n\t\t\t\tif(pl.type.is_variable(inchar) || pl.type.is_variable(outchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_character(inchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"character\", inchar, atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_character(outchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"character\", outchar, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(inchar.id === outchar.id) {\r\n\t\t\t\t\t\tdelete thread.session.__char_conversion[inchar.id];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.session.__char_conversion[inchar.id] = outchar.id;\r\n\t\t\t\t\t}\r\n\t\t\t\t\toptions.tokens = options.tokenizer.get_tokens(options.current_token);\r\n\t\t\t\t\toptions.current_token = 0;\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// op/3\r\n\t\t\t\"op/3\": function( thread, atom ) {\r\n\t\t\t\tvar priority = atom.args[0], type = atom.args[1], operators = atom.args[2];\r\n\t\t\t\tif(pl.type.is_atom(operators))\r\n\t\t\t\t\toperators = new Term(\".\", [operators, new Term(\"[]\")]);\r\n\t\t\t\tif( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_integer( priority ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( type ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", type, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_list( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t} else if( pl.type.is_empty_list( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operators, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar pointer = operators;\r\n\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\tvar operator = pointer.args[0];\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\tif( pl.type.is_variable( operator ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t} else if( !pl.type.is_atom( operator ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( priority.value < 0 || priority.value > 1200 ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \",\" ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"{}\" ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"[]\" ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"|\" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"].indexOf( type.id ) === -1 ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.domain( \"operator_specifier\", type, atom.indicator ) );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar fix = { prefix: null, infix: null, postfix: null };\r\n\t\t\t\t\t\t\tfor( var p in thread.session.__operators ) {\r\n\t\t\t\t\t\t\t\tif(!thread.session.__operators.hasOwnProperty(p)) continue;\r\n\t\t\t\t\t\t\t\tvar classes = thread.session.__operators[p][operator.id];\r\n\t\t\t\t\t\t\t\tif( classes ) {\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"fx\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fx\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"fy\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fy\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"xf\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"yf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"yf\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfx\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfy\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfy\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"yfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"yfx\" }; }\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar current_class;\r\n\t\t\t\t\t\t\tswitch( type.id ) {\r\n\t\t\t\t\t\t\t\tcase \"fy\": case \"fx\": current_class = \"prefix\"; break;\r\n\t\t\t\t\t\t\t\tcase \"yf\": case \"xf\": current_class = \"postfix\"; break;\r\n\t\t\t\t\t\t\t\tdefault: current_class = \"infix\"; break;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(fix.infix && current_class === \"postfix\" || fix.postfix && current_class === \"infix\") {\r\n\t\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif( fix[current_class] ) {\r\n\t\t\t\t\t\t\t\t\tremove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type );\r\n\t\t\t\t\t\t\t\t\tif( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) {\r\n\t\t\t\t\t\t\t\t\t\tdelete thread.session.__operators[fix[current_class].priority][operator.id];\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif( priority.value > 0 ) {\r\n\t\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {};\r\n\t\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = [];\r\n\t\t\t\t\t\t\t\t\tthread.session.__operators[priority.value][operator.id].push( type.id );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// initialization/1\r\n\t\t\t\"initialization/1\": function(thread, atom, options) {\r\n\t\t\t\tvar goal = atom.args[0];\r\n\t\t\t\toptions.initialization.push(goal);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Flags\r\n\t\tflag: {\r\n\t\t\t\r\n\t\t\t// Bounded numbers\r\n\t\t\tbounded: {\r\n\t\t\t\tallowed: [new Term( \"true\" ), new Term( \"false\" )],\r\n\t\t\t\tvalue: new Term( \"true\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Maximum integer\r\n\t\t\tmax_integer: {\r\n\t\t\t\tallowed: [new Num( Number.MAX_SAFE_INTEGER )],\r\n\t\t\t\tvalue: new Num( Number.MAX_SAFE_INTEGER ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Minimum integer\r\n\t\t\tmin_integer: {\r\n\t\t\t\tallowed: [new Num( Number.MIN_SAFE_INTEGER )],\r\n\t\t\t\tvalue: new Num( Number.MIN_SAFE_INTEGER ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Rounding function\r\n\t\t\tinteger_rounding_function: {\r\n\t\t\t\tallowed: [new Term( \"down\" ), new Term( \"toward_zero\" )],\r\n\t\t\t\tvalue: new Term( \"toward_zero\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Character conversion\r\n\t\t\tchar_conversion: {\r\n\t\t\t\tallowed: [new Term( \"on\" ), new Term( \"off\" )],\r\n\t\t\t\tvalue: new Term( \"on\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Debugger\r\n\t\t\tdebug: {\r\n\t\t\t\tallowed: [new Term( \"on\" ), new Term( \"off\" )],\r\n\t\t\t\tvalue: new Term( \"off\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Maximum arity of predicates\r\n\t\t\tmax_arity: {\r\n\t\t\t\tallowed: [new Term( \"unbounded\" )],\r\n\t\t\t\tvalue: new Term( \"unbounded\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Unkwnow predicates behavior\r\n\t\t\tunknown: {\r\n\t\t\t\tallowed: [new Term( \"error\" ), new Term( \"fail\" ), new Term( \"warning\" )],\r\n\t\t\t\tvalue: new Term( \"error\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Double quotes behavior\r\n\t\t\tdouble_quotes: {\r\n\t\t\t\tallowed: [new Term( \"chars\" ), new Term( \"codes\" ), new Term( \"atom\" )],\r\n\t\t\t\tvalue: new Term( \"chars\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Occurs check behavior\r\n\t\t\toccurs_check: {\r\n\t\t\t\tallowed: [new Term( \"false\" ), new Term( \"true\" )],\r\n\t\t\t\tvalue: new Term( \"false\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Dialect\r\n\t\t\tdialect: {\r\n\t\t\t\tallowed: [new Term( \"tau\" )],\r\n\t\t\t\tvalue: new Term( \"tau\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Version\r\n\t\t\tversion_data: {\r\n\t\t\t\tallowed: [new Term( \"tau\", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] )],\r\n\t\t\t\tvalue: new Term( \"tau\", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// NodeJS\r\n\t\t\tnodejs: {\r\n\t\t\t\tallowed: [new Term( \"true\" ), new Term( \"false\" )],\r\n\t\t\t\tvalue: new Term( nodejs_flag ? \"true\" : \"false\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\r\n\t\t\t// Arguments\r\n\t\t\targv: {\r\n\t\t\t\tallowed: [nodejs_arguments],\r\n\t\t\t\tvalue: nodejs_arguments,\r\n\t\t\t\tchangeble: false\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Unify\r\n\t\tunify: function(t1, t2, occurs_check) {\r\n\t\t\toccurs_check = occurs_check === undefined ? false : occurs_check;\r\n\t\t\tvar left = Array.isArray(t1) ? t1 : [t1];\r\n\t\t\tvar right = Array.isArray(t2) ? t2 : [t2];\r\n\t\t\tif(left.length !== right.length)\r\n\t\t\t\treturn null;\r\n\t\t\tvar subs = new Substitution();\r\n\t\t\twhile(left.length > 0) {\r\n\t\t\t\tvar s = left.pop();\r\n\t\t\t\tvar t = right.pop();\r\n\t\t\t\tif(pl.type.is_variable(s))\r\n\t\t\t\t\ts = s.apply(subs);\r\n\t\t\t\tif(pl.type.is_variable(t))\r\n\t\t\t\t\tt = t.apply(subs);\r\n\t\t\t\t// same object\r\n\t\t\t\tif(s == t)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t// compound terms\r\n\t\t\t\tif(pl.type.is_term(s) && pl.type.is_term(t)) {\r\n\t\t\t\t\tif(s.indicator !== t.indicator)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\tfor(var i = s.args.length-1; i >= 0; i--) {\r\n\t\t\t\t\t\tleft.push(s.args[i]);\r\n\t\t\t\t\t\tright.push(t.args[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t// numbers\r\n\t\t\t\t} else if(pl.type.is_number(s) && pl.type.is_number(t)) {\r\n\t\t\t\t\tif(s.value !== t.value || s.is_float !== t.is_float)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t// variable - term\r\n\t\t\t\t} else if(pl.type.is_variable(s)) {\r\n\t\t\t\t\tt = t.apply(subs);\r\n\t\t\t\t\t// x = x\r\n\t\t\t\t\tif(pl.type.is_variable(t) && s.id === t.id)\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t// occurs check\r\n\t\t\t\t\tif(occurs_check === true && indexOf(t.variables(), s.id) !== -1)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t// anonymous variable\r\n\t\t\t\t\tif(s.id !== \"_\")\r\n\t\t\t\t\t\tsubs.add(s.id, t);\r\n\t\t\t\t// term - variable\r\n\t\t\t\t} else if(pl.type.is_variable(t)) {\r\n\t\t\t\t\tleft.push(t);\r\n\t\t\t\t\tright.push(s);\r\n\t\t\t\t// user-defined terms\r\n\t\t\t\t} else if(s.unify !== undefined) {\r\n\t\t\t\t\tvar user_subs = s.apply(subs).unify(t.apply(subs), occurs_check);\r\n\t\t\t\t\tif(user_subs == null)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\tfor(var i in user_subs.links)\r\n\t\t\t\t\t\tsubs.add(i, user_subs.links[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn subs.apply(subs);\r\n\t\t},\r\n\r\n\t\t// Is rename\r\n\t\tis_rename: function(obj1, obj2, links) {\r\n\t\t\tlinks = links || {};\r\n\t\t\tif(obj1.is_rename && obj2.is_rename)\r\n\t\t\t\treturn obj1.is_rename(obj2, links);\r\n\t\t\telse if(obj1.equals && obj2.equals)\r\n\t\t\t\treturn obj1.equals(obj2);\r\n\t\t\telse\r\n\t\t\t\treturn false;\r\n\t\t},\r\n\t\t\r\n\t\t// Compare\r\n\t\tcompare: function( obj1, obj2 ) {\r\n\t\t\tvar type = pl.type.compare( obj1, obj2 );\r\n\t\t\treturn type !== 0 ? type : obj1.compare( obj2 );\r\n\t\t},\r\n\t\t\r\n\t\t// Arithmetic comparison\r\n\t\tarithmetic_compare: function( thread, obj1, obj2 ) {\r\n\t\t\tvar expr1 = obj1.interpret( thread );\r\n\t\t\tif( !pl.type.is_number( expr1 ) ) {\r\n\t\t\t\treturn expr1;\r\n\t\t\t} else {\r\n\t\t\t\tvar expr2 = obj2.interpret( thread );\r\n\t\t\t\tif( !pl.type.is_number( expr2 ) ) {\r\n\t\t\t\t\treturn expr2;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn expr1.value < expr2.value ? -1 : (expr1.value > expr2.value ? 1 : 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Operate\r\n\t\toperate: function( thread, obj ) {\r\n\t\t\tif( pl.type.is_operator( obj ) ) {\r\n\t\t\t\tvar op = pl.type.is_operator( obj );\r\n\t\t\t\tvar args = [], value;\r\n\t\t\t\tvar type = false;\r\n\t\t\t\tfor( var i = 0; i < obj.args.length; i++ ) {\r\n\t\t\t\t\tvalue = obj.args[i].interpret( thread );\r\n\t\t\t\t\tif( !pl.type.is_number( value ) ) {\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t} else if( op.type_args !== null && value.is_float !== op.type_args ) {\r\n\t\t\t\t\t\treturn pl.error.type( op.type_args ? \"float\" : \"integer\", value, thread.__call_indicator );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\targs.push( value.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttype = type || value.is_float;\r\n\t\t\t\t}\r\n\t\t\t\targs.push( thread );\r\n\t\t\t\tvalue = pl.arithmetic.evaluation[obj.indicator].fn.apply( this, args );\r\n\t\t\t\tif(obj.indicator === \"^/2\" && !type && value !== parseInt(value, 10))\r\n\t\t\t\t\treturn pl.error.type( \"float\", new Num(args[0],false), thread.__call_indicator );\r\n\t\t\t\ttype = op.type_result === null ? type : op.type_result;\r\n\t\t\t\tif( pl.type.is_term( value ) ) {\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t} else if( value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY ) {\r\n\t\t\t\t\treturn pl.error.evaluation( \"float_overflow\", thread.__call_indicator );\r\n\t\t\t\t} else if( type === false && thread.get_flag( \"bounded\" ).id === \"true\" && (value > thread.get_flag( \"max_integer\" ).value || value < thread.get_flag( \"min_integer\" ).value) ) {\r\n\t\t\t\t\treturn pl.error.evaluation( \"int_overflow\", thread.__call_indicator );\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Num( value, type );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn pl.error.type( \"evaluable\", str_indicator(obj.indicator), thread.__call_indicator );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Errors\r\n\t\terror: {\r\n\t\t\t\r\n\t\t\t// Existence error\r\n\t\t\texistence: function( type, object, indicator ) {\r\n\t\t\t\tif( typeof object === \"string\" )\r\n\t\t\t\t\tobject = str_indicator( object );\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"existence_error\", [new Term( type ), object] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Type error\r\n\t\t\ttype: function( expected, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"type_error\", [new Term( expected ), found] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Instantation error\r\n\t\t\tinstantiation: function( indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"instantiation_error\" ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Uninstantation error\r\n\t\t\tuninstantiation: function( found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"uninstantiation_error\", [new Term( found )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Domain error\r\n\t\t\tdomain: function( expected, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"domain_error\", [new Term( expected ), found]), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Representation error\r\n\t\t\trepresentation: function( flag, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"representation_error\", [new Term( flag )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Permission error\r\n\t\t\tpermission: function( operation, type, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"permission_error\", [new Term( operation ), new Term( type ), found] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Evaluation error\r\n\t\t\tevaluation: function( error, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"evaluation_error\", [new Term( error )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Syntax error\r\n\t\t\tsyntax: function( token, expected, last ) {\r\n\t\t\t\ttoken = token || {value: \"\", line: 0, column: 0, matches: [\"\"], start: 0};\r\n\t\t\t\tvar position = last && token.matches.length > 0 ? token.start + token.matches[0].length : token.start;\r\n\t\t\t\tvar found = last ? new Term(\"token_not_found\") : new Term(\"found\", [new Term(token.value.toString())]);\r\n\t\t\t\tvar info = new Term( \".\", [new Term( \"line\", [new Num(token.line+1)] ), new Term( \".\", [new Term( \"column\", [new Num(position)] ), new Term( \".\", [found, new Term( \"[]\", [] )] )] )] );\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"syntax_error\", [new Term( expected )] ), info] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Syntax error by predicate\r\n\t\t\tsyntax_by_predicate: function( expected, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"syntax_error\", [new Term( expected ) ] ), str_indicator( indicator )] );\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Warnings\r\n\t\twarning: {\r\n\t\t\t\r\n\t\t\t// Singleton variables\r\n\t\t\tsingleton: function( variables, rule, line ) {\r\n\t\t\t\tvar list = new Term( \"[]\" );\r\n\t\t\t\tfor( var i = variables.length-1; i >= 0; i-- )\r\n\t\t\t\t\tlist = new Term( \".\", [new Var(variables[i]), list] );\r\n\t\t\t\treturn new Term( \"warning\", [new Term( \"singleton_variables\", [list, str_indicator(rule)]), new Term(\".\",[new Term( \"line\", [ new Num( line, false ) ]), new Term(\"[]\")])] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Failed goal\r\n\t\t\tfailed_goal: function( goal, line ) {\r\n\t\t\t\treturn new Term( \"warning\", [new Term( \"failed_goal\", [goal]), new Term(\".\",[new Term( \"line\", [ new Num( line, false ) ]), new Term(\"[]\")])] );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t\r\n\t\t// Format of renamed variables\r\n\t\tformat_variable: function( id, variable ) {\r\n\t\t\tvar charcode = variable && variable.length > 0 ? codePointAt(variable, 1) : 0;\r\n\t\t\tif(variable === \"_\" || variable && variable[0] === \"_\" && (charcode === 95 || charcode >= 65 && charcode <= 90))\r\n\t\t\t\treturn \"__\" + id;\r\n\t\t\treturn \"_\" + id;\r\n\t\t},\r\n\t\t\r\n\t\t// Format of computed answers\r\n\t\tformat_answer: function( answer, thread, options ) {\r\n\t\t\tif( thread instanceof Session )\r\n\t\t\t\tthread = thread.thread;\r\n\t\t\tvar options = options ? options : {};\r\n\t\t\toptions.session = thread ? thread.session : undefined;\r\n\t\t\tif( pl.type.is_error( answer ) ) {\r\n\t\t\t\treturn \"uncaught exception: \" + answer.args[0].toString(options);\r\n\t\t\t} else if( answer === false ) {\r\n\t\t\t\treturn \"false\";\r\n\t\t\t} else if( answer === null ) {\r\n\t\t\t\treturn \"limit exceeded\";\r\n\t\t\t} else {\r\n\t\t\t\tvar i = 0;\r\n\t\t\t\tvar str = \"\";\r\n\t\t\t\tif( pl.type.is_substitution( answer ) ) {\r\n\t\t\t\t\tvar dom = answer.domain( true );\r\n\t\t\t\t\tfor( var link in answer.links ){\r\n\t\t\t\t\t\tif( !answer.links.hasOwnProperty(link) ) continue;\r\n\t\t\t\t\t\tif( pl.type.is_variable(answer.links[link]) ) {\r\n\t\t\t\t\t\t\tvar links = {};\r\n\t\t\t\t\t\t\tlinks[answer.links[link].id] = new Var(link);\r\n\t\t\t\t\t\t\tanswer = answer.apply( new Substitution(links) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tanswer = answer.filter( function( id, value ) {\r\n\t\t\t\t\t\treturn !pl.type.is_variable( value ) ||\r\n\t\t\t\t\t\t\tpl.type.is_variable( value ) && answer.has_attributes( id ) ||\r\n\t\t\t\t\t\t\tindexOf( dom, value.id ) !== -1 && id !== value.id;\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t\tfor( var link in answer.links ) {\r\n\t\t\t\t\tif(!answer.links.hasOwnProperty(link))\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tif( pl.type.is_variable( answer.links[link] ) && link === answer.links[link].id ) {\r\n\t\t\t\t\t\tvar attrs = answer.attrs[link];\r\n\t\t\t\t\t\tfor( var module in attrs ) {\r\n\t\t\t\t\t\t\tif(!attrs.hasOwnProperty(module))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\tif( str !== \"\" )\r\n\t\t\t\t\t\t\t\tstr += \", \";\r\n\t\t\t\t\t\t\tstr += \"put_attr(\" + link + \", \" + module + \", \" + attrs[module].toString(options) + \")\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\tif( str !== \"\" )\r\n\t\t\t\t\t\t\tstr += \", \";\r\n\t\t\t\t\t\tstr += link.toString( options ) + \" = \" +\r\n\t\t\t\t\t\t\tanswer.links[link].toString( options, {priority: \"700\", class: \"xfx\", indicator: \"=/2\"}, \"right\" );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( i === 0 ) {\r\n\t\t\t\t\treturn \"true\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn str;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Flatten default errors\r\n\t\tflatten_error: function( error ) {\r\n\t\t\tif( !pl.type.is_error( error ) ) return null;\r\n\t\t\terror = error.args[0];\r\n\t\t\tvar obj = {};\r\n\t\t\tobj.type = error.args[0].id;\r\n\t\t\tobj.thrown = obj.type === \"syntax_error\" ? null : error.args[1].id;\r\n\t\t\tobj.expected = null;\r\n\t\t\tobj.found = null;\r\n\t\t\tobj.representation = null;\r\n\t\t\tobj.existence = null;\r\n\t\t\tobj.existence_type = null;\r\n\t\t\tobj.line = null;\r\n\t\t\tobj.column = null;\r\n\t\t\tobj.permission_operation = null;\r\n\t\t\tobj.permission_type = null;\r\n\t\t\tobj.evaluation_type = null;\r\n\t\t\tif( obj.type === \"type_error\" || obj.type === \"domain_error\" ) {\r\n\t\t\t\tobj.expected = error.args[0].args[0].id;\r\n\t\t\t\tobj.found = error.args[0].args[1].toString();\r\n\t\t\t} else if( obj.type === \"syntax_error\" ) {\r\n\t\t\t\tif( error.args[1].indicator === \"./2\" ) {\r\n\t\t\t\t\tobj.expected = error.args[0].args[0].id;\r\n\t\t\t\t\tobj.found = error.args[1].args[1].args[1].args[0];\r\n\t\t\t\t\tobj.found = obj.found.id === \"token_not_found\" ? obj.found.id : obj.found.args[0].id;\r\n\t\t\t\t\tobj.line = error.args[1].args[0].args[0].value;\r\n\t\t\t\t\tobj.column = error.args[1].args[1].args[0].args[0].value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tobj.thrown = error.args[1].id;\r\n\t\t\t\t}\r\n\t\t\t} else if( obj.type === \"permission_error\" ) {\r\n\t\t\t\tobj.found = error.args[0].args[2].toString();\r\n\t\t\t\tobj.permission_operation = error.args[0].args[0].id;\r\n\t\t\t\tobj.permission_type = error.args[0].args[1].id;\r\n\t\t\t} else if( obj.type === \"evaluation_error\" ) {\r\n\t\t\t\tobj.evaluation_type = error.args[0].args[0].id;\r\n\t\t\t} else if( obj.type === \"representation_error\" ) {\r\n\t\t\t\tobj.representation = error.args[0].args[0].id;\r\n\t\t\t} else if( obj.type === \"existence_error\" ) {\r\n\t\t\t\tobj.existence = error.args[0].args[1].toString();\r\n\t\t\t\tobj.existence_type = error.args[0].args[0].id;\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t},\r\n\t\t\r\n\t\t// Create new session\r\n\t\tcreate: function( limit ) {\r\n\t\t\treturn new pl.type.Session( limit );\r\n\t\t}\r\n\t\t\r\n\t};\r\n\r\n\t// Built-in predicates\r\n\tpl.builtin = new Module(\"system\", {\r\n\r\n\t\t// TERM AND GOAL EXPANSION\r\n\r\n\t\t// goal_expansion/2\r\n\t\t\"goal_expansion/2\": [\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\",\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\",\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\";\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\";\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"->\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\"->\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"catch\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"catch\", [new Var(\"X_\"),new Var(\"Y\"),new Var(\"Z_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Z\"),new Var(\"Z_\")]),new Term(\"=\", [new Var(\"Z_\"),new Var(\"Z\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X_\"),new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"Z\"),new Var(\"Z_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"\\\\+\", [new Var(\"X\")]),new Term(\"\\\\+\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"once\", [new Var(\"X\")]),new Term(\"once\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"findall\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"setof\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"bagof\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\")]),new Term(\"call\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\"[]\", [])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\"[]\", [])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\"[]\", [])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\"[]\", [])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\"[]\", [])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\"),new Var(\"A6\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\".\", [new Var(\"A6\"),new Term(\"[]\", [])])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\"),new Var(\"A6\"),new Var(\"A7\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\".\", [new Var(\"A6\"),new Term(\".\", [new Var(\"A7\"),new Term(\"[]\", [])])])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])]))\r\n\t\t],\r\n\r\n\r\n\r\n\t\t// SYSTEM PREDICATES ($)\r\n\r\n\t\t// '$push_global_stack'/2\r\n\t\t\"$push_global_stack/2\": function(thread, point, atom) {\r\n\t\t\tvar stack = atom.args[0], value = atom.args[1];\r\n\t\t\tif(!pl.type.is_variable(stack)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.push_global_stack(stack.id, value);\r\n\t\t\t\tthread.success(point);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// '$flush_global_stack'/3\r\n\t\t\"$flush_global_stack/3\": function(thread, point, atom) {\r\n\t\t\tvar stack = atom.args[0], list = atom.args[1], tail = atom.args[2];\r\n\t\t\tif(!pl.type.is_variable(stack)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar values = thread.flush_global_stack(stack.id, tail);\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [list, values])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// '$free_variable_set'/3\r\n\t\t\"$free_variable_set/3\": function(thread, point, atom) {\r\n\t\t\tvar goal_in = atom.args[0], goal_out = atom.args[1], vars = atom.args[2];\r\n\t\t\tvar bv = [];\r\n\t\t\tvar pointer = goal_in;\r\n\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"^/2\") {\r\n\t\t\t\tbv = bv.concat(pointer.args[0].variables());\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar gv = pointer.variables();\r\n\t\t\tvar fv = arrayToList(map(difference(gv, bv), function(v) {\r\n\t\t\t\treturn new Var(v);\r\n\t\t\t}));\r\n\t\t\tthread.prepend([\r\n\t\t\t\tnew State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"=\", [goal_out, pointer]),\r\n\t\t\t\t\t\tnew Term(\"=\", [vars, fv]) \r\n\t\t\t\t\t])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)\r\n\t\t\t]);\r\n\t\t},\r\n\r\n\t\t// '$member'/2\r\n\t\t\"$member/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Term(\".\", [new pl.type.Var(\"X\"),new pl.type.Var(\"_\")])]), null),\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Term(\".\", [new pl.type.Var(\"_\"),new pl.type.Var(\"Xs\")])]), new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Var(\"Xs\")]))\r\n\t\t],\r\n\r\n\t\t// '$bind_bagof_keys/2'/2\r\n\t\t\"$bind_bagof_keys/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Term(\"[]\", []),new pl.type.Var(\"_\")]), null),\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Term(\".\", [new pl.type.Term(\"-\", [new pl.type.Var(\"Key\"),new pl.type.Var(\"_\")]),new pl.type.Var(\"Bag\")]),new pl.type.Var(\"Vars\")]), new pl.type.Term(\",\", [new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Key\"),new pl.type.Var(\"Vars\"),new pl.type.Var(\"_\")]),new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Bag\"),new pl.type.Var(\"Vars\")])]))\r\n\t\t],\r\n\r\n\t\t// '$findall'/4\r\n\t\t\"$findall/4\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$findall\", [new pl.type.Var(\"Template0\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Instances\"),new pl.type.Var(\"Tail\")]), new pl.type.Term(\";\", [new pl.type.Term(\",\", [new pl.type.Term(\"copy_term\", [new pl.type.Term(\"-\", [new pl.type.Var(\"Template0\"),new pl.type.Var(\"Goal0\")]),new pl.type.Term(\"-\", [new pl.type.Var(\"Template1\"),new pl.type.Var(\"Goal1\")])]),new pl.type.Term(\",\", [new pl.type.Term(\"call\", [new pl.type.Var(\"Goal1\")]),new pl.type.Term(\",\", [new pl.type.Term(\"copy_term\", [new pl.type.Var(\"Template1\"),new pl.type.Var(\"Template2\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$push_global_stack\", [new pl.type.Var(\"Var\"),new pl.type.Var(\"Template2\")]),new pl.type.Term(\"false\", [])])])])]),new pl.type.Term(\"$flush_global_stack\", [new pl.type.Var(\"Var\"),new pl.type.Var(\"Instances\"),new pl.type.Var(\"Tail\")])]))\r\n\t\t],\r\n\r\n\t\t// '$bagof'/3\r\n\t\t\"$bagof/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bagof\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Answer\")]), new pl.type.Term(\",\", [new pl.type.Term(\"$free_variable_set\", [new pl.type.Term(\"^\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"FV\")]),new pl.type.Term(\",\", [new pl.type.Term(\"findall\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Template\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"Answers\"),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\",\", [new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"_\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keygroup\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"KeyGroups\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keysort\", [new pl.type.Var(\"KeyGroups\"),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\"$member\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Answer\")]),new pl.type.Var(\"KeySorted\")])])])])])]))\r\n\t\t],\r\n\r\n\t\t// '$setof'/3\r\n\t\t\"$setof/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$setof\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Answer\")]), new pl.type.Term(\",\", [new pl.type.Term(\"$free_variable_set\", [new pl.type.Term(\"^\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"FV\")]),new pl.type.Term(\",\", [new pl.type.Term(\"findall\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Template\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"Answers\"),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\",\", [new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"_\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keygroup\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"KeyGroups\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keysort\", [new pl.type.Var(\"KeyGroups\"),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$member\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Unsorted\")]),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\"sort\", [new pl.type.Var(\"Unsorted\"),new pl.type.Var(\"Answer\")])])])])])])]))\r\n\t\t],\r\n\r\n\t\t// '$if/3'\r\n\t\t\"$if/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$if\", [new pl.type.Var(\"If\"),new pl.type.Var(\"Then\"),new pl.type.Var(\"Else\")]), new pl.type.Term(\";\", [new pl.type.Term(\",\", [new pl.type.Term(\"call\", [new pl.type.Var(\"If\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$push_global_stack\", [new pl.type.Var(\"Stack\"),new pl.type.Var(\"_\")]),new pl.type.Term(\"call\", [new pl.type.Var(\"Then\")])])]),new pl.type.Term(\",\", [new pl.type.Term(\"$flush_global_stack\", [new pl.type.Var(\"Stack\"),new pl.type.Term(\"[]\", []),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\"call\", [new pl.type.Var(\"Else\")])])]))\r\n\t\t],\r\n\r\n\r\n\t\t// ATTRIBUTED VARIABLES\r\n\t\t\r\n\t\t//put_attr/3\r\n\t\t\"put_attr/3\": function( thread, point, atom ) {\r\n\t\t\tvar variable = atom.args[0], module = atom.args[1], value = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable(variable) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"variable\", variable, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom(module) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", module, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar subs = point.substitution.set_attribute( variable.id, module, value );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace(null), subs, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// get_attr/3\r\n\t\t\"get_attr/3\": function( thread, point, atom ) {\r\n\t\t\tvar variable = atom.args[0], module = atom.args[1], value = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable(variable) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"variable\", variable, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom(module) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", module, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar attr = point.substitution.get_attribute( variable.id, module );\r\n\t\t\t\tif( attr ) {\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term(\"=\", [value, attr]) ),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t\r\n\t\t// INPUT AND OUTPUT\r\n\t\t\r\n\t\t// op/3\r\n\t\t\"op/3\": function( thread, point, atom ) {\r\n\t\t\tvar priority = atom.args[0], type = atom.args[1], operators = atom.args[2];\r\n\t\t\tif(pl.type.is_atom(operators))\r\n\t\t\t\toperators = new Term(\".\", [operators, new Term(\"[]\")]);\r\n\t\t\tif( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( priority ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( type ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", type, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_empty_list( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operators, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar pointer = operators;\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tvar operator = pointer.args[0];\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\tif( pl.type.is_variable( operator ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_atom( operator ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( priority.value < 0 || priority.value > 1200 ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \",\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"{}\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"[]\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"|\" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"].indexOf( type.id ) === -1 ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"operator_specifier\", type, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar fix = { prefix: null, infix: null, postfix: null };\r\n\t\t\t\t\t\tfor( var p in thread.session.__operators ) {\r\n\t\t\t\t\t\t\tif(!thread.session.__operators.hasOwnProperty(p)) continue;\r\n\t\t\t\t\t\t\tvar classes = thread.session.__operators[p][operator.id];\r\n\t\t\t\t\t\t\tif( classes ) {\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"fx\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fx\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"fy\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fy\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"xf\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"yf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"yf\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfx\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfy\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfy\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"yfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"yfx\" }; }\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar current_class;\r\n\t\t\t\t\t\tswitch( type.id ) {\r\n\t\t\t\t\t\t\tcase \"fy\": case \"fx\": current_class = \"prefix\"; break;\r\n\t\t\t\t\t\t\tcase \"yf\": case \"xf\": current_class = \"postfix\"; break;\r\n\t\t\t\t\t\t\tdefault: current_class = \"infix\"; break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(fix.infix && current_class === \"postfix\" || fix.postfix && current_class === \"infix\") {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif( fix[current_class] ) {\r\n\t\t\t\t\t\t\t\tremove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type );\r\n\t\t\t\t\t\t\t\tif( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) {\r\n\t\t\t\t\t\t\t\t\tdelete thread.session.__operators[fix[current_class].priority][operator.id];\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif( priority.value > 0 ) {\r\n\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {};\r\n\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = [];\r\n\t\t\t\t\t\t\t\tthread.session.__operators[priority.value][operator.id].push( type.id );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_op/3\r\n\t\t\"current_op/3\": function( thread, point, atom ) {\r\n\t\t\tvar priority = atom.args[0], specifier = atom.args[1], operator = atom.args[2];\r\n\t\t\tvar points = [];\r\n\t\t\tif( !pl.type.is_variable( priority ) && !pl.type.is_integer( priority ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( priority ) && ( priority.value < 0 || priority.value > 1200 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( specifier ) && !pl.type.is_atom( specifier ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", specifier, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_atom( specifier ) && indexOf( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"], specifier.id ) === -1 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"operator_specifier\", specifier, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( operator ) && !pl.type.is_atom( operator ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tfor( var p in thread.session.__operators )\r\n\t\t\t\t\tfor( var o in thread.session.__operators[p] )\r\n\t\t\t\t\t\tfor( var i = 0; i < thread.session.__operators[p][o].length; i++ )\r\n\t\t\t\t\t\t\tpoints.push( new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\t\t\t\tnew Term( \",\", [\r\n\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Num( p, false ), priority] ),\r\n\t\t\t\t\t\t\t\t\t\tnew Term( \",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Term( thread.session.__operators[p][o][i], [] ), specifier] ),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Term( o, [] ), operator] )\r\n\t\t\t\t\t\t\t\t\t\t] )\r\n\t\t\t\t\t\t\t\t\t] )\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t) );\r\n\t\t\t\tthread.prepend( points );\r\n\t\t\t}\r\n\t\t},\r\n\t\r\n\r\n\r\n\t\t// LOGIC AND CONTROL STRUCTURES\r\n\t\r\n\t\t// ;/2 (disjunction)\r\n\t\t\";/2\": function(thread, point, atom) {\r\n\t\t\tvar left = atom.args[0], right = atom.args[1];\r\n\t\t\tvar context_left = left.args[0];\r\n\t\t\tvar free_left = left.indicator === \":/2\" ? left.args[1] : left;\r\n\t\t\t// if then else\r\n\t\t\tif(pl.type.is_term(free_left) && free_left.indicator === \"->/2\") {\r\n\t\t\t\tvar cond = left.indicator === \":/2\" ? new Term(\":\", [context_left, new Term(\"call\", [free_left.args[0]])]) : free_left.args[0];\r\n\t\t\t\tvar then = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[1]]) : free_left.args[1];\r\n\t\t\t\tvar otherwise = right;\r\n\t\t\t\tvar goal_fst = point.goal.replace(new Term( \",\", [cond, new Term(\",\", [new Term(\"!\"), then])] ) );\r\n\t\t\t\tvar goal_snd = point.goal.replace(new Term( \",\", [new Term(\"!\"), otherwise]));\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(goal_fst, point.substitution, point),\r\n\t\t\t\t\tnew State(goal_snd, point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t// soft-cut\r\n\t\t\t} else if(pl.type.is_term(free_left) && free_left.indicator === \"*->/2\") {\r\n\t\t\t\tvar cond = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[0]]) : free_left.args[0];\r\n\t\t\t\tvar then = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[1]]) : free_left.args[1];\r\n\t\t\t\tvar otherwise = right;\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$if\", [cond, then, otherwise])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t// otherwise\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(point.goal.replace(left), point.substitution, point),\r\n\t\t\t\t\tnew State(point.goal.replace(right), point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// !/0 (cut)\r\n\t\t\"!/0\": function( thread, point, atom ) {\r\n\t\t\tvar parent_cut, last_cut, states = [];\r\n\t\t\tparent_cut = point;\r\n\t\t\tlast_cut = null;\r\n\t\t\twhile( parent_cut.parent !== null && parent_cut.parent.goal.search( atom ) ) {\r\n\t\t\t\tlast_cut = parent_cut;\r\n\t\t\t\tparent_cut = parent_cut.parent;\r\n\t\t\t\tif(parent_cut.goal !== null) {\r\n\t\t\t\t\tvar selected = parent_cut.goal.select();\r\n\t\t\t\t\tif(selected && selected.indicator === \":/2\")\r\n\t\t\t\t\t\tselected = selected.args[1];\r\n\t\t\t\t\tif( selected && selected.id === \"call\" && selected.search(atom) ) {\r\n\t\t\t\t\t\tparent_cut = last_cut;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar setup_call_cleanup = null;\r\n\t\t\tfor( var i = thread.points.length-1; i >= 0; i-- ) {\r\n\t\t\t\tvar state = thread.points[i];\r\n\t\t\t\tvar node = state.parent;\r\n\t\t\t\twhile( node !== null && node !== parent_cut.parent ) {\r\n\t\t\t\t\tnode = node.parent;\r\n\t\t\t\t}\r\n\t\t\t\tif( node === null && node !== parent_cut.parent )\r\n\t\t\t\t\tstates.push( state );\r\n\t\t\t\telse if(state.setup_call_cleanup_goal)\r\n\t\t\t\t\tsetup_call_cleanup = state.setup_call_cleanup_goal\r\n\t\t\t}\r\n\t\t\tthread.points = states.reverse();\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(setup_call_cleanup),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\t\t\r\n\t\t// \\+ (negation)\r\n\t\t\"\\\\+/1\": function( thread, point, atom ) {\r\n\t\t\tvar goal = atom.args[0];\r\n\t\t\tif( pl.type.is_variable( goal ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_callable( goal ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"callable\", goal, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// TRANSPARENT VERSION OF THE NEGATION\r\n\t\t\t\t/*var neg_thread;\r\n\t\t\t\tif(point.negation_thread) {\r\n\t\t\t\t\tneg_thread = point.negation_thread;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tneg_thread = new Thread( thread.session );\r\n\t\t\t\t\tneg_thread.add_goal( goal );\r\n\t\t\t\t\tpoint.negation_thread = neg_thread;\r\n\t\t\t\t}\r\n\t\t\t\tneg_thread.answer( function( answer ) {\r\n\t\t\t\t\tif(answer === false) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t} else if(pl.type.is_error( answer )) {\r\n\t\t\t\t\t\tthread.throw_error( answer.args[0] );\r\n\t\t\t\t\t} else if(answer === null) {\r\n\t\t\t\t\t\tthread.prepend( [point] );\r\n\t\t\t\t\t\tthread.current_limit = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.again( answer !== null );\r\n\t\t\t\t} );\r\n\t\t\t\treturn true;*/\r\n\t\t\t\t\r\n\t\t\t\t// '\\+'(X) :- call(X), !, fail.\r\n\t\t\t\t// '\\+'(_).\r\n\t\t\t\tthread.prepend( [\r\n\t\t\t\t\tnew State( point.goal.replace( new Term( \",\", [new Term( \",\", [ new Term( \"call\", [goal] ), new Term( \"!\", [] ) ] ), new Term( \"fail\", [] ) ] ) ), point.substitution, point ),\r\n\t\t\t\t\tnew State( point.goal.replace( null ), point.substitution, point )\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ->/2 (implication)\r\n\t\t\"->/2\": function( thread, point, atom ) {\r\n\t\t\tvar cond = atom.args[0], then = atom.args[1];\r\n\t\t\tvar goal = point.goal.replace(new Term(\",\", [\r\n\t\t\t\tnew Term(\"call\", [cond]),\r\n\t\t\t\tnew Term(\",\", [new Term(\"!\"), then])\r\n\t\t\t]));\r\n\t\t\tthread.prepend( [new State( goal, point.substitution, point )] );\r\n\t\t},\r\n\r\n\t\t// *->/2 (soft-cut)\r\n\t\t\"*->/2\": function(thread, point, atom) {\r\n\t\t\tvar cond = atom.args[0], then = atom.args[1];\r\n\t\t\tvar goal = point.goal.replace(new Term(\",\", [\r\n\t\t\t\tnew Term(\"call\", [cond]), then]));\r\n\t\t\tthread.prepend([new State(goal, point.substitution, point)]);\r\n\t\t},\r\n\t\t\r\n\t\t// fail/0\r\n\t\t\"fail/0\": function( _1, _2, _3 ) {},\r\n\t\t\r\n\t\t// false/0\r\n\t\t\"false/0\": function( _1, _2, _3 ) {},\r\n\t\t\r\n\t\t// true/0\r\n\t\t\"true/0\": function( thread, point, _ ) {\r\n\t\t\tthread.success( point );\r\n\t\t},\r\n\t\t\r\n\t\t// call/1..8\r\n\t\t\"call/1\": callN(1),\r\n\t\t\"call/2\": callN(2),\r\n\t\t\"call/3\": callN(3),\r\n\t\t\"call/4\": callN(4),\r\n\t\t\"call/5\": callN(5),\r\n\t\t\"call/6\": callN(6),\r\n\t\t\"call/7\": callN(7),\r\n\t\t\"call/8\": callN(8),\r\n\t\t\r\n\t\t// once/1\r\n\t\t\"once/1\": function( thread, point, atom ) {\r\n\t\t\tvar goal = atom.args[0];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \",\", [new Term( \"call\", [goal] ), new Term( \"!\", [] )] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// forall/2\r\n\t\t\"forall/2\": function( thread, point, atom ) {\r\n\t\t\tvar generate = atom.args[0], test = atom.args[1];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"\\\\+\", [new Term( \",\", [new Term( \"call\", [generate] ), new Term( \"\\\\+\", [new Term( \"call\", [test] )] )] )] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// repeat/0\r\n\t\t\"repeat/0\": function( thread, point, _ ) {\r\n\t\t\tthread.prepend( [new State( point.goal.replace( null ), point.substitution, point ), point] );\r\n\t\t},\r\n\r\n\t\t// EXCEPTIONS\r\n\t\t\r\n\t\t// throw/1\r\n\t\t\"throw/1\": function( thread, point, atom ) {\r\n\t\t\tvar error = atom.args[0];\r\n\t\t\tif(pl.type.is_variable(error)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(thread.level.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tfor(var i = 0; i < thread.points.length; i++) {\r\n\t\t\t\t\tvar state = thread.points[i];\r\n\t\t\t\t\tif(state.setup_call_cleanup_catch) {\r\n\t\t\t\t\t\tthread.points = [new State(\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"catch\", [\r\n\t\t\t\t\t\t\t\t\tstate.setup_call_cleanup_catch,\r\n\t\t\t\t\t\t\t\t\tnew Var(\"_\"),\r\n\t\t\t\t\t\t\t\t\tnew Term(\"throw\", [error])\r\n\t\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\t\tnew Term(\"throw\", [error])\r\n\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t)];\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tthread.throw_error(error);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// catch/3\r\n\t\t\"catch/3\": function(thread, point, atom) {\r\n\t\t\tvar goal = atom.args[0], catcher = atom.args[1], recover = atom.args[2];\r\n\t\t\tvar nthread;\r\n\t\t\tif(!point.catch) {\r\n\t\t\t\tnthread = new Thread(thread.session);\r\n\t\t\t\tnthread.debugger = thread.debugger;\r\n\t\t\t\tnthread.format_success = function(state) { return state.substitution; };\r\n\t\t\t\tnthread.format_error = function(state) { return state.goal; };\r\n\t\t\t\tnthread.add_goal(goal, true, point);\r\n\t\t\t\tpoint.catch = nthread;\r\n\t\t\t} else {\r\n\t\t\t\tnthread = point.catch;\r\n\t\t\t}\r\n\t\t\tvar callback = function(answer) {\r\n\t\t\t\tif(pl.type.is_error(answer)) {\r\n\t\t\t\t\tvar occurs_check = thread.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\tvar state = new State();\r\n\t\t\t\t\tvar mgu = pl.unify(answer.args[0], catcher, occurs_check);\r\n\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\tstate.substitution = point.substitution.apply(mgu);\r\n\t\t\t\t\t\tstate.goal = point.goal.replace(recover).apply(mgu);\r\n\t\t\t\t\t\tstate.parent = point;\r\n\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(answer.args[0]);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(answer !== false && answer !== null) {\r\n\t\t\t\t\tvar state = answer === null ? [] : new State(\r\n\t\t\t\t\t\tpoint.goal.apply(answer).replace(null),\r\n\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t);\r\n\t\t\t\t\tthread.prepend([state, point]);\r\n\t\t\t\t} else if(answer === null) {\r\n\t\t\t\t\tthread.prepend([point]);\r\n\t\t\t\t\tif(thread.has_limit)\r\n\t\t\t\t\t\tthread.current_limit = 0;\r\n\t\t\t\t}\r\n\t\t\t\tthread.again(answer !== null);\r\n\t\t\t};\r\n\t\t\tnthread.answer(callback);\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t// call_cleanup/2\r\n\t\t\"call_cleanup/2\": function(thread, point, atom) {\r\n\t\t\tvar call = atom.args[0], cleanup = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(call) || pl.type.is_variable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(call)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", call, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", cleanup, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar nthread, callback;\r\n\t\t\t\tif(point.hasOwnProperty(\"setup_call_cleanup_thread\")) {\r\n\t\t\t\t\tnthread = point.setup_call_cleanup_thread;\r\n\t\t\t\t\tcallback = point.setup_call_cleanup_callback;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar goal = new Term(\"call\", [call]);\r\n\t\t\t\t\tnthread = new Thread(thread.session);\r\n\t\t\t\t\tnthread.add_goal(goal, true, point);\r\n\t\t\t\t\tcallback = function(answer) {\r\n\t\t\t\t\t\tif(answer === null) {\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal,\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tstate.setup_call_cleanup_thread = nthread;\r\n\t\t\t\t\t\t\tstate.setup_call_cleanup_callback = callback;\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else if(answer === false) {\r\n\t\t\t\t\t\t\tvar cleanup_and_fail = new Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup]),\r\n\t\t\t\t\t\t\t\tnew Term(\"fail\")\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(cleanup_and_fail),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else if(pl.type.is_error(answer)) {\r\n\t\t\t\t\t\t\tvar cleanup_and_throw = new Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup]),\r\n\t\t\t\t\t\t\t\tanswer\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(cleanup_and_throw),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif(nthread.points.length === 0) {\r\n\t\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup])\r\n\t\t\t\t\t\t\t\t\t).apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tvar state1 = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.apply(answer).replace(null),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tvar state2 = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal,\r\n\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_thread = nthread;\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_callback = callback;\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_goal = cleanup.apply(answer);\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_catch = cleanup;\r\n\t\t\t\t\t\t\t\tthread.prepend([state1, state2]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnthread.answer(callback);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// setup_call_cleanup/3\r\n\t\t\"setup_call_cleanup/3\": function(thread, point, atom) {\r\n\t\t\tvar setup = atom.args[0], call = atom.args[1], cleanup = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(setup) || pl.type.is_variable(call) || pl.type.is_variable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(setup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", setup, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(call)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", call, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", cleanup, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"once\", [setup]),\r\n\t\t\t\t\t\tnew Term(\"call_cleanup\", [call, cleanup])\r\n\t\t\t\t\t])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// UNIFICATION\r\n\t\t\r\n\t\t// =/2 (unification)\r\n\t\t\"=/2\": function( thread, point, atom ) {\r\n\t\t\tvar occurs_check = thread.get_flag( \"occurs_check\" ).indicator === \"true/0\";\r\n\t\t\tvar state = new State();\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], occurs_check );\r\n\t\t\tif( mgu !== null ) {\r\n\t\t\t\tstate.goal = point.goal.apply( mgu ).replace( null );\r\n\t\t\t\tstate.substitution = point.substitution.apply( mgu );\r\n\t\t\t\tstate.parent = point;\r\n\t\t\t\tthread.prepend( [state] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// unify_with_occurs_check/2\r\n\t\t\"unify_with_occurs_check/2\": function( thread, point, atom ) {\r\n\t\t\tvar state = new State();\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], true );\r\n\t\t\tif( mgu !== null ) {\r\n\t\t\t\tstate.goal = point.goal.apply( mgu ).replace( null );\r\n\t\t\t\tstate.substitution = point.substitution.apply( mgu );\r\n\t\t\t\tstate.parent = point;\r\n\t\t\t\tthread.prepend( [state] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// \\=/2\r\n\t\t\"\\\\=/2\": function( thread, point, atom ) {\r\n\t\t\tvar occurs_check = thread.get_flag( \"occurs_check\" ).indicator === \"true/0\";\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], occurs_check );\r\n\t\t\tif( mgu === null ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// subsumes_term/2\r\n\t\t/*\r\n\t\tsubsumes_term(General, Specific) :-\r\n\t\t\t\\+ \\+ (\r\n\t\t\tterm_variables(Specific, Vars1),\r\n\t\t\tunify_with_occurs_check(General, Specific),\r\n\t\t\tterm_variables(Vars1, Vars2),\r\n\t\t\tVars1 == Vars2\r\n\t\t).\r\n\t\t*/\r\n\t\t\"subsumes_term/2\": function( thread, point, atom ) {\r\n\t\t\tvar general = atom.args[0], specific = atom.args[1];\r\n\t\t\tvar vars1 = thread.next_free_variable();\r\n\t\t\tvar vars2 = thread.next_free_variable();\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"\\\\+\", [\r\n\t\t\t\t\tnew Term(\"\\\\+\", [\r\n\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\"term_variables\", [specific, vars1]),\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"unify_with_occurs_check\", [general, specific]),\r\n\t\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\t\tnew Term(\"term_variables\", [vars1, vars2]),\r\n\t\t\t\t\t\t\t\t\tnew Term(\"==\", [vars1, vars2])\r\n\t\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t])\r\n\t\t\t\t\t])\r\n\t\t\t\t])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\t\t\r\n\t\t// ALL SOLUTIONS\r\n\r\n\t\t// findall/3\r\n\t\t\"findall/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tvar tail = new Term(\"[]\", []);\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"findall\", [template, goal, instances, tail])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\r\n\t\t// findall/4\r\n\t\t\"findall/4\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2], tail = atom.args[3];\r\n\t\t\tvar proper_goal = goal;\r\n\t\t\tif(pl.type.is_term(goal) && goal.indicator === \":/2\")\r\n\t\t\t\tproper_goal = goal.args[1];\r\n\t\t\tif(pl.type.is_variable(proper_goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(proper_goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(tail) && !pl.type.is_list(tail)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", tail, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$findall\", [template, goal, instances, tail])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// bagof/3\r\n\t\t\"bagof/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error( pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$bagof\", [template, goal, instances])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// setof/3\r\n\t\t\"setof/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error( pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$setof\", [template, goal, instances])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TERM CREATION AND DECOMPOSITION\r\n\t\t\r\n\t\t// functor/3\r\n\t\t\"functor/3\": function( thread, point, atom ) {\r\n\t\t\tvar subs;\r\n\t\t\tvar term = atom.args[0], name = atom.args[1], arity = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( term ) && (pl.type.is_variable( name ) || pl.type.is_variable( arity )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( arity ) && !pl.type.is_integer( arity ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[2], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( name ) && !pl.type.is_atomic( name ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) && !pl.type.is_atom( name ) && pl.type.is_integer( arity ) && arity.value > 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) && pl.type.is_integer( arity ) && arity.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[2], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) ) {\r\n\t\t\t\tif( atom.args[2].value >= 0 ) {\r\n\t\t\t\t\tvar args = [];\r\n\t\t\t\t\tfor( var i = 0; i < arity.value; i++ )\r\n\t\t\t\t\t\targs.push( thread.next_free_variable() );\r\n\t\t\t\t\tvar functor = pl.type.is_number( name ) ? name : new Term( name.id, args );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [term, functor] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar id = pl.type.is_number( term ) ? term : new Term( term.id, [] );\r\n\t\t\t\tvar length = pl.type.is_number( term ) ? new Num( 0, false ) : new Num( term.args.length, false );\r\n\t\t\t\tvar goal = new Term( \",\", [new Term( \"=\", [id, name] ), new Term( \"=\", [length, arity] )] );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// arg/3\r\n\t\t\"arg/3\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) || pl.type.is_variable( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( atom.args[0].value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_compound( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"compound\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar n = atom.args[0].value;\r\n\t\t\t\tif( n > 0 && n <= atom.args[1].args.length ) {\r\n\t\t\t\t\tvar goal = new Term( \"=\", [atom.args[1].args[n-1], atom.args[2]] );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =../2 (univ)\r\n\t\t\"=../2\": function( thread, point, atom ) {\r\n\t\t\tvar list;\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) && (pl.type.is_variable( atom.args[1] )\r\n\t\t\t|| pl.type.is_non_empty_list( atom.args[1] ) && pl.type.is_variable( atom.args[1].args[0] )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_fully_list( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( atom.args[0] ) && pl.type.is_empty_list( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"non_empty_list\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tif( pl.type.is_term( atom.args[0] ) && atom.args[0].args.length > 0 ) {\r\n\t\t\t\t\tlist = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = atom.args[0].args.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist = new Term( \".\", [atom.args[0].args[i], list] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist = new Term( \".\", [new Term( atom.args[0].id ), list] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlist = new Term( \".\", [atom.args[0], new Term( \"[]\" )] );\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, atom.args[1]] ) ), point.substitution, point )] );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[1] ) ) {\r\n\t\t\t\tvar args = [];\r\n\t\t\t\tlist = atom.args[1].args[1];\r\n\t\t\t\twhile( list.indicator === \"./2\" ) {\r\n\t\t\t\t\targs.push( list.args[0] );\r\n\t\t\t\t\tlist = list.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( atom.args[0] ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( args.length === 0 && pl.type.is_compound( atom.args[1].args[0] ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atom.args[1].args[0], atom.indicator ) );\r\n\t\t\t\t} else if( args.length > 0 && (pl.type.is_compound( atom.args[1].args[0] ) || pl.type.is_number( atom.args[1].args[0] )) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[1].args[0], atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif( args.length === 0 ) {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom.args[1].args[0], atom.args[0]], point ) ), point.substitution, point )] );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( atom.args[1].args[0].id, args ), atom.args[0]] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// copy_term/2\r\n\t\t\"copy_term/2\": function(thread, point, atom) {\r\n\t\t\tvar original_term = atom.args[0], renamed_term = atom.args[1];\r\n\t\t\tthread.session.renamed_variables = {};\r\n\t\t\tvar new_term = original_term.rename(thread);\r\n\t\t\tthread.session.renamed_variables = {};\r\n\t\t\tthread.prepend([\r\n\t\t\t\tnew State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [renamed_term, new_term])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t},\r\n\t\t\r\n\t\t// term_variables/2\r\n\t\t\"term_variables/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Term\"),new pl.type.Var(\"Vars\")]), new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Term\"),new pl.type.Var(\"Vars\"),new pl.type.Term(\"[]\", [])]))\r\n\t\t],\r\n\r\n\t\t// term_variables/3\r\n\t\t\"term_variables/3\": function(thread, point, atom) {\r\n\t\t\tvar term = atom.args[0], vars = atom.args[1], tail = atom.args[2];\r\n\t\t\tif( !pl.type.is_fully_list( vars ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", vars, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar list = arrayToList(map(nub(term.variables()), function(v) {\r\n\t\t\t\t\treturn new Var(v);\r\n\t\t\t\t}), tail);\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [vars, list])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// numbervars/3\r\n\t\t\"numbervars/3\": function(thread, point, atom) {\r\n\t\t\tvar term = atom.args[0], start = atom.args[1], end = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(start)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_integer(start)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", start, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(end) && !pl.type.is_integer(end)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", end, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar variables = nub(term.variables());\r\n\t\t\t\tvar value = start.value;\r\n\t\t\t\tvar unif_body = new Term(\"true\");\r\n\t\t\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\t\t\tunif_body = new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"=\", [\r\n\t\t\t\t\t\t\tnew Var(variables[i]),\r\n\t\t\t\t\t\t\tnew Term(\"$VAR\", [new Num(value, false)])]),\r\n\t\t\t\t\t\t\tunif_body]);\r\n\t\t\t\t\tvalue++;\r\n\t\t\t\t}\r\n\t\t\t\tvar unif_end = new Term(\"=\", [end, new Num(value, false)]);\r\n\t\t\t\tif(pl.type.is_variable(end) || end.value === value) {\r\n\t\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [unif_body, unif_end])),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// CLAUSE RETRIEVAL AND INFORMATION\r\n\t\t\r\n\t\t// clause/2\r\n\t\t\"clause/2\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0], body = atom.args[1];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(head.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", head.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(body) && !pl.type.is_callable(body)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t} else if(head.indicator === \",/2\" || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\tthread.throw_error(pl.error.permission(\"access\", \"private_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t} else if(pl.type.is_module(get_module) && get_module.rules[head.indicator]) {\r\n\t\t\t\tif(get_module.is_public_predicate(head.indicator)) {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tif(typeof get_module.rules[head.indicator] === \"function\") {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor(var i = 0; i < get_module.rules[head.indicator].length; i++) {\r\n\t\t\t\t\t\tvar rule = get_module.rules[head.indicator][i];\r\n\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\trule = rule.rename(thread);\r\n\t\t\t\t\t\tif(rule.body === null)\r\n\t\t\t\t\t\t\trule.body = new Term(\"true\");\r\n\t\t\t\t\t\tvar goal = new Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\"=\", [rule.head, head]),\r\n\t\t\t\t\t\t\tnew Term(\"=\", [rule.body, body])\r\n\t\t\t\t\t\t]);\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(goal), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"access\", \"private_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_predicate/1\r\n\t\t\"current_predicate/1\": function(thread, point, atom) {\r\n\t\t\tvar indicator = atom.args[0];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(indicator) && indicator.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(indicator.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", indicator.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = indicator.args[0].id;\r\n\t\t\t\tindicator = indicator.args[1];\r\n\t\t\t} else {\r\n\t\t\t\tmodule_id = \"user\";\r\n\t\t\t}\r\n\t\t\tif(!pl.type.is_variable(indicator) && (!pl.type.is_compound(indicator) || indicator.indicator !== \"//2\")) {\r\n\t\t\t\tthread.throw_error(pl.error.type( \"predicate_indicator\", indicator, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable( indicator ) && !pl.type.is_variable(indicator.args[0]) && !pl.type.is_atom(indicator.args[0])) {\r\n\t\t\t\tthread.throw_error(pl.error.type( \"atom\", indicator.args[0], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(indicator) && !pl.type.is_variable(indicator.args[1]) && !pl.type.is_integer(indicator.args[1])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", indicator.args[1], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(indicator) && pl.type.is_integer(indicator.args[1]) && indicator.args[1].value < 0) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"not_less_than_zero\", indicator.args[1], atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\tfor(var prop in get_module.rules) {\r\n\t\t\t\t\t\tif(!get_module.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tvar predicate = str_indicator(prop);\r\n\t\t\t\t\t\tvar goal = new Term(\"=\", [predicate, indicator]);\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(goal), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// current_module/1\r\n\t\t\"current_module/1\": function(thread, point, atom) {\r\n\t\t\tvar module_id = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(module_id) && !pl.type.is_atom(module_id)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", module_id, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_variable(module_id)) {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tfor(var prop in thread.session.modules) {\r\n\t\t\t\t\t\tif(!thread.session.modules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tstates.push(new State(\r\n\t\t\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [module_id, new Term(prop)])),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(thread.session.modules.hasOwnProperty(module_id.id))\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// predicate_property/2\r\n\t\t\"predicate_property/2\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0], property = atom.args[1];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(head.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", head.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tif(!pl.type.is_variable(head) && !pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(property) && !pl.type.is_predicate_property(property)) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"predicate_property\", property, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar get_module = module_id ? thread.session.modules[module_id] : thread.session.modules.user;\r\n\t\t\t\tvar points = [];\r\n\t\t\t\t// all predicates\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\t// built-in predicates (built_in + static + native_code + meta_predicate?)\r\n\t\t\t\t\tif(!module_id) {\r\n\t\t\t\t\t\tfor(var prop in pl.builtin.rules) {\r\n\t\t\t\t\t\t\tif(!pl.builtin.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tvar indicator = str_indicator(prop);\r\n\t\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < indicator.args[1].value; i++)\r\n\t\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\t\tvar unif_head = new Term(indicator.args[0].id, args);\r\n\t\t\t\t\t\t\tvar current_properties = [\r\n\t\t\t\t\t\t\t\tnew Term(\"static\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"built_in\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"native_code\")\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t\tif(pl.builtin.meta_predicates.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\t\tpl.builtin.meta_predicates[prop]\r\n\t\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\t\t// all predicates, one property / all properties\r\n\t\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// user-defined predicates\r\n\t\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\t\tfor(var prop in get_module.rules) {\r\n\t\t\t\t\t\t\tif(!get_module.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tvar indicator = str_indicator(prop);\r\n\t\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < indicator.args[1].value; i++)\r\n\t\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\t\tvar unif_head = new Term(indicator.args[0].id, args);\r\n\t\t\t\t\t\t\tvar current_properties = [];\r\n\t\t\t\t\t\t\tif(thread.is_public_predicate(prop, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"dynamic\"));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"static\"));\r\n\t\t\t\t\t\t\tif(get_module.rules[prop] instanceof Function)\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"native_code\"));\r\n\t\t\t\t\t\t\tif(thread.is_multifile_predicate(prop, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"multifile\"));\r\n\t\t\t\t\t\t\tif(get_module.meta_predicates.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\t\tget_module.meta_predicates[prop]\r\n\t\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\t\t// all predicates, one property / all properties\r\n\t\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t// one predicate\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar builtin = !module_id && pl.type.is_builtin(head);\r\n\t\t\t\t\tvar predicate = builtin ? pl.builtin.rules[head.indicator] : get_module.rules[head.indicator];\r\n\t\t\t\t\tget_module = builtin ? pl.builtin : get_module;\r\n\t\t\t\t\tif(predicate) {\r\n\t\t\t\t\t\tvar current_properties;\r\n\t\t\t\t\t\tif(builtin) {\r\n\t\t\t\t\t\t\tcurrent_properties = [\r\n\t\t\t\t\t\t\t\tnew Term(\"static\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"built_in\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"native_code\")\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcurrent_properties = [];\r\n\t\t\t\t\t\t\tif(thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"dynamic\"));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"static\"));\r\n\t\t\t\t\t\t\tif(predicate instanceof Function)\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"native_code\"));\r\n\t\t\t\t\t\t\tif(thread.is_multifile_predicate(head.indicator, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"multifile\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(get_module.meta_predicates.hasOwnProperty(head.indicator))\r\n\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\tget_module.meta_predicates[head.indicator]\r\n\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\tfor(var i = 0; i < head.args.length; i++)\r\n\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\tvar unif_head = new Term(head.id, args);\r\n\t\t\t\t\t\t// one predicate, one property / all properties\r\n\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(points);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// listing/0\r\n\t\t\"listing/0\": function( thread, point, atom ) {\r\n\t\t\tvar context_module = atom.context_module ? atom.context_module : \"user\";\r\n\t\t\tvar rules = {};\r\n\t\t\tif(pl.type.is_module(thread.session.modules[context_module])) {\r\n\t\t\t\trules = thread.session.modules[context_module].rules;\r\n\t\t\t}\r\n\t\t\tvar str = \"\";\r\n\t\t\tfor(var indicator in rules) {\r\n\t\t\t\tif(!rules.hasOwnProperty(indicator)) continue;\r\n\t\t\t\tvar predicate = rules[indicator];\r\n\t\t\t\tstr += \"% \" + indicator + \"\\n\";\r\n\t\t\t\tif(predicate instanceof Array) {\r\n\t\t\t\t\tfor(var i = 0; i < predicate.length; i++)\r\n\t\t\t\t\t\tstr += predicate[i].toString( {session: thread.session} ) + \"\\n\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstr += \"/*\\n\" + predicate.toString() + \"\\n*/\";\r\n\t\t\t\t}\r\n\t\t\t\tstr += \"\\n\";\r\n\t\t\t}\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"write\", [new Term(str, [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// listing/1\r\n\t\t\"listing/1\": function( thread, point, atom ) {\r\n\t\t\tvar indicator = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(indicator.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = indicator.args[0].id;\r\n\t\t\t\tindicator = indicator.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(indicator)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_predicate_indicator(indicator)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar rules = {};\r\n\t\t\t\tif(pl.type.is_module(thread.session.modules[context_module])) {\r\n\t\t\t\t\trules = thread.session.modules[context_module].rules;\r\n\t\t\t\t}\r\n\t\t\t\tvar str = \"\";\r\n\t\t\t\tvar str_indicator = indicator.args[0].id + \"/\" + indicator.args[1].value;\r\n\t\t\t\tif(rules.hasOwnProperty(str_indicator)) {\r\n\t\t\t\t\tvar predicate = rules[str_indicator];\r\n\t\t\t\t\tif(predicate instanceof Array) {\r\n\t\t\t\t\t\tfor(var i = 0; i < predicate.length; i++)\r\n\t\t\t\t\t\t\tstr += predicate[i].toString( {session: thread.session} ) + \"\\n\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstr += \"/*\\n\" + predicate.toString() + \"\\n*/\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstr += \"\\n\";\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"write\", [new Term(str, [])])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// LIST OPERATIONS\r\n\r\n\t\t// sort/2\r\n\t\t\"sort/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar arr = [];\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tarr.push( pointer.args[0] );\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar sorted_arr = arr.sort( pl.compare );\r\n\t\t\t\t\tfor( var i = sorted_arr.length-1; i > 0; i-- ) {\r\n\t\t\t\t\t\tif( sorted_arr[i].equals(sorted_arr[i-1]) )\r\n\t\t\t\t\t\t\tsorted_arr.splice(i,1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar sorted_list = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = sorted_arr.length-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tsorted_list = new Term( \".\", [sorted_arr[i], sorted_list] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [sorted_list, expected] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// keysort/2\r\n\t\t\"keysort/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar arr = [];\r\n\t\t\t\tvar elem;\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\telem = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( elem ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_term( elem ) || elem.indicator !== \"-/2\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"pair\", elem, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telem.args[0].pair = elem.args[1];\r\n\t\t\t\t\tarr.push( elem.args[0] );\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_variable(expected)) {\r\n\t\t\t\t\t\tvar pointer = expected;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== \"-/2\")) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"pair\", head, atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar sorted_arr = arr.sort( pl.compare );\r\n\t\t\t\t\tvar sorted_list = new pl.type.Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = sorted_arr.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tsorted_list = new pl.type.Term( \".\", [new pl.type.Term( \"-\", [sorted_arr[i], sorted_arr[i].pair] ), sorted_list] );\r\n\t\t\t\t\t\tdelete sorted_arr[i].pair;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new pl.type.State( point.goal.replace( new pl.type.Term( \"=\", [sorted_list, expected] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// keygroup\r\n\t\t\"keygroup/2\": function(thread, point, atom) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(list)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(expected) && !pl.type.is_fully_list(expected)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", expected, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar keys = [];\r\n\t\t\t\tvar values = [];\r\n\t\t\t\tvar pointer = list\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tvar elem = pointer.args[0];\r\n\t\t\t\t\tif(pl.type.is_variable(elem)) {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(!pl.type.is_term(elem) || elem.indicator !== \"-/2\") {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.type(\"pair\", elem, atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar key = elem.args[0], value = elem.args[1];\r\n\t\t\t\t\tvar index = -1;\r\n\t\t\t\t\tfor(var i = 0; i < keys.length; i++) {\r\n\t\t\t\t\t\tif(pl.compare(key, keys[i]) === 0) {\r\n\t\t\t\t\t\t\tindex = i;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(index === -1) {\r\n\t\t\t\t\t\tindex = keys.length;\r\n\t\t\t\t\t\tkeys.push(key);\r\n\t\t\t\t\t\tvalues.push([]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalues[index].push(value);\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"list\", list, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_variable(expected)) {\r\n\t\t\t\t\t\tvar pointer = expected;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== \"-/2\")) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"pair\", head, atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"list\", expected, atom.indicator));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgroup = new Term(\"[]\", []);\r\n\t\t\t\t\tfor(var i = keys.length-1; i >= 0; i--)\r\n\t\t\t\t\t\tgroup = new Term(\".\", [new Term(\"-\", [keys[i], arrayToList(values[i])]), group]);\r\n\t\t\t\t\tthread.prepend([\r\n\t\t\t\t\t\tnew State(\r\n\t\t\t\t\t\t\tpoint.goal.replace(new pl.type.Term(\"=\", [expected, group])),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// CLAUSE CREATION AND DESTRUCTION\r\n\t\t\r\n\t\t// asserta/1\r\n\t\t\"asserta/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(clause) && clause.indicator === \":/2\") {\r\n\t\t\t\tmodule_id = clause.args[0].id;\r\n\t\t\t\tclause = clause.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, get_module;\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = body_conversion(clause.args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = null;\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else if(body !== null && !pl.type.is_callable(body)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t\t} else if((!pl.type.is_module(thread.session.modules[module_id])\r\n\t\t\t\t|| thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id])) {\r\n\t\t\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: thread.session});\r\n\t\t\t\t\t\tthread.session.modules[module_id] = get_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tget_module = thread.session.modules[module_id];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(get_module.rules[head.indicator] === undefined)\r\n\t\t\t\t\t\tget_module.rules[head.indicator] = [];\r\n\t\t\t\t\tget_module.public_predicates[head.indicator] = true;\r\n\t\t\t\t\tget_module.rules[head.indicator] = [new Rule(head, body, true)].concat(get_module.rules[head.indicator]);\r\n\t\t\t\t\tget_module.update_indices_predicate(head.indicator);\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// assertz/1\r\n\t\t\"assertz/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(clause) && clause.indicator === \":/2\") {\r\n\t\t\t\tmodule_id = clause.args[0].id;\r\n\t\t\t\tclause = clause.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, get_module;\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = body_conversion(clause.args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = null;\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else if(body !== null && !pl.type.is_callable(body)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t\t} else if((!pl.type.is_module(thread.session.modules[module_id])\r\n\t\t\t\t|| thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id])) {\r\n\t\t\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: thread.session});\r\n\t\t\t\t\t\tthread.session.modules[module_id] = get_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tget_module = thread.session.modules[module_id];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(get_module.rules[head.indicator] === undefined)\r\n\t\t\t\t\t\tget_module.rules[head.indicator] = [];\r\n\t\t\t\t\tget_module.public_predicates[head.indicator] = true;\r\n\t\t\t\t\tget_module.rules[head.indicator].push(new Rule(head, body, true));\r\n\t\t\t\t\tget_module.update_indices_predicate(head.indicator);\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// retract/1\r\n\t\t\"retract/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, module_atom, module_id;\r\n\t\t\t\tif(clause.indicator === \":/2\") {\r\n\t\t\t\t\tmodule_atom = clause.args[0];\r\n\t\t\t\t\tclause = clause.args[1];\r\n\t\t\t\t\tif(!pl.type.is_atom(module_atom)) {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", module_atom, atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmodule_atom = new Term(\"user\");\r\n\t\t\t\t}\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = clause.args[1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = new Term(\"true\");\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = module_atom.id;\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(!pl.type.is_module(get_module))\r\n\t\t\t\t\treturn;\r\n\t\t\t\tif(!point.retract) {\r\n\t\t\t\t\tif(thread.is_public_predicate(head.indicator, module_id)\r\n\t\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\t\tif(get_module.rules[head.indicator] !== undefined) {\r\n\t\t\t\t\t\t\tvar states = [];\r\n\t\t\t\t\t\t\tif(typeof get_module.rules[head.indicator] === \"function\") {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfor(var i = 0; i < get_module.rules[head.indicator].length; i++) {\r\n\t\t\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\t\t\tvar orule = get_module.rules[head.indicator][i];\r\n\t\t\t\t\t\t\t\tvar rule = orule.rename(thread);\r\n\t\t\t\t\t\t\t\tif(rule.body === null)\r\n\t\t\t\t\t\t\t\t\trule.body = new Term(\"true\", []);\r\n\t\t\t\t\t\t\t\tvar occurs_check = thread.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\t\t\t\tvar mgu = pl.unify(new Term(\",\", [head, body]), new Term(\",\", [rule.head, rule.body]), occurs_check);\r\n\t\t\t\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\":\", [\r\n\t\t\t\t\t\t\t\t\t\t\t\tmodule_atom,\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"retract\", [new Term(\":-\", [head, body])]),\r\n\t\t\t\t\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, rule.head]),\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [body, rule.body])\r\n\t\t\t\t\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t\t\t\t\t])), point.substitution, point);\r\n\t\t\t\t\t\t\t\t\tstate.retract = orule;\r\n\t\t\t\t\t\t\t\t\tstates.push(state);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tretract(thread, point, head.indicator, point.retract, get_module);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// retractall/1\r\n\t\t\"retractall/1\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!thread.is_public_predicate(head.indicator, context_module)\r\n\t\t\t|| head.indicator === \",/2\"\r\n\t\t\t|| thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(point.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\":\", [\r\n\t\t\t\t\t\t\tnew Term(context_module),\r\n\t\t\t\t\t\t\tnew Term(\"retract\", [new pl.type.Term(\":-\", [head, new Var(\"_\")])])\r\n\t\t\t\t\t\t]),\r\n\t\t\t\t\t\tnew Term(\"fail\", [])\r\n\t\t\t\t\t])), point.substitution, point),\r\n\t\t\t\t\tnew State(point.goal.replace(null), point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// abolish/1\r\n\t\t\"abolish/1\": function(thread, point, atom) {\r\n\t\t\tvar predicate = atom.args[0];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(predicate) && predicate.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(predicate.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", predicate.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = predicate.args[0].id;\r\n\t\t\t\tpredicate = predicate.args[1];\r\n\t\t\t} else {\r\n\t\t\t\tmodule_id = \"user\";\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(predicate) || pl.type.is_term(predicate) && predicate.indicator === \"//2\"\r\n\t\t\t&& (pl.type.is_variable(predicate.args[0]) || pl.type.is_variable(predicate.args[1]))) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_term(predicate) || predicate.indicator !== \"//2\") {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"predicate_indicator\", predicate, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_atom(predicate.args[0])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", predicate.args[0], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_integer(predicate.args[1])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", predicate.args[1], atom.indicator));\r\n\t\t\t} else if(predicate.args[1].value < 0) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"not_less_than_zero\", predicate.args[1], atom.indicator));\r\n\t\t\t} else if(pl.type.is_number(thread.get_flag(\"max_arity\")) && predicate.args[1].value > thread.get_flag(\"max_arity\").value) {\r\n\t\t\t\tthread.throw_error(pl.error.representation(\"max_arity\", atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\tvar indicator = predicate.args[0].id + \"/\" + predicate.args[1].value;\r\n\t\t\t\t\tif(thread.is_public_predicate(indicator, module_id)\r\n\t\t\t\t\t&& indicator !== \",/2\"\r\n\t\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(indicator)) {\r\n\t\t\t\t\t\tdelete get_module.rules[indicator];\r\n\t\t\t\t\t\tdelete get_module.indexed_clauses[indicator];\r\n\t\t\t\t\t\tdelete get_module.non_indexable_clauses[indicator];\r\n\t\t\t\t\t\tdelete get_module.public_predicates[indicator];\r\n\t\t\t\t\t\tdelete get_module.multifile_predicates[indicator];\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", atom.args[0], atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ATOM PROCESSING\r\n\t\t\r\n\t\t// atom_length/2\r\n\t\t\"atom_length/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[1] ) && !pl.type.is_integer( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( atom.args[1] ) && atom.args[1].value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar length = new Num( stringLength(atom.args[0].id), false );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [length, atom.args[1]] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_concat/3\r\n\t\t\"atom_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar str, goal, start = atom.args[0], end = atom.args[1], whole = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( whole ) && (pl.type.is_variable( start ) || pl.type.is_variable( end )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( start ) && !pl.type.is_atom( start ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", start, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( end ) && !pl.type.is_atom( end ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", end, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( whole ) && !pl.type.is_atom( whole ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", whole, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar v1 = pl.type.is_variable( start );\r\n\t\t\t\tvar v2 = pl.type.is_variable( end );\r\n\t\t\t\t//var v3 = pl.type.is_variable( whole );\r\n\t\t\t\tif( !v1 && !v2 ) {\r\n\t\t\t\t\tgoal = new Term( \"=\", [whole, new Term( start.id + end.id )] );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t} else if( v1 && !v2 ) {\r\n\t\t\t\t\tstr = whole.id.substr( 0, whole.id.length - end.id.length );\r\n\t\t\t\t\tif( str + end.id === whole.id ) {\r\n\t\t\t\t\t\tgoal = new Term( \"=\", [start, new Term( str )] );\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if( v2 && !v1 ) {\r\n\t\t\t\t\tstr = whole.id.substr( start.id.length );\r\n\t\t\t\t\tif( start.id + str === whole.id ) {\r\n\t\t\t\t\t\tgoal = new Term( \"=\", [end, new Term( str )] );\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tfor( var i = 0; i <= whole.id.length; i++ ) {\r\n\t\t\t\t\t\tvar atom1 = new Term( whole.id.substr( 0, i ) );\r\n\t\t\t\t\t\tvar atom2 = new Term( whole.id.substr( i ) );\r\n\t\t\t\t\t\tgoal = new Term( \",\", [new Term( \"=\", [atom1, start] ), new Term( \"=\", [atom2, end] )] );\r\n\t\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( states );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// sub_atom/5\r\n\t\t\"sub_atom/5\": function( thread, point, atom ) {\r\n\t\t\tvar i, atom1 = atom.args[0], before = atom.args[1], length = atom.args[2], after = atom.args[3], subatom = atom.args[4];\r\n\t\t\tif( pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( before ) && !pl.type.is_integer( before ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", before, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( length ) && !pl.type.is_integer( length ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", length, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( after ) && !pl.type.is_integer( after ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", after, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( before ) && before.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", before, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( length ) && length.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", length, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( after ) && after.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", after, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( subatom ) && !pl.type.is_atom( subatom ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", subatom, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar bs = [], ls = [], as = [];\r\n\t\t\t\tif( pl.type.is_variable( before ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tbs.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tbs.push( before.value );\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( length ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tls.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tls.push( length.value );\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( after ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tas.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tas.push( after.value );\r\n\t\t\t\t}\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor( var _i in bs ) {\r\n\t\t\t\t\tif(!bs.hasOwnProperty(_i)) continue;\r\n\t\t\t\t\ti = bs[_i];\r\n\t\t\t\t\tfor( var _j in ls ) {\r\n\t\t\t\t\t\tif(!ls.hasOwnProperty(_j)) continue;\r\n\t\t\t\t\t\tvar j = ls[_j];\r\n\t\t\t\t\t\tvar k = atom1.id.length - i - j;\r\n\t\t\t\t\t\tif( indexOf( as, k ) !== -1 ) {\r\n\t\t\t\t\t\tif( i+j+k === atom1.id.length ) {\r\n\t\t\t\t\t\t\t\tvar str = atom1.id.substr( i, j );\r\n\t\t\t\t\t\t\t\tif( atom1.id === atom1.id.substr( 0, i ) + str + atom1.id.substr( i+j, k ) ) {\r\n\t\t\t\t\t\t\t\t\tvar pl1 = new Term( \"=\", [new Term( str ), subatom] );\r\n\t\t\t\t\t\t\t\t\tvar pl2 = new Term( \"=\", [before, new Num( i )] );\r\n\t\t\t\t\t\t\t\t\tvar pl3 = new Term( \"=\", [length, new Num( j )] );\r\n\t\t\t\t\t\t\t\t\tvar pl4 = new Term( \"=\", [after, new Num( k )] );\r\n\t\t\t\t\t\t\t\t\tvar goal = new Term( \",\", [ new Term( \",\", [ new Term( \",\", [pl2, pl3] ), pl4] ), pl1] );\r\n\t\t\t\t\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_chars/2\r\n\t\t\"atom_chars/2\": function( thread, point, atom ) {\r\n\t\t\tvar atom1 = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( !pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\t\tif(!pl.type.is_variable(list)) {\r\n\t\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tif(!pl.type.is_character(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"character\", pointer.args[0], atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar list1 = new Term( \"[]\" );\r\n\t\t\t\t\tvar unilen = stringLength(atom1.id);\r\n\t\t\t\t\tfor( var i = unilen-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist1 = new Term( \".\", [new Term( atom1.id.charAt( i ) ), list1] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list1] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\t\t\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar v = pl.type.is_variable( atom1 );\r\n\t\t\t\t\tvar str = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) && v ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"character\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += pointer.args[0].id;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) && v ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( str ), atom1] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_codes/2\r\n\t\t\"atom_codes/2\": function( thread, point, atom ) {\r\n\t\t\tvar atom1 = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( !pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\t\tif(!pl.type.is_variable(list)) {\r\n\t\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tif(!pl.type.is_character_code(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"integer\", pointer.args[0], atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar list1 = new Term( \"[]\" );\r\n\t\t\t\t\tvar unilen = stringLength(atom1.id);\r\n\t\t\t\t\tfor( var i = unilen-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist1 = new Term( \".\", [new Num( codePointAt(atom1.id,i), false ), list1] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list1] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\t\t\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar v = pl.type.is_variable( atom1 );\r\n\t\t\t\t\tvar str = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character_code( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) && v ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += fromCodePoint( pointer.args[0].value );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) && v ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( str ), atom1] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// char_code/2\r\n\t\t\"char_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar char = atom.args[0], code = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( char ) && pl.type.is_variable( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( code ) ) {\r\n\t\t\t\t\tvar code1 = new Num( codePointAt(char.id,0 ), false );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [code1, code] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar char1 = new Term( fromCodePoint( code.value ) );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [char1, char] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number_chars/2\r\n\t\t\"number_chars/2\": function( thread, point, atom ) {\r\n\t\t\tvar str, num = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", num, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar isvar = pl.type.is_variable( num );\r\n\t\t\t\tif( !pl.type.is_variable( list ) ) {\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar total = true;\r\n\t\t\t\t\tstr = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\ttotal = false;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"character\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += pointer.args[0].id;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal = total && pl.type.is_empty_list( pointer );\r\n\t\t\t\t\tif( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !total && isvar ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( total ) {\r\n\t\t\t\t\t\tif( pl.type.is_variable( pointer ) && isvar ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar expr = thread.parse( str );\r\n\t\t\t\t\t\t\tvar num2 = expr.value;\r\n\t\t\t\t\t\t\tif( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax_by_predicate( \"parseable_number\", atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [num, num2] ) ), point.substitution, point )] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( !isvar ) {\r\n\t\t\t\t\tstr = num.toString();\r\n\t\t\t\t\tvar list2 = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = str.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist2 = new Term( \".\", [ new Term( str.charAt( i ) ), list2 ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list2] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number_codes/2\r\n\t\t\"number_codes/2\": function( thread, point, atom ) {\r\n\t\t\tvar str, num = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", num, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar isvar = pl.type.is_variable( num );\r\n\t\t\t\tif( !pl.type.is_variable( list ) ) {\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar total = true;\r\n\t\t\t\t\tstr = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character_code( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\ttotal = false;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += fromCodePoint( pointer.args[0].value );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal = total && pl.type.is_empty_list( pointer );\r\n\t\t\t\t\tif( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !total && isvar ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( total ) {\r\n\t\t\t\t\t\tif( pl.type.is_variable( pointer ) && isvar ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar expr = thread.parse( str );\r\n\t\t\t\t\t\t\tvar num2 = expr.value;\r\n\t\t\t\t\t\t\tif( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax_by_predicate( \"parseable_number\", atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [num, num2] ) ), point.substitution, point )] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( !isvar ) {\r\n\t\t\t\t\tstr = num.toString();\r\n\t\t\t\t\tvar list2 = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = str.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist2 = new Term( \".\", [ new Num( codePointAt(str,i), false ), list2 ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list2] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// upcase_atom/2\r\n\t\t\"upcase_atom/2\": function( thread, point, atom ) {\r\n\t\t\tvar original = atom.args[0], upcase = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", original, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( upcase ) && !pl.type.is_atom( upcase ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", upcase, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [upcase, new Term( original.id.toUpperCase(), [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// downcase_atom/2\r\n\t\t\"downcase_atom/2\": function( thread, point, atom ) {\r\n\t\t\tvar original = atom.args[0], downcase = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", original, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( downcase ) && !pl.type.is_atom( downcase ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", downcase, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [downcase, new Term( original.id.toLowerCase(), [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atomic_concat/3\r\n\t\t\"atomic_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar atomic1 = atom.args[0], atomic2 = atom.args[1], concat = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( atomic1 ) || pl.type.is_variable( atomic2 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atomic( atomic1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atomic1, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atomic( atomic2 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atomic2, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", concat, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar id = \"\";\r\n\t\t\t\tif( pl.type.is_atom( atomic1 ) ) {\r\n\t\t\t\t\tid += atomic1.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tid += \"\" + atomic1.value;\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_atom( atomic2 ) ) {\r\n\t\t\t\t\tid += atomic2.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tid += \"\" + atomic2.value;\r\n\t\t\t\t}\r\n\t\t\t\tvar atom = new Term(id, []);\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom, concat] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// atomic_list_concat/2\r\n\t\t\"atomic_list_concat/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], concat = atom.args[1];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"atomic_list_concat\", [list, new Term( \"\", [] ), concat] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// atomic_list_concat/3\r\n\t\t\"atomic_list_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], separator = atom.args[1], concat = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( separator ) || pl.type.is_variable( list ) && pl.type.is_variable( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( separator ) && !pl.type.is_number( separator ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", separator, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", concat, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar id = \"\";\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pl.type.is_term( pointer ) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_atom( pointer.args[0] ) && !pl.type.is_number( pointer.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( id !== \"\" )\r\n\t\t\t\t\t\tid += separator.id;\r\n\t\t\t\t\tif( pl.type.is_atom( pointer.args[0] ) )\r\n\t\t\t\t\t\tid += pointer.args[0].id;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tid += \"\" + pointer.args[0].value;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tid = new Term( id, [] );\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_term( pointer ) || pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [id, concat] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TERM COMPARISON\r\n\t\t\r\n\t\t\"@=/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.compare( atom.args[0], atom.args[1] ) > 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t\"@>=/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.compare( atom.args[0], atom.args[1] ) >= 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t\"compare/3\": function( thread, point, atom ) {\r\n\t\t\tvar order = atom.args[0], left = atom.args[1], right = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable( order ) && !pl.type.is_atom( order ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", order, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_atom( order ) && [\"<\", \">\", \"=\"].indexOf( order.id ) === -1 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"order\", order, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar compare = pl.compare( left, right );\r\n\t\t\t\tcompare = compare === 0 ? \"=\" : (compare === -1 ? \"<\" : \">\");\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [order, new Term( compare, [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// EVALUATION\r\n\t\t\r\n\t\t// is/2\r\n\t\t\"is/2\": function( thread, point, atom ) {\r\n\t\t\tvar op = atom.args[1].interpret( thread );\r\n\t\t\tif( !pl.type.is_number( op ) ) {\r\n\t\t\t\tthread.throw_error( op );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom.args[0], op], atom.indicator ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// between/3\r\n\t\t\"between/3\": function( thread, point, atom ) {\r\n\t\t\tvar lower = atom.args[0], upper = atom.args[1], bet = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( lower ) || pl.type.is_variable( upper ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( lower ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", lower, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( upper ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", upper, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( bet ) && !pl.type.is_integer( bet ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", bet, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( bet ) ) {\r\n\t\t\t\t\tif( lower.value <= upper.value ) {\r\n\t\t\t\t\t\tvar states = [new State( point.goal.replace( new Term( \"=\", [bet, lower] ) ), point.substitution, point )];\r\n\t\t\t\t\t\tstates.push( new State( point.goal.replace( new Term( \"between\", [new Num( lower.value+1, false ), upper, bet] ) ), point.substitution, point ) );\r\n\t\t\t\t\t\tthread.prepend( states );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if( lower.value <= bet.value && upper.value >= bet.value ) {\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// succ/2\r\n\t\t\"succ/2\": function( thread, point, atom ) {\r\n\t\t\tvar n = atom.args[0], m = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( n ) && pl.type.is_variable( m ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( n ) && !pl.type.is_integer( n ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", n, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( m ) && !pl.type.is_integer( m ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", m, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( n ) && n.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", n, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( m ) && m.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", m, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( m ) || m.value > 0 ) {\r\n\t\t\t\t\tif( pl.type.is_variable( n ) ) {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [n, new Num( m.value-1, false )] ) ), point.substitution, point )] );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [m, new Num( n.value+1, false )] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =:=/2\r\n\t\t\"=:=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp === 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =\\=/2\r\n\t\t\"=\\\\=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp !== 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// /2\r\n\t\t\">/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp > 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// >=/2\r\n\t\t\">=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp >= 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TYPE TEST\r\n\t\t\r\n\t\t// var/1\r\n\t\t\"var/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom/1\r\n\t\t\"atom/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_atom( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atomic/1\r\n\t\t\"atomic/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_atomic( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// compound/1\r\n\t\t\"compound/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_compound( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// integer/1\r\n\t\t\"integer/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_integer( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// float/1\r\n\t\t\"float/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_float( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number/1\r\n\t\t\"number/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_number( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// nonvar/1\r\n\t\t\"nonvar/1\": function( thread, point, atom ) {\r\n\t\t\tif( !pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ground/1\r\n\t\t\"ground/1\": function( thread, point, atom ) {\r\n\t\t\tif( atom.variables().length === 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// acyclic_term/1\r\n\t\t\"acyclic_term/1\": function( thread, point, atom ) {\r\n\t\t\tvar test = point.substitution.apply( point.substitution );\r\n\t\t\tvar variables = atom.args[0].variables();\r\n\t\t\tfor( var i = 0; i < variables.length; i++ )\r\n\t\t\t\tif( point.substitution.links[variables[i]] !== undefined && !point.substitution.links[variables[i]].equals( test.links[variables[i]] ) )\r\n\t\t\t\t\treturn;\r\n\t\t\tthread.success( point );\r\n\t\t},\r\n\t\t\r\n\t\t// callable/1\r\n\t\t\"callable/1\": function( thread, point, atom ) {\r\n\t\t\tvar callable = atom.args[0];\r\n\t\t\tif(pl.type.is_term(callable)) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// is_list/1\r\n\t\t\"is_list/1\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0];\r\n\t\t\twhile( pl.type.is_term( list ) && list.indicator === \"./2\" )\r\n\t\t\t\tlist = list.args[1];\r\n\t\t\tif( pl.type.is_term( list ) && list.indicator === \"[]/0\" )\r\n\t\t\t\tthread.success( point );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// STREAM SELECTION AND CONTROL\r\n\r\n\t\t// current_input/1\r\n\t\t\"current_input/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(stream)\r\n\t\t\t&& (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias)\r\n\t\t\t\t\t\t\t\t\t\t && !thread.get_stream_by_alias(stream.id))\r\n\t\t\t&& (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) {\r\n\t\t\t\tthread.throw_error( pl.error.domain(\"stream\", stream, atom.indicator) );\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_atom(stream))\r\n\t\t\t\t\tstream = thread.get_stream_by_alias(stream.id);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [stream, thread.get_current_input()])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// current_output/1\r\n\t\t\"current_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(stream)\r\n\t\t\t&& (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias)\r\n\t\t\t\t\t\t\t\t\t\t && !thread.get_stream_by_alias(stream.id))\r\n\t\t\t&& (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) {\r\n\t\t\t\tthread.throw_error( pl.error.domain(\"stream\", stream, atom.indicator) );\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_atom(stream))\r\n\t\t\t\t\tstream = thread.get_stream_by_alias( stream.id );\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [stream, thread.get_current_output()])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_input/1\r\n\t\t\"set_input/1\": function( thread, point, atom ) {\r\n\t\t\tvar input = atom.args[0];\r\n\t\t\tvar stream = pl.type.is_stream( input ) ? input : thread.get_stream_by_alias( input.id );\r\n\t\t\tif( pl.type.is_variable( input ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( input ) && !pl.type.is_atom( input ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", input, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(input.alias)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& !thread.get_stream_by_alias(input.id) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", input, atom.indicator ) );\r\n\t\t\t} else if( stream.output === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", input, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.set_current_input( stream );\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_output/1\r\n\t\t\"set_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar output = atom.args[0];\r\n\t\t\tvar stream = pl.type.is_stream( output ) ? output : thread.get_stream_by_alias( output.id );\r\n\t\t\tif( pl.type.is_variable( output ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( output ) && !pl.type.is_atom( output ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", output, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(output.alias)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& !thread.get_stream_by_alias(output.id) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", output, atom.indicator ) );\r\n\t\t\t} else if( stream.input === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", output, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.set_current_output( stream );\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// open/3\r\n\t\t\"open/3\": function( thread, point, atom ) {\r\n\t\t\tvar dest = atom.args[0], mode = atom.args[1], stream = atom.args[2];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"open\", [dest, mode, stream, new Term(\"[]\", [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// open/4\r\n\t\t\"open/4\": function( thread, point, atom ) {\r\n\t\t\tvar dest = atom.args[0], mode = atom.args[1], stream = atom.args[2], options = atom.args[3];\r\n\t\t\tif( pl.type.is_variable( dest ) || pl.type.is_variable( mode ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( mode ) && !pl.type.is_atom( mode ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", mode, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.uninstantiation( stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( dest ) && !pl.type.is_streamable( dest ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_io_mode( mode ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"io_mode\", mode, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_stream_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"stream_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0].id;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar alias = obj_options[\"alias\"];\r\n\t\t\t\t\tif( alias && thread.get_stream_by_alias(alias) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"open\", \"source_sink\", new Term(\"alias\", [new Term(alias, [])]), atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !obj_options[\"type\"] )\r\n\t\t\t\t\t\tobj_options[\"type\"] = \"text\";\r\n\t\t\t\t\tvar file;\r\n\t\t\t\t\tif( pl.type.is_atom( dest ) )\r\n\t\t\t\t\t\tfile = thread.file_system_open( dest.id, obj_options[\"type\"], mode.id );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfile = dest.stream( obj_options[\"type\"], mode.id );\r\n\t\t\t\t\tif( file === false ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"open\", \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( file === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.existence( \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar newstream = new Stream(\r\n\t\t\t\t\t\tfile, mode.id,\r\n\t\t\t\t\t\tobj_options[\"alias\"],\r\n\t\t\t\t\t\tobj_options[\"type\"],\r\n\t\t\t\t\t\tobj_options[\"reposition\"] === \"true\",\r\n\t\t\t\t\t\tobj_options[\"eof_action\"] );\r\n\t\t\t\t\tif( alias )\r\n\t\t\t\t\t\tthread.session.streams[alias] = newstream;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.session.streams[newstream.id] = newstream;\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [stream, newstream] ) ),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// close/1\r\n\t\t\"close/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"close\", [stream, new Term(\"[]\", [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// close/2\r\n\t\t\"close/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], options = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_close_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"close_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0].id === \"true\";\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(stream2 === thread.session.standard_input || stream2 === thread.session.standard_output || stream2 === thread.session.standard_error) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( stream2 === thread.session.current_input ) {\r\n\t\t\t\t\t\tthread.session.current_input = thread.session.standard_input;\r\n\t\t\t\t\t} else if( stream2 === thread.session.current_output ) {\r\n\t\t\t\t\t\tthread.session.current_output = thread.session.standard_output;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( stream2.alias !== null && stream2.alias !== undefined )\r\n\t\t\t\t\t\tdelete thread.session.streams[stream2.alias];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tdelete thread.session.streams[stream2.id];\r\n\t\t\t\t\tif( stream2.output )\r\n\t\t\t\t\t\tstream2.stream.flush();\r\n\t\t\t\t\tvar closed = stream2.stream.close();\r\n\t\t\t\t\tstream2.stream = null;\r\n\t\t\t\t\tif( obj_options.force === true || closed === true ) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// flush_output/0\r\n\t\t\"flush_output/0\": [\r\n\t\t\tnew Rule(new Term(\"flush_output\", []), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"flush_output\", [new Var(\"S\")])]))\r\n\t\t],\r\n\r\n\t\t// flush_output/1\r\n\t\t\"flush_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tstream2.stream.flush();\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// stream_property/2\r\n\t\t\"stream_property/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], property = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && (!pl.type.is_stream( stream2 ) || stream2.stream === null) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( property ) && !pl.type.is_stream_property( property ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_property\", property, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar streams = [];\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar propvar = pl.type.is_variable(property);\r\n\t\t\t\tif( !pl.type.is_variable( stream ) )\r\n\t\t\t\t\tstreams.push( stream2 );\r\n\t\t\t\telse\r\n\t\t\t\t\tfor( var key in thread.session.streams )\r\n\t\t\t\t\t\tstreams.push( thread.session.streams[key] );\r\n\t\t\t\tfor( var i = 0; i < streams.length; i++ ) {\r\n\t\t\t\t\tvar properties = [];\r\n\t\t\t\t\t// file_name/1\r\n\t\t\t\t\tif( (propvar || property.indicator === \"file_name/1\") && streams[i].filename )\r\n\t\t\t\t\t\tproperties.push( new Term( \"file_name\", [new Term(streams[i].file_name, [])] ) );\r\n\t\t\t\t\t// mode/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"mode/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"mode\", [new Term(streams[i].mode, [])] ) );\r\n\t\t\t\t\t// input/0 or output/0\r\n\t\t\t\t\tif(propvar || property.indicator === \"input/0\" || property.indicator === \"output/0\")\r\n\t\t\t\t\t\tproperties.push( new Term( streams[i].input ? \"input\" : \"output\", [] ) );\r\n\t\t\t\t\t// alias/1\r\n\t\t\t\t\tif( (propvar || property.indicator === \"alias/1\") && streams[i].alias )\r\n\t\t\t\t\t\tproperties.push( new Term( \"alias\", [new Term(streams[i].alias, [])] ) );\r\n\t\t\t\t\t// position/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"position/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"position\", [\r\n\t\t\t\t\t\t\tnew Term(\"position\", [\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].char_count, false),\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].line_count, false),\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].line_position, false)\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t] ) );\r\n\t\t\t\t\t// end_of_stream/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"end_of_stream/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"end_of_stream\", [new Term(\r\n\t\t\t\t\t\t\tstreams[i].position === \"end_of_stream\" || streams[i].stream.eof && streams[i].stream.eof(streams[i].position) ? \"at\" :\r\n\t\t\t\t\t\t\tstreams[i].position === \"past_end_of_stream\" ? \"past\" :\r\n\t\t\t\t\t\t\t\"not\", [])] ) );\r\n\t\t\t\t\t// eof_action/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"eof_action/1\")\t\r\n\t\t\t\t\t\tproperties.push( new Term( \"eof_action\", [new Term(streams[i].eof_action, [])] ) );\r\n\t\t\t\t\t// reposition/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"reposition/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"reposition\", [new Term(streams[i].reposition ? \"true\" : \"false\", [])] ) );\r\n\t\t\t\t\t// type/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"type/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"type\", [new Term(streams[i].type, [])] ) );\r\n\t\t\t\t\tfor( var j = 0; j < properties.length; j++ ) {\r\n\t\t\t\t\t\tstates.push( new State(\r\n\t\t\t\t\t\t\tpoint.goal.replace( new Term( \",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [pl.type.is_variable( stream ) ? stream : stream2, streams[i]]),\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [property, properties[j]])]) ),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t) );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// stream_position_data\r\n\t\t\"stream_position_data/3\": function(thread, point, atom) {\r\n\t\t\tvar field = atom.args[0], position = atom.args[1], value = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(position)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_term(position) || position.indicator !== \"position/3\") {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"stream_position\", position, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(field) && !pl.type.is_atom(field)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", field, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(value) && !pl.type.is_integer(value)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", value, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar fields = [\"char_count\", \"line_count\", \"line_position\"];\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar data_pos = {char_count: 0, line_count: 1, line_position: 2};\r\n\t\t\t\tif(pl.type.is_variable(field)) {\r\n\t\t\t\t\tfor(var i = 0; i < fields.length; i++) {\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [new Term(fields[i]), field]),\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [value, position.args[data_pos[fields[i]]]])\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(data_pos.hasOwnProperty(field.id)) {\r\n\t\t\t\t\tstates.push(new State(point.goal.replace(\r\n\t\t\t\t\t\tnew Term(\"=\", [value, position.args[data_pos[field.id]]])\r\n\t\t\t\t\t), point.substitution, point));\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(states);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// at_end_of_stream/0\r\n\t\t\"at_end_of_stream/0\": [\r\n\t\t\tnew Rule(new Term(\"at_end_of_stream\", []), new pl.type.Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\",\", [new Term(\"stream_property\", [new Var(\"S\"),new Term(\"end_of_stream\", [new Var(\"E\")])]),new Term(\",\", [new Term(\"!\", []),new Term(\";\", [new Term(\"=\", [new Var(\"E\"),new Term(\"at\", [])]),new Term(\"=\", [new Var(\"E\"),new Term(\"past\", [])])])])])]))\r\n\t\t],\r\n\r\n\t\t// at_end_of_stream/1\r\n\t\t\"at_end_of_stream/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar e = thread.next_free_variable();\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\tnew Term(\",\", [new Term(\"stream_property\", [stream2,new Term(\"end_of_stream\", [e])]),\r\n\t\t\t\t\t\tnew Term(\",\", [new Term(\"!\", []),new Term(\";\", [new Term(\"=\", [e,new Term(\"at\", [])]),\r\n\t\t\t\t\t\tnew Term(\"=\", [e,new Term(\"past\", [])])])])])\r\n\t\t\t\t\t),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_stream_position/2\r\n\t\t\"set_stream_position/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], position = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( position ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream_position( position ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_position\", position, atom.indicator ) );\r\n\t\t\t} else if( stream2.reposition === false ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"reposition\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( position.indicator === \"position/3\" ) {\r\n\t\t\t\t\tstream2.position = position.args[0].value;\r\n\t\t\t\t\tstream2.char_count = position.args[0].value;\r\n\t\t\t\t\tstream2.line_count = position.args[1].value;\r\n\t\t\t\t\tstream2.line_position = position.args[2].value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream2.position = position.id;\r\n\t\t\t\t}\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// CHARACTER INPUT OUTPUT\r\n\t\t\r\n\t\t// get_char/1\r\n\t\t\"get_char/1\": [\r\n\t\t\tnew Rule(new Term(\"get_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// get_char/2\r\n\t\t\"get_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_char;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_char = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_char === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_char === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t\tif(stream_char === \"\\n\") {\r\n\t\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Term(stream_char,[]), char] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// get_code/1\r\n\t\t\"get_code/1\": [\r\n\t\t\tnew Rule(new Term(\"get_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// get_code/2\r\n\t\t\"get_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"in_character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_code;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_code = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_code === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_code === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream_code = codePointAt( stream_code, 0 );\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t\tif(stream_code === 10) {\r\n\t\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_code, false), code] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// peek_char/1\r\n\t\t\"peek_char/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_char/2\r\n\t\t\"peek_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_char;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_char = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_char === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_char === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Term(stream_char,[]), char] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// peek_code/1\r\n\t\t\"peek_code/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_code/2\r\n\t\t\"peek_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"in_character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_code;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_code = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_code === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_code === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream_code = codePointAt( stream_code, 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_code, false), code] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_char/1\r\n\t\t\"put_char/1\": [\r\n\t\t\tnew Rule(new Term(\"put_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// put_char/2\r\n\t\t\"put_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put( char.id, stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tif(char.id === \"\\n\") {\r\n\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_code/1\r\n\t\t\"put_code/1\": [\r\n\t\t\tnew Rule(new Term(\"put_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// put_code/2\r\n\t\t\"put_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put( fromCodePoint( code.value ), stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tif(code.value === 10) {\r\n\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// nl/0\r\n\t\t\"nl/0\": [\r\n\t\t\tnew Rule(new Term(\"nl\"), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_char\", [new Var(\"S\"),new Term(\"\\n\")])]))\r\n\t\t],\r\n\r\n\t\t// nl/1\r\n\t\t\"nl/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"put_char\", [stream, new Term(\"\\n\", [])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// BYTE INPUT/OUTPUT\r\n\r\n\t\t// get_byte/1\r\n\t\t\"get_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"get_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// get_byte/2\r\n\t\t\"get_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_byte;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_byte = stream2.stream.get_byte( stream2.position );\r\n\t\t\t\t\tif( stream_byte === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"byte\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_byte === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_byte,false), byte] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// peek_byte/1\r\n\t\t\"peek_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_byte/2\r\n\t\t\"peek_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_byte;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_byte = stream2.stream.get_byte( stream2.position );\r\n\t\t\t\t\tif( stream_byte === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"byte\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_byte === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_byte,false), byte] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_byte/1\r\n\t\t\"put_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"put_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// put_byte/2\r\n\t\t\"put_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put_byte( byte.value, stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TERM INPUT/OUTPUT\r\n\r\n\t\t// read/1\r\n\t\t\"read/1\": [\r\n\t\t\tnew Rule(new Term(\"read\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Term(\"[]\")])]))\r\n\t\t],\r\n\r\n\t\t// read/2\r\n\t\t\"read/2\": [\r\n\t\t\tnew Rule(new Term(\"read\", [new Var(\"S\"), new Var(\"T\")]), new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Term(\"[]\")]))\r\n\t\t],\r\n\r\n\t\t// read_term/2\r\n\t\t\"read_term/2\": [\r\n\t\t\tnew Rule(new Term(\"read_term\", [new Var(\"T\"),new Var(\"O\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Var(\"O\")])]))\r\n\t\t],\r\n\r\n\t\t// read_term/3\r\n\t\t\"read_term/3\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1], options = atom.args[2];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"eof_code\" ) {\r\n\t\t\t\texpr = {\r\n\t\t\t\t\tvalue: new Term(\"end_of_file\", []),\r\n\t\t\t\t\ttype: SUCCESS,\r\n\t\t\t\t\tlen: -1\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_read_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"read_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0];\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar char, tokenizer, expr;\r\n\t\t\t\t\tvar text = \"\";\r\n\t\t\t\t\tvar tokens = [];\r\n\t\t\t\t\tvar last_token = null;\r\n\t\t\t\t\tvar lexical_error = false;\r\n\t\t\t\t\t// Get term\r\n\t\t\t\t\twhile( last_token === null || lexical_error || last_token.name !== \"atom\" || last_token.value !== \".\" || tokens.length > 0 && expr.type === ERROR ) {\r\n\t\t\t\t\t\tchar = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\t\twhile(char !== null && char !== \".\" && char !== \"end_of_stream\" && char !== \"past_end_of_stream\") {\r\n\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\ttext += char;\r\n\t\t\t\t\t\t\tchar = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif( char === null ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else if( char === \"end_of_stream\" || char === \"past_end_of_stream\" ) {\r\n\t\t\t\t\t\t\tif(tokens === null || tokens.length === 0) {\r\n\t\t\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new Term(\"end_of_file\", []),\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS,\r\n\t\t\t\t\t\t\t\t\tlen: -1\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t} else if(expr) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( last_token, \"unexpected end of file\", false ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( last_token, \"token not found\", true ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if(char === \".\") {\r\n\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\ttext += char;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttokenizer = new Tokenizer( thread );\r\n\t\t\t\t\t\ttokenizer.new_text( text );\r\n\t\t\t\t\t\ttokens = tokenizer.get_tokens();\r\n\t\t\t\t\t\tnum_token = tokens !== null && tokens.length > 1 ? tokens[tokens.length-2] : null;\r\n\t\t\t\t\t\tlast_token = tokens !== null && tokens.length > 0 ? tokens[tokens.length-1] : null;\r\n\t\t\t\t\t\tif(tokens === null)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tlexical_error = false;\r\n\t\t\t\t\t\tfor(var i = 0; i < tokens.length && !lexical_error; i++)\r\n\t\t\t\t\t\t\tlexical_error = tokens[i].name === \"lexical\";\r\n\t\t\t\t\t\tif(lexical_error)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\texpr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false);\r\n\t\t\t\t\t\tif(num_token && num_token.name === \"number\" && !num_token.float && !num_token.blank && last_token.value === \".\") {\r\n\t\t\t\t\t\t\tvar next_char = stream2.stream.get(1, stream2.position);\r\n\t\t\t\t\t\t\tif(next_char >= '0' && next_char <= '9') {\r\n\t\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\t\ttext += next_char;\r\n\t\t\t\t\t\t\t\tlast_token = null;\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(last_token) {\r\n\t\t\t\t\t\tif(last_token.line_position === last_token.len)\r\n\t\t\t\t\t\t\tstream2.line_position += last_token.line_position;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tstream2.line_position = last_token.line_position;\r\n\t\t\t\t\t\tstream2.line_count += last_token.line_count;\r\n\t\t\t\t\t\tstream2.char_count += last_token.len;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Succeed analyzing term\r\n\t\t\t\t\tif( expr.type === SUCCESS && (expr.len === -1 || expr.len === tokens.length-1 && last_token.value === \".\" )) {\r\n\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\texpr = expr.value.rename( thread );\r\n\t\t\t\t\t\tvar eq = new Term( \"=\", [term, expr] );\r\n\t\t\t\t\t\t// Variables\r\n\t\t\t\t\t\tif( obj_options.variables ) {\r\n\t\t\t\t\t\t\tvar vars = arrayToList( map( nub( expr.variables() ), function(v) { return new Var(v); } ) );\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.variables, vars] )] )\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Variable names\r\n\t\t\t\t\t\tif( obj_options.variable_names ) {\r\n\t\t\t\t\t\t\tvar vars = nub(expr.variables());\r\n\t\t\t\t\t\t\tvar plvars = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < vars.length; i++) {\r\n\t\t\t\t\t\t\t\tvar v = vars[i];\r\n\t\t\t\t\t\t\t\tfor( var prop in thread.session.renamed_variables ) {\r\n\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables.hasOwnProperty( prop ) ) {\r\n\t\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables[ prop ] === v ) {\r\n\t\t\t\t\t\t\t\t\t\t\tplvars.push(new Term( \"=\", [new Term( prop, []), new Var(v)] ));\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplvars = arrayToList(plvars);\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.variable_names, plvars] )] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Singletons\r\n\t\t\t\t\t\tif( obj_options.singletons ) {\r\n\t\t\t\t\t\t\tvar vars = nub(new Rule(expr, null).singleton_variables(true));\r\n\t\t\t\t\t\t\tvar plvars = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < vars.length; i++) {\r\n\t\t\t\t\t\t\t\tvar v = vars[i];\r\n\t\t\t\t\t\t\t\tfor( var prop in thread.session.renamed_variables ) {\r\n\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables.hasOwnProperty( prop ) ) {\r\n\t\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables[ prop ] === v ) {\r\n\t\t\t\t\t\t\t\t\t\t\tplvars.push(new Term( \"=\", [new Term( prop, []), new Var(v)] ));\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplvars = arrayToList(plvars);\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.singletons, plvars] )] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( eq ), point.substitution, point )] );\r\n\t\t\t\t\t// Failed analyzing term\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif( expr.type === SUCCESS )\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( tokens[expr.len], \"unexpected token\", false ) );\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tthread.throw_error( expr.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// write/1\r\n\t\t\"write/1\": [\r\n\t\t\tnew Rule(new Term(\"write\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write/2\r\n\t\t\"write/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"false\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"false\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"true\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\t\t\r\n\t\t// writeq/1\r\n\t\t\"writeq/1\": [\r\n\t\t\tnew Rule(new Term(\"writeq\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"writeq\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// writeq/2\r\n\t\t\"writeq/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"true\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"false\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"true\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\t\t\r\n\t\t// write_canonical/1\r\n\t\t\"write_canonical/1\": [\r\n\t\t\tnew Rule(new Term(\"write_canonical\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write_canonical\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write_canonical/2\r\n\t\t\"write_canonical/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"true\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"true\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"false\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// write_term/2\r\n\t\t\"write_term/2\": [\r\n\t\t\tnew Rule(new Term(\"write_term\", [new Var(\"T\"),new Var(\"O\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write_term\", [new Var(\"S\"),new Var(\"T\"),new Var(\"O\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write_term/3\r\n\t\t\"write_term/3\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1], options = atom.args[2];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_write_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"write_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(property.indicator === \"variable_names/1\")\r\n\t\t\t\t\t\tobj_options[property.id] = property.args[0];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tobj_options[property.id] = property.args[0].id === \"true\";\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tobj_options.session = thread.session;\r\n\t\t\t\t\tvar text = term.toString( obj_options );\r\n\t\t\t\t\tstream2.stream.put( text, stream2.position );\r\n\t\t\t\t\tif( typeof stream2.position === \"number\" )\r\n\t\t\t\t\t\tstream2.position += text.length;\r\n\t\t\t\t\tvar nl = (text.match(/\\n/g) || []).length;\r\n\t\t\t\t\tstream2.line_count += nl;\r\n\t\t\t\t\tif(nl > 0)\r\n\t\t\t\t\t\tstream2.line_position = text.length - text.lastIndexOf(\"\\n\") - 1;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tstream2.line_position += text.length;\r\n\t\t\t\t\tstream2.char_count += text.length;\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// IMPLEMENTATION DEFINED HOOKS\r\n\t\t\r\n\t\t// halt/0\r\n\t\t\"halt/0\": function( thread, point, _ ) {\r\n\t\t\tif( thread.get_flag(\"nodejs\").indicator === \"true/0\" )\r\n\t\t\t\tprocess.exit();\r\n\t\t\tthread.points = [];\r\n\t\t},\r\n\t\t\r\n\t\t// halt/1\r\n\t\t\"halt/1\": function( thread, point, atom ) {\r\n\t\t\tvar int = atom.args[0];\r\n\t\t\tif( pl.type.is_variable( int ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( int ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", int, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( thread.get_flag(\"nodejs\").indicator === \"true/0\" )\r\n\t\t\t\t\tprocess.exit(int.value);\r\n\t\t\t\tthread.points = [];\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_prolog_flag/2\r\n\t\t\"current_prolog_flag/2\": function( thread, point, atom ) {\r\n\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\tif( !pl.type.is_variable( flag ) && !pl.type.is_atom( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( flag ) && !pl.type.is_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor( var name in pl.flag ) {\r\n\t\t\t\t\tif(!pl.flag.hasOwnProperty(name)) continue;\r\n\t\t\t\t\tvar goal = new Term( \",\", [new Term( \"=\", [new Term( name ), flag] ), new Term( \"=\", [thread.get_flag(name), value] )] );\r\n\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// set_prolog_flag/2\r\n\t\t\"set_prolog_flag/2\": function( thread, point, atom ) {\r\n\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_modifiable_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"flag\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_value_flag( flag, value ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"flag_value\", new Term( \"+\", [flag, value] ), atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.session.flag[flag.id] = value;\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// LOAD PROLOG SOURCE FILES\r\n\r\n\t\t// consult/1\r\n\t\t\"consult/1\": function(thread, point, atom) {\r\n\t\t\tvar src = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(src.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = src.args[0].id;\r\n\t\t\t\tsrc = src.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(src)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_atom(src)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", src, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif(thread.consult(src.id, {\r\n\t\t\t\t\tcontext_module: context_module,\r\n\t\t\t\t\ttext: false,\r\n\t\t\t\t\thtml: false,\r\n\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: function(err) {\r\n\t\t\t\t\t\tthread.throw_error(err);\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TIME AND DATES\r\n\r\n\t\t// get_time/1\r\n\t\t\"get_time/1\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(time) && !pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar current = new Num(Date.now(), true);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [time, current] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_property\r\n\t\t\"time_property/2\": function(thread, point, atom) {\r\n\t\t\tvar time = atom.args[0], property = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(time) && !pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"number\", time, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(property) && !pl.type.is_time_property(property)) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"time_property\", property, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar props;\r\n\t\t\t\tif(pl.type.is_variable(property)) {\r\n\t\t\t\t\tprops = [\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\", \"weekday\"];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tprops = [property.id];\r\n\t\t\t\t}\r\n\t\t\t\tvar date = new Date(time.value);\r\n\t\t\t\tvar value;\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor(var i = 0; i < props.length; i++) {\r\n\t\t\t\t\tswitch(props[i]) {\r\n\t\t\t\t\t\tcase \"year\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"year\", [new Num(date.getFullYear(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"month\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"month\", [new Num(date.getMonth(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"day\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"day\", [new Num(date.getDate(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"hours\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"hours\", [new Num(date.getHours(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"minutes\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"minutes\", [new Num(date.getMinutes(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"seconds\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"seconds\", [new Num(date.getSeconds(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"milliseconds\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"milliseconds\", [new Num(date.getMilliseconds(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"weekday\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"weekday\", [new Num(date.getDay(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstates.push(new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [property, value] ) ), \r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t));\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(states);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_year/2\r\n\t\t\"time_year/2\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0], year = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_variable(year) && !pl.type.is_integer(year)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", year, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar value = new Num(new Date(time.value).getFullYear(), false);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [year, value] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_month/2\r\n\t\t\"time_month/2\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0], month = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_variable(month) && !pl.type.is_integer(month)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", month, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar value = new Num(new Date(time.value).getMonth(), false);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [month, value] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// GRAMMARS\r\n\r\n\t\t// phrase/3\r\n\t\t\"phrase/3\": function( thread, point, atom ) {\r\n\t\t\tvar grbody = atom.args[0], s0 = atom.args[1], s = atom.args[2];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(grbody.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = grbody.args[0].id;\r\n\t\t\t\tgrbody = grbody.args[1];\r\n\t\t\t}\r\n\t\t\tif( pl.type.is_variable( grbody ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_callable( grbody ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"callable\", grbody, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar goal = body_to_dcg( grbody.clone(), s0, thread );\r\n\t\t\t\tgoal.value = new Term(\":\", [new Term(context_module), new Term(\"call\", [goal.value])]);\r\n\t\t\t\tif(goal !== null) {\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \",\", [goal.value, new Term(\"=\", [goal.variable, s])] ) ), \r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// phrase/2\r\n\t\t\"phrase/2\": function( thread, point, atom ) {\r\n\t\t\tvar grbody = atom.args[0], s0 = atom.args[1];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"phrase\", [grbody, s0, new Term(\"[]\", [])] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TAU PROLOG INFORMATION\r\n\r\n\t\t// version/0\r\n\t\t\"version/0\": function( thread, point, atom ) {\r\n\t\t\tvar msg = \"Welcome to Tau Prolog version \" + version.major + \".\" + version.minor + \".\" + version.patch + \"\\n\";\r\n\t\t\tmsg += \"Tau Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.\\n\";\r\n\t\t\tmsg += \"Please run ?- license. for legal details.\\n\";\r\n\t\t\tmsg += \"For online help and background, visit http:/tau-prolog.org\";\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"write\", [new Term( msg, [] )] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// license/0\r\n\t\t\"license/0\": function( thread, point, atom ) {\r\n\t\t\tvar msg = \"Tau Prolog. A Prolog interpreter in JavaScript.\\n\";\r\n\t\t\tmsg += \"Copyright (C) 2017 - 2022 José Antonio Riaza Valverde\\n\\n\";\r\n\t\t\tmsg += \"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\";\r\n\t\t\tmsg += \"1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\";\r\n\t\t\tmsg += \"2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\";\r\n\t\t\tmsg += \"3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\n\";\r\n\t\t\tmsg += \"THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\\n\";\r\n\t\t\tmsg += \"You should have received a copy of the BSD 3-Clause License along with this program. If not, see https://opensource.org/licenses/BSD-3-Clause\";\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"write\", [new Term( msg, [] )] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t}\r\n\r\n\t}, \"all\", {\r\n\t\tmeta_predicates: {\r\n\t\t\t// '$findall'(?, 0, -, ?)\r\n\t\t\t\"$findall/4\": new Term(\"$findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\"), new Term(\"?\")]),\r\n\t\t\t// '$bagof'(?, ^, -)\r\n\t\t\t\"$bagof/3\": new Term(\"$bagof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// '$setof'(?, ^, -)\r\n\t\t\t\"$setof/3\": new Term(\"$setof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// '$if'(0, 0, 0)\r\n\t\t\t\"$if/3\": new Term(\"$if\", [new Num(0, false), new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0;0)\r\n\t\t\t\";/2\": new Term(\";\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0->0)\r\n\t\t\t\"->/2\": new Term(\"->\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0->0)\r\n\t\t\t\"*->/2\": new Term(\"*->\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (\\+0)\r\n\t\t\t\"\\\\+/1\": new Term(\"\\\\+\", [new Num(0, false)]),\r\n\t\t\t// abolish(:)\r\n\t\t\t\"abolish/1\": new Term(\"abolish\", [new Term(\":\")]),\r\n\t\t\t// asserta(:)\r\n\t\t\t\"asserta/1\": new Term(\"asserta\", [new Term(\":\")]),\r\n\t\t\t// assertz(:)\r\n\t\t\t\"assertz/1\": new Term(\"assertz\", [new Term(\":\")]),\r\n\t\t\t// bagof(?, ^, -)\r\n\t\t\t\"bagof/3\": new Term(\"bagof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// call(0)\r\n\t\t\t\"call/1\": new Term(\"call\", [new Num(0, false)]),\r\n\t\t\t// call(1, ?)\r\n\t\t\t\"call/2\": new Term(\"call\", [new Num(1, false), new Term(\"?\")]),\r\n\t\t\t// call(2, ?, ?)\r\n\t\t\t\"call/3\": new Term(\"call\", [new Num(2, false), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(3, ?, ?, ?)\r\n\t\t\t\"call/4\": new Term(\"call\", [new Num(3, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(4, ?, ?, ?, ?)\r\n\t\t\t\"call/5\": new Term(\"call\", [new Num(4, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(5, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/6\": new Term(\"call\", [new Num(5, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(6, ?, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/7\": new Term(\"call\", [new Num(6, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(7, ?, ?, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/8\": new Term(\"call\", [new Num(6, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call_cleanup(0, 0)\r\n\t\t\t\"call_cleanup/2\": new Term(\"call_cleanup\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// catch(0, ?, 0)\r\n\t\t\t\"catch/3\": new Term(\"catch\", [new Num(0, false), new Term(\"?\"), new Num(0, false)]),\r\n\t\t\t// consult(:)\r\n\t\t\t\"consult/1\": new Term(\"consult\", [new Term(\":\")]),\r\n\t\t\t// clause(:, ?)\r\n\t\t\t\"clause/2\": new Term(\"clause\", [new Term(\":\"), new Term(\"?\")]),\r\n\t\t\t// current_predicate(?, :)\r\n\t\t\t\"current_predicate/2\": new Term(\"current_predicate\", [new Term(\"?\"), new Term(\":\")]),\r\n\t\t\t// findall(?, 0, -)\r\n\t\t\t\"findall/3\": new Term(\"findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\")]),\r\n\t\t\t// findall(?, 0, -, ?)\r\n\t\t\t\"findall/4\": new Term(\"findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\"), new Term(\"?\")]),\r\n\t\t\t// forall(0, 0)\r\n\t\t\t\"forall/2\": new Term(\"forall\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// listing(:)\r\n\t\t\t\"listing/1\": new Term(\"listing\", [new Term(\":\")]),\r\n\t\t\t// once(0)\r\n\t\t\t\"once/1\": new Term(\"once\", [new Num(0, false)]),\r\n\t\t\t// phrase(:, ?)\r\n\t\t\t\"phrase/2\": new Term(\"phrase\", [new Term(\":\"),new Term(\"?\")]),\r\n\t\t\t// phrase(:, ?, ?)\r\n\t\t\t\"phrase/3\": new Term(\"phrase\", [new Term(\":\"),new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// retract(:)\r\n\t\t\t\"retract/1\": new Term(\"retract\", [new Term(\":\")]),\r\n\t\t\t// retractall(:)\r\n\t\t\t\"retractall/1\": new Term(\"retractall\", [new Term(\":\")]),\r\n\t\t\t// setup_call_cleanup(0, 0, 0)\r\n\t\t\t\"setup_call_cleanup/3\": new Term(\"setup_call_cleanup\", [new Num(0, false), new Num(0, false), new Num(0, false)]),\r\n\t\t\t// setof(?, ^, -)\r\n\t\t\t\"setof/3\": new Term(\"setof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")])\r\n\t\t}\r\n\t});\r\n\r\n\tif( typeof module !== 'undefined' ) {\r\n\t\tmodule.exports = pl;\r\n\t} else {\r\n\t\twindow.pl = pl;\r\n\t}\r\n\t\r\n})();\r\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\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\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\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()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\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 isObject(re) && 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 isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (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 = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","var indexOf = function (xs, item) {\n if (xs.indexOf) return xs.indexOf(item);\n else for (var i = 0; i < xs.length; i++) {\n if (xs[i] === item) return i;\n }\n return -1;\n};\nvar Object_keys = function (obj) {\n if (Object.keys) return Object.keys(obj)\n else {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n }\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nvar defineProp = (function() {\n try {\n Object.defineProperty({}, '_', {});\n return function(obj, name, value) {\n Object.defineProperty(obj, name, {\n writable: true,\n enumerable: false,\n configurable: true,\n value: value\n })\n };\n } catch(e) {\n return function(obj, name, value) {\n obj[name] = value;\n };\n }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n if (!(this instanceof Script)) return new Script(code);\n this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n if (!(context instanceof Context)) {\n throw new TypeError(\"needs a 'context' argument.\");\n }\n \n var iframe = document.createElement('iframe');\n if (!iframe.style) iframe.style = {};\n iframe.style.display = 'none';\n \n document.body.appendChild(iframe);\n \n var win = iframe.contentWindow;\n var wEval = win.eval, wExecScript = win.execScript;\n\n if (!wEval && wExecScript) {\n // win.eval() magically appears when this is called in IE:\n wExecScript.call(win, 'null');\n wEval = win.eval;\n }\n \n forEach(Object_keys(context), function (key) {\n win[key] = context[key];\n });\n forEach(globals, function (key) {\n if (context[key]) {\n win[key] = context[key];\n }\n });\n \n var winKeys = Object_keys(win);\n\n var res = wEval.call(win, this.code);\n \n forEach(Object_keys(win), function (key) {\n // Avoid copying circular objects like `top` and `window` by only\n // updating existing context properties or new properties in the `win`\n // that was only introduced after the eval.\n if (key in context || indexOf(winKeys, key) === -1) {\n context[key] = win[key];\n }\n });\n\n forEach(globals, function (key) {\n if (!(key in context)) {\n defineProp(context, key, win[key]);\n }\n });\n \n document.body.removeChild(iframe);\n \n return res;\n};\n\nScript.prototype.runInThisContext = function () {\n return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n var ctx = Script.createContext(context);\n var res = this.runInContext(ctx);\n\n if (context) {\n forEach(Object_keys(ctx), function (key) {\n context[key] = ctx[key];\n });\n }\n\n return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n exports[name] = Script[name] = function (code) {\n var s = Script(code);\n return s[name].apply(s, [].slice.call(arguments, 1));\n };\n});\n\nexports.isContext = function (context) {\n return context instanceof Context;\n};\n\nexports.createScript = function (code) {\n return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n var copy = new Context();\n if(typeof context === 'object') {\n forEach(Object_keys(context), function (key) {\n copy[key] = context[key];\n });\n }\n return copy;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HistoryGraph = void 0;\nrequire(\"d3-transition\");\nconst d3_color_1 = require(\"d3-color\");\nconst d3_scale_1 = require(\"d3-scale\");\nconst d3_scale_chromatic_1 = require(\"d3-scale-chromatic\");\nconst d3_selection_1 = require(\"d3-selection\");\nconst d3_zoom_1 = require(\"d3-zoom\");\nconst fs = require(\"file-saver\");\nclass HistoryGraph {\n constructor(graphId, div, config = {}) {\n this.nodes = [];\n this.versionNodes = [];\n this.edges = [];\n this.maxX = 0;\n this.maxY = 0;\n this.maxId = 0;\n this.i = 0;\n var defaultConfig = {\n customSelectNode: (g, d) => false,\n customCtrlClick: (g, d) => false,\n customForm: (g, form) => null,\n customSize: (g) => [g.config.width, g.config.height],\n customWindowTabCommand: (trialIdSimplified, trialId, command) => false,\n hintMessage: \"Ctrl+Shift click or ⌘+Shift click to diff trials\",\n width: 200,\n height: 100,\n radius: 20,\n moveX: 20,\n moveY: 25,\n moveY2: 10,\n spacing: 17,\n margin: 50,\n fontSize: 10,\n useTooltip: false,\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.graphId = graphId;\n this.zoom = (0, d3_zoom_1.zoom)()\n .on(\"zoom\", (event) => {\n return this.zoomFunction(event);\n })\n .on(\"start\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"move\"))\n .on(\"end\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"auto\"))\n .wheelDelta(function () {\n const e = event;\n return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000;\n });\n this.div = (0, d3_selection_1.select)(div);\n let form = (0, d3_selection_1.select)(div)\n .append(\"form\")\n .classed(\"history-toolbar\", true);\n this.svg = (0, d3_selection_1.select)(div)\n .append(\"div\")\n .append(\"svg\")\n .attr(\"width\", this.config.width)\n .attr(\"height\", this.config.height)\n .call(this.zoom)\n .on(\"mouseup\", () => this.svgMouseUp());\n this.state = {\n selectedNode: null,\n mouseDownNode: null,\n justScale: false\n };\n // Tooltip\n this.tooltipDiv = (0, d3_selection_1.select)(\"body\").append(\"div\")\n .classed(\"now-tooltip now-history-tooltip\", true)\n .style(\"opacity\", 0)\n .style(\"max-width\", \"250px\")\n .on(\"mouseout\", () => {\n this.closeTooltip();\n });\n this.createToolbar(form);\n this.createMarker('end-arrow', 'endarrow', '#000');\n this.g = this.svg.append(\"g\")\n .attr(\"id\", this._graphId())\n .attr(\"transform\", \"translate(0,0)\")\n .classed('HistoryGraph', true);\n }\n createToolbar(form) {\n let formdiv = form.append(\"div\")\n .classed(\"buttons\", true);\n this.config.customForm(this, formdiv);\n // Reset zoom\n formdiv.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + this.graphId + \"-history-zoom\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Restore zoom\")\n .on(\"click\", () => this.restorePosition())\n .append(\"i\")\n .classed(\"fa fa-eye\", true);\n // Toggle Tooltips\n let tooltipsToggle = formdiv.append(\"input\")\n .attr(\"id\", \"history-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-tooltips\")\n .attr(\"value\", \"show\")\n .property(\"checked\", this.config.useTooltip)\n .on(\"change\", () => {\n this.closeTooltip();\n this.config.useTooltip = tooltipsToggle.property(\"checked\");\n });\n formdiv.append(\"label\")\n .attr(\"for\", \"history-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"title\", \"Show tooltips on mouse hover\")\n .append(\"i\")\n .classed(\"fa fa-comment\", true);\n // Download SVG\n formdiv.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + this.graphId + \"-download\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Download graph SVG\")\n .on(\"click\", () => {\n this.download();\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n // Set Font Size\n let fontToggle = formdiv.append(\"input\")\n .attr(\"id\", \"history-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-fonts\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = fontToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n fontSize.style(\"display\", display);\n });\n formdiv.append(\"label\")\n .attr(\"for\", \"history-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"title\", \"Set font size\")\n .append(\"i\")\n .classed(\"fa fa-font\", true);\n let fontSize = formdiv.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.fontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node font size\")\n .on(\"change\", () => {\n this.config.fontSize = fontSize.property(\"value\");\n this.svg.selectAll(\"text.trial-id\")\n .attr(\"font-size\", this.config.fontSize);\n });\n // Submit\n formdiv.append(\"input\")\n .attr(\"type\", \"submit\")\n .attr(\"name\", \"prevent-enter\")\n .attr(\"onclick\", \"return false;\")\n .style(\"display\", \"none\");\n formdiv.append(\"div\");\n formdiv.append(\"div\")\n .text(this.config.hintMessage)\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n }\n load(data) {\n let nodes = [], otherNodes = [], edges = [], spacing = this.config.spacing, margin = this.config.margin;\n let spacing2 = 2 * spacing, spacing4 = 4 * spacing, start = margin, max = 0, id = 0, last = data.nodes.length - 1, tid = 0, useVersion = false;\n let levels = [];\n for (var i = 0; i <= last; i++) {\n let node = data.nodes[i];\n var previous = levels[node.level];\n if (previous == undefined) {\n previous = -1;\n }\n var trials = node.trials;\n if (trials == undefined) {\n trials = [];\n }\n levels[node.level] = Math.max(previous, trials.length);\n }\n let levelsy = [];\n var current = margin;\n for (var i = 0; i <= levels.length; i++) {\n levelsy[i] = current;\n current += spacing2 + levels[i] * spacing2;\n }\n for (var i = 0; i <= last; i++) {\n let node = data.nodes[i];\n let x = start + spacing4 * id;\n let y = levelsy[node.level];\n var new_node = {\n id: id,\n display: node.display,\n x: x,\n y: y,\n title: node.id.toString(),\n info: node,\n radius: this.config.radius,\n gradient: false,\n status: node.status\n };\n nodes.push(new_node);\n if (typeof (node.trials) != \"undefined\") {\n useVersion = true;\n for (var j = 0; j < node.trials.length; j++) {\n let trialNode = node.trials[j];\n let ny = y + (j + 1) * spacing2 + spacing;\n otherNodes.push({\n id: tid,\n display: trialNode.display,\n x: x + this.config.radius / 2,\n y: ny,\n title: trialNode.id.toString(),\n info: trialNode,\n tooltip: trialNode.tooltip,\n radius: this.config.radius / 2,\n gradient: true,\n status: trialNode.status\n });\n tid += 1;\n max = Math.max(max, y);\n }\n }\n else {\n new_node.tooltip = node.tooltip;\n }\n max = Math.max(max, y);\n this.maxX = x;\n id += 1;\n }\n max += spacing2;\n this.maxY = max;\n this.maxId = Math.max(tid, id);\n for (var i = 0; i < data.edges.length; i++) {\n let edge = Object.assign({}, data.edges[i]);\n edge.id = edge.source + \"-\" + edge.target;\n edge.source = nodes[edge.source];\n edge.target = nodes[edge.target];\n if (edge.source != edge.target) {\n edges.push(edge);\n }\n }\n if (useVersion) {\n this.nodes = otherNodes;\n this.versionNodes = nodes;\n }\n else {\n this.nodes = nodes;\n this.versionNodes = [];\n }\n this.edges = edges;\n this.updateWindow();\n this.restorePosition();\n this.update();\n this.menuOnRightClick();\n return nodes;\n }\n updateWindow() {\n let size = this.config.customSize(this);\n this.config.width = size[0];\n this.config.height = size[1];\n this.svg\n .attr(\"width\", size[0])\n .attr(\"height\", size[1]);\n }\n update() {\n var nodes = this.g.selectAll('g.node')\n .data(this.nodes, (d) => d.id);\n var edges = this.g.selectAll('g.link')\n .data(this.edges, (d) => d.id);\n var version = this.g.selectAll('g.version')\n .data(this.versionNodes, (d) => d.id);\n this.updateNodes(nodes);\n this.updateVersionNodes(version);\n this.updateLinks(edges);\n }\n restorePosition() {\n let scale = this.config.height / this.maxY;\n if (scale <= 1.0) {\n this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity\n .translate(this.config.width\n - this.maxX * scale\n - this.config.margin, 0)\n .scale(scale));\n }\n else {\n this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity\n .scale(1)\n .translate(this.config.width\n - this.maxX\n - this.config.margin, 0));\n }\n this.state.justScale = false;\n }\n selectNode(node) {\n this.state.selectedNode = node;\n this.config.customSelectNode(this, node);\n this.svg.selectAll('.node[attr-trial=\"' + node.title + '\"] > rect')\n .attr('stroke', 'rgb(200, 238, 241)')\n .classed('selected', true);\n }\n selectTrial(trialId) {\n for (var node of this.nodes) {\n if (node.title == trialId) {\n this.selectNode(node);\n return;\n }\n }\n }\n download(name) {\n var isFileSaverSupported = false;\n try {\n isFileSaverSupported = !!new Blob();\n }\n catch (e) {\n alert(\"blob not supported\");\n }\n name = (name === undefined) ? \"history.svg\" : name;\n let gnode = this.g.node();\n var bbox = gnode.getBBox();\n var width = this.svg.attr(\"width\"), height = this.svg.attr(\"height\");\n this.g.attr(\"transform\", \"translate(\" + (-bbox.x + 5) + \", \" + (-bbox.y + 5) + \")\");\n let svgNode = this.svg\n .attr(\"title\", \"Trial\")\n .attr(\"version\", 1.1)\n .attr(\"width\", bbox.width + 10)\n .attr(\"height\", bbox.height + 10)\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node();\n var html = svgNode.parentNode.innerHTML;\n html = ' {\n if (this.state.selectedNode == null) {\n return false;\n }\n return cd.id === this.state.selectedNode.id;\n }).select('rect')\n .classed('selected', false)\n .attr(\"stroke\", \"#000\");\n this.state.selectedNode = null;\n }\n nodeMouseDown(event, d3node, d) {\n event.stopPropagation();\n this.state.mouseDownNode = d;\n this.closeTooltip();\n }\n nodeMouseUp(event, d3node, d) {\n event.stopPropagation();\n if (!this.state.mouseDownNode) {\n return;\n }\n if (this.state.justScale) {\n this.state.justScale = false;\n }\n else {\n if (event.ctrlKey || event.shiftKey || event.altKey) {\n this.config.customCtrlClick(this, d);\n return;\n }\n if (this.state.selectedNode) {\n this.unselectNode();\n }\n d3node\n .attr('stroke', 'rgb(200, 238, 241)')\n .classed('selected', true);\n this.state.selectedNode = d;\n this.config.customSelectNode(this, d);\n }\n this.state.mouseDownNode = null;\n }\n svgMouseUp() {\n if (this.state.justScale) {\n this.state.justScale = false;\n }\n }\n updateVersionNodes(nodes) {\n var nodeEnter = nodes.enter().append(\"g\")\n .classed(\"version\", true)\n .attr(\"attr-trialid\", (d) => d.title)\n .attr(\"transform\", (d) => {\n return \"translate(\" + 0 + \",\" + 0 + \")\";\n });\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n })\n .attr('width', (d) => 2 * d.radius)\n .attr('height', (d) => 2 * d.radius)\n .attr('rx', 0)\n .attr('ry', 0)\n //.attr('r', )\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\")\n .attr(\"fill\", \"#F6FBFF\")\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\");\n nodeEnter.append('text')\n .classed('trial-id', true)\n .attr('font-family', 'sans-serif')\n .attr('font-size', this.config.fontSize + 'px')\n .attr('pointer-events', 'none')\n .attr('x', (d) => d.radius)\n .attr('y', (d) => d.radius + 4)\n .attr('stroke', '#000')\n .attr('text-anchor', 'middle')\n //.attr('font-weight', 'bold')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }).text((d) => d.display);\n nodeEnter.merge(nodes); // nodeUpdate\n nodes.exit().remove(); // nodeExit\n }\n updateNodes(nodes) {\n let self = this;\n var nodeEnter = nodes.enter().append(\"g\")\n .classed(\"node\", true)\n .attr(\"attr-trialid\", (d) => d.title)\n .attr(\"cursor\", \"pointer\")\n .attr(\"transform\", (d) => {\n return \"translate(\" + 0 + \",\" + 0 + \")\";\n });\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n })\n .attr('cursor', 'pointer')\n .attr('title', (d) => d.info.display)\n .attr('width', (d) => 2 * d.radius)\n .attr('height', (d) => 2 * d.radius)\n .attr('rx', (d) => 2 * d.radius)\n .attr('ry', (d) => 2 * d.radius)\n //.attr('r', )\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\")\n .attr(\"fill\", function (d) {\n var proportion = Math.round(200 * (1.0 - (parseInt(d.title) / self.maxId)) + 50);\n if (d.status === 'unfinished') {\n return d.gradient ? (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString() : \"rgb(238, 200, 241)\";\n }\n if (d.status === 'finished') {\n return d.gradient ? (0, d3_color_1.rgb)(proportion, proportion, proportion, 255).toString() : \"#F6FBFF\";\n }\n if (d.status === 'backup') {\n return d.gradient ? (0, d3_color_1.rgb)(255, 255, proportion, 255).toString() : \"rgb(241, 238, 200)\";\n }\n return '#666';\n })\n .attr(\"stroke\", function (d) {\n return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : \"#000\";\n })\n .attr(\"stroke-width\", \"2.5px\")\n .on('mousedown', function (event, d) {\n self.nodeMouseDown(event, (0, d3_selection_1.select)(this), d);\n }).on('click', function (event, d) {\n self.nodeMouseUp(event, (0, d3_selection_1.select)(this), d);\n }).on('mouseover', function (event, d) {\n if (!self.state.mouseDownNode && self.config.useTooltip) {\n self.closeTooltip();\n self.showTooltip(event, d);\n }\n (0, d3_selection_1.select)(this)\n .attr('stroke', 'rgb(200, 238, 241)');\n }).on('mouseout', function (event, d) {\n (0, d3_selection_1.select)(this)\n .attr(\"stroke\", (d) => {\n return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : \"#000\";\n });\n })\n .classed(\"custom-menu\", true);\n nodeEnter.append('text')\n .classed('trial-id', true)\n .attr('font-family', 'sans-serif')\n .attr('font-size', this.config.fontSize + 'px')\n .attr('pointer-events', 'none')\n .attr('x', (d) => d.radius)\n .attr('y', (d) => d.radius + 4)\n .attr('stroke', '#000')\n .attr('text-anchor', 'middle')\n //.attr('font-weight', 'bold')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }).text((d) => d.gradient ? \"\" : d.display);\n nodeEnter.merge(nodes); // nodeUpdate\n nodes.exit().remove(); // nodeExit\n }\n updateLinks(link) {\n // Enter any new links\n let colors = (0, d3_scale_1.scaleOrdinal)(d3_scale_chromatic_1.schemeCategory10);\n var linkEnter = link.enter().insert('path', 'g')\n .classed('link', true)\n .attr('cursor', 'crosshair')\n .attr('fill', 'none')\n .attr('stroke', '#000')\n .attr('stroke-width', '4px');\n linkEnter\n .attr(\"d\", (d) => {\n var deltaX = d.target.x - d.source.x, deltaY = d.target.y - d.source.y, dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY), normX = deltaX / dist, normY = deltaY / dist, sourcePadding = this.config.radius - 5, targetPadding = this.config.radius + (d.right ? 3 : -5), sourceX = d.source.x + this.config.radius + (sourcePadding * normX), sourceY = d.source.y + this.config.radius + (sourcePadding * normY), targetX = d.target.x + this.config.radius - (targetPadding * normX), targetY = d.target.y + this.config.radius - (targetPadding * normY);\n var step = 0;\n if (d.level > 0) {\n step += this.config.moveY;\n step += (d.level - 1) * this.config.moveY2;\n }\n return `M ${sourceX}, ${sourceY}\n C ${(sourceX - this.config.moveX / 2)} ${sourceY}\n ${(sourceX - this.config.moveX / 2)} ${(sourceY + 3 * step / 4)}\n ${(sourceX - this.config.moveX)} ${(sourceY + step)}\n L ${(sourceX - this.config.moveX)} ${(sourceY + step)}\n ${(targetX + this.config.moveX)} ${(sourceY + step)}\n C ${(targetX + this.config.moveX / 2)} ${(sourceY + 3 * step / 4)}\n ${(targetX + this.config.moveX / 2)} ${sourceY}\n ${targetX}, ${targetY}`;\n })\n .attr('marker-end', (d) => {\n return d.right ? 'url(#end-arrow)' : '';\n })\n .attr('stroke', (d) => {\n return (0, d3_color_1.rgb)(colors(d.level.toString())).darker().toString();\n });\n // Update\n linkEnter.merge(link); // linkUpdate\n // Remove any exiting links\n link.exit().remove(); // linkExit\n }\n zoomFunction(event) {\n this.state.justScale = true;\n this.closeTooltip();\n this.transform = event.transform;\n this.g.attr(\"transform\", event.transform);\n }\n _graphId() {\n return \"history-graph-\" + this.graphId;\n }\n menuOnRightClick() {\n let rightClickMenu = document.getElementById(\"context-menu\");\n // Set up an event handler for the documnt right click\n document.addEventListener(\"contextmenu\", function (event) {\n var _a;\n //open right click menu\n let target = event.target;\n if (target && target.classList.contains(\"custom-menu\")) {\n event.preventDefault();\n if (rightClickMenu) {\n rightClickMenu.setAttribute(\"selected-trial\", (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute(\"attr-trialid\"));\n rightClickMenu.setAttribute(\"selected-trial-simplified\", target.getAttribute(\"title\"));\n rightClickMenu.style.top = (event.pageY - 10).toString();\n rightClickMenu.style.left = (event.pageX - 90).toString();\n rightClickMenu.style.display = \"block\";\n rightClickMenu.classList.add(\"show\");\n }\n }\n });\n // close the menu\n document.addEventListener(\"click\", function (event) {\n if (rightClickMenu) {\n rightClickMenu.style.display = \"none\";\n rightClickMenu.classList.remove(\"show\");\n }\n });\n }\n}\nexports.HistoryGraph = HistoryGraph;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./structures\"), exports);\n__exportStar(require(\"./graph\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel .lm-AccordionPanel-title {\n box-sizing: border-box;\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n min-height: 22px;\n max-height: 22px;\n min-width: 35px;\n line-height: 20px;\n margin: 0px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\n background: #dbdbdb;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\n border: 1px solid lightskyblue;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title.lm-mod-expanded\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\\\f0d8';\n font-family: FontAwesome;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\\\f0d7';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\n padding: 0px 5px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/accordionpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,sBAAsB;EACtB,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,WAAW;AACb;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;;;EAGE,8BAA8B;AAChC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title {\\n box-sizing: border-box;\\n padding: 0px 10px;\\n background: #e5e5e5;\\n border: 1px solid #c0c0c0;\\n border-bottom: none;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n min-height: 22px;\\n max-height: 22px;\\n min-width: 35px;\\n line-height: 20px;\\n margin: 0px;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\\n background: #dbdbdb;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\\n border: 1px solid lightskyblue;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title.lm-mod-expanded\\n .lm-AccordionPanel-titleCollapser:before {\\n content: '\\\\f0d8';\\n font-family: FontAwesome;\\n}\\n\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title\\n .lm-AccordionPanel-titleCollapser:before {\\n content: '\\\\f0d7';\\n font-family: FontAwesome;\\n position: absolute;\\n right: 10px;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\\n padding: 0px 5px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n font-family: sans-serif;\n background: #f5f5f5;\n}\n\n.lm-CommandPalette-search {\n padding: 8px;\n}\n\n.lm-CommandPalette-wrapper {\n padding: 4px 6px;\n background: white;\n border: 1px solid #e0e0e0;\n position: relative;\n}\n\n.lm-CommandPalette-input {\n width: 92%;\n border: none;\n outline: none;\n font-size: 16px;\n}\n\n.lm-CommandPalette-header {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n background: #e1e1e1;\n cursor: pointer;\n}\n\n.lm-CommandPalette-header:hover::before {\n content: '\\\\2026'; /* ellipsis */\n float: right;\n margin-right: 4px;\n}\n\n.lm-CommandPalette-header > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item {\n padding: 4px 8px;\n color: #757575;\n font-size: 13px;\n font-weight: 500;\n}\n\n.lm-CommandPalette-emptyMessage {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n text-align: center;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-CommandPalette-item.lm-mod-active {\n background: #7fdbff;\n}\n\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\n background: #e5e5e5;\n}\n\n.lm-CommandPalette-itemIcon {\n display: none;\n}\n\n.lm-CommandPalette-itemLabel > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled mark {\n color: rgba(0, 0, 0, 0.4);\n}\n\n.lm-CommandPalette-itemCaption {\n color: #9e9e9e;\n font-size: 11px;\n font-weight: 400;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,gBAAgB,EAAE,aAAa;EAC/B,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n font-family: sans-serif;\\n background: #f5f5f5;\\n}\\n\\n.lm-CommandPalette-search {\\n padding: 8px;\\n}\\n\\n.lm-CommandPalette-wrapper {\\n padding: 4px 6px;\\n background: white;\\n border: 1px solid #e0e0e0;\\n position: relative;\\n}\\n\\n.lm-CommandPalette-input {\\n width: 92%;\\n border: none;\\n outline: none;\\n font-size: 16px;\\n}\\n\\n.lm-CommandPalette-header {\\n padding: 4px;\\n color: #757575;\\n font-size: 12px;\\n font-weight: 600;\\n background: #e1e1e1;\\n cursor: pointer;\\n}\\n\\n.lm-CommandPalette-header:hover::before {\\n content: '\\\\2026'; /* ellipsis */\\n float: right;\\n margin-right: 4px;\\n}\\n\\n.lm-CommandPalette-header > mark {\\n background-color: transparent;\\n font-weight: bold;\\n}\\n\\n.lm-CommandPalette-item {\\n padding: 4px 8px;\\n color: #757575;\\n font-size: 13px;\\n font-weight: 500;\\n}\\n\\n.lm-CommandPalette-emptyMessage {\\n padding: 4px;\\n color: #757575;\\n font-size: 12px;\\n font-weight: 600;\\n text-align: center;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled {\\n color: rgba(0, 0, 0, 0.25);\\n}\\n\\n.lm-CommandPalette-item.lm-mod-active {\\n background: #7fdbff;\\n}\\n\\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\\n background: #e5e5e5;\\n}\\n\\n.lm-CommandPalette-itemIcon {\\n display: none;\\n}\\n\\n.lm-CommandPalette-itemLabel > mark {\\n background-color: transparent;\\n font-weight: bold;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled mark {\\n color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.lm-CommandPalette-itemCaption {\\n color: #9e9e9e;\\n font-size: 11px;\\n font-weight: 400;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DataGrid {\n min-width: 64px;\n min-height: 64px;\n border: 1px solid #a0a0a0;\n}\n\n.lm-DataGrid-scrollCorner {\n background-color: #f0f0f0;\n}\n\n.lm-DataGrid-scrollCorner::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n background-color: #a0a0a0;\n}\n\n.lm-DataGrid-cellEditorOccluder {\n pointer-events: none;\n position: absolute;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorContainer {\n pointer-events: auto;\n position: absolute;\n background-color: #ffffff;\n box-sizing: border-box;\n box-shadow: 0px 0px 6px #006bf7;\n border: 2px solid #006bf7;\n}\n\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\n box-shadow: 0px 0px 6px red;\n border: 2px solid red;\n}\n\n.lm-DataGrid-cellEditorContainer > form {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorWidget {\n width: 100%;\n height: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n.lm-DataGrid-cellEditorInput {\n background-color: #ffffff;\n border: 0;\n}\n\n.lm-DataGrid-cellEditorCheckbox {\n margin: 0;\n}\n\n.lm-DataGrid-notification {\n position: absolute;\n display: flex;\n overflow: visible;\n animation: fade-in 300ms ease-out;\n}\n\n.lm-DataGrid-notificationContainer {\n box-shadow: 0px 2px 5px #999999;\n border-radius: 3px;\n background-color: white;\n color: black;\n border: 1px solid black;\n font-family: sans-serif;\n font-size: 13px;\n padding: 4px;\n}\n\n@keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n opacity: 1;\n }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/datagrid.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E;;AAE9E;EACE,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,yBAAyB;EACzB,sBAAsB;EACtB,+BAA+B;EAC/B,yBAAyB;AAC3B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,yBAAyB;EACzB,SAAS;AACX;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,iCAAiC;AACnC;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,uBAAuB;EACvB,YAAY;EACZ,uBAAuB;EACvB,uBAAuB;EACvB,eAAe;EACf,YAAY;AACd;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,YAAY;EACd;EACA;IACE,UAAU;EACZ;AACF\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) 2014-2018, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DataGrid {\\n min-width: 64px;\\n min-height: 64px;\\n border: 1px solid #a0a0a0;\\n}\\n\\n.lm-DataGrid-scrollCorner {\\n background-color: #f0f0f0;\\n}\\n\\n.lm-DataGrid-scrollCorner::after {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 1px;\\n height: 1px;\\n background-color: #a0a0a0;\\n}\\n\\n.lm-DataGrid-cellEditorOccluder {\\n pointer-events: none;\\n position: absolute;\\n overflow: hidden;\\n}\\n\\n.lm-DataGrid-cellEditorContainer {\\n pointer-events: auto;\\n position: absolute;\\n background-color: #ffffff;\\n box-sizing: border-box;\\n box-shadow: 0px 0px 6px #006bf7;\\n border: 2px solid #006bf7;\\n}\\n\\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\\n box-shadow: 0px 0px 6px red;\\n border: 2px solid red;\\n}\\n\\n.lm-DataGrid-cellEditorContainer > form {\\n width: 100%;\\n height: 100%;\\n overflow: hidden;\\n}\\n\\n.lm-DataGrid-cellEditorWidget {\\n width: 100%;\\n height: 100%;\\n outline: none;\\n box-sizing: border-box;\\n}\\n\\n.lm-DataGrid-cellEditorInput {\\n background-color: #ffffff;\\n border: 0;\\n}\\n\\n.lm-DataGrid-cellEditorCheckbox {\\n margin: 0;\\n}\\n\\n.lm-DataGrid-notification {\\n position: absolute;\\n display: flex;\\n overflow: visible;\\n animation: fade-in 300ms ease-out;\\n}\\n\\n.lm-DataGrid-notificationContainer {\\n box-shadow: 0px 2px 5px #999999;\\n border-radius: 3px;\\n background-color: white;\\n color: black;\\n border: 1px solid black;\\n font-family: sans-serif;\\n font-size: 13px;\\n padding: 4px;\\n}\\n\\n@keyframes fade-in {\\n 0% {\\n opacity: 0;\\n }\\n 50% {\\n opacity: 0.7;\\n }\\n 100% {\\n opacity: 1;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel-overlay {\\n background: rgba(255, 255, 255, 0.6);\\n border: 1px dashed black;\\n transition-property: top, left, right, bottom;\\n transition-duration: 150ms;\\n transition-timing-function: ease;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../dragdrop/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../widgets/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./datagrid.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) 2014-2018, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n@import '@lumino/dragdrop/style/index.css';\\n@import '@lumino/widgets/style/index.css';\\n@import './accordionpanel.css';\\n@import './commandpalette.css';\\n@import './datagrid.css';\\n@import './dockpanel.css';\\n@import './menu.css';\\n@import './menubar.css';\\n@import './scrollbar.css';\\n@import './tabbar.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n padding: 3px 0px;\n background: white;\n color: rgba(0, 0, 0, 0.87);\n border: 1px solid #c0c0c0;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-Menu-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-Menu-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-Menu-itemIcon {\n width: 21px;\n padding: 4px 2px;\n}\n\n.lm-Menu-itemLabel {\n padding: 4px 35px 4px 2px;\n}\n\n.lm-Menu-itemMnemonic {\n text-decoration: underline;\n}\n\n.lm-Menu-itemShortcut {\n padding: 4px 0px;\n}\n\n.lm-Menu-itemSubmenuIcon {\n width: 16px;\n padding: 4px 0px;\n}\n\n.lm-Menu-item[data-type='separator'] > div {\n padding: 0;\n height: 9px;\n}\n\n.lm-Menu-item[data-type='separator'] > div::after {\n content: '';\n display: block;\n position: relative;\n top: 4px;\n border-top: 1px solid #dddddd;\n}\n\n.lm-Menu-itemIcon::before,\n.lm-Menu-itemSubmenuIcon::before {\n font-family: FontAwesome;\n}\n\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\n content: '\\\\f00c';\n}\n\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\n content: '\\\\f0da';\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;EAC1B,yBAAyB;EACzB;;;cAGY;EACZ,0CAA0C;AAC5C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,WAAW;AACb;;AAEA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,6BAA6B;AAC/B;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n padding: 3px 0px;\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n border: 1px solid #c0c0c0;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\\n}\\n\\n.lm-Menu-item.lm-mod-active {\\n background: #e5e5e5;\\n}\\n\\n.lm-Menu-item.lm-mod-disabled {\\n color: rgba(0, 0, 0, 0.25);\\n}\\n\\n.lm-Menu-itemIcon {\\n width: 21px;\\n padding: 4px 2px;\\n}\\n\\n.lm-Menu-itemLabel {\\n padding: 4px 35px 4px 2px;\\n}\\n\\n.lm-Menu-itemMnemonic {\\n text-decoration: underline;\\n}\\n\\n.lm-Menu-itemShortcut {\\n padding: 4px 0px;\\n}\\n\\n.lm-Menu-itemSubmenuIcon {\\n width: 16px;\\n padding: 4px 0px;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div {\\n padding: 0;\\n height: 9px;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div::after {\\n content: '';\\n display: block;\\n position: relative;\\n top: 4px;\\n border-top: 1px solid #dddddd;\\n}\\n\\n.lm-Menu-itemIcon::before,\\n.lm-Menu-itemSubmenuIcon::before {\\n font-family: FontAwesome;\\n}\\n\\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\\n content: '\\\\f00c';\\n}\\n\\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\\n content: '\\\\f0da';\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n padding-left: 5px;\n background: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n border-bottom: 1px solid #dddddd;\n font:\n 13px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-MenuBar-menu {\n transform: translateY(-1px);\n}\n\n.lm-MenuBar-item {\n padding: 4px 8px;\n border-left: 1px solid transparent;\n border-right: 1px solid transparent;\n}\n\n.lm-MenuBar-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\n z-index: 10001;\n background: white;\n border-left: 1px solid #c0c0c0;\n border-right: 1px solid #c0c0c0;\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-MenuBar-item:focus-visible {\n outline: 2px solid #333;\n outline-offset: -2px;\n}\n\n.lm-MenuBar-item[aria-disabled='true'] {\n color: rgba(0, 0, 0, 0.37);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/menubar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,iBAAiB;EACjB,mBAAmB;EACnB,0BAA0B;EAC1B,gCAAgC;EAChC;;;cAGY;AACd;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,kCAAkC;EAClC,mCAAmC;AACrC;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,iBAAiB;EACjB,8BAA8B;EAC9B,+BAA+B;EAC/B,0CAA0C;AAC5C;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,0BAA0B;AAC5B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n padding-left: 5px;\\n background: #fafafa;\\n color: rgba(0, 0, 0, 0.87);\\n border-bottom: 1px solid #dddddd;\\n font:\\n 13px Helvetica,\\n Arial,\\n sans-serif;\\n}\\n\\n.lm-MenuBar-menu {\\n transform: translateY(-1px);\\n}\\n\\n.lm-MenuBar-item {\\n padding: 4px 8px;\\n border-left: 1px solid transparent;\\n border-right: 1px solid transparent;\\n}\\n\\n.lm-MenuBar-item.lm-mod-active {\\n background: #e5e5e5;\\n}\\n\\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\\n z-index: 10001;\\n background: white;\\n border-left: 1px solid #c0c0c0;\\n border-right: 1px solid #c0c0c0;\\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\\n}\\n\\n.lm-MenuBar-item:focus-visible {\\n outline: 2px solid #333;\\n outline-offset: -2px;\\n}\\n\\n.lm-MenuBar-item[aria-disabled='true'] {\\n color: rgba(0, 0, 0, 0.37);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/caretleft.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"../images/caretright.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"../images/caretup.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"../images/caretdown.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n min-height: 16px;\n max-height: 16px;\n min-width: 45px;\n border-top: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n min-width: 16px;\n max-width: 16px;\n min-height: 45px;\n border-left: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar-button {\n background-color: #f0f0f0;\n background-position: center center;\n min-height: 15px;\n max-height: 15px;\n min-width: 15px;\n max-width: 15px;\n}\n\n.lm-ScrollBar-button:hover {\n background-color: #dadada;\n}\n\n.lm-ScrollBar-button.lm-mod-active {\n background-color: #cdcdcd;\n}\n\n.lm-ScrollBar-track {\n background: #f0f0f0;\n}\n\n.lm-ScrollBar-thumb {\n background: #cdcdcd;\n}\n\n.lm-ScrollBar-thumb:hover {\n background: #bababa;\n}\n\n.lm-ScrollBar-thumb.lm-mod-active {\n background: #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\n height: 100%;\n min-width: 15px;\n border-left: 1px solid #a0a0a0;\n border-right: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\n width: 100%;\n min-height: 15px;\n border-top: 1px solid #a0a0a0;\n border-bottom: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___});\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___});\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___});\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___});\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,8BAA8B;AAChC;;AAEA;EACE,yBAAyB;EACzB,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,gCAAgC;AAClC;;AAEA;;EAEE,yDAA8C;AAChD;;AAEA;;EAEE,yDAA+C;AACjD;;AAEA;;EAEE,yDAA4C;AAC9C;;AAEA;;EAEE,yDAA8C;AAChD\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n min-height: 16px;\\n max-height: 16px;\\n min-width: 45px;\\n border-top: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n min-width: 16px;\\n max-width: 16px;\\n min-height: 45px;\\n border-left: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar-button {\\n background-color: #f0f0f0;\\n background-position: center center;\\n min-height: 15px;\\n max-height: 15px;\\n min-width: 15px;\\n max-width: 15px;\\n}\\n\\n.lm-ScrollBar-button:hover {\\n background-color: #dadada;\\n}\\n\\n.lm-ScrollBar-button.lm-mod-active {\\n background-color: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-track {\\n background: #f0f0f0;\\n}\\n\\n.lm-ScrollBar-thumb {\\n background: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-thumb:hover {\\n background: #bababa;\\n}\\n\\n.lm-ScrollBar-thumb.lm-mod-active {\\n background: #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\\n height: 100%;\\n min-width: 15px;\\n border-left: 1px solid #a0a0a0;\\n border-right: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\\n width: 100%;\\n min-height: 15px;\\n border-top: 1px solid #a0a0a0;\\n border-bottom: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n .lm-ScrollBar-button[data-action='decrement'] {\\n background-image: url(../images/caretleft.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n .lm-ScrollBar-button[data-action='increment'] {\\n background-image: url(../images/caretright.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n .lm-ScrollBar-button[data-action='decrement'] {\\n background-image: url(../images/caretup.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n .lm-ScrollBar-button[data-action='increment'] {\\n background-image: url(../images/caretdown.png);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.lm-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab {\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n flex: 0 1 125px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n padding: 0px;\n border: 0px;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n background: white;\n}\n\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\n background: #f0f0f0;\n}\n\n.lm-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabLabel,\n.lm-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n.lm-TabBar .lm-TabBar-addButton {\n padding: 0px 6px;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\n content: '\\\\f00d';\n font-family: FontAwesome;\n}\n\n.lm-TabBar .lm-TabBar-addButton:before {\n content: '\\\\f067';\n font-family: FontAwesome;\n}\n\n.lm-TabBar-tab.lm-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX;;;cAGY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;AAEA;;;EAGE,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;AAC5C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar {\\n min-height: 24px;\\n max-height: 24px;\\n}\\n\\n.lm-TabBar-content {\\n min-width: 0;\\n min-height: 0;\\n align-items: flex-end;\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-TabBar-tab {\\n padding: 0px 10px;\\n background: #e5e5e5;\\n border: 1px solid #c0c0c0;\\n border-bottom: none;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n flex: 0 1 125px;\\n min-height: 20px;\\n max-height: 20px;\\n min-width: 35px;\\n margin-left: -1px;\\n line-height: 20px;\\n}\\n\\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\\n padding: 0px;\\n border: 0px;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n}\\n\\n.lm-TabBar-tab.lm-mod-current {\\n background: white;\\n}\\n\\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\\n background: #f0f0f0;\\n}\\n\\n.lm-TabBar-tab:first-child {\\n margin-left: 0;\\n}\\n\\n.lm-TabBar-tab.lm-mod-current {\\n min-height: 23px;\\n max-height: 23px;\\n transform: translateY(1px);\\n}\\n\\n.lm-TabBar-tabIcon,\\n.lm-TabBar-tabLabel,\\n.lm-TabBar-tabCloseIcon {\\n display: inline-block;\\n}\\n\\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\\n margin-left: 4px;\\n}\\n\\n.lm-TabBar .lm-TabBar-addButton {\\n padding: 0px 6px;\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\\n content: '\\\\f00d';\\n font-family: FontAwesome;\\n}\\n\\n.lm-TabBar .lm-TabBar-addButton:before {\\n content: '\\\\f067';\\n font-family: FontAwesome;\\n}\\n\\n.lm-TabBar-tab.lm-mod-drag-image {\\n min-height: 23px;\\n max-height: 23px;\\n min-width: 125px;\\n border: none;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-cursor-backdrop {\n top: 0px;\n left: 0px;\n position: fixed;\n width: 200px;\n height: 200px;\n margin-top: -100px;\n margin-left: -100px;\n will-change: transform;\n z-index: 100;\n scrollbar-width: none;\n -ms-overflow-style: none;\n overflow: scroll;\n}\n\n.lm-cursor-backdrop::after {\n content: '';\n height: 1200px;\n width: 1200px;\n display: block;\n}\n\n.lm-cursor-backdrop::-webkit-scrollbar {\n display: none;\n}\n\n.lm-mod-drag-image {\n top: 0px;\n left: 0px;\n will-change: transform;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/dragdrop/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,QAAQ;EACR,SAAS;EACT,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,wBAAwB;EACxB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,SAAS;EACT,sBAAsB;AACxB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-cursor-backdrop {\\n top: 0px;\\n left: 0px;\\n position: fixed;\\n width: 200px;\\n height: 200px;\\n margin-top: -100px;\\n margin-left: -100px;\\n will-change: transform;\\n z-index: 100;\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n overflow: scroll;\\n}\\n\\n.lm-cursor-backdrop::after {\\n content: '';\\n height: 1200px;\\n width: 1200px;\\n display: block;\\n}\\n\\n.lm-cursor-backdrop::-webkit-scrollbar {\\n display: none;\\n}\\n\\n.lm-mod-drag-image {\\n top: 0px;\\n left: 0px;\\n will-change: transform;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\n /* Title is rotated for horizontal accordion panel using CSS */\n display: block;\n transform-origin: top left;\n transform: rotate(-90deg) translate(-100%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/accordionpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\\n /* Title is rotated for horizontal accordion panel using CSS */\\n display: block;\\n transform-origin: top left;\\n transform: rotate(-90deg) translate(-100%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n display: flex;\n flex-direction: column;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-CommandPalette-search {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-content {\n flex: 1 1 auto;\n margin: 0;\n padding: 0;\n min-height: 0;\n overflow: auto;\n list-style-type: none;\n}\n\n.lm-CommandPalette-header {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-CommandPalette-item {\n display: flex;\n flex-direction: row;\n}\n\n.lm-CommandPalette-itemIcon {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemContent {\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.lm-CommandPalette-itemShortcut {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemLabel {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-close-icon {\n border: 1px solid transparent;\n background-color: transparent;\n position: absolute;\n z-index: 1;\n right: 3%;\n top: 0;\n bottom: 0;\n margin: auto;\n padding: 7px 0;\n display: none;\n vertical-align: middle;\n outline: 0;\n cursor: pointer;\n}\n.lm-close-icon:after {\n content: 'X';\n display: block;\n width: 15px;\n height: 15px;\n text-align: center;\n color: #000;\n font-weight: normal;\n font-size: 12px;\n cursor: pointer;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;EAC7B,6BAA6B;EAC7B,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACZ,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,eAAe;AACjB;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,eAAe;AACjB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n display: flex;\\n flex-direction: column;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-CommandPalette-search {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-content {\\n flex: 1 1 auto;\\n margin: 0;\\n padding: 0;\\n min-height: 0;\\n overflow: auto;\\n list-style-type: none;\\n}\\n\\n.lm-CommandPalette-header {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n\\n.lm-CommandPalette-item {\\n display: flex;\\n flex-direction: row;\\n}\\n\\n.lm-CommandPalette-itemIcon {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemContent {\\n flex: 1 1 auto;\\n overflow: hidden;\\n}\\n\\n.lm-CommandPalette-itemShortcut {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemLabel {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n\\n.lm-close-icon {\\n border: 1px solid transparent;\\n background-color: transparent;\\n position: absolute;\\n z-index: 1;\\n right: 3%;\\n top: 0;\\n bottom: 0;\\n margin: auto;\\n padding: 7px 0;\\n display: none;\\n vertical-align: middle;\\n outline: 0;\\n cursor: pointer;\\n}\\n.lm-close-icon:after {\\n content: 'X';\\n display: block;\\n width: 15px;\\n height: 15px;\\n text-align: center;\\n color: #000;\\n font-weight: normal;\\n font-size: 12px;\\n cursor: pointer;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel {\n z-index: 0;\n}\n\n.lm-DockPanel-widget {\n z-index: 0;\n}\n\n.lm-DockPanel-tabBar {\n z-index: 1;\n}\n\n.lm-DockPanel-handle {\n z-index: 2;\n}\n\n.lm-DockPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-DockPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal'] {\n cursor: ew-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='vertical'] {\n cursor: ns-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-DockPanel-handle[data-orientation='vertical']:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n\n.lm-DockPanel-overlay {\n z-index: 3;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n.lm-DockPanel-overlay.lm-mod-hidden {\n display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B;;AAEA;EACE,UAAU;EACV,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel {\\n z-index: 0;\\n}\\n\\n.lm-DockPanel-widget {\\n z-index: 0;\\n}\\n\\n.lm-DockPanel-tabBar {\\n z-index: 1;\\n}\\n\\n.lm-DockPanel-handle {\\n z-index: 2;\\n}\\n\\n.lm-DockPanel-handle.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-DockPanel-handle:after {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n content: '';\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal'] {\\n cursor: ew-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical'] {\\n cursor: ns-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\\n left: 50%;\\n min-width: 8px;\\n transform: translateX(-50%);\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical']:after {\\n top: 50%;\\n min-height: 8px;\\n transform: translateY(-50%);\\n}\\n\\n.lm-DockPanel-overlay {\\n z-index: 3;\\n box-sizing: border-box;\\n pointer-events: none;\\n}\\n\\n.lm-DockPanel-overlay.lm-mod-hidden {\\n display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./widget.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./splitpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabpanel.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n@import './widget.css';\\n@import './accordionpanel.css';\\n@import './commandpalette.css';\\n@import './dockpanel.css';\\n@import './menu.css';\\n@import './menubar.css';\\n@import './scrollbar.css';\\n@import './splitpanel.css';\\n@import './tabbar.css';\\n@import './tabpanel.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n z-index: 10000;\n position: absolute;\n white-space: nowrap;\n overflow-x: hidden;\n overflow-y: auto;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-Menu-content {\n margin: 0;\n padding: 0;\n display: table;\n list-style-type: none;\n}\n\n.lm-Menu-item {\n display: table-row;\n}\n\n.lm-Menu-item.lm-mod-hidden,\n.lm-Menu-item.lm-mod-collapsed {\n display: none !important;\n}\n\n.lm-Menu-itemIcon,\n.lm-Menu-itemSubmenuIcon {\n display: table-cell;\n text-align: center;\n}\n\n.lm-Menu-itemLabel {\n display: table-cell;\n text-align: left;\n}\n\n.lm-Menu-itemShortcut {\n display: table-cell;\n text-align: right;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;;EAEE,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n z-index: 10000;\\n position: absolute;\\n white-space: nowrap;\\n overflow-x: hidden;\\n overflow-y: auto;\\n outline: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-Menu-content {\\n margin: 0;\\n padding: 0;\\n display: table;\\n list-style-type: none;\\n}\\n\\n.lm-Menu-item {\\n display: table-row;\\n}\\n\\n.lm-Menu-item.lm-mod-hidden,\\n.lm-Menu-item.lm-mod-collapsed {\\n display: none !important;\\n}\\n\\n.lm-Menu-itemIcon,\\n.lm-Menu-itemSubmenuIcon {\\n display: table-cell;\\n text-align: center;\\n}\\n\\n.lm-Menu-itemLabel {\\n display: table-cell;\\n text-align: left;\\n}\\n\\n.lm-Menu-itemShortcut {\\n display: table-cell;\\n text-align: right;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-MenuBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n list-style-type: none;\n}\n\n.lm-MenuBar-item {\n box-sizing: border-box;\n}\n\n.lm-MenuBar-itemIcon,\n.lm-MenuBar-itemLabel {\n display: inline-block;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/menubar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,qBAAqB;AACvB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n outline: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-MenuBar-content {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex-direction: row;\\n list-style-type: none;\\n}\\n\\n.lm-MenuBar-item {\\n box-sizing: border-box;\\n}\\n\\n.lm-MenuBar-itemIcon,\\n.lm-MenuBar-itemLabel {\\n display: inline-block;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n flex-direction: row;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n flex-direction: column;\n}\n\n.lm-ScrollBar-button {\n box-sizing: border-box;\n flex: 0 0 auto;\n}\n\n.lm-ScrollBar-track {\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.lm-ScrollBar-thumb {\n box-sizing: border-box;\n position: absolute;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;AACpB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-ScrollBar {\\n display: flex;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n flex-direction: row;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n flex-direction: column;\\n}\\n\\n.lm-ScrollBar-button {\\n box-sizing: border-box;\\n flex: 0 0 auto;\\n}\\n\\n.lm-ScrollBar-track {\\n box-sizing: border-box;\\n position: relative;\\n overflow: hidden;\\n flex: 1 1 auto;\\n}\\n\\n.lm-ScrollBar-thumb {\\n box-sizing: border-box;\\n position: absolute;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-SplitPanel-child {\n z-index: 0;\n}\n\n.lm-SplitPanel-handle {\n z-index: 1;\n}\n\n.lm-SplitPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-SplitPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\n cursor: ew-resize;\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\n cursor: ns-resize;\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/splitpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-SplitPanel-child {\\n z-index: 0;\\n}\\n\\n.lm-SplitPanel-handle {\\n z-index: 1;\\n}\\n\\n.lm-SplitPanel-handle.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-SplitPanel-handle:after {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n content: '';\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\\n cursor: ew-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\\n cursor: ns-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\\n left: 50%;\\n min-width: 8px;\\n transform: translateX(-50%);\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\\n top: 50%;\\n min-height: 8px;\\n transform: translateY(-50%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] {\n flex-direction: row;\n align-items: flex-end;\n}\n\n.lm-TabBar[data-orientation='vertical'] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n.lm-TabBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex: 1 1 auto;\n list-style-type: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\n flex-direction: row;\n}\n\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\n flex-direction: column;\n}\n\n.lm-TabBar-tab {\n display: flex;\n flex-direction: row;\n box-sizing: border-box;\n overflow: hidden;\n touch-action: none; /* Disable native Drag/Drop */\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabCloseIcon {\n flex: 0 0 auto;\n}\n\n.lm-TabBar-tabLabel {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n}\n\n.lm-TabBar-tab.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar-addButton.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\n position: relative;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\n left: 0;\n transition: left 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\n top: 0;\n transition: top 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\n transition: none;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n background: inherit;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB,EAAE,6BAA6B;AACnD;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,OAAO;EACP,2BAA2B;AAC7B;;AAEA;EACE,MAAM;EACN,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;EACtB,mBAAmB;AACrB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar {\\n display: flex;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] {\\n flex-direction: row;\\n align-items: flex-end;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] {\\n flex-direction: column;\\n align-items: flex-end;\\n}\\n\\n.lm-TabBar-content {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex: 1 1 auto;\\n list-style-type: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\\n flex-direction: row;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\\n flex-direction: column;\\n}\\n\\n.lm-TabBar-tab {\\n display: flex;\\n flex-direction: row;\\n box-sizing: border-box;\\n overflow: hidden;\\n touch-action: none; /* Disable native Drag/Drop */\\n}\\n\\n.lm-TabBar-tabIcon,\\n.lm-TabBar-tabCloseIcon {\\n flex: 0 0 auto;\\n}\\n\\n.lm-TabBar-tabLabel {\\n flex: 1 1 auto;\\n overflow: hidden;\\n white-space: nowrap;\\n}\\n\\n.lm-TabBar-tabInput {\\n user-select: all;\\n width: 100%;\\n box-sizing: border-box;\\n}\\n\\n.lm-TabBar-tab.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-TabBar-addButton.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\\n position: relative;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\\n left: 0;\\n transition: left 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\\n top: 0;\\n transition: top 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\\n transition: none;\\n}\\n\\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\\n user-select: all;\\n width: 100%;\\n box-sizing: border-box;\\n background: inherit;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabPanel-tabBar {\n z-index: 1;\n}\n\n.lm-TabPanel-stackedPanel {\n z-index: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/tabpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabPanel-tabBar {\\n z-index: 1;\\n}\\n\\n.lm-TabPanel-stackedPanel {\\n z-index: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Widget {\n box-sizing: border-box;\n position: relative;\n}\n\n.lm-Widget.lm-mod-hidden {\n display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/widget.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Widget {\\n box-sizing: border-box;\\n position: relative;\\n}\\n\\n.lm-Widget.lm-mod-hidden {\\n display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.history-toolbar {\n float: left;\n overflow: none;\n z-index: 3;\n position: absolute;\n}\n\n.history-toolbar .buttons {\n height: 30px;\n display: inline-block;\n margin-left: 8px;\n}\n\n.history-toolbar .buttons > input {\n height: 30px;\n}\n\n.history-toolbar .buttons > input[type=checkbox] {\n display: none\n}\n\n.history-toolbar .buttons > label, .history-toolbar > div > a {\n margin: 8px 8px 8px 0;\n}\n\n.history-toolbar .buttons > input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.history-toolbar .buttons > a.toollink,\n.history-toolbar .buttons > a.toollink:link,\n.history-toolbar .buttons > a.toollink:visited {\n color: black;\n}\n\n.history-toolbar .buttons > a.toollink:active {\n color: blue;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../history/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,WAAW;IACX,cAAc;IACd,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;IAGI,YAAY;AAChB;;AAEA;IACI,WAAW;AACf\",\"sourcesContent\":[\".history-toolbar {\\n float: left;\\n overflow: none;\\n z-index: 3;\\n position: absolute;\\n}\\n\\n.history-toolbar .buttons {\\n height: 30px;\\n display: inline-block;\\n margin-left: 8px;\\n}\\n\\n.history-toolbar .buttons > input {\\n height: 30px;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox] {\\n display: none\\n}\\n\\n.history-toolbar .buttons > label, .history-toolbar > div > a {\\n margin: 8px 8px 8px 0;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox] + label {\\n display:inline-block;\\n color: black;\\n cursor: pointer;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\\n color: blue;\\n}\\n\\n.history-toolbar .buttons > a.toollink,\\n.history-toolbar .buttons > a.toollink:link,\\n.history-toolbar .buttons > a.toollink:visited {\\n color: black;\\n}\\n\\n.history-toolbar .buttons > a.toollink:active {\\n color: blue;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_5___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_6___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_7___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*!\n * Bootstrap v4.0.0 (https://getbootstrap.com)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\\\2014 \\\\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\"\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___})}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_2___})}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(${___CSS_LOADER_URL_REPLACEMENT_3___}) no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_4___})}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_5___})}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_6___})}.carousel-control-next-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_7___})}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\n/*# sourceMappingURL=bootstrap.min.css.map */`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/bootstrap.min.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"/*!\\n * Bootstrap v4.0.0 (https://getbootstrap.com)\\n * Copyright 2011-2018 The Bootstrap Authors\\n * Copyright 2011-2018 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\\\"-1\\\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\\\"\\\\2014 \\\\00A0\\\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\\\"\\\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\\\"\\\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\\\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\\\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\\\"1\\\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\\\"Browse\\\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\\\"Browse\\\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\\\"\\\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\\\"/\\\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\\\"\\\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\\\")}.carousel-control-next-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\\\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\\\"\\\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\\\"\\\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\\\" (\\\" attr(title) \\\")\\\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\\n/*# sourceMappingURL=bootstrap.min.css.map */\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.history-content,\n.history-content .sub-content,\n.history-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.history-content .filter .internal {\n margin: 4px 8px;\n}\n\n.history-content .filter {\n}\n\n.history-content .filter input, .history-content .filter label {\n vertical-align: top;\n display: inline-block;\n}\n\n\n.history-content .graph-attr {\n\tdisplay: inline-block;\n\tmargin-right: 5px;\n}\n\n.history-content .graph-attr input, .history-content .graph-attr label {\n vertical-align: middle;\n display: inline-block;\n}\n\n.history-content .select-style {\n width: 170px;\n margin-right: 5px;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/history.css\"],\"names\":[],\"mappings\":\"AAEA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,eAAe;AACnB;;AAEA;AACA;;AAEA;IACI,mBAAmB;IACnB,qBAAqB;AACzB;;;AAGA;CACC,qBAAqB;CACrB,iBAAiB;AAClB;;AAEA;IACI,sBAAsB;IACtB,qBAAqB;AACzB;;AAEA;IACI,YAAY;IACZ,iBAAiB;AACrB\",\"sourcesContent\":[\"@import '~@noworkflow/history/style/index.css';\\n\\n.history-content,\\n.history-content .sub-content,\\n.history-content .sub-content > div {\\n overflow: hidden !important;\\n}\\n\\n.history-content .filter .internal {\\n margin: 4px 8px;\\n}\\n\\n.history-content .filter {\\n}\\n\\n.history-content .filter input, .history-content .filter label {\\n vertical-align: top;\\n display: inline-block;\\n}\\n\\n\\n.history-content .graph-attr {\\n\\tdisplay: inline-block;\\n\\tmargin-right: 5px;\\n}\\n\\n.history-content .graph-attr input, .history-content .graph-attr label {\\n vertical-align: middle;\\n display: inline-block;\\n}\\n\\n.history-content .select-style {\\n width: 170px;\\n margin-right: 5px;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../utils/style/shared.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../node_modules/css-loader/dist/cjs.js!../../trial/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../node_modules/css-loader/dist/cjs.js!./panel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../node_modules/css-loader/dist/cjs.js!./history.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../node_modules/css-loader/dist/cjs.js!./trial.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `body {\n font-family: \"Verdana\", \"Geneva\", \"sans-serif\";\n}\n\n.loading {\n font-size: 40px;\n}\n\n/* Link Button */\n\na.link-button {\n text-decoration: none;\n display:inline-block;\n padding: 4px 0;\n /*padding: 4px 12px;*/\n margin-bottom: 0;\n font-size: 14px;\n width: 100px;\n line-height: 15px;\n color: #333;\n text-align: center;\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\n vertical-align: middle;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\n background-repeat: repeat-x;\n border: 1px solid #ccc;\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\n border-bottom-color: #b3b3b3;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n}\n\na.link-button:active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n background-color:#e0e0e0;\n}\n\n.hide-toolbar {\n overflow: hidden;\n max-height: 0;\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 0;\n margin-bottom: 0;\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.show-toolbar {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n /*max-height: 1000px;\n overflow: hidden;*/\n}\n\n.visible {\n border-bottom: 1px solid black;\n}\n\n.info-filter input, .info-filter select {\n display: block;\n width: 250px;\n margin: 7px 0;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/index.css\"],\"names\":[],\"mappings\":\"AAQA;EACE,8CAA8C;AAChD;;AAEA;EACE,eAAe;AACjB;;AAEA,gBAAgB;;AAEhB;EACE,qBAAqB;EACrB,oBAAoB;EACpB,cAAc;CACf,qBAAqB;EACpB,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,kBAAkB;EAClB,6CAA6C;EAC7C,sBAAsB;EACtB,eAAe;EACf,yBAAyB;EACzB,wDAAwD;EACxD,4EAA4E;EAC5E,2DAA2D;EAC3D,sDAAsD;EACtD,yDAAyD;EACzD,2BAA2B;EAC3B,sBAAsB;EACtB,qCAAqC;EACrC,8DAA8D;EAC9D,4BAA4B;EAC5B,oHAAoH;EACpH,iEAAiE;EACjE,kFAAkF;EAClF,+EAA+E;EAC/E,0EAA0E;AAC5E;;AAEA;EACE,sBAAsB;EACtB,UAAU;EACV,+EAA+E;EAC/E,4EAA4E;EAC5E,uEAAuE;EACvE,wBAAwB;AAC1B;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,2DAA2D;IAC3D,8DAA8D;IAC9D,yDAAyD;IACzD,sDAAsD;AAC1D;;AAEA;IACI,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,wCAAwC;IACxC,2CAA2C;IAC3C,sCAAsC;IACtC,mCAAmC;IACnC;sBACkB;AACtB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;AACf\",\"sourcesContent\":[\"@import '~@noworkflow/utils/style/shared.css';\\n@import '~@noworkflow/history/style/index.css';\\n@import '~@noworkflow/trial/style/index.css';\\n@import './panel.css';\\n@import './history.css';\\n@import './trial.css';\\n\\n\\nbody {\\n font-family: \\\"Verdana\\\", \\\"Geneva\\\", \\\"sans-serif\\\";\\n}\\n\\n.loading {\\n font-size: 40px;\\n}\\n\\n/* Link Button */\\n\\na.link-button {\\n text-decoration: none;\\n display:inline-block;\\n padding: 4px 0;\\n /*padding: 4px 12px;*/\\n margin-bottom: 0;\\n font-size: 14px;\\n width: 100px;\\n line-height: 15px;\\n color: #333;\\n text-align: center;\\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\\n vertical-align: middle;\\n cursor: pointer;\\n background-color: #f5f5f5;\\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\\n background-repeat: repeat-x;\\n border: 1px solid #ccc;\\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\\n border-bottom-color: #b3b3b3;\\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n}\\n\\na.link-button:active {\\n background-image: none;\\n outline: 0;\\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n background-color:#e0e0e0;\\n}\\n\\n.hide-toolbar {\\n overflow: hidden;\\n max-height: 0;\\n padding-top: 0;\\n padding-bottom: 0;\\n margin-top: 0;\\n margin-bottom: 0;\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n}\\n\\n.show-toolbar {\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: ease-in;\\n -webkit-transition-timing-function: ease-in;\\n -o-transition-timing-function: ease-in;\\n transition-timing-function: ease-in;\\n /*max-height: 1000px;\\n overflow: hidden;*/\\n}\\n\\n.visible {\\n border-bottom: 1px solid black;\\n}\\n\\n.info-filter input, .info-filter select {\\n display: block;\\n width: 250px;\\n margin: 7px 0;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../../node_modules/@lumino/default-theme/style/index.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.p-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.p-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #C0C0C0;\n}\n\n\n.p-TabBar-tab {\n padding: 0px 10px;\n background: #E5E5E5;\n border: 1px solid #C0C0C0;\n border-bottom: none;\n font: 12px Helvetica, Arial, sans-serif;\n flex: 0 1 180px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n background: white;\n}\n\n\n.p-TabBar-tab:hover:not(.p-mod-current) {\n background: #F0F0F0;\n}\n\n\n.p-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n\n.p-TabBar-tabIcon,\n.p-TabBar-tabLabel,\n.p-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\n content: '\\\\f00d';\n font-family: FontAwesome;\n}\n\n\n.p-TabBar-tab.p-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n transform: translateX(-40%) translateY(-58%);\n}\n\n.p-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n\n.content {\n min-width: 50px;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n padding: 8px;\n border: 1px solid #C0C0C0;\n border-top: none;\n background: white;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.content > div {\n flex: 1 1 auto;\n overflow: auto;\n}\n\nbody {\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n}\n\n#main {\n flex: 1 1 auto;\n}\n\n\n.side-info {\n margin: 5px;\n font-size: 14px;\n}\n\n.side-info .main h1 {\n margin: 0;\n}\n\n.side-info .main h3 {\n margin: 0 0 8px 0;\n}\n\n.side-info .attr {\n display: block;\n margin: 3px 0;\n}\n\n.side-info .desc {\n font-weight: bold;\n}\n\n.side-info .fold {\n margin-top: 15px;\n font-size: 2em;\n}\n\n.side-info .fold:hover {\n cursor: pointer;\n}\n\n.side-info .fold span {\n padding-left: 7px;\n}\n\n.side-info .show-all {\n color: rgb(50, 38, 41);\n float: right;\n margin-right: 10px;\n}\n\n.side-info ul.mod-list,\n.side-info ul.env-list,\n.side-info ul.fac-list {\n padding: 0;\n margin: 0;\n list-style-type: none;\n}\n\n.side-info ul.mod-list li,\n.side-info ul.fac-list li {\n border-left: 3px solid black;\n margin: 6px 4px;\n padding: 1px 3px;\n}\n\n.side-info ul.env-list li {\n margin: 3px;\n font-size: 0.8em;\n}\n\n.side-info ul.env-list li .key {\n font-weight: bold;\n}\n\n.side-info ul.mod-list li .version,\n.side-info ul.fac-list li .mode,\n.side-info ul.fac-list li .buffering {\n float: right;\n margin-left: 20px;\n}\n\n.side-info .clear {\n clear: both;\n}\n\n.hash {\n font-size: 12px;\n color: #666;\n}\n\n.dbefore {\n color: red !important;\n}\n\n.dafter {\n color: green !important;\n}\n\n.dbefore::before {\n color: red !important;\n content: ' - ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.dafter::before {\n color: green !important;\n content: ' + ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.libefore {\n border-left: 3px solid red !important;\n color: red !important;\n}\n\n.liafter {\n border-left: 3px solid green !important;\n color: green !important;\n}\n\n.connection-error:hover {\n cursor: pointer;\n}\n\n.error-text {\n font-size: 15px;\n margin-left: 3px;\n vertical-align: middle;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/panel.css\"],\"names\":[],\"mappings\":\";AAIA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;;AAGA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,uCAAuC;EACvC,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;;AAGA;EACE,iBAAiB;AACnB;;;AAGA;EACE,mBAAmB;AACrB;;;AAGA;EACE,cAAc;AAChB;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;;AAGA;;;EAGE,qBAAqB;AACvB;;;AAGA;EACE,gBAAgB;AAClB;;;AAGA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;EAC1C,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,0CAA0C;AAC5C;;AAEA;EACE,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,SAAS;EACT,UAAU;EACV,gBAAgB;;AAElB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;AACpB;;AAEA;;;EAGE,UAAU;EACV,SAAS;EACT,qBAAqB;AACvB;;AAEA;;EAEE,4BAA4B;EAC5B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;EAGE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,WAAW;AACb;;AAEA;IACI,eAAe;IACf,WAAW;AACf;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,uBAAuB;EACvB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,qCAAqC;EACrC,qBAAqB;AACvB;;AAEA;EACE,uCAAuC;EACvC,uBAAuB;AACzB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,sBAAsB;AACxB\",\"sourcesContent\":[\"\\n@import '~@lumino/default-theme/style/index.css';\\n\\n\\n.p-TabBar {\\n min-height: 24px;\\n max-height: 24px;\\n}\\n\\n.p-TabBar-content {\\n min-width: 0;\\n min-height: 0;\\n align-items: flex-end;\\n border-bottom: 1px solid #C0C0C0;\\n}\\n\\n\\n.p-TabBar-tab {\\n padding: 0px 10px;\\n background: #E5E5E5;\\n border: 1px solid #C0C0C0;\\n border-bottom: none;\\n font: 12px Helvetica, Arial, sans-serif;\\n flex: 0 1 180px;\\n min-height: 20px;\\n max-height: 20px;\\n min-width: 35px;\\n margin-left: -1px;\\n line-height: 20px;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-current {\\n background: white;\\n}\\n\\n\\n.p-TabBar-tab:hover:not(.p-mod-current) {\\n background: #F0F0F0;\\n}\\n\\n\\n.p-TabBar-tab:first-child {\\n margin-left: 0;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-current {\\n min-height: 23px;\\n max-height: 23px;\\n transform: translateY(1px);\\n}\\n\\n\\n.p-TabBar-tabIcon,\\n.p-TabBar-tabLabel,\\n.p-TabBar-tabCloseIcon {\\n display: inline-block;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\\n margin-left: 4px;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\\n content: '\\\\f00d';\\n font-family: FontAwesome;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-drag-image {\\n min-height: 23px;\\n max-height: 23px;\\n min-width: 125px;\\n border: none;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\\n transform: translateX(-40%) translateY(-58%);\\n}\\n\\n.p-DockPanel-overlay {\\n background: rgba(255, 255, 255, 0.6);\\n border: 1px dashed black;\\n transition-property: top, left, right, bottom;\\n transition-duration: 150ms;\\n transition-timing-function: ease;\\n}\\n\\n.content {\\n min-width: 50px;\\n min-height: 50px;\\n display: flex;\\n flex-direction: column;\\n padding: 8px;\\n border: 1px solid #C0C0C0;\\n border-top: none;\\n background: white;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\\n}\\n\\n.content > div {\\n flex: 1 1 auto;\\n overflow: auto;\\n}\\n\\nbody {\\n display: flex;\\n flex-direction: column;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n margin: 0;\\n padding: 0;\\n overflow: hidden;\\n\\n}\\n\\n#main {\\n flex: 1 1 auto;\\n}\\n\\n\\n.side-info {\\n margin: 5px;\\n font-size: 14px;\\n}\\n\\n.side-info .main h1 {\\n margin: 0;\\n}\\n\\n.side-info .main h3 {\\n margin: 0 0 8px 0;\\n}\\n\\n.side-info .attr {\\n display: block;\\n margin: 3px 0;\\n}\\n\\n.side-info .desc {\\n font-weight: bold;\\n}\\n\\n.side-info .fold {\\n margin-top: 15px;\\n font-size: 2em;\\n}\\n\\n.side-info .fold:hover {\\n cursor: pointer;\\n}\\n\\n.side-info .fold span {\\n padding-left: 7px;\\n}\\n\\n.side-info .show-all {\\n color: rgb(50, 38, 41);\\n float: right;\\n margin-right: 10px;\\n}\\n\\n.side-info ul.mod-list,\\n.side-info ul.env-list,\\n.side-info ul.fac-list {\\n padding: 0;\\n margin: 0;\\n list-style-type: none;\\n}\\n\\n.side-info ul.mod-list li,\\n.side-info ul.fac-list li {\\n border-left: 3px solid black;\\n margin: 6px 4px;\\n padding: 1px 3px;\\n}\\n\\n.side-info ul.env-list li {\\n margin: 3px;\\n font-size: 0.8em;\\n}\\n\\n.side-info ul.env-list li .key {\\n font-weight: bold;\\n}\\n\\n.side-info ul.mod-list li .version,\\n.side-info ul.fac-list li .mode,\\n.side-info ul.fac-list li .buffering {\\n float: right;\\n margin-left: 20px;\\n}\\n\\n.side-info .clear {\\n clear: both;\\n}\\n\\n.hash {\\n font-size: 12px;\\n color: #666;\\n}\\n\\n.dbefore {\\n color: red !important;\\n}\\n\\n.dafter {\\n color: green !important;\\n}\\n\\n.dbefore::before {\\n color: red !important;\\n content: ' - ';\\n font-family: \\\"Courier New\\\", Courier, monospace;\\n}\\n\\n.dafter::before {\\n color: green !important;\\n content: ' + ';\\n font-family: \\\"Courier New\\\", Courier, monospace;\\n}\\n\\n.libefore {\\n border-left: 3px solid red !important;\\n color: red !important;\\n}\\n\\n.liafter {\\n border-left: 3px solid green !important;\\n color: green !important;\\n}\\n\\n.connection-error:hover {\\n cursor: pointer;\\n}\\n\\n.error-text {\\n font-size: 15px;\\n margin-left: 3px;\\n vertical-align: middle;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trial-content,\n.trial-content .sub-content,\n.trial-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.trial-content .graphselector .graph-attr:first-child label {\n margin-right: 17px;\n}\n\n.trial-content .graphselector {\n width: 100%;\n padding-left: 8px;\n}\n\n.trial-content .graphselector .use-cache {\n margin-top: 10px;\n margin-left: 0px;\n}\n\n.trial-content .graphselector a.link-button {\n margin-top: 10px;\n width: 273px;\n}\n\n.trial-content .toggle-label {\n margin-right: 5px;\n}\n\n.graphselector > div:first-child {\n margin-top: 8px;\n}\n\n.graphselector > a:last-child {\n margin-bottom: 8px;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/trial.css\"],\"names\":[],\"mappings\":\"AAAA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,YAAY;AAChB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,kBAAkB;AACtB\",\"sourcesContent\":[\".trial-content,\\n.trial-content .sub-content,\\n.trial-content .sub-content > div {\\n overflow: hidden !important;\\n}\\n\\n.trial-content .graphselector .graph-attr:first-child label {\\n margin-right: 17px;\\n}\\n\\n.trial-content .graphselector {\\n width: 100%;\\n padding-left: 8px;\\n}\\n\\n.trial-content .graphselector .use-cache {\\n margin-top: 10px;\\n margin-left: 0px;\\n}\\n\\n.trial-content .graphselector a.link-button {\\n margin-top: 10px;\\n width: 273px;\\n}\\n\\n.trial-content .toggle-label {\\n margin-right: 5px;\\n}\\n\\n.graphselector > div:first-child {\\n margin-top: 8px;\\n}\\n\\n.graphselector > a:last-child {\\n margin-bottom: 8px;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trial-toolbar {\n margin: 5px;\n float: left;\n overflow: none;\n width: 375px;\n height: 30px;\n z-index: 3;\n position: absolute;\n}\n\n.trial-toolbar input {\n height: 30px;\n}\n\n.trial-toolbar input[type=checkbox] {\n display: none\n}\n\n.trial-toolbar label, .trial-toolbar a {\n margin-right: 8px;\n margin-top: 8px;\n}\n\n.trial-toolbar input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.trial-toolbar input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.trial-toolbar a.toollink,\n.trial-toolbar a.toollink:link,\n.trial-toolbar a.toollink:visited {\n color: black;\n}\n\n.trial-toolbar a.toollink:active {\n color: blue;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../trial/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,WAAW;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\".trial-toolbar {\\n margin: 5px;\\n float: left;\\n overflow: none;\\n width: 375px;\\n height: 30px;\\n z-index: 3;\\n position: absolute;\\n}\\n\\n.trial-toolbar input {\\n height: 30px;\\n}\\n\\n.trial-toolbar input[type=checkbox] {\\n display: none\\n}\\n\\n.trial-toolbar label, .trial-toolbar a {\\n margin-right: 8px;\\n margin-top: 8px;\\n}\\n\\n.trial-toolbar input[type=checkbox] + label {\\n display:inline-block;\\n color: black;\\n cursor: pointer;\\n}\\n\\n.trial-toolbar input[type=checkbox]:checked + label {\\n color: blue;\\n}\\n\\n.trial-toolbar a.toollink,\\n.trial-toolbar a.toollink:link,\\n.trial-toolbar a.toollink:visited {\\n color: black;\\n}\\n\\n.trial-toolbar a.toollink:active {\\n color: blue;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `div.now-tooltip {\n position: absolute;\n left: 1px;\n right: 1px;\n max-height: 200px;\n max-width: 400px;\n overflow: auto;\n padding: 5px;\n padding-bottom: 10px;\n font: 12px sans-serif;\n background: #DDD;\n border: 0px;\n border-radius: 8px;\n z-index: 2000;\n}\n\n.now-tooltip.hidden {\n display: none;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./../utils/style/shared.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,kBAAkB;IAClB,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,aAAa;AACjB;;AAEA;IACI,aAAa;AACjB\",\"sourcesContent\":[\"div.now-tooltip {\\n position: absolute;\\n left: 1px;\\n right: 1px;\\n max-height: 200px;\\n max-width: 400px;\\n overflow: auto;\\n padding: 5px;\\n padding-bottom: 10px;\\n font: 12px sans-serif;\\n background: #DDD;\\n border: 0px;\\n border-radius: 8px;\\n z-index: 2000;\\n}\\n\\n.now-tooltip.hidden {\\n display: none;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n options = {};\n }\n if (!url) {\n return url;\n }\n url = String(url.__esModule ? url.default : url);\n\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n if (options.hash) {\n url += options.hash;\n }\n\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n return url;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n export default content && content.locals ? content.locals : undefined;\n","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TrialGraph = void 0;\nrequire(\"d3-transition\");\nconst d3_color_1 = require(\"d3-color\");\nconst d3_hierarchy_1 = require(\"d3-hierarchy\");\nconst d3_selection_1 = require(\"d3-selection\");\nconst d3_zoom_1 = require(\"d3-zoom\");\nconst fs = require(\"file-saver\");\nconst utils_1 = require(\"@noworkflow/utils\");\nclass TrialGraph {\n constructor(graphId, div, config = {}, showDiffFunction, nowVisPanel) {\n if (showDiffFunction && nowVisPanel) {\n this.showDiffFunction = showDiffFunction;\n this.nowVisPanel = nowVisPanel;\n }\n this.i = 0;\n let defaultConfig = {\n customSize: function (g) {\n return [\n g.config.width,\n g.config.height,\n ];\n },\n customMouseOver: (g, d) => false,\n customMouseOut: (g, d) => false,\n customForm: (g, form) => null,\n customLoadTooltip: (g, div, text, trialid, aid) => null,\n duration: 750,\n top: 50,\n right: 30,\n bottom: 80,\n left: 30,\n width: 900,\n height: 500,\n useTooltip: false,\n fontSize: 10,\n labelFontSize: 10,\n nodeSizeX: 47,\n nodeSizeY: 100,\n queryTooltip: false\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.graphId = graphId;\n this.zoom = (0, d3_zoom_1.zoom)()\n .on(\"zoom\", (event) => {\n return this.zoomFunction(event);\n })\n .on(\"start\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"move\"))\n .on(\"end\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"auto\"))\n .wheelDelta(function () {\n const e = event;\n return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000;\n });\n this.div = (0, d3_selection_1.select)(div);\n this.form = this.div\n .append(\"form\")\n .classed(\"trial-toolbar\", true);\n this.svg = (0, d3_selection_1.select)(div)\n .append(\"div\")\n .append(\"svg\")\n .attr(\"width\", this.config.width)\n .attr(\"height\", this.config.height)\n .call(this.zoom);\n this.createMarker('end', 'enormal', 'black');\n this.createMarker('endbefore', 'ebefore', 'red');\n this.createMarker('endafter', 'eafter', 'green');\n this.g = this.svg.append(\"g\")\n .attr(\"id\", this._graphId())\n .attr(\"transform\", \"translate(0,0)\")\n .classed('TrialGraph', true);\n this.tree = (0, d3_hierarchy_1.tree)()\n .nodeSize([\n this.config.nodeSizeX,\n this.config.nodeSizeY\n ]);\n // Tooltip\n this.tooltipDiv = (0, d3_selection_1.select)(\"body\").append(\"div\")\n .attr(\"class\", \"now-tooltip now-trial-tooltip\")\n .style(\"opacity\", 0)\n .on(\"mouseout\", () => {\n this.closeTooltip();\n });\n // Zoom\n this.svg\n .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top));\n this.activationStorage = {};\n }\n init(data, t1, t2) {\n this.t1 = t1;\n this.t2 = t2;\n // **Toolbar**\n this.createToolbar(this.form);\n // **Graph**\n this.minDuration = data.min_duration;\n this.maxDuration = data.max_duration;\n this.totalDuration = {};\n this.totalDuration[t1] = this.maxDuration[t1] - this.minDuration[t1];\n this.totalDuration[t2] = this.maxDuration[t2] - this.minDuration[t2];\n this.maxTotalDuration = Math.max(this.totalDuration[t1], this.totalDuration[t2]);\n this.colors = data.colors;\n if (!data.root)\n return;\n this.root = (0, d3_hierarchy_1.hierarchy)(data.root, function (d) { return d.children; });\n this.root.x0 = 0;\n this.root.y0 = (this.config.width) / 2;\n this.alledges = data.edges;\n this.update(this.root);\n }\n createToolbar(form) {\n let self = this;\n form = form.append(\"div\")\n .classed(\"buttons buttonsGraph\", true);\n this.config.customForm(this, form);\n // Reset zoom\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"trial-\" + this.graphId + \"-restore-zoom\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Restore zoom\")\n .on(\"click\", () => this.restorePosition())\n .append(\"i\")\n .classed(\"fa fa-eye\", true);\n // Toggle Tooltips\n let tooltipsToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-tooltips\")\n .attr(\"value\", \"show\")\n .property(\"checked\", this.config.useTooltip)\n .on(\"change\", () => {\n this.closeTooltip();\n this.config.useTooltip = tooltipsToggle.property(\"checked\");\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"title\", \"Show tooltips on mouse hover\")\n .append(\"i\")\n .classed(\"fa fa-comment\", true);\n // Download SVG\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"trial-\" + this.graphId + \"-download\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Download graph SVG\")\n .on(\"click\", () => {\n this.download();\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n // Set Font Size\n let fontToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-fonts\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = fontToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n fontSize.style(\"display\", display);\n labelFontSize.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"title\", \"Set font size\")\n .append(\"i\")\n .classed(\"fa fa-font\", true);\n let fontSize = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.fontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node font size\")\n .on(\"change\", () => {\n this.config.fontSize = fontSize.property(\"value\");\n this.svg.selectAll(\".node text\").attr(\"font-size\", this.config.fontSize);\n });\n let labelFontSize = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.labelFontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Arrow font size\")\n .on(\"change\", () => {\n this.config.labelFontSize = labelFontSize.property(\"value\");\n this.svg.selectAll(\"text.label_text\").attr(\"font-size\", this.config.labelFontSize);\n });\n // Set distances\n let setDistances = function () {\n self.config.nodeSizeX = distanceX.property(\"value\");\n self.config.nodeSizeY = distanceY.property(\"value\");\n self.wrapText();\n self.tree\n .nodeSize([\n self.config.nodeSizeX,\n self.config.nodeSizeY\n ]);\n self.update(self.root);\n };\n // Set Distance X\n let distanceXToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-distance-x\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-distance-x\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = distanceXToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n distanceX.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-distance-x\")\n .attr(\"title\", \"Set horizontal distance\")\n .append(\"i\")\n .classed(\"fa fa-arrows-h\", true);\n let distanceX = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.nodeSizeX)\n .style(\"width\", \"65px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node horizontal distance\")\n .on(\"change\", setDistances);\n // Set Distance Y\n let distanceYToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-distance-y\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-distance-y\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = distanceYToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n distanceY.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-distance-y\")\n .attr(\"title\", \"Set vertical distance\")\n .append(\"i\")\n .classed(\"fa fa-arrows-v\", true);\n let distanceY = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.nodeSizeY)\n .style(\"width\", \"65px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node vertical distance\")\n .on(\"change\", setDistances);\n // Submit\n form.append(\"input\")\n .attr(\"type\", \"submit\")\n .attr(\"name\", \"prevent-enter\")\n .attr(\"onclick\", \"return false;\")\n .style(\"display\", \"none\");\n }\n load(data, t1, t2) {\n this.init(data, t1, t2);\n this.updateWindow();\n }\n restorePosition() {\n this.wrapText();\n this.svg\n .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top));\n }\n updateWindow() {\n let size = this.config.customSize(this);\n this.config.width = size[0];\n this.config.height = size[1];\n this.svg\n .attr(\"width\", size[0])\n .attr(\"height\", size[1]);\n }\n update(source) {\n let treeData = this.tree(this.root);\n this.nodes = treeData.descendants();\n var node = this.g.selectAll('g.node')\n .data(this.nodes, (d) => { return d.id || (d.id = ++this.i); });\n let validNodes = {};\n this.nodes.forEach((node) => {\n validNodes[node.data.index] = node;\n });\n var edges = this.alledges.filter((edge) => {\n let source = validNodes[edge.source];\n let target = validNodes[edge.target];\n if (source == undefined || target == undefined) {\n return false;\n }\n return true;\n }).map((edge) => {\n let source = validNodes[edge.source];\n let target = validNodes[edge.target];\n var copy = Object.assign({}, edge);\n copy.id = edge.source + \"-\" + edge.target;\n copy.source = source;\n copy.target = target;\n return copy;\n });\n this.updateNodes(source, node);\n this.updateLinks(source, edges);\n this.updateLinkLabels(edges);\n // Store old positions for transition\n this.nodes.forEach(function (d, i) {\n d.x0 = d.x;\n d.y0 = d.y;\n });\n this.wrapText();\n }\n download(name) {\n var isFileSaverSupported = false;\n try {\n isFileSaverSupported = !!new Blob();\n }\n catch (e) {\n alert(\"blob not supported\");\n }\n name = (name === undefined) ? \"trial.svg\" : name;\n let gnode = this.g.node();\n var bbox = gnode.getBBox();\n var width = this.svg.attr(\"width\"), height = this.svg.attr(\"height\");\n this.g.attr(\"transform\", \"translate(\" + (-bbox.x + 5) + \", \" + (-bbox.y + 5) + \")\");\n let svgNode = this.svg\n .attr(\"title\", \"Trial\")\n .attr(\"version\", 1.1)\n .attr(\"width\", bbox.width + 10)\n .attr(\"height\", bbox.height + 10)\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node();\n var html = svgNode.parentNode.innerHTML;\n html = ' 1 || activations[trial_ids[1]].length > 1);\n let modal;\n let modalBody;\n let button;\n if (showModal) {\n modal = (0, d3_selection_1.select)(document.getElementById(\"main\"))\n .append(\"div\").classed(\"modal fade show\", true)\n .attr(\"id\", \"functionDiffModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"functionDiffModalLabel\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"false\")\n .style(\"display\", \"block\");\n let modalDialog = modal.append(\"div\").classed(\"modal-dialog\", true).attr(\"role\", \"document\");\n let modalContent = modalDialog.append(\"div\").classed(\"modal-content\", true);\n let modalHeader = modalContent.append(\"div\").classed(\"modal-header\", true);\n modalHeader.append(\"h5\").classed(\"modal-title\", true).attr(\"id\", \"functionDiffModalLabel\").text(\"Select a function activation: \");\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"data-dismiss\", \"modal\").attr(\"aria-label\", \"Close\")\n .append(\"span\").attr(\"aria-hidden\", \"true\").html(\"×\").on(\"click\", () => modal.remove());\n modalBody = modalContent.append(\"div\").classed(\"modal-body\", true);\n modalBody.append(\"p\").text(\"This function was called multipled times. Select the activations you want to see their diff\").style(\"font-weight\", \"bold\");\n button = modalContent.append(\"div\").classed(\"modal-footer\", true).append(\"button\").classed(\"btn btn-primary\", true).text(\"Confirm\");\n }\n let compareFunctionCallsUrl = \"commands/diff\";\n let windowLabel = \"Diff\";\n for (let i = 0; i < trial_ids.length; i++) {\n let trial = trial_ids[i];\n if (showModal) {\n let trialNumber = i == 0 ? \"first\" : \"second\";\n modalBody.append(\"span\").text(\"Select the \" + trialNumber + \" trial activation: \");\n let select = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"functionTrial\" + trial).attr(\"id\", \"functionTrial\" + trial);\n for (let activation in activations[trial]) {\n fetch(\"/diff/getFunctionActivationArguments/\" + trial + \"/\" + activations[trial][activation], {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n select.append(\"option\").attr(\"value\", activations[trial][activation]).text(activations[trial][activation] + \" params: \" + json.function_params.toString());\n });\n });\n }\n modalBody.append(\"br\");\n }\n else {\n if (compareFunctionCallsUrl.length > 0)\n compareFunctionCallsUrl += \"/\";\n compareFunctionCallsUrl += trial + \"/\";\n compareFunctionCallsUrl += activations[trial];\n windowLabel += \" trial \" + trial + \" activation_id \" + activations[trial];\n }\n }\n if (showModal) {\n button === null || button === void 0 ? void 0 : button.on(\"click\", () => {\n let firstTrialActivation = document.getElementById(\"functionTrial\" + trial_ids[0]).selectedOptions[0].value;\n let secondTrialActivation = document.getElementById(\"functionTrial\" + trial_ids[1]).selectedOptions[0].value;\n compareFunctionCallsUrl += \"/\" + trial_ids[0] + \"/\" + firstTrialActivation + \"/\" + trial_ids[1] + \"/\" + secondTrialActivation;\n windowLabel += \" trial \" + trial_ids[0] + \" activation_id \" + firstTrialActivation + \" trial \" + trial_ids[1] + \" activation_id \" + secondTrialActivation;\n makeRequest(this.showDiffFunction, this.nowVisPanel);\n modal.remove();\n });\n }\n else {\n makeRequest(this.showDiffFunction, this.nowVisPanel);\n }\n function makeRequest(showDiffFunction, nowVisPanel) {\n fetch(compareFunctionCallsUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n if (showDiffFunction)\n showDiffFunction(json, windowLabel, nowVisPanel);\n });\n });\n }\n }\n closeTooltip() {\n this.tooltipDiv.transition()\n .duration(500)\n .style(\"opacity\", 0);\n this.tooltipDiv.classed(\"hidden\", true);\n }\n showTooltip(event, d, trial_id) {\n var self = this;\n this.tooltipDiv.classed(\"hidden\", false);\n this.tooltipDiv.transition()\n .duration(200)\n .style(\"opacity\", 0.9);\n if (this.config.queryTooltip) {\n var string = d.tooltip[trial_id];\n var regexp = (/T(.*) - (\\d*)
            Line \\d*?
            /g);\n var match = regexp.exec(string);\n this.tooltipDiv.html(\"\")\n .style(\"left\", (event.pageX - 3) + \"px\")\n .style(\"top\", (event.pageY - 28) + \"px\");\n while (match != null) {\n var div = document.createElement(\"div\");\n //var div2 = document.createElement(\"div\");\n this.tooltipDiv.append(() => div);\n //this.tooltipDiv.append(() => div2);\n var aid = match[2];\n if (aid in self.activationStorage) {\n this.updateTooltipDiv(aid, div);\n }\n else {\n self.config.customLoadTooltip(self, div, match[0], match[1], match[2]);\n }\n match = regexp.exec(string);\n }\n }\n else {\n this.tooltipDiv.html(d.tooltip[trial_id])\n .style(\"left\", (event.pageX - 3) + \"px\")\n .style(\"top\", (event.pageY - 28) + \"px\");\n }\n }\n updateTooltipDiv(activationId, div) {\n var data = this.activationStorage[activationId];\n var title = data.id + \" - \" + data.name;\n if (data.hash != \"\") {\n title = '' + title + \"\";\n }\n var result = [\n ' ' + title + '',\n ' Line: ' + data.line + \"\",\n ' Start: ' + data.start + \"\",\n ' Finish: ' + data.finish + \"\",\n ' Duration: ' + data.duration + \"ns\",\n ' Return: ' + data.return_value + \"\",\n ];\n // ToDo: parameters and globals\n div.outerHTML = result.join(\"
            \") + \"

            \";\n }\n createMarker(name, cls, fill) {\n this.svg.append(\"svg:defs\").selectAll(\"marker\")\n .data([name])\n .enter().append(\"svg:marker\")\n .attr(\"id\", this.graphId + \"-\" + name)\n .attr(\"viewBox\", \"0 -5 10 10\")\n .attr(\"refX\", 10)\n .attr(\"refY\", 0)\n .attr(\"markerWidth\", 6)\n .attr(\"markerHeight\", 6)\n .attr(\"orient\", \"auto\")\n .append(\"svg:path\")\n .classed(cls, true)\n .attr(\"fill\", fill)\n .attr(\"d\", \"M0,-5L10,0L0,5\");\n }\n defaultNodeStroke(d) {\n let color = this.colors[d.data.trial_ids[0]];\n if (d.data.trial_ids.length > 1 || color == 0) {\n return \"#000\";\n }\n if (color == 1) {\n return \"red\";\n }\n return \"green\";\n }\n nodeClick(d) {\n if (d.children) {\n d._children = d.children;\n delete d.children;\n }\n else {\n d.children = d._children;\n delete d._children;\n }\n this.update(d);\n }\n updateNodes(source, node) {\n let self = this;\n var nodeEnter = node.enter().append('g')\n .attr(\"id\", (d) => {\n return \"node-\" + this.graphId + \"-\" + d.data.index;\n })\n .attr('class', 'node')\n .attr(\"cursor\", \"pointer\")\n .attr('transform', (d) => {\n return \"translate(\" + source.x + \",\" + source.y + \")\";\n })\n .on('click', (event, d) => {\n let activations = d.data.activations;\n if (event.ctrlKey && Object.keys(activations).length > 1) {\n self.getFunctionDiff(activations, d.data.trial_ids);\n }\n else {\n this.nodeClick(d);\n }\n })\n .on('mouseover', function (event, d) {\n if (self.config.useTooltip) {\n self.closeTooltip();\n if ((0, d3_selection_1.pointers)(event)[0][0] < 10) {\n self.showTooltip(event, d.data, self.t1);\n }\n else {\n self.showTooltip(event, d.data, self.t2);\n }\n }\n self.config.customMouseOver(self, d);\n return false;\n }).on('mouseout', function (event, d) {\n self.config.customMouseOut(self, d);\n });\n /* nodeEnter.attr(\"activations_ids\", (d:VisibleTrialNode)=>{\n let activations = d.data.activations;\n let attrValue = \"\";\n for(let trial in activations){\n if(attrValue.length > 0) attrValue+= \"/\";\n attrValue += trial + \"/\";\n attrValue += activations[trial];\n }\n return attrValue;\n }); */\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr('class', 'node')\n .attr('rx', 1e-6)\n .attr('ry', 1e-6)\n .attr('width', 1e-6)\n .attr('height', 1e-6)\n .attr(\"stroke\", (d) => this.defaultNodeStroke(d))\n .attr(\"stroke-width\", \"3px\")\n .attr(\"fill\", (d) => {\n if (d.data.trial_ids.length == 1) {\n return this.calculateColor(d.data, this.t1);\n }\n var grad = this.svg.append(\"svg:defs\")\n .append(\"linearGradient\")\n .attr(\"id\", \"grad-\" + this.graphId + \"-\" + d.data.index)\n .attr(\"x1\", \"100%\")\n .attr(\"x2\", \"0%\")\n .attr(\"y1\", \"0%\")\n .attr(\"y2\", \"0%\");\n grad.append(\"stop\")\n .attr(\"offset\", \"50%\")\n .attr(\"stop-color\", this.calculateColor(d.data, this.t2));\n grad.append(\"stop\")\n .attr(\"offset\", \"50%\")\n .attr(\"stop-color\", this.calculateColor(d.data, this.t1));\n return \"url(#grad-\" + this.graphId + \"-\" + d.data.index + \")\";\n });\n // Text for new nodes\n nodeEnter.append('text')\n .attr(\"dy\", \".35em\")\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"font-size\", this.config.fontSize + \"px\")\n .attr(\"pointer-events\", \"none\")\n .attr(\"fill\", \"#000\")\n .attr(\"y\", 24)\n .attr(\"x\", 10)\n .attr(\"text-anchor\", \"middle\")\n .each(function (d) {\n const textLabel = (0, d3_selection_1.select)(this);\n const name = d.data.name.split('
            ');\n if (name.length > 1) {\n textLabel.append(\"tspan\")\n .attr(\"x\", \"10\")\n .attr(\"dy\", \".35em\")\n .attr(\"font-weight\", \"bold\")\n .text(name[0]);\n textLabel.append(\"tspan\")\n .attr(\"x\", \"10\")\n .attr(\"dy\", \"1em\")\n .text(name[1]);\n textLabel.attr(\"class\", \"nowrap\");\n }\n else {\n return textLabel.text(d.data.name);\n }\n });\n nodeEnter.append(\"path\")\n .attr(\"stroke\", \"#000\")\n .attr(\"d\", function (d) {\n if (d.data.trial_ids.length > 1) {\n return \"M10,\" + 0 +\n \"L10,\" + 20;\n }\n return \"M0,0L0,0\";\n });\n // Update\n var nodeUpdate = nodeEnter.merge(node);\n // Transition to proper position\n nodeUpdate.transition()\n .duration(this.config.duration)\n .attr(\"transform\", (d) => {\n let color = this.colors[d.data.trial_ids[0]];\n d.dy = 0;\n if (color == 1) {\n d.dy = -40;\n }\n else if (color == 2) {\n d.dy = 40;\n }\n return \"translate(\" + (d.x - 10) + \",\" + (d.y + d.dy - 10) + \")\";\n });\n // Update the node attributes and style\n nodeUpdate.select('rect.node')\n .attr('width', 20)\n .attr('height', 20)\n .attr('rx', 20)\n .attr('ry', 20)\n .attr(\"rx\", (d) => {\n return d._children ? 0 : 20;\n })\n .attr(\"ry\", (d) => {\n return d._children ? 0 : 20;\n })\n .attr('cursor', 'pointer');\n // Remove exiting nodes\n var nodeExit = node.exit().transition()\n .duration(this.config.duration)\n .attr(\"transform\", function (d) {\n return \"translate(\" + source.x + \",\" + source.y + \")\";\n })\n .remove();\n // Reduce node rects size to 0 on exit\n nodeExit.select('rect')\n .attr('rx', 1e-6)\n .attr('ry', 1e-6)\n .attr('width', 1e-6)\n .attr('height', 1e-6);\n // Reduce opacity of labels on exit\n nodeExit.select('text')\n .style('fill-opacity', 1e-6);\n }\n updateLinks(source, edges) {\n var link = this.g.selectAll('path.link')\n .data(edges, (d) => d.id);\n // Enter any new links at the parent's previous position.\n var linkEnter = link.enter().insert('path', \"g\")\n .attr(\"class\", \"link\")\n .attr(\"id\", (d, i) => {\n return \"pathId-\" + this.graphId + \"-\" + d.id;\n })\n .attr(\"fill\", \"none\")\n .attr(\"stroke-width\", \"1.5px\")\n .attr('d', (d) => {\n var o = { y: source.y0, x: source.x0 };\n if (d.source.dy == undefined) {\n d.source.dy = 0;\n }\n if (d.target.dy == undefined) {\n d.target.dy = 0;\n }\n let ox = source.x0 || 0, oy = source.y0 || 0, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1;\n if (d.type === 'initial' || d.type === 'call' || d.type == 'return') {\n // Initial\n return (0, utils_1.diagonal)(o, o);\n }\n else if (dx === 0 && dy === 0) {\n // Loop\n return `M ${ox}, ${oy}\n A 15,20\n -45,1,1\n ${ox + 5},${oy + 8}`;\n }\n //return diagonal(d.source, d.target);\n return (0, utils_1.diagonal)(o, o);\n })\n .attr(\"marker-end\", (d) => {\n let count = 0;\n for (let trial_id in d.count) {\n if (trial_id == this.t1.toString()) {\n count += 1;\n }\n if (trial_id == this.t2.toString()) {\n count += 2;\n }\n }\n if (count == 0 || count == 3) { // Single trial or diff\n return \"url(#\" + this.graphId + \"-end)\";\n }\n if (count == 1) { // First trial\n return \"url(#\" + this.graphId + \"-endbefore)\";\n }\n if (count == 2) { // Second trial\n return \"url(#\" + this.graphId + \"-endafter)\";\n }\n return \"\";\n })\n .attr('stroke', (d) => {\n if (d.type === 'sequence') {\n return '#07F';\n }\n return '#666';\n })\n .attr('stroke-dasharray', (d) => {\n if (d.type === 'return') {\n return '10,2';\n }\n return 'none';\n });\n // UPDATE\n var linkUpdate = linkEnter.merge(link);\n // Transition back to the parent element position\n linkUpdate.transition()\n .duration(this.config.duration)\n .attr('d', (d) => {\n if (d.source.dy == undefined) {\n d.source.dy = 0;\n }\n if (d.target.dy == undefined) {\n d.target.dy = 0;\n }\n let sd = d.source.data, td = d.target.data, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1, theta = Math.atan(dx / dy), phi = Math.atan(dy / dx), r = 10 + 2, sin_theta = r * Math.sin(theta), cos_theta = r * Math.cos(theta), sin_phi = r * Math.sin(phi), cos_phi = r * Math.cos(phi), m1 = (y2 > y1) ? 1 : -1, m2 = (x2 > x1) ? -1 : 1;\n if (d.type === 'initial') {\n // Initial\n return `M ${(x2 - 20)},${(y2 - 20)}\n L ${(x2 - r / 2.0)},${(y2 - r / 2.0)}`;\n }\n else if (d.type === 'call' || d.type == 'return') {\n // Call/Return\n x1 += m1 * sin_theta;\n x2 += m2 * cos_phi;\n y1 += m1 * cos_theta;\n y2 += m2 * sin_phi;\n if (dx === 0) {\n if (y1 > y2) {\n //y1 -= 10\n y2 += 20;\n }\n else {\n //y1 += 10\n y2 -= 20;\n }\n }\n return `M ${x1}, ${y1}\n L ${x2}, ${y2}`;\n }\n else if (dx === 0 && dy === 0) {\n // Loop\n return `M ${x1}, ${y1}\n A 15,20\n -45,1,1\n ${x2 + 5},${y2 + 8}`;\n }\n else if (sd.parent_index == td.parent_index) {\n // Same caller\n if (dy === 0 && sd.children_index == td.children_index - 1) {\n // Immediate sequence\n return `M ${x1}, ${y1}\n L ${(x2 + m2 * cos_phi)}, ${y2}`;\n }\n else {\n let sign = -1;\n if (y1 < y2) {\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n y2 -= r;\n sign = -1;\n }\n else if (y2 < y1) {\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n y2 += r;\n sign = 1;\n }\n else if (x1 >= x2) {\n y1 += r;\n y2 += r;\n sign = 2;\n }\n else {\n y1 -= r;\n y2 -= r;\n sign = -1;\n }\n return `M ${x1}, ${y1}\n C ${(x1 + x2) / 2} ${y1 + r * sign},\n ${(x1 + x2) / 2} ${y2 + r * sign},\n ${x2} ${y2}`;\n }\n }\n // Other caller\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n x2 += m2 * cos_phi;\n y2 += m2 * sin_phi;\n return `M ${x1} ${y1}\n C ${(x1 + x2) / 2} ${y1},\n ${(x1 + x2) / 2} ${y2},\n ${x2} ${y2}`;\n });\n // Remove any exiting links\n link.exit() //.transition()\n .attr('d', function (d) {\n return (0, utils_1.diagonal)(d.source, d.target);\n })\n .remove(); // linkExit\n }\n updateLinkLabels(edges) {\n var labelPath = this.g.selectAll(\".label_text\")\n .data(edges, (d) => d.id);\n var labelEnter = labelPath.enter().append(\"text\")\n .attr(\"class\", \"label_text\")\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"font-size\", this.config.labelFontSize + \"px\")\n .attr(\"pointer-events\", \"none\")\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"dx\", (d) => {\n if (d.source.x == d.target.x) {\n return 29;\n }\n return (Math.abs(d.source.x - d.target.x) - 10) / 2;\n })\n .attr(\"dy\", -3)\n .attr(\"id\", (d, i) => {\n return \"pathlabel-\" + this.graphId + \"-\" + d.id;\n })\n .append(\"textPath\")\n .attr(\"xlink:href\", (d, i) => {\n return \"#pathId-\" + this.graphId + \"-\" + d.id;\n })\n .text((d) => {\n if (d.type === 'initial') {\n return '';\n }\n if (this.t1 == this.t2 || !d.count[this.t2]) {\n return d.count[this.t1].toString();\n }\n else if (!d.count[this.t1]) {\n return d.count[this.t2].toString();\n }\n return d.count[this.t1] + ', ' + d.count[this.t2];\n });\n labelEnter.merge(labelPath);\n labelPath.exit().remove();\n }\n zoomFunction(event) {\n this.closeTooltip();\n this.transform = event.transform;\n this.g.attr(\"transform\", event.transform);\n }\n _graphId() {\n return \"trial-graph-\" + this.graphId;\n }\n}\nexports.TrialGraph = TrialGraph;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./structures\"), exports);\n__exportStar(require(\"./graph\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diagonal = diagonal;\n/**\n * Create diagonal line between two nodes\n */\nfunction diagonal(s, d) {\n if (s.dy == undefined) {\n s.dy = 0;\n }\n if (d.dy == undefined) {\n d.dy = 0;\n }\n let path = `M ${s.x} ${(s.y + s.dy)}\n C ${(s.x + d.x) / 2} ${(s.y + s.dy)},\n ${(s.x + d.x) / 2} ${(d.y + d.dy)},\n ${d.x} ${(d.y + d.dy)}`;\n return path;\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./d3svg\"), exports);\n__exportStar(require(\"./random\"), exports);\n__exportStar(require(\"./text\"), exports);\n__exportStar(require(\"./web\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.makeid = makeid;\nfunction makeid() {\n var text = \"\";\n var possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n for (var i = 0; i < 5; i++)\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n return text;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrap = wrap;\nconst d3_selection_1 = require(\"d3-selection\");\nfunction wrap(text, width) {\n text.each(function () {\n var text = (0, d3_selection_1.select)(this), words = text.text().split(/(?=_)/).reverse(), word, line = [], lineNumber = 0, lineHeight = 1.1, // ems\n y = text.attr(\"y\"), dy = parseFloat(text.attr(\"dy\")), tspan = text.text(null).append(\"tspan\").attr(\"x\", 10).attr(\"y\", y).attr(\"dy\", dy + \"em\");\n while (word = words.pop()) {\n line.push(word);\n tspan.text(line.join(\"\"));\n if (tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\"\"));\n line = [word];\n tspan = text.append(\"tspan\").attr(\"x\", 10).attr(\"y\", y).attr(\"dy\", ++lineNumber * lineHeight + dy + \"em\").text(word);\n }\n }\n });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.json = json;\nconst d3_fetch_1 = require(\"d3-fetch\");\nfunction json(innertext, sub, url, fn) {\n let i = document.createElement('i');\n i.classList.add(\"loading\");\n i.classList.add(\"fa\");\n i.classList.add(\"fa-spinner\");\n i.classList.add(\"fa-pulse\");\n sub.innerHTML = \"\";\n sub.appendChild(i);\n sub.onclick = function () {\n json(innertext, sub, url, fn);\n };\n (0, d3_fetch_1.json)(url).then(function (data) {\n sub.onclick = function () {\n };\n fn(data);\n }).catch(function (error) {\n i.classList.remove(\"fa-spinner\");\n i.classList.remove(\"fa-pulse\");\n i.classList.add(\"fa-refresh\");\n i.classList.add(\"connection-error\");\n let text = document.createElement('span');\n text.classList.add(\"error-text\");\n text.innerHTML = innertext;\n i.appendChild(text);\n });\n}\n","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/*!\nViz.js 3.8.0\nCopyright (c) 2023 Michael Daines\n\nThis distribution contains other software in object code form:\nGraphviz https://www.graphviz.org\nExpat https://libexpat.github.io\n*/var A=function(){var A,I,g,Q,B,C,E,D,w,i,o,G=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},M=new Promise(((I,g)=>{A=I})),R=A=>console.log(A);function F(A){throw A}function y(){var A=o.buffer;g=new Int8Array(A),Q=new Int16Array(A),C=new Uint8Array(A),B=new Int32Array(A),E=new Uint32Array(A),D=new Float32Array(A),w=new Float64Array(A),i=new BigInt64Array(A),new BigUint64Array(A)}G.agerrMessages=[],G.stderrMessages=[],I=A=>G.stderrMessages.push(A);var s=\"undefined\"!=typeof TextDecoder?new TextDecoder:void 0,h=(A,I,g)=>{for(var Q=I+g,B=I;A[B]&&!(B>=Q);)++B;if(B-I>16&&A.buffer&&s)return s.decode(A.subarray(I,B));for(var C=\"\";I>10,56320|1023&i)}}else C+=String.fromCharCode((31&E)<<6|D)}else C+=String.fromCharCode(E)}return C},K=(A,I)=>A?h(C,A,I):\"\";class N{constructor(A){this.excPtr=A,this.ptr=A-24}set_type(A){E[this.ptr+4>>2]=A}get_type(){return E[this.ptr+4>>2]}set_destructor(A){E[this.ptr+8>>2]=A}get_destructor(){return E[this.ptr+8>>2]}set_caught(A){A=A?1:0,g[this.ptr+12]=A}get_caught(){return 0!=g[this.ptr+12]}set_rethrown(A){A=A?1:0,g[this.ptr+13]=A}get_rethrown(){return 0!=g[this.ptr+13]}init(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I)}set_adjusted_ptr(A){E[this.ptr+16>>2]=A}get_adjusted_ptr(){return E[this.ptr+16>>2]}get_exception_ptr(){if(T(this.get_type()))return E[this.excPtr>>2];var A=this.get_adjusted_ptr();return 0!==A?A:this.excPtr}}var k={isAbs:A=>\"/\"===A.charAt(0),splitPath:A=>/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(A).slice(1),normalizeArray:(A,I)=>{for(var g=0,Q=A.length-1;Q>=0;Q--){var B=A[Q];\".\"===B?A.splice(Q,1):\"..\"===B?(A.splice(Q,1),g++):g&&(A.splice(Q,1),g--)}if(I)for(;g;g--)A.unshift(\"..\");return A},normalize:A=>{var I=k.isAbs(A),g=\"/\"===A.substr(-1);return(A=k.normalizeArray(A.split(\"/\").filter((A=>!!A)),!I).join(\"/\"))||I||(A=\".\"),A&&g&&(A+=\"/\"),(I?\"/\":\"\")+A},dirname:A=>{var I=k.splitPath(A),g=I[0],Q=I[1];return g||Q?(Q&&(Q=Q.substr(0,Q.length-1)),g+Q):\".\"},basename:A=>{if(\"/\"===A)return\"/\";var I=(A=(A=k.normalize(A)).replace(/\\/$/,\"\")).lastIndexOf(\"/\");return-1===I?A:A.substr(I+1)},join:function(){for(var A=arguments.length,I=new Array(A),g=0;gk.normalize(A+\"/\"+I)},L=A=>(L=(()=>{if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues)return A=>crypto.getRandomValues(A);F(\"initRandomDevice\")})())(A),U={resolve:function(){for(var A=\"\",I=!1,g=arguments.length-1;g>=-1&&!I;g--){var Q=g>=0?g<0||arguments.length<=g?void 0:arguments[g]:r.cwd();if(\"string\"!=typeof Q)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!Q)return\"\";A=Q+\"/\"+A,I=k.isAbs(Q)}return(I?\"/\":\"\")+(A=k.normalizeArray(A.split(\"/\").filter((A=>!!A)),!I).join(\"/\"))||\".\"},relative:(A,I)=>{function g(A){for(var I=0;I=0&&\"\"===A[g];g--);return I>g?[]:A.slice(I,g-I+1)}A=U.resolve(A).substr(1),I=U.resolve(I).substr(1);for(var Q=g(A.split(\"/\")),B=g(I.split(\"/\")),C=Math.min(Q.length,B.length),E=C,D=0;D{for(var I=0,g=0;g=55296&&Q<=57343?(I+=4,++g):I+=3}return I},J=(A,I,g,Q)=>{if(!(Q>0))return 0;for(var B=g,C=g+Q-1,E=0;E=55296&&D<=57343)D=65536+((1023&D)<<10)|1023&A.charCodeAt(++E);if(D<=127){if(g>=C)break;I[g++]=D}else if(D<=2047){if(g+1>=C)break;I[g++]=192|D>>6,I[g++]=128|63&D}else if(D<=65535){if(g+2>=C)break;I[g++]=224|D>>12,I[g++]=128|D>>6&63,I[g++]=128|63&D}else{if(g+3>=C)break;I[g++]=240|D>>18,I[g++]=128|D>>12&63,I[g++]=128|D>>6&63,I[g++]=128|63&D}}return I[g]=0,g-B};function c(A,I,g){var Q=g>0?g:Y(A)+1,B=new Array(Q),C=J(A,B,0,B.length);return I&&(B.length=C),B}var a={ttys:[],init(){},shutdown(){},register(A,I){a.ttys[A]={input:[],output:[],ops:I},r.registerDevice(A,a.stream_ops)},stream_ops:{open(A){var I=a.ttys[A.node.rdev];if(!I)throw new r.ErrnoError(43);A.tty=I,A.seekable=!1},close(A){A.tty.ops.fsync(A.tty)},fsync(A){A.tty.ops.fsync(A.tty)},read(A,I,g,Q,B){if(!A.tty||!A.tty.ops.get_char)throw new r.ErrnoError(60);for(var C=0,E=0;E(()=>{if(!S.length){var A=null;if(\"undefined\"!=typeof window&&\"function\"==typeof window.prompt&&null!==(A=window.prompt(\"Input: \"))&&(A+=\"\\n\"),!A)return null;S=c(A,!0)}return S.shift()})(),put_char(A,I){null===I||10===I?(R(h(A.output,0)),A.output=[]):0!=I&&A.output.push(I)},fsync(A){A.output&&A.output.length>0&&(R(h(A.output,0)),A.output=[])},ioctl_tcgets:A=>({c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ioctl_tcsets:(A,I,g)=>0,ioctl_tiocgwinsz:A=>[24,80]},default_tty1_ops:{put_char(A,g){null===g||10===g?(I(h(A.output,0)),A.output=[]):0!=g&&A.output.push(g)},fsync(A){A.output&&A.output.length>0&&(I(h(A.output,0)),A.output=[])}}},H=A=>{A=((A,I)=>Math.ceil(A/I)*I)(A,65536);var I=z(65536,A);return I?((A,I)=>(C.fill(0,A,A+I),A))(I,A):0},Z={ops_table:null,mount:A=>Z.createNode(null,\"/\",16895,0),createNode(A,I,g,Q){if(r.isBlkdev(g)||r.isFIFO(g))throw new r.ErrnoError(63);Z.ops_table||={dir:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr,lookup:Z.node_ops.lookup,mknod:Z.node_ops.mknod,rename:Z.node_ops.rename,unlink:Z.node_ops.unlink,rmdir:Z.node_ops.rmdir,readdir:Z.node_ops.readdir,symlink:Z.node_ops.symlink},stream:{llseek:Z.stream_ops.llseek}},file:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr},stream:{llseek:Z.stream_ops.llseek,read:Z.stream_ops.read,write:Z.stream_ops.write,allocate:Z.stream_ops.allocate,mmap:Z.stream_ops.mmap,msync:Z.stream_ops.msync}},link:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr,readlink:Z.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr},stream:r.chrdev_stream_ops}};var B=r.createNode(A,I,g,Q);return r.isDir(B.mode)?(B.node_ops=Z.ops_table.dir.node,B.stream_ops=Z.ops_table.dir.stream,B.contents={}):r.isFile(B.mode)?(B.node_ops=Z.ops_table.file.node,B.stream_ops=Z.ops_table.file.stream,B.usedBytes=0,B.contents=null):r.isLink(B.mode)?(B.node_ops=Z.ops_table.link.node,B.stream_ops=Z.ops_table.link.stream):r.isChrdev(B.mode)&&(B.node_ops=Z.ops_table.chrdev.node,B.stream_ops=Z.ops_table.chrdev.stream),B.timestamp=Date.now(),A&&(A.contents[I]=B,A.timestamp=B.timestamp),B},getFileDataAsTypedArray:A=>A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array(0),expandFileStorage(A,I){var g=A.contents?A.contents.length:0;if(!(g>=I)){I=Math.max(I,g*(g<1048576?2:1.125)>>>0),0!=g&&(I=Math.max(I,256));var Q=A.contents;A.contents=new Uint8Array(I),A.usedBytes>0&&A.contents.set(Q.subarray(0,A.usedBytes),0)}},resizeFileStorage(A,I){if(A.usedBytes!=I)if(0==I)A.contents=null,A.usedBytes=0;else{var g=A.contents;A.contents=new Uint8Array(I),g&&A.contents.set(g.subarray(0,Math.min(I,A.usedBytes))),A.usedBytes=I}},node_ops:{getattr(A){var I={};return I.dev=r.isChrdev(A.mode)?A.id:1,I.ino=A.id,I.mode=A.mode,I.nlink=1,I.uid=0,I.gid=0,I.rdev=A.rdev,r.isDir(A.mode)?I.size=4096:r.isFile(A.mode)?I.size=A.usedBytes:r.isLink(A.mode)?I.size=A.link.length:I.size=0,I.atime=new Date(A.timestamp),I.mtime=new Date(A.timestamp),I.ctime=new Date(A.timestamp),I.blksize=4096,I.blocks=Math.ceil(I.size/I.blksize),I},setattr(A,I){void 0!==I.mode&&(A.mode=I.mode),void 0!==I.timestamp&&(A.timestamp=I.timestamp),void 0!==I.size&&Z.resizeFileStorage(A,I.size)},lookup(A,I){throw r.genericErrors[44]},mknod:(A,I,g,Q)=>Z.createNode(A,I,g,Q),rename(A,I,g){if(r.isDir(A.mode)){var Q;try{Q=r.lookupNode(I,g)}catch(A){}if(Q)for(var B in Q.contents)throw new r.ErrnoError(55)}delete A.parent.contents[A.name],A.parent.timestamp=Date.now(),A.name=g,I.contents[g]=A,I.timestamp=A.parent.timestamp},unlink(A,I){delete A.contents[I],A.timestamp=Date.now()},rmdir(A,I){var g=r.lookupNode(A,I);for(var Q in g.contents)throw new r.ErrnoError(55);delete A.contents[I],A.timestamp=Date.now()},readdir(A){var I=[\".\",\"..\"];for(var g of Object.keys(A.contents))I.push(g);return I},symlink(A,I,g){var Q=Z.createNode(A,I,41471,0);return Q.link=g,Q},readlink(A){if(!r.isLink(A.mode))throw new r.ErrnoError(28);return A.link}},stream_ops:{read(A,I,g,Q,B){var C=A.node.contents;if(B>=A.node.usedBytes)return 0;var E=Math.min(A.node.usedBytes-B,Q);if(E>8&&C.subarray)I.set(C.subarray(B,B+E),g);else for(var D=0;D0||Q+I(Z.stream_ops.write(A,I,0,Q,g,!1),0)}},d=(A,I)=>{var g=0;return A&&(g|=365),I&&(g|=146),g},r={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(A){this.name=\"ErrnoError\",this.errno=A}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(A){this.node=A}get isRead(){return 1!=(2097155&this.flags)}get isWrite(){return 0!=(2097155&this.flags)}get isAppend(){return 1024&this.flags}get flags(){return this.shared.flags}set flags(A){this.shared.flags=A}get position(){return this.shared.position}set position(A){this.shared.position=A}},FSNode:class{constructor(A,I,g,Q){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=r.nextInode++,this.name=I,this.mode=g,this.node_ops={},this.stream_ops={},this.rdev=Q,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(A){A?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(A){A?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return r.isDir(this.mode)}get isDevice(){return r.isChrdev(this.mode)}},lookupPath(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(A=U.resolve(A)))return{path:\"\",node:null};if(I=Object.assign({follow_mount:!0,recurse_count:0},I),I.recurse_count>8)throw new r.ErrnoError(32);for(var g=A.split(\"/\").filter((A=>!!A)),Q=r.root,B=\"/\",C=0;C40)throw new r.ErrnoError(32)}}return{path:B,node:Q}},getPath(A){for(var I;;){if(r.isRoot(A)){var g=A.mount.mountpoint;return I?\"/\"!==g[g.length-1]?`${g}/${I}`:g+I:g}I=I?`${A.name}/${I}`:A.name,A=A.parent}},hashName(A,I){for(var g=0,Q=0;Q>>0)%r.nameTable.length},hashAddNode(A){var I=r.hashName(A.parent.id,A.name);A.name_next=r.nameTable[I],r.nameTable[I]=A},hashRemoveNode(A){var I=r.hashName(A.parent.id,A.name);if(r.nameTable[I]===A)r.nameTable[I]=A.name_next;else for(var g=r.nameTable[I];g;){if(g.name_next===A){g.name_next=A.name_next;break}g=g.name_next}},lookupNode(A,I){var g=r.mayLookup(A);if(g)throw new r.ErrnoError(g);for(var Q=r.hashName(A.id,I),B=r.nameTable[Q];B;B=B.name_next){var C=B.name;if(B.parent.id===A.id&&C===I)return B}return r.lookup(A,I)},createNode(A,I,g,Q){var B=new r.FSNode(A,I,g,Q);return r.hashAddNode(B),B},destroyNode(A){r.hashRemoveNode(A)},isRoot:A=>A===A.parent,isMountpoint:A=>!!A.mounted,isFile:A=>32768==(61440&A),isDir:A=>16384==(61440&A),isLink:A=>40960==(61440&A),isChrdev:A=>8192==(61440&A),isBlkdev:A=>24576==(61440&A),isFIFO:A=>4096==(61440&A),isSocket:A=>49152==(49152&A),flagsToPermissionString(A){var I=[\"r\",\"w\",\"rw\"][3&A];return 512&A&&(I+=\"w\"),I},nodePermissions:(A,I)=>r.ignorePermissions||(!I.includes(\"r\")||292&A.mode)&&(!I.includes(\"w\")||146&A.mode)&&(!I.includes(\"x\")||73&A.mode)?0:2,mayLookup(A){if(!r.isDir(A.mode))return 54;var I=r.nodePermissions(A,\"x\");return I||(A.node_ops.lookup?0:2)},mayCreate(A,I){try{r.lookupNode(A,I);return 20}catch(A){}return r.nodePermissions(A,\"wx\")},mayDelete(A,I,g){var Q;try{Q=r.lookupNode(A,I)}catch(A){return A.errno}var B=r.nodePermissions(A,\"wx\");if(B)return B;if(g){if(!r.isDir(Q.mode))return 54;if(r.isRoot(Q)||r.getPath(Q)===r.cwd())return 10}else if(r.isDir(Q.mode))return 31;return 0},mayOpen:(A,I)=>A?r.isLink(A.mode)?32:r.isDir(A.mode)&&(\"r\"!==r.flagsToPermissionString(I)||512&I)?31:r.nodePermissions(A,r.flagsToPermissionString(I)):44,MAX_OPEN_FDS:4096,nextfd(){for(var A=0;A<=r.MAX_OPEN_FDS;A++)if(!r.streams[A])return A;throw new r.ErrnoError(33)},getStreamChecked(A){var I=r.getStream(A);if(!I)throw new r.ErrnoError(8);return I},getStream:A=>r.streams[A],createStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return A=Object.assign(new r.FSStream,A),-1==I&&(I=r.nextfd()),A.fd=I,r.streams[I]=A,A},closeStream(A){r.streams[A]=null},dupStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;var g=r.createStream(A,I);return g.stream_ops?.dup?.(g),g},chrdev_stream_ops:{open(A){var I=r.getDevice(A.node.rdev);A.stream_ops=I.stream_ops,A.stream_ops.open?.(A)},llseek(){throw new r.ErrnoError(70)}},major:A=>A>>8,minor:A=>255&A,makedev:(A,I)=>A<<8|I,registerDevice(A,I){r.devices[A]={stream_ops:I}},getDevice:A=>r.devices[A],getMounts(A){for(var I=[],g=[A];g.length;){var Q=g.pop();I.push(Q),g.push(...Q.mounts)}return I},syncfs(A,g){\"function\"==typeof A&&(g=A,A=!1),r.syncFSRequests++,r.syncFSRequests>1&&I(`warning: ${r.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var Q=r.getMounts(r.root.mount),B=0;function C(A){return r.syncFSRequests--,g(A)}function E(A){if(A)return E.errored?void 0:(E.errored=!0,C(A));++B>=Q.length&&C(null)}Q.forEach((I=>{if(!I.type.syncfs)return E(null);I.type.syncfs(I,A,E)}))},mount(A,I,g){var Q,B=\"/\"===g,C=!g;if(B&&r.root)throw new r.ErrnoError(10);if(!B&&!C){var E=r.lookupPath(g,{follow_mount:!1});if(g=E.path,Q=E.node,r.isMountpoint(Q))throw new r.ErrnoError(10);if(!r.isDir(Q.mode))throw new r.ErrnoError(54)}var D={type:A,opts:I,mountpoint:g,mounts:[]},w=A.mount(D);return w.mount=D,D.root=w,B?r.root=w:Q&&(Q.mounted=D,Q.mount&&Q.mount.mounts.push(D)),w},unmount(A){var I=r.lookupPath(A,{follow_mount:!1});if(!r.isMountpoint(I.node))throw new r.ErrnoError(28);var g=I.node,Q=g.mounted,B=r.getMounts(Q);Object.keys(r.nameTable).forEach((A=>{for(var I=r.nameTable[A];I;){var g=I.name_next;B.includes(I.mount)&&r.destroyNode(I),I=g}})),g.mounted=null;var C=g.mount.mounts.indexOf(Q);g.mount.mounts.splice(C,1)},lookup:(A,I)=>A.node_ops.lookup(A,I),mknod(A,I,g){var Q=r.lookupPath(A,{parent:!0}).node,B=k.basename(A);if(!B||\".\"===B||\"..\"===B)throw new r.ErrnoError(28);var C=r.mayCreate(Q,B);if(C)throw new r.ErrnoError(C);if(!Q.node_ops.mknod)throw new r.ErrnoError(63);return Q.node_ops.mknod(Q,B,I,g)},create:(A,I)=>(I=void 0!==I?I:438,I&=4095,I|=32768,r.mknod(A,I,0)),mkdir:(A,I)=>(I=void 0!==I?I:511,I&=1023,I|=16384,r.mknod(A,I,0)),mkdirTree(A,I){for(var g=A.split(\"/\"),Q=\"\",B=0;B(void 0===g&&(g=I,I=438),I|=8192,r.mknod(A,I,g)),symlink(A,I){if(!U.resolve(A))throw new r.ErrnoError(44);var g=r.lookupPath(I,{parent:!0}).node;if(!g)throw new r.ErrnoError(44);var Q=k.basename(I),B=r.mayCreate(g,Q);if(B)throw new r.ErrnoError(B);if(!g.node_ops.symlink)throw new r.ErrnoError(63);return g.node_ops.symlink(g,Q,A)},rename(A,I){var g,Q,B=k.dirname(A),C=k.dirname(I),E=k.basename(A),D=k.basename(I);if(g=r.lookupPath(A,{parent:!0}).node,Q=r.lookupPath(I,{parent:!0}).node,!g||!Q)throw new r.ErrnoError(44);if(g.mount!==Q.mount)throw new r.ErrnoError(75);var w,i=r.lookupNode(g,E),o=U.relative(A,C);if(\".\"!==o.charAt(0))throw new r.ErrnoError(28);if(\".\"!==(o=U.relative(I,B)).charAt(0))throw new r.ErrnoError(55);try{w=r.lookupNode(Q,D)}catch(A){}if(i!==w){var G=r.isDir(i.mode),M=r.mayDelete(g,E,G);if(M)throw new r.ErrnoError(M);if(M=w?r.mayDelete(Q,D,G):r.mayCreate(Q,D))throw new r.ErrnoError(M);if(!g.node_ops.rename)throw new r.ErrnoError(63);if(r.isMountpoint(i)||w&&r.isMountpoint(w))throw new r.ErrnoError(10);if(Q!==g&&(M=r.nodePermissions(g,\"w\")))throw new r.ErrnoError(M);r.hashRemoveNode(i);try{g.node_ops.rename(i,Q,D),i.parent=Q}catch(A){throw A}finally{r.hashAddNode(i)}}},rmdir(A){var I=r.lookupPath(A,{parent:!0}).node,g=k.basename(A),Q=r.lookupNode(I,g),B=r.mayDelete(I,g,!0);if(B)throw new r.ErrnoError(B);if(!I.node_ops.rmdir)throw new r.ErrnoError(63);if(r.isMountpoint(Q))throw new r.ErrnoError(10);I.node_ops.rmdir(I,g),r.destroyNode(Q)},readdir(A){var I=r.lookupPath(A,{follow:!0}).node;if(!I.node_ops.readdir)throw new r.ErrnoError(54);return I.node_ops.readdir(I)},unlink(A){var I=r.lookupPath(A,{parent:!0}).node;if(!I)throw new r.ErrnoError(44);var g=k.basename(A),Q=r.lookupNode(I,g),B=r.mayDelete(I,g,!1);if(B)throw new r.ErrnoError(B);if(!I.node_ops.unlink)throw new r.ErrnoError(63);if(r.isMountpoint(Q))throw new r.ErrnoError(10);I.node_ops.unlink(I,g),r.destroyNode(Q)},readlink(A){var I=r.lookupPath(A).node;if(!I)throw new r.ErrnoError(44);if(!I.node_ops.readlink)throw new r.ErrnoError(28);return U.resolve(r.getPath(I.parent),I.node_ops.readlink(I))},stat(A,I){var g=r.lookupPath(A,{follow:!I}).node;if(!g)throw new r.ErrnoError(44);if(!g.node_ops.getattr)throw new r.ErrnoError(63);return g.node_ops.getattr(g)},lstat:A=>r.stat(A,!0),chmod(A,I,g){var Q;\"string\"==typeof A?Q=r.lookupPath(A,{follow:!g}).node:Q=A;if(!Q.node_ops.setattr)throw new r.ErrnoError(63);Q.node_ops.setattr(Q,{mode:4095&I|-4096&Q.mode,timestamp:Date.now()})},lchmod(A,I){r.chmod(A,I,!0)},fchmod(A,I){var g=r.getStreamChecked(A);r.chmod(g.node,I)},chown(A,I,g,Q){var B;\"string\"==typeof A?B=r.lookupPath(A,{follow:!Q}).node:B=A;if(!B.node_ops.setattr)throw new r.ErrnoError(63);B.node_ops.setattr(B,{timestamp:Date.now()})},lchown(A,I,g){r.chown(A,I,g,!0)},fchown(A,I,g){var Q=r.getStreamChecked(A);r.chown(Q.node,I,g)},truncate(A,I){if(I<0)throw new r.ErrnoError(28);var g;\"string\"==typeof A?g=r.lookupPath(A,{follow:!0}).node:g=A;if(!g.node_ops.setattr)throw new r.ErrnoError(63);if(r.isDir(g.mode))throw new r.ErrnoError(31);if(!r.isFile(g.mode))throw new r.ErrnoError(28);var Q=r.nodePermissions(g,\"w\");if(Q)throw new r.ErrnoError(Q);g.node_ops.setattr(g,{size:I,timestamp:Date.now()})},ftruncate(A,I){var g=r.getStreamChecked(A);if(0==(2097155&g.flags))throw new r.ErrnoError(28);r.truncate(g.node,I)},utime(A,I,g){var Q=r.lookupPath(A,{follow:!0}).node;Q.node_ops.setattr(Q,{timestamp:Math.max(I,g)})},open(A,I,g){if(\"\"===A)throw new r.ErrnoError(44);var Q;if(g=64&(I=\"string\"==typeof I?(A=>{var I={r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090}[A];if(void 0===I)throw new Error(`Unknown file open mode: ${A}`);return I})(I):I)?4095&(g=void 0===g?438:g)|32768:0,\"object\"==typeof A)Q=A;else{A=k.normalize(A);try{Q=r.lookupPath(A,{follow:!(131072&I)}).node}catch(A){}}var B=!1;if(64&I)if(Q){if(128&I)throw new r.ErrnoError(20)}else Q=r.mknod(A,g,0),B=!0;if(!Q)throw new r.ErrnoError(44);if(r.isChrdev(Q.mode)&&(I&=-513),65536&I&&!r.isDir(Q.mode))throw new r.ErrnoError(54);if(!B){var C=r.mayOpen(Q,I);if(C)throw new r.ErrnoError(C)}512&I&&!B&&r.truncate(Q,0),I&=-131713;var E=r.createStream({node:Q,path:r.getPath(Q),flags:I,seekable:!0,position:0,stream_ops:Q.stream_ops,ungotten:[],error:!1});return E.stream_ops.open&&E.stream_ops.open(E),!G.logReadFiles||1&I||(r.readFiles||(r.readFiles={}),A in r.readFiles||(r.readFiles[A]=1)),E},close(A){if(r.isClosed(A))throw new r.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(A){throw A}finally{r.closeStream(A.fd)}A.fd=null},isClosed:A=>null===A.fd,llseek(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new r.ErrnoError(70);if(0!=g&&1!=g&&2!=g)throw new r.ErrnoError(28);return A.position=A.stream_ops.llseek(A,I,g),A.ungotten=[],A.position},read(A,I,g,Q,B){if(Q<0||B<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(1==(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.read)throw new r.ErrnoError(28);var C=void 0!==B;if(C){if(!A.seekable)throw new r.ErrnoError(70)}else B=A.position;var E=A.stream_ops.read(A,I,g,Q,B);return C||(A.position+=E),E},write(A,I,g,Q,B,C){if(Q<0||B<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(0==(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.write)throw new r.ErrnoError(28);A.seekable&&1024&A.flags&&r.llseek(A,0,2);var E=void 0!==B;if(E){if(!A.seekable)throw new r.ErrnoError(70)}else B=A.position;var D=A.stream_ops.write(A,I,g,Q,B,C);return E||(A.position+=D),D},allocate(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(I<0||g<=0)throw new r.ErrnoError(28);if(0==(2097155&A.flags))throw new r.ErrnoError(8);if(!r.isFile(A.node.mode)&&!r.isDir(A.node.mode))throw new r.ErrnoError(43);if(!A.stream_ops.allocate)throw new r.ErrnoError(138);A.stream_ops.allocate(A,I,g)},mmap(A,I,g,Q,B){if(0!=(2&Q)&&0==(2&B)&&2!=(2097155&A.flags))throw new r.ErrnoError(2);if(1==(2097155&A.flags))throw new r.ErrnoError(2);if(!A.stream_ops.mmap)throw new r.ErrnoError(43);return A.stream_ops.mmap(A,I,g,Q,B)},msync:(A,I,g,Q,B)=>A.stream_ops.msync?A.stream_ops.msync(A,I,g,Q,B):0,ioctl(A,I,g){if(!A.stream_ops.ioctl)throw new r.ErrnoError(59);return A.stream_ops.ioctl(A,I,g)},readFile(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(I.flags=I.flags||0,I.encoding=I.encoding||\"binary\",\"utf8\"!==I.encoding&&\"binary\"!==I.encoding)throw new Error(`Invalid encoding type \"${I.encoding}\"`);var g,Q=r.open(A,I.flags),B=r.stat(A).size,C=new Uint8Array(B);return r.read(Q,C,0,B,0),\"utf8\"===I.encoding?g=h(C,0):\"binary\"===I.encoding&&(g=C),r.close(Q),g},writeFile(A,I){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};g.flags=g.flags||577;var Q=r.open(A,g.flags,g.mode);if(\"string\"==typeof I){var B=new Uint8Array(Y(I)+1),C=J(I,B,0,B.length);r.write(Q,B,0,C,void 0,g.canOwn)}else{if(!ArrayBuffer.isView(I))throw new Error(\"Unsupported data type\");r.write(Q,I,0,I.byteLength,void 0,g.canOwn)}r.close(Q)},cwd:()=>r.currentPath,chdir(A){var I=r.lookupPath(A,{follow:!0});if(null===I.node)throw new r.ErrnoError(44);if(!r.isDir(I.node.mode))throw new r.ErrnoError(54);var g=r.nodePermissions(I.node,\"x\");if(g)throw new r.ErrnoError(g);r.currentPath=I.path},createDefaultDirectories(){r.mkdir(\"/tmp\"),r.mkdir(\"/home\"),r.mkdir(\"/home/web_user\")},createDefaultDevices(){r.mkdir(\"/dev\"),r.registerDevice(r.makedev(1,3),{read:()=>0,write:(A,I,g,Q,B)=>Q}),r.mkdev(\"/dev/null\",r.makedev(1,3)),a.register(r.makedev(5,0),a.default_tty_ops),a.register(r.makedev(6,0),a.default_tty1_ops),r.mkdev(\"/dev/tty\",r.makedev(5,0)),r.mkdev(\"/dev/tty1\",r.makedev(6,0));var A=new Uint8Array(1024),I=0,g=()=>(0===I&&(I=L(A).byteLength),A[--I]);r.createDevice(\"/dev\",\"random\",g),r.createDevice(\"/dev\",\"urandom\",g),r.mkdir(\"/dev/shm\"),r.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){r.mkdir(\"/proc\");var A=r.mkdir(\"/proc/self\");r.mkdir(\"/proc/self/fd\"),r.mount({mount(){var I=r.createNode(A,\"fd\",16895,73);return I.node_ops={lookup(A,I){var g=+I,Q=r.getStreamChecked(g),B={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>Q.path}};return B.parent=B,B}},I}},{},\"/proc/self/fd\")},createStandardStreams(){G.stdin?r.createDevice(\"/dev\",\"stdin\",G.stdin):r.symlink(\"/dev/tty\",\"/dev/stdin\"),G.stdout?r.createDevice(\"/dev\",\"stdout\",null,G.stdout):r.symlink(\"/dev/tty\",\"/dev/stdout\"),G.stderr?r.createDevice(\"/dev\",\"stderr\",null,G.stderr):r.symlink(\"/dev/tty1\",\"/dev/stderr\"),r.open(\"/dev/stdin\",0),r.open(\"/dev/stdout\",1),r.open(\"/dev/stderr\",1)},staticInit(){[44].forEach((A=>{r.genericErrors[A]=new r.ErrnoError(A),r.genericErrors[A].stack=\"\"})),r.nameTable=new Array(4096),r.mount(Z,{},\"/\"),r.createDefaultDirectories(),r.createDefaultDevices(),r.createSpecialDirectories(),r.filesystems={MEMFS:Z}},init(A,I,g){r.init.initialized=!0,G.stdin=A||G.stdin,G.stdout=I||G.stdout,G.stderr=g||G.stderr,r.createStandardStreams()},quit(){r.init.initialized=!1;for(var A=0;Athis.length-1||A<0)){var I=A%this.chunkSize,g=A/this.chunkSize|0;return this.getter(g)[I]}}setDataGetter(A){this.getter=A}cacheLength(){var A=new XMLHttpRequest;if(A.open(\"HEAD\",Q,!1),A.send(null),!(A.status>=200&&A.status<300||304===A.status))throw new Error(\"Couldn't load \"+Q+\". Status: \"+A.status);var I,g=Number(A.getResponseHeader(\"Content-length\")),B=(I=A.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===I,C=(I=A.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===I,E=1048576;B||(E=g);var D=this;D.setDataGetter((A=>{var I=A*E,B=(A+1)*E-1;if(B=Math.min(B,g-1),void 0===D.chunks[A]&&(D.chunks[A]=((A,I)=>{if(A>I)throw new Error(\"invalid range (\"+A+\", \"+I+\") or no bytes requested!\");if(I>g-1)throw new Error(\"only \"+g+\" bytes available! programmer error!\");var B=new XMLHttpRequest;if(B.open(\"GET\",Q,!1),g!==E&&B.setRequestHeader(\"Range\",\"bytes=\"+A+\"-\"+I),B.responseType=\"arraybuffer\",B.overrideMimeType&&B.overrideMimeType(\"text/plain; charset=x-user-defined\"),B.send(null),!(B.status>=200&&B.status<300||304===B.status))throw new Error(\"Couldn't load \"+Q+\". Status: \"+B.status);return void 0!==B.response?new Uint8Array(B.response||[]):c(B.responseText||\"\",!0)})(I,B)),void 0===D.chunks[A])throw new Error(\"doXHR failed!\");return D.chunks[A]})),!C&&g||(E=g=1,g=this.getter(0).length,E=g,R(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=g,this._chunkSize=E,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(\"undefined\"!=typeof XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var D={isDevice:!1,contents:new E}}else D={isDevice:!1,url:Q};var w=r.createFile(A,I,D,B,C);D.contents?w.contents=D.contents:D.url&&(w.contents=null,w.url=D.url),Object.defineProperties(w,{usedBytes:{get:function(){return this.contents.length}}});var i={};function o(A,I,g,Q,B){var C=A.node.contents;if(B>=C.length)return 0;var E=Math.min(C.length-B,Q);if(C.slice)for(var D=0;D{var I=w.stream_ops[A];i[A]=function(){return r.forceLoadFile(w),I(...arguments)}})),i.read=(A,I,g,Q,B)=>(r.forceLoadFile(w),o(A,I,g,Q,B)),i.mmap=(A,I,Q,B,C)=>{r.forceLoadFile(w);var E=H(I);if(!E)throw new r.ErrnoError(48);return o(A,g,E,I,Q),{ptr:E,allocated:!0}},w.stream_ops=i,w}},q={DEFAULT_POLLMASK:5,calculateAt(A,I,g){if(k.isAbs(I))return I;var Q;-100===A?Q=r.cwd():Q=q.getStreamFromFD(A).path;if(0==I.length){if(!g)throw new r.ErrnoError(44);return Q}return k.join2(Q,I)},doStat(A,I,g){var Q=A(I);B[g>>2]=Q.dev,B[g+4>>2]=Q.mode,E[g+8>>2]=Q.nlink,B[g+12>>2]=Q.uid,B[g+16>>2]=Q.gid,B[g+20>>2]=Q.rdev,i[g+24>>3]=BigInt(Q.size),B[g+32>>2]=4096,B[g+36>>2]=Q.blocks;var C=Q.atime.getTime(),D=Q.mtime.getTime(),w=Q.ctime.getTime();return i[g+40>>3]=BigInt(Math.floor(C/1e3)),E[g+48>>2]=C%1e3*1e3,i[g+56>>3]=BigInt(Math.floor(D/1e3)),E[g+64>>2]=D%1e3*1e3,i[g+72>>3]=BigInt(Math.floor(w/1e3)),E[g+80>>2]=w%1e3*1e3,i[g+88>>3]=BigInt(Q.ino),0},doMsync(A,I,g,Q,B){if(!r.isFile(I.node.mode))throw new r.ErrnoError(43);if(2&Q)return 0;var E=C.slice(A,A+g);r.msync(I,E,B,g,Q)},getStreamFromFD:A=>r.getStreamChecked(A),varargs:void 0,getStr:A=>K(A)};function t(){var A=B[+q.varargs>>2];return q.varargs+=4,A}var W=t;var l=A=>A<-9007199254740992||A>9007199254740992?NaN:Number(A);var b=(A,I,g)=>J(A,C,I,g),x=A=>{var I=(A-o.buffer.byteLength+65535)/65536;try{return o.grow(I),y(),1}catch(A){}},m={},n=()=>{if(!n.strings){var A={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:\"./this.program\"};for(var I in m)void 0===m[I]?delete A[I]:A[I]=m[I];var g=[];for(var I in A)g.push(`${I}=${A[I]}`);n.strings=g}return n.strings},O=A=>{throw`exit(${A})`};var V=A=>X(A);r.createPreloadedFile=(A,I,g,Q,B,C,E,D,w,i)=>{var o=I?U.resolve(k.join2(A,I)):A,G=getUniqueRunDependency(`cp ${o}`);function M(g){!function(g){i?.(),D||((A,I,g,Q,B,C)=>{r.createDataFile(A,I,g,Q,B,C)})(A,I,g,Q,B,w),C?.(),removeRunDependency(G)}(g)}addRunDependency(G),\"string\"==typeof g?((A,I,g,Q)=>{var B=Q?\"\":getUniqueRunDependency(`al ${A}`);readAsync(A).then((A=>{I(new Uint8Array(A)),B&&removeRunDependency(B)}),(I=>{if(!g)throw`Loading data file \"${A}\" failed.`;g()})),B&&addRunDependency(B)})(g,M,E):M(g)},r.staticInit();var z,j,X,e,T,p={a:(A,I,g,Q)=>{F(`Assertion failed: ${K(A)}, at: `+[I?K(I):\"unknown filename\",g,Q?K(Q):\"unknown function\"])},b:(A,I,g)=>{throw new N(A).init(I,g),A},v:function(A,I,g,Q){try{if(I=q.getStr(I),I=q.calculateAt(A,I),-8&g)return-28;var B=r.lookupPath(I,{follow:!0}).node;if(!B)return-44;var C=\"\";return 4&g&&(C+=\"r\"),2&g&&(C+=\"w\"),1&g&&(C+=\"x\"),C&&r.nodePermissions(B,C)?-2:0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},f:function(A,I,g){q.varargs=g;try{var B=q.getStreamFromFD(A);switch(I){case 0:if((C=t())<0)return-28;for(;r.streams[C];)C++;return r.dupStream(B,C).fd;case 1:case 2:case 13:case 14:return 0;case 3:return B.flags;case 4:var C=t();return B.flags|=C,0;case 12:C=W();return Q[C+0>>1]=2,0}return-28}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},u:function(A,I){try{var g=q.getStreamFromFD(A);return q.doStat(r.stat,g.path,I)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},k:function(A,I,C){q.varargs=C;try{var E=q.getStreamFromFD(A);switch(I){case 21509:case 21510:case 21511:case 21512:case 21524:case 21515:return E.tty?0:-59;case 21505:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcgets){var D=E.tty.ops.ioctl_tcgets(E),w=W();B[w>>2]=D.c_iflag||0,B[w+4>>2]=D.c_oflag||0,B[w+8>>2]=D.c_cflag||0,B[w+12>>2]=D.c_lflag||0;for(var i=0;i<32;i++)g[w+i+17]=D.c_cc[i]||0;return 0}return 0;case 21506:case 21507:case 21508:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcsets){w=W();var o=B[w>>2],G=B[w+4>>2],M=B[w+8>>2],R=B[w+12>>2],F=[];for(i=0;i<32;i++)F.push(g[w+i+17]);return E.tty.ops.ioctl_tcsets(E.tty,I,{c_iflag:o,c_oflag:G,c_cflag:M,c_lflag:R,c_cc:F})}return 0;case 21519:if(!E.tty)return-59;w=W();return B[w>>2]=0,0;case 21520:return E.tty?-28:-59;case 21531:w=W();return r.ioctl(E,I,w);case 21523:if(!E.tty)return-59;if(E.tty.ops.ioctl_tiocgwinsz){var y=E.tty.ops.ioctl_tiocgwinsz(E.tty);w=W();Q[w>>1]=y[0],Q[w+2>>1]=y[1]}return 0;default:return-28}}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},s:function(A,I,g,Q){try{I=q.getStr(I);var B=256&Q,C=4096&Q;return Q&=-6401,I=q.calculateAt(A,I,C),q.doStat(B?r.lstat:r.stat,I,g)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},h:function(A,I,g,Q){q.varargs=Q;try{I=q.getStr(I),I=q.calculateAt(A,I);var B=Q?t():0;return r.open(I,g,B).fd}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},t:function(A,I){try{return A=q.getStr(A),q.doStat(r.stat,A,I)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},j:()=>{F(\"\")},n:function(A,I,g,Q,C,D,w){C=l(C);try{if(isNaN(C))return 61;var i=q.getStreamFromFD(Q),o=r.mmap(i,A,C,I,g),G=o.ptr;return B[D>>2]=o.allocated,E[w>>2]=G,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},o:function(A,I,g,Q,B,C){C=l(C);try{var E=q.getStreamFromFD(B);2&g&&q.doMsync(A,E,I,Q,C)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},l:(A,I,g,Q)=>{var C=(new Date).getFullYear(),D=new Date(C,0,1),w=new Date(C,6,1),i=D.getTimezoneOffset(),o=w.getTimezoneOffset(),G=Math.max(i,o);E[A>>2]=60*G,B[I>>2]=Number(i!=o);var M=A=>{var I=A>=0?\"-\":\"+\",g=Math.abs(A);return`UTC${I}${String(Math.floor(g/60)).padStart(2,\"0\")}${String(g%60).padStart(2,\"0\")}`},R=M(i),F=M(o);oDate.now(),m:A=>{var I=C.length,g=2147483648;if((A>>>=0)>g)return!1;for(var Q,B,E=1;E<=4;E*=2){var D=I*(1+.2/E);D=Math.min(D,A+100663296);var w=Math.min(g,(Q=Math.max(A,D))+((B=65536)-Q%B)%B);if(x(w))return!0}return!1},q:(A,I)=>{var Q=0;return n().forEach(((B,C)=>{var D=I+Q;E[A+4*C>>2]=D,((A,I)=>{for(var Q=0;Q{var g=n();E[A>>2]=g.length;var Q=0;return g.forEach((A=>Q+=A.length+1)),E[I>>2]=Q,0},g:O,c:function(A){try{var I=q.getStreamFromFD(A);return r.close(I),0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},e:function(A,I,Q,B){try{var C=((A,I,Q,B)=>{for(var C=0,D=0;D>2],i=E[I+4>>2];I+=8;var o=r.read(A,g,w,i,B);if(o<0)return-1;if(C+=o,o>2]=C,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},p:function(A,I,g,Q){I=l(I);try{if(isNaN(I))return 61;var B=q.getStreamFromFD(A);return r.llseek(B,I,g),i[Q>>3]=BigInt(B.position),B.getdents&&0===I&&0===g&&(B.getdents=null),0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},d:function(A,I,Q,B){try{var C=((A,I,Q,B)=>{for(var C=0,D=0;D>2],i=E[I+4>>2];I+=8;var o=r.write(A,g,w,i,B);if(o<0)return-1;C+=o,void 0!==B&&(B+=o)}return C})(q.getStreamFromFD(A),I,Q);return E[B>>2]=C,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},w:function(A){return G.agerrMessages.push(K(A)),0}};G.ccall=(A,I,Q,B,C)=>{var E={string:A=>{var I=0;return null!=A&&0!==A&&(I=(A=>{var I=Y(A)+1,g=V(I);return b(A,g,I),g})(A)),I},array:A=>{var I,Q,B=V(A.length);return I=A,Q=B,g.set(I,Q),B}};var D=(A=>G[\"_\"+A])(A),w=[],i=0;if(B)for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:\"i8\";switch(I.endsWith(\"*\")&&(I=\"*\"),I){case\"i1\":case\"i8\":return g[A];case\"i16\":return Q[A>>1];case\"i32\":return B[A>>2];case\"i64\":return i[A>>3];case\"float\":return D[A>>2];case\"double\":return w[A>>3];case\"*\":return E[A>>2];default:F(`invalid type for getValue: ${I}`)}},G.PATH=k,G.UTF8ToString=K,G.stringToUTF8=b,G.lengthBytesUTF8=Y,G.FS=r;var v={a:p};return WebAssembly.instantiate(G.wasm,v).then((I=>{var g=I.instance.exports;G._viz_set_y_invert=g.z,G._viz_set_reduce=g.A,G._viz_get_graphviz_version=g.B,G._viz_get_plugin_list=g.C,G._viz_create_graph=g.D,G._viz_read_one_graph=g.E,G._viz_string_dup=g.F,G._viz_string_dup_html=g.G,G._viz_string_free=g.H,G._viz_add_node=g.I,G._viz_add_edge=g.J,G._viz_add_subgraph=g.K,G._viz_set_default_graph_attribute=g.L,G._viz_set_default_node_attribute=g.M,G._viz_set_default_edge_attribute=g.N,G._viz_set_attribute=g.O,G._viz_free_graph=g.P,G._viz_render_graph=g.Q,G._free=g.S,G._malloc=g.T,z=g.U,j=g.V,X=g.W,e=g.X,T=g.Y,o=g.x,y(),function(A){A.y(),G.noFSInit||r.init.initialized||r.init(),r.ignorePermissions=!1}(g),A(G)})),M};const I=[[/^Error: (.*)/,\"error\"],[/^Warning: (.*)/,\"warning\"]];function g(A){return function(A){const I=[];let g;for(let Q=0;Q{for(let g=0;g{A.ccall(\"viz_set_default_graph_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}));if(g.nodeAttributes)for(const[B,C]of Object.entries(g.nodeAttributes))Q(A,I,C,(g=>{A.ccall(\"viz_set_default_node_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}));if(g.edgeAttributes)for(const[B,C]of Object.entries(g.edgeAttributes))Q(A,I,C,(g=>{A.ccall(\"viz_set_default_edge_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}))}function C(A,I,g,B){for(const[C,E]of Object.entries(B))Q(A,I,E,(I=>{A.ccall(\"viz_set_attribute\",\"number\",[\"number\",\"string\",\"number\"],[g,C,I])}))}function E(A,I,g){B(A,I,g),g.nodes&&g.nodes.forEach((g=>{const Q=A.ccall(\"viz_add_node\",\"number\",[\"number\",\"string\"],[I,String(g.name)]);g.attributes&&C(A,I,Q,g.attributes)})),g.edges&&g.edges.forEach((g=>{const Q=A.ccall(\"viz_add_edge\",\"number\",[\"number\",\"string\",\"string\"],[I,String(g.tail),String(g.head)]);g.attributes&&C(A,I,Q,g.attributes)})),g.subgraphs&&g.subgraphs.forEach((g=>{const Q=A.ccall(\"viz_add_subgraph\",\"number\",[\"number\",\"string\"],[I,String(g.name)]);E(A,Q,g)}))}function D(A,I,g){const Q=A.ccall(\"viz_create_graph\",\"number\",[\"string\",\"number\",\"number\"],[I.name,void 0===I.directed||I.directed,void 0!==I.strict&&I.strict]);return E(A,Q,I),Q}function w(A,I,Q){let C,E,w;try{if(A.agerrMessages=[],A.stderrMessages=[],w=function(A,I){return I?I.map((I=>{if(\"string\"!=typeof I.name)throw new Error(\"image name must be a string\");if(\"number\"!=typeof I.width&&\"string\"!=typeof I.width)throw new Error(\"image width must be a number or string\");if(\"number\"!=typeof I.height&&\"string\"!=typeof I.height)throw new Error(\"image height must be a number or string\");const g=A.PATH.join(\"/\",I.name),Q=`\\n\\n`;return A.FS.createPath(\"/\",A.PATH.dirname(g)),A.FS.writeFile(g,Q),g})):[]}(A,Q.images),\"string\"==typeof I)C=function(A,I,g){let Q;try{const g=A.lengthBytesUTF8(I);return Q=A.ccall(\"malloc\",\"number\",[\"number\"],[g+1]),A.stringToUTF8(I,Q,g+1),A.ccall(\"viz_read_one_graph\",\"number\",[\"number\"],[Q])}finally{Q&&A.ccall(\"free\",\"number\",[\"number\"],[Q])}}(A,I);else{if(\"object\"!=typeof I)throw new Error(\"input must be a string or object\");C=D(A,I)}return 0===C?{status:\"failure\",output:void 0,errors:g(A)}:(B(A,C,Q),A.ccall(\"viz_set_y_invert\",\"number\",[\"number\"],[Q.yInvert?1:0]),A.ccall(\"viz_set_reduce\",\"number\",[\"number\"],[Q.reduce?1:0]),E=A.ccall(\"viz_render_graph\",\"number\",[\"number\",\"string\",\"string\"],[C,Q.format,Q.engine]),0===E?{status:\"failure\",output:void 0,errors:g(A)}:{status:\"success\",output:A.UTF8ToString(E),errors:g(A)})}catch(I){if(/^exit\\(\\d+\\)/.test(I))return{status:\"failure\",output:void 0,errors:g(A)};throw I}finally{C&&A.ccall(\"viz_free_graph\",\"number\",[\"number\"],[C]),E&&A.ccall(\"free\",\"number\",[\"number\"],[E]),w&&function(A,I){for(const g of I)A.FS.analyzePath(g).exists&&A.FS.unlink(g)}(A,w)}}function i(A,I){const g=A.ccall(\"viz_get_plugin_list\",\"number\",[\"string\"],[I]);if(0==g)throw new Error(`couldn't get plugin list: ${I}`);const Q=[];let B,C=g;for(;B=A.getValue(C,\"*\");)Q.push(A.UTF8ToString(B)),A.ccall(\"free\",\"number\",[\"number\"],[B]),C+=4;return A.ccall(\"free\",\"number\",[\"number\"],[g]),Q}class o{constructor(A){this.module=A}get graphvizVersion(){return function(A){const I=A.ccall(\"viz_get_graphviz_version\",\"number\",[],[]);return A.UTF8ToString(I)}(this.module)}get formats(){return i(this.module,\"device\")}get engines(){return i(this.module,\"layout\")}render(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return w(this.module,A,{format:\"dot\",engine:\"dot\",...I})}renderString(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.render(A,I);if(\"success\"!==g.status)throw new Error(g.errors.find((A=>\"error\"==A.level))?.message||\"render failed\");return g.output}renderSVGElement(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:\"svg\"});return(new DOMParser).parseFromString(g,\"image/svg+xml\").documentElement}renderJSON(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:\"json\"});return JSON.parse(g)}}const G=\"AGFzbQEAAAABkgdzYAJ/fwF/YAF/AGABfwF/YAN/f38Bf2ACf38AYAN/f38AYAR/f39/AX9gBX9/f39/AX9gBH9/f38AYAV/f39/fwBgBn9/f39/fwF/YAZ/f39/f38AYAAAYAABf2AIf39/f39/f38Bf2AHf39/f39/fwF/YAJ/fwF8YAF8AXxgB39/f39/f38AYAd/f39/fHx/AGADf39/AXxgAX8BfGACf3wAYAR8fHx/AXxgAnx8AXxgA398fABgA39/fgF/YAl/f39/f39/f38AYAV/fn5+fgBgBH9/f3wAYAR/f3x8AX9gCn9/f39/f39/f38Bf2ADfHx8AXxgA39/fgBgAAF8YAR/f39/AXxgA39+fwF+YAJ/fgF/YAN/f3wAYAV/f39/fgF/YAR/fn5/AGAEf398fwBgAnx/AXxgBH9/f3wBf2ADfHx/AXxgA398fwBgCH9/f39/f39/AGACf3wBf2AFf39/f3wBf2ALf39/f39/f39/f38Bf2AFf39+f38AYAR/f3x/AX9gAn9+AGAFf39/f3wAYAN/f3wBf2ABfwF+YAZ/fHx8fHwBfGAHf39/fHx/fwBgBX9/fH9/AX9gA39/fwF+YAx/f39/f39/f39/f38Bf2ACfX0BfWACf38BfmAGf39/fH9/AGAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgCn9/f39/f39/f38AYAR/f39/AX5gBn98f39/fwF/YAd/f39/f35+AX9gBn9/f39+fgF/YAd/f39/fn9/AX9gBn9/f39/fgF/YAR/fn9/AX9gBH9/fHwBfGAFf398f38AYAl/f39/f39/f38Bf2AEf398fABgBn9/f3x/fwF/YAJ/fQF/YAR+fn5+AX9gCH9/f398fHx/AGADf31/AGACfn8Bf2ABfAF/YAZ/fX9/f38AYAR/f31/AGACfn4BfWACf30AYAR/f39+AX5gBnx8fH9/fwBgBH98fHwAYAJ+fgF8YAJ8fwF/YAV/f398fwBgBn9/f3x8fwBgA398fAF/YAd/fHx8fHx8AGAEf3x/fwF/YAp/fH9/f39/f39/AGAFf39/f38BfGAHf39/f3x/fwF/YAV/f31/fwBgA3x8fAF/YAV/f3x8fABgA39/fwF9YAN+fn4Bf2AEf35+fgBgA39+fwF/YAABfmABfwF9YAN/fn4B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BSADEGgLIAAgACAFELwNDAELIAAgASACEOgNIQULIAdBMGokACAFDwtBhdEBQb/8AEEMQcc7EAAACzMBAX8gAgRAIAAhAwNAIAMgAS0AADoAACADQQFqIQMgAUEBaiEBIAJBAWsiAg0ACwsgAAsUACAAECUEQCAALQAPDwsgACgCBAsVACAAEKEBBEAgACgCBA8LIAAQmQMLJgAgACABEPEHIgFFBEBBAA8LIAAQ5gEoAgwgASgCEEECdGooAgALQwAgACAAIAGlIAG9Qv///////////wCDQoCAgICAgID4/wBWGyABIAC9Qv///////////wCDQoCAgICAgID4/wBYGwsuACAALQAPIgBBAWpB/wFxQRFPBEBB/bIDQY/9AEHIAEG4lwEQAAALIABB/wFHCwcAQQEQBgALCwAgACABQQAQ/wYLPAEBf0EHIQICQAJAAkAgAEEoag4IAgICAgAAAAABC0EIDwsgAEF/RyABQX1NckUEQEEADwtBHSECCyACC0IBAX8gACABEOQBIgFFBEBBAA8LIAAoAjQgASgCIBDYASAAKAI0IgJBAEGAASACKAIAEQMAIAEgACgCNBDxAjYCIAtvAQJ/IAAtAAAiAgR/AkADQCABLQAAIgNFDQECQCACIANGDQAgAhD3ASABLQAAEPcBRg0AIAAtAAAhAgwCCyABQQFqIQEgAC0AASECIABBAWohACACDQALQQAhAgsgAgVBAAsQ9wEgAS0AABD3AWsLLAACQAJAAkAgACgCAEEDcUEBaw4DAQAAAgsgACgCKCEACyAAKAIYIQALIAALVQECfyAAIAFBMEEAIAEoAgBBA3FBA0cbaigCKBDkASIDBEAgACgCNCADKAIgENgBIAAoAjQiAiABQQggAigCABEDACECIAMgACgCNBDxAjYCIAsgAgsqAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAkGEBEEAEK0HGiADQRBqJAALkwEBAn8gABArIQUCQCAAIAFBABBrIgQgAkVyDQAgAhDjASIEIAUgARCqATYCAAJAIAAoAhAiAkUEQCAEIAQ2AgQMAQsgAiACKAIEIgVGBEAgAiAENgIEIAQgAjYCBAwBCyAEIAU2AgQgAiAENgIECyAALQAAQQRxDQAgACAEQQAQ3gcLIAMEQCAAIAFBARBrGgsgBAscAQF/IAAQoQEEQCAAKAIAIAAQ6AIaEKYFCyAAC6QBAwF8AX4BfyAAvSICQjSIp0H/D3EiA0GyCE0EfCADQf0HTQRAIABEAAAAAAAAAACiDwsCfCAAmSIARAAAAAAAADBDoEQAAAAAAAAww6AgAKEiAUQAAAAAAADgP2QEQCAAIAGgRAAAAAAAAPC/oAwBCyAAIAGgIgAgAUQAAAAAAADgv2VFDQAaIABEAAAAAAAA8D+gCyIAmiAAIAJCAFMbBSAACwsLACAAIAFBARD/BgtDACAAIAAgAaQgAb1C////////////AINCgICAgICAgPj/AFYbIAEgAL1C////////////AINCgICAgICAgPj/AFgbCykBAX8gAgRAIAAhAwNAIAMgAToAACADQQFqIQMgAkEBayICDQALCyAAC0IAIABFBEBBAA8LAn8CQAJAAkAgACgCAEEDcUEBaw4DAQAAAgsgACgCKEEYagwCCyAAQRhqDAELIABByABqCygCAAspACAAKAIwEKIDQQBIBEBB+sgBQZa7AUGgAUHzMBAAAAsgACgCMBCiAwtgAQJ/AkAgACgCPCIDRQ0AIAMoAmwiBEUNACAAKAIQKAKYAUUNACAALQCZAUEgcQRAIAAgASACIAQRBQAPCyAAIAAgASACQRAQGCACEJICIgAgAiADKAJsEQUAIAAQFwsLfQEDfwJAAkAgACIBQQNxRQ0AIAEtAABFBEBBAA8LA0AgAUEBaiIBQQNxRQ0BIAEtAAANAAsMAQsDQCABIgJBBGohAUGAgoQIIAIoAgAiA2sgA3JBgIGChHhxQYCBgoR4Rg0ACwNAIAIiAUEBaiECIAEtAAANAAsLIAEgAGsLFwEBf0EPIQEgABAlBH9BDwUgACgCCAsLkAEBA38CQCAAECIiAiABSQRAIwBBEGsiBCQAIAEgAmsiAgRAIAIgABBVIgMgABAiIgFrSwRAIAAgAyACIANrIAFqIAEgARCQBwsgASAAEEAiA2ogAkEAEPgKIAAgASACaiIAEJMDIARBADoADyAAIANqIARBD2oQyQELIARBEGokAAwBCyAAIAAQQCABEI0LCwu9FwMKfwR8AX4jAEFAaiINJAADQCAGIQ4CfwJAAkACQCAFIgZBAEwNACANIAApAAAiFzcDICAGIBdCIIinTw0BQQEgBkEHcXQiBSAGQQN2IgsgDUEgaiAXpyIKIBdCgICAgJAEVCIMG2otAABxDQAgAygCBCEJIAAgCiAMGyALaiILIAstAAAgBXI6AAACQCAJIAZByABsaiIKKwMQIhMgCisDICIUREivvJry13o+oGRFDQAgAiAKKAIAQThsaiIFKwMAIhUgBSsDEKGZREivvJry13o+ZUUNACACIAooAgRBOGxqIgUrAwAiFiAFKwMQoZlESK+8mvLXej5lRQ0AIA1CADcDMCANQgA3AyggDUIANwMgAkAgBwRAIA0gEzkDMCANIBQ5AyAgDSAWmjkDKCAVmiETDAELIA0gFjkDMCANIBQ5AyggDSAVOQMgCyANIBM5AzggDSANKQMoNwMIIA0gDSkDMDcDECANIA0pAzg3AxggDSANKQMgNwMAIAEgDRCABAsCQCAKKAIoIg9BAEoNACAKKAIsQQBKDQACQCAKKAIwQQBMDQAgCigCNCIIQQBMDQAgCkEwaiEFIApBNGohCyADKAIEIAhByABsaigCACEMIAooAgAhCSAIIA5GBEAgBCAJIAwQtQEgACABIAIgAyAEIAsoAgAgBiAHQQEQOiEEQQEMBgsgBCAMIAkQtQEgACABIAIgAyAEIAooAjAgBiAHQQEQOiEEIAshBUEBDAULIAAgASACIAMgBCAPIAYgB0ECEDogACABIAIgAyAEIAooAiwgBiAHQQIQOiAAIAEgAiADIAQgCigCMCAGIAdBARA6IApBNGohBUEBDAQLIApBKGohCwJAIAooAjAiEUEASiIMDQAgCigCNEEASg0AAkAgD0EATA0AIAooAiwiCUEATA0AIApBLGohBSADKAIEIA9ByABsaigCBCEIIAooAgQhDCAJIA5GBEAgBCAIIAwQtQEgACABIAIgAyAEIAooAiwgBiAHQQIQOiEEIAshBUECDAYLIAQgDCAIELUBIAAgASACIAMgBCALKAIAIAYgB0ECEDohBEECDAULIApBNGohBSAAIAEgAiADIAQgDyAGIAdBAhA6IAAgASACIAMgBCAKKAIsIAYgB0ECEDogACABIAIgAyAEIAooAjAgBiAHQQEQOkEBDAQLIAoiCUEwaiEFIAlBLGohCiAJKAIsIRACQCAPQQBKBEAgEEEATA0BAkAgEUEATA0AIAkoAjQiEUEATA0AIAlBNGohDCADKAIEIhIgD0HIAGxqKAIEIQ8gEiARQcgAbGoo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ELMHCyIDNgIAIANBf0YNASAAQQFqIgBBBkcNAAtBABD2C0UEQEHI+QYhASAEQcj5BkEYEMIBRQ0CQeD5BiEBIARB4PkGQRgQwgFFDQJBACEAQcCsCy0AAEUEQANAIABBAnRBkKwLaiAAQeX0BBCzBzYCACAAQQFqIgBBBkcNAAtBwKwLQQE6AABBqKwLQZCsCygCADYCAAtBkKwLIQEgAkEIaiIAQZCsC0EYEMIBRQ0CQaisCyEBIABBqKwLQRgQwgFFDQJBGBBCIgFFDQELIAEgAikCCDcCACABIAIpAhg3AhAgASACKQIQNwIIDAELQQAhAQsgAkEgaiQAQaSvC0EBOgAAQaCvCyABNgIAIAELFQAgAC0AD0H/AUYEQCAAKAIAEBcLC78KAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhEIAIQFQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAuEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyALQv///////z9YBEAgBUHQAGogASANIAEgDSANUCIGG3kgBkEGdK18pyIGQQ9rELEBQRAgBmshBiAFKQNYIg1CIIghDiAFKQNQIQELIAJC////////P1YNACAFQUBrIAMgDCADIAwgDFAiCBt5IAhBBnStfKciCEEPaxCxASAGIAhrQRBqIQYgBSkDSCEMIAUpA0AhAwsgA0IPhiILQoCA/v8PgyICIAFCIIgiBH4iECAL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IAUgAWtBBHRqIgAgAiAFQQR0aiIDKQMANwMAIAAgAykDCDcDCCAGIAMpAwg3AyggBiADKQMANwMgIAVBAWoiAyAJTw0AIAgoAgAgAyABa0EEdGoiACACIANBBHRqIgMpAwA3AwAgACADKQMINwMIIAYgAykDCDcDOCAGIAMpAwA3AzAgCCgCACAFQQJqIgMgAWtBBHRqIgAgAiADQQR0aiIDKQMANwMAIAAgAykDCDcDCCAEIAMpAwg3AwggBCADKQMANwMAIAYgAiAFQQNqIgVBBHRqIgApAwg3A1ggBiAAKQMANwNQIA4oAhBBEGogBkEgahD5BQwBCwsgCCAHIAFrQQRqNgIEIAZBgAFqJAALcwEBfyAAECEgABA4TwRAIABBARDrAQsgABAhIQICQCAAECUEQCAAIAJqIAE6AAAgACAALQAPQQFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAAKAIAIAJqIAE6AAAgACAAKAIEQQFqNgIECwsyACAAQQAQlAICQCAAECUEQCAAQQA6AA8MAQsgAEEANgIECyAAECUEfyAABSAAKAIACwtEAgJ/AXwgAEEAIABBAEobIQADQCAAIANGRQRAIAEgA0EDdCIEaisDACACIARqKwMAoiAFoCEFIANBAWohAwwBCwsgBQsKACAALQALQQd2CxgAIAAtAABBIHFFBEAgASACIAAQtwcaCwsdACAAQQAgAEGZAU0bQQF0QfCJB2ovAQBB9PoGagsgAQJ/IAAQN0EBaiIBEEIiAkUEQEEADwsgAiAAIAEQIAslAQF/IwBBEGsiBCQAIAQgAzYCDCAAIAEgAiADEE4gBEEQaiQACykBAX5BuJYLQbiWCykDAEKt/tXk1IX9qNgAfkIBfCIANwMAIABCIYinC6sDAgV/AX4gAL1C////////////AINCgYCAgICAgPj/AFQgAb1C////////////AINCgICAgICAgPj/AFhxRQRAIAAgAaAPCyABvSIHQiCIpyICQYCAwP8DayAHpyIFckUEQCAAEL0FDwsgAkEedkECcSIGIAC9IgdCP4inciEDAkAgB0IgiKdB/////wdxIgQgB6dyRQRAAkACQCADQQJrDgIAAQMLRBgtRFT7IQlADwtEGC1EVPshCcAPCyACQf////8HcSICIAVyRQRARBgtRFT7Ifk/IACmDwsCQCACQYCAwP8HRgRAIARBgIDA/wdHDQEgA0EDdEHA0QZqKwMADwsgBEGAgMD/B0cgAkGAgIAgaiAET3FFBEBEGC1EVPsh+T8gAKYPCwJ8IAYEQEQAAAAAAAAAACAEQYCAgCBqIAJJDQEaCyAAIAGjmRC9BQshAAJAAkACQCADQQFrDgMAAQIECyAAmg8LRBgtRFT7IQlAIABEB1wUMyamobygoQ8LIABEB1wUMyamobygRBgtRFT7IQnAoA8LIANBA3RB4NEGaisDACEACyAACxUAIAAEQCAAQgA3AgAgAEIANwIICwvtDwMHfAh/BH5EAAAAAAAA8D8hAwJAAkACQCABvSIRQiCIIhOnIhBB/////wdxIgkgEaciDHJFDQAgAL0iEqciD0UgEkIgiCIUQoCAwP8DUXENACAUpyILQf////8HcSIKQYCAwP8HSyAKQYCAwP8HRiAPQQBHcXIgCUGAgMD/B0tyRSAMRSAJQYCAwP8HR3JxRQRAIAAgAaAPCwJAAkACQAJAAkACf0EAIBJCAFkNABpBAiAJQf///5kESw0AGkEAIAlBgIDA/wNJDQAaIAlBFHYhDSAJQYCAgIoESQ0BQQAgDEGzCCANayIOdiINIA50IAxHDQAaQQIgDUEBcWsLIQ4gDA0CIAlBgIDA/wdHDQEgCkGAgMD/A2sgD3JFDQUgCkGAgMD/A0kNAyABRAAAAAAAAAAAIBFCAFkbDwsgDA0BIAlBkwggDWsiDHYiDSAMdCAJRw0AQQIgDUEBcWshDgsgCUGAgMD/A0YEQCARQgBZBEAgAA8LRAAAAAAAAPA/IACjDwsgE0KAgICABFEEQCAAIACiDwsgE0KAgID/A1IgEkIAU3INACAAnw8LIACZIQIgDw0BAkAgC0EASARAIAtBgICAgHhGIAtBgIDA/3tGciALQYCAQEZyDQEMAwsgC0UgC0GAgMD/B0ZyDQAgC0GAgMD/A0cNAgtEAAAAAAAA8D8gAqMgAiARQgBTGyEDIBJCAFkNAiAOIApBgIDA/wNrckUEQCADIAOhIgAgAKMPCyADmiADIA5BAUYbDwtEAAAAAAAAAAAgAZogEUIAWRsPCwJAIBJCAFkNAAJAAkAgDg4CAAECCyAAIAChIgAgAKMPC0QAAAAAAADwvyEDCwJ8IAlBgYCAjwRPBEAgCUGBgMCfBE8EQCAKQf//v/8DTQRARAAAAAAAAPB/RAAAAAAAAAAAIBFCAFMbDwtEAAAAAAAA8H9EAAAAAAAAAAAgEEEAShsPCyAKQf7/v/8DTQRAIANEnHUAiDzkN36iRJx1AIg85Dd+oiADRFnz+MIfbqUBokRZ8/jCH26lAaIgEUIAUxsPCyAKQYGAwP8DTwRAIANEnHUAiDzkN36iRJx1AIg85Dd+oiADRFnz+MIfbqUBokRZ8/jCH26lAaIgEEEAShsPCyACRAAAAAAAAPC/oCIARETfXfgLrlQ+oiAAIACiRAAAAAAAAOA/IAAgAEQAAAAAAADQv6JEVVVVVVVV1T+goqGiRP6CK2VHFfe/oqAiAiACIABEAAAAYEcV9z+iIgKgvUKAgICAcIO/IgAgAqGhDAELIAJEAAAAAAAAQEOiIgAgAiAKQYCAwABJIgkbIQIgAL1CIIinIAogCRsiDEH//z9xIgpBgIDA/wNyIQsgDEEUdUHMd0GBeCAJG2ohDEEAIQkCQCAKQY+xDkkNACAKQfrsLkkEQEEBIQkMAQsgCkGAgID/A3IhCyAMQQFqIQwLIAlBA3QiCkHg0AZqKwMAIAK9Qv////8PgyALrUIghoS/IgQgCkHQ0AZqKwMAIgWhIgZEAAAAAAAA8D8gBSAEoKMiB6IiAr1CgICAgHCDvyIAIAAgAKIiCEQAAAAAAAAIQKAgByAGIAAgCUESdCALQQF2akGAgKCAAmqtQiCGvyIGoqEgACAEIAYgBaGhoqGiIgQgAiAAoKIgAiACoiIAIACiIAAgACAAIAAgAETvTkVKKH7KP6JEZdvJk0qGzT+gokQBQR2pYHTRP6CiRE0mj1FVVdU/oKJE/6tv27Zt2z+gokQDMzMzMzPjP6CioCIFoL1CgICAgHCDvyIAoiIGIAQgAKIgAiAFIABEAAAAAAAACMCgIAihoaKgIgKgvUKAgICAcIO/IgBE9QFbFOAvPr6iIAIgACAGoaFE/QM63AnH7j+ioKAiAiAKQfDQBmorAwAiBCACIABEAAAA4AnH7j+iIgKgoCAMtyIFoL1CgICAgHCDvyIAIAWhIAShIAKhoQshAiABIBFCgICAgHCDvyIEoSAAoiACIAGioCICIAAgBKIiAaAiAL0iEachCQJAIBFCIIinIgpBgIDAhAROBEAgCkGAgMCEBGsgCXINAyACRP6CK2VHFZc8oCAAIAGhZEUNAQwDCyAKQYD4//8HcUGAmMOEBEkNACAKQYDovPsDaiAJcg0DIAIgACABoWVFDQAMAwtBACEJIAMCfCAKQf////8HcSILQYGAgP8DTwR+QQBBgIDAACALQRR2Qf4Ha3YgCmoiCkH//z9xQYCAwAByQZMIIApBFHZB/w9xIgtrdiIJayAJIBFCAFMbIQkgAiABQYCAQCALQf8Ha3UgCnGtQiCGv6EiAaC9BSARC0KAgICAcIO/IgBEAAAAAEMu5j+iIgMgAiAAIAGhoUTvOfr+Qi7mP6IgAEQ5bKgMYVwgvqKgIgKgIgAgACAAIAAgAKIiASABIAEgASABRNCkvnJpN2Y+okTxa9LFQb27vqCiRCzeJa9qVhE/oKJEk72+FmzBZr+gokQ+VVVVVVXFP6CioSIBoiABRAAAAAAAAADAoKMgACACIAAgA6GhIgCiIACgoaFEAAAAAAAA8D+gIgC9IhFCIIinIAlBFHRqIgpB//8/TARAIAAgCRDrAgwBCyARQv////8PgyAKrUIghoS/C6IhAwsgAw8LIANEnHUAiDzkN36iRJx1AIg85Dd+og8LIANEWfP4wh9upQGiRFnz+MIfbqUBogsLACAAIAFBABC2DQvRAQIBfgF/AkAgABA0IAEQNEcNAAJAAkACQCABKAIAQQNxDgIAAQILA0AgACABRiIDDQMgASgCRCIBDQALDAILAn8gACABKQMIIgIQ4wMiAUEBckUEQAJAIAAQNCIBIABGDQAgASACEOMDIgFFDQAgACABQQEQexogAQwCC0EAIAAoAkwiASgCCEEBIAIgASgCACgCCBEaAEUNARogACAAIAIgAEEBEOkHEMQNIgEQww0gACABEMINCyABC0EARw8LIAAgAUEAEMgCQQBHIQMLIAMLmQMCB38BfCMAQcAEayIHJAADQCAFQQRGBEBEAAAAAAAA8D8gAqEhDEEDIQZBASEBA0AgAUEERkUEQEEAIQUgByABQQFrQeAAbGohCANAIAUgBkZFBEAgBUEEdCIJIAcgAUHgAGxqaiIKIAwgCCAJaiIJKwMAoiAIIAVBAWoiBUEEdGoiCysDACACoqA5AwAgCiAMIAkrAwiiIAsrAwggAqKgOQMIDAELCyAGQQFrIQYgAUEBaiEBDAELCwJAIANFDQBBACEFA0AgBUEERg0BIAMgBUEEdGoiASAHIAVB4ABsaiIGKQMINwMIIAEgBikDADcDACAFQQFqIQUMAAsACwJAIARFDQBBACEFA0AgBUEERg0BIAQgBUEEdCIBaiIDIAdBAyAFa0HgAGxqIAFqIgEpAwg3AwggAyABKQMANwMAIAVBAWohBQwACwALIAAgBykDoAI3AwAgACAHKQOoAjcDCCAHQcAEaiQABSAHIAVBBHQiBmoiCCABIAZqIgYpAwA3AwAgCCAGKQMINwMIIAVBAWohBQwBCwsLPwECfwNAIAAoAhAiAigC8AEiAUUgACABRnJFBEAgASIAKAIQKALwASIBRQ0BIAIgATYC8AEgASEADAELCyAAC14BAX8jAEEgayICJAAgAiAAKAIANgIIIAIgACgCBDYCDCACIAAoAgg2AhAgAEIANwIEIAIgACsDEDkDGCAAIAEQlgEgASACQQhqIgAQlgEgAEEEchDFASACQSBqJAALoQEBAn8CQCAAECJFIAIgAWtBBUhyDQAgASACEJ0FIAJBBGshBCAAEEAiAiAAECJqIQUCQANAAkAgAiwAACEAIAEgBE8NACAAQQBMIABB/wBOckUEQCABKAIAIAIsAABHDQMLIAFBBGohASACIAUgAmtBAUpqIQIMAQsLIABBAEwgAEH/AE5yDQEgAiwAACAEKAIAQQFrSw0BCyADQQQ2AgALC4QBAQJ/IwBBEGsiAiQAIAAQoQEEQCAAKAIAIAAQ6AIaEKYFCyABECIaIAEQoQEhAyAAIAEoAgg2AgggACABKQIANwIAIAFBABDKASACQQA6AA8gASACQQ9qEMkBAkAgACABRiIBIANyRQ0ACyAAEKEBIAFyRQRAIAAQmQMaCyACQRBqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLzgkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApC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NgIAIAFBBGohAQwACwALIAEoAgghAiABQQA2AggLIAAoAggiAEEANgIQIABBADYCBCAAIAAoAgBB/19xNgIAIAILxQIBCH8jAEEgayICJAACQCAAIAJBHGoQyAUiAEUNACACKAIcIgVBAEwNAANAIAAtAAAiA0UNASADQS1HBEAgAEEBaiEADAELCyACQgA3AxAgAkIANwMIIABBAWohBkEAIQMDQCAEIAVIBEAgAyAGaiIHLAAAIggEQCACQQhqIAgQlA0CQCAHLQAAQdwARgRAIANFDQEgACADai0AAEHcAEcNAQsgBEEBaiEECyADQQFqIQMMAgUgAkEIahBmQQAhBAwDCwALCyABIwBBEGsiASQAAkAgAkEIaiIAECUEQCAAIAAQISIFEMUCIgQNASABIAVBAWo2AgBB6PoGKAIAQandAyABEB0aECYACyAAQQAQlA0gACgCACEECyAAQgA3AgAgAEIANwIIIAFBEGokACAENgIAIAMgBmohBAsgAkEgaiQAIAQLHAAgACABIAAgAhCqASIBQQEQygUgACABEIkBGgs9AQF/QdCUCygCACECA0AgAkEATARAQQAPCyACQQFrIQIgAUHk9AQgACgCTCgCBCgCBBEAAEF/Rw0AC0F/C4UCAQN/IwBBEGsiAyQAIAMgAjYCBCADIAI2AgwgAyACNgIIAkACQAJAQQBBACABIAIQTiICQQBIDQAgAkEBaiEFIAIgABA4IAAQIWsiBE8EQCAAIAUgBGsQ2gcLIAAQISEEIAIgABAlBH8gACAEagUgACgCACAEagsgBSABIAMoAgwQTiIBRyABQQBOcQ0BIAFBAEwNACAAECUEQCABQYACTw0DIAAgAC0ADyABajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAWo2AgQLIANBEGokAA8LQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALuQEBAn8CQAJAIAAQNyIBRQ0AIAFBrJQLEDhBrJQLECFrSwRAQayUCyABENoHC0GslAsQISECQayUCxAlBEAgAkGslAtqIAAgARAgGiABQYACTw0CQbuUC0G7lAstAAAgAWo6AABBrJQLECFBEEkNAUG/rgNBj/0AQfABQY/qABAAAAtBrJQLKAIAIAJqIAAgARAgGkGwlAtB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AEHojgtBATsBACABKAI0KAIQLQBzIQIjAEEQayIEJAACfyACQQNPBEAgBCACNgIAQYa3BCAEEDFB7+sBDAELIAJBAnRBkIIFaigCAAshCCAEQRBqJABBwI4LAn8CQAJAQbAEEEIiAkUNACACQfMCNgIQIAJB9AI2AgwgAkEQNgKEAyACQQA2AiAgAkEANgIIIAJBITYCFCACQYACEEIiBDYCkAMgBEUNASACQYAIIAIoAgwRAgAiBDYCOCAERQRAIAIoApADIAIoAhQRAQAgAiACKAIUEQEADAELIAJBDGohBiACIARBgAhqNgI8AkBBACIERQRAQbwBIAIoAgwRAgAiBEUNASAEQgA3AlAgBEIANwJoIAQgBjYCZCAEIAY2AnwgBEIANwIIIARBADoABCAEQgA3AhwgBEEAOgAYIAQgBjYCECAEQQA2AgAgBEIANwIwIARBADoALCAEIAY2AiQgBEEANgIUIARBADYCYCAEQgA3AlggBEIANwJwIARBADYCeCAEQgA3AkQgBEEAOgBAIAQgBjYCOCAEQQA2AiggBEEANgI8IAQgBjYCTCAEQgA3AowBIARBADoAiAEgBEIBNwKAASAEIAY2ApQBIARCADcCmAEgBEEAOgCgASAEQgA3AqQBIARCADcCrAEgBEIANwK0AQsgAkEANgKAAyACIAQ2AuwCIAJBADYC+AIgAkEANgK4AiACQgA3A9gDIAJBIToA4AMgAkEANgKAAiACQQA2AogBIAJBADsB9AEgAkIANwKoAyACQQA2AvABIAJCADcClAMgAiAGNgK8AyACQgA3AsADIAJCADcCsAMgAkEANgK4AyACQQA6AJwDIAJBADYC0AMgAkIANwLIAyACIAY2AtQDQQAhBCACQfUCNgKgAiACQcsDNgKIAiACQQA2ApwCIAJCgICAgBA3ApQCIAgEQANAIAQgCGogBEEBaiEELQAADQALIAQgAigCDBECACIGBEAgBiAIIAQQIBoLIAIgBjYC8AELIAJBADYC8AIgAkGgAWogAkGcAWpBABDDBxogAkIANwMAIAJBQGtBAEHAABAzGiACQgA3AowBIAJBADYChAEgAkIANwKUASACQgA3A6ADIAJBADYCNCACQQE6ADAgAkEANgIsIAJCADcCJCACQgA3AqQCIAJCADcCrAIgAkEANgK0AiACIAIoAggi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NwMYIAEgACkDEDcDECABIAApAwg3AwggASAAKQMANwMAAkAgAkUNAAJAIAEoAgQNACACKAIEIgBFDQAgASAANgIECwJAIAErAxBEAAAAAAAAAABjRQ0AIAIrAxAiBEQAAAAAAAAAAGZFDQAgASAEOQMQCwJAIAEoAgANACACKAIAIgBFDQAgASAANgIACyACKAIYQf8AcSIARQ0AIAEgASgCGCAAcjYCGAsgA0GgjwsoAgAoAogBIgAgAUEBIAAoAgARAwA2AgAgA0GcjwsoAgA2AgRBnI8LIAM2AgAgAUEgaiQAC8EBAQJ/AkACQCABIAAoAhAiAigCsAEiA0cEQCAAIAEoAhAiACgCsAFHDQELQZiIBEEAECcMAQsgA0UEQCACIAE2ArABIAIoAqwBIgMgACgCrAFKBEAgACADNgKsAQsDQCABRQ0CIAEoAhAiACAALwGoASACLwGoAWo7AagBIAAgAC8BmgEgAi8BmgFqOwGaASAAIAAoApwBIAIoApwBajYCnAEgACgCsAEhAQwACwALQbjOAUGXuQFBqQJBmg8QAAALC2oBAX8jAEEgayIDJAAgA0IANwMYIANCADcDCCADQoCAgICAgID4v383AxAgAyACNgIYIANCADcDACABBEAgA0HAmgpBAyABQbnZARDGBAsgACgCiAEiACADQQEgACgCABEDACADQSBqJAALaQEBf0HUigsoAgAhAQJAIAAEQEHUigsgAUEBajYCACABDQFB0IoLQQAQsgcQYTYCAEGG2AEQsgcaDwsgAUEATA0AQdSKCyABQQFrIgA2AgAgAA0AQdCKCygCABCyBxpB0IoLKAIAEBcLC0IBAn8jAEEQayICJAAgASgCECEDIAIgACgCECkCyAE3AwggAiADKQLAATcDACAAIAJBCGogASACENsIIAJBEGokAAtOAQF/AkAgACgCPCIERQ0AIAAoAkQgASAAKAIQQeAAaiIBEOUIIAQoAlwiBEUNACAAIAEgBBEEAAsgACgCECIAIAM5A5ABIAAgAjYCiAELngQCA38BfCMAQbABayICJAAgAkIANwOoASACQgA3A6ABAkACQAJAAkACQCAAKAIgIgNBAWsOBAECAgACCyAAKAIAIgBB1K0BEENFBEAgAkG1sAE2AjAgAiABuzkDOCACQaABakGLhgEgAkEwahBUDAQLIABB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C0GDzwEgBCADIAIQAAALQf2qAyAEIAMgAhAAAAsKACAAQQhqEMkDCyMBAX8jAEEQayIBJAAgASAANgIMIAFBDGoQiAsgAUEQaiQACw0AIAAoAgAgAUECdGoLGQAgABChAQRAIAAgARC4AQ8LIAAgARDKAQthAQF/IwBBEGsiAiQAIAIgADYCDAJAIAAgAUYNAANAIAIgAUEBayIBNgIIIAAgAU8NASACKAIMIAIoAggQyAsgAiACKAIMQQFqIgA2AgwgAigCCCEBDAALAAsgAkEQaiQAC7EBAQN/IwBBEGsiByQAAkACQCAARQ0AIAQoAgwhBiACIAFrQQJ1IghBAEoEQCAAIAEgCBDVAyAIRw0BCyAGIAMgAWtBAnUiAWtBACABIAZIGyIBQQBKBEAgACAHQQRqIAEgBRDSCyIFEEAgARDVAyEGIAUQdRogASAGRw0BCyADIAJrQQJ1IgFBAEoEQCAAIAIgARDVAyABRw0BCyAEENULDAELQQAhAAsgB0EQaiQAIAALqAEBA38jAEEQayIHJAACQAJAIABFDQAgBCgCDCEGIAIgAWsiCEEASgRAIAAgASAIENUDIAhHDQELIAYgAyABayIBa0EAIAEgBkgbIgFBAEoEQCAAIAdBBGogASAFENYLIgUQQCABENUDIQYgBRAvGiABIAZHDQELIAMgAmsiAUEASgRAIAAgAiABENUDIAFHDQELIAQQ1QsMAQtBACEACyAHQRBqJAAgAAsOACAAIAEoAgA2AgAgAAsKACAAIAEgAGtqCwsAIAAtAAtB/wBxCwgAIABB/wFxC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQCAAIAJUIAEgA1MgASADURsEQEF/DwsgACAChSABIAOFhEIAUg8LIAAgAlYgASADVSABIANRGwRAQX8PCyAAIAKFIAEg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IAErA0ihOQNoIA8gASsDUDkDcCAPIAUgASsDWKE5A3ggDyABKQNoNwOIASAPIAEpA2A3A4ABIAAgASACIAQQgQIgACAPQSBqQQdBABCBAgwCCyAQQQRxBEAgDyAQNgIMIA8gEDYCICABIAIgD0EMakEBEJUIIRIgAkEGbEECakEQEBghEUEAIQMDQCACIANGRQRAIBEgE0EEdGoiASASIANBBnRqIhApAwA3AwAgASAQKQMINwMIIAEgECkDGDcDGCABIBApAxA3AxAgASAQKQMYNwMoIAEgECkDEDcDICABIBApAyg3AzggASAQKQMgNwMwIAFBQGsgECkDIDcDACABIBApAyg3A0ggASAQKQM4NwNYIAEgECkDMDcDUCADQQFqIQMgE0EGaiETDAELCyARIBNBBHRqIgEgESkDADcDACABIBEpAwg3AwggESATQQFyIgFBBHRqIgIgESkDGDcDCCACIBEpAxA3AwAgACARQRBqIAEgBBCBAiAREBcgEhAXDAILIA9B1gU2AgQgD0HcuAE2AgBB6PoGKAIAQdaxBCAPEB0aEG4ACyAPIAMoAgA2AhAgASACIA9BEGpBABCVCCEQAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCARQQFrDhkAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGQsgAkEBaiITQRAQGCERQQEhAwNAIAIgA0YEQCARIBAgAkEwbGoiAUEYaikDADcDCCARIAEpAxA3AwAgESACQQR0aiIDIAFBEGsiAkEIaikDADcDCCADIAIpAwA3AwAgACARIBMgBBBBIBEQFyAPIAIpAwg3AyggDyACKQMANwMgIA8gASkDGDcDOCAPIAEpAxA3AzAgDyAPKwMwIA8rAyAgASsDAKGgOQNAIA8gDysDOCAPKwMoIAErAwihoDkDSCAAIA9BMGpBAhA2IA8gDykDSDcDOCAPIA8pA0A3AzAgACAPQSBqQQIQNgwaBSARIANBBHQiEmoiFCABIBJqIhIpAwA3AwAgFCASKQMINwMIIANBAWohAwwBCwALAAsgAkECaiIDQRAQGCICIAEpAwg3AwggAiABKQMANwMAIAIgECkDIDcDECACIBApAyg3AxggAiAQKwMgIBArAzAiBiAQKwNAoUQAAAAA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ADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwsAIABBmLELEKUCCxQAIABB3wBxIAAgAEHhAGtBGkkbCxsBAX8gAUEBEPoLIQIgACABNgIEIAAgAjYCAAskACAAQQtPBH8gAEEIakF4cSIAIABBAWsiACAAQQtGGwVBCgsLJAECfyMAQRBrIgIkACAAIAEQpAUhAyACQRBqJAAgASAAIAMbCxMAIAAgASACIAAoAgAoAjARAwALZwIBfwF+IwBBEGsiAiQAIAACfiABRQRAQgAMAQsgAiABrUIAQfAAIAFnIgFBH3NrELEBIAIpAwhCgICAgICAwACFQZ6AASABa61CMIZ8IQMgAikDAAs3AwAgACADNwMIIAJBEGokAAtSAQJ/QdTNCigCACIBIABBB2pBeHEiAmohAAJAIAJBACAAIAFNG0UEQCAAPwBBEHRNDQEgABAMDQELQeSUC0EwNgIAQX8PC0HUzQogADYCACABC38CAX4DfwJAIABCgICAgBBUBEAgACECDAELA0AgAUEBayIBIAAgAEIKgCICQgp+fadBMHI6AAAgAEL/////nwFWIAIhAA0ACwsgAlBFBEAgAqchAwNAIAFBAWsiASADIANBCm4iBEEKbGtBMHI6AAAgA0EJSyAEIQMNAAsLIAELtQEBA38jAEEgayIDJAACQAJAIAEsAAAiAgRAIAEtAAENAQsgACACELYFIQEMAQsgA0EAQSAQMxogAS0AACICBEADQCADIAJBA3ZBHHFqIgQgBCgCAEEBIAJ0cjYCACABLQABIQIgAUEBaiEBIAINAAsLIAAiAS0AACICRQ0AA0AgAyACQQN2QRxxaigCACACdkEBcQ0BIAEtAAEhAiABQQFqIQEgAg0ACwsgA0EgaiQAIAEgAGsL3AEBAn8CQAJAIAEgACIDc0EDcQRAIAEtAAAhAgwBCyABQQNxBEADQCADIAEtAAAiAjoAACACRQ0DIANBAWohAyABQQFqIgFBA3ENAAsLQYCChAggASgCACICayACckGAgYKEeHFBgIGChHhHDQADQCADIAI2AgAgA0EEaiEDIAEoAgQhAiABQQRqIQEgAkGAgoQIIAJrckGAgYKEeHFBgIGChHhGDQALCyADIAI6AAAgAkH/AXFFDQADQCADIAEtAAEiAjoAASAD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An9BuAIQ8gMiASAAKAIQIgI2AgAgACABNgIQIAIEQCABQRBqIAJBEGpBKBAgGiABQThqIAJBOGpBKBAgGiABIAIoApgBNgKYASABIAIoApwBNgKcASABIAIrA6ABOQOgASABIAIoAogBNgKIASABQeAAaiACQeAAakEoECAaIAEPCyABQoCAgICAgID4PzcDoAEgAUIDNwOYASABC7kBAQN/IAAgAEEwaiICIAAoAgBBA3FBA0YbKAIoKAIQIgEoAuABIAEoAuQBIgFBAWogAUECahD/ASEBIAAgAiAAKAIAQQNxQQNGGygCKCgCECABNgLgASAAIAIgACgCAEEDcUEDRhsoAigoAhAiASABKALkASIDQQFqNgLkASABKALgASADQQJ0aiAANgIAIAAgAiAAKAIAQQNxQQNGGygCKCgCECIAKALgASAAKALkAUECdGpBADYCAAsRACAAQYafAUEZQby4ARCSBQv+AgICfwF+IwBB0ABrIgMkAAJ/QQAgAkUNABogA0HIAGogAkE6EMQBIAAgAUECdGpBQGsoAgAhAgJAIAMoAkwiBCADKAJIai0AAEE6RgRAQQEhACACIQEDQCABBEAgA0FAayABKAIEQToQxAECQCAEBEAgAyADKQJINwMwIAMgAykCQDcDKCADQTBqIANBKGoQkAZFDQELIAEoAgQhACADIAEoAgwoAgg2AiQgAyAANgIgQZCIC0GMMyADQSBqEIwBQQAhAAsgASgCACEBDAELCyAAQQFxRQ0BCyADQgA3A0BBASEAQQAhAQNAIAIEQCADQThqIAIoAgRBOhDEAQJAIAEEQCADIAMpA0A3AxggAyADKQM4NwMQIANBGGogA0EQahCQBg0BCyADIAMpAzhCIIk3AwBBkIgLQbAyIAMQjAFBACEACyADIAMpAzgiBTcDQCAFpyEBIAIoAgAhAgwBCwtB5fQEIABBAXENARoLQZCICxCbAgsgA0HQAGokAAtaAQJ/IAAoApgBIQEDQCABBEAgASgCBCABKALIBBAXIAEoAswEEBcgARAXIQEMAQsLQYiIC0EANgIAQYyIC0EANgIAIABBADYCuAEgAEIANwOYASAAQQA2AhwLMQEBfwJAIAFFDQAgAS0AAEUNACAAKAI8IgJFDQAgAigCcCICRQ0AIAAgASACEQQACwutAQICfwJ8IwBBIGsi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AgALIARBAWohBAwBCwsgBRAXIAcQFyAJQRBqJAAFIAlBCGogBCAHIAMQlwogBEEBayEEDAELCwUgAyAEQQJ0IgYgCigCBGooAgBBAnRqAn8gCigCCCAGaioCACITi0MAAABPXQRAIBOoDAELQYCAgIB4CzYCACAEQQFqIQQMAQsLBSADIARBAnRqQf////8HNgIAIARBAWohBAwBCwsLMAEBf0GA2QoQ5wYiAkEANgIgIAIgAToAECACIAA2AgggAkEANgIUIAJBADYCDCACCw8AIAAgAEGw3AAQIxCsCgsUACAAIAFBryVBFUGb+wBBAhD5BgsJACAAQQQQ/wsLCwAgBCACNgIAQQMLdAECfyMAQSBrIgIkAAJAIACtIAGtfkIgiFAEQCAAIAEQRiIDRQ0BIAJBIGokACADDwsgAiABNgIEIAIgADYCAEHo+gYoAgBB2t0DIAIQHRoQJgALIAIgACABbDYCEEHo+gYoAgBBqd0DIAJBEGoQHRoQJgALOQECfyMAQRBrIgMkACADQQxqIgQgARBLIAIgBBDOAyIBEL4BNgIAIAAgARC9ASAEEEggA0EQaiQACzcBAn8jAEEQayICJAAgAkEMaiIDIAAQSyADEMABQaC2B0G6tgcgARDDAiADEEggAkEQaiQAIAELOQECfyMAQRBrIgMkACADQQxqIgQgARBLIAIgBBDQAyIBEL4BOgAAIAAgARC9ASAEEEggA0EQaiQAC6cBAQR/IwBBEGsiBSQAIAEQNyECIwBBEGsiAyQAAkAgAkH3////B00EQAJAIAIQpQUEQCAAIAIQygEgACEEDAELIANBCGogAhDTA0EBahDSAyADKAIMGiAAIAMoAggiBBDzASAAIAMoAgwQ8gEgACACELgBCyAEIAEgAhCmAiADQQA6AAcgAiAEaiADQQdqEMkBIANBEGokAAwBCxC/AQALIAVBEGokAAsXACAAIAM2AhAgACACNgIMIAAgATYCCAsSACAAIAEgAkL/////DxC0BacLawEBfwJAIABFBEBBmKgLKAIAIgBFDQELIAAgARC1BSAAaiICLQAARQRAQZioC0EANgIAQQAPCyACIAEQ2QMgAmoiAC0AAARAQZioCyAAQQFqNgIAIABBADoAACACDwtBmKgLQQA2AgALIAIL5AoBDX8gASwAACICRQRAIAAPCwJAIAAg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AysDEDkDmAEgBCALOQOQASABQbTdBCAEQZABahAcIAEgAigCABA7IARB4wBB8gAgAygCGCIGQQFGG0HsACAGGzYCgAEgAUG53wQgBEGAAWoQHCABIAIoAgAQOyAEIAMrAyA5A3AgAUH43AQgBEHwAGoQHCABIAIoAgAQOyABQfu+AxAZGiADKAIoIAIgARCWAiABQQoQYgwHCyAEQcMAQeMAIAZBCEYbNgKgASABQazfBCAEQaABahAcIAEgAigCABA7IAFB4N4EQQAQHCABIAIoAgAQOyABQZS/AxAZGiADKAIIIAIgARCWAiABQQoQYgwGCyAEQcMAQeMAIAZBDUYbNgKQAiABQazfBCAEQZACahAcIAEgAigCABA7AkACQAJAIAMoAggOAgABAgsgAUHg3gRBABAcIAEgAigCABA7IAFBlL8DEBkaIAMoAhAgAiABEJYCIAFBChBiDAcLIAFBut4EQQAQHCABIAIoAgAQOyABIAIoAgAQOyADKwMQIQsgBCADKwMYOQOIAiAEIAs5A4ACIAFB4N0EIARBgAJqEBwgASACKAIAEDsgAysDICELIAQgAysDKDkD+AEgBCALOQPwASABQcrdBCAEQfABahAcIAEgAigCABA7IAEgAygCMCADKAI0IAIQ/ggMBgsgAUHN3gRBABAcIAEgAigCABA7IAEgAigCABA7IAMrAxAhCyADKwMYIQwgBCADKwMgOQPgASAEIAw5A9gBIAQgCzkD0AEgAUGS3gQgBEHQAWoQHCABIAIoAgAQOyADKwMoIQsgAysDMCEMIAQgAysDODkDwAEgBCAMOQO4ASAEIAs5A7ABIAFB9t0EIARBsAFqEBwgASACKAIAEDsgASADKAJAIAMoAkQgAhD+CAwFCyABQe3fBEEAEBwgASACKAIAEDsgBCADKwMIOQOgAiABQYndBCAEQaACahAcIAEgAigCABA7IAFBsb8DEBkaIAMoAhAgAiABEJYCIAFBChBiDAQLIAFB1d8EQQAQHCABIAIoAgAQOyABQae/AxAZGiADKAIIIAIgARCWAiABQQoQYgwDCyABQa7eBEEAEBwgASACKAIAEDsgBCADKAIINgKwAiABQaq6BCAEQbACahAcDAILIARBtAI2AhQgBEHsuQE2AhBB6PoGKAIAQdaxBCAEQRBqEB0aEG4ACyAEQeUAQcUA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DAALAAsgAhCTCCIBDQBBpJELQaSRCygCACIDQQFqIgE2AgAgA0H/////A08NAUGgkQsoAgAgAUECdCIBED0iBUUNAiABIANBAnQiBksEQCAFIAZqQQA2AAALQaCRCyAFNgIAQRAQTSEBQaCRCygCACADQQJ0aiABNgIAIAFBuJwKKQMANwIIIAFBsJwKKQMANwIAIAEgAhCkATYCAEEBIQMCQEH0igsoAgANACACQefrABBHDQAgASgCACECQQAhAyAEQbCcCigCADYCECAEIAI2AhRB4+0DIARBEGoQJwsgASADOgAMCyAEQSBqJAAgAQwCC0GRtANB3v0AQc0AQZOzARAAAAsgBCABNgIAQej6BigCAEGp3QMgBBAdGhAmAAshASAAKAIQIAE2AgggAEHMjAsoAgAQPiEBIABBvIwLKAIARAAAAAAAACxARAAAAAAAAPA/EFMhByAAQcCMCygCAEG16QAQUSECIABBxIwLKAIAQe30ABBRIQQgARCtAiEDIAAgASAAEP4CQQJGQQJ0IANBAEdBAXRyIAcgAiAEEP8CIQEgACgCECABNgJ4AkBB0IwLKAIAIgFFDQAgACABED4iAUUNACABLQAARQ0AIAAgASABEK0CQQBHQQF0IAcgAiAEEP8CIQEgACgCECABNgJ8IAAQKygCECIBIAEtAHFBEHI6AHELIABB3IwLKAIAQQBBABBQIQEgACgCECICQf8BIAEgAUH/AU4bOgCgASAAIAIoAggoAgQoAgARAQAL0wIBA38jAEEQayIDJAACQCAARQ0AIAAtAABFDQBBhIsLKAIAIgIEQEHIkQstAAANASADIAI2AgBB3OsEIAMQJ0HIkQtBAToAAAwBC0HMkQsoAgAhAkH4igsoAgAEQCACRQRAQdCRCygCABAXQcyRC0H4igsoAgAiATYCAEHQkQsgARC4DjYCAAtBACEBA0AgAUEDRgRAQdCRCygCACAAELcOIQEMAwUgACABQfTcAWosAAAgABA3QQFqEL0MIgJBAWogACACGyEAIAFBAWohAQwBCwALAAtB0JELKAIAIQECQCACQfyKCygCAEYNACABEBdBACEBQcyRC0H8igsoAgAiAjYCAEHQkQtBADYCACACRQ0AIAItAABFDQBB0JELIAIQuA4iATYCAAsgAUUgAC0AAEEvRnJFBEAgASAAELcO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sIEIaiIDKwMAYgR/IAMgBjkDACABQSBqIgJBo6MDEIgDIAEgACgCECsDoAE5AxAgAkG+hgEgAUEQahCMASACEKcGIAJBKRDPASAAQb69AyACELwBENICIAAoAhAFIAILKAKoASIERQ0AA0AgBCgCACIDRQ0BIARBBGohBCADQdquARBpDQAgA0HFpwEQaQ0AIANBzvcAEGkNACABQSBqIAMQiAMDQCADLQAAIANBAWoiAiEDDQALIAItAAAEQCABQSBqQSgQzwFB5fQEIQMDQCACLQAABEAgASACNgIEIAEgAzYCACABQSBqQboyIAEQjAEDQCACLQAAIAJBAWohAg0AC0G+mAMhAwwBBSABQSBqQSkQzwELCwsgAEG+vQMgAUEgahC8ARDSAgwACwALIAFBIGoQZiABQTBqJAALawECfyMAQRBrIgMkACADQgA3AwggA0IANwMAA0ACQCACLQAAIgRB3ABHBEAgBA0BIAAgASADELwBEGggAxBmIANBEGokAA8LIANB3AAQzwEgAi0AACEECyADIATAEM8BIAJBAWohAgwACwALkgIBBX8gABDnBCEDIAAQISEBAkACQAJAA0AgASICRQ0BIAMgAUEBayIBai0AAEEuRw0ACyAAECEhAQNAIAFBAWshBSABIAJHBEAgAyAFai0AAEEwRw0CCwJAIAAQJQRAIAAtAA8iBEUNBCAAIARBAWs6AA8MAQsgACAAKAIEQQFrNgIECyABIAJHIAUhAQ0ACyAAECEiAUECSQ0AIAEgA2oiAUECayICLQAAQS1HDQAgAUEBay0AAEEwRw0AIAJBMDoAACAAECUEQCAALQAPIgFFDQMgACABQQFrOgAPDwsgACAAKAIEQQFrNgIECw8LQZKJA0GP/QBB5AJB6ioQAAALQZKJA0GP/QBB+gJB6ioQAAALXQEEfyAAQbz6BzYCAEHU7QpBADYCACAAQQRqIgJBBGohBCACKAIAIQEDQCABIARHBEAgASgCECIDBEAgAxCQCRoLIAMQFyABEJcBIQEMAQsLIAIgAigCBBCpBiAACx8AIAEEQCAAIAEoAgAQqQYgACABKAIEEKkGIAEQFwsLVwEBfyADQQA6ABxByAAQggEiBEEAELMGGiABIAQ2AgAgACAEIAMoAgAgAygCBBDqBEHIABCCASIBQQAQswYaIAIgATYCACAA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AkACQCAAKAIQQQFrDggAAQQCBAQEAwQLIARBACAEQQBKGyEMIA0oAhwhBCABKAIcIQMgACgCHCERQQAhAANAIAAgDEYNBCAPIABBAWoiAUECdCIIaiEKIA8gAEECdCIFaigCACEAA0AgACAKKAIATkUEQCAJIBQgAEECdGooAgAiB0ECdGogAjYCACAQIAJBAnRqIAc2AgAgBCACQQN0aiARIABBA3RqKwMAOQMAIABBAWohACACQQFqIQIMAQsLIAUgC2ohCiAIIA5qIQcgBSAOaigCACEAA0AgACAHKAIATkUEQAJAIAkgEyAAQQJ0aigCACIFQQJ0aigCACIGIAooAgBIBEAgECACQQJ0aiAFNgIAIAQgAkEDdGogAyAAQQN0aisDADkDACACQQFqIQIMAQsgBCAGQQN0aiIFIAMgAEEDdGorAwAgBSsDAKA5AwALIABBAWohAAwBCwsgCCALaiACNgIAIAEhAAwACwALIARBACAEQQBKGyEMIA0oAhwhBCABKAIcIQggACgCHCERQQAhAANAIAAgDEYNAyAPIABBAWoiAUECdCIFaiEKIA8gAEECdCIDaigCACEAA0AgACAKKAIATkUEQCAJIBQgAEECdGooAgAiB0ECdGogAjYCACAQIAJBAnRqIAc2AgAgBCACQQR0aiIHIBEgAEEEdGoiBisDADkDACAHIAYrAwg5AwggAEEBaiEAIAJBAWohAgwBCwsgAyALaiEKIAUgDmohByADIA5qKAIAIQADQCAAIAcoAgBORQRAAkAgCSATIABBAnRqKAIAIgNBAnRqKAIAIgYgCigCAEgEQCAQIAJBAnRqIAM2AgAgBCACQQR0aiIDIAggAEEEdGoiBisDADkDACADIAYrAwg5AwggAkEBaiECDAELIAQgBkEEdGoiAyAIIABBBHRqIgYrAwAgAysDAKA5AwAgAyAGKwMIIAMrAwigOQMICyAAQQFqIQAMAQsLIAUgC2ogAjYCACABIQAMAAsACyAEQQAgBEEAShshDCANKAIcIQQgASgCHCEDIAAoAhwhEUEAIQADQCAAIAxGDQIgDyAAQQFqIgFBAnQiCGohCiAPIABBAnQiBWooAgAhAANAIAAgCigCAE5FBEAgCSAUIABBAnQiB2ooAgAiBkECdGogAjYCACAQIAJBAnQiEmogBjYCACAEIBJqIAcgEWooAgA2AgAgAEEBaiEAIAJBAWohAgwBCwsgBSALaiEKIAggDmohByAFIA5qKAIAIQADQCAAIAcoAgBORQRAAkAgCSATIABBAnQiBWooAgAiBkECdGooAgAiEiAKKAIASARAIBAgAkECdCISaiAGNgIAIAQgEmogAyAFaigCADYCACACQQFqIQIMAQsgBCASQQJ0aiIGIAYoAgAgAyAFaigCAGo2AgALIABBAWohAAwBCwsgCCALaiACNgIAIAEhAAwACwALIARBACAEQQBKGyEIQQAhAANAIAAgCEYNASAPIABBAWoiAUECdCIEaiEFIA8gAEECdCIDaigCACEAA0AgACAFKAIATkUEQCAJIBQgAEECdGooAgAiDEECdGogAjYCACAQIAJBAnRqIAw2AgAgAEEBaiEAIAJBAWohAgwBCwsgAyALaiEFIAQgDmohDCADIA5qKAIAIQADQCAAIAwoAgBORQRAIAkgEyAAQQJ0aigCACIDQQJ0aigCACAFKAIASARAIBAgAkECdGogAzYCACACQQFqIQILIABBAWohAAwBCwsgBCALaiACNgIAIAEhAAwACwALIA0gAjYCCAsgCRAXCyANDwtBvdgBQZq2AUHGBUG5sAEQAAALQeDLAUGatgFBxwVBubABEAAAC0G7lQFBmrYBQcgFQbmwARAAAAvMCAIQfwF8AkAgAEUNACAAKAIgRQRAIAAoAhghDSAAKAIUIQcgACgCBCIIIAAoAgAiAiAAKAIIIgEgACgCEEEAEJoCIgkgATYCCCAJKAIYIQ4gCSgCFCEDQX8gCCAIQQBIG0EBaiEKQQAhAQNAIAEgCkYEQEEAIQEgAkEAIAJBAEobIQogA0EEaiEGA0ACQCABIApGBEBBACEBIAhBACAIQQBKGyECA0AgASACRg0CIAFBAnQhBiADIAFBAWoiAUECdGoiBCAEKAIAIAMgBmooAgBqNgIADAALAAsgByABQQFqIgJBAnRqIQQgByABQQJ0aigCACEBA0AgBCgCACABTARAIAIhAQwDBSAGIA0gAUECdGooAgBBAnRqIgsgCygCAEEBajYCACABQQFqIQEMAQsACwALC0EAIQICQAJAAkACQAJAAkAgACgCEEEBaw4IAAEEAgQEBAMECyAJKAIcIQYgACgCHCEEA0AgAiAKRg0FIAcgAkEBaiIAQQJ0aiEL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CyAGKAIQIgAoAmAiAgRAIAYgAkHX2QAQiwQgBigCECEACyAAKAJsIgIEQCAGIAJBvNkAEIsEIAYoAhAhAAsgACgCZCICBH8gBiACQdLZABCLBCAGKAIQBSAACygCaCIABEAgBiAAQcrZABCLBAsgB0EBaiEHCyABIAYQLCEGDAELCyABIAkQGyEJDAELCyAHRQRAQQAhBQwBC0ECQQEgARCwAiAHRhshBQtBACEGQQAhBCABKAIQKAIIIgAoAlgiDQRAIABBADYCVEEBIQQLAkAgDQ0AQYyLCygCAEEBRw0AIAEQkgRFDQBBASEGIAEoAhAoAgwiAEUNACAAQQA6AFELIAEQywIgDQRAIAEoAhAhCUQAAAAAAAAAACEVRAAAAAAAAAAAIRZBACELQQAhD0EAIQ4jAEFAaiIHJAAgASgCECIAKAKQASEQIANB2ABqIgIgACkDEDcDACACIAApAyg3AxggAiAAKQMgNwMQIAIgACkDGDcDCAJAIAAoAggoAlgiDEUNAAJAIAIrAwAgAisDEGINACACKwMIIAIrAxhiDQAgAkL/////////dzcDGCACQv/////////3/wA3AwAgAkL/////////9/8ANwMIIAJC/////////3c3AxALIAwoAgghAANAIAsgDCgCAE8NASAHQgA3AzggB0IANwMwIAdCADcDKCAHQgA3AyACQAJAAkACQAJAAkACQAJAIAAoAgAOEAAAAQECAgMEBwcFBwcHBwYHCyAAIAArAxAiFyAAKwMgIhigIhM5A2ggACAAKwMIIhsgACsDGCIcoCIUOQNgIAAgFyAYoSIXOQNYIAAgGyAcoSIYOQNQIAIgAisDACAYEDIgFBAyOQMAIAIgAisDGCAXECQgExAkOQMYIAIgAisDCCAXEDIgExAyOQMIIAIgAisDECAYECQgFBAkOQMQDAYLIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAULIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAQLIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAMLIABBOBDyAzYC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aisDADkDACACIAYgBEEQaiIEaisDCCABIARqKwMIECQ5AwggAEEBayEEIAANAAsLQQAhBEQAAAAAAADwfyEJQQAhAgNAIAIgA0YEQAJAIAlEAAAAAAAA8H9jIAlEAAAAAAAA8H9kckUNACABIARBBHRqIgArAwghCSAAKwMAIQogARAXDAQLBSABIAJBBHRqIgArAwAgACsDCKIiCiAJIAkgCmQiABshCSACIAQgABshBCACQQFqIQIMAQsLQdXRAUHDtwFB7gVBkMUBEAAAC0GEkQNBw7cBQcQGQYcYEAAACyAGEBdBgIsLLQAABEAgBSAJOQMYIAUgCjkDEEHo+gYoAgBB9vAEIAVBEGoQLQsgByEADAELIAkhCgtBACEDQQEhASAIIQIDQCAAIANGDQIgAigCQCgCECgClAEiBCAKIAIrAwCiOQMAIAQgCSACKwMIojkDCCADQQFqIQMgAkHIAGohAgwACwALQQAhAQsgCBAXIAVBgAFqJAAgAQv4EQIZfwx8IwBBMGsiAyQAQZzZCigCACEFQdDYCigCACECA0AgAiAPRgRAA0AgAkEBayALTQRAQYCLCy0AAEEBSwRAIAMgEjYCJCADIAA2AiBB6PoGKAIAQZfRAyADQSBqEB0aCyADQTBqJAAgEg8LQZzZCigCACALQeAAbGohByALQQFqIg8hCwNAIAIgC00EQCAPIQsMAgUgAyAHKQMQNwMYIAMgBykDCDcDECADQZzZCigCACALQeAAbGoiCCkDEDcDCCADIAgpAwg3AwBBACECQQAhBiMAQbAEayIBJAAgASADKQMYNwOoAyABIAMpAxA3A6ADIAEgBykDMDcDmAMgASAHKQMoNwOQAyABQeADaiABQaADaiABQZADahCLBSABIAMpAxg3A4gDIAEgAykDEDcDgAMgASAHKQNANwP4AiABIAcpAzg3A/ACIAFB0ANqIAFBgANqIAFB8AJqEIsFIAEgAykDCDcD6AIgASADKQMANwPgAiABIAgpAzA3A9gCIAEgCCkDKDcD0AIgAUHAA2ogAUHgAmogAUHQAmoQiwUgASADKQMINwPIAiABIAMpAwA3A8ACIAEgCCkDQDcDuAIgASAIKQM4NwOwAiABQbADaiABQcACaiABQbACahCLBQJAIAErA+ADIAErA7ADZUUNACABKwPAAyABKwPQA2VF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NgIkIAAgACgCODYCFA8LAkACQCAAKAIUIAAoAjhHDQAgACgCECABRw0AIAAoAhhBAkcNASAAIAI2AhgPCyAAQQE6ADYgAEECNgIYIAAgA0EBajYCJAsLswEBA38jAEEQayICJAAgAiABNgIMAkACQAJ/IAAQoQEiBEUEQEEBIQEgABCZAwwBCyAAEOgCQQFrIQEgACgCBAsiAyABRgRAIAAgAUEBIAEgARC4CyAAEEAaDAELIAAQQBogBA0AIAAiASADQQFqEMoBDAELIAAoAgAhASAAIANBAWoQuAELIAEgA0ECdGoiACACQQxqENIBIAJBADYCCCAAQQRqIAJBCGoQ0gEgAkEQaiQACw0AIAAgASACQn8QtAULBwAgAEEMagsXACAAKAIIEGVHBEAgACgCCBDvCwsgAAs2AQF/IwBBEGsiAyQAIAMgAjYCDCADQQhqIANBDGoQiAIgACABEKwHIQAQhwIgA0EQaiQAIAALHAAgACgCCCABQQEQexogASgCECgCgAEgADYCDAsTACAAIAAoAgBBAWsiADYCACAACzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAIgAigCDCABQQJ0ajYCDCACKAIMIAJBEGokAAsbAQF/QQEhASAAEKEBBH8gABDoAkEBawVBAQsLMAEBfyMAQRBrIgIkACACIAAoAgA2AgwgAiACKAIMIAFqNgIMIAIoAgwgAkEQaiQAC9ABAQN/IwBBEGsiBSQAAkAgAkH3////ByABa00EQCAAEEAhBiAFQQRqIgcgAUHz////A0kEfyAFIAFBAXQ2AgwgBSABIAJqNgIEIAcgBUEMahDUAygCABDTA0EBagVB9////wcLENIDIAUoAgQhAiAFKAIIGiAEBEAgAiAGIAQQpgILIAMgBEcEQCACIARqIAQgBmogAyAEaxCmAgsgAUEKRwRAIAYQpgULIAAgAhDzASAAIAUoAggQ8gEgBUEQaiQADAELEL8BAAsgACADELgBC8YBAQR/IwBBEGsiBCQAAkAgARChAUUEQCAAIAEoAgg2AgggACABKQIANwIAIAAQmQMaDAELIAEoAgAhBSABKAIEIQIjAEEQayIDJAACQAJAAkAgAhClBQRAIAAiASACEMoBDAELIAJB9////wdLDQEgA0EIaiACENMDQQFqENIDIAMoAgwaIAAgAygCCCIBEPMBIAAgAygCDBDyASAAIAIQuAELIAEgBSACQQFqEKYCIANBEGokAAwBCxC/AQALCyAEQRBqJAALxAIBA38jAEEgayIDJAAgA0EANgIYIANCADcDECABIgRFBEAgA0EQaiIEQQAQxgsLIAAQciECA0AgAgRAAkAgAhDOAQRAIAJB7CVBmAJBARAuGiAEIAIQxgsgAkEAEJIHDAELIAIgBBCSBwsgAhBxIQIMAQsLAkACQAJAAkAgAQ0AIAMoAhQiBEEBayICQQBIDQEgACgCECIBIAI2ArQBIARBAk8EQAJAIAQgAygCGCICTwRAIAMoAhAhAgwBCyACQf////8DTw0EIAMoAhAgBEECdCIBED0iAkUNBSAAKAIQIQELIAEgAjYCuAEMAQsgA0EANgIUIAMoAhAQFwsgA0EgaiQADwtB98cBQea3AUE8QbMpEAAAC0GRtANB3v0AQc0AQZOzARAAAAsgAyABNgIAQej6BigCAEGp3QMgAxAdGhAmAAsPACAAIAAoAgBBBGo2AgALIQEBfyMAQRBrIgEkACABQQxqIAAQngIoAgAgAUEQaiQACw8AIAAgACgCAEEBajYCAAtZAQJ/IwBBEGsiAyQAIAIoAgAhBCAAAn8gASAAa0ECdSICBEADQCAAIAQgACgCAEYNAhogAEEEaiEAIAJBAWsiAg0ACwtBAAsiACABIAAbEJgDIANBEGokAAv4AwEBfyMAQRBrIgwkACAMIAA2AgwCQAJAIAAgBUYEQCABLQAAQQFHDQFBACEAIAFBADoAACAEIAQoAgAiAUEBajYCACABQS46AAAgBxAiRQ0CIAkoAgAiASAIa0GfAUoNAiAKKAIAIQIgCSABQQRqNgIAIAEgAjYCAAwCCwJAAkAgACAGRw0AIAcQIkUNACABLQAAQQFHDQIgCSgCACIAIAhrQZ8BSg0BIAooAgAhASAJIABBBGo2AgAgACABNgIAQQAhACAKQQA2AgAMAwsgCyALQYABaiAMQQxqEJYHIAtrIgBBAnUiBkEfSg0BIAZBoLYHaiwAACEFAkACQCAAQXtxIgBB2ABHBEAgAEHgAEcNASADIAQoAgAiAUcEQEF/IQAgAUEBaywAABDRAyACLAAAENEDRw0GCyAEIAFBAWo2AgAgASAFOgAADAMLIAJB0AA6AAAMAQsgBRDRAyIAIAIsAABHDQAgAiAAEPcBOgAAIAEtAABBAUcNACABQQA6AAAgBxAiRQ0AIAkoAgAiACAIa0GfAUoNACAKKAIAIQEgCSAAQQRqNgIAIAAgATYCAAsgBCAEKAIAIgBBAWo2AgAgACAFOgAAQQAhACAGQRVKDQIgCiAKKAIAQQFqNgIADAILQQAhAAwBC0F/IQALIAxBEGokACAAC1UBAn8jAEEQayIGJAAgBkEMaiIFIAEQSyAFEMABQaC2B0HAtgcgAhDDAiADIAUQzgMiARDuATYCACAEIAEQvgE2AgAgACABEL0BIAUQSCAGQRBqJAALLwEBfyMAQRBrIgMkACAAIAAgAiwAACABIABrEKADIgAgASAAGxCYAyADQRBqJAAL8AMBAX8jAEEQayIMJAAgDCAAOgAPAkACQCAAIAVGBEAgAS0AAEEBRw0BQQAhACABQQA6AAAgBCAEKAIAIgFBAWo2AgAgAUEuOgAAIAcQIkUNAiAJKAIAIgEgCGtBnwFKDQIgCigCACECIAkgAUEEajYCACABIAI2AgAMAgsCQAJAIAAgBkcNACAHECJFDQAgAS0AAEEBRw0CIAkoAgAiACAIa0GfAUoNASAKKAIAIQEgCSAAQQRqNgIAIAAgATYCAEEAIQAgCkEANgIADAMLIAsgC0EgaiAMQQ9qEJkHIAtrIgVBH0oNASAFQaC2B2osAAAhBgJAAkACQAJAIAVBfnFBFmsOAwECAAILIAMgBCgCACIBRwRAQX8hACABQQFrLAAAENEDIAIsAAAQ0QNHDQYLIAQgAUEBajYCACABIAY6AAAMAwsgAkHQADoAAAwBCyAGENEDIgAgAiwAAEcNACACIAAQ9wE6AAAgAS0AAEEBRw0AIAFBADoAACAHECJFDQAgCSgCACIAIAhrQZ8BSg0AIAooAgAhASAJIABBBGo2AgAgACABNgIACyAEIAQoAgAiAEEBajYCACAAIAY6AABBACEAIAVBFUoNAiAKIAooAgBBAWo2AgAMAgtBACEADAELQX8hAAsgDEEQaiQAIAALVQECfyMAQRBrIgYkACAGQQxqIgUgARBLIAUQwQFBoLYHQcC2ByACEOcCIAMgBRDQAyIBEO4BOgAAIAQgARC+AToAACAAIAEQvQEgBRBIIAZBEGokAAucAQEDf0E1IQECQCAAKAIcIgIgACgCGCIDQQZqQQdwa0EHakEHbiADIAJrIgJB8QJqQQdwQQNJaiIDQTVHBEAgAyIBDQFBNCEBAkACQCACQQZqQQdwQQRrDgIBAAMLIAAoAhRBkANvQQFrEPALRQ0CC0E1DwsCQAJAIAJB8wJqQQdwQQNrDgIAAgELIAAoAhQQ8AsNAQtBASEBCyABC2oBAn8gAEHEmgc2AgAgACgCKCEBA0AgAQRAQQAgACABQQFrIgFBAnQiAiAAKAIkaigCACAAKAIgIAJqKAIAEQUADAELCyAAQRxqEEggACgCIBAXIAAoAiQQFyAAKAIwEBcgACgCPBAXIAALOgEBfyAAQbCZBygCACIBNgIAIAAgAUEMaygCAGpBvJkHKAIANgIAIABBBGoQnwcaIABBOGoQnQwgAAsYACAAQcSWBzYCACAAQSBqEC8aIAAQqgcLVAACQCABBEAgASgCBCACTQ0BIAAgASgCACACQQR0aiIBKQIANwIAIAAgASkCCDcCCA8LQYPPAUGktwFBIkHoIRAAAAtB/aoDQaS3AUEiQeghEAAACxQAIAAgAUG7JUEiQaS3AUEEEPkGCx0AIwBBEGsiAyQAIAAgASACEIoMIANBEGokACAAC0oBAX8CQCAABEADQCABIAAoAgRPDQIgACgCACABQQR0aigABBAXIAFBAWohAQwACwALQYPPAUGktwFBIkGJOxAAAAsgAEEANgIEC64BAQZ/IwBBEGsiAiQAIAJBCGoiAyAAEK0FGgJAIAMtAABFDQAgAkEEaiIDIAAgACgCAEEMaygCAGoQSyADEJUMIQQgAxBIIAIgABCUDCEFIAAgACgCAEEMaygCAGoiBhCTDCEHIAIgBCAFKAIAIAYgByABIAQoAgAoAiARMAA2AgQgAxCrBUUNACAAIAAoAgBBDGsoAgBqQQUQrgULIAJBCGoQrAUgAkEQaiQAIAALDAAgAEEEahCdDCAACygBAn8jAEEQayICJAAgASgCACAAKAIASCEDIAJBEGokACABIAAgAxsLEAAgACABNwMIIABCADcDAAsCAAseACABBEAgABD5ASEAIAEQ+QEoAhAgADYCqAELIAALFAAgAEHUlQc2AgAgAEEEahBIIAAL8wMCAn4FfyMAQSBrIgUkACABQv///////z+DIQICfiABQjCIQv//AYMiA6ciBEGB+ABrQf0PTQRAIAJCBIYgAEI8iIQhAiAEQYD4AGutIQMCQCAAQv//////////D4MiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgQbIQAgBK0gA3wMAQsgACAChFAgA0L//wFSckUEQCACQgSGIABCPIiEQoCAgICAgIAEhCEAQv8PDAELIARB/ocBSwRAQgAhAEL/DwwBC0GA+ABBgfgAIANQIgcbIgggBGsiBkHwAEoEQEIAIQBCAAwBCyAFQRBqIAAgAiACQoCAgICAgMAAhCAHGyICQYABIAZrELEBIAUgACACIAYQmwMgBSkDCEIEhiAFKQMAIgJCPIiEIQACQCAEIAhHIAUpAxAgBSkDGIRCAFJxrSACQv//////////D4OEIgJCgYCAgICAgIAIWgRAIABCAXwhAAwBCyACQoCAgICAgICACFINACAAQgGDIAB8IQALIABCgICAgICAgAiFIAAgAEL/////////B1YiBBshACAErQshAiAFQSBqJAAgAUKAgICAgICAgIB/gyACQjSGhCAAhL8LiQIAAkAgAAR/IAFB/wBNDQECQEGUlgsoAgAoAgBFBEAgAUGAf3FBgL8DRg0DDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIPCyABQYBAcUGAwANHIAFBgLADT3FFBEAgACABQT9xQYABcjoAAiAAIAFBDHZB4AFyOgAAIAAgAUEGdkE/cUGAAXI6AAFBAw8LIAFBgIAEa0H//z9NBEAgACABQT9xQYABcjoAAyAAIAFBEnZB8AFyOgAAIAAgAUEGdkE/cUGAAXI6AAIgACABQQx2QT9xQYABcjoAAUEEDwsLQeSUC0EZNgIAQX8FQQELDwsgACABOgAAQQELwgIBBH8jAEHQAWsiBSQAIAUgAjYCzAEgBUGgAWoiAkEAQSgQMxogBSAFKALMATYCyAECQEEAIAEgBUHIAWogBUHQAGogAiADIAQQqgxBAEgEQEF/IQQMAQsgACgCTEEASCAAIAAoAgAiCEFfcTYCAAJ/AkACQCAAKAIwRQRAIABB0AA2AjAgAEEANgIcIABCADcDECAAKAIsIQYgACAFNgIsDAELIAAoAhANAQtBfyAAELkHDQEaCyAAIAEgBUHIAWogBUHQAGogBUGgAWog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IANByABsakF/NgIsIABBfzYCLCACIAVByABsaiAENgIwDwsCQCACIAhByABsaiIFKAIwIgdBAEwNACAFKAI0QQBMDQACQCACIAdByABsaigCBCIFQQBMDQAgBSABIABBEGoQtwQNACAGQX82AiggAiADQcgAbGpBfzYCLCACIARByABsaiIAQX82AiwgAiAAKAIoQcgAbGogBDYCNA8LIAIgBEHIAGxqQn83AyggAiADQcgAbGpBfzYCLCACIAYoAihByABsaiADNgIwDwsgAiAIQcgAbGoiACAENgI0IAAgAzYCMAtDAQJ8IAArAwgiAiABKwMIIgNESK+8mvLXej6gZARAQQEPCyADREivvJry13q+oCACZARAQQAPCyAAKwMAIAErAwBmC1UCAnwBfyABQQAgAUEAShshASAAtyIDIQIDQCABIARGRQRAIARBAWohBCACEMAHIQIMAQsLIAMgAqObIgKZRAAAAAAAAOBBYwRAIAKqDwtBgICAgHgLXgEBfyAAKwMIIAErAwhhBEACQCAAKwMQIAErAxBiDQAgACsDGCABKwMYYg0AIAAoAiAgASgCIEcNACAAKAIkIAEoAiRGIQILIAIPC0H5oQFB5LkBQakGQanvABAAAAvMTwMZfwp8AX4jAEHwAWsiCyQAIAAQsAJBCBAYIRhBqIsLLQAAQQFGBEAQ7AMhGQsgAEHevgEQIyECQaiSC0EANgIAAkAgAkUNACACLQAAIgpFDQADQAJAQaiSCwJ/AkACQAJAAkAgCkH/AXEiA0HtAGsOBwEFBQUFAgMAC0EIIANB4wBGDQMaIANB6QBHBEAgAw0FDAcLQRIMAwtBAQwCC0EEDAELQQILIARyIgQ2AgALIAJBAWoiAi0AACEKDAALAAsgAQRAQdbSBEEAECcLAn8jAEHQAmsiBSQAQQFBHBAYIhYgABA1Igk2AgQgFiAJQcgAEBgiATYCDET////////vfyEkRP///////+//ISAgABAaIQNE////////7/8hIkT////////vfyEjIAEhAgNAIAMEQCADKAIQIgQrAxAhHyAEKwNgISEgBCsDWCEdIAQrAxghHCAEKwNQIRsgAiACKAIAQQFyNgIAIAIgHCAbRAAAAAAAAOA/okQAAAAAAADwPxAkIhugIh45A0AgAiAcIBuhIhw5AzAgAiAfIB0gIaBE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Ai0AAEEEcUUEQANAAkAgAiIAKAIkKAIIIgJFDQAgAigCFCICRQ0AIAItAABBAXFFDQELC0EwEE0iCCAANgIoIAggACsDKDkDCCAAKAIAIQogACECA0ACQCACIgMgCkEEcjYCACACKAIkKAIAIgJFDQAgAigCGCICRQ0AIAIoAgAiCkEBcUUNAQsLIAggAysDODkDECAEIAggACsDMBCTDgsgAUEBaiEBDAELCyANIAQ2AhRBACEBQbTGCkHsyQooAgAQfyEEA0AgDSgCACABSgRAIA0oAgggAUHIAGxqIgItAABBAnFFBEADQAJAIAIiACgCJCgCDCICRQ0AIAIoAhQiAkUNACACLQAAQQFxRQ0BCwtBMBBNIgggADYCKCAIIAArAzA5AwggACgCACEKIAAhAgNAAkAgAiIDIApBAnI2AgAgAigCJCgCBCICRQ0AIAIoAhgiAkUNACACKAIAIgpBAXFFDQELCyAIIAMrA0A5AxAgBCAIIAArAygQkw4LIAFBAWohAQwBCwsgDSAENgIYQQAhAgNAIAIgF0cEQCAPIAJBA3RqIgAoAgQhCCAAKAIAIQNBACEEA0AgAyAERgRAIAJBAWohAgwDBSAIIARBOGxqIgYgDUEYQRQgBi0AABtqKAIAIAYQqAMiDigCHCIANgIoAkAgDigCICAARwRAIA4oAhghAQwBCwJAIAsgAEEBdEEBIAAbIgpB/////wNLBH9BxAAFIA4oAhggCkECdBA9IgENAUEwCxCjATYCsAEgBUG79AMgC0GwAWoQHRoQJgALIAEgDigCICIAQQJ0akEAIAogAGtBAnQQMxogDiAKNgIgIA4gATYCGCAOKAIcIQALIAEgAEECdGogBjYCACAOIABBAWo2AhwgBEEBaiEEDAELAAsACwsgDSgCFBCSDiANKAIYEJIOIA0oAhQQkQ4NACANKAIYEJEODQAgDSgCFCANEJAODQAgDSgCGCANEJAODQAgDSgCFBCODiANKAIYEI4OQQAhAkGokgstAABBBHEEQEHO8QQgBRCDARogC0KKgICAoAE3A6ABIAVBtqEEIAtBoAFqEB0aQfz4AyAFEIMBGgNAIA0oAgQgAkwEQEEAIQFE////////738hHUT////////v/yEgRP///////+//IR9E////////738hGwNAIAEgF0YEQAJAQeP4AyAF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BEAgASAIayAGIAgQjwEaCwUgACAEKAIANgIAIABBBGohACAEQQRqIQQMAQsLIAMgB0YNASAGIAMgByADaxCPARoMAQsgCUEMaiACIAAgAigCAGtBAnUgBGoQ8QQgBiACKAIAa0ECdSACQQhqELcGIgEoAggiACAEQQJ0aiEFA0AgACAFRwRAIAAgAygCADYCACADQQRqIQMgAEEEaiEADAELCyABIAA2AgggAigCACEFIAYhACABKAIEIQMDQCAAIAVHBEAgA0EEayIDIABBBGsiACgCADYCAAwBCwsgASADNgIEIAIoAgQiBCAGayEAIAEoAgghBSAEIAZHBEAgBSAGIAAQjwEaIAEoAgQhAwsgASAAIAVqNgIIIAIoAgAhACACIAM2AgAgASAANgIEIAIoAgQhACACIAEoAgg2AgQgASAANgIIIAIoAgghACACIAEoAgw2AgggASAANgIMIAEgASgCBDYCACABELYGCyAJQSBqJAAgAhCVCQtjAgJ/AXwgAigCBCIDKwMYIAIoAgAiBCsDGKEgAisDCKEhBSADKAIgIQMgBCgCICEEIAAoAgQgACgCAGsgASgCBCABKAIAa0kEQCADIAQgAiAFEOwEDwsgBCADIAIgBZoQ7AQL4gIBCX8gACgCACEFIAAoAgQhACMAQRBrIgMkACADQccANgIMAkAgACAFa0ECdSIGQQJIDQAgBkECa0EBdiEIA0AgCEEASA0BIAUgCEECdGohBAJAIAZBAkgNACAGQQJrQQF2IgkgBCAFayIAQQJ1SA0AIAUgAEEBdSIBQQFyIgJBAnRqIQAgBiABQQJqIgFKBEAgASACIAAoAgAgACgCBCADKAIMEQAAIgEbIQIgAEEEaiAAIAEbIQALIAAoAgAgBCgCACADKAIMEQAADQAgBCgCACEBA0ACQCAEIAAiBCgCADYCACACIAlKDQAgBSACQQF0IgdBAXIiAkECdGohACAGIAdBAmoiB0oEQCAHIAIgACgCACAAKAIEIAMoAgwRAAAiBxshAiAAQQRqIAAgBxshAAsgACgCACABIAMoAgwRAABFDQELCyAEIAE2AgALIAhBAWshCAwACwALIANBEGokAAtGAgF8An8gACgCBCEDIAAoAgAhAAN8IAAgA0YEfCABBSAAKAIAIgIrAwggAisDGKEgAisDEKIgAaAhASAAQQRq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QAJAIABBAEoEQCAHIABBAWsiAUECdGohCkQAAAAAAAAAACETA0AgACADTg0CIABBA3QiCCAJIAooAgBBAnRqKAIAaisDACAGIAhqKwMAoiAToCETIABBAWohAAwACwALDAELIAYgAUEDdCIAaiIIIAgrAwAgE6EgCSAKKAIAQQJ0aigCACAAaisDAKM5AwAgASEADAELCyAFQQFqIQUMAQsLIAQQF0EAIQVBASEOA0AgAyAFRg0DIAIgBUECdGohAUEAIQADQCAAIAVHBEAgASgCACAAQQN0aiIEKwMAIRMgBCACIABBAnRqKAIAIAVBA3RqIgQrAwA5AwAgBCATOQMAIABBAWohAAwBCwsgBUEBaiEFDAALAAsgDEEINgIEIAwgAzYCAEHo+gYoAgBB2t0DIAwQHRoQJgALIAwgA0EDdDYCEEHo+gYoAgBBqd0DIAxBEGoQHRoQJgALIAxBIGokACAOCyAAIAAEQCAAKAIEEBcgACgCCBAXIAAoAhAQFyAAEBcLCy0BAnxBfyACIAAoAgBBA3RqKwMAIgMgAiABKAIAQQN0aisDACIEZCADIARjGwtdAEGg2QooAgBBpNkKKAIAckUEQEGk2QogAzYCAEGg2QogAjYCACABQQJPBEAgACABQQRBNhCUAQtBpNkKQQA2AgBBoNkKQQA2AgAPC0HJpQNBufsAQSdBgxoQAAALXgICfwJ8IAFBACABQQBKGyEBIANBA3QhAyACQQN0IQIDQCABIARGRQRAIAAgBEECdGooAgAiBSACaisDACADIAVqKwMAoSIHIAeiIAagIQYgBEEBaiEEDAELCyAGnwt3AQV/IAFBACABQQBKGyEFIAEgAWwQtwEhBiABELcBIQQDfyADIAVGBH8DQCACIAVGRQRAIAIgACABIAQgAkECdGooAgAQkAQgAkEBaiECDAELCyAEBSAEIANBAnRqIAYgASADbEECdGo2AgAgA0EBaiEDDAELCwujBAEFfyAAEBohAQNAIAEEQCABQYYmQcACQQEQLhogARDgBSABIAEQKygCECgCdEEBcRC6BCABKAIQQQA2AsQBQQVBBBAYIQMgASgCECICQQA2AswBIAIgAzYCwAFBBUEEEBghAyABKAIQIgJBADYC3AEgAiADNgLIAUEDQQQQGCEDIAEoAhAiAkEANgLUASACIAM2AtgBQQNBBBAYIQMgASgCECICQQA2AuQBIAIgAzYC0AFBA0EEEBghAyABKAIQIgJBATYC7AEgAiADNgLgASAAIAEQGyEBDAELCyAAEBohAwNAIAMEQCAAIAMQKSEBA0AgAQRAIAFB+SVBuAFBARAuGiABEKkDIAFBoI0LKAIAQQFBABBQIQIgASgCECACNgKcASABQTBBACABKAIAQQNxQQNHG2ooAihBiI0LKAIAQeX0BBB6IQQgAUFQQQAgASgCAEEDcUECRxtqKAIoQYiNCygCAEHl9AQQeiEFIAEoAhAiAkEBOwGoASACQQE7AZoBIAQtAABFIAQgBUdyRQRAIAJB6Ac7AZoBIAIgAigCnAFB5ABsNgKcAQsgARCwCgRAIAEoAhAiAkEANgKcASACQQA7AZoBCyABQfCNCygCAEEAQQAQUCECIAEoAhBB/wEgAiACQf8BThs6AJgBIAFBpI0LKAIAQQFBABBQIQIgASgCECACNgKsASAAIAEQLCEBDAELCyAAIAMQGyEDDAELCwvxAQEEfwNAIAFBAXQiBEEBciEGAkAgACgCBCIFIARKBEAgAyAAKAIAIgcgBEECdGooAgBBAnRqKgIAIAMgByABQQJ0aigCAEECdGoqAgBdDQELIAEhBAsCQCAFIAZMDQAgAyAAKAIAIgUgBkECdGooAgBBAnRqKgIAIAMgBSAEQQJ0aigCAEECdGoqAgBdRQ0AIAYhBAsgASAERwRAIAAoAgAiBSAEQQJ0aiIGKAIAIQcgBiAFIAFBAnRqIgUoAgA2AgAgBSAHNgIAIAIgBigCAEECdGogBDYCACACIAUoAgBBAnRqIAE2AgAgBCEBDAELCwuVAQEFfyAEIAFBAnQiBWoiBioCACACX0UEQCADIAVqIgcoAgAhBSAGIAI4AgAgACgCACEGA0ACQCAFQQBMDQAgBCAGIAVBAXYiAEECdGooAgAiCEECdCIJaioCACACXkUNACAGIAVBAnRqIAg2AgAgAyAJaiAFNgIAIAAhBQwBCwsgBiAFQQJ0aiABNgIAIAcgBTYCAAsLXwEBfyAAKAIEIgQEQCABIAAoAgAiASgCADYCACABIAEgACgCBEECdGpBBGsoAgAiATYCACACIAFBAnRqQQA2AgAgACAAKAIEQQFrNgIEIABBACACIAMQkwoLIARBAEcLkwEBBH8gBEEBayIGELcBIQcgACAGNgIEIAAgBzYCACAEQQAgBEEAShshCEEAIQQDQCAFIAhGRQRAIAEgBUcEQCAHIARBAnRqIAU2AgAgAiAFQQJ0aiAENgIAIARBAWohBAsgBUEBaiEFDAELCyAGQQJtIQUDQCAFQQBIRQRAIAAgBSACIAMQkwogBUEBayEFDAELCwvvAQEEfwNAIAFBAXQiBEEBciEGAkAgACgCBCIFIARKBEAgAyAAKAIAIgcgBEECdGooAgBBAnRqKAIAIAMgByABQQJ0aigCAEECdGooAgBIDQELIAEhBAsgBSAGSgRAIAYgBCADIAAoAgAiBSAGQQJ0aigCAEECdGooAgAgAyAFIARBAnRqKAIAQQJ0aigCAEgbIQQLIAEgBEcEQCAAKAIAIgUgBEECdGoiBigCACEHIAYgBSABQQJ0aiIFKAIANgIAIAUgBzYCACACIAYoAgBBAnRqIAQ2AgAgAiAFKAIAQQJ0aiABNgIAIAQhAQwBCwsLPwACQCAAIAFjBEAgASACYw0BQX9BACABIAJkGw8LIAAgAWRFBEBBAA8LIAEgAmQNAEF/QQAgASACYxsPC0EBC38CA38DfCMAQTBrIgIkACABKwMIIQUgASsDACEGQej6BigCAAJ/IAEgASgCECIEKAIERgRAIAQoAgAMAQsgAUEYagsiASsDACEHIAIgASsDCDkDICACIAc5AxggAiAFOQMQIAIgBjkDCCACIAA2AgBBpeQEIAIQLSACQTBqJAALrwQCCnwBfyAEQQBMBEBBAA8LIAArAwghCiAAKwMAIQggASsDCCEFIAErAwAhCQJ/IAAgACgCECIPKAIERgRAIA8oAgAMAQsgAEEYagsiDysDCCENIA8rAwAhCwJ/IAEgASgCECIPKAIERgRAIA8oAgAMAQsgAUEYagsiDysDCCEGIA8rAwAhB0EBIQ8CQAJAAkACQAJAAkACQCAEQQFrDgMCAQAGCyAIIAthBEAgAiAIOQMAIAUgBqEgCSAHoaMgCCAHoaIgBqAhBQwFCyAHIAlhBEAgAiAJOQMAIAogDaEgCCALoaMgCSALoaIgDaAhBQwFCyACIAogCiANoSAIIAuhoyIMIAiioSIOIAUgBSAGoSAJIAehoyIGIAmioSIFoSAGIAyhIgejOQMAIAYgDqIgDCAFoqEgB6MhBQwECyAAIAFBABC9AkF/RgRAIAEgAEEBEL0CQX9HBEAgByEMIAYhDgwDCyANIAogASAAQQAQvQJBf0YiABshDiALIAggABshDAwCCyAJIQwgBSEOIAAgAUEBEL0CQX9GDQJBACEPIAshDCANIQ4gCCEHIAohBiABIABBABC9AkF/Rw0EDAILIAggC6EgBSAKoaIgCiANoSAJIAihomEEQCACIAk5AwAMAwsgAiAHOQMAIAYhBQwCCyAJIQcgBSEGCyACIAwgB6BEAAAAAAAA4D+iOQMAIA4gBqBEAAAAAAAA4D+iIQULIAMgBTkDAEEBIQ8LIA8L9gECCHwBfyAAKwMIIQMgACsDACEEIAErAwghBSABKwMAIQYCfyAAIAAoAhAiCygCBEYEQCALKAIADAELIABBGGoLIgsrAwghCCALKwMAIQcCfyABIAEoAhAiACgCBEYEQCAAKAIADAELIAFBGGoLIgArAwghCSAAKwMAIQogAkF/IAcgBKEiByAFIAOhoiAGIAShIAggA6EiBaKhIgZEAAAAAAAAAABkIAZEAAAAAAAAAABjGyIANgIAIAJBfyAHIAkgA6GiIAogBKEgBaKhIgNEAAAAAAAAAABkIANEAAAAAAAAAABjGyIBNgIEIAIgACABbDYCCAtNAQJ8An9BASAAKAIAIgArAwAiAiABKAIAIgErAwAiA2QNABpBfyACIANjDQAaQQEgACsDCCICIAErAwgiA2QNABpBf0EAIAIgA2MbCwvfDgMUfwp8AX4jAEHwAGsiAyQAIAFBACABQQBKGyESIAFBKBAYIQ8DQCACIBJGRQRAIAAgAkECdGooAgAoAgQgDGohDCACQQFqIQIMAQsLIAxBGBAYIhBBGGshBQNAIAggEkcEQCAPIAhBKGxqIgQgECAGQRhsajYCACAAIAhBAnRqKAIAIg0oAgQhCkEAIQJE////////738hFkT////////v/yEXRP///////+//IRlE////////738hGANAIAIgCkYEQCAEIBc5AyAgBCAZOQMYIAQgFjkDECAEIBg5AwggBCAFIAZBGGxqNgIEIAhBAWohCAwDBSANKAIAIAJBBHRqIgcrAwAhGiAHKwMIIRsgECAGQRhsaiIHQQA2AhQgByAENgIQIAcgGzkDCCAHIBo5AwAgAkEBaiECIAZBAWohBiAXIBsQJCEXIBkgGhAkIRkgFiAbEDIh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C0IBAnwgACABIAEoAhAoApQBIgErAwAgACgCECgClAEiACsDAKEiAiABKwMIIAArAwihIgMgAiACoiADIAOioBC8CgvyAQEGf0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEMEKIAFBAWohAQwBCwsgABAaIQIDQCACBEAgAigCECIBKALoAUUEQCABIAA2AugBCyAAIAIQKSEDA0AgAwRAAkAgAygCECgCsAEiAUUNAANAIAEgAUEwayIFIAEoAgBBA3EiBkECRhsoAigoAhAiBC0ArAFBAUcNASABIAUgBCgC6AEEfyAGBSAEIAA2AugBIAEoAgBBA3ELQQJGGygCKCgCECgCyAEoAgAiAQ0ACwsgACADECwhAwwBCwsgACACEBshAgwBCwsLNAECf0EBQRAQGCIBQQA2AgwgASAAQRQQGCICNgIAIAEgAjYCBCABIAIgAEEUbGo2AgggAQsNACAAKAIQKAKMARAXC0gBAn8gACgCECICKAKwASACLgGoASICIAJBAWoQ/wEiAyACQQJ0aiABNgIAIAAoAhAiACADNgKwASAAIAAvAagBQQFqOwGoAQsUACAAIAFBkqUBQZQCQeO2ARCFAgujAQICfwN8IAAoAhAiAigCjAEiASsDCCEDIAErAxAhBCABKwMYIQUgAiABKwMgRAAAAAAAAFJAojkDKCACIAVEAAAAAAAAUkCiOQMgIAIgBEQAAAAAAABSQKI5AxggAiADRAAAAAAAAFJAojkDEEEBIQEDQCABIAIoArQBSkUEQCACKAK4ASABQQJ0aigCABDGCiABQQFqIQEgACgCECECDAELCwvvAQIDfwJ8IAAoAhAoAowBIgIrAxAhBSACKwMIIQYCQCAAIAFGDQAgABAaIQIDQCACRQ0BIAAgAigCECIDKALoAUYEQCADKAKUASIDIAYgAysDAKA5AwAgAyAFIAMrAwigOQMICyAAIAIQGyECDAALAAtBASEDA0AgACgCECICKAK0ASADTgRAIAIoArgBIANBAnRqKAIAIQQgACABRwRAIAQoAhAoAowBIgIgBSACKwMgoDkDICACIAYgAisDGKA5AxggAiAFIAIrAxCgOQMQIAIgBiACKwMIoDkDCAsgBCABEMcKIANBAWohAwwBCwsLoUsDGH8OfAF+IwBBsAFrIggkAEGAiwstAAAEQCAIIAAQHjYCcEHo+gYoAgBBpOQDIAhB8ABqEB0aCyAAEBohAgNAIAIEQCACKAIQQQA2ArgBIAAgAhAbIQIMAQsLQYCLCy0AAEECTwRAIAEoAhAhAiAIIAAQHjYCZCAIIAI2AmBB6PoGKAIAQcHsAyAIQeAAahAdGgsgASABKAIQQQFqNgIQIAhBqMgKKAIANgJcQc6pASAIQdwAakEAEM0BIgpB7CVBmAJBARAuGkE4EE0hAiAKKAIQIAI2AowBIAAQNCECIAooAhAgAigCEC8BsAE7AbABIAAgCkGw3AAQ8AYgACAKQe7aABDwBiAAIApB09IBEPAGIAhBmAFqIQYgCEGQAWohDCAIQYgBaiEDQQEhEANAIAAoAhAiAigCtAEgEE4EQCACKAK4ASAQQQJ0aigCACILEMcEIAogCxAeEO8GIgQoAhAiAiARNgKIASACIAs2AugBAkACQCABKAIEIgJFBEBE////////738hHET////////v/yEbDAELRP///////+9/IRxE////////7/8hGyALIAIQPiIFLQAARQ0AIAsgASgCAEcEQCAFIAsoAkQgAhA+EENFDQELIAhBADoArAEgCCADNgJEIAggDDYCSCAIIAY2AkwgCCAIQawBajYCUCAIIAhBgAFqNgJAIAVB+L0BIAhBQGsQSUEETgRAIAgrA5gBIRsgCCsDkAEhHSAIKwOIASEcIAgrA4ABIRpBkIsLKwMAIh5EAAAAAAAAAABkBEAgGyAeoyEbIB0gHqMhHSAcIB6jIRwgGiAeoyEaCyAEKAIQQQNBAkEBIAgtAKwBIgJBP0YbIAJBIUYbOgCHAQwCCyALEB4hAiAIIAU2AjQgCCACNgIwQbveAyAIQTBqECcLRP///////+//IR1E////////738hGgsgEUEBaiERIAsQGiECA0AgAgRAIAIoAhAgBDYCuAEgCyACEBshAgwBCwsgBCgCECICLQCHAQRAIAIoApQBIgIgGyAcoEQAAAAAAADgP6I5AwggAiAdIBqgRAAAAAAAAOA/ojkDAAsgEEEBaiEQDAELCyAAEBohAgJ/AkADQCACBEACQCACKAIQIgwoArgBDQACQCAMKALoASIDRQ0AIAMgACgCECgCjAEoAjBGDQAgAhAeIQEgABAeIQAgCCACKAIQKALoARAeNgIoIAggADYCJCAIIAE2AiBB6O4EIAhBIGoQMQwECyAMIAA2AugBIAwtAIYBDQAgCiACEB4Q7wYhAyACKAIQIgUgAzYCuAEgAygCECIEIBE2AogBIAQgBSsDIDkDICAEIAUrAyg5AyggBCAFKwNYOQNYIAQgBSsDYDkDYCAEIAUrA1A5A1AgBCAFKAIINgIIIAQgBSgCDDYCDCAFLQCHASIGBEAgBCgClAEiDCAFKAKUASIDKwMAOQMAIAwgAysDCDkDCCAEIAY6AIcBCyARQQFqIREgBCgCgAEgAjYCCAsgACACEBshAgwBCwsgABAaIQ4DQCAOBEAgDigCECgCuAEhBCAAIA4QKSECA0AgAgRAIAQgAkFQQQAgAigCAEEDcUECRxtqKAIoKAIQKAK4ASIFRwRAAn8gBCAFSQRAIAogBCAFQQBBARBSDAELIAogBSAEQQBBARBSCyIGQfklQbgBQQEQLhogBigCECIMIAIoAhAiAysDiAE5A4gBIAwgAysDgAE5A4ABIAUoAhAoAoABIgUgBSgCBEEBajYCBCAEKAIQKAKAASIDIAMoAgRBAWo2AgQgDCgCsAFFBEAgBSAFKAIAQQFqNgIAIAMgAygCAEEBajYCAAsgBiACEMQKCyAAIAIQLCECDAELCyAAIA4QGyEODAELCwJAAkAgACgCECgCjAEiAygCACICBEAgAygCBEEBakEQEBghBiAKKAIQKAKMASAGNgIAQQAhDgNAIAIoAgAiDUUNAiACKAIEKAIQKAK4ASILBEAgDUFQQQAgDSgCAEEDcSIDQQJHG2ooAiggDUEwQQAgA0EDRxtqKAIoIAAQHiEFKAIQKAKIASEMKAIQKAKIASEDIAggDSgCAEEEdjYCHCAIIAM2AhggCCAMNgIUIAggBTYCEEGAzwpB6QdBixcgCEEQahClARogCkGAzwoQ7wYiDSgCECARNgKIASARQQFqIREgDkEBaiEOAn8gCyANSQRAIAogCyANQQBBARBSDAELIAogDSALQQBBARBSCyIEQfklQbgBQQEQLhogBCgCECIFIAIoAgAiDCgCECIDKwOIATkDiAEgBSADKwOAATkDgAEgBCAMEMQKIA0oAhAoAoABIgwgDCgCBEEBajYCBCALKAIQKAKAASIDIAMoAgRBAWo2AgQgDCAMKAIAQQFqNgIAIAMgAygCAEEBajYCACAGIA02AgQgAisDCCEaIAYgBDYCACAGIBo5AwggBkEQaiEGCyACQRBqIQIMAAsACyAKDQEMAgsgCigCECgCjAEgDjYCBAsCf0EAIQVBACEGIwBB0ABrIgQkACAEQgA3A0ggBEIANwNAAkAgChA1QQBOBEAgBCAKEDUiAjYCPCAEQQA2AjggAkEhTwRAIAQgAkEDdiACQQdxQQBHakEBEBg2AjgLIAooAhAoAowBKAIAIgdFDQEgBCAKEB42AjAgBEH0zgooAgA2AjQgBEFAayICQdAWIARBMGoQjAFBASEGIAogAhCbAkEBEJABIgVB7CVBmAJBARAuGhDzBiECIAUoAhAgAjYCjAEgAiAHNgIAIAIgCigCECgCjAEoAgQ2AgQDQCAHKAIEIgJFDQIgAigCECgCiAEhAiAEIAQpAjg3AyggBEEoaiACEL4CRQRAIAogBygCBCAFIARBOGoQkAULIAdBEGohBwwACwALQYWTA0HJuQFBxwBBotkAEAAACyAKEBohB0EAIQIDQCAHBEAgBygCECgCiAEhAyAEIAQpAjg3AyACQCAEQSBqIAMQvgINACAHKAIQLQCHAUEDRw0AIAVFBEAgBCAKEB42AhAgBEH0zgooAgAgBmo2AhQgBEFAayICQdAWIARBEGoQjAEgCiACEJsCQQEQkAEiBUHsJUGYAkEBEC4aEPMGIQIgBSgCECACNgKMASAGQQFqIQYLIAogByAFIARBOGoQkAVBASECCyAKIAcQGyEHDAELCyAFBEAgBUEAEKEDGgsgChAaIQcDQCAHBEAgBygCECgCiAEhAyAEIAQpAjg3AwggBEEIaiADEL4CRQRAIAQgChAeNgIAIARB9M4KKAIAIAZqNgIEIARBQGsiA0HZFiAEEIwBIAogAxCbAkEBEJABIgxB7CVBmAJBARAuGhDzBiEDIAwoAhAgAzYCjAEgCiAHIAwgBEE4ahCQBSAMQQAQoQMaIAZBAWohBgsgCiAHEBshBwwBCwsgBCgCPEEhTwRAIAQoAjgQFwsgBC0AT0H/AUYEQCAEKAJAEBcLQfTOCkH0zgooAgAgBmo2AgAgCEH8AGoEQCAIIAY2AnwLIAhBrAFqBEAgCCACNgKsAQsgBkEBakEEEBghAyAKEHIhByADIQIDQCAHBEAgAiAHNgIAIAZBAWshBiACQQRqIQIgBxBxIQcMAQsLIAZFBEAgAkEANgIAIARB0ABqJAAgAwwBC0HMkwNBybkBQYYBQaLZABAAAAsiDCEXAkADQCAXKAIAIglFDQEgF0EEaiEXRAAAAAAAAAAAIR1EAAAAAAAAAAAhG0QAAAAAAAAAACEfRAAAAAAAAAAAISAgCSgCECgCjAEoAgAhBgJAQbjXCisDACIeRAAAAAAAAPC/YgRAQbDXCisDACEcIB4hGgwBC0G41wogCRA1t59BqNcKKwMAQbDXCisDACIcoqJEAAAAAAAAFECjIho5AwALQZjXCigCACECQeDXCigCACEFIAggHDkDkAEgCCAaIAIgBWsiB7eiIAK3ozkDiAFBoNcKKwMAIRogCCAHNgKAASAIIBo5A5gBAkACQEGU1wooAgAiA0EATgRAIAMgBUwEQEEAIQdB5NcKIAM2AgAMAgsgAiADSA0CQeTXCiAFNgIAIAMgBWshBwwBC0Hk1wogBTYCAAsgCCAHNgKgAQsgCRA1IQsgCSgCECgCjAEoAgQhBEEAIQMgCRAaIQJEAAAAAAAAAAAhGgNAIAIEQCACKAIQIgUtAIcBBEAgBSgClAEiBSsDACEcAnwgAwRAIBwgGyAbIBxjGyEbIBwgHSAcIB1jGyEdIAUrAwgiHCAfIBwgH2QbIR8gHCAaIBogHGQbDAELIBwiGyEdIAUrAwgiHwshGiADQQFqIQMLIAkgAhAbIQIMAQsLQdjXCiALIARrt59EAAAAAAAA8D+gQbDXCisDAKJEAAAAAAAA4D+iRDMzMzMzM/M/oiIcOQMAQdDXCiAcOQMAAnwgA0EBRgRAIBohICAdDAELRAAAAAAAAAAAIANBAkgNABogHyAaoCAbIB2gISECQCAfIBqhRDMzMzMzM/M/oiIfIBsgHaFEMzMzMzMz8z+iIh2iIBwgHEQAAAAAAAAQQKKiIhujIhpEAAAAAAAA8D9mBEAgH0QAAAAAAADgP6IhGiAdRAAAAAAAAOA/oiEcDAELIBpEAAAAAAAAAABkBEAgHyAanyIaIBqgIhujIRogHSAboyEcDAELIB1EAAAAAAAAAABkBEAgHUQAAAAAAADgP6IhHCAbIB2jRAAAAAAAAOA/oiEaDAELIBwhGiAfRAAAAAAAAAAAZEUNACAfRAAAAAAAAOA/oiEaIBsgH6NEAAAAAAAA4D+iIRwLRAAAAAAAAOA/oiEgQdjXCiAaIBogHBCnASIaEFejOQMAQdDXCiAcIBoQRKM5AwAgIUQAAAAAAADgP6ILISICf0HA1wooAgBBAkYEQEGQ1wooAgAMAQsQygynQSpzCxCxBwJAIAYEQCAGIQIDQCACKAIABEBB0NcKKwMAIRsgAisDCBBEIRogAigCBCgCECIFKAKUASIDIBsgGqIgIqA5AwAgA0HY1worAwAgAisDCBBXoiAgoDkDCCAFQQE6AIcBIAJBEGohAgwBCwsgIESamZmZmZm5P6IhHyAiRJqZmZmZmbk/oiEdIAkQGiEHA0AgB0UNAgJAIAcoAhAiAigCgAEoAghFBEAgAigC6AFFDQELIAItAIcBBEAgAigClAEiAiACKwMAICKhOQMAIAIgAisDCCAgoTkDCAwBC0EAIQ9EAAAAAAAAAAAhGiAJIAcQbyECRAAAAAAAAAAAIRwDQCACBEACQCACQVBBACACKAIAQQNxIgNBAkcbaigCKCIFIAJBMEEAIANBA0cbaigCKCIDRg0AIAMgBSAFIAdGGygCECIDLQCHAUUNACAPBEAgHCAPtyIhoiADKAKUASIDKwMIoCAPQQFqIg+3IhujIRwgGiAhoiADKwMAoCAboyEaDAELIAMoApQBIgMrAwghHCADKwMAIRpBASEPCyAJIAIgBxB0IQIMAQsLAkAgD0ECTgRAIAcoAhAiAigClAEiAyAaOQMADAELIA9BAUYEQCAHKAIQIgIoApQBIgMgGkRcj8L1KFzvP6IgHaA5AwAgHETNzMzMzMzsP6IgH6AhHAwBCxDMARDMASEhQdDXCisDACEbRBgtRFT7IRlAoiIcEEQhGiAHKAIQIgIoApQBIgMgGiAbICFEzczMzMzM7D+iIhuiojkDAEHY1worAwAhGiAcEFcgGyAaoqIhHAsgAyAcOQMIIAJBAToAhwELIAkgBxAbIQcMAAsACyAJEBohAiADRQRAA0AgAkUNAkHQ1worAwAhGhDMASEbIAIoAhAoApQBIBogGyAboEQAAAAAAADwv6CiOQMAQdjXCisDACEaEMwBIRsgAigCECgClAEgGiAbIBugRAAAAAAAAPC/oKI5AwggCSACEBshAgwACwALA0AgAkUNAQJAIAIoAhAiAy0AhwEEQCADKAKUASIDIAMrAwAgIqE5AwAgAyADKwMIICChOQMIDAELQdDXCisDACEaEMwBIRsgAigCECgClAEgGiAbIBugRAAAAAAAAPC/oKI5AwBB2NcKKwMAIRoQzAEhGyACKAIQKAKUASAaIBsgG6BEAAAAAAAA8L+gojkDCAsgCSACEBshAgwACwALAkBBiNcKKAIARQRAQeTXCigCACEDQQAhBwNAIAMgB0wNAkG41worAwBBmNcKKAIAIgIgB2u3oiACt6MiGkQAAAAAAAAAAGVFBEAgCRAaIQIDQCACBEAgAigCECgCgAEiA0IANwMQIANCADcDGCAJIAIQGyECDAELCyAJEBohAwNAIAMiAgRAA0AgCSACEBsiAgRAIAMgAhDACgwBCwsgCSADECkhAgNAIAIEQCACQVBBACACKAIAQQNxQQJHG2ooAigiBSADRwRAIAMgBSACEL8KCyAJIAIQLCECDAELCyAJIAMQGyEDDAELCyAJIBogBhC+CkHk1wooAgAhAwsgB0EBaiEHDAALAAsgCRA1IQJB/NYKQgA3AgBB9NYKQgA3AgBB7NYKQgA3AgBB7NYKQYT5B0HsyQooAgAQfzYCAEHw1gogAhDCCjYCACAJEDUhAyADQfjWCigCACICSgRAQfzWCigCABAXIAJBAXQiAiADIAIgA0obIgNBCBAYIQJB+NYKIAM2AgBB/NYKIAI2AgALQeTXCigCACEDQQAhDwNAIAMgD0oEQEG41worAwBBmNcKKAIAIgIgD2u3oiACt6MiHEQAAAAAAAAAAGVFBEBB7NYKKAIAIgJBAEHAACACKAIAEQMAGkGA1wpB/NYKKAIANgIAQfTWCkHw1gooAgAiAjYCACACIAIoAgA2AgQgCRAaIQIDQCACBEAgAigCECIFKAKAASIDQgA3AxAgA0IANwMYAn8gBSgClAEiAysDCEHI1worAwAiG6OcIhqZRAAAAAAAAOBBYwRAIBqqDAELQYCAgIB4CyELAn8gAysDACAbo5wiGplEAAAAAAAA4EFjBEAgGqoMAQtBgICAgHgLIQQjAEEgayIOJAAgDiALNgIQIA4gBDYCDEHs1gooAgAiAyAOQQxqQQEgAygCABEDACIFKAIIIQNBgNcKQYDXCigCACINQQhqNgIAIA0gAzYCBCANIAI2AgAgBSANNgIIQYCLCy0AAEEDTwRAIA4gAhAeNgIIIA4gCzYCBCAOIAQ2AgBB6PoGKAIAQef0AyAOEB0aCyAOQSBqJAAgCSACEBshAgwBCwsgCRAaIQMDQCADBEAgCSADECkhAgNAIAIEQCACQVBBACACKAIAQQNxQQJHG2ooAigiBSADRwRAIAMgBSACEL8KCyAJIAIQLCECDAELCyAJIAMQGyEDDAELC0Hs1gooAgAiBEEAQYABIAQoAgARAwAhAgNAIAIEQCAEIAJBCCAEKAIAEQMAIAJB7NYKEL0KIQUhAiAFQQBODQELCyAJIBwgBhC+CkHk1wooAgAhAwsgD0EBaiEPDAELC0Hs1gooAgAQeRpB8NYKKAIAIQIDQCACBEAgAigCDCACKAIAEBcgAhAXIQIMAQsLQfzWCigCABAXCwJAICJEAAAAAAAAAABhICBEAAAAAAAAAABhcQ0AIAkQGiECA0AgAkUNASACKAIQKAKUASIDICIgAysDAKA5AwAgAyAgIAMrAwigOQMIIAkgAhAbIQIMAAsACyAeRAAAAAAAAPC/YQRAQbjXCkKAgICAgICA+L9/NwMACyAJEBohDwJAA0ACQAJAAkACQCAPIg0EQCAJIA0QGyEPIA0oAhAiAigCgAEhAyACKALoASIYRQ0BIAMoAgQiGUUNAyAZQQFqQRAQGCESQQAhAyANKAIQKAKAASgCACIFQQFqQRgQGCELIAkgDRBvIQIDQCACBEAgDSACQVBBACACKAIAQQNxIgRBAkcbaigCKCIGRgRAIAJBMEEAIARBA0cbaigCKCEGCyANKAIQKAKUASIEKwMIIR4gBigCECgClAEiBisDCCEcIAQrAwAhGyAGKwMAIRogCyADQRhsaiIGIAI2AgAgBiAcIB6hIhwgGiAboSIaEKcBOQMIIAYgGiAaoiAcIByioDkDECADQQFqIQMgCSACIA0QdCECDAELCyADIAVGBEAgCyAFQRhBJBCUASAFQQJIDQMgBUEBayEEQQAhBgNAIAYiAyAETg0EIAsgA0EYbGorAwghGiADQQFqIgYhAgNAAkAgAiAFRgRAIAUhAgwBCyALIAJBGGxqKwMIIBpiDQAgAkEBaiECDAELCyACIAZGDQAgAiADIAIgA0obIQZEAAAAAAAAAAAhHCACIAVHBHwgCyACQRhsaisDCAVEGC1EVPshCUALIBqhIAIgA2u3o0Q5nVKiRt+hPxAyIRoDQCADIAZGDQEgCyADQRhsaiICIBwgAisDCKA5AwggA0EBaiEDIBogHKAhHAwACwALAAtBj4MBQeO2AUHGBEHIGRAAAAsgCRA1QQJIDQMgACABKAIARgRAIAkQsgoaC0EAIQVBACEPIwBBIGsiEiQAIAlBsNwAECMhB0GAiwstAAAEQEHeugNBCEEBQej6BigCABBKGgsCQCAHBEAgBy0AAA0BC0Hb6wAhBwsCQCAHQToQkwEiA0UNACADIAdHBEAgBywAAEEwa0EJSw0BCyAHEIoCIgJBACACQQBKGyEPIANBAWohBwtBgIsLLQAABEAgEiAHNgIEIBIgDzYCAEHo+gYoAgBBgvIDIBIQHRoLAkAgDwRAIAkQNSEEIAkQsAIgEkEIaiAJEN0CQfjXCiASKQMYIig3AwBB8NcKIBIpAxA3AwBB6NcKIBIpAwg3AwAgKKdBAXEEQEHo1wpB6NcKKwMARAAAAAAAAFJAozkDAEHw1wpB8NcKKwMARAAAAAAAAFJAozkDAAsgCRAaIQMDQCADBEAgAyECA0AgCSACEBsiAgRAIAMgAhDuBiAFaiEFDAELCyAJIAMQGyEDDAELCyAFRQ0BIARBAWsgBGy3ISK3IR8gCCgCoAEhBiAIKwOYASEmIAgrA4gBIScgCCgCgAEhFiAEt58hHSAIKwOQASIhISBBACEQA0AgBUUgDyAQTXJFBEBBoPkHIBY2AgBBqPkHICA5AwBBgNgKICc5AwBBiNgKIAY2AgAgJkQAAAAAAAAAAGQEQEGw+QcgJjkDAAsgJ0QAAAAAAAAAAGEEQEGA2AogHSAgokQAAAAAAAAUQKM5AwALQQAhEUGQ2AogICAgokGw+QcrAwCiIho5AwBBmNgKIBogH6IiGiAaoCAiozkDACAGIQIDQAJAAkAgAiARTA0AQYDYCisDAEGg+QcoAgAiAiARa7eiIAK3oyIkRAAAAAAAAAAAZQ0AIAkQGiECA0AgAgRAIAIoAhAoAoABIgNCADcDECADQgA3AxggCSACEBshAgwBCwtBACEFIAkQGiEDA0AgAwRAIAkgAxAbIQIDQCACBEAgAigCECgClAEiCysDACADKAIQKAKUASIEKwMAoSIaIBqiIAsrAwggBCsDCKEiHCAcoqAhGwNAIBtEAAAAAAAAAABhBEBBBRCmAUEKb2u3IhogGqJBBRCmAUEKb2u3IhwgHKKgIRsMAQsLIAIoAhAoAoABIgsgGkGQ2ApBmNgKIAMgAhDuBiIEGysDACAboyIaoiIbIAsrAxCgOQMQIAsgHCAaoiIaIAsrAxigOQMYIAMoAhAoAoABIgsgCysDECAboTkDECALIAsrAxggGqE5AxggBCAFaiEFIAkgAhAbIQIMAQsLIAkgAxApIQIDQCACBEAgAyACQVBBACACKAIAQQNxQQJHG2ooAigiFBDuBkUEQCAUKAIQIhMoApQBIg4rAwAgAygCECILKAKUASIEKwMAoSEaIBMoAoABIhMgEysDECAaIBogDisDCCAEKwMIoSIeEE8iHCADELsKIBQQuwqgIhuhIhogGqIgHEGo+QcrAwAgG6CioyIaoiIboTkDECATIBMrAxggHiAaoiIaoTkDGCALKAKAASIEIBsgBCsDEKA5AxAgBCAaIAQrAxigOQMYCyAJIAIQLCECDAELCyAJIAMQGyEDDAELCyAFDQFBACEFCyAhICCgISAgEEEBaiEQDAMLICQgJKIhHCAJEBohAgNAIAIEQCACKAIQIgQtAIcBQQNHBEACQCAcIAQoAoABIgMrAxAiHiAeoiADKwMYIhsgG6KgIhpkBEAgBCgClAEiAyAeIAMrAwCgOQMADAELIAQoApQBIgMgJCAeoiAanyIaoyADKwMAoDkDACAkIBuiIBqjIRsLIAMgGyADKwMIoDkDCAsgCSACEBshAgwBCwsgEUEBaiERQYjYCigCACECDAALAAsLIAVFDQELIAkgBxCsChoLIBJBIGokAAwDCyADKAIIDQMgCSANELQBDAMLIAsoAgAhAkEAIQ4gCyERA0AgAgRAAnwgESgCGCIEBEAgESsDIAwBCyALKwMIRBgtRFT7IRlAoAsgAigCECIFLgGoASEVIA0gAkFQQQAgAigCAEEDcSIGQQJHG2ooAigiA0YEQCACQTBBACAGQQNHG2ooAighAwtBASEUIBErAwgiHKEgFbejRDmdUqJG36E/EDIhGwJAIAMgDUsEQCAOIQYMAQtBfyEUIBVBAWsiAiAOaiEGIBsgAreiIBygIRwgG5ohGwsgEUEYaiERQQAhAyAVQQAgFUEAShshEyAFKAKwASEQA0AgAyATRwRAIBIgBkEEdGoiFiAQKAIAIgc2AgAgDSAHQTBBACAHKAIAQQNxIgJBA0cbaigCKCIFKAIQKAK4AUcEQCAHQVBBACACQQJHG2ooAighBQsgFiAcOQMIIBYgBTYCBCAQQQRqIRAgA0EBaiEDIBsgHKAhHCAGIBRqIQYMAQsLIA4gFWohDiAEIQIMAQsLIA4gGUcNAyAYKAIQKAKMASICIBk2AgQgAiASNgIAIAsQFwsgGCABEMgKDQAgDSgCECIDIBgoAhAoAowBIgIrAxgiGjkDICACKwMgIRsgAyAaRAAAAAAAAFJAokQAAAAAAADgP6IiGjkDYCADIBo5A1ggAyAbOQMoIAMgG0QAAAAAAABSQKI5A1AMAQsLIA0NAwwBCwtBzghB47YBQb0FQbw3EAAACwJ/AkACQCAIKAJ8IgJBAk8EQAJAIAgoAqwBRQRAQQAhAwwBCyACQQEQGCIDQQE6AAAgCCgCfCECCyABIAM2AiggAiAMQQAgAUEUahDVCCEFIAMQFwwBCyACQQFHBEAgASgCACAARiEQQQAhBQwCCyAMKAIAEMsCQQAhBQsgASgCACAARiEQIAgoAnwiAkUNACAMKAIAKAIQIgErAyghHyABKwMgIR0gASsDGCEjIAErAxAhG0EAIAJBAUYNARogHyAFKwMIIhygIR8gHSAFKwMAIhqgIR0gIyAcoCEjIBsgGqAhGyAMIQYgBSECA0AgBigCBCIBBEAgBkEEaiEGIAIrAxAhISABKAIQIgErAxAhICABKwMYIR4gASsDICEcIB8gASsDKCACKwMYIhqgECQhHyAdIBwgIaAQJCEdICMgHiAaoBAyISMgGyAgICGgEDIhGyACQRBqIQIMAQVBAAwDCwALAAsgASgCDCECIAAgASgCCEE2QQMQULchHSAAIAJBJEEDEFC3IR9EAAAAAAAAAAAhG0EBCyEDIAAoAhAiAigCDCIBBH8gHSABKwMYEDAgHSAboaEiHEQAAAAAAADgP6IiGqAgHSAcRAAAAAAAAAAAZCIBGyEdIBsgGqEgGyABGyEbQQAFIAMLIBByRQRAIABBhIwLKAIAQQhBABBQtyElIAAoAhAhAgsgJSAboSEeICUgI6EgAisDOKAhGiACKwNYISACQCADDQAgDCEQIAUhAgNAIBAoAgAiA0UNAQJ/IAJFBEAgGiEcIB4hG0EADAELIBogAisDCKAhHCAeIAIrAwCgIRsgAkEQagshASAQQQRqIRAgHEQAAAAAAABSQKMhHCAbRAAAAAAAAFJAoyEbIAMQGiECA0AgAgRAIAIoAhAoApQBIgYgGyAGKwMAoDkDACAGIBwgBisDCKA5AwggAyACEBshAgwBBSABIQIMAgsACwALAAsgCigCECgCjAEiAUIANwMIIAFCADcDECABIB0gJSAeoKBEAAAAAAAAUkCjOQMYIAEgHyAgICUgGqCgoEQAAAAAAABSQKM5AyAgBRAXIAoQGiECA0AgAgRAAkAgAigCECIGKALoASIBBEAgASgCECgCjAEiAyAGKAKUASIBKwMAIAYrAyAiHEQAAAAAAADgP6KhIhs5AwggASsDCCEaIAYrAyghHiADIBwgG6A5AxggAyAaIB5EAAAAAAAA4D+ioSIaOQMQIAMgHiAaoDkDIAwBCyAGKAKAASgCCCIBRQ0AIAEoAhAoApQBIgMgBigClAEiASsDADkDACADIAErAwg5AwgLIAogAhAbIQIMAQsLIAAoAhAoAowBIgIgCigCECgCjAEiASkDCDcDCCACIAEpAyA3AyAgAiABKQMYNwMYIAIgASkDEDcDECAMIQIDQCACKAIAIgEEQCABEMMKIAFB7CUQ2QEgAkEEaiECDAELCyAKKAIQKAKMASgCABAXIAoQwwogCkHsJRDZASAKEBohAwNAIAMEQCAKIAMQGyAKIAMQKSECA0AgAgRAIAIoAhAoArABEBcgAkH5JRDZASAKIAIQLCECDAELCyADKAIQKAKAARAXIAMoAhAoApQBEBcgA0GGJhDZASEDDAELCyAKEJUBIAwQF0EAQYCLCy0AAEUNARogCCAAEB42AgBB6PoGKAIAQYTwAyAIEB0aQQAMAQtBfwsgCEGwAWokAAsTACAAIAFB2KQBQSFBgbkBEIUCC7UDAQh/IwBBEGsiBCQAIAAQGiEBA38gAQR/IAEoAhAiBi0AtQFBB0YEfyABELoOIAEoAhAFIAYLQQA2AugBIAAgARAbIQEMAQVBAQsLIQUDQAJAIAAoAhAiASgCtAEgBU4EQCABKAK4ASAFQQJ0aigCACIDEBohAQNAIAFFDQIgAyABEBsCQCABKAIQLQC1AQRAIAEQHiECIAQgABAeNgIEIAQgAjYCAEGx5gMgBBAnIAMgARC0AQwBCyADKAIQKAKIAiECIAEQrQEgAUcEQEGxmQNByrgBQZMBQZ2YARAAAAsgASgCECIHIAI2AvABIAIoAhAiAiACKALsASAHKALsAWo2AuwBIAEoAhAiAkEHOgC1ASACIAM2AugBIAMgARApIQIDQCACRQ0BAkAgAigCECgCsAEiAUUNAANAIAEgAUEwayIHIAEoAgBBA3FBAkYbKAIoKAIQIggtAKwBQQFHDQEgCCADNgLoASABIAcgASgCAEEDcUECRhsoAigoAhAoAsgBKAIAIgENAAsLIAMgAhAsIQIMAAsACyEBDAALAAsgBEEQaiQADwsgBUEBaiEFDAALAAtIAQJ/IAQhBgNAIAEgA0xFBEAgACAGKAIAIgcgAkEAIAUQkQUgAUEBayEBIAcoAhAoAowBQTBqIQYgByECDAELCyAEIAI2AgALbgEDf0EBIQIDQAJAIAAoAhAiAygCuAEhASACIAMoArQBSg0AIAEgAkECdGooAgAiASgCECgCDBC6ASABKAIQKAKMASIDBEAgAygCABAXIAEoAhAoAowBEBcLIAEQzAogAkEBaiECDAELCyABEBcLTQEDf0EBIQEDQCAAKAIQIgMoArgBIQIgASADKAK0AUpFBEAgAiABQQJ0aigCACICKAIQKAIMELoBIAIQzQogAUEBaiEBDAELCyACEBcLEwAgACABQZKlAUEmQfa3ARCFAgvmAwIGfwZ8IwBB4ABrIgMkACAAKAIQIgIrAxghCSACKwMQIQpBgIsLLQAAQQJPBEAgARCdAiADIAAQHjYCUEHo+gYoAgBBx+kDIANB0ABqEB0aCwJAIAFFBEBB6PoGKAIAIQYMAQtB6PoGKAIAIQYgABAaIQIgA0FAayEFA0AgAkUNAQJAIAIoAhAiBCgCgAEgAEcNACAEIAogBCsDEKA5AxAgBCAJIAQrAxigOQMYQYCLCy0AAEECSQ0AIAEQnQIgAhAeIQQgAigCECIHKwMQIQggBSAHKwMYOQMAIAMgCDkDOCADIAQ2AjAgBkHPngQgA0EwahAtCyAAIAIQGyECDAALAAsgAUEBaiEHQQEhBANAIAAoAhAiAigCtAEgBE4EQCACKAK4ASAEQQJ0aigCACEFIAEEQCAJIAUoAhAiAisDKKAhCCAKIAIrAyCgIQsgCSACKwMYoCEMIAogAisDEKAhDUGAiwstAABBAk8EQCABEJ0CIAUQHiECIAMgCDkDICADIAs5AxggAyAMOQMQIAMgDTkDCCADIAI2AgAgBkG9ngQgAxAtIAUoAhAhAgsgAiAIOQMoIAIgCzkDICACIAw5AxggAiANOQMQCyAFIAcQzwogBEEBaiEEDAELCyADQeAAaiQAC9cTAw1/CnwBfiMAQcACayIEJAAgACgCSCEMQYCLCy0AAEECTwRAIAEQnQIgBCAAEB42ApACQej6BigCAEGk5AMgBEGQAmoQHRoLIAFBAWohBkEBIQIDQCAAKAIQIggoArQBIAJOBEAgCCgCuAEgAkECdGooAgAiCCAGENAKIAJBAWohAiAIEDUgA2ohAwwBCwsCQAJAAkAgABA1IANrIg0gACgCECIIKAK0AWoiBg0AIAgoAgwNACAIQgA3AxAgCEKAgICAgICAmcAANwMoIAhCgICAgICAgJnAADcDICAIQgA3AxgMAQsCQAJ/AkAgAEEEQQQgBEGgAmoQuANBAk0EQCAEQQM2ArACDAELQQAgBCgCsAJBBEcNARogBC0AvAJBAnFFDQIgDEEAQaYWQQAQHyIFIAxBAUGmFkEAEB8iB3IEQCAEIAZBBBAYNgK4AgwDCyAEIAAQHjYCgAJBzJcDIARBgAJqECcLQQALIQdBACEFCyAGQSAQGCEIIAZBBBAYIQxBACECQQEhAwNAIAAoAhAiCigCtAEgA04EQCAIIAJBBXRqIgkgCigCuAEgA0ECdGooAgAiCygCECIKKQMQNwMAIAkgCikDKDcDGCAJIAopAyA3AxAgCSAKKQMYNwMIIAQoArgCRSAFRXJFBEAgCyAFQQBBABBQIQkgBCgCuAIgAkECdGogCTYCAAsgDCACQQJ0aiALNgIAIANBAWohAyACQQFqIQIMAQsLAkAgDUEATA0AIAAQGiEDA0AgA0UNASADKAIQIgUoAoABRQRAIAUgADYCgAEgBSsDWCEQIAUrA2AhDyAFKwNQIREgCCACQQV0aiIFQgA3AwAgBSAROQMYIAUgECAPoDkDECAFQgA3AwggBCgCuAJFIAdFckUEQCADIAdBAEEAEFAhBSAEKAK4AiACQQJ0aiAFNgIACyAMIAJBAnRqIAM2AgAgAkEBaiECCyAAIAMQGyEDDAALAAsgBkEASA0BIARBoAJqIQdBACECQQAhBSMAQfAAayIDJAACQCAGRQ0AAkACQCAHKAIQQQNrDgIAAQILIAYgCCAHKAIIENMIIQlBgIsLLQAABEAgAyAJNgJQQej6BigCAEHtuQQgA0HQAGoQHRoLIAlBAEwNASAGQRAQGCEKA0AgAiAGRgRAQQAhAiAGQQQQGCELA0AgAiAGRgRAIAsgBkEEQdABEJQBQQAhAhDsAyENIAZBEBAYIQUDQCACIAZGBEAgCxAXQQAhAgNAIAIgBkYEQCAKEBcgDRDfAkEAIQJBgIsLLQAAQQJJDQlB6PoGKAIAIQcDQCACIAZGDQogBSACQQR0aiIJKwMAIRAgAyAJKwMIOQMQIAMgEDkDCCADIAI2AgAgB0GcmwQgAxAtIAJBAWohAgwACwAFIAogAkEEdGooAgQQFyACQQFqIQIMAQsACwAFIAIgCyACQQJ0aigCACIOIA0gBSAOKAIMQQR0aiAJIAcoAgggCBCGBiACQQFqIQIMAQsACwAFIAsgAkECdGogCiACQQR0ajYCACACQQFqIQIMAQsACwAFIAogAkEEdGoiCyACNgIMIAcoAgghDSADQgA3A2ggA0IANwNgIAMgCCACQQV0aiIFKQMINwM4IANBQGsgBSkDEDcDACADIAUpAxg3A0ggBSkDACEZIANCADcDKCADIBk3AzAgA0IANwMgIANBMGogCyAJIA0gA0EgakHl9AQQ0gggAkEBaiECDAELAAsACyAGIAggBxDRCCEFCyADQfAAaiQAIAUhCSAEKAK4AhAXQej6BigCACEHRAAAwP///9/BIRBEAADA////30EhEUQAAMD////fQSESRAAAwP///9/BIRVBACECA0AgAiAGRwRAIBUgCSACQQR0aiIFKwMIIhMgCCACQQV0aiIDKwMYoCIPZCEKIBAgBSsDACIUIAMrAxCgIhZkIQsgEiATIAMrAwigIhNjIQ0gESAUIAMrAwCgIhRjIQ4gDCACQQJ0aigCACIFKAIQIQMCQCAAKAIQKAK0ASACSgRAIAMgDzkDKCADIBY5AyAgAyATOQMYIAMgFDkDEEGAiwstAABBAkkNASABEJ0CIAUQHiEDIAQgDzkD0AEgBCAWOQPIASAEIBM5A8ABIAQgFDkDuAEgBCADNgKwASAHQb2eBCAEQbABahAtDAELIAMgEyAPoEQAAAAAAADgP6I5AxggAyAUIBagRAAAAAAAAOA/ojkDEEGAiwstAABBAkkNACABEJ0CIAUQHiEDIAUoAhAiBSsDECEXIAQgBSsDGDkD8AEgBCAXOQPoASAEIAM2AuABIAdBz54EIARB4AFqEC0LIBUgDyAKGyEVIBAgFiALGyEQIBIgEyANGyESIBEgFCAOGyERIAJBAWohAgwBCwsCQCAAKAIQIgIoAgwiA0UNACADKwMYIg8gBkUEQCADKwMgIRVEAAAAAAAAAAAhEUQAAAAAAAAAACESIA8hEAsgECARoaEiD0QAAAAAAAAAAGRFDQAgECAPRAAAAAAAAOA/oiIPoCEQIBEgD6EhEQsgECAEKAKoArhEAAAAAAAA4D+iRAAAAAAAAAAAIAFBAEobIg+gIRYgESAPoSEQIBUgAisDWCAPoKAhESASIAIrAzggD6ChIQ9BgIsLLQAAQQJPBEAgARCdAiAAEB4hAiAEIBE5A6ABIAQgFjkDmAEgBCAPOQOQASAEIBA5A4gBIAQgAjYCgAEgB0G9ngQgBEGAAWoQLQsgBEFAayEKQQAhAwNAIAMgBkcEQCAMIANBAnRqKAIAIgUoAhAhAgJAIAAoAhAoArQBIANKBEAgAiACKwMoIA+hIhI5AyggAiACKwMgIBChIhU5AyAgAiACKwMYIA+hIhM5AxggAiACKwMQIBChIhQ5AxBBgIsLLQAAQQJJDQEgARCdAiAFEB4hAiAEIBI5A1AgBCAVOQNIIAogEzkDACAEIBQ5AzggBCACNgIwIAdBvZ4EIARBMGoQLQwBCyACIAIrABggD6E5AxggAiACKwAQIBChOQMQQYCLCy0AAEECSQ0AIAEQnQIgBRAeIQIgBSgCECIFKwMQIRIgBCAFKwMYOQNwIAQgEjkDaCAEIAI2AmAgB0HPngQgBEHgAGoQLQsgA0EBaiEDDAELCyAAKAIQIgYgESAPoSIROQMoIAYgFiAQoSISOQMgIAYgDyAPoSIPOQMYIAYgECAQoSIQOQMQQYCLCy0AAEECTwRAIAEQnQIgABAeIQAgBCAROQMgIAQgEjkDGCAEIA85AxAgBCAQOQMIIAQgADYCACAHQb2eBCAEEC0LIAgQFyAMEBcgCRAXCyAEQcACaiQADwtBsJEDQfa3AUGNAUHcFxAAAAv2BgEJfyAAELgKIQQgARC4CiIFKAIQKAL0ASIHIAQoAhAoAvQBIgZKBEACQCAEIAIoAhAiCCgCsAEiA0EwQQAgAygCAEEDcSIJQQNHG2ooAihGBEAgA0FQQQAgCUECRxtqKAIoIAVGDQELQQVBAUEFIAEgBUYbIAAgBEcbIQkgAygCEC4BqAFBAk4EQCAIQQA2ArABAkAgByAGa0EBRw0AIAQgBRCEAyIARQ0AIAIgABCoBEUNACACIAAQgQMgBCgCEC0ArAENAiAFKAIQLQCsAQ0CIAIQ9AMPCyAEKAIQKAL0ASEBIAQhBwNAIAEgBSgCECgC9AEiBk4NAiAFIQAgBkEBayABSgRAIAQQXiIKIANBUEEAIAMoAgBBA3FBAkcbaigCKCIIKAIQIgAoAvQBIgsgACgC+AFBAhDTCiAKELUCIgAoAhAiBiAIKAIQIggrA1g5A1ggBiAIKwNgOQNgIAYgCCgC9AE2AvQBIAYgCCgC+AFBAWoiBjYC+AEgCigCECgCxAEgC0EGdGooAgQgBkECdGogADYCAAsgByAAIAIQ2wEoAhAgCToAcCADKAIQIgcgBy8BqAFBAWs7AagBIAFBAWohASADQVBBACADKAIAQQNxQQJHG2ooAigoAhAoAsgBKAIAIQMgACEHDAALAAsCQCAHIAZrQQFHDQACQCAEIAUQhAMiA0UNACACIAMQqARFDQAgAigCECADNgKwASADKAIQIgAgCToAcCAAIAAvAagBQQFqOwGoASAEKAIQLQCsAQ0BIAUoAhAtAKwBDQEgAhD0AwwBCyACKAIQQQA2ArABIAQgBSACENsBIgMoAhAgCToAcAsgBSgCECgC9AEiACAEKAIQKAL0AWtBAkgNAAJAIAQgA0EwQQAgAygCAEEDcUEDRxtqKAIoRgRAIAMhAQwBCyACKAIQQQA2ArABIAQgA0FQQQAgAygCAEEDcUECRxtqKAIoIAIQ2wEhASACKAIQIAE2ArABIAMQ/gEgBSgCECgC9AEhAAsDQCABQVBBACABKAIAQQNxIgdBAkcbaigCKCIDKAIQIgQoAvQBIABGRQRAIAQoAsgBKAIAIQEMAQsLIAMgBUYNACABQTBBACAHQQNHG2ooAiggBSACENsBKAIQIAk6AHAgARD+AQsPC0HgmwNBoLkBQdIAQa/4ABAAAAseAEEBQX9BACAAKAIAIgAgASgCACIBSRsgACABSxsL3wIBBX8gACgCECgCxAEiBCABQQZ0IghqIgUoAgQhBgJAIANBAEwEQCACIANrIQIDQCACQQFqIgcgBCAIaigCACIFTkUEQCAGIAdBAnRqKAIAIgQoAhAgAiADaiICNgL4ASAGIAJBAnRqIAQ2AgAgACgCECgCxAEhBCAHIQIMAQsLIANBAWsiByAFaiECIAFBBnQhAwNAIAIgBU4NAiAGIAJBAnRqQQA2AgAgAkEBaiECIAAoAhAoAsQBIgQgA2ooAgAhBQwACwALIANBAWshByAFKAIAIQQDfyACIARBAWsiBE4EfyACIANqIQMDQCACQQFqIgIgA05FBEAgBiACQQJ0akEANgIADAELCyAAKAIQKALEASIEIAFBBnRqKAIABSAGIARBAnRqKAIAIgUoAhAgBCAHaiIINgL4ASAGIAhBAnRqIAU2AgAMAQsLIQULIAQgAUEGdGogBSAHajYCAAtLAQN/IAAQGiEBA0AgAQRAIAEoAhAiAigCgAEoAgAoAhAoApQBIgMgAigClAEiAisDADkDACADIAIrAwg5AwggACABEBshAQwBCwsLjAcCC38BfCMAQUBqIgQkAAJAIAAQNUEBRgRAIAAQGigCECgClAEiAEIANwMAIABCADcDCAwBCyAEQQhqIgdBAEEoEDMaIAQgAigCADYCFCAAEBooAhAoAoABKAIAECsiA0EAQaEZQQAQHyEGIANBAUGsG0EAEB8hCSADQawbECMhBSAHEL0LIARBATYCECADIAZEAAAAAAAA8D9EAAAAAAAAAAAQUyEOIAQgBTYCJCAEIAk2AiAgBCAOOQMoAkAgAUGh9AAQIxBqBEAgBEIANwM4IARCADcDMCAEIAQoAhQiATYCACAEIAFBAWo2AhQgBEEwaiIBIAQQmQsgARAhIAEQOE8EQCABQQEQ0QELIARBMGoiARAhIQMCQCABECUEQCABIANqQQA6AAAgBCAELQA/QQFqOgA/IAEQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAEKAIwIANqQQA6AAAgBCAEKAI0QQFqNgI0CwJAIARBMGoQJQRAIARBADoAPwwBCyAEQQA2AjQLIARBMGoiARAlIQMgACABIAQoAjAgAxtBARCQASAELQA/Qf8BRgRAIAQoAjAQFwsQtgshASAAEBohAwNAIANFDQIgASgCCCADQQEQexogAygCECgCgAEgATYCDCAAIAMQGyEDDAALAAsjAEEgayIFJAACQCAEQQhqIggoAhwiAQRAIAAgAUEAEHMiAw0BCwJAIAgoAhhFDQAgABAaIQMDQCADRQ0BIAMoAhAoAoABKAIAIAgoAhhBABC7Dg0CIAAgAxAbIQMMAAsACyAAEBohAwtBgIsLLQAABEAgBSADEB42AgBB6PoGKAIAQcPxAyAFEB0aCyAFQQA2AhggBUIANwMQIAAgAyAIQQEgBUEQahCmCyAFQQA2AhQgBSgCEBAXIAgoAgAiDCgCBCEBA0AgAQRAIAEoAggiChAaIgcoAhAoAoABIgMoAgghCyADKAIUIQYgCiAHEBshAwNAIAMEQCAGIAMoAhAoAoABIg0oAhQiCUoEQCANKAIIIQsgCSEGIAMhBwsgCiADEBshAwwBCwsgCygCECgCgAEiBiAGKAIEQQhyNgIEIAEgBzYCACABKAIEIAYoAgxBLGogARCxCyEBDAELCyAIEL0LIAVBIGokACAMIQELIAAgASAEQQhqIgArAyAgABDrCiABEKELIAIgBCgCFDYCAAsgBEFAayQACz8AIAAQpQYgABDoBCAAIAMEfwJAIANBfnFBAkYEQCAAIAMgASACEIUJDAELIAAQpAYLIAUFIAQLIAEgAhCECQtNAEEBIAEtAAIiAHQgAEEFdkEBcSABLQABIgBBAnZBD3EgAS0AAEEEdEHwAXFyIAJqLQAAQQN0IABBAXRBBnFyckECdEHQngZqKAIAcQtAAEEBIAEtAAEiAHQgAEEFdkEBcSABLQAAIgBBAnZBB3EgAmotAABBA3QgAEEBdEEGcXJyQQJ0QdCeBmooAgBxC0cBAX8gACgC8AIgASAAKALsAhEAACIAQf//A00EfyAAQQN2QRxxIABBCHYgAmotAABBBXRyQdCeBmooAgBBASAAdHEFQQALC6MBAQN/IwBBkAFrIgAkACAAQiU3A4gBIABBiAFqIgZBAXJBx/IAIAUgAigCBBCfBRBlIQcgACAENgIAIABB+wBqIgQgBEENIAcgBiAAENMBIARqIgcgAhCjAiEIIABBBGoiBiACEEsgBCAIIAcgAEEQaiIEIABBDGogAEEIaiAGENQLIAYQSCABIAQgACgCDCAAKAIIIAIgAxCVAyAAQZABaiQAC6MBAQR/IwBBgAJrIgAkACAAQiU3A/gBIABB+AFqIgdBAXJBhO4AIAUgAigCBBCfBRBlIQggACAENwMAIABB4AFqIgYgBkEYIAggByAAENMBIAZqIgggAhCjAiEJIABBFGoiByACEEsgBiAJIAggAEEgaiIGIABBHGogAEEYaiAHENQLIAcQSCABIAYgACgCHCAAKAIYIAIgAxCVAyAAQYACaiQAC54BAQN/IwBBQGoiACQAIABCJTcDOCAAQThqIgZBAXJBx/IAIAUgAigCBBCfBRBlIQcgACAENgIAIABBK2oiBCAEQQ0gByAGIAAQ0wEgBGoiByACEKMCIQggAEEEaiIGIAIQSyAEIAggByAAQRBqIgQgAEEMaiAAQQhqIAYQ2AsgBhBIIAEgBCAAKAIMIAAoAgggAiADEJYDIABBQGskAAuiAQEEfyMAQfAAayIAJAAgAEIlNwNoIABB6ABqIgdBAXJBhO4AIAUgAigCBBCfBRBlIQggACAENwMAIABB0ABqIgYgBkEYIAggByAAENMBIAZqIgggAhCjAiEJIABBFGoiByACEEsgBiAJIAggAEEgaiIGIABBHGogAEEYaiAHENgLIAcQSCABIAYgACgCHCAAKAIYIAIgAxCWAyAAQfAAaiQACz8AA0AgASACRwRAIAEgASgCACIAQf8ATQR/IAMoAgAgASgCAEECdGooAgAFIAALNgIAIAFBBGohAQwBCwsgAQs+AANAIAEgAkcEQCABIAEsAAAiAEEATgR/IAMoAgAgASwAAEECdGooAgAFIAALOgAAIAFBAWohAQwBCwsgAQtOAAJAIAEEQCABKAIEIAJNDQEgACABKAIAIAJBBHRqIgEpAwA3AwAgACABKQMINwMIDwtBg88BIAUgBCADEAAAC0H9qgMgBSAEIAMQAAALLwEBfyAAIAAoAgQgACgCACICIAJBAWogARBgNgIEIAAgACgCACIAQQFqNgIAIAALXQEDfyAAKAIQIQUgACgCPCEDIAFBOhCTASIEBEAgBEEAOgAACwJAIANFDQAgACgCRCABIAUgAmoiARDlCCADKAJcIgNFDQAgACABIAMRBAALIAQEQCAEQTo6AAALC1IBAnwgACAAKwMoIAArAyAgASsDECIDoiABKwMgIAArAxAiBKKgIAMgAiACoCAEoqKjRAAAAAAAAPA/ECQiAhAkOQMoIAEgASsDKCACECQ5AygLugEBAX8jAEEgayIHJAACQAJAIAEgBkkEQCACIAVPDQECQCACRQRAIAAQF0EAIQIMAQsgACACIAR0IgAQPSICRQ0DIAAgASAEdCIBTQ0AIAEgAmpBACAAIAFrEDMaCyAHQSBqJAAgAg8LQZG0A0He/QBBzQBBk7MBEAAACyAHIAM2AgQgByACNgIAQej6BigCAEHa3QMgBxAdGhAmAAsgByAANgIQQej6BigCAEGp3QMgB0EQahAdGhAmAAs8AQJ/IwBBEGsiASQAQQEgABBGIgJFBEAgASAANgIAQej6BigCAEGp3QMgARAdGhAmAAsgAUEQaiQAIAILqAEBAn8jAEGgAWsiBCQAIAQgATYCnAFBACEBIARBEGoiBUEAQYABEDMaIAQgBTYCDCAAIARBnAFqIAIgBEEMaiAEQY8BaiAAKAI4EQcAGgJAIAQoApwBIAJHDQAgBCgCDEEAOgAAIAVB4rIGEO0MBEAgACIBKAJAQQJGDQELQQAhASAEQRBqEO4MIgBBf0YNACAAQQJ0IANqKAIAIQELIARBoAFqJAAgAQtOAQF/QQEgACABQRRsaiIAKAIAIgEgAUEBTRshBEEBIQEDQCABIARHBEAgAiAAKAIEIAFBAnRqKAIAQQJ0aiADNgIAIAFBAWohAQwBCwsLnAEBAX9BCyEHAkACQAJAAkACQCABQQ9rDgQDAgIAAQsgBCACIANBiM8GIAQoAhgRBgAEQCAAIAY2AgBBCw8LIAQgAiADQY/PBiAEKAIYEQYARQ0BIAAgBTYCAEELDwsgAUEbRg0CCyABQRxGBEBBOyEHIAAoAhBFDQELIABBzgM2AgBBfyEHCyAHDwsgAEELNgIIIABB4wM2AgBBDAtKACAHIQIgBiEEIAUhAwJAAkACQCABQQ9rDgQCAAABAAtBfyECQc4DIQQgAUEcRw0AIAAoAhANAEE7DwsgACAENgIAIAIhAwsgAwtCAQF/IwBBEGsiBCQAAn8gAS0AAEEqRwRAIAQgATYCACADIAQQJ0EBDAELIAAgAC0AcCACcjoAcEEACyAEQRBqJAAL0TMDF38QfAF+IwBBIGsiECQAIAFBLGohBgNAIAYoAgAiBgRAIAAgBiACIAMQ6wogBkEEaiEGIBNBAWohEwwBCwsgEEEUaiEHIAAhBiACISAgAyEIRAAAAAAAAAAAIQIjAEHwAGsiBSQAIAEiDSgCCCILEBohAANAIAAEQCAGIAAQKSEEA0AgBARAIA0gBEFQQQAgBCgCAEEDcUECRxtqKAIoKAIQKAKAASgCDEYEQCALIARBARDIAhoLIAYgBBAsIQQMAQsLIAsgABAbIQAMAQsLIAVCADcDOCAFQgA3AzAgCCAIKAIQIgBBAWo2AhAgBSAANgIgIAVBMGoiAEHEsQEgBUEgahCMASALIAAQmwJBARCQASIPQewlQZgCQQEQLhogCCAIKAIQIgFBAWo2AhAgBSABNgIQIABBxLEBIAVBEGoQjAEgABCbAiAFIAsoAhg2AgwgBUEMakEAEM0BIQwgABBmIAsQGiEEA0AgBARAIA8gBEEBEHsaIAwgBBAeQQEQcyIAQYYmQcACQQEQLhogBCgCECgCgAEgADYCECALIAQQGyEEDAELCyALEBohBgNAIAYEQCAGKAIQKAKAASgCECEAIAsgBhApIQQDQCAEBEAgDyAEQQEQyAIaIAwgACAEQVBBACAEKAIAQQNxQQJHG2ooAigoAhAoAoABKAIQIgFBAEEBEFIiA0H5JUG4AUEBEC4aIAMoAhAgBDYCeCAAKAIQIgMgAygC+AFBAWo2AvgBIAEoAhAiASABKAL4AUEBajYC+AEgCyAEECwhBAwBCwsgCyAGEBshBgwBCwsgDBA1IQAgBUEANgI4IAVCADcDMCAMEBohBANAIAQEQCAFQTBqIAQQkQsgDCAEEBshBAwBCwtBAyAAIABBA0wbQQNrIRogBUEwahCPCwNAAkACQCAWIBpHBEACQCAFKAI0IgFFBEBBACEADAELIAUoAjAgAUECdGpBBGsoAgAhACAFIAFBAWs2AjQLIAwgABBvIQEDQCABRQ0CIAUgAUFQQQAgASgCAEEDcSIDQQJHG2ooAigiBiAARgR/IAFBMEEAIANBA0cbaigCKAUgBgs2AmBBACEEIAUoAjAhCiAFKAI0IQMDQAJAIAMgBEcEQCAKIARBAnRqIgYoAAAgBSgCYEcNASAGIAZBBGogAyAEQX9zakECdBCPARogBSAFKAI0QQFrNgI0CyAMIAEgABB0IQEMAgsgBEEBaiEEDAALAAsACyAMEJUBIAVBADYCNCAFKAIwEBcgBUIANwM4IAVCADcDMCAIIAgoAhQiAEEBajYCFCAFIAA2AgAgBUEwaiIAQaixASAFEIwBIA8gABCbAkEBEJABIQggABBmIAhB7CVBmAJBARAuGiAPEBohBANAIAQEQCAIIARBARB7GiAEKAIQKAKAAUEANgIcIAQoAhAoAoABQQA2AiAgBCgCECgCgAEiACAAKAIEQX5xNgIEIA8gBBAbIQQMAQsLIA8QGiEEA0AgBARAIAQoAhAoAoABIgAtAARBAXFFBEAgAEEANgIQIA8gBCAIEIoLCyAPIAQQGyEEDAELCwJAIAgQNUEBRgRAIAdCADcCACAHQQA2AgggByAIEBoiABCGAiAAKAIQKAKAASIAIAAoAgRBEHI2AgQMAQsgCBAaIQADQCAABEBBACEBIAggABBvIQQDQCAEBEAgAUEBaiEBIAggBCAAEHQhBAwBCwtBACEGIAAhBEEAIQoCQCABQQFHDQADQCAEKAIQKAKAASgCECIERQ0BIAZBAWohAwJAAkAgBCgCECgCgAEiASgCHCIJRQ0AIAYgCUgNASABKAIUIgYgCkYNAAJAIAEoAiAEQCABKAIYIApGDQELIAYhCgsgASAGNgIYIAQoAhAoAoABIgEgASgCHDYCICAEKAIQKAKAASEBCyABIAA2AhQgBCgCECgCgAEgAzYCHCADIQYMAQsLIAEoAiAgBkoNACABIAA2AhggBCgCECgCgAEgAzYCIAsgCCAAEBshAAwBCwtBACEBIAgQGiEEQQAhAANAIAQEQCAEKAIQKAKAASIDKAIgIAMoAhxqIgMgACAAIANIIgMbIQAgBCABIAMbIQEgCCAEEBshBAwBCwsgB0IANwIAIAdBADYCCCABKAIQKAKAAUEUaiEEA0AgASAEKAIAIgBHBEAgByAAEIYCIAAoAhAoAoABIgAgACgCBEEQcjYCBCAAQRBqIQQMAQsLIAcgARCGAiABKAIQKAKAASIAIAAoAgRBEHI2AgQgACgCIEUNACAFQQA2AjggBUIANwMwIABBGGohBANAIAEgBCgCACIARwRAIAVBMGogABCGAiAAKAIQKAKAASIAIAAoAgRBEHI2AgQgAEEQaiEEDAELC0EAIQNBACEAAkAgBUEwaiIBBEADQCABKAIEQQF2IANNBEADQCABEMcBIABLBEAgByABIAAQ4gEQhgIgAEEBaiEADAELCyABQQA2AgQgASgCABAXIAFBADYCCCABQgA3AgAMAwUgASADEOIBIQYgASADIAEgA0F/cyIEIAEoAgRqEOIBEPYGIAEgASgCBCAEaiAGEPYGIANBAWohAwwBCwALAAtBg88BQZv7AEEVQeySARAAAAsLIAsQGiEJA0AgCQRAIAkoAhAoAoABLQAEQRBxRQRAIAVBADYCOCAFQgA3AzAgCyAJECkhBANAIAQEQCAFQTBqIAQgBEEwayIAIAQoAgBBA3FBAkYbKAIoEIYCIAQgACAEKAIAQQNxQQJGGygCKCgCECgCgAEiACAAKAIEQSByNgIEIAsgBBAsIQQMAQsLIAsgCRCxAiEEA0AgBARAIAVBMGogBCAEQTBqIgAgBCgCAEEDcUEDRhsoAigQhgIgBCAAIAQoAgBBA3FBA0YbKAIoKAIQKAKAASIAIAAoAgRBIHI2AgQgCyAEEPgCIQQMAQsLQQAhBAJAIAUoAjQiAUECTwRAAkADQCAHEMcBIARNDQEgBxDHASEAIAcgBBDiASAEQQFqIQQoAhAoAoABLQAEQSBxRQ0AIAcgBCAAcBDiASgCECgCgAEtAARBIHFFDQALIAcgBCAJEPcGDAILIAUoAjQhAQtBACEEAkAgAUUNAANAIAcQxwEgBE0NASAHIAQQ4gEgBEEBaiIBIQQoAhAoAoABLQAEQSBxRQ0ACyAHIAEgCRD3BgwBCyAHIAkQhgILQQAhBANAIAUoAjQgBEsEQCAFQTBqIAQQ4gEoAhAoAoABIgAgACgCBEFfcTYCBCAEQQFqIQQMAQsLIAVBMGoQhAcLIAsgCRAbIQkMAQsLIAUgBygCCDYCSCAFIAcpAgA3A0ACQCAFQUBrIAsQ8woiA0UNAEEAIRIDQCASQQpGDQEgBSAFKAJINgJoIAUgBSkDQDcDYCALEBohCSADIQACQANAIAkEQCALIAkQbyEKA0AgCgRAIAkgCkEwQQAgCigCAEEDcSIBQQNHG2ooAigiBkYEQCAKQVBBACABQQJHG2ooAighBgtBACEEA0AgBEECRwRAIAUgBSgCaEEEEBgiATYCMCAFIAUoAmQiCDYCNCAFIAUoAmg2AjggASAFKAJgIAhBAnQQIBpBACEBIwBBEGsiDCQAIAwgCTYCDAJAIAVB4ABqIggEQCAIKAIEIQ4DQAJAIAEgDkcEQCAIKAIAIAFBAnRqIhEoAAAgDCgCDEcNASARIBFBBGogDiABQX9zakECdBCPARogCCAIKAIEQQFrNgIEC0EAIQEDQAJAIAgQxwEgAUsEQCAIIAEQ4gEgBkcNASAIIAEgBEEAR2ogCRD3BgsgDEEQaiQADAULIAFBAWohAQwACwALIAFBAWohAQwACwALQYPPAUGb+wBBFUG9iQEQAAALAkAgACAIIAsQ8woiAUoEQCAFQTBqEIQHIAENASAFIAUoAmg2AlggBSAFKQNgNwNQQQAhAAwICyAFQeAAahCEByAFIAUoAjg2AmggBSAFKQIwNwNgIAAhAQsgBEEBaiEEIAEhAAwBCwsgCyAKIAkQdCEKDAELCyALIAkQGyEJDAELCyAFIAUoAmg2AlggBSAFKQNgNwNQCyAFIAUoAlg2AkggBSAFKQNQNwNAIAAgA0YNASASQQFqIRIgACIDDQALCyAHIAUpA0A3AgAgByAFKAJINgIIQQAhBCAHEMcBIQADQCAHEMcBIARLBEAgByAEEOIBKAIQKAKAASgCACgCECIBKwMoIhsgASsDICIfIAIgAiAfYxsiAiACIBtjGyECIARBAWohBAwBCwsgAiAgoCAAuKJEGC1EVPshGUCjRAAAAAAAAAAAIABBAUcbIRtBACEEA0ACQAJAIAcQxwEgBEsEQCAHIAQQ4gEoAhAoAoABLQAEQQhxRQ0BAkACQAJAAkAgBxDHASAESwRAA0AgBEUNBSAHIAdBABDiARCGAiAHEMcBQQJ0QQRrIgEEQCAHRQ0DIAcoAgRFDQQgB0EAEJMEIAdBARCTBCABEI8BGgsgBxDHASEDIAdFDQQCQCAHKAIEIgEgA0EBayIDSQRAA0AgASADTw0CIAdBABCGAiAHKAIEIQEMAAsACyABIANNDQADQCABIANNDQEgByABQQFrIgE2AgQMAAsACyAEQQFrIQQMAAsAC0G8mgNBhLcBQSNB9hgQAAALQYPPAUGb+wBBFUGyHRAAAAtB8ZkDQZv7AEEVQbIdEAAAC0GDzwFBm/sAQRVB4YcBEAAACwtEGC1EVPshGUAgALijIR9BACEEA0AgBxDHASAETQ0CIAcgBBDiASIBKAIQKAKAASAENgIQIAEoAhAoAoABQgA3AxggHyAEuKIiHBBXIR0gASgCECgClAEiASAbIB2iOQMIIAEgGyAcEESiOQMAIARBAWohBAwACwALIARBAWohBAwBCwsgDUKAgICAgICA+L9/NwM4IA0gAkQAAAAAAADgP6IgGyAAQQFGGyICOQMYIA0gAjkDECAPEJUBIAVB8ABqJAAMAQtBACESIAAoAhAoAvgBIhlBBBAYIRcgGUEEEBghESAMIAAQbyEJQQAhDkEAIQMDQCAJBEAgACAJQVBBACAJKAIAQQNxIgFBAkcbaigCKCIGRgRAIAlBMEEAIAFBA0cbaigCKCEGC0EAIQogDCAAEG8hBANAIAQEQAJAIAQgCUYNACAAIARBUEEAIAQoAgBBA3EiFUECRxtqKAIoIgFGBEAgBEEwQQAgFUEDRxtqKAIoIQELIAwgBiABQQBBABBSIhVFDQBBASEKIAEgBk0NACADQQFqIQMgFSgCECgCeCIBRQ0AIA8gARC0ASAVKAIQQQA2AngLIAwgBCAAEHQhBAwBCwsCQCAKBEAgFyASQQJ0aiAGNgIAIBJBAWohEgwBCyARIA5BAnRqIAY2AgAgDkEBaiEOCyAMIAkgABB0IQkMAQsLAkAgGSADQX9zaiIEQQBMDQBBACEBAkAgBCAOSARAA0AgASAOTg0CIAFBAXIiAyAOTg0CIAwgESABQQJ0aigCACIGIBEgA0ECdGooAgAiA0EAQQEQUkH5JUG4AUEBEC4aIAYoAhAiBiAGKAL4AUEBajYC+AEgAygCECIDIAMoAvgBQQFqNgL4ASABQQJqIQEgBEEBayEEDAALAAsgBCAORw0BIBcoAgAhAUEAIQQDQCAEIA5GDQIgDCABIBEgBEECdGooAgAiA0EAQQEQUkH5JUG4AUEBEC4aIAEoAhAiBiAGKAL4AUEBajYC+AEgAygCECIDIAMoAvgBQQFqNgL4ASAEQQFqIQQMAAsAC0ECIQEDQCAEQQBMDQEgDCARKAIAIgMgESABQQJ0aigCACIGQQBBARBSQfklQbgBQQEQLhogAygCECIDIAMoAvgBQQFqNgL4ASAGKAIQIgMgAygC+AFBAWo2AvgBIARBAWshBCABQQFqIQEMAAsACyAREBcgFxAXIAwgABBvIQQDQCAEBEAgBEFQQQAgBCgCAEEDcSIDQQJHG2ooAigiASAARgRAIARBMEEAIANBA0cbaigCKCEBCyABKAIQIgMgAygC+AFBAWs2AvgBIAVBMGogARCRCyAMIAQgABB0IQQMAQsLIAVBMGoQjwsgDCAAELQBIBZBAWohFgwBCwsgDSAQKAIcNgIoIA0gECkCFDcCICAQKAIYIQUCQAJAIBMEfCATQaWSySRPDQEgE0E4EEYiBEUNAiANKwMQIiMgIKAhH0QYLURU+yEZQCAFuKMhHCANKAIAIQwgDSgCLCEBQQAhAyAQKAIUIQcCQAJAAkADQAJAIAUgAyIARgRAIBRBAWsOAgQBAwsgAEEBaiEDIAcgAEECdGooAgAiCCgCECgCgAEtAARBCHFFDQEgBCAUQThsaiIKIBwgALiiOQMIIAogCDYCAEEAIQBEAAAAAAAAAAAhISABIQZEAAAAAAAAAAAhGwNAIAYEQCAGKAIAIgkEfyAJKAIQKAKAASgCCAVBAAsgCEYEQCAGKwMQIgIgISACICFkGyEhIBsgAiACoCAgoKAhGyAAQQFqIQALIAYoAgQhBgwBCwsgCiAANgIwIAogGzkDICAKICE5AxggCiAfICGgOQMQIBRBAWohFAwBCwsgBCAEQThqRBgtRFT7IRlAIAQrA0AgBCsDCKEiAqEgAiACRBgtRFT7IQlAZBsQ4woMAgtBACEDIAQhBgNAIAMgFEYNAiAGAn8gFCADQQFqIgNGBEAgBCsDCCAGKwMIoUQYLURU+yEZQKAhAiAEDAELIAYrA0AgBisDCKEhAiAGQThqCyACEOMKIAZBOGohBgwACwALIARCgICAgICAgPg/NwMoC0QAAAAAAADwvyEkIAVBAUchB0QAAAAAAADwvyEfA0AgFCAYRwRAIAQgGEE4bGoiCCsDKCAIKwMQoiEdAnwCfCAHRQRARAAAAAAAAAAAIgIgHSAIKwMgIhtEGC1EVPshGUCjECQiHUQYLURU+yEZQKIgG6EiG0QAAAAAAAAAAGRFDQEaIBsgCCgCMLejICCgDAILIAgrAwggCCsDICAdIB2go6ELIQIgIAsgHaMiGyAbRAAAAAAAAOA/oiInIAVBAUYbISggCCgCMCIJQQFqQQJtIQ8gCCsDGCEpQQAhC0QAAAAAAAAAACElIAEhAwNAIAMEQAJAIAMoAgAiCgR/IAooAhAoAoABKAIIBUEACyAIKAIARw0AIAMoAiQiAEUNACADKwMQIB2jISYCQCAHRQRARBgtRFT7IQlAIAIgJqAgCUECRhsgAiACRAAAAAAAAAAAYhsiAiAkICREAAAAAAAAAABjGyEkIAIhHwwBCyAJQQFGBEAgCCsDCCECDAELIAIgJyAmoKAhAgsgHSACEFeiIR4gAyAdIAIQRKIiIiAeAnwgAysDOCIbRAAAAAAAAAAAZgRAIAJEGC1EVPshCUAgG6GgIhtEGC1EVPshGUCgIBsgG0QAAAAAAAAAAGMbDAELIAJEGC1EVPsh+b+gIABBAkYNABogIiAKKAIQKAKUASIAKwMAoCIbIBuiIB4gACsDCKAiGyAboqAhGyADKAIIIg4QGiEGIAohAANAIAYEQAJAIAYgCkYNACAiIAYoAhAoApQBIhIrAwCgIhwgHKIgHiASKwMIoCIcIByioCIcIBtjRQ0AIAYhACAcIRsLIA4gBhAbIQYMAQsLRAAAAAAAAAAAIAAgCkYNABogCigCECIGKAKUASIAKwMAIRsCQCADLQBAQQFxRQ0AIBsgAysDECADKwMYIiqhIhyaZEUNACAiIB4QTyEeIAJEGC1EVPsh+T8gACsDCCAcIBugEKcBIhuhAnwgGxBEIhsgHCAqIBujoSAeo6IiG70iK0IgiKdB/////wdxIgBBgIDA/wNPBEAgG0QYLURU+yH5P6JEAAAAAAAAcDigICunIABBgIDA/wNrckUNARpEAAAAAAAAAAAgGyAboaMMAQsCQCAAQf////4DTQRAIABBgIBAakGAgIDyA0kNASAbIBsgG6IQpgSiIBugDAILRAAAAAAAAPA/IBuZoUQAAAAAAADgP6IiHp8hGyAeEKYEISICfCAAQbPmvP8DTwRARBgtRFT7Ifk/IBsgIqIgG6AiGyAboEQHXBQzJqaRvKChDAELRBgtRFT7Iek/IBu9QoCAgIBwg78iHCAcoKEgGyAboCAiokQHXBQzJqaRPCAeIBwgHKKhIBsgHKCjIhsgG6ChoaFEGC1EVPsh6T+gCyIbmiAbICtCAFMbIRsLIBsLoaAMAQsgAkQYLURU+yEJQCAAKwMIIBsQpwGhIAYoAoABKwMYoaAiG0QYLURU+yEZwKAgGyAbRBgtRFT7IRlAZBsLEPgGICggJqAgAqAiAiAlIAtBAWoiCyAPRhshJQsgAygCBCEDDAELCwJAIAVBAkkNACAIKAIAIgAgDEcNACAAKAIQKAKAASAlOQMYCyAdICmgIgIgIyACICNkGyEjIBhBAWohGAwBCwsgBBAXIA0gE0EBRgR8IA0gIEQAAAAAAADgP6IgIaAiAppEAAAAAAAAAABEAAAAAAAAAAAQ+AYgDSANKAJAQQFyNgJAIAIgDSsDEKAFICMLOQMQICQgH6BEAAAAAAAA4D+iRBgtRFT7IQnAoAVEGC1EVPshCUALIQICQCAFQQFHDQAgDSgCACIARQ0AIAAoAhAoAoABKAIIRQ0AIA0gAjkDOCACRAAAAAAAAAAAY0UNACANIAJEGC1EVPshGUCgOQM4CyAQQSBqJAAPCyAQQTg2AgQgECATNgIAQej6BigCAEHa3QMgEBAdGhAmAAsgECATQThsNgIQQej6BigCAEGp3QMgEEEQahAdGhAmAAtaAEHwAyEEQSEhAwJ/AkACQAJAAkAgAUEVaw4EAAICAwELIAUhBAwCC0EhIAFBD0YNAhoLQX8hA0HOAyEEIAFBHEcNAEE7IAAoAhBFDQEaCyAAIAQ2AgAgAwsLMAEBfyAALQAAIgFBAWpB/wFxQRFPBEBB/bIDQY/9AEHIAEG4lwEQAAALIAFB/wFHC4UCAQN/IwBBEGsiAyQAIAMgATYCBCADIAE2AgwgAyABNgIIAkACQAJAQQBBACACIAEQTiIFQQBIDQAgBUEBaiEBIAUgABA4IAAQIWsiBE8EQCAAIAEgBGsQ0QELIAAQISEEIAUgABAlBH8gACAEagUgACgCACAEagsgASACIAMoAgwQTiIBRyABQQBOcQ0BIAFBAEwNACAAECUEQCABQYACTw0DIAAgAC0ADyABajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAWo2AgQLIANBEGokAA8LQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALPwAgAhDuDCICQX9GBEBBAA8LIAAgATYCSCAAQYkDNgIwIAAgBDYCBCAAIAM2AgAgACACOgBFIAEgADYCAEEBCzIBAn8jAEEQayIDJAAgA0EEaiIEIAAgAhDIECAAIAFqIAQQxxAgBBDsARogA0EQaiQACwwAIAAQ8goaIAAQFwsrAQF/IABBxPMHNgIAAkAgACgCBEEMayIBQQhqEIwHQQBODQAgARAXCyAAC70DAQl/Qez4B0HsyQooAgAQfyEEIAEQGiEDA38gAwR/IAEgAxApIQIDQCACBEAgAigCECgCfEEANgIAIAEgAhAsIQIMAQsLIAEgAxAbIQMMAQVBAQsLIQYDQAJAIAAQxwEgB0sEQCABIAAgBxDiASIFEG8hAwNAIAMEQCADKAIQKAJ8KAIAQQBKBEAgBEEAQYABIAQoAgARAwAhAgNAIAIEQAJAIAIoAggiCCgCECgCfCgCACADKAIQKAJ8KAIATA0AIAhBUEEAIAgoAgBBA3EiCkECRxtqKAIoIAVGDQAgCSAIQTBBACAKQQNHG2ooAiggBUdqIQkLIAQgAkEIIAQoAgARAwAhAgwBCwsjAEEQayICJAAgAiADNgIMIAQgAkEEakECIAQoAgARAwAaIAJBEGokAAsgASADIAUQdCEDDAELCyABIAUQbyECA0AgAkUNAiACKAIQKAJ8IgMoAgBFBEAgAyAGNgIAIwBBEGsiAyQAIAMgAjYCDCAEIANBBGpBASAEKAIAEQMAGiADQRBqJAALIAEgAiAFEHQhAgwACwALIAQQ3wIgCQ8LIAdBAWohByAGQQFqIQYMAAsAC08BAX8CQCABRQ0AIAFBlO8HEOEBIgFFDQAgASgCCCAAKAIIQX9zcQ0AIAAoAgwgASgCDEEAEIsBRQ0AIAAoAhAgASgCEEEAEIsBIQILIAILgQEBA38gACgCBCIEQQFxIQUCfyABLQA3QQFGBEAgBEEIdSIGIAVFDQEaIAIoAgAgBhCDBwwBCyAEQQh1IAVFDQAaIAEgACgCACgCBDYCOCAAKAIEIQRBACECQQALIQUgACgCACIAIAEgAiAFaiADQQIgBEECcRsgACgCACgCHBEIAAucAgEDfyMAQRBrIggkACACIAFBf3NB9////wNqTQRAIAAQQCEJIAhBBGoiCiABQfP///8BSQR/IAggAUEBdDYCDCAIIAEgAmo2AgQgCiAIQQxqENQDKAIAEMcDQQFqBUH3////AwsQxgMgCCgCBCECIAgoAggaIAQEQCACIAkgBBDpAgsgBgRAIARBAnQgAmogByAGEOkCCyADIAQgBWoiCmshByADIApHBEAgBEECdCIDIAJqIAZBAnRqIAMgCWogBUECdGogBxDpAgsgAUEBRwRAIAkQlAQLIAAgAhDzASAAIAgoAggQ8gEgACAEIAZqIAdqIgAQuAEgCEEANgIMIAIgAEECdGogCEEMahDSASAIQRBqJAAPCxC/AQALjQEBAn8jAEEQayIDJAAgAUH3////B00EQAJAIAEQpQUEQCAAIAEQygEgACEEDAELIANBCGogARDTA0EBahDSAyADKAIMGiAAIAMoAggiBBDzASAAIAMoAgwQ8gEgACABELgBCyAEIAEgAhD4CiADQQA6AAcgASAEaiADQQdqEMkBIANBEGokAA8LEL8BAAs9AQF/IwBBEGsiAyQAIAMgAjoADwNAIAEEQCAAIAMtAA86AAAgAUEBayEBIABBAWohAAwBCwsgA0EQaiQAC4sCAQN/IwBBEGsiCCQAIAIgAUF/c0H3////B2pNBEAgABBAIQkgCEEEaiIKIAFB8////wNJBH8gCCABQQF0NgIMIAggASACajYCBCAKIAhBDGoQ1AMoAgAQ0wNBAWoFQff///8HCxDSAyAIKAIEIQIgCCgCCBogBARAIAIgCSAEEKYCCyAGBEAgAiAEaiAHIAYQpgILIAMgBCAFaiIKayEHIAMgCkcEQCACIARqIAZqIAQgCWogBWogBxCmAgsgAUEKRwRAIAkQpgULIAAgAhDzASAAIAgoAggQ8gEgACAEIAZqIAdqIgAQuAEgCEEAOgAMIAAgAmogCEEMahDJASAIQRBqJAAPCxC/AQALDQAgAEHU8gc2AgAgAAsWACAAIAEgAkKAgICAgICAgIB/ELQFCwkAIAAQZTYCAAsjAQJ/IAAhAQNAIAEiAkEEaiEBIAIoAgANAAsgAiAAa0ECdQsPACAAIAAoAgBBBGs2AgALCgAgACgCAEEEawstAQF/IwBBEGsiAiQAAkAgACABRgRAIABBADoAeAwBCyABEJQECyACQRBqJAALEwAgABCVBSgCACAAKAIAa0ECdQssAQF/IAAoAgQhAgNAIAEgAkcEQCAAEJADGiACQQRrIQIMAQsLIAAgATYCBAsJACAAQQA2AgALSQEBfyMAQRBrIgMkAAJAAkAgAkEeSw0AIAEtAHhBAXENACABQQE6AHgMAQsgAhCOCyEBCyADQRBqJAAgACACNgIEIAAgATYCAAtAAQF/IwBBEGsiASQAIAAQkAMaIAFB/////wM2AgwgAUH/////BzYCCCABQQxqIAFBCGoQiAwoAgAgAUEQaiQACwsAIABBADYCACAACzcBAX8jAEEQayIDJAAgAyABEIsLNgIMIAMgAhCLCzYCCCAAIANBDGogA0EIahCnBSADQRBqJAALJwEBfyAAKAIAIQEjAEEQayIAJAAgACABNgIMIAAoAgwgAEEQaiQACwcAIAAQiAsLnAEBA38gASgCECgCgAEiAyADKAIEQQFyNgIEIAAgARBvIQMDQCADBEAgASADQVBBACADKAIAQQNxIgVBAkcbaigCKCIERgRAIANBMEEAIAVBA0cbaigCKCEECyAEKAIQKAKAAS0ABEEBcUUEQCACIANBARDIAhogBCgCECgCgAEgATYCECAAIAQgAhCKCwsgACADIAEQdCEDDAELCwsHACAAEJEDC04BAX8jAEEQayIDJAAgAyABNgIIIAMgADYCDCADIAI2AgRBACEBIANBBGoiACADQQxqEKQFRQRAIAAgA0EIahCkBSEBCyADQRBqJAAgAQs0AQF/IwBBEGsiAyQAIAAQIhogACACEJMDIANBADoADyABIAJqIANBD2oQyQEgA0EQaiQACxwAIABB/////wNLBEAQjgEACyAAQQJ0QQQQ+gsLMwEBfyAABEAgACgCBCIBBEAgACgCACABQQRBHxCUAQsPC0GDzwFB+7oBQcgAQYsaEAAACwkAIAAQiQcQFwsUACAAIAFB66QBQcgAQfu6ARCFAgsVACAAQcDBBzYCACAAQRBqEC8aIAALFQAgAEGYwQc2AgAgAEEMahAvGiAAC8gDAQR/AkAgAyACIgBrQQNIQQFyDQAgAC0AAEHvAUcNACAALQABQbsBRw0AIABBA0EAIAAtAAJBvwFGG2ohAAsDQAJAIAQgB00gACADT3INACAALAAAIgFB/wFxIQUCf0EBIAFBAE4NABogAUFCSQ0BIAFBX00EQCADIABrQQJIDQIgAC0AAUHAAXFBgAFHDQJBAgwBCyABQW9NBEAgAyAAa0EDSA0CIAAtAAIgAC0AASEBAkACQCAFQe0BRwRAIAVB4AFHDQEgAUHgAXFBoAFGDQIMBQsgAUHgAXFBgAFHDQQMAQsgAUHAAXFBgAFHDQMLQcABcUGAAUcNAkEDDAELIAMgAGtBBEggAUF0S3INASAALQADIQYgAC0AAiEIIAAtAAEhAQJAAkACQAJAIAVB8AFrDgUAAgICAQILIAFB8ABqQf8BcUEwTw0EDAILIAFB8AFxQYABRw0DDAELIAFBwAFxQYABRw0CCyAIQcABcUGAAUcgBkHAAXFBgAFHciAGQT9xIAhBBnRBwB9xIAVBEnRBgIDwAHEgAUE/cUEMdHJyckH//8MAS3INAUEECyEBIAdBAWohByAAIAFqIQAMAQsLIAAgAmsL4gQBBH8jAEEQayIAJAAgACACNgIMIAAgBTYCCAJ/IAAgAjYCDCAAIAU2AggCQAJAA0ACQCAAKAIMIgEgA08NACAAKAIIIgogBk8NACABLAAAIgVB/wFxIQICfyAFQQBOBEAgAkH//8MASw0FQQEMAQsgBUFCSQ0EIAVBX00EQEEBIAMgAWtBAkgNBhpBAiEFIAEtAAEiCEHAAXFBgAFHDQQgCEE/cSACQQZ0QcAPcXIhAkECDAELIAVBb00EQEEBIQUgAyABayIJQQJIDQQgAS0AASEIAkACQCACQe0BRwRAIAJB4AFHDQEgCEHgAXFBoAFGDQIMCAsgCEHgAXFBgAFGDQEMBwsgCEHAAXFBgAFHDQYLIAlBAkYNBCABLQACIgVBwAFxQYABRw0FIAVBP3EgAkEMdEGA4ANxIAhBP3FBBnRyciECQQMMAQsgBUF0Sw0EQQEhBSADIAFrIglBAkgNAyABLQABIQgCQAJAAkACQCACQfABaw4FAAICAgECCyAIQfAAakH/AXFBME8NBwwCCyAIQfABcUGAAUcNBgwBCyAIQcABcUGAAUcNBQsgCUECRg0DIAEtAAIiC0HAAXFBgAFHDQQgCUEDRg0DIAEtAAMiCUHAAXFBgAFHDQRBAiEFIAlBP3EgC0EGdEHAH3EgAkESdEGAgPAAcSAIQT9xQQx0cnJyIgJB///DAEsNA0EECyEFIAogAjYCACAAIAEgBWo2AgwgACAAKAIIQQRqNgIIDAELCyABIANJIQULIAUMAQtBAgsgBCAAKAIMNgIAIAcgACgCCDYCACAAQRBqJAALigQAIwBBEGsiACQAIAAgAjYCDCAAIAU2AggCfyAAIAI2AgwgACAFNgIIIAAoAgwhAQJAA0ACQCABIANPBEBBACECDAELQQIhAiABKAIAIgFB///DAEsgAUGAcHFBgLADRnINAAJAIAFB/wBNBEBBASECIAYgACgCCCIFa0EATA0CIAAgBUEBajYCCCAFIAE6AAAMAQsgAUH/D00EQCAGIAAoAggiAmtBAkgNBCAAIAJBAWo2AgggAiABQQZ2QcABcjoAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAADAELIAYgACgCCCICayEFIAFB//8DTQRAIAVBA0gNBCAAIAJBAWo2AgggAiABQQx2QeABcjoAACAAIAAoAggiAkEBajYCCCACIAFBBnZBP3FBgAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUE/cUGAAXI6AAAMAQsgBUEESA0DIAAgAkEBajYCCCACIAFBEnZB8AFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUEMdkE/cUGAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQQZ2QT9xQYABcjoAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAACyAAIAAoAgxBBGoiATYCDAwBCwsgAgwBC0EBCyAEIAAoAgw2AgAgByAAKAIINgIAIABBEGokAAvaAwEEfwJAIAMgAiIAa0EDSEEBcg0AIAAtAABB7wFHDQAgAC0AAUG7AUcNACAAQQNBACAALQACQb8BRhtqIQALA0ACQCAEIAZNIAAgA09yDQACfyAAQQFqIAAtAAAiAcBBAE4NABogAUHCAUkNASABQd8BTQRAIAMgAGtBAkgNAiAALQABQcABcUGAAUcNAiAAQQJqDAELIAFB7wFNBEAgAyAAa0EDSA0CIAAtAAIgAC0AASEFAkACQCABQe0BRwRAIAFB4AFHDQEgBUHgAXFBoAFGDQIMBQsgBUHgAXFBgAFHDQQMAQsgBUHAAXFBgAFHDQMLQcABcUGAAUcNAiAAQQNqDAELIAMgAGtBBEggAUH0AUtyIAQgBmtBAklyDQEgAC0AAyEHIAAtAAIhCCAALQABIQUCQAJAAkACQCABQfABaw4FAAICAgECCyAFQfAAakH/AXFBME8NBAwCCyAFQfABcUGAAUcNAwwBCyAFQcABcUGAAUcNAgsgCEHAAXFBgAFHIAdBwAFxQYABR3IgB0E/cSAIQQZ0QcAfcSABQRJ0QYCA8ABxIAVBP3FBDHRycnJB///DAEtyDQEgBkEBaiEGIABBBGoLIQAgBkEBaiEGDAELCyAAIAJrC7cFAQR/IwBBEGsiACQAIAAgAjYCDCAAIAU2AggCfyAAIAI2AgwgACAFNgIIAkACQANAAkAgACgCDCIBIANPDQAgACgCCCIFIAZPDQBBAiEJIAACfyABLQAAIgLAQQBOBEAgBSACOwEAIAFBAWoMAQsgAkHCAUkNBCACQd8BTQRAQQEgAyABa0ECSA0GGiABLQABIghBwAFxQYABRw0EIAUgCEE/cSACQQZ0QcAPcXI7AQAgAUECagwBCyACQe8BTQRAQQEhCSADIAFrIgpBAkgNBCABLQABIQgCQAJAIAJB7QFHBEAgAkHgAUcNASAIQeABcUGgAUcNCAwCCyAIQeABcUGAAUcNBwwBCyAIQcABcUGAAUcNBgsgCkECRg0EIAEtAAIiCUHAAXFBgAFHDQUgBSAJQT9xIAhBP3FBBnQgAkEMdHJyOwEAIAFBA2oMAQsgAkH0AUsNBEEBIQkgAyABayIKQQJIDQMgAS0AASEIAkACQAJAAkAgAkHwAWsOBQACAgIBAgsgCEHwAGpB/wFxQTBPDQcMAgsgCEHwAXFBgAFHDQYMAQsgCEHAAXFBgAFHDQULIApBAkYNAyABLQACIgtBwAFxQYABRw0EIApBA0YNAyABLQADIgFBwAFxQYABRw0EIAYgBWtBA0gNA0ECIQkgAUE/cSIBIAtBBnQiCkHAH3EgCEEMdEGA4A9xIAJBB3EiAkESdHJyckH//8MASw0DIAUgC0EEdkEDcSAIQQJ0IglBwAFxIAJBCHRyIAlBPHFyckHA/wBqQYCwA3I7AQAgACAFQQJqNgIIIAUgASAKQcAHcXJBgLgDcjsBAiAAKAIMQQRqCzYCDCAAIAAoAghBAmo2AggMAQsLIAEgA0khCQsgCQwBC0ECCyAEIAAoAgw2AgAgByAAKAIINgIAIABBEGokAAsNACAAIAFBsbEBEO4KC+MFAQF/IwBBEGsiACQAIAAgAjYCDCAAIAU2AggCfyAAIAI2AgwgACAFNgIIIAAoAgwhAgJAAkADQCACIANPBEBBACEFDAILQQIhBQJAAkAgAi8BACIBQf8ATQRAQQEhBSAGIAAoAggiAmtBAEwNBCAAIAJBAWo2AgggAiABOgAADAELIAFB/w9NBEAgBiAAKAIIIgJrQQJIDQUgACACQQFqNgIIIAIgAUEGdkHAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAwBCyABQf+vA00EQCAGIAAoAggiAmtBA0gNBSAAIAJBAWo2AgggAiABQQx2QeABcjoAACAAIAAoAggiAkEBajYCCCACIAFBBnZBP3FBgAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUE/cUGAAXI6AAAMAQsgAUH/twNNBEBBASEFIAMgAmtBA0gNBCACLwECIghBgPgDcUGAuANHDQIgBiAAKAIIa0EESA0EIAhB/wdxIAFBCnRBgPgDcSABQcAHcSIFQQp0cnJB//8/Sw0CIAAgAkECajYCDCAAIAAoAggiAkEBajYCCCACIAVBBnZBAWoiAkECdkHwAXI6AAAgACAAKAIIIgVBAWo2AgggBSACQQR0QTBxIAFBAnZBD3FyQYABcjoAACAAIAAoAggiAkEBajYCCCACIAhBBnZBD3EgAUEEdEEwcXJBgAFyOgAAIAAgACgCCCIBQQFqNgIIIAEgCEE/cUGAAXI6AAAMAQsgAUGAwANJDQMgBiAAKAIIIgJrQQNIDQQgACACQQFqNgIIIAIgAUEMdkHgAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQQZ2Qb8BcToAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAACyAAIAAoAgxBAmoiAjYCDAwBCwtBAgwCCyAFDAELQQELIAQgACgCDDYCACAHIAAoAgg2AgAgAEEQaiQACz4BAn8jAEEQayIBJAAgASAANgIMIAFBCGogAUEMahCIAkEEQQFBlJYLKAIAKAIAGyECEIcCIAFBEGokACACCzoBAX8jAEEQayIFJAAgBSAENgIMIAVBCGogBUEMahCIAiAAIAEgAiADELMFIQAQhwIgBUEQaiQAIAALEgAgBCACNgIAIAcgBTYCAEEDC5gCAQJ/IwBBIGsiAiQAIAJCADcDGCACQgA3AxAgASABKAIMIgFBAWo2AgwgAiABNgIAIAJBEGoiASACEJkLIAEQISABEDhPBEAgAUEBENEBCyACQRBqIgMQISEBAkAgAxAlBEAgASADakEAOgAAIAIgAi0AH0EBajoAHyADECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgAigCECABakEAOgAAIAIgAigCFEEBajYCFAsCQCACQRBqECUEQCACQQA6AB8MAQsgAkEANgIUCyACQRBqIgMQJSEBIAAgAyACKAIQIAEbQQEQkAEhACACLQAfQf8BRgRAIAIoAhAQFwsgAEHsJUGYAkEBEC4aIAAQtgsgAkEgaiQACyoBAX8gAEGsuAc2AgACQCAAKAIIIgFFDQAgAC0ADEEBRw0AIAEQFwsgAAsEACABCzkBAn8gACgCLCEBA0AgAQRAIAEoAgQgARChCyEBDAEFIAAEQCAAQQA2AiQgACgCIBAXIAAQFwsLCwsnAQF/IAAoAgAoAgAoAgBB1LALQdSwCygCAEEBaiIANgIAIAA2AgQLywoBCH9B0LALLQAARQRAIwBBEGsiBSQAQciwCy0AAEUEQCMAQRBrIgYkACAGQQE2AgxBqK8LIAYoAgwQbSIBQZi4BzYCACMAQRBrIgMkACABQQhqIgJCADcCACADQQA2AgwgAkEIahCGC0EAOgB8IANBBGogAhCeAigCABogA0EAOgAKIwBBEGsiBCQAIAIQhQtBHkkEQBC/AQALIARBCGogAhCQA0EeEIQLIAIgBCgCCCIHNgIEIAIgBzYCACAEKAIMIQggAhCVBSAHIAhBAnRqNgIAIARBEGokACACQR4QqgsgA0EBOgAKIANBEGokACABQZABakGG2AEQmgQgAhDAAhogAhCpC0G8ugtBARBtQbTMBzYCACABQby6C0GArgsQbBBwQcS6C0EBEG1B1MwHNgIAIAFBxLoLQYiuCxBsEHBBzLoLQQEQbSICQQA6AAwgAkEANgIIIAJBrLgHNgIAIAJB4LgHNgIIIAFBzLoLQeCwCxBsEHBB3LoLQQEQbUGYxAc2AgAgAUHcugtB2LALEGwQcEHkugtBARBtQazFBzYCACABQeS6C0HosAsQbBBwQey6C0EBEG0iAkHowAc2AgAgAhBlNgIIIAFB7LoLQfCwCxBsEHBB+LoLQQEQbUHAxgc2AgAgAUH4ugtB+LALEGwQcEGAuwtBARBtQajIBzYCACABQYC7C0GIsQsQbBBwQYi7C0EBEG1BtMcHNgIAIAFBiLsLQYCxCxBsEHBBkLsLQQEQbUGcyQc2AgAgAUGQuwtBkLELEGwQcEGYuwtBARBtIgJBrtgAOwEIIAJBmMEHNgIAIAJBDGoQTBogAUGYuwtBmLELEGwQcEGwuwtBARBtIgJCroCAgMAFNwIIIAJBwMEHNgIAIAJBEGoQTBogAUGwuwtBoLELEGwQcEHMuwtBARBtQfTMBzYCACABQcy7C0GQrgsQbBBwQdS7C0EBEG1B6M4HNgIAIAFB1LsLQZiuCxBsEHBB3LsLQQEQbUG80Ac2AgAgAUHcuwtBoK4LEGwQcEHkuwtBARBtQaTSBzYCACABQeS7C0GorgsQbBBwQey7C0EBEG1B/NkHNgIAIAFB7LsLQdCuCxBsEHBB9LsLQQEQbUGQ2wc2AgAgAUH0uwtB2K4LEGwQcEH8uwtBARBtQYTcBzYCACABQfy7C0HgrgsQbBBwQYS8C0EBEG1B+NwHNgIAIAFBhLwLQeiuCxBsEHBBjLwLQQEQbUHs3Qc2AgAgAUGMvAtB8K4LEGwQcEGUvAtBARBtQZDfBzYCACABQZS8C0H4rgsQbBBwQZy8C0EBEG1BtOAHNgIAIAFBnLwLQYCvCxBsEHBBpLwLQQEQbUHY4Qc2AgAgAUGkvAtBiK8LEGwQcEGsvAtBARBtIgJBwOsHNgIIIAJB7NMHNgIAIAJBnNQHNgIIIAFBrLwLQbCuCxBsEHBBuLwLQQEQbSICQeTrBzYCCCACQfTVBzYCACACQaTWBzYCCCABQbi8C0G4rgsQbBBwQcS8C0EBEG0iAkEIahD8CiACQeDXBzYCACABQcS8C0HArgsQbBBwQdC8C0EBEG0iAkEIahD8CiACQfzYBzYCACABQdC8C0HIrgsQbBBwQdy8C0EBEG1B/OIHNgIAIAFB3LwLQZCvCxBsEHBB5LwLQQEQbUH04wc2AgAgAUHkvAtBmK8LEGwQcCAGQRBqJAAgBUGorws2AghBxLALIAUoAggQngIaQciwC0EBOgAACyAFQRBqJABBzLALQcSwCxClC0HQsAtBAToAAAsgAEHMsAsoAgAiADYCACAAEKQLCxEAIABBqK8LRwRAIAAQqAsLCxMAIAAgASgCACIANgIAIAAQpAsLtwYBBn8jAEEQayIJJAAgAiACKAIIIgVBAWo2AgggASgCECgCgAEgBTYCFCABKAIQKAKAASAFNgIYIAAgARBvIQgCQANAIAhFBEACQCADRQ0AIAEoAhAoAoABKAIMDQAgACACEJ4LIgAgARCLByACIAAQqwsLIAlBEGokAA8LAkAgASAIQVBBACAIKAIAQQNxIgVBAkcbaigCKCIHRgRAIAhBMEEAIAVBA0cbaigCKCEHIAgoAhAoAnwiBSgCAA0BIAVBfzYCAAwBCyAIKAIQKAJ8IgUoAgANACAFQQE2AgALAkACQCAHKAIQKAKAASIGKAIUIgVFBEAgBiABNgIIIARFDQICQCAEKAIEIgYgBCgCCEcEQCAEKAIAIQUMAQsCQCAJIAZBAXRBASAGGyIGQf////8DSwR/QcQABSAEKAIAIAZBAnQQPSIFDQFBMAsQowE2AgBB6PoGKAIAQbv0AyAJEB0aECYACyAFIAQoAggiCkECdGpBACAGIAprQQJ0EDMaIAQgBjYCCCAEIAU2AgAgBCgCBCEGCyAFIAZBAnRqIAg2AgAgBCAGQQFqNgIEQQAhBSAAIAcgAkEAIAQQpgsgASgCECgCgAEiBiAGKAIYIgYgBygCECgCgAEoAhgiCiAGIApIGzYCGCAHKAIQKAKAASgCGCABKAIQKAKAASgCFEgNAQNAIAQoAgQiBkUNBSAEKAIAIAZBAnRqQQRrKAIAIQcgBCAGQQFrNgIEIAdBUEEwIAcoAhAoAnwoAgBBAUYiBhtBACAHKAIAQQNxQQJBAyAGG0cbaigCKCIGKAIQKAKAASgCDEUEQCAFRQRAIAAgAhCeCyEFCyAFIAYQiwcLIAcgCEcNAAsgBUUNAQJAIAEoAhAoAoABKAIMDQAgBSgCCBA1QQJIDQAgBSABEIsHCwJAIANFDQAgASgCECgCgAEoAgwgBUcNACACIAUQqwsMAgsgAiAFELELDAELIAcgASgCECgCgAEiBigCCEYNACAGIAYoAhgiByAFIAUgB0obNgIYCyAAIAggARB0IQgMAQsLQYPPAUH9vAFBKUG8pgEQAAALQfmPA0H9vAFBKUH59AAQAAALnQEBBH8gAEGYuAc2AgAgAEEIaiEBA0AgARDAAiACSwRAIAEgAhCSAygCAARAIAEgAhCSAygCABCZBQsgAkEBaiECDAELCyAAQZABahAvGiMAQRBrIgIkACACQQxqIAEQngIiASgCACIDKAIABEAgAxCpCyABKAIAGiABKAIAEJADIAEoAgAiASgCACABEIELGhCACwsgAkEQaiQAIAALDwAgACAAKAIEQQFqNgIECwwAIAAgACgCABCCCwt7AQN/IwBBEGsiBCQAIARBBGoiAiAANgIAIAIgACgCBCIDNgIEIAIgAyABQQJ0ajYCCCACIgMoAgQhASACKAIIIQIDQCABIAJGBEAgAygCACADKAIENgIEIARBEGokAAUgABCQAxogARCDCyADIAFBBGoiATYCBAwBCwsLIQEBfyABIAAgACgCACICGyACIAEgAhs2AgQgACABNgIACyAAIABB6MAHNgIAIAAoAggQZUcEQCAAKAIIEO8LCyAACwQAQX8LpgEBA38jAEEQayIEJAAjAEEgayIDJAAgA0EYaiAAIAEQhwsgA0EQaiADKAIYIAMoAhwgAhCDDCADKAIQIQUjAEEQayIBJAAgASAANgIMIAFBDGoiACAFIAAQiQtrQQJ1EI0HIQAgAUEQaiQAIAMgADYCDCADIAIgAygCFBCYAzYCCCAEQQhqIANBDGogA0EIahD0ASADQSBqJAAgBCgCDCAEQRBqJAALgQYBCn8jAEEQayITJAAgAiAANgIAQQRBACAHGyEVIANBgARxIRYDQCAUQQRGBEAgDRAiQQFLBEAgEyANENQBNgIMIAIgE0EMakEBEI0HIA0Q5AIgAigCABCuCzYCAAsgA0GwAXEiA0EQRwRAIAEgA0EgRgR/IAIoAgAFIAALNgIACyATQRBqJAAFAkACQAJAAkACQAJAIAggFGotAAAOBQABAwIEBQsgASACKAIANgIADAQLIAEgAigCADYCACAGQSAQyAEhByACIAIoAgAiD0EEajYCACAPIAc2AgAMAwsgDRDvAQ0CIA1BABCgBSgCACEHIAIgAigCACIPQQRqNgIAIA8gBzYCAAwCCyAMEO8BIBZFcg0BIAIgDBDUASAMEOQCIAIoAgAQrgs2AgAMAQsgAigCACAEIBVqIgQhBwNAAkAgBSAHTQ0AIAZBwAAgBygCABD1AUUNACAHQQRqIQcMAQsLIA5BAEoEQCACKAIAIQ8gDiEQA0AgEEUgBCAHT3JFBEAgEEEBayEQIAdBBGsiBygCACERIAIgD0EEaiISNgIAIA8gETYCACASIQ8MAQsLAkAgEEUEQEEAIREMAQsgBkEwEMgBIREgAigCACEPCwNAIA9BBGohEiAQQQBKBEAgDyARNgIAIBBBAWshECASIQ8MAQsLIAIgEjYCACAPIAk2AgALAkAgBCAHRgRAIAZBMBDIASEPIAIgAigCACIQQQRqIgc2AgAgECAPNgIADAELIAsQ7wEEf0F/BSALQQAQPCwAAAshEUEAIQ9BACESA0AgBCAHRwRAAkAgDyARRwRAIA8hEAwBCyACIAIoAgAiEEEEajYCACAQIAo2AgBBACEQIAsQIiASQQFqIhJNBEAgDyERDAELIAsgEhA8LQAAQf8ARgRAQX8hEQwBCyALIBIQPCwAACERCyAHQQRrIgcoAgAhDyACIAIoAgAiGEEEajYCACAYIA82AgAgEEEBaiEPDAELCyACKAIAIQcLIAcQnQULIBRBAWohFAwBCwsL2QIBAX8jAEEQayIKJAAgCQJ/IAAEQCACELcLIQACQCABBEAgCkEEaiIBIAAQ4gIgAyAKKAIENgAAIAEgABDhAgwBCyAKQQRqIgEgABCaBSADIAooAgQ2AAAgASAAEPABCyAIIAEQnwIgARB1GiAEIAAQ7gE2AgAgBSAAEL4BNgIAIApBBGoiASAAEL0BIAYgARCwASABEC8aIAEgABDxASAHIAEQnwIgARB1GiAAEOACDAELIAIQtQshAAJAIAEEQCAKQQRqIgEgABDiAiADIAooAgQ2AAAgASAAEOECDAELIApBBGoiASAAEJoFIAMgCigCBDYAACABIAAQ8AELIAggARCfAiABEHUaIAQgABDuATYCACAFIAAQvgE2AgAgCkEEaiIBIAAQvQEgBiABELABIAEQLxogASAAEPEBIAcgARCfAiABEHUaIAAQ4AILNgIAIApBEGokAAsmAQF/IAFBADYCBCAAKAIEIgJBBGogACACGyABNgIAIAAgATYCBAujAQEDfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAAgARCHCyADQRBqIAMoAhggAygCHCACEIUMIAMoAhAhBSMAQRBrIgEkACABIAA2AgwgAUEMaiIAIAUgABCJC2sQjwchACABQRBqJAAgAyAANgIMIAMgAiADKAIUEJgDNgIIIARBCGogA0EMaiADQQhqEPQBIANBIGokACAEKAIMIARBEGokAAvWBQEKfyMAQRBrIhQkACACIAA2AgAgA0GABHEhFgNAIBVBBEYEQCANECJBAUsEQCAUIA0Q1AE2AgwgAiAUQQxqQQEQjwcgDRDmAiACKAIAELILNgIACyADQbABcSIDQRBHBEAgASADQSBGBH8gAigCAAUgAAs2AgALIBRBEGokAAUCQAJAAkACQAJAAkAgCCAVai0AAA4FAAEDAgQFCyABIAIoAgA2AgAMBAsgASACKAIANgIAIAZBIBCZASEPIAIgAigCACIQQQFqNgIAIBAgDzoAAAwDCyANEO8BDQIgDUEAEDwtAAAhDyACIAIoAgAiEEEBajYCACAQIA86AAAMAgsgDBDvASAWRXINASACIAwQ1AEgDBDmAiACKAIAELILNgIADAELIAIoAgAgBCAHaiIEIREDQAJAIAUgEU0NACAGQcAAIBEsAAAQ9gFFDQAgEUEBaiERDAELCyAOIg9BAEoEQANAIA9FIAQgEU9yRQRAIA9BAWshDyARQQFrIhEtAAAhECACIAIoAgAiEkEBajYCACASIBA6AAAMAQsLIA8EfyAGQTAQmQEFQQALIRIDQCACIAIoAgAiEEEBajYCACAPQQBKBEAgECASOgAAIA9BAWshDwwBCwsgECAJOgAACwJAIAQg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BQRAIAZBDWogBkEOahDICwsgAiABIAEgAigCABD8CyAGQQxqIAMgACgCABDxCyABajYCACAGQRBqJAALQgAgASACIAMgBEEEEKACIQEgAy0AAEEEcUUEQCAAIAFB0A9qIAFB7A5qIAEgAUHkAEkbIAFBxQBIG0HsDms2AgALC0AAIAIgAyAAQQhqIAAoAggoAgQRAgAiACAAQaACaiAFIARBABChBSAAayIAQZ8CTARAIAEgAEEMbUEMbzYCAAsLQAAgAiADIABBCGogACgCCCgCABECACIAIABBqAFqIAUgBEEAEKEFIABrIgBBpwFMBEAgASAAQQxtQQdvNgIACws1AQF/IAAoAhAiAS0AtQFBB0cEQCAAEK0BDwsgASgC6AEoAhAoAowCIAEoAvQBQQJ0aigCAAtCACABIAIgAyAEQQQQoQIhASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBECACIAIABBoAJqIAUgBEEAEKMFIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQIAIgAgAEGoAWogBSAEQQAQowUgAGsiAEGnAUwEQCABIABBDG1BB282AgALCwQAQQIL3gEBBX8jAEEQayIHJAAjAEEQayIDJAAgACEEAkAgAUH3////A00EQAJAIAEQlgUEQCAEIAEQygEMAQsgA0EIaiABEMcDQQFqEMYDIAMoAgwaIAQgAygCCCIAEPMBIAQgAygCDBDyASAEIAEQuAELIwBBEGsiBSQAIAUgAjYCDCAAIQIgASEGA0AgBgRAIAIgBSgCDDYCACAGQQFrIQYgAkEEaiECDAELCyAFQRBqJAAgA0EANgIEIAAgAUECdGogA0EEahDSASADQRBqJAAMAQsQvwEACyAHQRBqJAAgBAvABQEOfyMAQRBrIgskACAGEMABIQogC0EEaiAGEM4DIg4QvQEgBSADNgIAAkACQCAAIgctAAAiBkEraw4DAAEAAQsgCiAGwBDIASEGIAUgBSgCACIIQQRqNgIAIAggBjYCACAAQQFqIQcLAkACQCACIAciBmtBAUwNACAGLQAAQTBHDQAgBi0AAUEgckH4AEcNACAKQTAQyAEhCCAFIAUoAgAi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IAAgAxsLDgBBACAAIABBfxDEAhsLsAEBA38CQCABIAIQ/QshBCMAQRBrIgMkACAEQff///8HTQRAAkAgBBClBQRAIAAgBBDKASAAIQUMAQsgA0EIaiAEENMDQQFqENIDIAMoAgwaIAAgAygCCCIFEPMBIAAgAygCDBDyASAAIAQQuAELA0AgASACRwRAIAUgARDJASAFQQFqIQUgAUEBaiEBDAELCyADQQA6AAcgBSADQQdqEMkBIANBEGokAAwBCxC/AQALCw8AIAAgACgCGCABajYCGAsXACAAIAI2AhwgACABNgIUIAAgATYCGAuHAQEDfwJAIABFIAFFcg0AIABBMEEAIAAoAgBBA3EiA0EDRxtqKAIoIAFBMEEAIAEoAgBBA3EiBEEDRxtqKAIoRw0AIABBUEEAIANBAkcbaigCKCABQVBBACAEQQJHG2ooAihHDQAgACgCECgCYCABKAIQKAJgRw0AIAAgARCoBEEARyECCyACC1cBAn8CQCAAKAIAIgJFDQACfyACKAIYIgMgAigCHEYEQCACIAEgAigCACgCNBEAAAwBCyACIANBBGo2AhggAyABNgIAIAELQX8QxAJFDQAgAEEANgIACwsxAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEEajYCDCABKAIACycBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASgCAAurBAEIfyMAQeAAayICJAAgAkEANgJYIAJCADcDUCACQQA2AkggAkIANwNAQYiOCyAAQQJBk7EBQQAQHzYCAEGMjgsgAEECQb7uAEEAEB8iATYCACABQYiOCygCAHIEQCACQSRqIQYgAkE0aiEHIAAQGiEEA0AgBARAIAAgBBBvIQEDQCABBEACQCABQVBBACABKAIAQQNxIgNBAkcbaigCKCIFIAEgAUEwaiIIIANBA0YbKAIoRg0AAkACQCAEIAVHDQBBiI4LKAIAIgVFDQAgASAFED4iAy0AAA0BIAEoAgBBA3EhAwsgASAIIANBA0YbKAIoIARHDQFBjI4LKAIAIgNFDQEgASADED4iAy0AAEUNASACQUBrIAEgAxCADAwBCyACQdAAaiABIAMQgAwLIAAgASAEEHQhAQwBBUEAIQEDQCACKAJUIAFNBEAgAkHQAGoQowdBACEBA0AgAigCRCABTQRAIAJBQGsQowcgACAEEBshBAwHCyACQUBrIgMgARChBygCCEECTwRAIAJBIGogAyABEKAHIAIgBigCCDYCGCACIAYpAgA3AxAgBCACQRBqEIYMCyABQQFqIQEMAAsACyACQdAAaiIDIAEQoQcoAghBAk8EQCACQTBqIAMgARCgByACIAcoAgg2AgggAiAHKQIANwMAIAQgAhCGDAsgAUEBaiEBDAALAAsACwALCyACQdAAahD7CyACQUBrEPsLCyACQeAAaiQACycBAX8CQCAAKAIAIgJFDQAgAiABEJcMQX8QxAJFDQAgAEEANgIACwtTAQN/AkBBfyAAKAJMEMQCRQRAIAAoAkwhAAwBCyAAIwBBEGsiASQAIAFBDGoiAiAAEEsgAhDBAUEgEJkBIQAgAhBIIAFBEGokACAANgJMCyAAwAsaACAAIAEgASgCAEEMaygCAGooAhg2AgAgAAsLACAAQaCuCxClAgsJACAAEKUHEBcLPQEBfyAAKAIYIgIgACgCHEYEQCAAIAEQmgMgACgCACgCNBEAAA8LIAAgAkEBajYCGCACIAE6AAAgARCaAws0AQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEBajYCDCABLAAAEJoDCyoBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASwAABCaAwsPACAAIAAoAgAoAhgRAgALCAAgACgCEEULBABBfwsIACAAEJ0HGgu+DwIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQogAkL///////8/gyELIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQgCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAIQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg1CgICAgICAwP//AFQgDUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDUKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASANhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyANQv///////z9YBEAgBUHAAmogASALIAEgCyALUCIGG3kgBkEGdK18pyIGQQ9rELEBQRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQsQEgBiAHakEQayEGIAUpA7gCIQogBSkDsAIhAwsgBUGgAmogCkKAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQmgEgBUGQAmpCACAFKQOoAn1CACAEQgAQmgEgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQmgEgBUHwAWogBEIAQgAgBSkDiAJ9QgAQmgEgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQmgEgBUHQAWogBEIAQgAgBSkD6AF9QgAQmgEgBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQmgEgBUGwAWogBEIAQgAgBSkDyAF9QgAQmgEgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQmgEgBUGQAWogA0IPhkIAIAJCABCaASAFQfAAaiACQgBCACAFKQOoASAFKQOgASINIAUpA5gBfCIEIA1UrXwgBEIBVq18fUIAEJoBIAVBgAFqQgEgBH1CACACQgAQmgEgBiAJIAhraiEGAn8gBSkDcCITQgGGIg4gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgC0KAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiINQiCIIgogECAUVq0gDiAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig4gEVStIA4gDiATQv////8PgyITIAFCP4giFyALQgGGhEL/////D4MiC358Ig5WrXwgBCAQfnwgBCATfiIRIAsgEH58Ig8gEVStQiCGIA9CIIiEfCAOIA4gD0IghnwiDlatfCAOIA4gFEL/////D4MiFCALfiIRIAIgCn58Ig8gEVStIA8gDyATIA1C/v///w+DIhF+fCIPVq18fCIOVq18IA4gBCAUfiIYIBAgEX58IgQgAiALfnwiCyAKIBN+fCIQQiCIIAsgEFatIAQgGFStIAQgC1atfHxCIIaEfCIEIA5UrXwgBCAPIAIgEX4iAiAKIBR+fCIKQiCIIAIgClatQiCGhHwiAiAPVK0gAiAQQiCGfCACVK18fCICIARUrXwiBEL/////////AFgEQCAWIBeEIRUgBUHQAGogAiAEIAMgEhCaASABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhCaASABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEJsDIAVBMGogDSAVIAZB8ABqELEBIAVBIGogAyASIAUpA0AiAiAFKQNIIgoQmgEgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIg1UrX0hASAEIA19CyEEIAVBEGogAyASQgNCABCaASAFIAMgEkIFQgAQmgEgCiACIAIgAyAEIAJCAYMiBHwiA1QgASADIARUrXwiASASViABIBJRG618IgJWrXwiBCACIAIgBEKAgICAgIDA//8AVCADIAUpAxBWIAEgBSkDGCIEViABIARRG3GtfCICVq18IgQgAiAEQoCAgICAgMD//wBUIAMgBSkDAFYgASAFKQMIIgNWIAEgA1Ebca18IgEgAlStfCAMhCEMCyAAIAE3AwAgACAMNwMIIAVB0AJqJAALwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCAB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aiQAIANBkAFqJAAgDgv7AQEFfyABEBohAwNAIAMEQCABIAMQGyEEIAMoAhAtALUBBEAgASADELQBIAQhAwwCBUEBIQIDQAJAIAAoAhAiBSgCtAEiBiACSgR/IAUoArgBIAJBAnRqKAIAIAMQqwFFDQEgACgCECgCtAEFIAYLIAJKBEAgASADELQBCyADKAIQQQA2AugBIAQhAwwECyACQQFqIQIMAAsACwALCyABEBohAANAIAAEQCABEF4gABApIQIDQCACBEAgASACQVBBACACKAIAQQNxQQJHG2ooAigQqwEEQCABIAJBARDIAhoLIAEQXiACECwhAgwBCwsgASAAEBshAAwBCwsLQwACQCAARQ0AAkACQAJAAkAgAUECag4GAAECAgQDBAsgACACPAAADwsgACACPQEADwsgACACPgIADwsgACACNwMACwsPACAAIAEgAkEAQQAQrQcLvAIAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACAkKCAkBAgMECgkKCggJBQYHCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAErAwA5AwAPCyAAIAIgAxEEAAsPCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAPCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwALNwEBfyAAKAIEIQEDQCABQX9GBEAgAEEANgIEBSAAKAIAIAFBAnRqQQA2AgAgAUEBayEBDAELCwtvAQV/IAAoAgAiAywAAEEwayIBQQlLBEBBAA8LA0BBfyEEIAJBzJmz5gBNBEBBfyABIAJBCmwiBWogASAFQf////8Hc0sbIQQLIAAgA0EBaiIFNgIAIAMsAAEgBCECIAUhA0EwayIBQQpJDQALIAIL+RICEn8BfiMAQUBqIggkACAIIAE2AjwgCEEnaiEWIAhBKGohEQJAAkACQAJAA0BBACEHA0AgASENIAcgDkH/////B3NKDQIgByAOaiEOAkACQAJAAkAgASIHLQAAIgsEQANAAkACQCALQf8BcSIBRQRAIAchAQwBCyABQSVHDQEgByELA0AgCy0AAUElRwRAIAshAQwCCyAHQQFqIQcgCy0AAiALQQJqIgEhC0ElRg0ACwsgByANayIHIA5B/////wdzIhdKDQkgAARAIAAgDSAHEKIBCyAHDQcgCCABNgI8IAFBAWohB0F/IRACQCABLAABQTBrIgpBCUsNACABLQACQSRHDQAgAUEDaiEHQQEhEiAKIRALIAggBzYCPEEAIQwCQCAHLAAAIgtBIGsiAUEfSwRAIAchCgwBCyAHIQpBASABdCIBQYnRBHFFDQADQCAIIAdBAWoiCjYCPCABIAxyIQwgBywAASILQSBrIgFBIE8NASAKIQdBASABdCIBQYnRBHENAAsLAkAgC0EqRgRAAn8CQCAKLAABQTBrIgFBCUsNACAKLQACQSRHDQACfyAARQRAIAQgAUECdGpBCjYCAEEADAELIAMgAUEDdGooAgALIQ8gCkEDaiEBQQEMAQsgEg0GIApBAWohASAARQRAIAggATYCPEEAIRJBACEPDAMLIAIgAigCACIHQQRqNgIAIAcoAgAhD0EACyESIAggATYCPCAPQQBODQFBACAPayEPIAxBgMAAciEMDAELIAhBPGoQqQwiD0EASA0KIAgoAjwhAQtBACEHQX8hCQJ/QQAgAS0AAEEuRw0AGiABLQABQSpGBEACfwJAIAEsAAJBMGsiCkEJSw0AIAEtAANBJEcNACABQQRqIQECfyAARQRAIAQgCkECdGpBCjYCAEEADAELIAMgCkEDdGooAgALDAELIBINBiABQQJqIQFBACAARQ0AGiACIAIoAgAiCkEEajYCACAKKAIACyEJIAggATYCPCAJQQBODAELIAggAUEBajYCPCAIQTxqEKkMIQkgCCgCPCEBQQELIRMDQCAHIRRBHCEKIAEiGCwAACIHQfsAa0FGSQ0LIAFBAWohASAHIBRBOmxqQb+MB2otAAAiB0EBa0EISQ0ACyAIIAE2AjwCQCAHQRtHBEAgB0UNDCAQQQBOBEAgAEUEQCAEIBBBAnRqIAc2AgAMDAsgCCADIBBBA3RqKQMANwMwDAILIABFDQggCEEwaiAHIAIgBhCnDAwBCyAQQQBODQtBACEHIABFDQgLIAAtAABBIHENCyAMQf//e3EiCyAMIAxBgMAAcRshDEEAIRBB9RIhFSARIQoCQAJAAn8CQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIBgsAAAiB0FTcSAHIAdBD3FBA0YbIAcgFBsiB0HYAGsOIQQWFhYWFhYWFhAWCQYQEBAWBhYWFhYCBQMWFgoWARYWBAALAkAgB0HBAGsOBxAWCxYQEBAACyAHQdMARg0LDBULIAgpAzAhGUH1EgwFC0EAIQcCQAJAAkACQAJAAkACQCAUQf8BcQ4IAAECAwQcBQYcCyAIKAIwIA42AgAMGwsgCCgCMCAONgIADBoLIAgoAjAgDqw3AwAMGQsgCCgCMCAOOwEADBgLIAgoAjAgDjoAAAwXCyAIKAIwIA42AgAMFgsgCCgCMCAOrDcDAAwVC0EIIAkgCUEITRshCSAMQQhyIQxB+AAhBwsgESEBIAdBIHEhCyAIKQMwIhlQRQRAA0AgAUEBayIBIBmnQQ9xQdCQB2otAAAgC3I6AAAgGUIPViAZQgSIIRkNAAsLIAEhDSAMQQhxRSAIKQMwUHINAyAHQQR2QfUSaiEVQQIhEAwDCyARIQEgCCkDMCIZUEUEQANAIAFBAWsiASAZp0EHcUEwcjoAACAZQgdWIBlCA4ghGQ0ACwsgASENIAxBCHFFDQIgCSARIAFrIgFBAWogASAJSBshCQwCCyAIKQMwIhlCAFMEQCAIQgAgGX0iGTcDMEEBIRBB9RIMAQsgDEGAEHEEQEEBIRBB9hIMAQtB9xJB9RIgDEEBcSIQGwshFSAZIBEQ2AMhDQsgEyAJQQBIcQ0RIAxB//97cSAMIBMbIQwgCCkDMCIZQgBSIAlyRQRAIBEhDUEAIQkMDgsgCSAZUCARIA1raiIBIAEgCUgbIQkMDQsgCCkDMCEZDAsLIAgoAjAiAUHPnAMgARsiDUH/////ByAJIAlB/////wdPGxC2DCIBIA1qIQogCUEATgRAIAshDCABIQkMDAsgCyEMIAEhCSAKLQAADQ8MCwsgCCkDMCIZUEUNAUIAIRkMCQsgCQRAIAgoAjAMAgtBACEHIABBICAPQQAgDBCzAQwCCyAIQQA2AgwgCCAZPgIIIAggCEEIaiIHNgIwQX8hCSAHCyELQQAhBwNAAkAgCygCACINRQ0AIAhBBGogDRCiDCINQQBIDQ8gDSAJIAdrSw0AIAtBBGohCyAHIA1qIgcgCUkNAQsLQT0hCiAHQQBIDQwgAEEgIA8gByAMELMBIAdFBEBBACEHDAELQQAhCiAIKAIwIQsDQCALKAIAIg1FDQEgCEEEaiIJIA0QogwiDSAKaiIKIAdLDQEgACAJIA0QogEgC0EEaiELIAcgCksNAAsLIABBICAPIAcgDEGAwABzELMBIA8gByAHIA9IGyEHDAgLIBMgCUEASHENCUE9IQogACAIKwMwIA8gCSAMIAcgBRFEACIHQQBODQcMCgsgBy0AASELIAdBAWohBwwACwALIAANCSASRQ0DQQEhBwNAIAQgB0ECdGooAgAiAARAIAMgB0EDdGogACACIAYQpwxBASEOIAdBAWoiB0EKRw0BDAsLCyAHQQpPBEBBASEODAoLA0AgBCAHQQJ0aigCAA0BQQEhDiAHQQFqIgdBCkcNAAsMCQtBHCEKDAYLIAggGTwAJ0EBIQkgFiENIAshDAsgCSAKIA1rIgsgCSALShsiASAQQf////8Hc0oNA0E9IQogDyABIBBqIgkgCSAPSBsiByAXSg0EIABBICAHIAkgDBCzASAAIBUgEBCiASAAQTAgByAJIAxBgIAEcxCzASAAQTAgASALQQAQswEgACANIAsQogEgAEEgIAcgCSAMQYDAAHMQswEgCCgCPCEBDAELCwtBACEODAMLQT0hCgtB5JQLIAo2AgALQX8hDgsgCEFAayQAIA4LfwIBfwF+IAC9IgNCNIinQf8PcSICQf8PRwR8IAJFBEAgASAARAAAAAAAAAAAYQR/QQAFIABEAAAAAAAA8EOiIAEQqwwhACABKAIAQUBqCzYCACAADwsgASACQf4HazYCACADQv////////+HgH+DQoCAgICAgIDwP4S/BSAACwuEAQECfyMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAgPIDSQ0BIABEAAAAAAAAAABBABCtDCEADAELIAJBgIDA/wdPBEAgACAAoSEADAELIAAgARC9ByECIAErAwAgASsDCCACQQFxEK0MIQALIAFBEGokACAAC58DAwJ8AX4CfyAAvSIFQoCAgICA/////wCDQoGAgIDwhOXyP1QiBkUEQEQYLURU+yHpPyAAmaFEB1wUMyamgTwgASABmiAFQgBZ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ACAFQTBqIAEgAkIAQgAQZyAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ggBkEBayEGIARCAYYhBCAJQgGGhCIJQoCAgICAgMAAVA0ACwsgCEGAgAJxIQcgBkEATARAIAVBQGsgBCAJQv///////z+DIAZB+ABqIAdyrUIwhoRCAEKAgICAgIDAwz8QZyAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQZyAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBnQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBnIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBnQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBnIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAtqAQJ/IAAoAhAiASABKAKIAigCECgC9AEiAiABKALoAWo2AugBIAEgAiABKALsAWo2AuwBQQEhAgNAIAIgASgCtAFKRQRAIAEoArgBIAJBAnRqKAIAELQMIAJBAWohAiAAKAIQIQEMAQsLCzwAIAAgATcDACAAIAJC////////P4MgAkKAgICAgIDA//8Ag0IwiKcgA0IwiKdBgIACcXKtQjCGhDcDCAsXAQF/IABBACABEKADIgIgAGsgASACGwvfAgEEfyABEHIhAwNAIAMEQEEHIQQCQAJAIAMQzgFFBEAgA0GO9AAQI0HQ9QdB8PUHEIgIIQQgAygCECAEOgCSAiAERQ0BCwJAIARBB0cNAEGkiwsoAgBB5ABHDQAgACADEK4MDAILIAMQGiICRQ0BIAQhBSACIQEDQCABKAIQIAU6ALUBIAMgARAbIgEEQCACIAEQ4gUaIAIoAhAtALUBIQUMAQsLAkACQAJA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QQAgASgCAEEDcUEDRxtqKAIoIgIQrQEgAkYEQCABEMEHIAMoAhAhAQwBCwtB2KEDQe26AUHUAkGaMBAAAAsgAEEAEK8IQQAhAgNAIAAoAhAiASgC3AEgAksEQCABIAEoAtgBIAJBAnRqKAIAIgE2AsABIAEhAwNAIAMEQCADKAIQIgNBADYCsAEgAygCuAEhAwwBCwsDQCABBEAgARDUDCABKAIQKAK4ASEBDAELCyACQQFqIQIMAQsLAkAgACgCECIBKALkAUUEQCABKALgAUUNAQsgABAaIQFBACEDA0AgAQRAAkAgARCtASABRw0AAkAgASgCECICKALMAQ0AIAAoAhAoAuQBIgRFIAEgBEZyDQAgASAEQQAQ2wEiAygCECICQQA2ApwBIAIgCjYCrAEgASgCECECCyACKALEAQ0AIAAoAhAoAuABIgJFIAEgAkZyDQAgAiABQQAQ2wEiAygCECICQQA2ApwBIAIgCzYCrAELIAAgARAbIQEMAQsLIANFDQAgAEEAEK8ICyAAQf3oAhAjIgEEfyAAEDUgARCoAhDRDAVB/////wcLIQJBACEBA0AgASAAKAIQIgMoAtwBSQRAIAMgAygC2AEgAUECdGooAgA2AsABIAAgAygCtAFFIAIQrwMaIAFBAWohAQwBCwsgABAaIQEgACgCECEDAkAgAQRAIANC/////3c3A+gBA0AgAQRAAkAgASABEK0BIgJGBEAgASgCECIDKAL0ASECDAELIAEoAhAiAyADKAL0ASACKAIQKAL0AWoiAjYC9AELIAIgACgCECIEKALsAUoEQCAEIAI2AuwBCyACIAQoAugBSARAIAQgAjYC6AELIAMtALUBIgNFIANBBkZyRQRAIAEQug4LIAAgARAbIQEMAQsLIAAQXiAARw0BQaSLCygCAEHkAEYEQEEBIQEDQCABIAAoAhAiAygCtAFKDQMgAygCuAEgAUECdGooAgAQtAwgAUEBaiEBDAALAAsgABBeEHIhAQNAIAFFDQIgASgCEC0AkgJBB0YEQCAAIAEQrgwLIAEQcSEBDAALAAsgA0IANwPoAQtBACECA38gACgCECIBKALcASACTQR/IAAQGgUgASABKALYASACQQJ0aigCACIBNgLAAQNAIAEEQCABKAIQQcABahCoDCABKAIQQcgBahCoDCABKAIQIgFBADYC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LQACIQACfyABLAADIgFFBEAgACAGai0AAAwBCyABIADAECgLQf8BcSIAQR5LQQEgAHRBgJzAgQRxRXINAUEbDwsgBCABNgIAC0EADwsgAUECaiECDAELC0F+C3IBAX8Cf0EAIAEoAhAiAS0ArAFBAUcNABogASgCkAIoAgAhAgNAIAIiASgCECgCeCICDQALQQAgACABQTBBACABKAIAQQNxQQNHG2ooAigQqwENABogACABQVBBACABKAIAQQNxQQJHG2ooAigQqwFFCwsEAEEAC4EBAQJ/IAJBCzYCAEEBIQMCQCABIABrQQNHDQAgAC0AACIBQfgARgR/QQAFIAFB2ABHDQFBAQshASAALQABIgRB7QBHBEAgBEHNAEcNAUEBIQELIAAtAAIiAEHsAEcEQCAAQcwARw0BQQAPC0EAIQMgAQ0AIAJBDDYCAEEBIQMLIAML5AMBBX9BASEEAkAgAiABayIFQQBMDQACQAJAAkACQAJAAkACQAJAIABByABqIgggAS0AAGotAAAiB0EFaw4UAgMEBgEBBgYGBgYGBgYGBgEFBgUACyAHQR5HDQULQRYhBgwECyAFQQFGDQQgACABIAAoAuACEQAADQMgACABIAAoAtQCEQAARQ0DQQIhBAwCCyAFQQNJDQMgACABIAAoAuQCEQAADQIgACABIAAoAtgCEQAARQ0CQQMhBAwBCyAFQQRJDQIgACABIAAoAugCEQAADQEgACABIAAoAtwCEQAARQ0BQQQhBAsgASAEaiEBA0AgAiABayIFQQBMDQNBASEEAkACQAJAIAggAS0AAGotAAAiB0ESaw4KAgQEBAEEAQEBAQALAkACQAJAIAdBBWsOAwABAgYLIAVBAUYNBiAAIAEgACgC4AIRAAANBSAAIAEgACgCyAIRAABFDQVBAiEEDAILIAVBA0kNBSAAIAEgACgC5AIRAAANBCAAIAEgACgCzAIRAABFDQRBAyEEDAELIAVBBEkNBCAAIAEgACgC6AIRAAANAyAAIAEgACgC0AIRAABFDQNBBCEECyABIARqIQEMAQsLIAFBAWohAUEcIQYLIAMgATYCACAGDwtBfg8LQX8LtAYBB38jAEEQayIHJABBASEFQX8hCAJAIAIgAWsiBEEATA0AAkACQAJAAkACQAJAAkACQCAAQcgAaiIKIAEtAABqLQAAIgZB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ECIDKAK0AUpFBEAgAygCuAEgBEECdGooAgAgASACEO8MIARBAWohBAwBCwsgAyADKwMQIAGiOQMQIAMgAysDGCACojkDGCADIAMrAyAgAaI5AyAgAyADKwMoIAKiOQMoCzsBAX9BASEEAkAgAEEBIAAoApwBIAEgAiADIAAtAOwDRUEBEKsEIgFFBEAgABDIB0UNAQsgASEECyAEC+IEAgh/BHxBASECA0AgAiAAKAIQIgMoArQBSkUEQCADKAK4ASACQQJ0aigCACABEPEMIAJBAWohAgwBCwsgABBeIQIgACgCECEDAkAgACACRgRAIAMoAuwBIQVEAADA////38EhCkQAAMD////fQSELIAMoAugBIgghBANAIAQgBUoEQCADKAK0ASIAQQAgAEEAShtBAWohAEEBIQIDQCAAIAJGDQQgCiADKAK4ASACQQJ0aigCACgCECIEKwMgRAAAAAAAACBAoCIMIAogDGQbIQogCyAEKwMQRAAAAAAAACDAoCIMIAsgDGMbIQsgAkEBaiECDAALAAUCQCADKALEASAEQQZ0aiIAKAIAIgZFDQBBASECIAAoAgQiBygCACIARQ0AA0AgACgCECIALQCsASIJRSACIAZOckUEQCAHIAJBAnRqKAIAIQAgAkEBaiECDAELCyAJDQAgBkECayECIAArAxAgACsDWKEhDCAHIAZBAnRqQQRrIQADQCAAKAIAKAIQIgAtAKwBBEAgByACQQJ0aiEAIAJBAWshAgwBCwsgCiAAKwMQIAArA2CgIg0gCiANZBshCiALIAwgCyAMYxshCwsgBEEBaiEEDAELAAsACyADKALoASEIIAMoAuwBIQUgAygChAIoAhAoAvQBtyEKIAMoAoACKAIQKAL0AbchCwsgASgCECgCxAEiACAFQQZ0aigCBCgCACgCECsDGCEMIAAgCEEGdGooAgQoAgAoAhArAxghDSADIAo5AyAgAyALOQMQIAMgDSADKwOAAaA5AyggAyAMIAMrA3ihOQMYC6UFAQZ/IwBBEGsiByQAIAcgAigCACIINgIMAn8gASAAKAKcAUYEQCAAIAg2AqgCIABBqAJqIQogAEGsAmoMAQsgACgCtAIiCkEEagshDCAKIAg2AgAgAkEANgIAAkACQANAIAcgBygCDCIINgIIIAAgASAIIAMgB0EIaiABKAIIEQYA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eCADIAApAwA3A3AgAyABKQMINwNoIAMgASkDADcDYCADQeABaiADQfAAaiADQeAAahC2AwJAIAUgAysD4AFmRQ0AIAMgACkDCDcDWCADIAApAwA3A1AgAyABKQMINwNIIAMgASkDADcDQCADQcABaiADQdAAaiADQUBrELYDIAMrA9ABIAIrAwBmRQ0AIAIrAxggAyAAKQMINwM4IAMgACkDADcDMCADIAEpAwg3AyggAyABKQMANwMgIANBoAFqIANBMGogA0EgahC2AyADKwOoAWZFDQAgAyAAKQMINwMYIAMgACkDADcDECADIAEpAwg3AwggAyABKQMANwMAIANBgAFqIANBEGogAxC2AyADKwOYASACKwMIZiEECyADQYACaiQAIAQLagICfAF/AkAgASsDECAAKwA4IgIgACsDGEQAAAAAAADgP6IiA6FmRQ0AIAErAwAgAyACoGVFDQAgASsDGCAAKwBAIgIgACsDIEQAAAAAAADgP6IiA6FmRQ0AIAErAwggAyACoGUhBAsgBAv7AgEGfyMAQRBrIgYkAAJAAkACQCAAKAIAIgMtAABBI0YEQCADLQABIgJB3wFxQdgARgRAQQIhAQNAIAFBCEYNAwJAIAEgA2otAAAiAkHBAGtB/wFxQQZJBEBBSSEFDAELIAJB4QBrQf8BcUEGSQRAQal/IQUMAQtBUCEFIAJBMGtB/wFxQQlLDQULIAIgBWoiAiAEQQR0aiEEIAFBAWohAQwACwALQQEhAQNAIAFBCEYNAiABIANqLQAAIgJBMGtB/wFxQQlLDQMgAUEBaiEBIARBCmwgAmpBMGshBAwACwALIAYgAzYCCANAIAYgATYCDCABQQhGDQMgASADaiIFLQAAIgJFBEAgAiEEDAQLIAJBO0YEQCAGQQhqQbDqBUH8AUEIQcQCEOEDIgJFDQQgBUEBaiEDIAIoAgQhBAwEBSABQQFqIQEMAQsACwALQQghAQsgAkE7RwRAQQAhBAwBCyABIANqQQFqIQMLIAAgAzYCACAGQRBqJAAgBAtjAQN/IwBBEGsiAiQAIAJBADoADyACIAA6AA4gAkEOahC7BCIEEDchACAEIQMDQCAAQQJJRQRAIAEgAywAABCeASADQQFqIQMgAEEBayEADAELCyADLQAAIAQQFyACQRBqJAALlAQBBn8jAEHwAGsiAiQA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BEQAAAAAAADgv6KgDAELIAErAxggASsDKKBEAAAAAAAA4D+iCyEEIAJBAToAUSACIAQ5A0AgAiAFOQM4C0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEOUOIAFBAWohAQwBCwsLogMCA38EfCMAQbABayICJAAgAkGgAWogACgCECIDKwMoIQYgAysDICEHIAMrAxghBSADKwMQIQgCfyABQQFrQQFNBEAgAiAGOQOIASACIAIpA4gBNwMoIAIgCDkDgAEgAiACKQOAATcDICACQZABaiACQSBqEOgBIAIgBzkDcCACQfAAagwBCyACIAU5A2ggAiACKQNoNwM4IAIgCDkDYCACIAIpA2A3AzAgAkGQAWogAkEwahDoASACIAc5A1AgBiEFIAJB0ABqCyIDQQhqIAU5AwAgAiADKQMINwMYIAIgAykDADcDECACQRBqEOgBIAAoAhAiAyACKQOQATcDECADIAIpA6gBNwMoIAMgAikDoAE3AyAgAyACKQOYATcDGCAAKAIQKAIMIgMEQCACIANBQGsiBCkDADcDCCACIAMpAzg3AwAgAkFAayACEOgBIAQgAikDSDcDACADIAIpA0A3AzgLQQEhAwNAIAMgACgCECIEKAK0AUpFBEAgBCgCuAEgA0ECdGooAgAgARDmDiADQQFqIQMMAQsLIAJBsAFqJAALSAECfyAAEIcBQRAQGCECIAAQiAEhACACIQEDQCAABEAgASAAKQMINwMAIAEgACkDEDcDCCABQRBqIQEgACgCACEADAELCyACCzQBAX9BGBBNIgIgASkDCDcDECACIAEpAwA3AwggACACQQEgACgCABEDACACRwRAIAIQFwsLIwEBfyMAQRBrIgEkACAAIAFBDmogAUEPahDsDiABQRBqJAALsQMCA38EfCMAQeAAayIFJAAgBUIANwNYIAVCADcDUCAAKAIQIgYrAxAhCgJ8QdiLCy0AAEEBRgRAQciQCysDACIJIAYrAyihIQggCSAGKwMYoQwBCyAGKwMoIQggBisDGAshCSAGKwMgIQsgBSAIOQNIIAVBQGsgCzkDACAFIAk5AzggBSAKOQMwIAVB0ABqIgdB1oMBIAVBMGoQVCAAIAEgBxCfARBoAkAgACgCECgCDCIGRQ0AIAYoAgAtAABFDQAgBisDQCEIIAUg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DAELIAIgA8AQngEgAiAELAABIgMQngEgA0UNASAEQQJqCyIELQAAIQMMAQsLIAIQIQRAIAAgASACELIDQe4AEKsICyACLQAPQf8BRgRAIAIoAgAQFwsgASABQRhqIgApAwA3AyggASAAKQMINwMwCyACQRBqJAALogIBBX8gACgCECgCwAEhAwNAIAMiASgCECgCuAEiAwRAIAAgASADQQBBABBSDQEgACABIANBAEEBEFIiBEH5JUG4AUEBEC4aIAQoAhBBADYCrAEgASgCECICKALIASACKALMASICQQFqIAJBAmpBBBBgIQUgASgCECICIAU2AsgBIAIgAigCzAEiAkEBajYCzAEgBSACQQJ0aiAENgIAIAEoAhAiASgCyAEgASgCzAFBAnRqQQA2AgAgAygCECIBKALAASABKALEASIBQQFqIAFBAmpBBBBgIQIgAygCECIBIAI2AsABIAEgASgCxAEiAUEBajYCxAEgAiABQQJ0aiAENgIAIAMoAhAiASgCwAEgASgCxAFBAnRqQQA2AgAMAQsLC9oCAQJ/IANEAADA////30FkIQVB/////wcCf0QAAAAAAADgwSADIANEAAAAAAAA4MFlGyIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsgBRshBCAAIAEgAkEAQQAQUiIFBEAgBSgCECIAIAAoAqwBIgAgBCAAIARKGzYCrAEPCyAAIAEgAkEAQQEQUiIAQfklQbgBQQEQLhogACgCECAENgKsASABKAIQIgQoAsgBIAQoAswBIgRBAWogBEECakEEEGAhBCABKAIQIgEgBDYCyAEgASABKALMASIBQQFqIgU2AswBIAQgAUECdGogADYCACAEIAVBAnRqQQA2AgAgAigCECIBKALAASABKALEASIBQQFqIAFBAmpBBBBgIQEgAigCECICIAE2AsABIAIgAigCxAEiAkEBaiIENgLEASABIAJBAnRqIAA2AgAgASAEQQJ0akEANgIAC/AHAgl/CXwjAEHwAGsiAyQAIANCADcDMCADQgA3AyggA0IANwMgIANCADcDGCABKAIEIQREAAAAAAAA8L8hDQNAAkAgBCAHRg0AIAEoAgAgB0EFdGoiBigCBEEBSw0AAkACQCAGKAIAKAIEIgYEQCAGLQAYQf8AcQ0DIAYrAxAiDEQAAAAAAAAAAGRFBEAgAisDICEMCyADIAw5AyggBigCACIGRQ0BDAILIAMgAisDICIMOQMoCyACKAIQIQYLIAMgBjYCGAJAIAdFBEAgDCENDAELIAwgDWINAQsCQCAFRQRAIAYhBQwBCyAGIAUQQw0BCyAHQQFqIQcMAQsLIAEgBCAHTSIKOgAIQQAhBkQAAAAAAAAAACENA0AgBCAGTUUEQCABKAIAIQVBACEHRAAAAAAAAAAAIQwgBkEFdCEIRAAAAAAAAAAAIQ9EAAAAAAAAAAAhEEQAAAAAAAAAACENAkACQANAIAUgCGoiBCgCBCAHTQRAAkAgBCAPOQMQIApFDQMgBg0AIAUgDDkDGCANIQwMBAsFIAMgB0E4bCIJIAQoAgBqKAIAIAIoAjAQgAE2AjgCQCABKAIAIAhqIgQoAgAgCWooAgQiBQRAIAMgBSgCGEH/AHEiBQR/IAUFIAIoAihB/wBxCyADKAIwQYB/cXI2AjAgAyAEKAIAIAlqKAIEIgQrAxAiDkQAAAAAAAAAAGQEfCAOBSACKwMgCzkDKCADIAQoAgAiBQR/IAUFIAIoAhALNgIYIAQoAgQiBQRAIAMgBTYCHAwCCyADIAIoAhQ2AhwMAQsgAyACKwMgOQMoIAMgAigCEDYCGCADIAIoAhQ2AhwgAyADKAIwQYB/cSACKAIoQf8AcXI2AjALIAMgACgCiAEiBSADQRhqQQEgBSgCABEDADYCPCADQQhqIAAgA0E4ahCLCCADKwMQIQ4gAysDCCEUIAEoAgAgCGooAgAgCWooAgAQFyADKAI4IQsgASgCACIFIAhqKAIAIAlqIgQgFDkDICAEIAs2AgAgBCADKwNIOQMQIAQgAysDUDkDGCAEIAMoAjw2AgQgBCADKAJANgIIIAQgAygCRDYCDCAOIA0gDSAOYxshDSADKwNQIg4gECAOIBBkGyEQIAMrAygiDiAMIAwgDmMbIQwgB0EBaiEHIA8gFKAhDwwBCwsgBCANOQMYIA0hDAwBCyAGRQRAIAUgDCAQoTkDGAwBCyAEIBEgDKAgE6EgEKE5AxgLIA8gEiAPIBJkGyESIAZBAWohBiARIAygIREgEyAEKwMYoCETIAEoAgQhBAwBCwsgASASOQMgIAEgDSARIARBAUYbOQMoIANB8ABqJAAL1gMBA39BASEEA0AgBCAAKAIQIgUoArQBSkUEQCAFKAK4ASAEQQJ0aigCACABIAIgAxD/DiEDIARBAWohBAwBCwsCQCAAEF4gAEYNACABQQAgAkECdBAzIQUgABAaIQIDQCACBEAgBSACKAIQKAL0AUECdGpBATYCACAAIAIQKSEBA0AgAQRAIAFBKGohBiACKAIQKAL0ASEEA0AgBCAGQVBBACABKAIAQQNxQQJHG2ooAgAoAhAoAvQBTkUEQCAFIARBAWoiBEECdGpBATYCAAwBCwsgACABECwhAQwBCwsgACACEBshAgwBCwsgACgCECIBKALoASEEA0AgBCABKALsAUoNASAFIARBAnRqKAIARQRAIANFBEAgABBeQejzAEEBEJABIQMLIANBAEEBEHMiAkGGJkHAAkEBEC4aIAIoAhAiAUKAgICAgICA8D83A2AgASAENgL0ASABQoCAgICAgIDwPzcDWCABQQE2AuwBIAFCgICAgICAgPg/NwNQIAFBADYCxAFBBUEEEBghASACKAIQIgZBADYCzAEgBiABNgLAAUEFQQQQGCEBIAIoAhAgATYCyAEgACACQQEQexogACgCECEBCyAEQQFqIQQMAAsACyADC+oPAgh/B3wjAEFAaiIEJAAgACgCVCEJAkAgACgCUCIDRQ0AIAMoAhgiA0UNACAAKAIYDQAgACADEGE2AhgLIAAvASQhAyABKwMAIQ4gASsDECENIAArA0AhCyABKwMYIg8gASsDCCIQoSAAKwNIIhGhRAAAAAAAAAAAECQhDCANIA6hIAuhRAAAAAAAAAAAECQhCwJAIANBAXFFDQAgC0QAAAAAAAAAAGQEQAJAAkACQAJAIANBBnFBAmsOAwECAAILIAEgDiARoDkDEAwCCyABIA4gC6AiDjkDACABIA0gC6A5AxAMAQsgASANIAtEAAAAAAAA4D+iIguhOQMQIAEgDiALoCIOOQMAC0QAAAAAAAAAACELCyAMRAAAAAAAAAAAZEUNACABAnwCQCADQRhxIgNBCEcEQCADQRBHDQEgESAQoAwCCyABIBAgDKAiDDkDCCARIAygDAELIAEgECAMRAAAAAAAAOA/oiIMoDkDCCAPIAyhCyIPOQMYRAAAAAAAAAAAIQwLAn8gCyALIAAoAmgiA7giC6MiDSALoqEiC0QAAAAAAADgP0QAAAAAAADgvyALRAAAAAAAAAAAZhugIguZRAAAAAAAAOBBYwRAIAuqDAELQYCAgIB4CyEFIANBAWohBiAOIAAtACG4IhCgIAAsACC3Ig6gIQsgACgCYCEHQQAhAwNAIAMgBkYEQAJ/IAwgDCAAKAJkIgO4IgyjIg0gDKKhIgxEAAAAAAAA4D9EAAAAAAAA4L8gDEQAAAAAAAAAAGYboCIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAshBSADQQFqIQYgDyAQoSAOoSELIAAoAlwhB0EAIQMDQCADIAZGBEADQCAJKAIAIgMEQCADLwFWIQYgAy8BVCEHAn8gAkUEQCADLwFSIQUgAy8BUCEIQQAMAQsgACgCZCADLwFSIgUgBmpGIAdFQQN0IgggCEEEciAGGyIIQQJyIAggACgCaCADLwFQIgggB2pGG3ILIQogACgCXCAGQQN0aiIGIAVBA3RqKwMAIAAsACC3IQ8gACgCYCAHQQN0aiIFIAhBA3RqKwMAIQ0gBisDACEOIAUrAwAhDAJAIAMoAhgNACADKAJgKAIYIgVFDQAgAyAFEGE2AhgLIA+gIQsgDSAPoSEPIAIgCnEhBwJAIAMvASQiBkEBcUUNAAJAIA8gDKEgAysDQCIQoSINRAAAAAAAAAAAZEUNAAJAAkACQCAGQQZxQQJrDgMBAgACCyAMIBCgIQ8MAgsgDCANoCEMIA8gDaAhDwwBCyAPIA1EAAAAAAAA4D+iIg2hIQ8gDCANoCEMCyAOIAuhIAMrA0giEKEiDUQAAAAAAAAAAGRFDQACQCAGQRhxIgVBCEcEQCAFQRBHDQEgCyAQoCEODAILIAsgDaAhCyAOIA2gIQ4MAQsgDiANRAAAAAAAAOA/oiINoSEOIAsgDaAhCwsgCUEEaiEJIAMgDjkDSCADIA85A0AgAyALOQM4IAMgDDkDMCADIAc6ACMgBCAOIAMtACG4Ig2hIAMtACK4IhChIg45AzggBCAPIA2hIBChIg85AzAgBCALIA2gIBCgIgs5AyggBCAMIA2gIBCgIgw5AyAgAygCWCEFAkACQAJAIAMtAFxBAWsOAwACAQILIAQgBCkDODcDGCAEIAQpAzA3AxAgBCAEKQMoNwMIIAQgBCkDIDcDACAFIAQgBxCADwwDCwJAIA8gDKEgBSsDEKEiDUQAAAAAAAAAAGRFDQACQAJAIAZBBnFBAmsOAwECAAILIAQgDyANoTkDMAwBCyAEIAwgDaA5AyALAkAgDiALoSAFKwMYoSIMRAAAAAAAAAAAZEUNACAGQRhxIgNBCEcEQCADQRBHDQEgBCAOIAyhOQM4DAELIAQgCyAMoDkDKAsgBSAEKQMgNwMAIAUgBCkDODcDGCAFIAQpAzA3AxAgBSAEKQMoNwMIDAILIAUrAyghEAJAIA8gDKEgBSsDIKEiDUQAAAAAAAAAAGRFDQACQAJAAkACQCAGQQZxQQFrDgYCAQIAAgQDCyAEIA8gDaE5AzAMAwsgBCAMIA2gOQMgDAILAAsgBCAPIA1EAAAAAAAA4D+iIg+hOQMwIAQgDCAPoDkDIAsCQCAOIAuhIBChIgxEAAAAAAAAAABkRQ0AAkAgBkEYcSIGQQhHBEAgBkEQRw0BIAQgDiAMoTkDOAwCCyAEIAsgDKA5AygMAQsgBCAOIAxEAAAAAAAA4D+iIg6hOQM4IAQgCyAOoDkDKAsgBSAEKQMgNwMQIAUgBCkDODcDKCAFIAQpAzA3AyAgBSAEKQMoNwMYQewAQfIAQe4AIAMvASRBgAZxIgVBgAJGGyAFQYAERhshBSADKAJYIgYoAgQhB0EAIQMDQCADIAdGDQIgBigCACADQQV0aiIILQAIRQRAIAggBToACAsgA0EBaiEDDAALAAsLIAAgAjoAIyAAIAEpAwA3AzAgACABKQMINwM4IABBQGsgASkDEDcDACAAIAEpAxg3A0ggBEFAayQABSAHIANBA3RqIggrAwAhDCAIIAs5AwAgCyANIAygIAMgBUggA0EATnG4oCAOoKEhCyADQQFqIQMMAQsLBSAHIANBA3RqIggrAwAhESAIIAs5AwAgCyANIBGgIAMgBUggA0EATnG4oCAOoKAhCyADQQFqIQMMAQsLC8EWAhR/BHwjAEGAAWsiByQAIAEoAmwiBARAIAMgBEHQjwsQiQ8LIAEgAjYCUCABKAJUIQ0Q7AMhDhCNDyEJIA0QiAEhBANAIAQEQCAEKAIIEIgBIQIDQCACBEAgCEEBaiEIIAIoAgAhAgwBCwsgBC0ADARAIwBBEGsiAiQAIAIgBUH//wNxQQFqNgIEIAkgAkEEakEBIAkoAgARAwAaIAJBEGokAAsgBUEBaiEFIAQoAgAhBAwBCwsgASAIQQFqQQQQGCIPNgJUIA0QiAEhCwNAAkAgCwRAIBBB//8DcSIIuCEaQQAhAiALKAIIEIgBIQwDQCAMRQ0CIA8gDCgCCCIGNgIAIAYgATYCYCAGLwEkIgRBwABxRQRAIAYgAS0AJEHAAHEEfyABLQAiBUECCzoAIgsgBEEgcUUEQAJAIAEsAFgiBUEATg0AQQEhBSABLQAkQSBxRQ0AIAEtACEhBQsgBiAFOgAhCwJ/AkACQAJAIAYtAFxBAWsOAwACAQILQcAAIQQgACAGKAJYIAYgAxCBDyEKQcgADAILIAdB8ABqIAMoAjQgBigCWCIEKAIgEI4GAnwgBygCcCIFIAcoAnQiCnFBf0YEQCAHIAQoAiA2AmBBvOsEIAdB4ABqEDFBASEKRAAAAAAAAAAAIRhEAAAAAAAAAAAMAQsgAygCNCgCEEEBOgByIAq3IRhBACEKIAW3CyEZIARCADcDACAEIBg5AxggBCAZOQMQIARCADcDCEEQIQRBGAwBCyAAKAIQKAKQASAGKAJYIAMQ/g5BACEKQSAhBEEoCyAGKAJYIgVqKwMAIAYtACEgBi0AImpBAXS4IhigIRkgBCAFaisDACAYoCEYIAYtACRBAXEEQAJAQanWAyEFAkAgBi8BJiIERQ0AIAYvASgiEUUNAAJAIBggBLhkDQBEAAAAAAAAAAAhGCAZIBG4ZA0ARAAAAAAAAAAAIRkMAgtBktUDIQVEAAAAAAAAAAAhGUQAAAAAAAAAACEYIAYtAFxBA0YNAQsgBUEAECdBASEKCwsgD0EEaiEPIAYgGCAGLwEmuCIbIBggG2QbOQNAIAYgGSAGLwEouCIYIBggGWMbOQNIIAJB//8DcSEEIAYvAVBBAWshBQNAIAQgBWohAgJAA0AgAiAESARAIAQhBQwCCyAOIAK3IBoQmwhFBEAgAkEBayECDAELCyACQQFqIQQMAQsLA0ACQCAEIAYvAVBqIgIgBUoEQCAFtyEYIAghAgNAIAIgBi8BUiAIak8NAiAOIBggArgQzAIgAkEBaiECDAALAAsgBEGAgARJBEAgBiAEOwFUIAYgEDsBViACQf//A3EiESASSyEVIAYvAVIgCGoiBSATSyEWIwBBEGsiBCQAIAQgBTYCDCAJIARBDGpBgAQgCSgCABEDACAEQRBqJAAEQCAGIAYtAGRBAnI6AGQLIAogFHIhFCARIBIgFRshEiAFIBMgFhshEyAMKAIAIQwMAwtB/MkBQdy8AUGrCUHc7AAQAAALIAVBAWohBQwACwALAAsgASASNgJoIAEgEzYCZCANEHkaIAkQeRogDhDfAiABLwEkIgBBgAFxRQRAIAFBAjoAIAsgAEEgcUUEQCABQQE6ACELIAdBqMgKKAIANgJsAkACQCABKAJkIgBBAUcEQCABKAJoQQFHDQELIAEgAEEBakEIEBg2AlwgASABKAJoQQFqQQgQGCIGNgJgIAEoAlQhBANAIAQoAgAiAEUNAgJ8IAAvAVIiBUEBRgRAIAArA0gMAQsgACsDSCABLAAgQQFrIAVBAWtst6EgBbijRAAAAAAAAPA/ECQLIRgCfCAALwFQIghBAUYEQCAAKwNADAELIAArA0AgASwAIEEBayAIQQFrbLehIAi4o0QAAAAAAADwPxAkCyEZIAUgAC8BViICaiEFA0AgAiAFRwRAIAEoAlwgAkEDdGoiCSAJKwMAIBgQJDkDACACQQFqIQIMAQsLIAAvAVQiAiAIaiEAA0AgACACRwRAIAYgAkEDdGoiBSAFKwMAIBkQJDkDACACQQFqIQIMAQsLIARBBGohBAwACwALIAEgAEEBakEIEBg2AlwgASABKAJoQQFqQQgQGDYCYCAHIAcoAmw2AlxBACEFQfz9ACAHQdwAakEAEM0BIQYgByAHKAJsNgJYQY2CASAHQdgAakEAEM0BIQkgBkHsJUGYAkEBEC4aIAlB7CVBmAJBARAuGiAHQgA3A3ggB0IANwNwQQAhBEEAIQgDQCABKAJoIAhJBEBBACEIA0AgASgCZCAISQRAIAEoAlQhCANAIAgoAgAiAARAIAcgAC8BVDYCMCAHQfAAaiICQZ4XIAdBMGoQ2gEgCSACEOoBQQAQcyEEIAcgAC8BUCAALwFUajYCICACQbWyASAHQSBqENoBIAkgBCAJIAIQ6gFBABBzIAArA0AQ/Q4gByAALwFWNgIQIAJBnhcgB0EQahDaASAGIAIQ6gFBABBzIQQgByAALwFSIAAvAVZqNgIAIAJBtbIBIAcQ2gEgBiAEIAYgAhDqAUEAEHMgACsDSBD9DiAIQQRqIQgMAQsLIAdB8ABqEGYgCRD8DiAGEPwOIAZBAkH/////BxCvAxogCUECQf////8HEK8DGiAGKAIQKALAASgCECEIQQAhAkEAIQUDQCAIKAK4ASIABEAgASgCXCACQQN0aiAAKAIQIggoAvQBIgAgBWu3OQMAIAJBAWohAiAAIQUMAQsLIAkoAhAiCCgCwAEoAhAhBUEAIQJBACEEA0AgBSgCuAEiAARAIAEoAmAgAkEDdGogACgCECIFKAL0ASIAIARrtzkDACACQQFqIQIgACEEDAEFQcABIQIDQCACIAhqKAIAIgAEQCAAKAIQKALAARAXIAAoAhAoAsgBEBcgACgCECEIQbgBIQIMAQsLIAYQlQEgCRCVAQsLBSAHIAg2AkAgB0HwAGoiAEHeFiAHQUBrENoBIAYgABDqAUEBEHMiAEGGJkHAAkEBEC4aIAAoAhBBADYCxAEgASgCaEEBakEEEBghAiAAKAIQIgRBADYCzAEgBCACNgLAASABKAJoQQFqQQQQGCECIAAoAhAgAjYCyAEgBSAGIAUbKAIQQbgBQcABIAUbaiAANgIAIAhBAWohCCAAIQUMAQsLBSAHIAg2AlAgB0HwAGoiAEHeFiAHQdAAahDaASAJIAAQ6gFBARBzIgBBhiZBwAJBARAuGiAAKAIQQQA2AsQBIAEoAmRBAWpBBBAYIQIgACgCECIKQQA2AswBIAogAjYCwAEgASgCZEEBakEEEBghAiAAKAIQIAI2AsgBIAQgCSAEGygCEEG4AUHAASAEG2ogADYCACAIQQFqIQggACEEDAELCwsgASgCaCIAuEQAAAAAAADwP6AgASwAILciGKIgAS0AIUEBdLgiGqAhGSABKAJkIgS4RAAAAAAAAPA/oCEbQQAhAgNAIAAgAkYEQCAbIBiiIBqgIRhBACECA0AgAiAERgRAAkAgAS0AJEEBcUUNAEHb1gMhAgJAIAEvASYiAEUNACABLwEoIgRFDQAgGSAAuGREAAAAAAAAAAAhGUGz1QMhAgRARAAAAAAAAAAAIRgMAQsgGCAEuGREAAAAAAAAAAAhGEUNAQsgAkEAECdBASEUCyABIBkgAS8BJrgQJDkDQCABIBggAS8BKLgQJDkDSCABKAJsBEAgA0HQjwsQhQ8LIAdBgAFqJAAgFA8FIBggASgCXCACQQN0aisDAKAhGCACQQFqIQIMAQsACwAFIBkgASgCYCACQQN0aisDAKAhGSACQQFqIQIMAQsACwALIBBBAWohECALKAIAIQsMAAsACzMBAX8CQCAAQcE2ECMiAQRAIAEtAAANAQsgAEHWNhAjIgEEQCABLQAADQELQQAhAQsgAQtzAQJ/AkAgACgCBCICBEAgAiABECpFDQELIAAoAlQhAwNAIAMoAgAiAkUEQEEADwsCQCACKAIEIgBFDQAgACABECoNACACDwtBACEAIANBBGohAyACLQBcQQFGBEAgAigCWCABEIMPIQALIABFDQALCyAAC5ABAQZ/AkAgAEUNACAAKAIAIQIDQCAAKAIEIANNBEAgACgCABAXIAAQFwwCCyACKAIAIQFBACEEA0AgAigCBCAETQRAIANBAWohAyACQSBqIQIMAgUgASgCABAXAkAgASgCCCIFRQ0AIAEoAgwiBkUNACAFIAYRAQALIARBAWohBCABQThqIQEMAQsACwALAAsLQwIBfwF8IAEoAgAiAgRAIAAgAjYCEAsgASgCBCICBEAgACACNgIUCyABKwMQIgNEAAAAAAAAAABmBEAgACADOQMgCwvIDAILfwJ8IwBBMGsiBSQAQQEhAgNAIAJBAnQhBgJAA0AgAiAAKAIQIgEoArQBSw0BIAEoArgBIAZqKAIAEBpFBEBB4PoDQQAQJyAAKAIQIgcoArgBIAZqIgEgAUEEaiAHKAK0ASACa0ECdBCPARogACgCECIBIAEoArQBQQFrNgK0AQwBCwsgAkEBaiECDAELC0GAiwstAAAEQEG4kQsQqAELQdDOCiAANgIAQczOCkEAOgAAQdTOCiAAEF4QsAJBAWoiAUEEEBg2AgAgAUEEEBghAUHYzgpBCDYCAEHczgogATYCAEG4iwtBGDYCAAJAIABBpx8QIyIBRQ0AIAEQqAIiDUQAAAAAAAAAAGRFDQBB2M4KAn9EAAAAAAAA8D8gDUHYzgooAgC3oiIMIAxEAAAAAAAA8D9jGyIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAs2AgBBuIsLAn9EAAAAAAAA8D8gDUG4iwsoAgC3oiIMIAxEAAAAAAAA8D9jGyIMmUQAAAAAAADgQWMEQCAMqgwBC0GAgICAeAs2AgALIAAoAhAiAS0AiAFBEHEEQCAAIAEoAuwBQQJqIgJBBBAYIgEgAkEAEP8OGiABEBcLIAAQ6gsgAEEBEK8IIAAQ+Q4gABCmCEHgzgogACgCECIDKALoATYCAEHkzgogAygC7AE2AgAgBUEANgIoIAVCADcDIANAIAMoAtwBIgYgBEsEQCADIAMoAtgBIARBAnRqKAIANgLAAQJAIARFDQAgAygC7AEhByADKALoASECA0AgAiAHSg0BIAMoAsQBIAJBBnRqIgYoAgAhASAGQQA2AgAgBiAGKAIEIAFBAnRqNgIEIAJBAWohAgwACwALIARBAWohBCAAQQAgBUEgahChCCAKaiEKIAAoAhAhAwwBCwsCQCAGQQFNBEAgAygC6AEhBAwBCyADKALYASEHQQAhAQNAIAYgCEYEQCADQQE2AtwBIAMgBygCADYCwAEgA0HgzgooAgAiBDYC6AEgA0HkzgooAgA2AuwBDAILIAcgCEECdGooAgAhAiABBEAgASgCECACNgK4AQsgAigCECABNgK8AQNAIAIiASgCECgCuAEiAg0ACyAIQQFqIQgMAAsAC0Ho+gYoAgAhC0EBIQkDQCAEIAMoAuwBTARAIARBBnQiCCADKALEAWoiAiACKAIIIgE2AgAgAiACKAIMIgY2AgRBACECIAFBACABQQBKGyEHA0ACQCACIAdHBEAgBiACQQJ0aigCACIBDQFBgIsLLQAABEAgABAeIQEgBSAAKAIQKALEASAIaigCADYCHCAFIAI2AhggBSAENgIUIAUgATYCECALQYziAyAFQRBqEB0aIAAoAhAhAwsgAygCxAEgCGogAjYCAAsgBEEBaiEEDAMLIAEoAhAgAjYC+AEgAkEBaiECDAALAAsLA0AgAygCtAEiASAJTgRAIAMoArgBIAlBAnRqKAIAIAVBIGoQ7g4gCmohCiAAKAIQIQMgCUEBaiEJDAELCwJAIAFBAEwNACAAQc0oECMiAQRAIAEQakUNAQsgABDxBkHMzgpBAToAACAAQQIgBUEgahChCCEKCyAFQQA2AiQgBSgCIBAXIAVBADYCKCAFQgA3AyBB3M4KKAIAIgEEQCABEBdB3M4KQQA2AgALQdTOCigCACIBBEAgARAXQdTOCkEANgIAC0EBIQIDQCAAKAIQIgQoArQBIAJOBEAgBCgCuAEgAkECdGooAgAQnAggAkEBaiECDAELCyAEKALoASEJA0BBACEGIAQoAuwBIAlOBEADQCAEKALEASAJQQZ0aiIBKAIAIAZKBEAgASgCBCAGQQJ0aigCACIHKAIQIgEgBjYC+AFBACECIAEoAtABIggEQANAIAggAkECdGooAgAiAQRAIAEoAhAtAHBBBEYEfyABELAIIAEoAhAQFyABEBcgBygCECgC0AEhCCACQQFrBSACC0EBaiECDAELCyAAKAIQIQQLIAZBAWohBgwBCwsgASgCOCIBBEAgASgCCBAXIAEQFyAAKAIQIQQLIAlBAWohCQwBCwtBgIsLLQAABEAgABAeIQAgBRCKATkDCCAFIAo2AgQgBSAANgIAIAtBvdMEIAUQLQsgBUEwaiQAC+0IAgR/BHwjAEGgAWsiAyQAIAAgASgCGCIEQe30ACAEGxBFAkAgAS0AKiIEQRhxBEAgA0IANwIoAkAgBEEQcQRAIANBpK8BNgIoDAELIARBCHFFDQAgA0HWqQE2AigLIAAgA0EoahDcAQwBCyAAIAAoAgAoAsgCENwBCyAAIAEtACG4EIACAkAgAS0AKkECcQRAIAEtACEhASADIAIpAwA3AzAgAyACKQMINwM4IAMgAikDGDcDWCADIAIpAxA3A1AgAysDMCEIIAMrA1AhCQJAIAFBAU0EQCADKwNYIQcgAysDOCEKDAELIAMgAbhEAAAAAAAA4D+iIgcgCKAiCDkDMCADIAcgAysDOKAiCjkDOCADIAkgB6EiCTkDUCADIAMrA1ggB6EiBzkDWAsgAyAHOQNoIAMgCDkDYCADIAo5A0ggAyAJOQNAIANBBDYCJCADQQQ2AiAgACADQTBqQQQgA0EgakEAEKwDDAELIAEvASRBgPgAcSIGBEAgAS0AISEBIAMgAikDCDcDSCADIAIpAwA3A0AgAyACKQMYNwNoIAMgAikDEDcDYCADKwNAIQggAysDYCEJAkAgAUEBTQRAIAMrA2ghByADKwNIIQoMAQsgAyABuEQAAAAAAADgP6IiByAIoCIIOQNAIAMgByADKwNIoCIKOQNIIAMgCSAHoSIJOQNgIAMgAysDaCAHoSIHOQNoCyADQeAAaiEFIANBQGshASADIAc5A3ggAyAIOQNwIAMgCjkDWCADIAk5A1AgA0HwAGohAiADQdAAaiEEAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAGQYAIa0EKdg4OAwIGAQ0FCQAHDAoECwgPCyAAIAFBAhA2DA4LIAAgBEECEDYMDQsgACAFQQIQNgwMCyADIAIpAwA3AzAgAyACKQMINwM4IAAgA0EwakECEDYMCwsgACABQQMQNgwKCyAAIARBAxA2DAkLIAMgASkDCDcDiAEgAyABKQMANwOAASAAIAVBAxA2DAgLIAMgAikDADcDMCADIAIpAwg3AzggACADQTBqQQMQNgwHCyAAIAFBBBA2DAYLIAMgASkDCDcDiAEgAyABKQMANwOAASAAIARBBBA2DAULIAMgASkDCDcDiAEgAyABKQMANwOAASADIAQpAwg3A5gBIAMgBCkDADcDkAEgACAFQQQQNgwECyADIAIpAwA3AzAgAyACKQMINwM4IAAgA0EwakEEEDYMAwsgACABQQIQNiAAIAVBAhA2DAILIAMgAikDADcDMCADIAIpAwg3AzggACADQTBqQQIQNiAAIARBAhA2DAELIAEtACEiAUECTwRAIAIgAbhEAAAAAAAA4D+iIgggAisDAKA5AwAgAiAIIAIrAwigOQMIIAIgAisDECAIoTkDECACIAIrAxggCKE5AxgLIAMgAikDGDcDGCADIAIpAxA3AxAgAyACKQMINwMIIAMgAikDADcDACAAIANBABCCAgsgA0GgAWokAAtnAQF/IwBBEGsiBSQAAn8gASAEIAVBCGoQywQEQCAAIAQoAgAQWCAAIAQoAgQiAUHt9AAgARsgAiAFKwMIEIUDQQNBAiADLQAAQQFxGwwBCyAAIAEQWEEBCyAAQZgeEEUgBUEQaiQAC6wBAgF/AXwCQCAAKAIQIgNFDQAgASgCAARAIAIgAzYCACAAIAEoAgA2AhAMAQsgAkEANgIACwJAIAAoAhQiA0UNACABKAIEBEAgAiADNgIEIAAgASgCBDYCFAwBCyACQQA2AgQLIAArAyAiBEQAAAAAAAAAAGYEQCABKwMQRAAAAAAAAAAAZgRAIAIgBDkDECAAIAErAxA5AyAPCyACQoCAgICAgID4v383AxALC7AFAgx/B3wjAEGAAWsiAyQAIAEoAgQiDARAIAIrACAhFCACKAAUIQcgAigAECEKIAEtAAghDSABKAIAIQ4gAisDACEQIAErAxAhFSABKwMgIREgAisDCCESIAErAxghEyABKwMoIQ8gA0IANwMYIAMgEiAPIBOgRAAAAAAAAOA/oqAgDyAToUQAAAAAAADgP6KgOQMgIABBARDoCCARIBWhRAAAAAAAAOA/oiISIBAgESAVoEQAAAAAAADgP6KgIhGgIRMgESASoSESA0AgBSAMRwRAAnwgEiAOIAVBBXRqIgQtAAgiAUHsAEYNABogAUHyAEYEQCATIAQrAxChDAELIBEgBCsDEEQAAAAAAADgv6KgCyEQIAMgAysDICAEKwMYoTkDICAEKAIAIQFBACEIA0AgBCgCBCAITQRAIAVBAWohBQwDBSADAn8CQCABKAIEIgZFBEAgAyAHNgIsIAMgCjYCKCADIBQ5AzggAygCQCEJIAchCwwBCyADIAYrAxAiDyAUIA9EAAAAAAAAAABkGzkDOCADIAYoAgAiAiAKIAIbNgIoIAMgBigCBCICIAcgAhsiCzYCLCADKAJAIQkgBigCGEH/AHEiAkUNACAJQYB/cSACcgwBCyAJQYB/cQs2AkAgACALEEUgAyABKAIANgJIIAMgA0EoajYCTCADIAErAxA5A1ggAyANBHwgASsDGAVEAAAAAAAA8D8LOQNgIAMgASgCBCgCCDYCMCADIAEoAgg2AlAgAyABKwMgOQNoIAQrAxghDyADIAMpAyA3AxAgA0HsADoAeCADIA85A3AgAyAQOQMYIAMgAykDGDcDCCAAIANBCGogA0HIAGoQlAYgCEEBaiEIIBAgASsDIKAhECABQThqIQEMAQsACwALCyAAEOYICyADQYABaiQAC4gWAgp/CHwjAEHABWsiAyQAIAMgASkDSDcD4AMgAyABQUBrKQMANwPYAyADIAEpAzg3A9ADIAMgASkDMDcDyANBASEKIAEoAgBFBEAgASgCCEEARyEKCyACKwMAIQ0gAisDCCEOIAEoAlQhBiABKAJsIgQEQCACIARBqI8LEIkPCyADIA0gAysDyAOgOQPIAyADIA0gAysD2AOgOQPYAyADIA4gAysD0AOgOQPQAyADIA4gAysD4AOgOQPgA0EBIQsCQCAKRQ0AIAAtAJgBQQRxDQAgAyADKQPgAzcD0AIgAyADKQPYAzcDyAIgAyADKQPQAzcDwAIgAyADKQPIAzcDuAIgACACIAEgA0G4AmogA0GkA2oQ8QVFIQsLAkACQAJAIAEtACpBBHENACABKAIUIgQEQCABKAIcIQggAyABLQAqOgC3AiAAIAQgCCADQbcCaiADQYAFahCIDyEEAkAgAS0AKkECcQRAIAEtACEhCCADIAMpA+ADNwOIAyADIAMpA8gDNwPgAiADIAMpA9gDNwOAAyADIAMpA9ADNwPoAiADKwPgAiEOIAMrA4ADIQ0CQCAIQQFNBEAgAysDiAMhDyADKwPoAiEQDAELIAMgCLhEAAAAAAAA4D+iIg8gDqAiDjkD4AIgAyAPIAMrA+gCoCIQOQPoAiADIA0gD6EiDTkDgAMgAyADKwOIAyAPoSIPOQOIAwsgAyAPOQOYAyADIA45A5ADIAMgEDkD+AIgAyANOQPwAiADIAMoAtwCQYCAYHFBBHIiCDYC3AIgAyAINgKwAiAAIANB4AJqQQQgA0GwAmogBBCsAwwBCyADIAMpA+ADNwOoAiADIAMpA9gDNwOgAiADIAMpA9ADNwOYAiADIAMpA8gDNwOQAiAAIANBkAJqIAQQggILIAMoAoAFEBcLA0AgBigCACIEBEAgAyAEKQNINwPQBCADIARBQGspAwA3A8gEIAMgBCkDODcDwAQgAyAEKQMwNwO4BEEBIQlBASEIIAQoAgBFBEAgBCgCCEEARyEICyACKwMIIQ0gAyACKwMAIg4gAysDuASgOQO4BCADIA4gAysDyASgOQPIBCADIA0gAysDwASgOQPABCADIA0gAysD0ASgOQPQBAJAIAhFDQAgAC0AmAFBBHENACADIAMpA9AENwOIAiADIAMpA8gENwOAAiADIAMpA8AENwP4ASADIAMpA7gENwPwASAAIAIgBCADQfABaiADQdwEahDxBUUhCQsCQCAELQAqQQRxDQAgBCgCFCIFBEAgBCgCHCEHIAMgBC0AKjoA7wEgACAFIAcgA0HvAWogA0GABWoQiA8hBQJAIAQtACpBAnEEQCAELQAhIQcgAyADKQO4BDcD8AMgAyADKQPABDcD+AMgAyADKQPQBDcDmAQgAyADKQPIBDcDkAQgAysD8AMhDiADKwOQBCENAkAgB0EBTQRAIAMrA5gEIQ8gAysD+AMhEAwBCyADIAe4RAAAAAAAAOA/oiIPIA6gIg45A/ADIAMgDyADKwP4A6AiEDkD+AMgAyANIA+hIg05A5AEIAMgAysDmAQgD6EiDzkDmAQLIAMgDzkDqAQgAyAOOQOgBCADIBA5A4gEIAMgDTkDgAQgAyADKALsA0GAgGBxQQRyIgc2AuwDIAMgBzYC6AEgACADQfADakEEIANB6AFqIAUQrAMMAQsgAyADKQPQBDcD4AEgAyADKQPIBDcD2AEgAyADKQPABDcD0AEgAyADKQO4BDcDyAEgACADQcgBaiAFEIICCyADKAKABRAXCyAELQAhBEAgAyADKQPQBDcDwAEgAyADKQPIBDcDuAEgAyADKQPABDcDsAEgAyADKQO4BDcDqAEgACAEIANBqAFqEIcPCyAEKAJYIQUCQAJAAkAgBC0AXEEBaw4DAAIBAgsgACAFIAIQiw8MAgsgBSsDECEOIAUrAxghDyACKwMAIQ0gBSsDACEQIAMgBSsDCCACKwMIIhKgIhE5A6gFIAMgECANoCIQOQOgBSADIA8gEqAiDzkDiAUgAyAOIA2gIg05A4AFIAMgETkDuAUgAyANOQOwBSADIA85A5gFIAMgEDkDkAUgBSgCJCIHRQRAIAIoAjghBwsgBSgCICIFRQ0FIAUtAABFDQYgACAFIANBgAVqQQRBASAHQcezARDjCAwBCyAAIAUgAhCKDwsgCUUEQCAAIANB3ARqEPAFCwJAIAhFDQAgAC0AmAFBBHFFDQAgAyADKQPQBDcDoAEgAyADKQPIBDcDmAEgAyADKQPABDcDkAEgAyADKQO4BDcDiAEgACACIAQgA0GIAWogA0HcBGoiBxDxBUUNACAAIAcQ8AULIAZBBGohBgwBCwsgASgCVCEIIABEAAAAAAAA8D8QgAIDQCAIKAIAIgQEQCAIQQRqIQggBC0AZEUNASAIKAIAIQkgAisDACEQIAIrAwghDSAAIAEoAhgiBkHt9AAgBhsiBhBYIAAgBhBFIA0gBCsDOKAhDyAQIAQrA0CgIRIgBCsDMCETAkAgBC0AZCIGQQFxRQ0AIAQoAmAiBSgCaCAELwFQIAQvAVRqTQ0AIA0gBCsDSKAhFAJAIAQvAVYiBkUEQCAPIAUsACAiBkECbcAiB7ciDqEhDSAHIAUtACFqtyERDAELIAUoAmQgBC8BUiAGakYEQCAPIAUsACAiBkECbcAiB7ciDqEgByAFLQAharciEaEhDQwBCyAPIAUsACAiBkECbcC3Ig6hIQ1EAAAAAAAAAAAhEQsgAyANOQOIBSADIBIgDqAiDjkDkAUgAyANIBQgEaAgD6EgBregoDkDmAUgAyADKQOIBTcDcCADIAMpA5AFNwN4IAMgAykDmAU3A4ABIAMgDjkDgAUgAyADKQOABTcDaCAAIANB6ABqQQEQggIgBC0AZCEGCyAGQQJxRQ0BIAQoAmAiBigCZCAELwFWIgcgBC8BUmpNDQEgECAToCERAkAgBC8BVCIFRQRAIBEgBiwAICIFQQJtwCIMIAYtACFqtyINoSAMtyIOoSETIAYoAmggBC8BUEYEQCANIA2gIQ0MAgsgCUUNASAJLwFWIAdGDQEgECAGKwNAoCASIA6goSANoCENDAELIAYoAmggBC8BUCAFakYEQCARIAYsACAiBUECbcAiBLciDqEhEyAEIAYtACFqtyENDAELIBEgBiwAICIFQQJtwLciDqEhE0QAAAAAAAAAACENIAlFDQAgCS8BViAHRg0AIBAgBisDQKAgEiAOoKFEAAAAAAAAAACgIQ0LIAMgDyAOoSIOOQOIBSADIA5EAAAAAAAAAACgOQOYBSADIBM5A4AFIAMgEyASIA2gIBGhIAW3oKA5A5AFIAMgAykDiAU3A1AgAyADKQOYBTcDYCADIAMpA5AFNwNYIAMgAykDgAU3A0ggACADQcgAakEBEIICDAELCyABLQAhRQ0AIANBQGsgAykD4AM3AwAgAyADKQPYAzcDOCADIAMpA9ADNwMwIAMgAykDyAM3AyggACABIANBKGoQhw8LIAtFBEAgACADQaQDahDwBQsCQCAKRQ0AIAAtAJgBQQRxRQ0AIAMgAykD4AM3AyAgAyADKQPYAzcDGCADIAMpA9ADNwMQIAMgAykDyAM3AwggACACIAEgA0EIaiADQaQDaiIHEPEFRQ0AIAAgBxDwBQsgASgCbARAIAJBqI8LEIUPCyADQcAFaiQADwtBxrIBQdy8AUH0BEH/gQEQAAALQeHEAUHcvAFB9QRB/4EBEAAAC4EBAgJ/AnwjAEEQayIBJAAgAC0ABEEBayICQf8BcUEDTwRAIAFB7QU2AgQgAUHcvAE2AgBB6PoGKAIAQdaxBCABEB0aEG4ACyAAKAIAIgAgAkECdEH8B3EiAkGEjgVqKAIAaisDACEDIAAgAkH4jQVqKAIAaisDACABQRBqJAAgA6ELDwBB0JsKQezJCigCABB/CxMAIAAoAlQQeRogABDvBSAAEBcLJQEBfwNAIAAtAAAiAUUEQEEADwsgAEEBaiEAIAFBIEYNAAtBAQswACAAEJIPAkAgABAlBEAgAEEAOgAPDAELIABBADYCBAsgABAlBH8gAAUgACgCAAsL9wEBBX8jAEEQayIEJABBKBBNIQFBkI8LKAIAIgUQhwEhAyABIAA6ABACQAJAIAMEQCABIAM2AgwgASADQTgQGCIDNgIIIAUQiAEhAANAIABFDQIgAyACQThsaiAAQQhqQTgQIBogAkEBaiECIAAoAgAhAAwACwALQTgQTSEAIAFBATYCDCABIAA2AghB5fQEEKQBIgJFDQEgACACNgIAIABBnI8LKAIAKAIANgIECyAFQQBBwAAgBSgCABEDABpBlI8LKAIAIgAgAUEBIAAoAgARAwAaIARBEGokAA8LIARBATYCAEHo+gYoAgBBqd0DIAQQHRoQJgAL0QIBBX8jAEEQayIEJAACQAJAIAAQISAAEDhPBEAgABA4IgNBAWoiASADQQF0QYAIIAMbIgIgASACSxshASAAECEhBQJAIAAtAA9B/wFGBEAgA0F/Rg0DIAAoAgAhAiABRQRAIAIQF0EAIQIMAgsgAiABED0iAkUNBCABIANNDQEgAiADakEAIAEgA2sQMxoMAQsgAUEBEBgiAiAAIAUQIBogACAFNgIECyAAQf8BOgAPIAAgATYCCCAAIAI2AgALIAAQISEBAkAgABAlBEAgACABakEAOgAAIAAgAC0AD0EBajoADyAAECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgACgCACABakEAOgAAIAAgACgCBEEBajYCBAsgBEEQaiQADwtBkbQDQd79AEHNAEGTswEQAAALIAQgATYCAEHo+gYoAgBBqd0DIAQQHRoQJgALuwEBBn9BlI8LKAIAIQFBMBBNIQJBkI8LKAIAEIcBBEBBABCRDwsgAiABEIcBIgA2AgQCQCAARQ0AIAIgAEEgEBgiBTYCACABQQBBgAEgASgCABEDACEAA0AgAEUNASAFIANBBXRqIgQgACkDCDcDACAEIAApAyA3AxggBCAAKQMYNwMQIAQgACkDEDcDCCADQQFqIQMgASAAQQggASgCABEDACEADAALAAsgAUEAQcAAIAEoAgARAwAaIAILGAEBf0EIEE0iAiAANgIAIAIgAToABCACC+oBAQR/IwBBEGsiBCQAIAEoAhBBxM4KKAIAQQFqNgKwASAABEACQCAAKAIEIgIgACgCCEcEQCAAKAIAIQMMAQsCQCAEIAJBAXRBASACGyICQf////8DSwR/QcQABSAAKAIAIAJBAnQQPSIDDQFBMAsQowE2AgBB6PoGKAIAQbv0AyAEEB0aECYACyADIAAoAggiBUECdGpBACACIAVrQQJ0EDMaIAAgAjYC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ajYCHAsCQAJAAkACQCAJQQFxBEAgABCXBiABEBohAgNAIAIEQCAAIAIQ7QMgASACEBshAgwBCwsgABCWBiAAEJUGIAEQGiEDA0AgA0UNAiABIAMQKSECA0AgAgRAIAAgAhDKBCABIAIQLCECDAELCyABIAMQGyEDDAALAAsgCUEQcQRAIAAQlQYgARAaIQMDQCADBEAgASADECkhAgNAIAIEQCAAIAIQygQgASACECwhAgwBCwsgASADEBshAwwBCwsgABDpCCAAEJcGIAEQGiECA0AgAkUNBCAAIAIQ7QMgASACEBshAgwACwALIAlBCHFFDQEgABCXBiABEBohBQNAQQEhAiAFBEACQANAIAEoAhAiAygCtAEgAk4EQCACQQJ0IAJBAWohAiADKAK4AWooAgAgBRCrAUUNAQwCCwsgACAFEO0DCyABIAUQGyEFDAELCyAAEJYGIAAQlQYgARAaIQYDQCAGRQ0BIAEgBhApIQUDQEEBIQIgBQRAAkADQCABKAIQIgMoArQBIAJOBEAgAkECdCACQQFqIQIgAygCuAFqKAIAIAUQqwFFDQEMAgsLIAAgBRDKBAsgASAFECwhBQwBCwsgASAGEBshBgwACwALIAAQ6QgMAgsgARAaIQMDQCADRQ0CIAAgAxDtAyABIAMQKSECA0AgAgRAIAAgAkFQQQAgAigCAEEDcUECRxtqKAIoEO0DIAAgAhDKBCABIAIQLCECDAELCyABIAMQGyEDDAALAAsgABCWBgsgEARAIAAgASAJEPgFCwJAIAAoAjwiAkUNACACKAIcIgJFDQAgACACEQEACyALBEAgByALNgLcAQsgBEGgAWoQZiAPEM4CEBcgDxAXIAAgACgAxAEgACgAvAFqIgKtIAAoAMgBIAAoAMABaiIDrUIghoQ3AsQBIAAQqA8NAAJAIAAoArgBIgUEQCAAKAKsASECDAELIAAoArABIQMLIAAgACgAtAEgAmoiAq0gAyAFaq1CIIaENwLEAQwACwALCwJAIAAoAjwiAUUNACABKAIMIgFFDQAgACABEQEACwJAIAAoAkwiAUUNACABKAIEIgFFDQAgACABEQEACyAAEJkGGiAAEPEDIARB4AFqJAALywECAX8CfCMAQeAAayIBJAAgASAAKQMINwNYIAEgACkDADcDUCABIAApAzg3A0ggASAAKQMw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IABBm9AEIANB8ABqEBwgA0KAgICAgICA+D83A2AgAyAIOQNYIAMgBTkDUCAAQZPGBCADQdAAahAcIANBQGsgACgC6AKyuzkDACADQgA3AzggA0IANwMwIABB78UEIANBMGoQHCADQdiHCygCADYCICADIAY5AxAgAyAHOQMYIABBjscEIANBEGoQHCADIAE2AgAgAEHjwAMgAxAcIAEQFwsgA0HgAmoQZiADQfACaiQAC+gDAgN/BnwjAEHQAWsiAyQAIAIoAgAhBCACKAIEIgUrAxAhBiADIAUoAgA2ArABIAMgBjkDqAEgAyAENgKgASAAQc7xAyADQaABahAcQdiHC0HUhwsoAgBBCWs2AgACfCABKwMAIgYgAi0AMCIEQewARg0AGiAEQfIARgRAIAYgAisDIKEMAQsgBiACKwMgRAAAAAAAAOC/oqALIQYgACsD8AMhByAAKwOABCEIIAErAwghCSAAKwPoAyEKIAArA/gDIQsgA0H4AGoiASAAKAIQQRBqQSgQIBogAUMAAAAAEIYDIQEgA0IANwPIASADQgA3A8ABIAIoAgQoAgAhBCACKAIAIQUgA0IANwNwIANCgICAgICAgOg/NwNoIAMgBTYCZCADIAQ2AmAgA0HAAWoiBEGNzwMgA0HgAGoQVCADIAIoAgQrAxAgACsD6AOiOQNQIARBxpgEIANB0ABqEFQgA0FAayAAKALoArK7OQMAIANCADcDOCADQgA3AzAgBEHvxQQgA0EwahBUIANB2IcLKAIANgIgIAMgCiAGIAugojkDECADIAcgCSAIoKI5AxggBEGOxwQgA0EQahBUIAMgATYCACAEQePAAyADEFQgACAEEOAEEBkaIAQQZiABEBcgA0HQAWokAAscACAAQeOkBBAZGkHUhwtB1IcLKAIAQQVqNgIACxwAIABB0aQEEBkaQdSHC0HUhwsoAgBBBWs2AgALCQAgACABELUNCwsAIABB/KYEEBkaCy0BAX8jAEEQayIBJAAgASAAKAIQKAIIEB42AgAgAEGl9AMgARAcIAFBEGokAAsLACAAQc36AxAZGgscACAAQbj6AxAZGkHUhwtB1IcLKAIAQQJrNgIACwsAIABBsqYEEBkaCwsAIABBoKYEEBkaCwsAIABBxfkDEBkaCz8BAX8jAEEQayIEJAAgBCADNgIIIAQgATYCACAE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AGtBGUsNAEEAIQEgBEGhlgEQKkUNACAEQfqTARAqRQ0AQQEhASAEQdnxABAqRQ0AIARB34oBECpFDQAgBEGKLhAqRQ0AQQFBAiAEQf4ZECobIQELIAIgATYCPCAAQdENECMQaiEBIAIgAi0ALEH7AXFBBEEAIAEbcjoALCACIABB/vIAECNBARCKCDoAOCACIAAgAEEAQc/iAEEAEB9EAAAAAAAAAABE////////7/8QUzkDSCACIAAgAEEAQf2XAUEAEB9BAEEAEFAiATYCUCABQQVOBEAgAyABNgIgQfyJBCADQSBqECcgAkEANgJQCyAAIANB6ABqELEKIANCnI7H4/G4nNY/NwNgIANCnI7H4/G4nNY/NwNYAkAgAygCaEESRyAFQQJHckUEQCACIAMoAnA2AjQgAiADKwN4OQNAIANBMGogABDdAkEBIQYgAy0AQEEBcUUNASADKwMwIQggAyADKwM4RAAAAAAAAFJAozkDYCADIAhEAAAAAAAAUkCjOQNYDAELIAJBfzYCNCAFQQJHIQYLQYCLCy0AAARAIwBB4AFrIgEkAEGMzARBG0EBQej6BigCACIEEEoaIAEgAisDADkD0AEgBEHtlwQgAUHQAWoQLSACLQAsIQUgASACKAIoNgLEASABIAVBAXE2AsABIARBm7gEIAFBwAFqEB0aIAIrAwghCCABQpqz5syZs+bkPzcDuAEgASAIOQOwASAEQYqYBCABQbABahAtIAEgAigCEDYCoAEgBEGntAQgAUGgAWoQHRogASACKAIUNgKUASABQS02ApABIARBk7UEIAFBkAFqEB0aIAEgAigCGDYCgAEgAUL808aX3cmYqD83A3ggAUKz5syZs+bM8T83A3AgBEHAtAQgAUHwAGoQLSACKwMgIQggASACLQAsQQF2QQFxNgJgIAEgCDkDWCABQs2Zs+bMmbP2PzcDUCAEQdi2BCABQdAAahAtIAItACwhBSABIAIrA0g5A0ggAUEANgJEIAEgBUECdkEBcTYCQCAEQbiXBCABQUBrEC0gAigCMCEFIAIoAjQhByACKwNAIQggASACLQA4NgIwIAEgCDkDKCABIAc2AiQgASAFQQJ0QYD3BGooAgA2AiAgBEGXtgQgAUEgahAtIAEgAigCPEECdEGg9wRqKAIANgIQIARBgu4DIAFBEGoQHRogASAC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KAIsIgZKDQBBASECIAAoAigiByABKAIgIghIDQAgACgCDCABKAIMayABKAIoIAcgCCAAKAIgamtqQQJtaiAEIAZqIAMgBWprQQJtIAEoAhAiASAAKAIQIgBrIAAgAWsgACABShtqTCECCyACCyABAX8gACgCICABKAIoTAR/IAEoAiAgACgCKEwFQQALCyABAX8gACgCJCABKAIsTAR/IAEoAiQgACgCLEwFQQALC0gBAnwCf0F/IAAoAgAiACsDCCICIAEoAgAiASsDCCIDYw0AGkEBIAIgA2QNABpBfyAAKwMAIgIgASsDACIDYw0AGiACIANkCwtOAQJ/IAAQGiIBBEADQCABBEAgACABECkhAgNAIAIEQCACEMoCIAAgAhAsIQIMAQsLIAEQ/AIgACABEBshAQwBCwsgACgCECgCmAEQFwsL1wYCCX8BfCMAQdAAayICJAAgABA1BEAgACIBQQIQjQIgABA0KAIQQQI7AbABQbyLC0ECOwEAIAAQNSIAQTgQGCEFIABBAWpBBBAYIQAgASgCECAANgKYASABEBohAANAIAAEQCAAEIwEIAAoAhAgBSADQThsajYCgAEgASgCECgCmAEgA0ECdGogADYCACADQQFqIQMgASAAEBshAAwBCwsgARAaIQMDQCADBEAgASADECkhAANAIAAEQCAAQfklQbgBQQEQLhogABCpAyAAQaCNCygCAEQAAAAAAADwP0QAAAAAAAAAABBTIQogACgCECAKOQOAASABIAAQLCEADAELCyABIAMQGyEDDAELCwJ/QQEgAUGsGxAjIgBFDQAaIAAtAAAEQEEBIAEgAEEAEHMiBA0BGiACIAA2AhBBpJcDIAJBEGoQJ0GMpwRBABB8C0EAIQRBAAshCCABQQFBrBtBABAfIQMCQCABQeqbARAjIgBFDQAgAC0AAEUNACACIAJByABqNgIEIAIgAkFAazYCACAAQdOEASACEElBAUcNACACIAIrA0A5A0gLIAEQNQRAIAEgAkE8ahCIBiEHAkAgAigCPEEBRgRAAkAgBCIADQAgAwRAIAEgAxC1CiIADQELQQAhAAsgBCABIAAQugoiBSAEGyEGIANFIAByRQRAIAUgA0HuiAMQaAsgBCAGIAgbIQQgARAaIgAoAhAoAoABEBcgACgCEEEANgKAASABEJIEGgwBCyABQQJB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IQgLA0AgCSIFIAgiBkcEQCADQdAAaiIIIAVBACACIAEQkQUgCCAGIARBACABEJEFIAYoAhAoAowBKAIwIQggBSgCECgCjAEoAjAhCSAFIQIgBiEEDAELCyADQdAAaiIFIAYgBCACIAEQkQUgAygCVEEASA0BAkACQCAFEPQGIAMoAlQQnQoEQCAHIQIgBRD0BiADKAJUEPoNIgsNAkEAIQtB1t8DQQAQJwwBCyAMDQAgA0E4aiAAEN0CIABBCEEIENIEIQJB+OADQQAQJyABKwMAIg0gArciDmYgDiABKwMIIg9lcgRAIAMgDzkDMCADIA05AyggAyACNgIgQaDjBCADQSBqEHwMAQsgAysDOCIQIA1lIAMrA0AiDiAPZXJFDQAgAyAPOQMYIAMgDTkDECADIA45AwggAyAQOQMAQdLjBCADEHwLQQEhDAwECwNAIAJFDQQgAigCECADQThqIAIgC0EAEPUJIAMpAzg3A5ABIAMoAlRBAEgNAyACIANB0ABqEPQGIAMoAlRBABD0CSACKAIQKAKwASECDAALAAsgACAKEBshCgwGC0HbyAFBgbkBQeEBQcowEAAAC0HbyAFBgbkBQYECQcowEAAACyADQdAAaiICRQRAQYPPAUGBuQFBIUGrngEQAAALIAJBADYCBCACKAIAEBcgAkEANgIIIAJCADcCAAsgACAHECwhBwwACwALCyALBEAgCxD5DQsgA0HgAGokACAMC1sBAn8gABAaIQEDQCABBEAgACABECkhAgNAIAIEQCACEMoCIAAgAhAsIQIMAQsLIAEQ/AIgACABEBshAQwBCwsgABDMCiAAKAIQKAKYARAXIAAoAhAoAowBEBcLSAECfyAAEBohAQNAIAEEQCAAIAEQKSECA0AgAgRAIAIQygIgACACECwhAgwBBSABEPwCIAAgARAbIQEMAwsACwALCyAAEM0KC5YCAQN/IABBAhCNAiAAKAIQQQI7AbABQbyLC0ECOwEAIAAQGiEBA0AgAQRAIAEQjAQgACABEBshAQwBCwsgABAaIQIDQCACBEAgACACECkhAQNAIAEEQCABQfklQbgBQQEQLhogARCpAyAAIAEQLCEBDAELCyAAIAIQGyECDAELCyAAQQAQ9QYgAEEAENAKIABBABDPCgJAIAAoAhAiASgCCCgCVARAIAAQGiEBA0AgAQRA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BH9BAEF/IAArAwggASsDCGYbBUEACwtSAQN/IAAoAiQhAgNAIAIoAgQhAyACKAIAIAFNBEAgAxAXIAIQFwUgAyABQQxsaigCCBB5GiABQQFqIQEMAQsLIABBADYCHCAAKAIYEBcgABAXCyABAnxBAUF/QQAgACsDACICIAErAwAiA2MbIAIgA2QbCw4AIAAoAhAQeRogABAXCx4AQQFBf0EAIAAoAgAiACABKAIAIgFIGyAAIAFKGwtaAgF8AX9BfyAAKwMIIAErAwihIgJESK+8mvLXej5kIAJESK+8mvLXer5jGyIDBH8gAwVBfyAAKwMAIAErAwChIgJESK+8mvLXej5kIAJESK+8mvLXer5jGwsLWgIBfAF/QX8gACsDACABKwMAoSICREivvJry13o+ZCACREivvJry13q+YxsiAwR/IAMFQX8gACsDCCABKwMIoSICREivvJry13o+ZCACREivvJry13q+YxsLCz4BAn8Cf0F/IAAoAgAiAiABKAIAIgNJDQAaQQEgAiADSw0AGkF/IAAoAgQiACABKAIEIgFJDQAaIAAgAUsLCzAAQRgQTSIBIAAoAgg2AgggASAAKAIMNgIMIAEgACgCEDYCECABIAAoAhQ2AhQgAQtjAQN/IwBBEGsiAiQAIAJBCGogASgCAEEAEMQBAkAgACgAACACKAIIIAAoAAQiASACKAIMIgMgASADSSIEGxDXASIADQBBASEAIAEgA0sNAEF/QQAgBBshAAsgAkEQaiQAIAALDQAgAEEAIAEgAhAfGguEAQECfyMAQRBrIgIkAEEBQSAQRiIBBEAgACgCACIDBEAgASADEGE2AgALIAAoAgQiAwRAIAEgAxBhNgIECyABIAAoAhhB/wBxNgIYIAEgACsDEDkDECABIAAoAgg2AgggAkEQaiQAIAEPCyACQSA2AgBB6PoGKAIAQandAyACEB0aECYACxQAIAAoAgAQFyAAKAIEEBcgABAXC6gBAgN/AnwgASgCACECAkACQAJAAkAgACgCACIDRQRAIAJFDQEMBAsgAkUNAiADIAIQQyICDQELIAEoAgQhAgJAIAAoAgQiA0UEQCACDQQMAQsgAkUNAiADIAIQQyICDQELQX8hAiAAKAIYQf8AcSIDIAEoAhhB/wBxIgRJDQAgAyAESw0BIAArAxAiBSABKwMQIgZjDQAg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CxcAIAAoAgBBB0YEQCAAKAJwQQEQ+A4LCwoAIAAgAUEBEHMLCwBB2IsLIAA2AgALC8KGCqMDAEGACAvl7AT/2P/gAMXQ08YAfgB7JXN9ACAtdGFncyB7JWQlcyVwfQAgJS4wZn0AJXMgeyAlcyB9AHxlZGdlbGFiZWx8ACAtZm9udCB7AHF1YXJ0egBpZHggPT0gc3oAY250ID09IHN6AGxvegBncmFwaHZpegBndndyaXRlX25vX3oAcG9ydGhveHkAc2NhbGV4eQAvc3ZnL25hdnkAaW52ZW1wdHkAbm9kZV9zZXRfaXNfZW1wdHkAbm9kZV9zdGFja19pc19lbXB0eQByZWZlcmVuY2UgdG8gYmluYXJ5IGVudGl0eQBhc3luY2hyb25vdXMgZW50aXR5AGluY29tcGxldGUgbWFya3VwIGluIHBhcmFtZXRlciBlbnRpdHkAZW50aXR5IGRlY2xhcmVkIGluIHBhcmFtZXRlciBlbnRpdHkAY2Fubm90IHN1c3BlbmQgaW4gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eQBYTUwgb3IgdGV4dCBkZWNsYXJhdGlvbiBub3QgYXQgc3RhcnQgb2YgZW50aXR5AHVuZGVmaW5lZCBlbnRpdHkAaW5maW5pdHkAZmFudGFzeQBTcGFyc2VNYXRyaXhfY29vcmRpbmF0ZV9mb3JtX2FkZF9lbnRyeQAvc3ZnL2l2b3J5AG91dCBvZiBtZW1vcnkARmVicnVhcnkASmFudWFyeQBndnBsdWdpbl9kb3RfbGF5b3V0X0xUWF9saWJyYXJ5AGd2cGx1Z2luX25lYXRvX2xheW91dF9MVFhfbGlicmFyeQBndnBsdWdpbl9jb3JlX0xUWF9saWJyYXJ5AGdhdGhlcl90aW1lX2VudHJvcHkAbm9kZXNfY29weQBhbGJhbnkASnVseQBTcGFyc2VNYXRyaXhfbXVsdGlwbHkAZXF1YWxseQBhc3NlbWJseQBzdW1tZXJza3kAc2h5AHNhdGlzZnkAYmVhdXRpZnkAbm9qdXN0aWZ5AENsYXNzaWZ5AC9zdmcvbGlnaHRncmV5AC9zdmcvZGltZ3JleQAvc3ZnL2RhcmtncmV5AC9zdmcvbGlnaHRzbGF0ZWdyZXkAL3N2Zy9kYXJrc2xhdGVncmV5AC9zdmcvc2xhdGVncmV5AHdlYmdyZXkAeDExZ3JleQAvc3ZnL2dyZXkAbW92ZSB0byBmcm9udCBsb2NrIGluY29uc2lzdGVuY3kAZXh0cmFjdF9hZGphY2VuY3kAbWVyZ2Vfb25ld2F5AGFycmF5AGFsbG9jQXJyYXkAL3N2Zy9saWdodGdyYXkAL3N2Zy9kaW1ncmF5AC9zdmcvZGFya2dyYXkAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyYXkAd2ViZ3JheQB4MTFncmF5AC9zdmcvZ3JheQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkALi4vLi4vbGliL2NncmFwaC9ncmFtbWFyLnkAJW0vJWQvJXkAcG9ydGhveXgAcG9ydGhvX3l4AHh4eABib3gAdmlld0JveABjaGtCb3VuZEJveAAvTWVkaWFCb3gAZ2V0X2VkZ2VfbGFiZWxfbWF0cml4AGlkZWFsX2Rpc3RhbmNlX21hdHJpeABtdXN0IG5vdCB1bmRlY2xhcmUgcHJlZml4AHVuYm91bmQgcHJlZml4AGh0bWxsZXgAbm9kZV9zZXRfaW5kZXgAbWF4ACMlMDJ4JTAyeCUwMnglMDJ4ACMlMDJ4JTAyeCUwMngAIyUyeCUyeCUyeCUyeAAjJTF4JTF4JTF4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAcmFycm93AGxhcnJvdwBIZWx2ZXRpY2EtTmFycm93AGFycm93X2xlbmd0aF9jcm93AC9zdmcvc25vdwBzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfc2xvdwAvc3ZnL2xpZ2h0eWVsbG93AC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL3llbGxvdwBmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93AGZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3cAY291cmllcm5ldwBTcHJpbmdTbW9vdGhlcl9uZXcAVHJpYW5nbGVTbW9vdGhlcl9uZXcAZGlhZ19wcmVjb25fbmV3AFF1YWRUcmVlX25ldwBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcjJfbmV3AHIgJiYgbiAmJiBuZXcAc2tldwBzdHJ2aWV3AC9zdmcvaG9uZXlkZXcAIC1hbmNob3IgdwBzb3J0dgBwb3Y6cG92AE5vdgBpbnYAZXF1aXYAcGl2AG5vbmFtZS5ndgBjYyVzXyV6dQBjYyVzKyV6dQAvc3ZnL3BlcnUAbnUAbXUAJWMlbGx1AFRodQB0YXUAVGF1AE51AE11AF9wb3J0XyVzXyglZClfKCVkKV8ldQBwbGFpbnRleHQAPHRleHQAc3RyZXNzd3QAaW5wdXQAdGV4dGxheW91dABkb3RfbGF5b3V0AG5lYXRvX2xheW91dABpbml0TGF5b3V0AGNsdXN0AG1hcENsdXN0AGxhYmVsanVzdABzY0FkanVzdABBdWd1c3QAZWRnZXNmaXJzdABub2Rlc2ZpcnN0AG1heGltYWxfaW5kZXBlbmRlbnRfZWRnZV9zZXRfaGVhdmVzdF9lZGdlX3Blcm5vZGVfc3VwZXJub2Rlc19maXJzdABleGlzdAByZWFsaWduTm9kZWxpc3QAYXBwZW5kTm9kZWxpc3QAZGVmYXVsdGRpc3QAbWluZGlzdABwb3dlcl9kaXN0AGdyYXBoX2Rpc3QAYXZnX2Rpc3QAZ2V0RWRnZUxpc3QAaXF1ZXN0AGxvd2FzdABzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfZmFzdABndl9zb3J0AGRlZ2xpc3Rfc29ydAB2aWV3cG9ydAB0YWlscG9ydAB1bmV4cGVjdGVkIHBhcnNlciBzdGF0ZSAtIHBsZWFzZSBzZW5kIGEgYnVnIHJlcG9ydABoZWFkcG9ydABpbnNlcnQAUlRyZWVJbnNlcnQAZmluZFNWZXJ0AHN0YXJ0AHBhcnQAZXN0aW1hdGVfdGV4dF93aWR0aF8xcHQAcXVvdAB/cm9vdABub3QAZW1pdF94ZG90AHhkb3Q6eGRvdABlcHM6eGRvdABzdmc6eGRvdABqcGc6eGRvdABwbmc6eGRvdABqcGVnOnhkb3QAZ2lmOnhkb3QAanBlOnhkb3QAeGRvdDEuNDp4ZG90AHhkb3QxLjI6eGRvdABzZG90AG1pZGRvdABndjpkb3QAcGxhaW4tZXh0OmRvdABkb3Q6ZG90AGVwczpkb3QAY2Fub246ZG90AHBsYWluOmRvdABzdmc6ZG90AGpwZzpkb3QAcG5nOmRvdABqcGVnOmRvdABnaWY6ZG90AGpwZTpkb3QAf2JvdABkb0RvdABvYmpsaXN0X2Zyb250AG5vZGVsaXN0X2Zyb250AHBvaW50c19mcm9udABzcGFuLT5mb250AHZhZ3hicHJpbnQAbG9jYXRlX2VuZHBvaW50AGRlY2lkZV9wb2ludABVbnNhdGlzZmllZCBjb25zdHJhaW50AHRyYW5zcGFyZW50AGNvbXBvbmVudABpbnZhbGlkIGFyZ3VtZW50AGNvbW1lbnQAanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50AGNlbnQAaSA9PSBlY250AGFyaWFsbXQAbHQAY2lyY3VpdABwb2x5X2luaXQATXVsdGlsZXZlbF9pbml0AG5zbGltaXQAbWNsaW1pdABQb3J0cmFpdABsaWdodAB2aXJ0dWFsX3dlaWdodABsaGVpZ2h0AEtQX1JpZ2h0AEJvb2ttYW4tTGlnaHQAZ3QAS1BfTGVmdABhZ3hzZXQAY2hhcnNldABpbnNldABiaXRhcnJheV9yZXNldABzdWJzZXQAYml0YXJyYXlfc2V0AG5vZGVsaXN0X3NldABpbnRzX3NldABub2Rlc19zZXQAc2NhcmxldAAvc3ZnL2Rhcmt2aW9sZXQAL3N2Zy9ibHVldmlvbGV0AC9zdmcvdmlvbGV0AFRyZWJ1Y2hldABhZ3hnZXQAdGFpbHRhcmdldABsYWJlbHRhcmdldABlZGdldGFyZ2V0AGhlYWR0YXJnZXQAYml0YXJyYXlfZ2V0AG5vZGVsaXN0X2dldABzZWdfbGlzdF9nZXQAc2FtZV9saXN0X2dldABlZGdlX2xpc3RfZ2V0AHBvaW50c19nZXQAYm94ZXNfZ2V0AHRyaWFuZ2xlc19nZXQAY3ljbGVzX2dldABub2Rlc19nZXQAYmV6aWVyX3BhdGhfZ2V0AHN0eWxlc2hlZXQAc3RyaWN0AGFnY29weWRpY3QAYWdtYWtlZGF0YWRpY3QAcmVjLT5kaWN0ID09IGRhdGFkaWN0AHdyaXRlX2RpY3QAc2VjdABlbmNvZGluZyBzcGVjaWZpZWQgaW4gWE1MIGRlY2xhcmF0aW9uIGlzIGluY29ycmVjdABhc3BlY3QAbGF5ZXJzZWxlY3QAQ29tYmluZVJlY3QAS1BfU3VidHJhY3QAUXVhZFRyZWVfcmVwdWxzaXZlX2ZvcmNlX2ludGVyYWN0AGNvbXBhY3QAT2N0AHJlcXVlc3RlZCBmZWF0dXJlIHJlcXVpcmVzIFhNTF9EVEQgc3VwcG9ydCBpbiBFeHBhdABsYWJlbGZsb2F0AGxhYmVsX2Zsb2F0AFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfZm9ybWF0AC9zdmcvd2hlYXQAb2JqbGlzdF9hdABub2RlbGlzdF9hdABzYW1lX2xpc3RfYXQAcG9pbnRzX2F0AHRyaWFuZ2xlc19hdABub2Rlc19hdABTYXQAQWdyYXBoaW5mb190AEFnZWRnZWluZm9fdABBZ25vZGVpbmZvX3QAXHQAZmxhdGluZGV4KGFnaGVhZChlKSkgPCBNLT5ucm93cwBtaW51cwBvcGx1cwBoZWFydHMAc2FtcGxlcG9pbnRzAGRpcmVkZ2Vjb25zdHJhaW50cwBsZXZlbCBhc3NpZ25tZW50IGNvbnN0cmFpbnRzAHh5IHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHl4IHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHh5IG9ydGhvZ29uYWwgY29uc3RyYWludHMAeXggb3J0aG9nb25hbCBjb25zdHJhaW50cwBsaW5lIHNlZ21lbnRzAHJlY3RzAGFjY291bnRpbmdSZXBvcnRTdGF0cwBlbnRpdHlUcmFja2luZ1JlcG9ydFN0YXRzAFphcGZEaW5nYmF0cwByZW1pbmNyb3NzAGNvbXByZXNzAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAGJyYXNzAGNsYXNzAGFwcGx5YXR0cnMAYWdtYWtlYXR0cnMAYmluZGF0dHJzAHBhcnNlX2xheWVycwBta0NsdXN0ZXJzAHJvdW5kX2Nvcm5lcnMAbWFrZV9iYXJyaWVycwBjZGF0YS5udG9wbGV2ZWwgPT0gYWdubm9kZXMoZykgLSBjZGF0YS5udmFycwBjYW5ub3QgcmVhbGxvYyBvcHMAY2Fubm90IHJlYWxsb2MgcG5scHMAZXBzAGNvcmVfbG9hZGltYWdlX3BzAGVwczpwcwBwczI6cHMAKGxpYik6cHMAZ3ZfdHJpbV96ZXJvcwBhZ3hidWZfdHJpbV96ZXJvcwB0ZXhneXJlaGVyb3MAaW1hZ2Vwb3MAdGlub3MAc2V0RWRnZUxhYmVsUG9zAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMAeGxpbnRlcnNlY3Rpb25zAGNvbHVtbnMAbm9kZXNfY29udGFpbnMAZGVqYXZ1c2FucwBuaW1idXNzYW5zAGxpYmVyYXRpb25zYW5zAGZyZWVzYW5zAE9wZW5TYW5zAG9mZnNldCA9PSBuX3Rlcm1zAGRpdGVtcwBkaWFtcwBmbGF0aW5kZXgoYWd0YWlsKGUpKSA8IE0tPm5jb2xzAGNhbm5vdCByZWFsbG9jIGRxLnBubHMAY2Fubm90IHJlYWxsb2MgcG5scwBsZXZlbHMAZm9yY2VsYWJlbHMAZGlhZ29uYWxzAG1lcmdlX3JhbmtzAGJ1aWxkX3JhbmtzAG9ianBscG1rcwBzcGxpdEJsb2NrcwBpbnZpcwBjYW5ub3QgcmVhbGxvYyB0cmlzAENhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzAHllcwBzaG93Ym94ZXMAYmVhdXRpZnlfbGVhdmVzAGF0dGFjaF9lZGdlX2xhYmVsX2Nvb3JkaW5hdGVzAHBvbHlsaW5lcwBzcGxpbmVzAG9ydGhvZ29uYWwgbGluZXMAdGV4Z3lyZXRlcm1lcwBvdGltZXMAVGltZXMAZm9udG5hbWVzAHByZWZpeCBtdXN0IG5vdCBiZSBib3VuZCB0byBvbmUgb2YgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBuYW1lcwBTcGFyc2VNYXRyaXhfc3VtX3JlcGVhdF9lbnRyaWVzAHBlcmlwaGVyaWVzAEdldEJyYW5jaGVzAGYgPCBncmFwaFtqXS5uZWRnZXMAbWlubWF4X2VkZ2VzAG1ha2VTdHJhaWdodEVkZ2VzAHVuZG9DbHVzdGVyRWRnZXMAY29tcG91bmRFZGdlcwBtZXJnZV90cmVlcwBfX2NsdXN0ZXJub2RlcwBhZ25ub2RlcwBORF9pZChucCkgPT0gbl9ub2RlcwBMb2FkTm9kZXMAc2lkZXMAc3BhZGVzAHZlcnRpY2VzAGNvb3JkcwBzZXRib3VuZHMAbWRzAGNkcwBtYWtlU2VsZkFyY3MAZW1pdF9lZGdlX2dyYXBoaWNzAGNsdWJzAGNvbnNvbGFzACVsZiUycwAKU3RyaW5nIHN0YXJ0aW5nOjwlLjgwcwAKU3RyaW5nIHN0YXJ0aW5nOiIlLjgwcwAgJS4qcwAlLipzJXMlcwBleHBhdDogQWNjb3VudGluZyglcCk6IERpcmVjdCAlMTBsbHUsIGluZGlyZWN0ICUxMGxsdSwgYW1wbGlmaWNhdGlvbiAlOC4yZiVzACAlczolcwBfXyVkOiVzAC8lcy8lcwAlcy0lcwAsJXMAIGZvbnQtZmFtaWx5PSIlcwAiIHN0cm9rZS1kYXNoYXJyYXk9IiVzACIgY2xhc3M9IiVzAHBvbHkgJXMAKCglZiwlZiksKCVmLCVmKSkgJXMgJXMAY29sb3IgJXMAIFRpdGxlOiAlcwAic3RyaWN0IjogJXMAciAmJiBzAGNvdXIAdXRyAGFwcGVuZGF0dHIAYWRkYXR0cgBiZWdpbnN0cgBzdHJ2aWV3X3N0cgBwb3ZfY29sb3JfYXNfc3RyAHZwc2MhPW51bGxwdHIAYmVuZFRvU3RyAHVhcnIAY3JhcnIAbGFycgBoYXJyAGRhcnIAdUFycgByQXJyAGxBcnIAaEFycgBkQXJyAHIgJiYgcnIAQXByAFNwYXJzZU1hdHJpeF9tdWx0aXBseV92ZWN0b3IAdGVybWluYXRvcgBpbnN1bGF0b3IAdGV4Z3lyZWN1cnNvcgBzeW50YXggZXJyb3IAbW9uZXlfZ2V0IGVycm9yAEVycm9yAHJmbG9vcgBsZmxvb3IAbGFiZWxmb250Y29sb3IAcGVuY29sb3IAZmlsbGNvbG9yAGJnY29sb3IAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBuZWlnaGJvcgBzdHlsZV9vcgBtcgByYW5rZGlyAHBhZ2VkaXIAbGF5ZXIATm9kZUNvdmVyAC9zdmcvc2lsdmVyAGNsdXN0ZXIAZXhwYW5kQ2x1c3RlcgBycHJvbW90ZXIAbHByb21vdGVyAGNlbnRlcgBtYXhpdGVyAHBhcnRpYWwgY2hhcmFjdGVyACEgcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIAZGtncmVlbmNvcHBlcgBjb29sY29wcGVyAGd2X3NvcnRfY29tcGFyX3dyYXBwZXIAdGFwZXIAb3ZlcmxhcF9iZXppZXIAZmlnX2JlemllcgBjb3VyaWVyAENvdXJpZXIAaGllcgBkYWdnZXIARGFnZ2VyAG91dHB1dG9yZGVyAHBvc3RvcmRlcgBmbGF0X3Jlb3JkZXIAY2VsbGJvcmRlcgBmaXhMYWJlbE9yZGVyAGN5bGluZGVyAC9zdmcvbGF2ZW5kZXIAcmVuZGVyAGZvbGRlcgBjbHVzdGVyX2xlYWRlcgBORF9VRl9zaXplKG4pIDw9IDEgfHwgbiA9PSBsZWFkZXIAT2N0b2JlcgByZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIgbnVtYmVyAE5vdmVtYmVyAFNlcHRlbWJlcgBEZWNlbWJlcgBtYWNyAGJyAHN0YXIAZmVsZHNwYXIAcmVndWxhcgBzYW1lX2xpc3RfY2xlYXIAaW9zX2Jhc2U6OmNsZWFyAGJydmJhcgBNYXIAXHIATkRfcmFuayh2KSA9PSByAHN0cmVxAHN0cnZpZXdfZXEAc3Rydmlld19zdHJfZXEAc3Rydmlld19jYXNlX3N0cl9lcQBzdHJ2aWV3X2Nhc2VfZXEAdnAAJSVCZWdpblByb2xvZwovRG90RGljdCAyMDAgZGljdCBkZWYKRG90RGljdCBiZWdpbgoKL3NldHVwTGF0aW4xIHsKbWFyawovRW5jb2RpbmdWZWN0b3IgMjU2IGFycmF5IGRlZgogRW5jb2RpbmdWZWN0b3IgMAoKSVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwKRW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQKCiUgU2V0IHVwIElTTyBMYXRpbiAxIGNoYXJhY3RlciBlbmNvZGluZwovc3Rhcm5ldElTTyB7CiAgICAgICAgZHVwIGR1cCBmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KICAgICAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9eyBwb3AgcG9wIH0gaWZlbHNlCiAgICAgICAgfSBmb3JhbGwKICAgICAgICAvRW5jb2RpbmcgRW5jb2RpbmdWZWN0b3IgZGVmCiAgICAgICAgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQKfSBkZWYKL1RpbWVzLVJvbWFuIHN0YXJuZXRJU08gZGVmCi9UaW1lcy1JdGFsaWMgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGQgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGRJdGFsaWMgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYSBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhLU9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYS1Cb2xkIHN0YXJuZXRJU08gZGVmCi9IZWx2ZXRpY2EtQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXIgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXItT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovQ291cmllci1Cb2xkIHN0YXJuZXRJU08gZGVmCi9Db3VyaWVyLUJvbGRPYmxpcXVlIHN0YXJuZXRJU08gZGVmCmNsZWFydG9tYXJrCn0gYmluZCBkZWYKCiUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCBncmFwaHZpeiAwIDAKL2Nvb3JkLWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYKL2RlZmF1bHQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgovY29vcmRmb250IGNvb3JkLWZvbnQtZmFtaWx5IGZpbmRmb250IDggc2NhbGVmb250IGRlZgoKL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYKL3NldF9zY2FsZSB7CiAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYKICAgICAgIHNjYWxlCn0gYmluZCBkZWYKCiUgc3R5bGVzCi9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmCi9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYKL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmCi9maWxsZWQgeyB9IGJpbmQgZGVmCi91bmZpbGxlZCB7IH0gYmluZCBkZWYKL3JvdW5kZWQgeyB9IGJpbmQgZGVmCi9kaWFnb25hbHMgeyB9IGJpbmQgZGVmCi90YXBlcmVkIHsgfSBiaW5kIGRlZgoKJSBob29rcyBmb3Igc2V0dGluZyBjb2xvciAKL25vZGVjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2VkZ2Vjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2dyYXBoY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmCi9ub3Bjb2xvciB7cG9wIHBvcCBwb3B9IGJpbmQgZGVmCgovYmVnaW5wYWdlIHsJJSBpIGogbnBhZ2VzCgkvbnBhZ2VzIGV4Y2ggZGVmCgkvaiBleGNoIGRlZgoJL2kgZXhjaCBkZWYKCS9zdHIgMTAgc3RyaW5nIGRlZgoJbnBhZ2VzIDEgZ3QgewoJCWdzYXZlCgkJCWNvb3JkZm9udCBzZXRmb250CgkJCTAgMCBtb3ZldG8KCQkJKFwoKSBzaG93IGkgc3RyIGN2cyBzaG93ICgsKSBzaG93IGogc3RyIGN2cyBzaG93IChcKSkgc2hvdwoJCWdyZXN0b3JlCgl9IGlmCn0gYmluZCBkZWYKCi9zZXRfZm9udCB7CglmaW5kZm9udCBleGNoCglzY2FsZWZvbnQgc2V0Zm9udAp9IGRlZgoKJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAovYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAoJL3RleHQgZXhjaCBkZWYKCS93aWR0aCBleGNoIGRlZgoJZ3NhdmUKCQl3aWR0aCAwIGd0IHsKCQkJW10gMCBzZXRkYXNoCgkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cKCQl9IGlmCglncmVzdG9yZQp9IGRlZgoKL2JveHByaW0gewkJCQklIHhjb3JuZXIgeWNvcm5lciB4c2l6ZSB5c2l6ZQoJCTQgMiByb2xsCgkJbW92ZXRvCgkJMiBjb3B5CgkJZXhjaCAwIHJsaW5ldG8KCQkwIGV4Y2ggcmxpbmV0bwoJCXBvcCBuZWcgMCBybGluZXRvCgkJY2xvc2VwYXRoCn0gYmluZCBkZWYKCi9lbGxpcHNlX3BhdGggewoJL3J5IGV4Y2ggZGVmCgkvcnggZXhjaCBkZWYKCS95IGV4Y2ggZGVmCgkveCBleGNoIGRlZgoJbWF0cml4IGN1cnJlbnRtYXRyaXgKCW5ld3BhdGgKCXggeSB0cmFuc2xhdGUKCXJ4IHJ5IHNjYWxlCgkwIDAgMSAwIDM2MCBhcmMKCXNldG1hdHJpeAp9IGJpbmQgZGVmCgovZW5kcGFnZSB7IHNob3dwYWdlIH0gYmluZCBkZWYKL3Nob3dwYWdlIHsgfSBkZWYKCi9sYXllcmNvbG9yc2VxCglbCSUgbGF5ZXIgY29sb3Igc2VxdWVuY2UgLSBkYXJrZXN0IHRvIGxpZ2h0ZXN0CgkJWzAgMCAwXQoJCVsuMiAuOCAuOF0KCQlbLjQgLjggLjhdCgkJWy42IC44IC44XQoJCVsuOCAuOCAuOF0KCV0KZGVmCgovbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmCgovc2V0bGF5ZXIgey9tYXhsYXllciBleGNoIGRlZiAvY3VybGF5ZXIgZXhjaCBkZWYKCWxheWVyY29sb3JzZXEgY3VybGF5ZXIgMSBzdWIgbGF5ZXJsZW4gbW9kIGdldAoJYWxvYWQgcG9wIHNldGhzYmNvbG9yCgkvbm9kZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZWRnZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZ3JhcGhjb2xvciB7bm9wY29sb3J9IGRlZgp9IGJpbmQgZGVmCgovb25sYXllciB7IGN1cmxheWVyIG5lIHtpbnZpc30gaWYgfSBkZWYKCi9vbmxheWVycyB7CgkvbXl1cHBlciBleGNoIGRlZgoJL215bG93ZXIgZXhjaCBkZWYKCWN1cmxheWVyIG15bG93ZXIgbHQKCWN1cmxheWVyIG15dXBwZXIgZ3QKCW9yCgl7aW52aXN9IGlmCn0gZGVmCgovY3VybGF5ZXIgMCBkZWYKCiUlRW5kUmVzb3VyY2UKJSVFbmRQcm9sb2cKJSVCZWdpblNldHVwCjE0IGRlZmF1bHQtZm9udC1mYW1pbHkgc2V0X2ZvbnQKJSAvYXJyb3dsZW5ndGggMTAgZGVmCiUgL2Fycm93d2lkdGggNSBkZWYKCiUgbWFrZSBzdXJlIHBkZm1hcmsgaXMgaGFybWxlc3MgZm9yIFBTLWludGVycHJldGVycyBvdGhlciB0aGFuIERpc3RpbGxlcgovcGRmbWFyayB3aGVyZSB7cG9wfSB7dXNlcmRpY3QgL3BkZm1hcmsgL2NsZWFydG9tYXJrIGxvYWQgcHV0fSBpZmVsc2UKJSBtYWtlICc8PCcgYW5kICc+Picgc2FmZSBvbiBQUyBMZXZlbCAxIGRldmljZXMKL2xhbmd1YWdlbGV2ZWwgd2hlcmUge3BvcCBsYW5ndWFnZWxldmVsfXsxfSBpZmVsc2UKMiBsdCB7CiAgICB1c2VyZGljdCAoPDwpIGN2biAoWykgY3ZuIGxvYWQgcHV0CiAgICB1c2VyZGljdCAoPj4pIGN2biAoWykgY3ZuIGxvYWQgcHV0Cn0gaWYKCiUlRW5kU2V0dXAAc3VwAGdyb3VwAGN1cAB0aGluc3AAZW5zcABlbXNwAG5ic3AAcGVycAB3ZWllcnAAZ2VuZXJhdGUtY29uc3RyYWludHMuY3BwAGJsb2NrLmNwcABjc29sdmVfVlBTQy5jcHAAf3RvcABwcm9wAGFneGJwb3AAbm9wAGFzeW1wAGNvbXAAZmluZENDb21wAGJtcABzY2FsZV9jbGFtcAB4bHAAbHAgIT0gY2xwAHRhaWxfbHAAaGVhZF9scAB0YWlsdG9vbHRpcABsYWJlbHRvb2x0aXAAZWRnZXRvb2x0aXAAaGVhZHRvb2x0aXAAaGVsbGlwAHRhaWxjbGlwAGhlYWRjbGlwAC9zdmcvcGFwYXlhd2hpcABocAB0cmFuc3Bvc2Vfc3RlcABsYXllcmxpc3RzZXAAbGF5ZXJzZXAAaXBzZXAAcmFua3NlcABub2Rlc2VwAHN1YmdyYXBocyBuZXN0ZWQgbW9yZSB0aGFuICVkIGRlZXAAU2VwAHNmZHAAY3AAd2VicABpZG1hcABjbHVzdGVyX21hcABjbWFweDptYXAAZXBzOm1hcABjbWFweF9ucDptYXAAaW1hcF9ucDptYXAAaXNtYXA6bWFwAGltYXA6bWFwAGNtYXA6bWFwAHN2ZzptYXAAanBnOm1hcABwbmc6bWFwAGpwZWc6bWFwAGdpZjptYXAAanBlOm1hcABvdmVybGFwAE92ZXJsYXAAbGV2ZWxzZ2FwAGNhcABLUF9VcAAlSTolTTolUyAlcABzdGFydCA8PSBwAHJzcXVvAGxzcXVvAHJkcXVvAGxkcXVvAGJkcXVvAHNicXVvAHJzYXF1bwBsc2FxdW8AcmFxdW8AbGFxdW8AYXV0bwBOdW5pdG8AL3N2Zy90b21hdG8AbmVhdG8AZXVybwAvc3ZnL2dhaW5zYm9ybwBNZXRob2RaZXJvAG1pY3JvAG5pbWJ1c21vbm8AbGliZXJhdGlvbm1vbm8AZnJlZW1vbm8AYXJpbW8AcmF0aW8AcG9ydGhvAHJobwBSaG8AL3N2Zy9pbmRpZ28AcGluZm8AY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AY2xfZWRnZV9pbmZvAGdldFBhY2tJbmZvAG1ha2VJbmZvAHBhcnNlUGFja01vZGVJbmZvAGNpcmNvAGljbwBcJTAzbwAvc3ZnL3Jvc3licm93bgAvc3ZnL3NhbmR5YnJvd24AdmVyeWRhcmticm93bgAvc3ZnL3NhZGRsZWJyb3duAC9zdmcvYnJvd24AS1BfRG93bgBjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1bgBTdW4ASnVuAHRob3JuAC9zdmcvY3JpbXNvbgB4ZG90X2pzb24AeGRvdF9qc29uOmpzb24AanNvbjA6anNvbgBvbWljcm9uAE9taWNyb24Ac2Nhcm9uAFNjYXJvbgB3ZWJtYXJvb24AeDExbWFyb29uAC9zdmcvbWFyb29uAC9zdmcvbGlnaHRzYWxtb24AL3N2Zy9kYXJrc2FsbW9uAC9zdmcvc2FsbW9uAHVwc2lsb24AZXBzaWxvbgBVcHNpbG9uAEVwc2lsb24AcmVzb2x1dGlvbgBkaXN0b3J0aW9uAHN0ZDo6ZXhjZXB0aW9uAGRvdF9wb3NpdGlvbgBTZXR0aW5nIHVwIHN0cmVzcyBmdW5jdGlvbgB1bmNsb3NlZCBDREFUQSBzZWN0aW9uAHBvc3RhY3Rpb24Acm90YXRpb24Ab3JpZW50YXRpb24AYWJvbWluYXRpb24AYWNjb3VudGluZ0dldEN1cnJlbnRBbXBsaWZpY2F0aW9uAHhkb3R2ZXJzaW9uAFNUc2V0VW5pb24APHBvbHlnb24AaGV4YWdvbgBzZXB0YWdvbgBwZW50YWdvbgB0cmlwbGVvY3RhZ29uAGRvdWJsZW9jdGFnb24AL3N2Zy9sZW1vbmNoaWZmb24ATW9uAHBsdXNtbgBub3RpbgBpc2luAC9zdmcvbW9jY2FzaW4AcGluAG1pbgB2b3JvX21hcmdpbgBpbmZpbgBvbmVkX29wdGltaXplcl90cmFpbgBwbGFpbgBtYWtlX2NoYWluAG1lcmdlX2NoYWluAGRlbGV0ZU1pbgBmaW5kTWluAHZhbGlnbgBiYWxpZ24AeWVuAE11bHRpbGV2ZWxfY29hcnNlbgBjdXJyZW4AUG9ic29wZW4AZ3Z1c2Vyc2hhcGVfb3BlbgBlbnRpdHlUcmFja2luZ09uT3BlbgAvc3ZnL2xpbmVuAGRpbWVuAG1pbmxlbgBzdHlsZV90b2tlbgB1bmNsb3NlZCB0b2tlbgAvc3ZnL3llbGxvd2dyZWVuAG1lZGl1bWZvcmVzdGdyZWVuAC9zdmcvZm9yZXN0Z3JlZW4AL3N2Zy9saWdodGdyZWVuAGh1bnRlcnNncmVlbgAvc3ZnL2xhd25ncmVlbgAvc3ZnL2RhcmtncmVlbgAvc3ZnL21lZGl1bXNwcmluZ2dyZWVuAC9zdmcvc3ByaW5nZ3JlZW4AL3N2Zy9kYXJrb2xpdmVncmVlbgAvc3ZnL2xpbWVncmVlbgAvc3ZnL3BhbGVncmVlbgB3ZWJncmVlbgAvc3ZnL2xpZ2h0c2VhZ3JlZW4AL3N2Zy9tZWRpdW1zZWFncmVlbgAvc3ZnL2RhcmtzZWFncmVlbgAvc3ZnL3NlYWdyZWVuAHgxMWdyZWVuAC9zdmcvZ3JlZW4AR3JlZW4AL3N2Zy9saWdodGN5YW4AL3N2Zy9kYXJrY3lhbgAvc3ZnL2N5YW4AbmV3dGFuAGRhcmt0YW4AL3N2Zy90YW4Acm93c3BhbgBjb2xzcGFuAG5hbgB0aW1lc25ld3JvbWFuAG5pbWJ1c3JvbWFuAHRpbWVzcm9tYW4AVGltZXMtUm9tYW4AUGFsYXRpbm8tUm9tYW4ATmV3Q2VudHVyeVNjaGxiay1Sb21hbgBKYW4AR0RfcmFuayhnKVtyXS5uIDw9IEdEX3JhbmsoZylbcl0uYW4AYWd4YnB1dF9uAFxuAG5fbm9kZXMgPT0gZ3JhcGgtPm4AQS0+bSA9PSBBLT5uAGpvYi0+b2JqLT51Lm4AcywlbGYsJWxmJW4AIGUsJWxmLCVsZiVuACVkICUxWyJdJW4AdiA9PSBuAG56YyA9PSBuAGIgPT0gbgBuY2x1c3RlciA8PSBuAHIgJiYgbgBwc3ltAGFsZWZzeW0AdGhldGFzeW0AcXVhbnR1bQBzdW0AL3N2Zy9wbHVtAGludnRyYXBleml1bQBtZWRpdW0AOTpwcmlzbQBscm0AY3VzdG9tAGFwdHItPnRhZyA9PSBUX2F0b20AL2Rldi91cmFuZG9tAHJsbQBzaW0ASU1EU19naXZlbl9kaW0Ab3JkbQBwYXJhbGxlbG9ncmFtAC9zdmcvbWludGNyZWFtAEp1bAB0bABmcmFzbABTeW1ib2wAZmluZENvbAA8P3htbAB5dW1sAHV1bWwAb3VtbABpdW1sAGV1bWwAYXVtbABZdW1sAFV1bWwAT3VtbABJdW1sAEV1bWwAQXVtbABjb3JlX2xvYWRpbWFnZV92cm1sAGpwZzp2cm1sAHBuZzp2cm1sAGpwZWc6dnJtbABnaWY6dnJtbABqcGU6dnJtbABidWxsAGZpbGwAL3N2Zy9zZWFzaGVsbABmb3JhbGwAQXByaWwAcGVybWlsAHJjZWlsAGxjZWlsAGNjZWRpbABDY2VkaWwAYXJyb3d0YWlsAGx0YWlsAHNhbWV0YWlsAGxldmVsID49IDAgJiYgbGV2ZWwgPD0gbi0+bGV2ZWwAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAoKm4pLT5sZXZlbABzdHJlc3NfbWFqb3JpemF0aW9uX2tEX21rZXJuZWwAaXNfcGFyYWxsZWwAQ2FsY3VsYXRpbmcgY2lyY3VpdCBtb2RlbABDYWxjdWxhdGluZyBzdWJzZXQgbW9kZWwAQ2FsY3VsYXRpbmcgTURTIG1vZGVsAHhsYWJlbAB0YWlsbGFiZWwAaGVhZGxhYmVsAG1ha2VfbGFiZWwAZ3JhcGggbGFiZWwAaWV4Y2wAb2JqcC0+bGJsAG92YWwAbWVyZ2V2aXJ0dWFsAC9zdmcvbGlnaHRjb3JhbAAvc3ZnL2NvcmFsAFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfYXJyYXlzX2ludGVybmFsAE11bHRpbGV2ZWxfY29hcnNlbl9pbnRlcm5hbABRdWFkVHJlZV9hZGRfaW50ZXJuYWwAYXJyb3dfbGVuZ3RoX25vcm1hbABhcmlhbAByYWRpYWwAL3N2Zy90ZWFsAHJlYWwAbG9jYWwAZXN0aW1hdGVfY2hhcmFjdGVyX3dpZHRoX2Nhbm9uaWNhbABnbG9iYWwAcS0+bAAuLi8uLi9saWIvY2dyYXBoL3NjYW4ubAB0azp0awBnaWY6dGsAcGF0Y2h3b3JrAHRvawBib29rAEF2YW50R2FyZGUtQm9vawBzaW5rAG92ZXJsYXBfc2hyaW5rAHNwaWN5cGluawAvc3ZnL2hvdHBpbmsAL3N2Zy9saWdodHBpbmsAL3N2Zy9kZWVwcGluawBuZW9ucGluawAvc3ZnL3BpbmsAbmV3cmFuawBjbHVzdGVycmFuawBfbmV3X3JhbmsAaW5zdGFsbF9pbl9yYW5rAHJlbW92ZV9mcm9tX3JhbmsAL3N2Zy9jb3Juc2lsawBvbmVibG9jawB2LT5sZWZ0LT5ibG9jayA9PSB2LT5yaWdodC0+YmxvY2sAL3N2Zy9maXJlYnJpY2sAUFFjaGVjawBwYWNrAC9zdmcvYmxhY2sAQmxhY2sAZXN0YWNrX3BvcF9iYWNrAHp3agB6d25qAGpvYi0+b2JqAGdldGludHJzeGkAcHNpAFBzaQBDYWxpYnJpAEZyaQB0d29waQBkcGkAdm9yb25vaQBWb3Jvbm9pAGNoYW5pAGRlbWkAQm9va21hbi1EZW1pAEF2YW50R2FyZGUtRGVtaQAvc3ZnL2RhcmtraGFraQAvc3ZnL2toYWtpAHBoaQBjaGkAUGhpAENoaQBkaQBYaQBQaQBORF9pZChucCkgPT0gaQBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcl9zbW9vdGgAU3ByaW5nU21vb3RoZXJfc21vb3RoAGJvdGgAc3RhcnRzd2l0aABsaW5lbGVuZ3RoAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGF2ZXJhZ2VfZWRnZV9sZW5ndGgAZXRoAHBlbndpZHRoAGx3aWR0aABzZXRsaW5ld2lkdGgAUHNob3J0ZXN0cGF0aABzaG9ydHBhdGgAZm9udHBhdGgAUG9ic3BhdGgAYmVnaW5wYXRoAGltYWdlcGF0aABlbmRwYXRoAHN0cmFpZ2h0X3BhdGgAbWFwX3BhdGgAPHBhdGgAY2Fubm90IGZpbmQgdHJpYW5nbGUgcGF0aABxdWV1ZV9wdXNoAC9zdmcvbGF2ZW5kZXJibHVzaABmbGVzaABvc2xhc2gAT3NsYXNoAGR0c3RyaGFzaABuZGFzaABtZGFzaABkaWdyYXBoAHN1YmdyYXBoAGNvbnN0cnVjdF9ncmFwaABjaGtTZ3JhcGgAY2xvc2VzdF9wYWlyczJncmFwaABhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABjb25uZWN0R3JhcGgAdXBzaWgAJXNsaW5lLXRocm91Z2gAZmxhdF9zZWFyY2gAY2hhblNlYXJjaABSVHJlZVNlYXJjaABNYXJjaABEaXNjb25CcmFuY2gAUGlja0JyYW5jaABBZGRCcmFuY2gALi4vLi4vbGliL2NncmFwaC9iaXRhcnJheS5oAC4uLy4uL2xpYi9jZ3JhcGgvc3Rydmlldy5oAC4uLy4uL2xpYi9jaXJjb2dlbi9ub2RlbGlzdC5oAC4uLy4uL2xpYi9jZ3JhcGgvc29ydC5oAC4uLy4uL2xpYi9jZ3JhcGgvbm9kZV9zZXQuaAAuLi8uLi9saWIvY29tbW9uL2JveGVzLmgALi4vLi4vbGliL29ydGhvL3N0cnVjdHVyZXMuaAAuLi8uLi9saWIvZG90Z2VuL2RvdHByb2NzLmgALi4vLi4vbGliL3V0aWwvc3RyZXEuaAAuLi8uLi9saWIvY2dyYXBoL3N0YXJ0c3dpdGguaAAuLi8uLi9saWIvY2dyYXBoL2d2X21hdGguaAAuLi8uLi9saWIvY2dyYXBoL2FneGJ1Zi5oAC4uLy4uL2xpYi9jZ3JhcGgvdG9rZW5pemUuaAAuLi8uLi9saWIvY2dyYXBoL3F1ZXVlLmgALi4vLi4vbGliL2NncmFwaC9hbGxvYy5oAGF1eGcAcm93ZwBjb3JlX2xvYWRpbWFnZV9zdmcAc3ZnOnN2ZwBqcGc6c3ZnAHBuZzpzdmcAanBlZzpzdmcAZ2lmOnN2ZwBqcGU6c3ZnAHN2Z19pbmxpbmU6c3ZnAEF1ZwBkb1Byb2xvZwBwb3dlcl9pdGVyYXRpb25fb3J0aG9nAHBuZwBpZGVhbF9kaXN0X3NjaGVtZSB2YWx1ZSB3cm9uZwB4ZG90IHZlcnNpb24gIiVzIiB0b28gbG9uZwBjb25nAGxibGVuY2xvc2luZwBiYXNpY19zdHJpbmcAZmFpbHVyZSBtYWxsb2MnaW5nIGZvciByZXN1bHQgc3RyaW5nAHNwcmluZwBvcmRlcmluZwBhcmluZwBBcmluZwBEYW1waW5nAFdhcm5pbmcAb3ZlcmxhcF9zY2FsaW5nAHggYW5kIHkgc2NhbGluZwBvbGQgc2NhbGluZwBzbW9vdGhpbmcAdW5rbm93biBlbmNvZGluZwBtdWx0aWxldmVsX3NwcmluZ19lbGVjdHJpY2FsX2VtYmVkZGluZwBzcHJpbmdfZWxlY3RyaWNhbF9zcHJpbmdfZW1iZWRkaW5nAGNlbGxwYWRkaW5nAGNlbGxzcGFjaW5nAHJhbmcAbGFuZwBmaXZlcG92ZXJoYW5nAHRocmVlcG92ZXJoYW5nAG5vdmVyaGFuZwBlbWl0X2h0bWxfaW1nAGNvbGcAb3JpZwBzemxpZwBvZWxpZwBhZWxpZwBPRWxpZwBBRWxpZwBjb3JlX2xvYWRpbWFnZV9maWcAanBnOmZpZwBwbmc6ZmlnAGZpZzpmaWcAanBlZzpmaWcAZ2lmOmZpZwBqcGU6ZmlnAGVnZwBuZXh0X3NlZwByZWcAanBlZwBpID09IGRlZwBkZwBjZwBjbG9zZXN1YmcAbWlzbWF0Y2hlZCB0YWcAYmV6LT5zZmxhZwBiZXotPmVmbGFnACFmbGFnADxnACUuNWcsJS41ZywlLjVnLCUuNWcAJS41ZyAlLjVnACVnICVnAGJveEludGVyc2VjdGYAZXBzZgBhZ2VkZ2VzZXFjbXBmAGNjd3JvdGF0ZXBmAGZub2YAaW5mAHNlbGYAaGFsZgAlbGYlbGYlbGYlbGYAJWxmLCVsZiwlbGYsJWxmLCVsZgAlbGYgJWxmICVsZiAlbGYAbGliZXJhdGlvbnNlcmlmAGZyZWVzZXJpZgBzYW5zLVNlcmlmAGdpZgAvc3ZnL3BlYWNocHVmZgByaWZmAGFjY291bnRpbmdSZXBvcnREaWZmAHRhaWxocmVmAGxhYmVsaHJlZgBlZGdlaHJlZgBoZWFkaHJlZgBvcmRmAHBkZgBzaWdtYWYAXGYAJS4wTGYAJUxmAHVzLT5mACUuMDNmACVzIHRyYW5zbWl0ICUuM2YAcmdiPCU5LjNmLCAlOS4zZiwgJTkuM2Y+IHRyYW5zbWl0ICUuM2YAJS4wMmYAJS4yZgAlLjBmLCUuMGYsJS4wZiwlLjBmACAlLjBmLCUuMGYAJS4wZiAlLjBmICUuMGYgJS4wZgAiIGZpbGwtb3BhY2l0eT0iJWYAIiBzdHJva2Utb3BhY2l0eT0iJWYACmZpbmFsIGUgPSAlZgBicm9uemUAYXJyb3dzaXplAGxhYmVsZm9udHNpemUAc2VhcmNoc2l6ZQBub2RlbGlzdF9yZXNpemUAZml4ZWRzaXplAG9iamxpc3Rfc2l6ZQBub2RlbGlzdF9zaXplAHNhbWVfbGlzdF9zaXplAG5vZGVfc2V0X3NpemUAYm94ZXNfc2l6ZQBjeWNsZXNfc2l6ZQBub2Rlc19zaXplAHRleHRzcGFuX3NpemUAYmV6aWVyX3BhdGhfc2l6ZQBzdmdfc2l6ZQBzZWxmLT5jYXBhY2l0eSA+IHNlbGYtPnNpemUAYnouc2l6ZQBwb2ludC1zaXplAG5vcm1hbGl6ZQBpY3VydmUAbm9kZWxpc3RfcmVtb3ZlAG5vZGVfc2V0X3JlbW92ZQBzb2x2ZQAhdi0+YWN0aXZlAC1hY3RpdmUAZm9udF9pbl9saXN0X3Blcm1pc3NpdmUAL3N2Zy9vbGl2ZQB1Z3JhdmUAb2dyYXZlAGlncmF2ZQBlZ3JhdmUAYWdyYXZlAFVncmF2ZQBPZ3JhdmUASWdyYXZlAEVncmF2ZQBBZ3JhdmUAdHJ1ZQAvc3ZnL2Jpc3F1ZQBvYmxpcXVlAEF2YW50R2FyZGUtQm9va09ibGlxdWUAQXZhbnRHYXJkZS1EZW1pT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LUJvbGRPYmxpcXVlAENvdXJpZXItQm9sZE9ibGlxdWUASGVsdmV0aWNhLUJvbGRPYmxpcXVlAEhlbHZldGljYS1OYXJyb3ctT2JsaXF1ZQBDb3VyaWVyLU9ibGlxdWUASGVsdmV0aWNhLU9ibGlxdWUAbmF2eWJsdWUAL3N2Zy9saWdodHNreWJsdWUAL3N2Zy9kZWVwc2t5Ymx1ZQAvc3ZnL3NreWJsdWUAbmV3bWlkbmlnaHRibHVlAC9zdmcvbWlkbmlnaHRibHVlAC9zdmcvbGlnaHRibHVlAC9zdmcvY2FkZXRibHVlAC9zdmcvY29ybmZsb3dlcmJsdWUAL3N2Zy9kb2RnZXJibHVlAC9zdmcvcG93ZGVyYmx1ZQBuZW9uYmx1ZQAvc3ZnL21lZGl1bWJsdWUAL3N2Zy9saWdodHN0ZWVsYmx1ZQAvc3ZnL3N0ZWVsYmx1ZQAvc3ZnL3JveWFsYmx1ZQAvc3ZnL2RhcmtibHVlAHJpY2hibHVlAGxpZ2h0c2xhdGVibHVlAC9zdmcvbWVkaXVtc2xhdGVibHVlAC9zdmcvZGFya3NsYXRlYmx1ZQAvc3ZnL3NsYXRlYmx1ZQAvc3ZnL2FsaWNlYmx1ZQAvc3ZnL2JsdWUAQmx1ZQBuZWF0b19lbnF1ZXVlAFR1ZQBjb252ZXJ0U1B0b1JvdXRlAHlhY3V0ZQB1YWN1dGUAb2FjdXRlAGlhY3V0ZQBlYWN1dGUAYWFjdXRlAFlhY3V0ZQBVYWN1dGUAT2FjdXRlAElhY3V0ZQBFYWN1dGUAQWFjdXRlAHJlZmVyZW5jZSB0byBleHRlcm5hbCBlbnRpdHkgaW4gYXR0cmlidXRlAGR1cGxpY2F0ZSBhdHRyaWJ1dGUAbm90ZQBwcmltZXJzaXRlAHJpYm9zaXRlAHJlc3RyaWN0aW9uc2l0ZQBwcm90ZWFzZXNpdGUAL3N2Zy9naG9zdHdoaXRlAC9zdmcvbmF2YWpvd2hpdGUAL3N2Zy9mbG9yYWx3aGl0ZQAvc3ZnL2FudGlxdWV3aGl0ZQAvc3ZnL3doaXRlAFdoaXRlAHBvcF9vYmpfc3RhdGUAcGNwX3JvdGF0ZQBjb25jZW50cmF0ZQBkZWNvcmF0ZQBRdWFkVHJlZV9yZXB1bHNpdmVfZm9yY2VfYWNjdW11bGF0ZQBub3RyYW5zbGF0ZQAvc3ZnL2Nob2NvbGF0ZQBnZW9tVXBkYXRlAGludmhvdXNlAC9zdmcvY2hhcnRyZXVzZQBub2RlbGlzdF9yZXZlcnNlAFhNTF9QYXJzZQA8ZWxsaXBzZQBkdXN0eXJvc2UAL3N2Zy9taXN0eXJvc2UAU3BhcnNlTWF0cml4X3RyYW5zcG9zZQBhZ2Nsb3NlAGVudGl0eVRyYWNraW5nT25DbG9zZQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UAZmFsc2UAL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3R1cnF1b2lzZQBwaGFzZQAvc3ZnL2F6dXJlAHNpZ25hdHVyZQBtZW1vcnkgcmUtYWxsb2NhdGlvbiBmYWlsdXJlAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUAY29yZQBNc3F1YXJlAFBhbGF0aW5vIExpbm90eXBlAEEtPnR5cGUgPT0gQi0+dHlwZQBzdXBlAGVsbGlwc2VfdGFuZ2VudF9zbG9wZQBndnJlbmRlcl91c2Vyc2hhcGUAbWl0ZXJfc2hhcGUAbGFuZHNjYXBlAExhbmRzY2FwZQBKdW5lAG5vbmUAZG9jdW1lbnQgaXMgbm90IHN0YW5kYWxvbmUAY291c2luZQAvc3ZnL21lZGl1bWFxdWFtYXJpbmUAL3N2Zy9hcXVhbWFyaW5lADxwb2x5bGluZQAlc292ZXJsaW5lAHVuZGVybGluZQBQcm91dGVzcGxpbmUAbGluZWFyX3NwbGluZQBiX3NwbGluZQBvbGluZQBhZ3hidWZfaXNfaW5saW5lAHN2Z19pbmxpbmUAcmVmaW5lAHByaW1lAFByaW1lAC9zdmcvbGltZQBjb2xvcnNjaGVtZQBsYWJlbF9zY2hlbWUAc2FtZQBsYWJlbGZvbnRuYW1lAFVGX3NldG5hbWUAZm9udF9uYW1lAGZvbnQtPm5hbWUAdXMtPm5hbWUAcmVzZXJ2ZWQgcHJlZml4ICh4bWwpIG11c3Qgbm90IGJlIHVuZGVjbGFyZWQgb3IgYm91bmQgdG8gYW5vdGhlciBuYW1lc3BhY2UgbmFtZQBzdHlsZQAvc3ZnL3RoaXN0bGUAdGl0bGUAL3N2Zy9tZWRpdW1wdXJwbGUAZGFya3B1cnBsZQB3ZWJwdXJwbGUAcmViZWNjYXB1cnBsZQB2ZXJ5X2xpZ2h0X3B1cnBsZQBtZWRfcHVycGxlAHgxMXB1cnBsZQAvc3ZnL3B1cnBsZQBzaGFwZWZpbGUAZ3JhZGllbnRhbmdsZQByZWN0YW5nbGUAUmVjdGFuZ2xlAGxhYmVsYW5nbGUAaW52dHJpYW5nbGUAZGVzdGluYXRpb24gcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBzb3VyY2UgcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBkZnNDeWNsZQBkb3VibGVjaXJjbGUATWNpcmNsZQBpbnZpc2libGUAdGhvcm5kYWxlAGlucHV0c2NhbGUAb3NjYWxlAGltYWdlc2NhbGUAL3N2Zy93aGl0ZXNtb2tlAG1hbmRhcmlub3JhbmdlAC9zdmcvZGFya29yYW5nZQAvc3ZnL29yYW5nZQAvc3ZnL2JlaWdlAG5ld2VkZ2UAZGVsZXRlX2Zhc3RfZWRnZQBkZWxldGVfZmxhdF9lZGdlAGFkZF90cmVlX2VkZ2UAbWFrZVN0cmFpZ2h0RWRnZQBtYWtlU2VsZkVkZ2UAbWFrZUNvbXBvdW5kRWRnZQBvc2FnZQBwYWdlAGd2bG9hZGltYWdlAHZlZQB0ZWUAUVVBRF9UUkVFX0hZQlJJRCwgc2l6ZSBsYXJnZXIgdGhhbiAlZCwgc3dpdGNoIHRvIGZhc3QgcXVhZHRyZWUAZmVhc2libGVfdHJlZQBTcGFyc2VNYXRyaXhfZGl2aWRlX3Jvd19ieV9kZWdyZWUAb2JqbGlzdF9mcmVlAG5vZGVsaXN0X2ZyZWUAc2FtZV9saXN0X2ZyZWUAbm9kZV9zZXRfZnJlZQBwb2ludHNfZnJlZQBib3hlc19mcmVlAGN5Y2xlc19mcmVlAG5vZGVfc3RhY2tfZnJlZQBuZXdub2RlAGluc3RhbGxub2RlAGFnbm9kZQBkZWxldGVfZmFzdF9ub2RlAHBhY2ttb2RlAFNwbGl0Tm9kZQBvdGlsZGUAbnRpbGRlAGF0aWxkZQBPdGlsZGUATnRpbGRlAEF0aWxkZQBkaXZpZGUAdHJhZGUAZ3JhcGh2aXpfbm9kZV9pbmR1Y2UAc291cmNlAHJlcHVsc2l2ZWZvcmNlAGlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UAZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlAHJlY3Vyc2l2ZSBlbnRpdHkgcmVmZXJlbmNlAGxhYmVsZGlzdGFuY2UAVEJfYmFsYW5jZQBUQmJhbGFuY2UAZGV2aWNlAG1vbm9zcGFjZQAvc3ZnL29sZGxhY2UAZmFjZQBzdWJlACAtYW5jaG9yIGUAczEtPmNvbW1fY29vcmQ9PXMyLT5jb21tX2Nvb3JkAE1yZWNvcmQAZm9yd2FyZABwcm9kAGxpZ2h0Z29sZGVucm9kAG1lZGl1bWdvbGRlbnJvZAAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9wYWxlZ29sZGVucm9kAC9zdmcvZ29sZGVucm9kAC9zdmcvYnVybHl3b29kAGxpZ2h0d29vZABtZWRpdW13b29kAGRhcmt3b29kAF9iYWNrZ3JvdW5kAGNvbXBvdW5kAG5vIGVsZW1lbnQgZm91bmQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQAL3N2Zy9ibGFuY2hlZGFsbW9uZABhcnJvd19sZW5ndGhfZGlhbW9uZABNZGlhbW9uZABub2RlX3NldF9maW5kAGd2dXNlcnNoYXBlX2ZpbmQAb2JqbGlzdF90cnlfYXBwZW5kAGRlZ2xpc3RfdHJ5X2FwcGVuZABub2RlbGlzdF90cnlfYXBwZW5kAGNsaXN0X3RyeV9hcHBlbmQAc2FtZV9saXN0X3RyeV9hcHBlbmQAZWRnZV9saXN0X3RyeV9hcHBlbmQAcG9pbnRzX3RyeV9hcHBlbmQAYm94ZXNfdHJ5X2FwcGVuZABsYXllcl9uYW1lc190cnlfYXBwZW5kAGN5Y2xlc190cnlfYXBwZW5kAG5vZGVzX3RyeV9hcHBlbmQAdmFyYXJyX3RyeV9hcHBlbmQAZXN0YWNrX3RyeV9hcHBlbmQAaW50X3N0YWNrX3RyeV9hcHBlbmQAbm9kZV9zdGFja190cnlfYXBwZW5kAGJlemllcl9wYXRoX3RyeV9hcHBlbmQAaXJhbmQAZXhwYW5kAGN1bWJlcmxhbmQAYnJpZ2h0Z29sZABvbGRnb2xkAC9zdmcvZ29sZABib2xkAEhlbHZldGljYS1OYXJyb3ctQm9sZABUaW1lcy1Cb2xkAENvdXJpZXItQm9sZABQYWxhdGluby1Cb2xkAE5ld0NlbnR1cnlTY2hsYmstQm9sZABIZWx2ZXRpY2EtQm9sZAAlMCpsbGQAJSpsbGQAKyVsbGQAbi0+YnJhbmNoW2ldLmNoaWxkACUrLjRsZAAlcyVsZABzb2xpZAAvc3ZnL21lZGl1bW9yY2hpZAAvc3ZnL2RhcmtvcmNoaWQAL3N2Zy9vcmNoaWQAaWxsZWdhbCBjaGFyYWN0ZXIocykgaW4gcHVibGljIGlkAGRpamtzdHJhX3NnZABmaXhlZABjdXJ2ZWQAZGVyaXZlZABkb3R0ZWQAbWVtb3J5IGV4aGF1c3RlZABsb2NhbGUgbm90IHN1cHBvcnRlZABwYXJzaW5nIGFib3J0ZWQAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAYWNjb3VudGluZ0RpZmZUb2xlcmF0ZWQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZABjb25kZW5zZWQAL3N2Zy9tZWRpdW12aW9sZXRyZWQAL3N2Zy9wYWxldmlvbGV0cmVkAEltcHJvcGVyICVzIHZhbHVlICVzIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA8ICVkIC0gdG9vIHNtYWxsIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA+ICVkIC0gdG9vIGxhcmdlIC0gaWdub3JlZAAvc3ZnL2luZGlhbnJlZAAvc3ZnL2RhcmtyZWQAYSBzdWNjZXNzZnVsIHByaW9yIGNhbGwgdG8gZnVuY3Rpb24gWE1MX0dldEJ1ZmZlciBpcyByZXF1aXJlZAB0YXBlcmVkAC9zdmcvb3JhbmdlcmVkAHJlc2VydmVkIHByZWZpeCAoeG1sbnMpIG11c3Qgbm90IGJlIGRlY2xhcmVkIG9yIHVuZGVjbGFyZWQAL3N2Zy9yZWQAc3RyaXBlZABpbGwtY29uZGl0aW9uZWQAdW5kZWZpbmVkAG5vdCBjb25zdHJhaW5lZABsYWJlbGFsaWduZWQAdGV4dCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQAWE1MIGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZAB1bmZpbGxlZABpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkAHRyaWFuZ3VsYXRpb24gZmFpbGVkAHBhcnNpbmcgZmluaXNoZWQAZGFzaGVkAGxpbWl0IG9uIGlucHV0IGFtcGxpZmljYXRpb24gZmFjdG9yIChmcm9tIERURCBhbmQgZW50aXRpZXMpIGJyZWFjaGVkAHdlZGdlZABzaXplPT1mcmVlZAByb3VuZGVkAHBhcnNlciBub3Qgc3VzcGVuZGVkAHBhcnNlciBzdXNwZW5kZWQAV2VkAFJlZABTcGFyc2VNYXRyaXhfYWRkAG5vZGVfc2V0X2FkZABkZCAhPSBwYXJlbnRfZGQAS1BfQWRkAHBhZAB4bGhkeHVubG9hZAByZWFkAGFycm93aGVhZABsaGVhZABzYW1laGVhZABib3gzZAAlc18lZABfc3Bhbl8lZABfYmxvY2tfJWQAX3dlYWtfJWQAX2Nsb25lXyVkAC4lZAAlWS0lbS0lZAAlbGYsJWQAJXMgaW4gbGluZSAlZAAlJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkACJfc3ViZ3JhcGhfY250IjogJWQAIl9ndmlkIjogJWQAImhlYWQiOiAlZABhZ3hicHV0YwB2cHNjAGNwLT5zcmMAdWNpcmMAb2NpcmMAaWNpcmMAZWNpcmMAYWNpcmMAVWNpcmMAT2NpcmMASWNpcmMARWNpcmMAQWNpcmMAbGFiZWxsb2MAZ3ZfcmVjYWxsb2MAc3RkOjpiYWRfYWxsb2MAYmFrZXJzY2hvYwBzZW1pU3dlZXRDaG9jAG1jAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMAcGljOnBpYwBpdGFsaWMAQm9va21hbi1MaWdodEl0YWxpYwBaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljAEJvb2ttYW4tRGVtaUl0YWxpYwBUaW1lcy1Cb2xkSXRhbGljAFBhbGF0aW5vLUJvbGRJdGFsaWMATmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljAFRpbWVzLUl0YWxpYwBQYWxhdGluby1JdGFsaWMATmV3Q2VudHVyeVNjaGxiay1JdGFsaWMAcmFkaWMAI2ZjZmNmYwA6ICUuMmYgc2VjAGxpc3RkZWxyZWMAbGV2ZWwgZ3JhcGggcmVjAGxldmVsIGVkZ2UgcmVjAGxldmVsIG5vZGUgcmVjAERlYwBfbmVhdG9fY2MAYmMAdmlzaWJpbGl0eS5jAFNwYXJzZU1hdHJpeC5jAGh0bWxsZXguYwBpbmRleC5jAHNtYXJ0X2luaV94LmMAZ3ZyZW5kZXJfY29yZV9wb3YuYwBjdnQuYwBsYXlvdXQuYwB0ZXh0c3Bhbl9sdXQuYwBhZGp1c3QuYwBub2RlbGlzdC5jAHNob3J0ZXN0LmMAY2xvc2VzdC5jAHNhbWVwb3J0LmMAZ3ZyZW5kZXJfY29yZV9kb3QuYwBjb25zdHJhaW50LmMAZG90aW5pdC5jAG5lYXRvaW5pdC5jAHBhdGNod29ya2luaXQuYwBvc2FnZWluaXQuYwBlbWl0LmMAZmxhdC5jAGFycm93cy5jAG1pbmNyb3NzLmMAc3RyZXNzLmMAcG9zdF9wcm9jZXNzLmMAY2NvbXBzLmMAbnMuYwB1dGlscy5jAHhsYWJlbHMuYwBzaGFwZXMuYwBkb3RzcGxpbmVzLmMAbmVhdG9zcGxpbmVzLmMAY2x1c3RlcmVkZ2VzLmMAYXR0ci5jAGZhc3Rnci5jAGNsdXN0ZXIuYwB0YXBlci5jAGd2cmVuZGVyLmMAc3BsaXQucS5jAGRlY29tcC5jAGd2cmVuZGVyX2NvcmVfbWFwLmMAb3J0aG8uYwBndnJlbmRlcl9jb3JlX2pzb24uYwBwb3NpdGlvbi5jAHRleHRzcGFuLmMAZ2VvbS5jAHJvdXRlc3BsLmMAeG1sLmMATXVsdGlsZXZlbC5jAGdlbmVyYWwuYwBzcHJpbmdfZWxlY3RyaWNhbC5jAGd2cmVuZGVyX2NvcmVfdGsuYwByYW5rLmMAcGFjay5jAGJsb2NrcGF0aC5jAGR0c3RyaGFzaC5jAHJhd2dyYXBoLmMAZ3ZyZW5kZXJfY29yZV9zdmcuYwBndnJlbmRlcl9jb3JlX2ZpZy5jAHN0dWZmLmMAbWF6ZS5jAHF1YWRfcHJvZ19zb2x2ZS5jAHNwYXJzZV9zb2x2ZS5jAHJvdXRlLmMAd3JpdGUuYwBjb2x4bGF0ZS5jAHhtbHBhcnNlLmMAZWxsaXBzZS5jAGd2bG9hZGltYWdlX2NvcmUuYwBndnVzZXJzaGFwZS5jAHJlY3RhbmdsZS5jAGNpcmNsZS5jAGh0bWx0YWJsZS5jAGVkZ2UuYwBndmxvYWRpbWFnZS5jAGJsb2NrdHJlZS5jAFF1YWRUcmVlLmMAbm9kZS5jAG5vZGVfaW5kdWNlLmMAZ3ZkZXZpY2UuYwBjb21wb3VuZC5jAHRyYXBlem9pZC5jAHNnZC5jAGNvbmMuYwByZWMuYwBkaWprc3RyYS5jAGZQUS5jAGNsYXNzMi5jACVsZiwlbGYsJWxmLCVsZiVjACVsZiwlbGYsJWxmLCVbXixdJWMAXCVjACRjAG5zdWIAc2V0aHNiAHJiAHByb3RlY3RfcnNxYgBqb2IAY29yZV9sb2FkaW1hZ2VfcHNsaWIARmViAG9kYgBpbml0X3NwbGluZXNfYmIAYmV6aWVyX2JiAHByb3RlaW5zdGFiAHJuYXN0YWIAL3N2Zy9vbGl2ZWRyYWIAXGIAcndhAC9zdmcvYXF1YQBpb3RhAElvdGEAL3N2Zy9kYXJrbWFnZW50YQAvc3ZnL21hZ2VudGEAZGVsdGEARGVsdGEAemV0YQB0aGV0YQBUaGV0YQBiZXRhAFpldGEAQmV0YQBfQUdfc3RyZGF0YQBwcmV2ICE9IG9iai0+ZGF0YQBtYWtlR3JhcGhEYXRhAEV0YQBuaW1idXNzYW5zYQBwYXJhAGthcHBhAEthcHBhAC9zdmcvc2llbm5hAFZlcmRhbmEAZ2FtbWEAR2FtbWEAc2lnbWEAU2lnbWEAY29uc29sYQBuYWJsYQAvc3ZnL2Z1Y2hzaWEAR2VvcmdpYQBhbHBoYQBBbHBoYQBvbWVnYQBPbWVnYQBhcmVhAFJlY3RBcmVhAGxhbWJkYQBMYW1iZGEAaGVsdmV0aWNhAEhlbHZldGljYQBtaWNhAD48YQBgAF90ZHJhd18AX3RsZHJhd18AX2hsZHJhd18AX2xkcmF3XwBfaGRyYXdfAF9kcmF3XwBkb3Rfc3BsaW5lc18AJXNfAHBhZ2UlZCwlZF8AX2NjXwAgaWQ9ImFfAF4Abl9lZGdlcyA9PSBncmFwaC0+c291cmNlc1tncmFwaC0+bl0AamRbbWFza1tqY1trXV1dID09IGpjW2tdAGpjW21hc2tbamJba11dXSA9PSBqYltrXQBqYVttYXNrW2phW2pdXV0gPT0gamFbal0AcS0+cXRzW2lpXQAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAHItPmJvdW5kYXJ5W2ldIDw9IHItPmJvdW5kYXJ5W05VTURJTVMgKyBpXQBbJS4wM2YsJS4wM2ZdAFtpbnRlcm5hbCBoYXJkLWNvZGVkXQBucC0+Y2VsbHNbMV0AbnAtPmNlbGxzWzBdAHVzLT5uYW1lWzBdAGNwLT5zcmNbMF0AWy4uXQBcXAAicG9pbnRzIjogWwAic3RvcHMiOiBbAAlbAFoAY29tcHV0ZVNjYWxlWFkAeTw9WQAlYSAlYiAlZCAlSDolTTolUyAlWQBQT1NJWAB0YXJnZXQgPD0gKHNpemVfdClJTlRfTUFYAHcgPj0gMCAmJiB3IDw9IElOVF9NQVgAZV9jbnQgPD0gSU5UX01BWABwYWlyLnJpZ2h0IDw9IElOVF9NQVgAcGFpci5sZWZ0IDw9IElOVF9NQVgAbl9lZGdlcyA8PSBJTlRfTUFYAHN0cC5udmVydGljZXMgPD0gSU5UX01BWABvYnNbcG9seV9pXS0+cG4gPD0gSU5UX01BWABpbnB1dF9yb3V0ZS5wbiA8PSBJTlRfTUFYAGdyYXBoLT5uIDw9IElOVF9NQVgAcG5sbCA8PSBJTlRfTUFYAGggPj0gMCAmJiBoIDw9IElOVF9NQVgAVHJlZV9lZGdlLnNpemUgPD0gSU5UX01BWABlX2NudCAtIDEgPD0gSU5UX01BWABjbGlzdF9zaXplKCZsaXN0KSAtIDEgPD0gSU5UX01BWABsYXllcl9uYW1lc19zaXplKCZsYXllcklEcykgLSAxIDw9IElOVF9NQVgAc3RybGVuKGFyZ3MpIDw9IElOVF9NQVgAb2JqbGlzdF9zaXplKCZvYmpsKSA8PSBJTlRfTUFYAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPD0gSU5UX01BWAByZWN0LmJvdW5kYXJ5WzNdIDwgSU5UX01BWAByZWN0LmJvdW5kYXJ5WzJdIDwgSU5UX01BWAByZXN1bHQgPD0gKGludClVQ0hBUl9NQVgAc3N6IDw9IFVDSEFSX01BWABjb2wgPj0gMCAmJiBjb2wgPD0gVUlOVDE2X01BWAB4PD1YAFcAVgBVAFxUAFRFWFQAU1RSRVNTX01BSk9SSVpBVElPTl9QT1dFUl9ESVNUAFNUUkVTU19NQUpPUklaQVRJT05fR1JBUEhfRElTVABTVFJFU1NfTUFKT1JJWkFUSU9OX0FWR19ESVNUAEZBU1QARk9OVABiID09IEJfUklHSFQASEVJR0hUAEJfTEVGVABfJWxsdV9TVVNQRUNUAEJUAFRyZWJ1Y2hldCBNUwBJTlZJUwAlSDolTTolUwBWUgBUUgBBLT5mb3JtYXQgPT0gQi0+Zm9ybWF0ICYmIEEtPmZvcm1hdCA9PSBGT1JNQVRfQ1NSAExSAERJUgBIUgBDRU5URVIAJSVUUkFJTEVSAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTCB8fCBBLT50eXBlID09IE1BVFJJWF9UWVBFX0lOVEVHRVIAQ0VMTEJPUkRFUgBCUgAqUgBRAEVYUABCX1VQAFNVUABUT1AATwBtYXBOAFxOAEJfRE9XTgBUSE9STgAlJUJFR0lOAFJPV1NQQU4AQ09MU1BBTgBOQU4AUE0AQk9UVE9NAEJNAEFNACVIOiVNAFxMAHRhaWxVUkwAbGFiZWxVUkwAZWRnZVVSTABoZWFkVVJMAEhUTUwAeCE9TlVMTABxdWV1ZV9wb3AoJnEpID09IE5VTEwARURfdG9fdmlydChvcmlnKSA9PSBOVUxMAEVEX3RvX3ZpcnQoZSkgPT0gTlVMTABwcmVmaXggIT0gTlVMTABkdGQtPnNjYWZmSW5kZXggIT0gTlVMTABpbnB1dCAhPSBOVUxMAGxpc3QgIT0gTlVMTAByZWZlcmVudCAhPSBOVUxMAHMgIT0gTlVMTABhdHRyICE9IE5VTEwAbGVhZGVyICE9IE5VTEwAcSAhPSBOVUxMAGl0ZW0gIT0gTlVMTABoYXlzdGFjayAhPSBOVUxMAHNjcmF0Y2ggIT0gTlVMTABvcnRob2cgIT0gTlVMTABzZWxmICE9IE5VTEwAdmFsdWUgIT0gTlVMTABqb2ItPm91dHB1dF9maWxlICE9IE5VTEwAc291cmNlICE9IE5VTEwAam9iICE9IE5VTEwAc291cmNlLmRhdGEgIT0gTlVMTABiLmRhdGEgIT0gTlVMTABhLmRhdGEgIT0gTlVMTABsaXN0ICYmIGxpc3RbMF0gIT0gTlVMTABBRiAhPSBOVUxMAEVEX3RvX3ZpcnQob3JpZykgIT0gTlVMTABMQ19BTEwAQkwAYmVzdGNvc3QgPCBIVUdFX1ZBTABOT1JNQUwAUkFESUFMAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTABVUlcgQ2hhbmNlcnkgTABVUlcgQm9va21hbiBMAENlbnR1cnkgU2Nob29sYm9vayBMAFVSVyBHb3RoaWMgTABLSwBKAGkgPCBNQVhfSQBQLT5lbmQudGhldGEgPCAyICogTV9QSQBBU0NJSQBcSABFVEgAV0lEVEgARE9URk9OVFBBVEgAR0RGT05UUEFUSABta05Db25zdHJhaW50RwBcRwBFWFBBVF9FTlRJVFlfREVCVUcARVhQQVRfRU5UUk9QWV9ERUJVRwBFWFBBVF9BQ0NPVU5USU5HX0RFQlVHAFJORwBTUFJJTkcAQ0VMTFBBRERJTkcAQ0VMTFNQQUNJTkcATEFORwBJTUcAXHhGACUlRU9GAElORgBceEZGAFJJRkYAZGVsdGEgPD0gMHhGRkZGAFx4RUYAXHhERgBceENGAFx4QkYAXHhBRgBceDlGAFx4OEYAXHg3RgBceDFGAFx4RQBcRQBQT0lOVC1TSVpFAFRSVUUAQ0xPU0UARkFMU0UAa2luZCA9PSBMVF9OT05FAEdSQURJRU5UQU5HTEUAVFJJQU5HTEUATUlERExFAElOVklTSUJMRQBUQUJMRQBBR1RZUEUob2JqKSA9PSBBR0lORURHRSB8fCBBR1RZUEUob2JqKSA9PSBBR09VVEVER0UAXHhGRQBceEVFAFx4REUAQl9OT0RFAFx4Q0UAXHhCRQBceEFFAFx4OUUAXHg4RQBceDFFAFREAEEtPmZvcm1hdCA9PSBGT1JNQVRfQ09PUkQAbiAmJiBpID49IDAgJiYgaSA8IE5PREVDQVJEACUlRU5EAEhZQlJJRABTT0xJRABceEZEAFx4RUQARE9UVEVEAERBU0hFRABST1VOREVEAFx4REQAXHhDRABceEJEAFx4QUQAXHg5RABceDhEAFx4MUQAXHhDAGRlbGV0ZVZQU0MAXHhGQwBceEVDAFx4REMAXHhDQwBceEJDAFx4QUMAXHg5QwBceDhDAFx4MUMAXHhCAFNVQgBceEZCAFx4RUIAXHhEQgBceENCAFx4QkIAXHhBQgBceDlCAFx4OEIAXHgxQgBBICYmIEIAXHhGQQBceEVBAFx4REEAXHhDQQBceEJBAFx4QUEAXHg5QQBceDhBAFx4MUEAQAA/ADwlcz4APG5pbD4APC90c3Bhbj48L3RleHRQYXRoPgAKICAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPgA+Cjx0aXRsZT4APEZPTlQ+ADxCUj4APEhUTUw+ADwvSFRNTD4APElNRz4AU3ludGF4IGVycm9yOiBub24tc3BhY2Ugc3RyaW5nIHVzZWQgYmVmb3JlIDxUQUJMRT4AU3ludGF4IGVycm9yOiBub24tc3BhY2Ugc3RyaW5nIHVzZWQgYWZ0ZXIgPC9UQUJMRT4APFREPgAtPgAiPgAJW2tleT0APD0APAAmI3gleDsAJnF1b3Q7ACZsdDsAJmd0OwAmYW1wOwAjJWQ7ACYjMzk7ACYjNDU7ACYjOTM7ACYjMTM7ACYjMTYwOwAmIzEwOwA7c3RvcC1vcGFjaXR5OgAlJUJvdW5kaW5nQm94OgBjYWxjdWxhdGluZyBzaG9ydGVzdCBwYXRocyBhbmQgc2V0dGluZyB1cCBzdHJlc3MgdGVybXM6ADxzdG9wIG9mZnNldD0iJS4wM2YiIHN0eWxlPSJzdG9wLWNvbG9yOgA8c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOgA8c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOgBzb2x2aW5nIG1vZGVsOgAvXDoAZ3JleTkAZ3JheTkAXHhGOQBceEU5AFx4RDkAXHhDOQBceEI5AFx4QTkAZ3JleTk5AGdyYXk5OQBceDk5AGdyZXk4OQBncmF5ODkAXHg4OQAwMTIzNDU2Nzg5AGdyZXk3OQBncmF5NzkAZ3JleTY5AGdyYXk2OQBncmV5NTkAZ3JheTU5AGdyZXk0OQBncmF5NDkAZ3JleTM5AGdyYXkzOQBncmV5MjkAZ3JheTI5AGdyZXkxOQBncmF5MTkAXHgxOQAvcmRneTkvOQAvYnVwdTkvOQAvcmRwdTkvOQAvcHVidTkvOQAveWxnbmJ1OS85AC9nbmJ1OS85AC9yZHlsYnU5LzkAL3JkYnU5LzkAL2dyZXlzOS85AC9ncmVlbnM5LzkAL2JsdWVzOS85AC9wdXJwbGVzOS85AC9vcmFuZ2VzOS85AC9yZWRzOS85AC9wdW9yOS85AC95bG9yYnI5LzkAL3B1YnVnbjkvOQAvYnVnbjkvOQAvcHJnbjkvOQAvcmR5bGduOS85AC95bGduOS85AC9zcGVjdHJhbDkvOQAvcGl5ZzkvOQAvYnJiZzkvOQAvcHVyZDkvOQAveWxvcnJkOS85AC9vcnJkOS85AC9wYWlyZWQ5LzkAL3NldDM5LzkAL3NldDE5LzkAL3Bhc3RlbDE5LzkAL3BhaXJlZDEyLzkAL3NldDMxMi85AC9yZGd5MTEvOQAvcmR5bGJ1MTEvOQAvcmRidTExLzkAL3B1b3IxMS85AC9wcmduMTEvOQAvcmR5bGduMTEvOQAvc3BlY3RyYWwxMS85AC9waXlnMTEvOQAvYnJiZzExLzkAL3BhaXJlZDExLzkAL3NldDMxMS85AC9yZGd5MTAvOQAvcmR5bGJ1MTAvOQAvcmRidTEwLzkAL3B1b3IxMC85AC9wcmduMTAvOQAvcmR5bGduMTAvOQAvc3BlY3RyYWwxMC85AC9waXlnMTAvOQAvYnJiZzEwLzkAL3BhaXJlZDEwLzkAL3NldDMxMC85AGdyZXk4AGdyYXk4AFx4OAB1dGY4ACNmOGY4ZjgAI2U4ZThlOABceEY4AEdJRjgAXHhFOABceEQ4AFx4QzgAXHhCOABceEE4AGdyZXk5OABncmF5OTgAXHg5OABncmV5ODgAZ3JheTg4AFx4ODgAZ3JleTc4AGdyYXk3OABncmV5NjgAZ3JheTY4AGdyZXk1OABncmF5NTgAZ3JleTQ4AGdyYXk0OABncmV5MzgAZ3JheTM4AGdyZXkyOABncmF5MjgAZ3JleTE4AGdyYXkxOABceDE4AC9yZGd5OS84AC9idXB1OS84AC9yZHB1OS84AC9wdWJ1OS84AC95bGduYnU5LzgAL2duYnU5LzgAL3JkeWxidTkvOAAvcmRidTkvOAAvZ3JleXM5LzgAL2dyZWVuczkvOAAvYmx1ZXM5LzgAL3B1cnBsZXM5LzgAL29yYW5nZXM5LzgAL3JlZHM5LzgAL3B1b3I5LzgAL3lsb3JicjkvOAAvcHVidWduOS84AC9idWduOS84AC9wcmduOS84AC9yZHlsZ245LzgAL3lsZ245LzgAL3NwZWN0cmFsOS84AC9waXlnOS84AC9icmJnOS84AC9wdXJkOS84AC95bG9ycmQ5LzgAL29ycmQ5LzgAL3BhaXJlZDkvOAAvc2V0MzkvOAAvc2V0MTkvOAAvcGFzdGVsMTkvOAAvcmRneTgvOAAvYnVwdTgvOAAvcmRwdTgvOAAvcHVidTgvOAAveWxnbmJ1OC84AC9nbmJ1OC84AC9yZHlsYnU4LzgAL3JkYnU4LzgAL2FjY2VudDgvOAAvZ3JleXM4LzgAL2dyZWVuczgvOAAvYmx1ZXM4LzgAL3B1cnBsZXM4LzgAL29yYW5nZXM4LzgAL3JlZHM4LzgAL3B1b3I4LzgAL3lsb3JicjgvOAAvcHVidWduOC84AC9idWduOC84AC9wcmduOC84AC9yZHlsZ244LzgAL3lsZ244LzgAL3NwZWN0cmFsOC84AC9waXlnOC84AC9icmJnOC84AC9wdXJkOC84AC95bG9ycmQ4LzgAL29ycmQ4LzgAL3BhaXJlZDgvOAAvc2V0MzgvOAAvc2V0MjgvOAAvcGFzdGVsMjgvOAAvZGFyazI4LzgAL3NldDE4LzgAL3Bhc3RlbDE4LzgAL3BhaXJlZDEyLzgAL3NldDMxMi84AC9yZGd5MTEvOAAvcmR5bGJ1MTEvOAAvcmRidTExLzgAL3B1b3IxMS84AC9wcmduMTEvOAAvcmR5bGduMTEvOAAvc3BlY3RyYWwxMS84AC9waXlnMTEvOAAvYnJiZzExLzgAL3BhaXJlZDExLzgAL3NldDMxMS84AC9yZGd5MTAvOAAvcmR5bGJ1MTAvOAAvcmRidTEwLzgAL3B1b3IxMC84AC9wcmduMTAvOAAvcmR5bGduMTAvOAAvc3BlY3RyYWwxMC84AC9waXlnMTAvOAAvYnJiZzEwLzgAL3BhaXJlZDEwLzgAL3NldDMxMC84AHV0Zi04AEMuVVRGLTgAZ3JleTcAZ3JheTcAXHg3AFx4RjcAXHhFNwBceEQ3AFx4QzcAXHhCNwBceEE3AGdyZXk5NwBncmF5OTcAXHg5NwBncmV5ODcAZ3JheTg3AFx4ODcAZ3JleTc3AGdyYXk3NwBncmV5NjcAZ3JheTY3AGdyZXk1NwBncmF5NTcAZ3JleTQ3AGdyYXk0NwBncmV5MzcAZ3JheTM3AGdyZXkyNwBncmF5MjcAZ3JleTE3AGdyYXkxNwBceDE3AC9yZGd5OS83AC9idXB1OS83AC9yZHB1OS83AC9wdWJ1OS83AC95bGduYnU5LzcAL2duYnU5LzcAL3JkeWxidTkvNwAvcmRidTkvNwAvZ3JleXM5LzcAL2dyZWVuczkvNwAvYmx1ZXM5LzcAL3B1cnBsZXM5LzcAL29yYW5nZXM5LzcAL3JlZHM5LzcAL3B1b3I5LzcAL3lsb3JicjkvNwAvcHVidWduOS83AC9idWduOS83AC9wcmduOS83AC9yZHlsZ245LzcAL3lsZ245LzcAL3NwZWN0cmFsOS83AC9waXlnOS83AC9icmJnOS83AC9wdXJkOS83AC95bG9ycmQ5LzcAL29ycmQ5LzcAL3BhaXJlZDkvNwAvc2V0MzkvNwAvc2V0MTkvNwAvcGFzdGVsMTkvNwAvcmRneTgvNwAvYnVwdTgvNwAvcmRwdTgvNwAvcHVidTgvNwAveWxnbmJ1OC83AC9nbmJ1OC83AC9yZHlsYnU4LzcAL3JkYnU4LzcAL2FjY2VudDgvNwAvZ3JleXM4LzcAL2dyZWVuczgvNwAvYmx1ZXM4LzcAL3B1cnBsZXM4LzcAL29yYW5nZXM4LzcAL3JlZHM4LzcAL3B1b3I4LzcAL3lsb3JicjgvNwAvcHVidWduOC83AC9idWduOC83AC9wcmduOC83AC9yZHlsZ244LzcAL3lsZ244LzcAL3NwZWN0cmFsOC83AC9waXlnOC83AC9icmJnOC83AC9wdXJkOC83AC95bG9ycmQ4LzcAL29ycmQ4LzcAL3BhaXJlZDgvNwAvc2V0MzgvNwAvc2V0MjgvNwAvcGFzdGVsMjgvNwAvZGFyazI4LzcAL3NldDE4LzcAL3Bhc3RlbDE4LzcAL3JkZ3k3LzcAL2J1cHU3LzcAL3JkcHU3LzcAL3B1YnU3LzcAL3lsZ25idTcvNwAvZ25idTcvNwAvcmR5bGJ1Ny83AC9yZGJ1Ny83AC9hY2NlbnQ3LzcAL2dyZXlzNy83AC9ncmVlbnM3LzcAL2JsdWVzNy83AC9wdXJwbGVzNy83AC9vcmFuZ2VzNy83AC9yZWRzNy83AC9wdW9yNy83AC95bG9yYnI3LzcAL3B1YnVnbjcvNwAvYnVnbjcvNwAvcHJnbjcvNwAvcmR5bGduNy83AC95bGduNy83AC9zcGVjdHJhbDcvNwAvcGl5ZzcvNwAvYnJiZzcvNwAvcHVyZDcvNwAveWxvcnJkNy83AC9vcnJkNy83AC9wYWlyZWQ3LzcAL3NldDM3LzcAL3NldDI3LzcAL3Bhc3RlbDI3LzcAL2RhcmsyNy83AC9zZXQxNy83AC9wYXN0ZWwxNy83AC9wYWlyZWQxMi83AC9zZXQzMTIvNwAvcmRneTExLzcAL3JkeWxidTExLzcAL3JkYnUxMS83AC9wdW9yMTEvNwAvcHJnbjExLzcAL3JkeWxnbjExLzcAL3NwZWN0cmFsMTEvNwAvcGl5ZzExLzcAL2JyYmcxMS83AC9wYWlyZWQxMS83AC9zZXQzMTEvNwAvcmRneTEwLzcAL3JkeWxidTEwLzcAL3JkYnUxMC83AC9wdW9yMTAvNwAvcHJnbjEwLzcAL3JkeWxnbjEwLzcAL3NwZWN0cmFsMTAvNwAvcGl5ZzEwLzcAL2JyYmcxMC83AC9wYWlyZWQxMC83AC9zZXQzMTAvNwAxLjcAZ3JleTYAZ3JheTYAXHg2AFx4RjYAXHhFNgBceEQ2AFx4QzYAXHhCNgBceEE2AGdyZXk5NgBncmF5OTYAXHg5NgBncmV5ODYAZ3JheTg2AFx4ODYAZ3JleTc2AGdyYXk3NgBncmV5NjYAZ3JheTY2AGdyZXk1NgBncmF5NTYAZ3JleTQ2AGdyYXk0NgBncmV5MzYAZ3JheTM2AGdyZXkyNgBncmF5MjYAZ3JleTE2AGdyYXkxNgBceDE2AC9yZGd5OS82AC9idXB1OS82AC9yZHB1OS82AC9wdWJ1OS82AC95bGduYnU5LzYAL2duYnU5LzYAL3JkeWxidTkvNgAvcmRidTkvNgAvZ3JleXM5LzYAL2dyZWVuczkvNgAvYmx1ZXM5LzYAL3B1cnBsZXM5LzYAL29yYW5nZXM5LzYAL3JlZHM5LzYAL3B1b3I5LzYAL3lsb3JicjkvNgAvcHVidWduOS82AC9idWduOS82AC9wcmduOS82AC9yZHlsZ245LzYAL3lsZ245LzYAL3NwZWN0cmFsOS82AC9waXlnOS82AC9icmJnOS82AC9wdXJkOS82AC95bG9ycmQ5LzYAL29ycmQ5LzYAL3BhaXJlZDkvNgAvc2V0MzkvNgAvc2V0MTkvNgAvcGFzdGVsMTkvNgAvcmRneTgvNgAvYnVwdTgvNgAvcmRwdTgvNgAvcHVidTgvNgAveWxnbmJ1OC82AC9nbmJ1OC82AC9yZHlsYnU4LzYAL3JkYnU4LzYAL2FjY2VudDgvNgAvZ3JleXM4LzYAL2dyZWVuczgvNgAvYmx1ZXM4LzYAL3B1cnBsZXM4LzYAL29yYW5nZXM4LzYAL3JlZHM4LzYAL3B1b3I4LzYAL3lsb3JicjgvNgAvcHVidWduOC82AC9idWduOC82AC9wcmduOC82AC9yZHlsZ244LzYAL3lsZ244LzYAL3NwZWN0cmFsOC82AC9waXlnOC82AC9icmJnOC82AC9wdXJkOC82AC95bG9ycmQ4LzYAL29ycmQ4LzYAL3BhaXJlZDgvNgAvc2V0MzgvNgAvc2V0MjgvNgAvcGFzdGVsMjgvNgAvZGFyazI4LzYAL3NldDE4LzYAL3Bhc3RlbDE4LzYAL3JkZ3k3LzYAL2J1cHU3LzYAL3JkcHU3LzYAL3B1YnU3LzYAL3lsZ25idTcvNgAvZ25idTcvNgAvcmR5bGJ1Ny82AC9yZGJ1Ny82AC9hY2NlbnQ3LzYAL2dyZXlzNy82AC9ncmVlbnM3LzYAL2JsdWVzNy82AC9wdXJwbGVzNy82AC9vcmFuZ2VzNy82AC9yZWRzNy82AC9wdW9yNy82AC95bG9yYnI3LzYAL3B1YnVnbjcvNgAvYnVnbjcvNgAvcHJnbjcvNgAvcmR5bGduNy82AC95bGduNy82AC9zcGVjdHJhbDcvNgAvcGl5ZzcvNgAvYnJiZzcvNgAvcHVyZDcvNgAveWxvcnJkNy82AC9vcnJkNy82AC9wYWlyZWQ3LzYAL3NldDM3LzYAL3NldDI3LzYAL3Bhc3RlbDI3LzYAL2RhcmsyNy82AC9zZXQxNy82AC9wYXN0ZWwxNy82AC9yZGd5Ni82AC9idXB1Ni82AC9yZHB1Ni82AC9wdWJ1Ni82AC95bGduYnU2LzYAL2duYnU2LzYAL3JkeWxidTYvNgAvcmRidTYvNgAvYWNjZW50Ni82AC9ncmV5czYvNgAvZ3JlZW5zNi82AC9ibHVlczYvNgAvcHVycGxlczYvNgAvb3JhbmdlczYvNgAvcmVkczYvNgAvcHVvcjYvNgAveWxvcmJyNi82AC9wdWJ1Z242LzYAL2J1Z242LzYAL3ByZ242LzYAL3JkeWxnbjYvNgAveWxnbjYvNgAvc3BlY3RyYWw2LzYAL3BpeWc2LzYAL2JyYmc2LzYAL3B1cmQ2LzYAL3lsb3JyZDYvNgAvb3JyZDYvNgAvcGFpcmVkNi82AC9zZXQzNi82AC9zZXQyNi82AC9wYXN0ZWwyNi82AC9kYXJrMjYvNgAvc2V0MTYvNgAvcGFzdGVsMTYvNgAvcGFpcmVkMTIvNgAvc2V0MzEyLzYAL3JkZ3kxMS82AC9yZHlsYnUxMS82AC9yZGJ1MTEvNgAvcHVvcjExLzYAL3ByZ24xMS82AC9yZHlsZ24xMS82AC9zcGVjdHJhbDExLzYAL3BpeWcxMS82AC9icmJnMTEvNgAvcGFpcmVkMTEvNgAvc2V0MzExLzYAL3JkZ3kxMC82AC9yZHlsYnUxMC82AC9yZGJ1MTAvNgAvcHVvcjEwLzYAL3ByZ24xMC82AC9yZHlsZ24xMC82AC9zcGVjdHJhbDEwLzYAL3BpeWcxMC82AC9icmJnMTAvNgAvcGFpcmVkMTAvNgAvc2V0MzEwLzYAZ3JleTUAZ3JheTUAXHg1AGJpZzUAXHhGNQBceEU1AFx4RDUAXHhDNQBceEI1AFx4QTUAZ3JleTk1AGdyYXk5NQBceDk1AGdyZXk4NQBncmF5ODUAXHg4NQBncmV5NzUAZ3JheTc1AGdyZXk2NQBncmF5NjUAZ3JleTU1AGdyYXk1NQBncmV5NDUAZ3JheTQ1AGdyZXkzNQBncmF5MzUAZ3JleTI1AGdyYXkyNQBncmV5MTUAZ3JheTE1AFx4MTUAZ3JheTA1AC9yZGd5OS81AC9idXB1OS81AC9yZHB1OS81AC9wdWJ1OS81AC95bGduYnU5LzUAL2duYnU5LzUAL3JkeWxidTkvNQAvcmRidTkvNQAvZ3JleXM5LzUAL2dyZWVuczkvNQAvYmx1ZXM5LzUAL3B1cnBsZXM5LzUAL29yYW5nZXM5LzUAL3JlZHM5LzUAL3B1b3I5LzUAL3lsb3JicjkvNQAvcHVidWduOS81AC9idWduOS81AC9wcmduOS81AC9yZHlsZ245LzUAL3lsZ245LzUAL3NwZWN0cmFsOS81AC9waXlnOS81AC9icmJnOS81AC9wdXJkOS81AC95bG9ycmQ5LzUAL29ycmQ5LzUAL3BhaXJlZDkvNQAvc2V0MzkvNQAvc2V0MTkvNQAvcGFzdGVsMTkvNQAvcmRneTgvNQAvYnVwdTgvNQAvcmRwdTgvNQAvcHVidTgvNQAveWxnbmJ1OC81AC9nbmJ1OC81AC9yZHlsYnU4LzUAL3JkYnU4LzUAL2FjY2VudDgvNQAvZ3JleXM4LzUAL2dyZWVuczgvNQAvYmx1ZXM4LzUAL3B1cnBsZXM4LzUAL29yYW5nZXM4LzUAL3JlZHM4LzUAL3B1b3I4LzUAL3lsb3JicjgvNQAvcHVidWduOC81AC9idWduOC81AC9wcmduOC81AC9yZHlsZ244LzUAL3lsZ244LzUAL3NwZWN0cmFsOC81AC9waXlnOC81AC9icmJnOC81AC9wdXJkOC81AC95bG9ycmQ4LzUAL29ycmQ4LzUAL3BhaXJlZDgvNQAvc2V0MzgvNQAvc2V0MjgvNQAvcGFzdGVsMjgvNQAvZGFyazI4LzUAL3NldDE4LzUAL3Bhc3RlbDE4LzUAL3JkZ3k3LzUAL2J1cHU3LzUAL3JkcHU3LzUAL3B1YnU3LzUAL3lsZ25idTcvNQAvZ25idTcvNQAvcmR5bGJ1Ny81AC9yZGJ1Ny81AC9hY2NlbnQ3LzUAL2dyZXlzNy81AC9ncmVlbnM3LzUAL2JsdWVzNy81AC9wdXJwbGVzNy81AC9vcmFuZ2VzNy81AC9yZWRzNy81AC9wdW9yNy81AC95bG9yYnI3LzUAL3B1YnVnbjcvNQAvYnVnbjcvNQAvcHJnbjcvNQAvcmR5bGduNy81AC95bGduNy81AC9zcGVjdHJhbDcvNQAvcGl5ZzcvNQAvYnJiZzcvNQAvcHVyZDcvNQAveWxvcnJkNy81AC9vcnJkNy81AC9wYWlyZWQ3LzUAL3NldDM3LzUAL3NldDI3LzUAL3Bhc3RlbDI3LzUAL2RhcmsyNy81AC9zZXQxNy81AC9wYXN0ZWwxNy81AC9yZGd5Ni81AC9idXB1Ni81AC9yZHB1Ni81AC9wdWJ1Ni81AC95bGduYnU2LzUAL2duYnU2LzUAL3JkeWxidTYvNQAvcmRidTYvNQAvYWNjZW50Ni81AC9ncmV5czYvNQAvZ3JlZW5zNi81AC9ibHVlczYvNQAvcHVycGxlczYvNQAvb3JhbmdlczYvNQAvcmVkczYvNQAvcHVvcjYvNQAveWxvcmJyNi81AC9wdWJ1Z242LzUAL2J1Z242LzUAL3ByZ242LzUAL3JkeWxnbjYvNQAveWxnbjYvNQAvc3BlY3RyYWw2LzUAL3BpeWc2LzUAL2JyYmc2LzUAL3B1cmQ2LzUAL3lsb3JyZDYvNQAvb3JyZDYvNQAvcGFpcmVkNi81AC9zZXQzNi81AC9zZXQyNi81AC9wYXN0ZWwyNi81AC9kYXJrMjYvNQAvc2V0MTYvNQAvcGFzdGVsMTYvNQAvcmRneTUvNQAvYnVwdTUvNQAvcmRwdTUvNQAvcHVidTUvNQAveWxnbmJ1NS81AC9nbmJ1NS81AC9yZHlsYnU1LzUAL3JkYnU1LzUAL2FjY2VudDUvNQAvZ3JleXM1LzUAL2dyZWVuczUvNQAvYmx1ZXM1LzUAL3B1cnBsZXM1LzUAL29yYW5nZXM1LzUAL3JlZHM1LzUAL3B1b3I1LzUAL3lsb3JicjUvNQAvcHVidWduNS81AC9idWduNS81AC9wcmduNS81AC9yZHlsZ241LzUAL3lsZ241LzUAL3NwZWN0cmFsNS81AC9waXlnNS81AC9icmJnNS81AC9wdXJkNS81AC95bG9ycmQ1LzUAL29ycmQ1LzUAL3BhaXJlZDUvNQAvc2V0MzUvNQAvc2V0MjUvNQAvcGFzdGVsMjUvNQAvZGFyazI1LzUAL3NldDE1LzUAL3Bhc3RlbDE1LzUAL3BhaXJlZDEyLzUAL3NldDMxMi81AC9yZGd5MTEvNQAvcmR5bGJ1MTEvNQAvcmRidTExLzUAL3B1b3IxMS81AC9wcmduMTEvNQAvcmR5bGduMTEvNQAvc3BlY3RyYWwxMS81AC9waXlnMTEvNQAvYnJiZzExLzUAL3BhaXJlZDExLzUAL3NldDMxMS81AC9yZGd5MTAvNQAvcmR5bGJ1MTAvNQAvcmRidTEwLzUAL3B1b3IxMC81AC9wcmduMTAvNQAvcmR5bGduMTAvNQAvc3BlY3RyYWwxMC81AC9waXlnMTAvNQAvYnJiZzEwLzUAL3BhaXJlZDEwLzUAL3NldDMxMC81AGJpZy01AEJJRy01ACAtZGFzaCA1AGl2b3J5NABncmV5NABkYXJrc2xhdGVncmF5NABceDQAc25vdzQAbGlnaHR5ZWxsb3c0AGhvbmV5ZGV3NAB3aGVhdDQAdG9tYXRvNAByb3N5YnJvd240AG1hcm9vbjQAbGlnaHRzYWxtb240AGxlbW9uY2hpZmZvbjQAc3ByaW5nZ3JlZW40AGRhcmtvbGl2ZWdyZWVuNABwYWxlZ3JlZW40AGRhcmtzZWFncmVlbjQAbGlnaHRjeWFuNAB0YW40AHBsdW00AHNlYXNoZWxsNABjb3JhbDQAaG90cGluazQAbGlnaHRwaW5rNABkZWVwcGluazQAY29ybnNpbGs0AGZpcmVicmljazQAa2hha2k0AGxhdmVuZGVyYmx1c2g0AHBlYWNocHVmZjQAYmlzcXVlNABsaWdodHNreWJsdWU0AGRlZXBza3libHVlNABsaWdodGJsdWU0AGNhZGV0Ymx1ZTQAZG9kZ2VyYmx1ZTQAbGlnaHRzdGVlbGJsdWU0AHJveWFsYmx1ZTQAc2xhdGVibHVlNABuYXZham93aGl0ZTQAYW50aXF1ZXdoaXRlNABjaG9jb2xhdGU0AGNoYXJ0cmV1c2U0AG1pc3R5cm9zZTQAcGFsZXR1cnF1b2lzZTQAYXp1cmU0AHRoZXJlNABhcXVhbWFyaW5lNAB0aGlzdGxlNABtZWRpdW1wdXJwbGU0AGRhcmtvcmFuZ2U0AGxpZ2h0Z29sZGVucm9kNABkYXJrZ29sZGVucm9kNABidXJseXdvb2Q0AGdvbGQ0AG1lZGl1bW9yY2hpZDQAZGFya29yY2hpZDQAcGFsZXZpb2xldHJlZDQAaW5kaWFucmVkNABvcmFuZ2VyZWQ0AG9saXZlZHJhYjQAbWFnZW50YTQAc2llbm5hNABceEY0AFx4RTQAXHhENABceEM0AFx4QjQAXHhBNABncmV5OTQAZ3JheTk0AFx4OTQAZ3JleTg0AGdyYXk4NABceDg0AGdyZXk3NABncmF5NzQAZ3JleTY0AGdyYXk2NABncmV5NTQAZ3JheTU0AGdyZXk0NABncmF5NDQAZ3JleTM0AGdyYXkzNABmcmFjMzQAZ3JleTI0AGdyYXkyNABncmV5MTQAZ3JheTE0AFx4MTQAZnJhYzE0AC9yZGd5OS80AC9idXB1OS80AC9yZHB1OS80AC9wdWJ1OS80AC95bGduYnU5LzQAL2duYnU5LzQAL3JkeWxidTkvNAAvcmRidTkvNAAvZ3JleXM5LzQAL2dyZWVuczkvNAAvYmx1ZXM5LzQAL3B1cnBsZXM5LzQAL29yYW5nZXM5LzQAL3JlZHM5LzQAL3B1b3I5LzQAL3lsb3JicjkvNAAvcHVidWduOS80AC9idWduOS80AC9wcmduOS80AC9yZHlsZ245LzQAL3lsZ245LzQAL3NwZWN0cmFsOS80AC9waXlnOS80AC9icmJnOS80AC9wdXJkOS80AC95bG9ycmQ5LzQAL29ycmQ5LzQAL3BhaXJlZDkvNAAvc2V0MzkvNAAvc2V0MTkvNAAvcGFzdGVsMTkvNAAvcmRneTgvNAAvYnVwdTgvNAAvcmRwdTgvNAAvcHVidTgvNAAveWxnbmJ1OC80AC9nbmJ1OC80AC9yZHlsYnU4LzQAL3JkYnU4LzQAL2FjY2VudDgvNAAvZ3JleXM4LzQAL2dyZWVuczgvNAAvYmx1ZXM4LzQAL3B1cnBsZXM4LzQAL29yYW5nZXM4LzQAL3JlZHM4LzQAL3B1b3I4LzQAL3lsb3JicjgvNAAvcHVidWduOC80AC9idWduOC80AC9wcmduOC80AC9yZHlsZ244LzQAL3lsZ244LzQAL3NwZWN0cmFsOC80AC9waXlnOC80AC9icmJnOC80AC9wdXJkOC80AC95bG9ycmQ4LzQAL29ycmQ4LzQAL3BhaXJlZDgvNAAvc2V0MzgvNAAvc2V0MjgvNAAvcGFzdGVsMjgvNAAvZGFyazI4LzQAL3NldDE4LzQAL3Bhc3RlbDE4LzQAL3JkZ3k3LzQAL2J1cHU3LzQAL3JkcHU3LzQAL3B1YnU3LzQAL3lsZ25idTcvNAAvZ25idTcvNAAvcmR5bGJ1Ny80AC9yZGJ1Ny80AC9hY2NlbnQ3LzQAL2dyZXlzNy80AC9ncmVlbnM3LzQAL2JsdWVzNy80AC9wdXJwbGVzNy80AC9vcmFuZ2VzNy80AC9yZWRzNy80AC9wdW9yNy80AC95bG9yYnI3LzQAL3B1YnVnbjcvNAAvYnVnbjcvNAAvcHJnbjcvNAAvcmR5bGduNy80AC95bGduNy80AC9zcGVjdHJhbDcvNAAvcGl5ZzcvNAAvYnJiZzcvNAAvcHVyZDcvNAAveWxvcnJkNy80AC9vcnJkNy80AC9wYWlyZWQ3LzQAL3NldDM3LzQAL3NldDI3LzQAL3Bhc3RlbDI3LzQAL2RhcmsyNy80AC9zZXQxNy80AC9wYXN0ZWwxNy80AC9yZGd5Ni80AC9idXB1Ni80AC9yZHB1Ni80AC9wdWJ1Ni80AC95bGduYnU2LzQAL2duYnU2LzQAL3JkeWxidTYvNAAvcmRidTYvNAAvYWNjZW50Ni80AC9ncmV5czYvNAAvZ3JlZW5zNi80AC9ibHVlczYvNAAvcHVycGxlczYvNAAvb3JhbmdlczYvNAAvcmVkczYvNAAvcHVvcjYvNAAveWxvcmJyNi80AC9wdWJ1Z242LzQAL2J1Z242LzQAL3ByZ242LzQAL3JkeWxnbjYvNAAveWxnbjYvNAAvc3BlY3RyYWw2LzQAL3BpeWc2LzQAL2JyYmc2LzQAL3B1cmQ2LzQAL3lsb3JyZDYvNAAvb3JyZDYvNAAvcGFpcmVkNi80AC9zZXQzNi80AC9zZXQyNi80AC9wYXN0ZWwyNi80AC9kYXJrMjYvNAAvc2V0MTYvNAAvcGFzdGVsMTYvNAAvcmRneTUvNAAvYnVwdTUvNAAvcmRwdTUvNAAvcHVidTUvNAAveWxnbmJ1NS80AC9nbmJ1NS80AC9yZHlsYnU1LzQAL3JkYnU1LzQAL2FjY2VudDUvNAAvZ3JleXM1LzQAL2dyZWVuczUvNAAvYmx1ZXM1LzQAL3B1cnBsZXM1LzQAL29yYW5nZXM1LzQAL3JlZHM1LzQAL3B1b3I1LzQAL3lsb3JicjUvNAAvcHVidWduNS80AC9idWduNS80AC9wcmduNS80AC9yZHlsZ241LzQAL3lsZ241LzQAL3NwZWN0cmFsNS80AC9waXlnNS80AC9icmJnNS80AC9wdXJkNS80AC95bG9ycmQ1LzQAL29ycmQ1LzQAL3BhaXJlZDUvNAAvc2V0MzUvNAAvc2V0MjUvNAAvcGFzdGVsMjUvNAAvZGFyazI1LzQAL3NldDE1LzQAL3Bhc3RlbDE1LzQAL3JkZ3k0LzQAL2J1cHU0LzQAL3JkcHU0LzQAL3B1YnU0LzQAL3lsZ25idTQvNAAvZ25idTQvNAAvcmR5bGJ1NC80AC9yZGJ1NC80AC9hY2NlbnQ0LzQAL2dyZXlzNC80AC9ncmVlbnM0LzQAL2JsdWVzNC80AC9wdXJwbGVzNC80AC9vcmFuZ2VzNC80AC9yZWRzNC80AC9wdW9yNC80AC95bG9yYnI0LzQAL3B1YnVnbjQvNAAvYnVnbjQvNAAvcHJnbjQvNAAvcmR5bGduNC80AC95bGduNC80AC9zcGVjdHJhbDQvNAAvcGl5ZzQvNAAvYnJiZzQvNAAvcHVyZDQvNAAveWxvcnJkNC80AC9vcnJkNC80AC9wYWlyZWQ0LzQAL3NldDM0LzQAL3NldDI0LzQAL3Bhc3RlbDI0LzQAL2RhcmsyNC80AC9zZXQxNC80AC9wYXN0ZWwxNC80AC9wYWlyZWQxMi80AC9zZXQzMTIvNAAvcmRneTExLzQAL3JkeWxidTExLzQAL3JkYnUxMS80AC9wdW9yMTEvNAAvcHJnbjExLzQAL3JkeWxnbjExLzQAL3NwZWN0cmFsMTEvNAAvcGl5ZzExLzQAL2JyYmcxMS80AC9wYWlyZWQxMS80AC9zZXQzMTEvNAAvcmRneTEwLzQAL3JkeWxidTEwLzQAL3JkYnUxMC80AC9wdW9yMTAvNAAvcHJnbjEwLzQAL3JkeWxnbjEwLzQAL3NwZWN0cmFsMTAvNAAvcGl5ZzEwLzQAL2JyYmcxMC80AC9wYWlyZWQxMC80AC9zZXQzMTAvNAAxLjQAbiA+PSA0AHNpZGVzID09IDQAaXZvcnkzAFNwYXJzZU1hdHJpeF9tdWx0aXBseTMAZ3JleTMAZGFya3NsYXRlZ3JheTMAXHgzAHNub3czAGxpZ2h0eWVsbG93MwBob25leWRldzMAd2hlYXQzAHN1cDMAdG9tYXRvMwByb3N5YnJvd24zAG1hcm9vbjMAbGlnaHRzYWxtb24zAGxlbW9uY2hpZmZvbjMAc3ByaW5nZ3JlZW4zAGRhcmtvbGl2ZWdyZWVuMwBwYWxlZ3JlZW4zAGRhcmtzZWFncmVlbjMAbGlnaHRjeWFuMwB0YW4zAHBsdW0zAHNlYXNoZWxsMwBjb3JhbDMAaG90cGluazMAbGlnaHRwaW5rMwBkZWVwcGluazMAY29ybnNpbGszAGZpcmVicmljazMAa2hha2kzAGxhdmVuZGVyYmx1c2gzAHBlYWNocHVmZjMAYmlzcXVlMwBsaWdodHNreWJsdWUzAGRlZXBza3libHVlMwBsaWdodGJsdWUzAGNhZGV0Ymx1ZTMAZG9kZ2VyYmx1ZTMAbGlnaHRzdGVlbGJsdWUzAHJveWFsYmx1ZTMAc2xhdGVibHVlMwBuYXZham93aGl0ZTMAYW50aXF1ZXdoaXRlMwBjaG9jb2xhdGUzAGNoYXJ0cmV1c2UzAG1pc3R5cm9zZTMAcGFsZXR1cnF1b2lzZTMAYXp1cmUzAGFxdWFtYXJpbmUzAHRoaXN0bGUzAG1lZGl1bXB1cnBsZTMAZGFya29yYW5nZTMAbGlnaHRnb2xkZW5yb2QzAGRhcmtnb2xkZW5yb2QzAGJ1cmx5d29vZDMAZ29sZDMAbWVkaXVtb3JjaGlkMwBkYXJrb3JjaGlkMwBwYWxldmlvbGV0cmVkMwBpbmRpYW5yZWQzAG9yYW5nZXJlZDMAb2xpdmVkcmFiMwBtYWdlbnRhMwBzaWVubmEzAFx4RjMAXHhFMwBceEQzAFx4QzMAXHhCMwBceEEzAGdyZXk5MwBncmF5OTMAXHg5MwBncmV5ODMAZ3JheTgzAFx4ODMAZ3JleTczAGdyYXk3MwBncmV5NjMAZ3JheTYzAGdyZXk1MwBncmF5NTMAZ3JleTQzAGdyYXk0MwBncmV5MzMAZ3JheTMzADIwMjQwODExLjIyMzMAZ3JleTIzAGdyYXkyMwBncmV5MTMAZ3JheTEzAFx4MTMAL3JkZ3k5LzMAL2J1cHU5LzMAL3JkcHU5LzMAL3B1YnU5LzMAL3lsZ25idTkvMwAvZ25idTkvMwAvcmR5bGJ1OS8zAC9yZGJ1OS8zAC9ncmV5czkvMwAvZ3JlZW5zOS8zAC9ibHVlczkvMwAvcHVycGxlczkvMwAvb3JhbmdlczkvMwAvcmVkczkvMwAvcHVvcjkvMwAveWxvcmJyOS8zAC9wdWJ1Z245LzMAL2J1Z245LzMAL3ByZ245LzMAL3JkeWxnbjkvMwAveWxnbjkvMwAvc3BlY3RyYWw5LzMAL3BpeWc5LzMAL2JyYmc5LzMAL3B1cmQ5LzMAL3lsb3JyZDkvMwAvb3JyZDkvMwAvcGFpcmVkOS8zAC9zZXQzOS8zAC9zZXQxOS8zAC9wYXN0ZWwxOS8zAC9yZGd5OC8zAC9idXB1OC8zAC9yZHB1OC8zAC9wdWJ1OC8zAC95bGduYnU4LzMAL2duYnU4LzMAL3JkeWxidTgvMwAvcmRidTgvMwAvYWNjZW50OC8zAC9ncmV5czgvMwAvZ3JlZW5zOC8zAC9ibHVlczgvMwAvcHVycGxlczgvMwAvb3JhbmdlczgvMwAvcmVkczgvMwAvcHVvcjgvMwAveWxvcmJyOC8zAC9wdWJ1Z244LzMAL2J1Z244LzMAL3ByZ244LzMAL3JkeWxnbjgvMwAveWxnbjgvMwAvc3BlY3RyYWw4LzMAL3BpeWc4LzMAL2JyYmc4LzMAL3B1cmQ4LzMAL3lsb3JyZDgvMwAvb3JyZDgvMwAvcGFpcmVkOC8zAC9zZXQzOC8zAC9zZXQyOC8zAC9wYXN0ZWwyOC8zAC9kYXJrMjgvMwAvc2V0MTgvMwAvcGFzdGVsMTgvMwAvcmRneTcvMwAvYnVwdTcvMwAvcmRwdTcvMwAvcHVidTcvMwAveWxnbmJ1Ny8zAC9nbmJ1Ny8zAC9yZHlsYnU3LzMAL3JkYnU3LzMAL2FjY2VudDcvMwAvZ3JleXM3LzMAL2dyZWVuczcvMwAvYmx1ZXM3LzMAL3B1cnBsZXM3LzMAL29yYW5nZXM3LzMAL3JlZHM3LzMAL3B1b3I3LzMAL3lsb3JicjcvMwAvcHVidWduNy8zAC9idWduNy8zAC9wcmduNy8zAC9yZHlsZ243LzMAL3lsZ243LzMAL3NwZWN0cmFsNy8zAC9waXlnNy8zAC9icmJnNy8zAC9wdXJkNy8zAC95bG9ycmQ3LzMAL29ycmQ3LzMAL3BhaXJlZDcvMwAvc2V0MzcvMwAvc2V0MjcvMwAvcGFzdGVsMjcvMwAvZGFyazI3LzMAL3NldDE3LzMAL3Bhc3RlbDE3LzMAL3JkZ3k2LzMAL2J1cHU2LzMAL3JkcHU2LzMAL3B1YnU2LzMAL3lsZ25idTYvMwAvZ25idTYvMwAvcmR5bGJ1Ni8zAC9yZGJ1Ni8zAC9hY2NlbnQ2LzMAL2dyZXlzNi8zAC9ncmVlbnM2LzMAL2JsdWVzNi8zAC9wdXJwbGVzNi8zAC9vcmFuZ2VzNi8zAC9yZWRzNi8zAC9wdW9yNi8zAC95bG9yYnI2LzMAL3B1YnVnbjYvMwAvYnVnbjYvMwAvcHJnbjYvMwAvcmR5bGduNi8zAC95bGduNi8zAC9zcGVjdHJhbDYvMwAvcGl5ZzYvMwAvYnJiZzYvMwAvcHVyZDYvMwAveWxvcnJkNi8zAC9vcnJkNi8zAC9wYWlyZWQ2LzMAL3NldDM2LzMAL3NldDI2LzMAL3Bhc3RlbDI2LzMAL2RhcmsyNi8zAC9zZXQxNi8zAC9wYXN0ZWwxNi8zAC9yZGd5NS8zAC9idXB1NS8zAC9yZHB1NS8zAC9wdWJ1NS8zAC95bGduYnU1LzMAL2duYnU1LzMAL3JkeWxidTUvMwAvcmRidTUvMwAvYWNjZW50NS8zAC9ncmV5czUvMwAvZ3JlZW5zNS8zAC9ibHVlczUvMwAvcHVycGxlczUvMwAvb3JhbmdlczUvMwAvcmVkczUvMwAvcHVvcjUvMwAveWxvcmJyNS8zAC9wdWJ1Z241LzMAL2J1Z241LzMAL3ByZ241LzMAL3JkeWxnbjUvMwAveWxnbjUvMwAvc3BlY3RyYWw1LzMAL3BpeWc1LzMAL2JyYmc1LzMAL3B1cmQ1LzMAL3lsb3JyZDUvMwAvb3JyZDUvMwAvcGFpcmVkNS8zAC9zZXQzNS8zAC9zZXQyNS8zAC9wYXN0ZWwyNS8zAC9kYXJrMjUvMwAvc2V0MTUvMwAvcGFzdGVsMTUvMwAvcmRneTQvMwAvYnVwdTQvMwAvcmRwdTQvMwAvcHVidTQvMwAveWxnbmJ1NC8zAC9nbmJ1NC8zAC9yZHlsYnU0LzMAL3JkYnU0LzMAL2FjY2VudDQvMwAvZ3JleXM0LzMAL2dyZWVuczQvMwAvYmx1ZXM0LzMAL3B1cnBsZXM0LzMAL29yYW5nZXM0LzMAL3JlZHM0LzMAL3B1b3I0LzMAL3lsb3JicjQvMwAvcHVidWduNC8zAC9idWduNC8zAC9wcmduNC8zAC9yZHlsZ240LzMAL3lsZ240LzMAL3NwZWN0cmFsNC8zAC9waXlnNC8zAC9icmJnNC8zAC9wdXJkNC8zAC95bG9ycmQ0LzMAL29ycmQ0LzMAL3BhaXJlZDQvMwAvc2V0MzQvMwAvc2V0MjQvMwAvcGFzdGVsMjQvMwAvZGFyazI0LzMAL3NldDE0LzMAL3Bhc3RlbDE0LzMAL3JkZ3kzLzMAL2J1cHUzLzMAL3JkcHUzLzMAL3B1YnUzLzMAL3lsZ25idTMvMwAvZ25idTMvMwAvcmR5bGJ1My8zAC9yZGJ1My8zAC9hY2NlbnQzLzMAL2dyZXlzMy8zAC9ncmVlbnMzLzMAL2JsdWVzMy8zAC9wdXJwbGVzMy8zAC9vcmFuZ2VzMy8zAC9yZWRzMy8zAC9wdW9yMy8zAC95bG9yYnIzLzMAL3B1YnVnbjMvMwAvYnVnbjMvMwAvcHJnbjMvMwAvcmR5bGduMy8zAC95bGduMy8zAC9zcGVjdHJhbDMvMwAvcGl5ZzMvMwAvYnJiZzMvMwAvcHVyZDMvMwAveWxvcnJkMy8zAC9vcnJkMy8zAC9wYWlyZWQzLzMAL3NldDMzLzMAL3NldDIzLzMAL3Bhc3RlbDIzLzMAL2RhcmsyMy8zAC9zZXQxMy8zAC9wYXN0ZWwxMy8zAC9wYWlyZWQxMi8zAC9zZXQzMTIvMwAvcmRneTExLzMAL3JkeWxidTExLzMAL3JkYnUxMS8zAC9wdW9yMTEvMwAvcHJnbjExLzMAL3JkeWxnbjExLzMAL3NwZWN0cmFsMTEvMwAvcGl5ZzExLzMAL2JyYmcxMS8zAC9wYWlyZWQxMS8zAC9zZXQzMTEvMwAvcmRneTEwLzMAL3JkeWxidTEwLzMAL3JkYnUxMC8zAC9wdW9yMTAvMwAvcHJnbjEwLzMAL3JkeWxnbjEwLzMAL3NwZWN0cmFsMTAvMwAvcGl5ZzEwLzMAL2JyYmcxMC8zAC9wYWlyZWQxMC8zAC9zZXQzMTAvMwBpdm9yeTIAZ3JleTIAZGFya3NsYXRlZ3JheTIAXHgyAHNub3cyAGxpZ2h0eWVsbG93MgBob25leWRldzIAUlRyZWVJbnNlcnQyAHdoZWF0MgBzdXAyAG5vcDIAdG9tYXRvMgByb3N5YnJvd24yAG1hcm9vbjIAbGlnaHRzYWxtb24yAGxlbW9uY2hpZmZvbjIAc3ByaW5nZ3JlZW4yAGRhcmtvbGl2ZWdyZWVuMgBwYWxlZ3JlZW4yAGRhcmtzZWFncmVlbjIAbGlnaHRjeWFuMgB0YW4yAHBsdW0yAHNlYXNoZWxsMgBjb3JhbDIAaG90cGluazIAbGlnaHRwaW5rMgBkZWVwcGluazIAY29ybnNpbGsyAGZpcmVicmljazIAa2hha2kyAGxhdmVuZGVyYmx1c2gyAHBlYWNocHVmZjIAYnJvbnplMgBiaXNxdWUyAGxpZ2h0c2t5Ymx1ZTIAZGVlcHNreWJsdWUyAGxpZ2h0Ymx1ZTIAY2FkZXRibHVlMgBkb2RnZXJibHVlMgBsaWdodHN0ZWVsYmx1ZTIAcm95YWxibHVlMgBzbGF0ZWJsdWUyAG5hdmFqb3doaXRlMgBhbnRpcXVld2hpdGUyAGNob2NvbGF0ZTIAY2hhcnRyZXVzZTIAbWlzdHlyb3NlMgBwYWxldHVycXVvaXNlMgBhenVyZTIAYXF1YW1hcmluZTIAdGhpc3RsZTIAbWVkaXVtcHVycGxlMgBkYXJrb3JhbmdlMgBsaWdodGdvbGRlbnJvZDIAZGFya2dvbGRlbnJvZDIAYnVybHl3b29kMgBnb2xkMgBtZWRpdW1vcmNoaWQyAGRhcmtvcmNoaWQyAHBhbGV2aW9sZXRyZWQyAGluZGlhbnJlZDIAb3JhbmdlcmVkMgBvbGl2ZWRyYWIyAG1hZ2VudGEyAHNpZW5uYTIAXHhGMgBceEUyAFx4RDIAXHhDMgBceEIyAFx4QTIAZ3JleTkyAGdyYXk5MgBceDkyAGdyZXk4MgBncmF5ODIAXHg4MgBncmV5NzIAZ3JheTcyAGdyZXk2MgBncmF5NjIAZ3JleTUyAGdyYXk1MgBncmV5NDIAZ3JheTQyAGdyZXkzMgBncmF5MzIAZ3JleTIyAGdyYXkyMgBncmV5MTIAZ3JheTEyAFx4MTIAZnJhYzEyAC9wYWlyZWQxMi8xMgAvc2V0MzEyLzEyAC9yZGd5OS8yAC9idXB1OS8yAC9yZHB1OS8yAC9wdWJ1OS8yAC95bGduYnU5LzIAL2duYnU5LzIAL3JkeWxidTkvMgAvcmRidTkvMgAvZ3JleXM5LzIAL2dyZWVuczkvMgAvYmx1ZXM5LzIAL3B1cnBsZXM5LzIAL29yYW5nZXM5LzIAL3JlZHM5LzIAL3B1b3I5LzIAL3lsb3JicjkvMgAvcHVidWduOS8yAC9idWduOS8yAC9wcmduOS8yAC9yZHlsZ245LzIAL3lsZ245LzIAL3NwZWN0cmFsOS8yAC9waXlnOS8yAC9icmJnOS8yAC9wdXJkOS8yAC95bG9ycmQ5LzIAL29ycmQ5LzIAL3BhaXJlZDkvMgAvc2V0MzkvMgAvc2V0MTkvMgAvcGFzdGVsMTkvMgAvcmRneTgvMgAvYnVwdTgvMgAvcmRwdTgvMgAvcHVidTgvMgAveWxnbmJ1OC8yAC9nbmJ1OC8yAC9yZHlsYnU4LzIAL3JkYnU4LzIAL2FjY2VudDgvMgAvZ3JleXM4LzIAL2dyZWVuczgvMgAvYmx1ZXM4LzIAL3B1cnBsZXM4LzIAL29yYW5nZXM4LzIAL3JlZHM4LzIAL3B1b3I4LzIAL3lsb3JicjgvMgAvcHVidWduOC8yAC9idWduOC8yAC9wcmduOC8yAC9yZHlsZ244LzIAL3lsZ244LzIAL3NwZWN0cmFsOC8yAC9waXlnOC8yAC9icmJnOC8yAC9wdXJkOC8yAC95bG9ycmQ4LzIAL29ycmQ4LzIAL3BhaXJlZDgvMgAvc2V0MzgvMgAvc2V0MjgvMgAvcGFzdGVsMjgvMgAvZGFyazI4LzIAL3NldDE4LzIAL3Bhc3RlbDE4LzIAL3JkZ3k3LzIAL2J1cHU3LzIAL3JkcHU3LzIAL3B1YnU3LzIAL3lsZ25idTcvMgAvZ25idTcvMgAvcmR5bGJ1Ny8yAC9yZGJ1Ny8yAC9hY2NlbnQ3LzIAL2dyZXlzNy8yAC9ncmVlbnM3LzIAL2JsdWVzNy8yAC9wdXJwbGVzNy8yAC9vcmFuZ2VzNy8yAC9yZWRzNy8yAC9wdW9yNy8yAC95bG9yYnI3LzIAL3B1YnVnbjcvMgAvYnVnbjcvMgAvcHJnbjcvMgAvcmR5bGduNy8yAC95bGduNy8yAC9zcGVjdHJhbDcvMgAvcGl5ZzcvMgAvYnJiZzcvMgAvcHVyZDcvMgAveWxvcnJkNy8yAC9vcnJkNy8yAC9wYWlyZWQ3LzIAL3NldDM3LzIAL3NldDI3LzIAL3Bhc3RlbDI3LzIAL2RhcmsyNy8yAC9zZXQxNy8yAC9wYXN0ZWwxNy8yAC9yZGd5Ni8yAC9idXB1Ni8yAC9yZHB1Ni8yAC9wdWJ1Ni8yAC95bGduYnU2LzIAL2duYnU2LzIAL3JkeWxidTYvMgAvcmRidTYvMgAvYWNjZW50Ni8yAC9ncmV5czYvMgAvZ3JlZW5zNi8yAC9ibHVlczYvMgAvcHVycGxlczYvMgAvb3JhbmdlczYvMgAvcmVkczYvMgAvcHVvcjYvMgAveWxvcmJyNi8yAC9wdWJ1Z242LzIAL2J1Z242LzIAL3ByZ242LzIAL3JkeWxnbjYvMgAveWxnbjYvMgAvc3BlY3RyYWw2LzIAL3BpeWc2LzIAL2JyYmc2LzIAL3B1cmQ2LzIAL3lsb3JyZDYvMgAvb3JyZDYvMgAvcGFpcmVkNi8yAC9zZXQzNi8yAC9zZXQyNi8yAC9wYXN0ZWwyNi8yAC9kYXJrMjYvMgAvc2V0MTYvMgAvcGFzdGVsMTYvMgAvcmRneTUvMgAvYnVwdTUvMgAvcmRwdTUvMgAvcHVidTUvMgAveWxnbmJ1NS8yAC9nbmJ1NS8yAC9yZHlsYnU1LzIAL3JkYnU1LzIAL2FjY2VudDUvMgAvZ3JleXM1LzIAL2dyZWVuczUvMgAvYmx1ZXM1LzIAL3B1cnBsZXM1LzIAL29yYW5nZXM1LzIAL3JlZHM1LzIAL3B1b3I1LzIAL3lsb3JicjUvMgAvcHVidWduNS8yAC9idWduNS8yAC9wcmduNS8yAC9yZHlsZ241LzIAL3lsZ241LzIAL3NwZWN0cmFsNS8yAC9waXlnNS8yAC9icmJnNS8yAC9wdXJkNS8yAC95bG9ycmQ1LzIAL29ycmQ1LzIAL3BhaXJlZDUvMgAvc2V0MzUvMgAvc2V0MjUvMgAvcGFzdGVsMjUvMgAvZGFyazI1LzIAL3NldDE1LzIAL3Bhc3RlbDE1LzIAL3JkZ3k0LzIAL2J1cHU0LzIAL3JkcHU0LzIAL3B1YnU0LzIAL3lsZ25idTQvMgAvZ25idTQvMgAvcmR5bGJ1NC8yAC9yZGJ1NC8yAC9hY2NlbnQ0LzIAL2dyZXlzNC8yAC9ncmVlbnM0LzIAL2JsdWVzNC8yAC9wdXJwbGVzNC8yAC9vcmFuZ2VzNC8yAC9yZWRzNC8yAC9wdW9yNC8yAC95bG9yYnI0LzIAL3B1YnVnbjQvMgAvYnVnbjQvMgAvcHJnbjQvMgAvcmR5bGduNC8yAC95bGduNC8yAC9zcGVjdHJhbDQvMgAvcGl5ZzQvMgAvYnJiZzQvMgAvcHVyZDQvMgAveWxvcnJkNC8yAC9vcnJkNC8yAC9wYWlyZWQ0LzIAL3NldDM0LzIAL3NldDI0LzIAL3Bhc3RlbDI0LzIAL2RhcmsyNC8yAC9zZXQxNC8yAC9wYXN0ZWwxNC8yAC9yZGd5My8yAC9idXB1My8yAC9yZHB1My8yAC9wdWJ1My8yAC95bGduYnUzLzIAL2duYnUzLzIAL3JkeWxidTMvMgAvcmRidTMvMgAvYWNjZW50My8yAC9ncmV5czMvMgAvZ3JlZW5zMy8yAC9ibHVlczMvMgAvcHVycGxlczMvMgAvb3JhbmdlczMvMgAvcmVkczMvMgAvcHVvcjMvMgAveWxvcmJyMy8yAC9wdWJ1Z24zLzIAL2J1Z24zLzIAL3ByZ24zLzIAL3JkeWxnbjMvMgAveWxnbjMvMgAvc3BlY3RyYWwzLzIAL3BpeWczLzIAL2JyYmczLzIAL3B1cmQzLzIAL3lsb3JyZDMvMgAvb3JyZDMvMgAvcGFpcmVkMy8yAC9zZXQzMy8yAC9zZXQyMy8yAC9wYXN0ZWwyMy8yAC9kYXJrMjMvMgAvc2V0MTMvMgAvcGFzdGVsMTMvMgAvcGFpcmVkMTIvMgAvc2V0MzEyLzIAL3JkZ3kxMS8yAC9yZHlsYnUxMS8yAC9yZGJ1MTEvMgAvcHVvcjExLzIAL3ByZ24xMS8yAC9yZHlsZ24xMS8yAC9zcGVjdHJhbDExLzIAL3BpeWcxMS8yAC9icmJnMTEvMgAvcGFpcmVkMTEvMgAvc2V0MzExLzIAL3JkZ3kxMC8yAC9yZHlsYnUxMC8yAC9yZGJ1MTAvMgAvcHVvcjEwLzIAL3ByZ24xMC8yAC9yZHlsZ24xMC8yAC9zcGVjdHJhbDEwLzIAL3BpeWcxMC8yAC9icmJnMTAvMgAvcGFpcmVkMTAvMgAvc2V0MzEwLzIAMS4yACAtZGFzaCAyAHN6ID49IDIAbGVuID49IDIAZXhwID09IDEgfHwgZXhwID09IDIAZGltID09IDIATkRfb3V0KHYpLnNpemUgPT0gMgBpdm9yeTEAZ3JleTEAZGFya3NsYXRlZ3JheTEAXHgxAHNub3cxAGxpZ2h0eWVsbG93MQBob25leWRldzEAbnNsaW1pdDEAd2hlYXQxAHN1cDEAbm9wMQB0b21hdG8xAHJvc3licm93bjEAbWFyb29uMQBsaWdodHNhbG1vbjEAbGVtb25jaGlmZm9uMQBsYXRpbjEAYWdvcGVuMQBzcHJpbmdncmVlbjEAZGFya29saXZlZ3JlZW4xAHBhbGVncmVlbjEAZGFya3NlYWdyZWVuMQBsaWdodGN5YW4xAHRhbjEAcGx1bTEAc2Vhc2hlbGwxAGNvcmFsMQBob3RwaW5rMQBsaWdodHBpbmsxAGRlZXBwaW5rMQBjb3Juc2lsazEAZmlyZWJyaWNrMQBqMCA8PSBpMSAmJiBpMSA8PSBqMQBraGFraTEAbGF2ZW5kZXJibHVzaDEAcGVhY2hwdWZmMQBiaXNxdWUxAGxpZ2h0c2t5Ymx1ZTEAZGVlcHNreWJsdWUxAGxpZ2h0Ymx1ZTEAY2FkZXRibHVlMQBkb2RnZXJibHVlMQBsaWdodHN0ZWVsYmx1ZTEAcm95YWxibHVlMQBzbGF0ZWJsdWUxAG5hdmFqb3doaXRlMQBhbnRpcXVld2hpdGUxAGNob2NvbGF0ZTEAY2hhcnRyZXVzZTEAbWlzdHlyb3NlMQBwYWxldHVycXVvaXNlMQBhenVyZTEAYXF1YW1hcmluZTEAdGhpc3RsZTEAbWVkaXVtcHVycGxlMQBkYXJrb3JhbmdlMQBhcmdfZTAgJiYgYXJnX2UxAGxpZ2h0Z29sZGVucm9kMQBkYXJrZ29sZGVucm9kMQBidXJseXdvb2QxAGdvbGQxAG1lZGl1bW9yY2hpZDEAZGFya29yY2hpZDEAcGFsZXZpb2xldHJlZDEAaW5kaWFucmVkMQBvcmFuZ2VyZWQxAG9saXZlZHJhYjEAbWFnZW50YTEAc2llbm5hMQBceEYxAFx4RTEAXHhEMQBceEMxAFx4QjEAXHhBMQBncmV5OTEAZ3JheTkxAFx4OTEAZ3JleTgxAGdyYXk4MQBceDgxAGdyZXk3MQBncmF5NzEAZ3JleTYxAGdyYXk2MQBncmV5NTEAZ3JheTUxAGdyZXk0MQBncmF5NDEAZ3JleTMxAGdyYXkzMQBncmV5MjEAZ3JheTIxAGdyZXkxMQBncmF5MTEAXHgxMQAvcGFpcmVkMTIvMTEAL3NldDMxMi8xMQAvcmRneTExLzExAC9yZHlsYnUxMS8xMQAvcmRidTExLzExAC9wdW9yMTEvMTEAL3ByZ24xMS8xMQAvcmR5bGduMTEvMTEAL3NwZWN0cmFsMTEvMTEAL3BpeWcxMS8xMQAvYnJiZzExLzExAC9wYWlyZWQxMS8xMQAvc2V0MzExLzExAGNzW2ldLT5zbGFjaygpPi0wLjAwMDAwMDEAL3JkZ3k5LzEAL2J1cHU5LzEAL3JkcHU5LzEAL3B1YnU5LzEAL3lsZ25idTkvMQAvZ25idTkvMQAvcmR5bGJ1OS8xAC9yZGJ1OS8xAC9ncmV5czkvMQAvZ3JlZW5zOS8xAC9ibHVlczkvMQAvcHVycGxlczkvMQAvb3JhbmdlczkvMQAvcmVkczkvMQAvcHVvcjkvMQAveWxvcmJyOS8xAC9wdWJ1Z245LzEAL2J1Z245LzEAL3ByZ245LzEAL3JkeWxnbjkvMQAveWxnbjkvMQAvc3BlY3RyYWw5LzEAL3BpeWc5LzEAL2JyYmc5LzEAL3B1cmQ5LzEAL3lsb3JyZDkvMQAvb3JyZDkvMQAvcGFpcmVkOS8xAC9zZXQzOS8xAC9zZXQxOS8xAC9wYXN0ZWwxOS8xAC9yZGd5OC8xAC9idXB1OC8xAC9yZHB1OC8xAC9wdWJ1OC8xAC95bGduYnU4LzEAL2duYnU4LzEAL3JkeWxidTgvMQAvcmRidTgvMQAvYWNjZW50OC8xAC9ncmV5czgvMQAvZ3JlZW5zOC8xAC9ibHVlczgvMQAvcHVycGxlczgvMQAvb3JhbmdlczgvMQAvcmVkczgvMQAvcHVvcjgvMQAveWxvcmJyOC8xAC9wdWJ1Z244LzEAL2J1Z244LzEAL3ByZ244LzEAL3JkeWxnbjgvMQAveWxnbjgvMQAvc3BlY3RyYWw4LzEAL3BpeWc4LzEAL2JyYmc4LzEAL3B1cmQ4LzEAL3lsb3JyZDgvMQAvb3JyZDgvMQAvcGFpcmVkOC8xAC9zZXQzOC8xAC9zZXQyOC8xAC9wYXN0ZWwyOC8xAC9kYXJrMjgvMQAvc2V0MTgvMQAvcGFzdGVsMTgvMQAvcmRneTcvMQAvYnVwdTcvMQAvcmRwdTcvMQAvcHVidTcvMQAveWxnbmJ1Ny8xAC9nbmJ1Ny8xAC9yZHlsYnU3LzEAL3JkYnU3LzEAL2FjY2VudDcvMQAvZ3JleXM3LzEAL2dyZWVuczcvMQAvYmx1ZXM3LzEAL3B1cnBsZXM3LzEAL29yYW5nZXM3LzEAL3JlZHM3LzEAL3B1b3I3LzEAL3lsb3JicjcvMQAvcHVidWduNy8xAC9idWduNy8xAC9wcmduNy8xAC9yZHlsZ243LzEAL3lsZ243LzEAL3NwZWN0cmFsNy8xAC9waXlnNy8xAC9icmJnNy8xAC9wdXJkNy8xAC95bG9ycmQ3LzEAL29ycmQ3LzEAL3BhaXJlZDcvMQAvc2V0MzcvMQAvc2V0MjcvMQAvcGFzdGVsMjcvMQAvZGFyazI3LzEAL3NldDE3LzEAL3Bhc3RlbDE3LzEAL3JkZ3k2LzEAL2J1cHU2LzEAL3JkcHU2LzEAL3B1YnU2LzEAL3lsZ25idTYvMQAvZ25idTYvMQAvcmR5bGJ1Ni8xAC9yZGJ1Ni8xAC9hY2NlbnQ2LzEAL2dyZXlzNi8xAC9ncmVlbnM2LzEAL2JsdWVzNi8xAC9wdXJwbGVzNi8xAC9vcmFuZ2VzNi8xAC9yZWRzNi8xAC9wdW9yNi8xAC95bG9yYnI2LzEAL3B1YnVnbjYvMQAvYnVnbjYvMQAvcHJnbjYvMQAvcmR5bGduNi8xAC95bGduNi8xAC9zcGVjdHJhbDYvMQAvcGl5ZzYvMQAvYnJiZzYvMQAvcHVyZDYvMQAveWxvcnJkNi8xAC9vcnJkNi8xAC9wYWlyZWQ2LzEAL3NldDM2LzEAL3NldDI2LzEAL3Bhc3RlbDI2LzEAL2RhcmsyNi8xAC9zZXQxNi8xAC9wYXN0ZWwxNi8xAC9yZGd5NS8xAC9idXB1NS8xAC9yZHB1NS8xAC9wdWJ1NS8xAC95bGduYnU1LzEAL2duYnU1LzEAL3JkeWxidTUvMQAvcmRidTUvMQAvYWNjZW50NS8xAC9ncmV5czUvMQAvZ3JlZW5zNS8xAC9ibHVlczUvMQAvcHVycGxlczUvMQAvb3JhbmdlczUvMQAvcmVkczUvMQAvcHVvcjUvMQAveWxvcmJyNS8xAC9wdWJ1Z241LzEAL2J1Z241LzEAL3ByZ241LzEAL3JkeWxnbjUvMQAveWxnbjUvMQAvc3BlY3RyYWw1LzEAL3BpeWc1LzEAL2JyYmc1LzEAL3B1cmQ1LzEAL3lsb3JyZDUvMQAvb3JyZDUvMQAvcGFpcmVkNS8xAC9zZXQzNS8xAC9zZXQyNS8xAC9wYXN0ZWwyNS8xAC9kYXJrMjUvMQAvc2V0MTUvMQAvcGFzdGVsMTUvMQAvcmRneTQvMQAvYnVwdTQvMQAvcmRwdTQvMQAvcHVidTQvMQAveWxnbmJ1NC8xAC9nbmJ1NC8xAC9yZHlsYnU0LzEAL3JkYnU0LzEAL2FjY2VudDQvMQAvZ3JleXM0LzEAL2dyZWVuczQvMQAvYmx1ZXM0LzEAL3B1cnBsZXM0LzEAL29yYW5nZXM0LzEAL3JlZHM0LzEAL3B1b3I0LzEAL3lsb3JicjQvMQAvcHVidWduNC8xAC9idWduNC8xAC9wcmduNC8xAC9yZHlsZ240LzEAL3lsZ240LzEAL3NwZWN0cmFsNC8xAC9waXlnNC8xAC9icmJnNC8xAC9wdXJkNC8xAC95bG9ycmQ0LzEAL29ycmQ0LzEAL3BhaXJlZDQvMQAvc2V0MzQvMQAvc2V0MjQvMQAvcGFzdGVsMjQvMQAvZGFyazI0LzEAL3NldDE0LzEAL3Bhc3RlbDE0LzEAL3JkZ3kzLzEAL2J1cHUzLzEAL3JkcHUzLzEAL3B1YnUzLzEAL3lsZ25idTMvMQAvZ25idTMvMQAvcmR5bGJ1My8xAC9yZGJ1My8xAC9hY2NlbnQzLzEAL2dyZXlzMy8xAC9ncmVlbnMzLzEAL2JsdWVzMy8xAC9wdXJwbGVzMy8xAC9vcmFuZ2VzMy8xAC9yZWRzMy8xAC9wdW9yMy8xAC95bG9yYnIzLzEAL3B1YnVnbjMvMQAvYnVnbjMvMQAvcHJnbjMvMQAvcmR5bGduMy8xAC95bGduMy8xAC9zcGVjdHJhbDMvMQAvcGl5ZzMvMQAvYnJiZzMvMQAvcHVyZDMvMQAveWxvcnJkMy8xAC9vcnJkMy8xAC9wYWlyZWQzLzEAL3NldDMzLzEAL3NldDIzLzEAL3Bhc3RlbDIzLzEAL2RhcmsyMy8xAC9zZXQxMy8xAC9wYXN0ZWwxMy8xAC9wYWlyZWQxMi8xAC9zZXQzMTIvMQAvcmRneTExLzEAL3JkeWxidTExLzEAL3JkYnUxMS8xAC9wdW9yMTEvMQAvcHJnbjExLzEAL3JkeWxnbjExLzEAL3NwZWN0cmFsMTEvMQAvcGl5ZzExLzEAL2JyYmcxMS8xAC9wYWlyZWQxMS8xAC9zZXQzMTEvMQAvcmRneTEwLzEAL3JkeWxidTEwLzEAL3JkYnUxMC8xAC9wdW9yMTAvMQAvcHJnbjEwLzEAL3JkeWxnbjEwLzEAL3NwZWN0cmFsMTAvMQAvcGl5ZzEwLzEAL2JyYmcxMC8xAC9wYWlyZWQxMC8xAC9zZXQzMTAvMQBsYXRpbi0xAElTT184ODU5LTEASVNPODg1OS0xAElTTy04ODU5LTEAbiA+IDEAaSA+PSAxAHEtPm4gPT0gMQBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0ucGFydGl0aW9uW2ldID09IDAgfHwgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAxAGJ6LnNpemUgJSAzID09IDEAVHJlZV9lZGdlLnNpemUgPT0gTl9ub2RlcyAtIDEAbm9kZV9zZXRfc2l6ZShnLT5uX2lkKSA9PSBvc2l6ZSArIDEAbi0+Y291bnQgKyAoKm5uKS0+Y291bnQgPT0gTk9ERUNBUkQgKyAxAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSArIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA9PSBOT0RFQ0FSRCArIDEAZ3JleTAAZ3JheTAAanNvbjAAI2YwZjBmMAAjZTBlMGUwAHhiLT51LnMubG9jYXRlZCA+IEFHWEJVRl9JTkxJTkVfU0laRV8wAFwwAFQwAFx4RjAAXHhFMABceEQwAFx4QzAAXHhCMABceEEwAGdyZXk5MABncmF5OTAAXHg5MABncmV5ODAAZ3JheTgwAFx4ODAAIzgwODA4MABncmV5NzAAZ3JheTcwAGNjd3JvdCA9PSAwIHx8IGNjd3JvdCA9PSA5MCB8fCBjY3dyb3QgPT0gMTgwIHx8IGNjd3JvdCA9PSAyNzAAY3dyb3QgPT0gMCB8fCBjd3JvdCA9PSA5MCB8fCBjd3JvdCA9PSAxODAgfHwgY3dyb3QgPT0gMjcwAGdyZXk2MABncmF5NjAAZ3JleTUwAGdyYXk1MABncmV5NDAAZ3JheTQwAHIud2lkdGgoKTwxZTQwAGdyZXkzMABncmF5MzAAIzMwMzAzMABncmV5MjAAZ3JheTIwAGdyZXkxMABncmF5MTAAXHgxMAAjMTAxMDEwAC9wYWlyZWQxMi8xMAAvc2V0MzEyLzEwAC9yZGd5MTEvMTAAL3JkeWxidTExLzEwAC9yZGJ1MTEvMTAAL3B1b3IxMS8xMAAvcHJnbjExLzEwAC9yZHlsZ24xMS8xMAAvc3BlY3RyYWwxMS8xMAAvcGl5ZzExLzEwAC9icmJnMTEvMTAAL3BhaXJlZDExLzEwAC9zZXQzMTEvMTAAL3JkZ3kxMC8xMAAvcmR5bGJ1MTAvMTAAL3JkYnUxMC8xMAAvcHVvcjEwLzEwAC9wcmduMTAvMTAAL3JkeWxnbjEwLzEwAC9zcGVjdHJhbDEwLzEwAC9waXlnMTAvMTAAL2JyYmcxMC8xMAAvcGFpcmVkMTAvMTAAL3NldDMxMC8xMAAxMjAwAGdyZXkxMDAAZ3JheTEwMABJU08tSVItMTAwADEwMDAwACUhUFMtQWRvYmUtMy4wADEyLjEuMABueiA+IDAAZGlzdCA+IDAAcGF0aGNvdW50ID4gMAB3Z3QgPiAwAG5zaXRlcyA+IDAAc2lkZXMgPiAwAChydiA9PSAwKSB8fCAoTkRfb3JkZXIocnYpLU5EX29yZGVyKHYpKSpkaXIgPiAwAGxlbiA+IDAAcXQxLT5uID4gMCAmJiBxdDItPm4gPiAwAHdpZHRoID4gMABsaXN0LT5zaXplID4gMABzcGwtPnNpemUgPiAwAHNlbGYtPnNpemUgPiAwAGJ6LnNpemUgPiAwAGdyYXBoLT53ZWlnaHRzW3hdID4gMABncmFwaC0+d2VpZ2h0c1tuX2VkZ2VzXSA+IDAAbSA+IDAgJiYgbiA+IDAgJiYgbnogPj0gMAB0ID49IDAAbm5vZGVzID49IDAAbl9vYnMgPj0gMABuID49IDAAbi0+bGV2ZWwgPj0gMAB0b3RhbCA+PSAwAG9yaWdpbmFsID49IDAATWF4cmFuayA+PSAwAFBhY2sgPj0gMABpaSA8IDE8PGRpbSAmJiBpaSA+PSAwAHdpZHRoID49IDAAamRpYWcgPj0gMABpZGlhZyA+PSAwAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSA+PSAwICYmIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA+PSAwAFYgPj0gMABhZ25ub2RlcyhncmFwaCkgPj0gMABhZ25ub2RlcyhnKSA+PSAwAEVEX2NvdW50KGUpID49IDAAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGNfY250ID09IDAAcmFua19yZXN1bHQgPT0gMABnZXR0aW1lb2ZkYXlfcmVzID09IDAAaiA9PSAwAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAYS5zaGFwZSA9PSAwIHx8IGIuc2hhcGUgPT0gMABkdHNpemUoZGVzdCkgPT0gMABkdHNpemUoZy0+bl9zZXEpID09IDAAZHRzaXplKGctPmdfc2VxKSA9PSAwAGR0c2l6ZShnLT5lX3NlcSkgPT0gMABHRF9taW5yYW5rKGcpID09IDAAZHRzaXplKGctPmdfaWQpID09IDAAZHRzaXplKGctPmVfaWQpID09IDAAc2VsZi0+Y2FwYWNpdHkgIT0gMABjb3N4ICE9IDAgfHwgc2lueCAhPSAwAG1lbWNtcCgmc3R5bGUsICYoZ3JhcGh2aXpfcG9seWdvbl9zdHlsZV90KXswfSwgc2l6ZW9mKHN0eWxlKSkgIT0gMAByZXN1bHQgPT0gKGludCkoc2l6ZSAtIDEpIHx8IHJlc3VsdCA8IDAAbWFza1tpaV0gPCAwAE5EX2hlYXBpbmRleCh2KSA8IDAAXC8AWDExLwAlLipzLgBzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AR3JhcGggJXMgaGFzIGFycmF5IHBhY2tpbmcgd2l0aCB1c2VyIHZhbHVlcyBidXQgbm8gInNvcnR2IiBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLgAxLgAtMC4AJSFQUy1BZG9iZS0AJVBERi0APCEtLQAgLAArACoAc3RyZXEoYXB0ci0+dS5uYW1lLEtleSkAIWlzX2V4YWN0bHlfZXF1YWwoUi54LCBRLngpIHx8ICFpc19leGFjdGx5X2VxdWFsKFIueSwgUS55KQBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAHUgPT0gVUZfZmluZCh1KQAhcG9pbnRzX2lzX2VtcHR5KHBsaXN0KQAhb2JqbGlzdF9pc19lbXB0eShsaXN0KQAhbm9kZWxpc3RfaXNfZW1wdHkobGlzdCkAIXBvaW50c19pc19lbXB0eShsaXN0KQBvbmUgPD0gbm9kZWxpc3Rfc2l6ZShsaXN0KQBucCA8IG5vZGVsaXN0X3NpemUobGlzdCkAc3RkOjppc19oZWFwKGhlYXAuYmVnaW4oKSwgaGVhcC5lbmQoKSwgZ3QpACEocS0+cXRzKQAhaW50c19pc19lbXB0eSgmbGVhdmVzKQBvbl9oZWFwKHIpAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPT0gKHNpemVfdClkdHNpemUoZy0+bl9zZXEpAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBub3Qgd2VsbC1mb3JtZWQgKGludmFsaWQgdG9rZW4pAGFnc3VicmVwKGcsbikAbiAhPSBORF9uZXh0KG4pAGZpbmRfZmFzdF9ub2RlKGcsIG4pAChudWxsKQAoIWpjbikgJiYgKCF2YWwpACEocS0+bCkAc3ltLT5pZCA+PSAwICYmIHN5bS0+aWQgPCB0b3BkaWN0c2l6ZShvYmopACEoKmZsYWcpAG1vdmUgdG8gKCUuMGYsICUuMGYpADsgc3BsaW5lIHRvICglLjBmLCAlLjBmKQA7IGxpbmUgdG8gKCUuMGYsICUuMGYpAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMoQSwgdHJ1ZSkAdmFsdWUgJiYgc3RybGVuKHZhbHVlKQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljKEEsIGZhbHNlKQBFRF9sYWJlbChmZSkAIVRSRUVfRURHRShlKQAhY29uc3RyYWluaW5nX2ZsYXRfZWRnZShnLCBlKQBub2RlX3NldF9pc19lbXB0eShnLT5uX2lkKQByXyVkKQBsXyVkKQAobGliKQAhU3BhcnNlTWF0cml4X2hhc19kaWFnb25hbChBKQBTcGFyc2VNYXRyaXhfa25vd25fc3RydWN1cmFsX3N5bW1ldHJpYyhBKQAgc2Nhbm5pbmcgYSBIVE1MIHN0cmluZyAobWlzc2luZyAnPic/IGJhZCBuZXN0aW5nPyBsb25nZXIgdGhhbiAlZD8pACBzY2FubmluZyBhIHF1b3RlZCBzdHJpbmcgKG1pc3NpbmcgZW5kcXVvdGU/IGxvbmdlciB0aGFuICVkPykAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmYWxsYmFjayg0KQBvbl9oZWFwKHIwKSB8fCBvbl9oZWFwKHIxKQBhZ3RhaWwoZSkgPT0gVUZfZmluZChhZ3RhaWwoZSkpAGFnaGVhZChlKSA9PSBVRl9maW5kKGFnaGVhZChlKSkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpAG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpAHNldGxpbmV3aWR0aCgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAIHRyYW5zZm9ybT0ic2NhbGUoAE5PVEFUSU9OKAAgKAAgbmVhciAnJXMnACVsZiwlbGYsJWxmLCclW14nXScAaXNkaWdpdCgoaW50KWRvdHBbMV0pICYmIGlzZGlnaXQoKGludClkb3RwWzJdKSAmJiBkb3RwWzNdID09ICdcMCcAJgAlACQAdXJsKCMAPHRleHRQYXRoIHhsaW5rOmhyZWY9IiMAPGFyZWEgc2hhcGU9InBvbHkiACBmaWxsPSIjJTAyeCUwMnglMDJ4IgAoc2VxICYgU0VRX01BU0spID09IHNlcSAmJiAic2VxdWVuY2UgSUQgb3ZlcmZsb3ciAGd2X3NvcnRfY29tcGFyID09IE5VTEwgJiYgZ3Zfc29ydF9hcmcgPT0gTlVMTCAmJiAidW5zdXBwb3J0ZWQgcmVjdXJzaXZlIGNhbGwgdG8gZ3Zfc29ydCIAZ3Zfc29ydF9jb21wYXIgIT0gTlVMTCAmJiAibm8gY29tcGFyYXRvciBzZXQgaW4gZ3Zfc29ydCIAb3AtPm9wLnUucG9seWdvbi5jbnQgPD0gSU5UX01BWCAmJiAicG9seWdvbiBjb3VudCBleGNlZWRzIGd2cmVuZGVyX3BvbHlnb24gc3VwcG9ydCIAIHRleHQtYW5jaG9yPSJzdGFydCIAcC54ICE9IGEgJiYgImNhbm5vdCBoYW5kbGUgZWxsaXBzZSB0YW5nZW50IHNsb3BlIGluIGhvcml6b250YWwgZXh0cmVtZSBwb2ludCIAZnVsbF9sZW5ndGhfd2l0aG91dF9zaGFmdCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCB3aXRob3V0IHNoYWZ0IgA8YXJlYSBzaGFwZT0icmVjdCIAc2l6ZSA+IDAgJiYgImF0dGVtcHQgdG8gYWxsb2NhdGUgYXJyYXkgb2YgMC1zaXplZCBlbGVtZW50cyIAaW5kZXggPCBzZWxmLT5zaXplX2JpdHMgJiYgIm91dCBvZiBib3VuZHMgYWNjZXNzIgBpbmRleCA8IHNlbGYuc2l6ZV9iaXRzICYmICJvdXQgb2YgYm91bmRzIGFjY2VzcyIAKnMxICE9ICpzMiAmJiAiZHVwbGljYXRlIHNlcGFyYXRvciBjaGFyYWN0ZXJzIgBHRF9taW5yYW5rKHN1YmcpIDw9IEdEX21heHJhbmsoc3ViZykgJiYgImNvcnJ1cHRlZCByYW5rIGJvdW5kcyIAaW5kZXggPCBsaXN0LT5zaXplICYmICJpbmRleCBvdXQgb2YgYm91bmRzIgBpbmRleCA8IG5vZGVsaXN0X3NpemUobGlzdCkgJiYgImluZGV4IG91dCBvZiBib3VuZHMiAGluZGV4IDwgaW50c19zaXplKGxpc3QpICYmICJpbmRleCBvdXQgb2YgYm91bmRzIgBpbmRleCA8IG5vZGVzX3NpemUobGlzdCkgJiYgImluZGV4IG91dCBvZiBib3VuZHMiACh1aW50cHRyX3QpcyAlIDIgPT0gMCAmJiAiaGVhcCBwb2ludGVyIHdpdGggbG93IGJpdCBzZXQgd2lsbCBjb2xsaWRlIHdpdGggYW5vbnltb3VzIElEcyIAICgrJTZkIGJ5dGVzICVzfCVkLCB4bWxwYXJzZS5jOiVkKSAlKnMiACBmb250LWZhbWlseT0iJXMiACBmb250LXdlaWdodD0iJXMiACBmaWxsPSIlcyIAIGZvbnQtc3RyZXRjaD0iJXMiACBmb250LXN0eWxlPSIlcyIAYmFkIGVkZ2UgbGVuICIlcyIAIGJhc2VsaW5lLXNoaWZ0PSJzdXBlciIAYWd4Ymxlbih4YikgPD0gc2l6ZW9mKHhiLT51LnN0b3JlKSAmJiAiYWd4YnVmIGNvcnJ1cHRpb24iACB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgBmdWxsX2xlbmd0aCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCIAZnVsbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIGZ1bGwgYmFzZSB3aWR0aCIAbm9taW5hbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIG5vbWluYWwgYmFzZSB3aWR0aCIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0IiB4PSIlZyIgeT0iJWciACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgeD0iJWciIHk9IiVnIgAgZm9udC1zaXplPSIlLjJmIgAgdmlld0JveD0iJS4yZiAlLjJmICUuMmYgJS4yZiIAIGZpbGwtb3BhY2l0eT0iJWYiAGlzZmluaXRlKG0pICYmICJlbGxpcHNlIHRhbmdlbnQgc2xvcGUgaXMgaW5maW5pdGUiACh4Yi0+dS5zLmxvY2F0ZWQgPT0gQUdYQlVGX09OX0hFQVAgfHwgeGItPnUucy5sb2NhdGVkIDw9IHNpemVvZih4Yi0+dS5zdG9yZSkpICYmICJjb3JydXB0ZWQgYWd4YnVmIHR5cGUiACB0ZXh0LWFuY2hvcj0ibWlkZGxlIgA8YXJlYSBzaGFwZT0iY2lyY2xlIgBvbGRfbm1lbWIgPCBTSVpFX01BWCAvIHNpemUgJiYgImNsYWltZWQgcHJldmlvdXMgZXh0ZW50IGlzIHRvbyBsYXJnZSIAdGhldGEgPj0gMCAmJiB0aGV0YSA8PSBNX1BJICYmICJ0aGV0YSBvdXQgb2YgcmFuZ2UiACB0ZXh0LWFuY2hvcj0iZW5kIgAgZm9udC13ZWlnaHQ9ImJvbGQiACBmb250LXN0eWxlPSJpdGFsaWMiACBiYXNlbGluZS1zaGlmdD0ic3ViIgBcIgBsbGVuIDw9IChzaXplX3QpSU5UX01BWCAmJiAiWE1MIHRva2VuIHRvbyBsb25nIGZvciBleHBhdCBBUEkiACIgcnk9IgBfcCIgc3RhcnRPZmZzZXQ9IjUwJSI+PHRzcGFuIHg9IjAiIGR5PSIAIiBjeT0iACIgeT0iACIgcng9IgAgY3g9IgAgeD0iACB0YXJnZXQ9IgAgcG9pbnRzPSIAIGNvb3Jkcz0iACB0ZXh0LWRlY29yYXRpb249IgAgZmlsbD0iACIgc3Ryb2tlLXdpZHRoPSIAPGltYWdlIHhsaW5rOmhyZWY9IgA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIG5hbWU9IgAgeGxpbms6dGl0bGU9IgAgdGl0bGU9IgAiIHN0cm9rZT0iADxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9IgA8ZGVmcz4KPHJhZGlhbEdyYWRpZW50IGlkPSIAPG1hcCBpZD0iADxnIGlkPSIAIGQ9IgAiIHkyPSIAIiB4Mj0iACIgeTE9IgB4MT0iACB0cmFuc2Zvcm09InJvdGF0ZSglZCAlZyAlZykiAGFneGJsZW4oJlNidWYpID09IDAgJiYgInBlbmRpbmcgc3RyaW5nIGRhdGEgdGhhdCB3YXMgbm90IGNvbnN1bWVkIChtaXNzaW5nICIgImVuZHN0cigpL2VuZGh0bWxzdHIoKT8pIgAgYWx0PSIiAEN5Y2xlIEVycm9yIQBQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkIQA8IS0tIEdlbmVyYXRlZCBieSAAJWMgJXp1IAB0ICV1IAAgY3JlYXRlIHRleHQgAHhMYXlvdXQgAGRlZmF1bHQgAHN0cmljdCAAJXMlenUgLSVzIAAgLXNtb290aCBiZXppZXIgACBtb3ZldG8gACB2ZXJzaW9uIAAgY3JlYXRlIHBvbHlnb24gACAtdGV4dCB7JXN9IC1maWxsIAAgY3JlYXRlIG92YWwgACAtd2lkdGggAG5ld3BhdGggAGdyYXBoIABzLCUuNWcsJS41ZyAAJS41ZywlLjVnLCUuNWcsJS41ZyAAZSwlLjVnLCUuNWcgACVnICVnIAAlLjAzbGYgACUuM2YgACVkICVkICVkICVkICVkICVkICUuMWYgJS40ZiAlZCAlLjFmICUuMWYgJS4wZiAlLjBmIAAgLW91dGxpbmUgACBjcmVhdGUgbGluZSAAbm9kZSAAJWQgAFRvdGFsIHNpemUgPiAxIGluICIlcyIgY29sb3Igc3BlYyAAWyAvUmVjdCBbIABUIABTIABPUEVOIABJIABGIABFIABDIAAgLT4gAFJhbmsgc2VwYXJhdGlvbiA9IABuZXR3b3JrIHNpbXBsZXg6IABVbnNhdGlzZmllZCBjb25zdHJhaW50OiAAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHM6IAAlczogAFNvbHZpbmcgbW9kZWw6IABTZXR0aW5nIHVwIHNwcmluZyBtb2RlbDogAGNvbnZlcnQgZ3JhcGg6IAAgVGl0bGU6IAAidGV4dCI6IAB7ImZyYWMiOiAlLjAzZiwgImNvbG9yIjogACJuYW1lIjogACJzdHlsZSI6IAAiZmFjZSI6IAAyIAA8IS0tIAAgLS0gACUgAF9wIiAAbF8lZCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIAANICAgICAgICAgICAgICAgIGl0ZXIgPSAlZCwgc3RlcCA9ICVmIEZub3JtID0gJWYgbnogPSAlZCAgSyA9ICVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAKICAgIAA6CSAAICAgICVzfQoAdHJ5aW5nIHRvIGFkZCB0byByZWN0IHslZiArLy0gJWYsICVmICsvLSAlZn0KACNkZWZhdWx0IHsgZmluaXNoIHsgYW1iaWVudCAwLjEgZGlmZnVzZSAwLjkgfSB9CgBwaWdtZW50IHsgY29sb3IgJXMgfQoAbGlnaHRfc291cmNlIHsgPDE1MDAsMzAwMCwtMjUwMD4gY29sb3IgV2hpdGUgfQoAZ2xvYmFsX3NldHRpbmdzIHsgYXNzdW1lZF9nYW1tYSAxLjAgfQoAICAgIHRleHR1cmUgSW1hZ2VUZXh0dXJlIHsgdXJsICIlcyIgfQoAICAgIH0KAC8vc2t5CnBsYW5lIHsgPDAsIDEsIDA+LCAxIGhvbGxvdwogICAgdGV4dHVyZSB7CiAgICAgICAgcGlnbWVudCB7IGJvem8gdHVyYnVsZW5jZSAwLjk1CiAgICAgICAgICAgIGNvbG9yX21hcCB7CiAgICAgICAgICAgICAgICBbMC4wMCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNTAgcmdiIDwwLjA1LCAwLjIwLCAwLjUwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MS4wMCwgMS4wMCwgMS4wMD5dCiAgICAgICAgICAgICAgICBbMC43NSByZ2IgPDAuMjUsIDAuMjUsIDAuMjU+XQogICAgICAgICAgICAgICAgWzEuMDAgcmdiIDwwLjUwLCAwLjUwLCAwLjUwPl0KICAgICAgICAgICAgfQogICAgICAgICAgICBzY2FsZSA8MS4wMCwgMS4wMCwgMS41MD4gKiAyLjUwCiAgICAgICAgICAgIHRyYW5zbGF0ZSA8MC4wMCwgMC4wMCwgMC4wMD4KICAgICAgICB9CiAgICAgICAgZmluaXNoIHsgYW1iaWVudCAxIGRpZmZ1c2UgMCB9CiAgICB9CiAgICBzY2FsZSAxMDAwMAp9Ci8vbWlzdApmb2cgeyBmb2dfdHlwZSAyCiAgICBkaXN0YW5jZSA1MAogICAgY29sb3IgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPiAqIDAuNzUKICAgIGZvZ19vZmZzZXQgMC4xMAogICAgZm9nX2FsdCAxLjUwCiAgICB0dXJidWxlbmNlIDEuNzUKfQovL2duZApwbGFuZSB7IDwwLjAwLCAxLjAwLCAwLjAwPiwgMAogICAgdGV4dHVyZSB7CiAgICAgICAgcGlnbWVudHsgY29sb3IgcmdiIDwwLjI1LCAwLjQ1LCAwLjAwPiB9CiAgICAgICAgbm9ybWFsIHsgYnVtcHMgMC43NSBzY2FsZSAwLjAxIH0KICAgICAgICBmaW5pc2ggeyBwaG9uZyAwLjEwIH0KICAgIH0KfQoAY2FtZXJhIHsgbG9jYXRpb24gPCUuM2YgLCAlLjNmICwgLTUwMC4wMDA+CiAgICAgICAgIGxvb2tfYXQgIDwlLjNmICwgJS4zZiAsIDAuMDAwPgogICAgICAgICByaWdodCB4ICogaW1hZ2Vfd2lkdGggLyBpbWFnZV9oZWlnaHQKICAgICAgICAgYW5nbGUgJS4zZgp9CgAgICAgbWF0ZXJpYWwgTWF0ZXJpYWwgewoAU2hhcGUgewoAICBhcHBlYXJhbmNlIEFwcGVhcmFuY2UgewoAL3VzZXJfc2hhcGVfJWQgewoAZ3JhcGggRyB7CgBhcnJvd2hlYWQgPSA3ICVzIG5vdCB1c2VkIGJ5IGdyYXBodml6CgBib3hyYWQgPSAwICVzIG5vIHJvdW5kZWQgY29ybmVycyBpbiBncmFwaHZpegoAb3V0IG9mIG1lbW9yeQoAJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkKAEdyYXBodml6IGJ1aWx0IHdpdGhvdXQgYW55IHRyaWFuZ3VsYXRpb24gbGlicmFyeQoAcmVtb3ZlX292ZXJsYXA6IEdyYXBodml6IG5vdCBidWlsdCB3aXRoIHRyaWFuZ3VsYXRpb24gbGlicmFyeQoAJXMgZmlsbCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgZ3BpYyBjYW4gdXNlIGZpbGwgb3IgZmlsbGVkLCAxMHRoIEVkaXRpb24gdXNlcyBmaWxsIG9ubHkKAGJveHJhZD0yLjAgJXMgd2lsbCBiZSByZXNldCB0byAwLjAgYnkgZ3BpYyBvbmx5CgBpbiBjaGVja3BhdGgsIHN0YXJ0IHBvcnQgbm90IGluIGZpcnN0IGJveAoAaW4gY2hlY2twYXRoLCBlbmQgcG9ydCBub3QgaW4gbGFzdCBib3gKACVkICVkICMlMDJ4JTAyeCUwMngKAEhlYXAgb3ZlcmZsb3cKAHRleHQgewogICAgdHRmICIlcyIsCiAgICAiJXMiLCAlLjNmLCAlLjNmCiAgICAgICAgbm9fc2hhZG93CgAlZCAlZCAlZCAlLjBmICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJXp1CgB0b3RhbCBhZGRlZCBzbyBmYXIgPSAlenUKAHJvb3QgPSAlcyBtYXggc3RlcHMgdG8gcm9vdCA9ICVsbHUKAC5wcyAlLjBmKlxuKFNGdS8lLjBmdQoAICBtYXJnaW4gJXUKAE51bWJlciBvZiBpdGVyYXRpb25zID0gJXUKAE51bWJlciBvZiBpbmNyZWFzZXMgPSAldQoAb3ZlcmxhcCBbJXVdIDogJXUKACAlcyBhbGlnbmVkdGV4dAoAbGF5ZXJzIG5vdCBzdXBwb3J0ZWQgaW4gJXMgb3V0cHV0CgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBvdXRlZGdlIGxpc3QKAGFkZF90cmVlX2VkZ2U6IGVtcHR5IGluZWRnZSBsaXN0CgBObyBsaWJ6IHN1cHBvcnQKACVzIC5QUyB3L28gYXJncyBjYXVzZXMgR05VIHBpYyB0byBzY2FsZSBkcmF3aW5nIHRvIGZpdCA4LjV4MTEgcGFwZXI7IERXQiBkb2VzIG5vdAoAJXMgR05VIHBpYyBzdXBwb3J0cyBhIGxpbmV0aGljayB2YXJpYWJsZSB0byBzZXQgbGluZSB0aGlja25lc3M7IERXQiBhbmQgMTB0aCBFZC4gZG8gbm90CgAlcyBHTlUgcGljIHN1cHBvcnRzIGEgYm94cmFkIHZhcmlhYmxlIHRvIGRyYXcgYm94ZXMgd2l0aCByb3VuZGVkIGNvcm5lcnM7IERXQiBhbmQgMTB0aCBFZC4gZG8gbm90CgAgLyVzIHNldF9mb250CgAlcyUuKnMgaXMgbm90IGEgdHJvZmYgZm9udAoAdW5leHBlY3RlZCBjYXNlIGluIGxvY2F0ZV9lbmRwb2ludAoAY2VsbCBzaXplIHRvbyBzbWFsbCBmb3IgY29udGVudAoAdGFibGUgc2l6ZSB0b28gc21hbGwgZm9yIGNvbnRlbnQKACUlRW5kRG9jdW1lbnQKAFVuY2xvc2VkIGNvbW1lbnQKAExhYmVsIGNsb3NlZCBiZWZvcmUgZW5kIG9mIEhUTUwgZWxlbWVudAoAUG9ydHJhaXQKAGZpeGVkIGNlbGwgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoAZml4ZWQgdGFibGUgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoAcG9zIGF0dHJpYnV0ZSBmb3IgZWRnZSAoJXMsJXMpIGRvZXNuJ3QgaGF2ZSAzbisxIHBvaW50cwoAICBnZW5lcmF0ZWQgJWQgY29uc3RyYWludHMKAHNwbGluZXMgYW5kIGNsdXN0ZXIgZWRnZXMgbm90IHN1cHBvcnRlZCAtIHVzaW5nIGxpbmUgc2VnbWVudHMKAG9iamVjdHMKAFdhcm5pbmc6IG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZmxvYXRzCgBmb250IG5hbWUgJXMgY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IG1heSBub3QgYmUgYWNjZXB0ZWQgYnkgc29tZSBQUyB2aWV3ZXJzCgBmb250IG5hbWUgJXMgaXMgbG9uZ2VyIHRoYW4gMjkgY2hhcmFjdGVycyB3aGljaCBtYXkgYmUgcmVqZWN0ZWQgYnkgc29tZSBQUyB2aWV3ZXJzCgBjYW5ub3QgYWxsb2NhdGUgcHMKAHNjYWxlPTEuMCAlcyByZXF1aXJlZCBmb3IgY29tcGFyaXNvbnMKAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMKACVzIERXQiAyIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMKAGFycmF5IHBhY2tpbmc6ICVzICV6dSByb3dzICV6dSBjb2x1bW5zCgBzeW50YXggYW1iaWd1aXR5IC0gYmFkbHkgZGVsaW1pdGVkIG51bWJlciAnJXMnIGluIGxpbmUgJWQgb2YgJXMgc3BsaXRzIGludG8gdHdvIHRva2VucwoAZWRnZSBsYWJlbHMgd2l0aCBzcGxpbmVzPWN1cnZlZCBub3Qgc3VwcG9ydGVkIGluIGRvdCAtIHVzZSB4bGFiZWxzCgBmbGF0IGVkZ2UgYmV0d2VlbiBhZGphY2VudCBub2RlcyBvbmUgb2Ygd2hpY2ggaGFzIGEgcmVjb3JkIHNoYXBlIC0gcmVwbGFjZSByZWNvcmRzIHdpdGggSFRNTC1saWtlIGxhYmVscwoAb3V0IG9mIG1lbW9yeSB3aGVuIHRyeWluZyB0byBhbGxvY2F0ZSAlenUgYnl0ZXMKAGludGVnZXIgb3ZlcmZsb3cgd2hlbiB0cnlpbmcgdG8gYWxsb2NhdGUgJXp1ICogJXp1IGJ5dGVzCgB1cGRhdGU6IG1pc21hdGNoZWQgbGNhIGluIHRyZWV1cGRhdGVzCgBncmFwaCAlcywgY29vcmQgJXMsIGV4cGVjdGVkIGZvdXIgZG91YmxlcwoAbm9kZSAlcywgcG9zaXRpb24gJXMsIGV4cGVjdGVkIHR3byBkb3VibGVzCgBGb3VuZCAlZCBEaUctQ29MYSBib3VuZGFyaWVzCgBJbmNoZXMKACglNHp1KSAlN3p1IG5vZGVzICU3enUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IGNvdWxkIG5vdCBjb25zdHJ1Y3Qgb2JzdGFjbGVzIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHRoZSBib3VuZGluZyBib3hlcyBvZiBzb21lIG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHNvbWUgbm9kZXMgd2l0aCBtYXJnaW4gKCUuMDJmLCUuMDJmKSB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBtZXJnZTI6IGdyYXBoICVzLCByYW5rICVkIGhhcyBvbmx5ICVkIDwgJWQgbm9kZXMKAFNjYW5uaW5nIGdyYXBoICVzLCAlZCBub2RlcwoAV2FybmluZzogbm8gaGFyZC1jb2RlZCBtZXRyaWNzIGZvciAnJXMnLiAgRmFsbGluZyBiYWNrIHRvICdUaW1lcycgbWV0cmljcwoAaW4gZWRnZSAlcyVzJXMKAFVzaW5nICVzOiAlczolcwoARm9ybWF0OiAiJXMiIG5vdCByZWNvZ25pemVkLiBVc2Ugb25lIG9mOiVzCgBMYXlvdXQgdHlwZTogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoAbGF5b3V0ICVzCgAuZnQgJXMKAGJhZCBsYWJlbCBmb3JtYXQgJXMKAGluIHJvdXRlc3BsaW5lcywgZWRnZSBpcyBhIGxvb3AgYXQgJXMKACAgICAgICAlN2Qgbm9kZXMgJTdkIGVkZ2VzICU3enUgY29tcG9uZW50cyAlcwoAaW4gbGFiZWwgb2YgZWRnZSAlcyAlcyAlcwoAICBFZGdlICVzICVzICVzCgBvcnRobyAlcyAlcwoAcG9seWxpbmUgJXMgJXMKAHNwbGluZSAlcyAlcwoAcmVjdGFuZ2xlICglLjBmLCUuMGYpICglLjBmLCUuMGYpICVzICVzCgBpbiBjbHVzdGVyICVzCgAlcyB3YXMgYWxyZWFkeSBpbiBhIHJhbmtzZXQsIGRlbGV0ZWQgZnJvbSBjbHVzdGVyICVzCgAlcyAtPiAlczogdGFpbCBub3QgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgaXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAaGVhZCBjbHVzdGVyICVzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAGhlYWQgbm9kZSAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgAlcyAtPiAlczogaGVhZCBub3QgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgaXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAdGFpbCBjbHVzdGVyICVzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAHRhaWwgbm9kZSAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgBVbmhhbmRsZWQgYWRqdXN0IG9wdGlvbiAlcwoAcmVwb3NpdGlvbiAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB4bGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggdGFpbCBsYWJlbCAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCBsYWJlbCAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCBoZWFkIGxhYmVsICVzCgAvLyoqKiBiZWdpbl9ncmFwaCAlcwoATWF4LiBpdGVyYXRpb25zICglZCkgcmVhY2hlZCBvbiBncmFwaCAlcwoAQ291bGQgbm90IHBhcnNlICJfYmFja2dyb3VuZCIgYXR0cmlidXRlIGluIGdyYXBoICVzCgBpbiBsYWJlbCBvZiBncmFwaCAlcwoAQ3JlYXRpbmcgZWRnZXMgdXNpbmcgJXMKAEFkanVzdGluZyAlcyB1c2luZyAlcwoAJXMgd2hpbGUgb3BlbmluZyAlcwoAZGVyaXZlIGdyYXBoIF9kZ18lZCBvZiAlcwoAIF0gICV6dSB0cnVlICVzCgBdICAlZCB0cnVlICVzCgAgXSAgJXp1IGZhbHNlICVzCgBdICAlZCBmYWxzZSAlcwoAbWFrZVBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAbWFrZUFkZFBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAdXNpbmcgJXMgZm9yIHVua25vd24gc2hhcGUgJXMKACAgb2N0cmVlIHNjaGVtZSAlcwoAY2FuJ3Qgb3BlbiBsaWJyYXJ5IGZpbGUgJXMKAGNhbid0IGZpbmQgbGlicmFyeSBmaWxlICVzCgBCb3VuZGluZ0JveCBub3QgZm91bmQgaW4gZXBzZiBmaWxlICVzCgBjb3VsZG4ndCBvcGVuIGVwc2YgZmlsZSAlcwoAY291bGRuJ3QgcmVhZCBmcm9tIGVwc2YgZmlsZSAlcwoAaW4gbm9kZSAlcwoAc2hhcGVmaWxlIG5vdCBzZXQgb3Igbm90IGZvdW5kIGZvciBlcHNmIG5vZGUgJXMKAGluIGxhYmVsIG9mIG5vZGUgJXMKAGVuZCAlcwoAcmFua2luZzogZmFpbHVyZSB0byBjcmVhdGUgc3Ryb25nIGNvbnN0cmFpbnQgZWRnZSBiZXR3ZWVuIG5vZGVzICVzIGFuZCAlcwoAb29wcywgaW50ZXJuYWwgZXJyb3I6IHVuaGFuZGxlZCBjb2xvciB0eXBlPSVkICVzCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkICVkICVkCiAlZCAlcwoAcm9vdCA9ICVzCgAvLyoqKiB0ZXh0c3BhbjogJXMsIGZvbnRzaXplID0gJS4zZiwgZm9udG5hbWUgPSAlcwoAdHJpZXMgPSAlZCwgbW9kZSA9ICVzCgAvLyoqKiBjb21tZW50OiAlcwoAZm9udG5hbWU6ICIlcyIgcmVzb2x2ZWQgdG86ICVzCgAlJSUlUGFnZU9yaWVudGF0aW9uOiAlcwoAZGVsYXVuYXlfdHJpYW5ndWxhdGlvbjogJXMKAGRlbGF1bmF5X3RyaTogJXMKAGd2cHJpbnRmOiAlcwoAbmVzdGluZyBub3QgYWxsb3dlZCBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKScgaW4gc3R5bGU6ICVzCgB1bm1hdGNoZWQgJygnIGluIHN0eWxlOiAlcwoAJSUlJVRpdGxlOiAlcwoAJXMgVGl0bGU6ICVzCgAjIFRpdGxlOiAlcwoALy8qKiogYmVnaW5fbm9kZTogJXMKAHJlYWxsb2MgZmFpbGVkOiAlcwoAbGliL3BhdGhwbGFuLyVzOiVkOiAlcwoAZ3JpZCglZCwlZCk6ICVzCgBDb3VsZCBub3Qgb3BlbiAiJXMiIGZvciB3cml0aW5nIDogJXMKAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgAgWyV6dV0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAJSUgJXMKACMgJXMKACAgbW9kZSAgICVzCgBjb25qdWdhdGVfZ3JhZGllbnQ6IHVuZXhwZWN0ZWQgbGVuZ3RoIDAgdmVjdG9yCgAlcyB0byBjaGFuZ2UgZHJhd2luZyBzaXplLCBtdWx0aXBseSB0aGUgd2lkdGggYW5kIGhlaWdodCBvbiB0aGUgLlBTIGxpbmUgYWJvdmUgYW5kIHRoZSBudW1iZXIgb24gdGhlIHR3byBsaW5lcyBiZWxvdyAocm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKSBieSBhIHNjYWxlIGZhY3RvcgoAYWRkX3NlZ21lbnQ6IGVycm9yCgAlLjVnICUuNWcgJS41ZyAlc2NvbG9yCgAwIDAgMCBlZGdlY29sb3IKADAuOCAwLjggMC44IHNldHJnYmNvbG9yCgAwIDAgMSBzZXRyZ2Jjb2xvcgoAMSAwIDAgc2V0cmdiY29sb3IKADAgMCAwIHNldHJnYmNvbG9yCgAlZCAlZCBzZXRsYXllcgoALy8qKiogZW5kX2xheWVyCgBVVEYtOCBpbnB1dCB1c2VzIG5vbi1MYXRpbjEgY2hhcmFjdGVycyB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIFBvc3RTY3JpcHQgZHJpdmVyCgBMZXR0ZXIKAC8vKioqIGJlZ2luX2NsdXN0ZXIKAC8vKioqIGVuZF9jbHVzdGVyCgByZW1vdmluZyBlbXB0eSBjbHVzdGVyCgBDZW50ZXIKAFdhcm5pbmc6IG5vIHZhbHVlIGZvciB3aWR0aCBvZiBub24tQVNDSUkgY2hhcmFjdGVyICV1LiBGYWxsaW5nIGJhY2sgdG8gd2lkdGggb2Ygc3BhY2UgY2hhcmFjdGVyCgBiYXNlIHJlZmVyZXIKACUlUGFnZVRyYWlsZXIKACUlVHJhaWxlcgoALy8qKiogYmV6aWVyCgAiJXMiIHdhcyBub3QgZm91bmQgYXMgYSBmaWxlIG9yIGFzIGEgc2hhcGUgbGlicmFyeSBtZW1iZXIKAHN0b3AKACBjdXJ2ZXRvCgBuZXdwYXRoICUuMGYgJS4wZiBtb3ZldG8KACUuMGYgJS4wZiBsaW5ldG8KACBsYXlvdXQ9bmVhdG8KAG5vZGUgJXMgaW4gZ3JhcGggJXMgaGFzIG5vIHBvc2l0aW9uCgAlcyBtYXhwc2h0IGFuZCBtYXhwc3dpZCBoYXZlIG5vIG1lYW5pbmcgaW4gRFdCIDIuMCwgc2V0IHBhZ2UgYm91bmRhcmllcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIGFycm93aGVhZCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgYXJyb3doZWFkID0gNyBtYWtlcyBmaWxsZWQgYXJyb3doZWFkcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIGFycm93aGVhZCBpcyB1bmRlZmluZWQgaW4gRFdCIDIsIGluaXRpYWxseSAxIGluIGdwaWMsIDIgaW4gMTB0aCBFZGl0aW9uCgBtYWpvcml6YXRpb24KAC8vKioqIHBvbHlnb24KAG92ZXJmbG93IHdoZW4gY29tcHV0aW5nIGVkZ2Ugd2VpZ2h0IHN1bQoAc2ZkcCBvbmx5IHN1cHBvcnRzIHN0YXJ0PXJhbmRvbQoAbm9kZSBwb3NpdGlvbnMgYXJlIGlnbm9yZWQgdW5sZXNzIHN0YXJ0PXJhbmRvbQoAY2xvc2VwYXRoIGZpbGwKACBlbGxpcHNlX3BhdGggZmlsbAoAICAlLjBmICUuMGYgY2VsbAoAJWYgJWYgJWYgJWYgY2VsbAoAZ3JhcGggJXMgaXMgZGlzY29ubmVjdGVkLiBIZW5jZSwgdGhlIGNpcmN1aXQgbW9kZWwKAGdyYXBoIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBlZGdlcyBpbiBncmFwaCAlcyBoYXZlIG5vIGxlbiBhdHRyaWJ1dGUuIEhlbmNlLCB0aGUgbWRzIG1vZGVsCgBjaXJjdWl0IG1vZGVsIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdtb2RlPXNnZCwgcmV2ZXJ0aW5nIHRvIHNob3J0cGF0aCBtb2RlbAoAbWRzIG1vZGVsIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdtb2RlPXNnZCwgcmV2ZXJ0aW5nIHRvIHNob3J0cGF0aCBtb2RlbAoAbm9kZSAnJXMnLCBncmFwaCAnJXMnIHNpemUgdG9vIHNtYWxsIGZvciBsYWJlbAoAJXMgRFdCIDIgZG9lc24ndCB1c2UgZmlsbCBhbmQgZG9lc24ndCBkZWZpbmUgZmlsbHZhbAoAWyB7Q2F0YWxvZ30gPDwgL1VSSSA8PCAvQmFzZSAlcyA+PiA+PgovUFVUIHBkZm1hcmsKAFsgL0Nyb3BCb3ggWyVkICVkICVkICVkXSAvUEFHRVMgcGRmbWFyawoAICAvQm9yZGVyIFsgMCAwIDAgXQogIC9BY3Rpb24gPDwgL1N1YnR5cGUgL1VSSSAvVVJJICVzID4+CiAgL1N1YnR5cGUgL0xpbmsKL0FOTiBwZGZtYXJrCgB0cm91YmxlIGluIGluaXRfcmFuawoAbGluZXRoaWNrID0gMDsgb2xkbGluZXRoaWNrID0gbGluZXRoaWNrCgAgc2V0bGluZXdpZHRoCgBnc2F2ZQolZCAlZCAlZCAlZCBib3hwcmltIGNsaXAgbmV3cGF0aAoAZ3NhdmUgJWcgJWcgdHJhbnNsYXRlIG5ld3BhdGgKAC8vKioqIGVuZF9ncmFwaAoAbGF5b3V0IGF0dHJpYnV0ZSBpcyBpbnZhbGlkIGV4Y2VwdCBvbiB0aGUgcm9vdCBncmFwaAoAaW4gY2hlY2twYXRoLCBib3hlcyAlenUgYW5kICV6dSBkb24ndCB0b3VjaAoAbWVyZ2Vfb25ld2F5IGdsaXRjaAoAJXMgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSBpbiB0aGlzIGRyYXdpbmcKAE5vZGUgbm90IGFkamFjZW50IHRvIGNlbGwgLS0gQWJvcnRpbmcKAGluY29tcGFyYWJsZSBzZWdtZW50cyAhISAtLSBBYm9ydGluZwoAQWx0ZXJuYXRpdmVseSwgY29uc2lkZXIgcnVubmluZyBuZWF0byB1c2luZyAtR3BhY2s9dHJ1ZSBvciBkZWNvbXBvc2luZwoAbGFiZWxfc2NoZW1lID0gJWQgPiA0IDogaWdub3JpbmcKAGd2cmVuZGVyX3NldF9zdHlsZTogdW5zdXBwb3J0ZWQgc3R5bGUgJXMgLSBpZ25vcmluZwoAQXJyb3cgdHlwZSAiJXMiIHVua25vd24gLSBpZ25vcmluZwoAZmRwIGRvZXMgbm90IHN1cHBvcnQgc3RhcnQ9c2VsZiAtIGlnbm9yaW5nCgAlcyBhdHRyaWJ1dGUgdmFsdWUgbXVzdCBiZSAxIG9yIDIgLSBpZ25vcmluZwoATW9yZSB0aGFuIDIgY29sb3JzIHNwZWNpZmllZCBmb3IgYSBncmFkaWVudCAtIGlnbm9yaW5nIHJlbWFpbmluZwoAYXMgcmVxdWlyZWQgYnkgdGhlIC1uIGZsYWcKAGJiWyVzXSAlLjVnICUuNWcgJS41ZyAlLjVnCgAvcGF0aGJveCB7CiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL1ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCiB9IGRlZgovZGJnc3RhcnQgeyBnc2F2ZSAlLjVnICUuNWcgdHJhbnNsYXRlIH0gZGVmCi9hcnJvd2xlbmd0aCAxMCBkZWYKL2Fycm93d2lkdGggYXJyb3dsZW5ndGggMiBkaXYgZGVmCi9hcnJvd2hlYWQgewogICAgZ3NhdmUKICAgIHJvdGF0ZQogICAgY3VycmVudHBvaW50CiAgICBuZXdwYXRoCiAgICBtb3ZldG8KICAgIGFycm93bGVuZ3RoIGFycm93d2lkdGggMiBkaXYgcmxpbmV0bwogICAgMCBhcnJvd3dpZHRoIG5lZyBybGluZXRvCiAgICBjbG9zZXBhdGggZmlsbAogICAgZ3Jlc3RvcmUKfSBiaW5kIGRlZgovbWFrZWFycm93IHsKICAgIGN1cnJlbnRwb2ludCBleGNoIHBvcCBzdWIgZXhjaCBjdXJyZW50cG9pbnQgcG9wIHN1YiBhdGFuCiAgICBhcnJvd2hlYWQKfSBiaW5kIGRlZgovcG9pbnQgeyAgICBuZXdwYXRoICAgIDIgMCAzNjAgYXJjIGZpbGx9IGRlZi9tYWtldmVjIHsKICAgIC9ZIGV4Y2ggZGVmCiAgICAvWCBleGNoIGRlZgogICAgL3kgZXhjaCBkZWYKICAgIC94IGV4Y2ggZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggWSBsaW5ldG8gc3Ryb2tlCiAgICBYIFkgbW92ZXRvCiAgICB4IHkgbWFrZWFycm93Cn0gZGVmCgAvcGF0aGJveCB7CiAgICAvWCBleGNoIG5lZyAlLjVnIHN1YiBkZWYKICAgIC9ZIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoIG5lZyAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggeSBsaW5ldG8KICAgIFggWSBsaW5ldG8KICAgIHggWSBsaW5ldG8KICAgIGNsb3NlcGF0aCBzdHJva2UKfSBkZWYKACUhUFMtQWRvYmUtMi4wCi9ub2RlIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIGZpbGwKfSBkZWYKL2NlbGwgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICAveSBleGNoIGRlZgogIC94IGV4Y2ggZGVmCiAgbmV3cGF0aAogIHggeSBtb3ZldG8KICB4IFkgbGluZXRvCiAgWCBZIGxpbmV0bwogIFggeSBsaW5ldG8KICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgB9IGJpbmQgZGVmCgAuUFMgJS41ZiAlLjVmCgBvdmVybGFwOiAlcyB2YWx1ZSAlZCBzY2FsaW5nICUuMDRmCgAgIGJlYXV0aWZ5X2xlYXZlcyAlZCBub2RlIHdlaWdodHMgJWQgcm90YXRpb24gJS4wM2YKACAgcmVwdWxzaXZlIGV4cG9uZW50OiAlLjAzZgoAICBLIDogJS4wM2YgQyA6ICUuMDNmCgAlcyAlLjNmCgAKaW50ZXJzZWN0aW9uIGF0ICUuM2YgJS4zZgoAICAgIHNjYWxlICUuM2YKAHRvcnVzIHsgJS4zZiwgJS4zZgoAICAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPiwgJS4zZgoAIGluICVzIC0gc2V0dGluZyB0byAlLjAyZgoAY2lyY2xlICVzICUuMGYsJS4wZiwlLjBmCgByZWN0ICVzICUuMGYsJS4wZiAlLjBmLCUuMGYKACVkICVkICVkICUuMGYgJWQgJWQgJWQgJWQgJWQgJS4zZiAlZCAlLjRmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZgoAICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYKACUlJSVQYWdlOiAxIDEKJSUlJVBhZ2VCb3VuZGluZ0JveDogJS4wZiAlLjBmICUuMGYgJS4wZgoAcG9zWyV6dV0gJS4wZiAlLjBmCgAubnIgU0YgJS4wZgpzY2FsZXRoaWNrbmVzcyA9ICUuMGYKACVzIHNhdmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoubnIgLlMgXG4oLnMKLm5yIERGIFxuKC5mCgBzaG93cGFnZQolJSUlVHJhaWxlcgolJSUlQm91bmRpbmdCb3g6ICUuZiAlLmYgJS5mICUuZgoAYWRkaW5nICV6dSBpdGVtcywgdG90YWwgYXJlYSA9ICVmLCB3ID0gJWYsIGFyZWEvdz0lZgoAZ2FwPSVmLCVmCgAgIGFzcGVjdCAlZgoAYSAlZiBiICVmIGMgJWYgZCAlZiByICVmCgBtb2RlbCAlZCBzbWFydF9pbml0ICVkIHN0cmVzc3d0ICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgBTb2x2aW5nIG1vZGVsICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgAlcyBjb29yZCAlLjVnICUuNWcgaHQgJWYgd2lkdGggJWYKAHJlYyAlZiAlZiAlZiAlZgoAJXMgOiAlZiAlZiAlZiAlZgoAJXMgOiAlZiAlZgoAbWF4cHNodCA9ICVmCm1heHBzd2lkID0gJWYKAG1kc01vZGVsOiBkZWx0YSA9ICVmCgAgcjEgJWYgcjIgJWYKAFBhY2tpbmc6IGNvbXB1dGUgZ3JpZCBzaXplCgBnc2F2ZQoAJSVFbmRDb21tZW50cwpzYXZlCgBVbnJlY29nbml6ZWQgY2hhcmFjdGVyICclYycgKCVkKSBpbiBzaWRlcyBhdHRyaWJ1dGUKAEltYWdlcyB1bnN1cHBvcnRlZCBpbiAiYmFja2dyb3VuZCIgYXR0cmlidXRlCgAlcyBHTlUgcGljIHZzLiAxMHRoIEVkaXRpb24gZFwoZSd0ZW50ZQoAcmVzZXQgJXMgc2V0IHRvIGtub3duIHN0YXRlCgAlZyAlZyBzZXRfc2NhbGUgJWQgcm90YXRlICVnICVnIHRyYW5zbGF0ZQoAJWYgJWYgdHJhbnNsYXRlCgAlZCAlZCB0cmFuc2xhdGUKAC8vKioqIGVsbGlwc2UKAFVucmVjb2duaXplZCBvdmVybGFwIHZhbHVlICIlcyIgLSB1c2luZyBmYWxzZQoAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQoAJXM6IHZzbnByaW50ZiBmYWlsdXJlCgBlbmRwYWdlCnNob3dwYWdlCmdyZXN0b3JlCgBlbmQKcmVzdG9yZQoAbGF5b3V0IHdhcyBub3QgZG9uZQoATGF5b3V0IHdhcyBub3QgZG9uZQoALy8qKiogcG9seWxpbmUKAHRyeWluZyB0byBkZWxldGUgYSBub24tbGluZQoAIyBlbmQgb2YgRklHIGZpbGUKAFNpbmdsZQoAcmVuZGVyZXIgZm9yICVzIGlzIHVuYXZhaWxhYmxlCgBkeW5hbWljIGxvYWRpbmcgbm90IGF2YWlsYWJsZQoAJS4wZiAlLjBmIGxpbmV0byBzdHJva2UKAGNsb3NlcGF0aCBzdHJva2UKACBlbGxpcHNlX3BhdGggc3Ryb2tlCgAvLyoqKiBiZWdpbl9lZGdlCgAvLyoqKiBlbmRfZWRnZQoAbG9zdCAlcyAlcyBlZGdlCgBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIHZpcnR1YWwgd2VpZ2h0IG9mIGVkZ2UKAGFkZF90cmVlX2VkZ2U6IG1pc3NpbmcgdHJlZSBlZGdlCgBpbiByb3V0ZXNwbGluZXMsIGNhbm5vdCBmaW5kIE5PUk1BTCBlZGdlCgBzaG93cGFnZQoAJWQgJWQgJWQgYmVnaW5wYWdlCgAvLyoqKiBiZWdpbl9wYWdlCgAvLyoqKiBlbmRfcGFnZQoARmlsZW5hbWUgIiVzIiBpcyB1bnNhZmUKAGxhYmVsOiBhcmVhIHRvbyBsYXJnZSBmb3IgcnRyZWUKAC8vKioqIGVuZF9ub2RlCgBVc2luZyBkZWZhdWx0IGNhbGN1bGF0aW9uIGZvciByb290IG5vZGUKAGNvbnRhaW5fbm9kZXMgY2x1c3QgJXMgcmFuayAlZCBtaXNzaW5nIG5vZGUKACVmICVmICVmICVmIG5vZGUKADw8IC9QYWdlU2l6ZSBbJWQgJWRdID4+IHNldHBhZ2VkZXZpY2UKAGluIGNoZWNrcGF0aCwgYm94ICV6dSBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAaW4gY2hlY2twYXRoLCBib3ggMCBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAY2x1c3RlciBuYW1lZCAlcyBub3QgZm91bmQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlcyVzIHVuc3VwcG9ydGVkCgBjbHVzdGVyIGN5Y2xlICVzIC0tICVzIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAbGF5b3V0IGFib3J0ZWQKAHBhZ2VkaXI9JXMgaWdub3JlZAoAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgYXR0cmlidXRlICJtb2RlbCIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAc3RhcnQ9MCBub3Qgc3VwcG9ydGVkIHdpdGggbW9kZT1zZWxmIC0gaWdub3JlZAoAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgUk9XUyAtIGlnbm9yZWQKAFVua25vd24gdmFsdWUgJXMgZm9yIENPTFVNTlMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJS4qcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiBpbiBURCAtIGlnbm9yZWQKAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDT0xTUEFOIHZhbHVlIGNhbm5vdCBiZSAwIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAaW4gcm91dGVzcGxpbmVzLCBQc2hvcnRlc3RwYXRoIGZhaWxlZAoAaW4gcm91dGVzcGxpbmVzLCBQcm91dGVzcGxpbmUgZmFpbGVkCgAjIHBsdWdpbiBsb2FkaW5nIG9mIGRlcGVuZGVuY3kgIiUuKnMiIGZhaWxlZAoAJXM6JWQ6IGNsYWltZWQgdW5yZWFjaGFibGUgY29kZSB3YXMgcmVhY2hlZAoAIyB1bnN1Y2Nlc3NmdWwgcGx1Z2luIGxvYWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBuc2l6ZXNjYWxlPSVmLGl0ZXJhdGlvbnM9JWQKAGN0cmwtPm92ZXJsYXA9JWQKACVzICVkIG5vZGVzICVkIGVkZ2VzIG1heGl0ZXI9JWQgYmFsYW5jZT0lZAoALy8qKiogYmVnaW5fbGF5ZXI6ICVzLCAlZC8lZAoAZGVnZW5lcmF0ZSBjb25jZW50cmF0ZWQgcmFuayAlcywlZAoAbWluY3Jvc3M6IHBhc3MgJWQgaXRlciAlZCB0cnlpbmcgJWQgY3VyX2Nyb3NzICVkIGJlc3RfY3Jvc3MgJWQKACAgbWF4IGxldmVscyAlZAoACSVzICVkCgAgIEJhcm5lcy1IdXR0IGNvbnN0YW50ICUuMDNmIHRvbGVyYW5jZSAgJS4wM2YgbWF4aXRlciAlZAoAZ3Z3cml0ZV9ub196IHByb2JsZW0gJWQKACAgcXVhZHRyZWUgc2l6ZSAlZCBtYXhfbGV2ZWwgJWQKAHJlYnVpbGRfdmxpc3RzOiBsZWFkIGlzIG51bGwgZm9yIHJhbmsgJWQKAHJlYnVpbGRfdmxpc3RzOiByYW5rIGxlYWQgJXMgbm90IGluIG9yZGVyICVkIG9mIHJhbmsgJWQKACAgc21vb3RoaW5nICVzIG92ZXJsYXAgJWQgaW5pdGlhbF9zY2FsaW5nICUuMDNmIGRvX3Nocmlua2luZyAlZAoAICBjb29saW5nICUuMDNmIHN0ZXAgc2l6ZSAgJS4wM2YgYWRhcHRpdmUgJWQKAFVuc3VwcG9ydGVkIGNoYXJzZXQgdmFsdWUgJWQKAGluIHJvdXRlc3BsaW5lcywgaWxsZWdhbCB2YWx1ZXMgb2YgcHJldiAlZCBhbmQgbmV4dCAlZCwgbGluZSAlZAoAICBlZGdlX2xhYmVsaW5nX3NjaGVtZSAlZAoAYWdkaWN0b2Y6IHVua25vd24ga2luZCAlZAoAICByYW5kb20gc3RhcnQgJWQgc2VlZCAlZAoAJWQgJWQgJWQgJS4wZiAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkCgAlJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJSUlJVBhZ2U6ICVkICVkCgAlcyBuby4gY2VsbHMgJWQgVyAlZCBIICVkCgBNYXhyYW5rID0gJWQsIG1pbnJhbmsgPSAlZAoAc3RlcCBzaXplID0gJWQKACUlJSVQ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cmFuY2UgMC4wMQoAICAgIHRvbGVyYW5jZSAwLjEKACUlUGFnZXM6IDEKACAgICAgICAgZGlmZnVzZUNvbG9yIDEgMSAxCgAxMDAuMDAKACBFUFNGLTMuMAoAJXMgYm94cmFkIGlzIG5vdyAwLjAgaW4gZ3BpYywgZWxzZSBpdCByZW1haW5zIDIuMAoAc3BoZXJlIHs8JTkuM2YsICU5LjNmLCAlOS4zZj4sIDEuMAoAV2FybmluZzogbm8gdmFsdWUgZm9yIHdpZHRoIG9mIEFTQ0lJIGNoYXJhY3RlciAldS4gRmFsbGluZyBiYWNrIHRvIDAKAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogJXMgJXMgcmFuayAlZCBpID0gJWQgYW4gPSAwCgBjb25jZW50cmF0ZT10cnVlIG1heSBub3Qgd29yayBjb3JyZWN0bHkuCgBObyBsaWJ6IHN1cHBvcnQuCgB0d29waTogdXNlIG9mIHdlaWdodD0wIGNyZWF0ZXMgZGlzY29ubmVjdGVkIGNvbXBvbmVudC4KAHRoZSBncmFwaCBpbnRvIGNvbm5lY3RlZCBjb21wb25lbnRzLgoAT3J0aG9nb25hbCBlZGdlcyBkbyBub3QgY3VycmVudGx5IGhhbmRsZSBlZGdlIGxhYmVscy4gVHJ5IHVzaW5nIHhsYWJlbHMuCgBndlJlbmRlckpvYnMgJXM6ICUuMmYgc2Vjcy4KAG1pbmNyb3NzICVzOiAlZCBjcm9zc2luZ3MsICUuMmYgc2Vjcy4KACVzIGlzIG5vdCBhIGtub3duIGNvbG9yLgoAaXMgaW5hcHByb3ByaWF0ZS4gUmV2ZXJ0aW5nIHRvIHRoZSBzaG9ydGVzdCBwYXRoIG1vZGVsLgoAaXMgdW5kZWZpbmVkLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBVbmFibGUgdG8gcmVjbGFpbSBib3ggc3BhY2UgaW4gc3BsaW5lIHJvdXRpbmcgZm9yIGVkZ2UgIiVzIiAtPiAiJXMiLiBTb21ldGhpbmcgaXMgcHJvYmFibHkgc2VyaW91c2x5IHdyb25nLgoARXJyb3IgZHVyaW5nIGNvbnZlcnNpb24gdG8gIlVURi04Ii4gUXVpdGluZy4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQuCgBncmFkaWVudCBwZW4gY29sb3JzIG5vdCB5ZXQgc3VwcG9ydGVkLgoAICBpbml0Q01halZQU0MgZG9uZTogJWQgZ2xvYmFsIGNvbnN0cmFpbnRzIGdlbmVyYXRlZC4KAFRoZSBjaGFyYWN0ZXIgJyVjJyBhcHBlYXJzIGluIGJvdGggdGhlIGxheWVyc2VwIGFuZCBsYXllcmxpc3RzZXAgYXR0cmlidXRlcyAtIGxheWVybGlzdHNlcCBpZ25vcmVkLgoAdGhlIGFzcGVjdCBhdHRyaWJ1dGUgaGFzIGJlZW4gZGlzYWJsZWQgZHVlIHRvIGltcGxlbWVudGF0aW9uIGZsYXdzIC0gYXR0cmlidXRlIGlnbm9yZWQuCgBUaGUgbGF5ZXJzZWxlY3QgYXR0cmlidXRlICIlcyIgZG9lcyBub3QgbWF0Y2ggYW55IGxheWVyIHNwZWNpZmVkIGJ5IHRoZSBsYXllcnMgYXR0cmlidXRlIC0gaWdub3JlZC4KACV6dSBvdXQgb2YgJXp1IGxhYmVscyBwb3NpdGlvbmVkLgoAJXp1IG91dCBvZiAlenUgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAgIGdlbmVyYXRlIGVkZ2UgY29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgTm9uLW92ZXJsYXAgQ29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgRWRnZSBDb25zdHJhaW50cy4uLgoAR2VuZXJhdGluZyBEaUctQ29MYSBFZGdlIENvbnN0cmFpbnRzLi4uCgBSZW1vdmluZyBvdmVybGFwcyBhcyBwb3N0cHJvY2Vzcy4uLgoALi4uICUuKnMlLipzIC4uLgoARWRnZSBsZW5ndGggJWYgbGFyZ2VyIHRoYW4gbWF4aW11bSAlZCBhbGxvd2VkLgpDaGVjayBmb3Igb3ZlcndpZGUgbm9kZShzKS4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQgZm9yIG5vZGUgJyVzJy4KAHBvbHlnb24geyAlenUsCgBzcGhlcmVfc3dlZXAgewogICAgJXMKICAgICV6dSwKACJkaXJlY3RlZCI6ICVzLAoAIndpZHRoIjogJS4wM2YsCgAic2l6ZSI6ICUuMDNm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ICUuMmYgJS4yZiAtaW1hZ2UgInBob3RvXyVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2UgZmlsZT0iJXMiCgBmaWxlIGxvYWRpbmcgaXMgZGlzYWJsZWQgYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgY29udGFpbnMgU0VSVkVSX05BTUU9IiVzIgoAQ291bGQgbm90IHBhcnNlIHhkb3QgIiVzIgoATm8gbG9hZGltYWdlIHBsdWdpbiBmb3IgIiVzIgoAIFslenVdICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcCAiJXMiCgBmb250bmFtZTogdW5hYmxlIHRvIHJlc29sdmUgIiVzIgoARHVwbGljYXRlIGNsdXN0ZXIgbmFtZSAiJXMiCgB1bnJlY29nbml6ZWQgYXBpIG5hbWUgIiVzIgoAaW1hZ2UgY3JlYXRlIHBob3RvICJwaG90b18lcyIgLWZpbGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgc2hhcGVmaWxlPSIlcyIgZm9yIG5vZGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2U9IiVzIiBmb3Igbm9kZSAiJXMiCgBub2RlICIlcyIgaXMgY29udGFpbmVkIGluIHR3byBub24tY29tcGFyYWJsZSBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgBFcnJvcjogbm9kZSAiJXMiIGJlbG9uZ3MgdG8gdHdvIG5vbi1uZXN0ZWQgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAICAiJXMiCgAjaW5jbHVkZSAiY29sb3JzLmluYyIKI2luY2x1ZGUgInRleHR1cmVzLmluYyIKI2luY2x1ZGUgInNoYXBlcy5pbmMiCgBVbmtub3duIEhUTUwgZWxlbWVudCA8JXM+IG9uIGxpbmUgJWx1IAoAJXMgaW4gbGluZSAlbHUgCgBzY2FsZSBieSAlZywlZyAKAGNvbXByZXNzICVnIAoATGF5b3V0IHdhcyBub3QgZG9uZS4gIE1pc3NpbmcgbGF5b3V0IHBsdWdpbnM/IAoAiVBORw0KGgoAJSUhUFMtQWRvYmUtMi4wCiUlJSVCb3VuZGluZ0JveDogKGF0ZW5kKQovcG9pbnQgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICBuZXdw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BgAAAAAAAACamZmZmZnpP98AAADgAAAABwBBzoEFCwvwP+EAAADiAAAACABB5oEFC6IC4D/jAAAA5AAAAA4AAABsbnJzb2xpZAAAc2V0bGluZXdpZHRoADEAAAAA73UAACTDAABQiwAAAAAAAAgArv/RAAoArv+u/wsArv+u/67/rv+u/67/rv+u/wUA0QCu/9EA0QDRANEA0QDRANEA0QCu//v/rv8OAOz/rv+u/67/rv/RANEA0QDRANEADQAlAAwAQgAQAFAAEwBtAHsAFACYAA8ApgDDAK7/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/xcArv93AK7/BwAuAK7/JgCu/xcAEQAjAK7/DQCu/67/rv+u/zoArv+u/zUArv+u/67/KACu/wcArv87AEUArv9IAK7/rv+u/67/rv8AQZGEBQvBBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygAAAAAAAAAAAICAgICAhAMWQEAH1AIAwcSExRXFhcIC2kMHwoFDA4pESsPLRAvMCAyBjQ1GxwdHgsMISIjJCUmJygMGBkXBAobHBogKgohIiMkJSYnKAwKDlMKLFgxWFhYWFhYDBscDy5YMyEiIyQlJicoGxz/U///ISIjJCUmJygM//8F////CRT//////wwbHP8QFRYhIiMkJSYnKBsc/////yEiIyQlJicoDP8SExQRFhf///////8MGxz///8SISIjJCUmJygbHP////8hIiMkJSYnKAz///////8T////////DBsc/////yEiIyQlJicoGxz/////ISIjJCUmJygSExQVFhcYGf///////////yMkJSYnGxITFBYXIjZoAR84ViEgAhsbG14bGzc5cDbSwk8EPCJHIj8iRCIiWCJlIiIFBl9gOQQHCAkKCwwNDgRmZ11qbQUGb1g7cQcICQoLDA0OBHI8W3M+YUYbEhMUFhcEBQY/QWJJBwgJCgsMDQ4FBgBcAAAHCAkKCwwNDgQAAE8AAABTQgAAAAAABAUGAERUVQcICQoLDA0OBQYAAAAABwgJCgsMDQ4EACosLkcxMwAAAAAAAAQFBgAAAEoHCAkKCwwNDgUGAAAAAAcICQoLDA0OBAAAAAAAAEwAAAAAAAAEBQYAAAAABwgJCgsMDQ4FBgAAAAAHCAkKCwwNDikrLS8wMjQ1AEHbigULLikrLTAyAAQvACQjABIUFhocHiAYAAUHLy8vAC8vAAAJCCgAAAEiAgYAAAAAAAgAQZaLBQs+JQMmEwopFQsqFw4tGREbDCsdDSwfDyEQADMAMAAvQwAxAC8ANS4nQjJBADo4ADw0RQA2AEAAAD8ARDc7OT0AQeGLBQtFAgMDAQECAQEBAwMDAwMDAwMBAQEBAQEBAQEBAQEBAQEBAgEBAgAGAQMDAwMDAQABAgMABAECAwAEAAQABAADAgECAQIBAEGxjAULRSkqKiorLCwtLS0tLS0tLS0tLi8wMTIzNDU2Nzg5Ojs8PT4+Pz9BQEJCQkJCQkNDRERERkVHR0dJSEpIS0hMSE1NTk5PTwBBgI0FC40Brv+u//z/6AD2////GgAAACcAAQAyAK7/rv8CACQAAwAvAK7/rv+u/67/rv/+/5QArv8JABsArv+8/67/rv+v/67/rv+u/67/rv+u/67/AAD/Aw8QESM6JD0lQBVDJkUnSBhLGU0aKBxOHR5QUVJZWmxrbmNkV2kASAAAACgAAAAYAAAAOAAAABgAAAAIAEGmjgULCfC/AAAAAAAAAQBBuI4FCw1pbnZpcwAAZmlsbGVkAEHQjgULswImGgAA91AAAJk1AAAkCwAADAAAAAQAAAAGAAAAAgAAAAMAAAABAAAACQAAAAgAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEQAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAA3KECAEGOkQULhQigQP////////////////////////////////////////////////////////////////////////////////////8AAqoCRAMABAAEqgY5BnEBqgKqAgAEgwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEOQI5AoMEgwSDBI0DXgfHBVYFVgXHBeMEcwTHBccFqgIdA8cF4wQdB8cFxwVzBMcFVgVzBOMExwXHBY0HxwXHBeMEqgI5AqoCwQMABKoCjQMABI0DAASNA6oCAAQABDkCOQIABDkCOQYABAAEAAQABKoCHQM5AgAEAATHBQAEAASNA9cDmgHXA1QE////////////////////////////////////////////////////////////////////////////////////////AAKqAnEEAAQABAAIqgY5AqoCqgIABI8EAAKqAgACOQIABAAEAAQABAAEAAQABAAEAAQABKoCqgKPBI8EjwQABHEHxwVWBccFxwVWBeMEOQY5Bh0DAAQ5BlYFjQfHBTkG4wQ5BscFcwRWBccFxwUACMcFxwVWBaoCOQKqAqYEAASqAgAEcwSNA3MEjQOqAgAEcwQ5AqoCcwQ5AqoGcwQABHMEcwSNAx0DqgJzBAAExwUABAAEjQMnA8MBJwMpBP///////////////////////////////////////////////////////////////////////////////////////wACqgJcAwAEAASqBjkGtgGqAqoCAARmBQACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAASqAqoCZgVmBWYFAARcB+ME4wRWBccF4wTjBMcFxwWqAo0DVgVzBKoGVgXHBeMExwXjBAAEcwTHBeMEqgbjBHMEcwQdAzkCHQNgAwAEqgIABAAEjQMABI0DOQIABAAEOQI5Ao0DOQLHBQAEAAQABAAEHQMdAzkCAASNA1YFjQONAx0DMwMzAjMDVAT///////////////////////////////////////////////////////////////////////////////////////8AAh0DcQQABAAEqgY5BjkCqgKqAgAEjwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEqgKqAo8EjwSPBAAEqAZWBVYFVgXHBVYFVgXHBTkGHQMABFYF4wQdB8cFxwXjBMcFVgVzBOMExwVWBR0HVgXjBOMEqgI5AqoCjwQABKoCAAQABI0DAASNA6oCAARzBDkCOQIABDkCOQZzBAAEAAQABB0DHQM5AnMEjQNWBQAEjQMdA8kCwwHJAo8E//8EogIAQZ6ZBQuFCKBA/////////////////////////////////////////////////////////////////////////////////////zkCOQLXAnMEcwQdB1YFhwGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwQ5AjkCrASsBKwEcwQfCFYFVgXHBccFVgXjBDkGxwU5AgAEVgVzBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wQ5AjkCOQLBA3MEqgJzBHMEAARzBHMEOQJzBHMExwHHAQAExwGqBnMEcwRzBHMEqgIABDkCcwQABMcFAAQABAAErAIUAqwCrAT///////////////////////////////////////////////////////////////////////////////////////85AqoCywNzBHMEHQfHBecBqgKqAh0DrAQ5AqoCOQI5AnMEcwRzBHMEcwRzBHMEcwRzBHMEqgKqAqwErASsBOMEzQfHBccFxwXHBVYF4wQ5BscFOQJzBMcF4wSqBscFOQZWBTkGxwVWBeMExwVWBY0HVgVWBeMEqgI5AqoCrARzBKoCcwTjBHME4wRzBKoC4wTjBDkCOQJzBDkCHQfjBOME4wTjBB0DcwSqAuMEcwQ5BnMEcwQABB0DPQIdA6wE////////////////////////////////////////////////////////////////////////////////////////OQI5AtcCcwRzBB0HVgWHAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBDkCOQKsBKwErARzBB8IVgVWBccFxwVWBeMEOQbHBTkCAARWBXMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBDkCOQI5AsEDcwSqAnMEcwQABHMEcwQ5AnMEcwTHAccBAATHAaoGcwRzBHMEcwSqAgAEOQJzBAAExwUABAAEAASsAhQCrAKsBP///////////////////////////////////////////////////////////////////////////////////////zkCqgLLA3MEcwQdB8cF5wGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwSqAqoCrASsBKwE4wTNB8cFxwXHBccFVgXjBDkGxwU5AnMExwXjBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wSqAjkCqgKsBHMEqgJzBOMEcwTjBHMEqgLjBOMEOQI5AnMEOQIdB+ME4wTjBOMEHQNzBKoC4wRzBDkGcwRzBAAEHQM9Ah0DrAT//ziiAgBBrqEFC4UIoED/////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP///////////////////////////////////////////////////////////////////////////////////////80EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQT////////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E////////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP//YKICAEG9qQULhghAj0AAAP///////////////////////////////wIB////////////////////////////////////////////////AgHkAIgBWAJYAqIDtQLdAD0BPQHCAVgC5ACoAeQAGwFYAlgCWAJYAlgCWAJYAlgCWAJYAuQA5ABYAlgCWAK7AbID2QKkAqEC5gJHAiQC1gL5AgEBRAFxAh8CVwPkAv8CeQL/Ap0CZwJaAtgCsQJNBIoCVAJNAjsBGwE7AVgC9AH0ARICRwLPAUcCFAJNAUoCOALoAOwA9AEoAVgDOAIsAkcCRwJmAeEBXgExAgMCSQMNAgICzwFgAQkBYAFYAv//AAD///////////////////////////////8PAf///////////////////////////////////////////////w8B+ADAAVgCWAKxA9YC8wBmAWYBxQFYAvgAsgH4ADkBWAJYAlgCWAJYAlgCWAJYAlgCWAL4APgAWAJYAlgCywG2A+gCsAKoAvoCVQIyAuACBQMaAWIBmQIyAmQD7AIRA4wCEQOuAncCbQLiAskCWQSgAmoCXQJiATkBYgFYAvQB9AEjAlgC2AFYAh4CbAFcAkkC/wADARgCPwFtA0kCQAJYAlgCiAHoAYABQwIPAlUDIgIOAtoBhwEgAYcBWAL//wAA////////////////////////////////AgH///////////////////////////////////////////////8CAeQAiAFYAlgCogO1At0APQE9AcIBWALkAKgB5AAbAVgCWAJYAlgCWAJYAlgCWAJYAlgC5ADkAFgCWAJYArsBsgPZAqQCoQLmAkcCJALWAvkCAQFEAXECHwJYA+MC/wJ5Av8CnQJnAloC2AKwAk0EigJUAk0COwEbATsBWAL0AfQBEgJHAs8BRwIUAk0BSgI4AugA7AD0ASgBWAM4AiwCRwJHAmYB4QFeATECAwJJAw0CAgLPAWABCQFgAVgC//8AAP///////////////////////////////w8B////////////////////////////////////////////////DwH4AMABWAJYArED1gLzAGYBZgHFAVgC+ACyAfgAOQFYAlgCWAJYAlgCWAJYAlgCWAJYAvgA+ABYAlgCWALLAbYD6AKwAqgC+gJVAjIC4AIFAxoBYgGYAjICZQPrAhEDjAIRA64CdwJtAuICyQJZBKACagJdAmIBOQFiAVgC9AH0ASMCWALYAVgCHgJsAVwCSQL/AAMBGAI/AW0DSQJAAlgCWAKIAegBgAFDAg8CVQMiAg4C2gGHASABhwFYAv//aKICAEHOsQULhQigQP////////////////////////////////////////////////////////////////////////////////////+LAjUDrgO0BhcFmgc9BjMCHwMfAwAEtAaLAuMCiwKyAhcFFwUXBRcFFwUXBRcFFwUXBRcFsgKyArQGtAa0Bj8EAAh5BX0FlgUpBg4FmgQzBgQGXAJcAj8FdQTnBvwFTAbTBEwGjwUUBeME2wV5BekHewXjBHsFHwOyAh8DtAYABAAE5wQUBWYEFAXsBNECFAUSBTkCOQKiBDkCywcSBeUEFAUUBUoDKwQjAxIFvASLBrwEvAQzBBcFsgIXBbQG////////////////////////////////////////////////////////////////////////////////////////yQKmAysEtAaRBQQI+gZzAqgDqAMvBLQGCgNSAwoD7AKRBZEFkQWRBZEFkQWRBZEFkQWRBTMDMwO0BrQGtAakBAAIMQYZBt8FpAZ3BXcFkQayBvoC+gIzBhkF9geyBs0G3QXNBikGwwV1BX8GMQbTCCsGywXNBagD7AKoA7QGAAQABGYFugW+BLoFbQV7A7oFsgW+Ar4CUgW+AlYIsgV/BboFugXyA8ME0wOyBTcFZAcpBTcFqASyBewCsgW0Bv///////////////////////////////////////////////////////////////////////////////////////4sCNQOuA7QGFwWaBz0GMwIfAx8DAAS0BosC4wKLArICFwUXBRcFFwUXBRcFFwUXBRcFFwWyArICtAa0BrQGPwQACHkFfQWWBSkGDgWaBDMGBAZcAlwCPwV1BOcG/AVMBtMETAaPBRQF4wTbBXkF6Qd7BeMEewUfA7ICHwO0BgAEAATnBBQFZgQUBewE0QIUBRIFOQI5AqIEOQLLBxIF5QQUBRQFSgMrBCMDEgW8BIsGvAS8BDMEFwWyAhcFtAb////////////////////////////////////////////////////////////////////////////////////////JAqYDKwSRBZEFBAj6BnMCqAOoAy8EtAYKA1IDCgPsApEFkQWRBZEFkQWRBZEFkQWRBZEFMwMzA7QGtAa0BqQEAAgxBhkG3wWkBncFdwWRBrIG+gL6AjMGGQX2B7IGzQbdBc0GKQbDBXUFfwYxBtMIKwbLBc0FqAPsAqgDtAYABAAEZgW6Bb4EugVtBXsDugWyBb4CvgJSBb4CVgiyBX8FugW6BfIDwwTTA7IFNwVkBykFNwWoBLIF7AKyBbQG//9wogIAQd65BQuFCKBAZgT///////////////////////////////8AAP///////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//2YE////////////////////////////////AAD///////////////////////////////////////////////9mBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYE//9mBP///////////////////////////////wAA////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP///////////////////////////////////////////////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//3yiAgBB7sEFC4UIoED/////////////////////////////////////////////////////////////////////////////////////aQLwApkCMgQyBM0EpgVHAfAC8ALwAjIE8ALwAvACMgQyBDIEMgQyBDIEMgQyBDIEMgQyBPAC8AIyBDIEMgTwAioGuASHBMkE6ARJBDMEaQU8BToC0AObBA0ErQUbBWQFdgRoBagE2QOlBDAFswTRBnQEkARnBPAC2ALwAjIEMgQyBDQEdQT2A3UEXQT1AgQEXwRIAu8CCQRcAqQGXwRLBHUEdQQcAz0DLANfBOsD9AUCBPIDzAPwAjIE8AIyBP///////////////////////////////////////////////////////////////////////////////////////2kC8ALvArAEsAR5BaYF1gHwAvACdQOwBPAC8ALwAh8DsASwBLAEsASwBLAEsASwBLAEsATwAvACsASwBLAEgQMqBhEFwwTlBCQFjQSrBF8FeAU6AkME8ARsBPYFVwWgBbIErAXjBBcE5QRsBfkEEgfOBOgEewQ3A9gCNwOwBLAEsARDBKcEGASlBJkE9QIEBL4EYwLvAmIEXALgBrkEhwSpBKwEawNyAywDugQ4BEUGawRFBDoEeAOwBHgDsAT///////////////////////////////////////////////////////////////////////////////////////9pAvACmQIyBNkDzQSmBUcB8ALwAvACMgTwAvAC8AIyBDIEMgQyBDIEMgQyBDIEMgQyBDIE8ALwAjIEMgQyBPACKgbjBIcEyQToBEkEMwRpBTwFOgLQA5sEDQQXBhsFZAVZBGQFqATZA6UEMAWzBNEGdASQBGcE8ALYAvACMgQyBDIENAR1BK4DdQRMBDYDBAR1BHQC7wIJBJACpAZfBEsEdQR1BFUDPQNcA3QE6wP0BQIE8gPMA/ACMgTwAjIE////////////////////////////////////////////////////////////////////////////////////////aQLwAiADsASwBNwFpgVpAvAC8AJ1A7AE8ALwAvACLQOwBLAEsASwBLAEsASwBLAEsASwBPAC8AKwBLAEsAQtAyoG6QS4BOcEDwW/BK8EaQVtBToC/QMzBToESgZIBZ4FqwQoBv0EAwR7BUsFdwVpB0EFeAXkBOID0gPiA7AEsASwBL4EvwTxA78EagRIA0gEfwSdAhoDUQSPAqQGfwSPBMoEygSTA6wDgQN1BGsEMAabBIMEQwTiA7AE4gOwBP//iKICAEH+yQULhQigQP/////////////////////////////////////////////////////////////////////////////////////QAiYDrAOMBhYFnAjQBSYCogOiAxYFjAbpAqID6QKiAxYFFgUWBRYFFgUWBRYFFgUWBRYFogOiA4wGjAaMBl0EAAh4BXwFlgUqBg8FmQQ0BgMGXgOjA4sFdAS+BvwFTAbTBEwGkAV4Be4E2wV4BekHewXsBHsFogOiA6IDjAYWBRYFzgT8BCsE/ATEBNAC/AQQBTICwQK8BDICyAcQBdsE/AT8BGoDKwQnAxAFvASMBrwEvAQ0BBQFogMUBYwG////////////////////////////////////////////////////////////////////////////////////////vAI4A7ME8AawBS0K5gaoAlkEWQSwBfAG5ALXA+QChAWwBbAFsAWwBbAFsAWwBbAFsAWwBTgDOAPwBvAG8AbvBLYHNgYYBsoFpAZ3BTQFfQazBl4EcQQrBhkFlQfGBs0G3QXNBkIGrwV0BX8GHAYHCRwG5QWJBVkEhAVZBPAGsAWwBVgFmAW1BJgFUAVhA5gFswW8AjkDXgW8AncIswV+BZgFmAX6A78EpQOzBTMF1gdaBTUFxgSwBVkEsAXwBv///////////////////////////////////////////////////////////////////////////////////////9ACJgOsA4wGFgWcCNAFJgKiA6IDFgWMBukCogPpAqIDFgUWBRYFFgUWBRYFFgUWBRYFFgWiA6IDjAaMBowGXQQACHYFfAWWBSAGDwWZBDQGAwZeA6MDiwV0BL4G/AVMBtMETAaQBXgF7gTbBXYF7Ad7BewEewWiA6IDogOMBhYFFgXOBPwEKwT8BMQE0AL5BBAFMgLBArIEMgLJBxAF2wT8BPwEagMrBCcDEAW6BIwGvAS6BDQEFAWiAxQFjAb///////////////////////////////////////////////////////////////////////////////////////+8AjgDswTwBrAFLQrmBqgCWQRZBLAF8AbkAtcD5AKEBbAFsAWwBbAFsAWwBbAFsAWwBbAFOAM4A/AG8AbwBu8Etgc2BhgGygWkBncFNAV9BrMGXgRxBCsGGQWVB8YGzQbdBc0GQgavBXQFfwYcBgcJHAblBYkFWQSEBVkE8AawBbAFWAWYBbUEmAVQBWEDmAWzBbwCOQNeBbwCdwizBXwFmAWYBfoDvwSlA7MFMQXWB1oFNQXGBLAFWQSwBfAG//+QogIAQY7SBQuFCKBA/////////////////////////////////////////////////////////////////////////////////////xQCIwI1AysFkwSWBtcFxQFeAl4CagSTBPYBkwIhAvACkwSTBJMEkwSTBJMEkwSTBJMEkwQhAiECkwSTBJMEbwMxBxAFLwUMBdUFcwQhBNMF5wU7AiMC6QQnBDkHCAY7BtEEOwbyBGQEbQTTBcMEaAeeBHsEkQSiAvACogJWBJYDngRzBOcEzwPnBH0EtgJiBOkEBgIGAjMEBgJxB+kE1QTnBOcERAPRA9MC6QQCBDkGMQQIBL4DCANoBAgDkwT///////////////////////////////////////////////////////////////////////////////////////8UAkoCxwMrBZEENQcABiECtgK2AlwEkQRSApMCSAJOA5EEkQSRBJEEkQSRBJEEkQSRBJEESAJSApEEkQSRBNEDLQeFBWAFGQXsBXsEZATLBR8GpgKmAlAFhQSLB4EGXgYGBV4GSAVoBKIEDAYzBbwHVgX+BKIEpgJOA6YCQgRKA9sE1QQQBR0EEAW6BBkDhQRCBXECcQL2BHEC2wdCBfQEEAUQBaID+gN5A0IFjQTZBqAEjQTnAycDaAQnA5EE////////////////////////////////////////////////////////////////////////////////////////FAISAhcDKwVoBFgGXAW8AUgCSAJqBGgE7AF/AgYCzQJoBGgEaARoBGgEaARoBGgEaARoBAYCBgJoBGgEaARqA8cGcQTJBK4EVAUXBMcDagVtBS8CIwJ1BMsDsgaeBcMFhwTDBY0EBAT8A2gFYgTRBicEBgQ/BEoCzQJKAiMEJwNvBIUEngSaA54E8gOBAgIEngQIAggC5wMIAvoGngR9BJ4EngQrA20DmAKeBLIDvAXTA7IDjQPLAmgEywJoBP///////////////////////////////////////////////////////////////////////////////////////xQCSgKgAysFaATZBqoFCgK2ArYCXARoBDkCkwJIAl4DaARoBGgEaARoBGgEaARoBGgEaARIAkgCaARoBGgErAPZBgYF9gTlBGoFVgQ/BIUFmgWTAqYC5wQlBAoHCgbXBaQE1wXfBD0EPwSHBbgEJwfZBIMESgSmAl4DpgI5BDMDbwTBBMME3QPBBHUE/AJUBNUEYAJgAosEYAI9B9UErgTDBMEEXgPJA0gD1QQZBE4GPwQnBKQD1wJoBNcCaAT//5iiAgBBntoFC4UIoED/////////////////////////////////////////////////////////////////////////////////////7gGmAksDJQXhBIoGrwW5AQADAAPHAyUFKAL+AigCwAPpBHADeARqBIUEOgSHBAUExQSHBIACgAIlBSUFJQXUA24HXgU7BSMF/gU6BcsEzQWFBh4DJASOBdQEawcjBvQF4QT0BZ0FfQTzBA0GVQXOB68F7ATQBAADwAMAAyUFJQUABAgEewSiA5gE3gOaAhMEqARYAlYCSQRKAgwHugRQBJIEegRHA3UDwwKaBPkD5gUKBPADjQNxAwADcQMlBf///////////////////////////////////////////////////////////////////////////////////////wgCAwMUBKAFIAUJB2UGJwKTA5MD2wOgBaACCAOgAsYDnAXrAwMF/wQyBcsELwVvBGkFLwXwAvACoAWgBaAFYwS8BxEGDwa5BawGxQVfBXUGTgeRA8MEiQZ8BTAItwaPBpwFjwZhBjEFeQWrBhkGAwl4BtsFhAWTA8YDkwOgBaAFAATEBCoFQAROBZMEJQOdBHAF1ALFAg4FwQIgCIUFFgVDBTAFKQQaBC4DagWJBOgGtAR/BDQEAAQaAwAEoAX////////////////////////////////////////////////////////////////////////////////////////uAaYCSwMlBeEEigavBbkBAAMAA8cDJQUoAv4CKALAA+kEcAN4BGoEhQQ6BIcE+QPFBIcEEgMSAyUFJQUlBdQDbgdeBTsFIwX+BToFywTNBYUGHgMkBI4F1ARrByMG2AXhBNgFnQV9BPMEDQZVBc4HrwXsBNAEAAPAAwADJQUlBQAElQRuBKEDmgTGA6EClQSABGECVAI5BEgCCQe4BEwEoARxBLEDcwPHApoETgSUBgIEegSNA3EDAANxAyUF////////////////////////////////////////////////////////////////////////////////////////CAIDAxQEoAUgBQkHZQYnApMDkwPbA6AFoAIIA6ACxgOcBesDAwX/BDIFywQvBYgEaQUvBfAC8AKgBaAFoAVjBLwHEQYTBrkFrAbFBV8FdQZOB5sDwwSJBnwFRAijBo8GpgWPBmEGOQV5BasGGQYDCWsG2wWEBZMDxgOTA6AFoAUABEgFMQVJBE0FdQQMAzIFZwXtAusCIQXWAgQIhQUWBU0FMwVFBCMEVgN7BeYEeAerBFsFIwQABBoDAASgBf//oKICAEGu4gULhBigQP/////////////////////////////////////////////////////////////////////////////////////PAZsCNQP8Aw4EuAV1BcQBbQJtAvwD/AP/AXMCBQIXAw4EDgQOBA4EDgQOBA4EDgQOBA4EJAIkAvwD/AP8A7UDJwehBFoERATsBOgDrQMMBfwEBAKNAigEXQPXBioFTAUiBGIFWAStA+YDIgWKBB4HJwTmA78DdAIXA3QC/AP8A1QC1QM0BGIDNAT7A3ECxAM0BNYB6gGjA9YBZAY0BDgENAQ0BMoCIQOuAjQEnQO4BXcDnwMpA4QCrwOEAvwD//8AAP///////////////////////////////wAA////////////////////////////////////////////////zwGbAoID/AMOBNUFowXeAX4CfgL8A/wDEAJzAiMCcAMOBA4EDgQOBA4EDgQOBA4EDgQOBDUCNQL8A/wD/AO1AzAH2QR8BDwECwXnA6wDGQUMBSICpgJgBGID/gZFBWkFQgR9BYEEyAP2AzkFuwRAB2gEKATTA5kCcAOZAvwD/ANnAvMDSwRZA0sEBwSIAssDSwT3AQsC1wP3AYIGSwRNBEsESwTYAjEDxgJLBMkD9gWtA8oDLgPAAs0DwAL8A////////////////////////////////////////////////////////////////////////////////////////88BmwI1A/wDDgS4BXUFxAFtAm0C/AP8A/8BcwIFAhoDDgQOBA4EDgQOBA4EDgQOBA4EDgQkAiQC/AP8A/wDtQMnB6EEWgQuBOwE6AOtAwwF/AQEAo0CKARdA9cGKAU8BSIEUAVYBJ4D5gMiBYoEHwcnBOYDvwN0AhMDdAL8A/wDVAIdBB0EVAMdBNIDcQIdBB0E1gHqAaMD1gFUBh0EGwQdBB0EvgIdA64CHQSRA7gFdwOUAykDhAKvA4QC/AP////////////////////////////////////////////////////////////////////////////////////////PAZsCggP8Aw4E1QWjBd4BfgJ+AvwD/AMQAnMCIwJ5Aw4EDgQOBA4EDgQOBA4EDgQOBA4ENQI1AvwD/AP8A7UDMAfZBHwEJgQLBecDrAMZBQwFIgKmAmAEYgP+BkAFWQVCBGsFgQS5A/YDOQW7BEEHaAQoBNMDmQJmA5kC/AP8A2cCOQQ5BEsDOQTuA4gCOQQ4BPcBCwLXA/cBbgY4BDgEOQQ5BNECJwPGAjgEwQP2Ba0DwwMuA8ACzQPAAvwD//8vQQAAxgAAAAtIAADBAAAAhFkAAMIAAABYRQAAwAAAAKZgAACRAwAAD0AAAMUAAAD4TwAAwwAAAKE2AADEAAAA/18AAJIDAAAnNwAAxwAAACI7AACnAwAAiBwAACEgAADeXwAAlAMAAIJpAADQAAAABEgAAMkAAAB+WQAAygAAAFFFAADIAAAA2DAA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AMUDAABvNgAA/AAAAEcsAAAYIQAAozoAAL4DAAC+RwAA/QAAAIoyAAClAAAAajYAAP8AAADkXwAAtgMAAIk6AAANIAAAjToAAAwgAAAYawAAgmYAAKZlAACZZgAAl2UAAFMBAABUAQAAVQEAAFUBAEHA+gUL0QUR7u4TCAPu/u7u7gHu7u4B7u4J/u4SFRfuEgHu7u7uCg3u7u7u7u7u7u4B7u4WCAEBGQ4Y7u4bGBru7h3u7u7uARX77u7u7hAe7u7uAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWEQICAgICAgICAgICAgISEAITAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIUAhUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4CDwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNAAAACwMEBQ8HAwwNBgwNDgwNGhUAAQADBw4GDwgMDRITCSoQERAWLzANMhETLjIUEhQSQRMsE0JAKkIZ//8sAAAAACIMDQ4jDwkQEQoQEcwQES1F/AEG9g8H9iQCEBEvMCg2SUomMTs8PTYqOTo+Py/YQEQwNyVHQzVIKwAAOAAAAAAAAwkAAAABDgILDAgjJCUzODoADRASGxYcEicvIhcwHjkGBzIFDxEUGCkAEykAAAAAADQVKB0eACEmMR8uOxksABsAIBoqKzcANTYtAAAAAAACAgEAAwMBAAEAAQEBAAIBAQACAgMBAQAABQABAwEDBQMBAQEBAgABAAQCAAIDAQADAgEAAQEAAQEBAwAAAAAAFxgYGBkaGxscHB0dHh4fHyAgISEiIyMlJiQkJycoKCgpKSoqKisrLCwtLi4vMDEzMjQ0NDU1NTY2NzcAAAAA7u787u7u7u7uHyDu+e/u7u4M7u7uBg/u7vLu7u7u7vXuAEGggAYLJP8DCAQhBQsSEycUFRYpMkEXGBkaLDM0QkYbHB0uHksfIGtleQBB0YAGC7YDAQEBAQEBAQECAwEBAgEBAQEBAQEBAQEBAQEBAQEBAQIBBAUBAQEBAQEGAQEHCAkKCgoKCgoKCgoKAQELAQwBDQ4PEBESExQVFhMTExMXGBkTGhscHRMTExMTAR4BARMBHyAhIiMTJCUmExMTEycoKRMqKywtExMTExMBAQEBARMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTLhMTEy8TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEzATExMTExMTExMTExMTExMTAAAAAAAABAAEABwAHAAhACEAJAAiAAoAAgAWAAkAIgAiACIAFQAdAAEAFAAUABQAFAAUABQAFAAIAAQABQAcABsAFwAcACEAIAAfAB4ACQATAAAAFQASABUAAwAHABUAFQAUABQAFAAUABQAFAAUABQACAAEAAUABQAGABwAGgAYABkAIQAHABUAFAAUABQAFAAUABQACwAUAA0AFAAMABQAFAAUAA4AFAAUABQAEAAUAA8AFAARAEGShAYLlQQBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAQABwADAAQABQAFAAYABgAIAAcABwARABYAEgARABIACAAIAA8ADwAXAA8AGAAPABkAGgAaAB4AFgA0AB4ABQAyAAYAIgAiADMAFwAYADUAGQAaABoAKgA2ACoANAA3ADIARQA7ADwAMwA7ADwARgA1AEcASABMADYAIgBJAEoANwBFAE4AUABiAFEAUgBUAEYARwBVAEgATABWAEkASgBYAFoATgBEAFAAUQBSAFQAOAAvACwAVQApAFYAGwAQAFgAWgBdAF0AXQBdAF0AXQBdAF4AXgBeAF4AXgBeAF4AXwBfAF8AXwBfAF8AXwBgAAkAYABgAGAAYABgAGEAYQBjAAIAYwBjAGMAYwBjAGQAAABkAAAAZABkAGQAZQAAAGUAZQBlAGUAZQBmAAAAAABmAGYAZgBmAGcAAABnAGcAZwBnAGgAAABoAGgAaABoAGgAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABBtIgGC80BrgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAA2wDbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wBBkooGC88BXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBcAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAEHxiwYLMAEBAgMBBAEFAQYHBwEGBgYGBgYGBgYGBgYGBgYGAwYGBgYGBgYGBgYGBgYGBgYGBgBBsowGC5UECgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBc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HBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAEHwngYLef//////////////////////////////////////////AAAAAAAAAAT+//+H/v//BwAAAAAAAAAA//9/////f//////////zf/79//////9///////////8P4P////8x/P///wAAAAAAAAD//////////////wEA+AMAQYCgBgtBQNf///v/////f39U/f8PAP7f///////////+3/////8DAP///////58Z////zz8DAAAAAAAA/v///38C/v///38AQcqgBguzAf///wcHAAAAAAD+//8H/gcAAAAA/v//////////fP9/LwBgAAAA4P///////yMAAAD/AwAAAOCf+f///cUDAAAAsAMAAwDgh/n///1tAwAAAF4AABwA4K/7///97SMAAAAAAQAAAOCf+f///c0jAAAAsAMAAADgxz3WGMe/AwAAAAAAAAAA4N/9///97wMAAAAAAwAAAODf/f///e8DAAAAQAMAAADg3/3///3/AwAAAAADAEGQogYLGf7/////fw0APwAAAAAAAACWJfD+rmwNIB8AQbiiBgsG//7///8DAEHkogYLcv////8/AP////9/AO3aBwAAAABQAVAxgqtiLAAAAABAAMmA9QcAAAAACAEC/////////////////////////w///////////////wP//z8//////z8//6r///8/////////31/cH88P/x/cHwAAAABATABB4KMGCwEHAEHwowYLJoAAAAD+AwAA/v///////////x8A/v////////////8H4P////8fAEGwpAYLFf//////////////////////////PwBB0KQGCxX//////////////////////////w8AQfWkBgvJAmD/B/7//4f+//8HAAAAAAAAgAD//3////9//////wAAAAAAAAD//////////////wEA+AMAAwAAAAAA//////////8/AAAAAwAAAMDX///7/////39/VP3/DwD+3////////////t//////ewD///////+fGf///88/AwAAAAAAAP7///9/Av7///9/AP7/+///uxYA////BwcAAAAAAP7//wf//wcA/wP///////////98/3/v//89/wPu////////8/8/Hv/P/wAA7p/5///9xdOfOYCwz/8DAOSH+f///W3ThzkAXsD/HwDur/v///3t8787AADB/wAA7p/5///9zfOPOcCww/8AAOzHPdYYx7/Dxz2AAID/AADu3/3///3vw989YADD/wAA7N/9///978PfPWBAw/8AAOzf/f///f/Dzz2AAMP/AEHQpwYLOP7/////f/8H/3//AwAAAACWJfD+rmz/O18//wMAAAAAAAAAA/8DoML//v///wP+/98Pv/7/P/4CAEGqqAYLa/8fAgAAAKAAAAD+/z4A/v///////////x9m/v////////////93kAEAAJEBAACSAQAAkwEAAJQBAACVAQAAlgEAAJcBAACYAQAAmQEAAJoBAACbAQAAnAEAAJ0BAACgAQAAoQEAAAEAAAABAEGhqQYLBRUKAAAVAEG4qQYL1QEVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUGBgYGBgYGBgYGBgYGBgYGBwcHBwcAQZarBgtrAQGiAQAAowEAAKQBAAClAQAApgEAAKQBAACnAQAAqAEAAKkBAACQAQAAkQEAAJIBAACTAQAAlAEAAJUBAACWAQAAlwEAAJgBAACZAQAAmgEAAJsBAACcAQAAnQEAAKABAAChAQAAAQAAAAEAQY2sBgsFFQoAABUAQaSsBgvVARUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI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TExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAEHQ+gYLB0MuVVRGLTgAQej6BgugEBilAgCwpQIAQKYCAE5vIGVycm9yIGluZm9ybWF0aW9uAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZABSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZQBLZXkgaGFzIGV4cGlyZWQAS2V5IGhhcyBiZWVuIHJldm9rZWQAS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlAAAAAAClAlsA8AG1BYwFJQGDBh0DlAT/AMcDMQMLBrwBjwF/A8oEKwDaBq8AQgNOA9wBDgQVAKEGDQGUAgsCOAZkArwC/wJdA+cECwfPAssF7wXbBeECHgZFAoUAggJsA28E8QDzAxgF2QDaA0wGVAJ7AZ0DvQQAAFEAFQK7ALMDbQD/AYUELwX5BDgAZQFGAZ8AtwaoAXMCUwEAQbiLBwsMIQQAAAAAAAAAAC8CAEHYiwcLBjUERwRWBABB7osHCwKgBABBgowHCyJGBWAFbgVhBgAAzwEAAAAAAAAAAMkG6Qb5Bh4HOQdJB14HAEGwjAcLkQHRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAABkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRjQcLIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi44HCwEMAEGXjgcLFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxY4HCwEQAEHRjgcLFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/44HCwESAEGLjwcLHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwo8HCw4aAAAAGhoaAAAAAAAACQBB848HCwEUAEH/jwcLFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrZAHCwEWAEG5kAcLJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBBhJEHCwIGAgBBrJEHCwj//////////wBB8JEHC/cI/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAA6MsBAAgCAAAJAgAACgIAAAsCAAAMAgAADQIAAA4CAAAPAgAAEAIAABECAAASAgAAEwIAABQCAAAVAgAABAAAAAAAAAAgzAEAFgIAABcCAAD8/////P///yDMAQAYAgAAGQIAABjLAQAsywEAAAAAAHzMAQAaAgAAGwIAAAoCAAALAgAAHAIAAB0CAAAOAgAADwIAABACAAAeAgAAEgIAAB8CAAAUAgAAIAIAAE5TdDNfXzI5YmFzaWNfaW9zSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAWPgBAHzLAQBgzQEATlN0M19fMjE1YmFzaWNfc3RyZWFtYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAADD4AQC0ywEATlN0M19fMjEzYmFzaWNfb3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAtPgBAPDLAQAAAAAAAQAAAKjLAQAD9P//TlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAABY+AEAOMwBAOjLAQA4AAAAAAAAADDNAQAh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\";function M(){const A=atob(G),I=new Uint8Array(A.length);for(let g=0;gnew o(A)))}export{y as engines,F as formats,R as graphvizVersion,s as instance};\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending(value, maxValue) > 0\n : ascending(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export default x => () => x;\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","function responseBlob(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.blob();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n","function responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.arrayBuffer();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n","export {default as blob} from \"./blob.js\";\nexport {default as buffer} from \"./buffer.js\";\nexport {default as dsv, csv, tsv} from \"./dsv.js\";\nexport {default as image} from \"./image.js\";\nexport {default as json} from \"./json.js\";\nexport {default as text} from \"./text.js\";\nexport {default as xml, html, svg} from \"./xml.js\";\n","function responseJson(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseJson);\n}\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import text from \"./text.js\";\n\nfunction parser(type) {\n return (input, init) => text(input, init)\n .then(text => (new DOMParser).parseFromString(text, type));\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export {default as cluster} from \"./cluster.js\";\nexport {default as hierarchy, Node} from \"./hierarchy/index.js\";\nexport {default as pack} from \"./pack/index.js\";\nexport {default as packSiblings} from \"./pack/siblings.js\";\nexport {default as packEnclose} from \"./pack/enclose.js\";\nexport {default as partition} from \"./partition.js\";\nexport {default as stratify} from \"./stratify.js\";\nexport {default as tree} from \"./tree.js\";\nexport {default as treemap} from \"./treemap/index.js\";\nexport {default as treemapBinary} from \"./treemap/binary.js\";\nexport {default as treemapDice} from \"./treemap/dice.js\";\nexport {default as treemapSlice} from \"./treemap/slice.js\";\nexport {default as treemapSliceDice} from \"./treemap/sliceDice.js\";\nexport {default as treemapSquarify} from \"./treemap/squarify.js\";\nexport {default as treemapResquarify} from \"./treemap/resquarify.js\";\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packSiblingsRandom(circles, lcg());\n return circles;\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","export default x => () => x;\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","export {default as schemeCategory10} from \"./categorical/category10.js\";\nexport {default as schemeAccent} from \"./categorical/Accent.js\";\nexport {default as schemeDark2} from \"./categorical/Dark2.js\";\nexport {default as schemeObservable10} from \"./categorical/observable10.js\";\nexport {default as schemePaired} from \"./categorical/Paired.js\";\nexport {default as schemePastel1} from \"./categorical/Pastel1.js\";\nexport {default as schemePastel2} from \"./categorical/Pastel2.js\";\nexport {default as schemeSet1} from \"./categorical/Set1.js\";\nexport {default as schemeSet2} from \"./categorical/Set2.js\";\nexport {default as schemeSet3} from \"./categorical/Set3.js\";\nexport {default as schemeTableau10} from \"./categorical/Tableau10.js\";\nexport {default as interpolateBrBG, scheme as schemeBrBG} from \"./diverging/BrBG.js\";\nexport {default as interpolatePRGn, scheme as schemePRGn} from \"./diverging/PRGn.js\";\nexport {default as interpolatePiYG, scheme as schemePiYG} from \"./diverging/PiYG.js\";\nexport {default as interpolatePuOr, scheme as schemePuOr} from \"./diverging/PuOr.js\";\nexport {default as interpolateRdBu, scheme as schemeRdBu} from \"./diverging/RdBu.js\";\nexport {default as interpolateRdGy, scheme as schemeRdGy} from \"./diverging/RdGy.js\";\nexport {default as interpolateRdYlBu, scheme as schemeRdYlBu} from \"./diverging/RdYlBu.js\";\nexport {default as interpolateRdYlGn, scheme as schemeRdYlGn} from \"./diverging/RdYlGn.js\";\nexport {default as interpolateSpectral, scheme as schemeSpectral} from \"./diverging/Spectral.js\";\nexport {default as interpolateBuGn, scheme as schemeBuGn} from \"./sequential-multi/BuGn.js\";\nexport {default as interpolateBuPu, scheme as schemeBuPu} from \"./sequential-multi/BuPu.js\";\nexport {default as interpolateGnBu, scheme as schemeGnBu} from \"./sequential-multi/GnBu.js\";\nexport {default as interpolateOrRd, scheme as schemeOrRd} from \"./sequential-multi/OrRd.js\";\nexport {default as interpolatePuBuGn, scheme as schemePuBuGn} from \"./sequential-multi/PuBuGn.js\";\nexport {default as interpolatePuBu, scheme as schemePuBu} from \"./sequential-multi/PuBu.js\";\nexport {default as interpolatePuRd, scheme as schemePuRd} from \"./sequential-multi/PuRd.js\";\nexport {default as interpolateRdPu, scheme as schemeRdPu} from \"./sequential-multi/RdPu.js\";\nexport {default as interpolateYlGnBu, scheme as schemeYlGnBu} from \"./sequential-multi/YlGnBu.js\";\nexport {default as interpolateYlGn, scheme as schemeYlGn} from \"./sequential-multi/YlGn.js\";\nexport {default as interpolateYlOrBr, scheme as schemeYlOrBr} from \"./sequential-multi/YlOrBr.js\";\nexport {default as interpolateYlOrRd, scheme as schemeYlOrRd} from \"./sequential-multi/YlOrRd.js\";\nexport {default as interpolateBlues, scheme as schemeBlues} from \"./sequential-single/Blues.js\";\nexport {default as interpolateGreens, scheme as schemeGreens} from \"./sequential-single/Greens.js\";\nexport {default as interpolateGreys, scheme as schemeGreys} from \"./sequential-single/Greys.js\";\nexport {default as interpolatePurples, scheme as schemePurples} from \"./sequential-single/Purples.js\";\nexport {default as interpolateReds, scheme as schemeReds} from \"./sequential-single/Reds.js\";\nexport {default as interpolateOranges, scheme as schemeOranges} from \"./sequential-single/Oranges.js\";\nexport {default as interpolateCividis} from \"./sequential-multi/cividis.js\";\nexport {default as interpolateCubehelixDefault} from \"./sequential-multi/cubehelix.js\";\nexport {default as interpolateRainbow, warm as interpolateWarm, cool as interpolateCool} from \"./sequential-multi/rainbow.js\";\nexport {default as interpolateSinebow} from \"./sequential-multi/sinebow.js\";\nexport {default as interpolateTurbo} from \"./sequential-multi/turbo.js\";\nexport {default as interpolateViridis, magma as interpolateMagma, inferno as interpolateInferno, plasma as interpolatePlasma} from \"./sequential-multi/viridis.js\";\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export {\n default as scaleBand,\n point as scalePoint\n} from \"./band.js\";\n\nexport {\n default as scaleIdentity\n} from \"./identity.js\";\n\nexport {\n default as scaleLinear\n} from \"./linear.js\";\n\nexport {\n default as scaleLog\n} from \"./log.js\";\n\nexport {\n default as scaleSymlog\n} from \"./symlog.js\";\n\nexport {\n default as scaleOrdinal,\n implicit as scaleImplicit\n} from \"./ordinal.js\";\n\nexport {\n default as scalePow,\n sqrt as scaleSqrt\n} from \"./pow.js\";\n\nexport {\n default as scaleRadial\n} from \"./radial.js\";\n\nexport {\n default as scaleQuantile\n} from \"./quantile.js\";\n\nexport {\n default as scaleQuantize\n} from \"./quantize.js\";\n\nexport {\n default as scaleThreshold\n} from \"./threshold.js\";\n\nexport {\n default as scaleTime\n} from \"./time.js\";\n\nexport {\n default as scaleUtc\n} from \"./utcTime.js\";\n\nexport {\n default as scaleSequential,\n sequentialLog as scaleSequentialLog,\n sequentialPow as scaleSequentialPow,\n sequentialSqrt as scaleSequentialSqrt,\n sequentialSymlog as scaleSequentialSymlog\n} from \"./sequential.js\";\n\nexport {\n default as scaleSequentialQuantile\n} from \"./sequentialQuantile.js\";\n\nexport {\n default as scaleDiverging,\n divergingLog as scaleDivergingLog,\n divergingPow as scaleDivergingPow,\n divergingSqrt as scaleDivergingSqrt,\n divergingSymlog as scaleDivergingSymlog\n} from \"./diverging.js\";\n\nexport {\n default as tickFormat\n} from \"./tickFormat.js\";\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","export default function number(x) {\n return +x;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n var squared = continuous(),\n range = [0, 1],\n round = false,\n unknown;\n\n function scale(x) {\n var y = unsquare(squared(x));\n return isNaN(y) ? unknown : round ? Math.round(y) : y;\n }\n\n scale.invert = function(y) {\n return squared.invert(square(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (squared.domain(_), scale) : squared.domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return scale.range(_).round(true);\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, scale) : round;\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return radial(squared.domain(), range)\n .round(round)\n .clamp(squared.clamp())\n .unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n var domain = [],\n interpolator = identity;\n\n function scale(x) {\n if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.range = function() {\n return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n };\n\n scale.quantiles = function(n) {\n return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import creator from \"./creator.js\";\nimport select from \"./select.js\";\n\nexport default function(name) {\n return select(creator(name).call(document.documentElement));\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","export {default as create} from \"./create.js\";\nexport {default as creator} from \"./creator.js\";\nexport {default as local} from \"./local.js\";\nexport {default as matcher} from \"./matcher.js\";\nexport {default as namespace} from \"./namespace.js\";\nexport {default as namespaces} from \"./namespaces.js\";\nexport {default as pointer} from \"./pointer.js\";\nexport {default as pointers} from \"./pointers.js\";\nexport {default as select} from \"./select.js\";\nexport {default as selectAll} from \"./selectAll.js\";\nexport {default as selection} from \"./selection/index.js\";\nexport {default as selector} from \"./selector.js\";\nexport {default as selectorAll} from \"./selectorAll.js\";\nexport {styleValue as style} from \"./selection/style.js\";\nexport {default as window} from \"./window.js\";\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","import pointer from \"./pointer.js\";\nimport sourceEvent from \"./sourceEvent.js\";\n\nexport default function(events, node) {\n if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n events = sourceEvent(events);\n if (node === undefined) node = events.currentTarget;\n events = events.touches || [events];\n }\n return Array.from(events, event => pointer(event, node));\n}\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([array(selector)], root);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","export default function() {\n return !this.node();\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n return Array.from(this);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Transition} from \"./transition/index.js\";\nimport {SCHEDULED} from \"./transition/schedule.js\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import \"./selection/index.js\";\nexport {default as transition} from \"./transition/index.js\";\nexport {default as active} from \"./active.js\";\nexport {default as interrupt} from \"./interrupt.js\";\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export {default as zoom} from \"./zoom.js\";\nexport {default as zoomTransform, identity as zoomIdentity, Transform as ZoomTransform} from \"./transform.js\";\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"main\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// no jsonp function","__webpack_require__.nc = undefined;","import '../style/index.css';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {NowVisPanel} from './nowpanel';\nimport {ConfigWidget} from './config_widget';\nimport {ProjectWidget} from './project_widget';\nimport {GroupWidget} from './group_widget';\nimport {HistoryWidget} from './graph/history_graph';\nimport { AnnontationWidget } from './annotation_widget';\nimport {DatabaseWidget} from './database_widget';\n//import { json } from '@noworkflow/utils';\n\n\nfunction main(): void {\n // ToDo: parse URL to open specific graphs\n var experimentsIn = (document.getElementById(\"experimentsIn\")).value;\n var selectedExp = (document.getElementById(\"selectedExperiment\")).value;\n var server = (document.getElementById(\"server\")).value;\n var experiments=[];\n\n if(experimentsIn)\n experiments=JSON.parse(experimentsIn);\n\n var mainpanel = new NowVisPanel();\n mainpanel.id = 'main';\n if(server==\"True\"){\n var projectWidget = new ProjectWidget(experiments);\n var groupWidget = new GroupWidget();\n var databaseWidget = new DatabaseWidget(mainpanel);\n\n mainpanel.addMainWidget(projectWidget);\n mainpanel.addMainWidget(groupWidget);\n mainpanel.addMainWidget(databaseWidget);\n }\n else{\n var config = new ConfigWidget();\n var annotationn = new AnnontationWidget(selectedExp);\n var history = new HistoryWidget(config, \"History\", \"History\", selectedExp,annotationn);\n var databaseWidget = new DatabaseWidget(mainpanel);\n\n mainpanel.addMainWidget(history);\n mainpanel.addMainWidget(config);\n mainpanel.addMainWidget(annotationn);\n mainpanel.addMainWidget(databaseWidget);\n history.load();\n } \n \n Widget.attach(mainpanel, document.body);\n window.onresize = () => { mainpanel.update() };\n}\n\nwindow.onload = main;"],"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","_classCallCheck","_defineProperties","_toPropertyKey","key","_createClass","_toPrimitive","toPrimitive","String","Number","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","_assertThisInitialized","ReferenceError","Boolean","valueOf","bind","_inherits","_setPrototypeOf","Widget","select","d3_select","AnnontationWidget","_Widget","expId","_this","node","createNode","d3node","addClass","title","label","closable","caption","setNode","setAnnotationLevelToExperiment","onBeforeHide","msg","trialId","fetchUrl","annotationLevel","anntTitle","text","setAnnotations","setAnnotationLevelToTrial","activeAnnotation","parentDock","parent","activateWidget","_fillAnnotations","_callee","_thiss","response","obj","_callee$","_context","annotations","Array","fetch","headers","status","json","item","annt","id","provenanceType","annotationFormat","description","relatedTrial","relatedExperiment","showNode","errorFeedback","fillAnnotations","addAnntRow","tBody","append","attr","actions","addMemberButton","classed","on","window","open","_setAnnotations","_callee2","header","_callee2$","_context2","table","html","addFormInput","form","fieldId","fieldLabel","fieldType","grp","divIn","inp","addFeedBackinfo","baseNode","cls","txt","desc","feedbackNode","hideNode","getValueFromSelect","defaultVale","option","options","selectedIndex","createAddGroupForm","projectsDiv","inputsDiv","descIn","annotationIn","annotationFormatIn","provenanceTypeIn","confimButton","addAnntButton","successFeedback","newAnnotation","annotation","property","body","JSON","stringify","content","document","createElement","BaseActivationGraphWidget","ConfigWidget","showTrial","showInfo","graphType","useCache","historydiv","showGraph","trialdiv","graphTypeForm","useCacheForm","_defineProperty","_createForOfIteratorHelper","isArray","_unsupportedIterableToArray","_n","F","_arrayLikeToArray","toString","from","test","forceSimulation","forceLink","forceManyBody","forceCenter","forceCollide","scaleOrdinal","schemeTableau10","drag","QueryWidget","QueryResultWidget","DatabaseTabWidget","TableInfoWidget","_DatabaseTabWidget","tableName","details","concat","style","display","flexDirection","height","overflow","contentContainer","error","columnsTable","columnsThead","_i","_arr","columnsTbody","columns","col","row","notnull","pk","foreign_keys","fkTable","fkThead","_i2","_arr2","fkTbody","_iterator","_step","fk","to","err","referenced_by","columnReferences","ref","referenced_column","refTable","refThead","_i3","_arr3","refTbody","_iterator2","_step2","referencing_table","referencing_column","DatabaseWidget","_Widget2","panel","_this2","nodes","links","Set","container","headerContainer","controlsContainer","tablesDropdown","dropdownButton","openNewQueryTab","clearSelection","color","dropdown","getElementById","isVisible","event","button","contains","target","showLoadingMessage","onAfterShow","fetchAndRenderTables","querySelector","selectAll","remove","_fetchAndRenderTables","dropdownMenu","data","console","showLoadingState","ok","renderTableList","tables","buildGraphDataFromTablesResponse","initializeGraph","renderGraph","dataLoaded","t0","showErrorMessage","message","_this3","graphData","map","sourceTable","tableForeignKeys","existingLink","find","link","source","sourceColumn","targetColumn","createArrowMarker","svg","createSimulation","width","isInitial","undefined","simulation","linkDistance","chargeStrength","chargeDistanceMax","collisionRadius","force","distance","strength","distanceMax","radius","alphaDecay","velocityDecay","rect","getBoundingClientRect","Math","max","_this4","svgNode","centerX","centerY","nodesCount","min","index","angle","PI","x","sin","cos","enter","selection","handleNodeClick","isValidNumber","boundedX","boundedY","widget","isSelected","selectedNodes","has","linkData","sourceId","targetId","nodeData","isConnected","some","isNodeSelected","updateSelection","active","alphaTarget","restart","fx","fy","isFinite","toggleSelection","nodeId","add","clear","each","nodeElement","newQueryBtn","clearBtn","size","innerHTML","ctrlKey","metaKey","preventDefault","stopPropagation","openTableInfoTab","getSelectedTables","selectTables","tableNames","_this5","_this6","d3menu","setAttribute","_openTableInfoTab","refWidget","_iterator3","_step3","w","encodeURIComponent","widgets","addInfoWidget","mode","_x","onResize","getInitialQuery","selectedTables","initialQuery","usedTables","joins","currentTable","joinFound","_iterator4","_step4","log","targetTable","join","_openNewQueryTab","_callee4","columnNames","_ref2","columnPromises","columnArrays","queryWidget","_callee4$","_context4","_ref","_callee3","_callee3$","_context3","_x2","all","_toConsumableArray","warn","TrialGraph","setGraph","config","showDiffFunction","nowVisPanel","sub","getElementsByClassName","graph","load","t1","t2","graphDefinition","selectedGraph","genDataflow","customForm","selectorDiv","typeOptions","useCacheDiv","selectorToggle","graphId","visible","selectorToggleI","selectorLabel","optionsNode","customLoadTooltip","div","trialid","aid","url","createResponse","activationId","div2","activationStorage","updateTooltipDiv","queryTooltip","configureGraph","updateWindow","fn","selectorReload","DiffGraphWidget","_BaseActivationGraphW","createForm","trial1","trial2","cache","functionDiffWindow","functionDiffJson","windowIdAndTitle","alert","functionDiffWidget","addGraphWidget","addHideShowButton","elementToAppendTo","buttonId","spanId","crypto","randomUUID","spanToHideOrShow","thisButton","filterVariablesArray","array","opVariables","defaultVariables","filteredArray","filter","arrayElement","includes","writeHTMLDiffVariables","spanVariables","trial1VariablesThatChanged","trial2VariablesAdded","trial1VariablesRemoved","variablesChangedTitle","spanVariablesChanged","diffVar","variablesLines","match","differentAttributes","findDifferenceBetweenVariables","colorJsonAttributesHTML","variablesAddedTitle","spanVariablesAdded","varAdded","variablesRemovedTitle","spanVariablesRemoved","varRemoved","variable1","variable2","jsonVariable1","parse","replace","jsonVariable2","jsonAsString","attributesArray","coloredJsonAsString","regex","regexMatches","RegExp","raw","_templateObject","_taggedTemplateLiteral","colorArrayElementsHTML","symDifference","coloredArray","argument","indexOf","writeFileAccess","fileAccessArray","file","buffering","content_hash_before","downloadFileContent","content_hash_after","timestamp","stack","didntChange","changeText","textChangeTitle","spanProperty","buttonDiv","lower","trial1ChangedVariablesFiltered","trial2AddedVariablesFiltered","trial1RemovedVariablesFiltered","fileAccessAddedTitle","spanFileAccessAdded","fileAccessRemovedTitle","spanFileAccessRemoved","fileAccessReplacedTitle","spanFileAccessReplaced","content_hash_before_first_trial","content_hash_before_second_trial","content_hash_after_first_trial","content_hash_after_second_trial","timestamp_first_trial","timestamp_second_trial","checkpoint_first_trial","checkpoint_second_trial","fileHash","fileName","download","href","location","origin","appendChild","click","removeChild","HistoryGraph","makeid","TrialGraphWidget","TrialInfoWidget","DiffInfoWidget","fs","instance","pl","require","svgPanZoom","HistoryWidget","annontationWidget","rightClickMenu","buildModal","buildRightClickMenu","script","execution","summarize","customCtrlClick","redTrial","state","selectedNode","greenTrial","diffGraphWidget","diffInfoWidget","customWindowTabCommand","trialIdSimplified","windowId","command","trialExportWidget","customSelectNode","trialGraphWidget","trialInfoWidget","filterDiv","scriptOptions","currentScript","scripts","filterToggle","filterToggleI","filterLabel","buildPushCommand","modal","modalBody","buildPullCommand","buildAddRemote","buildEditRemote","buildDeleteRemote","modalContent","modalHeader","cleanModalBodyAndClose","buildRestoreTrialCommand","buildRestoreFileCommand","buildProvCommand","buildExportPrologCommand","buildDataflowCommand","buildTrialFunctionDiffCommand","self","_parent$getAttribute","parentNode","getAttribute","buildTrialFunctionDiffModal","_parent$getAttribute2","buildDataflowModal","exportUrl","exportWindowId","buildExportPrologModal","provWindowId","provUrl","provWindow","prov_lines","prov","split","line","trialFiles","_submitButton","files","changeTitle","submitButton","showModal","createFormSelectInput","createFormTextInput","fileToRestore","selectedOptions","fileIdentifier","getTextInputFormByID","targetPath","restoreUrl","getRestoreOrCollabCommand","addAlert","_submitButton2","createFormCheckInput","skipScript","checked","skipModules","skipFileAccess","_submitButton3","textContent","remoteURL","remoteName","addRemoteURL","terminal_text","executeCollabCommand","remotes","_ref3","_x3","_this7","_ref4","_x4","serverUrlId","_submitButton4","server_url","remoteURLText","serverUrl","collabCommandUrl","d3content","filterInternal","executionOptions","filterReload","secondTrialId","firstTrialSelectActivation","activation","substring","secondTrialSelect","trial","tag","secondTrialSelectActivation","getSecondTrialFunctionActivations","firstTrialFunctionId","secondTrialFunctionId","_submitButton5","inferenceRules","hideTimestamps","buildExportPrologTab","exportWindow","prologSession","answerCallback","answer","answerString","answerCardTextId","answerCardText","answerWindow","format_answer","prologProgram","userQuery","consult","success","query","scrollableModal","modalDialog","overflowY","maxHeight","getDataflow","dataflowWindowId","dataflowUrl","dataflow","viz","dataflowWindow","dataflowButtons","selectedEdge","svgElement","renderSVGElement","preventMouseEventsDefault","dblClickZoomEnabled","_loop","nodeIndex","presentNode","children","tagName","toLowerCase","presentNodeSelection","shiftKey","deletePriorNodes","checkboxOpenDataflowExcludeProvenanceNewWindow","dataflowWindowD3Select","checkboxID","excludePriorProvenanceHint","chooseDataflowExcludedProvenanceWindowId","presentWindowId","newWindowId","lastIndexOf","selectedNodeEvaluationTitle","presentNodeOrderEvaluationTitle","firstEvaluationOrder","lastEvaluationOrder","dataflowUrlLastEvaluation","dataflowUrlFirstEvaluation","excludingProvenanceWindow","getDataflowWindowExcludeSomeProvenance","responseLastEvaluation","jsonLastEvaluation","dataflowLastEvaluation","responseFirstEvaluation","jsonFirstEvaluation","dataflowFirstEvaluation","dataflowAMinusDataflowB","excludingProvenanceWindowId","dataflowA","dataflowB","selectedEvaluationOrder","lastEvaluationId","linesDataflowA","linesDataflowB","newDataflow","removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation","dataflowIsAligned","addsDeletedNodeSettingsAndChecksIfDataflowIsAligned","removesDeletedEvaluationsFromAligment","newDataflowString","addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow","_loop2","selectedNodeSelection","deletePriorNodesAfterDeletingPriorNodes","_excludingProvenanceW","selectedNodeOrderEvaluationTitle","dataflowUrlPresentEvaluation","selectedEvaluationDataflow","evaluations","lineIndex","trim","alignedEvaluations","alignedEvalIndex","alignedEval","_loop3","indexOfDataflowLineToRemove","lineToRemove","findIndex","dataflowLine","splice","tempArray","isAligned","evaluationWithoutSettings","lineToAdd","string","evaluationList","selectedEvaluation","dataflowTextInputEvaluation","createFormNumberInput","dataflowEvaluationInput","addsAutocompleteToDataflowWDF","dataFlowShowType","dataFlowHideTimestamps","dataFlowHideInternals","dataFlowHideNotCode","dataFlowActivationNames","dataFlowHideFunc","dataflowFileAccesses","dataflowEvaluation","dataflowGroup","dataflowMode","dataflowDepth","dataflowValueLength","dataflowName","input","autocompleteSuggestionsResults","evaluationInputHint","suggestions","opacity","border","padding","marginTop","evaluation","_loop4","evaluationSuggestionId","evaluation_id","first_char_line","downloadDataflowAsSVG","dataflowDOT","appendDiv","saveAs","Blob","outerHTML","downloadDataflowAsDOT","excludeProvenanceHint","commandTitle","trialIdTitle","hideModal","alertType","feedbackAlert","checkInputId","checkDiv","textInputId","helpId","helpText","textDiv","textInput","selectId","selectText","minOptionNumber","maxOptionNumber","defaultOption","optionsLabels","selectDiv","selectInput","optionNumber","inputLabel","minValue","defaultValue","numberDiv","formTextInput","result","_superPropGet","assign","GroupWidget","onBeforeShow","groups","setGroups","setUsers","_setUsers","userIn","users","login","userLogin","resfreshGroups","_setGroups","group","members","user","addGrpRow","_deleteGrp","grpId","deleteGrp","membersText","addMemberForm","currentGroup","deleteGroupButton","confirm","nameIn","addGrpButton","newGrp","createAddMemberForm","userId","ModulesInfoWidget","EnvironmentInfoWidget","FileAccessesInfoWidget","display1","display2","createMain","loadModules","loadEnvironment","loadFileAccess","main","h1","code_hash","info","start","duration_text","filter_trial","filterfn","select_trial","filterdiv","newfilter","on_change","modules_url","modules","modules_added","modules_removed","modules_replaced","fold","createFold","foldable","createFilter","ul","strial","element","valid","t1_path","mod_li","t2_path","elements","rem","li","version","path","createFilterFold","environment_url","environment","env_added","env_removed","env_replaced","env_li","_iterator5","_step5","_iterator6","_step6","env_cli","accesses_url","accesses","fa_added","fa_removed","fa_replaced","_iterator7","_step7","fa_li","_iterator8","_step8","_iterator9","_step9","fa_cfield","value1","value2","attr1","attr2","mod","env_field","env","fa_field","fa","v1","v2","trialDisplay","default_local","createItem","createFilterDiv","text_filter","select_local","stext","slocal","check_text","check_local","createList","list","trial_path","mode_filter","select_hash","local","smode","shash","check_mode","check_hash","startsWith","pos","select_version","sversion","check_version","file_accesses","idAttr","scriptAttr","startAttr","str_start","finishAttr","str_finish","durationAttr","argumentsAttr","anntButton","foldI","spanI","foldA","foldAI","DockPanel","findInLayout","area","splitconfig","every","child","tabconfig","tabwidget","temp","NowVisPanel","_DockPanel","addMainWidget","nowVis","wnow","addWidget","operation","layout","saveLayout","sublayout","sizes","restoreLayout","ProjectWidget","experiments","addExpRow","exp","expTBody","cloneCommandText","navigator","clipboard","writeText","divCopied","setTimeout","addExpButton","newExp","rows","count","renderTable","csv","blob","URL","createObjectURL","revokeObjectURL","paginationContainer","startIndex","currentPage","endIndex","paginationButtons","totalPages","ceil","tableContainer","thead","tbody","startRow","endRow","currentPageRows","tr","editorId","createQueryInterface","_createQueryInterface","headerRow","queryContainer","executeQuery","aceEditor","ace","edit","setTheme","session","setMode","setOptions","fontSize","minLines","showPrintMargin","enableBasicAutocompletion","enableLiveAutocompletion","commands","addCommand","bindKey","win","mac","exec","langTools","tableCompleter","getCompletions","editor","prefix","callback","completions","meta","addCompleter","setValue","focus","_executeQuery","statusArea","sql","getValue","displayQueryResults","_displayQueryResults","resultWidget","editorElement","availableHeight","minHeight","resize","experimentsIn","selectedExp","server","mainpanel","projectWidget","groupWidget","databaseWidget","annotationn","history","attach","onresize","update","onload"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA,uCAAuC;AACvC,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qDAAqD;AACrD,8BAA8B,UAAU,aAAa;AACrD,8BAA8B,mBAAmB,IAAI;AACrD,8BAA8B,SAAS,cAAc;AACrD,8BAA8B,UAAU,aAAa;AACrD;AACA;AACA,sCAAsC;AACtC;AACA,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,mCAAmC;AACnC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,qCAAqC;AACrC,qCAAqC;AACrC,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA,8CAA8C;AAC9C,8CAA8C;AAC9C,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD,oDAAoD,KAAK;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D,sDAAsD,KAAK;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,8BAA8B;AACrC,OAAO,gCAAgC;AACvC,OAAO;AACP;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,2CAA2C;AAC3C,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,OAAO;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C;AACA;AACA;;AAEoN;AACpN;;;;;;;;;;;;;;;;ACr+EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEL;AACtB;;;;;;;;;;;;;;;;;;;;;;;ACrf6C;AACD;AACY;AACF;AACD;AACV;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,oCAAoC,qDAAM;AAC1C,sCAAsC,qDAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA,wCAAwC,qBAAqB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA,oCAAoC,2CAA2C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sDAAO;AAClC;AACA;AACA,yJAAyJ,YAAY;AACrK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sDAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAO;AAC9B;AACA;AACA;AACA,wDAAwD,GAAG;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wBAAwB;AAC/D;AACA,mBAAmB,kEAAkB;AACrC;AACA,YAAY,uDAAQ;AACpB;AACA,2CAA2C,0BAA0B;AACrE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,QAAQ,+GAA+G;AACxL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,4BAA4B,wCAAwC;AACpE;AACA;AACA;AACA;AACA;AACA,sDAAsD,KAAK;AAC3D,mCAAmC,QAAQ,WAAW,KAAK;AAC3D,4BAA4B,MAAM,EAAE,KAAK;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oCAAoC;AACxD,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iBAAiB;AAChF;AACA,aAAa,sDAAQ;AACrB,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA,gBAAgB,sDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEA;AAC3B;;;;;;;;;;;AC/kCA;AACA,IAAI,KAA4D,oBAAoB,mBAAO,CAAC,iFAAmB;AAC/G,IAAI,CAC0I;AAC9I,CAAC,yCAAyC;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0CAA0C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,UAAU;AACzD;AACA;AACA,2CAA2C,UAAU;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,GAAG;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,GAAG;AACxD;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,GAAG;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU,2CAA2C,GAAG;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,WAAW;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,0BAA0B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,wCAAwC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oCAAoC;;AAEzC;AACA;AACA;AACA;;AAEA,CAAC;AACD;;;;;;;;;;;;;;;;;;;;AC1hC2C;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0DAA0D;;AAEyC;AACpG;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE6B;AACxD;;;;;;;;;;;;;;;;;AC/bwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,0BAA0B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ,MAAM,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,mBAAmB,kEAAkB;AACrC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc,MAAM,cAAc;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEX;AAChB;;;;;;;;;;;;;;;;;;;ACh9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAE2C;AACtE;;;;;;;;;;;;;;;;;;;;ACjRiE;AAChB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAK,CAAC,wDAAK;AAChC;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;;AAEiB;AACpD;;;;;;;;;;;;;;;;AC7fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,KAAK;AAC/B,0BAA0B,KAAK,GAAG,KAAK;AACvC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEC;AAC5B;;;;;;;;;;;;;;;;;;;;ACjMmD;AACC;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,sBAAsB;AACtB;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,8DAAe;AACzD,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,uDAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAED;AAC1B;;;;;;;;;;;;;;;;;;;;;;AC7lB6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,cAAc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wBAAwB;AACjF;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,KAAK;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,KAAK;AACrD;AACA;AACA;AACA;AACA,6CAA6C,KAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEsD;AACjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrqB0E;AACd;AACM;AACW;AACvB;AACX;AACH;AACW;AACA;AACK;AACH;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe,KAAK,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,qBAAqB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qBAAqB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qDAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,0DAAW;AACnB,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,8CAA8C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kCAAkC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iEAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iEAAkB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iEAAkB;AACjD,KAAK,gCAAgC;AACrC;AACA;AACA;AACA,+BAA+B,sDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,oEAAoE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,QAAQ,0DAAW;AACnB;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gEAAgB;AAChD;AACA,qCAAqC,OAAO;AAC5C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd,QAAQ,gEAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0DAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA,8BAA8B,OAAO;AACrC;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gEAAgB;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sBAAsB;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,cAAc;AACjD,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC,kCAAkC,KAAK;AACvC,mCAAmC,MAAM;AACzC,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mDAAI,SAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI;AAChC,6BAA6B,KAAK;AAClC,+BAA+B,kBAAkB;AACjD;AACA,kCAAkC,OAAO;AACzC;AACA;AACA,kCAAkC,MAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,kBAAkB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,gCAAgC,qDAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sBAAsB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,qDAAqD;AACrE;AACA,qCAAqC,qDAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAQ;AAC9B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW,GAAG,gBAAgB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAgB;AAClD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oCAAoC,gEAAgB;AACpD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gBAAgB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA,6DAA6D,OAAO;AACpE,YAAY,0DAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,qDAAqD,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA,mDAAmD,uBAAuB;AAC1E;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6BAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,uCAAuC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC;AACxB;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D,iBAAiB;AACjB;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,MAAM,6CAA6C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,0CAA0C;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,4CAA4C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,6CAA6C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,wCAAwC,iDAAC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wDAAS,0CAA0C,iDAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU,EAAE,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA,kBAAkB,sCAAsC;AACxD;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAoD;AACnF;AACA;AACA,2BAA2B,2CAA2C;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC,oBAAoB,uDAAQ;AAC5B,iDAAiD,sDAAO;AACxD,aAAa;AACb;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qDAAM;AACvC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,YAAY,wDAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,gCAAgC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,sCAAsC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yBAAyB;AAC3C;AACA,2BAA2B;AAC3B;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,mCAAmC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oBAAoB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM;AACpC,gBAAgB,wDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,kBAAkB,wDAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,eAAe,MAAM,eAAe;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sDAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC,wBAAwB,uDAAQ;AAChC,qDAAqD,sDAAO;AAC5D,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kEAAkB;AACrC,YAAY,uDAAQ;AACpB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,SAAS;AACxE;AACA,aAAa,sDAAQ;AACrB,iDAAiD,SAAS;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sDAAQ;AACzB,iBAAiB,sDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAM;AACnC,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC,sCAAsC,qDAAM;AAC5C,uCAAuC,qDAAM;AAC7C,yCAAyC,qDAAM;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA,8CAA8C,kCAAkC;AAChF;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,uDAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAI;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uDAAQ;AAChC,uBAAuB,wDAAU;AACjC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,YAAY,0DAAW;AACvB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA,uBAAuB,iDAAC,MAAM,oDAAoD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,iCAAiC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,qCAAqC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,WAAW,GAAG,cAAc;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,YAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAA2D;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,2BAA2B,4CAA4C;AACvE;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA;AACA;AACA;AACA;AACA,2BAA2B,+CAA+C;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,MAAM;AAC3C;AACA;AACA,oCAAoC,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wDAAK;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,wDAAK;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wDAAK;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wDAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mCAAmC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB,qBAAqB,uDAAQ;AAC7B,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAQ;AAClC,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,QAAQ;AACnD,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C,0CAA0C,KAAK;AAC/C,2CAA2C,MAAM;AACjD,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mBAAmB;AAC5D;AACA;AACA,yCAAyC,oBAAoB;AAC7D;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA,yCAAyC,sBAAsB;AAC/D;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA,yCAAyC,0BAA0B;AACnE;AACA;AACA,yCAAyC,2BAA2B;AACpE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAI;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAU,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8BAA8B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uCAAuC;AACrD;AACA,2BAA2B,uDAAQ;AACnC;AACA;AACA;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C,uCAAuC,SAAS;AAChD;AACA;AACA,yBAAyB,kDAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC,4BAA4B,SAAS;AACrC,6BAA6B,UAAU;AACvC,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iEAAkB;AACnD;AACA;AACA;AACA,4CAA4C,gEAAgB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qDAAM;AACxC,mCAAmC,qDAAM;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAG;AAC1B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,yCAAyC;AACjF;AACA;AACA;AACA,uCAAuC,uCAAuC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAI;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA,0DAA0D,OAAO;AACjE;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,gEAAgB;AACrD;AACA,yBAAyB,8CAA8C;AACvE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,cAAc,6DAAe,IAAI;AACrF;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa;AAC5D;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,wDAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAQ;AAC5B,mBAAmB,wDAAU;AAC7B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0DAAW;AACnB;AACA,cAAc,YAAY;AAC1B;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC;AACpB;AACA;AACA,uCAAuC,IAAI,sCAAsC;AACjF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,WAAW;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iDAAC,OAAO,mCAAmC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,EAAE,MAAM;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAC,QAAQ,sCAAsC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,wDAAU;AAC/B;AACA;AACA;AACA;AACA;AACA,oBAAoB,wDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAM;AACrC,kCAAkC,qDAAM;AACxC,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,MAAM;AACvC,kCAAkC,KAAK;AACvC,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA,gCAAgC,MAAM;AACtC,mCAAmC,KAAK;AACxC,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kDAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAQ;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAQ;AAC3B;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAU;AACzC;AACA;AACA;AACA;AACA,4BAA4B,KAAK;AACjC,6BAA6B,KAAK;AAClC;AACA;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,EAAE;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B,gBAAgB,yCAAyC;AACzD,kCAAkC,qDAAM;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,mCAAmC,qDAAM;AACzC,iCAAiC,qDAAM;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uBAAuB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2DAA2D;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,YAAY,sDAAQ,YAAY,sDAAQ;AACxC,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,0BAA0B;;AAEkT;AAC7U;;;;;;;;;;;AC7seA;;AAEA,cAAc,mBAAO,CAAC,sEAAO;;AAE7B,cAAc,4FAA4B;AAC1C,YAAY,mBAAO,CAAC,sEAAa;AACjC,iBAAiB,mBAAO,CAAC,gFAAkB;AAC3C,gBAAgB,mBAAO,CAAC,8EAAiB;AACzC,gBAAgB,mBAAO,CAAC,8EAAiB;;;;;;;;;;;ACRzC,WAAW,mBAAO,CAAC,uDAAS;AAC5B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,6FAA8B;AAC1C,4CAA4C;AAC5C,iCAAiC;AACjC,QAAQ;AACR;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC5DA,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,kGAA2B;AAC1C,aAAa,gFAAwB;;AAErC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACnHA;;AAEA,gBAAgB,wGAA8B;AAC9C,qBAAqB,yGAAiC;AACtD,qBAAqB,yGAAiC;AACtD,YAAY,mBAAO,CAAC,gEAAQ;;;;;;;;;;;ACL5B,eAAe,kGAA2B;AAC1C,oBAAoB,uGAAgC;AACpD,oBAAoB,uGAAgC;AACpD,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACznBA,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;;AAEA;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxHA,gBAAgB,mBAAO,CAAC,4EAAc;;AAEtC,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;;;;;;;;;;ACzCjB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,gBAAgB,mBAAO,CAAC,mEAAO;;;;;;;;;;;AClB/B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,WAAW,mBAAO,CAAC,0DAAY;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,IAAI;AACJ;AACA;AACA;;AAEA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACnUA;;AAEA,eAAe,mBAAO,CAAC,kEAAO;AAC9B,eAAe,mBAAO,CAAC,kEAAO;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,gFAAwB;;AAErC,iBAAiB,mBAAO,CAAC,kEAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AChDA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,gFAAwB;;AAErC,WAAW,mBAAO,CAAC,0DAAY;AAC/B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+BAA+B,YAAY;AAC3C;;AAEA;AACA;AACA;;AAEA,kDAAkD,OAAO;AACzD;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA,IAAI;AACJ;AACA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA,iBAAiB,eAAe;AAChC;AACA;;AAEA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;;AAEA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,YAAY,iBAAiB;AAC7B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;ACtSA;;AAEA,eAAe,mBAAO,CAAC,kEAAO;AAC9B,eAAe,mBAAO,CAAC,kEAAO;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,iBAAiB,mBAAO,CAAC,kEAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;;;;;;;;;;;;ACpBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;A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MAC5DD,aAAa,CAAC54B,KAAK,CAACG,MAAM,MAAAJ,MAAA,CAAMigB,SAAS,OAAI;MAE7C,IAAI,IAAI,CAACwW,SAAS,EAAE;QAClB,IAAI,CAACA,SAAS,CAACuC,MAAM,CAAC,CAAC;MACzB;IACF;EAAC;AAAA,EAhO8BliC,mDAAM;AAiOtCyH,eAAA,CAjOYkB,WAAW,WAES,CAAC;;;;;;;;;;;AC7KtB;;AAEZ,kBAAkB;AAClB,mBAAmB;AACnB,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,UAAU;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACrJA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;AC19GhC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,iBAAiB,mBAAO,CAAC,qBAAQ;AACjC;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;AChEA;AACA;AACA;AACA;;AAEA,aAAa,0FAA6B;;AAE1C;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,aAAa;AAC/B;AACA;;AAEA,oBAAoB,YAAY;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,aAAa;AAChC;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;;;;;;;;;;;ACnOlB,UAAU,mBAAO,CAAC,uDAAO;AACzB,aAAa,0FAA6B;AAC1C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,eAAe,mBAAO,CAAC,iEAAU;AACjC,YAAY,mBAAO,CAAC,2DAAS;AAC7B,UAAU,mBAAO,CAAC,0DAAY;AAC9B,aAAa,mBAAO,CAAC,6DAAU;;AAE/B;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACpHA,cAAc,mBAAO,CAAC,mEAAa;AACnC,gBAAgB,mBAAO,CAAC,mEAAa;AACrC,YAAY,mBAAO,CAAC,4EAAmB;;AAEvC;AACA;AACA;;AAEA,oBAAoB,GAAG,cAAc;AACrC,sBAAsB,GAAG,gBAAgB;AACzC,sBAAsB,GAAG,gBAAgB;AACzC,wBAAwB,GAAG,kBAAkB;AAC7C,mBAAmB,GAAG,kBAAkB;;;;;;;;;;;ACZxC,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;AAC1C,YAAY,mBAAO,CAAC,iEAAS;AAC7B,mBAAmB,mBAAO,CAAC,yEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,UAAU,mBAAO,CAAC,uDAAO;AACzB,WAAW,mBAAO,CAAC,kEAAgB;AACnC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB,wBAAwB;;;;;;;;;;;AC3HxB,YAAY,mBAAO,CAAC,iEAAS;AAC7B,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;AAC1C,mBAAmB,mBAAO,CAAC,yEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,UAAU,mBAAO,CAAC,uDAAO;AACzB,WAAW,mBAAO,CAAC,kEAAgB;AACnC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB,oBAAoB;;;;;;;;;;;ACjHpB,aAAa,0FAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACdA,UAAU,mBAAO,CAAC,0DAAY;;AAE9B,eAAe;AACf;;AAEA;AACA;AACA;;AAEA,eAAe;AACf;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;AChBA,aAAa,0FAA6B;AAC1C,UAAU,mBAAO,CAAC,0DAAY;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AChCA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACzCA,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACxBA,UAAU,mBAAO,CAAC,0DAAY;AAC9B,aAAa,0FAA6B;AAC1C,aAAa,mBAAO,CAAC,8DAAW;;AAEhC;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7BA,eAAe;AACf;AACA;;AAEA,eAAe;AACf;AACA;;;;;;;;;;;ACNA;AACA,OAAO,mBAAO,CAAC,6DAAO;AACtB,OAAO,mBAAO,CAAC,6DAAO;AACtB,OAAO,mBAAO,CAAC,6DAAO;AACtB,QAAQ,mBAAO,CAAC,+DAAQ;AACxB,QAAQ,mBAAO,CAAC,+DAAQ;AACxB,OAAO,mBAAO,CAAC,6DAAO;AACtB,OAAO,mBAAO,CAAC,6DAAO;AACtB,OAAO,mBAAO,CAAC,6DAAO;AACtB;;AAEA,YAAY,mBAAO,CAAC,sEAAa;;AAEjC;AACA;AACA;;AAEA;;;;;;;;;;;ACjBA,UAAU,mBAAO,CAAC,0DAAY;;AAE9B;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACfA,UAAU,mBAAO,CAAC,uDAAO;AACzB,aAAa,0FAA6B;AAC1C,gBAAgB,mBAAO,CAAC,4DAAa;AACrC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AC1BA,UAAU,mBAAO,CAAC,kEAAgB;AAClC,UAAU,mBAAO,CAAC,4EAAwB;AAC1C,eAAe,mBAAO,CAAC,8EAAsB;AAC7C,eAAe,mBAAO,CAAC,wEAAsB;AAC7C,WAAW,mBAAO,CAAC,kEAAgB;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,+BAA+B;;AAEvE;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,8CAA8C;;AAEtF;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,GAAG,cAAc;AACrC,sBAAsB,GAAG,gBAAgB;AACzC,sBAAsB,GAAG,gBAAgB;AACzC,wBAAwB,GAAG,kBAAkB;AAC7C,mBAAmB,GAAG,kBAAkB;;;;;;;;;;;AClExC,iBAAiB,mBAAO,CAAC,4DAAa;AACtC,UAAU,mBAAO,CAAC,oDAAQ;AAC1B,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjDA,kBAAkB;AAClB;AACA;AACA;AACA,kBAAkB,GAAG,WAAW;AAChC;AACA;AACA;AACA,uBAAuB,GAAG,YAAY;AACtC;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;;;;;;;;;;ACvBA,SAAS,mBAAO,CAAC,iDAAO;AACxB,kBAAkB,mBAAO,CAAC,8DAAa;;AAEvC;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AClCa;;AAEb,mIAAqD;;;;;;;;;;;;ACFxC;;AAEb,aAAa,0FAA6B;AAC1C,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,aAAa,mBAAO,CAAC,4GAAiB;AACtC,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,kEAAQ;AAC3B,aAAa,mBAAO,CAAC,sEAAU;;AAE/B,iBAAiB,mBAAO,CAAC,qFAAmB;AAC5C;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3Fa;;AAEb;AACA,aAAa,0FAA6B;AAC1C,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,UAAU,mBAAO,CAAC,kEAAgB;AAClC,SAAS,uFAAsB;AAC/B,SAAS,mBAAO,CAAC,iDAAO;AACxB,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,aAAa,mBAAO,CAAC,6EAAe;;AAEpC;;AAEA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,IAAI;AACJ,8BAA8B;AAC9B;AACA;AACA,wDAAwD;AACxD,wEAAwE;;AAExE;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,8BAA8B;;AAE9B;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,sBAAsB;;;;;;;;;;;;ACrJT;;AAEb;AACA,aAAa,0FAA6B;AAC1C,SAAS,mBAAO,CAAC,iDAAO;AACxB,SAAS,uFAAsB;AAC/B,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,aAAa,mBAAO,CAAC,6EAAe;;AAEpC;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,IAAI;AACJ,8BAA8B;AAC9B;AACA;AACA,wDAAwD;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;;AAEA;;;;;;;;;;;ACrFA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA,eAAe,mBAAO,CAAC,mHAAoB;AAC3C,eAAe,mBAAO,CAAC,mHAAoB;;AAE3C;;AAEA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,gBAAgB,mBAAO,CAAC,qHAAqB;;AAE7C;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;;AAEA;AACA,cAAc,mBAAO,CAAC,iFAAS;AAC/B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,uFAA8B;;AAEvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,yIAA2B;AAChD;;AAEA;;AAEA,aAAa,oJAA6B;AAC1C,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,yIAA+B;AACxD,kBAAkB,mBAAO,CAAC,mIAA4B;AACtD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,6EAA6E;AACtJ;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,kJAAwC;AAChF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,kGAAkG;AAClG,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA,4FAA4F;AAC5F,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,kJAAwC;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B,sCAAsC,mBAAmB;AACzD,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA,4EAA4E;;AAE5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA,mDAAmD,iEAAiE;AACpH;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,uCAAuC;AACvC,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;;;;;;;;;;;AC1/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mBAAO,CAAC,+GAAkB;;AAEvC;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,iEAAc;AAC/C,gBAAgB,mBAAO,CAAC,iEAAU;AAClC;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,oEAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,yIAA2B;AAChD;;AAEA;;AAEA,aAAa,oJAA6B;AAC1C,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kBAAkB,mBAAO,CAAC,mIAA4B;;AAEtD;;AAEA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,+GAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC;;AAEA,2CAA2C;AAC3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oDAAoD;AACpD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5qBa;;AAEb,kDAAkD,0CAA0C;;AAE5F,aAAa,oJAA6B;AAC1C,WAAW,mBAAO,CAAC,mBAAM;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;;;;;;;;;;;AC7Ea;;AAEb;;AAEA,UAAU,mBAAO,CAAC,8EAAsB;AACxC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;ACnFA,sGAA+C;;;;;;;;;;;ACA/C;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7DA,UAAU,gKAAqD;AAC/D,cAAc;AACd,gBAAgB;AAChB,kKAAuD;AACvD,4JAAmD;AACnD,qKAAyD;AACzD,2KAA6D;;;;;;;;;;;;ACN7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mJAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;ACvSA;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7DA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;AACA;;AAEA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,eAAe,mBAAO,CAAC,wDAAW;AAClC,gBAAgB,mBAAO,CAAC,oDAAS;AACjC;AACA;AACA;AACA;;AAEA,cAAc;AACd,kBAAkB;AAClB,yBAAyB;;AAEzB;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,yBAAyB,QAAQ;AACjC;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,qBAAqB,WAAW,GAAG,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,gBAAgB,WAAW,GAAG,IAAI,KAAK,aAAa;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;;AAEA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,KAAK,mDAAmD,cAAc;AACzF,GAAG;AACH;AACA;AACA,+BAA+B,IAAI;AACnC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,MAAM,aAAa,SAAS;AACtD;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB,cAAc,oBAAoB,EAAE,IAAI;AACxC;AACA,YAAY,gBAAgB,EAAE,IAAI;AAClC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,GAAG,SAAS,GAAG,KAAK,qBAAqB,EAAE,EAAE;AACpE,QAAQ;AACR,yBAAyB,GAAG,KAAK,yBAAyB,EAAE,EAAE;AAC9D,mBAAmB,yBAAyB,EAAE,EAAE;AAChD;AACA,MAAM;AACN,oBAAoB,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,EAAE;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C,cAAc,SAAS,OAAO;AACxE;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc,YAAY;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACzjEA,aAAa,0FAA6B;AAC1C,gBAAgB,8FAA2B;AAC3C,oBAAoB,oHAAuC;AAC3D,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,0GAAoD;;AAEpD;AACA;AACA;;;;;;;;;;;AC1GA,eAAe,mBAAO,CAAC,6DAAU;AACjC,SAAS,mBAAO,CAAC,0EAAO;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;AC3HA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GpB;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,gBAAgB,mBAAO,CAAC,wDAAW;AACnC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,WAAW,mBAAO,CAAC,4DAAa;;AAEhC;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;AC7BA,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;AACA;AACA;;;;;;;;;;;;ACJY;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,0DAAU;AAC/B,WAAW,mBAAO,CAAC,4DAAa;AAChC,aAAa,0FAA6B;AAC1C,UAAU,mBAAO,CAAC,8DAAiB;AACnC,gBAAgB,mBAAO,CAAC,wDAAW;;AAEnC,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7DY;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,0FAA6B;;AAE1C,WAAW,mBAAO,CAAC,4DAAa;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA,kBAAkB,eAAe;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7CY;;AAEZ,mBAAmB,GAAG,WAAW,GAAG,yBAAyB,GAAG,kGAAqC;AACrG,kBAAkB,GAAG,kGAAqC;AAC1D,kBAAkB,GAAG,kGAAqC;;AAE1D,YAAY,mBAAO,CAAC,0EAAuB;AAC3C;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA,QAAQ,mBAAO,CAAC,oDAAQ;AACxB,cAAc;AACd,kBAAkB;;AAElB,UAAU,mBAAO,CAAC,0EAAmB;;AAErC,cAAc;AACd,oBAAoB;AACpB,gBAAgB;AAChB,sBAAsB;AACtB,gBAAgB;AAChB,sBAAsB;AACtB,kBAAkB;AAClB,wBAAwB;AACxB,kBAAkB;AAClB,mBAAmB;;AAEnB,SAAS,mBAAO,CAAC,oEAAgB;;AAEjC,0BAA0B;AAC1B,gCAAgC;AAChC,wBAAwB;AACxB,2BAA2B;AAC3B,qBAAqB;;AAErB,WAAW,mBAAO,CAAC,4EAAiB;;AAEpC,kBAAkB;AAClB,YAAY;AACZ,oBAAoB;AACpB,cAAc;;AAEd,wGAA2C;;AAE3C,oBAAoB,mBAAO,CAAC,oEAAgB;;AAE5C,qBAAqB;AACrB,sBAAsB;AACtB,qBAAqB;AACrB,sBAAsB;;AAEtB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ,SAAS,mBAAO,CAAC,4DAAY;;AAE7B,kBAAkB;AAClB,sBAAsB;;AAEtB,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChGa;;AAEb,oGAAsC;AACtC,uGAAwC;AACxC,8FAAkC;AAClC,8FAAkC;AAClC,8FAAkC;;;;;;;;;;;;ACNrB;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;;AAEA;AACA;;AAEA;AACA,kBAAkB,oBAAoB;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB;;AAEnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;;AAEA;;AAEA,oBAAoB,oBAAoB;AACxC;AACA,IAAI;AACJ;;AAEA,oBAAoB,oBAAoB;AACxC;;AAEA,oBAAoB,oBAAoB;AACxC;AACA;AACA;;;;;;;;;;;;AChEa;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;;AAEA;AACA,SAAS,wBAAwB;AACjC;;AAEA;AACA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ACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc;AACd;AACA;;AAEA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,eAAe;AACf;AACA,kBAAkB,yBAAyB;AAC3C;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;;;;;;;;;;;AC/PA,oBAAoB,mBAAO,CAAC,mFAAqB;AACjD,aAAa,mBAAO,CAAC,4EAAmB;;AAExC,SAAS,mBAAO,CAAC,6DAAU;;AAE3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B,GAAG,gCAAgC,GAAG,wBAAwB;AACxF,2BAA2B,GAAG,qBAAqB;;;;;;;;;;;ACzCnD,SAAS,mBAAO,CAAC,6EAAO;AACxB,kBAAkB,mBAAO,CAAC,+DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,+EAAiB;AACtC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;ACnKA,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;AACA;AACA;AACA,SAAS,mBAAO,CAAC,6EAAO;AACxB;AACA,kBAAkB,mBAAO,CAAC,+DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,WAAW;AACpC;AACA,oBAAoB,yBAAyB;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GnB;;AAEb;;AAEA,mBAAmB,gGAAkC;AACrD,iBAAiB,mBAAO,CAAC,2EAAkB;AAC3C,gBAAgB,mBAAO,CAAC,oDAAS;AACjC,iBAAiB,mBAAO,CAAC,iFAAkB;AAC3C,kBAAkB,mBAAO,CAAC,6EAAmB;;AAE7C;AACA,cAAc,mBAAO,CAAC,2EAAe;AACrC,iBAAiB,mBAAO,CAAC,iFAAkB;;;;;;;;;;;;ACZ9B;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,WAAW;AAC7B,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;;;;;;;;;;;AC5Xa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AClba;;AAEb;;AAEA,aAAa,mBAAO,CAAC,sEAAQ;AAC7B,cAAc,mBAAO,CAAC,wEAAS;AAC/B,aAAa,mBAAO,CAAC,sEAAQ;AAC7B,gBAAgB,mBAAO,CAAC,4EAAW;;;;;;;;;;;;ACPtB;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B,YAAY,mBAAO,CAAC,mEAAU;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB,wCAAwC;AACxC,gBAAgB;;AAEhB,sBAAsB,iBAAiB;AACvC;;AAEA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACjLa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,sEAAQ;;AAE3B;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,cAAc;AACpB,MAAM,cAAc;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACz6Ba;;AAEb;;AAEA,WAAW,mBAAO,CAAC,uDAAS;AAC5B,YAAY,mBAAO,CAAC,wEAAS;AAC7B,YAAY,mBAAO,CAAC,kEAAS;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,QAAQ,mBAAO,CAAC,kGAAyB;AACzC,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC7MY;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,eAAe,mBAAO,CAAC,gEAAW;AAClC,YAAY,mBAAO,CAAC,mEAAU;AAC9B,aAAa,mBAAO,CAAC,qEAAW;AAChC,WAAW,mBAAO,CAAC,oDAAS;AAC5B;;AAEA,cAAc,mBAAO,CAAC,iEAAO;AAC7B,gBAAgB,mBAAO,CAAC,6EAAa;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,0CAA0C;AACrE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClPa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;;AAEb,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACxHa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;;AAExB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/Ka;;AAEb,WAAW,mBAAO,CAAC,uDAAS;AAC5B,aAAa,mBAAO,CAAC,qEAAW;AAChC,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA,cAAc,mBAAO,CAAC,oEAAO;AAC7B,gBAAgB,mBAAO,CAAC,gFAAa;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,UAAU,cAAc;AACxB,UAAU,sBAAsB;AAChC,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gCAAgC;AAC9D;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,wBAAwB;AAClC,UAAU,4BAA4B;AACtC,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACxHa;;AAEb,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,QAAQ;AAClB;AACA,UAAU,aAAa;AACvB,UAAU,OAAO;AACjB,UAAU,aAAa;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;;AAEA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9Fa;;AAEb,SAAS,mBAAO,CAAC,uEAAO;AACxB,YAAY,mBAAO,CAAC,mEAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,qBAAqB;AAC/B,UAAU,oBAAoB;AAC9B,UAAU,iBAAiB;AAC3B,UAAU,cAAc;AACxB,UAAU,cAAc;AACxB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;AC3wBa;;AAEb;AACA,SAAS,mBAAO,CAAC,uEAAO;AACxB,gBAAgB,mBAAO,CAAC,4EAAqB;AAC7C,eAAe,mBAAO,CAAC,4FAA2B;;AAElD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;;AAEA;AACA;;AAEA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACxHA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;ACr3GhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;;;;AChfA,aAAa,0FAA6B;AAC1C,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX;;AAEA;;;;;;;;;;;AC5CA,+GAAe,GAAG,IAAqC,CAAC,iCAAO,EAAE,oCAAC,CAAC;AAAA;AAAA;AAAA,kGAAC,CAAC,KAAK,EAA6E,CAAC,kBAAkB,aAAa,gBAAgB,+BAA+B,WAAW,4FAA4F,WAAW,kEAAkE,4DAA4D,YAAY,IAAI,kBAAkB,yBAAyB,0DAA0D,kBAAkB,sBAAsB,yCAAyC,UAAU,cAAc,yBAAyB,oBAAoB,IAAI,SAAS,UAAU,oCAAoC,cAAc,IAAI,yCAAyC,SAAS,0CAA0C,0FAA0F,2HAA2H,qBAAM,EAAE,qBAAM,UAAU,qBAAM,CAAC,qBAAM,wMAAwM,8DAA8D,uDAAuD,iNAAiN,0BAA0B,4BAA4B,KAAK,KAAK,gDAAgD,mFAAmF,sBAAsB,KAAK,kCAAkC,iDAAiD,KAAK,GAAG,mBAAmB,8HAA8H,oIAAoI,iDAAiD,qBAAqB,uBAAuB,eAAe,0BAA0B,GAAG,wBAAwB,yCAAyC,oBAAoB,KAAK,gDAAgD,4DAA4D,qBAAqB,OAAO,EAAE,oBAAoB,KAA0B,qBAAqB;;AAEhpF;;;;;;;;;;;ACFY;AACZ,aAAa,0FAA6B;AAC1C,gBAAgB,8FAA2B;AAC3C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,WAAW;AACtD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;;AAEzB;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AC9FA;;AAEA,aAAa,mBAAO,CAAC,kEAAc;AACnC,cAAc,mBAAO,CAAC,oEAAe;AACrC,WAAW,mBAAO,CAAC,8DAAY;AAC/B,cAAc,mBAAO,CAAC,oEAAe;AACrC,YAAY,mBAAO,CAAC,gEAAa;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACda;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;;AAEA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,oBAAoB;AACpC;AACA;;AAEA;AACA;;;;;;;;;;;;AC3Fa;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,oBAAoB;AAC/C;;AAEA,cAAc,gBAAgB;AAC9B;AACA;;AAEA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AC9Ca;;AAEb,YAAY,mBAAO,CAAC,6DAAS;AAC7B,aAAa,mBAAO,CAAC,+DAAU;;AAE/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjJa;;AAEb,iGAAiC;AACjC,uGAAqC;AACrC,uGAAqC;AACrC,uGAAqC;AACrC,uGAAqC;;;;;;;;;;;;ACNxB;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,gBAAgB,mBAAO,CAAC,mEAAU;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA,QAAQ,cAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,6DAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5Ba;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,gBAAgB,mBAAO,CAAC,mEAAU;AAClC,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxGa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;;AAE9B,aAAa,mBAAO,CAAC,6DAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B,aAAa,mBAAO,CAAC,gEAAW;AAChC,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB,gDAAgD;AAChD;AACA,4BAA4B;AAC5B;AACA,kDAAkD;AAClD;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzUa;;AAEb,YAAY,mBAAO,CAAC,8DAAU;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;;;;;;;;;;;AChDD;;AAEb,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,eAAe,mBAAO,CAAC,iEAAU;;AAEjC,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA,IAAI;AACJ,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;;;;;;;;;;;ACrRH;;AAEb,WAAW,mBAAO,CAAC,uDAAS;AAC5B,YAAY,mBAAO,CAAC,4FAA2B;AAC/C,aAAa,mBAAO,CAAC,4EAAqB;;AAE1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChHA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA,SAAS,WAAW;;AAEpB;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1BY;AACZ,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,mBAAO,CAAC,wDAAW;AAClC,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;ACjJA,SAAS,mBAAO,CAAC,2EAAO;AACxB,cAAc,mBAAO,CAAC,oDAAS;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;;AAEA;;AAEA;AACA,SAAS,OAAO;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;;AAEA;;AAEA,SAAS,OAAO;AAChB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AClHA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;ACr3GhC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACVa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA,IAAI;AACJ,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzDA,gFAA8B;;;;;;;;;;;;ACA9B;AACA;;AAEa;;AAEb,WAAW,mBAAO,CAAC,uDAAS;;AAE5B,8GAA8C;;AAE9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,qBAAqB;;AAErB,gBAAgB;AAChB;AACA,CAAC;;AAED;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,oBAAoB;;AAEpB,iBAAiB;AACjB;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC1HD;AACA;;AAEa;;AAEb,UAAU,mBAAO,CAAC,uDAAS;;AAE3B;AACA;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,EAAE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;ACxFa;;AAEb;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,kEAAgB;AAClC,cAAc,mBAAO,CAAC,oEAAgB;AACtC,aAAa,0FAA6B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChCa;;AAEb,WAAW,mBAAO,CAAC,qDAAQ;AAC3B,YAAY,mBAAO,CAAC,8DAAc;AAClC,cAAc,mBAAO,CAAC,2DAAW;AACjC,cAAc,mBAAO,CAAC,oEAAgB;AACtC,aAAa,mBAAO,CAAC,oDAAQ;AAC7B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AACb;AACA;AACA;AACA,WAAW,mBAAO,CAAC,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB;AAC7B;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE;AAC1B;AACA;AACA;AACA,uBAAuB,IAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,gBAAgB,EAAE;AAClB,qCAAqC,GAAG;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8BAA8B;AACnE;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;;;;;;;;;;;ACnnBpB,iGAAuC;AACvC,2GAA0C;;;;;;;;;;;ACD1C,aAAa,0FAA6B;;AAE1C,sBAAsB,mBAAO,CAAC,qEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,6EAAoB;AAClD,WAAW,mBAAO,CAAC,6DAAQ;AAC3B,eAAe,mBAAO,CAAC,+DAAa;;AAEpC;AACA,aAAa,qBAAM,WAAW,qBAAM;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAM,aAAa,qBAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAM,YAAY,qBAAM;AAC9B,eAAe,qBAAM;AACrB,IAAI,SAAS,qBAAM;AACnB,eAAe,qBAAM;AACrB,IAAI,SAAS,qBAAM;AACnB,eAAe,qBAAM;AACrB,IAAI;AACJ,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,qBAAM;AAC5B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;ACrHA;AACA;AACA,IAAI,qBAAM,YAAY,qBAAM;AAC5B;AACA,EAAE,SAAS,qBAAM,YAAY,qBAAM;AACnC;;AAEA;AACA,EAAE;AACF;AACA;AACA;;;;;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+DAA+D;AAC/D;AACA;AACA;;;;;;;;;;;AClBA,UAAU,mBAAO,CAAC,8DAAiB;AACnC,gBAAgB,mBAAO,CAAC,wDAAW;AACnC,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,aAAa,0FAA6B;;AAE1C,sBAAsB,mBAAO,CAAC,qEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,6EAAoB;AAClD,eAAe,mBAAO,CAAC,+DAAa;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA,sBAAsB,UAAU;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACxGA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;ACZa;;AAEb;AACA;AACA;AACA;AACA,qBAAqB;AACrB,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;AC3CA,wHAAkD;AAClD,2HAAoD;;AAEpD,sBAAsB;AACtB;AACA;;AAEA,qBAAqB;AACrB;AACA;;;;;;;;;;;ACTA,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;ACr3GhC,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,UAAU,mBAAO,CAAC,uDAAO;AACzB,UAAU,mBAAO,CAAC,uDAAO;AACzB,SAAS,mBAAO,CAAC,6EAAO;AACxB,UAAU,mBAAO,CAAC,kEAAgB;AAClC,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxGA,gBAAgB,mBAAO,CAAC,0DAAY;AACpC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC,iBAAiB,mBAAO,CAAC,8DAAa;AACtC,UAAU,mBAAO,CAAC,uDAAO;AACzB,UAAU,mBAAO,CAAC,uDAAO;AACzB,SAAS,mBAAO,CAAC,6EAAO;AACxB,iBAAiB,mBAAO,CAAC,qEAAc;AACvC,UAAU,mBAAO,CAAC,kEAAgB;AAClC,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvFA,SAAS,mBAAO,CAAC,6EAAO;AACxB,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,0FAA6B;AAC1C,aAAa,qBAAM,WAAW,qBAAM;;AAEpC;AACA;AACA,EAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,mBAAmB;AACnB,4BAA4B;AAC5B;AACA,8BAA8B,kBAAkB;AAChD;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;;;;;;;;;;;ACjDY;;AAEZ;AACA;AACA;AACA,iBAAiB,mBAAO,CAAC,4DAAa;AACtC,kBAAkB,mBAAO,CAAC,8DAAa;AACvC;AACA;AACA,aAAa,qBAAM,WAAW,qBAAM;AACpC;AACA;AACA,yDAAyD;AACzD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB;AACpB,EAAE,sBAAsB;AACxB,EAAE;AACF,EAAE,kBAAkB;AACpB,EAAE,sBAAsB;AACxB;AACA;AACA,gDAAgD,qBAAM;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,qBAAM;AACtD;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;;;;;;;;;;;AC3Ga;;AAEb,gDAAgD,0DAA0D,2CAA2C;;AAErJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;;;AAGF;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,oBAAoB;;;;;;;;;;;;AC9HpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,mBAAO,CAAC,sFAAoB;AAC3C,eAAe,mBAAO,CAAC,sFAAoB;AAC3C,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;AC7HD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;AACA,gBAAgB,mBAAO,CAAC,wFAAqB;AAC7C,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,uFAA8B;AACvC;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,4GAA2B;AAChD;;AAEA,aAAa,gFAAwB;AACrC,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,8GAAgC;AACzD,kBAAkB,mBAAO,CAAC,sGAA4B;AACtD,eAAe,mBAAO,CAAC,kGAA0B;AACjD;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,mFAAmF;AAC5J;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qHAAwC;AAChF;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,+FAA+F;AAC/F,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA,4FAA4F;AAC5F,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,qHAAwC;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,kBAAkB,yBAAyB;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mBAAO,CAAC,oHAAmC;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA,mDAAmD,+DAA+D;AAClH;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,wGAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA;;;;;;;;;;;AClgCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,kFAAkB;AACvC,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,oEAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,4GAA2B;AAChD;;AAEA,aAAa,gFAAwB;AACrC,4BAA4B,qBAAM,mBAAmB,qBAAM,mFAAmF;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAO,CAAC,sGAA4B;AACtD,eAAe,mBAAO,CAAC,kGAA0B;AACjD;AACA,qBAAqB,oGAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAO,CAAC,iEAAU;AAClB;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,kFAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,sDAAsD;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;;;;;;;;;;AChoBa;;AAEb;AACA,4CAA4C,2BAA2B,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;AAC/N,+BAA+B,uCAAuC;AACtE,qCAAqC,+DAA+D,sCAAsC,0BAA0B,+CAA+C,yCAAyC,uEAAuE;AACnU,eAAe,mBAAO,CAAC,iGAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA;AACA,yFAAyF;AACzF;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;ACnLa;;AAEb,2CAA2C,gCAAgC,oCAAoC,oDAAoD,6DAA6D,iEAAiE,sCAAsC;AACvU,iCAAiC,gBAAgB,sBAAsB,OAAO,uDAAuD,6DAA6D,4CAA4C,oKAAoK,mFAAmF,KAAK;AAC1e,4CAA4C,2BAA2B,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;AAC/N,kDAAkD,0CAA0C;AAC5F,4CAA4C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD;AAC/P,8DAA8D,sEAAsE,8DAA8D,kDAAkD,iBAAiB,GAAG;AACxQ,+BAA+B,uCAAuC;AACtE,qCAAqC,+DAA+D,sCAAsC,0BAA0B,+CAA+C,yCAAyC,uEAAuE;AACnU,eAAe,mBAAO,CAAC,kDAAQ;AAC/B;AACA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,yDAAyD,cAAc;AACvE;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA,CAAC;;;;;;;;;;;ACtLY;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/FA;AACA;;AAEa;;AAEb,iCAAiC,0GAAgC;AACjE;AACA;AACA;AACA;AACA;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrFA;AACA;AACA;;;;;;;;;;;;ACFA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,0GAAgC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,+BAA+B,mBAAO,CAAC,iGAAiB;AACxD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;;;;;;;;;;ACrFa;;AAEb,4BAA4B,0GAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrBA,sGAA+C;;;;;;;;;;;;;ACA/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;;AAEA;AACA;AACA;;AAEA,OAAO,mBAAO,CAAC,iBAAI;AACnB;AACA,cAAc,mBAAO,CAAC,4BAAe;AACrC,aAAa,mBAAO,CAAC,6CAAM;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA,yBAAyB,wEAAoB;;AAE7C;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,6DAAQ;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,0BAA0B;AAC1B;AACA,uCAAuC,iDAAiD;AACxF,WAAW;AACX,yCAAyC,SAAS;AAClD;AACA;AACA,SAAS;AACT;AACA,0BAA0B;AAC1B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,2BAA2B,qBAAqB;AACpF;AACA,iCAAiC,2BAA2B;AAC5D;AACA,mDAAmD,mBAAmB;AACtE;AACA;AACA,IAAI;AACJ,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAwB;AACxB,mBAAmB;;AAEnB;AACA;AACA,sCAAsC;AACtC;AACA,8DAA8D,SAAS,kBAAkB;AACzF,QAAQ,8BAA8B;AACtC;AACA,mCAAmC,SAAS,oBAAoB;AAChE;AACA,MAAM;AACN;AACA,qBAAqB,SAAS,gBAAgB;AAC9C;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,MAAM,YAAY;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA,2BAA2B;;AAE3B,gBAAgB;AAChB;;AAEA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA,mCAAmC;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU,YAAY;AACtB,uCAAuC;AACvC;AACA;AACA,YAAY,YAAY;AACxB;AACA;;AAEA,MAAM;AACN;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,UAAU,YAAY;AACtB,QAAQ;AACR;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU,YAAY;AACtB;AACA;AACA,GAAG;;AAEH,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC;AAChC,yCAAyC;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD;AACpD;;AAEA,gCAAgC;AAChC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,iEAAiE;AACnF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG,IAAI;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD,oBAAoB;;AAEvE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,8CAA8C;AAC7E;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oCAAoC;AACpC,iBAAiB,sBAAsB;AACvC,UAAU;AACV;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,2BAA2B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA,oBAAoB,oBAAoB,gBAAgB;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC;AAClC,8BAA8B;;AAE9B;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;;AAEA,wCAAwC;;AAExC;AACA,8DAA8D;AAC9D;AACA,0BAA0B;AAC1B;AACA,UAAU,OAAO;AACjB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,oBAAoB;AACpD;;AAEA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C,6BAA6B,mBAAmB;AAChD,4BAA4B,mBAAmB;AAC/C,yBAAyB,gBAAgB,gBAAgB;;AAEzD;;AAEA,yBAAyB;AACzB;AACA,6BAA6B;AAC7B;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,cAAc;AACd;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,wBAAwB,sDAAsD;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA,KAAK;AACL,GAAG;;AAEH;AACA,sBAAsB,0CAA0C;;AAEhE;AACA;;AAEA;;AAEA,qBAAqB;AACrB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,qDAAqD,EAAE,gCAAgC,KAAK,6CAA6C,KAAK;AAC9I;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2EAA2E;AAC3E,2EAA2E;AAC3E;AACA,OAAO,wBAAwB;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mBAAmB;AACnB,wDAAwD,6BAA6B;AACrF;AACA,qBAAqB;AACrB;AACA;;AAEA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,qCAAqC;AACrC;AACA,sCAAsC;AACtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,0DAA0D;AAC1D,cAAc;AACd;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iBAAiB,iDAAiD;AAClE;AACA;;AAEA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;;AAEA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,8BAA8B;AAC7C,qBAAqB,8BAA8B;;AAEnD,kBAAkB;AAClB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,gBAAgB;;AAEnC;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA;AACA,gBAAgB,gBAAgB;AAChC,iBAAiB,gBAAgB;AACjC,mBAAmB,gBAAgB;AACnC,eAAe,gBAAgB;AAC/B,qBAAqB,gBAAgB;;;;;;;;;;;;ACrxCzB;AACZ,aAAa,gFAAwB;AACrC,eAAe,mBAAO,CAAC,iEAAU;AACjC,eAAe,mBAAO,CAAC,wDAAW;;AAElC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM,OAAO;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AClKA;AACA;AACA,aAAa,mBAAO,CAAC,kDAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChEA,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uBAAuB,gBAAgB;AACvC;AACA;;AAEA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AChFA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,cAAc,mBAAO,CAAC,+CAAO;AAC7B,eAAe,mBAAO,CAAC,iDAAQ;AAC/B,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;AACnC,iBAAiB,mBAAO,CAAC,qDAAU;;;;;;;;;;;ACdnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,qDAAU;AAC/B,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACtIA,eAAe,mBAAO,CAAC,iEAAU;AACjC,aAAa,mBAAO,CAAC,qDAAU;AAC/B,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACxDA,eAAe,mBAAO,CAAC,iEAAU;AACjC,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,aAAa,0FAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAS,uFAA8B;AACvC,eAAe,mBAAO,CAAC,iEAAU;;AAEjC;AACA,kBAAkB,mBAAO,CAAC,2GAAyC;AACnE,kBAAkB,mBAAO,CAAC,2GAAyC;AACnE,gBAAgB,mBAAO,CAAC,uGAAuC;AAC/D,mBAAmB,mBAAO,CAAC,6GAA0C;AACrE,qBAAqB,mBAAO,CAAC,iHAA4C;AACzE,kBAAkB,mBAAO,CAAC,uIAAuD;AACjF,kBAAkB,mBAAO,CAAC,6HAAkD;;AAE5E;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;;;;;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,0FAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;ACvSA,iBAAiB,mBAAO,CAAC,8EAAmB;;AAE5C;;;;;;;;;;;ACFA,eAAe,mBAAO,CAAC,6EAAiB;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iBAAiB,aAAa,uBAAuB,8BAA8B,qBAAqB,mCAAmC,aAAa,qBAAqB,mCAAmC,oBAAoB;AACrQ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,6EAA6E;AAC7E;AACA;AACA,oDAAoD;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,8EAA8E;AAC9E;AACA;AACA,qDAAqD;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtMA,eAAe,mBAAO,CAAC,6EAAiB;AACxC,UAAU,mBAAO,CAAC,qEAAa;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,YAAY;AACxB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,uBAAuB;;AAEvB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;AACnB;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;AACzB,2CAA2C;AAC3C,2CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC7WA,YAAY,mBAAO,CAAC,mEAAY;AAChC,iBAAiB,mBAAO,CAAC,6EAAiB;AAC1C,UAAU,mBAAO,CAAC,qEAAa;AAC/B,aAAa,mBAAO,CAAC,6EAAiB;AACtC,mBAAmB,mBAAO,CAAC,iFAAmB;;AAE9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B;;AAE9B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,6CAA6C;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,kDAAkD,QAAQ;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wEAAwE;;AAExE;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,iBAAiB;AAC7B,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oEAAoE;AACpE,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA,6BAA6B;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,wBAAwB;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,SAAS;AACrB;AACA;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;AACA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,4CAA4C,QAAQ;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACr8BA,YAAY,mBAAO,CAAC,qEAAa;AACjC;;AAEA;AACA,iBAAiB,MAAK;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,aAAa;AAC3B;AACA;AACA;AACA,eAAe;AACf,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,aAAa,YAAY;AACzB,aAAa,WAAW;AACxB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA,aAAa,OAAO;AACpB,cAAc,eAAe;AAC7B,cAAc,cAAc;AAC5B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc;AACd;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AChPA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;;;AAG9B;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;AC1ID;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,SAAS;AACvB,cAAc,WAAW;AACzB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B,cAAc,WAAW;AACzB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc,+BAA+B;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,UAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,cAAc,eAAe;AAC7B,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACvSA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,iBAAI;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,4EAAe;AAC7C;AACA,2DAA2D,qBAAqB;AAChF;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ,kDAAkD,EAAE;AACpD;AACA,IAAI;AACJ,IAAI;AACJ;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,6BAA6B;AAC7B,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B,gCAAgC;AAChC,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,8BAA8B;AAC9B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qEAAqE;AACzG;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,aAAa,gHAAgH;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO;AAChB,QAAQ,OAAO;AACf;AACA;AACA,KAAK;AACL,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,WAAW;AACX;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,cAAc;AACd;AACA,KAAK;AACL,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA,0DAA0D,4CAA4C;AACtG,SAAS;AACT;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yDAAyD;AAC7D;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,IAAI,0DAA0D;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wCAAwC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kDAAkD;AAClD,kEAAkE;AAClE,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4CAA4C;AAC5C,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oDAAoD;AAC/D,WAAW,0BAA0B;AACrC,WAAW,EAAE,YAAY;AACzB,WAAW,+BAA+B;AAC1C,WAAW,cAAc;AACzB,UAAU,eAAe;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,UAAU,cAAc;AACxB,UAAU,4DAA4D;AACtE;AACA;AACA;AACA,IAAI;AACJ,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,2EAA2E;AAC3E,iFAAiF;AACjF,uEAAuE;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iCAAiC;AACnD;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAkD;AACtE;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,uCAAuC,0CAA0C;AACjF;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA,cAAc,yCAAyC;AACvD,MAAM;AACN,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH,uCAAuC;AAC7J;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yCAAyC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,6CAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,UAAU,sBAAsB;AACzE;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sCAAsC;AACzD;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,iBAAI;AACzB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,gEAAgE;AAChE,4DAA4D;AAC5D,0DAA0D;AAC1D,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,KAAK;AACL;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW,cAAc;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB,yBAAyB;AACzB;AACA,2CAA2C;AAC3C;AACA,yCAAyC;AACzC,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,mBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,cAAc;AACd;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,sCAAsC;AACtC,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,YAAY;AACZ;AACA,+CAA+C;AAC/C,4CAA4C;AAC5C,uBAAuB;AACvB,2EAA2E;AAC3E,gBAAgB;AAChB,cAAc,MAAM;AACpB,yEAAyE;AACzE,aAAa;AACb,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,yBAAyB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAM;AAC7B;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,qBAAqB,qBAAqB;AAC1C;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,4BAA4B;AAC5B,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,iCAAiC;AACjC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,gCAAgC;AAChC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,oCAAoC;AACpC,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B,KAAK;AACL;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,kDAAkD;AAClD;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oCAAoC;AAC3D;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ,4BAA4B;AACpC;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR,mBAAmB;AACnB;AACA;AACA;AACA;AACA,iDAAiD,eAAe;AAChE,iDAAiD,eAAe;AAChE,iDAAiD,gBAAgB;AACjE,iDAAiD,gBAAgB;AACjE,kDAAkD,cAAc;AAChE,kDAAkD,cAAc;AAChE,kDAAkD,cAAc;AAChE;AACA;AACA;AACA;AACA,wDAAwD;AACxD,yDAAyD;AACzD,0CAA0C;AAC1C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,8CAA8C,gDAAgD;AAC9F;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8IAA8I,uFAAuF;AACrO,mDAAmD,2CAA2C,gDAAgD,uFAAuF;AACrO,gJAAgJ,uFAAuF;AACvO,gLAAgL,uFAAuF;AACvQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mLAAmL;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO,4BAA4B;AACnC;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,kBAAkB;AAClB;AACA;AACA;AACA;AACA,gDAAgD,eAAe;AAC/D,gDAAgD,eAAe;AAC/D,gDAAgD,gBAAgB;AAChE,gDAAgD,gBAAgB;AAChE,iDAAiD,cAAc;AAC/D,iDAAiD,cAAc;AAC/D,iDAAiD,cAAc;AAC/D;AACA;AACA;AACA;AACA,uDAAuD;AACvD,wDAAwD;AACxD,yCAAyC;AACzC;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAA6C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,qCAAqC;AACrC;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,6CAA6C;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,gDAAgD,QAAQ;AACxD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAA6C;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C,qCAAqC,yBAAyB;AAC9D,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,sCAAsC,yBAAyB;AAC/D,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,2CAA2C,UAAU,wBAAwB;AAC7E;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,2CAA2C,UAAU,wBAAwB;AAC7E;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAA6C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,qBAAqB,sBAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,oBAAoB;AACpB;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,gQAAgQ;AAChQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qCAAqC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,qBAAqB;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+dAA+d,+BAA+B;AAC9f;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK,gBAAgB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,KAAK,IAA6B;AAClC;AACA,GAAG,KAAK,EAEN;AACF;AACA,CAAC;;;;;;;;;;;;AC14RD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,UAAU;AACvB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,SAAS,qBAAM;AACf,IAAI;AACJ;AACA;AACA,YAAY,qBAAM;AAClB;AACA;AACA;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,wBAAwB,SAAS;AACjC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,kBAAkB,qBAAM;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;;AAGf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,sHAAgD;;AAEhD;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,WAAW;AACX;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,WAAW,UAAU;AACrB;AACA,2HAAsC;;AAEtC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACzkBA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,iBAAiB;AACjB;AACA;;AAEA,oBAAoB;AACpB;AACA;;AAEA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;ACpJa;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,oBAAoB;AACpB,mBAAO,CAAC,oEAAe;AACvB,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,6BAA6B,mBAAO,CAAC,8EAAoB;AACzD,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,kBAAkB,mBAAO,CAAC,wDAAS;AACnC,WAAW,mBAAO,CAAC,uEAAY;AAC/B;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wBAAwB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC;AAChC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC;AAChC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ,IAAI;AACpC,cAAc,mCAAmC,EAAE;AACnD,cAAc,mCAAmC,EAAE;AACnD,cAAc,+BAA+B,EAAE;AAC/C,cAAc,+BAA+B,EAAE;AAC/C,cAAc,+BAA+B,EAAE;AAC/C,cAAc,mCAAmC,EAAE;AACnD,cAAc,mCAAmC,EAAE;AACnD,cAAc,QAAQ,IAAI,QAAQ;AAClC,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,+BAA+B;AAC/B;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB;;;;;;;;;;;;AC1lBP;AACb;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,0CAAU;AAC/B,aAAa,mBAAO,CAAC,kDAAc;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A;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACjCa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTa;;AAEb;AACA;AACA,cAAc,KAAwC,GAAG,sBAAiB,GAAG,CAAI;AACjF;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTa;;AAEb;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yDAAyD;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5Da;;AAEb;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACba;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,kBAAkB;AAClB,mBAAO,CAAC,oEAAe;AACvB,mBAAmB,mBAAO,CAAC,0DAAU;AACrC,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C,kBAAkB,mBAAO,CAAC,wDAAS;AACnC,WAAW,mBAAO,CAAC,uEAAY;AAC/B,gBAAgB,mBAAO,CAAC,gDAAmB;AAC3C;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,oBAAoB;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mCAAmC;AAC1E;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,uBAAuB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,GAAG;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC;AACA;AACA,gBAAgB,OAAO,GAAG,OAAO;AACjC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU,GAAG;AACzC,gBAAgB,eAAe,GAAG,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC,gBAAgB,GAAG,IAAI,GAAG;AAC1B;AACA;AACA;AACA,4BAA4B,GAAG,IAAI;AACnC;AACA;AACA,gBAAgB,OAAO,GAAG,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA,gCAAgC,GAAG,IAAI;AACvC,kBAAkB,oBAAoB,IAAI,GAAG;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,GAAG,IAAI;AACvC,oBAAoB,eAAe,EAAE,cAAc;AACnD,gBAAgB,eAAe,EAAE,cAAc;AAC/C,gBAAgB,IAAI,EAAE,GAAG;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,IAAI,EAAE;AAC9B,gBAAgB,eAAe,EAAE,GAAG;AACpC,gBAAgB,eAAe,EAAE,GAAG;AACpC,gBAAgB,IAAI,EAAE,GAAG;AACzB,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;;;;;;;;;;;;AC33BL;AACb;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,wCAAU;AAC/B,aAAa,mBAAO,CAAC,gDAAc;AACnC,aAAa,mBAAO,CAAC,sCAAS;;;;;;;;;;;;AClBjB;AACb,8CAA6C,EAAE,aAAa,EAAC;;;;;;;;;;;;ACDhD;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,KAAK,EAAE;AAC3B,cAAc,iBAAiB,EAAE,aAAa;AAC9C,cAAc,iBAAiB,EAAE,aAAa;AAC9C,cAAc,KAAK,EAAE,aAAa;AAClC;AACA;;;;;;;;;;;;AClBa;AACb;AACA;AACA;AACA;AACA,eAAe,oCAAoC;AACnD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,aAAa,mBAAO,CAAC,sCAAS;AAC9B,aAAa,mBAAO,CAAC,wCAAU;AAC/B,aAAa,mBAAO,CAAC,oCAAQ;AAC7B,aAAa,mBAAO,CAAC,kCAAO;;;;;;;;;;;;ACnBf;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,cAAc;AACd;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;;;;;;;;;;;ACTa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,YAAY;AACZ,uBAAuB,mBAAO,CAAC,kEAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;ACnBa;AACb,8CAA6C,EAAE,aAAa,EAAC;AAC7D,YAAY;AACZ,mBAAmB,mBAAO,CAAC,0DAAU;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,2BAA2B,cAAc;AACzC,8DAA8D;;;AAG9D;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,0HAA0H;AAC1H;AACA;;AAEA,CAAC;;AAED,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iHAAiH;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,0CAA0C,uBAAuB,uBAAuB,uBAAuB;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,kGAAkG;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE,2DAA2D,qCAAqC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gHAAgH;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,0GAA0G;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,4FAA4F;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,sGAAsG;AACtG;AACA,oCAAoC;AACpC,mCAAmC;AACnC;AACA;AACA,wDAAwD;AACxD,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qGAAqG;AACrG;AACA;AACA;AACA;AACA,6BAA6B,UAAU;AACvC;;AAEA,CAAC;;AAED,iHAAiH;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,mMAAmM;AACnM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,mDAAmD,KAAK,KAAK;AAC7D;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uGAAuG,uCAAuC,wBAAwB,gBAAgB,GAAG,+BAA+B,eAAe,wBAAwB,GAAG,uBAAuB,gCAAgC,GAAG,aAAa,8BAA8B,iBAAiB,GAAG,yBAAyB,iBAAiB,GAAG,oCAAoC,8BAA8B,GAAG,iDAAiD,gBAAgB,GAAG,2BAA2B,2BAA2B,GAAG,uCAAuC,4BAA4B,GAAG,wCAAwC,4BAA4B,GAAG,uCAAuC,2BAA2B,GAAG,0BAA0B,2CAA2C,eAAe,GAAG,uCAAuC,4BAA4B,GAAG,uCAAuC,2BAA2B,GAAG,oEAAoE,8BAA8B,GAAG,uCAAuC,8BAA8B,GAAG,yBAAyB,0BAA0B,GAAG,0BAA0B,6BAA6B,GAAG,kCAAkC,4BAA4B,GAAG,0CAA0C,8BAA8B,GAAG,uCAAuC,0BAA0B,GAAG,2BAA2B,6BAA6B,GAAG,yBAAyB,6BAA6B,GAAG,+CAA+C,mBAAmB,GAAG,4BAA4B,2BAA2B,GAAG,uBAAuB,2BAA2B,GAAG,+BAA+B,0BAA0B,GAAG,mCAAmC,4BAA4B,8CAA8C,mCAAmC,GAAG,oDAAoD,kCAAkC,GAAG,uCAAuC,iCAAiC,GAAG,0CAA0C,mCAAmC,GAAG,4CAA4C,0BAA0B,yCAAyC,GAAG,gDAAgD,oCAAoC,GAAG,qCAAqC,iCAAiC,GAAG,kDAAkD,mCAAmC,yCAAyC,GAAG,+BAA+B,qCAAqC,kIAAkI,GAAG,sCAAsC,qCAAqC,8NAA8N,GAAG;;AAE9nG,CAAC;;AAED,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gLAAgL;AAChL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,kCAAkC;AACjF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA,QAAQ,IAA4B;AACpC,qBAAqB,wBAAM;AAC3B;AACA,WAAW;;AAEX;AACA;AACA;AACA,gGAAgG,wBAAM;;AAEtG;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;;AAEA;AACA;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,0BAA0B;AAC5E;AACA,CAAC;;AAED,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,wBAAwB;AACxB;AACA,0BAA0B;AAC1B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,uBAAuB;AACvB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,IAAI;AAC/C;AACA;AACA,SAAS;AACT;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iIAAiI,cAAc;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA,0CAA0C;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,eAAe;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8FAA8F;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,CAAC;;AAED,oNAAoN;AACpN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,oHAAoH;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mEAAmE;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kBAAkB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qBAAqB;AAC/C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,yCAAyC;AAC3G;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+HAA+H;AAC/H;AACA,qBAAqB;AACrB,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,iBAAiB;AACjB;;AAEA,CAAC;;AAED,+FAA+F;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uJAAuJ;AACvJ;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iCAAiC;AAC5E;AACA;AACA,iEAAiE,UAAU;AAC3E;AACA;AACA;AACA,oIAAoI,yBAAyB;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,0KAA0K;AAC1K;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,sCAAsC;AACtC,iCAAiC;AACjC;AACA,kCAAkC,mBAAmB;AACrD;AACA;AACA,gCAAgC,wCAAwC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,wCAAwC;AACjG,4DAA4D,wCAAwC;AACpG,2DAA2D,wCAAwC;AACnG,wDAAwD,wCAAwC;AAChG,wDAAwD,wCAAwC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wBAAwB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oHAAoH,2BAA2B;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,0IAA0I;AAC1I;AACA;AACA;AACA,4CAA4C,YAAY,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,6JAA6J;AAC7J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,kBAAkB,mBAAmB;AAC/E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,iDAAiD;AAC3H,oEAAoE,4CAA4C;AAChH,mEAAmE,2CAA2C;AAC9G,sEAAsE,6CAA6C;AACnH,mEAAmE,4CAA4C;AAC/G,wDAAwD,4CAA4C;AACpG,sEAAsE,0DAA0D;AAChI;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,uBAAuB,4CAA4C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA,CAAC;;AAED,wSAAwS;AACxS;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB,mBAAmB,kBAAkB,iBAAiB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,iBAAiB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,mBAAmB,iBAAiB;AACpC,iBAAiB,2CAA2C;AAC5D,mBAAmB,oBAAoB;AACvC,oBAAoB,iBAAiB;AACrC,2BAA2B;AAC3B,CAAC;AACD;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,iCAAiC;AAChG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,uIAAuI;AACvI;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,4CAA4C,IAAI;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA,oBAAoB,kCAAkC,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,kIAAkI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB;AACrF;AACA;AACA;AACA,4CAA4C,qBAAqB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,wBAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,sDAAsD;AACxF;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAsD;AACpF;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+JAA+J;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,IAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yBAAyB;AAC/C;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,uBAAuB;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,kIAAkI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,kBAAkB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,IAAI;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,iCAAiC;AACjC,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,mGAAmG;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,iLAAiL;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,kDAAkD;AAClD,yDAAyD,KAAK;AAC9D;AACA;AACA;AACA;AACA;AACA,uDAAuD,6BAA6B;AACpF;AACA;AACA,oEAAoE;AACpE;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,wEAAwE;AACxE;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,+BAA+B;AAC/B,6DAA6D,KAAK,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA,gCAAgC;AAChC,iEAAiE,4CAA4C,IAAI;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,4CAA4C;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,2CAA2C,GAAG;AAC9C,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,4FAA4F;AAC5F;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,qPAAqP;AACrP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE,uCAAuC,2BAA2B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2BAA2B;AACtE;AACA,2CAA2C,2BAA2B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,aAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA,2EAA2E,aAAa;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,SAAS,gBAAgB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,SAAS,gBAAgB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ,SAAS,cAAc;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,mBAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,gGAAgG;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,iIAAiI;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,oCAAoC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8KAA8K;AAC9K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mBAAmB;AACxD;AACA;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAwB;AACnE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+IAA+I;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,gIAAgI;AAChI;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,wCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,4GAA4G;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,sBAAsB,IAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI;AACjC,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,IAAI;AACvC;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,IAAI;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,0BAA0B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0BAA0B;AACrE;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,UAAU;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uNAAuN;AACvN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2BAA2B;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8BAA8B;AACnE;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,4CAA4C;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,oBAAoB;AACpB;AACA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,gJAAgJ;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,WAAW;AACzD;AACA;AACA,oBAAoB;AACpB,8CAA8C,WAAW;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,WAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf,UAAU,KAAK;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kLAAkL;AAClL;AACA;AACA;AACA;AACA;AACA,sLAAsL;AACtL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,qMAAqM;AACrM;AACA;AACA;AACA;AACA;AACA;AACA,uMAAuM;AACvM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE;AACvE;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2KAA2K;AAC3K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,oMAAoM;AACpM;AACA;AACA,kCAAkC;AAClC,kMAAkM;AAClM;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,mYAAmY;AACnY;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,SAAS;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAe;AAChD,oCAAoC,qBAAqB;AACzD;AACA;AACA;AACA;AACA;AACA,yCAAyC,uBAAuB;AAChE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wBAAwB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,uBAAuB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,4DAA4D,MAAM,0BAA0B,MAAM;AAClG;AACA,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,yBAAyB;AACzB,yBAAyB;AACzB,4BAA4B;AAC5B,4BAA4B;AAC5B,0BAA0B;AAC1B,wBAAwB;AACxB,iCAAiC;AACjC,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,mCAAmC;AAC9D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL,8BAA8B,qBAAqB;AACnD;AACA,8BAA8B,yBAAyB;AACvD;AACA,KAAK;AACL;AACA,8BAA8B,kCAAkC;AAChE;AACA,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D,2BAA2B,mCAAmC;AAC9D;AACA,KAAK;AACL;AACA,8BAA8B,oBAAoB;AAClD,2BAA2B,sBAAsB;AACjD;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,MAAM;AAC5D,+EAA+E,MAAM;AACrF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6EAA6E,EAAE;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,oCAAoC;AACpC,+FAA+F,EAAE,IAAI,EAAE;AACvG;AACA;AACA;AACA,wCAAwC,EAAE,IAAI,EAAE;AAChD,iCAAiC,EAAE,IAAI,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;AACA;;AAEA,CAAC;;AAED,6IAA6I;AAC7I;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC,KAAK;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,4DAA4D,OAAO,UAAU,GAAG;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,sFAAsF,WAAW;AACjG;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;AACrB;AACA,mCAAmC,IAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA,qCAAqC;AACrC;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+KAA+K;AAC/K;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,sJAAsJ;AACtJ;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,kCAAkC;AACpE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB;AACrF,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,mCAAmC;AACrE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,gCAAgC;AACxE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,4BAA4B;AAC9D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sBAAsB;AACxD;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B,iEAAiE;AAC9F;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B,gEAAgE;AAC7F;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0CAA0C;AAC5E;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,iCAAiC;AACnE;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,8BAA8B;AAChE;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kEAAkE,yBAAyB;AAC3F;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,yBAAyB;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,kBAAkB;AACpD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA,uCAAuC,qBAAqB;AAC5D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,qBAAqB;AACvD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,4BAA4B;AAC9D,+CAA+C,gCAAgC;AAC/E;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,sBAAsB;AACxD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,2BAA2B;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C,SAAS;AACT;AACA,KAAK;AACL,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,kCAAkC,yCAAyC;AAC3E;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,6gBAA6gB;AAC7gB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,2DAA2D,iBAAiB;AAC5E;AACA;AACA,qDAAqD,cAAc;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAyC;AAC1E;AACA;AACA;AACA;AACA;AACA,iCAAiC,iCAAiC;AAClE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gCAAgC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA,qCAAqC,eAAe;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,qBAAqB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAW,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,gBAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,qBAAqB;AACjH;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,KAAK;AACnB,cAAc,KAAK;AACnB;AACA;AACA,sCAAsC;AACtC,uBAAuB,kCAAkC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAA0C;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gBAAgB;AAC/C;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA,6BAA6B,oCAAoC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,aAAa;AAChE,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,oCAAoC;AAC/D;AACA,KAAK;AACL;AACA,0CAA0C,4BAA4B;AACtE;AACA,KAAK;AACL;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,2BAA2B;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,yBAAyB,oBAAoB;AAC7C,6BAA6B,oBAAoB;AACjD,wBAAwB,oBAAoB;AAC5C;AACA,8BAA8B;AAC9B,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA,8BAA8B,6BAA6B;AAC3D,2BAA2B,yBAAyB;AACpD;AACA;AACA,KAAK;AACL;AACA,8BAA8B,uBAAuB;AACrD,2BAA2B,sBAAsB;AACjD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,iCAAiC;AAC/D;AACA,KAAK;AACL;AACA,8BAA8B,+BAA+B;AAC7D;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,gCAAgC,YAAY,qBAAqB,OAAO;AACxE;AACA,KAAK;AACL,0CAA0C,OAAO;AACjD;AACA,KAAK;AACL,kCAAkC,OAAO;AACzC;AACA,KAAK;AACL,+BAA+B,OAAO;AACtC;AACA;AACA;AACA,KAAK;AACL,+BAA+B,OAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,8GAA8G;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,mMAAmM;AACnM;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,SAAS;AAC7G;AACA;AACA,oFAAoF,SAAS;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,WAAW;AAC/C,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,2HAA2H;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,6BAA6B,uBAAuB,oBAAoB;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE,uCAAuC;AACvC,mCAAmC;AACnC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG;AAChG,qCAAqC;AACrC,+BAA+B;AAC/B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,mCAAmC;AACnC,+BAA+B;AAC/B,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD,wEAAwE;AACxE,mCAAmC;AACnC,2DAA2D;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,+BAA+B;AAC/B,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA,iDAAiD;AACjD,+BAA+B;AAC/B,oBAAoB,QAAQ;AAC5B;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,oGAAoG;AACpG;AACA;AACA;AACA;;AAEA,CAAC;;AAED,uNAAuN;AACvN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,SAAS;AAC7G;AACA;AACA,kGAAkG,SAAS;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,kBAAkB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA,+CAA+C,OAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,CAAC;;AAED,kKAAkK;AAClK;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gCAAgC;AAChC,iCAAiC;AACjC,iCAAiC;AACjC;AACA;;AAEA,CAAC;;AAED,yKAAyK;AACzK;AACA;AACA;AACA,eAAe,gBAAgB,sCAAsC,kBAAkB;AACvF,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0EAA0E,uBAAuB,yCAAyC,gCAAgC,2BAA2B,2BAA2B,uBAAuB,eAAe,GAAG,gDAAgD,uBAAuB,eAAe,qBAAqB,+BAA+B,GAAG,yBAAyB,eAAe,aAAa,WAAW,gBAAgB,GAAG,6BAA6B,eAAe,aAAa,gBAAgB,GAAG,yBAAyB,cAAc,YAAY,iBAAiB,GAAG,6BAA6B,cAAc,iBAAiB,GAAG,+BAA+B,eAAe,qBAAqB,GAAG;AACjwB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,uCAAuC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0CAA0C;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,uBAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,gCAAgC;AAChC,iCAAiC;AACjC,iCAAiC;AACjC;AACA;;AAEA,CAAC;;AAED,+GAA+G;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,8MAA8M;AAC9M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,YAAY;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,6cAA6c;AAC7c;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,gCAAgC,uBAAuB;AACvD;AACA,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,iCAAiC,cAAc,gCAAgC;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,oCAAoC,sCAAsC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA,2BAA2B,4BAA4B;AACvD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA,8BAA8B,qBAAqB;AACnD,2BAA2B,qCAAqC;AAChE;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qEAAqE;AACrE;AACA,mCAAmC,iCAAiC;AACpE,MAAM,YAAY;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,0BAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,wCAAwC,eAAe;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,yBAAyB;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,0DAA0D,qBAAqB,iBAAiB;AAChG;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iCAAiC,QAAQ;AACzC;;AAEA,CAAC;;;AAGD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,UAAU;AAC1C;AACA;AACA,0BAA0B,yCAAyC;AACnE;AACA;AACA,0BAA0B,sCAAsC;AAChE;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;;AAGA,CAAC;;AAED,kJAAkJ;AAClJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,qDAAqD,QAAQ;AAC7D;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,mJAAmJ;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,wBAAwB;AACxE;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+IAA+I;AAC/I;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D,mBAAmB,wCAAwC;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,4BAA4B;AAC9D,mBAAmB,4CAA4C;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mCAAmC;AACrE,mBAAmB,oDAAoD;AACvE;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,kCAAkC;AACpE,mBAAmB,wDAAwD;AAC3E;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,wBAAwB;AAC1D,mBAAmB,4CAA4C;AAC/D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,uBAAuB;AACzD,mBAAmB,8CAA8C;AACjE;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,8BAA8B;AAChE,mBAAmB,wDAAwD;AAC3E;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,6BAA6B;AAC/D,mBAAmB,0DAA0D;AAC7E;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,sCAAsC;AACzD;AACA,KAAK;AACL;AACA;AACA,kCAAkC,sCAAsC;AACxE;AACA,KAAK;AACL;AACA;AACA,kCAAkC,wBAAwB;AAC1D,mBAAmB,sCAAsC;AACzD;AACA,KAAK;AACL;AACA;AACA,kCAAkC,mBAAmB;AACrD,mBAAmB,sCAAsC;AACzD;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;AACA;;AAEA,CAAC;;AAED,6SAA6S;AAC7S,aAAa,2BAA2B;AACxC,aAAa,qCAAqC;AAClD,aAAa,iDAAiD;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,IAAI;AACzC;AACA;AACA;AACA,sCAAsC,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,IAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAe;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,wBAAwB;AAC/E;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,wBAAwB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;;AAED,CAAC;;AAED,uHAAuH;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,4IAA4I;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,2BAA2B;AACjF;AACA,kDAAkD,8BAA8B,yBAAyB,4BAA4B,qBAAqB,gCAAgC,mCAAmC,wBAAwB,6BAA6B,gCAAgC,OAAO,6DAA6D,sCAAsC,iEAAiE,sCAAsC,2DAA2D,sCAAsC,uDAAuD,sCAAsC,2BAA2B,6BAA6B,4BAA4B,kDAAkD,oDAAoD,mDAAmD,oBAAoB,OAAO;;AAEz8B,CAAC;;AAED,gYAAgY;AAChY;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,cAAc;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kFAAkF;AAClF,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,KAAuD;AAC/E;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;;;;;;;;;;;ACh9qBA,sQAAsQ;AACtQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,kCAAkC,gCAAgC;AAClE,kCAAkC,mBAAmB;AACrD,4BAA4B,mBAAmB;AAC/C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,oCAAoC,iBAAiB;AACrD,0CAA0C,iBAAiB;AAC3D,qCAAqC,kBAAkB;AACvD,0CAA0C,eAAe;AACzD,gDAAgD,gBAAgB;AAChE,oCAAoC,gBAAgB;AACpD,wCAAwC,iBAAiB;AACzD,8CAA8C,kBAAkB;AAChE,oCAAoC,gCAAgC;AACpE,sCAAsC,mBAAmB;AACzD,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8BAA8B;AACxD,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,kBAAkB,SAAS;AAC3B;AACA,uBAAuB;AACvB,kBAAkB,+CAA+C;AACjE,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,yBAAyB;AACzB,qCAAqC;AACrC,yBAAyB;AACzB;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA,kBAAkB;AAClB;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,uBAAuB;AACvB,kBAAkB;AAClB;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,uBAAuB;AACvB,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC,kBAAkB;AAClB,kCAAkC,oBAAoB;AACtD,uBAAuB;AACvB,kBAAkB,WAAW;AAC7B,sCAAsC;AACtC;AACA;AACA,qBAAqB,2BAA2B;AAChD,kBAAkB,6CAA6C;AAC/D,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA,qBAAqB,wBAAwB;AAC7C,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,qBAAqB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,IAAI;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,2CAA2C,cAAc;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,+BAA+B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,qCAAqC,gBAAgB;AACrD;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,uCAAuC;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,kCAAkC,6BAA6B,4CAA4C,mDAAmD,yBAAyB,GAAG;AACtO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,CAAC;;AAED,qOAAqO;AACrO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oEAAoE,UAAU;AAC9E,iDAAiD,kBAAkB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA,sCAAsC,kBAAkB;AACxD,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uCAAuC;AACjE;AACA,8BAA8B,2CAA2C;AACzE;AACA,8BAA8B,iDAAiD;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,wFAAwF,gCAAgC,iBAAiB,GAAG,4EAA4E,gCAAgC,GAAG,gDAAgD,gCAAgC,uBAAuB,wCAAwC,yBAAyB,iBAAiB,GAAG,yDAAyD,gDAAgD,0CAA0C,GAAG,wBAAwB,mBAAmB,yBAAyB,GAAG,2BAA2B,yBAAyB,kBAAkB,GAAG,yDAAyD,qBAAqB,GAAG,kEAAkE,qBAAqB,GAAG,gCAAgC,mBAAmB,sBAAsB,kCAAkC,sBAAsB,6CAA6C,uBAAuB,0BAA0B,kBAAkB,GAAG,yCAAyC,gCAAgC,kDAAkD,uBAAuB,0BAA0B,qBAAqB,GAAG,sCAAsC,8BAA8B,GAAG,+BAA+B,oBAAoB,0BAA0B,GAAG,mCAAmC,mBAAmB,qBAAqB,GAAG,qCAAqC,qBAAqB,uBAAuB,8BAA8B,GAAG,4CAA4C,cAAc,GAAG,wCAAwC,oBAAoB,yBAAyB,eAAe,kBAAkB,gBAAgB,uBAAuB,mBAAmB,iDAAiD,6BAA6B,6CAA6C,GAAG,2BAA2B,WAAW,wCAAwC,YAAY,wCAAwC,aAAa,yCAAyC,GAAG,mCAAmC,2CAA2C,gDAAgD,0BAA0B,QAAQ,GAAG;AACh2E;AACA;AACA;;AAEA,CAAC;;AAED,qHAAqH;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,uCAAuC;AACpG,kCAAkC,uCAAuC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gCAAgC;AAC5E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gCAAgC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,8JAA8J;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA,CAAC;;AAED,sGAAsG;AACtG;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,2TAA2T;AAC3T;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT,yDAAyD,aAAa;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,qCAAqC;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,eAAe;AAChF;AACA;AACA;AACA;AACA;AACA,iEAAiE,eAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,eAAe;AACnF;AACA;AACA,qEAAqE,eAAe;AACpF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sDAAsD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,4BAA4B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,8BAA8B,8BAA8B;AAC5D,gCAAgC,gCAAgC;AAChE,6CAA6C,iCAAiC;AAC9E,8CAA8C,+BAA+B;AAC7E,+BAA+B,4BAA4B;AAC3D,kCAAkC,wCAAwC;AAC1E,wCAAwC,qCAAqC,oBAAoB,IAAI;AACrG;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,kCAAkC,sCAAsC;AACxE,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,uBAAuB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,mBAAmB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,gDAAgD;AACvG,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,CAAC;;AAED,iGAAiG;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;;AAEA,CAAC;;AAED,4HAA4H;AAC5H;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,CAAC;;AAED,4QAA4Q;AAC5Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,IAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;AAEA,CAAC,kBAAkB;AACnB;AACA,4BAA4B,KAAuD;AACnF;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;;;;;;;;;ACnqFA,2JAA2J;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED,+JAA+J;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,UAAU;AAC7C,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,UAAU;AACV;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACvDe;AACf;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACNuC;;AAExB,oCAAoC,qDAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yDAAS;AACrB,YAAY,yDAAS;AACrB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC5Be;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACrBe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBe;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACF2B;AACU;AACV;AACU;AACM;AACC;AACD;AACN;;AAEtB;AACf,6BAA6B,mDAAO;AACpC;AACA,8BAA8B,mDAAG;AACjC,qBAAqB,mDAAG;AACxB;AACA;AACA;AACA,eAAe,mDAAG,CAAC,2DAAW;AAC9B,eAAe,mDAAG;AAClB;AACA;;AAEO,6CAA6C,kDAAM;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,4CAA4C,kDAAM;AACzD;AACA,gDAAgD,sDAAM;AACtD,qBAAqB,wDAAQ;AAC7B,qBAAqB,wDAAQ;AAC7B;AACA;AACA;AACA;AACA,EAAE,2DAAW,2BAA2B,0DAAgB;AACxD,MAAM,wDAAQ;AACd;AACA;;;;;;;;;;;;;;;;;AC9C2D;;AAE3D;AACA;AACe;AACf;AACA;AACA;;AAEA;;AAEA,oCAAoC,sDAAgB,GAAG,wDAAc;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpDe;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACZuC;AACJ;;AAEpB;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA,WAAW,uDAAO;AAClB;AACA;AACA;;AAEO,kCAAkC,qDAAS;AAClD,kBAAkB,qDAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC,IAAI;AACJ,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACtD2C;;AAEpC;;AAEA;AACA;;AAEP;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAM;AACN;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY;AACrD;;AAEA;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,oDAAoD;AAC3G;;AAEA;AACA;AACA,YAAY,2BAA2B,EAAE,eAAe,IAAI,eAAe,IAAI,eAAe,EAAE,qBAAqB,EAAE,GAAG;AAC1H;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM;AACvB;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,cAAc,2BAA2B,EAAE,eAAe,IAAI,qBAAqB,KAAK,qBAAqB,GAAG,qBAAqB,EAAE,GAAG;AAC1I;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC3Y2C;AACyB;AACzB;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,0CAAG,OAAO,qDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,6CAAO;AACzC;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,uBAAuB,kDAAM,CAAC,4CAAK;AACzC;AACA,oBAAoB,+CAAQ,YAAY,+CAAQ;AAChD;AACA,GAAG;AACH;AACA,oBAAoB,6CAAM,YAAY,6CAAM;AAC5C;AACA,GAAG;AACH;AACA,iDAAiD,6CAAO;AACxD;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;;;;AC5DD,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACTsD;AACE;AACJ;;;;;;;;;;;;;;;;;;;;;;;;ACFT;AACO;AACP;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,0CAAG,OAAO,qDAAU;AACzC;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEe;AACf;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA,sDAAM,WAAW,kDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC,6CAAO;AACxC;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,6CAAO;AACvB;AACA;;AAEA,sDAAM,WAAW,kDAAM,CAAC,4CAAK;AAC7B;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;;;;AC1HM;AACA;;;;;;;;;;;;;;;;ACDP,YAAY;;AAEZ;AACA,8CAA8C,KAAK,OAAO;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA,mFAAmF,OAAO;AAC1F;AACA,gDAAgD,OAAO;AACvD,GAAG;AACH;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;;AAEA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B;AAC/D;AACA;;AAEA,iEAAe,QAAQ,EAAC;;;;;;;;;;;;;;;;ACnFxB,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;;;;;;;;ACAS;AACQ;AACD;AACuC;AAC9C;AACF;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,wBAAwB;AAC9C;;AAEA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA,mBAAmB;AACnB,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mDAAU;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,wDAAM;AACV,wCAAwC,0DAAiB;AACzD,sCAAsC,0DAAiB;AACvD,IAAI,sDAAM;AACV,IAAI,0DAAa;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,uDAAO;AACX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,wDAAM;AACV,IAAI,mDAAO;AACX,IAAI,uDAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA,QAAQ,0DAAa;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA,QAAQ,uDAAO;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C,qBAAqB,QAAQ;AACvE,gBAAgB,OAAO;AACvB;AACA,QAAQ,0DAAa;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,wDAAO;AACnB;;AAEA,oCAAoC,iDAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA,oEAAoE;AACpE,2DAA2D;AAC3D,yBAAyB,wDAAO,yCAAyC;AACzE;AACA;AACA;AACA;AACA,YAAY,iDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA,uEAAuE,wDAAQ;AAC/E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACjMe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,cAAc,qDAAqD;AACnE,aAAa,oDAAoD;AACjE,iBAAiB,wDAAwD;AACzE,aAAa,oDAAoD;AACjE,QAAQ,+CAA+C;AACvD,QAAQ,+CAA+C;AACvD,SAAS,gDAAgD;AACzD,SAAS,gDAAgD;AACzD,QAAQ;AACR,GAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3BoC;AACoB;;AAExD,6BAAe,oCAAS;AACxB;AACA,kBAAkB,wDAAM,4BAA4B,mDAAO,EAAE,0DAAiB;AAC9E;AACA,qCAAqC,mDAAO,EAAE,0DAAiB;AAC/D,IAAI;AACJ;AACA;AACA;AACA;;AAEO;AACP;AACA,kBAAkB,wDAAM;AACxB;AACA,+BAA+B,mDAAO,EAAE,0DAAiB;AACzD,4BAA4B,mCAAmC;AAC/D;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AACO,oBAAoB;AACpB,2BAA2B;;AAE3B;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACZ2B;;AAE3B,UAAU,mDAAG;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACVP,YAAY;AACZ,YAAY;AACZ;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA,GAAG,gBAAgB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACnK2B;;AAE3B,UAAU,mDAAG;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACVA;AACP;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;;;;ACPqD;AACxB;;AAE7B;AACA;AACA;AACA,WAAW,oDAAI;AACf;AACA,KAAK;AACL;AACA;;AAEe;AACf;AACA,eAAe,kDAAS;AACxB,SAAS,oDAAI;AACb;AACA,GAAG;AACH;;AAEO,mBAAmB,4CAAQ;AAC3B,mBAAmB,4CAAQ;;;;;;;;;;;;;;;;ACrBlC,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACR0C;AACI;AACI;AACN;AACF;AACA;AACS;;;;;;;;;;;;;;;;ACNnD;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;ACP6B;;AAE7B;AACA,0BAA0B,oDAAI;AAC9B;AACA;;AAEA,iEAAe,yBAAyB,EAAC;;AAElC;;AAEA;;;;;;;;;;;;;;;;ACXP,6BAAe,oCAAS;AACxB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;;AAEA,4EAA4E,OAAO;AACnF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;ACvCqC;AACA;AACJ;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA,6CAA6C,wDAAQ;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC,aAAa,uDAAQ;AACrB,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAM;AACnC,6BAA6B,sDAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA;;;;;;;;;;;;;;;;ACnGA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA,sBAAsB;;AAEtB,6BAAe,sCAAW;AAC1B;AACA;AACA;;;;;;;;;;;;;;;;;;ACRqC;AACJ;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA,iBAAiB,wDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,gBAAgB;AACtD,wDAAwD,OAAO;AAC/D;AACA,2DAA2D,sDAAM;AACjE,2DAA2D,sDAAM;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC,OAAO;AAC5C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACpHqC;AACA;AACJ;AACI;;AAErC,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA,iBAAiB,wDAAQ;AACzB;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,uDAAQ,QAAQ,6CAAC,EAAE,6CAAC;AACxD,2BAA2B,OAAO;AAClC;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;;AAEA;AACA;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA;AACA,yBAAyB,sDAAM;AAC/B,yBAAyB,sDAAM;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0CAA0C;AAC1C;AACA,uBAAuB,sDAAM;AAC7B,uBAAuB,sDAAM;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE,wDAAQ;AAChF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;ACnHqC;AACN;AACJ;;AAEpB;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+CAAK;AACrB,cAAc,uDAAQ;AACtB,eAAe,mDAAG;;AAElB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,oBAAoB,gBAAgB;AACpC;;AAEA;AACA;AACA,OAAO;;AAEP,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3JuC;;AAEvC;AACO;AACA;;AAEP;AACA;AACA;AACA;AACA,CAAC;;AAEc;AACf,WAAW,sDAAY;AACvB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjBsD;;AAEtD,6BAAe,oCAAS;AACxB,aAAa,qEAAkB;AAC/B;;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP,gGAAgG;AAChG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACjBA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;;;;;ACNsD;;AAE/C;;AAEP,6BAAe,oCAAS;AACxB,UAAU,qEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAkB,gCAAgC;AAC9F;;;;;;;;;;;;;;;;;ACfsD;;AAEtD,6BAAe,oCAAS;AACxB,UAAU,qEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACVA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,uDAAuD;;AAEhD;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9CA;AACA,6BAAe,oCAAS;AACxB,kDAAkD,OAAO;AACzD;AACA,6BAA6B;AAC7B,sCAAsC,QAAQ;AAC9C,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACV+C;AACM;AACN;;AAE/C,iEAAe;AACf;AACA;AACA;AACA,OAAO,yDAAa;AACpB;AACA;AACA;AACA;AACA,iBAAiB,6DAAa;AAC9B,OAAO,yDAAa;AACpB,OAAO,4DAAgB;AACvB;AACA;AACA,CAAC,EAAC;;;;;;;;;;;;;;;;AClBF,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACFqC;AACM;AACM;AACE;AACV;AACE;AACU;AAChB;;AAErC;AACA;;AAEA,6BAAe,oCAAS;AACxB,gFAAgF,oDAAQ,GAAG,2DAAW;AACtG;AACA;AACA;AACA,iDAAiD,oDAAQ,GAAG,8DAAc;AAC1E;AACA;AACA;;AAEA;AACA,gBAAgB,+DAAe;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,uDAAW;;AAEzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B,0DAAU;;AAEpC;AACA;;AAEA;AACA;AACA,mDAAmD,gEAAc;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,uEAAuE;AACvE,sIAAsI;AACtI,sEAAsE;AACtE;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mCAAmC,+DAAe;AAClD,gDAAgD,wDAAQ;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnJqC;;AAErC,6BAAe,oCAAS;AACxB,sBAAsB,wDAAQ;AAC9B;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB,yDAAyD,wDAAQ,qBAAqB,wDAAQ;AAC9F;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB;AACA,qBAAqB,wDAAQ,QAAQ,wDAAQ;AAC7C;;;;;;;;;;;;;;;;;ACLO;AACP;AACA;;AAEO;AACP;AACA;AACA;;;;;;;;;;;;;;;;;ACPA,6BAAe,oCAAS;AACxB;AACA;AACA,qBAAqB;AACrB;;AAEO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;ACnFO;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACXA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACFA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACdA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACXA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPoC;AACF;AACY;AACF;AACV;AACF;AACE;AACA;AACU;AACI;AACV;AACF;AACM;;AAE3B;AACf;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,iDAAU;AACnB,QAAQ,gDAAS;AACjB,aAAa,qDAAc;AAC3B,cAAc,sDAAe;AAC7B,QAAQ,gDAAS;AACjB,OAAO,+CAAQ;AACf,QAAQ,gDAAS;AACjB,QAAQ,gDAAS;AACjB,aAAa,qDAAc;AAC3B,eAAe,uDAAgB;AAC/B,UAAU,mDAAW;AACrB,SAAS,kDAAU;AACnB;AACA,qBAAqB,qDAAa;AAClC;;;;;;;;;;;;;;;;AC1FA,6BAAe,uCAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,IAAI;AACJ;;;;;;;;;;;;;;;;ACbA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,sCAAW;AAC1B;AACA;AACA,yBAAyB;AACzB,kBAAkB,kCAAkC;AACpD;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7BA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRgD;AACgB;AAChB;AACW;AACF;AACL;AACF;AACR;AACY;AACO;AACJ;AACE;AACQ;AACF;AACI;;;;;;;;;;;;;;;;ACdrE;AACA;AACA;AACA,sBAAsB;;AAEtB,6BAAe,sCAAW;AAC1B;AACA;AACA;;;;;;;;;;;;;;;;;;;ACRoC;AACR;;AAE5B,6BAAe,oCAAS;AACxB,oCAAoC,mDAAG;AACvC;;AAEO;AACP,4BAA4B,kDAAO;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAkB;AAChC,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC1HyC;AACa;AAC1B;AACqB;;AAEjD;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA,gBAAgB,sDAAY;;AAE5B;AACA,mBAAmB,mDAAG;AACtB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,wCAAwC,sDAAY;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,uDAAQ;AAChD;;AAEA;AACA;AACA;;AAEA;AACA,uEAAuE,wDAAQ;AAC/E;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,OAAO;AAChC,UAAU,gEAAkB;AAC5B,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AChFgC;AACJ;AACmB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO;AACP,uBAAuB,qDAAK;;AAE5B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,wCAAwC,IAAI,8DAAiB;;AAEjF;AACA,cAAc,OAAO;;AAErB;AACA;;AAEA,6BAAe,oCAAS;AACxB,8BAA8B,mDAAG;AACjC;AACA;;;;;;;;;;;;;;;;;;ACvH2C;AACC;;AAE5C,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA,QAAQ,4DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;ACnDwC;AACiB;;AAEzD,eAAe,UAAU;AACzB,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC,OAAO;AACzC,0CAA0C,qDAAI;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,oCAAoC,MAAM,aAAa,8DAAa;AACzG;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC,uDAAQ;AAC5C;;AAEA;AACA,0CAA0C,uDAAQ;AAClD;;AAEA;AACA,sCAAsC,uDAAQ;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA,sCAAsC,KAAK;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChJ0C;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,iBAAiB;AACjB,cAAc;AACd;;AAEA,mCAAmC,qDAAI;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;AC5OA,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEA,8BAA8B,OAAO;AACrC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7CA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACXmC;AACE;AACI;AACa;;AAEtD,6BAAe,sCAAW;AAC1B,aAAa,oDAAQ;AACrB;AACA;AACA;AACA;AACA,qBAAqB,sDAAY;AACjC,mBAAmB,sDAAY;AAC/B,qBAAqB,sDAAY;AACjC,sBAAsB,sDAAY;AAClC,oBAAoB,sDAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAS;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,uDAAQ;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA,4EAA4E,wDAAQ;AACpF;;AAEA;AACA;AACA;;AAEA;AACA,0EAA0E,wDAAQ;AAClF;;AAEA;AACA,4EAA4E,wDAAQ;AACpF;;AAEA;AACA,6EAA6E,wDAAQ;AACrF;;AAEA;AACA,2EAA2E,wDAAQ;AACnF;;AAEA;AACA;;;;;;;;;;;;;;;;;;;AC7FoC;AACE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;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC,IAAI,EAAC;;AAEN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,cAAc,6CAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,yBAAyB,iDAAK;AAC9B,+BAA+B,uDAAW;;;;;;;;;;;;;;;;ACtDjD,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJiC;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA,yCAAyC;AACzC,4BAA4B;AAC5B;AACA,MAAM,OAAO;AACb;AACA,cAAc,SAAS,sDAAM,SAAS;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA,SAAS;AACT;;;;;;;;;;;;;;;;;AC/DA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzBkC;AACY;;AAE9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,sDAAM,SAAS,GAAG,aAAa,sDAAM,SAAS;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,gCAAgC;AACjE,cAAc,sDAAsD,sDAAM,OAAO;AACjF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,cAAc,qDAAqD,sDAAM,OAAO;AAChF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,aAAa,sDAAM,SAAS,GAAG,aAAa,sDAAM,SAAS;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,mDAAmD,+CAAQ;AAC3D,mDAAmD,+CAAQ;;;;;;;;;;;;;;;;;;AC9Df;;AAEnD;;AAEA;AACO;AACP;AACA,wBAAwB,mDAAQ,GAAG,yDAAS;AAC5C;;AAEO;AACP,4BAA4B,mDAAQ;AACpC;AACA;AACA,iEAAiE,mDAAQ;AACzE;AACA,SAAS,yDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;ACjB+B;AACJ;AACa;AACX;AACI;AACA;AACA;AACI;AACuB;;AAE5D,6BAAe,oCAAS;AACxB;AACA,wCAAwC,wDAAQ;AAChD,0BAA0B,kDAAM;AAChC,+BAA+B,oDAAK,eAAe,+CAAG,IAAI,kDAAM;AAChE,qBAAqB,gDAAK,GAAG,+CAAG;AAChC,4BAA4B,gDAAI;AAChC,QAAQ,8DAAa,MAAM,uDAAW;AACtC,2BAA2B,mDAAY;AACvC,0FAA0F,kDAAM;AAChG,QAAQ,kDAAM;AACd;;;;;;;;;;;;;;;;ACrBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iEAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC,mBAAmB,EAAC;;;;;;;;;;;;;;;;;ACtErB,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;;AAEzC;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD,IAAI;AACJ;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACnFA,6BAAe,oCAAS;AACxB,mDAAmD;;AAEnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1CA,6BAAe,sCAAW;AAC1B;AACA;AACA,+CAA+C;AAC/C,GAAG;AACH;AACA;;;;;;;;;;;;;;;;ACNA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACJ6B;;AAE7B,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,gDAAI;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB,YAAY,gDAAI;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACrEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNyD;AACrB;AACF;AACI;AACJ;AACmC;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A;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,oDAAM;AAClB;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,oBAAoB,sDAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wFAAwF,sDAAiB;AACzG;;AAEA;AACA,sDAAsD,kDAAM;AAC5D;;AAEA;AACA;AACA;;AAEA;AACA,gDAAgD,sDAAgB;AAChE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HwE;AAC/B;AACE;AACL;AACL;AACI;AACC;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kEAAkE,0DAAS;AAC3E;AACA;;AAEA,sBAAsB,sDAAW;;AAEjC,2BAA2B,sDAAgB;;AAE3C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEe;AACf,cAAc,qDAAS,eAAe,oDAAQ;;AAE9C;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,gDAAO;;AAErB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,qDAAS;;AAEvB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP,cAAc,+CAAM;;AAEpB;AACA,WAAW,oDAAI;AACf;;AAEA,SAAS,sDAAgB;AACzB;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;ACvGsC;AACL;;AAElB;AACf;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,sDAAsD,kDAAM;AAC5D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iDAAiD,kDAAM;;AAEvD,SAAS,qDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxBmB;;AAII;;AAIF;;AAIH;;AAIG;;AAKC;;AAKJ;;AAIG;;AAIE;;AAIA;;AAIC;;AAIL;;AAIG;;AAQG;;AAIQ;;AAQT;;AAIC;;;;;;;;;;;;;;;;;AC7ElB;AACP;AACA;AACA,gCAAgC;AAChC,+CAA+C;AAC/C;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACzB8C;AACG;AACb;AACK;;AAElC;AACP;;AAEA;AACA;AACA,WAAW,oDAAK;AAChB;;AAEA;AACA;AACA,WAAW,0DAAU;AACrB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,uDAAa;AAC1B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEe;AACf,cAAc,0DAAU;;AAExB;AACA,WAAW,oDAAI;AACf;;AAEA,EAAE,+CAAS;;AAEX;AACA;;;;;;;;;;;;;;;;;;;;;;;ACrE+B;AACmB;AACrB;AACqB;AACd;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,QAAQ;AAChC,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ,YAAY,QAAQ;AAC5B,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,oDAAK;AACrC,MAAM;AACN,UAAU,oDAAK;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsC,qDAAe;AACrD,kBAAkB,iDAAM;AACxB;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,oDAAI;AACtB;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEe;AACf,wBAAwB,2DAAW;AACnC,qBAAqB,oDAAI;AACzB,EAAE,+CAAS;AACX;AACA;;;;;;;;;;;;;;;;AC3Ie;AACf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjBe;AACf;AACA;;;;;;;;;;;;;;;;;;;ACFmC;AACC;;AAE7B;;AAEQ;AACf,kBAAkB,+CAAS;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,+CAAS;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,EAAE,+CAAS;;AAEX;AACA;;;;;;;;;;;;;;;;;;;;;AC7CsC;AACsB;AACxB;;AAEpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP,wBAAwB,oDAAQ,EAAE,oDAAQ;AAC1C;;AAEA;AACA,sCAAsC,oDAAQ,EAAE,oDAAQ;AACxD;AACA;AACA;;AAEA;AACA;AACA;;AAEA,SAAS,qDAAS;AAClB;;AAEe;AACf,qBAAqB,2DAAW;;AAEhC;AACA,WAAW,oDAAI;AACf;;AAEA,EAAE,+CAAS;;AAEX;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;;;ACjDwE;AACpC;;AAErB;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,wDAAS;AACjD;AACA;;AAEA;AACA,wDAAwD,oDAAM;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,gDAAS;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,+CAAS;AAClB;;;;;;;;;;;;;;;;;;;ACxDgC;AACM;AACF;;AAErB;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,oDAAM;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,+CAAS,OAAO,qDAAS;AAClC;;;;;;;;;;;;;;;;;;;;ACvDyC;AACL;AACE;AACL;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;;AAEe;AACf,gBAAgB,0DAAU;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oEAAoE,kDAAM;AAC1E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,+CAAS;;AAEX,SAAS,qDAAS;AAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9D6D;AACpB;AACE;AACL;AACL;AACK;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,sDAAW;;AAEjC,2BAA2B,sDAAgB;;AAE3C;AACA;AACA;;AAEA;AACA;AA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AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,iBAAiB,yDAAS;;AAE1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACxDA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1EA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;;ACZqC;AACA;AACC;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA,MAAM;AACN,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,SAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,qBAAqB,gDAAS;AAC9B;AACA;;AAEA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;;AAEA,2CAA2C,wDAAQ;;AAEnD,uGAAuG,OA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I;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;;;;;;;;;;;;;;;ACdA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;;ACNqC;;AAErC,6BAAe,oCAAS;AACxB;;AAEA,+JAA+J,OAAO;AACtK,yHAAyH,OAAO;AAChI;AACA;AACA;AACA;AACA;;AAEA,SAAS,QAAQ;AACjB;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;AClBA,6BAAe,sCAAW;;AAE1B,4DAA4D,OAAO;AACnE,yDAAyD,OAAO;AAChE;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACVA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA,8CAA8C,OAAO;AACrD,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;;;;;;;;;;;;;;;AClEA,6BAAe,sCAAW;;AAE1B,6DAA6D,QAAQ;AACrE,6EAA6E,SAAS;AACtF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC3BA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;;;;;;;;;;;;;;;;;;ACPqC;AACC;;AAEtC,6BAAe,oCAAS;AACxB,6CAA6C,wDAAQ;;AAErD,sFAAsF,OAAO;AAC7F,gHAAgH,OAAO;AACvH;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;;;;AChBqC;AACL;AACY;;AAE5C;AACA;AACA,WAAW,qDAAK;AAChB;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,gBAAgB,2DAAW;;AAE3B,0FAA0F,OAAO;AACjG,+DAA+D,OAAO;AACtE;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;;;;;;;;;;;;;;;;ACxB2C;;AAE3C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,wDAAwD,yDAAY;AACpE;;;;;;;;;;;;;;;;;ACjB2C;;AAE3C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,6DAA6D,yDAAY;AACzE;;;;;;;;;;;;;;;;ACjBA,6BAAe,sCAAW;AAC1B;AACA,mCAAmC;AACnC;AACA;;;;;;;;;;;;;;;;;ACJqC;;AAErC,6BAAe,oCAAS;AACxB;;AAEA;AACA;AACA;;AAEA,uFAAuF,OAAO;AAC9F,yGAAyG,OAAO;AAChH;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,gDAAS;AACtB;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;ACvBA,6BAAe,oCAAS;AACxB;AACA;;;;;;;;;;;;;;;;;;ACFuC;;AAEvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,SAAS,sDAAW;AACpB;;;;;;;;;;;;;;;;AClCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACxBA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACRA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACJA,6BAAe,oCAAS;AACxB;AACA;AACA,2BAA2B;AAC3B;;;;;;;;;;;;;;;;;;;;;ACJuC;;AAEvC;AACO;AACA;AACA;AACA;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAEc;AACf,WAAW,sDAAY;AACvB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACfiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,8CAAS,cAAc,kDAAS;AACxE,iBAAiB,2CAAM;AACvB;AACA;AACA;AACA,UAAU;AACV;AACA,wCAAwC,+CAAU,cAAc,mDAAU;AAC1E,iBAAiB,4CAAO;AACxB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA,YAAY,4BAA4B;AACxC;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,4CAAO,OAAO,iDAAQ;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,+CAAU,OAAO,iDAAQ;AACtC;;AAEA;AACA;AACA,mCAAmC,qDAAY,MAAM,iDAAY;AACjE;;AAEA;AACA;AACA,aAAa,iDAAY,OAAO,iDAAQ,WAAW,iDAAQ;AAC3D;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,+CAAU,OAAO,iDAAQ;AACtC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,qDAAY,MAAM,iDAAY;AAC9D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,2CAAM,OAAO,gDAAO;AACrC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,8CAAS,OAAO,gDAAO;AACpC;;AAEA;AACA;AACA,mCAAmC,oDAAW,MAAM,gDAAW;AAC/D;;AAEA;AACA;AACA,aAAa,gDAAW,OAAO,gDAAO,WAAW,gDAAO;AACxD;;AAEA;AACA;AACA;;AAEA;AACA,aAAa,8CAAS,OAAO,gDAAO;AACpC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,oDAAW,MAAM,gDAAW;AAC5D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACxrB2C;AACe;;AAEnD,gBAAgB,0DAAY;AACnC;AACA;AACA,yFAAyF,wDAAc,IAAI,qDAAW;AACtH;AACA;;AAEO;;AAEA,eAAe,0DAAY;AAClC;AACA,CAAC;AACD;AACA,CAAC;AACD,yBAAyB,qDAAW;AACpC,CAAC;AACD;AACA,CAAC;;AAEM;;AAEA,gBAAgB,0DAAY;AACnC;AACA,CAAC;AACD;AACA,CAAC;AACD,yBAAyB,qDAAW;AACpC,CAAC;AACD,2BAA2B,qDAAW;AACtC,CAAC;;AAEM;;;;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACNoC;AACgC;;AAEpE,iBAAiB,0DAAY;AACpC,mEAAmE,wDAAc,uBAAuB,wDAAc;AACtH,CAAC;AACD,8BAA8B,sDAAY;AAC1C,CAAC;AACD,yBAAyB,sDAAY;AACrC,CAAC;AACD;AACA,CAAC;;AAEM;;AAEA,gBAAgB,0DAAY;AACnC;AACA,CAAC;AACD,8BAA8B,sDAAY;AAC1C,CAAC;AACD,yBAAyB,sDAAY;AACrC,CAAC;AACD;AACA,CAAC;;AAEM;;;;;;;;;;;;;;;;ACzBP;;AAEO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oDAAoD;AACpD,UAAU;AACV,oDAAoD;AACpD;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;ACpE2C;;AAEpC,oBAAoB,0DAAY;AACvC;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,SAAS,0DAAY;AACrB;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEO;;;;;;;;;;;;;;;;;;;;;ACxBoC;AACkB;;AAEtD,mBAAmB,0DAAY;AACtC,mEAAmE,wDAAc;AACjF,CAAC;AACD,8BAA8B,wDAAc;AAC5C,CAAC;AACD,yBAAyB,wDAAc;AACvC,CAAC;AACD;AACA,CAAC;;AAEM;;AAEA,kBAAkB,0DAAY;AACrC;AACA,CAAC;AACD,8BAA8B,wDAAc;AAC5C,CAAC;AACD,yBAAyB,wDAAc;AACvC,CAAC;AACD;AACA,CAAC;;AAEM;;;;;;;;;;;;;;;;;;;;ACzBoC;;AAEpC,kBAAkB,0DAAY;AACrC;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAEM;;AAEA,iBAAiB,0DAAY;AACpC;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAEM;;;;;;;;;;;;;;;;;;;AC1BoC;AACE;;AAEtC,eAAe,0DAAY;AAClC;AACA,CAAC;AACD,8BAA8B,wDAAc;AAC5C,CAAC;AACD,yBAAyB,wDAAc;AACvC,CAAC;AACD;AACA,CAAC;;AAEM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbqC;AACuF;AACtF;AACV;AACe;AACN;AACF;AACM;AACD;AACH;;AAE5C;;AAEA;AACA,KAAK,8CAAM,WAAW,wDAAc;AACpC,KAAK,8CAAM,WAAW,wDAAc;AACpC,KAAK,8CAAM,WAAW,wDAAc;AACpC,KAAK,8CAAM,WAAW,wDAAc;AACpC,sBAAsB,wDAAc;AACpC,sBAAsB,wDAAc;AACpC,sBAAsB,wDAAc;AACpC,sBAAsB,wDAAc;AACpC,sBAAsB,sDAAY;AAClC,sBAAsB,sDAAY;AAClC,sBAAsB,sDAAY;AAClC,sBAAsB,sDAAY;AAClC,sBAAsB,qDAAW;AACjC,sBAAsB,qDAAW;AACjC,sBAAsB,sDAAY;AAClC,sBAAsB,uDAAa;AACnC,sBAAsB,uDAAa;AACnC,sBAAsB,sDAAY;AAClC;;AAEA;AACA;AACA;AACA;AACA,oEAAoE;AACpE;AACA;;AAEA;AACA;AACA,cAAc,oDAAQ;AACtB,sDAAsD,kDAAQ,SAAS,sDAAY,SAAS,sDAAY;AACxG,wBAAwB,wDAAW,gBAAgB,kDAAQ;AAC3D;AACA;AACA;;AAEA;AACA;;AAEA,2CAA2C,6CAAO,EAAE,+CAAQ,EAAE,+CAAS,EAAE,4CAAO,EAAE,6CAAO,EAAE,kDAAS;AACpG,6CAA6C,8CAAQ,EAAE,gDAAS,EAAE,gDAAU,EAAE,4CAAO,EAAE,8CAAQ,EAAE,mDAAU;;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDrB;AACgB;;AAE3D;AACA,SAAS,0DAAY;AACrB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,kFAAkF,wDAAc,IAAI,sDAAY;AAChH,GAAG;AACH;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEP;AACA,SAAS,0DAAY;AACrB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH,2BAA2B,sDAAY;AACvC,GAAG;AACH;;AAEO;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACvDoC;;AAEpC,iBAAiB,0DAAY;AACpC;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,2DAA2D,0DAAY;AACvE;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEO;;AAEA,gBAAgB,0DAAY;AACnC;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,2DAA2D,0DAAY;AACvE;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEO;;;;;;;;;;;;;;;;;AChD0B;;AAEjC,6BAAe,oCAAS;AACxB,cAAc,4CAAK;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sIAAsI;;AAE/H;AACP;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP,SAAS;AACT,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC7GiD;AACE;;AAEnD;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,8DAAS;AACrD,mBAAmB,4DAAU;AAC7B;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpB8B;AAC8B;AACd;AACM;;;;;;;;;;;;;;;;;ACHa;;AAEjE,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,mDAAmD,eAAe;AAClE,8BAA8B,6DAAQ,qBAAqB,2DAAM;AACjE,qBAAqB,0DAAK;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACvBuC;AACU;AACE;;AAEnD,oDAAS,uBAAuB,qDAAmB;AACnD,oDAAS,wBAAwB,sDAAoB;;;;;;;;;;;;;;;;;ACLb;;AAExC,6BAAe,oCAAS;AACxB;AACA,IAAI,yDAAS;AACb,GAAG;AACH;;;;;;;;;;;;;;;;;;;;ACNyD;AACR;AACV;AACV;;AAE7B;AACA;AACA;AACA;AACA,QAAQ,+CAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;;AAEA,sBAAsB,4DAAU;AAChC;AACA,IAAI;AACJ,SAAS,2DAAK,oCAAoC,6CAAG;AACrD;;AAEA,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA,QAAQ,mEAAQ;AAChB;AACA;AACA;;AAEA,aAAa,4DAAU;AACvB;;;;;;;;;;;;;;;;;;;;ACzC+E;AACxC;AACD;AACK;;AAE3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,iBAAiB,wDAAS,uCAAuC,mEAAoB,GAAG,uDAAW;AACnG;AACA,sEAAsE,qDAAU;AAChF;AACA;AACA;;;;;;;;;;;;;;;;;AC7EuC;;AAEvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA,iBAAiB,wDAAS;AAC1B;AACA;;;;;;;;;;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;AACA;AACA,kBAAkB,wDAAK;AACvB,oDAAoD,wDAAK;AACzD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,wDAAK;AACvB;AACA;AACA,6EAA6E,wDAAK;AAClF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB,yCAAyC,mEAAoB,GAAG,uDAAW;AAC3E;AACA;AACA;AACA;AACA,+CAA+C,qDAAU;AACzD;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC/EA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACvBsC;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA,qBAAqB,qDAAU;AAC/B;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACvB6C;AACD;;AAE5C,6BAAe,sCAAW;AAC1B;AACA;AACA,YAAY,gDAAK;;AAEjB,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA,sBAAsB,iDAAG;AACzB,QAAQ,wDAAQ;AAChB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,aAAa,iDAAU;AACvB;;;;;;;;;;;;;;;;;;ACvBuC;;AAEvC;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iDAAG;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB,4BAA4B,OAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAAe,oCAAS;AACxB;;AAEA;;AAEA;AACA,gBAAgB,iDAAG;AACnB,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA,mBAAmB,iDAAG;AACtB,2CAA2C;AAC3C,GAAG;;AAEH;AACA,WAAW,iDAAG;AACd;AACA;;;;;;;;;;;;;;;;AChFA,iEAAe,YAAY,EAAC;;;;;;;;;;;;;;;;ACAb;AACf;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,aAAa,oDAAoD;AACjE,gBAAgB,uDAAuD;AACvE,QAAQ;AACR,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;ACb0C;AACoE;;;;;;;;;;;;;;;;;ACDvG;AACP;AACA;;AAEA,6BAAe,oCAAS;AACxB;AACA;AACA;;;;;;;;;;;;;;;;;;ACPO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;;AAEP;;AAEe;AACf;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AClDqC;AACW;AACD;AACF;AACL;AACH;AACF;AACgB;AACC;;AAEpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,mDAAQ;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAAe,sCAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sDAAe;AACnC,kBAAkB,uDAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mDAAQ;AAC/B;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,+CAA+C,oDAAS;AACxD;;AAEA;AACA;AACA,oEAAoE,oDAAS;AAC7E;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,gDAAgD;AACvF,oDAAoD,8CAA8C;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,mBAAmB,4BAA4B,QAAQ,oDAAS;AAChE;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,cAAc,wDAAM;AACpB;AACA;AACA;AACA,YAAY,iDAAS;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAO;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM,wDAAS;AACf;AACA;;AAEA,IAAI,uDAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,wDAAM;AAClB,YAAY,wDAAO;AACnB;AACA;;AAEA,IAAI,mDAAW;AACf,IAAI,0DAAa;AACjB;AACA,IAAI,wDAAS;AACb;;AAEA;AACA,MAAM,uDAAO;AACb;AACA;AACA;AACA;AACA;AACA,sEAAsE,wDAAO;AAC7E;;AAEA;AACA;AACA,MAAM,gDAAU;AAChB,MAAM,uDAAO;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,wDAAO;AACpB;AACA;AACA;;AAEA,IAAI,uDAAO;AACX,sBAAsB,wDAAM;AAC5B,SAAS,wDAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,0DAAa;AACjB,gBAAgB,OAAO;AACvB,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iFAAiF,uBAAuB;AACxG,MAAM,wDAAS;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,uDAAO;AACX,gBAAgB,OAAO;AACvB,0BAA0B,wDAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,0DAAa;AACjB;AACA,0CAA0C,qBAAqB;AAC/D,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,wDAAO;AACnB;AACA,kBAAkB,wDAAM;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA,0EAA0E,wDAAQ;AAClF;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA,yEAAyE,wDAAQ;AACjF;;AAEA;AACA,sEAAsE,wDAAQ;AAC9E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;AC9bO;AACP;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UC5DA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WC5BA;WACA;WACA;;;;;WCFA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;;;;;WCJA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WClBA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;;;;WCrBA;;;;;;;;;;;;;;;;;;;;;ACA4B;AAEW;AAEA;AACM;AACE;AACJ;AACS;AACI;AACP;AACjD;;AAGA,SAASssB,IAAIA,CAAA,EAAS;EACpB;EACA,IAAIkN,aAAa,GAAsBv7B,QAAQ,CAACgG,cAAc,CAAC,eAAe,CAAC,CAAErU,KAAK;EACtF,IAAI6pC,WAAW,GAAsBx7B,QAAQ,CAACgG,cAAc,CAAC,oBAAoB,CAAC,CAAErU,KAAK;EACzF,IAAI8pC,MAAM,GAAsBz7B,QAAQ,CAACgG,cAAc,CAAC,QAAQ,CAAC,CAAErU,KAAK;EACxE,IAAI4kC,WAAW,GAAC,EAAE;EAElB,IAAGgF,aAAa,EAChBhF,WAAW,GAAC12B,IAAI,CAAC0V,KAAK,CAACgmB,aAAa,CAAC;EAErC,IAAIG,SAAS,GAAG,IAAIhG,kDAAW,CAAC,CAAC;EACjCgG,SAAS,CAACz/B,EAAE,GAAG,MAAM;EACrB,IAAGw/B,MAAM,IAAE,MAAM,EAAC;IAChB,IAAIE,aAAa,GAAG,IAAIrF,0DAAa,CAACC,WAAW,CAAC;IAClD,IAAIqF,WAAW,GAAG,IAAI7P,sDAAW,CAAC,CAAC;IACnC,IAAI8P,cAAc,GAAG,IAAI72B,4DAAc,CAAC02B,SAAS,CAAC;IAElDA,SAAS,CAAC9F,aAAa,CAAC+F,aAAa,CAAC;IACtCD,SAAS,CAAC9F,aAAa,CAACgG,WAAW,CAAC;IACpCF,SAAS,CAAC9F,aAAa,CAACiG,cAAc,CAAC;EACzC,CAAC,MACG;IACF,IAAI7rB,MAAM,GAAG,IAAI7P,wDAAY,CAAC,CAAC;IAC/B,IAAI27B,WAAW,GAAG,IAAIviC,iEAAiB,CAACiiC,WAAW,CAAC;IACpD,IAAIO,OAAO,GAAG,IAAIpiB,+DAAa,CAAC3J,MAAM,EAAE,SAAS,EAAE,SAAS,EAAEwrB,WAAW,EAACM,WAAW,CAAC;IACtF,IAAID,cAAc,GAAG,IAAI72B,4DAAc,CAAC02B,SAAS,CAAC;IAElDA,SAAS,CAAC9F,aAAa,CAACmG,OAAO,CAAC;IAChCL,SAAS,CAAC9F,aAAa,CAAC5lB,MAAM,CAAC;IAC/B0rB,SAAS,CAAC9F,aAAa,CAACkG,WAAW,CAAC;IACpCJ,SAAS,CAAC9F,aAAa,CAACiG,cAAc,CAAC;IACvCE,OAAO,CAACzrB,IAAI,CAAC,CAAC;EAChB;EAEAlX,mDAAM,CAAC4iC,MAAM,CAACN,SAAS,EAAE17B,QAAQ,CAACJ,IAAI,CAAC;EACvC1C,MAAM,CAAC++B,QAAQ,GAAG,YAAM;IAAEP,SAAS,CAACQ,MAAM,CAAC,CAAC;EAAC,CAAC;AAChD;AAEAh/B,MAAM,CAACi/B,MAAM,GAAG9N,IAAI,C","sources":["webpack://@noworkflow/nowvis/../../node_modules/@lumino/algorithm/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/collections/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/commands/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/coreutils/dist/index.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/disposable/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/domutils/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/dragdrop/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/keyboard/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/messaging/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/properties/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/signaling/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/virtualdom/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/dist/index.es6.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/api.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/buffer.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/node.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/base/reporter.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/constants/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/constants/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/der.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/index.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack://@noworkflow/nowvis/../../node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/./src/annotation_widget.ts","webpack://@noworkflow/nowvis/./src/config_widget.ts","webpack://@noworkflow/nowvis/./src/database_widget.ts","webpack://@noworkflow/nowvis/./src/graph/base_activation_graph.ts","webpack://@noworkflow/nowvis/./src/graph/diff_graph.ts","webpack://@noworkflow/nowvis/./src/graph/function_diff.ts","webpack://@noworkflow/nowvis/./src/graph/history_graph.ts","webpack://@noworkflow/nowvis/./src/graph/trial_graph.ts","webpack://@noworkflow/nowvis/./src/group_widget.ts","webpack://@noworkflow/nowvis/./src/info/diff_info.ts","webpack://@noworkflow/nowvis/./src/info/environment_info.ts","webpack://@noworkflow/nowvis/./src/info/file_accesses_info.ts","webpack://@noworkflow/nowvis/./src/info/modules_info.ts","webpack://@noworkflow/nowvis/./src/info/trial_info.ts","webpack://@noworkflow/nowvis/./src/nowpanel.ts","webpack://@noworkflow/nowvis/./src/project_widget.ts","webpack://@noworkflow/nowvis/./src/query_widget.ts","webpack://@noworkflow/nowvis/../../node_modules/base64-js/index.js","webpack://@noworkflow/nowvis/../../node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/brorand/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/aes.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/authCipher.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/decrypter.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/encrypter.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/ghash.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/incr32.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cbc.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb1.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/cfb8.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ctr.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ecb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/modes/ofb.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-aes/streamCipher.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-cipher/browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-des/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-des/modes.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-rsa/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/algos.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/sign.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/browser/verify.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/isarray/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/string_decoder/lib/string_decoder.js","webpack://@noworkflow/nowvis/../../node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/buffer-xor/index.js","webpack://@noworkflow/nowvis/../../node_modules/buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/cipher-base/index.js","webpack://@noworkflow/nowvis/../../node_modules/core-util-is/lib/util.js","webpack://@noworkflow/nowvis/../../node_modules/create-ecdh/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/create-hash/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-hash/md5.js","webpack://@noworkflow/nowvis/../../node_modules/create-hmac/browser.js","webpack://@noworkflow/nowvis/../../node_modules/create-hmac/legacy.js","webpack://@noworkflow/nowvis/../../node_modules/crypto-browserify/index.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/cbc.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/cipher.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/des.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/ede.js","webpack://@noworkflow/nowvis/../../node_modules/des.js/lib/des/utils.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/browser.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/lib/dh.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/lib/generatePrime.js","webpack://@noworkflow/nowvis/../../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/base.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/mont.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curve/short.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/curves.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/key.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/ec/signature.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/lib/elliptic/utils.js","webpack://@noworkflow/nowvis/../../node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/events/events.js","webpack://@noworkflow/nowvis/../../node_modules/evp_bytestokey/index.js","webpack://@noworkflow/nowvis/../../node_modules/file-saver/dist/FileSaver.min.js","webpack://@noworkflow/nowvis/../../node_modules/hash-base/index.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/common.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/hmac.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/ripemd.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/1.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/224.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/256.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/384.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/512.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/sha/common.js","webpack://@noworkflow/nowvis/../../node_modules/hash.js/lib/hash/utils.js","webpack://@noworkflow/nowvis/../../node_modules/hmac-drbg/lib/hmac-drbg.js","webpack://@noworkflow/nowvis/../../node_modules/ieee754/index.js","webpack://@noworkflow/nowvis/../../node_modules/inherits/inherits_browser.js","webpack://@noworkflow/nowvis/../../node_modules/md5.js/index.js","webpack://@noworkflow/nowvis/../../node_modules/miller-rabin/lib/mr.js","webpack://@noworkflow/nowvis/../../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/minimalistic-assert/index.js","webpack://@noworkflow/nowvis/../../node_modules/minimalistic-crypto-utils/lib/utils.js","webpack://@noworkflow/nowvis/../../node_modules/os/index.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/asn1.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/certificate.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/fixProc.js","webpack://@noworkflow/nowvis/../../node_modules/parse-asn1/index.js","webpack://@noworkflow/nowvis/../../node_modules/path/path.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/browser.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/async.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/default-encoding.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/precondition.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/sync-browser.js","webpack://@noworkflow/nowvis/../../node_modules/pbkdf2/lib/to-buffer.js","webpack://@noworkflow/nowvis/../../node_modules/process-nextick-args/index.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/browser.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/mgf.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/privateDecrypt.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/publicEncrypt.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/withPublic.js","webpack://@noworkflow/nowvis/../../node_modules/public-encrypt/xor.js","webpack://@noworkflow/nowvis/../../node_modules/randombytes/browser.js","webpack://@noworkflow/nowvis/../../node_modules/randomfill/browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/errors-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_duplex.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_readable.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_transform.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/_stream_writable.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/state.js","webpack://@noworkflow/nowvis/../../node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@noworkflow/nowvis/../../node_modules/readline-sync/lib/readline-sync.js","webpack://@noworkflow/nowvis/../../node_modules/ripemd160/index.js","webpack://@noworkflow/nowvis/../../node_modules/safe-buffer/index.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/hash.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/index.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha1.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha224.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha256.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha384.js","webpack://@noworkflow/nowvis/../../node_modules/sha.js/sha512.js","webpack://@noworkflow/nowvis/../../node_modules/stream-browserify/index.js","webpack://@noworkflow/nowvis/../../node_modules/string_decoder/lib/string_decoder.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/browserify.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/control-icons.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/shadow-viewport.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/svg-pan-zoom.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/svg-utilities.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/uniwheel.js","webpack://@noworkflow/nowvis/../../node_modules/svg-pan-zoom/src/utilities.js","webpack://@noworkflow/nowvis/../../node_modules/tau-prolog/modules/core.js","webpack://@noworkflow/nowvis/../../node_modules/util-deprecate/browser.js","webpack://@noworkflow/nowvis/../../node_modules/util/node_modules/inherits/inherits_browser.js","webpack://@noworkflow/nowvis/../../node_modules/util/support/isBufferBrowser.js","webpack://@noworkflow/nowvis/../../node_modules/util/util.js","webpack://@noworkflow/nowvis/../../node_modules/vm-browserify/index.js","webpack://@noworkflow/nowvis/../history/lib/config.js","webpack://@noworkflow/nowvis/../history/lib/graph.js","webpack://@noworkflow/nowvis/../history/lib/index.js","webpack://@noworkflow/nowvis/../history/lib/structures.js","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/accordionpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/commandpalette.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/datagrid.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/dockpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/menu.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/menubar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/scrollbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/default-theme/style/tabbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/dragdrop/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/accordionpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/commandpalette.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/dockpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/index.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/menu.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/menubar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/scrollbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/splitpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/tabbar.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/tabpanel.css","webpack://@noworkflow/nowvis/../../node_modules/@lumino/widgets/style/widget.css","webpack://@noworkflow/nowvis/../history/style/index.css","webpack://@noworkflow/nowvis/./style/bootstrap.min.css","webpack://@noworkflow/nowvis/./style/history.css","webpack://@noworkflow/nowvis/./style/index.css","webpack://@noworkflow/nowvis/./style/panel.css","webpack://@noworkflow/nowvis/./style/trial.css","webpack://@noworkflow/nowvis/../trial/style/index.css","webpack://@noworkflow/nowvis/../utils/style/shared.css","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/api.js","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/getUrl.js","webpack://@noworkflow/nowvis/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://@noworkflow/nowvis/./style/bootstrap.min.css?f8e0","webpack://@noworkflow/nowvis/./style/index.css?b7f0","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://@noworkflow/nowvis/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://@noworkflow/nowvis/../trial/lib/config.js","webpack://@noworkflow/nowvis/../trial/lib/graph.js","webpack://@noworkflow/nowvis/../trial/lib/index.js","webpack://@noworkflow/nowvis/../trial/lib/structures.js","webpack://@noworkflow/nowvis/../utils/lib/d3svg.js","webpack://@noworkflow/nowvis/../utils/lib/index.js","webpack://@noworkflow/nowvis/../utils/lib/random.js","webpack://@noworkflow/nowvis/../utils/lib/text.js","webpack://@noworkflow/nowvis/../utils/lib/web.js","webpack://@noworkflow/nowvis/../../../../../../../../node_modules/ace-builds/src-noconflict/ace.js","webpack://@noworkflow/nowvis/../../../../../../../../node_modules/ace-builds/src-noconflict/ext-language_tools.js","webpack://@noworkflow/nowvis/../../../../../../../../node_modules/ace-builds/src-noconflict/mode-sql.js","webpack://@noworkflow/nowvis/../../../../../../../../node_modules/ace-builds/src-noconflict/theme-textmate.js","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/asn1.js/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/brorand|crypto","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams|util","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/browserify-sign/node_modules/readable-stream/lib|util","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/create-ecdh/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/diffie-hellman/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/elliptic/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/miller-rabin/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/public-encrypt/node_modules/bn.js/lib|buffer","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/readable-stream/lib/internal/streams|util","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/readable-stream/lib|util","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/readline-sync/lib|child_process","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/readline-sync/lib|fs","webpack://@noworkflow/nowvis/ignored|/home/bruno/Documentos/mestrado/eScience/noworkflow/src/frontend/node_modules/tau-prolog/modules|fs","webpack://@noworkflow/nowvis/../../node_modules/@viz-js/viz/lib/viz-standalone.mjs","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/ascending.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/bisect.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/bisector.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/descending.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/greatest.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/max.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/maxIndex.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/min.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/minIndex.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/permute.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/quantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/quickselect.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/range.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-array/src/ticks.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/color.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/define.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/lab.js","webpack://@noworkflow/nowvis/../../node_modules/d3-color/src/math.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dispatch/src/dispatch.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/drag.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/event.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/nodrag.js","webpack://@noworkflow/nowvis/../../node_modules/d3-drag/src/noevent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/csv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/dsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-dsv/src/tsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-ease/src/cubic.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/blob.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/buffer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/dsv.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/image.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/json.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-fetch/src/xml.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/center.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/collide.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/jiggle.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/lcg.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/link.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/manyBody.js","webpack://@noworkflow/nowvis/../../node_modules/d3-force/src/simulation.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/defaultLocale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/exponent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatDecimal.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatGroup.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatNumerals.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatPrefixAuto.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatRounded.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatSpecifier.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatTrim.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/formatTypes.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/identity.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/locale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionFixed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionPrefix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-format/src/precisionRound.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/accessors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/cluster.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/count.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/each.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/find.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/links.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/path.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/lcg.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/enclose.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/pack/siblings.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/partition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/stratify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/tree.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/binary.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/dice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/round.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/slice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/sliceDice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-hierarchy/src/treemap/squarify.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/basis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/basisClosed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/color.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/date.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/numberArray.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/object.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/piecewise.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/rgb.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/round.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/string.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/decompose.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/transform/parse.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/value.js","webpack://@noworkflow/nowvis/../../node_modules/d3-interpolate/src/zoom.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/add.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/cover.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/data.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/extent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/find.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/quad.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/quadtree.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/root.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/size.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/visit.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/visitAfter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/x.js","webpack://@noworkflow/nowvis/../../node_modules/d3-quadtree/src/y.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Accent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Paired.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set1.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set2.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Set3.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/category10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/categorical/observable10.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/colors.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/ramp.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/band.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/continuous.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/diverging.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/identity.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/init.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/linear.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/log.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/nice.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/number.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/ordinal.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/pow.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/quantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/quantize.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/radial.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/sequential.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/sequentialQuantile.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/symlog.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/threshold.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/tickFormat.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/time.js","webpack://@noworkflow/nowvis/../../node_modules/d3-scale/src/utcTime.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/array.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/create.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/creator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/local.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/matcher.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/namespace.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/namespaces.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/pointer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/pointers.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/append.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/attr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/call.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/classed.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/clone.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/data.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/datum.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/dispatch.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/each.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/empty.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/enter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/exit.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/filter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/html.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/insert.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/iterator.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/join.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/lower.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/merge.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/node.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/nodes.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/on.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/order.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/property.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/raise.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectChild.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/selectChildren.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/size.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/sort.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/sparse.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/style.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selection/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selector.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/selectorAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/sourceEvent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-selection/src/window.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time-format/src/defaultLocale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time-format/src/locale.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/day.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/duration.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/hour.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/interval.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/millisecond.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/minute.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/month.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/second.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/ticks.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/week.js","webpack://@noworkflow/nowvis/../../node_modules/d3-time/src/year.js","webpack://@noworkflow/nowvis/../../node_modules/d3-timer/src/timeout.js","webpack://@noworkflow/nowvis/../../node_modules/d3-timer/src/timer.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/active.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/interrupt.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/interrupt.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/selection/transition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/attr.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/attrTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/delay.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/duration.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/ease.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/easeVarying.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/end.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/filter.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/interpolate.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/merge.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/on.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/remove.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/schedule.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/select.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/selectAll.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/selection.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/style.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/styleTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/text.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/textTween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/transition.js","webpack://@noworkflow/nowvis/../../node_modules/d3-transition/src/transition/tween.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/constant.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/event.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/index.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/noevent.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/transform.js","webpack://@noworkflow/nowvis/../../node_modules/d3-zoom/src/zoom.js","webpack://@noworkflow/nowvis/../../node_modules/internmap/src/index.js","webpack://@noworkflow/nowvis/webpack/bootstrap","webpack://@noworkflow/nowvis/webpack/runtime/amd define","webpack://@noworkflow/nowvis/webpack/runtime/compat get default export","webpack://@noworkflow/nowvis/webpack/runtime/define property getters","webpack://@noworkflow/nowvis/webpack/runtime/global","webpack://@noworkflow/nowvis/webpack/runtime/hasOwnProperty shorthand","webpack://@noworkflow/nowvis/webpack/runtime/make namespace object","webpack://@noworkflow/nowvis/webpack/runtime/node module decorator","webpack://@noworkflow/nowvis/webpack/runtime/publicPath","webpack://@noworkflow/nowvis/webpack/runtime/jsonp chunk loading","webpack://@noworkflow/nowvis/webpack/runtime/nonce","webpack://@noworkflow/nowvis/./src/index.ts"],"sourcesContent":["// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for array-specific algorithms.\n */\nvar ArrayExt;\n(function (ArrayExt) {\n /**\n * Find the index of the first occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.firstIndexOf(data, 'red'); // -1\n * ArrayExt.firstIndexOf(data, 'one'); // 0\n * ArrayExt.firstIndexOf(data, 'one', 1); // 4\n * ArrayExt.firstIndexOf(data, 'two', 2); // -1\n * ArrayExt.firstIndexOf(data, 'two', 2, 1); // 1\n * ```\n */\n function firstIndexOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.firstIndexOf = firstIndexOf;\n /**\n * Find the index of the last occurrence of a value in an array.\n *\n * @param array - The array-like object to search.\n *\n * @param value - The value to locate in the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last occurrence of the value, or `-1`\n * if the value is not found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four', 'one'];\n * ArrayExt.lastIndexOf(data, 'red'); // -1\n * ArrayExt.lastIndexOf(data, 'one'); // 4\n * ArrayExt.lastIndexOf(data, 'one', 1); // 0\n * ArrayExt.lastIndexOf(data, 'two', 0); // -1\n * ArrayExt.lastIndexOf(data, 'two', 0, 1); // 1\n * ```\n */\n function lastIndexOf(array, value, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (start < stop) {\n span = start + 1 + (n - stop);\n }\n else {\n span = start - stop + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start - i + n) % n;\n if (array[j] === value) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.lastIndexOf = lastIndexOf;\n /**\n * Find the index of the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstIndex(data, isEven); // 1\n * ArrayExt.findFirstIndex(data, isEven, 4); // 5\n * ArrayExt.findFirstIndex(data, isEven, 6); // -1\n * ArrayExt.findFirstIndex(data, isEven, 6, 5); // 1\n * ```\n */\n function findFirstIndex(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n let j = (start + i) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findFirstIndex = findFirstIndex;\n /**\n * Find the index of the last value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the last matching value, or `-1` if no\n * matching value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastIndex(data, isEven); // 5\n * ArrayExt.findLastIndex(data, isEven, 4); // 3\n * ArrayExt.findLastIndex(data, isEven, 0); // -1\n * ArrayExt.findLastIndex(data, isEven, 0, 1); // 5\n * ```\n */\n function findLastIndex(array, fn, start = -1, stop = 0) {\n let n = array.length;\n if (n === 0) {\n return -1;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let d;\n if (start < stop) {\n d = start + 1 + (n - stop);\n }\n else {\n d = start - stop + 1;\n }\n for (let i = 0; i < d; ++i) {\n let j = (start - i + n) % n;\n if (fn(array[j], j)) {\n return j;\n }\n }\n return -1;\n }\n ArrayExt.findLastIndex = findLastIndex;\n /**\n * Find the first value which matches a predicate.\n *\n * @param array - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findFirstValue(data, isEven); // 2\n * ArrayExt.findFirstValue(data, isEven, 2); // 4\n * ArrayExt.findFirstValue(data, isEven, 6); // undefined\n * ArrayExt.findFirstValue(data, isEven, 6, 5); // 2\n * ```\n */\n function findFirstValue(array, fn, start = 0, stop = -1) {\n let index = findFirstIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findFirstValue = findFirstValue;\n /**\n * Find the last value which matches a predicate.\n *\n * @param object - The array-like object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The last matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the front of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [1, 2, 3, 4, 3, 2, 1];\n * ArrayExt.findLastValue(data, isEven); // 2\n * ArrayExt.findLastValue(data, isEven, 4); // 4\n * ArrayExt.findLastValue(data, isEven, 0); // undefined\n * ArrayExt.findLastValue(data, isEven, 0, 1); // 2\n * ```\n */\n function findLastValue(array, fn, start = -1, stop = 0) {\n let index = findLastIndex(array, fn, start, stop);\n return index !== -1 ? array[index] : undefined;\n }\n ArrayExt.findLastValue = findLastValue;\n /**\n * Find the index of the first element which compares `>=` to a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>=` to the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.lowerBound(data, 0, numberCmp); // 0\n * ArrayExt.lowerBound(data, 6, numberCmp); // 3\n * ArrayExt.lowerBound(data, 7, numberCmp); // 3\n * ArrayExt.lowerBound(data, -1, numberCmp); // 0\n * ArrayExt.lowerBound(data, 10, numberCmp); // 6\n * ```\n */\n function lowerBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) < 0) {\n begin = middle + 1;\n span -= half + 1;\n }\n else {\n span = half;\n }\n }\n return begin;\n }\n ArrayExt.lowerBound = lowerBound;\n /**\n * Find the index of the first element which compares `>` than a value.\n *\n * @param array - The sorted array-like object to search.\n *\n * @param value - The value to locate in the array.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if an element is less than a value, `0` if\n * an element is equal to a value, or `> 0` if an element is greater\n * than a value.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the first element which compares `>` than the\n * value, or `length` if there is no such element. If the computed\n * index for `stop` is less than `start`, then the computed index\n * for `start` is returned.\n *\n * #### Notes\n * The array must already be sorted in ascending order according to\n * the comparison function.\n *\n * #### Complexity\n * Logarithmic.\n *\n * #### Undefined Behavior\n * Searching a range which is not sorted in ascending order.\n *\n * A `start` or `stop` which is non-integral.\n *\n * Modifying the length of the array while searching.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.upperBound(data, 0, numberCmp); // 1\n * ArrayExt.upperBound(data, 6, numberCmp); // 3\n * ArrayExt.upperBound(data, 7, numberCmp); // 5\n * ArrayExt.upperBound(data, -1, numberCmp); // 0\n * ArrayExt.upperBound(data, 10, numberCmp); // 6\n * ```\n */\n function upperBound(array, value, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let begin = start;\n let span = stop - start + 1;\n while (span > 0) {\n let half = span >> 1;\n let middle = begin + half;\n if (fn(array[middle], value) > 0) {\n span = half;\n }\n else {\n begin = middle + 1;\n span -= half + 1;\n }\n }\n return begin;\n }\n ArrayExt.upperBound = upperBound;\n /**\n * Test whether two arrays are shallowly equal.\n *\n * @param a - The first array-like object to compare.\n *\n * @param b - The second array-like object to compare.\n *\n * @param fn - The comparison function to apply to the elements. It\n * should return `true` if the elements are \"equal\". The default\n * compares elements using strict `===` equality.\n *\n * @returns Whether the two arrays are shallowly equal.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * Modifying the length of the arrays while comparing.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let d1 = [0, 3, 4, 7, 7, 9];\n * let d2 = [0, 3, 4, 7, 7, 9];\n * let d3 = [42];\n * ArrayExt.shallowEqual(d1, d2); // true\n * ArrayExt.shallowEqual(d2, d3); // false\n * ```\n */\n function shallowEqual(a, b, fn) {\n // Check for object identity first.\n if (a === b) {\n return true;\n }\n // Bail early if the lengths are different.\n if (a.length !== b.length) {\n return false;\n }\n // Compare each element for equality.\n for (let i = 0, n = a.length; i < n; ++i) {\n if (fn ? !fn(a[i], b[i]) : a[i] !== b[i]) {\n return false;\n }\n }\n // The array are shallowly equal.\n return true;\n }\n ArrayExt.shallowEqual = shallowEqual;\n /**\n * Create a slice of an array subject to an optional step.\n *\n * @param array - The array-like object of interest.\n *\n * @param options - The options for configuring the slice.\n *\n * @returns A new array with the specified values.\n *\n * @throws An exception if the slice `step` is `0`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start`, `stop`, or `step` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 3, 4, 7, 7, 9];\n * ArrayExt.slice(data); // [0, 3, 4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 2 }); // [4, 7, 7, 9]\n * ArrayExt.slice(data, { start: 0, stop: 4 }); // [0, 3, 4, 7]\n * ArrayExt.slice(data, { step: 2 }); // [0, 4, 7]\n * ArrayExt.slice(data, { step: -1 }); // [9, 7, 7, 4, 3, 0]\n * ```\n */\n function slice(array, options = {}) {\n // Extract the options.\n let { start, stop, step } = options;\n // Set up the `step` value.\n if (step === undefined) {\n step = 1;\n }\n // Validate the step size.\n if (step === 0) {\n throw new Error('Slice `step` cannot be zero.');\n }\n // Look up the length of the array.\n let n = array.length;\n // Set up the `start` value.\n if (start === undefined) {\n start = step < 0 ? n - 1 : 0;\n }\n else if (start < 0) {\n start = Math.max(start + n, step < 0 ? -1 : 0);\n }\n else if (start >= n) {\n start = step < 0 ? n - 1 : n;\n }\n // Set up the `stop` value.\n if (stop === undefined) {\n stop = step < 0 ? -1 : n;\n }\n else if (stop < 0) {\n stop = Math.max(stop + n, step < 0 ? -1 : 0);\n }\n else if (stop >= n) {\n stop = step < 0 ? n - 1 : n;\n }\n // Compute the slice length.\n let length;\n if ((step < 0 && stop >= start) || (step > 0 && start >= stop)) {\n length = 0;\n }\n else if (step < 0) {\n length = Math.floor((stop - start + 1) / step + 1);\n }\n else {\n length = Math.floor((stop - start - 1) / step + 1);\n }\n // Compute the sliced result.\n let result = [];\n for (let i = 0; i < length; ++i) {\n result[i] = array[start + i * step];\n }\n // Return the result.\n return result;\n }\n ArrayExt.slice = slice;\n /**\n * Move an element in an array from one index to another.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param fromIndex - The index of the element to move. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param toIndex - The target index of the element. Negative\n * values are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `fromIndex` or `toIndex` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.move(data, 1, 2); // [0, 2, 1, 3, 4]\n * ArrayExt.move(data, 4, 2); // [0, 2, 4, 1, 3]\n * ```\n */\n function move(array, fromIndex, toIndex) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (fromIndex < 0) {\n fromIndex = Math.max(0, fromIndex + n);\n }\n else {\n fromIndex = Math.min(fromIndex, n - 1);\n }\n if (toIndex < 0) {\n toIndex = Math.max(0, toIndex + n);\n }\n else {\n toIndex = Math.min(toIndex, n - 1);\n }\n if (fromIndex === toIndex) {\n return;\n }\n let value = array[fromIndex];\n let d = fromIndex < toIndex ? 1 : -1;\n for (let i = fromIndex; i !== toIndex; i += d) {\n array[i] = array[i + d];\n }\n array[toIndex] = value;\n }\n ArrayExt.move = move;\n /**\n * Reverse an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param start - The index of the first element in the range to be\n * reversed, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * reversed, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` index which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.reverse(data, 1, 3); // [0, 3, 2, 1, 4]\n * ArrayExt.reverse(data, 3); // [0, 3, 2, 4, 1]\n * ArrayExt.reverse(data); // [1, 4, 2, 3, 0]\n * ```\n */\n function reverse(array, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n while (start < stop) {\n let a = array[start];\n let b = array[stop];\n array[start++] = b;\n array[stop--] = a;\n }\n }\n ArrayExt.reverse = reverse;\n /**\n * Rotate the elements of an array in-place.\n *\n * @param array - The mutable array-like object of interest.\n *\n * @param delta - The amount of rotation to apply to the elements. A\n * positive value will rotate the elements to the left. A negative\n * value will rotate the elements to the right.\n *\n * @param start - The index of the first element in the range to be\n * rotated, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * rotated, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `delta`, `start`, or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2, 3, 4];\n * ArrayExt.rotate(data, 2); // [2, 3, 4, 0, 1]\n * ArrayExt.rotate(data, -2); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 10); // [0, 1, 2, 3, 4]\n * ArrayExt.rotate(data, 9); // [4, 0, 1, 2, 3]\n * ArrayExt.rotate(data, 2, 1, 3); // [4, 2, 0, 1, 3]\n * ```\n */\n function rotate(array, delta, start = 0, stop = -1) {\n let n = array.length;\n if (n <= 1) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n if (start >= stop) {\n return;\n }\n let length = stop - start + 1;\n if (delta > 0) {\n delta = delta % length;\n }\n else if (delta < 0) {\n delta = ((delta % length) + length) % length;\n }\n if (delta === 0) {\n return;\n }\n let pivot = start + delta;\n reverse(array, start, pivot - 1);\n reverse(array, pivot, stop);\n reverse(array, start, stop);\n }\n ArrayExt.rotate = rotate;\n /**\n * Fill an array with a static value.\n *\n * @param array - The mutable array-like object to fill.\n *\n * @param value - The static value to use to fill the array.\n *\n * @param start - The index of the first element in the range to be\n * filled, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * filled, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * #### Notes\n * If `stop < start` the fill will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * A `start` or `stop` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = ['one', 'two', 'three', 'four'];\n * ArrayExt.fill(data, 'r'); // ['r', 'r', 'r', 'r']\n * ArrayExt.fill(data, 'g', 1); // ['r', 'g', 'g', 'g']\n * ArrayExt.fill(data, 'b', 2, 3); // ['r', 'g', 'b', 'b']\n * ArrayExt.fill(data, 'z', 3, 1); // ['z', 'z', 'b', 'z']\n * ```\n */\n function fill(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let span;\n if (stop < start) {\n span = stop + 1 + (n - start);\n }\n else {\n span = stop - start + 1;\n }\n for (let i = 0; i < span; ++i) {\n array[(start + i) % n] = value;\n }\n }\n ArrayExt.fill = fill;\n /**\n * Insert a value into an array at a specific index.\n *\n * @param array - The array of interest.\n *\n * @param index - The index at which to insert the value. Negative\n * values are taken as an offset from the end of the array.\n *\n * @param value - The value to set at the specified index.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 1, 2];\n * ArrayExt.insert(data, 0, -1); // [-1, 0, 1, 2]\n * ArrayExt.insert(data, 2, 12); // [-1, 0, 12, 1, 2]\n * ArrayExt.insert(data, -1, 7); // [-1, 0, 12, 1, 7, 2]\n * ArrayExt.insert(data, 6, 19); // [-1, 0, 12, 1, 7, 2, 19]\n * ```\n */\n function insert(array, index, value) {\n let n = array.length;\n if (index < 0) {\n index = Math.max(0, index + n);\n }\n else {\n index = Math.min(index, n);\n }\n for (let i = n; i > index; --i) {\n array[i] = array[i - 1];\n }\n array[index] = value;\n }\n ArrayExt.insert = insert;\n /**\n * Remove and return a value at a specific index in an array.\n *\n * @param array - The array of interest.\n *\n * @param index - The index of the value to remove. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The value at the specified index, or `undefined` if the\n * index is out of range.\n *\n * #### Complexity\n * Linear.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeAt(data, 2); // 23\n * ArrayExt.removeAt(data, -2); // 12\n * ArrayExt.removeAt(data, 10); // undefined;\n * ```\n */\n function removeAt(array, index) {\n let n = array.length;\n if (index < 0) {\n index += n;\n }\n if (index < 0 || index >= n) {\n return undefined;\n }\n let value = array[index];\n for (let i = index + 1; i < n; ++i) {\n array[i - 1] = array[i];\n }\n array.length = n - 1;\n return value;\n }\n ArrayExt.removeAt = removeAt;\n /**\n * Remove the first occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstOf(data, 12); // 1\n * ArrayExt.removeFirstOf(data, 17); // -1\n * ArrayExt.removeFirstOf(data, 39, 3); // -1\n * ArrayExt.removeFirstOf(data, 39, 3, 2); // 2\n * ```\n */\n function removeFirstOf(array, value, start = 0, stop = -1) {\n let index = firstIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeFirstOf = removeFirstOf;\n /**\n * Remove the last occurrence of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The index of the removed value, or `-1` if the value\n * is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastOf(data, 12); // 5\n * ArrayExt.removeLastOf(data, 17); // -1\n * ArrayExt.removeLastOf(data, 39, 2); // -1\n * ArrayExt.removeLastOf(data, 39, 2, 3); // 3\n * ```\n */\n function removeLastOf(array, value, start = -1, stop = 0) {\n let index = lastIndexOf(array, value, start, stop);\n if (index !== -1) {\n removeAt(array, index);\n }\n return index;\n }\n ArrayExt.removeLastOf = removeLastOf;\n /**\n * Remove all occurrences of a value from an array.\n *\n * @param array - The array of interest.\n *\n * @param value - The value to remove from the array. Values are\n * compared using strict `===` equality.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * let data = [14, 12, 23, 39, 14, 12, 19, 14];\n * ArrayExt.removeAllOf(data, 12); // 2\n * ArrayExt.removeAllOf(data, 17); // 0\n * ArrayExt.removeAllOf(data, 14, 1, 4); // 1\n * ```\n */\n function removeAllOf(array, value, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && array[i] === value) {\n count++;\n }\n else if (stop < start &&\n (i <= stop || i >= start) &&\n array[i] === value) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllOf = removeAllOf;\n /**\n * Remove the first occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `stop < start` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeFirstWhere(data, isEven); // { index: 0, value: 0 }\n * ArrayExt.removeFirstWhere(data, isEven, 2); // { index: 3, value: 14 }\n * ArrayExt.removeFirstWhere(data, isEven, 4); // { index: -1, value: undefined }\n * ```\n */\n function removeFirstWhere(array, fn, start = 0, stop = -1) {\n let value;\n let index = findFirstIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeFirstWhere = removeFirstWhere;\n /**\n * Remove the last occurrence of a value which matches a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The removed `{ index, value }`, which will be `-1` and\n * `undefined` if the value is not contained in the array.\n *\n * #### Notes\n * If `start < stop` the search will wrap at the end of the array.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * let data = [0, 12, 23, 39, 14, 12, 75];\n * ArrayExt.removeLastWhere(data, isEven); // { index: 5, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2); // { index: 1, value: 12 }\n * ArrayExt.removeLastWhere(data, isEven, 2, 1); // { index: -1, value: undefined }\n * ```\n */\n function removeLastWhere(array, fn, start = -1, stop = 0) {\n let value;\n let index = findLastIndex(array, fn, start, stop);\n if (index !== -1) {\n value = removeAt(array, index);\n }\n return { index, value };\n }\n ArrayExt.removeLastWhere = removeLastWhere;\n /**\n * Remove all occurrences of values which match a predicate.\n *\n * @param array - The array of interest.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @param start - The index of the first element in the range to be\n * searched, inclusive. The default value is `0`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @param stop - The index of the last element in the range to be\n * searched, inclusive. The default value is `-1`. Negative values\n * are taken as an offset from the end of the array.\n *\n * @returns The number of elements removed from the array.\n *\n * #### Notes\n * If `stop < start` the search will conceptually wrap at the end of\n * the array, however the array will be traversed front-to-back.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { ArrayExt } from '@lumino/algorithm';\n *\n * function isEven(value: number): boolean {\n * return value % 2 === 0;\n * }\n *\n * function isNegative(value: number): boolean {\n * return value < 0;\n * }\n *\n * let data = [0, 12, -13, -9, 23, 39, 14, -15, 12, 75];\n * ArrayExt.removeAllWhere(data, isEven); // 4\n * ArrayExt.removeAllWhere(data, isNegative, 0, 3); // 2\n * ```\n */\n function removeAllWhere(array, fn, start = 0, stop = -1) {\n let n = array.length;\n if (n === 0) {\n return 0;\n }\n if (start < 0) {\n start = Math.max(0, start + n);\n }\n else {\n start = Math.min(start, n - 1);\n }\n if (stop < 0) {\n stop = Math.max(0, stop + n);\n }\n else {\n stop = Math.min(stop, n - 1);\n }\n let count = 0;\n for (let i = 0; i < n; ++i) {\n if (start <= stop && i >= start && i <= stop && fn(array[i], i)) {\n count++;\n }\n else if (stop < start && (i <= stop || i >= start) && fn(array[i], i)) {\n count++;\n }\n else if (count > 0) {\n array[i - count] = array[i];\n }\n }\n if (count > 0) {\n array.length = n - count;\n }\n return count;\n }\n ArrayExt.removeAllWhere = removeAllWhere;\n})(ArrayExt || (ArrayExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Chain together several iterables.\n *\n * @deprecated\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields the values of the iterables\n * in the order in which they are supplied.\n *\n * #### Example\n * ```typescript\n * import { chain } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = chain(data1, data2);\n *\n * Array.from(stream); // [1, 2, 3, 4, 5, 6]\n * ```\n */\nfunction* chain(...objects) {\n for (const object of objects) {\n yield* object;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an empty iterator.\n *\n * @returns A new iterator which yields nothing.\n *\n * #### Example\n * ```typescript\n * import { empty } from '@lumino/algorithm';\n *\n * let stream = empty();\n *\n * Array.from(stream); // []\n * ```\n */\n// eslint-disable-next-line require-yield\nfunction* empty() {\n return;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Enumerate an iterable object.\n *\n * @param object - The iterable object of interest.\n *\n * @param start - The starting enum value. The default is `0`.\n *\n * @returns An iterator which yields the enumerated values.\n *\n * #### Example\n * ```typescript\n * import { enumerate } from '@lumino/algorithm';\n *\n * let data = ['foo', 'bar', 'baz'];\n *\n * let stream = enumerate(data, 1);\n *\n * Array.from(stream); // [[1, 'foo'], [2, 'bar'], [3, 'baz']]\n * ```\n */\nfunction* enumerate(object, start = 0) {\n for (const value of object) {\n yield [start++, value];\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Filter an iterable for values which pass a test.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns An iterator which yields the values which pass the test.\n *\n * #### Example\n * ```typescript\n * import { filter } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = filter(data, value => value % 2 === 0);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* filter(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Find the first value in an iterable which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The first matching value, or `undefined` if no matching\n * value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { find } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * find(data, isCat).name; // 'fluffy'\n * ```\n */\nfunction find(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return value;\n }\n }\n return undefined;\n}\n/**\n * Find the index of the first value which matches a predicate.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The predicate function to apply to the values.\n *\n * @returns The index of the first matching value, or `-1` if no\n * matching value is found.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { findIndex } from '@lumino/algorithm';\n *\n * interface IAnimal { species: string, name: string };\n *\n * function isCat(value: IAnimal): boolean {\n * return value.species === 'cat';\n * }\n *\n * let data: IAnimal[] = [\n * { species: 'dog', name: 'spot' },\n * { species: 'cat', name: 'fluffy' },\n * { species: 'alligator', name: 'pocho' }\n * ];\n *\n * findIndex(data, isCat); // 1\n * ```\n */\nfunction findIndex(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return index - 1;\n }\n }\n return -1;\n}\n/**\n * Find the minimum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The minimum value in the iterable. If multiple values are\n * equivalent to the minimum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { min } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * min([7, 4, 0, 3, 9, 4], numberCmp); // 0\n * ```\n */\nfunction min(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) < 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the maximum value in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns The maximum value in the iterable. If multiple values are\n * equivalent to the maximum, the left-most value is returned. If\n * the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { max } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * max([7, 4, 0, 3, 9, 4], numberCmp); // 9\n * ```\n */\nfunction max(object, fn) {\n let result = undefined;\n for (const value of object) {\n if (result === undefined) {\n result = value;\n continue;\n }\n if (fn(value, result) > 0) {\n result = value;\n }\n }\n return result;\n}\n/**\n * Find the minimum and maximum values in an iterable.\n *\n * @param object - The iterable object to search.\n *\n * @param fn - The 3-way comparison function to apply to the values.\n * It should return `< 0` if the first value is less than the second.\n * `0` if the values are equivalent, or `> 0` if the first value is\n * greater than the second.\n *\n * @returns A 2-tuple of the `[min, max]` values in the iterable. If\n * multiple values are equivalent, the left-most values are returned.\n * If the iterable is empty, this returns `undefined`.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { minmax } from '@lumino/algorithm';\n *\n * function numberCmp(a: number, b: number): number {\n * return a - b;\n * }\n *\n * minmax([7, 4, 0, 3, 9, 4], numberCmp); // [0, 9]\n * ```\n */\nfunction minmax(object, fn) {\n let empty = true;\n let vmin;\n let vmax;\n for (const value of object) {\n if (empty) {\n vmin = value;\n vmax = value;\n empty = false;\n }\n else if (fn(value, vmin) < 0) {\n vmin = value;\n }\n else if (fn(value, vmax) > 0) {\n vmax = value;\n }\n }\n return empty ? undefined : [vmin, vmax];\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an array from an iterable of values.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new array of values from the given object.\n *\n * #### Example\n * ```typescript\n * import { toArray } from '@lumino/algorithm';\n *\n * let stream = [1, 2, 3, 4, 5, 6][Symbol.iterator]();\n *\n * toArray(stream); // [1, 2, 3, 4, 5, 6];\n * ```\n */\nfunction toArray(object) {\n return Array.from(object);\n}\n/**\n * Create an object from an iterable of key/value pairs.\n *\n * @param object - The iterable object of interest.\n *\n * @returns A new object mapping keys to values.\n *\n * #### Example\n * ```typescript\n * import { toObject } from '@lumino/algorithm';\n *\n * let data: [string, number][] = [['one', 1], ['two', 2], ['three', 3]];\n *\n * toObject(data); // { one: 1, two: 2, three: 3 }\n * ```\n */\nfunction toObject(object) {\n const result = {};\n for (const [key, value] of object) {\n result[key] = value;\n }\n return result;\n}\n/**\n * Invoke a function for each value in an iterable.\n *\n * @deprecated\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The callback function to invoke for each value.\n *\n * #### Notes\n * Iteration can be terminated early by returning `false` from the\n * callback function.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { each } from '@lumino/algorithm';\n *\n * let data = [5, 7, 0, -2, 9];\n *\n * each(data, value => { console.log(value); });\n * ```\n */\nfunction each(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return;\n }\n }\n}\n/**\n * Test whether all values in an iterable satisfy a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if all values pass the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `false` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { every } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * every(data, value => value % 2 === 0); // false\n * every(data, value => value % 2 === 1); // true\n * ```\n */\nfunction every(object, fn) {\n let index = 0;\n for (const value of object) {\n if (false === fn(value, index++)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Test whether any value in an iterable satisfies a predicate.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The predicate function to invoke for each value.\n *\n * @returns `true` if any value passes the test, `false` otherwise.\n *\n * #### Notes\n * Iteration terminates on the first `true` predicate result.\n *\n * #### Complexity\n * Linear.\n *\n * #### Example\n * ```typescript\n * import { some } from '@lumino/algorithm';\n *\n * let data = [5, 7, 1];\n *\n * some(data, value => value === 7); // true\n * some(data, value => value === 3); // false\n * ```\n */\nfunction some(object, fn) {\n let index = 0;\n for (const value of object) {\n if (fn(value, index++)) {\n return true;\n }\n }\n return false;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Transform the values of an iterable with a mapping function.\n *\n * @param object - The iterable object of interest.\n *\n * @param fn - The mapping function to invoke for each value.\n *\n * @returns An iterator which yields the transformed values.\n *\n * #### Example\n * ```typescript\n * import { map } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3];\n *\n * let stream = map(data, value => value * 2);\n *\n * Array.from(stream); // [2, 4, 6]\n * ```\n */\nfunction* map(object, fn) {\n let index = 0;\n for (const value of object) {\n yield fn(value, index++);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator of evenly spaced values.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns An iterator which produces evenly spaced values.\n *\n * #### Notes\n * In the single argument form of `range(stop)`, `start` defaults to\n * `0` and `step` defaults to `1`.\n *\n * In the two argument form of `range(start, stop)`, `step` defaults\n * to `1`.\n *\n * #### Example\n * ```typescript\n * import { range } from '@lumino/algorithm';\n *\n * let stream = range(2, 4);\n *\n * Array.from(stream); // [2, 3]\n * ```\n */\nfunction* range(start, stop, step) {\n if (stop === undefined) {\n stop = start;\n start = 0;\n step = 1;\n }\n else if (step === undefined) {\n step = 1;\n }\n const length = Private.rangeLength(start, stop, step);\n for (let index = 0; index < length; index++) {\n yield start + step * index;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Compute the effective length of a range.\n *\n * @param start - The starting value for the range, inclusive.\n *\n * @param stop - The stopping value for the range, exclusive.\n *\n * @param step - The distance between each value.\n *\n * @returns The number of steps need to traverse the range.\n */\n function rangeLength(start, stop, step) {\n if (step === 0) {\n return Infinity;\n }\n if (start > stop && step > 0) {\n return 0;\n }\n if (start < stop && step < 0) {\n return 0;\n }\n return Math.ceil((stop - start) / step);\n }\n Private.rangeLength = rangeLength;\n})(Private || (Private = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nfunction reduce(object, fn, initial) {\n // Setup the iterator and fetch the first value.\n const it = object[Symbol.iterator]();\n let index = 0;\n let first = it.next();\n // An empty iterator and no initial value is an error.\n if (first.done && initial === undefined) {\n throw new TypeError('Reduce of empty iterable with no initial value.');\n }\n // If the iterator is empty, return the initial value.\n if (first.done) {\n return initial;\n }\n // If the iterator has a single item and no initial value, the\n // reducer is not invoked and the first item is the return value.\n let second = it.next();\n if (second.done && initial === undefined) {\n return first.value;\n }\n // If iterator has a single item and an initial value is provided,\n // the reducer is invoked and that result is the return value.\n if (second.done) {\n return fn(initial, first.value, index++);\n }\n // Setup the initial accumlated value.\n let accumulator;\n if (initial === undefined) {\n accumulator = fn(first.value, second.value, index++);\n }\n else {\n accumulator = fn(fn(initial, first.value, index++), second.value, index++);\n }\n // Iterate the rest of the values, updating the accumulator.\n let next;\n while (!(next = it.next()).done) {\n accumulator = fn(accumulator, next.value, index++);\n }\n // Return the final accumulated value.\n return accumulator;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator which repeats a value a number of times.\n *\n * @deprecated\n *\n * @param value - The value to repeat.\n *\n * @param count - The number of times to repeat the value.\n *\n * @returns A new iterator which repeats the specified value.\n *\n * #### Example\n * ```typescript\n * import { repeat } from '@lumino/algorithm';\n *\n * let stream = repeat(7, 3);\n *\n * Array.from(stream); // [7, 7, 7]\n * ```\n */\nfunction* repeat(value, count) {\n while (0 < count--) {\n yield value;\n }\n}\n/**\n * Create an iterator which yields a value a single time.\n *\n * @deprecated\n *\n * @param value - The value to wrap in an iterator.\n *\n * @returns A new iterator which yields the value a single time.\n *\n * #### Example\n * ```typescript\n * import { once } from '@lumino/algorithm';\n *\n * let stream = once(7);\n *\n * Array.from(stream); // [7]\n * ```\n */\nfunction* once(value) {\n yield value;\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Create an iterator for a retroable object.\n *\n * @param object - The retroable or array-like object of interest.\n *\n * @returns An iterator which traverses the object's values in reverse.\n *\n * #### Example\n * ```typescript\n * import { retro } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = retro(data);\n *\n * Array.from(stream); // [6, 5, 4, 3, 2, 1]\n * ```\n */\nfunction* retro(object) {\n if (typeof object.retro === 'function') {\n yield* object.retro();\n }\n else {\n for (let index = object.length - 1; index > -1; index--) {\n yield object[index];\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Topologically sort an iterable of edges.\n *\n * @param edges - The iterable object of edges to sort.\n * An edge is represented as a 2-tuple of `[fromNode, toNode]`.\n *\n * @returns The topologically sorted array of nodes.\n *\n * #### Notes\n * If a cycle is present in the graph, the cycle will be ignored and\n * the return value will be only approximately sorted.\n *\n * #### Example\n * ```typescript\n * import { topologicSort } from '@lumino/algorithm';\n *\n * let data = [\n * ['d', 'e'],\n * ['c', 'd'],\n * ['a', 'b'],\n * ['b', 'c']\n * ];\n *\n * topologicSort(data); // ['a', 'b', 'c', 'd', 'e']\n * ```\n */\nfunction topologicSort(edges) {\n // Setup the shared sorting state.\n let sorted = [];\n let visited = new Set();\n let graph = new Map();\n // Add the edges to the graph.\n for (const edge of edges) {\n addEdge(edge);\n }\n // Visit each node in the graph.\n for (const [k] of graph) {\n visit(k);\n }\n // Return the sorted results.\n return sorted;\n // Add an edge to the graph.\n function addEdge(edge) {\n let [fromNode, toNode] = edge;\n let children = graph.get(toNode);\n if (children) {\n children.push(fromNode);\n }\n else {\n graph.set(toNode, [fromNode]);\n }\n }\n // Recursively visit the node.\n function visit(node) {\n if (visited.has(node)) {\n return;\n }\n visited.add(node);\n let children = graph.get(node);\n if (children) {\n for (const child of children) {\n visit(child);\n }\n }\n sorted.push(node);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate over an iterable using a stepped increment.\n *\n * @param object - The iterable object of interest.\n *\n * @param step - The distance to step on each iteration. A value\n * of less than `1` will behave the same as a value of `1`.\n *\n * @returns An iterator which traverses the iterable step-wise.\n *\n * #### Example\n * ```typescript\n * import { stride } from '@lumino/algorithm';\n *\n * let data = [1, 2, 3, 4, 5, 6];\n *\n * let stream = stride(data, 2);\n *\n * Array.from(stream); // [1, 3, 5];\n * ```\n */\nfunction* stride(object, step) {\n let count = 0;\n for (const value of object) {\n if (0 === count++ % step) {\n yield value;\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for string-specific algorithms.\n */\nvar StringExt;\n(function (StringExt) {\n /**\n * Find the indices of characters in a source text.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The matched indices, or `null` if there is no match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * In order for there to be a match, all of the characters in `query`\n * **must** appear in `source` in the order given by `query`.\n *\n * Characters are matched using strict `===` equality.\n */\n function findIndices(source, query, start = 0) {\n let indices = new Array(query.length);\n for (let i = 0, j = start, n = query.length; i < n; ++i, ++j) {\n j = source.indexOf(query[i], j);\n if (j === -1) {\n return null;\n }\n indices[i] = j;\n }\n return indices;\n }\n StringExt.findIndices = findIndices;\n /**\n * A string matcher which uses a sum-of-squares algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-squares approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The index of each\n * matching character is squared and added to the score. This means\n * that early and consecutive character matches are preferred, while\n * late matches are heavily penalized.\n */\n function matchSumOfSquares(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i] - start;\n score += j * j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfSquares = matchSumOfSquares;\n /**\n * A string matcher which uses a sum-of-deltas algorithm.\n *\n * @param source - The source text which should be searched.\n *\n * @param query - The characters to locate in the source text.\n *\n * @param start - The index to start the search.\n *\n * @returns The match result, or `null` if there is no match.\n * A lower `score` represents a stronger match.\n *\n * #### Complexity\n * Linear on `sourceText`.\n *\n * #### Notes\n * This scoring algorithm uses a sum-of-deltas approach to determine\n * the score. In order for there to be a match, all of the characters\n * in `query` **must** appear in `source` in order. The delta between\n * the indices are summed to create the score. This means that groups\n * of matched characters are preferred, while fragmented matches are\n * penalized.\n */\n function matchSumOfDeltas(source, query, start = 0) {\n let indices = findIndices(source, query, start);\n if (!indices) {\n return null;\n }\n let score = 0;\n let last = start - 1;\n for (let i = 0, n = indices.length; i < n; ++i) {\n let j = indices[i];\n score += j - last - 1;\n last = j;\n }\n return { score, indices };\n }\n StringExt.matchSumOfDeltas = matchSumOfDeltas;\n /**\n * Highlight the matched characters of a source text.\n *\n * @param source - The text which should be highlighted.\n *\n * @param indices - The indices of the matched characters. They must\n * appear in increasing order and must be in bounds of the source.\n *\n * @param fn - The function to apply to the matched chunks.\n *\n * @returns An array of unmatched and highlighted chunks.\n */\n function highlight(source, indices, fn) {\n // Set up the result array.\n let result = [];\n // Set up the counter variables.\n let k = 0;\n let last = 0;\n let n = indices.length;\n // Iterator over each index.\n while (k < n) {\n // Set up the chunk indices.\n let i = indices[k];\n let j = indices[k];\n // Advance the right chunk index until it's non-contiguous.\n while (++k < n && indices[k] === j + 1) {\n j++;\n }\n // Extract the unmatched text.\n if (last < i) {\n result.push(source.slice(last, i));\n }\n // Extract and highlight the matched text.\n if (i < j + 1) {\n result.push(fn(source.slice(i, j + 1)));\n }\n // Update the last visited index.\n last = j + 1;\n }\n // Extract any remaining unmatched text.\n if (last < source.length) {\n result.push(source.slice(last));\n }\n // Return the highlighted result.\n return result;\n }\n StringExt.highlight = highlight;\n /**\n * A 3-way string comparison function.\n *\n * @param a - The first string of interest.\n *\n * @param b - The second string of interest.\n *\n * @returns `-1` if `a < b`, else `1` if `a > b`, else `0`.\n */\n function cmp(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n }\n StringExt.cmp = cmp;\n})(StringExt || (StringExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Take a fixed number of items from an iterable.\n *\n * @param object - The iterable object of interest.\n *\n * @param count - The number of items to take from the iterable.\n *\n * @returns An iterator which yields the specified number of items\n * from the source iterable.\n *\n * #### Notes\n * The returned iterator will exhaust early if the source iterable\n * contains an insufficient number of items.\n *\n * #### Example\n * ```typescript\n * import { take } from '@lumino/algorithm';\n *\n * let stream = take([5, 4, 3, 2, 1, 0, -1], 3);\n *\n * Array.from(stream); // [5, 4, 3]\n * ```\n */\nfunction* take(object, count) {\n if (count < 1) {\n return;\n }\n const it = object[Symbol.iterator]();\n let item;\n while (0 < count-- && !(item = it.next()).done) {\n yield item.value;\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * Iterate several iterables in lockstep.\n *\n * @param objects - The iterable objects of interest.\n *\n * @returns An iterator which yields successive tuples of values where\n * each value is taken in turn from the provided iterables. It will\n * be as long as the shortest provided iterable.\n *\n * #### Example\n * ```typescript\n * import { zip } from '@lumino/algorithm';\n *\n * let data1 = [1, 2, 3];\n * let data2 = [4, 5, 6];\n *\n * let stream = zip(data1, data2);\n *\n * Array.from(stream); // [[1, 4], [2, 5], [3, 6]]\n * ```\n */\nfunction* zip(...objects) {\n const iters = objects.map(obj => obj[Symbol.iterator]());\n let tuple = iters.map(it => it.next());\n for (; every(tuple, item => !item.done); tuple = iters.map(it => it.next())) {\n yield tuple.map(item => item.value);\n }\n}\n\nexport { ArrayExt, StringExt, chain, each, empty, enumerate, every, filter, find, findIndex, map, max, min, minmax, once, range, reduce, repeat, retro, some, stride, take, toArray, toObject, topologicSort, zip };\n//# sourceMappingURL=index.es6.js.map\n","/**\n * A generic doubly-linked list.\n */\nclass LinkedList {\n constructor() {\n this._first = null;\n this._last = null;\n this._size = 0;\n }\n /**\n * Whether the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get isEmpty() {\n return this._size === 0;\n }\n /**\n * The size of the list.\n *\n * #### Complexity\n * `O(1)`\n *\n * #### Notes\n * This is equivalent to `length`.\n */\n get size() {\n return this._size;\n }\n /**\n * The length of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `size`.\n *\n * This property is deprecated.\n */\n get length() {\n return this._size;\n }\n /**\n * The first value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get first() {\n return this._first ? this._first.value : undefined;\n }\n /**\n * The last value in the list.\n *\n * This is `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get last() {\n return this._last ? this._last.value : undefined;\n }\n /**\n * The first node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get firstNode() {\n return this._first;\n }\n /**\n * The last node in the list.\n *\n * This is `null` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n get lastNode() {\n return this._last;\n }\n /**\n * Create an iterator over the values in the list.\n *\n * @returns A new iterator starting with the first value.\n *\n * #### Complexity\n * Constant.\n */\n *[Symbol.iterator]() {\n let node = this._first;\n while (node) {\n yield node.value;\n node = node.next;\n }\n }\n /**\n * Create a reverse iterator over the values in the list.\n *\n * @returns A new iterator starting with the last value.\n *\n * #### Complexity\n * Constant.\n */\n *retro() {\n let node = this._last;\n while (node) {\n yield node.value;\n node = node.prev;\n }\n }\n /**\n * Create an iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the first node.\n *\n * #### Complexity\n * Constant.\n */\n *nodes() {\n let node = this._first;\n while (node) {\n yield node;\n node = node.next;\n }\n }\n /**\n * Create a reverse iterator over the nodes in the list.\n *\n * @returns A new iterator starting with the last node.\n *\n * #### Complexity\n * Constant.\n */\n *retroNodes() {\n let node = this._last;\n while (node) {\n yield node;\n node = node.prev;\n }\n }\n /**\n * Assign new values to the list, replacing all current values.\n *\n * @param values - The values to assign to the list.\n *\n * #### Complexity\n * Linear.\n */\n assign(values) {\n this.clear();\n for (const value of values) {\n this.addLast(value);\n }\n }\n /**\n * Add a value to the end of the list.\n *\n * @param value - The value to add to the end of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `addLast`.\n */\n push(value) {\n this.addLast(value);\n }\n /**\n * Remove and return the value at the end of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `removeLast`.\n */\n pop() {\n return this.removeLast();\n }\n /**\n * Add a value to the beginning of the list.\n *\n * @param value - The value to add to the beginning of the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `addFirst`.\n */\n shift(value) {\n this.addFirst(value);\n }\n /**\n * Remove and return the value at the beginning of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * This is equivalent to `removeFirst`.\n */\n unshift() {\n return this.removeFirst();\n }\n /**\n * Add a value to the beginning of the list.\n *\n * @param value - The value to add to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n addFirst(value) {\n let node = new Private.LinkedListNode(this, value);\n if (!this._first) {\n this._first = node;\n this._last = node;\n }\n else {\n node.next = this._first;\n this._first.prev = node;\n this._first = node;\n }\n this._size++;\n return node;\n }\n /**\n * Add a value to the end of the list.\n *\n * @param value - The value to add to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Complexity\n * Constant.\n */\n addLast(value) {\n let node = new Private.LinkedListNode(this, value);\n if (!this._last) {\n this._first = node;\n this._last = node;\n }\n else {\n node.prev = this._last;\n this._last.next = node;\n this._last = node;\n }\n this._size++;\n return node;\n }\n /**\n * Insert a value before a specific node in the list.\n *\n * @param value - The value to insert before the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the beginning of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n insertBefore(value, ref) {\n if (!ref || ref === this._first) {\n return this.addFirst(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n let node = new Private.LinkedListNode(this, value);\n let _ref = ref;\n let prev = _ref.prev;\n node.next = _ref;\n node.prev = prev;\n _ref.prev = node;\n prev.next = node;\n this._size++;\n return node;\n }\n /**\n * Insert a value after a specific node in the list.\n *\n * @param value - The value to insert after the reference node.\n *\n * @param ref - The reference node of interest. If this is `null`,\n * the value will be added to the end of the list.\n *\n * @returns The list node which holds the value.\n *\n * #### Notes\n * The reference node must be owned by the list.\n *\n * #### Complexity\n * Constant.\n */\n insertAfter(value, ref) {\n if (!ref || ref === this._last) {\n return this.addLast(value);\n }\n if (!(ref instanceof Private.LinkedListNode) || ref.list !== this) {\n throw new Error('Reference node is not owned by the list.');\n }\n let node = new Private.LinkedListNode(this, value);\n let _ref = ref;\n let next = _ref.next;\n node.next = next;\n node.prev = _ref;\n _ref.next = node;\n next.prev = node;\n this._size++;\n return node;\n }\n /**\n * Remove and return the value at the beginning of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n removeFirst() {\n let node = this._first;\n if (!node) {\n return undefined;\n }\n if (node === this._last) {\n this._first = null;\n this._last = null;\n }\n else {\n this._first = node.next;\n this._first.prev = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._size--;\n return node.value;\n }\n /**\n * Remove and return the value at the end of the list.\n *\n * @returns The removed value, or `undefined` if the list is empty.\n *\n * #### Complexity\n * Constant.\n */\n removeLast() {\n let node = this._last;\n if (!node) {\n return undefined;\n }\n if (node === this._first) {\n this._first = null;\n this._last = null;\n }\n else {\n this._last = node.prev;\n this._last.next = null;\n }\n node.list = null;\n node.next = null;\n node.prev = null;\n this._size--;\n return node.value;\n }\n /**\n * Remove a specific node from the list.\n *\n * @param node - The node to remove from the list.\n *\n * #### Complexity\n * Constant.\n *\n * #### Notes\n * The node must be owned by the list.\n */\n removeNode(node) {\n if (!(node instanceof Private.LinkedListNode) || node.list !== this) {\n throw new Error('Node is not owned by the list.');\n }\n let _node = node;\n if (_node === this._first && _node === this._last) {\n this._first = null;\n this._last = null;\n }\n else if (_node === this._first) {\n this._first = _node.next;\n this._first.prev = null;\n }\n else if (_node === this._last) {\n this._last = _node.prev;\n this._last.next = null;\n }\n else {\n _node.next.prev = _node.prev;\n _node.prev.next = _node.next;\n }\n _node.list = null;\n _node.next = null;\n _node.prev = null;\n this._size--;\n }\n /**\n * Remove all values from the list.\n *\n * #### Complexity\n * Linear.\n */\n clear() {\n let node = this._first;\n while (node) {\n let next = node.next;\n node.list = null;\n node.prev = null;\n node.next = null;\n node = next;\n }\n this._first = null;\n this._last = null;\n this._size = 0;\n }\n}\n/**\n * The namespace for the `LinkedList` class statics.\n */\n(function (LinkedList) {\n /**\n * Create a linked list from an iterable of values.\n *\n * @param values - The iterable object of interest.\n *\n * @returns A new linked list initialized with the given values.\n *\n * #### Complexity\n * Linear.\n */\n function from(values) {\n let list = new LinkedList();\n list.assign(values);\n return list;\n }\n LinkedList.from = from;\n})(LinkedList || (LinkedList = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The internal linked list node implementation.\n */\n class LinkedListNode {\n /**\n * Construct a new linked list node.\n *\n * @param list - The list which owns the node.\n *\n * @param value - The value for the link.\n */\n constructor(list, value) {\n /**\n * The linked list which created and owns the node.\n */\n this.list = null;\n /**\n * The next node in the list.\n */\n this.next = null;\n /**\n * The previous node in the list.\n */\n this.prev = null;\n this.list = list;\n this.value = value;\n }\n }\n Private.LinkedListNode = LinkedListNode;\n})(Private || (Private = {}));\n\nexport { LinkedList };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\nimport { JSONExt } from '@lumino/coreutils';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { Platform, Selector } from '@lumino/domutils';\nimport { getKeyboardLayout } from '@lumino/keyboard';\nimport { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module commands\n */\n/**\n * An object which manages a collection of commands.\n *\n * #### Notes\n * A command registry can be used to populate a variety of action-based\n * widgets, such as command palettes, menus, and toolbars.\n */\nclass CommandRegistry {\n constructor() {\n this._timerID = 0;\n this._timerModifierID = 0;\n this._replaying = false;\n this._keystrokes = [];\n this._keydownEvents = [];\n this._keyBindings = [];\n this._exactKeyMatch = null;\n this._commands = new Map();\n this._commandChanged = new Signal(this);\n this._commandExecuted = new Signal(this);\n this._keyBindingChanged = new Signal(this);\n this._holdKeyBindingPromises = new Map();\n }\n /**\n * A signal emitted when a command has changed.\n *\n * #### Notes\n * This signal is useful for visual representations of commands which\n * need to refresh when the state of a relevant command has changed.\n */\n get commandChanged() {\n return this._commandChanged;\n }\n /**\n * A signal emitted when a command has executed.\n *\n * #### Notes\n * Care should be taken when consuming this signal. The command system is used\n * by many components for many user actions. Handlers registered with this\n * signal must return quickly to ensure the overall application remains responsive.\n */\n get commandExecuted() {\n return this._commandExecuted;\n }\n /**\n * A signal emitted when a key binding is changed.\n */\n get keyBindingChanged() {\n return this._keyBindingChanged;\n }\n /**\n * A read-only array of the key bindings in the registry.\n */\n get keyBindings() {\n return this._keyBindings;\n }\n /**\n * List the ids of the registered commands.\n *\n * @returns A new array of the registered command ids.\n */\n listCommands() {\n return Array.from(this._commands.keys());\n }\n /**\n * Test whether a specific command is registered.\n *\n * @param id - The id of the command of interest.\n *\n * @returns `true` if the command is registered, `false` otherwise.\n */\n hasCommand(id) {\n return this._commands.has(id);\n }\n /**\n * Add a command to the registry.\n *\n * @param id - The unique id of the command.\n *\n * @param options - The options for the command.\n *\n * @returns A disposable which will remove the command.\n *\n * @throws An error if the given `id` is already registered.\n */\n addCommand(id, options) {\n // Throw an error if the id is already registered.\n if (this._commands.has(id)) {\n throw new Error(`Command '${id}' already registered.`);\n }\n // Add the command to the registry.\n this._commands.set(id, Private.createCommand(options));\n // Emit the `commandChanged` signal.\n this._commandChanged.emit({ id, type: 'added' });\n // Return a disposable which will remove the command.\n return new DisposableDelegate(() => {\n // Remove the command from the registry.\n this._commands.delete(id);\n // Emit the `commandChanged` signal.\n this._commandChanged.emit({ id, type: 'removed' });\n });\n }\n /**\n * Notify listeners that the state of a command has changed.\n *\n * @param id - The id of the command which has changed. If more than\n * one command has changed, this argument should be omitted.\n *\n * @throws An error if the given `id` is not registered.\n *\n * #### Notes\n * This method should be called by the command author whenever the\n * application state changes such that the results of the command\n * metadata functions may have changed.\n *\n * This will cause the `commandChanged` signal to be emitted.\n */\n notifyCommandChanged(id) {\n if (id !== undefined && !this._commands.has(id)) {\n throw new Error(`Command '${id}' is not registered.`);\n }\n this._commandChanged.emit({ id, type: id ? 'changed' : 'many-changed' });\n }\n /**\n * Get the description for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The description for the command.\n */\n describedBy(id, args = JSONExt.emptyObject) {\n var _a;\n let cmd = this._commands.get(id);\n return Promise.resolve((_a = cmd === null || cmd === void 0 ? void 0 : cmd.describedBy.call(undefined, args)) !== null && _a !== void 0 ? _a : { args: null });\n }\n /**\n * Get the display label for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The display label for the command, or an empty string\n * if the command is not registered.\n */\n label(id, args = JSONExt.emptyObject) {\n var _a;\n let cmd = this._commands.get(id);\n return (_a = cmd === null || cmd === void 0 ? void 0 : cmd.label.call(undefined, args)) !== null && _a !== void 0 ? _a : '';\n }\n /**\n * Get the mnemonic index for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The mnemonic index for the command, or `-1` if the\n * command is not registered.\n */\n mnemonic(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.mnemonic.call(undefined, args) : -1;\n }\n /**\n * Get the icon renderer for a specific command.\n *\n * DEPRECATED: if set to a string value, the .icon field will\n * function as an alias for the .iconClass field, for backwards\n * compatibility. In the future when this is removed, the default\n * return type will become undefined.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon renderer for the command or `undefined`.\n */\n icon(id, args = JSONExt.emptyObject) {\n var _a;\n return (_a = this._commands.get(id)) === null || _a === void 0 ? void 0 : _a.icon.call(undefined, args);\n }\n /**\n * Get the icon class for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon class for the command, or an empty string if\n * the command is not registered.\n */\n iconClass(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.iconClass.call(undefined, args) : '';\n }\n /**\n * Get the icon label for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The icon label for the command, or an empty string if\n * the command is not registered.\n */\n iconLabel(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.iconLabel.call(undefined, args) : '';\n }\n /**\n * Get the short form caption for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The caption for the command, or an empty string if the\n * command is not registered.\n */\n caption(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.caption.call(undefined, args) : '';\n }\n /**\n * Get the usage help text for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The usage text for the command, or an empty string if\n * the command is not registered.\n */\n usage(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.usage.call(undefined, args) : '';\n }\n /**\n * Get the extra class name for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The class name for the command, or an empty string if\n * the command is not registered.\n */\n className(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.className.call(undefined, args) : '';\n }\n /**\n * Get the dataset for a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns The dataset for the command, or an empty dataset if\n * the command is not registered.\n */\n dataset(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.dataset.call(undefined, args) : {};\n }\n /**\n * Test whether a specific command is enabled.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is enabled,\n * or `false` if the command is not registered.\n */\n isEnabled(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isEnabled.call(undefined, args) : false;\n }\n /**\n * Test whether a specific command is toggled.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is toggled,\n * or `false` if the command is not registered.\n */\n isToggled(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isToggled.call(undefined, args) : false;\n }\n /**\n * Test whether a specific command is toggleable.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is toggleable,\n * or `false` if the command is not registered.\n */\n isToggleable(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isToggleable : false;\n }\n /**\n * Test whether a specific command is visible.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A boolean indicating whether the command is visible,\n * or `false` if the command is not registered.\n */\n isVisible(id, args = JSONExt.emptyObject) {\n let cmd = this._commands.get(id);\n return cmd ? cmd.isVisible.call(undefined, args) : false;\n }\n /**\n * Execute a specific command.\n *\n * @param id - The id of the command of interest.\n *\n * @param args - The arguments for the command.\n *\n * @returns A promise which resolves with the result of the command.\n *\n * #### Notes\n * The promise will reject if the command throws an exception,\n * or if the command is not registered.\n */\n execute(id, args = JSONExt.emptyObject) {\n // Reject if the command is not registered.\n let cmd = this._commands.get(id);\n if (!cmd) {\n return Promise.reject(new Error(`Command '${id}' not registered.`));\n }\n // Execute the command and reject if an exception is thrown.\n let value;\n try {\n value = cmd.execute.call(undefined, args);\n }\n catch (err) {\n value = Promise.reject(err);\n }\n // Create the return promise which resolves the result.\n let result = Promise.resolve(value);\n // Emit the command executed signal.\n this._commandExecuted.emit({ id, args, result });\n // Return the result promise to the caller.\n return result;\n }\n /**\n * Add a key binding to the registry.\n *\n * @param options - The options for creating the key binding.\n *\n * @returns A disposable which removes the added key binding.\n *\n * #### Notes\n * If multiple key bindings are registered for the same sequence, the\n * binding with the highest selector specificity is executed first. A\n * tie is broken by using the most recently added key binding.\n *\n * Ambiguous key bindings are resolved with a timeout. As an example,\n * suppose two key bindings are registered: one with the key sequence\n * `['Ctrl D']`, and another with `['Ctrl D', 'Ctrl W']`. If the user\n * presses `Ctrl D`, the first binding cannot be immediately executed\n * since the user may intend to complete the chord with `Ctrl W`. For\n * such cases, a timer is used to allow the chord to be completed. If\n * the chord is not completed before the timeout, the first binding\n * is executed.\n */\n addKeyBinding(options) {\n // Create the binding for the given options.\n let binding = Private.createKeyBinding(options);\n // Add the key binding to the bindings array.\n this._keyBindings.push(binding);\n // Emit the `bindingChanged` signal.\n this._keyBindingChanged.emit({ binding, type: 'added' });\n // Return a disposable which will remove the binding.\n return new DisposableDelegate(() => {\n // Remove the binding from the array.\n ArrayExt.removeFirstOf(this._keyBindings, binding);\n // Emit the `bindingChanged` signal.\n this._keyBindingChanged.emit({ binding, type: 'removed' });\n });\n }\n /**\n * Process a `'keydown'` event and invoke a matching key binding.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * #### Notes\n * This should be called in response to a `'keydown'` event in order\n * to invoke the command for the best matching key binding.\n *\n * The registry **does not** install its own listener for `'keydown'`\n * events. This allows the application full control over the nodes\n * and phase for which the registry processes `'keydown'` events.\n *\n * When the keydown event is processed, if the event target or any of its\n * ancestor nodes has a `data-lm-suppress-shortcuts` attribute, its keydown\n * events will not invoke commands.\n */\n processKeydownEvent(event) {\n // Bail immediately if playing back keystrokes.\n if (event.defaultPrevented || this._replaying) {\n return;\n }\n // Get the normalized keystroke for the event.\n const keystroke = CommandRegistry.keystrokeForKeydownEvent(event);\n // If the keystroke is not valid for the keyboard layout, replay\n // any suppressed events and clear the pending state.\n if (!keystroke) {\n this._replayKeydownEvents();\n this._clearPendingState();\n return;\n }\n // Check that only mod key(s) have been pressed.\n if (CommandRegistry.isModifierKeyPressed(event)) {\n // Find the exact match for the modifier keys.\n let { exact } = Private.matchKeyBinding(this._keyBindings, [keystroke], event);\n if (exact) {\n // If the mod keys match an exact shortcut, start a dedicated timer.\n event.preventDefault();\n event.stopPropagation();\n this._startModifierTimer(exact);\n }\n else {\n // Otherwise stop potential existing timer.\n this._clearModifierTimer();\n }\n return;\n }\n // Add the keystroke to the current key sequence.\n this._keystrokes.push(keystroke);\n // Find the exact and partial matches for the key sequence.\n const { exact, partial } = Private.matchKeyBinding(this._keyBindings, this._keystrokes, event);\n // Whether there is any partial match.\n const hasPartial = partial.length !== 0;\n // If there is no exact match and no partial match, replay\n // any suppressed events and clear the pending state.\n if (!exact && !hasPartial) {\n this._replayKeydownEvents();\n this._clearPendingState();\n return;\n }\n // Stop propagation of the event. If there is only a partial match,\n // the event will be replayed if a final exact match never occurs.\n if ((exact === null || exact === void 0 ? void 0 : exact.preventDefault) || partial.some(match => match.preventDefault)) {\n event.preventDefault();\n event.stopPropagation();\n }\n // Store the event for possible playback in the future and for\n // the use in execution hold check.\n this._keydownEvents.push(event);\n // If there is an exact match but no partial match, the exact match\n // can be dispatched immediately. The pending state is cleared so\n // the next key press starts from the default state.\n if (exact && !hasPartial) {\n this._executeKeyBinding(exact);\n this._clearPendingState();\n return;\n }\n // If there is both an exact match and a partial match, the exact\n // match is stored for future dispatch in case the timer expires\n // before a more specific match is triggered.\n if (exact) {\n this._exactKeyMatch = exact;\n }\n // (Re)start the timer to dispatch the most recent exact match\n // in case the partial match fails to result in an exact match.\n this._startTimer();\n }\n /**\n * Delay the execution of any command matched against the given 'keydown' event\n * until the `permission` to execute is granted.\n *\n * @param event - The event object for a `'keydown'` event.\n * @param permission - The promise with value indicating whether to proceed with the execution.\n *\n * ### Note\n * This enables the caller of `processKeydownEvent` to asynchronously prevent the\n * execution of the command based on external events.\n */\n holdKeyBindingExecution(event, permission) {\n this._holdKeyBindingPromises.set(event, permission);\n }\n /**\n * Process a ``keyup`` event to clear the timer on the modifier, if it exists.\n *\n * @param event - The event object for a `'keydown'` event.\n */\n processKeyupEvent(event) {\n this._clearModifierTimer();\n }\n /**\n * Start or restart the timeout on the modifier keys.\n *\n * This timeout will end only if the keys are hold.\n */\n _startModifierTimer(exact) {\n this._clearModifierTimer();\n this._timerModifierID = window.setTimeout(() => {\n this._executeKeyBinding(exact);\n }, Private.modifierkeyTimeOut);\n }\n /**\n * Clear the timeout on modifier keys.\n */\n _clearModifierTimer() {\n if (this._timerModifierID !== 0) {\n clearTimeout(this._timerModifierID);\n this._timerModifierID = 0;\n }\n }\n /**\n * Start or restart the pending timeout.\n */\n _startTimer() {\n this._clearTimer();\n this._timerID = window.setTimeout(() => {\n this._onPendingTimeout();\n }, Private.CHORD_TIMEOUT);\n }\n /**\n * Clear the pending timeout.\n */\n _clearTimer() {\n if (this._timerID !== 0) {\n clearTimeout(this._timerID);\n this._timerID = 0;\n }\n }\n /**\n * Replay the keydown events which were suppressed.\n */\n _replayKeydownEvents() {\n if (this._keydownEvents.length === 0) {\n return;\n }\n this._replaying = true;\n this._keydownEvents.forEach(Private.replayKeyEvent);\n this._replaying = false;\n }\n /**\n * Execute the command for the given key binding.\n *\n * If the command is missing or disabled, a warning will be logged.\n *\n * The execution will not proceed if any of the events leading to\n * the keybinding matching were held with the permission resolving to false.\n */\n async _executeKeyBinding(binding) {\n if (this._holdKeyBindingPromises.size !== 0) {\n // Copy keydown events list to ensure it is available in async code.\n const keydownEvents = [...this._keydownEvents];\n // Wait until all hold requests on execution are lifted.\n const executionAllowed = (await Promise.race([\n Promise.all(keydownEvents.map(async (event) => { var _a; return (_a = this._holdKeyBindingPromises.get(event)) !== null && _a !== void 0 ? _a : Promise.resolve(true); })),\n new Promise(resolve => {\n setTimeout(() => resolve([false]), Private.KEYBINDING_HOLD_TIMEOUT);\n })\n ])).every(Boolean);\n // Clear the hold requests.\n this._holdKeyBindingPromises.clear();\n // Do not proceed with the execution if any of the hold requests did not get the permission to proceed.\n if (!executionAllowed) {\n return;\n }\n }\n let { command, args } = binding;\n let newArgs = {\n _luminoEvent: { type: 'keybinding', keys: binding.keys },\n ...args\n };\n if (!this.hasCommand(command) || !this.isEnabled(command, newArgs)) {\n let word = this.hasCommand(command) ? 'enabled' : 'registered';\n let keys = binding.keys.join(', ');\n let msg1 = `Cannot execute key binding '${keys}':`;\n let msg2 = `command '${command}' is not ${word}.`;\n console.warn(`${msg1} ${msg2}`);\n return;\n }\n await this.execute(command, newArgs);\n }\n /**\n * Clear the internal pending state.\n */\n _clearPendingState() {\n this._clearTimer();\n this._clearModifierTimer();\n this._exactKeyMatch = null;\n this._keystrokes.length = 0;\n this._keydownEvents.length = 0;\n }\n /**\n * Handle the partial match timeout.\n */\n _onPendingTimeout() {\n this._timerID = 0;\n if (this._exactKeyMatch) {\n this._executeKeyBinding(this._exactKeyMatch);\n }\n else {\n this._replayKeydownEvents();\n }\n this._clearPendingState();\n }\n}\n/**\n * The namespace for the `CommandRegistry` class statics.\n */\n(function (CommandRegistry) {\n /**\n * Parse a keystroke into its constituent components.\n *\n * @param keystroke - The keystroke of interest.\n *\n * @returns The parsed components of the keystroke.\n *\n * #### Notes\n * The keystroke should be of the form:\n * `[ [ [ ]]]`\n *\n * The supported modifiers are: `Accel`, `Alt`, `Cmd`, `Ctrl`, and\n * `Shift`. The `Accel` modifier is translated to `Cmd` on Mac and\n * `Ctrl` on all other platforms.\n *\n * The parsing is tolerant and will not throw exceptions. Notably:\n * - Duplicate modifiers are ignored.\n * - Extra primary keys are ignored.\n * - The order of modifiers and primary key is irrelevant.\n * - The keystroke parts should be separated by whitespace.\n * - The keystroke is case sensitive.\n */\n function parseKeystroke(keystroke) {\n let key = '';\n let alt = false;\n let cmd = false;\n let ctrl = false;\n let shift = false;\n for (let token of keystroke.split(/\\s+/)) {\n if (token === 'Accel') {\n if (Platform.IS_MAC) {\n cmd = true;\n }\n else {\n ctrl = true;\n }\n }\n else if (token === 'Alt') {\n alt = true;\n }\n else if (token === 'Cmd') {\n cmd = true;\n }\n else if (token === 'Ctrl') {\n ctrl = true;\n }\n else if (token === 'Shift') {\n shift = true;\n }\n else if (token.length > 0) {\n key = token;\n }\n }\n return { cmd, ctrl, alt, shift, key };\n }\n CommandRegistry.parseKeystroke = parseKeystroke;\n /**\n * Normalize a keystroke into a canonical representation.\n *\n * @param keystroke - The keystroke of interest.\n *\n * @returns The normalized representation of the keystroke.\n *\n * #### Notes\n * This normalizes the keystroke by removing duplicate modifiers and\n * extra primary keys, and assembling the parts in a canonical order.\n *\n * The `Cmd` modifier is ignored on non-Mac platforms.\n */\n function normalizeKeystroke(keystroke) {\n let mods = '';\n let parts = parseKeystroke(keystroke);\n if (parts.ctrl) {\n mods += 'Ctrl ';\n }\n if (parts.alt) {\n mods += 'Alt ';\n }\n if (parts.shift) {\n mods += 'Shift ';\n }\n if (parts.cmd && Platform.IS_MAC) {\n mods += 'Cmd ';\n }\n if (!parts.key) {\n return mods.trim();\n }\n return mods + parts.key;\n }\n CommandRegistry.normalizeKeystroke = normalizeKeystroke;\n /**\n * Get the platform-specific normalized keys for an options object.\n *\n * @param options - The options for the key binding.\n *\n * @returns Array of combined, normalized keys.\n */\n function normalizeKeys(options) {\n let keys;\n if (Platform.IS_WIN) {\n keys = options.winKeys || options.keys;\n }\n else if (Platform.IS_MAC) {\n keys = options.macKeys || options.keys;\n }\n else {\n keys = options.linuxKeys || options.keys;\n }\n return keys.map(normalizeKeystroke);\n }\n CommandRegistry.normalizeKeys = normalizeKeys;\n /**\n * Format keystrokes for display on the local system.\n *\n * If a list of keystrokes is provided, it will be displayed as\n * a comma-separated string\n *\n * @param keystroke The keystrokes to format\n * @returns The keystrokes representation\n */\n function formatKeystroke(keystroke) {\n return typeof keystroke === 'string'\n ? formatSingleKey(keystroke)\n : keystroke.map(formatSingleKey).join(', ');\n function formatSingleKey(key) {\n let mods = [];\n let separator = Platform.IS_MAC ? ' ' : '+';\n let parts = parseKeystroke(key);\n if (parts.ctrl) {\n mods.push('Ctrl');\n }\n if (parts.alt) {\n mods.push('Alt');\n }\n if (parts.shift) {\n mods.push('Shift');\n }\n if (Platform.IS_MAC && parts.cmd) {\n mods.push('Cmd');\n }\n mods.push(parts.key);\n return mods.map(Private.formatKey).join(separator);\n }\n }\n CommandRegistry.formatKeystroke = formatKeystroke;\n /**\n * Check if `'keydown'` event is caused by pressing a modifier key that should be ignored.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns `true` if modifier key was pressed, `false` otherwise.\n */\n function isModifierKeyPressed(event) {\n let layout = getKeyboardLayout();\n let key = layout.keyForKeydownEvent(event);\n return layout.isModifierKey(key);\n }\n CommandRegistry.isModifierKeyPressed = isModifierKeyPressed;\n /**\n * Create a normalized keystroke for a `'keydown'` event.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns A normalized keystroke, or an empty string if the event\n * does not represent a valid keystroke for the given layout.\n */\n function keystrokeForKeydownEvent(event) {\n let layout = getKeyboardLayout();\n let key = layout.keyForKeydownEvent(event);\n let mods = [];\n if (event.ctrlKey) {\n mods.push('Ctrl');\n }\n if (event.altKey) {\n mods.push('Alt');\n }\n if (event.shiftKey) {\n mods.push('Shift');\n }\n if (event.metaKey && Platform.IS_MAC) {\n mods.push('Cmd');\n }\n if (!layout.isModifierKey(key)) {\n mods.push(key);\n }\n // for purely modifier key strings\n return mods.join(' ');\n }\n CommandRegistry.keystrokeForKeydownEvent = keystrokeForKeydownEvent;\n})(CommandRegistry || (CommandRegistry = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The timeout in ms for triggering a key binding chord.\n */\n Private.CHORD_TIMEOUT = 1000;\n /**\n * The timeout in ms for stopping the hold on keybinding execution.\n */\n Private.KEYBINDING_HOLD_TIMEOUT = 1000;\n /**\n * The timeout in ms for triggering a modifer key binding.\n */\n Private.modifierkeyTimeOut = 500;\n /**\n * Create a normalized command from an options object.\n */\n function createCommand(options) {\n return {\n execute: options.execute,\n describedBy: asFunc(typeof options.describedBy === 'function'\n ? options.describedBy\n : { args: null, ...options.describedBy }, () => {\n return { args: null };\n }),\n label: asFunc(options.label, emptyStringFunc),\n mnemonic: asFunc(options.mnemonic, negativeOneFunc),\n icon: asFunc(options.icon, undefinedFunc),\n iconClass: asFunc(options.iconClass, emptyStringFunc),\n iconLabel: asFunc(options.iconLabel, emptyStringFunc),\n caption: asFunc(options.caption, emptyStringFunc),\n usage: asFunc(options.usage, emptyStringFunc),\n className: asFunc(options.className, emptyStringFunc),\n dataset: asFunc(options.dataset, emptyDatasetFunc),\n isEnabled: options.isEnabled || trueFunc,\n isToggled: options.isToggled || falseFunc,\n isToggleable: options.isToggleable || !!options.isToggled,\n isVisible: options.isVisible || trueFunc\n };\n }\n Private.createCommand = createCommand;\n /**\n * Create a key binding object from key binding options.\n */\n function createKeyBinding(options) {\n var _a;\n return {\n keys: CommandRegistry.normalizeKeys(options),\n selector: validateSelector(options),\n command: options.command,\n args: options.args || JSONExt.emptyObject,\n preventDefault: (_a = options.preventDefault) !== null && _a !== void 0 ? _a : true\n };\n }\n Private.createKeyBinding = createKeyBinding;\n /**\n * Find the key bindings which match a key sequence.\n *\n * This returns a match result which contains the best exact matching\n * binding, and a flag which indicates if there are partial matches.\n */\n function matchKeyBinding(bindings, keys, event) {\n // The current best exact match.\n let exact = null;\n // Partial matches.\n let partial = [];\n // The match distance for the exact match.\n let distance = Infinity;\n // The specificity for the exact match.\n let specificity = 0;\n // Iterate over the bindings and search for the best match.\n for (let i = 0, n = bindings.length; i < n; ++i) {\n // Lookup the current binding.\n let binding = bindings[i];\n // Check whether the key binding sequence is a match.\n let sqm = matchSequence(binding.keys, keys);\n // If there is no match, the binding is ignored.\n if (sqm === 0 /* SequenceMatch.None */) {\n continue;\n }\n // If it is a partial match and no other partial match has been\n // found, ensure the selector matches and set the partial flag.\n if (sqm === 2 /* SequenceMatch.Partial */) {\n if (targetDistance(binding.selector, event) !== -1) {\n partial.push(binding);\n }\n continue;\n }\n // Ignore the match if the selector doesn't match, or if the\n // matched node is farther away than the current best match.\n let td = targetDistance(binding.selector, event);\n if (td === -1 || td > distance) {\n continue;\n }\n // Get the specificity for the selector.\n let sp = Selector.calculateSpecificity(binding.selector);\n // Update the best match if this match is stronger.\n if (!exact || td < distance || sp >= specificity) {\n exact = binding;\n distance = td;\n specificity = sp;\n }\n }\n // Return the match result.\n return { exact, partial };\n }\n Private.matchKeyBinding = matchKeyBinding;\n /**\n * Replay a keyboard event.\n *\n * This synthetically dispatches a clone of the keyboard event.\n */\n function replayKeyEvent(event) {\n event.target.dispatchEvent(cloneKeyboardEvent(event));\n }\n Private.replayKeyEvent = replayKeyEvent;\n function formatKey(key) {\n if (Platform.IS_MAC) {\n return MAC_DISPLAY.hasOwnProperty(key) ? MAC_DISPLAY[key] : key;\n }\n else {\n return WIN_DISPLAY.hasOwnProperty(key) ? WIN_DISPLAY[key] : key;\n }\n }\n Private.formatKey = formatKey;\n const MAC_DISPLAY = {\n Backspace: '⌫',\n Tab: '⇥',\n Enter: '⏎',\n Shift: '⇧',\n Ctrl: '⌃',\n Alt: '⌥',\n Escape: '⎋',\n PageUp: '⇞',\n PageDown: '⇟',\n End: '↘',\n Home: '↖',\n ArrowLeft: '←',\n ArrowUp: '↑',\n ArrowRight: '→',\n ArrowDown: '↓',\n Delete: '⌦',\n Cmd: '⌘'\n };\n const WIN_DISPLAY = {\n Escape: 'Esc',\n PageUp: 'Page Up',\n PageDown: 'Page Down',\n ArrowLeft: 'Left',\n ArrowUp: 'Up',\n ArrowRight: 'Right',\n ArrowDown: 'Down',\n Delete: 'Del'\n };\n /**\n * A singleton empty string function.\n */\n const emptyStringFunc = () => '';\n /**\n * A singleton `-1` number function\n */\n const negativeOneFunc = () => -1;\n /**\n * A singleton true boolean function.\n */\n const trueFunc = () => true;\n /**\n * A singleton false boolean function.\n */\n const falseFunc = () => false;\n /**\n * A singleton empty dataset function.\n */\n const emptyDatasetFunc = () => ({});\n /**\n * A singleton undefined function\n */\n const undefinedFunc = () => undefined;\n /**\n * Cast a value or command func to a command func.\n */\n function asFunc(value, dfault) {\n if (value === undefined) {\n return dfault;\n }\n if (typeof value === 'function') {\n return value;\n }\n return () => value;\n }\n /**\n * Validate the selector for an options object.\n *\n * This returns the validated selector, or throws if the selector is\n * invalid or contains commas.\n */\n function validateSelector(options) {\n if (options.selector.indexOf(',') !== -1) {\n throw new Error(`Selector cannot contain commas: ${options.selector}`);\n }\n if (!Selector.isValid(options.selector)) {\n throw new Error(`Invalid selector: ${options.selector}`);\n }\n return options.selector;\n }\n /**\n * Test whether a key binding sequence matches a key sequence.\n *\n * Returns a `SequenceMatch` value indicating the type of match.\n */\n function matchSequence(bindKeys, userKeys) {\n if (bindKeys.length < userKeys.length) {\n return 0 /* SequenceMatch.None */;\n }\n for (let i = 0, n = userKeys.length; i < n; ++i) {\n if (bindKeys[i] !== userKeys[i]) {\n return 0 /* SequenceMatch.None */;\n }\n }\n if (bindKeys.length > userKeys.length) {\n return 2 /* SequenceMatch.Partial */;\n }\n return 1 /* SequenceMatch.Exact */;\n }\n /**\n * Find the distance from the target node to the first matching node.\n *\n * This traverses the event path from `target` to `currentTarget` and\n * computes the distance from `target` to the first node which matches\n * the CSS selector. If no match is found, `-1` is returned.\n */\n function targetDistance(selector, event) {\n let targ = event.target;\n let curr = event.currentTarget;\n for (let dist = 0; targ !== null; targ = targ.parentElement, ++dist) {\n if (targ.hasAttribute('data-lm-suppress-shortcuts')) {\n return -1;\n }\n if (Selector.matches(targ, selector)) {\n return dist;\n }\n if (targ === curr) {\n return -1;\n }\n }\n return -1;\n }\n /**\n * Clone a keyboard event.\n */\n function cloneKeyboardEvent(event) {\n // A custom event is required because Chrome nulls out the\n // `keyCode` field in user-generated `KeyboardEvent` types.\n let clone = document.createEvent('Event');\n let bubbles = event.bubbles || true;\n let cancelable = event.cancelable || true;\n clone.initEvent(event.type || 'keydown', bubbles, cancelable);\n clone.key = event.key || '';\n clone.keyCode = event.keyCode || 0;\n clone.which = event.keyCode || 0;\n clone.ctrlKey = event.ctrlKey || false;\n clone.altKey = event.altKey || false;\n clone.shiftKey = event.shiftKey || false;\n clone.metaKey = event.metaKey || false;\n clone.view = event.view || window;\n return clone;\n }\n})(Private || (Private = {}));\n\nexport { CommandRegistry };\n//# sourceMappingURL=index.es6.js.map\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@lumino/algorithm')) :\n typeof define === 'function' && define.amd ? define(['exports', '@lumino/algorithm'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.lumino_coreutils = {}, global.lumino_algorithm));\n})(this, (function (exports, algorithm) { 'use strict';\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for JSON-specific functions.\n */\n exports.JSONExt = void 0;\n (function (JSONExt) {\n /**\n * A shared frozen empty JSONObject\n */\n JSONExt.emptyObject = Object.freeze({});\n /**\n * A shared frozen empty JSONArray\n */\n JSONExt.emptyArray = Object.freeze([]);\n /**\n * Test whether a JSON value is a primitive.\n *\n * @param value - The JSON value of interest.\n *\n * @returns `true` if the value is a primitive,`false` otherwise.\n */\n function isPrimitive(value) {\n return (value === null ||\n typeof value === 'boolean' ||\n typeof value === 'number' ||\n typeof value === 'string');\n }\n JSONExt.isPrimitive = isPrimitive;\n function isArray(value) {\n return Array.isArray(value);\n }\n JSONExt.isArray = isArray;\n function isObject(value) {\n return !isPrimitive(value) && !isArray(value);\n }\n JSONExt.isObject = isObject;\n /**\n * Compare two JSON values for deep equality.\n *\n * @param first - The first JSON value of interest.\n *\n * @param second - The second JSON value of interest.\n *\n * @returns `true` if the values are equivalent, `false` otherwise.\n */\n function deepEqual(first, second) {\n // Check referential and primitive equality first.\n if (first === second) {\n return true;\n }\n // If one is a primitive, the `===` check ruled out the other.\n if (isPrimitive(first) || isPrimitive(second)) {\n return false;\n }\n // Test whether they are arrays.\n let a1 = isArray(first);\n let a2 = isArray(second);\n // Bail if the types are different.\n if (a1 !== a2) {\n return false;\n }\n // If they are both arrays, compare them.\n if (a1 && a2) {\n return deepArrayEqual(first, second);\n }\n // At this point, they must both be objects.\n return deepObjectEqual(first, second);\n }\n JSONExt.deepEqual = deepEqual;\n /**\n * Create a deep copy of a JSON value.\n *\n * @param value - The JSON value to copy.\n *\n * @returns A deep copy of the given JSON value.\n */\n function deepCopy(value) {\n // Do nothing for primitive values.\n if (isPrimitive(value)) {\n return value;\n }\n // Deep copy an array.\n if (isArray(value)) {\n return deepArrayCopy(value);\n }\n // Deep copy an object.\n return deepObjectCopy(value);\n }\n JSONExt.deepCopy = deepCopy;\n /**\n * Compare two JSON arrays for deep equality.\n */\n function deepArrayEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Test the arrays for equal length.\n if (first.length !== second.length) {\n return false;\n }\n // Compare the values for equality.\n for (let i = 0, n = first.length; i < n; ++i) {\n if (!deepEqual(first[i], second[i])) {\n return false;\n }\n }\n // At this point, the arrays are equal.\n return true;\n }\n /**\n * Compare two JSON objects for deep equality.\n */\n function deepObjectEqual(first, second) {\n // Check referential equality first.\n if (first === second) {\n return true;\n }\n // Check for the first object's keys in the second object.\n for (let key in first) {\n if (first[key] !== undefined && !(key in second)) {\n return false;\n }\n }\n // Check for the second object's keys in the first object.\n for (let key in second) {\n if (second[key] !== undefined && !(key in first)) {\n return false;\n }\n }\n // Compare the values for equality.\n for (let key in first) {\n // Get the values.\n let firstValue = first[key];\n let secondValue = second[key];\n // If both are undefined, ignore the key.\n if (firstValue === undefined && secondValue === undefined) {\n continue;\n }\n // If only one value is undefined, the objects are not equal.\n if (firstValue === undefined || secondValue === undefined) {\n return false;\n }\n // Compare the values.\n if (!deepEqual(firstValue, secondValue)) {\n return false;\n }\n }\n // At this point, the objects are equal.\n return true;\n }\n /**\n * Create a deep copy of a JSON array.\n */\n function deepArrayCopy(value) {\n let result = new Array(value.length);\n for (let i = 0, n = value.length; i < n; ++i) {\n result[i] = deepCopy(value[i]);\n }\n return result;\n }\n /**\n * Create a deep copy of a JSON object.\n */\n function deepObjectCopy(value) {\n let result = {};\n for (let key in value) {\n // Ignore undefined values.\n let subvalue = value[key];\n if (subvalue === undefined) {\n continue;\n }\n result[key] = deepCopy(subvalue);\n }\n return result;\n }\n })(exports.JSONExt || (exports.JSONExt = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * An object which stores MIME data for general application use.\n *\n * #### Notes\n * This class does not attempt to enforce \"correctness\" of MIME types\n * and their associated data. Since this class is designed to transfer\n * arbitrary data and objects within the same application, it assumes\n * that the user provides correct and accurate data.\n */\n class MimeData {\n constructor() {\n this._types = [];\n this._values = [];\n }\n /**\n * Get an array of the MIME types contained within the dataset.\n *\n * @returns A new array of the MIME types, in order of insertion.\n */\n types() {\n return this._types.slice();\n }\n /**\n * Test whether the dataset has an entry for the given type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns `true` if the dataset contains a value for the given\n * MIME type, `false` otherwise.\n */\n hasData(mime) {\n return this._types.indexOf(mime) !== -1;\n }\n /**\n * Get the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @returns The value for the given MIME type, or `undefined` if\n * the dataset does not contain a value for the type.\n */\n getData(mime) {\n let i = this._types.indexOf(mime);\n return i !== -1 ? this._values[i] : undefined;\n }\n /**\n * Set the data value for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * @param data - The data value for the given MIME type.\n *\n * #### Notes\n * This will overwrite any previous entry for the MIME type.\n */\n setData(mime, data) {\n this.clearData(mime);\n this._types.push(mime);\n this._values.push(data);\n }\n /**\n * Remove the data entry for the given MIME type.\n *\n * @param mime - The MIME type of interest.\n *\n * #### Notes\n * This is a no-op if there is no entry for the given MIME type.\n */\n clearData(mime) {\n let i = this._types.indexOf(mime);\n if (i !== -1) {\n this._types.splice(i, 1);\n this._values.splice(i, 1);\n }\n }\n /**\n * Remove all data entries from the dataset.\n */\n clear() {\n this._types.length = 0;\n this._values.length = 0;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /**\n * Plugin registry.\n */\n class PluginRegistry {\n constructor(options = {}) {\n this._application = null;\n this._validatePlugin = () => true;\n this._plugins = new Map();\n this._services = new Map();\n if (options.validatePlugin) {\n console.info('Plugins may be rejected by the custom validation plugin method.');\n this._validatePlugin = options.validatePlugin;\n }\n }\n /**\n * The application object.\n *\n * It will be provided as first argument to the\n * plugins activation and deactivation functions.\n *\n * It can only be set once.\n *\n * By default, it is `null`.\n */\n get application() {\n return this._application;\n }\n set application(v) {\n if (this._application !== null) {\n throw Error('PluginRegistry.application is already set. It cannot be overridden.');\n }\n this._application = v;\n }\n /**\n * The list of all the deferred plugins.\n */\n get deferredPlugins() {\n return Array.from(this._plugins)\n .filter(([id, plugin]) => plugin.autoStart === 'defer')\n .map(([id, plugin]) => id);\n }\n /**\n * Get a plugin description.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns The plugin description.\n */\n getPluginDescription(id) {\n var _a, _b;\n return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.description) !== null && _b !== void 0 ? _b : '';\n }\n /**\n * Test whether a plugin is registered with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns `true` if the plugin is registered, `false` otherwise.\n */\n hasPlugin(id) {\n return this._plugins.has(id);\n }\n /**\n * Test whether a plugin is activated with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns `true` if the plugin is activated, `false` otherwise.\n */\n isPluginActivated(id) {\n var _a, _b;\n return (_b = (_a = this._plugins.get(id)) === null || _a === void 0 ? void 0 : _a.activated) !== null && _b !== void 0 ? _b : false;\n }\n /**\n * List the IDs of the plugins registered with the application.\n *\n * @returns A new array of the registered plugin IDs.\n */\n listPlugins() {\n return Array.from(this._plugins.keys());\n }\n /**\n * Register a plugin with the application.\n *\n * @param plugin - The plugin to register.\n *\n * #### Notes\n * An error will be thrown if a plugin with the same ID is already\n * registered, or if the plugin has a circular dependency.\n *\n * If the plugin provides a service which has already been provided\n * by another plugin, the new service will override the old service.\n */\n registerPlugin(plugin) {\n // Throw an error if the plugin ID is already registered.\n if (this._plugins.has(plugin.id)) {\n throw new TypeError(`Plugin '${plugin.id}' is already registered.`);\n }\n if (!this._validatePlugin(plugin)) {\n throw new Error(`Plugin '${plugin.id}' is not valid.`);\n }\n // Create the normalized plugin data.\n const data = Private.createPluginData(plugin);\n // Ensure the plugin does not cause a cyclic dependency.\n Private.ensureNoCycle(data, this._plugins, this._services);\n // Add the service token to the service map.\n if (data.provides) {\n this._services.set(data.provides, data.id);\n }\n // Add the plugin to the plugin map.\n this._plugins.set(data.id, data);\n }\n /**\n * Register multiple plugins with the application.\n *\n * @param plugins - The plugins to register.\n *\n * #### Notes\n * This calls `registerPlugin()` for each of the given plugins.\n */\n registerPlugins(plugins) {\n for (const plugin of plugins) {\n this.registerPlugin(plugin);\n }\n }\n /**\n * Deregister a plugin with the application.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @param force - Whether to deregister the plugin even if it is active.\n */\n deregisterPlugin(id, force) {\n const plugin = this._plugins.get(id);\n if (!plugin) {\n return;\n }\n if (plugin.activated && !force) {\n throw new Error(`Plugin '${id}' is still active.`);\n }\n this._plugins.delete(id);\n }\n /**\n * Activate the plugin with the given ID.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns A promise which resolves when the plugin is activated\n * or rejects with an error if it cannot be activated.\n */\n async activatePlugin(id) {\n // Reject the promise if the plugin is not registered.\n const plugin = this._plugins.get(id);\n if (!plugin) {\n throw new ReferenceError(`Plugin '${id}' is not registered.`);\n }\n // Resolve immediately if the plugin is already activated.\n if (plugin.activated) {\n return;\n }\n // Return the pending resolver promise if it exists.\n if (plugin.promise) {\n return plugin.promise;\n }\n // Resolve the required services for the plugin.\n const required = plugin.requires.map(t => this.resolveRequiredService(t));\n // Resolve the optional services for the plugin.\n const optional = plugin.optional.map(t => this.resolveOptionalService(t));\n // Setup the resolver promise for the plugin.\n plugin.promise = Promise.all([...required, ...optional])\n .then(services => plugin.activate.apply(undefined, [this.application, ...services]))\n .then(service => {\n plugin.service = service;\n plugin.activated = true;\n plugin.promise = null;\n })\n .catch(error => {\n plugin.promise = null;\n throw error;\n });\n // Return the pending resolver promise.\n return plugin.promise;\n }\n /**\n * Activate all the deferred plugins.\n *\n * @returns A promise which will resolve when each plugin is activated\n * or rejects with an error if one cannot be activated.\n */\n async activatePlugins(kind, options = {}) {\n switch (kind) {\n case 'defer': {\n const promises = this.deferredPlugins\n .filter(pluginId => this._plugins.get(pluginId).autoStart)\n .map(pluginId => {\n return this.activatePlugin(pluginId);\n });\n await Promise.all(promises);\n break;\n }\n case 'startUp': {\n // Collect the ids of the startup plugins.\n const startups = Private.collectStartupPlugins(this._plugins, options);\n // Generate the activation promises.\n const promises = startups.map(async (id) => {\n try {\n return await this.activatePlugin(id);\n }\n catch (error) {\n console.error(`Plugin '${id}' failed to activate.`, error);\n }\n });\n await Promise.all(promises);\n break;\n }\n }\n }\n /**\n * Deactivate the plugin and its downstream dependents if and only if the\n * plugin and its dependents all support `deactivate`.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @returns A list of IDs of downstream plugins deactivated with this one.\n */\n async deactivatePlugin(id) {\n // Reject the promise if the plugin is not registered.\n const plugin = this._plugins.get(id);\n if (!plugin) {\n throw new ReferenceError(`Plugin '${id}' is not registered.`);\n }\n // Bail early if the plugin is not activated.\n if (!plugin.activated) {\n return [];\n }\n // Check that this plugin can deactivate.\n if (!plugin.deactivate) {\n throw new TypeError(`Plugin '${id}'#deactivate() method missing`);\n }\n // Find the optimal deactivation order for plugins downstream of this one.\n const manifest = Private.findDependents(id, this._plugins, this._services);\n const downstream = manifest.map(id => this._plugins.get(id));\n // Check that all downstream plugins can deactivate.\n for (const plugin of downstream) {\n if (!plugin.deactivate) {\n throw new TypeError(`Plugin ${plugin.id}#deactivate() method missing (depends on ${id})`);\n }\n }\n // Deactivate all downstream plugins.\n for (const plugin of downstream) {\n const services = [...plugin.requires, ...plugin.optional].map(service => {\n const id = this._services.get(service);\n return id ? this._plugins.get(id).service : null;\n });\n // Await deactivation so the next plugins only receive active services.\n await plugin.deactivate(this.application, ...services);\n plugin.service = null;\n plugin.activated = false;\n }\n // Remove plugin ID and return manifest of deactivated plugins.\n manifest.pop();\n return manifest;\n }\n /**\n * Resolve a required service of a given type.\n *\n * @param token - The token for the service type of interest.\n *\n * @returns A promise which resolves to an instance of the requested\n * service, or rejects with an error if it cannot be resolved.\n *\n * #### Notes\n * Services are singletons. The same instance will be returned each\n * time a given service token is resolved.\n *\n * If the plugin which provides the service has not been activated,\n * resolving the service will automatically activate the plugin.\n *\n * User code will not typically call this method directly. Instead,\n * the required services for the user's plugins will be resolved\n * automatically when the plugin is activated.\n */\n async resolveRequiredService(token) {\n // Reject the promise if there is no provider for the type.\n const id = this._services.get(token);\n if (!id) {\n throw new TypeError(`No provider for: ${token.name}.`);\n }\n // Activate the plugin if necessary.\n const plugin = this._plugins.get(id);\n if (!plugin.activated) {\n await this.activatePlugin(id);\n }\n return plugin.service;\n }\n /**\n * Resolve an optional service of a given type.\n *\n * @param token - The token for the service type of interest.\n *\n * @returns A promise which resolves to an instance of the requested\n * service, or `null` if it cannot be resolved.\n *\n * #### Notes\n * Services are singletons. The same instance will be returned each\n * time a given service token is resolved.\n *\n * If the plugin which provides the service has not been activated,\n * resolving the service will automatically activate the plugin.\n *\n * User code will not typically call this method directly. Instead,\n * the optional services for the user's plugins will be resolved\n * automatically when the plugin is activated.\n */\n async resolveOptionalService(token) {\n // Resolve with `null` if there is no provider for the type.\n const id = this._services.get(token);\n if (!id) {\n return null;\n }\n // Activate the plugin if necessary.\n const plugin = this._plugins.get(id);\n if (!plugin.activated) {\n try {\n await this.activatePlugin(id);\n }\n catch (reason) {\n console.error(reason);\n return null;\n }\n }\n return plugin.service;\n }\n }\n /**\n * The namespace for the module implementation details.\n */\n var Private;\n (function (Private) {\n class PluginData {\n constructor(plugin) {\n var _a, _b, _c, _d;\n this._activated = false;\n this._promise = null;\n this._service = null;\n this.id = plugin.id;\n this.description = (_a = plugin.description) !== null && _a !== void 0 ? _a : '';\n this.activate = plugin.activate;\n this.deactivate = (_b = plugin.deactivate) !== null && _b !== void 0 ? _b : null;\n this.provides = (_c = plugin.provides) !== null && _c !== void 0 ? _c : null;\n this.autoStart = (_d = plugin.autoStart) !== null && _d !== void 0 ? _d : false;\n this.requires = plugin.requires ? plugin.requires.slice() : [];\n this.optional = plugin.optional ? plugin.optional.slice() : [];\n }\n /**\n * Whether the plugin has been activated.\n */\n get activated() {\n return this._activated;\n }\n set activated(a) {\n this._activated = a;\n }\n /**\n * The resolved service for the plugin, or `null`.\n */\n get service() {\n return this._service;\n }\n set service(s) {\n this._service = s;\n }\n /**\n * The pending resolver promise, or `null`.\n */\n get promise() {\n return this._promise;\n }\n set promise(p) {\n this._promise = p;\n }\n }\n /**\n * Create a normalized plugin data object for the given plugin.\n */\n function createPluginData(plugin) {\n return new PluginData(plugin);\n }\n Private.createPluginData = createPluginData;\n /**\n * Ensure no cycle is present in the plugin resolution graph.\n *\n * If a cycle is detected, an error will be thrown.\n */\n function ensureNoCycle(plugin, plugins, services) {\n const dependencies = [...plugin.requires, ...plugin.optional];\n const visit = (token) => {\n if (token === plugin.provides) {\n return true;\n }\n const id = services.get(token);\n if (!id) {\n return false;\n }\n const visited = plugins.get(id);\n const dependencies = [...visited.requires, ...visited.optional];\n if (dependencies.length === 0) {\n return false;\n }\n trace.push(id);\n if (dependencies.some(visit)) {\n return true;\n }\n trace.pop();\n return false;\n };\n // Bail early if there cannot be a cycle.\n if (!plugin.provides || dependencies.length === 0) {\n return;\n }\n // Setup a stack to trace service resolution.\n const trace = [plugin.id];\n // Throw an exception if a cycle is present.\n if (dependencies.some(visit)) {\n throw new ReferenceError(`Cycle detected: ${trace.join(' -> ')}.`);\n }\n }\n Private.ensureNoCycle = ensureNoCycle;\n /**\n * Find dependents in deactivation order.\n *\n * @param id - The ID of the plugin of interest.\n *\n * @param plugins - The map containing all plugins.\n *\n * @param services - The map containing all services.\n *\n * @returns A list of dependent plugin IDs in order of deactivation\n *\n * #### Notes\n * The final item of the returned list is always the plugin of interest.\n */\n function findDependents(id, plugins, services) {\n const edges = new Array();\n const add = (id) => {\n const plugin = plugins.get(id);\n // FIXME In the case of missing optional dependencies, we may consider\n // deactivating and reactivating the plugin without the missing service.\n const dependencies = [...plugin.requires, ...plugin.optional];\n edges.push(...dependencies.reduce((acc, dep) => {\n const service = services.get(dep);\n if (service) {\n // An edge is oriented from dependent to provider.\n acc.push([id, service]);\n }\n return acc;\n }, []));\n };\n for (const id of plugins.keys()) {\n add(id);\n }\n // Filter edges\n // - Get all packages that dependent on the package to be deactivated\n const newEdges = edges.filter(edge => edge[1] === id);\n let oldSize = 0;\n while (newEdges.length > oldSize) {\n const previousSize = newEdges.length;\n // Get all packages that dependent on packages that will be deactivated\n const packagesOfInterest = new Set(newEdges.map(edge => edge[0]));\n for (const poi of packagesOfInterest) {\n edges\n .filter(edge => edge[1] === poi)\n .forEach(edge => {\n // We check it is not already included to deal with circular dependencies\n if (!newEdges.includes(edge)) {\n newEdges.push(edge);\n }\n });\n }\n oldSize = previousSize;\n }\n const sorted = algorithm.topologicSort(newEdges);\n const index = sorted.findIndex(candidate => candidate === id);\n if (index === -1) {\n return [id];\n }\n return sorted.slice(0, index + 1);\n }\n Private.findDependents = findDependents;\n /**\n * Collect the IDs of the plugins to activate on startup.\n */\n function collectStartupPlugins(plugins, options) {\n // Create a set to hold the plugin IDs.\n const collection = new Set();\n // Collect the auto-start (non deferred) plugins.\n for (const id of plugins.keys()) {\n if (plugins.get(id).autoStart === true) {\n collection.add(id);\n }\n }\n // Add the startup plugins.\n if (options.startPlugins) {\n for (const id of options.startPlugins) {\n collection.add(id);\n }\n }\n // Remove the ignored plugins.\n if (options.ignorePlugins) {\n for (const id of options.ignorePlugins) {\n collection.delete(id);\n }\n }\n // Return the collected startup plugins.\n return Array.from(collection);\n }\n Private.collectStartupPlugins = collectStartupPlugins;\n })(Private || (Private = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A class which wraps a promise into a delegate object.\n *\n * #### Notes\n * This class is useful when the logic to resolve or reject a promise\n * cannot be defined at the point where the promise is created.\n */\n class PromiseDelegate {\n /**\n * Construct a new promise delegate.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n /**\n * Resolve the wrapped promise with the given value.\n *\n * @param value - The value to use for resolving the promise.\n */\n resolve(value) {\n let resolve = this._resolve;\n resolve(value);\n }\n /**\n * Reject the wrapped promise with the given value.\n *\n * @reason - The reason for rejecting the promise.\n */\n reject(reason) {\n let reject = this._reject;\n reject(reason);\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A runtime object which captures compile-time type information.\n *\n * #### Notes\n * A token captures the compile-time type of an interface or class in\n * an object which can be used at runtime in a type-safe fashion.\n */\n class Token {\n /**\n * Construct a new token.\n *\n * @param name - A human readable name for the token.\n * @param description - Token purpose description for documentation.\n */\n constructor(name, description) {\n this.name = name;\n this.description = description !== null && description !== void 0 ? description : '';\n this._tokenStructuralPropertyT = null;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n // Fallback\n function fallbackRandomValues(buffer) {\n let value = 0;\n for (let i = 0, n = buffer.length; i < n; ++i) {\n if (i % 4 === 0) {\n value = (Math.random() * 0xffffffff) >>> 0;\n }\n buffer[i] = value & 0xff;\n value >>>= 8;\n }\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for random number related functionality.\n */\n exports.Random = void 0;\n (function (Random) {\n /**\n * A function which generates random bytes.\n *\n * @param buffer - The `Uint8Array` to fill with random bytes.\n *\n * #### Notes\n * A cryptographically strong random number generator will be used if\n * available. Otherwise, `Math.random` will be used as a fallback for\n * randomness.\n *\n * The following RNGs are supported, listed in order of precedence:\n * - `window.crypto.getRandomValues`\n * - `window.msCrypto.getRandomValues`\n * - `require('crypto').randomFillSync\n * - `require('crypto').randomBytes\n * - `Math.random`\n */\n Random.getRandomValues = (() => {\n // Look up the crypto module if available.\n const crypto = (typeof window !== 'undefined' && (window.crypto || window.msCrypto)) ||\n null;\n // Modern browsers and IE 11\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return function getRandomValues(buffer) {\n return crypto.getRandomValues(buffer);\n };\n }\n // Fallback\n return fallbackRandomValues;\n })();\n })(exports.Random || (exports.Random = {}));\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * A function which creates a function that generates UUID v4 identifiers.\n *\n * @returns A new function that creates a UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n function uuid4Factory(getRandomValues) {\n // Create a 16 byte array to hold the random values.\n const bytes = new Uint8Array(16);\n // Create a look up table from bytes to hex strings.\n const lut = new Array(256);\n // Pad the single character hex digits with a leading zero.\n for (let i = 0; i < 16; ++i) {\n lut[i] = '0' + i.toString(16);\n }\n // Populate the rest of the hex digits.\n for (let i = 16; i < 256; ++i) {\n lut[i] = i.toString(16);\n }\n // Return a function which generates the UUID.\n return function uuid4() {\n // Get a new batch of random values.\n getRandomValues(bytes);\n // Set the UUID version number to 4.\n bytes[6] = 0x40 | (bytes[6] & 0x0f);\n // Set the clock sequence bit to the RFC spec.\n bytes[8] = 0x80 | (bytes[8] & 0x3f);\n // Assemble the UUID string.\n return (lut[bytes[0]] +\n lut[bytes[1]] +\n lut[bytes[2]] +\n lut[bytes[3]] +\n '-' +\n lut[bytes[4]] +\n lut[bytes[5]] +\n '-' +\n lut[bytes[6]] +\n lut[bytes[7]] +\n '-' +\n lut[bytes[8]] +\n lut[bytes[9]] +\n '-' +\n lut[bytes[10]] +\n lut[bytes[11]] +\n lut[bytes[12]] +\n lut[bytes[13]] +\n lut[bytes[14]] +\n lut[bytes[15]]);\n };\n }\n\n // Copyright (c) Jupyter Development Team.\n // Distributed under the terms of the Modified BSD License.\n /*-----------------------------------------------------------------------------\n | Copyright (c) 2014-2017, PhosphorJS Contributors\n |\n | Distributed under the terms of the BSD 3-Clause License.\n |\n | The full license is in the file LICENSE, distributed with this software.\n |----------------------------------------------------------------------------*/\n /**\n * The namespace for UUID related functionality.\n */\n exports.UUID = void 0;\n (function (UUID) {\n /**\n * A function which generates UUID v4 identifiers.\n *\n * @returns A new UUID v4 string.\n *\n * #### Notes\n * This implementation complies with RFC 4122.\n *\n * This uses `Random.getRandomValues()` for random bytes, which in\n * turn will use the underlying `crypto` module of the platform if\n * it is available. The fallback for randomness is `Math.random`.\n */\n UUID.uuid4 = uuid4Factory(exports.Random.getRandomValues);\n })(exports.UUID || (exports.UUID = {}));\n\n exports.MimeData = MimeData;\n exports.PluginRegistry = PluginRegistry;\n exports.PromiseDelegate = PromiseDelegate;\n exports.Token = Token;\n\n}));\n//# sourceMappingURL=index.js.map\n","import { Signal } from '@lumino/signaling';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module disposable\n */\n/**\n * A disposable object which delegates to a callback function.\n */\nclass DisposableDelegate {\n /**\n * Construct a new disposable delegate.\n *\n * @param fn - The callback function to invoke on dispose.\n */\n constructor(fn) {\n this._fn = fn;\n }\n /**\n * Test whether the delegate has been disposed.\n */\n get isDisposed() {\n return !this._fn;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (!this._fn) {\n return;\n }\n let fn = this._fn;\n this._fn = null;\n fn();\n }\n}\n/**\n * An observable disposable object which delegates to a callback function.\n */\nclass ObservableDisposableDelegate extends DisposableDelegate {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the delegate is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the delegate and invoke the callback function.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * An object which manages a collection of disposable items.\n */\nclass DisposableSet {\n constructor() {\n this._isDisposed = false;\n this._items = new Set();\n }\n /**\n * Test whether the set has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._isDisposed = true;\n this._items.forEach(item => {\n item.dispose();\n });\n this._items.clear();\n }\n /**\n * Test whether the set contains a specific item.\n *\n * @param item - The item of interest.\n *\n * @returns `true` if the set contains the item, `false` otherwise.\n */\n contains(item) {\n return this._items.has(item);\n }\n /**\n * Add a disposable item to the set.\n *\n * @param item - The item to add to the set.\n *\n * #### Notes\n * If the item is already contained in the set, this is a no-op.\n */\n add(item) {\n this._items.add(item);\n }\n /**\n * Remove a disposable item from the set.\n *\n * @param item - The item to remove from the set.\n *\n * #### Notes\n * If the item is not contained in the set, this is a no-op.\n */\n remove(item) {\n this._items.delete(item);\n }\n /**\n * Remove all items from the set.\n */\n clear() {\n this._items.clear();\n }\n}\n/**\n * The namespace for the `DisposableSet` class statics.\n */\n(function (DisposableSet) {\n /**\n * Create a disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new DisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n DisposableSet.from = from;\n})(DisposableSet || (DisposableSet = {}));\n/**\n * An observable object which manages a collection of disposable items.\n */\nclass ObservableDisposableSet extends DisposableSet {\n constructor() {\n super(...arguments);\n this._disposed = new Signal(this);\n }\n /**\n * A signal emitted when the set is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Dispose of the set and the items it contains.\n *\n * #### Notes\n * Items are disposed in the order they are added to the set.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n super.dispose();\n this._disposed.emit(undefined);\n Signal.clearData(this);\n }\n}\n/**\n * The namespace for the `ObservableDisposableSet` class statics.\n */\n(function (ObservableDisposableSet) {\n /**\n * Create an observable disposable set from an iterable of items.\n *\n * @param items - The iterable object of interest.\n *\n * @returns A new disposable initialized with the given items.\n */\n function from(items) {\n let set = new ObservableDisposableSet();\n for (const item of items) {\n set.add(item);\n }\n return set;\n }\n ObservableDisposableSet.from = from;\n})(ObservableDisposableSet || (ObservableDisposableSet = {}));\n\nexport { DisposableDelegate, DisposableSet, ObservableDisposableDelegate, ObservableDisposableSet };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2019, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for clipboard related functionality.\n */\nvar ClipboardExt;\n(function (ClipboardExt) {\n /**\n * Copy text to the system clipboard.\n *\n * @param text - The text to copy to the clipboard.\n */\n function copyText(text) {\n // Fetch the document body.\n const body = document.body;\n // Set up the clipboard event listener.\n const handler = (event) => {\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Set the clipboard data.\n event.clipboardData.setData('text', text);\n // Remove the event listener.\n body.removeEventListener('copy', handler, true);\n };\n // Add the event listener.\n body.addEventListener('copy', handler, true);\n // Trigger the event.\n document.execCommand('copy');\n }\n ClipboardExt.copyText = copyText;\n})(ClipboardExt || (ClipboardExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for element related utilities.\n */\nvar ElementExt;\n(function (ElementExt) {\n /**\n * Compute the box sizing for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The box sizing data for the specified element.\n */\n function boxSizing(element) {\n let style = window.getComputedStyle(element);\n let bt = parseFloat(style.borderTopWidth) || 0;\n let bl = parseFloat(style.borderLeftWidth) || 0;\n let br = parseFloat(style.borderRightWidth) || 0;\n let bb = parseFloat(style.borderBottomWidth) || 0;\n let pt = parseFloat(style.paddingTop) || 0;\n let pl = parseFloat(style.paddingLeft) || 0;\n let pr = parseFloat(style.paddingRight) || 0;\n let pb = parseFloat(style.paddingBottom) || 0;\n let hs = bl + pl + pr + br;\n let vs = bt + pt + pb + bb;\n return {\n borderTop: bt,\n borderLeft: bl,\n borderRight: br,\n borderBottom: bb,\n paddingTop: pt,\n paddingLeft: pl,\n paddingRight: pr,\n paddingBottom: pb,\n horizontalSum: hs,\n verticalSum: vs\n };\n }\n ElementExt.boxSizing = boxSizing;\n /**\n * Compute the size limits for an element.\n *\n * @param element - The element of interest.\n *\n * @returns The size limit data for the specified element.\n */\n function sizeLimits(element) {\n let style = window.getComputedStyle(element);\n let minWidth = parseFloat(style.minWidth) || 0;\n let minHeight = parseFloat(style.minHeight) || 0;\n let maxWidth = parseFloat(style.maxWidth) || Infinity;\n let maxHeight = parseFloat(style.maxHeight) || Infinity;\n maxWidth = Math.max(minWidth, maxWidth);\n maxHeight = Math.max(minHeight, maxHeight);\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n ElementExt.sizeLimits = sizeLimits;\n /**\n * Test whether a client position lies within an element.\n *\n * @param element - The DOM element of interest.\n *\n * @param clientX - The client X coordinate of interest.\n *\n * @param clientY - The client Y coordinate of interest.\n *\n * @returns Whether the point is within the given element.\n */\n function hitTest(element, clientX, clientY) {\n let rect = element.getBoundingClientRect();\n return (clientX >= rect.left &&\n clientX < rect.right &&\n clientY >= rect.top &&\n clientY < rect.bottom);\n }\n ElementExt.hitTest = hitTest;\n /**\n * Vertically scroll an element into view if needed.\n *\n * @param area - The scroll area element.\n *\n * @param element - The element of interest.\n *\n * #### Notes\n * This follows the \"nearest\" behavior of the native `scrollIntoView`\n * method, which is not supported by all browsers.\n * https://drafts.csswg.org/cssom-view/#element-scrolling-members\n *\n * If the element fully covers the visible area or is fully contained\n * within the visible area, no scrolling will take place. Otherwise,\n * the nearest edges of the area and element are aligned.\n */\n function scrollIntoViewIfNeeded(area, element) {\n let ar = area.getBoundingClientRect();\n let er = element.getBoundingClientRect();\n if (er.top <= ar.top && er.bottom >= ar.bottom) {\n return;\n }\n if (er.top < ar.top && er.height <= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.bottom > ar.bottom && er.height >= ar.height) {\n area.scrollTop -= ar.top - er.top;\n return;\n }\n if (er.top < ar.top && er.height > ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n if (er.bottom > ar.bottom && er.height < ar.height) {\n area.scrollTop -= ar.bottom - er.bottom;\n return;\n }\n }\n ElementExt.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;\n})(ElementExt || (ElementExt = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for platform related utilities.\n */\nvar Platform;\n(function (Platform) {\n /**\n * A flag indicating whether the platform is Mac.\n */\n Platform.IS_MAC = !!navigator.platform.match(/Mac/i);\n /**\n * A flag indicating whether the platform is Windows.\n */\n Platform.IS_WIN = !!navigator.platform.match(/Win/i);\n /**\n * A flag indicating whether the browser is IE.\n */\n Platform.IS_IE = /Trident/.test(navigator.userAgent);\n /**\n * A flag indicating whether the browser is Edge.\n */\n Platform.IS_EDGE = /Edge/.test(navigator.userAgent);\n /**\n * Test whether the `accel` key is pressed.\n *\n * @param event - The keyboard or mouse event of interest.\n *\n * @returns Whether the `accel` key is pressed.\n *\n * #### Notes\n * On Mac the `accel` key is the command key. On all other\n * platforms the `accel` key is the control key.\n */\n function accelKey(event) {\n return Platform.IS_MAC ? event.metaKey : event.ctrlKey;\n }\n Platform.accelKey = accelKey;\n})(Platform || (Platform = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * The namespace for selector related utilities.\n */\nvar Selector;\n(function (Selector) {\n /**\n * Calculate the specificity of a single CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns The specificity of the selector.\n *\n * #### Undefined Behavior\n * The selector is invalid.\n *\n * #### Notes\n * This is based on https://www.w3.org/TR/css3-selectors/#specificity\n *\n * A larger number represents a more specific selector.\n *\n * The smallest possible specificity is `0`.\n *\n * The result is represented as a hex number `0x` where\n * each component is the count of the respective selector clause.\n *\n * If the selector contains commas, only the first clause is used.\n *\n * The computed result is cached, so subsequent calculations for the\n * same selector are extremely fast.\n */\n function calculateSpecificity(selector) {\n if (selector in Private.specificityCache) {\n return Private.specificityCache[selector];\n }\n let result = Private.calculateSingle(selector);\n return (Private.specificityCache[selector] = result);\n }\n Selector.calculateSpecificity = calculateSpecificity;\n /**\n * Test whether a selector is a valid CSS selector.\n *\n * @param selector - The CSS selector of interest.\n *\n * @returns `true` if the selector is valid, `false` otherwise.\n *\n * #### Notes\n * The computed result is cached, so subsequent tests for the same\n * selector are extremely fast.\n */\n function isValid(selector) {\n if (selector in Private.validityCache) {\n return Private.validityCache[selector];\n }\n let result = true;\n try {\n Private.testElem.querySelector(selector);\n }\n catch (err) {\n result = false;\n }\n return (Private.validityCache[selector] = result);\n }\n Selector.isValid = isValid;\n /**\n * Test whether an element matches a CSS selector.\n *\n * @param element - The element of interest.\n *\n * @param selector - The valid CSS selector of interest.\n *\n * @returns `true` if the element is a match, `false` otherwise.\n *\n * #### Notes\n * This function uses the builtin browser capabilities when possible,\n * falling back onto a document query otherwise.\n */\n function matches(element, selector) {\n return Private.protoMatchFunc.call(element, selector);\n }\n Selector.matches = matches;\n})(Selector || (Selector = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A cache of computed selector specificity values.\n */\n Private.specificityCache = Object.create(null);\n /**\n * A cache of computed selector validity.\n */\n Private.validityCache = Object.create(null);\n /**\n * An empty element for testing selector validity.\n */\n Private.testElem = document.createElement('div');\n /**\n * A cross-browser CSS selector matching prototype function.\n */\n Private.protoMatchFunc = (() => {\n let proto = Element.prototype;\n return (proto.matches ||\n proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector ||\n function (selector) {\n let elem = this;\n let matches = elem.ownerDocument\n ? elem.ownerDocument.querySelectorAll(selector)\n : [];\n return Array.prototype.indexOf.call(matches, elem) !== -1;\n });\n })();\n /**\n * Calculate the specificity of a single selector.\n *\n * The behavior is undefined if the selector is invalid.\n */\n function calculateSingle(selector) {\n // Ignore anything after the first comma.\n selector = selector.split(',', 1)[0];\n // Setup the aggregate counters.\n let a = 0;\n let b = 0;\n let c = 0;\n // Apply a regex to the front of the selector. If it succeeds, that\n // portion of the selector is removed. Returns a success/fail flag.\n function match(re) {\n let match = selector.match(re);\n if (match === null) {\n return false;\n }\n selector = selector.slice(match[0].length);\n return true;\n }\n // Replace the negation pseudo-class (which is ignored),\n // but keep its inner content (which is not ignored).\n selector = selector.replace(NEGATION_RE, ' $1 ');\n // Continue matching until the selector is consumed.\n while (selector.length > 0) {\n // Match an ID selector.\n if (match(ID_RE)) {\n a++;\n continue;\n }\n // Match a class selector.\n if (match(CLASS_RE)) {\n b++;\n continue;\n }\n // Match an attribute selector.\n if (match(ATTR_RE)) {\n b++;\n continue;\n }\n // Match a pseudo-element selector. This is done before matching\n // a pseudo-class since this regex overlaps with that regex.\n if (match(PSEUDO_ELEM_RE)) {\n c++;\n continue;\n }\n // Match a pseudo-class selector.\n if (match(PSEDUO_CLASS_RE)) {\n b++;\n continue;\n }\n // Match a plain type selector.\n if (match(TYPE_RE)) {\n c++;\n continue;\n }\n // Finally, match any ignored characters.\n if (match(IGNORE_RE)) {\n continue;\n }\n // At this point, the selector is assumed to be invalid.\n return 0;\n }\n // Clamp each component to a reasonable base.\n a = Math.min(a, 0xff);\n b = Math.min(b, 0xff);\n c = Math.min(c, 0xff);\n // Combine the components into a single result.\n return (a << 16) | (b << 8) | c;\n }\n Private.calculateSingle = calculateSingle;\n /**\n * A regex which matches an ID selector at string start.\n */\n const ID_RE = /^#[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a class selector at string start.\n */\n const CLASS_RE = /^\\.[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches an attribute selector at string start.\n */\n const ATTR_RE = /^\\[[^\\]]+\\]/;\n /**\n * A regex which matches a type selector at string start.\n */\n const TYPE_RE = /^[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches a pseudo-element selector at string start.\n */\n const PSEUDO_ELEM_RE = /^(::[^\\s\\+>~#\\.\\[:]+|:first-line|:first-letter|:before|:after)/;\n /**\n * A regex which matches a pseudo-class selector at string start.\n */\n const PSEDUO_CLASS_RE = /^:[^\\s\\+>~#\\.\\[:]+/;\n /**\n * A regex which matches ignored characters at string start.\n */\n const IGNORE_RE = /^[\\s\\+>~\\*]+/;\n /**\n * A regex which matches the negation pseudo-class globally.\n */\n const NEGATION_RE = /:not\\(([^\\)]+)\\)/g;\n})(Private || (Private = {}));\n\nexport { ClipboardExt, ElementExt, Platform, Selector };\n//# sourceMappingURL=index.es6.js.map\n","import { DisposableDelegate } from '@lumino/disposable';\n\n/**\n * An object which manages a drag-drop operation.\n *\n * A drag object dispatches four different events to drop targets:\n *\n * - `'lm-dragenter'` - Dispatched when the mouse enters the target\n * element. This event must be canceled in order to receive any\n * of the other events.\n *\n * - `'lm-dragover'` - Dispatched when the mouse moves over the drop\n * target. It must cancel the event and set the `dropAction` to one\n * of the supported actions in order to receive drop events.\n *\n * - `'lm-dragleave'` - Dispatched when the mouse leaves the target\n * element. This includes moving the mouse into child elements.\n *\n * - `'lm-drop'`- Dispatched when the mouse is released over the target\n * element when the target indicates an appropriate drop action. If\n * the event is canceled, the indicated drop action is returned to\n * the initiator through the resolved promise.\n *\n * A drag operation can be terminated at any time by pressing `Escape`\n * or by disposing the drag object.\n *\n * A drag object has the ability to automatically scroll a scrollable\n * element when the mouse is hovered near one of its edges. To enable\n * this, add the `data-lm-dragscroll` attribute to any element which\n * the drag object should consider for scrolling.\n *\n * #### Notes\n * This class is designed to be used when dragging and dropping custom\n * data *within* a single application. It is *not* a replacement for\n * the native drag-drop API. Instead, it provides an API which allows\n * drag operations to be initiated programmatically and enables the\n * transfer of arbitrary non-string objects; features which are not\n * possible with the native drag-drop API.\n */\nclass Drag {\n /**\n * Construct a new drag object.\n *\n * @param options - The options for initializing the drag.\n */\n constructor(options) {\n /**\n * The scroll loop handler function.\n */\n this._onScrollFrame = () => {\n // Bail early if there is no scroll target.\n if (!this._scrollTarget) {\n return;\n }\n // Unpack the scroll target.\n let { element, edge, distance } = this._scrollTarget;\n // Calculate the scroll delta using nonlinear acceleration.\n let d = Private.SCROLL_EDGE_SIZE - distance;\n let f = Math.pow(d / Private.SCROLL_EDGE_SIZE, 2);\n let s = Math.max(1, Math.round(f * Private.SCROLL_EDGE_SIZE));\n // Scroll the element in the specified direction.\n switch (edge) {\n case 'top':\n element.scrollTop -= s;\n break;\n case 'left':\n element.scrollLeft -= s;\n break;\n case 'right':\n element.scrollLeft += s;\n break;\n case 'bottom':\n element.scrollTop += s;\n break;\n }\n // Request the next cycle of the scroll loop.\n requestAnimationFrame(this._onScrollFrame);\n };\n this._disposed = false;\n this._dropAction = 'none';\n this._override = null;\n this._currentTarget = null;\n this._currentElement = null;\n this._promise = null;\n this._scrollTarget = null;\n this._resolve = null;\n this.document = options.document || document;\n this.mimeData = options.mimeData;\n this.dragImage = options.dragImage || null;\n this.proposedAction = options.proposedAction || 'copy';\n this.supportedActions = options.supportedActions || 'all';\n this.source = options.source || null;\n }\n /**\n * Dispose of the resources held by the drag object.\n *\n * #### Notes\n * This will cancel the drag operation if it is active.\n */\n dispose() {\n // Do nothing if the drag object is already disposed.\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n // If there is a current target, dispatch a drag leave event.\n if (this._currentTarget) {\n let event = new PointerEvent('pointerup', {\n bubbles: true,\n cancelable: true,\n clientX: -1,\n clientY: -1\n });\n Private.dispatchDragLeave(this, this._currentTarget, null, event);\n }\n // Finalize the drag object with `'none'`.\n this._finalize('none');\n }\n /**\n * Test whether the drag object is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Start the drag operation at the specified client position.\n *\n * @param clientX - The client X position for the drag start.\n *\n * @param clientY - The client Y position for the drag start.\n *\n * @returns A promise which resolves to the result of the drag.\n *\n * #### Notes\n * If the drag has already been started, the promise created by the\n * first call to `start` is returned.\n *\n * If the drag operation has ended, or if the drag object has been\n * disposed, the returned promise will resolve to `'none'`.\n *\n * The drag object will be automatically disposed when drag operation\n * completes. This means `Drag` objects are for single-use only.\n *\n * This method assumes the left mouse button is already held down.\n */\n start(clientX, clientY) {\n // If the drag object is already disposed, resolve to `none`.\n if (this._disposed) {\n return Promise.resolve('none');\n }\n // If the drag has already been started, return the promise.\n if (this._promise) {\n return this._promise;\n }\n // Install the document listeners for the drag object.\n this._addListeners();\n // Attach the drag image at the specified client position.\n this._attachDragImage(clientX, clientY);\n // Create the promise which will be resolved on completion.\n this._promise = new Promise(resolve => {\n this._resolve = resolve;\n });\n // Trigger a fake move event to kick off the drag operation.\n let event = new PointerEvent('pointermove', {\n bubbles: true,\n cancelable: true,\n clientX,\n clientY\n });\n document.dispatchEvent(event);\n // Return the pending promise for the drag operation.\n return this._promise;\n }\n /**\n * Handle the DOM events for the drag operation.\n *\n * @param event - The DOM event sent to the drag object.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the document. It should not be\n * called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n default:\n // Stop all other events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * Move the drag image element to the specified location.\n *\n * This is a no-op if there is no drag image element.\n */\n moveDragImage(clientX, clientY) {\n if (!this.dragImage) {\n return;\n }\n let style = this.dragImage.style;\n style.transform = `translate(${clientX}px, ${clientY}px)`;\n }\n /**\n * Handle the `'pointermove'` event for the drag object.\n */\n _evtPointerMove(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Update the current target node and dispatch enter/leave events.\n this._updateCurrentTarget(event);\n // Update the drag scroll element.\n this._updateDragScroll(event);\n // Move the drag image to the specified client position. This is\n // performed *after* dispatching to prevent unnecessary reflows.\n this.moveDragImage(event.clientX, event.clientY);\n }\n /**\n * Handle the `'pointerup'` event for the drag object.\n */\n _evtPointerUp(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Do nothing if the left button is not released.\n if (event.button !== 0) {\n return;\n }\n // Update the current target node and dispatch enter/leave events.\n // This prevents a subtle issue where the DOM mutates under the\n // cursor after the last move event but before the drop event.\n this._updateCurrentTarget(event);\n // If there is no current target, finalize with `'none'`.\n if (!this._currentTarget) {\n this._finalize('none');\n return;\n }\n // If the last drop action was `'none'`, dispatch a leave event\n // to the current target and finalize the drag with `'none'`.\n if (this._dropAction === 'none') {\n Private.dispatchDragLeave(this, this._currentTarget, null, event);\n this._finalize('none');\n return;\n }\n // Dispatch the drop event at the current target and finalize\n // with the resulting drop action.\n let action = Private.dispatchDrop(this, this._currentTarget, event);\n this._finalize(action);\n }\n /**\n * Handle the `'keydown'` event for the drag object.\n */\n _evtKeyDown(event) {\n // Stop all input events during drag-drop.\n event.preventDefault();\n event.stopPropagation();\n // Cancel the drag if `Escape` is pressed.\n if (event.keyCode === 27) {\n this.dispose();\n }\n }\n /**\n * Add the document event listeners for the drag object.\n */\n _addListeners() {\n document.addEventListener('pointerdown', this, true);\n document.addEventListener('pointermove', this, true);\n document.addEventListener('pointerup', this, true);\n document.addEventListener('pointerenter', this, true);\n document.addEventListener('pointerleave', this, true);\n document.addEventListener('pointerover', this, true);\n document.addEventListener('pointerout', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('keyup', this, true);\n document.addEventListener('keypress', this, true);\n document.addEventListener('contextmenu', this, true);\n }\n /**\n * Remove the document event listeners for the drag object.\n */\n _removeListeners() {\n document.removeEventListener('pointerdown', this, true);\n document.removeEventListener('pointermove', this, true);\n document.removeEventListener('pointerup', this, true);\n document.removeEventListener('pointerenter', this, true);\n document.removeEventListener('pointerleave', this, true);\n document.removeEventListener('pointerover', this, true);\n document.removeEventListener('pointerout', this, true);\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('keyup', this, true);\n document.removeEventListener('keypress', this, true);\n document.removeEventListener('contextmenu', this, true);\n }\n /**\n * Update the drag scroll element under the mouse.\n */\n _updateDragScroll(event) {\n // Find the scroll target under the mouse.\n let target = Private.findScrollTarget(event);\n // Bail if there is nothing to scroll.\n if (!this._scrollTarget && !target) {\n return;\n }\n // Start the scroll loop if needed.\n if (!this._scrollTarget) {\n setTimeout(this._onScrollFrame, 500);\n }\n // Update the scroll target.\n this._scrollTarget = target;\n }\n /**\n * Update the current target node using the given mouse event.\n */\n _updateCurrentTarget(event) {\n // Fetch common local state.\n let prevTarget = this._currentTarget;\n let currTarget = this._currentTarget;\n let prevElem = this._currentElement;\n // Find the current indicated element at the given position.\n let currElem = Private.findElementBehindBackdrop(event, this.document);\n // Update the current element reference.\n this._currentElement = currElem;\n // If the indicated element changes from the previous iteration,\n // and is different from the current target, dispatch the exit\n // event to the target.\n if (currElem !== prevElem && currElem !== currTarget) {\n Private.dispatchDragExit(this, currTarget, currElem, event);\n }\n // If the indicated element changes from the previous iteration,\n // and is different from the current target, dispatch the enter\n // event and compute the new target element.\n if (currElem !== prevElem && currElem !== currTarget) {\n currTarget = Private.dispatchDragEnter(this, currElem, currTarget, event);\n }\n // If the current target element has changed, update the current\n // target reference and dispatch the leave event to the old target.\n if (currTarget !== prevTarget) {\n this._currentTarget = currTarget;\n Private.dispatchDragLeave(this, prevTarget, currTarget, event);\n }\n // Dispatch the drag over event and update the drop action.\n let action = Private.dispatchDragOver(this, currTarget, event);\n this._setDropAction(action);\n }\n /**\n * Attach the drag image element at the specified location.\n *\n * This is a no-op if there is no drag image element.\n */\n _attachDragImage(clientX, clientY) {\n if (!this.dragImage) {\n return;\n }\n this.dragImage.classList.add('lm-mod-drag-image');\n let style = this.dragImage.style;\n style.pointerEvents = 'none';\n style.position = 'fixed';\n style.transform = `translate(${clientX}px, ${clientY}px)`;\n const body = this.document instanceof Document\n ? this.document.body\n : this.document.firstElementChild;\n body.appendChild(this.dragImage);\n }\n /**\n * Detach the drag image element from the DOM.\n *\n * This is a no-op if there is no drag image element.\n */\n _detachDragImage() {\n if (!this.dragImage) {\n return;\n }\n let parent = this.dragImage.parentNode;\n if (!parent) {\n return;\n }\n parent.removeChild(this.dragImage);\n }\n /**\n * Set the internal drop action state and update the drag cursor.\n */\n _setDropAction(action) {\n action = Private.validateAction(action, this.supportedActions);\n if (this._override && this._dropAction === action) {\n return;\n }\n switch (action) {\n case 'none':\n this._dropAction = action;\n this._override = Drag.overrideCursor('no-drop', this.document);\n break;\n case 'copy':\n this._dropAction = action;\n this._override = Drag.overrideCursor('copy', this.document);\n break;\n case 'link':\n this._dropAction = action;\n this._override = Drag.overrideCursor('alias', this.document);\n break;\n case 'move':\n this._dropAction = action;\n this._override = Drag.overrideCursor('move', this.document);\n break;\n }\n }\n /**\n * Finalize the drag operation and resolve the drag promise.\n */\n _finalize(action) {\n // Store the resolve function as a temp variable.\n let resolve = this._resolve;\n // Remove the document event listeners.\n this._removeListeners();\n // Detach the drag image.\n this._detachDragImage();\n // Dispose of the cursor override.\n if (this._override) {\n this._override.dispose();\n this._override = null;\n }\n // Clear the mime data.\n this.mimeData.clear();\n // Clear the rest of the internal drag state.\n this._disposed = true;\n this._dropAction = 'none';\n this._currentTarget = null;\n this._currentElement = null;\n this._scrollTarget = null;\n this._promise = null;\n this._resolve = null;\n // Finally, resolve the promise to the given drop action.\n if (resolve) {\n resolve(action);\n }\n }\n}\n/**\n * The namespace for the `Drag` class statics.\n */\n(function (Drag) {\n /**\n * A custom event used for drag-drop operations.\n *\n * #### Notes\n * In order to receive `'lm-dragover'`, `'lm-dragleave'`, or `'lm-drop'`\n * events, a drop target must cancel the `'lm-dragenter'` event by\n * calling the event's `preventDefault()` method.\n */\n class Event extends DragEvent {\n constructor(event, options) {\n super(options.type, {\n bubbles: true,\n cancelable: true,\n altKey: event.altKey,\n button: event.button,\n clientX: event.clientX,\n clientY: event.clientY,\n ctrlKey: event.ctrlKey,\n detail: 0,\n metaKey: event.metaKey,\n relatedTarget: options.related,\n screenX: event.screenX,\n screenY: event.screenY,\n shiftKey: event.shiftKey,\n view: window\n });\n const { drag } = options;\n this.dropAction = 'none';\n this.mimeData = drag.mimeData;\n this.proposedAction = drag.proposedAction;\n this.supportedActions = drag.supportedActions;\n this.source = drag.source;\n }\n }\n Drag.Event = Event;\n /**\n * Override the cursor icon for the entire document.\n *\n * @param cursor - The string representing the cursor style.\n *\n * @returns A disposable which will clear the override when disposed.\n *\n * #### Notes\n * The most recent call to `overrideCursor` takes precedence.\n * Disposing an old override has no effect on the current override.\n *\n * This utility function is used by the `Drag` class to override the\n * mouse cursor during a drag-drop operation, but it can also be used\n * by other classes to fix the cursor icon during normal mouse drags.\n *\n * #### Example\n * ```typescript\n * import { Drag } from '@lumino/dragdrop';\n *\n * // Force the cursor to be 'wait' for the entire document.\n * let override = Drag.overrideCursor('wait');\n *\n * // Clear the override by disposing the return value.\n * override.dispose();\n * ```\n */\n function overrideCursor(cursor, doc = document) {\n return Private.overrideCursor(cursor, doc);\n }\n Drag.overrideCursor = overrideCursor;\n})(Drag || (Drag = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The size of a drag scroll edge, in pixels.\n */\n Private.SCROLL_EDGE_SIZE = 20;\n /**\n * Validate the given action is one of the supported actions.\n *\n * Returns the given action or `'none'` if the action is unsupported.\n */\n function validateAction(action, supported) {\n return actionTable[action] & supportedTable[supported] ? action : 'none';\n }\n Private.validateAction = validateAction;\n /**\n * Find the event target using pointer position if given, or otherwise\n * the central position of the backdrop.\n */\n function findElementBehindBackdrop(event, root = document) {\n if (event) {\n // Check if we already cached element for this event.\n if (lastElementEventSearch && event == lastElementEventSearch.event) {\n return lastElementEventSearch.element;\n }\n Private.cursorBackdrop.style.zIndex = '-1000';\n const element = root.elementFromPoint(event.clientX, event.clientY);\n Private.cursorBackdrop.style.zIndex = '';\n lastElementEventSearch = { event, element };\n return element;\n }\n else {\n const transform = Private.cursorBackdrop.style.transform;\n if (lastElementSearch && transform === lastElementSearch.transform) {\n return lastElementSearch.element;\n }\n const bbox = Private.cursorBackdrop.getBoundingClientRect();\n Private.cursorBackdrop.style.zIndex = '-1000';\n const element = root.elementFromPoint(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n Private.cursorBackdrop.style.zIndex = '';\n lastElementSearch = { transform, element };\n return element;\n }\n }\n Private.findElementBehindBackdrop = findElementBehindBackdrop;\n let lastElementEventSearch = null;\n let lastElementSearch = null;\n /**\n * Find the drag scroll target under the mouse, if any.\n */\n function findScrollTarget(event) {\n // Look up the client mouse position.\n let x = event.clientX;\n let y = event.clientY;\n // Get the element under the mouse.\n let element = findElementBehindBackdrop(event);\n // Search for a scrollable target based on the mouse position.\n // The null assert in third clause of for-loop is required due to:\n // https://github.com/Microsoft/TypeScript/issues/14143\n for (; element; element = element.parentElement) {\n // Ignore elements which are not marked as scrollable.\n if (!element.hasAttribute('data-lm-dragscroll')) {\n continue;\n }\n // Set up the coordinate offsets for the element.\n let offsetX = 0;\n let offsetY = 0;\n if (element === document.body) {\n offsetX = window.pageXOffset;\n offsetY = window.pageYOffset;\n }\n // Get the element bounds in viewport coordinates.\n let r = element.getBoundingClientRect();\n let top = r.top + offsetY;\n let left = r.left + offsetX;\n let right = left + r.width;\n let bottom = top + r.height;\n // Skip the element if it's not under the mouse.\n if (x < left || x >= right || y < top || y >= bottom) {\n continue;\n }\n // Compute the distance to each edge.\n let dl = x - left + 1;\n let dt = y - top + 1;\n let dr = right - x;\n let db = bottom - y;\n // Find the smallest of the edge distances.\n let distance = Math.min(dl, dt, dr, db);\n // Skip the element if the mouse is not within a scroll edge.\n if (distance > Private.SCROLL_EDGE_SIZE) {\n continue;\n }\n // Set up the edge result variable.\n let edge;\n // Find the edge for the computed distance.\n switch (distance) {\n case db:\n edge = 'bottom';\n break;\n case dt:\n edge = 'top';\n break;\n case dr:\n edge = 'right';\n break;\n case dl:\n edge = 'left';\n break;\n default:\n throw 'unreachable';\n }\n // Compute how much the element can scroll in width and height.\n let dsw = element.scrollWidth - element.clientWidth;\n let dsh = element.scrollHeight - element.clientHeight;\n // Determine if the element should be scrolled for the edge.\n let shouldScroll;\n switch (edge) {\n case 'top':\n shouldScroll = dsh > 0 && element.scrollTop > 0;\n break;\n case 'left':\n shouldScroll = dsw > 0 && element.scrollLeft > 0;\n break;\n case 'right':\n shouldScroll = dsw > 0 && element.scrollLeft < dsw;\n break;\n case 'bottom':\n shouldScroll = dsh > 0 && element.scrollTop < dsh;\n break;\n default:\n throw 'unreachable';\n }\n // Skip the element if it should not be scrolled.\n if (!shouldScroll) {\n continue;\n }\n // Return the drag scroll target.\n return { element, edge, distance };\n }\n // No drag scroll target was found.\n return null;\n }\n Private.findScrollTarget = findScrollTarget;\n /**\n * Dispatch a drag enter event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currElem - The currently indicated element, or `null`. This\n * is the \"immediate user selection\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The element to use as the current drag target. This is the\n * \"current target element\" from the whatwg spec, and may be `null`.\n *\n * #### Notes\n * This largely implements the drag enter portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragEnter(drag, currElem, currTarget, event) {\n // If the current element is null, return null as the new target.\n if (!currElem) {\n return null;\n }\n // Dispatch a drag enter event to the current element.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragenter'\n });\n let canceled = !currElem.dispatchEvent(dragEvent);\n // If the event was canceled, use the current element as the new target.\n if (canceled) {\n return currElem;\n }\n // If the current element is the document body, keep the original target.\n const body = drag.document instanceof Document\n ? drag.document.body\n : drag.document.firstElementChild;\n if (currElem === body) {\n return currTarget;\n }\n // Dispatch a drag enter event on the document body.\n dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragenter'\n });\n body.dispatchEvent(dragEvent);\n // Ignore the event cancellation, and use the body as the new target.\n return body;\n }\n Private.dispatchDragEnter = dispatchDragEnter;\n /**\n * Dispatch a drag exit event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param prevTarget - The previous target element, or `null`. This\n * is the previous \"current target element\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * #### Notes\n * This largely implements the drag exit portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragExit(drag, prevTarget, currTarget, event) {\n // If the previous target is null, do nothing.\n if (!prevTarget) {\n return;\n }\n // Dispatch the drag exit event to the previous target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragexit'\n });\n prevTarget.dispatchEvent(dragEvent);\n }\n Private.dispatchDragExit = dispatchDragExit;\n /**\n * Dispatch a drag leave event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param prevTarget - The previous target element, or `null`. This\n * is the previous \"current target element\" from the whatwg spec.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * #### Notes\n * This largely implements the drag leave portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragLeave(drag, prevTarget, currTarget, event) {\n // If the previous target is null, do nothing.\n if (!prevTarget) {\n return;\n }\n // Dispatch the drag leave event to the previous target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: currTarget,\n type: 'lm-dragleave'\n });\n prevTarget.dispatchEvent(dragEvent);\n }\n Private.dispatchDragLeave = dispatchDragLeave;\n /**\n * Dispatch a drag over event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The `DropAction` result of the drag over event.\n *\n * #### Notes\n * This largely implements the drag over portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDragOver(drag, currTarget, event) {\n // If there is no current target, the drop action is none.\n if (!currTarget) {\n return 'none';\n }\n // Dispatch the drag over event to the current target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: null,\n type: 'lm-dragover'\n });\n let canceled = !currTarget.dispatchEvent(dragEvent);\n // If the event was canceled, return the drop action result.\n if (canceled) {\n return dragEvent.dropAction;\n }\n // Otherwise, the effective drop action is none.\n return 'none';\n }\n Private.dispatchDragOver = dispatchDragOver;\n /**\n * Dispatch a drop event to the indicated element.\n *\n * @param drag - The drag object associated with the action.\n *\n * @param currTarget - The current drag target element, or `null`. This\n * is the \"current target element\" from the whatwg spec.\n *\n * @param event - The mouse event related to the action.\n *\n * @returns The `DropAction` result of the drop event.\n *\n * #### Notes\n * This largely implements the drag over portion of the whatwg spec:\n * https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model\n */\n function dispatchDrop(drag, currTarget, event) {\n // If there is no current target, the drop action is none.\n if (!currTarget) {\n return 'none';\n }\n // Dispatch the drop event to the current target.\n let dragEvent = new Drag.Event(event, {\n drag,\n related: null,\n type: 'lm-drop'\n });\n let canceled = !currTarget.dispatchEvent(dragEvent);\n // If the event was canceled, return the drop action result.\n if (canceled) {\n return dragEvent.dropAction;\n }\n // Otherwise, the effective drop action is none.\n return 'none';\n }\n Private.dispatchDrop = dispatchDrop;\n /**\n * A lookup table from drop action to bit value.\n */\n const actionTable = {\n none: 0x0,\n copy: 0x1,\n link: 0x2,\n move: 0x4\n };\n /**\n * A lookup table from supported action to drop action bit mask.\n */\n const supportedTable = {\n none: actionTable['none'],\n copy: actionTable['copy'],\n link: actionTable['link'],\n move: actionTable['move'],\n 'copy-link': actionTable['copy'] | actionTable['link'],\n 'copy-move': actionTable['copy'] | actionTable['move'],\n 'link-move': actionTable['link'] | actionTable['move'],\n all: actionTable['copy'] | actionTable['link'] | actionTable['move']\n };\n /**\n * Implementation of `Drag.overrideCursor`.\n */\n function overrideCursor(cursor, doc = document) {\n let id = ++overrideCursorID;\n const body = doc instanceof Document\n ? doc.body\n : doc.firstElementChild;\n if (!Private.cursorBackdrop.isConnected) {\n // Hide the backdrop until the pointer moves to avoid issues with\n // native double click detection, used in e.g. datagrid editing.\n Private.cursorBackdrop.style.transform = 'scale(0)';\n body.appendChild(Private.cursorBackdrop);\n resetBackdropScroll();\n document.addEventListener('pointermove', alignBackdrop, {\n capture: true,\n passive: true\n });\n Private.cursorBackdrop.addEventListener('scroll', propagateBackdropScroll, {\n capture: true,\n passive: true\n });\n }\n Private.cursorBackdrop.style.cursor = cursor;\n return new DisposableDelegate(() => {\n if (id === overrideCursorID && Private.cursorBackdrop.isConnected) {\n document.removeEventListener('pointermove', alignBackdrop, true);\n Private.cursorBackdrop.removeEventListener('scroll', propagateBackdropScroll, true);\n body.removeChild(Private.cursorBackdrop);\n }\n });\n }\n Private.overrideCursor = overrideCursor;\n /**\n * Move cursor backdrop to match cursor position.\n */\n function alignBackdrop(event) {\n if (!Private.cursorBackdrop) {\n return;\n }\n Private.cursorBackdrop.style.transform = `translate(${event.clientX}px, ${event.clientY}px)`;\n }\n /**\n * Propagate the scroll event from the backdrop element to the scroll target.\n * The scroll target is defined by presence of `data-lm-dragscroll` attribute.\n */\n function propagateBackdropScroll(_event) {\n if (!Private.cursorBackdrop) {\n return;\n }\n // Get the element under behind the centre of the cursor backdrop\n // (essentially behind the cursor, but possibly a few pixels off).\n let element = findElementBehindBackdrop();\n if (!element) {\n return;\n }\n // Find scroll target.\n const scrollTarget = element.closest('[data-lm-dragscroll]');\n if (!scrollTarget) {\n return;\n }\n // Apply the scroll delta to the correct target.\n scrollTarget.scrollTop += Private.cursorBackdrop.scrollTop - backdropScrollOrigin;\n scrollTarget.scrollLeft += Private.cursorBackdrop.scrollLeft - backdropScrollOrigin;\n // Center the scroll position.\n resetBackdropScroll();\n }\n /**\n * Reset the backdrop scroll to allow further scrolling.\n */\n function resetBackdropScroll() {\n Private.cursorBackdrop.scrollTop = backdropScrollOrigin;\n Private.cursorBackdrop.scrollLeft = backdropScrollOrigin;\n }\n /**\n * The center of the backdrop node scroll area.\n */\n const backdropScrollOrigin = 500;\n /**\n * Create cursor backdrop node.\n */\n function createCursorBackdrop() {\n const backdrop = document.createElement('div');\n backdrop.classList.add('lm-cursor-backdrop');\n return backdrop;\n }\n /**\n * The internal id for the active cursor override.\n */\n let overrideCursorID = 0;\n /**\n * A backdrop node overriding pointer cursor.\n *\n * #### Notes\n * We use a backdrop node rather than setting the cursor directly on the body\n * because setting it on body requires more extensive style recalculation for\n * reliable application of the cursor, this is the cursor not being overriden\n * when over child elements with another style like `cursor: other!important`.\n */\n Private.cursorBackdrop = createCursorBackdrop();\n})(Private || (Private = {}));\n\nexport { Drag };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module keyboard\n */\n/**\n * Get the global application keyboard layout instance.\n *\n * @returns The keyboard layout for use by the application.\n *\n * #### Notes\n * The default keyboard layout is US-English.\n */\nfunction getKeyboardLayout() {\n return Private.keyboardLayout;\n}\n/**\n * Set the global application keyboard layout instance.\n *\n * @param layout The keyboard layout for use by the application.\n *\n * #### Notes\n * The keyboard layout should typically be set on application startup\n * to a layout which is appropriate for the user's system.\n */\nfunction setKeyboardLayout(layout) {\n Private.keyboardLayout = layout;\n}\n/**\n * A concrete implementation of {@link IKeyboardLayout} based on keycodes.\n *\n * The `keyCode` property of a `'keydown'` event is a browser and OS\n * specific representation of the physical key (not character) which\n * was pressed on a keyboard. While not the most convenient API, it\n * is currently the only one which works reliably on all browsers.\n *\n * This class accepts a user-defined mapping of keycode to key, which\n * allows for reliable shortcuts tailored to the user's system.\n */\nclass KeycodeLayout {\n /**\n * Construct a new keycode layout.\n *\n * @param name - The human readable name for the layout.\n *\n * @param codes - A mapping of keycode to key value.\n *\n * @param modifierKeys - Array of modifier key names\n */\n constructor(name, codes, modifierKeys = []) {\n this.name = name;\n this._codes = codes;\n this._keys = KeycodeLayout.extractKeys(codes);\n this._modifierKeys = KeycodeLayout.convertToKeySet(modifierKeys);\n }\n /**\n * Get an array of the key values supported by the layout.\n *\n * @returns A new array of the supported key values.\n */\n keys() {\n return Object.keys(this._keys);\n }\n /**\n * Test whether the given key is a valid value for the layout.\n *\n * @param key - The user provided key to test for validity.\n *\n * @returns `true` if the key is valid, `false` otherwise.\n */\n isValidKey(key) {\n return key in this._keys;\n }\n /**\n * Test whether the given key is a modifier key.\n *\n * @param key - The user provided key.\n *\n * @returns `true` if the key is a modifier key, `false` otherwise.\n */\n isModifierKey(key) {\n return key in this._modifierKeys;\n }\n /**\n * Get the key for a `'keydown'` event.\n *\n * @param event - The event object for a `'keydown'` event.\n *\n * @returns The associated key value, or an empty string if\n * the event does not represent a valid primary key.\n */\n keyForKeydownEvent(event) {\n return this._codes[event.keyCode] || '';\n }\n}\n/**\n * The namespace for the `KeycodeLayout` class statics.\n */\n(function (KeycodeLayout) {\n /**\n * Extract the set of keys from a code map.\n *\n * @param codes - The code map of interest.\n *\n * @returns A set of the keys in the code map.\n */\n function extractKeys(codes) {\n let keys = Object.create(null);\n for (let c in codes) {\n keys[codes[c]] = true;\n }\n return keys;\n }\n KeycodeLayout.extractKeys = extractKeys;\n /**\n * Convert array of keys to a key set.\n *\n * @param keys - The array that needs to be converted\n *\n * @returns A set of the keys in the array.\n */\n function convertToKeySet(keys) {\n let keySet = Object(null);\n for (let i = 0, n = keys.length; i < n; ++i) {\n keySet[keys[i]] = true;\n }\n return keySet;\n }\n KeycodeLayout.convertToKeySet = convertToKeySet;\n})(KeycodeLayout || (KeycodeLayout = {}));\n/**\n * A keycode-based keyboard layout for US English keyboards.\n *\n * This layout is valid for the following OS/Browser combinations.\n *\n * - Windows\n * - Chrome\n * - Firefox\n * - IE\n *\n * - OSX\n * - Chrome\n * - Firefox\n * - Safari\n *\n * - Linux\n * - Chrome\n * - Firefox\n *\n * Other combinations may also work, but are untested.\n */\nconst EN_US = new KeycodeLayout('en-us', {\n 8: 'Backspace',\n 9: 'Tab',\n 13: 'Enter',\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 19: 'Pause',\n 27: 'Escape',\n 32: 'Space',\n 33: 'PageUp',\n 34: 'PageDown',\n 35: 'End',\n 36: 'Home',\n 37: 'ArrowLeft',\n 38: 'ArrowUp',\n 39: 'ArrowRight',\n 40: 'ArrowDown',\n 45: 'Insert',\n 46: 'Delete',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'A',\n 66: 'B',\n 67: 'C',\n 68: 'D',\n 69: 'E',\n 70: 'F',\n 71: 'G',\n 72: 'H',\n 73: 'I',\n 74: 'J',\n 75: 'K',\n 76: 'L',\n 77: 'M',\n 78: 'N',\n 79: 'O',\n 80: 'P',\n 81: 'Q',\n 82: 'R',\n 83: 'S',\n 84: 'T',\n 85: 'U',\n 86: 'V',\n 87: 'W',\n 88: 'X',\n 89: 'Y',\n 90: 'Z',\n 91: 'Meta',\n 93: 'ContextMenu',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9',\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111: '/',\n 112: 'F1',\n 113: 'F2',\n 114: 'F3',\n 115: 'F4',\n 116: 'F5',\n 117: 'F6',\n 118: 'F7',\n 119: 'F8',\n 120: 'F9',\n 121: 'F10',\n 122: 'F11',\n 123: 'F12',\n 173: '-',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 224: 'Meta' // firefox\n}, ['Shift', 'Ctrl', 'Alt', 'Meta'] // modifier keys\n);\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The global keyboard layout instance.\n */\n Private.keyboardLayout = EN_US;\n})(Private || (Private = {}));\n\nexport { EN_US, KeycodeLayout, getKeyboardLayout, setKeyboardLayout };\n//# sourceMappingURL=index.es6.js.map\n","import { every, retro, some, ArrayExt } from '@lumino/algorithm';\nimport { LinkedList } from '@lumino/collections';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module messaging\n */\n/**\n * A message which can be delivered to a message handler.\n *\n * #### Notes\n * This class may be subclassed to create complex message types.\n */\nclass Message {\n /**\n * Construct a new message.\n *\n * @param type - The type of the message.\n */\n constructor(type) {\n this.type = type;\n }\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * If a conflatable message is posted to a handler while another\n * conflatable message of the same `type` has already been posted\n * to the handler, the `conflate()` method of the existing message\n * will be invoked. If that method returns `true`, the new message\n * will not be enqueued. This allows messages to be compressed, so\n * that only a single instance of the message type is processed per\n * cycle, no matter how many times messages of that type are posted.\n *\n * Custom message types may reimplement this property.\n *\n * The default implementation is always `false`.\n */\n get isConflatable() {\n return false;\n }\n /**\n * Conflate this message with another message of the same `type`.\n *\n * @param other - A conflatable message of the same `type`.\n *\n * @returns `true` if the message was successfully conflated, or\n * `false` otherwise.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most message types will\n * not make use of this feature.\n *\n * This method is called automatically by the message loop when the\n * given message is posted to the handler paired with this message.\n * This message will already be enqueued and conflatable, and the\n * given message will have the same `type` and also be conflatable.\n *\n * This method should merge the state of the other message into this\n * message as needed so that when this message is finally delivered\n * to the handler, it receives the most up-to-date information.\n *\n * If this method returns `true`, it signals that the other message\n * was successfully conflated and that message will not be enqueued.\n *\n * If this method returns `false`, the other message will be enqueued\n * for normal delivery.\n *\n * Custom message types may reimplement this method.\n *\n * The default implementation always returns `false`.\n */\n conflate(other) {\n return false;\n }\n}\n/**\n * A convenience message class which conflates automatically.\n *\n * #### Notes\n * Message conflation is an advanced topic. Most user code will not\n * make use of this class.\n *\n * This message class is useful for creating message instances which\n * should be conflated, but which have no state other than `type`.\n *\n * If conflation of stateful messages is required, a custom `Message`\n * subclass should be created.\n */\nclass ConflatableMessage extends Message {\n /**\n * Test whether the message is conflatable.\n *\n * #### Notes\n * This property is always `true`.\n */\n get isConflatable() {\n return true;\n }\n /**\n * Conflate this message with another message of the same `type`.\n *\n * #### Notes\n * This method always returns `true`.\n */\n conflate(other) {\n return true;\n }\n}\n/**\n * The namespace for the global singleton message loop.\n */\nvar MessageLoop;\n(function (MessageLoop) {\n /**\n * A function that cancels the pending loop task; `null` if unavailable.\n */\n let pending = null;\n /**\n * Schedules a function for invocation as soon as possible asynchronously.\n *\n * @param fn The function to invoke when called back.\n *\n * @returns An anonymous function that will unschedule invocation if possible.\n */\n const schedule = (resolved => (fn) => {\n let rejected = false;\n resolved.then(() => !rejected && fn());\n return () => {\n rejected = true;\n };\n })(Promise.resolve());\n /**\n * Send a message to a message handler to process immediately.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to deliver to the handler.\n *\n * #### Notes\n * The message will first be sent through any installed message hooks\n * for the handler. If the message passes all hooks, it will then be\n * delivered to the `processMessage` method of the handler.\n *\n * The message will not be conflated with pending posted messages.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function sendMessage(handler, msg) {\n // Lookup the message hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Handle the common case of no installed hooks.\n if (!hooks || hooks.length === 0) {\n invokeHandler(handler, msg);\n return;\n }\n // Invoke the message hooks starting with the newest first.\n let passed = every(retro(hooks), hook => {\n return hook ? invokeHook(hook, handler, msg) : true;\n });\n // Invoke the handler if the message passes all hooks.\n if (passed) {\n invokeHandler(handler, msg);\n }\n }\n MessageLoop.sendMessage = sendMessage;\n /**\n * Post a message to a message handler to process in the future.\n *\n * @param handler - The handler which should process the message.\n *\n * @param msg - The message to post to the handler.\n *\n * #### Notes\n * The message will be conflated with the pending posted messages for\n * the handler, if possible. If the message is not conflated, it will\n * be queued for normal delivery on the next cycle of the event loop.\n *\n * Exceptions in hooks and handlers will be caught and logged.\n */\n function postMessage(handler, msg) {\n // Handle the common case of a non-conflatable message.\n if (!msg.isConflatable) {\n enqueueMessage(handler, msg);\n return;\n }\n // Conflate the message with an existing message if possible.\n let conflated = some(messageQueue, posted => {\n if (posted.handler !== handler) {\n return false;\n }\n if (!posted.msg) {\n return false;\n }\n if (posted.msg.type !== msg.type) {\n return false;\n }\n if (!posted.msg.isConflatable) {\n return false;\n }\n return posted.msg.conflate(msg);\n });\n // Enqueue the message if it was not conflated.\n if (!conflated) {\n enqueueMessage(handler, msg);\n }\n }\n MessageLoop.postMessage = postMessage;\n /**\n * Install a message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to install.\n *\n * #### Notes\n * A message hook is invoked before a message is delivered to the\n * handler. If the hook returns `false`, no other hooks will be\n * invoked and the message will not be delivered to the handler.\n *\n * The most recently installed message hook is executed first.\n *\n * If the hook is already installed, this is a no-op.\n */\n function installMessageHook(handler, hook) {\n // Look up the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Bail early if the hook is already installed.\n if (hooks && hooks.indexOf(hook) !== -1) {\n return;\n }\n // Add the hook to the end, so it will be the first to execute.\n if (!hooks) {\n messageHooks.set(handler, [hook]);\n }\n else {\n hooks.push(hook);\n }\n }\n MessageLoop.installMessageHook = installMessageHook;\n /**\n * Remove an installed message hook for a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * @param hook - The message hook to remove.\n *\n * #### Notes\n * It is safe to call this function while the hook is executing.\n *\n * If the hook is not installed, this is a no-op.\n */\n function removeMessageHook(handler, hook) {\n // Lookup the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Bail early if the hooks do not exist.\n if (!hooks) {\n return;\n }\n // Lookup the index of the hook and bail if not found.\n let i = hooks.indexOf(hook);\n if (i === -1) {\n return;\n }\n // Clear the hook and schedule a cleanup of the array.\n hooks[i] = null;\n scheduleCleanup(hooks);\n }\n MessageLoop.removeMessageHook = removeMessageHook;\n /**\n * Clear all message data associated with a message handler.\n *\n * @param handler - The message handler of interest.\n *\n * #### Notes\n * This will clear all posted messages and hooks for the handler.\n */\n function clearData(handler) {\n // Lookup the hooks for the handler.\n let hooks = messageHooks.get(handler);\n // Clear all messsage hooks for the handler.\n if (hooks && hooks.length > 0) {\n ArrayExt.fill(hooks, null);\n scheduleCleanup(hooks);\n }\n // Clear all posted messages for the handler.\n for (const posted of messageQueue) {\n if (posted.handler === handler) {\n posted.handler = null;\n posted.msg = null;\n }\n }\n }\n MessageLoop.clearData = clearData;\n /**\n * Process the pending posted messages in the queue immediately.\n *\n * #### Notes\n * This function is useful when posted messages must be processed immediately.\n *\n * This function should normally not be needed, but it may be\n * required to work around certain browser idiosyncrasies.\n *\n * Recursing into this function is a no-op.\n */\n function flush() {\n // Bail if recursion is detected or if there is no pending task.\n if (flushGuard || pending === null) {\n return;\n }\n // Unschedule the pending loop task.\n pending();\n pending = null;\n // Run the message loop within the recursion guard.\n flushGuard = true;\n runMessageLoop();\n flushGuard = false;\n }\n MessageLoop.flush = flush;\n /**\n * Get the message loop exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return exceptionHandler;\n }\n MessageLoop.getExceptionHandler = getExceptionHandler;\n /**\n * Set the message loop exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a message handler or a\n * message hook throws an exception.\n */\n function setExceptionHandler(handler) {\n let old = exceptionHandler;\n exceptionHandler = handler;\n return old;\n }\n MessageLoop.setExceptionHandler = setExceptionHandler;\n /**\n * The queue of posted message pairs.\n */\n const messageQueue = new LinkedList();\n /**\n * A mapping of handler to array of installed message hooks.\n */\n const messageHooks = new WeakMap();\n /**\n * A set of message hook arrays which are pending cleanup.\n */\n const dirtySet = new Set();\n /**\n * The message loop exception handler.\n */\n let exceptionHandler = (err) => {\n console.error(err);\n };\n /**\n * A guard flag to prevent flush recursion.\n */\n let flushGuard = false;\n /**\n * Invoke a message hook with the specified handler and message.\n *\n * Returns the result of the hook, or `true` if the hook throws.\n *\n * Exceptions in the hook will be caught and logged.\n */\n function invokeHook(hook, handler, msg) {\n let result = true;\n try {\n if (typeof hook === 'function') {\n result = hook(handler, msg);\n }\n else {\n result = hook.messageHook(handler, msg);\n }\n }\n catch (err) {\n exceptionHandler(err);\n }\n return result;\n }\n /**\n * Invoke a message handler with the specified message.\n *\n * Exceptions in the handler will be caught and logged.\n */\n function invokeHandler(handler, msg) {\n try {\n handler.processMessage(msg);\n }\n catch (err) {\n exceptionHandler(err);\n }\n }\n /**\n * Add a message to the end of the message queue.\n *\n * This will automatically schedule a run of the message loop.\n */\n function enqueueMessage(handler, msg) {\n // Add the posted message to the queue.\n messageQueue.addLast({ handler, msg });\n // Bail if a loop task is already pending.\n if (pending !== null) {\n return;\n }\n // Schedule a run of the message loop.\n pending = schedule(runMessageLoop);\n }\n /**\n * Run an iteration of the message loop.\n *\n * This will process all pending messages in the queue. If a message\n * is added to the queue while the message loop is running, it will\n * be processed on the next cycle of the loop.\n */\n function runMessageLoop() {\n // Clear the task so the next loop can be scheduled.\n pending = null;\n // If the message queue is empty, there is nothing else to do.\n if (messageQueue.isEmpty) {\n return;\n }\n // Add a sentinel value to the end of the queue. The queue will\n // only be processed up to the sentinel. Messages posted during\n // this cycle will execute on the next cycle.\n let sentinel = { handler: null, msg: null };\n messageQueue.addLast(sentinel);\n // Enter the message loop.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // Remove the first posted message in the queue.\n let posted = messageQueue.removeFirst();\n // If the value is the sentinel, exit the loop.\n if (posted === sentinel) {\n return;\n }\n // Dispatch the message if it has not been cleared.\n if (posted.handler && posted.msg) {\n sendMessage(posted.handler, posted.msg);\n }\n }\n }\n /**\n * Schedule a cleanup of a message hooks array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any `null` hook will\n * be removed from the array.\n */\n function scheduleCleanup(hooks) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(hooks);\n }\n /**\n * Cleanup the message hook arrays in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupHooks);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty hooks in a message hooks array.\n *\n * This will remove any `null` hook from the array.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupHooks(hooks) {\n ArrayExt.removeAllWhere(hooks, isNull);\n }\n /**\n * Test whether a value is `null`.\n */\n function isNull(value) {\n return value === null;\n }\n})(MessageLoop || (MessageLoop = {}));\n\nexport { ConflatableMessage, Message, MessageLoop };\n//# sourceMappingURL=index.es6.js.map\n","// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module properties\n */\n/**\n * A class which attaches a value to an external object.\n *\n * #### Notes\n * Attached properties are used to extend the state of an object with\n * semantic data from an unrelated class. They also encapsulate value\n * creation, coercion, and notification.\n *\n * Because attached property values are stored in a hash table, which\n * in turn is stored in a WeakMap keyed on the owner object, there is\n * non-trivial storage overhead involved in their use. The pattern is\n * therefore best used for the storage of rare data.\n */\nclass AttachedProperty {\n /**\n * Construct a new attached property.\n *\n * @param options - The options for initializing the property.\n */\n constructor(options) {\n this._pid = Private.nextPID();\n this.name = options.name;\n this._create = options.create;\n this._coerce = options.coerce || null;\n this._compare = options.compare || null;\n this._changed = options.changed || null;\n }\n /**\n * Get the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @returns The current value of the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and assigned as the current value of the property.\n */\n get(owner) {\n let value;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n value = map[this._pid];\n }\n else {\n value = map[this._pid] = this._createValue(owner);\n }\n return value;\n }\n /**\n * Set the current value of the property for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * @param value - The value for the property.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n set(owner, value) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, value);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Explicitly coerce the current property value for a given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * If the value has not yet been set, the default value will be\n * computed and used as the previous value for the comparison.\n */\n coerce(owner) {\n let oldValue;\n let map = Private.ensureMap(owner);\n if (this._pid in map) {\n oldValue = map[this._pid];\n }\n else {\n oldValue = map[this._pid] = this._createValue(owner);\n }\n let newValue = this._coerceValue(owner, oldValue);\n this._maybeNotify(owner, oldValue, (map[this._pid] = newValue));\n }\n /**\n * Get or create the default value for the given owner.\n */\n _createValue(owner) {\n let create = this._create;\n return create(owner);\n }\n /**\n * Coerce the value for the given owner.\n */\n _coerceValue(owner, value) {\n let coerce = this._coerce;\n return coerce ? coerce(owner, value) : value;\n }\n /**\n * Compare the old value and new value for equality.\n */\n _compareValue(oldValue, newValue) {\n let compare = this._compare;\n return compare ? compare(oldValue, newValue) : oldValue === newValue;\n }\n /**\n * Run the change notification if the given values are different.\n */\n _maybeNotify(owner, oldValue, newValue) {\n let changed = this._changed;\n if (changed && !this._compareValue(oldValue, newValue)) {\n changed(owner, oldValue, newValue);\n }\n }\n}\n/**\n * The namespace for the `AttachedProperty` class statics.\n */\n(function (AttachedProperty) {\n /**\n * Clear the stored property data for the given owner.\n *\n * @param owner - The property owner of interest.\n *\n * #### Notes\n * This will clear all property values for the owner, but it will\n * **not** run the change notification for any of the properties.\n */\n function clearData(owner) {\n Private.ownerData.delete(owner);\n }\n AttachedProperty.clearData = clearData;\n})(AttachedProperty || (AttachedProperty = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of property owner to property map.\n */\n Private.ownerData = new WeakMap();\n /**\n * A function which computes successive unique property ids.\n */\n Private.nextPID = (() => {\n let id = 0;\n return () => {\n let rand = Math.random();\n let stem = `${rand}`.slice(2);\n return `pid-${stem}-${id++}`;\n };\n })();\n /**\n * Lookup the data map for the property owner.\n *\n * This will create the map if one does not already exist.\n */\n function ensureMap(owner) {\n let map = Private.ownerData.get(owner);\n if (map) {\n return map;\n }\n map = Object.create(null);\n Private.ownerData.set(owner, map);\n return map;\n }\n Private.ensureMap = ensureMap;\n})(Private || (Private = {}));\n\nexport { AttachedProperty };\n//# sourceMappingURL=index.es6.js.map\n","import { find, ArrayExt } from '@lumino/algorithm';\nimport { PromiseDelegate } from '@lumino/coreutils';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module signaling\n */\n/**\n * A concrete implementation of `ISignal`.\n *\n * #### Example\n * ```typescript\n * import { ISignal, Signal } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get valueChanged: ISignal {\n * return this._valueChanged;\n * }\n *\n * get value(): number {\n * return this._value;\n * }\n *\n * set value(value: number) {\n * if (value === this._value) {\n * return;\n * }\n * this._value = value;\n * this._valueChanged.emit(value);\n * }\n *\n * private _value = 0;\n * private _valueChanged = new Signal(this);\n * }\n *\n * function logger(sender: SomeClass, value: number): void {\n * console.log(sender.name, value);\n * }\n *\n * let m1 = new SomeClass('foo');\n * let m2 = new SomeClass('bar');\n *\n * m1.valueChanged.connect(logger);\n * m2.valueChanged.connect(logger);\n *\n * m1.value = 42; // logs: foo 42\n * m2.value = 17; // logs: bar 17\n * ```\n */\nclass Signal {\n /**\n * Construct a new signal.\n *\n * @param sender - The sender which owns the signal.\n */\n constructor(sender) {\n this.sender = sender;\n }\n /**\n * Connect a slot to the signal.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n connect(slot, thisArg) {\n return Private.connect(this, slot, thisArg);\n }\n /**\n * Disconnect a slot from the signal.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n disconnect(slot, thisArg) {\n return Private.disconnect(this, slot, thisArg);\n }\n /**\n * Emit the signal and invoke the connected slots.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n emit(args) {\n Private.emit(this, args);\n }\n}\n/**\n * The namespace for the `Signal` class statics.\n */\n(function (Signal) {\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectBetween(sender, receiver) {\n Private.disconnectBetween(sender, receiver);\n }\n Signal.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n Private.disconnectSender(sender);\n }\n Signal.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectReceiver(receiver) {\n Private.disconnectReceiver(receiver);\n }\n Signal.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n *\n * #### Notes\n * If a `thisArg` is provided when connecting a signal, that object\n * is considered the receiver. Otherwise, the `slot` is considered\n * the receiver.\n */\n function disconnectAll(object) {\n Private.disconnectAll(object);\n }\n Signal.disconnectAll = disconnectAll;\n /**\n * Clear all signal data associated with the given object.\n *\n * @param object - The object for which the data should be cleared.\n *\n * #### Notes\n * This removes all signal connections and any other signal data\n * associated with the object.\n */\n function clearData(object) {\n Private.disconnectAll(object);\n }\n Signal.clearData = clearData;\n /**\n * Get the signal exception handler.\n *\n * @returns The current exception handler.\n *\n * #### Notes\n * The default exception handler is `console.error`.\n */\n function getExceptionHandler() {\n return Private.exceptionHandler;\n }\n Signal.getExceptionHandler = getExceptionHandler;\n /**\n * Set the signal exception handler.\n *\n * @param handler - The function to use as the exception handler.\n *\n * @returns The old exception handler.\n *\n * #### Notes\n * The exception handler is invoked when a slot throws an exception.\n */\n function setExceptionHandler(handler) {\n let old = Private.exceptionHandler;\n Private.exceptionHandler = handler;\n return old;\n }\n Signal.setExceptionHandler = setExceptionHandler;\n})(Signal || (Signal = {}));\n/**\n * A concrete implementation of `IStream`.\n *\n * #### Example\n * ```typescript\n * import { IStream, Stream } from '@lumino/signaling';\n *\n * class SomeClass {\n *\n * constructor(name: string) {\n * this.name = name;\n * }\n *\n * readonly name: string;\n *\n * get pings(): IStream {\n * return this._pings;\n * }\n *\n * ping(value: string) {\n * this._pings.emit(value);\n * }\n *\n * private _pings = new Stream(this);\n * }\n *\n * let m1 = new SomeClass('foo');\n *\n * m1.pings.connect((_, value: string) => {\n * console.log('connect', value);\n * });\n *\n * void (async () => {\n * for await (const ping of m1.pings) {\n * console.log('iterator', ping);\n * }\n * })();\n *\n * m1.ping('alpha'); // logs: connect alpha\n * // logs: iterator alpha\n * m1.ping('beta'); // logs: connect beta\n * // logs: iterator beta\n * ```\n */\nclass Stream extends Signal {\n constructor() {\n super(...arguments);\n this._pending = new PromiseDelegate();\n }\n /**\n * Return an async iterator that yields every emission.\n */\n async *[Symbol.asyncIterator]() {\n let pending = this._pending;\n while (true) {\n try {\n const { args, next } = await pending.promise;\n pending = next;\n yield args;\n }\n catch (_) {\n return; // Any promise rejection stops the iterator.\n }\n }\n }\n /**\n * Emit the signal, invoke the connected slots, and yield the emission.\n *\n * @param args - The args to pass to the connected slots.\n */\n emit(args) {\n const pending = this._pending;\n const next = (this._pending = new PromiseDelegate());\n pending.resolve({ args, next });\n super.emit(args);\n }\n /**\n * Stop the stream's async iteration.\n */\n stop() {\n this._pending.promise.catch(() => undefined);\n this._pending.reject('stop');\n this._pending = new PromiseDelegate();\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * The signal exception handler function.\n */\n Private.exceptionHandler = (err) => {\n console.error(err);\n };\n /**\n * Connect a slot to a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to invoke when the signal is emitted.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection succeeds, `false` otherwise.\n */\n function connect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Ensure the sender's array of receivers is created.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers) {\n receivers = [];\n receiversForSender.set(signal.sender, receivers);\n }\n // Bail if a matching connection already exists.\n if (findConnection(receivers, signal, slot, thisArg)) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Ensure the receiver's array of senders is created.\n let senders = sendersForReceiver.get(receiver);\n if (!senders) {\n senders = [];\n sendersForReceiver.set(receiver, senders);\n }\n // Create a new connection and add it to the end of each array.\n let connection = { signal, slot, thisArg };\n receivers.push(connection);\n senders.push(connection);\n // Indicate a successful connection.\n return true;\n }\n Private.connect = connect;\n /**\n * Disconnect a slot from a signal.\n *\n * @param signal - The signal of interest.\n *\n * @param slot - The slot to disconnect from the signal.\n *\n * @param thisArg - The `this` context for the slot. If provided,\n * this must be a non-primitive object.\n *\n * @returns `true` if the connection is removed, `false` otherwise.\n */\n function disconnect(signal, slot, thisArg) {\n // Coerce a `null` `thisArg` to `undefined`.\n thisArg = thisArg || undefined;\n // Lookup the list of receivers, and bail if none exist.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return false;\n }\n // Bail if no matching connection exits.\n let connection = findConnection(receivers, signal, slot, thisArg);\n if (!connection) {\n return false;\n }\n // Choose the best object for the receiver.\n let receiver = thisArg || slot;\n // Lookup the array of senders, which is now known to exist.\n let senders = sendersForReceiver.get(receiver);\n // Clear the connection and schedule cleanup of the arrays.\n connection.signal = null;\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n // Indicate a successful disconnection.\n return true;\n }\n Private.disconnect = disconnect;\n /**\n * Remove all connections between a sender and receiver.\n *\n * @param sender - The sender object of interest.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectBetween(sender, receiver) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each connection between the sender and receiver.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Clear the connection if it matches the sender.\n if (connection.signal.sender === sender) {\n connection.signal = null;\n }\n }\n // Schedule a cleanup of the senders and receivers.\n scheduleCleanup(receivers);\n scheduleCleanup(senders);\n }\n Private.disconnectBetween = disconnectBetween;\n /**\n * Remove all connections where the given object is the sender.\n *\n * @param sender - The sender object of interest.\n */\n function disconnectSender(sender) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Clear each receiver connection.\n for (const connection of receivers) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Choose the best object for the receiver.\n let receiver = connection.thisArg || connection.slot;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of senders, which is now known to exist.\n scheduleCleanup(sendersForReceiver.get(receiver));\n }\n // Schedule a cleanup of the receivers.\n scheduleCleanup(receivers);\n }\n Private.disconnectSender = disconnectSender;\n /**\n * Remove all connections where the given object is the receiver.\n *\n * @param receiver - The receiver object of interest.\n */\n function disconnectReceiver(receiver) {\n // If there are no senders, there is nothing to do.\n let senders = sendersForReceiver.get(receiver);\n if (!senders || senders.length === 0) {\n return;\n }\n // Clear each sender connection.\n for (const connection of senders) {\n // Skip connections which have already been cleared.\n if (!connection.signal) {\n continue;\n }\n // Lookup the sender for the connection.\n let sender = connection.signal.sender;\n // Clear the connection.\n connection.signal = null;\n // Cleanup the array of receivers, which is now known to exist.\n scheduleCleanup(receiversForSender.get(sender));\n }\n // Schedule a cleanup of the list of senders.\n scheduleCleanup(senders);\n }\n Private.disconnectReceiver = disconnectReceiver;\n /**\n * Remove all connections where an object is the sender or receiver.\n *\n * @param object - The object of interest.\n */\n function disconnectAll(object) {\n // Remove all connections where the given object is the sender.\n disconnectSender(object);\n // Remove all connections where the given object is the receiver.\n disconnectReceiver(object);\n }\n Private.disconnectAll = disconnectAll;\n /**\n * Emit a signal and invoke its connected slots.\n *\n * @param signal - The signal of interest.\n *\n * @param args - The args to pass to the connected slots.\n *\n * #### Notes\n * Slots are invoked synchronously in connection order.\n *\n * Exceptions thrown by connected slots will be caught and logged.\n */\n function emit(signal, args) {\n // If there are no receivers, there is nothing to do.\n let receivers = receiversForSender.get(signal.sender);\n if (!receivers || receivers.length === 0) {\n return;\n }\n // Invoke the slots for connections with a matching signal.\n // Any connections added during emission are not invoked.\n for (let i = 0, n = receivers.length; i < n; ++i) {\n let connection = receivers[i];\n if (connection.signal === signal) {\n invokeSlot(connection, args);\n }\n }\n }\n Private.emit = emit;\n /**\n * A weak mapping of sender to array of receiver connections.\n */\n const receiversForSender = new WeakMap();\n /**\n * A weak mapping of receiver to array of sender connections.\n */\n const sendersForReceiver = new WeakMap();\n /**\n * A set of connection arrays which are pending cleanup.\n */\n const dirtySet = new Set();\n /**\n * A function to schedule an event loop callback.\n */\n const schedule = (() => {\n let ok = typeof requestAnimationFrame === 'function';\n return ok ? requestAnimationFrame : setImmediate;\n })();\n /**\n * Find a connection which matches the given parameters.\n */\n function findConnection(connections, signal, slot, thisArg) {\n return find(connections, connection => connection.signal === signal &&\n connection.slot === slot &&\n connection.thisArg === thisArg);\n }\n /**\n * Invoke a slot with the given parameters.\n *\n * The connection is assumed to be valid.\n *\n * Exceptions in the slot will be caught and logged.\n */\n function invokeSlot(connection, args) {\n let { signal, slot, thisArg } = connection;\n try {\n slot.call(thisArg, signal.sender, args);\n }\n catch (err) {\n Private.exceptionHandler(err);\n }\n }\n /**\n * Schedule a cleanup of a connection array.\n *\n * This will add the array to the dirty set and schedule a deferred\n * cleanup of the array contents. On cleanup, any connection with a\n * `null` signal will be removed from the array.\n */\n function scheduleCleanup(array) {\n if (dirtySet.size === 0) {\n schedule(cleanupDirtySet);\n }\n dirtySet.add(array);\n }\n /**\n * Cleanup the connection lists in the dirty set.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupDirtySet() {\n dirtySet.forEach(cleanupConnections);\n dirtySet.clear();\n }\n /**\n * Cleanup the dirty connections in a connections array.\n *\n * This will remove any connection with a `null` signal.\n *\n * This function should only be invoked asynchronously, when the\n * stack frame is guaranteed to not be on the path of user code.\n */\n function cleanupConnections(connections) {\n ArrayExt.removeAllWhere(connections, isDeadConnection);\n }\n /**\n * Test whether a connection is dead.\n *\n * A dead connection has a `null` signal.\n */\n function isDeadConnection(connection) {\n return connection.signal === null;\n }\n})(Private || (Private = {}));\n\nexport { Signal, Stream };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt } from '@lumino/algorithm';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * @packageDocumentation\n * @module virtualdom\n */\n/**\n * A virtual node which represents plain text content.\n *\n * #### Notes\n * User code will not typically create a `VirtualText` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualText {\n /**\n * Construct a new virtual text node.\n *\n * @param content - The text content for the node.\n */\n constructor(content) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'text';\n this.content = content;\n }\n}\n/**\n * A virtual node which represents an HTML element.\n *\n * #### Notes\n * User code will not typically create a `VirtualElement` node directly.\n * Instead, the `h()` function will be used to create an element tree.\n */\nclass VirtualElement {\n /**\n * Construct a new virtual element node.\n *\n * @param tag - The element tag name.\n *\n * @param attrs - The element attributes.\n *\n * @param children - The element children.\n *\n * @param renderer - An optional custom renderer for the element.\n */\n constructor(tag, attrs, children, renderer) {\n /**\n * The type of the node.\n *\n * This value can be used as a type guard for discriminating the\n * `VirtualNode` union type.\n */\n this.type = 'element';\n this.tag = tag;\n this.attrs = attrs;\n this.children = children;\n this.renderer = renderer;\n }\n}\n/**\n * DEPRECATED - use VirtualElement with a defined renderer param instead.\n * This class is provided as a backwards compatibility shim\n *\n * A \"pass thru\" virtual node whose children are managed by a render and an\n * unrender callback. The intent of this flavor of virtual node is to make\n * it easy to blend other kinds of virtualdom (eg React) into Phosphor's\n * virtualdom.\n *\n * #### Notes\n * User code will not typically create a `VirtualElementPass` node directly.\n * Instead, the `hpass()` function will be used to create an element tree.\n */\nclass VirtualElementPass extends VirtualElement {\n /**\n * DEPRECATED - use VirtualElement with a defined renderer param instead\n *\n * Construct a new virtual element pass thru node.\n *\n * @param tag - the tag of the parent element of this node. Once the parent\n * element is rendered, it will be passed as an argument to\n * renderer.render\n *\n * @param attrs - attributes that will assigned to the\n * parent element\n *\n * @param renderer - an object with render and unrender\n * functions, each of which should take a single argument of type\n * HTMLElement and return nothing. If null, the parent element\n * will be rendered barren without any children.\n */\n constructor(tag, attrs, renderer) {\n super(tag, attrs, [], renderer || undefined);\n }\n}\nfunction h(tag) {\n let attrs = {};\n let renderer;\n let children = [];\n for (let i = 1, n = arguments.length; i < n; ++i) {\n // eslint-disable-next-line prefer-rest-params\n let arg = arguments[i];\n if (typeof arg === 'string') {\n children.push(new VirtualText(arg));\n }\n else if (arg instanceof VirtualText) {\n children.push(arg);\n }\n else if (arg instanceof VirtualElement) {\n children.push(arg);\n }\n else if (arg instanceof Array) {\n extend(children, arg);\n }\n else if ((i === 1 || i === 2) && arg && typeof arg === 'object') {\n if ('render' in arg) {\n renderer = arg;\n }\n else {\n attrs = arg;\n }\n }\n }\n return new VirtualElement(tag, attrs, children, renderer);\n function extend(array, values) {\n for (let child of values) {\n if (typeof child === 'string') {\n array.push(new VirtualText(child));\n }\n else if (child instanceof VirtualText) {\n array.push(child);\n }\n else if (child instanceof VirtualElement) {\n array.push(child);\n }\n }\n }\n}\n/**\n * The namespace for the `h` function statics.\n */\n(function (h) {\n h.a = h.bind(undefined, 'a');\n h.abbr = h.bind(undefined, 'abbr');\n h.address = h.bind(undefined, 'address');\n h.area = h.bind(undefined, 'area');\n h.article = h.bind(undefined, 'article');\n h.aside = h.bind(undefined, 'aside');\n h.audio = h.bind(undefined, 'audio');\n h.b = h.bind(undefined, 'b');\n h.bdi = h.bind(undefined, 'bdi');\n h.bdo = h.bind(undefined, 'bdo');\n h.blockquote = h.bind(undefined, 'blockquote');\n h.br = h.bind(undefined, 'br');\n h.button = h.bind(undefined, 'button');\n h.canvas = h.bind(undefined, 'canvas');\n h.caption = h.bind(undefined, 'caption');\n h.cite = h.bind(undefined, 'cite');\n h.code = h.bind(undefined, 'code');\n h.col = h.bind(undefined, 'col');\n h.colgroup = h.bind(undefined, 'colgroup');\n h.data = h.bind(undefined, 'data');\n h.datalist = h.bind(undefined, 'datalist');\n h.dd = h.bind(undefined, 'dd');\n h.del = h.bind(undefined, 'del');\n h.dfn = h.bind(undefined, 'dfn');\n h.div = h.bind(undefined, 'div');\n h.dl = h.bind(undefined, 'dl');\n h.dt = h.bind(undefined, 'dt');\n h.em = h.bind(undefined, 'em');\n h.embed = h.bind(undefined, 'embed');\n h.fieldset = h.bind(undefined, 'fieldset');\n h.figcaption = h.bind(undefined, 'figcaption');\n h.figure = h.bind(undefined, 'figure');\n h.footer = h.bind(undefined, 'footer');\n h.form = h.bind(undefined, 'form');\n h.h1 = h.bind(undefined, 'h1');\n h.h2 = h.bind(undefined, 'h2');\n h.h3 = h.bind(undefined, 'h3');\n h.h4 = h.bind(undefined, 'h4');\n h.h5 = h.bind(undefined, 'h5');\n h.h6 = h.bind(undefined, 'h6');\n h.header = h.bind(undefined, 'header');\n h.hr = h.bind(undefined, 'hr');\n h.i = h.bind(undefined, 'i');\n h.iframe = h.bind(undefined, 'iframe');\n h.img = h.bind(undefined, 'img');\n h.input = h.bind(undefined, 'input');\n h.ins = h.bind(undefined, 'ins');\n h.kbd = h.bind(undefined, 'kbd');\n h.label = h.bind(undefined, 'label');\n h.legend = h.bind(undefined, 'legend');\n h.li = h.bind(undefined, 'li');\n h.main = h.bind(undefined, 'main');\n h.map = h.bind(undefined, 'map');\n h.mark = h.bind(undefined, 'mark');\n h.meter = h.bind(undefined, 'meter');\n h.nav = h.bind(undefined, 'nav');\n h.noscript = h.bind(undefined, 'noscript');\n h.object = h.bind(undefined, 'object');\n h.ol = h.bind(undefined, 'ol');\n h.optgroup = h.bind(undefined, 'optgroup');\n h.option = h.bind(undefined, 'option');\n h.output = h.bind(undefined, 'output');\n h.p = h.bind(undefined, 'p');\n h.param = h.bind(undefined, 'param');\n h.pre = h.bind(undefined, 'pre');\n h.progress = h.bind(undefined, 'progress');\n h.q = h.bind(undefined, 'q');\n h.rp = h.bind(undefined, 'rp');\n h.rt = h.bind(undefined, 'rt');\n h.ruby = h.bind(undefined, 'ruby');\n h.s = h.bind(undefined, 's');\n h.samp = h.bind(undefined, 'samp');\n h.section = h.bind(undefined, 'section');\n h.select = h.bind(undefined, 'select');\n h.small = h.bind(undefined, 'small');\n h.source = h.bind(undefined, 'source');\n h.span = h.bind(undefined, 'span');\n h.strong = h.bind(undefined, 'strong');\n h.sub = h.bind(undefined, 'sub');\n h.summary = h.bind(undefined, 'summary');\n h.sup = h.bind(undefined, 'sup');\n h.table = h.bind(undefined, 'table');\n h.tbody = h.bind(undefined, 'tbody');\n h.td = h.bind(undefined, 'td');\n h.textarea = h.bind(undefined, 'textarea');\n h.tfoot = h.bind(undefined, 'tfoot');\n h.th = h.bind(undefined, 'th');\n h.thead = h.bind(undefined, 'thead');\n h.time = h.bind(undefined, 'time');\n h.title = h.bind(undefined, 'title');\n h.tr = h.bind(undefined, 'tr');\n h.track = h.bind(undefined, 'track');\n h.u = h.bind(undefined, 'u');\n h.ul = h.bind(undefined, 'ul');\n h.var_ = h.bind(undefined, 'var');\n h.video = h.bind(undefined, 'video');\n h.wbr = h.bind(undefined, 'wbr');\n})(h || (h = {}));\nfunction hpass(tag) {\n let attrs = {};\n let renderer = null;\n if (arguments.length === 2) {\n // eslint-disable-next-line prefer-rest-params\n const arg = arguments[1];\n if ('render' in arg) {\n renderer = arg;\n }\n else {\n attrs = arg;\n }\n }\n else if (arguments.length === 3) {\n // eslint-disable-next-line prefer-rest-params\n attrs = arguments[1];\n // eslint-disable-next-line prefer-rest-params\n renderer = arguments[2];\n }\n else if (arguments.length > 3) {\n throw new Error('hpass() should be called with 1, 2, or 3 arguments');\n }\n return new VirtualElementPass(tag, attrs, renderer);\n}\n/**\n * The namespace for the virtual DOM rendering functions.\n */\nvar VirtualDOM;\n(function (VirtualDOM) {\n function realize(node) {\n return Private.createDOMNode(node);\n }\n VirtualDOM.realize = realize;\n /**\n * Render virtual DOM content into a host element.\n *\n * @param content - The virtual DOM content to render.\n *\n * @param host - The host element for the rendered content.\n *\n * #### Notes\n * This renders the delta from the previous rendering. It assumes that\n * the content of the host element is not manipulated by external code.\n *\n * Providing `null` content will clear the rendering.\n *\n * Externally modifying the provided content or the host element will\n * result in undefined rendering behavior.\n */\n function render(content, host) {\n let oldContent = Private.hostMap.get(host) || [];\n let newContent = Private.asContentArray(content);\n Private.hostMap.set(host, newContent);\n Private.updateContent(host, oldContent, newContent);\n }\n VirtualDOM.render = render;\n})(VirtualDOM || (VirtualDOM = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * A weak mapping of host element to virtual DOM content.\n */\n Private.hostMap = new WeakMap();\n /**\n * Cast a content value to a content array.\n */\n function asContentArray(value) {\n if (!value) {\n return [];\n }\n if (value instanceof Array) {\n return value;\n }\n return [value];\n }\n Private.asContentArray = asContentArray;\n function createDOMNode(node) {\n // eslint-disable-next-line prefer-rest-params\n let host = arguments[1] || null;\n // eslint-disable-next-line prefer-rest-params\n const before = arguments[2] || null;\n if (host) {\n host.insertBefore(createDOMNode(node), before);\n }\n else {\n // Create a text node for a virtual text node.\n if (node.type === 'text') {\n return document.createTextNode(node.content);\n }\n // Create the HTML element with the specified tag.\n host = document.createElement(node.tag);\n // Add the attributes for the new element.\n addAttrs(host, node.attrs);\n if (node.renderer) {\n node.renderer.render(host, {\n attrs: node.attrs,\n children: node.children\n });\n return host;\n }\n // Recursively populate the element with child content.\n for (let i = 0, n = node.children.length; i < n; ++i) {\n createDOMNode(node.children[i], host);\n }\n }\n return host;\n }\n Private.createDOMNode = createDOMNode;\n /**\n * Update a host element with the delta of the virtual content.\n *\n * This is the core \"diff\" algorithm. There is no explicit \"patch\"\n * phase. The host is patched at each step as the diff progresses.\n */\n function updateContent(host, oldContent, newContent) {\n // Bail early if the content is identical.\n if (oldContent === newContent) {\n return;\n }\n // Collect the old keyed elems into a mapping.\n let oldKeyed = collectKeys(host, oldContent);\n // Create a copy of the old content which can be modified in-place.\n let oldCopy = oldContent.slice();\n // Update the host with the new content. The diff always proceeds\n // forward and never modifies a previously visited index. The old\n // copy array is modified in-place to reflect the changes made to\n // the host children. This causes the stale nodes to be pushed to\n // the end of the host node and removed at the end of the loop.\n let currElem = host.firstChild;\n let newCount = newContent.length;\n for (let i = 0; i < newCount; ++i) {\n // If the old content is exhausted, create a new node.\n if (i >= oldCopy.length) {\n createDOMNode(newContent[i], host);\n continue;\n }\n // Lookup the old and new virtual nodes.\n let oldVNode = oldCopy[i];\n let newVNode = newContent[i];\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // Handle the simplest case of in-place text update first.\n if (oldVNode.type === 'text' && newVNode.type === 'text') {\n // Avoid spurious updates for performance.\n if (currElem.textContent !== newVNode.content) {\n currElem.textContent = newVNode.content;\n }\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old or new node is a text node, the other node is now\n // known to be an element node, so create and insert a new node.\n if (oldVNode.type === 'text' || newVNode.type === 'text') {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // If the old XOR new node has a custom renderer,\n // create and insert a new node.\n if (!oldVNode.renderer != !newVNode.renderer) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // At this point, both nodes are known to be element nodes.\n // If the new elem is keyed, move an old keyed elem to the proper\n // location before proceeding with the diff. The search can start\n // at the current index, since the unmatched old keyed elems are\n // pushed forward in the old copy array.\n let newKey = newVNode.attrs.key;\n if (newKey && newKey in oldKeyed) {\n let pair = oldKeyed[newKey];\n if (pair.vNode !== oldVNode) {\n ArrayExt.move(oldCopy, oldCopy.indexOf(pair.vNode, i + 1), i);\n host.insertBefore(pair.element, currElem);\n oldVNode = pair.vNode;\n currElem = pair.element;\n }\n }\n // If both elements are identical, there is nothing to do.\n if (oldVNode === newVNode) {\n currElem = currElem.nextSibling;\n continue;\n }\n // If the old elem is keyed and does not match the new elem key,\n // create a new node. This is necessary since the old keyed elem\n // may be matched at a later point in the diff.\n let oldKey = oldVNode.attrs.key;\n if (oldKey && oldKey !== newKey) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // If the tags are different, create a new node.\n if (oldVNode.tag !== newVNode.tag) {\n ArrayExt.insert(oldCopy, i, newVNode);\n createDOMNode(newVNode, host, currElem);\n continue;\n }\n // At this point, the element can be updated in-place.\n // Update the element attributes.\n updateAttrs(currElem, oldVNode.attrs, newVNode.attrs);\n // Update the element content.\n if (newVNode.renderer) {\n newVNode.renderer.render(currElem, {\n attrs: newVNode.attrs,\n children: newVNode.children\n });\n }\n else {\n updateContent(currElem, oldVNode.children, newVNode.children);\n }\n // Step to the next sibling element.\n currElem = currElem.nextSibling;\n }\n // Cleanup stale DOM\n removeContent(host, oldCopy, newCount, true);\n }\n Private.updateContent = updateContent;\n /**\n * Handle cleanup of stale vdom and its associated DOM. The host node is\n * traversed recursively (in depth-first order), and any explicit cleanup\n * required by a child node is carried out when it is visited (eg if a node\n * has a custom renderer, the renderer.unrender function will be called).\n * Once the subtree beneath each child of host has been completely visited,\n * that child will be removed via a call to host.removeChild.\n */\n function removeContent(host, oldContent, newCount, _sentinel) {\n // Dispose of the old nodes pushed to the end of the host.\n for (let i = oldContent.length - 1; i >= newCount; --i) {\n const oldNode = oldContent[i];\n const child = (_sentinel ? host.lastChild : host.childNodes[i]);\n // recursively clean up host children\n if (oldNode.type === 'text') ;\n else if (oldNode.renderer && oldNode.renderer.unrender) {\n oldNode.renderer.unrender(child, {\n attrs: oldNode.attrs,\n children: oldNode.children\n });\n }\n else {\n removeContent(child, oldNode.children, 0, false);\n }\n if (_sentinel) {\n host.removeChild(child);\n }\n }\n }\n /**\n * A set of special-cased attribute names.\n */\n const specialAttrs = {\n key: true,\n className: true,\n htmlFor: true,\n dataset: true,\n style: true\n };\n /**\n * Add element attributes to a newly created HTML element.\n */\n function addAttrs(element, attrs) {\n // Add the inline event listeners and node attributes.\n for (let name in attrs) {\n if (name in specialAttrs) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = attrs[name];\n }\n else {\n element.setAttribute(name, attrs[name]);\n }\n }\n // Add the element `class` attribute.\n if (attrs.className !== undefined) {\n element.setAttribute('class', attrs.className);\n }\n // Add the element `for` attribute.\n if (attrs.htmlFor !== undefined) {\n element.setAttribute('for', attrs.htmlFor);\n }\n // Add the dataset values.\n if (attrs.dataset) {\n addDataset(element, attrs.dataset);\n }\n // Add the inline styles.\n if (attrs.style) {\n addStyle(element, attrs.style);\n }\n }\n /**\n * Update the element attributes of an HTML element.\n */\n function updateAttrs(element, oldAttrs, newAttrs) {\n // Do nothing if the attrs are the same object.\n if (oldAttrs === newAttrs) {\n return;\n }\n // Setup the strongly typed loop variable.\n let name;\n // Remove attributes and listeners which no longer exist.\n for (name in oldAttrs) {\n if (name in specialAttrs || name in newAttrs) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = null;\n }\n else {\n element.removeAttribute(name);\n }\n }\n // Add and update new and existing attributes and listeners.\n for (name in newAttrs) {\n if (name in specialAttrs || oldAttrs[name] === newAttrs[name]) {\n continue;\n }\n if (name.substr(0, 2) === 'on') {\n element[name] = newAttrs[name];\n }\n else {\n element.setAttribute(name, newAttrs[name]);\n }\n }\n // Update the element `class` attribute.\n if (oldAttrs.className !== newAttrs.className) {\n if (newAttrs.className !== undefined) {\n element.setAttribute('class', newAttrs.className);\n }\n else {\n element.removeAttribute('class');\n }\n }\n // Add the element `for` attribute.\n if (oldAttrs.htmlFor !== newAttrs.htmlFor) {\n if (newAttrs.htmlFor !== undefined) {\n element.setAttribute('for', newAttrs.htmlFor);\n }\n else {\n element.removeAttribute('for');\n }\n }\n // Update the dataset values.\n if (oldAttrs.dataset !== newAttrs.dataset) {\n updateDataset(element, oldAttrs.dataset || {}, newAttrs.dataset || {});\n }\n // Update the inline styles.\n if (oldAttrs.style !== newAttrs.style) {\n updateStyle(element, oldAttrs.style || {}, newAttrs.style || {});\n }\n }\n /**\n * Add dataset values to a newly created HTML element.\n */\n function addDataset(element, dataset) {\n for (let name in dataset) {\n element.setAttribute(`data-${name}`, dataset[name]);\n }\n }\n /**\n * Update the dataset values of an HTML element.\n */\n function updateDataset(element, oldDataset, newDataset) {\n for (let name in oldDataset) {\n if (!(name in newDataset)) {\n element.removeAttribute(`data-${name}`);\n }\n }\n for (let name in newDataset) {\n if (oldDataset[name] !== newDataset[name]) {\n element.setAttribute(`data-${name}`, newDataset[name]);\n }\n }\n }\n /**\n * Add inline style values to a newly created HTML element.\n */\n function addStyle(element, style) {\n let elemStyle = element.style;\n let name;\n for (name in style) {\n elemStyle[name] = style[name];\n }\n }\n /**\n * Update the inline style values of an HTML element.\n */\n function updateStyle(element, oldStyle, newStyle) {\n let elemStyle = element.style;\n let name;\n for (name in oldStyle) {\n if (!(name in newStyle)) {\n elemStyle[name] = '';\n }\n }\n for (name in newStyle) {\n if (oldStyle[name] !== newStyle[name]) {\n elemStyle[name] = newStyle[name];\n }\n }\n }\n /**\n * Collect a mapping of keyed elements for the host content.\n */\n function collectKeys(host, content) {\n let node = host.firstChild;\n let keyMap = Object.create(null);\n for (let vNode of content) {\n if (vNode.type === 'element' && vNode.attrs.key) {\n keyMap[vNode.attrs.key] = { vNode, element: node };\n }\n node = node.nextSibling;\n }\n return keyMap;\n }\n})(Private || (Private = {}));\n\nexport { VirtualDOM, VirtualElement, VirtualElementPass, VirtualText, h, hpass };\n//# sourceMappingURL=index.es6.js.map\n","import { ArrayExt, StringExt, empty, find, max } from '@lumino/algorithm';\nimport { UUID, JSONExt, MimeData } from '@lumino/coreutils';\nimport { ElementExt, Selector, Platform } from '@lumino/domutils';\nimport { Message, ConflatableMessage, MessageLoop } from '@lumino/messaging';\nimport { AttachedProperty } from '@lumino/properties';\nimport { Signal } from '@lumino/signaling';\nimport { Drag } from '@lumino/dragdrop';\nimport { CommandRegistry } from '@lumino/commands';\nimport { VirtualDOM, h } from '@lumino/virtualdom';\nimport { DisposableDelegate } from '@lumino/disposable';\nimport { getKeyboardLayout } from '@lumino/keyboard';\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A sizer object for use with the box engine layout functions.\n *\n * #### Notes\n * A box sizer holds the geometry information for an object along an\n * arbitrary layout orientation.\n *\n * For best performance, this class should be treated as a raw data\n * struct. It should not typically be subclassed.\n */\nclass BoxSizer {\n constructor() {\n /**\n * The preferred size for the sizer.\n *\n * #### Notes\n * The sizer will be given this initial size subject to its size\n * bounds. The sizer will not deviate from this size unless such\n * deviation is required to fit into the available layout space.\n *\n * There is no limit to this value, but it will be clamped to the\n * bounds defined by {@link minSize} and {@link maxSize}.\n *\n * The default value is `0`.\n */\n this.sizeHint = 0;\n /**\n * The minimum size of the sizer.\n *\n * #### Notes\n * The sizer will never be sized less than this value, even if\n * it means the sizer will overflow the available layout space.\n *\n * It is assumed that this value lies in the range `[0, Infinity)`\n * and that it is `<=` to {@link maxSize}. Failure to adhere to this\n * constraint will yield undefined results.\n *\n * The default value is `0`.\n */\n this.minSize = 0;\n /**\n * The maximum size of the sizer.\n *\n * #### Notes\n * The sizer will never be sized greater than this value, even if\n * it means the sizer will underflow the available layout space.\n *\n * It is assumed that this value lies in the range `[0, Infinity]`\n * and that it is `>=` to {@link minSize}. Failure to adhere to this\n * constraint will yield undefined results.\n *\n * The default value is `Infinity`.\n */\n this.maxSize = Infinity;\n /**\n * The stretch factor for the sizer.\n *\n * #### Notes\n * This controls how much the sizer stretches relative to its sibling\n * sizers when layout space is distributed. A stretch factor of zero\n * is special and will cause the sizer to only be resized after all\n * other sizers with a stretch factor greater than zero have been\n * resized to their limits.\n *\n * It is assumed that this value is an integer that lies in the range\n * `[0, Infinity)`. Failure to adhere to this constraint will yield\n * undefined results.\n *\n * The default value is `1`.\n */\n this.stretch = 1;\n /**\n * The computed size of the sizer.\n *\n * #### Notes\n * This value is the output of a call to {@link BoxEngine.calc}. It represents\n * the computed size for the object along the layout orientation,\n * and will always lie in the range `[minSize, maxSize]`.\n *\n * This value is output only.\n *\n * Changing this value will have no effect.\n */\n this.size = 0;\n /**\n * An internal storage property for the layout algorithm.\n *\n * #### Notes\n * This value is used as temporary storage by the layout algorithm.\n *\n * Changing this value will have no effect.\n */\n this.done = false;\n }\n}\n/**\n * The namespace for the box engine layout functions.\n */\nvar BoxEngine;\n(function (BoxEngine) {\n /**\n * Calculate the optimal layout sizes for a sequence of box sizers.\n *\n * This distributes the available layout space among the box sizers\n * according to the following algorithm:\n *\n * 1. Initialize the sizers's size to its size hint and compute the\n * sums for each of size hint, min size, and max size.\n *\n * 2. If the total size hint equals the available space, return.\n *\n * 3. If the available space is less than the total min size, set all\n * sizers to their min size and return.\n *\n * 4. If the available space is greater than the total max size, set\n * all sizers to their max size and return.\n *\n * 5. If the layout space is less than the total size hint, distribute\n * the negative delta as follows:\n *\n * a. Shrink each sizer with a stretch factor greater than zero by\n * an amount proportional to the negative space and the sum of\n * stretch factors. If the sizer reaches its min size, remove\n * it and its stretch factor from the computation.\n *\n * b. If after adjusting all stretch sizers there remains negative\n * space, distribute the space equally among the sizers with a\n * stretch factor of zero. If a sizer reaches its min size,\n * remove it from the computation.\n *\n * 6. If the layout space is greater than the total size hint,\n * distribute the positive delta as follows:\n *\n * a. Expand each sizer with a stretch factor greater than zero by\n * an amount proportional to the postive space and the sum of\n * stretch factors. If the sizer reaches its max size, remove\n * it and its stretch factor from the computation.\n *\n * b. If after adjusting all stretch sizers there remains positive\n * space, distribute the space equally among the sizers with a\n * stretch factor of zero. If a sizer reaches its max size,\n * remove it from the computation.\n *\n * 7. return\n *\n * @param sizers - The sizers for a particular layout line.\n *\n * @param space - The available layout space for the sizers.\n *\n * @returns The delta between the provided available space and the\n * actual consumed space. This value will be zero if the sizers\n * can be adjusted to fit, negative if the available space is too\n * small, and positive if the available space is too large.\n *\n * #### Notes\n * The {@link BoxSizer.size} of each sizer is updated with the computed size.\n *\n * This function can be called at any time to recompute the layout for\n * an existing sequence of sizers. The previously computed results will\n * have no effect on the new output. It is therefore not necessary to\n * create new sizer objects on each resize event.\n */\n function calc(sizers, space) {\n // Bail early if there is nothing to do.\n let count = sizers.length;\n if (count === 0) {\n return space;\n }\n // Setup the size and stretch counters.\n let totalMin = 0;\n let totalMax = 0;\n let totalSize = 0;\n let totalStretch = 0;\n let stretchCount = 0;\n // Setup the sizers and compute the totals.\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n let min = sizer.minSize;\n let max = sizer.maxSize;\n let hint = sizer.sizeHint;\n sizer.done = false;\n sizer.size = Math.max(min, Math.min(hint, max));\n totalSize += sizer.size;\n totalMin += min;\n totalMax += max;\n if (sizer.stretch > 0) {\n totalStretch += sizer.stretch;\n stretchCount++;\n }\n }\n // If the space is equal to the total size, return early.\n if (space === totalSize) {\n return 0;\n }\n // If the space is less than the total min, minimize each sizer.\n if (space <= totalMin) {\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n sizer.size = sizer.minSize;\n }\n return space - totalMin;\n }\n // If the space is greater than the total max, maximize each sizer.\n if (space >= totalMax) {\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n sizer.size = sizer.maxSize;\n }\n return space - totalMax;\n }\n // The loops below perform sub-pixel precision sizing. A near zero\n // value is used for compares instead of zero to ensure that the\n // loop terminates when the subdivided space is reasonably small.\n let nearZero = 0.01;\n // A counter which is decremented each time a sizer is resized to\n // its limit. This ensures the loops terminate even if there is\n // space remaining to distribute.\n let notDoneCount = count;\n // Distribute negative delta space.\n if (space < totalSize) {\n // Shrink each stretchable sizer by an amount proportional to its\n // stretch factor. If a sizer reaches its min size it's marked as\n // done. The loop progresses in phases where each sizer is given\n // a chance to consume its fair share for the pass, regardless of\n // whether a sizer before it reached its limit. This continues\n // until the stretchable sizers or the free space is exhausted.\n let freeSpace = totalSize - space;\n while (stretchCount > 0 && freeSpace > nearZero) {\n let distSpace = freeSpace;\n let distStretch = totalStretch;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done || sizer.stretch === 0) {\n continue;\n }\n let amt = (sizer.stretch * distSpace) / distStretch;\n if (sizer.size - amt <= sizer.minSize) {\n freeSpace -= sizer.size - sizer.minSize;\n totalStretch -= sizer.stretch;\n sizer.size = sizer.minSize;\n sizer.done = true;\n notDoneCount--;\n stretchCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size -= amt;\n }\n }\n }\n // Distribute any remaining space evenly among the non-stretchable\n // sizers. This progresses in phases in the same manner as above.\n while (notDoneCount > 0 && freeSpace > nearZero) {\n let amt = freeSpace / notDoneCount;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done) {\n continue;\n }\n if (sizer.size - amt <= sizer.minSize) {\n freeSpace -= sizer.size - sizer.minSize;\n sizer.size = sizer.minSize;\n sizer.done = true;\n notDoneCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size -= amt;\n }\n }\n }\n }\n // Distribute positive delta space.\n else {\n // Expand each stretchable sizer by an amount proportional to its\n // stretch factor. If a sizer reaches its max size it's marked as\n // done. The loop progresses in phases where each sizer is given\n // a chance to consume its fair share for the pass, regardless of\n // whether a sizer before it reached its limit. This continues\n // until the stretchable sizers or the free space is exhausted.\n let freeSpace = space - totalSize;\n while (stretchCount > 0 && freeSpace > nearZero) {\n let distSpace = freeSpace;\n let distStretch = totalStretch;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done || sizer.stretch === 0) {\n continue;\n }\n let amt = (sizer.stretch * distSpace) / distStretch;\n if (sizer.size + amt >= sizer.maxSize) {\n freeSpace -= sizer.maxSize - sizer.size;\n totalStretch -= sizer.stretch;\n sizer.size = sizer.maxSize;\n sizer.done = true;\n notDoneCount--;\n stretchCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size += amt;\n }\n }\n }\n // Distribute any remaining space evenly among the non-stretchable\n // sizers. This progresses in phases in the same manner as above.\n while (notDoneCount > 0 && freeSpace > nearZero) {\n let amt = freeSpace / notDoneCount;\n for (let i = 0; i < count; ++i) {\n let sizer = sizers[i];\n if (sizer.done) {\n continue;\n }\n if (sizer.size + amt >= sizer.maxSize) {\n freeSpace -= sizer.maxSize - sizer.size;\n sizer.size = sizer.maxSize;\n sizer.done = true;\n notDoneCount--;\n }\n else {\n freeSpace -= amt;\n sizer.size += amt;\n }\n }\n }\n }\n // Indicate that the consumed space equals the available space.\n return 0;\n }\n BoxEngine.calc = calc;\n /**\n * Adjust a sizer by a delta and update its neighbors accordingly.\n *\n * @param sizers - The sizers which should be adjusted.\n *\n * @param index - The index of the sizer to grow.\n *\n * @param delta - The amount to adjust the sizer, positive or negative.\n *\n * #### Notes\n * This will adjust the indicated sizer by the specified amount, along\n * with the sizes of the appropriate neighbors, subject to the limits\n * specified by each of the sizers.\n *\n * This is useful when implementing box layouts where the boundaries\n * between the sizers are interactively adjustable by the user.\n */\n function adjust(sizers, index, delta) {\n // Bail early when there is nothing to do.\n if (sizers.length === 0 || delta === 0) {\n return;\n }\n // Dispatch to the proper implementation.\n if (delta > 0) {\n growSizer(sizers, index, delta);\n }\n else {\n shrinkSizer(sizers, index, -delta);\n }\n }\n BoxEngine.adjust = adjust;\n /**\n * Grow a sizer by a positive delta and adjust neighbors.\n */\n function growSizer(sizers, index, delta) {\n // Compute how much the items to the left can expand.\n let growLimit = 0;\n for (let i = 0; i <= index; ++i) {\n let sizer = sizers[i];\n growLimit += sizer.maxSize - sizer.size;\n }\n // Compute how much the items to the right can shrink.\n let shrinkLimit = 0;\n for (let i = index + 1, n = sizers.length; i < n; ++i) {\n let sizer = sizers[i];\n shrinkLimit += sizer.size - sizer.minSize;\n }\n // Clamp the delta adjustment to the limits.\n delta = Math.min(delta, growLimit, shrinkLimit);\n // Grow the sizers to the left by the delta.\n let grow = delta;\n for (let i = index; i >= 0 && grow > 0; --i) {\n let sizer = sizers[i];\n let limit = sizer.maxSize - sizer.size;\n if (limit >= grow) {\n sizer.sizeHint = sizer.size + grow;\n grow = 0;\n }\n else {\n sizer.sizeHint = sizer.size + limit;\n grow -= limit;\n }\n }\n // Shrink the sizers to the right by the delta.\n let shrink = delta;\n for (let i = index + 1, n = sizers.length; i < n && shrink > 0; ++i) {\n let sizer = sizers[i];\n let limit = sizer.size - sizer.minSize;\n if (limit >= shrink) {\n sizer.sizeHint = sizer.size - shrink;\n shrink = 0;\n }\n else {\n sizer.sizeHint = sizer.size - limit;\n shrink -= limit;\n }\n }\n }\n /**\n * Shrink a sizer by a positive delta and adjust neighbors.\n */\n function shrinkSizer(sizers, index, delta) {\n // Compute how much the items to the right can expand.\n let growLimit = 0;\n for (let i = index + 1, n = sizers.length; i < n; ++i) {\n let sizer = sizers[i];\n growLimit += sizer.maxSize - sizer.size;\n }\n // Compute how much the items to the left can shrink.\n let shrinkLimit = 0;\n for (let i = 0; i <= index; ++i) {\n let sizer = sizers[i];\n shrinkLimit += sizer.size - sizer.minSize;\n }\n // Clamp the delta adjustment to the limits.\n delta = Math.min(delta, growLimit, shrinkLimit);\n // Grow the sizers to the right by the delta.\n let grow = delta;\n for (let i = index + 1, n = sizers.length; i < n && grow > 0; ++i) {\n let sizer = sizers[i];\n let limit = sizer.maxSize - sizer.size;\n if (limit >= grow) {\n sizer.sizeHint = sizer.size + grow;\n grow = 0;\n }\n else {\n sizer.sizeHint = sizer.size + limit;\n grow -= limit;\n }\n }\n // Shrink the sizers to the left by the delta.\n let shrink = delta;\n for (let i = index; i >= 0 && shrink > 0; --i) {\n let sizer = sizers[i];\n let limit = sizer.size - sizer.minSize;\n if (limit >= shrink) {\n sizer.sizeHint = sizer.size - shrink;\n shrink = 0;\n }\n else {\n sizer.sizeHint = sizer.size - limit;\n shrink -= limit;\n }\n }\n }\n})(BoxEngine || (BoxEngine = {}));\n\n/**\n * An object which holds data related to an object's title.\n *\n * #### Notes\n * A title object is intended to hold the data necessary to display a\n * header for a particular object. A common example is the `TabPanel`,\n * which uses the widget title to populate the tab for a child widget.\n *\n * It is the responsibility of the owner to call the title disposal.\n */\nclass Title {\n /**\n * Construct a new title.\n *\n * @param options - The options for initializing the title.\n */\n constructor(options) {\n this._label = '';\n this._caption = '';\n this._mnemonic = -1;\n this._icon = undefined;\n this._iconClass = '';\n this._iconLabel = '';\n this._className = '';\n this._closable = false;\n this._changed = new Signal(this);\n this._isDisposed = false;\n this.owner = options.owner;\n if (options.label !== undefined) {\n this._label = options.label;\n }\n if (options.mnemonic !== undefined) {\n this._mnemonic = options.mnemonic;\n }\n if (options.icon !== undefined) {\n this._icon = options.icon;\n }\n if (options.iconClass !== undefined) {\n this._iconClass = options.iconClass;\n }\n if (options.iconLabel !== undefined) {\n this._iconLabel = options.iconLabel;\n }\n if (options.caption !== undefined) {\n this._caption = options.caption;\n }\n if (options.className !== undefined) {\n this._className = options.className;\n }\n if (options.closable !== undefined) {\n this._closable = options.closable;\n }\n this._dataset = options.dataset || {};\n }\n /**\n * A signal emitted when the state of the title changes.\n */\n get changed() {\n return this._changed;\n }\n /**\n * Get the label for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get label() {\n return this._label;\n }\n /**\n * Set the label for the title.\n */\n set label(value) {\n if (this._label === value) {\n return;\n }\n this._label = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the mnemonic index for the title.\n *\n * #### Notes\n * The default value is `-1`.\n */\n get mnemonic() {\n return this._mnemonic;\n }\n /**\n * Set the mnemonic index for the title.\n */\n set mnemonic(value) {\n if (this._mnemonic === value) {\n return;\n }\n this._mnemonic = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon renderer for the title.\n *\n * #### Notes\n * The default value is undefined.\n */\n get icon() {\n return this._icon;\n }\n /**\n * Set the icon renderer for the title.\n *\n * #### Notes\n * A renderer is an object that supplies a render and unrender function.\n */\n set icon(value) {\n if (this._icon === value) {\n return;\n }\n this._icon = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon class name for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get iconClass() {\n return this._iconClass;\n }\n /**\n * Set the icon class name for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set iconClass(value) {\n if (this._iconClass === value) {\n return;\n }\n this._iconClass = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the icon label for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get iconLabel() {\n return this._iconLabel;\n }\n /**\n * Set the icon label for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set iconLabel(value) {\n if (this._iconLabel === value) {\n return;\n }\n this._iconLabel = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the caption for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get caption() {\n return this._caption;\n }\n /**\n * Set the caption for the title.\n */\n set caption(value) {\n if (this._caption === value) {\n return;\n }\n this._caption = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the extra class name for the title.\n *\n * #### Notes\n * The default value is an empty string.\n */\n get className() {\n return this._className;\n }\n /**\n * Set the extra class name for the title.\n *\n * #### Notes\n * Multiple class names can be separated with whitespace.\n */\n set className(value) {\n if (this._className === value) {\n return;\n }\n this._className = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the closable state for the title.\n *\n * #### Notes\n * The default value is `false`.\n */\n get closable() {\n return this._closable;\n }\n /**\n * Set the closable state for the title.\n *\n * #### Notes\n * This controls the presence of a close icon when applicable.\n */\n set closable(value) {\n if (this._closable === value) {\n return;\n }\n this._closable = value;\n this._changed.emit(undefined);\n }\n /**\n * Get the dataset for the title.\n *\n * #### Notes\n * The default value is an empty dataset.\n */\n get dataset() {\n return this._dataset;\n }\n /**\n * Set the dataset for the title.\n *\n * #### Notes\n * This controls the data attributes when applicable.\n */\n set dataset(value) {\n if (this._dataset === value) {\n return;\n }\n this._dataset = value;\n this._changed.emit(undefined);\n }\n /**\n * Test whether the title has been disposed.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of the resources held by the title.\n *\n * #### Notes\n * It is the responsibility of the owner to call the title disposal.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n Signal.clearData(this);\n }\n}\n\n/**\n * The base class of the lumino widget hierarchy.\n *\n * #### Notes\n * This class will typically be subclassed in order to create a useful\n * widget. However, it can be used directly to host externally created\n * content.\n */\nclass Widget {\n /**\n * Construct a new widget.\n *\n * @param options - The options for initializing the widget.\n */\n constructor(options = {}) {\n this._flags = 0;\n this._layout = null;\n this._parent = null;\n this._disposed = new Signal(this);\n this._hiddenMode = Widget.HiddenMode.Display;\n this.node = Private$j.createNode(options);\n this.addClass('lm-Widget');\n }\n /**\n * Dispose of the widget and its descendant widgets.\n *\n * #### Notes\n * It is unsafe to use the widget after it has been disposed.\n *\n * All calls made to this method after the first are a no-op.\n */\n dispose() {\n // Do nothing if the widget is already disposed.\n if (this.isDisposed) {\n return;\n }\n // Set the disposed flag and emit the disposed signal.\n this.setFlag(Widget.Flag.IsDisposed);\n this._disposed.emit(undefined);\n // Remove or detach the widget if necessary.\n if (this.parent) {\n this.parent = null;\n }\n else if (this.isAttached) {\n Widget.detach(this);\n }\n // Dispose of the widget layout.\n if (this._layout) {\n this._layout.dispose();\n this._layout = null;\n }\n // Dispose the title\n this.title.dispose();\n // Clear the extra data associated with the widget.\n Signal.clearData(this);\n MessageLoop.clearData(this);\n AttachedProperty.clearData(this);\n }\n /**\n * A signal emitted when the widget is disposed.\n */\n get disposed() {\n return this._disposed;\n }\n /**\n * Test whether the widget has been disposed.\n */\n get isDisposed() {\n return this.testFlag(Widget.Flag.IsDisposed);\n }\n /**\n * Test whether the widget's node is attached to the DOM.\n */\n get isAttached() {\n return this.testFlag(Widget.Flag.IsAttached);\n }\n /**\n * Test whether the widget is explicitly hidden.\n */\n get isHidden() {\n return this.testFlag(Widget.Flag.IsHidden);\n }\n /**\n * Test whether the widget is visible.\n *\n * #### Notes\n * A widget is visible when it is attached to the DOM, is not\n * explicitly hidden, and has no explicitly hidden ancestors.\n */\n get isVisible() {\n return this.testFlag(Widget.Flag.IsVisible);\n }\n /**\n * The title object for the widget.\n *\n * #### Notes\n * The title object is used by some container widgets when displaying\n * the widget alongside some title, such as a tab panel or side bar.\n *\n * Since not all widgets will use the title, it is created on demand.\n *\n * The `owner` property of the title is set to this widget.\n */\n get title() {\n return Private$j.titleProperty.get(this);\n }\n /**\n * Get the id of the widget's DOM node.\n */\n get id() {\n return this.node.id;\n }\n /**\n * Set the id of the widget's DOM node.\n */\n set id(value) {\n this.node.id = value;\n }\n /**\n * The dataset for the widget's DOM node.\n */\n get dataset() {\n return this.node.dataset;\n }\n /**\n * Get the method for hiding the widget.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n /**\n * Set the method for hiding the widget.\n */\n set hiddenMode(value) {\n if (this._hiddenMode === value) {\n return;\n }\n if (this.isHidden) {\n // Reset styles set by previous mode.\n this._toggleHidden(false);\n }\n if (value == Widget.HiddenMode.Scale) {\n this.node.style.willChange = 'transform';\n }\n else {\n this.node.style.willChange = 'auto';\n }\n this._hiddenMode = value;\n if (this.isHidden) {\n // Set styles for new mode.\n this._toggleHidden(true);\n }\n }\n /**\n * Get the parent of the widget.\n */\n get parent() {\n return this._parent;\n }\n /**\n * Set the parent of the widget.\n *\n * #### Notes\n * Children are typically added to a widget by using a layout, which\n * means user code will not normally set the parent widget directly.\n *\n * The widget will be automatically removed from its old parent.\n *\n * This is a no-op if there is no effective parent change.\n */\n set parent(value) {\n if (this._parent === value) {\n return;\n }\n if (value && this.contains(value)) {\n throw new Error('Invalid parent widget.');\n }\n if (this._parent && !this._parent.isDisposed) {\n let msg = new Widget.ChildMessage('child-removed', this);\n MessageLoop.sendMessage(this._parent, msg);\n }\n this._parent = value;\n if (this._parent && !this._parent.isDisposed) {\n let msg = new Widget.ChildMessage('child-added', this);\n MessageLoop.sendMessage(this._parent, msg);\n }\n if (!this.isDisposed) {\n MessageLoop.sendMessage(this, Widget.Msg.ParentChanged);\n }\n }\n /**\n * Get the layout for the widget.\n */\n get layout() {\n return this._layout;\n }\n /**\n * Set the layout for the widget.\n *\n * #### Notes\n * The layout is single-use only. It cannot be changed after the\n * first assignment.\n *\n * The layout is disposed automatically when the widget is disposed.\n */\n set layout(value) {\n if (this._layout === value) {\n return;\n }\n if (this.testFlag(Widget.Flag.DisallowLayout)) {\n throw new Error('Cannot set widget layout.');\n }\n if (this._layout) {\n throw new Error('Cannot change widget layout.');\n }\n if (value.parent) {\n throw new Error('Cannot change layout parent.');\n }\n this._layout = value;\n value.parent = this;\n }\n /**\n * Create an iterator over the widget's children.\n *\n * @returns A new iterator over the children of the widget.\n *\n * #### Notes\n * The widget must have a populated layout in order to have children.\n *\n * If a layout is not installed, the returned iterator will be empty.\n */\n *children() {\n if (this._layout) {\n yield* this._layout;\n }\n }\n /**\n * Test whether a widget is a descendant of this widget.\n *\n * @param widget - The descendant widget of interest.\n *\n * @returns `true` if the widget is a descendant, `false` otherwise.\n */\n contains(widget) {\n for (let value = widget; value; value = value._parent) {\n if (value === this) {\n return true;\n }\n }\n return false;\n }\n /**\n * Test whether the widget's DOM node has the given class name.\n *\n * @param name - The class name of interest.\n *\n * @returns `true` if the node has the class, `false` otherwise.\n */\n hasClass(name) {\n return this.node.classList.contains(name);\n }\n /**\n * Add a class name to the widget's DOM node.\n *\n * @param name - The class name to add to the node.\n *\n * #### Notes\n * If the class name is already added to the node, this is a no-op.\n *\n * The class name must not contain whitespace.\n */\n addClass(name) {\n this.node.classList.add(name);\n }\n /**\n * Remove a class name from the widget's DOM node.\n *\n * @param name - The class name to remove from the node.\n *\n * #### Notes\n * If the class name is not yet added to the node, this is a no-op.\n *\n * The class name must not contain whitespace.\n */\n removeClass(name) {\n this.node.classList.remove(name);\n }\n /**\n * Toggle a class name on the widget's DOM node.\n *\n * @param name - The class name to toggle on the node.\n *\n * @param force - Whether to force add the class (`true`) or force\n * remove the class (`false`). If not provided, the presence of\n * the class will be toggled from its current state.\n *\n * @returns `true` if the class is now present, `false` otherwise.\n *\n * #### Notes\n * The class name must not contain whitespace.\n */\n toggleClass(name, force) {\n if (force === true) {\n this.node.classList.add(name);\n return true;\n }\n if (force === false) {\n this.node.classList.remove(name);\n return false;\n }\n return this.node.classList.toggle(name);\n }\n /**\n * Post an `'update-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n update() {\n MessageLoop.postMessage(this, Widget.Msg.UpdateRequest);\n }\n /**\n * Post a `'fit-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n fit() {\n MessageLoop.postMessage(this, Widget.Msg.FitRequest);\n }\n /**\n * Post an `'activate-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for posting the message.\n */\n activate() {\n MessageLoop.postMessage(this, Widget.Msg.ActivateRequest);\n }\n /**\n * Send a `'close-request'` message to the widget.\n *\n * #### Notes\n * This is a simple convenience method for sending the message.\n */\n close() {\n MessageLoop.sendMessage(this, Widget.Msg.CloseRequest);\n }\n /**\n * Show the widget and make it visible to its parent widget.\n *\n * #### Notes\n * This causes the {@link isHidden} property to be `false`.\n *\n * If the widget is not explicitly hidden, this is a no-op.\n */\n show() {\n if (!this.testFlag(Widget.Flag.IsHidden)) {\n return;\n }\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.BeforeShow);\n }\n this.clearFlag(Widget.Flag.IsHidden);\n this._toggleHidden(false);\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.AfterShow);\n }\n if (this.parent) {\n let msg = new Widget.ChildMessage('child-shown', this);\n MessageLoop.sendMessage(this.parent, msg);\n }\n }\n /**\n * Hide the widget and make it hidden to its parent widget.\n *\n * #### Notes\n * This causes the {@link isHidden} property to be `true`.\n *\n * If the widget is explicitly hidden, this is a no-op.\n */\n hide() {\n if (this.testFlag(Widget.Flag.IsHidden)) {\n return;\n }\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.BeforeHide);\n }\n this.setFlag(Widget.Flag.IsHidden);\n this._toggleHidden(true);\n if (this.isAttached && (!this.parent || this.parent.isVisible)) {\n MessageLoop.sendMessage(this, Widget.Msg.AfterHide);\n }\n if (this.parent) {\n let msg = new Widget.ChildMessage('child-hidden', this);\n MessageLoop.sendMessage(this.parent, msg);\n }\n }\n /**\n * Show or hide the widget according to a boolean value.\n *\n * @param hidden - `true` to hide the widget, or `false` to show it.\n *\n * #### Notes\n * This is a convenience method for `hide()` and `show()`.\n */\n setHidden(hidden) {\n if (hidden) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n /**\n * Test whether the given widget flag is set.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n testFlag(flag) {\n return (this._flags & flag) !== 0;\n }\n /**\n * Set the given widget flag.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n setFlag(flag) {\n this._flags |= flag;\n }\n /**\n * Clear the given widget flag.\n *\n * #### Notes\n * This will not typically be called directly by user code.\n */\n clearFlag(flag) {\n this._flags &= ~flag;\n }\n /**\n * Process a message sent to the widget.\n *\n * @param msg - The message sent to the widget.\n *\n * #### Notes\n * Subclasses may reimplement this method as needed.\n */\n processMessage(msg) {\n switch (msg.type) {\n case 'resize':\n this.notifyLayout(msg);\n this.onResize(msg);\n break;\n case 'update-request':\n this.notifyLayout(msg);\n this.onUpdateRequest(msg);\n break;\n case 'fit-request':\n this.notifyLayout(msg);\n this.onFitRequest(msg);\n break;\n case 'before-show':\n this.notifyLayout(msg);\n this.onBeforeShow(msg);\n break;\n case 'after-show':\n this.setFlag(Widget.Flag.IsVisible);\n this.notifyLayout(msg);\n this.onAfterShow(msg);\n break;\n case 'before-hide':\n this.notifyLayout(msg);\n this.onBeforeHide(msg);\n break;\n case 'after-hide':\n this.clearFlag(Widget.Flag.IsVisible);\n this.notifyLayout(msg);\n this.onAfterHide(msg);\n break;\n case 'before-attach':\n this.notifyLayout(msg);\n this.onBeforeAttach(msg);\n break;\n case 'after-attach':\n if (!this.isHidden && (!this.parent || this.parent.isVisible)) {\n this.setFlag(Widget.Flag.IsVisible);\n }\n this.setFlag(Widget.Flag.IsAttached);\n this.notifyLayout(msg);\n this.onAfterAttach(msg);\n break;\n case 'before-detach':\n this.notifyLayout(msg);\n this.onBeforeDetach(msg);\n break;\n case 'after-detach':\n this.clearFlag(Widget.Flag.IsVisible);\n this.clearFlag(Widget.Flag.IsAttached);\n this.notifyLayout(msg);\n this.onAfterDetach(msg);\n break;\n case 'activate-request':\n this.notifyLayout(msg);\n this.onActivateRequest(msg);\n break;\n case 'close-request':\n this.notifyLayout(msg);\n this.onCloseRequest(msg);\n break;\n case 'child-added':\n this.notifyLayout(msg);\n this.onChildAdded(msg);\n break;\n case 'child-removed':\n this.notifyLayout(msg);\n this.onChildRemoved(msg);\n break;\n default:\n this.notifyLayout(msg);\n break;\n }\n }\n /**\n * Invoke the message processing routine of the widget's layout.\n *\n * @param msg - The message to dispatch to the layout.\n *\n * #### Notes\n * This is a no-op if the widget does not have a layout.\n *\n * This will not typically be called directly by user code.\n */\n notifyLayout(msg) {\n if (this._layout) {\n this._layout.processParentMessage(msg);\n }\n }\n /**\n * A message handler invoked on a `'close-request'` message.\n *\n * #### Notes\n * The default implementation unparents or detaches the widget.\n */\n onCloseRequest(msg) {\n if (this.parent) {\n this.parent = null;\n }\n else if (this.isAttached) {\n Widget.detach(this);\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onResize(msg) { }\n /**\n * A message handler invoked on an `'update-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onUpdateRequest(msg) { }\n /**\n * A message handler invoked on a `'fit-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onFitRequest(msg) { }\n /**\n * A message handler invoked on an `'activate-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onActivateRequest(msg) { }\n /**\n * A message handler invoked on a `'before-show'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeShow(msg) { }\n /**\n * A message handler invoked on an `'after-show'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterShow(msg) { }\n /**\n * A message handler invoked on a `'before-hide'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeHide(msg) { }\n /**\n * A message handler invoked on an `'after-hide'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterHide(msg) { }\n /**\n * A message handler invoked on a `'before-attach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeAttach(msg) { }\n /**\n * A message handler invoked on an `'after-attach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterAttach(msg) { }\n /**\n * A message handler invoked on a `'before-detach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onBeforeDetach(msg) { }\n /**\n * A message handler invoked on an `'after-detach'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onAfterDetach(msg) { }\n /**\n * A message handler invoked on a `'child-added'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildAdded(msg) { }\n /**\n * A message handler invoked on a `'child-removed'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildRemoved(msg) { }\n _toggleHidden(hidden) {\n if (hidden) {\n switch (this._hiddenMode) {\n case Widget.HiddenMode.Display:\n this.addClass('lm-mod-hidden');\n break;\n case Widget.HiddenMode.Scale:\n this.node.style.transform = 'scale(0)';\n this.node.setAttribute('aria-hidden', 'true');\n break;\n case Widget.HiddenMode.ContentVisibility:\n // @ts-expect-error content-visibility unknown by DOM lib types\n this.node.style.contentVisibility = 'hidden';\n this.node.style.zIndex = '-1';\n break;\n }\n }\n else {\n switch (this._hiddenMode) {\n case Widget.HiddenMode.Display:\n this.removeClass('lm-mod-hidden');\n break;\n case Widget.HiddenMode.Scale:\n this.node.style.transform = '';\n this.node.removeAttribute('aria-hidden');\n break;\n case Widget.HiddenMode.ContentVisibility:\n // @ts-expect-error content-visibility unknown by DOM lib types\n this.node.style.contentVisibility = '';\n this.node.style.zIndex = '';\n break;\n }\n }\n }\n}\n/**\n * The namespace for the `Widget` class statics.\n */\n(function (Widget) {\n (function (HiddenMode) {\n /**\n * Set a `lm-mod-hidden` CSS class to hide the widget using `display:none`\n * CSS from the standard Lumino CSS.\n */\n HiddenMode[HiddenMode[\"Display\"] = 0] = \"Display\";\n /**\n * Hide the widget by setting the `transform` to `'scale(0)'`.\n */\n HiddenMode[HiddenMode[\"Scale\"] = 1] = \"Scale\";\n /**\n *Hide the widget by setting the `content-visibility` to `'hidden'`.\n */\n HiddenMode[HiddenMode[\"ContentVisibility\"] = 2] = \"ContentVisibility\";\n })(Widget.HiddenMode || (Widget.HiddenMode = {}));\n (function (Flag) {\n /**\n * The widget has been disposed.\n */\n Flag[Flag[\"IsDisposed\"] = 1] = \"IsDisposed\";\n /**\n * The widget is attached to the DOM.\n */\n Flag[Flag[\"IsAttached\"] = 2] = \"IsAttached\";\n /**\n * The widget is hidden.\n */\n Flag[Flag[\"IsHidden\"] = 4] = \"IsHidden\";\n /**\n * The widget is visible.\n */\n Flag[Flag[\"IsVisible\"] = 8] = \"IsVisible\";\n /**\n * A layout cannot be set on the widget.\n */\n Flag[Flag[\"DisallowLayout\"] = 16] = \"DisallowLayout\";\n })(Widget.Flag || (Widget.Flag = {}));\n (function (Msg) {\n /**\n * A singleton `'before-show'` message.\n *\n * #### Notes\n * This message is sent to a widget before it becomes visible.\n *\n * This message is **not** sent when the widget is being attached.\n */\n Msg.BeforeShow = new Message('before-show');\n /**\n * A singleton `'after-show'` message.\n *\n * #### Notes\n * This message is sent to a widget after it becomes visible.\n *\n * This message is **not** sent when the widget is being attached.\n */\n Msg.AfterShow = new Message('after-show');\n /**\n * A singleton `'before-hide'` message.\n *\n * #### Notes\n * This message is sent to a widget before it becomes not-visible.\n *\n * This message is **not** sent when the widget is being detached.\n */\n Msg.BeforeHide = new Message('before-hide');\n /**\n * A singleton `'after-hide'` message.\n *\n * #### Notes\n * This message is sent to a widget after it becomes not-visible.\n *\n * This message is **not** sent when the widget is being detached.\n */\n Msg.AfterHide = new Message('after-hide');\n /**\n * A singleton `'before-attach'` message.\n *\n * #### Notes\n * This message is sent to a widget before it is attached.\n */\n Msg.BeforeAttach = new Message('before-attach');\n /**\n * A singleton `'after-attach'` message.\n *\n * #### Notes\n * This message is sent to a widget after it is attached.\n */\n Msg.AfterAttach = new Message('after-attach');\n /**\n * A singleton `'before-detach'` message.\n *\n * #### Notes\n * This message is sent to a widget before it is detached.\n */\n Msg.BeforeDetach = new Message('before-detach');\n /**\n * A singleton `'after-detach'` message.\n *\n * #### Notes\n * This message is sent to a widget after it is detached.\n */\n Msg.AfterDetach = new Message('after-detach');\n /**\n * A singleton `'parent-changed'` message.\n *\n * #### Notes\n * This message is sent to a widget when its parent has changed.\n */\n Msg.ParentChanged = new Message('parent-changed');\n /**\n * A singleton conflatable `'update-request'` message.\n *\n * #### Notes\n * This message can be dispatched to supporting widgets in order to\n * update their content based on the current widget state. Not all\n * widgets will respond to messages of this type.\n *\n * For widgets with a layout, this message will inform the layout to\n * update the position and size of its child widgets.\n */\n Msg.UpdateRequest = new ConflatableMessage('update-request');\n /**\n * A singleton conflatable `'fit-request'` message.\n *\n * #### Notes\n * For widgets with a layout, this message will inform the layout to\n * recalculate its size constraints to fit the space requirements of\n * its child widgets, and to update their position and size. Not all\n * layouts will respond to messages of this type.\n */\n Msg.FitRequest = new ConflatableMessage('fit-request');\n /**\n * A singleton conflatable `'activate-request'` message.\n *\n * #### Notes\n * This message should be dispatched to a widget when it should\n * perform the actions necessary to activate the widget, which\n * may include focusing its node or descendant node.\n */\n Msg.ActivateRequest = new ConflatableMessage('activate-request');\n /**\n * A singleton conflatable `'close-request'` message.\n *\n * #### Notes\n * This message should be dispatched to a widget when it should close\n * and remove itself from the widget hierarchy.\n */\n Msg.CloseRequest = new ConflatableMessage('close-request');\n })(Widget.Msg || (Widget.Msg = {}));\n /**\n * A message class for child related messages.\n */\n class ChildMessage extends Message {\n /**\n * Construct a new child message.\n *\n * @param type - The message type.\n *\n * @param child - The child widget for the message.\n */\n constructor(type, child) {\n super(type);\n this.child = child;\n }\n }\n Widget.ChildMessage = ChildMessage;\n /**\n * A message class for `'resize'` messages.\n */\n class ResizeMessage extends Message {\n /**\n * Construct a new resize message.\n *\n * @param width - The **offset width** of the widget, or `-1` if\n * the width is not known.\n *\n * @param height - The **offset height** of the widget, or `-1` if\n * the height is not known.\n */\n constructor(width, height) {\n super('resize');\n this.width = width;\n this.height = height;\n }\n }\n Widget.ResizeMessage = ResizeMessage;\n /**\n * The namespace for the `ResizeMessage` class statics.\n */\n (function (ResizeMessage) {\n /**\n * A singleton `'resize'` message with an unknown size.\n */\n ResizeMessage.UnknownSize = new ResizeMessage(-1, -1);\n })(ResizeMessage = Widget.ResizeMessage || (Widget.ResizeMessage = {}));\n /**\n * Attach a widget to a host DOM node.\n *\n * @param widget - The widget of interest.\n *\n * @param host - The DOM node to use as the widget's host.\n *\n * @param ref - The child of `host` to use as the reference element.\n * If this is provided, the widget will be inserted before this\n * node in the host. The default is `null`, which will cause the\n * widget to be added as the last child of the host.\n *\n * #### Notes\n * This will throw an error if the widget is not a root widget, if\n * the widget is already attached, or if the host is not attached\n * to the DOM.\n */\n function attach(widget, host, ref = null) {\n if (widget.parent) {\n throw new Error('Cannot attach a child widget.');\n }\n if (widget.isAttached || widget.node.isConnected) {\n throw new Error('Widget is already attached.');\n }\n if (!host.isConnected) {\n throw new Error('Host is not attached.');\n }\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n host.insertBefore(widget.node, ref);\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n Widget.attach = attach;\n /**\n * Detach the widget from its host DOM node.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will throw an error if the widget is not a root widget,\n * or if the widget is not attached to the DOM.\n */\n function detach(widget) {\n if (widget.parent) {\n throw new Error('Cannot detach a child widget.');\n }\n if (!widget.isAttached || !widget.node.isConnected) {\n throw new Error('Widget is not attached.');\n }\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n widget.node.parentNode.removeChild(widget.node);\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n Widget.detach = detach;\n})(Widget || (Widget = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$j;\n(function (Private) {\n /**\n * An attached property for the widget title object.\n */\n Private.titleProperty = new AttachedProperty({\n name: 'title',\n create: owner => new Title({ owner })\n });\n /**\n * Create a DOM node for the given widget options.\n */\n function createNode(options) {\n return options.node || document.createElement(options.tag || 'div');\n }\n Private.createNode = createNode;\n})(Private$j || (Private$j = {}));\n\n/**\n * An abstract base class for creating lumino layouts.\n *\n * #### Notes\n * A layout is used to add widgets to a parent and to arrange those\n * widgets within the parent's DOM node.\n *\n * This class implements the base functionality which is required of\n * nearly all layouts. It must be subclassed in order to be useful.\n *\n * Notably, this class does not define a uniform interface for adding\n * widgets to the layout. A subclass should define that API in a way\n * which is meaningful for its intended use.\n */\nclass Layout {\n /**\n * Construct a new layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n this._disposed = false;\n this._parent = null;\n this._fitPolicy = options.fitPolicy || 'set-min-size';\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This should be reimplemented to clear and dispose of the widgets.\n *\n * All reimplementations should call the superclass method.\n *\n * This method is called automatically when the parent is disposed.\n */\n dispose() {\n this._parent = null;\n this._disposed = true;\n Signal.clearData(this);\n AttachedProperty.clearData(this);\n }\n /**\n * Test whether the layout is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Get the parent widget of the layout.\n */\n get parent() {\n return this._parent;\n }\n /**\n * Set the parent widget of the layout.\n *\n * #### Notes\n * This is set automatically when installing the layout on the parent\n * widget. The parent widget should not be set directly by user code.\n */\n set parent(value) {\n if (this._parent === value) {\n return;\n }\n if (this._parent) {\n throw new Error('Cannot change parent widget.');\n }\n if (value.layout !== this) {\n throw new Error('Invalid parent widget.');\n }\n this._parent = value;\n this.init();\n }\n /**\n * Get the fit policy for the layout.\n *\n * #### Notes\n * The fit policy controls the computed size constraints which are\n * applied to the parent widget by the layout.\n *\n * Some layout implementations may ignore the fit policy.\n */\n get fitPolicy() {\n return this._fitPolicy;\n }\n /**\n * Set the fit policy for the layout.\n *\n * #### Notes\n * The fit policy controls the computed size constraints which are\n * applied to the parent widget by the layout.\n *\n * Some layout implementations may ignore the fit policy.\n *\n * Changing the fit policy will clear the current size constraint\n * for the parent widget and then re-fit the parent.\n */\n set fitPolicy(value) {\n // Bail if the policy does not change\n if (this._fitPolicy === value) {\n return;\n }\n // Update the internal policy.\n this._fitPolicy = value;\n // Clear the size constraints and schedule a fit of the parent.\n if (this._parent) {\n let style = this._parent.node.style;\n style.minWidth = '';\n style.minHeight = '';\n style.maxWidth = '';\n style.maxHeight = '';\n this._parent.fit();\n }\n }\n /**\n * Process a message sent to the parent widget.\n *\n * @param msg - The message sent to the parent widget.\n *\n * #### Notes\n * This method is called by the parent widget to process a message.\n *\n * Subclasses may reimplement this method as needed.\n */\n processParentMessage(msg) {\n switch (msg.type) {\n case 'resize':\n this.onResize(msg);\n break;\n case 'update-request':\n this.onUpdateRequest(msg);\n break;\n case 'fit-request':\n this.onFitRequest(msg);\n break;\n case 'before-show':\n this.onBeforeShow(msg);\n break;\n case 'after-show':\n this.onAfterShow(msg);\n break;\n case 'before-hide':\n this.onBeforeHide(msg);\n break;\n case 'after-hide':\n this.onAfterHide(msg);\n break;\n case 'before-attach':\n this.onBeforeAttach(msg);\n break;\n case 'after-attach':\n this.onAfterAttach(msg);\n break;\n case 'before-detach':\n this.onBeforeDetach(msg);\n break;\n case 'after-detach':\n this.onAfterDetach(msg);\n break;\n case 'child-removed':\n this.onChildRemoved(msg);\n break;\n case 'child-shown':\n this.onChildShown(msg);\n break;\n case 'child-hidden':\n this.onChildHidden(msg);\n break;\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n *\n * #### Notes\n * This method is invoked immediately after the layout is installed\n * on the parent widget.\n *\n * The default implementation reparents all of the widgets to the\n * layout parent widget.\n *\n * Subclasses should reimplement this method and attach the child\n * widget nodes to the parent widget's node.\n */\n init() {\n for (const widget of this) {\n widget.parent = this.parent;\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n *\n * #### Notes\n * The layout should ensure that its widgets are resized according\n * to the specified layout space, and that they are sent a `'resize'`\n * message if appropriate.\n *\n * The default implementation of this method sends an `UnknownSize`\n * resize message to all widgets.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onResize(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n *\n * #### Notes\n * The layout should ensure that its widgets are resized according\n * to the available layout space, and that they are sent a `'resize'`\n * message if appropriate.\n *\n * The default implementation of this method sends an `UnknownSize`\n * resize message to all widgets.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onUpdateRequest(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, Widget.ResizeMessage.UnknownSize);\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeAttach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on an `'after-attach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterAttach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on a `'before-detach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeDetach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message\n * to all widgets. It assumes all widget nodes are attached to the\n * parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterDetach(msg) {\n for (const widget of this) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeShow(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on an `'after-show'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterShow(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on a `'before-hide'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onBeforeHide(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on an `'after-hide'` message.\n *\n * #### Notes\n * The default implementation of this method forwards the message to\n * all non-hidden widgets. It assumes all widget nodes are attached\n * to the parent widget node.\n *\n * This may be reimplemented by subclasses as needed.\n */\n onAfterHide(msg) {\n for (const widget of this) {\n if (!widget.isHidden) {\n MessageLoop.sendMessage(widget, msg);\n }\n }\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n *\n * #### Notes\n * This will remove the child widget from the layout.\n *\n * Subclasses should **not** typically reimplement this method.\n */\n onChildRemoved(msg) {\n this.removeWidget(msg.child);\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onFitRequest(msg) { }\n /**\n * A message handler invoked on a `'child-shown'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildShown(msg) { }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n *\n * #### Notes\n * The default implementation of this handler is a no-op.\n */\n onChildHidden(msg) { }\n}\n/**\n * The namespace for the `Layout` class statics.\n */\n(function (Layout) {\n /**\n * Get the horizontal alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The horizontal alignment for the widget.\n *\n * #### Notes\n * If the layout width allocated to a widget is larger than its max\n * width, the horizontal alignment controls how the widget is placed\n * within the extra horizontal space.\n *\n * If the allocated width is less than the widget's max width, the\n * horizontal alignment has no effect.\n *\n * Some layout implementations may ignore horizontal alignment.\n */\n function getHorizontalAlignment(widget) {\n return Private$i.horizontalAlignmentProperty.get(widget);\n }\n Layout.getHorizontalAlignment = getHorizontalAlignment;\n /**\n * Set the horizontal alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the horizontal alignment.\n *\n * #### Notes\n * If the layout width allocated to a widget is larger than its max\n * width, the horizontal alignment controls how the widget is placed\n * within the extra horizontal space.\n *\n * If the allocated width is less than the widget's max width, the\n * horizontal alignment has no effect.\n *\n * Some layout implementations may ignore horizontal alignment.\n *\n * Changing the horizontal alignment will post an `update-request`\n * message to widget's parent, provided the parent has a layout\n * installed.\n */\n function setHorizontalAlignment(widget, value) {\n Private$i.horizontalAlignmentProperty.set(widget, value);\n }\n Layout.setHorizontalAlignment = setHorizontalAlignment;\n /**\n * Get the vertical alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The vertical alignment for the widget.\n *\n * #### Notes\n * If the layout height allocated to a widget is larger than its max\n * height, the vertical alignment controls how the widget is placed\n * within the extra vertical space.\n *\n * If the allocated height is less than the widget's max height, the\n * vertical alignment has no effect.\n *\n * Some layout implementations may ignore vertical alignment.\n */\n function getVerticalAlignment(widget) {\n return Private$i.verticalAlignmentProperty.get(widget);\n }\n Layout.getVerticalAlignment = getVerticalAlignment;\n /**\n * Set the vertical alignment for a widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the vertical alignment.\n *\n * #### Notes\n * If the layout height allocated to a widget is larger than its max\n * height, the vertical alignment controls how the widget is placed\n * within the extra vertical space.\n *\n * If the allocated height is less than the widget's max height, the\n * vertical alignment has no effect.\n *\n * Some layout implementations may ignore vertical alignment.\n *\n * Changing the horizontal alignment will post an `update-request`\n * message to widget's parent, provided the parent has a layout\n * installed.\n */\n function setVerticalAlignment(widget, value) {\n Private$i.verticalAlignmentProperty.set(widget, value);\n }\n Layout.setVerticalAlignment = setVerticalAlignment;\n})(Layout || (Layout = {}));\n/**\n * An object which assists in the absolute layout of widgets.\n *\n * #### Notes\n * This class is useful when implementing a layout which arranges its\n * widgets using absolute positioning.\n *\n * This class is used by nearly all of the built-in lumino layouts.\n */\nclass LayoutItem {\n /**\n * Construct a new layout item.\n *\n * @param widget - The widget to be managed by the item.\n *\n * #### Notes\n * The widget will be set to absolute positioning.\n * The widget will use strict CSS containment.\n */\n constructor(widget) {\n this._top = NaN;\n this._left = NaN;\n this._width = NaN;\n this._height = NaN;\n this._minWidth = 0;\n this._minHeight = 0;\n this._maxWidth = Infinity;\n this._maxHeight = Infinity;\n this._disposed = false;\n this.widget = widget;\n this.widget.node.style.position = 'absolute';\n this.widget.node.style.contain = 'strict';\n }\n /**\n * Dispose of the the layout item.\n *\n * #### Notes\n * This will reset the positioning of the widget.\n */\n dispose() {\n // Do nothing if the item is already disposed.\n if (this._disposed) {\n return;\n }\n // Mark the item as disposed.\n this._disposed = true;\n // Reset the widget style.\n let style = this.widget.node.style;\n style.position = '';\n style.top = '';\n style.left = '';\n style.width = '';\n style.height = '';\n style.contain = '';\n }\n /**\n * The computed minimum width of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get minWidth() {\n return this._minWidth;\n }\n /**\n * The computed minimum height of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get minHeight() {\n return this._minHeight;\n }\n /**\n * The computed maximum width of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get maxWidth() {\n return this._maxWidth;\n }\n /**\n * The computed maximum height of the widget.\n *\n * #### Notes\n * This value can be updated by calling the `fit` method.\n */\n get maxHeight() {\n return this._maxHeight;\n }\n /**\n * Whether the layout item is disposed.\n */\n get isDisposed() {\n return this._disposed;\n }\n /**\n * Whether the managed widget is hidden.\n */\n get isHidden() {\n return this.widget.isHidden;\n }\n /**\n * Whether the managed widget is visible.\n */\n get isVisible() {\n return this.widget.isVisible;\n }\n /**\n * Whether the managed widget is attached.\n */\n get isAttached() {\n return this.widget.isAttached;\n }\n /**\n * Update the computed size limits of the managed widget.\n */\n fit() {\n let limits = ElementExt.sizeLimits(this.widget.node);\n this._minWidth = limits.minWidth;\n this._minHeight = limits.minHeight;\n this._maxWidth = limits.maxWidth;\n this._maxHeight = limits.maxHeight;\n }\n /**\n * Update the position and size of the managed widget.\n *\n * @param left - The left edge position of the layout box.\n *\n * @param top - The top edge position of the layout box.\n *\n * @param width - The width of the layout box.\n *\n * @param height - The height of the layout box.\n */\n update(left, top, width, height) {\n // Clamp the size to the computed size limits.\n let clampW = Math.max(this._minWidth, Math.min(width, this._maxWidth));\n let clampH = Math.max(this._minHeight, Math.min(height, this._maxHeight));\n // Adjust the left edge for the horizontal alignment, if needed.\n if (clampW < width) {\n switch (Layout.getHorizontalAlignment(this.widget)) {\n case 'left':\n break;\n case 'center':\n left += (width - clampW) / 2;\n break;\n case 'right':\n left += width - clampW;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Adjust the top edge for the vertical alignment, if needed.\n if (clampH < height) {\n switch (Layout.getVerticalAlignment(this.widget)) {\n case 'top':\n break;\n case 'center':\n top += (height - clampH) / 2;\n break;\n case 'bottom':\n top += height - clampH;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Set up the resize variables.\n let resized = false;\n let style = this.widget.node.style;\n // Update the top edge of the widget if needed.\n if (this._top !== top) {\n this._top = top;\n style.top = `${top}px`;\n }\n // Update the left edge of the widget if needed.\n if (this._left !== left) {\n this._left = left;\n style.left = `${left}px`;\n }\n // Update the width of the widget if needed.\n if (this._width !== clampW) {\n resized = true;\n this._width = clampW;\n style.width = `${clampW}px`;\n }\n // Update the height of the widget if needed.\n if (this._height !== clampH) {\n resized = true;\n this._height = clampH;\n style.height = `${clampH}px`;\n }\n // Send a resize message to the widget if needed.\n if (resized) {\n let msg = new Widget.ResizeMessage(clampW, clampH);\n MessageLoop.sendMessage(this.widget, msg);\n }\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$i;\n(function (Private) {\n /**\n * The attached property for a widget horizontal alignment.\n */\n Private.horizontalAlignmentProperty = new AttachedProperty({\n name: 'horizontalAlignment',\n create: () => 'center',\n changed: onAlignmentChanged\n });\n /**\n * The attached property for a widget vertical alignment.\n */\n Private.verticalAlignmentProperty = new AttachedProperty({\n name: 'verticalAlignment',\n create: () => 'top',\n changed: onAlignmentChanged\n });\n /**\n * The change handler for the attached alignment properties.\n */\n function onAlignmentChanged(child) {\n if (child.parent && child.parent.layout) {\n child.parent.update();\n }\n }\n})(Private$i || (Private$i = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation suitable for many use cases.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * layouts, but can also be used directly with standard CSS to layout a\n * collection of widgets.\n */\nclass PanelLayout extends Layout {\n constructor() {\n super(...arguments);\n this._widgets = [];\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This will clear and dispose all widgets in the layout.\n *\n * All reimplementations should call the superclass method.\n *\n * This method is called automatically when the parent is disposed.\n */\n dispose() {\n while (this._widgets.length > 0) {\n this._widgets.pop().dispose();\n }\n super.dispose();\n }\n /**\n * A read-only array of the widgets in the layout.\n */\n get widgets() {\n return this._widgets;\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n yield* this._widgets;\n }\n /**\n * Add a widget to the end of the layout.\n *\n * @param widget - The widget to add to the layout.\n *\n * #### Notes\n * If the widget is already contained in the layout, it will be moved.\n */\n addWidget(widget) {\n this.insertWidget(this._widgets.length, widget);\n }\n /**\n * Insert a widget into the layout at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into the layout.\n *\n * #### Notes\n * The index will be clamped to the bounds of the widgets.\n *\n * If the widget is already added to the layout, it will be moved.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n insertWidget(index, widget) {\n // Remove the widget from its current parent. This is a no-op\n // if the widget's parent is already the layout parent widget.\n widget.parent = this.parent;\n // Look up the current index of the widget.\n let i = this._widgets.indexOf(widget);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._widgets.length));\n // If the widget is not in the array, insert it.\n if (i === -1) {\n // Insert the widget into the array.\n ArrayExt.insert(this._widgets, j, widget);\n // If the layout is parented, attach the widget to the DOM.\n if (this.parent) {\n this.attachWidget(j, widget);\n }\n // There is nothing more to do.\n return;\n }\n // Otherwise, the widget exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._widgets.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return;\n }\n // Move the widget to the new location.\n ArrayExt.move(this._widgets, i, j);\n // If the layout is parented, move the widget in the DOM.\n if (this.parent) {\n this.moveWidget(i, j, widget);\n }\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n this.removeWidgetAt(this._widgets.indexOf(widget));\n }\n /**\n * Remove the widget at a given index from the layout.\n *\n * @param index - The index of the widget to remove.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n removeWidgetAt(index) {\n // Remove the widget from the array.\n let widget = ArrayExt.removeAt(this._widgets, index);\n // If the layout is parented, detach the widget from the DOM.\n if (widget && this.parent) {\n this.detachWidget(index, widget);\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n let index = 0;\n for (const widget of this) {\n this.attachWidget(index++, widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation adds the widgets's node to the parent's\n * node at the proper location, and sends the appropriate attach\n * messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is added to the parent's node.\n */\n attachWidget(index, widget) {\n // Look up the next sibling reference node.\n let ref = this.parent.node.children[index];\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Insert the widget's node before the sibling.\n this.parent.node.insertBefore(widget.node, ref);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation moves the widget's node to the proper\n * location in the parent's node and sends the appropriate attach and\n * detach messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is moved in the parent's node.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` and message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Look up the next sibling reference node.\n let ref = this.parent.node.children[toIndex];\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Insert the widget's node before the sibling.\n this.parent.node.insertBefore(widget.node, ref);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This method is called automatically by the panel layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation removes the widget's node from the\n * parent's node, and sends the appropriate detach messages to the\n * widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is removed from the parent's node.\n */\n detachWidget(index, widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n }\n}\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\nvar Utils;\n(function (Utils) {\n /**\n * Clamp a dimension value to an integer >= 0.\n */\n function clampDimension(value) {\n return Math.max(0, Math.floor(value));\n }\n Utils.clampDimension = clampDimension;\n})(Utils || (Utils = {}));\nvar Utils$1 = Utils;\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets into resizable sections.\n */\nclass SplitLayout extends PanelLayout {\n /**\n * Construct a new split layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options) {\n super();\n this.widgetOffset = 0;\n this._fixed = 0;\n this._spacing = 4;\n this._dirty = false;\n this._hasNormedSizes = false;\n this._sizers = [];\n this._items = [];\n this._handles = [];\n this._box = null;\n this._alignment = 'start';\n this._orientation = 'horizontal';\n this.renderer = options.renderer;\n if (options.orientation !== undefined) {\n this._orientation = options.orientation;\n }\n if (options.alignment !== undefined) {\n this._alignment = options.alignment;\n }\n if (options.spacing !== undefined) {\n this._spacing = Utils.clampDimension(options.spacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._sizers.length = 0;\n this._handles.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the layout orientation for the split layout.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the layout orientation for the split layout.\n */\n set orientation(value) {\n if (this._orientation === value) {\n return;\n }\n this._orientation = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['orientation'] = value;\n this.parent.fit();\n }\n /**\n * Get the content alignment for the split layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split layout.\n */\n get alignment() {\n return this._alignment;\n }\n /**\n * Set the content alignment for the split layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split layout.\n */\n set alignment(value) {\n if (this._alignment === value) {\n return;\n }\n this._alignment = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['alignment'] = value;\n this.parent.update();\n }\n /**\n * Get the inter-element spacing for the split layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the split layout.\n */\n set spacing(value) {\n value = Utils.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * A read-only array of the split handles in the layout.\n */\n get handles() {\n return this._handles;\n }\n /**\n * Get the absolute sizes of the widgets in the layout.\n *\n * @returns A new array of the absolute sizes of the widgets.\n *\n * This method **does not** measure the DOM nodes.\n */\n absoluteSizes() {\n return this._sizers.map(sizer => sizer.size);\n }\n /**\n * Get the relative sizes of the widgets in the layout.\n *\n * @returns A new array of the relative sizes of the widgets.\n *\n * #### Notes\n * The returned sizes reflect the sizes of the widgets normalized\n * relative to their siblings.\n *\n * This method **does not** measure the DOM nodes.\n */\n relativeSizes() {\n return Private$h.normalize(this._sizers.map(sizer => sizer.size));\n }\n /**\n * Set the relative sizes for the widgets in the layout.\n *\n * @param sizes - The relative sizes for the widgets in the panel.\n * @param update - Update the layout after setting relative sizes.\n * Default is True.\n *\n * #### Notes\n * Extra values are ignored, too few will yield an undefined layout.\n *\n * The actual geometry of the DOM nodes is updated asynchronously.\n */\n setRelativeSizes(sizes, update = true) {\n // Copy the sizes and pad with zeros as needed.\n let n = this._sizers.length;\n let temp = sizes.slice(0, n);\n while (temp.length < n) {\n temp.push(0);\n }\n // Normalize the padded sizes.\n let normed = Private$h.normalize(temp);\n // Apply the normalized sizes to the sizers.\n for (let i = 0; i < n; ++i) {\n let sizer = this._sizers[i];\n sizer.sizeHint = normed[i];\n sizer.size = normed[i];\n }\n // Set the flag indicating the sizes are normalized.\n this._hasNormedSizes = true;\n // Trigger an update of the parent widget.\n if (update && this.parent) {\n this.parent.update();\n }\n }\n /**\n * Move the offset position of a split handle.\n *\n * @param index - The index of the handle of the interest.\n *\n * @param position - The desired offset position of the handle.\n *\n * #### Notes\n * The position is relative to the offset parent.\n *\n * This will move the handle as close as possible to the desired\n * position. The sibling widgets will be adjusted as necessary.\n */\n moveHandle(index, position) {\n // Bail if the index is invalid or the handle is hidden.\n let handle = this._handles[index];\n if (!handle || handle.classList.contains('lm-mod-hidden')) {\n return;\n }\n // Compute the desired delta movement for the handle.\n let delta;\n if (this._orientation === 'horizontal') {\n delta = position - handle.offsetLeft;\n }\n else {\n delta = position - handle.offsetTop;\n }\n // Bail if there is no handle movement.\n if (delta === 0) {\n return;\n }\n // Prevent widget resizing unless needed.\n for (let sizer of this._sizers) {\n if (sizer.size > 0) {\n sizer.sizeHint = sizer.size;\n }\n }\n // Adjust the sizers to reflect the handle movement.\n BoxEngine.adjust(this._sizers, index, delta);\n // Update the layout of the widgets.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n this.parent.dataset['orientation'] = this.orientation;\n this.parent.dataset['alignment'] = this.alignment;\n super.init();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Create the item, handle, and sizer for the new widget.\n let item = new LayoutItem(widget);\n let handle = Private$h.createHandle(this.renderer);\n let average = Private$h.averageSize(this._sizers);\n let sizer = Private$h.createSizer(average);\n // Insert the item, handle, and sizer into the internal arrays.\n ArrayExt.insert(this._items, index, item);\n ArrayExt.insert(this._sizers, index, sizer);\n ArrayExt.insert(this._handles, index, handle);\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget and handle nodes to the parent.\n this.parent.node.appendChild(widget.node);\n this.parent.node.appendChild(handle);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the item, sizer, and handle for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n ArrayExt.move(this._sizers, fromIndex, toIndex);\n ArrayExt.move(this._handles, fromIndex, toIndex);\n // Post a fit request to the parent to show/hide last handle.\n this.parent.fit();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the item, handle, and sizer for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n let handle = ArrayExt.removeAt(this._handles, index);\n ArrayExt.removeAt(this._sizers, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget and handle nodes from the parent.\n this.parent.node.removeChild(widget.node);\n this.parent.node.removeChild(handle);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Update the item position.\n *\n * @param i Item index\n * @param isHorizontal Whether the layout is horizontal or not\n * @param left Left position in pixels\n * @param top Top position in pixels\n * @param height Item height\n * @param width Item width\n * @param size Item size\n */\n updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n const item = this._items[i];\n if (item.isHidden) {\n return;\n }\n // Fetch the style for the handle.\n let handleStyle = this._handles[i].style;\n // Update the widget and handle, and advance the relevant edge.\n if (isHorizontal) {\n left += this.widgetOffset;\n item.update(left, top, size, height);\n left += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${this._spacing}px`;\n handleStyle.height = `${height}px`;\n }\n else {\n top += this.widgetOffset;\n item.update(left, top, width, size);\n top += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${width}px`;\n handleStyle.height = `${this._spacing}px`;\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Update the handles and track the visible widget count.\n let nVisible = 0;\n let lastHandleIndex = -1;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n if (this._items[i].isHidden) {\n this._handles[i].classList.add('lm-mod-hidden');\n }\n else {\n this._handles[i].classList.remove('lm-mod-hidden');\n lastHandleIndex = i;\n nVisible++;\n }\n }\n // Hide the handle for the last visible widget.\n if (lastHandleIndex !== -1) {\n this._handles[lastHandleIndex].classList.add('lm-mod-hidden');\n }\n // Update the fixed space for the visible items.\n this._fixed =\n this._spacing * Math.max(0, nVisible - 1) +\n this.widgetOffset * this._items.length;\n // Setup the computed minimum size.\n let horz = this._orientation === 'horizontal';\n let minW = horz ? this._fixed : 0;\n let minH = horz ? 0 : this._fixed;\n // Update the sizers and computed size limits.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item and corresponding box sizer.\n let item = this._items[i];\n let sizer = this._sizers[i];\n // Prevent resizing unless necessary.\n if (sizer.size > 0) {\n sizer.sizeHint = sizer.size;\n }\n // If the item is hidden, it should consume zero size.\n if (item.isHidden) {\n sizer.minSize = 0;\n sizer.maxSize = 0;\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the stretch factor.\n sizer.stretch = SplitLayout.getStretch(item.widget);\n // Update the sizer limits and computed min size.\n if (horz) {\n sizer.minSize = item.minWidth;\n sizer.maxSize = item.maxWidth;\n minW += item.minWidth;\n minH = Math.max(minH, item.minHeight);\n }\n else {\n sizer.minSize = item.minHeight;\n sizer.maxSize = item.maxHeight;\n minH += item.minHeight;\n minW = Math.max(minW, item.minWidth);\n }\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0 && this.widgetOffset === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Set up the variables for justification and alignment offset.\n let extra = 0;\n let offset = 0;\n let horz = this._orientation === 'horizontal';\n if (nVisible > 0) {\n // Compute the adjusted layout space.\n let space;\n if (horz) {\n // left += this.widgetOffset;\n space = Math.max(0, width - this._fixed);\n }\n else {\n // top += this.widgetOffset;\n space = Math.max(0, height - this._fixed);\n }\n // Scale the size hints if they are normalized.\n if (this._hasNormedSizes) {\n for (let sizer of this._sizers) {\n sizer.sizeHint *= space;\n }\n this._hasNormedSizes = false;\n }\n // Distribute the layout space to the box sizers.\n let delta = BoxEngine.calc(this._sizers, space);\n // Account for alignment if there is extra layout space.\n if (delta > 0) {\n switch (this._alignment) {\n case 'start':\n break;\n case 'center':\n extra = 0;\n offset = delta / 2;\n break;\n case 'end':\n extra = 0;\n offset = delta;\n break;\n case 'justify':\n extra = delta / nVisible;\n offset = 0;\n break;\n default:\n throw 'unreachable';\n }\n }\n }\n // Layout the items using the computed box sizes.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n const item = this._items[i];\n // Fetch the computed size for the widget.\n const size = item.isHidden ? 0 : this._sizers[i].size + extra;\n this.updateItemPosition(i, horz, horz ? left + offset : left, horz ? top : top + offset, height, width, size);\n const fullOffset = this.widgetOffset +\n (this._handles[i].classList.contains('lm-mod-hidden')\n ? 0\n : this._spacing);\n if (horz) {\n left += size + fullOffset;\n }\n else {\n top += size + fullOffset;\n }\n }\n }\n}\n/**\n * The namespace for the `SplitLayout` class statics.\n */\n(function (SplitLayout) {\n /**\n * Get the split layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The split layout stretch factor for the widget.\n */\n function getStretch(widget) {\n return Private$h.stretchProperty.get(widget);\n }\n SplitLayout.getStretch = getStretch;\n /**\n * Set the split layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n Private$h.stretchProperty.set(widget, value);\n }\n SplitLayout.setStretch = setStretch;\n})(SplitLayout || (SplitLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$h;\n(function (Private) {\n /**\n * The property descriptor for a widget stretch factor.\n */\n Private.stretchProperty = new AttachedProperty({\n name: 'stretch',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * Create a new box sizer with the given size hint.\n */\n function createSizer(size) {\n let sizer = new BoxSizer();\n sizer.sizeHint = Math.floor(size);\n return sizer;\n }\n Private.createSizer = createSizer;\n /**\n * Create a new split handle node using the given renderer.\n */\n function createHandle(renderer) {\n let handle = renderer.createHandle();\n handle.style.position = 'absolute';\n // Do not use size containment to allow the handle to fill the available space\n handle.style.contain = 'style';\n return handle;\n }\n Private.createHandle = createHandle;\n /**\n * Compute the average size of an array of box sizers.\n */\n function averageSize(sizers) {\n return sizers.reduce((v, s) => v + s.size, 0) / sizers.length || 0;\n }\n Private.averageSize = averageSize;\n /**\n * Normalize an array of values.\n */\n function normalize(values) {\n let n = values.length;\n if (n === 0) {\n return [];\n }\n let sum = values.reduce((a, b) => a + Math.abs(b), 0);\n return sum === 0 ? values.map(v => 1 / n) : values.map(v => v / sum);\n }\n Private.normalize = normalize;\n /**\n * The change handler for the attached sizing properties.\n */\n function onChildSizingChanged(child) {\n if (child.parent && child.parent.layout instanceof SplitLayout) {\n child.parent.fit();\n }\n }\n})(Private$h || (Private$h = {}));\n\n/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n/**\n * A layout which arranges its widgets into collapsible resizable sections.\n */\nclass AccordionLayout extends SplitLayout {\n /**\n * Construct a new accordion layout.\n *\n * @param options - The options for initializing the layout.\n *\n * #### Notes\n * The default orientation will be vertical.\n *\n * Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n */\n constructor(options) {\n super({ ...options, orientation: options.orientation || 'vertical' });\n this._titles = [];\n this.titleSpace = options.titleSpace || 22;\n }\n /**\n * The section title height or width depending on the orientation.\n */\n get titleSpace() {\n return this.widgetOffset;\n }\n set titleSpace(value) {\n value = Utils$1.clampDimension(value);\n if (this.widgetOffset === value) {\n return;\n }\n this.widgetOffset = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * A read-only array of the section titles in the panel.\n */\n get titles() {\n return this._titles;\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n // Clear the layout state.\n this._titles.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n updateTitle(index, widget) {\n const oldTitle = this._titles[index];\n const expanded = oldTitle.classList.contains('lm-mod-expanded');\n const newTitle = Private$g.createTitle(this.renderer, widget.title, expanded);\n this._titles[index] = newTitle;\n // Add the title node to the parent before the widget.\n this.parent.node.replaceChild(newTitle, oldTitle);\n }\n /**\n * Insert a widget into the layout at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into the layout.\n *\n * #### Notes\n * The index will be clamped to the bounds of the widgets.\n *\n * If the widget is already added to the layout, it will be moved.\n *\n * #### Undefined Behavior\n * An `index` which is non-integral.\n */\n insertWidget(index, widget) {\n if (!widget.id) {\n widget.id = `id-${UUID.uuid4()}`;\n }\n super.insertWidget(index, widget);\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n */\n attachWidget(index, widget) {\n const title = Private$g.createTitle(this.renderer, widget.title);\n ArrayExt.insert(this._titles, index, title);\n // Add the title node to the parent before the widget.\n this.parent.node.appendChild(title);\n widget.node.setAttribute('role', 'region');\n widget.node.setAttribute('aria-labelledby', title.id);\n super.attachWidget(index, widget);\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n */\n moveWidget(fromIndex, toIndex, widget) {\n ArrayExt.move(this._titles, fromIndex, toIndex);\n super.moveWidget(fromIndex, toIndex, widget);\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n const title = ArrayExt.removeAt(this._titles, index);\n this.parent.node.removeChild(title);\n super.detachWidget(index, widget);\n }\n /**\n * Update the item position.\n *\n * @param i Item index\n * @param isHorizontal Whether the layout is horizontal or not\n * @param left Left position in pixels\n * @param top Top position in pixels\n * @param height Item height\n * @param width Item width\n * @param size Item size\n */\n updateItemPosition(i, isHorizontal, left, top, height, width, size) {\n const titleStyle = this._titles[i].style;\n // Titles must be rotated for horizontal accordion panel using CSS: see accordionpanel.css\n titleStyle.top = `${top}px`;\n titleStyle.left = `${left}px`;\n titleStyle.height = `${this.widgetOffset}px`;\n if (isHorizontal) {\n titleStyle.width = `${height}px`;\n }\n else {\n titleStyle.width = `${width}px`;\n }\n super.updateItemPosition(i, isHorizontal, left, top, height, width, size);\n }\n}\nvar Private$g;\n(function (Private) {\n /**\n * Create the title HTML element.\n *\n * @param renderer Accordion renderer\n * @param data Widget title\n * @returns Title HTML element\n */\n function createTitle(renderer, data, expanded = true) {\n const title = renderer.createSectionTitle(data);\n title.style.position = 'absolute';\n title.style.contain = 'strict';\n title.setAttribute('aria-label', `${data.label} Section`);\n title.setAttribute('aria-expanded', expanded ? 'true' : 'false');\n title.setAttribute('aria-controls', data.owner.id);\n if (expanded) {\n title.classList.add('lm-mod-expanded');\n }\n return title;\n }\n Private.createTitle = createTitle;\n})(Private$g || (Private$g = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A simple and convenient panel widget class.\n *\n * #### Notes\n * This class is suitable as a base class for implementing a variety of\n * convenience panel widgets, but can also be used directly with CSS to\n * arrange a collection of widgets.\n *\n * This class provides a convenience wrapper around a {@link PanelLayout}.\n */\nclass Panel extends Widget {\n /**\n * Construct a new panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super();\n this.addClass('lm-Panel');\n this.layout = Private$f.createLayout(options);\n }\n /**\n * A read-only array of the widgets in the panel.\n */\n get widgets() {\n return this.layout.widgets;\n }\n /**\n * Add a widget to the end of the panel.\n *\n * @param widget - The widget to add to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n addWidget(widget) {\n this.layout.addWidget(widget);\n }\n /**\n * Insert a widget at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n insertWidget(index, widget) {\n this.layout.insertWidget(index, widget);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$f;\n(function (Private) {\n /**\n * Create a panel layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new PanelLayout();\n }\n Private.createLayout = createLayout;\n})(Private$f || (Private$f = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets into resizable sections.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link SplitLayout}.\n */\nclass SplitPanel extends Panel {\n /**\n * Construct a new split panel.\n *\n * @param options - The options for initializing the split panel.\n */\n constructor(options = {}) {\n super({ layout: Private$e.createLayout(options) });\n this._handleMoved = new Signal(this);\n this._pressData = null;\n this.addClass('lm-SplitPanel');\n }\n /**\n * Dispose of the resources held by the panel.\n */\n dispose() {\n this._releaseMouse();\n super.dispose();\n }\n /**\n * Get the layout orientation for the split panel.\n */\n get orientation() {\n return this.layout.orientation;\n }\n /**\n * Set the layout orientation for the split panel.\n */\n set orientation(value) {\n this.layout.orientation = value;\n }\n /**\n * Get the content alignment for the split panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split panel.\n */\n get alignment() {\n return this.layout.alignment;\n }\n /**\n * Set the content alignment for the split panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire split panel.\n */\n set alignment(value) {\n this.layout.alignment = value;\n }\n /**\n * Get the inter-element spacing for the split panel.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the inter-element spacing for the split panel.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * The renderer used by the split panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * A signal emitted when a split handle has moved.\n */\n get handleMoved() {\n return this._handleMoved;\n }\n /**\n * A read-only array of the split handles in the panel.\n */\n get handles() {\n return this.layout.handles;\n }\n /**\n * Get the relative sizes of the widgets in the panel.\n *\n * @returns A new array of the relative sizes of the widgets.\n *\n * #### Notes\n * The returned sizes reflect the sizes of the widgets normalized\n * relative to their siblings.\n *\n * This method **does not** measure the DOM nodes.\n */\n relativeSizes() {\n return this.layout.relativeSizes();\n }\n /**\n * Set the relative sizes for the widgets in the panel.\n *\n * @param sizes - The relative sizes for the widgets in the panel.\n * @param update - Update the layout after setting relative sizes.\n * Default is True.\n *\n * #### Notes\n * Extra values are ignored, too few will yield an undefined layout.\n *\n * The actual geometry of the DOM nodes is updated asynchronously.\n */\n setRelativeSizes(sizes, update = true) {\n this.layout.setRelativeSizes(sizes, update);\n }\n /**\n * Handle the DOM events for the split panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('pointerdown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('pointerdown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-SplitPanel-child');\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-SplitPanel-child');\n this._releaseMouse();\n }\n /**\n * Handle the `'keydown'` event for the split panel.\n */\n _evtKeyDown(event) {\n // Stop input events during drag.\n if (this._pressData) {\n event.preventDefault();\n event.stopPropagation();\n }\n // Release the mouse if `Escape` is pressed.\n if (event.keyCode === 27) {\n this._releaseMouse();\n }\n }\n /**\n * Handle the `'pointerdown'` event for the split panel.\n */\n _evtPointerDown(event) {\n // Do nothing if the primary button is not pressed.\n if (event.button !== 0) {\n return;\n }\n // Find the handle which contains the target, if any.\n let layout = this.layout;\n let index = ArrayExt.findFirstIndex(layout.handles, handle => {\n return handle.contains(event.target);\n });\n // Bail early if the mouse press was not on a handle.\n if (index === -1) {\n return;\n }\n // Stop the event when a split handle is pressed.\n event.preventDefault();\n event.stopPropagation();\n // Add the extra document listeners.\n document.addEventListener('pointerup', this, true);\n document.addEventListener('pointermove', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('contextmenu', this, true);\n // Compute the offset delta for the handle press.\n let delta;\n let handle = layout.handles[index];\n let rect = handle.getBoundingClientRect();\n if (layout.orientation === 'horizontal') {\n delta = event.clientX - rect.left;\n }\n else {\n delta = event.clientY - rect.top;\n }\n // Override the cursor and store the press data.\n let style = window.getComputedStyle(handle);\n let override = Drag.overrideCursor(style.cursor);\n this._pressData = { index, delta, override };\n }\n /**\n * Handle the `'pointermove'` event for the split panel.\n */\n _evtPointerMove(event) {\n // Stop the event when dragging a split handle.\n event.preventDefault();\n event.stopPropagation();\n // Compute the desired offset position for the handle.\n let pos;\n let layout = this.layout;\n let rect = this.node.getBoundingClientRect();\n if (layout.orientation === 'horizontal') {\n pos = event.clientX - rect.left - this._pressData.delta;\n }\n else {\n pos = event.clientY - rect.top - this._pressData.delta;\n }\n // Move the handle as close to the desired position as possible.\n layout.moveHandle(this._pressData.index, pos);\n }\n /**\n * Handle the `'pointerup'` event for the split panel.\n */\n _evtPointerUp(event) {\n // Do nothing if the primary button is not released.\n if (event.button !== 0) {\n return;\n }\n // Stop the event when releasing a handle.\n event.preventDefault();\n event.stopPropagation();\n // Finalize the mouse release.\n this._releaseMouse();\n }\n /**\n * Release the mouse grab for the split panel.\n */\n _releaseMouse() {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Clear the override cursor.\n this._pressData.override.dispose();\n this._pressData = null;\n // Emit the handle moved signal.\n this._handleMoved.emit();\n // Remove the extra document listeners.\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('pointerup', this, true);\n document.removeEventListener('pointermove', this, true);\n document.removeEventListener('contextmenu', this, true);\n }\n}\n/**\n * The namespace for the `SplitPanel` class statics.\n */\n(function (SplitPanel) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Create a new handle for use with a split panel.\n *\n * @returns A new handle element for a split panel.\n */\n createHandle() {\n let handle = document.createElement('div');\n handle.className = 'lm-SplitPanel-handle';\n return handle;\n }\n }\n SplitPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n SplitPanel.defaultRenderer = new Renderer();\n /**\n * Get the split panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The split panel stretch factor for the widget.\n */\n function getStretch(widget) {\n return SplitLayout.getStretch(widget);\n }\n SplitPanel.getStretch = getStretch;\n /**\n * Set the split panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n SplitLayout.setStretch(widget, value);\n }\n SplitPanel.setStretch = setStretch;\n})(SplitPanel || (SplitPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$e;\n(function (Private) {\n /**\n * Create a split layout for the given panel options.\n */\n function createLayout(options) {\n return (options.layout ||\n new SplitLayout({\n renderer: options.renderer || SplitPanel.defaultRenderer,\n orientation: options.orientation,\n alignment: options.alignment,\n spacing: options.spacing\n }));\n }\n Private.createLayout = createLayout;\n})(Private$e || (Private$e = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/**\n * A panel which arranges its widgets into resizable sections separated by a title widget.\n *\n * #### Notes\n * This class provides a convenience wrapper around {@link AccordionLayout}.\n */\nclass AccordionPanel extends SplitPanel {\n /**\n * Construct a new accordion panel.\n *\n * @param options - The options for initializing the accordion panel.\n */\n constructor(options = {}) {\n super({ ...options, layout: Private$d.createLayout(options) });\n this._widgetSizesCache = new WeakMap();\n this._expansionToggled = new Signal(this);\n this.addClass('lm-AccordionPanel');\n }\n /**\n * The renderer used by the accordion panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * The section title space.\n *\n * This is the height if the panel is vertical and the width if it is\n * horizontal.\n */\n get titleSpace() {\n return this.layout.titleSpace;\n }\n set titleSpace(value) {\n this.layout.titleSpace = value;\n }\n /**\n * A read-only array of the section titles in the panel.\n */\n get titles() {\n return this.layout.titles;\n }\n /**\n * A signal emitted when a widget of the AccordionPanel is collapsed or expanded.\n */\n get expansionToggled() {\n return this._expansionToggled;\n }\n /**\n * Add a widget to the end of the panel.\n *\n * @param widget - The widget to add to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n addWidget(widget) {\n super.addWidget(widget);\n widget.title.changed.connect(this._onTitleChanged, this);\n }\n /**\n * Collapse the widget at position `index`.\n *\n * #### Notes\n * If no widget is found for `index`, this will bail.\n *\n * @param index Widget index\n */\n collapse(index) {\n const widget = this.layout.widgets[index];\n if (widget && !widget.isHidden) {\n this._toggleExpansion(index);\n }\n }\n /**\n * Expand the widget at position `index`.\n *\n * #### Notes\n * If no widget is found for `index`, this will bail.\n *\n * @param index Widget index\n */\n expand(index) {\n const widget = this.layout.widgets[index];\n if (widget && widget.isHidden) {\n this._toggleExpansion(index);\n }\n }\n /**\n * Insert a widget at the specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n */\n insertWidget(index, widget) {\n super.insertWidget(index, widget);\n widget.title.changed.connect(this._onTitleChanged, this);\n }\n /**\n * Handle the DOM events for the accordion panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n super.handleEvent(event);\n switch (event.type) {\n case 'click':\n this._evtClick(event);\n break;\n case 'keydown':\n this._eventKeyDown(event);\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('click', this);\n this.node.addEventListener('keydown', this);\n super.onBeforeAttach(msg);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n super.onAfterDetach(msg);\n this.node.removeEventListener('click', this);\n this.node.removeEventListener('keydown', this);\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged(sender) {\n const index = ArrayExt.findFirstIndex(this.widgets, widget => {\n return widget.contains(sender.owner);\n });\n if (index >= 0) {\n this.layout.updateTitle(index, sender.owner);\n this.update();\n }\n }\n /**\n * Compute the size of widgets in this panel on the title click event.\n * On closing, the size of the widget is cached and we will try to expand\n * the last opened widget.\n * On opening, we will use the cached size if it is available to restore the\n * widget.\n * In both cases, if we can not compute the size of widgets, we will let\n * `SplitLayout` decide.\n *\n * @param index - The index of widget to be opened of closed\n *\n * @returns Relative size of widgets in this panel, if this size can\n * not be computed, return `undefined`\n */\n _computeWidgetSize(index) {\n const layout = this.layout;\n const widget = layout.widgets[index];\n if (!widget) {\n return undefined;\n }\n const isHidden = widget.isHidden;\n const widgetSizes = layout.absoluteSizes();\n const delta = (isHidden ? -1 : 1) * this.spacing;\n const totalSize = widgetSizes.reduce((prev, curr) => prev + curr);\n let newSize = [...widgetSizes];\n if (!isHidden) {\n // Hide the widget\n const currentSize = widgetSizes[index];\n this._widgetSizesCache.set(widget, currentSize);\n newSize[index] = 0;\n const widgetToCollapse = newSize.map(sz => sz > 0).lastIndexOf(true);\n if (widgetToCollapse === -1) {\n // All widget are closed, let the `SplitLayout` compute widget sizes.\n return undefined;\n }\n newSize[widgetToCollapse] =\n widgetSizes[widgetToCollapse] + currentSize + delta;\n }\n else {\n // Show the widget\n const previousSize = this._widgetSizesCache.get(widget);\n if (!previousSize) {\n // Previous size is unavailable, let the `SplitLayout` compute widget sizes.\n return undefined;\n }\n newSize[index] += previousSize;\n const widgetToCollapse = newSize\n .map(sz => sz - previousSize > 0)\n .lastIndexOf(true);\n if (widgetToCollapse === -1) {\n // Can not reduce the size of one widget, reduce all opened widgets\n // proportionally with its size.\n newSize.forEach((_, idx) => {\n if (idx !== index) {\n newSize[idx] -=\n (widgetSizes[idx] / totalSize) * (previousSize - delta);\n }\n });\n }\n else {\n newSize[widgetToCollapse] -= previousSize - delta;\n }\n }\n return newSize.map(sz => sz / (totalSize + delta));\n }\n /**\n * Handle the `'click'` event for the accordion panel\n */\n _evtClick(event) {\n const target = event.target;\n if (target) {\n const index = ArrayExt.findFirstIndex(this.titles, title => {\n return title.contains(target);\n });\n if (index >= 0) {\n event.preventDefault();\n event.stopPropagation();\n this._toggleExpansion(index);\n }\n }\n }\n /**\n * Handle the `'keydown'` event for the accordion panel.\n */\n _eventKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n const target = event.target;\n let handled = false;\n if (target) {\n const index = ArrayExt.findFirstIndex(this.titles, title => {\n return title.contains(target);\n });\n if (index >= 0) {\n const keyCode = event.keyCode.toString();\n // If Space or Enter is pressed on title, emulate click event\n if (event.key.match(/Space|Enter/) || keyCode.match(/13|32/)) {\n target.click();\n handled = true;\n }\n else if (this.orientation === 'horizontal'\n ? event.key.match(/ArrowLeft|ArrowRight/) || keyCode.match(/37|39/)\n : event.key.match(/ArrowUp|ArrowDown/) || keyCode.match(/38|40/)) {\n // If Up or Down (for vertical) / Left or Right (for horizontal) is pressed on title, loop on titles\n const direction = event.key.match(/ArrowLeft|ArrowUp/) || keyCode.match(/37|38/)\n ? -1\n : 1;\n const length = this.titles.length;\n const newIndex = (index + length + direction) % length;\n this.titles[newIndex].focus();\n handled = true;\n }\n else if (event.key === 'End' || keyCode === '35') {\n // If End is pressed on title, focus on the last title\n this.titles[this.titles.length - 1].focus();\n handled = true;\n }\n else if (event.key === 'Home' || keyCode === '36') {\n // If Home is pressed on title, focus on the first title\n this.titles[0].focus();\n handled = true;\n }\n }\n if (handled) {\n event.preventDefault();\n }\n }\n }\n _toggleExpansion(index) {\n const title = this.titles[index];\n const widget = this.layout.widgets[index];\n const newSize = this._computeWidgetSize(index);\n if (newSize) {\n this.setRelativeSizes(newSize, false);\n }\n if (widget.isHidden) {\n title.classList.add('lm-mod-expanded');\n title.setAttribute('aria-expanded', 'true');\n widget.show();\n }\n else {\n title.classList.remove('lm-mod-expanded');\n title.setAttribute('aria-expanded', 'false');\n widget.hide();\n }\n // Emit the expansion state signal.\n this._expansionToggled.emit(index);\n }\n}\n/**\n * The namespace for the `AccordionPanel` class statics.\n */\n(function (AccordionPanel) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer extends SplitPanel.Renderer {\n constructor() {\n super();\n /**\n * A selector which matches any title node in the accordion.\n */\n this.titleClassName = 'lm-AccordionPanel-title';\n this._titleID = 0;\n this._titleKeys = new WeakMap();\n this._uuid = ++Renderer._nInstance;\n }\n /**\n * Render the collapse indicator for a section title.\n *\n * @param data - The data to use for rendering the section title.\n *\n * @returns A element representing the collapse indicator.\n */\n createCollapseIcon(data) {\n return document.createElement('span');\n }\n /**\n * Render the element for a section title.\n *\n * @param data - The data to use for rendering the section title.\n *\n * @returns A element representing the section title.\n */\n createSectionTitle(data) {\n const handle = document.createElement('h3');\n handle.setAttribute('tabindex', '0');\n handle.id = this.createTitleKey(data);\n handle.className = this.titleClassName;\n for (const aData in data.dataset) {\n handle.dataset[aData] = data.dataset[aData];\n }\n const collapser = handle.appendChild(this.createCollapseIcon(data));\n collapser.className = 'lm-AccordionPanel-titleCollapser';\n const label = handle.appendChild(document.createElement('span'));\n label.className = 'lm-AccordionPanel-titleLabel';\n label.textContent = data.label;\n label.title = data.caption || data.label;\n return handle;\n }\n /**\n * Create a unique render key for the title.\n *\n * @param data - The data to use for the title.\n *\n * @returns The unique render key for the title.\n *\n * #### Notes\n * This method caches the key against the section title the first time\n * the key is generated.\n */\n createTitleKey(data) {\n let key = this._titleKeys.get(data);\n if (key === undefined) {\n key = `title-key-${this._uuid}-${this._titleID++}`;\n this._titleKeys.set(data, key);\n }\n return key;\n }\n }\n Renderer._nInstance = 0;\n AccordionPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n AccordionPanel.defaultRenderer = new Renderer();\n})(AccordionPanel || (AccordionPanel = {}));\nvar Private$d;\n(function (Private) {\n /**\n * Create an accordion layout for the given panel options.\n *\n * @param options Panel options\n * @returns Panel layout\n */\n function createLayout(options) {\n return (options.layout ||\n new AccordionLayout({\n renderer: options.renderer || AccordionPanel.defaultRenderer,\n orientation: options.orientation,\n alignment: options.alignment,\n spacing: options.spacing,\n titleSpace: options.titleSpace\n }));\n }\n Private.createLayout = createLayout;\n})(Private$d || (Private$d = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a single row or column.\n */\nclass BoxLayout extends PanelLayout {\n /**\n * Construct a new box layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n super();\n this._fixed = 0;\n this._spacing = 4;\n this._dirty = false;\n this._sizers = [];\n this._items = [];\n this._box = null;\n this._alignment = 'start';\n this._direction = 'top-to-bottom';\n if (options.direction !== undefined) {\n this._direction = options.direction;\n }\n if (options.alignment !== undefined) {\n this._alignment = options.alignment;\n }\n if (options.spacing !== undefined) {\n this._spacing = Utils$1.clampDimension(options.spacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._sizers.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the layout direction for the box layout.\n */\n get direction() {\n return this._direction;\n }\n /**\n * Set the layout direction for the box layout.\n */\n set direction(value) {\n if (this._direction === value) {\n return;\n }\n this._direction = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['direction'] = value;\n this.parent.fit();\n }\n /**\n * Get the content alignment for the box layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n get alignment() {\n return this._alignment;\n }\n /**\n * Set the content alignment for the box layout.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n set alignment(value) {\n if (this._alignment === value) {\n return;\n }\n this._alignment = value;\n if (!this.parent) {\n return;\n }\n this.parent.dataset['alignment'] = value;\n this.parent.update();\n }\n /**\n * Get the inter-element spacing for the box layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the box layout.\n */\n set spacing(value) {\n value = Utils$1.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n this.parent.dataset['direction'] = this.direction;\n this.parent.dataset['alignment'] = this.alignment;\n super.init();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Create and add a new layout item for the widget.\n ArrayExt.insert(this._items, index, new LayoutItem(widget));\n // Create and add a new sizer for the widget.\n ArrayExt.insert(this._sizers, index, new BoxSizer());\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the layout item for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n // Move the sizer for the widget.\n ArrayExt.move(this._sizers, fromIndex, toIndex);\n // Post an update request for the parent widget.\n this.parent.update();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the layout item for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n // Remove the sizer for the widget.\n ArrayExt.removeAt(this._sizers, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Update the fixed space for the visible items.\n this._fixed = this._spacing * Math.max(0, nVisible - 1);\n // Setup the computed minimum size.\n let horz = Private$c.isHorizontal(this._direction);\n let minW = horz ? this._fixed : 0;\n let minH = horz ? 0 : this._fixed;\n // Update the sizers and computed minimum size.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item and corresponding box sizer.\n let item = this._items[i];\n let sizer = this._sizers[i];\n // If the item is hidden, it should consume zero size.\n if (item.isHidden) {\n sizer.minSize = 0;\n sizer.maxSize = 0;\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the size basis and stretch factor.\n sizer.sizeHint = BoxLayout.getSizeBasis(item.widget);\n sizer.stretch = BoxLayout.getStretch(item.widget);\n // Update the sizer limits and computed min size.\n if (horz) {\n sizer.minSize = item.minWidth;\n sizer.maxSize = item.maxWidth;\n minW += item.minWidth;\n minH = Math.max(minH, item.minHeight);\n }\n else {\n sizer.minSize = item.minHeight;\n sizer.maxSize = item.maxHeight;\n minH += item.minHeight;\n minW = Math.max(minW, item.minWidth);\n }\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the layout area adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Distribute the layout space and adjust the start position.\n let delta;\n switch (this._direction) {\n case 'left-to-right':\n delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n break;\n case 'top-to-bottom':\n delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n break;\n case 'right-to-left':\n delta = BoxEngine.calc(this._sizers, Math.max(0, width - this._fixed));\n left += width;\n break;\n case 'bottom-to-top':\n delta = BoxEngine.calc(this._sizers, Math.max(0, height - this._fixed));\n top += height;\n break;\n default:\n throw 'unreachable';\n }\n // Setup the variables for justification and alignment offset.\n let extra = 0;\n let offset = 0;\n // Account for alignment if there is extra layout space.\n if (delta > 0) {\n switch (this._alignment) {\n case 'start':\n break;\n case 'center':\n extra = 0;\n offset = delta / 2;\n break;\n case 'end':\n extra = 0;\n offset = delta;\n break;\n case 'justify':\n extra = delta / nVisible;\n offset = 0;\n break;\n default:\n throw 'unreachable';\n }\n }\n // Layout the items using the computed box sizes.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Fetch the computed size for the widget.\n let size = this._sizers[i].size;\n // Update the widget geometry and advance the relevant edge.\n switch (this._direction) {\n case 'left-to-right':\n item.update(left + offset, top, size + extra, height);\n left += size + extra + this._spacing;\n break;\n case 'top-to-bottom':\n item.update(left, top + offset, width, size + extra);\n top += size + extra + this._spacing;\n break;\n case 'right-to-left':\n item.update(left - offset - size - extra, top, size + extra, height);\n left -= size + extra + this._spacing;\n break;\n case 'bottom-to-top':\n item.update(left, top - offset - size - extra, width, size + extra);\n top -= size + extra + this._spacing;\n break;\n default:\n throw 'unreachable';\n }\n }\n }\n}\n/**\n * The namespace for the `BoxLayout` class statics.\n */\n(function (BoxLayout) {\n /**\n * Get the box layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box layout stretch factor for the widget.\n */\n function getStretch(widget) {\n return Private$c.stretchProperty.get(widget);\n }\n BoxLayout.getStretch = getStretch;\n /**\n * Set the box layout stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n Private$c.stretchProperty.set(widget, value);\n }\n BoxLayout.setStretch = setStretch;\n /**\n * Get the box layout size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box layout size basis for the widget.\n */\n function getSizeBasis(widget) {\n return Private$c.sizeBasisProperty.get(widget);\n }\n BoxLayout.getSizeBasis = getSizeBasis;\n /**\n * Set the box layout size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the size basis.\n */\n function setSizeBasis(widget, value) {\n Private$c.sizeBasisProperty.set(widget, value);\n }\n BoxLayout.setSizeBasis = setSizeBasis;\n})(BoxLayout || (BoxLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$c;\n(function (Private) {\n /**\n * The property descriptor for a widget stretch factor.\n */\n Private.stretchProperty = new AttachedProperty({\n name: 'stretch',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * The property descriptor for a widget size basis.\n */\n Private.sizeBasisProperty = new AttachedProperty({\n name: 'sizeBasis',\n create: () => 0,\n coerce: (owner, value) => Math.max(0, Math.floor(value)),\n changed: onChildSizingChanged\n });\n /**\n * Test whether a direction has horizontal orientation.\n */\n function isHorizontal(dir) {\n return dir === 'left-to-right' || dir === 'right-to-left';\n }\n Private.isHorizontal = isHorizontal;\n /**\n * Clamp a spacing value to an integer >= 0.\n */\n function clampSpacing(value) {\n return Math.max(0, Math.floor(value));\n }\n Private.clampSpacing = clampSpacing;\n /**\n * The change handler for the attached sizing properties.\n */\n function onChildSizingChanged(child) {\n if (child.parent && child.parent.layout instanceof BoxLayout) {\n child.parent.fit();\n }\n }\n})(Private$c || (Private$c = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel which arranges its widgets in a single row or column.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link BoxLayout}.\n */\nclass BoxPanel extends Panel {\n /**\n * Construct a new box panel.\n *\n * @param options - The options for initializing the box panel.\n */\n constructor(options = {}) {\n super({ layout: Private$b.createLayout(options) });\n this.addClass('lm-BoxPanel');\n }\n /**\n * Get the layout direction for the box panel.\n */\n get direction() {\n return this.layout.direction;\n }\n /**\n * Set the layout direction for the box panel.\n */\n set direction(value) {\n this.layout.direction = value;\n }\n /**\n * Get the content alignment for the box panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n get alignment() {\n return this.layout.alignment;\n }\n /**\n * Set the content alignment for the box panel.\n *\n * #### Notes\n * This is the alignment of the widgets in the layout direction.\n *\n * The alignment has no effect if the widgets can expand to fill the\n * entire box layout.\n */\n set alignment(value) {\n this.layout.alignment = value;\n }\n /**\n * Get the inter-element spacing for the box panel.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the inter-element spacing for the box panel.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-BoxPanel-child');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-BoxPanel-child');\n }\n}\n/**\n * The namespace for the `BoxPanel` class statics.\n */\n(function (BoxPanel) {\n /**\n * Get the box panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box panel stretch factor for the widget.\n */\n function getStretch(widget) {\n return BoxLayout.getStretch(widget);\n }\n BoxPanel.getStretch = getStretch;\n /**\n * Set the box panel stretch factor for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the stretch factor.\n */\n function setStretch(widget, value) {\n BoxLayout.setStretch(widget, value);\n }\n BoxPanel.setStretch = setStretch;\n /**\n * Get the box panel size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The box panel size basis for the widget.\n */\n function getSizeBasis(widget) {\n return BoxLayout.getSizeBasis(widget);\n }\n BoxPanel.getSizeBasis = getSizeBasis;\n /**\n * Set the box panel size basis for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the size basis.\n */\n function setSizeBasis(widget, value) {\n BoxLayout.setSizeBasis(widget, value);\n }\n BoxPanel.setSizeBasis = setSizeBasis;\n})(BoxPanel || (BoxPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$b;\n(function (Private) {\n /**\n * Create a box layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new BoxLayout(options);\n }\n Private.createLayout = createLayout;\n})(Private$b || (Private$b = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays command items as a searchable palette.\n */\nclass CommandPalette extends Widget {\n /**\n * Construct a new command palette.\n *\n * @param options - The options for initializing the palette.\n */\n constructor(options) {\n super({ node: Private$a.createNode() });\n this._activeIndex = -1;\n this._items = [];\n this._results = null;\n this.addClass('lm-CommandPalette');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.commands = options.commands;\n this.renderer = options.renderer || CommandPalette.defaultRenderer;\n this.commands.commandChanged.connect(this._onGenericChange, this);\n this.commands.keyBindingChanged.connect(this._onGenericChange, this);\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._items.length = 0;\n this._results = null;\n super.dispose();\n }\n /**\n * The command palette search node.\n *\n * #### Notes\n * This is the node which contains the search-related elements.\n */\n get searchNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-search')[0];\n }\n /**\n * The command palette input node.\n *\n * #### Notes\n * This is the actual input node for the search area.\n */\n get inputNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-input')[0];\n }\n /**\n * The command palette content node.\n *\n * #### Notes\n * This is the node which holds the command item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-CommandPalette-content')[0];\n }\n /**\n * A read-only array of the command items in the palette.\n */\n get items() {\n return this._items;\n }\n /**\n * Add a command item to the command palette.\n *\n * @param options - The options for creating the command item.\n *\n * @returns The command item added to the palette.\n */\n addItem(options) {\n // Create a new command item for the options.\n let item = Private$a.createItem(this.commands, options);\n // Add the item to the array.\n this._items.push(item);\n // Refresh the search results.\n this.refresh();\n // Return the item added to the palette.\n return item;\n }\n /**\n * Adds command items to the command palette.\n *\n * @param items - An array of options for creating each command item.\n *\n * @returns The command items added to the palette.\n */\n addItems(items) {\n const newItems = items.map(item => Private$a.createItem(this.commands, item));\n newItems.forEach(item => this._items.push(item));\n this.refresh();\n return newItems;\n }\n /**\n * Remove an item from the command palette.\n *\n * @param item - The item to remove from the palette.\n *\n * #### Notes\n * This is a no-op if the item is not in the palette.\n */\n removeItem(item) {\n this.removeItemAt(this._items.indexOf(item));\n }\n /**\n * Remove the item at a given index from the command palette.\n *\n * @param index - The index of the item to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeItemAt(index) {\n // Remove the item from the array.\n let item = ArrayExt.removeAt(this._items, index);\n // Bail if the index is out of range.\n if (!item) {\n return;\n }\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Remove all items from the command palette.\n */\n clearItems() {\n // Bail if there is nothing to remove.\n if (this._items.length === 0) {\n return;\n }\n // Clear the array of items.\n this._items.length = 0;\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Clear the search results and schedule an update.\n *\n * #### Notes\n * This should be called whenever the search results of the palette\n * should be updated.\n *\n * This is typically called automatically by the palette as needed,\n * but can be called manually if the input text is programatically\n * changed.\n *\n * The rendered results are updated asynchronously.\n */\n refresh() {\n this._results = null;\n if (this.inputNode.value !== '') {\n let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n clear.style.display = 'inherit';\n }\n else {\n let clear = this.node.getElementsByClassName('lm-close-icon')[0];\n clear.style.display = 'none';\n }\n this.update();\n }\n /**\n * Handle the DOM events for the command palette.\n *\n * @param event - The DOM event sent to the command palette.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the command palette's DOM node.\n * It should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'click':\n this._evtClick(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'input':\n this.refresh();\n break;\n case 'focus':\n case 'blur':\n this._toggleFocused();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('click', this);\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('input', this);\n this.node.addEventListener('focus', this, true);\n this.node.addEventListener('blur', this, true);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('click', this);\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('input', this);\n this.node.removeEventListener('focus', this, true);\n this.node.removeEventListener('blur', this, true);\n }\n /**\n * A message handler invoked on an `'after-show'` message.\n */\n onAfterShow(msg) {\n this.update();\n super.onAfterShow(msg);\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n let input = this.inputNode;\n input.focus();\n input.select();\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.isHidden) {\n return;\n }\n // Fetch the current query text and content node.\n let query = this.inputNode.value;\n let contentNode = this.contentNode;\n // Ensure the search results are generated.\n let results = this._results;\n if (!results) {\n // Generate and store the new search results.\n results = this._results = Private$a.search(this._items, query);\n // Reset the active index.\n this._activeIndex = query\n ? ArrayExt.findFirstIndex(results, Private$a.canActivate)\n : -1;\n }\n // If there is no query and no results, clear the content.\n if (!query && results.length === 0) {\n VirtualDOM.render(null, contentNode);\n return;\n }\n // If the is a query but no results, render the empty message.\n if (query && results.length === 0) {\n let content = this.renderer.renderEmptyMessage({ query });\n VirtualDOM.render(content, contentNode);\n return;\n }\n // Create the render content for the search results.\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let content = new Array(results.length);\n for (let i = 0, n = results.length; i < n; ++i) {\n let result = results[i];\n if (result.type === 'header') {\n let indices = result.indices;\n let category = result.category;\n content[i] = renderer.renderHeader({ category, indices });\n }\n else {\n let item = result.item;\n let indices = result.indices;\n let active = i === activeIndex;\n content[i] = renderer.renderItem({ item, indices, active });\n }\n }\n // Render the search result content.\n VirtualDOM.render(content, contentNode);\n // Adjust the scroll position as needed.\n if (activeIndex < 0 || activeIndex >= results.length) {\n contentNode.scrollTop = 0;\n }\n else {\n let element = contentNode.children[activeIndex];\n ElementExt.scrollIntoViewIfNeeded(contentNode, element);\n }\n }\n /**\n * Handle the `'click'` event for the command palette.\n */\n _evtClick(event) {\n // Bail if the click is not the left button.\n if (event.button !== 0) {\n return;\n }\n // Clear input if the target is clear button\n if (event.target.classList.contains('lm-close-icon')) {\n this.inputNode.value = '';\n this.refresh();\n return;\n }\n // Find the index of the item which was clicked.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return node.contains(event.target);\n });\n // Bail if the click was not on an item.\n if (index === -1) {\n return;\n }\n // Kill the event when a content item is clicked.\n event.preventDefault();\n event.stopPropagation();\n // Execute the item if possible.\n this._execute(index);\n }\n /**\n * Handle the `'keydown'` event for the command palette.\n */\n _evtKeyDown(event) {\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n switch (event.keyCode) {\n case 13: // Enter\n event.preventDefault();\n event.stopPropagation();\n this._execute(this._activeIndex);\n break;\n case 38: // Up Arrow\n event.preventDefault();\n event.stopPropagation();\n this._activatePreviousItem();\n break;\n case 40: // Down Arrow\n event.preventDefault();\n event.stopPropagation();\n this._activateNextItem();\n break;\n }\n }\n /**\n * Activate the next enabled command item.\n */\n _activateNextItem() {\n // Bail if there are no search results.\n if (!this._results || this._results.length === 0) {\n return;\n }\n // Find the next enabled item index.\n let ai = this._activeIndex;\n let n = this._results.length;\n let start = ai < n - 1 ? ai + 1 : 0;\n let stop = start === 0 ? n - 1 : start - 1;\n this._activeIndex = ArrayExt.findFirstIndex(this._results, Private$a.canActivate, start, stop);\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Activate the previous enabled command item.\n */\n _activatePreviousItem() {\n // Bail if there are no search results.\n if (!this._results || this._results.length === 0) {\n return;\n }\n // Find the previous enabled item index.\n let ai = this._activeIndex;\n let n = this._results.length;\n let start = ai <= 0 ? n - 1 : ai - 1;\n let stop = start === n - 1 ? 0 : start + 1;\n this._activeIndex = ArrayExt.findLastIndex(this._results, Private$a.canActivate, start, stop);\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Execute the command item at the given index, if possible.\n */\n _execute(index) {\n // Bail if there are no search results.\n if (!this._results) {\n return;\n }\n // Bail if the index is out of range.\n let part = this._results[index];\n if (!part) {\n return;\n }\n // Update the search text if the item is a header.\n if (part.type === 'header') {\n let input = this.inputNode;\n input.value = `${part.category.toLowerCase()} `;\n input.focus();\n this.refresh();\n return;\n }\n // Bail if item is not enabled.\n if (!part.item.isEnabled) {\n return;\n }\n // Execute the item.\n this.commands.execute(part.item.command, part.item.args);\n // Clear the query text.\n this.inputNode.value = '';\n // Refresh the search results.\n this.refresh();\n }\n /**\n * Toggle the focused modifier based on the input node focus state.\n */\n _toggleFocused() {\n let focused = document.activeElement === this.inputNode;\n this.toggleClass('lm-mod-focused', focused);\n }\n /**\n * A signal handler for generic command changes.\n */\n _onGenericChange() {\n this.refresh();\n }\n}\n/**\n * The namespace for the `CommandPalette` class statics.\n */\n(function (CommandPalette) {\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Render the virtual element for a command palette header.\n *\n * @param data - The data to use for rendering the header.\n *\n * @returns A virtual element representing the header.\n */\n renderHeader(data) {\n let content = this.formatHeader(data);\n return h.li({ className: 'lm-CommandPalette-header' }, content);\n }\n /**\n * Render the virtual element for a command palette item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n if (data.item.isToggleable) {\n return h.li({\n className,\n dataset,\n role: 'menuitemcheckbox',\n 'aria-checked': `${data.item.isToggled}`\n }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n }\n return h.li({\n className,\n dataset,\n role: 'menuitem'\n }, this.renderItemIcon(data), this.renderItemContent(data), this.renderItemShortcut(data));\n }\n /**\n * Render the empty results message for a command palette.\n *\n * @param data - The data to use for rendering the message.\n *\n * @returns A virtual element representing the message.\n */\n renderEmptyMessage(data) {\n let content = this.formatEmptyMessage(data);\n return h.li({ className: 'lm-CommandPalette-emptyMessage' }, content);\n }\n /**\n * Render the icon for a command palette item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the icon.\n */\n renderItemIcon(data) {\n let className = this.createIconClass(data);\n // If data.item.icon is undefined, it will be ignored.\n return h.div({ className }, data.item.icon, data.item.iconLabel);\n }\n /**\n * Render the content for a command palette item.\n *\n * @param data - The data to use for rendering the content.\n *\n * @returns A virtual element representing the content.\n */\n renderItemContent(data) {\n return h.div({ className: 'lm-CommandPalette-itemContent' }, this.renderItemLabel(data), this.renderItemCaption(data));\n }\n /**\n * Render the label for a command palette item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the label.\n */\n renderItemLabel(data) {\n let content = this.formatItemLabel(data);\n return h.div({ className: 'lm-CommandPalette-itemLabel' }, content);\n }\n /**\n * Render the caption for a command palette item.\n *\n * @param data - The data to use for rendering the caption.\n *\n * @returns A virtual element representing the caption.\n */\n renderItemCaption(data) {\n let content = this.formatItemCaption(data);\n return h.div({ className: 'lm-CommandPalette-itemCaption' }, content);\n }\n /**\n * Render the shortcut for a command palette item.\n *\n * @param data - The data to use for rendering the shortcut.\n *\n * @returns A virtual element representing the shortcut.\n */\n renderItemShortcut(data) {\n let content = this.formatItemShortcut(data);\n return h.div({ className: 'lm-CommandPalette-itemShortcut' }, content);\n }\n /**\n * Create the class name for the command palette item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the command palette item.\n */\n createItemClass(data) {\n // Set up the initial class name.\n let name = 'lm-CommandPalette-item';\n // Add the boolean state classes.\n if (!data.item.isEnabled) {\n name += ' lm-mod-disabled';\n }\n if (data.item.isToggled) {\n name += ' lm-mod-toggled';\n }\n if (data.active) {\n name += ' lm-mod-active';\n }\n // Add the extra class.\n let extra = data.item.className;\n if (extra) {\n name += ` ${extra}`;\n }\n // Return the complete class name.\n return name;\n }\n /**\n * Create the dataset for the command palette item.\n *\n * @param data - The data to use for creating the dataset.\n *\n * @returns The dataset for the command palette item.\n */\n createItemDataset(data) {\n return { ...data.item.dataset, command: data.item.command };\n }\n /**\n * Create the class name for the command item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-CommandPalette-itemIcon';\n let extra = data.item.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the render content for the header node.\n *\n * @param data - The data to use for the header content.\n *\n * @returns The content to add to the header node.\n */\n formatHeader(data) {\n if (!data.indices || data.indices.length === 0) {\n return data.category;\n }\n return StringExt.highlight(data.category, data.indices, h.mark);\n }\n /**\n * Create the render content for the empty message node.\n *\n * @param data - The data to use for the empty message content.\n *\n * @returns The content to add to the empty message node.\n */\n formatEmptyMessage(data) {\n return `No commands found that match '${data.query}'`;\n }\n /**\n * Create the render content for the item shortcut node.\n *\n * @param data - The data to use for the shortcut content.\n *\n * @returns The content to add to the shortcut node.\n */\n formatItemShortcut(data) {\n let kb = data.item.keyBinding;\n return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n }\n /**\n * Create the render content for the item label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatItemLabel(data) {\n if (!data.indices || data.indices.length === 0) {\n return data.item.label;\n }\n return StringExt.highlight(data.item.label, data.indices, h.mark);\n }\n /**\n * Create the render content for the item caption node.\n *\n * @param data - The data to use for the caption content.\n *\n * @returns The content to add to the caption node.\n */\n formatItemCaption(data) {\n return data.item.caption;\n }\n }\n CommandPalette.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n CommandPalette.defaultRenderer = new Renderer();\n})(CommandPalette || (CommandPalette = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$a;\n(function (Private) {\n /**\n * Create the DOM node for a command palette.\n */\n function createNode() {\n let node = document.createElement('div');\n let search = document.createElement('div');\n let wrapper = document.createElement('div');\n let input = document.createElement('input');\n let content = document.createElement('ul');\n let clear = document.createElement('button');\n search.className = 'lm-CommandPalette-search';\n wrapper.className = 'lm-CommandPalette-wrapper';\n input.className = 'lm-CommandPalette-input';\n clear.className = 'lm-close-icon';\n content.className = 'lm-CommandPalette-content';\n content.setAttribute('role', 'menu');\n input.spellcheck = false;\n wrapper.appendChild(input);\n wrapper.appendChild(clear);\n search.appendChild(wrapper);\n node.appendChild(search);\n node.appendChild(content);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Create a new command item from a command registry and options.\n */\n function createItem(commands, options) {\n return new CommandItem(commands, options);\n }\n Private.createItem = createItem;\n /**\n * Search an array of command items for fuzzy matches.\n */\n function search(items, query) {\n // Fuzzy match the items for the query.\n let scores = matchItems(items, query);\n // Sort the items based on their score.\n scores.sort(scoreCmp);\n // Create the results for the search.\n return createResults(scores);\n }\n Private.search = search;\n /**\n * Test whether a result item can be activated.\n */\n function canActivate(result) {\n return result.type === 'item' && result.item.isEnabled;\n }\n Private.canActivate = canActivate;\n /**\n * Normalize a category for a command item.\n */\n function normalizeCategory(category) {\n return category.trim().replace(/\\s+/g, ' ');\n }\n /**\n * Normalize the query text for a fuzzy search.\n */\n function normalizeQuery(text) {\n return text.replace(/\\s+/g, '').toLowerCase();\n }\n /**\n * Perform a fuzzy match on an array of command items.\n */\n function matchItems(items, query) {\n // Normalize the query text to lower case with no whitespace.\n query = normalizeQuery(query);\n // Create the array to hold the scores.\n let scores = [];\n // Iterate over the items and match against the query.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Ignore items which are not visible.\n let item = items[i];\n if (!item.isVisible) {\n continue;\n }\n // If the query is empty, all items are matched by default.\n if (!query) {\n scores.push({\n matchType: 3 /* MatchType.Default */,\n categoryIndices: null,\n labelIndices: null,\n score: 0,\n item\n });\n continue;\n }\n // Run the fuzzy search for the item and query.\n let score = fuzzySearch(item, query);\n // Ignore the item if it is not a match.\n if (!score) {\n continue;\n }\n // Penalize disabled items.\n // TODO - push disabled items all the way down in sort cmp?\n if (!item.isEnabled) {\n score.score += 1000;\n }\n // Add the score to the results.\n scores.push(score);\n }\n // Return the final array of scores.\n return scores;\n }\n /**\n * Perform a fuzzy search on a single command item.\n */\n function fuzzySearch(item, query) {\n // Create the source text to be searched.\n let category = item.category.toLowerCase();\n let label = item.label.toLowerCase();\n let source = `${category} ${label}`;\n // Set up the match score and indices array.\n let score = Infinity;\n let indices = null;\n // The regex for search word boundaries\n let rgx = /\\b\\w/g;\n // Search the source by word boundary.\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // Find the next word boundary in the source.\n let rgxMatch = rgx.exec(source);\n // Break if there is no more source context.\n if (!rgxMatch) {\n break;\n }\n // Run the string match on the relevant substring.\n let match = StringExt.matchSumOfDeltas(source, query, rgxMatch.index);\n // Break if there is no match.\n if (!match) {\n break;\n }\n // Update the match if the score is better.\n if (match.score <= score) {\n score = match.score;\n indices = match.indices;\n }\n }\n // Bail if there was no match.\n if (!indices || score === Infinity) {\n return null;\n }\n // Compute the pivot index between category and label text.\n let pivot = category.length + 1;\n // Find the slice index to separate matched indices.\n let j = ArrayExt.lowerBound(indices, pivot, (a, b) => a - b);\n // Extract the matched category and label indices.\n let categoryIndices = indices.slice(0, j);\n let labelIndices = indices.slice(j);\n // Adjust the label indices for the pivot offset.\n for (let i = 0, n = labelIndices.length; i < n; ++i) {\n labelIndices[i] -= pivot;\n }\n // Handle a pure label match.\n if (categoryIndices.length === 0) {\n return {\n matchType: 0 /* MatchType.Label */,\n categoryIndices: null,\n labelIndices,\n score,\n item\n };\n }\n // Handle a pure category match.\n if (labelIndices.length === 0) {\n return {\n matchType: 1 /* MatchType.Category */,\n categoryIndices,\n labelIndices: null,\n score,\n item\n };\n }\n // Handle a split match.\n return {\n matchType: 2 /* MatchType.Split */,\n categoryIndices,\n labelIndices,\n score,\n item\n };\n }\n /**\n * A sort comparison function for a match score.\n */\n function scoreCmp(a, b) {\n // First compare based on the match type\n let m1 = a.matchType - b.matchType;\n if (m1 !== 0) {\n return m1;\n }\n // Otherwise, compare based on the match score.\n let d1 = a.score - b.score;\n if (d1 !== 0) {\n return d1;\n }\n // Find the match index based on the match type.\n let i1 = 0;\n let i2 = 0;\n switch (a.matchType) {\n case 0 /* MatchType.Label */:\n i1 = a.labelIndices[0];\n i2 = b.labelIndices[0];\n break;\n case 1 /* MatchType.Category */:\n case 2 /* MatchType.Split */:\n i1 = a.categoryIndices[0];\n i2 = b.categoryIndices[0];\n break;\n }\n // Compare based on the match index.\n if (i1 !== i2) {\n return i1 - i2;\n }\n // Otherwise, compare by category.\n let d2 = a.item.category.localeCompare(b.item.category);\n if (d2 !== 0) {\n return d2;\n }\n // Otherwise, compare by rank.\n let r1 = a.item.rank;\n let r2 = b.item.rank;\n if (r1 !== r2) {\n return r1 < r2 ? -1 : 1; // Infinity safe\n }\n // Finally, compare by label.\n return a.item.label.localeCompare(b.item.label);\n }\n /**\n * Create the results from an array of sorted scores.\n */\n function createResults(scores) {\n // Set up the search results array.\n let results = [];\n // Iterate over each score in the array.\n for (let i = 0, n = scores.length; i < n; ++i) {\n // Extract the current item and indices.\n let { item, categoryIndices, labelIndices } = scores[i];\n // Extract the category for the current item.\n let category = item.category;\n // Is this the same category as the preceding result?\n if (i === 0 || category !== scores[i - 1].item.category) {\n // Add the header result for the category.\n results.push({ type: 'header', category, indices: categoryIndices });\n }\n // Create the item result for the score.\n results.push({ type: 'item', item, indices: labelIndices });\n }\n // Return the final results.\n return results;\n }\n /**\n * A concrete implementation of `CommandPalette.IItem`.\n */\n class CommandItem {\n /**\n * Construct a new command item.\n */\n constructor(commands, options) {\n this._commands = commands;\n this.category = normalizeCategory(options.category);\n this.command = options.command;\n this.args = options.args || JSONExt.emptyObject;\n this.rank = options.rank !== undefined ? options.rank : Infinity;\n }\n /**\n * The display label for the command item.\n */\n get label() {\n return this._commands.label(this.command, this.args);\n }\n /**\n * The icon renderer for the command item.\n */\n get icon() {\n return this._commands.icon(this.command, this.args);\n }\n /**\n * The icon class for the command item.\n */\n get iconClass() {\n return this._commands.iconClass(this.command, this.args);\n }\n /**\n * The icon label for the command item.\n */\n get iconLabel() {\n return this._commands.iconLabel(this.command, this.args);\n }\n /**\n * The display caption for the command item.\n */\n get caption() {\n return this._commands.caption(this.command, this.args);\n }\n /**\n * The extra class name for the command item.\n */\n get className() {\n return this._commands.className(this.command, this.args);\n }\n /**\n * The dataset for the command item.\n */\n get dataset() {\n return this._commands.dataset(this.command, this.args);\n }\n /**\n * Whether the command item is enabled.\n */\n get isEnabled() {\n return this._commands.isEnabled(this.command, this.args);\n }\n /**\n * Whether the command item is toggled.\n */\n get isToggled() {\n return this._commands.isToggled(this.command, this.args);\n }\n /**\n * Whether the command item is toggleable.\n */\n get isToggleable() {\n return this._commands.isToggleable(this.command, this.args);\n }\n /**\n * Whether the command item is visible.\n */\n get isVisible() {\n return this._commands.isVisible(this.command, this.args);\n }\n /**\n * The key binding for the command item.\n */\n get keyBinding() {\n let { command, args } = this;\n return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n return kb.command === command && JSONExt.deepEqual(kb.args, args);\n }) || null);\n }\n }\n})(Private$a || (Private$a = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays items as a canonical menu.\n */\nclass Menu extends Widget {\n /**\n * Construct a new menu.\n *\n * @param options - The options for initializing the menu.\n */\n constructor(options) {\n super({ node: Private$9.createNode() });\n this._childIndex = -1;\n this._activeIndex = -1;\n this._openTimerID = 0;\n this._closeTimerID = 0;\n this._items = [];\n this._childMenu = null;\n this._parentMenu = null;\n this._aboutToClose = new Signal(this);\n this._menuRequested = new Signal(this);\n this.addClass('lm-Menu');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.commands = options.commands;\n this.renderer = options.renderer || Menu.defaultRenderer;\n }\n /**\n * Dispose of the resources held by the menu.\n */\n dispose() {\n this.close();\n this._items.length = 0;\n super.dispose();\n }\n /**\n * A signal emitted just before the menu is closed.\n *\n * #### Notes\n * This signal is emitted when the menu receives a `'close-request'`\n * message, just before it removes itself from the DOM.\n *\n * This signal is not emitted if the menu is already detached from\n * the DOM when it receives the `'close-request'` message.\n */\n get aboutToClose() {\n return this._aboutToClose;\n }\n /**\n * A signal emitted when a new menu is requested by the user.\n *\n * #### Notes\n * This signal is emitted whenever the user presses the right or left\n * arrow keys, and a submenu cannot be opened or closed in response.\n *\n * This signal is useful when implementing menu bars in order to open\n * the next or previous menu in response to a user key press.\n *\n * This signal is only emitted for the root menu in a hierarchy.\n */\n get menuRequested() {\n return this._menuRequested;\n }\n /**\n * The parent menu of the menu.\n *\n * #### Notes\n * This is `null` unless the menu is an open submenu.\n */\n get parentMenu() {\n return this._parentMenu;\n }\n /**\n * The child menu of the menu.\n *\n * #### Notes\n * This is `null` unless the menu has an open submenu.\n */\n get childMenu() {\n return this._childMenu;\n }\n /**\n * The root menu of the menu hierarchy.\n */\n get rootMenu() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let menu = this;\n while (menu._parentMenu) {\n menu = menu._parentMenu;\n }\n return menu;\n }\n /**\n * The leaf menu of the menu hierarchy.\n */\n get leafMenu() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let menu = this;\n while (menu._childMenu) {\n menu = menu._childMenu;\n }\n return menu;\n }\n /**\n * The menu content node.\n *\n * #### Notes\n * This is the node which holds the menu item nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-Menu-content')[0];\n }\n /**\n * Get the currently active menu item.\n */\n get activeItem() {\n return this._items[this._activeIndex] || null;\n }\n /**\n * Set the currently active menu item.\n *\n * #### Notes\n * If the item cannot be activated, the item will be set to `null`.\n */\n set activeItem(value) {\n this.activeIndex = value ? this._items.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently active menu item.\n *\n * #### Notes\n * This will be `-1` if no menu item is active.\n */\n get activeIndex() {\n return this._activeIndex;\n }\n /**\n * Set the index of the currently active menu item.\n *\n * #### Notes\n * If the item cannot be activated, the index will be set to `-1`.\n */\n set activeIndex(value) {\n // Adjust the value for an out of range index.\n if (value < 0 || value >= this._items.length) {\n value = -1;\n }\n // Ensure the item can be activated.\n if (value !== -1 && !Private$9.canActivate(this._items[value])) {\n value = -1;\n }\n // Bail if the index will not change.\n if (this._activeIndex === value) {\n return;\n }\n // Update the active index.\n this._activeIndex = value;\n // Make active element in focus\n if (this._activeIndex >= 0 &&\n this.contentNode.childNodes[this._activeIndex]) {\n this.contentNode.childNodes[this._activeIndex].focus();\n }\n // schedule an update of the items.\n this.update();\n }\n /**\n * A read-only array of the menu items in the menu.\n */\n get items() {\n return this._items;\n }\n /**\n * Activate the next selectable item in the menu.\n *\n * #### Notes\n * If no item is selectable, the index will be set to `-1`.\n */\n activateNextItem() {\n let n = this._items.length;\n let ai = this._activeIndex;\n let start = ai < n - 1 ? ai + 1 : 0;\n let stop = start === 0 ? n - 1 : start - 1;\n this.activeIndex = ArrayExt.findFirstIndex(this._items, Private$9.canActivate, start, stop);\n }\n /**\n * Activate the previous selectable item in the menu.\n *\n * #### Notes\n * If no item is selectable, the index will be set to `-1`.\n */\n activatePreviousItem() {\n let n = this._items.length;\n let ai = this._activeIndex;\n let start = ai <= 0 ? n - 1 : ai - 1;\n let stop = start === n - 1 ? 0 : start + 1;\n this.activeIndex = ArrayExt.findLastIndex(this._items, Private$9.canActivate, start, stop);\n }\n /**\n * Trigger the active menu item.\n *\n * #### Notes\n * If the active item is a submenu, it will be opened and the first\n * item will be activated.\n *\n * If the active item is a command, the command will be executed.\n *\n * If the menu is not attached, this is a no-op.\n *\n * If there is no active item, this is a no-op.\n */\n triggerActiveItem() {\n // Bail if the menu is not attached.\n if (!this.isAttached) {\n return;\n }\n // Bail if there is no active item.\n let item = this.activeItem;\n if (!item) {\n return;\n }\n // Cancel the pending timers.\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n // If the item is a submenu, open it.\n if (item.type === 'submenu') {\n this._openChildMenu(true);\n return;\n }\n // Close the root menu before executing the command.\n this.rootMenu.close();\n // Execute the command for the item.\n let { command, args } = item;\n if (this.commands.isEnabled(command, args)) {\n this.commands.execute(command, args);\n }\n else {\n console.log(`Command '${command}' is disabled.`);\n }\n }\n /**\n * Add a menu item to the end of the menu.\n *\n * @param options - The options for creating the menu item.\n *\n * @returns The menu item added to the menu.\n */\n addItem(options) {\n return this.insertItem(this._items.length, options);\n }\n /**\n * Insert a menu item into the menu at the specified index.\n *\n * @param index - The index at which to insert the item.\n *\n * @param options - The options for creating the menu item.\n *\n * @returns The menu item added to the menu.\n *\n * #### Notes\n * The index will be clamped to the bounds of the items.\n */\n insertItem(index, options) {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Clamp the insert index to the array bounds.\n let i = Math.max(0, Math.min(index, this._items.length));\n // Create the item for the options.\n let item = Private$9.createItem(this, options);\n // Insert the item into the array.\n ArrayExt.insert(this._items, i, item);\n // Schedule an update of the items.\n this.update();\n // Return the item added to the menu.\n return item;\n }\n /**\n * Remove an item from the menu.\n *\n * @param item - The item to remove from the menu.\n *\n * #### Notes\n * This is a no-op if the item is not in the menu.\n */\n removeItem(item) {\n this.removeItemAt(this._items.indexOf(item));\n }\n /**\n * Remove the item at a given index from the menu.\n *\n * @param index - The index of the item to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeItemAt(index) {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Remove the item from the array.\n let item = ArrayExt.removeAt(this._items, index);\n // Bail if the index is out of range.\n if (!item) {\n return;\n }\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Remove all menu items from the menu.\n */\n clearItems() {\n // Close the menu if it's attached.\n if (this.isAttached) {\n this.close();\n }\n // Reset the active index.\n this.activeIndex = -1;\n // Bail if there is nothing to remove.\n if (this._items.length === 0) {\n return;\n }\n // Clear the items.\n this._items.length = 0;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Open the menu at the specified location.\n *\n * @param x - The client X coordinate of the menu location.\n *\n * @param y - The client Y coordinate of the menu location.\n *\n * @param options - The additional options for opening the menu.\n *\n * #### Notes\n * The menu will be opened at the given location unless it will not\n * fully fit on the screen. If it will not fit, it will be adjusted\n * to fit naturally on the screen.\n *\n * The menu will be attached under the `host` element in the DOM\n * (or `document.body` if `host` is `null`) and before the `ref`\n * element (or as the last child of `host` if `ref` is `null`).\n * The menu may be displayed outside of the `host` element\n * following the rules of CSS absolute positioning.\n *\n * This is a no-op if the menu is already attached to the DOM.\n */\n open(x, y, options = {}) {\n var _a, _b;\n // Bail early if the menu is already attached.\n if (this.isAttached) {\n return;\n }\n // Extract the menu options.\n let forceX = options.forceX || false;\n let forceY = options.forceY || false;\n const host = (_a = options.host) !== null && _a !== void 0 ? _a : null;\n const ref = (_b = options.ref) !== null && _b !== void 0 ? _b : null;\n // Open the menu as a root menu.\n Private$9.openRootMenu(this, x, y, forceX, forceY, host, ref);\n // Activate the menu to accept keyboard input.\n this.activate();\n }\n /**\n * Handle the DOM events for the menu.\n *\n * @param event - The DOM event sent to the menu.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the menu's DOM nodes. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'mouseup':\n this._evtMouseUp(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'mouseenter':\n this._evtMouseEnter(event);\n break;\n case 'mouseleave':\n this._evtMouseLeave(event);\n break;\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('mouseup', this);\n this.node.addEventListener('mousemove', this);\n this.node.addEventListener('mouseenter', this);\n this.node.addEventListener('mouseleave', this);\n this.node.addEventListener('contextmenu', this);\n document.addEventListener('mousedown', this, true);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('mouseup', this);\n this.node.removeEventListener('mousemove', this);\n this.node.removeEventListener('mouseenter', this);\n this.node.removeEventListener('mouseleave', this);\n this.node.removeEventListener('contextmenu', this);\n document.removeEventListener('mousedown', this, true);\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n this.node.focus();\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n let items = this._items;\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let collapsedFlags = Private$9.computeCollapsed(items);\n let content = new Array(items.length);\n for (let i = 0, n = items.length; i < n; ++i) {\n let item = items[i];\n let active = i === activeIndex;\n let collapsed = collapsedFlags[i];\n content[i] = renderer.renderItem({\n item,\n active,\n collapsed,\n onfocus: () => {\n this.activeIndex = i;\n }\n });\n }\n VirtualDOM.render(content, this.contentNode);\n }\n /**\n * A message handler invoked on a `'close-request'` message.\n */\n onCloseRequest(msg) {\n // Cancel the pending timers.\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n // Reset the active index.\n this.activeIndex = -1;\n // Close any open child menu.\n let childMenu = this._childMenu;\n if (childMenu) {\n this._childIndex = -1;\n this._childMenu = null;\n childMenu._parentMenu = null;\n childMenu.close();\n }\n // Remove this menu from its parent and activate the parent.\n let parentMenu = this._parentMenu;\n if (parentMenu) {\n this._parentMenu = null;\n parentMenu._childIndex = -1;\n parentMenu._childMenu = null;\n parentMenu.activate();\n }\n // Emit the `aboutToClose` signal if the menu is attached.\n if (this.isAttached) {\n this._aboutToClose.emit(undefined);\n }\n // Finish closing the menu.\n super.onCloseRequest(msg);\n }\n /**\n * Handle the `'keydown'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtKeyDown(event) {\n // A menu handles all keydown events.\n event.preventDefault();\n event.stopPropagation();\n // Fetch the key code for the event.\n let kc = event.keyCode;\n // Enter\n if (kc === 13) {\n this.triggerActiveItem();\n return;\n }\n // Escape\n if (kc === 27) {\n this.close();\n return;\n }\n // Left Arrow\n if (kc === 37) {\n if (this._parentMenu) {\n this.close();\n }\n else {\n this._menuRequested.emit('previous');\n }\n return;\n }\n // Up Arrow\n if (kc === 38) {\n this.activatePreviousItem();\n return;\n }\n // Right Arrow\n if (kc === 39) {\n let item = this.activeItem;\n if (item && item.type === 'submenu') {\n this.triggerActiveItem();\n }\n else {\n this.rootMenu._menuRequested.emit('next');\n }\n return;\n }\n // Down Arrow\n if (kc === 40) {\n this.activateNextItem();\n return;\n }\n // Get the pressed key character.\n let key = getKeyboardLayout().keyForKeydownEvent(event);\n // Bail if the key is not valid.\n if (!key) {\n return;\n }\n // Search for the next best matching mnemonic item.\n let start = this._activeIndex + 1;\n let result = Private$9.findMnemonic(this._items, key, start);\n // Handle the requested mnemonic based on the search results.\n // If exactly one mnemonic is matched, that item is triggered.\n // Otherwise, the next mnemonic is activated if available,\n // followed by the auto mnemonic if available.\n if (result.index !== -1 && !result.multiple) {\n this.activeIndex = result.index;\n this.triggerActiveItem();\n }\n else if (result.index !== -1) {\n this.activeIndex = result.index;\n }\n else if (result.auto !== -1) {\n this.activeIndex = result.auto;\n }\n }\n /**\n * Handle the `'mouseup'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseUp(event) {\n if (event.button !== 0) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.triggerActiveItem();\n }\n /**\n * Handle the `'mousemove'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseMove(event) {\n // Hit test the item nodes for the item under the mouse.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // Bail early if the mouse is already over the active index.\n if (index === this._activeIndex) {\n return;\n }\n // Update and coerce the active index.\n this.activeIndex = index;\n index = this.activeIndex;\n // If the index is the current child index, cancel the timers.\n if (index === this._childIndex) {\n this._cancelOpenTimer();\n this._cancelCloseTimer();\n return;\n }\n // If a child menu is currently open, start the close timer.\n if (this._childIndex !== -1) {\n this._startCloseTimer();\n }\n // Cancel the open timer to give a full delay for opening.\n this._cancelOpenTimer();\n // Bail if the active item is not a valid submenu item.\n let item = this.activeItem;\n if (!item || item.type !== 'submenu' || !item.submenu) {\n return;\n }\n // Start the open timer to open the active item submenu.\n this._startOpenTimer();\n }\n /**\n * Handle the `'mouseenter'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseEnter(event) {\n // Synchronize the active ancestor items.\n for (let menu = this._parentMenu; menu; menu = menu._parentMenu) {\n menu._cancelOpenTimer();\n menu._cancelCloseTimer();\n menu.activeIndex = menu._childIndex;\n }\n }\n /**\n * Handle the `'mouseleave'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the menu node.\n */\n _evtMouseLeave(event) {\n // Cancel any pending submenu opening.\n this._cancelOpenTimer();\n // If there is no open child menu, just reset the active index.\n if (!this._childMenu) {\n this.activeIndex = -1;\n return;\n }\n // If the mouse is over the child menu, cancel the close timer.\n let { clientX, clientY } = event;\n if (ElementExt.hitTest(this._childMenu.node, clientX, clientY)) {\n this._cancelCloseTimer();\n return;\n }\n // Otherwise, reset the active index and start the close timer.\n this.activeIndex = -1;\n this._startCloseTimer();\n }\n /**\n * Handle the `'mousedown'` event for the menu.\n *\n * #### Notes\n * This listener is attached to the document node.\n */\n _evtMouseDown(event) {\n // Bail if the menu is not a root menu.\n if (this._parentMenu) {\n return;\n }\n // The mouse button which is pressed is irrelevant. If the press\n // is not on a menu, the entire hierarchy is closed and the event\n // is allowed to propagate. This allows other code to act on the\n // event, such as focusing the clicked element.\n if (Private$9.hitTestMenus(this, event.clientX, event.clientY)) {\n event.preventDefault();\n event.stopPropagation();\n }\n else {\n this.close();\n }\n }\n /**\n * Open the child menu at the active index immediately.\n *\n * If a different child menu is already open, it will be closed,\n * even if the active item is not a valid submenu.\n */\n _openChildMenu(activateFirst = false) {\n // If the item is not a valid submenu, close the child menu.\n let item = this.activeItem;\n if (!item || item.type !== 'submenu' || !item.submenu) {\n this._closeChildMenu();\n return;\n }\n // Do nothing if the child menu will not change.\n let submenu = item.submenu;\n if (submenu === this._childMenu) {\n return;\n }\n // Prior to any DOM modifications save window data\n Menu.saveWindowData();\n // Ensure the current child menu is closed.\n this._closeChildMenu();\n // Update the private child state.\n this._childMenu = submenu;\n this._childIndex = this._activeIndex;\n // Set the parent menu reference for the child.\n submenu._parentMenu = this;\n // Ensure the menu is updated and lookup the item node.\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n let itemNode = this.contentNode.children[this._activeIndex];\n // Open the submenu at the active node.\n Private$9.openSubmenu(submenu, itemNode);\n // Activate the first item if desired.\n if (activateFirst) {\n submenu.activeIndex = -1;\n submenu.activateNextItem();\n }\n // Activate the child menu.\n submenu.activate();\n }\n /**\n * Close the child menu immediately.\n *\n * This is a no-op if a child menu is not open.\n */\n _closeChildMenu() {\n if (this._childMenu) {\n this._childMenu.close();\n }\n }\n /**\n * Start the open timer, unless it is already pending.\n */\n _startOpenTimer() {\n if (this._openTimerID === 0) {\n this._openTimerID = window.setTimeout(() => {\n this._openTimerID = 0;\n this._openChildMenu();\n }, Private$9.TIMER_DELAY);\n }\n }\n /**\n * Start the close timer, unless it is already pending.\n */\n _startCloseTimer() {\n if (this._closeTimerID === 0) {\n this._closeTimerID = window.setTimeout(() => {\n this._closeTimerID = 0;\n this._closeChildMenu();\n }, Private$9.TIMER_DELAY);\n }\n }\n /**\n * Cancel the open timer, if the timer is pending.\n */\n _cancelOpenTimer() {\n if (this._openTimerID !== 0) {\n clearTimeout(this._openTimerID);\n this._openTimerID = 0;\n }\n }\n /**\n * Cancel the close timer, if the timer is pending.\n */\n _cancelCloseTimer() {\n if (this._closeTimerID !== 0) {\n clearTimeout(this._closeTimerID);\n this._closeTimerID = 0;\n }\n }\n /**\n * Save window data used for menu positioning in transient cache.\n *\n * In order to avoid layout trashing it is recommended to invoke this\n * method immediately prior to opening the menu and any DOM modifications\n * (like closing previously visible menu, or adding a class to menu widget).\n *\n * The transient cache will be released upon `open()` call.\n */\n static saveWindowData() {\n Private$9.saveWindowData();\n }\n}\n/**\n * The namespace for the `Menu` class statics.\n */\n(function (Menu) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n /**\n * Render the virtual element for a menu item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n let aria = this.createItemARIA(data);\n return h.li({\n className,\n dataset,\n tabindex: '0',\n onfocus: data.onfocus,\n ...aria\n }, this.renderIcon(data), this.renderLabel(data), this.renderShortcut(data), this.renderSubmenu(data));\n }\n /**\n * Render the icon element for a menu item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the item icon.\n */\n renderIcon(data) {\n let className = this.createIconClass(data);\n // If data.item.icon is undefined, it will be ignored.\n return h.div({ className }, data.item.icon, data.item.iconLabel);\n }\n /**\n * Render the label element for a menu item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the item label.\n */\n renderLabel(data) {\n let content = this.formatLabel(data);\n return h.div({ className: 'lm-Menu-itemLabel' }, content);\n }\n /**\n * Render the shortcut element for a menu item.\n *\n * @param data - The data to use for rendering the shortcut.\n *\n * @returns A virtual element representing the item shortcut.\n */\n renderShortcut(data) {\n let content = this.formatShortcut(data);\n return h.div({ className: 'lm-Menu-itemShortcut' }, content);\n }\n /**\n * Render the submenu icon element for a menu item.\n *\n * @param data - The data to use for rendering the submenu icon.\n *\n * @returns A virtual element representing the submenu icon.\n */\n renderSubmenu(data) {\n return h.div({ className: 'lm-Menu-itemSubmenuIcon' });\n }\n /**\n * Create the class name for the menu item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the menu item.\n */\n createItemClass(data) {\n // Setup the initial class name.\n let name = 'lm-Menu-item';\n // Add the boolean state classes.\n if (!data.item.isEnabled) {\n name += ' lm-mod-disabled';\n }\n if (data.item.isToggled) {\n name += ' lm-mod-toggled';\n }\n if (!data.item.isVisible) {\n name += ' lm-mod-hidden';\n }\n if (data.active) {\n name += ' lm-mod-active';\n }\n if (data.collapsed) {\n name += ' lm-mod-collapsed';\n }\n // Add the extra class.\n let extra = data.item.className;\n if (extra) {\n name += ` ${extra}`;\n }\n // Return the complete class name.\n return name;\n }\n /**\n * Create the dataset for the menu item.\n *\n * @param data - The data to use for creating the dataset.\n *\n * @returns The dataset for the menu item.\n */\n createItemDataset(data) {\n let result;\n let { type, command, dataset } = data.item;\n if (type === 'command') {\n result = { ...dataset, type, command };\n }\n else {\n result = { ...dataset, type };\n }\n return result;\n }\n /**\n * Create the class name for the menu item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-Menu-itemIcon';\n let extra = data.item.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the aria attributes for menu item.\n *\n * @param data - The data to use for the aria attributes.\n *\n * @returns The aria attributes object for the item.\n */\n createItemARIA(data) {\n let aria = {};\n switch (data.item.type) {\n case 'separator':\n aria.role = 'presentation';\n break;\n case 'submenu':\n aria['aria-haspopup'] = 'true';\n if (!data.item.isEnabled) {\n aria['aria-disabled'] = 'true';\n }\n break;\n default:\n if (!data.item.isEnabled) {\n aria['aria-disabled'] = 'true';\n }\n aria.role = 'menuitem';\n }\n return aria;\n }\n /**\n * Create the render content for the label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatLabel(data) {\n // Fetch the label text and mnemonic index.\n let { label, mnemonic } = data.item;\n // If the index is out of range, do not modify the label.\n if (mnemonic < 0 || mnemonic >= label.length) {\n return label;\n }\n // Split the label into parts.\n let prefix = label.slice(0, mnemonic);\n let suffix = label.slice(mnemonic + 1);\n let char = label[mnemonic];\n // Wrap the mnemonic character in a span.\n let span = h.span({ className: 'lm-Menu-itemMnemonic' }, char);\n // Return the content parts.\n return [prefix, span, suffix];\n }\n /**\n * Create the render content for the shortcut node.\n *\n * @param data - The data to use for the shortcut content.\n *\n * @returns The content to add to the shortcut node.\n */\n formatShortcut(data) {\n let kb = data.item.keyBinding;\n return kb ? CommandRegistry.formatKeystroke(kb.keys) : null;\n }\n }\n Menu.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n Menu.defaultRenderer = new Renderer();\n})(Menu || (Menu = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$9;\n(function (Private) {\n /**\n * The ms delay for opening and closing a submenu.\n */\n Private.TIMER_DELAY = 300;\n /**\n * The horizontal pixel overlap for an open submenu.\n */\n Private.SUBMENU_OVERLAP = 3;\n let transientWindowDataCache = null;\n let transientCacheCounter = 0;\n function getWindowData() {\n // if transient cache is in use, take one from it\n if (transientCacheCounter > 0) {\n transientCacheCounter--;\n return transientWindowDataCache;\n }\n return _getWindowData();\n }\n /**\n * Store window data in transient cache.\n *\n * The transient cache will be released upon `getWindowData()` call.\n * If this function is called multiple times, the cache will be\n * retained until as many calls to `getWindowData()` were made.\n *\n * Note: should be called before any DOM modifications.\n */\n function saveWindowData() {\n transientWindowDataCache = _getWindowData();\n transientCacheCounter++;\n }\n Private.saveWindowData = saveWindowData;\n /**\n * Create the DOM node for a menu.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.className = 'lm-Menu-content';\n node.appendChild(content);\n content.setAttribute('role', 'menu');\n node.tabIndex = 0;\n return node;\n }\n Private.createNode = createNode;\n /**\n * Test whether a menu item can be activated.\n */\n function canActivate(item) {\n return item.type !== 'separator' && item.isEnabled && item.isVisible;\n }\n Private.canActivate = canActivate;\n /**\n * Create a new menu item for an owner menu.\n */\n function createItem(owner, options) {\n return new MenuItem(owner.commands, options);\n }\n Private.createItem = createItem;\n /**\n * Hit test a menu hierarchy starting at the given root.\n */\n function hitTestMenus(menu, x, y) {\n for (let temp = menu; temp; temp = temp.childMenu) {\n if (ElementExt.hitTest(temp.node, x, y)) {\n return true;\n }\n }\n return false;\n }\n Private.hitTestMenus = hitTestMenus;\n /**\n * Compute which extra separator items should be collapsed.\n */\n function computeCollapsed(items) {\n // Allocate the return array and fill it with `false`.\n let result = new Array(items.length);\n ArrayExt.fill(result, false);\n // Collapse the leading separators.\n let k1 = 0;\n let n = items.length;\n for (; k1 < n; ++k1) {\n let item = items[k1];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n break;\n }\n result[k1] = true;\n }\n // Hide the trailing separators.\n let k2 = n - 1;\n for (; k2 >= 0; --k2) {\n let item = items[k2];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n break;\n }\n result[k2] = true;\n }\n // Hide the remaining consecutive separators.\n let hide = false;\n while (++k1 < k2) {\n let item = items[k1];\n if (!item.isVisible) {\n continue;\n }\n if (item.type !== 'separator') {\n hide = false;\n }\n else if (hide) {\n result[k1] = true;\n }\n else {\n hide = true;\n }\n }\n // Return the resulting flags.\n return result;\n }\n Private.computeCollapsed = computeCollapsed;\n function _getWindowData() {\n return {\n pageXOffset: window.pageXOffset,\n pageYOffset: window.pageYOffset,\n clientWidth: document.documentElement.clientWidth,\n clientHeight: document.documentElement.clientHeight\n };\n }\n /**\n * Open a menu as a root menu at the target location.\n */\n function openRootMenu(menu, x, y, forceX, forceY, host, ref) {\n // Get the current position and size of the main viewport.\n const windowData = getWindowData();\n let px = windowData.pageXOffset;\n let py = windowData.pageYOffset;\n let cw = windowData.clientWidth;\n let ch = windowData.clientHeight;\n // Ensure the menu is updated before attaching and measuring.\n MessageLoop.sendMessage(menu, Widget.Msg.UpdateRequest);\n // Compute the maximum allowed height for the menu.\n let maxHeight = ch - (forceY ? y : 0);\n // Fetch common variables.\n let node = menu.node;\n let style = node.style;\n // Clear the menu geometry and prepare it for measuring.\n style.opacity = '0';\n style.maxHeight = `${maxHeight}px`;\n // Attach the menu to the document.\n Widget.attach(menu, host || document.body, ref);\n // Measure the size of the menu.\n let { width, height } = node.getBoundingClientRect();\n // Adjust the X position of the menu to fit on-screen.\n if (!forceX && x + width > px + cw) {\n x = px + cw - width;\n }\n // Adjust the Y position of the menu to fit on-screen.\n if (!forceY && y + height > py + ch) {\n if (y > py + ch) {\n y = py + ch - height;\n }\n else {\n y = y - height;\n }\n }\n // Update the position of the menu to the computed position.\n style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n // Finally, make the menu visible on the screen.\n style.opacity = '1';\n }\n Private.openRootMenu = openRootMenu;\n /**\n * Open a menu as a submenu using an item node for positioning.\n */\n function openSubmenu(submenu, itemNode) {\n // Get the current position and size of the main viewport.\n const windowData = getWindowData();\n let px = windowData.pageXOffset;\n let py = windowData.pageYOffset;\n let cw = windowData.clientWidth;\n let ch = windowData.clientHeight;\n // Ensure the menu is updated before opening.\n MessageLoop.sendMessage(submenu, Widget.Msg.UpdateRequest);\n // Compute the maximum allowed height for the menu.\n let maxHeight = ch;\n // Fetch common variables.\n let node = submenu.node;\n let style = node.style;\n // Clear the menu geometry and prepare it for measuring.\n style.opacity = '0';\n style.maxHeight = `${maxHeight}px`;\n // Attach the menu to the document.\n Widget.attach(submenu, document.body);\n // Measure the size of the menu.\n let { width, height } = node.getBoundingClientRect();\n // Compute the box sizing for the menu.\n let box = ElementExt.boxSizing(submenu.node);\n // Get the bounding rect for the target item node.\n let itemRect = itemNode.getBoundingClientRect();\n // Compute the target X position.\n let x = itemRect.right - Private.SUBMENU_OVERLAP;\n // Adjust the X position to fit on the screen.\n if (x + width > px + cw) {\n x = itemRect.left + Private.SUBMENU_OVERLAP - width;\n }\n // Compute the target Y position.\n let y = itemRect.top - box.borderTop - box.paddingTop;\n // Adjust the Y position to fit on the screen.\n if (y + height > py + ch) {\n y = itemRect.bottom + box.borderBottom + box.paddingBottom - height;\n }\n // Update the position of the menu to the computed position.\n style.transform = `translate(${Math.max(0, x)}px, ${Math.max(0, y)}px`;\n // Finally, make the menu visible on the screen.\n style.opacity = '1';\n }\n Private.openSubmenu = openSubmenu;\n /**\n * Find the best matching mnemonic item.\n *\n * The search starts at the given index and wraps around.\n */\n function findMnemonic(items, key, start) {\n // Setup the result variables.\n let index = -1;\n let auto = -1;\n let multiple = false;\n // Normalize the key to upper case.\n let upperKey = key.toUpperCase();\n // Search the items from the given start index.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Compute the wrapped index.\n let k = (i + start) % n;\n // Lookup the item\n let item = items[k];\n // Ignore items which cannot be activated.\n if (!canActivate(item)) {\n continue;\n }\n // Ignore items with an empty label.\n let label = item.label;\n if (label.length === 0) {\n continue;\n }\n // Lookup the mnemonic index for the label.\n let mn = item.mnemonic;\n // Handle a valid mnemonic index.\n if (mn >= 0 && mn < label.length) {\n if (label[mn].toUpperCase() === upperKey) {\n if (index === -1) {\n index = k;\n }\n else {\n multiple = true;\n }\n }\n continue;\n }\n // Finally, handle the auto index if possible.\n if (auto === -1 && label[0].toUpperCase() === upperKey) {\n auto = k;\n }\n }\n // Return the search results.\n return { index, multiple, auto };\n }\n Private.findMnemonic = findMnemonic;\n /**\n * A concrete implementation of `Menu.IItem`.\n */\n class MenuItem {\n /**\n * Construct a new menu item.\n */\n constructor(commands, options) {\n this._commands = commands;\n this.type = options.type || 'command';\n this.command = options.command || '';\n this.args = options.args || JSONExt.emptyObject;\n this.submenu = options.submenu || null;\n }\n /**\n * The display label for the menu item.\n */\n get label() {\n if (this.type === 'command') {\n return this._commands.label(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.label;\n }\n return '';\n }\n /**\n * The mnemonic index for the menu item.\n */\n get mnemonic() {\n if (this.type === 'command') {\n return this._commands.mnemonic(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.mnemonic;\n }\n return -1;\n }\n /**\n * The icon renderer for the menu item.\n */\n get icon() {\n if (this.type === 'command') {\n return this._commands.icon(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.icon;\n }\n return undefined;\n }\n /**\n * The icon class for the menu item.\n */\n get iconClass() {\n if (this.type === 'command') {\n return this._commands.iconClass(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.iconClass;\n }\n return '';\n }\n /**\n * The icon label for the menu item.\n */\n get iconLabel() {\n if (this.type === 'command') {\n return this._commands.iconLabel(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.iconLabel;\n }\n return '';\n }\n /**\n * The display caption for the menu item.\n */\n get caption() {\n if (this.type === 'command') {\n return this._commands.caption(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.caption;\n }\n return '';\n }\n /**\n * The extra class name for the menu item.\n */\n get className() {\n if (this.type === 'command') {\n return this._commands.className(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.className;\n }\n return '';\n }\n /**\n * The dataset for the menu item.\n */\n get dataset() {\n if (this.type === 'command') {\n return this._commands.dataset(this.command, this.args);\n }\n if (this.type === 'submenu' && this.submenu) {\n return this.submenu.title.dataset;\n }\n return {};\n }\n /**\n * Whether the menu item is enabled.\n */\n get isEnabled() {\n if (this.type === 'command') {\n return this._commands.isEnabled(this.command, this.args);\n }\n if (this.type === 'submenu') {\n return this.submenu !== null;\n }\n return true;\n }\n /**\n * Whether the menu item is toggled.\n */\n get isToggled() {\n if (this.type === 'command') {\n return this._commands.isToggled(this.command, this.args);\n }\n return false;\n }\n /**\n * Whether the menu item is visible.\n */\n get isVisible() {\n if (this.type === 'command') {\n return this._commands.isVisible(this.command, this.args);\n }\n if (this.type === 'submenu') {\n return this.submenu !== null;\n }\n return true;\n }\n /**\n * The key binding for the menu item.\n */\n get keyBinding() {\n if (this.type === 'command') {\n let { command, args } = this;\n return (ArrayExt.findLastValue(this._commands.keyBindings, kb => {\n return kb.command === command && JSONExt.deepEqual(kb.args, args);\n }) || null);\n }\n return null;\n }\n }\n})(Private$9 || (Private$9 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * An object which implements a universal context menu.\n *\n * #### Notes\n * The items shown in the context menu are determined by CSS selector\n * matching against the DOM hierarchy at the site of the mouse click.\n * This is similar in concept to how keyboard shortcuts are matched\n * in the command registry.\n */\nclass ContextMenu {\n /**\n * Construct a new context menu.\n *\n * @param options - The options for initializing the menu.\n */\n constructor(options) {\n this._groupByTarget = true;\n this._idTick = 0;\n this._items = [];\n this._sortBySelector = true;\n const { groupByTarget, sortBySelector, ...others } = options;\n this.menu = new Menu(others);\n this._groupByTarget = groupByTarget !== false;\n this._sortBySelector = sortBySelector !== false;\n }\n /**\n * Add an item to the context menu.\n *\n * @param options - The options for creating the item.\n *\n * @returns A disposable which will remove the item from the menu.\n */\n addItem(options) {\n // Create an item from the given options.\n let item = Private$8.createItem(options, this._idTick++);\n // Add the item to the internal array.\n this._items.push(item);\n // Return a disposable which will remove the item.\n return new DisposableDelegate(() => {\n ArrayExt.removeFirstOf(this._items, item);\n });\n }\n /**\n * Open the context menu in response to a `'contextmenu'` event.\n *\n * @param event - The `'contextmenu'` event of interest.\n *\n * @returns `true` if the menu was opened, or `false` if no items\n * matched the event and the menu was not opened.\n *\n * #### Notes\n * This method will populate the context menu with items which match\n * the propagation path of the event, then open the menu at the mouse\n * position indicated by the event.\n */\n open(event) {\n // Prior to any DOM modifications update the window data.\n Menu.saveWindowData();\n // Clear the current contents of the context menu.\n this.menu.clearItems();\n // Bail early if there are no items to match.\n if (this._items.length === 0) {\n return false;\n }\n // Find the matching items for the event.\n let items = Private$8.matchItems(this._items, event, this._groupByTarget, this._sortBySelector);\n // Bail if there are no matching items.\n if (!items || items.length === 0) {\n return false;\n }\n // Add the filtered items to the menu.\n for (const item of items) {\n this.menu.addItem(item);\n }\n // Open the context menu at the current mouse position.\n this.menu.open(event.clientX, event.clientY);\n // Indicate success.\n return true;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$8;\n(function (Private) {\n /**\n * Create a normalized context menu item from an options object.\n */\n function createItem(options, id) {\n let selector = validateSelector(options.selector);\n let rank = options.rank !== undefined ? options.rank : Infinity;\n return { ...options, selector, rank, id };\n }\n Private.createItem = createItem;\n /**\n * Find the items which match a context menu event.\n *\n * The results are sorted by DOM level, specificity, and rank.\n */\n function matchItems(items, event, groupByTarget, sortBySelector) {\n // Look up the target of the event.\n let target = event.target;\n // Bail if there is no target.\n if (!target) {\n return null;\n }\n // Look up the current target of the event.\n let currentTarget = event.currentTarget;\n // Bail if there is no current target.\n if (!currentTarget) {\n return null;\n }\n // There are some third party libraries that cause the `target` to\n // be detached from the DOM before lumino can process the event.\n // If that happens, search for a new target node by point. If that\n // node is still dangling, bail.\n if (!currentTarget.contains(target)) {\n target = document.elementFromPoint(event.clientX, event.clientY);\n if (!target || !currentTarget.contains(target)) {\n return null;\n }\n }\n // Set up the result array.\n let result = [];\n // Copy the items array to allow in-place modification.\n let availableItems = items.slice();\n // Walk up the DOM hierarchy searching for matches.\n while (target !== null) {\n // Set up the match array for this DOM level.\n let matches = [];\n // Search the remaining items for matches.\n for (let i = 0, n = availableItems.length; i < n; ++i) {\n // Fetch the item.\n let item = availableItems[i];\n // Skip items which are already consumed.\n if (!item) {\n continue;\n }\n // Skip items which do not match the element.\n if (!Selector.matches(target, item.selector)) {\n continue;\n }\n // Add the matched item to the result for this DOM level.\n matches.push(item);\n // Mark the item as consumed.\n availableItems[i] = null;\n }\n // Sort the matches for this level and add them to the results.\n if (matches.length !== 0) {\n if (groupByTarget) {\n matches.sort(sortBySelector ? itemCmp : itemCmpRank);\n }\n result.push(...matches);\n }\n // Stop searching at the limits of the DOM range.\n if (target === currentTarget) {\n break;\n }\n // Step to the parent DOM level.\n target = target.parentElement;\n }\n if (!groupByTarget) {\n result.sort(sortBySelector ? itemCmp : itemCmpRank);\n }\n // Return the matched and sorted results.\n return result;\n }\n Private.matchItems = matchItems;\n /**\n * Validate the selector for a menu item.\n *\n * This returns the validated selector, or throws if the selector is\n * invalid or contains commas.\n */\n function validateSelector(selector) {\n if (selector.indexOf(',') !== -1) {\n throw new Error(`Selector cannot contain commas: ${selector}`);\n }\n if (!Selector.isValid(selector)) {\n throw new Error(`Invalid selector: ${selector}`);\n }\n return selector;\n }\n /**\n * A sort comparison function for a context menu item by ranks.\n */\n function itemCmpRank(a, b) {\n // Sort based on rank.\n let r1 = a.rank;\n let r2 = b.rank;\n if (r1 !== r2) {\n return r1 < r2 ? -1 : 1; // Infinity-safe\n }\n // When all else fails, sort by item id.\n return a.id - b.id;\n }\n /**\n * A sort comparison function for a context menu item by selectors and ranks.\n */\n function itemCmp(a, b) {\n // Sort first based on selector specificity.\n let s1 = Selector.calculateSpecificity(a.selector);\n let s2 = Selector.calculateSpecificity(b.selector);\n if (s1 !== s2) {\n return s2 - s1;\n }\n // If specificities are equal\n return itemCmpRank(a, b);\n }\n})(Private$8 || (Private$8 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\nconst ARROW_KEYS = [\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowDown',\n 'Home',\n 'End'\n];\n/**\n * A widget which displays titles as a single row or column of tabs.\n *\n * #### Notes\n * If CSS transforms are used to rotate nodes for vertically oriented\n * text, then tab dragging will not work correctly. The `tabsMovable`\n * property should be set to `false` when rotating nodes from CSS.\n */\nclass TabBar extends Widget {\n /**\n * Construct a new tab bar.\n *\n * @param options - The options for initializing the tab bar.\n */\n constructor(options = {}) {\n super({ node: Private$7.createNode() });\n this._currentIndex = -1;\n this._titles = [];\n this._titlesEditable = false;\n this._previousTitle = null;\n this._dragData = null;\n this._addButtonEnabled = false;\n this._tabMoved = new Signal(this);\n this._currentChanged = new Signal(this);\n this._addRequested = new Signal(this);\n this._tabCloseRequested = new Signal(this);\n this._tabDetachRequested = new Signal(this);\n this._tabActivateRequested = new Signal(this);\n this.addClass('lm-TabBar');\n this.contentNode.setAttribute('role', 'tablist');\n this.setFlag(Widget.Flag.DisallowLayout);\n this._document = options.document || document;\n this.tabsMovable = options.tabsMovable || false;\n this.titlesEditable = options.titlesEditable || false;\n this.allowDeselect = options.allowDeselect || false;\n this.addButtonEnabled = options.addButtonEnabled || false;\n this.insertBehavior = options.insertBehavior || 'select-tab-if-needed';\n this.name = options.name || '';\n this.orientation = options.orientation || 'horizontal';\n this.removeBehavior = options.removeBehavior || 'select-tab-after';\n this.renderer = options.renderer || TabBar.defaultRenderer;\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._releaseMouse();\n this._titles.length = 0;\n this._previousTitle = null;\n super.dispose();\n }\n /**\n * A signal emitted when the current tab is changed.\n *\n * #### Notes\n * This signal is emitted when the currently selected tab is changed\n * either through user or programmatic interaction.\n *\n * Notably, this signal is not emitted when the index of the current\n * tab changes due to tabs being inserted, removed, or moved. It is\n * only emitted when the actual current tab node is changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * A signal emitted when a tab is moved by the user.\n *\n * #### Notes\n * This signal is emitted when a tab is moved by user interaction.\n *\n * This signal is not emitted when a tab is moved programmatically.\n */\n get tabMoved() {\n return this._tabMoved;\n }\n /**\n * A signal emitted when a tab is clicked by the user.\n *\n * #### Notes\n * If the clicked tab is not the current tab, the clicked tab will be\n * made current and the `currentChanged` signal will be emitted first.\n *\n * This signal is emitted even if the clicked tab is the current tab.\n */\n get tabActivateRequested() {\n return this._tabActivateRequested;\n }\n /**\n * A signal emitted when the tab bar add button is clicked.\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * A signal emitted when a tab close icon is clicked.\n *\n * #### Notes\n * This signal is not emitted unless the tab title is `closable`.\n */\n get tabCloseRequested() {\n return this._tabCloseRequested;\n }\n /**\n * A signal emitted when a tab is dragged beyond the detach threshold.\n *\n * #### Notes\n * This signal is emitted when the user drags a tab with the mouse,\n * and mouse is dragged beyond the detach threshold.\n *\n * The consumer of the signal should call `releaseMouse` and remove\n * the tab in order to complete the detach.\n *\n * This signal is only emitted once per drag cycle.\n */\n get tabDetachRequested() {\n return this._tabDetachRequested;\n }\n /**\n * The document to use with the tab bar.\n *\n * The default is the global `document` instance.\n */\n get document() {\n return this._document;\n }\n /**\n * Whether the titles can be user-edited.\n *\n */\n get titlesEditable() {\n return this._titlesEditable;\n }\n /**\n * Set whether titles can be user edited.\n *\n */\n set titlesEditable(value) {\n this._titlesEditable = value;\n }\n /**\n * Get the currently selected title.\n *\n * #### Notes\n * This will be `null` if no tab is selected.\n */\n get currentTitle() {\n return this._titles[this._currentIndex] || null;\n }\n /**\n * Set the currently selected title.\n *\n * #### Notes\n * If the title does not exist, the title will be set to `null`.\n */\n set currentTitle(value) {\n this.currentIndex = value ? this._titles.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently selected tab.\n *\n * #### Notes\n * This will be `-1` if no tab is selected.\n */\n get currentIndex() {\n return this._currentIndex;\n }\n /**\n * Set the index of the currently selected tab.\n *\n * #### Notes\n * If the value is out of range, the index will be set to `-1`.\n */\n set currentIndex(value) {\n // Adjust for an out of range index.\n if (value < 0 || value >= this._titles.length) {\n value = -1;\n }\n // Bail early if the index will not change.\n if (this._currentIndex === value) {\n return;\n }\n // Look up the previous index and title.\n let pi = this._currentIndex;\n let pt = this._titles[pi] || null;\n // Look up the current index and title.\n let ci = value;\n let ct = this._titles[ci] || null;\n // Update the current index and previous title.\n this._currentIndex = ci;\n this._previousTitle = pt;\n // Schedule an update of the tabs.\n this.update();\n // Emit the current changed signal.\n this._currentChanged.emit({\n previousIndex: pi,\n previousTitle: pt,\n currentIndex: ci,\n currentTitle: ct\n });\n }\n /**\n * Get the name of the tab bar.\n */\n get name() {\n return this._name;\n }\n /**\n * Set the name of the tab bar.\n */\n set name(value) {\n this._name = value;\n if (value) {\n this.contentNode.setAttribute('aria-label', value);\n }\n else {\n this.contentNode.removeAttribute('aria-label');\n }\n }\n /**\n * Get the orientation of the tab bar.\n *\n * #### Notes\n * This controls whether the tabs are arranged in a row or column.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the orientation of the tab bar.\n *\n * #### Notes\n * This controls whether the tabs are arranged in a row or column.\n */\n set orientation(value) {\n // Do nothing if the orientation does not change.\n if (this._orientation === value) {\n return;\n }\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Toggle the orientation values.\n this._orientation = value;\n this.dataset['orientation'] = value;\n this.contentNode.setAttribute('aria-orientation', value);\n }\n /**\n * Whether the add button is enabled.\n */\n get addButtonEnabled() {\n return this._addButtonEnabled;\n }\n /**\n * Set whether the add button is enabled.\n */\n set addButtonEnabled(value) {\n // Do nothing if the value does not change.\n if (this._addButtonEnabled === value) {\n return;\n }\n this._addButtonEnabled = value;\n if (value) {\n this.addButtonNode.classList.remove('lm-mod-hidden');\n }\n else {\n this.addButtonNode.classList.add('lm-mod-hidden');\n }\n }\n /**\n * A read-only array of the titles in the tab bar.\n */\n get titles() {\n return this._titles;\n }\n /**\n * The tab bar content node.\n *\n * #### Notes\n * This is the node which holds the tab nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-TabBar-content')[0];\n }\n /**\n * The tab bar add button node.\n *\n * #### Notes\n * This is the node which holds the add button.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get addButtonNode() {\n return this.node.getElementsByClassName('lm-TabBar-addButton')[0];\n }\n /**\n * Add a tab to the end of the tab bar.\n *\n * @param value - The title which holds the data for the tab,\n * or an options object to convert to a title.\n *\n * @returns The title object added to the tab bar.\n *\n * #### Notes\n * If the title is already added to the tab bar, it will be moved.\n */\n addTab(value) {\n return this.insertTab(this._titles.length, value);\n }\n /**\n * Insert a tab into the tab bar at the specified index.\n *\n * @param index - The index at which to insert the tab.\n *\n * @param value - The title which holds the data for the tab,\n * or an options object to convert to a title.\n *\n * @returns The title object added to the tab bar.\n *\n * #### Notes\n * The index will be clamped to the bounds of the tabs.\n *\n * If the title is already added to the tab bar, it will be moved.\n */\n insertTab(index, value) {\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Coerce the value to a title.\n let title = Private$7.asTitle(value);\n // Look up the index of the title.\n let i = this._titles.indexOf(title);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._titles.length));\n // If the title is not in the array, insert it.\n if (i === -1) {\n // Insert the title into the array.\n ArrayExt.insert(this._titles, j, title);\n // Connect to the title changed signal.\n title.changed.connect(this._onTitleChanged, this);\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the insert.\n this._adjustCurrentForInsert(j, title);\n // Return the title added to the tab bar.\n return title;\n }\n // Otherwise, the title exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._titles.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return title;\n }\n // Move the title to the new location.\n ArrayExt.move(this._titles, i, j);\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the move.\n this._adjustCurrentForMove(i, j);\n // Return the title added to the tab bar.\n return title;\n }\n /**\n * Remove a tab from the tab bar.\n *\n * @param title - The title for the tab to remove.\n *\n * #### Notes\n * This is a no-op if the title is not in the tab bar.\n */\n removeTab(title) {\n this.removeTabAt(this._titles.indexOf(title));\n }\n /**\n * Remove the tab at a given index from the tab bar.\n *\n * @param index - The index of the tab to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeTabAt(index) {\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Remove the title from the array.\n let title = ArrayExt.removeAt(this._titles, index);\n // Bail if the index is out of range.\n if (!title) {\n return;\n }\n // Disconnect from the title changed signal.\n title.changed.disconnect(this._onTitleChanged, this);\n // Clear the previous title if it's being removed.\n if (title === this._previousTitle) {\n this._previousTitle = null;\n }\n // Schedule an update of the tabs.\n this.update();\n // Adjust the current index for the remove.\n this._adjustCurrentForRemove(index, title);\n }\n /**\n * Remove all tabs from the tab bar.\n */\n clearTabs() {\n // Bail if there is nothing to remove.\n if (this._titles.length === 0) {\n return;\n }\n // Release the mouse before making any changes.\n this._releaseMouse();\n // Disconnect from the title changed signals.\n for (let title of this._titles) {\n title.changed.disconnect(this._onTitleChanged, this);\n }\n // Get the current index and title.\n let pi = this.currentIndex;\n let pt = this.currentTitle;\n // Reset the current index and previous title.\n this._currentIndex = -1;\n this._previousTitle = null;\n // Clear the title array.\n this._titles.length = 0;\n // Schedule an update of the tabs.\n this.update();\n // If no tab was selected, there's nothing else to do.\n if (pi === -1) {\n return;\n }\n // Emit the current changed signal.\n this._currentChanged.emit({\n previousIndex: pi,\n previousTitle: pt,\n currentIndex: -1,\n currentTitle: null\n });\n }\n /**\n * Release the mouse and restore the non-dragged tab positions.\n *\n * #### Notes\n * This will cause the tab bar to stop handling mouse events and to\n * restore the tabs to their non-dragged positions.\n */\n releaseMouse() {\n this._releaseMouse();\n }\n /**\n * Handle the DOM events for the tab bar.\n *\n * @param event - The DOM event sent to the tab bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the tab bar's DOM node.\n *\n * This should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'dblclick':\n this._evtDblClick(event);\n break;\n case 'keydown':\n event.eventPhase === Event.CAPTURING_PHASE\n ? this._evtKeyDownCapturing(event)\n : this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('pointerdown', this);\n this.node.addEventListener('dblclick', this);\n this.node.addEventListener('keydown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('pointerdown', this);\n this.node.removeEventListener('dblclick', this);\n this.node.removeEventListener('keydown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n var _a;\n let titles = this._titles;\n let renderer = this.renderer;\n let currentTitle = this.currentTitle;\n let content = new Array(titles.length);\n // Keep the tabindex=\"0\" attribute to the tab which handled it before the update.\n // If the add button handles it, no need to do anything. If no element of the tab\n // bar handles it, set it on the current or the first tab to ensure one element\n // handles it after update.\n const tabHandlingTabindex = (_a = this._getCurrentTabindex()) !== null && _a !== void 0 ? _a : (this._currentIndex > -1 ? this._currentIndex : 0);\n for (let i = 0, n = titles.length; i < n; ++i) {\n let title = titles[i];\n let current = title === currentTitle;\n let zIndex = current ? n : n - i - 1;\n let tabIndex = tabHandlingTabindex === i ? 0 : -1;\n content[i] = renderer.renderTab({ title, current, zIndex, tabIndex });\n }\n VirtualDOM.render(content, this.contentNode);\n }\n /**\n * Get the index of the tab which handles tabindex=\"0\".\n * If the add button handles tabindex=\"0\", -1 is returned.\n * If none of the previous handles tabindex=\"0\", null is returned.\n */\n _getCurrentTabindex() {\n let index = null;\n const elemTabindex = this.contentNode.querySelector('li[tabindex=\"0\"]');\n if (elemTabindex) {\n index = [...this.contentNode.children].indexOf(elemTabindex);\n }\n else if (this._addButtonEnabled &&\n this.addButtonNode.getAttribute('tabindex') === '0') {\n index = -1;\n }\n return index;\n }\n /**\n * Handle the `'dblclick'` event for the tab bar.\n */\n _evtDblClick(event) {\n // Do nothing if titles are not editable\n if (!this.titlesEditable) {\n return;\n }\n let tabs = this.contentNode.children;\n // Find the index of the targeted tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the press is not on a tab.\n if (index === -1) {\n return;\n }\n let title = this.titles[index];\n let label = tabs[index].querySelector('.lm-TabBar-tabLabel');\n if (label && label.contains(event.target)) {\n let value = title.label || '';\n // Clear the label element\n let oldValue = label.innerHTML;\n label.innerHTML = '';\n let input = document.createElement('input');\n input.classList.add('lm-TabBar-tabInput');\n input.value = value;\n label.appendChild(input);\n let onblur = () => {\n input.removeEventListener('blur', onblur);\n label.innerHTML = oldValue;\n this.node.addEventListener('keydown', this);\n };\n input.addEventListener('dblclick', (event) => event.stopPropagation());\n input.addEventListener('blur', onblur);\n input.addEventListener('keydown', (event) => {\n if (event.key === 'Enter') {\n if (input.value !== '') {\n title.label = title.caption = input.value;\n }\n onblur();\n }\n else if (event.key === 'Escape') {\n onblur();\n }\n });\n this.node.removeEventListener('keydown', this);\n input.select();\n input.focus();\n if (label.children.length > 0) {\n label.children[0].focus();\n }\n }\n }\n /**\n * Handle the `'keydown'` event for the tab bar at capturing phase.\n */\n _evtKeyDownCapturing(event) {\n if (event.eventPhase !== Event.CAPTURING_PHASE) {\n return;\n }\n // Stop all input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse if `Escape` is pressed.\n if (event.key === 'Escape') {\n this._releaseMouse();\n }\n }\n /**\n * Handle the `'keydown'` event for the tab bar at target phase.\n */\n _evtKeyDown(event) {\n var _a, _b, _c;\n // Allow for navigation using tab key\n if (event.key === 'Tab' || event.eventPhase === Event.CAPTURING_PHASE) {\n return;\n }\n // Check if Enter or Spacebar key has been pressed and open that tab\n if (event.key === 'Enter' ||\n event.key === 'Spacebar' ||\n event.key === ' ') {\n // Get focus element that is in focus by the tab key\n const focusedElement = document.activeElement;\n // Test first if the focus is on the add button node\n if (this.addButtonEnabled &&\n this.addButtonNode.contains(focusedElement)) {\n event.preventDefault();\n event.stopPropagation();\n this._addRequested.emit();\n }\n else {\n const index = ArrayExt.findFirstIndex(this.contentNode.children, tab => tab.contains(focusedElement));\n if (index >= 0) {\n event.preventDefault();\n event.stopPropagation();\n this.currentIndex = index;\n }\n }\n // Handle the arrow keys to switch tabs.\n }\n else if (ARROW_KEYS.includes(event.key)) {\n // Create a list of all focusable elements in the tab bar.\n const focusable = [...this.contentNode.children];\n if (this.addButtonEnabled) {\n focusable.push(this.addButtonNode);\n }\n // If the tab bar contains only one element, nothing to do.\n if (focusable.length <= 1) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n // Get the current focused element.\n let focusedIndex = focusable.indexOf(document.activeElement);\n if (focusedIndex === -1) {\n focusedIndex = this._currentIndex;\n }\n // Find the next element to focus on.\n let nextFocused;\n if ((event.key === 'ArrowRight' && this._orientation === 'horizontal') ||\n (event.key === 'ArrowDown' && this._orientation === 'vertical')) {\n nextFocused = (_a = focusable[focusedIndex + 1]) !== null && _a !== void 0 ? _a : focusable[0];\n }\n else if ((event.key === 'ArrowLeft' && this._orientation === 'horizontal') ||\n (event.key === 'ArrowUp' && this._orientation === 'vertical')) {\n nextFocused =\n (_b = focusable[focusedIndex - 1]) !== null && _b !== void 0 ? _b : focusable[focusable.length - 1];\n }\n else if (event.key === 'Home') {\n nextFocused = focusable[0];\n }\n else if (event.key === 'End') {\n nextFocused = focusable[focusable.length - 1];\n }\n // Change the focused element and the tabindex value.\n if (nextFocused) {\n (_c = focusable[focusedIndex]) === null || _c === void 0 ? void 0 : _c.setAttribute('tabindex', '-1');\n nextFocused === null || nextFocused === void 0 ? void 0 : nextFocused.setAttribute('tabindex', '0');\n nextFocused.focus();\n }\n }\n }\n /**\n * Handle the `'pointerdown'` event for the tab bar.\n */\n _evtPointerDown(event) {\n // Do nothing if it's not a left or middle mouse press.\n if (event.button !== 0 && event.button !== 1) {\n return;\n }\n // Do nothing if a drag is in progress.\n if (this._dragData) {\n return;\n }\n // Do nothing if a title editable input was clicked.\n if (event.target.classList.contains('lm-TabBar-tabInput')) {\n return;\n }\n // Check if the add button was clicked.\n let addButtonClicked = this.addButtonEnabled &&\n this.addButtonNode.contains(event.target);\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Find the index of the pressed tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the press is not on a tab or the add button.\n if (index === -1 && !addButtonClicked) {\n return;\n }\n // Pressing on a tab stops the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Initialize the non-measured parts of the drag data.\n this._dragData = {\n tab: tabs[index],\n index: index,\n pressX: event.clientX,\n pressY: event.clientY,\n tabPos: -1,\n tabSize: -1,\n tabPressPos: -1,\n targetIndex: -1,\n tabLayout: null,\n contentRect: null,\n override: null,\n dragActive: false,\n dragAborted: false,\n detachRequested: false\n };\n // Add the document pointer up listener.\n this.document.addEventListener('pointerup', this, true);\n // Do nothing else if the middle button or add button is clicked.\n if (event.button === 1 || addButtonClicked) {\n return;\n }\n // Do nothing else if the close icon is clicked.\n let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n if (icon && icon.contains(event.target)) {\n return;\n }\n // Add the extra listeners if the tabs are movable.\n if (this.tabsMovable) {\n this.document.addEventListener('pointermove', this, true);\n this.document.addEventListener('keydown', this, true);\n this.document.addEventListener('contextmenu', this, true);\n }\n // Update the current index as appropriate.\n if (this.allowDeselect && this.currentIndex === index) {\n this.currentIndex = -1;\n }\n else {\n this.currentIndex = index;\n }\n // Do nothing else if there is no current tab.\n if (this.currentIndex === -1) {\n return;\n }\n // Emit the tab activate request signal.\n this._tabActivateRequested.emit({\n index: this.currentIndex,\n title: this.currentTitle\n });\n }\n /**\n * Handle the `'pointermove'` event for the tab bar.\n */\n _evtPointerMove(event) {\n // Do nothing if no drag is in progress.\n let data = this._dragData;\n if (!data) {\n return;\n }\n // Suppress the event during a drag.\n event.preventDefault();\n event.stopPropagation();\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Bail early if the drag threshold has not been met.\n if (!data.dragActive && !Private$7.dragExceeded(data, event)) {\n return;\n }\n // Activate the drag if necessary.\n if (!data.dragActive) {\n // Fill in the rest of the drag data measurements.\n let tabRect = data.tab.getBoundingClientRect();\n if (this._orientation === 'horizontal') {\n data.tabPos = data.tab.offsetLeft;\n data.tabSize = tabRect.width;\n data.tabPressPos = data.pressX - tabRect.left;\n }\n else {\n data.tabPos = data.tab.offsetTop;\n data.tabSize = tabRect.height;\n data.tabPressPos = data.pressY - tabRect.top;\n }\n data.tabPressOffset = {\n x: data.pressX - tabRect.left,\n y: data.pressY - tabRect.top\n };\n data.tabLayout = Private$7.snapTabLayout(tabs, this._orientation);\n data.contentRect = this.contentNode.getBoundingClientRect();\n data.override = Drag.overrideCursor('default');\n // Add the dragging style classes.\n data.tab.classList.add('lm-mod-dragging');\n this.addClass('lm-mod-dragging');\n // Mark the drag as active.\n data.dragActive = true;\n }\n // Emit the detach requested signal if the threshold is exceeded.\n if (!data.detachRequested && Private$7.detachExceeded(data, event)) {\n // Only emit the signal once per drag cycle.\n data.detachRequested = true;\n // Setup the arguments for the signal.\n let index = data.index;\n let clientX = event.clientX;\n let clientY = event.clientY;\n let tab = tabs[index];\n let title = this._titles[index];\n // Emit the tab detach requested signal.\n this._tabDetachRequested.emit({\n index,\n title,\n tab,\n clientX,\n clientY,\n offset: data.tabPressOffset\n });\n // Bail if the signal handler aborted the drag.\n if (data.dragAborted) {\n return;\n }\n }\n // Update the positions of the tabs.\n Private$7.layoutTabs(tabs, data, event, this._orientation);\n }\n /**\n * Handle the `'pointerup'` event for the document.\n */\n _evtPointerUp(event) {\n // Do nothing if it's not a left or middle mouse release.\n if (event.button !== 0 && event.button !== 1) {\n return;\n }\n // Do nothing if no drag is in progress.\n const data = this._dragData;\n if (!data) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Remove the extra mouse event listeners.\n this.document.removeEventListener('pointermove', this, true);\n this.document.removeEventListener('pointerup', this, true);\n this.document.removeEventListener('keydown', this, true);\n this.document.removeEventListener('contextmenu', this, true);\n // Handle a release when the drag is not active.\n if (!data.dragActive) {\n // Clear the drag data.\n this._dragData = null;\n // Handle clicking the add button.\n let addButtonClicked = this.addButtonEnabled &&\n this.addButtonNode.contains(event.target);\n if (addButtonClicked) {\n this._addRequested.emit(undefined);\n return;\n }\n // Lookup the tab nodes.\n let tabs = this.contentNode.children;\n // Find the index of the released tab.\n let index = ArrayExt.findFirstIndex(tabs, tab => {\n return ElementExt.hitTest(tab, event.clientX, event.clientY);\n });\n // Do nothing if the release is not on the original pressed tab.\n if (index !== data.index) {\n return;\n }\n // Ignore the release if the title is not closable.\n let title = this._titles[index];\n if (!title.closable) {\n return;\n }\n // Emit the close requested signal if the middle button is released.\n if (event.button === 1) {\n this._tabCloseRequested.emit({ index, title });\n return;\n }\n // Emit the close requested signal if the close icon was released.\n let icon = tabs[index].querySelector(this.renderer.closeIconSelector);\n if (icon && icon.contains(event.target)) {\n this._tabCloseRequested.emit({ index, title });\n return;\n }\n // Otherwise, there is nothing left to do.\n return;\n }\n // Do nothing if the left button is not released.\n if (event.button !== 0) {\n return;\n }\n // Position the tab at its final resting position.\n Private$7.finalizeTabPosition(data, this._orientation);\n // Remove the dragging class from the tab so it can be transitioned.\n data.tab.classList.remove('lm-mod-dragging');\n // Parse the transition duration for releasing the tab.\n let duration = Private$7.parseTransitionDuration(data.tab);\n // Complete the release on a timer to allow the tab to transition.\n setTimeout(() => {\n // Do nothing if the drag has been aborted.\n if (data.dragAborted) {\n return;\n }\n // Clear the drag data reference.\n this._dragData = null;\n // Reset the positions of the tabs.\n Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n // Clear the cursor grab.\n data.override.dispose();\n // Remove the remaining dragging style.\n this.removeClass('lm-mod-dragging');\n // If the tab was not moved, there is nothing else to do.\n let i = data.index;\n let j = data.targetIndex;\n if (j === -1 || i === j) {\n return;\n }\n // Move the title to the new locations.\n ArrayExt.move(this._titles, i, j);\n // Adjust the current index for the move.\n this._adjustCurrentForMove(i, j);\n // Emit the tab moved signal.\n this._tabMoved.emit({\n fromIndex: i,\n toIndex: j,\n title: this._titles[j]\n });\n // Update the tabs immediately to prevent flicker.\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n }, duration);\n }\n /**\n * Release the mouse and restore the non-dragged tab positions.\n */\n _releaseMouse() {\n // Do nothing if no drag is in progress.\n let data = this._dragData;\n if (!data) {\n return;\n }\n // Clear the drag data reference.\n this._dragData = null;\n // Remove the extra document event listeners.\n this.document.removeEventListener('pointermove', this, true);\n this.document.removeEventListener('pointerup', this, true);\n this.document.removeEventListener('keydown', this, true);\n this.document.removeEventListener('contextmenu', this, true);\n // Indicate the drag has been aborted. This allows the mouse\n // event handlers to return early when the drag is canceled.\n data.dragAborted = true;\n // If the drag is not active, there's nothing more to do.\n if (!data.dragActive) {\n return;\n }\n // Reset the tabs to their non-dragged positions.\n Private$7.resetTabPositions(this.contentNode.children, this._orientation);\n // Clear the cursor override.\n data.override.dispose();\n // Clear the dragging style classes.\n data.tab.classList.remove('lm-mod-dragging');\n this.removeClass('lm-mod-dragging');\n }\n /**\n * Adjust the current index for a tab insert operation.\n *\n * This method accounts for the tab bar's insertion behavior when\n * adjusting the current index and emitting the changed signal.\n */\n _adjustCurrentForInsert(i, title) {\n // Lookup commonly used variables.\n let ct = this.currentTitle;\n let ci = this._currentIndex;\n let bh = this.insertBehavior;\n // TODO: do we need to do an update to update the aria-selected attribute?\n // Handle the behavior where the new tab is always selected,\n // or the behavior where the new tab is selected if needed.\n if (bh === 'select-tab' || (bh === 'select-tab-if-needed' && ci === -1)) {\n this._currentIndex = i;\n this._previousTitle = ct;\n this._currentChanged.emit({\n previousIndex: ci,\n previousTitle: ct,\n currentIndex: i,\n currentTitle: title\n });\n return;\n }\n // Otherwise, silently adjust the current index if needed.\n if (ci >= i) {\n this._currentIndex++;\n }\n }\n /**\n * Adjust the current index for a tab move operation.\n *\n * This method will not cause the actual current tab to change.\n * It silently adjusts the index to account for the given move.\n */\n _adjustCurrentForMove(i, j) {\n if (this._currentIndex === i) {\n this._currentIndex = j;\n }\n else if (this._currentIndex < i && this._currentIndex >= j) {\n this._currentIndex++;\n }\n else if (this._currentIndex > i && this._currentIndex <= j) {\n this._currentIndex--;\n }\n }\n /**\n * Adjust the current index for a tab remove operation.\n *\n * This method accounts for the tab bar's remove behavior when\n * adjusting the current index and emitting the changed signal.\n */\n _adjustCurrentForRemove(i, title) {\n // Lookup commonly used variables.\n let ci = this._currentIndex;\n let bh = this.removeBehavior;\n // Silently adjust the index if the current tab is not removed.\n if (ci !== i) {\n if (ci > i) {\n this._currentIndex--;\n }\n return;\n }\n // TODO: do we need to do an update to adjust the aria-selected value?\n // No tab gets selected if the tab bar is empty.\n if (this._titles.length === 0) {\n this._currentIndex = -1;\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: -1,\n currentTitle: null\n });\n return;\n }\n // Handle behavior where the next sibling tab is selected.\n if (bh === 'select-tab-after') {\n this._currentIndex = Math.min(i, this._titles.length - 1);\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Handle behavior where the previous sibling tab is selected.\n if (bh === 'select-tab-before') {\n this._currentIndex = Math.max(0, i - 1);\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Handle behavior where the previous history tab is selected.\n if (bh === 'select-previous-tab') {\n if (this._previousTitle) {\n this._currentIndex = this._titles.indexOf(this._previousTitle);\n this._previousTitle = null;\n }\n else {\n this._currentIndex = Math.min(i, this._titles.length - 1);\n }\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: this._currentIndex,\n currentTitle: this.currentTitle\n });\n return;\n }\n // Otherwise, no tab gets selected.\n this._currentIndex = -1;\n this._currentChanged.emit({\n previousIndex: i,\n previousTitle: title,\n currentIndex: -1,\n currentTitle: null\n });\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged(sender) {\n this.update();\n }\n}\n/**\n * The namespace for the `TabBar` class statics.\n */\n(function (TabBar) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n constructor() {\n /**\n * A selector which matches the close icon node in a tab.\n */\n this.closeIconSelector = '.lm-TabBar-tabCloseIcon';\n this._tabID = 0;\n this._tabKeys = new WeakMap();\n this._uuid = ++Renderer._nInstance;\n }\n /**\n * Render the virtual element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab.\n */\n renderTab(data) {\n let title = data.title.caption;\n let key = this.createTabKey(data);\n let id = key;\n let style = this.createTabStyle(data);\n let className = this.createTabClass(data);\n let dataset = this.createTabDataset(data);\n let aria = this.createTabARIA(data);\n if (data.title.closable) {\n return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data), this.renderCloseIcon(data));\n }\n else {\n return h.li({ id, key, className, title, style, dataset, ...aria }, this.renderIcon(data), this.renderLabel(data));\n }\n }\n /**\n * Render the icon element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab icon.\n */\n renderIcon(data) {\n const { title } = data;\n let className = this.createIconClass(data);\n // If title.icon is undefined, it will be ignored.\n return h.div({ className }, title.icon, title.iconLabel);\n }\n /**\n * Render the label element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab label.\n */\n renderLabel(data) {\n return h.div({ className: 'lm-TabBar-tabLabel' }, data.title.label);\n }\n /**\n * Render the close icon element for a tab.\n *\n * @param data - The data to use for rendering the tab.\n *\n * @returns A virtual element representing the tab close icon.\n */\n renderCloseIcon(data) {\n return h.div({ className: 'lm-TabBar-tabCloseIcon' });\n }\n /**\n * Create a unique render key for the tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The unique render key for the tab.\n *\n * #### Notes\n * This method caches the key against the tab title the first time\n * the key is generated. This enables efficient rendering of moved\n * tabs and avoids subtle hover style artifacts.\n */\n createTabKey(data) {\n let key = this._tabKeys.get(data.title);\n if (key === undefined) {\n key = `tab-key-${this._uuid}-${this._tabID++}`;\n this._tabKeys.set(data.title, key);\n }\n return key;\n }\n /**\n * Create the inline style object for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The inline style data for the tab.\n */\n createTabStyle(data) {\n return { zIndex: `${data.zIndex}` };\n }\n /**\n * Create the class name for the tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The full class name for the tab.\n */\n createTabClass(data) {\n let name = 'lm-TabBar-tab';\n if (data.title.className) {\n name += ` ${data.title.className}`;\n }\n if (data.title.closable) {\n name += ' lm-mod-closable';\n }\n if (data.current) {\n name += ' lm-mod-current';\n }\n return name;\n }\n /**\n * Create the dataset for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The dataset for the tab.\n */\n createTabDataset(data) {\n return data.title.dataset;\n }\n /**\n * Create the ARIA attributes for a tab.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The ARIA attributes for the tab.\n */\n createTabARIA(data) {\n var _a;\n return {\n role: 'tab',\n 'aria-selected': data.current.toString(),\n tabindex: `${(_a = data.tabIndex) !== null && _a !== void 0 ? _a : '-1'}`\n };\n }\n /**\n * Create the class name for the tab icon.\n *\n * @param data - The data to use for the tab.\n *\n * @returns The full class name for the tab icon.\n */\n createIconClass(data) {\n let name = 'lm-TabBar-tabIcon';\n let extra = data.title.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n }\n Renderer._nInstance = 0;\n TabBar.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n TabBar.defaultRenderer = new Renderer();\n /**\n * A selector which matches the add button node in the tab bar.\n */\n TabBar.addButtonSelector = '.lm-TabBar-addButton';\n})(TabBar || (TabBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$7;\n(function (Private) {\n /**\n * The start drag distance threshold.\n */\n Private.DRAG_THRESHOLD = 5;\n /**\n * The detach distance threshold.\n */\n Private.DETACH_THRESHOLD = 20;\n /**\n * Create the DOM node for a tab bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.setAttribute('role', 'tablist');\n content.className = 'lm-TabBar-content';\n node.appendChild(content);\n let add = document.createElement('div');\n add.className = 'lm-TabBar-addButton lm-mod-hidden';\n add.setAttribute('tabindex', '-1');\n add.setAttribute('role', 'button');\n node.appendChild(add);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Coerce a title or options into a real title.\n */\n function asTitle(value) {\n return value instanceof Title ? value : new Title(value);\n }\n Private.asTitle = asTitle;\n /**\n * Parse the transition duration for a tab node.\n */\n function parseTransitionDuration(tab) {\n let style = window.getComputedStyle(tab);\n return 1000 * (parseFloat(style.transitionDuration) || 0);\n }\n Private.parseTransitionDuration = parseTransitionDuration;\n /**\n * Get a snapshot of the current tab layout values.\n */\n function snapTabLayout(tabs, orientation) {\n let layout = new Array(tabs.length);\n for (let i = 0, n = tabs.length; i < n; ++i) {\n let node = tabs[i];\n let style = window.getComputedStyle(node);\n if (orientation === 'horizontal') {\n layout[i] = {\n pos: node.offsetLeft,\n size: node.offsetWidth,\n margin: parseFloat(style.marginLeft) || 0\n };\n }\n else {\n layout[i] = {\n pos: node.offsetTop,\n size: node.offsetHeight,\n margin: parseFloat(style.marginTop) || 0\n };\n }\n }\n return layout;\n }\n Private.snapTabLayout = snapTabLayout;\n /**\n * Test if the event exceeds the drag threshold.\n */\n function dragExceeded(data, event) {\n let dx = Math.abs(event.clientX - data.pressX);\n let dy = Math.abs(event.clientY - data.pressY);\n return dx >= Private.DRAG_THRESHOLD || dy >= Private.DRAG_THRESHOLD;\n }\n Private.dragExceeded = dragExceeded;\n /**\n * Test if the event exceeds the drag detach threshold.\n */\n function detachExceeded(data, event) {\n let rect = data.contentRect;\n return (event.clientX < rect.left - Private.DETACH_THRESHOLD ||\n event.clientX >= rect.right + Private.DETACH_THRESHOLD ||\n event.clientY < rect.top - Private.DETACH_THRESHOLD ||\n event.clientY >= rect.bottom + Private.DETACH_THRESHOLD);\n }\n Private.detachExceeded = detachExceeded;\n /**\n * Update the relative tab positions and computed target index.\n */\n function layoutTabs(tabs, data, event, orientation) {\n // Compute the orientation-sensitive values.\n let pressPos;\n let localPos;\n let clientPos;\n let clientSize;\n if (orientation === 'horizontal') {\n pressPos = data.pressX;\n localPos = event.clientX - data.contentRect.left;\n clientPos = event.clientX;\n clientSize = data.contentRect.width;\n }\n else {\n pressPos = data.pressY;\n localPos = event.clientY - data.contentRect.top;\n clientPos = event.clientY;\n clientSize = data.contentRect.height;\n }\n // Compute the target data.\n let targetIndex = data.index;\n let targetPos = localPos - data.tabPressPos;\n let targetEnd = targetPos + data.tabSize;\n // Update the relative tab positions.\n for (let i = 0, n = tabs.length; i < n; ++i) {\n let pxPos;\n let layout = data.tabLayout[i];\n let threshold = layout.pos + (layout.size >> 1);\n if (i < data.index && targetPos < threshold) {\n pxPos = `${data.tabSize + data.tabLayout[i + 1].margin}px`;\n targetIndex = Math.min(targetIndex, i);\n }\n else if (i > data.index && targetEnd > threshold) {\n pxPos = `${-data.tabSize - layout.margin}px`;\n targetIndex = Math.max(targetIndex, i);\n }\n else if (i === data.index) {\n let ideal = clientPos - pressPos;\n let limit = clientSize - (data.tabPos + data.tabSize);\n pxPos = `${Math.max(-data.tabPos, Math.min(ideal, limit))}px`;\n }\n else {\n pxPos = '';\n }\n if (orientation === 'horizontal') {\n tabs[i].style.left = pxPos;\n }\n else {\n tabs[i].style.top = pxPos;\n }\n }\n // Update the computed target index.\n data.targetIndex = targetIndex;\n }\n Private.layoutTabs = layoutTabs;\n /**\n * Position the drag tab at its final resting relative position.\n */\n function finalizeTabPosition(data, orientation) {\n // Compute the orientation-sensitive client size.\n let clientSize;\n if (orientation === 'horizontal') {\n clientSize = data.contentRect.width;\n }\n else {\n clientSize = data.contentRect.height;\n }\n // Compute the ideal final tab position.\n let ideal;\n if (data.targetIndex === data.index) {\n ideal = 0;\n }\n else if (data.targetIndex > data.index) {\n let tgt = data.tabLayout[data.targetIndex];\n ideal = tgt.pos + tgt.size - data.tabSize - data.tabPos;\n }\n else {\n let tgt = data.tabLayout[data.targetIndex];\n ideal = tgt.pos - data.tabPos;\n }\n // Compute the tab position limit.\n let limit = clientSize - (data.tabPos + data.tabSize);\n let final = Math.max(-data.tabPos, Math.min(ideal, limit));\n // Set the final orientation-sensitive position.\n if (orientation === 'horizontal') {\n data.tab.style.left = `${final}px`;\n }\n else {\n data.tab.style.top = `${final}px`;\n }\n }\n Private.finalizeTabPosition = finalizeTabPosition;\n /**\n * Reset the relative positions of the given tabs.\n */\n function resetTabPositions(tabs, orientation) {\n for (const tab of tabs) {\n if (orientation === 'horizontal') {\n tab.style.left = '';\n }\n else {\n tab.style.top = '';\n }\n }\n }\n Private.resetTabPositions = resetTabPositions;\n})(Private$7 || (Private$7 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which provides a flexible docking arrangement.\n *\n * #### Notes\n * The consumer of this layout is responsible for handling all signals\n * from the generated tab bars and managing the visibility of widgets\n * and tab bars as needed.\n */\nclass DockLayout extends Layout {\n /**\n * Construct a new dock layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options) {\n super();\n this._spacing = 4;\n this._dirty = false;\n this._root = null;\n this._box = null;\n this._items = new Map();\n this.renderer = options.renderer;\n if (options.spacing !== undefined) {\n this._spacing = Utils$1.clampDimension(options.spacing);\n }\n this._document = options.document || document;\n this._hiddenMode =\n options.hiddenMode !== undefined\n ? options.hiddenMode\n : Widget.HiddenMode.Display;\n }\n /**\n * Dispose of the resources held by the layout.\n *\n * #### Notes\n * This will clear and dispose all widgets in the layout.\n */\n dispose() {\n // Get an iterator over the widgets in the layout.\n let widgets = this[Symbol.iterator]();\n // Dispose of the layout items.\n this._items.forEach(item => {\n item.dispose();\n });\n // Clear the layout state before disposing the widgets.\n this._box = null;\n this._root = null;\n this._items.clear();\n // Dispose of the widgets contained in the old layout root.\n for (const widget of widgets) {\n widget.dispose();\n }\n // Dispose of the base class.\n super.dispose();\n }\n /**\n * The method for hiding child widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n set hiddenMode(v) {\n if (this._hiddenMode === v) {\n return;\n }\n this._hiddenMode = v;\n for (const bar of this.tabBars()) {\n if (bar.titles.length > 1) {\n for (const title of bar.titles) {\n title.owner.hiddenMode = this._hiddenMode;\n }\n }\n }\n }\n /**\n * Get the inter-element spacing for the dock layout.\n */\n get spacing() {\n return this._spacing;\n }\n /**\n * Set the inter-element spacing for the dock layout.\n */\n set spacing(value) {\n value = Utils$1.clampDimension(value);\n if (this._spacing === value) {\n return;\n }\n this._spacing = value;\n if (!this.parent) {\n return;\n }\n this.parent.fit();\n }\n /**\n * Whether the dock layout is empty.\n */\n get isEmpty() {\n return this._root === null;\n }\n /**\n * Create an iterator over all widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n *\n * #### Notes\n * This iterator includes the generated tab bars.\n */\n [Symbol.iterator]() {\n return this._root ? this._root.iterAllWidgets() : empty();\n }\n /**\n * Create an iterator over the user widgets in the layout.\n *\n * @returns A new iterator over the user widgets in the layout.\n *\n * #### Notes\n * This iterator does not include the generated tab bars.\n */\n widgets() {\n return this._root ? this._root.iterUserWidgets() : empty();\n }\n /**\n * Create an iterator over the selected widgets in the layout.\n *\n * @returns A new iterator over the selected user widgets.\n *\n * #### Notes\n * This iterator yields the widgets corresponding to the current tab\n * of each tab bar in the layout.\n */\n selectedWidgets() {\n return this._root ? this._root.iterSelectedWidgets() : empty();\n }\n /**\n * Create an iterator over the tab bars in the layout.\n *\n * @returns A new iterator over the tab bars in the layout.\n *\n * #### Notes\n * This iterator does not include the user widgets.\n */\n tabBars() {\n return this._root ? this._root.iterTabBars() : empty();\n }\n /**\n * Create an iterator over the handles in the layout.\n *\n * @returns A new iterator over the handles in the layout.\n */\n handles() {\n return this._root ? this._root.iterHandles() : empty();\n }\n /**\n * Move a handle to the given offset position.\n *\n * @param handle - The handle to move.\n *\n * @param offsetX - The desired offset X position of the handle.\n *\n * @param offsetY - The desired offset Y position of the handle.\n *\n * #### Notes\n * If the given handle is not contained in the layout, this is no-op.\n *\n * The handle will be moved as close as possible to the desired\n * position without violating any of the layout constraints.\n *\n * Only one of the coordinates is used depending on the orientation\n * of the handle. This method accepts both coordinates to make it\n * easy to invoke from a mouse move event without needing to know\n * the handle orientation.\n */\n moveHandle(handle, offsetX, offsetY) {\n // Bail early if there is no root or if the handle is hidden.\n let hidden = handle.classList.contains('lm-mod-hidden');\n if (!this._root || hidden) {\n return;\n }\n // Lookup the split node for the handle.\n let data = this._root.findSplitNode(handle);\n if (!data) {\n return;\n }\n // Compute the desired delta movement for the handle.\n let delta;\n if (data.node.orientation === 'horizontal') {\n delta = offsetX - handle.offsetLeft;\n }\n else {\n delta = offsetY - handle.offsetTop;\n }\n // Bail if there is no handle movement.\n if (delta === 0) {\n return;\n }\n // Prevent sibling resizing unless needed.\n data.node.holdSizes();\n // Adjust the sizers to reflect the handle movement.\n BoxEngine.adjust(data.node.sizers, data.index, delta);\n // Update the layout of the widgets.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Save the current configuration of the dock layout.\n *\n * @returns A new config object for the current layout state.\n *\n * #### Notes\n * The return value can be provided to the `restoreLayout` method\n * in order to restore the layout to its current configuration.\n */\n saveLayout() {\n // Bail early if there is no root.\n if (!this._root) {\n return { main: null };\n }\n // Hold the current sizes in the layout tree.\n this._root.holdAllSizes();\n // Return the layout config.\n return { main: this._root.createConfig() };\n }\n /**\n * Restore the layout to a previously saved configuration.\n *\n * @param config - The layout configuration to restore.\n *\n * #### Notes\n * Widgets which currently belong to the layout but which are not\n * contained in the config will be unparented.\n */\n restoreLayout(config) {\n // Create the widget set for validating the config.\n let widgetSet = new Set();\n // Normalize the main area config and collect the widgets.\n let mainConfig;\n if (config.main) {\n mainConfig = Private$6.normalizeAreaConfig(config.main, widgetSet);\n }\n else {\n mainConfig = null;\n }\n // Create iterators over the old content.\n let oldWidgets = this.widgets();\n let oldTabBars = this.tabBars();\n let oldHandles = this.handles();\n // Clear the root before removing the old content.\n this._root = null;\n // Unparent the old widgets which are not in the new config.\n for (const widget of oldWidgets) {\n if (!widgetSet.has(widget)) {\n widget.parent = null;\n }\n }\n // Dispose of the old tab bars.\n for (const tabBar of oldTabBars) {\n tabBar.dispose();\n }\n // Remove the old handles.\n for (const handle of oldHandles) {\n if (handle.parentNode) {\n handle.parentNode.removeChild(handle);\n }\n }\n // Reparent the new widgets to the current parent.\n for (const widget of widgetSet) {\n widget.parent = this.parent;\n }\n // Create the root node for the new config.\n if (mainConfig) {\n this._root = Private$6.realizeAreaConfig(mainConfig, {\n // Ignoring optional `document` argument as we must reuse `this._document`\n createTabBar: (document) => this._createTabBar(),\n createHandle: () => this._createHandle()\n }, this._document);\n }\n else {\n this._root = null;\n }\n // If there is no parent, there is nothing more to do.\n if (!this.parent) {\n return;\n }\n // Attach the new widgets to the parent.\n widgetSet.forEach(widget => {\n this.attachWidget(widget);\n });\n // Post a fit request to the parent.\n this.parent.fit();\n }\n /**\n * Add a widget to the dock layout.\n *\n * @param widget - The widget to add to the dock layout.\n *\n * @param options - The additional options for adding the widget.\n *\n * #### Notes\n * The widget will be moved if it is already contained in the layout.\n *\n * An error will be thrown if the reference widget is invalid.\n */\n addWidget(widget, options = {}) {\n // Parse the options.\n let ref = options.ref || null;\n let mode = options.mode || 'tab-after';\n // Find the tab node which holds the reference widget.\n let refNode = null;\n if (this._root && ref) {\n refNode = this._root.findTabNode(ref);\n }\n // Throw an error if the reference widget is invalid.\n if (ref && !refNode) {\n throw new Error('Reference widget is not in the layout.');\n }\n // Reparent the widget to the current layout parent.\n widget.parent = this.parent;\n // Insert the widget according to the insert mode.\n switch (mode) {\n case 'tab-after':\n this._insertTab(widget, ref, refNode, true);\n break;\n case 'tab-before':\n this._insertTab(widget, ref, refNode, false);\n break;\n case 'split-top':\n this._insertSplit(widget, ref, refNode, 'vertical', false);\n break;\n case 'split-left':\n this._insertSplit(widget, ref, refNode, 'horizontal', false);\n break;\n case 'split-right':\n this._insertSplit(widget, ref, refNode, 'horizontal', true);\n break;\n case 'split-bottom':\n this._insertSplit(widget, ref, refNode, 'vertical', true);\n break;\n case 'merge-top':\n this._insertSplit(widget, ref, refNode, 'vertical', false, true);\n break;\n case 'merge-left':\n this._insertSplit(widget, ref, refNode, 'horizontal', false, true);\n break;\n case 'merge-right':\n this._insertSplit(widget, ref, refNode, 'horizontal', true, true);\n break;\n case 'merge-bottom':\n this._insertSplit(widget, ref, refNode, 'vertical', true, true);\n break;\n }\n // Do nothing else if there is no parent widget.\n if (!this.parent) {\n return;\n }\n // Ensure the widget is attached to the parent widget.\n this.attachWidget(widget);\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Remove the widget from its current layout location.\n this._removeWidget(widget);\n // Do nothing else if there is no parent widget.\n if (!this.parent) {\n return;\n }\n // Detach the widget from the parent widget.\n this.detachWidget(widget);\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Find the tab area which contains the given client position.\n *\n * @param clientX - The client X position of interest.\n *\n * @param clientY - The client Y position of interest.\n *\n * @returns The geometry of the tab area at the given position, or\n * `null` if there is no tab area at the given position.\n */\n hitTestTabAreas(clientX, clientY) {\n // Bail early if hit testing cannot produce valid results.\n if (!this._root || !this.parent || !this.parent.isVisible) {\n return null;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Convert from client to local coordinates.\n let rect = this.parent.node.getBoundingClientRect();\n let x = clientX - rect.left - this._box.borderLeft;\n let y = clientY - rect.top - this._box.borderTop;\n // Find the tab layout node at the local position.\n let tabNode = this._root.hitTestTabNodes(x, y);\n // Bail if a tab layout node was not found.\n if (!tabNode) {\n return null;\n }\n // Extract the data from the tab node.\n let { tabBar, top, left, width, height } = tabNode;\n // Compute the right and bottom edges of the tab area.\n let borderWidth = this._box.borderLeft + this._box.borderRight;\n let borderHeight = this._box.borderTop + this._box.borderBottom;\n let right = rect.width - borderWidth - (left + width);\n let bottom = rect.height - borderHeight - (top + height);\n // Return the hit test results.\n return { tabBar, x, y, top, left, right, bottom, width, height };\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n // Perform superclass initialization.\n super.init();\n // Attach each widget to the parent.\n for (const widget of this) {\n this.attachWidget(widget);\n }\n // Attach each handle to the parent.\n for (const handle of this.handles()) {\n this.parent.node.appendChild(handle);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Attach the widget to the layout parent widget.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a no-op if the widget is already attached.\n */\n attachWidget(widget) {\n // Do nothing if the widget is already attached.\n if (this.parent.node === widget.node.parentNode) {\n return;\n }\n // Create the layout item for the widget.\n this._items.set(widget, new LayoutItem(widget));\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach the widget from the layout parent widget.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a no-op if the widget is not attached.\n */\n detachWidget(widget) {\n // Do nothing if the widget is not attached.\n if (this.parent.node !== widget.node.parentNode) {\n return;\n }\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Delete the layout item for the widget.\n let item = this._items.get(widget);\n if (item) {\n this._items.delete(widget);\n item.dispose();\n }\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Remove the specified widget from the layout structure.\n *\n * #### Notes\n * This is a no-op if the widget is not in the layout tree.\n *\n * This does not detach the widget from the parent node.\n */\n _removeWidget(widget) {\n // Bail early if there is no layout root.\n if (!this._root) {\n return;\n }\n // Find the tab node which contains the given widget.\n let tabNode = this._root.findTabNode(widget);\n // Bail early if the tab node is not found.\n if (!tabNode) {\n return;\n }\n Private$6.removeAria(widget);\n // If there are multiple tabs, just remove the widget's tab.\n if (tabNode.tabBar.titles.length > 1) {\n tabNode.tabBar.removeTab(widget.title);\n if (this._hiddenMode === Widget.HiddenMode.Scale &&\n tabNode.tabBar.titles.length == 1) {\n const existingWidget = tabNode.tabBar.titles[0].owner;\n existingWidget.hiddenMode = Widget.HiddenMode.Display;\n }\n return;\n }\n // Otherwise, the tab node needs to be removed...\n // Dispose the tab bar.\n tabNode.tabBar.dispose();\n // Handle the case where the tab node is the root.\n if (this._root === tabNode) {\n this._root = null;\n return;\n }\n // Otherwise, remove the tab node from its parent...\n // Prevent widget resizing unless needed.\n this._root.holdAllSizes();\n // Clear the parent reference on the tab node.\n let splitNode = tabNode.parent;\n tabNode.parent = null;\n // Remove the tab node from its parent split node.\n let i = ArrayExt.removeFirstOf(splitNode.children, tabNode);\n let handle = ArrayExt.removeAt(splitNode.handles, i);\n ArrayExt.removeAt(splitNode.sizers, i);\n // Remove the handle from its parent DOM node.\n if (handle.parentNode) {\n handle.parentNode.removeChild(handle);\n }\n // If there are multiple children, just update the handles.\n if (splitNode.children.length > 1) {\n splitNode.syncHandles();\n return;\n }\n // Otherwise, the split node also needs to be removed...\n // Clear the parent reference on the split node.\n let maybeParent = splitNode.parent;\n splitNode.parent = null;\n // Lookup the remaining child node and handle.\n let childNode = splitNode.children[0];\n let childHandle = splitNode.handles[0];\n // Clear the split node data.\n splitNode.children.length = 0;\n splitNode.handles.length = 0;\n splitNode.sizers.length = 0;\n // Remove the child handle from its parent node.\n if (childHandle.parentNode) {\n childHandle.parentNode.removeChild(childHandle);\n }\n // Handle the case where the split node is the root.\n if (this._root === splitNode) {\n childNode.parent = null;\n this._root = childNode;\n return;\n }\n // Otherwise, move the child node to the parent node...\n let parentNode = maybeParent;\n // Lookup the index of the split node.\n let j = parentNode.children.indexOf(splitNode);\n // Handle the case where the child node is a tab node.\n if (childNode instanceof Private$6.TabLayoutNode) {\n childNode.parent = parentNode;\n parentNode.children[j] = childNode;\n return;\n }\n // Remove the split data from the parent.\n let splitHandle = ArrayExt.removeAt(parentNode.handles, j);\n ArrayExt.removeAt(parentNode.children, j);\n ArrayExt.removeAt(parentNode.sizers, j);\n // Remove the handle from its parent node.\n if (splitHandle.parentNode) {\n splitHandle.parentNode.removeChild(splitHandle);\n }\n // The child node and the split parent node will have the same\n // orientation. Merge the grand-children with the parent node.\n for (let i = 0, n = childNode.children.length; i < n; ++i) {\n let gChild = childNode.children[i];\n let gHandle = childNode.handles[i];\n let gSizer = childNode.sizers[i];\n ArrayExt.insert(parentNode.children, j + i, gChild);\n ArrayExt.insert(parentNode.handles, j + i, gHandle);\n ArrayExt.insert(parentNode.sizers, j + i, gSizer);\n gChild.parent = parentNode;\n }\n // Clear the child node.\n childNode.children.length = 0;\n childNode.handles.length = 0;\n childNode.sizers.length = 0;\n childNode.parent = null;\n // Sync the handles on the parent node.\n parentNode.syncHandles();\n }\n /**\n * Create the tab layout node to hold the widget.\n */\n _createTabNode(widget) {\n let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n tabNode.tabBar.addTab(widget.title);\n Private$6.addAria(widget, tabNode.tabBar);\n return tabNode;\n }\n /**\n * Insert a widget next to an existing tab.\n *\n * #### Notes\n * This does not attach the widget to the parent widget.\n */\n _insertTab(widget, ref, refNode, after) {\n // Do nothing if the tab is inserted next to itself.\n if (widget === ref) {\n return;\n }\n // Create the root if it does not exist.\n if (!this._root) {\n let tabNode = new Private$6.TabLayoutNode(this._createTabBar());\n tabNode.tabBar.addTab(widget.title);\n this._root = tabNode;\n Private$6.addAria(widget, tabNode.tabBar);\n return;\n }\n // Use the first tab node as the ref node if needed.\n if (!refNode) {\n refNode = this._root.findFirstTabNode();\n }\n // If the widget is not contained in the ref node, ensure it is\n // removed from the layout and hidden before being added again.\n if (refNode.tabBar.titles.indexOf(widget.title) === -1) {\n this._removeWidget(widget);\n widget.hide();\n }\n // Lookup the target index for inserting the tab.\n let index;\n if (ref) {\n index = refNode.tabBar.titles.indexOf(ref.title);\n }\n else {\n index = refNode.tabBar.currentIndex;\n }\n // Using transform create an additional layer in the pixel pipeline\n // to limit the number of layer, it is set only if there is more than one widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale) {\n if (refNode.tabBar.titles.length === 0) {\n // Singular tab should use display mode to limit number of layers.\n widget.hiddenMode = Widget.HiddenMode.Display;\n }\n else if (refNode.tabBar.titles.length == 1) {\n // If we are adding a second tab, switch the existing tab back to scale.\n const existingWidget = refNode.tabBar.titles[0].owner;\n existingWidget.hiddenMode = Widget.HiddenMode.Scale;\n }\n else {\n // For the third and subsequent tabs no special action is needed.\n widget.hiddenMode = Widget.HiddenMode.Scale;\n }\n }\n else {\n // For all other modes just propagate the current mode.\n widget.hiddenMode = this._hiddenMode;\n }\n // Insert the widget's tab relative to the target index.\n refNode.tabBar.insertTab(index + (after ? 1 : 0), widget.title);\n Private$6.addAria(widget, refNode.tabBar);\n }\n /**\n * Insert a widget as a new split area.\n *\n * #### Notes\n * This does not attach the widget to the parent widget.\n */\n _insertSplit(widget, ref, refNode, orientation, after, merge = false) {\n // Do nothing if there is no effective split.\n if (widget === ref && refNode && refNode.tabBar.titles.length === 1) {\n return;\n }\n // Ensure the widget is removed from the current layout.\n this._removeWidget(widget);\n // Set the root if it does not exist.\n if (!this._root) {\n this._root = this._createTabNode(widget);\n return;\n }\n // If the ref node parent is null, split the root.\n if (!refNode || !refNode.parent) {\n // Ensure the root is split with the correct orientation.\n let root = this._splitRoot(orientation);\n // Determine the insert index for the new tab node.\n let i = after ? root.children.length : 0;\n // Normalize the split node.\n root.normalizeSizes();\n // Create the sizer for new tab node.\n let sizer = Private$6.createSizer(refNode ? 1 : Private$6.GOLDEN_RATIO);\n // Insert the tab node sized to the golden ratio.\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(root.children, i, tabNode);\n ArrayExt.insert(root.sizers, i, sizer);\n ArrayExt.insert(root.handles, i, this._createHandle());\n tabNode.parent = root;\n // Re-normalize the split node to maintain the ratios.\n root.normalizeSizes();\n // Finally, synchronize the visibility of the handles.\n root.syncHandles();\n return;\n }\n // Lookup the split node for the ref widget.\n let splitNode = refNode.parent;\n // If the split node already had the correct orientation,\n // the widget can be inserted into the split node directly.\n if (splitNode.orientation === orientation) {\n // Find the index of the ref node.\n let i = splitNode.children.indexOf(refNode);\n // Conditionally reuse a tab layout found in the wanted position.\n if (merge) {\n let j = i + (after ? 1 : -1);\n let sibling = splitNode.children[j];\n if (sibling instanceof Private$6.TabLayoutNode) {\n this._insertTab(widget, null, sibling, true);\n ++sibling.tabBar.currentIndex;\n return;\n }\n }\n // Normalize the split node.\n splitNode.normalizeSizes();\n // Consume half the space for the insert location.\n let s = (splitNode.sizers[i].sizeHint /= 2);\n // Insert the tab node sized to the other half.\n let j = i + (after ? 1 : 0);\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(splitNode.children, j, tabNode);\n ArrayExt.insert(splitNode.sizers, j, Private$6.createSizer(s));\n ArrayExt.insert(splitNode.handles, j, this._createHandle());\n tabNode.parent = splitNode;\n // Finally, synchronize the visibility of the handles.\n splitNode.syncHandles();\n return;\n }\n // Remove the ref node from the split node.\n let i = ArrayExt.removeFirstOf(splitNode.children, refNode);\n // Create a new normalized split node for the children.\n let childNode = new Private$6.SplitLayoutNode(orientation);\n childNode.normalized = true;\n // Add the ref node sized to half the space.\n childNode.children.push(refNode);\n childNode.sizers.push(Private$6.createSizer(0.5));\n childNode.handles.push(this._createHandle());\n refNode.parent = childNode;\n // Add the tab node sized to the other half.\n let j = after ? 1 : 0;\n let tabNode = this._createTabNode(widget);\n ArrayExt.insert(childNode.children, j, tabNode);\n ArrayExt.insert(childNode.sizers, j, Private$6.createSizer(0.5));\n ArrayExt.insert(childNode.handles, j, this._createHandle());\n tabNode.parent = childNode;\n // Synchronize the visibility of the handles.\n childNode.syncHandles();\n // Finally, add the new child node to the original split node.\n ArrayExt.insert(splitNode.children, i, childNode);\n childNode.parent = splitNode;\n }\n /**\n * Ensure the root is a split node with the given orientation.\n */\n _splitRoot(orientation) {\n // Bail early if the root already meets the requirements.\n let oldRoot = this._root;\n if (oldRoot instanceof Private$6.SplitLayoutNode) {\n if (oldRoot.orientation === orientation) {\n return oldRoot;\n }\n }\n // Create a new root node with the specified orientation.\n let newRoot = (this._root = new Private$6.SplitLayoutNode(orientation));\n // Add the old root to the new root.\n if (oldRoot) {\n newRoot.children.push(oldRoot);\n newRoot.sizers.push(Private$6.createSizer(0));\n newRoot.handles.push(this._createHandle());\n oldRoot.parent = newRoot;\n }\n // Return the new root as a convenience.\n return newRoot;\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Set up the computed minimum size.\n let minW = 0;\n let minH = 0;\n // Update the size limits for the layout tree.\n if (this._root) {\n let limits = this._root.fit(this._spacing, this._items);\n minW = limits.minWidth;\n minH = limits.minHeight;\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Bail early if there is no root layout node.\n if (!this._root) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let x = this._box.paddingTop;\n let y = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Update the geometry of the layout tree.\n this._root.update(x, y, width, height, this._spacing, this._items);\n }\n /**\n * Create a new tab bar for use by the dock layout.\n *\n * #### Notes\n * The tab bar will be attached to the parent if it exists.\n */\n _createTabBar() {\n // Create the tab bar using the renderer.\n let tabBar = this.renderer.createTabBar(this._document);\n // Enforce necessary tab bar behavior.\n tabBar.orientation = 'horizontal';\n // Attach the tab bar to the parent if possible.\n if (this.parent) {\n this.attachWidget(tabBar);\n }\n // Return the initialized tab bar.\n return tabBar;\n }\n /**\n * Create a new handle for the dock layout.\n *\n * #### Notes\n * The handle will be attached to the parent if it exists.\n */\n _createHandle() {\n // Create the handle using the renderer.\n let handle = this.renderer.createHandle();\n // Initialize the handle layout behavior.\n let style = handle.style;\n style.position = 'absolute';\n style.contain = 'strict';\n style.top = '0';\n style.left = '0';\n style.width = '0';\n style.height = '0';\n // Attach the handle to the parent if it exists.\n if (this.parent) {\n this.parent.node.appendChild(handle);\n }\n // Return the initialized handle.\n return handle;\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$6;\n(function (Private) {\n /**\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n */\n Private.GOLDEN_RATIO = 0.618;\n /**\n * Create a box sizer with an initial size hint.\n */\n function createSizer(hint) {\n let sizer = new BoxSizer();\n sizer.sizeHint = hint;\n sizer.size = hint;\n return sizer;\n }\n Private.createSizer = createSizer;\n /**\n * Normalize an area config object and collect the visited widgets.\n */\n function normalizeAreaConfig(config, widgetSet) {\n let result;\n if (config.type === 'tab-area') {\n result = normalizeTabAreaConfig(config, widgetSet);\n }\n else {\n result = normalizeSplitAreaConfig(config, widgetSet);\n }\n return result;\n }\n Private.normalizeAreaConfig = normalizeAreaConfig;\n /**\n * Convert a normalized area config into a layout tree.\n */\n function realizeAreaConfig(config, renderer, document) {\n let node;\n if (config.type === 'tab-area') {\n node = realizeTabAreaConfig(config, renderer, document);\n }\n else {\n node = realizeSplitAreaConfig(config, renderer, document);\n }\n return node;\n }\n Private.realizeAreaConfig = realizeAreaConfig;\n /**\n * A layout node which holds the data for a tabbed area.\n */\n class TabLayoutNode {\n /**\n * Construct a new tab layout node.\n *\n * @param tabBar - The tab bar to use for the layout node.\n */\n constructor(tabBar) {\n /**\n * The parent of the layout node.\n */\n this.parent = null;\n this._top = 0;\n this._left = 0;\n this._width = 0;\n this._height = 0;\n let tabSizer = new BoxSizer();\n let widgetSizer = new BoxSizer();\n tabSizer.stretch = 0;\n widgetSizer.stretch = 1;\n this.tabBar = tabBar;\n this.sizers = [tabSizer, widgetSizer];\n }\n /**\n * The most recent value for the `top` edge of the layout box.\n */\n get top() {\n return this._top;\n }\n /**\n * The most recent value for the `left` edge of the layout box.\n */\n get left() {\n return this._left;\n }\n /**\n * The most recent value for the `width` of the layout box.\n */\n get width() {\n return this._width;\n }\n /**\n * The most recent value for the `height` of the layout box.\n */\n get height() {\n return this._height;\n }\n /**\n * Create an iterator for all widgets in the layout tree.\n */\n *iterAllWidgets() {\n yield this.tabBar;\n yield* this.iterUserWidgets();\n }\n /**\n * Create an iterator for the user widgets in the layout tree.\n */\n *iterUserWidgets() {\n for (const title of this.tabBar.titles) {\n yield title.owner;\n }\n }\n /**\n * Create an iterator for the selected widgets in the layout tree.\n */\n *iterSelectedWidgets() {\n let title = this.tabBar.currentTitle;\n if (title) {\n yield title.owner;\n }\n }\n /**\n * Create an iterator for the tab bars in the layout tree.\n */\n *iterTabBars() {\n yield this.tabBar;\n }\n /**\n * Create an iterator for the handles in the layout tree.\n */\n // eslint-disable-next-line require-yield\n *iterHandles() {\n return;\n }\n /**\n * Find the tab layout node which contains the given widget.\n */\n findTabNode(widget) {\n return this.tabBar.titles.indexOf(widget.title) !== -1 ? this : null;\n }\n /**\n * Find the split layout node which contains the given handle.\n */\n findSplitNode(handle) {\n return null;\n }\n /**\n * Find the first tab layout node in a layout tree.\n */\n findFirstTabNode() {\n return this;\n }\n /**\n * Find the tab layout node which contains the local point.\n */\n hitTestTabNodes(x, y) {\n if (x < this._left || x >= this._left + this._width) {\n return null;\n }\n if (y < this._top || y >= this._top + this._height) {\n return null;\n }\n return this;\n }\n /**\n * Create a configuration object for the layout tree.\n */\n createConfig() {\n let widgets = this.tabBar.titles.map(title => title.owner);\n let currentIndex = this.tabBar.currentIndex;\n return { type: 'tab-area', widgets, currentIndex };\n }\n /**\n * Recursively hold all of the sizes in the layout tree.\n *\n * This ignores the sizers of tab layout nodes.\n */\n holdAllSizes() {\n return;\n }\n /**\n * Fit the layout tree.\n */\n fit(spacing, items) {\n // Set up the limit variables.\n let minWidth = 0;\n let minHeight = 0;\n let maxWidth = Infinity;\n let maxHeight = Infinity;\n // Lookup the tab bar layout item.\n let tabBarItem = items.get(this.tabBar);\n // Lookup the widget layout item.\n let current = this.tabBar.currentTitle;\n let widgetItem = current ? items.get(current.owner) : undefined;\n // Lookup the tab bar and widget sizers.\n let [tabBarSizer, widgetSizer] = this.sizers;\n // Update the tab bar limits.\n if (tabBarItem) {\n tabBarItem.fit();\n }\n // Update the widget limits.\n if (widgetItem) {\n widgetItem.fit();\n }\n // Update the results and sizer for the tab bar.\n if (tabBarItem && !tabBarItem.isHidden) {\n minWidth = Math.max(minWidth, tabBarItem.minWidth);\n minHeight += tabBarItem.minHeight;\n tabBarSizer.minSize = tabBarItem.minHeight;\n tabBarSizer.maxSize = tabBarItem.maxHeight;\n }\n else {\n tabBarSizer.minSize = 0;\n tabBarSizer.maxSize = 0;\n }\n // Update the results and sizer for the current widget.\n if (widgetItem && !widgetItem.isHidden) {\n minWidth = Math.max(minWidth, widgetItem.minWidth);\n minHeight += widgetItem.minHeight;\n widgetSizer.minSize = widgetItem.minHeight;\n widgetSizer.maxSize = Infinity;\n }\n else {\n widgetSizer.minSize = 0;\n widgetSizer.maxSize = Infinity;\n }\n // Return the computed size limits for the layout node.\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n /**\n * Update the layout tree.\n */\n update(left, top, width, height, spacing, items) {\n // Update the layout box values.\n this._top = top;\n this._left = left;\n this._width = width;\n this._height = height;\n // Lookup the tab bar layout item.\n let tabBarItem = items.get(this.tabBar);\n // Lookup the widget layout item.\n let current = this.tabBar.currentTitle;\n let widgetItem = current ? items.get(current.owner) : undefined;\n // Distribute the layout space to the sizers.\n BoxEngine.calc(this.sizers, height);\n // Update the tab bar item using the computed size.\n if (tabBarItem && !tabBarItem.isHidden) {\n let size = this.sizers[0].size;\n tabBarItem.update(left, top, width, size);\n top += size;\n }\n // Layout the widget using the computed size.\n if (widgetItem && !widgetItem.isHidden) {\n let size = this.sizers[1].size;\n widgetItem.update(left, top, width, size);\n }\n }\n }\n Private.TabLayoutNode = TabLayoutNode;\n /**\n * A layout node which holds the data for a split area.\n */\n class SplitLayoutNode {\n /**\n * Construct a new split layout node.\n *\n * @param orientation - The orientation of the node.\n */\n constructor(orientation) {\n /**\n * The parent of the layout node.\n */\n this.parent = null;\n /**\n * Whether the sizers have been normalized.\n */\n this.normalized = false;\n /**\n * The child nodes for the split node.\n */\n this.children = [];\n /**\n * The box sizers for the layout children.\n */\n this.sizers = [];\n /**\n * The handles for the layout children.\n */\n this.handles = [];\n this.orientation = orientation;\n }\n /**\n * Create an iterator for all widgets in the layout tree.\n */\n *iterAllWidgets() {\n for (const child of this.children) {\n yield* child.iterAllWidgets();\n }\n }\n /**\n * Create an iterator for the user widgets in the layout tree.\n */\n *iterUserWidgets() {\n for (const child of this.children) {\n yield* child.iterUserWidgets();\n }\n }\n /**\n * Create an iterator for the selected widgets in the layout tree.\n */\n *iterSelectedWidgets() {\n for (const child of this.children) {\n yield* child.iterSelectedWidgets();\n }\n }\n /**\n * Create an iterator for the tab bars in the layout tree.\n */\n *iterTabBars() {\n for (const child of this.children) {\n yield* child.iterTabBars();\n }\n }\n /**\n * Create an iterator for the handles in the layout tree.\n */\n *iterHandles() {\n yield* this.handles;\n for (const child of this.children) {\n yield* child.iterHandles();\n }\n }\n /**\n * Find the tab layout node which contains the given widget.\n */\n findTabNode(widget) {\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].findTabNode(widget);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Find the split layout node which contains the given handle.\n */\n findSplitNode(handle) {\n let index = this.handles.indexOf(handle);\n if (index !== -1) {\n return { index, node: this };\n }\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].findSplitNode(handle);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Find the first tab layout node in a layout tree.\n */\n findFirstTabNode() {\n if (this.children.length === 0) {\n return null;\n }\n return this.children[0].findFirstTabNode();\n }\n /**\n * Find the tab layout node which contains the local point.\n */\n hitTestTabNodes(x, y) {\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let result = this.children[i].hitTestTabNodes(x, y);\n if (result) {\n return result;\n }\n }\n return null;\n }\n /**\n * Create a configuration object for the layout tree.\n */\n createConfig() {\n let orientation = this.orientation;\n let sizes = this.createNormalizedSizes();\n let children = this.children.map(child => child.createConfig());\n return { type: 'split-area', orientation, children, sizes };\n }\n /**\n * Sync the visibility and orientation of the handles.\n */\n syncHandles() {\n this.handles.forEach((handle, i) => {\n handle.setAttribute('data-orientation', this.orientation);\n if (i === this.handles.length - 1) {\n handle.classList.add('lm-mod-hidden');\n }\n else {\n handle.classList.remove('lm-mod-hidden');\n }\n });\n }\n /**\n * Hold the current sizes of the box sizers.\n *\n * This sets the size hint of each sizer to its current size.\n */\n holdSizes() {\n for (const sizer of this.sizers) {\n sizer.sizeHint = sizer.size;\n }\n }\n /**\n * Recursively hold all of the sizes in the layout tree.\n *\n * This ignores the sizers of tab layout nodes.\n */\n holdAllSizes() {\n for (const child of this.children) {\n child.holdAllSizes();\n }\n this.holdSizes();\n }\n /**\n * Normalize the sizes of the split layout node.\n */\n normalizeSizes() {\n // Bail early if the sizers are empty.\n let n = this.sizers.length;\n if (n === 0) {\n return;\n }\n // Hold the current sizes of the sizers.\n this.holdSizes();\n // Compute the sum of the sizes.\n let sum = this.sizers.reduce((v, sizer) => v + sizer.sizeHint, 0);\n // Normalize the sizes based on the sum.\n if (sum === 0) {\n for (const sizer of this.sizers) {\n sizer.size = sizer.sizeHint = 1 / n;\n }\n }\n else {\n for (const sizer of this.sizers) {\n sizer.size = sizer.sizeHint /= sum;\n }\n }\n // Mark the sizes as normalized.\n this.normalized = true;\n }\n /**\n * Snap the normalized sizes of the split layout node.\n */\n createNormalizedSizes() {\n // Bail early if the sizers are empty.\n let n = this.sizers.length;\n if (n === 0) {\n return [];\n }\n // Grab the current sizes of the sizers.\n let sizes = this.sizers.map(sizer => sizer.size);\n // Compute the sum of the sizes.\n let sum = sizes.reduce((v, size) => v + size, 0);\n // Normalize the sizes based on the sum.\n if (sum === 0) {\n for (let i = sizes.length - 1; i > -1; i--) {\n sizes[i] = 1 / n;\n }\n }\n else {\n for (let i = sizes.length - 1; i > -1; i--) {\n sizes[i] /= sum;\n }\n }\n // Return the normalized sizes.\n return sizes;\n }\n /**\n * Fit the layout tree.\n */\n fit(spacing, items) {\n // Compute the required fixed space.\n let horizontal = this.orientation === 'horizontal';\n let fixed = Math.max(0, this.children.length - 1) * spacing;\n // Set up the limit variables.\n let minWidth = horizontal ? fixed : 0;\n let minHeight = horizontal ? 0 : fixed;\n let maxWidth = Infinity;\n let maxHeight = Infinity;\n // Fit the children and update the limits.\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let limits = this.children[i].fit(spacing, items);\n if (horizontal) {\n minHeight = Math.max(minHeight, limits.minHeight);\n minWidth += limits.minWidth;\n this.sizers[i].minSize = limits.minWidth;\n }\n else {\n minWidth = Math.max(minWidth, limits.minWidth);\n minHeight += limits.minHeight;\n this.sizers[i].minSize = limits.minHeight;\n }\n }\n // Return the computed limits for the layout node.\n return { minWidth, minHeight, maxWidth, maxHeight };\n }\n /**\n * Update the layout tree.\n */\n update(left, top, width, height, spacing, items) {\n // Compute the available layout space.\n let horizontal = this.orientation === 'horizontal';\n let fixed = Math.max(0, this.children.length - 1) * spacing;\n let space = Math.max(0, (horizontal ? width : height) - fixed);\n // De-normalize the sizes if needed.\n if (this.normalized) {\n for (const sizer of this.sizers) {\n sizer.sizeHint *= space;\n }\n this.normalized = false;\n }\n // Distribute the layout space to the sizers.\n BoxEngine.calc(this.sizers, space);\n // Update the geometry of the child nodes and handles.\n for (let i = 0, n = this.children.length; i < n; ++i) {\n let child = this.children[i];\n let size = this.sizers[i].size;\n let handleStyle = this.handles[i].style;\n if (horizontal) {\n child.update(left, top, size, height, spacing, items);\n left += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${spacing}px`;\n handleStyle.height = `${height}px`;\n left += spacing;\n }\n else {\n child.update(left, top, width, size, spacing, items);\n top += size;\n handleStyle.top = `${top}px`;\n handleStyle.left = `${left}px`;\n handleStyle.width = `${width}px`;\n handleStyle.height = `${spacing}px`;\n top += spacing;\n }\n }\n }\n }\n Private.SplitLayoutNode = SplitLayoutNode;\n function addAria(widget, tabBar) {\n widget.node.setAttribute('role', 'tabpanel');\n let renderer = tabBar.renderer;\n if (renderer instanceof TabBar.Renderer) {\n let tabId = renderer.createTabKey({\n title: widget.title,\n current: false,\n zIndex: 0\n });\n widget.node.setAttribute('aria-labelledby', tabId);\n }\n }\n Private.addAria = addAria;\n function removeAria(widget) {\n widget.node.removeAttribute('role');\n widget.node.removeAttribute('aria-labelledby');\n }\n Private.removeAria = removeAria;\n /**\n * Normalize a tab area config and collect the visited widgets.\n */\n function normalizeTabAreaConfig(config, widgetSet) {\n // Bail early if there is no content.\n if (config.widgets.length === 0) {\n return null;\n }\n // Setup the filtered widgets array.\n let widgets = [];\n // Filter the config for unique widgets.\n for (const widget of config.widgets) {\n if (!widgetSet.has(widget)) {\n widgetSet.add(widget);\n widgets.push(widget);\n }\n }\n // Bail if there are no effective widgets.\n if (widgets.length === 0) {\n return null;\n }\n // Normalize the current index.\n let index = config.currentIndex;\n if (index !== -1 && (index < 0 || index >= widgets.length)) {\n index = 0;\n }\n // Return a normalized config object.\n return { type: 'tab-area', widgets, currentIndex: index };\n }\n /**\n * Normalize a split area config and collect the visited widgets.\n */\n function normalizeSplitAreaConfig(config, widgetSet) {\n // Set up the result variables.\n let orientation = config.orientation;\n let children = [];\n let sizes = [];\n // Normalize the config children.\n for (let i = 0, n = config.children.length; i < n; ++i) {\n // Normalize the child config.\n let child = normalizeAreaConfig(config.children[i], widgetSet);\n // Ignore an empty child.\n if (!child) {\n continue;\n }\n // Add the child or hoist its content as appropriate.\n if (child.type === 'tab-area' || child.orientation !== orientation) {\n children.push(child);\n sizes.push(Math.abs(config.sizes[i] || 0));\n }\n else {\n children.push(...child.children);\n sizes.push(...child.sizes);\n }\n }\n // Bail if there are no effective children.\n if (children.length === 0) {\n return null;\n }\n // If there is only one effective child, return that child.\n if (children.length === 1) {\n return children[0];\n }\n // Return a normalized config object.\n return { type: 'split-area', orientation, children, sizes };\n }\n /**\n * Convert a normalized tab area config into a layout tree.\n */\n function realizeTabAreaConfig(config, renderer, document) {\n // Create the tab bar for the layout node.\n let tabBar = renderer.createTabBar(document);\n // Hide each widget and add it to the tab bar.\n for (const widget of config.widgets) {\n widget.hide();\n tabBar.addTab(widget.title);\n Private.addAria(widget, tabBar);\n }\n // Set the current index of the tab bar.\n tabBar.currentIndex = config.currentIndex;\n // Return the new tab layout node.\n return new TabLayoutNode(tabBar);\n }\n /**\n * Convert a normalized split area config into a layout tree.\n */\n function realizeSplitAreaConfig(config, renderer, document) {\n // Create the split layout node.\n let node = new SplitLayoutNode(config.orientation);\n // Add each child to the layout node.\n config.children.forEach((child, i) => {\n // Create the child data for the layout node.\n let childNode = realizeAreaConfig(child, renderer, document);\n let sizer = createSizer(config.sizes[i]);\n let handle = renderer.createHandle();\n // Add the child data to the layout node.\n node.children.push(childNode);\n node.handles.push(handle);\n node.sizers.push(sizer);\n // Update the parent for the child node.\n childNode.parent = node;\n });\n // Synchronize the handle state for the layout node.\n node.syncHandles();\n // Normalize the sizes for the layout node.\n node.normalizeSizes();\n // Return the new layout node.\n return node;\n }\n})(Private$6 || (Private$6 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which provides a flexible docking area for widgets.\n */\nclass DockPanel extends Widget {\n /**\n * Construct a new dock panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super();\n this._drag = null;\n this._tabsMovable = true;\n this._tabsConstrained = false;\n this._addButtonEnabled = false;\n this._pressData = null;\n this._layoutModified = new Signal(this);\n this._addRequested = new Signal(this);\n this.addClass('lm-DockPanel');\n this._document = options.document || document;\n this._mode = options.mode || 'multiple-document';\n this._renderer = options.renderer || DockPanel.defaultRenderer;\n this._edges = options.edges || Private$5.DEFAULT_EDGES;\n if (options.tabsMovable !== undefined) {\n this._tabsMovable = options.tabsMovable;\n }\n if (options.tabsConstrained !== undefined) {\n this._tabsConstrained = options.tabsConstrained;\n }\n if (options.addButtonEnabled !== undefined) {\n this._addButtonEnabled = options.addButtonEnabled;\n }\n // Toggle the CSS mode attribute.\n this.dataset['mode'] = this._mode;\n // Create the delegate renderer for the layout.\n let renderer = {\n createTabBar: () => this._createTabBar(),\n createHandle: () => this._createHandle()\n };\n // Set up the dock layout for the panel.\n this.layout = new DockLayout({\n document: this._document,\n renderer,\n spacing: options.spacing,\n hiddenMode: options.hiddenMode\n });\n // Set up the overlay drop indicator.\n this.overlay = options.overlay || new DockPanel.Overlay();\n this.node.appendChild(this.overlay.node);\n }\n /**\n * Dispose of the resources held by the panel.\n */\n dispose() {\n // Ensure the mouse is released.\n this._releaseMouse();\n // Hide the overlay.\n this.overlay.hide(0);\n // Cancel a drag if one is in progress.\n if (this._drag) {\n this._drag.dispose();\n }\n // Dispose of the base class.\n super.dispose();\n }\n /**\n * The method for hiding widgets.\n */\n get hiddenMode() {\n return this.layout.hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n */\n set hiddenMode(v) {\n this.layout.hiddenMode = v;\n }\n /**\n * A signal emitted when the layout configuration is modified.\n *\n * #### Notes\n * This signal is emitted whenever the current layout configuration\n * may have changed.\n *\n * This signal is emitted asynchronously in a collapsed fashion, so\n * that multiple synchronous modifications results in only a single\n * emit of the signal.\n */\n get layoutModified() {\n return this._layoutModified;\n }\n /**\n * A signal emitted when the add button on a tab bar is clicked.\n *\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * The renderer used by the dock panel.\n */\n get renderer() {\n return this.layout.renderer;\n }\n /**\n * Get the spacing between the widgets.\n */\n get spacing() {\n return this.layout.spacing;\n }\n /**\n * Set the spacing between the widgets.\n */\n set spacing(value) {\n this.layout.spacing = value;\n }\n /**\n * Get the mode for the dock panel.\n */\n get mode() {\n return this._mode;\n }\n /**\n * Set the mode for the dock panel.\n *\n * #### Notes\n * Changing the mode is a destructive operation with respect to the\n * panel's layout configuration. If layout state must be preserved,\n * save the current layout config before changing the mode.\n */\n set mode(value) {\n // Bail early if the mode does not change.\n if (this._mode === value) {\n return;\n }\n // Update the internal mode.\n this._mode = value;\n // Toggle the CSS mode attribute.\n this.dataset['mode'] = value;\n // Get the layout for the panel.\n let layout = this.layout;\n // Configure the layout for the specified mode.\n switch (value) {\n case 'multiple-document':\n for (const tabBar of layout.tabBars()) {\n tabBar.show();\n }\n break;\n case 'single-document':\n layout.restoreLayout(Private$5.createSingleDocumentConfig(this));\n break;\n default:\n throw 'unreachable';\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Whether the tabs can be dragged / moved at runtime.\n */\n get tabsMovable() {\n return this._tabsMovable;\n }\n /**\n * Enable / Disable draggable / movable tabs.\n */\n set tabsMovable(value) {\n this._tabsMovable = value;\n for (const tabBar of this.tabBars()) {\n tabBar.tabsMovable = value;\n }\n }\n /**\n * Whether the tabs are constrained to their source dock panel\n */\n get tabsConstrained() {\n return this._tabsConstrained;\n }\n /**\n * Constrain/Allow tabs to be dragged outside of this dock panel\n */\n set tabsConstrained(value) {\n this._tabsConstrained = value;\n }\n /**\n * Whether the add buttons for each tab bar are enabled.\n */\n get addButtonEnabled() {\n return this._addButtonEnabled;\n }\n /**\n * Set whether the add buttons for each tab bar are enabled.\n */\n set addButtonEnabled(value) {\n this._addButtonEnabled = value;\n for (const tabBar of this.tabBars()) {\n tabBar.addButtonEnabled = value;\n }\n }\n /**\n * Whether the dock panel is empty.\n */\n get isEmpty() {\n return this.layout.isEmpty;\n }\n /**\n * Create an iterator over the user widgets in the panel.\n *\n * @returns A new iterator over the user widgets in the panel.\n *\n * #### Notes\n * This iterator does not include the generated tab bars.\n */\n *widgets() {\n yield* this.layout.widgets();\n }\n /**\n * Create an iterator over the selected widgets in the panel.\n *\n * @returns A new iterator over the selected user widgets.\n *\n * #### Notes\n * This iterator yields the widgets corresponding to the current tab\n * of each tab bar in the panel.\n */\n *selectedWidgets() {\n yield* this.layout.selectedWidgets();\n }\n /**\n * Create an iterator over the tab bars in the panel.\n *\n * @returns A new iterator over the tab bars in the panel.\n *\n * #### Notes\n * This iterator does not include the user widgets.\n */\n *tabBars() {\n yield* this.layout.tabBars();\n }\n /**\n * Create an iterator over the handles in the panel.\n *\n * @returns A new iterator over the handles in the panel.\n */\n *handles() {\n yield* this.layout.handles();\n }\n /**\n * Select a specific widget in the dock panel.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will make the widget the current widget in its tab area.\n */\n selectWidget(widget) {\n // Find the tab bar which contains the widget.\n let tabBar = find(this.tabBars(), bar => {\n return bar.titles.indexOf(widget.title) !== -1;\n });\n // Throw an error if no tab bar is found.\n if (!tabBar) {\n throw new Error('Widget is not contained in the dock panel.');\n }\n // Ensure the widget is the current widget.\n tabBar.currentTitle = widget.title;\n }\n /**\n * Activate a specified widget in the dock panel.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * This will select and activate the given widget.\n */\n activateWidget(widget) {\n this.selectWidget(widget);\n widget.activate();\n }\n /**\n * Save the current layout configuration of the dock panel.\n *\n * @returns A new config object for the current layout state.\n *\n * #### Notes\n * The return value can be provided to the `restoreLayout` method\n * in order to restore the layout to its current configuration.\n */\n saveLayout() {\n return this.layout.saveLayout();\n }\n /**\n * Restore the layout to a previously saved configuration.\n *\n * @param config - The layout configuration to restore.\n *\n * #### Notes\n * Widgets which currently belong to the layout but which are not\n * contained in the config will be unparented.\n *\n * The dock panel automatically reverts to `'multiple-document'`\n * mode when a layout config is restored.\n */\n restoreLayout(config) {\n // Reset the mode.\n this._mode = 'multiple-document';\n // Restore the layout.\n this.layout.restoreLayout(config);\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Add a widget to the dock panel.\n *\n * @param widget - The widget to add to the dock panel.\n *\n * @param options - The additional options for adding the widget.\n *\n * #### Notes\n * If the panel is in single document mode, the options are ignored\n * and the widget is always added as tab in the hidden tab bar.\n */\n addWidget(widget, options = {}) {\n // Add the widget to the layout.\n if (this._mode === 'single-document') {\n this.layout.addWidget(widget);\n }\n else {\n this.layout.addWidget(widget, options);\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Process a message sent to the widget.\n *\n * @param msg - The message sent to the widget.\n */\n processMessage(msg) {\n if (msg.type === 'layout-modified') {\n this._layoutModified.emit(undefined);\n }\n else {\n super.processMessage(msg);\n }\n }\n /**\n * Handle the DOM events for the dock panel.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the panel's DOM node. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'lm-dragenter':\n this._evtDragEnter(event);\n break;\n case 'lm-dragleave':\n this._evtDragLeave(event);\n break;\n case 'lm-dragover':\n this._evtDragOver(event);\n break;\n case 'lm-drop':\n this._evtDrop(event);\n break;\n case 'pointerdown':\n this._evtPointerDown(event);\n break;\n case 'pointermove':\n this._evtPointerMove(event);\n break;\n case 'pointerup':\n this._evtPointerUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('lm-dragenter', this);\n this.node.addEventListener('lm-dragleave', this);\n this.node.addEventListener('lm-dragover', this);\n this.node.addEventListener('lm-drop', this);\n this.node.addEventListener('pointerdown', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('lm-dragenter', this);\n this.node.removeEventListener('lm-dragleave', this);\n this.node.removeEventListener('lm-dragover', this);\n this.node.removeEventListener('lm-drop', this);\n this.node.removeEventListener('pointerdown', this);\n this._releaseMouse();\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n // Ignore the generated tab bars.\n if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n return;\n }\n // Add the widget class to the child.\n msg.child.addClass('lm-DockPanel-widget');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n // Ignore the generated tab bars.\n if (Private$5.isGeneratedTabBarProperty.get(msg.child)) {\n return;\n }\n // Remove the widget class from the child.\n msg.child.removeClass('lm-DockPanel-widget');\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `'lm-dragenter'` event for the dock panel.\n */\n _evtDragEnter(event) {\n // If the factory mime type is present, mark the event as\n // handled in order to get the rest of the drag events.\n if (event.mimeData.hasData('application/vnd.lumino.widget-factory')) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n /**\n * Handle the `'lm-dragleave'` event for the dock panel.\n */\n _evtDragLeave(event) {\n // Mark the event as handled.\n event.preventDefault();\n if (this._tabsConstrained && event.source !== this)\n return;\n event.stopPropagation();\n // The new target might be a descendant, so we might still handle the drop.\n // Hide asynchronously so that if a lm-dragover event bubbles up to us, the\n // hide is cancelled by the lm-dragover handler's show overlay logic.\n this.overlay.hide(1);\n }\n /**\n * Handle the `'lm-dragover'` event for the dock panel.\n */\n _evtDragOver(event) {\n // Mark the event as handled.\n event.preventDefault();\n // Show the drop indicator overlay and update the drop\n // action based on the drop target zone under the mouse.\n if ((this._tabsConstrained && event.source !== this) ||\n this._showOverlay(event.clientX, event.clientY) === 'invalid') {\n event.dropAction = 'none';\n }\n else {\n event.stopPropagation();\n event.dropAction = event.proposedAction;\n }\n }\n /**\n * Handle the `'lm-drop'` event for the dock panel.\n */\n _evtDrop(event) {\n // Mark the event as handled.\n event.preventDefault();\n // Hide the drop indicator overlay.\n this.overlay.hide(0);\n // Bail if the proposed action is to do nothing.\n if (event.proposedAction === 'none') {\n event.dropAction = 'none';\n return;\n }\n // Find the drop target under the mouse.\n let { clientX, clientY } = event;\n let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n // Bail if the drop zone is invalid.\n if ((this._tabsConstrained && event.source !== this) ||\n zone === 'invalid') {\n event.dropAction = 'none';\n return;\n }\n // Bail if the factory mime type has invalid data.\n let mimeData = event.mimeData;\n let factory = mimeData.getData('application/vnd.lumino.widget-factory');\n if (typeof factory !== 'function') {\n event.dropAction = 'none';\n return;\n }\n // Bail if the factory does not produce a widget.\n let widget = factory();\n if (!(widget instanceof Widget)) {\n event.dropAction = 'none';\n return;\n }\n // Bail if the widget is an ancestor of the dock panel.\n if (widget.contains(this)) {\n event.dropAction = 'none';\n return;\n }\n // Find the reference widget for the drop target.\n let ref = target ? Private$5.getDropRef(target.tabBar) : null;\n // Add the widget according to the indicated drop zone.\n switch (zone) {\n case 'root-all':\n this.addWidget(widget);\n break;\n case 'root-top':\n this.addWidget(widget, { mode: 'split-top' });\n break;\n case 'root-left':\n this.addWidget(widget, { mode: 'split-left' });\n break;\n case 'root-right':\n this.addWidget(widget, { mode: 'split-right' });\n break;\n case 'root-bottom':\n this.addWidget(widget, { mode: 'split-bottom' });\n break;\n case 'widget-all':\n this.addWidget(widget, { mode: 'tab-after', ref });\n break;\n case 'widget-top':\n this.addWidget(widget, { mode: 'split-top', ref });\n break;\n case 'widget-left':\n this.addWidget(widget, { mode: 'split-left', ref });\n break;\n case 'widget-right':\n this.addWidget(widget, { mode: 'split-right', ref });\n break;\n case 'widget-bottom':\n this.addWidget(widget, { mode: 'split-bottom', ref });\n break;\n case 'widget-tab':\n this.addWidget(widget, { mode: 'tab-after', ref });\n break;\n default:\n throw 'unreachable';\n }\n // Accept the proposed drop action.\n event.dropAction = event.proposedAction;\n // Stop propagation if we have not bailed so far.\n event.stopPropagation();\n // Activate the dropped widget.\n this.activateWidget(widget);\n }\n /**\n * Handle the `'keydown'` event for the dock panel.\n */\n _evtKeyDown(event) {\n // Stop input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse if `Escape` is pressed.\n if (event.keyCode === 27) {\n // Finalize the mouse release.\n this._releaseMouse();\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n }\n /**\n * Handle the `'pointerdown'` event for the dock panel.\n */\n _evtPointerDown(event) {\n // Do nothing if the left mouse button is not pressed.\n if (event.button !== 0) {\n return;\n }\n // Find the handle which contains the mouse target, if any.\n let layout = this.layout;\n let target = event.target;\n let handle = find(layout.handles(), handle => handle.contains(target));\n if (!handle) {\n return;\n }\n // Stop the event when a handle is pressed.\n event.preventDefault();\n event.stopPropagation();\n // Add the extra document listeners.\n this._document.addEventListener('keydown', this, true);\n this._document.addEventListener('pointerup', this, true);\n this._document.addEventListener('pointermove', this, true);\n this._document.addEventListener('contextmenu', this, true);\n // Compute the offset deltas for the handle press.\n let rect = handle.getBoundingClientRect();\n let deltaX = event.clientX - rect.left;\n let deltaY = event.clientY - rect.top;\n // Override the cursor and store the press data.\n let style = window.getComputedStyle(handle);\n let override = Drag.overrideCursor(style.cursor, this._document);\n this._pressData = { handle, deltaX, deltaY, override };\n }\n /**\n * Handle the `'pointermove'` event for the dock panel.\n */\n _evtPointerMove(event) {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Stop the event when dragging a handle.\n event.preventDefault();\n event.stopPropagation();\n // Compute the desired offset position for the handle.\n let rect = this.node.getBoundingClientRect();\n let xPos = event.clientX - rect.left - this._pressData.deltaX;\n let yPos = event.clientY - rect.top - this._pressData.deltaY;\n // Set the handle as close to the desired position as possible.\n let layout = this.layout;\n layout.moveHandle(this._pressData.handle, xPos, yPos);\n }\n /**\n * Handle the `'pointerup'` event for the dock panel.\n */\n _evtPointerUp(event) {\n // Do nothing if the left mouse button is not released.\n if (event.button !== 0) {\n return;\n }\n // Stop the event when releasing a handle.\n event.preventDefault();\n event.stopPropagation();\n // Finalize the mouse release.\n this._releaseMouse();\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Release the mouse grab for the dock panel.\n */\n _releaseMouse() {\n // Bail early if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Clear the override cursor.\n this._pressData.override.dispose();\n this._pressData = null;\n // Remove the extra document listeners.\n this._document.removeEventListener('keydown', this, true);\n this._document.removeEventListener('pointerup', this, true);\n this._document.removeEventListener('pointermove', this, true);\n this._document.removeEventListener('contextmenu', this, true);\n }\n /**\n * Show the overlay indicator at the given client position.\n *\n * Returns the drop zone at the specified client position.\n *\n * #### Notes\n * If the position is not over a valid zone, the overlay is hidden.\n */\n _showOverlay(clientX, clientY) {\n // Find the dock target for the given client position.\n let { zone, target } = Private$5.findDropTarget(this, clientX, clientY, this._edges);\n // If the drop zone is invalid, hide the overlay and bail.\n if (zone === 'invalid') {\n this.overlay.hide(100);\n return zone;\n }\n // Setup the variables needed to compute the overlay geometry.\n let top;\n let left;\n let right;\n let bottom;\n let box = ElementExt.boxSizing(this.node); // TODO cache this?\n let rect = this.node.getBoundingClientRect();\n // Compute the overlay geometry based on the dock zone.\n switch (zone) {\n case 'root-all':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'root-top':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = rect.height * Private$5.GOLDEN_RATIO;\n break;\n case 'root-left':\n top = box.paddingTop;\n left = box.paddingLeft;\n right = rect.width * Private$5.GOLDEN_RATIO;\n bottom = box.paddingBottom;\n break;\n case 'root-right':\n top = box.paddingTop;\n left = rect.width * Private$5.GOLDEN_RATIO;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'root-bottom':\n top = rect.height * Private$5.GOLDEN_RATIO;\n left = box.paddingLeft;\n right = box.paddingRight;\n bottom = box.paddingBottom;\n break;\n case 'widget-all':\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-top':\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom + target.height / 2;\n break;\n case 'widget-left':\n top = target.top;\n left = target.left;\n right = target.right + target.width / 2;\n bottom = target.bottom;\n break;\n case 'widget-right':\n top = target.top;\n left = target.left + target.width / 2;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-bottom':\n top = target.top + target.height / 2;\n left = target.left;\n right = target.right;\n bottom = target.bottom;\n break;\n case 'widget-tab': {\n const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n top = target.top;\n left = target.left;\n right = target.right;\n bottom = target.bottom + target.height - tabHeight;\n break;\n }\n default:\n throw 'unreachable';\n }\n // Show the overlay with the computed geometry.\n this.overlay.show({ top, left, right, bottom });\n // Finally, return the computed drop zone.\n return zone;\n }\n /**\n * Create a new tab bar for use by the panel.\n */\n _createTabBar() {\n // Create the tab bar.\n let tabBar = this._renderer.createTabBar(this._document);\n // Set the generated tab bar property for the tab bar.\n Private$5.isGeneratedTabBarProperty.set(tabBar, true);\n // Hide the tab bar when in single document mode.\n if (this._mode === 'single-document') {\n tabBar.hide();\n }\n // Enforce necessary tab bar behavior.\n // TODO do we really want to enforce *all* of these?\n tabBar.tabsMovable = this._tabsMovable;\n tabBar.allowDeselect = false;\n tabBar.addButtonEnabled = this._addButtonEnabled;\n tabBar.removeBehavior = 'select-previous-tab';\n tabBar.insertBehavior = 'select-tab-if-needed';\n // Connect the signal handlers for the tab bar.\n tabBar.tabMoved.connect(this._onTabMoved, this);\n tabBar.currentChanged.connect(this._onCurrentChanged, this);\n tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n tabBar.tabDetachRequested.connect(this._onTabDetachRequested, this);\n tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n tabBar.addRequested.connect(this._onTabAddRequested, this);\n // Return the initialized tab bar.\n return tabBar;\n }\n /**\n * Create a new handle for use by the panel.\n */\n _createHandle() {\n return this._renderer.createHandle();\n }\n /**\n * Handle the `tabMoved` signal from a tab bar.\n */\n _onTabMoved() {\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `currentChanged` signal from a tab bar.\n */\n _onCurrentChanged(sender, args) {\n // Extract the previous and current title from the args.\n let { previousTitle, currentTitle } = args;\n // Hide the previous widget.\n if (previousTitle) {\n previousTitle.owner.hide();\n }\n // Show the current widget.\n if (currentTitle) {\n currentTitle.owner.show();\n }\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n // Schedule an emit of the layout modified signal.\n MessageLoop.postMessage(this, Private$5.LayoutModified);\n }\n /**\n * Handle the `addRequested` signal from a tab bar.\n */\n _onTabAddRequested(sender) {\n this._addRequested.emit(sender);\n }\n /**\n * Handle the `tabActivateRequested` signal from a tab bar.\n */\n _onTabActivateRequested(sender, args) {\n args.title.owner.activate();\n }\n /**\n * Handle the `tabCloseRequested` signal from a tab bar.\n */\n _onTabCloseRequested(sender, args) {\n args.title.owner.close();\n }\n /**\n * Handle the `tabDetachRequested` signal from a tab bar.\n */\n _onTabDetachRequested(sender, args) {\n // Do nothing if a drag is already in progress.\n if (this._drag) {\n return;\n }\n // Release the tab bar's hold on the mouse.\n sender.releaseMouse();\n // Extract the data from the args.\n let { title, tab, clientX, clientY, offset } = args;\n // Setup the mime data for the drag operation.\n let mimeData = new MimeData();\n let factory = () => title.owner;\n mimeData.setData('application/vnd.lumino.widget-factory', factory);\n // Create the drag image for the drag operation.\n let dragImage = tab.cloneNode(true);\n if (offset) {\n dragImage.style.top = `-${offset.y}px`;\n dragImage.style.left = `-${offset.x}px`;\n }\n // Create the drag object to manage the drag-drop operation.\n this._drag = new Drag({\n document: this._document,\n mimeData,\n dragImage,\n proposedAction: 'move',\n supportedActions: 'move',\n source: this\n });\n // Hide the tab node in the original tab.\n tab.classList.add('lm-mod-hidden');\n let cleanup = () => {\n this._drag = null;\n tab.classList.remove('lm-mod-hidden');\n };\n // Start the drag operation and cleanup when done.\n this._drag.start(clientX, clientY).then(cleanup);\n }\n}\n/**\n * The namespace for the `DockPanel` class statics.\n */\n(function (DockPanel) {\n /**\n * A concrete implementation of `IOverlay`.\n *\n * This is the default overlay implementation for a dock panel.\n */\n class Overlay {\n /**\n * Construct a new overlay.\n */\n constructor() {\n this._timer = -1;\n this._hidden = true;\n this.node = document.createElement('div');\n this.node.classList.add('lm-DockPanel-overlay');\n this.node.classList.add('lm-mod-hidden');\n this.node.style.position = 'absolute';\n this.node.style.contain = 'strict';\n }\n /**\n * Show the overlay using the given overlay geometry.\n *\n * @param geo - The desired geometry for the overlay.\n */\n show(geo) {\n // Update the position of the overlay.\n let style = this.node.style;\n style.top = `${geo.top}px`;\n style.left = `${geo.left}px`;\n style.right = `${geo.right}px`;\n style.bottom = `${geo.bottom}px`;\n // Clear any pending hide timer.\n clearTimeout(this._timer);\n this._timer = -1;\n // If the overlay is already visible, we're done.\n if (!this._hidden) {\n return;\n }\n // Clear the hidden flag.\n this._hidden = false;\n // Finally, show the overlay.\n this.node.classList.remove('lm-mod-hidden');\n }\n /**\n * Hide the overlay node.\n *\n * @param delay - The delay (in ms) before hiding the overlay.\n * A delay value <= 0 will hide the overlay immediately.\n */\n hide(delay) {\n // Do nothing if the overlay is already hidden.\n if (this._hidden) {\n return;\n }\n // Hide immediately if the delay is <= 0.\n if (delay <= 0) {\n clearTimeout(this._timer);\n this._timer = -1;\n this._hidden = true;\n this.node.classList.add('lm-mod-hidden');\n return;\n }\n // Do nothing if a hide is already pending.\n if (this._timer !== -1) {\n return;\n }\n // Otherwise setup the hide timer.\n this._timer = window.setTimeout(() => {\n this._timer = -1;\n this._hidden = true;\n this.node.classList.add('lm-mod-hidden');\n }, delay);\n }\n }\n DockPanel.Overlay = Overlay;\n /**\n * The default implementation of `IRenderer`.\n */\n class Renderer {\n /**\n * Create a new tab bar for use with a dock panel.\n *\n * @returns A new tab bar for a dock panel.\n */\n createTabBar(document) {\n let bar = new TabBar({ document });\n bar.addClass('lm-DockPanel-tabBar');\n return bar;\n }\n /**\n * Create a new handle node for use with a dock panel.\n *\n * @returns A new handle node for a dock panel.\n */\n createHandle() {\n let handle = document.createElement('div');\n handle.className = 'lm-DockPanel-handle';\n return handle;\n }\n }\n DockPanel.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n DockPanel.defaultRenderer = new Renderer();\n})(DockPanel || (DockPanel = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$5;\n(function (Private) {\n /**\n * A fraction used for sizing root panels; ~= `1 / golden_ratio`.\n */\n Private.GOLDEN_RATIO = 0.618;\n /**\n * The default sizes for the edge drop zones, in pixels.\n */\n Private.DEFAULT_EDGES = {\n /**\n * The size of the top edge dock zone for the root panel, in pixels.\n * This is different from the others to distinguish between the top\n * tab bar and the top root zone.\n */\n top: 12,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n right: 40,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n bottom: 40,\n /**\n * The size of the edge dock zone for the root panel, in pixels.\n */\n left: 40\n };\n /**\n * A singleton `'layout-modified'` conflatable message.\n */\n Private.LayoutModified = new ConflatableMessage('layout-modified');\n /**\n * An attached property used to track generated tab bars.\n */\n Private.isGeneratedTabBarProperty = new AttachedProperty({\n name: 'isGeneratedTabBar',\n create: () => false\n });\n /**\n * Create a single document config for the widgets in a dock panel.\n */\n function createSingleDocumentConfig(panel) {\n // Return an empty config if the panel is empty.\n if (panel.isEmpty) {\n return { main: null };\n }\n // Get a flat array of the widgets in the panel.\n let widgets = Array.from(panel.widgets());\n // Get the first selected widget in the panel.\n let selected = panel.selectedWidgets().next().value;\n // Compute the current index for the new config.\n let currentIndex = selected ? widgets.indexOf(selected) : -1;\n // Return the single document config.\n return { main: { type: 'tab-area', widgets, currentIndex } };\n }\n Private.createSingleDocumentConfig = createSingleDocumentConfig;\n /**\n * Find the drop target at the given client position.\n */\n function findDropTarget(panel, clientX, clientY, edges) {\n // Bail if the mouse is not over the dock panel.\n if (!ElementExt.hitTest(panel.node, clientX, clientY)) {\n return { zone: 'invalid', target: null };\n }\n // Look up the layout for the panel.\n let layout = panel.layout;\n // If the layout is empty, indicate the entire root drop zone.\n if (layout.isEmpty) {\n return { zone: 'root-all', target: null };\n }\n // Test the edge zones when in multiple document mode.\n if (panel.mode === 'multiple-document') {\n // Get the client rect for the dock panel.\n let panelRect = panel.node.getBoundingClientRect();\n // Compute the distance to each edge of the panel.\n let pl = clientX - panelRect.left + 1;\n let pt = clientY - panelRect.top + 1;\n let pr = panelRect.right - clientX;\n let pb = panelRect.bottom - clientY;\n // Find the minimum distance to an edge.\n let pd = Math.min(pt, pr, pb, pl);\n // Return a root zone if the mouse is within an edge.\n switch (pd) {\n case pt:\n if (pt < edges.top) {\n return { zone: 'root-top', target: null };\n }\n break;\n case pr:\n if (pr < edges.right) {\n return { zone: 'root-right', target: null };\n }\n break;\n case pb:\n if (pb < edges.bottom) {\n return { zone: 'root-bottom', target: null };\n }\n break;\n case pl:\n if (pl < edges.left) {\n return { zone: 'root-left', target: null };\n }\n break;\n default:\n throw 'unreachable';\n }\n }\n // Hit test the dock layout at the given client position.\n let target = layout.hitTestTabAreas(clientX, clientY);\n // Bail if no target area was found.\n if (!target) {\n return { zone: 'invalid', target: null };\n }\n // Return the whole tab area when in single document mode.\n if (panel.mode === 'single-document') {\n return { zone: 'widget-all', target };\n }\n // Compute the distance to each edge of the tab area.\n let al = target.x - target.left + 1;\n let at = target.y - target.top + 1;\n let ar = target.left + target.width - target.x;\n let ab = target.top + target.height - target.y;\n const tabHeight = target.tabBar.node.getBoundingClientRect().height;\n if (at < tabHeight) {\n return { zone: 'widget-tab', target };\n }\n // Get the X and Y edge sizes for the area.\n let rx = Math.round(target.width / 3);\n let ry = Math.round(target.height / 3);\n // If the mouse is not within an edge, indicate the entire area.\n if (al > rx && ar > rx && at > ry && ab > ry) {\n return { zone: 'widget-all', target };\n }\n // Scale the distances by the slenderness ratio.\n al /= rx;\n at /= ry;\n ar /= rx;\n ab /= ry;\n // Find the minimum distance to the area edge.\n let ad = Math.min(al, at, ar, ab);\n // Find the widget zone for the area edge.\n let zone;\n switch (ad) {\n case al:\n zone = 'widget-left';\n break;\n case at:\n zone = 'widget-top';\n break;\n case ar:\n zone = 'widget-right';\n break;\n case ab:\n zone = 'widget-bottom';\n break;\n default:\n throw 'unreachable';\n }\n // Return the final drop target.\n return { zone, target };\n }\n Private.findDropTarget = findDropTarget;\n /**\n * Get the drop reference widget for a tab bar.\n */\n function getDropRef(tabBar) {\n if (tabBar.titles.length === 0) {\n return null;\n }\n if (tabBar.currentTitle) {\n return tabBar.currentTitle.owner;\n }\n return tabBar.titles[tabBar.titles.length - 1].owner;\n }\n Private.getDropRef = getDropRef;\n})(Private$5 || (Private$5 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A class which tracks focus among a set of widgets.\n *\n * This class is useful when code needs to keep track of the most\n * recently focused widget(s) among a set of related widgets.\n */\nclass FocusTracker {\n constructor() {\n this._counter = 0;\n this._widgets = [];\n this._activeWidget = null;\n this._currentWidget = null;\n this._numbers = new Map();\n this._nodes = new Map();\n this._activeChanged = new Signal(this);\n this._currentChanged = new Signal(this);\n }\n /**\n * Dispose of the resources held by the tracker.\n */\n dispose() {\n // Do nothing if the tracker is already disposed.\n if (this._counter < 0) {\n return;\n }\n // Mark the tracker as disposed.\n this._counter = -1;\n // Clear the connections for the tracker.\n Signal.clearData(this);\n // Remove all event listeners.\n for (const widget of this._widgets) {\n widget.node.removeEventListener('focus', this, true);\n widget.node.removeEventListener('blur', this, true);\n }\n // Clear the internal data structures.\n this._activeWidget = null;\n this._currentWidget = null;\n this._nodes.clear();\n this._numbers.clear();\n this._widgets.length = 0;\n }\n /**\n * A signal emitted when the current widget has changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * A signal emitted when the active widget has changed.\n */\n get activeChanged() {\n return this._activeChanged;\n }\n /**\n * A flag indicating whether the tracker is disposed.\n */\n get isDisposed() {\n return this._counter < 0;\n }\n /**\n * The current widget in the tracker.\n *\n * #### Notes\n * The current widget is the widget among the tracked widgets which\n * has the *descendant node* which has most recently been focused.\n *\n * The current widget will not be updated if the node loses focus. It\n * will only be updated when a different tracked widget gains focus.\n *\n * If the current widget is removed from the tracker, the previous\n * current widget will be restored.\n *\n * This behavior is intended to follow a user's conceptual model of\n * a semantically \"current\" widget, where the \"last thing of type X\"\n * to be interacted with is the \"current instance of X\", regardless\n * of whether that instance still has focus.\n */\n get currentWidget() {\n return this._currentWidget;\n }\n /**\n * The active widget in the tracker.\n *\n * #### Notes\n * The active widget is the widget among the tracked widgets which\n * has the *descendant node* which is currently focused.\n */\n get activeWidget() {\n return this._activeWidget;\n }\n /**\n * A read only array of the widgets being tracked.\n */\n get widgets() {\n return this._widgets;\n }\n /**\n * Get the focus number for a particular widget in the tracker.\n *\n * @param widget - The widget of interest.\n *\n * @returns The focus number for the given widget, or `-1` if the\n * widget has not had focus since being added to the tracker, or\n * is not contained by the tracker.\n *\n * #### Notes\n * The focus number indicates the relative order in which the widgets\n * have gained focus. A widget with a larger number has gained focus\n * more recently than a widget with a smaller number.\n *\n * The `currentWidget` will always have the largest focus number.\n *\n * All widgets start with a focus number of `-1`, which indicates that\n * the widget has not been focused since being added to the tracker.\n */\n focusNumber(widget) {\n let n = this._numbers.get(widget);\n return n === undefined ? -1 : n;\n }\n /**\n * Test whether the focus tracker contains a given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns `true` if the widget is tracked, `false` otherwise.\n */\n has(widget) {\n return this._numbers.has(widget);\n }\n /**\n * Add a widget to the focus tracker.\n *\n * @param widget - The widget of interest.\n *\n * #### Notes\n * A widget will be automatically removed from the tracker if it\n * is disposed after being added.\n *\n * If the widget is already tracked, this is a no-op.\n */\n add(widget) {\n // Do nothing if the widget is already tracked.\n if (this._numbers.has(widget)) {\n return;\n }\n // Test whether the widget has focus.\n let focused = widget.node.contains(document.activeElement);\n // Set up the initial focus number.\n let n = focused ? this._counter++ : -1;\n // Add the widget to the internal data structures.\n this._widgets.push(widget);\n this._numbers.set(widget, n);\n this._nodes.set(widget.node, widget);\n // Set up the event listeners. The capturing phase must be used\n // since the 'focus' and 'blur' events don't bubble and Firefox\n // doesn't support the 'focusin' or 'focusout' events.\n widget.node.addEventListener('focus', this, true);\n widget.node.addEventListener('blur', this, true);\n // Connect the disposed signal handler.\n widget.disposed.connect(this._onWidgetDisposed, this);\n // Set the current and active widgets if needed.\n if (focused) {\n this._setWidgets(widget, widget);\n }\n }\n /**\n * Remove a widget from the focus tracker.\n *\n * #### Notes\n * If the widget is the `currentWidget`, the previous current widget\n * will become the new `currentWidget`.\n *\n * A widget will be automatically removed from the tracker if it\n * is disposed after being added.\n *\n * If the widget is not tracked, this is a no-op.\n */\n remove(widget) {\n // Bail early if the widget is not tracked.\n if (!this._numbers.has(widget)) {\n return;\n }\n // Disconnect the disposed signal handler.\n widget.disposed.disconnect(this._onWidgetDisposed, this);\n // Remove the event listeners.\n widget.node.removeEventListener('focus', this, true);\n widget.node.removeEventListener('blur', this, true);\n // Remove the widget from the internal data structures.\n ArrayExt.removeFirstOf(this._widgets, widget);\n this._nodes.delete(widget.node);\n this._numbers.delete(widget);\n // Bail early if the widget is not the current widget.\n if (this._currentWidget !== widget) {\n return;\n }\n // Filter the widgets for those which have had focus.\n let valid = this._widgets.filter(w => this._numbers.get(w) !== -1);\n // Get the valid widget with the max focus number.\n let previous = max(valid, (first, second) => {\n let a = this._numbers.get(first);\n let b = this._numbers.get(second);\n return a - b;\n }) || null;\n // Set the current and active widgets.\n this._setWidgets(previous, null);\n }\n /**\n * Handle the DOM events for the focus tracker.\n *\n * @param event - The DOM event sent to the panel.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the tracked nodes. It should\n * not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'focus':\n this._evtFocus(event);\n break;\n case 'blur':\n this._evtBlur(event);\n break;\n }\n }\n /**\n * Set the current and active widgets for the tracker.\n */\n _setWidgets(current, active) {\n // Swap the current widget.\n let oldCurrent = this._currentWidget;\n this._currentWidget = current;\n // Swap the active widget.\n let oldActive = this._activeWidget;\n this._activeWidget = active;\n // Emit the `currentChanged` signal if needed.\n if (oldCurrent !== current) {\n this._currentChanged.emit({ oldValue: oldCurrent, newValue: current });\n }\n // Emit the `activeChanged` signal if needed.\n if (oldActive !== active) {\n this._activeChanged.emit({ oldValue: oldActive, newValue: active });\n }\n }\n /**\n * Handle the `'focus'` event for a tracked widget.\n */\n _evtFocus(event) {\n // Find the widget which gained focus, which is known to exist.\n let widget = this._nodes.get(event.currentTarget);\n // Update the focus number if necessary.\n if (widget !== this._currentWidget) {\n this._numbers.set(widget, this._counter++);\n }\n // Set the current and active widgets.\n this._setWidgets(widget, widget);\n }\n /**\n * Handle the `'blur'` event for a tracked widget.\n */\n _evtBlur(event) {\n // Find the widget which lost focus, which is known to exist.\n let widget = this._nodes.get(event.currentTarget);\n // Get the node which being focused after this blur.\n let focusTarget = event.relatedTarget;\n // If no other node is being focused, clear the active widget.\n if (!focusTarget) {\n this._setWidgets(this._currentWidget, null);\n return;\n }\n // Bail if the focus widget is not changing.\n if (widget.node.contains(focusTarget)) {\n return;\n }\n // If no tracked widget is being focused, clear the active widget.\n if (!find(this._widgets, w => w.node.contains(focusTarget))) {\n this._setWidgets(this._currentWidget, null);\n return;\n }\n }\n /**\n * Handle the `disposed` signal for a tracked widget.\n */\n _onWidgetDisposed(sender) {\n this.remove(sender);\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout which arranges its widgets in a grid.\n */\nclass GridLayout extends Layout {\n /**\n * Construct a new grid layout.\n *\n * @param options - The options for initializing the layout.\n */\n constructor(options = {}) {\n super(options);\n this._dirty = false;\n this._rowSpacing = 4;\n this._columnSpacing = 4;\n this._items = [];\n this._rowStarts = [];\n this._columnStarts = [];\n this._rowSizers = [new BoxSizer()];\n this._columnSizers = [new BoxSizer()];\n this._box = null;\n if (options.rowCount !== undefined) {\n Private$4.reallocSizers(this._rowSizers, options.rowCount);\n }\n if (options.columnCount !== undefined) {\n Private$4.reallocSizers(this._columnSizers, options.columnCount);\n }\n if (options.rowSpacing !== undefined) {\n this._rowSpacing = Private$4.clampValue(options.rowSpacing);\n }\n if (options.columnSpacing !== undefined) {\n this._columnSpacing = Private$4.clampValue(options.columnSpacing);\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the widgets and layout items.\n for (const item of this._items) {\n let widget = item.widget;\n item.dispose();\n widget.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n this._rowStarts.length = 0;\n this._rowSizers.length = 0;\n this._columnStarts.length = 0;\n this._columnSizers.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Get the number of rows in the layout.\n */\n get rowCount() {\n return this._rowSizers.length;\n }\n /**\n * Set the number of rows in the layout.\n *\n * #### Notes\n * The minimum row count is `1`.\n */\n set rowCount(value) {\n // Do nothing if the row count does not change.\n if (value === this.rowCount) {\n return;\n }\n // Reallocate the row sizers.\n Private$4.reallocSizers(this._rowSizers, value);\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the number of columns in the layout.\n */\n get columnCount() {\n return this._columnSizers.length;\n }\n /**\n * Set the number of columns in the layout.\n *\n * #### Notes\n * The minimum column count is `1`.\n */\n set columnCount(value) {\n // Do nothing if the column count does not change.\n if (value === this.columnCount) {\n return;\n }\n // Reallocate the column sizers.\n Private$4.reallocSizers(this._columnSizers, value);\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the row spacing for the layout.\n */\n get rowSpacing() {\n return this._rowSpacing;\n }\n /**\n * Set the row spacing for the layout.\n */\n set rowSpacing(value) {\n // Clamp the spacing to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the spacing does not change\n if (this._rowSpacing === value) {\n return;\n }\n // Update the internal spacing.\n this._rowSpacing = value;\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the column spacing for the layout.\n */\n get columnSpacing() {\n return this._columnSpacing;\n }\n /**\n * Set the col spacing for the layout.\n */\n set columnSpacing(value) {\n // Clamp the spacing to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the spacing does not change\n if (this._columnSpacing === value) {\n return;\n }\n // Update the internal spacing.\n this._columnSpacing = value;\n // Schedule a fit of the parent.\n if (this.parent) {\n this.parent.fit();\n }\n }\n /**\n * Get the stretch factor for a specific row.\n *\n * @param index - The row index of interest.\n *\n * @returns The stretch factor for the row.\n *\n * #### Notes\n * This returns `-1` if the index is out of range.\n */\n rowStretch(index) {\n let sizer = this._rowSizers[index];\n return sizer ? sizer.stretch : -1;\n }\n /**\n * Set the stretch factor for a specific row.\n *\n * @param index - The row index of interest.\n *\n * @param value - The stretch factor for the row.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n setRowStretch(index, value) {\n // Look up the row sizer.\n let sizer = this._rowSizers[index];\n // Bail if the index is out of range.\n if (!sizer) {\n return;\n }\n // Clamp the value to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the stretch does not change.\n if (sizer.stretch === value) {\n return;\n }\n // Update the sizer stretch.\n sizer.stretch = value;\n // Schedule an update of the parent.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Get the stretch factor for a specific column.\n *\n * @param index - The column index of interest.\n *\n * @returns The stretch factor for the column.\n *\n * #### Notes\n * This returns `-1` if the index is out of range.\n */\n columnStretch(index) {\n let sizer = this._columnSizers[index];\n return sizer ? sizer.stretch : -1;\n }\n /**\n * Set the stretch factor for a specific column.\n *\n * @param index - The column index of interest.\n *\n * @param value - The stretch factor for the column.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n setColumnStretch(index, value) {\n // Look up the column sizer.\n let sizer = this._columnSizers[index];\n // Bail if the index is out of range.\n if (!sizer) {\n return;\n }\n // Clamp the value to the allowed range.\n value = Private$4.clampValue(value);\n // Bail if the stretch does not change.\n if (sizer.stretch === value) {\n return;\n }\n // Update the sizer stretch.\n sizer.stretch = value;\n // Schedule an update of the parent.\n if (this.parent) {\n this.parent.update();\n }\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n for (const item of this._items) {\n yield item.widget;\n }\n }\n /**\n * Add a widget to the grid layout.\n *\n * @param widget - The widget to add to the layout.\n *\n * #### Notes\n * If the widget is already contained in the layout, this is no-op.\n */\n addWidget(widget) {\n // Look up the index for the widget.\n let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n // Bail if the widget is already in the layout.\n if (i !== -1) {\n return;\n }\n // Add the widget to the layout.\n this._items.push(new LayoutItem(widget));\n // Attach the widget to the parent.\n if (this.parent) {\n this.attachWidget(widget);\n }\n }\n /**\n * Remove a widget from the grid layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Look up the index for the widget.\n let i = ArrayExt.findFirstIndex(this._items, it => it.widget === widget);\n // Bail if the widget is not in the layout.\n if (i === -1) {\n return;\n }\n // Remove the widget from the layout.\n let item = ArrayExt.removeAt(this._items, i);\n // Detach the widget from the parent.\n if (this.parent) {\n this.detachWidget(widget);\n }\n // Dispose the layout item.\n item.dispose();\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n for (const widget of this) {\n this.attachWidget(widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param widget - The widget to attach to the parent.\n */\n attachWidget(widget) {\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param widget - The widget to detach from the parent.\n */\n detachWidget(widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Reset the min sizes of the sizers.\n for (let i = 0, n = this.rowCount; i < n; ++i) {\n this._rowSizers[i].minSize = 0;\n }\n for (let i = 0, n = this.columnCount; i < n; ++i) {\n this._columnSizers[i].minSize = 0;\n }\n // Filter for the visible layout items.\n let items = this._items.filter(it => !it.isHidden);\n // Fit the layout items.\n for (let i = 0, n = items.length; i < n; ++i) {\n items[i].fit();\n }\n // Get the max row and column index.\n let maxRow = this.rowCount - 1;\n let maxCol = this.columnCount - 1;\n // Sort the items by row span.\n items.sort(Private$4.rowSpanCmp);\n // Update the min sizes of the row sizers.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Fetch the item.\n let item = items[i];\n // Get the row bounds for the item.\n let config = GridLayout.getCellConfig(item.widget);\n let r1 = Math.min(config.row, maxRow);\n let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n // Distribute the minimum height to the sizers as needed.\n Private$4.distributeMin(this._rowSizers, r1, r2, item.minHeight);\n }\n // Sort the items by column span.\n items.sort(Private$4.columnSpanCmp);\n // Update the min sizes of the column sizers.\n for (let i = 0, n = items.length; i < n; ++i) {\n // Fetch the item.\n let item = items[i];\n // Get the column bounds for the item.\n let config = GridLayout.getCellConfig(item.widget);\n let c1 = Math.min(config.column, maxCol);\n let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n // Distribute the minimum width to the sizers as needed.\n Private$4.distributeMin(this._columnSizers, c1, c2, item.minWidth);\n }\n // If no size constraint is needed, just update the parent.\n if (this.fitPolicy === 'set-no-constraint') {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n return;\n }\n // Set up the computed min size.\n let minH = maxRow * this._rowSpacing;\n let minW = maxCol * this._columnSpacing;\n // Add the sizer minimums to the computed min size.\n for (let i = 0, n = this.rowCount; i < n; ++i) {\n minH += this._rowSizers[i].minSize;\n }\n for (let i = 0, n = this.columnCount; i < n; ++i) {\n minW += this._columnSizers[i].minSize;\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the layout area adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Get the max row and column index.\n let maxRow = this.rowCount - 1;\n let maxCol = this.columnCount - 1;\n // Compute the total fixed row and column space.\n let fixedRowSpace = maxRow * this._rowSpacing;\n let fixedColSpace = maxCol * this._columnSpacing;\n // Distribute the available space to the box sizers.\n BoxEngine.calc(this._rowSizers, Math.max(0, height - fixedRowSpace));\n BoxEngine.calc(this._columnSizers, Math.max(0, width - fixedColSpace));\n // Update the row start positions.\n for (let i = 0, pos = top, n = this.rowCount; i < n; ++i) {\n this._rowStarts[i] = pos;\n pos += this._rowSizers[i].size + this._rowSpacing;\n }\n // Update the column start positions.\n for (let i = 0, pos = left, n = this.columnCount; i < n; ++i) {\n this._columnStarts[i] = pos;\n pos += this._columnSizers[i].size + this._columnSpacing;\n }\n // Update the geometry of the layout items.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Fetch the cell bounds for the widget.\n let config = GridLayout.getCellConfig(item.widget);\n let r1 = Math.min(config.row, maxRow);\n let c1 = Math.min(config.column, maxCol);\n let r2 = Math.min(config.row + config.rowSpan - 1, maxRow);\n let c2 = Math.min(config.column + config.columnSpan - 1, maxCol);\n // Compute the cell geometry.\n let x = this._columnStarts[c1];\n let y = this._rowStarts[r1];\n let w = this._columnStarts[c2] + this._columnSizers[c2].size - x;\n let h = this._rowStarts[r2] + this._rowSizers[r2].size - y;\n // Update the geometry of the layout item.\n item.update(x, y, w, h);\n }\n }\n}\n/**\n * The namespace for the `GridLayout` class statics.\n */\n(function (GridLayout) {\n /**\n * Get the cell config for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @returns The cell config for the widget.\n */\n function getCellConfig(widget) {\n return Private$4.cellConfigProperty.get(widget);\n }\n GridLayout.getCellConfig = getCellConfig;\n /**\n * Set the cell config for the given widget.\n *\n * @param widget - The widget of interest.\n *\n * @param value - The value for the cell config.\n */\n function setCellConfig(widget, value) {\n Private$4.cellConfigProperty.set(widget, Private$4.normalizeConfig(value));\n }\n GridLayout.setCellConfig = setCellConfig;\n})(GridLayout || (GridLayout = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$4;\n(function (Private) {\n /**\n * The property descriptor for the widget cell config.\n */\n Private.cellConfigProperty = new AttachedProperty({\n name: 'cellConfig',\n create: () => ({ row: 0, column: 0, rowSpan: 1, columnSpan: 1 }),\n changed: onChildCellConfigChanged\n });\n /**\n * Normalize a partial cell config object.\n */\n function normalizeConfig(config) {\n let row = Math.max(0, Math.floor(config.row || 0));\n let column = Math.max(0, Math.floor(config.column || 0));\n let rowSpan = Math.max(1, Math.floor(config.rowSpan || 0));\n let columnSpan = Math.max(1, Math.floor(config.columnSpan || 0));\n return { row, column, rowSpan, columnSpan };\n }\n Private.normalizeConfig = normalizeConfig;\n /**\n * Clamp a value to an integer >= 0.\n */\n function clampValue(value) {\n return Math.max(0, Math.floor(value));\n }\n Private.clampValue = clampValue;\n /**\n * A sort comparison function for row spans.\n */\n function rowSpanCmp(a, b) {\n let c1 = Private.cellConfigProperty.get(a.widget);\n let c2 = Private.cellConfigProperty.get(b.widget);\n return c1.rowSpan - c2.rowSpan;\n }\n Private.rowSpanCmp = rowSpanCmp;\n /**\n * A sort comparison function for column spans.\n */\n function columnSpanCmp(a, b) {\n let c1 = Private.cellConfigProperty.get(a.widget);\n let c2 = Private.cellConfigProperty.get(b.widget);\n return c1.columnSpan - c2.columnSpan;\n }\n Private.columnSpanCmp = columnSpanCmp;\n /**\n * Reallocate the box sizers for the given grid dimensions.\n */\n function reallocSizers(sizers, count) {\n // Coerce the count to the valid range.\n count = Math.max(1, Math.floor(count));\n // Add the missing sizers.\n while (sizers.length < count) {\n sizers.push(new BoxSizer());\n }\n // Remove the extra sizers.\n if (sizers.length > count) {\n sizers.length = count;\n }\n }\n Private.reallocSizers = reallocSizers;\n /**\n * Distribute a min size constraint across a range of sizers.\n */\n function distributeMin(sizers, i1, i2, minSize) {\n // Sanity check the indices.\n if (i2 < i1) {\n return;\n }\n // Handle the simple case of no cell span.\n if (i1 === i2) {\n let sizer = sizers[i1];\n sizer.minSize = Math.max(sizer.minSize, minSize);\n return;\n }\n // Compute the total current min size of the span.\n let totalMin = 0;\n for (let i = i1; i <= i2; ++i) {\n totalMin += sizers[i].minSize;\n }\n // Do nothing if the total is greater than the required.\n if (totalMin >= minSize) {\n return;\n }\n // Compute the portion of the space to allocate to each sizer.\n let portion = (minSize - totalMin) / (i2 - i1 + 1);\n // Add the portion to each sizer.\n for (let i = i1; i <= i2; ++i) {\n sizers[i].minSize += portion;\n }\n }\n Private.distributeMin = distributeMin;\n /**\n * The change handler for the child cell config property.\n */\n function onChildCellConfigChanged(child) {\n if (child.parent && child.parent.layout instanceof GridLayout) {\n child.parent.fit();\n }\n }\n})(Private$4 || (Private$4 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which displays menus as a canonical menu bar.\n */\nclass MenuBar extends Widget {\n /**\n * Construct a new menu bar.\n *\n * @param options - The options for initializing the menu bar.\n */\n constructor(options = {}) {\n super({ node: Private$3.createNode() });\n // Track the index of the item that is currently focused or hovered. -1 means nothing focused or hovered.\n this._activeIndex = -1;\n // Track which item can be focused using the TAB key. Unlike _activeIndex will\n // always point to a menuitem. Whenever you update this value, it's important\n // to follow it with an \"update-request\" message so that the `tabindex`\n // attribute on each menubar item gets properly updated.\n this._tabFocusIndex = 0;\n this._menus = [];\n this._childMenu = null;\n this._overflowMenu = null;\n this._menuItemSizes = [];\n this._overflowIndex = -1;\n this.addClass('lm-MenuBar');\n this.setFlag(Widget.Flag.DisallowLayout);\n this.renderer = options.renderer || MenuBar.defaultRenderer;\n this._forceItemsPosition = options.forceItemsPosition || {\n forceX: true,\n forceY: true\n };\n this._overflowMenuOptions = options.overflowMenuOptions || {\n isVisible: true\n };\n }\n /**\n * Dispose of the resources held by the widget.\n */\n dispose() {\n this._closeChildMenu();\n this._menus.length = 0;\n super.dispose();\n }\n /**\n * The child menu of the menu bar.\n *\n * #### Notes\n * This will be `null` if the menu bar does not have an open menu.\n */\n get childMenu() {\n return this._childMenu;\n }\n /**\n * The overflow index of the menu bar.\n */\n get overflowIndex() {\n return this._overflowIndex;\n }\n /**\n * The overflow menu of the menu bar.\n */\n get overflowMenu() {\n return this._overflowMenu;\n }\n /**\n * Get the menu bar content node.\n *\n * #### Notes\n * This is the node which holds the menu title nodes.\n *\n * Modifying this node directly can lead to undefined behavior.\n */\n get contentNode() {\n return this.node.getElementsByClassName('lm-MenuBar-content')[0];\n }\n /**\n * Get the currently active menu.\n */\n get activeMenu() {\n return this._menus[this._activeIndex] || null;\n }\n /**\n * Set the currently active menu.\n *\n * #### Notes\n * If the menu does not exist, the menu will be set to `null`.\n */\n set activeMenu(value) {\n this.activeIndex = value ? this._menus.indexOf(value) : -1;\n }\n /**\n * Get the index of the currently active menu.\n *\n * #### Notes\n * This will be `-1` if no menu is active.\n */\n get activeIndex() {\n return this._activeIndex;\n }\n /**\n * Set the index of the currently active menu.\n *\n * #### Notes\n * If the menu cannot be activated, the index will be set to `-1`.\n */\n set activeIndex(value) {\n // Adjust the value for an out of range index.\n if (value < 0 || value >= this._menus.length) {\n value = -1;\n }\n // An empty menu cannot be active\n if (value > -1 && this._menus[value].items.length === 0) {\n value = -1;\n }\n // Bail early if the index will not change.\n if (this._activeIndex === value) {\n return;\n }\n // Update the active index.\n this._activeIndex = value;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * A read-only array of the menus in the menu bar.\n */\n get menus() {\n return this._menus;\n }\n /**\n * Open the active menu and activate its first menu item.\n *\n * #### Notes\n * If there is no active menu, this is a no-op.\n */\n openActiveMenu() {\n // Bail early if there is no active item.\n if (this._activeIndex === -1) {\n return;\n }\n // Open the child menu.\n this._openChildMenu();\n // Activate the first item in the child menu.\n if (this._childMenu) {\n this._childMenu.activeIndex = -1;\n this._childMenu.activateNextItem();\n }\n }\n /**\n * Add a menu to the end of the menu bar.\n *\n * @param menu - The menu to add to the menu bar.\n *\n * #### Notes\n * If the menu is already added to the menu bar, it will be moved.\n */\n addMenu(menu, update = true) {\n this.insertMenu(this._menus.length, menu, update);\n }\n /**\n * Insert a menu into the menu bar at the specified index.\n *\n * @param index - The index at which to insert the menu.\n *\n * @param menu - The menu to insert into the menu bar.\n *\n * #### Notes\n * The index will be clamped to the bounds of the menus.\n *\n * If the menu is already added to the menu bar, it will be moved.\n */\n insertMenu(index, menu, update = true) {\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Look up the index of the menu.\n let i = this._menus.indexOf(menu);\n // Clamp the insert index to the array bounds.\n let j = Math.max(0, Math.min(index, this._menus.length));\n // If the menu is not in the array, insert it.\n if (i === -1) {\n // Insert the menu into the array.\n ArrayExt.insert(this._menus, j, menu);\n // Add the styling class to the menu.\n menu.addClass('lm-MenuBar-menu');\n // Connect to the menu signals.\n menu.aboutToClose.connect(this._onMenuAboutToClose, this);\n menu.menuRequested.connect(this._onMenuMenuRequested, this);\n menu.title.changed.connect(this._onTitleChanged, this);\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n // There is nothing more to do.\n return;\n }\n // Otherwise, the menu exists in the array and should be moved.\n // Adjust the index if the location is at the end of the array.\n if (j === this._menus.length) {\n j--;\n }\n // Bail if there is no effective move.\n if (i === j) {\n return;\n }\n // Move the menu to the new locations.\n ArrayExt.move(this._menus, i, j);\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n }\n /**\n * Remove a menu from the menu bar.\n *\n * @param menu - The menu to remove from the menu bar.\n *\n * #### Notes\n * This is a no-op if the menu is not in the menu bar.\n */\n removeMenu(menu, update = true) {\n this.removeMenuAt(this._menus.indexOf(menu), update);\n }\n /**\n * Remove the menu at a given index from the menu bar.\n *\n * @param index - The index of the menu to remove.\n *\n * #### Notes\n * This is a no-op if the index is out of range.\n */\n removeMenuAt(index, update = true) {\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Remove the menu from the array.\n let menu = ArrayExt.removeAt(this._menus, index);\n // Bail if the index is out of range.\n if (!menu) {\n return;\n }\n // Disconnect from the menu signals.\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n menu.title.changed.disconnect(this._onTitleChanged, this);\n // Remove the styling class from the menu.\n menu.removeClass('lm-MenuBar-menu');\n // Schedule an update of the items.\n if (update) {\n this.update();\n }\n }\n /**\n * Remove all menus from the menu bar.\n */\n clearMenus() {\n // Bail if there is nothing to remove.\n if (this._menus.length === 0) {\n return;\n }\n // Close the child menu before making changes.\n this._closeChildMenu();\n // Disconnect from the menu signals and remove the styling class.\n for (let menu of this._menus) {\n menu.aboutToClose.disconnect(this._onMenuAboutToClose, this);\n menu.menuRequested.disconnect(this._onMenuMenuRequested, this);\n menu.title.changed.disconnect(this._onTitleChanged, this);\n menu.removeClass('lm-MenuBar-menu');\n }\n // Clear the menus array.\n this._menus.length = 0;\n // Schedule an update of the items.\n this.update();\n }\n /**\n * Handle the DOM events for the menu bar.\n *\n * @param event - The DOM event sent to the menu bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the menu bar's DOM nodes. It\n * should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'focusout':\n this._evtFocusOut(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('keydown', this);\n this.node.addEventListener('mousedown', this);\n this.node.addEventListener('mousemove', this);\n this.node.addEventListener('focusout', this);\n this.node.addEventListener('contextmenu', this);\n }\n /**\n * A message handler invoked on an `'after-detach'` message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('keydown', this);\n this.node.removeEventListener('mousedown', this);\n this.node.removeEventListener('mousemove', this);\n this.node.removeEventListener('focusout', this);\n this.node.removeEventListener('contextmenu', this);\n this._closeChildMenu();\n }\n /**\n * A message handler invoked on an `'activate-request'` message.\n */\n onActivateRequest(msg) {\n if (this.isAttached) {\n this._focusItemAt(0);\n }\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n this.update();\n super.onResize(msg);\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n var _a;\n let menus = this._menus;\n let renderer = this.renderer;\n let activeIndex = this._activeIndex;\n let tabFocusIndex = this._tabFocusIndex >= 0 && this._tabFocusIndex < menus.length\n ? this._tabFocusIndex\n : 0;\n let length = this._overflowIndex > -1 ? this._overflowIndex : menus.length;\n let totalMenuSize = 0;\n let isVisible = false;\n // Check that the overflow menu doesn't count\n length = this._overflowMenu !== null ? length - 1 : length;\n let content = new Array(length);\n // Render visible menus\n for (let i = 0; i < length; ++i) {\n content[i] = renderer.renderItem({\n title: menus[i].title,\n active: i === activeIndex,\n tabbable: i === tabFocusIndex,\n disabled: menus[i].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = i;\n this.activeIndex = i;\n }\n });\n // Calculate size of current menu\n totalMenuSize += this._menuItemSizes[i];\n // Check if overflow menu is already rendered\n if (menus[i].title.label === this._overflowMenuOptions.title) {\n isVisible = true;\n length--;\n }\n }\n // Render overflow menu if needed and active\n if (this._overflowMenuOptions.isVisible) {\n if (this._overflowIndex > -1 && !isVisible) {\n // Create overflow menu\n if (this._overflowMenu === null) {\n const overflowMenuTitle = (_a = this._overflowMenuOptions.title) !== null && _a !== void 0 ? _a : '...';\n this._overflowMenu = new Menu({ commands: new CommandRegistry() });\n this._overflowMenu.title.label = overflowMenuTitle;\n this._overflowMenu.title.mnemonic = 0;\n this.addMenu(this._overflowMenu, false);\n }\n // Move menus to overflow menu\n for (let i = menus.length - 2; i >= length; i--) {\n const submenu = this.menus[i];\n submenu.title.mnemonic = 0;\n this._overflowMenu.insertItem(0, {\n type: 'submenu',\n submenu: submenu\n });\n this.removeMenu(submenu, false);\n }\n content[length] = renderer.renderItem({\n title: this._overflowMenu.title,\n active: length === activeIndex && menus[length].items.length !== 0,\n tabbable: length === tabFocusIndex,\n disabled: menus[length].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = length;\n this.activeIndex = length;\n }\n });\n length++;\n }\n else if (this._overflowMenu !== null) {\n // Remove submenus from overflow menu\n let overflowMenuItems = this._overflowMenu.items;\n let screenSize = this.node.offsetWidth;\n let n = this._overflowMenu.items.length;\n for (let i = 0; i < n; ++i) {\n let index = menus.length - 1 - i;\n if (screenSize - totalMenuSize > this._menuItemSizes[index]) {\n let menu = overflowMenuItems[0].submenu;\n this._overflowMenu.removeItemAt(0);\n this.insertMenu(length, menu, false);\n content[length] = renderer.renderItem({\n title: menu.title,\n active: false,\n tabbable: length === tabFocusIndex,\n disabled: menus[length].items.length === 0,\n onfocus: () => {\n this._tabFocusIndex = length;\n this.activeIndex = length;\n }\n });\n length++;\n }\n }\n if (this._overflowMenu.items.length === 0) {\n this.removeMenu(this._overflowMenu, false);\n content.pop();\n this._overflowMenu = null;\n this._overflowIndex = -1;\n }\n }\n }\n VirtualDOM.render(content, this.contentNode);\n this._updateOverflowIndex();\n }\n /**\n * Calculate and update the current overflow index.\n */\n _updateOverflowIndex() {\n if (!this._overflowMenuOptions.isVisible) {\n return;\n }\n // Get elements visible in the main menu bar\n const itemMenus = this.contentNode.childNodes;\n let screenSize = this.node.offsetWidth;\n let totalMenuSize = 0;\n let index = -1;\n let n = itemMenus.length;\n if (this._menuItemSizes.length == 0) {\n // Check if it is the first resize and get info about menu items sizes\n for (let i = 0; i < n; i++) {\n let item = itemMenus[i];\n // Add sizes to array\n totalMenuSize += item.offsetWidth;\n this._menuItemSizes.push(item.offsetWidth);\n if (totalMenuSize > screenSize && index === -1) {\n index = i;\n }\n }\n }\n else {\n // Calculate current menu size\n for (let i = 0; i < this._menuItemSizes.length; i++) {\n totalMenuSize += this._menuItemSizes[i];\n if (totalMenuSize > screenSize) {\n index = i;\n break;\n }\n }\n }\n this._overflowIndex = index;\n }\n /**\n * Handle the `'keydown'` event for the menu bar.\n *\n * #### Notes\n * All keys are trapped except the tab key that is ignored.\n */\n _evtKeyDown(event) {\n // Fetch the key code for the event.\n let kc = event.keyCode;\n // Reset the active index on tab, but do not trap the tab key.\n if (kc === 9) {\n this.activeIndex = -1;\n return;\n }\n // A menu bar handles all other keydown events.\n event.preventDefault();\n event.stopPropagation();\n // Enter, Space, Up Arrow, Down Arrow\n if (kc === 13 || kc === 32 || kc === 38 || kc === 40) {\n // The active index may have changed (for example, user hovers over an\n // item with the mouse), so be sure to use the focus index.\n this.activeIndex = this._tabFocusIndex;\n if (this.activeIndex !== this._tabFocusIndex) {\n // Bail if the setter refused to set activeIndex to tabFocusIndex\n // because it means that the item at tabFocusIndex cannot be opened (for\n // example, it has an empty menu)\n return;\n }\n this.openActiveMenu();\n return;\n }\n // Escape\n if (kc === 27) {\n this._closeChildMenu();\n this._focusItemAt(this.activeIndex);\n return;\n }\n // Left or Right Arrow\n if (kc === 37 || kc === 39) {\n let direction = kc === 37 ? -1 : 1;\n let start = this._tabFocusIndex + direction;\n let n = this._menus.length;\n for (let i = 0; i < n; i++) {\n let index = (n + start + direction * i) % n;\n if (this._menus[index].items.length) {\n this._focusItemAt(index);\n return;\n }\n }\n return;\n }\n // Get the pressed key character.\n let key = getKeyboardLayout().keyForKeydownEvent(event);\n // Bail if the key is not valid.\n if (!key) {\n return;\n }\n // Search for the next best matching mnemonic item.\n let start = this._activeIndex + 1;\n let result = Private$3.findMnemonic(this._menus, key, start);\n // Handle the requested mnemonic based on the search results.\n // If exactly one mnemonic is matched, that menu is opened.\n // Otherwise, the next mnemonic is activated if available,\n // followed by the auto mnemonic if available.\n if (result.index !== -1 && !result.multiple) {\n this.activeIndex = result.index;\n this.openActiveMenu();\n }\n else if (result.index !== -1) {\n this.activeIndex = result.index;\n this._focusItemAt(this.activeIndex);\n }\n else if (result.auto !== -1) {\n this.activeIndex = result.auto;\n this._focusItemAt(this.activeIndex);\n }\n }\n /**\n * Handle the `'mousedown'` event for the menu bar.\n */\n _evtMouseDown(event) {\n // Bail if the mouse press was not on the menu bar. This can occur\n // when the document listener is installed for an active menu bar.\n if (!ElementExt.hitTest(this.node, event.clientX, event.clientY)) {\n return;\n }\n // Stop the propagation of the event. Immediate propagation is\n // also stopped so that an open menu does not handle the event.\n event.stopPropagation();\n event.stopImmediatePropagation();\n // Check if the mouse is over one of the menu items.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // If the press was not on an item, close the child menu.\n if (index === -1) {\n this._closeChildMenu();\n return;\n }\n // If the press was not the left mouse button, do nothing further.\n if (event.button !== 0) {\n return;\n }\n // Otherwise, toggle the open state of the child menu.\n if (this._childMenu) {\n this._closeChildMenu();\n this.activeIndex = index;\n }\n else {\n // If we don't call preventDefault() here, then the item in the menu\n // bar will take focus over the menu that is being opened.\n event.preventDefault();\n const position = this._positionForMenu(index);\n Menu.saveWindowData();\n // Begin DOM modifications.\n this.activeIndex = index;\n this._openChildMenu(position);\n }\n }\n /**\n * Handle the `'mousemove'` event for the menu bar.\n */\n _evtMouseMove(event) {\n // Check if the mouse is over one of the menu items.\n let index = ArrayExt.findFirstIndex(this.contentNode.children, node => {\n return ElementExt.hitTest(node, event.clientX, event.clientY);\n });\n // Bail early if the active index will not change.\n if (index === this._activeIndex) {\n return;\n }\n // Bail early if a child menu is open and the mouse is not over\n // an item. This allows the child menu to be kept open when the\n // mouse is over the empty part of the menu bar.\n if (index === -1 && this._childMenu) {\n return;\n }\n // Get position for the new menu >before< updating active index.\n const position = index >= 0 && this._childMenu ? this._positionForMenu(index) : null;\n // Before any modification, update window data.\n Menu.saveWindowData();\n // Begin DOM modifications.\n // Update the active index to the hovered item.\n this.activeIndex = index;\n // Open the new menu if a menu is already open.\n if (position) {\n this._openChildMenu(position);\n }\n }\n /**\n * Find initial position for the menu based on menubar item position.\n *\n * NOTE: this should be called before updating active index to avoid\n * an additional layout and style invalidation as changing active\n * index modifies DOM.\n */\n _positionForMenu(index) {\n let itemNode = this.contentNode.children[index];\n let { left, bottom } = itemNode.getBoundingClientRect();\n return {\n top: bottom,\n left\n };\n }\n /**\n * Handle the `'focusout'` event for the menu bar.\n */\n _evtFocusOut(event) {\n // Reset the active index if there is no open menu and the menubar is losing focus.\n if (!this._childMenu && !this.node.contains(event.relatedTarget)) {\n this.activeIndex = -1;\n }\n }\n /**\n * Focus an item in the menu bar.\n *\n * #### Notes\n * Does not open the associated menu.\n */\n _focusItemAt(index) {\n const itemNode = this.contentNode.childNodes[index];\n if (itemNode) {\n itemNode.focus();\n }\n }\n /**\n * Open the child menu at the active index immediately.\n *\n * If a different child menu is already open, it will be closed,\n * even if there is no active menu.\n */\n _openChildMenu(options = {}) {\n // If there is no active menu, close the current menu.\n let newMenu = this.activeMenu;\n if (!newMenu) {\n this._closeChildMenu();\n return;\n }\n // Bail if there is no effective menu change.\n let oldMenu = this._childMenu;\n if (oldMenu === newMenu) {\n return;\n }\n // Swap the internal menu reference.\n this._childMenu = newMenu;\n // Close the current menu, or setup for the new menu.\n if (oldMenu) {\n oldMenu.close();\n }\n else {\n document.addEventListener('mousedown', this, true);\n }\n // Update the tab focus index and ensure the menu bar is updated.\n this._tabFocusIndex = this.activeIndex;\n MessageLoop.sendMessage(this, Widget.Msg.UpdateRequest);\n // Get the positioning data for the new menu.\n let { left, top } = options;\n if (typeof left === 'undefined' || typeof top === 'undefined') {\n ({ left, top } = this._positionForMenu(this._activeIndex));\n }\n // Begin DOM modifications\n if (!oldMenu) {\n // Continue setup for new menu\n this.addClass('lm-mod-active');\n }\n // Open the new menu at the computed location.\n if (newMenu.items.length > 0) {\n newMenu.open(left, top, this._forceItemsPosition);\n }\n }\n /**\n * Close the child menu immediately.\n *\n * This is a no-op if a child menu is not open.\n */\n _closeChildMenu() {\n // Bail if no child menu is open.\n if (!this._childMenu) {\n return;\n }\n // Remove the active class from the menu bar.\n this.removeClass('lm-mod-active');\n // Remove the document listeners.\n document.removeEventListener('mousedown', this, true);\n // Clear the internal menu reference.\n let menu = this._childMenu;\n this._childMenu = null;\n // Close the menu.\n menu.close();\n // Reset the active index.\n this.activeIndex = -1;\n }\n /**\n * Handle the `aboutToClose` signal of a menu.\n */\n _onMenuAboutToClose(sender) {\n // Bail if the sender is not the child menu.\n if (sender !== this._childMenu) {\n return;\n }\n // Remove the active class from the menu bar.\n this.removeClass('lm-mod-active');\n // Remove the document listeners.\n document.removeEventListener('mousedown', this, true);\n // Clear the internal menu reference.\n this._childMenu = null;\n // Reset the active index.\n this.activeIndex = -1;\n }\n /**\n * Handle the `menuRequested` signal of a child menu.\n */\n _onMenuMenuRequested(sender, args) {\n // Bail if the sender is not the child menu.\n if (sender !== this._childMenu) {\n return;\n }\n // Look up the active index and menu count.\n let i = this._activeIndex;\n let n = this._menus.length;\n // Active the next requested index.\n switch (args) {\n case 'next':\n this.activeIndex = i === n - 1 ? 0 : i + 1;\n break;\n case 'previous':\n this.activeIndex = i === 0 ? n - 1 : i - 1;\n break;\n }\n // Open the active menu.\n this.openActiveMenu();\n }\n /**\n * Handle the `changed` signal of a title object.\n */\n _onTitleChanged() {\n this.update();\n }\n}\n/**\n * The namespace for the `MenuBar` class statics.\n */\n(function (MenuBar) {\n /**\n * The default implementation of `IRenderer`.\n *\n * #### Notes\n * Subclasses are free to reimplement rendering methods as needed.\n */\n class Renderer {\n /**\n * Render the virtual element for a menu bar item.\n *\n * @param data - The data to use for rendering the item.\n *\n * @returns A virtual element representing the item.\n */\n renderItem(data) {\n let className = this.createItemClass(data);\n let dataset = this.createItemDataset(data);\n let aria = this.createItemARIA(data);\n return h.li({\n className,\n dataset,\n ...(data.disabled ? {} : { tabindex: data.tabbable ? '0' : '-1' }),\n onfocus: data.onfocus,\n ...aria\n }, this.renderIcon(data), this.renderLabel(data));\n }\n /**\n * Render the icon element for a menu bar item.\n *\n * @param data - The data to use for rendering the icon.\n *\n * @returns A virtual element representing the item icon.\n */\n renderIcon(data) {\n let className = this.createIconClass(data);\n // If data.title.icon is undefined, it will be ignored.\n return h.div({ className }, data.title.icon, data.title.iconLabel);\n }\n /**\n * Render the label element for a menu item.\n *\n * @param data - The data to use for rendering the label.\n *\n * @returns A virtual element representing the item label.\n */\n renderLabel(data) {\n let content = this.formatLabel(data);\n return h.div({ className: 'lm-MenuBar-itemLabel' }, content);\n }\n /**\n * Create the class name for the menu bar item.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the menu item.\n */\n createItemClass(data) {\n let name = 'lm-MenuBar-item';\n if (data.title.className) {\n name += ` ${data.title.className}`;\n }\n if (data.active && !data.disabled) {\n name += ' lm-mod-active';\n }\n return name;\n }\n /**\n * Create the dataset for a menu bar item.\n *\n * @param data - The data to use for the item.\n *\n * @returns The dataset for the menu bar item.\n */\n createItemDataset(data) {\n return data.title.dataset;\n }\n /**\n * Create the aria attributes for menu bar item.\n *\n * @param data - The data to use for the aria attributes.\n *\n * @returns The aria attributes object for the item.\n */\n createItemARIA(data) {\n return {\n role: 'menuitem',\n 'aria-haspopup': 'true',\n 'aria-disabled': data.disabled ? 'true' : 'false'\n };\n }\n /**\n * Create the class name for the menu bar item icon.\n *\n * @param data - The data to use for the class name.\n *\n * @returns The full class name for the item icon.\n */\n createIconClass(data) {\n let name = 'lm-MenuBar-itemIcon';\n let extra = data.title.iconClass;\n return extra ? `${name} ${extra}` : name;\n }\n /**\n * Create the render content for the label node.\n *\n * @param data - The data to use for the label content.\n *\n * @returns The content to add to the label node.\n */\n formatLabel(data) {\n // Fetch the label text and mnemonic index.\n let { label, mnemonic } = data.title;\n // If the index is out of range, do not modify the label.\n if (mnemonic < 0 || mnemonic >= label.length) {\n return label;\n }\n // Split the label into parts.\n let prefix = label.slice(0, mnemonic);\n let suffix = label.slice(mnemonic + 1);\n let char = label[mnemonic];\n // Wrap the mnemonic character in a span.\n let span = h.span({ className: 'lm-MenuBar-itemMnemonic' }, char);\n // Return the content parts.\n return [prefix, span, suffix];\n }\n }\n MenuBar.Renderer = Renderer;\n /**\n * The default `Renderer` instance.\n */\n MenuBar.defaultRenderer = new Renderer();\n})(MenuBar || (MenuBar = {}));\n/**\n * The namespace for the module implementation details.\n */\nvar Private$3;\n(function (Private) {\n /**\n * Create the DOM node for a menu bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let content = document.createElement('ul');\n content.className = 'lm-MenuBar-content';\n node.appendChild(content);\n content.setAttribute('role', 'menubar');\n return node;\n }\n Private.createNode = createNode;\n /**\n * Find the best matching mnemonic item.\n *\n * The search starts at the given index and wraps around.\n */\n function findMnemonic(menus, key, start) {\n // Setup the result variables.\n let index = -1;\n let auto = -1;\n let multiple = false;\n // Normalize the key to upper case.\n let upperKey = key.toUpperCase();\n // Search the items from the given start index.\n for (let i = 0, n = menus.length; i < n; ++i) {\n // Compute the wrapped index.\n let k = (i + start) % n;\n // Look up the menu title.\n let title = menus[k].title;\n // Ignore titles with an empty label.\n if (title.label.length === 0) {\n continue;\n }\n // Look up the mnemonic index for the label.\n let mn = title.mnemonic;\n // Handle a valid mnemonic index.\n if (mn >= 0 && mn < title.label.length) {\n if (title.label[mn].toUpperCase() === upperKey) {\n if (index === -1) {\n index = k;\n }\n else {\n multiple = true;\n }\n }\n continue;\n }\n // Finally, handle the auto index if possible.\n if (auto === -1 && title.label[0].toUpperCase() === upperKey) {\n auto = k;\n }\n }\n // Return the search results.\n return { index, multiple, auto };\n }\n Private.findMnemonic = findMnemonic;\n})(Private$3 || (Private$3 = {}));\n\n/**\n * A widget which implements a canonical scroll bar.\n */\nclass ScrollBar extends Widget {\n /**\n * Construct a new scroll bar.\n *\n * @param options - The options for initializing the scroll bar.\n */\n constructor(options = {}) {\n super({ node: Private$2.createNode() });\n /**\n * A timeout callback for repeating the mouse press.\n */\n this._onRepeat = () => {\n // Clear the repeat timer id.\n this._repeatTimer = -1;\n // Bail if the mouse has been released.\n if (!this._pressData) {\n return;\n }\n // Look up the part that was pressed.\n let part = this._pressData.part;\n // Bail if the thumb was pressed.\n if (part === 'thumb') {\n return;\n }\n // Schedule the timer for another repeat.\n this._repeatTimer = window.setTimeout(this._onRepeat, 20);\n // Get the current mouse position.\n let mouseX = this._pressData.mouseX;\n let mouseY = this._pressData.mouseY;\n // Handle a decrement button repeat.\n if (part === 'decrement') {\n // Bail if the mouse is not over the button.\n if (!ElementExt.hitTest(this.decrementNode, mouseX, mouseY)) {\n return;\n }\n // Emit the step requested signal.\n this._stepRequested.emit('decrement');\n // Finished.\n return;\n }\n // Handle an increment button repeat.\n if (part === 'increment') {\n // Bail if the mouse is not over the button.\n if (!ElementExt.hitTest(this.incrementNode, mouseX, mouseY)) {\n return;\n }\n // Emit the step requested signal.\n this._stepRequested.emit('increment');\n // Finished.\n return;\n }\n // Handle a track repeat.\n if (part === 'track') {\n // Bail if the mouse is not over the track.\n if (!ElementExt.hitTest(this.trackNode, mouseX, mouseY)) {\n return;\n }\n // Fetch the thumb node.\n let thumbNode = this.thumbNode;\n // Bail if the mouse is over the thumb.\n if (ElementExt.hitTest(thumbNode, mouseX, mouseY)) {\n return;\n }\n // Fetch the client rect for the thumb.\n let thumbRect = thumbNode.getBoundingClientRect();\n // Determine the direction for the page request.\n let dir;\n if (this._orientation === 'horizontal') {\n dir = mouseX < thumbRect.left ? 'decrement' : 'increment';\n }\n else {\n dir = mouseY < thumbRect.top ? 'decrement' : 'increment';\n }\n // Emit the page requested signal.\n this._pageRequested.emit(dir);\n // Finished.\n return;\n }\n };\n this._value = 0;\n this._page = 10;\n this._maximum = 100;\n this._repeatTimer = -1;\n this._pressData = null;\n this._thumbMoved = new Signal(this);\n this._stepRequested = new Signal(this);\n this._pageRequested = new Signal(this);\n this.addClass('lm-ScrollBar');\n this.setFlag(Widget.Flag.DisallowLayout);\n // Set the orientation.\n this._orientation = options.orientation || 'vertical';\n this.dataset['orientation'] = this._orientation;\n // Parse the rest of the options.\n if (options.maximum !== undefined) {\n this._maximum = Math.max(0, options.maximum);\n }\n if (options.page !== undefined) {\n this._page = Math.max(0, options.page);\n }\n if (options.value !== undefined) {\n this._value = Math.max(0, Math.min(options.value, this._maximum));\n }\n }\n /**\n * A signal emitted when the user moves the scroll thumb.\n *\n * #### Notes\n * The payload is the current value of the scroll bar.\n */\n get thumbMoved() {\n return this._thumbMoved;\n }\n /**\n * A signal emitted when the user clicks a step button.\n *\n * #### Notes\n * The payload is whether a decrease or increase is requested.\n */\n get stepRequested() {\n return this._stepRequested;\n }\n /**\n * A signal emitted when the user clicks the scroll track.\n *\n * #### Notes\n * The payload is whether a decrease or increase is requested.\n */\n get pageRequested() {\n return this._pageRequested;\n }\n /**\n * Get the orientation of the scroll bar.\n */\n get orientation() {\n return this._orientation;\n }\n /**\n * Set the orientation of the scroll bar.\n */\n set orientation(value) {\n // Do nothing if the orientation does not change.\n if (this._orientation === value) {\n return;\n }\n // Release the mouse before making changes.\n this._releaseMouse();\n // Update the internal orientation.\n this._orientation = value;\n this.dataset['orientation'] = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the current value of the scroll bar.\n */\n get value() {\n return this._value;\n }\n /**\n * Set the current value of the scroll bar.\n *\n * #### Notes\n * The value will be clamped to the range `[0, maximum]`.\n */\n set value(value) {\n // Clamp the value to the allowable range.\n value = Math.max(0, Math.min(value, this._maximum));\n // Do nothing if the value does not change.\n if (this._value === value) {\n return;\n }\n // Update the internal value.\n this._value = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the page size of the scroll bar.\n *\n * #### Notes\n * The page size is the amount of visible content in the scrolled\n * region, expressed in data units. It determines the size of the\n * scroll bar thumb.\n */\n get page() {\n return this._page;\n }\n /**\n * Set the page size of the scroll bar.\n *\n * #### Notes\n * The page size will be clamped to the range `[0, Infinity]`.\n */\n set page(value) {\n // Clamp the page size to the allowable range.\n value = Math.max(0, value);\n // Do nothing if the value does not change.\n if (this._page === value) {\n return;\n }\n // Update the internal page size.\n this._page = value;\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * Get the maximum value of the scroll bar.\n */\n get maximum() {\n return this._maximum;\n }\n /**\n * Set the maximum value of the scroll bar.\n *\n * #### Notes\n * The max size will be clamped to the range `[0, Infinity]`.\n */\n set maximum(value) {\n // Clamp the value to the allowable range.\n value = Math.max(0, value);\n // Do nothing if the value does not change.\n if (this._maximum === value) {\n return;\n }\n // Update the internal values.\n this._maximum = value;\n // Clamp the current value to the new range.\n this._value = Math.min(this._value, value);\n // Schedule an update the scroll bar.\n this.update();\n }\n /**\n * The scroll bar decrement button node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get decrementNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-button')[0];\n }\n /**\n * The scroll bar increment button node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get incrementNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-button')[1];\n }\n /**\n * The scroll bar track node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get trackNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-track')[0];\n }\n /**\n * The scroll bar thumb node.\n *\n * #### Notes\n * Modifying this node directly can lead to undefined behavior.\n */\n get thumbNode() {\n return this.node.getElementsByClassName('lm-ScrollBar-thumb')[0];\n }\n /**\n * Handle the DOM events for the scroll bar.\n *\n * @param event - The DOM event sent to the scroll bar.\n *\n * #### Notes\n * This method implements the DOM `EventListener` interface and is\n * called in response to events on the scroll bar's DOM node.\n *\n * This should not be called directly by user code.\n */\n handleEvent(event) {\n switch (event.type) {\n case 'mousedown':\n this._evtMouseDown(event);\n break;\n case 'mousemove':\n this._evtMouseMove(event);\n break;\n case 'mouseup':\n this._evtMouseUp(event);\n break;\n case 'keydown':\n this._evtKeyDown(event);\n break;\n case 'contextmenu':\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n /**\n * A method invoked on a 'before-attach' message.\n */\n onBeforeAttach(msg) {\n this.node.addEventListener('mousedown', this);\n this.update();\n }\n /**\n * A method invoked on an 'after-detach' message.\n */\n onAfterDetach(msg) {\n this.node.removeEventListener('mousedown', this);\n this._releaseMouse();\n }\n /**\n * A method invoked on an 'update-request' message.\n */\n onUpdateRequest(msg) {\n // Convert the value and page into percentages.\n let value = (this._value * 100) / this._maximum;\n let page = (this._page * 100) / (this._page + this._maximum);\n // Clamp the value and page to the relevant range.\n value = Math.max(0, Math.min(value, 100));\n page = Math.max(0, Math.min(page, 100));\n // Fetch the thumb style.\n let thumbStyle = this.thumbNode.style;\n // Update the thumb style for the current orientation.\n if (this._orientation === 'horizontal') {\n thumbStyle.top = '';\n thumbStyle.height = '';\n thumbStyle.left = `${value}%`;\n thumbStyle.width = `${page}%`;\n thumbStyle.transform = `translate(${-value}%, 0%)`;\n }\n else {\n thumbStyle.left = '';\n thumbStyle.width = '';\n thumbStyle.top = `${value}%`;\n thumbStyle.height = `${page}%`;\n thumbStyle.transform = `translate(0%, ${-value}%)`;\n }\n }\n /**\n * Handle the `'keydown'` event for the scroll bar.\n */\n _evtKeyDown(event) {\n // Stop all input events during drag.\n event.preventDefault();\n event.stopPropagation();\n // Ignore anything except the `Escape` key.\n if (event.keyCode !== 27) {\n return;\n }\n // Fetch the previous scroll value.\n let value = this._pressData ? this._pressData.value : -1;\n // Release the mouse.\n this._releaseMouse();\n // Restore the old scroll value if possible.\n if (value !== -1) {\n this._moveThumb(value);\n }\n }\n /**\n * Handle the `'mousedown'` event for the scroll bar.\n */\n _evtMouseDown(event) {\n // Do nothing if it's not a left mouse press.\n if (event.button !== 0) {\n return;\n }\n // Send an activate request to the scroll bar. This can be\n // used by message hooks to activate something relevant.\n this.activate();\n // Do nothing if the mouse is already captured.\n if (this._pressData) {\n return;\n }\n // Find the pressed scroll bar part.\n let part = Private$2.findPart(this, event.target);\n // Do nothing if the part is not of interest.\n if (!part) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Override the mouse cursor.\n let override = Drag.overrideCursor('default');\n // Set up the press data.\n this._pressData = {\n part,\n override,\n delta: -1,\n value: -1,\n mouseX: event.clientX,\n mouseY: event.clientY\n };\n // Add the extra event listeners.\n document.addEventListener('mousemove', this, true);\n document.addEventListener('mouseup', this, true);\n document.addEventListener('keydown', this, true);\n document.addEventListener('contextmenu', this, true);\n // Handle a thumb press.\n if (part === 'thumb') {\n // Fetch the thumb node.\n let thumbNode = this.thumbNode;\n // Fetch the client rect for the thumb.\n let thumbRect = thumbNode.getBoundingClientRect();\n // Update the press data delta for the current orientation.\n if (this._orientation === 'horizontal') {\n this._pressData.delta = event.clientX - thumbRect.left;\n }\n else {\n this._pressData.delta = event.clientY - thumbRect.top;\n }\n // Add the active class to the thumb node.\n thumbNode.classList.add('lm-mod-active');\n // Store the current value in the press data.\n this._pressData.value = this._value;\n // Finished.\n return;\n }\n // Handle a track press.\n if (part === 'track') {\n // Fetch the client rect for the thumb.\n let thumbRect = this.thumbNode.getBoundingClientRect();\n // Determine the direction for the page request.\n let dir;\n if (this._orientation === 'horizontal') {\n dir = event.clientX < thumbRect.left ? 'decrement' : 'increment';\n }\n else {\n dir = event.clientY < thumbRect.top ? 'decrement' : 'increment';\n }\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the page requested signal.\n this._pageRequested.emit(dir);\n // Finished.\n return;\n }\n // Handle a decrement button press.\n if (part === 'decrement') {\n // Add the active class to the decrement node.\n this.decrementNode.classList.add('lm-mod-active');\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the step requested signal.\n this._stepRequested.emit('decrement');\n // Finished.\n return;\n }\n // Handle an increment button press.\n if (part === 'increment') {\n // Add the active class to the increment node.\n this.incrementNode.classList.add('lm-mod-active');\n // Start the repeat timer.\n this._repeatTimer = window.setTimeout(this._onRepeat, 350);\n // Emit the step requested signal.\n this._stepRequested.emit('increment');\n // Finished.\n return;\n }\n }\n /**\n * Handle the `'mousemove'` event for the scroll bar.\n */\n _evtMouseMove(event) {\n // Do nothing if no drag is in progress.\n if (!this._pressData) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Update the mouse position.\n this._pressData.mouseX = event.clientX;\n this._pressData.mouseY = event.clientY;\n // Bail if the thumb is not being dragged.\n if (this._pressData.part !== 'thumb') {\n return;\n }\n // Get the client rect for the thumb and track.\n let thumbRect = this.thumbNode.getBoundingClientRect();\n let trackRect = this.trackNode.getBoundingClientRect();\n // Fetch the scroll geometry based on the orientation.\n let trackPos;\n let trackSpan;\n if (this._orientation === 'horizontal') {\n trackPos = event.clientX - trackRect.left - this._pressData.delta;\n trackSpan = trackRect.width - thumbRect.width;\n }\n else {\n trackPos = event.clientY - trackRect.top - this._pressData.delta;\n trackSpan = trackRect.height - thumbRect.height;\n }\n // Compute the desired value from the scroll geometry.\n let value = trackSpan === 0 ? 0 : (trackPos * this._maximum) / trackSpan;\n // Move the thumb to the computed value.\n this._moveThumb(value);\n }\n /**\n * Handle the `'mouseup'` event for the scroll bar.\n */\n _evtMouseUp(event) {\n // Do nothing if it's not a left mouse release.\n if (event.button !== 0) {\n return;\n }\n // Stop the event propagation.\n event.preventDefault();\n event.stopPropagation();\n // Release the mouse.\n this._releaseMouse();\n }\n /**\n * Release the mouse and restore the node states.\n */\n _releaseMouse() {\n // Bail if there is no press data.\n if (!this._pressData) {\n return;\n }\n // Clear the repeat timer.\n clearTimeout(this._repeatTimer);\n this._repeatTimer = -1;\n // Clear the press data.\n this._pressData.override.dispose();\n this._pressData = null;\n // Remove the extra event listeners.\n document.removeEventListener('mousemove', this, true);\n document.removeEventListener('mouseup', this, true);\n document.removeEventListener('keydown', this, true);\n document.removeEventListener('contextmenu', this, true);\n // Remove the active classes from the nodes.\n this.thumbNode.classList.remove('lm-mod-active');\n this.decrementNode.classList.remove('lm-mod-active');\n this.incrementNode.classList.remove('lm-mod-active');\n }\n /**\n * Move the thumb to the specified position.\n */\n _moveThumb(value) {\n // Clamp the value to the allowed range.\n value = Math.max(0, Math.min(value, this._maximum));\n // Bail if the value does not change.\n if (this._value === value) {\n return;\n }\n // Update the internal value.\n this._value = value;\n // Schedule an update of the scroll bar.\n this.update();\n // Emit the thumb moved signal.\n this._thumbMoved.emit(value);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$2;\n(function (Private) {\n /**\n * Create the DOM node for a scroll bar.\n */\n function createNode() {\n let node = document.createElement('div');\n let decrement = document.createElement('div');\n let increment = document.createElement('div');\n let track = document.createElement('div');\n let thumb = document.createElement('div');\n decrement.className = 'lm-ScrollBar-button';\n increment.className = 'lm-ScrollBar-button';\n decrement.dataset['action'] = 'decrement';\n increment.dataset['action'] = 'increment';\n track.className = 'lm-ScrollBar-track';\n thumb.className = 'lm-ScrollBar-thumb';\n track.appendChild(thumb);\n node.appendChild(decrement);\n node.appendChild(track);\n node.appendChild(increment);\n return node;\n }\n Private.createNode = createNode;\n /**\n * Find the scroll bar part which contains the given target.\n */\n function findPart(scrollBar, target) {\n // Test the thumb.\n if (scrollBar.thumbNode.contains(target)) {\n return 'thumb';\n }\n // Test the track.\n if (scrollBar.trackNode.contains(target)) {\n return 'track';\n }\n // Test the decrement button.\n if (scrollBar.decrementNode.contains(target)) {\n return 'decrement';\n }\n // Test the increment button.\n if (scrollBar.incrementNode.contains(target)) {\n return 'increment';\n }\n // Indicate no match.\n return null;\n }\n Private.findPart = findPart;\n})(Private$2 || (Private$2 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A concrete layout implementation which holds a single widget.\n *\n * #### Notes\n * This class is useful for creating simple container widgets which\n * hold a single child. The child should be positioned with CSS.\n */\nclass SingletonLayout extends Layout {\n constructor() {\n super(...arguments);\n this._widget = null;\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n if (this._widget) {\n let widget = this._widget;\n this._widget = null;\n widget.dispose();\n }\n super.dispose();\n }\n /**\n * Get the child widget for the layout.\n */\n get widget() {\n return this._widget;\n }\n /**\n * Set the child widget for the layout.\n *\n * #### Notes\n * Setting the child widget will cause the old child widget to be\n * automatically disposed. If that is not desired, set the parent\n * of the old child to `null` before assigning a new child.\n */\n set widget(widget) {\n // Remove the widget from its current parent. This is a no-op\n // if the widget's parent is already the layout parent widget.\n if (widget) {\n widget.parent = this.parent;\n }\n // Bail early if the widget does not change.\n if (this._widget === widget) {\n return;\n }\n // Dispose of the old child widget.\n if (this._widget) {\n this._widget.dispose();\n }\n // Update the internal widget.\n this._widget = widget;\n // Attach the new child widget if needed.\n if (this.parent && widget) {\n this.attachWidget(widget);\n }\n }\n /**\n * Create an iterator over the widgets in the layout.\n *\n * @returns A new iterator over the widgets in the layout.\n */\n *[Symbol.iterator]() {\n if (this._widget) {\n yield this._widget;\n }\n }\n /**\n * Remove a widget from the layout.\n *\n * @param widget - The widget to remove from the layout.\n *\n * #### Notes\n * A widget is automatically removed from the layout when its `parent`\n * is set to `null`. This method should only be invoked directly when\n * removing a widget from a layout which has yet to be installed on a\n * parent widget.\n *\n * This method does *not* modify the widget's `parent`.\n */\n removeWidget(widget) {\n // Bail early if the widget does not exist in the layout.\n if (this._widget !== widget) {\n return;\n }\n // Clear the internal widget.\n this._widget = null;\n // If the layout is parented, detach the widget from the DOM.\n if (this.parent) {\n this.detachWidget(widget);\n }\n }\n /**\n * Perform layout initialization which requires the parent widget.\n */\n init() {\n super.init();\n for (const widget of this) {\n this.attachWidget(widget);\n }\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This method is called automatically by the single layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation adds the widgets's node to the parent's\n * node at the proper location, and sends the appropriate attach\n * messages to the widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is added to the parent's node.\n */\n attachWidget(widget) {\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This method is called automatically by the single layout at the\n * appropriate time. It should not be called directly by user code.\n *\n * The default implementation removes the widget's node from the\n * parent's node, and sends the appropriate detach messages to the\n * widget if the parent is attached to the DOM.\n *\n * Subclasses may reimplement this method to control how the widget's\n * node is removed from the parent's node.\n */\n detachWidget(widget) {\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A layout where visible widgets are stacked atop one another.\n *\n * #### Notes\n * The Z-order of the visible widgets follows their layout order.\n */\nclass StackedLayout extends PanelLayout {\n constructor(options = {}) {\n super(options);\n this._dirty = false;\n this._items = [];\n this._box = null;\n this._hiddenMode =\n options.hiddenMode !== undefined\n ? options.hiddenMode\n : Widget.HiddenMode.Display;\n }\n /**\n * The method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this._hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n set hiddenMode(v) {\n if (this._hiddenMode === v) {\n return;\n }\n this._hiddenMode = v;\n if (this.widgets.length > 1) {\n this.widgets.forEach(w => {\n w.hiddenMode = this._hiddenMode;\n });\n }\n }\n /**\n * Dispose of the resources held by the layout.\n */\n dispose() {\n // Dispose of the layout items.\n for (const item of this._items) {\n item.dispose();\n }\n // Clear the layout state.\n this._box = null;\n this._items.length = 0;\n // Dispose of the rest of the layout.\n super.dispose();\n }\n /**\n * Attach a widget to the parent's DOM node.\n *\n * @param index - The current index of the widget in the layout.\n *\n * @param widget - The widget to attach to the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n attachWidget(index, widget) {\n // Using transform create an additional layer in the pixel pipeline\n // to limit the number of layer, it is set only if there is more than one widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale &&\n this._items.length > 0) {\n if (this._items.length === 1) {\n this.widgets[0].hiddenMode = Widget.HiddenMode.Scale;\n }\n widget.hiddenMode = Widget.HiddenMode.Scale;\n }\n else {\n widget.hiddenMode = Widget.HiddenMode.Display;\n }\n // Create and add a new layout item for the widget.\n ArrayExt.insert(this._items, index, new LayoutItem(widget));\n // Send a `'before-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeAttach);\n }\n // Add the widget's node to the parent.\n this.parent.node.appendChild(widget.node);\n // Send an `'after-attach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterAttach);\n }\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * Move a widget in the parent's DOM node.\n *\n * @param fromIndex - The previous index of the widget in the layout.\n *\n * @param toIndex - The current index of the widget in the layout.\n *\n * @param widget - The widget to move in the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n moveWidget(fromIndex, toIndex, widget) {\n // Move the layout item for the widget.\n ArrayExt.move(this._items, fromIndex, toIndex);\n // Post an update request for the parent widget.\n this.parent.update();\n }\n /**\n * Detach a widget from the parent's DOM node.\n *\n * @param index - The previous index of the widget in the layout.\n *\n * @param widget - The widget to detach from the parent.\n *\n * #### Notes\n * This is a reimplementation of the superclass method.\n */\n detachWidget(index, widget) {\n // Remove the layout item for the widget.\n let item = ArrayExt.removeAt(this._items, index);\n // Send a `'before-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.BeforeDetach);\n }\n // Remove the widget's node from the parent.\n this.parent.node.removeChild(widget.node);\n // Send an `'after-detach'` message if the parent is attached.\n if (this.parent.isAttached) {\n MessageLoop.sendMessage(widget, Widget.Msg.AfterDetach);\n }\n // Reset the z-index for the widget.\n item.widget.node.style.zIndex = '';\n // Reset the hidden mode for the widget.\n if (this._hiddenMode === Widget.HiddenMode.Scale) {\n widget.hiddenMode = Widget.HiddenMode.Display;\n // Reset the hidden mode for the first widget if necessary.\n if (this._items.length === 1) {\n this._items[0].widget.hiddenMode = Widget.HiddenMode.Display;\n }\n }\n // Dispose of the layout item.\n item.dispose();\n // Post a fit request for the parent widget.\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'before-show'` message.\n */\n onBeforeShow(msg) {\n super.onBeforeShow(msg);\n this.parent.update();\n }\n /**\n * A message handler invoked on a `'before-attach'` message.\n */\n onBeforeAttach(msg) {\n super.onBeforeAttach(msg);\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-shown'` message.\n */\n onChildShown(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'child-hidden'` message.\n */\n onChildHidden(msg) {\n this.parent.fit();\n }\n /**\n * A message handler invoked on a `'resize'` message.\n */\n onResize(msg) {\n if (this.parent.isVisible) {\n this._update(msg.width, msg.height);\n }\n }\n /**\n * A message handler invoked on an `'update-request'` message.\n */\n onUpdateRequest(msg) {\n if (this.parent.isVisible) {\n this._update(-1, -1);\n }\n }\n /**\n * A message handler invoked on a `'fit-request'` message.\n */\n onFitRequest(msg) {\n if (this.parent.isAttached) {\n this._fit();\n }\n }\n /**\n * Fit the layout to the total size required by the widgets.\n */\n _fit() {\n // Set up the computed minimum size.\n let minW = 0;\n let minH = 0;\n // Update the computed minimum size.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Update the size limits for the item.\n item.fit();\n // Update the computed minimum size.\n minW = Math.max(minW, item.minWidth);\n minH = Math.max(minH, item.minHeight);\n }\n // Update the box sizing and add it to the computed min size.\n let box = (this._box = ElementExt.boxSizing(this.parent.node));\n minW += box.horizontalSum;\n minH += box.verticalSum;\n // Update the parent's min size constraints.\n let style = this.parent.node.style;\n style.minWidth = `${minW}px`;\n style.minHeight = `${minH}px`;\n // Set the dirty flag to ensure only a single update occurs.\n this._dirty = true;\n // Notify the ancestor that it should fit immediately. This may\n // cause a resize of the parent, fulfilling the required update.\n if (this.parent.parent) {\n MessageLoop.sendMessage(this.parent.parent, Widget.Msg.FitRequest);\n }\n // If the dirty flag is still set, the parent was not resized.\n // Trigger the required update on the parent widget immediately.\n if (this._dirty) {\n MessageLoop.sendMessage(this.parent, Widget.Msg.UpdateRequest);\n }\n }\n /**\n * Update the layout position and size of the widgets.\n *\n * The parent offset dimensions should be `-1` if unknown.\n */\n _update(offsetWidth, offsetHeight) {\n // Clear the dirty flag to indicate the update occurred.\n this._dirty = false;\n // Compute the visible item count.\n let nVisible = 0;\n for (let i = 0, n = this._items.length; i < n; ++i) {\n nVisible += +!this._items[i].isHidden;\n }\n // Bail early if there are no visible items to layout.\n if (nVisible === 0) {\n return;\n }\n // Measure the parent if the offset dimensions are unknown.\n if (offsetWidth < 0) {\n offsetWidth = this.parent.node.offsetWidth;\n }\n if (offsetHeight < 0) {\n offsetHeight = this.parent.node.offsetHeight;\n }\n // Ensure the parent box sizing data is computed.\n if (!this._box) {\n this._box = ElementExt.boxSizing(this.parent.node);\n }\n // Compute the actual layout bounds adjusted for border and padding.\n let top = this._box.paddingTop;\n let left = this._box.paddingLeft;\n let width = offsetWidth - this._box.horizontalSum;\n let height = offsetHeight - this._box.verticalSum;\n // Update the widget stacking order and layout geometry.\n for (let i = 0, n = this._items.length; i < n; ++i) {\n // Fetch the item.\n let item = this._items[i];\n // Ignore hidden items.\n if (item.isHidden) {\n continue;\n }\n // Set the z-index for the widget.\n item.widget.node.style.zIndex = `${i}`;\n // Update the item geometry.\n item.update(left, top, width, height);\n }\n }\n}\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A panel where visible widgets are stacked atop one another.\n *\n * #### Notes\n * This class provides a convenience wrapper around a {@link StackedLayout}.\n */\nclass StackedPanel extends Panel {\n /**\n * Construct a new stacked panel.\n *\n * @param options - The options for initializing the panel.\n */\n constructor(options = {}) {\n super({ layout: Private$1.createLayout(options) });\n this._widgetRemoved = new Signal(this);\n this.addClass('lm-StackedPanel');\n }\n /**\n * The method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n get hiddenMode() {\n return this.layout.hiddenMode;\n }\n /**\n * Set the method for hiding widgets.\n *\n * #### Notes\n * If there is only one child widget, `Display` hiding mode will be used\n * regardless of this setting.\n */\n set hiddenMode(v) {\n this.layout.hiddenMode = v;\n }\n /**\n * A signal emitted when a widget is removed from a stacked panel.\n */\n get widgetRemoved() {\n return this._widgetRemoved;\n }\n /**\n * A message handler invoked on a `'child-added'` message.\n */\n onChildAdded(msg) {\n msg.child.addClass('lm-StackedPanel-child');\n }\n /**\n * A message handler invoked on a `'child-removed'` message.\n */\n onChildRemoved(msg) {\n msg.child.removeClass('lm-StackedPanel-child');\n this._widgetRemoved.emit(msg.child);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private$1;\n(function (Private) {\n /**\n * Create a stacked layout for the given panel options.\n */\n function createLayout(options) {\n return options.layout || new StackedLayout();\n }\n Private.createLayout = createLayout;\n})(Private$1 || (Private$1 = {}));\n\n// Copyright (c) Jupyter Development Team.\n// Distributed under the terms of the Modified BSD License.\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n/**\n * A widget which combines a `TabBar` and a `StackedPanel`.\n *\n * #### Notes\n * This is a simple panel which handles the common case of a tab bar\n * placed next to a content area. The selected tab controls the widget\n * which is shown in the content area.\n *\n * For use cases which require more control than is provided by this\n * panel, the `TabBar` widget may be used independently.\n */\nclass TabPanel extends Widget {\n /**\n * Construct a new tab panel.\n *\n * @param options - The options for initializing the tab panel.\n */\n constructor(options = {}) {\n super();\n this._currentChanged = new Signal(this);\n this._addRequested = new Signal(this);\n this.addClass('lm-TabPanel');\n // Create the tab bar and stacked panel.\n this.tabBar = new TabBar(options);\n this.tabBar.addClass('lm-TabPanel-tabBar');\n this.stackedPanel = new StackedPanel();\n this.stackedPanel.addClass('lm-TabPanel-stackedPanel');\n // Connect the tab bar signal handlers.\n this.tabBar.tabMoved.connect(this._onTabMoved, this);\n this.tabBar.currentChanged.connect(this._onCurrentChanged, this);\n this.tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this);\n this.tabBar.tabActivateRequested.connect(this._onTabActivateRequested, this);\n this.tabBar.addRequested.connect(this._onTabAddRequested, this);\n // Connect the stacked panel signal handlers.\n this.stackedPanel.widgetRemoved.connect(this._onWidgetRemoved, this);\n // Get the data related to the placement.\n this._tabPlacement = options.tabPlacement || 'top';\n let direction = Private.directionFromPlacement(this._tabPlacement);\n let orientation = Private.orientationFromPlacement(this._tabPlacement);\n // Configure the tab bar for the placement.\n this.tabBar.orientation = orientation;\n this.tabBar.dataset['placement'] = this._tabPlacement;\n // Create the box layout.\n let layout = new BoxLayout({ direction, spacing: 0 });\n // Set the stretch factors for the child widgets.\n BoxLayout.setStretch(this.tabBar, 0);\n BoxLayout.setStretch(this.stackedPanel, 1);\n // Add the child widgets to the layout.\n layout.addWidget(this.tabBar);\n layout.addWidget(this.stackedPanel);\n // Install the layout on the tab panel.\n this.layout = layout;\n }\n /**\n * A signal emitted when the current tab is changed.\n *\n * #### Notes\n * This signal is emitted when the currently selected tab is changed\n * either through user or programmatic interaction.\n *\n * Notably, this signal is not emitted when the index of the current\n * tab changes due to tabs being inserted, removed, or moved. It is\n * only emitted when the actual current tab node is changed.\n */\n get currentChanged() {\n return this._currentChanged;\n }\n /**\n * Get the index of the currently selected tab.\n *\n * #### Notes\n * This will be `-1` if no tab is selected.\n */\n get currentIndex() {\n return this.tabBar.currentIndex;\n }\n /**\n * Set the index of the currently selected tab.\n *\n * #### Notes\n * If the index is out of range, it will be set to `-1`.\n */\n set currentIndex(value) {\n this.tabBar.currentIndex = value;\n }\n /**\n * Get the currently selected widget.\n *\n * #### Notes\n * This will be `null` if there is no selected tab.\n */\n get currentWidget() {\n let title = this.tabBar.currentTitle;\n return title ? title.owner : null;\n }\n /**\n * Set the currently selected widget.\n *\n * #### Notes\n * If the widget is not in the panel, it will be set to `null`.\n */\n set currentWidget(value) {\n this.tabBar.currentTitle = value ? value.title : null;\n }\n /**\n * Get the whether the tabs are movable by the user.\n *\n * #### Notes\n * Tabs can always be moved programmatically.\n */\n get tabsMovable() {\n return this.tabBar.tabsMovable;\n }\n /**\n * Set the whether the tabs are movable by the user.\n *\n * #### Notes\n * Tabs can always be moved programmatically.\n */\n set tabsMovable(value) {\n this.tabBar.tabsMovable = value;\n }\n /**\n * Get the whether the add button is enabled.\n *\n */\n get addButtonEnabled() {\n return this.tabBar.addButtonEnabled;\n }\n /**\n * Set the whether the add button is enabled.\n *\n */\n set addButtonEnabled(value) {\n this.tabBar.addButtonEnabled = value;\n }\n /**\n * Get the tab placement for the tab panel.\n *\n * #### Notes\n * This controls the position of the tab bar relative to the content.\n */\n get tabPlacement() {\n return this._tabPlacement;\n }\n /**\n * Set the tab placement for the tab panel.\n *\n * #### Notes\n * This controls the position of the tab bar relative to the content.\n */\n set tabPlacement(value) {\n // Bail if the placement does not change.\n if (this._tabPlacement === value) {\n return;\n }\n // Update the internal value.\n this._tabPlacement = value;\n // Get the values related to the placement.\n let direction = Private.directionFromPlacement(value);\n let orientation = Private.orientationFromPlacement(value);\n // Configure the tab bar for the placement.\n this.tabBar.orientation = orientation;\n this.tabBar.dataset['placement'] = value;\n // Update the layout direction.\n this.layout.direction = direction;\n }\n /**\n * A signal emitted when the add button on a tab bar is clicked.\n *\n */\n get addRequested() {\n return this._addRequested;\n }\n /**\n * A read-only array of the widgets in the panel.\n */\n get widgets() {\n return this.stackedPanel.widgets;\n }\n /**\n * Add a widget to the end of the tab panel.\n *\n * @param widget - The widget to add to the tab panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n *\n * The widget's `title` is used to populate the tab.\n */\n addWidget(widget) {\n this.insertWidget(this.widgets.length, widget);\n }\n /**\n * Insert a widget into the tab panel at a specified index.\n *\n * @param index - The index at which to insert the widget.\n *\n * @param widget - The widget to insert into to the tab panel.\n *\n * #### Notes\n * If the widget is already contained in the panel, it will be moved.\n *\n * The widget's `title` is used to populate the tab.\n */\n insertWidget(index, widget) {\n if (widget !== this.currentWidget) {\n widget.hide();\n }\n this.stackedPanel.insertWidget(index, widget);\n this.tabBar.insertTab(index, widget.title);\n widget.node.setAttribute('role', 'tabpanel');\n let renderer = this.tabBar.renderer;\n if (renderer instanceof TabBar.Renderer) {\n let tabId = renderer.createTabKey({\n title: widget.title,\n current: false,\n zIndex: 0\n });\n widget.node.setAttribute('aria-labelledby', tabId);\n }\n }\n /**\n * Handle the `currentChanged` signal from the tab bar.\n */\n _onCurrentChanged(sender, args) {\n // Extract the previous and current title from the args.\n let { previousIndex, previousTitle, currentIndex, currentTitle } = args;\n // Extract the widgets from the titles.\n let previousWidget = previousTitle ? previousTitle.owner : null;\n let currentWidget = currentTitle ? currentTitle.owner : null;\n // Hide the previous widget.\n if (previousWidget) {\n previousWidget.hide();\n }\n // Show the current widget.\n if (currentWidget) {\n currentWidget.show();\n }\n // Emit the `currentChanged` signal for the tab panel.\n this._currentChanged.emit({\n previousIndex,\n previousWidget,\n currentIndex,\n currentWidget\n });\n // Flush the message loop on IE and Edge to prevent flicker.\n if (Platform.IS_EDGE || Platform.IS_IE) {\n MessageLoop.flush();\n }\n }\n /**\n * Handle the `tabAddRequested` signal from the tab bar.\n */\n _onTabAddRequested(sender, args) {\n this._addRequested.emit(sender);\n }\n /**\n * Handle the `tabActivateRequested` signal from the tab bar.\n */\n _onTabActivateRequested(sender, args) {\n args.title.owner.activate();\n }\n /**\n * Handle the `tabCloseRequested` signal from the tab bar.\n */\n _onTabCloseRequested(sender, args) {\n args.title.owner.close();\n }\n /**\n * Handle the `tabMoved` signal from the tab bar.\n */\n _onTabMoved(sender, args) {\n this.stackedPanel.insertWidget(args.toIndex, args.title.owner);\n }\n /**\n * Handle the `widgetRemoved` signal from the stacked panel.\n */\n _onWidgetRemoved(sender, widget) {\n widget.node.removeAttribute('role');\n widget.node.removeAttribute('aria-labelledby');\n this.tabBar.removeTab(widget.title);\n }\n}\n/**\n * The namespace for the module implementation details.\n */\nvar Private;\n(function (Private) {\n /**\n * Convert a tab placement to tab bar orientation.\n */\n function orientationFromPlacement(plc) {\n return placementToOrientationMap[plc];\n }\n Private.orientationFromPlacement = orientationFromPlacement;\n /**\n * Convert a tab placement to a box layout direction.\n */\n function directionFromPlacement(plc) {\n return placementToDirectionMap[plc];\n }\n Private.directionFromPlacement = directionFromPlacement;\n /**\n * A mapping of tab placement to tab bar orientation.\n */\n const placementToOrientationMap = {\n top: 'horizontal',\n left: 'vertical',\n right: 'vertical',\n bottom: 'horizontal'\n };\n /**\n * A mapping of tab placement to box layout direction.\n */\n const placementToDirectionMap = {\n top: 'top-to-bottom',\n left: 'left-to-right',\n right: 'right-to-left',\n bottom: 'bottom-to-top'\n };\n})(Private || (Private = {}));\n\nexport { AccordionLayout, AccordionPanel, BoxEngine, BoxLayout, BoxPanel, BoxSizer, CommandPalette, ContextMenu, DockLayout, DockPanel, FocusTracker, GridLayout, Layout, LayoutItem, Menu, MenuBar, Panel, PanelLayout, ScrollBar, SingletonLayout, SplitLayout, SplitPanel, StackedLayout, StackedPanel, TabBar, TabPanel, Title, Widget };\n//# sourceMappingURL=index.es6.js.map\n","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = require('vm').runInThisContext(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","var constants = require('../constants');\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\nimport { Message } from '@lumino/messaging';\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\nimport {NowVisPanel} from './nowpanel';\ninterface IAnnotation {\n id: string;\n annotationFormat: string;\n annotation: string;\n description: string;\n annotationLevel: string;\n provenanceType: string;\n relatedTrial: string;\n relatedExperiment: string;\n }\nexport\nclass AnnontationWidget extends Widget {\n\n d3node: d3_Selection;\n tBody: d3_Selection;\n table: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n anntTitle: d3_Selection;\n expId: string;\n trialId: string;\n fetchUrl: string;\n annotationLevel: string;\n annotations: Array;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor( expId: string) {\n super({ node: AnnontationWidget.createNode() });\n this.d3node = d3_select(this.node);\n this.expId=expId;\n\n this.addClass('content');\n this.title.label = \"Annotation\";\n this.title.closable = false\n this.title.caption = `Annontation`;\n this.setNode();\n this.setAnnotationLevelToExperiment();\n\n }\n\n protected onBeforeHide(msg: Message): void {\n this.setAnnotationLevelToExperiment()\n \n }\n setAnnotationLevelToExperiment(){\n this.trialId=\"\";\n this.fetchUrl=\"/experiments/\"+this.expId+\"/extendedAnnotation\";\n this.annotationLevel=\"Experiment\";\n this.anntTitle.text(\"Annotations for Experiment: \" + this.expId)\n this.setAnnotations();\n\n }\n setAnnotationLevelToTrial(trialId:string){\n this.trialId=trialId;\n this.anntTitle.text(\"Annotations for Trial: \" + this.trialId)\n this.fetchUrl=\"/trials/\"+this.trialId+\"/extendedAnnotation\";\n this.annotationLevel=\"Trial\";\n this.setAnnotations();\n }\n activeAnnotation(trialId:string){\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n parentDock.activateWidget(this);\n this.setAnnotationLevelToTrial(trialId);\n }\n async fillAnnotations(){\n this.annotations=new Array();\n var _thiss=this;\n var response= await fetch(this.fetchUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.annotations= new Array();\n var obj=await response.json();\n\n obj.forEach( function(item: any){\n var annt={\n id: item.id,\n provenanceType: item.provenanceType,\n annotationFormat: item.annotationFormat,\n description: item.description,\n annotationLevel: item.annotationLevel,\n relatedTrial: item.relatedTrial,\n relatedExperiment: item.relatedExperiment,\n }\n\n _thiss.annotations.push(annt);\n }); \n }else{\n if(response.status!=404){\n this.showNode(_thiss.errorFeedback);\n }\n \n }\n\n \n }\n addAnntRow(annt : IAnnotation, tBody:d3_Selection){\n\n let item=tBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(annt.id);\n item.append(\"td\").text(annt.description);\n item.append(\"td\").text(annt.annotationFormat);\n\n item.append(\"td\").text(annt.provenanceType);\n\n var actions =item.append(\"td\")\n var addMemberButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Download Content\");\n addMemberButton.on(\"click\",function(){\n window.open(\"/extendedAnnotation/\"+annt.id+\"/annotation\");\n \n });\n \n }\n async setAnnotations(){\n let _thiss=this;\n \n this.table.html(\"\");\n let header=this.table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"description\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"annotation Format\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"provenance Type\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Actions\");\n var tBody=this.table.append(\"tbody\");\n\n await this.fillAnnotations();\n \n this.annotations.forEach(function (obj: any) {\n _thiss.addAnntRow(obj,tBody);\n });\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n getValueFromSelect(node: d3_Selection,defaultVale:String) :String{\n var option =defaultVale;\n\n var select = node.node() as HTMLSelectElement;\n if(select!=null){\n option = select.options[select.selectedIndex].value;\n }\n return option;;\n }\n createAddGroupForm(projectsDiv:d3_Selection){\n var _thiss=this;\n let inputsDiv=projectsDiv.append(\"div\");\n let descIn=this.addFormInput(inputsDiv,\"descriptionAnntInput\",\"Description\",\"textarea\");\n let annotationIn=this.addFormInput(inputsDiv,\"annotationNameInput\",\"Annotation\",\"textarea\");\n let annotationFormatIn=this.addFormInput(inputsDiv,\"annotationFormatInput\",\"Annotation Format\",\"select\");\n let provenanceTypeIn=this.addFormInput(inputsDiv,\"provenanceTypeInput\",\"Provenance Type\",\"select\");\n\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Data\").text(\"Data\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Interaction\").text(\"Interaction\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Insight\").text(\"Insight\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Other\").text(\"Other\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Rationale\").text(\"Rationale\");\n provenanceTypeIn.append(\"option\").attr(\"value\",\"Visualization\").text(\"Visualization\");\n\n annotationFormatIn.append(\"option\").attr(\"value\",\"plainText\").text(\"plain text\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"base64\").text(\"base64\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"JSON\").text(\"JSON\");\n annotationFormatIn.append(\"option\").attr(\"value\",\"XML\").text(\"XML\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addAnntButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Annotation\");\n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n var annotationFormat=_thiss.getValueFromSelect(annotationFormatIn,\"plainText\");\n var provenanceType=_thiss.getValueFromSelect(provenanceTypeIn,\"Other\");\n\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n\n let newAnnotation={\n annotation: annotationIn.property(\"value\"),\n description: descIn.property(\"value\"),\n annotationFormat: annotationFormat,\n annotationLevel: _thiss.annotationLevel,\n provenanceType: provenanceType\n };\n\n fetch(_thiss.fetchUrl, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newAnnotation) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n\n _thiss.showNode(_thiss.successFeedback);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addAnntButton);\n _thiss.setAnnotations();\n\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n \n }\n }); \n\n \n });\n\n addAnntButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addAnntButton);\n });\n\n }\n\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n this.anntTitle= projectsDiv.append(\"h2\");\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"\") ; \n this.hideNode(this.errorFeedback);\n this.hideNode(this.successFeedback);\n\n\n this.createAddGroupForm(projectsDiv);\n\n \n this.table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n\n \n }\n\n}","import {Widget} from '@lumino/widgets';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {BaseActivationGraphWidget} from './graph/base_activation_graph';\n\n\nexport\nclass ConfigWidget extends Widget {\n\n d3node: d3_Selection;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('config-content', true)\n\n let historydiv = content.append(\"div\")\n\n historydiv.append(\"h2\")\n .text(\"History Graph\")\n\n let showGraph = historydiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n showGraph.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"show_graph\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"show-graph\", true)\n .attr(\"id\", \"config-show-graph\")\n\n showGraph.append(\"label\")\n .attr(\"for\", \"config-show-graph\")\n .attr(\"title\", \"Open trial graph\")\n .text(\"Show trial graph on selection\")\n\n let showInfo = historydiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n showInfo.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"show_info\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"show-info\", true)\n .attr(\"id\", \"config-show-info\")\n\n showInfo.append(\"label\")\n .attr(\"for\", \"config-show-info\")\n .attr(\"title\", \"Open trial info\")\n .text(\"Show trial information on selection\")\n\n\n let trialdiv = content.append(\"div\")\n trialdiv.append(\"h2\")\n .text(\"Trial Graph\")\n\n BaseActivationGraphWidget.graphTypeForm(\"config\", trialdiv);\n BaseActivationGraphWidget.useCacheForm(\"config\", trialdiv);\n\n return node;\n }\n\n constructor() {\n super({ node: ConfigWidget.createNode() });\n this.d3node = d3_select(this.node);\n //this.setFlag(Widget.Flag.DisallowLayout);\n this.addClass('content');\n this.title.label = \"Config\";\n this.title.closable = false\n this.title.caption = `Configuration`;\n }\n\n\n showTrial(): boolean {\n return this.d3node.select(\".show-graph\").property(\"checked\");\n }\n\n showInfo(): boolean {\n return this.d3node.select(\".show-info\").property(\"checked\");\n }\n\n graphType(): string {\n return this.d3node.select(\".graph-type\").property(\"value\");\n }\n\n useCache(): boolean {\n return this.d3node.select(\".use-cache\").property(\"checked\");\n }\n\n}","import { Widget } from '@lumino/widgets';\nimport { Message } from '@lumino/messaging';\nimport { select as d3_select, Selection as d3_Selection, BaseType as d3_BaseType } from 'd3-selection';\nimport { forceSimulation, forceLink, forceManyBody, forceCenter, forceCollide, SimulationNodeDatum, SimulationLinkDatum } from 'd3-force';\nimport { scaleOrdinal } from 'd3-scale';\nimport { schemeTableau10 } from 'd3-scale-chromatic';\nimport { drag } from 'd3-drag';\nimport { NowVisPanel } from './nowpanel';\nimport { QueryWidget, QueryResultWidget } from './query_widget';\n\ninterface TableNode extends SimulationNodeDatum {\n id: string;\n name: string;\n selected?: boolean;\n}\n\ninterface TableLink extends SimulationLinkDatum {\n source: string | TableNode;\n target: string | TableNode;\n sourceColumn: string;\n targetColumn: string;\n}\n\ninterface DatabaseGraphData {\n nodes: TableNode[];\n links: TableLink[];\n}\n\nexport class DatabaseTabWidget extends Widget {}\n\nexport class TableInfoWidget extends DatabaseTabWidget {\n d3node: d3_Selection;\n constructor(tableName: string, details: any) {\n super({ node: TableInfoWidget.createNode(tableName, details) });\n this.title.label = tableName;\n this.title.caption = `Table: ${tableName}`;\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n }\n static createNode(tableName: string, details: any): HTMLElement {\n const node = document.createElement('div');\n \n node.style.display = 'flex';\n node.style.flexDirection = 'column';\n node.style.height = '100%';\n node.style.overflow = 'hidden';\n \n const header = d3_select(node).append('div')\n .style('flex-shrink', '0')\n .style('padding', '1rem')\n .style('border-bottom', '1px solid #eee')\n .style('background', '#f8f9fa');\n \n header.append('h4')\n .text(tableName)\n .style('margin', '0')\n .style('color', '#333');\n \n const contentContainer = d3_select(node).append('div')\n .style('flex', '1')\n .style('overflow-y', 'auto')\n .style('overflow-x', 'hidden')\n .style('padding', '1rem');\n \n if (details.error) {\n contentContainer.append('div')\n .style('color', 'red')\n .text('Failed to load table details.');\n } else {\n contentContainer.append('h5')\n .text('Columns')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const columnsTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const columnsThead = columnsTable.append('thead').append('tr');\n for( const h of ['Name', 'Type', 'NOT NULL', 'Default', 'PK']){\n columnsThead.append('th').text(h).style('font-size', '0.875rem')\n };\n \n const columnsTbody = columnsTable.append('tbody');\n details.columns.forEach((col: any) => {\n const row = columnsTbody.append('tr');\n row.append('td').text(col.name).style('font-size', '0.875rem');\n row.append('td').text(col.type).style('font-size', '0.875rem');\n row.append('td').text(col.notnull ? 'Yes' : '').style('font-size', '0.875rem');\n row.append('td').text(col.default === null ? '' : col.default).style('font-size', '0.875rem');\n row.append('td').text(col.pk ? 'Yes' : '').style('font-size', '0.875rem');\n });\n\n if (details.foreign_keys && details.foreign_keys.length > 0) {\n contentContainer.append('h5')\n .text('Foreign Keys')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const fkTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const fkThead = fkTable.append('thead').append('tr');\n for( const h of ['Column', 'References Table', 'References Column']){\n fkThead.append('th').text(h).style('font-size', '0.875rem');\n };\n \n const fkTbody = fkTable.append('tbody');\n for( const fk of details.foreign_keys){\n const row = fkTbody.append('tr');\n row.append('td').text(fk.from).style('font-size', '0.875rem');\n row.append('td').text(fk.table).style('font-size', '0.875rem');\n row.append('td').text(fk.to).style('font-size', '0.875rem');\n };\n }\n\n if (details.referenced_by && details.referenced_by.length > 0) {\n contentContainer.append('h5')\n .text('Referenced By')\n .style('margin-top', '0')\n .style('margin-bottom', '1rem')\n .style('color', '#495057');\n \n const columnReferences: { [key: string]: any[] } = {};\n details.referenced_by.forEach((ref: any) => {\n if (!columnReferences[ref.referenced_column]) {\n columnReferences[ref.referenced_column] = [];\n }\n columnReferences[ref.referenced_column].push(ref);\n });\n\n const refTable = contentContainer.append('table')\n .attr('class', 'table table-sm table-bordered')\n .style('width', '100%')\n .style('margin-bottom', '2rem');\n \n const refThead = refTable.append('thead').append('tr');\n for( const h of ['Table', 'Column', 'References Column']){\n refThead.append('th').text(h).style('font-size', '0.875rem');\n };\n \n const refTbody = refTable.append('tbody');\n for( const ref of details.referenced_by){\n const row = refTbody.append('tr');\n row.append('td').text(ref.referencing_table).style('font-size', '0.875rem');\n row.append('td').text(ref.referencing_column).style('font-size', '0.875rem');\n row.append('td').text(ref.referenced_column).style('font-size', '0.875rem');\n };\n }\n }\n return node;\n }\n}\n\nexport class DatabaseWidget extends Widget {\n panel: NowVisPanel;\n graphData: DatabaseGraphData = { nodes: [], links: [] };\n simulation: any;\n svg: d3_Selection;\n color: any;\n dataLoaded: boolean = false;\n selectedNodes: Set = new Set();\n \n constructor(panel: NowVisPanel) {\n super();\n this.panel = panel;\n this.title.label = 'Database';\n this.title.caption = 'Database';\n \n const d3node = d3_select(this.node);\n \n const container = d3node.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('height', '100%')\n .style('padding', '1rem');\n\n const headerContainer = container.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem');\n\n headerContainer.append('h4')\n .text('Database')\n .style('margin', '0')\n .style('color', '#333');\n\n const controlsContainer = headerContainer.append('div')\n .style('display', 'flex')\n .style('gap', '0.5rem')\n .style('align-items', 'center');\n\n const tablesDropdown = controlsContainer.append('div')\n .style('position', 'relative')\n .style('display', 'inline-block');\n\n const dropdownButton = tablesDropdown.append('button')\n .classed('btn btn-outline-primary dropdown-toggle', true)\n .attr('type', 'button')\n .attr('data-toggle', 'dropdown')\n .attr('aria-haspopup', 'true')\n .attr('aria-expanded', 'false')\n .html('Tables ')\n .style('min-width', '120px');\n\n tablesDropdown.append('div')\n .attr('id', 'tables-dropdown')\n .classed('dropdown-menu', true)\n .style('position', 'absolute')\n .style('top', '100%')\n .style('left', '0')\n .style('z-index', '1000')\n .style('display', 'none')\n .style('min-width', '250px')\n .style('max-height', '300px')\n .style('overflow-y', 'auto')\n .style('background', '#fff')\n .style('border', '1px solid #ccc')\n .style('border-radius', '4px')\n .style('box-shadow', '0 2px 10px rgba(0,0,0,0.1)')\n .style('padding', '0.5rem');\n\n controlsContainer.append('button')\n .attr('id', 'new-query-btn')\n .classed('btn btn-primary', true)\n .on('click', () => this.openNewQueryTab())\n .html(' New Query');\n\n controlsContainer.append('button')\n .attr('id', 'clear-selection-btn')\n .classed('btn btn-outline-secondary', true)\n .style('display', 'none')\n .on('click', () => this.clearSelection())\n .html(' Clear Selection');\n\n container.append('div')\n .attr('id', 'graph-container')\n .style('flex', '1')\n .style('border', '1px solid #ddd')\n .style('border-radius', '4px')\n .style('background', '#f9f9f9')\n .style('position', 'relative');\n\n this.color = scaleOrdinal(schemeTableau10);\n\n dropdownButton.on('click', () => {\n const dropdown = document.getElementById('tables-dropdown');\n if (dropdown) {\n const isVisible = dropdown.style.display === 'block';\n dropdown.style.display = isVisible ? 'none' : 'block';\n dropdownButton.attr('aria-expanded', !isVisible);\n }\n });\n\n d3_select(document).on('click', (event) => {\n const dropdown = document.getElementById('tables-dropdown');\n const button = dropdownButton.node();\n if (dropdown && button && !button.contains(event.target) && !dropdown.contains(event.target)) {\n dropdown.style.display = 'none';\n dropdownButton.attr('aria-expanded', 'false');\n }\n });\n\n this.showLoadingMessage();\n }\n\n protected onAfterShow(msg: Message): void {\n this.fetchAndRenderTables();\n }\n\n private showLoadingMessage(): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#666')\n .style('font-size', '16px')\n .html(`\n \n
            Click on the Database tab to load database structure
            \n `);\n }\n\n async fetchAndRenderTables() {\n const dropdownMenu = this.node.querySelector('#tables-dropdown');\n if (!dropdownMenu) {\n console.error('Tables dropdown element not found');\n return;\n }\n\n this.showLoadingState();\n this.clearSelection();\n\n try {\n const response = await fetch('/db/tables');\n if (!response.ok) throw new Error('Failed to fetch table list');\n const data = await response.json();\n this.renderTableList(data.tables);\n this.buildGraphDataFromTablesResponse(data);\n this.initializeGraph();\n this.renderGraph();\n this.dataLoaded = true;\n } catch (e) {\n console.error('Error fetching tables:', e);\n this.showErrorMessage('Failed to load database structure');\n }\n }\n\n private showLoadingState(): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#666')\n .style('font-size', '16px')\n .html(`\n \n
            Loading database structure...
            \n `);\n }\n\n private showErrorMessage(message: string): void {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n d3_select(container)\n .append('div')\n .style('display', 'flex')\n .style('justify-content', 'center')\n .style('align-items', 'center')\n .style('height', '100%')\n .style('flex-direction', 'column')\n .style('color', '#dc3545')\n .style('font-size', '16px')\n .html(`\n \n
            ${message}
            \n `);\n }\n\n buildGraphDataFromTablesResponse(data: any) {\n const { tables, foreign_keys } = data;\n \n this.graphData.nodes = tables.map((tableName: string) => ({\n id: tableName,\n name: tableName\n }));\n\n this.graphData.links = [];\n\n if (foreign_keys) {\n Object.keys(foreign_keys).forEach(sourceTable => {\n const tableForeignKeys = foreign_keys[sourceTable];\n tableForeignKeys.forEach((fk: any) => {\n const existingLink = this.graphData.links.find(link => \n link.source === sourceTable && link.target === fk.table\n );\n \n if (!existingLink) {\n this.graphData.links.push({\n source: sourceTable,\n target: fk.table,\n sourceColumn: fk.from,\n targetColumn: fk.to\n });\n }\n });\n });\n }\n }\n\n private createArrowMarker(): void {\n this.svg.append('defs').append('marker')\n .attr('id', 'arrowhead')\n .attr('viewBox', '-0 -3 6 6')\n .attr('refX', 25)\n .attr('refY', 0)\n .attr('orient', 'auto')\n .attr('markerWidth', 5)\n .attr('markerHeight', 5)\n .attr('xoverflow', 'visible')\n .append('svg:path')\n .attr('d', 'M 0,-3 L 6 ,0 L 0,3')\n .attr('fill', '#999')\n .style('stroke', 'none');\n }\n\n private createSimulation(width: number, height: number, isInitial: boolean = false): void {\n if (this.simulation) {\n this.simulation.stop();\n }\n\n const linkDistance = isInitial ? 200 : 250;\n const chargeStrength = isInitial ? -200 : -400;\n const chargeDistanceMax = isInitial ? 800 : 400;\n const collisionRadius = isInitial ? 120 : 70;\n\n this.simulation = forceSimulation(this.graphData.nodes)\n .force('link', forceLink(this.graphData.links).id((d: any) => d.id).distance(linkDistance))\n .force('charge', forceManyBody().strength(chargeStrength).distanceMax(chargeDistanceMax))\n .force('center', forceCenter(width / 2, height / 2))\n .force('collision', forceCollide().radius(collisionRadius));\n\n if (!isInitial) {\n this.simulation.alphaDecay(0.1).velocityDecay(0.4);\n }\n }\n\n initializeGraph() {\n const container = this.node.querySelector('#graph-container') as HTMLElement;\n if (!container) return;\n\n d3_select(container).selectAll('*').remove();\n\n const rect = container.getBoundingClientRect();\n const width = Math.max(400, rect.width || 800);\n const height = Math.max(300, rect.height || 600);\n\n this.svg = d3_select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', height)\n .style('background', '#f9f9f9') as d3_Selection;\n\n this.createArrowMarker();\n\n if (this.graphData.nodes.length > 0) {\n this.createSimulation(width, height, true);\n }\n }\n\n renderGraph() {\n if (!this.svg) return;\n\n this.svg.selectAll('*').remove();\n\n this.createArrowMarker();\n\n if (this.graphData.nodes.length === 0) {\n this.svg.append('text')\n .attr('x', '50%')\n .attr('y', '50%')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', '16px')\n .style('fill', '#666')\n .text('No database relationships found');\n return;\n }\n\n const svgNode = this.svg.node();\n const width = svgNode ? svgNode.getBoundingClientRect().width : 800;\n const height = svgNode ? svgNode.getBoundingClientRect().height : 600;\n\n const centerX = width / 2;\n const centerY = height / 2;\n const nodesCount = this.graphData.nodes.length;\n const radius = Math.min(width, height) / 2 - 50;\n this.graphData.nodes.forEach((node: any, index: number) => {\n const angle = 2 * Math.PI * index / nodesCount;\n node.x = centerX + radius * Math.sin(angle);\n node.y = centerY + radius * Math.cos(angle);\n });\n\n const link = this.svg.append('g')\n .selectAll('line')\n .data(this.graphData.links)\n .enter().append('line')\n .attr('stroke', '#999')\n .attr('stroke-opacity', 0.6)\n .attr('stroke-width', 2)\n .attr('marker-end', 'url(#arrowhead)');\n\n const node = this.svg.append('g')\n .selectAll('g')\n .data(this.graphData.nodes)\n .enter().append('g')\n .attr('class', 'node')\n .call((selection: any) => {\n selection.on('click', (event: any, d: any) => this.handleNodeClick(event, d));\n });\n\n node.append('circle')\n .attr('r', 35)\n .attr('fill', (d: any) => this.color(d.id))\n .attr('stroke', '#fff')\n .attr('stroke-width', 3);\n\n node.append('text')\n .text((d: any) => d.name)\n .attr('text-anchor', 'middle')\n .attr('dy', '.35em')\n .style('font-size', '12px')\n .style('font-weight', 'bold')\n .style('fill', '#fff')\n .style('text-shadow', '1px 1px 2px rgba(0,0,0,0.8), -1px -1px 2px rgba(0,0,0,0.8), 1px -1px 2px rgba(0,0,0,0.8), -1px 1px 2px rgba(0,0,0,0.8)')\n .style('pointer-events', 'none');\n\n node.append('title')\n .text((d: any) => `Table: ${d.name}\\nClick to view details\\nCtrl+Click to select (orange margin)`);\n\n this.svg.on('click', (event: any) => {\n if (event.target === this.svg.node()) {\n this.clearSelection();\n }\n });\n\n this.createSimulation(width, height, false);\n\n this.simulation.on('tick', () => {\n link\n .attr('x1', (d: any) => {\n const x = d.source.x;\n return this.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0;\n })\n .attr('y1', (d: any) => {\n const y = d.source.y;\n return this.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0;\n })\n .attr('x2', (d: any) => {\n const x = d.target.x;\n return this.isValidNumber(x) ? Math.max(0, Math.min(width, x)) : 0;\n })\n .attr('y2', (d: any) => {\n const y = d.target.y;\n return this.isValidNumber(y) ? Math.max(0, Math.min(height, y)) : 0;\n });\n\n node\n .attr('transform', (d: any) => {\n const x = d.x;\n const y = d.y;\n \n if (!this.isValidNumber(x) || !this.isValidNumber(y)) {\n d.x = width / 2;\n d.y = height / 2;\n return `translate(${width / 2},${height / 2})`;\n }\n \n const boundedX = Math.max(50, Math.min(width - 50, x));\n const boundedY = Math.max(50, Math.min(height - 50, y));\n \n if (boundedX !== x) {\n d.x = boundedX;\n }\n if (boundedY !== y) {\n d.y = boundedY;\n }\n \n return `translate(${boundedX},${boundedY})`;\n });\n });\n\n node.call((selection: any) => {\n const widget = this;\n selection.on('mouseover', function(event: any, d: any) {\n const isSelected = widget.selectedNodes.has(d.id);\n \n d3_select(this).select('circle')\n .attr('stroke-width', isSelected ? 6 : 4)\n .attr('stroke', isSelected ? '#ff8c00' : '#333');\n \n link\n .attr('stroke-opacity', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? 1 : 0.1;\n })\n .attr('stroke-width', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? 3 : 2;\n })\n .attr('stroke', (linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id || targetId === d.id) ? '#87CEEB' : '#999';\n });\n \n node.select('circle')\n .attr('stroke-width', (nodeData: any) => {\n const isConnected = link.data().some((linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id && targetId === nodeData.id) || \n (targetId === d.id && sourceId === nodeData.id);\n });\n const isNodeSelected = widget.selectedNodes.has(nodeData.id);\n return isNodeSelected ? 6 : (isConnected ? 4 : 3);\n })\n .attr('stroke', (nodeData: any) => {\n const isConnected = link.data().some((linkData: any) => {\n const sourceId = typeof linkData.source === 'object' ? linkData.source.id : linkData.source;\n const targetId = typeof linkData.target === 'object' ? linkData.target.id : linkData.target;\n return (sourceId === d.id && targetId === nodeData.id) || \n (targetId === d.id && sourceId === nodeData.id);\n });\n const isNodeSelected = widget.selectedNodes.has(nodeData.id);\n return isConnected ? '#87CEEB' : (isNodeSelected ? '#ff8c00' : '#fff');\n });\n })\n .on('mouseout', function() {\n widget.updateSelection();\n \n link\n .attr('stroke-opacity', 0.6)\n .attr('stroke-width', 2)\n .attr('stroke', '#999');\n });\n });\n\n node.call(drag()\n .on('start', (event: any, d: any) => {\n if (!event.active) this.simulation.alphaTarget(0.3).restart();\n d.fx = this.isValidNumber(d.x) ? d.x : width / 2;\n d.fy = this.isValidNumber(d.y) ? d.y : height / 2;\n })\n .on('drag', (event: any, d: any) => {\n const boundedX = Math.max(50, Math.min(width - 50, event.x));\n const boundedY = Math.max(50, Math.min(height - 50, event.y));\n d.fx = boundedX;\n d.fy = boundedY;\n })\n .on('end', (event: any, d: any) => {\n if (!event.active) this.simulation.alphaTarget(0);\n d.fx = null;\n d.fy = null;\n }));\n }\n\n private isValidNumber(value: any): boolean {\n return typeof value === 'number' && !isNaN(value) && isFinite(value);\n }\n\n private toggleSelection(nodeId: string): void {\n if (this.selectedNodes.has(nodeId)) {\n this.selectedNodes.delete(nodeId);\n } else {\n this.selectedNodes.add(nodeId);\n }\n this.updateSelection();\n }\n\n private clearSelection(): void {\n this.selectedNodes.clear();\n this.updateSelection();\n }\n\n private updateSelection(): void {\n if (!this.svg) return;\n\n const widget = this;\n this.svg.selectAll('.node').each(function(d: any) {\n const nodeElement = d3_select(this);\n const isSelected = widget.selectedNodes.has(d.id);\n \n nodeElement.select('circle')\n .attr('stroke', isSelected ? '#ff8c00' : '#fff')\n .attr('stroke-width', isSelected ? 6 : 3)\n .attr('stroke-dasharray', 'none');\n });\n\n const newQueryBtn = this.node.querySelector('#new-query-btn') as HTMLElement;\n const clearBtn = this.node.querySelector('#clear-selection-btn') as HTMLElement;\n \n if (!newQueryBtn || !clearBtn) return;\n\n if (this.selectedNodes.size > 0) {\n newQueryBtn.innerHTML = ` New Query ${this.selectedNodes.size}`;\n clearBtn.style.display = 'inline-block';\n } else {\n newQueryBtn.innerHTML = ' New Query';\n clearBtn.style.display = 'none';\n }\n }\n\n private handleNodeClick(event: any, d: any): void {\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n event.stopPropagation();\n this.toggleSelection(d.id);\n } else {\n this.openTableInfoTab(d.name);\n }\n }\n\n getSelectedTables(): string[] {\n return Array.from(this.selectedNodes);\n }\n\n selectTables(tableNames: string[]): void {\n tableNames.forEach(name => {\n this.selectedNodes.add(name);\n });\n this.updateSelection();\n }\n\n renderTableList(tables: string[]) {\n const dropdownMenu = this.node.querySelector('#tables-dropdown') as HTMLElement;\n if (!dropdownMenu) {\n console.error('Tables dropdown element not found in renderTableList');\n return;\n }\n const d3menu = d3_select(dropdownMenu);\n d3menu.html('');\n \n if (!tables || tables.length === 0) {\n d3menu.append('div')\n .text('No tables found.')\n .style('padding', '0.5rem')\n .style('color', '#666')\n .style('font-style', 'italic');\n return;\n }\n\n d3menu.append('div')\n .text(`Tables (${tables.length})`)\n .style('font-weight', 'bold')\n .style('padding', '0.5rem')\n .style('border-bottom', '1px solid #eee')\n .style('margin-bottom', '0.5rem');\n\n tables.forEach(tableName => {\n const item = d3menu.append('div')\n .style('padding', '0.5rem')\n .style('cursor', 'pointer')\n .style('border-radius', '3px')\n .style('margin-bottom', '0.25rem')\n .style('transition', 'background-color 0.2s')\n .on('mouseover', function() {\n d3_select(this).style('background-color', '#f8f9fa');\n })\n .on('mouseout', function() {\n d3_select(this).style('background-color', 'transparent');\n })\n .on('click', () => {\n this.openTableInfoTab(tableName);\n dropdownMenu.style.display = 'none';\n const dropdownButton = this.node.querySelector('[data-toggle=\"dropdown\"]');\n if (dropdownButton) {\n dropdownButton.setAttribute('aria-expanded', 'false');\n }\n });\n\n item.append('i')\n .classed('fa fa-table', true)\n .style('margin-right', '0.5rem')\n .style('color', '#007bff');\n\n item.append('span')\n .text(tableName)\n .style('font-size', '14px');\n });\n }\n\n async openTableInfoTab(tableName: string) {\n let widget: Widget | null = null;\n try {\n const response = await fetch(`/db/table/${encodeURIComponent(tableName)}`);\n if (!response.ok) throw new Error('Failed to fetch table details');\n const details = await response.json();\n widget = new TableInfoWidget(tableName, details);\n } catch (e) {\n widget = new DatabaseTabWidget();\n widget.title.label = tableName;\n widget.node.innerHTML = `
            Error loading table info: ${e.message}
            `;\n }\n\n let refWidget: Widget | null = null;\n if(this.panel.widgets) {\n for (let w of this.panel.widgets()) {\n if (w instanceof TableInfoWidget || w instanceof QueryResultWidget) {\n refWidget = w;\n }\n }\n }\n if (refWidget) {\n this.panel.addInfoWidget(widget, { ref: refWidget, mode: 'tab-after' });\n } else {\n this.panel.addInfoWidget(widget, { ref: this, mode: 'split-bottom' });\n }\n this.panel.activateWidget(widget);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graphData.nodes.length > 0) {\n this.initializeGraph();\n this.renderGraph();\n }\n }\n\n private getInitialQuery(selectedTables: string[]): string {\n if (selectedTables.length === 0) \n return '';\n \n if (selectedTables.length === 1) {\n return `SELECT * FROM \"${selectedTables[0]}\" LIMIT 100;`;\n }\n \n let initialQuery = `SELECT *\\nFROM \"${selectedTables[0]}\"\\n`;\n \n const usedTables = new Set([selectedTables[0]]);\n const joins: string[] = [];\n \n for (let i = 1; i < selectedTables.length; i++) {\n const currentTable = selectedTables[i];\n let joinFound = false;\n \n for (const link of this.graphData.links) {\n console.log(link.source, link.target);\n const sourceTable = (link.source as TableNode).id;\n const targetTable = (link.target as TableNode).id;\n \n if (sourceTable === currentTable && usedTables.has(targetTable)) {\n joins.push(`JOIN \"${currentTable}\" ON \"${targetTable}\".${link.targetColumn} = \"${currentTable}\".${link.sourceColumn}`);\n usedTables.add(currentTable);\n joinFound = true;\n break;\n }\n \n if (targetTable === currentTable && usedTables.has(sourceTable)) {\n joins.push(`JOIN \"${currentTable}\" ON \"${sourceTable}\".${link.sourceColumn} = \"${currentTable}\".${link.targetColumn}`);\n usedTables.add(currentTable);\n joinFound = true;\n break;\n }\n }\n \n if (!joinFound) {\n joins.push(`CROSS JOIN \"${currentTable}\"`);\n usedTables.add(currentTable);\n }\n }\n \n return initialQuery + joins.join('\\n') + '\\nLIMIT 100;';\n }\n\n private async openNewQueryTab(): Promise {\n const selectedTables = this.getSelectedTables();\n const tableNames = this.graphData.nodes.map(n => n.name);\n const initialQuery = this.getInitialQuery(selectedTables);\n \n let columnNames: string[] = [];\n if (selectedTables.length > 0) {\n try {\n const columnPromises = selectedTables.map(async (tableName) => {\n const response = await fetch(`/db/table/${encodeURIComponent(tableName)}`);\n if (response.ok) {\n const details = await response.json();\n return details.columns ? details.columns.map((col: any) => col.name) : [];\n }\n return [];\n });\n \n const columnArrays = await Promise.all(columnPromises);\n columnNames = [].concat(...columnArrays);\n } catch (error) {\n console.warn('Failed to fetch column names:', error);\n }\n }\n \n const queryWidget = new QueryWidget(this.panel, tableNames, columnNames, initialQuery);\n \n this.panel.addInfoWidget(queryWidget, { ref: this, mode: 'tab-after' });\n this.panel.activateWidget(queryWidget);\n \n this.clearSelection();\n }\n} \n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {TrialGraph, TrialGraphData, ActivationData} from '@noworkflow/trial';\n\nimport {json} from '@noworkflow/utils';\n\nexport\nclass BaseActivationGraphWidget extends Widget {\n\n name: string;\n cls: string;\n t1: string;\n t2: string;\n graph: TrialGraph;\n d3node: d3_Selection;\n\n static graphTypeForm(name: string, selectorDiv: d3_Selection) {\n let graphType = selectorDiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n graphType.append(\"label\")\n .attr(\"for\", name + \"-graphtype\")\n .attr(\"title\", \"Select the graph type\")\n .text(\"Graph Type:\")\n\n let typeOptions = graphType.append(\"select\")\n .attr(\"id\", name + \"-graphtype\")\n .classed(\"graph-type\", true)\n .classed(\"select-style\", true);\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"tree\")\n .attr(\"data-description\", \"Activation tree. Edges represent order of execution\")\n .text(\"Activation Tree\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"no_match\")\n .attr(\"data-description\", \"Activation tree presented as a Graph\")\n .text(\"Activation No Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"exact_match\")\n .attr(\"data-description\", \"Calls have counting independent from caller activations\")\n .text(\"Activation Exact Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"namespace_match\")\n .attr(\"data-description\", \"Calls are combined and a function may have more than one call workflow\")\n .text(\"Activation Namespace Match\")\n\n typeOptions.append(\"option\")\n .attr(\"value\", \"definition_tree\")\n .attr(\"data-description\", \"Definition tree. Edges represent order of script definition\")\n .text(\"Definition Tree\")\n\n typeOptions.property(\"value\", \"namespace_match\")\n }\n\n static useCacheForm(name: string, selectorDiv: d3_Selection) {\n let useCache = selectorDiv.append(\"div\")\n .classed(\"graph-attr\", true);\n\n useCache.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"use_cache\")\n .attr(\"value\", \"on\")\n .attr(\"checked\", true)\n .classed(\"use-cache\", true)\n .attr(\"id\", name + \"-use-cache\")\n\n useCache.append(\"label\")\n .attr(\"for\", name + \"-use-cache\")\n .attr(\"title\", \"Select the graph type\")\n .text(\"Use Cache\")\n }\n\n static createNode(name:string, fn: (name: string, parent: d3_Selection) => void = (parent) => null): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('trial-content', true)\n\n let selectorDiv = content.append(\"div\")\n .classed(\"graphselector\", true)\n .classed(\"hide-toolbar\", true);\n\n BaseActivationGraphWidget.graphTypeForm(name, selectorDiv);\n\n fn(name, selectorDiv);\n\n BaseActivationGraphWidget.useCacheForm(name, selectorDiv);\n\n let selectorReload = selectorDiv.append(\"a\")\n .attr(\"href\", \"#\")\n .classed(\"link-button reload-button\", true)\n\n selectorReload.append('i')\n .classed(\"fa fa-refresh\", true);\n\n selectorReload.append('span')\n .text('Reload');\n\n content.append('div')\n .classed('sub-content', true);\n\n return node;\n }\n\n setGraph(data: TrialGraphData, config: any={}, showDiffFunction?:any, nowVisPanel?: any) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new TrialGraph(this.cls, sub, config, showDiffFunction, nowVisPanel);\n this.graph.load(data, this.t1, this.t2);\n }\n\n graphDefinition(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData) {\n return {\n width: this.node.getBoundingClientRect().width - 24,\n height: this.node.getBoundingClientRect().height - 24,\n customForm: (graph: TrialGraph, form: d3_Selection) => {\n // Toggle Tooltips\n let selectorDiv = this.d3node.select(\".trial-content .graphselector\");\n\n let typeOptions = selectorDiv.select(\".graph-type\");\n typeOptions.property(\"value\", selectedGraph);\n\n let useCacheDiv = selectorDiv.select(\".use-cache\");\n useCacheDiv.property(\"checked\", useCache);\n\n\n let selectorToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + graph.graphId + \"-toolbar-selector-check\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-selector-check\")\n .attr(\"value\", \"show\")\n .property(\"checked\", selectorDiv.classed('visible'))\n .on(\"change\", () => {\n let visible = selectorToggle.property(\"checked\");\n selectorToggleI\n .classed('fa-circle-o', visible)\n .classed('fa-circle', !visible);\n selectorDiv\n .classed('visible', visible)\n .classed('show-toolbar', visible)\n .classed('hide-toolbar', !visible)\n });\n let selectorLabel = form.append(\"label\")\n .attr(\"for\", \"trial-\" + graph.graphId + \"-toolbar-selector-check\")\n\n let optionsNode: any = typeOptions.node();\n\n selectorLabel.append(\"span\")\n .classed(\"toggle-label\", true)\n .text(optionsNode.options[optionsNode.selectedIndex].text)\n\n let selectorToggleI = selectorLabel.append(\"i\")\n .classed('fa', true)\n .classed(\"fa-circle\", !selectorDiv.classed('visible'))\n .classed(\"fa-circle-o\", selectorDiv.classed('visible'))\n },\n customLoadTooltip: (g: TrialGraph, div: HTMLDivElement, text: string, trialid: string, aid: string) => {\n var url = \"/trials/\" + trialid + \"/activations/\" + aid + \".json\";\n function createResponse(activationId: string, div2: Element) {\n return function(data: ActivationData) {\n g.activationStorage[activationId] = data;\n g.updateTooltipDiv(activationId, div2);\n }\n }\n json(text, div, url, createResponse(aid, div));\n },\n genDataflow: genDataflow,\n queryTooltip: true\n }\n }\n\n configureGraph(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData, showDiffFunction?:any, nowVisPanel?:any) {\n this.setGraph(data, this.graphDefinition(selectedGraph, useCache, genDataflow, data), showDiffFunction, nowVisPanel);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graph) {\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n }\n\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {json} from '@noworkflow/utils';\n\nimport {BaseActivationGraphWidget} from './base_activation_graph';\n\nimport {TrialGraphData} from '@noworkflow/trial';\n\n\nexport\nclass DiffGraphWidget extends BaseActivationGraphWidget {\n\n showDiffFunction : any;\n nowVisPanel : any\n\n static url(trial1: string, trial2: string, selectedGraph: string, useCache: boolean): string {\n let cache = useCache ? \"1\" : \"0\"\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/\" + selectedGraph + \"-\" + cache + \".json\"\n );\n }\n\n static createForm(name: string, parent: d3_Selection): void {\n }\n\n constructor(name: string, cls: string, t1: string, t2: string, showDiffFunction : any, nowVisPanel : any) {\n super({ node: BaseActivationGraphWidget.createNode(cls, DiffGraphWidget.createForm) });\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".graph-type\").property(\"value\"),\n this.d3node.select(\".use-cache\").property(\"checked\"),\n )\n })\n this.addClass('content');\n this.addClass('diff-widget');\n this.title.label = name;\n this.title.closable = true;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n this.t1 = t1;\n this.t2 = t2;\n this.showDiffFunction = showDiffFunction\n this.nowVisPanel = nowVisPanel\n }\n\n load(selectedGraph: string = \"namespace_match\", useCache: boolean = true) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n json(\"Diff\", sub, DiffGraphWidget.url(this.t1, this.t2, selectedGraph, useCache), (data: TrialGraphData) => {\n let selectorDiv = this.d3node.select(\".trial-content .graphselector\");\n\n let useCacheDiv = selectorDiv.select(\".use-cache\");\n useCacheDiv.property(\"checked\", useCache);\n\n this.configureGraph(selectedGraph, useCache, false, data, this.showDiffFunction, this.nowVisPanel);\n })\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n } from 'd3-selection';\n\nimport {NowVisPanel} from '../nowpanel';\nimport {Widget} from '@lumino/widgets';\n\nexport function functionDiffWindow(functionDiffJson : any, windowIdAndTitle:string, parentDock : NowVisPanel){ \n if(document.getElementById(windowIdAndTitle)){\n alert(\"This function diff is already open!\")\n return\n }\n \n let functionDiffWidget = new Widget();\n functionDiffWidget.title.label = windowIdAndTitle\n functionDiffWidget.id = windowIdAndTitle;\n functionDiffWidget.title.closable = true;\n parentDock.addGraphWidget(functionDiffWidget);\n parentDock.activateWidget(functionDiffWidget);\n\n let functionDiffWindow = d3_select(document.getElementById(windowIdAndTitle));\n functionDiffWindow.style(\"overflow-y\", \"auto\").style(\"padding\", \"2em 2em 2em 1em\");\n\n function addHideShowButton(elementToAppendTo : any, buttonId : string, spanId : string){\n buttonId += \"-\" + crypto.randomUUID();\n return elementToAppendTo.append(\"span\").append(\"i\").attr(\"id\", buttonId).classed(\"fa fa-compress\", true).on(\"click\",()=>{\n let spanToHideOrShow = d3_select(document.getElementById(spanId));\n let thisButton = d3_select(document.getElementById(buttonId));\n if(spanToHideOrShow.classed(\"d-none\")){\n spanToHideOrShow.classed(\"d-none\", false);\n thisButton.classed(\"fa fa-expand\", false);\n thisButton.classed(\"fa fa-compress\", true);\n }else{\n spanToHideOrShow.classed(\"d-none\", true);\n thisButton.classed(\"fa fa-compress\", false);\n thisButton.classed(\"fa fa-expand\", true);\n }\n });\n }\n\n function filterVariablesArray(array : any, opVariables: boolean){\n \n let defaultVariables: any[] = [\"name\", \"attribute\", \"access\"];\n if(opVariables) defaultVariables = defaultVariables.concat([\"add\", \"sub\", \"mult\", \"div\", \"mod\", \"pow\", \"floordiv\", // arithmetic operators\n \"add_assign\", \"sub_assign\", \"mult_assign\", \"div_assign\", // assignment operators 1\n \"mod_assign\", \"pow_assign\", \"floordiv_assign\", // assignment operators 2\n \"bitand_assign\", \"bitor_assign\", \"bitxor_assign\", // assignment operators 3\n \"rshift_assign\", \"lshift_assign\", // assignment operators 4\n \"eq\", \"noteq\", \"gt\", \"lt\", \"gte\", \"lte\", // comparison operators\n \"and\", \"or\", \"not\", // logical operators\n \"is\", \"isnot\", // identity operators\n \"in\", \"notin\", // membership operators\n \"bitand\", \"bitor\", \"bitxor\", \"invert\", \"rshift\", \"lshift\"]); // bitwise operators]\n\n \n\n let filteredArray = array.filter((arrayElement : string)=>{\n\n for(let i = 0; i < defaultVariables.length; i++){\n if(arrayElement.includes(\"'type': '\"+defaultVariables[i]+\"',\")) return true;\n }\n\n return false;\n });\n\n return filteredArray;\n\n }\n\n function writeHTMLDiffVariables(spanVariables: d3_Selection, trial1VariablesThatChanged: any[], trial2VariablesAdded: any[], trial1VariablesRemoved : any[]) {\n\n if(trial1VariablesThatChanged.length > 0){\n\n let variablesChangedTitle = spanVariables.append(\"p\").attr(\"style\",\"font-weight:bold;\").text(\"The variables changed:\");\n let spanVariablesChanged = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-changed-span-\" + crypto.randomUUID());\n addHideShowButton(variablesChangedTitle, \"hide-and-show-button-variables-changed\", spanVariablesChanged.attr(\"id\"));\n\n trial1VariablesThatChanged.forEach((diffVar: any) => {\n let variablesLines = diffVar.match(/\\{[^}]*\\}/g);\n let differentAttributes = findDifferenceBetweenVariables(variablesLines[0], variablesLines[1]);\n\n spanVariablesChanged.append(\"span\").html(colorJsonAttributesHTML(variablesLines[0], differentAttributes, \"red\"));\n spanVariablesChanged.append(\"br\");\n spanVariablesChanged.append(\"span\").html(colorJsonAttributesHTML(variablesLines[1], differentAttributes, \"green\"));\n spanVariablesChanged.append(\"br\");\n spanVariablesChanged.append(\"br\");\n });\n }\n\n if (trial2VariablesAdded.length > 0) {\n let variablesAddedTitle = spanVariables.append(\"p\").attr(\"style\", \"font-weight:bold;\").text(\"The variables added:\");\n let spanVariablesAdded = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-added-span-\"+crypto.randomUUID());\n addHideShowButton(variablesAddedTitle, \"hide-and-show-button-variables-added\", spanVariablesAdded.attr(\"id\"));\n\n trial2VariablesAdded.forEach((varAdded: any) => {\n spanVariablesAdded.append(\"span\").style(\"color\", \"green\").text(varAdded);\n spanVariablesAdded.append(\"br\");\n });\n }\n\n if (trial1VariablesRemoved.length > 0) {\n let variablesRemovedTitle = spanVariables.append(\"p\").attr(\"style\", \"font-weight:bold;\").text(\"The variables removed:\");\n let spanVariablesRemoved = spanVariables.append(\"spand\").attr(\"id\", \"diff-function-variables-removed-span\"+crypto.randomUUID());\n addHideShowButton(variablesRemovedTitle, \"hide-and-show-button-removed-added\", spanVariablesRemoved.attr(\"id\"));\n\n trial1VariablesRemoved.forEach((varRemoved: any) => {\n spanVariablesRemoved.append(\"span\").style(\"color\", \"red\").text(varRemoved);\n spanVariablesRemoved.append(\"br\");\n });\n }\n }\n\n\n function findDifferenceBetweenVariables(variable1 : string, variable2 : string){\n let jsonVariable1 = JSON.parse(variable1.replace(/\"'/g,\"\\\"\").replace(/'\"/g,\"\\\"\").replace(/'/g,\"\\\"\"));\n let jsonVariable2 = JSON.parse(variable2.replace(/\"'/g,\"\\\"\").replace(/'\"/g,\"\\\"\").replace(/'/g,\"\\\"\"));\n \n let differentAttributes = []\n for(let attr in jsonVariable1){\n if (jsonVariable1[attr] != jsonVariable2[attr]) differentAttributes.push(attr.toString());\n }\n \n return differentAttributes;\n }\n \n function colorJsonAttributesHTML(jsonAsString : string, attributesArray : any, color : string) : string{\n let coloredJsonAsString = jsonAsString.replace(/'<([^>]+)>'/g, \"'$1'\");\n attributesArray.forEach((attr : string)=>{\n // Annotated code = color only the attribute\n //attr = \"'\"+attr+\"':\";\n //coloredJsonAsString = coloredJsonAsString.replace(attr, \"\" + attr + \"\");\n let regex = \"'\"+attr+\"':\"+\"(.*?),\"\n let regexMatches = coloredJsonAsString.match(new RegExp(String.raw`\\s${regex}\\s`))!;\n coloredJsonAsString = coloredJsonAsString.replace(regexMatches[1], \"\" + regexMatches[1] + \"\");\n });\n return coloredJsonAsString;\n }\n\n function colorArrayElementsHTML(array : any, symDifference : any, color : string){\n let coloredArray = array;\n symDifference.forEach((argument: any) => { \n if (coloredArray.includes(argument)) coloredArray[coloredArray.indexOf(argument)] = \"\" + argument.toString() + \"\"; \n });\n return coloredArray.toString();\n }\n\n function writeFileAccess(fileAccessArray : any, window : any, color : string){\n fileAccessArray.forEach((file:any)=>{\n window.append(\"span\").style(\"color\", color).text(\"Name: \" + file.name);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Mode: \" + file.mode);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\" Buffering: \" + file.buffering);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Content hash before: \" + file.content_hash_before).on(\"click\", () => {\n downloadFileContent(file.content_hash_before, file.name);\n });\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Content hash after: \" + file.content_hash_after).on(\"click\", () => {\n downloadFileContent(file.content_hash_after, file.name);\n });\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Timestamp: \" + file.timestamp);\n window.append(\"br\");\n window.append(\"span\").style(\"color\", color).text(\"Function: \" + file.stack);\n window.append(\"br\");\n window.append(\"br\");\n });\n }\n \n [\"output\", \"arguments\", \"duration\", \"variables\"].forEach((property)=>{\n let didntChange = JSON.stringify(functionDiffJson[property+\"_function_trial1\"]) == JSON.stringify(functionDiffJson[property+\"_function_trial2\"]);\n let changeText = didntChange ? \"The \" + property + \" didn't change\" : \"The \" + property + \" changed:\";\n let textChangeTitle;\n if(property != \"variables\") textChangeTitle = functionDiffWindow.append(\"p\").attr(\"style\",\"font-weight:bold;\").text(changeText);\n\n if(changeText.includes(\"changed\")){\n if(property == \"duration\"){\n functionDiffJson[property+\"_function_trial1\"] = functionDiffJson[property+\"_function_trial1\"].toString() + \" miliseconds\"\n functionDiffJson[property+\"_function_trial2\"] = functionDiffJson[property+\"_function_trial2\"].toString() + \" miliseconds\"\n }\n\n let spanProperty = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-\"+property+\"-span-\"+crypto.randomUUID());\n\n if(property != \"variables\") addHideShowButton(textChangeTitle, \"hide-and-show-button-\"+property, spanProperty.attr(\"id\"));\n \n if(property == \"variables\"){\n\n let buttonDiv = functionDiffWindow.append(\"div\").attr(\"id\", \"div-diff-function-variables-filter\").lower();\n \n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-default\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show only name, attribute, and access variables\")\n .on(\"click\", () => {\n \n let trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_that_changed\"], false);\n let trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial2_variables_added\"], false);\n let trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_removed\"], false);\n\n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered);\n\n })\n .append(\"i\")\n .classed(\"fa fa-asterisk\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show only name, attribute, and access variables\");\n\n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-operation\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show all operation variables\")\n .on(\"click\", () => {\n \n let trial1ChangedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_that_changed\"], true);\n let trial2AddedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial2_variables_added\"], true);\n let trial1RemovedVariablesFiltered = filterVariablesArray(functionDiffJson[\"trial1_variables_removed\"], true);\n\n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, trial1ChangedVariablesFiltered, trial2AddedVariablesFiltered, trial1RemovedVariablesFiltered);\n\n })\n .append(\"i\")\n .classed(\"fa fa-plus-square\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show all operation variables\");;\n\n buttonDiv.append(\"span\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"filter-\" + windowIdAndTitle + \"-variables-all\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Show all variables\")\n .on(\"click\", () => {\n \n spanProperty.html(\"\");\n writeHTMLDiffVariables(spanProperty, functionDiffJson[\"trial1_variables_that_changed\"], functionDiffJson[\"trial2_variables_added\"], functionDiffJson[\"trial1_variables_removed\"]);\n\n })\n .append(\"i\")\n .classed(\"fa fa-code\", true).append(\"span\").style(\"margin-right\",\"10px\").text(\"Show all variables\");\n\n writeHTMLDiffVariables(spanProperty, functionDiffJson[\"trial1_variables_that_changed\"], functionDiffJson[\"trial2_variables_added\"], functionDiffJson[\"trial1_variables_removed\"]);\n\n }else if(property == \"arguments\"){\n let symDifference = functionDiffJson[property+\"_function_trial1\"].filter((x: any) => !functionDiffJson[property+\"_function_trial2\"].includes(x))\n .concat(functionDiffJson[property+\"_function_trial2\"].filter((x: any) => !functionDiffJson[property+\"_function_trial1\"].includes(x)));\n\n spanProperty.append(\"span\").html(colorArrayElementsHTML(functionDiffJson[property+\"_function_trial1\"], symDifference, \"red\"));\n spanProperty.append(\"br\");\n spanProperty.append(\"span\").html(colorArrayElementsHTML(functionDiffJson[property+\"_function_trial2\"], symDifference, \"green\"));\n } else {\n spanProperty.append(\"span\").style(\"color\", \"red\").text(functionDiffJson[property+\"_function_trial1\"].toString());\n spanProperty.append(\"br\");\n spanProperty.append(\"span\").style(\"color\", \"green\").text(functionDiffJson[property+\"_function_trial2\"].toString());\n }\n\n }\n\n });\n\n let fileAccessAddedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_added\"].length + \" file accesses added:\");\n let spanFileAccessAdded = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-added-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessAddedTitle, \"hide-and-show-button-file-access-added\", spanFileAccessAdded.attr(\"id\"));\n writeFileAccess(functionDiffJson[\"file_accesses_added\"], spanFileAccessAdded, \"green\");\n\n\n let fileAccessRemovedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_removed\"].length + \" file accesses removed:\");\n let spanFileAccessRemoved = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-removed-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessRemovedTitle, \"hide-and-show-button-file-access-removed\", spanFileAccessRemoved.attr(\"id\"));\n writeFileAccess(functionDiffJson[\"file_accesses_removed\"], spanFileAccessRemoved, \"red\");\n \n \n let fileAccessReplacedTitle = functionDiffWindow.append(\"p\").style(\"font-weight\", \"bold\").text(functionDiffJson[\"file_accesses_replaced\"].length + \" file accesses replaced:\")\n let spanFileAccessReplaced = functionDiffWindow.append(\"span\").attr(\"id\", \"diff-function-file-access-replaced-span-\"+crypto.randomUUID());\n addHideShowButton(fileAccessReplacedTitle, \"hide-and-show-button-file-access-replaced\", spanFileAccessReplaced.attr(\"id\"));\n \n functionDiffJson[\"file_accesses_replaced\"].forEach((file:any)=>{\n spanFileAccessReplaced.append(\"span\").text(\"Name: \" + file.name);\n spanFileAccessReplaced.append(\"br\");\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\"Mode: \" + file.mode);\n //spanFileAccessReplaced.append(\"br\");\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\" Buffering: \" + file.buffering);\n //spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Content hash before changed from \").append(\"span\").style(\"color\", \"red\").text(file.content_hash_before_first_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_before_first_trial, file.name);\n });\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.content_hash_before_second_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_before_second_trial, file.name);\n });\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Content hash after changed from \").append(\"span\").style(\"color\", \"red\").text(file.content_hash_after_first_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_after_first_trial, file.name);\n });\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.content_hash_after_second_trial).on(\"click\", ()=>{\n downloadFileContent(file.content_hash_after_second_trial, file.name);\n });\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Timestamp changed from \").append(\"span\").style(\"color\", \"red\").text(file.timestamp_first_trial);\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.timestamp_second_trial);\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"span\").text(\"Checkpoint changed from \").append(\"span\").style(\"color\", \"red\").text(file.checkpoint_first_trial);\n spanFileAccessReplaced.append(\"span\").text(\" to \").append(\"span\").style(\"color\", \"green\").text(file.checkpoint_second_trial);\n //spanFileAccessReplaced.append(\"span\").style(\"color\", color).text(\"Function: \" + file.stack);\n spanFileAccessReplaced.append(\"br\");\n spanFileAccessReplaced.append(\"br\");\n });\n\n function downloadFileContent(fileHash: any, fileName : any) {\n var link = document.createElement(\"a\");\n link.download = fileName;\n link.href = window.location.origin + \"/downloadFile/\"+fileHash;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n link.remove();\n } \n\n /* function showFileContent(fileHash: any, fileName : any) {\n fetch(\"getFileContent/\" + fileHash, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n if(fileName.length > 50) fileName = fileName.substring(40);\n\n let modal = d3_select(document.getElementById(\"main\"))\n .append(\"div\").classed(\"modal fade show\", true)\n .attr(\"id\", \"fileContentModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"fileContentModal\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"false\")\n .style(\"display\", \"block\");\n \n let modalDialog = modal.append(\"div\").classed(\"modal-dialog\", true).attr(\"role\",\"document\").style(\"overflow-y\",\"initial\").style(\"max-height\", \"85%\");\n\n let modalContent = modalDialog.append(\"div\").classed(\"modal-content\", true);\n \n let modalHeader = modalContent.append(\"div\").classed(\"modal-header\", true);\n modalHeader.append(\"h5\").classed(\"modal-title\", true).attr(\"id\", \"fileContentModalLabel\").text(\"File \"+fileName+\"'s content:\");\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"data-dismiss\", \"modal\").attr(\"aria-label\", \"Close\")\n .append(\"span\").attr(\"aria-hidden\", \"true\").html(\"×\").on(\"click\", () => modal.remove());\n\n let modalBody = modalContent.append(\"div\").classed(\"modal-body\", true).style(\"overflow-y\", \"auto\").style(\"height\", \"80vh\");\n modalBody.append(\"p\").html(json.file_content.replace(\"\\r\\n\", \"
            \").replace(\"\\n\", \"
            \"));\n });\n });\n } */\n }","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {DockPanel, Widget} from '@lumino/widgets';\n\nimport {\n HistoryGraph,\n VisibleHistoryNode,\n HistoryGraphData,\n HistoryConfig\n} from '@noworkflow/history';\n\nimport {json, makeid} from '@noworkflow/utils';\n\nimport {TrialGraphWidget} from './trial_graph';\nimport {DiffGraphWidget} from './diff_graph';\nimport {NowVisPanel} from '../nowpanel';\nimport {TrialInfoWidget} from '../info/trial_info';\nimport {DiffInfoWidget} from '../info/diff_info';\nimport {ConfigWidget} from '../config_widget';\nimport {AnnontationWidget} from '../annotation_widget';\n\nimport { functionDiffWindow } from './function_diff';\n\nimport * as fs from 'file-saver';\nimport { instance } from \"@viz-js/viz\";\ndeclare var require: any;\nconst pl = require(\"tau-prolog\");\nconst svgPanZoom = require(\"svg-pan-zoom\"); \"svg-pan-zoom\";\n\nexport\nclass HistoryWidget extends Widget {\n\n name: string;\n expId: string;\n cls: string;\n graph: HistoryGraph;\n d3node: d3_Selection;\n config: ConfigWidget;\n annontationWidget: AnnontationWidget;\n rightClickMenu: d3_Selection;\n modal: d3_Selection;\n modalBody: d3_Selection;\n functionDiffWindow = functionDiffWindow;\n\n static url(script = \"*\", execution = \"*\", summarize=false) {\n return (\"trials.json\"\n + \"?script=\" + encodeURIComponent(script)\n + \"&execution=\" + encodeURIComponent(execution)\n + \"&summarize=\" + (summarize? \"1\" : \"0\")\n )\n }\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let content = document.createElement('div');\n node.appendChild(content);\n let d3node = d3_select(content);\n\n let d3content = d3node.append('div')\n .classed('history-content', true)\n\n let filterDiv = d3content.append(\"div\")\n //let filterDiv = form.insert(\"div\", \":first-child\")\n .classed(\"filter\", true)\n .classed(\"hide-toolbar\", true);\n\n let filterInternal = filterDiv.append(\"div\")\n .classed(\"internal\", true);\n let scriptOptions = filterInternal.append(\"select\")\n .attr(\"name\", \"script\")\n .classed(\"select-style script-options\", true);\n\n scriptOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Scripts\");\n\n let executionOptions = filterInternal.append(\"select\")\n .attr(\"name\", \"execution\")\n .classed(\"select-style exec-selection\", true)\n\n executionOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Statuses\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"finished\")\n .text(\"Finished Trials\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"unfinished\")\n .text(\"Unfinished Trials\");\n executionOptions.append(\"option\")\n .attr(\"value\", \"backup\")\n .text(\"Backup Trials\");\n\n let summarize = filterInternal.append(\"div\")\n .classed(\"graph-attr\", true);\n\n summarize.append(\"input\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"summarize\")\n .attr(\"value\", \"\")\n .attr(\"checked\", false)\n .classed(\"summarize\", true)\n .attr(\"id\", \"history-summarize\")\n\n summarize.append(\"label\")\n .attr(\"for\", \"history-summarize\")\n .attr(\"title\", \"Summarize History\")\n .text(\"Summarize\")\n\n let filterReload = filterInternal.append(\"a\")\n .attr(\"href\", \"#\")\n .classed(\"link-button reload-button\", true)\n\n filterReload.append('i')\n .classed(\"fa fa-refresh\", true);\n\n filterReload.append('span')\n .text('Reload');\n\n d3content.append('div')\n .classed('sub-content', true);\n\n return node;\n }\n\n constructor(config: ConfigWidget, name: string, cls: string, expId: string,annontationWidget:AnnontationWidget) {\n super({ node: HistoryWidget.createNode() });\n this.expId = expId;\n this.config = config;\n this.annontationWidget = annontationWidget;\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".script-options\").property(\"value\"),\n this.d3node.select(\".exec-selection\").property(\"value\"),\n this.d3node.select(\".summarize\").property(\"checked\"),\n )\n })\n this.rightClickMenu = this.d3node.append(\"div\")\n .classed(\"dropdown-menu dropdown-menu-sm\", true)\n .attr(\"id\", \"context-menu\")\n .attr(\"selected-trial\", \"\")\n .style(\"display\", \"block\");\n this.buildModal(this.node);\n this.buildRightClickMenu();\n\n //this.setFlag(Widget.Flag.DisallowLayout);\n this.addClass('content');\n this.addClass('trial-widget');\n this.title.label = name;\n this.title.closable = false;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n }\n\n setGraph(data: HistoryGraphData, config: any={}) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new HistoryGraph(this.cls, sub, config);\n this.graph.load(data);\n }\n\n load(script = \"*\", execution = \"*\", summarize=false) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n\n json(\"History\", sub, HistoryWidget.url(script, execution, summarize), (data: HistoryGraphData) => {\n this.setGraph(data, {\n width: this.node.getBoundingClientRect().width - 24,\n height: this.node.getBoundingClientRect().height - 24,\n customCtrlClick: (g: HistoryGraph, d: VisibleHistoryNode) => {\n var redTrial = g.state.selectedNode;\n if (redTrial == null) {\n return true;\n }\n var greenTrial = d;\n let diffGraphWidget = new DiffGraphWidget(\n \"Diff \" + redTrial.display + \"-\" + greenTrial.display,\n \"diff-\" + redTrial.title + \"-\" + greenTrial.title + makeid(),\n redTrial.title, greenTrial.title, this.functionDiffWindow, (this.parent as NowVisPanel)\n );\n diffGraphWidget.d3node.append(\"span\")\n .text(\"Ctrl+(left click) on a function overlap to see the functions' diff\")\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none')\n .lower();\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n\n if (this.config.showInfo()) {\n let diffInfoWidget = new DiffInfoWidget(redTrial.display, greenTrial.display, redTrial.title, greenTrial.title);\n parentDock.addInfoWidget(diffInfoWidget);\n parentDock.activateWidget(diffInfoWidget);\n }\n\n if (this.config.showTrial()) {\n parentDock.addGraphWidget(diffGraphWidget);\n parentDock.activateWidget(diffGraphWidget);\n diffGraphWidget.load(\n this.config.graphType(),\n this.config.useCache()\n );\n }\n return true;\n },\n customWindowTabCommand: (trialIdSimplified : string, windowId : string, command: string)=>{\n \n let trialExportWidget = new Widget();\n trialExportWidget.title.label = command + \" trial \" + trialIdSimplified;\n trialExportWidget.title.closable = true;\n trialExportWidget.id = windowId;\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n parentDock.addGraphWidget(trialExportWidget);\n parentDock.activateWidget(trialExportWidget);\n return true;\n \n },\n customSelectNode: (g: HistoryGraph, d: VisibleHistoryNode) => {\n let trialGraphWidget = new TrialGraphWidget(\"Trial \" + d.display, \"trial-\" + d.title + makeid(), d.title, d.title);\n let parentDock: NowVisPanel = this.parent as NowVisPanel;\n\n if (this.config.showInfo()) {\n let trialInfoWidget = new TrialInfoWidget(d,this.annontationWidget);\n parentDock.addInfoWidget(trialInfoWidget);\n parentDock.activateWidget(trialInfoWidget);\n }\n if (this.config.showTrial()) {\n parentDock.addGraphWidget(trialGraphWidget);\n parentDock.activateWidget(trialGraphWidget);\n trialGraphWidget.load(\n this.config.graphType(),\n this.config.useCache()\n );\n }\n return true;\n },\n customForm: (graph: HistoryGraph, form: d3_Selection) => {\n // Toggle Tooltips\n let filterDiv = this.d3node.select(\".history-content .filter\");\n\n let scriptOptions = filterDiv.select(\".script-options\");\n\n let currentScript = scriptOptions.property(\"value\");\n\n scriptOptions.html(\"\");\n\n scriptOptions.append(\"option\")\n .attr(\"value\", \"*\")\n .text(\"All Scripts\");\n\n for (let script of data.scripts) {\n scriptOptions.append(\"option\")\n .attr(\"value\", script)\n .text(script);\n }\n\n scriptOptions.property(\"value\", currentScript);\n\n let filterToggle = form.append(\"input\")\n .attr(\"id\", \"history-\" + graph.graphId + \"-toolbar-filter-check\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-filter-check\")\n .attr(\"value\", \"show\")\n .property(\"checked\", filterDiv.classed('visible'))\n .on(\"change\", () => {\n let visible = filterToggle.property(\"checked\");\n filterToggleI\n .classed('fa-circle-o', visible)\n .classed('fa-circle', !visible);\n filterDiv\n .classed('visible', visible)\n .classed('show-toolbar', visible)\n .classed('hide-toolbar', !visible)\n });\n let filterLabel = form.append(\"label\")\n .attr(\"for\", \"history-\" + graph.graphId + \"-toolbar-filter-check\")\n let filterToggleI = filterLabel.append(\"i\")\n .classed('fa', true)\n .classed(\"fa-circle\", !filterDiv.classed('visible'))\n .classed(\"fa-circle-o\", filterDiv.classed('visible'))\n\n \n // Push trial\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-push-trial\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Push trial\")\n .on(\"click\", () => this.buildPushCommand(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-cloud-upload\", true)\n\n // Pull trial\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-pull-trial\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Pull trial\")\n .on(\"click\", () => this.buildPullCommand(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-cloud-download\", true)\n\n // Add remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-add-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Add remote\")\n .on(\"click\", () => this.buildAddRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-plus-circle\", true)\n\n // Edit remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-edit-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Edit remote\")\n .on(\"click\", () => this.buildEditRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-pencil-square\", true)\n\n // Delete remote\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + graph.graphId + \"-delete-remote\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Delete remote\")\n .on(\"click\", () => this.buildDeleteRemote(this.modal, this.modalBody))\n .append(\"i\")\n .classed(\"fa fa-trash\", true)\n\n \n }\n });\n });\n } \n\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (!this.graph) {\n return;\n }\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n\n private buildModal(div: any) {\n this.modal = d3_select(div).append(\"div\")\n .classed(\"modal fade\", true)\n .attr(\"id\", \"commandsModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"commandsModalTitle\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"true\");\n\n let modalContent = this.modal.append(\"div\")\n .classed(\"modal-dialog\", true)\n .attr(\"role\", \"document\")\n .append(\"div\").classed(\"modal-content\", true); //modal content\n\n let modalHeader = modalContent.append(\"div\")\n .classed(\"modal-header\", true)//modal header\n modalHeader.append(\"h5\")\n .classed(\"modal-title\", true)\n .attr(\"id\", \"exampleModalTitle\")\n .text(\"Change Temporary Title\") //modal title\n\n this.modalBody = modalContent.append(\"div\")\n .classed(\"modal-body\", true);\n\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"type\", \"button\").text(\"x\").style(\"float\", \"right\")\n .on(\"click\", () => cleanModalBodyAndClose(this.modal, this.modalBody)); //close modal\n }\n\n private buildRightClickMenu() {\n\n //let modal = document.getElementById(\"commandsModal\");\n this.buildRestoreTrialCommand(this.modal, this.modalBody);\n this.buildRestoreFileCommand(this.modal, this.modalBody);\n this.buildProvCommand();\n this.buildExportPrologCommand(this.modal, this.modalBody)\n this.buildDataflowCommand(this.modal, this.modalBody)\n this.buildTrialFunctionDiffCommand(this.modal, this.modalBody, this.functionDiffWindow)\n }\n\n buildTrialFunctionDiffCommand(modal: d3_Selection,\n modalBody: d3_Selection, functionDiffWindow : any) {\n\n let self = this\n\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"trial-function-diff-option\")\n .text(\"function activation diff\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\") ?? \"\";\n\n buildTrialFunctionDiffModal(modal, modalBody, parent, trialId, functionDiffWindow, self);\n });\n\n };\n\n buildDataflowCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"dataflow-option\")\n .text(\"export dataflow\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\") ?? \"\";\n\n buildDataflowModal(modal, modalBody, parent, self.graph.config, trialId);\n });\n\n };\n\n buildExportPrologCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"export-option\")\n .text(\"export prolog\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element\n let trialId = parent.getAttribute(\"selected-trial\");\n let exportUrl = \"/commands/export/\" + trialId;\n let exportWindowId = \"Export window \" + trialId;\n\n\n buildExportPrologModal(modal, modalBody, exportUrl, self.graph.config, parent, exportWindowId, trialId);\n\n });\n }\n\n buildProvCommand() {\n let self = this;\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"prov-option\")\n .text(\"export prov\")\n .on(\"click\", function () {\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n let provWindowId = \"Prov window \" + trialId;\n\n if (document.getElementById(provWindowId)) return;\n\n\n let provUrl = \"/commands/prov/\" + trialId;\n\n\n fetch(provUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n self.graph.config.customWindowTabCommand(parent.getAttribute(\"selected-trial-simplified\")!, provWindowId, \"Prov\");\n let provWindow = d3_select(document.getElementById(provWindowId));\n\n\n if (response.status == 200) {\n provWindow.style(\"overflow-y\", \"auto\");\n let prov_lines = json.prov.split(\"\\n\");\n for (var line in prov_lines) provWindow.append(\"p\").text(prov_lines[line]);\n\n } else {\n window.alert(\"No prov to export\");\n }\n\n });\n });\n });\n }\n\n private buildRestoreFileCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"restore-file-option\")\n .text(\"restore file\")\n .on(\"click\", function () {\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n\n let trialFiles: string[];\n\n fetch(\"/files/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n trialFiles = json.files\n\n changeTitle(parent, \"Restore file trial \")\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n //createFormTextInput(form, \"restoreFile\", \"Restore file\", \"restoreFileHelp\", \"Write the name of the file you want to restore\");\n createFormSelectInput(form, \"restoreFile\", \"Restore file\", 0, trialFiles.length - 1, 0, \"\", \"\", trialFiles);\n createFormTextInput(form, \"restoreFileID\", \"File identifier\", \"restoreIDHelp\", \"(optional) Identifies the file to be restored. It can be either the timestamp, the number of access, or the code hash\");\n createFormTextInput(form, \"restoreFileTarget\", \"Target file path\", \"restoreTargetHelp\", \"(optional) specifies the target path of the restored file\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).attr(\"type\", \"submit\").text(\"restore trial\");\n\n }\n\n submitButton?.on(\"click\", function () {\n //let fileToRestore : string | boolean = getTextInputFormByID(\"restoreFile\", true);\n let fileToRestore = (document.getElementById(\"restoreFile\")).selectedOptions[0].value;\n let fileIdentifier: string | boolean = getTextInputFormByID(\"restoreFileID\", true);\n let targetPath: string | boolean = getTextInputFormByID(\"restoreFileTarget\", false);\n\n let restoreUrl = \"/commands/restore/file/\" + trialId + \"/\" + fileToRestore + \"/\" + fileIdentifier + \"/\" + targetPath;\n\n if (fileToRestore) getRestoreOrCollabCommand(restoreUrl, form, modalBody);\n else addAlert(modalBody, \"alert-danger\", \"Error!\", \"The file's name is empty\");\n\n });\n });\n\n });\n });\n }\n\n private buildRestoreTrialCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n this.rightClickMenu.append(\"a\")\n .classed(\"dropdown-item\", true)\n .attr(\"href\", \"#\")\n .attr(\"id\", \"restore-trial-option\")\n .text(\"restore trial\")\n .on(\"click\", function () {\n\n let parent = this.parentNode as Element;\n let trialId = parent.getAttribute(\"selected-trial\");\n changeTitle(parent, \"Restore trial \");\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormCheckInput(form, \"restoreSkipScript\", \"Skip Script\");\n createFormCheckInput(form, \"restoreSkipLocalModules\", \"Skip Local Modules\");\n createFormCheckInput(form, \"restoreSkipFileAccess\", \"Skip File Access\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).attr(\"type\", \"submit\").text(\"restore trial\");\n\n }\n\n submitButton?.on(\"click\", function () {\n let skipScript = (document.getElementById(\"restoreSkipScript\")).checked;\n let skipModules = (document.getElementById(\"restoreSkipLocalModules\")).checked;\n let skipFileAccess = (document.getElementById(\"restoreSkipFileAccess\")).checked;\n\n let restoreUrl = \"/commands/restore/trial/\" + trialId + \"/\" + skipScript + \"/\" + skipModules + \"/\" + skipFileAccess;\n\n getRestoreOrCollabCommand(restoreUrl, form, modalBody);\n\n });\n });\n }\n\n private buildAddRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Add new remote\";\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormTextInput(form, \"inputAddRemoteUrl\", \"Remote URL: \");\n createFormTextInput(form, \"inputAddRemoteName\", \"Remote name: \");\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Add remote\");\n }\n\n submitButton?.on(\"click\", function () {\n let remoteURL = (document.getElementById(\"inputAddRemoteUrl\")).value;\n let remoteName = (document.getElementById(\"inputAddRemoteName\")).value;\n\n let addRemoteURL = \"/collab/remotes/add/\" + remoteName + \"/\" + remoteURL;\n\n fetch(addRemoteURL, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then((json) => {\n form.remove();\n if (response.status == 200) {\n addAlert(modalBody, \"alert-success\", \"Success!\", json.terminal_text);\n } else {\n addAlert(modalBody, \"alert-danger\", \"Error!\", \"\");\n }\n\n });\n });\n\n });\n }\n\n private buildDeleteRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"editDeleteServerUrlId\", \"Delete remote\", \"delete\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildEditRemote(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"editRemoteServerUrlId\", \"Edit remote\", \"edit\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildPushCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"pushServerUrlId\", \"Push experiment\", \"push\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private buildPullCommand(modal: d3_Selection,\n modalBody: d3_Selection) {\n\n fetch(\"/collab/remotes/getall\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then(async (json) => {\n if (response.status == 200) {\n this.executeCollabCommand(modal, modalBody, \"pullServerUrlId\", \"Pull experiment\", \"pull\", json.remotes);\n } else {\n console.log(\"Failed to get remotes\");\n }\n\n });\n });\n\n }\n\n private executeCollabCommand(modal: d3_Selection, modalBody: d3_Selection, serverUrlId: string, title: string, command: string, remotes: any) {\n document.getElementById(\"exampleModalTitle\")!.textContent = title;\n\n let submitButton;\n let form: d3_Selection;\n\n showModal(modal);\n\n let select: d3_Selection;\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n form.append(\"label\").attr(\"for\", \"remotes\").text(\"Remote: \");\n\n select = form.append(\"select\").attr(\"name\", \"remotes\").attr(\"id\", \"remotes\");\n for (let i = 0; i < remotes.length; i++) {\n select.append(\"option\").attr(\"value\", remotes[i].server_url).text(remotes[i].name);\n }\n\n form.append(\"br\");\n form.append(\"span\").text(\"Remote URL: \");\n let remoteURLText = form.append(\"span\").attr(\"id\", serverUrlId + \"Remote\").text(remotes[0].server_url);\n select.on(\"change\", () => {\n remoteURLText.text(select.node()!.value);\n })\n\n form.append(\"br\");\n if (command == \"edit\") {\n createFormTextInput(form, \"inputEditRemoteName\", \"Remote new name: \");\n }\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(title);\n }\n\n submitButton?.on(\"click\", function () {\n let serverUrl = select.node()!.value;\n\n let collabCommandUrl = \"/commands/\" + command + \"/\" + serverUrl;\n if (command == \"edit\") collabCommandUrl = \"/collab/remotes/edit/\" + (document.getElementById(\"inputEditRemoteName\")).value + \"/\" + serverUrl;\n if (command == \"delete\") collabCommandUrl = \"/collab/remotes/delete/\" + serverUrl;\n\n getRestoreOrCollabCommand(collabCommandUrl, form, modalBody);\n\n });\n }\n\n}\n\nfunction buildTrialFunctionDiffModal(modal: d3_Selection, modalBody: d3_Selection,\n parent: Element, trialId: string, functionDiffWindow : any, self : any) {\n\n let secondTrialId : string;\n changeTitle(parent, \"Function activation diff trial\")\n //document.getElementById(\"exampleModalTitle\")!.textContent = \"Function activation diff trial \" + trialId;\n\n fetch(\"/getFunctionActivations/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n showModal(modal);\n\n if (modalBody) {\n\n //scrollableModal(modalBody);\n\n modalBody.append(\"span\").text(\"Select this trial's activation: \");\n let firstTrialSelectActivation = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"firstTrialFunctionActivations\").attr(\"id\", \"firstTrialFunctionActivations\").style(\"max-width\", \"480px\");\n\n for(let activation in json[\"function_activations\"]){\n firstTrialSelectActivation.append(\"option\").attr(\"value\", json[\"function_activations\"][activation].id).text(JSON.stringify(json[\"function_activations\"][activation]).replace(/{|}/g,\"\").substring(0, 70));\n } \n\n modalBody.append(\"br\");\n\n modalBody.append(\"span\").text(\"Select the other trial: \");\n\n let secondTrialSelect = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"secondTrialSelect\").attr(\"id\", \"secondTrialSelect\");\n\n fetch(\"/getAllTrialsIdsAndTags\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n for(let trial in json){\n secondTrialSelect.append(\"option\").attr(\"value\", json[trial].id).text(json[trial].tag);\n }\n\n modalBody.append(\"br\");\n\n modalBody.append(\"span\").text(\"Select the other trial's activation: \");\n\n let secondTrialSelectActivation = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"secondTrialFunctionActivations\").attr(\"id\", \"secondTrialFunctionActivations\").style(\"max-width\", \"480px\");\n\n getSecondTrialFunctionActivations(secondTrialSelectActivation);\n\n secondTrialSelect.on(\"change\",()=>{\n\n getSecondTrialFunctionActivations(secondTrialSelectActivation);\n\n });\n \n \n modalBody.append(\"br\");\n\n let submitButton = modalBody.append(\"button\").classed(\"btn btn-primary mb-2\", true).style(\"margin-top\", \"10px\").text(\"Confirm\");\n\n submitButton!.on(\"click\", function () {\n\n let firstTrialFunctionId = (document.getElementById(\"firstTrialFunctionActivations\")).selectedOptions[0].value;\n let secondTrialFunctionId = (document.getElementById(\"secondTrialFunctionActivations\")).selectedOptions[0].value;\n \n let url = \"/commands/diff/\"+ trialId +\"/\"+ firstTrialFunctionId + \"/\"+ secondTrialId + \"/\" + secondTrialFunctionId;\n\n fetch(url, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n \n response.json().then((json) => {\n functionDiffWindow(json, \"Diff trial \" + trialId + \" activation_id \" + firstTrialFunctionId + \" trial \" + secondTrialId + \" activation_id \" + secondTrialFunctionId, self.parent as NowVisPanel);\n });\n });\n \n cleanModalBodyAndClose(modal, modalBody);\n \n \n \n });\n\n })});\n\n \n\n }\n\n });\n });\n\n\n\n function getSecondTrialFunctionActivations(secondTrialSelectActivation: d3_Selection) {\n secondTrialId = (document.getElementById(\"secondTrialSelect\")).selectedOptions[0].value;\n\n fetch(\"/getFunctionActivations/\" + secondTrialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n\n secondTrialSelectActivation.html(\"\");\n\n for (let activation in json[\"function_activations\"]) {\n secondTrialSelectActivation.append(\"option\").attr(\"value\", json[\"function_activations\"][activation].id).text(JSON.stringify(json[\"function_activations\"][activation]).replace(/{|}/g, \"\").substring(0, 70));\n }\n\n });\n });\n }\n}\n\nfunction buildExportPrologModal(modal: d3_Selection, modalBody: d3_Selection, exportUrl: string, config: HistoryConfig, parent: Element, exportWindowId: string, trialId: string | null) {\n let submitButton;\n let form: d3_Selection;\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Prolog\";\n\n showModal(modal);\n\n if (modalBody) {\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n\n createFormCheckInput(form, \"exportProvRules\", \"Also exports inference rules\");\n createFormCheckInput(form, \"exportProvHideTimestamps\", \"Hide timestamps\");\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Generate prolog\");\n\n }\n\n submitButton?.on(\"click\", () => {\n let inferenceRules = (document.getElementById(\"exportProvRules\")).checked;\n let hideTimestamps = (document.getElementById(\"exportProvHideTimestamps\")).checked;\n\n exportUrl += \"/\" + inferenceRules + \"/\" + hideTimestamps;\n\n buildExportPrologTab(exportUrl, config, parent, exportWindowId, trialId);\n cleanModalBodyAndClose(modal, modalBody);\n });\n}\n\nfunction buildExportPrologTab(exportUrl: string, config: HistoryConfig, parent: Element, exportWindowId: string, trialId: string | null) {\n\n if (document.getElementById(exportWindowId)) {\n window.alert(\"Close trial \" + trialId + \" prolog tab before generating a new prolog\");\n return;\n }\n\n\n\n fetch(exportUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response: any) => {\n response.json().then((json: any) => {\n\n if (response.status == 200) {\n\n\n config.customWindowTabCommand(parent.getAttribute(\"selected-trial-simplified\")!, exportWindowId, \"Prolog\");\n let exportWindow = d3_select(document.getElementById(exportWindowId));\n\n let form: d3_Selection = (exportWindow.append(\"form\").attr(\"onsubmit\", \"return false;\") as d3_Selection)\n .append(\"div\").classed(\"form-row\", true);\n createFormTextInput(form, \"exportPrologProgram\" + trialId, \"Prolog\").classed(\"col-7\", true);\n createFormTextInput(form, \"exportPrologQuery\" + trialId, \"Query\").classed(\"col\", true);\n\n let submitButton = form.append(\"div\").classed(\"col-auto\", true).style(\"padding-top\", \"5vh\")\n .append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Execute Query\");\n\n\n (document.getElementById(\"exportPrologProgram\" + trialId))!.value = json.export;\n\n let prologSession = pl.create(1000);\n\n let answerCallback = (answer: any, answerString: string) => {\n if (answer == false) {\n\n let answerCardTextId = \"Answers prolog card text \" + trialId;\n let answerCardText = document.getElementById(answerCardTextId) ? d3_select(document.getElementById(answerCardTextId)) : null;\n if (answerCardText == null) {\n let answerWindow = exportWindow.append(\"div\");\n answerWindow.classed(\"card\", true).append(\"div\").classed(\"card-header\", true).text(\"Answers\");\n answerCardText = answerWindow.append(\"div\").classed(\"card-body\", true)\n .append(\"p\").classed(\"card-text\", true).attr(\"id\", answerCardTextId)\n .style(\"overflow-y\", \"auto\").style(\"max-height\", \"35vh\");\n }\n\n answerCardText!.html(answerString);\n return;\n }\n answerString += prologSession.format_answer(answer).toString() + \"
            \";\n\n prologSession.answer((answer: any) => answerCallback(answer, answerString));\n };\n\n submitButton.on(\"click\", () => {\n let prologProgram = getTextInputFormByID(\"exportPrologProgram\" + trialId);\n let userQuery = getTextInputFormByID(\"exportPrologQuery\" + trialId);\n if (prologProgram && userQuery) {\n\n prologSession.consult(prologProgram, {\n success: () => {\n console.log(\"Prolog consult success\");\n prologSession.query(userQuery, {\n success: () => {\n prologSession.answer((answer: any) => answerCallback(answer, \"\"));\n },\n error: () => {\n console.log(\"Erro query\");\n }\n });\n },\n error: () => {\n console.log(\"Prolog consult error\");\n }\n });\n }\n\n\n });\n\n } else {\n console.log(\"Export error\");\n }\n\n });\n });\n}\n\nfunction scrollableModal(modalBody: d3_Selection) {\n let modalDialog = (document.getElementsByClassName(\"modal-dialog\") as HTMLCollectionOf)[0];\n modalDialog.style.overflowY = \"initial\";\n modalDialog.style.maxHeight = \"85%\";\n modalBody.style(\"overflow-y\", \"auto\").style(\"height\", \"80vh\");\n}\n\nfunction getDataflow(response: any, config: HistoryConfig, parent: Element, dataflowWindowId: string, dataflowUrl: string) {\n response.json().then((json: any) => {\n if (response.status == 200) {\n\n let trialIdSimplified = parent.getAttribute(\"selected-trial-simplified\")!;\n\n config.customWindowTabCommand(trialIdSimplified, dataflowWindowId, \"Dataflow\");\n console.log(json.dataflow);\n\n instance().then(viz => {\n const dataflowWindow = document.getElementById(dataflowWindowId);\n\n // Download SVG Button, excluding hint, and excluding checkbox\n dataflowButtons(dataflowWindow, dataflowWindowId, \"Click on a function call, then (Ctrl or Shift)+click on another one to exclude prior provenience\", json.dataflow)\n\n let selectedNode: Element | undefined;\n let selectedEdge: Element | undefined;\n\n //dataflowWindow!.style.overflowY = dataflowWindow!.style.overflowX = \"auto\";\n let svgElement = viz.renderSVGElement(json.dataflow);\n dataflowWindow!.appendChild(svgElement);\n svgPanZoom(svgElement, {preventMouseEventsDefault: false, dblClickZoomEnabled: false});\n\n for (let nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) {\n\n let presentNode: Element | undefined = svgElement.children[0].children[0].children[nodeIndex];\n if (presentNode.getAttribute(\"class\") == \"node\" && presentNode.children[1].tagName.toLowerCase() == \"polygon\") {\n let presentNodeSelection = d3_select(presentNode);\n\n presentNodeSelection.style(\"cursor\", \"pointer\");\n\n presentNodeSelection.on(\"click\", (event: MouseEvent) => {\n\n if (selectedNode) { selectedNode.children[1].setAttribute(\"stroke\", \"black\"); }\n\n if (selectedNode && (event.ctrlKey || event.shiftKey)) {\n deletePriorNodes(selectedNode, presentNode!, viz, dataflowUrl, config, trialIdSimplified, dataflowWindowId);\n } else {\n selectedNode = svgElement.children[0].children[0].children[nodeIndex];\n selectedNode.children[1].setAttribute(\"stroke\", \"red\");\n }\n });\n } else if (presentNode.getAttribute(\"class\") == \"edge\" && presentNode.children[1].tagName.toLowerCase() == \"path\"){\n let presentNodeSelection = d3_select(presentNode);\n\n presentNodeSelection.style(\"cursor\", \"pointer\");\n\n presentNodeSelection.on(\"click\",()=>{\n if (selectedEdge) {selectedEdge.children[1].setAttribute(\"stroke\", \"black\");}\n selectedEdge = svgElement.children[0].children[0].children[nodeIndex];\n selectedEdge.children[1].setAttribute(\"stroke\", \"red\");\n });\n }\n }\n });\n\n\n } else {\n console.log(\"Dataflow error\");\n }\n\n });\n\n}\n\nfunction checkboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow: HTMLElement) {\n\n let dataflowWindowD3Select = d3_select(dataflowWindow);\n let checkboxID = dataflowWindow.getAttribute(\"id\") + \"OpenNewWindowOption\";\n \n dataflowWindowD3Select.append(\"input\")\n .attr(\"id\", checkboxID)\n .attr(\"type\", \"checkbox\");\n\n dataflowWindowD3Select.append(\"label\")\n .attr(\"for\", checkboxID)\n .text(\"Don't open dataflow with excluded provenance in a new tab\")\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n}\n\nfunction excludePriorProvenanceHint(dataflowWindow: HTMLElement | null, text : string) {\n d3_select(dataflowWindow).append(\"div\").append(\"div\")\n .text(text)\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n}\n\nfunction chooseDataflowExcludedProvenanceWindowId(presentWindowId : string, newWindowId : string){\n if((document.getElementById(presentWindowId + \"OpenNewWindowOption\") as HTMLInputElement).checked) return presentWindowId;\n return newWindowId;\n}\n\nfunction deletePriorNodes(selectedNode: Element, presentNode: Element, viz: any, dataflowUrl: string,\n config: HistoryConfig, trialIdSimplified: string, presentWindowId: string) {\n\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\"));\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\")) + \"/true/\";\n\n let selectedNodeEvaluationTitle = selectedNode.children[0].innerHTML;\n let presentNodeOrderEvaluationTitle = presentNode.children[0].innerHTML;\n\n let firstEvaluationOrder = Number(selectedNodeEvaluationTitle.replace(\"e_\", \"\"));\n let lastEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n if (firstEvaluationOrder > lastEvaluationOrder) {\n lastEvaluationOrder = firstEvaluationOrder;\n firstEvaluationOrder = Number(presentNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n }\n\n let dataflowUrlLastEvaluation = dataflowUrl + lastEvaluationOrder;\n let dataflowUrlFirstEvaluation = dataflowUrl + firstEvaluationOrder;\n\n let excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(presentWindowId, \"Dataflow excluding prior \" + presentNodeOrderEvaluationTitle + \" \" + selectedNodeEvaluationTitle\n + \" window \" + trialIdSimplified, trialIdSimplified, config);\n\n excludingProvenanceWindow!.textContent = \"Loading...\";\n\n fetch(dataflowUrlLastEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseLastEvaluation: any) => {\n responseLastEvaluation.json().then((jsonLastEvaluation: any) => {\n let dataflowLastEvaluation = jsonLastEvaluation.dataflow;\n fetch(dataflowUrlFirstEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseFirstEvaluation: any) => {\n responseFirstEvaluation.json().then((jsonFirstEvaluation: any) => {\n let dataflowFirstEvaluation = jsonFirstEvaluation.dataflow;\n\n dataflowAMinusDataflowB(dataflowLastEvaluation, dataflowFirstEvaluation, firstEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationOrder);\n\n });\n });\n });\n });\n\n}\n\nfunction getDataflowWindowExcludeSomeProvenance(presentWindowId: string, newWindowId: string, trialIdSimplified: string, config: HistoryConfig) {\n let excludingProvenanceWindowId = chooseDataflowExcludedProvenanceWindowId(presentWindowId, newWindowId);\n\n let excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId);\n\n if (!excludingProvenanceWindow) {\n\n config.customWindowTabCommand(trialIdSimplified, excludingProvenanceWindowId, \"Dataflow excluding some provenance\");\n\n excludingProvenanceWindow = document.getElementById(excludingProvenanceWindowId);\n\n }\n return excludingProvenanceWindow;\n}\n\nfunction dataflowAMinusDataflowB(dataflowA: any, dataflowB: any, selectedEvaluationOrder: number, excludingProvenanceWindow: HTMLElement | null, viz: any, dataflowUrl: string, config : HistoryConfig, lastEvaluationId : number) {\n //SET MINUS OPERATION A-B \"The set A−B consists of elements that are in A but not in B. For example if A={1,2,3} and B={3,5}, then A−B={1,2}.\"\n let linesDataflowA = dataflowA.split(\"\\n\");\n let linesDataflowB = dataflowB.split(\"\\n\");\n let newDataflow = linesDataflowA.slice(0);\n\n removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB, newDataflow, selectedEvaluationOrder);\n\n let dataflowIsAligned = addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow, selectedEvaluationOrder, linesDataflowA);\n\n removesDeletedEvaluationsFromAligment(dataflowIsAligned, newDataflow);\n\n console.log(\"------\");\n let newDataflowString = newDataflow.join(\"\\n\");\n console.log(newDataflowString);\n console.log(\"------\");\n\n excludingProvenanceWindow!.textContent = \"\";\n\n dataflowButtons(excludingProvenanceWindow, excludingProvenanceWindow!.getAttribute(\"id\")!, \"(Ctrl or Shift)+click on a function call to exclude prior provenience\", newDataflowString)\n\n let svgElement = viz.renderSVGElement(newDataflowString);\n excludingProvenanceWindow!.appendChild(svgElement);\n svgPanZoom(svgElement, {preventMouseEventsDefault: false, dblClickZoomEnabled: false});\n\n addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId);\n \n}\n\nfunction addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow(svgElement: any, viz: any, dataflowUrl: string, newDataflowString: any, excludingProvenanceWindow: HTMLElement | null, config : HistoryConfig, lastEvaluationId : number) {\n let selectedEdge : Element | undefined;\n \n for (let nodeIndex = 0; nodeIndex < svgElement.children[0].children[0].children.length; nodeIndex++) {\n\n let selectedNode: Element = svgElement.children[0].children[0].children[nodeIndex];\n if (selectedNode.getAttribute(\"class\") == \"node\" && selectedNode.children[1].tagName.toLowerCase() == \"polygon\") {\n\n let selectedNodeSelection = d3_select(selectedNode);\n \n selectedNodeSelection.style(\"cursor\", \"pointer\");\n \n selectedNodeSelection.on(\"click\", (event: MouseEvent) => {\n\n if (event.ctrlKey || event.shiftKey) deletePriorNodesAfterDeletingPriorNodes(selectedNode, viz, dataflowUrl, newDataflowString, excludingProvenanceWindow, config, lastEvaluationId);\n\n });\n } else if (selectedNode.getAttribute(\"class\") == \"edge\" && selectedNode.children[1].tagName.toLowerCase() == \"path\"){\n\n let selectedNodeSelection = d3_select(selectedNode);\n\n selectedNodeSelection.style(\"cursor\", \"pointer\");\n\n selectedNodeSelection.on(\"click\",()=>{\n if (selectedEdge) {selectedEdge.children[1].setAttribute(\"stroke\", \"black\");}\n selectedEdge = svgElement.children[0].children[0].children[nodeIndex];\n selectedEdge!.children[1].setAttribute(\"stroke\", \"red\");\n });\n }\n }\n}\n\nfunction deletePriorNodesAfterDeletingPriorNodes(selectedNode: Element, viz: any, dataflowUrl: string, newDataflowString: any, excludingProvenanceWindow: HTMLElement | null, config : HistoryConfig, lastEvaluationId : number) {\n\n let selectedNodeOrderEvaluationTitle = selectedNode.children[0].innerHTML;\n let selectedEvaluationOrder = Number(selectedNodeOrderEvaluationTitle.replace(\"e_\", \"\"));\n\n if(lastEvaluationId == selectedEvaluationOrder){\n window.alert(\"You can't remove everything.\")\n return undefined;\n } \n \n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\"));\n dataflowUrl = dataflowUrl.substring(0, dataflowUrl.lastIndexOf(\"/\")) + \"/true/\";\n\n \n\n let dataflowUrlPresentEvaluation = dataflowUrl + selectedEvaluationOrder;\n\n\n let excludingProvenanceWindowId = excludingProvenanceWindow?.getAttribute(\"id\");\n excludingProvenanceWindow = getDataflowWindowExcludeSomeProvenance(excludingProvenanceWindowId!, excludingProvenanceWindowId+\"OneMore\", \"\", config);//TODO get simplifiedtrialid from wxcludingprovenancewindow\n\n excludingProvenanceWindow!.textContent = \"Loading...\";\n\n fetch(dataflowUrlPresentEvaluation, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((responseLastEvaluation: any) => {\n responseLastEvaluation.json().then((json: any) => {\n\n let selectedEvaluationDataflow = json.dataflow;\n\n dataflowAMinusDataflowB(newDataflowString, selectedEvaluationDataflow, selectedEvaluationOrder, excludingProvenanceWindow, viz, dataflowUrl, config, lastEvaluationId);\n\n });\n });\n}\n\nfunction removesDeletedEvaluationsFromAligment(dataflowIsAligned: boolean, newDataflow: any) {\n if (dataflowIsAligned) {\n\n let evaluations: any = [];\n\n for (let lineIndex = 3; lineIndex < newDataflow.length; lineIndex++) {\n let line = newDataflow[lineIndex];\n if (line.includes(\"label\")) evaluations.push(line.replace(/\\[[^\\]]*?\\];/, \"\").split(\" \")[4].trim());\n\n else if (line.includes(\"{rank=\")) {\n let alignedEvaluations = line.split(\" \");\n\n for (let alignedEvalIndex = 5; alignedEvalIndex < alignedEvaluations.length; alignedEvalIndex++) {\n let alignedEval = alignedEvaluations[alignedEvalIndex].replace(\"}\\r\", \"\").trim();\n\n if (!evaluations.includes(alignedEval)) newDataflow[lineIndex] = newDataflow[lineIndex].replace(alignedEval, \"\");\n }\n }\n\n else if (line.includes(\"->\")) break;\n }\n }\n}\n\nfunction removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation(linesDataflowB: any, newDataflow: any, selectedEvaluationOrder: number) {\n for (let i = 3; i < linesDataflowB.length - 2; i++) {\n let indexOfDataflowLineToRemove;\n\n if (linesDataflowB[i].includes(\"->\") && linesDataflowB[i].includes(\"[\")) {\n\n let lineToRemove = linesDataflowB[i].replace(/\\[[^\\]]*\\]/, \"\");\n\n indexOfDataflowLineToRemove = newDataflow.findIndex((dataflowLine: string) => {\n return dataflowLine.replace(/\\[[^\\]]*\\]/, \"\") == lineToRemove;\n });\n\n\n } else indexOfDataflowLineToRemove = newDataflow.indexOf(linesDataflowB[i]);\n\n if (indexOfDataflowLineToRemove > -1 && (!linesDataflowB[i].includes(\"_\" + selectedEvaluationOrder + \" [\"))) newDataflow.splice(indexOfDataflowLineToRemove, 1);\n\n }\n}\n\nfunction addsDeletedNodeSettingsAndChecksIfDataflowIsAligned(newDataflow: any, selectedEvaluationOrder: number, linesDataflowA: any) {\n let tempArray: any[] = [];\n let isAligned = false;\n\n newDataflow.forEach((line: string) => {\n if (!isAligned && line.includes(\"{rank\")) isAligned = true;\n\n\n if (line.includes(\"->\")) {\n let evaluationWithoutSettings = line.split(\" \")[6];\n if (Number(evaluationWithoutSettings.replace(\"e_\", \"\").replace(\"a_\", \"\")) < selectedEvaluationOrder) { // TODO revise if firstEvaluationOrder is right\n let lineToAdd = linesDataflowA.find((string: string) => string.includes(evaluationWithoutSettings + \" [\"));\n if (newDataflow.indexOf(lineToAdd) < 0) tempArray.push(lineToAdd);\n }\n }\n });\n\n tempArray.forEach(item => newDataflow.splice(3, 0, item));\n\n return isAligned\n}\n\nfunction buildDataflowModal(modal: d3_Selection, modalBody: d3_Selection,\n parent: Element, config: HistoryConfig, trialId: string) {\n\n let submitButton;\n let evaluationList;\n let form: d3_Selection;\n document.getElementById(\"exampleModalTitle\")!.textContent = \"Dataflow\";\n\n fetch(\"/dataflow/evaluations/\" + trialId, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n evaluationList = json.evaluations;\n let selectedEvaluation: string | null;\n let dataflowTextInputEvaluation: HTMLSelectElement;\n\n showModal(modal);\n\n if (modalBody) {\n\n scrollableModal(modalBody);\n\n form = modalBody.append(\"form\").attr(\"onsubmit\", \"return false;\");\n createFormCheckInput(form, \"dataFlowShowType\", \"Show type nodes\");\n createFormCheckInput(form, \"dataFlowHideTimestamps\", \"Hide timestamps\");\n createFormCheckInput(form, \"dataFlowHideInternals\", \"Show variables and functions which name starts with a leading underscore\");\n createFormCheckInput(form, \"dataFlowHideNotCode\", \"Hide evaluations that aren't from the code\");\n createFormCheckInput(form, \"dataFlowActivationNames\", \"Display nodes with their activation names instead\");\n createFormCheckInput(form, \"dataFlowHideFunc\", \"Hide func type evaluations\");\n\n createFormSelectInput(form, \"dataflowShowAccesses\", \"Show file accesses\", 0, 4, 1, \"dataflowShowAccessesHelp\",\n \"(default: Shows each file once (hide external accesses))\",\n [\"Hides file accesses\", \"Shows each file once (hide external accesses)\", \"Shows each file once (show external accesses)\",\n \"Shows all accesses (except external accesses)\", \"Shows all accesses (including external accesses)\"]);\n\n createFormSelectInput(form, \"dataflowEvaluation\", \"Combine evaluation nodes\", 0, 2, 1, \"dataflowEvaluationHelp\",\n \"(default: Combines evaluation nodes by assignment)\",\n [\"Not combine evaluation nodes\", \"Combines evaluation nodes by assignment\", \"Combines evaluation nodes by value\"]);\n\n createFormSelectInput(form, \"dataflowGroup\", \"Align evalutions in the same column\", 0, 2, 0,\n \"dataflowGroupHelp\",\n \"(default: Does no align). With this option, all variables in a loop appear grouped, reducing the width of the graph. It may affect the graph legibility. The alignment is independent for each activation.\",\n [\"Does no align\", \"Aligns by line\", \"Aligns by line and column\"]);\n\n createFormSelectInput(form, \"dataflowMode\", \"Graph mode\", 0, 4, 1, \"dataflowModeHelp\",\n \"(default: coarseGrain). 'activation' presents only function activations and file accesses. Dependencies on the dataflow are clustered by depth(-d). 'coarseGrain' is the same as the activation dataflow, but with the addition of parameters and variable assignment of function activations. 'looplessCoarseGrain' is the same as the coarseGrain dataflow, but it doesn't repeat function activations when they're in the same line in a loop. 'fineGrain' is the same as the coarseGrain dataflow with the addition of variables, all user defined evaluations and data values. 'all' presents a dataflow with all evaluations and function activations. Dependencies on the dataflow are not clustered.\",\n [\"activation\", \"coarseGrain\", \"looplessCoarseGrain\", \"fineGrain\", \"all\"]);\n\n createFormNumberInput(form, \"dataflowDepth\", \"Visualization depth\", 0, 0, \"dataflowDepthHelp\", \"(default: 0) 0 represents infinity. This parameter is ignored when the mode is \\\"all\\\"\");\n createFormNumberInput(form, \"dataflowValueLength\", \"Maximum length of values\", 0, 0, \"dataflowValueLengthHelp\",\n \"(default: 0). 0 indicates that values should be hidden.The values appear on the second line of node lables. E.g. if it is set to '10', it will show 'data.dat', but it will transform 'data2.dat' in to 'da...dat' to respect the length restriction (note that '' is part of the value). Minimum displayable value: 5. Suggested: 55.\");\n createFormNumberInput(form, \"dataflowName\", \"Maximum length of names\", 0, 55, \"dataflowNameHelp\",\n \"(default: 55). 0 indicates that values should be hidden. Minimum displayable value: 5. Suggested: 55.\");\n\n let dataflowEvaluationInput = createFormTextInput(form, \"dataflowTextInputEvaluation\", \"Evaluation was derived from: \", \"dataflowSelectEvaluationHelp\", \"Filter that shows only one evaluation and the ones that derived it\");\n\n form.append(\"div\").attr(\"id\", \"autocompleteSuggestionsResults\");\n\n dataflowTextInputEvaluation = (document.getElementById(\"dataflowTextInputEvaluation\"))\n\n\n addsAutocompleteToDataflowWDF(dataflowEvaluationInput, dataflowTextInputEvaluation, evaluationList);\n\n submitButton = form.append(\"button\").classed(\"btn btn-primary mb-2\", true).text(\"Generate dataflow\");\n\n }\n\n submitButton!.on(\"click\", function () {\n let dataFlowShowType = (document.getElementById(\"dataFlowShowType\")).checked;\n let dataFlowHideTimestamps = (document.getElementById(\"dataflowMode\")).checked;\n let dataFlowHideInternals = (document.getElementById(\"dataFlowHideInternals\")).checked;\n let dataFlowHideNotCode = (document.getElementById(\"dataFlowHideNotCode\")).checked;\n let dataFlowActivationNames = (document.getElementById(\"dataFlowActivationNames\")).checked;\n let dataFlowHideFunc = (document.getElementById(\"dataFlowHideFunc\")).checked;\n\n let dataflowFileAccesses = (document.getElementById(\"dataflowShowAccesses\")).selectedOptions[0].index;\n let dataflowEvaluation = (document.getElementById(\"dataflowEvaluation\")).selectedOptions[0].index;\n let dataflowGroup = (document.getElementById(\"dataflowGroup\")).selectedOptions[0].index;\n let dataflowMode = (document.getElementById(\"dataflowMode\")).selectedOptions[0].value;\n\n let dataflowDepth = (document.getElementById(\"dataflowDepth\")).value;\n let dataflowValueLength = (document.getElementById(\"dataflowValueLength\")).value;\n let dataflowName = (document.getElementById(\"dataflowName\")).value;\n\n let trialId = parent.getAttribute(\"selected-trial\");\n\n selectedEvaluation = dataflowTextInputEvaluation.getAttribute(\"selectedEvaluationID\");\n\n let dataflowUrl = \"/commands/dataflow/\" + trialId + \"/\" + dataFlowShowType + \"/\" + dataFlowHideTimestamps + \"/\" +\n dataFlowHideInternals + \"/\" + dataFlowHideNotCode + \"/\"+ dataFlowActivationNames + \"/\"+ dataFlowHideFunc + \"/\" +dataflowFileAccesses + \"/\" + dataflowEvaluation + \n \"/\" + dataflowGroup + \"/\" + dataflowDepth + \"/\" + dataflowValueLength + \"/\" + dataflowName + \"/\" + dataflowMode;\n dataflowUrl += (selectedEvaluation && !selectedEvaluation.includes(\"undefined\")) ? \"/true/\" + selectedEvaluation : \"/false/0\";\n\n let dataflowWindowId = \"Dataflow window \" + trialId;\n\n /* if (document.getElementById(dataflowWindowId)) {\n window.alert(\"Close trial \" + trialId + \" dataflow tab before generating a new dataflow\");\n return;\n } */\n\n if (document.getElementById(dataflowWindowId)) dataflowWindowId += crypto.randomUUID();\n\n fetch(dataflowUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response: any) => {\n console.log(dataflowMode);\n cleanModalBodyAndClose(modal, modalBody);\n getDataflow(response, config, parent, dataflowWindowId, dataflowUrl);\n });\n\n\n\n });\n\n });\n });\n\n\n}\n\nfunction addsAutocompleteToDataflowWDF(dataflowEvaluationInput: d3_Selection, dataflowTextInputEvaluation: HTMLSelectElement, evaluationList: any) {\n dataflowEvaluationInput.on(\"keyup\", () => {\n\n let input = dataflowTextInputEvaluation.value;\n let autocompleteSuggestionsResults = (document.getElementById(\"autocompleteSuggestionsResults\"));\n let evaluationInputHint = (document.getElementById(\"dataflowSelectEvaluationHelp\"));\n\n autocompleteSuggestionsResults.innerHTML = \"\";\n\n let suggestions: any[];\n\n if (input == \"\") {\n autocompleteSuggestionsResults.setAttribute(\"style\", \"\");\n evaluationInputHint.style.opacity = \"1\";\n suggestions = [];\n dataflowTextInputEvaluation.setAttribute(\"selectedEvaluationID\", \"undefined\");\n }\n else {\n autocompleteSuggestionsResults.style.border = \"1px solid #ccc\";\n autocompleteSuggestionsResults.style.padding = \"3px\";\n autocompleteSuggestionsResults.style.marginTop = \"-3rem\";\n evaluationInputHint.style.opacity = \"0\";\n\n suggestions = evaluationList!.filter((evaluation: any) => {\n if (evaluation.name.includes(input)) return evaluation;\n });\n\n autocompleteSuggestionsResults.innerHTML = \"
              \";\n\n\n for (let i = 0; i < suggestions.length; i++) {\n let evaluationSuggestionId = suggestions[i].evaluation_id + \" \" + \"evaluationSuggestionItem\";\n\n d3_select(document.getElementById(\"dataflowEvaluationSuggestionsBoxId\")).append(\"li\").attr(\"id\", evaluationSuggestionId)\n .style(\"padding\", \"5px 0\")\n .style(\"z-index\", 1)\n .text(\"Evaluation: \" + suggestions[i].name + \" \" + \"Code_line: \" + suggestions[i].first_char_line)\n .on(\"click\", () => {\n dataflowTextInputEvaluation.value = suggestions[i].name;\n input = suggestions[i].name;\n dataflowTextInputEvaluation.setAttribute(\"selectedEvaluationID\", suggestions[i].evaluation_id);\n })\n .on(\"mouseover\", () => { d3_select(document.getElementById(evaluationSuggestionId)).style(\"background-color\", \"#eee\"); })\n .on(\"mouseout\", () => { d3_select(document.getElementById(evaluationSuggestionId)).style(\"background-color\", \"\"); });\n }\n\n\n\n }\n\n });\n}\n\nfunction downloadDataflowAsSVG(dataflowWindow: HTMLElement | null, dataflowWindowId: string, dataflowDOT : string, appendDiv : boolean) {\n let div = appendDiv ? d3_select(dataflowWindow).append(\"div\").attr(\"id\", dataflowWindowId + \"-downloadDiv\") : d3_select(document.getElementById(dataflowWindowId + \"-downloadDiv\"));\n div.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", dataflowWindowId + \"-downloadSVG\")\n .attr(\"href\", \"#\")\n .style(\"color\", \"black\")\n .style(\"margin-right\", \"10px\")\n .attr(\"title\", \"Download dataflow SVG\")\n .on(\"click\", () => {\n instance().then(viz => {\n let svgElement = viz.renderSVGElement(dataflowDOT);\n fs.saveAs(new Blob([svgElement.outerHTML], { type: \"image/svg+xml\" }), \"dataflow.svg\");\n });\n //fs.saveAs(new Blob([dataflowWindow!.getElementsByTagName(\"svg\")[0].outerHTML], { type: \"image/svg+xml\" }), \"dataflow.svg\");\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n}\n\nfunction downloadDataflowAsDOT(dataflowWindow: HTMLElement | null, dataflowWindowId: string, dataflowDOT : string, appendDiv: boolean) {\n let div = appendDiv ? d3_select(dataflowWindow).append(\"div\").attr(\"id\", dataflowWindowId + \"-downloadDiv\") : d3_select(document.getElementById(dataflowWindowId + \"-downloadDiv\"));\n div.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", dataflowWindowId + \"-downloadDOT\")\n .attr(\"href\", \"#\")\n .style(\"color\", \"black\")\n .attr(\"title\", \"Download dataflow DOT\")\n .on(\"click\", () => {\n fs.saveAs(new Blob([dataflowDOT.trim()], { type: \"text/plain;charset=utf-8\" }), \"dataflow.dot\");\n })\n .append(\"i\")\n .classed(\"fa fa-file-text\", true);\n}\n\nfunction dataflowButtons(dataflowWindow: HTMLElement | null, dataflowWindowId: string, excludeProvenanceHint : string, dataflowDOT : string){\n downloadDataflowAsSVG(dataflowWindow, dataflowWindowId, dataflowDOT, true);\n\tdownloadDataflowAsDOT(dataflowWindow, dataflowWindowId, dataflowDOT, false)\n\texcludePriorProvenanceHint(dataflowWindow, excludeProvenanceHint);\n\tcheckboxOpenDataflowExcludeProvenanceNewWindow(dataflowWindow!);\n}\n\nfunction getRestoreOrCollabCommand(serverUrl: string, form: d3_Selection,\n modalBody: d3_Selection) {\n fetch(serverUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n\n response.json().then((json) => {\n form.remove();\n if (response.status == 200 && (!json.terminal_text.includes(\"not\") || (serverUrl.includes(\"edit\")))) {\n addAlert(modalBody, \"alert-success\", \"Success!\", json.terminal_text);\n } else {\n addAlert(modalBody, \"alert-danger\", \"Error!\", json.terminal_text);\n }\n\n });\n });\n}\n\nfunction changeTitle(parent: Element, commandTitle: string) {\n let trialIdTitle = parent.getAttribute(\"selected-trial-simplified\");\n document.getElementById(\"exampleModalTitle\")!.textContent = commandTitle + trialIdTitle;\n}\n\nfunction cleanModalBodyAndClose(modal: d3_Selection,\n modalBody: d3_Selection) {\n document.getElementsByClassName(\"modal-body\")[0].textContent = \"\";\n modalBody.style(\"height\", null);\n hideModal(modal);\n}\n\nfunction addAlert(div: d3_Selection, alertType: string, title: string, text: string) {\n let feedbackAlert = div.append(\"div\").classed(\"alert \" + alertType, true).attr(\"role\", \"alert\");\n feedbackAlert.append(\"h4\").text(title).append(\"button\").classed(\"close\", true).attr(\"type\", \"button\").text(\"x\").on(\"click\", () => {\n feedbackAlert.remove();\n });\n feedbackAlert.append(\"p\").text(text);\n}\n\nfunction createFormCheckInput(form: d3_Selection, checkInputId: string, text: string) {\n let checkDiv = form.append(\"div\").classed(\"form-check\", true);\n checkDiv.append(\"input\").classed(\"form-check-input\", true).attr(\"value\", \"\").attr(\"id\", checkInputId)\n .attr(\"type\", \"checkbox\");\n checkDiv.append(\"label\").classed(\"form-check-label\", true).attr(\"for\", checkInputId)\n .text(text);\n}\n\nfunction createFormTextInput(form: d3_Selection, textInputId: string, text: string, helpId?: string, helpText?: string) {\n let textDiv = form.append(\"div\").classed(\"form-group\", true);\n textDiv.append(\"label\").attr(\"for\", textInputId).text(text);\n let textInput = textDiv.append(\"textarea\").classed(\"form-control\", true).attr(\"id\", textInputId);\n if (helpId && helpText) {\n textInput.attr(\"aria-describedby\", helpId);\n textDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n return textDiv;\n}\n\nfunction createFormSelectInput(form: d3_Selection,\n selectId: string, selectText: string, minOptionNumber: number, maxOptionNumber: number, defaultOption?: number,\n helpId?: string, helpText?: string, optionsLabels?: Array) {\n let selectDiv = form.append(\"div\").classed(\"form-group\", true);\n let selectInput = selectDiv.append(\"label\").attr(\"for\", selectId).text(selectText)\n .append(\"select\").classed(\"form-control\", true).attr(\"id\", selectId);\n\n if (helpId && helpText) {\n selectInput.attr(\"aria-describedby\", helpId);\n selectDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n for (var optionNumber = minOptionNumber; optionNumber <= maxOptionNumber; optionNumber++) {\n let inputLabel = optionsLabels ? optionsLabels[optionNumber] : optionNumber;\n let input = selectInput.append(\"option\").text(inputLabel);\n if (defaultOption && optionNumber == defaultOption) input.attr(\"selected\", \"selected\");\n }\n}\n\nfunction createFormNumberInput(form: d3_Selection, id: string, text: string, minValue: number, defaultValue: number,\n helpId?: string, helpText?: string) {\n let numberDiv = form.append(\"div\").classed(\"form-group\", true);\n numberDiv.append(\"label\").classed(\"form-check-label\", true).attr(\"for\", id)\n .text(text);\n\n numberDiv.append(\"input\").attr(\"type\", \"number\").attr(\"id\", id).attr(\"min\", minValue).attr(\"value\", defaultValue)\n .attr(\"oninput\", \"validity.valid||(value='');\").attr(\"aria-describedby\", \"dataflowDepthHelp\");\n\n if (helpId && helpText) {\n numberDiv.attr(\"aria-describedby\", helpId);\n numberDiv.append(\"small\").classed(\"form-text text-muted\", true).attr(\"id\", helpId).text(helpText);\n }\n\n}\n\nfunction getTextInputFormByID(id: string, replace?: boolean) {\n let formTextInput: string | boolean = (document.getElementById(id)).value\n if (replace) formTextInput.replace(\"/\", \"%2F\").replace(\"\\\\\", \"%5C\");\n if (!formTextInput) formTextInput = false;\n return formTextInput;\n}\n\nfunction hideModal(modal: d3_Selection) {\n if (modal) modal.style(\"display\", \"none\").style(\"padding-right\", \"\").classed(\"show\", false).attr(\"aria-hidden\", \"true\");\n}\n\nfunction showModal(modal: d3_Selection) {\n if (modal) modal.style(\"display\", \"block\").style(\"padding-right\", \"17px\").classed(\"show\", true).attr(\"aria-hidden\", \"false\");\n}","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {json} from '@noworkflow/utils';\n\nimport {BaseActivationGraphWidget} from './base_activation_graph';\n\nimport {TrialGraph, TrialGraphData} from '@noworkflow/trial';\n\n\nexport\nclass TrialGraphWidget extends BaseActivationGraphWidget {\n\n name: string;\n cls: string;\n t1: string;\n t2: string;\n graph: TrialGraph;\n d3node: d3_Selection;\n\n static url(trialId: string, selectedGraph: string, useCache: boolean) {\n let cache = useCache ? \"1\" : \"0\"\n return (\"trials/\"\n + trialId + \"/\" + selectedGraph + \"/\" + cache + \".json\"\n );\n }\n\n constructor(name: string, cls: string, t1: string, t2: string) {\n super({ node: BaseActivationGraphWidget.createNode(cls) });\n this.d3node = d3_select(this.node);\n this.d3node.select('.reload-button')\n .on(\"click\", () => {\n this.load(\n this.d3node.select(\".graph-type\").property(\"value\"),\n this.d3node.select(\".use-cache\").property(\"checked\"),\n )\n })\n this.addClass('content');\n this.addClass('trial-widget');\n this.title.label = name;\n this.title.closable = true;\n this.title.caption = `${name} Graph`;\n this.name = name;\n this.cls = cls;\n this.t1 = t1;\n this.t2 = t2;\n }\n\n setGraph(data: TrialGraphData, config: any={}) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n sub.innerHTML = \"\";\n this.graph = new TrialGraph(this.cls, sub, config);\n this.graph.load(data, this.t1, this.t2);\n\n }\n\n graphDefinition(selectedGraph: string = \"namespace_match\", useCache: boolean = true, genDataflow: boolean = true, data: TrialGraphData) {\n var result = super.graphDefinition(selectedGraph, useCache, genDataflow, data);\n return Object.assign({}, result, {\n queryTooltip: selectedGraph != \"definition_tree\"\n });\n }\n\n load(selectedGraph: string = \"namespace_match\", useCache: boolean = true) {\n let sub = this.node.getElementsByClassName(\"sub-content\")[0];\n json(\"Trial\", sub, TrialGraphWidget.url(this.t1, selectedGraph, useCache), (data: TrialGraphData) => {\n this.configureGraph(selectedGraph, useCache, true, data);\n })\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n if (this.graph) {\n this.graph.config.width = this.node.getBoundingClientRect().width - 24;\n this.graph.config.height = this.node.getBoundingClientRect().height - 24;\n this.graph.updateWindow();\n }\n }\n\n}\n\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\nimport { Message } from '@lumino/messaging';\ninterface IAddMember {\n userId: string;\n }\ninterface IUser {\n id: string;\n login: string\n }\ninterface IGroup {\n id: string;\n name: string;\n members: Array;\n}\n\nexport \nclass GroupWidget extends Widget {\n\n d3node: d3_Selection;\n tBody: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n userIn: d3_Selection;\n addMemberForm: d3_Selection;\n groups: Array;\n users: Array;\n currentGroup: String;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor() {\n super({ node: GroupWidget.createNode() });\n this.d3node = d3_select(this.node);\n\n \n this.addClass('content');\n this.title.label = \"Group Information\";\n this.title.closable = false\n this.title.caption = `Group`;\n this.setNode();\n }\n protected onBeforeShow(msg: Message): void {\n if(!this.groups){\n this.setGroups();\n this.setUsers();\n }\n \n }\n async setUsers(){\n var _thiss=this;\n _thiss.userIn.html(\"\");\n var response= await fetch(\"users\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.users= new Array();\n\n var obj=await response.json();\n\n\n obj.forEach( function(item: any){\n \n _thiss.users.push({\n id: item.id,\n login: item.userLogin\n });\n }); \n }else{\n this.showNode(_thiss.errorFeedback);\n }\n _thiss.users.forEach(function (obj: IUser) {\n\n _thiss.userIn.append(\"option\").attr(\"value\",obj.id).text(obj.login);\n\n });\n\n }\n resfreshGroups(){\n this.tBody.html(\"\");\n this.setGroups();\n }\n async setGroups(){\n var _thiss=this;\n var response= await fetch(\"groups\", {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n _thiss.groups= new Array();\n\n var obj=await response.json();\n\n obj.forEach( function(item: any){\n var group={\n id: item.id,\n name:item.name,\n members: new Array()\n }\n item.members.forEach( function(user: any){\n group.members.push( {\n id: user.id,\n login: user.userLogin\n });\n });\n _thiss.groups.push(group);\n }); \n }else{\n this.showNode(_thiss.errorFeedback);\n }\n\n this.groups.forEach(function (obj: any) {\n _thiss.addGrpRow(obj);\n });\n\n }\n async deleteGrp(grpId:String){\n var response= await fetch(\"/groups/\" +grpId, {\n method: 'DELETE', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n if(response.status==200){\n this.showNode(this.successFeedback);\n this.resfreshGroups();\n \n }else{\n this.showNode(this.errorFeedback);\n }\n\n\n }\n addGrpRow(grp : IGroup){\n let _thiss=this;\n let item=this.tBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(grp.id);\n item.append(\"td\").text(grp.name);\n var membersText=\"\";\n grp.members.forEach( function(user: IUser){\n membersText+= user.login + \" \"\n });\n item.append(\"td\").text(membersText);\n var actions =item.append(\"td\")\n var addMemberButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add User\");\n addMemberButton.on(\"click\",function(){\n _thiss.showNode(_thiss.addMemberForm);\n _thiss.currentGroup=grp.id\n\n });\n var deleteGroupButton=actions.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Delete Group\");\n deleteGroupButton.on(\"click\",function(){\n\n if(confirm(\"Are you sure you want to delete group: \" + grp.name + \" ?\" )){\n _thiss.deleteGrp(grp.id);\n }\n\n });\n deleteGroupButton.style(\"margin-left\",4);\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n createAddGroupForm(projectsDiv:d3_Selection){\n var _thiss=this;\n let inputsDiv=projectsDiv.append(\"div\");\n let nameIn=this.addFormInput(inputsDiv,\"groupNameInput\",\"Name: \",\"input\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addGrpButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Group\");\n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n let newGrp={\n name:nameIn.property(\"value\"),\n members: new Array()\n };\n fetch(\"groups\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newGrp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n newGrp.id=obj.id;\n _thiss.addGrpRow(newGrp);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addGrpButton);\n _thiss.showNode(_thiss.successFeedback);\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n }\n }); \n \n \n });\n\n addGrpButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addGrpButton);\n });\n\n }\n createAddMemberForm(projectsDiv:d3_Selection){\n var _thiss=this;\n _thiss.addMemberForm=projectsDiv.append(\"div\");\n var inputsDiv =_thiss.addMemberForm;\n this.userIn=this.addFormInput(inputsDiv,\"groupUsersInput\",\"User\",\"select\");\n \n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n \n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n\n var select = _thiss.userIn.node() as HTMLSelectElement;\n if(select!=null){\n var option = select.options[select.selectedIndex];\n\n \n \n \n let newGrp={\n userId: option.value,\n };\n fetch(\"groups/\"+_thiss.currentGroup+\"/users\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newGrp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n _thiss.hideNode(_thiss.addMemberForm);\n _thiss.showNode(_thiss.successFeedback);\n _thiss.resfreshGroups();\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n \n }\n }); \n }\n \n });\n _thiss.hideNode(_thiss.addMemberForm);\n\n }\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n projectsDiv.append(\"h2\")\n .text(\"Groups:\")\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"\") ; \n this.hideNode(this.errorFeedback);\n \n this.hideNode(this.successFeedback);\n\n this.createAddMemberForm(projectsDiv);\n projectsDiv.append(\"br\");\n this.createAddGroupForm(projectsDiv);\n\n \n let table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n let header=table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"name\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Members\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"Actions\");\n \n this.tBody=table.append(\"tbody\");\n\n \n }\n\n}","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {json} from '@noworkflow/utils';\n\n\nimport {\n ModuleData, FileAccessData, EnvironmentItemData,\n DiffInfoData, DiffModuleData, DiffEnvironmentData, DiffAccessData,\n FilterObject\n} from './structures';\n\nimport {ModulesInfoWidget} from './modules_info';\nimport {EnvironmentInfoWidget} from './environment_info';\nimport {FileAccessesInfoWidget} from './file_accesses_info';\nimport {TrialInfoWidget} from './trial_info';\n\nexport\nclass DiffInfoWidget extends Widget {\n\n d3node: d3_Selection;\n display1: string;\n display2: string;\n\n static url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/info.json\"\n );\n }\n\n static modules_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/dependencies.json\"\n );\n }\n\n static environment_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/environment.json\"\n );\n }\n\n static accesses_url(trial1: string, trial2: string) {\n return (\"diff/\"\n + trial1 + \"/\" + trial2 + \"/file_accesses.json\"\n );\n }\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n d3node.append('div')\n .classed('trial-info', true)\n\n return node;\n }\n\n constructor(display1:string, display2: string, trial1: string, trial2: string) {\n super({ node: DiffInfoWidget.createNode() });\n this.display1 = display1;\n this.display2 = display2;\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info');\n this.title.label = display1 + \"<->\" + display2 + \" - Diff Info\";\n this.title.closable = true;\n this.title.caption = `Diff ${display1}-${display2} Information`;\n this.load(trial1, trial2);\n }\n\n load(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"trial-info\")[0];\n json(\"Info\", sub, DiffInfoWidget.url(trial1, trial2), (data: DiffInfoData) => {\n this.createMain(data);\n this.loadModules(trial1, trial2);\n this.loadEnvironment(trial1, trial2);\n this.loadFileAccess(trial1, trial2);\n })\n }\n\n createMain(data: DiffInfoData) {\n let trial = data.trial;\n let trial1 = data.trial1;\n let trial2 = data.trial2;\n\n let content = this.d3node.select('.trial-info').html(\"\")\n .append('div')\n .classed('side-info', true)\n let main = content.append('div')\n .classed('main', true)\n\n let h1 = main.append(\"h1\")\n\n // Title\n h1.append(\"span\")\n .classed(\"dbefore\", true)\n .text(\"Trial \" + this.display1);\n\n h1.append(\"span\")\n .text(\" <-> \");\n\n h1.append(\"span\")\n .classed(\"dafter\", true)\n .text(\"Trial \" + this.display2);\n\n // Code hash\n if (trial.code_hash == undefined) {\n main.append(\"h3\")\n .classed(\"hash\", true)\n .text(trial1.code_hash || \"\");\n } else {\n main.append(\"h3\")\n .classed(\"hash dbefore\", true)\n .text(trial.code_hash[0] || \"\");\n main.append(\"h3\")\n .classed(\"hash dafter\", true)\n .text(trial.code_hash[1] || \"\");\n }\n this.info(main, \"id\", \"Id\", trial1.id, trial2.id);\n this.info(main, \"script\", \"Script\", trial1.script, trial2.script);\n this.info(main, \"start\", \"Start\", trial1.start, trial2.start);\n this.info(main, \"finish\", \"Finish\", trial1.finish, trial2.finish);\n this.info(main, \"duration\", \"Duration\", trial1.duration_text, trial2.duration_text);\n\n\n if (trial.arguments == undefined) {\n if (trial1.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial1.arguments);\n }\n } else {\n if (trial1.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc dbefore\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial1.arguments);\n }\n if (trial2.arguments) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc dafter\", true)\n .text(\"Arguments: \");\n attr.append(\"span\")\n .classed(\"arguments\", true)\n .text(trial2.arguments);\n }\n }\n\n content.append(\"div\")\n .classed(\"modules\", true);\n\n content.append(\"div\")\n .classed(\"environment\", true)\n\n content.append(\"div\")\n .classed(\"file-accesses\", true)\n }\n\n filter_trial(filter: FilterObject, filterfn: (strial: number) => void) {\n let select_trial = filter.filterdiv.append(\"select\");\n select_trial.append(\"option\")\n .attr(\"value\", \"3\")\n .text(\"Do not filter Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"First Trial Only\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"5\")\n .text(\"Exists in First Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Second Trial Only\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"6\")\n .text(\"Exists in Second Trial\");\n\n select_trial.append(\"option\")\n .attr(\"value\", \"4\")\n .text(\"Both Trials Only\");\n select_trial.property(\"value\", \"3\");\n\n let newfilter = () => {\n filterfn(Number(select_trial.property(\"value\")));\n }\n select_trial.on(\"change\", newfilter);\n filter.on_change(newfilter);\n }\n\n loadModules(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"modules\")[0];\n\n json(\"Modules\", sub, DiffInfoWidget.modules_url(trial1, trial2), (data: DiffModuleData) => {\n let modules = this.d3node.select(\".modules\").html(\"\");\n if ((data.modules_added.length > 0) ||\n (data.modules_removed.length > 0) ||\n (data.modules_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(modules, \"Modules\");\n let foldable = modules.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = ModulesInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"mod-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n if ((strial & 1) == 1) {\n for (var element of data.modules_removed) {\n if (!filter.valid(data.t1_path, element)) {\n continue;\n }\n this.mod_li(ul, 'libefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.modules_added) {\n if (!filter.valid(data.t2_path, element)) {\n continue;\n }\n this.mod_li(ul, 'liafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.modules_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(data.t1_path, rem) ||\n !filter.valid(data.t2_path, add)) {\n continue;\n }\n let li = ul.append(\"li\")\n\n li.append(\"div\")\n .classed(\"name\", true)\n .text(rem.name);\n\n let version = li.append(\"div\")\n .classed(\"version\", true)\n version.append(\"div\")\n .classed(\"dbefore\", true)\n .text(rem.version)\n version.append(\"div\")\n .classed(\"dafter\", true)\n .text(add.version)\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n li.append(\"div\")\n .classed(\"hash dbefore\", true)\n .attr(\"title\", rem.path)\n .text(rem.code_hash);\n\n li.append(\"div\")\n .classed(\"hash dafter\", true)\n .attr(\"title\", add.path)\n .text(add.code_hash);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n loadEnvironment(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"environment\")[0];\n\n json(\"Environment\", sub, DiffInfoWidget.environment_url(trial1, trial2), (data: DiffEnvironmentData) => {\n let environment = this.d3node.select(\".environment\").html(\"\");\n if ((data.env_added.length > 0) ||\n (data.env_removed.length > 0) ||\n (data.env_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(environment, \"Environment\");\n let foldable = environment.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = EnvironmentInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"env-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n if ((strial & 1) == 1) {\n for (var element of data.env_removed) {\n if (!filter.valid(element)) {\n continue;\n }\n this.env_li(ul, 'dbefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.env_added) {\n if (!filter.valid(element)) {\n continue;\n }\n this.env_li(ul, 'dafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.env_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(rem) ||\n !filter.valid(add)) {\n continue;\n }\n this.env_cli(ul, rem, add);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n })\n }\n\n loadFileAccess(trial1: string, trial2: string) {\n let sub = this.node.getElementsByClassName(\"file-accesses\")[0];\n\n json(\"File Accesses\", sub, DiffInfoWidget.accesses_url(trial1, trial2), (data: DiffAccessData) => {\n let accesses = this.d3node.select(\".file-accesses\").html(\"\");\n if ((data.fa_added.length > 0) ||\n (data.fa_removed.length > 0) ||\n (data.fa_replaced.length > 0)) {\n let fold = TrialInfoWidget.createFold(accesses, \"File Accesses\");\n let foldable = accesses.append(\"div\").classed(\"foldable show-toolbar\", true);\n let filter = FileAccessesInfoWidget.createFilter(foldable);\n let ul = foldable.append(\"ul\")\n .classed(\"fac-list\", true)\n this.filter_trial(filter, (strial: number) => {\n ul.html(\"\");\n\n if ((strial & 1) == 1) {\n for (var element of data.fa_removed) {\n if (!filter.valid(data.t1_path, element)) {\n continue;\n }\n this.fa_li(ul, 'libefore', element);\n }\n }\n if ((strial & 2) == 2) {\n for (var element of data.fa_added) {\n if (!filter.valid(data.t2_path, element)) {\n continue;\n }\n this.fa_li(ul, 'liafter', element);\n }\n }\n if (strial >= 3) {\n for (var elements of data.fa_replaced) {\n let rem = elements[0],\n add = elements[1];\n if (!filter.valid(data.t1_path, rem) ||\n !filter.valid(data.t2_path, add)) {\n continue;\n }\n let li = ul.append(\"li\")\n\n this.fa_cfield(li, 'name', 'Name', rem.name, add.name);\n this.fa_cfield(li, 'mode', 'Mode', rem.mode, add.mode);\n this.fa_cfield(li, 'buffering', 'Buffering', rem.buffering, add.buffering);\n li.append(\"div\")\n .classed(\"clear\", true)\n this.fa_cfield(li, 'timestamp', 'Time', rem.timestamp, add.timestamp);\n this.fa_cfield(li, 'content_hash_before hash', 'Content hash before', rem.content_hash_before, add.content_hash_before);\n this.fa_cfield(li, 'content_hash_after hash', 'Content hash after', rem.content_hash_after, add.content_hash_after);\n this.fa_cfield(li, 'stack', 'Stack', rem.stack, add.stack);\n }\n }\n });\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n private info(main: d3_Selection, cls: string, label: string, value1: any, value2: any) {\n if (value1 == value2) {\n let attr = main.append(\"span\")\n .classed(\"attr\", true);\n attr.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr.append(\"span\")\n .classed(cls, true)\n .text(value1);\n } else {\n let attr1 = main.append(\"span\")\n .classed(\"attr dbefore\", true);\n attr1.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr1.append(\"span\")\n .classed(cls, true)\n .text(value1);\n\n let attr2 = main.append(\"span\")\n .classed(\"attr dafter\", true);\n attr2.append(\"span\")\n .classed(\"desc\", true)\n .text(label + \": \");\n attr2.append(\"span\")\n .classed(cls, true)\n .text(value2);\n }\n }\n\n private mod_li(element: d3_Selection, cls: string, mod: ModuleData) {\n let li = element.append(\"li\")\n .classed(cls, true);\n\n li.append(\"div\")\n .classed(\"name\", true)\n .text(mod.name);\n\n li.append(\"div\")\n .classed(\"version\", true)\n .text(mod.version);\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n li.append(\"div\")\n .classed(\"hash\", true)\n .attr(\"title\", mod.path)\n .text(mod.code_hash);\n }\n\n private env_field(element: d3_Selection, env: EnvironmentItemData) {\n element.append(\"span\")\n .classed(\"key\", true)\n .text(env.name);\n\n element.append(\"span\")\n .classed(\"equal\", true)\n .text(\" = \");\n\n element.append(\"span\")\n .classed(\"value\", true)\n .text(env.value);\n\n }\n\n private env_li(element: d3_Selection, cls: string, env: EnvironmentItemData) {\n this.env_field(\n element.append(\"li\")\n .classed(cls, true),\n env\n )\n }\n\n private env_cli(element: d3_Selection, rem: EnvironmentItemData, add: EnvironmentItemData) {\n let li = element.append(\"li\");\n this.env_field(\n li.append(\"div\")\n .classed(\"dbefore\", true),\n rem\n )\n this.env_field(\n li.append(\"div\")\n .classed(\"dafter\", true),\n add\n )\n }\n\n private fa_field(element: d3_Selection, cls: string, title: string, value: string) {\n element.append(\"div\")\n .classed(cls, true)\n .attr(\"title\", title)\n .text(value);\n }\n\n private fa_li(element: d3_Selection, cls: string, fa: FileAccessData) {\n let li = element.append(\"li\")\n .classed(cls, true);\n\n this.fa_field(li, 'name', 'Name', fa.name);\n this.fa_field(li, 'mode', 'Mode', fa.mode);\n this.fa_field(li, 'buffering', 'Buffering', fa.buffering);\n\n li.append(\"div\")\n .classed(\"clear\", true)\n\n this.fa_field(li, 'timestamp', 'Time', fa.timestamp);\n this.fa_field(li, 'content_hash_before hash', 'Content hash before', fa.content_hash_before);\n this.fa_field(li, 'content_hash_after hash', 'Content hash after', fa.content_hash_after);\n this.fa_field(li, 'stack', 'Stack', fa.stack);\n }\n\n private fa_cfield(element: d3_Selection, cls: string, title: string, v1: string, v2: string) {\n if (v1 == v2) {\n this.fa_field(element, cls, title, v1);\n } else {\n this.fa_field(element, cls + \" dbefore\", title, v1);\n this.fa_field(element, cls + \" dafter\", title, v2);\n }\n }\n\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {EnvironmentItemData, FilterObject} from './structures';\n\nexport\nclass EnvironmentInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/environment.json\";\n }\n\n static createItem(parent: d3_Selection, key: string, value: string): void {\n if (value) {\n let li = parent.append(\"li\");\n li.append(\"span\")\n .classed(\"key\", true)\n .text(key)\n li.append(\"span\")\n .classed(\"equal\", true)\n .text(\" = \")\n li.append(\"span\")\n .classed(\"value\", true)\n .text(value)\n }\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"type\", \"search\");\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Main\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Main Environment Only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-Main Environment Only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (element: EnvironmentItemData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return (\n element.name.toLowerCase().indexOf(stext) >= 0\n || element.value.toLowerCase().indexOf(stext) >= 0\n );\n }\n\n let check_local = () => {\n if (slocal == 0) return true;\n switch (element.name) {\n case 'PYTHON_IMPLEMENTATION': \n case 'PYTHON_VERSION':\n case 'OS_NAME':\n case 'OS_RELEASE':\n case 'OS_USER':\n case 'PWD':\n case 'PID':\n case 'HOSTNAME':\n case 'ARCH':\n case 'PROCESSOR':\n return (slocal == 1)\n default:\n return (slocal != 1)\n }\n }\n\n return check_text() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n }\n\n static createList(parent: d3_Selection, data: EnvironmentItemData[], default_local: string = \"0\"): FilterObject {\n let filter = EnvironmentInfoWidget.createFilter(parent, default_local);\n let list = parent.append(\"ul\")\n .classed(\"env-list\", true)\n\n filter.on_change(() => {\n list.html(\"\");\n for (var element of data) {\n if (!filter.valid(element)) {\n continue;\n }\n EnvironmentInfoWidget.createItem(list, element.name, element.value);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: EnvironmentItemData[], default_local: string = \"0\"): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"Environment (\" + trialDisplay + \")\");\n\n EnvironmentInfoWidget.createList(content, data, default_local);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: EnvironmentItemData[], default_local: string = \"0\") {\n super({ node: EnvironmentInfoWidget.createNode(trialDisplay, data, default_local) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Environment\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Environment`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {FileAccessData, FilterObject} from './structures';\n\n\nexport\nclass FileAccessesInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/file_accesses.json\";\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"placeholder\", \"Name\")\n .attr(\"type\", \"search\");\n\n let mode_filter = filterdiv.append(\"input\")\n .attr(\"placeholder\", \"Mode\")\n .attr(\"type\", \"search\");\n\n let select_hash = filterdiv.append(\"select\");\n select_hash.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Existence\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Exists only before trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Exists only after trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"3\")\n .text(\"Changes during trial\");\n\n select_hash.append(\"option\")\n .attr(\"value\", \"7\")\n .text(\"Does not change during trial\");\n\n select_hash.property(\"value\", \"0\");\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Locality\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Local files only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-local files only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (local: string, element: FileAccessData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let smode = mode_filter.property(\"value\").toLowerCase();\n let shash = Number(select_hash.property(\"value\"));\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return element.name.toLowerCase().indexOf(stext) >= 0;\n }\n\n let check_mode = () => {\n return element.mode.toLowerCase().indexOf(smode) >= 0;\n }\n\n let check_hash = () => {\n if (((shash & 1) == 1) && element.content_hash_before == null) return false;\n if (((shash & 2) == 2) && element.content_hash_after == null) return false;\n if (shash == 1) return element.content_hash_after == null;\n if (shash == 2) return element.content_hash_before == null;\n if (shash == 3) return element.content_hash_before != element.content_hash_after;\n if (shash == 4) return element.content_hash_before == element.content_hash_after;\n return true;\n } \n\n let check_local = () => {\n if (slocal == 0) return true;\n if (!/^((\\/)|(\\w+:\\\\))/.test(element.name)) return (slocal == 1); // not absolute path\n if (element.name.startsWith(local)) return (slocal == 1);\n return (slocal != 1);\n }\n\n return check_text() && check_mode() && check_hash() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n mode_filter.on(\"keyup\", filterfn);\n select_hash.on(\"change\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n }\n\n static createList(parent: d3_Selection, data: FileAccessData[], trial_path: string, default_local: string = \"0\"): FilterObject {\n let filter = FileAccessesInfoWidget.createFilter(parent, default_local);\n\n let list = parent.append(\"ul\")\n .classed(\"fac-list\", true)\n\n filter.on_change(() => {\n list.html(\"\");\n for (var element of data) {\n if (!filter.valid(trial_path, element)) {\n continue;\n }\n var li = list.append(\"li\");\n\n //name of file for request\n var name = element.name.split(\"/\");\n var pos = name.length -1;\n var fileName = name[pos];\n\n li.append(\"a\").classed(\"name\", true)\n .attr(\"title\", \"Name\")\n .text(element.name)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_after + \"/\" + fileName); //file after execution\n li.append(\"div\").classed(\"mode\", true)\n .attr(\"title\", \"Mode\")\n .text(element.mode);\n li.append(\"div\").classed(\"buffering\", true)\n .attr(\"title\", \"Buffering\")\n .text(element.buffering);\n li.append(\"div\").classed(\"clear\", true)\n li.append(\"div\").classed(\"timestamp\", true)\n .attr(\"title\", \"Time\")\n .text(element.timestamp);\n li.append(\"a\").classed(\"content_hash_before hash\", true)\n .attr(\"title\", \"Content hash before\")\n .text(element.content_hash_before)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_before + \"/\" + fileName);\n li.append(\"div\"); //spacing\n li.append(\"a\").classed(\"content_hash_after hash\", true)\n .attr(\"title\", \"Content hash after\")\n .text(element.content_hash_after)\n .attr(\"href\",\"/trials/files/\" + element.content_hash_after + \"/\" + fileName);\n li.append(\"div\").classed(\"stack\", true)\n .attr(\"title\", \"Stack\")\n .text(element.stack);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: FileAccessData[], trial_path: string, default_local: string = \"0\"): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"File Accesses (\" + trialDisplay + \")\");\n\n FileAccessesInfoWidget.createList(content, data, trial_path, default_local);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: FileAccessData[], trial_path: string, default_local: string = \"0\") {\n super({ node: FileAccessesInfoWidget.createNode(trialDisplay, data, trial_path, default_local) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Accesses\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Accesses`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {ModuleData, FilterObject} from './structures';\n\n\nexport\nclass ModulesInfoWidget extends Widget {\n\n d3node: d3_Selection;\n\n static url(trialId: string) {\n return \"trials/\" + trialId + \"/dependencies.json\";\n }\n\n static createFilterDiv(parent: d3_Selection) {\n return parent.append(\"div\");\n }\n\n static createFilter(parent: d3_Selection, default_local: string = \"0\"): FilterObject {\n let filterdiv = this.createFilterDiv(parent);\n\n let text_filter = filterdiv.append(\"input\")\n .attr(\"type\", \"search\");\n\n let select_version = filterdiv.append(\"select\");\n select_version.append(\"option\")\n .attr(\"value\", \"both\")\n .text(\"Do not filter Version\");\n\n select_version.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Filter In Version\");\n\n select_version.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Filter Out Version\");\n select_version.property(\"value\", \"both\")\n\n let select_local = filterdiv.append(\"select\");\n select_local.append(\"option\")\n .attr(\"value\", \"0\")\n .text(\"Do not filter Locality\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"1\")\n .text(\"Local Modules Only\");\n\n select_local.append(\"option\")\n .attr(\"value\", \"2\")\n .text(\"Non-Local Modules Only\");\n\n select_local.property(\"value\", default_local);\n\n return {\n filterdiv: filterdiv,\n valid: (local: string, element: ModuleData) => {\n let stext = text_filter.property(\"value\").toLowerCase();\n let sversion = select_version.property(\"value\");\n let slocal = Number(select_local.property(\"value\"));\n\n let check_text = () => {\n return element.name.toLowerCase().indexOf(stext) >= 0;\n }\n\n let check_version = () => {\n if (sversion == \"both\") return true;\n if (sversion == \"1\") return element.version != null;\n if (sversion == \"0\") return element.version == null;\n return false;\n }\n\n let check_local = () => {\n if (slocal == 0) return true;\n if (element.path == null) return (slocal != 1);\n if (!/^((\\/)|(\\w+:\\\\))/.test(element.path)) return (slocal == 1); // not absolute path\n if (element.path.startsWith(local)) return (slocal == 1);\n return (slocal != 1);\n }\n\n return check_text() && check_version() && check_local();\n },\n on_change: (filterfn: () => void) => {\n text_filter.on(\"keyup\", filterfn);\n select_version.on(\"change\", filterfn);\n select_local.on(\"change\", filterfn);\n filterfn();\n }\n };\n \n }\n\n static createList(parent: d3_Selection, data: ModuleData[], trial_path: string, default_local: string = \"0\"): FilterObject {\n let filter = ModulesInfoWidget.createFilter(parent, default_local);\n\n let list = parent.append(\"ul\")\n .classed(\"mod-list\", true);\n\n filter.on_change(() => {\n list.html(\"\");\n\n for (var element of data) {\n if (!filter.valid(trial_path, element)) {\n continue;\n }\n var li = list.append(\"li\");\n li.append(\"div\").classed(\"name\", true)\n .text(element.name);\n li.append(\"div\").classed(\"version\", true)\n .text(element.version === null ? \"\" : element.version);\n li.append(\"div\").classed(\"clear\", true)\n li.append(\"div\").classed(\"hash\", true)\n .attr(\"title\", element.path)\n .text(element.code_hash);\n }\n });\n return filter;\n }\n\n static createNode(trialDisplay: string, data: ModuleData[], trial_path: string): HTMLElement {\n let node = document.createElement('div');\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('list', true)\n .append('div')\n .classed('side-info', true)\n\n content.append(\"div\")\n .classed(\"main\", true)\n .append(\"h1\")\n .text(\"Modules (\" + trialDisplay + \")\");\n\n ModulesInfoWidget.createList(content, data, trial_path);\n\n return node;\n }\n\n constructor(trialDisplay: string, data: ModuleData[], trial_path: string) {\n super({ node: ModulesInfoWidget.createNode(trialDisplay, data, trial_path) });\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info-list');\n this.title.label = trialDisplay + \"- Modules\";\n this.title.closable = true;\n this.title.caption = `Trial ${trialDisplay} Modules`;\n }\n}\n","import {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {\n VisibleHistoryNode, HistoryTrialNodeData\n} from '@noworkflow/history';\nimport {json} from '@noworkflow/utils';\n\n\nimport {ModuleListData, EnvironmentData, FileAccessListData, FilterObject} from './structures';\n\nimport {ModulesInfoWidget} from './modules_info';\nimport {EnvironmentInfoWidget} from './environment_info';\nimport {FileAccessesInfoWidget} from './file_accesses_info';\nimport {AnnontationWidget} from '../annotation_widget';\n\nexport\nclass TrialInfoWidget extends Widget {\n\n d3node: d3_Selection;\n trial: VisibleHistoryNode;\n annontationWidget: AnnontationWidget;\n\n static createNode(trial: VisibleHistoryNode,annontationWidget: AnnontationWidget): HTMLElement {\n let node = document.createElement('div');\n let info = trial.info as HistoryTrialNodeData;\n\n let d3node = d3_select(node);\n\n let content = d3node.append('div')\n .classed('trial-info', true)\n .append('div')\n .classed('side-info', true)\n\n let main = content.append('div')\n .classed('main', true)\n\n main.append(\"h1\")\n .text(\"Trial \" + trial.display);\n\n main.append(\"a\")\n .classed(\"hash\", true)\n .text(info.code_hash || \"\")\n .attr('href','trials/'+ trial.id + '/' + info.code_hash + '/' + info.script);// href for script\n\n let idAttr = main.append(\"span\")\n .classed(\"attr\", true);\n idAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Id: \");\n idAttr.append(\"span\")\n .classed(\"id\", true)\n .text(trial.title);\n\n let scriptAttr = main.append(\"span\")\n .classed(\"attr\", true);\n scriptAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Script: \");\n scriptAttr.append(\"a\")\n .classed(\"script\", true)\n .text(info.script)\n .attr('href','trials/'+ trial.id + '/' + info.code_hash + '/' + info.script ); // href for script\n\n let startAttr = main.append(\"span\")\n .classed(\"attr\", true);\n startAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Start: \");\n startAttr.append(\"span\")\n .classed(\"start\", true)\n .text(info.str_start || \"\");\n\n let finishAttr = main.append(\"span\")\n .classed(\"attr\", true);\n finishAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Finish: \");\n finishAttr.append(\"span\")\n .classed(\"finish\", true)\n .text(info.str_finish || \"\");\n\n let durationAttr = main.append(\"span\")\n .classed(\"attr\", true);\n durationAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Duration: \");\n durationAttr.append(\"span\")\n .classed(\"duration\", true)\n .text(info.duration_text || \"\");\n\n if (info.command) {\n let argumentsAttr = main.append(\"span\")\n .classed(\"attr\", true);\n argumentsAttr.append(\"span\")\n .classed(\"desc\", true)\n .text(\"Arguments: \");\n argumentsAttr.append(\"span\")\n .classed(\"arguments\", true)\n .text(info.command);\n }\n\n\n\n \n\n content.append(\"div\")\n .classed(\"modules\", true)\n\n content.append(\"div\")\n .classed(\"environment\", true)\n\n content.append(\"div\")\n .classed(\"file-accesses\", true)\n\n var anntButton=content.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Manage Annotations\");\n\n anntButton.on(\"click\",function(){\n \n\n annontationWidget.activeAnnotation(trial.title);\n });\n\n return node;\n }\n\n constructor(trial: VisibleHistoryNode,annontationWidget: AnnontationWidget) {\n super({ node: TrialInfoWidget.createNode(trial,annontationWidget) });\n this.trial = trial;\n this.d3node = d3_select(this.node);\n this.addClass('content');\n this.addClass('trial-info');\n this.title.label = trial.display + \"- Information\";\n this.title.closable = true;\n this.title.caption = `Trial ${trial.display} Information`;\n this.loadModules();\n this.loadEnvironment();\n this.loadFileAccess();\n this.annontationWidget=annontationWidget;\n }\n\n static createFold(parent: d3_Selection, title: string) {\n let fold = parent.append(\"div\")\n .classed(\"fold\", true)\n let foldI = fold.append(\"i\")\n .classed(\"fa fa-minus\", true)\n let spanI = fold.append(\"span\")\n .text(title)\n \n let click = () => {\n let visible = foldI.classed(\"fa-plus\");\n foldI.classed(\"fa-plus\", !visible);\n foldI.classed(\"fa-minus\", visible);\n parent.select(\".foldable\")\n .classed(\"show-toolbar\", visible)\n .classed(\"hide-toolbar\", !visible)\n return false;\n };\n foldI.on(\"click\", click);\n spanI.on(\"click\", click);\n return fold;\n }\n\n static createFilterFold(fold: d3_Selection, filter: FilterObject) {\n filter.filterdiv\n .classed(\"info-filter\", true)\n .classed(\"show-toolbar\", false)\n .classed(\"hide-toolbar\", true);\n\n let foldA = fold.append(\"a\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Search\")\n .classed(\"show-all\", true);\n\n let foldAI = foldA.append(\"i\")\n .classed(\"fa fa-search-plus\", true);\n \n foldA.on(\"click\", () => {\n let visible = foldAI.classed(\"fa-search-plus\");\n foldAI.classed(\"fa-search-plus\", !visible);\n foldAI.classed(\"fa-search-minus\", visible);\n filter.filterdiv\n .classed(\"show-toolbar\", visible)\n .classed(\"hide-toolbar\", !visible)\n return false;\n });\n }\n\n loadModules() {\n let sub = this.node.getElementsByClassName(\"modules\")[0];\n json(\"Modules\", sub, ModulesInfoWidget.url(this.trial.title), (data: ModuleListData) => {\n let modules = this.d3node.select(\".modules\").html(\"\");\n if (data.all.length > 0) {\n \n let fold = TrialInfoWidget.createFold(modules, \"Modules\");\n let filter = ModulesInfoWidget.createList(\n modules.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.all, data.trial_path, \"1\"\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n\n loadEnvironment() {\n let sub = this.node.getElementsByClassName(\"environment\")[0];\n\n json(\"Environment\", sub, EnvironmentInfoWidget.url(this.trial.title), (data: EnvironmentData) => {\n let environment = this.d3node.select(\".environment\").html(\"\");\n\n let fold = TrialInfoWidget.createFold(environment, \"Environment\");\n let filter = EnvironmentInfoWidget.createList(\n environment.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.all, \"1\"\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n })\n }\n\n loadFileAccess() {\n let sub = this.node.getElementsByClassName(\"file-accesses\")[0];\n\n json(\"File Accesses\", sub, FileAccessesInfoWidget.url(this.trial.title), (data: FileAccessListData) => {\n let accesses = this.d3node.select(\".file-accesses\").html(\"\");\n\n if (data.file_accesses.length > 0) {\n\n let fold = TrialInfoWidget.createFold(accesses, \"File Accesses\");\n let filter = FileAccessesInfoWidget.createList(\n accesses.append(\"div\").classed(\"foldable show-toolbar\", true),\n data.file_accesses, data.trial_path\n );\n TrialInfoWidget.createFilterFold(fold, filter);\n }\n });\n }\n}\n","import {DockPanel, Widget, DockLayout} from '@lumino/widgets';\n\n\nexport\ninterface VisWidget extends Widget {\n nowVis?: string;\n}\n\n\nexport\ninterface FindResult {\n area: DockLayout.AreaConfig | null;\n index: number;\n}\n\n\nexport\nfunction findInLayout(area: DockLayout.AreaConfig | null, widget: Widget): FindResult | null {\n if (area == null || area.type == 'tab-area') {\n return null;\n }\n var splitconfig: DockLayout.ISplitAreaConfig = area;\n var result: FindResult | null = null;\n splitconfig.children.every((child, index) => {\n if (child.type == 'tab-area') {\n var tabconfig: DockLayout.ITabAreaConfig = child;\n for (var tabwidget of tabconfig.widgets) {\n if (tabwidget == widget) {\n result = {\n area: area,\n index: index\n }\n return false;\n }\n }\n } else {\n var temp = findInLayout(child, widget);\n if (temp) {\n result = temp;\n return false;\n }\n }\n return true;\n });\n return result;\n}\n\n\nexport\nclass NowVisPanel extends DockPanel {\n\n addMainWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"main\") {\n console.log(\"Warning: options.ref is not 'main'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\") {\n options.ref = w;\n }\n }\n }\n (widget as VisWidget).nowVis = \"main\";\n this.addWidget(widget, options);\n }\n\n addGraphWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n var operation: string = \"none\";\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"graph\") {\n console.log(\"Warning: options.ref is not 'graph'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\" && !options.ref) {\n options.ref = w;\n options.mode = \"split-bottom\";\n operation = \"main\";\n } else if ((wnow.nowVis == \"info\") && (operation != \"graph\")) {\n options.ref = w;\n options.mode = \"split-left\";\n operation = \"info\";\n } else if (wnow.nowVis == \"graph\") {\n options.ref = w;\n options.mode = \"tab-after\";\n operation = \"graph\";\n }\n };\n }\n (widget as VisWidget).nowVis = \"graph\";\n this.addWidget(widget, options);\n\n if (operation == \"main\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.20;\n sizes[1] = 0.80;\n this.restoreLayout(layout);\n }\n }\n\n if (operation == \"info\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.80;\n sizes[1] = 0.20;\n this.restoreLayout(layout);\n }\n }\n }\n\n addInfoWidget(widget: Widget, options: DockLayout.IAddOptions = {}): void {\n var operation: string = \"none\";\n if (options.ref) {\n if ((options.ref as VisWidget).nowVis != \"info\") {\n console.log(\"Warning: options.ref is not 'info'\");\n }\n } else {\n for (let w of this.widgets()) {\n let wnow = w as VisWidget;\n if (wnow.nowVis == \"main\" && !options.ref) {\n options.ref = w;\n options.mode = \"split-bottom\";\n operation = \"main\";\n } else if ((wnow.nowVis == \"graph\") && (operation != \"info\")) {\n options.ref = w;\n options.mode = \"split-right\";\n operation = \"graph\";\n } else if (wnow.nowVis == \"info\") {\n options.ref = w;\n options.mode = \"tab-after\";\n operation = \"info\";\n }\n };\n }\n (widget as VisWidget).nowVis = \"info\";\n this.addWidget(widget, options);\n\n if (operation == \"main\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.20;\n sizes[1] = 0.80;\n this.restoreLayout(layout);\n }\n }\n\n if (operation == \"graph\") {\n var layout = this.saveLayout();\n var sublayout = findInLayout(layout.main, widget);\n if (sublayout) {\n var sizes: number[] = (sublayout.area as DockLayout.ISplitAreaConfig).sizes;\n sizes[0] = 0.80;\n sizes[1] = 0.20;\n this.restoreLayout(layout);\n }\n }\n }\n\n}\n","import {Widget} from '@lumino/widgets';\nimport '../style/bootstrap.min.css';\n\nimport {\n select as d3_select,\n Selection as d3_Selection,\n BaseType as d3_BaseType,\n} from 'd3-selection';\n\ninterface IExperiment {\n id: string;\n name: string;\n description: string;\n}\n\nexport\nclass ProjectWidget extends Widget {\n\n d3node: d3_Selection;\n expTBody: d3_Selection;\n successFeedback: d3_Selection;\n errorFeedback: d3_Selection;\n experiments: Array;\n\n static createNode(): HTMLElement {\n let node = document.createElement('div');\n return node;\n }\n\n constructor(experiments: Array) {\n super({ node: ProjectWidget.createNode() });\n this.d3node = d3_select(this.node);\n this.experiments=experiments;\n this.setNode();\n this.addClass('content');\n this.title.label = \"Experiment Selection\";\n this.title.closable = false\n this.title.caption = `Experiment`;\n }\n addExpRow(exp : IExperiment){\n var link=window.location.href + \"experiments/\"+exp.id;\n let item=this.expTBody.append(\"tr\");\n item.append(\"th\").attr(\"scope\",\"row\").text(exp.id);\n item.append(\"td\").text(exp.name);\n item.append(\"td\").text(exp.description);\n item.append(\"td\").append(\"a\").attr(\"href\",link).text(link);\n\n let cloneCommandText = \"now pull --url \" + link;\n item.append(\"td\").text( cloneCommandText + \" \").append(\"i\").classed(\"fa fa-clone\", true).attr(\"aria-hidden\", \"true\")\n .attr(\"id\", exp.id + \"CopyIcon\").on(\"click\", ()=> {\n navigator.clipboard.writeText(cloneCommandText)\n .then(()=>{\n let divCopied = d3_select(document.getElementById(exp.id + \"CopyIcon\")!)\n .append(\"small\").classed(\"alert alert-secondary p-0\", true).text(\"Copied!\");\n setTimeout(()=>{divCopied.remove()}, 3000);\n });\n });\n\n }\n addFormInput(form:d3_Selection,\n fieldId:string,fieldLabel:string,fieldType:string){\n let grp=form.append(\"div\").classed(\"form-group row\",true);\n grp.append(\"label\").classed(\"col-sm-2 col-form-label\",true).attr(\"for\",fieldId).text(fieldLabel + \": \");\n let divIn=grp.append(\"div\").classed(\"col-sm-10\",true)\n let inp=divIn.append(fieldType);\n inp.classed(\"form-control\",true).attr(\"id\",fieldId);\n return inp;\n }\n addFeedBackinfo(baseNode: d3_Selection,\n cls:string,txt:string,desc:string){\n let _thiss=this;\n let feedbackNode=baseNode.append(\"div\")\n .classed(\"alert\",true)\n .classed(cls,true)\n .classed(\"alert-dismissible\",true)\n .classed(\"fade\",true)\n .classed(\"show\",true);\n feedbackNode.append(\"strong\").text(txt);\n feedbackNode.append(\"span\").text(\" \"+desc)\n .append(\"button\").attr(\"type\",\"button\").classed(\"close\",true)\n .attr(\"data-dismiss\",\"alert\").text(\"x\")\n .on(\"click\",function(){\n _thiss.hideNode(feedbackNode);\n });\n return feedbackNode;\n }\n hideNode(node: d3_Selection){\n node.classed(\"d-none\",true); \n }\n showNode(node: d3_Selection){\n node.classed(\"d-none\",false); \n }\n setNode(){\n\n let content = this.d3node.append('div')\n .classed('config-content', true)\n\n let projectsDiv = content.append(\"div\")\n\n projectsDiv.append(\"h2\")\n .text(\"Experiments:\")\n\n this.errorFeedback= this.addFeedBackinfo(projectsDiv,\"alert-danger\",\"Error!\",\"A problem has been occurred while submitting your data.\") ;\n this.successFeedback= this.addFeedBackinfo(projectsDiv,\"alert-success\",\"Success!\",\"Experiment created successfully\") ; \n this.hideNode(this.errorFeedback);\n this.hideNode(this.successFeedback);\n\n let inputsDiv=projectsDiv.append(\"div\");\n let nameIn=this.addFormInput(inputsDiv,\"experimentNameInput\",\"Name\",\"input\");\n let descIn=this.addFormInput(inputsDiv,\"experimentDescInput\",\"Description\",\"textarea\");\n let confimButton=inputsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Confirm\");\n let addExpButton=projectsDiv.append(\"button\").classed(\"btn btn-primary\",true)\n .attr(\"type\",\"submit\").text(\"Add Experiment\");\n\n\n let table = projectsDiv.append(\"table\").classed(\"table\",true);\n \n let header=table.append(\"thead\").append(\"tr\"); \n \n header.append(\"th\").attr(\"scope\",\"col\").text(\"id\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"name\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"description\");\n header.append(\"th\").attr(\"scope\",\"col\").text(\"url\");\n header.append(\"th\").attr(\"scope\", \"col\").html(\" clone \")\n .append(\"i\").classed(\"fa fa-question-circle-o\", true).attr(\"aria-hidden\", \"true\")\n .attr(\"title\", \"Run this command on the command line, in the desired folder, to clone the experiment.\");\n \n this.expTBody=table.append(\"tbody\");\n\n \n inputsDiv.classed(\"d-none\",true);\n \n confimButton.on(\"click\",function(){\n _thiss.hideNode(_thiss.errorFeedback);\n _thiss.hideNode(_thiss.successFeedback);\n let newExp={\n name:nameIn.property(\"value\"),\n description:descIn.property(\"value\")\n };\n fetch(\"experiments\", {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(newExp) // body data type must match \"Content-Type\" header\n }).then((response)=>{\n if(response.status==201){\n response.json().then((obj)=>{\n newExp.id=obj.id;\n _thiss.addExpRow(newExp);\n _thiss.hideNode(inputsDiv);\n _thiss.showNode(addExpButton);\n _thiss.showNode(_thiss.successFeedback);\n });\n \n }else{\n _thiss.showNode(_thiss.errorFeedback);\n }\n }); \n \n \n });\n var _thiss=this;\n addExpButton.on(\"click\",function(){\n _thiss.showNode(inputsDiv);\n _thiss.hideNode(addExpButton);\n });\n \n this.experiments.forEach(function (obj) {\n _thiss.addExpRow(obj);\n });\n }\n\n}","import { Widget } from '@lumino/widgets';\nimport { select as d3_select, Selection as d3_Selection, BaseType as d3_BaseType } from 'd3-selection';\nimport { NowVisPanel } from './nowpanel';\nimport { TableInfoWidget } from './database_widget';\nimport 'ace-builds/src-noconflict/ace';\nimport 'ace-builds/src-noconflict/theme-textmate';\nimport 'ace-builds/src-noconflict/mode-sql';\nimport 'ace-builds/src-noconflict/ext-language_tools';\n\ndeclare global { interface Window { ace: any; } }\n\nexport class DatabaseTabWidget extends Widget {}\n\nexport class QueryResultWidget extends DatabaseTabWidget {\n d3node: d3_Selection;\n private columns: string[];\n private rows: any[];\n private query: string;\n private currentPage: number = 1;\n \n constructor(query: string, columns: string[], rows: any[], count: number) {\n super({ node: QueryResultWidget.createNode() });\n this.title.label = `Query Result (${count})`;\n this.title.caption = `Query Result (${count})`;\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n this.query = query;\n this.columns = columns;\n this.rows = rows;\n this.renderTable();\n }\n \n static createNode(): HTMLElement {\n const node = document.createElement('div');\n node.style.padding = '1rem';\n node.style.height = '100%';\n node.style.overflowY = 'auto';\n return node;\n }\n \n private renderTable(): void {\n this.d3node.selectAll('*').remove();\n \n this.d3node.append('a')\n .classed(\"toollink\", true)\n .attr('class', 'btn btn-secondary-outline')\n .attr('title', 'Download CSV')\n .style('margin-bottom', '1em')\n .on('click', () => {\n let csv = '';\n csv += this.columns.map(col => `\"${col.replace(/\"/g, '\"\"')}\"`).join(',') + '\\n';\n for (const row of this.rows) {\n csv += this.columns.map(col => `\"${String(row[col] !== undefined ? row[col] : '').replace(/\"/g, '\"\"')}\"`).join(',') + '\\n';\n }\n const blob = new Blob([csv], { type: 'text/csv' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'query_result.csv';\n document.body.appendChild(a);\n a.click();\n setTimeout(() => {\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }, 100);\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n\n if (!this.columns.length || !this.rows.length) {\n this.d3node.append('div').text('No results.');\n return;\n }\n\n const paginationContainer = this.d3node.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem')\n .style('padding', '0.5rem')\n .style('background-color', '#f8f9fa')\n .style('border-radius', '4px');\n\n const startIndex = (this.currentPage - 1) * 50 + 1;\n const endIndex = Math.min(this.currentPage * 50, this.rows.length);\n paginationContainer.append('div')\n .style('font-size', '0.9em')\n .style('color', '#666')\n .text(`Showing ${startIndex}-${endIndex} of ${this.rows.length} rows`);\n\n const paginationButtons = paginationContainer.append('div')\n .style('display', 'flex')\n .style('gap', '0.25rem');\n\n const totalPages = Math.ceil(this.rows.length / 50);\n\n if (totalPages > 1) {\n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage = 1;\n this.renderTable();\n })\n .text('<<');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage--;\n this.renderTable();\n })\n .text('<');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-primary')\n .text(this.currentPage.toString());\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage++;\n this.renderTable();\n })\n .text('>');\n \n paginationButtons.append('button')\n .attr('class', 'btn btn-sm btn-outline-secondary')\n .on('click', () => {\n this.currentPage = totalPages;\n this.renderTable();\n })\n .text('>>');\n }\n\n const tableContainer = this.d3node.append('div')\n .style('max-height', '400px')\n .style('overflow-y', 'auto')\n .style('border', '1px solid #dee2e6')\n .style('border-radius', '4px');\n \n const table = tableContainer.append('table').attr('class', 'table table-bordered table-sm');\n table.style('border-collapse', 'separate')\n .style('border-spacing', '0');\n\n const thead = table.append('thead').append('tr');\n thead.style('position', 'sticky')\n .style('top', '0')\n .style('background-color', 'white')\n .style('z-index', '1');\n\n this.columns.forEach(col => thead.append('th').text(col));\n \n const tbody = table.append('tbody');\n \n const startRow = (this.currentPage - 1) * 50;\n const endRow = Math.min(startRow + 50, this.rows.length);\n const currentPageRows = this.rows.slice(startRow, endRow);\n \n currentPageRows.forEach(row => {\n const tr = tbody.append('tr');\n this.columns.forEach(col => tr.append('td').text(row[col] !== undefined ? row[col] : ''));\n });\n\n this.d3node.append('div')\n .attr('class', 'text-muted')\n .style('margin-top', '1rem')\n .style('margin-bottom', '0.5em')\n .html(`Query: ${this.query}`);\n }\n}\n\nexport class QueryWidget extends Widget {\n private panel: NowVisPanel;\n private static count: number = 0;\n d3node: d3_Selection;\n private aceEditor: any; // Ace editor instance\n private tableNames: string[] = [];\n private columnNames: string[] = [];\n private editorId: string;\n private initialQuery: string;\n \n constructor(panel: NowVisPanel, tableNames?: string[], columnNames?: string[], initialQuery?: string) {\n super();\n this.panel = panel;\n this.title.label = 'SQL Query';\n this.title.caption = 'SQL Query Interface';\n this.title.closable = true;\n this.d3node = d3_select(this.node);\n this.tableNames = tableNames || [];\n this.columnNames = columnNames || [];\n this.editorId = `query-input-${++QueryWidget.count}`;\n this.initialQuery = initialQuery || '';\n\n this.createQueryInterface();\n }\n\n private async createQueryInterface(): Promise {\n const container = this.d3node.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('height', '100%')\n .style('padding', '1rem')\n .style('gap', '1rem')\n .style('overflow-y', 'auto')\n .style('overflow-x', 'hidden');\n\n const headerRow = container.append('div')\n .style('display', 'flex')\n .style('justify-content', 'space-between')\n .style('align-items', 'center')\n .style('margin-bottom', '1rem')\n .style('flex-shrink', '0');\n\n headerRow.append('h4')\n .text('SQL Query Interface')\n .style('margin', '0')\n .style('color', '#333');\n\n headerRow.append('button')\n .attr('id', 'execute-query-btn')\n .attr(\"title\", \"Execute query. Use Ctrl+Enter for quick execution.\")\n .classed('btn btn-primary', true)\n .on('click', () => this.executeQuery())\n .html(' Execute Query');\n\n const queryContainer = container.append('div')\n .style('display', 'flex')\n .style('flex-direction', 'column')\n .style('min-height', '50%')\n .style('flex', '1 1 0');\n \n queryContainer.append('label')\n .attr('for', this.editorId)\n .text('Enter your SQL query:')\n .style('font-weight', 'bold')\n .style('margin-bottom', '0.5rem');\n \n queryContainer.append('div')\n .attr('id', this.editorId)\n .style('width', '100%')\n .style('min-height', '140px')\n .style('max-height', '30vh')\n .style('border', '1px solid #ccc')\n .style('border-radius', '4px')\n .style('font-size', '1em')\n .style('flex', '1');\n\n setTimeout(() => {\n // @ts-ignore\n this.aceEditor = window.ace.edit(this.editorId);\n this.aceEditor.setTheme('ace/theme/textmate');\n this.aceEditor.session.setMode('ace/mode/sql');\n this.aceEditor.setOptions({\n fontSize: '1em',\n minLines: 6,\n showPrintMargin: false,\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n });\n this.aceEditor.commands.addCommand({\n name: 'executeQuery',\n bindKey: { win: 'Ctrl-Enter', mac: 'Command-Enter' },\n exec: () => this.executeQuery()\n });\n\n if (window.ace && window.ace.require) {\n const langTools = window.ace.require('ace/ext/language_tools');\n const tableCompleter = {\n getCompletions: (editor: any, session: any, pos: any, prefix: string, callback: any) => {\n if (!prefix) { callback(null, []); return; }\n \n const completions = this.tableNames.map((name: string) => ({\n caption: name,\n value: name,\n meta: 'table'\n }));\n \n this.columnNames.forEach((name: string) => {\n completions.push({\n caption: name,\n value: name,\n meta: 'column'\n });\n });\n \n callback(null, completions);\n }\n };\n langTools.addCompleter(tableCompleter);\n }\n\n if (this.initialQuery) {\n this.aceEditor.setValue(this.initialQuery);\n this.aceEditor.clearSelection();\n this.aceEditor.focus();\n }\n }, 0);\n \n queryContainer.append('div')\n .attr('id', `query-status-${this.editorId}`)\n .style('min-height', '60px')\n .style('padding', '0.5rem')\n .style('border', '1px solid #e0e0e0')\n .style('border-radius', '4px')\n .style('background-color', '#f9f9f9')\n .style('font-family', 'monospace')\n .style('font-size', '0.9em')\n .style('overflow-y', 'auto')\n .style('flex-shrink', '0')\n .style('margin-top', '1rem')\n .text('Ready to execute queries. Use Ctrl+Enter for quick execution.');\n }\n\n private async executeQuery(): Promise {\n // const queryInput = this.node.querySelector('#query-input') as HTMLTextAreaElement;\n const statusArea = this.node.querySelector(`#query-status-${this.editorId}`) as HTMLDivElement;\n \n const sql = this.aceEditor ? this.aceEditor.getValue().trim() : '';\n \n if (!statusArea) return;\n \n statusArea.innerHTML = '';\n statusArea.style.color = '#333';\n \n if (!sql) {\n statusArea.textContent = 'Please enter a SQL query.';\n statusArea.style.color = '#d32f2f';\n return;\n }\n\n statusArea.textContent = 'Executing query...';\n statusArea.style.color = '#1976d2';\n \n try {\n const response = await fetch('/db/query', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query: sql })\n });\n \n const data = await response.json();\n \n if (data.error) {\n statusArea.textContent = `Error: ${data.error}`;\n statusArea.style.color = '#d32f2f';\n } else if (data.rows && data.columns) {\n statusArea.textContent = `Query executed successfully! Found ${data.rows.length} rows with ${data.columns.length} columns.`;\n statusArea.style.color = '#388e3c';\n \n await this.displayQueryResults(sql, data.columns, data.rows);\n } else {\n statusArea.textContent = 'Query executed successfully. No results returned.';\n statusArea.style.color = '#388e3c';\n }\n } catch (e) {\n statusArea.textContent = `Error executing query: ${e.message}`;\n statusArea.style.color = '#d32f2f';\n }\n }\n\n private async displayQueryResults(sql: string, columns: string[], rows: any[]): Promise {\n const resultWidget = new QueryResultWidget(sql, columns, rows, ++QueryWidget.count);\n \n let refWidget: Widget | null = null;\n if (this.panel.widgets) {\n for (let w of this.panel.widgets()) {\n if (w instanceof TableInfoWidget || w instanceof QueryResultWidget) {\n refWidget = w;\n }\n }\n }\n \n if (refWidget) {\n this.panel.addInfoWidget(resultWidget, { ref: refWidget, mode: 'tab-after' });\n } else {\n this.panel.addInfoWidget(resultWidget, { ref: this, mode: 'split-bottom' });\n }\n \n this.panel.activateWidget(resultWidget);\n }\n\n protected onResize(msg: Widget.ResizeMessage): void {\n const editorElement = this.node.querySelector(`#${this.editorId}`) as HTMLElement;\n if (!editorElement) \n return;\n\n const rect = this.node.getBoundingClientRect();\n const availableHeight = rect.height - 200;\n const minHeight = 250;\n const maxHeight = Math.max(minHeight, availableHeight * 0.6);\n editorElement.style.height = `${maxHeight}px`;\n \n if (this.aceEditor) {\n this.aceEditor.resize();\n }\n }\n} \n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","'use strict';\n\nmodule.exports = require('./browser/algorithms.json');\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar createHash = require('create-hash');\nvar stream = require('readable-stream');\nvar inherits = require('inherits');\nvar sign = require('./sign');\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');\n algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hashType = data.hash;\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nSign.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n this.end();\n var hash = this._hash.digest();\n var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error('Unknown message digest'); }\n\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;\n\n this.end();\n var hash = this._hash.digest();\n return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n return new Verify(algorithm);\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n};\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar createHmac = require('create-hmac');\nvar crt = require('browserify-rsa');\nvar EC = require('elliptic').ec;\nvar BN = require('bn.js');\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n var priv = parseKeys(key);\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n return ecSign(hash, priv);\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n return dsaSign(hash, priv, hashType);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = priv.modulus.byteLength();\n var pad = [0, 1];\n while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) { pad.push(hash[i]); }\n\n var out = crt(pad, priv);\n return out;\n}\n\nfunction ecSign(hash, priv) {\n var curveId = curves[priv.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n var curve = new EC(curveId);\n var key = curve.keyFromPrivate(priv.privateKey);\n var out = key.sign(hash);\n\n return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n var x = priv.params.priv_key;\n var p = priv.params.p;\n var q = priv.params.q;\n var g = priv.params.g;\n var r = new BN(0);\n var k;\n var H = bits2int(hash, q).mod(q);\n var s = false;\n var kv = getKey(x, q, hash, algo);\n while (s === false) {\n k = makeKey(q, kv, algo);\n r = makeR(g, k, p, q);\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n if (s.cmpn(0) === 0) {\n s = false;\n r = new BN(0);\n }\n }\n return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n r = r.toArray();\n s = s.toArray();\n\n // Pad values\n if (r[0] & 0x80) { r = [0].concat(r); }\n if (s[0] & 0x80) { s = [0].concat(s); }\n\n var total = r.length + s.length + 4;\n var res = [\n 0x30, total, 0x02, r.length\n ];\n res = res.concat(r, [0x02, s.length], s);\n return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n x = Buffer.from(x.toArray());\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length);\n x = Buffer.concat([zeros, x]);\n }\n var hlen = hash.length;\n var hbits = bits2octets(hash, q);\n var v = Buffer.alloc(hlen);\n v.fill(1);\n var k = Buffer.alloc(hlen);\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n var bits = new BN(obits);\n var shift = (obits.length << 3) - q.bitLength();\n if (shift > 0) { bits.ishrn(shift); }\n return bits;\n}\n\nfunction bits2octets(bits, q) {\n bits = bits2int(bits, q);\n bits = bits.mod(q);\n var out = Buffer.from(bits.toArray());\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length);\n out = Buffer.concat([zeros, out]);\n }\n return out;\n}\n\nfunction makeKey(q, kv, algo) {\n var t;\n var k;\n\n do {\n t = Buffer.alloc(0);\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n t = Buffer.concat([t, kv.v]);\n }\n\n k = bits2int(t, q);\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n } while (k.cmp(q) !== -1);\n\n return k;\n}\n\nfunction makeR(g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar BN = require('bn.js');\nvar EC = require('elliptic').ec;\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n var pub = parseKeys(key);\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n return ecVerify(sig, hash, pub);\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n return dsaVerify(sig, hash, pub);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = pub.modulus.byteLength();\n var pad = [1];\n var padNum = 0;\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff);\n padNum += 1;\n }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) {\n pad.push(hash[i]);\n }\n pad = Buffer.from(pad);\n var red = BN.mont(pub.modulus);\n sig = new BN(sig).toRed(red);\n\n sig = sig.redPow(new BN(pub.publicExponent));\n sig = Buffer.from(sig.fromRed().toArray());\n var out = padNum < 8 ? 1 : 0;\n len = Math.min(sig.length, pad.length);\n if (sig.length !== pad.length) { out = 1; }\n\n i = -1;\n while (++i < len) { out |= sig[i] ^ pad[i]; }\n return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n var curve = new EC(curveId);\n var pubkey = pub.data.subjectPrivateKey.data;\n\n return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n var p = pub.data.p;\n var q = pub.data.q;\n var g = pub.data.g;\n var y = pub.data.pub_key;\n var unpacked = parseKeys.signature.decode(sig, 'der');\n var s = unpacked.s;\n var r = unpacked.r;\n checkValue(s, q);\n checkValue(r, q);\n var montp = BN.mont(p);\n var w = s.invm(q);\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q);\n return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, { hasUnpiped: false });\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n pna.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n pna.nextTick(emitErrorNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n pna.nextTick(emitErrorNT, _this, err);\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","module.exports = require('events').EventEmitter;\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","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\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'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\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","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\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 = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n if (this.padding === false) {\n return false;\n }\n\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n if (this.padding === false) {\n return buffer;\n }\n\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n if(buf[p.place] === 0x00) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n if ((data[p.place] & 128) !== 0) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) {\n return false;\n }\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size');\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n var i;\n for (i = 0; i < naf.length; i += 1) {\n naf[i] = 0;\n }\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\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'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","module.exports = require('os')\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n\n'use strict';\n\nvar asn1 = require('asn1.js');\n\nexports.certificate = require('./certificate');\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int'](),\n\t\tthis.key('privateExponent')['int'](),\n\t\tthis.key('prime1')['int'](),\n\t\tthis.key('prime2')['int'](),\n\t\tthis.key('exponent1')['int'](),\n\t\tthis.key('exponent2')['int'](),\n\t\tthis.key('coefficient')['int']()\n\t);\n});\nexports.RSAPrivateKey = RSAPrivateKey;\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int']()\n\t);\n});\nexports.RSAPublicKey = RSAPublicKey;\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('none').null_().optional(),\n\t\tthis.key('curve').objid().optional(),\n\t\tthis.key('params').seq().obj(\n\t\t\tthis.key('p')['int'](),\n\t\t\tthis.key('q')['int'](),\n\t\t\tthis.key('g')['int']()\n\t\t).optional()\n\t);\n});\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\nexports.PublicKey = PublicKey;\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\nexports.PrivateKey = PrivateKeyInfo;\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').seq().obj(\n\t\t\tthis.key('id').objid(),\n\t\t\tthis.key('decrypt').seq().obj(\n\t\t\t\tthis.key('kde').seq().obj(\n\t\t\t\t\tthis.key('id').objid(),\n\t\t\t\t\tthis.key('kdeparams').seq().obj(\n\t\t\t\t\t\tthis.key('salt').octstr(),\n\t\t\t\t\t\tthis.key('iters')['int']()\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tthis.key('cipher').seq().obj(\n\t\t\t\t\tthis.key('algo').objid(),\n\t\t\t\t\tthis.key('iv').octstr()\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('p')['int'](),\n\t\tthis.key('q')['int'](),\n\t\tthis.key('g')['int'](),\n\t\tthis.key('pub_key')['int'](),\n\t\tthis.key('priv_key')['int']()\n\t);\n});\nexports.DSAPrivateKey = DSAPrivateKey;\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n\tthis['int']();\n});\n\nvar ECParameters = asn1.define('ECParameters', function () {\n\tthis.choice({\n\t\tnamedCurve: this.objid()\n\t});\n});\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('privateKey').octstr(),\n\t\tthis.key('parameters').optional().explicit(0).use(ECParameters),\n\t\tthis.key('publicKey').optional().explicit(1).bitstr()\n\t);\n});\nexports.ECPrivateKey = ECPrivateKey;\n\nexports.signature = asn1.define('signature', function () {\n\tthis.seq().obj(\n\t\tthis.key('r')['int'](),\n\t\tthis.key('s')['int']()\n\t);\n});\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict';\n\nvar asn = require('asn1.js');\n\nvar Time = asn.define('Time', function () {\n\tthis.choice({\n\t\tutcTime: this.utctime(),\n\t\tgeneralTime: this.gentime()\n\t});\n});\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n\tthis.seq().obj(\n\t\tthis.key('type').objid(),\n\t\tthis.key('value').any()\n\t);\n});\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('parameters').optional(),\n\t\tthis.key('curve').objid().optional()\n\t);\n});\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n\tthis.setof(AttributeTypeValue);\n});\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n\tthis.seqof(RelativeDistinguishedName);\n});\n\nvar Name = asn.define('Name', function () {\n\tthis.choice({\n\t\trdnSequence: this.use(RDNSequence)\n\t});\n});\n\nvar Validity = asn.define('Validity', function () {\n\tthis.seq().obj(\n\t\tthis.key('notBefore').use(Time),\n\t\tthis.key('notAfter').use(Time)\n\t);\n});\n\nvar Extension = asn.define('Extension', function () {\n\tthis.seq().obj(\n\t\tthis.key('extnID').objid(),\n\t\tthis.key('critical').bool().def(false),\n\t\tthis.key('extnValue').octstr()\n\t);\n});\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('version').explicit(0)['int']().optional(),\n\t\tthis.key('serialNumber')['int'](),\n\t\tthis.key('signature').use(AlgorithmIdentifier),\n\t\tthis.key('issuer').use(Name),\n\t\tthis.key('validity').use(Validity),\n\t\tthis.key('subject').use(Name),\n\t\tthis.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n\t\tthis.key('issuerUniqueID').implicit(1).bitstr().optional(),\n\t\tthis.key('subjectUniqueID').implicit(2).bitstr().optional(),\n\t\tthis.key('extensions').explicit(3).seqof(Extension).optional()\n\t);\n});\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('tbsCertificate').use(TBSCertificate),\n\t\tthis.key('signatureAlgorithm').use(AlgorithmIdentifier),\n\t\tthis.key('signatureValue').bitstr()\n\t);\n});\n\nmodule.exports = X509Certificate;\n","'use strict';\n\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m;\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m;\nvar evp = require('evp_bytestokey');\nvar ciphers = require('browserify-aes');\nvar Buffer = require('safe-buffer').Buffer;\nmodule.exports = function (okey, password) {\n\tvar key = okey.toString();\n\tvar match = key.match(findProc);\n\tvar decrypted;\n\tif (!match) {\n\t\tvar match2 = key.match(fullRegex);\n\t\tdecrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64');\n\t} else {\n\t\tvar suite = 'aes' + match[1];\n\t\tvar iv = Buffer.from(match[2], 'hex');\n\t\tvar cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64');\n\t\tvar cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;\n\t\tvar out = [];\n\t\tvar cipher = ciphers.createDecipheriv(suite, cipherKey, iv);\n\t\tout.push(cipher.update(cipherText));\n\t\tout.push(cipher['final']());\n\t\tdecrypted = Buffer.concat(out);\n\t}\n\tvar tag = key.match(startRegex)[1];\n\treturn {\n\t\ttag: tag,\n\t\tdata: decrypted\n\t};\n};\n","'use strict';\n\nvar asn1 = require('./asn1');\nvar aesid = require('./aesid.json');\nvar fixProc = require('./fixProc');\nvar ciphers = require('browserify-aes');\nvar compat = require('pbkdf2');\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction decrypt(data, password) {\n\tvar salt = data.algorithm.decrypt.kde.kdeparams.salt;\n\tvar iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);\n\tvar algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];\n\tvar iv = data.algorithm.decrypt.cipher.iv;\n\tvar cipherText = data.subjectPrivateKey;\n\tvar keylen = parseInt(algo.split('-')[1], 10) / 8;\n\tvar key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');\n\tvar cipher = ciphers.createDecipheriv(algo, key, iv);\n\tvar out = [];\n\tout.push(cipher.update(cipherText));\n\tout.push(cipher['final']());\n\treturn Buffer.concat(out);\n}\n\nfunction parseKeys(buffer) {\n\tvar password;\n\tif (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n\t\tpassword = buffer.passphrase;\n\t\tbuffer = buffer.key;\n\t}\n\tif (typeof buffer === 'string') {\n\t\tbuffer = Buffer.from(buffer);\n\t}\n\n\tvar stripped = fixProc(buffer, password);\n\n\tvar type = stripped.tag;\n\tvar data = stripped.data;\n\tvar subtype, ndata;\n\tswitch (type) {\n\t\tcase 'CERTIFICATE':\n\t\t\tndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;\n\t\t\t// falls through\n\t\tcase 'PUBLIC KEY':\n\t\t\tif (!ndata) {\n\t\t\t\tndata = asn1.PublicKey.decode(data, 'der');\n\t\t\t}\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\tndata.subjectPrivateKey = ndata.subjectPublicKey;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'ec',\n\t\t\t\t\t\tdata: ndata\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tdata: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'ENCRYPTED PRIVATE KEY':\n\t\t\tdata = asn1.EncryptedPrivateKey.decode(data, 'der');\n\t\t\tdata = decrypt(data, password);\n\t\t\t// falls through\n\t\tcase 'PRIVATE KEY':\n\t\t\tndata = asn1.PrivateKey.decode(data, 'der');\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcurve: ndata.algorithm.curve,\n\t\t\t\t\t\tprivateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tparams: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'RSA PUBLIC KEY':\n\t\t\treturn asn1.RSAPublicKey.decode(data, 'der');\n\t\tcase 'RSA PRIVATE KEY':\n\t\t\treturn asn1.RSAPrivateKey.decode(data, 'der');\n\t\tcase 'DSA PRIVATE KEY':\n\t\t\treturn {\n\t\t\t\ttype: 'dsa',\n\t\t\t\tparams: asn1.DSAPrivateKey.decode(data, 'der')\n\t\t\t};\n\t\tcase 'EC PRIVATE KEY':\n\t\t\tdata = asn1.ECPrivateKey.decode(data, 'der');\n\t\t\treturn {\n\t\t\t\tcurve: data.parameters.value,\n\t\t\t\tprivateKey: data.privateKey\n\t\t\t};\n\t\tdefault: throw new Error('unknown key type ' + type);\n\t}\n}\nparseKeys.signature = asn1.signature;\n\nmodule.exports = parseKeys;\n","// Copyright Joyent, Inc. and other Node contributors.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a\r\n// copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n// persons to whom the Software is furnished to do so, subject to the\r\n// following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included\r\n// in all copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n'use strict';\r\n\r\n\r\nvar isWindows = process.platform === 'win32';\r\nvar util = require('util');\r\n\r\n\r\n// resolves . and .. elements in a path array with directory names there\r\n// must be no slashes or device names (c:\\) in the array\r\n// (so also no leading and trailing slashes - it does not distinguish\r\n// relative and absolute paths)\r\nfunction normalizeArray(parts, allowAboveRoot) {\r\n var res = [];\r\n for (var i = 0; i < parts.length; i++) {\r\n var p = parts[i];\r\n\r\n // ignore empty parts\r\n if (!p || p === '.')\r\n continue;\r\n\r\n if (p === '..') {\r\n if (res.length && res[res.length - 1] !== '..') {\r\n res.pop();\r\n } else if (allowAboveRoot) {\r\n res.push('..');\r\n }\r\n } else {\r\n res.push(p);\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n\r\n// returns an array with empty elements removed from either end of the input\r\n// array or the original array if no elements need to be removed\r\nfunction trimArray(arr) {\r\n var lastIndex = arr.length - 1;\r\n var start = 0;\r\n for (; start <= lastIndex; start++) {\r\n if (arr[start])\r\n break;\r\n }\r\n\r\n var end = lastIndex;\r\n for (; end >= 0; end--) {\r\n if (arr[end])\r\n break;\r\n }\r\n\r\n if (start === 0 && end === lastIndex)\r\n return arr;\r\n if (start > end)\r\n return [];\r\n return arr.slice(start, end + 1);\r\n}\r\n\r\n// Regex to split a windows path into three parts: [*, device, slash,\r\n// tail] windows-only\r\nvar splitDeviceRe =\r\n /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\r\n\r\n// Regex to split the tail part of the above into [*, dir, basename, ext]\r\nvar splitTailRe =\r\n /^([\\s\\S]*?)((?:\\.{1,2}|[^\\\\\\/]+?|)(\\.[^.\\/\\\\]*|))(?:[\\\\\\/]*)$/;\r\n\r\nvar win32 = {};\r\n\r\n// Function to split a filename into [root, dir, basename, ext]\r\nfunction win32SplitPath(filename) {\r\n // Separate device+slash from tail\r\n var result = splitDeviceRe.exec(filename),\r\n device = (result[1] || '') + (result[2] || ''),\r\n tail = result[3] || '';\r\n // Split the tail into dir, basename and extension\r\n var result2 = splitTailRe.exec(tail),\r\n dir = result2[1],\r\n basename = result2[2],\r\n ext = result2[3];\r\n return [device, dir, basename, ext];\r\n}\r\n\r\nfunction win32StatPath(path) {\r\n var result = splitDeviceRe.exec(path),\r\n device = result[1] || '',\r\n isUnc = !!device && device[1] !== ':';\r\n return {\r\n device: device,\r\n isUnc: isUnc,\r\n isAbsolute: isUnc || !!result[2], // UNC paths are always absolute\r\n tail: result[3]\r\n };\r\n}\r\n\r\nfunction normalizeUNCRoot(device) {\r\n return '\\\\\\\\' + device.replace(/^[\\\\\\/]+/, '').replace(/[\\\\\\/]+/g, '\\\\');\r\n}\r\n\r\n// path.resolve([from ...], to)\r\nwin32.resolve = function() {\r\n var resolvedDevice = '',\r\n resolvedTail = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1; i--) {\r\n var path;\r\n if (i >= 0) {\r\n path = arguments[i];\r\n } else if (!resolvedDevice) {\r\n path = process.cwd();\r\n } else {\r\n // Windows has the concept of drive-specific current working\r\n // directories. If we've resolved a drive letter but not yet an\r\n // absolute path, get cwd for that drive. We're sure the device is not\r\n // an unc path at this points, because unc paths are always absolute.\r\n path = process.env['=' + resolvedDevice];\r\n // Verify that a drive-local cwd was found and that it actually points\r\n // to our drive. If not, default to the drive's root.\r\n if (!path || path.substr(0, 3).toLowerCase() !==\r\n resolvedDevice.toLowerCase() + '\\\\') {\r\n path = resolvedDevice + '\\\\';\r\n }\r\n }\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail;\r\n\r\n if (device &&\r\n resolvedDevice &&\r\n device.toLowerCase() !== resolvedDevice.toLowerCase()) {\r\n // This path points to another device so it is not applicable\r\n continue;\r\n }\r\n\r\n if (!resolvedDevice) {\r\n resolvedDevice = device;\r\n }\r\n if (!resolvedAbsolute) {\r\n resolvedTail = tail + '\\\\' + resolvedTail;\r\n resolvedAbsolute = isAbsolute;\r\n }\r\n\r\n if (resolvedDevice && resolvedAbsolute) {\r\n break;\r\n }\r\n }\r\n\r\n // Convert slashes to backslashes when `resolvedDevice` points to an UNC\r\n // root. Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n resolvedDevice = normalizeUNCRoot(resolvedDevice);\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path,\r\n // but handle relative paths to be safe (might happen when process.cwd()\r\n // fails)\r\n\r\n // Normalize the tail path\r\n resolvedTail = normalizeArray(resolvedTail.split(/[\\\\\\/]+/),\r\n !resolvedAbsolute).join('\\\\');\r\n\r\n return (resolvedDevice + (resolvedAbsolute ? '\\\\' : '') + resolvedTail) ||\r\n '.';\r\n};\r\n\r\n\r\nwin32.normalize = function(path) {\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail,\r\n trailingSlash = /[\\\\\\/]$/.test(tail);\r\n\r\n // Normalize the tail path\r\n tail = normalizeArray(tail.split(/[\\\\\\/]+/), !isAbsolute).join('\\\\');\r\n\r\n if (!tail && !isAbsolute) {\r\n tail = '.';\r\n }\r\n if (tail && trailingSlash) {\r\n tail += '\\\\';\r\n }\r\n\r\n // Convert slashes to backslashes when `device` points to an UNC root.\r\n // Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n device = normalizeUNCRoot(device);\r\n }\r\n\r\n return device + (isAbsolute ? '\\\\' : '') + tail;\r\n};\r\n\r\n\r\nwin32.isAbsolute = function(path) {\r\n return win32StatPath(path).isAbsolute;\r\n};\r\n\r\nwin32.join = function() {\r\n var paths = [];\r\n for (var i = 0; i < arguments.length; i++) {\r\n var arg = arguments[i];\r\n if (!util.isString(arg)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (arg) {\r\n paths.push(arg);\r\n }\r\n }\r\n\r\n var joined = paths.join('\\\\');\r\n\r\n // Make sure that the joined path doesn't start with two slashes, because\r\n // normalize() will mistake it for an UNC path then.\r\n //\r\n // This step is skipped when it is very clear that the user actually\r\n // intended to point at an UNC path. This is assumed when the first\r\n // non-empty string arguments starts with exactly two slashes followed by\r\n // at least one more non-slash character.\r\n //\r\n // Note that for normalize() to treat a path as an UNC path it needs to\r\n // have at least 2 components, so we don't filter for that here.\r\n // This means that the user can use join to construct UNC paths from\r\n // a server name and a share name; for example:\r\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\')\r\n if (!/^[\\\\\\/]{2}[^\\\\\\/]/.test(paths[0])) {\r\n joined = joined.replace(/^[\\\\\\/]{2,}/, '\\\\');\r\n }\r\n\r\n return win32.normalize(joined);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// it will solve the relative path from 'from' to 'to', for instance:\r\n// from = 'C:\\\\orandea\\\\test\\\\aaa'\r\n// to = 'C:\\\\orandea\\\\impl\\\\bbb'\r\n// The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\r\nwin32.relative = function(from, to) {\r\n from = win32.resolve(from);\r\n to = win32.resolve(to);\r\n\r\n // windows is not case sensitive\r\n var lowerFrom = from.toLowerCase();\r\n var lowerTo = to.toLowerCase();\r\n\r\n var toParts = trimArray(to.split('\\\\'));\r\n\r\n var lowerFromParts = trimArray(lowerFrom.split('\\\\'));\r\n var lowerToParts = trimArray(lowerTo.split('\\\\'));\r\n\r\n var length = Math.min(lowerFromParts.length, lowerToParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (lowerFromParts[i] !== lowerToParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n if (samePartsLength == 0) {\r\n return to;\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < lowerFromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('\\\\');\r\n};\r\n\r\n\r\nwin32._makeLong = function(path) {\r\n // Note: this will *probably* throw somewhere.\r\n if (!util.isString(path))\r\n return path;\r\n\r\n if (!path) {\r\n return '';\r\n }\r\n\r\n var resolvedPath = win32.resolve(path);\r\n\r\n if (/^[a-zA-Z]\\:\\\\/.test(resolvedPath)) {\r\n // path is local filesystem path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\' + resolvedPath;\r\n } else if (/^\\\\\\\\[^?.]/.test(resolvedPath)) {\r\n // path is network UNC path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\UNC\\\\' + resolvedPath.substring(2);\r\n }\r\n\r\n return path;\r\n};\r\n\r\n\r\nwin32.dirname = function(path) {\r\n var result = win32SplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nwin32.basename = function(path, ext) {\r\n var f = win32SplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nwin32.extname = function(path) {\r\n return win32SplitPath(path)[3];\r\n};\r\n\r\n\r\nwin32.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir;\r\n var base = pathObject.base || '';\r\n if (!dir) {\r\n return base;\r\n }\r\n if (dir[dir.length - 1] === win32.sep) {\r\n return dir + base;\r\n }\r\n return dir + win32.sep + base;\r\n};\r\n\r\n\r\nwin32.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = win32SplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nwin32.sep = '\\\\';\r\nwin32.delimiter = ';';\r\n\r\n\r\n// Split a filename into [root, dir, basename, ext], unix version\r\n// 'root' is just a slash, or nothing.\r\nvar splitPathRe =\r\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\nvar posix = {};\r\n\r\n\r\nfunction posixSplitPath(filename) {\r\n return splitPathRe.exec(filename).slice(1);\r\n}\r\n\r\n\r\n// path.resolve([from ...], to)\r\n// posix version\r\nposix.resolve = function() {\r\n var resolvedPath = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\r\n var path = (i >= 0) ? arguments[i] : process.cwd();\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n resolvedPath = path + '/' + resolvedPath;\r\n resolvedAbsolute = path[0] === '/';\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path, but\r\n // handle relative paths to be safe (might happen when process.cwd() fails)\r\n\r\n // Normalize the path\r\n resolvedPath = normalizeArray(resolvedPath.split('/'),\r\n !resolvedAbsolute).join('/');\r\n\r\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\r\n};\r\n\r\n// path.normalize(path)\r\n// posix version\r\nposix.normalize = function(path) {\r\n var isAbsolute = posix.isAbsolute(path),\r\n trailingSlash = path && path[path.length - 1] === '/';\r\n\r\n // Normalize the path\r\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\r\n\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n\r\n return (isAbsolute ? '/' : '') + path;\r\n};\r\n\r\n// posix version\r\nposix.isAbsolute = function(path) {\r\n return path.charAt(0) === '/';\r\n};\r\n\r\n// posix version\r\nposix.join = function() {\r\n var path = '';\r\n for (var i = 0; i < arguments.length; i++) {\r\n var segment = arguments[i];\r\n if (!util.isString(segment)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (segment) {\r\n if (!path) {\r\n path += segment;\r\n } else {\r\n path += '/' + segment;\r\n }\r\n }\r\n }\r\n return posix.normalize(path);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// posix version\r\nposix.relative = function(from, to) {\r\n from = posix.resolve(from).substr(1);\r\n to = posix.resolve(to).substr(1);\r\n\r\n var fromParts = trimArray(from.split('/'));\r\n var toParts = trimArray(to.split('/'));\r\n\r\n var length = Math.min(fromParts.length, toParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (fromParts[i] !== toParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < fromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('/');\r\n};\r\n\r\n\r\nposix._makeLong = function(path) {\r\n return path;\r\n};\r\n\r\n\r\nposix.dirname = function(path) {\r\n var result = posixSplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nposix.basename = function(path, ext) {\r\n var f = posixSplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nposix.extname = function(path) {\r\n return posixSplitPath(path)[3];\r\n};\r\n\r\n\r\nposix.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\r\n var base = pathObject.base || '';\r\n return dir + base;\r\n};\r\n\r\n\r\nposix.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = posixSplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n allParts[1] = allParts[1] || '';\r\n allParts[2] = allParts[2] || '';\r\n allParts[3] = allParts[3] || '';\r\n\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nposix.sep = '/';\r\nposix.delimiter = ':';\r\n\r\n\r\nif (isWindows)\r\n module.exports = win32;\r\nelse /* posix */\r\n module.exports = posix;\r\n\r\nmodule.exports.posix = posix;\r\nmodule.exports.win32 = win32;\r\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\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'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","/*\n * readlineSync\n * https://github.com/anseki/readline-sync\n *\n * Copyright (c) 2018 anseki\n * Licensed under the MIT license.\n */\n\n'use strict';\n\nvar\n IS_WIN = process.platform === 'win32',\n\n ALGORITHM_CIPHER = 'aes-256-cbc',\n ALGORITHM_HASH = 'sha256',\n DEFAULT_ERR_MSG = 'The current environment doesn\\'t support interactive reading from TTY.',\n\n fs = require('fs'),\n TTY = process.binding('tty_wrap').TTY,\n childProc = require('child_process'),\n pathUtil = require('path'),\n\n defaultOptions = {\n /* eslint-disable key-spacing */\n prompt: '> ',\n hideEchoBack: false,\n mask: '*',\n limit: [],\n limitMessage: 'Input another, please.$<( [)limit(])>',\n defaultInput: '',\n trueValue: [],\n falseValue: [],\n caseSensitive: false,\n keepWhitespace: false,\n encoding: 'utf8',\n bufferSize: 1024,\n print: void 0,\n history: true,\n cd: false,\n phContent: void 0,\n preCheck: void 0\n /* eslint-enable key-spacing */\n },\n\n fdR = 'none', fdW, ttyR, isRawMode = false,\n extHostPath, extHostArgs, tempdir, salt = 0,\n lastInput = '', inputHistory = [], rawInput,\n _DBG_useExt = false, _DBG_checkOptions = false, _DBG_checkMethod = false;\n\nfunction getHostArgs(options) {\n // Send any text to crazy Windows shell safely.\n function encodeArg(arg) {\n return arg.replace(/[^\\w\\u0080-\\uFFFF]/g, function(chr) {\n return '#' + chr.charCodeAt(0) + ';';\n });\n }\n\n return extHostArgs.concat((function(conf) {\n var args = [];\n Object.keys(conf).forEach(function(optionName) {\n if (conf[optionName] === 'boolean') {\n if (options[optionName]) { args.push('--' + optionName); }\n } else if (conf[optionName] === 'string') {\n if (options[optionName]) {\n args.push('--' + optionName, encodeArg(options[optionName]));\n }\n }\n });\n return args;\n })({\n /* eslint-disable key-spacing */\n display: 'string',\n displayOnly: 'boolean',\n keyIn: 'boolean',\n hideEchoBack: 'boolean',\n mask: 'string',\n limit: 'string',\n caseSensitive: 'boolean'\n /* eslint-enable key-spacing */\n }));\n}\n\n// piping via files (for Node.js v0.10-)\nfunction _execFileSync(options, execOptions) {\n\n function getTempfile(name) {\n var filepath, suffix = '', fd;\n tempdir = tempdir || require('os').tmpdir();\n\n while (true) {\n filepath = pathUtil.join(tempdir, name + suffix);\n try {\n fd = fs.openSync(filepath, 'wx');\n } catch (e) {\n if (e.code === 'EEXIST') {\n suffix++;\n continue;\n } else {\n throw e;\n }\n }\n fs.closeSync(fd);\n break;\n }\n return filepath;\n }\n\n var hostArgs, shellPath, shellArgs, res = {}, exitCode, extMessage,\n pathStdout = getTempfile('readline-sync.stdout'),\n pathStderr = getTempfile('readline-sync.stderr'),\n pathExit = getTempfile('readline-sync.exit'),\n pathDone = getTempfile('readline-sync.done'),\n crypto = require('crypto'), shasum, decipher, password;\n\n shasum = crypto.createHash(ALGORITHM_HASH);\n shasum.update('' + process.pid + (salt++) + Math.random());\n password = shasum.digest('hex');\n decipher = crypto.createDecipher(ALGORITHM_CIPHER, password);\n\n hostArgs = getHostArgs(options);\n if (IS_WIN) {\n shellPath = process.env.ComSpec || 'cmd.exe';\n process.env.Q = '\"'; // The quote (\") that isn't escaped.\n // `()` for ignore space by echo\n shellArgs = ['/V:ON', '/S', '/C',\n '(%Q%' + shellPath + '%Q% /V:ON /S /C %Q%' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n '%Q%' + extHostPath + '%Q%' +\n hostArgs.map(function(arg) { return ' %Q%' + arg + '%Q%'; }).join('') +\n ' & (echo !ERRORLEVEL!)>%Q%' + pathExit + '%Q%%Q%) 2>%Q%' + pathStderr + '%Q%' +\n ' |%Q%' + process.execPath + '%Q% %Q%' + __dirname + '\\\\encrypt.js%Q%' +\n ' %Q%' + ALGORITHM_CIPHER + '%Q% %Q%' + password + '%Q%' +\n ' >%Q%' + pathStdout + '%Q%' +\n ' & (echo 1)>%Q%' + pathDone + '%Q%'];\n } else {\n shellPath = '/bin/sh';\n shellArgs = ['-c',\n // Use `()`, not `{}` for `-c` (text param)\n '(\"' + extHostPath + '\"' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n hostArgs.map(function(arg) { return \" '\" + arg.replace(/'/g, \"'\\\\''\") + \"'\"; }).join('') +\n '; echo $?>\"' + pathExit + '\") 2>\"' + pathStderr + '\"' +\n ' |\"' + process.execPath + '\" \"' + __dirname + '/encrypt.js\"' +\n ' \"' + ALGORITHM_CIPHER + '\" \"' + password + '\"' +\n ' >\"' + pathStdout + '\"' +\n '; echo 1 >\"' + pathDone + '\"'];\n }\n if (_DBG_checkMethod) { _DBG_checkMethod('_execFileSync', hostArgs); }\n try {\n childProc.spawn(shellPath, shellArgs, execOptions);\n } catch (e) {\n res.error = new Error(e.message);\n res.error.method = '_execFileSync - spawn';\n res.error.program = shellPath;\n res.error.args = shellArgs;\n }\n\n while (fs.readFileSync(pathDone, {encoding: options.encoding}).trim() !== '1') {} // eslint-disable-line no-empty\n if ((exitCode =\n fs.readFileSync(pathExit, {encoding: options.encoding}).trim()) === '0') {\n res.input =\n decipher.update(fs.readFileSync(pathStdout, {encoding: 'binary'}),\n 'hex', options.encoding) +\n decipher.final(options.encoding);\n } else {\n extMessage = fs.readFileSync(pathStderr, {encoding: options.encoding}).trim();\n res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n res.error.method = '_execFileSync';\n res.error.program = shellPath;\n res.error.args = shellArgs;\n res.error.extMessage = extMessage;\n res.error.exitCode = +exitCode;\n }\n\n fs.unlinkSync(pathStdout);\n fs.unlinkSync(pathStderr);\n fs.unlinkSync(pathExit);\n fs.unlinkSync(pathDone);\n\n return res;\n}\n\nfunction readlineExt(options) {\n var hostArgs, res = {}, extMessage,\n execOptions = {env: process.env, encoding: options.encoding};\n\n if (!extHostPath) {\n if (IS_WIN) {\n if (process.env.PSModulePath) { // Windows PowerShell\n extHostPath = 'powershell.exe';\n extHostArgs = ['-ExecutionPolicy', 'Bypass', '-File', __dirname + '\\\\read.ps1']; // eslint-disable-line no-path-concat\n } else { // Windows Script Host\n extHostPath = 'cscript.exe';\n extHostArgs = ['//nologo', __dirname + '\\\\read.cs.js']; // eslint-disable-line no-path-concat\n }\n } else {\n extHostPath = '/bin/sh';\n extHostArgs = [__dirname + '/read.sh']; // eslint-disable-line no-path-concat\n }\n }\n if (IS_WIN && !process.env.PSModulePath) { // Windows Script Host\n // ScriptPW (Win XP and Server2003) needs TTY stream as STDIN.\n // In this case, If STDIN isn't TTY, an error is thrown.\n execOptions.stdio = [process.stdin];\n }\n\n if (childProc.execFileSync) {\n hostArgs = getHostArgs(options);\n if (_DBG_checkMethod) { _DBG_checkMethod('execFileSync', hostArgs); }\n try {\n res.input = childProc.execFileSync(extHostPath, hostArgs, execOptions);\n } catch (e) { // non-zero exit code\n extMessage = e.stderr ? (e.stderr + '').trim() : '';\n res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n res.error.method = 'execFileSync';\n res.error.program = extHostPath;\n res.error.args = hostArgs;\n res.error.extMessage = extMessage;\n res.error.exitCode = e.status;\n res.error.code = e.code;\n res.error.signal = e.signal;\n }\n } else {\n res = _execFileSync(options, execOptions);\n }\n if (!res.error) {\n res.input = res.input.replace(/^\\s*'|'\\s*$/g, '');\n options.display = '';\n }\n\n return res;\n}\n\n/*\n display: string\n displayOnly: boolean\n keyIn: boolean\n hideEchoBack: boolean\n mask: string\n limit: string (pattern)\n caseSensitive: boolean\n keepWhitespace: boolean\n encoding, bufferSize, print\n*/\nfunction _readlineSync(options) {\n var input = '', displaySave = options.display,\n silent = !options.display &&\n options.keyIn && options.hideEchoBack && !options.mask;\n\n function tryExt() {\n var res = readlineExt(options);\n if (res.error) { throw res.error; }\n return res.input;\n }\n\n if (_DBG_checkOptions) { _DBG_checkOptions(options); }\n\n (function() { // open TTY\n var fsB, constants, verNum;\n\n function getFsB() {\n if (!fsB) {\n fsB = process.binding('fs'); // For raw device path\n constants = process.binding('constants');\n }\n return fsB;\n }\n\n if (typeof fdR !== 'string') { return; }\n fdR = null;\n\n if (IS_WIN) {\n // iojs-v2.3.2+ input stream can't read first line. (#18)\n // ** Don't get process.stdin before check! **\n // Fixed v5.1.0\n // Fixed v4.2.4\n // It regressed again in v5.6.0, it is fixed in v6.2.0.\n verNum = (function(ver) { // getVerNum\n var nums = ver.replace(/^\\D+/, '').split('.');\n var verNum = 0;\n if ((nums[0] = +nums[0])) { verNum += nums[0] * 10000; }\n if ((nums[1] = +nums[1])) { verNum += nums[1] * 100; }\n if ((nums[2] = +nums[2])) { verNum += nums[2]; }\n return verNum;\n })(process.version);\n if (!(verNum >= 20302 && verNum < 40204 || verNum >= 50000 && verNum < 50100 || verNum >= 50600 && verNum < 60200) &&\n process.stdin.isTTY) {\n process.stdin.pause();\n fdR = process.stdin.fd;\n ttyR = process.stdin._handle;\n } else {\n try {\n // The stream by fs.openSync('\\\\\\\\.\\\\CON', 'r') can't switch to raw mode.\n // 'CONIN$' might fail on XP, 2000, 7 (x86).\n fdR = getFsB().open('CONIN$', constants.O_RDWR, parseInt('0666', 8));\n ttyR = new TTY(fdR, true);\n } catch (e) { /* ignore */ }\n }\n\n if (process.stdout.isTTY) {\n fdW = process.stdout.fd;\n } else {\n try {\n fdW = fs.openSync('\\\\\\\\.\\\\CON', 'w');\n } catch (e) { /* ignore */ }\n if (typeof fdW !== 'number') { // Retry\n try {\n fdW = getFsB().open('CONOUT$', constants.O_RDWR, parseInt('0666', 8));\n } catch (e) { /* ignore */ }\n }\n }\n\n } else {\n if (process.stdin.isTTY) {\n process.stdin.pause();\n try {\n fdR = fs.openSync('/dev/tty', 'r'); // device file, not process.stdin\n ttyR = process.stdin._handle;\n } catch (e) { /* ignore */ }\n } else {\n // Node.js v0.12 read() fails.\n try {\n fdR = fs.openSync('/dev/tty', 'r');\n ttyR = new TTY(fdR, false);\n } catch (e) { /* ignore */ }\n }\n\n if (process.stdout.isTTY) {\n fdW = process.stdout.fd;\n } else {\n try {\n fdW = fs.openSync('/dev/tty', 'w');\n } catch (e) { /* ignore */ }\n }\n }\n })();\n\n (function() { // try read\n var atEol, limit,\n isCooked = !options.hideEchoBack && !options.keyIn,\n buffer, reqSize, readSize, chunk, line;\n rawInput = '';\n\n // Node.js v0.10- returns an error if same mode is set.\n function setRawMode(mode) {\n if (mode === isRawMode) { return true; }\n if (ttyR.setRawMode(mode) !== 0) { return false; }\n isRawMode = mode;\n return true;\n }\n\n if (_DBG_useExt || !ttyR ||\n typeof fdW !== 'number' && (options.display || !isCooked)) {\n input = tryExt();\n return;\n }\n\n if (options.display) {\n fs.writeSync(fdW, options.display);\n options.display = '';\n }\n if (options.displayOnly) { return; }\n\n if (!setRawMode(!isCooked)) {\n input = tryExt();\n return;\n }\n\n reqSize = options.keyIn ? 1 : options.bufferSize;\n // Check `allocUnsafe` to make sure of the new API.\n buffer = Buffer.allocUnsafe && Buffer.alloc ? Buffer.alloc(reqSize) : new Buffer(reqSize);\n\n if (options.keyIn && options.limit) {\n limit = new RegExp('[^' + options.limit + ']',\n 'g' + (options.caseSensitive ? '' : 'i'));\n }\n\n while (true) {\n readSize = 0;\n try {\n readSize = fs.readSync(fdR, buffer, 0, reqSize);\n } catch (e) {\n if (e.code !== 'EOF') {\n setRawMode(false);\n input += tryExt();\n return;\n }\n }\n if (readSize > 0) {\n chunk = buffer.toString(options.encoding, 0, readSize);\n rawInput += chunk;\n } else {\n chunk = '\\n';\n rawInput += String.fromCharCode(0);\n }\n\n if (chunk && typeof (line = (chunk.match(/^(.*?)[\\r\\n]/) || [])[1]) === 'string') {\n chunk = line;\n atEol = true;\n }\n\n // other ctrl-chars\n // eslint-disable-next-line no-control-regex\n if (chunk) { chunk = chunk.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, ''); }\n if (chunk && limit) { chunk = chunk.replace(limit, ''); }\n\n if (chunk) {\n if (!isCooked) {\n if (!options.hideEchoBack) {\n fs.writeSync(fdW, chunk);\n } else if (options.mask) {\n fs.writeSync(fdW, (new Array(chunk.length + 1)).join(options.mask));\n }\n }\n input += chunk;\n }\n\n if (!options.keyIn && atEol ||\n options.keyIn && input.length >= reqSize) { break; }\n }\n\n if (!isCooked && !silent) { fs.writeSync(fdW, '\\n'); }\n setRawMode(false);\n })();\n\n if (options.print && !silent) {\n options.print(displaySave + (options.displayOnly ? '' :\n (options.hideEchoBack ? (new Array(input.length + 1)).join(options.mask)\n : input) + '\\n'), // must at least write '\\n'\n options.encoding);\n }\n\n return options.displayOnly ? '' :\n (lastInput = options.keepWhitespace || options.keyIn ? input : input.trim());\n}\n\nfunction flattenArray(array, validator) {\n var flatArray = [];\n function _flattenArray(array) {\n if (array == null) {\n return;\n } else if (Array.isArray(array)) {\n array.forEach(_flattenArray);\n } else if (!validator || validator(array)) {\n flatArray.push(array);\n }\n }\n _flattenArray(array);\n return flatArray;\n}\n\nfunction escapePattern(pattern) {\n return pattern.replace(/[\\x00-\\x7f]/g, // eslint-disable-line no-control-regex\n function(s) { return '\\\\x' + ('00' + s.charCodeAt().toString(16)).substr(-2); });\n}\n\n// margeOptions(options1, options2 ... )\n// margeOptions(true, options1, options2 ... )\n// arg1=true : Start from defaultOptions and pick elements of that.\nfunction margeOptions() {\n var optionsList = Array.prototype.slice.call(arguments),\n optionNames, fromDefault;\n\n if (optionsList.length && typeof optionsList[0] === 'boolean') {\n fromDefault = optionsList.shift();\n if (fromDefault) {\n optionNames = Object.keys(defaultOptions);\n optionsList.unshift(defaultOptions);\n }\n }\n\n return optionsList.reduce(function(options, optionsPart) {\n if (optionsPart == null) { return options; }\n\n // ======== DEPRECATED ========\n if (optionsPart.hasOwnProperty('noEchoBack') &&\n !optionsPart.hasOwnProperty('hideEchoBack')) {\n optionsPart.hideEchoBack = optionsPart.noEchoBack;\n delete optionsPart.noEchoBack;\n }\n if (optionsPart.hasOwnProperty('noTrim') &&\n !optionsPart.hasOwnProperty('keepWhitespace')) {\n optionsPart.keepWhitespace = optionsPart.noTrim;\n delete optionsPart.noTrim;\n }\n // ======== /DEPRECATED ========\n\n if (!fromDefault) { optionNames = Object.keys(optionsPart); }\n optionNames.forEach(function(optionName) {\n var value;\n if (!optionsPart.hasOwnProperty(optionName)) { return; }\n value = optionsPart[optionName];\n switch (optionName) {\n // _readlineSync <- * * -> defaultOptions\n // ================ string\n case 'mask': // * *\n case 'limitMessage': // *\n case 'defaultInput': // *\n case 'encoding': // * *\n value = value != null ? value + '' : '';\n if (value && optionName !== 'limitMessage') { value = value.replace(/[\\r\\n]/g, ''); }\n options[optionName] = value;\n break;\n // ================ number(int)\n case 'bufferSize': // * *\n if (!isNaN(value = parseInt(value, 10)) && typeof value === 'number') {\n options[optionName] = value; // limited updating (number is needed)\n }\n break;\n // ================ boolean\n case 'displayOnly': // *\n case 'keyIn': // *\n case 'hideEchoBack': // * *\n case 'caseSensitive': // * *\n case 'keepWhitespace': // * *\n case 'history': // *\n case 'cd': // *\n options[optionName] = !!value;\n break;\n // ================ array\n case 'limit': // * * to string for readlineExt\n case 'trueValue': // *\n case 'falseValue': // *\n options[optionName] = flattenArray(value, function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number' ||\n type === 'function' || value instanceof RegExp;\n }).map(function(value) {\n return typeof value === 'string' ? value.replace(/[\\r\\n]/g, '') : value;\n });\n break;\n // ================ function\n case 'print': // * *\n case 'phContent': // *\n case 'preCheck': // *\n options[optionName] = typeof value === 'function' ? value : void 0;\n break;\n // ================ other\n case 'prompt': // *\n case 'display': // *\n options[optionName] = value != null ? value : '';\n break;\n // no default\n }\n });\n return options;\n }, {});\n}\n\nfunction isMatched(res, comps, caseSensitive) {\n return comps.some(function(comp) {\n var type = typeof comp;\n return type === 'string' ?\n (caseSensitive ? res === comp : res.toLowerCase() === comp.toLowerCase()) :\n type === 'number' ? parseFloat(res) === comp :\n type === 'function' ? comp(res) :\n comp instanceof RegExp ? comp.test(res) : false;\n });\n}\n\nfunction replaceHomePath(path, expand) {\n var homePath = pathUtil.normalize(\n IS_WIN ? (process.env.HOMEDRIVE || '') + (process.env.HOMEPATH || '') :\n process.env.HOME || '').replace(/[\\/\\\\]+$/, '');\n path = pathUtil.normalize(path);\n return expand ? path.replace(/^~(?=\\/|\\\\|$)/, homePath) :\n path.replace(new RegExp('^' + escapePattern(homePath) +\n '(?=\\\\/|\\\\\\\\|$)', IS_WIN ? 'i' : ''), '~');\n}\n\nfunction replacePlaceholder(text, generator) {\n var PTN_INNER = '(?:\\\\(([\\\\s\\\\S]*?)\\\\))?(\\\\w+|.-.)(?:\\\\(([\\\\s\\\\S]*?)\\\\))?',\n rePlaceholder = new RegExp('(\\\\$)?(\\\\$<' + PTN_INNER + '>)', 'g'),\n rePlaceholderCompat = new RegExp('(\\\\$)?(\\\\$\\\\{' + PTN_INNER + '\\\\})', 'g');\n\n function getPlaceholderText(s, escape, placeholder, pre, param, post) {\n var text;\n return escape || typeof (text = generator(param)) !== 'string' ? placeholder :\n text ? (pre || '') + text + (post || '') : '';\n }\n\n return text.replace(rePlaceholder, getPlaceholderText)\n .replace(rePlaceholderCompat, getPlaceholderText);\n}\n\nfunction array2charlist(array, caseSensitive, collectSymbols) {\n var values, group = [], groupClass = -1, charCode = 0, symbols = '', suppressed;\n function addGroup(groups, group) {\n if (group.length > 3) { // ellipsis\n groups.push(group[0] + '...' + group[group.length - 1]);\n suppressed = true;\n } else if (group.length) {\n groups = groups.concat(group);\n }\n return groups;\n }\n\n values = array.reduce(\n function(chars, value) { return chars.concat((value + '').split('')); }, [])\n .reduce(function(groups, curChar) {\n var curGroupClass, curCharCode;\n if (!caseSensitive) { curChar = curChar.toLowerCase(); }\n curGroupClass = /^\\d$/.test(curChar) ? 1 :\n /^[A-Z]$/.test(curChar) ? 2 : /^[a-z]$/.test(curChar) ? 3 : 0;\n if (collectSymbols && curGroupClass === 0) {\n symbols += curChar;\n } else {\n curCharCode = curChar.charCodeAt(0);\n if (curGroupClass && curGroupClass === groupClass &&\n curCharCode === charCode + 1) {\n group.push(curChar);\n } else {\n groups = addGroup(groups, group);\n group = [curChar];\n groupClass = curGroupClass;\n }\n charCode = curCharCode;\n }\n return groups;\n }, []);\n values = addGroup(values, group); // last group\n if (symbols) { values.push(symbols); suppressed = true; }\n return {values: values, suppressed: suppressed};\n}\n\nfunction joinChunks(chunks, suppressed) {\n return chunks.join(chunks.length > 2 ? ', ' : suppressed ? ' / ' : '/');\n}\n\nfunction getPhContent(param, options) {\n var text, values, resCharlist = {}, arg;\n if (options.phContent) {\n text = options.phContent(param, options);\n }\n if (typeof text !== 'string') {\n switch (param) {\n case 'hideEchoBack':\n case 'mask':\n case 'defaultInput':\n case 'caseSensitive':\n case 'keepWhitespace':\n case 'encoding':\n case 'bufferSize':\n case 'history':\n case 'cd':\n text = !options.hasOwnProperty(param) ? '' :\n typeof options[param] === 'boolean' ? (options[param] ? 'on' : 'off') :\n options[param] + '';\n break;\n // case 'prompt':\n // case 'query':\n // case 'display':\n // text = options.hasOwnProperty('displaySrc') ? options.displaySrc + '' : '';\n // break;\n case 'limit':\n case 'trueValue':\n case 'falseValue':\n values = options[options.hasOwnProperty(param + 'Src') ? param + 'Src' : param];\n if (options.keyIn) { // suppress\n resCharlist = array2charlist(values, options.caseSensitive);\n values = resCharlist.values;\n } else {\n values = values.filter(function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number';\n });\n }\n text = joinChunks(values, resCharlist.suppressed);\n break;\n case 'limitCount':\n case 'limitCountNotZero':\n text = options[options.hasOwnProperty('limitSrc') ?\n 'limitSrc' : 'limit'].length;\n text = text || param !== 'limitCountNotZero' ? text + '' : '';\n break;\n case 'lastInput':\n text = lastInput;\n break;\n case 'cwd':\n case 'CWD':\n case 'cwdHome':\n text = process.cwd();\n if (param === 'CWD') {\n text = pathUtil.basename(text);\n } else if (param === 'cwdHome') {\n text = replaceHomePath(text);\n }\n break;\n case 'date':\n case 'time':\n case 'localeDate':\n case 'localeTime':\n text = (new Date())['to' +\n param.replace(/^./, function(str) { return str.toUpperCase(); }) +\n 'String']();\n break;\n default: // with arg\n if (typeof (arg = (param.match(/^history_m(\\d+)$/) || [])[1]) === 'string') {\n text = inputHistory[inputHistory.length - arg] || '';\n }\n }\n }\n return text;\n}\n\nfunction getPhCharlist(param) {\n var matches = /^(.)-(.)$/.exec(param), text = '', from, to, code, step;\n if (!matches) { return null; }\n from = matches[1].charCodeAt(0);\n to = matches[2].charCodeAt(0);\n step = from < to ? 1 : -1;\n for (code = from; code !== to + step; code += step) { text += String.fromCharCode(code); }\n return text;\n}\n\n// cmd \"arg\" \" a r g \" \"\" 'a\"r\"g' \"a\"\"rg\" \"arg\nfunction parseCl(cl) {\n var reToken = new RegExp(/(\\s*)(?:(\"|')(.*?)(?:\\2|$)|(\\S+))/g), matches,\n taken = '', args = [], part;\n cl = cl.trim();\n while ((matches = reToken.exec(cl))) {\n part = matches[3] || matches[4] || '';\n if (matches[1]) {\n args.push(taken);\n taken = '';\n }\n taken += part;\n }\n if (taken) { args.push(taken); }\n return args;\n}\n\nfunction toBool(res, options) {\n return (\n (options.trueValue.length &&\n isMatched(res, options.trueValue, options.caseSensitive)) ? true :\n (options.falseValue.length &&\n isMatched(res, options.falseValue, options.caseSensitive)) ? false : res);\n}\n\nfunction getValidLine(options) {\n var res, forceNext, limitMessage,\n matches, histInput, args, resCheck;\n\n function _getPhContent(param) { return getPhContent(param, options); }\n function addDisplay(text) { options.display += (/[^\\r\\n]$/.test(options.display) ? '\\n' : '') + text; }\n\n options.limitSrc = options.limit;\n options.displaySrc = options.display;\n options.limit = ''; // for readlineExt\n options.display = replacePlaceholder(options.display + '', _getPhContent);\n\n while (true) {\n res = _readlineSync(options);\n forceNext = false;\n limitMessage = '';\n\n if (options.defaultInput && !res) { res = options.defaultInput; }\n\n if (options.history) {\n if ((matches = /^\\s*\\!(?:\\!|-1)(:p)?\\s*$/.exec(res))) { // `!!` `!-1` +`:p`\n histInput = inputHistory[0] || '';\n if (matches[1]) { // only display\n forceNext = true;\n } else { // replace input\n res = histInput;\n }\n // Show it even if it is empty (NL only).\n addDisplay(histInput + '\\n');\n if (!forceNext) { // Loop may break\n options.displayOnly = true;\n _readlineSync(options);\n options.displayOnly = false;\n }\n } else if (res && res !== inputHistory[inputHistory.length - 1]) {\n inputHistory = [res];\n }\n }\n\n if (!forceNext && options.cd && res) {\n args = parseCl(res);\n switch (args[0].toLowerCase()) {\n case 'cd':\n if (args[1]) {\n try {\n process.chdir(replaceHomePath(args[1], true));\n } catch (e) {\n addDisplay(e + '');\n }\n }\n forceNext = true;\n break;\n case 'pwd':\n addDisplay(process.cwd());\n forceNext = true;\n break;\n // no default\n }\n }\n\n if (!forceNext && options.preCheck) {\n resCheck = options.preCheck(res, options);\n res = resCheck.res;\n if (resCheck.forceNext) { forceNext = true; } // Don't switch to false.\n }\n\n if (!forceNext) {\n if (!options.limitSrc.length ||\n isMatched(res, options.limitSrc, options.caseSensitive)) { break; }\n if (options.limitMessage) {\n limitMessage = replacePlaceholder(options.limitMessage, _getPhContent);\n }\n }\n\n addDisplay((limitMessage ? limitMessage + '\\n' : '') +\n replacePlaceholder(options.displaySrc + '', _getPhContent));\n }\n return toBool(res, options);\n}\n\n// for dev\nexports._DBG_set_useExt = function(val) { _DBG_useExt = val; };\nexports._DBG_set_checkOptions = function(val) { _DBG_checkOptions = val; };\nexports._DBG_set_checkMethod = function(val) { _DBG_checkMethod = val; };\nexports._DBG_clearHistory = function() { lastInput = ''; inputHistory = []; };\n\n// ------------------------------------\n\nexports.setDefaultOptions = function(options) {\n defaultOptions = margeOptions(true, options);\n return margeOptions(true); // copy\n};\n\nexports.question = function(query, options) {\n /* eslint-disable key-spacing */\n return getValidLine(margeOptions(margeOptions(true, options), {\n display: query\n }));\n /* eslint-enable key-spacing */\n};\n\nexports.prompt = function(options) {\n var readOptions = margeOptions(true, options);\n readOptions.display = readOptions.prompt;\n return getValidLine(readOptions);\n};\n\nexports.keyIn = function(query, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions(margeOptions(true, options), {\n display: query,\n keyIn: true,\n keepWhitespace: true\n });\n /* eslint-enable key-spacing */\n\n // char list\n readOptions.limitSrc = readOptions.limit.filter(function(value) {\n var type = typeof value;\n return type === 'string' || type === 'number';\n })\n .map(function(text) { return replacePlaceholder(text + '', getPhCharlist); });\n // pattern\n readOptions.limit = escapePattern(readOptions.limitSrc.join(''));\n\n ['trueValue', 'falseValue'].forEach(function(optionName) {\n readOptions[optionName] = readOptions[optionName].reduce(function(comps, comp) {\n var type = typeof comp;\n if (type === 'string' || type === 'number') {\n comps = comps.concat((comp + '').split(''));\n } else { comps.push(comp); }\n return comps;\n }, []);\n });\n\n readOptions.display = replacePlaceholder(readOptions.display + '',\n function(param) { return getPhContent(param, readOptions); });\n\n return toBool(_readlineSync(readOptions), readOptions);\n};\n\n// ------------------------------------\n\nexports.questionEMail = function(query, options) {\n if (query == null) { query = 'Input e-mail address: '; }\n /* eslint-disable key-spacing */\n return exports.question(query, margeOptions({\n // -------- default\n hideEchoBack: false,\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address\n limit: /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,\n limitMessage: 'Input valid e-mail address, please.',\n trueValue: null,\n falseValue: null\n }, options, {\n // -------- forced\n keepWhitespace: false,\n cd: false\n }));\n /* eslint-enable key-spacing */\n};\n\nexports.questionNewPassword = function(query, options) {\n /* eslint-disable key-spacing */\n var resCharlist, min, max,\n readOptions = margeOptions({\n // -------- default\n hideEchoBack: true,\n mask: '*',\n limitMessage: 'It can include: $\\n' +\n 'And the length must be: $',\n trueValue: null,\n falseValue: null,\n caseSensitive: true\n }, options, {\n // -------- forced\n history: false,\n cd: false,\n // limit (by charlist etc.),\n phContent: function(param) {\n return param === 'charlist' ? resCharlist.text :\n param === 'length' ? min + '...' + max : null;\n }\n }),\n // added: charlist, min, max, confirmMessage, unmatchMessage\n charlist, confirmMessage, unmatchMessage,\n limit, limitMessage, res1, res2;\n /* eslint-enable key-spacing */\n options = options || {};\n\n charlist = replacePlaceholder(\n options.charlist ? options.charlist + '' : '$', getPhCharlist);\n if (isNaN(min = parseInt(options.min, 10)) || typeof min !== 'number') { min = 12; }\n if (isNaN(max = parseInt(options.max, 10)) || typeof max !== 'number') { max = 24; }\n limit = new RegExp('^[' + escapePattern(charlist) +\n ']{' + min + ',' + max + '}$');\n resCharlist = array2charlist([charlist], readOptions.caseSensitive, true);\n resCharlist.text = joinChunks(resCharlist.values, resCharlist.suppressed);\n\n confirmMessage = options.confirmMessage != null ? options.confirmMessage :\n 'Reinput a same one to confirm it: ';\n unmatchMessage = options.unmatchMessage != null ? options.unmatchMessage :\n 'It differs from first one.' +\n ' Hit only the Enter key if you want to retry from first one.';\n\n if (query == null) { query = 'Input new password: '; }\n\n limitMessage = readOptions.limitMessage;\n while (!res2) {\n readOptions.limit = limit;\n readOptions.limitMessage = limitMessage;\n res1 = exports.question(query, readOptions);\n\n readOptions.limit = [res1, ''];\n readOptions.limitMessage = unmatchMessage;\n res2 = exports.question(confirmMessage, readOptions);\n }\n\n return res1;\n};\n\nfunction _questionNum(query, options, parser) {\n var validValue;\n function getValidValue(value) {\n validValue = parser(value);\n return !isNaN(validValue) && typeof validValue === 'number';\n }\n /* eslint-disable key-spacing */\n exports.question(query, margeOptions({\n // -------- default\n limitMessage: 'Input valid number, please.'\n }, options, {\n // -------- forced\n limit: getValidValue,\n cd: false\n // trueValue, falseValue, caseSensitive, keepWhitespace don't work.\n }));\n /* eslint-enable key-spacing */\n return validValue;\n}\nexports.questionInt = function(query, options) {\n return _questionNum(query, options, function(value) { return parseInt(value, 10); });\n};\nexports.questionFloat = function(query, options) {\n return _questionNum(query, options, parseFloat);\n};\n\nexports.questionPath = function(query, options) {\n /* eslint-disable key-spacing */\n var validPath, error = '',\n readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: '$Input valid path, please.' +\n '$<( Min:)min>$<( Max:)max>',\n history: true,\n cd: true\n }, options, {\n // -------- forced\n keepWhitespace: false,\n limit: function(value) {\n var exists, stat, res;\n value = replaceHomePath(value, true);\n error = ''; // for validate\n // mkdir -p\n function mkdirParents(dirPath) {\n dirPath.split(/\\/|\\\\/).reduce(function(parents, dir) {\n var path = pathUtil.resolve((parents += dir + pathUtil.sep));\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path);\n } else if (!fs.statSync(path).isDirectory()) {\n throw new Error('Non directory already exists: ' + path);\n }\n return parents;\n }, '');\n }\n\n try {\n exists = fs.existsSync(value);\n validPath = exists ? fs.realpathSync(value) : pathUtil.resolve(value);\n // options.exists default: true, not-bool: no-check\n if (!options.hasOwnProperty('exists') && !exists ||\n typeof options.exists === 'boolean' && options.exists !== exists) {\n error = (exists ? 'Already exists' : 'No such file or directory') +\n ': ' + validPath;\n return false;\n }\n if (!exists && options.create) {\n if (options.isDirectory) {\n mkdirParents(validPath);\n } else {\n mkdirParents(pathUtil.dirname(validPath));\n fs.closeSync(fs.openSync(validPath, 'w')); // touch\n }\n validPath = fs.realpathSync(validPath);\n }\n if (exists && (options.min || options.max ||\n options.isFile || options.isDirectory)) {\n stat = fs.statSync(validPath);\n // type check first (directory has zero size)\n if (options.isFile && !stat.isFile()) {\n error = 'Not file: ' + validPath;\n return false;\n } else if (options.isDirectory && !stat.isDirectory()) {\n error = 'Not directory: ' + validPath;\n return false;\n } else if (options.min && stat.size < +options.min ||\n options.max && stat.size > +options.max) {\n error = 'Size ' + stat.size + ' is out of range: ' + validPath;\n return false;\n }\n }\n if (typeof options.validate === 'function' &&\n (res = options.validate(validPath)) !== true) {\n if (typeof res === 'string') { error = res; }\n return false;\n }\n } catch (e) {\n error = e + '';\n return false;\n }\n return true;\n },\n // trueValue, falseValue, caseSensitive don't work.\n phContent: function(param) {\n return param === 'error' ? error :\n param !== 'min' && param !== 'max' ? null :\n options.hasOwnProperty(param) ? options[param] + '' : '';\n }\n });\n // added: exists, create, min, max, isFile, isDirectory, validate\n /* eslint-enable key-spacing */\n options = options || {};\n\n if (query == null) { query = 'Input path (you can \"cd\" and \"pwd\"): '; }\n\n exports.question(query, readOptions);\n return validPath;\n};\n\n// props: preCheck, args, hRes, limit\nfunction getClHandler(commandHandler, options) {\n var clHandler = {}, hIndex = {};\n if (typeof commandHandler === 'object') {\n Object.keys(commandHandler).forEach(function(cmd) {\n if (typeof commandHandler[cmd] === 'function') {\n hIndex[options.caseSensitive ? cmd : cmd.toLowerCase()] = commandHandler[cmd];\n }\n });\n clHandler.preCheck = function(res) {\n var cmdKey;\n clHandler.args = parseCl(res);\n cmdKey = clHandler.args[0] || '';\n if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n clHandler.hRes =\n cmdKey !== '_' && hIndex.hasOwnProperty(cmdKey) ?\n hIndex[cmdKey].apply(res, clHandler.args.slice(1)) :\n hIndex.hasOwnProperty('_') ? hIndex._.apply(res, clHandler.args) : null;\n return {res: res, forceNext: false};\n };\n if (!hIndex.hasOwnProperty('_')) {\n clHandler.limit = function() { // It's called after preCheck.\n var cmdKey = clHandler.args[0] || '';\n if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n return hIndex.hasOwnProperty(cmdKey);\n };\n }\n } else {\n clHandler.preCheck = function(res) {\n clHandler.args = parseCl(res);\n clHandler.hRes = typeof commandHandler === 'function' ?\n commandHandler.apply(res, clHandler.args) : true; // true for break loop\n return {res: res, forceNext: false};\n };\n }\n return clHandler;\n}\n\nexports.promptCL = function(commandHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: 'Requested command is not available.',\n caseSensitive: false,\n history: true\n }, options),\n // -------- forced\n // trueValue, falseValue, keepWhitespace don't work.\n // preCheck, limit (by clHandler)\n clHandler = getClHandler(commandHandler, readOptions);\n /* eslint-enable key-spacing */\n readOptions.limit = clHandler.limit;\n readOptions.preCheck = clHandler.preCheck;\n exports.prompt(readOptions);\n return clHandler.args;\n};\n\nexports.promptLoop = function(inputHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n trueValue: null,\n falseValue: null,\n caseSensitive: false,\n history: true\n }, options);\n /* eslint-enable key-spacing */\n while (true) { if (inputHandler(exports.prompt(readOptions))) { break; } }\n return;\n};\n\nexports.promptCLLoop = function(commandHandler, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false,\n limitMessage: 'Requested command is not available.',\n caseSensitive: false,\n history: true\n }, options),\n // -------- forced\n // trueValue, falseValue, keepWhitespace don't work.\n // preCheck, limit (by clHandler)\n clHandler = getClHandler(commandHandler, readOptions);\n /* eslint-enable key-spacing */\n readOptions.limit = clHandler.limit;\n readOptions.preCheck = clHandler.preCheck;\n while (true) {\n exports.prompt(readOptions);\n if (clHandler.hRes) { break; }\n }\n return;\n};\n\nexports.promptSimShell = function(options) {\n /* eslint-disable key-spacing */\n return exports.prompt(margeOptions({\n // -------- default\n hideEchoBack: false,\n history: true\n }, options, {\n // -------- forced\n prompt: (function() {\n return IS_WIN ?\n '$>' :\n // 'user@host:cwd$ '\n (process.env.USER || '') +\n (process.env.HOSTNAME ?\n '@' + process.env.HOSTNAME.replace(/\\..*$/, '') : '') +\n ':$$ ';\n })()\n }));\n /* eslint-enable key-spacing */\n};\n\nfunction _keyInYN(query, options, limit) {\n var res;\n if (query == null) { query = 'Are you sure? '; }\n if ((!options || options.guide !== false) && (query += '')) {\n query = query.replace(/\\s*:?\\s*$/, '') + ' [y/n]: ';\n }\n /* eslint-disable key-spacing */\n res = exports.keyIn(query, margeOptions(options, {\n // -------- forced\n hideEchoBack: false,\n limit: limit,\n trueValue: 'y',\n falseValue: 'n',\n caseSensitive: false\n // mask doesn't work.\n }));\n // added: guide\n /* eslint-enable key-spacing */\n return typeof res === 'boolean' ? res : '';\n}\nexports.keyInYN = function(query, options) { return _keyInYN(query, options); };\nexports.keyInYNStrict = function(query, options) { return _keyInYN(query, options, 'yn'); };\n\nexports.keyInPause = function(query, options) {\n if (query == null) { query = 'Continue...'; }\n if ((!options || options.guide !== false) && (query += '')) {\n query = query.replace(/\\s+$/, '') + ' (Hit any key)';\n }\n /* eslint-disable key-spacing */\n exports.keyIn(query, margeOptions({\n // -------- default\n limit: null\n }, options, {\n // -------- forced\n hideEchoBack: true,\n mask: ''\n }));\n // added: guide\n /* eslint-enable key-spacing */\n return;\n};\n\nexports.keyInSelect = function(items, query, options) {\n /* eslint-disable key-spacing */\n var readOptions = margeOptions({\n // -------- default\n hideEchoBack: false\n }, options, {\n // -------- forced\n trueValue: null,\n falseValue: null,\n caseSensitive: false,\n // limit (by items),\n phContent: function(param) {\n return param === 'itemsCount' ? items.length + '' :\n param === 'firstItem' ? (items[0] + '').trim() :\n param === 'lastItem' ? (items[items.length - 1] + '').trim() : null;\n }\n }),\n // added: guide, cancel\n keylist = '', key2i = {}, charCode = 49 /* '1' */, display = '\\n';\n /* eslint-enable key-spacing */\n if (!Array.isArray(items) || !items.length || items.length > 35) {\n throw '`items` must be Array (max length: 35).';\n }\n\n items.forEach(function(item, i) {\n var key = String.fromCharCode(charCode);\n keylist += key;\n key2i[key] = i;\n display += '[' + key + '] ' + (item + '').trim() + '\\n';\n charCode = charCode === 57 /* '9' */ ? 97 /* 'a' */ : charCode + 1;\n });\n if (!options || options.cancel !== false) {\n keylist += '0';\n key2i['0'] = -1;\n display += '[0] ' +\n (options && options.cancel != null && typeof options.cancel !== 'boolean' ?\n (options.cancel + '').trim() : 'CANCEL') + '\\n';\n }\n readOptions.limit = keylist;\n display += '\\n';\n\n if (query == null) { query = 'Choose one from list: '; }\n if ((query += '')) {\n if (!options || options.guide !== false) {\n query = query.replace(/\\s*:?\\s*$/, '') + ' [$]: ';\n }\n display += query;\n }\n\n return key2i[exports.keyIn(display, readOptions).toLowerCase()];\n};\n\nexports.getRawInput = function() { return rawInput; };\n\n// ======== DEPRECATED ========\nfunction _setOption(optionName, args) {\n var options;\n if (args.length) { options = {}; options[optionName] = args[0]; }\n return exports.setDefaultOptions(options)[optionName];\n}\nexports.setPrint = function() { return _setOption('print', arguments); };\nexports.setPrompt = function() { return _setOption('prompt', arguments); };\nexports.setEncoding = function() { return _setOption('encoding', arguments); };\nexports.setMask = function() { return _setOption('mask', arguments); };\nexports.setBufferSize = function() { return _setOption('bufferSize', arguments); };\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\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\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\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'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var SvgPanZoom = require(\"./svg-pan-zoom.js\");\n\nmodule.exports = SvgPanZoom;\n","var SvgUtils = require(\"./svg-utilities\");\n\nmodule.exports = {\n enable: function(instance) {\n // Select (and create if necessary) defs\n var defs = instance.svg.querySelector(\"defs\");\n if (!defs) {\n defs = document.createElementNS(SvgUtils.svgNS, \"defs\");\n instance.svg.appendChild(defs);\n }\n\n // Check for style element, and create it if it doesn't exist\n var styleEl = defs.querySelector(\"style#svg-pan-zoom-controls-styles\");\n if (!styleEl) {\n var style = document.createElementNS(SvgUtils.svgNS, \"style\");\n style.setAttribute(\"id\", \"svg-pan-zoom-controls-styles\");\n style.setAttribute(\"type\", \"text/css\");\n style.textContent =\n \".svg-pan-zoom-control { cursor: pointer; fill: black; fill-opacity: 0.333; } .svg-pan-zoom-control:hover { fill-opacity: 0.8; } .svg-pan-zoom-control-background { fill: white; fill-opacity: 0.5; } .svg-pan-zoom-control-background { fill-opacity: 0.8; }\";\n defs.appendChild(style);\n }\n\n // Zoom Group\n var zoomGroup = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomGroup.setAttribute(\"id\", \"svg-pan-zoom-controls\");\n zoomGroup.setAttribute(\n \"transform\",\n \"translate(\" +\n (instance.width - 70) +\n \" \" +\n (instance.height - 76) +\n \") scale(0.75)\"\n );\n zoomGroup.setAttribute(\"class\", \"svg-pan-zoom-control\");\n\n // Control elements\n zoomGroup.appendChild(this._createZoomIn(instance));\n zoomGroup.appendChild(this._createZoomReset(instance));\n zoomGroup.appendChild(this._createZoomOut(instance));\n\n // Finally append created element\n instance.svg.appendChild(zoomGroup);\n\n // Cache control instance\n instance.controlIcons = zoomGroup;\n },\n\n _createZoomIn: function(instance) {\n var zoomIn = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomIn.setAttribute(\"id\", \"svg-pan-zoom-zoom-in\");\n zoomIn.setAttribute(\"transform\", \"translate(30.5 5) scale(0.015)\");\n zoomIn.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomIn.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n zoomIn.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomIn();\n },\n false\n );\n\n var zoomInBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomInBackground.setAttribute(\"x\", \"0\");\n zoomInBackground.setAttribute(\"y\", \"0\");\n zoomInBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomInBackground.setAttribute(\"height\", \"1400\");\n zoomInBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomIn.appendChild(zoomInBackground);\n\n var zoomInShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomInShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z\"\n );\n zoomInShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomIn.appendChild(zoomInShape);\n\n return zoomIn;\n },\n\n _createZoomReset: function(instance) {\n // reset\n var resetPanZoomControl = document.createElementNS(SvgUtils.svgNS, \"g\");\n resetPanZoomControl.setAttribute(\"id\", \"svg-pan-zoom-reset-pan-zoom\");\n resetPanZoomControl.setAttribute(\"transform\", \"translate(5 35) scale(0.4)\");\n resetPanZoomControl.setAttribute(\"class\", \"svg-pan-zoom-control\");\n resetPanZoomControl.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n resetPanZoomControl.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().reset();\n },\n false\n );\n\n var resetPanZoomControlBackground = document.createElementNS(\n SvgUtils.svgNS,\n \"rect\"\n ); // TODO change these background space fillers to rounded rectangles so they look prettier\n resetPanZoomControlBackground.setAttribute(\"x\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"y\", \"2\");\n resetPanZoomControlBackground.setAttribute(\"width\", \"182\"); // larger than expected because the whole group is transformed to scale down\n resetPanZoomControlBackground.setAttribute(\"height\", \"58\");\n resetPanZoomControlBackground.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-background\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlBackground);\n\n var resetPanZoomControlShape1 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"d\",\n \"M33.051,20.632c-0.742-0.406-1.854-0.609-3.338-0.609h-7.969v9.281h7.769c1.543,0,2.701-0.188,3.473-0.562c1.365-0.656,2.048-1.953,2.048-3.891C35.032,22.757,34.372,21.351,33.051,20.632z\"\n );\n resetPanZoomControlShape1.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape1);\n\n var resetPanZoomControlShape2 = document.createElementNS(\n SvgUtils.svgNS,\n \"path\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"d\",\n \"M170.231,0.5H15.847C7.102,0.5,0.5,5.708,0.5,11.84v38.861C0.5,56.833,7.102,61.5,15.847,61.5h154.384c8.745,0,15.269-4.667,15.269-10.798V11.84C185.5,5.708,178.976,0.5,170.231,0.5z M42.837,48.569h-7.969c-0.219-0.766-0.375-1.383-0.469-1.852c-0.188-0.969-0.289-1.961-0.305-2.977l-0.047-3.211c-0.03-2.203-0.41-3.672-1.142-4.406c-0.732-0.734-2.103-1.102-4.113-1.102h-7.05v13.547h-7.055V14.022h16.524c2.361,0.047,4.178,0.344,5.45,0.891c1.272,0.547,2.351,1.352,3.234,2.414c0.731,0.875,1.31,1.844,1.737,2.906s0.64,2.273,0.64,3.633c0,1.641-0.414,3.254-1.242,4.84s-2.195,2.707-4.102,3.363c1.594,0.641,2.723,1.551,3.387,2.73s0.996,2.98,0.996,5.402v2.32c0,1.578,0.063,2.648,0.19,3.211c0.19,0.891,0.635,1.547,1.333,1.969V48.569z M75.579,48.569h-26.18V14.022h25.336v6.117H56.454v7.336h16.781v6H56.454v8.883h19.125V48.569z M104.497,46.331c-2.44,2.086-5.887,3.129-10.34,3.129c-4.548,0-8.125-1.027-10.731-3.082s-3.909-4.879-3.909-8.473h6.891c0.224,1.578,0.662,2.758,1.316,3.539c1.196,1.422,3.246,2.133,6.15,2.133c1.739,0,3.151-0.188,4.236-0.562c2.058-0.719,3.087-2.055,3.087-4.008c0-1.141-0.504-2.023-1.512-2.648c-1.008-0.609-2.607-1.148-4.796-1.617l-3.74-0.82c-3.676-0.812-6.201-1.695-7.576-2.648c-2.328-1.594-3.492-4.086-3.492-7.477c0-3.094,1.139-5.664,3.417-7.711s5.623-3.07,10.036-3.07c3.685,0,6.829,0.965,9.431,2.895c2.602,1.93,3.966,4.73,4.093,8.402h-6.938c-0.128-2.078-1.057-3.555-2.787-4.43c-1.154-0.578-2.587-0.867-4.301-0.867c-1.907,0-3.428,0.375-4.565,1.125c-1.138,0.75-1.706,1.797-1.706,3.141c0,1.234,0.561,2.156,1.682,2.766c0.721,0.406,2.25,0.883,4.589,1.43l6.063,1.43c2.657,0.625,4.648,1.461,5.975,2.508c2.059,1.625,3.089,3.977,3.089,7.055C108.157,41.624,106.937,44.245,104.497,46.331z M139.61,48.569h-26.18V14.022h25.336v6.117h-18.281v7.336h16.781v6h-16.781v8.883h19.125V48.569z M170.337,20.14h-10.336v28.43h-7.266V20.14h-10.383v-6.117h27.984V20.14z\"\n );\n resetPanZoomControlShape2.setAttribute(\n \"class\",\n \"svg-pan-zoom-control-element\"\n );\n resetPanZoomControl.appendChild(resetPanZoomControlShape2);\n\n return resetPanZoomControl;\n },\n\n _createZoomOut: function(instance) {\n // zoom out\n var zoomOut = document.createElementNS(SvgUtils.svgNS, \"g\");\n zoomOut.setAttribute(\"id\", \"svg-pan-zoom-zoom-out\");\n zoomOut.setAttribute(\"transform\", \"translate(30.5 70) scale(0.015)\");\n zoomOut.setAttribute(\"class\", \"svg-pan-zoom-control\");\n zoomOut.addEventListener(\n \"click\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n zoomOut.addEventListener(\n \"touchstart\",\n function() {\n instance.getPublicInstance().zoomOut();\n },\n false\n );\n\n var zoomOutBackground = document.createElementNS(SvgUtils.svgNS, \"rect\"); // TODO change these background space fillers to rounded rectangles so they look prettier\n zoomOutBackground.setAttribute(\"x\", \"0\");\n zoomOutBackground.setAttribute(\"y\", \"0\");\n zoomOutBackground.setAttribute(\"width\", \"1500\"); // larger than expected because the whole group is transformed to scale down\n zoomOutBackground.setAttribute(\"height\", \"1400\");\n zoomOutBackground.setAttribute(\"class\", \"svg-pan-zoom-control-background\");\n zoomOut.appendChild(zoomOutBackground);\n\n var zoomOutShape = document.createElementNS(SvgUtils.svgNS, \"path\");\n zoomOutShape.setAttribute(\n \"d\",\n \"M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z\"\n );\n zoomOutShape.setAttribute(\"class\", \"svg-pan-zoom-control-element\");\n zoomOut.appendChild(zoomOutShape);\n\n return zoomOut;\n },\n\n disable: function(instance) {\n if (instance.controlIcons) {\n instance.controlIcons.parentNode.removeChild(instance.controlIcons);\n instance.controlIcons = null;\n }\n }\n};\n","var SvgUtils = require(\"./svg-utilities\"),\n Utils = require(\"./utilities\");\n\nvar ShadowViewport = function(viewport, options) {\n this.init(viewport, options);\n};\n\n/**\n * Initialization\n *\n * @param {SVGElement} viewport\n * @param {Object} options\n */\nShadowViewport.prototype.init = function(viewport, options) {\n // DOM Elements\n this.viewport = viewport;\n this.options = options;\n\n // State cache\n this.originalState = { zoom: 1, x: 0, y: 0 };\n this.activeState = { zoom: 1, x: 0, y: 0 };\n\n this.updateCTMCached = Utils.proxy(this.updateCTM, this);\n\n // Create a custom requestAnimationFrame taking in account refreshRate\n this.requestAnimationFrame = Utils.createRequestAnimationFrame(\n this.options.refreshRate\n );\n\n // ViewBox\n this.viewBox = { x: 0, y: 0, width: 0, height: 0 };\n this.cacheViewBox();\n\n // Process CTM\n var newCTM = this.processCTM();\n\n // Update viewport CTM and cache zoom and pan\n this.setCTM(newCTM);\n\n // Update CTM in this frame\n this.updateCTM();\n};\n\n/**\n * Cache initial viewBox value\n * If no viewBox is defined, then use viewport size/position instead for viewBox values\n */\nShadowViewport.prototype.cacheViewBox = function() {\n var svgViewBox = this.options.svg.getAttribute(\"viewBox\");\n\n if (svgViewBox) {\n var viewBoxValues = svgViewBox\n .split(/[\\s\\,]/)\n .filter(function(v) {\n return v;\n })\n .map(parseFloat);\n\n // Cache viewbox x and y offset\n this.viewBox.x = viewBoxValues[0];\n this.viewBox.y = viewBoxValues[1];\n this.viewBox.width = viewBoxValues[2];\n this.viewBox.height = viewBoxValues[3];\n\n var zoom = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n\n // Update active state\n this.activeState.zoom = zoom;\n this.activeState.x = (this.options.width - this.viewBox.width * zoom) / 2;\n this.activeState.y = (this.options.height - this.viewBox.height * zoom) / 2;\n\n // Force updating CTM\n this.updateCTMOnNextFrame();\n\n this.options.svg.removeAttribute(\"viewBox\");\n } else {\n this.simpleViewBoxCache();\n }\n};\n\n/**\n * Recalculate viewport sizes and update viewBox cache\n */\nShadowViewport.prototype.simpleViewBoxCache = function() {\n var bBox = this.viewport.getBBox();\n\n this.viewBox.x = bBox.x;\n this.viewBox.y = bBox.y;\n this.viewBox.width = bBox.width;\n this.viewBox.height = bBox.height;\n};\n\n/**\n * Returns a viewbox object. Safe to alter\n *\n * @return {Object} viewbox object\n */\nShadowViewport.prototype.getViewBox = function() {\n return Utils.extend({}, this.viewBox);\n};\n\n/**\n * Get initial zoom and pan values. Save them into originalState\n * Parses viewBox attribute to alter initial sizes\n *\n * @return {CTM} CTM object based on options\n */\nShadowViewport.prototype.processCTM = function() {\n var newCTM = this.getCTM();\n\n if (this.options.fit || this.options.contain) {\n var newScale;\n if (this.options.fit) {\n newScale = Math.min(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n } else {\n newScale = Math.max(\n this.options.width / this.viewBox.width,\n this.options.height / this.viewBox.height\n );\n }\n\n newCTM.a = newScale; //x-scale\n newCTM.d = newScale; //y-scale\n newCTM.e = -this.viewBox.x * newScale; //x-transform\n newCTM.f = -this.viewBox.y * newScale; //y-transform\n }\n\n if (this.options.center) {\n var offsetX =\n (this.options.width -\n (this.viewBox.width + this.viewBox.x * 2) * newCTM.a) *\n 0.5,\n offsetY =\n (this.options.height -\n (this.viewBox.height + this.viewBox.y * 2) * newCTM.a) *\n 0.5;\n\n newCTM.e = offsetX;\n newCTM.f = offsetY;\n }\n\n // Cache initial values. Based on activeState and fix+center opitons\n this.originalState.zoom = newCTM.a;\n this.originalState.x = newCTM.e;\n this.originalState.y = newCTM.f;\n\n return newCTM;\n};\n\n/**\n * Return originalState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getOriginalState = function() {\n return Utils.extend({}, this.originalState);\n};\n\n/**\n * Return actualState object. Safe to alter\n *\n * @return {Object}\n */\nShadowViewport.prototype.getState = function() {\n return Utils.extend({}, this.activeState);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getZoom = function() {\n return this.activeState.zoom;\n};\n\n/**\n * Get zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.getRelativeZoom = function() {\n return this.activeState.zoom / this.originalState.zoom;\n};\n\n/**\n * Compute zoom scale for pubilc usage\n *\n * @return {Float} zoom scale\n */\nShadowViewport.prototype.computeRelativeZoom = function(scale) {\n return scale / this.originalState.zoom;\n};\n\n/**\n * Get pan\n *\n * @return {Object}\n */\nShadowViewport.prototype.getPan = function() {\n return { x: this.activeState.x, y: this.activeState.y };\n};\n\n/**\n * Return cached viewport CTM value that can be safely modified\n *\n * @return {SVGMatrix}\n */\nShadowViewport.prototype.getCTM = function() {\n var safeCTM = this.options.svg.createSVGMatrix();\n\n // Copy values manually as in FF they are not itterable\n safeCTM.a = this.activeState.zoom;\n safeCTM.b = 0;\n safeCTM.c = 0;\n safeCTM.d = this.activeState.zoom;\n safeCTM.e = this.activeState.x;\n safeCTM.f = this.activeState.y;\n\n return safeCTM;\n};\n\n/**\n * Set a new CTM\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.setCTM = function(newCTM) {\n var willZoom = this.isZoomDifferent(newCTM),\n willPan = this.isPanDifferent(newCTM);\n\n if (willZoom || willPan) {\n // Before zoom\n if (willZoom) {\n // If returns false then cancel zooming\n if (\n this.options.beforeZoom(\n this.getRelativeZoom(),\n this.computeRelativeZoom(newCTM.a)\n ) === false\n ) {\n newCTM.a = newCTM.d = this.activeState.zoom;\n willZoom = false;\n } else {\n this.updateCache(newCTM);\n this.options.onZoom(this.getRelativeZoom());\n }\n }\n\n // Before pan\n if (willPan) {\n var preventPan = this.options.beforePan(this.getPan(), {\n x: newCTM.e,\n y: newCTM.f\n }),\n // If prevent pan is an object\n preventPanX = false,\n preventPanY = false;\n\n // If prevent pan is Boolean false\n if (preventPan === false) {\n // Set x and y same as before\n newCTM.e = this.getPan().x;\n newCTM.f = this.getPan().y;\n\n preventPanX = preventPanY = true;\n } else if (Utils.isObject(preventPan)) {\n // Check for X axes attribute\n if (preventPan.x === false) {\n // Prevent panning on x axes\n newCTM.e = this.getPan().x;\n preventPanX = true;\n } else if (Utils.isNumber(preventPan.x)) {\n // Set a custom pan value\n newCTM.e = preventPan.x;\n }\n\n // Check for Y axes attribute\n if (preventPan.y === false) {\n // Prevent panning on x axes\n newCTM.f = this.getPan().y;\n preventPanY = true;\n } else if (Utils.isNumber(preventPan.y)) {\n // Set a custom pan value\n newCTM.f = preventPan.y;\n }\n }\n\n // Update willPan flag\n // Check if newCTM is still different\n if ((preventPanX && preventPanY) || !this.isPanDifferent(newCTM)) {\n willPan = false;\n } else {\n this.updateCache(newCTM);\n this.options.onPan(this.getPan());\n }\n }\n\n // Check again if should zoom or pan\n if (willZoom || willPan) {\n this.updateCTMOnNextFrame();\n }\n }\n};\n\nShadowViewport.prototype.isZoomDifferent = function(newCTM) {\n return this.activeState.zoom !== newCTM.a;\n};\n\nShadowViewport.prototype.isPanDifferent = function(newCTM) {\n return this.activeState.x !== newCTM.e || this.activeState.y !== newCTM.f;\n};\n\n/**\n * Update cached CTM and active state\n *\n * @param {SVGMatrix} newCTM\n */\nShadowViewport.prototype.updateCache = function(newCTM) {\n this.activeState.zoom = newCTM.a;\n this.activeState.x = newCTM.e;\n this.activeState.y = newCTM.f;\n};\n\nShadowViewport.prototype.pendingUpdate = false;\n\n/**\n * Place a request to update CTM on next Frame\n */\nShadowViewport.prototype.updateCTMOnNextFrame = function() {\n if (!this.pendingUpdate) {\n // Lock\n this.pendingUpdate = true;\n\n // Throttle next update\n this.requestAnimationFrame.call(window, this.updateCTMCached);\n }\n};\n\n/**\n * Update viewport CTM with cached CTM\n */\nShadowViewport.prototype.updateCTM = function() {\n var ctm = this.getCTM();\n\n // Updates SVG element\n SvgUtils.setCTM(this.viewport, ctm, this.defs);\n\n // Free the lock\n this.pendingUpdate = false;\n\n // Notify about the update\n if (this.options.onUpdatedCTM) {\n this.options.onUpdatedCTM(ctm);\n }\n};\n\nmodule.exports = function(viewport, options) {\n return new ShadowViewport(viewport, options);\n};\n","var Wheel = require(\"./uniwheel\"),\n ControlIcons = require(\"./control-icons\"),\n Utils = require(\"./utilities\"),\n SvgUtils = require(\"./svg-utilities\"),\n ShadowViewport = require(\"./shadow-viewport\");\n\nvar SvgPanZoom = function(svg, options) {\n this.init(svg, options);\n};\n\nvar optionsDefaults = {\n viewportSelector: \".svg-pan-zoom_viewport\", // Viewport selector. Can be querySelector string or SVGElement\n panEnabled: true, // enable or disable panning (default enabled)\n controlIconsEnabled: false, // insert icons to give user an option in addition to mouse events to control pan/zoom (default disabled)\n zoomEnabled: true, // enable or disable zooming (default enabled)\n dblClickZoomEnabled: true, // enable or disable zooming by double clicking (default enabled)\n mouseWheelZoomEnabled: true, // enable or disable zooming by mouse wheel (default enabled)\n preventMouseEventsDefault: true, // enable or disable preventDefault for mouse events\n zoomScaleSensitivity: 0.1, // Zoom sensitivity\n minZoom: 0.5, // Minimum Zoom level\n maxZoom: 10, // Maximum Zoom level\n fit: true, // enable or disable viewport fit in SVG (default true)\n contain: false, // enable or disable viewport contain the svg (default false)\n center: true, // enable or disable viewport centering in SVG (default true)\n refreshRate: \"auto\", // Maximum number of frames per second (altering SVG's viewport)\n beforeZoom: null,\n onZoom: null,\n beforePan: null,\n onPan: null,\n customEventsHandler: null,\n eventsListenerElement: null,\n onUpdatedCTM: null\n};\n\nvar passiveListenerOption = { passive: true };\n\nSvgPanZoom.prototype.init = function(svg, options) {\n var that = this;\n\n this.svg = svg;\n this.defs = svg.querySelector(\"defs\");\n\n // Add default attributes to SVG\n SvgUtils.setupSvgAttributes(this.svg);\n\n // Set options\n this.options = Utils.extend(Utils.extend({}, optionsDefaults), options);\n\n // Set default state\n this.state = \"none\";\n\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Init shadow viewport\n this.viewport = ShadowViewport(\n SvgUtils.getOrCreateViewport(this.svg, this.options.viewportSelector),\n {\n svg: this.svg,\n width: this.width,\n height: this.height,\n fit: this.options.fit,\n contain: this.options.contain,\n center: this.options.center,\n refreshRate: this.options.refreshRate,\n // Put callbacks into functions as they can change through time\n beforeZoom: function(oldScale, newScale) {\n if (that.viewport && that.options.beforeZoom) {\n return that.options.beforeZoom(oldScale, newScale);\n }\n },\n onZoom: function(scale) {\n if (that.viewport && that.options.onZoom) {\n return that.options.onZoom(scale);\n }\n },\n beforePan: function(oldPoint, newPoint) {\n if (that.viewport && that.options.beforePan) {\n return that.options.beforePan(oldPoint, newPoint);\n }\n },\n onPan: function(point) {\n if (that.viewport && that.options.onPan) {\n return that.options.onPan(point);\n }\n },\n onUpdatedCTM: function(ctm) {\n if (that.viewport && that.options.onUpdatedCTM) {\n return that.options.onUpdatedCTM(ctm);\n }\n }\n }\n );\n\n // Wrap callbacks into public API context\n var publicInstance = this.getPublicInstance();\n publicInstance.setBeforeZoom(this.options.beforeZoom);\n publicInstance.setOnZoom(this.options.onZoom);\n publicInstance.setBeforePan(this.options.beforePan);\n publicInstance.setOnPan(this.options.onPan);\n publicInstance.setOnUpdatedCTM(this.options.onUpdatedCTM);\n\n if (this.options.controlIconsEnabled) {\n ControlIcons.enable(this);\n }\n\n // Init events handlers\n this.lastMouseWheelEventTime = Date.now();\n this.setupHandlers();\n};\n\n/**\n * Register event handlers\n */\nSvgPanZoom.prototype.setupHandlers = function() {\n var that = this,\n prevEvt = null; // use for touchstart event to detect double tap\n\n this.eventListeners = {\n // Mouse down group\n mousedown: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n touchstart: function(evt) {\n var result = that.handleMouseDown(evt, prevEvt);\n prevEvt = evt;\n return result;\n },\n\n // Mouse up group\n mouseup: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchend: function(evt) {\n return that.handleMouseUp(evt);\n },\n\n // Mouse move group\n mousemove: function(evt) {\n return that.handleMouseMove(evt);\n },\n touchmove: function(evt) {\n return that.handleMouseMove(evt);\n },\n\n // Mouse leave group\n mouseleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchleave: function(evt) {\n return that.handleMouseUp(evt);\n },\n touchcancel: function(evt) {\n return that.handleMouseUp(evt);\n }\n };\n\n // Init custom events handler if available\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.init({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n\n // Custom event handler may halt builtin listeners\n var haltEventListeners = this.options.customEventsHandler\n .haltEventListeners;\n if (haltEventListeners && haltEventListeners.length) {\n for (var i = haltEventListeners.length - 1; i >= 0; i--) {\n if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) {\n delete this.eventListeners[haltEventListeners[i]];\n }\n }\n }\n }\n\n // Bind eventListeners\n for (var event in this.eventListeners) {\n // Attach event to eventsListenerElement or SVG if not available\n (this.options.eventsListenerElement || this.svg).addEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Zoom using mouse wheel\n if (this.options.mouseWheelZoomEnabled) {\n this.options.mouseWheelZoomEnabled = false; // set to false as enable will set it back to true\n this.enableMouseWheelZoom();\n }\n};\n\n/**\n * Enable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.enableMouseWheelZoom = function() {\n if (!this.options.mouseWheelZoomEnabled) {\n var that = this;\n\n // Mouse wheel listener\n this.wheelListener = function(evt) {\n return that.handleMouseWheel(evt);\n };\n\n // Bind wheelListener\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.on(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n\n this.options.mouseWheelZoomEnabled = true;\n }\n};\n\n/**\n * Disable ability to zoom using mouse wheel\n */\nSvgPanZoom.prototype.disableMouseWheelZoom = function() {\n if (this.options.mouseWheelZoomEnabled) {\n var isPassiveListener = !this.options.preventMouseEventsDefault;\n Wheel.off(\n this.options.eventsListenerElement || this.svg,\n this.wheelListener,\n isPassiveListener\n );\n this.options.mouseWheelZoomEnabled = false;\n }\n};\n\n/**\n * Handle mouse wheel event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseWheel = function(evt) {\n if (!this.options.zoomEnabled || this.state !== \"none\") {\n return;\n }\n\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Default delta in case that deltaY is not available\n var delta = evt.deltaY || 1,\n timeDelta = Date.now() - this.lastMouseWheelEventTime,\n divider = 3 + Math.max(0, 30 - timeDelta);\n\n // Update cache\n this.lastMouseWheelEventTime = Date.now();\n\n // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0)\n if (\"deltaMode\" in evt && evt.deltaMode === 0 && evt.wheelDelta) {\n delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY;\n }\n\n delta =\n -0.3 < delta && delta < 0.3\n ? delta\n : ((delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10)) / divider;\n\n var inversedScreenCTM = this.svg.getScreenCTM().inverse(),\n relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n inversedScreenCTM\n ),\n zoom = Math.pow(1 + this.options.zoomScaleSensitivity, -1 * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior\n\n this.zoomAtPoint(zoom, relativeMousePoint);\n};\n\n/**\n * Zoom in at a SVG point\n *\n * @param {SVGPoint} point\n * @param {Float} zoomScale Number representing how much to zoom\n * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value.\n * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%)\n */\nSvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) {\n var originalState = this.viewport.getOriginalState();\n\n if (!zoomAbsolute) {\n // Fit zoomScale in set bounds\n if (\n this.getZoom() * zoomScale <\n this.options.minZoom * originalState.zoom\n ) {\n zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom();\n } else if (\n this.getZoom() * zoomScale >\n this.options.maxZoom * originalState.zoom\n ) {\n zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom();\n }\n } else {\n // Fit zoomScale in set bounds\n zoomScale = Math.max(\n this.options.minZoom * originalState.zoom,\n Math.min(this.options.maxZoom * originalState.zoom, zoomScale)\n );\n // Find relative scale to achieve desired scale\n zoomScale = zoomScale / this.getZoom();\n }\n\n var oldCTM = this.viewport.getCTM(),\n relativePoint = point.matrixTransform(oldCTM.inverse()),\n modifier = this.svg\n .createSVGMatrix()\n .translate(relativePoint.x, relativePoint.y)\n .scale(zoomScale)\n .translate(-relativePoint.x, -relativePoint.y),\n newCTM = oldCTM.multiply(modifier);\n\n if (newCTM.a !== oldCTM.a) {\n this.viewport.setCTM(newCTM);\n }\n};\n\n/**\n * Zoom at center point\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.zoom = function(scale, absolute) {\n this.zoomAtPoint(\n scale,\n SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height),\n absolute\n );\n};\n\n/**\n * Zoom used by public instance\n *\n * @param {Float} scale\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoom = function(scale, absolute) {\n if (absolute) {\n scale = this.computeFromRelativeZoom(scale);\n }\n\n this.zoom(scale, absolute);\n};\n\n/**\n * Zoom at point used by public instance\n *\n * @param {Float} scale\n * @param {SVGPoint|Object} point An object that has x and y attributes\n * @param {Boolean} absolute Marks zoom scale as relative or absolute\n */\nSvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) {\n if (absolute) {\n // Transform zoom into a relative value\n scale = this.computeFromRelativeZoom(scale);\n }\n\n // If not a SVGPoint but has x and y then create a SVGPoint\n if (Utils.getType(point) !== \"SVGPoint\") {\n if (\"x\" in point && \"y\" in point) {\n point = SvgUtils.createSVGPoint(this.svg, point.x, point.y);\n } else {\n throw new Error(\"Given point is invalid\");\n }\n }\n\n this.zoomAtPoint(scale, point, absolute);\n};\n\n/**\n * Get zoom scale\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getZoom = function() {\n return this.viewport.getZoom();\n};\n\n/**\n * Get zoom scale for public usage\n *\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.getRelativeZoom = function() {\n return this.viewport.getRelativeZoom();\n};\n\n/**\n * Compute actual zoom from public zoom\n *\n * @param {Float} zoom\n * @return {Float} zoom scale\n */\nSvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) {\n return zoom * this.viewport.getOriginalState().zoom;\n};\n\n/**\n * Set zoom to initial state\n */\nSvgPanZoom.prototype.resetZoom = function() {\n var originalState = this.viewport.getOriginalState();\n\n this.zoom(originalState.zoom, true);\n};\n\n/**\n * Set pan to initial state\n */\nSvgPanZoom.prototype.resetPan = function() {\n this.pan(this.viewport.getOriginalState());\n};\n\n/**\n * Set pan and zoom to initial state\n */\nSvgPanZoom.prototype.reset = function() {\n this.resetZoom();\n this.resetPan();\n};\n\n/**\n * Handle double click event\n * See handleMouseDown() for alternate detection method\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleDblClick = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n // Check if target was a control button\n if (this.options.controlIconsEnabled) {\n var targetClass = evt.target.getAttribute(\"class\") || \"\";\n if (targetClass.indexOf(\"svg-pan-zoom-control\") > -1) {\n return false;\n }\n }\n\n var zoomFactor;\n\n if (evt.shiftKey) {\n zoomFactor = 1 / ((1 + this.options.zoomScaleSensitivity) * 2); // zoom out when shift key pressed\n } else {\n zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2;\n }\n\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.svg.getScreenCTM().inverse()\n );\n this.zoomAtPoint(zoomFactor, point);\n};\n\n/**\n * Handle click event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n Utils.mouseAndTouchNormalize(evt, this.svg);\n\n // Double click detection; more consistent than ondblclick\n if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)) {\n this.handleDblClick(evt);\n } else {\n // Pan mode\n this.state = \"pan\";\n this.firstEventCTM = this.viewport.getCTM();\n this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n );\n }\n};\n\n/**\n * Handle mouse move event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseMove = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\" && this.options.panEnabled) {\n // Pan mode\n var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(\n this.firstEventCTM.inverse()\n ),\n viewportCTM = this.firstEventCTM.translate(\n point.x - this.stateOrigin.x,\n point.y - this.stateOrigin.y\n );\n\n this.viewport.setCTM(viewportCTM);\n }\n};\n\n/**\n * Handle mouse button release event\n *\n * @param {Event} evt\n */\nSvgPanZoom.prototype.handleMouseUp = function(evt) {\n if (this.options.preventMouseEventsDefault) {\n if (evt.preventDefault) {\n evt.preventDefault();\n } else {\n evt.returnValue = false;\n }\n }\n\n if (this.state === \"pan\") {\n // Quit pan mode\n this.state = \"none\";\n }\n};\n\n/**\n * Adjust viewport size (only) so it will fit in SVG\n * Does not center image\n */\nSvgPanZoom.prototype.fit = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.min(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport size (only) so it will contain the SVG\n * Does not center image\n */\nSvgPanZoom.prototype.contain = function() {\n var viewBox = this.viewport.getViewBox(),\n newScale = Math.max(\n this.width / viewBox.width,\n this.height / viewBox.height\n );\n\n this.zoom(newScale, true);\n};\n\n/**\n * Adjust viewport pan (only) so it will be centered in SVG\n * Does not zoom/fit/contain image\n */\nSvgPanZoom.prototype.center = function() {\n var viewBox = this.viewport.getViewBox(),\n offsetX =\n (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5,\n offsetY =\n (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5;\n\n this.getPublicInstance().pan({ x: offsetX, y: offsetY });\n};\n\n/**\n * Update content cached BorderBox\n * Use when viewport contents change\n */\nSvgPanZoom.prototype.updateBBox = function() {\n this.viewport.simpleViewBoxCache();\n};\n\n/**\n * Pan to a rendered position\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.pan = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e = point.x;\n viewportCTM.f = point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Relatively pan the graph by a specified rendered position vector\n *\n * @param {Object} point {x: 0, y: 0}\n */\nSvgPanZoom.prototype.panBy = function(point) {\n var viewportCTM = this.viewport.getCTM();\n viewportCTM.e += point.x;\n viewportCTM.f += point.y;\n this.viewport.setCTM(viewportCTM);\n};\n\n/**\n * Get pan vector\n *\n * @return {Object} {x: 0, y: 0}\n */\nSvgPanZoom.prototype.getPan = function() {\n var state = this.viewport.getState();\n\n return { x: state.x, y: state.y };\n};\n\n/**\n * Recalculates cached svg dimensions and controls position\n */\nSvgPanZoom.prototype.resize = function() {\n // Get dimensions\n var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(\n this.svg\n );\n this.width = boundingClientRectNormalized.width;\n this.height = boundingClientRectNormalized.height;\n\n // Recalculate original state\n var viewport = this.viewport;\n viewport.options.width = this.width;\n viewport.options.height = this.height;\n viewport.processCTM();\n\n // Reposition control icons by re-enabling them\n if (this.options.controlIconsEnabled) {\n this.getPublicInstance().disableControlIcons();\n this.getPublicInstance().enableControlIcons();\n }\n};\n\n/**\n * Unbind mouse events, free callbacks and destroy public instance\n */\nSvgPanZoom.prototype.destroy = function() {\n var that = this;\n\n // Free callbacks\n this.beforeZoom = null;\n this.onZoom = null;\n this.beforePan = null;\n this.onPan = null;\n this.onUpdatedCTM = null;\n\n // Destroy custom event handlers\n // eslint-disable-next-line eqeqeq\n if (this.options.customEventsHandler != null) {\n this.options.customEventsHandler.destroy({\n svgElement: this.svg,\n eventsListenerElement: this.options.eventsListenerElement,\n instance: this.getPublicInstance()\n });\n }\n\n // Unbind eventListeners\n for (var event in this.eventListeners) {\n (this.options.eventsListenerElement || this.svg).removeEventListener(\n event,\n this.eventListeners[event],\n !this.options.preventMouseEventsDefault ? passiveListenerOption : false\n );\n }\n\n // Unbind wheelListener\n this.disableMouseWheelZoom();\n\n // Remove control icons\n this.getPublicInstance().disableControlIcons();\n\n // Reset zoom and pan\n this.reset();\n\n // Remove instance from instancesStore\n instancesStore = instancesStore.filter(function(instance) {\n return instance.svg !== that.svg;\n });\n\n // Delete options and its contents\n delete this.options;\n\n // Delete viewport to make public shadow viewport functions uncallable\n delete this.viewport;\n\n // Destroy public instance and rewrite getPublicInstance\n delete this.publicInstance;\n delete this.pi;\n this.getPublicInstance = function() {\n return null;\n };\n};\n\n/**\n * Returns a public instance object\n *\n * @return {Object} Public instance object\n */\nSvgPanZoom.prototype.getPublicInstance = function() {\n var that = this;\n\n // Create cache\n if (!this.publicInstance) {\n this.publicInstance = this.pi = {\n // Pan\n enablePan: function() {\n that.options.panEnabled = true;\n return that.pi;\n },\n disablePan: function() {\n that.options.panEnabled = false;\n return that.pi;\n },\n isPanEnabled: function() {\n return !!that.options.panEnabled;\n },\n pan: function(point) {\n that.pan(point);\n return that.pi;\n },\n panBy: function(point) {\n that.panBy(point);\n return that.pi;\n },\n getPan: function() {\n return that.getPan();\n },\n // Pan event\n setBeforePan: function(fn) {\n that.options.beforePan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnPan: function(fn) {\n that.options.onPan =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zoom and Control Icons\n enableZoom: function() {\n that.options.zoomEnabled = true;\n return that.pi;\n },\n disableZoom: function() {\n that.options.zoomEnabled = false;\n return that.pi;\n },\n isZoomEnabled: function() {\n return !!that.options.zoomEnabled;\n },\n enableControlIcons: function() {\n if (!that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = true;\n ControlIcons.enable(that);\n }\n return that.pi;\n },\n disableControlIcons: function() {\n if (that.options.controlIconsEnabled) {\n that.options.controlIconsEnabled = false;\n ControlIcons.disable(that);\n }\n return that.pi;\n },\n isControlIconsEnabled: function() {\n return !!that.options.controlIconsEnabled;\n },\n // Double click zoom\n enableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = true;\n return that.pi;\n },\n disableDblClickZoom: function() {\n that.options.dblClickZoomEnabled = false;\n return that.pi;\n },\n isDblClickZoomEnabled: function() {\n return !!that.options.dblClickZoomEnabled;\n },\n // Mouse wheel zoom\n enableMouseWheelZoom: function() {\n that.enableMouseWheelZoom();\n return that.pi;\n },\n disableMouseWheelZoom: function() {\n that.disableMouseWheelZoom();\n return that.pi;\n },\n isMouseWheelZoomEnabled: function() {\n return !!that.options.mouseWheelZoomEnabled;\n },\n // Zoom scale and bounds\n setZoomScaleSensitivity: function(scale) {\n that.options.zoomScaleSensitivity = scale;\n return that.pi;\n },\n setMinZoom: function(zoom) {\n that.options.minZoom = zoom;\n return that.pi;\n },\n setMaxZoom: function(zoom) {\n that.options.maxZoom = zoom;\n return that.pi;\n },\n // Zoom event\n setBeforeZoom: function(fn) {\n that.options.beforeZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n setOnZoom: function(fn) {\n that.options.onZoom =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Zooming\n zoom: function(scale) {\n that.publicZoom(scale, true);\n return that.pi;\n },\n zoomBy: function(scale) {\n that.publicZoom(scale, false);\n return that.pi;\n },\n zoomAtPoint: function(scale, point) {\n that.publicZoomAtPoint(scale, point, true);\n return that.pi;\n },\n zoomAtPointBy: function(scale, point) {\n that.publicZoomAtPoint(scale, point, false);\n return that.pi;\n },\n zoomIn: function() {\n this.zoomBy(1 + that.options.zoomScaleSensitivity);\n return that.pi;\n },\n zoomOut: function() {\n this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity));\n return that.pi;\n },\n getZoom: function() {\n return that.getRelativeZoom();\n },\n // CTM update\n setOnUpdatedCTM: function(fn) {\n that.options.onUpdatedCTM =\n fn === null ? null : Utils.proxy(fn, that.publicInstance);\n return that.pi;\n },\n // Reset\n resetZoom: function() {\n that.resetZoom();\n return that.pi;\n },\n resetPan: function() {\n that.resetPan();\n return that.pi;\n },\n reset: function() {\n that.reset();\n return that.pi;\n },\n // Fit, Contain and Center\n fit: function() {\n that.fit();\n return that.pi;\n },\n contain: function() {\n that.contain();\n return that.pi;\n },\n center: function() {\n that.center();\n return that.pi;\n },\n // Size and Resize\n updateBBox: function() {\n that.updateBBox();\n return that.pi;\n },\n resize: function() {\n that.resize();\n return that.pi;\n },\n getSizes: function() {\n return {\n width: that.width,\n height: that.height,\n realZoom: that.getZoom(),\n viewBox: that.viewport.getViewBox()\n };\n },\n // Destroy\n destroy: function() {\n that.destroy();\n return that.pi;\n }\n };\n }\n\n return this.publicInstance;\n};\n\n/**\n * Stores pairs of instances of SvgPanZoom and SVG\n * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom}\n *\n * @type {Array}\n */\nvar instancesStore = [];\n\nvar svgPanZoom = function(elementOrSelector, options) {\n var svg = Utils.getSvg(elementOrSelector);\n\n if (svg === null) {\n return null;\n } else {\n // Look for existent instance\n for (var i = instancesStore.length - 1; i >= 0; i--) {\n if (instancesStore[i].svg === svg) {\n return instancesStore[i].instance.getPublicInstance();\n }\n }\n\n // If instance not found - create one\n instancesStore.push({\n svg: svg,\n instance: new SvgPanZoom(svg, options)\n });\n\n // Return just pushed instance\n return instancesStore[\n instancesStore.length - 1\n ].instance.getPublicInstance();\n }\n};\n\nmodule.exports = svgPanZoom;\n","var Utils = require(\"./utilities\"),\n _browser = \"unknown\";\n\n// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser\nif (/*@cc_on!@*/ false || !!document.documentMode) {\n // internet explorer\n _browser = \"ie\";\n}\n\nmodule.exports = {\n svgNS: \"http://www.w3.org/2000/svg\",\n xmlNS: \"http://www.w3.org/XML/1998/namespace\",\n xmlnsNS: \"http://www.w3.org/2000/xmlns/\",\n xlinkNS: \"http://www.w3.org/1999/xlink\",\n evNS: \"http://www.w3.org/2001/xml-events\",\n\n /**\n * Get svg dimensions: width and height\n *\n * @param {SVGSVGElement} svg\n * @return {Object} {width: 0, height: 0}\n */\n getBoundingClientRectNormalized: function(svg) {\n if (svg.clientWidth && svg.clientHeight) {\n return { width: svg.clientWidth, height: svg.clientHeight };\n } else if (!!svg.getBoundingClientRect()) {\n return svg.getBoundingClientRect();\n } else {\n throw new Error(\"Cannot get BoundingClientRect for SVG.\");\n }\n },\n\n /**\n * Gets g element with class of \"viewport\" or creates it if it doesn't exist\n *\n * @param {SVGSVGElement} svg\n * @return {SVGElement} g (group) element\n */\n getOrCreateViewport: function(svg, selector) {\n var viewport = null;\n\n if (Utils.isElement(selector)) {\n viewport = selector;\n } else {\n viewport = svg.querySelector(selector);\n }\n\n // Check if there is just one main group in SVG\n if (!viewport) {\n var childNodes = Array.prototype.slice\n .call(svg.childNodes || svg.children)\n .filter(function(el) {\n return el.nodeName !== \"defs\" && el.nodeName !== \"#text\";\n });\n\n // Node name should be SVGGElement and should have no transform attribute\n // Groups with transform are not used as viewport because it involves parsing of all transform possibilities\n if (\n childNodes.length === 1 &&\n childNodes[0].nodeName === \"g\" &&\n childNodes[0].getAttribute(\"transform\") === null\n ) {\n viewport = childNodes[0];\n }\n }\n\n // If no favorable group element exists then create one\n if (!viewport) {\n var viewportId =\n \"viewport-\" + new Date().toISOString().replace(/\\D/g, \"\");\n viewport = document.createElementNS(this.svgNS, \"g\");\n viewport.setAttribute(\"id\", viewportId);\n\n // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes\n var svgChildren = svg.childNodes || svg.children;\n if (!!svgChildren && svgChildren.length > 0) {\n for (var i = svgChildren.length; i > 0; i--) {\n // Move everything into viewport except defs\n if (svgChildren[svgChildren.length - i].nodeName !== \"defs\") {\n viewport.appendChild(svgChildren[svgChildren.length - i]);\n }\n }\n }\n svg.appendChild(viewport);\n }\n\n // Parse class names\n var classNames = [];\n if (viewport.getAttribute(\"class\")) {\n classNames = viewport.getAttribute(\"class\").split(\" \");\n }\n\n // Set class (if not set already)\n if (!~classNames.indexOf(\"svg-pan-zoom_viewport\")) {\n classNames.push(\"svg-pan-zoom_viewport\");\n viewport.setAttribute(\"class\", classNames.join(\" \"));\n }\n\n return viewport;\n },\n\n /**\n * Set SVG attributes\n *\n * @param {SVGSVGElement} svg\n */\n setupSvgAttributes: function(svg) {\n // Setting default attributes\n svg.setAttribute(\"xmlns\", this.svgNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:xlink\", this.xlinkNS);\n svg.setAttributeNS(this.xmlnsNS, \"xmlns:ev\", this.evNS);\n\n // Needed for Internet Explorer, otherwise the viewport overflows\n if (svg.parentNode !== null) {\n var style = svg.getAttribute(\"style\") || \"\";\n if (style.toLowerCase().indexOf(\"overflow\") === -1) {\n svg.setAttribute(\"style\", \"overflow: hidden; \" + style);\n }\n }\n },\n\n /**\n * How long Internet Explorer takes to finish updating its display (ms).\n */\n internetExplorerRedisplayInterval: 300,\n\n /**\n * Forces the browser to redisplay all SVG elements that rely on an\n * element defined in a 'defs' section. It works globally, for every\n * available defs element on the page.\n * The throttling is intentionally global.\n *\n * This is only needed for IE. It is as a hack to make markers (and 'use' elements?)\n * visible after pan/zoom when there are multiple SVGs on the page.\n * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/\n * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62\n */\n refreshDefsGlobal: Utils.throttle(\n function() {\n var allDefs = document.querySelectorAll(\"defs\");\n var allDefsCount = allDefs.length;\n for (var i = 0; i < allDefsCount; i++) {\n var thisDefs = allDefs[i];\n thisDefs.parentNode.insertBefore(thisDefs, thisDefs);\n }\n },\n this ? this.internetExplorerRedisplayInterval : null\n ),\n\n /**\n * Sets the current transform matrix of an element\n *\n * @param {SVGElement} element\n * @param {SVGMatrix} matrix CTM\n * @param {SVGElement} defs\n */\n setCTM: function(element, matrix, defs) {\n var that = this,\n s =\n \"matrix(\" +\n matrix.a +\n \",\" +\n matrix.b +\n \",\" +\n matrix.c +\n \",\" +\n matrix.d +\n \",\" +\n matrix.e +\n \",\" +\n matrix.f +\n \")\";\n\n element.setAttributeNS(null, \"transform\", s);\n if (\"transform\" in element.style) {\n element.style.transform = s;\n } else if (\"-ms-transform\" in element.style) {\n element.style[\"-ms-transform\"] = s;\n } else if (\"-webkit-transform\" in element.style) {\n element.style[\"-webkit-transform\"] = s;\n }\n\n // IE has a bug that makes markers disappear on zoom (when the matrix \"a\" and/or \"d\" elements change)\n // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10\n // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/\n if (_browser === \"ie\" && !!defs) {\n // this refresh is intended for redisplaying the SVG during zooming\n defs.parentNode.insertBefore(defs, defs);\n // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG\n // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that\n // are located under any other element(s).\n window.setTimeout(function() {\n that.refreshDefsGlobal();\n }, that.internetExplorerRedisplayInterval);\n }\n },\n\n /**\n * Instantiate an SVGPoint object with given event coordinates\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n * @return {SVGPoint} point\n */\n getEventPoint: function(evt, svg) {\n var point = svg.createSVGPoint();\n\n Utils.mouseAndTouchNormalize(evt, svg);\n\n point.x = evt.clientX;\n point.y = evt.clientY;\n\n return point;\n },\n\n /**\n * Get SVG center point\n *\n * @param {SVGSVGElement} svg\n * @return {SVGPoint}\n */\n getSvgCenterPoint: function(svg, width, height) {\n return this.createSVGPoint(svg, width / 2, height / 2);\n },\n\n /**\n * Create a SVGPoint with given x and y\n *\n * @param {SVGSVGElement} svg\n * @param {Number} x\n * @param {Number} y\n * @return {SVGPoint}\n */\n createSVGPoint: function(svg, x, y) {\n var point = svg.createSVGPoint();\n point.x = x;\n point.y = y;\n\n return point;\n }\n};\n","// uniwheel 0.1.2 (customized)\n// A unified cross browser mouse wheel event handler\n// https://github.com/teemualap/uniwheel\n\nmodule.exports = (function(){\n\n //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel\n\n var prefix = \"\", _addEventListener, _removeEventListener, support, fns = [];\n var passiveOption = {passive: true};\n\n // detect event model\n if ( window.addEventListener ) {\n _addEventListener = \"addEventListener\";\n _removeEventListener = \"removeEventListener\";\n } else {\n _addEventListener = \"attachEvent\";\n _removeEventListener = \"detachEvent\";\n prefix = \"on\";\n }\n\n // detect available wheel event\n support = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\n document.onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\n\n\n function createCallback(element,callback) {\n\n var fn = function(originalEvent) {\n\n !originalEvent && ( originalEvent = window.event );\n\n // create a normalized event object\n var event = {\n // keep a ref to the original event object\n originalEvent: originalEvent,\n target: originalEvent.target || originalEvent.srcElement,\n type: \"wheel\",\n deltaMode: originalEvent.type == \"MozMousePixelScroll\" ? 0 : 1,\n deltaX: 0,\n delatZ: 0,\n preventDefault: function() {\n originalEvent.preventDefault ?\n originalEvent.preventDefault() :\n originalEvent.returnValue = false;\n }\n };\n\n // calculate deltaY (and deltaX) according to the event\n if ( support == \"mousewheel\" ) {\n event.deltaY = - 1/40 * originalEvent.wheelDelta;\n // Webkit also support wheelDeltaX\n originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX );\n } else {\n event.deltaY = originalEvent.detail;\n }\n\n // it's time to fire the callback\n return callback( event );\n\n };\n\n fns.push({\n element: element,\n fn: fn,\n });\n\n return fn;\n }\n\n function getCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns[i].fn;\n }\n }\n return function(){};\n }\n\n function removeCallback(element) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].element === element) {\n return fns.splice(i,1);\n }\n }\n }\n\n function _addWheelListener(elem, eventName, callback, isPassiveListener ) {\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = createCallback(elem, callback);\n }\n\n elem[_addEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n }\n\n function _removeWheelListener(elem, eventName, callback, isPassiveListener ) {\n\n var cb;\n\n if (support === \"wheel\") {\n cb = callback;\n } else {\n cb = getCallback(elem);\n }\n\n elem[_removeEventListener](prefix + eventName, cb, isPassiveListener ? passiveOption : false);\n\n removeCallback(elem);\n }\n\n function addWheelListener( elem, callback, isPassiveListener ) {\n _addWheelListener(elem, support, callback, isPassiveListener );\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _addWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener );\n }\n }\n\n function removeWheelListener(elem, callback, isPassiveListener){\n _removeWheelListener(elem, support, callback, isPassiveListener);\n\n // handle MozMousePixelScroll in older Firefox\n if( support == \"DOMMouseScroll\" ) {\n _removeWheelListener(elem, \"MozMousePixelScroll\", callback, isPassiveListener);\n }\n }\n\n return {\n on: addWheelListener,\n off: removeWheelListener\n };\n\n})();\n","module.exports = {\n /**\n * Extends an object\n *\n * @param {Object} target object to extend\n * @param {Object} source object to take properties from\n * @return {Object} extended object\n */\n extend: function(target, source) {\n target = target || {};\n for (var prop in source) {\n // Go recursively\n if (this.isObject(source[prop])) {\n target[prop] = this.extend(target[prop], source[prop]);\n } else {\n target[prop] = source[prop];\n }\n }\n return target;\n },\n\n /**\n * Checks if an object is a DOM element\n *\n * @param {Object} o HTML element or String\n * @return {Boolean} returns true if object is a DOM element\n */\n isElement: function(o) {\n return (\n o instanceof HTMLElement ||\n o instanceof SVGElement ||\n o instanceof SVGSVGElement || //DOM2\n (o &&\n typeof o === \"object\" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === \"string\")\n );\n },\n\n /**\n * Checks if an object is an Object\n *\n * @param {Object} o Object\n * @return {Boolean} returns true if object is an Object\n */\n isObject: function(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n },\n\n /**\n * Checks if variable is Number\n *\n * @param {Integer|Float} n\n * @return {Boolean} returns true if variable is Number\n */\n isNumber: function(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n },\n\n /**\n * Search for an SVG element\n *\n * @param {Object|String} elementOrSelector DOM Element or selector String\n * @return {Object|Null} SVG or null\n */\n getSvg: function(elementOrSelector) {\n var element, svg;\n\n if (!this.isElement(elementOrSelector)) {\n // If selector provided\n if (\n typeof elementOrSelector === \"string\" ||\n elementOrSelector instanceof String\n ) {\n // Try to find the element\n element = document.querySelector(elementOrSelector);\n\n if (!element) {\n throw new Error(\n \"Provided selector did not find any elements. Selector: \" +\n elementOrSelector\n );\n return null;\n }\n } else {\n throw new Error(\"Provided selector is not an HTML object nor String\");\n return null;\n }\n } else {\n element = elementOrSelector;\n }\n\n if (element.tagName.toLowerCase() === \"svg\") {\n svg = element;\n } else {\n if (element.tagName.toLowerCase() === \"object\") {\n svg = element.contentDocument.documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"embed\") {\n svg = element.getSVGDocument().documentElement;\n } else {\n if (element.tagName.toLowerCase() === \"img\") {\n throw new Error(\n 'Cannot script an SVG in an \"img\" element. Please use an \"object\" element or an in-line SVG.'\n );\n } else {\n throw new Error(\"Cannot get SVG.\");\n }\n return null;\n }\n }\n }\n\n return svg;\n },\n\n /**\n * Attach a given context to a function\n * @param {Function} fn Function\n * @param {Object} context Context\n * @return {Function} Function with certain context\n */\n proxy: function(fn, context) {\n return function() {\n return fn.apply(context, arguments);\n };\n },\n\n /**\n * Returns object type\n * Uses toString that returns [object SVGPoint]\n * And than parses object type from string\n *\n * @param {Object} o Any object\n * @return {String} Object type\n */\n getType: function(o) {\n return Object.prototype.toString\n .apply(o)\n .replace(/^\\[object\\s/, \"\")\n .replace(/\\]$/, \"\");\n },\n\n /**\n * If it is a touch event than add clientX and clientY to event object\n *\n * @param {Event} evt\n * @param {SVGSVGElement} svg\n */\n mouseAndTouchNormalize: function(evt, svg) {\n // If no clientX then fallback\n if (evt.clientX === void 0 || evt.clientX === null) {\n // Fallback\n evt.clientX = 0;\n evt.clientY = 0;\n\n // If it is a touch event\n if (evt.touches !== void 0 && evt.touches.length) {\n if (evt.touches[0].clientX !== void 0) {\n evt.clientX = evt.touches[0].clientX;\n evt.clientY = evt.touches[0].clientY;\n } else if (evt.touches[0].pageX !== void 0) {\n var rect = svg.getBoundingClientRect();\n\n evt.clientX = evt.touches[0].pageX - rect.left;\n evt.clientY = evt.touches[0].pageY - rect.top;\n }\n // If it is a custom event\n } else if (evt.originalEvent !== void 0) {\n if (evt.originalEvent.clientX !== void 0) {\n evt.clientX = evt.originalEvent.clientX;\n evt.clientY = evt.originalEvent.clientY;\n }\n }\n }\n },\n\n /**\n * Check if an event is a double click/tap\n * TODO: For touch gestures use a library (hammer.js) that takes in account other events\n * (touchmove and touchend). It should take in account tap duration and traveled distance\n *\n * @param {Event} evt\n * @param {Event} prevEvt Previous Event\n * @return {Boolean}\n */\n isDblClick: function(evt, prevEvt) {\n // Double click detected by browser\n if (evt.detail === 2) {\n return true;\n }\n // Try to compare events\n else if (prevEvt !== void 0 && prevEvt !== null) {\n var timeStampDiff = evt.timeStamp - prevEvt.timeStamp, // should be lower than 250 ms\n touchesDistance = Math.sqrt(\n Math.pow(evt.clientX - prevEvt.clientX, 2) +\n Math.pow(evt.clientY - prevEvt.clientY, 2)\n );\n\n return timeStampDiff < 250 && touchesDistance < 10;\n }\n\n // Nothing found\n return false;\n },\n\n /**\n * Returns current timestamp as an integer\n *\n * @return {Number}\n */\n now:\n Date.now ||\n function() {\n return new Date().getTime();\n },\n\n // From underscore.\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n throttle: function(func, wait, options) {\n var that = this;\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) {\n options = {};\n }\n var later = function() {\n previous = options.leading === false ? 0 : that.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n return function() {\n var now = that.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n var remaining = wait - (now - previous);\n context = this; // eslint-disable-line consistent-this\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n },\n\n /**\n * Create a requestAnimationFrame simulation\n *\n * @param {Number|String} refreshRate\n * @return {Function}\n */\n createRequestAnimationFrame: function(refreshRate) {\n var timeout = null;\n\n // Convert refreshRate to timeout\n if (refreshRate !== \"auto\" && refreshRate < 60 && refreshRate > 1) {\n timeout = Math.floor(1000 / refreshRate);\n }\n\n if (timeout === null) {\n return window.requestAnimationFrame || requestTimeout(33);\n } else {\n return requestTimeout(timeout);\n }\n }\n};\n\n/**\n * Create a callback that will execute after a given timeout\n *\n * @param {Function} timeout\n * @return {Function}\n */\nfunction requestTimeout(timeout) {\n return function(callback) {\n window.setTimeout(callback, timeout);\n };\n}\n","(function() {\r\n\t\r\n\t// VERSION\r\n\tvar version = { major: 0, minor: 3, patch: 4, status: \"beta\" };\r\n\r\n\r\n\r\n\t// IO FILE SYSTEM\r\n\t\r\n\t// Virtual file\r\n\tfunction TauFile(name, type, parent, text) {\r\n\t\ttext = text === undefined ? \"\" : text;\r\n\t\tthis.name = name;\r\n\t\tthis.type = type;\r\n\t\tthis.parent = parent;\r\n\t\tthis.text = text;\r\n\t\tthis.created = Date.now() / 1000;\r\n\t\tthis.modified = this.created;\r\n\t}\r\n\r\n\tTauFile.prototype.get = function(length, position) {\r\n\t\tif(position === this.text.length) {\r\n\t\t\treturn \"end_of_stream\";\r\n\t\t} else if(position > this.text.length) {\r\n\t\t\treturn \"end_of_stream\";\r\n\t\t} else {\r\n\t\t\treturn this.text.substring(position, position+length);\r\n\t\t}\r\n\t};\r\n\r\n\tTauFile.prototype.eof = function(position) {\r\n\t\treturn position === this.text.length;\r\n\t};\r\n\r\n\tTauFile.prototype.put = function(text, position) {\r\n\t\tif(position === \"end_of_stream\") {\r\n\t\t\tthis.text += text;\r\n\t\t\treturn true;\r\n\t\t} else if(position === \"past_end_of_stream\") {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\tthis.text = this.text.substring(0, position) + text + this.text.substring(position+text.length);\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};\r\n\r\n\tTauFile.prototype.get_byte = function(position) {\r\n\t\tif(position === \"end_of_stream\")\r\n\t\t\treturn -1;\r\n\t\tvar index = Math.floor(position/2);\r\n\t\tif(this.text.length <= index)\r\n\t\t\treturn -1;\r\n\t\tvar code = codePointAt(this.text[Math.floor(position/2)], 0);\r\n\t\tif(position % 2 === 0)\r\n\t\t\treturn code & 0xff;\r\n\t\telse\r\n\t\t\treturn code / 256 >>> 0;\r\n\t};\r\n\r\n\tTauFile.prototype.put_byte = function(byte, position) {\r\n\t\tvar index = position === \"end_of_stream\" ? this.text.length : Math.floor(position/2);\r\n\t\tif(this.text.length < index)\r\n\t\t\treturn null;\r\n\t\tvar code = this.text.length === index ? -1 : codePointAt(this.text[Math.floor(position/2)], 0);\r\n\t\tif(position % 2 === 0) {\r\n\t\t\tcode = code / 256 >>> 0;\r\n\t\t\tcode = ((code & 0xff) << 8) | (byte & 0xff);\r\n\t\t} else {\r\n\t\t\tcode = code & 0xff;\r\n\t\t\tcode = ((byte & 0xff) << 8) | (code & 0xff);\r\n\t\t}\r\n\t\tif(this.text.length === index)\r\n\t\t\tthis.text += fromCodePoint(code);\r\n\t\telse \r\n\t\t\tthis.text = this.text.substring(0, index) + fromCodePoint(code) + this.text.substring(index+1);\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.flush = function() {\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.close = function() {\r\n\t\tthis.modified = Date.now() / 1000;\r\n\t\treturn true;\r\n\t};\r\n\r\n\tTauFile.prototype.size = function() {\r\n\t\treturn this.text.length;\r\n\t};\r\n\r\n\t// Virtual directory\r\n\tfunction TauDirectory(name, parent) {\r\n\t\tthis.name = name;\r\n\t\tthis.parent = parent;\r\n\t\tthis.files = {};\r\n\t\tthis.length = 0;\r\n\t\tthis.created = Date.now() / 1000;\r\n\t\tthis.modified = this.created;\r\n\t}\r\n\r\n\tTauDirectory.prototype.lookup = function(file) {\r\n\t\tif(this.files.hasOwnProperty(file))\r\n\t\t\treturn this.files[file];\r\n\t\treturn null;\r\n\t};\r\n\r\n\tTauDirectory.prototype.push = function(name, file) {\r\n\t\tif(!this.files.hasOwnProperty(name))\r\n\t\t\tthis.length++;\r\n\t\tthis.files[name] = file;\r\n\t\tthis.modified = Date.now() / 1000;\r\n\t};\r\n\r\n\tTauDirectory.prototype.remove = function(name) {\r\n\t\tif(this.files.hasOwnProperty(name)) {\r\n\t\t\tthis.length--;\r\n\t\t\tdelete this.files[name];\r\n\t\t\tthis.modified = Date.now() / 1000;\r\n\t\t}\r\n\t};\r\n\r\n\tTauDirectory.prototype.empty = function() {\r\n\t\treturn this.length === 0;\r\n\t};\r\n\r\n\tTauDirectory.prototype.size = function() {\r\n\t\treturn 4096;\r\n\t};\r\n\r\n\t// Virtual file system for browser\r\n\ttau_file_system = {\r\n\t\t// Current files\r\n\t\tfiles: new TauDirectory(\"/\", \"/\", null),\r\n\t\t// Open file\r\n\t\topen: function(path, type, mode) {\r\n\t\t\tvar dirs = path.replace(/\\/$/, \"\").split(\"/\");\r\n\t\t\tvar dir = tau_file_system.files;\r\n\t\t\tvar name = dirs[dirs.length-1];\r\n\t\t\tfor(var i = 1; i < dirs.length-1; i++) {\r\n\t\t\t\tdir = dir.lookup(dirs[i]);\r\n\t\t\t\tif(!pl.type.is_directory(dir))\r\n\t\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tvar file = dir.lookup(name);\r\n\t\t\tif(file === null) {\r\n\t\t\t\tif(mode === \"read\")\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tfile = new TauFile(name, type, dir);\r\n\t\t\t\tdir.push(name, file);\r\n\t\t\t} else if(!pl.type.is_file(file)) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tif(mode === \"write\")\r\n\t\t\t\tfile.text = \"\";\r\n\t\t\treturn file;\r\n\t\t},\r\n\t\t// Get item\r\n\t\tget: function(path) {\r\n\t\t\tvar dirs = path.replace(/\\/$/, \"\").split(\"/\");\r\n\t\t\tvar file = tau_file_system.files;\r\n\t\t\tfor(var i = 1; i < dirs.length; i++)\r\n\t\t\t\tif(pl.type.is_directory(file))\r\n\t\t\t\t\tfile = file.lookup(dirs[i]);\r\n\t\t\t\telse\r\n\t\t\t\t\treturn null;\r\n\t\t\treturn file;\r\n\t\t}\r\n\t};\r\n\r\n\t// User input for browser\r\n\ttau_user_input = {\r\n\t\tbuffer: \"\",\r\n\t\tget: function( length, _ ) {\r\n\t\t\tvar text;\r\n\t\t\twhile( tau_user_input.buffer.length < length ) {\r\n\t\t\t\ttext = window.prompt();\r\n\t\t\t\tif( text.length === 0 )\r\n\t\t\t\t\treturn \"end_of_stream\";\r\n\t\t\t\tif( text ) {\r\n\t\t\t\t\ttau_user_input.buffer += text;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttext = tau_user_input.buffer.substr( 0, length );\r\n\t\t\ttau_user_input.buffer = tau_user_input.buffer.substr( length );\r\n\t\t\treturn text;\r\n\t\t},\r\n\t\teof: function(_) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t// User output for browser\r\n\ttau_user_output = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tconsole.log( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\r\n\t// User error for browser\r\n\ttau_user_error = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\t(console.error || console.log)( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\r\n\t// Virtual file system for Node.js\r\n\tnodejs_file_system = {\r\n\t\t// Open file\r\n\t\topen: function( path, type, mode ) {\r\n\t\t\tvar fd, fs = require('fs');\r\n\t\t\tif( mode === \"read\" && !fs.existsSync( path ) )\r\n\t\t\t\treturn null;\r\n\t\t\ttry {\r\n\t\t\t\tfd = fs.openSync( path, mode[0] );\r\n\t\t\t} catch(ex) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tget: function( length, position ) {\r\n\t\t\t\t\tvar buffer = new Buffer( length );\r\n\t\t\t\t\tfs.readSync( fd, buffer, 0, length, position );\r\n\t\t\t\t\tvar end_of_file = true;\r\n\t\t\t\t\tvar text = buffer.toString();\r\n\t\t\t\t\tfor(var i = 0; i < length && end_of_file; i++)\r\n\t\t\t\t\t\tend_of_file = text[i] === \"\\u0000\";\r\n\t\t\t\t\treturn end_of_file ? \"end_of_stream\" : buffer.toString();\r\n\t\t\t\t},\r\n\t\t\t\teof: function(position) {\r\n\t\t\t\t\tvar stats = fs.statSync(path)\r\n\t\t\t\t\treturn position === stats[\"size\"];\r\n\t\t\t\t},\r\n\t\t\t\tput: function( text, position ) {\r\n\t\t\t\t\tvar buffer = Buffer.from( text );\r\n\t\t\t\t\tif( position === \"end_of_stream\" )\r\n\t\t\t\t\t\tfs.writeSync( fd, buffer );\r\n\t\t\t\t\telse if( position === \"past_end_of_stream\" )\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfs.writeSync( fd, buffer, 0, buffer.length, position );\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tget_byte: function( position ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tvar buffer = Buffer.alloc(1);\r\n\t\t\t\t\t\tvar bytesRead = fs.readSync(fd, buffer, 0, 1, position);\r\n\t\t\t\t\t\t//var _text = buffer.toString(\"utf8\", 0, bytesRead);\r\n\t\t\t\t\t\tvar end_of_file = bytesRead < 1;\r\n\t\t\t\t\t\treturn end_of_file ? \"end_of_stream\" : buffer.readUInt8(0);\r\n\t\t\t\t\t} catch(ex) {\r\n\t\t\t\t\t\treturn \"end_of_stream\";\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tput_byte: function(byte, position) {\r\n\t\t\t\t\tvar buffer = Buffer.from([byte]);\r\n\t\t\t\t\tif(position === \"end_of_stream\")\r\n\t\t\t\t\t\tfs.writeSync(fd, buffer);\r\n\t\t\t\t\telse if(position === \"past_end_of_stream\")\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfs.writeSync(fd, buffer, 0, buffer.length, position);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tflush: function() {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t\tclose: function() {\r\n\t\t\t\t\tfs.closeSync( fd );\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n\r\n\t// User input for Node.js\r\n\tnodejs_user_input = {\r\n\t\tbuffer: \"\",\r\n\t\tget: function( length, _ ) {\r\n\t\t\tvar text;\r\n\t\t\tvar readlineSync = require('readline-sync');\r\n\t\t\twhile( nodejs_user_input.buffer.length < length )\r\n\t\t\t\tnodejs_user_input.buffer += readlineSync.question(\"\", {keepWhitespace: true}) + \"\\n\";\r\n\t\t\ttext = nodejs_user_input.buffer.substr( 0, length );\r\n\t\t\tnodejs_user_input.buffer = nodejs_user_input.buffer.substr( length );\r\n\t\t\treturn text;\r\n\t\t},\r\n\t\teof: function(length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\t// User output for Node.js\r\n\tnodejs_user_output = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tprocess.stdout.write( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};\r\n\r\n\t// User error for Node.js\r\n\tnodejs_user_error = {\r\n\t\tput: function( text, _ ) {\r\n\t\t\tprocess.stderr.write( text );\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tflush: function() {\r\n\t\t\treturn true;\r\n\t\t} \r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPATITBILITY\r\n\t\r\n\tvar indexOf;\r\n\tif(!Array.prototype.indexOf) {\r\n\t\tindexOf = function(array, elem) {\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\tif(elem === array[i]) return i;\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\t} else {\r\n\t\tindexOf = function(array, elem) {\r\n\t\t\treturn array.indexOf(elem);\r\n\t\t};\r\n\t}\r\n\r\n\tvar reduce = function(array, fn) {\r\n\t\tif(array.length === 0) return undefined;\r\n\t\tvar elem = array[0];\r\n\t\tvar len = array.length;\r\n\t\tfor(var i = 1; i < len; i++) {\r\n\t\t\telem = fn(elem, array[i]);\r\n\t\t}\r\n\t\treturn elem;\r\n\t};\r\n\r\n\tvar map;\r\n\tif(!Array.prototype.map) {\r\n\t\tmap = function(array, fn) {\r\n\t\t\tvar a = [];\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\ta.push( fn(array[i]) );\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t};\r\n\t} else {\r\n\t\tmap = function(array, fn) {\r\n\t\t\treturn array.map(fn);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar filter;\r\n\tif(!Array.prototype.filter) {\r\n\t\tfilter = function(array, fn) {\r\n\t\t\tvar a = [];\r\n\t\t\tvar len = array.length;\r\n\t\t\tfor(var i = 0; i < len; i++) {\r\n\t\t\t\tif(fn(array[i]))\r\n\t\t\t\t\ta.push( array[i] );\r\n\t\t\t}\r\n\t\t\treturn a;\r\n\t\t};\r\n\t} else {\r\n\t\tfilter = function(array, fn) {\r\n\t\t\treturn array.filter(fn);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar codePointAt;\r\n\tif(!String.prototype.codePointAt) {\r\n\t\tcodePointAt = function(str, i) {\r\n\t\t\treturn str.charCodeAt(i);\r\n\t\t};\r\n\t} else {\r\n\t\tcodePointAt = function(str, i) {\r\n\t\t\treturn str.codePointAt(i);\r\n\t\t};\r\n\t}\r\n\t\r\n\tvar fromCodePoint;\r\n\tif(!String.fromCodePoint) {\r\n\t\tfromCodePoint = function() {\r\n\t\t\treturn String.fromCharCode.apply(null, arguments);\r\n\t\t};\r\n\t} else {\r\n\t\tfromCodePoint = function() {\r\n\t\t\treturn String.fromCodePoint.apply(null, arguments);\r\n\t\t};\r\n\t}\r\n\r\n\tvar stringLength;\r\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\r\n\tif(Array.from)\r\n\t\tstringLength = function(str) {\r\n\t\t\treturn Array.from(str).length;\r\n\t\t};\r\n\telse\r\n\t\tstringLength = function(str) {\r\n\t\t\treturn str.replace(regexAstralSymbols, '_').length;\r\n\t\t};\r\n\r\n\t\r\n\t\r\n\t// PARSER\r\n\r\n\tvar ERROR = 0;\r\n\tvar SUCCESS = 1;\r\n\r\n\tvar regex_escape = /(\\\\a)|(\\\\b)|(\\\\d)|(\\\\e)|(\\\\f)|(\\\\n)|(\\\\r)|(\\\\s)|(\\\\t)|(\\\\v)|\\\\x([0-9a-fA-F]+)\\\\|\\\\([0-7]+)\\\\|(\\\\\\\\)|(\\\\')|('')|(\\\\\")|(\\\\`)|(\\\\.)|(.)/g;\r\n\tvar escape_map = {\"\\\\a\": 7, \"\\\\b\": 8, \"\\\\d\": 127, \"\\\\e\": 27, \"\\\\f\": 12, \"\\\\n\": 10, \"\\\\r\": 13, \"\\\\s\": 32, \"\\\\t\": 9, \"\\\\v\": 11};\r\n\tfunction escape(str) {\r\n\t\tvar stack = [];\r\n\t\tvar _error = false;\r\n\t\tstr.replace(regex_escape, function(match, a, b, d, e, f, n, r, s, t, v, hex, octal, back, single, dsingle, double, backquote, error, char) {\r\n\t\t\tswitch(true) {\r\n\t\t\t\tcase hex !== undefined:\r\n\t\t\t\t\tstack.push( parseInt(hex, 16) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase octal !== undefined:\r\n\t\t\t\t\tstack.push( parseInt(octal, 8) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase back !== undefined:\r\n\t\t\t\tcase single !== undefined:\r\n\t\t\t\tcase dsingle !== undefined:\r\n\t\t\t\tcase double !== undefined:\r\n\t\t\t\tcase backquote !== undefined:\r\n\t\t\t\t\tstack.push( codePointAt(match.substr(1),0) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase char !== undefined:\r\n\t\t\t\t\tstack.push( codePointAt(char,0) );\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\tcase error !== undefined:\r\n\t\t\t\t\t_error = true;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tstack.push(escape_map[match]);\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(_error)\r\n\t\t\treturn null;\r\n\t\treturn stack;\r\n\t}\r\n\r\n\t// Escape atoms\r\n\tfunction escapeAtom(str, quote) {\r\n\t\tvar atom = '';\r\n\t\tif( str === \"\\\\\" ) return null;\r\n\t\tif( str.length < 2 ) return str;\r\n\t\ttry {\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\([0-7]+)\\\\/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 8));\r\n\t\t\t});\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\x([0-9a-fA-F]+)\\\\/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 16));\r\n\t\t\t});\r\n\t\t\tstr = str.replace(/((?:\\\\\\\\)+)|\\\\u([0-9a-fA-F]{4})/g, function(match, g1, g2) {\r\n\t\t\t\treturn g1 || fromCodePoint(parseInt(g2, 16));\r\n\t\t\t});\r\n\t\t} catch(error) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tfor( var i = 0; i < str.length; i++) {\r\n\t\t\tvar a = str.charAt(i);\r\n\t\t\tvar b = str.charAt(i+1);\r\n\t\t\tif( a === quote && b === quote ) {\r\n\t\t\t\ti++;\r\n\t\t\t\tatom += quote;\r\n\t\t\t} else if( a === '\\\\' ) {\r\n\t\t\t\tif( ['a','b','f','n','r','t','v',\"'\",'\"','\\\\','\\a','\\b','\\f','\\n','\\r','\\t','\\v'].indexOf(b) !== -1 ) {\r\n\t\t\t\t\ti += 1;\r\n\t\t\t\t\tswitch( b ) {\r\n\t\t\t\t\t\tcase 'a': atom += '\\a'; break;\r\n\t\t\t\t\t\tcase 'b': atom += '\\b'; break;\r\n\t\t\t\t\t\tcase 'f': atom += '\\f'; break;\r\n\t\t\t\t\t\tcase 'n': atom += '\\n'; break;\r\n\t\t\t\t\t\tcase 'r': atom += '\\r'; break;\r\n\t\t\t\t\t\tcase 't': atom += '\\t'; break;\r\n\t\t\t\t\t\tcase 'v': atom += '\\v'; break;\r\n\t\t\t\t\t\tcase \"'\": atom += \"'\"; break;\r\n\t\t\t\t\t\tcase '\"': atom += '\"'; break;\r\n\t\t\t\t\t\tcase '\\\\': atom += '\\\\'; break;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tatom += a;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn atom;\r\n\t}\r\n\t\r\n\t// Redo escape\r\n\tfunction redoEscape(str) {\r\n\t\tvar atom = '';\r\n\t\tfor( var i = 0; i < str.length; i++) {\r\n\t\t\tswitch( str.charAt(i) ) {\r\n\t\t\t\tcase \"'\": atom += \"\\\\'\"; break;\r\n\t\t\t\tcase '\\\\': atom += '\\\\\\\\'; break;\r\n\t\t\t\t//case '\\a': atom += '\\\\a'; break;\r\n\t\t\t\tcase '\\b': atom += '\\\\b'; break;\r\n\t\t\t\tcase '\\f': atom += '\\\\f'; break;\r\n\t\t\t\tcase '\\n': atom += '\\\\n'; break;\r\n\t\t\t\tcase '\\r': atom += '\\\\r'; break;\r\n\t\t\t\tcase '\\t': atom += '\\\\t'; break;\r\n\t\t\t\tcase '\\v': atom += '\\\\v'; break;\r\n\t\t\t\tdefault: atom += str.charAt(i); break;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn atom;\r\n\t}\r\n\r\n\t// String to num\r\n\tfunction convertNum(num) {\r\n\t\tvar n = num.substr(2);\r\n\t\tswitch(num.substr(0,2).toLowerCase()) {\r\n\t\t\tcase \"0x\":\r\n\t\t\t\treturn parseInt(n, 16);\r\n\t\t\tcase \"0b\":\r\n\t\t\t\treturn parseInt(n, 2);\r\n\t\t\tcase \"0o\":\r\n\t\t\t\treturn parseInt(n, 8);\r\n\t\t\tcase \"0'\":\r\n\t\t\t\treturn escape(n)[0];\r\n\t\t\tdefault:\r\n\t\t\t\treturn parseFloat(num);\r\n\t\t}\r\n\t}\r\n\r\n\t// Is graphic token\r\n\tfunction is_graphic_token(string) {\r\n\t\treturn /^[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+/.test(string);\r\n\t}\r\n\r\n\t// Regular expressions for tokens\r\n\tvar rules = {\r\n\t\twhitespace: /^\\s*(?:(?:%.*)|(?:\\/\\*(?:\\n|\\r|.)*?(?:\\*\\/|$))|(?:\\s+))\\s*/,\r\n\t\tvariable: /^(?:[A-Z_][a-zA-Z0-9_]*)/,\r\n\t\tatom: /^(\\!|,|;|[a-z][0-9a-zA-Z_]*|[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+|'(?:(?:'')|(?:\\\\\\\\)|(?:\\\\')|[^'])*')/,\r\n\t\tnumber: /^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\\\[abdefnrstv\\\\'\"`]|\\\\x?\\d+\\\\|[^\\\\])|\\d+(?:\\.\\d+(?:[eE][+-]?\\d+)?)?)/,\r\n\t\tstring: /^(?:\"([^\"]|\"\"|\\\\\")*\"|`([^`]|``|\\\\`)*`)/,\r\n\t\tl_brace: /^(?:\\[)/,\r\n\t\tr_brace: /^(?:\\])/,\r\n\t\tl_bracket: /^(?:\\{)/,\r\n\t\tr_bracket: /^(?:\\})/,\r\n\t\tbar: /^(?:\\|)/,\r\n\t\tl_paren: /^(?:\\()/,\r\n\t\tr_paren: /^(?:\\))/\r\n\t};\r\n\r\n\t// Replace chars of char_conversion session\r\n\tfunction replace( thread, text ) {\r\n\t\tif( thread.get_flag( \"char_conversion\" ).id === \"on\" ) {\r\n\t\t\treturn text.replace(/./g, function(char) {\r\n\t\t\t\treturn thread.get_char_conversion( char );\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn text;\r\n\t}\r\n\r\n\t// Tokenize strings\r\n\tfunction Tokenizer(thread) {\r\n\t\tthis.thread = thread;\r\n\t\tthis.text = \"\"; // Current text to be analized\r\n\t\tthis.tokens = []; // Consumed tokens\r\n\t}\r\n\r\n\tTokenizer.prototype.set_last_tokens = function(tokens) {\r\n\t\treturn this.tokens = tokens;\r\n\t};\r\n\r\n\tTokenizer.prototype.new_text = function(text) {\r\n\t\tthis.text = text;\r\n\t\tthis.tokens = [];\r\n\t};\r\n\r\n\tTokenizer.prototype.get_tokens = function(init) {\r\n\t\tvar text;\r\n\t\tvar len = 0; // Total length respect to text\r\n\t\tvar line = 0;\r\n\t\tvar start = 0;\r\n\t\tvar tokens = [];\r\n\t\tvar last_is_blank;\r\n\r\n\t\tif(init) {\r\n\t\t\tvar token = this.tokens[init-1];\r\n\t\t\tlen = token.len;\r\n\t\t\ttext = replace( this.thread, this.text.substr(token.len) );\r\n\t\t\tline = token.line;\r\n\t\t\tstart = token.start;\r\n\t\t}\r\n\t\telse\r\n\t\t\ttext = this.text;\r\n\r\n\r\n\t\t// If there is nothing to be analized, return null\r\n\t\tif(/^\\s*$/.test(text))\r\n\t\t\treturn null;\r\n\r\n\t\twhile(text !== \"\") {\r\n\t\t\tvar matches = [];\r\n\t\t\tlast_is_blank = false;\r\n\r\n\t\t\tif(/^\\n/.exec(text) !== null) {\r\n\t\t\t\tline++;\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tlen++;\r\n\t\t\t\ttext = text.replace(/\\n/, \"\");\r\n\t\t\t\tlast_is_blank = true;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var rule in rules) {\r\n\t\t\t\tif(rules.hasOwnProperty(rule)) {\r\n\t\t\t\t\tvar matchs = rules[rule].exec( text );\r\n\t\t\t\t\tif(matchs) {\r\n\t\t\t\t\t\tmatches.push({\r\n\t\t\t\t\t\t\tvalue: matchs[0],\r\n\t\t\t\t\t\t\tname: rule,\r\n\t\t\t\t\t\t\tmatches: matchs\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Lexical error\r\n\t\t\tif(!matches.length)\r\n\t\t\t\treturn this.set_last_tokens( [{ value: text, matches: [], name: \"lexical\", line: line, start: start }] );\r\n\r\n\t\t\tvar token = reduce( matches, function(a, b) {\r\n\t\t\t\treturn a.value.length >= b.value.length ? a : b;\r\n\t\t\t} );\r\n\r\n\t\t\ttoken.start = start;\r\n\t\t\ttoken.line = line;\r\n\r\n\t\t\ttext = text.replace(token.value, \"\");\r\n\t\t\tstart += token.value.length;\r\n\t\t\tlen += token.value.length;\r\n\r\n\t\t\tvar nl = (token.value.match(/\\n/g) || []).length;\r\n\t\t\tline += nl;\r\n\t\t\tif(nl > 0) \r\n\t\t\t\tstart = token.value.length - token.value.lastIndexOf(\"\\n\") - 1;\r\n\t\t\ttoken.line_count = line;\r\n\t\t\ttoken.line_position = start;\r\n\r\n\t\t\tswitch(token.name) {\r\n\t\t\t\tcase \"atom\":\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\tif(token.value.charAt(0) === \"'\") {\r\n\t\t\t\t\t\ttoken.value = escapeAtom( token.value.substring(1, token.value.length - 1), \"'\" );\r\n\t\t\t\t\t\tif( token.value === null ) {\r\n\t\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\t\ttoken.error = \"unknown_escape_sequence\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"number\":\r\n\t\t\t\t\tvar substr = token.value.substring(0,2);\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\ttoken.float = substr !== \"0x\" && substr !== \"0'\" && token.value.match(/[.eE]/) !== null;\r\n\t\t\t\t\ttoken.value = convertNum( token.value );\r\n\t\t\t\t\ttoken.blank = last_is_blank;\r\n\t\t\t\t\tif(!token.float && pl.flag.bounded.value.indicator === \"true/0\" && token.value > pl.flag.max_integer.value.value) {\r\n\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\ttoken.error = \"int_overflow\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tvar del = token.value.charAt(0);\r\n\t\t\t\t\ttoken.raw = token.value;\r\n\t\t\t\t\ttoken.value = escapeAtom( token.value.substring(1, token.value.length - 1), del );\r\n\t\t\t\t\tif( token.value === null ) {\r\n\t\t\t\t\t\ttoken.name = \"lexical\";\r\n\t\t\t\t\t\ttoken.value = token.raw;\r\n\t\t\t\t\t\ttoken.error = \"unknown_escape_sequence\"\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"whitespace\":\r\n\t\t\t\t\tvar last = tokens[tokens.length-1];\r\n\t\t\t\t\tif(last) last.space = true;\r\n\t\t\t\t\tlast_is_blank = true;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tcase \"r_bracket\":\r\n\t\t\t\t\tif( tokens.length > 0 && tokens[tokens.length-1].name === \"l_bracket\" ) {\r\n\t\t\t\t\t\ttoken = tokens.pop();\r\n\t\t\t\t\t\ttoken.name = \"atom\";\r\n\t\t\t\t\t\ttoken.value = \"{}\";\r\n\t\t\t\t\t\ttoken.raw = \"{}\";\r\n\t\t\t\t\t\ttoken.space = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"r_brace\":\r\n\t\t\t\t\tif( tokens.length > 0 && tokens[tokens.length-1].name === \"l_brace\" ) {\r\n\t\t\t\t\t\ttoken = tokens.pop();\r\n\t\t\t\t\t\ttoken.name = \"atom\";\r\n\t\t\t\t\t\ttoken.value = \"[]\";\r\n\t\t\t\t\t\ttoken.raw = \"[]\";\r\n\t\t\t\t\t\ttoken.space = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\ttoken.len = len;\r\n\t\t\ttokens.push( token );\r\n\t\t\tlast_is_blank = false;\r\n\t\t}\r\n\r\n\t\tvar t = this.set_last_tokens( tokens );\r\n\t\treturn t.length === 0 ? null : t;\r\n\t};\r\n\r\n\t// Parse an expression\r\n\tfunction parseExpr(thread, tokens, start, priority, toplevel) {\r\n\t\tif(!tokens[start]) return {type: ERROR, value: pl.error.syntax(tokens[start-1], \"expression expected\", true)};\r\n\t\tvar error;\r\n\r\n\t\tif(priority === \"0\") {\r\n\t\t\tvar token = tokens[start];\r\n\t\t\tswitch(token.name) {\r\n\t\t\t\tcase \"number\":\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Num(token.value, token.float)};\r\n\t\t\t\tcase \"variable\":\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Var(token.value)};\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\tvar str;\r\n\t\t\t\t\tswitch( thread.get_flag( \"double_quotes\" ).id ) {\r\n\t\t\t\t\t\tcase \"atom\":;\r\n\t\t\t\t\t\t\tstr = new Term( token.value, [] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"codes\":\r\n\t\t\t\t\t\t\tstr = new Term( \"[]\", [] );\r\n\t\t\t\t\t\t\tfor(var i = token.value.length-1; i >= 0; i-- )\r\n\t\t\t\t\t\t\t\tstr = new Term( \".\", [new pl.type.Num( codePointAt(token.value,i), false ), str] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"chars\":\r\n\t\t\t\t\t\t\tstr = new Term( \"[]\", [] );\r\n\t\t\t\t\t\t\tfor(var i = token.value.length-1; i >= 0; i-- )\r\n\t\t\t\t\t\t\t\tstr = new Term( \".\", [new pl.type.Term( token.value.charAt(i), [] ), str] );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: str};\r\n\t\t\t\tcase \"l_paren\":\r\n\t\t\t\t\tvar expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true);\r\n\t\t\t\t\tif(expr.type !== SUCCESS) return expr;\r\n\t\t\t\t\tif(tokens[expr.len] && tokens[expr.len].name === \"r_paren\") {\r\n\t\t\t\t\t\texpr.len++;\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], \") or operator expected\", !tokens[expr.len])}\r\n\t\t\t\tcase \"l_bracket\":\r\n\t\t\t\t\tvar expr = parseExpr(thread, tokens, start+1, thread.__get_max_priority(), true);\r\n\t\t\t\t\tif(expr.type !== SUCCESS) return expr;\r\n\t\t\t\t\tif(tokens[expr.len] && tokens[expr.len].name === \"r_bracket\") {\r\n\t\t\t\t\t\texpr.len++;\r\n\t\t\t\t\t\texpr.value = new Term( \"{}\", [expr.value] );\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[expr.len] ? tokens[expr.len] : tokens[expr.len-1], \"} or operator expected\", !tokens[expr.len])}\r\n\t\t\t}\r\n\t\t\t// Compound term\r\n\t\t\tvar result = parseTerm(thread, tokens, start, toplevel);\r\n\t\t\tif(result.type === SUCCESS || result.derived)\r\n\t\t\t\treturn result;\r\n\t\t\t// List\r\n\t\t\tresult = parseList(thread, tokens, start);\r\n\t\t\tif(result.type === SUCCESS || result.derived)\r\n\t\t\t\treturn result;\r\n\t\t\t// Unexpected\r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], token.error || \"unexpected token\")};\r\n\t\t}\r\n\r\n\t\tvar max_priority = thread.__get_max_priority();\r\n\t\tvar next_priority = thread.__get_next_priority(priority);\r\n\t\tvar aux_start = start;\r\n\t\t\r\n\t\t// Prefix operators\r\n\t\tif(tokens[start].name === \"atom\" && tokens[start+1] && (tokens[start].space || tokens[start+1].name !== \"l_paren\")) {\r\n\t\t\tvar token = tokens[start++];\r\n\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\t\t\t\r\n\t\t\t// Associative prefix operator\r\n\t\t\tif(classes && classes.indexOf(\"fy\") > -1) {\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, start, priority, toplevel);\r\n\t\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\t\tif( token.value === \"-\" && !token.space && pl.type.is_number( expr.value ) ) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Num(-expr.value.value, expr.value.is_float),\r\n\t\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = expr;\r\n\t\t\t\t}\r\n\t\t\t// Non-associative prefix operator\r\n\t\t\t} else if(classes && classes.indexOf(\"fx\") > -1) {\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, start, next_priority, toplevel);\r\n\t\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\tlen: expr.len,\r\n\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t};\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror = expr;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tstart = aux_start;\r\n\t\tvar expr = parseExpr(thread, tokens, start, next_priority, toplevel);\r\n\t\tif(expr.type === SUCCESS) {\r\n\t\t\tstart = expr.len;\r\n\t\t\tvar token = tokens[start];\r\n\t\t\tif(tokens[start] && (\r\n\t\t\t\ttokens[start].name === \"atom\" && thread.__lookup_operator_classes(priority, token.value) ||\r\n\t\t\t\ttokens[start].name === \"bar\" && thread.__lookup_operator_classes(priority, \"|\")\r\n\t\t\t) ) {\r\n\t\t\t\tvar next_priority_lt = next_priority;\r\n\t\t\t\tvar next_priority_eq = priority;\r\n\t\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\r\n\t\t\t\tif(classes.indexOf(\"xf\") > -1) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\tlen: ++expr.len,\r\n\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t};\r\n\t\t\t\t} else if(classes.indexOf(\"xfx\") > -1) {\r\n\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, start + 1, next_priority_lt, toplevel);\r\n\t\t\t\t\tif(expr2.type === SUCCESS) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\tlen: expr2.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(classes.indexOf(\"xfy\") > -1) {\r\n\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, start + 1, next_priority_eq, toplevel);\r\n\t\t\t\t\tif(expr2.type === SUCCESS) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\tlen: expr2.len,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(expr.type !== ERROR) {\r\n\t\t\t\t\twhile(true) {\r\n\t\t\t\t\t\tstart = expr.len;\r\n\t\t\t\t\t\tvar token = tokens[start];\r\n\t\t\t\t\t\tif(token && token.name === \"atom\" && thread.__lookup_operator_classes(priority, token.value)) {\r\n\t\t\t\t\t\t\tvar classes = thread.__lookup_operator_classes(priority, token.value);\r\n\t\t\t\t\t\t\tif( classes.indexOf(\"yf\") > -1 ) {\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value]),\r\n\t\t\t\t\t\t\t\t\tlen: ++start,\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t} else if( classes.indexOf(\"yfx\") > -1 ) {\r\n\t\t\t\t\t\t\t\tvar expr2 = parseExpr(thread, tokens, ++start, next_priority_lt, toplevel);\r\n\t\t\t\t\t\t\t\tif(expr2.type === ERROR) {\r\n\t\t\t\t\t\t\t\t\texpr2.derived = true;\r\n\t\t\t\t\t\t\t\t\treturn expr2;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstart = expr2.len;\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new pl.type.Term(token.value, [expr.value, expr2.value]),\r\n\t\t\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t} else { break; }\r\n\t\t\t\t\t\t} else { break; }\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\terror = {type: ERROR, value: pl.error.syntax(tokens[expr.len-1], \"operator expected\")};\r\n\t\t\t}\r\n\t\t\treturn expr;\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\r\n\t// Parse a compound term\r\n\tfunction parseTerm(thread, tokens, start, toplevel) {\r\n\t\tif(!tokens[start] || (tokens[start].name === \"atom\" && tokens[start].raw === \".\" && !toplevel && (tokens[start].space || !tokens[start+1] || tokens[start+1].name !== \"l_paren\")))\r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], \"unfounded token\")};\r\n\t\tvar atom = tokens[start];\r\n\t\tvar exprs = [];\r\n\t\tif(tokens[start].name === \"atom\" && tokens[start].raw !== \",\") {\r\n\t\t\tstart++;\r\n\t\t\tif(tokens[start-1].space) return {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)};\r\n\t\t\tif(tokens[start] && tokens[start].name === \"l_paren\") {\r\n\t\t\t\tif(tokens[start+1] && tokens[start+1].name === \"r_paren\") \r\n\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1], \"argument expected\")};\r\n\t\t\t\tvar expr = parseExpr(thread, tokens, ++start, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \"argument expected\", !tokens[start])};\r\n\t\t\t\t}\r\n\t\t\t\texprs.push(expr.value);\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t\twhile(tokens[start] && tokens[start].name === \"atom\" && tokens[start].value === \",\") {\r\n\t\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t\t}\r\n\t\t\t\t\texprs.push(expr.value);\r\n\t\t\t\t\tstart = expr.len;\r\n\t\t\t\t}\r\n\t\t\t\tif(tokens[start] && tokens[start].name === \"r_paren\") start++;\r\n\t\t\t\telse return {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \", or ) expected\", !tokens[start])};\r\n\t\t\t}\r\n\t\t\treturn {type: SUCCESS, len: start, value: new pl.type.Term(atom.value, exprs)};\r\n\t\t}\r\n\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], \"term expected\")};\r\n\t}\r\n\r\n\t// Parse a list\r\n\tfunction parseList(thread, tokens, start) {\r\n\t\tif(!tokens[start]) \r\n\t\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start-1], \"[ expected\")};\r\n\t\tif(tokens[start] && tokens[start].name === \"l_brace\") {\r\n\t\t\tvar expr = parseExpr(thread, tokens, ++start, \"999\", true);\r\n\t\t\tvar exprs = [expr.value];\r\n\t\t\tvar cons = undefined;\r\n\r\n\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\tif(tokens[start] && tokens[start].name === \"r_brace\") {\r\n\t\t\t\t\treturn {type: SUCCESS, len: start+1, value: new pl.type.Term(\"[]\", [])};\r\n\t\t\t\t}\r\n\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start], \"] expected\")};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tstart = expr.len;\r\n\r\n\t\t\twhile(tokens[start] && tokens[start].name === \"atom\" && tokens[start].value === \",\") {\r\n\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t}\r\n\t\t\t\texprs.push(expr.value);\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t}\r\n\t\t\tvar bar = false\r\n\t\t\tif(tokens[start] && tokens[start].name === \"bar\") {\r\n\t\t\t\tbar = true;\r\n\t\t\t\texpr = parseExpr(thread, tokens, start+1, \"999\", true);\r\n\t\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\t\tif( expr.derived )\r\n\t\t\t\t\t\treturn expr;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start+1] ? tokens[start+1] : tokens[start], \"argument expected\", !tokens[start+1])};\r\n\t\t\t\t}\r\n\t\t\t\tcons = expr.value;\r\n\t\t\t\tstart = expr.len;\r\n\t\t\t}\r\n\t\t\tif(tokens[start] && tokens[start].name === \"r_brace\")\r\n\t\t\t\treturn {type: SUCCESS, len: start+1, value: arrayToList(exprs, cons) };\r\n\t\t\telse\r\n\t\t\t\treturn {type: ERROR, derived: true, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], bar ? \"] expected\" : \", or | or ] expected\", !tokens[start])};\r\n\t\t}\r\n\t\treturn {type: ERROR, derived: false, value: pl.error.syntax(tokens[start], \"list expected\")};\r\n\t}\r\n\r\n\t// Parse a rule\r\n\tfunction parseRule(thread, tokens, start) {\r\n\t\tvar line = tokens[start].line;\r\n\t\tvar expr = parseExpr(thread, tokens, start, thread.__get_max_priority(), false);\r\n\t\tvar rule = null;\r\n\t\tvar obj;\r\n\t\tif(expr.type !== ERROR) {\r\n\t\t\tstart = expr.len;\r\n\t\t\tif(tokens[start] && tokens[start].name === \"atom\" && tokens[start].raw === \".\") {\r\n\t\t\t\tstart++;\r\n\t\t\t\tif( pl.type.is_term(expr.value) ) {\r\n\t\t\t\t\tif(expr.value.indicator === \":-/2\") {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1]));\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else if(expr.value.indicator === \"-->/2\") {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value.args[0], body_conversion(expr.value.args[1]));\r\n\t\t\t\t\t\trule = rule_to_dcg(rule, thread);\r\n\t\t\t\t\t\trule.body = body_conversion(rule.body);\r\n\t\t\t\t\t\tif(!pl.type.is_rule(rule))\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\t\ttype: ERROR\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: pl.type.is_rule( rule ) ? SUCCESS : ERROR\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trule = new pl.type.Rule(expr.value, null);\r\n\t\t\t\t\t\tobj = {\r\n\t\t\t\t\t\t\tvalue: rule,\r\n\t\t\t\t\t\t\tlen: start,\r\n\t\t\t\t\t\t\ttype: SUCCESS\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( rule ) {\r\n\t\t\t\t\t\tvar singleton = rule.singleton_variables();\r\n\t\t\t\t\t\tif( singleton.length > 0 )\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.warning.singleton( singleton, rule.head.indicator, line ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn obj;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn { type: ERROR, value: pl.error.syntax(tokens[start], \"callable expected\") };\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn { type: ERROR, value: pl.error.syntax(tokens[start] ? tokens[start] : tokens[start-1], \". or operator expected\") };\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\r\n\t// Parse a program\r\n\tfunction parseProgram(thread, string, options) {\r\n\t\tvar opts = {};\r\n\t\toptions = options ? options : {};\r\n\t\topts.success = options.success ? options.success : function(){};\r\n\t\topts.error = options.error ? options.error : function(){};\r\n\t\topts.from = options.from ? options.from : \"$tau-js\";\r\n\t\topts.reconsult = options.reconsult !== undefined ? options.reconsult : true;\r\n\t\topts.reconsulted = options.reconsulted === undefined ? {} : options.reconsulted;\r\n\t\topts.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\topts.initialization = options.initialization === undefined ? [] : options.initialization;\r\n\t\topts.current_token = options.current_token === undefined ? 0 : options.current_token;\r\n\t\topts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer;\r\n\t\topts.tokens = options.tokens === undefined ? null : options.tokens;\r\n\t\topts.string = string;\r\n\t\topts.term_expansion = false;\r\n\t\tvar reconsulted = opts.reconsulted;\r\n\t\tvar tokenizer = opts.tokenizer;\r\n\t\tvar tokens = opts.tokens;\r\n\t\tif(tokenizer === null) {\r\n\t\t\ttokenizer = new Tokenizer(thread);\r\n\t\t\ttokenizer.new_text(string);\r\n\t\t\topts.tokenizer = tokenizer;\r\n\t\t\ttokens = tokenizer.get_tokens(0);\r\n\t\t\topts.tokens = tokens;\r\n\t\t}\r\n\t\tvar n = opts.current_token;\r\n\t\twhile(tokens !== null && tokens[n]) {\r\n\t\t\tvar expr = parseRule(thread, tokens, n);\r\n\t\t\topts.current_token = expr.len;\r\n\t\t\tif(expr.type === ERROR) {\r\n\t\t\t\tif(opts.error !== undefined)\r\n\t\t\t\topts.error(new Term(\"throw\", [expr.value]));\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\t// Term expansion\r\n\t\t\t\tvar context_module = opts.context_module;\r\n\t\t\t\tvar term_expansion = thread.session.modules[context_module].rules[\"term_expansion/2\"];\r\n\t\t\t\tif(term_expansion && term_expansion.length > 0) {\r\n\t\t\t\t\topts.term_expansion = true;\r\n\t\t\t\t\tvar n_thread = new Thread(thread.session);\r\n\t\t\t\t\tvar term = expr.value.body ? new Term(\":-\", [expr.value.head, expr.value.body]) : expr.value.head;\r\n\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\tterm = term.rename(thread.session);\r\n\t\t\t\t\tn_thread.query(context_module + \":term_expansion(\" + term.toString({quoted: true}) + \", X).\");\r\n\t\t\t\t\tn_thread.answer((function(thread, opts, reconsulted, expr) {\r\n\t\t\t\t\t\treturn function(answer) {\r\n\t\t\t\t\t\t\tif(answer && !pl.type.is_error(answer) && pl.type.is_term(answer.links['X'])) {\r\n\t\t\t\t\t\t\t\tvar term = answer.links['X'];\r\n\t\t\t\t\t\t\t\tvar rule = term.indicator === \":-/2\" ? new Rule(term.args[0], term.args[1]) : new Rule(term, null);\r\n\t\t\t\t\t\t\t\tparseProgramExpansion(thread, opts, reconsulted, {value: rule, len: expr.len, type: expr.type});\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tparseProgramExpansion(thread, opts, reconsulted, expr);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})(thread, opts, reconsulted, expr));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\topts.term_expansion = false;\r\n\t\t\t\t\tvar async = parseProgramExpansion(thread, opts, reconsulted, expr);\r\n\t\t\t\t\tif(async)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\tn = expr.len;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t// run goals from initialization/1 directive\r\n\t\tvar callback = opts.success;\r\n\t\tvar nthread = new Thread(thread.session);\r\n\t\tfor(var i = opts.initialization.length-1; i > 0; i--) {\r\n\t\t\tvar next_callback = (function(init, callback) {\r\n\t\t\t\treturn function(answer) {\r\n\t\t\t\t\tif(answer === null) {\r\n\t\t\t\t\t\tnthread.answer();\r\n\t\t\t\t\t} else if(pl.type.is_error(answer)) {\r\n\t\t\t\t\t\topts.error(answer);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnthread.add_goal(init);\r\n\t\t\t\t\t\tnthread.answer(callback);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t})(opts.initialization[i], callback);\r\n\t\t\tcallback = next_callback;\r\n\t\t}\r\n\t\tif(opts.initialization.length > 0) {\r\n\t\t\tnthread.add_goal(opts.initialization[0]);\r\n\t\t\tnthread.answer(callback);\r\n\t\t} else {\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseGoalExpansion(thread, options, expr) {\r\n\t\tvar n_thread = new Thread( thread.session );\r\n\t\tn_thread.__goal_expansion = true;\r\n\t\tvar varterm = thread.next_free_variable();\r\n\t\tvar varhead = thread.next_free_variable();\r\n\t\tvar goal = varhead + \" = \" + expr.value.head + \", goal_expansion(\" + expr.value.body.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \", \" + varterm.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \").\";\r\n\t\tn_thread.query(goal);\r\n\t\tn_thread.answer(function(answer) {\r\n\t\t\tif(answer && !pl.type.is_error(answer) && answer.links[varterm]) {\r\n\t\t\t\texpr.value.head = answer.links[varhead];\r\n\t\t\t\texpr.value.body = body_conversion(answer.links[varterm]);\r\n\t\t\t\tparseGoalExpansion(thread, options, expr);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_rule(expr.value, options);\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction parseQueryExpansion(thread, term, options) {\r\n\t\tvar n_thread = new Thread(thread.session);\r\n\t\tn_thread.__goal_expansion = true;\r\n\t\tvar varterm = thread.next_free_variable();\r\n\t\tvar goal = \"goal_expansion(\" + term.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \", \" + varterm.toString({\r\n\t\t\tquoted: true\r\n\t\t}) + \").\";\r\n\t\tn_thread.query(goal);\r\n\t\tvar variables = n_thread.head_point().substitution.domain();\r\n\t\tn_thread.answer(function(answer) {\r\n\t\t\tif(answer && !pl.type.is_error(answer) && answer.links[varterm]) {\r\n\t\t\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\t\t\tif(variables[i] !== varterm.id && answer.links[variables[i]]) {\r\n\t\t\t\t\t\tvar subs = new Substitution();\r\n\t\t\t\t\t\tsubs.links[answer.links[variables[i]]] = variables[i];\r\n\t\t\t\t\t\tanswer.links[varterm] = answer.links[varterm].apply( subs );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tparseQueryExpansion(thread, body_conversion(answer.links[varterm]), options);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_goal(term);\r\n\t\t\t\toptions.success(term);\r\n\t\t\t\tparseQuery(thread, options.string, options);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction parseProgramExpansion(thread, options, reconsulted, expr) {\r\n\t\tvar async = options.term_expansion === true;\r\n\t\tif(expr.value.body === null && expr.value.head.indicator === \"?-/1\") {\r\n\t\t\tasync = true;\r\n\t\t\tvar n_thread = new Thread(thread.session);\r\n\t\t\tn_thread.add_goal(expr.value.head.args[0]);\r\n\t\t\tn_thread.answer(function(answer) {\r\n\t\t\t\tif(pl.type.is_error(answer)) {\r\n\t\t\t\t\tthread.throw_warning(answer.args[0]);\r\n\t\t\t\t} else if(answer === false || answer === null) {\r\n\t\t\t\t\tthread.throw_warning(pl.warning.failed_goal(expr.value.head.args[0], expr.len));\r\n\t\t\t\t}\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t});\r\n\t\t} else if(expr.value.body === null && expr.value.head.indicator === \":-/1\") {\r\n\t\t\tvar result = thread.run_directive(expr.value.head.args[0], options);\r\n\t\t\tasync = async || (result === true);\r\n\t\t\tif(async)\r\n\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t} else {\r\n\t\t\tvar context_module = options.context_module;\r\n\t\t\tvar indicator = expr.value.head.indicator;\r\n\t\t\tif(expr.value.head.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = expr.value.head.args[0].id;\r\n\t\t\t\tindicator = expr.value.head.args[1].indicator;\r\n\t\t\t}\r\n\t\t\tif(!reconsulted.hasOwnProperty(context_module))\r\n\t\t\t\treconsulted[context_module] = {};\r\n\t\t\tif(options.reconsult !== false && reconsulted[context_module][indicator] !== true && !thread.is_multifile_predicate(indicator)) {\r\n\t\t\t\tvar get_module = thread.session.modules[context_module];\r\n\t\t\t\tif(context_module !== \"system\" && get_module && get_module.rules[indicator]) {\r\n\t\t\t\t\tget_module.rules[indicator] = filter(get_module.rules[indicator], function(rule) {\r\n\t\t\t\t\t\treturn rule.dynamic;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tget_module.update_indices_predicate(indicator);\r\n\t\t\t\t}\r\n\t\t\t\treconsulted[context_module][indicator] = true;\r\n\t\t\t}\r\n\t\t\tvar goal_expansion = thread.session.modules.user.rules[\"goal_expansion/2\"];\r\n\t\t\tif(expr.value.body !== null && goal_expansion && goal_expansion.length > 0) {\r\n\t\t\t\tasync = true;\r\n\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\tvar origin = {\r\n\t\t\t\t\thead: function() { return expr.value.head; },\r\n\t\t\t\t\tterm: function() { return expr.value.body; },\r\n\t\t\t\t\tset: function(h, p){\r\n\t\t\t\t\t\texpr.value.head = h;\r\n\t\t\t\t\t\texpr.value.body = p;\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\tparseGoalExpansion(thread, options, expr, body_conversion(expr.value.body), origin.set, origin);\r\n\t\t\t} else {\r\n\t\t\t\tthread.add_rule(expr.value, options);\r\n\t\t\t\tif(async)\r\n\t\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn async;\r\n\t}\r\n\t\r\n\t// Parse a query\r\n\tfunction parseQuery(thread, string, options) {\r\n\t\tvar opts = {};\r\n\t\tvar callback = typeof options === \"function\" ? options : function(){};\r\n\t\toptions = options === undefined || typeof options === \"function\" ? {} : options;\r\n\t\topts.success = options.success === undefined ? callback : options.success;\r\n\t\topts.error = options.error === undefined ? callback : options.error;\r\n\t\topts.tokenizer = options.tokenizer === undefined ? null : options.tokenizer;\r\n\t\topts.current_token = options.current_token === undefined ? 0 : options.current_token;\r\n\t\topts.string = string;\r\n\t\tvar tokenizer = opts.tokenizer;\r\n\t\tvar n = opts.current_token;\r\n\t\tif(tokenizer === null) {\r\n\t\t\ttokenizer = new Tokenizer(thread);\r\n\t\t\topts.tokenizer = tokenizer;\r\n\t\t\ttokenizer.new_text(string);\r\n\t\t}\r\n\t\tdo {\r\n\t\t\tvar tokens = tokenizer.get_tokens(n);\r\n\t\t\tif(tokens === null)\r\n\t\t\t\tbreak;\r\n\t\t\tvar expr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false);\r\n\t\t\tif(expr.type !== ERROR) {\r\n\t\t\t\tvar expr_position = expr.len;\r\n\t\t\t\tn = expr.len + 1;\r\n\t\t\t\topts.current_token = n;\r\n\t\t\t\tif(tokens[expr_position] && tokens[expr_position].name === \"atom\" && tokens[expr_position].raw === \".\") {\r\n\t\t\t\t\texpr.value = body_conversion(expr.value);\r\n\t\t\t\t\t// Goal expansion\r\n\t\t\t\t\tvar goal_expansion = thread.session.modules.user.rules[\"goal_expansion/2\"];\r\n\t\t\t\t\tif(!thread.__goal_expansion && goal_expansion && goal_expansion.length > 0) {\r\n\t\t\t\t\t\tparseQueryExpansion(thread, expr.value, opts);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.add_goal(expr.value);\r\n\t\t\t\t\t\topts.success(expr.value);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar token = tokens[expr_position];\r\n\t\t\t\t\topts.error(\r\n\t\t\t\t\t\tnew Term(\"throw\", [\r\n\t\t\t\t\t\t\tpl.error.syntax(\r\n\t\t\t\t\t\t\t\ttoken ? token : tokens[expr_position-1],\r\n\t\t\t\t\t\t\t\ttoken && token.error ? token.error : \". or operator expected\",\r\n\t\t\t\t\t\t\t\t!token\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t])\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\topts.error(new Term(\"throw\", [expr.value]));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} while(true);\r\n\t}\r\n\r\n\r\n\t\r\n\t// UTILS\r\n\r\n\t// Rule to DCG\r\n\tfunction rule_to_dcg(rule, thread) {\r\n\t\tthread.session.renamed_variables = {};\r\n\t\trule = rule.rename(thread);\r\n\t\tvar begin = thread.next_free_variable();\r\n\t\tvar dcg = body_to_dcg( rule.body, begin, thread );\r\n\t\tif( dcg.error )\r\n\t\t\treturn dcg.value;\r\n\t\trule.body = dcg.value;\r\n\t\t// push-back lists\r\n\t\tif(rule.head.indicator === \",/2\") {\r\n\t\t\tvar terminals = rule.head.args[1];\r\n\t\t\trule.head = rule.head.args[0];\r\n\t\t\tvar last = thread.next_free_variable();\r\n\t\t\tvar pointer = terminals;\r\n\t\t\tif(!pl.type.is_list(pointer)) {\r\n\t\t\t\treturn pl.error.type(\"list\", pointer, \"DCG/0\");\r\n\t\t\t}\r\n\t\t\tif(pointer.indicator === \"[]/0\") {\r\n\t\t\t\tterminals = dcg.variable;\r\n\t\t\t} else {\r\n\t\t\t\twhile(pointer.indicator === \"./2\" && pl.type.is_list(pointer) && pointer.args[1].indicator !== \"[]/0\") {\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer))\r\n\t\t\t\t\treturn pl.error.instantiation(\"DCG/0\");\r\n\t\t\t\telse if(!pl.type.is_list(pointer))\r\n\t\t\t\t\treturn pl.error.type(\"list\", terminals, \"DCG/0\");\r\n\t\t\t\tpointer.args[1] = dcg.variable;\r\n\t\t\t}\r\n\t\t\trule.body = new Term(\",\", [rule.body, new Term(\"=\", [last, terminals])]);\r\n\t\t\trule.head = new Term(rule.head.id, rule.head.args.concat([begin, last]));\r\n\t\t} else {\r\n\t\t\t// replace first assignment\r\n\t\t\tvar first_assign = rule.body;\r\n\t\t\tif(pl.type.is_term(first_assign) && first_assign.indicator === \",/2\")\r\n\t\t\t\tfirst_assign = first_assign.args[0];\r\n\t\t\tif(pl.type.is_term(first_assign) && first_assign.indicator === \"=/2\" &&\r\n\t\t\t pl.type.is_variable(first_assign.args[0]) && first_assign.args[0] === begin) {\r\n\t\t\t\tbegin = first_assign.args[1];\r\n\t\t\t\trule.body = rule.body.replace(null);\r\n\t\t\t}\r\n\t\t\t// add first and last variables to the head\r\n\t\t\tif(rule.head.indicator === \":/2\")\r\n\t\t\t\trule.head = new Term(\":\", [\r\n\t\t\t\t\tnew Term(rule.head.args[0].id, []),\r\n\t\t\t\t\tnew Term(rule.head.args[1].id, rule.head.args[1].args.concat([begin, dcg.variable]))\r\n\t\t\t\t]);\r\n\t\t\telse\r\n\t\t\t\trule.head = new Term(rule.head.id, rule.head.args.concat([begin, dcg.variable]));\r\n\t\t}\r\n\t\treturn rule;\r\n\t}\r\n\r\n\t// Body to DCG\r\n\tfunction body_to_dcg(expr, last, thread) {\r\n\t\tvar free;\r\n\t\tif( pl.type.is_term( expr ) && expr.indicator === \"!/0\" ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [expr, new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \":/2\" ) {\r\n\t\t\tvar right = body_to_dcg(expr.args[1], last, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\":\", [expr.args[0], right.value]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \"\\\\+/1\" ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [new Term(expr.id, [left.value]), new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && (expr.indicator === \",/2\" || expr.indicator === \"->/2\") ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tvar right = body_to_dcg(expr.args[1], left.variable, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(expr.id, [left.value, right.value]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \";/2\" ) {\r\n\t\t\tvar left = body_to_dcg(expr.args[0], last, thread);\r\n\t\t\tif( left.error ) return left;\r\n\t\t\tvar right = body_to_dcg(expr.args[1], last, thread);\r\n\t\t\tif( right.error ) return right;\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [new Term(\";\", [left.value, right.value]), new Term(\"=\", [left.variable, right.variable])]),\r\n\t\t\t\tvariable: right.variable,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_term( expr ) && expr.indicator === \"{}/1\" ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\",\", [expr.args[0], new Term(\"=\", [last, free])]),\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_empty_list( expr ) ) {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: new Term(\"true\", []),\r\n\t\t\t\tvariable: last,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else if( pl.type.is_list( expr ) ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\tvar pointer = expr;\r\n\t\t\tvar prev;\r\n\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\tprev = pointer;\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: pl.error.instantiation(\"DCG/0\"),\r\n\t\t\t\t\tvariable: last,\r\n\t\t\t\t\terror: true\r\n\t\t\t\t};\r\n\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: pl.error.type(\"list\", expr, \"DCG/0\"),\r\n\t\t\t\t\tvariable: last,\r\n\t\t\t\t\terror: true\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\tprev.args[1] = free;\r\n\t\t\t\treturn {\r\n\t\t\t\t\tvalue: new Term(\"=\", [last, expr]),\r\n\t\t\t\t\tvariable: free,\r\n\t\t\t\t\terror: false\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t} else if( pl.type.is_callable( expr ) ) {\r\n\t\t\tfree = thread.next_free_variable();\r\n\t\t\texpr = new Term( expr.id, expr.args.concat([last,free]) );\r\n\t\t\treturn {\r\n\t\t\t\tvalue: expr,\r\n\t\t\t\tvariable: free,\r\n\t\t\t\terror: false\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: pl.error.type( \"callable\", expr, \"DCG/0\" ),\r\n\t\t\t\tvariable: last,\r\n\t\t\t\terror: true\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\t\r\n\t// Body conversion\r\n\tfunction body_conversion( expr ) {\r\n\t\tif( pl.type.is_variable( expr ) )\r\n\t\t\treturn new Term( \"call\", [expr] );\r\n\t\telse if( pl.type.is_term( expr ) && [\",/2\", \";/2\", \"->/2\"].indexOf(expr.indicator) !== -1 )\r\n\t\t\treturn new Term( expr.id, [body_conversion( expr.args[0] ), body_conversion( expr.args[1] )] );\r\n\t\telse if( pl.type.is_term(expr) && expr.indicator === \":/2\" ) {\r\n\t\t\tvar body = body_conversion(expr.args[1]);\r\n\t\t\treturn new Term(\":\", [expr.args[0], body]);\r\n\t\t}\r\n\t\treturn expr;\r\n\t}\r\n\t\r\n\t// List to Prolog list\r\n\tfunction arrayToList( array, cons ) {\r\n\t\tvar list = cons ? cons : new Term( \"[]\", [] );\r\n\t\tfor(var i = array.length-1; i >= 0; i-- )\r\n\t\t\tlist = new Term( \".\", [array[i], list] );\r\n\t\treturn list;\r\n\t}\r\n\r\n\t// Array difference\r\n\tfunction difference(xs, ys) {\r\n\t\tvar zs = [];\r\n\t\tfor(var i = 0; i < xs.length; i++) {\r\n\t\t\tif(indexOf(zs, xs[i]) === -1 && indexOf(ys, xs[i]) === -1)\r\n\t\t\t\tzs.push(xs[i]);\r\n\t\t}\r\n\t\treturn zs;\r\n\t}\r\n\t\r\n\t// Remove element from array\r\n\tfunction remove( array, element ) {\r\n\t\tfor( var i = array.length - 1; i >= 0; i-- ) {\r\n\t\t\tif( array[i] === element ) {\r\n\t\t\t\tarray.splice(i, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// Remove duplicate elements\r\n\tfunction nub( array ) {\r\n\t\tvar seen = {};\r\n\t\tvar unique = [];\r\n\t\tfor( var i = 0; i < array.length; i++ ) {\r\n\t\t\tif( !(array[i] in seen) ) {\r\n\t\t\t\tunique.push( array[i] );\r\n\t\t\t\tseen[array[i]] = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn unique;\r\n\t}\r\n\r\n\t// Retract a rule\r\n\tfunction retract(thread, point, indicator, rule, get_module) {\r\n\t\tif(get_module.rules[indicator]) {\r\n\t\t\tfor(var i = 0; i < get_module.rules[indicator].length; i++) {\r\n\t\t\t\tif(get_module.rules[indicator][i] === rule) {\r\n\t\t\t\t\tget_module.rules[indicator].splice(i, 1);\r\n\t\t\t\t\tget_module.update_indices_predicate(indicator);\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// call/n\r\n\tfunction callN(n) {\r\n\t\treturn function(thread, point, atom) {\r\n\t\t\tvar closure = atom.args[0], args = atom.args.slice(1, n);\r\n\t\t\tvar module_atom;\r\n\t\t\tif(pl.type.is_term(closure) && closure.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(closure.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", closure.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_atom = closure.args[0];\r\n\t\t\t\tclosure = closure.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(closure)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(closure)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", closure, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar goal = body_conversion(new Term(closure.id, closure.args.concat(args)));\r\n\t\t\t\tif(!pl.type.is_callable(goal)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(module_atom)\r\n\t\t\t\t\tgoal = new Term(\":\", [module_atom, goal]);\r\n\t\t\t\tthread.prepend([new State(point.goal.replace(goal), point.substitution, point)]);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\r\n\t// String to indicator\r\n\tfunction str_indicator( str ) {\r\n\t\tfor( var i = str.length - 1; i >= 0; i-- )\r\n\t\t\tif( str.charAt(i) === \"/\" )\r\n\t\t\t\treturn new Term( \"/\", [new Term( str.substring(0, i) ), new Num( parseInt(str.substring(i+1)), false )] );\r\n\t}\r\n\r\n\t// Greatest common divisor\r\n\tfunction gcd(a, b) {\r\n\t\tif(b === 0)\r\n\t\t\treturn a;\r\n\t\treturn Math.abs(gcd(b, a % b));\r\n\t}\r\n\t\r\n\t\r\n\r\n\t// PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tfunction Var( id ) {\r\n\t\tthis.id = id;\r\n\t\tthis.ground = false;\r\n\t}\r\n\t\r\n\t// Numbers\r\n\tfunction Num( value, is_float ) {\r\n\t\tthis.is_float = is_float !== undefined ? is_float : Math.trunc(value) !== value;\r\n\t\tthis.value = this.is_float ? value : Math.trunc(value);\r\n\t\tthis.index = this.value;\r\n\t\tthis.ground = true;\r\n\t}\r\n\t\r\n\t// Terms\r\n\tvar term_ref = 0;\r\n\tfunction Term( id, args, ref ) {\r\n\t\tterm_ref++;\r\n\t\tthis.ref = ref || term_ref;\r\n\t\tthis.id = id;\r\n\t\tthis.args = args || [];\r\n\t\tthis.indicator = id + \"/\" + this.args.length;\r\n\t\tthis.index = this.indicator;\r\n\t\tthis.ground = true;\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tif(this.args[i].hasOwnProperty(\"ground\") && this.args[i].ground === false) {\r\n\t\t\t\tthis.ground = false;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Streams\r\n\tvar stream_ref = 0;\r\n\tfunction Stream( stream, mode, alias, type, reposition, eof_action ) {\r\n\t\tthis.id = stream_ref++;\r\n\t\tthis.stream = stream;\r\n\t\tthis.mode = mode; // \"read\" or \"write\" or \"append\"\r\n\t\tthis.alias = alias;\r\n\t\tthis.type = type !== undefined ? type : \"text\"; // \"text\" or \"binary\"\r\n\t\tthis.reposition = reposition !== undefined ? reposition : true; // true or false\r\n\t\tthis.eof_action = eof_action !== undefined ? eof_action : \"eof_code\"; // \"error\" or \"eof_code\" or \"reset\"\r\n\t\tthis.position = this.mode === \"append\" ? \"end_of_stream\" : 0;\r\n\t\tthis.output = this.mode === \"write\" || this.mode === \"append\";\r\n\t\tthis.input = this.mode === \"read\";\r\n\t\tthis.line_position = 0;\r\n\t\tthis.line_count = 1;\r\n\t\tthis.char_count = 0;\r\n\t}\r\n\t\r\n\t// Substitutions\r\n\tfunction Substitution( links, attrs ) {\r\n\t\tlinks = links || {};\r\n\t\tattrs = attrs || {};\r\n\t\tthis.links = links;\r\n\t\tthis.attrs = attrs;\r\n\t}\r\n\t\r\n\t// States\r\n\tfunction State( goal, subs, parent ) {\r\n\t\tsubs = subs || new Substitution();\r\n\t\tparent = parent || null;\r\n\t\tthis.goal = goal;\r\n\t\tthis.substitution = subs;\r\n\t\tthis.parent = parent;\r\n\t}\r\n\t\r\n\t// Rules\r\n\tfunction Rule( head, body, dynamic ) {\r\n\t\tthis.head = head;\r\n\t\tthis.body = body;\r\n\t\tthis.dynamic = dynamic ? dynamic : false;\r\n\t}\r\n\r\n\t// Session\r\n\tfunction Session( limit ) {\r\n\t\tlimit = typeof limit === \"number\" && limit > 0 ? limit : null;\r\n\t\tthis.rename = 0;\r\n\t\tthis.modules = {};\r\n\t\tthis.modules.user = new Module(\"user\", {}, \"all\", {\r\n\t\t\tsession: this,\r\n\t\t\tdependencies: [\"system\"]\r\n\t\t});\r\n\t\tthis.modules.system = pl.modules.system;\r\n\t\tthis.rules = this.modules.user.rules;\r\n\t\tthis.total_threads = 0;\r\n\t\tthis.renamed_variables = {};\r\n\t\tthis.public_predicates = this.modules.user.public_predicates;\r\n\t\tthis.multifile_predicates = this.modules.user.multifile_predicates;\r\n\t\tthis.limit = limit;\r\n\t\tthis.streams = {\r\n\t\t\t\"user_input\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_input : tau_user_input,\r\n\t\t\t\t\"read\", \"user_input\", \"text\", false, \"reset\" ),\r\n\t\t\t\"user_output\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_output : tau_user_output,\r\n\t\t\t\t\"append\", \"user_output\", \"text\", false, \"reset\" ),\r\n\t\t\t\"user_error\": new Stream(\r\n\t\t\t\tnodejs_flag ? nodejs_user_error : tau_user_error,\r\n\t\t\t\t\"append\", \"user_error\", \"text\", false, \"reset\" ),\r\n\t\t};\r\n\t\tthis.file_system = nodejs_flag ? nodejs_file_system : tau_file_system;\r\n\t\tthis.standard_input = this.streams[\"user_input\"];\r\n\t\tthis.standard_output = this.streams[\"user_output\"];\r\n\t\tthis.standard_error = this.streams[\"user_error\"];\r\n\t\tthis.current_input = this.streams[\"user_input\"];\r\n\t\tthis.current_output = this.streams[\"user_output\"];\r\n\t\tthis.working_directory = \"/\"; // only for browser\r\n\t\tthis.format_success = function( state ) { return state.substitution; };\r\n\t\tthis.format_error = function( state ) { return state.goal; };\r\n\t\tthis.flag = {\t\r\n\t\t\tbounded: pl.flag.bounded.value,\r\n\t\t\tmax_integer: pl.flag.max_integer.value,\r\n\t\t\tmin_integer: pl.flag.min_integer.value,\r\n\t\t\tinteger_rounding_function: pl.flag.integer_rounding_function.value,\r\n\t\t\tchar_conversion: pl.flag.char_conversion.value,\r\n\t\t\tdebug: pl.flag.debug.value,\r\n\t\t\tmax_arity: pl.flag.max_arity.value,\r\n\t\t\tunknown: pl.flag.unknown.value,\r\n\t\t\tdouble_quotes: pl.flag.double_quotes.value,\r\n\t\t\toccurs_check: pl.flag.occurs_check.value,\r\n\t\t\tdialect: pl.flag.dialect.value,\r\n\t\t\tversion_data: pl.flag.version_data.value,\r\n\t\t\tnodejs: pl.flag.nodejs.value,\r\n\t\t\targv: pl.flag.argv.value\r\n\t\t};\r\n\t\tthis.__loaded_modules = [];\r\n\t\tthis.__char_conversion = {};\r\n\t\tthis.__operators = {\r\n\t\t\t1200: { \":-\": [\"fx\", \"xfx\"], \"-->\": [\"xfx\"], \"?-\": [\"fx\"] },\r\n\t\t\t1150: { \"meta_predicate\": [\"fx\"] },\r\n\t\t\t1100: { \";\": [\"xfy\"] },\r\n\t\t\t1050: { \"->\": [\"xfy\"], \"*->\": [\"xfy\"] },\r\n\t\t\t1000: { \",\": [\"xfy\"] },\r\n\t\t\t900: { \"\\\\+\": [\"fy\"] },\r\n\t\t\t700: {\r\n\t\t\t\t\"=\": [\"xfx\"], \"\\\\=\": [\"xfx\"], \"==\": [\"xfx\"], \"\\\\==\": [\"xfx\"],\r\n\t\t\t\t\"@<\": [\"xfx\"], \"@=<\": [\"xfx\"], \"@>\": [\"xfx\"], \"@>=\": [\"xfx\"],\r\n\t\t\t\t\"=..\": [\"xfx\"], \"is\": [\"xfx\"], \"=:=\": [\"xfx\"], \"=\\\\=\": [\"xfx\"],\r\n\t\t\t\t\"<\": [\"xfx\"], \"=<\": [\"xfx\"], \">\": [\"xfx\"], \">=\": [\"xfx\"]\r\n\t\t\t},\r\n\t\t\t600: { \":\": [\"xfy\"] },\r\n\t\t\t500: { \"+\": [\"yfx\"], \"-\": [\"yfx\"], \"/\\\\\": [\"yfx\"], \"\\\\/\": [\"yfx\"] },\r\n\t\t\t400: {\r\n\t\t\t\t\"*\": [\"yfx\"], \"/\": [\"yfx\"], \"//\": [\"yfx\"], \"rem\": [\"yfx\"],\r\n\t\t\t\t\"mod\": [\"yfx\"], \"<<\": [\"yfx\"], \">>\": [\"yfx\"], \"div\": [\"yfx\"]\r\n\t\t\t},\r\n\t\t\t200: { \"**\": [\"xfx\"], \"^\": [\"xfy\"], \"-\": [\"fy\"], \"+\": [\"fy\"], \"\\\\\": [\"fy\"] }\r\n\t\t};\r\n\t\tthis.thread = new Thread( this );\r\n\t}\r\n\t\r\n\t// Threads\r\n\tfunction Thread( session ) {\r\n\t\tthis.epoch = Date.now();\r\n\t\tthis.session = session;\r\n\t\tthis.session.total_threads++;\r\n\t\tthis.format_success = session.format_success;\r\n\t\tthis.format_error = session.format_error;\r\n\t\tthis.total_steps = 0;\r\n\t\tthis.cpu_time = 0;\r\n\t\tthis.points = [];\r\n\t\tthis.debugger = false;\r\n\t\tthis.debugger_states = [];\r\n\t\tthis.level = new Term(\"top_level\");\r\n\t\tthis.current_limit = this.session.limit;\r\n\t\tthis.has_limit = this.session.limit !== null;\r\n\t\tthis.warnings = [];\r\n\t\tthis.__calls = [];\r\n\t\tthis.__goal_expansion = false;\r\n\t\tthis.__stacks = {};\r\n\t}\r\n\t\r\n\t// Modules\r\n\tfunction Module(id, rules, exports, options) {\r\n\t\toptions = options === undefined ? {} : options;\r\n\t\toptions.public_predicates = options.public_predicates === undefined ? {} : options.public_predicates;\r\n\t\toptions.multifile_predicates = options.multifile_predicates === undefined ? {} : options.multifile_predicates;\r\n\t\toptions.meta_predicates = options.meta_predicates === undefined ? {} : options.meta_predicates;\r\n\t\toptions.session = options.session === undefined ? null : options.session;\r\n\t\toptions.dependencies = options.dependencies === undefined ? [] : options.dependencies;\r\n\t\tthis.id = id;\r\n\t\tthis.rules = rules;\r\n\t\tthis.indexed_clauses = {};\r\n\t\tthis.non_indexable_clauses = {};\r\n\t\tthis.public_predicates = options.public_predicates;\r\n\t\tthis.multifile_predicates = options.multifile_predicates;\r\n\t\tthis.meta_predicates = options.meta_predicates;\r\n\t\tthis.src_predicates = {};\r\n\t\tthis.dependencies = options.dependencies;\r\n\t\tthis.exports = exports;\r\n\t\tthis.is_library = options.session === null;\r\n\t\tthis.modules = {};\r\n\t\tif(options.session) {\r\n\t\t\toptions.session.modules[id] = this;\r\n\t\t\tfor(var i = 0; i < options.dependencies.length; i++) {\r\n\t\t\t\tvar lib = options.dependencies[i];\r\n\t\t\t\tif(!options.session.modules.hasOwnProperty(lib))\r\n\t\t\t\t\toptions.session.modules[lib] = pl.modules[lib];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tpl.modules[id] = this;\r\n\t\t}\r\n\t\tif(exports !== \"all\") {\r\n\t\t\tfor(var i = 0; i < exports.length; i++) {\r\n\t\t\t\tthis.public_predicates[exports[i]] =\r\n\t\t\t\t\toptions.public_predicates.hasOwnProperty(exports[i]) &&\r\n\t\t\t\t\toptions.public_predicates[exports[i]] === true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.update_indices_clauses();\r\n\t}\r\n\t\r\n\t// Check if a predicate is exported\r\n\tModule.prototype.exports_predicate = function(indicator) {\r\n\t\treturn this.exports === \"all\" || indexOf(this.exports, indicator) !== -1;\r\n\t};\r\n\r\n\t// Check if a predicate is public\r\n\tModule.prototype.is_public_predicate = function(indicator) {\r\n\t\treturn !this.public_predicates.hasOwnProperty(indicator) || this.public_predicates[indicator] === true;\r\n\t};\r\n\t\r\n\t// Check if a predicate is multifile\r\n\tModule.prototype.is_multifile_predicate = function( indicator ) {\r\n\t\treturn this.multifile_predicates.hasOwnProperty(indicator) && this.multifile_predicates[indicator] === true;\r\n\t};\r\n\r\n\t// Check if a predicate is a meta-predicate\r\n\tModule.prototype.is_meta_predicate = function( indicator ) {\r\n\t\tif(this.meta_predicates.hasOwnProperty(indicator))\r\n\t\t\treturn this.meta_predicates[indicator];\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Update indices of all predicates\r\n\tModule.prototype.update_indices_clauses = function() {\r\n\t\tthis.indexed_clauses = {};\r\n\t\tthis.non_indexable_clauses = {};\r\n\t\tfor(var indicator in this.rules)\r\n\t\t\tthis.update_indices_predicate(indicator);\r\n\t};\r\n\r\n\t// Update indices of a predicate\r\n\tModule.prototype.update_indices_predicate = function(indicator) {\r\n\t\tthis.indexed_clauses[indicator] = {};\r\n\t\tthis.non_indexable_clauses[indicator] = [];\r\n\t\tif(!Array.isArray(this.rules[indicator]))\r\n\t\t\treturn;\r\n\t\tfor(var i = 0; i < this.rules[indicator].length; i++) {\r\n\t\t\tvar clause = this.rules[indicator][i];\r\n\t\t\tthis.add_index_predicate(clause);\r\n\t\t}\r\n\t};\r\n\r\n\t// Add indexed cluuse to a predicate\r\n\tModule.prototype.add_index_predicate = function(clause) {\r\n\t\tvar indicator = clause.head.indicator;\r\n\t\tvar index = clause.head.args.length > 0 ? clause.head.args[0].index : undefined;\r\n\t\tif(index) {\r\n\t\t\tif(!this.indexed_clauses.hasOwnProperty(indicator))\r\n\t\t\t\tthis.indexed_clauses[indicator] = {};\r\n\t\t\tif(!this.indexed_clauses[indicator].hasOwnProperty(index)) {\r\n\t\t\t\tthis.indexed_clauses[indicator][index] = [];\r\n\t\t\t\tif(this.non_indexable_clauses.hasOwnProperty(indicator))\r\n\t\t\t\t\tfor(var j = 0; j < this.non_indexable_clauses[indicator].length; j++)\r\n\t\t\t\t\t\tthis.indexed_clauses[indicator][index].push(this.non_indexable_clauses[indicator][j]);\r\n\t\t\t}\r\n\t\t\tthis.indexed_clauses[indicator][index].push(clause);\r\n\t\t} else {\r\n\t\t\tif(!this.non_indexable_clauses.hasOwnProperty(indicator))\r\n\t\t\t\tthis.non_indexable_clauses[indicator] = [];\r\n\t\t\tthis.non_indexable_clauses[indicator].push(clause);\r\n\t\t\tfor(var index in this.indexed_clauses[indicator])\r\n\t\t\t\tthis.indexed_clauses[indicator][index].push(clause);\r\n\t\t}\r\n\t};\r\n\r\n\r\n\r\n\t// UNIFY PROLOG OBJECTS\r\n\r\n\t// Variables\r\n\tVar.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(occurs_check && indexOf(obj.variables(), this.id) !== -1 && !pl.type.is_variable(obj))\r\n\t\t\treturn null;\r\n\t\tvar links = {};\r\n\t\tlinks[this.id] = obj;\r\n\t\treturn new Substitution(links);\r\n\t};\r\n\r\n\t// Numbers\r\n\tNum.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(pl.type.is_number(obj) && this.value === obj.value && this.is_float === obj.is_float)\r\n\t\t\treturn new Substitution();\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Terms\r\n\tTerm.prototype.unify = function(obj, occurs_check) {\r\n\t\tif(!pl.type.is_term(obj) && obj.unify !== undefined) {\r\n\t\t\treturn obj.unify(this, occurs_check);\r\n\t\t} else if(pl.type.is_term(obj) && this.indicator === obj.indicator) {\r\n\t\t\tvar subs = new Substitution();\r\n\t\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\t\tvar mgu = pl.unify(this.args[i].apply(subs), obj.args[i].apply(subs), occurs_check);\r\n\t\t\t\tif(mgu === null)\r\n\t\t\t\t\treturn null;\r\n\t\t\t\tfor(var x in mgu.links)\r\n\t\t\t\t\tsubs.links[x] = mgu.links[x];\r\n\t\t\t\tsubs = subs.apply(mgu);\r\n\t\t\t}\r\n\t\t\treturn subs;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.unify = function(obj, _occurs_check) {\r\n\t\tif(pl.type.is_stream(obj) && this.id === obj.id)\r\n\t\t\treturn new Substitution();\r\n\t\treturn null;\r\n\t};\r\n\r\n\tStream.prototype.compare = function(obj) {\r\n\t\tif(this.id < obj.id)\r\n\t\t\treturn -1;\r\n\t\telse if(this.id === obj.id)\r\n\t\t\treturn 0;\r\n\t\telse\r\n\t\t\treturn 1;\r\n\t};\r\n\t\r\n\t\r\n\r\n\t// PROLOG OBJECTS TO STRING\r\n\t\r\n\t// Variables\r\n\tVar.prototype.toString = function( options ) {\r\n\t\toptions = options === undefined ? {} : options;\r\n\t\tif(options.variable_names) {\r\n\t\t\tvar pointer = options.variable_names;\r\n\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\tif(pl.type.is_term(head) && head.indicator === \"=/2\"\r\n\t\t\t\t&& pl.type.is_variable(head.args[1]) && head.args[1].id === this.id\r\n\t\t\t\t&& pl.type.is_atom(head.args[0]))\r\n\t\t\t\t\treturn head.args[0].id;\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.id;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.toString = function( _ ) {\r\n\t\tvar str = this.value.toString();\r\n\t\tvar e = str.indexOf(\"e\");\r\n\t\tif(e !== -1) {\r\n\t\t\tif(str.indexOf(\".\") !== -1)\r\n\t\t\t\treturn str;\r\n\t\t\telse\r\n\t\t\t\treturn str.replace(\"e\", \".0e\");\r\n\t\t}\r\n\t\treturn this.is_float && indexOf(str, \".\") === -1 ? this.value + \".0\" : str;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.toString = function( options, priority, from ) {\r\n\t\toptions = !options ? {} : options;\r\n\t\toptions.quoted = options.quoted === undefined ? false: options.quoted;\r\n\t\toptions.ignore_ops = options.ignore_ops === undefined ? false : options.ignore_ops;\r\n\t\toptions.numbervars = options.numbervars === undefined ? false : options.numbervars;\r\n\t\toptions.variable_names = options.variable_names === undefined ? false : options.variable_names;\r\n\t\tpriority = priority === undefined ? {priority: 1200, class: \"\", indicator: \"\"} : priority;\r\n\t\tfrom = from === undefined ? \"\" : from;\r\n\t\tvar arg_priority = {priority: 999, class: \"\", indicator: \"\"};\r\n\t\tif( options.numbervars && this.indicator === \"$VAR/1\" && pl.type.is_integer( this.args[0] ) && this.args[0].value >= 0 ) {\r\n\t\t\tvar i = this.args[0].value;\r\n\t\t\tvar number = Math.floor( i/26 );\r\n\t\t\tvar letter = i % 26;\r\n\t\t\treturn \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"[letter] + (number !== 0 ? number : \"\");\r\n\t\t}\r\n\t\tswitch( this.indicator ){\r\n\t\t\tcase \"[]/0\":\r\n\t\t\tcase \"{}/0\":\r\n\t\t\tcase \"!/0\":\r\n\t\t\t\treturn this.id;\r\n\t\t\tcase \"{}/1\":\r\n\t\t\t\tif( options.ignore_ops === false ) {\r\n\t\t\t\t\treturn \"{\" + this.args[0].toString( options ) + \"}\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn \"{}(\" + this.args[0].toString( options ) + \")\";\r\n\t\t\t\t}\r\n\t\t\tcase \"./2\":\r\n\t\t\t\tif( options.ignore_ops === false ) {\r\n\t\t\t\t\tvar list = \"[\" + this.args[0].toString( options, arg_priority );\r\n\t\t\t\t\tvar pointer = this.args[1];\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tlist += \",\" + pointer.args[0].toString( options, arg_priority );\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\t\tlist += \"|\" + pointer.toString( options, arg_priority );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist += \"]\";\r\n\t\t\t\t\treturn list;\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tvar id = this.id;\r\n\t\t\t\tvar operator = options.session ? options.session.lookup_operator( this.id, this.args.length ) : null;\r\n\t\t\t\tif( options.session === undefined || options.ignore_ops || operator === null ) {\r\n\t\t\t\t\tif( options.quoted && (! /^(!|[a-z][0-9a-zA-Z_]*|[#\\$\\&\\*\\+\\-\\.\\/\\:\\<\\=\\>\\?\\@\\^\\~\\\\]+)$/.test( id ) && id !== \"{}\" && id !== \"[]\" || indexOf([\".\",\",\",\";\"], id) !== -1 || id.substring(0,2) === \"/*\") )\r\n\t\t\t\t\t\tid = \"'\" + redoEscape(id) + \"'\";\r\n\t\t\t\t\tif( this.args.length === 0 && is_graphic_token(this.id) && priority.indicator !== \"\")\r\n\t\t\t\t\t\treturn \"(\" + id + \")\";\r\n\t\t\t\t\treturn id + (this.args.length > 0 ? \"(\" + map( this.args,\r\n\t\t\t\t\t\tfunction(x) { return x.toString(options, arg_priority); }\r\n\t\t\t\t\t).join(\",\") + \")\" : \"\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar priority_op = parseInt(operator.priority);\r\n\t\t\t\t\tvar priority_arg = parseInt(priority.priority);\r\n\t\t\t\t\tvar cond = priority_op > priority_arg || priority_op === priority_arg && (\r\n\t\t\t\t\t\toperator.class === \"xfx\" ||\r\n\t\t\t\t\t\toperator.class === \"xfy\" && this.indicator !== priority.indicator ||\r\n\t\t\t\t\t\toperator.class === \"yfx\" && this.indicator !== priority.indicator ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"yfx\" && from === \"right\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"xfy\" && from === \"left\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"xf\" && from === \"left\" ||\r\n\t\t\t\t\t\tthis.indicator === priority.indicator && operator.class === \"fx\" && from === \"right\");\r\n\t\t\t\t\toperator.indicator = this.indicator;\r\n\t\t\t\t\tvar lpar = cond ? \"(\" : \"\";\r\n\t\t\t\t\tvar rpar = cond ? \")\" : \"\";\r\n\t\t\t\t\tvar space = !(is_graphic_token(this.id) || this.id === \",\" || this.id === \";\")\r\n\t\t\t\t\t\t|| operator.class.length === 2\r\n\t\t\t\t\t\t|| operator.class.length === 3 && pl.type.is_number(this.args[1]) && this.args[1].value < 0 ? \" \" : \"\";\r\n\t\t\t\t\tif( this.args.length === 0 ) {\r\n\t\t\t\t\t\treturn lpar + this.id + rpar;\r\n\t\t\t\t\t} else if( [\"fy\",\"fx\"].indexOf( operator.class) !== -1 ) {\r\n\t\t\t\t\t\treturn lpar + id + space + this.args[0].toString( options, operator, \"right\" ) + rpar;\r\n\t\t\t\t\t} else if( [\"yf\",\"xf\"].indexOf( operator.class) !== -1 ) {\r\n\t\t\t\t\t\treturn lpar + this.args[0].toString( options, operator, \"left\" ) + space + id + rpar;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn lpar + this.args[0].toString( options, operator, \"left\" ) + space + this.id + space + this.args[1].toString( options, operator, \"right\" ) + rpar;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.toString = function( _ ) {\r\n\t\treturn \"(\" + this.id + \")\";\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.toString = function( options ) {\r\n\t\tvar str = \"{\";\r\n\t\tfor( var link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( str !== \"{\" ) {\r\n\t\t\t\tstr += \", \";\r\n\t\t\t}\r\n\t\t\tstr += link + \"/\" + this.links[link].toString( options );\r\n\t\t}\r\n\t\tstr += \"}\";\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.toString = function( options ) {\r\n\t\tif( this.goal === null ) {\r\n\t\t\treturn \"<\" + this.substitution.toString( options ) + \">\";\r\n\t\t} else {\r\n\t\t\treturn \"<\" + this.goal.toString( options ) + \", \" + this.substitution.toString( options ) + \">\";\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.toString = function( options ) {\r\n\t\tif( !this.body ) {\r\n\t\t\treturn this.head.toString( options ) + \".\";\r\n\t\t} else {\r\n\t\t\treturn this.head.toString( options, 1200, \"left\" ) + \" :- \" + this.body.toString( options, 1200, \"right\" ) + \".\";\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Session\r\n\tSession.prototype.toString = function( options ) {\r\n\t\tvar str = \"\";\r\n\t\tfor(var prop in this.modules) {\r\n\t\t\tif(this.modules.hasOwnProperty(prop) && this.modules[prop].is_library)\r\n\t\t\t\tstr += \":- use_module(library(\" + this.modules[prop] + \")).\\n\";\r\n\t\t}\r\n\t\tstr += \"\\n\";\r\n\t\tfor(var key in this.modules.user.rules) {\r\n\t\t\tif(!this.modules.user.rules.hasOwnProperty(key)) continue;\r\n\t\t\tfor(i = 0; i < this.modules.user.rules[key].length; i++) {\r\n\t\t\t\tstr += this.modules.user.rules[key][i].toString(options);\r\n\t\t\t\tstr += \"\\n\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// CLONE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.clone = function() {\r\n\t\treturn new Var( this.id );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.clone = function() {\r\n\t\treturn new Num( this.value, this.is_float );\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.clone = function() {\r\n\t\tvar term = new Term( this.id, map( this.args, function( arg ) {\r\n\t\t\treturn arg.clone();\r\n\t\t} ) );\r\n\t\tif(this.definition_module)\r\n\t\t\tterm.definition_module = this.definition_module;\r\n\t\treturn term;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.clone = function() {\r\n\t\treturn new Stream( this.stream, this.mode, this.alias, this.type, this.reposition, this.eof_action );\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.clone = function() {\r\n\t\tvar links = {};\r\n\t\tvar attrs = {};\r\n\t\tfor( var link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tlinks[link] = this.links[link].clone();\r\n\t\t}\r\n\t\tfor( var attr in this.attrs ) {\r\n\t\t\tif(!this.attrs.hasOwnProperty(attrs)) continue;\r\n\t\t\tattrs[attr] = {};\r\n\t\t\tfor( var m in this.attrs[attr] ) {\r\n\t\t\t\tif(!this.attrs[attr].hasOwnProperty(m)) continue;\r\n\t\t\t\tattrs[attr][m] = this.attrs[attr][m].clone();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, attrs );\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.clone = function() {\r\n\t\treturn new State( this.goal.clone(), this.substitution.clone(), this.parent );\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.clone = function() {\r\n\t\treturn new Rule( this.head.clone(), this.body !== null ? this.body.clone() : null );\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPARE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_variable( obj ) && this.id === obj.id;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_number( obj ) && this.value === obj.value && this.is_float === obj.is_float;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.equals = function( obj ) {\r\n\t\tif( !pl.type.is_term( obj ) || this.indicator !== obj.indicator ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor( var i = 0; i < this.args.length; i++ ) {\r\n\t\t\tif( !this.args[i].equals( obj.args[i] ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_stream( obj ) && this.id === obj.id;\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.equals = function( obj ) {\r\n\tvar link;\r\n\t\tif( !pl.type.is_substitution( obj ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor( link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( !obj.links[link] || !this.links[link].equals( obj.links[link] ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor( link in obj.links ) {\r\n\t\t\tif(!obj.links.hasOwnProperty(link)) continue;\r\n\t\t\tif( !this.links[link] ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\t// States\r\n\tState.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_state( obj ) && this.goal.equals( obj.goal ) && this.substitution.equals( obj.substitution ) && this.parent === obj.parent;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.equals = function( obj ) {\r\n\t\treturn pl.type.is_rule( obj ) && this.head.equals( obj.head ) && (this.body === null && obj.body === null || this.body !== null && this.body.equals( obj.body ));\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// RENAME VARIABLES OF PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.rename = function( thread ) {\r\n\t\treturn thread.get_free_variable( this );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.rename = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.rename = function( thread ) {\r\n\t\t// ground\r\n\t\tif(this.ground)\r\n\t\t\treturn new Term(this.id, this.args);\r\n\t\t// list\r\n\t\tif(this.indicator === \"./2\") {\r\n\t\t\tvar arr = [];\r\n\t\t\tvar pointer = this;\r\n\t\t\twhile(pointer.indicator === \"./2\" && !pointer.ground) {\r\n\t\t\t\tvar app = pointer.args[0].rename(thread);\r\n\t\t\t\tarr.push(app);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar list = pointer.rename(thread);\r\n\t\t\tfor(var i = arr.length-1; i >= 0; i--)\r\n\t\t\t\tlist = new Term(\".\", [arr[i], list]);\r\n\t\t\treturn list;\r\n\t\t}\r\n\t\t// compound term\r\n\t\tvar args = [];\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tvar app = this.args[i].rename(thread);\r\n\t\t\targs.push(app);\r\n\t\t}\r\n\t\treturn new Term(this.id, args);\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.rename = function( thread ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.rename = function( thread ) {\r\n\t\treturn new Rule( this.head.rename( thread ), this.body !== null ? this.body.rename( thread ) : null );\r\n\t};\r\n\r\n\r\n\r\n\t// CHECK IF RENAME\r\n\r\n\t// Variables\r\n\tVar.prototype.is_rename = function(obj, links) {\r\n\t\tlinks = links || {};\r\n\t\tif(!pl.type.is_variable(obj)\r\n\t\t|| links.hasOwnProperty(this.id) && links[this.id] !== obj.id\r\n\t\t|| links.hasOwnProperty(obj.id) && links[obj.id] !== this.id)\r\n\t\t\treturn false;\r\n\t\tlinks[this.id] = obj.id;\r\n\t\tlinks[obj.id] = this.id;\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.is_rename = function(obj, _links) {\r\n\t\treturn this.equals(obj);\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.is_rename = function(obj, links) {\r\n\t\tlinks = links || {};\r\n\t\tif(!pl.type.is_term(obj) || this.indicator !== obj.indicator)\r\n\t\t\treturn false;\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tif(!pl.is_rename(this.args[i], obj.args[i], links))\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.is_rename = function(obj, _links) {\r\n\t\treturn this.equals(obj);\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// GET ID OF VARIABLES FROM PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.variables = function() {\r\n\t\treturn [this.id];\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.variables = function() {\r\n\t\treturn [];\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.variables = function() {\r\n\t\tif(this.ground)\r\n\t\t\treturn [];\r\n\t\treturn [].concat.apply( [], map( this.args, function( arg ) {\r\n\t\t\treturn arg.variables();\r\n\t\t} ) );\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.variables = function() {\r\n\t\treturn [];\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.variables = function() {\r\n\t\tif( this.body === null ) {\r\n\t\t\treturn this.head.variables();\r\n\t\t} else {\r\n\t\t\treturn this.head.variables().concat( this.body.variables() );\r\n\t\t}\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// APPLY SUBSTITUTIONS TO PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.apply = function( subs ) {\r\n\t\tif( subs.lookup( this.id ) ) {\r\n\t\t\treturn subs.lookup( this.id );\r\n\t\t}\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.apply = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.apply = function( subs ) {\r\n\t\t// ground atom\r\n\t\tif(this.ground)\r\n\t\t\treturn this;\r\n\t\t// list\r\n\t\tif(this.indicator === \"./2\") {\r\n\t\t\tvar arr = [];\r\n\t\t\tvar pointer = this;\r\n\t\t\twhile(pointer.indicator === \"./2\" && !pointer.ground) {\r\n\t\t\t\tvar app = pointer.args[0].apply(subs);\r\n\t\t\t\tarr.push(app);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar list = pointer.apply(subs);\r\n\t\t\tfor(var i = arr.length-1; i >= 0; i--)\r\n\t\t\t\tlist = new Term(\".\", [arr[i], list]);\r\n\t\t\treturn list;\r\n\t\t}\r\n\t\t// compound term\r\n\t\tvar args = [];\r\n\t\tfor(var i = 0; i < this.args.length; i++) {\r\n\t\t\tvar app = this.args[i].apply(subs);\r\n\t\t\targs.push(app);\r\n\t\t}\r\n\t\treturn new Term(this.id, args, this.ref);\r\n\t};\r\n\r\n\t// Streams\r\n\tStream.prototype.apply = function( _ ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.apply = function( subs ) {\r\n\t\treturn new Rule( this.head.apply( subs ), this.body !== null ? this.body.apply( subs ) : null );\r\n\t};\r\n\t\r\n\t// Substitutions\r\n\tSubstitution.prototype.apply = function( subs ) {\r\n\t\tvar link, links = {}, attr, attrs = {}, m;\r\n\t\tfor( link in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(link)) continue;\r\n\t\t\tlinks[link] = this.links[link].apply(subs);\r\n\t\t}\r\n\t\tfor( attr in this.attrs ) {\r\n\t\t\tif(!this.attrs.hasOwnProperty(attr)) continue;\r\n\t\t\tattrs[attr] = {};\r\n\t\t\tfor( m in this.attrs[attr] ) {\r\n\t\t\t\tif(!this.attrs[attr].hasOwnProperty(m)) continue;\r\n\t\t\t\tattrs[attr][m] = this.attrs[attr][m].apply(subs);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, attrs );\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// SELECTION FUNCTION\r\n\t\r\n\t// Select term\r\n\tTerm.prototype.select = function() {\r\n\t\tvar pointer = this;\r\n\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \",/2\")\r\n\t\t\tpointer = pointer.args[0];\r\n\t\treturn pointer;\r\n\t};\r\n\t\r\n\t// Replace term\r\n\tTerm.prototype.replace = function( expr ) {\r\n\t\tif( this.indicator === \",/2\" ) {\r\n\t\t\tif( this.args[0].indicator === \",/2\" ) {\r\n\t\t\t\treturn new Term( \",\", [this.args[0].replace( expr ), this.args[1]] );\r\n\t\t\t} else {\r\n\t\t\t\treturn expr === null ? this.args[1] : new Term( \",\", [expr, this.args[1]] );\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn expr;\r\n\t\t}\r\n\t};\r\n\r\n\t// Search term\r\n\tTerm.prototype.search = function( expr ) {\r\n\t\tif(this == expr || this.ref === expr.ref)\r\n\t\t\treturn true;\r\n\t\tfor( var i = 0; i < this.args.length; i++ )\r\n\t\t\tif( pl.type.is_term( this.args[i] ) && this.args[i].search( expr ) )\r\n\t\t\t\treturn true;\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG SESSIONS AND THREADS\r\n\r\n\t// Push to a global stack\r\n\tSession.prototype.push_global_stack = function(stack, value) {\r\n\t\treturn this.thread.push_global_stack(stack, value);\r\n\t};\r\n\tThread.prototype.push_global_stack = function(stack, value) {\r\n\t\tif(!this.__stacks.hasOwnProperty(stack))\r\n\t\t\tthis.__stacks[stack] = [];\r\n\t\tthis.__stacks[stack].push(value);\r\n\t};\r\n\r\n\t// Pop all from a global stack\r\n\tSession.prototype.flush_global_stack = function(stack, tail) {\r\n\t\treturn this.thread.push_global_stack(stack, tail);\r\n\t};\r\n\tThread.prototype.flush_global_stack = function(stack, tail) {\r\n\t\tvar list = tail || new Term(\"[]\", []);\r\n\t\tif(this.__stacks.hasOwnProperty(stack)) {\r\n\t\t\twhile(this.__stacks[stack].length > 0)\r\n\t\t\t\tlist = new Term(\".\", [this.__stacks[stack].pop(), list]);\r\n\t\t\tdelete this.__stacks[stack];\r\n\t\t}\r\n\t\treturn list;\r\n\t};\r\n\r\n\t// Set max inferences\r\n\tSession.prototype.setMaxInferences = function(max) {\r\n\t\tthis.limit = typeof max === \"number\" && max > 0 ? max : null;\r\n\t};\r\n\tThread.prototype.setMaxInferences = function(max) {\r\n\t\tthis.session.setMaxInferences(max);\r\n\t\tthis.current_limit = this.session.limit;\r\n\t\tthis.has_limit = this.session.limit !== null;\r\n\t};\r\n\r\n\t// Format answer\r\n\tSession.prototype.format_answer = function(answer, options) {\r\n\t\treturn this.thread.format_answer(answer, options);\r\n\t};\r\n\tThread.prototype.format_answer = function(answer, options) {\r\n\t\treturn pl.format_answer(answer, this, options);\r\n\t};\r\n\r\n\t// Get current input\r\n\tSession.prototype.get_current_input = function() {\r\n\t\treturn this.current_input;\r\n\t};\r\n\tThread.prototype.get_current_input = function() {\r\n\t\treturn this.session.get_current_input();\r\n\t};\r\n\r\n\t// Get current output\r\n\tSession.prototype.get_current_output = function() {\r\n\t\treturn this.current_output;\r\n\t};\r\n\tThread.prototype.get_current_output = function() {\r\n\t\treturn this.session.get_current_output();\r\n\t};\r\n\r\n\t// Set current input\r\n\tSession.prototype.set_current_input = function( input ) {\r\n\t\tthis.current_input = input;\r\n\t};\r\n\tThread.prototype.set_current_input = function( input ) {\r\n\t\treturn this.session.set_current_input( input );\r\n\t};\r\n\r\n\t// Set current output\r\n\tSession.prototype.set_current_output = function( output ) {\r\n\t\tthis.current_output = output;\r\n\t};\r\n\tThread.prototype.set_current_output = function( output ) {\r\n\t\treturn this.session.set_current_output( output);\r\n\t};\r\n\r\n\t// Get stream by alias\r\n\tSession.prototype.get_stream_by_alias = function( alias ) {\r\n\t\treturn this.streams[alias];\r\n\t};\r\n\tThread.prototype.get_stream_by_alias = function( alias ) {\r\n\t\treturn this.session.get_stream_by_alias( alias );\r\n\t};\r\n\r\n\t// Open file\r\n\tSession.prototype.file_system_open = function( path, type, mode ) {\r\n\t\tif(this.get_flag(\"nodejs\").indicator === \"false/0\")\r\n\t\t\tpath = this.absolute_file_name(path);\r\n\t\treturn this.file_system.open( path, type, mode );\r\n\t};\r\n\tThread.prototype.file_system_open = function( path, type, mode ) {\r\n\t\treturn this.session.file_system_open( path, type, mode );\r\n\t};\r\n\r\n\t// Absolute file name\r\n\tSession.prototype.absolute_file_name = function(filename) {\r\n\t\tvar absolute;\r\n\t\t// node.js\r\n\t\tif(this.get_flag(\"nodejs\").indicator === \"true/0\") {\r\n\t\t\tvar path = require(\"path\");\r\n\t\t\tabsolute = filename;\r\n\t\t\tfor(var prop in process.env) {\r\n\t\t\t\tif(!process.env.hasOwnProperty(prop))\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tabsolute = absolute.replace(new RegExp(\"\\\\$\" + prop, \"g\"), process.env[prop]);\r\n\t\t\t}\r\n\t\t\treturn path.resolve(absolute);\r\n\t\t// browser\r\n\t\t} else {\r\n\t\t\tvar cwd = this.working_directory;\r\n\t\t\tif(filename[0] === \"/\")\r\n\t\t\t\tabsolute = filename;\r\n\t\t\telse\r\n\t\t\t\tabsolute = cwd + (cwd[cwd.length-1] === \"/\" ? filename : \"/\" + filename);\r\n\t\t\tabsolute = absolute.replace(/\\/\\.\\//g, \"/\");\r\n\t\t\tvar dirs = absolute.split(\"/\");\r\n\t\t\tvar dirs2 = [];\r\n\t\t\tfor(var i = 0; i < dirs.length; i++) {\r\n\t\t\t\tif(dirs[i] !== \"..\") {\r\n\t\t\t\t\tdirs2.push(dirs[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(dirs2.length !== 0)\r\n\t\t\t\t\t\tdirs2.pop();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tabsolute = dirs2.join(\"/\").replace(/\\/\\.$/, \"/\");\r\n\t\t}\r\n\t\treturn absolute;\r\n\t};\r\n\tThread.prototype.absolute_file_name = function(path, cwd) {\r\n\t\treturn this.session.absolute_file_name(path, cwd);\r\n\t};\r\n\r\n\t// Get conversion of the char\r\n\tSession.prototype.get_char_conversion = function( char ) {\r\n\t\treturn this.__char_conversion[char] || char;\r\n\t};\r\n\tThread.prototype.get_char_conversion = function( char ) {\r\n\t\treturn this.session.get_char_conversion( char );\r\n\t};\r\n\t\r\n\t// Parse an expression\r\n\tSession.prototype.parse = function( string ) {\r\n\t\treturn this.thread.parse( string );\r\n\t};\r\n\tThread.prototype.parse = function( string ) {\r\n\t\tvar tokenizer = new Tokenizer( this );\r\n\t\ttokenizer.new_text( string );\r\n\t\tvar tokens = tokenizer.get_tokens();\r\n\t\tif( tokens === null )\r\n\t\t\treturn false;\r\n\t\tvar expr = parseExpr(this, tokens, 0, this.__get_max_priority(), false);\r\n\t\tif( expr.len !== tokens.length )\r\n\t\t\treturn false;\r\n\t\treturn { value: expr.value, expr: expr, tokens: tokens };\r\n\t};\r\n\t\r\n\t// Get flag value\r\n\tSession.prototype.get_flag = function( flag ) {\r\n\t\treturn this.flag[flag];\r\n\t};\r\n\tThread.prototype.get_flag = function( flag ) {\r\n\t\treturn this.session.get_flag( flag );\r\n\t};\r\n\r\n\t// Add a rule\r\n\tSession.prototype.add_rule = function(rule, options) {\r\n\t\treturn this.thread.add_rule(rule, options);\r\n\t};\r\n\tThread.prototype.add_rule = function(rule, options) {\r\n\t\toptions = options ? options : {};\r\n\t\toptions.from = options.from ? options.from : \"$tau-js\";\r\n\t\tvar module_id, get_module;\r\n\t\tif(pl.type.is_term(rule.head) && rule.head.indicator === \":/2\") {\r\n\t\t\tif(!pl.type.is_atom(rule.head.args[0])) {\r\n\t\t\t\tthis.throw_warning(pl.error.type(\"module\", rule.head.args[0], \"top_level/0\"));\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tmodule_id = rule.head.args[0].id;\r\n\t\t\trule.head = rule.head.args[1];\r\n\t\t}\r\n\t\tif(module_id) {\r\n\t\t\tget_module = this.session.modules[module_id];\r\n\t\t\tif(!pl.type.is_module(get_module)) {\r\n\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: this.session});\r\n\t\t\t\tthis.session.modules[module_id] = get_module;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tget_module = this.session.modules[options.context_module];\r\n\t\t}\r\n\t\tget_module.src_predicates[rule.head.indicator] = options.from;\r\n\t\tif(!get_module.rules.hasOwnProperty(rule.head.indicator)) {\r\n\t\t\tget_module.rules[rule.head.indicator] = [];\r\n\t\t}\r\n\t\tget_module.rules[rule.head.indicator].push(rule);\r\n\t\tif(!get_module.public_predicates.hasOwnProperty(rule.head.indicator))\r\n\t\t\tget_module.public_predicates[rule.head.indicator] = false;\r\n\t\t// update term indexing\r\n\t\tget_module.add_index_predicate(rule);\r\n\t\treturn true;\r\n\t};\r\n\r\n\t// Run a directive\r\n\tSession.prototype.run_directive = function(directive, options) {\r\n\t\treturn this.thread.run_directive(directive, options);\r\n\t};\r\n\tThread.prototype.run_directive = function(directive, options) {\r\n\t\tif(pl.type.is_directive(directive)) {\r\n\t\t\tif(pl.directive[directive.indicator])\r\n\t\t\t\treturn pl.directive[directive.indicator](this, directive, options);\r\n\t\t\telse\r\n\t\t\t\treturn pl.directive[directive.id + \"/*\"](this, directive, options);\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\t// Get maximum priority of the operators\r\n\tSession.prototype.__get_max_priority = function() {\r\n\t\treturn \"1200\";\r\n\t};\r\n\tThread.prototype.__get_max_priority = function() {\r\n\t\treturn this.session.__get_max_priority();\r\n\t};\r\n\t\r\n\t// Get next priority of the operators\r\n\tSession.prototype.__get_next_priority = function( priority ) {\r\n\t\tvar max = 0;\r\n\t\tpriority = parseInt( priority );\r\n\t\tfor( var key in this.__operators ) {\r\n\t\t\tif( !this.__operators.hasOwnProperty(key) ) continue;\r\n\t\t\tvar n = parseInt(key);\r\n\t\t\tif( n > max && n < priority ) max = n;\r\n\t\t}\r\n\t\treturn max.toString();\r\n\t};\r\n\tThread.prototype.__get_next_priority = function( priority ) {\r\n\t\treturn this.session.__get_next_priority( priority );\r\n\t};\r\n\t\r\n\t// Get classes of an operator\r\n\tSession.prototype.__lookup_operator_classes = function( priority, operator ) {\r\n\t\tif( this.__operators.hasOwnProperty( priority ) && this.__operators[priority][operator] instanceof Array ) {\r\n\t\t\treturn this.__operators[priority][operator] || false;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tThread.prototype.__lookup_operator_classes = function( priority, operator ) {\r\n\t\treturn this.session.__lookup_operator_classes( priority, operator );\r\n\t};\r\n\r\n\t// Get operator\r\n\tSession.prototype.lookup_operator = function( name, arity ) {\r\n\t\tfor(var p in this.__operators)\r\n\t\t\tif(this.__operators[p][name])\r\n\t\t\t\tfor(var i = 0; i < this.__operators[p][name].length; i++)\r\n\t\t\t\t\tif( this.__operators[p][name][i].length === arity+1 )\r\n\t\t\t\t\t\treturn {priority: p, class: this.__operators[p][name][i]};\r\n\t\treturn null;\r\n\t};\r\n\tThread.prototype.lookup_operator = function( name, arity ) {\r\n\t\treturn this.session.lookup_operator( name, arity );\r\n\t};\r\n\t\r\n\t// Throw a warning\r\n\tSession.prototype.throw_warning = function( warning ) {\r\n\t\tthis.thread.throw_warning( warning );\r\n\t};\r\n\tThread.prototype.throw_warning = function( warning ) {\r\n\t\tthis.warnings.push( warning );\r\n\t};\r\n\t\r\n\t// Get warnings\r\n\tSession.prototype.get_warnings = function() {\r\n\t\treturn this.thread.get_warnings();\r\n\t};\r\n\tThread.prototype.get_warnings = function() {\r\n\t\treturn this.warnings;\r\n\t};\r\n\r\n\t// Add a goal\r\n\tSession.prototype.add_goal = function( goal, unique ) {\r\n\t\tthis.thread.add_goal( goal, unique );\r\n\t};\r\n\tThread.prototype.add_goal = function( goal, unique, parent ) {\r\n\t\tparent = parent ? parent : null;\r\n\t\tif( unique === true )\r\n\t\t\tthis.points = [];\r\n\t\tvar vars = goal.variables();\r\n\t\tvar links = {};\r\n\t\tfor( var i = 0; i < vars.length; i++ )\r\n\t\t\tlinks[vars[i]] = new Var(vars[i]);\r\n\t\tthis.points.push( new State( goal, new Substitution(links), parent ) );\r\n\t};\r\n\r\n\t// Consult a program from a string\r\n\tSession.prototype.consult = function(program, options) {\r\n\t\treturn this.thread.consult(program, options);\r\n\t};\r\n\tThread.prototype.consult = function(program, options) {\r\n\t\tvar string = \"\", success = false;\r\n\t\tvar opts = {};\r\n\t\tvar callback = typeof options === \"function\" ? options : function(){};\r\n\t\toptions = options === undefined || typeof options === \"function\" ? {} : options;\r\n\t\topts.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\topts.text = options.text === undefined ? true : options.text;\r\n\t\topts.html = options.html === undefined ? true : options.html;\r\n\t\topts.url = options.url === undefined ? true : options.url;\r\n\t\topts.file = options.file === undefined ? true : options.file;\r\n\t\topts.script = options.script === undefined ? true : options.script;\r\n\t\topts.success = options.success === undefined ? callback : options.success;\r\n\t\topts.error = options.error === undefined ? callback : options.error;\r\n\t\t// string\r\n\t\tif(typeof program === \"string\") {\r\n\t\t\tstring = program;\r\n\t\t\t// script id\r\n\t\t\tif(opts.script && this.get_flag(\"nodejs\").indicator === \"false/0\" && program != \"\" && document.getElementById(string)) {\r\n\t\t\t\tvar script = document.getElementById(string);\r\n\t\t\t\tvar type = script.getAttribute(\"type\");\r\n\t\t\t\tif(type !== null && type.replace(/ /g, \"\").toLowerCase() === \"text/prolog\") {\r\n\t\t\t\t\tstring = script.text;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// file (node.js)\r\n\t\t\tif(!success && opts.file && this.get_flag(\"nodejs\").indicator === \"true/0\") {\r\n\t\t\t\tvar fs = require(\"fs\");\r\n\t\t\t\tvar thread = this;\r\n\t\t\t\tfs.readFile(program, function(error, data) {\r\n\t\t\t\t\tif(error) {\r\n\t\t\t\t\t\topts.file = false;\r\n\t\t\t\t\t\tthread.consult(program, opts);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tparseProgram(thread, data.toString(), opts);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// http request\r\n\t\t\tif(!success && this.get_flag(\"nodejs\").indicator === \"false/0\" && opts.url && program !== \"\" && !(/\\s/.test(program))) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tvar xhttp = new XMLHttpRequest();\r\n\t\t\t\t\tvar thread = this;\r\n\t\t\t\t\txhttp.onreadystatechange = function() {\r\n\t\t\t\t\t\tif(this.readyState == 4) {\r\n\t\t\t\t\t\t\tif(this.status == 200) {\r\n\t\t\t\t\t\t\t\tstring = xhttp.responseText;\r\n\t\t\t\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\t\t\t\tparseProgram(thread, string, opts);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\topts.url = false;\r\n\t\t\t\t\t\t\t\tthread.consult(program, opts);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\txhttp.open(\"GET\", program, true);\r\n\t\t\t\t\txhttp.send();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} catch(ex) {\r\n\t\t\t\t\topts.error(ex);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// text\r\n\t\t\tif(!success && opts.text) {\r\n\t\t\t\tsuccess = true;\r\n\t\t\t}\r\n\t\t// html\r\n\t\t} else if(opts.html && program.nodeName) {\r\n\t\t\tswitch(program.nodeName.toLowerCase()) {\r\n\t\t\t\tcase \"input\":\r\n\t\t\t\tcase \"textarea\":\r\n\t\t\t\t\tstring = program.value;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tstring = program.innerHTML;\r\n\t\t\t\t\tsuccess = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\topts.error(pl.error.existence(\"source_sink\", new Term(string), \"top_level/0\"));\r\n\t\t}\r\n\t\tthis.warnings = [];\r\n\t\tparseProgram(this, string, opts);\r\n\t};\r\n\r\n\t// Query goal from a string (without ?-)\r\n\tSession.prototype.query = function(string, options) {\r\n\t\treturn this.thread.query(string, options);\r\n\t};\r\n\tThread.prototype.query = function(string, options) {\r\n\t\tthis.points = [];\r\n\t\tthis.debugger_states = [];\r\n\t\tthis.level = new Term(\"top_level\");\r\n\t\treturn parseQuery(this, string, options);\r\n\t};\r\n\t\r\n\t// Get first choice point\r\n\tSession.prototype.head_point = function() {\r\n\t\treturn this.thread.head_point();\r\n\t};\r\n\tThread.prototype.head_point = function() {\r\n\t\treturn this.points[this.points.length-1];\r\n\t};\r\n\t\r\n\t// Get free variable\r\n\tSession.prototype.get_free_variable = function( variable ) {\r\n\t\treturn this.thread.get_free_variable( variable );\r\n\t};\r\n\tThread.prototype.get_free_variable = function( variable ) {\r\n\t\tvar variables = [];\r\n\t\tif( variable.id === \"_\" || this.session.renamed_variables[variable.id] === undefined ) {\r\n\t\t\tthis.session.rename++;\r\n\t\t\tif( this.current_point )\r\n\t\t\t\tvariables = this.current_point.substitution.domain();\r\n\t\t\twhile( indexOf( variables, pl.format_variable( this.session.rename, variable.id ) ) !== -1 ) {\r\n\t\t\t\tthis.session.rename++;\r\n\t\t\t}\r\n\t\t\tif( variable.id === \"_\" ) {\r\n\t\t\t\treturn new Var( pl.format_variable( this.session.rename, variable.id ) );\r\n\t\t\t} else {\r\n\t\t\t\tthis.session.renamed_variables[variable.id] = pl.format_variable( this.session.rename, variable.id );\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Var( this.session.renamed_variables[variable.id] );\r\n\t};\r\n\t\r\n\t// Get next free variable\r\n\tSession.prototype.next_free_variable = function() {\r\n\t\treturn this.thread.next_free_variable();\r\n\t};\r\n\tThread.prototype.next_free_variable = function() {\r\n\t\tthis.session.rename++;\r\n\t\tvar variables = [];\r\n\t\tif( this.current_point )\r\n\t\t\tvariables = this.current_point.substitution.domain();\r\n\t\twhile( indexOf( variables, pl.format_variable( this.session.rename ) ) !== -1 ) {\r\n\t\t\tthis.session.rename++;\r\n\t\t}\r\n\t\treturn new Var( pl.format_variable( this.session.rename ) );\r\n\t};\r\n\t\r\n\t// Check if a predicate is public\r\n\tSession.prototype.is_public_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\treturn pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_public_predicate(indicator);\r\n\t};\r\n\tThread.prototype.is_public_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_public_predicate(indicator, module_id);\r\n\t};\r\n\t\r\n\t// Check if a predicate is multifile\r\n\tSession.prototype.is_multifile_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\treturn pl.type.is_module(this.modules[module_id]) && this.modules[module_id].is_multifile_predicate(indicator);\r\n\t};\r\n\tThread.prototype.is_multifile_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_multifile_predicate(indicator, module_id);\r\n\t};\r\n\r\n\t// Check if a predicate is a meta-predicate\r\n\tSession.prototype.is_meta_predicate = function(indicator, module_id) {\r\n\t\tmodule_id = module_id === undefined ? \"user\" : module_id;\r\n\t\tif(pl.type.is_module(this.modules[module_id]))\r\n\t\t\treturn this.modules[module_id].is_meta_predicate(indicator);\r\n\t\treturn null;\r\n\t};\r\n\tThread.prototype.is_meta_predicate = function(indicator, module_id) {\r\n\t\treturn this.session.is_meta_predicate(indicator, module_id);\r\n\t};\r\n\t\r\n\t// Insert states at the beginning\r\n\tSession.prototype.prepend = function( states ) {\r\n\t\treturn this.thread.prepend( states );\r\n\t};\r\n\tThread.prototype.prepend = function( states ) {\r\n\t\tfor(var i = states.length-1; i >= 0; i--)\r\n\t\t\tthis.points.push( states[i] );\r\n\t};\r\n\t\r\n\t// Remove the selected term and prepend the current state\r\n\tSession.prototype.success = function( point, parent ) {\r\n\t\treturn this.thread.success( point, parent );\r\n\t}\r\n\tThread.prototype.success = function( point, parent ) {\r\n\t\tvar parent = typeof parent === \"undefined\" ? point : parent;\r\n\t\tthis.prepend( [new State( point.goal.replace( null ), point.substitution, parent ) ] );\r\n\t};\r\n\t\r\n\t// Throw error\r\n\tSession.prototype.throw_error = function(error) {\r\n\t\treturn this.thread.throw_error(error);\r\n\t};\r\n\tThread.prototype.throw_error = function(error) {\r\n\t\tif(pl.type.is_variable(error))\r\n\t\t\terror = pl.error.instantiation(this.level.indicator);\r\n\t\tvar state = new State(\r\n\t\t\tnew Term(\"throw\", [error]),\r\n\t\t\tnew Substitution(),\r\n\t\t\tnull\r\n\t\t);\r\n\t\tstate.error = true;\r\n\t\tthis.prepend([state]);\r\n\t};\r\n\t\r\n\t// Get the module of a predicate\r\n\tSession.prototype.lookup_module = function(atom, context_module) {\r\n\t\treturn this.thread.lookup_module(atom, context_module);\r\n\t}\r\n\tThread.prototype.lookup_module = function(atom, context_module) {\r\n\t\tvar get_module = this.session.modules[context_module];\r\n\t\tif(!pl.type.is_module(get_module))\r\n\t\t\tget_module = this.session.modules.user;\r\n\t\tif(get_module.rules.hasOwnProperty(atom.indicator) && (\r\n\t\t\tget_module.exports_predicate(atom.indicator) ||\r\n\t\t\tget_module.rules.hasOwnProperty(this.level.indicator) ||\r\n\t\t\tcontext_module === get_module.id))\r\n\t\t\t\treturn get_module;\r\n\t\tget_module.modules.system = pl.modules.system;\r\n\t\tget_module.modules.user = this.session.modules.user;\r\n\t\tfor(var prop in get_module.modules) {\r\n\t\t\tif(!this.session.modules.hasOwnProperty(prop))\r\n\t\t\t\tcontinue;\r\n\t\t\tvar get_module = this.session.modules[prop];\r\n\t\t\tif(get_module.rules.hasOwnProperty(atom.indicator) && (\r\n\t\t\t\tget_module.exports_predicate(atom.indicator) ||\r\n\t\t\t\tget_module.rules.hasOwnProperty(this.level.indicator) ||\r\n\t\t\t\tcontext_module === get_module.id))\r\n\t\t\t\t\treturn get_module;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\r\n\t// Expand a meta-predicate\r\n\tSession.prototype.expand_meta_predicate = function(atom, definition_module, context_module) {\r\n\t\treturn this.thread.expand_meta_predicate(atom, definition_module, context_module);\r\n\t};\r\n\tThread.prototype.expand_meta_predicate = function(atom, definition_module, context_module) {\r\n\t\tvar get_module = this.session.modules[definition_module];\r\n\t\tif(!get_module)\r\n\t\t\treturn;\r\n\t\tvar meta = get_module.is_meta_predicate(atom.indicator);\r\n\t\tif(!meta)\r\n\t\t\treturn;\r\n\t\tfor(var i = 0; i < meta.args.length; i++) {\r\n\t\t\tif(pl.type.is_integer(meta.args[i]) || pl.type.is_atom(meta.args[i]) && indexOf([\":\"], meta.args[i].id) !== -1) {\r\n\t\t\t\tif(!pl.type.is_term(atom.args[i]) || atom.args[i].indicator !== \":/2\") {\r\n\t\t\t\t\tatom.args[i] = new Term(\":\", [new Term(context_module), atom.args[i]]);\r\n\t\t\t\t}\r\n\t\t\t} else if(pl.type.is_atom(meta.args[i]) && meta.args[i].id === \"^\") {\r\n\t\t\t\tvar pointer_last = atom;\r\n\t\t\t\tvar pointer_index = i;\r\n\t\t\t\tvar pointer = atom.args[i];\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"^/2\") {\r\n\t\t\t\t\tpointer_last = pointer;\r\n\t\t\t\t\tpointer_index = 1;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(!pl.type.is_term(pointer) || pointer.indicator !== \":/2\") {\r\n\t\t\t\t\tpointer_last.args[pointer_index] = new Term(\":\", [new Term(context_module), pointer]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Resolution step\r\n\tSession.prototype.step = function() {\r\n\t\treturn this.thread.step();\r\n\t}\r\n\tThread.prototype.step = function() {\r\n\t\tif(this.points.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar asyn = false;\r\n\t\tvar point = this.points.pop();\r\n\t\tthis.current_point = point;\r\n\t\tif(this.debugger)\r\n\t\t\tthis.debugger_states.push(point);\r\n\t\tvar atom = pl.type.is_term(point.goal) ? point.goal.select() : point.goal;\r\n\t\tif(pl.type.is_term(atom) && (atom.indicator !== \":/2\" || pl.type.is_term(atom.args[1]))) {\r\n\t\t\tvar context_module = null;\r\n\t\t\tvar states = [];\r\n\t\t\tif(atom !== null) {\r\n\t\t\t\tthis.total_steps++;\r\n\t\t\t\tvar level = point;\r\n\t\t\t\twhile(level.parent !== null && level.parent.goal.search(atom))\r\n\t\t\t\t\tlevel = level.parent;\r\n\t\t\t\tif(level.parent === null) {\r\n\t\t\t\t\tthis.level = new Term(\"top_level\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.level = level.parent.goal.select();\r\n\t\t\t\t\tif(this.level.indicator === \":/2\")\r\n\t\t\t\t\t\tthis.level = this.level.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_term(atom) && atom.indicator === \":/2\") {\r\n\t\t\t\t\tcontext_module = atom.args[0];\r\n\t\t\t\t\tatom = atom.args[1];\r\n\t\t\t\t\tif(!pl.type.is_atom(context_module)) {\r\n\t\t\t\t\t\tthis.throw_error(pl.error.type(\"module\", context_module, this.level.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcontext_module = context_module.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(this.level.definition_module) {\r\n\t\t\t\t\t\tcontext_module = this.level.definition_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontext_module = \"user\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tatom.context_module = context_module;\r\n\t\t\t\tif(atom.indicator === \",/2\") {\r\n\t\t\t\t\tthis.prepend([new State(\r\n\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\":\", [new Term(context_module), atom.args[0]]),\r\n\t\t\t\t\t\t\tnew Term(\":\", [new Term(context_module), atom.args[1]])])),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.__call_indicator = atom.indicator;\r\n\t\t\t\tvar get_module = this.lookup_module(atom, context_module);\r\n\t\t\t\tatom.definition_module = pl.type.is_module(get_module) ? get_module.id : \"user\";\r\n\t\t\t\tthis.expand_meta_predicate(atom, atom.definition_module, context_module);\r\n\t\t\t\tvar clauses = null;\r\n\t\t\t\tif(get_module && atom.args.length > 0 && atom.args[0].index && get_module.indexed_clauses.hasOwnProperty(atom.indicator) && get_module.indexed_clauses[atom.indicator].hasOwnProperty(atom.args[0].index))\r\n\t\t\t\t\tclauses = get_module.indexed_clauses[atom.indicator][atom.args[0].index];\r\n\t\t\t\telse\r\n\t\t\t\t\tclauses = get_module === null ? null : get_module.rules[atom.indicator];\r\n\t\t\t\tif(clauses === null) {\r\n\t\t\t\t\tif(!this.session.modules.user.rules.hasOwnProperty(atom.indicator)) {\r\n\t\t\t\t\t\tif(this.get_flag(\"unknown\").id === \"error\") {\r\n\t\t\t\t\t\t\tthis.throw_error( pl.error.existence( \"procedure\", atom.indicator, this.level.indicator));\r\n\t\t\t\t\t\t} else if(this.get_flag(\"unknown\").id === \"warning\") {\r\n\t\t\t\t\t\t\tthis.throw_warning(\"unknown procedure \" + atom.indicator + \" (from \" + this.level.indicator + \")\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(clauses instanceof Function) {\r\n\t\t\t\t\tasyn = clauses(this, point, atom);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Goal expansion\r\n\t\t\t\t\tif(this.__goal_expansion && atom.indicator === \"goal_expansion/2\")\r\n\t\t\t\t\t\tclauses = clauses.concat(pl.builtin.rules[\"goal_expansion/2\"]);\r\n\t\t\t\t\tfor(var i = 0; i < clauses.length; i++) {\r\n\t\t\t\t\t\tthis.session.renamed_variables = {};\r\n\t\t\t\t\t\tvar clause = clauses[i].rename(this);\r\n\t\t\t\t\t\tvar occurs_check = this.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\t\tvar mgu = pl.unify(atom, clause.head, occurs_check);\r\n\t\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\t\tvar state = new State();\r\n\t\t\t\t\t\t\tstate.goal = point.goal.replace(clause.body);\r\n\t\t\t\t\t\t\tif(state.goal !== null)\r\n\t\t\t\t\t\t\t\tstate.goal = state.goal.apply(mgu);\r\n\t\t\t\t\t\t\tstate.substitution = point.substitution.apply(mgu);\r\n\t\t\t\t\t\t\tstate.parent = point;\r\n\t\t\t\t\t\t\tstates.push(state);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.prepend(states);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar term = pl.type.is_term(atom) && atom.indicator === \":/2\" ? atom.args[1] : atom;\r\n\t\t\tif(pl.type.is_variable(term))\r\n\t\t\t\tthis.throw_error(pl.error.instantiation(this.level.indicator));\r\n\t\t\telse\r\n\t\t\t\tthis.throw_error(pl.error.type(\"callable\", term, this.level.indicator));\r\n\t\t}\r\n\t\treturn asyn;\r\n\t};\r\n\t\r\n\t// Find next computed answer\r\n\tSession.prototype.answer = function(options) {\r\n\t\treturn this.thread.answer(options);\r\n\t};\r\n\tThread.prototype.answer = function(options) {\r\n\t\tvar opts = {};\r\n\t\toptions = options || function() {};\r\n\t\tif(typeof options === \"function\") {\r\n\t\t\topts = {\r\n\t\t\t\tsuccess: options,\r\n\t\t\t\terror: options,\r\n\t\t\t\tfail: options,\r\n\t\t\t\tlimit: options\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\topts.success = options.success === undefined ? function() {} : options.success;\r\n\t\t\topts.error = options.error === undefined ? function() {} : options.error;\r\n\t\t\topts.fail = options.fail === undefined ? function() {} : options.fail;\r\n\t\t\topts.limit = options.limit === undefined ? function() {} : options.limit;\r\n\t\t}\r\n\t\tthis.__calls.push(opts);\r\n\t\tif( this.__calls.length > 1 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.again();\r\n\t};\r\n\t\r\n\t// Find all computed answers\r\n\tSession.prototype.answers = function( callback, max, after ) {\r\n\t\treturn this.thread.answers( callback, max, after );\r\n\t}\r\n\tThread.prototype.answers = function( callback, max, after ) {\r\n\t\tvar answers = max === undefined ? 1000 : max;\r\n\t\tvar thread = this;\r\n\t\tif( answers <= 0 ) {\r\n\t\t\tif(after)\r\n\t\t\t\tafter();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.answer( function( answer ) {\r\n\t\t\tcallback( answer );\r\n\t\t\tif( answer !== false ) {\r\n\t\t\t\tsetTimeout( function() {\r\n\t\t\t\t\tthread.answers( callback, answers-1, after );\r\n\t\t\t\t}, 0 );\r\n\t\t\t} else if(after) {\r\n\t\t\t\tafter();\r\n\t\t\t}\r\n\t\t} );\r\n\t};\r\n\r\n\t// Again finding next computed answer\r\n\tSession.prototype.again = function(reset_limit) {\r\n\t\treturn this.thread.again(reset_limit);\r\n\t};\r\n\tThread.prototype.again = function(reset_limit) {\r\n\t\twhile(this.__calls.length > 0) {\r\n\t\t\tthis.warnings = [];\r\n\t\t\tif(reset_limit !== false)\r\n\t\t\t\tthis.current_limit = this.session.limit;\r\n\t\t\twhile((!this.has_limit || this.current_limit > 0) && this.points.length > 0 && this.head_point().goal !== null && !pl.type.is_error_state(this.head_point())) {\r\n\t\t\t\tif(this.has_limit)\r\n\t\t\t\t\tthis.current_limit--;\r\n\t\t\t\tvar t0 = Date.now();\r\n\t\t\t\tvar asyn = this.step();\r\n\t\t\t\tvar t1 = Date.now();\r\n\t\t\t\tthis.cpu_time += t1-t0;\r\n\t\t\t\tif(asyn === true)\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar call = this.__calls.shift();\r\n\t\t\t// limit of inferences\r\n\t\t\tif(this.has_limit && this.current_limit <= 0) {\r\n\t\t\t\t(function(call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.limit(null);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(call);\r\n\t\t\t// no answer\r\n\t\t\t} else if(this.points.length === 0) {\r\n\t\t\t\t(function(call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.fail(false);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(call);\r\n\t\t\t// error\r\n\t\t\t} else if(pl.type.is_error(this.head_point().goal)) {\r\n\t\t\t\tvar error = this.format_error(this.points.pop());\r\n\t\t\t\tthis.points = [];\r\n\t\t\t\t(function(error, call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.error(error);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(error, call);\r\n\t\t\t// computed answer\r\n\t\t\t} else {\r\n\t\t\t\tif(this.debugger)\r\n\t\t\t\t\tthis.debugger_states.push(this.head_point());\r\n\t\t\t\tvar answer = this.format_success(this.points.pop());\r\n\t\t\t\t(function(answer, call) {\r\n\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\tcall.success(answer);\r\n\t\t\t\t\t}, 0);\r\n\t\t\t\t})(answer, call);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Unfolding transformation\r\n\tSession.prototype.unfold = function( rule ) {\r\n\t\tif(rule.body === null)\r\n\t\t\treturn false;\r\n\t\tvar head = rule.head;\r\n\t\tvar body = rule.body;\r\n\t\tvar atom = body.select();\r\n\t\tvar thread = new Thread( this );\r\n\t\tvar unfolded = [];\r\n\t\tthread.add_goal( atom );\r\n\t\tthread.step();\r\n\t\tfor( var i = thread.points.length-1; i >= 0; i-- ) {\r\n\t\t\tvar point = thread.points[i];\r\n\t\t\tvar head2 = head.apply( point.substitution );\r\n\t\t\tvar body2 = body.replace( point.goal );\r\n\t\t\tif( body2 !== null )\r\n\t\t\t\tbody2 = body2.apply( point.substitution );\r\n\t\t\tunfolded.push( new Rule( head2, body2 ) );\r\n\t\t}\r\n\t\tvar rules = this.modules.user.rules[head.indicator];\r\n\t\tvar index = indexOf( rules, rule );\r\n\t\tif( unfolded.length > 0 && index !== -1 ) {\r\n\t\t\trules.splice.apply( rules, [index, 1].concat(unfolded) );\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\tThread.prototype.unfold = function(rule) {\r\n\t\treturn this.session.unfold(rule);\r\n\t};\r\n\r\n\t\r\n\t\r\n\t// INTERPRET EXPRESSIONS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.interpret = function( thread ) {\r\n\t\treturn pl.error.instantiation( thread.level.indicator );\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.interpret = function( thread ) {\r\n\t\treturn this;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.interpret = function( thread ) {\r\n\t\tif( pl.type.is_unitary_list( this ) ) {\r\n\t\t\treturn this.args[0].interpret( thread );\r\n\t\t} else {\r\n\t\t\treturn pl.operate( thread, this );\r\n\t\t}\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// COMPARE PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.compare = function( obj ) {\r\n\t\tif( this.id < obj.id ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.id > obj.id ) {\r\n\t\t\treturn 1;\r\n\t\t} else {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.compare = function( obj ) {\r\n\t\tif( this.value === obj.value && this.is_float === obj.is_float ) {\r\n\t\t\treturn 0;\r\n\t\t} else if( this.value < obj.value || this.value === obj.value && this.is_float && !obj.is_float ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.value > obj.value ) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.compare = function( obj ) {\r\n\t\tif( this.args.length < obj.args.length || this.args.length === obj.args.length && this.id < obj.id ) {\r\n\t\t\treturn -1;\r\n\t\t} else if( this.args.length > obj.args.length || this.args.length === obj.args.length && this.id > obj.id ) {\r\n\t\t\treturn 1;\r\n\t\t} else {\r\n\t\t\tfor( var i = 0; i < this.args.length; i++ ) {\r\n\t\t\t\tvar arg = pl.compare( this.args[i], obj.args[i] );\r\n\t\t\t\tif( arg !== 0 ) {\r\n\t\t\t\t\treturn arg;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t};\r\n\t\r\n\r\n\t\r\n\t// SUBSTITUTIONS\r\n\t\r\n\t// Lookup variable\r\n\tSubstitution.prototype.lookup = function( variable ) {\r\n\t\tif( this.links[variable] ) {\r\n\t\t\treturn this.links[variable];\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t};\r\n\t\r\n\t// Filter variables\r\n\tSubstitution.prototype.filter = function( predicate ) {\r\n\t\tvar links = {};\r\n\t\tfor( var id in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(id)) continue;\r\n\t\t\tvar value = this.links[id];\r\n\t\t\tif( predicate( id, value ) ) {\r\n\t\t\t\tlinks[id] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, this.attrs );\r\n\t};\r\n\t\r\n\t// Exclude variables\r\n\tSubstitution.prototype.exclude = function( variables ) {\r\n\t\tvar links = {};\r\n\t\tfor( var variable in this.links ) {\r\n\t\t\tif(!this.links.hasOwnProperty(variable)) continue;\r\n\t\t\tif( indexOf( variables, variable ) === -1 ) {\r\n\t\t\t\tlinks[variable] = this.links[variable];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new Substitution( links, this.attrs );\r\n\t};\r\n\t\r\n\t// Add link\r\n\tSubstitution.prototype.add = function( variable, value ) {\r\n\t\tthis.links[variable] = value;\r\n\t};\r\n\t\r\n\t// Get domain\r\n\tSubstitution.prototype.domain = function( plain ) {\r\n\t\tvar f = plain === true ? function(x){return x;} : function(x){return new Var(x);};\r\n\t\tvar vars = [];\r\n\t\tfor( var x in this.links )\r\n\t\t\tvars.push( f(x) );\r\n\t\treturn vars;\r\n\t};\r\n\r\n\t// Get an attribute\r\n\tSubstitution.prototype.get_attribute = function( variable, module ) {\r\n\t\tif( this.attrs[variable] )\r\n\t\t\treturn this.attrs[variable][module];\r\n\t}\r\n\r\n\t// Set an attribute (in a new substitution)\r\n\tSubstitution.prototype.set_attribute = function( variable, module, value ) {\r\n\t\tvar subs = new Substitution( this.links );\r\n\t\tfor( var v in this.attrs ) {\r\n\t\t\tif( v === variable ) {\r\n\t\t\t\tsubs.attrs[v] = {};\r\n\t\t\t\tfor( var m in this.attrs[v] ) {\r\n\t\t\t\t\tsubs.attrs[v][m] = this.attrs[v][m];\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tsubs.attrs[v] = this.attrs[v];\r\n\t\t\t}\r\n\t\t}\r\n\t\tif( !subs.attrs[variable] ) {\r\n\t\t\tsubs.attrs[variable] = {};\r\n\t\t}\r\n\t\tsubs.attrs[variable][module] = value;\r\n\t\treturn subs;\r\n\t}\r\n\r\n\t// Check if a variables has attributes\r\n\tSubstitution.prototype.has_attributes = function( variable ) {\r\n\t\treturn this.attrs[variable] && this.attrs[variable] !== {};\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\t// GENERATE JAVASCRIPT CODE FROM PROLOG OBJECTS\r\n\t\r\n\t// Variables\r\n\tVar.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Var(\"' + this.id.toString() + '\")';\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Num(' + this.value.toString() + ', ' + this.is_float.toString() + ')';\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Term(\"' + this.id.replace(/\"/g, '\\\\\"') + '\", [' + map( this.args, function( arg ) {\r\n\t\t\treturn arg.compile();\r\n\t\t} ) + '])';\r\n\t};\r\n\t\r\n\t// Rules\r\n\tRule.prototype.compile = function() {\r\n\t\treturn 'new pl.type.Rule(' + this.head.compile() + ', ' + (this.body === null ? 'null' : this.body.compile()) + ')';\r\n\t};\r\n\t\r\n\t// Sessions\r\n\tSession.prototype.compile = function() {\r\n\t\tvar str, obj = [], rules;\r\n\t\tfor( var _indicator in this.modules.user.rules ) {\r\n\t\t\tif(!this.modules.user.rules.hasOwnProperty(_indicator)) continue;\r\n\t\t\tvar indicator = this.modules.user.rules[_indicator];\r\n\t\t\trules = [];\r\n\t\t\tstr = \"\\\"\" + _indicator + \"\\\": [\";\r\n\t\t\tfor(var i = 0; i < indicator.length; i++) {\r\n\t\t\t\trules.push(indicator[i].compile());\r\n\t\t\t}\r\n\t\t\tstr += rules.join();\r\n\t\t\tstr += \"]\";\r\n\t\t\tobj.push( str );\r\n\t\t}\r\n\t\treturn \"{\" + obj.join() + \"};\";\r\n\t};\r\n\r\n\t// Module\r\n\tModule.prototype.compile = function() {\r\n\t\tvar length = 0;\r\n\t\tvar dependencies = 0;\r\n\t\tvar str = \"var pl;\\n\";\r\n\t\tstr += \"(function(pl) {\\n\";\r\n\t\t// name\r\n\t\tstr += \"\\tvar name = \\\"\" + this.id + \"\\\";\\n\";\r\n\t\t// predicates\r\n\t\tstr += \"\\tvar predicates = function() {\\n\";\r\n\t\tstr += \"\\t\\treturn {\\n\";\r\n\t\tfor(var prop in this.rules) {\r\n\t\t\tif(length > 0)\r\n\t\t\t\tstr += \",\\n\";\r\n\t\t\tstr += \"\\t\\t\\t\\\"\" + prop + \"\\\": \";\r\n\t\t\tif(typeof this.rules[prop] === \"function\") {\r\n\t\t\t\tstr += this.rules[prop];\r\n\t\t\t} else {\r\n\t\t\t\tstr += \"[\\n\";\r\n\t\t\t\tfor(var i = 0; i < this.rules[prop].length; i++) {\r\n\t\t\t\t\tstr += \"\\t\\t\\t\\t\" + this.rules[prop][i].compile();\r\n\t\t\t\t\tif(i < this.rules[prop].length-1)\r\n\t\t\t\t\t\tstr += \",\";\r\n\t\t\t\t\tstr += \"\\n\";\r\n\t\t\t\t}\r\n\t\t\t\tstr += \"\\t\\t\\t]\";\r\n\t\t\t}\r\n\t\t\tlength++;\r\n\t\t}\r\n\t\tstr += \"\\n\\t\\t};\\n\";\r\n\t\tstr += \"\\t};\\n\";\r\n\t\t// exports\r\n\t\tstr += \"\\tvar exports = [\";\r\n\t\tfor(var i = 0; i < this.exports.length; i++) {\r\n\t\t\tif(i > 0)\r\n\t\t\t\tstr += \", \";\r\n\t\t\tstr += \"\\\"\" + this.exports[i] + \"\\\"\";\r\n\t\t}\r\n\t\tstr += \"];\\n\";\r\n\t\t// options\r\n\t\tstr += \"\\tvar options = function() {\\n\";\r\n\t\tstr += \"\\t\\treturn {\\n\";\r\n\t\t// dependencies\r\n\t\tstr += \"\\t\\t\\tdependencies: [\";\r\n\t\tfor(var prop in this.modules) {\r\n\t\t\tif(dependencies > 0)\r\n\t\t\t\tstr += \", \";\r\n\t\t\tstr += \"\\\"\" + prop + \"\\\"\";\r\n\t\t\tdependencies++;\r\n\t\t}\r\n\t\tstr += \"]\\n\";\r\n\t\tstr += \"\\t\\t};\\n\";\r\n\t\tstr += \"};\\n\";\r\n\t\t// fixed code\r\n\t\tstr += \"\\tif(typeof module !== 'undefined') {\\n\";\r\n\t\tstr += \"\\t\\tmodule.exports = function(p) {\\n\";\r\n\t\tstr += \"\\t\\t\\tpl = p;\\n\";\r\n\t\tstr += \"\\t\\t\\tnew pl.type.Module(name, predicates(), exports, options());\\n\";\r\n\t\tstr += \"\\t\\t};\\n\";\r\n\t\tstr += \"\\t} else {\\n\";\r\n\t\tstr += \"\\t\\tnew pl.type.Module(name, predicates(), exports, options());\\n\";\r\n\t\tstr += \"\\t}\\n\";\r\n\t\tstr += \"})(pl);\\n\";\r\n\t\treturn str;\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG TO JAVASCRIPT\r\n\tVar.prototype.toJavaScript = function() {\r\n\t\treturn this.toString();\r\n\t};\r\n\t\r\n\t// Numbers\r\n\tNum.prototype.toJavaScript = function() {\r\n\t\treturn this.value;\r\n\t};\r\n\t\r\n\t// Terms\r\n\tTerm.prototype.toJavaScript = function(options) {\r\n\t\t// Atom => String\r\n\t\tif( this.args.length === 0 && this.indicator !== \"[]/0\" ) {\r\n\t\t\treturn this.toString(options);\r\n\t\t} else if( pl.type.is_list( this ) ) {\r\n\t\t\t// List => Array\r\n\t\t\tvar all_obj = true;\r\n\t\t\tvar arr = [];\r\n\t\t\tvar obj = {};\r\n\t\t\tvar pointer = this;\r\n\t\t\tvar value;\r\n\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\tvalue = pointer.args[0].toJavaScript(options);\r\n\t\t\t\tarr.push( value );\r\n\t\t\t\tall_obj = all_obj && pl.type.is_term(pointer.args[0]) && pointer.args[0].indicator === \"-/2\" && pl.type.is_atom(pointer.args[0].args[0]);\r\n\t\t\t\tif(all_obj)\r\n\t\t\t\t\tobj[pointer.args[0].args[0].id] = pointer.args[0].args[1].toJavaScript(options);\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tif( pointer.indicator === \"[]/0\" )\r\n\t\t\t\treturn all_obj && arr.length > 0 ? obj : arr;\r\n\r\n\t\t}\r\n\t\treturn this.toString(options);\r\n\t};\r\n\t\r\n\t\r\n\t\r\n\t// RULES\r\n\t\r\n\t// Return singleton variables in the session\r\n\tRule.prototype.singleton_variables = function(include_named) {\r\n\t\tinclude_named = include_named || false;\r\n\t\tvar variables = this.head.variables();\r\n\t\tvar count = {};\r\n\t\tvar singleton = [];\r\n\t\tif(this.body !== null)\r\n\t\t\tvariables = variables.concat(this.body.variables());\r\n\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\tif(count[variables[i]] === undefined)\r\n\t\t\t\tcount[variables[i]] = 0;\r\n\t\t\tcount[variables[i]]++;\r\n\t\t}\r\n\t\tfor(var key in count) {\r\n\t\t\tif(!count.hasOwnProperty(key))\r\n\t\t\t\tcontinue;\r\n\t\t\tif(count[key] === 1) {\r\n\t\t\t\tvar charcode = codePointAt(key, 1);\r\n\t\t\t\tif(!include_named || key === \"_\")\r\n\t\t\t\t\tif(key === \"_\" || key[0] === \"_\" && (charcode === 95 || charcode >= 65 && charcode <= 90))\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\tsingleton.push(key);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn singleton;\r\n\t};\r\n\r\n\r\n\r\n\t// NODEJS\r\n\r\n\tvar nodejs_flag = typeof process !== 'undefined' && !process.browser\r\n\r\n\tvar nodejs_arguments = nodejs_flag ?\r\n\t\tarrayToList( map(process.argv.slice(1), function(arg) { return new Term( arg ); })) :\r\n\t\tnew Term(\"[]\", []);\r\n\t\r\n\t\r\n\t\r\n\t// PROLOG\r\n\r\n\tvar pl = {\r\n\t\t\r\n\t\t// Environment\r\n\t\t__env: nodejs_flag ? global : window,\r\n\t\t\r\n\t\t// Modules\r\n\t\tmodules: {},\r\n\t\t\r\n\t\t// Version\r\n\t\tversion: version,\r\n\t\t\r\n\t\t// Parser\r\n\t\tparser: {\r\n\t\t\ttokenizer: Tokenizer,\r\n\t\t\texpression: parseExpr\r\n\t\t},\r\n\t\t\r\n\t\t// Utils\r\n\t\tutils: {\r\n\t\t\t\r\n\t\t\t// String to indicator\r\n\t\t\tstr_indicator: str_indicator,\r\n\t\t\t// Code point at\r\n\t\t\tcodePointAt: codePointAt,\r\n\t\t\t// From code point\r\n\t\t\tfromCodePoint: fromCodePoint,\r\n\t\t\t// Length of string\r\n\t\t\tstringLength: stringLength\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Statistics\r\n\t\tstatistics: {\r\n\t\t\t\r\n\t\t\t// Number of created terms\r\n\t\t\tgetCountTerms: function() {\r\n\t\t\t\treturn term_ref;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// JavaScript to Prolog\r\n\t\tfromJavaScript: {\r\n\t\t\t\r\n\t\t\t// Type testing\r\n\t\t\ttest: {\r\n\t\t\t\t\r\n\t\t\t\t// Boolean\r\n\t\t\t\tboolean: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj === true || obj === false;\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Number\r\n\t\t\t\tnumber: function( obj, tobj ) {\r\n\t\t\t\t\treturn typeof obj === \"number\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// String\r\n\t\t\t\tstring: function( obj, tobj ) {\r\n\t\t\t\t\treturn typeof obj === \"string\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// List\r\n\t\t\t\tlist: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj instanceof Array;\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Variable\r\n\t\t\t\tvariable: function( obj, tobj ) {\r\n\t\t\t\t\treturn obj === undefined;\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Object\r\n\t\t\t\tobject: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\treturn tobj && !(obj instanceof Array) && typeof obj === \"object\";\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Any\r\n\t\t\t\tany: function( _, tobj ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Function conversion\r\n\t\t\tconversion: {\r\n\t\t\t\t\r\n\t\t\t\t// Bolean\r\n\t\t\t\tboolean: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Term( obj ? \"true\" : \"false\", [] );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Number\r\n\t\t\t\tnumber: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Num( obj, obj % 1 !== 0 );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// String\r\n\t\t\t\tstring: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Term( obj, [] );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// List\r\n\t\t\t\tlist: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\tvar arr = [];\r\n\t\t\t\t\tvar elem;\r\n\t\t\t\t\tfor( var i = 0; i < obj.length; i++ ) {\r\n\t\t\t\t\t\telem = pl.fromJavaScript.apply( obj[i], tobj );\r\n\t\t\t\t\t\tif( elem === undefined )\r\n\t\t\t\t\t\t\treturn undefined;\r\n\t\t\t\t\t\tarr.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn arrayToList( arr );\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Variable\r\n\t\t\t\tvariable: function( obj, tobj ) {\r\n\t\t\t\t\treturn new Var( \"_\" );\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Object\r\n\t\t\t\tobject: function( obj, tobj ) {\r\n\t\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\t\tvar list = new Term(\"[]\", []);\r\n\t\t\t\t\tvar arr = [];\r\n\t\t\t\t\tfor(var prop in obj) {\r\n\t\t\t\t\t\tif(!obj.hasOwnProperty(prop)) continue;\r\n\t\t\t\t\t\tarr.push(new Term(\"-\", [\r\n\t\t\t\t\t\t\tpl.fromJavaScript.apply(prop, tobj),\r\n\t\t\t\t\t\t\tpl.fromJavaScript.apply(obj[prop], tobj)\r\n\t\t\t\t\t\t]));\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn arrayToList(arr);\r\n\t\t\t\t},\r\n\t\t\t\t\r\n\t\t\t\t// Any\r\n\t\t\t\tany: function( obj, tobj ) {\r\n\t\t\t\t\treturn undefined;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Transform object\r\n\t\t\tapply: function( obj, tobj ) {\r\n\t\t\t\ttobj = tobj === undefined ? false : tobj;\r\n\t\t\t\tfor( var i in pl.fromJavaScript.test )\r\n\t\t\t\t\tif( i !== \"any\" && pl.fromJavaScript.test[i]( obj, tobj ) )\r\n\t\t\t\t\t\treturn pl.fromJavaScript.conversion[i]( obj, tobj );\r\n\t\t\t\treturn pl.fromJavaScript.conversion.any( obj, tobj );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Types\r\n\t\ttype: {\r\n\t\t\t\r\n\t\t\t// Objects\r\n\t\t\tVar: Var,\r\n\t\t\tNum: Num,\r\n\t\t\tTerm: Term,\r\n\t\t\tRule: Rule,\r\n\t\t\tState: State,\r\n\t\t\tStream: Stream,\r\n\t\t\tModule: Module,\r\n\t\t\tThread: Thread,\r\n\t\t\tSession: Session,\r\n\t\t\tSubstitution: Substitution,\r\n\t\t\tFile: TauFile,\r\n\t\t\tDirectory: TauDirectory,\r\n\t\t\t\r\n\t\t\t// Order\r\n\t\t\torder: [Var, Num, Term, Stream],\r\n\t\t\t\r\n\t\t\t// Compare types\r\n\t\t\tcompare: function( x, y ) {\r\n\t\t\t\tvar ord_x = indexOf( pl.type.order, x.constructor );\r\n\t\t\t\tvar ord_y = indexOf( pl.type.order, y.constructor );\r\n\t\t\t\tif( ord_x < ord_y ) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else if( ord_x > ord_y ) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif( x.constructor === Num )\r\n\t\t\t\t\t\tif( x.is_float && y.is_float )\r\n\t\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t\telse if( x.is_float )\r\n\t\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t\telse if( y.is_float )\r\n\t\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a substitution\r\n\t\t\tis_substitution: function( obj ) {\r\n\t\t\t\treturn obj instanceof Substitution;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a state\r\n\t\t\tis_state: function( obj ) {\r\n\t\t\t\treturn obj instanceof State;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a rule\r\n\t\t\tis_rule: function( obj ) {\r\n\t\t\t\treturn obj instanceof Rule;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a variable\r\n\t\t\tis_variable: function( obj ) {\r\n\t\t\t\treturn obj instanceof Var;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream\r\n\t\t\tis_stream: function( obj ) {\r\n\t\t\t\treturn obj instanceof Stream;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an anonymous variable\r\n\t\t\tis_anonymous_var: function( obj ) {\r\n\t\t\t\treturn obj instanceof Var && obj.id === \"_\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a callable term\r\n\t\t\tis_callable: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term\r\n\t\t\t\t&& (indexOf([\",/2\",\";/2\",\"->/2\"], obj.indicator) === -1\r\n\t\t\t\t|| pl.type.is_callable(obj.args[0]) && pl.type.is_callable(obj.args[1]))\r\n\t\t\t\t|| obj instanceof Var;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a number\r\n\t\t\tis_number: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an integer\r\n\t\t\tis_integer: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a float\r\n\t\t\tis_float: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && obj.is_float;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a term\r\n\t\t\tis_term: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an atom\r\n\t\t\tis_atom: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a ground term\r\n\t\t\tis_ground: function( obj ) {\r\n\t\t\t\tif( obj instanceof Var ) return false;\r\n\t\t\t\tif( obj instanceof Term )\r\n\t\t\t\t\tfor( var i = 0; i < obj.args.length; i++ )\r\n\t\t\t\t\t\tif( !pl.type.is_ground( obj.args[i] ) )\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\treturn true;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is atomic\r\n\t\t\tis_atomic: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 || obj instanceof Num;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is compound\r\n\t\t\tis_compound: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length > 0;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a list\r\n\t\t\tis_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (obj.indicator === \"[]/0\" || obj.indicator === \"./2\");\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an empty list\r\n\t\t\tis_empty_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a non empty list\r\n\t\t\tis_non_empty_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"./2\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a fully list\r\n\t\t\tis_fully_list: function( obj ) {\r\n\t\t\t\twhile( obj instanceof Term && obj.indicator === \"./2\" ) {\r\n\t\t\t\t\tobj = obj.args[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn obj instanceof Var || obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a instantiated list\r\n\t\t\tis_instantiated_list: function( obj ) {\r\n\t\t\t\twhile( obj instanceof Term && obj.indicator === \"./2\" ) {\r\n\t\t\t\t\tobj = obj.args[1];\r\n\t\t\t\t}\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an unitary list\r\n\t\t\tis_unitary_list: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"./2\" && obj.args[1] instanceof Term && obj.args[1].indicator === \"[]/0\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a character\r\n\t\t\tis_character: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 && (obj.id.length === 1 || obj.id.length > 0 && obj.id.length <= 2 && codePointAt( obj.id, 0 ) >= 65536);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a in_character\r\n\t\t\tis_in_character: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (obj.indicator === \"end_of_file/0\"\r\n\t\t\t\t|| obj.id.length === 1\r\n\t\t\t\t|| obj.id.length > 0 && obj.id.length <= 2 && codePointAt(obj.id, 0) >= 65536);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a character_code\r\n\t\t\tis_character_code: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 1114111;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a in_character_code\r\n\t\t\tis_in_character_code: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 1114111;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a byte\r\n\t\t\tis_byte: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= 0 && obj.value <= 255;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a in_byte\r\n\t\t\tis_in_byte: function( obj ) {\r\n\t\t\t\treturn obj instanceof Num && !obj.is_float && obj.value >= -1 && obj.value <= 255;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an operator\r\n\t\t\tis_operator: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && pl.arithmetic.evaluation[obj.indicator];\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a directive\r\n\t\t\tis_directive: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && (pl.directive[obj.indicator] !== undefined || pl.directive[obj.id + \"/*\"] !== undefined);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a built-in predicate\r\n\t\t\tis_builtin: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && pl.builtin.rules.hasOwnProperty(obj.indicator) && obj.indicator !== \"goal_expansion/2\";\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is an error\r\n\t\t\tis_error: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"throw/1\";\r\n\t\t\t},\r\n\r\n\t\t\t// Is an error state\r\n\t\t\tis_error_state: function( obj ) {\r\n\t\t\t\treturn pl.type.is_state( obj ) && obj.error && obj.error === true;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a predicate indicator\r\n\t\t\tis_predicate_indicator: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.indicator === \"//2\" && obj.args[0] instanceof Term && obj.args[0].args.length === 0 && obj.args[1] instanceof Num && obj.args[1].is_float === false;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a flag\r\n\t\t\tis_flag: function( obj ) {\r\n\t\t\t\treturn obj instanceof Term && obj.args.length === 0 && pl.flag[obj.id] !== undefined;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a valid value for a flag\r\n\t\t\tis_value_flag: function( flag, obj ) {\r\n\t\t\t\tif( !pl.type.is_flag( flag ) ) return false;\r\n\t\t\t\tfor( var value in pl.flag[flag.id].allowed ) {\r\n\t\t\t\t\tif(!pl.flag[flag.id].allowed.hasOwnProperty(value)) continue;\r\n\t\t\t\t\tif( pl.flag[flag.id].allowed[value].equals( obj ) ) return true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a io mode\r\n\t\t\tis_io_mode: function( obj ) {\r\n\t\t\t\treturn pl.type.is_atom( obj ) && [\"read\",\"write\",\"append\"].indexOf( obj.id ) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream option\r\n\t\t\tis_stream_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"alias/1\" && pl.type.is_atom(obj.args[0]) ||\r\n\t\t\t\t\tobj.indicator === \"reposition/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"type/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"text\" || obj.args[0].id === \"binary\") ||\r\n\t\t\t\t\tobj.indicator === \"eof_action/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"error\" || obj.args[0].id === \"eof_code\" || obj.args[0].id === \"reset\")\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream position\r\n\t\t\tis_stream_position: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term(obj) && (\r\n\t\t\t\t\tobj.indicator === \"end_of_stream/0\" ||\r\n\t\t\t\t\tobj.indicator === \"past_end_of_stream/0\" ||\r\n\t\t\t\t\tobj.indicator === \"position/3\"\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[0])\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[1])\r\n\t\t\t\t\t\t&& pl.type.is_integer(obj.args[2])\r\n\t\t\t\t)\r\n\t\t\t},\r\n\r\n\t\t\t// Is a stream property\r\n\t\t\tis_stream_property: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"input/0\" || \r\n\t\t\t\t\tobj.indicator === \"output/0\" || \r\n\t\t\t\t\tobj.indicator === \"alias/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) ||\r\n\t\t\t\t\tobj.indicator === \"file_name/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom( obj.args[0] )) ||\r\n\t\t\t\t\tobj.indicator === \"reposition/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\")) ||\r\n\t\t\t\t\tobj.indicator === \"type/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"text\" || obj.args[0].id === \"binary\")) ||\r\n\t\t\t\t\tobj.indicator === \"mode/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"read\" || obj.args[0].id === \"write\" || obj.args[0].id === \"append\")) ||\r\n\t\t\t\t\tobj.indicator === \"eof_action/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"error\" || obj.args[0].id === \"eof_code\" || obj.args[0].id === \"reset\")) ||\r\n\t\t\t\t\tobj.indicator === \"end_of_stream/1\" && (pl.type.is_variable( obj.args[0] ) || pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"at\" || obj.args[0].id === \"past\" || obj.args[0].id === \"not\")) ||\r\n\t\t\t\t\tobj.indicator === \"position/1\"\r\n\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0]) || pl.type.is_term(obj.args[0]) && obj.args[0].indicator === \"position/3\"\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[0]) || pl.type.is_integer(obj.args[0].args[0]))\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[1]) || pl.type.is_integer(obj.args[0].args[1]))\r\n\t\t\t\t\t\t\t&& (pl.type.is_variable(obj.args[0].args[2]) || pl.type.is_integer(obj.args[0].args[2])))\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a streamable term\r\n\t\t\tis_streamable: function( obj ) {\r\n\t\t\t\treturn obj.__proto__.stream !== undefined;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a read option\r\n\t\t\tis_read_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && [\"variables/1\",\"variable_names/1\",\"singletons/1\"].indexOf( obj.indicator ) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a write option\r\n\t\t\tis_write_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) && (\r\n\t\t\t\t\tobj.indicator === \"quoted/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"ignore_ops/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"numbervars/1\" && pl.type.is_atom(obj.args[0]) && (obj.args[0].id === \"true\" || obj.args[0].id === \"false\") ||\r\n\t\t\t\t\tobj.indicator === \"variable_names/1\" && pl.type.is_fully_list(obj.args[0])\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a close option\r\n\t\t\tis_close_option: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term( obj ) &&\r\n\t\t\t\t\tobj.indicator === \"force/1\" &&\r\n\t\t\t\t\tpl.type.is_atom(obj.args[0]) &&\r\n\t\t\t\t\t(obj.args[0].id === \"true\" || obj.args[0].id === \"false\");\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Is a modifiable flag\r\n\t\t\tis_modifiable_flag: function( obj ) {\r\n\t\t\t\treturn pl.type.is_flag( obj ) && pl.flag[obj.id].changeable;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a module\r\n\t\t\tis_module: function( obj ) {\r\n\t\t\t\treturn obj instanceof Module;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a virtual file\r\n\t\t\tis_file: function( obj ) {\r\n\t\t\t\treturn obj instanceof TauFile;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a virtual directory\r\n\t\t\tis_directory: function( obj ) {\r\n\t\t\t\treturn obj instanceof TauDirectory;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a predicate property\r\n\t\t\tis_predicate_property: function(obj) {\r\n\t\t\t\treturn pl.type.is_term(obj) && (\r\n\t\t\t\t\tobj.indicator === \"built_in/0\" ||\r\n\t\t\t\t\tobj.indicator === \"static/0\" ||\r\n\t\t\t\t\tobj.indicator === \"dynamic/0\" ||\r\n\t\t\t\t\tobj.indicator === \"native_code/0\" ||\r\n\t\t\t\t\tobj.indicator === \"multifile/0\" ||\r\n\t\t\t\t\tobj.indicator === \"meta_predicate/1\"\r\n\t\t\t\t);\r\n\t\t\t},\r\n\r\n\t\t\t// Is a meta-argument specifier\r\n\t\t\tis_meta_argument_specifier: function(obj) {\r\n\t\t\t\treturn pl.type.is_integer(obj) && obj.value >= 0 ||\r\n\t\t\t\t\tpl.type.is_atom(obj) && indexOf([\"+\", \"-\", \"?\", \"*\", \"^\", \":\", \"//\"], obj.id) !== -1;\r\n\t\t\t},\r\n\r\n\t\t\t// Is a time property\r\n\t\t\tis_time_property: function( obj ) {\r\n\t\t\t\treturn pl.type.is_term(obj) && obj.args.length === 1 \r\n\t\t\t\t&& (pl.type.is_variable(obj.args[0]) || pl.type.is_integer(obj.args[0]))\r\n\t\t\t\t&& indexOf([\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\", \"weekday\"], obj.id) !== -1;\r\n\t\t\t},\r\n\t\t\t\r\n\t\t},\r\n\r\n\t\t// Arithmetic functions\r\n\t\tarithmetic: {\r\n\t\t\t\r\n\t\t\t// Evaluation\r\n\t\t\tevaluation: {\r\n\t\t\t\t\"e/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Math.E; }\r\n\t\t\t\t},\r\n\t\t\t\t\"pi/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Math.PI; }\r\n\t\t\t\t},\r\n\t\t\t\t\"tau/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return 2*Math.PI; }\r\n\t\t\t\t},\r\n\t\t\t\t\"epsilon/0\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( _ ) { return Number.EPSILON; }\r\n\t\t\t\t},\r\n\t\t\t\t\"+/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"-/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return -x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"\\\\/1\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return ~x; }\r\n\t\t\t\t},\r\n\t\t\t\t\"abs/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.abs( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sign/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sign( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float_integer_part/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float_fractional_part/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return x - parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"float/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseFloat( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"floor/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.floor( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"truncate/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return parseInt( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"round/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.round( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"ceiling/1\": {\r\n\t\t\t\t\ttype_args: true,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.ceil( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sin/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sin( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"cos/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.cos( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"tan/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.tan( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"asin/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.asin(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"acos/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) <= 1 ? Math.acos(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atan/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.atan( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atan2/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x === 0 && y === 0 ? pl.error.evaluation(\"undefined\", thread.__call_indicator) : Math.atan2(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"acosh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x >= 1 ? Math.acosh(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"asinh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.asinh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"atanh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return Math.abs(x) < 1 ? Math.atanh(x) : pl.error.evaluation(\"undefined\", thread.__call_indicator); }\r\n\t\t\t\t},\r\n\t\t\t\t\"cosh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.cosh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sinh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.sinh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"tanh/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.tanh( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"exp/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, _ ) { return Math.exp( x ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"sqrt/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x >= 0 ? Math.sqrt( x ) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x > 0 ? Math.log( x ) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x > 0 && y > 0 ? Math.log(y)/Math.log(x) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"log10/1\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, thread ) { return x > 0 ? Math.log(x)/Math.log(10) : pl.error.evaluation( \"undefined\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"+/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x + y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"-/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x - y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"*/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x * y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"//2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x / y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"///2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? Math.trunc( x / y ) : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"div/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? Math.floor( x / y ) : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"**/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: true,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation(\"zero_divisor\", thread.__call_indicator) : Math.pow(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"^/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return x == 0 && y < 0 ? pl.error.evaluation(\"zero_divisor\", thread.__call_indicator) : Math.pow(x, y); }\r\n\t\t\t\t},\r\n\t\t\t\t\"<>/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x >> y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"/\\\\/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x & y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"\\\\//2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x | y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"xor/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return x ^ y; }\r\n\t\t\t\t},\r\n\t\t\t\t\"rem/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x % y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"mod/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, thread ) { return y ? x - Math.floor( x / y ) * y : pl.error.evaluation( \"zero_divisor\", thread.__call_indicator ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"max/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return Math.max( x, y ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"min/2\": {\r\n\t\t\t\t\ttype_args: null,\r\n\t\t\t\t\ttype_result: null,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return Math.min( x, y ); }\r\n\t\t\t\t},\r\n\t\t\t\t\"gcd/2\": {\r\n\t\t\t\t\ttype_args: false,\r\n\t\t\t\t\ttype_result: false,\r\n\t\t\t\t\tfn: function( x, y, _ ) { return gcd(x, y); }\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Directives\r\n\t\tdirective: {\r\n\t\t\t\r\n\t\t\t// dynamic/1\r\n\t\t\t\"dynamic/1\": function( thread, atom, options ) {\r\n\t\t\t\tvar indicators = atom.args[0];\r\n\t\t\t\tif(!pl.type.is_list(indicators))\r\n\t\t\t\t\tindicators = arrayToList([indicators]);\r\n\t\t\t\tvar pointer = indicators;\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tindicator = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( indicator ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_compound( indicator ) || indicator.indicator !== \"//2\" ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t\t} else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_atom( indicator.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", indicator.args[0], atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_integer( indicator.args[1] ) ) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", indicator.args[1], atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar key = indicator.args[0].id + \"/\" + indicator.args[1].value;\r\n\t\t\t\t\t\tvar get_module = thread.session.modules[options.context_module];\r\n\t\t\t\t\t\tget_module.public_predicates[key] = true;\r\n\t\t\t\t\t\tif( !get_module.rules[key] )\r\n\t\t\t\t\t\tget_module.rules[key] = [];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// dynamic/[2..]\r\n\t\t\t\"dynamic/*\": function( thread, atom ) {\r\n\t\t\t\tfor(var i = 0; i < atom.args.length; i++) {\r\n\t\t\t\t\tpl.directive[\"dynamic/1\"](thread, new Term(\"dynamic\", [atom.args[i]]));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// multifile/1\r\n\t\t\t\"multifile/1\": function( thread, atom, options ) {\r\n\t\t\t\tvar indicator = atom.args[0];\r\n\t\t\t\tif( pl.type.is_variable( indicator ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_compound( indicator ) || indicator.indicator !== \"//2\" ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t\t} else if( pl.type.is_variable( indicator.args[0] ) || pl.type.is_variable( indicator.args[1] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( indicator.args[0] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", indicator.args[0], atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_integer( indicator.args[1] ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", indicator.args[1], atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar predicate_indicator = atom.args[0].args[0].id + \"/\" + atom.args[0].args[1].value;\r\n\t\t\t\t\tvar get_module = thread.session.modules[options.context_module];\r\n\t\t\t\t\tget_module.multifile_predicates[predicate_indicator] = true;\r\n\t\t\t\t\tif(!get_module.rules.hasOwnProperty(predicate_indicator)) {\r\n\t\t\t\t\t\tget_module.rules[predicate_indicator] = [];\r\n\t\t\t\t\t\tget_module.public_predicates[predicate_indicator] = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// meta_predicate/1\r\n\t\t\t\"meta_predicate/1\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\tvar head = atom.args[0];\r\n\t\t\t\tif( pl.type.is_variable(head) ) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfor(var i = 0; i < head.args.length; i++) {\r\n\t\t\t\t\t\tvar arg = head.args[i];\r\n\t\t\t\t\t\tif(!pl.type.is_meta_argument_specifier(arg)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"meta_argument_specifier\", arg, atom.indicator));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.session.modules[options.context_module].meta_predicates[head.indicator] = head;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// set_prolog_flag\r\n\t\t\t\"set_prolog_flag/2\": function( thread, atom ) {\r\n\t\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\t\tif( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_flag( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_modifiable_flag( flag ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.permission( \"modify\", \"flag\", flag, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_value_flag( flag, value ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.domain( \"flag_value\", new Term( \"+\", [flag, value] ), atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.session.flag[flag.id] = value;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// module/2\r\n\t\t\t\"module/2\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\toptions.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\t\t\tvar module_id = atom.args[0], exports = atom.args[1];\r\n\t\t\t\tif(pl.type.is_variable(module_id) || pl.type.is_variable(exports)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_atom(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"atom\", module_id, atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_list(exports)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"list\", exports, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id.indicator])) {\r\n\t\t\t\t\t\tvar pointer = exports;\r\n\t\t\t\t\t\tvar indicators = [];\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar predicate = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_predicate_indicator(predicate)) {\r\n\t\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"predicate_indicator\", predicate, atom.indicator));\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tindicators.push(predicate.args[0].id + \"/\" + predicate.args[1].value);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\t\t} else if(!pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.type(\"list\", exports, atom.indicator));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar new_module = new Module(module_id.id, {}, indicators, {\r\n\t\t\t\t\t\t\tsession: thread.session\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tthread.session.modules[module_id.id] = new_module;\r\n\t\t\t\t\t\tthread.session.modules[options.context_module].modules[module_id.id] = new_module;\r\n\t\t\t\t\t\toptions.context_module = module_id.id;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_warning(pl.error.permission(\"create\", \"module\", module_id, atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// use_module/1\r\n\t\t\t\"use_module/1\": function(thread, atom, options) {\r\n\t\t\t\tvar options = options === undefined ? {} : options;\r\n\t\t\t\toptions.context_module = options.context_module === undefined ? \"user\" : options.context_module;\r\n\t\t\t\tvar module_id = atom.args[0];\r\n\t\t\t\tif(pl.type.is_variable(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_term(module_id)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"term\", module_id, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(module_id.indicator === \"library/1\") {\r\n\t\t\t\t\t\tvar name = module_id.args[0].id;\r\n\t\t\t\t\t\tvar get_module = pl.modules[name];\r\n\t\t\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\t\t\tif(!thread.session.modules[options.context_module].modules.hasOwnProperty(name)) {\r\n\t\t\t\t\t\t\t\tthread.session.modules[name] = get_module;\r\n\t\t\t\t\t\t\t\tthread.session.modules[options.context_module].modules[name] = get_module;\r\n\t\t\t\t\t\t\t\tfor(var i = 0; i < get_module.dependencies.length; i++) {\r\n\t\t\t\t\t\t\t\t\tvar term = new Term(\"use_module\", [new Term(\"library\", [new Term(get_module.dependencies[i])])]);\r\n\t\t\t\t\t\t\t\t\tpl.directive[\"use_module/1\"](thread, term, {\r\n\t\t\t\t\t\t\t\t\t\tcontext_module: name\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthread.throw_warning(pl.error.existence(\"module\", module_id, atom.indicator));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar name = module_id.id;\r\n\t\t\t\t\t\tthread.consult(name, {\r\n\t\t\t\t\t\t\tcontext_module: options.context_module,\r\n\t\t\t\t\t\t\ttext: false,\r\n\t\t\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\t\t\tparseProgram(thread, options.string, options);\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\terror: function() {\r\n\t\t\t\t\t\t\t\toptions.error(pl.error.existence(\"module\", module_id, atom.indicator));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// char_conversion/2\r\n\t\t\t\"char_conversion/2\": function(thread, atom, options) {\r\n\t\t\t\tvar inchar = atom.args[0], outchar = atom.args[1];\r\n\t\t\t\tif(pl.type.is_variable(inchar) || pl.type.is_variable(outchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_character(inchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"character\", inchar, atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_character(outchar)) {\r\n\t\t\t\t\tthread.throw_warning(pl.error.type(\"character\", outchar, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(inchar.id === outchar.id) {\r\n\t\t\t\t\t\tdelete thread.session.__char_conversion[inchar.id];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.session.__char_conversion[inchar.id] = outchar.id;\r\n\t\t\t\t\t}\r\n\t\t\t\t\toptions.tokens = options.tokenizer.get_tokens(options.current_token);\r\n\t\t\t\t\toptions.current_token = 0;\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// op/3\r\n\t\t\t\"op/3\": function( thread, atom ) {\r\n\t\t\t\tvar priority = atom.args[0], type = atom.args[1], operators = atom.args[2];\r\n\t\t\t\tif(pl.type.is_atom(operators))\r\n\t\t\t\t\toperators = new Term(\".\", [operators, new Term(\"[]\")]);\r\n\t\t\t\tif( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_integer( priority ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_atom( type ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", type, atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_list( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t} else if( pl.type.is_empty_list( operators ) ) {\r\n\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operators, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar pointer = operators;\r\n\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\tvar operator = pointer.args[0];\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\tif( pl.type.is_variable( operator ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t} else if( !pl.type.is_atom( operator ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( priority.value < 0 || priority.value > 1200 ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \",\" ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"{}\" ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"[]\" ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( operator.id === \"|\" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t} else if( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"].indexOf( type.id ) === -1 ) {\r\n\t\t\t\t\t\t\tthread.throw_warning( pl.error.domain( \"operator_specifier\", type, atom.indicator ) );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar fix = { prefix: null, infix: null, postfix: null };\r\n\t\t\t\t\t\t\tfor( var p in thread.session.__operators ) {\r\n\t\t\t\t\t\t\t\tif(!thread.session.__operators.hasOwnProperty(p)) continue;\r\n\t\t\t\t\t\t\t\tvar classes = thread.session.__operators[p][operator.id];\r\n\t\t\t\t\t\t\t\tif( classes ) {\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"fx\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fx\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"fy\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fy\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"xf\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"yf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"yf\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfx\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfy\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfy\" }; }\r\n\t\t\t\t\t\t\t\t\tif( indexOf( classes, \"yfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"yfx\" }; }\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar current_class;\r\n\t\t\t\t\t\t\tswitch( type.id ) {\r\n\t\t\t\t\t\t\t\tcase \"fy\": case \"fx\": current_class = \"prefix\"; break;\r\n\t\t\t\t\t\t\t\tcase \"yf\": case \"xf\": current_class = \"postfix\"; break;\r\n\t\t\t\t\t\t\t\tdefault: current_class = \"infix\"; break;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif(fix.infix && current_class === \"postfix\" || fix.postfix && current_class === \"infix\") {\r\n\t\t\t\t\t\t\t\tthread.throw_warning( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif( fix[current_class] ) {\r\n\t\t\t\t\t\t\t\t\tremove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type );\r\n\t\t\t\t\t\t\t\t\tif( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) {\r\n\t\t\t\t\t\t\t\t\t\tdelete thread.session.__operators[fix[current_class].priority][operator.id];\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif( priority.value > 0 ) {\r\n\t\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {};\r\n\t\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = [];\r\n\t\t\t\t\t\t\t\t\tthread.session.__operators[priority.value][operator.id].push( type.id );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\t\tthread.throw_warning( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// initialization/1\r\n\t\t\t\"initialization/1\": function(thread, atom, options) {\r\n\t\t\t\tvar goal = atom.args[0];\r\n\t\t\t\toptions.initialization.push(goal);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Flags\r\n\t\tflag: {\r\n\t\t\t\r\n\t\t\t// Bounded numbers\r\n\t\t\tbounded: {\r\n\t\t\t\tallowed: [new Term( \"true\" ), new Term( \"false\" )],\r\n\t\t\t\tvalue: new Term( \"true\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Maximum integer\r\n\t\t\tmax_integer: {\r\n\t\t\t\tallowed: [new Num( Number.MAX_SAFE_INTEGER )],\r\n\t\t\t\tvalue: new Num( Number.MAX_SAFE_INTEGER ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Minimum integer\r\n\t\t\tmin_integer: {\r\n\t\t\t\tallowed: [new Num( Number.MIN_SAFE_INTEGER )],\r\n\t\t\t\tvalue: new Num( Number.MIN_SAFE_INTEGER ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Rounding function\r\n\t\t\tinteger_rounding_function: {\r\n\t\t\t\tallowed: [new Term( \"down\" ), new Term( \"toward_zero\" )],\r\n\t\t\t\tvalue: new Term( \"toward_zero\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Character conversion\r\n\t\t\tchar_conversion: {\r\n\t\t\t\tallowed: [new Term( \"on\" ), new Term( \"off\" )],\r\n\t\t\t\tvalue: new Term( \"on\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Debugger\r\n\t\t\tdebug: {\r\n\t\t\t\tallowed: [new Term( \"on\" ), new Term( \"off\" )],\r\n\t\t\t\tvalue: new Term( \"off\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Maximum arity of predicates\r\n\t\t\tmax_arity: {\r\n\t\t\t\tallowed: [new Term( \"unbounded\" )],\r\n\t\t\t\tvalue: new Term( \"unbounded\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Unkwnow predicates behavior\r\n\t\t\tunknown: {\r\n\t\t\t\tallowed: [new Term( \"error\" ), new Term( \"fail\" ), new Term( \"warning\" )],\r\n\t\t\t\tvalue: new Term( \"error\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Double quotes behavior\r\n\t\t\tdouble_quotes: {\r\n\t\t\t\tallowed: [new Term( \"chars\" ), new Term( \"codes\" ), new Term( \"atom\" )],\r\n\t\t\t\tvalue: new Term( \"chars\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Occurs check behavior\r\n\t\t\toccurs_check: {\r\n\t\t\t\tallowed: [new Term( \"false\" ), new Term( \"true\" )],\r\n\t\t\t\tvalue: new Term( \"false\" ),\r\n\t\t\t\tchangeable: true\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Dialect\r\n\t\t\tdialect: {\r\n\t\t\t\tallowed: [new Term( \"tau\" )],\r\n\t\t\t\tvalue: new Term( \"tau\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Version\r\n\t\t\tversion_data: {\r\n\t\t\t\tallowed: [new Term( \"tau\", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] )],\r\n\t\t\t\tvalue: new Term( \"tau\", [new Num(version.major,false), new Num(version.minor,false), new Num(version.patch,false), new Term(version.status)] ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// NodeJS\r\n\t\t\tnodejs: {\r\n\t\t\t\tallowed: [new Term( \"true\" ), new Term( \"false\" )],\r\n\t\t\t\tvalue: new Term( nodejs_flag ? \"true\" : \"false\" ),\r\n\t\t\t\tchangeable: false\r\n\t\t\t},\r\n\r\n\t\t\t// Arguments\r\n\t\t\targv: {\r\n\t\t\t\tallowed: [nodejs_arguments],\r\n\t\t\t\tvalue: nodejs_arguments,\r\n\t\t\t\tchangeble: false\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Unify\r\n\t\tunify: function(t1, t2, occurs_check) {\r\n\t\t\toccurs_check = occurs_check === undefined ? false : occurs_check;\r\n\t\t\tvar left = Array.isArray(t1) ? t1 : [t1];\r\n\t\t\tvar right = Array.isArray(t2) ? t2 : [t2];\r\n\t\t\tif(left.length !== right.length)\r\n\t\t\t\treturn null;\r\n\t\t\tvar subs = new Substitution();\r\n\t\t\twhile(left.length > 0) {\r\n\t\t\t\tvar s = left.pop();\r\n\t\t\t\tvar t = right.pop();\r\n\t\t\t\tif(pl.type.is_variable(s))\r\n\t\t\t\t\ts = s.apply(subs);\r\n\t\t\t\tif(pl.type.is_variable(t))\r\n\t\t\t\t\tt = t.apply(subs);\r\n\t\t\t\t// same object\r\n\t\t\t\tif(s == t)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t// compound terms\r\n\t\t\t\tif(pl.type.is_term(s) && pl.type.is_term(t)) {\r\n\t\t\t\t\tif(s.indicator !== t.indicator)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\tfor(var i = s.args.length-1; i >= 0; i--) {\r\n\t\t\t\t\t\tleft.push(s.args[i]);\r\n\t\t\t\t\t\tright.push(t.args[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t// numbers\r\n\t\t\t\t} else if(pl.type.is_number(s) && pl.type.is_number(t)) {\r\n\t\t\t\t\tif(s.value !== t.value || s.is_float !== t.is_float)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t// variable - term\r\n\t\t\t\t} else if(pl.type.is_variable(s)) {\r\n\t\t\t\t\tt = t.apply(subs);\r\n\t\t\t\t\t// x = x\r\n\t\t\t\t\tif(pl.type.is_variable(t) && s.id === t.id)\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t// occurs check\r\n\t\t\t\t\tif(occurs_check === true && indexOf(t.variables(), s.id) !== -1)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t// anonymous variable\r\n\t\t\t\t\tif(s.id !== \"_\")\r\n\t\t\t\t\t\tsubs.add(s.id, t);\r\n\t\t\t\t// term - variable\r\n\t\t\t\t} else if(pl.type.is_variable(t)) {\r\n\t\t\t\t\tleft.push(t);\r\n\t\t\t\t\tright.push(s);\r\n\t\t\t\t// user-defined terms\r\n\t\t\t\t} else if(s.unify !== undefined) {\r\n\t\t\t\t\tvar user_subs = s.apply(subs).unify(t.apply(subs), occurs_check);\r\n\t\t\t\t\tif(user_subs == null)\r\n\t\t\t\t\t\treturn null;\r\n\t\t\t\t\tfor(var i in user_subs.links)\r\n\t\t\t\t\t\tsubs.add(i, user_subs.links[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn subs.apply(subs);\r\n\t\t},\r\n\r\n\t\t// Is rename\r\n\t\tis_rename: function(obj1, obj2, links) {\r\n\t\t\tlinks = links || {};\r\n\t\t\tif(obj1.is_rename && obj2.is_rename)\r\n\t\t\t\treturn obj1.is_rename(obj2, links);\r\n\t\t\telse if(obj1.equals && obj2.equals)\r\n\t\t\t\treturn obj1.equals(obj2);\r\n\t\t\telse\r\n\t\t\t\treturn false;\r\n\t\t},\r\n\t\t\r\n\t\t// Compare\r\n\t\tcompare: function( obj1, obj2 ) {\r\n\t\t\tvar type = pl.type.compare( obj1, obj2 );\r\n\t\t\treturn type !== 0 ? type : obj1.compare( obj2 );\r\n\t\t},\r\n\t\t\r\n\t\t// Arithmetic comparison\r\n\t\tarithmetic_compare: function( thread, obj1, obj2 ) {\r\n\t\t\tvar expr1 = obj1.interpret( thread );\r\n\t\t\tif( !pl.type.is_number( expr1 ) ) {\r\n\t\t\t\treturn expr1;\r\n\t\t\t} else {\r\n\t\t\t\tvar expr2 = obj2.interpret( thread );\r\n\t\t\t\tif( !pl.type.is_number( expr2 ) ) {\r\n\t\t\t\t\treturn expr2;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn expr1.value < expr2.value ? -1 : (expr1.value > expr2.value ? 1 : 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Operate\r\n\t\toperate: function( thread, obj ) {\r\n\t\t\tif( pl.type.is_operator( obj ) ) {\r\n\t\t\t\tvar op = pl.type.is_operator( obj );\r\n\t\t\t\tvar args = [], value;\r\n\t\t\t\tvar type = false;\r\n\t\t\t\tfor( var i = 0; i < obj.args.length; i++ ) {\r\n\t\t\t\t\tvalue = obj.args[i].interpret( thread );\r\n\t\t\t\t\tif( !pl.type.is_number( value ) ) {\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t} else if( op.type_args !== null && value.is_float !== op.type_args ) {\r\n\t\t\t\t\t\treturn pl.error.type( op.type_args ? \"float\" : \"integer\", value, thread.__call_indicator );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\targs.push( value.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttype = type || value.is_float;\r\n\t\t\t\t}\r\n\t\t\t\targs.push( thread );\r\n\t\t\t\tvalue = pl.arithmetic.evaluation[obj.indicator].fn.apply( this, args );\r\n\t\t\t\tif(obj.indicator === \"^/2\" && !type && value !== parseInt(value, 10))\r\n\t\t\t\t\treturn pl.error.type( \"float\", new Num(args[0],false), thread.__call_indicator );\r\n\t\t\t\ttype = op.type_result === null ? type : op.type_result;\r\n\t\t\t\tif( pl.type.is_term( value ) ) {\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t} else if( value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY ) {\r\n\t\t\t\t\treturn pl.error.evaluation( \"float_overflow\", thread.__call_indicator );\r\n\t\t\t\t} else if( type === false && thread.get_flag( \"bounded\" ).id === \"true\" && (value > thread.get_flag( \"max_integer\" ).value || value < thread.get_flag( \"min_integer\" ).value) ) {\r\n\t\t\t\t\treturn pl.error.evaluation( \"int_overflow\", thread.__call_indicator );\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn new Num( value, type );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn pl.error.type( \"evaluable\", str_indicator(obj.indicator), thread.__call_indicator );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Errors\r\n\t\terror: {\r\n\t\t\t\r\n\t\t\t// Existence error\r\n\t\t\texistence: function( type, object, indicator ) {\r\n\t\t\t\tif( typeof object === \"string\" )\r\n\t\t\t\t\tobject = str_indicator( object );\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"existence_error\", [new Term( type ), object] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Type error\r\n\t\t\ttype: function( expected, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"type_error\", [new Term( expected ), found] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Instantation error\r\n\t\t\tinstantiation: function( indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"instantiation_error\" ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Uninstantation error\r\n\t\t\tuninstantiation: function( found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"uninstantiation_error\", [new Term( found )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Domain error\r\n\t\t\tdomain: function( expected, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"domain_error\", [new Term( expected ), found]), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Representation error\r\n\t\t\trepresentation: function( flag, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"representation_error\", [new Term( flag )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Permission error\r\n\t\t\tpermission: function( operation, type, found, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"permission_error\", [new Term( operation ), new Term( type ), found] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Evaluation error\r\n\t\t\tevaluation: function( error, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"evaluation_error\", [new Term( error )] ), str_indicator( indicator )] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Syntax error\r\n\t\t\tsyntax: function( token, expected, last ) {\r\n\t\t\t\ttoken = token || {value: \"\", line: 0, column: 0, matches: [\"\"], start: 0};\r\n\t\t\t\tvar position = last && token.matches.length > 0 ? token.start + token.matches[0].length : token.start;\r\n\t\t\t\tvar found = last ? new Term(\"token_not_found\") : new Term(\"found\", [new Term(token.value.toString())]);\r\n\t\t\t\tvar info = new Term( \".\", [new Term( \"line\", [new Num(token.line+1)] ), new Term( \".\", [new Term( \"column\", [new Num(position)] ), new Term( \".\", [found, new Term( \"[]\", [] )] )] )] );\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"syntax_error\", [new Term( expected )] ), info] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Syntax error by predicate\r\n\t\t\tsyntax_by_predicate: function( expected, indicator ) {\r\n\t\t\t\treturn new Term( \"error\", [new Term( \"syntax_error\", [new Term( expected ) ] ), str_indicator( indicator )] );\r\n\t\t\t}\r\n\t\t\t\r\n\t\t},\r\n\t\t\r\n\t\t// Warnings\r\n\t\twarning: {\r\n\t\t\t\r\n\t\t\t// Singleton variables\r\n\t\t\tsingleton: function( variables, rule, line ) {\r\n\t\t\t\tvar list = new Term( \"[]\" );\r\n\t\t\t\tfor( var i = variables.length-1; i >= 0; i-- )\r\n\t\t\t\t\tlist = new Term( \".\", [new Var(variables[i]), list] );\r\n\t\t\t\treturn new Term( \"warning\", [new Term( \"singleton_variables\", [list, str_indicator(rule)]), new Term(\".\",[new Term( \"line\", [ new Num( line, false ) ]), new Term(\"[]\")])] );\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// Failed goal\r\n\t\t\tfailed_goal: function( goal, line ) {\r\n\t\t\t\treturn new Term( \"warning\", [new Term( \"failed_goal\", [goal]), new Term(\".\",[new Term( \"line\", [ new Num( line, false ) ]), new Term(\"[]\")])] );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t\r\n\t\t// Format of renamed variables\r\n\t\tformat_variable: function( id, variable ) {\r\n\t\t\tvar charcode = variable && variable.length > 0 ? codePointAt(variable, 1) : 0;\r\n\t\t\tif(variable === \"_\" || variable && variable[0] === \"_\" && (charcode === 95 || charcode >= 65 && charcode <= 90))\r\n\t\t\t\treturn \"__\" + id;\r\n\t\t\treturn \"_\" + id;\r\n\t\t},\r\n\t\t\r\n\t\t// Format of computed answers\r\n\t\tformat_answer: function( answer, thread, options ) {\r\n\t\t\tif( thread instanceof Session )\r\n\t\t\t\tthread = thread.thread;\r\n\t\t\tvar options = options ? options : {};\r\n\t\t\toptions.session = thread ? thread.session : undefined;\r\n\t\t\tif( pl.type.is_error( answer ) ) {\r\n\t\t\t\treturn \"uncaught exception: \" + answer.args[0].toString(options);\r\n\t\t\t} else if( answer === false ) {\r\n\t\t\t\treturn \"false\";\r\n\t\t\t} else if( answer === null ) {\r\n\t\t\t\treturn \"limit exceeded\";\r\n\t\t\t} else {\r\n\t\t\t\tvar i = 0;\r\n\t\t\t\tvar str = \"\";\r\n\t\t\t\tif( pl.type.is_substitution( answer ) ) {\r\n\t\t\t\t\tvar dom = answer.domain( true );\r\n\t\t\t\t\tfor( var link in answer.links ){\r\n\t\t\t\t\t\tif( !answer.links.hasOwnProperty(link) ) continue;\r\n\t\t\t\t\t\tif( pl.type.is_variable(answer.links[link]) ) {\r\n\t\t\t\t\t\t\tvar links = {};\r\n\t\t\t\t\t\t\tlinks[answer.links[link].id] = new Var(link);\r\n\t\t\t\t\t\t\tanswer = answer.apply( new Substitution(links) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tanswer = answer.filter( function( id, value ) {\r\n\t\t\t\t\t\treturn !pl.type.is_variable( value ) ||\r\n\t\t\t\t\t\t\tpl.type.is_variable( value ) && answer.has_attributes( id ) ||\r\n\t\t\t\t\t\t\tindexOf( dom, value.id ) !== -1 && id !== value.id;\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t\tfor( var link in answer.links ) {\r\n\t\t\t\t\tif(!answer.links.hasOwnProperty(link))\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tif( pl.type.is_variable( answer.links[link] ) && link === answer.links[link].id ) {\r\n\t\t\t\t\t\tvar attrs = answer.attrs[link];\r\n\t\t\t\t\t\tfor( var module in attrs ) {\r\n\t\t\t\t\t\t\tif(!attrs.hasOwnProperty(module))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\t\tif( str !== \"\" )\r\n\t\t\t\t\t\t\t\tstr += \", \";\r\n\t\t\t\t\t\t\tstr += \"put_attr(\" + link + \", \" + module + \", \" + attrs[module].toString(options) + \")\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t\tif( str !== \"\" )\r\n\t\t\t\t\t\t\tstr += \", \";\r\n\t\t\t\t\t\tstr += link.toString( options ) + \" = \" +\r\n\t\t\t\t\t\t\tanswer.links[link].toString( options, {priority: \"700\", class: \"xfx\", indicator: \"=/2\"}, \"right\" );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( i === 0 ) {\r\n\t\t\t\t\treturn \"true\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn str;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Flatten default errors\r\n\t\tflatten_error: function( error ) {\r\n\t\t\tif( !pl.type.is_error( error ) ) return null;\r\n\t\t\terror = error.args[0];\r\n\t\t\tvar obj = {};\r\n\t\t\tobj.type = error.args[0].id;\r\n\t\t\tobj.thrown = obj.type === \"syntax_error\" ? null : error.args[1].id;\r\n\t\t\tobj.expected = null;\r\n\t\t\tobj.found = null;\r\n\t\t\tobj.representation = null;\r\n\t\t\tobj.existence = null;\r\n\t\t\tobj.existence_type = null;\r\n\t\t\tobj.line = null;\r\n\t\t\tobj.column = null;\r\n\t\t\tobj.permission_operation = null;\r\n\t\t\tobj.permission_type = null;\r\n\t\t\tobj.evaluation_type = null;\r\n\t\t\tif( obj.type === \"type_error\" || obj.type === \"domain_error\" ) {\r\n\t\t\t\tobj.expected = error.args[0].args[0].id;\r\n\t\t\t\tobj.found = error.args[0].args[1].toString();\r\n\t\t\t} else if( obj.type === \"syntax_error\" ) {\r\n\t\t\t\tif( error.args[1].indicator === \"./2\" ) {\r\n\t\t\t\t\tobj.expected = error.args[0].args[0].id;\r\n\t\t\t\t\tobj.found = error.args[1].args[1].args[1].args[0];\r\n\t\t\t\t\tobj.found = obj.found.id === \"token_not_found\" ? obj.found.id : obj.found.args[0].id;\r\n\t\t\t\t\tobj.line = error.args[1].args[0].args[0].value;\r\n\t\t\t\t\tobj.column = error.args[1].args[1].args[0].args[0].value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tobj.thrown = error.args[1].id;\r\n\t\t\t\t}\r\n\t\t\t} else if( obj.type === \"permission_error\" ) {\r\n\t\t\t\tobj.found = error.args[0].args[2].toString();\r\n\t\t\t\tobj.permission_operation = error.args[0].args[0].id;\r\n\t\t\t\tobj.permission_type = error.args[0].args[1].id;\r\n\t\t\t} else if( obj.type === \"evaluation_error\" ) {\r\n\t\t\t\tobj.evaluation_type = error.args[0].args[0].id;\r\n\t\t\t} else if( obj.type === \"representation_error\" ) {\r\n\t\t\t\tobj.representation = error.args[0].args[0].id;\r\n\t\t\t} else if( obj.type === \"existence_error\" ) {\r\n\t\t\t\tobj.existence = error.args[0].args[1].toString();\r\n\t\t\t\tobj.existence_type = error.args[0].args[0].id;\r\n\t\t\t}\r\n\t\t\treturn obj;\r\n\t\t},\r\n\t\t\r\n\t\t// Create new session\r\n\t\tcreate: function( limit ) {\r\n\t\t\treturn new pl.type.Session( limit );\r\n\t\t}\r\n\t\t\r\n\t};\r\n\r\n\t// Built-in predicates\r\n\tpl.builtin = new Module(\"system\", {\r\n\r\n\t\t// TERM AND GOAL EXPANSION\r\n\r\n\t\t// goal_expansion/2\r\n\t\t\"goal_expansion/2\": [\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\",\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\",\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\";\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\";\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"->\", [new Var(\"X\"),new Var(\"Y\")]),new Term(\"->\", [new Var(\"X_\"),new Var(\"Y_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")]),new Term(\"=\", [new Var(\"Y_\"),new Var(\"Y\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"catch\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"catch\", [new Var(\"X_\"),new Var(\"Y\"),new Var(\"Z_\")])]), new Term(\";\", [new Term(\",\", [new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")]),new Term(\";\", [new Term(\"goal_expansion\", [new Var(\"Z\"),new Var(\"Z_\")]),new Term(\"=\", [new Var(\"Z_\"),new Var(\"Z\")])])]),new Term(\",\", [new Term(\"=\", [new Var(\"X_\"),new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"Z\"),new Var(\"Z_\")])])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"\\\\+\", [new Var(\"X\")]),new Term(\"\\\\+\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"once\", [new Var(\"X\")]),new Term(\"once\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"findall\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"setof\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"bagof\", [new Var(\"X\"),new Var(\"Y\"),new Var(\"Z\")]),new Term(\"findall\", [new Var(\"X\"),new Var(\"Y_\"),new Var(\"Z\")])]), new Term(\"goal_expansion\", [new Var(\"Y\"),new Var(\"Y_\")])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\")]),new Term(\"call\", [new Var(\"X_\")])]), new Term(\",\", [new Term(\"nonvar\", [new Var(\"X\")]),new Term(\"goal_expansion\", [new Var(\"X\"),new Var(\"X_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\"[]\", [])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\"[]\", [])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\"[]\", [])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\"[]\", [])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\"[]\", [])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\"),new Var(\"A6\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\".\", [new Var(\"A6\"),new Term(\"[]\", [])])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])])),\r\n\t\t\tnew Rule(new Term(\"goal_expansion\", [new Term(\"call\", [new Var(\"X\"),new Var(\"A1\"),new Var(\"A2\"),new Var(\"A3\"),new Var(\"A4\"),new Var(\"A5\"),new Var(\"A6\"),new Var(\"A7\")]),new Term(\"call\", [new Var(\"F_\")])]), new Term(\",\", [new Term(\"=..\", [new Var(\"F\"),new Term(\".\", [new Var(\"X\"),new Term(\".\", [new Var(\"A1\"),new Term(\".\", [new Var(\"A2\"),new Term(\".\", [new Var(\"A3\"),new Term(\".\", [new Var(\"A4\"),new Term(\".\", [new Var(\"A5\"),new Term(\".\", [new Var(\"A6\"),new Term(\".\", [new Var(\"A7\"),new Term(\"[]\", [])])])])])])])])])]),new Term(\"goal_expansion\", [new Var(\"F\"),new Var(\"F_\")])]))\r\n\t\t],\r\n\r\n\r\n\r\n\t\t// SYSTEM PREDICATES ($)\r\n\r\n\t\t// '$push_global_stack'/2\r\n\t\t\"$push_global_stack/2\": function(thread, point, atom) {\r\n\t\t\tvar stack = atom.args[0], value = atom.args[1];\r\n\t\t\tif(!pl.type.is_variable(stack)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.push_global_stack(stack.id, value);\r\n\t\t\t\tthread.success(point);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// '$flush_global_stack'/3\r\n\t\t\"$flush_global_stack/3\": function(thread, point, atom) {\r\n\t\t\tvar stack = atom.args[0], list = atom.args[1], tail = atom.args[2];\r\n\t\t\tif(!pl.type.is_variable(stack)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar values = thread.flush_global_stack(stack.id, tail);\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [list, values])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// '$free_variable_set'/3\r\n\t\t\"$free_variable_set/3\": function(thread, point, atom) {\r\n\t\t\tvar goal_in = atom.args[0], goal_out = atom.args[1], vars = atom.args[2];\r\n\t\t\tvar bv = [];\r\n\t\t\tvar pointer = goal_in;\r\n\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"^/2\") {\r\n\t\t\t\tbv = bv.concat(pointer.args[0].variables());\r\n\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t}\r\n\t\t\tvar gv = pointer.variables();\r\n\t\t\tvar fv = arrayToList(map(difference(gv, bv), function(v) {\r\n\t\t\t\treturn new Var(v);\r\n\t\t\t}));\r\n\t\t\tthread.prepend([\r\n\t\t\t\tnew State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"=\", [goal_out, pointer]),\r\n\t\t\t\t\t\tnew Term(\"=\", [vars, fv]) \r\n\t\t\t\t\t])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)\r\n\t\t\t]);\r\n\t\t},\r\n\r\n\t\t// '$member'/2\r\n\t\t\"$member/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Term(\".\", [new pl.type.Var(\"X\"),new pl.type.Var(\"_\")])]), null),\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Term(\".\", [new pl.type.Var(\"_\"),new pl.type.Var(\"Xs\")])]), new pl.type.Term(\"$member\", [new pl.type.Var(\"X\"),new pl.type.Var(\"Xs\")]))\r\n\t\t],\r\n\r\n\t\t// '$bind_bagof_keys/2'/2\r\n\t\t\"$bind_bagof_keys/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Term(\"[]\", []),new pl.type.Var(\"_\")]), null),\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Term(\".\", [new pl.type.Term(\"-\", [new pl.type.Var(\"Key\"),new pl.type.Var(\"_\")]),new pl.type.Var(\"Bag\")]),new pl.type.Var(\"Vars\")]), new pl.type.Term(\",\", [new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Key\"),new pl.type.Var(\"Vars\"),new pl.type.Var(\"_\")]),new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Bag\"),new pl.type.Var(\"Vars\")])]))\r\n\t\t],\r\n\r\n\t\t// '$findall'/4\r\n\t\t\"$findall/4\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$findall\", [new pl.type.Var(\"Template0\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Instances\"),new pl.type.Var(\"Tail\")]), new pl.type.Term(\";\", [new pl.type.Term(\",\", [new pl.type.Term(\"copy_term\", [new pl.type.Term(\"-\", [new pl.type.Var(\"Template0\"),new pl.type.Var(\"Goal0\")]),new pl.type.Term(\"-\", [new pl.type.Var(\"Template1\"),new pl.type.Var(\"Goal1\")])]),new pl.type.Term(\",\", [new pl.type.Term(\"call\", [new pl.type.Var(\"Goal1\")]),new pl.type.Term(\",\", [new pl.type.Term(\"copy_term\", [new pl.type.Var(\"Template1\"),new pl.type.Var(\"Template2\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$push_global_stack\", [new pl.type.Var(\"Var\"),new pl.type.Var(\"Template2\")]),new pl.type.Term(\"false\", [])])])])]),new pl.type.Term(\"$flush_global_stack\", [new pl.type.Var(\"Var\"),new pl.type.Var(\"Instances\"),new pl.type.Var(\"Tail\")])]))\r\n\t\t],\r\n\r\n\t\t// '$bagof'/3\r\n\t\t\"$bagof/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$bagof\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Answer\")]), new pl.type.Term(\",\", [new pl.type.Term(\"$free_variable_set\", [new pl.type.Term(\"^\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"FV\")]),new pl.type.Term(\",\", [new pl.type.Term(\"findall\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Template\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"Answers\"),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\",\", [new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"_\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keygroup\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"KeyGroups\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keysort\", [new pl.type.Var(\"KeyGroups\"),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\"$member\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Answer\")]),new pl.type.Var(\"KeySorted\")])])])])])]))\r\n\t\t],\r\n\r\n\t\t// '$setof'/3\r\n\t\t\"$setof/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$setof\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\"),new pl.type.Var(\"Answer\")]), new pl.type.Term(\",\", [new pl.type.Term(\"$free_variable_set\", [new pl.type.Term(\"^\", [new pl.type.Var(\"Template\"),new pl.type.Var(\"Goal0\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"FV\")]),new pl.type.Term(\",\", [new pl.type.Term(\"findall\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Template\")]),new pl.type.Var(\"Goal1\"),new pl.type.Var(\"Answers\"),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\",\", [new pl.type.Term(\"$bind_bagof_keys\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"_\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keygroup\", [new pl.type.Var(\"Answers\"),new pl.type.Var(\"KeyGroups\")]),new pl.type.Term(\",\", [new pl.type.Term(\"keysort\", [new pl.type.Var(\"KeyGroups\"),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$member\", [new pl.type.Term(\"-\", [new pl.type.Var(\"FV\"),new pl.type.Var(\"Unsorted\")]),new pl.type.Var(\"KeySorted\")]),new pl.type.Term(\"sort\", [new pl.type.Var(\"Unsorted\"),new pl.type.Var(\"Answer\")])])])])])])]))\r\n\t\t],\r\n\r\n\t\t// '$if/3'\r\n\t\t\"$if/3\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"$if\", [new pl.type.Var(\"If\"),new pl.type.Var(\"Then\"),new pl.type.Var(\"Else\")]), new pl.type.Term(\";\", [new pl.type.Term(\",\", [new pl.type.Term(\"call\", [new pl.type.Var(\"If\")]),new pl.type.Term(\",\", [new pl.type.Term(\"$push_global_stack\", [new pl.type.Var(\"Stack\"),new pl.type.Var(\"_\")]),new pl.type.Term(\"call\", [new pl.type.Var(\"Then\")])])]),new pl.type.Term(\",\", [new pl.type.Term(\"$flush_global_stack\", [new pl.type.Var(\"Stack\"),new pl.type.Term(\"[]\", []),new pl.type.Term(\"[]\", [])]),new pl.type.Term(\"call\", [new pl.type.Var(\"Else\")])])]))\r\n\t\t],\r\n\r\n\r\n\t\t// ATTRIBUTED VARIABLES\r\n\t\t\r\n\t\t//put_attr/3\r\n\t\t\"put_attr/3\": function( thread, point, atom ) {\r\n\t\t\tvar variable = atom.args[0], module = atom.args[1], value = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable(variable) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"variable\", variable, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom(module) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", module, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar subs = point.substitution.set_attribute( variable.id, module, value );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace(null), subs, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// get_attr/3\r\n\t\t\"get_attr/3\": function( thread, point, atom ) {\r\n\t\t\tvar variable = atom.args[0], module = atom.args[1], value = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable(variable) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"variable\", variable, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom(module) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", module, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar attr = point.substitution.get_attribute( variable.id, module );\r\n\t\t\t\tif( attr ) {\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term(\"=\", [value, attr]) ),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\t\t\r\n\t\t// INPUT AND OUTPUT\r\n\t\t\r\n\t\t// op/3\r\n\t\t\"op/3\": function( thread, point, atom ) {\r\n\t\t\tvar priority = atom.args[0], type = atom.args[1], operators = atom.args[2];\r\n\t\t\tif(pl.type.is_atom(operators))\r\n\t\t\t\toperators = new Term(\".\", [operators, new Term(\"[]\")]);\r\n\t\t\tif( pl.type.is_variable( priority ) || pl.type.is_variable( type ) || pl.type.is_variable( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( priority ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( type ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", type, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_empty_list( operators ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operators, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar pointer = operators;\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tvar operator = pointer.args[0];\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\tif( pl.type.is_variable( operator ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_atom( operator ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( priority.value < 0 || priority.value > 1200 ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \",\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"{}\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"[]\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( operator.id === \"|\" && priority.value !== 0 && (priority.value < 1001 || type.id.length !== 3 ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"].indexOf( type.id ) === -1 ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"operator_specifier\", type, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar fix = { prefix: null, infix: null, postfix: null };\r\n\t\t\t\t\t\tfor( var p in thread.session.__operators ) {\r\n\t\t\t\t\t\t\tif(!thread.session.__operators.hasOwnProperty(p)) continue;\r\n\t\t\t\t\t\t\tvar classes = thread.session.__operators[p][operator.id];\r\n\t\t\t\t\t\t\tif( classes ) {\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"fx\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fx\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"fy\" ) !== -1 ) { fix.prefix = { priority: p, type: \"fy\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"xf\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"yf\" ) !== -1 ) { fix.postfix = { priority: p, type: \"yf\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfx\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"xfy\" ) !== -1 ) { fix.infix = { priority: p, type: \"xfy\" }; }\r\n\t\t\t\t\t\t\t\tif( indexOf( classes, \"yfx\" ) !== -1 ) { fix.infix = { priority: p, type: \"yfx\" }; }\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar current_class;\r\n\t\t\t\t\t\tswitch( type.id ) {\r\n\t\t\t\t\t\t\tcase \"fy\": case \"fx\": current_class = \"prefix\"; break;\r\n\t\t\t\t\t\t\tcase \"yf\": case \"xf\": current_class = \"postfix\"; break;\r\n\t\t\t\t\t\t\tdefault: current_class = \"infix\"; break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(fix.infix && current_class === \"postfix\" || fix.postfix && current_class === \"infix\") {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"create\", \"operator\", operator, atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif( fix[current_class] ) {\r\n\t\t\t\t\t\t\t\tremove( thread.session.__operators[fix[current_class].priority][operator.id], fix[current_class].type );\r\n\t\t\t\t\t\t\t\tif( thread.session.__operators[fix[current_class].priority][operator.id].length === 0 ) {\r\n\t\t\t\t\t\t\t\t\tdelete thread.session.__operators[fix[current_class].priority][operator.id];\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif( priority.value > 0 ) {\r\n\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value] ) thread.session.__operators[priority.value.toString()] = {};\r\n\t\t\t\t\t\t\t\tif( !thread.session.__operators[priority.value][operator.id] ) thread.session.__operators[priority.value][operator.id] = [];\r\n\t\t\t\t\t\t\t\tthread.session.__operators[priority.value][operator.id].push( type.id );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if(!pl.type.is_term(pointer) || pointer.indicator !== \"[]/0\") {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", operators, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_op/3\r\n\t\t\"current_op/3\": function( thread, point, atom ) {\r\n\t\t\tvar priority = atom.args[0], specifier = atom.args[1], operator = atom.args[2];\r\n\t\t\tvar points = [];\r\n\t\t\tif( !pl.type.is_variable( priority ) && !pl.type.is_integer( priority ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", priority, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( priority ) && ( priority.value < 0 || priority.value > 1200 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"operator_priority\", priority, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( specifier ) && !pl.type.is_atom( specifier ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", specifier, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_atom( specifier ) && indexOf( [\"fy\", \"fx\", \"yf\", \"xf\", \"xfx\", \"yfx\", \"xfy\"], specifier.id ) === -1 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"operator_specifier\", specifier, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( operator ) && !pl.type.is_atom( operator ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", operator, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tfor( var p in thread.session.__operators )\r\n\t\t\t\t\tfor( var o in thread.session.__operators[p] )\r\n\t\t\t\t\t\tfor( var i = 0; i < thread.session.__operators[p][o].length; i++ )\r\n\t\t\t\t\t\t\tpoints.push( new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\t\t\t\tnew Term( \",\", [\r\n\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Num( p, false ), priority] ),\r\n\t\t\t\t\t\t\t\t\t\tnew Term( \",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Term( thread.session.__operators[p][o][i], [] ), specifier] ),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term( \"=\", [new Term( o, [] ), operator] )\r\n\t\t\t\t\t\t\t\t\t\t] )\r\n\t\t\t\t\t\t\t\t\t] )\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t) );\r\n\t\t\t\tthread.prepend( points );\r\n\t\t\t}\r\n\t\t},\r\n\t\r\n\r\n\r\n\t\t// LOGIC AND CONTROL STRUCTURES\r\n\t\r\n\t\t// ;/2 (disjunction)\r\n\t\t\";/2\": function(thread, point, atom) {\r\n\t\t\tvar left = atom.args[0], right = atom.args[1];\r\n\t\t\tvar context_left = left.args[0];\r\n\t\t\tvar free_left = left.indicator === \":/2\" ? left.args[1] : left;\r\n\t\t\t// if then else\r\n\t\t\tif(pl.type.is_term(free_left) && free_left.indicator === \"->/2\") {\r\n\t\t\t\tvar cond = left.indicator === \":/2\" ? new Term(\":\", [context_left, new Term(\"call\", [free_left.args[0]])]) : free_left.args[0];\r\n\t\t\t\tvar then = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[1]]) : free_left.args[1];\r\n\t\t\t\tvar otherwise = right;\r\n\t\t\t\tvar goal_fst = point.goal.replace(new Term( \",\", [cond, new Term(\",\", [new Term(\"!\"), then])] ) );\r\n\t\t\t\tvar goal_snd = point.goal.replace(new Term( \",\", [new Term(\"!\"), otherwise]));\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(goal_fst, point.substitution, point),\r\n\t\t\t\t\tnew State(goal_snd, point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t// soft-cut\r\n\t\t\t} else if(pl.type.is_term(free_left) && free_left.indicator === \"*->/2\") {\r\n\t\t\t\tvar cond = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[0]]) : free_left.args[0];\r\n\t\t\t\tvar then = left.indicator === \":/2\" ? new Term(\":\", [context_left, free_left.args[1]]) : free_left.args[1];\r\n\t\t\t\tvar otherwise = right;\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$if\", [cond, then, otherwise])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t// otherwise\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(point.goal.replace(left), point.substitution, point),\r\n\t\t\t\t\tnew State(point.goal.replace(right), point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// !/0 (cut)\r\n\t\t\"!/0\": function( thread, point, atom ) {\r\n\t\t\tvar parent_cut, last_cut, states = [];\r\n\t\t\tparent_cut = point;\r\n\t\t\tlast_cut = null;\r\n\t\t\twhile( parent_cut.parent !== null && parent_cut.parent.goal.search( atom ) ) {\r\n\t\t\t\tlast_cut = parent_cut;\r\n\t\t\t\tparent_cut = parent_cut.parent;\r\n\t\t\t\tif(parent_cut.goal !== null) {\r\n\t\t\t\t\tvar selected = parent_cut.goal.select();\r\n\t\t\t\t\tif(selected && selected.indicator === \":/2\")\r\n\t\t\t\t\t\tselected = selected.args[1];\r\n\t\t\t\t\tif( selected && selected.id === \"call\" && selected.search(atom) ) {\r\n\t\t\t\t\t\tparent_cut = last_cut;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar setup_call_cleanup = null;\r\n\t\t\tfor( var i = thread.points.length-1; i >= 0; i-- ) {\r\n\t\t\t\tvar state = thread.points[i];\r\n\t\t\t\tvar node = state.parent;\r\n\t\t\t\twhile( node !== null && node !== parent_cut.parent ) {\r\n\t\t\t\t\tnode = node.parent;\r\n\t\t\t\t}\r\n\t\t\t\tif( node === null && node !== parent_cut.parent )\r\n\t\t\t\t\tstates.push( state );\r\n\t\t\t\telse if(state.setup_call_cleanup_goal)\r\n\t\t\t\t\tsetup_call_cleanup = state.setup_call_cleanup_goal\r\n\t\t\t}\r\n\t\t\tthread.points = states.reverse();\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(setup_call_cleanup),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\t\t\r\n\t\t// \\+ (negation)\r\n\t\t\"\\\\+/1\": function( thread, point, atom ) {\r\n\t\t\tvar goal = atom.args[0];\r\n\t\t\tif( pl.type.is_variable( goal ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_callable( goal ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"callable\", goal, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// TRANSPARENT VERSION OF THE NEGATION\r\n\t\t\t\t/*var neg_thread;\r\n\t\t\t\tif(point.negation_thread) {\r\n\t\t\t\t\tneg_thread = point.negation_thread;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tneg_thread = new Thread( thread.session );\r\n\t\t\t\t\tneg_thread.add_goal( goal );\r\n\t\t\t\t\tpoint.negation_thread = neg_thread;\r\n\t\t\t\t}\r\n\t\t\t\tneg_thread.answer( function( answer ) {\r\n\t\t\t\t\tif(answer === false) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t} else if(pl.type.is_error( answer )) {\r\n\t\t\t\t\t\tthread.throw_error( answer.args[0] );\r\n\t\t\t\t\t} else if(answer === null) {\r\n\t\t\t\t\t\tthread.prepend( [point] );\r\n\t\t\t\t\t\tthread.current_limit = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.again( answer !== null );\r\n\t\t\t\t} );\r\n\t\t\t\treturn true;*/\r\n\t\t\t\t\r\n\t\t\t\t// '\\+'(X) :- call(X), !, fail.\r\n\t\t\t\t// '\\+'(_).\r\n\t\t\t\tthread.prepend( [\r\n\t\t\t\t\tnew State( point.goal.replace( new Term( \",\", [new Term( \",\", [ new Term( \"call\", [goal] ), new Term( \"!\", [] ) ] ), new Term( \"fail\", [] ) ] ) ), point.substitution, point ),\r\n\t\t\t\t\tnew State( point.goal.replace( null ), point.substitution, point )\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ->/2 (implication)\r\n\t\t\"->/2\": function( thread, point, atom ) {\r\n\t\t\tvar cond = atom.args[0], then = atom.args[1];\r\n\t\t\tvar goal = point.goal.replace(new Term(\",\", [\r\n\t\t\t\tnew Term(\"call\", [cond]),\r\n\t\t\t\tnew Term(\",\", [new Term(\"!\"), then])\r\n\t\t\t]));\r\n\t\t\tthread.prepend( [new State( goal, point.substitution, point )] );\r\n\t\t},\r\n\r\n\t\t// *->/2 (soft-cut)\r\n\t\t\"*->/2\": function(thread, point, atom) {\r\n\t\t\tvar cond = atom.args[0], then = atom.args[1];\r\n\t\t\tvar goal = point.goal.replace(new Term(\",\", [\r\n\t\t\t\tnew Term(\"call\", [cond]), then]));\r\n\t\t\tthread.prepend([new State(goal, point.substitution, point)]);\r\n\t\t},\r\n\t\t\r\n\t\t// fail/0\r\n\t\t\"fail/0\": function( _1, _2, _3 ) {},\r\n\t\t\r\n\t\t// false/0\r\n\t\t\"false/0\": function( _1, _2, _3 ) {},\r\n\t\t\r\n\t\t// true/0\r\n\t\t\"true/0\": function( thread, point, _ ) {\r\n\t\t\tthread.success( point );\r\n\t\t},\r\n\t\t\r\n\t\t// call/1..8\r\n\t\t\"call/1\": callN(1),\r\n\t\t\"call/2\": callN(2),\r\n\t\t\"call/3\": callN(3),\r\n\t\t\"call/4\": callN(4),\r\n\t\t\"call/5\": callN(5),\r\n\t\t\"call/6\": callN(6),\r\n\t\t\"call/7\": callN(7),\r\n\t\t\"call/8\": callN(8),\r\n\t\t\r\n\t\t// once/1\r\n\t\t\"once/1\": function( thread, point, atom ) {\r\n\t\t\tvar goal = atom.args[0];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \",\", [new Term( \"call\", [goal] ), new Term( \"!\", [] )] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// forall/2\r\n\t\t\"forall/2\": function( thread, point, atom ) {\r\n\t\t\tvar generate = atom.args[0], test = atom.args[1];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"\\\\+\", [new Term( \",\", [new Term( \"call\", [generate] ), new Term( \"\\\\+\", [new Term( \"call\", [test] )] )] )] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// repeat/0\r\n\t\t\"repeat/0\": function( thread, point, _ ) {\r\n\t\t\tthread.prepend( [new State( point.goal.replace( null ), point.substitution, point ), point] );\r\n\t\t},\r\n\r\n\t\t// EXCEPTIONS\r\n\t\t\r\n\t\t// throw/1\r\n\t\t\"throw/1\": function( thread, point, atom ) {\r\n\t\t\tvar error = atom.args[0];\r\n\t\t\tif(pl.type.is_variable(error)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(thread.level.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tfor(var i = 0; i < thread.points.length; i++) {\r\n\t\t\t\t\tvar state = thread.points[i];\r\n\t\t\t\t\tif(state.setup_call_cleanup_catch) {\r\n\t\t\t\t\t\tthread.points = [new State(\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"catch\", [\r\n\t\t\t\t\t\t\t\t\tstate.setup_call_cleanup_catch,\r\n\t\t\t\t\t\t\t\t\tnew Var(\"_\"),\r\n\t\t\t\t\t\t\t\t\tnew Term(\"throw\", [error])\r\n\t\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\t\tnew Term(\"throw\", [error])\r\n\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t)];\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\tthread.throw_error(error);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// catch/3\r\n\t\t\"catch/3\": function(thread, point, atom) {\r\n\t\t\tvar goal = atom.args[0], catcher = atom.args[1], recover = atom.args[2];\r\n\t\t\tvar nthread;\r\n\t\t\tif(!point.catch) {\r\n\t\t\t\tnthread = new Thread(thread.session);\r\n\t\t\t\tnthread.debugger = thread.debugger;\r\n\t\t\t\tnthread.format_success = function(state) { return state.substitution; };\r\n\t\t\t\tnthread.format_error = function(state) { return state.goal; };\r\n\t\t\t\tnthread.add_goal(goal, true, point);\r\n\t\t\t\tpoint.catch = nthread;\r\n\t\t\t} else {\r\n\t\t\t\tnthread = point.catch;\r\n\t\t\t}\r\n\t\t\tvar callback = function(answer) {\r\n\t\t\t\tif(pl.type.is_error(answer)) {\r\n\t\t\t\t\tvar occurs_check = thread.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\tvar state = new State();\r\n\t\t\t\t\tvar mgu = pl.unify(answer.args[0], catcher, occurs_check);\r\n\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\tstate.substitution = point.substitution.apply(mgu);\r\n\t\t\t\t\t\tstate.goal = point.goal.replace(recover).apply(mgu);\r\n\t\t\t\t\t\tstate.parent = point;\r\n\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(answer.args[0]);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(answer !== false && answer !== null) {\r\n\t\t\t\t\tvar state = answer === null ? [] : new State(\r\n\t\t\t\t\t\tpoint.goal.apply(answer).replace(null),\r\n\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t);\r\n\t\t\t\t\tthread.prepend([state, point]);\r\n\t\t\t\t} else if(answer === null) {\r\n\t\t\t\t\tthread.prepend([point]);\r\n\t\t\t\t\tif(thread.has_limit)\r\n\t\t\t\t\t\tthread.current_limit = 0;\r\n\t\t\t\t}\r\n\t\t\t\tthread.again(answer !== null);\r\n\t\t\t};\r\n\t\t\tnthread.answer(callback);\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t// call_cleanup/2\r\n\t\t\"call_cleanup/2\": function(thread, point, atom) {\r\n\t\t\tvar call = atom.args[0], cleanup = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(call) || pl.type.is_variable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(call)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", call, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", cleanup, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar nthread, callback;\r\n\t\t\t\tif(point.hasOwnProperty(\"setup_call_cleanup_thread\")) {\r\n\t\t\t\t\tnthread = point.setup_call_cleanup_thread;\r\n\t\t\t\t\tcallback = point.setup_call_cleanup_callback;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar goal = new Term(\"call\", [call]);\r\n\t\t\t\t\tnthread = new Thread(thread.session);\r\n\t\t\t\t\tnthread.add_goal(goal, true, point);\r\n\t\t\t\t\tcallback = function(answer) {\r\n\t\t\t\t\t\tif(answer === null) {\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal,\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tstate.setup_call_cleanup_thread = nthread;\r\n\t\t\t\t\t\t\tstate.setup_call_cleanup_callback = callback;\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else if(answer === false) {\r\n\t\t\t\t\t\t\tvar cleanup_and_fail = new Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup]),\r\n\t\t\t\t\t\t\t\tnew Term(\"fail\")\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(cleanup_and_fail),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else if(pl.type.is_error(answer)) {\r\n\t\t\t\t\t\t\tvar cleanup_and_throw = new Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup]),\r\n\t\t\t\t\t\t\t\tanswer\r\n\t\t\t\t\t\t\t]);\r\n\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\tpoint.goal.replace(cleanup_and_throw),\r\n\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif(nthread.points.length === 0) {\r\n\t\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"call\", [cleanup])\r\n\t\t\t\t\t\t\t\t\t).apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tthread.prepend([state]);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tvar state1 = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.apply(answer).replace(null),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution.apply(answer),\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tvar state2 = new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal,\r\n\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_thread = nthread;\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_callback = callback;\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_goal = cleanup.apply(answer);\r\n\t\t\t\t\t\t\t\tstate2.setup_call_cleanup_catch = cleanup;\r\n\t\t\t\t\t\t\t\tthread.prepend([state1, state2]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tnthread.answer(callback);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// setup_call_cleanup/3\r\n\t\t\"setup_call_cleanup/3\": function(thread, point, atom) {\r\n\t\t\tvar setup = atom.args[0], call = atom.args[1], cleanup = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(setup) || pl.type.is_variable(call) || pl.type.is_variable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(setup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", setup, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(call)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", call, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(cleanup)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", cleanup, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"once\", [setup]),\r\n\t\t\t\t\t\tnew Term(\"call_cleanup\", [call, cleanup])\r\n\t\t\t\t\t])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// UNIFICATION\r\n\t\t\r\n\t\t// =/2 (unification)\r\n\t\t\"=/2\": function( thread, point, atom ) {\r\n\t\t\tvar occurs_check = thread.get_flag( \"occurs_check\" ).indicator === \"true/0\";\r\n\t\t\tvar state = new State();\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], occurs_check );\r\n\t\t\tif( mgu !== null ) {\r\n\t\t\t\tstate.goal = point.goal.apply( mgu ).replace( null );\r\n\t\t\t\tstate.substitution = point.substitution.apply( mgu );\r\n\t\t\t\tstate.parent = point;\r\n\t\t\t\tthread.prepend( [state] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// unify_with_occurs_check/2\r\n\t\t\"unify_with_occurs_check/2\": function( thread, point, atom ) {\r\n\t\t\tvar state = new State();\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], true );\r\n\t\t\tif( mgu !== null ) {\r\n\t\t\t\tstate.goal = point.goal.apply( mgu ).replace( null );\r\n\t\t\t\tstate.substitution = point.substitution.apply( mgu );\r\n\t\t\t\tstate.parent = point;\r\n\t\t\t\tthread.prepend( [state] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// \\=/2\r\n\t\t\"\\\\=/2\": function( thread, point, atom ) {\r\n\t\t\tvar occurs_check = thread.get_flag( \"occurs_check\" ).indicator === \"true/0\";\r\n\t\t\tvar mgu = pl.unify( atom.args[0], atom.args[1], occurs_check );\r\n\t\t\tif( mgu === null ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// subsumes_term/2\r\n\t\t/*\r\n\t\tsubsumes_term(General, Specific) :-\r\n\t\t\t\\+ \\+ (\r\n\t\t\tterm_variables(Specific, Vars1),\r\n\t\t\tunify_with_occurs_check(General, Specific),\r\n\t\t\tterm_variables(Vars1, Vars2),\r\n\t\t\tVars1 == Vars2\r\n\t\t).\r\n\t\t*/\r\n\t\t\"subsumes_term/2\": function( thread, point, atom ) {\r\n\t\t\tvar general = atom.args[0], specific = atom.args[1];\r\n\t\t\tvar vars1 = thread.next_free_variable();\r\n\t\t\tvar vars2 = thread.next_free_variable();\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"\\\\+\", [\r\n\t\t\t\t\tnew Term(\"\\\\+\", [\r\n\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\"term_variables\", [specific, vars1]),\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"unify_with_occurs_check\", [general, specific]),\r\n\t\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\t\tnew Term(\"term_variables\", [vars1, vars2]),\r\n\t\t\t\t\t\t\t\t\tnew Term(\"==\", [vars1, vars2])\r\n\t\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t])\r\n\t\t\t\t\t])\r\n\t\t\t\t])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\t\t\r\n\t\t// ALL SOLUTIONS\r\n\r\n\t\t// findall/3\r\n\t\t\"findall/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tvar tail = new Term(\"[]\", []);\r\n\t\t\tthread.prepend([new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"findall\", [template, goal, instances, tail])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)]);\r\n\t\t},\r\n\r\n\t\t// findall/4\r\n\t\t\"findall/4\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2], tail = atom.args[3];\r\n\t\t\tvar proper_goal = goal;\r\n\t\t\tif(pl.type.is_term(goal) && goal.indicator === \":/2\")\r\n\t\t\t\tproper_goal = goal.args[1];\r\n\t\t\tif(pl.type.is_variable(proper_goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(proper_goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(tail) && !pl.type.is_list(tail)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", tail, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$findall\", [template, goal, instances, tail])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// bagof/3\r\n\t\t\"bagof/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error( pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$bagof\", [template, goal, instances])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// setof/3\r\n\t\t\"setof/3\": function(thread, point, atom) {\r\n\t\t\tvar template = atom.args[0], goal = atom.args[1], instances = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(goal)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", goal, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(instances) && !pl.type.is_list(instances)) {\r\n\t\t\t\tthread.throw_error( pl.error.type(\"list\", instances, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"$setof\", [template, goal, instances])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TERM CREATION AND DECOMPOSITION\r\n\t\t\r\n\t\t// functor/3\r\n\t\t\"functor/3\": function( thread, point, atom ) {\r\n\t\t\tvar subs;\r\n\t\t\tvar term = atom.args[0], name = atom.args[1], arity = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( term ) && (pl.type.is_variable( name ) || pl.type.is_variable( arity )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( arity ) && !pl.type.is_integer( arity ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[2], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( name ) && !pl.type.is_atomic( name ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) && !pl.type.is_atom( name ) && pl.type.is_integer( arity ) && arity.value > 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) && pl.type.is_integer( arity ) && arity.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[2], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( term ) ) {\r\n\t\t\t\tif( atom.args[2].value >= 0 ) {\r\n\t\t\t\t\tvar args = [];\r\n\t\t\t\t\tfor( var i = 0; i < arity.value; i++ )\r\n\t\t\t\t\t\targs.push( thread.next_free_variable() );\r\n\t\t\t\t\tvar functor = pl.type.is_number( name ) ? name : new Term( name.id, args );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [term, functor] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar id = pl.type.is_number( term ) ? term : new Term( term.id, [] );\r\n\t\t\t\tvar length = pl.type.is_number( term ) ? new Num( 0, false ) : new Num( term.args.length, false );\r\n\t\t\t\tvar goal = new Term( \",\", [new Term( \"=\", [id, name] ), new Term( \"=\", [length, arity] )] );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// arg/3\r\n\t\t\"arg/3\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) || pl.type.is_variable( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( atom.args[0].value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_compound( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"compound\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar n = atom.args[0].value;\r\n\t\t\t\tif( n > 0 && n <= atom.args[1].args.length ) {\r\n\t\t\t\t\tvar goal = new Term( \"=\", [atom.args[1].args[n-1], atom.args[2]] );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =../2 (univ)\r\n\t\t\"=../2\": function( thread, point, atom ) {\r\n\t\t\tvar list;\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) && (pl.type.is_variable( atom.args[1] )\r\n\t\t\t|| pl.type.is_non_empty_list( atom.args[1] ) && pl.type.is_variable( atom.args[1].args[0] )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_fully_list( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_variable( atom.args[0] ) && pl.type.is_empty_list( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"non_empty_list\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tif( pl.type.is_term( atom.args[0] ) && atom.args[0].args.length > 0 ) {\r\n\t\t\t\t\tlist = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = atom.args[0].args.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist = new Term( \".\", [atom.args[0].args[i], list] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlist = new Term( \".\", [new Term( atom.args[0].id ), list] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlist = new Term( \".\", [atom.args[0], new Term( \"[]\" )] );\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, atom.args[1]] ) ), point.substitution, point )] );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[1] ) ) {\r\n\t\t\t\tvar args = [];\r\n\t\t\t\tlist = atom.args[1].args[1];\r\n\t\t\t\twhile( list.indicator === \"./2\" ) {\r\n\t\t\t\t\targs.push( list.args[0] );\r\n\t\t\t\t\tlist = list.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( atom.args[0] ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( args.length === 0 && pl.type.is_compound( atom.args[1].args[0] ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atom.args[1].args[0], atom.indicator ) );\r\n\t\t\t\t} else if( args.length > 0 && (pl.type.is_compound( atom.args[1].args[0] ) || pl.type.is_number( atom.args[1].args[0] )) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[1].args[0], atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif( args.length === 0 ) {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom.args[1].args[0], atom.args[0]], point ) ), point.substitution, point )] );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( atom.args[1].args[0].id, args ), atom.args[0]] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// copy_term/2\r\n\t\t\"copy_term/2\": function(thread, point, atom) {\r\n\t\t\tvar original_term = atom.args[0], renamed_term = atom.args[1];\r\n\t\t\tthread.session.renamed_variables = {};\r\n\t\t\tvar new_term = original_term.rename(thread);\r\n\t\t\tthread.session.renamed_variables = {};\r\n\t\t\tthread.prepend([\r\n\t\t\t\tnew State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [renamed_term, new_term])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t},\r\n\t\t\r\n\t\t// term_variables/2\r\n\t\t\"term_variables/2\": [\r\n\t\t\tnew pl.type.Rule(new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Term\"),new pl.type.Var(\"Vars\")]), new pl.type.Term(\"term_variables\", [new pl.type.Var(\"Term\"),new pl.type.Var(\"Vars\"),new pl.type.Term(\"[]\", [])]))\r\n\t\t],\r\n\r\n\t\t// term_variables/3\r\n\t\t\"term_variables/3\": function(thread, point, atom) {\r\n\t\t\tvar term = atom.args[0], vars = atom.args[1], tail = atom.args[2];\r\n\t\t\tif( !pl.type.is_fully_list( vars ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", vars, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar list = arrayToList(map(nub(term.variables()), function(v) {\r\n\t\t\t\t\treturn new Var(v);\r\n\t\t\t\t}), tail);\r\n\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [vars, list])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// numbervars/3\r\n\t\t\"numbervars/3\": function(thread, point, atom) {\r\n\t\t\tvar term = atom.args[0], start = atom.args[1], end = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(start)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_integer(start)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", start, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(end) && !pl.type.is_integer(end)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", end, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar variables = nub(term.variables());\r\n\t\t\t\tvar value = start.value;\r\n\t\t\t\tvar unif_body = new Term(\"true\");\r\n\t\t\t\tfor(var i = 0; i < variables.length; i++) {\r\n\t\t\t\t\tunif_body = new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\"=\", [\r\n\t\t\t\t\t\t\tnew Var(variables[i]),\r\n\t\t\t\t\t\t\tnew Term(\"$VAR\", [new Num(value, false)])]),\r\n\t\t\t\t\t\t\tunif_body]);\r\n\t\t\t\t\tvalue++;\r\n\t\t\t\t}\r\n\t\t\t\tvar unif_end = new Term(\"=\", [end, new Num(value, false)]);\r\n\t\t\t\tif(pl.type.is_variable(end) || end.value === value) {\r\n\t\t\t\t\tthread.prepend([new State(\r\n\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [unif_body, unif_end])),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// CLAUSE RETRIEVAL AND INFORMATION\r\n\t\t\r\n\t\t// clause/2\r\n\t\t\"clause/2\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0], body = atom.args[1];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(head.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", head.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(body) && !pl.type.is_callable(body)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t} else if(head.indicator === \",/2\" || thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\tthread.throw_error(pl.error.permission(\"access\", \"private_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t} else if(pl.type.is_module(get_module) && get_module.rules[head.indicator]) {\r\n\t\t\t\tif(get_module.is_public_predicate(head.indicator)) {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tif(typeof get_module.rules[head.indicator] === \"function\") {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor(var i = 0; i < get_module.rules[head.indicator].length; i++) {\r\n\t\t\t\t\t\tvar rule = get_module.rules[head.indicator][i];\r\n\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\trule = rule.rename(thread);\r\n\t\t\t\t\t\tif(rule.body === null)\r\n\t\t\t\t\t\t\trule.body = new Term(\"true\");\r\n\t\t\t\t\t\tvar goal = new Term(\",\", [\r\n\t\t\t\t\t\t\tnew Term(\"=\", [rule.head, head]),\r\n\t\t\t\t\t\t\tnew Term(\"=\", [rule.body, body])\r\n\t\t\t\t\t\t]);\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(goal), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"access\", \"private_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_predicate/1\r\n\t\t\"current_predicate/1\": function(thread, point, atom) {\r\n\t\t\tvar indicator = atom.args[0];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(indicator) && indicator.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(indicator.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", indicator.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = indicator.args[0].id;\r\n\t\t\t\tindicator = indicator.args[1];\r\n\t\t\t} else {\r\n\t\t\t\tmodule_id = \"user\";\r\n\t\t\t}\r\n\t\t\tif(!pl.type.is_variable(indicator) && (!pl.type.is_compound(indicator) || indicator.indicator !== \"//2\")) {\r\n\t\t\t\tthread.throw_error(pl.error.type( \"predicate_indicator\", indicator, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable( indicator ) && !pl.type.is_variable(indicator.args[0]) && !pl.type.is_atom(indicator.args[0])) {\r\n\t\t\t\tthread.throw_error(pl.error.type( \"atom\", indicator.args[0], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(indicator) && !pl.type.is_variable(indicator.args[1]) && !pl.type.is_integer(indicator.args[1])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", indicator.args[1], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(indicator) && pl.type.is_integer(indicator.args[1]) && indicator.args[1].value < 0) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"not_less_than_zero\", indicator.args[1], atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\tfor(var prop in get_module.rules) {\r\n\t\t\t\t\t\tif(!get_module.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tvar predicate = str_indicator(prop);\r\n\t\t\t\t\t\tvar goal = new Term(\"=\", [predicate, indicator]);\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(goal), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// current_module/1\r\n\t\t\"current_module/1\": function(thread, point, atom) {\r\n\t\t\tvar module_id = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(module_id) && !pl.type.is_atom(module_id)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", module_id, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_variable(module_id)) {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tfor(var prop in thread.session.modules) {\r\n\t\t\t\t\t\tif(!thread.session.modules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tstates.push(new State(\r\n\t\t\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [module_id, new Term(prop)])),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(thread.session.modules.hasOwnProperty(module_id.id))\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// predicate_property/2\r\n\t\t\"predicate_property/2\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0], property = atom.args[1];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(head.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", head.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tif(!pl.type.is_variable(head) && !pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(property) && !pl.type.is_predicate_property(property)) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"predicate_property\", property, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar get_module = module_id ? thread.session.modules[module_id] : thread.session.modules.user;\r\n\t\t\t\tvar points = [];\r\n\t\t\t\t// all predicates\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\t// built-in predicates (built_in + static + native_code + meta_predicate?)\r\n\t\t\t\t\tif(!module_id) {\r\n\t\t\t\t\t\tfor(var prop in pl.builtin.rules) {\r\n\t\t\t\t\t\t\tif(!pl.builtin.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tvar indicator = str_indicator(prop);\r\n\t\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < indicator.args[1].value; i++)\r\n\t\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\t\tvar unif_head = new Term(indicator.args[0].id, args);\r\n\t\t\t\t\t\t\tvar current_properties = [\r\n\t\t\t\t\t\t\t\tnew Term(\"static\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"built_in\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"native_code\")\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t\tif(pl.builtin.meta_predicates.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\t\tpl.builtin.meta_predicates[prop]\r\n\t\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\t\t// all predicates, one property / all properties\r\n\t\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// user-defined predicates\r\n\t\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\t\tfor(var prop in get_module.rules) {\r\n\t\t\t\t\t\t\tif(!get_module.rules.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\tvar indicator = str_indicator(prop);\r\n\t\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < indicator.args[1].value; i++)\r\n\t\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\t\tvar unif_head = new Term(indicator.args[0].id, args);\r\n\t\t\t\t\t\t\tvar current_properties = [];\r\n\t\t\t\t\t\t\tif(thread.is_public_predicate(prop, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"dynamic\"));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"static\"));\r\n\t\t\t\t\t\t\tif(get_module.rules[prop] instanceof Function)\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"native_code\"));\r\n\t\t\t\t\t\t\tif(thread.is_multifile_predicate(prop, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"multifile\"));\r\n\t\t\t\t\t\t\tif(get_module.meta_predicates.hasOwnProperty(prop))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\t\tget_module.meta_predicates[prop]\r\n\t\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\t\t// all predicates, one property / all properties\r\n\t\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t// one predicate\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar builtin = !module_id && pl.type.is_builtin(head);\r\n\t\t\t\t\tvar predicate = builtin ? pl.builtin.rules[head.indicator] : get_module.rules[head.indicator];\r\n\t\t\t\t\tget_module = builtin ? pl.builtin : get_module;\r\n\t\t\t\t\tif(predicate) {\r\n\t\t\t\t\t\tvar current_properties;\r\n\t\t\t\t\t\tif(builtin) {\r\n\t\t\t\t\t\t\tcurrent_properties = [\r\n\t\t\t\t\t\t\t\tnew Term(\"static\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"built_in\"),\r\n\t\t\t\t\t\t\t\tnew Term(\"native_code\")\r\n\t\t\t\t\t\t\t];\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcurrent_properties = [];\r\n\t\t\t\t\t\t\tif(thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"dynamic\"));\r\n\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"static\"));\r\n\t\t\t\t\t\t\tif(predicate instanceof Function)\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"native_code\"));\r\n\t\t\t\t\t\t\tif(thread.is_multifile_predicate(head.indicator, module_id))\r\n\t\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"multifile\"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(get_module.meta_predicates.hasOwnProperty(head.indicator))\r\n\t\t\t\t\t\t\tcurrent_properties.push(new Term(\"meta_predicate\", [\r\n\t\t\t\t\t\t\t\tget_module.meta_predicates[head.indicator]\r\n\t\t\t\t\t\t\t]));\r\n\t\t\t\t\t\tvar args = [];\r\n\t\t\t\t\t\tfor(var i = 0; i < head.args.length; i++)\r\n\t\t\t\t\t\t\targs.push(thread.next_free_variable());\r\n\t\t\t\t\t\tvar unif_head = new Term(head.id, args);\r\n\t\t\t\t\t\t// one predicate, one property / all properties\r\n\t\t\t\t\t\tfor(var i = 0; i < current_properties.length; i++) {\r\n\t\t\t\t\t\t\tif(pl.type.is_variable(property) || current_properties[i].indicator === property.indicator) {\r\n\t\t\t\t\t\t\t\tpoints.push(new State(\r\n\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, unif_head]),\r\n\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [property, current_properties[i]])\r\n\t\t\t\t\t\t\t\t\t])),\r\n\t\t\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t\t\t));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(points);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// listing/0\r\n\t\t\"listing/0\": function( thread, point, atom ) {\r\n\t\t\tvar context_module = atom.context_module ? atom.context_module : \"user\";\r\n\t\t\tvar rules = {};\r\n\t\t\tif(pl.type.is_module(thread.session.modules[context_module])) {\r\n\t\t\t\trules = thread.session.modules[context_module].rules;\r\n\t\t\t}\r\n\t\t\tvar str = \"\";\r\n\t\t\tfor(var indicator in rules) {\r\n\t\t\t\tif(!rules.hasOwnProperty(indicator)) continue;\r\n\t\t\t\tvar predicate = rules[indicator];\r\n\t\t\t\tstr += \"% \" + indicator + \"\\n\";\r\n\t\t\t\tif(predicate instanceof Array) {\r\n\t\t\t\t\tfor(var i = 0; i < predicate.length; i++)\r\n\t\t\t\t\t\tstr += predicate[i].toString( {session: thread.session} ) + \"\\n\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstr += \"/*\\n\" + predicate.toString() + \"\\n*/\";\r\n\t\t\t\t}\r\n\t\t\t\tstr += \"\\n\";\r\n\t\t\t}\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"write\", [new Term(str, [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// listing/1\r\n\t\t\"listing/1\": function( thread, point, atom ) {\r\n\t\t\tvar indicator = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(indicator.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = indicator.args[0].id;\r\n\t\t\t\tindicator = indicator.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(indicator)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_predicate_indicator(indicator)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"predicate_indicator\", indicator, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar rules = {};\r\n\t\t\t\tif(pl.type.is_module(thread.session.modules[context_module])) {\r\n\t\t\t\t\trules = thread.session.modules[context_module].rules;\r\n\t\t\t\t}\r\n\t\t\t\tvar str = \"\";\r\n\t\t\t\tvar str_indicator = indicator.args[0].id + \"/\" + indicator.args[1].value;\r\n\t\t\t\tif(rules.hasOwnProperty(str_indicator)) {\r\n\t\t\t\t\tvar predicate = rules[str_indicator];\r\n\t\t\t\t\tif(predicate instanceof Array) {\r\n\t\t\t\t\t\tfor(var i = 0; i < predicate.length; i++)\r\n\t\t\t\t\t\t\tstr += predicate[i].toString( {session: thread.session} ) + \"\\n\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstr += \"/*\\n\" + predicate.toString() + \"\\n*/\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstr += \"\\n\";\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"write\", [new Term(str, [])])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// LIST OPERATIONS\r\n\r\n\t\t// sort/2\r\n\t\t\"sort/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar arr = [];\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tarr.push( pointer.args[0] );\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar sorted_arr = arr.sort( pl.compare );\r\n\t\t\t\t\tfor( var i = sorted_arr.length-1; i > 0; i-- ) {\r\n\t\t\t\t\t\tif( sorted_arr[i].equals(sorted_arr[i-1]) )\r\n\t\t\t\t\t\t\tsorted_arr.splice(i,1);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar sorted_list = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = sorted_arr.length-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tsorted_list = new Term( \".\", [sorted_arr[i], sorted_list] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [sorted_list, expected] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// keysort/2\r\n\t\t\"keysort/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( expected ) && !pl.type.is_fully_list( expected ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar arr = [];\r\n\t\t\t\tvar elem;\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\telem = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( elem ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_term( elem ) || elem.indicator !== \"-/2\" ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"pair\", elem, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telem.args[0].pair = elem.args[1];\r\n\t\t\t\t\tarr.push( elem.args[0] );\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_variable(expected)) {\r\n\t\t\t\t\t\tvar pointer = expected;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== \"-/2\")) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"pair\", head, atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", expected, atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar sorted_arr = arr.sort( pl.compare );\r\n\t\t\t\t\tvar sorted_list = new pl.type.Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = sorted_arr.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tsorted_list = new pl.type.Term( \".\", [new pl.type.Term( \"-\", [sorted_arr[i], sorted_arr[i].pair] ), sorted_list] );\r\n\t\t\t\t\t\tdelete sorted_arr[i].pair;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new pl.type.State( point.goal.replace( new pl.type.Term( \"=\", [sorted_list, expected] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// keygroup\r\n\t\t\"keygroup/2\": function(thread, point, atom) {\r\n\t\t\tvar list = atom.args[0], expected = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(list)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(expected) && !pl.type.is_fully_list(expected)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"list\", expected, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar keys = [];\r\n\t\t\t\tvar values = [];\r\n\t\t\t\tvar pointer = list\r\n\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\tvar elem = pointer.args[0];\r\n\t\t\t\t\tif(pl.type.is_variable(elem)) {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(!pl.type.is_term(elem) || elem.indicator !== \"-/2\") {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.type(\"pair\", elem, atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar key = elem.args[0], value = elem.args[1];\r\n\t\t\t\t\tvar index = -1;\r\n\t\t\t\t\tfor(var i = 0; i < keys.length; i++) {\r\n\t\t\t\t\t\tif(pl.compare(key, keys[i]) === 0) {\r\n\t\t\t\t\t\t\tindex = i;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(index === -1) {\r\n\t\t\t\t\t\tindex = keys.length;\r\n\t\t\t\t\t\tkeys.push(key);\r\n\t\t\t\t\t\tvalues.push([]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalues[index].push(value);\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(pointer)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"list\", list, atom.indicator));\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(!pl.type.is_variable(expected)) {\r\n\t\t\t\t\t\tvar pointer = expected;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tvar head = pointer.args[0];\r\n\t\t\t\t\t\t\tif(!pl.type.is_variable(head) && (!pl.type.is_term(head) || head.indicator !== \"-/2\")) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"pair\", head, atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(!pl.type.is_variable(pointer) && !pl.type.is_empty_list(pointer)) {\r\n\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"list\", expected, atom.indicator));\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tgroup = new Term(\"[]\", []);\r\n\t\t\t\t\tfor(var i = keys.length-1; i >= 0; i--)\r\n\t\t\t\t\t\tgroup = new Term(\".\", [new Term(\"-\", [keys[i], arrayToList(values[i])]), group]);\r\n\t\t\t\t\tthread.prepend([\r\n\t\t\t\t\t\tnew State(\r\n\t\t\t\t\t\t\tpoint.goal.replace(new pl.type.Term(\"=\", [expected, group])),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// CLAUSE CREATION AND DESTRUCTION\r\n\t\t\r\n\t\t// asserta/1\r\n\t\t\"asserta/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(clause) && clause.indicator === \":/2\") {\r\n\t\t\t\tmodule_id = clause.args[0].id;\r\n\t\t\t\tclause = clause.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, get_module;\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = body_conversion(clause.args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = null;\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else if(body !== null && !pl.type.is_callable(body)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t\t} else if((!pl.type.is_module(thread.session.modules[module_id])\r\n\t\t\t\t|| thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id])) {\r\n\t\t\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: thread.session});\r\n\t\t\t\t\t\tthread.session.modules[module_id] = get_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tget_module = thread.session.modules[module_id];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(get_module.rules[head.indicator] === undefined)\r\n\t\t\t\t\t\tget_module.rules[head.indicator] = [];\r\n\t\t\t\t\tget_module.public_predicates[head.indicator] = true;\r\n\t\t\t\t\tget_module.rules[head.indicator] = [new Rule(head, body, true)].concat(get_module.rules[head.indicator]);\r\n\t\t\t\t\tget_module.update_indices_predicate(head.indicator);\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// assertz/1\r\n\t\t\"assertz/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tvar module_id = \"user\";\r\n\t\t\tif(pl.type.is_term(clause) && clause.indicator === \":/2\") {\r\n\t\t\t\tmodule_id = clause.args[0].id;\r\n\t\t\t\tclause = clause.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, get_module;\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = body_conversion(clause.args[1]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = null;\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t} else if(body !== null && !pl.type.is_callable(body)) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type(\"callable\", body, atom.indicator));\r\n\t\t\t\t} else if((!pl.type.is_module(thread.session.modules[module_id])\r\n\t\t\t\t|| thread.is_public_predicate(head.indicator, module_id))\r\n\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\tif(!pl.type.is_module(thread.session.modules[module_id])) {\r\n\t\t\t\t\t\tget_module = new Module(module_id, {}, \"all\", {session: thread.session});\r\n\t\t\t\t\t\tthread.session.modules[module_id] = get_module;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tget_module = thread.session.modules[module_id];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(get_module.rules[head.indicator] === undefined)\r\n\t\t\t\t\t\tget_module.rules[head.indicator] = [];\r\n\t\t\t\t\tget_module.public_predicates[head.indicator] = true;\r\n\t\t\t\t\tget_module.rules[head.indicator].push(new Rule(head, body, true));\r\n\t\t\t\t\tget_module.update_indices_predicate(head.indicator);\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// retract/1\r\n\t\t\"retract/1\": function(thread, point, atom) {\r\n\t\t\tvar clause = atom.args[0];\r\n\t\t\tif(pl.type.is_variable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(clause)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", clause, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar head, body, module_atom, module_id;\r\n\t\t\t\tif(clause.indicator === \":/2\") {\r\n\t\t\t\t\tmodule_atom = clause.args[0];\r\n\t\t\t\t\tclause = clause.args[1];\r\n\t\t\t\t\tif(!pl.type.is_atom(module_atom)) {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", module_atom, atom.indicator));\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmodule_atom = new Term(\"user\");\r\n\t\t\t\t}\r\n\t\t\t\tif(clause.indicator === \":-/2\") {\r\n\t\t\t\t\thead = clause.args[0];\r\n\t\t\t\t\tbody = clause.args[1];\r\n\t\t\t\t} else {\r\n\t\t\t\t\thead = clause;\r\n\t\t\t\t\tbody = new Term(\"true\");\r\n\t\t\t\t}\r\n\t\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = module_atom.id;\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(!pl.type.is_module(get_module))\r\n\t\t\t\t\treturn;\r\n\t\t\t\tif(!point.retract) {\r\n\t\t\t\t\tif(thread.is_public_predicate(head.indicator, module_id)\r\n\t\t\t\t\t&& head.indicator !== \",/2\"\r\n\t\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\t\t\tif(get_module.rules[head.indicator] !== undefined) {\r\n\t\t\t\t\t\t\tvar states = [];\r\n\t\t\t\t\t\t\tif(typeof get_module.rules[head.indicator] === \"function\") {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfor(var i = 0; i < get_module.rules[head.indicator].length; i++) {\r\n\t\t\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\t\t\tvar orule = get_module.rules[head.indicator][i];\r\n\t\t\t\t\t\t\t\tvar rule = orule.rename(thread);\r\n\t\t\t\t\t\t\t\tif(rule.body === null)\r\n\t\t\t\t\t\t\t\t\trule.body = new Term(\"true\", []);\r\n\t\t\t\t\t\t\t\tvar occurs_check = thread.get_flag(\"occurs_check\").indicator === \"true/0\";\r\n\t\t\t\t\t\t\t\tvar mgu = pl.unify(new Term(\",\", [head, body]), new Term(\",\", [rule.head, rule.body]), occurs_check);\r\n\t\t\t\t\t\t\t\tif(mgu !== null) {\r\n\t\t\t\t\t\t\t\t\tvar state = new State(\r\n\t\t\t\t\t\t\t\t\t\tpoint.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\":\", [\r\n\t\t\t\t\t\t\t\t\t\t\t\tmodule_atom,\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"retract\", [new Term(\":-\", [head, body])]),\r\n\t\t\t\t\t\t\t\t\t\t\t]),\r\n\t\t\t\t\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [head, rule.head]),\r\n\t\t\t\t\t\t\t\t\t\t\t\tnew Term(\"=\", [body, rule.body])\r\n\t\t\t\t\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t\t\t\t\t])), point.substitution, point);\r\n\t\t\t\t\t\t\t\t\tstate.retract = orule;\r\n\t\t\t\t\t\t\t\t\tstates.push(state);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthread.prepend(states);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tretract(thread, point, head.indicator, point.retract, get_module);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// retractall/1\r\n\t\t\"retractall/1\": function(thread, point, atom) {\r\n\t\t\tvar head = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(pl.type.is_term(head) && head.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = head.args[0].id;\r\n\t\t\t\thead = head.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_callable(head)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"callable\", head, atom.indicator));\r\n\t\t\t} else if(!thread.is_public_predicate(head.indicator, context_module)\r\n\t\t\t|| head.indicator === \",/2\"\r\n\t\t\t|| thread.session.modules.system.rules.hasOwnProperty(head.indicator)) {\r\n\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", str_indicator(head.indicator), atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend([\r\n\t\t\t\t\tnew State(point.goal.replace(new Term(\",\", [\r\n\t\t\t\t\t\tnew Term(\":\", [\r\n\t\t\t\t\t\t\tnew Term(context_module),\r\n\t\t\t\t\t\t\tnew Term(\"retract\", [new pl.type.Term(\":-\", [head, new Var(\"_\")])])\r\n\t\t\t\t\t\t]),\r\n\t\t\t\t\t\tnew Term(\"fail\", [])\r\n\t\t\t\t\t])), point.substitution, point),\r\n\t\t\t\t\tnew State(point.goal.replace(null), point.substitution, point)\r\n\t\t\t\t]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// abolish/1\r\n\t\t\"abolish/1\": function(thread, point, atom) {\r\n\t\t\tvar predicate = atom.args[0];\r\n\t\t\tvar module_id;\r\n\t\t\tif(pl.type.is_term(predicate) && predicate.indicator === \":/2\") {\r\n\t\t\t\tif(!pl.type.is_atom(predicate.args[0])) {\r\n\t\t\t\t\tthread.throw_error(pl.error.type(\"module\", predicate.args[0], atom.indicator));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tmodule_id = predicate.args[0].id;\r\n\t\t\t\tpredicate = predicate.args[1];\r\n\t\t\t} else {\r\n\t\t\t\tmodule_id = \"user\";\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(predicate) || pl.type.is_term(predicate) && predicate.indicator === \"//2\"\r\n\t\t\t&& (pl.type.is_variable(predicate.args[0]) || pl.type.is_variable(predicate.args[1]))) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_term(predicate) || predicate.indicator !== \"//2\") {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"predicate_indicator\", predicate, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_atom(predicate.args[0])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", predicate.args[0], atom.indicator));\r\n\t\t\t} else if(!pl.type.is_integer(predicate.args[1])) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", predicate.args[1], atom.indicator));\r\n\t\t\t} else if(predicate.args[1].value < 0) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"not_less_than_zero\", predicate.args[1], atom.indicator));\r\n\t\t\t} else if(pl.type.is_number(thread.get_flag(\"max_arity\")) && predicate.args[1].value > thread.get_flag(\"max_arity\").value) {\r\n\t\t\t\tthread.throw_error(pl.error.representation(\"max_arity\", atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar get_module = thread.session.modules[module_id];\r\n\t\t\t\tif(pl.type.is_module(get_module)) {\r\n\t\t\t\t\tvar indicator = predicate.args[0].id + \"/\" + predicate.args[1].value;\r\n\t\t\t\t\tif(thread.is_public_predicate(indicator, module_id)\r\n\t\t\t\t\t&& indicator !== \",/2\"\r\n\t\t\t\t\t&& !thread.session.modules.system.rules.hasOwnProperty(indicator)) {\r\n\t\t\t\t\t\tdelete get_module.rules[indicator];\r\n\t\t\t\t\t\tdelete get_module.indexed_clauses[indicator];\r\n\t\t\t\t\t\tdelete get_module.non_indexable_clauses[indicator];\r\n\t\t\t\t\t\tdelete get_module.public_predicates[indicator];\r\n\t\t\t\t\t\tdelete get_module.multifile_predicates[indicator];\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.throw_error(pl.error.permission(\"modify\", \"static_procedure\", atom.args[0], atom.indicator));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.success(point);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ATOM PROCESSING\r\n\t\t\r\n\t\t// atom_length/2\r\n\t\t\"atom_length/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( atom.args[0] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom.args[0], atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom.args[1] ) && !pl.type.is_integer( atom.args[1] ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( atom.args[1] ) && atom.args[1].value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", atom.args[1], atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar length = new Num( stringLength(atom.args[0].id), false );\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [length, atom.args[1]] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_concat/3\r\n\t\t\"atom_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar str, goal, start = atom.args[0], end = atom.args[1], whole = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( whole ) && (pl.type.is_variable( start ) || pl.type.is_variable( end )) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( start ) && !pl.type.is_atom( start ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", start, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( end ) && !pl.type.is_atom( end ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", end, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( whole ) && !pl.type.is_atom( whole ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", whole, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar v1 = pl.type.is_variable( start );\r\n\t\t\t\tvar v2 = pl.type.is_variable( end );\r\n\t\t\t\t//var v3 = pl.type.is_variable( whole );\r\n\t\t\t\tif( !v1 && !v2 ) {\r\n\t\t\t\t\tgoal = new Term( \"=\", [whole, new Term( start.id + end.id )] );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t} else if( v1 && !v2 ) {\r\n\t\t\t\t\tstr = whole.id.substr( 0, whole.id.length - end.id.length );\r\n\t\t\t\t\tif( str + end.id === whole.id ) {\r\n\t\t\t\t\t\tgoal = new Term( \"=\", [start, new Term( str )] );\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if( v2 && !v1 ) {\r\n\t\t\t\t\tstr = whole.id.substr( start.id.length );\r\n\t\t\t\t\tif( start.id + str === whole.id ) {\r\n\t\t\t\t\t\tgoal = new Term( \"=\", [end, new Term( str )] );\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( goal ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar states = [];\r\n\t\t\t\t\tfor( var i = 0; i <= whole.id.length; i++ ) {\r\n\t\t\t\t\t\tvar atom1 = new Term( whole.id.substr( 0, i ) );\r\n\t\t\t\t\t\tvar atom2 = new Term( whole.id.substr( i ) );\r\n\t\t\t\t\t\tgoal = new Term( \",\", [new Term( \"=\", [atom1, start] ), new Term( \"=\", [atom2, end] )] );\r\n\t\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( states );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// sub_atom/5\r\n\t\t\"sub_atom/5\": function( thread, point, atom ) {\r\n\t\t\tvar i, atom1 = atom.args[0], before = atom.args[1], length = atom.args[2], after = atom.args[3], subatom = atom.args[4];\r\n\t\t\tif( pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( before ) && !pl.type.is_integer( before ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", before, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( length ) && !pl.type.is_integer( length ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", length, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( after ) && !pl.type.is_integer( after ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", after, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( before ) && before.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", before, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( length ) && length.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", length, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( after ) && after.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", after, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( subatom ) && !pl.type.is_atom( subatom ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", subatom, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar bs = [], ls = [], as = [];\r\n\t\t\t\tif( pl.type.is_variable( before ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tbs.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tbs.push( before.value );\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( length ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tls.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tls.push( length.value );\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_variable( after ) ) {\r\n\t\t\t\t\tfor( i = 0; i <= atom1.id.length; i++ ) {\r\n\t\t\t\t\t\tas.push( i );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tas.push( after.value );\r\n\t\t\t\t}\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor( var _i in bs ) {\r\n\t\t\t\t\tif(!bs.hasOwnProperty(_i)) continue;\r\n\t\t\t\t\ti = bs[_i];\r\n\t\t\t\t\tfor( var _j in ls ) {\r\n\t\t\t\t\t\tif(!ls.hasOwnProperty(_j)) continue;\r\n\t\t\t\t\t\tvar j = ls[_j];\r\n\t\t\t\t\t\tvar k = atom1.id.length - i - j;\r\n\t\t\t\t\t\tif( indexOf( as, k ) !== -1 ) {\r\n\t\t\t\t\t\tif( i+j+k === atom1.id.length ) {\r\n\t\t\t\t\t\t\t\tvar str = atom1.id.substr( i, j );\r\n\t\t\t\t\t\t\t\tif( atom1.id === atom1.id.substr( 0, i ) + str + atom1.id.substr( i+j, k ) ) {\r\n\t\t\t\t\t\t\t\t\tvar pl1 = new Term( \"=\", [new Term( str ), subatom] );\r\n\t\t\t\t\t\t\t\t\tvar pl2 = new Term( \"=\", [before, new Num( i )] );\r\n\t\t\t\t\t\t\t\t\tvar pl3 = new Term( \"=\", [length, new Num( j )] );\r\n\t\t\t\t\t\t\t\t\tvar pl4 = new Term( \"=\", [after, new Num( k )] );\r\n\t\t\t\t\t\t\t\t\tvar goal = new Term( \",\", [ new Term( \",\", [ new Term( \",\", [pl2, pl3] ), pl4] ), pl1] );\r\n\t\t\t\t\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_chars/2\r\n\t\t\"atom_chars/2\": function( thread, point, atom ) {\r\n\t\t\tvar atom1 = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( !pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\t\tif(!pl.type.is_variable(list)) {\r\n\t\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tif(!pl.type.is_character(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"character\", pointer.args[0], atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar list1 = new Term( \"[]\" );\r\n\t\t\t\t\tvar unilen = stringLength(atom1.id);\r\n\t\t\t\t\tfor( var i = unilen-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist1 = new Term( \".\", [new Term( atom1.id.charAt( i ) ), list1] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list1] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\t\t\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar v = pl.type.is_variable( atom1 );\r\n\t\t\t\t\tvar str = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) && v ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"character\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += pointer.args[0].id;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) && v ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( str ), atom1] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom_codes/2\r\n\t\t\"atom_codes/2\": function( thread, point, atom ) {\r\n\t\t\tvar atom1 = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( atom1 ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( atom1 ) && !pl.type.is_atom( atom1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", atom1, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( !pl.type.is_variable( atom1 ) ) {\r\n\t\t\t\t\tif(!pl.type.is_variable(list)) {\r\n\t\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\t\twhile(pl.type.is_term(pointer) && pointer.indicator === \"./2\") {\r\n\t\t\t\t\t\t\tif(!pl.type.is_character_code(pointer.args[0]) && !pl.type.is_variable(pointer.args[0])) {\r\n\t\t\t\t\t\t\t\tthread.throw_error(pl.error.type(\"integer\", pointer.args[0], atom.indicator));\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar list1 = new Term( \"[]\" );\r\n\t\t\t\t\tvar unilen = stringLength(atom1.id);\r\n\t\t\t\t\tfor( var i = unilen-1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist1 = new Term( \".\", [new Num( codePointAt(atom1.id,i), false ), list1] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list1] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\t\t\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar v = pl.type.is_variable( atom1 );\r\n\t\t\t\t\tvar str = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character_code( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) && v ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += fromCodePoint( pointer.args[0].value );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) && v ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t} else if( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [new Term( str ), atom1] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// char_code/2\r\n\t\t\"char_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar char = atom.args[0], code = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( char ) && pl.type.is_variable( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( code ) ) {\r\n\t\t\t\t\tvar code1 = new Num( codePointAt(char.id,0 ), false );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [code1, code] ) ), point.substitution, point )] );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar char1 = new Term( fromCodePoint( code.value ) );\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [char1, char] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number_chars/2\r\n\t\t\"number_chars/2\": function( thread, point, atom ) {\r\n\t\t\tvar str, num = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", num, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar isvar = pl.type.is_variable( num );\r\n\t\t\t\tif( !pl.type.is_variable( list ) ) {\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar total = true;\r\n\t\t\t\t\tstr = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\ttotal = false;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.type( \"character\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += pointer.args[0].id;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal = total && pl.type.is_empty_list( pointer );\r\n\t\t\t\t\tif( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !total && isvar ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( total ) {\r\n\t\t\t\t\t\tif( pl.type.is_variable( pointer ) && isvar ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar expr = thread.parse( str );\r\n\t\t\t\t\t\t\tvar num2 = expr.value;\r\n\t\t\t\t\t\t\tif( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax_by_predicate( \"parseable_number\", atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [num, num2] ) ), point.substitution, point )] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( !isvar ) {\r\n\t\t\t\t\tstr = num.toString();\r\n\t\t\t\t\tvar list2 = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = str.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist2 = new Term( \".\", [ new Term( str.charAt( i ) ), list2 ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list2] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number_codes/2\r\n\t\t\"number_codes/2\": function( thread, point, atom ) {\r\n\t\t\tvar str, num = atom.args[0], list = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( num ) && pl.type.is_variable( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( num ) && !pl.type.is_number( num ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", num, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar isvar = pl.type.is_variable( num );\r\n\t\t\t\tif( !pl.type.is_variable( list ) ) {\t\r\n\t\t\t\t\tvar pointer = list;\r\n\t\t\t\t\tvar total = true;\r\n\t\t\t\t\tstr = \"\";\r\n\t\t\t\t\twhile( pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\t\tif( !pl.type.is_character_code( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\ttotal = false;\r\n\t\t\t\t\t\t\t} else if( !pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tstr += fromCodePoint( pointer.args[0].value );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttotal = total && pl.type.is_empty_list( pointer );\r\n\t\t\t\t\tif( !pl.type.is_empty_list( pointer ) && !pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !total && isvar ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( total ) {\r\n\t\t\t\t\t\tif( pl.type.is_variable( pointer ) && isvar ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar expr = thread.parse( str );\r\n\t\t\t\t\t\t\tvar num2 = expr.value;\r\n\t\t\t\t\t\t\tif( !pl.type.is_number( num2 ) || expr.tokens[expr.tokens.length-1].space ) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax_by_predicate( \"parseable_number\", atom.indicator ) );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [num, num2] ) ), point.substitution, point )] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( !isvar ) {\r\n\t\t\t\t\tstr = num.toString();\r\n\t\t\t\t\tvar list2 = new Term( \"[]\" );\r\n\t\t\t\t\tfor( var i = str.length - 1; i >= 0; i-- ) {\r\n\t\t\t\t\t\tlist2 = new Term( \".\", [ new Num( codePointAt(str,i), false ), list2 ] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [list, list2] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// upcase_atom/2\r\n\t\t\"upcase_atom/2\": function( thread, point, atom ) {\r\n\t\t\tvar original = atom.args[0], upcase = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", original, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( upcase ) && !pl.type.is_atom( upcase ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", upcase, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [upcase, new Term( original.id.toUpperCase(), [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// downcase_atom/2\r\n\t\t\"downcase_atom/2\": function( thread, point, atom ) {\r\n\t\t\tvar original = atom.args[0], downcase = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( original ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", original, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( downcase ) && !pl.type.is_atom( downcase ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", downcase, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [downcase, new Term( original.id.toLowerCase(), [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atomic_concat/3\r\n\t\t\"atomic_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar atomic1 = atom.args[0], atomic2 = atom.args[1], concat = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( atomic1 ) || pl.type.is_variable( atomic2 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atomic( atomic1 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atomic1, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atomic( atomic2 ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", atomic2, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", concat, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar id = \"\";\r\n\t\t\t\tif( pl.type.is_atom( atomic1 ) ) {\r\n\t\t\t\t\tid += atomic1.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tid += \"\" + atomic1.value;\r\n\t\t\t\t}\r\n\t\t\t\tif( pl.type.is_atom( atomic2 ) ) {\r\n\t\t\t\t\tid += atomic2.id;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tid += \"\" + atomic2.value;\r\n\t\t\t\t}\r\n\t\t\t\tvar atom = new Term(id, []);\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom, concat] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// atomic_list_concat/2\r\n\t\t\"atomic_list_concat/2\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], concat = atom.args[1];\r\n\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"atomic_list_concat\", [list, new Term( \"\", [] ), concat] ) ), point.substitution, point )] );\r\n\t\t},\r\n\t\t\r\n\t\t// atomic_list_concat/3\r\n\t\t\"atomic_list_concat/3\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0], separator = atom.args[1], concat = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( separator ) || pl.type.is_variable( list ) && pl.type.is_variable( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( list ) && !pl.type.is_list( list ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( separator ) && !pl.type.is_number( separator ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", separator, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( concat ) && !pl.type.is_atom( concat ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", concat, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar id = \"\";\r\n\t\t\t\tvar pointer = list;\r\n\t\t\t\twhile( pl.type.is_term( pointer ) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_atom( pointer.args[0] ) && !pl.type.is_number( pointer.args[0] ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"atomic\", pointer.args[0], atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( id !== \"\" )\r\n\t\t\t\t\t\tid += separator.id;\r\n\t\t\t\t\tif( pl.type.is_atom( pointer.args[0] ) )\r\n\t\t\t\t\t\tid += pointer.args[0].id;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tid += \"\" + pointer.args[0].value;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tid = new Term( id, [] );\r\n\t\t\t\tif( pl.type.is_variable( pointer ) ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t} else if( !pl.type.is_term( pointer ) || pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", list, atom.indicator ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [id, concat] ) ), point.substitution, point )] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TERM COMPARISON\r\n\t\t\r\n\t\t\"@=/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.compare( atom.args[0], atom.args[1] ) > 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t\"@>=/2\": function( thread, point, atom ) {\r\n\t\t\tif( pl.compare( atom.args[0], atom.args[1] ) >= 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t\"compare/3\": function( thread, point, atom ) {\r\n\t\t\tvar order = atom.args[0], left = atom.args[1], right = atom.args[2];\r\n\t\t\tif( !pl.type.is_variable( order ) && !pl.type.is_atom( order ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", order, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_atom( order ) && [\"<\", \">\", \"=\"].indexOf( order.id ) === -1 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"order\", order, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar compare = pl.compare( left, right );\r\n\t\t\t\tcompare = compare === 0 ? \"=\" : (compare === -1 ? \"<\" : \">\");\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [order, new Term( compare, [] )] ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// EVALUATION\r\n\t\t\r\n\t\t// is/2\r\n\t\t\"is/2\": function( thread, point, atom ) {\r\n\t\t\tvar op = atom.args[1].interpret( thread );\r\n\t\t\tif( !pl.type.is_number( op ) ) {\r\n\t\t\t\tthread.throw_error( op );\r\n\t\t\t} else {\r\n\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [atom.args[0], op], atom.indicator ) ), point.substitution, point )] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// between/3\r\n\t\t\"between/3\": function( thread, point, atom ) {\r\n\t\t\tvar lower = atom.args[0], upper = atom.args[1], bet = atom.args[2];\r\n\t\t\tif( pl.type.is_variable( lower ) || pl.type.is_variable( upper ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( lower ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", lower, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( upper ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", upper, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( bet ) && !pl.type.is_integer( bet ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", bet, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( bet ) ) {\r\n\t\t\t\t\tif( lower.value <= upper.value ) {\r\n\t\t\t\t\t\tvar states = [new State( point.goal.replace( new Term( \"=\", [bet, lower] ) ), point.substitution, point )];\r\n\t\t\t\t\t\tstates.push( new State( point.goal.replace( new Term( \"between\", [new Num( lower.value+1, false ), upper, bet] ) ), point.substitution, point ) );\r\n\t\t\t\t\t\tthread.prepend( states );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if( lower.value <= bet.value && upper.value >= bet.value ) {\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// succ/2\r\n\t\t\"succ/2\": function( thread, point, atom ) {\r\n\t\t\tvar n = atom.args[0], m = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( n ) && pl.type.is_variable( m ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( n ) && !pl.type.is_integer( n ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", n, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( m ) && !pl.type.is_integer( m ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", m, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( n ) && n.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", n, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( m ) && m.value < 0 ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"not_less_than_zero\", m, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( pl.type.is_variable( m ) || m.value > 0 ) {\r\n\t\t\t\t\tif( pl.type.is_variable( n ) ) {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [n, new Num( m.value-1, false )] ) ), point.substitution, point )] );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( new Term( \"=\", [m, new Num( n.value+1, false )] ) ), point.substitution, point )] );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =:=/2\r\n\t\t\"=:=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp === 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// =\\=/2\r\n\t\t\"=\\\\=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp !== 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// /2\r\n\t\t\">/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp > 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// >=/2\r\n\t\t\">=/2\": function( thread, point, atom ) {\r\n\t\t\tvar cmp = pl.arithmetic_compare( thread, atom.args[0], atom.args[1] );\r\n\t\t\tif( pl.type.is_term( cmp ) ) {\r\n\t\t\t\tthread.throw_error( cmp );\r\n\t\t\t} else if( cmp >= 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// TYPE TEST\r\n\t\t\r\n\t\t// var/1\r\n\t\t\"var/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atom/1\r\n\t\t\"atom/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_atom( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// atomic/1\r\n\t\t\"atomic/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_atomic( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// compound/1\r\n\t\t\"compound/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_compound( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// integer/1\r\n\t\t\"integer/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_integer( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// float/1\r\n\t\t\"float/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_float( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// number/1\r\n\t\t\"number/1\": function( thread, point, atom ) {\r\n\t\t\tif( pl.type.is_number( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// nonvar/1\r\n\t\t\"nonvar/1\": function( thread, point, atom ) {\r\n\t\t\tif( !pl.type.is_variable( atom.args[0] ) ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// ground/1\r\n\t\t\"ground/1\": function( thread, point, atom ) {\r\n\t\t\tif( atom.variables().length === 0 ) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// acyclic_term/1\r\n\t\t\"acyclic_term/1\": function( thread, point, atom ) {\r\n\t\t\tvar test = point.substitution.apply( point.substitution );\r\n\t\t\tvar variables = atom.args[0].variables();\r\n\t\t\tfor( var i = 0; i < variables.length; i++ )\r\n\t\t\t\tif( point.substitution.links[variables[i]] !== undefined && !point.substitution.links[variables[i]].equals( test.links[variables[i]] ) )\r\n\t\t\t\t\treturn;\r\n\t\t\tthread.success( point );\r\n\t\t},\r\n\t\t\r\n\t\t// callable/1\r\n\t\t\"callable/1\": function( thread, point, atom ) {\r\n\t\t\tvar callable = atom.args[0];\r\n\t\t\tif(pl.type.is_term(callable)) {\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// is_list/1\r\n\t\t\"is_list/1\": function( thread, point, atom ) {\r\n\t\t\tvar list = atom.args[0];\r\n\t\t\twhile( pl.type.is_term( list ) && list.indicator === \"./2\" )\r\n\t\t\t\tlist = list.args[1];\r\n\t\t\tif( pl.type.is_term( list ) && list.indicator === \"[]/0\" )\r\n\t\t\t\tthread.success( point );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// STREAM SELECTION AND CONTROL\r\n\r\n\t\t// current_input/1\r\n\t\t\"current_input/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(stream)\r\n\t\t\t&& (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias)\r\n\t\t\t\t\t\t\t\t\t\t && !thread.get_stream_by_alias(stream.id))\r\n\t\t\t&& (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) {\r\n\t\t\t\tthread.throw_error( pl.error.domain(\"stream\", stream, atom.indicator) );\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_atom(stream))\r\n\t\t\t\t\tstream = thread.get_stream_by_alias(stream.id);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [stream, thread.get_current_input()])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// current_output/1\r\n\t\t\"current_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(stream)\r\n\t\t\t&& (!pl.type.is_stream(stream) || !thread.get_stream_by_alias(stream.alias)\r\n\t\t\t\t\t\t\t\t\t\t && !thread.get_stream_by_alias(stream.id))\r\n\t\t\t&& (!pl.type.is_atom(stream) || !thread.get_stream_by_alias(stream.id))) {\r\n\t\t\t\tthread.throw_error( pl.error.domain(\"stream\", stream, atom.indicator) );\r\n\t\t\t} else {\r\n\t\t\t\tif(pl.type.is_atom(stream))\r\n\t\t\t\t\tstream = thread.get_stream_by_alias( stream.id );\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(new Term(\"=\", [stream, thread.get_current_output()])),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint)\r\n\t\t\t\t] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_input/1\r\n\t\t\"set_input/1\": function( thread, point, atom ) {\r\n\t\t\tvar input = atom.args[0];\r\n\t\t\tvar stream = pl.type.is_stream( input ) ? input : thread.get_stream_by_alias( input.id );\r\n\t\t\tif( pl.type.is_variable( input ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( input ) && !pl.type.is_atom( input ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", input, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(input.alias)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& !thread.get_stream_by_alias(input.id) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", input, atom.indicator ) );\r\n\t\t\t} else if( stream.output === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", input, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.set_current_input( stream );\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_output/1\r\n\t\t\"set_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar output = atom.args[0];\r\n\t\t\tvar stream = pl.type.is_stream( output ) ? output : thread.get_stream_by_alias( output.id );\r\n\t\t\tif( pl.type.is_variable( output ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( output ) && !pl.type.is_atom( output ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", output, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) || !thread.get_stream_by_alias(output.alias)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t&& !thread.get_stream_by_alias(output.id) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", output, atom.indicator ) );\r\n\t\t\t} else if( stream.input === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", output, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.set_current_output( stream );\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// open/3\r\n\t\t\"open/3\": function( thread, point, atom ) {\r\n\t\t\tvar dest = atom.args[0], mode = atom.args[1], stream = atom.args[2];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"open\", [dest, mode, stream, new Term(\"[]\", [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// open/4\r\n\t\t\"open/4\": function( thread, point, atom ) {\r\n\t\t\tvar dest = atom.args[0], mode = atom.args[1], stream = atom.args[2], options = atom.args[3];\r\n\t\t\tif( pl.type.is_variable( dest ) || pl.type.is_variable( mode ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( mode ) && !pl.type.is_atom( mode ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", mode, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.uninstantiation( stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( dest ) && !pl.type.is_streamable( dest ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_io_mode( mode ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"io_mode\", mode, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_stream_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"stream_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0].id;\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar alias = obj_options[\"alias\"];\r\n\t\t\t\t\tif( alias && thread.get_stream_by_alias(alias) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"open\", \"source_sink\", new Term(\"alias\", [new Term(alias, [])]), atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( !obj_options[\"type\"] )\r\n\t\t\t\t\t\tobj_options[\"type\"] = \"text\";\r\n\t\t\t\t\tvar file;\r\n\t\t\t\t\tif( pl.type.is_atom( dest ) )\r\n\t\t\t\t\t\tfile = thread.file_system_open( dest.id, obj_options[\"type\"], mode.id );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tfile = dest.stream( obj_options[\"type\"], mode.id );\r\n\t\t\t\t\tif( file === false ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.permission( \"open\", \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( file === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.existence( \"source_sink\", dest, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar newstream = new Stream(\r\n\t\t\t\t\t\tfile, mode.id,\r\n\t\t\t\t\t\tobj_options[\"alias\"],\r\n\t\t\t\t\t\tobj_options[\"type\"],\r\n\t\t\t\t\t\tobj_options[\"reposition\"] === \"true\",\r\n\t\t\t\t\t\tobj_options[\"eof_action\"] );\r\n\t\t\t\t\tif( alias )\r\n\t\t\t\t\t\tthread.session.streams[alias] = newstream;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.session.streams[newstream.id] = newstream;\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [stream, newstream] ) ),\r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// close/1\r\n\t\t\"close/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace(new Term(\"close\", [stream, new Term(\"[]\", [])])),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// close/2\r\n\t\t\"close/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], options = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_close_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"close_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0].id === \"true\";\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif(stream2 === thread.session.standard_input || stream2 === thread.session.standard_output || stream2 === thread.session.standard_error) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( stream2 === thread.session.current_input ) {\r\n\t\t\t\t\t\tthread.session.current_input = thread.session.standard_input;\r\n\t\t\t\t\t} else if( stream2 === thread.session.current_output ) {\r\n\t\t\t\t\t\tthread.session.current_output = thread.session.standard_output;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif( stream2.alias !== null && stream2.alias !== undefined )\r\n\t\t\t\t\t\tdelete thread.session.streams[stream2.alias];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tdelete thread.session.streams[stream2.id];\r\n\t\t\t\t\tif( stream2.output )\r\n\t\t\t\t\t\tstream2.stream.flush();\r\n\t\t\t\t\tvar closed = stream2.stream.close();\r\n\t\t\t\t\tstream2.stream = null;\r\n\t\t\t\t\tif( obj_options.force === true || closed === true ) {\r\n\t\t\t\t\t\tthread.success( point );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// flush_output/0\r\n\t\t\"flush_output/0\": [\r\n\t\t\tnew Rule(new Term(\"flush_output\", []), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"flush_output\", [new Var(\"S\")])]))\r\n\t\t],\r\n\r\n\t\t// flush_output/1\r\n\t\t\"flush_output/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input === true ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tstream2.stream.flush();\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// stream_property/2\r\n\t\t\"stream_property/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], property = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && (!pl.type.is_stream( stream2 ) || stream2.stream === null) ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( property ) && !pl.type.is_stream_property( property ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_property\", property, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar streams = [];\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar propvar = pl.type.is_variable(property);\r\n\t\t\t\tif( !pl.type.is_variable( stream ) )\r\n\t\t\t\t\tstreams.push( stream2 );\r\n\t\t\t\telse\r\n\t\t\t\t\tfor( var key in thread.session.streams )\r\n\t\t\t\t\t\tstreams.push( thread.session.streams[key] );\r\n\t\t\t\tfor( var i = 0; i < streams.length; i++ ) {\r\n\t\t\t\t\tvar properties = [];\r\n\t\t\t\t\t// file_name/1\r\n\t\t\t\t\tif( (propvar || property.indicator === \"file_name/1\") && streams[i].filename )\r\n\t\t\t\t\t\tproperties.push( new Term( \"file_name\", [new Term(streams[i].file_name, [])] ) );\r\n\t\t\t\t\t// mode/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"mode/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"mode\", [new Term(streams[i].mode, [])] ) );\r\n\t\t\t\t\t// input/0 or output/0\r\n\t\t\t\t\tif(propvar || property.indicator === \"input/0\" || property.indicator === \"output/0\")\r\n\t\t\t\t\t\tproperties.push( new Term( streams[i].input ? \"input\" : \"output\", [] ) );\r\n\t\t\t\t\t// alias/1\r\n\t\t\t\t\tif( (propvar || property.indicator === \"alias/1\") && streams[i].alias )\r\n\t\t\t\t\t\tproperties.push( new Term( \"alias\", [new Term(streams[i].alias, [])] ) );\r\n\t\t\t\t\t// position/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"position/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"position\", [\r\n\t\t\t\t\t\t\tnew Term(\"position\", [\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].char_count, false),\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].line_count, false),\r\n\t\t\t\t\t\t\t\tnew Num(streams[i].line_position, false)\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t] ) );\r\n\t\t\t\t\t// end_of_stream/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"end_of_stream/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"end_of_stream\", [new Term(\r\n\t\t\t\t\t\t\tstreams[i].position === \"end_of_stream\" || streams[i].stream.eof && streams[i].stream.eof(streams[i].position) ? \"at\" :\r\n\t\t\t\t\t\t\tstreams[i].position === \"past_end_of_stream\" ? \"past\" :\r\n\t\t\t\t\t\t\t\"not\", [])] ) );\r\n\t\t\t\t\t// eof_action/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"eof_action/1\")\t\r\n\t\t\t\t\t\tproperties.push( new Term( \"eof_action\", [new Term(streams[i].eof_action, [])] ) );\r\n\t\t\t\t\t// reposition/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"reposition/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"reposition\", [new Term(streams[i].reposition ? \"true\" : \"false\", [])] ) );\r\n\t\t\t\t\t// type/1\r\n\t\t\t\t\tif(propvar || property.indicator === \"type/1\")\r\n\t\t\t\t\t\tproperties.push( new Term( \"type\", [new Term(streams[i].type, [])] ) );\r\n\t\t\t\t\tfor( var j = 0; j < properties.length; j++ ) {\r\n\t\t\t\t\t\tstates.push( new State(\r\n\t\t\t\t\t\t\tpoint.goal.replace( new Term( \",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [pl.type.is_variable( stream ) ? stream : stream2, streams[i]]),\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [property, properties[j]])]) ),\r\n\t\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\t\tpoint\r\n\t\t\t\t\t\t) );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// stream_position_data\r\n\t\t\"stream_position_data/3\": function(thread, point, atom) {\r\n\t\t\tvar field = atom.args[0], position = atom.args[1], value = atom.args[2];\r\n\t\t\tif(pl.type.is_variable(position)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_term(position) || position.indicator !== \"position/3\") {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"stream_position\", position, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(field) && !pl.type.is_atom(field)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"atom\", field, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(value) && !pl.type.is_integer(value)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"integer\", value, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar fields = [\"char_count\", \"line_count\", \"line_position\"];\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tvar data_pos = {char_count: 0, line_count: 1, line_position: 2};\r\n\t\t\t\tif(pl.type.is_variable(field)) {\r\n\t\t\t\t\tfor(var i = 0; i < fields.length; i++) {\r\n\t\t\t\t\t\tstates.push(new State(point.goal.replace(\r\n\t\t\t\t\t\t\tnew Term(\",\", [\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [new Term(fields[i]), field]),\r\n\t\t\t\t\t\t\t\tnew Term(\"=\", [value, position.args[data_pos[fields[i]]]])\r\n\t\t\t\t\t\t\t])\r\n\t\t\t\t\t\t), point.substitution, point));\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if(data_pos.hasOwnProperty(field.id)) {\r\n\t\t\t\t\tstates.push(new State(point.goal.replace(\r\n\t\t\t\t\t\tnew Term(\"=\", [value, position.args[data_pos[field.id]]])\r\n\t\t\t\t\t), point.substitution, point));\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(states);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// at_end_of_stream/0\r\n\t\t\"at_end_of_stream/0\": [\r\n\t\t\tnew Rule(new Term(\"at_end_of_stream\", []), new pl.type.Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\",\", [new Term(\"stream_property\", [new Var(\"S\"),new Term(\"end_of_stream\", [new Var(\"E\")])]),new Term(\",\", [new Term(\"!\", []),new Term(\";\", [new Term(\"=\", [new Var(\"E\"),new Term(\"at\", [])]),new Term(\"=\", [new Var(\"E\"),new Term(\"past\", [])])])])])]))\r\n\t\t],\r\n\r\n\t\t// at_end_of_stream/1\r\n\t\t\"at_end_of_stream/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar e = thread.next_free_variable();\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace(\r\n\t\t\t\t\t\tnew Term(\",\", [new Term(\"stream_property\", [stream2,new Term(\"end_of_stream\", [e])]),\r\n\t\t\t\t\t\tnew Term(\",\", [new Term(\"!\", []),new Term(\";\", [new Term(\"=\", [e,new Term(\"at\", [])]),\r\n\t\t\t\t\t\tnew Term(\"=\", [e,new Term(\"past\", [])])])])])\r\n\t\t\t\t\t),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// set_stream_position/2\r\n\t\t\"set_stream_position/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], position = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( position ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream_position( position ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_position\", position, atom.indicator ) );\r\n\t\t\t} else if( stream2.reposition === false ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"reposition\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( position.indicator === \"position/3\" ) {\r\n\t\t\t\t\tstream2.position = position.args[0].value;\r\n\t\t\t\t\tstream2.char_count = position.args[0].value;\r\n\t\t\t\t\tstream2.line_count = position.args[1].value;\r\n\t\t\t\t\tstream2.line_position = position.args[2].value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream2.position = position.id;\r\n\t\t\t\t}\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// CHARACTER INPUT OUTPUT\r\n\t\t\r\n\t\t// get_char/1\r\n\t\t\"get_char/1\": [\r\n\t\t\tnew Rule(new Term(\"get_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// get_char/2\r\n\t\t\"get_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_char;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_char = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_char === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_char === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t\tif(stream_char === \"\\n\") {\r\n\t\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Term(stream_char,[]), char] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// get_code/1\r\n\t\t\"get_code/1\": [\r\n\t\t\tnew Rule(new Term(\"get_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// get_code/2\r\n\t\t\"get_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"in_character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_code;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_code = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_code === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_code === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream_code = codePointAt( stream_code, 0 );\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t\tif(stream_code === 10) {\r\n\t\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_code, false), code] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// peek_char/1\r\n\t\t\"peek_char/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_char/2\r\n\t\t\"peek_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( char ) && !pl.type.is_in_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_char;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else if( stream2.position === \"past_end_of_stream\" ) {\r\n\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_char = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_char === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_char === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_char = \"end_of_file\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Term(stream_char,[]), char] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// peek_code/1\r\n\t\t\"peek_code/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_code/2\r\n\t\t\"peek_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( code ) && !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( pl.type.is_integer( code ) && !pl.type.is_in_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"in_character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_code;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_code = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\tif( stream_code === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_code === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_code = -1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream_code = codePointAt( stream_code, 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_code, false), code] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_char/1\r\n\t\t\"put_char/1\": [\r\n\t\t\tnew Rule(new Term(\"put_char\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_char\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// put_char/2\r\n\t\t\"put_char/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], char = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_character( char ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"character\", char, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put( char.id, stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tif(char.id === \"\\n\") {\r\n\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_code/1\r\n\t\t\"put_code/1\": [\r\n\t\t\tnew Rule(new Term(\"put_code\", [new Var(\"C\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_code\", [new Var(\"S\"),new Var(\"C\")])]))\r\n\t\t],\r\n\r\n\t\t// put_code/2\r\n\t\t\"put_code/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], code = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", code, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_character_code( code ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.representation( \"character_code\", atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put( fromCodePoint( code.value ), stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tif(code.value === 10) {\r\n\t\t\t\t\t\tstream2.line_count++;\r\n\t\t\t\t\t\tstream2.line_position = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// nl/0\r\n\t\t\"nl/0\": [\r\n\t\t\tnew Rule(new Term(\"nl\"), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_char\", [new Var(\"S\"),new Term(\"\\n\")])]))\r\n\t\t],\r\n\r\n\t\t// nl/1\r\n\t\t\"nl/1\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"put_char\", [stream, new Term(\"\\n\", [])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// BYTE INPUT/OUTPUT\r\n\r\n\t\t// get_byte/1\r\n\t\t\"get_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"get_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"get_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// get_byte/2\r\n\t\t\"get_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_byte;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_byte = stream2.stream.get_byte( stream2.position );\r\n\t\t\t\t\tif( stream_byte === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"byte\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_byte === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_byte,false), byte] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// peek_byte/1\r\n\t\t\"peek_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"peek_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"peek_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// peek_byte/2\r\n\t\t\"peek_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( byte ) && !pl.type.is_in_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"in_byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar stream_byte;\r\n\t\t\t\tif( stream2.position === \"end_of_stream\" ) {\r\n\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstream_byte = stream2.stream.get_byte( stream2.position );\r\n\t\t\t\t\tif( stream_byte === null ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"byte\", atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if(stream_byte === \"end_of_stream\") {\r\n\t\t\t\t\t\tstream_byte = -1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [new Num(stream_byte,false), byte] ) ),\r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// put_byte/1\r\n\t\t\"put_byte/1\": [\r\n\t\t\tnew Rule(new Term(\"put_byte\", [new Var(\"B\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"put_byte\", [new Var(\"S\"),new Var(\"B\")])]))\r\n\t\t],\r\n\r\n\t\t// put_byte/2\r\n\t\t\"put_byte/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], byte = atom.args[1];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_byte( byte ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"byte\", byte, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( stream ) && !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"text\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"text_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( stream2.stream.put_byte( byte.value, stream2.position ) ) {\r\n\t\t\t\t\tif(typeof stream2.position === \"number\")\r\n\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\tstream2.char_count++;\r\n\t\t\t\t\tstream2.line_position++;\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TERM INPUT/OUTPUT\r\n\r\n\t\t// read/1\r\n\t\t\"read/1\": [\r\n\t\t\tnew Rule(new Term(\"read\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Term(\"[]\")])]))\r\n\t\t],\r\n\r\n\t\t// read/2\r\n\t\t\"read/2\": [\r\n\t\t\tnew Rule(new Term(\"read\", [new Var(\"S\"), new Var(\"T\")]), new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Term(\"[]\")]))\r\n\t\t],\r\n\r\n\t\t// read_term/2\r\n\t\t\"read_term/2\": [\r\n\t\t\tnew Rule(new Term(\"read_term\", [new Var(\"T\"),new Var(\"O\")]), new Term(\",\", [new Term(\"current_input\", [new Var(\"S\")]),new Term(\"read_term\", [new Var(\"S\"),new Var(\"T\"),new Var(\"O\")])]))\r\n\t\t],\r\n\r\n\t\t// read_term/3\r\n\t\t\"read_term/3\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1], options = atom.args[2];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.output ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"input\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"eof_code\" ) {\r\n\t\t\t\texpr = {\r\n\t\t\t\t\tvalue: new Term(\"end_of_file\", []),\r\n\t\t\t\t\ttype: SUCCESS,\r\n\t\t\t\t\tlen: -1\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_read_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"read_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tobj_options[property.id] = property.args[0];\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar char, tokenizer, expr;\r\n\t\t\t\t\tvar text = \"\";\r\n\t\t\t\t\tvar tokens = [];\r\n\t\t\t\t\tvar last_token = null;\r\n\t\t\t\t\tvar lexical_error = false;\r\n\t\t\t\t\t// Get term\r\n\t\t\t\t\twhile( last_token === null || lexical_error || last_token.name !== \"atom\" || last_token.value !== \".\" || tokens.length > 0 && expr.type === ERROR ) {\r\n\t\t\t\t\t\tchar = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\t\twhile(char !== null && char !== \".\" && char !== \"end_of_stream\" && char !== \"past_end_of_stream\") {\r\n\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\ttext += char;\r\n\t\t\t\t\t\t\tchar = stream2.stream.get( 1, stream2.position );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif( char === null ) {\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.representation( \"character\", atom.indicator ) );\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else if( char === \"end_of_stream\" || char === \"past_end_of_stream\" ) {\r\n\t\t\t\t\t\t\tif(tokens === null || tokens.length === 0) {\r\n\t\t\t\t\t\t\t\tstream2.position = \"past_end_of_stream\";\r\n\t\t\t\t\t\t\t\texpr = {\r\n\t\t\t\t\t\t\t\t\tvalue: new Term(\"end_of_file\", []),\r\n\t\t\t\t\t\t\t\t\ttype: SUCCESS,\r\n\t\t\t\t\t\t\t\t\tlen: -1\r\n\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t} else if(expr) {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( last_token, \"unexpected end of file\", false ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( last_token, \"token not found\", true ) );\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if(char === \".\") {\r\n\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\ttext += char;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\ttokenizer = new Tokenizer( thread );\r\n\t\t\t\t\t\ttokenizer.new_text( text );\r\n\t\t\t\t\t\ttokens = tokenizer.get_tokens();\r\n\t\t\t\t\t\tnum_token = tokens !== null && tokens.length > 1 ? tokens[tokens.length-2] : null;\r\n\t\t\t\t\t\tlast_token = tokens !== null && tokens.length > 0 ? tokens[tokens.length-1] : null;\r\n\t\t\t\t\t\tif(tokens === null)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\tlexical_error = false;\r\n\t\t\t\t\t\tfor(var i = 0; i < tokens.length && !lexical_error; i++)\r\n\t\t\t\t\t\t\tlexical_error = tokens[i].name === \"lexical\";\r\n\t\t\t\t\t\tif(lexical_error)\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\texpr = parseExpr(thread, tokens, 0, thread.__get_max_priority(), false);\r\n\t\t\t\t\t\tif(num_token && num_token.name === \"number\" && !num_token.float && !num_token.blank && last_token.value === \".\") {\r\n\t\t\t\t\t\t\tvar next_char = stream2.stream.get(1, stream2.position);\r\n\t\t\t\t\t\t\tif(next_char >= '0' && next_char <= '9') {\r\n\t\t\t\t\t\t\t\tstream2.position++;\r\n\t\t\t\t\t\t\t\ttext += next_char;\r\n\t\t\t\t\t\t\t\tlast_token = null;\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(last_token) {\r\n\t\t\t\t\t\tif(last_token.line_position === last_token.len)\r\n\t\t\t\t\t\t\tstream2.line_position += last_token.line_position;\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tstream2.line_position = last_token.line_position;\r\n\t\t\t\t\t\tstream2.line_count += last_token.line_count;\r\n\t\t\t\t\t\tstream2.char_count += last_token.len;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Succeed analyzing term\r\n\t\t\t\t\tif( expr.type === SUCCESS && (expr.len === -1 || expr.len === tokens.length-1 && last_token.value === \".\" )) {\r\n\t\t\t\t\t\tthread.session.renamed_variables = {};\r\n\t\t\t\t\t\texpr = expr.value.rename( thread );\r\n\t\t\t\t\t\tvar eq = new Term( \"=\", [term, expr] );\r\n\t\t\t\t\t\t// Variables\r\n\t\t\t\t\t\tif( obj_options.variables ) {\r\n\t\t\t\t\t\t\tvar vars = arrayToList( map( nub( expr.variables() ), function(v) { return new Var(v); } ) );\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.variables, vars] )] )\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Variable names\r\n\t\t\t\t\t\tif( obj_options.variable_names ) {\r\n\t\t\t\t\t\t\tvar vars = nub(expr.variables());\r\n\t\t\t\t\t\t\tvar plvars = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < vars.length; i++) {\r\n\t\t\t\t\t\t\t\tvar v = vars[i];\r\n\t\t\t\t\t\t\t\tfor( var prop in thread.session.renamed_variables ) {\r\n\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables.hasOwnProperty( prop ) ) {\r\n\t\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables[ prop ] === v ) {\r\n\t\t\t\t\t\t\t\t\t\t\tplvars.push(new Term( \"=\", [new Term( prop, []), new Var(v)] ));\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplvars = arrayToList(plvars);\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.variable_names, plvars] )] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Singletons\r\n\t\t\t\t\t\tif( obj_options.singletons ) {\r\n\t\t\t\t\t\t\tvar vars = nub(new Rule(expr, null).singleton_variables(true));\r\n\t\t\t\t\t\t\tvar plvars = [];\r\n\t\t\t\t\t\t\tfor(var i = 0; i < vars.length; i++) {\r\n\t\t\t\t\t\t\t\tvar v = vars[i];\r\n\t\t\t\t\t\t\t\tfor( var prop in thread.session.renamed_variables ) {\r\n\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables.hasOwnProperty( prop ) ) {\r\n\t\t\t\t\t\t\t\t\t\tif( thread.session.renamed_variables[ prop ] === v ) {\r\n\t\t\t\t\t\t\t\t\t\t\tplvars.push(new Term( \"=\", [new Term( prop, []), new Var(v)] ));\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tplvars = arrayToList(plvars);\r\n\t\t\t\t\t\t\teq = new Term( \",\", [eq, new Term( \"=\", [obj_options.singletons, plvars] )] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthread.prepend( [new State( point.goal.replace( eq ), point.substitution, point )] );\r\n\t\t\t\t\t// Failed analyzing term\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif( expr.type === SUCCESS )\r\n\t\t\t\t\t\t\tthread.throw_error( pl.error.syntax( tokens[expr.len], \"unexpected token\", false ) );\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tthread.throw_error( expr.value );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// write/1\r\n\t\t\"write/1\": [\r\n\t\t\tnew Rule(new Term(\"write\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write/2\r\n\t\t\"write/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"false\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"false\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"true\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\t\t\r\n\t\t// writeq/1\r\n\t\t\"writeq/1\": [\r\n\t\t\tnew Rule(new Term(\"writeq\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"writeq\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// writeq/2\r\n\t\t\"writeq/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"true\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"false\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"true\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\t\t\r\n\t\t// write_canonical/1\r\n\t\t\"write_canonical/1\": [\r\n\t\t\tnew Rule(new Term(\"write_canonical\", [new Var(\"T\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write_canonical\", [new Var(\"S\"),new Var(\"T\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write_canonical/2\r\n\t\t\"write_canonical/2\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1];\r\n\t\t\tthread.prepend( [new State( \r\n\t\t\t\tpoint.goal.replace( new Term(\"write_term\", [stream, term,\r\n\t\t\t\t\tnew Term(\".\", [new Term(\"quoted\", [new Term(\"true\", [])]),\r\n\t\t\t\t\t\tnew Term(\".\", [new Term(\"ignore_ops\", [new Term(\"true\")]),\r\n\t\t\t\t\t\t\tnew Term(\".\", [new Term(\"numbervars\", [new Term(\"false\")]), new Term(\"[]\",[])])])])]) ),\r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// write_term/2\r\n\t\t\"write_term/2\": [\r\n\t\t\tnew Rule(new Term(\"write_term\", [new Var(\"T\"),new Var(\"O\")]), new Term(\",\", [new Term(\"current_output\", [new Var(\"S\")]),new Term(\"write_term\", [new Var(\"S\"),new Var(\"T\"),new Var(\"O\")])]))\r\n\t\t],\r\n\t\t\r\n\t\t// write_term/3\r\n\t\t\"write_term/3\": function( thread, point, atom ) {\r\n\t\t\tvar stream = atom.args[0], term = atom.args[1], options = atom.args[2];\r\n\t\t\tvar stream2 = pl.type.is_stream( stream ) ? stream : thread.get_stream_by_alias( stream.id );\r\n\t\t\tif( pl.type.is_variable( stream ) || pl.type.is_variable( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_list( options ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream ) && !pl.type.is_atom( stream ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"stream_or_alias\", stream, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_stream( stream2 ) || stream2.stream === null ) {\r\n\t\t\t\tthread.throw_error( pl.error.existence( \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.input ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.type === \"binary\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"binary_stream\", stream, atom.indicator ) );\r\n\t\t\t} else if( stream2.position === \"past_end_of_stream\" && stream2.eof_action === \"error\" ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"output\", \"past_end_of_stream\", stream, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\t// Get options\r\n\t\t\t\tvar obj_options = {};\r\n\t\t\t\tvar pointer = options;\r\n\t\t\t\tvar property;\r\n\t\t\t\twhile( pl.type.is_term(pointer) && pointer.indicator === \"./2\" ) {\r\n\t\t\t\t\tproperty = pointer.args[0];\r\n\t\t\t\t\tif( pl.type.is_variable( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else if( !pl.type.is_write_option( property ) ) {\r\n\t\t\t\t\t\tthread.throw_error( pl.error.domain( \"write_option\", property, atom.indicator ) );\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(property.indicator === \"variable_names/1\")\r\n\t\t\t\t\t\tobj_options[property.id] = property.args[0];\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tobj_options[property.id] = property.args[0].id === \"true\";\r\n\t\t\t\t\tpointer = pointer.args[1];\r\n\t\t\t\t}\r\n\t\t\t\tif( pointer.indicator !== \"[]/0\" ) {\r\n\t\t\t\t\tif( pl.type.is_variable( pointer ) )\r\n\t\t\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tthread.throw_error( pl.error.type( \"list\", options, atom.indicator ) );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tobj_options.session = thread.session;\r\n\t\t\t\t\tvar text = term.toString( obj_options );\r\n\t\t\t\t\tstream2.stream.put( text, stream2.position );\r\n\t\t\t\t\tif( typeof stream2.position === \"number\" )\r\n\t\t\t\t\t\tstream2.position += text.length;\r\n\t\t\t\t\tvar nl = (text.match(/\\n/g) || []).length;\r\n\t\t\t\t\tstream2.line_count += nl;\r\n\t\t\t\t\tif(nl > 0)\r\n\t\t\t\t\t\tstream2.line_position = text.length - text.lastIndexOf(\"\\n\") - 1;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tstream2.line_position += text.length;\r\n\t\t\t\t\tstream2.char_count += text.length;\r\n\t\t\t\t\tthread.success( point );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// IMPLEMENTATION DEFINED HOOKS\r\n\t\t\r\n\t\t// halt/0\r\n\t\t\"halt/0\": function( thread, point, _ ) {\r\n\t\t\tif( thread.get_flag(\"nodejs\").indicator === \"true/0\" )\r\n\t\t\t\tprocess.exit();\r\n\t\t\tthread.points = [];\r\n\t\t},\r\n\t\t\r\n\t\t// halt/1\r\n\t\t\"halt/1\": function( thread, point, atom ) {\r\n\t\t\tvar int = atom.args[0];\r\n\t\t\tif( pl.type.is_variable( int ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_integer( int ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", int, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif( thread.get_flag(\"nodejs\").indicator === \"true/0\" )\r\n\t\t\t\t\tprocess.exit(int.value);\r\n\t\t\t\tthread.points = [];\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// current_prolog_flag/2\r\n\t\t\"current_prolog_flag/2\": function( thread, point, atom ) {\r\n\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\tif( !pl.type.is_variable( flag ) && !pl.type.is_atom( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_variable( flag ) && !pl.type.is_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor( var name in pl.flag ) {\r\n\t\t\t\t\tif(!pl.flag.hasOwnProperty(name)) continue;\r\n\t\t\t\t\tvar goal = new Term( \",\", [new Term( \"=\", [new Term( name ), flag] ), new Term( \"=\", [thread.get_flag(name), value] )] );\r\n\t\t\t\t\tstates.push( new State( point.goal.replace( goal ), point.substitution, point ) );\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend( states );\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// set_prolog_flag/2\r\n\t\t\"set_prolog_flag/2\": function( thread, point, atom ) {\r\n\t\t\tvar flag = atom.args[0], value = atom.args[1];\r\n\t\t\tif( pl.type.is_variable( flag ) || pl.type.is_variable( value ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_atom( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"prolog_flag\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_modifiable_flag( flag ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.permission( \"modify\", \"flag\", flag, atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_value_flag( flag, value ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.domain( \"flag_value\", new Term( \"+\", [flag, value] ), atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tthread.session.flag[flag.id] = value;\r\n\t\t\t\tthread.success( point );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// LOAD PROLOG SOURCE FILES\r\n\r\n\t\t// consult/1\r\n\t\t\"consult/1\": function(thread, point, atom) {\r\n\t\t\tvar src = atom.args[0];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(src.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = src.args[0].id;\r\n\t\t\t\tsrc = src.args[1];\r\n\t\t\t}\r\n\t\t\tif(pl.type.is_variable(src)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_atom(src)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"atom\", src, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tif(thread.consult(src.id, {\r\n\t\t\t\t\tcontext_module: context_module,\r\n\t\t\t\t\ttext: false,\r\n\t\t\t\t\thtml: false,\r\n\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\tthread.success(point);\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: function(err) {\r\n\t\t\t\t\t\tthread.throw_error(err);\r\n\t\t\t\t\t\tthread.again();\r\n\t\t\t\t\t}\r\n\t\t\t\t}));\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TIME AND DATES\r\n\r\n\t\t// get_time/1\r\n\t\t\"get_time/1\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0];\r\n\t\t\tif(!pl.type.is_variable(time) && !pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar current = new Num(Date.now(), true);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [time, current] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_property\r\n\t\t\"time_property/2\": function(thread, point, atom) {\r\n\t\t\tvar time = atom.args[0], property = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error(pl.error.instantiation(atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(time) && !pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error(pl.error.type(\"number\", time, atom.indicator));\r\n\t\t\t} else if(!pl.type.is_variable(property) && !pl.type.is_time_property(property)) {\r\n\t\t\t\tthread.throw_error(pl.error.domain(\"time_property\", property, atom.indicator));\r\n\t\t\t} else {\r\n\t\t\t\tvar props;\r\n\t\t\t\tif(pl.type.is_variable(property)) {\r\n\t\t\t\t\tprops = [\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\", \"weekday\"];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tprops = [property.id];\r\n\t\t\t\t}\r\n\t\t\t\tvar date = new Date(time.value);\r\n\t\t\t\tvar value;\r\n\t\t\t\tvar states = [];\r\n\t\t\t\tfor(var i = 0; i < props.length; i++) {\r\n\t\t\t\t\tswitch(props[i]) {\r\n\t\t\t\t\t\tcase \"year\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"year\", [new Num(date.getFullYear(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"month\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"month\", [new Num(date.getMonth(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"day\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"day\", [new Num(date.getDate(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"hours\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"hours\", [new Num(date.getHours(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"minutes\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"minutes\", [new Num(date.getMinutes(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"seconds\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"seconds\", [new Num(date.getSeconds(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"milliseconds\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"milliseconds\", [new Num(date.getMilliseconds(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"weekday\":\r\n\t\t\t\t\t\t\tvalue = new Term(\"weekday\", [new Num(date.getDay(), false)]);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstates.push(new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [property, value] ) ), \r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t));\r\n\t\t\t\t}\r\n\t\t\t\tthread.prepend(states);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_year/2\r\n\t\t\"time_year/2\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0], year = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_variable(year) && !pl.type.is_integer(year)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", year, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar value = new Num(new Date(time.value).getFullYear(), false);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [year, value] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// time_month/2\r\n\t\t\"time_month/2\": function( thread, point, atom ) {\r\n\t\t\tvar time = atom.args[0], month = atom.args[1];\r\n\t\t\tif(pl.type.is_variable(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_number(time)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"number\", time, atom.indicator ) );\r\n\t\t\t} else if(!pl.type.is_variable(month) && !pl.type.is_integer(month)) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"integer\", month, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar value = new Num(new Date(time.value).getMonth(), false);\r\n\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\tpoint.goal.replace( new Term( \"=\", [month, value] ) ), \r\n\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\tpoint\r\n\t\t\t\t)] );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// GRAMMARS\r\n\r\n\t\t// phrase/3\r\n\t\t\"phrase/3\": function( thread, point, atom ) {\r\n\t\t\tvar grbody = atom.args[0], s0 = atom.args[1], s = atom.args[2];\r\n\t\t\tvar context_module = \"user\";\r\n\t\t\tif(grbody.indicator === \":/2\") {\r\n\t\t\t\tcontext_module = grbody.args[0].id;\r\n\t\t\t\tgrbody = grbody.args[1];\r\n\t\t\t}\r\n\t\t\tif( pl.type.is_variable( grbody ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.instantiation( atom.indicator ) );\r\n\t\t\t} else if( !pl.type.is_callable( grbody ) ) {\r\n\t\t\t\tthread.throw_error( pl.error.type( \"callable\", grbody, atom.indicator ) );\r\n\t\t\t} else {\r\n\t\t\t\tvar goal = body_to_dcg( grbody.clone(), s0, thread );\r\n\t\t\t\tgoal.value = new Term(\":\", [new Term(context_module), new Term(\"call\", [goal.value])]);\r\n\t\t\t\tif(goal !== null) {\r\n\t\t\t\t\tthread.prepend( [new State(\r\n\t\t\t\t\t\tpoint.goal.replace( new Term( \",\", [goal.value, new Term(\"=\", [goal.variable, s])] ) ), \r\n\t\t\t\t\t\tpoint.substitution,\r\n\t\t\t\t\t\tpoint\r\n\t\t\t\t\t)] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// phrase/2\r\n\t\t\"phrase/2\": function( thread, point, atom ) {\r\n\t\t\tvar grbody = atom.args[0], s0 = atom.args[1];\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"phrase\", [grbody, s0, new Term(\"[]\", [])] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\r\n\r\n\t\t// TAU PROLOG INFORMATION\r\n\r\n\t\t// version/0\r\n\t\t\"version/0\": function( thread, point, atom ) {\r\n\t\t\tvar msg = \"Welcome to Tau Prolog version \" + version.major + \".\" + version.minor + \".\" + version.patch + \"\\n\";\r\n\t\t\tmsg += \"Tau Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.\\n\";\r\n\t\t\tmsg += \"Please run ?- license. for legal details.\\n\";\r\n\t\t\tmsg += \"For online help and background, visit http:/tau-prolog.org\";\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"write\", [new Term( msg, [] )] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t},\r\n\r\n\t\t// license/0\r\n\t\t\"license/0\": function( thread, point, atom ) {\r\n\t\t\tvar msg = \"Tau Prolog. A Prolog interpreter in JavaScript.\\n\";\r\n\t\t\tmsg += \"Copyright (C) 2017 - 2022 José Antonio Riaza Valverde\\n\\n\";\r\n\t\t\tmsg += \"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\";\r\n\t\t\tmsg += \"1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\";\r\n\t\t\tmsg += \"2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\\n\";\r\n\t\t\tmsg += \"3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\\n\\n\";\r\n\t\t\tmsg += \"THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\"AS IS\\\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\\n\";\r\n\t\t\tmsg += \"You should have received a copy of the BSD 3-Clause License along with this program. If not, see https://opensource.org/licenses/BSD-3-Clause\";\r\n\t\t\tthread.prepend( [new State(\r\n\t\t\t\tpoint.goal.replace( new Term( \"write\", [new Term( msg, [] )] ) ), \r\n\t\t\t\tpoint.substitution,\r\n\t\t\t\tpoint\r\n\t\t\t)] );\r\n\t\t}\r\n\r\n\t}, \"all\", {\r\n\t\tmeta_predicates: {\r\n\t\t\t// '$findall'(?, 0, -, ?)\r\n\t\t\t\"$findall/4\": new Term(\"$findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\"), new Term(\"?\")]),\r\n\t\t\t// '$bagof'(?, ^, -)\r\n\t\t\t\"$bagof/3\": new Term(\"$bagof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// '$setof'(?, ^, -)\r\n\t\t\t\"$setof/3\": new Term(\"$setof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// '$if'(0, 0, 0)\r\n\t\t\t\"$if/3\": new Term(\"$if\", [new Num(0, false), new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0;0)\r\n\t\t\t\";/2\": new Term(\";\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0->0)\r\n\t\t\t\"->/2\": new Term(\"->\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (0->0)\r\n\t\t\t\"*->/2\": new Term(\"*->\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// (\\+0)\r\n\t\t\t\"\\\\+/1\": new Term(\"\\\\+\", [new Num(0, false)]),\r\n\t\t\t// abolish(:)\r\n\t\t\t\"abolish/1\": new Term(\"abolish\", [new Term(\":\")]),\r\n\t\t\t// asserta(:)\r\n\t\t\t\"asserta/1\": new Term(\"asserta\", [new Term(\":\")]),\r\n\t\t\t// assertz(:)\r\n\t\t\t\"assertz/1\": new Term(\"assertz\", [new Term(\":\")]),\r\n\t\t\t// bagof(?, ^, -)\r\n\t\t\t\"bagof/3\": new Term(\"bagof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")]),\r\n\t\t\t// call(0)\r\n\t\t\t\"call/1\": new Term(\"call\", [new Num(0, false)]),\r\n\t\t\t// call(1, ?)\r\n\t\t\t\"call/2\": new Term(\"call\", [new Num(1, false), new Term(\"?\")]),\r\n\t\t\t// call(2, ?, ?)\r\n\t\t\t\"call/3\": new Term(\"call\", [new Num(2, false), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(3, ?, ?, ?)\r\n\t\t\t\"call/4\": new Term(\"call\", [new Num(3, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(4, ?, ?, ?, ?)\r\n\t\t\t\"call/5\": new Term(\"call\", [new Num(4, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(5, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/6\": new Term(\"call\", [new Num(5, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(6, ?, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/7\": new Term(\"call\", [new Num(6, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call(7, ?, ?, ?, ?, ?, ?, ?)\r\n\t\t\t\"call/8\": new Term(\"call\", [new Num(6, false), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// call_cleanup(0, 0)\r\n\t\t\t\"call_cleanup/2\": new Term(\"call_cleanup\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// catch(0, ?, 0)\r\n\t\t\t\"catch/3\": new Term(\"catch\", [new Num(0, false), new Term(\"?\"), new Num(0, false)]),\r\n\t\t\t// consult(:)\r\n\t\t\t\"consult/1\": new Term(\"consult\", [new Term(\":\")]),\r\n\t\t\t// clause(:, ?)\r\n\t\t\t\"clause/2\": new Term(\"clause\", [new Term(\":\"), new Term(\"?\")]),\r\n\t\t\t// current_predicate(?, :)\r\n\t\t\t\"current_predicate/2\": new Term(\"current_predicate\", [new Term(\"?\"), new Term(\":\")]),\r\n\t\t\t// findall(?, 0, -)\r\n\t\t\t\"findall/3\": new Term(\"findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\")]),\r\n\t\t\t// findall(?, 0, -, ?)\r\n\t\t\t\"findall/4\": new Term(\"findall\", [new Term(\"?\"), new Num(0, false), new Term(\"-\"), new Term(\"?\")]),\r\n\t\t\t// forall(0, 0)\r\n\t\t\t\"forall/2\": new Term(\"forall\", [new Num(0, false), new Num(0, false)]),\r\n\t\t\t// listing(:)\r\n\t\t\t\"listing/1\": new Term(\"listing\", [new Term(\":\")]),\r\n\t\t\t// once(0)\r\n\t\t\t\"once/1\": new Term(\"once\", [new Num(0, false)]),\r\n\t\t\t// phrase(:, ?)\r\n\t\t\t\"phrase/2\": new Term(\"phrase\", [new Term(\":\"),new Term(\"?\")]),\r\n\t\t\t// phrase(:, ?, ?)\r\n\t\t\t\"phrase/3\": new Term(\"phrase\", [new Term(\":\"),new Term(\"?\"), new Term(\"?\")]),\r\n\t\t\t// retract(:)\r\n\t\t\t\"retract/1\": new Term(\"retract\", [new Term(\":\")]),\r\n\t\t\t// retractall(:)\r\n\t\t\t\"retractall/1\": new Term(\"retractall\", [new Term(\":\")]),\r\n\t\t\t// setup_call_cleanup(0, 0, 0)\r\n\t\t\t\"setup_call_cleanup/3\": new Term(\"setup_call_cleanup\", [new Num(0, false), new Num(0, false), new Num(0, false)]),\r\n\t\t\t// setof(?, ^, -)\r\n\t\t\t\"setof/3\": new Term(\"setof\", [new Term(\"?\"), new Term(\"^\"), new Term(\"-\")])\r\n\t\t}\r\n\t});\r\n\r\n\tif( typeof module !== 'undefined' ) {\r\n\t\tmodule.exports = pl;\r\n\t} else {\r\n\t\twindow.pl = pl;\r\n\t}\r\n\t\r\n})();\r\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\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\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\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()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\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 isObject(re) && 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 isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (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 = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n","var indexOf = function (xs, item) {\n if (xs.indexOf) return xs.indexOf(item);\n else for (var i = 0; i < xs.length; i++) {\n if (xs[i] === item) return i;\n }\n return -1;\n};\nvar Object_keys = function (obj) {\n if (Object.keys) return Object.keys(obj)\n else {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n }\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nvar defineProp = (function() {\n try {\n Object.defineProperty({}, '_', {});\n return function(obj, name, value) {\n Object.defineProperty(obj, name, {\n writable: true,\n enumerable: false,\n configurable: true,\n value: value\n })\n };\n } catch(e) {\n return function(obj, name, value) {\n obj[name] = value;\n };\n }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n if (!(this instanceof Script)) return new Script(code);\n this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n if (!(context instanceof Context)) {\n throw new TypeError(\"needs a 'context' argument.\");\n }\n \n var iframe = document.createElement('iframe');\n if (!iframe.style) iframe.style = {};\n iframe.style.display = 'none';\n \n document.body.appendChild(iframe);\n \n var win = iframe.contentWindow;\n var wEval = win.eval, wExecScript = win.execScript;\n\n if (!wEval && wExecScript) {\n // win.eval() magically appears when this is called in IE:\n wExecScript.call(win, 'null');\n wEval = win.eval;\n }\n \n forEach(Object_keys(context), function (key) {\n win[key] = context[key];\n });\n forEach(globals, function (key) {\n if (context[key]) {\n win[key] = context[key];\n }\n });\n \n var winKeys = Object_keys(win);\n\n var res = wEval.call(win, this.code);\n \n forEach(Object_keys(win), function (key) {\n // Avoid copying circular objects like `top` and `window` by only\n // updating existing context properties or new properties in the `win`\n // that was only introduced after the eval.\n if (key in context || indexOf(winKeys, key) === -1) {\n context[key] = win[key];\n }\n });\n\n forEach(globals, function (key) {\n if (!(key in context)) {\n defineProp(context, key, win[key]);\n }\n });\n \n document.body.removeChild(iframe);\n \n return res;\n};\n\nScript.prototype.runInThisContext = function () {\n return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n var ctx = Script.createContext(context);\n var res = this.runInContext(ctx);\n\n if (context) {\n forEach(Object_keys(ctx), function (key) {\n context[key] = ctx[key];\n });\n }\n\n return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n exports[name] = Script[name] = function (code) {\n var s = Script(code);\n return s[name].apply(s, [].slice.call(arguments, 1));\n };\n});\n\nexports.isContext = function (context) {\n return context instanceof Context;\n};\n\nexports.createScript = function (code) {\n return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n var copy = new Context();\n if(typeof context === 'object') {\n forEach(Object_keys(context), function (key) {\n copy[key] = context[key];\n });\n }\n return copy;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HistoryGraph = void 0;\nrequire(\"d3-transition\");\nconst d3_color_1 = require(\"d3-color\");\nconst d3_scale_1 = require(\"d3-scale\");\nconst d3_scale_chromatic_1 = require(\"d3-scale-chromatic\");\nconst d3_selection_1 = require(\"d3-selection\");\nconst d3_zoom_1 = require(\"d3-zoom\");\nconst fs = require(\"file-saver\");\nclass HistoryGraph {\n constructor(graphId, div, config = {}) {\n this.nodes = [];\n this.versionNodes = [];\n this.edges = [];\n this.maxX = 0;\n this.maxY = 0;\n this.maxId = 0;\n this.i = 0;\n var defaultConfig = {\n customSelectNode: (g, d) => false,\n customCtrlClick: (g, d) => false,\n customForm: (g, form) => null,\n customSize: (g) => [g.config.width, g.config.height],\n customWindowTabCommand: (trialIdSimplified, trialId, command) => false,\n hintMessage: \"Ctrl+Shift click or ⌘+Shift click to diff trials\",\n width: 200,\n height: 100,\n radius: 20,\n moveX: 20,\n moveY: 25,\n moveY2: 10,\n spacing: 17,\n margin: 50,\n fontSize: 10,\n useTooltip: false,\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.graphId = graphId;\n this.zoom = (0, d3_zoom_1.zoom)()\n .on(\"zoom\", (event) => {\n return this.zoomFunction(event);\n })\n .on(\"start\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"move\"))\n .on(\"end\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"auto\"))\n .wheelDelta(function () {\n const e = event;\n return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000;\n });\n this.div = (0, d3_selection_1.select)(div);\n let form = (0, d3_selection_1.select)(div)\n .append(\"form\")\n .classed(\"history-toolbar\", true);\n this.svg = (0, d3_selection_1.select)(div)\n .append(\"div\")\n .append(\"svg\")\n .attr(\"width\", this.config.width)\n .attr(\"height\", this.config.height)\n .call(this.zoom)\n .on(\"mouseup\", () => this.svgMouseUp());\n this.state = {\n selectedNode: null,\n mouseDownNode: null,\n justScale: false\n };\n // Tooltip\n this.tooltipDiv = (0, d3_selection_1.select)(\"body\").append(\"div\")\n .classed(\"now-tooltip now-history-tooltip\", true)\n .style(\"opacity\", 0)\n .style(\"max-width\", \"250px\")\n .on(\"mouseout\", () => {\n this.closeTooltip();\n });\n this.createToolbar(form);\n this.createMarker('end-arrow', 'endarrow', '#000');\n this.g = this.svg.append(\"g\")\n .attr(\"id\", this._graphId())\n .attr(\"transform\", \"translate(0,0)\")\n .classed('HistoryGraph', true);\n }\n createToolbar(form) {\n let formdiv = form.append(\"div\")\n .classed(\"buttons\", true);\n this.config.customForm(this, formdiv);\n // Reset zoom\n formdiv.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + this.graphId + \"-history-zoom\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Restore zoom\")\n .on(\"click\", () => this.restorePosition())\n .append(\"i\")\n .classed(\"fa fa-eye\", true);\n // Toggle Tooltips\n let tooltipsToggle = formdiv.append(\"input\")\n .attr(\"id\", \"history-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-tooltips\")\n .attr(\"value\", \"show\")\n .property(\"checked\", this.config.useTooltip)\n .on(\"change\", () => {\n this.closeTooltip();\n this.config.useTooltip = tooltipsToggle.property(\"checked\");\n });\n formdiv.append(\"label\")\n .attr(\"for\", \"history-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"title\", \"Show tooltips on mouse hover\")\n .append(\"i\")\n .classed(\"fa fa-comment\", true);\n // Download SVG\n formdiv.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"history-\" + this.graphId + \"-download\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Download graph SVG\")\n .on(\"click\", () => {\n this.download();\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n // Set Font Size\n let fontToggle = formdiv.append(\"input\")\n .attr(\"id\", \"history-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"history-toolbar-fonts\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = fontToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n fontSize.style(\"display\", display);\n });\n formdiv.append(\"label\")\n .attr(\"for\", \"history-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"title\", \"Set font size\")\n .append(\"i\")\n .classed(\"fa fa-font\", true);\n let fontSize = formdiv.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.fontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node font size\")\n .on(\"change\", () => {\n this.config.fontSize = fontSize.property(\"value\");\n this.svg.selectAll(\"text.trial-id\")\n .attr(\"font-size\", this.config.fontSize);\n });\n // Submit\n formdiv.append(\"input\")\n .attr(\"type\", \"submit\")\n .attr(\"name\", \"prevent-enter\")\n .attr(\"onclick\", \"return false;\")\n .style(\"display\", \"none\");\n formdiv.append(\"div\");\n formdiv.append(\"div\")\n .text(this.config.hintMessage)\n .style('font-family', 'sans-serif')\n .style('font-size', '12px')\n .style('pointer-events', 'none');\n }\n load(data) {\n let nodes = [], otherNodes = [], edges = [], spacing = this.config.spacing, margin = this.config.margin;\n let spacing2 = 2 * spacing, spacing4 = 4 * spacing, start = margin, max = 0, id = 0, last = data.nodes.length - 1, tid = 0, useVersion = false;\n let levels = [];\n for (var i = 0; i <= last; i++) {\n let node = data.nodes[i];\n var previous = levels[node.level];\n if (previous == undefined) {\n previous = -1;\n }\n var trials = node.trials;\n if (trials == undefined) {\n trials = [];\n }\n levels[node.level] = Math.max(previous, trials.length);\n }\n let levelsy = [];\n var current = margin;\n for (var i = 0; i <= levels.length; i++) {\n levelsy[i] = current;\n current += spacing2 + levels[i] * spacing2;\n }\n for (var i = 0; i <= last; i++) {\n let node = data.nodes[i];\n let x = start + spacing4 * id;\n let y = levelsy[node.level];\n var new_node = {\n id: id,\n display: node.display,\n x: x,\n y: y,\n title: node.id.toString(),\n info: node,\n radius: this.config.radius,\n gradient: false,\n status: node.status\n };\n nodes.push(new_node);\n if (typeof (node.trials) != \"undefined\") {\n useVersion = true;\n for (var j = 0; j < node.trials.length; j++) {\n let trialNode = node.trials[j];\n let ny = y + (j + 1) * spacing2 + spacing;\n otherNodes.push({\n id: tid,\n display: trialNode.display,\n x: x + this.config.radius / 2,\n y: ny,\n title: trialNode.id.toString(),\n info: trialNode,\n tooltip: trialNode.tooltip,\n radius: this.config.radius / 2,\n gradient: true,\n status: trialNode.status\n });\n tid += 1;\n max = Math.max(max, y);\n }\n }\n else {\n new_node.tooltip = node.tooltip;\n }\n max = Math.max(max, y);\n this.maxX = x;\n id += 1;\n }\n max += spacing2;\n this.maxY = max;\n this.maxId = Math.max(tid, id);\n for (var i = 0; i < data.edges.length; i++) {\n let edge = Object.assign({}, data.edges[i]);\n edge.id = edge.source + \"-\" + edge.target;\n edge.source = nodes[edge.source];\n edge.target = nodes[edge.target];\n if (edge.source != edge.target) {\n edges.push(edge);\n }\n }\n if (useVersion) {\n this.nodes = otherNodes;\n this.versionNodes = nodes;\n }\n else {\n this.nodes = nodes;\n this.versionNodes = [];\n }\n this.edges = edges;\n this.updateWindow();\n this.restorePosition();\n this.update();\n this.menuOnRightClick();\n return nodes;\n }\n updateWindow() {\n let size = this.config.customSize(this);\n this.config.width = size[0];\n this.config.height = size[1];\n this.svg\n .attr(\"width\", size[0])\n .attr(\"height\", size[1]);\n }\n update() {\n var nodes = this.g.selectAll('g.node')\n .data(this.nodes, (d) => d.id);\n var edges = this.g.selectAll('g.link')\n .data(this.edges, (d) => d.id);\n var version = this.g.selectAll('g.version')\n .data(this.versionNodes, (d) => d.id);\n this.updateNodes(nodes);\n this.updateVersionNodes(version);\n this.updateLinks(edges);\n }\n restorePosition() {\n let scale = this.config.height / this.maxY;\n if (scale <= 1.0) {\n this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity\n .translate(this.config.width\n - this.maxX * scale\n - this.config.margin, 0)\n .scale(scale));\n }\n else {\n this.svg.call(this.zoom.transform, d3_zoom_1.zoomIdentity\n .scale(1)\n .translate(this.config.width\n - this.maxX\n - this.config.margin, 0));\n }\n this.state.justScale = false;\n }\n selectNode(node) {\n this.state.selectedNode = node;\n this.config.customSelectNode(this, node);\n this.svg.selectAll('.node[attr-trial=\"' + node.title + '\"] > rect')\n .attr('stroke', 'rgb(200, 238, 241)')\n .classed('selected', true);\n }\n selectTrial(trialId) {\n for (var node of this.nodes) {\n if (node.title == trialId) {\n this.selectNode(node);\n return;\n }\n }\n }\n download(name) {\n var isFileSaverSupported = false;\n try {\n isFileSaverSupported = !!new Blob();\n }\n catch (e) {\n alert(\"blob not supported\");\n }\n name = (name === undefined) ? \"history.svg\" : name;\n let gnode = this.g.node();\n var bbox = gnode.getBBox();\n var width = this.svg.attr(\"width\"), height = this.svg.attr(\"height\");\n this.g.attr(\"transform\", \"translate(\" + (-bbox.x + 5) + \", \" + (-bbox.y + 5) + \")\");\n let svgNode = this.svg\n .attr(\"title\", \"Trial\")\n .attr(\"version\", 1.1)\n .attr(\"width\", bbox.width + 10)\n .attr(\"height\", bbox.height + 10)\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node();\n var html = svgNode.parentNode.innerHTML;\n html = ' {\n if (this.state.selectedNode == null) {\n return false;\n }\n return cd.id === this.state.selectedNode.id;\n }).select('rect')\n .classed('selected', false)\n .attr(\"stroke\", \"#000\");\n this.state.selectedNode = null;\n }\n nodeMouseDown(event, d3node, d) {\n event.stopPropagation();\n this.state.mouseDownNode = d;\n this.closeTooltip();\n }\n nodeMouseUp(event, d3node, d) {\n event.stopPropagation();\n if (!this.state.mouseDownNode) {\n return;\n }\n if (this.state.justScale) {\n this.state.justScale = false;\n }\n else {\n if (event.ctrlKey || event.shiftKey || event.altKey) {\n this.config.customCtrlClick(this, d);\n return;\n }\n if (this.state.selectedNode) {\n this.unselectNode();\n }\n d3node\n .attr('stroke', 'rgb(200, 238, 241)')\n .classed('selected', true);\n this.state.selectedNode = d;\n this.config.customSelectNode(this, d);\n }\n this.state.mouseDownNode = null;\n }\n svgMouseUp() {\n if (this.state.justScale) {\n this.state.justScale = false;\n }\n }\n updateVersionNodes(nodes) {\n var nodeEnter = nodes.enter().append(\"g\")\n .classed(\"version\", true)\n .attr(\"attr-trialid\", (d) => d.title)\n .attr(\"transform\", (d) => {\n return \"translate(\" + 0 + \",\" + 0 + \")\";\n });\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n })\n .attr('width', (d) => 2 * d.radius)\n .attr('height', (d) => 2 * d.radius)\n .attr('rx', 0)\n .attr('ry', 0)\n //.attr('r', )\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\")\n .attr(\"fill\", \"#F6FBFF\")\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\");\n nodeEnter.append('text')\n .classed('trial-id', true)\n .attr('font-family', 'sans-serif')\n .attr('font-size', this.config.fontSize + 'px')\n .attr('pointer-events', 'none')\n .attr('x', (d) => d.radius)\n .attr('y', (d) => d.radius + 4)\n .attr('stroke', '#000')\n .attr('text-anchor', 'middle')\n //.attr('font-weight', 'bold')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }).text((d) => d.display);\n nodeEnter.merge(nodes); // nodeUpdate\n nodes.exit().remove(); // nodeExit\n }\n updateNodes(nodes) {\n let self = this;\n var nodeEnter = nodes.enter().append(\"g\")\n .classed(\"node\", true)\n .attr(\"attr-trialid\", (d) => d.title)\n .attr(\"cursor\", \"pointer\")\n .attr(\"transform\", (d) => {\n return \"translate(\" + 0 + \",\" + 0 + \")\";\n });\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n })\n .attr('cursor', 'pointer')\n .attr('title', (d) => d.info.display)\n .attr('width', (d) => 2 * d.radius)\n .attr('height', (d) => 2 * d.radius)\n .attr('rx', (d) => 2 * d.radius)\n .attr('ry', (d) => 2 * d.radius)\n //.attr('r', )\n .attr(\"stroke\", \"#000\")\n .attr(\"stroke-width\", \"2.5px\")\n .attr(\"fill\", function (d) {\n var proportion = Math.round(200 * (1.0 - (parseInt(d.title) / self.maxId)) + 50);\n if (d.status === 'unfinished') {\n return d.gradient ? (0, d3_color_1.rgb)(255, proportion, proportion, 255).toString() : \"rgb(238, 200, 241)\";\n }\n if (d.status === 'finished') {\n return d.gradient ? (0, d3_color_1.rgb)(proportion, proportion, proportion, 255).toString() : \"#F6FBFF\";\n }\n if (d.status === 'backup') {\n return d.gradient ? (0, d3_color_1.rgb)(255, 255, proportion, 255).toString() : \"rgb(241, 238, 200)\";\n }\n return '#666';\n })\n .attr(\"stroke\", function (d) {\n return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : \"#000\";\n })\n .attr(\"stroke-width\", \"2.5px\")\n .on('mousedown', function (event, d) {\n self.nodeMouseDown(event, (0, d3_selection_1.select)(this), d);\n }).on('click', function (event, d) {\n self.nodeMouseUp(event, (0, d3_selection_1.select)(this), d);\n }).on('mouseover', function (event, d) {\n if (!self.state.mouseDownNode && self.config.useTooltip) {\n self.closeTooltip();\n self.showTooltip(event, d);\n }\n (0, d3_selection_1.select)(this)\n .attr('stroke', 'rgb(200, 238, 241)');\n }).on('mouseout', function (event, d) {\n (0, d3_selection_1.select)(this)\n .attr(\"stroke\", (d) => {\n return ((0, d3_selection_1.select)(this).classed('selected')) ? 'rgb(200, 238, 241)' : \"#000\";\n });\n })\n .classed(\"custom-menu\", true);\n nodeEnter.append('text')\n .classed('trial-id', true)\n .attr('font-family', 'sans-serif')\n .attr('font-size', this.config.fontSize + 'px')\n .attr('pointer-events', 'none')\n .attr('x', (d) => d.radius)\n .attr('y', (d) => d.radius + 4)\n .attr('stroke', '#000')\n .attr('text-anchor', 'middle')\n //.attr('font-weight', 'bold')\n .attr(\"transform\", (d) => {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n }).text((d) => d.gradient ? \"\" : d.display);\n nodeEnter.merge(nodes); // nodeUpdate\n nodes.exit().remove(); // nodeExit\n }\n updateLinks(link) {\n // Enter any new links\n let colors = (0, d3_scale_1.scaleOrdinal)(d3_scale_chromatic_1.schemeCategory10);\n var linkEnter = link.enter().insert('path', 'g')\n .classed('link', true)\n .attr('cursor', 'crosshair')\n .attr('fill', 'none')\n .attr('stroke', '#000')\n .attr('stroke-width', '4px');\n linkEnter\n .attr(\"d\", (d) => {\n var deltaX = d.target.x - d.source.x, deltaY = d.target.y - d.source.y, dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY), normX = deltaX / dist, normY = deltaY / dist, sourcePadding = this.config.radius - 5, targetPadding = this.config.radius + (d.right ? 3 : -5), sourceX = d.source.x + this.config.radius + (sourcePadding * normX), sourceY = d.source.y + this.config.radius + (sourcePadding * normY), targetX = d.target.x + this.config.radius - (targetPadding * normX), targetY = d.target.y + this.config.radius - (targetPadding * normY);\n var step = 0;\n if (d.level > 0) {\n step += this.config.moveY;\n step += (d.level - 1) * this.config.moveY2;\n }\n return `M ${sourceX}, ${sourceY}\n C ${(sourceX - this.config.moveX / 2)} ${sourceY}\n ${(sourceX - this.config.moveX / 2)} ${(sourceY + 3 * step / 4)}\n ${(sourceX - this.config.moveX)} ${(sourceY + step)}\n L ${(sourceX - this.config.moveX)} ${(sourceY + step)}\n ${(targetX + this.config.moveX)} ${(sourceY + step)}\n C ${(targetX + this.config.moveX / 2)} ${(sourceY + 3 * step / 4)}\n ${(targetX + this.config.moveX / 2)} ${sourceY}\n ${targetX}, ${targetY}`;\n })\n .attr('marker-end', (d) => {\n return d.right ? 'url(#end-arrow)' : '';\n })\n .attr('stroke', (d) => {\n return (0, d3_color_1.rgb)(colors(d.level.toString())).darker().toString();\n });\n // Update\n linkEnter.merge(link); // linkUpdate\n // Remove any exiting links\n link.exit().remove(); // linkExit\n }\n zoomFunction(event) {\n this.state.justScale = true;\n this.closeTooltip();\n this.transform = event.transform;\n this.g.attr(\"transform\", event.transform);\n }\n _graphId() {\n return \"history-graph-\" + this.graphId;\n }\n menuOnRightClick() {\n let rightClickMenu = document.getElementById(\"context-menu\");\n // Set up an event handler for the documnt right click\n document.addEventListener(\"contextmenu\", function (event) {\n var _a;\n //open right click menu\n let target = event.target;\n if (target && target.classList.contains(\"custom-menu\")) {\n event.preventDefault();\n if (rightClickMenu) {\n rightClickMenu.setAttribute(\"selected-trial\", (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute(\"attr-trialid\"));\n rightClickMenu.setAttribute(\"selected-trial-simplified\", target.getAttribute(\"title\"));\n rightClickMenu.style.top = (event.pageY - 10).toString();\n rightClickMenu.style.left = (event.pageX - 90).toString();\n rightClickMenu.style.display = \"block\";\n rightClickMenu.classList.add(\"show\");\n }\n }\n });\n // close the menu\n document.addEventListener(\"click\", function (event) {\n if (rightClickMenu) {\n rightClickMenu.style.display = \"none\";\n rightClickMenu.classList.remove(\"show\");\n }\n });\n }\n}\nexports.HistoryGraph = HistoryGraph;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./structures\"), exports);\n__exportStar(require(\"./graph\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel .lm-AccordionPanel-title {\n box-sizing: border-box;\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n min-height: 22px;\n max-height: 22px;\n min-width: 35px;\n line-height: 20px;\n margin: 0px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\n background: #dbdbdb;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\n.lm-AccordionPanel\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\n border: 1px solid lightskyblue;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title.lm-mod-expanded\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\\\f0d8';\n font-family: FontAwesome;\n}\n\n.lm-AccordionPanel\n .lm-AccordionPanel-title\n .lm-AccordionPanel-titleCollapser:before {\n content: '\\\\f0d7';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n}\n\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\n padding: 0px 5px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/accordionpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,sBAAsB;EACtB,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,WAAW;AACb;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;;;EAGE,8BAA8B;AAChC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;;;EAGE,gBAAgB;EAChB,wBAAwB;EACxB,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title {\\n box-sizing: border-box;\\n padding: 0px 10px;\\n background: #e5e5e5;\\n border: 1px solid #c0c0c0;\\n border-bottom: none;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n min-height: 22px;\\n max-height: 22px;\\n min-width: 35px;\\n line-height: 20px;\\n margin: 0px;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\\n.lm-AccordionPanel .lm-AccordionPanel-title:hover {\\n background: #dbdbdb;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:focus,\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title:last-of-type:focus:not(.lm-mod-expanded) {\\n border: 1px solid lightskyblue;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-title:last-of-type:not(.lm-mod-expanded) {\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title.lm-mod-expanded\\n .lm-AccordionPanel-titleCollapser:before {\\n content: '\\\\f0d8';\\n font-family: FontAwesome;\\n}\\n\\n.lm-AccordionPanel\\n .lm-AccordionPanel-title\\n .lm-AccordionPanel-titleCollapser:before {\\n content: '\\\\f0d7';\\n font-family: FontAwesome;\\n position: absolute;\\n right: 10px;\\n}\\n\\n.lm-AccordionPanel .lm-AccordionPanel-titleLabel {\\n padding: 0px 5px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n font-family: sans-serif;\n background: #f5f5f5;\n}\n\n.lm-CommandPalette-search {\n padding: 8px;\n}\n\n.lm-CommandPalette-wrapper {\n padding: 4px 6px;\n background: white;\n border: 1px solid #e0e0e0;\n position: relative;\n}\n\n.lm-CommandPalette-input {\n width: 92%;\n border: none;\n outline: none;\n font-size: 16px;\n}\n\n.lm-CommandPalette-header {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n background: #e1e1e1;\n cursor: pointer;\n}\n\n.lm-CommandPalette-header:hover::before {\n content: '\\\\2026'; /* ellipsis */\n float: right;\n margin-right: 4px;\n}\n\n.lm-CommandPalette-header > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item {\n padding: 4px 8px;\n color: #757575;\n font-size: 13px;\n font-weight: 500;\n}\n\n.lm-CommandPalette-emptyMessage {\n padding: 4px;\n color: #757575;\n font-size: 12px;\n font-weight: 600;\n text-align: center;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-CommandPalette-item.lm-mod-active {\n background: #7fdbff;\n}\n\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\n background: #e5e5e5;\n}\n\n.lm-CommandPalette-itemIcon {\n display: none;\n}\n\n.lm-CommandPalette-itemLabel > mark {\n background-color: transparent;\n font-weight: bold;\n}\n\n.lm-CommandPalette-item.lm-mod-disabled mark {\n color: rgba(0, 0, 0, 0.4);\n}\n\n.lm-CommandPalette-itemCaption {\n color: #9e9e9e;\n font-size: 11px;\n font-weight: 400;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;AACjB;;AAEA;EACE,gBAAgB,EAAE,aAAa;EAC/B,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,iBAAiB;AACnB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n font-family: sans-serif;\\n background: #f5f5f5;\\n}\\n\\n.lm-CommandPalette-search {\\n padding: 8px;\\n}\\n\\n.lm-CommandPalette-wrapper {\\n padding: 4px 6px;\\n background: white;\\n border: 1px solid #e0e0e0;\\n position: relative;\\n}\\n\\n.lm-CommandPalette-input {\\n width: 92%;\\n border: none;\\n outline: none;\\n font-size: 16px;\\n}\\n\\n.lm-CommandPalette-header {\\n padding: 4px;\\n color: #757575;\\n font-size: 12px;\\n font-weight: 600;\\n background: #e1e1e1;\\n cursor: pointer;\\n}\\n\\n.lm-CommandPalette-header:hover::before {\\n content: '\\\\2026'; /* ellipsis */\\n float: right;\\n margin-right: 4px;\\n}\\n\\n.lm-CommandPalette-header > mark {\\n background-color: transparent;\\n font-weight: bold;\\n}\\n\\n.lm-CommandPalette-item {\\n padding: 4px 8px;\\n color: #757575;\\n font-size: 13px;\\n font-weight: 500;\\n}\\n\\n.lm-CommandPalette-emptyMessage {\\n padding: 4px;\\n color: #757575;\\n font-size: 12px;\\n font-weight: 600;\\n text-align: center;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled {\\n color: rgba(0, 0, 0, 0.25);\\n}\\n\\n.lm-CommandPalette-item.lm-mod-active {\\n background: #7fdbff;\\n}\\n\\n.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {\\n background: #e5e5e5;\\n}\\n\\n.lm-CommandPalette-itemIcon {\\n display: none;\\n}\\n\\n.lm-CommandPalette-itemLabel > mark {\\n background-color: transparent;\\n font-weight: bold;\\n}\\n\\n.lm-CommandPalette-item.lm-mod-disabled mark {\\n color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.lm-CommandPalette-itemCaption {\\n color: #9e9e9e;\\n font-size: 11px;\\n font-weight: 400;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DataGrid {\n min-width: 64px;\n min-height: 64px;\n border: 1px solid #a0a0a0;\n}\n\n.lm-DataGrid-scrollCorner {\n background-color: #f0f0f0;\n}\n\n.lm-DataGrid-scrollCorner::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n background-color: #a0a0a0;\n}\n\n.lm-DataGrid-cellEditorOccluder {\n pointer-events: none;\n position: absolute;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorContainer {\n pointer-events: auto;\n position: absolute;\n background-color: #ffffff;\n box-sizing: border-box;\n box-shadow: 0px 0px 6px #006bf7;\n border: 2px solid #006bf7;\n}\n\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\n box-shadow: 0px 0px 6px red;\n border: 2px solid red;\n}\n\n.lm-DataGrid-cellEditorContainer > form {\n width: 100%;\n height: 100%;\n overflow: hidden;\n}\n\n.lm-DataGrid-cellEditorWidget {\n width: 100%;\n height: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n.lm-DataGrid-cellEditorInput {\n background-color: #ffffff;\n border: 0;\n}\n\n.lm-DataGrid-cellEditorCheckbox {\n margin: 0;\n}\n\n.lm-DataGrid-notification {\n position: absolute;\n display: flex;\n overflow: visible;\n animation: fade-in 300ms ease-out;\n}\n\n.lm-DataGrid-notificationContainer {\n box-shadow: 0px 2px 5px #999999;\n border-radius: 3px;\n background-color: white;\n color: black;\n border: 1px solid black;\n font-family: sans-serif;\n font-size: 13px;\n padding: 4px;\n}\n\n@keyframes fade-in {\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n opacity: 1;\n }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/datagrid.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E;;AAE9E;EACE,eAAe;EACf,gBAAgB;EAChB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,UAAU;EACV,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,yBAAyB;EACzB,sBAAsB;EACtB,+BAA+B;EAC/B,yBAAyB;AAC3B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,yBAAyB;EACzB,SAAS;AACX;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,iCAAiC;AACnC;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,uBAAuB;EACvB,YAAY;EACZ,uBAAuB;EACvB,uBAAuB;EACvB,eAAe;EACf,YAAY;AACd;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,YAAY;EACd;EACA;IACE,UAAU;EACZ;AACF\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) 2014-2018, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DataGrid {\\n min-width: 64px;\\n min-height: 64px;\\n border: 1px solid #a0a0a0;\\n}\\n\\n.lm-DataGrid-scrollCorner {\\n background-color: #f0f0f0;\\n}\\n\\n.lm-DataGrid-scrollCorner::after {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 1px;\\n height: 1px;\\n background-color: #a0a0a0;\\n}\\n\\n.lm-DataGrid-cellEditorOccluder {\\n pointer-events: none;\\n position: absolute;\\n overflow: hidden;\\n}\\n\\n.lm-DataGrid-cellEditorContainer {\\n pointer-events: auto;\\n position: absolute;\\n background-color: #ffffff;\\n box-sizing: border-box;\\n box-shadow: 0px 0px 6px #006bf7;\\n border: 2px solid #006bf7;\\n}\\n\\n.lm-DataGrid-cellEditorContainer.lm-mod-invalid {\\n box-shadow: 0px 0px 6px red;\\n border: 2px solid red;\\n}\\n\\n.lm-DataGrid-cellEditorContainer > form {\\n width: 100%;\\n height: 100%;\\n overflow: hidden;\\n}\\n\\n.lm-DataGrid-cellEditorWidget {\\n width: 100%;\\n height: 100%;\\n outline: none;\\n box-sizing: border-box;\\n}\\n\\n.lm-DataGrid-cellEditorInput {\\n background-color: #ffffff;\\n border: 0;\\n}\\n\\n.lm-DataGrid-cellEditorCheckbox {\\n margin: 0;\\n}\\n\\n.lm-DataGrid-notification {\\n position: absolute;\\n display: flex;\\n overflow: visible;\\n animation: fade-in 300ms ease-out;\\n}\\n\\n.lm-DataGrid-notificationContainer {\\n box-shadow: 0px 2px 5px #999999;\\n border-radius: 3px;\\n background-color: white;\\n color: black;\\n border: 1px solid black;\\n font-family: sans-serif;\\n font-size: 13px;\\n padding: 4px;\\n}\\n\\n@keyframes fade-in {\\n 0% {\\n opacity: 0;\\n }\\n 50% {\\n opacity: 0.7;\\n }\\n 100% {\\n opacity: 1;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel-overlay {\\n background: rgba(255, 255, 255, 0.6);\\n border: 1px dashed black;\\n transition-property: top, left, right, bottom;\\n transition-duration: 150ms;\\n transition-timing-function: ease;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../dragdrop/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!../../widgets/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./datagrid.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) 2014-2018, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;8EAM8E\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) 2014-2018, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n@import '@lumino/dragdrop/style/index.css';\\n@import '@lumino/widgets/style/index.css';\\n@import './accordionpanel.css';\\n@import './commandpalette.css';\\n@import './datagrid.css';\\n@import './dockpanel.css';\\n@import './menu.css';\\n@import './menubar.css';\\n@import './scrollbar.css';\\n@import './tabbar.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n padding: 3px 0px;\n background: white;\n color: rgba(0, 0, 0, 0.87);\n border: 1px solid #c0c0c0;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-Menu-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-Menu-item.lm-mod-disabled {\n color: rgba(0, 0, 0, 0.25);\n}\n\n.lm-Menu-itemIcon {\n width: 21px;\n padding: 4px 2px;\n}\n\n.lm-Menu-itemLabel {\n padding: 4px 35px 4px 2px;\n}\n\n.lm-Menu-itemMnemonic {\n text-decoration: underline;\n}\n\n.lm-Menu-itemShortcut {\n padding: 4px 0px;\n}\n\n.lm-Menu-itemSubmenuIcon {\n width: 16px;\n padding: 4px 0px;\n}\n\n.lm-Menu-item[data-type='separator'] > div {\n padding: 0;\n height: 9px;\n}\n\n.lm-Menu-item[data-type='separator'] > div::after {\n content: '';\n display: block;\n position: relative;\n top: 4px;\n border-top: 1px solid #dddddd;\n}\n\n.lm-Menu-itemIcon::before,\n.lm-Menu-itemSubmenuIcon::before {\n font-family: FontAwesome;\n}\n\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\n content: '\\\\f00c';\n}\n\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\n content: '\\\\f0da';\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;EAC1B,yBAAyB;EACzB;;;cAGY;EACZ,0CAA0C;AAC5C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,WAAW;AACb;;AAEA;EACE,WAAW;EACX,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,6BAA6B;AAC/B;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n padding: 3px 0px;\\n background: white;\\n color: rgba(0, 0, 0, 0.87);\\n border: 1px solid #c0c0c0;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\\n}\\n\\n.lm-Menu-item.lm-mod-active {\\n background: #e5e5e5;\\n}\\n\\n.lm-Menu-item.lm-mod-disabled {\\n color: rgba(0, 0, 0, 0.25);\\n}\\n\\n.lm-Menu-itemIcon {\\n width: 21px;\\n padding: 4px 2px;\\n}\\n\\n.lm-Menu-itemLabel {\\n padding: 4px 35px 4px 2px;\\n}\\n\\n.lm-Menu-itemMnemonic {\\n text-decoration: underline;\\n}\\n\\n.lm-Menu-itemShortcut {\\n padding: 4px 0px;\\n}\\n\\n.lm-Menu-itemSubmenuIcon {\\n width: 16px;\\n padding: 4px 0px;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div {\\n padding: 0;\\n height: 9px;\\n}\\n\\n.lm-Menu-item[data-type='separator'] > div::after {\\n content: '';\\n display: block;\\n position: relative;\\n top: 4px;\\n border-top: 1px solid #dddddd;\\n}\\n\\n.lm-Menu-itemIcon::before,\\n.lm-Menu-itemSubmenuIcon::before {\\n font-family: FontAwesome;\\n}\\n\\n.lm-Menu-item.lm-mod-toggled > .lm-Menu-itemIcon::before {\\n content: '\\\\f00c';\\n}\\n\\n.lm-Menu-item[data-type='submenu'] > .lm-Menu-itemSubmenuIcon::before {\\n content: '\\\\f0da';\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n padding-left: 5px;\n background: #fafafa;\n color: rgba(0, 0, 0, 0.87);\n border-bottom: 1px solid #dddddd;\n font:\n 13px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-MenuBar-menu {\n transform: translateY(-1px);\n}\n\n.lm-MenuBar-item {\n padding: 4px 8px;\n border-left: 1px solid transparent;\n border-right: 1px solid transparent;\n}\n\n.lm-MenuBar-item.lm-mod-active {\n background: #e5e5e5;\n}\n\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\n z-index: 10001;\n background: white;\n border-left: 1px solid #c0c0c0;\n border-right: 1px solid #c0c0c0;\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\n}\n\n.lm-MenuBar-item:focus-visible {\n outline: 2px solid #333;\n outline-offset: -2px;\n}\n\n.lm-MenuBar-item[aria-disabled='true'] {\n color: rgba(0, 0, 0, 0.37);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/menubar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,iBAAiB;EACjB,mBAAmB;EACnB,0BAA0B;EAC1B,gCAAgC;EAChC;;;cAGY;AACd;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,kCAAkC;EAClC,mCAAmC;AACrC;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;EACd,iBAAiB;EACjB,8BAA8B;EAC9B,+BAA+B;EAC/B,0CAA0C;AAC5C;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,0BAA0B;AAC5B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n padding-left: 5px;\\n background: #fafafa;\\n color: rgba(0, 0, 0, 0.87);\\n border-bottom: 1px solid #dddddd;\\n font:\\n 13px Helvetica,\\n Arial,\\n sans-serif;\\n}\\n\\n.lm-MenuBar-menu {\\n transform: translateY(-1px);\\n}\\n\\n.lm-MenuBar-item {\\n padding: 4px 8px;\\n border-left: 1px solid transparent;\\n border-right: 1px solid transparent;\\n}\\n\\n.lm-MenuBar-item.lm-mod-active {\\n background: #e5e5e5;\\n}\\n\\n.lm-MenuBar.lm-mod-active .lm-MenuBar-item.lm-mod-active {\\n z-index: 10001;\\n background: white;\\n border-left: 1px solid #c0c0c0;\\n border-right: 1px solid #c0c0c0;\\n box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);\\n}\\n\\n.lm-MenuBar-item:focus-visible {\\n outline: 2px solid #333;\\n outline-offset: -2px;\\n}\\n\\n.lm-MenuBar-item[aria-disabled='true'] {\\n color: rgba(0, 0, 0, 0.37);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/caretleft.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"../images/caretright.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"../images/caretup.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"../images/caretdown.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n min-height: 16px;\n max-height: 16px;\n min-width: 45px;\n border-top: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n min-width: 16px;\n max-width: 16px;\n min-height: 45px;\n border-left: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar-button {\n background-color: #f0f0f0;\n background-position: center center;\n min-height: 15px;\n max-height: 15px;\n min-width: 15px;\n max-width: 15px;\n}\n\n.lm-ScrollBar-button:hover {\n background-color: #dadada;\n}\n\n.lm-ScrollBar-button.lm-mod-active {\n background-color: #cdcdcd;\n}\n\n.lm-ScrollBar-track {\n background: #f0f0f0;\n}\n\n.lm-ScrollBar-thumb {\n background: #cdcdcd;\n}\n\n.lm-ScrollBar-thumb:hover {\n background: #bababa;\n}\n\n.lm-ScrollBar-thumb.lm-mod-active {\n background: #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\n height: 100%;\n min-width: 15px;\n border-left: 1px solid #a0a0a0;\n border-right: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\n width: 100%;\n min-height: 15px;\n border-top: 1px solid #a0a0a0;\n border-bottom: 1px solid #a0a0a0;\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___});\n}\n\n.lm-ScrollBar[data-orientation='horizontal']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___});\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='decrement'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___});\n}\n\n.lm-ScrollBar[data-orientation='vertical']\n .lm-ScrollBar-button[data-action='increment'] {\n background-image: url(${___CSS_LOADER_URL_REPLACEMENT_3___});\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,8BAA8B;AAChC;;AAEA;EACE,yBAAyB;EACzB,kCAAkC;EAClC,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,eAAe;AACjB;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,6BAA6B;EAC7B,gCAAgC;AAClC;;AAEA;;EAEE,yDAA8C;AAChD;;AAEA;;EAEE,yDAA+C;AACjD;;AAEA;;EAEE,yDAA4C;AAC9C;;AAEA;;EAEE,yDAA8C;AAChD\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n min-height: 16px;\\n max-height: 16px;\\n min-width: 45px;\\n border-top: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n min-width: 16px;\\n max-width: 16px;\\n min-height: 45px;\\n border-left: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar-button {\\n background-color: #f0f0f0;\\n background-position: center center;\\n min-height: 15px;\\n max-height: 15px;\\n min-width: 15px;\\n max-width: 15px;\\n}\\n\\n.lm-ScrollBar-button:hover {\\n background-color: #dadada;\\n}\\n\\n.lm-ScrollBar-button.lm-mod-active {\\n background-color: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-track {\\n background: #f0f0f0;\\n}\\n\\n.lm-ScrollBar-thumb {\\n background: #cdcdcd;\\n}\\n\\n.lm-ScrollBar-thumb:hover {\\n background: #bababa;\\n}\\n\\n.lm-ScrollBar-thumb.lm-mod-active {\\n background: #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {\\n height: 100%;\\n min-width: 15px;\\n border-left: 1px solid #a0a0a0;\\n border-right: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {\\n width: 100%;\\n min-height: 15px;\\n border-top: 1px solid #a0a0a0;\\n border-bottom: 1px solid #a0a0a0;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n .lm-ScrollBar-button[data-action='decrement'] {\\n background-image: url(../images/caretleft.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal']\\n .lm-ScrollBar-button[data-action='increment'] {\\n background-image: url(../images/caretright.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n .lm-ScrollBar-button[data-action='decrement'] {\\n background-image: url(../images/caretup.png);\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical']\\n .lm-ScrollBar-button[data-action='increment'] {\\n background-image: url(../images/caretdown.png);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.lm-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab {\n padding: 0px 10px;\n background: #e5e5e5;\n border: 1px solid #c0c0c0;\n border-bottom: none;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n flex: 0 1 125px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n padding: 0px;\n border: 0px;\n font:\n 12px Helvetica,\n Arial,\n sans-serif;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n background: white;\n}\n\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\n background: #f0f0f0;\n}\n\n.lm-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n.lm-TabBar-tab.lm-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabLabel,\n.lm-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n.lm-TabBar .lm-TabBar-addButton {\n padding: 0px 6px;\n border-bottom: 1px solid #c0c0c0;\n}\n\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\n content: '\\\\f00d';\n font-family: FontAwesome;\n}\n\n.lm-TabBar .lm-TabBar-addButton:before {\n content: '\\\\f067';\n font-family: FontAwesome;\n}\n\n.lm-TabBar-tab.lm-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/default-theme/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB;;;cAGY;EACZ,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,WAAW;EACX;;;cAGY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;AAEA;;;EAGE,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,gCAAgC;AAClC;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;AAEA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;AAC5C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar {\\n min-height: 24px;\\n max-height: 24px;\\n}\\n\\n.lm-TabBar-content {\\n min-width: 0;\\n min-height: 0;\\n align-items: flex-end;\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-TabBar-tab {\\n padding: 0px 10px;\\n background: #e5e5e5;\\n border: 1px solid #c0c0c0;\\n border-bottom: none;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n flex: 0 1 125px;\\n min-height: 20px;\\n max-height: 20px;\\n min-width: 35px;\\n margin-left: -1px;\\n line-height: 20px;\\n}\\n\\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\\n padding: 0px;\\n border: 0px;\\n font:\\n 12px Helvetica,\\n Arial,\\n sans-serif;\\n}\\n\\n.lm-TabBar-tab.lm-mod-current {\\n background: white;\\n}\\n\\n.lm-TabBar-tab:hover:not(.lm-mod-current) {\\n background: #f0f0f0;\\n}\\n\\n.lm-TabBar-tab:first-child {\\n margin-left: 0;\\n}\\n\\n.lm-TabBar-tab.lm-mod-current {\\n min-height: 23px;\\n max-height: 23px;\\n transform: translateY(1px);\\n}\\n\\n.lm-TabBar-tabIcon,\\n.lm-TabBar-tabLabel,\\n.lm-TabBar-tabCloseIcon {\\n display: inline-block;\\n}\\n\\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {\\n margin-left: 4px;\\n}\\n\\n.lm-TabBar .lm-TabBar-addButton {\\n padding: 0px 6px;\\n border-bottom: 1px solid #c0c0c0;\\n}\\n\\n.lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon:before {\\n content: '\\\\f00d';\\n font-family: FontAwesome;\\n}\\n\\n.lm-TabBar .lm-TabBar-addButton:before {\\n content: '\\\\f067';\\n font-family: FontAwesome;\\n}\\n\\n.lm-TabBar-tab.lm-mod-drag-image {\\n min-height: 23px;\\n max-height: 23px;\\n min-width: 125px;\\n border: none;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-cursor-backdrop {\n top: 0px;\n left: 0px;\n position: fixed;\n width: 200px;\n height: 200px;\n margin-top: -100px;\n margin-left: -100px;\n will-change: transform;\n z-index: 100;\n scrollbar-width: none;\n -ms-overflow-style: none;\n overflow: scroll;\n}\n\n.lm-cursor-backdrop::after {\n content: '';\n height: 1200px;\n width: 1200px;\n display: block;\n}\n\n.lm-cursor-backdrop::-webkit-scrollbar {\n display: none;\n}\n\n.lm-mod-drag-image {\n top: 0px;\n left: 0px;\n will-change: transform;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/dragdrop/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,QAAQ;EACR,SAAS;EACT,eAAe;EACf,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,qBAAqB;EACrB,wBAAwB;EACxB,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,cAAc;EACd,aAAa;EACb,cAAc;AAChB;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,QAAQ;EACR,SAAS;EACT,sBAAsB;AACxB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-cursor-backdrop {\\n top: 0px;\\n left: 0px;\\n position: fixed;\\n width: 200px;\\n height: 200px;\\n margin-top: -100px;\\n margin-left: -100px;\\n will-change: transform;\\n z-index: 100;\\n scrollbar-width: none;\\n -ms-overflow-style: none;\\n overflow: scroll;\\n}\\n\\n.lm-cursor-backdrop::after {\\n content: '';\\n height: 1200px;\\n width: 1200px;\\n display: block;\\n}\\n\\n.lm-cursor-backdrop::-webkit-scrollbar {\\n display: none;\\n}\\n\\n.lm-mod-drag-image {\\n top: 0px;\\n left: 0px;\\n will-change: transform;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\n /* Title is rotated for horizontal accordion panel using CSS */\n display: block;\n transform-origin: top left;\n transform: rotate(-90deg) translate(-100%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/accordionpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,8DAA8D;EAC9D,cAAc;EACd,0BAA0B;EAC1B,0CAA0C;AAC5C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {\\n /* Title is rotated for horizontal accordion panel using CSS */\\n display: block;\\n transform-origin: top left;\\n transform: rotate(-90deg) translate(-100%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-CommandPalette {\n display: flex;\n flex-direction: column;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-CommandPalette-search {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-content {\n flex: 1 1 auto;\n margin: 0;\n padding: 0;\n min-height: 0;\n overflow: auto;\n list-style-type: none;\n}\n\n.lm-CommandPalette-header {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-CommandPalette-item {\n display: flex;\n flex-direction: row;\n}\n\n.lm-CommandPalette-itemIcon {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemContent {\n flex: 1 1 auto;\n overflow: hidden;\n}\n\n.lm-CommandPalette-itemShortcut {\n flex: 0 0 auto;\n}\n\n.lm-CommandPalette-itemLabel {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.lm-close-icon {\n border: 1px solid transparent;\n background-color: transparent;\n position: absolute;\n z-index: 1;\n right: 3%;\n top: 0;\n bottom: 0;\n margin: auto;\n padding: 7px 0;\n display: none;\n vertical-align: middle;\n outline: 0;\n cursor: pointer;\n}\n.lm-close-icon:after {\n content: 'X';\n display: block;\n width: 15px;\n height: 15px;\n text-align: center;\n color: #000;\n font-weight: normal;\n font-size: 12px;\n cursor: pointer;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/commandpalette.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,sBAAsB;EACtB,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,6BAA6B;EAC7B,6BAA6B;EAC7B,kBAAkB;EAClB,UAAU;EACV,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACZ,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,UAAU;EACV,eAAe;AACjB;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,eAAe;AACjB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-CommandPalette {\\n display: flex;\\n flex-direction: column;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-CommandPalette-search {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-content {\\n flex: 1 1 auto;\\n margin: 0;\\n padding: 0;\\n min-height: 0;\\n overflow: auto;\\n list-style-type: none;\\n}\\n\\n.lm-CommandPalette-header {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n\\n.lm-CommandPalette-item {\\n display: flex;\\n flex-direction: row;\\n}\\n\\n.lm-CommandPalette-itemIcon {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemContent {\\n flex: 1 1 auto;\\n overflow: hidden;\\n}\\n\\n.lm-CommandPalette-itemShortcut {\\n flex: 0 0 auto;\\n}\\n\\n.lm-CommandPalette-itemLabel {\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n\\n.lm-close-icon {\\n border: 1px solid transparent;\\n background-color: transparent;\\n position: absolute;\\n z-index: 1;\\n right: 3%;\\n top: 0;\\n bottom: 0;\\n margin: auto;\\n padding: 7px 0;\\n display: none;\\n vertical-align: middle;\\n outline: 0;\\n cursor: pointer;\\n}\\n.lm-close-icon:after {\\n content: 'X';\\n display: block;\\n width: 15px;\\n height: 15px;\\n text-align: center;\\n color: #000;\\n font-weight: normal;\\n font-size: 12px;\\n cursor: pointer;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-DockPanel {\n z-index: 0;\n}\n\n.lm-DockPanel-widget {\n z-index: 0;\n}\n\n.lm-DockPanel-tabBar {\n z-index: 1;\n}\n\n.lm-DockPanel-handle {\n z-index: 2;\n}\n\n.lm-DockPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-DockPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal'] {\n cursor: ew-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='vertical'] {\n cursor: ns-resize;\n}\n\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-DockPanel-handle[data-orientation='vertical']:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n\n.lm-DockPanel-overlay {\n z-index: 3;\n box-sizing: border-box;\n pointer-events: none;\n}\n\n.lm-DockPanel-overlay.lm-mod-hidden {\n display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/dockpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B;;AAEA;EACE,UAAU;EACV,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-DockPanel {\\n z-index: 0;\\n}\\n\\n.lm-DockPanel-widget {\\n z-index: 0;\\n}\\n\\n.lm-DockPanel-tabBar {\\n z-index: 1;\\n}\\n\\n.lm-DockPanel-handle {\\n z-index: 2;\\n}\\n\\n.lm-DockPanel-handle.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-DockPanel-handle:after {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n content: '';\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal'] {\\n cursor: ew-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical'] {\\n cursor: ns-resize;\\n}\\n\\n.lm-DockPanel-handle[data-orientation='horizontal']:after {\\n left: 50%;\\n min-width: 8px;\\n transform: translateX(-50%);\\n}\\n\\n.lm-DockPanel-handle[data-orientation='vertical']:after {\\n top: 50%;\\n min-height: 8px;\\n transform: translateY(-50%);\\n}\\n\\n.lm-DockPanel-overlay {\\n z-index: 3;\\n box-sizing: border-box;\\n pointer-events: none;\\n}\\n\\n.lm-DockPanel-overlay.lm-mod-hidden {\\n display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./widget.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./accordionpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./commandpalette.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./dockpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./menubar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./scrollbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./splitpanel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../../packages/nowvis/node_modules/css-loader/dist/cjs.js!./tabpanel.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n@import './widget.css';\\n@import './accordionpanel.css';\\n@import './commandpalette.css';\\n@import './dockpanel.css';\\n@import './menu.css';\\n@import './menubar.css';\\n@import './scrollbar.css';\\n@import './splitpanel.css';\\n@import './tabbar.css';\\n@import './tabpanel.css';\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Menu {\n z-index: 10000;\n position: absolute;\n white-space: nowrap;\n overflow-x: hidden;\n overflow-y: auto;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-Menu-content {\n margin: 0;\n padding: 0;\n display: table;\n list-style-type: none;\n}\n\n.lm-Menu-item {\n display: table-row;\n}\n\n.lm-Menu-item.lm-mod-hidden,\n.lm-Menu-item.lm-mod-collapsed {\n display: none !important;\n}\n\n.lm-Menu-itemIcon,\n.lm-Menu-itemSubmenuIcon {\n display: table-cell;\n text-align: center;\n}\n\n.lm-Menu-itemLabel {\n display: table-cell;\n text-align: left;\n}\n\n.lm-Menu-itemShortcut {\n display: table-cell;\n text-align: right;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,kBAAkB;EAClB,gBAAgB;EAChB,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;;EAEE,wBAAwB;AAC1B;;AAEA;;EAEE,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,mBAAmB;EACnB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;AACnB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Menu {\\n z-index: 10000;\\n position: absolute;\\n white-space: nowrap;\\n overflow-x: hidden;\\n overflow-y: auto;\\n outline: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-Menu-content {\\n margin: 0;\\n padding: 0;\\n display: table;\\n list-style-type: none;\\n}\\n\\n.lm-Menu-item {\\n display: table-row;\\n}\\n\\n.lm-Menu-item.lm-mod-hidden,\\n.lm-Menu-item.lm-mod-collapsed {\\n display: none !important;\\n}\\n\\n.lm-Menu-itemIcon,\\n.lm-Menu-itemSubmenuIcon {\\n display: table-cell;\\n text-align: center;\\n}\\n\\n.lm-Menu-itemLabel {\\n display: table-cell;\\n text-align: left;\\n}\\n\\n.lm-Menu-itemShortcut {\\n display: table-cell;\\n text-align: right;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-MenuBar {\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-MenuBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: row;\n list-style-type: none;\n}\n\n.lm-MenuBar-item {\n box-sizing: border-box;\n}\n\n.lm-MenuBar-itemIcon,\n.lm-MenuBar-itemLabel {\n display: inline-block;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/menubar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;;EAEE,qBAAqB;AACvB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-MenuBar {\\n outline: none;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-MenuBar-content {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex-direction: row;\\n list-style-type: none;\\n}\\n\\n.lm-MenuBar-item {\\n box-sizing: border-box;\\n}\\n\\n.lm-MenuBar-itemIcon,\\n.lm-MenuBar-itemLabel {\\n display: inline-block;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-ScrollBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-ScrollBar[data-orientation='horizontal'] {\n flex-direction: row;\n}\n\n.lm-ScrollBar[data-orientation='vertical'] {\n flex-direction: column;\n}\n\n.lm-ScrollBar-button {\n box-sizing: border-box;\n flex: 0 0 auto;\n}\n\n.lm-ScrollBar-track {\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n flex: 1 1 auto;\n}\n\n.lm-ScrollBar-thumb {\n box-sizing: border-box;\n position: absolute;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/scrollbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;EAClB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,sBAAsB;EACtB,kBAAkB;AACpB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-ScrollBar {\\n display: flex;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-ScrollBar[data-orientation='horizontal'] {\\n flex-direction: row;\\n}\\n\\n.lm-ScrollBar[data-orientation='vertical'] {\\n flex-direction: column;\\n}\\n\\n.lm-ScrollBar-button {\\n box-sizing: border-box;\\n flex: 0 0 auto;\\n}\\n\\n.lm-ScrollBar-track {\\n box-sizing: border-box;\\n position: relative;\\n overflow: hidden;\\n flex: 1 1 auto;\\n}\\n\\n.lm-ScrollBar-thumb {\\n box-sizing: border-box;\\n position: absolute;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-SplitPanel-child {\n z-index: 0;\n}\n\n.lm-SplitPanel-handle {\n z-index: 1;\n}\n\n.lm-SplitPanel-handle.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-SplitPanel-handle:after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\n cursor: ew-resize;\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\n cursor: ns-resize;\n}\n\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\n left: 50%;\n min-width: 8px;\n transform: translateX(-50%);\n}\n\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\n top: 50%;\n min-height: 8px;\n transform: translateY(-50%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/splitpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;EACT,cAAc;EACd,2BAA2B;AAC7B;;AAEA;EACE,QAAQ;EACR,eAAe;EACf,2BAA2B;AAC7B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-SplitPanel-child {\\n z-index: 0;\\n}\\n\\n.lm-SplitPanel-handle {\\n z-index: 1;\\n}\\n\\n.lm-SplitPanel-handle.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-SplitPanel-handle:after {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n content: '';\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {\\n cursor: ew-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {\\n cursor: ns-resize;\\n}\\n\\n.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {\\n left: 50%;\\n min-width: 8px;\\n transform: translateX(-50%);\\n}\\n\\n.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {\\n top: 50%;\\n min-height: 8px;\\n transform: translateY(-50%);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabBar {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] {\n flex-direction: row;\n align-items: flex-end;\n}\n\n.lm-TabBar[data-orientation='vertical'] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n.lm-TabBar-content {\n margin: 0;\n padding: 0;\n display: flex;\n flex: 1 1 auto;\n list-style-type: none;\n}\n\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\n flex-direction: row;\n}\n\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\n flex-direction: column;\n}\n\n.lm-TabBar-tab {\n display: flex;\n flex-direction: row;\n box-sizing: border-box;\n overflow: hidden;\n touch-action: none; /* Disable native Drag/Drop */\n}\n\n.lm-TabBar-tabIcon,\n.lm-TabBar-tabCloseIcon {\n flex: 0 0 auto;\n}\n\n.lm-TabBar-tabLabel {\n flex: 1 1 auto;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n}\n\n.lm-TabBar-tab.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar-addButton.lm-mod-hidden {\n display: none !important;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\n position: relative;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\n left: 0;\n transition: left 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\n top: 0;\n transition: top 150ms ease;\n}\n\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\n transition: none;\n}\n\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\n user-select: all;\n width: 100%;\n box-sizing: border-box;\n background: inherit;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/tabbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,aAAa;EACb,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AACnB;;AAEA;EACE,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE,sBAAsB;EACtB,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,cAAc;EACd,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,gBAAgB;EAChB,kBAAkB,EAAE,6BAA6B;AACnD;;AAEA;;EAEE,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;AACxB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,OAAO;EACP,2BAA2B;AAC7B;;AAEA;EACE,MAAM;EACN,0BAA0B;AAC5B;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;EACX,sBAAsB;EACtB,mBAAmB;AACrB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabBar {\\n display: flex;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] {\\n flex-direction: row;\\n align-items: flex-end;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] {\\n flex-direction: column;\\n align-items: flex-end;\\n}\\n\\n.lm-TabBar-content {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex: 1 1 auto;\\n list-style-type: none;\\n}\\n\\n.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {\\n flex-direction: row;\\n}\\n\\n.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {\\n flex-direction: column;\\n}\\n\\n.lm-TabBar-tab {\\n display: flex;\\n flex-direction: row;\\n box-sizing: border-box;\\n overflow: hidden;\\n touch-action: none; /* Disable native Drag/Drop */\\n}\\n\\n.lm-TabBar-tabIcon,\\n.lm-TabBar-tabCloseIcon {\\n flex: 0 0 auto;\\n}\\n\\n.lm-TabBar-tabLabel {\\n flex: 1 1 auto;\\n overflow: hidden;\\n white-space: nowrap;\\n}\\n\\n.lm-TabBar-tabInput {\\n user-select: all;\\n width: 100%;\\n box-sizing: border-box;\\n}\\n\\n.lm-TabBar-tab.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-TabBar-addButton.lm-mod-hidden {\\n display: none !important;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {\\n position: relative;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {\\n left: 0;\\n transition: left 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {\\n top: 0;\\n transition: top 150ms ease;\\n}\\n\\n.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {\\n transition: none;\\n}\\n\\n.lm-TabBar-tabLabel .lm-TabBar-tabInput {\\n user-select: all;\\n width: 100%;\\n box-sizing: border-box;\\n background: inherit;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-TabPanel-tabBar {\n z-index: 1;\n}\n\n.lm-TabPanel-stackedPanel {\n z-index: 0;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/tabpanel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,UAAU;AACZ;;AAEA;EACE,UAAU;AACZ\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-TabPanel-tabBar {\\n z-index: 1;\\n}\\n\\n.lm-TabPanel-stackedPanel {\\n z-index: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../packages/nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Jupyter Development Team.\n * Distributed under the terms of the Modified BSD License.\n */\n\n/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Copyright (c) 2014-2017, PhosphorJS Contributors\n|\n| Distributed under the terms of the BSD 3-Clause License.\n|\n| The full license is in the file LICENSE, distributed with this software.\n|----------------------------------------------------------------------------*/\n\n.lm-Widget {\n box-sizing: border-box;\n position: relative;\n}\n\n.lm-Widget.lm-mod-hidden {\n display: none !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../../node_modules/@lumino/widgets/style/widget.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;;;;8EAO8E;;AAE9E;EACE,sBAAsB;EACtB,kBAAkB;AACpB;;AAEA;EACE,wBAAwB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Jupyter Development Team.\\n * Distributed under the terms of the Modified BSD License.\\n */\\n\\n/*-----------------------------------------------------------------------------\\n| Copyright (c) Jupyter Development Team.\\n| Copyright (c) 2014-2017, PhosphorJS Contributors\\n|\\n| Distributed under the terms of the BSD 3-Clause License.\\n|\\n| The full license is in the file LICENSE, distributed with this software.\\n|----------------------------------------------------------------------------*/\\n\\n.lm-Widget {\\n box-sizing: border-box;\\n position: relative;\\n}\\n\\n.lm-Widget.lm-mod-hidden {\\n display: none !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.history-toolbar {\n float: left;\n overflow: none;\n z-index: 3;\n position: absolute;\n}\n\n.history-toolbar .buttons {\n height: 30px;\n display: inline-block;\n margin-left: 8px;\n}\n\n.history-toolbar .buttons > input {\n height: 30px;\n}\n\n.history-toolbar .buttons > input[type=checkbox] {\n display: none\n}\n\n.history-toolbar .buttons > label, .history-toolbar > div > a {\n margin: 8px 8px 8px 0;\n}\n\n.history-toolbar .buttons > input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.history-toolbar .buttons > a.toollink,\n.history-toolbar .buttons > a.toollink:link,\n.history-toolbar .buttons > a.toollink:visited {\n color: black;\n}\n\n.history-toolbar .buttons > a.toollink:active {\n color: blue;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../history/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,WAAW;IACX,cAAc;IACd,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;IACZ,qBAAqB;IACrB,gBAAgB;AACpB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;IAGI,YAAY;AAChB;;AAEA;IACI,WAAW;AACf\",\"sourcesContent\":[\".history-toolbar {\\n float: left;\\n overflow: none;\\n z-index: 3;\\n position: absolute;\\n}\\n\\n.history-toolbar .buttons {\\n height: 30px;\\n display: inline-block;\\n margin-left: 8px;\\n}\\n\\n.history-toolbar .buttons > input {\\n height: 30px;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox] {\\n display: none\\n}\\n\\n.history-toolbar .buttons > label, .history-toolbar > div > a {\\n margin: 8px 8px 8px 0;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox] + label {\\n display:inline-block;\\n color: black;\\n cursor: pointer;\\n}\\n\\n.history-toolbar .buttons > input[type=checkbox]:checked + label {\\n color: blue;\\n}\\n\\n.history-toolbar .buttons > a.toollink,\\n.history-toolbar .buttons > a.toollink:link,\\n.history-toolbar .buttons > a.toollink:visited {\\n color: black;\\n}\\n\\n.history-toolbar .buttons > a.toollink:active {\\n color: blue;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 8 8%27%3E%3Cpath fill=%27%23fff%27 d=%27M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 4%27%3E%3Cpath stroke=%27%23fff%27 d=%27M0 2h4%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3E%3Ccircle r=%273%27 fill=%27%23fff%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_3___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 4 5%27%3E%3Cpath fill=%27%23343a40%27 d=%27M2 0L0 2h4zm0 5L0 3h4z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_4___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%280, 0, 0, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_5___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox=%270 0 30 30%27 xmlns=%27http://www.w3.org/2000/svg%27%3E%3Cpath stroke=%27rgba%28255, 255, 255, 0.5%29%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-miterlimit=%2710%27 d=%27M4 7h22M4 15h22M4 23h22%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_6___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_7___ = new URL(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 8 8%27%3E%3Cpath d=%27M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z%27/%3E%3C/svg%3E\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*!\n * Bootstrap v4.0.0 (https://getbootstrap.com)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\\\2014 \\\\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\"\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___})}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___})}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_2___})}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(${___CSS_LOADER_URL_REPLACEMENT_3___}) no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_4___})}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_5___})}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_6___})}.carousel-control-next-icon{background-image:url(${___CSS_LOADER_URL_REPLACEMENT_7___})}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\"\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\n/*# sourceMappingURL=bootstrap.min.css.map */`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/bootstrap.min.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"/*!\\n * Bootstrap v4.0.0 (https://getbootstrap.com)\\n * Copyright 2011-2018 The Bootstrap Authors\\n * Copyright 2011-2018 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\\\"-1\\\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\\\"\\\\2014 \\\\00A0\\\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\\\"\\\";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\\\"\\\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\\\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\\\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\\\"1\\\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:\\\"Browse\\\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\\\"Browse\\\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\\\"\\\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\\\"/\\\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\\\"\\\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\\\")}.carousel-control-next-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\\\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\\\"\\\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\\\"\\\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;-webkit-clip-path:inset(50%);clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;-webkit-clip-path:none;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\\\" (\\\" attr(title) \\\")\\\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}\\n/*# sourceMappingURL=bootstrap.min.css.map */\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.history-content,\n.history-content .sub-content,\n.history-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.history-content .filter .internal {\n margin: 4px 8px;\n}\n\n.history-content .filter {\n}\n\n.history-content .filter input, .history-content .filter label {\n vertical-align: top;\n display: inline-block;\n}\n\n\n.history-content .graph-attr {\n\tdisplay: inline-block;\n\tmargin-right: 5px;\n}\n\n.history-content .graph-attr input, .history-content .graph-attr label {\n vertical-align: middle;\n display: inline-block;\n}\n\n.history-content .select-style {\n width: 170px;\n margin-right: 5px;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/history.css\"],\"names\":[],\"mappings\":\"AAEA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,eAAe;AACnB;;AAEA;AACA;;AAEA;IACI,mBAAmB;IACnB,qBAAqB;AACzB;;;AAGA;CACC,qBAAqB;CACrB,iBAAiB;AAClB;;AAEA;IACI,sBAAsB;IACtB,qBAAqB;AACzB;;AAEA;IACI,YAAY;IACZ,iBAAiB;AACrB\",\"sourcesContent\":[\"@import '~@noworkflow/history/style/index.css';\\n\\n.history-content,\\n.history-content .sub-content,\\n.history-content .sub-content > div {\\n overflow: hidden !important;\\n}\\n\\n.history-content .filter .internal {\\n margin: 4px 8px;\\n}\\n\\n.history-content .filter {\\n}\\n\\n.history-content .filter input, .history-content .filter label {\\n vertical-align: top;\\n display: inline-block;\\n}\\n\\n\\n.history-content .graph-attr {\\n\\tdisplay: inline-block;\\n\\tmargin-right: 5px;\\n}\\n\\n.history-content .graph-attr input, .history-content .graph-attr label {\\n vertical-align: middle;\\n display: inline-block;\\n}\\n\\n.history-content .select-style {\\n width: 170px;\\n margin-right: 5px;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../utils/style/shared.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../node_modules/css-loader/dist/cjs.js!../../history/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../node_modules/css-loader/dist/cjs.js!../../trial/style/index.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../node_modules/css-loader/dist/cjs.js!./panel.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../node_modules/css-loader/dist/cjs.js!./history.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../node_modules/css-loader/dist/cjs.js!./trial.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `body {\n font-family: \"Verdana\", \"Geneva\", \"sans-serif\";\n}\n\n.loading {\n font-size: 40px;\n}\n\n/* Link Button */\n\na.link-button {\n text-decoration: none;\n display:inline-block;\n padding: 4px 0;\n /*padding: 4px 12px;*/\n margin-bottom: 0;\n font-size: 14px;\n width: 100px;\n line-height: 15px;\n color: #333;\n text-align: center;\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\n vertical-align: middle;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\n background-repeat: repeat-x;\n border: 1px solid #ccc;\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\n border-bottom-color: #b3b3b3;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\n}\n\na.link-button:active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\n background-color:#e0e0e0;\n}\n\n.hide-toolbar {\n overflow: hidden;\n max-height: 0;\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 0;\n margin-bottom: 0;\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\n}\n\n.show-toolbar {\n -moz-transition-duration: 0.3s;\n -webkit-transition-duration: 0.3s;\n -o-transition-duration: 0.3s;\n transition-duration: 0.3s;\n -moz-transition-timing-function: ease-in;\n -webkit-transition-timing-function: ease-in;\n -o-transition-timing-function: ease-in;\n transition-timing-function: ease-in;\n /*max-height: 1000px;\n overflow: hidden;*/\n}\n\n.visible {\n border-bottom: 1px solid black;\n}\n\n.info-filter input, .info-filter select {\n display: block;\n width: 250px;\n margin: 7px 0;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/index.css\"],\"names\":[],\"mappings\":\"AAQA;EACE,8CAA8C;AAChD;;AAEA;EACE,eAAe;AACjB;;AAEA,gBAAgB;;AAEhB;EACE,qBAAqB;EACrB,oBAAoB;EACpB,cAAc;CACf,qBAAqB;EACpB,gBAAgB;EAChB,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,kBAAkB;EAClB,6CAA6C;EAC7C,sBAAsB;EACtB,eAAe;EACf,yBAAyB;EACzB,wDAAwD;EACxD,4EAA4E;EAC5E,2DAA2D;EAC3D,sDAAsD;EACtD,yDAAyD;EACzD,2BAA2B;EAC3B,sBAAsB;EACtB,qCAAqC;EACrC,8DAA8D;EAC9D,4BAA4B;EAC5B,oHAAoH;EACpH,iEAAiE;EACjE,kFAAkF;EAClF,+EAA+E;EAC/E,0EAA0E;AAC5E;;AAEA;EACE,sBAAsB;EACtB,UAAU;EACV,+EAA+E;EAC/E,4EAA4E;EAC5E,uEAAuE;EACvE,wBAAwB;AAC1B;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,2DAA2D;IAC3D,8DAA8D;IAC9D,yDAAyD;IACzD,sDAAsD;AAC1D;;AAEA;IACI,8BAA8B;IAC9B,iCAAiC;IACjC,4BAA4B;IAC5B,yBAAyB;IACzB,wCAAwC;IACxC,2CAA2C;IAC3C,sCAAsC;IACtC,mCAAmC;IACnC;sBACkB;AACtB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,aAAa;AACf\",\"sourcesContent\":[\"@import '~@noworkflow/utils/style/shared.css';\\n@import '~@noworkflow/history/style/index.css';\\n@import '~@noworkflow/trial/style/index.css';\\n@import './panel.css';\\n@import './history.css';\\n@import './trial.css';\\n\\n\\nbody {\\n font-family: \\\"Verdana\\\", \\\"Geneva\\\", \\\"sans-serif\\\";\\n}\\n\\n.loading {\\n font-size: 40px;\\n}\\n\\n/* Link Button */\\n\\na.link-button {\\n text-decoration: none;\\n display:inline-block;\\n padding: 4px 0;\\n /*padding: 4px 12px;*/\\n margin-bottom: 0;\\n font-size: 14px;\\n width: 100px;\\n line-height: 15px;\\n color: #333;\\n text-align: center;\\n text-shadow: 0 1px 1px rgba(255,255,255,0.75);\\n vertical-align: middle;\\n cursor: pointer;\\n background-color: #f5f5f5;\\n background-image: -moz-linear-gradient(top,#fff,#e6e6e6);\\n background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));\\n background-image: -webkit-linear-gradient(top,#fff,#e6e6e6);\\n background-image: -o-linear-gradient(top,#fff,#e6e6e6);\\n background-image: linear-gradient(to bottom,#fff,#e6e6e6);\\n background-repeat: repeat-x;\\n border: 1px solid #ccc;\\n border-color: #e6e6e6 #e6e6e6 #bfbfbf;\\n border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);\\n border-bottom-color: #b3b3b3;\\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);\\n filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\\n -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);\\n}\\n\\na.link-button:active {\\n background-image: none;\\n outline: 0;\\n -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);\\n background-color:#e0e0e0;\\n}\\n\\n.hide-toolbar {\\n overflow: hidden;\\n max-height: 0;\\n padding-top: 0;\\n padding-bottom: 0;\\n margin-top: 0;\\n margin-bottom: 0;\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n transition-timing-function: cubic-bezier(0, 1, 0.5, 1);\\n}\\n\\n.show-toolbar {\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: ease-in;\\n -webkit-transition-timing-function: ease-in;\\n -o-transition-timing-function: ease-in;\\n transition-timing-function: ease-in;\\n /*max-height: 1000px;\\n overflow: hidden;*/\\n}\\n\\n.visible {\\n border-bottom: 1px solid black;\\n}\\n\\n.info-filter input, .info-filter select {\\n display: block;\\n width: 250px;\\n margin: 7px 0;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../node_modules/css-loader/dist/cjs.js!../../../node_modules/@lumino/default-theme/style/index.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.p-TabBar {\n min-height: 24px;\n max-height: 24px;\n}\n\n.p-TabBar-content {\n min-width: 0;\n min-height: 0;\n align-items: flex-end;\n border-bottom: 1px solid #C0C0C0;\n}\n\n\n.p-TabBar-tab {\n padding: 0px 10px;\n background: #E5E5E5;\n border: 1px solid #C0C0C0;\n border-bottom: none;\n font: 12px Helvetica, Arial, sans-serif;\n flex: 0 1 180px;\n min-height: 20px;\n max-height: 20px;\n min-width: 35px;\n margin-left: -1px;\n line-height: 20px;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n background: white;\n}\n\n\n.p-TabBar-tab:hover:not(.p-mod-current) {\n background: #F0F0F0;\n}\n\n\n.p-TabBar-tab:first-child {\n margin-left: 0;\n}\n\n\n.p-TabBar-tab.p-mod-current {\n min-height: 23px;\n max-height: 23px;\n transform: translateY(1px);\n}\n\n\n.p-TabBar-tabIcon,\n.p-TabBar-tabLabel,\n.p-TabBar-tabCloseIcon {\n display: inline-block;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\n margin-left: 4px;\n}\n\n\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\n content: '\\\\f00d';\n font-family: FontAwesome;\n}\n\n\n.p-TabBar-tab.p-mod-drag-image {\n min-height: 23px;\n max-height: 23px;\n min-width: 125px;\n border: none;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n transform: translateX(-40%) translateY(-58%);\n}\n\n.p-DockPanel-overlay {\n background: rgba(255, 255, 255, 0.6);\n border: 1px dashed black;\n transition-property: top, left, right, bottom;\n transition-duration: 150ms;\n transition-timing-function: ease;\n}\n\n.content {\n min-width: 50px;\n min-height: 50px;\n display: flex;\n flex-direction: column;\n padding: 8px;\n border: 1px solid #C0C0C0;\n border-top: none;\n background: white;\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.content > div {\n flex: 1 1 auto;\n overflow: auto;\n}\n\nbody {\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n}\n\n#main {\n flex: 1 1 auto;\n}\n\n\n.side-info {\n margin: 5px;\n font-size: 14px;\n}\n\n.side-info .main h1 {\n margin: 0;\n}\n\n.side-info .main h3 {\n margin: 0 0 8px 0;\n}\n\n.side-info .attr {\n display: block;\n margin: 3px 0;\n}\n\n.side-info .desc {\n font-weight: bold;\n}\n\n.side-info .fold {\n margin-top: 15px;\n font-size: 2em;\n}\n\n.side-info .fold:hover {\n cursor: pointer;\n}\n\n.side-info .fold span {\n padding-left: 7px;\n}\n\n.side-info .show-all {\n color: rgb(50, 38, 41);\n float: right;\n margin-right: 10px;\n}\n\n.side-info ul.mod-list,\n.side-info ul.env-list,\n.side-info ul.fac-list {\n padding: 0;\n margin: 0;\n list-style-type: none;\n}\n\n.side-info ul.mod-list li,\n.side-info ul.fac-list li {\n border-left: 3px solid black;\n margin: 6px 4px;\n padding: 1px 3px;\n}\n\n.side-info ul.env-list li {\n margin: 3px;\n font-size: 0.8em;\n}\n\n.side-info ul.env-list li .key {\n font-weight: bold;\n}\n\n.side-info ul.mod-list li .version,\n.side-info ul.fac-list li .mode,\n.side-info ul.fac-list li .buffering {\n float: right;\n margin-left: 20px;\n}\n\n.side-info .clear {\n clear: both;\n}\n\n.hash {\n font-size: 12px;\n color: #666;\n}\n\n.dbefore {\n color: red !important;\n}\n\n.dafter {\n color: green !important;\n}\n\n.dbefore::before {\n color: red !important;\n content: ' - ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.dafter::before {\n color: green !important;\n content: ' + ';\n font-family: \"Courier New\", Courier, monospace;\n}\n\n.libefore {\n border-left: 3px solid red !important;\n color: red !important;\n}\n\n.liafter {\n border-left: 3px solid green !important;\n color: green !important;\n}\n\n.connection-error:hover {\n cursor: pointer;\n}\n\n.error-text {\n font-size: 15px;\n margin-left: 3px;\n vertical-align: middle;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/panel.css\"],\"names\":[],\"mappings\":\";AAIA;EACE,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,qBAAqB;EACrB,gCAAgC;AAClC;;;AAGA;EACE,iBAAiB;EACjB,mBAAmB;EACnB,yBAAyB;EACzB,mBAAmB;EACnB,uCAAuC;EACvC,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,iBAAiB;EACjB,iBAAiB;AACnB;;;AAGA;EACE,iBAAiB;AACnB;;;AAGA;EACE,mBAAmB;AACrB;;;AAGA;EACE,cAAc;AAChB;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,0BAA0B;AAC5B;;;AAGA;;;EAGE,qBAAqB;AACvB;;;AAGA;EACE,gBAAgB;AAClB;;;AAGA;EACE,gBAAgB;EAChB,wBAAwB;AAC1B;;;AAGA;EACE,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,YAAY;EACZ,0CAA0C;EAC1C,4CAA4C;AAC9C;;AAEA;EACE,oCAAoC;EACpC,wBAAwB;EACxB,6CAA6C;EAC7C,0BAA0B;EAC1B,gCAAgC;AAClC;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,0CAA0C;AAC5C;;AAEA;EACE,cAAc;EACd,cAAc;AAChB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,QAAQ;EACR,SAAS;EACT,SAAS;EACT,UAAU;EACV,gBAAgB;;AAElB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,WAAW;EACX,eAAe;AACjB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,cAAc;EACd,aAAa;AACf;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,sBAAsB;EACtB,YAAY;EACZ,kBAAkB;AACpB;;AAEA;;;EAGE,UAAU;EACV,SAAS;EACT,qBAAqB;AACvB;;AAEA;;EAEE,4BAA4B;EAC5B,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;EAGE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,WAAW;AACb;;AAEA;IACI,eAAe;IACf,WAAW;AACf;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,uBAAuB;AACzB;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,uBAAuB;EACvB,cAAc;EACd,8CAA8C;AAChD;;AAEA;EACE,qCAAqC;EACrC,qBAAqB;AACvB;;AAEA;EACE,uCAAuC;EACvC,uBAAuB;AACzB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,sBAAsB;AACxB\",\"sourcesContent\":[\"\\n@import '~@lumino/default-theme/style/index.css';\\n\\n\\n.p-TabBar {\\n min-height: 24px;\\n max-height: 24px;\\n}\\n\\n.p-TabBar-content {\\n min-width: 0;\\n min-height: 0;\\n align-items: flex-end;\\n border-bottom: 1px solid #C0C0C0;\\n}\\n\\n\\n.p-TabBar-tab {\\n padding: 0px 10px;\\n background: #E5E5E5;\\n border: 1px solid #C0C0C0;\\n border-bottom: none;\\n font: 12px Helvetica, Arial, sans-serif;\\n flex: 0 1 180px;\\n min-height: 20px;\\n max-height: 20px;\\n min-width: 35px;\\n margin-left: -1px;\\n line-height: 20px;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-current {\\n background: white;\\n}\\n\\n\\n.p-TabBar-tab:hover:not(.p-mod-current) {\\n background: #F0F0F0;\\n}\\n\\n\\n.p-TabBar-tab:first-child {\\n margin-left: 0;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-current {\\n min-height: 23px;\\n max-height: 23px;\\n transform: translateY(1px);\\n}\\n\\n\\n.p-TabBar-tabIcon,\\n.p-TabBar-tabLabel,\\n.p-TabBar-tabCloseIcon {\\n display: inline-block;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon {\\n margin-left: 4px;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-closable > .p-TabBar-tabCloseIcon:before {\\n content: '\\\\f00d';\\n font-family: FontAwesome;\\n}\\n\\n\\n.p-TabBar-tab.p-mod-drag-image {\\n min-height: 23px;\\n max-height: 23px;\\n min-width: 125px;\\n border: none;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\\n transform: translateX(-40%) translateY(-58%);\\n}\\n\\n.p-DockPanel-overlay {\\n background: rgba(255, 255, 255, 0.6);\\n border: 1px dashed black;\\n transition-property: top, left, right, bottom;\\n transition-duration: 150ms;\\n transition-timing-function: ease;\\n}\\n\\n.content {\\n min-width: 50px;\\n min-height: 50px;\\n display: flex;\\n flex-direction: column;\\n padding: 8px;\\n border: 1px solid #C0C0C0;\\n border-top: none;\\n background: white;\\n box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\\n}\\n\\n.content > div {\\n flex: 1 1 auto;\\n overflow: auto;\\n}\\n\\nbody {\\n display: flex;\\n flex-direction: column;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n margin: 0;\\n padding: 0;\\n overflow: hidden;\\n\\n}\\n\\n#main {\\n flex: 1 1 auto;\\n}\\n\\n\\n.side-info {\\n margin: 5px;\\n font-size: 14px;\\n}\\n\\n.side-info .main h1 {\\n margin: 0;\\n}\\n\\n.side-info .main h3 {\\n margin: 0 0 8px 0;\\n}\\n\\n.side-info .attr {\\n display: block;\\n margin: 3px 0;\\n}\\n\\n.side-info .desc {\\n font-weight: bold;\\n}\\n\\n.side-info .fold {\\n margin-top: 15px;\\n font-size: 2em;\\n}\\n\\n.side-info .fold:hover {\\n cursor: pointer;\\n}\\n\\n.side-info .fold span {\\n padding-left: 7px;\\n}\\n\\n.side-info .show-all {\\n color: rgb(50, 38, 41);\\n float: right;\\n margin-right: 10px;\\n}\\n\\n.side-info ul.mod-list,\\n.side-info ul.env-list,\\n.side-info ul.fac-list {\\n padding: 0;\\n margin: 0;\\n list-style-type: none;\\n}\\n\\n.side-info ul.mod-list li,\\n.side-info ul.fac-list li {\\n border-left: 3px solid black;\\n margin: 6px 4px;\\n padding: 1px 3px;\\n}\\n\\n.side-info ul.env-list li {\\n margin: 3px;\\n font-size: 0.8em;\\n}\\n\\n.side-info ul.env-list li .key {\\n font-weight: bold;\\n}\\n\\n.side-info ul.mod-list li .version,\\n.side-info ul.fac-list li .mode,\\n.side-info ul.fac-list li .buffering {\\n float: right;\\n margin-left: 20px;\\n}\\n\\n.side-info .clear {\\n clear: both;\\n}\\n\\n.hash {\\n font-size: 12px;\\n color: #666;\\n}\\n\\n.dbefore {\\n color: red !important;\\n}\\n\\n.dafter {\\n color: green !important;\\n}\\n\\n.dbefore::before {\\n color: red !important;\\n content: ' - ';\\n font-family: \\\"Courier New\\\", Courier, monospace;\\n}\\n\\n.dafter::before {\\n color: green !important;\\n content: ' + ';\\n font-family: \\\"Courier New\\\", Courier, monospace;\\n}\\n\\n.libefore {\\n border-left: 3px solid red !important;\\n color: red !important;\\n}\\n\\n.liafter {\\n border-left: 3px solid green !important;\\n color: green !important;\\n}\\n\\n.connection-error:hover {\\n cursor: pointer;\\n}\\n\\n.error-text {\\n font-size: 15px;\\n margin-left: 3px;\\n vertical-align: middle;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trial-content,\n.trial-content .sub-content,\n.trial-content .sub-content > div {\n overflow: hidden !important;\n}\n\n.trial-content .graphselector .graph-attr:first-child label {\n margin-right: 17px;\n}\n\n.trial-content .graphselector {\n width: 100%;\n padding-left: 8px;\n}\n\n.trial-content .graphselector .use-cache {\n margin-top: 10px;\n margin-left: 0px;\n}\n\n.trial-content .graphselector a.link-button {\n margin-top: 10px;\n width: 273px;\n}\n\n.trial-content .toggle-label {\n margin-right: 5px;\n}\n\n.graphselector > div:first-child {\n margin-top: 8px;\n}\n\n.graphselector > a:last-child {\n margin-bottom: 8px;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/trial.css\"],\"names\":[],\"mappings\":\"AAAA;;;IAGI,2BAA2B;AAC/B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,gBAAgB;IAChB,YAAY;AAChB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,kBAAkB;AACtB\",\"sourcesContent\":[\".trial-content,\\n.trial-content .sub-content,\\n.trial-content .sub-content > div {\\n overflow: hidden !important;\\n}\\n\\n.trial-content .graphselector .graph-attr:first-child label {\\n margin-right: 17px;\\n}\\n\\n.trial-content .graphselector {\\n width: 100%;\\n padding-left: 8px;\\n}\\n\\n.trial-content .graphselector .use-cache {\\n margin-top: 10px;\\n margin-left: 0px;\\n}\\n\\n.trial-content .graphselector a.link-button {\\n margin-top: 10px;\\n width: 273px;\\n}\\n\\n.trial-content .toggle-label {\\n margin-right: 5px;\\n}\\n\\n.graphselector > div:first-child {\\n margin-top: 8px;\\n}\\n\\n.graphselector > a:last-child {\\n margin-bottom: 8px;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trial-toolbar {\n margin: 5px;\n float: left;\n overflow: none;\n width: 375px;\n height: 30px;\n z-index: 3;\n position: absolute;\n}\n\n.trial-toolbar input {\n height: 30px;\n}\n\n.trial-toolbar input[type=checkbox] {\n display: none\n}\n\n.trial-toolbar label, .trial-toolbar a {\n margin-right: 8px;\n margin-top: 8px;\n}\n\n.trial-toolbar input[type=checkbox] + label {\n display:inline-block;\n color: black;\n cursor: pointer;\n}\n\n.trial-toolbar input[type=checkbox]:checked + label {\n color: blue;\n}\n\n.trial-toolbar a.toollink,\n.trial-toolbar a.toollink:link,\n.trial-toolbar a.toollink:visited {\n color: black;\n}\n\n.trial-toolbar a.toollink:active {\n color: blue;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./../trial/style/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,WAAW;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,kBAAkB;AACtB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI;AACJ;;AAEA;IACI,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,oBAAoB;IACpB,YAAY;IACZ,eAAe;AACnB;;AAEA;IACI,WAAW;AACf;;AAEA;;;EAGE,YAAY;AACd;;AAEA;EACE,WAAW;AACb\",\"sourcesContent\":[\".trial-toolbar {\\n margin: 5px;\\n float: left;\\n overflow: none;\\n width: 375px;\\n height: 30px;\\n z-index: 3;\\n position: absolute;\\n}\\n\\n.trial-toolbar input {\\n height: 30px;\\n}\\n\\n.trial-toolbar input[type=checkbox] {\\n display: none\\n}\\n\\n.trial-toolbar label, .trial-toolbar a {\\n margin-right: 8px;\\n margin-top: 8px;\\n}\\n\\n.trial-toolbar input[type=checkbox] + label {\\n display:inline-block;\\n color: black;\\n cursor: pointer;\\n}\\n\\n.trial-toolbar input[type=checkbox]:checked + label {\\n color: blue;\\n}\\n\\n.trial-toolbar a.toollink,\\n.trial-toolbar a.toollink:link,\\n.trial-toolbar a.toollink:visited {\\n color: black;\\n}\\n\\n.trial-toolbar a.toollink:active {\\n color: blue;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../nowvis/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `div.now-tooltip {\n position: absolute;\n left: 1px;\n right: 1px;\n max-height: 200px;\n max-width: 400px;\n overflow: auto;\n padding: 5px;\n padding-bottom: 10px;\n font: 12px sans-serif;\n background: #DDD;\n border: 0px;\n border-radius: 8px;\n z-index: 2000;\n}\n\n.now-tooltip.hidden {\n display: none;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./../utils/style/shared.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,kBAAkB;IAClB,SAAS;IACT,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,gBAAgB;IAChB,WAAW;IACX,kBAAkB;IAClB,aAAa;AACjB;;AAEA;IACI,aAAa;AACjB\",\"sourcesContent\":[\"div.now-tooltip {\\n position: absolute;\\n left: 1px;\\n right: 1px;\\n max-height: 200px;\\n max-width: 400px;\\n overflow: auto;\\n padding: 5px;\\n padding-bottom: 10px;\\n font: 12px sans-serif;\\n background: #DDD;\\n border: 0px;\\n border-radius: 8px;\\n z-index: 2000;\\n}\\n\\n.now-tooltip.hidden {\\n display: none;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n options = {};\n }\n if (!url) {\n return url;\n }\n url = String(url.__esModule ? url.default : url);\n\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n if (options.hash) {\n url += options.hash;\n }\n\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\"), \"\\\"\");\n }\n return url;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./bootstrap.min.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./index.css\";\n export default content && content.locals ? content.locals : undefined;\n","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TrialGraph = void 0;\nrequire(\"d3-transition\");\nconst d3_color_1 = require(\"d3-color\");\nconst d3_hierarchy_1 = require(\"d3-hierarchy\");\nconst d3_selection_1 = require(\"d3-selection\");\nconst d3_zoom_1 = require(\"d3-zoom\");\nconst fs = require(\"file-saver\");\nconst utils_1 = require(\"@noworkflow/utils\");\nclass TrialGraph {\n constructor(graphId, div, config = {}, showDiffFunction, nowVisPanel) {\n if (showDiffFunction && nowVisPanel) {\n this.showDiffFunction = showDiffFunction;\n this.nowVisPanel = nowVisPanel;\n }\n this.i = 0;\n let defaultConfig = {\n customSize: function (g) {\n return [\n g.config.width,\n g.config.height,\n ];\n },\n customMouseOver: (g, d) => false,\n customMouseOut: (g, d) => false,\n customForm: (g, form) => null,\n customLoadTooltip: (g, div, text, trialid, aid) => null,\n duration: 750,\n top: 50,\n right: 30,\n bottom: 80,\n left: 30,\n width: 900,\n height: 500,\n useTooltip: false,\n fontSize: 10,\n labelFontSize: 10,\n nodeSizeX: 47,\n nodeSizeY: 100,\n queryTooltip: false\n };\n this.config = Object.assign({}, defaultConfig, config);\n this.graphId = graphId;\n this.zoom = (0, d3_zoom_1.zoom)()\n .on(\"zoom\", (event) => {\n return this.zoomFunction(event);\n })\n .on(\"start\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"move\"))\n .on(\"end\", () => (0, d3_selection_1.select)('body').style(\"cursor\", \"auto\"))\n .wheelDelta(function () {\n const e = event;\n return -e.deltaY * (e.deltaMode ? 120 : 1) / 2000;\n });\n this.div = (0, d3_selection_1.select)(div);\n this.form = this.div\n .append(\"form\")\n .classed(\"trial-toolbar\", true);\n this.svg = (0, d3_selection_1.select)(div)\n .append(\"div\")\n .append(\"svg\")\n .attr(\"width\", this.config.width)\n .attr(\"height\", this.config.height)\n .call(this.zoom);\n this.createMarker('end', 'enormal', 'black');\n this.createMarker('endbefore', 'ebefore', 'red');\n this.createMarker('endafter', 'eafter', 'green');\n this.g = this.svg.append(\"g\")\n .attr(\"id\", this._graphId())\n .attr(\"transform\", \"translate(0,0)\")\n .classed('TrialGraph', true);\n this.tree = (0, d3_hierarchy_1.tree)()\n .nodeSize([\n this.config.nodeSizeX,\n this.config.nodeSizeY\n ]);\n // Tooltip\n this.tooltipDiv = (0, d3_selection_1.select)(\"body\").append(\"div\")\n .attr(\"class\", \"now-tooltip now-trial-tooltip\")\n .style(\"opacity\", 0)\n .on(\"mouseout\", () => {\n this.closeTooltip();\n });\n // Zoom\n this.svg\n .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top));\n this.activationStorage = {};\n }\n init(data, t1, t2) {\n this.t1 = t1;\n this.t2 = t2;\n // **Toolbar**\n this.createToolbar(this.form);\n // **Graph**\n this.minDuration = data.min_duration;\n this.maxDuration = data.max_duration;\n this.totalDuration = {};\n this.totalDuration[t1] = this.maxDuration[t1] - this.minDuration[t1];\n this.totalDuration[t2] = this.maxDuration[t2] - this.minDuration[t2];\n this.maxTotalDuration = Math.max(this.totalDuration[t1], this.totalDuration[t2]);\n this.colors = data.colors;\n if (!data.root)\n return;\n this.root = (0, d3_hierarchy_1.hierarchy)(data.root, function (d) { return d.children; });\n this.root.x0 = 0;\n this.root.y0 = (this.config.width) / 2;\n this.alledges = data.edges;\n this.update(this.root);\n }\n createToolbar(form) {\n let self = this;\n form = form.append(\"div\")\n .classed(\"buttons buttonsGraph\", true);\n this.config.customForm(this, form);\n // Reset zoom\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"trial-\" + this.graphId + \"-restore-zoom\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Restore zoom\")\n .on(\"click\", () => this.restorePosition())\n .append(\"i\")\n .classed(\"fa fa-eye\", true);\n // Toggle Tooltips\n let tooltipsToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-tooltips\")\n .attr(\"value\", \"show\")\n .property(\"checked\", this.config.useTooltip)\n .on(\"change\", () => {\n this.closeTooltip();\n this.config.useTooltip = tooltipsToggle.property(\"checked\");\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-tooltips\")\n .attr(\"title\", \"Show tooltips on mouse hover\")\n .append(\"i\")\n .classed(\"fa fa-comment\", true);\n // Download SVG\n form.append(\"a\")\n .classed(\"toollink\", true)\n .attr(\"id\", \"trial-\" + this.graphId + \"-download\")\n .attr(\"href\", \"#\")\n .attr(\"title\", \"Download graph SVG\")\n .on(\"click\", () => {\n this.download();\n })\n .append(\"i\")\n .classed(\"fa fa-download\", true);\n // Set Font Size\n let fontToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-fonts\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = fontToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n fontSize.style(\"display\", display);\n labelFontSize.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-fonts\")\n .attr(\"title\", \"Set font size\")\n .append(\"i\")\n .classed(\"fa fa-font\", true);\n let fontSize = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.fontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node font size\")\n .on(\"change\", () => {\n this.config.fontSize = fontSize.property(\"value\");\n this.svg.selectAll(\".node text\").attr(\"font-size\", this.config.fontSize);\n });\n let labelFontSize = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.labelFontSize)\n .style(\"width\", \"50px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Arrow font size\")\n .on(\"change\", () => {\n this.config.labelFontSize = labelFontSize.property(\"value\");\n this.svg.selectAll(\"text.label_text\").attr(\"font-size\", this.config.labelFontSize);\n });\n // Set distances\n let setDistances = function () {\n self.config.nodeSizeX = distanceX.property(\"value\");\n self.config.nodeSizeY = distanceY.property(\"value\");\n self.wrapText();\n self.tree\n .nodeSize([\n self.config.nodeSizeX,\n self.config.nodeSizeY\n ]);\n self.update(self.root);\n };\n // Set Distance X\n let distanceXToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-distance-x\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-distance-x\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = distanceXToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n distanceX.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-distance-x\")\n .attr(\"title\", \"Set horizontal distance\")\n .append(\"i\")\n .classed(\"fa fa-arrows-h\", true);\n let distanceX = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.nodeSizeX)\n .style(\"width\", \"65px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node horizontal distance\")\n .on(\"change\", setDistances);\n // Set Distance Y\n let distanceYToggle = form.append(\"input\")\n .attr(\"id\", \"trial-\" + this.graphId + \"-toolbar-distance-y\")\n .attr(\"type\", \"checkbox\")\n .attr(\"name\", \"trial-toolbar-distance-y\")\n .attr(\"value\", \"show\")\n .property(\"checked\", false)\n .on(\"change\", () => {\n let display = distanceYToggle.property(\"checked\") ? \"inline-block\" : \"none\";\n distanceY.style(\"display\", display);\n });\n form.append(\"label\")\n .attr(\"for\", \"trial-\" + this.graphId + \"-toolbar-distance-y\")\n .attr(\"title\", \"Set vertical distance\")\n .append(\"i\")\n .classed(\"fa fa-arrows-v\", true);\n let distanceY = form.append(\"input\")\n .attr(\"type\", \"number\")\n .attr(\"value\", this.config.nodeSizeY)\n .style(\"width\", \"65px\")\n .style(\"display\", \"none\")\n .attr(\"title\", \"Node vertical distance\")\n .on(\"change\", setDistances);\n // Submit\n form.append(\"input\")\n .attr(\"type\", \"submit\")\n .attr(\"name\", \"prevent-enter\")\n .attr(\"onclick\", \"return false;\")\n .style(\"display\", \"none\");\n }\n load(data, t1, t2) {\n this.init(data, t1, t2);\n this.updateWindow();\n }\n restorePosition() {\n this.wrapText();\n this.svg\n .call(this.zoom.transform, d3_zoom_1.zoomIdentity.translate(this.config.left + this.config.width / 2, this.config.top));\n }\n updateWindow() {\n let size = this.config.customSize(this);\n this.config.width = size[0];\n this.config.height = size[1];\n this.svg\n .attr(\"width\", size[0])\n .attr(\"height\", size[1]);\n }\n update(source) {\n let treeData = this.tree(this.root);\n this.nodes = treeData.descendants();\n var node = this.g.selectAll('g.node')\n .data(this.nodes, (d) => { return d.id || (d.id = ++this.i); });\n let validNodes = {};\n this.nodes.forEach((node) => {\n validNodes[node.data.index] = node;\n });\n var edges = this.alledges.filter((edge) => {\n let source = validNodes[edge.source];\n let target = validNodes[edge.target];\n if (source == undefined || target == undefined) {\n return false;\n }\n return true;\n }).map((edge) => {\n let source = validNodes[edge.source];\n let target = validNodes[edge.target];\n var copy = Object.assign({}, edge);\n copy.id = edge.source + \"-\" + edge.target;\n copy.source = source;\n copy.target = target;\n return copy;\n });\n this.updateNodes(source, node);\n this.updateLinks(source, edges);\n this.updateLinkLabels(edges);\n // Store old positions for transition\n this.nodes.forEach(function (d, i) {\n d.x0 = d.x;\n d.y0 = d.y;\n });\n this.wrapText();\n }\n download(name) {\n var isFileSaverSupported = false;\n try {\n isFileSaverSupported = !!new Blob();\n }\n catch (e) {\n alert(\"blob not supported\");\n }\n name = (name === undefined) ? \"trial.svg\" : name;\n let gnode = this.g.node();\n var bbox = gnode.getBBox();\n var width = this.svg.attr(\"width\"), height = this.svg.attr(\"height\");\n this.g.attr(\"transform\", \"translate(\" + (-bbox.x + 5) + \", \" + (-bbox.y + 5) + \")\");\n let svgNode = this.svg\n .attr(\"title\", \"Trial\")\n .attr(\"version\", 1.1)\n .attr(\"width\", bbox.width + 10)\n .attr(\"height\", bbox.height + 10)\n .attr(\"xmlns\", \"http://www.w3.org/2000/svg\")\n .node();\n var html = svgNode.parentNode.innerHTML;\n html = ' 1 || activations[trial_ids[1]].length > 1);\n let modal;\n let modalBody;\n let button;\n if (showModal) {\n modal = (0, d3_selection_1.select)(document.getElementById(\"main\"))\n .append(\"div\").classed(\"modal fade show\", true)\n .attr(\"id\", \"functionDiffModal\")\n .attr(\"tabindex\", \"-1\")\n .attr(\"role\", \"dialog\")\n .attr(\"aria-labelledby\", \"functionDiffModalLabel\")\n .style(\"display\", \"none\")\n .attr(\"aria-hidden\", \"false\")\n .style(\"display\", \"block\");\n let modalDialog = modal.append(\"div\").classed(\"modal-dialog\", true).attr(\"role\", \"document\");\n let modalContent = modalDialog.append(\"div\").classed(\"modal-content\", true);\n let modalHeader = modalContent.append(\"div\").classed(\"modal-header\", true);\n modalHeader.append(\"h5\").classed(\"modal-title\", true).attr(\"id\", \"functionDiffModalLabel\").text(\"Select a function activation: \");\n modalHeader.append(\"button\").classed(\"close\", true).attr(\"data-dismiss\", \"modal\").attr(\"aria-label\", \"Close\")\n .append(\"span\").attr(\"aria-hidden\", \"true\").html(\"×\").on(\"click\", () => modal.remove());\n modalBody = modalContent.append(\"div\").classed(\"modal-body\", true);\n modalBody.append(\"p\").text(\"This function was called multipled times. Select the activations you want to see their diff\").style(\"font-weight\", \"bold\");\n button = modalContent.append(\"div\").classed(\"modal-footer\", true).append(\"button\").classed(\"btn btn-primary\", true).text(\"Confirm\");\n }\n let compareFunctionCallsUrl = \"commands/diff\";\n let windowLabel = \"Diff\";\n for (let i = 0; i < trial_ids.length; i++) {\n let trial = trial_ids[i];\n if (showModal) {\n let trialNumber = i == 0 ? \"first\" : \"second\";\n modalBody.append(\"span\").text(\"Select the \" + trialNumber + \" trial activation: \");\n let select = modalBody.append(\"select\").classed(\"form-select\", true).attr(\"arial-label\", \"functionTrial\" + trial).attr(\"id\", \"functionTrial\" + trial);\n for (let activation in activations[trial]) {\n fetch(\"/diff/getFunctionActivationArguments/\" + trial + \"/\" + activations[trial][activation], {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n select.append(\"option\").attr(\"value\", activations[trial][activation]).text(activations[trial][activation] + \" params: \" + json.function_params.toString());\n });\n });\n }\n modalBody.append(\"br\");\n }\n else {\n if (compareFunctionCallsUrl.length > 0)\n compareFunctionCallsUrl += \"/\";\n compareFunctionCallsUrl += trial + \"/\";\n compareFunctionCallsUrl += activations[trial];\n windowLabel += \" trial \" + trial + \" activation_id \" + activations[trial];\n }\n }\n if (showModal) {\n button === null || button === void 0 ? void 0 : button.on(\"click\", () => {\n let firstTrialActivation = document.getElementById(\"functionTrial\" + trial_ids[0]).selectedOptions[0].value;\n let secondTrialActivation = document.getElementById(\"functionTrial\" + trial_ids[1]).selectedOptions[0].value;\n compareFunctionCallsUrl += \"/\" + trial_ids[0] + \"/\" + firstTrialActivation + \"/\" + trial_ids[1] + \"/\" + secondTrialActivation;\n windowLabel += \" trial \" + trial_ids[0] + \" activation_id \" + firstTrialActivation + \" trial \" + trial_ids[1] + \" activation_id \" + secondTrialActivation;\n makeRequest(this.showDiffFunction, this.nowVisPanel);\n modal.remove();\n });\n }\n else {\n makeRequest(this.showDiffFunction, this.nowVisPanel);\n }\n function makeRequest(showDiffFunction, nowVisPanel) {\n fetch(compareFunctionCallsUrl, {\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\n headers: {\n 'Content-Type': 'application/json'\n },\n }).then((response) => {\n response.json().then((json) => {\n if (showDiffFunction)\n showDiffFunction(json, windowLabel, nowVisPanel);\n });\n });\n }\n }\n closeTooltip() {\n this.tooltipDiv.transition()\n .duration(500)\n .style(\"opacity\", 0);\n this.tooltipDiv.classed(\"hidden\", true);\n }\n showTooltip(event, d, trial_id) {\n var self = this;\n this.tooltipDiv.classed(\"hidden\", false);\n this.tooltipDiv.transition()\n .duration(200)\n .style(\"opacity\", 0.9);\n if (this.config.queryTooltip) {\n var string = d.tooltip[trial_id];\n var regexp = (/T(.*) - (\\d*)
              Line \\d*?
              /g);\n var match = regexp.exec(string);\n this.tooltipDiv.html(\"\")\n .style(\"left\", (event.pageX - 3) + \"px\")\n .style(\"top\", (event.pageY - 28) + \"px\");\n while (match != null) {\n var div = document.createElement(\"div\");\n //var div2 = document.createElement(\"div\");\n this.tooltipDiv.append(() => div);\n //this.tooltipDiv.append(() => div2);\n var aid = match[2];\n if (aid in self.activationStorage) {\n this.updateTooltipDiv(aid, div);\n }\n else {\n self.config.customLoadTooltip(self, div, match[0], match[1], match[2]);\n }\n match = regexp.exec(string);\n }\n }\n else {\n this.tooltipDiv.html(d.tooltip[trial_id])\n .style(\"left\", (event.pageX - 3) + \"px\")\n .style(\"top\", (event.pageY - 28) + \"px\");\n }\n }\n updateTooltipDiv(activationId, div) {\n var data = this.activationStorage[activationId];\n var title = data.id + \" - \" + data.name;\n if (data.hash != \"\") {\n title = '' + title + \"\";\n }\n var result = [\n ' ' + title + '',\n ' Line: ' + data.line + \"\",\n ' Start: ' + data.start + \"\",\n ' Finish: ' + data.finish + \"\",\n ' Duration: ' + data.duration + \"ns\",\n ' Return: ' + data.return_value + \"\",\n ];\n // ToDo: parameters and globals\n div.outerHTML = result.join(\"
              \") + \"

              \";\n }\n createMarker(name, cls, fill) {\n this.svg.append(\"svg:defs\").selectAll(\"marker\")\n .data([name])\n .enter().append(\"svg:marker\")\n .attr(\"id\", this.graphId + \"-\" + name)\n .attr(\"viewBox\", \"0 -5 10 10\")\n .attr(\"refX\", 10)\n .attr(\"refY\", 0)\n .attr(\"markerWidth\", 6)\n .attr(\"markerHeight\", 6)\n .attr(\"orient\", \"auto\")\n .append(\"svg:path\")\n .classed(cls, true)\n .attr(\"fill\", fill)\n .attr(\"d\", \"M0,-5L10,0L0,5\");\n }\n defaultNodeStroke(d) {\n let color = this.colors[d.data.trial_ids[0]];\n if (d.data.trial_ids.length > 1 || color == 0) {\n return \"#000\";\n }\n if (color == 1) {\n return \"red\";\n }\n return \"green\";\n }\n nodeClick(d) {\n if (d.children) {\n d._children = d.children;\n delete d.children;\n }\n else {\n d.children = d._children;\n delete d._children;\n }\n this.update(d);\n }\n updateNodes(source, node) {\n let self = this;\n var nodeEnter = node.enter().append('g')\n .attr(\"id\", (d) => {\n return \"node-\" + this.graphId + \"-\" + d.data.index;\n })\n .attr('class', 'node')\n .attr(\"cursor\", \"pointer\")\n .attr('transform', (d) => {\n return \"translate(\" + source.x + \",\" + source.y + \")\";\n })\n .on('click', (event, d) => {\n let activations = d.data.activations;\n if (event.ctrlKey && Object.keys(activations).length > 1) {\n self.getFunctionDiff(activations, d.data.trial_ids);\n }\n else {\n this.nodeClick(d);\n }\n })\n .on('mouseover', function (event, d) {\n if (self.config.useTooltip) {\n self.closeTooltip();\n if ((0, d3_selection_1.pointers)(event)[0][0] < 10) {\n self.showTooltip(event, d.data, self.t1);\n }\n else {\n self.showTooltip(event, d.data, self.t2);\n }\n }\n self.config.customMouseOver(self, d);\n return false;\n }).on('mouseout', function (event, d) {\n self.config.customMouseOut(self, d);\n });\n /* nodeEnter.attr(\"activations_ids\", (d:VisibleTrialNode)=>{\n let activations = d.data.activations;\n let attrValue = \"\";\n for(let trial in activations){\n if(attrValue.length > 0) attrValue+= \"/\";\n attrValue += trial + \"/\";\n attrValue += activations[trial];\n }\n return attrValue;\n }); */\n // Circle for new nodes\n nodeEnter.append('rect')\n .attr('class', 'node')\n .attr('rx', 1e-6)\n .attr('ry', 1e-6)\n .attr('width', 1e-6)\n .attr('height', 1e-6)\n .attr(\"stroke\", (d) => this.defaultNodeStroke(d))\n .attr(\"stroke-width\", \"3px\")\n .attr(\"fill\", (d) => {\n if (d.data.trial_ids.length == 1) {\n return this.calculateColor(d.data, this.t1);\n }\n var grad = this.svg.append(\"svg:defs\")\n .append(\"linearGradient\")\n .attr(\"id\", \"grad-\" + this.graphId + \"-\" + d.data.index)\n .attr(\"x1\", \"100%\")\n .attr(\"x2\", \"0%\")\n .attr(\"y1\", \"0%\")\n .attr(\"y2\", \"0%\");\n grad.append(\"stop\")\n .attr(\"offset\", \"50%\")\n .attr(\"stop-color\", this.calculateColor(d.data, this.t2));\n grad.append(\"stop\")\n .attr(\"offset\", \"50%\")\n .attr(\"stop-color\", this.calculateColor(d.data, this.t1));\n return \"url(#grad-\" + this.graphId + \"-\" + d.data.index + \")\";\n });\n // Text for new nodes\n nodeEnter.append('text')\n .attr(\"dy\", \".35em\")\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"font-size\", this.config.fontSize + \"px\")\n .attr(\"pointer-events\", \"none\")\n .attr(\"fill\", \"#000\")\n .attr(\"y\", 24)\n .attr(\"x\", 10)\n .attr(\"text-anchor\", \"middle\")\n .each(function (d) {\n const textLabel = (0, d3_selection_1.select)(this);\n const name = d.data.name.split('
              ');\n if (name.length > 1) {\n textLabel.append(\"tspan\")\n .attr(\"x\", \"10\")\n .attr(\"dy\", \".35em\")\n .attr(\"font-weight\", \"bold\")\n .text(name[0]);\n textLabel.append(\"tspan\")\n .attr(\"x\", \"10\")\n .attr(\"dy\", \"1em\")\n .text(name[1]);\n textLabel.attr(\"class\", \"nowrap\");\n }\n else {\n return textLabel.text(d.data.name);\n }\n });\n nodeEnter.append(\"path\")\n .attr(\"stroke\", \"#000\")\n .attr(\"d\", function (d) {\n if (d.data.trial_ids.length > 1) {\n return \"M10,\" + 0 +\n \"L10,\" + 20;\n }\n return \"M0,0L0,0\";\n });\n // Update\n var nodeUpdate = nodeEnter.merge(node);\n // Transition to proper position\n nodeUpdate.transition()\n .duration(this.config.duration)\n .attr(\"transform\", (d) => {\n let color = this.colors[d.data.trial_ids[0]];\n d.dy = 0;\n if (color == 1) {\n d.dy = -40;\n }\n else if (color == 2) {\n d.dy = 40;\n }\n return \"translate(\" + (d.x - 10) + \",\" + (d.y + d.dy - 10) + \")\";\n });\n // Update the node attributes and style\n nodeUpdate.select('rect.node')\n .attr('width', 20)\n .attr('height', 20)\n .attr('rx', 20)\n .attr('ry', 20)\n .attr(\"rx\", (d) => {\n return d._children ? 0 : 20;\n })\n .attr(\"ry\", (d) => {\n return d._children ? 0 : 20;\n })\n .attr('cursor', 'pointer');\n // Remove exiting nodes\n var nodeExit = node.exit().transition()\n .duration(this.config.duration)\n .attr(\"transform\", function (d) {\n return \"translate(\" + source.x + \",\" + source.y + \")\";\n })\n .remove();\n // Reduce node rects size to 0 on exit\n nodeExit.select('rect')\n .attr('rx', 1e-6)\n .attr('ry', 1e-6)\n .attr('width', 1e-6)\n .attr('height', 1e-6);\n // Reduce opacity of labels on exit\n nodeExit.select('text')\n .style('fill-opacity', 1e-6);\n }\n updateLinks(source, edges) {\n var link = this.g.selectAll('path.link')\n .data(edges, (d) => d.id);\n // Enter any new links at the parent's previous position.\n var linkEnter = link.enter().insert('path', \"g\")\n .attr(\"class\", \"link\")\n .attr(\"id\", (d, i) => {\n return \"pathId-\" + this.graphId + \"-\" + d.id;\n })\n .attr(\"fill\", \"none\")\n .attr(\"stroke-width\", \"1.5px\")\n .attr('d', (d) => {\n var o = { y: source.y0, x: source.x0 };\n if (d.source.dy == undefined) {\n d.source.dy = 0;\n }\n if (d.target.dy == undefined) {\n d.target.dy = 0;\n }\n let ox = source.x0 || 0, oy = source.y0 || 0, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1;\n if (d.type === 'initial' || d.type === 'call' || d.type == 'return') {\n // Initial\n return (0, utils_1.diagonal)(o, o);\n }\n else if (dx === 0 && dy === 0) {\n // Loop\n return `M ${ox}, ${oy}\n A 15,20\n -45,1,1\n ${ox + 5},${oy + 8}`;\n }\n //return diagonal(d.source, d.target);\n return (0, utils_1.diagonal)(o, o);\n })\n .attr(\"marker-end\", (d) => {\n let count = 0;\n for (let trial_id in d.count) {\n if (trial_id == this.t1.toString()) {\n count += 1;\n }\n if (trial_id == this.t2.toString()) {\n count += 2;\n }\n }\n if (count == 0 || count == 3) { // Single trial or diff\n return \"url(#\" + this.graphId + \"-end)\";\n }\n if (count == 1) { // First trial\n return \"url(#\" + this.graphId + \"-endbefore)\";\n }\n if (count == 2) { // Second trial\n return \"url(#\" + this.graphId + \"-endafter)\";\n }\n return \"\";\n })\n .attr('stroke', (d) => {\n if (d.type === 'sequence') {\n return '#07F';\n }\n return '#666';\n })\n .attr('stroke-dasharray', (d) => {\n if (d.type === 'return') {\n return '10,2';\n }\n return 'none';\n });\n // UPDATE\n var linkUpdate = linkEnter.merge(link);\n // Transition back to the parent element position\n linkUpdate.transition()\n .duration(this.config.duration)\n .attr('d', (d) => {\n if (d.source.dy == undefined) {\n d.source.dy = 0;\n }\n if (d.target.dy == undefined) {\n d.target.dy = 0;\n }\n let sd = d.source.data, td = d.target.data, x1 = d.source.x, y1 = d.source.y + d.source.dy, x2 = d.target.x, y2 = d.target.y + d.target.dy, dx = x2 - x1, dy = y2 - y1, theta = Math.atan(dx / dy), phi = Math.atan(dy / dx), r = 10 + 2, sin_theta = r * Math.sin(theta), cos_theta = r * Math.cos(theta), sin_phi = r * Math.sin(phi), cos_phi = r * Math.cos(phi), m1 = (y2 > y1) ? 1 : -1, m2 = (x2 > x1) ? -1 : 1;\n if (d.type === 'initial') {\n // Initial\n return `M ${(x2 - 20)},${(y2 - 20)}\n L ${(x2 - r / 2.0)},${(y2 - r / 2.0)}`;\n }\n else if (d.type === 'call' || d.type == 'return') {\n // Call/Return\n x1 += m1 * sin_theta;\n x2 += m2 * cos_phi;\n y1 += m1 * cos_theta;\n y2 += m2 * sin_phi;\n if (dx === 0) {\n if (y1 > y2) {\n //y1 -= 10\n y2 += 20;\n }\n else {\n //y1 += 10\n y2 -= 20;\n }\n }\n return `M ${x1}, ${y1}\n L ${x2}, ${y2}`;\n }\n else if (dx === 0 && dy === 0) {\n // Loop\n return `M ${x1}, ${y1}\n A 15,20\n -45,1,1\n ${x2 + 5},${y2 + 8}`;\n }\n else if (sd.parent_index == td.parent_index) {\n // Same caller\n if (dy === 0 && sd.children_index == td.children_index - 1) {\n // Immediate sequence\n return `M ${x1}, ${y1}\n L ${(x2 + m2 * cos_phi)}, ${y2}`;\n }\n else {\n let sign = -1;\n if (y1 < y2) {\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n y2 -= r;\n sign = -1;\n }\n else if (y2 < y1) {\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n y2 += r;\n sign = 1;\n }\n else if (x1 >= x2) {\n y1 += r;\n y2 += r;\n sign = 2;\n }\n else {\n y1 -= r;\n y2 -= r;\n sign = -1;\n }\n return `M ${x1}, ${y1}\n C ${(x1 + x2) / 2} ${y1 + r * sign},\n ${(x1 + x2) / 2} ${y2 + r * sign},\n ${x2} ${y2}`;\n }\n }\n // Other caller\n x1 += m1 * sin_theta;\n y1 += m1 * cos_theta;\n x2 += m2 * cos_phi;\n y2 += m2 * sin_phi;\n return `M ${x1} ${y1}\n C ${(x1 + x2) / 2} ${y1},\n ${(x1 + x2) / 2} ${y2},\n ${x2} ${y2}`;\n });\n // Remove any exiting links\n link.exit() //.transition()\n .attr('d', function (d) {\n return (0, utils_1.diagonal)(d.source, d.target);\n })\n .remove(); // linkExit\n }\n updateLinkLabels(edges) {\n var labelPath = this.g.selectAll(\".label_text\")\n .data(edges, (d) => d.id);\n var labelEnter = labelPath.enter().append(\"text\")\n .attr(\"class\", \"label_text\")\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"font-size\", this.config.labelFontSize + \"px\")\n .attr(\"pointer-events\", \"none\")\n .attr(\"fill\", \"#000\")\n .attr(\"text-anchor\", \"middle\")\n .attr(\"dx\", (d) => {\n if (d.source.x == d.target.x) {\n return 29;\n }\n return (Math.abs(d.source.x - d.target.x) - 10) / 2;\n })\n .attr(\"dy\", -3)\n .attr(\"id\", (d, i) => {\n return \"pathlabel-\" + this.graphId + \"-\" + d.id;\n })\n .append(\"textPath\")\n .attr(\"xlink:href\", (d, i) => {\n return \"#pathId-\" + this.graphId + \"-\" + d.id;\n })\n .text((d) => {\n if (d.type === 'initial') {\n return '';\n }\n if (this.t1 == this.t2 || !d.count[this.t2]) {\n return d.count[this.t1].toString();\n }\n else if (!d.count[this.t1]) {\n return d.count[this.t2].toString();\n }\n return d.count[this.t1] + ', ' + d.count[this.t2];\n });\n labelEnter.merge(labelPath);\n labelPath.exit().remove();\n }\n zoomFunction(event) {\n this.closeTooltip();\n this.transform = event.transform;\n this.g.attr(\"transform\", event.transform);\n }\n _graphId() {\n return \"trial-graph-\" + this.graphId;\n }\n}\nexports.TrialGraph = TrialGraph;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./config\"), exports);\n__exportStar(require(\"./structures\"), exports);\n__exportStar(require(\"./graph\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diagonal = diagonal;\n/**\n * Create diagonal line between two nodes\n */\nfunction diagonal(s, d) {\n if (s.dy == undefined) {\n s.dy = 0;\n }\n if (d.dy == undefined) {\n d.dy = 0;\n }\n let path = `M ${s.x} ${(s.y + s.dy)}\n C ${(s.x + d.x) / 2} ${(s.y + s.dy)},\n ${(s.x + d.x) / 2} ${(d.y + d.dy)},\n ${d.x} ${(d.y + d.dy)}`;\n return path;\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./d3svg\"), exports);\n__exportStar(require(\"./random\"), exports);\n__exportStar(require(\"./text\"), exports);\n__exportStar(require(\"./web\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.makeid = makeid;\nfunction makeid() {\n var text = \"\";\n var possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n for (var i = 0; i < 5; i++)\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n return text;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrap = wrap;\nconst d3_selection_1 = require(\"d3-selection\");\nfunction wrap(text, width) {\n text.each(function () {\n var text = (0, d3_selection_1.select)(this), words = text.text().split(/(?=_)/).reverse(), word, line = [], lineNumber = 0, lineHeight = 1.1, // ems\n y = text.attr(\"y\"), dy = parseFloat(text.attr(\"dy\")), tspan = text.text(null).append(\"tspan\").attr(\"x\", 10).attr(\"y\", y).attr(\"dy\", dy + \"em\");\n while (word = words.pop()) {\n line.push(word);\n tspan.text(line.join(\"\"));\n if (tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\"\"));\n line = [word];\n tspan = text.append(\"tspan\").attr(\"x\", 10).attr(\"y\", y).attr(\"dy\", ++lineNumber * lineHeight + dy + \"em\").text(word);\n }\n }\n });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.json = json;\nconst d3_fetch_1 = require(\"d3-fetch\");\nfunction json(innertext, sub, url, fn) {\n let i = document.createElement('i');\n i.classList.add(\"loading\");\n i.classList.add(\"fa\");\n i.classList.add(\"fa-spinner\");\n i.classList.add(\"fa-pulse\");\n sub.innerHTML = \"\";\n sub.appendChild(i);\n sub.onclick = function () {\n json(innertext, sub, url, fn);\n };\n (0, d3_fetch_1.json)(url).then(function (data) {\n sub.onclick = function () {\n };\n fn(data);\n }).catch(function (error) {\n i.classList.remove(\"fa-spinner\");\n i.classList.remove(\"fa-pulse\");\n i.classList.add(\"fa-refresh\");\n i.classList.add(\"connection-error\");\n let text = document.createElement('span');\n text.classList.add(\"error-text\");\n text.innerHTML = innertext;\n i.appendChild(text);\n });\n}\n","/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without 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\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n return;\n\n\nvar define = function(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original)\n define.original.apply(this, arguments);\n else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n if (arguments.length == 2)\n payload = deps;\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original)\n return;\n params.push(dep);\n }\n return callback && callback.apply(null, params) || true;\n }\n};\n\nvar require = function(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n if (packagedModule == undefined && require.original)\n return require.original.apply(this, arguments);\n return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n }\n // normalize relative requires\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n\n var module = define.modules[moduleName];\n if (!module) {\n module = define.payloads[moduleName];\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n module = define.modules[moduleName] = exports || module;\n }\n return module;\n};\n\nfunction exportAce(ns) {\n var root = global;\n if (ns) {\n if (!global[ns])\n global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n Object.defineProperty(obj, name, {\n value: val,\n enumerable: false,\n writable: true,\n configurable: true\n });\n}\nif (!String.prototype.startsWith) {\n defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n position = position || 0;\n return this.lastIndexOf(searchString, position) === position;\n });\n}\nif (!String.prototype.endsWith) {\n defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n var subjectString = this;\n if (position === undefined || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n });\n}\nif (!String.prototype.repeat) {\n defineProp(String.prototype, \"repeat\", function (count) {\n var result = \"\";\n var string = this;\n while (count > 0) {\n if (count & 1)\n result += string;\n if ((count >>= 1))\n string += string;\n }\n return result;\n });\n}\nif (!String.prototype.includes) {\n defineProp(String.prototype, \"includes\", function (str, position) {\n return this.indexOf(str, position) != -1;\n });\n}\nif (!Object.assign) {\n Object.assign = function (target) {\n if (target === undefined || target === null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n Object.keys(source).forEach(function (key) {\n output[key] = source[key];\n });\n }\n }\n return output;\n };\n}\nif (!Object.values) {\n Object.values = function (o) {\n return Object.keys(o).map(function (k) {\n return o[k];\n });\n };\n}\nif (!Array.prototype.find) {\n defineProp(Array.prototype, \"find\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return kValue;\n }\n }\n });\n}\nif (!Array.prototype.findIndex) {\n defineProp(Array.prototype, \"findIndex\", function (predicate) {\n var len = this.length;\n var thisArg = arguments[1];\n for (var k = 0; k < len; k++) {\n var kValue = this[k];\n if (predicate.call(thisArg, kValue, k, this)) {\n return k;\n }\n }\n });\n}\nif (!Array.prototype.includes) {\n defineProp(Array.prototype, \"includes\", function (item, position) {\n return this.indexOf(item, position) != -1;\n });\n}\nif (!Array.prototype.fill) {\n defineProp(Array.prototype, \"fill\", function (value) {\n var O = this;\n var len = O.length >>> 0;\n var start = arguments[1];\n var relativeStart = start >> 0;\n var k = relativeStart < 0\n ? Math.max(len + relativeStart, 0)\n : Math.min(relativeStart, len);\n var end = arguments[2];\n var relativeEnd = end === undefined ? len : end >> 0;\n var final = relativeEnd < 0\n ? Math.max(len + relativeEnd, 0)\n : Math.min(relativeEnd, len);\n while (k < final) {\n O[k] = value;\n k++;\n }\n return O;\n });\n}\nif (!Array.of) {\n defineProp(Array, \"of\", function () {\n return Array.prototype.slice.call(arguments);\n });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/deep_copy\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.deepCopy = function deepCopy(obj) {\n if (typeof obj !== \"object\" || !obj)\n return obj;\n var copy;\n if (Array.isArray(obj)) {\n copy = [];\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n return copy;\n }\n if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n return obj;\n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n if (count >>= 1)\n string += string;\n }\n return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\nexports.copyArray = function (array) {\n var copy = [];\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && typeof array[i] == \"object\")\n copy[i] = this.copyObject(array[i]);\n else\n copy[i] = array[i];\n }\n return copy;\n};\nexports.deepCopy = require(\"./deep_copy\").deepCopy;\nexports.arrayToMap = function (arr) {\n var map = {};\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n return map;\n};\nexports.createMap = function (props) {\n var map = Object.create(null);\n for (var i in props) {\n map[i] = props[i];\n }\n return map;\n};\nexports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n};\nexports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/ 0xffff ? 2 : 1;\n};\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n};\nexports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n }\n else if (exports.isLinux) {\n return exports.OS.LINUX;\n }\n else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\nvar os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\nvar ua = _navigator.userAgent || \"\";\nvar appName = _navigator.appName || \"\";\nexports.isWin = (os == \"win\");\nexports.isMac = (os == \"mac\");\nexports.isLinux = (os == \"linux\");\nexports.isIE =\n (appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0)\n ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window[\"opera\"]) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isSafari = parseFloat(ua.split(\" Safari/\")[1]) && !exports.isChrome || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window[\"MSStream\"];\nif (exports.isIOS)\n exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent)\n parent.appendChild(txt);\n return txt;\n }\n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent)\n parent.appendChild(arr);\n return arr;\n }\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n return els;\n }\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && typeof options == \"object\" && !Array.isArray(options))\n childIndex = 2;\n for (var i = childIndex; i < arr.length; i++)\n buildDom(arr[i], el, refs);\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n }\n else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n }\n else if (n === \"ref\") {\n if (refs)\n refs[val] = el;\n }\n else if (n === \"style\") {\n if (typeof val == \"string\")\n el.style.cssText = val;\n }\n else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\nexports.getDocumentHead = function (doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n};\nexports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n classes.splice(index, 1);\n }\n el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g), add = true;\n while (true) {\n var index = classes.indexOf(name);\n if (index == -1) {\n break;\n }\n add = false;\n classes.splice(index, 1);\n }\n if (add)\n classes.push(name);\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n }\n else {\n exports.removeCssClass(node, className);\n }\n};\nexports.hasCssString = function (id, doc) {\n var index = 0, sheets;\n doc = doc || document;\n if ((sheets = doc.querySelectorAll(\"style\"))) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) {\n return true;\n }\n }\n }\n};\nexports.removeElementById = function (id, doc) {\n doc = doc || document;\n if (doc.getElementById(id)) {\n doc.getElementById(id).remove();\n }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n strictCSP = value;\n if (value == false)\n insertPendingStyles();\n else if (!cssCache)\n cssCache = [];\n};\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function (item) {\n importCssString(item[0], item[1]);\n });\n}\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n }\n else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP)\n return;\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n }\n else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (doc) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = (doc && doc.documentElement) || (document && document.documentElement);\n if (!body)\n return 0;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n if (noScrollbar === withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n : true;\nif (useragent.isChromeOS)\n exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined)\n exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n exports.HAS_CSS_ANIMATION = true;\n div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n}\nelse {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort)\n callback();\n }\n };\n};\nexports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n};\n\n});\n\nace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n};\nexports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\nexports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n if (typeof e != \"object\" || !e)\n e = {};\n if (!e.type)\n e.type = eventName;\n if (!e.stopPropagation)\n e.stopPropagation = stopPropagation;\n if (!e.preventDefault)\n e.preventDefault = preventDefault;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped)\n break;\n }\n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n };\nEventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++)\n listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n var _self = this;\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n callback.apply(null, arguments);\n });\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = { _disabled_: {} };\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled)\n handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n return;\n var disabled = handlers._disabled_[eventName];\n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n }\n else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\nEventEmitter.on =\n EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\nEventEmitter.off =\n EventEmitter.removeListener =\n EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n };\nEventEmitter.removeAllListeners = function (eventName) {\n if (!eventName)\n this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry)\n this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers)\n this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/report_error\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.reportError = function reportError(msg, data) {\n var e = new Error(msg);\n e[\"data\"] = data;\n if (typeof console == \"object\" && console.error)\n console.error(e);\n setTimeout(function () { throw e; });\n};\n\n});\n\nace.define(\"ace/lib/default_english_messages\",[\"require\",\"exports\",\"module\"], function(require, exports, module){var defaultEnglishMessages = {\n \"autocomplete.popup.aria-roledescription\": \"Autocomplete suggestions\",\n \"autocomplete.popup.aria-label\": \"Autocomplete suggestions\",\n \"autocomplete.popup.item.aria-roledescription\": \"item\",\n \"autocomplete.loading\": \"Loading...\",\n \"editor.scroller.aria-roledescription\": \"editor\",\n \"editor.scroller.aria-label\": \"Editor content, press Enter to start editing, press Escape to exit\",\n \"editor.gutter.aria-roledescription\": \"editor gutter\",\n \"editor.gutter.aria-label\": \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\",\n \"error-marker.good-state\": \"Looks good!\",\n \"prompt.recently-used\": \"Recently used\",\n \"prompt.other-commands\": \"Other commands\",\n \"prompt.no-matching-commands\": \"No matching commands\",\n \"search-box.find.placeholder\": \"Search for\",\n \"search-box.find-all.text\": \"All\",\n \"search-box.replace.placeholder\": \"Replace with\",\n \"search-box.replace-next.text\": \"Replace\",\n \"search-box.replace-all.text\": \"All\",\n \"search-box.toggle-replace.title\": \"Toggle Replace mode\",\n \"search-box.toggle-regexp.title\": \"RegExp Search\",\n \"search-box.toggle-case.title\": \"CaseSensitive Search\",\n \"search-box.toggle-whole-word.title\": \"Whole Word Search\",\n \"search-box.toggle-in-selection.title\": \"Search In Selection\",\n \"search-box.search-counter\": \"$0 of $1\",\n \"text-input.aria-roledescription\": \"editor\",\n \"text-input.aria-label\": \"Cursor at row $0\",\n \"gutter.code-folding.range.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.closed.aria-label\": \"Toggle code folding, rows $0 through $1\",\n \"gutter.code-folding.open.aria-label\": \"Toggle code folding, row $0\",\n \"gutter.code-folding.closed.title\": \"Unfold code\",\n \"gutter.code-folding.open.title\": \"Fold code\",\n \"gutter.annotation.aria-label.error\": \"Error, read annotations row $0\",\n \"gutter.annotation.aria-label.warning\": \"Warning, read annotations row $0\",\n \"gutter.annotation.aria-label.info\": \"Info, read annotations row $0\",\n \"inline-fold.closed.title\": \"Unfold code\",\n \"gutter-tooltip.aria-label.error.singular\": \"error\",\n \"gutter-tooltip.aria-label.error.plural\": \"errors\",\n \"gutter-tooltip.aria-label.warning.singular\": \"warning\",\n \"gutter-tooltip.aria-label.warning.plural\": \"warnings\",\n \"gutter-tooltip.aria-label.info.singular\": \"information message\",\n \"gutter-tooltip.aria-label.info.plural\": \"information messages\",\n \"gutter.annotation.aria-label.security\": \"Security finding, read annotations row $0\",\n \"gutter.annotation.aria-label.hint\": \"Suggestion, read annotations row $0\",\n \"gutter-tooltip.aria-label.security.singular\": \"security finding\",\n \"gutter-tooltip.aria-label.security.plural\": \"security findings\",\n \"gutter-tooltip.aria-label.hint.singular\": \"suggestion\",\n \"gutter-tooltip.aria-label.hint.plural\": \"suggestions\",\n \"editor.tooltip.disable-editing\": \"Editing is disabled\"\n};\nexports.defaultEnglishMessages = defaultEnglishMessages;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/report_error\",\"ace/lib/default_english_messages\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar reportError = require(\"./report_error\").reportError;\nvar defaultEnglishMessages = require(\"./default_english_messages\").defaultEnglishMessages;\nvar optionsProvider = {\n setOptions: function (optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function (optionNames) {\n var result = {};\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n }\n else if (!Array.isArray(optionNames)) {\n optionNames = Object.keys(optionNames);\n }\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function (name, value) {\n if (this[\"$\" + name] === value)\n return;\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet)\n this[\"$\" + name] = value;\n if (opt && opt.set)\n opt.set.call(this, value);\n },\n getOption: function (name) {\n var opt = this.$options[name];\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n if (opt.forwardTo)\n return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n};\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\nvar messages;\nvar nlsPlaceholders;\nvar AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\n messages = defaultEnglishMessages;\n nlsPlaceholders = \"dollarSigns\";\n }\n AppConfig.prototype.defineOptions = function (obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = { forwardTo: opt };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt)\n obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n AppConfig.prototype.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt)\n obj.setOption(key, opt.value);\n });\n };\n AppConfig.prototype.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions)\n if (this.$defaultOptions[path][name])\n break;\n if (!this.$defaultOptions[path][name])\n return false;\n }\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n if (opts[name]) {\n if (opts.forwardTo)\n this.setDefaultValue(opts.forwardTo, name, value);\n else\n opts[name].value = value;\n }\n };\n AppConfig.prototype.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n AppConfig.prototype.setMessages = function (value, options) {\n messages = value;\n if (options && options.placeholders) {\n nlsPlaceholders = options.placeholders;\n }\n };\n AppConfig.prototype.nls = function (key, defaultString, params) {\n if (!messages[key]) {\n warn(\"No message found for the key '\" + key + \"' in messages with id \" + messages.$id + \", trying to find a translation for the default string '\" + defaultString + \"'.\");\n if (!messages[defaultString]) {\n warn(\"No message found for the default string '\" + defaultString + \"' in the provided messages. Falling back to the default English message.\");\n }\n }\n var translated = messages[key] || messages[defaultString] || defaultString;\n if (params) {\n if (nlsPlaceholders === \"dollarSigns\") {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, dollarMatch) {\n if (dollarMatch == \"$\")\n return \"$\";\n return params[dollarMatch];\n });\n }\n if (nlsPlaceholders === \"curlyBrackets\") {\n translated = translated.replace(/\\{([^\\}]+)\\}/g, function (_, curlyBracketMatch) {\n return params[curlyBracketMatch];\n });\n }\n }\n return translated;\n };\n return AppConfig;\n}());\nAppConfig.prototype.warn = warn;\nAppConfig.prototype.reportError = reportError;\noop.implement(AppConfig.prototype, EventEmitter);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n background: #f0f0f0;\\n color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n width: 1px;\\n background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n background-color: #FFFFFF;\\n color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n color: black;\\n}\\n \\n.ace-tm .ace_invisible {\\n color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n background-color: rgba(255, 0, 0, 0.1);\\n color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n background: rgb(250, 250, 255);\\n border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n};\nexports.get = function (key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\nexports.set = function (key, value) {\n if (options.hasOwnProperty(key))\n options[key] = value;\n else if (this.setDefaultValue(\"\", key, value) == false)\n throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\")\n dom.useStrictCSP(value);\n};\nexports.all = function () {\n return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n if ((!base || base == component) && parts.length > 1)\n base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n if (path == null) {\n path = options.basePath;\n }\n else if (sep == \"/\") {\n component = sep = \"\";\n }\n if (path && path.slice(-1) != \"/\")\n path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n if (moduleName === \"ace/theme/textmate\" || moduleName === \"./theme/textmate\")\n return cb(null, require(\"./theme/textmate\"));\n if (customLoader)\n return customLoader(moduleName, cb);\n console.error(\"loader is not configured\");\n};\nvar customLoader;\nexports.setLoader = function (cb) {\n customLoader = cb;\n};\nexports.dynamicModules = Object.create(null);\nexports.$loading = {};\nexports.$loaded = {};\nexports.loadModule = function (moduleId, onLoad) {\n var loadedModule;\n if (Array.isArray(moduleId)) {\n var moduleType = moduleId[0];\n var moduleName = moduleId[1];\n }\n else if (typeof moduleId == \"string\") {\n var moduleName = moduleId;\n }\n var load = function (module) {\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1)\n return;\n var afterLoad = function () {\n loader(moduleName, function (err, module) {\n if (module)\n exports.$loaded[moduleName] = module;\n exports._emit(\"load.module\", { name: moduleName, module: module });\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n if (!exports.get(\"packaged\"))\n return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n };\n if (exports.dynamicModules[moduleName]) {\n exports.dynamicModules[moduleName]().then(function (module) {\n if (module.default) {\n load(module.default);\n }\n else {\n load(module);\n }\n });\n }\n else {\n try {\n loadedModule = this.$require(moduleName);\n }\n catch (e) { }\n load(loadedModule || exports.$loaded[moduleName]);\n }\n};\nexports.$require = function (moduleName) {\n if (typeof module[\"require\"] == \"function\") {\n var req = \"require\";\n return module[req](moduleName);\n }\n};\nexports.setModuleLoader = function (moduleName, onLoad) {\n exports.dynamicModules[moduleName] = onLoad;\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n if (!options.basePath && !options.workerPath\n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n reportErrorIfPathIsNotConfigured = function () { };\n }\n};\nexports.version = \"1.43.2\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n require([moduleName], function(module) {\n cb(null, module);\n });\n});\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n config.init = init;\n config.$require = require;\n ace.require = require;\n\n if (typeof define === \"function\")\n ace.define = define;\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n \n if (currentScript && currentScript.src) {\n scriptUrl = currentScript.src.split(/[?#]/)[0].split(\"/\").slice(0, -1).join(\"/\") || \"\";\n }\n \n var scripts = currentDocument.getElementsByTagName(\"script\");\n for (var i=0; i [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n Range.prototype.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n Range.prototype.compareRange = function (range) {\n var cmp, end = range.end, start = range.start;\n cmp = this.compare(end.row, end.column);\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n if (cmp == 1) {\n return 2;\n }\n else if (cmp == 0) {\n return 1;\n }\n else {\n return 0;\n }\n }\n else if (cmp == -1) {\n return -2;\n }\n else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n }\n else if (cmp == 1) {\n return 42;\n }\n else {\n return 0;\n }\n }\n };\n Range.prototype.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n Range.prototype.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n Range.prototype.intersects = function (range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n Range.prototype.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n Range.prototype.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n Range.prototype.setStart = function (row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n }\n else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n Range.prototype.setEnd = function (row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n }\n else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n Range.prototype.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n }\n else {\n return true;\n }\n }\n return false;\n };\n Range.prototype.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n }\n }\n if (row < this.start.row)\n return -1;\n if (row > this.end.row)\n return 1;\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n return 0;\n };\n Range.prototype.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n }\n else if (this.start.row == row && this.start.column == column) {\n return -1;\n }\n else {\n return this.compare(row, column);\n }\n };\n Range.prototype.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow)\n var end = { row: lastRow + 1, column: 0 };\n else if (this.end.row < firstRow)\n var end = { row: firstRow, column: 0 };\n if (this.start.row > lastRow)\n var start = { row: lastRow + 1, column: 0 };\n else if (this.start.row < firstRow)\n var start = { row: firstRow, column: 0 };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0)\n return this;\n else if (cmp == -1)\n var start = { row: row, column: column };\n else\n var end = { row: row, column: column };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n Range.prototype.isEmpty = function () {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n Range.prototype.isMultiLine = function () {\n return (this.start.row !== this.end.row);\n };\n Range.prototype.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n Range.prototype.collapseRows = function () {\n if (this.end.column == 0)\n return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n else\n return new Range(this.start.row, 0, this.end.row, 0);\n };\n Range.prototype.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n Range.prototype.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n return Range;\n}());\nRange.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = {\n MODIFIER_KEYS: {\n 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta',\n 91: 'MetaLeft', 92: 'MetaRight', 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1, \"alt\": 2, \"option\": 2, \"shift\": 4,\n \"super\": 8, \"meta\": 8, \"command\": 8, \"cmd\": 8,\n \"control\": 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n '-13': \"NumpadEnter\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 59: ';', 61: '=', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n};\nvar codeToKeyCode = {\n Command: 224,\n Backspace: 8,\n Tab: 9,\n Return: 13,\n Enter: 13,\n Pause: 19,\n Escape: 27,\n PageUp: 33,\n PageDown: 34,\n End: 35,\n Home: 36,\n Insert: 45,\n Delete: 46,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Backquote: 192,\n Minus: 189,\n Equal: 187,\n BracketLeft: 219,\n Backslash: 220,\n BracketRight: 221,\n Semicolon: 186,\n Quote: 222,\n Comma: 188,\n Period: 190,\n Slash: 191,\n Space: 32,\n NumpadAdd: 107,\n NumpadDecimal: 110,\n NumpadSubtract: 109,\n NumpadDivide: 111,\n NumpadMultiply: 106\n};\nfor (var i = 0; i < 10; i++) {\n codeToKeyCode[\"Digit\" + i] = 48 + i;\n codeToKeyCode[\"Numpad\" + i] = 96 + i;\n Keys.PRINTABLE_KEYS[48 + i] = \"\" + i;\n Keys.FUNCTION_KEYS[96 + i] = \"Numpad\" + i;\n}\nfor (var i = 65; i < 91; i++) {\n var chr = String.fromCharCode(i + 32);\n codeToKeyCode[\"Key\" + chr.toUpperCase()] = i;\n Keys.PRINTABLE_KEYS[i] = chr;\n}\nfor (var i = 1; i < 13; i++) {\n codeToKeyCode[\"F\" + i] = 111 + i;\n Keys.FUNCTION_KEYS[111 + i] = \"F\" + i;\n}\nvar modifiers = {\n Shift: 16,\n Control: 17,\n Alt: 18,\n Meta: 224\n};\nfor (var mod in modifiers) {\n codeToKeyCode[mod] = codeToKeyCode[mod + \"Left\"]\n = codeToKeyCode[mod + \"Right\"] = modifiers[mod];\n}\nexports.$codeToKeyCode = codeToKeyCode;\nKeys.PRINTABLE_KEYS[173] = '-';\nfor (var j in Keys.FUNCTION_KEYS) {\n var name = Keys.FUNCTION_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\nfor (var j in Keys.PRINTABLE_KEYS) {\n var name = Keys.PRINTABLE_KEYS[j].toLowerCase();\n Keys[name] = parseInt(j, 10);\n}\noop.mixin(Keys, Keys.MODIFIER_KEYS);\noop.mixin(Keys, Keys.PRINTABLE_KEYS);\noop.mixin(Keys, Keys.FUNCTION_KEYS);\nKeys.enter = Keys[\"return\"];\nKeys.escape = Keys.esc;\nKeys.del = Keys[\"delete\"];\n(function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n Keys.KEY_MODS[i] = mods.filter(function (x) {\n return i & Keys.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n})();\nKeys.KEY_MODS[0] = \"\";\nKeys.KEY_MODS[-1] = \"input-\";\noop.mixin(exports, Keys);\nexports.default = exports;\nexports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\")\n keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n};\n\n});\n\nace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\"; var keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\nvar pressedKeys = null;\nvar ts = 0;\nvar activeListenerOptions;\nfunction detectListenerOptionsSupport() {\n activeListenerOptions = false;\n try {\n document.createComment(\"\").addEventListener(\"test\", function () { }, {\n get passive() {\n activeListenerOptions = { passive: false };\n return true;\n }\n });\n }\n catch (e) { }\n}\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\nfunction EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n}\nEventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n};\nvar addListener = exports.addListener = function (elem, type, callback, destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer)\n destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n};\nvar removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n};\nexports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n};\nexports.stopPropagation = function (e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\nexports.preventDefault = function (e) {\n if (e.preventDefault)\n e.preventDefault();\n};\nexports.getButton = function (e) {\n if (e.type == \"dblclick\")\n return 0;\n if (e.type == \"contextmenu\" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey)))\n return 2;\n return e.button;\n};\nexports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n};\nexports.addMouseWheelListener = function (el, callback, destroyer) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.15;\n var deltaX = e.deltaX || 0;\n var deltaY = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = deltaX * factor;\n e.wheelY = deltaY * factor;\n break;\n case e.DOM_DELTA_LINE:\n var linePixels = 15;\n e.wheelX = deltaX * linePixels;\n e.wheelY = deltaY * linePixels;\n break;\n case e.DOM_DELTA_PAGE:\n var pagePixels = 150;\n e.wheelX = deltaX * pagePixels;\n e.wheelY = deltaY * pagePixels;\n break;\n }\n callback(e);\n }, destroyer);\n};\nexports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n }\n else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\n }\n else {\n clicks = 1;\n }\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick)\n clicks = 1;\n if (timer)\n clearTimeout(timer);\n timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4)\n clicks = 0;\n else if (clicks > 1)\n return eventHandler[callbackName](eventNames[clicks], e);\n }\n if (!Array.isArray(elements))\n elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n};\nfunction getModifierHash(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n}\nexports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n if (!keyCode && e.code) {\n keyCode = keys.$codeToKeyCode[e.code] || keyCode;\n }\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = e.location;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\n }\n else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50)\n pressedKeys.altGr = true;\n }\n }\n }\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n if (!hashId && keyCode === 13) {\n if (e.location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented)\n return;\n }\n }\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented)\n return;\n else\n hashId &= ~8;\n }\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + (postMessageId++);\n var listener = function (e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n }\n else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window[\"mozRequestAnimationFrame\"]\n || window[\"webkitRequestAnimationFrame\"]\n || window[\"msRequestAnimationFrame\"]\n || window[\"oRequestAnimationFrame\"]);\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n lineMode: false,\n pasteCancelled: function () {\n if ($cancelT && $cancelT > Date.now() - 50)\n return true;\n return $cancelT = false;\n },\n cancel: function () {\n $cancelT = Date.now();\n }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/config\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar nls = require(\"../config\").nls;\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput = /** @class */ (function () {\n function TextInput(parentNode, host) {\n var _this = this;\n this.host = host;\n this.text = dom.createElement(\"textarea\");\n this.text.className = \"ace_text-input\";\n this.text.setAttribute(\"wrap\", \"off\");\n this.text.setAttribute(\"autocorrect\", \"off\");\n this.text.setAttribute(\"autocapitalize\", \"off\");\n this.text.setAttribute(\"spellcheck\", \"false\");\n this.text.style.opacity = \"0\";\n parentNode.insertBefore(this.text, parentNode.firstChild); this.copied = false;\n this.pasted = false;\n this.inComposition = false;\n this.sendingText = false;\n this.tempStyle = '';\n if (!isMobile)\n this.text.style.fontSize = \"1px\";\n this.commandMode = false;\n this.ignoreFocusEvents = false;\n this.lastValue = \"\";\n this.lastSelectionStart = 0;\n this.lastSelectionEnd = 0;\n this.lastRestoreEnd = 0;\n this.rowStart = Number.MAX_SAFE_INTEGER;\n this.rowEnd = Number.MIN_SAFE_INTEGER;\n this.numberOfExtraLines = 0;\n try {\n this.$isFocused = document.activeElement === this.text;\n }\n catch (e) {\n }\n this.cancelComposition = this.cancelComposition.bind(this);\n this.setAriaOptions({ role: \"textbox\" });\n event.addListener(this.text, \"blur\", function (e) {\n if (_this.ignoreFocusEvents)\n return;\n host.onBlur(e);\n _this.$isFocused = false;\n }, host);\n event.addListener(this.text, \"focus\", function (e) {\n if (_this.ignoreFocusEvents)\n return;\n _this.$isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\n }\n catch (e) {\n }\n }\n host.onFocus(e);\n if (useragent.isEdge)\n setTimeout(_this.resetSelection.bind(_this));\n else\n _this.resetSelection();\n }, host); this.$focusScroll = false;\n host.on(\"beforeEndOperation\", function () {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\")\n return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n if (_this.inComposition && isUserAction) {\n _this.lastValue = _this.text.value = \"\";\n _this.onCompositionEnd();\n }\n _this.resetSelection();\n });\n host.on(\"changeSelection\", this.setAriaLabel.bind(this));\n this.resetSelection = isIOS ? this.$resetSelectionIOS : this.$resetSelection;\n if (this.$isFocused)\n host.onFocus();\n this.inputHandler = null;\n this.afterContextMenu = false;\n event.addCommandKeyListener(this.text, function (e, hashId, keyCode) {\n if (_this.inComposition)\n return;\n return host.onCommandKey(e, hashId, keyCode);\n }, host);\n event.addListener(this.text, \"select\", this.onSelect.bind(this), host);\n event.addListener(this.text, \"input\", this.onInput.bind(this), host);\n event.addListener(this.text, \"cut\", this.onCut.bind(this), host);\n event.addListener(this.text, \"copy\", this.onCopy.bind(this), host);\n event.addListener(this.text, \"paste\", this.onPaste.bind(this), host);\n if (!('oncut' in this.text) || !('oncopy' in this.text) || !('onpaste' in this.text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n return;\n switch (e.keyCode) {\n case 67:\n _this.onCopy(e);\n break;\n case 86:\n _this.onPaste(e);\n break;\n case 88:\n _this.onCut(e);\n break;\n }\n }, host);\n }\n this.syncComposition = lang.delayedCall(this.onCompositionUpdate.bind(this), 50).schedule.bind(null, null); //TODO: check this\n event.addListener(this.text, \"compositionstart\", this.onCompositionStart.bind(this), host);\n event.addListener(this.text, \"compositionupdate\", this.onCompositionUpdate.bind(this), host);\n event.addListener(this.text, \"keyup\", this.onKeyup.bind(this), host);\n event.addListener(this.text, \"keydown\", this.syncComposition.bind(this), host);\n event.addListener(this.text, \"compositionend\", this.onCompositionEnd.bind(this), host);\n this.closeTimeout;\n event.addListener(this.text, \"mouseup\", this.$onContextMenu.bind(this), host);\n event.addListener(this.text, \"mousedown\", function (e) {\n e.preventDefault();\n _this.onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", this.$onContextMenu.bind(this), host);\n event.addListener(this.text, \"contextmenu\", this.$onContextMenu.bind(this), host);\n if (isIOS)\n this.addIosSelectionHandler(parentNode, host, this.text);\n }\n TextInput.prototype.addIosSelectionHandler = function (parentNode, host, text) {\n var _this = this;\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout)\n clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n var detectArrowKeys = function (e) {\n if (document.activeElement !== text)\n return;\n if (typing || _this.inComposition || host.$mouseHandler.isMousePressed)\n return;\n if (_this.copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n }\n else if (selectionStart == 1) {\n key = KEYS.home;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n }\n else if (selectionStart < _this.lastSelectionStart && _this.lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n }\n else if (selectionStart < _this.lastSelectionStart || (selectionStart == _this.lastSelectionStart\n && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n key = KEYS.left;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n }\n else if (selectionEnd > _this.lastSelectionEnd && _this.lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n }\n else if (selectionEnd > _this.lastSelectionEnd || (selectionEnd == _this.lastSelectionEnd\n && _this.lastSelectionEnd != _this.lastSelectionStart && selectionStart == selectionEnd)) {\n key = KEYS.right;\n }\n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command)\n host.execCommand(command);\n }\n _this.lastSelectionStart = selectionStart;\n _this.lastSelectionEnd = selectionEnd;\n _this.resetSelection(\"\");\n }\n };\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n };\n TextInput.prototype.onContextMenuClose = function () {\n var _this = this;\n clearTimeout(this.closeTimeout);\n this.closeTimeout = setTimeout(function () {\n if (_this.tempStyle) {\n _this.text.style.cssText = _this.tempStyle;\n _this.tempStyle = '';\n }\n _this.host.renderer.$isMousePressed = false;\n if (_this.host.renderer.$keepTextAreaAtCursor)\n _this.host.renderer.$moveTextAreaToCursor();\n }, 0);\n };\n TextInput.prototype.$onContextMenu = function (e) {\n this.host.textInput.onContextMenu(e);\n this.onContextMenuClose();\n };\n TextInput.prototype.onKeyup = function (e) {\n if (e.keyCode == 27 && this.text.value.length < this.text.selectionStart) {\n if (!this.inComposition)\n this.lastValue = this.text.value;\n this.lastSelectionStart = this.lastSelectionEnd = -1;\n this.resetSelection();\n }\n this.syncComposition();\n };\n TextInput.prototype.cancelComposition = function () {\n this.ignoreFocusEvents = true;\n this.text.blur();\n this.text.focus();\n this.ignoreFocusEvents = false;\n };\n TextInput.prototype.onCompositionStart = function (e) {\n if (this.inComposition || !this.host.onCompositionStart || this.host.$readOnly)\n return;\n this.inComposition = {};\n if (this.commandMode)\n return;\n if (e.data)\n this.inComposition.useTextareaForIME = false;\n setTimeout(this.onCompositionUpdate.bind(this), 0);\n this.host._signal(\"compositionStart\");\n this.host.on(\"mousedown\", this.cancelComposition); //TODO:\n var range = this.host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n this.inComposition.markerRange = range;\n this.inComposition.selectionStart = this.lastSelectionStart;\n this.host.onCompositionStart(this.inComposition);\n if (this.inComposition.useTextareaForIME) {\n this.lastValue = this.text.value = \"\";\n this.lastSelectionStart = 0;\n this.lastSelectionEnd = 0;\n }\n else {\n if (this.text.msGetInputContext)\n this.inComposition.context = this.text.msGetInputContext();\n if (this.text.getInputContext)\n this.inComposition.context = this.text.getInputContext();\n }\n };\n TextInput.prototype.onCompositionUpdate = function () {\n if (!this.inComposition || !this.host.onCompositionUpdate || this.host.$readOnly)\n return;\n if (this.commandMode)\n return this.cancelComposition();\n if (this.inComposition.useTextareaForIME) {\n this.host.onCompositionUpdate(this.text.value);\n }\n else {\n var data = this.text.value;\n this.sendText(data);\n if (this.inComposition.markerRange) {\n if (this.inComposition.context) {\n this.inComposition.markerRange.start.column = this.inComposition.selectionStart = this.inComposition.context.compositionStartOffset;\n }\n this.inComposition.markerRange.end.column = this.inComposition.markerRange.start.column\n + this.lastSelectionEnd - this.inComposition.selectionStart + this.lastRestoreEnd;\n }\n }\n };\n TextInput.prototype.onCompositionEnd = function (e) {\n if (!this.host.onCompositionEnd || this.host.$readOnly)\n return;\n this.inComposition = false;\n this.host.onCompositionEnd();\n this.host.off(\"mousedown\", this.cancelComposition);\n if (e)\n this.onInput();\n };\n TextInput.prototype.onCut = function (e) {\n this.doCopy(e, true);\n };\n TextInput.prototype.onCopy = function (e) {\n this.doCopy(e, false);\n };\n TextInput.prototype.onPaste = function (e) {\n var data = this.handleClipboardData(e);\n if (clipboard.pasteCancelled())\n return;\n if (typeof data == \"string\") {\n if (data)\n this.host.onPaste(data, e);\n if (useragent.isIE)\n setTimeout(this.resetSelection);\n event.preventDefault(e);\n }\n else {\n this.text.value = \"\";\n this.pasted = true;\n }\n };\n TextInput.prototype.doCopy = function (e, isCut) {\n var _this = this;\n var data = this.host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n if (this.handleClipboardData(e, data)) {\n if (isIOS) {\n this.resetSelection(data);\n this.copied = data;\n setTimeout(function () {\n _this.copied = false;\n }, 10);\n }\n isCut ? this.host.onCut() : this.host.onCopy();\n event.preventDefault(e);\n }\n else {\n this.copied = true;\n this.text.value = data;\n this.text.select();\n setTimeout(function () {\n _this.copied = false;\n _this.resetSelection();\n isCut ? _this.host.onCut() : _this.host.onCopy();\n });\n }\n };\n TextInput.prototype.handleClipboardData = function (e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window[\"clipboardData\"];\n if (!clipboardData || BROKEN_SETDATA)\n return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n }\n else {\n return clipboardData.getData(mime);\n }\n }\n catch (e) {\n if (!forceIEMime)\n return this.handleClipboardData(e, data, true);\n }\n };\n TextInput.prototype.onInput = function (e) {\n if (this.inComposition)\n return this.onCompositionUpdate();\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\")\n return this.host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\")\n return this.host.execCommand(\"redo\");\n }\n var data = this.text.value;\n var inserted = this.sendText(data, true);\n if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && this.lastSelectionStart\n < 1 && this.lastSelectionStart == this.lastSelectionEnd) {\n this.resetSelection();\n }\n };\n TextInput.prototype.sendText = function (value, fromInput) {\n if (this.afterContextMenu)\n this.afterContextMenu = false;\n if (this.pasted) {\n this.resetSelection();\n if (value)\n this.host.onPaste(value);\n this.pasted = false;\n return \"\";\n }\n else {\n var selectionStart = this.text.selectionStart;\n var selectionEnd = this.text.selectionEnd;\n var extendLeft = this.lastSelectionStart;\n var extendRight = this.lastValue.length - this.lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n while (extendLeft > 0 && this.lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n inserted = inserted.slice(i);\n i = 1;\n while (extendRight > 0 && this.lastValue.length - i > this.lastSelectionStart - 1\n && this.lastValue[this.lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n return \"\";\n this.sendingText = true;\n var shouldReset = false;\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || this.commandMode) {\n this.host.onTextInput(inserted);\n }\n else {\n this.host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n this.sendingText = false;\n this.lastValue = value;\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n this.lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n TextInput.prototype.onSelect = function (e) {\n var _this = this;\n if (this.inComposition)\n return;\n var isAllSelected = function (text) {\n return text.selectionStart === 0 && text.selectionEnd >= _this.lastValue.length && text.value\n === _this.lastValue && _this.lastValue && text.selectionEnd !== _this.lastSelectionEnd;\n };\n if (this.copied) {\n this.copied = false;\n }\n else if (isAllSelected(this.text)) {\n this.host.selectAll();\n this.resetSelection();\n }\n else if (isMobile && this.text.selectionStart != this.lastSelectionStart) {\n this.resetSelection();\n }\n };\n TextInput.prototype.$resetSelectionIOS = function (value) {\n if (!this.$isFocused || (this.copied && !value) || this.sendingText)\n return;\n if (!value)\n value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != this.text.value)\n this.text.value = this.lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (this.host.selection.isEmpty() ? 0 : 1));\n if (this.lastSelectionStart != selectionStart || this.lastSelectionEnd != selectionEnd) {\n this.text.setSelectionRange(selectionStart, selectionEnd);\n }\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n };\n TextInput.prototype.$resetSelection = function () {\n var _this = this;\n if (this.inComposition || this.sendingText)\n return;\n if (!this.$isFocused && !this.afterContextMenu)\n return;\n this.inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n var positionToSelection = function (row, column) {\n var selection = column;\n for (var i = 1; i <= row - _this.rowStart && i < 2 * _this.numberOfExtraLines + 1; i++) {\n selection += _this.host.session.getLine(row - i).length + 1;\n }\n return selection;\n };\n if (this.host.session) {\n var selection = this.host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n if (row === this.rowEnd + 1) {\n this.rowStart = this.rowEnd + 1;\n this.rowEnd = this.rowStart + 2 * this.numberOfExtraLines;\n }\n else if (row === this.rowStart - 1) {\n this.rowEnd = this.rowStart - 1;\n this.rowStart = this.rowEnd - 2 * this.numberOfExtraLines;\n }\n else if (row < this.rowStart - 1 || row > this.rowEnd + 1) {\n this.rowStart = row > this.numberOfExtraLines ? row - this.numberOfExtraLines : 0;\n this.rowEnd = row > this.numberOfExtraLines ? row + this.numberOfExtraLines : 2\n * this.numberOfExtraLines;\n }\n var lines = [];\n for (var i = this.rowStart; i <= this.rowEnd; i++) {\n lines.push(this.host.session.getLine(i));\n }\n line = lines.join('\\n');\n selectionStart = positionToSelection(range.start.row, range.start.column);\n selectionEnd = positionToSelection(range.end.row, range.end.column);\n if (range.start.row < this.rowStart) {\n var prevLine = this.host.session.getLine(this.rowStart - 1);\n selectionStart = range.start.row < this.rowStart - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row > this.rowEnd) {\n var nextLine = this.host.session.getLine(this.rowEnd + 1);\n selectionEnd = range.end.row > this.rowEnd + 1 ? nextLine.length : range.end.column;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n }\n else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n }\n else {\n line = \"\\n\";\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n }\n else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n var newValue = line + \"\\n\\n\";\n if (newValue != this.lastValue) {\n this.text.value = this.lastValue = newValue;\n this.lastSelectionStart = this.lastSelectionEnd = newValue.length;\n }\n }\n if (this.afterContextMenu) {\n this.lastSelectionStart = this.text.selectionStart;\n this.lastSelectionEnd = this.text.selectionEnd;\n }\n if (this.lastSelectionEnd != selectionEnd || this.lastSelectionStart != selectionStart || this.text.selectionEnd\n != this.lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n this.text.setSelectionRange(selectionStart, selectionEnd);\n this.lastSelectionStart = selectionStart;\n this.lastSelectionEnd = selectionEnd;\n }\n catch (e) {\n }\n }\n this.inComposition = false;\n };\n TextInput.prototype.setHost = function (newHost) {\n this.host = newHost;\n };\n TextInput.prototype.setNumberOfExtraLines = function (number) {\n this.rowStart = Number.MAX_SAFE_INTEGER;\n this.rowEnd = Number.MIN_SAFE_INTEGER;\n if (number < 0) {\n this.numberOfExtraLines = 0;\n return;\n }\n this.numberOfExtraLines = number;\n };\n TextInput.prototype.setAriaLabel = function () {\n var ariaLabel = \"\";\n if (this.host.$textInputAriaLabel) {\n ariaLabel += \"\".concat(this.host.$textInputAriaLabel, \", \");\n }\n if (this.host.session) {\n var row = this.host.session.selection.cursor.row;\n ariaLabel += nls(\"text-input.aria-label\", \"Cursor at row $0\", [row + 1]);\n }\n this.text.setAttribute(\"aria-label\", ariaLabel);\n };\n TextInput.prototype.setAriaOptions = function (options) {\n if (options.activeDescendant) {\n this.text.setAttribute(\"aria-haspopup\", \"true\");\n this.text.setAttribute(\"aria-autocomplete\", options.inline ? \"both\" : \"list\");\n this.text.setAttribute(\"aria-activedescendant\", options.activeDescendant);\n }\n else {\n this.text.setAttribute(\"aria-haspopup\", \"false\");\n this.text.setAttribute(\"aria-autocomplete\", \"both\");\n this.text.removeAttribute(\"aria-activedescendant\");\n }\n if (options.role) {\n this.text.setAttribute(\"role\", options.role);\n }\n if (options.setLabel) {\n this.text.setAttribute(\"aria-roledescription\", nls(\"text-input.aria-roledescription\", \"editor\"));\n this.setAriaLabel();\n }\n };\n TextInput.prototype.focus = function () {\n var _this = this;\n this.setAriaOptions({\n setLabel: this.host.renderer.enableKeyboardAccessibility\n });\n if (this.tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return this.text.focus({ preventScroll: true });\n var top = this.text.style.top;\n this.text.style.position = \"fixed\";\n this.text.style.top = \"0px\";\n try {\n var isTransformed = this.text.getBoundingClientRect().top != 0;\n }\n catch (e) {\n return;\n }\n var ancestors = [];\n if (isTransformed) {\n var t = this.text.parentElement;\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", \"true\");\n if (!t.parentElement && t.getRootNode)\n t = t.getRootNode()[\"host\"];\n else\n t = t.parentElement;\n }\n }\n this.text.focus({ preventScroll: true });\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n setTimeout(function () {\n _this.text.style.position = \"\";\n if (_this.text.style.top == \"0px\")\n _this.text.style.top = top;\n }, 0);\n };\n TextInput.prototype.blur = function () {\n this.text.blur();\n };\n TextInput.prototype.isFocused = function () {\n return this.$isFocused;\n };\n TextInput.prototype.setInputHandler = function (cb) {\n this.inputHandler = cb;\n };\n TextInput.prototype.getInputHandler = function () {\n return this.inputHandler;\n };\n TextInput.prototype.getElement = function () {\n return this.text;\n };\n TextInput.prototype.setCommandMode = function (value) {\n this.commandMode = value;\n this.text.readOnly = false;\n };\n TextInput.prototype.setReadOnly = function (readOnly) {\n if (!this.commandMode)\n this.text.readOnly = readOnly;\n };\n TextInput.prototype.setCopyWithEmptySelection = function (value) {\n };\n TextInput.prototype.onContextMenu = function (e) {\n this.afterContextMenu = true;\n this.resetSelection();\n this.host._emit(\"nativecontextmenu\", {\n target: this.host,\n domEvent: e\n });\n this.moveToMouse(e, true);\n };\n TextInput.prototype.moveToMouse = function (e, bringToFront) {\n var _this = this;\n if (!this.tempStyle)\n this.tempStyle = this.text.style.cssText;\n this.text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n + \"text-indent: -\" + (this.lastSelectionStart + this.lastSelectionEnd) * this.host.renderer.characterWidth\n * 0.5 + \"px;\";\n var rect = this.host.container.getBoundingClientRect();\n var style = dom.computedStyle(this.host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(style.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - this.text.clientHeight - 2;\n var move = function (e) {\n dom.translate(_this.text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n move(e);\n if (e.type != \"mousedown\")\n return;\n this.host.renderer.$isMousePressed = true;\n clearTimeout(this.closeTimeout);\n if (useragent.isWin)\n event.capture(this.host.container, move, this.onContextMenuClose.bind(this));\n };\n TextInput.prototype.destroy = function () {\n if (this.text.parentElement)\n this.text.parentElement.removeChild(this.text);\n };\n return TextInput;\n}());\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nvar DefaultHandlers = /** @class */ (function () {\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler[\"selectByLines\"] = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler[\"selectByWords\"] = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n DefaultHandlers.prototype.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1)\n editor.selection.moveToPosition(pos);\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla)\n ev.preventDefault();\n }\n return;\n }\n this.mousedownEvent.time = Date.now();\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n DefaultHandlers.prototype.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent)\n return;\n if (this.mousedownEvent.getShiftKey())\n editor.selection.selectToPosition(pos);\n else if (!waitForClickSelection)\n editor.selection.moveToPosition(pos);\n if (!waitForClickSelection)\n this.select();\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n DefaultHandlers.prototype.select = function () {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n }\n else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.extendSelectionBy = function (unitName) {\n var anchor, editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column)\n cursor = range.start;\n }\n else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column)\n cursor = range.end;\n }\n else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n }\n else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n DefaultHandlers.prototype.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n };\n DefaultHandlers.prototype.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n DefaultHandlers.prototype.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n this.setState(\"select\");\n }\n else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n DefaultHandlers.prototype.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n }\n else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n DefaultHandlers.prototype.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n DefaultHandlers.prototype.onMouseWheel = function (ev) {\n if (ev.getAccelKey())\n return;\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n var editor = this.editor;\n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n canScroll = true;\n if (canScroll) {\n prevScroll.allowed = t;\n }\n else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n }\n else {\n prevScroll.allowed = 0;\n }\n }\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n return DefaultHandlers;\n}());\nDefaultHandlers.prototype.selectEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectAllEnd = DefaultHandlers.prototype.selectByLinesEnd;\nDefaultHandlers.prototype.selectByWordsEnd = DefaultHandlers.prototype.selectByLinesEnd;\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row)\n var cmp = 2 * cursor.column - range.start.column - range.end.column;\n else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n var cmp = cursor.column - 4;\n else\n var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0)\n return { cursor: range.start, anchor: range.end };\n else\n return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/lib/scroll\",[\"require\",\"exports\",\"module\"], function(require, exports, module){exports.preventParentScroll = function preventParentScroll(event) {\n event.stopPropagation();\n var target = event.currentTarget;\n var contentOverflows = target.scrollHeight > target.clientHeight;\n if (!contentOverflows) {\n event.preventDefault();\n }\n};\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar CLASSNAME = \"ace_tooltip\";\nvar Tooltip = /** @class */ (function () {\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n Tooltip.prototype.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = CLASSNAME;\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n Tooltip.prototype.getElement = function () {\n return this.$element || this.$init();\n };\n Tooltip.prototype.setText = function (text) {\n this.getElement().textContent = text;\n };\n Tooltip.prototype.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n Tooltip.prototype.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n Tooltip.prototype.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n Tooltip.prototype.setTheme = function (theme) {\n this.$element.className = CLASSNAME + \" \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n };\n Tooltip.prototype.show = function (text, x, y) {\n if (text != null)\n this.setText(text);\n if (x != null && y != null)\n this.setPosition(x, y);\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n Tooltip.prototype.hide = function (e) {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.getElement().className = CLASSNAME;\n this.isOpen = false;\n }\n };\n Tooltip.prototype.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n Tooltip.prototype.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n Tooltip.prototype.destroy = function () {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n return Tooltip;\n}());\nvar PopupManager = /** @class */ (function () {\n function PopupManager() {\n this.popups = [];\n }\n PopupManager.prototype.addPopup = function (popup) {\n this.popups.push(popup);\n this.updatePopups();\n };\n PopupManager.prototype.removePopup = function (popup) {\n var index = this.popups.indexOf(popup);\n if (index !== -1) {\n this.popups.splice(index, 1);\n this.updatePopups();\n }\n };\n PopupManager.prototype.updatePopups = function () {\n var e_1, _a, e_2, _b;\n this.popups.sort(function (a, b) { return b.priority - a.priority; });\n var visiblepopups = [];\n try {\n for (var _c = __values(this.popups), _d = _c.next(); !_d.done; _d = _c.next()) {\n var popup = _d.value;\n var shouldDisplay = true;\n try {\n for (var visiblepopups_1 = (e_2 = void 0, __values(visiblepopups)), visiblepopups_1_1 = visiblepopups_1.next(); !visiblepopups_1_1.done; visiblepopups_1_1 = visiblepopups_1.next()) {\n var visiblePopup = visiblepopups_1_1.value;\n if (this.doPopupsOverlap(visiblePopup, popup)) {\n shouldDisplay = false;\n break;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (visiblepopups_1_1 && !visiblepopups_1_1.done && (_b = visiblepopups_1.return)) _b.call(visiblepopups_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (shouldDisplay) {\n visiblepopups.push(popup);\n }\n else {\n popup.hide();\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n }\n finally { if (e_1) throw e_1.error; }\n }\n };\n PopupManager.prototype.doPopupsOverlap = function (popupA, popupB) {\n var rectA = popupA.getElement().getBoundingClientRect();\n var rectB = popupB.getElement().getBoundingClientRect();\n return (rectA.left < rectB.right && rectA.right > rectB.left && rectA.top < rectB.bottom && rectA.bottom\n > rectB.top);\n };\n return PopupManager;\n}());\nvar popupManager = new PopupManager();\nexports.popupManager = popupManager;\nexports.Tooltip = Tooltip;\nvar HoverTooltip = /** @class */ (function (_super) {\n __extends(HoverTooltip, _super);\n function HoverTooltip(parentNode) {\n if (parentNode === void 0) { parentNode = document.body; }\n var _this = _super.call(this, parentNode) || this;\n _this.timeout = undefined;\n _this.lastT = 0;\n _this.idleTime = 350;\n _this.lastEvent = undefined;\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.waitForHover = _this.waitForHover.bind(_this);\n _this.hide = _this.hide.bind(_this);\n var el = _this.getElement();\n el.style.whiteSpace = \"pre-wrap\";\n el.style.pointerEvents = \"auto\";\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n el.tabIndex = -1;\n el.addEventListener(\"blur\", function () {\n if (!el.contains(document.activeElement))\n this.hide();\n }.bind(_this));\n el.addEventListener(\"wheel\", preventParentScroll);\n return _this;\n }\n HoverTooltip.prototype.addToEditor = function (editor) {\n editor.on(\"mousemove\", this.onMouseMove);\n editor.on(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, true);\n };\n HoverTooltip.prototype.removeFromEditor = function (editor) {\n editor.off(\"mousemove\", this.onMouseMove);\n editor.off(\"mousedown\", this.hide);\n editor.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, true);\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n };\n HoverTooltip.prototype.onMouseMove = function (e, editor) {\n this.lastEvent = e;\n this.lastT = Date.now();\n var isMousePressed = editor.$mouseHandler.isMousePressed;\n if (this.isOpen) {\n var pos = this.lastEvent && this.lastEvent.getDocumentPosition();\n if (!this.range\n || !this.range.contains(pos.row, pos.column)\n || isMousePressed\n || this.isOutsideOfText(this.lastEvent)) {\n this.hide();\n }\n }\n if (this.timeout || isMousePressed)\n return;\n this.lastEvent = e;\n this.timeout = setTimeout(this.waitForHover, this.idleTime);\n };\n HoverTooltip.prototype.waitForHover = function () {\n if (this.timeout)\n clearTimeout(this.timeout);\n var dt = Date.now() - this.lastT;\n if (this.idleTime - dt > 10) {\n this.timeout = setTimeout(this.waitForHover, this.idleTime - dt);\n return;\n }\n this.timeout = null;\n if (this.lastEvent && !this.isOutsideOfText(this.lastEvent)) {\n this.$gatherData(this.lastEvent, this.lastEvent.editor);\n }\n };\n HoverTooltip.prototype.isOutsideOfText = function (e) {\n var editor = e.editor;\n var docPos = e.getDocumentPosition();\n var line = editor.session.getLine(docPos.row);\n if (docPos.column == line.length) {\n var screenPos = editor.renderer.pixelToScreenCoordinates(e.clientX, e.clientY);\n var clippedPos = editor.session.documentToScreenPosition(docPos.row, docPos.column);\n if (clippedPos.column != screenPos.column\n || clippedPos.row != screenPos.row) {\n return true;\n }\n }\n return false;\n };\n HoverTooltip.prototype.setDataProvider = function (value) {\n this.$gatherData = value;\n };\n HoverTooltip.prototype.showForRange = function (editor, range, domNode, startingEvent) {\n var MARGIN = 10;\n if (startingEvent && startingEvent != this.lastEvent)\n return;\n if (this.isOpen && document.activeElement == this.getElement())\n return;\n var renderer = editor.renderer;\n if (!this.isOpen) {\n popupManager.addPopup(this);\n this.$registerCloseEvents();\n this.setTheme(renderer.theme);\n }\n this.isOpen = true;\n this.addMarker(range, editor.session);\n this.range = Range.fromPoints(range.start, range.end);\n var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n var rect = renderer.scroller.getBoundingClientRect();\n if (position.pageX < rect.left)\n position.pageX = rect.left;\n var element = this.getElement();\n element.innerHTML = \"\";\n element.appendChild(domNode);\n element.style.maxHeight = \"\";\n element.style.display = \"block\";\n var labelHeight = element.clientHeight;\n var labelWidth = element.clientWidth;\n var spaceBelow = window.innerHeight - position.pageY - renderer.lineHeight;\n var isAbove = true;\n if (position.pageY - labelHeight < 0 && position.pageY < spaceBelow) {\n isAbove = false;\n }\n element.style.maxHeight = (isAbove ? position.pageY : spaceBelow) - MARGIN + \"px\";\n element.style.top = isAbove ? \"\" : position.pageY + renderer.lineHeight + \"px\";\n element.style.bottom = isAbove ? window.innerHeight - position.pageY + \"px\" : \"\";\n element.style.left = Math.min(position.pageX, window.innerWidth - labelWidth - MARGIN) + \"px\";\n };\n HoverTooltip.prototype.addMarker = function (range, session) {\n if (this.marker) {\n this.$markerSession.removeMarker(this.marker);\n }\n this.$markerSession = session;\n this.marker = session && session.addMarker(range, \"ace_highlight-marker\", \"text\");\n };\n HoverTooltip.prototype.hide = function (e) {\n if (!e && document.activeElement == this.getElement())\n return;\n if (e && e.target && (e.type != \"keydown\" || e.ctrlKey || e.metaKey) && this.$element.contains(e.target))\n return;\n this.lastEvent = null;\n if (this.timeout)\n clearTimeout(this.timeout);\n this.timeout = null;\n this.addMarker(null);\n if (this.isOpen) {\n this.$removeCloseEvents();\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n popupManager.removePopup(this);\n }\n };\n HoverTooltip.prototype.$registerCloseEvents = function () {\n window.addEventListener(\"keydown\", this.hide, true);\n window.addEventListener(\"wheel\", this.hide, true);\n window.addEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.$removeCloseEvents = function () {\n window.removeEventListener(\"keydown\", this.hide, true);\n window.removeEventListener(\"wheel\", this.hide, true);\n window.removeEventListener(\"mousedown\", this.hide, true);\n };\n HoverTooltip.prototype.onMouseOut = function (e) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.lastEvent = null;\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n if (!e.relatedTarget.classList.contains(\"ace_content\"))\n this.hide();\n };\n return HoverTooltip;\n}(Tooltip));\nexports.HoverTooltip = HoverTooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/tooltip\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nvar nls = require(\"../config\").nls;\nvar GUTTER_TOOLTIP_LEFT_OFFSET = 5;\nvar GUTTER_TOOLTIP_TOP_OFFSET = 3;\nexports.GUTTER_TOOLTIP_LEFT_OFFSET = GUTTER_TOOLTIP_LEFT_OFFSET;\nexports.GUTTER_TOOLTIP_TOP_OFFSET = GUTTER_TOOLTIP_TOP_OFFSET;\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor, true);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\")\n return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey())\n selection.selectTo(row, 0);\n else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent;\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var maxRow = editor.session.getLength();\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n return hideTooltip();\n }\n tooltip.showTooltip(row);\n if (!tooltip.isOpen)\n return;\n editor.on(\"mousewheel\", hideTooltip);\n editor.on(\"changeSession\", hideTooltip);\n window.addEventListener(\"keydown\", hideTooltip, true);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterRow = mouseEvent.getGutterRow();\n var gutterCell = gutter.$lines.get(gutterRow);\n if (gutterCell) {\n var gutterElement = gutterCell.element.querySelector(\".ace_gutter_annotation\");\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = (rect.right - GUTTER_TOOLTIP_LEFT_OFFSET) + \"px\";\n style.top = (rect.bottom - GUTTER_TOOLTIP_TOP_OFFSET) + \"px\";\n }\n else {\n moveTooltip(mouseEvent);\n }\n }\n }\n function hideTooltip(e) {\n if (e && e.type === \"keydown\" && (e.ctrlKey || e.metaKey))\n return;\n if (e && e.type === \"mouseout\" && (!e.relatedTarget || tooltip.getElement().contains(e.relatedTarget)))\n return;\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltip.isOpen) {\n tooltip.hideTooltip();\n editor.off(\"mousewheel\", hideTooltip);\n editor.off(\"changeSession\", hideTooltip);\n window.removeEventListener(\"keydown\", hideTooltip, true);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\") || dom.hasCssClass(target, \"ace_custom-widget\"))\n return hideTooltip();\n if (tooltip.isOpen && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltip.isOpen)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip(e);\n }, 50);\n }, editor);\n}\nexports.GutterHandler = GutterHandler;\nvar GutterTooltip = /** @class */ (function (_super) {\n __extends(GutterTooltip, _super);\n function GutterTooltip(editor, isHover) {\n if (isHover === void 0) { isHover = false; }\n var _this = _super.call(this, editor.container) || this;\n _this.id = \"gt\" + (++GutterTooltip.$uid);\n _this.editor = editor;\n _this.visibleTooltipRow;\n var el = _this.getElement();\n el.setAttribute(\"role\", \"tooltip\");\n el.setAttribute(\"id\", _this.id);\n el.style.pointerEvents = \"auto\";\n if (isHover) {\n _this.onMouseOut = _this.onMouseOut.bind(_this);\n el.addEventListener(\"mouseout\", _this.onMouseOut);\n }\n return _this;\n }\n GutterTooltip.prototype.onMouseOut = function (e) {\n if (!this.isOpen)\n return;\n if (!e.relatedTarget || this.getElement().contains(e.relatedTarget))\n return;\n if (e && e.currentTarget.contains(e.relatedTarget))\n return;\n this.hideTooltip();\n };\n GutterTooltip.prototype.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n Object.defineProperty(GutterTooltip, \"annotationLabels\", {\n get: function () {\n return {\n error: {\n singular: nls(\"gutter-tooltip.aria-label.error.singular\", \"error\"),\n plural: nls(\"gutter-tooltip.aria-label.error.plural\", \"errors\")\n },\n security: {\n singular: nls(\"gutter-tooltip.aria-label.security.singular\", \"security finding\"),\n plural: nls(\"gutter-tooltip.aria-label.security.plural\", \"security findings\")\n },\n warning: {\n singular: nls(\"gutter-tooltip.aria-label.warning.singular\", \"warning\"),\n plural: nls(\"gutter-tooltip.aria-label.warning.plural\", \"warnings\")\n },\n info: {\n singular: nls(\"gutter-tooltip.aria-label.info.singular\", \"information message\"),\n plural: nls(\"gutter-tooltip.aria-label.info.plural\", \"information messages\")\n },\n hint: {\n singular: nls(\"gutter-tooltip.aria-label.hint.singular\", \"suggestion\"),\n plural: nls(\"gutter-tooltip.aria-label.hint.plural\", \"suggestions\")\n }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var _a;\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = {\n displayText: Array.from(annotationsInRow.displayText),\n type: Array.from(annotationsInRow.type)\n };\n else\n annotation = { displayText: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], security: [], warning: [], info: [], hint: [] };\n var severityRank = { error: 1, security: 2, warning: 3, info: 4, hint: 5 };\n var mostSevereAnnotationTypeInFold;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!gutter.$annotations[i])\n continue;\n for (var j = 0; j < gutter.$annotations[i].text.length; j++) {\n var annotationType = gutter.$annotations[i].type[j];\n annotationsInFold[annotationType].push(gutter.$annotations[i].text[j]);\n if (!mostSevereAnnotationTypeInFold ||\n severityRank[annotationType] < severityRank[mostSevereAnnotationTypeInFold]) {\n mostSevereAnnotationTypeInFold = annotationType;\n }\n }\n }\n if ([\"error\", \"security\", \"warning\"].includes(mostSevereAnnotationTypeInFold)) {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.displayText.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationTypeInFold + \"_fold\");\n }\n }\n if (annotation.displayText.length === 0)\n return this.hideTooltip();\n var annotationMessages = { error: [], security: [], warning: [], info: [], hint: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.displayText.length; i++) {\n var lineElement = dom.createElement(\"span\");\n var iconElement = dom.createElement(\"span\");\n (_a = iconElement.classList).add.apply(_a, [\"ace_\".concat(annotation.type[i]), iconClassName]);\n iconElement.setAttribute(\"aria-label\", \"\".concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular));\n iconElement.setAttribute(\"role\", \"img\");\n iconElement.appendChild(dom.createTextNode(\" \"));\n lineElement.appendChild(iconElement);\n lineElement.appendChild(dom.createTextNode(annotation.displayText[i]));\n lineElement.appendChild(dom.createElement(\"br\"));\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(lineElement);\n }\n var tooltipElement = this.getElement();\n dom.removeChildren(tooltipElement);\n annotationMessages.error.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.security.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.warning.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.info.forEach(function (el) { return tooltipElement.appendChild(el); });\n annotationMessages.hint.forEach(function (el) { return tooltipElement.appendChild(el); });\n tooltipElement.setAttribute(\"aria-live\", \"polite\");\n if (!this.isOpen) {\n this.setTheme(this.editor.renderer.theme);\n this.setClassName(\"ace_gutter-tooltip\");\n }\n var annotationNode = this.$findLinkedAnnotationNode(row);\n if (annotationNode) {\n annotationNode.setAttribute(\"aria-describedby\", this.id);\n }\n this.show();\n this.visibleTooltipRow = row;\n this.editor._signal(\"showGutterTooltip\", this);\n };\n GutterTooltip.prototype.$findLinkedAnnotationNode = function (row) {\n var cell = this.$findCellByRow(row);\n if (cell) {\n var element = cell.element;\n if (element.childNodes.length > 2) {\n return element.childNodes[2];\n }\n }\n };\n GutterTooltip.prototype.$findCellByRow = function (row) {\n return this.editor.renderer.$gutterLayer.$lines.cells.find(function (el) { return el.row === row; });\n };\n GutterTooltip.prototype.hideTooltip = function () {\n if (!this.isOpen) {\n return;\n }\n this.$element.removeAttribute(\"aria-live\");\n this.hide();\n if (this.visibleTooltipRow != undefined) {\n var annotationNode = this.$findLinkedAnnotationNode(this.visibleTooltipRow);\n if (annotationNode) {\n annotationNode.removeAttribute(\"aria-describedby\");\n }\n }\n this.visibleTooltipRow = undefined;\n this.editor._signal(\"hideGutterTooltip\", this);\n };\n GutterTooltip.annotationsToSummaryString = function (annotations) {\n var e_1, _a;\n var summary = [];\n var annotationTypes = [\"error\", \"security\", \"warning\", \"info\", \"hint\"];\n try {\n for (var annotationTypes_1 = __values(annotationTypes), annotationTypes_1_1 = annotationTypes_1.next(); !annotationTypes_1_1.done; annotationTypes_1_1 = annotationTypes_1.next()) {\n var annotationType = annotationTypes_1_1.value;\n if (!annotations[annotationType].length)\n continue;\n var label = annotations[annotationType].length === 1 ? GutterTooltip.annotationLabels[annotationType].singular : GutterTooltip.annotationLabels[annotationType].plural;\n summary.push(\"\".concat(annotations[annotationType].length, \" \").concat(label));\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (annotationTypes_1_1 && !annotationTypes_1_1.done && (_a = annotationTypes_1.return)) _a.call(annotationTypes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return summary.join(\", \");\n };\n return GutterTooltip;\n}(Tooltip));\nGutterTooltip.$uid = 0;\nexports.GutterTooltip = GutterTooltip;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = /** @class */ (function () {\n function MouseEvent(domEvent, editor) { this.speed; this.wheelX; this.wheelY;\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n }\n MouseEvent.prototype.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n MouseEvent.prototype.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n MouseEvent.prototype.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n MouseEvent.prototype.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n MouseEvent.prototype.getGutterRow = function () {\n var documentRow = this.getDocumentPosition().row;\n var screenRow = this.editor.session.documentToScreenRow(documentRow, 0);\n var screenTopRow = this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n return screenRow - screenTopRow;\n };\n MouseEvent.prototype.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n MouseEvent.prototype.getButton = function () {\n return event.getButton(this.domEvent);\n };\n MouseEvent.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n MouseEvent.prototype.getAccelKey = function () {\n return useragent.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n };\n return MouseEvent;\n}());\nexports.MouseEvent = MouseEvent;\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && canExecuteCommand(\"selectall\") && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && canExecuteCommand(\"copy\") && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && canExecuteCommand(\"cut\") && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && canExecuteCommand(\"paste\") && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && canExecuteCommand(\"undo\") && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n canExecuteCommand(\"find\") && [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n canExecuteCommand(\"openCommandPalette\") && [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPalette\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var canExecuteCommand = function (/** @type {string} */ cmd) {\n return editor.commands.canExecute(cmd, editor);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPalette\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!editor.getOption(\"enableMobileMenu\")) {\n if (contextMenu) {\n hideContextMenu();\n }\n return;\n }\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = /** @class */ (function () {\n function MouseHandler(editor) { this.$dragDelay; this.$dragEnabled; this.$mouseMoved; this.mouseEvent; this.$focusTimeout;\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, //@ts-expect-error TODO: seems mistyping - should be boolean\n editor);\n }\n MouseHandler.prototype.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n MouseHandler.prototype.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n MouseHandler.prototype.setState = function (state) {\n this.state = state;\n };\n MouseHandler.prototype.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var continueCapture = true;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n continueCapture = false;\n if (editor.session)\n onCaptureUpdate();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureUpdate = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n var onCaptureInterval = function () {\n if (continueCapture) {\n onCaptureUpdate();\n event.nextFrame(onCaptureInterval);\n }\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n onCaptureInterval();\n };\n MouseHandler.prototype.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n MouseHandler.prototype.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n return MouseHandler;\n}());\nMouseHandler.prototype.releaseMouse = null;\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar FoldHandler = /** @class */ (function () {\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n }\n return FoldHandler;\n}());\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = /** @class */ (function () {\n function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n }\n KeyBinding.prototype.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n KeyBinding.prototype.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n KeyBinding.prototype.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n KeyBinding.prototype.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n KeyBinding.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n KeyBinding.prototype.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n KeyBinding.prototype.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute[\"passEvent\"] != true && toExecute.command[\"passEvent\"] != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n KeyBinding.prototype.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n KeyBinding.prototype.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n return KeyBinding;\n}());\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = /** @class */ (function () {\n function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n }\n BidiHandler.prototype.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n BidiHandler.prototype.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n BidiHandler.prototype.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n BidiHandler.prototype.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n BidiHandler.prototype.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n BidiHandler.prototype.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n BidiHandler.prototype.markAsDirty = function () {\n this.currentRow = null;\n };\n BidiHandler.prototype.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n BidiHandler.prototype.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n BidiHandler.prototype.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n BidiHandler.prototype.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n BidiHandler.prototype.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n BidiHandler.prototype.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n BidiHandler.prototype.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n BidiHandler.prototype.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n BidiHandler.prototype.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n return BidiHandler;\n}());\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = /** @class */ (function () {\n function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n }\n Selection.prototype.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n Selection.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n Selection.prototype.getCursor = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n Selection.prototype.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n Selection.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n Selection.prototype.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n Selection.prototype.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n Selection.prototype.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n Selection.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n Selection.prototype.setRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n Selection.prototype.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n Selection.prototype.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n Selection.prototype.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n Selection.prototype.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n Selection.prototype.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n Selection.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n Selection.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n Selection.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n Selection.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n Selection.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n Selection.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n Selection.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n Selection.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n Selection.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n Selection.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n Selection.prototype.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n Selection.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n Selection.prototype.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n Selection.prototype.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n Selection.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n Selection.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n Selection.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n Selection.prototype.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n Selection.prototype.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n Selection.prototype.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n Selection.prototype.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n Selection.prototype.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n Selection.prototype.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n Selection.prototype.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n Selection.prototype.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n Selection.prototype.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n Selection.prototype.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n Selection.prototype.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n Selection.prototype.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n Selection.prototype.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n Selection.prototype.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n Selection.prototype.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n Selection.prototype.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n Selection.prototype.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n Selection.prototype.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n Selection.prototype.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n Selection.prototype.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n Selection.prototype.toJSON = function () {\n if (this.rangeCount) { var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else { var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n Selection.prototype.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n Selection.prototype.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n return Selection;\n}());\nSelection.prototype.setSelectionAnchor = Selection.prototype.setAnchor;\nSelection.prototype.getSelectionAnchor = Selection.prototype.getAnchor;\nSelection.prototype.setSelectionRange = Selection.prototype.setRange;\noop.implement(Selection.prototype, EventEmitter);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/report_error\"], function(require, exports, module){\"use strict\";\nvar reportError = require(\"./lib/report_error\").reportError;\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\n this.splitRegex;\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n }\n Tokenizer.prototype.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n Tokenizer.prototype.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n Tokenizer.prototype.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n Tokenizer.prototype.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n Tokenizer.prototype.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = /**@type{string}*/ (startState) || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n return Tokenizer;\n}());\nTokenizer.prototype.reportError = reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/deep_copy\"], function(require, exports, module){\"use strict\";\nvar deepCopy = require(\"../lib/deep_copy\").deepCopy;\nvar TextHighlightRules;\nTextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state[\"processed\"] = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (includeName === \"$self\")\n includeName = \"start\";\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour;\nBehaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = /** @class */ (function () {\n function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n }\n TokenIterator.prototype.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n TokenIterator.prototype.getCurrentTokenRow = function () {\n return this.$row;\n };\n TokenIterator.prototype.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n TokenIterator.prototype.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n TokenIterator.prototype.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n return TokenIterator;\n}());\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour;\nCstyleBehaviour = function (options) {\n options = options || {};\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n var token = session.getTokenAt(cursor.row, cursor.column);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (token && /(?:string)\\.quasi|\\.xml/.test(token.type)) {\n var excludeTokens = [\n /tag\\-(?:open|name)/, /attribute\\-name/\n ];\n if (excludeTokens.some(function (el) { return el.test(token.type); }) || /(string)\\.quasi/.test(token.type)\n && token.value[cursor.column - token.start - 1] !== '$')\n return;\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(rightChar);\n var pairQuotesAfter = session.$mode.$pairQuotesAfter;\n var shouldPairQuotes = pairQuotesAfter && pairQuotesAfter[quote] && pairQuotesAfter[quote].test(leftChar);\n if ((!shouldPairQuotes && isWordBefore) || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n if (options.closeDocComment !== false) {\n this.add(\"doc comment end\", \"insertion\", function (state, action, editor, session, text) {\n if (state === \"doc-start\" && (text === \"\\n\" || text === \"\\r\\n\") && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n if (cursor.column === 0) {\n return;\n }\n var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\n var tokens = session.getTokens(cursor.row);\n var index = 0;\n for (var i = 0; i < tokens.length; i++) {\n index += tokens[i].value.length;\n var currentToken = tokens[i];\n if (index >= cursor.column) {\n if (index === cursor.column) {\n if (!/\\.doc/.test(currentToken.type)) {\n return;\n }\n if (/\\*\\//.test(currentToken.value)) {\n var nextToken = tokens[i + 1];\n if (!nextToken || !/\\.doc/.test(nextToken.type)) {\n return;\n }\n }\n }\n var cursorPosInToken = cursor.column - (index - currentToken.value.length);\n var closeDocPos = currentToken.value.indexOf(\"*/\");\n var openDocPos = currentToken.value.indexOf(\"/**\", closeDocPos > -1 ? closeDocPos + 2 : 0);\n if (openDocPos !== -1 && cursorPosInToken > openDocPos && cursorPosInToken < openDocPos + 3) {\n return;\n }\n if (closeDocPos !== -1 && openDocPos !== -1 && cursorPosInToken >= closeDocPos\n && cursorPosInToken <= openDocPos || !/\\.doc/.test(currentToken.type)) {\n return;\n }\n break;\n }\n }\n var indent = this.$getIndent(line);\n if (/\\s*\\*/.test(nextLine)) {\n if (/^\\s*\\*/.test(line)) {\n return {\n text: text + indent + \"* \",\n selection: [1, 2 + indent.length, 1, 2 + indent.length]\n };\n }\n else {\n return {\n text: text + indent + \" * \",\n selection: [1, 3 + indent.length, 1, 3 + indent.length]\n };\n }\n }\n if (/\\/\\*\\*/.test(line.substring(0, cursor.column))) {\n return {\n text: text + indent + \" * \" + text + \" \" + indent + \"*/\",\n selection: [1, 4 + indent.length, 1, 4 + indent.length]\n };\n }\n }\n });\n }\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour[\"$matchTokenType\"] = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour[\"recordAutoInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isAutoInsertedClosing\"](cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour[\"recordMaybeInsert\"] = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this[\"isMaybeInsertedClosing\"](cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour[\"isAutoInsertedClosing\"] = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour[\"isMaybeInsertedClosing\"] = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour[\"popAutoInsertedClosing\"] = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour[\"clearMaybeInsertedClosing\"] = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode;\nMode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n var _loop_1 = function (i) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] =\n function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this_1));\n };\n var this_1 = this;\n for (var i = 0; i < delegations.length; i++) {\n _loop_1(i);\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer[\"rules\"];\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar LineWidgets = /** @class */ (function () {\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n LineWidgets.prototype.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this[\"$useWrapMode\"] || !this[\"$wrapData\"][row]) {\n return 1 + h;\n }\n else {\n return this[\"$wrapData\"][row].length + 1 + h;\n }\n };\n LineWidgets.prototype.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n LineWidgets.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n LineWidgets.prototype.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n LineWidgets.prototype.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n LineWidgets.prototype.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n LineWidgets.prototype.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n LineWidgets.prototype.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n LineWidgets.prototype.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n LineWidgets.prototype.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.text && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.textContent = w.text;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n if (w.className) {\n dom.addCssClass(w.el, w.className);\n }\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = \"5\";\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = \"3\";\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n LineWidgets.prototype.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n LineWidgets.prototype.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n LineWidgets.prototype.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n LineWidgets.prototype.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n LineWidgets.prototype.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n return LineWidgets;\n}());\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = /** @class */ (function () {\n function Anchor(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof row != \"number\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n }\n Anchor.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n Anchor.prototype.getDocument = function () {\n return this.document;\n };\n Anchor.prototype.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n Anchor.prototype.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n Anchor.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n Anchor.prototype.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n Anchor.prototype.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n return Anchor;\n}());\nAnchor.prototype.$insertRight = false;\noop.implement(Anchor.prototype, EventEmitter);\nfunction $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n}\nfunction $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n}\nexports.Anchor = Anchor;\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = /** @class */ (function () {\n function Document(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n }\n Document.prototype.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n Document.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n Document.prototype.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n Document.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n Document.prototype.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n Document.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n };\n Document.prototype.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n Document.prototype.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n Document.prototype.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n Document.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n Document.prototype.getLength = function () {\n return this.$lines.length;\n };\n Document.prototype.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n Document.prototype.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n Document.prototype.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n Document.prototype.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n Document.prototype.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n Document.prototype.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n Document.prototype.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n Document.prototype.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n Document.prototype.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n Document.prototype.pos = function (row, column) {\n return { row: row, column: column };\n };\n Document.prototype.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n Document.prototype.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n Document.prototype.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n Document.prototype.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n Document.prototype.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n Document.prototype.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n Document.prototype.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n Document.prototype.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n Document.prototype.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n Document.prototype.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n Document.prototype.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n Document.prototype.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n Document.prototype.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n Document.prototype.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n Document.prototype.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n Document.prototype.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n Document.prototype.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n return Document;\n}());\nDocument.prototype.$autoNewLine = \"\";\nDocument.prototype.$newLineMode = \"auto\";\noop.implement(Document.prototype, EventEmitter);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = /** @class */ (function () {\n function BackgroundTokenizer(tokenizer, session) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n }\n BackgroundTokenizer.prototype.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n BackgroundTokenizer.prototype.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n BackgroundTokenizer.prototype.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n BackgroundTokenizer.prototype.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n BackgroundTokenizer.prototype.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n BackgroundTokenizer.prototype.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n BackgroundTokenizer.prototype.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n BackgroundTokenizer.prototype.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n BackgroundTokenizer.prototype.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n BackgroundTokenizer.prototype.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n return BackgroundTokenizer;\n}());\noop.implement(BackgroundTokenizer.prototype, EventEmitter);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = /** @class */ (function () {\n function SearchHighlight(regExp, clazz, type) {\n if (type === void 0) { type = \"text\"; }\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type;\n this.docLen = 0;\n }\n SearchHighlight.prototype.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n SearchHighlight.prototype.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow;\n var end = config.lastRow;\n var renderedMarkerRanges = {};\n var _search = session.$editor && session.$editor.$search;\n var mtSearch = _search && _search.$isMultilineSearch(session.$editor.getLastSearchOptions());\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null || session.getValue().length != this.docLen) {\n if (mtSearch) {\n ranges = [];\n var match = _search.$multiLineForward(session, this.regExp, i, end);\n if (match) {\n var end_row = match.endRow <= end ? match.endRow - 1 : end;\n if (end_row > i)\n i = end_row;\n ranges.push(new Range(match.startRow, match.startCol, match.endRow, match.endCol));\n }\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n }\n else {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n }\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n if (ranges.length === 0)\n continue;\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n this.docLen = session.getValue().length;\n };\n return SearchHighlight;\n}());\nSearchHighlight.prototype.MAX_RANGES = 500;\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\n this.$keepRedoStack;\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n }\n UndoManager.prototype.addSession = function (session) {\n this.$session = session;\n };\n UndoManager.prototype.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n UndoManager.prototype.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n UndoManager.prototype.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n UndoManager.prototype.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n UndoManager.prototype.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n UndoManager.prototype.getRevision = function () {\n return this.$rev;\n };\n UndoManager.prototype.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n UndoManager.prototype.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n UndoManager.prototype.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n UndoManager.prototype.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n UndoManager.prototype.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n UndoManager.prototype.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n UndoManager.prototype.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n UndoManager.prototype.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n UndoManager.prototype.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n UndoManager.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n UndoManager.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n };\n UndoManager.prototype.fromJSON = function (json) {\n this.reset();\n this.$undoStack = json.$undoStack;\n this.$redoStack = json.$redoStack;\n };\n UndoManager.prototype.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n return UndoManager;\n}());\nUndoManager.prototype.hasUndo = UndoManager.prototype.canUndo;\nUndoManager.prototype.hasRedo = UndoManager.prototype.canRedo;\nUndoManager.prototype.isClean = UndoManager.prototype.isAtBookmark;\nUndoManager.prototype.markClean = UndoManager.prototype.bookmark;\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = /** @class */ (function () {\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n FoldLine.prototype.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n FoldLine.prototype.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n FoldLine.prototype.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n FoldLine.prototype.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n FoldLine.prototype.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n FoldLine.prototype.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n FoldLine.prototype.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n FoldLine.prototype.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n FoldLine.prototype.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n FoldLine.prototype.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n return FoldLine;\n}());\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = /** @class */ (function () {\n function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n }\n RangeList.prototype.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n RangeList.prototype.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n RangeList.prototype.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n RangeList.prototype.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n RangeList.prototype.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n RangeList.prototype.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n RangeList.prototype.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n RangeList.prototype.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n RangeList.prototype.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n RangeList.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n RangeList.prototype.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n RangeList.prototype.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n RangeList.prototype.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n return RangeList;\n}());\nRangeList.prototype.comparePoints = comparePoints;\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar RangeList = require(\"../range_list\").RangeList;\nvar Fold = /** @class */ (function (_super) {\n __extends(Fold, _super);\n function Fold(range, placeholder) {\n var _this = _super.call(this) || this;\n _this.foldLine = null;\n _this.placeholder = placeholder;\n _this.range = range;\n _this.start = range.start;\n _this.end = range.end;\n _this.sameRow = range.start.row == range.end.row;\n _this.subFolds = _this.ranges = [];\n return _this;\n }\n Fold.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n Fold.prototype.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n Fold.prototype.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n Fold.prototype.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n Fold.prototype.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n return Fold;\n}(RangeList));\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\nexports.Fold = Fold;\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\",\"ace/mouse/mouse_event\"], function(require, exports, module){// @ts-nocheck\n\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar MouseEvent = require(\"../mouse/mouse_event\").MouseEvent;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (tryToUnfold) {\n var foldLine = this.getFoldLine(cursor.row);\n if (foldLine)\n this.expandFolds(foldLine.folds);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start|\\\\.doc\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator = new TokenIterator(this, row, column);\n var initState = this.getState(iterator.$row);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (initState.toString() !== state.toString())\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n if (range.start.row == range.end.row && range.start.column > range.end.column)\n return;\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n if (e instanceof MouseEvent)\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos, isBackwards) {\n var line = this.getLine(pos.row);\n var bracketsRegExp = /([\\(\\[\\{])|([\\)\\]\\}])/;\n var chr = !isBackwards && line.charAt(pos.column - 1);\n var match = chr && chr.match(bracketsRegExp);\n if (!match) {\n chr = (isBackwards === undefined || isBackwards) && line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(bracketsRegExp);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n .replace(/-close\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n .replace(/-open\\b/, \"-(close|open)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n if (prevToken.type.indexOf('tag-close') !== -1 && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for \")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/line_widgets\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/undomanager\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar LineWidgets = require(\"./line_widgets\").LineWidgets;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar EditSession = /** @class */ (function () {\n function EditSession(text, mode) { this.doc;\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$editor = null;\n this.prevOp = {};\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.$gutterCustomWidgets = {};\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(/**@type{string}*/ (text));\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.selection.on(\"changeCursor\", this.$onSelectionChange);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n this.$initOperationListeners();\n }\n EditSession.prototype.$initOperationListeners = function () {\n var _this = this;\n this.curOp = null;\n this.on(\"change\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.docChanged = true;\n }, true);\n this.on(\"changeSelection\", function () {\n if (!_this.curOp) {\n _this.startOperation();\n _this.curOp.selectionBefore = _this.$lastSel;\n }\n _this.curOp.selectionChanged = true;\n }, true);\n this.$operationResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n };\n EditSession.prototype.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command) {\n return;\n }\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n commandEvent = {};\n }\n this.$operationResetTimer.schedule();\n this.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n this._signal(\"startOperation\", commandEvent);\n };\n EditSession.prototype.endOperation = function (e) {\n if (this.curOp) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n this._signal(\"endOperation\", e);\n return;\n }\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\") {\n return;\n }\n var currentSelection = this.selection.toJSON();\n this.curOp.selectionAfter = currentSelection;\n this.$lastSel = this.selection.toJSON();\n this.getUndoManager().addSelection(currentSelection);\n this._signal(\"beforeEndOperation\");\n this.prevOp = this.curOp;\n this.curOp = null;\n this._signal(\"endOperation\", e);\n }\n };\n EditSession.prototype.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n EditSession.prototype.getDocument = function () {\n return this.doc;\n };\n Object.defineProperty(EditSession.prototype, \"widgetManager\", {\n get: function () {\n var widgetManager = new LineWidgets(this);\n this.widgetManager = widgetManager;\n if (this.$editor)\n widgetManager.attach(this.$editor);\n return widgetManager;\n },\n set: function (value) {\n Object.defineProperty(this, \"widgetManager\", {\n writable: true,\n enumerable: true,\n configurable: true,\n value: value,\n });\n },\n enumerable: false,\n configurable: true\n });\n EditSession.prototype.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n EditSession.prototype.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n EditSession.prototype.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n EditSession.prototype.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n EditSession.prototype.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n EditSession.prototype.onSelectionChange = function () {\n this._signal(\"changeSelection\");\n };\n EditSession.prototype.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n EditSession.fromJSON = function (session) {\n if (typeof session == \"string\")\n session = JSON.parse(session);\n var undoManager = new UndoManager();\n undoManager.$undoStack = session.history.undo;\n undoManager.$redoStack = session.history.redo;\n undoManager.mark = session.history.mark;\n undoManager.$rev = session.history.rev;\n var editSession = new EditSession(session.value);\n session.folds.forEach(function (fold) {\n editSession.addFold(\"...\", Range.fromPoints(fold.start, fold.end));\n });\n editSession.setAnnotations(session.annotations);\n editSession.setBreakpoints(session.breakpoints);\n editSession.setMode(session.mode);\n editSession.setScrollLeft(session.scrollLeft);\n editSession.setScrollTop(session.scrollTop);\n editSession.setUndoManager(undoManager);\n editSession.selection.fromJSON(session.selection);\n return editSession;\n };\n EditSession.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (fold) {\n return fold.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n };\n EditSession.prototype.toString = function () {\n return this.doc.getValue();\n };\n EditSession.prototype.getSelection = function () {\n return this.selection;\n };\n EditSession.prototype.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n EditSession.prototype.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n EditSession.prototype.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n EditSession.prototype.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n EditSession.prototype.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n EditSession.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n EditSession.prototype.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n EditSession.prototype.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n EditSession.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n EditSession.prototype.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n EditSession.prototype.getTabSize = function () {\n return this.$tabSize;\n };\n EditSession.prototype.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n EditSession.prototype.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n EditSession.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n EditSession.prototype.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n EditSession.prototype.getOverwrite = function () {\n return this.$overwrite;\n };\n EditSession.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n EditSession.prototype.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.removeGutterCustomWidget = function (row) {\n if (this.$editor) {\n this.$editor.renderer.$gutterLayer.$removeCustomWidget(row);\n }\n };\n EditSession.prototype.addGutterCustomWidget = function (row, attributes) {\n if (this.$editor) {\n this.$editor.renderer.$gutterLayer.$addCustomWidget(row, attributes);\n }\n };\n EditSession.prototype.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n };\n EditSession.prototype.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n EditSession.prototype.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n EditSession.prototype.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n EditSession.prototype.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n EditSession.prototype.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n EditSession.prototype.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n EditSession.prototype.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n EditSession.prototype.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n EditSession.prototype.getAnnotations = function () {\n return this.$annotations || [];\n };\n EditSession.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n EditSession.prototype.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n EditSession.prototype.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n EditSession.prototype.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n EditSession.prototype.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n EditSession.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n EditSession.prototype.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n EditSession.prototype.getUseWorker = function () { return this.$useWorker; };\n EditSession.prototype.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n EditSession.prototype.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = /**@type{string}*/ (mode) || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.destroyed) {\n return;\n }\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n EditSession.prototype.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n EditSession.prototype.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n EditSession.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n EditSession.prototype.getMode = function () {\n return this.$mode;\n };\n EditSession.prototype.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n EditSession.prototype.getScrollTop = function () {\n return this.$scrollTop;\n };\n EditSession.prototype.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n EditSession.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n EditSession.prototype.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n EditSession.prototype.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n EditSession.prototype.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n EditSession.prototype.getLine = function (row) {\n return this.doc.getLine(row);\n };\n EditSession.prototype.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n EditSession.prototype.getLength = function () {\n return this.doc.getLength();\n };\n EditSession.prototype.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n EditSession.prototype.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n EditSession.prototype.remove = function (range) {\n return this.doc.remove(range);\n };\n EditSession.prototype.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n EditSession.prototype.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n EditSession.prototype.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n EditSession.prototype.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n EditSession.prototype.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n EditSession.prototype.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n EditSession.prototype.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n EditSession.prototype.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n EditSession.prototype.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n EditSession.prototype.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n EditSession.prototype.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n EditSession.prototype.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n EditSession.prototype.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n EditSession.prototype.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n EditSession.prototype.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n EditSession.prototype.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n EditSession.prototype.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n EditSession.prototype.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n EditSession.prototype.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n EditSession.prototype.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n EditSession.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n EditSession.prototype.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n EditSession.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n EditSession.prototype.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n EditSession.prototype.$updateRowLengthCache = function (firstRow, lastRow) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n EditSession.prototype.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n EditSession.prototype.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n EditSession.prototype.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n EditSession.prototype.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n EditSession.prototype.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n EditSession.prototype.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n EditSession.prototype.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n EditSession.prototype.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n EditSession.prototype.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n EditSession.prototype.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n EditSession.prototype.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n EditSession.prototype.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n EditSession.prototype.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n EditSession.prototype.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n EditSession.prototype.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n EditSession.prototype.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(/**@type{Point}*/ (docRow).row, /**@type{Point}*/ (docRow).column);\n else\n pos = this.$clipPositionToDocument(/**@type{number}*/ (docRow), docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n EditSession.prototype.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n EditSession.prototype.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n EditSession.prototype.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n EditSession.prototype.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n EditSession.prototype.getPrecedingCharacter = function () {\n var pos = this.selection.getCursor();\n if (pos.column === 0) {\n return pos.row === 0 ? \"\" : this.doc.getNewLineCharacter();\n }\n var currentLine = this.getLine(pos.row);\n return currentLine[pos.column - 1];\n };\n EditSession.prototype.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.endOperation();\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n if (this.selection) {\n this.selection.off(\"changeCursor\", this.$onSelectionChange);\n this.selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.selection.detach();\n };\n return EditSession;\n}());\nEditSession.$uid = 0;\nEditSession.prototype.$modes = config.$modes;\nEditSession.prototype.getValue = EditSession.prototype.toString;\nEditSession.prototype.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n};\nEditSession.prototype.$overwrite = false;\nEditSession.prototype.$mode = null;\nEditSession.prototype.$modeId = null;\nEditSession.prototype.$scrollTop = 0;\nEditSession.prototype.$scrollLeft = 0;\nEditSession.prototype.$wrapLimit = 80;\nEditSession.prototype.$useWrapMode = false;\nEditSession.prototype.$wrapLimitRange = {\n min: null,\n max: null\n};\nEditSession.prototype.lineWidgets = null;\nEditSession.prototype.isFullWidth = isFullWidth;\noop.implement(EditSession.prototype, EventEmitter);\nvar CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\nfunction isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n}\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = /** @class */ (function () {\n function Search() {\n this.$options = {};\n }\n Search.prototype.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n Search.prototype.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n Search.prototype.setOptions = function (options) {\n this.$options = options;\n };\n Search.prototype.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && /**@type{Range}*/ (options.start).start\n && options.skipCurrent != false && firstRange.isEqual(/**@type{Range}*/ (options.start))) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n Search.prototype.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var matches, i = 0; i < lines.length; i++) {\n if (this.$isMultilineSearch(options)) {\n var lng = lines.length - 1;\n matches = this.$multiLineForward(session, re, i, lng);\n if (matches) {\n var end_row = matches.endRow <= lng ? matches.endRow - 1 : lng;\n if (end_row > i)\n i = end_row;\n ranges.push(new Range(matches.startRow, matches.startCol, matches.endRow, matches.endCol));\n }\n }\n else {\n matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n Search.prototype.parseReplaceString = function (replaceString) {\n var CharCode = {\n DollarSign: 36,\n Ampersand: 38,\n Digit0: 48,\n Digit1: 49,\n Digit9: 57,\n Backslash: 92,\n n: 110,\n t: 116\n };\n var replacement = '';\n for (var i = 0, len = replaceString.length; i < len; i++) {\n var chCode = replaceString.charCodeAt(i);\n if (chCode === CharCode.Backslash) {\n i++;\n if (i >= len) {\n replacement += \"\\\\\";\n break;\n }\n var nextChCode = replaceString.charCodeAt(i);\n switch (nextChCode) {\n case CharCode.Backslash:\n replacement += \"\\\\\";\n break;\n case CharCode.n:\n replacement += \"\\n\";\n break;\n case CharCode.t:\n replacement += \"\\t\";\n break;\n }\n continue;\n }\n if (chCode === CharCode.DollarSign) {\n i++;\n if (i >= len) {\n replacement += \"$\";\n break;\n }\n var nextChCode_1 = replaceString.charCodeAt(i);\n if (nextChCode_1 === CharCode.DollarSign) {\n replacement += \"$$\";\n continue;\n }\n if (nextChCode_1 === CharCode.Digit0 || nextChCode_1 === CharCode.Ampersand) {\n replacement += \"$&\";\n continue;\n }\n if (CharCode.Digit1 <= nextChCode_1 && nextChCode_1 <= CharCode.Digit9) {\n replacement += \"$\" + replaceString[i];\n continue;\n }\n }\n replacement += replaceString[i];\n }\n return replacement || replaceString;\n };\n Search.prototype.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var mtSearch = this.$isMultilineSearch(options);\n if (mtSearch)\n input = input.replace(/\\r\\n|\\r|\\n/g, \"\\n\");\n var match = re.exec(input);\n if (!match || (!mtSearch && match[0].length != input.length))\n return null;\n replacement = options.regExp\n ? this.parseReplaceString(replacement)\n : replacement.replace(/\\$/g, \"$$$$\");\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n Search.prototype.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n try {\n new RegExp(needle, \"u\");\n options.$supportsUnicodeFlag = true;\n modifier += \"u\";\n }\n catch (e) {\n options.$supportsUnicodeFlag = false; //left for backward compatibility with previous versions for cases like /ab\\{2}/gu\n }\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n Search.prototype.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n Search.prototype.$isMultilineSearch = function (options) {\n return options.re && /\\\\r\\\\n|\\\\r|\\\\n/.test(options.re.source) && options.regExp && !options.$isMultiLine;\n };\n Search.prototype.$multiLineForward = function (session, re, start, last) {\n var line, chunk = chunkEnd(session, start);\n for (var row = start; row <= last;) {\n for (var i = 0; i < chunk; i++) {\n if (row > last)\n break;\n var next = session.getLine(row++);\n line = line == null ? next : line + \"\\n\" + next;\n }\n var match = re.exec(line);\n re.lastIndex = 0;\n if (match) {\n var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n var matchedText = match[0].split(\"\\n\");\n var startRow = start + beforeMatch.length - 1;\n var startCol = beforeMatch[beforeMatch.length - 1].length;\n var endRow = startRow + matchedText.length - 1;\n var endCol = matchedText.length == 1\n ? startCol + matchedText[0].length\n : matchedText[matchedText.length - 1].length;\n return {\n startRow: startRow,\n startCol: startCol,\n endRow: endRow,\n endCol: endCol\n };\n }\n }\n return null;\n };\n Search.prototype.$multiLineBackward = function (session, re, endIndex, start, first) {\n var line, chunk = chunkEnd(session, start), endMargin = session.getLine(start).length - endIndex;\n for (var row = start; row >= first;) {\n for (var i = 0; i < chunk && row >= first; i++) {\n var next = session.getLine(row--);\n line = line == null ? next : next + \"\\n\" + line;\n }\n var match = multiLineBackwardMatch(line, re, endMargin);\n if (match) {\n var beforeMatch = line.slice(0, match.index).split(\"\\n\");\n var matchedText = match[0].split(\"\\n\");\n var startRow = row + beforeMatch.length;\n var startCol = beforeMatch[beforeMatch.length - 1].length;\n var endRow = startRow + matchedText.length - 1;\n var endCol = matchedText.length == 1\n ? startCol + matchedText[0].length\n : matchedText[matchedText.length - 1].length;\n return {\n startRow: startRow,\n startCol: startCol,\n endRow: endRow,\n endCol: endCol\n };\n }\n }\n return null;\n };\n Search.prototype.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var mtSearch = this.$isMultilineSearch(options);\n var mtForward = this.$multiLineForward;\n var mtBackward = this.$multiLineBackward;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var supportsUnicodeFlag = re.unicode;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n if (mtSearch) {\n var pos = mtBackward(session, re, endIndex, row, firstRow);\n if (!pos)\n return false;\n if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n return true;\n }\n else {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n re.lastIndex = startIndex;\n if (mtSearch) {\n var pos = mtForward(session, re, row, lastRow);\n if (pos) {\n var end_row = pos.endRow <= lastRow ? pos.endRow - 1 : lastRow;\n if (end_row > row)\n row = end_row;\n }\n if (!pos)\n return false;\n if (callback(pos.startRow, pos.startCol, pos.endRow, pos.endCol))\n return true;\n }\n else {\n var line = session.getLine(row);\n var last;\n var m;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += lang.skipEmptyMatch(line, last, supportsUnicodeFlag);\n if (last >= line.length)\n return false;\n }\n }\n }\n };\n }\n return { forEach: forEach };\n };\n return Search;\n}());\nfunction addWordBoundary(needle, options) {\n var supportsLookbehind = lang.supportsLookbehind();\n function wordBoundary(c, firstChar) {\n if (firstChar === void 0) { firstChar = true; }\n var wordRegExp = supportsLookbehind && options.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\");\n if (wordRegExp.test(c) || options.regExp) {\n if (supportsLookbehind && options.$supportsUnicodeFlag) {\n if (firstChar)\n return \"(?<=^|[^\\\\p{L}\\\\p{N}_])\";\n return \"(?=[^\\\\p{L}\\\\p{N}_]|$)\";\n }\n return \"\\\\b\";\n }\n return \"\";\n }\n var needleArray = Array.from(needle);\n var firstChar = needleArray[0];\n var lastChar = needleArray[needleArray.length - 1];\n return wordBoundary(firstChar) + needle + wordBoundary(lastChar, false);\n}\nfunction multiLineBackwardMatch(line, re, endMargin) {\n var match = null;\n var from = 0;\n while (from <= line.length) {\n re.lastIndex = from;\n var newMatch = re.exec(line);\n if (!newMatch)\n break;\n var end = newMatch.index + newMatch[0].length;\n if (end > line.length - endMargin)\n break;\n if (!match || end > match.index + match[0].length)\n match = newMatch;\n from = newMatch.index + 1;\n }\n return match;\n}\nfunction chunkEnd(session, start) {\n var base = 5000, startPosition = { row: start, column: 0 }, startIndex = session.doc.positionToIndex(startPosition), targetIndex = startIndex + base, targetPosition = session.doc.indexToPosition(targetIndex), targetLine = targetPosition.row;\n return targetLine + 1;\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})(); var keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nvar MultiHashHandler = /** @class */ (function () {\n function MultiHashHandler(config, platform) {\n this.$init(config, platform, false);\n }\n MultiHashHandler.prototype.$init = function (config, platform, $singleCommand) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = $singleCommand;\n };\n MultiHashHandler.prototype.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n MultiHashHandler.prototype.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n MultiHashHandler.prototype.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || /**@type{string}*/ (key) }); (key).split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n MultiHashHandler.prototype._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n MultiHashHandler.prototype.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n MultiHashHandler.prototype.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n MultiHashHandler.prototype.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n MultiHashHandler.prototype._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n MultiHashHandler.prototype.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n MultiHashHandler.prototype.findKeyCommand = function (hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n MultiHashHandler.prototype.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n MultiHashHandler.prototype.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n return MultiHashHandler;\n}());\nfunction getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n}\nvar HashHandler = /** @class */ (function (_super) {\n __extends(HashHandler, _super);\n function HashHandler(config, platform) {\n var _this = _super.call(this, config, platform) || this;\n _this.$singleCommand = true;\n return _this;\n }\n return HashHandler;\n}(MultiHashHandler));\nHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, true);\n};\nMultiHashHandler.call = function (thisArg, config, platform) {\n MultiHashHandler.prototype.$init.call(thisArg, config, platform, false);\n};\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = /** @class */ (function (_super) {\n __extends(CommandManager, _super);\n function CommandManager(platform, commands) {\n var _this = _super.call(this, commands, platform) || this;\n _this.byName = _this.commands;\n _this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n return _this;\n }\n CommandManager.prototype.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n var e = { editor: editor, command: command, args: args };\n if (!this.canExecute(command, editor)) {\n this._signal(\"commandUnavailable\", e);\n return false;\n }\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n CommandManager.prototype.canExecute = function (command, editor) {\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n return true;\n };\n CommandManager.prototype.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n CommandManager.prototype.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n CommandManager.prototype.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n return CommandManager;\n}(MultiHashHandler));\noop.implement(CommandManager.prototype, EventEmitter);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"openlink\",\n bindKey: bindKey(\"Ctrl+F3\", \"F3\"),\n exec: function (editor) { editor.openLink(); }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (editor) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\");\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/keyboard/gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/mouse/default_gutter_handler\"], function(require, exports, module){\"use strict\";\nvar keys = require('../lib/keys');\nvar GutterTooltip = require(\"../mouse/default_gutter_handler\").GutterTooltip;\nvar GutterKeyboardHandler = /** @class */ (function () {\n function GutterKeyboardHandler(editor) {\n this.editor = editor;\n this.gutterLayer = editor.renderer.$gutterLayer;\n this.element = editor.renderer.$gutter;\n this.lines = editor.renderer.$gutterLayer.$lines;\n this.activeRowIndex = null;\n this.activeLane = null;\n this.annotationTooltip = new GutterTooltip(this.editor);\n }\n GutterKeyboardHandler.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this));\n this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this));\n this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n };\n GutterKeyboardHandler.prototype.$onGutterKeyDown = function (e) {\n if (this.annotationTooltip.isOpen) {\n e.preventDefault();\n if (e.keyCode === keys[\"escape\"])\n this.annotationTooltip.hideTooltip();\n return;\n }\n if (e.target === this.element) {\n if (e.keyCode != keys[\"enter\"]) {\n return;\n }\n e.preventDefault();\n var row = this.editor.getCursorPosition().row;\n if (!this.editor.isRowVisible(row))\n this.editor.scrollToLine(row, true, true);\n setTimeout(\n function () {\n var index = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row);\n var nearestFoldLaneWidgetIndex = this.$findNearestFoldLaneWidget(index);\n var nearestAnnotationIndex = this.$findNearestAnnotation(index);\n if (nearestFoldLaneWidgetIndex === null && nearestAnnotationIndex === null)\n return;\n var futureActiveRowIndex = this.$findClosestNumber(nearestFoldLaneWidgetIndex, nearestAnnotationIndex, index);\n if (futureActiveRowIndex === nearestFoldLaneWidgetIndex) {\n this.activeLane = \"fold\";\n this.activeRowIndex = nearestFoldLaneWidgetIndex;\n if (this.$isCustomWidgetVisible(nearestFoldLaneWidgetIndex)) {\n this.$focusCustomWidget(this.activeRowIndex);\n return;\n }\n else {\n this.$focusFoldWidget(this.activeRowIndex);\n return;\n }\n }\n else {\n this.activeRowIndex = nearestAnnotationIndex;\n this.activeLane = \"annotation\";\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }.bind(this), 10);\n return;\n }\n this.$handleGutterKeyboardInteraction(e);\n setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new GutterKeyboardEvent(e, this));\n }.bind(this), 10);\n };\n GutterKeyboardHandler.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === keys[\"tab\"]) {\n e.preventDefault();\n return;\n }\n if (e.keyCode === keys[\"escape\"]) {\n e.preventDefault();\n this.$blurGutter();\n this.element.focus();\n this.lane = null;\n return;\n }\n if (e.keyCode === keys[\"up\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"down\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n break;\n }\n return;\n }\n if (e.keyCode === keys[\"left\"]) {\n e.preventDefault();\n this.$switchLane(\"annotation\");\n return;\n }\n if (e.keyCode === keys[\"right\"]) {\n e.preventDefault();\n this.$switchLane(\"fold\");\n return;\n }\n if (e.keyCode === keys[\"enter\"] || e.keyCode === keys[\"space\"]) {\n e.preventDefault();\n switch (this.activeLane) {\n case \"fold\":\n var row = this.$rowIndexToRow(this.activeRowIndex);\n var customWidget = this.editor.session.$gutterCustomWidgets[row];\n if (customWidget) {\n if (customWidget.callbacks && customWidget.callbacks.onClick) {\n customWidget.callbacks.onClick(e, row);\n }\n }\n else if (this.gutterLayer.session.foldWidgets[row] === 'start') {\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e);\n setTimeout(\n function () {\n if (this.$rowIndexToRow(this.activeRowIndex) !== row) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.activeRowIndex = this.$rowToRowIndex(row);\n this.$focusFoldWidget(this.activeRowIndex);\n }\n }.bind(this), 10);\n break;\n }\n else if (this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)] === 'end') {\n break;\n }\n return;\n case \"annotation\":\n var gutterElement = this.lines.cells[this.activeRowIndex].element.childNodes[2];\n var rect = gutterElement.getBoundingClientRect();\n var style = this.annotationTooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n break;\n }\n return;\n }\n };\n GutterKeyboardHandler.prototype.$blurGutter = function () {\n if (this.activeRowIndex !== null) {\n switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n break;\n }\n }\n if (this.annotationTooltip.isOpen)\n this.annotationTooltip.hideTooltip();\n return;\n };\n GutterKeyboardHandler.prototype.$isFoldWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getFoldWidget(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isCustomWidgetVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = !!this.$getCustomWidget(index);\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$isAnnotationVisible = function (index) {\n var isRowFullyVisible = this.editor.isRowFullyVisible(this.$rowIndexToRow(index));\n var isIconVisible = this.$getAnnotation(index).style.display !== \"none\";\n return isRowFullyVisible && isIconVisible;\n };\n GutterKeyboardHandler.prototype.$getFoldWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[1];\n };\n GutterKeyboardHandler.prototype.$getCustomWidget = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[3];\n };\n GutterKeyboardHandler.prototype.$getAnnotation = function (index) {\n var cell = this.lines.get(index);\n var element = cell.element;\n return element.childNodes[2];\n };\n GutterKeyboardHandler.prototype.$findNearestFoldLaneWidget = function (index) {\n if (this.$isCustomWidgetVisible(index))\n return index;\n if (this.$isFoldWidgetVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isCustomWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isCustomWidgetVisible(index + i))\n return index + i;\n if (index - i >= 0 && this.$isFoldWidgetVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$findNearestAnnotation = function (index) {\n if (this.$isAnnotationVisible(index))\n return index;\n var i = 0;\n while (index - i > 0 || index + i < this.lines.getLength() - 1) {\n i++;\n if (index - i >= 0 && this.$isAnnotationVisible(index - i))\n return index - i;\n if (index + i <= this.lines.getLength() - 1 && this.$isAnnotationVisible(index + i))\n return index + i;\n }\n return null;\n };\n GutterKeyboardHandler.prototype.$focusFoldWidget = function (index) {\n if (index == null)\n return;\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n foldWidget.focus();\n };\n GutterKeyboardHandler.prototype.$focusCustomWidget = function (index) {\n if (index == null)\n return;\n var customWidget = this.$getCustomWidget(index);\n if (customWidget) {\n customWidget.classList.add(this.editor.renderer.keyboardFocusClassName);\n customWidget.focus();\n }\n };\n GutterKeyboardHandler.prototype.$focusAnnotation = function (index) {\n if (index == null)\n return;\n var annotation = this.$getAnnotation(index);\n annotation.classList.add(this.editor.renderer.keyboardFocusClassName);\n annotation.focus();\n };\n GutterKeyboardHandler.prototype.$blurFoldWidget = function (index) {\n var foldWidget = this.$getFoldWidget(index);\n foldWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n foldWidget.blur();\n };\n GutterKeyboardHandler.prototype.$blurCustomWidget = function (index) {\n var customWidget = this.$getCustomWidget(index);\n if (customWidget) {\n customWidget.classList.remove(this.editor.renderer.keyboardFocusClassName);\n customWidget.blur();\n }\n };\n GutterKeyboardHandler.prototype.$blurAnnotation = function (index) {\n var annotation = this.$getAnnotation(index);\n annotation.classList.remove(this.editor.renderer.keyboardFocusClassName);\n annotation.blur();\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n if (this.$isFoldWidgetVisible(index)) {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n else {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveFoldWidgetDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isFoldWidgetVisible(index) || this.$isCustomWidgetVisible(index)) {\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = index;\n if (this.$isFoldWidgetVisible(index)) {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n else {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationUp = function () {\n var index = this.activeRowIndex;\n while (index > 0) {\n index--;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$moveAnnotationDown = function () {\n var index = this.activeRowIndex;\n while (index < this.lines.getLength() - 1) {\n index++;\n if (this.$isAnnotationVisible(index)) {\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = index;\n this.$focusAnnotation(this.activeRowIndex);\n return;\n }\n }\n return;\n };\n GutterKeyboardHandler.prototype.$findClosestNumber = function (num1, num2, target) {\n if (num1 === null)\n return num2;\n if (num2 === null)\n return num1;\n return (Math.abs(target - num1) <= Math.abs(target - num2)) ? num1 : num2;\n };\n GutterKeyboardHandler.prototype.$switchLane = function (desinationLane) {\n switch (desinationLane) {\n case \"annotation\":\n if (this.activeLane === \"annotation\") {\n break;\n }\n var annotationIndex = this.$findNearestAnnotation(this.activeRowIndex);\n if (annotationIndex == null) {\n break;\n }\n this.activeLane = \"annotation\";\n this.$blurFoldWidget(this.activeRowIndex);\n this.$blurCustomWidget(this.activeRowIndex);\n this.activeRowIndex = annotationIndex;\n this.$focusAnnotation(this.activeRowIndex);\n break;\n case \"fold\":\n if (this.activeLane === \"fold\") {\n break;\n }\n var foldLaneWidgetIndex = this.$findNearestFoldLaneWidget(this.activeRowIndex);\n if (foldLaneWidgetIndex === null) {\n break;\n }\n this.activeLane = \"fold\";\n this.$blurAnnotation(this.activeRowIndex);\n this.activeRowIndex = foldLaneWidgetIndex;\n if (this.$isCustomWidgetVisible(foldLaneWidgetIndex)) {\n this.$focusCustomWidget(this.activeRowIndex);\n }\n else {\n this.$focusFoldWidget(this.activeRowIndex);\n }\n break;\n }\n return;\n };\n GutterKeyboardHandler.prototype.$rowIndexToRow = function (index) {\n var cell = this.lines.get(index);\n if (cell)\n return cell.row;\n return null;\n };\n GutterKeyboardHandler.prototype.$rowToRowIndex = function (row) {\n for (var i = 0; i < this.lines.getLength(); i++) {\n var cell = this.lines.get(i);\n if (cell.row == row)\n return i;\n }\n return null;\n };\n return GutterKeyboardHandler;\n}());\nexports.GutterKeyboardHandler = GutterKeyboardHandler;\nvar GutterKeyboardEvent = /** @class */ (function () {\n function GutterKeyboardEvent(domEvent, gutterKeyboardHandler) {\n this.gutterKeyboardHandler = gutterKeyboardHandler;\n this.domEvent = domEvent;\n }\n GutterKeyboardEvent.prototype.getKey = function () {\n return keys.keyCodeToString(this.domEvent.keyCode);\n };\n GutterKeyboardEvent.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n };\n GutterKeyboardEvent.prototype.isInAnnotationLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"annotation\";\n };\n GutterKeyboardEvent.prototype.isInFoldLane = function () {\n return this.gutterKeyboardHandler.activeLane === \"fold\";\n };\n return GutterKeyboardEvent;\n}());\nexports.GutterKeyboardEvent = GutterKeyboardEvent;\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/keyboard/gutter_handler\",\"ace/config\",\"ace/clipboard\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module){\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar GutterKeyboardHandler = require(\"./keyboard/gutter_handler\").GutterKeyboardHandler;\nvar nls = require(\"./config\").nls;\nvar clipboard = require(\"./clipboard\");\nvar keys = require('./lib/keys');\nvar event = require(\"./lib/event\");\nvar HoverTooltip = require(\"./tooltip\").HoverTooltip;\nvar Editor = /** @class */ (function () {\n function Editor(renderer, session, options) {\n this.id = \"editor\" + (++Editor.$uid); this.session;\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n }\n Editor.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n };\n Editor.prototype.startOperation = function (commandEvent) {\n this.session.startOperation(commandEvent);\n };\n Editor.prototype.endOperation = function (e) {\n this.session.endOperation(e);\n };\n Editor.prototype.onStartOperation = function (commandEvent) {\n this.curOp = this.session.curOp;\n this.curOp.scrollTop = this.renderer.scrollTop;\n this.prevOp = this.session.prevOp;\n if (!commandEvent) {\n this.previousCommand = null;\n }\n };\n Editor.prototype.onEndOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false) {\n this.curOp = null;\n return;\n }\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n this.$lastSel = this.session.selection.toJSON();\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n Editor.prototype.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n Editor.prototype.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n Editor.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n Editor.prototype.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.session.off(\"startOperation\", this.$onStartOperation);\n this.session.off(\"endOperation\", this.$onEndOperation);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.$onStartOperation = this.onStartOperation.bind(this);\n this.session.on(\"startOperation\", this.$onStartOperation);\n this.$onEndOperation = this.onEndOperation.bind(this);\n this.session.on(\"endOperation\", this.$onEndOperation);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n if (oldSession)\n oldSession.$editor = null;\n session && session._signal(\"changeEditor\", { editor: this });\n if (session)\n session.$editor = this;\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n Editor.prototype.getSession = function () {\n return this.session;\n };\n Editor.prototype.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n Editor.prototype.getValue = function () {\n return this.session.getValue();\n };\n Editor.prototype.getSelection = function () {\n return this.selection;\n };\n Editor.prototype.resize = function (force) {\n this.renderer.onResize(force);\n };\n Editor.prototype.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n Editor.prototype.getTheme = function () {\n return this.renderer.getTheme();\n };\n Editor.prototype.setStyle = function (style, incluude) {\n this.renderer.setStyle(style, incluude);\n };\n Editor.prototype.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n Editor.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n Editor.prototype.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n Editor.prototype.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var handler = self.getKeyboardHandler();\n var isBackwards = handler && handler.$getDirectionForHighlight && handler.$getDirectionForHighlight(self);\n var ranges = session.getMatchingBracketRanges(pos, isBackwards);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges) {\n ranges = [\n tagNamesRanges.openTagName.isEmpty() ? tagNamesRanges.openTag : tagNamesRanges.openTagName,\n tagNamesRanges.closeTagName.isEmpty() ? tagNamesRanges.closeTag : tagNamesRanges.closeTagName\n ];\n }\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n Editor.prototype.focus = function () {\n this.textInput.focus();\n };\n Editor.prototype.isFocused = function () {\n return this.textInput.isFocused();\n };\n Editor.prototype.blur = function () {\n this.textInput.blur();\n };\n Editor.prototype.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n Editor.prototype.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n Editor.prototype.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n Editor.prototype.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n Editor.prototype.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n Editor.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n Editor.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n Editor.prototype.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n Editor.prototype.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n Editor.prototype.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n Editor.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n Editor.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n Editor.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n Editor.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n Editor.prototype.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n Editor.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n Editor.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n Editor.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n Editor.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n Editor.prototype.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n Editor.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n Editor.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n Editor.prototype.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n Editor.prototype.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n Editor.prototype.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n Editor.prototype.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n Editor.prototype.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var ranges = this.selection.isEmpty()\n ? [new Range(0, 0, session.doc.getLength() - 1, 0)]\n : this.selection.getAllRanges();\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var tab = session.getTabString();\n for (var i = 0; i < ranges.length; i++) {\n var startRow = ranges[i].start.row;\n var endRow = ranges[i].end.row;\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n var line = session.getLine(row);\n var currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n var range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n }\n };\n Editor.prototype.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n Editor.prototype.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n Editor.prototype.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n Editor.prototype.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n Editor.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n Editor.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n Editor.prototype.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n Editor.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n Editor.prototype.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n Editor.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n Editor.prototype.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n Editor.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n Editor.prototype.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n Editor.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n Editor.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n Editor.prototype.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n Editor.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n Editor.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n Editor.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n Editor.prototype.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n Editor.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n Editor.prototype.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n Editor.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n Editor.prototype.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n Editor.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n Editor.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n Editor.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n Editor.prototype.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n Editor.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n Editor.prototype.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n Editor.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n Editor.prototype.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n Editor.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n Editor.prototype.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n Editor.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n Editor.prototype.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n Editor.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n Editor.prototype.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n Editor.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n Editor.prototype.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n Editor.prototype.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n Editor.prototype.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n Editor.prototype.setGhostText = function (text, position) {\n this.renderer.setGhostText(text, position);\n };\n Editor.prototype.removeGhostText = function () {\n this.renderer.removeGhostText();\n };\n Editor.prototype.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n Editor.prototype.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n Editor.prototype.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n Editor.prototype.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n Editor.prototype.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n Editor.prototype.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n Editor.prototype.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n Editor.prototype.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n Editor.prototype.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n Editor.prototype.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n Editor.prototype.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n Editor.prototype.findLinkAt = function (row, column) {\n var e_1, _a;\n var line = this.session.getLine(row);\n var wordParts = line.split(/((?:https?|ftp):\\/\\/[\\S]+)/);\n var columnPosition = column;\n if (columnPosition < 0)\n columnPosition = 0;\n var previousPosition = 0, currentPosition = 0, match;\n try {\n for (var wordParts_1 = __values(wordParts), wordParts_1_1 = wordParts_1.next(); !wordParts_1_1.done; wordParts_1_1 = wordParts_1.next()) {\n var item = wordParts_1_1.value;\n currentPosition = previousPosition + item.length;\n if (columnPosition >= previousPosition && columnPosition <= currentPosition) {\n if (item.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n match = item.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n }\n previousPosition = currentPosition;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (wordParts_1_1 && !wordParts_1_1.done && (_a = wordParts_1.return)) _a.call(wordParts_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return match;\n };\n Editor.prototype.openLink = function () {\n var cursor = this.selection.getCursor();\n var url = this.findLinkAt(cursor.row, cursor.column);\n if (url)\n window.open(url, '_blank');\n return url != null;\n };\n Editor.prototype.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n Editor.prototype.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range));\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n Editor.prototype.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n Editor.prototype.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n Editor.prototype.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n Editor.prototype.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n Editor.prototype.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n Editor.prototype.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n Editor.prototype.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n Editor.prototype.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n Editor.prototype.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n Editor.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n Editor.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n Editor.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n Editor.prototype.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n Editor.prototype.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n Editor.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n Editor.prototype.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n Editor.prototype.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n Editor.prototype.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n Editor.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n Editor.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n Editor.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n Editor.prototype.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n Editor.prototype.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n Editor.prototype.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n Editor.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n Editor.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n Editor.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n };\n Editor.prototype.selectAll = function () {\n this.selection.selectAll();\n };\n Editor.prototype.clearSelection = function () {\n this.selection.clearSelection();\n };\n Editor.prototype.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n Editor.prototype.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n Editor.prototype.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n Editor.prototype.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n Editor.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n Editor.prototype.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n Editor.prototype.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n Editor.prototype.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n Editor.prototype.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n Editor.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n Editor.prototype.destroy = function () {\n this.destroyed = true;\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = [];\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n Editor.prototype.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n Editor.prototype.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n Editor.prototype.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"ace/ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n return Editor;\n}());\nEditor.$uid = 0;\nEditor.prototype.curOp = null;\nEditor.prototype.prevOp = {};\nEditor.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\nEditor.prototype.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n];\noop.implement(Editor.prototype, EventEmitter);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (/**@type{boolean}*/ readOnly) {\n var _this = this;\n this.textInput.setReadOnly(readOnly);\n if (this.destroyed)\n return;\n this.$resetCursorStyle();\n if (!this.$readOnlyCallback) {\n this.$readOnlyCallback = function (e) {\n var shouldShow = false;\n if (e && e.type == \"keydown\") {\n if (e && e.key && !e.ctrlKey && !e.metaKey) {\n if (e.key == \" \")\n e.preventDefault();\n shouldShow = e.key.length == 1;\n }\n if (!shouldShow)\n return;\n }\n else if (e && e.type !== \"exec\") {\n shouldShow = true;\n }\n if (shouldShow) {\n if (!_this.hoverTooltip) {\n _this.hoverTooltip = new HoverTooltip();\n }\n var domNode = dom.createElement(\"div\");\n domNode.textContent = nls(\"editor.tooltip.disable-editing\", \"Editing is disabled\");\n if (!_this.hoverTooltip.isOpen) {\n _this.hoverTooltip.showForRange(_this, _this.getSelectionRange(), domNode);\n }\n }\n else if (_this.hoverTooltip && _this.hoverTooltip.isOpen) {\n _this.hoverTooltip.hide();\n }\n };\n }\n var textArea = this.textInput.getElement();\n if (readOnly) {\n event.addListener(textArea, \"keydown\", this.$readOnlyCallback, this);\n this.commands.on(\"exec\", this.$readOnlyCallback);\n this.commands.on(\"commandUnavailable\", this.$readOnlyCallback);\n }\n else {\n event.removeListener(textArea, \"keydown\", this.$readOnlyCallback);\n this.commands.off(\"exec\", this.$readOnlyCallback);\n this.commands.off(\"commandUnavailable\", this.$readOnlyCallback);\n if (this.hoverTooltip) {\n this.hoverTooltip.destroy();\n this.hoverTooltip = null;\n }\n }\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var hasValue = this.session && (this.renderer.$composition ||\n this.session.getLength() > 1 || this.session.getLine(0).length > 0);\n if (hasValue && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!hasValue && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!hasValue && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (value) {\n var blurCommand = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (editor) {\n editor.blur();\n editor.renderer.scroller.focus();\n },\n readOnly: true\n };\n var focusOnEnterKeyup = function (e) {\n if (e.target == this.renderer.scroller && e.keyCode === keys['enter']) {\n e.preventDefault();\n var row = this.getCursorPosition().row;\n if (!this.isRowVisible(row))\n this.scrollToLine(row, true, true);\n this.focus();\n }\n };\n var gutterKeyboardHandler;\n if (value) {\n this.renderer.enableKeyboardAccessibility = true;\n this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\";\n this.textInput.getElement().setAttribute(\"tabindex\", -1);\n this.textInput.setNumberOfExtraLines(useragent.isWin ? 3 : 0);\n this.renderer.scroller.setAttribute(\"tabindex\", 0);\n this.renderer.scroller.setAttribute(\"role\", \"group\");\n this.renderer.scroller.setAttribute(\"aria-roledescription\", nls(\"editor.scroller.aria-roledescription\", \"editor\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"editor.scroller.aria-label\", \"Editor content, press Enter to start editing, press Escape to exit\"));\n this.renderer.scroller.addEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.addCommand(blurCommand);\n this.renderer.$gutter.setAttribute(\"tabindex\", 0);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", false);\n this.renderer.$gutter.setAttribute(\"role\", \"group\");\n this.renderer.$gutter.setAttribute(\"aria-roledescription\", nls(\"editor.gutter.aria-roledescription\", \"editor gutter\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"editor.gutter.aria-label\", \"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\"));\n this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.content.setAttribute(\"aria-hidden\", true);\n if (!gutterKeyboardHandler)\n gutterKeyboardHandler = new GutterKeyboardHandler(this);\n gutterKeyboardHandler.addListener();\n this.textInput.setAriaOptions({\n setLabel: true\n });\n }\n else {\n this.renderer.enableKeyboardAccessibility = false;\n this.textInput.getElement().setAttribute(\"tabindex\", 0);\n this.textInput.setNumberOfExtraLines(0);\n this.renderer.scroller.setAttribute(\"tabindex\", -1);\n this.renderer.scroller.removeAttribute(\"role\");\n this.renderer.scroller.removeAttribute(\"aria-roledescription\");\n this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.removeAttribute(\"aria-label\");\n this.renderer.scroller.removeEventListener(\"keyup\", focusOnEnterKeyup.bind(this));\n this.commands.removeCommand(blurCommand);\n this.renderer.content.removeAttribute(\"aria-hidden\");\n this.renderer.$gutter.setAttribute(\"tabindex\", -1);\n this.renderer.$gutter.setAttribute(\"aria-hidden\", true);\n this.renderer.$gutter.removeAttribute(\"role\");\n this.renderer.$gutter.removeAttribute(\"aria-roledescription\");\n this.renderer.$gutter.removeAttribute(\"aria-label\");\n this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName);\n if (gutterKeyboardHandler)\n gutterKeyboardHandler.removeListener();\n }\n },\n initialValue: false\n },\n textInputAriaLabel: {\n set: function (val) { this.$textInputAriaLabel = val; },\n initialValue: \"\"\n },\n enableMobileMenu: {\n set: function (val) { this.$enableMobileMenu = val; },\n initialValue: true\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (/**@type{EditSession}*/ session, /**@type{number}*/ row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, /**@type{number}*/ lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, /**@type{Editor}*/ editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (/**@type{Editor}*/ editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (/**@type{Editor}*/ editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = /** @class */ (function () {\n function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n }\n Lines.prototype.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n Lines.prototype.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n Lines.prototype.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n Lines.prototype.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n Lines.prototype.getLength = function () {\n return this.cells.length;\n };\n Lines.prototype.get = function (index) {\n return this.cells[index];\n };\n Lines.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n Lines.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n Lines.prototype.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n Lines.prototype.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n Lines.prototype.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n Lines.prototype.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n Lines.prototype.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n return Lines;\n}());\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar nls = require(\"../config\").nls;\nvar Gutter = /** @class */ (function () {\n function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n }\n Gutter.prototype.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n Gutter.prototype.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n Gutter.prototype.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n Gutter.prototype.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [], type: [], displayText: [] };\n var annoText = annotation.text;\n var displayAnnoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n displayAnnoText = displayAnnoText ? displayAnnoText : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n rowInfo.displayText.push(displayAnnoText);\n }\n var className = annotation.className;\n if (className) {\n rowInfo.className = className;\n }\n else if (annoType === \"error\") {\n rowInfo.className = \" ace_error\";\n }\n else if (annoType === \"security\" && !/\\bace_error\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_security\";\n }\n else if (annoType === \"warning\" && !/\\bace_(error|security)\\b/.test(rowInfo.className)) {\n rowInfo.className = \" ace_warning\";\n }\n else if (annoType === \"info\" && !rowInfo.className) {\n rowInfo.className = \" ace_info\";\n }\n else if (annoType === \"hint\" && !rowInfo.className) {\n rowInfo.className = \" ace_hint\";\n }\n }\n };\n Gutter.prototype.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n Gutter.prototype.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth; (this.element.parentNode).style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n Gutter.prototype.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n Gutter.prototype.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n Gutter.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n Gutter.prototype.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n Gutter.prototype.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var annotationNode = element.childNodes[2];\n var customWidget = element.childNodes[3];\n var annotationIconNode = annotationNode.firstChild;\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var lineHeight = config.lineHeight + \"px\";\n var className = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \";\n var iconClassName = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n var rowText = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row] && row !== foldStart)\n className += this.$annotations[row].className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var foldClass = \"ace_fold-widget ace_\" + c;\n var isClosedFold = c == \"start\" && row == foldStart && row < fold.end.row;\n if (isClosedFold) {\n foldClass += \" ace_closed\";\n var foldAnnotationClass = \"\";\n var annotationInFold = false;\n for (var i = row + 1; i <= fold.end.row; i++) {\n if (!this.$annotations[i])\n continue;\n if (this.$annotations[i].className === \" ace_error\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_error_fold\";\n break;\n }\n if (this.$annotations[i].className === \" ace_security\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_security_fold\";\n }\n else if (this.$annotations[i].className === \" ace_warning\" &&\n foldAnnotationClass !== \" ace_security_fold\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n }\n }\n className += foldAnnotationClass;\n }\n else\n foldClass += \" ace_open\";\n if (foldWidget.className != foldClass)\n foldWidget.className = foldClass;\n dom.setStyle(foldWidget.style, \"height\", lineHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n foldWidget.setAttribute(\"role\", \"button\");\n foldWidget.setAttribute(\"tabindex\", \"-1\");\n var foldRange = session.getFoldWidgetRange(row);\n if (foldRange)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.range.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n foldRange.start.row + 1,\n foldRange.end.row + 1\n ]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.closed.aria-label\", \"Toggle code folding, rows $0 through $1\", [\n fold.start.row + 1,\n fold.end.row + 1\n ]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"gutter.code-folding.open.aria-label\", \"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.closed.title\", \"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"gutter.code-folding.open.title\", \"Fold code\"));\n }\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n foldWidget.setAttribute(\"tabindex\", \"0\");\n foldWidget.removeAttribute(\"role\");\n foldWidget.removeAttribute(\"aria-label\");\n }\n }\n var customWidgetAttributes = this.session.$gutterCustomWidgets[row];\n if (customWidgetAttributes) {\n this.$addCustomWidget(row, customWidgetAttributes, cell);\n }\n else if (customWidget) {\n this.$removeCustomWidget(row, cell);\n }\n if (annotationInFold && this.$showFoldedAnnotations) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n annotationIconNode.className += foldAnnotationClass;\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (foldAnnotationClass) {\n case \" ace_error_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning_fold\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else if (this.$annotations[row]) {\n annotationNode.className = \"ace_gutter_annotation\";\n annotationIconNode.className = iconClassName;\n if (this.$useSvgGutterIcons)\n annotationIconNode.className += this.$annotations[row].className;\n else\n element.classList.add(this.$annotations[row].className.replace(\" \", \"\"));\n dom.setStyle(annotationIconNode.style, \"height\", lineHeight);\n dom.setStyle(annotationNode.style, \"display\", \"block\");\n dom.setStyle(annotationNode.style, \"height\", lineHeight);\n var ariaLabel;\n switch (this.$annotations[row].className) {\n case \" ace_error\":\n ariaLabel = nls(\"gutter.annotation.aria-label.error\", \"Error, read annotations row $0\", [rowText]);\n break;\n case \" ace_security\":\n ariaLabel = nls(\"gutter.annotation.aria-label.security\", \"Security finding, read annotations row $0\", [rowText]);\n break;\n case \" ace_warning\":\n ariaLabel = nls(\"gutter.annotation.aria-label.warning\", \"Warning, read annotations row $0\", [rowText]);\n break;\n case \" ace_info\":\n ariaLabel = nls(\"gutter.annotation.aria-label.info\", \"Info, read annotations row $0\", [rowText]);\n break;\n case \" ace_hint\":\n ariaLabel = nls(\"gutter.annotation.aria-label.hint\", \"Suggestion, read annotations row $0\", [rowText]);\n break;\n }\n annotationNode.setAttribute(\"aria-label\", ariaLabel);\n annotationNode.setAttribute(\"tabindex\", \"-1\");\n annotationNode.setAttribute(\"role\", \"button\");\n }\n else {\n dom.setStyle(annotationNode.style, \"display\", \"none\");\n annotationNode.removeAttribute(\"aria-label\");\n annotationNode.removeAttribute(\"role\");\n annotationNode.setAttribute(\"tabindex\", \"0\");\n }\n if (rowText !== textNode.data) {\n textNode.data = rowText;\n }\n if (element.className != className)\n element.className = className;\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = rowText;\n if (annotationNode.style.display === \"none\" && foldWidget.style.display === \"none\" && !customWidgetAttributes)\n cell.element.setAttribute(\"aria-hidden\", true);\n else\n cell.element.setAttribute(\"aria-hidden\", false);\n return cell;\n };\n Gutter.prototype.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n Gutter.prototype.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n Gutter.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n Gutter.prototype.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n Gutter.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n Gutter.prototype.$hideFoldWidget = function (row, cell) {\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var foldWidget = rowCell.element.childNodes[1];\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n };\n Gutter.prototype.$showFoldWidget = function (row, cell) {\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var foldWidget = rowCell.element.childNodes[1];\n if (foldWidget && this.session.foldWidgets && this.session.foldWidgets[rowCell.row]) {\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n }\n }\n };\n Gutter.prototype.$getGutterCell = function (row) {\n var cells = this.$lines.cells;\n var visibileRow = this.session.documentToScreenRow(row, 0);\n return cells[row - this.config.firstRowScreen - (row - visibileRow)];\n };\n Gutter.prototype.$addCustomWidget = function (row, _a, cell) {\n var className = _a.className, label = _a.label, title = _a.title, callbacks = _a.callbacks;\n this.session.$gutterCustomWidgets[row] = { className: className, label: label, title: title, callbacks: callbacks };\n this.$hideFoldWidget(row, cell);\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n if (customWidget) {\n customWidget.remove();\n }\n customWidget = dom.createElement(\"span\");\n customWidget.className = \"ace_custom-widget \".concat(className);\n customWidget.setAttribute(\"tabindex\", \"-1\");\n customWidget.setAttribute(\"role\", 'button');\n customWidget.setAttribute(\"aria-label\", label);\n customWidget.setAttribute(\"title\", title);\n dom.setStyle(customWidget.style, \"display\", \"inline-block\");\n dom.setStyle(customWidget.style, \"height\", \"inherit\");\n if (callbacks && callbacks.onClick) {\n customWidget.addEventListener(\"click\", function (e) {\n callbacks.onClick(e, row);\n e.stopPropagation();\n });\n }\n rowCell.element.appendChild(customWidget);\n }\n };\n Gutter.prototype.$removeCustomWidget = function (row, cell) {\n delete this.session.$gutterCustomWidgets[row];\n this.$showFoldWidget(row, cell);\n var rowCell = cell || this.$getGutterCell(row);\n if (rowCell && rowCell.element) {\n var customWidget = rowCell.element.querySelector(\".ace_custom-widget\");\n if (customWidget) {\n rowCell.element.removeChild(customWidget);\n }\n }\n };\n Gutter.prototype.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(/**@type{Element}*/ (this.element.firstChild));\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n Gutter.prototype.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n return Gutter;\n}());\nGutter.prototype.$fixedWidth = false;\nGutter.prototype.$highlightGutterLine = true;\nGutter.prototype.$renderer = \"\";\nGutter.prototype.$showLineNumbers = true;\nGutter.prototype.$showFoldWidgets = true;\noop.implement(Gutter.prototype, EventEmitter);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n var annotationNode = dom.createElement(\"span\");\n element.appendChild(annotationNode);\n var annotationIconNode = dom.createElement(\"span\");\n annotationNode.appendChild(annotationIconNode);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = /** @class */ (function () {\n function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n }\n Marker.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Marker.prototype.setSession = function (session) {\n this.session = session;\n };\n Marker.prototype.setMarkers = function (markers) {\n this.markers = markers;\n };\n Marker.prototype.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n Marker.prototype.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n Marker.prototype.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n Marker.prototype.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n Marker.prototype.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:\" + padding + \"px;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:\" + padding + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + (selection.width + (extraLength || 0)) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n Marker.prototype.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n Marker.prototype.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n return Marker;\n}());\nMarker.prototype.$padding = 0;\nfunction getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n}\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text_util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){// Tokens for which Ace just uses a simple TextNode and does not add any special className.\nvar textTokens = new Set([\"text\", \"rparen\", \"lparen\"]);\nexports.isTextToken = function (tokenType) {\n return textTokens.has(tokenType);\n};\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar nls = require(\"../config\").nls;\nvar isTextToken = require(\"./text_util\").isTextToken;\nvar Text = /** @class */ (function () {\n function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n }\n Text.prototype.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n Text.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n Text.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n Text.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n Text.prototype.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", \n function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n Text.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n Text.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n Text.prototype.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n Text.prototype.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n Text.prototype.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n Text.prototype.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n Text.prototype.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize; var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n Text.prototype.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break; var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n Text.prototype.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n Text.prototype.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n Text.prototype.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n Text.prototype.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069\\u2060\\u2061\\u2062\\u2063\\u2064\\u206A\\u206B\\u206B\\u206C\\u206D\\u206E\\u206F]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n var text = self.$tabStrings[tabSize].cloneNode(true);\n text[\"charCount\"] = 1;\n valueFragment.appendChild(text);\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.dom.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!isTextToken(token.type)) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") {\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.setAttribute(\"title\", nls(\"inline-fold.closed.title\", \"Unfold code\"));\n }\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n Text.prototype.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n Text.prototype.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row + 1;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n Text.prototype.$clearActiveIndentGuide = function () {\n var activeIndentGuides = this.element.querySelectorAll(\".ace_indent-guide-active\");\n for (var i = 0; i < activeIndentGuides.length; i++) {\n activeIndentGuides[i].classList.remove(\"ace_indent-guide-active\");\n }\n };\n Text.prototype.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var element = cell.element;\n if (cell.element.classList && cell.element.classList.contains(\"ace_line_group\")) {\n if (cell.element.childNodes.length > 0) {\n element = cell.element.childNodes[0];\n }\n else {\n return;\n }\n }\n var childNodes = element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n Text.prototype.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row < this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n Text.prototype.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n Text.prototype.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n var text = this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element);\n text[\"charCount\"] = 0; // not to take into account when we are counting columns\n lineEl.appendChild(text);\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n Text.prototype.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n Text.prototype.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"\" : \"\";\n parent.appendChild(overflowEl);\n };\n Text.prototype.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n Text.prototype.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n Text.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n return Text;\n}());\nText.prototype.EOF_CHAR = \"\\xB6\";\nText.prototype.EOL_CHAR_LF = \"\\xAC\";\nText.prototype.EOL_CHAR_CRLF = \"\\xa4\";\nText.prototype.EOL_CHAR = Text.prototype.EOL_CHAR_LF;\nText.prototype.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\nText.prototype.SPACE_CHAR = \"\\xB7\";\nText.prototype.$padding = 0;\nText.prototype.MAX_LINE_LENGTH = 10000;\nText.prototype.showInvisibles = false;\nText.prototype.showSpaces = false;\nText.prototype.showTabs = false;\nText.prototype.showEOL = false;\nText.prototype.displayIndentGuides = true;\nText.prototype.$highlightIndentGuides = true;\nText.prototype.$tabStrings = [];\nText.prototype.destroy = {};\nText.prototype.onChangeTabSize = Text.prototype.$computeTabString;\noop.implement(Text.prototype, EventEmitter);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = /** @class */ (function () {\n function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n }\n Cursor.prototype.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n Cursor.prototype.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n Cursor.prototype.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n Cursor.prototype.setPadding = function (padding) {\n this.$padding = padding;\n };\n Cursor.prototype.setSession = function (session) {\n this.session = session;\n };\n Cursor.prototype.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n Cursor.prototype.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n Cursor.prototype.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n Cursor.prototype.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n Cursor.prototype.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n Cursor.prototype.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n Cursor.prototype.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = /**@this{Cursor}*/ function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n Cursor.prototype.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n Cursor.prototype.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n Cursor.prototype.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n Cursor.prototype.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n Cursor.prototype.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n return Cursor;\n}());\nCursor.prototype.$padding = 0;\nCursor.prototype.drawCursor = null;\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar Scrollbar = /** @class */ (function () {\n function Scrollbar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n }\n Scrollbar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return Scrollbar;\n}());\noop.implement(Scrollbar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n _this.width = dom.scrollbarWidth(parent.ownerDocument);\n _this.inner.style.width =\n _this.element.style.width = (_this.width || 15) + 5 + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n return VScrollBar;\n}(Scrollbar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.height = renderer.$scrollbarWidth;\n _this.inner.style.height =\n _this.element.style.height = (_this.height || 15) + 5 + \"px\";\n return _this;\n }\n HScrollBar.prototype.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n HScrollBar.prototype.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n return HScrollBar;\n}(Scrollbar));\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = /** @class */ (function () {\n function ScrollBar(parent, classSuffix) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n ScrollBar.prototype.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n return ScrollBar;\n}());\noop.implement(ScrollBar.prototype, EventEmitter);\nvar VScrollBar = /** @class */ (function (_super) {\n __extends(VScrollBar, _super);\n function VScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-v') || this;\n _this.scrollTop = 0;\n _this.scrollHeight = 0;\n _this.parent = parent;\n _this.width = _this.VScrollWidth;\n _this.renderer = renderer;\n _this.inner.style.width = _this.element.style.width = (_this.width || 15) + \"px\";\n _this.$minWidth = 0;\n return _this;\n }\n VScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n VScrollBar.prototype.getHeight = function () {\n return this.height;\n };\n VScrollBar.prototype.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n VScrollBar.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n VScrollBar.prototype.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n VScrollBar.prototype.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n VScrollBar.prototype.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n return VScrollBar;\n}(ScrollBar));\nVScrollBar.prototype.setInnerHeight = VScrollBar.prototype.setScrollHeight;\nvar HScrollBar = /** @class */ (function (_super) {\n __extends(HScrollBar, _super);\n function HScrollBar(parent, renderer) {\n var _this = _super.call(this, parent, '-h') || this;\n _this.scrollLeft = 0;\n _this.scrollWidth = 0;\n _this.height = _this.HScrollHeight;\n _this.inner.style.height = _this.element.style.height = (_this.height || 12) + \"px\";\n _this.renderer = renderer;\n return _this;\n }\n HScrollBar.prototype.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n HScrollBar.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n HScrollBar.prototype.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n HScrollBar.prototype.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n HScrollBar.prototype.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n HScrollBar.prototype.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n return HScrollBar;\n}(ScrollBar));\nHScrollBar.prototype.setInnerWidth = HScrollBar.prototype.setScrollWidth;\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = /** @class */ (function () {\n function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n }\n RenderLoop.prototype.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n RenderLoop.prototype.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n return RenderLoop;\n}());\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 512;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = /** @class */ (function () {\n function FontMetrics(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n }\n FontMetrics.prototype.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n FontMetrics.prototype.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n FontMetrics.prototype.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n FontMetrics.prototype.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n FontMetrics.prototype.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n FontMetrics.prototype.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n FontMetrics.prototype.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n FontMetrics.prototype.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n FontMetrics.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n FontMetrics.prototype.$getZoom = function (element) {\n if (!element || !element.parentElement)\n return 1;\n return (Number(window.getComputedStyle(element)[\"zoom\"]) || 1) * this.$getZoom(element.parentElement);\n };\n FontMetrics.prototype.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n FontMetrics.prototype.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n return FontMetrics;\n}());\nFontMetrics.prototype.$characterSize = { width: 0, height: 0 };\noop.implement(FontMetrics.prototype, EventEmitter);\nexports.FontMetrics = FontMetrics;\n\n});\n\nace.define(\"ace/css/editor-css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){/*\nstyles = []\nfor (var i = 1; i < 16; i++) {\n styles.push(\".ace_br\" + i + \"{\" + (\n [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"]\n ).map(function(x, j) {\n return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n padding: 3px 4px;\\n position: fixed;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre-wrap;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n overflow: auto;\\n max-width: min(33em, 66vw);\\n overscroll-behavior: contain;\\n}\\n.ace_tooltip pre {\\n white-space: pre-wrap;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget, .ace_custom-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_custom-widget {\\n background: none;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n position: relative;\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n z-index: 1;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n}\\n\\n.ace_ghost_text_container > div {\\n white-space: pre;\\n}\\n\\n.ghost_text_line_wrapped::after {\\n content: \\\"\\u21A9\\\";\\n position: absolute;\\n}\\n\\n.ace_lineWidgetContainer.ace_ghost_text {\\n margin: 0px 4px\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}\\n\\n.ace_hidden_token {\\n display: none;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = /** @class */ (function () {\n function Decorator(scrollbarV, renderer) {\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\",\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\",\n };\n this.setScrollBarV(scrollbarV);\n }\n Decorator.prototype.$createCanvas = function () {\n this.canvas = dom.createElement(\"canvas\");\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = \"7\";\n this.canvas.style.position = \"absolute\";\n };\n Decorator.prototype.setScrollBarV = function (scrollbarV) {\n this.$createCanvas();\n this.scrollbarV = scrollbarV;\n scrollbarV.element.appendChild(this.canvas);\n this.setDimensions();\n };\n Decorator.prototype.$updateDecorators = function (config) {\n if (typeof this.canvas.getContext !== \"function\") {\n return;\n }\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n this.setDimensions(config);\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item[\"priority\"] = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var offset1 = this.getVerticalOffsetForRow(row);\n var offset2 = offset1 + this.lineHeight;\n var y1 = Math.round(this.heightRatio * offset1);\n var y2 = Math.round(this.heightRatio * offset2);\n var ycenter = Math.round((y1 + y2) / 2);\n var halfHeight = (y2 - ycenter);\n if (halfHeight < this.halfMinDecorationHeight) {\n halfHeight = this.halfMinDecorationHeight;\n }\n if (ycenter - halfHeight < 0) {\n ycenter = halfHeight;\n }\n if (ycenter + halfHeight > this.canvasHeight) {\n ycenter = this.canvasHeight - halfHeight;\n }\n var from = ycenter - halfHeight;\n var to = ycenter + halfHeight;\n var zoneHeight = to - from;\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, from, Math.round(this.oneZoneWidth - 1), zoneHeight);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var currentY = Math.round(this.getVerticalOffsetForRow(cursor.row) * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n Decorator.prototype.getVerticalOffsetForRow = function (row) {\n row = row | 0;\n var offset = this.renderer.session.documentToScreenRow(row, 0) * this.lineHeight;\n return offset;\n };\n Decorator.prototype.setDimensions = function (config) {\n config = config || this.renderer.layerConfig;\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n this.canvasWidth = this.scrollbarV.width || this.canvasWidth;\n this.setZoneWidth();\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n if (this.maxHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n };\n Decorator.prototype.setZoneWidth = function () {\n this.oneZoneWidth = this.canvasWidth;\n };\n Decorator.prototype.destroy = function () {\n this.canvas.parentNode.removeChild(this.canvas);\n };\n return Decorator;\n}());\noop.implement(Decorator.prototype, EventEmitter);\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor-css\",\"ace/layer/decorators\",\"ace/lib/useragent\",\"ace/layer/text_util\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor-css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar isTextToken = require(\"./layer/text_util\").isTextToken;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = /** @class */ (function () {\n function VirtualRenderer(container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", \"true\");\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n this.$addResizeObserver();\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n }\n VirtualRenderer.prototype.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n VirtualRenderer.prototype.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n VirtualRenderer.prototype.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n VirtualRenderer.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n VirtualRenderer.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n VirtualRenderer.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n VirtualRenderer.prototype.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n VirtualRenderer.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n VirtualRenderer.prototype.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n VirtualRenderer.prototype.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!height && this.$maxLines && this.lineHeight > 1) {\n if (!el.style.height || el.style.height == \"0px\") {\n el.style.height = \"1px\";\n height = el.clientHeight || el.scrollHeight;\n }\n }\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (this.$resizeTimer)\n this.$resizeTimer.cancel();\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n VirtualRenderer.prototype.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n VirtualRenderer.prototype.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n VirtualRenderer.prototype.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n VirtualRenderer.prototype.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n VirtualRenderer.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n VirtualRenderer.prototype.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n VirtualRenderer.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n VirtualRenderer.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n VirtualRenderer.prototype.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n VirtualRenderer.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n VirtualRenderer.prototype.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n VirtualRenderer.prototype.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n VirtualRenderer.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n VirtualRenderer.prototype.setPrintMarginColumn = function (printMarginColumn) {\n this.setOption(\"printMarginColumn\", printMarginColumn);\n };\n VirtualRenderer.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n VirtualRenderer.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n VirtualRenderer.prototype.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n VirtualRenderer.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n VirtualRenderer.prototype.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n VirtualRenderer.prototype.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n VirtualRenderer.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n VirtualRenderer.prototype.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n VirtualRenderer.prototype.getContainerElement = function () {\n return this.container;\n };\n VirtualRenderer.prototype.getMouseEventTarget = function () {\n return this.scroller;\n };\n VirtualRenderer.prototype.getTextAreaContainer = function () {\n return this.container;\n };\n VirtualRenderer.prototype.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME || useragent.isMobile ? this.lineHeight : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n VirtualRenderer.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n VirtualRenderer.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n VirtualRenderer.prototype.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n VirtualRenderer.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n VirtualRenderer.prototype.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n VirtualRenderer.prototype.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n VirtualRenderer.prototype.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n VirtualRenderer.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n VirtualRenderer.prototype.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n VirtualRenderer.prototype.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n VirtualRenderer.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n VirtualRenderer.prototype.freeze = function () {\n this.$frozen = true;\n };\n VirtualRenderer.prototype.unfreeze = function () {\n this.$frozen = false;\n };\n VirtualRenderer.prototype.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \";\n if (this.enableKeyboardAccessibility)\n this.scroller.className += this.keyboardFocusClassName;\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n VirtualRenderer.prototype.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n VirtualRenderer.prototype.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1) {\n this.$autosize();\n hideScrollbars = size.height <= 2 * this.lineHeight;\n }\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n if (offset < 0 && firstRowScreen > 0) {\n firstRowScreen = Math.max(0, firstRowScreen + Math.floor(offset / lineHeight));\n offset = this.scrollTop - firstRowScreen * lineHeight;\n }\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n VirtualRenderer.prototype.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n VirtualRenderer.prototype.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n VirtualRenderer.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n VirtualRenderer.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n VirtualRenderer.prototype.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n VirtualRenderer.prototype.updateBreakpoints = function (rows) {\n this._rows = rows;\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n VirtualRenderer.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n VirtualRenderer.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n VirtualRenderer.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n VirtualRenderer.prototype.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n VirtualRenderer.prototype.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var newLeft = pos.left;\n var newTop = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n if (this.$scrollAnimation) {\n this.$stopAnimation = true;\n }\n var currentTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (currentTop + topMargin > newTop) {\n if (offset && currentTop + topMargin > newTop + this.lineHeight)\n newTop -= offset * this.$size.scrollerHeight;\n if (newTop === 0)\n newTop = -this.scrollMargin.top;\n this.session.setScrollTop(newTop);\n }\n else if (currentTop + this.$size.scrollerHeight - bottomMargin < newTop + this.lineHeight) {\n if (offset && currentTop + this.$size.scrollerHeight - bottomMargin < newTop - this.lineHeight)\n newTop += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(newTop + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var currentLeft = this.scrollLeft;\n var twoCharsWidth = 2 * this.layerConfig.characterWidth;\n if (newLeft - twoCharsWidth < currentLeft) {\n newLeft -= twoCharsWidth;\n if (newLeft < this.$padding + twoCharsWidth) {\n newLeft = -this.scrollMargin.left;\n }\n this.session.setScrollLeft(newLeft);\n }\n else {\n newLeft += twoCharsWidth;\n if (currentLeft + this.$size.scrollerWidth < newLeft + this.characterWidth) {\n this.session.setScrollLeft(Math.round(newLeft + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (currentLeft <= this.$padding && newLeft - currentLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n }\n };\n VirtualRenderer.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n VirtualRenderer.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n VirtualRenderer.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n VirtualRenderer.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n VirtualRenderer.prototype.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n VirtualRenderer.prototype.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n VirtualRenderer.prototype.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n VirtualRenderer.prototype.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n VirtualRenderer.prototype.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n function endAnimation() {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n _self.$stopAnimation = false;\n callback && callback();\n }\n this.$timer = setInterval(function () {\n if (_self.$stopAnimation) {\n endAnimation();\n return;\n }\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n endAnimation();\n }\n }, 10);\n };\n VirtualRenderer.prototype.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n VirtualRenderer.prototype.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n VirtualRenderer.prototype.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n VirtualRenderer.prototype.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n VirtualRenderer.prototype.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n VirtualRenderer.prototype.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n VirtualRenderer.prototype.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n VirtualRenderer.prototype.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n VirtualRenderer.prototype.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n VirtualRenderer.prototype.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n VirtualRenderer.prototype.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n VirtualRenderer.prototype.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n VirtualRenderer.prototype.setGhostText = function (text, position) {\n var cursor = this.session.selection.cursor;\n var insertPosition = position || { row: cursor.row, column: cursor.column };\n this.removeGhostText();\n var textChunks = this.$calculateWrappedTextChunks(text, insertPosition);\n this.addToken(textChunks[0].text, \"ghost_text\", insertPosition.row, insertPosition.column);\n this.$ghostText = {\n text: text,\n position: {\n row: insertPosition.row,\n column: insertPosition.column\n }\n };\n var widgetDiv = dom.createElement(\"div\");\n if (textChunks.length > 1) {\n var hiddenTokens = this.hideTokensAfterPosition(insertPosition.row, insertPosition.column);\n var lastLineDiv;\n textChunks.slice(1).forEach(function (el) {\n var chunkDiv = dom.createElement(\"div\");\n var chunkSpan = dom.createElement(\"span\");\n chunkSpan.className = \"ace_ghost_text\";\n if (el.wrapped)\n chunkDiv.className = \"ghost_text_line_wrapped\";\n if (el.text.length === 0)\n el.text = \" \";\n chunkSpan.appendChild(dom.createTextNode(el.text));\n chunkDiv.appendChild(chunkSpan);\n widgetDiv.appendChild(chunkDiv);\n lastLineDiv = chunkDiv;\n });\n hiddenTokens.forEach(function (token) {\n var element = dom.createElement(\"span\");\n if (!isTextToken(token.type))\n element.className = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n element.appendChild(dom.createTextNode(token.value));\n lastLineDiv.appendChild(element);\n });\n this.$ghostTextWidget = {\n el: widgetDiv,\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text_container\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n var pixelPosition = this.$cursorLayer.getPixelPosition(insertPosition, true);\n var el = this.container;\n var height = el.getBoundingClientRect().height;\n var ghostTextHeight = textChunks.length * this.lineHeight;\n var fitsY = ghostTextHeight < (height - pixelPosition.top);\n if (fitsY)\n return;\n if (ghostTextHeight < height) {\n this.scrollBy(0, (textChunks.length - 1) * this.lineHeight);\n }\n else {\n this.scrollToRow(insertPosition.row);\n }\n }\n };\n VirtualRenderer.prototype.$calculateWrappedTextChunks = function (text, position) {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth) - 2;\n limit = limit <= 0 ? 60 : limit; // this is a hack to prevent the editor from crashing when the window is too small\n var textLines = text.split(/\\r?\\n/);\n var textChunks = [];\n for (var i = 0; i < textLines.length; i++) {\n var displayTokens = this.session.$getDisplayTokens(textLines[i], position.column);\n var wrapSplits = this.session.$computeWrapSplits(displayTokens, limit, this.session.$tabSize);\n if (wrapSplits.length > 0) {\n var start = 0;\n wrapSplits.push(textLines[i].length);\n for (var j = 0; j < wrapSplits.length; j++) {\n var textSlice = textLines[i].slice(start, wrapSplits[j]);\n textChunks.push({ text: textSlice, wrapped: true });\n start = wrapSplits[j];\n }\n }\n else {\n textChunks.push({ text: textLines[i], wrapped: false });\n }\n }\n return textChunks;\n };\n VirtualRenderer.prototype.removeGhostText = function () {\n if (!this.$ghostText)\n return;\n var position = this.$ghostText.position;\n this.removeExtraToken(position.row, position.column);\n if (this.$ghostTextWidget) {\n this.session.widgetManager.removeLineWidget(this.$ghostTextWidget);\n this.$ghostTextWidget = null;\n }\n this.$ghostText = null;\n };\n VirtualRenderer.prototype.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null || !tokens.length) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.hideTokensAfterPosition = function (row, column) {\n var tokens = this.session.getTokens(row);\n var l = 0;\n var hasPassedCursor = false;\n var hiddenTokens = [];\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (token.type === \"ghost_text\")\n continue;\n if (hasPassedCursor) {\n hiddenTokens.push({ type: token.type, value: token.value });\n token.type = \"hidden_token\";\n continue;\n }\n if (l === column) {\n hasPassedCursor = true;\n }\n }\n this.updateLines(row, row);\n return hiddenTokens;\n };\n VirtualRenderer.prototype.removeExtraToken = function (row, column) {\n this.session.bgTokenizer.lines[row] = null;\n this.updateLines(row, row);\n };\n VirtualRenderer.prototype.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n if (useragent.isSafari && _self.scroller) {\n _self.scroller.style.background = \"red\";\n _self.scroller.style.background = \"\";\n }\n }\n };\n VirtualRenderer.prototype.getTheme = function () {\n return this.$themeId;\n };\n VirtualRenderer.prototype.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n VirtualRenderer.prototype.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n VirtualRenderer.prototype.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n VirtualRenderer.prototype.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n VirtualRenderer.prototype.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n VirtualRenderer.prototype.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n this.setOption(\"useResizeObserver\", false);\n };\n VirtualRenderer.prototype.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n if (!this.$scrollDecorator) {\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.$scrollDecorator.setScrollBarV(this.scrollBarV);\n this.$scrollDecorator.$updateDecorators();\n }\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n VirtualRenderer.prototype.$addResizeObserver = function () {\n if (!window.ResizeObserver || this.$resizeObserver)\n return;\n var self = this;\n this.$resizeTimer = lang.delayedCall(function () {\n if (!self.destroyed)\n self.onResize();\n }, 50);\n this.$resizeObserver = new window.ResizeObserver(function (e) {\n var w = e[0].contentRect.width;\n var h = e[0].contentRect.height;\n if (Math.abs(self.$size.width - w) > 1\n || Math.abs(self.$size.height - h) > 1) {\n self.$resizeTimer.delay();\n }\n else {\n self.$resizeTimer.cancel();\n }\n });\n this.$resizeObserver.observe(this.container);\n };\n return VirtualRenderer;\n}());\nVirtualRenderer.prototype.CHANGE_CURSOR = 1;\nVirtualRenderer.prototype.CHANGE_MARKER = 2;\nVirtualRenderer.prototype.CHANGE_GUTTER = 4;\nVirtualRenderer.prototype.CHANGE_SCROLL = 8;\nVirtualRenderer.prototype.CHANGE_LINES = 16;\nVirtualRenderer.prototype.CHANGE_TEXT = 32;\nVirtualRenderer.prototype.CHANGE_SIZE = 64;\nVirtualRenderer.prototype.CHANGE_MARKER_BACK = 128;\nVirtualRenderer.prototype.CHANGE_MARKER_FRONT = 256;\nVirtualRenderer.prototype.CHANGE_FULL = 512;\nVirtualRenderer.prototype.CHANGE_H_SCROLL = 1024;\nVirtualRenderer.prototype.$changes = 0;\nVirtualRenderer.prototype.$padding = null;\nVirtualRenderer.prototype.$frozen = false;\nVirtualRenderer.prototype.STEPS = 8;\noop.implement(VirtualRenderer.prototype, EventEmitter);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (value) {\n if (!value && this.$resizeObserver) {\n this.$resizeObserver.disconnect();\n this.$resizeTimer.cancel();\n this.$resizeTimer = this.$resizeObserver = null;\n }\n else if (value && !this.$resizeObserver) {\n this.$addResizeObserver();\n }\n }\n },\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n useSvgGutterIcons: {\n set: function (value) {\n this.$gutterLayer.$useSvgGutterIcons = value;\n },\n initialValue: false\n },\n showFoldedAnnotations: {\n set: function (value) {\n this.$gutterLayer.$showFoldedAnnotations = value;\n },\n initialValue: false\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker.onerror = function(e) {\n e.preventDefault();\n };\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = /** @class */ (function () {\n function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager()[\"$undostack\"] || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n PlaceHolder.prototype.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n PlaceHolder.prototype.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n PlaceHolder.prototype.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n PlaceHolder.prototype.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n PlaceHolder.prototype.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n PlaceHolder.prototype.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n PlaceHolder.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n PlaceHolder.prototype.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager[\"$undostack\"]).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n return PlaceHolder;\n}());\noop.implement(PlaceHolder.prototype, EventEmitter);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){/**\n * commands to enter multiselect mode\n * @type {import(\"../../ace-internal\").Ace.Command[]}\n */\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * @typedef {import(\"./anchor\").Anchor} Anchor\n * @typedef {import(\"../ace-internal\").Ace.Point} Point\n * @typedef {import(\"../ace-internal\").Ace.ScreenCoordinates} ScreenCoordinates\n */\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp_1 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp_1.start.row;\n range.start.column = tmp_1.start.column;\n range.end.row = tmp_1.end.row;\n range.end.column = tmp_1.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/config\"], function(require, exports, module){/**\n * ## Error Marker extension\n *\n * Provides inline error display functionality for Ace editor. Creates visual error markers that appear as tooltips\n * below editor lines containing annotations (errors, warnings, info). Enables navigation between error locations with\n * keyboard shortcuts and displays context-sensitive messages with proper styling based on annotation severity.\n *\n * @module\n */\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nvar nls = require(\"../config\").nls;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n displayText: [nls(\"error-marker.good-state\", \"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n gutterAnno.displayText.forEach(function (annoTextLine, i) {\n el.appendChild(dom.createTextNode(annoTextLine));\n if (i < gutterAnno.displayText.length - 1) {\n el.appendChild(dom.createElement(\"br\"));\n }\n });\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @namespace Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n editor.on(\"destroy\", function () {\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nvar version = exports.config.version;\nexports.version = version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n var global = (function () {\n return this;\n })();\n if (!global && typeof window != \"undefined\") global = window; // can happen in strict mode\n if (!global && typeof self != \"undefined\") global = self; // can happen in webworker\n \n if (!global.ace)\n global.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n global.ace[key] = a[key];\n global.ace[\"default\"] = global.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = global.ace;\n }\n });\n })();\n ","ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\nvar VARIABLES = {\n CURRENT_WORD: function (editor) {\n return editor.session.getTextRange(editor.session.getWordRange());\n },\n SELECTION: function (editor, name, indentation) {\n var text = editor.session.getTextRange();\n if (indentation)\n return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n return text;\n },\n CURRENT_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row);\n },\n PREV_LINE: function (editor) {\n return editor.session.getLine(editor.getCursorPosition().row - 1);\n },\n LINE_INDEX: function (editor) {\n return editor.getCursorPosition().row;\n },\n LINE_NUMBER: function (editor) {\n return editor.getCursorPosition().row + 1;\n },\n SOFT_TABS: function (editor) {\n return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function (editor) {\n return editor.session.getTabSize();\n },\n CLIPBOARD: function (editor) {\n return clipboard.getText && clipboard.getText();\n },\n FILENAME: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n },\n FILENAME_BASE: function (editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function (editor) {\n return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function (editor) { return \"/not implemented.txt\"; },\n WORKSPACE_NAME: function () { return \"Unknown\"; },\n FULLNAME: function () { return \"Unknown\"; },\n BLOCK_COMMENT_START: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.end || \"\";\n },\n LINE_COMMENT: function (editor) {\n var mode = editor.session.$mode || {};\n return mode.lineCommentStart || \"\";\n },\n CURRENT_YEAR: date.bind(null, { year: \"numeric\" }),\n CURRENT_YEAR_SHORT: date.bind(null, { year: \"2-digit\" }),\n CURRENT_MONTH: date.bind(null, { month: \"numeric\" }),\n CURRENT_MONTH_NAME: date.bind(null, { month: \"long\" }),\n CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: \"short\" }),\n CURRENT_DATE: date.bind(null, { day: \"2-digit\" }),\n CURRENT_DAY_NAME: date.bind(null, { weekday: \"long\" }),\n CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: \"short\" }),\n CURRENT_HOUR: date.bind(null, { hour: \"2-digit\", hour12: false }),\n CURRENT_MINUTE: date.bind(null, { minute: \"2-digit\" }),\n CURRENT_SECOND: date.bind(null, { second: \"2-digit\" })\n};\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\nfunction date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n}\nvar SnippetManager = /** @class */ (function () {\n function SnippetManager() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.variables = VARIABLES;\n }\n SnippetManager.prototype.getTokenizer = function () {\n return SnippetManager[\"$tokenizer\"] || this.createTokenizer();\n };\n SnippetManager.prototype.createTokenizer = function () {\n function TabstopToken(str) {\n str = str.substr(1);\n if (/^\\d+$/.test(str))\n return [{ tabstopId: parseInt(str, 10) }];\n return [{ text: str }];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n var formatMatcher = {\n regex: \"/(\" + escape(\"/\") + \"+)/\",\n onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.fmtString = true;\n ts.guard = val.slice(1, -1);\n ts.flag = \"\";\n return \"\";\n },\n next: \"formatString\"\n };\n SnippetManager[\"$tokenizer\"] = new Tokenizer({\n start: [\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n }\n else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n }\n return [val];\n } },\n { regex: /}/, onMatch: function (val, state, stack) {\n return [stack.length ? stack.shift() : val];\n } },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken },\n { regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function (str, state, stack) {\n var t = TabstopToken(str.substr(1));\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\" },\n { regex: /\\n/, token: \"newline\", merge: false }\n ],\n snippetVar: [\n { regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function (val, state, stack) {\n var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n return operator.length == 2 ? operator[1] : \"\\x00\";\n }).split(\"\\x00\").map(function (value) {\n return { value: value };\n });\n stack[0].choices = choices;\n return [choices[0]];\n }, next: \"start\" },\n formatMatcher,\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\" }\n ],\n formatString: [\n { regex: /:/, onMatch: function (val, state, stack) {\n if (stack.length && stack[0].expectElse) {\n stack[0].expectElse = false;\n stack[0].ifEnd = { elseEnd: stack[0] };\n return [stack[0].ifEnd];\n }\n return \":\";\n } },\n { regex: /\\\\./, onMatch: function (val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length)\n val = ch;\n else if (\"`$\\\\\".indexOf(ch) != -1)\n val = ch;\n else if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\t\";\n else if (\"ulULE\".indexOf(ch) != -1)\n val = { changeCase: ch, local: ch > \"a\" };\n return [val];\n } },\n { regex: \"/\\\\w*}\", onMatch: function (val, state, stack) {\n var next = stack.shift();\n if (next)\n next.flag = val.slice(1, -1);\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" },\n { regex: /\\$(?:\\d+|\\w+)/, onMatch: function (val, state, stack) {\n return [{ text: val.slice(1) }];\n } },\n { regex: /\\${\\w+/, onMatch: function (val, state, stack) {\n var token = { text: val.slice(2) };\n stack.unshift(token);\n return [token];\n }, next: \"formatStringVar\" },\n { regex: /\\n/, token: \"newline\", merge: false },\n { regex: /}/, onMatch: function (val, state, stack) {\n var next = stack.shift();\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\" }\n ],\n formatStringVar: [\n { regex: /:\\/\\w+}/, onMatch: function (val, state, stack) {\n var ts = stack[0];\n ts.formatFunction = val.slice(2, -1);\n return [stack.shift()];\n }, next: \"formatString\" },\n formatMatcher,\n { regex: /:[\\?\\-+]?/, onMatch: function (val, state, stack) {\n if (val[1] == \"+\")\n stack[0].ifEnd = stack[0];\n if (val[1] == \"?\")\n stack[0].expectElse = true;\n }, next: \"formatString\" },\n { regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\" }\n ]\n });\n return SnippetManager[\"$tokenizer\"];\n };\n SnippetManager.prototype.tokenizeTmSnippet = function (str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n return x.value || x;\n });\n };\n SnippetManager.prototype.getVariableValue = function (editor, name, indentation) {\n if (/^\\d+$/.test(name))\n return (this.variables.__ || {})[name] || \"\";\n if (/^[A-Z]\\d+$/.test(name))\n return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n name = name.replace(/^TM_/, \"\");\n if (!this.variables.hasOwnProperty(name))\n return \"\";\n var value = this.variables[name];\n if (typeof value == \"function\")\n value = this.variables[name](editor, name, indentation);\n return value == null ? \"\" : value;\n };\n SnippetManager.prototype.tmStrFormat = function (str, ch, editor) {\n if (!ch.fmt)\n return str;\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n var _self = this;\n var formatted = str.replace(re, function () {\n var oldArgs = _self.variables.__;\n _self.variables.__ = [].slice.call(arguments);\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n }\n else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n }\n else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n }\n else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n _self.variables.__ = oldArgs;\n return fmtParts.join(\"\");\n });\n return formatted;\n };\n SnippetManager.prototype.tmFormatFunction = function (str, ch, editor) {\n if (ch.formatFunction == \"upcase\")\n return str.toUpperCase();\n if (ch.formatFunction == \"downcase\")\n return str.toLowerCase();\n return str;\n };\n SnippetManager.prototype.resolveVariables = function (snippet, editor) {\n var result = [];\n var indentation = \"\";\n var afterNewLine = true;\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n if (ch == \"\\n\") {\n afterNewLine = true;\n indentation = \"\";\n }\n else if (afterNewLine) {\n indentation = /^\\t*/.exec(ch)[0];\n afterNewLine = /\\S/.test(ch);\n }\n continue;\n }\n if (!ch)\n continue;\n afterNewLine = false;\n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1)\n j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\n }\n if (ch.text) {\n var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n if (ch.fmtString)\n value = this.tmStrFormat(value, ch, editor);\n if (ch.formatFunction)\n value = this.tmFormatFunction(value, ch, editor);\n if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n }\n else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n }\n else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n }\n else if (ch.tabstopId != null) {\n result.push(ch);\n }\n else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n SnippetManager.prototype.getDisplayTextForSnippet = function (editor, snippetText) {\n var processedSnippet = processSnippetText.call(this, editor, snippetText);\n return processedSnippet.text;\n };\n SnippetManager.prototype.insertSnippetForSelection = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var processedSnippet = processSnippetText.call(this, editor, snippetText, options);\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, processedSnippet.text);\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(processedSnippet.tabstops, range.start, end, selectionId);\n };\n SnippetManager.prototype.insertSnippet = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText, options);\n editor.forEachSelection(function () {\n self.insertSnippetForSelection(editor, snippetText, options);\n }, null, { keepOrder: true });\n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n SnippetManager.prototype.$getScope = function (editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp)\n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n return scope;\n };\n SnippetManager.prototype.getActiveScopes = function (editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n SnippetManager.prototype.expandWithTab = function (editor, options) {\n var self = this;\n var result = editor.forEachSelection(function () {\n return self.expandSnippetForSelection(editor, options);\n }, null, { keepOrder: true });\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n SnippetManager.prototype.expandSnippetForSelection = function (editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n SnippetManager.prototype.findMatchingSnippet = function (snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n SnippetManager.prototype.register = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n if (!snippets)\n snippets = [];\n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n }\n else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n if (s.prefix)\n s.tabTrigger = s.prefix;\n if (!s.content && s.body)\n s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n }\n else {\n Object.keys(snippets).forEach(function (key) {\n addSnippet(snippets[key]);\n });\n }\n this._signal(\"registerSnippets\", { scope: scope });\n };\n SnippetManager.prototype.unregister = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope || scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope || scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n SnippetManager.prototype.parseSnippetFile = function (str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], /**@type{Snippet}*/ snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n }\n catch (e) { }\n }\n if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n }\n else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n }\n else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n }\n else if (key) {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n SnippetManager.prototype.getSnippetByName = function (name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n return SnippetManager;\n}());\noop.implement(SnippetManager.prototype, EventEmitter);\nvar processSnippetText = function (editor, snippetText, options) {\n if (options === void 0) { options = {}; }\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function (x) {\n if (x == \"\\n\" && !options.excludeExtraIndent)\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function (p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n ts.parents = {};\n }\n if (ts.indexOf(p) !== -1)\n return;\n if (p.choices && !ts.choices)\n ts.choices = p.choices;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function (t) { return typeof t === \"object\"; });\n if (isNested && !ts.value) {\n ts.value = value;\n }\n else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function (ts) { ts.length = 0; });\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || { tabstopId: p.tabstopId };\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var ts = tabstops[id];\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p) {\n delete expanding[id];\n Object.keys(expanding).forEach(function (parentId) {\n ts.parents[parentId] = true;\n });\n }\n continue;\n }\n expanding[id] = p;\n var value = ts.value;\n if (typeof value !== \"string\")\n value = copyValue(value);\n else if (p.fmt)\n value = this.tmStrFormat(value, p, editor);\n tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function (t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1) {\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n }\n else\n column += t.length;\n text += t;\n }\n else if (t) {\n if (!t.start)\n t.start = { row: row, column: column };\n else\n t.end = { row: row, column: column };\n }\n });\n return {\n text: text,\n tabstops: tabstops,\n tokens: tokens\n };\n};\nvar TabstopManager = /** @class */ (function () {\n function TabstopManager(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n }\n TabstopManager.prototype.attach = function (editor) {\n this.$openTabstops = null;\n this.selectedTabstop = null;\n this.editor = editor;\n this.session = editor.session;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n TabstopManager.prototype.detach = function () {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges.length = 0;\n this.tabstops.length = 0;\n this.selectedTabstop = null;\n this.editor.off(\"change\", this.$onChange);\n this.editor.off(\"changeSelection\", this.$onChangeSelection);\n this.editor.off(\"changeSession\", this.$onChangeSession);\n this.editor.commands.off(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.session = null;\n this.editor = null;\n };\n TabstopManager.prototype.onChange = function (delta) {\n var isRemove = delta.action[0] == \"r\";\n var selectedTabstop = this.selectedTabstop || {};\n var parents = selectedTabstop.parents || {};\n var tabstops = this.tabstops.slice();\n for (var i = 0; i < tabstops.length; i++) {\n var ts = tabstops[i];\n var active = ts == selectedTabstop || parents[ts.index];\n ts.rangeList.$bias = active ? 0 : 1;\n if (delta.action == \"remove\" && ts !== selectedTabstop) {\n var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n for (var j = 0; j < toRemove.length; j++)\n this.removeRange(toRemove[j]);\n }\n ts.rangeList.$onChange(delta);\n }\n var session = this.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n this.detach();\n };\n TabstopManager.prototype.updateLinkedFields = function () {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n return;\n this.$inChange = true;\n var session = this.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = 0; i < ts.length; i++) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var original = range.original;\n var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n TabstopManager.prototype.onAfterExec = function (e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n TabstopManager.prototype.onChangeSelection = function () {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = 0; i < this.ranges.length; i++) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n TabstopManager.prototype.onChangeSession = function () {\n this.detach();\n };\n TabstopManager.prototype.tabNext = function (dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n this.updateTabstopMarkers();\n if (index === 0) {\n this.detach();\n }\n };\n TabstopManager.prototype.selectTabstop = function (index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (ts.choices)\n range.cursor = range.start;\n if (!this.editor.inVirtualSelectionMode) {\n var sel = this.editor.multiSelect;\n sel.toSingleRange(range);\n for (var i = 0; i < ts.length; i++) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n }\n else {\n this.editor.selection.fromOrientedRange(range);\n }\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n if (this.selectedTabstop && this.selectedTabstop.choices)\n this.editor.execCommand(\"startAutocomplete\", { matches: this.selectedTabstop.choices });\n };\n TabstopManager.prototype.addTabstops = function (tabstops, start, end) {\n var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n var snippetId = this.snippetId = (this.snippetId || 0) + 1;\n tabstops.forEach(function (ts, index) {\n var dest = this.$openTabstops[index] || ts;\n dest.snippetId = snippetId;\n for (var i = 0; i < ts.length; i++) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString || (dest.firstNonLinked && useLink)) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n }\n else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n dest.rangeList = dest.rangeList || new RangeList();\n dest.rangeList.$bias = 0;\n dest.rangeList.addList(dest);\n }, this);\n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n TabstopManager.prototype.addTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n TabstopManager.prototype.removeTabstopMarkers = function (ts) {\n var session = this.session;\n ts.forEach(function (range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n TabstopManager.prototype.updateTabstopMarkers = function () {\n if (!this.selectedTabstop)\n return;\n var currentSnippetId = this.selectedTabstop.snippetId;\n if (this.selectedTabstop.index === 0) {\n currentSnippetId--;\n }\n this.tabstops.forEach(function (ts) {\n if (ts.snippetId === currentSnippetId)\n this.addTabstopMarkers(ts);\n else\n this.removeTabstopMarkers(ts);\n }, this);\n };\n TabstopManager.prototype.removeRange = function (range) {\n var i = range.tabstop.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1)\n this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1)\n range.tabstop.splice(i, 1);\n this.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n return TabstopManager;\n}());\nTabstopManager.prototype.keyboardHandler = new HashHandler();\nTabstopManager.prototype.keyboardHandler.bindKeys({\n \"Tab\": function (editor) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n return;\n editor.tabstopManager.tabNext(1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Shift-Tab\": function (editor) {\n editor.tabstopManager.tabNext(-1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Esc\": function (editor) {\n editor.tabstopManager.detach();\n }\n});\nvar movePoint = function (point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\nvar moveRelative = function (point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\ndom.importCssString(\"\\n.ace_snippet-marker {\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n background: rgba(194, 193, 208, 0.09);\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\n position: absolute;\\n}\", \"snippets.css\", false);\nexports.snippetManager = new SnippetManager();\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.insertSnippet = function (content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function (options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\nvar nls = require(\"../config\").nls;\nvar userAgent = require(\"./../lib/useragent\");\nvar getAriaId = function (index) {\n return \"suggest-aria-id:\".concat(index);\n};\nvar popupAriaRole = userAgent.isSafari ? \"menu\" : \"listbox\";\nvar optionAriaRole = userAgent.isSafari ? \"menuitem\" : \"option\";\nvar ariaActiveState = userAgent.isSafari ? \"aria-current\" : \"aria-selected\";\nvar $singleLineEditor = function (el) {\n var renderer = new Renderer(el);\n renderer.$maxLines = 4;\n var editor = new Editor(renderer);\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n editor.$mouseHandler.$focusTimeout = 0;\n editor.$highlightTagPending = true;\n return editor;\n};\nvar AcePopup = /** @class */ (function () {\n function AcePopup(parentNode) {\n var el = dom.createElement(\"div\");\n var popup = $singleLineEditor(el);\n if (parentNode) {\n parentNode.appendChild(el);\n }\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n popup.renderer.$textLayer.element.setAttribute(\"role\", popupAriaRole);\n popup.renderer.$textLayer.element.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.aria-roledescription\", \"Autocomplete suggestions\"));\n popup.renderer.$textLayer.element.setAttribute(\"aria-label\", nls(\"autocomplete.popup.aria-label\", \"Autocomplete suggestions\"));\n popup.renderer.textarea.setAttribute(\"aria-hidden\", \"true\");\n popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n var noop = function () { };\n popup.focus = noop;\n popup.$isFocused = true;\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = \"0\";\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n popup.on(\"mousedown\", function (e) {\n var pos = e.getDocumentPosition();\n popup.selection.moveToPosition(pos);\n selectionMarker.start.row = selectionMarker.end.row = pos.row;\n e.stop();\n });\n var lastMouseEvent;\n var hoverMarker = new Range(-1, 0, -1, Infinity);\n var selectionMarker = new Range(-1, 0, -1, Infinity);\n selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n popup.setSelectOnHover = function (val) {\n if (!val) {\n hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n }\n else if (hoverMarker.id) {\n popup.session.removeMarker(hoverMarker.id);\n hoverMarker.id = null;\n }\n };\n popup.setSelectOnHover(false);\n popup.on(\"mousemove\", function (e) {\n if (!lastMouseEvent) {\n lastMouseEvent = e;\n return;\n }\n if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n return;\n }\n lastMouseEvent = e;\n lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n popup.isMouseOver = true;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (hoverMarker.start.row != row) {\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row);\n }\n });\n popup.renderer.on(\"beforeRender\", function () {\n if (lastMouseEvent && hoverMarker.start.row != -1) {\n lastMouseEvent.$pos = null;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row, true);\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var t = popup.renderer.$textLayer;\n for (var row = t.config.firstRow, l = t.config.lastRow; row <= l; row++) {\n var popupRowElement = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n popupRowElement.setAttribute(\"role\", optionAriaRole);\n popupRowElement.setAttribute(\"aria-roledescription\", nls(\"autocomplete.popup.item.aria-roledescription\", \"item\"));\n popupRowElement.setAttribute(\"aria-setsize\", popup.data.length);\n popupRowElement.setAttribute(\"aria-describedby\", \"doc-tooltip\");\n popupRowElement.setAttribute(\"aria-posinset\", row + 1);\n var rowData = popup.getData(row);\n if (rowData) {\n var ariaLabel = \"\".concat(rowData.caption || rowData.value).concat(rowData.meta ? \", \".concat(rowData.meta) : '');\n popupRowElement.setAttribute(\"aria-label\", ariaLabel);\n }\n var highlightedSpans = popupRowElement.querySelectorAll(\".ace_completion-highlight\");\n highlightedSpans.forEach(function (span) {\n span.setAttribute(\"role\", \"mark\");\n });\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var row = popup.getRow();\n var t = popup.renderer.$textLayer;\n var selected = /** @type {HTMLElement|null} */ (t.element.childNodes[row - t.config.firstRow]);\n var el = document.activeElement; // Active element is textarea of main editor\n if (selected !== popup.selectedNode && popup.selectedNode) {\n dom.removeCssClass(popup.selectedNode, \"ace_selected\");\n popup.selectedNode.removeAttribute(ariaActiveState);\n popup.selectedNode.removeAttribute(\"id\");\n }\n el.removeAttribute(\"aria-activedescendant\");\n popup.selectedNode = selected;\n if (selected) {\n var ariaId = getAriaId(row);\n dom.addCssClass(selected, \"ace_selected\");\n selected.id = ariaId;\n t.element.setAttribute(\"aria-activedescendant\", ariaId);\n el.setAttribute(\"aria-activedescendant\", ariaId);\n selected.setAttribute(ariaActiveState, \"true\");\n }\n });\n var hideHoverMarker = function () { setHoverMarker(-1); };\n var setHoverMarker = function (row, suppressRedraw) {\n if (row !== hoverMarker.start.row) {\n hoverMarker.start.row = hoverMarker.end.row = row;\n if (!suppressRedraw)\n popup.session._emit(\"changeBackMarker\");\n popup._emit(\"changeHoverMarker\");\n }\n };\n popup.getHoveredRow = function () {\n return hoverMarker.start.row;\n };\n event.addListener(popup.container, \"mouseout\", function () {\n popup.isMouseOver = false;\n hideHoverMarker();\n });\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\n popup.session.doc.getLength = function () {\n return popup.data.length;\n };\n popup.session.doc.getLine = function (i) {\n var data = popup.data[i];\n if (typeof data == \"string\")\n return data;\n return (data && data.value) || \"\";\n };\n var bgTokenizer = popup.session.bgTokenizer;\n bgTokenizer.$tokenizeRow = function (row) {\n var data = popup.data[row];\n var tokens = [];\n if (!data)\n return tokens;\n if (typeof data == \"string\")\n data = { value: data };\n var caption = data.caption || data.value || data.name;\n function addToken(value, className) {\n value && tokens.push({\n type: (data.className || \"\") + (className || \"\"),\n value: value\n });\n }\n var lower = caption.toLowerCase();\n var filterText = (popup.filterText || \"\").toLowerCase();\n var lastIndex = 0;\n var lastI = 0;\n for (var i = 0; i <= filterText.length; i++) {\n if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n var sub = filterText.slice(lastI, i);\n lastI = i;\n var index = lower.indexOf(sub, lastIndex);\n if (index == -1)\n continue;\n addToken(caption.slice(lastIndex, index), \"\");\n lastIndex = index + sub.length;\n addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n }\n }\n addToken(caption.slice(lastIndex, caption.length), \"\");\n tokens.push({ type: \"completion-spacer\", value: \" \" });\n if (data.meta)\n tokens.push({ type: \"completion-meta\", value: data.meta });\n if (data.message)\n tokens.push({ type: \"completion-message\", value: data.message });\n return tokens;\n };\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\n popup.session.$computeWidth = function () {\n return this.screenWidth = 0;\n };\n popup.isOpen = false;\n popup.isTopdown = false;\n popup.autoSelect = true;\n popup.filterText = \"\";\n popup.isMouseOver = false;\n popup.data = [];\n popup.setData = function (list, filterText) {\n popup.filterText = filterText || \"\";\n popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n popup.data = list || [];\n popup.setRow(0);\n };\n popup.getData = function (row) {\n return popup.data[row];\n };\n popup.getRow = function () {\n return selectionMarker.start.row;\n };\n popup.setRow = function (line) {\n line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, line));\n if (selectionMarker.start.row != line) {\n popup.selection.clearSelection();\n selectionMarker.start.row = selectionMarker.end.row = line || 0;\n popup.session._emit(\"changeBackMarker\");\n popup.moveCursorTo(line || 0, 0);\n if (popup.isOpen)\n popup._signal(\"select\");\n }\n };\n popup.on(\"changeSelection\", function () {\n if (popup.isOpen)\n popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\n });\n popup.hide = function () {\n this.container.style.display = \"none\";\n popup.anchorPos = null;\n popup.anchor = null;\n if (popup.isOpen) {\n popup.isOpen = false;\n this._signal(\"hide\");\n }\n };\n popup.tryShow = function (pos, lineHeight, anchor, forceShow) {\n if (!forceShow && popup.isOpen && popup.anchorPos && popup.anchor &&\n popup.anchorPos.top === pos.top && popup.anchorPos.left === pos.left &&\n popup.anchor === anchor) {\n return true;\n }\n var el = this.container;\n var scrollBarSize = this.renderer.scrollBar.width || 10;\n var screenHeight = window.innerHeight - scrollBarSize;\n var screenWidth = window.innerWidth - scrollBarSize;\n var renderer = this.renderer;\n var maxH = renderer.$maxLines * lineHeight * 1.4;\n var dims = { top: 0, bottom: 0, left: 0 };\n var spaceBelow = screenHeight - pos.top - 3 * this.$borderSize - lineHeight;\n var spaceAbove = pos.top - 3 * this.$borderSize;\n if (!anchor) {\n if (spaceAbove <= spaceBelow || spaceBelow >= maxH) {\n anchor = \"bottom\";\n }\n else {\n anchor = \"top\";\n }\n }\n if (anchor === \"top\") {\n dims.bottom = pos.top - this.$borderSize;\n dims.top = dims.bottom - maxH;\n }\n else if (anchor === \"bottom\") {\n dims.top = pos.top + lineHeight + this.$borderSize;\n dims.bottom = dims.top + maxH;\n }\n var fitsX = dims.top >= 0 && dims.bottom <= screenHeight;\n if (!forceShow && !fitsX) {\n return false;\n }\n if (!fitsX) {\n if (anchor === \"top\") {\n renderer.$maxPixelHeight = spaceAbove;\n }\n else {\n renderer.$maxPixelHeight = spaceBelow;\n }\n }\n else {\n renderer.$maxPixelHeight = null;\n }\n if (anchor === \"top\") {\n el.style.top = \"\";\n el.style.bottom = (screenHeight + scrollBarSize - dims.bottom) + \"px\";\n popup.isTopdown = false;\n }\n else {\n el.style.top = dims.top + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n el.style.display = \"\";\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n el.style.left = left + \"px\";\n el.style.right = \"\";\n if (!popup.isOpen) {\n popup.isOpen = true;\n this._signal(\"show\");\n lastMouseEvent = null;\n }\n popup.anchorPos = pos;\n popup.anchor = anchor;\n return true;\n };\n popup.show = function (pos, lineHeight, topdownOnly) {\n this.tryShow(pos, lineHeight, topdownOnly ? \"bottom\" : undefined, true);\n };\n popup.goTo = function (where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n switch (where) {\n case \"up\":\n row = row <= 0 ? max : row - 1;\n break;\n case \"down\":\n row = row >= max ? -1 : row + 1;\n break;\n case \"start\":\n row = 0;\n break;\n case \"end\":\n row = max;\n break;\n }\n this.setRow(row);\n };\n popup.getTextLeftOffset = function () {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n return popup;\n }\n return AcePopup;\n}());\ndom.importCssString(\"\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #CAD6FA;\\n z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid #abbffe;\\n margin-top: -1px;\\n background: rgba(233,233,253,0.4);\\n position: absolute;\\n z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid rgba(109, 150, 13, 0.8);\\n background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n opacity: 0.5;\\n margin-left: 0.9em;\\n}\\n.ace_completion-message {\\n margin-left: 0.9em;\\n color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n width: 300px;\\n z-index: 200000;\\n border: 1px lightgray solid;\\n position: fixed;\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n line-height: 1.4;\\n background: #fefefe;\\n color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n border: 1px #484747 solid;\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n line-height: 1.4;\\n background: #25282c;\\n color: #c1c1c1;\\n}\\n.ace_autocomplete .ace_text-layer {\\n width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n display: flex;\\n align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n min-width: 0;\\n flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n flex: 0 1 auto;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0px;\\n height: 2px;\\n width: 8%;\\n background: blue;\\n z-index: 100;\\n animation: ace_progress 3s infinite linear;\\n animation-delay: 300ms;\\n transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n 0% { transform: translateX(-100%) scaleX(1) }\\n 50% { transform: translateX(625%) scaleX(2) } \\n 100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n .ace_autocomplete.ace_loading:after {\\n transform: translateX(625%) scaleX(2);\\n animation: none;\\n }\\n}\\n\", \"autocompletion.css\", false);\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\nexports.getAriaId = getAriaId;\n\n});\n\nace.define(\"ace/autocomplete/inline_screenreader\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar AceInlineScreenReader = /** @class */ (function () {\n function AceInlineScreenReader(editor) {\n this.editor = editor;\n this.screenReaderDiv = document.createElement(\"div\");\n this.screenReaderDiv.classList.add(\"ace_screenreader-only\");\n this.editor.container.appendChild(this.screenReaderDiv);\n }\n AceInlineScreenReader.prototype.setScreenReaderContent = function (content) {\n if (!this.popup && this.editor.completer && /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup) {\n this.popup = /**@type{import(\"../autocomplete\").Autocomplete}*/ (this.editor.completer).popup;\n this.popup.renderer.on(\"afterRender\", function () {\n var row = this.popup.getRow();\n var t = this.popup.renderer.$textLayer;\n var selected = t.element.childNodes[row - t.config.firstRow];\n if (selected) {\n var idString = \"doc-tooltip \";\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n idString += \"ace-inline-screenreader-line-\".concat(lineIndex, \" \");\n }\n selected.setAttribute(\"aria-describedby\", idString);\n }\n }.bind(this));\n }\n while (this.screenReaderDiv.firstChild) {\n this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);\n }\n this._lines = content.split(/\\r\\n|\\r|\\n/);\n var codeElement = this.createCodeBlock();\n this.screenReaderDiv.appendChild(codeElement);\n };\n AceInlineScreenReader.prototype.destroy = function () {\n this.screenReaderDiv.remove();\n };\n AceInlineScreenReader.prototype.createCodeBlock = function () {\n var container = document.createElement(\"pre\");\n container.setAttribute(\"id\", \"ace-inline-screenreader\");\n for (var lineIndex = 0; lineIndex < this._lines.length; lineIndex++) {\n var codeElement = document.createElement(\"code\");\n codeElement.setAttribute(\"id\", \"ace-inline-screenreader-line-\".concat(lineIndex));\n var line = document.createTextNode(this._lines[lineIndex]);\n codeElement.appendChild(line);\n container.appendChild(codeElement);\n }\n return container;\n };\n return AceInlineScreenReader;\n}());\nexports.AceInlineScreenReader = AceInlineScreenReader;\n\n});\n\nace.define(\"ace/autocomplete/inline\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete/inline_screenreader\"], function(require, exports, module){\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar AceInlineScreenReader = require(\"./inline_screenreader\").AceInlineScreenReader;\nvar AceInline = /** @class */ (function () {\n function AceInline() {\n this.editor = null;\n }\n AceInline.prototype.show = function (editor, completion, prefix) {\n prefix = prefix || \"\";\n if (editor && this.editor && this.editor !== editor) {\n this.hide();\n this.editor = null;\n this.inlineScreenReader = null;\n }\n if (!editor || !completion) {\n return false;\n }\n if (!this.inlineScreenReader) {\n this.inlineScreenReader = new AceInlineScreenReader(editor);\n }\n var displayText = completion.snippet ? snippetManager.getDisplayTextForSnippet(editor, completion.snippet) : completion.value;\n if (completion.hideInlinePreview || !displayText || !displayText.startsWith(prefix)) {\n return false;\n }\n this.editor = editor;\n this.inlineScreenReader.setScreenReaderContent(displayText);\n displayText = displayText.slice(prefix.length);\n if (displayText === \"\") {\n editor.removeGhostText();\n }\n else {\n editor.setGhostText(displayText);\n }\n return true;\n };\n AceInline.prototype.isOpen = function () {\n if (!this.editor) {\n return false;\n }\n return !!this.editor.renderer.$ghostText;\n };\n AceInline.prototype.hide = function () {\n if (!this.editor) {\n return false;\n }\n this.editor.removeGhostText();\n return true;\n };\n AceInline.prototype.destroy = function () {\n this.hide();\n this.editor = null;\n if (this.inlineScreenReader) {\n this.inlineScreenReader.destroy();\n this.inlineScreenReader = null;\n }\n };\n return AceInline;\n}());\nexports.AceInline = AceInline;\n\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.parForEach = function (array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0)\n callback();\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function (result, err) {\n completed++;\n if (completed === arLength)\n callback(result, err);\n });\n }\n};\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\nexports.retrievePrecedingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos - 1; i >= 0; i--) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf.reverse().join(\"\");\n};\nexports.retrieveFollowingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf;\n};\nexports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function (completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function (identifierRegex) {\n if (!prefix && identifierRegex)\n prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\nexports.triggerAutocomplete = function (editor, previousChar) {\n var previousChar = previousChar == null\n ? editor.session.getPrecedingCharacter()\n : previousChar;\n return editor.completers.some(function (completer) {\n if (completer.triggerCharacters && Array.isArray(completer.triggerCharacters)) {\n return completer.triggerCharacters.includes(previousChar);\n }\n });\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/inline\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\",\"ace/lib/event\",\"ace/lib/scroll\"], function(require, exports, module){\"use strict\";\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar AceInline = require(\"./autocomplete/inline\").AceInline;\nvar getAriaId = require(\"./autocomplete/popup\").getAriaId;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\nvar event = require(\"./lib/event\");\nvar preventParentScroll = require(\"./lib/scroll\").preventParentScroll;\nvar destroyCompleter = function (e, editor) {\n editor.completer && editor.completer.destroy();\n};\nvar Autocomplete = /** @class */ (function () {\n function Autocomplete() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.autoShown = false;\n this.exactMatch = false;\n this.inlineEnabled = false;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n this.parentNode = null;\n this.setSelectOnHover = false;\n this.hasSeen = new Set();\n this.showLoadingState = false;\n this.stickySelectionDelay = 500;\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n this.onLayoutChange = this.onLayoutChange.bind(this);\n this.changeTimer = lang.delayedCall(function () {\n this.updateCompletions(true);\n }.bind(this));\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n this.popupTimer = lang.delayedCall(this.$updatePopupPosition.bind(this), 50);\n this.stickySelectionTimer = lang.delayedCall(function () {\n this.stickySelection = true;\n }.bind(this), this.stickySelectionDelay);\n this.$firstOpenTimer = lang.delayedCall(/**@this{Autocomplete}*/ function () {\n var initialPosition = this.completionProvider && this.completionProvider.initialPosition;\n if (this.autoShown || (this.popup && this.popup.isOpen) || !initialPosition || this.editor.completers.length === 0)\n return;\n this.completions = new FilteredList(Autocomplete.completionsForLoading);\n this.openPopup(this.editor, initialPosition.prefix, false);\n this.popup.renderer.setStyle(\"ace_loading\", true);\n }.bind(this), this.stickySelectionDelay);\n }\n Object.defineProperty(Autocomplete, \"completionsForLoading\", {\n get: function () {\n return [{\n caption: config.nls(\"autocomplete.loading\", \"Loading...\"),\n value: \"\"\n }];\n },\n enumerable: false,\n configurable: true\n });\n Autocomplete.prototype.$init = function () {\n this.popup = new AcePopup(this.parentNode || document.body || document.documentElement);\n this.popup.on(\"click\", function (e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.$onPopupShow.bind(this));\n this.popup.on(\"hide\", this.$onHidePopup.bind(this));\n this.popup.on(\"select\", this.$onPopupChange.bind(this));\n event.addListener(this.popup.container, \"mouseout\", this.mouseOutListener.bind(this));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n this.popup.renderer.on(\"afterRender\", this.$onPopupRender.bind(this));\n return this.popup;\n };\n Autocomplete.prototype.$initInline = function () {\n if (!this.inlineEnabled || this.inlineRenderer)\n return;\n this.inlineRenderer = new AceInline();\n return this.inlineRenderer;\n };\n Autocomplete.prototype.getPopup = function () {\n return this.popup || this.$init();\n };\n Autocomplete.prototype.$onHidePopup = function () {\n if (this.inlineRenderer) {\n this.inlineRenderer.hide();\n }\n this.hideDocTooltip();\n this.stickySelectionTimer.cancel();\n this.popupTimer.cancel();\n this.stickySelection = false;\n };\n Autocomplete.prototype.$seen = function (completion) {\n if (!this.hasSeen.has(completion) && completion && completion.completer && completion.completer.onSeen && typeof completion.completer.onSeen === \"function\") {\n completion.completer.onSeen(this.editor, completion);\n this.hasSeen.add(completion);\n }\n };\n Autocomplete.prototype.$onPopupChange = function (hide) {\n if (this.inlineRenderer && this.inlineEnabled) {\n var completion = hide ? null : this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n if (this.popup.isMouseOver && this.setSelectOnHover) {\n this.tooltipTimer.call(null, null);\n return;\n }\n this.popupTimer.schedule();\n this.tooltipTimer.schedule();\n }\n else {\n this.popupTimer.call(null, null);\n this.tooltipTimer.call(null, null);\n }\n };\n Autocomplete.prototype.$updateGhostText = function (completion) {\n var row = this.base.row;\n var column = this.base.column;\n var cursorColumn = this.editor.getCursorPosition().column;\n var prefix = this.editor.session.getLine(row).slice(column, cursorColumn);\n if (!this.inlineRenderer.show(this.editor, completion, prefix)) {\n this.inlineRenderer.hide();\n }\n else {\n this.$seen(completion);\n }\n };\n Autocomplete.prototype.$onPopupRender = function () {\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (this.completions && this.completions.filtered && this.completions.filtered.length > 0) {\n for (var i = this.popup.getFirstVisibleRow(); i <= this.popup.getLastVisibleRow(); i++) {\n var completion = this.popup.getData(i);\n if (completion && (!inlineEnabled || completion.hideInlinePreview)) {\n this.$seen(completion);\n }\n }\n }\n };\n Autocomplete.prototype.$onPopupShow = function (hide) {\n this.$onPopupChange(hide);\n this.stickySelection = false;\n if (this.stickySelectionDelay >= 0)\n this.stickySelectionTimer.schedule(this.stickySelectionDelay);\n };\n Autocomplete.prototype.observeLayoutChanges = function () {\n if (this.$elements || !this.editor)\n return;\n window.addEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.addEventListener(\"wheel\", this.mousewheelListener);\n var el = this.editor.container.parentNode;\n var elements = [];\n while (el) {\n elements.push(el);\n el.addEventListener(\"scroll\", this.onLayoutChange, { passive: true });\n el = el.parentNode;\n }\n this.$elements = elements;\n };\n Autocomplete.prototype.unObserveLayoutChanges = function () {\n var _this = this;\n window.removeEventListener(\"resize\", this.onLayoutChange, { passive: true });\n window.removeEventListener(\"wheel\", this.mousewheelListener);\n this.$elements && this.$elements.forEach(function (el) {\n el.removeEventListener(\"scroll\", _this.onLayoutChange, { passive: true });\n });\n this.$elements = null;\n };\n Autocomplete.prototype.onLayoutChange = function () {\n if (!this.popup.isOpen)\n return this.unObserveLayoutChanges();\n this.$updatePopupPosition();\n this.updateDocTooltip();\n };\n Autocomplete.prototype.$updatePopupPosition = function () {\n var editor = this.editor;\n var renderer = editor.renderer;\n var lineHeight = renderer.layerConfig.lineHeight;\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n var posGhostText = {\n top: pos.top,\n left: pos.left\n };\n if (renderer.$ghostText && renderer.$ghostTextWidget) {\n if (this.base.row === renderer.$ghostText.position.row) {\n posGhostText.top += renderer.$ghostTextWidget.el.offsetHeight;\n }\n }\n var editorContainerBottom = editor.container.getBoundingClientRect().bottom - lineHeight;\n var lowestPosition = editorContainerBottom < posGhostText.top ?\n { top: editorContainerBottom, left: posGhostText.left } :\n posGhostText;\n if (this.popup.tryShow(lowestPosition, lineHeight, \"bottom\")) {\n return;\n }\n if (this.popup.tryShow(pos, lineHeight, \"top\")) {\n return;\n }\n this.popup.show(pos, lineHeight);\n };\n Autocomplete.prototype.openPopup = function (editor, prefix, keepPopupPosition) {\n this.$firstOpenTimer.cancel();\n if (!this.popup)\n this.$init();\n if (this.inlineEnabled && !this.inlineRenderer)\n this.$initInline();\n this.popup.autoSelect = this.autoSelect;\n this.popup.setSelectOnHover(this.setSelectOnHover);\n var oldRow = this.popup.getRow();\n var previousSelectedItem = this.popup.data[oldRow];\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n if (this.editor.textInput.setAriaOptions) {\n this.editor.textInput.setAriaOptions({\n activeDescendant: getAriaId(this.popup.getRow()),\n inline: this.inlineEnabled\n });\n }\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n var newRow;\n if (this.stickySelection)\n newRow = this.popup.data.indexOf(previousSelectedItem);\n if (!newRow || newRow === -1)\n newRow = 0;\n this.popup.setRow(this.autoSelect ? newRow : -1);\n if (newRow === oldRow && previousSelectedItem !== this.completions.filtered[newRow])\n this.$onPopupChange();\n var inlineEnabled = this.inlineRenderer && this.inlineEnabled;\n if (newRow === oldRow && inlineEnabled) {\n var completion = this.popup.getData(this.popup.getRow());\n this.$updateGhostText(completion);\n }\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n this.$updatePopupPosition();\n if (this.tooltipNode) {\n this.updateDocTooltip();\n }\n }\n this.changeTimer.cancel();\n this.observeLayoutChanges();\n };\n Autocomplete.prototype.detach = function () {\n if (this.editor) {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n }\n this.$firstOpenTimer.cancel();\n this.changeTimer.cancel();\n this.hideDocTooltip();\n if (this.completionProvider) {\n this.completionProvider.detach();\n }\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n if (this.popup && this.popup.renderer) {\n this.popup.renderer.off(\"afterRender\", this.$onPopupRender);\n }\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completionProvider = this.completions = this.base = null;\n this.unObserveLayoutChanges();\n };\n Autocomplete.prototype.changeListener = function (e) {\n var cursor = this.editor.selection.lead;\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n if (this.activated)\n this.changeTimer.schedule();\n else\n this.detach();\n };\n Autocomplete.prototype.blurListener = function (e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n if (el != text && el.parentNode != container && !fromTooltip\n && el != this.tooltipNode && e.relatedTarget != text) {\n this.detach();\n }\n };\n Autocomplete.prototype.mousedownListener = function (e) {\n this.detach();\n };\n Autocomplete.prototype.mousewheelListener = function (e) {\n if (this.popup && !this.popup.isMouseOver)\n this.detach();\n };\n Autocomplete.prototype.mouseOutListener = function (e) {\n if (this.popup.isOpen)\n this.$updatePopupPosition();\n };\n Autocomplete.prototype.goTo = function (where) {\n this.popup.goTo(where);\n };\n Autocomplete.prototype.insertMatch = function (data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n if (data.value === \"\") // Explicitly given nothing to insert, e.g. \"No suggestion state\"\n return this.detach();\n var completions = this.completions;\n var result = this.getCompletionProvider().insertMatch(this.editor, data, completions.filterText, options);\n if (this.completions == completions)\n this.detach();\n return result;\n };\n Autocomplete.prototype.showPopup = function (editor, options) {\n if (this.editor)\n this.detach();\n this.activated = true;\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\n }\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n this.updateCompletions(false, options);\n };\n Autocomplete.prototype.getCompletionProvider = function (initialPosition) {\n if (!this.completionProvider)\n this.completionProvider = new CompletionProvider(initialPosition);\n return this.completionProvider;\n };\n Autocomplete.prototype.gatherCompletions = function (editor, callback) {\n return this.getCompletionProvider().gatherCompletions(editor, callback);\n };\n Autocomplete.prototype.updateCompletions = function (keepPopupPosition, options) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({ start: this.base, end: pos });\n if (prefix == this.completions.filterText)\n return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length)\n return this.detach();\n if (this.completions.filtered.length == 1\n && this.completions.filtered[0].value == prefix\n && !this.completions.filtered[0].snippet)\n return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n if (options && options.matches) {\n var pos = this.editor.getSelectionRange().start;\n this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n this.base.$insertRight = true;\n this.completions = new FilteredList(options.matches);\n this.getCompletionProvider().completions = this.completions;\n return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n var session = this.editor.getSession();\n var pos = this.editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(this.editor);\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n var completionOptions = {\n exactMatch: this.exactMatch,\n ignoreCaption: this.ignoreCaption\n };\n this.getCompletionProvider({\n prefix: prefix,\n pos: pos\n }).provideCompletions(this.editor, completionOptions, \n function (err, completions, finished) {\n var filtered = completions.filtered;\n var prefix = util.getCompletionPrefix(this.editor);\n this.$firstOpenTimer.cancel();\n if (finished) {\n if (!filtered.length) {\n var emptyMessage = !this.autoShown && this.emptyMessage;\n if (typeof emptyMessage == \"function\")\n emptyMessage = this.emptyMessage(prefix);\n if (emptyMessage) {\n var completionsForEmpty = [{\n caption: emptyMessage,\n value: \"\"\n }\n ];\n this.completions = new FilteredList(completionsForEmpty);\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_loading\", false);\n this.popup.renderer.setStyle(\"ace_empty-message\", true);\n return;\n }\n return this.detach();\n }\n if (filtered.length == 1 && filtered[0].value == prefix\n && !filtered[0].snippet)\n return this.detach();\n if (this.autoInsert && !this.autoShown && filtered.length == 1)\n return this.insertMatch(filtered[0]);\n }\n this.completions = !finished && this.showLoadingState ?\n new FilteredList(Autocomplete.completionsForLoading.concat(filtered), completions.filterText) :\n completions;\n this.openPopup(this.editor, prefix, keepPopupPosition);\n this.popup.renderer.setStyle(\"ace_empty-message\", false);\n this.popup.renderer.setStyle(\"ace_loading\", !finished);\n }.bind(this));\n if (this.showLoadingState && !this.autoShown && !(this.popup && this.popup.isOpen)) {\n this.$firstOpenTimer.delay(this.stickySelectionDelay / 2);\n }\n };\n Autocomplete.prototype.cancelContextMenu = function () {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n Autocomplete.prototype.updateDocTooltip = function () {\n var popup = this.popup;\n var all = this.completions && this.completions.filtered;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen)\n return this.hideDocTooltip();\n var completersLength = this.editor.completers.length;\n for (var i = 0; i < completersLength; i++) {\n var completer = this.editor.completers[i];\n if (completer.getDocTooltip && selected.completerId === completer.id) {\n doc = completer.getDocTooltip(selected);\n break;\n }\n }\n if (!doc && typeof selected != \"string\")\n doc = selected;\n if (typeof doc == \"string\")\n doc = { docText: doc };\n if (!doc || !(doc.docHTML || doc.docText))\n return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n Autocomplete.prototype.showDocTooltip = function (item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.style.margin = \"0\";\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.style.overscrollBehavior = \"contain\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n this.tooltipNode.id = \"doc-tooltip\";\n this.tooltipNode.setAttribute(\"role\", \"tooltip\");\n this.tooltipNode.addEventListener(\"wheel\", preventParentScroll);\n }\n var theme = this.editor.renderer.theme;\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip \" +\n (theme.isDark ? \"ace_dark \" : \"\") + (theme.cssClass || \"\");\n var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n }\n else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n if (!tooltipNode.parentNode)\n this.popup.container.appendChild(this.tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n var targetWidth = 400;\n var targetHeight = 300;\n var scrollBarSize = popup.renderer.scrollBar.width || 10;\n var leftSize = rect.left;\n var rightSize = window.innerWidth - rect.right - scrollBarSize;\n var topSize = popup.isTopdown ? rect.top : window.innerHeight - scrollBarSize - rect.bottom;\n var scores = [\n Math.min(rightSize / targetWidth, 1),\n Math.min(leftSize / targetWidth, 1),\n Math.min(topSize / targetHeight * 0.9),\n ];\n var max = Math.max.apply(Math, scores);\n var tooltipStyle = tooltipNode.style;\n tooltipStyle.display = \"block\";\n if (max == scores[0]) {\n tooltipStyle.left = (rect.right + 1) + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.maxWidth = targetWidth * max + \"px\";\n tooltipStyle.top = rect.top + \"px\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n }\n else if (max == scores[1]) {\n tooltipStyle.right = window.innerWidth - rect.left + \"px\";\n tooltipStyle.left = \"\";\n tooltipStyle.maxWidth = targetWidth * max + \"px\";\n tooltipStyle.top = rect.top + \"px\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.top, targetHeight) + \"px\";\n }\n else if (max == scores[2]) {\n tooltipStyle.left = window.innerWidth - rect.left + \"px\";\n tooltipStyle.maxWidth = Math.min(targetWidth, window.innerWidth) + \"px\";\n if (popup.isTopdown) {\n tooltipStyle.top = rect.bottom + \"px\";\n tooltipStyle.left = rect.left + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(window.innerHeight - scrollBarSize - rect.bottom, targetHeight) + \"px\";\n }\n else {\n tooltipStyle.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n tooltipStyle.left = rect.left + \"px\";\n tooltipStyle.right = \"\";\n tooltipStyle.bottom = \"\";\n tooltipStyle.maxHeight = Math.min(popup.container.offsetTop, targetHeight) + \"px\";\n }\n }\n };\n Autocomplete.prototype.hideDocTooltip = function () {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode)\n return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el)\n this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode)\n el.parentNode.removeChild(el);\n };\n Autocomplete.prototype.onTooltipClick = function (e) {\n var a = e.target;\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n a = a.parentNode;\n }\n };\n Autocomplete.prototype.destroy = function () {\n this.detach();\n if (this.popup) {\n this.popup.destroy();\n var el = this.popup.container;\n if (el && el.parentNode)\n el.parentNode.removeChild(el);\n }\n if (this.editor && this.editor.completer == this) {\n this.editor.off(\"destroy\", destroyCompleter);\n this.editor.completer = null;\n }\n this.inlineRenderer = this.popup = this.editor = null;\n };\n Autocomplete.for = function (editor) {\n if (editor.completer instanceof Autocomplete) {\n return editor.completer;\n }\n if (editor.completer) {\n editor.completer.destroy();\n editor.completer = null;\n }\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete[\"$sharedInstance\"])\n Autocomplete[\"$sharedInstance\"] = new Autocomplete();\n editor.completer = Autocomplete[\"$sharedInstance\"];\n }\n else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", destroyCompleter);\n }\n return editor.completer;\n };\n return Autocomplete;\n}());\nAutocomplete.prototype.commands = {\n \"Up\": function (editor) { editor.completer.goTo(\"up\"); },\n \"Down\": function (editor) { editor.completer.goTo(\"down\"); },\n \"Ctrl-Up|Ctrl-Home\": function (editor) { editor.completer.goTo(\"start\"); },\n \"Ctrl-Down|Ctrl-End\": function (editor) { editor.completer.goTo(\"end\"); },\n \"Esc\": function (editor) { editor.completer.detach(); },\n \"Return\": function (editor) { return editor.completer.insertMatch(); },\n \"Shift-Return\": function (editor) { editor.completer.insertMatch(null, { deleteSuffix: true }); },\n \"Tab\": function (editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager)\n editor.completer.goTo(\"down\");\n else\n return result;\n },\n \"Backspace\": function (editor) {\n editor.execCommand(\"backspace\");\n var prefix = util.getCompletionPrefix(editor);\n if (!prefix && editor.completer)\n editor.completer.detach();\n },\n \"PageUp\": function (editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function (editor) { editor.completer.popup.gotoPageDown(); }\n};\nAutocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function (editor, options) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.autoSelect = true;\n completer.autoShown = false;\n completer.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\nvar CompletionProvider = /** @class */ (function () {\n function CompletionProvider(initialPosition) {\n this.initialPosition = initialPosition;\n this.active = true;\n }\n CompletionProvider.prototype.insertByIndex = function (editor, index, options) {\n if (!this.completions || !this.completions.filtered) {\n return false;\n }\n return this.insertMatch(editor, this.completions.filtered[index], options);\n };\n CompletionProvider.prototype.insertMatch = function (editor, data, options) {\n if (!data)\n return false;\n editor.startOperation({ command: { name: \"insertMatch\" } });\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(editor, data);\n }\n else {\n if (!this.completions)\n return false;\n var replaceBefore = this.completions.filterText.length;\n var replaceAfter = 0;\n if (data.range && data.range.start.row === data.range.end.row) {\n replaceBefore -= this.initialPosition.prefix.length;\n replaceBefore += this.initialPosition.pos.column - data.range.start.column;\n replaceAfter += data.range.end.column - this.initialPosition.pos.column;\n }\n if (replaceBefore || replaceAfter) {\n var ranges;\n if (editor.selection.getAllRanges) {\n ranges = editor.selection.getAllRanges();\n }\n else {\n ranges = [editor.getSelectionRange()];\n }\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= replaceBefore;\n range.end.column += replaceAfter;\n editor.session.remove(range);\n }\n }\n if (data.snippet) {\n snippetManager.insertSnippet(editor, data.snippet);\n }\n else {\n this.$insertString(editor, data);\n }\n if (data.completer && data.completer.onInsert && typeof data.completer.onInsert == \"function\") {\n data.completer.onInsert(editor, data);\n }\n if (data.command && data.command === \"startAutocomplete\") {\n editor.execCommand(data.command);\n }\n }\n editor.endOperation();\n return true;\n };\n CompletionProvider.prototype.$insertString = function (editor, data) {\n var text = data.value || data;\n editor.execCommand(\"insertstring\", text);\n };\n CompletionProvider.prototype.gatherCompletions = function (editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(editor);\n var matches = [];\n this.completers = editor.completers;\n var total = editor.completers.length;\n editor.completers.forEach(function (completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function (err, results) {\n if (completer.hideInlinePreview)\n results = results.map(function (result) {\n return Object.assign(result, { hideInlinePreview: completer.hideInlinePreview });\n });\n if (!err && results)\n matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: (--total === 0)\n });\n });\n });\n return true;\n };\n CompletionProvider.prototype.provideCompletions = function (editor, options, callback) {\n var processResults = function (results) {\n var prefix = results.prefix;\n var matches = results.matches;\n this.completions = new FilteredList(matches);\n if (options.exactMatch)\n this.completions.exactMatch = true;\n if (options.ignoreCaption)\n this.completions.ignoreCaption = true;\n this.completions.setFilter(prefix);\n if (results.finished || this.completions.filtered.length)\n callback(null, this.completions, results.finished);\n }.bind(this);\n var isImmediate = true;\n var immediateResults = null;\n this.gatherCompletions(editor, function (err, results) {\n if (!this.active) {\n return;\n }\n if (err) {\n callback(err, [], true);\n this.detach();\n }\n var prefix = results.prefix;\n if (prefix.indexOf(results.prefix) !== 0)\n return;\n if (isImmediate) {\n immediateResults = results;\n return;\n }\n processResults(results);\n }.bind(this));\n isImmediate = false;\n if (immediateResults) {\n var results = immediateResults;\n immediateResults = null;\n processResults(results);\n }\n };\n CompletionProvider.prototype.detach = function () {\n this.active = false;\n this.completers && this.completers.forEach(function (completer) {\n if (typeof completer.cancel === \"function\") {\n completer.cancel();\n }\n });\n };\n return CompletionProvider;\n}());\nvar FilteredList = /** @class */ (function () {\n function FilteredList(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n this.ignoreCaption = false;\n }\n FilteredList.prototype.setFilter = function (str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n var matches = this.filtered;\n else\n var matches = this.all;\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function (a, b) {\n return b.exactMatch - a.exactMatch || b.$score - a.$score\n || (a.caption || a.value).localeCompare(b.caption || b.value);\n });\n var prev = null;\n matches = matches.filter(function (item) {\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev)\n return false;\n prev = caption;\n return true;\n });\n this.filtered = matches;\n };\n FilteredList.prototype.filterCompletions = function (items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n loop: for (var i = 0, item; item = items[i]; i++) {\n if (item.skipFilter) {\n item.$score = item.score;\n results.push(item);\n continue;\n }\n var caption = (!this.ignoreCaption && item.caption) || item.value || item.snippet;\n if (!caption)\n continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n }\n else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n }\n else {\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n if (index < 0)\n continue loop;\n distance = index - lastIndex - 1;\n if (distance > 0) {\n if (lastIndex === -1)\n penalty += 10;\n penalty += distance;\n matchMask = matchMask | (1 << j);\n }\n lastIndex = index;\n }\n }\n }\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.$score = (item.score || 0) - penalty;\n results.push(item);\n }\n return results;\n };\n return FilteredList;\n}());\nexports.Autocomplete = Autocomplete;\nexports.CompletionProvider = CompletionProvider;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/marker_group\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar MarkerGroup = /** @class */ (function () {\n function MarkerGroup(session, options) {\n if (options)\n this.markerType = options.markerType;\n this.markers = [];\n this.session = session;\n session.addDynamicMarker(this);\n }\n MarkerGroup.prototype.getMarkerAtPosition = function (pos) {\n return this.markers.find(function (marker) {\n return marker.range.contains(pos.row, pos.column);\n });\n };\n MarkerGroup.prototype.markersComparator = function (a, b) {\n return a.range.start.row - b.range.start.row;\n };\n MarkerGroup.prototype.setMarkers = function (markers) {\n this.markers = markers.sort(this.markersComparator).slice(0, this.MAX_MARKERS);\n this.session._signal(\"changeBackMarker\");\n };\n MarkerGroup.prototype.update = function (html, markerLayer, session, config) {\n if (!this.markers || !this.markers.length)\n return;\n var visibleRangeStartRow = config.firstRow, visibleRangeEndRow = config.lastRow;\n var foldLine;\n var markersOnOneLine = 0;\n var lastRow = 0;\n for (var i = 0; i < this.markers.length; i++) {\n var marker = this.markers[i];\n if (marker.range.end.row < visibleRangeStartRow)\n continue;\n if (marker.range.start.row > visibleRangeEndRow)\n continue;\n if (marker.range.start.row === lastRow) {\n markersOnOneLine++;\n }\n else {\n lastRow = marker.range.start.row;\n markersOnOneLine = 0;\n }\n if (markersOnOneLine > 200) {\n continue;\n }\n var markerVisibleRange = marker.range.clipRows(visibleRangeStartRow, visibleRangeEndRow);\n if (markerVisibleRange.start.row === markerVisibleRange.end.row\n && markerVisibleRange.start.column === markerVisibleRange.end.column) {\n continue; // visible range is empty\n }\n var screenRange = markerVisibleRange.toScreenRange(session);\n if (screenRange.isEmpty()) {\n foldLine = session.getNextFoldLine(markerVisibleRange.end.row, foldLine);\n if (foldLine && foldLine.end.row > markerVisibleRange.end.row) {\n visibleRangeStartRow = foldLine.end.row;\n }\n continue;\n }\n if (this.markerType === \"fullLine\") {\n markerLayer.drawFullLineMarker(html, screenRange, marker.className, config);\n }\n else if (screenRange.isMultiLine()) {\n if (this.markerType === \"line\")\n markerLayer.drawMultiLineMarker(html, screenRange, marker.className, config);\n else\n markerLayer.drawTextMarker(html, screenRange, marker.className, config);\n }\n else {\n markerLayer.drawSingleLineMarker(html, screenRange, marker.className + \" ace_br15\", config);\n }\n }\n };\n return MarkerGroup;\n}());\nMarkerGroup.prototype.MAX_MARKERS = 10000;\nexports.MarkerGroup = MarkerGroup;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){var Range = require(\"../range\").Range;\nvar splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\nfunction getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({\n row: 0,\n column: 0\n }, pos));\n return textBefore.split(splitRegex).length - 1;\n}\nfunction wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n var currentWord = words[prefixPos];\n words.forEach(function (word, idx) {\n if (!word || word === currentWord)\n return;\n var distance = Math.abs(prefixPos - idx);\n var score = words.length - distance;\n if (wordScores[word]) {\n wordScores[word] = Math.max(score, wordScores[word]);\n }\n else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n}\nexports.getCompletions = function (editor, session, pos, prefix, callback) {\n var wordScore = wordDistance(session, pos);\n var wordList = Object.keys(wordScore);\n callback(null, wordList.map(function (word) {\n return {\n caption: word,\n value: word,\n score: wordScore[word],\n meta: \"local\"\n };\n }));\n};\n\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/marker_group\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module){/**\n * ## Language Tools extension for Ace Editor\n *\n * Provides autocompletion, snippets, and language intelligence features for the Ace code editor.\n * This extension integrates multiple completion providers including keyword completion, snippet expansion,\n * and text-based completion to enhance the coding experience with contextual suggestions and automated code generation.\n *\n * **Configuration Options:**\n * - `enableBasicAutocompletion`: Enable/disable basic completion functionality\n * - `enableLiveAutocompletion`: Enable/disable real-time completion suggestions\n * - `enableSnippets`: Enable/disable snippet expansion with Tab key\n * - `liveAutocompletionDelay`: Delay before showing live completion popup\n * - `liveAutocompletionThreshold`: Minimum prefix length to trigger completion\n *\n * **Usage:**\n * ```javascript\n * editor.setOptions({\n * enableBasicAutocompletion: true,\n * enableLiveAutocompletion: true,\n * enableSnippets: true\n * });\n * ```\n *\n * @module\n */\n\"use strict\";\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\nvar MarkerGroup = require(\"../marker_group\").MarkerGroup;\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n if (session.$mode.completer) {\n return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n }\n var state = editor.session.getState(pos.row);\n var completions = session.$mode.getCompletions(state, session, pos, prefix);\n completions = completions.map(function (el) {\n el.completerId = keyWordCompleter.id;\n return el;\n });\n callback(null, completions);\n },\n id: \"keywordCompleter\"\n};\nvar transformSnippetTooltip = function (str) {\n var record = {};\n return str.replace(/\\${(\\d+)(:(.*?))?}/g, function (_, p1, p2, p3) {\n return (record[p1] = p3 || '');\n }).replace(/\\$(\\d+?)/g, function (_, p1) {\n return record[p1];\n });\n};\nvar snippetCompleter = {\n getCompletions: function (editor, session, pos, prefix, callback) {\n var scopes = [];\n var token = session.getTokenAt(pos.row, pos.column);\n if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n scopes.push('html-tag');\n else\n scopes = snippetManager.getActiveScopes(editor);\n var snippetMap = snippetManager.snippetMap;\n var completions = [];\n scopes.forEach(function (scope) {\n var snippets = snippetMap[scope] || [];\n for (var i = snippets.length; i--;) {\n var s = snippets[i];\n var caption = s.name || s.tabTrigger;\n if (!caption)\n continue;\n completions.push({\n caption: caption,\n snippet: s.content,\n meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n completerId: snippetCompleter.id\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function (item) {\n if (item.snippet && !item.docHTML) {\n item.docHTML = [\n \"\", lang.escapeHTML(item.caption), \"\", \"
              \",\n lang.escapeHTML(transformSnippetTooltip(item.snippet))\n ].join(\"\");\n }\n },\n id: \"snippetCompleter\"\n};\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function (val) {\n completers.length = 0;\n if (val)\n completers.push.apply(completers, val);\n};\nexports.addCompleter = function (completer) {\n completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\nvar expandSnippet = {\n name: \"expandSnippet\",\n exec: function (editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n};\nvar onChangeMode = function (e, editor) {\n loadSnippetsForMode(editor.session.$mode);\n};\nvar loadSnippetsForMode = function (mode) {\n if (typeof mode == \"string\")\n mode = config.$modes[mode];\n if (!mode)\n return;\n if (!snippetManager.files)\n snippetManager.files = {};\n loadSnippetFile(mode.$id, mode.snippetFileId);\n if (mode.modes)\n mode.modes.forEach(loadSnippetsForMode);\n};\nvar loadSnippetFile = function (id, snippetFilePath) {\n if (!snippetFilePath || !id || snippetManager.files[id])\n return;\n snippetManager.files[id] = {};\n config.loadModule(snippetFilePath, function (m) {\n if (!m)\n return;\n snippetManager.files[id] = m;\n if (!m.snippets && m.snippetText)\n m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n snippetManager.register(m.snippets || [], m.scope);\n if (m.includeScopes) {\n snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n m.includeScopes.forEach(function (x) {\n loadSnippetsForMode(\"ace/mode/\" + x);\n });\n }\n });\n};\nvar doLiveAutocomplete = function (e) {\n var editor = e.editor;\n var hasCompleter = editor.completer && editor.completer.activated;\n if (e.command.name === \"backspace\") {\n if (hasCompleter && !util.getCompletionPrefix(editor))\n editor.completer.detach();\n }\n else if (e.command.name === \"insertstring\" && !hasCompleter) {\n lastExecEvent = e;\n var delay = e.editor.$liveAutocompletionDelay;\n if (delay) {\n liveAutocompleteTimer.delay(delay);\n }\n else {\n showLiveAutocomplete(e);\n }\n }\n};\nvar lastExecEvent;\nvar liveAutocompleteTimer = lang.delayedCall(function () {\n showLiveAutocomplete(lastExecEvent);\n}, 0);\nvar showLiveAutocomplete = function (e) {\n var editor = e.editor;\n var prefix = util.getCompletionPrefix(editor);\n var previousChar = e.args;\n var triggerAutocomplete = util.triggerAutocomplete(editor, previousChar);\n if (prefix && prefix.length >= editor.$liveAutocompletionThreshold || triggerAutocomplete) {\n var completer = Autocomplete.for(editor);\n completer.autoShown = true;\n completer.showPopup(editor);\n }\n};\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function (val) {\n if (val) {\n Autocomplete.for(this);\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.addCommand(Autocomplete.startCommand);\n }\n else {\n this.commands.removeCommand(Autocomplete.startCommand);\n }\n },\n value: false\n },\n enableLiveAutocompletion: {\n set: function (val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val) ? val : completers;\n this.commands.on('afterExec', doLiveAutocomplete);\n }\n else {\n this.commands.off('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n liveAutocompletionDelay: {\n initialValue: 0\n },\n liveAutocompletionThreshold: {\n initialValue: 0\n },\n enableSnippets: {\n set: function (val) {\n if (val) {\n this.commands.addCommand(expandSnippet);\n this.on(\"changeMode\", onChangeMode);\n onChangeMode(null, this);\n }\n else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\n});\nexports.MarkerGroup = MarkerGroup;\n\n}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar SqlHighlightRules = function () {\n var keywords = (\"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|\" +\n \"when|then|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|\" +\n \"foreign|not|references|default|null|inner|cross|natural|database|drop|grant|distinct|is|in|\" +\n \"all|alter|any|array|at|authorization|between|both|cast|check|collate|column|commit|constraint|\" +\n \"cube|current|current_date|current_time|current_timestamp|current_user|describe|escape|except|\" +\n \"exists|external|extract|fetch|filter|for|full|function|global|grouping|intersect|interval|\" +\n \"into|leading|like|local|no|of|only|out|overlaps|partition|position|range|revoke|rollback|rollup|\" +\n \"row|rows|session_user|set|some|start|tablesample|time|to|trailing|truncate|unique|unknown|\" +\n \"user|using|values|window|with\");\n var builtinConstants = (\"true|false\");\n var builtinFunctions = (\"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|\" +\n \"coalesce|ifnull|isnull|nvl\");\n var dataTypes = (\"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|\" +\n \"money|real|number|integer|string\");\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": builtinFunctions,\n \"keyword\": keywords,\n \"constant.language\": builtinConstants,\n \"storage.type\": dataTypes\n }, \"identifier\", true);\n this.$rules = {\n \"start\": [{\n token: \"comment\",\n regex: \"--.*$\"\n }, {\n token: \"comment\",\n start: \"/\\\\*\",\n end: \"\\\\*/\"\n }, {\n token: \"string\", // \" string\n regex: '\".*?\"'\n }, {\n token: \"string\", // ' string\n regex: \"'.*?'\"\n }, {\n token: \"string\", // ` string (apache drill)\n regex: \"`.*?`\"\n }, {\n token: \"constant.numeric\", // float\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: keywordMapper,\n regex: \"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"\n }, {\n token: \"keyword.operator\",\n regex: \"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"\n }, {\n token: \"paren.lparen\",\n regex: \"[\\\\(]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\)]\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }]\n };\n this.normalizeRules();\n};\noop.inherits(SqlHighlightRules, TextHighlightRules);\nexports.SqlHighlightRules = SqlHighlightRules;\n\n});\n\nace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Range = require(\"../../range\").Range;\nvar BaseFoldMode = require(\"./fold_mode\").FoldMode;\nvar FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n};\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))\n return \"\";\n }\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n if (!fw && this.startRegionRe.test(line))\n return \"start\"; // lineCommentRegionStart\n return fw;\n };\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line))\n return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n if (match) {\n var i = match.index;\n if (match[1])\n return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n }\n else if (foldStyle != \"all\")\n range = null;\n }\n return range;\n }\n if (foldStyle === \"markbegin\")\n return;\n var match = line.match(this.foldingStopMarker);\n if (match) {\n var i = match.index + match[0].length;\n if (match[1])\n return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1)\n continue;\n if (startIndent > indent)\n break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n }\n else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n }\n else if (startIndent == indent) {\n break;\n }\n }\n endRow = row;\n }\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m)\n continue;\n if (m[1])\n depth--;\n else\n depth++;\n if (!depth)\n break;\n }\n var endRow = row;\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/folding/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/cstyle\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar BaseFoldMode = require(\"./cstyle\").FoldMode;\nvar FoldMode = exports.FoldMode = function () { };\noop.inherits(FoldMode, BaseFoldMode);\n(function () {\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\",\"ace/mode/folding/sql\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar SqlHighlightRules = require(\"./sql_highlight_rules\").SqlHighlightRules;\nvar SqlFoldMode = require(\"./folding/sql\").FoldMode;\nvar Mode = function () {\n this.HighlightRules = SqlHighlightRules;\n this.foldingRules = new SqlFoldMode();\n this.$behaviour = this.$defaultBehaviour;\n};\noop.inherits(Mode, TextMode);\n(function () {\n this.lineCommentStart = \"--\";\n this.blockComment = { start: \"/*\", end: \"*/\" };\n this.$id = \"ace/mode/sql\";\n this.snippetFileId = \"ace/snippets/sql\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n}); (function() {\n ace.require([\"ace/mode/sql\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate-css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate-css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n}); (function() {\n ace.require([\"ace/theme/textmate\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/*!\nViz.js 3.8.0\nCopyright (c) 2023 Michael Daines\n\nThis distribution contains other software in object code form:\nGraphviz https://www.graphviz.org\nExpat https://libexpat.github.io\n*/var A=function(){var A,I,g,Q,B,C,E,D,w,i,o,G=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},M=new Promise(((I,g)=>{A=I})),R=A=>console.log(A);function F(A){throw A}function y(){var A=o.buffer;g=new Int8Array(A),Q=new Int16Array(A),C=new Uint8Array(A),B=new Int32Array(A),E=new Uint32Array(A),D=new Float32Array(A),w=new Float64Array(A),i=new BigInt64Array(A),new BigUint64Array(A)}G.agerrMessages=[],G.stderrMessages=[],I=A=>G.stderrMessages.push(A);var s=\"undefined\"!=typeof TextDecoder?new TextDecoder:void 0,h=(A,I,g)=>{for(var Q=I+g,B=I;A[B]&&!(B>=Q);)++B;if(B-I>16&&A.buffer&&s)return s.decode(A.subarray(I,B));for(var C=\"\";I>10,56320|1023&i)}}else C+=String.fromCharCode((31&E)<<6|D)}else C+=String.fromCharCode(E)}return C},K=(A,I)=>A?h(C,A,I):\"\";class N{constructor(A){this.excPtr=A,this.ptr=A-24}set_type(A){E[this.ptr+4>>2]=A}get_type(){return E[this.ptr+4>>2]}set_destructor(A){E[this.ptr+8>>2]=A}get_destructor(){return E[this.ptr+8>>2]}set_caught(A){A=A?1:0,g[this.ptr+12]=A}get_caught(){return 0!=g[this.ptr+12]}set_rethrown(A){A=A?1:0,g[this.ptr+13]=A}get_rethrown(){return 0!=g[this.ptr+13]}init(A,I){this.set_adjusted_ptr(0),this.set_type(A),this.set_destructor(I)}set_adjusted_ptr(A){E[this.ptr+16>>2]=A}get_adjusted_ptr(){return E[this.ptr+16>>2]}get_exception_ptr(){if(T(this.get_type()))return E[this.excPtr>>2];var A=this.get_adjusted_ptr();return 0!==A?A:this.excPtr}}var k={isAbs:A=>\"/\"===A.charAt(0),splitPath:A=>/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(A).slice(1),normalizeArray:(A,I)=>{for(var g=0,Q=A.length-1;Q>=0;Q--){var B=A[Q];\".\"===B?A.splice(Q,1):\"..\"===B?(A.splice(Q,1),g++):g&&(A.splice(Q,1),g--)}if(I)for(;g;g--)A.unshift(\"..\");return A},normalize:A=>{var I=k.isAbs(A),g=\"/\"===A.substr(-1);return(A=k.normalizeArray(A.split(\"/\").filter((A=>!!A)),!I).join(\"/\"))||I||(A=\".\"),A&&g&&(A+=\"/\"),(I?\"/\":\"\")+A},dirname:A=>{var I=k.splitPath(A),g=I[0],Q=I[1];return g||Q?(Q&&(Q=Q.substr(0,Q.length-1)),g+Q):\".\"},basename:A=>{if(\"/\"===A)return\"/\";var I=(A=(A=k.normalize(A)).replace(/\\/$/,\"\")).lastIndexOf(\"/\");return-1===I?A:A.substr(I+1)},join:function(){for(var A=arguments.length,I=new Array(A),g=0;gk.normalize(A+\"/\"+I)},L=A=>(L=(()=>{if(\"object\"==typeof crypto&&\"function\"==typeof crypto.getRandomValues)return A=>crypto.getRandomValues(A);F(\"initRandomDevice\")})())(A),U={resolve:function(){for(var A=\"\",I=!1,g=arguments.length-1;g>=-1&&!I;g--){var Q=g>=0?g<0||arguments.length<=g?void 0:arguments[g]:r.cwd();if(\"string\"!=typeof Q)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!Q)return\"\";A=Q+\"/\"+A,I=k.isAbs(Q)}return(I?\"/\":\"\")+(A=k.normalizeArray(A.split(\"/\").filter((A=>!!A)),!I).join(\"/\"))||\".\"},relative:(A,I)=>{function g(A){for(var I=0;I=0&&\"\"===A[g];g--);return I>g?[]:A.slice(I,g-I+1)}A=U.resolve(A).substr(1),I=U.resolve(I).substr(1);for(var Q=g(A.split(\"/\")),B=g(I.split(\"/\")),C=Math.min(Q.length,B.length),E=C,D=0;D{for(var I=0,g=0;g=55296&&Q<=57343?(I+=4,++g):I+=3}return I},J=(A,I,g,Q)=>{if(!(Q>0))return 0;for(var B=g,C=g+Q-1,E=0;E=55296&&D<=57343)D=65536+((1023&D)<<10)|1023&A.charCodeAt(++E);if(D<=127){if(g>=C)break;I[g++]=D}else if(D<=2047){if(g+1>=C)break;I[g++]=192|D>>6,I[g++]=128|63&D}else if(D<=65535){if(g+2>=C)break;I[g++]=224|D>>12,I[g++]=128|D>>6&63,I[g++]=128|63&D}else{if(g+3>=C)break;I[g++]=240|D>>18,I[g++]=128|D>>12&63,I[g++]=128|D>>6&63,I[g++]=128|63&D}}return I[g]=0,g-B};function c(A,I,g){var Q=g>0?g:Y(A)+1,B=new Array(Q),C=J(A,B,0,B.length);return I&&(B.length=C),B}var a={ttys:[],init(){},shutdown(){},register(A,I){a.ttys[A]={input:[],output:[],ops:I},r.registerDevice(A,a.stream_ops)},stream_ops:{open(A){var I=a.ttys[A.node.rdev];if(!I)throw new r.ErrnoError(43);A.tty=I,A.seekable=!1},close(A){A.tty.ops.fsync(A.tty)},fsync(A){A.tty.ops.fsync(A.tty)},read(A,I,g,Q,B){if(!A.tty||!A.tty.ops.get_char)throw new r.ErrnoError(60);for(var C=0,E=0;E(()=>{if(!S.length){var A=null;if(\"undefined\"!=typeof window&&\"function\"==typeof window.prompt&&null!==(A=window.prompt(\"Input: \"))&&(A+=\"\\n\"),!A)return null;S=c(A,!0)}return S.shift()})(),put_char(A,I){null===I||10===I?(R(h(A.output,0)),A.output=[]):0!=I&&A.output.push(I)},fsync(A){A.output&&A.output.length>0&&(R(h(A.output,0)),A.output=[])},ioctl_tcgets:A=>({c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}),ioctl_tcsets:(A,I,g)=>0,ioctl_tiocgwinsz:A=>[24,80]},default_tty1_ops:{put_char(A,g){null===g||10===g?(I(h(A.output,0)),A.output=[]):0!=g&&A.output.push(g)},fsync(A){A.output&&A.output.length>0&&(I(h(A.output,0)),A.output=[])}}},H=A=>{A=((A,I)=>Math.ceil(A/I)*I)(A,65536);var I=z(65536,A);return I?((A,I)=>(C.fill(0,A,A+I),A))(I,A):0},Z={ops_table:null,mount:A=>Z.createNode(null,\"/\",16895,0),createNode(A,I,g,Q){if(r.isBlkdev(g)||r.isFIFO(g))throw new r.ErrnoError(63);Z.ops_table||={dir:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr,lookup:Z.node_ops.lookup,mknod:Z.node_ops.mknod,rename:Z.node_ops.rename,unlink:Z.node_ops.unlink,rmdir:Z.node_ops.rmdir,readdir:Z.node_ops.readdir,symlink:Z.node_ops.symlink},stream:{llseek:Z.stream_ops.llseek}},file:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr},stream:{llseek:Z.stream_ops.llseek,read:Z.stream_ops.read,write:Z.stream_ops.write,allocate:Z.stream_ops.allocate,mmap:Z.stream_ops.mmap,msync:Z.stream_ops.msync}},link:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr,readlink:Z.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Z.node_ops.getattr,setattr:Z.node_ops.setattr},stream:r.chrdev_stream_ops}};var B=r.createNode(A,I,g,Q);return r.isDir(B.mode)?(B.node_ops=Z.ops_table.dir.node,B.stream_ops=Z.ops_table.dir.stream,B.contents={}):r.isFile(B.mode)?(B.node_ops=Z.ops_table.file.node,B.stream_ops=Z.ops_table.file.stream,B.usedBytes=0,B.contents=null):r.isLink(B.mode)?(B.node_ops=Z.ops_table.link.node,B.stream_ops=Z.ops_table.link.stream):r.isChrdev(B.mode)&&(B.node_ops=Z.ops_table.chrdev.node,B.stream_ops=Z.ops_table.chrdev.stream),B.timestamp=Date.now(),A&&(A.contents[I]=B,A.timestamp=B.timestamp),B},getFileDataAsTypedArray:A=>A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array(0),expandFileStorage(A,I){var g=A.contents?A.contents.length:0;if(!(g>=I)){I=Math.max(I,g*(g<1048576?2:1.125)>>>0),0!=g&&(I=Math.max(I,256));var Q=A.contents;A.contents=new Uint8Array(I),A.usedBytes>0&&A.contents.set(Q.subarray(0,A.usedBytes),0)}},resizeFileStorage(A,I){if(A.usedBytes!=I)if(0==I)A.contents=null,A.usedBytes=0;else{var g=A.contents;A.contents=new Uint8Array(I),g&&A.contents.set(g.subarray(0,Math.min(I,A.usedBytes))),A.usedBytes=I}},node_ops:{getattr(A){var I={};return I.dev=r.isChrdev(A.mode)?A.id:1,I.ino=A.id,I.mode=A.mode,I.nlink=1,I.uid=0,I.gid=0,I.rdev=A.rdev,r.isDir(A.mode)?I.size=4096:r.isFile(A.mode)?I.size=A.usedBytes:r.isLink(A.mode)?I.size=A.link.length:I.size=0,I.atime=new Date(A.timestamp),I.mtime=new Date(A.timestamp),I.ctime=new Date(A.timestamp),I.blksize=4096,I.blocks=Math.ceil(I.size/I.blksize),I},setattr(A,I){void 0!==I.mode&&(A.mode=I.mode),void 0!==I.timestamp&&(A.timestamp=I.timestamp),void 0!==I.size&&Z.resizeFileStorage(A,I.size)},lookup(A,I){throw r.genericErrors[44]},mknod:(A,I,g,Q)=>Z.createNode(A,I,g,Q),rename(A,I,g){if(r.isDir(A.mode)){var Q;try{Q=r.lookupNode(I,g)}catch(A){}if(Q)for(var B in Q.contents)throw new r.ErrnoError(55)}delete A.parent.contents[A.name],A.parent.timestamp=Date.now(),A.name=g,I.contents[g]=A,I.timestamp=A.parent.timestamp},unlink(A,I){delete A.contents[I],A.timestamp=Date.now()},rmdir(A,I){var g=r.lookupNode(A,I);for(var Q in g.contents)throw new r.ErrnoError(55);delete A.contents[I],A.timestamp=Date.now()},readdir(A){var I=[\".\",\"..\"];for(var g of Object.keys(A.contents))I.push(g);return I},symlink(A,I,g){var Q=Z.createNode(A,I,41471,0);return Q.link=g,Q},readlink(A){if(!r.isLink(A.mode))throw new r.ErrnoError(28);return A.link}},stream_ops:{read(A,I,g,Q,B){var C=A.node.contents;if(B>=A.node.usedBytes)return 0;var E=Math.min(A.node.usedBytes-B,Q);if(E>8&&C.subarray)I.set(C.subarray(B,B+E),g);else for(var D=0;D0||Q+I(Z.stream_ops.write(A,I,0,Q,g,!1),0)}},d=(A,I)=>{var g=0;return A&&(g|=365),I&&(g|=146),g},r={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(A){this.name=\"ErrnoError\",this.errno=A}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(A){this.node=A}get isRead(){return 1!=(2097155&this.flags)}get isWrite(){return 0!=(2097155&this.flags)}get isAppend(){return 1024&this.flags}get flags(){return this.shared.flags}set flags(A){this.shared.flags=A}get position(){return this.shared.position}set position(A){this.shared.position=A}},FSNode:class{constructor(A,I,g,Q){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=r.nextInode++,this.name=I,this.mode=g,this.node_ops={},this.stream_ops={},this.rdev=Q,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(A){A?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(A){A?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return r.isDir(this.mode)}get isDevice(){return r.isChrdev(this.mode)}},lookupPath(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(A=U.resolve(A)))return{path:\"\",node:null};if(I=Object.assign({follow_mount:!0,recurse_count:0},I),I.recurse_count>8)throw new r.ErrnoError(32);for(var g=A.split(\"/\").filter((A=>!!A)),Q=r.root,B=\"/\",C=0;C40)throw new r.ErrnoError(32)}}return{path:B,node:Q}},getPath(A){for(var I;;){if(r.isRoot(A)){var g=A.mount.mountpoint;return I?\"/\"!==g[g.length-1]?`${g}/${I}`:g+I:g}I=I?`${A.name}/${I}`:A.name,A=A.parent}},hashName(A,I){for(var g=0,Q=0;Q>>0)%r.nameTable.length},hashAddNode(A){var I=r.hashName(A.parent.id,A.name);A.name_next=r.nameTable[I],r.nameTable[I]=A},hashRemoveNode(A){var I=r.hashName(A.parent.id,A.name);if(r.nameTable[I]===A)r.nameTable[I]=A.name_next;else for(var g=r.nameTable[I];g;){if(g.name_next===A){g.name_next=A.name_next;break}g=g.name_next}},lookupNode(A,I){var g=r.mayLookup(A);if(g)throw new r.ErrnoError(g);for(var Q=r.hashName(A.id,I),B=r.nameTable[Q];B;B=B.name_next){var C=B.name;if(B.parent.id===A.id&&C===I)return B}return r.lookup(A,I)},createNode(A,I,g,Q){var B=new r.FSNode(A,I,g,Q);return r.hashAddNode(B),B},destroyNode(A){r.hashRemoveNode(A)},isRoot:A=>A===A.parent,isMountpoint:A=>!!A.mounted,isFile:A=>32768==(61440&A),isDir:A=>16384==(61440&A),isLink:A=>40960==(61440&A),isChrdev:A=>8192==(61440&A),isBlkdev:A=>24576==(61440&A),isFIFO:A=>4096==(61440&A),isSocket:A=>49152==(49152&A),flagsToPermissionString(A){var I=[\"r\",\"w\",\"rw\"][3&A];return 512&A&&(I+=\"w\"),I},nodePermissions:(A,I)=>r.ignorePermissions||(!I.includes(\"r\")||292&A.mode)&&(!I.includes(\"w\")||146&A.mode)&&(!I.includes(\"x\")||73&A.mode)?0:2,mayLookup(A){if(!r.isDir(A.mode))return 54;var I=r.nodePermissions(A,\"x\");return I||(A.node_ops.lookup?0:2)},mayCreate(A,I){try{r.lookupNode(A,I);return 20}catch(A){}return r.nodePermissions(A,\"wx\")},mayDelete(A,I,g){var Q;try{Q=r.lookupNode(A,I)}catch(A){return A.errno}var B=r.nodePermissions(A,\"wx\");if(B)return B;if(g){if(!r.isDir(Q.mode))return 54;if(r.isRoot(Q)||r.getPath(Q)===r.cwd())return 10}else if(r.isDir(Q.mode))return 31;return 0},mayOpen:(A,I)=>A?r.isLink(A.mode)?32:r.isDir(A.mode)&&(\"r\"!==r.flagsToPermissionString(I)||512&I)?31:r.nodePermissions(A,r.flagsToPermissionString(I)):44,MAX_OPEN_FDS:4096,nextfd(){for(var A=0;A<=r.MAX_OPEN_FDS;A++)if(!r.streams[A])return A;throw new r.ErrnoError(33)},getStreamChecked(A){var I=r.getStream(A);if(!I)throw new r.ErrnoError(8);return I},getStream:A=>r.streams[A],createStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;return A=Object.assign(new r.FSStream,A),-1==I&&(I=r.nextfd()),A.fd=I,r.streams[I]=A,A},closeStream(A){r.streams[A]=null},dupStream(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;var g=r.createStream(A,I);return g.stream_ops?.dup?.(g),g},chrdev_stream_ops:{open(A){var I=r.getDevice(A.node.rdev);A.stream_ops=I.stream_ops,A.stream_ops.open?.(A)},llseek(){throw new r.ErrnoError(70)}},major:A=>A>>8,minor:A=>255&A,makedev:(A,I)=>A<<8|I,registerDevice(A,I){r.devices[A]={stream_ops:I}},getDevice:A=>r.devices[A],getMounts(A){for(var I=[],g=[A];g.length;){var Q=g.pop();I.push(Q),g.push(...Q.mounts)}return I},syncfs(A,g){\"function\"==typeof A&&(g=A,A=!1),r.syncFSRequests++,r.syncFSRequests>1&&I(`warning: ${r.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var Q=r.getMounts(r.root.mount),B=0;function C(A){return r.syncFSRequests--,g(A)}function E(A){if(A)return E.errored?void 0:(E.errored=!0,C(A));++B>=Q.length&&C(null)}Q.forEach((I=>{if(!I.type.syncfs)return E(null);I.type.syncfs(I,A,E)}))},mount(A,I,g){var Q,B=\"/\"===g,C=!g;if(B&&r.root)throw new r.ErrnoError(10);if(!B&&!C){var E=r.lookupPath(g,{follow_mount:!1});if(g=E.path,Q=E.node,r.isMountpoint(Q))throw new r.ErrnoError(10);if(!r.isDir(Q.mode))throw new r.ErrnoError(54)}var D={type:A,opts:I,mountpoint:g,mounts:[]},w=A.mount(D);return w.mount=D,D.root=w,B?r.root=w:Q&&(Q.mounted=D,Q.mount&&Q.mount.mounts.push(D)),w},unmount(A){var I=r.lookupPath(A,{follow_mount:!1});if(!r.isMountpoint(I.node))throw new r.ErrnoError(28);var g=I.node,Q=g.mounted,B=r.getMounts(Q);Object.keys(r.nameTable).forEach((A=>{for(var I=r.nameTable[A];I;){var g=I.name_next;B.includes(I.mount)&&r.destroyNode(I),I=g}})),g.mounted=null;var C=g.mount.mounts.indexOf(Q);g.mount.mounts.splice(C,1)},lookup:(A,I)=>A.node_ops.lookup(A,I),mknod(A,I,g){var Q=r.lookupPath(A,{parent:!0}).node,B=k.basename(A);if(!B||\".\"===B||\"..\"===B)throw new r.ErrnoError(28);var C=r.mayCreate(Q,B);if(C)throw new r.ErrnoError(C);if(!Q.node_ops.mknod)throw new r.ErrnoError(63);return Q.node_ops.mknod(Q,B,I,g)},create:(A,I)=>(I=void 0!==I?I:438,I&=4095,I|=32768,r.mknod(A,I,0)),mkdir:(A,I)=>(I=void 0!==I?I:511,I&=1023,I|=16384,r.mknod(A,I,0)),mkdirTree(A,I){for(var g=A.split(\"/\"),Q=\"\",B=0;B(void 0===g&&(g=I,I=438),I|=8192,r.mknod(A,I,g)),symlink(A,I){if(!U.resolve(A))throw new r.ErrnoError(44);var g=r.lookupPath(I,{parent:!0}).node;if(!g)throw new r.ErrnoError(44);var Q=k.basename(I),B=r.mayCreate(g,Q);if(B)throw new r.ErrnoError(B);if(!g.node_ops.symlink)throw new r.ErrnoError(63);return g.node_ops.symlink(g,Q,A)},rename(A,I){var g,Q,B=k.dirname(A),C=k.dirname(I),E=k.basename(A),D=k.basename(I);if(g=r.lookupPath(A,{parent:!0}).node,Q=r.lookupPath(I,{parent:!0}).node,!g||!Q)throw new r.ErrnoError(44);if(g.mount!==Q.mount)throw new r.ErrnoError(75);var w,i=r.lookupNode(g,E),o=U.relative(A,C);if(\".\"!==o.charAt(0))throw new r.ErrnoError(28);if(\".\"!==(o=U.relative(I,B)).charAt(0))throw new r.ErrnoError(55);try{w=r.lookupNode(Q,D)}catch(A){}if(i!==w){var G=r.isDir(i.mode),M=r.mayDelete(g,E,G);if(M)throw new r.ErrnoError(M);if(M=w?r.mayDelete(Q,D,G):r.mayCreate(Q,D))throw new r.ErrnoError(M);if(!g.node_ops.rename)throw new r.ErrnoError(63);if(r.isMountpoint(i)||w&&r.isMountpoint(w))throw new r.ErrnoError(10);if(Q!==g&&(M=r.nodePermissions(g,\"w\")))throw new r.ErrnoError(M);r.hashRemoveNode(i);try{g.node_ops.rename(i,Q,D),i.parent=Q}catch(A){throw A}finally{r.hashAddNode(i)}}},rmdir(A){var I=r.lookupPath(A,{parent:!0}).node,g=k.basename(A),Q=r.lookupNode(I,g),B=r.mayDelete(I,g,!0);if(B)throw new r.ErrnoError(B);if(!I.node_ops.rmdir)throw new r.ErrnoError(63);if(r.isMountpoint(Q))throw new r.ErrnoError(10);I.node_ops.rmdir(I,g),r.destroyNode(Q)},readdir(A){var I=r.lookupPath(A,{follow:!0}).node;if(!I.node_ops.readdir)throw new r.ErrnoError(54);return I.node_ops.readdir(I)},unlink(A){var I=r.lookupPath(A,{parent:!0}).node;if(!I)throw new r.ErrnoError(44);var g=k.basename(A),Q=r.lookupNode(I,g),B=r.mayDelete(I,g,!1);if(B)throw new r.ErrnoError(B);if(!I.node_ops.unlink)throw new r.ErrnoError(63);if(r.isMountpoint(Q))throw new r.ErrnoError(10);I.node_ops.unlink(I,g),r.destroyNode(Q)},readlink(A){var I=r.lookupPath(A).node;if(!I)throw new r.ErrnoError(44);if(!I.node_ops.readlink)throw new r.ErrnoError(28);return U.resolve(r.getPath(I.parent),I.node_ops.readlink(I))},stat(A,I){var g=r.lookupPath(A,{follow:!I}).node;if(!g)throw new r.ErrnoError(44);if(!g.node_ops.getattr)throw new r.ErrnoError(63);return g.node_ops.getattr(g)},lstat:A=>r.stat(A,!0),chmod(A,I,g){var Q;\"string\"==typeof A?Q=r.lookupPath(A,{follow:!g}).node:Q=A;if(!Q.node_ops.setattr)throw new r.ErrnoError(63);Q.node_ops.setattr(Q,{mode:4095&I|-4096&Q.mode,timestamp:Date.now()})},lchmod(A,I){r.chmod(A,I,!0)},fchmod(A,I){var g=r.getStreamChecked(A);r.chmod(g.node,I)},chown(A,I,g,Q){var B;\"string\"==typeof A?B=r.lookupPath(A,{follow:!Q}).node:B=A;if(!B.node_ops.setattr)throw new r.ErrnoError(63);B.node_ops.setattr(B,{timestamp:Date.now()})},lchown(A,I,g){r.chown(A,I,g,!0)},fchown(A,I,g){var Q=r.getStreamChecked(A);r.chown(Q.node,I,g)},truncate(A,I){if(I<0)throw new r.ErrnoError(28);var g;\"string\"==typeof A?g=r.lookupPath(A,{follow:!0}).node:g=A;if(!g.node_ops.setattr)throw new r.ErrnoError(63);if(r.isDir(g.mode))throw new r.ErrnoError(31);if(!r.isFile(g.mode))throw new r.ErrnoError(28);var Q=r.nodePermissions(g,\"w\");if(Q)throw new r.ErrnoError(Q);g.node_ops.setattr(g,{size:I,timestamp:Date.now()})},ftruncate(A,I){var g=r.getStreamChecked(A);if(0==(2097155&g.flags))throw new r.ErrnoError(28);r.truncate(g.node,I)},utime(A,I,g){var Q=r.lookupPath(A,{follow:!0}).node;Q.node_ops.setattr(Q,{timestamp:Math.max(I,g)})},open(A,I,g){if(\"\"===A)throw new r.ErrnoError(44);var Q;if(g=64&(I=\"string\"==typeof I?(A=>{var I={r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090}[A];if(void 0===I)throw new Error(`Unknown file open mode: ${A}`);return I})(I):I)?4095&(g=void 0===g?438:g)|32768:0,\"object\"==typeof A)Q=A;else{A=k.normalize(A);try{Q=r.lookupPath(A,{follow:!(131072&I)}).node}catch(A){}}var B=!1;if(64&I)if(Q){if(128&I)throw new r.ErrnoError(20)}else Q=r.mknod(A,g,0),B=!0;if(!Q)throw new r.ErrnoError(44);if(r.isChrdev(Q.mode)&&(I&=-513),65536&I&&!r.isDir(Q.mode))throw new r.ErrnoError(54);if(!B){var C=r.mayOpen(Q,I);if(C)throw new r.ErrnoError(C)}512&I&&!B&&r.truncate(Q,0),I&=-131713;var E=r.createStream({node:Q,path:r.getPath(Q),flags:I,seekable:!0,position:0,stream_ops:Q.stream_ops,ungotten:[],error:!1});return E.stream_ops.open&&E.stream_ops.open(E),!G.logReadFiles||1&I||(r.readFiles||(r.readFiles={}),A in r.readFiles||(r.readFiles[A]=1)),E},close(A){if(r.isClosed(A))throw new r.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(A){throw A}finally{r.closeStream(A.fd)}A.fd=null},isClosed:A=>null===A.fd,llseek(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new r.ErrnoError(70);if(0!=g&&1!=g&&2!=g)throw new r.ErrnoError(28);return A.position=A.stream_ops.llseek(A,I,g),A.ungotten=[],A.position},read(A,I,g,Q,B){if(Q<0||B<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(1==(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.read)throw new r.ErrnoError(28);var C=void 0!==B;if(C){if(!A.seekable)throw new r.ErrnoError(70)}else B=A.position;var E=A.stream_ops.read(A,I,g,Q,B);return C||(A.position+=E),E},write(A,I,g,Q,B,C){if(Q<0||B<0)throw new r.ErrnoError(28);if(r.isClosed(A))throw new r.ErrnoError(8);if(0==(2097155&A.flags))throw new r.ErrnoError(8);if(r.isDir(A.node.mode))throw new r.ErrnoError(31);if(!A.stream_ops.write)throw new r.ErrnoError(28);A.seekable&&1024&A.flags&&r.llseek(A,0,2);var E=void 0!==B;if(E){if(!A.seekable)throw new r.ErrnoError(70)}else B=A.position;var D=A.stream_ops.write(A,I,g,Q,B,C);return E||(A.position+=D),D},allocate(A,I,g){if(r.isClosed(A))throw new r.ErrnoError(8);if(I<0||g<=0)throw new r.ErrnoError(28);if(0==(2097155&A.flags))throw new r.ErrnoError(8);if(!r.isFile(A.node.mode)&&!r.isDir(A.node.mode))throw new r.ErrnoError(43);if(!A.stream_ops.allocate)throw new r.ErrnoError(138);A.stream_ops.allocate(A,I,g)},mmap(A,I,g,Q,B){if(0!=(2&Q)&&0==(2&B)&&2!=(2097155&A.flags))throw new r.ErrnoError(2);if(1==(2097155&A.flags))throw new r.ErrnoError(2);if(!A.stream_ops.mmap)throw new r.ErrnoError(43);return A.stream_ops.mmap(A,I,g,Q,B)},msync:(A,I,g,Q,B)=>A.stream_ops.msync?A.stream_ops.msync(A,I,g,Q,B):0,ioctl(A,I,g){if(!A.stream_ops.ioctl)throw new r.ErrnoError(59);return A.stream_ops.ioctl(A,I,g)},readFile(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(I.flags=I.flags||0,I.encoding=I.encoding||\"binary\",\"utf8\"!==I.encoding&&\"binary\"!==I.encoding)throw new Error(`Invalid encoding type \"${I.encoding}\"`);var g,Q=r.open(A,I.flags),B=r.stat(A).size,C=new Uint8Array(B);return r.read(Q,C,0,B,0),\"utf8\"===I.encoding?g=h(C,0):\"binary\"===I.encoding&&(g=C),r.close(Q),g},writeFile(A,I){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};g.flags=g.flags||577;var Q=r.open(A,g.flags,g.mode);if(\"string\"==typeof I){var B=new Uint8Array(Y(I)+1),C=J(I,B,0,B.length);r.write(Q,B,0,C,void 0,g.canOwn)}else{if(!ArrayBuffer.isView(I))throw new Error(\"Unsupported data type\");r.write(Q,I,0,I.byteLength,void 0,g.canOwn)}r.close(Q)},cwd:()=>r.currentPath,chdir(A){var I=r.lookupPath(A,{follow:!0});if(null===I.node)throw new r.ErrnoError(44);if(!r.isDir(I.node.mode))throw new r.ErrnoError(54);var g=r.nodePermissions(I.node,\"x\");if(g)throw new r.ErrnoError(g);r.currentPath=I.path},createDefaultDirectories(){r.mkdir(\"/tmp\"),r.mkdir(\"/home\"),r.mkdir(\"/home/web_user\")},createDefaultDevices(){r.mkdir(\"/dev\"),r.registerDevice(r.makedev(1,3),{read:()=>0,write:(A,I,g,Q,B)=>Q}),r.mkdev(\"/dev/null\",r.makedev(1,3)),a.register(r.makedev(5,0),a.default_tty_ops),a.register(r.makedev(6,0),a.default_tty1_ops),r.mkdev(\"/dev/tty\",r.makedev(5,0)),r.mkdev(\"/dev/tty1\",r.makedev(6,0));var A=new Uint8Array(1024),I=0,g=()=>(0===I&&(I=L(A).byteLength),A[--I]);r.createDevice(\"/dev\",\"random\",g),r.createDevice(\"/dev\",\"urandom\",g),r.mkdir(\"/dev/shm\"),r.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){r.mkdir(\"/proc\");var A=r.mkdir(\"/proc/self\");r.mkdir(\"/proc/self/fd\"),r.mount({mount(){var I=r.createNode(A,\"fd\",16895,73);return I.node_ops={lookup(A,I){var g=+I,Q=r.getStreamChecked(g),B={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>Q.path}};return B.parent=B,B}},I}},{},\"/proc/self/fd\")},createStandardStreams(){G.stdin?r.createDevice(\"/dev\",\"stdin\",G.stdin):r.symlink(\"/dev/tty\",\"/dev/stdin\"),G.stdout?r.createDevice(\"/dev\",\"stdout\",null,G.stdout):r.symlink(\"/dev/tty\",\"/dev/stdout\"),G.stderr?r.createDevice(\"/dev\",\"stderr\",null,G.stderr):r.symlink(\"/dev/tty1\",\"/dev/stderr\"),r.open(\"/dev/stdin\",0),r.open(\"/dev/stdout\",1),r.open(\"/dev/stderr\",1)},staticInit(){[44].forEach((A=>{r.genericErrors[A]=new r.ErrnoError(A),r.genericErrors[A].stack=\"\"})),r.nameTable=new Array(4096),r.mount(Z,{},\"/\"),r.createDefaultDirectories(),r.createDefaultDevices(),r.createSpecialDirectories(),r.filesystems={MEMFS:Z}},init(A,I,g){r.init.initialized=!0,G.stdin=A||G.stdin,G.stdout=I||G.stdout,G.stderr=g||G.stderr,r.createStandardStreams()},quit(){r.init.initialized=!1;for(var A=0;Athis.length-1||A<0)){var I=A%this.chunkSize,g=A/this.chunkSize|0;return this.getter(g)[I]}}setDataGetter(A){this.getter=A}cacheLength(){var A=new XMLHttpRequest;if(A.open(\"HEAD\",Q,!1),A.send(null),!(A.status>=200&&A.status<300||304===A.status))throw new Error(\"Couldn't load \"+Q+\". Status: \"+A.status);var I,g=Number(A.getResponseHeader(\"Content-length\")),B=(I=A.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===I,C=(I=A.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===I,E=1048576;B||(E=g);var D=this;D.setDataGetter((A=>{var I=A*E,B=(A+1)*E-1;if(B=Math.min(B,g-1),void 0===D.chunks[A]&&(D.chunks[A]=((A,I)=>{if(A>I)throw new Error(\"invalid range (\"+A+\", \"+I+\") or no bytes requested!\");if(I>g-1)throw new Error(\"only \"+g+\" bytes available! programmer error!\");var B=new XMLHttpRequest;if(B.open(\"GET\",Q,!1),g!==E&&B.setRequestHeader(\"Range\",\"bytes=\"+A+\"-\"+I),B.responseType=\"arraybuffer\",B.overrideMimeType&&B.overrideMimeType(\"text/plain; charset=x-user-defined\"),B.send(null),!(B.status>=200&&B.status<300||304===B.status))throw new Error(\"Couldn't load \"+Q+\". Status: \"+B.status);return void 0!==B.response?new Uint8Array(B.response||[]):c(B.responseText||\"\",!0)})(I,B)),void 0===D.chunks[A])throw new Error(\"doXHR failed!\");return D.chunks[A]})),!C&&g||(E=g=1,g=this.getter(0).length,E=g,R(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=g,this._chunkSize=E,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(\"undefined\"!=typeof XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var D={isDevice:!1,contents:new E}}else D={isDevice:!1,url:Q};var w=r.createFile(A,I,D,B,C);D.contents?w.contents=D.contents:D.url&&(w.contents=null,w.url=D.url),Object.defineProperties(w,{usedBytes:{get:function(){return this.contents.length}}});var i={};function o(A,I,g,Q,B){var C=A.node.contents;if(B>=C.length)return 0;var E=Math.min(C.length-B,Q);if(C.slice)for(var D=0;D{var I=w.stream_ops[A];i[A]=function(){return r.forceLoadFile(w),I(...arguments)}})),i.read=(A,I,g,Q,B)=>(r.forceLoadFile(w),o(A,I,g,Q,B)),i.mmap=(A,I,Q,B,C)=>{r.forceLoadFile(w);var E=H(I);if(!E)throw new r.ErrnoError(48);return o(A,g,E,I,Q),{ptr:E,allocated:!0}},w.stream_ops=i,w}},q={DEFAULT_POLLMASK:5,calculateAt(A,I,g){if(k.isAbs(I))return I;var Q;-100===A?Q=r.cwd():Q=q.getStreamFromFD(A).path;if(0==I.length){if(!g)throw new r.ErrnoError(44);return Q}return k.join2(Q,I)},doStat(A,I,g){var Q=A(I);B[g>>2]=Q.dev,B[g+4>>2]=Q.mode,E[g+8>>2]=Q.nlink,B[g+12>>2]=Q.uid,B[g+16>>2]=Q.gid,B[g+20>>2]=Q.rdev,i[g+24>>3]=BigInt(Q.size),B[g+32>>2]=4096,B[g+36>>2]=Q.blocks;var C=Q.atime.getTime(),D=Q.mtime.getTime(),w=Q.ctime.getTime();return i[g+40>>3]=BigInt(Math.floor(C/1e3)),E[g+48>>2]=C%1e3*1e3,i[g+56>>3]=BigInt(Math.floor(D/1e3)),E[g+64>>2]=D%1e3*1e3,i[g+72>>3]=BigInt(Math.floor(w/1e3)),E[g+80>>2]=w%1e3*1e3,i[g+88>>3]=BigInt(Q.ino),0},doMsync(A,I,g,Q,B){if(!r.isFile(I.node.mode))throw new r.ErrnoError(43);if(2&Q)return 0;var E=C.slice(A,A+g);r.msync(I,E,B,g,Q)},getStreamFromFD:A=>r.getStreamChecked(A),varargs:void 0,getStr:A=>K(A)};function t(){var A=B[+q.varargs>>2];return q.varargs+=4,A}var W=t;var l=A=>A<-9007199254740992||A>9007199254740992?NaN:Number(A);var b=(A,I,g)=>J(A,C,I,g),x=A=>{var I=(A-o.buffer.byteLength+65535)/65536;try{return o.grow(I),y(),1}catch(A){}},m={},n=()=>{if(!n.strings){var A={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"==typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:\"./this.program\"};for(var I in m)void 0===m[I]?delete A[I]:A[I]=m[I];var g=[];for(var I in A)g.push(`${I}=${A[I]}`);n.strings=g}return n.strings},O=A=>{throw`exit(${A})`};var V=A=>X(A);r.createPreloadedFile=(A,I,g,Q,B,C,E,D,w,i)=>{var o=I?U.resolve(k.join2(A,I)):A,G=getUniqueRunDependency(`cp ${o}`);function M(g){!function(g){i?.(),D||((A,I,g,Q,B,C)=>{r.createDataFile(A,I,g,Q,B,C)})(A,I,g,Q,B,w),C?.(),removeRunDependency(G)}(g)}addRunDependency(G),\"string\"==typeof g?((A,I,g,Q)=>{var B=Q?\"\":getUniqueRunDependency(`al ${A}`);readAsync(A).then((A=>{I(new Uint8Array(A)),B&&removeRunDependency(B)}),(I=>{if(!g)throw`Loading data file \"${A}\" failed.`;g()})),B&&addRunDependency(B)})(g,M,E):M(g)},r.staticInit();var z,j,X,e,T,p={a:(A,I,g,Q)=>{F(`Assertion failed: ${K(A)}, at: `+[I?K(I):\"unknown filename\",g,Q?K(Q):\"unknown function\"])},b:(A,I,g)=>{throw new N(A).init(I,g),A},v:function(A,I,g,Q){try{if(I=q.getStr(I),I=q.calculateAt(A,I),-8&g)return-28;var B=r.lookupPath(I,{follow:!0}).node;if(!B)return-44;var C=\"\";return 4&g&&(C+=\"r\"),2&g&&(C+=\"w\"),1&g&&(C+=\"x\"),C&&r.nodePermissions(B,C)?-2:0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},f:function(A,I,g){q.varargs=g;try{var B=q.getStreamFromFD(A);switch(I){case 0:if((C=t())<0)return-28;for(;r.streams[C];)C++;return r.dupStream(B,C).fd;case 1:case 2:case 13:case 14:return 0;case 3:return B.flags;case 4:var C=t();return B.flags|=C,0;case 12:C=W();return Q[C+0>>1]=2,0}return-28}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},u:function(A,I){try{var g=q.getStreamFromFD(A);return q.doStat(r.stat,g.path,I)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},k:function(A,I,C){q.varargs=C;try{var E=q.getStreamFromFD(A);switch(I){case 21509:case 21510:case 21511:case 21512:case 21524:case 21515:return E.tty?0:-59;case 21505:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcgets){var D=E.tty.ops.ioctl_tcgets(E),w=W();B[w>>2]=D.c_iflag||0,B[w+4>>2]=D.c_oflag||0,B[w+8>>2]=D.c_cflag||0,B[w+12>>2]=D.c_lflag||0;for(var i=0;i<32;i++)g[w+i+17]=D.c_cc[i]||0;return 0}return 0;case 21506:case 21507:case 21508:if(!E.tty)return-59;if(E.tty.ops.ioctl_tcsets){w=W();var o=B[w>>2],G=B[w+4>>2],M=B[w+8>>2],R=B[w+12>>2],F=[];for(i=0;i<32;i++)F.push(g[w+i+17]);return E.tty.ops.ioctl_tcsets(E.tty,I,{c_iflag:o,c_oflag:G,c_cflag:M,c_lflag:R,c_cc:F})}return 0;case 21519:if(!E.tty)return-59;w=W();return B[w>>2]=0,0;case 21520:return E.tty?-28:-59;case 21531:w=W();return r.ioctl(E,I,w);case 21523:if(!E.tty)return-59;if(E.tty.ops.ioctl_tiocgwinsz){var y=E.tty.ops.ioctl_tiocgwinsz(E.tty);w=W();Q[w>>1]=y[0],Q[w+2>>1]=y[1]}return 0;default:return-28}}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},s:function(A,I,g,Q){try{I=q.getStr(I);var B=256&Q,C=4096&Q;return Q&=-6401,I=q.calculateAt(A,I,C),q.doStat(B?r.lstat:r.stat,I,g)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},h:function(A,I,g,Q){q.varargs=Q;try{I=q.getStr(I),I=q.calculateAt(A,I);var B=Q?t():0;return r.open(I,g,B).fd}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},t:function(A,I){try{return A=q.getStr(A),q.doStat(r.stat,A,I)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},j:()=>{F(\"\")},n:function(A,I,g,Q,C,D,w){C=l(C);try{if(isNaN(C))return 61;var i=q.getStreamFromFD(Q),o=r.mmap(i,A,C,I,g),G=o.ptr;return B[D>>2]=o.allocated,E[w>>2]=G,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},o:function(A,I,g,Q,B,C){C=l(C);try{var E=q.getStreamFromFD(B);2&g&&q.doMsync(A,E,I,Q,C)}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return-A.errno}},l:(A,I,g,Q)=>{var C=(new Date).getFullYear(),D=new Date(C,0,1),w=new Date(C,6,1),i=D.getTimezoneOffset(),o=w.getTimezoneOffset(),G=Math.max(i,o);E[A>>2]=60*G,B[I>>2]=Number(i!=o);var M=A=>{var I=A>=0?\"-\":\"+\",g=Math.abs(A);return`UTC${I}${String(Math.floor(g/60)).padStart(2,\"0\")}${String(g%60).padStart(2,\"0\")}`},R=M(i),F=M(o);oDate.now(),m:A=>{var I=C.length,g=2147483648;if((A>>>=0)>g)return!1;for(var Q,B,E=1;E<=4;E*=2){var D=I*(1+.2/E);D=Math.min(D,A+100663296);var w=Math.min(g,(Q=Math.max(A,D))+((B=65536)-Q%B)%B);if(x(w))return!0}return!1},q:(A,I)=>{var Q=0;return n().forEach(((B,C)=>{var D=I+Q;E[A+4*C>>2]=D,((A,I)=>{for(var Q=0;Q{var g=n();E[A>>2]=g.length;var Q=0;return g.forEach((A=>Q+=A.length+1)),E[I>>2]=Q,0},g:O,c:function(A){try{var I=q.getStreamFromFD(A);return r.close(I),0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},e:function(A,I,Q,B){try{var C=((A,I,Q,B)=>{for(var C=0,D=0;D>2],i=E[I+4>>2];I+=8;var o=r.read(A,g,w,i,B);if(o<0)return-1;if(C+=o,o>2]=C,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},p:function(A,I,g,Q){I=l(I);try{if(isNaN(I))return 61;var B=q.getStreamFromFD(A);return r.llseek(B,I,g),i[Q>>3]=BigInt(B.position),B.getdents&&0===I&&0===g&&(B.getdents=null),0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},d:function(A,I,Q,B){try{var C=((A,I,Q,B)=>{for(var C=0,D=0;D>2],i=E[I+4>>2];I+=8;var o=r.write(A,g,w,i,B);if(o<0)return-1;C+=o,void 0!==B&&(B+=o)}return C})(q.getStreamFromFD(A),I,Q);return E[B>>2]=C,0}catch(A){if(void 0===r||\"ErrnoError\"!==A.name)throw A;return A.errno}},w:function(A){return G.agerrMessages.push(K(A)),0}};G.ccall=(A,I,Q,B,C)=>{var E={string:A=>{var I=0;return null!=A&&0!==A&&(I=(A=>{var I=Y(A)+1,g=V(I);return b(A,g,I),g})(A)),I},array:A=>{var I,Q,B=V(A.length);return I=A,Q=B,g.set(I,Q),B}};var D=(A=>G[\"_\"+A])(A),w=[],i=0;if(B)for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:\"i8\";switch(I.endsWith(\"*\")&&(I=\"*\"),I){case\"i1\":case\"i8\":return g[A];case\"i16\":return Q[A>>1];case\"i32\":return B[A>>2];case\"i64\":return i[A>>3];case\"float\":return D[A>>2];case\"double\":return w[A>>3];case\"*\":return E[A>>2];default:F(`invalid type for getValue: ${I}`)}},G.PATH=k,G.UTF8ToString=K,G.stringToUTF8=b,G.lengthBytesUTF8=Y,G.FS=r;var v={a:p};return WebAssembly.instantiate(G.wasm,v).then((I=>{var g=I.instance.exports;G._viz_set_y_invert=g.z,G._viz_set_reduce=g.A,G._viz_get_graphviz_version=g.B,G._viz_get_plugin_list=g.C,G._viz_create_graph=g.D,G._viz_read_one_graph=g.E,G._viz_string_dup=g.F,G._viz_string_dup_html=g.G,G._viz_string_free=g.H,G._viz_add_node=g.I,G._viz_add_edge=g.J,G._viz_add_subgraph=g.K,G._viz_set_default_graph_attribute=g.L,G._viz_set_default_node_attribute=g.M,G._viz_set_default_edge_attribute=g.N,G._viz_set_attribute=g.O,G._viz_free_graph=g.P,G._viz_render_graph=g.Q,G._free=g.S,G._malloc=g.T,z=g.U,j=g.V,X=g.W,e=g.X,T=g.Y,o=g.x,y(),function(A){A.y(),G.noFSInit||r.init.initialized||r.init(),r.ignorePermissions=!1}(g),A(G)})),M};const I=[[/^Error: (.*)/,\"error\"],[/^Warning: (.*)/,\"warning\"]];function g(A){return function(A){const I=[];let g;for(let Q=0;Q{for(let g=0;g{A.ccall(\"viz_set_default_graph_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}));if(g.nodeAttributes)for(const[B,C]of Object.entries(g.nodeAttributes))Q(A,I,C,(g=>{A.ccall(\"viz_set_default_node_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}));if(g.edgeAttributes)for(const[B,C]of Object.entries(g.edgeAttributes))Q(A,I,C,(g=>{A.ccall(\"viz_set_default_edge_attribute\",\"number\",[\"number\",\"string\",\"number\"],[I,B,g])}))}function C(A,I,g,B){for(const[C,E]of Object.entries(B))Q(A,I,E,(I=>{A.ccall(\"viz_set_attribute\",\"number\",[\"number\",\"string\",\"number\"],[g,C,I])}))}function E(A,I,g){B(A,I,g),g.nodes&&g.nodes.forEach((g=>{const Q=A.ccall(\"viz_add_node\",\"number\",[\"number\",\"string\"],[I,String(g.name)]);g.attributes&&C(A,I,Q,g.attributes)})),g.edges&&g.edges.forEach((g=>{const Q=A.ccall(\"viz_add_edge\",\"number\",[\"number\",\"string\",\"string\"],[I,String(g.tail),String(g.head)]);g.attributes&&C(A,I,Q,g.attributes)})),g.subgraphs&&g.subgraphs.forEach((g=>{const Q=A.ccall(\"viz_add_subgraph\",\"number\",[\"number\",\"string\"],[I,String(g.name)]);E(A,Q,g)}))}function D(A,I,g){const Q=A.ccall(\"viz_create_graph\",\"number\",[\"string\",\"number\",\"number\"],[I.name,void 0===I.directed||I.directed,void 0!==I.strict&&I.strict]);return E(A,Q,I),Q}function w(A,I,Q){let C,E,w;try{if(A.agerrMessages=[],A.stderrMessages=[],w=function(A,I){return I?I.map((I=>{if(\"string\"!=typeof I.name)throw new Error(\"image name must be a string\");if(\"number\"!=typeof I.width&&\"string\"!=typeof I.width)throw new Error(\"image width must be a number or string\");if(\"number\"!=typeof I.height&&\"string\"!=typeof I.height)throw new Error(\"image height must be a number or string\");const g=A.PATH.join(\"/\",I.name),Q=`\\n\\n`;return A.FS.createPath(\"/\",A.PATH.dirname(g)),A.FS.writeFile(g,Q),g})):[]}(A,Q.images),\"string\"==typeof I)C=function(A,I,g){let Q;try{const g=A.lengthBytesUTF8(I);return Q=A.ccall(\"malloc\",\"number\",[\"number\"],[g+1]),A.stringToUTF8(I,Q,g+1),A.ccall(\"viz_read_one_graph\",\"number\",[\"number\"],[Q])}finally{Q&&A.ccall(\"free\",\"number\",[\"number\"],[Q])}}(A,I);else{if(\"object\"!=typeof I)throw new Error(\"input must be a string or object\");C=D(A,I)}return 0===C?{status:\"failure\",output:void 0,errors:g(A)}:(B(A,C,Q),A.ccall(\"viz_set_y_invert\",\"number\",[\"number\"],[Q.yInvert?1:0]),A.ccall(\"viz_set_reduce\",\"number\",[\"number\"],[Q.reduce?1:0]),E=A.ccall(\"viz_render_graph\",\"number\",[\"number\",\"string\",\"string\"],[C,Q.format,Q.engine]),0===E?{status:\"failure\",output:void 0,errors:g(A)}:{status:\"success\",output:A.UTF8ToString(E),errors:g(A)})}catch(I){if(/^exit\\(\\d+\\)/.test(I))return{status:\"failure\",output:void 0,errors:g(A)};throw I}finally{C&&A.ccall(\"viz_free_graph\",\"number\",[\"number\"],[C]),E&&A.ccall(\"free\",\"number\",[\"number\"],[E]),w&&function(A,I){for(const g of I)A.FS.analyzePath(g).exists&&A.FS.unlink(g)}(A,w)}}function i(A,I){const g=A.ccall(\"viz_get_plugin_list\",\"number\",[\"string\"],[I]);if(0==g)throw new Error(`couldn't get plugin list: ${I}`);const Q=[];let B,C=g;for(;B=A.getValue(C,\"*\");)Q.push(A.UTF8ToString(B)),A.ccall(\"free\",\"number\",[\"number\"],[B]),C+=4;return A.ccall(\"free\",\"number\",[\"number\"],[g]),Q}class o{constructor(A){this.module=A}get graphvizVersion(){return function(A){const I=A.ccall(\"viz_get_graphviz_version\",\"number\",[],[]);return A.UTF8ToString(I)}(this.module)}get formats(){return i(this.module,\"device\")}get engines(){return i(this.module,\"layout\")}render(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return w(this.module,A,{format:\"dot\",engine:\"dot\",...I})}renderString(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.render(A,I);if(\"success\"!==g.status)throw new Error(g.errors.find((A=>\"error\"==A.level))?.message||\"render failed\");return g.output}renderSVGElement(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:\"svg\"});return(new DOMParser).parseFromString(g,\"image/svg+xml\").documentElement}renderJSON(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=this.renderString(A,{...I,format:\"json\"});return JSON.parse(g)}}const G=\"AGFzbQEAAAABkgdzYAJ/fwF/YAF/AGABfwF/YAN/f38Bf2ACf38AYAN/f38AYAR/f39/AX9gBX9/f39/AX9gBH9/f38AYAV/f39/fwBgBn9/f39/fwF/YAZ/f39/f38AYAAAYAABf2AIf39/f39/f38Bf2AHf39/f39/fwF/YAJ/fwF8YAF8AXxgB39/f39/f38AYAd/f39/fHx/AGADf39/AXxgAX8BfGACf3wAYAR8fHx/AXxgAnx8AXxgA398fABgA39/fgF/YAl/f39/f39/f38AYAV/fn5+fgBgBH9/f3wAYAR/f3x8AX9gCn9/f39/f39/f38Bf2ADfHx8AXxgA39/fgBgAAF8YAR/f39/AXxgA39+fwF+YAJ/fgF/YAN/f3wAYAV/f39/fgF/YAR/fn5/AGAEf398fwBgAnx/AXxgBH9/f3wBf2ADfHx/AXxgA398fwBgCH9/f39/f39/AGACf3wBf2AFf39/f3wBf2ALf39/f39/f39/f38Bf2AFf39+f38AYAR/f3x/AX9gAn9+AGAFf39/f3wAYAN/f3wBf2ABfwF+YAZ/fHx8fHwBfGAHf39/fHx/fwBgBX9/fH9/AX9gA39/fwF+YAx/f39/f39/f39/f38Bf2ACfX0BfWACf38BfmAGf39/fH9/AGAGf39/f35/AX9gD39/f39/f39/f39/f39/fwBgCn9/f39/f39/f38AYAR/f39/AX5gBn98f39/fwF/YAd/f39/f35+AX9gBn9/f39+fgF/YAd/f39/fn9/AX9gBn9/f39/fgF/YAR/fn9/AX9gBH9/fHwBfGAFf398f38AYAl/f39/f39/f38Bf2AEf398fABgBn9/f3x/fwF/YAJ/fQF/YAR+fn5+AX9gCH9/f398fHx/AGADf31/AGACfn8Bf2ABfAF/YAZ/fX9/f38AYAR/f31/AGACfn4BfWACf30AYAR/f39+AX5gBnx8fH9/fwBgBH98fHwAYAJ+fgF8YAJ8fwF/YAV/f398fwBgBn9/f3x8fwBgA398fAF/YAd/fHx8fHx8AGAEf3x/fwF/YAp/fH9/f39/f39/AGAFf39/f38BfGAHf39/f3x/fwF/YAV/f31/fwBgA3x8fAF/YAV/f3x8fABgA39/fwF9YAN+fn4Bf2AEf35+fgBgA39+fwF/YAABfmABfwF9YAN/fn4B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BSADEGgLIAAgACAFELwNDAELIAAgASACEOgNIQULIAdBMGokACAFDwtBhdEBQb/8AEEMQcc7EAAACzMBAX8gAgRAIAAhAwNAIAMgAS0AADoAACADQQFqIQMgAUEBaiEBIAJBAWsiAg0ACwsgAAsUACAAECUEQCAALQAPDwsgACgCBAsVACAAEKEBBEAgACgCBA8LIAAQmQMLJgAgACABEPEHIgFFBEBBAA8LIAAQ5gEoAgwgASgCEEECdGooAgALQwAgACAAIAGlIAG9Qv///////////wCDQoCAgICAgID4/wBWGyABIAC9Qv///////////wCDQoCAgICAgID4/wBYGwsuACAALQAPIgBBAWpB/wFxQRFPBEBB/bIDQY/9AEHIAEG4lwEQAAALIABB/wFHCwcAQQEQBgALCwAgACABQQAQ/wYLPAEBf0EHIQICQAJAAkAgAEEoag4IAgICAgAAAAABC0EIDwsgAEF/RyABQX1NckUEQEEADwtBHSECCyACC0IBAX8gACABEOQBIgFFBEBBAA8LIAAoAjQgASgCIBDYASAAKAI0IgJBAEGAASACKAIAEQMAIAEgACgCNBDxAjYCIAtvAQJ/IAAtAAAiAgR/AkADQCABLQAAIgNFDQECQCACIANGDQAgAhD3ASABLQAAEPcBRg0AIAAtAAAhAgwCCyABQQFqIQEgAC0AASECIABBAWohACACDQALQQAhAgsgAgVBAAsQ9wEgAS0AABD3AWsLLAACQAJAAkAgACgCAEEDcUEBaw4DAQAAAgsgACgCKCEACyAAKAIYIQALIAALVQECfyAAIAFBMEEAIAEoAgBBA3FBA0cbaigCKBDkASIDBEAgACgCNCADKAIgENgBIAAoAjQiAiABQQggAigCABEDACECIAMgACgCNBDxAjYCIAsgAgsqAQF/IwBBEGsiAyQAIAMgAjYCDCAAIAEgAkGEBEEAEK0HGiADQRBqJAALkwEBAn8gABArIQUCQCAAIAFBABBrIgQgAkVyDQAgAhDjASIEIAUgARCqATYCAAJAIAAoAhAiAkUEQCAEIAQ2AgQMAQsgAiACKAIEIgVGBEAgAiAENgIEIAQgAjYCBAwBCyAEIAU2AgQgAiAENgIECyAALQAAQQRxDQAgACAEQQAQ3gcLIAMEQCAAIAFBARBrGgsgBAscAQF/IAAQoQEEQCAAKAIAIAAQ6AIaEKYFCyAAC6QBAwF8AX4BfyAAvSICQjSIp0H/D3EiA0GyCE0EfCADQf0HTQRAIABEAAAAAAAAAACiDwsCfCAAmSIARAAAAAAAADBDoEQAAAAAAAAww6AgAKEiAUQAAAAAAADgP2QEQCAAIAGgRAAAAAAAAPC/oAwBCyAAIAGgIgAgAUQAAAAAAADgv2VFDQAaIABEAAAAAAAA8D+gCyIAmiAAIAJCAFMbBSAACwsLACAAIAFBARD/BgtDACAAIAAgAaQgAb1C////////////AINCgICAgICAgPj/AFYbIAEgAL1C////////////AINCgICAgICAgPj/AFgbCykBAX8gAgRAIAAhAwNAIAMgAToAACADQQFqIQMgAkEBayICDQALCyAAC0IAIABFBEBBAA8LAn8CQAJAAkAgACgCAEEDcUEBaw4DAQAAAgsgACgCKEEYagwCCyAAQRhqDAELIABByABqCygCAAspACAAKAIwEKIDQQBIBEBB+sgBQZa7AUGgAUHzMBAAAAsgACgCMBCiAwtgAQJ/AkAgACgCPCIDRQ0AIAMoAmwiBEUNACAAKAIQKAKYAUUNACAALQCZAUEgcQRAIAAgASACIAQRBQAPCyAAIAAgASACQRAQGCACEJICIgAgAiADKAJsEQUAIAAQFwsLfQEDfwJAAkAgACIBQQNxRQ0AIAEtAABFBEBBAA8LA0AgAUEBaiIBQQNxRQ0BIAEtAAANAAsMAQsDQCABIgJBBGohAUGAgoQIIAIoAgAiA2sgA3JBgIGChHhxQYCBgoR4Rg0ACwNAIAIiAUEBaiECIAEtAAANAAsLIAEgAGsLFwEBf0EPIQEgABAlBH9BDwUgACgCCAsLkAEBA38CQCAAECIiAiABSQRAIwBBEGsiBCQAIAEgAmsiAgRAIAIgABBVIgMgABAiIgFrSwRAIAAgAyACIANrIAFqIAEgARCQBwsgASAAEEAiA2ogAkEAEPgKIAAgASACaiIAEJMDIARBADoADyAAIANqIARBD2oQyQELIARBEGokAAwBCyAAIAAQQCABEI0LCwu9FwMKfwR8AX4jAEFAaiINJAADQCAGIQ4CfwJAAkACQCAFIgZBAEwNACANIAApAAAiFzcDICAGIBdCIIinTw0BQQEgBkEHcXQiBSAGQQN2IgsgDUEgaiAXpyIKIBdCgICAgJAEVCIMG2otAABxDQAgAygCBCEJIAAgCiAMGyALaiILIAstAAAgBXI6AAACQCAJIAZByABsaiIKKwMQIhMgCisDICIUREivvJry13o+oGRFDQAgAiAKKAIAQThsaiIFKwMAIhUgBSsDEKGZREivvJry13o+ZUUNACACIAooAgRBOGxqIgUrAwAiFiAFKwMQoZlESK+8mvLXej5lRQ0AIA1CADcDMCANQgA3AyggDUIANwMgAkAgBwRAIA0gEzkDMCANIBQ5AyAgDSAWmjkDKCAVmiETDAELIA0gFjkDMCANIBQ5AyggDSAVOQMgCyANIBM5AzggDSANKQMoNwMIIA0gDSkDMDcDECANIA0pAzg3AxggDSANKQMgNwMAIAEgDRCABAsCQCAKKAIoIg9BAEoNACAKKAIsQQBKDQACQCAKKAIwQQBMDQAgCigCNCIIQQBMDQAgCkEwaiEFIApBNGohCyADKAIEIAhByABsaigCACEMIAooAgAhCSAIIA5GBEAgBCAJIAwQtQEgACABIAIgAyAEIAsoAgAgBiAHQQEQOiEEQQEMBgsgBCAMIAkQtQEgACABIAIgAyAEIAooAjAgBiAHQQEQOiEEIAshBUEBDAULIAAgASACIAMgBCAPIAYgB0ECEDogACABIAIgAyAEIAooAiwgBiAHQQIQOiAAIAEgAiADIAQgCigCMCAGIAdBARA6IApBNGohBUEBDAQLIApBKGohCwJAIAooAjAiEUEASiIMDQAgCigCNEEASg0AAkAgD0EATA0AIAooAiwiCUEATA0AIApBLGohBSADKAIEIA9ByABsaigCBCEIIAooAgQhDCAJIA5GBEAgBCAIIAwQtQEgACABIAIgAyAEIAooAiwgBiAHQQIQOiEEIAshBUECDAYLIAQgDCAIELUBIAAgASACIAMgBCALKAIAIAYgB0ECEDohBEECDAULIApBNGohBSAAIAEgAiADIAQgDyAGIAdBAhA6IAAgASACIAMgBCAKKAIsIAYgB0ECEDogACABIAIgAyAEIAooAjAgBiAHQQEQOkEBDAQLIAoiCUEwaiEFIAlBLGohCiAJKAIsIRACQCAPQQBKBEAgEEEATA0BAkAgEUEATA0AIAkoAjQiEUEATA0AIAlBNGohDCADKAIEIhIgD0HIAGxqKAIEIQ8gEiARQcgAbGoo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ELMHCyIDNgIAIANBf0YNASAAQQFqIgBBBkcNAAtBABD2C0UEQEHI+QYhASAEQcj5BkEYEMIBRQ0CQeD5BiEBIARB4PkGQRgQwgFFDQJBACEAQcCsCy0AAEUEQANAIABBAnRBkKwLaiAAQeX0BBCzBzYCACAAQQFqIgBBBkcNAAtBwKwLQQE6AABBqKwLQZCsCygCADYCAAtBkKwLIQEgAkEIaiIAQZCsC0EYEMIBRQ0CQaisCyEBIABBqKwLQRgQwgFFDQJBGBBCIgFFDQELIAEgAikCCDcCACABIAIpAhg3AhAgASACKQIQNwIIDAELQQAhAQsgAkEgaiQAQaSvC0EBOgAAQaCvCyABNgIAIAELFQAgAC0AD0H/AUYEQCAAKAIAEBcLC78KAgV/D34jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhEIAIQFQBEBCgICAgICA4P//ACEKDAMLIApCgICAgICAwP//AIQhCgwCCyABIAuEUARAQgAhAQwCCyACIAOEUARAQgAhAQwCCyALQv///////z9YBEAgBUHQAGogASANIAEgDSANUCIGG3kgBkEGdK18pyIGQQ9rELEBQRAgBmshBiAFKQNYIg1CIIghDiAFKQNQIQELIAJC////////P1YNACAFQUBrIAMgDCADIAwgDFAiCBt5IAhBBnStfKciCEEPaxCxASAGIAhrQRBqIQYgBSkDSCEMIAUpA0AhAwsgA0IPhiILQoCA/v8PgyICIAFCIIgiBH4iECALQiCIIhMgAUL/////D4MiAX58Ig9CIIYiESABIAJ+fCILIBFUrSACIA1C/////w+DIg1+IhUgBCATfnwiESAMQg+GIhIgA0IxiIRC/////w+DIgMgAX58IhQgDyAQVK1CIIYgD0IgiIR8Ig8gAiAOQoCABIQiDH4iFiANIBN+fCIOIBJCIIhCgICAgAiEIgIgAX58IhAgAyAEfnwiEkIghnwiF3whASAHIAlqIAZqQf//AGshBgJAIAIgBH4iGCAMIBN+fCIEIBhUrSAEIAQgAyANfnwiBFatfCACIAx+fCAEIAQgESAVVK0gESAUVq18fCIEVq18IAMgDH4iAyACIA1+fCICIANUrUIghiACQiCIhHwgBCACQiCGfCICIARUrXwgAiACIBAgElatIA4gFlStIA4gEFatfHxCIIYgEkIgiIR8IgJWrXwgAiACIA8gFFStIA8gF1atfHwiAlatfCIEQoCAgICAgMAAg1BFBEAgBkEBaiEGDAELIAtCP4ggBEIBhiACQj+IhCEEIAJCAYYgAUI/iIQhAiALQgGGIQsgAUIBhoQhAQsgBkH//wFOBEAgCkKAgICAgIDA//8AhCEKQgAhAQwBCwJ+IAZBAEwEQEEBIAZrIgdB/wBNBEAgBUEwaiALIAEgBkH/AGoiBhCxASAFQSBqIAIgBCAGELEBIAVBEGogCyABIAcQmwMgBSACIAQgBxCbAyAFKQMwIAUpAziEQgBSrSAFKQMgIAUpAxCEhCELIAUpAyggBSkDGIQhASAFKQMAIQIgBSkDCAwCC0IAIQEMAgsgBEL///////8/gyAGrUIwhoQLIAqEIQogC1AgAUIAWSABQoCAgICAgICAgH9RG0UEQCAKIAJCAXwiAVCtfCEKDAELIAsgAUKAgICAgICAgIB/hYRQRQRAIAIhAQwBCyAKIAIgAkIBg3wiASACVK18IQoLIAAgATcDACAAIAo3AwggBUHgAGokAAvdAQEDfyAAECshAyAAEOYBIQUCQCABKAIQIgRBAEgNACAAENMFIARMDQAgAyAFKAIMIAEoAhBBAnRqKAIAEIkBGiADIAIQqgEhBCAFKAIMIAEoAhBBAnRqIAQ2AgACQCAALQAAQQNxDQAgA0EAELICKAIQIgUgASgCCBDwByIEBEAgAyAEKAIMEIkBGiAEIAMgAhCqATYCDAwBCyAFIAMgASgCCCACIAEoAhAgACgCAEEDcRCxBEEBIAUoAgARAwAaCyADIAAgARC8DQ8LQe+cA0GQuQFB6wNB9x8QAAALHwAgAUUEQEHT0AFBv/wAQQ1BxzsQAAALIAAgARBDRQsJACAAQQAQiggLpAEBBH8gACgCECIEIQMCQAJAAkADQCADRQ0BIAFFDQIgAygCACIGRQ0DIAEgBhBDBEAgAygCBCIDIARHDQEMAgsLAkAgAC0AAEEEcQRAIAJFIAMgBEZyDQFB5w5BABAxDAELIAJFIAMgBEZxDQAgACADIAJBAEcQ3gcLIAMhBQsgBQ8LQYXRAUG//ABBDEHHOxAAAAtB09ABQb/8AEENQcc7EAAAC34BA38jAEEQayIBJAAgASAANgIMIwBBEGsiAiQAIAAoAgBBf0cEQCACQQhqIAJBDGogAUEMahCeAhCeAiEDA0AgACgCAEEBRg0ACyAAKAIARQRAIABBATYCACADEKILIABBfzYCAAsLIAJBEGokACAAKAIEIAFBEGokAEEBawsgACAAIAFBAWs2AgQgAEGI7Ac2AgAgAEHgwwc2AgAgAAsFABAJAAsZAQF/IAAgARApIgIEfyACBSAAIAEQsQILC9YIAQ1/IwBBEGsiDCQAIAEQqAsjAEEQayIDJAAgAyABNgIMIAxBDGogA0EMahCXAyEJIANBEGokACAAQQhqIgEQwAIgAk0EQAJAIAJBAWoiACABEMACIgNLBEAjAEEgayINJAACQCAAIANrIgYgARCVBSgCACABKAIEa0ECdU0EQCABIAYQqgsMAQsgARCQAyEHIA1BDGohAAJ/IAEQwAIgBmohBSMAQRBrIgQkACAEIAU2AgwgBSABEIULIgNNBEAgARCBCyIFIANBAXZJBEAgBCAFQQF0NgIIIARBCGogBEEMahDUAygCACEDCyAEQRBqJAAgAwwBCxC/AQALIQUgARDAAiEIQQAhAyMAQRBrIgQkACAEQQA2AgwgAEEMahCGC0EEaiAHEJ4CGiAFBH8gBEEEaiAAKAIQIAUQhAsgBCgCBCEDIAQoAggFQQALIQUgACADNgIAIAAgAyAIQQJ0aiIHNgIIIAAgBzYCBCAAEIgHIAMgBUECdGo2AgAgBEEQaiQAIwBBEGsiAyQAIAAoAgghBCADIABBCGo2AgwgAyAENgIEIAMgBCAGQQJ0ajYCCCADKAIEIQQDQCADKAIIIARHBEAgACgCEBogAygCBBCDCyADIAMoAgRBBGoiBDYCBAwBCwsgAygCDCADKAIENgIAIANBEGokACMAQRBrIgYkACABEJADGiAGQQhqIAEoAgQQngIgBkEEaiABKAIAEJ4CIQQgBiAAKAIEEJ4CIQUoAgAhByAEKAIAIQggBSgCACEKIwBBEGsiBSQAIAVBCGojAEEgayIDJAAjAEEQayIEJAAgBCAHNgIMIAQgCDYCCCADQRhqIARBDGogBEEIahCnBSAEQRBqJAAgA0EMaiADKAIYIQcgAygCHCELIANBEGojAEEQayIEJAAgBCALNgIIIAQgBzYCDCAEIAo2AgQDQCAEQQxqIgcoAgAgBCgCCEcEQCAHEP8KKAIAIQogBEEEaiILEP8KIAo2AgAgBxD+CiALEP4KDAELCyAEQQxqIARBBGoQ9AEgBEEQaiQAIAMgAygCEDYCDCADIAMoAhQ2AgggA0EIahD0ASADQSBqJAAgBSgCDCEDIAVBEGokACAGIAM2AgwgACAGKAIMNgIEIAEgAEEEahCqBSABQQRqIABBCGoQqgUgARCVBSAAEIgHEKoFIAAgACgCBDYCACABEMACGiAGQRBqJAAgACgCBCEDA0AgAyAAKAIIRwRAIAAoAhAaIAAgACgCCEEEazYCCAwBCwsgACgCAARAIAAoAhAgACgCACAAEIgHKAIAGiAAKAIAGhCACwsLIA1BIGokAAwBCyAAIANJBEAgASgCACAAQQJ0aiEAIAEQwAIaIAEgABCCCwsLCyABIAIQkgMoAgAEQCABIAIQkgMoAgAQmQULIAkQ3AMhACABIAIQkgMgADYCACAJKAIAIQAgCUEANgIAIAAEQCAAEJkFCyAMQRBqJAALJQEBfyAAKAJEIgFFBEBBAA8LIAEoAjwiASAAQQggASgCABEDAAsWACAAKAI8IgBBAEGAASAAKAIAEQMAC9cBAQN/IwBBEGsiBCQAIAAQNCEFAkACQAJAAkAgAEEBIAEgBEEIakEAEKMDRQ0AIAAgBCkDCBDjAyIDDQIgAkUgACAFRnINACAFIAQpAwgQ4wMiAkUNASAAIAJBARB7IQMMAgtBACEDIAJFDQELIABBASABIARBCGpBARCjA0UEQEEAIQMMAQsgACAAIAQpAwggAEEBEOkHEMQNIgMQww0gACADEMINIAAgAxDkAUUNASAAQQEgAxDNBQsgBEEQaiQAIAMPC0GcnANBlL0BQakBQaqfARAAAAtvAAJAAkAgASgCAEEDcUECRgRAIAAgARAsIgENAUEAIQEDQAJ/IAFFBEAgACACELECDAELIAAgARD4AgsiAUUNAyABKAIoIAJGDQALDAELA0AgACABEPgCIgFFDQIgASgCKCACRg0ACwsgAQ8LQQALHAEBfyAAEKEBBEAgACgCACAAEOgCGhCUBAsgAAvKAQEEfyMAQdAAayICJAACQAJAIAGZRHsUrkfhenQ/YwRAIABBlJcDQQEQkwIaDAELIAIgATkDACACQRBqIgNBMkHDhgEgAhClARogACACQRBqAn8CQCADQS4QkwEiAEUNACAALAABIgRBMGtBCUsNAyAALAACIgVBMGtBCUsNAyAALQADDQMgBUEwRw0AIAAgA2siACAAQQJqIARBMEYbDAELIAJBEGoQNwsQkwIaCyACQdAAaiQADwtBiKQDQam9AUHtA0HcKhAAAAsJACAAQQAQjQELMgEBfyMAQRBrIgMkACADIAE2AgwgACADQQxqEJcDIgBBBGogAhCXAxogA0EQaiQAIAALcgEBf0F/IQECQCAARQ0AIAAoAhBBAEoNACAAKAIUBEAgAEEAEPACGgsgAEEAQcAAIAAoAgwoAgARAwAaIAAQhwFBAEoNACAAKAIIIgEoAgxBAEoEfyABKAIIEBcgACgCCAUgAQsQFyAAEBdBACEBCyABCxUAIABFIAFFcgR/IAIFIAAgARA+CwtEAQJ/AkAgABA0IAEoAhhHDQAgACABKQMIEOMDIgMgAkVyDQBBACEDIAAoAkQiBEUNACAAIAQgASACEHsiAxDBDQsgAwsLACAAIAFBAxD/BgsKACAAKAIAEJAMCwsAIAAoAgAQmQzAC5UBAQJ/AkAgAEUgAUVyDQBBIBBCIgJFDQAgAkEANgIMIAJCADcCACACIAAQxwUaQRgQQiEDIAJCADcCGCACQgA3AhAgA0UEQCACEBdBAA8LIAEoAgQhACADQgA3AgQgAyAANgIAIANCADcCDCADQQA2AhQgAiADNgIIIAEoAgAhACACIAE2AgwgAiAANgIAIAIhAwsgAwsLACAAIAFBARD6DgssAQF/IwBBEGsiAiQAIAJByPwEKAIANgIMIAEgAkEMaiAAELkEIAJBEGokAAs8AQJ/QQEgACAAQQFNGyEBA0ACQCABEEIiAA0AQey8CygCACICRQ0AIAIRDAAMAQsLIABFBEAQvwELIAALGABBf0EAIABBASAAEDciACABEEogAEcbC00BAX8CQCAAIAEgAiADEMQFRQ0AIAAoAgwiAyAAKAIIRgRAIAAQX0UNASAAKAIMIQMLIAAgA0EBajYCDCADQQA6AAAgACgCECEECyAEC8YBAQR/IwBBEGsiBCQAIAQgAjYCDAJAIAEtAERFBEACfyABIAAoApwBRgRAIABBqAJqIQUgAEGsAmoMAQsgACgCtAIiBUEEagshAgNAIAQgACgCODYCCCABIARBDGogAyAEQQhqIAAoAjwgASgCOBEHACACIAQoAgw2AgAgACgCBCAAKAI4IgcgBCgCCCAHayAAKAJcEQUAIAUgBCgCDDYCAEEBSw0ACwwBCyAAKAIEIAIgAyACayAAKAJcEQUACyAEQRBqJAALIgEBfyAAIAEgAkEAEB8iAwR/IAMFIAAgASACQeX0BBAfCwt/AQN/IAAoAggiAS0AAUEQcQRAIABBABDYASAAKAIIIQELAkAgASgCECIAQQBODQACQCABKAIAIgJBDHEEQCABKAIEEJINIQAMAQsgAkHAAHFFDQEgAUEIaiEDQQAhAgNAIAIiAEEBaiECIAMoAgAiAw0ACwsgASAANgIQCyAAC7oCAQV/IAAoAggiAigCACIBQYAgcQRAIAIoAgQPCwJAIAFBAXEEQCACKAIIIgMgAigCDEECdGohBUEAIQJBACEBA0AgAyAFTw0CIAMoAgAiBARAAkAgAUUEQCAEIgIhAQwBCyABIAQ2AgALA0AgASIEKAIAIgENAAsgAyAENgIAIAQhAQsgA0EEaiEDDAALAAsgAUHAAHEEQCACKAIIIQIMAQsgAigCBCICRQRAQQAhAgwBCwNAIAIoAgQiAQRAIAIgASgCADYCBCABIAI2AgAgASECDAELCyACIQEDQCABIgQoAgAiAUUNASABKAIEIgNFDQADQCABIAMoAgA2AgQgAyABNgIAIAMiASgCBCIDDQALIAQgATYCAAwACwALIAAoAggiACACNgIEIAAgACgCAEGAIHI2AgAgAguhAQIEfwJ+IwBBIGsiBCQAQX8hBQJAIAFFDQAgABDMBSECIAQgATYCGCACIARBCGpBBCACKAIAEQMAIgNFDQBBACEFIAMoAhAgAUcNACADIAMpAwgiBkIBfUL///////////8AgyIHIAZCgICAgICAgICAf4OENwMIIAdCAFINAEHMlAsgADYCACACIANBAiACKAIAEQMAGgsgBEEgaiQAIAULRwEFfyMAQRBrIgAkACAAEKgBQbyRCygCACEBQbiRCygCACECIAAoAgAgACgCBCAAQRBqJABqIAEgAmprt0QAAAAAAABOQKMLLAAgAkUEQCAAKAIEIAEoAgRGDwsgACABRgRAQQEPCyAAKAIEIAEoAgQQQ0ULhQIBA38jAEEQayIDJAAgAyACNgIEIAMgAjYCDCADIAI2AggCQAJAAkBBAEEAIAEgAhBOIgJBAEgNACACQQFqIQUgAiAAEDggABAhayIETwRAIAAgBSAEaxC4AgsgABAhIQQgAiAAECUEfyAAIARqBSAAKAIAIARqCyAFIAEgAygCDBBOIgFHIAFBAE5xDQEgAUEATA0AIAAQJQRAIAFBgAJPDQMgACAALQAPIAFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBxAFB2R0QAAALIAAgACgCBCABajYCBAsgA0EQaiQADwtBzZYDQY/9AEG/AUHZHRAAAAtB0skBQY/9AEHCAUHZHRAAAAskAQF/IAAoAgAhAiAAIAE2AgAgAgRAIAIgABDJAygCABEBAAsLBQAQbgALSgEBfyAAIAFJBEAgACABIAIQIA8LIAIEQCAAIAJqIQMgASACaiEBA0AgA0EBayIDIAFBAWsiAS0AADoAACACQQFrIgINAAsLIAALxQECBH8BfiMAQRBrIgMkAAJAAkAgAUUNACAAQQAgASADQQhqQQAQowNFDQAgACADKQMIEKoNIgQNAQtBACEEIAJFDQAgAEEAIAEgA0EIakEBEKMDRQ0AIABBACAAIAMpAwgiBxCqDSIERQRAQdAAEOMBIgEgACgCTDYCTCABIAAoAhgiAjYCGCABIAA2AkQgASACQfcBcToAGCAAKAJIIQAgASAHNwMIIAEgADYCSCABEN8NIQQLIAQQzQULIANBEGokACAECw0AIAAoAgAQjwwaIAALDQAgACgCABCYDBogAAsaACAAIAEQtgUiAEEAIAAtAAAgAUH/AXFGGwvFBAEGfyAAIQUjAEHQAWsiBCQAIARCATcDCAJAIAEgAmwiCEUNACAEIAI2AhAgBCACNgIUQQAgAmshCSACIgAhB0ECIQYDQCAEQRBqIAZBAnRqIAAiASACIAdqaiIANgIAIAZBAWohBiABIQcgACAISQ0ACwJAIAUgBSAIaiAJaiIBTwRAQQEhAAwBC0EBIQZBASEAA0ACfyAGQQNxQQNGBEAgBSACIAMgACAEQRBqELUHIARBCGpBAhC6BSAAQQJqDAELAkAgBEEQaiIHIABBAWsiBkECdGooAgAgASAFa08EQCAFIAIgAyAEQQhqIABBACAHELkFDAELIAUgAiADIAAgBEEQahC1BwsgAEEBRgRAIARBCGpBARC4BUEADAELIARBCGogBhC4BUEBCyEAIAQgBCgCCEEBciIGNgIIIAIgBWoiBSABSQ0ACwsgBSACIAMgBEEIaiAAQQAgBEEQahC5BQJAIABBAUcNACAEKAIIQQFHDQAgBCgCDEUNAQsDQAJ/IABBAUwEQCAEQQhqIgEgARC8DCIBELoFIAAgAWoMAQsgBEEIaiIBQQIQuAUgBCAEKAIIQQdzNgIIIAFBARC6BSAFIAlqIgggBEEQaiIHIABBAmsiBkECdGooAgBrIAIgAyABIABBAWtBASAHELkFIAFBARC4BSAEIAQoAghBAXI2AgggCCACIAMgASAGQQEgBxC5BSAGCyEAIAUgCWohBSAAQQFHDQAgBCgCCEEBRw0AIAQoAgwNAAsLIARB0AFqJAAL8AUBA38gACgCRCEDIAAQciEBA0AgAQRAIAEQcSABEJUBIQEMAQsLIAAQGiEBA0AgAQRAIAAgARAbIAAgARCwBCEBDAELC0GUkwsgADYCACAAKAJMQSxqEMoNIAAoAkxBOGoQyg0gACAAEN8HAkACQAJAAkACQAJAIAAoAjAiAQRAIAEQogMNAQJAIABBMGoEQCAAKAIwIgEEfyABKAIAEBcgACgCMAVBAAsQFyAAQQA2AjAMAQtBjtABQZS9AUGiBEHVngEQAAALIAAoAiwQhwENAgJAIAAgACgCLBDHAg0AIAAoAjgQhwENBCAAIAAoAjgQxwINACAAKAI0EIcBDQUgACAAKAI0EMcCDQAgACgCPBCHAQ0GIAAgACgCPBDHAg0AIAAoAkAQhwENByAAIAAoAkAQxwINACAALQAYQSBxBEBBACECQZSTCyAANgIAIAAQ5gEiAQRAIAAgARDlDSAAIAEoAgAQ2QELAkAgAEEAELICIgFFDQBBASECIAAgASgCCBDHAg0AIAAgASgCDBDHAg0AIAAgASgCEBDHAg0AIAAgASgCABDZAUEAIQILIAINAQsgABDdByAAQQAgACkDCBDiBwJAIAMEQCADIAAQqA0gABAXDAELA0AgACgCTCIBKAIoIgIEQCACKAIAIQMgACgCTCICKAIoIgFFDQECQCADIAEoAgBGBEAgAiABKAIINgIoDAELA0AgASICKAIIIgEoAgAgA0cNAAsgAiABKAIINgIIIAIhAQsgARAXDAELCyABKAIIIAEoAgAoAhQRAQAgACAAEMwFEMcCDQEgACgCTCAAEBcQFwsLDwtBjtABQdH7AEE4QaAJEAAAC0H/ngNBlrsBQfQAQcCTARAAAAtB4JQDQZa7AUH2AEHAkwEQAAALQcqVA0GWuwFB+QBBwJMBEAAAC0GMlQNBlrsBQfsAQcCTARAAAAtB9pQDQZa7AUH+AEHAkwEQAAALQbWVA0GWuwFBgQFBwJMBEAAAC2cBA38jAEEQayICJAAgACABKAIANgIAIAEoAgghAyABKAIEIQQgAUIANwIEIAIgACgCBDYCCCAAIAQ2AgQgAiAAKAIINgIMIAAgAzYCCCACQQhqEMUBIAAgASsDEDkDECACQRBqJAALNwEBfyAAKAIEIgEEQCABIQADQCAAIgEoAgAiAA0ACyABDwsDQCAAIAAoAggiACgCAEcNAAsgAAsEAEEACxEAIAAgASAAKAIAKAIcEQAAC3UBAX4gACABIAR+IAIgA358IANCIIgiAiABQiCIIgR+fCADQv////8PgyIDIAFC/////w+DIgF+IgVCIIggAyAEfnwiA0IgiHwgASACfiADQv////8Pg3wiAUIgiHw3AwggACAFQv////8PgyABQiCGhDcDAAuKBgEOfwJAAkACQAJAIAEoAghFBEAgA0UNBCABQcAANgIIIAFBBjoABCABQYACIAEoAhAoAgARAgAiBDYCACAEDQEgAUEANgIIQQAPCyAAIAIQyQciDUEAIAEoAggiCWtxIQogDSAJQQFrIgRxIQUgBEECdiELIAEoAgAhDANAIAwgBUECdGooAgAiBwRAIAcoAgAhBiACIQQDQCAELQAAIg4gBi0AAEYEQCAORQ0GIAZBAWohBiAEQQFqIQQMAQsLIAhB/wFxRQRAIAogAS0ABEEBa3YgC3FBAXIhCAsgBSAIQf8BcSIEayAJQQAgBCAFSxtqIQUMAQsLQQAhByADRQ0CIAEoAgwgAS0ABCIEQQFrdkUNASAEQQFqIg5B/wFxIgRBH0sgBEEdS3INAkEEIAR0IgYgASgCECgCABECACIFRQ0CIAVBACAGEDMhCEEBIAR0IgdBAWsiCUECdiEKIARBAWshC0EAIAdrIQxBACEFA0AgASgCCCAFSwRAIAVBAnQiECABKAIAaigCACIEBEAgACAEKAIAEMkHIgQgCXEhBiAEIAxxIAt2IApxQQFyIRFBACEEA0AgCCAGQQJ0aiIPKAIABEAgBiAEIBEgBEH/AXEbIgRB/wFxIg9rIAdBACAGIA9JG2ohBgwBCwsgDyABKAIAIBBqKAIANgIACyAFQQFqIQUMAQsLIAEoAgAgASgCECgCCBEBACABIAc2AgggASAOOgAEIAEgCDYCACAJIA1xIQUgDCANcSALdiAKcUEBciEAQQAhBgNAIAggBUECdGooAgBFDQIgBSAGIAAgBkH/AXEbIgZB/wFxIgRrIAdBACAEIAVLG2ohBQwACwALIARBAEGAAhAzGiAAIAIQyQcgASgCCEEBa3EhBQsgAyABKAIQKAIAEQIAIQQgBUECdCIAIAEoAgBqIAQ2AgAgASgCACAAaigCACIERQ0BIARBACADEDMaIAEoAgAgAGooAgAgAjYCACABIAEoAgxBAWo2AgwgASgCACAAaigCACEHCyAHDwtBAAvoAQIDfwF8IwBBEGsiBSQAQeAAEE0iBCAEKAIwQQNyNgIwIAQgBCgCAEF8cUECcjYCAEG4ARBNIQYgBCAANgJYIAQgBjYCECAEIAE2AihEAADA////30EhBwJAIAJEAADA////30FkRQRAIAIhBwwBCyAFQf////8HNgIIIAUgAjkDAEG+2wQgBRAxCyAGIAM2ApwBIAYCfyAHRAAAAAAAAOA/RAAAAAAAAOC/IAdEAAAAAAAAAABmG6AiAplEAAAAAAAA4EFjBEAgAqoMAQtBgICAgHgLNgKsASAEENQIGiAFQRBqJAAgBAvpEAIKfwh8IwBBgAFrIgYkACAAQTBBACAAKAIAQQNxQQNHG2ooAigiChArIQ4gACADEI4IIQggACEFA0AgBSIHKAIQIgsoAngiBQRAIAstAHANAQsLAkACQCAELQAIDQAgCigCECIJKAL0ASABKAIQIgUoAvQBRw0AIAogASAJKAL4ASAFKAL4AUoiBRshCSABIAogBRshCgwBCyABIQkLQQAhBSALQdYAQS4gCiAHQTBBACAHKAIAQQNxQQNHG2ooAihGIgcbai0AACEMIAtB0ABBKCAHG2ooAgAhDQJAIAtBLkHWACAHG2otAABFDQAgCigCECgCCCIBRQ0AIAEoAgQoAgxFDQAgC0EoQdAAIAcbaigCACEBIAZBKGpBAEHAABAzGiAGIAE2AiQgBiAKNgIgIANBBGshBwNAAkAgBSAHTw0AIAYgAiAFQQR0aiIBKwMwIAooAhAiCysDEKE5A2ggBiABKwM4IAsrAxihOQNwIAsoAggoAgQoAgwhASAGIAYpA3A3AxggBiAGKQNoNwMQIAZBIGogBkEQaiABEQAARQ0AIAVBA2ohBQwBCwsgBkEgaiAKIAIgBUEEdGpBARCPCAsCQAJAIAxFDQAgCSgCECgCCCIBRQ0AIAEoAgQoAgxFDQAgBkEoakEAQcAAEDMaIAYgDTYCJCAGIAk2AiAgA0EEayIMIQcDQAJAIAdFDQAgBiACIAdBBHRqIgErAwAgCSgCECIDKwMQoTkDaCAGIAErAwggAysDGKE5A3AgAygCCCgCBCgCDCEBIAYgBikDcDcDCCAGIAYpA2g3AwAgBkEgaiAGIAERAABFDQAgB0EDayEHDAELCyAGQSBqIAkgAiAHQQR0akEAEI8IDAELIANBBGsiDCEHCwNAIAwgBSIBSwRAIAIgBUEEdGoiDSsDACACIAVBA2oiBUEEdGoiAysDAKEiDyAPoiANKwMIIAMrAwihIg8gD6KgRI3ttaD3xrA+Yw0BCwsDQAJAIAdFDQAgAiAHQQR0aiIDKwMAIAMrAzChIg8gD6IgAysDCCADKwM4oSIPIA+ioESN7bWg98awPmNFDQAgB0EDayEHDAELCyAAIQUDQCAFIgMoAhAoAngiBQ0AC0EAIQUgBC0ACEUEQCADIAQoAgARAgAhBQsgAyAGQSBqIAZB/ABqEIQGIAkgBCgCBBECAARAIAZBADYCfAsgAEEwQQAgACgCAEEDcUEDRxtqKAIoIAQoAgQRAgAEQCAGQQA2AiALIAUEQCAGKAIgIQAgBiAGKAJ8NgIgIAYgADYCfAsCQCAELQAJQQFGBEAgBigCfCIEIAYoAiAiAHJFDQECQAJ/AkACQCAERSAARSABIAdHcnJFBEAgAiAHQQR0aiIFKwMIIRIgBSsDOCEVIAUrAwAhESAFKwMwIRMgAyAAELcDIRYgESAToSIPIA+iIBIgFaEiDyAPoqCfIhREAAAAAAAACECjIhAgAyAEELcDIg8gFiAPoCAUZiIDGyEUIBAgFiADGyEPIBIgFWEEQCARIBNjBEAgESAPoCEPIBMgFKEhFgwDCyARIA+hIQ8gEyAUoCEWDAILAnwgEiAVYwRAIBUgFKEhFCASIA+gDAELIBUgFKAhFCASIA+hCyEQIBEiDyEWDAILIAQEQCADIAQQtwMhESACIAdBBHRqIgUrAwAiECAFKwMwIhKhIg8gD6IgBSsDCCIUIAUrAzgiE6EiDyAPoqCfRM3MzMzMzOw/oiIPIBEgDyARZRshESAFAnwgEyAUYQRAIBAgEmMEQCASIBGhIQ8gFAwCCyASIBGgIQ8gFAwBCyAQIQ8gEyARoSATIBGgIBMgFGQbCzkDOCAFIA85AzAgBSAUOQMYIAUgEDkDECAFIAUpAzA3AyAgBSAFKQM4NwMoIAggEzkDKCAIIBI5AyAgCCAENgIMCyAARQ0DIAMgABC3AyEQIAIgAUEEdGoiBCsDACITIAQrAzAiEaEiDyAPoiAEKwMIIhUgBCsDOCISoSIPIA+ioJ9EzczMzMzM7D+iIg8gECAPIBBlGyEQAnwgEiAVYQRAIBEgE2QEQCATIBCgIQ8gFQwCCyATIBChIQ8gFQwBCyATIQ8gFSAQoCAVIBChIBIgFWQbCyEQIAQgDzkDEEEYIQMgBCAQOQMYIAQgEjkDKCAEIBE5AyAgBCAEKQMQNwMAIAQgBCkDGDcDCCAIIAA2AghBEAwCCyASIhAhFAsgBSAPOQMQIAUgEDkDGCAFIBQ5AzggBSAWOQMwIAUgBSkDEDcDACAFIAUpAxg3AwggBSAFKQMwNwMgQSghAyAFIAUpAzg3AyggCCASOQMYIAggETkDECAIIAA2AgggCCAENgIMQSALIAhqIBM5AwAgAyAIaiAVOQMACwwBCyAGKAIgIgAEQCADIAIgASAHIAggABCBBiEBCyAGKAJ8IgBFDQAgAyACIAEgByAIIAAQggYhBwsgB0EEaiEJIAZBQGshBCABIQUDQAJAIAUgCU8NACAIKAIAIAUgAWtBBHRqIgAgAiAFQQR0aiIDKQMANwMAIAAgAykDCDcDCCAGIAMpAwg3AyggBiADKQMANwMgIAVBAWoiAyAJTw0AIAgoAgAgAyABa0EEdGoiACACIANBBHRqIgMpAwA3AwAgACADKQMINwMIIAYgAykDCDcDOCAGIAMpAwA3AzAgCCgCACAFQQJqIgMgAWtBBHRqIgAgAiADQQR0aiIDKQMANwMAIAAgAykDCDcDCCAEIAMpAwg3AwggBCADKQMANwMAIAYgAiAFQQNqIgVBBHRqIgApAwg3A1ggBiAAKQMANwNQIA4oAhBBEGogBkEgahD5BQwBCwsgCCAHIAFrQQRqNgIEIAZBgAFqJAALcwEBfyAAECEgABA4TwRAIABBARDrAQsgABAhIQICQCAAECUEQCAAIAJqIAE6AAAgACAALQAPQQFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAAKAIAIAJqIAE6AAAgACAAKAIEQQFqNgIECwsyACAAQQAQlAICQCAAECUEQCAAQQA6AA8MAQsgAEEANgIECyAAECUEfyAABSAAKAIACwtEAgJ/AXwgAEEAIABBAEobIQADQCAAIANGRQRAIAEgA0EDdCIEaisDACACIARqKwMAoiAFoCEFIANBAWohAwwBCwsgBQsKACAALQALQQd2CxgAIAAtAABBIHFFBEAgASACIAAQtwcaCwsdACAAQQAgAEGZAU0bQQF0QfCJB2ovAQBB9PoGagsgAQJ/IAAQN0EBaiIBEEIiAkUEQEEADwsgAiAAIAEQIAslAQF/IwBBEGsiBCQAIAQgAzYCDCAAIAEgAiADEE4gBEEQaiQACykBAX5BuJYLQbiWCykDAEKt/tXk1IX9qNgAfkIBfCIANwMAIABCIYinC6sDAgV/AX4gAL1C////////////AINCgYCAgICAgPj/AFQgAb1C////////////AINCgICAgICAgPj/AFhxRQRAIAAgAaAPCyABvSIHQiCIpyICQYCAwP8DayAHpyIFckUEQCAAEL0FDwsgAkEedkECcSIGIAC9IgdCP4inciEDAkAgB0IgiKdB/////wdxIgQgB6dyRQRAAkACQCADQQJrDgIAAQMLRBgtRFT7IQlADwtEGC1EVPshCcAPCyACQf////8HcSICIAVyRQRARBgtRFT7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IAMgBUEEdGoiASAHIAVB4ABsaiIGKQMINwMIIAEgBikDADcDACAFQQFqIQUMAAsACwJAIARFDQBBACEFA0AgBUEERg0BIAQgBUEEdCIBaiIDIAdBAyAFa0HgAGxqIAFqIgEpAwg3AwggAyABKQMANwMAIAVBAWohBQwACwALIAAgBykDoAI3AwAgACAHKQOoAjcDCCAHQcAEaiQABSAHIAVBBHQiBmoiCCABIAZqIgYpAwA3AwAgCCAGKQMINwMIIAVBAWohBQwBCwsLPwECfwNAIAAoAhAiAigC8AEiAUUgACABRnJFBEAgASIAKAIQKALwASIBRQ0BIAIgATYC8AEgASEADAELCyAAC14BAX8jAEEgayICJAAgAiAAKAIANgIIIAIgACgCBDYCDCACIAAoAgg2AhAgAEIANwIEIAIgACsDEDkDGCAAIAEQlgEgASACQQhqIgAQlgEgAEEEchDFASACQSBqJAALoQEBAn8CQCAAECJFIAIgAWtBBUhyDQAgASACEJ0FIAJBBGshBCAAEEAiAiAAECJqIQUCQANAAkAgAiwAACEAIAEgBE8NACAAQQBMIABB/wBOckUEQCABKAIAIAIsAABHDQMLIAFBBGohASACIAUgAmtBAUpqIQIMAQsLIABBAEwgAEH/AE5yDQEgAiwAACAEKAIAQQFrSw0BCyADQQQ2AgALC4QBAQJ/IwBBEGsiAiQAIAAQoQEEQCAAKAIAIAAQ6AIaEKYFCyABECIaIAEQoQEhAyAAIAEoAgg2AgggACABKQIANwIAIAFBABDKASACQQA6AA8gASACQQ9qEMkBAkAgACABRiIBIANyRQ0ACyAAEKEBIAFyRQRAIAAQmQMaCyACQRBqJAALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLzgkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApC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NgIAIAFBBGohAQwACwALIAEoAgghAiABQQA2AggLIAAoAggiAEEANgIQIABBADYCBCAAIAAoAgBB/19xNgIAIAILxQIBCH8jAEEgayICJAACQCAAIAJBHGoQyAUiAEUNACACKAIcIgVBAEwNAANAIAAtAAAiA0UNASADQS1HBEAgAEEBaiEADAELCyACQgA3AxAgAkIANwMIIABBAWohBkEAIQMDQCAEIAVIBEAgAyAGaiIHLAAAIggEQCACQQhqIAgQlA0CQCAHLQAAQdwARgRAIANFDQEgACADai0AAEHcAEcNAQsgBEEBaiEECyADQQFqIQMMAgUgAkEIahBmQQAhBAwDCwALCyABIwBBEGsiASQAAkAgAkEIaiIAECUEQCAAIAAQISIFEMUCIgQNASABIAVBAWo2AgBB6PoGKAIAQandAyABEB0aECYACyAAQQAQlA0gACgCACEECyAAQgA3AgAgAEIANwIIIAFBEGokACAENgIAIAMgBmohBAsgAkEgaiQAIAQLHAAgACABIAAgAhCqASIBQQEQygUgACABEIkBGgs9AQF/QdCUCygCACECA0AgAkEATARAQQAPCyACQQFrIQIgAUHk9AQgACgCTCgCBCgCBBEAAEF/Rw0AC0F/C4UCAQN/IwBBEGsiAyQAIAMgAjYCBCADIAI2AgwgAyACNgIIAkACQAJAQQBBACABIAIQTiICQQBIDQAgAkEBaiEFIAIgABA4IAAQIWsiBE8EQCAAIAUgBGsQ2gcLIAAQISEEIAIgABAlBH8gACAEagUgACgCACAEagsgBSABIAMoAgwQTiIBRyABQQBOcQ0BIAFBAEwNACAAECUEQCABQYACTw0DIAAgAC0ADyABajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAWo2AgQLIANBEGokAA8LQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALuQEBAn8CQAJAIAAQNyIBRQ0AIAFBrJQLEDhBrJQLECFrSwRAQayUCyABENoHC0GslAsQISECQayUCxAlBEAgAkGslAtqIAAgARAgGiABQYACTw0CQbuUC0G7lAstAAAgAWo6AABBrJQLECFBEEkNAUG/rgNBj/0AQfABQY/qABAAAAtBrJQLKAIAIAJqIAAgARAgGkGwlAtB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AEHojgtBATsBACABKAI0KAIQLQBzIQIjAEEQayIEJAACfyACQQNPBEAgBCACNgIAQYa3BCAEEDFB7+sBDAELIAJBAnRBkIIFaigCAAshCCAEQRBqJABBwI4LAn8CQAJAQbAEEEIiAkUNACACQfMCNgIQIAJB9AI2AgwgAkEQNgKEAyACQQA2AiAgAkEANgIIIAJBITYCFCACQYACEEIiBDYCkAMgBEUNASACQYAIIAIoAgwRAgAiBDYCOCAERQRAIAIoApADIAIoAhQRAQAgAiACKAIUEQEADAELIAJBDGohBiACIARBgAhqNgI8AkBBACIERQRAQbwBIAIoAgwRAgAiBEUNASAEQgA3AlAgBEIANwJoIAQgBjYCZCAEIAY2AnwgBEIANwIIIARBADoABCAEQgA3AhwgBEEAOgAYIAQgBjYCECAEQQA2AgAgBEIANwIwIARBADoALCAEIAY2AiQgBEEANgIUIARBADYCYCAEQgA3AlggBEIANwJwIARBADYCeCAEQgA3AkQgBEEAOgBAIAQgBjYCOCAEQQA2AiggBEEANgI8IAQgBjYCTCAEQgA3AowBIARBADoAiAEgBEIBNwKAASAEIAY2ApQBIARCADcCmAEgBEEAOgCgASAEQgA3AqQBIARCADcCrAEgBEIANwK0AQsgAkEANgKAAyACIAQ2AuwCIAJBADYC+AIgAkEANgK4AiACQgA3A9gDIAJBIToA4AMgAkEANgKAAiACQQA2AogBIAJBADsB9AEgAkIANwKoAyACQQA2AvABIAJCADcClAMgAiAGNgK8AyACQgA3AsADIAJCADcCsAMgAkEANgK4AyACQQA6AJwDIAJBADYC0AMgAkIANwLIAyACIAY2AtQDQQAhBCACQfUCNgKgAiACQcsDNgKIAiACQQA2ApwCIAJCgICAgBA3ApQCIAgEQANAIAQgCGogBEEBaiEELQAADQALIAQgAigCDBECACIGBEAgBiAIIAQQIBoLIAIgBjYC8AELIAJBADYC8AIgAkGgAWogAkGcAWpBABDDBxogAkIANwMAIAJBQGtBAEHAABAzGiACQgA3AowBIAJBADYChAEgAkIANwKUASACQgA3A6ADIAJBADYCNCACQQE6ADAgAkEANgIsIAJCADcCJCACQgA3AqQCIAJCADcCrAIgAkEANgK0AiACIAIoAggi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NwMYIAEgACkDEDcDECABIAApAwg3AwggASAAKQMANwMAAkAgAkUNAAJAIAEoAgQNACACKAIEIgBFDQAgASAANgIECwJAIAErAxBEAAAAAAAAAABjRQ0AIAIrAxAiBEQAAAAAAAAAAGZFDQAgASAEOQMQCwJAIAEoAgANACACKAIAIgBFDQAgASAANgIACyACKAIYQf8AcSIARQ0AIAEgASgCGCAAcjYCGAsgA0GgjwsoAgAoAogBIgAgAUEBIAAoAgARAwA2AgAgA0GcjwsoAgA2AgRBnI8LIAM2AgAgAUEgaiQAC8EBAQJ/AkACQCABIAAoAhAiAigCsAEiA0cEQCAAIAEoAhAiACgCsAFHDQELQZiIBEEAECcMAQsgA0UEQCACIAE2ArABIAIoAqwBIgMgACgCrAFKBEAgACADNgKsAQsDQCABRQ0CIAEoAhAiACAALwGoASACLwGoAWo7AagBIAAgAC8BmgEgAi8BmgFqOwGaASAAIAAoApwBIAIoApwBajYCnAEgACgCsAEhAQwACwALQbjOAUGXuQFBqQJBmg8QAAALC2oBAX8jAEEgayIDJAAgA0IANwMYIANCADcDCCADQoCAgICAgID4v383AxAgAyACNgIYIANCADcDACABBEAgA0HAmgpBAyABQbnZARDGBAsgACgCiAEiACADQQEgACgCABEDACADQSBqJAALaQEBf0HUigsoAgAhAQJAIAAEQEHUigsgAUEBajYCACABDQFB0IoLQQAQsgcQYTYCAEGG2AEQsgcaDwsgAUEATA0AQdSKCyABQQFrIgA2AgAgAA0AQdCKCygCABCyBxpB0IoLKAIAEBcLC0IBAn8jAEEQayICJAAgASgCECEDIAIgACgCECkCyAE3AwggAiADKQLAATcDACAAIAJBCGogASACENsIIAJBEGokAAtOAQF/AkAgACgCPCIERQ0AIAAoAkQgASAAKAIQQeAAaiIBEOUIIAQoAlwiBEUNACAAIAEgBBEEAAsgACgCECIAIAM5A5ABIAAgAjYCiAELngQCA38BfCMAQbABayICJAAgAkIANwOoASACQgA3A6ABAkACQAJAAkACQCAAKAIgIgNBAWsOBAECAgACCyAAKAIAIgBB1K0BEENFBEAgAkG1sAE2AjAgAiABuzkDOCACQaABakGLhgEgAkEwahBUDAQLIABB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C0GDzwEgBCADIAIQAAALQf2qAyAEIAMgAhAAAAsKACAAQQhqEMkDCyMBAX8jAEEQayIBJAAgASAANgIMIAFBDGoQiAsgAUEQaiQACw0AIAAoAgAgAUECdGoLGQAgABChAQRAIAAgARC4AQ8LIAAgARDKAQthAQF/IwBBEGsiAiQAIAIgADYCDAJAIAAgAUYNAANAIAIgAUEBayIBNgIIIAAgAU8NASACKAIMIAIoAggQyAsgAiACKAIMQQFqIgA2AgwgAigCCCEBDAALAAsgAkEQaiQAC7EBAQN/IwBBEGsiByQAAkACQCAARQ0AIAQoAgwhBiACIAFrQQJ1IghBAEoEQCAAIAEgCBDVAyAIRw0BCyAGIAMgAWtBAnUiAWtBACABIAZIGyIBQQBKBEAgACAHQQRqIAEgBRDSCyIFEEAgARDVAyEGIAUQdRogASAGRw0BCyADIAJrQQJ1IgFBAEoEQCAAIAIgARDVAyABRw0BCyAEENULDAELQQAhAAsgB0EQaiQAIAALqAEBA38jAEEQayIHJAACQAJAIABFDQAgBCgCDCEGIAIgAWsiCEEASgRAIAAgASAIENUDIAhHDQELIAYgAyABayIBa0EAIAEgBkgbIgFBAEoEQCAAIAdBBGogASAFENYLIgUQQCABENUDIQYgBRAvGiABIAZHDQELIAMgAmsiAUEASgRAIAAgAiABENUDIAFHDQELIAQQ1QsMAQtBACEACyAHQRBqJAAgAAsOACAAIAEoAgA2AgAgAAsKACAAIAEgAGtqCwsAIAAtAAtB/wBxCwgAIABB/wFxC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMIC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQCAAIAJUIAEgA1MgASADURsEQEF/DwsgACAChSABIAOFhEIAUg8LIAAgAlYgASADVSABIANRGwRAQX8PCyAAIAKFIAEg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IAErA0ihOQNoIA8gASsDUDkDcCAPIAUgASsDWKE5A3ggDyABKQNoNwOIASAPIAEpA2A3A4ABIAAgASACIAQQgQIgACAPQSBqQQdBABCBAgwCCyAQQQRxBEAgDyAQNgIMIA8gEDYCICABIAIgD0EMakEBEJUIIRIgAkEGbEECakEQEBghEUEAIQMDQCACIANGRQRAIBEgE0EEdGoiASASIANBBnRqIhApAwA3AwAgASAQKQMINwMIIAEgECkDGDcDGCABIBApAxA3AxAgASAQKQMYNwMoIAEgECkDEDcDICABIBApAyg3AzggASAQKQMgNwMwIAFBQGsgECkDIDcDACABIBApAyg3A0ggASAQKQM4NwNYIAEgECkDMDcDUCADQQFqIQMgE0EGaiETDAELCyARIBNBBHRqIgEgESkDADcDACABIBEpAwg3AwggESATQQFyIgFBBHRqIgIgESkDGDcDCCACIBEpAxA3AwAgACARQRBqIAEgBBCBAiAREBcgEhAXDAILIA9B1gU2AgQgD0HcuAE2AgBB6PoGKAIAQdaxBCAPEB0aEG4ACyAPIAMoAgA2AhAgASACIA9BEGpBABCVCCEQAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCARQQFrDhkAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGQsgAkEBaiITQRAQGCERQQEhAwNAIAIgA0YEQCARIBAgAkEwbGoiAUEYaikDADcDCCARIAEpAxA3AwAgESACQQR0aiIDIAFBEGsiAkEIaikDADcDCCADIAIpAwA3AwAgACARIBMgBBBBIBEQFyAPIAIpAwg3AyggDyACKQMANwMgIA8gASkDGDcDOCAPIAEpAxA3AzAgDyAPKwMwIA8rAyAgASsDAKGgOQNAIA8gDysDOCAPKwMoIAErAwihoDkDSCAAIA9BMGpBAhA2IA8gDykDSDcDOCAPIA8pA0A3AzAgACAPQSBqQQIQNgwaBSARIANBBHQiEmoiFCABIBJqIhIpAwA3AwAgFCASKQMINwMIIANBAWohAwwBCwALAAsgAkECaiIDQRAQGCICIAEpAwg3AwggAiABKQMANwMAIAIgECkDIDcDECACIBApAyg3AxggAiAQKwMgIBArAzAiBiAQKwNAoUQAAAAA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ADoAACAEIAQoAgBBAWo2AgBBACEADAELQQAhACAEQQA2AgALIApBEGokACAACwsAIABBmLELEKUCCxQAIABB3wBxIAAgAEHhAGtBGkkbCxsBAX8gAUEBEPoLIQIgACABNgIEIAAgAjYCAAskACAAQQtPBH8gAEEIakF4cSIAIABBAWsiACAAQQtGGwVBCgsLJAECfyMAQRBrIgIkACAAIAEQpAUhAyACQRBqJAAgASAAIAMbCxMAIAAgASACIAAoAgAoAjARAwALZwIBfwF+IwBBEGsiAiQAIAACfiABRQRAQgAMAQsgAiABrUIAQfAAIAFnIgFBH3NrELEBIAIpAwhCgICAgICAwACFQZ6AASABa61CMIZ8IQMgAikDAAs3AwAgACADNwMIIAJBEGokAAtSAQJ/QdTNCigCACIBIABBB2pBeHEiAmohAAJAIAJBACAAIAFNG0UEQCAAPwBBEHRNDQEgABAMDQELQeSUC0EwNgIAQX8PC0HUzQogADYCACABC38CAX4DfwJAIABCgICAgBBUBEAgACECDAELA0AgAUEBayIBIAAgAEIKgCICQgp+fadBMHI6AAAgAEL/////nwFWIAIhAA0ACwsgAlBFBEAgAqchAwNAIAFBAWsiASADIANBCm4iBEEKbGtBMHI6AAAgA0EJSyAEIQMNAAsLIAELtQEBA38jAEEgayIDJAACQAJAIAEsAAAiAgRAIAEtAAENAQsgACACELYFIQEMAQsgA0EAQSAQMxogAS0AACICBEADQCADIAJBA3ZBHHFqIgQgBCgCAEEBIAJ0cjYCACABLQABIQIgAUEBaiEBIAINAAsLIAAiAS0AACICRQ0AA0AgAyACQQN2QRxxaigCACACdkEBcQ0BIAEtAAEhAiABQQFqIQEgAg0ACwsgA0EgaiQAIAEgAGsL3AEBAn8CQAJAIAEgACIDc0EDcQRAIAEtAAAhAgwBCyABQQNxBEADQCADIAEtAAAiAjoAACACRQ0DIANBAWohAyABQQFqIgFBA3ENAAsLQYCChAggASgCACICayACckGAgYKEeHFBgIGChHhHDQADQCADIAI2AgAgA0EEaiEDIAEoAgQhAiABQQRqIQEgAkGAgoQIIAJrckGAgYKEeHFBgIGChHhGDQALCyADIAI6AAAgAkH/AXFFDQADQCADIAEtAAEiAjoAASAD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An9BuAIQ8gMiASAAKAIQIgI2AgAgACABNgIQIAIEQCABQRBqIAJBEGpBKBAgGiABQThqIAJBOGpBKBAgGiABIAIoApgBNgKYASABIAIoApwBNgKcASABIAIrA6ABOQOgASABIAIoAogBNgKIASABQeAAaiACQeAAakEoECAaIAEPCyABQoCAgICAgID4PzcDoAEgAUIDNwOYASABC7kBAQN/IAAgAEEwaiICIAAoAgBBA3FBA0YbKAIoKAIQIgEoAuABIAEoAuQBIgFBAWogAUECahD/ASEBIAAgAiAAKAIAQQNxQQNGGygCKCgCECABNgLgASAAIAIgACgCAEEDcUEDRhsoAigoAhAiASABKALkASIDQQFqNgLkASABKALgASADQQJ0aiAANgIAIAAgAiAAKAIAQQNxQQNGGygCKCgCECIAKALgASAAKALkAUECdGpBADYCAAsRACAAQYafAUEZQby4ARCSBQv+AgICfwF+IwBB0ABrIgMkAAJ/QQAgAkUNABogA0HIAGogAkE6EMQBIAAgAUECdGpBQGsoAgAhAgJAIAMoAkwiBCADKAJIai0AAEE6RgRAQQEhACACIQEDQCABBEAgA0FAayABKAIEQToQxAECQCAEBEAgAyADKQJINwMwIAMgAykCQDcDKCADQTBqIANBKGoQkAZFDQELIAEoAgQhACADIAEoAgwoAgg2AiQgAyAANgIgQZCIC0GMMyADQSBqEIwBQQAhAAsgASgCACEBDAELCyAAQQFxRQ0BCyADQgA3A0BBASEAQQAhAQNAIAIEQCADQThqIAIoAgRBOhDEAQJAIAEEQCADIAMpA0A3AxggAyADKQM4NwMQIANBGGogA0EQahCQBg0BCyADIAMpAzhCIIk3AwBBkIgLQbAyIAMQjAFBACEACyADIAMpAzgiBTcDQCAFpyEBIAIoAgAhAgwBCwtB5fQEIABBAXENARoLQZCICxCbAgsgA0HQAGokAAtaAQJ/IAAoApgBIQEDQCABBEAgASgCBCABKALIBBAXIAEoAswEEBcgARAXIQEMAQsLQYiIC0EANgIAQYyIC0EANgIAIABBADYCuAEgAEIANwOYASAAQQA2AhwLMQEBfwJAIAFFDQAgAS0AAEUNACAAKAI8IgJFDQAgAigCcCICRQ0AIAAgASACEQQACwutAQICfwJ8IwBBIGsi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AgALIARBAWohBAwBCwsgBRAXIAcQFyAJQRBqJAAFIAlBCGogBCAHIAMQlwogBEEBayEEDAELCwUgAyAEQQJ0IgYgCigCBGooAgBBAnRqAn8gCigCCCAGaioCACITi0MAAABPXQRAIBOoDAELQYCAgIB4CzYCACAEQQFqIQQMAQsLBSADIARBAnRqQf////8HNgIAIARBAWohBAwBCwsLMAEBf0GA2QoQ5wYiAkEANgIgIAIgAToAECACIAA2AgggAkEANgIUIAJBADYCDCACCw8AIAAgAEGw3AAQIxCsCgsUACAAIAFBryVBFUGb+wBBAhD5BgsJACAAQQQQ/wsLCwAgBCACNgIAQQMLdAECfyMAQSBrIgIkAAJAIACtIAGtfkIgiFAEQCAAIAEQRiIDRQ0BIAJBIGokACADDwsgAiABNgIEIAIgADYCAEHo+gYoAgBB2t0DIAIQHRoQJgALIAIgACABbDYCEEHo+gYoAgBBqd0DIAJBEGoQHRoQJgALOQECfyMAQRBrIgMkACADQQxqIgQgARBLIAIgBBDOAyIBEL4BNgIAIAAgARC9ASAEEEggA0EQaiQACzcBAn8jAEEQayICJAAgAkEMaiIDIAAQSyADEMABQaC2B0G6tgcgARDDAiADEEggAkEQaiQAIAELOQECfyMAQRBrIgMkACADQQxqIgQgARBLIAIgBBDQAyIBEL4BOgAAIAAgARC9ASAEEEggA0EQaiQAC6cBAQR/IwBBEGsiBSQAIAEQNyECIwBBEGsiAyQAAkAgAkH3////B00EQAJAIAIQpQUEQCAAIAIQygEgACEEDAELIANBCGogAhDTA0EBahDSAyADKAIMGiAAIAMoAggiBBDzASAAIAMoAgwQ8gEgACACELgBCyAEIAEgAhCmAiADQQA6AAcgAiAEaiADQQdqEMkBIANBEGokAAwBCxC/AQALIAVBEGokAAsXACAAIAM2AhAgACACNgIMIAAgATYCCAsSACAAIAEgAkL/////DxC0BacLawEBfwJAIABFBEBBmKgLKAIAIgBFDQELIAAgARC1BSAAaiICLQAARQRAQZioC0EANgIAQQAPCyACIAEQ2QMgAmoiAC0AAARAQZioCyAAQQFqNgIAIABBADoAACACDwtBmKgLQQA2AgALIAIL5AoBDX8gASwAACICRQRAIAAPCwJAIAAgAhCTASIARQ0AIAEtAAFFBEAgAA8LIAAtAAFFDQAgAS0AAkUEQCAALQABIgJBAEchAwJAIAJFDQAgAC0AAEEIdCACciICIAEtAAEgAS0AAEEIdHIiB0YNACAAQQFqIQEDQCABIgAtAAEiBUEARyEDIAVFDQEgAEEBaiEBIAJBCHRBgP4DcSAFciICIAdHDQALCyAAQQAgAxsPCyAALQACRQ0AIAEtAANFBEAgAEECaiECIAAtAAIiA0EARyEFAkACQCADRQ0AIAAtAAFBEHQgAC0AAEEYdHIgA0EIdHIiAyABLQABQRB0IAEtAABBGHRyIAEtAAJBCHRyIgdGDQADQCACQQFqIQAgAi0AASIBQQBHIQUgAUUNAiAAIQIgASADckEIdCIDIAdHDQALDAELIAIhAAsgAEECa0EAIAUbDwsgAC0AA0UNACABLQAERQRAIABBA2ohAiAALQADIgNBAEchBQJAAkAgA0UNACAALQABQRB0IAAtAABBGHRyIAAtAAJBCHRyIANyIgMgASgAACIAQRh0IABBgP4DcUEIdHIgAEEIdkGA/gNxIABBGHZyciIHRg0AA0AgAkEBaiEAIAItAAEiAUEARyEFIAFFDQIgACECIANBCHQgAXIiAyAHRw0ACwwBCyACIQALIABBA2tBACAFGw8LIAAhBUEAIQIjAEGgCGsiCSQAIAlBmAhqQgA3AwAgCUGQCGpCADcDACAJQgA3A4gIIAlCADcDgAgCQAJAAkACQCABIggtAAAiAUUEQEF/IQpBASEADAELA0AgBCAFai0AAEUNBCAJIAFB/wFxQQJ0aiAEQQFqIgQ2AgAgCUGACGogAUEDdkEccWoiACAAKAIAQQEgAXRyNgIAIAQgCGotAAAiAQ0AC0EBIQBBfyEKIARBAUsNAQtBfyEGQQEhAgwBC0EBIQdBASEBA0ACfyAIIApqIAFqLQAAIgMgACAIai0AACIGRgRAIAEgB0YEQCACIAdqIQJBAQwCCyABQQFqDAELIAMgBksEQCAAIAprIQcgACECQQEMAQsgAiIKQQFqIQJBASEHQQELIgEgAmoiACAESQ0AC0EBIQJBfyEGIARBAU0EQCAHIQAMAQtBACEAQQEhA0EBIQEDQAJ/IAYgCGogAWotAAAiCyACIAhqLQAAIgxGBEAgASADRgRAIAAgA2ohAEEBDAILIAFBAWoMAQsgCyAMSQRAIAIgBmshAyACIQBBAQwBCyAAIgZBAWohAEEBIQNBAQsiASAAaiICIARJDQALIAchACADIQILAn8gCCAIIAIgACAGQQFqIApBAWpLIgAbIgNqIAYgCiAAGyILQQFqIgcQwgEEQCALIAQgC0F/c2oiACAAIAtJG0EBaiEDQQAMAQsgBCADawshDSAEQQFrIQ4gBEE/ciEMQQAhBiAFIQADQAJAIAUgAGsgBE8NAEEAIQIgBUEAIAwQoAMiASAFIAxqIAEbIQUgAUUNACABIABrIARJDQILAn8CfyAEIAlBgAhqIAAgDmotAAAiAUEDdkEccWooAgAgAXZBAXFFDQAaIAkgAUECdGooAgAiASAERwRAIAQgAWsiASAGIAEgBksbDAELAkAgCCAHIgEgBiABIAZLGyICai0AACIKBEADQCAAIAJqLQAAIApB/wFxRw0CIAggAkEBaiICai0AACIKDQALCwNAIAEgBk0EQCAAIQIMBgsgCCABQQFrIgFqLQAAIAAgAWotAABGDQALIAMhASANDAILIAIgC2sLIQFBAAshBiAAIAFqIQAMAAsACyAJQaAIaiQAIAIhAwsgAwuAAQEEfyAAIABBPRC2BSIBRgRAQQAPCwJAIAAgASAAayIEai0AAA0AQeiUCygCACIBRQ0AIAEoAgAiAkUNAANAAkAgACACIAQQ1wFFBEAgASgCACAEaiICLQAAQT1GDQELIAEoAgQhAiABQQRqIQEgAg0BDAILCyACQQFqIQMLIAMLsgQBBH8jAEEQayIEJAACQAJAQaK/ASABLAAAEJMBRQRAQeSUC0EcNgIADAELQQIhAiABQSsQkwFFBEAgAS0AAEHyAEchAgsgAkGAAXIgAiABQfgAEJMBGyICQYCAIHIgAiABQeUAEJMBGyICIAJBwAByIAEtAAAiAkHyAEYbIgVBgARyIAUgAkH3AEYbIgVBgAhyIAUgAkHhAEYbIQIgBEK2AzcDAEGcfyAAIAJBgIACciAEEAcQngMiAEEASA0BIwBBIGsiAyQAAn8CQAJAQaK/ASABLAAAEJMBRQRAQeSUC0EcNgIADAELQZgJEEIiAg0BC0EADAELIAJBAEGQARAzGiABQSsQkwFFBEAgAkEIQQQgAS0AAEHyAEYbNgIACwJAIAEtAABB4QBHBEAgAigCACEBDAELIABBA0EAEAUiAUGACHFFBEAgAyABQYAIcqw3AxAgAEEEIANBEGoQBRoLIAIgAigCAEGAAXIiATYCAAsgAkF/NgJQIAJBgAg2AjAgAiAANgI8IAIgAkGYAWo2AiwCQCABQQhxDQAgAyADQRhqrTcDACAAQZOoASADEAoNACACQQo2AlALIAJB/QM2AiggAkH+AzYCJCACQf8DNgIgIAJBgAQ2AgxB7ZQLLQAARQRAIAJBfzYCTAsgAkGwlQsoAgAiATYCOCABBEAgASACNgI0C0GwlQsgAjYCACACCyADQSBqJAAiAw0BIAAQAhoLQQAhAwsgBEEQaiQAIAML4gIBBX8CQAJAAkAgAigCTEEATgRAIAFBAkgNAQwCC0EBIQYgAUEBSg0BCyACIAIoAkgiAkEBayACcjYCSCABQQFHDQEgAEEAOgAAIAAPCyABQQFrIQQgACEBAkADQAJAAkACQCACKAIEIgMgAigCCCIFRg0AAn8gA0EKIAUgA2sQoAMiBwRAIAcgAigCBCIDa0EBagwBCyACKAIIIAIoAgQiA2sLIQUgASADIAUgBCAEIAVLGyIDECAaIAIgAigCBCADaiIFNgIEIAEgA2ohASAHDQIgBCADayIERQ0CIAUgAigCCEYNACACIAVBAWo2AgQgBS0AACEDDAELIAIQvAUiA0EATg0AQQAhBCAAIAFGDQMgAi0AAEEQcQ0BDAMLIAEgAzoAACABQQFqIQEgA0H/AXFBCkYNACAEQQFrIgQNAQsLIABFBEBBACEEDAELIAFBADoAACAAIQQLIAYNAAsgBAsJACAAvUI0iKcLmQEBA3wgACAAoiIDIAMgA6KiIANEfNXPWjrZ5T2iROucK4rm5Vq+oKIgAyADRH3+sVfjHcc+okTVYcEZoAEqv6CiRKb4EBEREYE/oKAhBSADIACiIQQgAkUEQCAEIAMgBaJESVVVVVVVxb+goiAAoA8LIAAgAyABRAAAAAAAAOA/oiAFIASioaIgAaEgBERJVVVVVVXFP6KgoQuSAQEDfEQAAAAAAADwPyAAIACiIgJEAAAAAAAA4D+iIgOhIgREAAAAAAAA8D8gBKEgA6EgAiACIAIgAkSQFcsZoAH6PqJEd1HBFmzBVr+gokRMVVVVVVWlP6CiIAIgAqIiAyADoiACIAJE1DiIvun6qL2iRMSxtL2e7iE+oKJErVKcgE9+kr6goqCiIAAgAaKhoKALmQIBA38gASgCECIEKAKwAUUEQCABQTBBACABKAIAQQNxIgVBA0cbaigCKCgCECgC9AEiBiABQVBBACAFQQJHG2ooAigoAhAoAvQBIgUgBSAGSBshBiAEIAI2ArABA0AgASgCECEFAkAgA0UEQCACKAIQIQQMAQsgAigCECIEIAQvAagBIAUvAagBajsBqAELIAQgBC8BmgEgBS8BmgFqOwGaASAEIAQoApwBIAUoApwBajYCnAEgBiACIAJBMGsiBCACKAIAQQNxQQJGGygCKCIFKAIQKAL0AUcEQCAAIAUQrwwgAiAEIAIoAgBBA3FBAkYbKAIoKAIQKALIASgCACICDQELCw8LQbjOAUHvvQFBiwFB3uQAEAAAC40BACAAIAAgACAAIABECff9DeE9Aj+iRIiyAXXg70k/oKJEO49otSiCpL+gokRVRIgOVcHJP6CiRH1v6wMS1tS/oKJEVVVVVVVVxT+gIACiIAAgACAAIABEgpIuscW4sz+iRFkBjRtsBua/oKJEyIpZnOUqAECgokRLLYocJzoDwKCiRAAAAAAAAPA/oKMLggEBAn8gACABQQEQcyIBKAIQQQA2AsQBQQUQtAchAiABKAIQIgNBADYCzAEgAyACNgLAAUEFELQHIQIgASgCECIDIAI2AsgBQejOCigCACICIAAgAhsoAhBBuAFBwAEgAhtqIAE2AgAgAyACNgK8AUHozgogATYCACADQQA2ArgBIAELbQECfwJAIAAoAhAiAC0AVCIDIAEoAhAiAS0AVEcNAAJAIAArAzggASsDOGEEQCAAKwNAIAErA0BhDQELIAMNAQsgACsDECABKwMQYQRAQQEhAiAAKwMYIAErAxhhDQELIAAtACxBAXMhAgsgAgtLAQJ/QX8hAQJAIABBCHUiAkHYAWtBCEkNAAJAIAJB/wFHBEAgAg0BIABBoJwGai0AAA0BDAILIABBfnFB/v8DRg0BCyAAIQELIAEL0QEBAX8CQCAAQQBIDQAgAEH/AE0EQCABIAA6AABBAQ8LIABB/w9NBEAgASAAQT9xQYABcjoAASABIABBBnZBwAFyOgAAQQIPCyAAQf//A00EQCABIABBP3FBgAFyOgACIAEgAEEMdkHgAXI6AAAgASAAQQZ2QT9xQYABcjoAAUEDDwsgAEH//8MASw0AIAEgAEE/cUGAAXI6AAMgASAAQRJ2QfABcjoAACABIABBBnZBP3FBgAFyOgACIAEgAEEMdkE/cUGAAXI6AAFBBCECCyACC+YeAQ5/IwBBMGsiCCQAIAggAzYCLCAAKALsAiESAn8gAiAAKAKcAUYEQCAAQagCaiEOIABBrAJqDAELIAAoArQCIg5BBGoLIRMgDiADNgIAIBJB0ABqIRQgAEGoA2ohDSAIQSVqIRUCQAJAAkACQAJAA0AgCCAIKAIsIgM2AigCfwJAAkAgAiADIAQgCEEoaiACKAIEEQYAIgNBBWoiCw4DAAEAAQsgCCgCLCIKIAQgBhsMAQsgCCgCLCEKIAgoAigLIQkgACADIAogCUGZFiAHEKoCRQRAIAAQ7wJBKyEKDAYLIBMgCCgCKCIDNgIAQREhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAsOEw4BAAQDAgYGBwcIEAwNBQsRHhITCyAGBEAgBSAIKAIsNgIADBoLIBMgBDYCAAJAIAAoAkgiAwRAIAhBCjoADCAAKAIEIAhBDGpBASADEQUADAELIAAoAlxFDQAgACACIAgoAiwgBBCFAQsgAUUNHCAAKALAAiABRg0ODBsLIAYEQCAFIAgoAiw2AgAMGQsgAUEATA0bIAAoAsACIAFHDRogBSAIKAIsNgIADBgLIA4gAzYCAEEEIQoMGwsgBkUEQEEFIQoMGwsgBSAIKAIsNgIADBYLIAZFBEBBBiEKDBoLIAUgCCgCLDYCAAwVCyAIIAIgAigCQCIJIAgoAixqIAMgCWsgAigCLBEDACIDOgAkIANB/wFxBEAgAEEJIAhBJGoiCSAVQdsWQQEQqgIaIAAoAkgiAwRAIAAoAgQgCUEBIAMRBQAMFAsgACgCXEUNEyAAIAIgCCgCLCAIKAIoEIUBDBMLQQEhCiAUIAIgAigCQCIDIAgoAixqIAgoAiggA2sQhAEiA0UNGCAAIBIgA0EAEJsBIQwgEiASKAJgNgJcAkACQCASLQCBAQRAIBItAIIBRQ0BCyAMRQRAQQshCgwbCyAMLQAiDQFBGCEKDBoLIAwNACAAKAKEASIJBEAgACgCBCADQQAgCREFAAwUCyAAKAJcRQ0TIAAgAiAIKAIsIAgoAigQhQEMEwsgDC0AIARAQQwhCgwZCyAMKAIcBEBBDyEKDBkLIAwoAgQEQCAALQC8Ag0PIAAoAoQBIgMEQCAAKAIEIAwoAgBBACADEQUADBQLIAAoAlxFDRMgACACIAgoAiwgCCgCKBCFAQwTCyAAKAJ8BEAgDEEBOgAgQQAhEEEAIQsgACgC7AIiDygCnAFFDRIgACgCtAMiAyAAKAKwA0YEQCANEF9FDRcgACgCtAMhAwsgACADQQFqNgK0AyADQT06AABBACEDIA8oApwBKAIUIAAtAOADQQBHayIJQQAgCUEAShshCwNAIAMgC0YEQEEBIQsMFAsgACgCtAMiCSAAKAKwA0YEQCANEF9FDRggACgCtAMhCQsgDygCnAEoAhAgA2otAAAhESAAIAlBAWo2ArQDIAkgEToAACADQQFqIQMMAAsACyAAKAJcRQ0SIAAgAiAIKAIsIAgoAigQhQEMEgsCQCAAKAL4AiIDBEAgACADKAIANgL4AgwBC0EBIQpBMCAAKAIMEQIAIgNFDRggA0EgIAAoAgwRAgAiCTYCJCAJRQRAIAMgACgCFBEBAAwZCyADIAlBIGo2AigLIANBADYCLCADIAAoAvQCNgIAIAAgAzYC9AIgA0IANwIQIAMgCCgCLCACKAJAaiIJNgIEIAMgAiAJIAIoAhwRAAA2AgggACAAKALAAkEBajYCwAIgAygCCCAIIAMoAgQiCjYCJCADQQxqIQwgA0EsaiEQIApqIQ8gAygCKCELIAMoAiQhCgNAAkAgCCAKNgIMIAIgCEEkaiAPIAhBDGogC0EBayACKAI4EQcAIAgoAgwiESADKAIkIglrIQpBAUYgCCgCJCAPT3INACAJIAMoAiggCWtBAXQiCyAAKAIQEQAAIglFDRAgAyAJNgIkIAMgCSALaiILNgIoIAkgCmohCgwBCwsgAyAKNgIYIAMgCTYCDCARQQA6AAAgACACIAgoAiwgDCAQIAcQ9AwiCg0XIAAoAkAiAwRAIAAoAgQgDCgCACAAKAKQAyADEQUADBALIAAoAlxFDQ8gACACIAgoAiwgCCgCKBCFAQwPCyACKAJAIQMgCCgCLCEJIAhBADYCJCAIIA0gAiADIAlqIgMgAiADIAIoAhwRAAAgA2oQhAEiAzYCDCADRQ0NIAAgACgCtAM2ArgDIAAgAiAIKAIsIAhBDGogCEEkakECEPQMIgoEQCAAIAgoAiQQ8wwMFwsgACAAKAK0AzYCuAMCQAJAIAAoAkAiA0UEQCAAKAJEIgMNASAAKAJcRQ0CIAAgAiAIKAIsIAgoAigQhQEMAgsgACgCBCAIKAIMIAAoApADIAMRBQAgACgCRCIDRQ0BIAAoAkBFDQAgDiATKAIANgIAIAAoAkQhAwsgACgCBCAIKAIMIAMRBAALIA0QqwIgACAIKAIkEPMMIAAoAsACDRACQCAAKALoA0ECaw4CEQIACyAAIAgoAiggBCAFEMUHIQoMFgsgACgCwAIgAUYNEyAAKAL0AiEKAkAgAiAIKAIsIAIoAkBBAXRqIgMgAigCHBEAACIJIAooAghGBEAgCigCBCADIAkQwgFFDQELIA4gAzYCAEEHIQoMFgsgACAKKAIANgL0AiAKIAAoAvgCNgIAIAAgCjYC+AIgACAAKALAAkEBazYCwAICQCAAKAJEIgMEQAJAIAAtAPQBRQ0AIAooAhAiCUUNACAKKAIMIAooAhxqIQMDQCAJLQAAIgsEQCADIAs6AAAgA0EBaiEDIAlBAWohCQwBCwsCQCAALQD1AUUNACAKKAIUIglFDQAgAyAALQDgAzoAAANAIANBAWohAyAJLQAAIgtFDQEgAyALOgAAIAlBAWohCQwACwALIANBADoAACAAKAJEIQMLIAAoAgQgCigCDCADEQQADAELIAAoAlxFDQAgACACIAgoAiwgCCgCKBCFAQsDQCAKKAIsIgMEQCADIQkgCiAAKAJ0IgsEfyAAKAIEIAMoAgAoAgAgCxEEACAKKAIsBSAJCygCBDYCLCADIAAoAoADNgIEIAAgAzYCgAMgAygCACADKAIINgIEDAELCyAAKALAAg0PIAAoAugDQQJrDgIPAAELIABBgQM2AqACDA4LIAAgCCgCKCAEIAUQxQchCgwTCyACIAgoAiwgAigCKBEAACIDQQBIBEBBDiEKDBMLIAAoAkgiCQRAIAAoAgQgCEEMaiILIAMgCxCqBCAJEQUADA0LIAAoAlxFDQwgACACIAgoAiwgCCgCKBCFAQwMCyAAKAJIIgkEQCAIQQo6AAwgACgCBCAIQQxqQQEgCREFAAwMCyAAKAJcRQ0LIAAgAiAIKAIsIAMQhQEMCwsCQCAAKAJUIgkEQCAAKAIEIAkRAQAMAQsgACgCXEUNACAAIAIgCCgCLCADEIUBCyAAIAIgCEEoaiAEIAUgBiAHEPIMIgoNECAIKAIoDQogAEGCAzYCoAIMDAsgBgRAIAUgCCgCLDYCAAwMCwJAIAAoAkgiAwRAIAItAERFBEAgCCAAKAI4NgIMIAIgCEEsaiAEIAhBDGogACgCPCACKAI4EQcAGiAAKAIEIAAoAjgiAiAIKAIMIAJrIAAoAkgRBQAMAgsgACgCBCAIKAIsIgIgBCACayADEQUADAELIAAoAlxFDQAgACACIAgoAiwgBBCFAQsgAUUEQCAOIAQ2AgAMDwsgACgCwAIgAUYNACAOIAQ2AgAMDQsgBSAENgIADAoLIAAoAkgiCQRAIAItAERFBEADQCAIIAAoAjg2AgwgAiAIQSxqIAMgCEEMaiAAKAI8IAIoAjgRBwAgEyAIKAIsNgIAIAAoAgQgACgCOCIKIAgoAgwgCmsgCREFAEEBTQ0KIA4gCCgCLDYCACAIKAIoIQMMAAsACyAAKAIEIAgoAiwiCiADIAprIAkRBQAMCAsgACgCXEUNByAAIAIgCCgCLCADEIUBDAcLIAAgAiAIKAIsIAMQygcNBgwDCyAAIAIgCCgCLCADEMsHRQ0CDAULIAAoAlxFDQQgACACIAgoAiwgAxCFAQwECyAAIAxBABCADSIKRQ0DDAkLQQEhCgwICyANEKsCDAELIAggDygCPCIDNgIMIAggAwR/IAMgDygCREECdGoFQQALNgIQA0AgCEEMahDUByIJBEAgCSgCBEUNASALQf8BcQRAIAAoArQDIgMgACgCsANGBEAgDRBfRQ0HIAAoArQDIQMLIAAgA0EBajYCtAMgA0EMOgAACyAJKAIAIQsDQAJAIAAoArADIRAgACgCtAMhAyALLQAAIhFFDQAgAyAQRgRAIA0QX0UNCCALLQAAIREgACgCtAMhAwsgACADQQFqNgK0AyADIBE6AAAgC0EBaiELDAELCyADIBBGBEAgDRBfRQ0GIAAoArQDIQMLIAAgA0EBajYCtAMgA0E9OgAAQQAhAyAJKAIEKAIUIAAtAOADQQBHayILQQAgC0EAShshEANAIAMgEEYEQEEBIQsMAwsgACgCtAMiCyAAKAKwA0YEQCANEF9FDQcgACgCtAMhCwsgCSgCBCgCECADai0AACERIAAgC0EBajYCtAMgCyAROgAAIANBAWohAwwACwALCyAIIA8oAgAiAzYCDCAIIAMEfyADIA8oAghBAnRqBUEACzYCEANAIAhBDGoQ1AciAwRAIAMtACBFDQEgC0H/AXEEQCAAKAK0AyIJIAAoArADRgRAIA0QX0UNByAAKAK0AyEJCyAAIAlBAWo2ArQDIAlBDDoAAAsgAygCACEDA0AgAy0AACILRQRAQQEhCwwDCyAAKAK0AyIJIAAoArADRgRAIA0QX0UNByADLQAAIQsgACgCtAMhCQsgACAJQQFqNgK0AyAJIAs6AAAgA0EBaiEDDAALAAsLIAAoArQDIgMgACgCsANGBEAgDRBfRQ0EIAAoArQDIQMLIAAgA0EBajYCtAMgA0EAOgAAIAAoArgDIQMgDEEAOgAgIANFDQYgACgCgAEgAyAMKAIUIAwoAhAgDCgCGCAAKAJ8EQcARQRAQRUhCgwHCyAAIAAoArgDNgK0AwsgCCAIKAIoIgM2AiwgDiADNgIAQSMhCgJAIAAoAugDQQJrDgIGAAELCyAFIAM2AgALQQAhCgwDCyAMQQA6ACAMAgtBDSEKDAELQQMhCgsgCEEwaiQAIAoLbQEBfyAAQQAQwwUiACgC5ANFBEAgACAAKAKgBEEBajYCoAQgACAAKAKkBEEBaiIDNgKkBCADIAAoAqgEIgNLBEAgACADQQFqNgKoBAsgACABQcG9AyACEPoMDwtB/zdBkbwBQZs+QcLlABAAAAtEAQN/A0AgACgCACECIAAoAhAoAgghAyABIAAoAghPRQRAIAIgAUECdGooAgAgAxEBACABQQFqIQEMAQsLIAIgAxEBAAsyACAAQQAQqw0CQCAAECUEQCAAQQA6AA8MAQsgAEEANgIECyAAECUEfyAABSAAKAIACwt5AQJ/AkACQAJAIAEOBAEAAAACCyAAEBohAyABQQFHIQQDQCADRQ0CAkAgBEUEQCADIAIQ2QEMAQsgACADECkhAQNAIAFFDQEgASACENkBIAAgARAsIQEMAAsACyAAIAMQGyEDDAALAAsgACAAQe4CIAJBARDkAxoLC4cBAQJ/AkAgACABKQMIEOMDRQ0AIAAQNCAARgRAIAAgARBvIQIDQCACBEAgACACIAEQdCAAIAIQ6gchAgwBCwsgAC0AGEEgcQRAIAEQ4w0LIAAgARDfByABEN0HIABBASABKQMIEOIHCyAAIAFB6gJBAEEAEOQDDQAgABA0IABGBEAgARAXCwsLNQEBf0EYEOMBIgUgBDoAFCAFIAAgARCqATYCCCAAIAIQqgEhACAFIAM2AhAgBSAANgIMIAULCQBBh5MLEO0KC7cDAQl8AkACQEEBQX9BACAAKwMIIgggASsDCCIJoSIFIAIrAwAiCyABKwMAIgShoiAAKwMAIgYgBKEiByACKwMIIgogCaGioSIMRC1DHOviNhq/YxsgDEQtQxzr4jYaP2QbIgANACAEIAZiBEBBASEBIAYgC2MgBCALZHENAiAEIAtjRSAGIAtkRXINAQwCC0EBIQEgCCAKYyAJIApkcQ0BIAggCmRFDQAgCSAKYw0BCwJAQQFBf0EAIAUgAysDACIFIAShoiAHIAMrAwgiByAJoaKhIgxELUMc6+I2Gr9jGyAMRC1DHOviNho/ZBsiAg0AIAQgBmIEQEEBIQEgBSAGZCAEIAVkcQ0CIAQgBWNFIAUgBmNFcg0BDAILQQEhASAHIAljIAcgCGRxDQEgByAIY0UNACAHIAlkDQELIAAgAmxBAUF/QQAgCiAHoSIKIAYgBaGiIAsgBaEiBiAIIAehoqEiCEQtQxzr4jYav2MbIAhELUMc6+I2Gj9kG0EBQX9BACAKIAQgBaGiIAYgCSAHoaKhIgRELUMc6+I2Gr9jGyAERC1DHOviNho/ZBtscUEfdiEBCyABC+MDAgh/An4jAEEgayIGJABB7JILKAIAIQMCQAJAAkAgACgCBCIFQQNsQQJrIgdB6JILKAIAIgRLBEAgBEH/////AE8NASAHQYCAgIABTw0CIAMgB0EEdCICED0iA0UNAyAEQQR0IgQgAkkEQCADIARqQQAgAiAEaxAzGgtB6JILIAc2AgBB7JILIAM2AgALIAMgACgCACIAKQMANwMAIAMgACkDCDcDCCAAKQMAIQogAyAAKQMINwMYIAMgCjcDEEECIQRBAiAFIAVBAk0bQQFrIQlBASEFA0AgBSAJRkUEQCADIARBBHRqIgIgACAFQQR0aiIIKQMANwMAIAIgCCkDCDcDCCAIKQMAIQogAiAIKQMIIgs3AxggAiAKNwMQIAIgCjcDICACIAs3AyggBEEDaiEEIAVBAWohBQwBCwsgAyAEQQR0aiICIAAgCUEEdGoiACkDADcDACACIAApAwg3AwggACkDACEKIAIgACkDCDcDGCACIAo3AxAgASADNgIAIAEgBzYCBCAGQSBqJAAPC0GRtANB3v0AQc0AQZOzARAAAAsgBkEQNgIEIAYgBzYCAEHo+gYoAgBB2t0DIAYQHRoQJgALIAYgAjYCEEHo+gYoAgBBqd0DIAZBEGoQHRoQJgALLAAgAEHYkgsoAgBPBEBB/aoDQY+3AUEyQdIlEAAAC0HUkgsoAgAgAEEobGoL5gECBX8CfCMAQTBrIgIkACAAKAIEIgRBAWshBiAAKAIAIQUDQCAEIAMiAEcEQCACIAUgACAGaiAEcEEEdGoiAykDCDcDKCACIAMpAwA3AyAgAiAFIABBBHRqIgMpAwg3AxggAiADKQMANwMQIAIgASkDCDcDCCACIAEpAwA3AwAgAEEBaiEDQQFBf0EAIAIrAyggAisDGCIHoSACKwMAIAIrAxAiCKGiIAIrAyAgCKEgAisDCCAHoaKhIgdELUMc6+I2Gr9jGyAHRC1DHOviNho/ZBtBAUcNAQsLIAJBMGokACAAIARPC/MCAQR8AnwCQCABIABBOGxqIgArAxgiAyAAKwMIIgRESK+8mvLXej6gZEUEQCADIARESK+8mvLXer6gYw0BIAArAxAgACsDAGRFDQELIAMgAisDCCIGoZlESK+8mvLXej5lBEBEAAAAAAAA8D9EAAAAAAAA8L8gAisDACAAKwMQYxsMAgsgACsDACEFIAQgBqGZREivvJry13o+ZQRARAAAAAAAAPA/RAAAAAAAAPC/IAIrAwAgBWMbDAILIAArAxAgBaEgBiAEoaIgAisDACAFoSADIAShoqEMAQsgAyACKwMIIgWhmURIr7ya8td6PmUEQEQAAAAAAADwP0QAAAAAAADwvyACKwMAIAArAxBjGwwBCyAEIAWhmURIr7ya8td6PmUEQEQAAAAAAADwP0QAAAAAAADwvyACKwMAIAArAwBjGwwBCyAAKwMAIAArAxAiBqEgBSADoaIgAisDACAGoSAEIAOhoqELRAAAAAAAAAAAZAuZDAIPfwN+AkACQCABBEAgAkUNASACKAIAIgVBP0wEQCACQQhqIQdBACEDAkADQCADQcAARg0BIANBFGwgA0EBaiEDIAdqIgAoAhANAAsgACABKQIANwIAIAAgASgCEDYCECAAIAEpAgg3AgggAiAFQQFqNgIAQQAPC0Hp1gFBlL0BQaEBQdr6ABAAAAsgA0UNAiAAIQUjAEGgBGsiBiQAAkAgAgRAIAEEQCAFQQhqIQogAkEIaiEHIAIoAgQhDQJAA0ACQCAEQcAARgRAIAUgASkCADcCiAogBUGYCmogASgCEDYCACAFQZAKaiABKQIINwIAIAUgCikCADcCnAogBUGkCmogCikCCDcCACAFQZwKaiEAQQEhBANAIARBwQBGDQIgBkEQaiAAIAogBEEUbGoQ+gIgACAGKQIYNwIIIAAgBikCEDcCACAEQQFqIQQMAAsACyAHIARBFGwiAGoiCCgCEEUNAiAAIApqIgAgCCkCADcCACAAIAgoAhA2AhAgACAIKQIINwIIIARBAWohBAwBCwsgBSAAEPsCNwOwCiACEKMOIAVCADcDwA4gBkIANwIUIAZBATYCECAGQQA2AhwgBkF/NgIYIAVB4A5qIgAgBikCGDcCACAFIAYpAhA3AtgOIAVCADcD6A4gBUHwDmpCADcDACAFQdAOaiAAKQMANwMAIAUgBSkD2A43A8gOIAVBvAxqIQwgBUHYDmohESAFQcgOaiESIAVBwA5qIQ4gBUG4CmohD0EAIQQDQCAEQcEARwRAIAwgBEECdCIAakEANgIAIAAgD2pBfzYCACAEQQFqIQQMAQsLQQAhBAJAAkACQANAIARBwQBGBEACQEEAIQBBACEHA0AgAEHAAEcEQCAKIABBFGxqIQkgBkEQaiAAQQN0aiEIIABBAWoiASEEA0AgBEHBAEYEQCABIQAMAwUgBiAJIAogBEEUbGoQ+gIgBhD7AiAIKQMAIAZBEGogBEEDdGopAwB8fSITIBQgEyAUViIQGyEUIAAgByAQGyEHIAQgCyAQGyELIARBAWohBAwBCwALAAsLQQAhACAFIAdBABDdBSAFIAtBARDdBUEAIQcDQAJAIAUoAsQOIgkgBSgCwA4iBGohASAEQcAASiAJQcAASnIgAUHAAEpyDQBCACEUQQAhCUEAIQQDQCAEQcEARgRAIAUgByAAEN0FDAMFIAwgBEECdGooAgBFBEAgBkEQaiIIIAogBEEUbGoiASASEPoCIAgQ+wIhFSAFKQPoDiETIAYgASAREPoCIAYgBikCCDcDGCAGIAYpAgA3AxACQCAJIBUgE30iFSAIEPsCIAUpA/AOfSITfSATIBV9IBMgFVQiARsiEyAUWHFFBEAgEyEUIAEhACAEIQcMAQsgEyAUUg0AIAQgByAOIAFBAnRqKAIAIA4gAEECdGooAgBIIggbIQcgASAAIAgbIQALQQEhCQsgBEEBaiEEDAELAAsACwsgAUHAAEwEQCAEQcAASiEAQQAhBANAIARBwQBHBEAgDCAEQQJ0aigCAEUEQCAFIAQgABDdBQsgBEEBaiEEDAELCyAFKALEDiEJIAUoAsAOIQQLIAQgCWpBwQBHDQAgBCAJckEASA0DIAMQgAgiATYCACACIA02AgQgASANNgIEQQAhBANAIARBwQBHBEAgDyAEQQJ0aigCACIAQQJPDQYgBSAKIARBFGxqIAEgAiAAG0EAELgEGiAEQQFqIQQMAQsLIAMoAgAoAgAgAigCAGpBwQBHDQUgBkGgBGokAAwJCwUgBkEQaiAEQQN0aiAKIARBFGxqEPsCNwMAIARBAWohBAwBCwtBmogDQb25AUGzAUHb3QAQAAALQZiSA0G9uQFBtQFB290AEAAAC0HGhgNBvbkBQYgCQZExEAAAC0HyhwNBvbkBQcUAQcufARAAAAtBvqgBQb25AUHcAEH6LxAAAAtBoL8BQb25AUEmQcufARAAAAtBmesAQb25AUElQcufARAAAAtBAQ8LQaC/AUGUvQFBlQFB2voAEAAAC0GZ6wBBlL0BQZYBQdr6ABAAAAtB/BVBlL0BQaQBQdr6ABAAAAvWBgELfyMAQTBrIgUkACABLQAAIgFBBHEhCiABQQhxIQsgAUEBcSEJIAFBAnEhDANAIAAiBi0AACIDBEAgByEIIAPAIQcgBkEBaiEAAn8CQAJAAkACQAJAAkAgA0E8aw4DAQQCAAsgA0EtRg0CIANBJkcNAwJAIAkNACAALQAAIgRBO0YNACAAIQECQCAEQSNGBEAgBi0AAkEgckH4AEcEQCAGQQJqIQEDQCABLAAAIQQgAUEBaiEBIARBMGtBCkkNAAsMAgsgBkEDaiEBA0ACQCABLQAAIgTAQTBrQQpJDQAgBEH/AXEiDUHhAGtBBkkNACANQcEAa0EFSw0DCyABQQFqIQEMAAsACwNAIAEtAAAhBCABQQFqIQEgBEHfAXHAQcEAa0EaSQ0ACwsgBEH/AXFBO0YNBAsgAkHv2gEQGQwFCyACQeXaARAZDAQLIAJB6toBEBkMAwsgDEUNASACQYDbARAZDAILIAhB/wFxQSBHIAdBIEdyRQRAIApFDQEgAkGS2wEQGQwCCwJAAkACQAJAIANBCmsOBAEDAwIACyADQSdHBEAgA0EiRw0DIAJB3toBEBkMBQsgAkH62gEQGQwECyAJRQ0CIAJBmdsBEBkMAwsgCUUNASACQYzbARAZDAILIAtFIAdBAE5yDQACf0ECIANB4AFxQcABRg0AGkEDIANB8AFxQeABRg0AGiADQfgBcUHwAUZBAnQLIghFIQRBASEBA0AgBEEBcSIDRSABIAhJcQRAIAEgBmotAABFIQQgAUEBaiEBDAEFIANFBEAgBQJ/AkACQAJAAkAgCEECaw4DAwABAgsgBi0AAkE/cSAGLQABQT9xQQZ0ciAHQQ9xQQx0cgwDCyAGLQADQT9xIAYtAAJBP3FBBnRyIAYtAAFBP3FBDHRyIAdBB3FBEnRyDAILIAVBnwE2AgQgBUGpugE2AgBB6PoGKAIAQdaxBCAFEB0aEG4ACyAALQAAQT9xIAdBH3FBBnRyCzYCECAFQSNqIgFBDUHX2gEgBUEQahClARogACAIakEBayEAIAIgARAZDAQLCwtB2dUEQS1BAUHo+gYoAgAQShoQJgALIAVBADoAJCAFIAc6ACMgAiAFQSNqEBkLQQBODQELCyAFQTBqJAALVAEBfCAAKAIQIgAgAEEoQSAgARtqKwMARAAAAAAAAFJAokQAAAAAAADgP6IiAjkDWCAAIAI5A2AgACAAQSBBKCABG2orAwBEAAAAAAAAUkCiOQNQC9ABAQJ/IwBBIGsiASQAIAFCADcDECABQgA3AwgDQCABIABBAWo2AhwgAC0AACIABEACQAJAIABBJkcNACABQRxqEKcOIgANAEEmIQAMAQsgAEH+AE0NACAAQf4PTQRAIAFBCGogAEEGdkFAchCeASAAQT9xQYB/ciEADAELIAFBCGoiAiAAQQx2QWByEJ4BIAIgAEEGdkE/cUGAf3IQngEgAEE/cUGAf3IhAAsgAUEIaiAAwBCeASABKAIcIQAMAQsLIAFBCGoQsgMgAUEgaiQACzAAIAEQKyABIAJBAEEBEFIiAUH5JUG4AUEBEC4aIAAgARDSBSABKAIQQQE6AHEgAQufDAIIfwh8IwBBMGsiBiQAAkAgAQRAIAErAxAhDiABKwMAIREgBiABKwMIIhUgASsDGCIToEQAAAAAAADgP6IiEjkDKCAGIBEgDqBEAAAAAAAA4D+iIhQ5AyAMAQsgBkIANwMoIAZCADcDICAAECshByAAKAIQIggrA1giDyAIKwNQRAAAAAAAAOA/oiIQIAcoAhAtAHRBAXEiBxshEyAQIA8gBxshDiAPmiIPIBCaIhAgBxshFSAQIA8gBxshEQsgAUEARyENIA4gExAkIRBBASELRAAAAAAAAAAAIQ8CQAJAIANFDQAgAy0AACIMRQ0AIBBEAAAAAAAAEECiIRBBACEIQQAhBwJAAn8CQAJAAkACQAJAAkACQAJAIAxB3wBrDgcEBwcHCwcBAAsgDEHzAGsOBQEGBgYCBAsgAy0AAQ0FAkAgBQRAIAZBIGogBSASIBAQ/QIMAQsgBiAOOQMgCyAEQQJxIQdBASEJDAcLIAYgFTkDKCADLQABIgNB9wBHBEAgA0HlAEcEQCADDQUgBQRAIAZBIGogBSAQmiAUEP0CC0EBIQkgBEEBcSEHRBgtRFT7Ifm/IQ8MCAsCQCAFBEAgBkEgaiAFIBCaIBAQ/QIMAQsgBiAOOQMgCyAEQQNxIQdBASEJRBgtRFT7Iem/IQ8MBwsCQCAFBEAgBkEgaiAFIBCaIg4gDhD9AgwBCyAGIBE5AyALIARBCXEhB0EBIQlE0iEzf3zZAsAhDwwGCyADLQABDQMCQCAFBEAgBkEgaiAFIBIgEJoQ/QIMAQsgBiAROQMgCyAEQQhxIQdBASEJRBgtRFT7IQlAIQ8MBQtBASEKIAQMAwsgDEHuAEcNASAGIBM5AyggAy0AASIDQfcARwRAIANB5QBHBEAgAw0CIAUEQCAGQSBqIAUgECAUEP0CCyAEQQRxIQdBASEJRBgtRFT7Ifk/IQ8MBQsCQCAFBEAgBkEgaiAFIBAgEBD9AgwBCyAGIA45AyALIARBBnEhB0EBIQlEGC1EVPsh6T8hDwwECwJAIAUEQCAGQSBqIAUgECAQmhD9AgwBCyAGIBE5AyALIARBDHEhB0EBIQlE0iEzf3zZAkAhDwwDCyAGIBI5AygLQQEhCEEACyEHDAILQQAhC0EBIQ0MAQtBACEIQQAhBwsgABArKAIQKAJ0IQMgBiAGKQMoNwMIIAYgBikDIDcDACAGQRBqIAYgA0EDcUHaAGwQnw8gBiAGKQMYNwMoIAYgBikDEDcDIAJAIAoNAAJAAkACQCAAECsoAhAoAnRBA3FBAWsOAwEAAgMLAkACQCAHQQFrDgQBBAQABAtBASEHDAMLQQQhBwwCCyAHQQFrIgNB/wFxIgRBCE9BiwEgBHZBAXFFcg0BQoiCiJCgwICBBCADQQN0rUL4AYOIpyEHDAELIAdBAWsiA0H/AXEiBEEIT0GLASAEdkEBcUVyDQBCiIiIkKDAgIEBIANBA3StQvgBg4inIQcLIAIgATYCGCACIAc6ACEgAiAGKQMgNwMAIAIgBikDKDcDCCAPIQ4CQAJAAkACQCAAECsoAhAoAnRBA3FBAWsOAwEAAgMLIA+aIQ4MAgsgD0QYLURU+yH5v6AhDgwBCyAPRBgtRFT7IQlAYQRARBgtRFT7Ifm/IQ4MAQsgD0TSITN/fNkCQGEEQEQYLURU+yHpvyEODAELRBgtRFT7Ifk/IQ4gD0QYLURU+yH5P2EEQEQAAAAAAAAAACEODAELIA9EAAAAAAAAAABhDQAgD0QYLURU+yHpv2EEQETSITN/fNkCQCEODAELIA8iDkQYLURU+yH5v2INAEQYLURU+yEJQCEOCyACIA45AxAgBisDKCEOAn8gBisDICIPRAAAAAAAAAAAYQRAQYABIA5EAAAAAAAAAABhDQEaCyAOIA8QpwFE0iEzf3zZEkCgIg5EGC1EVPshGcCgIA4gDkQYLURU+yEZQGYbRAAAAAAAAHBAokQYLURU+yEZQKMiDplEAAAAAAAA4EFjBEAgDqoMAQtBgICAgHgLIQEgAiAJOgAdIAIgAToAICACIAo6AB8gAiALOgAeIAIgDToAHCAGQTBqJAAgCAsTACAAIAFBsiJB9gVBnroBEI8DCwsAIAAgAUEBEN4OC7gCAgR/A3wjAEGAAWsiASQAIAEgACgCUDYCcEHo+gYoAgAiA0H0ywQgAUHwAGoQHRoDQCAAKAJQIAJNBEAgACsDACEFIAArAwghBiAALQAdIQIgASAAKwMQOQNgIAFB/q0BQfqtASACGzYCaCABIAY5A1ggASAFOQNQIANBnvUDIAFB0ABqEC0gACsDKCEFIAArAzAhBiAALQBFIQIgAUFAayAAKwM4OQMAIAFB/q0BQfqtASACGzYCSCABIAY5AzggASAFOQMwIANB0fUDIAFBMGoQLSABQYABaiQABSAAKAJUIAJBBXRqIgQrAwAhBSAEKwMIIQYgBCsDECEHIAEgBCsDGDkDICABIAc5AxggASAGOQMQIAEgBTkDCCABIAI2AgAgA0GA4wQgARAtIAJBAWohAgwBCwsLCwAgACABQQAQ3g4LCQBBi5ELEO0KC9UHARF/IwBBIGsiCCQAIAAEQEHQzgooAgAiDygCECIEKALoASEKA0ACQCAEKALsASAKSgRAIAQoAsQBIgEgCkEGdCIMaiICLQAxQQFGBEAgAigCNCECDAILIAIoAgQhDUEAIQUgAEEANgIEQQAhAkEAIQYDQCABIAxqIgMoAgAiByAGTARAQQAhASAHQQAgB0EAShshBQNAIAEgBUYEQAJAQQAhASADQUBrKAIAIgVBACAFQQBKGyEFA0AgASAFRg0BIAMoAkQgAUECdGooAgAoAhAiBi0AoQFBAUYEQCAIIAYpAsABNwMQIAhBEGpBfxCcDiACaiECCyABQQFqIQEMAAsACwUgAygCBCABQQJ0aigCACgCECIGLQChAUEBRgRAIAggBikCyAE3AxggCEEYakEBEJwOIAJqIQILIAFBAWohAQwBCwsgBCgCxAEgDGoiAUEBOgAxIAEgAjYCNAwDCwJAIAVBAEwNACANIAZBAnRqIQdBACEEA0AgBygCACgCECgCyAEgBEECdGooAgAiA0UNASAFIANBUEEAIAMoAgBBA3FBAkcbaigCKCgCECgC+AEiASABIAVIGyEJA0AgASAJRwRAIAFBAWoiASAAKAIESQR/IAAgARCXDiADKAIQLgGaAWwFQQALIAJqIQIMAQsLIARBAWohBAwACwALIA0gBkECdGohEEEAIQcCQANAIBAoAgAoAhAoAsgBIAdBAnRqKAIAIgkEQAJAIAAoAgQiASAJQVBBACAJKAIAQQNxQQJHG2ooAigoAhAoAvgBIgNLDQAgA0EBaiILIAFLBEADQCABIAtPDQICQCAAKAIIIAFHBEAgACgCACEEDAELAkAgCCABQQF0QQEgARsiAUH/////A0sEf0HEAAUgACgCACABQQJ0ED0iBA0BQTALEKMBNgIAQej6BigCAEG79AMgCBAdGhAmAAsgBCAAKAIIIhFBAnRqQQAgASARa0ECdBAzGiAAIAE2AgggACAENgIAIAAoAgQhAQsgBCABQQJ0akEANgIAIAAgAUEBaiIBNgIEDAALAAsgASALTQ0AA0AgASALTQ0BIAAgAUEBayIBNgIEDAALAAsgACADEJcOIQEgACgCBCADTQ0CIAMgBSADIAVKGyEFIAAoAgAgA0ECdGogASAJKAIQLgGaAWo2AgAgB0EBaiEHDAELCyAGQQFqIQYgDygCECIEKALEASEBDAELC0HeqwNBo/wAQRZBvCAQAAALIAhBIGokACAODwsgCkEBaiEKIAIgDmohDgwACwALQe/PAUGZuAFBoAxB0SgQAAALSgAgACgCEEHAAWohAANAIAAoAgAiAARAIAAoAhAoApgCEBcgACgCECgCoAIQFyAAKAIQIgBBADYCsAEgAEG4AWohAAwBCwsQ8g4LPwECfyAAKAIQKAKoAiEAA0AgACIBKAIMIgBFIAAgAUZyRQRAIAAoAgwiAkUNASABIAI2AgwgAiEADAELCyABC3wBBH8jAEEQayIFJAADQCADKAIAIgYEQCADKAIEIQcgA0EIaiEDQeCOCwJ/IAYgASACQQhB/QEQ4QMiCARAIAAgByAIKAIEEQAAQeCOCygCAHIMAQsgBSAENgIEIAUgBjYCAEHrqgQgBRAnQQELNgIADAELCyAFQRBqJAALrgMCAn8CfAJAIABBqvAAECMiAUUNACABLQAARQ0AIAAoAkgoAhAiAiACLQBxQQhyOgBxIAAgASABEK0CQQBHQQF0IAAgAEEAQc2HAUEAEB9EAAAAAAAALEBEAAAAAAAA8D8QUyAAIABBAEGUmAFBABAfQbXpABBRIAAgAEEAQbc2QQAQH0Ht9AAQURD/AiEBIAAoAhAgATYCDCAAQYqzARAjIQECfwJAAkAgABA0IABHBEAgAUUNAiABLQAAQeIARg0BDAILIAFFDQAgAS0AAEH0AEYNAQtBAAwBC0EBCyEBAkAgAEH9FxAjIgJFDQAgAi0AACICQfIARwRAIAJB7ABHDQEgAUECciEBDAELIAFBBHIhAQsgACgCECABOgCTAiAAEDQgAEYNACAAKAIQKAIMIgErAyBEAAAAAAAAIECgIQMgASsDGEQAAAAAAAAwQKAhBCAAEDQgACgCECIBQTBqIQAgAS0AkwIhASgCEC0AdEEBcUUEQCAAIAFBBXRBIHFqIgAgAzkDCCAAIAQ5AwAPCyAAQRBBMCABQQFxG2oiACAEOQMIIAAgAzkDAAsLrwEBA38CfyABEDQiASgCEC0Ac0EBRgRAIAAQuwQMAQsgACABEIQICyIAIgMhAQNAQQAhAgJAAkADQCABLQAAIgRFDQEgAUEBaiEBIAJBAXEEQEEKIQICQAJAAkAgBEHsAGsOBwIBAgEBAQABC0ENIQIMAQsgBCECCyADIAI6AAAMAwtBASECIARB3ABGDQALIAMgBDoAAAwBCyADQQA6AAAgAA8LIANBAWohAwwACwALGAAgACgCACAAKAKgASAAKAKcASABEKIPC6xJAxh/DnwCfiMAQdAQayIDJAAgA0HICWogACkAmAI3AwAgA0HACWogACkAkAI3AwAgA0G4CWogACkAiAI3AwAgAyAAKQCAAjcDsAkCQAJAAkAgASgCECIEKAIIIgJFDQAgAisAGCADKwOwCWZFDQAgAysDwAkgAisACGZFDQAgAisAICADKwO4CWZFDQAgAysDyAkgAisAEGYNAQsgBCgCYCICBH8gAyADQcgJaikDADcD+AIgAyADQcAJaikDADcD8AIgAyADQbgJaikDADcD6AIgAyADKQOwCTcD4AIgAiADQeACahCmDg0BIAEoAhAFIAQLKAJsIgJFDQEgAi0AUUEBRw0BIAMgA0HICWopAwA3A9gCIAMgA0HACWopAwA3A9ACIAMgA0G4CWopAwA3A8gCIAMgAykDsAk3A8ACIAIgA0HAAmoQpg5FDQELAkAgACgCnAFBAkgNACAAIAFB/I0LKAIAQeX0BBB6IgIQyQQNACACLQAADQEgAUEoaiEHQQAhAgNAQTAhCUEDIQYCQAJAIAIOAwEABAALQVAhCUECIQYLIAcgCUEAIAEoAgBBA3EgBkcbaigCAEGEjQsoAgBB5fQEEHoiBC0AAEUNASACQQFqIQIgACAEEMkERQ0ACwsgA0IANwOIAyADQgA3A4ADIANBgANqIgQgAUEwQQAgASgCAEEDcUEDRxtqKAIoEB4QtQMgBEHF2gFBupgDIAEgAUEwayICIAEoAgBBA3FBAkYbKAIoECsQ+gEbELUDIAQgASACIAEoAgBBA3FBAkYbKAIoEB4QtQMgACAEEO8DEPgDIAQQZiABQYCOCygCAEHl9AQQeiICLQAABEAgACACEPgDCwJAIAFB6I0LKAIAQeX0BBB6IgItAAAiFkUNACACEO4DGkHAiAshDEHAiAshAgNAIAIoAgAiBEUNASACQQRqIQIgBEHVLRBHRQ0ACwwBCyAAKAKYASEXIAAQ8wMiCEEJNgIMIAggATYCCCAIQQM2AgQCQCABKAIQKAJgIgJFDQAgAi0AUg0AIAFBiq4BECMQakUNACAIIAgvAYwCQYAEcjsBjAILAkAgFkUNACABKAIQKAIIRQ0AIAAgDBDcAQsCQEG8jgsoAgAiAkUNACABIAIQPiICRQ0AIAItAABFDQAgACABQbyOCygCAEQAAAAAAADwP0QAAAAAAAAAABBTEIACCwJAIBdBgICACHFFDQAgASABQTBqIgIgASgCAEEDcUEDRhsoAigQKygCEC8BsgFBA08EQCAIAn8gASACIAEoAgBBA3FBA0YbKAIoKAIQKAKUASsDEEQAAAAAAABSQKIiGkQAAAAAAADgP0QAAAAAAADgvyAaRAAAAAAAAAAAZhugIhqZRAAAAAAAAOBBYwRAIBqqDAELQYCAgIB4C7c5A7gBIAgCfyABQVBBACABKAIAQQNxQQJHG2ooAigoAhAoApQBKwMQRAAAAAAAAFJAoiIaRAAAAAAAAOA/RAAAAAAAAOC/IBpEAAAAAAAAAABmG6AiGplEAAAAAAAA4EFjBEAgGqoMAQtBgICAgHgLtzkDwAEMAQsgCEIANwO4ASAIQgA3A8ABCwJAIBdBgIACcUUNAAJAIAEoAhAiBCgCYCICRQRAIAgoAsgBIQkMAQsgCCACKAIAIgk2AsgBCyAIIAk2AtQBIAggCTYCzAEgCCAJNgLQASAEKAJsIgIEQCAIIAIoAgA2AswBCyAEKAJoIgIEQCAIIAIoAgA2AtABCyAEKAJkIgJFDQAgCCACKAIANgLUAQtBACECQQAhCQJAIBdBgIAEcUUNACADQbgJakIANwMAIANCADcDsAkgCCAAIAEgA0GwCWoiBBD8BSABEIABNgLcASAEEGYCQAJAIAFB3YUBECMiBgRAIAYtAAANAQsgAUH4zQEQIyIGRQ0BIAYtAABFDQELIAYgARCAASEJCwJAIAgCfwJAAkAgAUHQhQEQIyIGBEAgBi0AAA0BCyABQezNARAjIgZFDQEgBi0AAEUNAQsgBiABEIABDAELIAlFDQEgCRBhCzYC2AELAkAgCAJ/AkACQCABQcaFARAjIgYEQCAGLQAADQELIAFB480BECMiBkUNASAGLQAARQ0BCyAGIAEQgAEMAQsgCUUNASAJEGELNgLgAQsCQAJAAkAgAUG9hQEQIyIGBEAgBi0AAA0BCyABQdvNARAjIgZFDQEgBi0AAEUNAQsgCCAGIAEQgAE2AuQBIAggCC8BjAJBgAFyOwGMAgwBCyAJRQ0AIAggCRBhNgLkAQsCQAJAIAFB2YUBECMiBgRAIAYtAAANAQsgAUH0zQEQIyIGRQ0BIAYtAABFDQELIAggBiABEIABNgLoASAIIAgvAYwCQYACcjsBjAIMAQsgCUUNACAIIAkQYTYC6AELAkAgF0GAgIAEcUUNAAJAIAFBuiEQIyIERQ0AIAQtAABFDQAgBCABEIABIQILAkAgCAJ/AkAgAUGrIRAjIgRFDQAgBC0AAEUNACAIIAgvAYwCQcAAcjsBjAIgBCABEIABDAELIAJFDQEgAhBhCzYC/AELAkAgCAJ/AkAgAUGfIRAjIgRFDQAgBC0AAEUNACAEIAEQgAEMAQsgAkUNASACEGELNgKAAgsCQAJAIAFBlCEQIyIERQ0AIAQtAABFDQAgCCAEIAEQgAE2AoQCIAggCC8BjAJBEHI7AYwCDAELIAJFDQAgCCACEGE2AoQCCyAIAn8CQCABQbYhECMiBEUNACAELQAARQ0AIAggCC8BjAJBIHI7AYwCIAQgARCAAQwBCyACRQRAQQAhAgwCCyACEGELNgKIAgsCQCAXQYCAgAJxRQ0AAkACQAJAIAFBg9oAECMiBgRAIAYtAAANAQsgAUHz2QAQIyIGRQ0BIAYtAABFDQELIAggBiABEMgEIgQgARCAATYC7AEgBBAXIAggCC8BjAJBAXI7AYwCDAELIAgoAsgBIgRFDQAgCCAEEGE2AuwBCwJAAkAgAUHm2QAQIyIERQ0AIAQtAABFDQAgCCAEIAEQyAQiBCABEIABNgLwASAEEBcgCCAILwGMAkEIcjsBjAIMAQsgCCgCyAEiBEUNACAIIAQQYTYC8AELAkACQCABQdrZABAjIgRFDQAgBC0AAEUNACAIIAQgARDIBCIEIAEQgAE2AvQBIAQQFyAIIAgvAYwCQQJyOwGMAgwBCyAIKALQASIERQ0AIAggBBBhNgL0AQsCQCABQf/ZABAjIgRFDQAgBC0AAEUNACAIIAQgARDIBCIEIAEQgAE2AvgBIAQQFyAIIAgvAYwCQQRyOwGMAgwBCyAIKALUASIERQ0AIAggBBBhNgL4AQsgCRAXIAIQFwJAIBdBgICEAnFFDQAgASgCECgCCCIKRQ0AAkAgCCgC2AFFBEAgCCgC7AFFDQIgF0GAgCBxDQEMAgsgF0GAgCBxRQ0BCyAKKAIEIQ8gACgCECsDoAFEAAAAAAAA4D+iRAAAAAAAAABAECQhIQJAA0ACQCAPIBlGBEAgCCAVNgKgAiAIIAU2ApwCIBdBgMAAcQ0DQQAhCUEAIQIMAQsgCigCAEEYEPIDIgRBATYCECAZQTBsaiIYKAIEQQFrQQNuIQtBACEHIAQhBkEAIRADQCALIBBGBEAgBCECQQAhCQNAIAIiBgRAIAlBBHQiAiADQZADamohECADQbAJaiACaiEYIAYrAwghICAGKwMAIRsgBigCECECAkAgBwRAIAcrAwghGiAHKwMAIR8gAgRAIAIrAwghHSACKwMAIR4MAgsgICAgoCAaoSEdIBsgG6AgH6EhHgwBCyAgICCgIAIrAwgiHaEhGiAbIBugIAIrAwAiHqEhHwsgHSAgoSAeIBuhEKcBIRwgGCAgICEgGiAgoSAfIBuhEKcBIhogHCAaoSIaRBgtRFT7IRnAoCAaIBpEAAAAAAAAAABkG0QAAAAAAADgP6KgIhoQV6IiHKA5AwggGCAbICEgGhBEoiIaoDkDACAQICAgHKE5AwggECAbIBqhOQMAIAlBAWohCUEAIRECQCACRQRAQQAhDQwBCyAGIQdBACENIAlBMkcNAgsDQCAFIA1HBEAgFSANQQJ0aigCACARaiERIA1BAWohDQwBCwsgFSAFIAVBAWoiB0EEEGAiFSAFQQJ0aiAJQQF0IgU2AgAgEyARIAUgEWoiBUEQEGAiEyARQQR0aiEUIAVBAWshEkEAIQ0DQCAJIA1HBEAgFCANQQR0IgtqIg4gA0GwCWogC2oiBSkDCDcDCCAOIAUpAwA3AwAgEyASIA1rQQR0aiIOIANBkANqIAtqIgUpAwg3AwggDiAFKQMANwMAIA1BAWohDQwBCwsgAyAYKQMANwOwCSADIBgpAwg3A7gJIAMgECkDADcDkAMgAyAQKQMINwOYA0EBIQkgByEFIAYhBwwBCwsDQCAEBEAgBCgCECAEEBchBAwBCwsgGUEBaiEZDAMLIBgoAgAgEEEwbGohFEEAIQIDQCACQQRGBEAgEEEBaiEQIANB0A9qIAYQtgghBgwCBSACQQR0Ig4gA0HQD2pqIhIgDiAUaiIOKQMANwMAIBIgDikDCDcDCCACQQFqIQIMAQsACwALAAsLA0AgAiAFRwRAIBUgAkECdGooAgAgCWohCSACQQFqIQIMAQsLIAAgEyATIAkQkgIaCyAIIBM2ApgCIAhBAjYCkAIgCCATNgKkAiAIIBUoAgA2ApQCCwJAIAAoAjwiAkUNACACKAJAIgJFDQAgACACEQEACwJAIAgoAtgBIgJFBEAgCC0AjAJBAXFFDQELIAAgAiAIKALsASAIKAL8ASAIKALcARC7AQsgACgCECsDoAEhISABQfGXARAjEM4CIRgCQCABKAIQKAIIRQ0AQQAhDSABQfSNCygCAEQAAAAAAADwP0QAAAAAAAAAABBTISIgAUGojQsoAgBB5fQEEHohB0EAIRACQCAWRQ0AIAwhAgNAIAIoAgAiBEEARyEQIARFDQEgAkEEaiECIARB/awBEEdFDQALCyAHIQJBACEGAkACQAJAA0ACQAJAAkACQAJAIAItAAAiBEE6aw4CAQIACyAEDQIgDUUgBkVyDQcgByAGQQFqIANBlBBqEPsFIgdBAkgNAyABIAFBMGoiBCABKAIAQQNxQQNGGygCKBArIAEgBCABKAIAQQNxQQNGGygCKBAeIQQQ+gEhAiADIAFBUEEAIAEoAgBBA3FBAkcbaigCKBAeNgK4AiADQdO9A0HDvwMgAhs2ArQCIAMgBDYCsAJBpuMDIANBsAJqEHwgB0ECRw0FDAYLIAZBAWohBgwBCyANQQFqIQ0LIAJBAWohAgwBCwsgB0EBRg0BCyADQdAJaiESIANBwAlqIQ4gAygCnBAhB0EAIQ1BACEEA0ACQAJAIAEoAhAoAggiAigCBCAESwRAIANBsAlqIAIoAgAgBEEwbGpBMBAgGkEBIQZEAAAAAAAA8D8hHSAHIQIDQCACKAIAIgVFDQMCQCACKwMImUTxaOOItfjkPmMNACAAIAUQRSAdIAIrAwgiGqEhHSACKAIAIQ0gBgRAIANBsAlqIBogA0HQD2ogA0GgEGoQpQ9BACEGIAAgAygC0A8iBSADKALUD0EAEIECIAUQFyAdmUTxaOOItfjkPmNFDQEgAygCoBAhAgwECyAdmUTxaOOItfjkPmMEQCAAIAMoAqAQIgIgAygCpBBBABCBAgwECyADQZADaiIFIANBoBBqIgZBMBAgGiAFIBogGiAdoKMgA0HQD2ogBhClDyADKAKQAxAXQQAhBiAAIAMoAtAPIgUgAygC1A9BABCBAiAFEBcLIAJBGGohAgwACwALIANBlBBqEMwEDAULIAIQFwsgAygCuAkiBgRAIAAgBygCABBFIAAgBygCABBYIAMgDikDCDcDqAIgAyAOKQMANwOgAiADIAMoArAJIgIpAwg3A5gCIAMgAikDADcDkAIgAEECIANBoAJqIANBkAJqICIgISAGENACCyADKAK8CSIGBEAgACANEEUgACANEFggAyASKQMINwOIAiADIBIpAwA3A4ACIAMgAygCsAkgAygCtAlBBHRqQRBrIgIpAwg3A/gBIAMgAikDADcD8AEgAEEDIANBgAJqIANB8AFqICIgISAGENACCwJAIBZFIAEoAhAoAggoAgRBAklyDQAgAygCuAkgAygCvAlyRQ0AIAAgDBDcAQsgBEEBaiEEDAALAAtB7fQAIQcLAkACQAJ/IAEoAhAtAHQiAkEBcQRAQbC1ASERQbSNCyEFQYOKAyEEQbCNCwwBCyACQQJxBEBBk+MBIRFBvI0LIQVB2IsDIQRBuI0LDAELIAJBCHEEQEGCiQMhEUHMjQshBUGKiQMhBEHIjQsMAQsgAkEEcUUNAUGL4wEhEUHEjQshBUGBjAMhBEHAjQsLKAIAIRIgByECQQEhCQNAAkACQCACLQAAIg5BOkcEQCAODQFB5IoLIAQQtQMDQCAJQQFrIglFDQMgAyAENgLgAUHkigtBlzMgA0HgAWoQ8AMMAAsACyAJQQFqIQkLIAJBAWohAgwBCwsgASASQeSKCxDvAxBRIQQgASAFKAIAIBEQUSECIAQgB0YNASAAIAQQRQwBCyABQayNCygCACAHEFEhAiAHIQQLIAIgB0cEQCAAIAIQWAsCQAJAIBAEQCACLQAAIRIgBC0AACEHIABBmB4QRSAAIARB7fQAIAcbIhQQWCADQbAJaiIHIAEoAhAoAggoAgBBMBAgGiADQZADaiEPAn8CQEHkjQsoAgAiBEUNACABIAQQPiIELQAARQ0AQfYBIARBoKIBEEcNARpB9wEgBEGE9QAQRw0BGkH4ASAEQfb2ABBHDQEaIARBoZYBEEdFDQBB+QEMAQtB9gFB+QEgAUFQQQAgASgCAEEDcUECRxtqKAIoECsQ+gEbCyEORAAAAAAAAAAAIRsjAEGAAWsiCiQAIApBADYCKCAKQgA3AyAgBygCBCEMIAogBygCACILIgEpAwg3AxggCiALKQMANwMQIApBIGogCkEQakQAAAAAAAAAABDCDiAKIAEpAwg3A2ggCiALKQMANwNgQQAhBANAIAwgBEEDaiIBSwRAIAogCikDYDcDMCAKIAopA2g3AzggCyAEQQR0aiEFQQEhBANAIARBBEYEQEEBIQQgCisDOCEdIAorAzAhHgNAIARBFUYEQCABIQQMBQUgCkHwAGogCkEwaiAEuEQAAAAAAAA0QKNBAEEAEKwBIAorA3ghHCAKKwNwIRogCiAKKQN4NwMIIAogCikDcDcDACAKQSBqIAogGyAeIBqhIB0gHKEQT6AiGxDCDiAEQQFqIQQgHCEdIBohHgwBCwALAAUgBEEEdCIHIApBMGpqIgYgBSAHaiIHKQMANwMAIAYgBykDCDcDCCAEQQFqIQQMAQsACwALCyAKQQA2AiggCigCICEMIAooAiQhBSAKQgA3AyAgDCAFQQFrIgZBBnRqKwMQISVEAAAAAAAAAAAhHUQAAAAAAAAAACEeRAAAAAAAAAAAIRxBACEBRAAAAAAAAAAAIRoDQCAFIAEiBEYEQCAPQgA3AgBBACEEA0ACQCAEIAVGBEAgGkQYLURU+yEJQKAiGxBXIRogDyAbEEQgHKIgHqAgGiAcoiAdoBDjBSAFDQFB844DQaq5AUGhAkHMOBAAAAsgDCAEQQZ0aiIHKwMoIRwgBysDICIaEFchHyAHKwMIIR0gGhBEIR4gBysDOCEbIActADAgDyAeIByiIAcrAwAiHqAgHSAfIByioBDjBUEBcQRAIB4gHEEBIBogGyAPEMAOCyAEQQFqIQQMAQsLIAVBAmshBANAIARBf0cEQCAMIARBBnRqIgcrAyghHyAHKwM4RBgtRFT7IQlAoCIbEFchHSAHKwMIIR4gGxBEIRogBysDICEcIActADAgDyAaIB+iIAcrAwAiGqAgHiAdIB+ioBDjBUEBcQRAIBogH0EAIBxEGC1EVPshCUCgIBsgDxDADgsgBEEBayEEDAELCyAMEBcgCkGAAWokAAUgDCAEQQFqIgFBACABIAVHG0EGdGoiBysDCCAMIARBBnRqIgsrAwgiHaEgBysDACALKwMAIh6hEL8OIRogDCAEQQFrIAYgBBtBBnRqIgcrAwggHaEgBysDACAeoRC/DiEkIAsrAxAiICAlICEgDhEgACEcAkACfyAEQQAgBCAGRxtFBEAgJEQYLURU+yH5v6AgGkQYLURU+yH5P6AgBBshG0EADAELIBpEGC1EVPsh+T+gIRtEAAAAAAAAAAAgHCAaICShIhpEGC1EVPshGUCgIBogGkQAAAAAAAAAAGMbRAAAAAAAAOC/okQYLURU+yH5P6AiHxBEIhqjIBpEAAAAAAAAAABhGyIaIBxEAAAAAAAAJECiZARAICREGC1EVPsh+b+gIhpEAAAAAAAAAABjIBpEGC1EVPshGUBmcgRAIBogGkQYLURU+yEZQKOcRBgtRFT7IRlAoqEhGgtBASEEIBtEAAAAAAAAAABjIBtEGC1EVPshGUBmckUNAiAbIBtEGC1EVPshGUCjnEQYLURU+yEZQKKhIRsMAgsgGyAfoCEbIBohHEEACyEEIBshGgsgCyAbOQM4IAsgBDoAMCALIBw5AyggCyAaOQMgIAtB7AA6ABggCyAgOQMQIAsgHTkDCCALIB45AwAMAQsLIAMoApADIgFBAEgNASAAIAMoApQDIAFBARBBIAMoApQDEBcgACAUEEUgFCACQe30ACASGyIBRwRAIAAgARBYCyADKAK4CSICBEAgAyADQcgJaikDADcDWCADIAMpA8AJNwNQIAMgAygCsAkiASkDCDcDSCADIAEpAwA3A0AgAEECIANB0ABqIANBQGsgIiAhIAIQ0AILIAMoArwJIgJFDQMgAyADQdgJaikDADcDOCADIAMpA9AJNwMwIAMgAygCsAkgAygCtAlBBHRqQRBrIgEpAwg3AyggAyABKQMANwMgIABBAyADQTBqIANBIGogIiAhIAIQ0AIMAwsgASgCECEHIAZFDQEgBrhEAAAAAAAAAECgRAAAAAAAAOC/oiEjQQAhBSAHKAIIKAIEIhZBMBA/IRAgFkEwED8hGQNAIAUgFkYEQCAEEGEiEiECIAQiBSEVQQAhEQNAIAJB9twBEJ0EIgIEQAJAIAJB7fQAIAItAAAbIgYgBEYNACAGIQQgASgCEC0AdEEDcQ0AIAAgBBBFIAAgBBBYC0EAIQcDQCAHIBZGBEAgFSAGIBEbIRUgBiAFIBFBAkkbIQUgEUEBaiERQQAhAgwDCyAZIAdBMGwiDGoiAigCBCELIAwgEGooAgAhDiACKAIAIRRBACECA0AgAiALRgRAIAAgFCALQQAQgQIgB0EBaiEHDAIFIBQgAkEEdCIMaiIPIAwgDmoiDCsDACAPKwMAoDkDACAPIAwrAwggDysDCKA5AwggAkEBaiECDAELAAsACwALCwJAIAMoArgJIgRFBEBBACEFDAELAkAgBUUNACABKAIQLQB0QQNxDQAgACAFEEUgACAFEFgLIAMgA0HICWopAwA3A5gBIAMgAykDwAk3A5ABIAMgAygCsAkiAikDCDcDiAEgAyACKQMANwOAASAAQQIgA0GQAWogA0GAAWogIiAhIAQQ0AILIAMoArwJIgIEQAJAIAUgFUYNACABKAIQLQB0QQNxDQAgACAVEEUgACAVEFgLIAMgA0HYCWopAwA3A3ggAyADKQPQCTcDcCADIAMoArAJIAMoArQJQQR0akEQayIBKQMINwNoIAMgASkDADcDYCAAQQMgA0HwAGogA0HgAGogIiAhIAIQ0AILIBIQF0EAIQIDQCACIBZGBEAgEBAXIBkQFwwGBSAQIAJBMGwiAWooAgAQFyABIBlqKAIAEBcgAkEBaiECDAELAAsABSADQbAJaiAFQTBsIgIgASgCECgCCCgCAGpBMBAgGiACIBBqIgcgAygCtAkiBjYCBCACIBlqIgIgBjYCBCAHIAZBEBA/IhM2AgAgAiAGQRAQPyIKNgIAIAZBAWshDCADKAKwCSIPKwMIIR0gDysDACEeQQAhAgNAIAIgDEkEQCAPIAJBAWpBBHQiEmoiBysDCCEmIAcrAwAhJwJAIAJFBEAgE0QAAAAAAAAAQCAeICehIhsgG6IgHSAmoSIcIByioEQtQxzr4jYaP6CfoyIaIBuaojkDCCATIBwgGqI5AwAMAQsgEyACQQR0aiIHRAAAAAAAAABAICQgJ6EiGyAboiAlICahIhwgHKKgRC1DHOviNho/oJ+jIhogG5qiOQMIIAcgHCAaojkDAAsgDyACQQNqIgdBBHRqIgYrAwghHCAGKwMAIRogEyACQQJqQQR0Ig5qIgtEAAAAAAAAAEAgJyAOIA9qIgYrAwAiJKEiHyAmIAYrAwgiJaEiIBBPIhtELUMc6+I2Gj9jBHwgHiAaoSIfIB+iIB0gHKEiICAgoqBELUMc6+I2Gj+gnwUgGwujIhsgH5qiIh85AwggCyAbICCiIhs5AwAgEiATaiIUIAspAwg3AwggFCALKQMANwMAIAogAkEEdCICaiIGICMgAiATaiICKwMAoiAeoDkDACAGICMgAisDCKIgHaA5AwggCiASaiICICMgFCsDAKIgJ6A5AwAgAiAjIBQrAwiiICagOQMIIAogDmoiAiAjIB+iICWgOQMIIAIgIyAboiAkoDkDACAaIR4gHCEdIAchAgwBCwsgEyACQQR0IgdqIgJEAAAAAAAAAEAgJCAeoSIcIByiICUgHaEiGyAboqBELUMc6+I2Gj+gn6MiGiAcmqIiHDkDCCACIBsgGqIiGjkDACAHIApqIgIgIyAcoiAdoDkDCCACICMgGqIgHqA5AwAgBUEBaiEFDAELAAsAC0G/xgFBgrgBQdMRQdcxEAAACwJAIActAHRBA3ENAAJAAkAgBC0AAARAIAAgBBBFDAELIABB7fQAEEUgAi0AAEUNAQsgACACEFgMAQsgAEHt9AAQWAsgA0HQCWohBSADQcAJaiEGQQAhAgNAIAIgASgCECgCCCIEKAIETw0BIANBsAlqIAQoAgAgAkEwbGpBMBAgGiAAIAMoArAJIgcgAygCtAlBABCBAiADKAK4CSIEBEAgAyAGKQMINwPYASADIAYpAwA3A9ABIAMgBykDCDcDyAEgAyAHKQMANwPAASAAQQIgA0HQAWogA0HAAWogIiAhIAQQ0AILIAMoArwJIgcEQCADIAUpAwg3A7gBIAMgBSkDADcDsAEgAyADKAKwCSADKAK0CUEEdGpBEGsiBCkDCDcDqAEgAyAEKQMANwOgASAAQQMgA0GwAWogA0GgAWogIiAhIAcQ0AILAkAgFkUgASgCECgCCCgCBEECSXINACADKAK4CSADKAK8CXJFDQAgACAMENwBCyACQQFqIQIMAAsACyAYEM4CEBcgGBAXIAAoAhAiBSgCCCEHAkAgBSgC2AFFBEAgBS0AjAJBAXFFDQELIAAQkQIgBSgCnAIiDUUNACAFKAKgAiIEKAIAIQZBASEJA0AgCSANTw0BIAUgBCAJQQJ0IgFqKAIANgKUAiAFIAUoAqQCIAZBBHRqNgKYAiAAIAUoAtgBIAUoAuwBIAUoAvwBIAUoAtwBELsBIAAQkQIgCUEBaiEJIAEgBSgCoAIiBGooAgAgBmohBiAFKAKcAiENDAALAAsgBUIANwKUAiAAIAcoAhAiAigCCCIBBH8gA0G4CWoiAgJ/IAEoAgAiASgCCARAIAFBEGoMAQsgASgCAAsiASkDCCIoNwMAIAMgASkDACIpNwOwCSAFKALkASEBIAUvAYwCIQQgAyAoNwMYIAMgKTcDECAAIANBEGogBEGAAXFBB3YgASAEQQJxQQF2EKQPIAIgBygCECgCCCIBKAIAIAEoAgRBMGxqIgFBJGsoAgAEfyABBSABQTBrKAIAIAFBLGsoAgBBBHRqC0EQayIBKQMIIig3AwAgAyABKQMAIik3A7AJIAUoAugBIQEgBS8BjAIhAiADICg3AwggAyApNwMAIAAgAyACQYACcUEIdiABIAJBBHFBAnYQpA8gBygCEAUgAgsoAmBBCyAFLwGMAkEDdkEBcSAFKALgASAFKALwASAFKAKAAiAFKALcASAHQeyNCygCAEH6kwEQehBqBH8gBygCECgCCAVBAAsQ9gUgACAHKAIQKAJsQQsgBS8BjAJBA3ZBAXEgBSgC4AEgBSgC8AEgBSgCgAIgBSgC3AEgB0HsjQsoAgBB+pMBEHoQagR/IAcoAhAoAggFQQALEPYFIAAgBygCECgCZEEHIAUvAYwCQQJ2QQFxIAUoAugBIAUoAvgBIAUoAogCIAUoAtwBQQAQ9gUgACAHKAIQKAJoQQYgBS8BjAJBAXZBAXEgBSgC5AEgBSgC9AEgBSgChAIgBSgC3AFBABD2BQJAIAAoAjwiAUUNACABKAJEIgFFDQAgACABEQEACyAAEPEDCyADQdAQaiQAC/0BAQR/IwBBEGsiAyQAIANBADYCCCADQgA3AwACQAJAAkAgAEEAIAMQ+wUNACADKAIAIgZBAkgNACADKAIIIgQoAgANAQsgAUEANgIADAELIAZBA08EQEHRiwRBABAnCyABIAAQN0EBakEBED8iADYCACAAIAQoAgAQ2gMhAAJAIAQoAhgEQCABIAAQNyAAakEBaiIANgIEIAAgBCgCGBDaAxoMAQsgAUEANgIECyACAnwgBC0AEEEBRgRAIAQrAwgMAQtEAAAAAAAAAAAgBC0AKEEBRw0AGkQAAAAAAADwPyAEKwMgoQs5AwBBASEFCyADEMwEIANBEGokACAFCxAAIAAoAgQQFyAAKAIIEBcLCQBBASAAEM0CCwQAQQELFAAgACABQfmmAUGrAUGcvAEQ+gYLYQEEfyAAKAIEIQQCQANAIAIgBEYNASACQQJ0IAJBAWohAiAAKAIAIgVqIgMoAgAgAUcNAAsgACAEQQFrIgE2AgQgAyAFIAFBAnQiAWooAgA2AgAgACgCACABakEANgIACwv/AwIBfAd/An8gACsDCCIDRAAAAAAAAOA/RAAAAAAAAOC/IANEAAAAAAAAAABmG6AiA5lEAAAAAAAA4EFjBEAgA6oMAQtBgICAgHgLIQYCfyABKwMIIgNEAAAAAAAA4D9EAAAAAAAA4L8gA0QAAAAAAAAAAGYboCIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsiByAGayIEIARBH3UiBXMgBWsCfyAAKwMAIgNEAAAAAAAA4D9EAAAAAAAA4L8gA0QAAAAAAAAAAGYboCIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAshAEEBdCEFQX9BASAEQQBMGyEJQX9BAQJ/IAErAwAiA0QAAAAAAADgP0QAAAAAAADgvyADRAAAAAAAAAAAZhugIgOZRAAAAAAAAOBBYwRAIAOqDAELQYCAgIB4CyIIIABrIgFBAEwbIQoCQCAFIAEgAUEfdSIEcyAEa0EBdCIESARAIAUgBEEBdWshAQNAIAIgALcgBrcQzAIgACAIRg0CIAEgBWogBEEAIAFBAE4iBxtrIQEgACAKaiEAIAlBACAHGyAGaiEGDAALAAsgBCAFQQF1ayEBA0AgAiAAtyAGtxDMAiAGIAdGDQEgASAEaiAFQQAgAUEATiIIG2shASAGIAlqIQYgCkEAIAgbIABqIQAMAAsACwtpAQJ/IwBBEGsiAyQAAkAgAEHj9AAQIyIERQRAIAEhAAwBCyADIANBDGo2AgAgBEG1sgEgAxBJQQFGBEAgAygCDCIAQQBODQELIAEhACAELQAAQSByQfQARw0AIAIhAAsgA0EQaiQAIAAL/QECBXwEfyAAIAEgAiADEM8IRQRAIAIQywIgAigCECIDKwMoIQUgAysDICEGIAMrAxghByADKwMQIQgDQCAAIApGBEAgAyAFOQMoIAMgBjkDICADIAc5AxggAyAIOQMQBUEBIQIgASAKQQJ0aigCACgCECILKAK0ASIJQQAgCUEAShtBAWohDANAIAIgDEcEQCAFIAsoArgBIAJBAnRqKAIAKAIQIgkrAygiBCAEIAVjGyEFIAYgCSsDICIEIAQgBmMbIQYgByAJKwMYIgQgBCAHZBshByAIIAkrAxAiBCAEIAhkGyEIIAJBAWohAgwBCwsgCkEBaiEKDAELCwsL1QEBBH8gAyABENkIIAMEQANAAkAgAygCBCIBRQ0AIAMoAgAgAUECdGpBBGsoAgAhBCADIAFBAWs2AgQgBEUNACADKAIMIgEEQCAEIAIgAREEAAsgBUEBaiEFIAAgBBBvIQEDQCABRQ0CIAQgAUEwQQAgASgCAEEDcSIHQQNHG2ooAigiBkYEQCABQVBBACAHQQJHG2ooAighBgsgBkF/IAMoAhARAABFBEAgAyAGENkICyAAIAEgBBB0IQEMAAsACwsgBQ8LQYPPAUG8uAFBGUGyCRAAAAuHAgEDfyMAQRBrIgIkACACIAE2AgQgAiABNgIMIAIgATYCCAJAAkACQEEAQQBB3hYgARBOIgRBAEgNACAEQQFqIQEgBCAAEDggABAhayIDTwRAIAAgASADaxDrAQsgABAhIQMgBCAAECUEfyAAIANqBSAAKAIAIANqCyABQd4WIAIoAgwQTiIBRyABQQBOcQ0BIAFBAEwNACAAECUEQCABQYACTw0DIAAgAC0ADyABajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAWo2AgQLIAJBEGokAA8LQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAAL8gEBA39BwMIBIQQCQCABRQ0AIAEhAgNAIAItAAAhAyACQQFqIQIgA0HfAEYNACADRQRAIAEhBAwCCyADwCIDQTBrQQpJIANBX3FBwQBrQRpJcg0ACwsCQAJAIAQQNyIBRQ0AIAEgABA4IAAQIWtLBEAgACABEOsBCyAAECEhAiAAECUEQCAAIAJqIAQgARAgGiABQYACTw0CIAAgAC0ADyABajoADyAAECFBEEkNAUG/rgNBj/0AQfABQY/qABAAAAsgACgCACACaiAEIAEQIBogACAAKAIEIAFqNgIECw8LQevJAUGP/QBB7gFBj+oAEAAACzkCAX8BfCMAQRBrIgIkACAAIAJBDGoQ1gEhAyAAIAIoAgxGBH9BAQUgASADOQMAQQALIAJBEGokAAt+AQN/IAAQ3AggACgCACECAkADQAJAIAItAAAiAkUEQCAAEIsGIgJFDQELIAJB/wFxQS5HIALAQTBrQQlLcQ0AIAEgA2ogAjoAACAAIAAoAgBBAWoiAjYCAEH/ByEEIANBAWoiA0H/B0cNAQwCCwsgAyEECyABIARqQQA6AAALpwICAX8BfAJAAkACQAJAAkACQAJAIAEtAAAiAkHtAGsOBAUGBgEACyACQSJGDQEgAkHjAEYNAyACQekARw0FIAEtAAFB7gBHDQUgAS0AAg0FIABEAAAAAAAAUkCiEDAPCwJAIAEtAAFB+ABHDQAgAS0AAg0AIABEAAAAAAAAUkCiRAAAAAAAAFhAoxAwDwsCQCABLQABQeMARw0AIAEtAAINACAARAAAAAAAAFJAokQAAAAAAAAYQKMQMA8LIAEtAAFB9ABHDQQgAS0AAkUNAQwECyABLQABDQMLIAAQMA8LIAEtAAFB7QBHDQEgAS0AAg0BIABEfFxJYrFYPECiEDAPCyABLQABQe0ARw0AIAEtAAINACAARC99B7VarQZAohAwIQMLIAMLaQEBfyMAQRBrIgIkAAJAIAAoAgAEQCABKAIARQ0BIAIgACkCADcDCCACIAEpAgA3AwAgAkEIaiACEOAIIAJBEGokAEUPC0GA0QFBgPsAQdsAQc07EAAAC0Hx0AFBgPsAQdwAQc07EAAACwgAQeAEEOUKC8sBAQV/IAAoAgAiAkEDIAFBABC5AxogAigCYCIBBEAgACABKAIQIgMoAgwiBTYCTCAAIAMoAhAiBDYCVCAAIAMoAgAiAzYCUCAAIAEoAgQ2AlggACAAKAKYASAEKAIAciIENgKYASACKAJUIgEEQCAAIAEoAhAiAigCDDYCPCAAIAIoAhAiBjYCRCAAIAEoAgQ2AkggACAGKAIAIARyNgKYASAFBEAgACACKAIANgJAQawCDwsgACADNgJAQawCDwsgAEEANgI8C0HnBwsoACAAQQAQlAICQCAAECUEQCAAQQA6AA8MAQsgAEEANgIECyAAEOcECyUBAX8jAEEQayIDJAAgAyACNgIMIAAgASACEO0IGiADQRBqJAALoQEBAn8CQAJAIAEQNyICRQ0AIAIgABA4IAAQIWtLBEAgACACENEBCyAAECEhAyAAECUEQCAAIANqIAEgAhAgGiACQYACTw0CIAAgAC0ADyACajoADyAAECFBEEkNAUG/rgNBj/0AQfABQY/qABAAAAsgACgCACADaiABIAIQIBogACAAKAIEIAJqNgIECw8LQevJAUGP/QBB7gFBj+oAEAAACzAAIAAQ8wgCQCAAECUEQCAAQQA6AA8MAQsgAEEANgIECyAAECUEfyAABSAAKAIACwv8AgEDfyMAQUBqIgMkAAJAIAGZRPyp8dJNYkA/YwRAIABBwdwBEBkaDAELIAFEAAAAAAAA8L+gmUT8qfHSTWJAP2MEQCAAQZ3cARAZGgwBCyADIAE5AzAgAEH12wEgA0EwahAcCyACKAIAIQQCQAJAAkACQAJAIAIoAiAiAkEBaw4EAQICAAILIARBqfkEEEMNAiAAQZD5BBAZGgwDCyADIARB/wFxNgIgIAMgBEEQdkH/AXE2AiggAyAEQQh2Qf8BcTYCJCAAQc4SIANBIGoQHAwCCyADQZ8BNgIEIANBnrsBNgIAQej6BigCAEHWsQQgAxAdGhBuAAsgACAEEBkaCyAAQZ/bARAZGgJAAkAgAkEBRw0AIARBGHYiBUH/AUYNACADIAW4RAAAAAAA4G9AozkDECAAQbSHASADQRBqEBwMAQsCQCACQQRHDQAgBEGp+QQQQw0AIABBlJcDEBkaDAELIABBn5gDEBkaCyAAQbPHBBAZGiADQUBrJAAL2AMBAn8jAEGQAWsiAyQAIAAoAhAhBCAAQZ23AxAZGgJAAkACQAJAAkAgAQ4EAwIAAQILIABB0KQDEBkaIAQoAtwBIgEEQCAAIAEQgQEgAEHfABBiCyADIAI2AnAgAEGgnwMgA0HwAGoQHAwDCyAAQdCkAxAZGiAEKALcASIBBEAgACABEIEBIABB3wAQYgsgAyACNgKAASAAQZqfAyADQYABahAcDAILIANByABqIgEgBEE4akEoECAaIAAgARD3CCAEKAJYQQFHDQEgBC0AOyIBRSABQf8BRnINASADIAG4RAAAAAAA4G9AozkDQCAAQYGHASADQUBrEBwMAQsgAEGc+QQQGRoLIABBg7gDEBkaIANBGGoiASAEQRBqQSgQIBogACABEPcIIAQrA6ABRAAAAAAAAPC/oJlEexSuR+F6dD9jRQRAIABBpbcDEBkaIAAgBCsDoAEQdgtBofkEIQECQAJAAkAgBCgCmAFBAWsOAgEAAgtBpfkEIQELIAMgATYCECAAQb0zIANBEGoQHAsCQCAEKAIwQQFHDQAgBC0AEyIBRSABQf8BRnINACADIAG4RAAAAAAA4G9AozkDACAAQZSHASADEBwLIABBIhBiIANBkAFqJAALgAICAX8EfCMAQSBrIgckACAHIAAgASADQQAgBBCJAyAFIAcpAxg3AxggBSAHKQMQNwMQIAUgBykDCDcDCCAFIAcpAwA3AwAgBUEENgIwIAUrAxAhCCAFKwMAIQkCQCAGBEAgAiAEQQIgBUEAEOcFDAELIAIgBEECIAVBABDmBQsCQCAIIAlkRQ0AIAVBOGoiAiAFKAI0IgFBBXRqQQhrKwMAIgogAygCECIDKwMYIAAoAhAoAsQBIAMoAvQBQQZ0aisDGKAiC2NFDQAgBSABQQFqNgI0IAIgAUEFdGoiACALOQMYIAAgCDkDECAAIAo5AwggACAJOQMACyAHQSBqJAALFQAgACABIAJBhCJBxQBB5bgBEOAKC7cNAgh/A3wjAEHAAmsiBCQAAkAgABA0IgkgACgCAEEDcSIKQQAQyQIiBUUNAANAIAVFDQECQCAAIAUQPiIDRQ0AIAMtAABFBEAgBSgCCEGq8AAQR0UNAQsgAUH23wQQGRogASACKAIAEDsgBSgCCCACIAEQlgIgAUG3vwMQGRoCQCACLQAFQQFHDQACQCAFKAIIIgNBncIBEEcNACADQY3CARBHDQAgA0GVwgEQRw0AIANB88EBEEcNACADQYTCARBHDQAgA0H7wQEQR0UNAQsgACAFED4iA0UNASADLQAARQ0BIANBABCVDSIIRQRAIAQgAzYCAEGo7AQgBBAnDAILIAFB4vQEEBkaIAIgAigCACIDQQFqNgIAIAEgAxA7IAFB5sAEEBkaQQAhBwNAIAgoAgAgB00EQCACIAIoAgBBAWs2AgAgAUHi9AQQGRogASACKAIAEDsgAUHvxAEQGRogCBCTDQwDCyAHBEAgAUH23wQQGRoLIAgoAgghAyACIAIoAgAiBkEBajYCACABIAYQOyABQZPLAxAZGiABIAIoAgAQOwJAAkACQAJAAkACQAJAAkACQAJAAkACQCADIAdB0ABsaiIDKAIAIgYOEAoKAAABAQIDBAQGBwsFBQgJCyAEQdAAQfAAIAZBAkYbNgJQIAFBrN8EIARB0ABqEBwgASACKAIAEDsgASADQQhqEKEGDAoLIARBwgBB4gAgBkEERhs2AmAgAUGs3wQgBEHgAGoQHCABIAIoAgAQOyABIANBCGoQoQYMCQsgAUHh3wRBABAcIAEgAigCABA7IAEgA0EIahChBgwICyABQcnfBEEAEBwgASACKAIAEDsgAysDCCELIAQgAysDEDkDmAEgBCALOQOQASABQbTdBCAEQZABahAcIAEgAigCABA7IARB4wBB8gAgAygCGCIGQQFGG0HsACAGGzYCgAEgAUG53wQgBEGAAWoQHCABIAIoAgAQOyAEIAMrAyA5A3AgAUH43AQgBEHwAGoQHCABIAIoAgAQOyABQfu+AxAZGiADKAIoIAIgARCWAiABQQoQYgwHCyAEQcMAQeMAIAZBCEYbNgKgASABQazfBCAEQaABahAcIAEgAigCABA7IAFB4N4EQQAQHCABIAIoAgAQOyABQZS/AxAZGiADKAIIIAIgARCWAiABQQoQYgwGCyAEQcMAQeMAIAZBDUYbNgKQAiABQazfBCAEQZACahAcIAEgAigCABA7AkACQAJAIAMoAggOAgABAgsgAUHg3gRBABAcIAEgAigCABA7IAFBlL8DEBkaIAMoAhAgAiABEJYCIAFBChBiDAcLIAFBut4EQQAQHCABIAIoAgAQOyABIAIoAgAQOyADKwMQIQsgBCADKwMYOQOIAiAEIAs5A4ACIAFB4N0EIARBgAJqEBwgASACKAIAEDsgAysDICELIAQgAysDKDkD+AEgBCALOQPwASABQcrdBCAEQfABahAcIAEgAigCABA7IAEgAygCMCADKAI0IAIQ/ggMBgsgAUHN3gRBABAcIAEgAigCABA7IAEgAigCABA7IAMrAxAhCyADKwMYIQwgBCADKwMgOQPgASAEIAw5A9gBIAQgCzkD0AEgAUGS3gQgBEHQAWoQHCABIAIoAgAQOyADKwMoIQsgAysDMCEMIAQgAysDODkDwAEgBCAMOQO4ASAEIAs5A7ABIAFB9t0EIARBsAFqEBwgASACKAIAEDsgASADKAJAIAMoAkQgAhD+CAwFCyABQe3fBEEAEBwgASACKAIAEDsgBCADKwMIOQOgAiABQYndBCAEQaACahAcIAEgAigCABA7IAFBsb8DEBkaIAMoAhAgAiABEJYCIAFBChBiDAQLIAFB1d8EQQAQHCABIAIoAgAQOyABQae/AxAZGiADKAIIIAIgARCWAiABQQoQYgwDCyABQa7eBEEAEBwgASACKAIAEDsgBCADKAIINgKwAiABQaq6BCAEQbACahAcDAILIARBtAI2AhQgBEHsuQE2AhBB6PoGKAIAQdaxBCAEQRBqEB0aEG4ACyAEQeUAQcUA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DAALAAsgAhCTCCIBDQBBpJELQaSRCygCACIDQQFqIgE2AgAgA0H/////A08NAUGgkQsoAgAgAUECdCIBED0iBUUNAiABIANBAnQiBksEQCAFIAZqQQA2AAALQaCRCyAFNgIAQRAQTSEBQaCRCygCACADQQJ0aiABNgIAIAFBuJwKKQMANwIIIAFBsJwKKQMANwIAIAEgAhCkATYCAEEBIQMCQEH0igsoAgANACACQefrABBHDQAgASgCACECQQAhAyAEQbCcCigCADYCECAEIAI2AhRB4+0DIARBEGoQJwsgASADOgAMCyAEQSBqJAAgAQwCC0GRtANB3v0AQc0AQZOzARAAAAsgBCABNgIAQej6BigCAEGp3QMgBBAdGhAmAAshASAAKAIQIAE2AgggAEHMjAsoAgAQPiEBIABBvIwLKAIARAAAAAAAACxARAAAAAAAAPA/EFMhByAAQcCMCygCAEG16QAQUSECIABBxIwLKAIAQe30ABBRIQQgARCtAiEDIAAgASAAEP4CQQJGQQJ0IANBAEdBAXRyIAcgAiAEEP8CIQEgACgCECABNgJ4AkBB0IwLKAIAIgFFDQAgACABED4iAUUNACABLQAARQ0AIAAgASABEK0CQQBHQQF0IAcgAiAEEP8CIQEgACgCECABNgJ8IAAQKygCECIBIAEtAHFBEHI6AHELIABB3IwLKAIAQQBBABBQIQEgACgCECICQf8BIAEgAUH/AU4bOgCgASAAIAIoAggoAgQoAgARAQAL0wIBA38jAEEQayIDJAACQCAARQ0AIAAtAABFDQBBhIsLKAIAIgIEQEHIkQstAAANASADIAI2AgBB3OsEIAMQJ0HIkQtBAToAAAwBC0HMkQsoAgAhAkH4igsoAgAEQCACRQRAQdCRCygCABAXQcyRC0H4igsoAgAiATYCAEHQkQsgARC4DjYCAAtBACEBA0AgAUEDRgRAQdCRCygCACAAELcOIQEMAwUgACABQfTcAWosAAAgABA3QQFqEL0MIgJBAWogACACGyEAIAFBAWohAQwBCwALAAtB0JELKAIAIQECQCACQfyKCygCAEYNACABEBdBACEBQcyRC0H8igsoAgAiAjYCAEHQkQtBADYCACACRQ0AIAItAABFDQBB0JELIAIQuA4iATYCAAsgAUUgAC0AAEEvRnJFBEAgASAAELcO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sIEIaiIDKwMAYgR/IAMgBjkDACABQSBqIgJBo6MDEIgDIAEgACgCECsDoAE5AxAgAkG+hgEgAUEQahCMASACEKcGIAJBKRDPASAAQb69AyACELwBENICIAAoAhAFIAILKAKoASIERQ0AA0AgBCgCACIDRQ0BIARBBGohBCADQdquARBpDQAgA0HFpwEQaQ0AIANBzvcAEGkNACABQSBqIAMQiAMDQCADLQAAIANBAWoiAiEDDQALIAItAAAEQCABQSBqQSgQzwFB5fQEIQMDQCACLQAABEAgASACNgIEIAEgAzYCACABQSBqQboyIAEQjAEDQCACLQAAIAJBAWohAg0AC0G+mAMhAwwBBSABQSBqQSkQzwELCwsgAEG+vQMgAUEgahC8ARDSAgwACwALIAFBIGoQZiABQTBqJAALawECfyMAQRBrIgMkACADQgA3AwggA0IANwMAA0ACQCACLQAAIgRB3ABHBEAgBA0BIAAgASADELwBEGggAxBmIANBEGokAA8LIANB3AAQzwEgAi0AACEECyADIATAEM8BIAJBAWohAgwACwALkgIBBX8gABDnBCEDIAAQISEBAkACQAJAA0AgASICRQ0BIAMgAUEBayIBai0AAEEuRw0ACyAAECEhAQNAIAFBAWshBSABIAJHBEAgAyAFai0AAEEwRw0CCwJAIAAQJQRAIAAtAA8iBEUNBCAAIARBAWs6AA8MAQsgACAAKAIEQQFrNgIECyABIAJHIAUhAQ0ACyAAECEiAUECSQ0AIAEgA2oiAUECayICLQAAQS1HDQAgAUEBay0AAEEwRw0AIAJBMDoAACAAECUEQCAALQAPIgFFDQMgACABQQFrOgAPDwsgACAAKAIEQQFrNgIECw8LQZKJA0GP/QBB5AJB6ioQAAALQZKJA0GP/QBB+gJB6ioQAAALXQEEfyAAQbz6BzYCAEHU7QpBADYCACAAQQRqIgJBBGohBCACKAIAIQEDQCABIARHBEAgASgCECIDBEAgAxCQCRoLIAMQFyABEJcBIQEMAQsLIAIgAigCBBCpBiAACx8AIAEEQCAAIAEoAgAQqQYgACABKAIEEKkGIAEQFwsLVwEBfyADQQA6ABxByAAQggEiBEEAELMGGiABIAQ2AgAgACAEIAMoAgAgAygCBBDqBEHIABCCASIBQQAQswYaIAIgATYCACAA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AkACQCAAKAIQQQFrDggAAQQCBAQEAwQLIARBACAEQQBKGyEMIA0oAhwhBCABKAIcIQMgACgCHCERQQAhAANAIAAgDEYNBCAPIABBAWoiAUECdCIIaiEKIA8gAEECdCIFaigCACEAA0AgACAKKAIATkUEQCAJIBQgAEECdGooAgAiB0ECdGogAjYCACAQIAJBAnRqIAc2AgAgBCACQQN0aiARIABBA3RqKwMAOQMAIABBAWohACACQQFqIQIMAQsLIAUgC2ohCiAIIA5qIQcgBSAOaigCACEAA0AgACAHKAIATkUEQAJAIAkgEyAAQQJ0aigCACIFQQJ0aigCACIGIAooAgBIBEAgECACQQJ0aiAFNgIAIAQgAkEDdGogAyAAQQN0aisDADkDACACQQFqIQIMAQsgBCAGQQN0aiIFIAMgAEEDdGorAwAgBSsDAKA5AwALIABBAWohAAwBCwsgCCALaiACNgIAIAEhAAwACwALIARBACAEQQBKGyEMIA0oAhwhBCABKAIcIQggACgCHCERQQAhAANAIAAgDEYNAyAPIABBAWoiAUECdCIFaiEKIA8gAEECdCIDaigCACEAA0AgACAKKAIATkUEQCAJIBQgAEECdGooAgAiB0ECdGogAjYCACAQIAJBAnRqIAc2AgAgBCACQQR0aiIHIBEgAEEEdGoiBisDADkDACAHIAYrAwg5AwggAEEBaiEAIAJBAWohAgwBCwsgAyALaiEKIAUgDmohByADIA5qKAIAIQADQCAAIAcoAgBORQRAAkAgCSATIABBAnRqKAIAIgNBAnRqKAIAIgYgCigCAEgEQCAQIAJBAnRqIAM2AgAgBCACQQR0aiIDIAggAEEEdGoiBisDADkDACADIAYrAwg5AwggAkEBaiECDAELIAQgBkEEdGoiAyAIIABBBHRqIgYrAwAgAysDAKA5AwAgAyAGKwMIIAMrAwigOQMICyAAQQFqIQAMAQsLIAUgC2ogAjYCACABIQAMAAsACyAEQQAgBEEAShshDCANKAIcIQQgASgCHCEDIAAoAhwhEUEAIQADQCAAIAxGDQIgDyAAQQFqIgFBAnQiCGohCiAPIABBAnQiBWooAgAhAANAIAAgCigCAE5FBEAgCSAUIABBAnQiB2ooAgAiBkECdGogAjYCACAQIAJBAnQiEmogBjYCACAEIBJqIAcgEWooAgA2AgAgAEEBaiEAIAJBAWohAgwBCwsgBSALaiEKIAggDmohByAFIA5qKAIAIQADQCAAIAcoAgBORQRAAkAgCSATIABBAnQiBWooAgAiBkECdGooAgAiEiAKKAIASARAIBAgAkECdCISaiAGNgIAIAQgEmogAyAFaigCADYCACACQQFqIQIMAQsgBCASQQJ0aiIGIAYoAgAgAyAFaigCAGo2AgALIABBAWohAAwBCwsgCCALaiACNgIAIAEhAAwACwALIARBACAEQQBKGyEIQQAhAANAIAAgCEYNASAPIABBAWoiAUECdCIEaiEFIA8gAEECdCIDaigCACEAA0AgACAFKAIATkUEQCAJIBQgAEECdGooAgAiDEECdGogAjYCACAQIAJBAnRqIAw2AgAgAEEBaiEAIAJBAWohAgwBCwsgAyALaiEFIAQgDmohDCADIA5qKAIAIQADQCAAIAwoAgBORQRAIAkgEyAAQQJ0aigCACIDQQJ0aigCACAFKAIASARAIBAgAkECdGogAzYCACACQQFqIQILIABBAWohAAwBCwsgBCALaiACNgIAIAEhAAwACwALIA0gAjYCCAsgCRAXCyANDwtBvdgBQZq2AUHGBUG5sAEQAAALQeDLAUGatgFBxwVBubABEAAAC0G7lQFBmrYBQcgFQbmwARAAAAvMCAIQfwF8AkAgAEUNACAAKAIgRQRAIAAoAhghDSAAKAIUIQcgACgCBCIIIAAoAgAiAiAAKAIIIgEgACgCEEEAEJoCIgkgATYCCCAJKAIYIQ4gCSgCFCEDQX8gCCAIQQBIG0EBaiEKQQAhAQNAIAEgCkYEQEEAIQEgAkEAIAJBAEobIQogA0EEaiEGA0ACQCABIApGBEBBACEBIAhBACAIQQBKGyECA0AgASACRg0CIAFBAnQhBiADIAFBAWoiAUECdGoiBCAEKAIAIAMgBmooAgBqNgIADAALAAsgByABQQFqIgJBAnRqIQQgByABQQJ0aigCACEBA0AgBCgCACABTARAIAIhAQwDBSAGIA0gAUECdGooAgBBAnRqIgsgCygCAEEBajYCACABQQFqIQEMAQsACwALC0EAIQICQAJAAkACQAJAAkAgACgCEEEBaw4IAAEEAgQEBAMECyAJKAIcIQYgACgCHCEEA0AgAiAKRg0FIAcgAkEBaiIAQQJ0aiEL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CyAGKAIQIgAoAmAiAgRAIAYgAkHX2QAQiwQgBigCECEACyAAKAJsIgIEQCAGIAJBvNkAEIsEIAYoAhAhAAsgACgCZCICBH8gBiACQdLZABCLBCAGKAIQBSAACygCaCIABEAgBiAAQcrZABCLBAsgB0EBaiEHCyABIAYQLCEGDAELCyABIAkQGyEJDAELCyAHRQRAQQAhBQwBC0ECQQEgARCwAiAHRhshBQtBACEGQQAhBCABKAIQKAIIIgAoAlgiDQRAIABBADYCVEEBIQQLAkAgDQ0AQYyLCygCAEEBRw0AIAEQkgRFDQBBASEGIAEoAhAoAgwiAEUNACAAQQA6AFELIAEQywIgDQRAIAEoAhAhCUQAAAAAAAAAACEVRAAAAAAAAAAAIRZBACELQQAhD0EAIQ4jAEFAaiIHJAAgASgCECIAKAKQASEQIANB2ABqIgIgACkDEDcDACACIAApAyg3AxggAiAAKQMgNwMQIAIgACkDGDcDCAJAIAAoAggoAlgiDEUNAAJAIAIrAwAgAisDEGINACACKwMIIAIrAxhiDQAgAkL/////////dzcDGCACQv/////////3/wA3AwAgAkL/////////9/8ANwMIIAJC/////////3c3AxALIAwoAgghAANAIAsgDCgCAE8NASAHQgA3AzggB0IANwMwIAdCADcDKCAHQgA3AyACQAJAAkACQAJAAkACQAJAIAAoAgAOEAAAAQECAgMEBwcFBwcHBwYHCyAAIAArAxAiFyAAKwMgIhigIhM5A2ggACAAKwMIIhsgACsDGCIcoCIUOQNgIAAgFyAYoSIXOQNYIAAgGyAcoSIYOQNQIAIgAisDACAYEDIgFBAyOQMAIAIgAisDGCAXECQgExAkOQMYIAIgAisDCCAXEDIgExAyOQMIIAIgAisDECAYECQgFBAkOQMQDAYLIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAULIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAQLIAcgACgCDCAAKAIIIAIQuwggACAHKQMYNwNoIAAgBykDEDcDYCAAIAcpAwg3A1ggACAHKQMANwNQDAMLIABBOBDyAzYC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aisDADkDACACIAYgBEEQaiIEaisDCCABIARqKwMIECQ5AwggAEEBayEEIAANAAsLQQAhBEQAAAAAAADwfyEJQQAhAgNAIAIgA0YEQAJAIAlEAAAAAAAA8H9jIAlEAAAAAAAA8H9kckUNACABIARBBHRqIgArAwghCSAAKwMAIQogARAXDAQLBSABIAJBBHRqIgArAwAgACsDCKIiCiAJIAkgCmQiABshCSACIAQgABshBCACQQFqIQIMAQsLQdXRAUHDtwFB7gVBkMUBEAAAC0GEkQNBw7cBQcQGQYcYEAAACyAGEBdBgIsLLQAABEAgBSAJOQMYIAUgCjkDEEHo+gYoAgBB9vAEIAVBEGoQLQsgByEADAELIAkhCgtBACEDQQEhASAIIQIDQCAAIANGDQIgAigCQCgCECgClAEiBCAKIAIrAwCiOQMAIAQgCSACKwMIojkDCCADQQFqIQMgAkHIAGohAgwACwALQQAhAQsgCBAXIAVBgAFqJAAgAQv4EQIZfwx8IwBBMGsiAyQAQZzZCigCACEFQdDYCigCACECA0AgAiAPRgRAA0AgAkEBayALTQRAQYCLCy0AAEEBSwRAIAMgEjYCJCADIAA2AiBB6PoGKAIAQZfRAyADQSBqEB0aCyADQTBqJAAgEg8LQZzZCigCACALQeAAbGohByALQQFqIg8hCwNAIAIgC00EQCAPIQsMAgUgAyAHKQMQNwMYIAMgBykDCDcDECADQZzZCigCACALQeAAbGoiCCkDEDcDCCADIAgpAwg3AwBBACECQQAhBiMAQbAEayIBJAAgASADKQMYNwOoAyABIAMpAxA3A6ADIAEgBykDMDcDmAMgASAHKQMoNwOQAyABQeADaiABQaADaiABQZADahCLBSABIAMpAxg3A4gDIAEgAykDEDcDgAMgASAHKQNANwP4AiABIAcpAzg3A/ACIAFB0ANqIAFBgANqIAFB8AJqEIsFIAEgAykDCDcD6AIgASADKQMANwPgAiABIAgpAzA3A9gCIAEgCCkDKDcD0AIgAUHAA2ogAUHgAmogAUHQAmoQiwUgASADKQMINwPIAiABIAMpAwA3A8ACIAEgCCkDQDcDuAIgASAIKQM4NwOwAiABQbADaiABQcACaiABQbACahCLBQJAIAErA+ADIAErA7ADZUUNACABKwPAAyABKwPQA2VF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NgIkIAAgACgCODYCFA8LAkACQCAAKAIUIAAoAjhHDQAgACgCECABRw0AIAAoAhhBAkcNASAAIAI2AhgPCyAAQQE6ADYgAEECNgIYIAAgA0EBajYCJAsLswEBA38jAEEQayICJAAgAiABNgIMAkACQAJ/IAAQoQEiBEUEQEEBIQEgABCZAwwBCyAAEOgCQQFrIQEgACgCBAsiAyABRgRAIAAgAUEBIAEgARC4CyAAEEAaDAELIAAQQBogBA0AIAAiASADQQFqEMoBDAELIAAoAgAhASAAIANBAWoQuAELIAEgA0ECdGoiACACQQxqENIBIAJBADYCCCAAQQRqIAJBCGoQ0gEgAkEQaiQACw0AIAAgASACQn8QtAULBwAgAEEMagsXACAAKAIIEGVHBEAgACgCCBDvCwsgAAs2AQF/IwBBEGsiAyQAIAMgAjYCDCADQQhqIANBDGoQiAIgACABEKwHIQAQhwIgA0EQaiQAIAALHAAgACgCCCABQQEQexogASgCECgCgAEgADYCDAsTACAAIAAoAgBBAWsiADYCACAACzMBAX8jAEEQayICJAAgAiAAKAIANgIMIAIgAigCDCABQQJ0ajYCDCACKAIMIAJBEGokAAsbAQF/QQEhASAAEKEBBH8gABDoAkEBawVBAQsLMAEBfyMAQRBrIgIkACACIAAoAgA2AgwgAiACKAIMIAFqNgIMIAIoAgwgAkEQaiQAC9ABAQN/IwBBEGsiBSQAAkAgAkH3////ByABa00EQCAAEEAhBiAFQQRqIgcgAUHz////A0kEfyAFIAFBAXQ2AgwgBSABIAJqNgIEIAcgBUEMahDUAygCABDTA0EBagVB9////wcLENIDIAUoAgQhAiAFKAIIGiAEBEAgAiAGIAQQpgILIAMgBEcEQCACIARqIAQgBmogAyAEaxCmAgsgAUEKRwRAIAYQpgULIAAgAhDzASAAIAUoAggQ8gEgBUEQaiQADAELEL8BAAsgACADELgBC8YBAQR/IwBBEGsiBCQAAkAgARChAUUEQCAAIAEoAgg2AgggACABKQIANwIAIAAQmQMaDAELIAEoAgAhBSABKAIEIQIjAEEQayIDJAACQAJAAkAgAhClBQRAIAAiASACEMoBDAELIAJB9////wdLDQEgA0EIaiACENMDQQFqENIDIAMoAgwaIAAgAygCCCIB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AGutIQMCQCAAQv//////////D4MiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgQbIQAgBK0gA3wMAQsgACAChFAgA0L//wFSckUEQCACQgSGIABCPIiEQoCAgICAgIAEhCEAQv8PDAELIARB/ocBSwRAQgAhAEL/DwwBC0GA+ABBgfgAIANQIgcbIgggBGsiBkHwAEoEQEIAIQBCAAwBCyAFQRBqIAAgAiACQoCAgICAgMAAhCAHGyICQYABIAZrELEBIAUgACACIAYQmwMgBSkDCEIEhiAFKQMAIgJCPIiEIQACQCAEIAhHIAUpAxAgBSkDGIRCAFJxrSACQv//////////D4OEIgJCgYCAgICAgIAIWgRAIABCAXwhAAwBCyACQoCAgICAgICACFINACAAQgGDIAB8IQALIABCgICAgICAgAiFIAAgAEL/////////B1YiBBshACAErQshAiAFQSBqJAAgAUKAgICAgICAgIB/gyACQjSGhCAAhL8LiQIAAkAgAAR/IAFB/wBNDQECQEGUlgsoAgAoAgBFBEAgAUGAf3FBgL8DRg0DDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIPCyABQYBAcUGAwANHIAFBgLADT3FFBEAgACABQT9xQYABcjoAAiAAIAFBDHZB4AFyOgAAIAAgAUEGdkE/cUGAAXI6AAFBAw8LIAFBgIAEa0H//z9NBEAgACABQT9xQYABcjoAAyAAIAFBEnZB8AFyOgAAIAAgAUEGdkE/cUGAAXI6AAIgACABQQx2QT9xQYABcjoAAUEEDwsLQeSUC0EZNgIAQX8FQQELDwsgACABOgAAQQELwgIBBH8jAEHQAWsiBSQAIAUgAjYCzAEgBUGgAWoiAkEAQSgQMxogBSAFKALMATYCyAECQEEAIAEgBUHIAWogBUHQAGogAiADIAQQqgxBAEgEQEF/IQQMAQsgACgCTEEASCAAIAAoAgAiCEFfcTYCAAJ/AkACQCAAKAIwRQRAIABB0AA2AjAgAEEANgIcIABCADcDECAAKAIsIQYgACAFNgIsDAELIAAoAhANAQtBfyAAELkHDQEaCyAAIAEgBUHIAWogBUHQAGogBUGgAWogAyAEEKoMCyECIAYEQCAAQQBBACAAKAIkEQMAGiAAQQA2AjAgACAGNgIsIABBADYCHCAAKAIUIQEgAEIANwMQIAJBfyABGyECCyAAIAAoAgAiACAIQSBxcjYCAEF/IAIgAEEgcRshBA0ACyAFQdABaiQAIAQLEgAgACABQQpCgICAgAgQtAWnC2EAAkAgAA0AIAIoAgAiAA0AQQAPCyAAIAEQtQUgAGoiAC0AAEUEQCACQQA2AgBBAA8LIAAgARDZAyAAaiIBLQAABEAgAiABQQFqNgIAIAFBADoAACAADwsgAkEANgIAIAALfwICfwJ+IwBBoAFrIgQkACAEIAE2AjwgBCABNgIUIARBfzYCGCAEQRBqIgVCABCJAiAEIAUgA0EBELEMIAQpAwghBiAEKQMAIQcgAgRAIAIgBCgCiAEgASAEKAIUIAQoAjxramo2AgALIAAgBjcDCCAAIAc3AwAgBEGgAWokAAtJAQF/IwBBEGsiASQAIAFBjuYAOwEKIAEgADsBDCABIABBEHY7AQ5B8JcLQYjKCkEGECAaQYjKCiABQQpqQQYQIBogAUEQaiQAC1EBAn8jAEEwayIBJAACQAJAIAAEQEEBIAAQswciAEF/Rg0CQZCVCyAANgIADAELQZCVCygCACEACyAAQQhqQYbYASAAGyECCyABQTBqJAAgAgvnAgEDfwJAIAEtAAANAEHL0QEQnwQiAQRAIAEtAAANAQsgAEEMbEGA+gZqEJ8EIgEEQCABLQAADQELQZbUARCfBCIBBEAgAS0AAA0BC0Ht6wEhAQsCQANAIAEgAmotAAAiBEUgBEEvRnJFBEBBFyEEIAJBAWoiAkEXRw0BDAILCyACIQQLQe3rASEDAkACQAJAAkACQCABLQAAIgJBLkYNACABIARqLQAADQAgASEDIAJBwwBHDQELIAMtAAFFDQELIANB7esBEENFDQAgA0G5xQEQQw0BCyAARQRAQaT5BiECIAMtAAFBLkYNAgtBAA8LQdCWCygCACICBEADQCADIAJBCGoQQ0UNAiACKAIgIgINAAsLQSQQQiICBEAgAkGk+QYpAgA3AgAgAkEIaiIBIAMgBBAgGiABIARqQQA6AAAgAkHQlgsoAgA2AiBB0JYLIAI2AgALIAJBpPkGIAAgAnIbIQILIAILcgECfyMAQSBrIgEkAAJAIABBgICAgARJBEAgAEEEEEYiAkUNASABQSBqJAAgAg8LIAFBBDYCBCABIAA2AgBB6PoGKAIAQdrdAyABEB0aECYACyABIABBAnQ2AhBB6PoGKAIAQandAyABQRBqEB0aECYAC68BAQZ/IwBB8AFrIgYkACAGIAA2AgBBASEHAkAgA0ECSA0AQQAgAWshCSAAIQUDQCAAIAUgCWoiBSAEIANBAmsiCkECdGooAgBrIgggAhCfA0EATgRAIAAgBSACEJ8DQQBODQILIAYgB0ECdGogCCAFIAggBSACEJ8DQQBOIggbIgU2AgAgB0EBaiEHIANBAWsgCiAIGyIDQQFKDQALCyABIAYgBxC7DCAGQfABaiQAC40BAQF/AkAgASgCECIDKAKQAQ0AIAMgAjYCkAEgACABECkhAwNAIAMEQCAAIANBUEEAIAMoAgBBA3FBAkcbaigCKCACELYHIAAgAxAsIQMMAQsLIAAgARCxAiEDA0AgA0UNASAAIANBMEEAIAMoAgBBA3FBA0cbaigCKCACELYHIAAgAxD4AiEDDAALAAsLwgEBA38CQCABIAIoAhAiAwR/IAMFIAIQuQcNASACKAIQCyACKAIUIgRrSwRAIAIgACABIAIoAiQRAwAPCwJAAkAgAUUgAigCUEEASHINACABIQMDQCAAIANqIgVBAWstAABBCkcEQCADQQFrIgMNAQwCCwsgAiAAIAMgAigCJBEDACIEIANJDQIgASADayEBIAIoAhQhBAwBCyAAIQVBACEDCyAEIAUgARAgGiACIAIoAhQgAWo2AhQgASADaiEECyAEC5QBAQN/IwBBEGsiAyQAIAMgAToADwJAAkAgACgCECICBH8gAgUgABC5BwRAQX8hAgwDCyAAKAIQCyAAKAIUIgRGDQAgAUH/AXEiAiAAKAJQRg0AIAAgBEEBajYCFCAEIAE6AAAMAQsgACADQQ9qQQEgACgCJBEDAEEBRwRAQX8hAgwBCyADLQAPIQILIANBEGokACACC1kBAX8gACAAKAJIIgFBAWsgAXI2AkggACgCACIBQQhxBEAgACABQSByNgIAQX8PCyAAQgA3AgQgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCEEEAC5QDAgN+An8CQCAAvSICQjSIp0H/D3EiBEH/D0cNACAARAAAAAAAgFZAoiIAIACjDwsgAkIBhiIBQoCAgICAgMDWgH9YBEAgAEQAAAAAAAAAAKIgACABQoCAgICAgMDWgH9RGw8LAn4gBEUEQEEAIQQgAkIMhiIBQgBZBEADQCAEQQFrIQQgAUIBhiIBQgBZDQALCyACQQEgBGuthgwBCyACQv////////8Hg0KAgICAgICACIQLIQEgBEGFCEoEQANAAkAgAUKAgICAgICgC30iA0IAUw0AIAMiAUIAUg0AIABEAAAAAAAAAACiDwsgAUIBhiEBIARBAWsiBEGFCEoNAAtBhQghBAsCQCABQoCAgICAgKALfSIDQgBTDQAgAyIBQgBSDQAgAEQAAAAAAAAAAKIPCyABQv////////8HWARAA0AgBEEBayEEIAFCgICAgICAgARUIAFCAYYhAQ0ACwsgAkKAgICAgICAgIB/gyABQoCAgICAgIAIfSAErUI0hoQgAUEBIARrrYggBEEAShuEvwsvACAAIAAgAZcgAbxB/////wdxQYCAgPwHSxsgASAAvEH/////B3FBgICA/AdNGwt8AQJ/IAAgACgCSCIBQQFrIAFyNgJIIAAoAhQgACgCHEcEQCAAQQBBACAAKAIkEQMAGgsgAEEANgIcIABCADcDECAAKAIAIgFBBHEEQCAAIAFBIHI2AgBBfw8LIAAgACgCLCAAKAIwaiICNgIIIAAgAjYCBCABQRt0QR91C6MYAxN/BHwBfiMAQTBrIgkkAAJAAkACQCAAvSIZQiCIpyIDQf////8HcSIGQfrUvYAETQRAIANB//8/cUH7wyRGDQEgBkH8souABE0EQCAZQgBZBEAgASAARAAAQFT7Ifm/oCIARDFjYhphtNC9oCIVOQMAIAEgACAVoUQxY2IaYbTQvaA5AwhBASEDDAULIAEgAEQAAEBU+yH5P6AiAEQxY2IaYbTQPaAiFTkDACABIAAgFaFEMWNiGmG00D2gOQMIQX8hAwwECyAZQgBZBEAgASAARAAAQFT7IQnAoCIARDFjYhphtOC9oCIVOQMAIAEgACAVoUQxY2IaYbTgvaA5AwhBAiEDDAQLIAEgAEQAAEBU+yEJQKAiAEQxY2IaYbTgPaAiFTkDACABIAAgFaFEMWNiGmG04D2gOQMIQX4hAwwDCyAGQbuM8YAETQRAIAZBvPvXgARNBEAgBkH8ssuABEYNAiAZQgBZBEAgASAARAAAMH982RLAoCIARMqUk6eRDum9oCIVOQMAIAEgACAVoUTKlJOnkQ7pvaA5AwhBAyEDDAULIAEgAEQAADB/fNkSQKAiAETKlJOnkQ7pPaAiFTkDACABIAAgFaFEypSTp5EO6T2gOQMIQX0hAwwECyAGQfvD5IAERg0BIBlCAFkEQCABIABEAABAVPshGcCgIgBEMWNiGmG08L2gIhU5AwAgASAAIBWhRDFjYhphtPC9oDkDCEEEIQMMBAsgASAARAAAQFT7IRlAoCIARDFjYhphtPA9oCIVOQMAIAEgACAVoUQxY2IaYbTwPaA5AwhBfCEDDAMLIAZB+sPkiQRLDQELIAAgAESDyMltMF/kP6JEAAAAAAAAOEOgRAAAAAAAADjDoCIWRAAAQFT7Ifm/oqAiFSAWRDFjYhphtNA9oiIXoSIYRBgtRFT7Iem/YyECAn8gFplEAAAAAAAA4EFjBEAgFqoMAQtBgICAgHgLIQMCQCACBEAgA0EBayEDIBZEAAAAAAAA8L+gIhZEMWNiGmG00D2iIRcgACAWRAAAQFT7Ifm/oqAhFQwBCyAYRBgtRFT7Iek/ZEUNACADQQFqIQMgFkQAAAAAAADwP6AiFkQxY2IaYbTQPaIhFyAAIBZEAABAVPsh+b+ioCEVCyABIBUgF6EiADkDAAJAIAZBFHYiAiAAvUI0iKdB/w9xa0ERSA0AIAEgFSAWRAAAYBphtNA9oiIAoSIYIBZEc3ADLooZozuiIBUgGKEgAKGhIhehIgA5AwAgAiAAvUI0iKdB/w9xa0EySARAIBghFQwBCyABIBggFkQAAAAuihmjO6IiAKEiFSAWRMFJICWag3s5oiAYIBWhIAChoSIXoSIAOQMACyABIBUgAKEgF6E5AwgMAQsgBkGAgMD/B08EQCABIAAgAKEiADkDACABIAA5AwhBACEDDAELIAlBEGoiA0EIciEEIBlC/////////weDQoCAgICAgICwwQCEvyEAQQEhAgNAIAMCfyAAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAu3IhU5AwAgACAVoUQAAAAAAABwQaIhACACQQAhAiAEIQMNAAsgCSAAOQMgQQIhAwNAIAMiAkEBayEDIAlBEGoiDiACQQN0aisDAEQAAAAAAAAAAGENAAtBACEEIwBBsARrIgUkACAGQRR2QZYIayIDQQNrQRhtIgdBACAHQQBKGyIQQWhsIANqIQdBhNIGKAIAIgogAkEBaiIMQQFrIghqQQBOBEAgCiAMaiEDIBAgCGshAgNAIAVBwAJqIARBA3RqIAJBAEgEfEQAAAAAAAAAAAUgAkECdEGQ0gZqKAIAtws5AwAgAkEBaiECIARBAWoiBCADRw0ACwsgB0EYayEGQQAhAyAKQQAgCkEAShshBCAMQQBMIQsDQAJAIAsEQEQAAAAAAAAAACEADAELIAMgCGohD0EAIQJEAAAAAAAAAAAhAANAIA4gAkEDdGorAwAgBUHAAmogDyACa0EDdGorAwCiIACgIQAgAkEBaiICIAxHDQALCyAFIANBA3RqIAA5AwAgAyAERiADQQFqIQNFDQALQS8gB2shEUEwIAdrIQ8gB0EZayESIAohAwJAA0AgBSADQQN0aisDACEAQQAhAiADIQQgA0EATCINRQRAA0AgBUHgA2ogAkECdGoCfwJ/IABEAAAAAAAAcD6iIhWZRAAAAAAAAOBBYwRAIBWqDAELQYCAgIB4C7ciFUQAAAAAAABwwaIgAKAiAJlEAAAAAAAA4EFjBEAgAKoMAQtBgICAgHgLNgIAIAUgBEEBayIEQQN0aisDACAVoCEAIAJBAWoiAiADRw0ACwsCfyAAIAYQ6wIiACAARAAAAAAAAMA/opxEAAAAAAAAIMCioCIAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAshCCAAIAi3oSEAAkACQAJAAn8gBkEATCITRQRAIANBAnQgBWoiAiACKALcAyICIAIgD3UiAiAPdGsiBDYC3AMgAiAIaiEIIAQgEXUMAQsgBg0BIANBAnQgBWooAtwDQRd1CyILQQBMDQIMAQtBAiELIABEAAAAAAAA4D9mDQBBACELDAELQQAhAkEAIQQgDUUEQANAIAVB4ANqIAJBAnRqIhQoAgAhDQJ/AkAgFCAEBH9B////BwUgDUUNAUGAgIAICyANazYCAEEBDAELQQALIQQgAkEBaiICIANHDQALCwJAIBMNAEH///8DIQICQAJAIBIOAgEAAgtB////ASECCyADQQJ0IAVqIg0gDSgC3AMgAnE2AtwDCyAIQQFqIQggC0ECRw0ARAAAAAAAAPA/IAChIQBBAiELIARFDQAgAEQAAAAAAADwPyAGEOsCoSEACyAARAAAAAAAAAAAYQRAQQAhBCADIQICQCADIApMDQADQCAFQeADaiACQQFrIgJBAnRqKAIAIARyIQQgAiAKSg0ACyAERQ0AIAYhBwNAIAdBGGshByAFQeADaiADQQFrIgNBAnRqKAIARQ0ACwwDC0EBIQIDQCACIgRBAWohAiAFQeADaiAKIARrQQJ0aigCAEUNAAsgAyAEaiEEA0AgBUHAAmogAyAMaiIIQQN0aiADQQFqIgMgEGpBAnRBkNIGaigCALc5AwBBACECRAAAAAAAAAAAIQAgDEEASgRAA0AgDiACQQN0aisDACAFQcACaiAIIAJrQQN0aisDAKIgAKAhACACQQFqIgIgDEcNAAsLIAUgA0EDdGogADkDACADIARIDQALIAQhAwwBCwsCQCAAQRggB2sQ6wIiAEQAAAAAAABwQWYEQCAFQeADaiADQQJ0agJ/An8gAEQAAAAAAABwPqIiFZlEAAAAAAAA4EFjBEAgFaoMAQtBgICAgHgLIgK3RAAAAAAAAHDBoiAAoCIAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAs2AgAgA0EBaiEDDAELAn8gAJlEAAAAAAAA4EFjBEAgAKoMAQtBgICAgHgLIQIgBiEHCyAFQeADaiADQQJ0aiACNgIAC0QAAAAAAADwPyAHEOsCIQACQCADQQBIDQAgAyECA0AgBSACIgRBA3RqIAAgBUHgA2ogAkECdGooAgC3ojkDACACQQFrIQIgAEQAAAAAAABwPqIhACAEDQALIANBAEgNACADIQQDQEQAAAAAAAAAACEAQQAhAiAKIAMgBGsiByAHIApKGyIGQQBOBEADQCACQQN0QeDnBmorAwAgBSACIARqQQN0aisDAKIgAKAhACACIAZHIAJBAWohAg0ACwsgBUGgAWogB0EDdGogADkDACAEQQBKIARBAWshBA0ACwtEAAAAAAAAAAAhACADQQBOBEAgAyECA0AgAiIEQQFrIQIgACAFQaABaiAEQQN0aisDAKAhACAEDQALCyAJIACaIAAgCxs5AwAgBSsDoAEgAKEhAEEBIQIgA0EASgRAA0AgACAFQaABaiACQQN0aisDAKAhACACIANHIAJBAWohAg0ACwsgCSAAmiAAIAsbOQMIIAVBsARqJAAgCEEHcSEDIAkrAwAhACAZQgBTBEAgASAAmjkDACABIAkrAwiaOQMIQQAgA2shAwwBCyABIAA5AwAgASAJKwMIOQMICyAJQTBqJAAgAwuCAgMCfAJ/AX4gAL0iBUIgiKdB/////wdxIgNBgIDA/wdPBEAgACAAoA8LAkAgA0H//z9LBH9Bk/H91AIFIABEAAAAAAAAUEOivSIFQiCIp0H/////B3EiA0UNAUGT8f3LAgshBCAFQoCAgICAgICAgH+DIANBA24gBGqtQiCGhL8iAiACoiACIACjoiIBIAEgAaKiIAFE1+3k1ACwwj+iRNlR577LROi/oKIgASABRMLWSUpg8fk/okQgJPCS4Cj+v6CiRJLmYQ/mA/4/oKAgAqK9QoCAgIB8g0KAgICACHy/IgEgACABIAGioyIAIAGhIAEgAaAgAKCjoiABoCEACyAACwsAIABBniQQIxBqC8cDAwV8An4CfwJAAn8CQCAAvSIGQv////////8HVwRAIABEAAAAAAAAAABhBEBEAAAAAAAA8L8gACAAoqMPCyAGQgBZDQEgACAAoUQAAAAAAAAAAKMPCyAGQv/////////3/wBWDQJBgXghCSAGQiCIIgdCgIDA/wNSBEAgB6cMAgtBgIDA/wMgBqcNARpEAAAAAAAAAAAPC0HLdyEJIABEAAAAAAAAUEOivSIGQiCIpwshCCAGQv////8PgyAIQeK+JWoiCEH//z9xQZ7Bmv8Daq1CIIaEv0QAAAAAAADwv6AiACAAIABEAAAAAAAA4D+ioiIDob1CgICAgHCDvyIERAAAIGVHFfc/oiIBIAkgCEEUdmq3IgKgIgUgASACIAWhoCAAIABEAAAAAAAAAECgoyIBIAMgASABoiICIAKiIgEgASABRJ/GeNAJmsM/okSveI4dxXHMP6CiRAT6l5mZmdk/oKIgAiABIAEgAUREUj7fEvHCP6JE3gPLlmRGxz+gokRZkyKUJEnSP6CiRJNVVVVVVeU/oKKgoKIgACAEoSADoaAiACAEoEQAou8u/AXnPaIgAEQAACBlRxX3P6KgoKAhAAsgAAttAQN/IAAQ/gEgACAAQTBrIgEgACgCAEEDcSICQQJGGygCKCAAIABBMGoiAyACQQNGGygCKBCEAyICBEAgACACEIEDDwsgACABIAAoAgBBA3EiAUECRhsoAiggACADIAFBA0YbKAIoIAAQ2wEaC9EDAQF/AkAgASACRgRAIANBADYCAAwBCwJAAkAgACABIAIQ7QJBCWsiB0EXS0EBIAd0QZOAgARxRXINAANAIAAgASAAKAJAaiIBIAIQ7QJBCWsiB0EXTQRAQQEgB3RBk4CABHENAQsLIAEgAkYEQCADQQA2AgAMAwsgAyABNgIAAkACQAJAA0ACQCAAIAEgAhDtAiIHQQlrQQJJDQAgB0E9Rg0CIAdBDUYgB0EgRnINACAHQX9GDQUgASAAKAJAaiEBDAELCyAEIAE2AgADQCAAIAEgACgCQGoiASACEO0CIgRBCWsiB0EXSw0CQQEgB3RBk4CABHENAAsMAQsgBCABNgIADAELIARBPUcNAQsgASADKAIARg0AA0AgACABIAAoAkBqIgEgAhDtAiIDQQlrQQJJDQACQCADQSBrDgMBAgMACyADQQ1GDQALIANBJ0YNAQsgBiABNgIAQQAPCyAFIAEgACgCQGoiBDYCAANAIAMgACAEIAIQ7QIiAUcEQCABQTprQXVLIAFBX3FB2wBrQWVLciABQd8ARiABQS1rQQJJcnIEQCAEIAAoAkBqIQQMAgUgBiAENgIAQQAPCwALCyAGIAQgACgCQGo2AgALQQELEQAgACABIAJBiwNBigMQ7woLpgUBCn8gAEHYmwZB7AIQICEEQQAhAANAAkACQCAAQYABRgRAIARB9AJqIQggBEH0BmohCSAEQcgAaiEHQQAhAAJ/A0AgAEGAAkcEQAJAIAEgAEECdCIKaigCACIFQX9GBEAgACAHakEBOgAAIAggAEEBdGpB//8DOwEAIAkgCmpBATsBAAwBCyAFQQBIBEBBACACRSAFQXxJcg0EGiAAIAdqQQMgBWs6AAAgCSAKakEAOgAAIAggAEEBdGpBADsBAAwBCyAFQf8ATQRAIAVBoJwGai0AACIGRSAGQRxGckUgACAFR3ENBiAAIAdqIAY6AAAgCSAKaiIGIAU6AAEgBkEBOgAAIAggAEEBdGogBUF/IAUbOwEADAELIAUQqQRBAEgEQCAAIAdqQQA6AAAgCCAAQQF0akH//wM7AQAgCSAKakEBOwEADAELIAVB//8DSw0FAkBBASAFdCIMIAVBBXZBB3FBAnQiDSAFQQh2IgZBsK4Gai0AAEEFdHJB0J4GaigCAHEEQCAAIAdqQRY6AAAMAQsgACAHaiELIAZBsLAGai0AAEEFdCANckHQngZqKAIAIAxxBEAgC0EaOgAADAELIAtBHDoAAAsgCSAKaiIGIAUgBkEBahCqBDoAACAIIABBAXRqIAU7AQALIABBAWohAAwBCwsgBCACNgLsAiAEIAM2AvACIAIEQCAEQYQDNgLoAiAEQYQDNgLkAiAEQYQDNgLgAiAEQYUDNgLcAiAEQYUDNgLYAiAEQYUDNgLUAiAEQYYDNgLQAiAEQYYDNgLMAiAEQYYDNgLIAgsgBEGHAzYCPCAEQYgDNgI4IAQLDwsgAEGgnAZqLQAAIgZFIAZBHEZyDQEgASAAQQJ0aigCACAARg0BC0EADwsgAEEBaiEADAALAAuYAwEEfyMAQRBrIgUkACAAIAE2AqgCIABBgQM2AqACAkACQAJAAkACQANAIAVBADYCDCAAIAAoApwBIgQgASACIAVBDGogBCgCABEGACIHIAEgBSgCDEH6LEEAEKoCRQRAIAAQ7wJBKyEEDAYLIAAgBSgCDCIGNgKsAkEJIQQCQAJAAkACQAJAAkAgB0ELaw4FAgsDCwEACwJAIAdBBGoOBQgLBwUJAAsgB0FxRw0KIAMgACgCXAR/IAAgACgCnAEgASAGEIUBIAAoAugDQQJGBEBBIyEEDAwLIAUoAgwFIAYLNgIAQQAhBAwKCyAAKAJcRQ0CIAAgACgCnAEgASAGEIUBDAILIAAgACgCnAEgASAGEMoHDQEMBwsgACAAKAKcASABIAYQywdFDQYLIAAgBSgCDCIBNgKoAkEjIQQgACgC6ANBAmsOAgYDAQsLIAAtAOwDRQ0BQQUhBAwECyAALQDsA0UNAEEGIQQMAwsgAyABNgIAQQAhBAwCCyAAIAY2AqgCQQQhBAwBC0EBIQQLIAVBEGokACAEC4kBAgV+AX8gAUEAIAFBAEobIQEDQCABIAdGRQRAIAAgACkDGCICIAApAxB8IgMgAkIQiYUiAiAAKQMIIgQgACkDAHwiBUIgiXwiBjcDACAAIAJCFYkgBoU3AxggACADIAUgBEINiYUiAnwiA0IgiTcDECAAIAMgAkIRiYU3AwggB0EBaiEHDAELCwueAQIEfwF+IABBIGohBSAAQShqIQMgASACaiEEA0AgAygCACICIANPIAEgBE9yRQRAIAEtAAAhBiADIAJBAWo2AgAgAiAGOgAAIAFBAWohAQwBCyACIANPBEAgACAAKQMgIgcgACkDGIU3AxggAEECEMYHIAAgBTYCKCAAIAcgACkDAIU3AwAgACAAKQMwQgh8NwMwIAEgBEkNAQsLIAAL5wEBCH8gAEH0AmohAQNAAkAgASgCACIBRQRAQQEhAwwBC0EBIQMgASgCBCIEIAEoAiQiBiABKAIYIgVBAWoiB2oiCEYNAEEAIQMgASgCCCICQf7///8HIAVrSw0AIAIgB2oiBSABKAIoIAZrSgRAIAYgBSAAKAIQEQAAIgJFDQEgASgCJCIDIAEoAgxGBEAgASACNgIMCyABKAIQIgQEQCABIAIgBCADa2o2AhALIAEgAjYCJCABIAIgBWo2AiggAiAHaiEIIAEoAgQhBCABKAIIIQILIAEgCCAEIAIQIDYCBAwBCwsgAwucAQIBfwJ+IwBB0ABrIgIkACAAIAJBCGoQ9wwgAkIANwNIIAIgAkE4ajYCQCACIAIpAwgiA0L1ys2D16zbt/MAhTcDGCACIAIpAxAiBELzytHLp4zZsvQAhTcDMCACIANC4eSV89bs2bzsAIU3AyggAiAEQu3ekfOWzNy35ACFNwMgIAJBGGogASABEPYMEMcHEPUMIAJB0ABqJACnC6oBAQN/AkAgACgCTEUEQEEBIQQgACgCXEUNASAAIAEgAiADEIUBQQEPCyAAQagDaiIFIAEgAiABKAJAQQF0aiICIAEgAiABKAIcEQAAIAJqIgIQhAEiBkUNACAAIAAoArQDNgK4AyAFIAEgASACIAEoAiARAAAgAyABKAJAQQF0axCEASIBRQ0AIAEQ+AwgACgCBCAGIAEgACgCTBEFACAFEKsCQQEhBAsgBAtsAQF/AkAgACgCUEUEQCAAKAJcRQ0BIAAgASACIAMQhQFBAQ8LIABBqANqIgQgASACIAEoAkAiAUECdGogAyABQX1sahCEASIBRQRAQQAPCyABEPgMIAAoAgQgASAAKAJQEQQAIAQQqwILQQELaAECfwJAIAAoAuwCIgRB0ABqIAEgAiADEIQBIgJFDQAgACAEQRRqIAJBGBCbASIBRQ0AAkAgAiABKAIARwRAIAQgBCgCYDYCXAwBCyAEIAQoAlw2AmAgACABEPwMRQ0BCyABIQULIAULMgACQCAAQQAgACgCnAEgASACIAMgAC0A7ANFQQAQqwQiAw0AIAAQyAcNAEEBIQMLIAMLiAEBA38gACIBIQMDQAJAAkACQAJAIAMtAAAiAkEKaw4EAQICAQALIAJBIEYNACACDQEgACABRwR/IAFBAWsiACABIAAtAABBIEYbBSABC0EAOgAADwsgACABRg0BQSAhAiABQQFrLQAAQSBGDQELIAEgAjoAACABQQFqIQELIANBAWohAwwACwALWQECfyMAQRBrIgQkACAEIAE2AgwgACgCnAEiBSABIAIgBEEMaiAFKAIAEQYAIQUgACAAKAKcASABIAIgBSAEKAIMIAMgAC0A7ANFQQFBABDFBSAEQRBqJAALEwAgAEGAAXNBAnRB2JMGaigCAAssAQF/A0AgAARAIAAoAgQgACgCECABKAIUEQEAIAAgASgCFBEBACEADAELCwuXBgEIfyABKAIAIQUCQCADLQAAIgZFBEAgBQRAQRwPC0EBIQtBKCEHDAELQQEhC0EoIQcgBUUNACAFLQAAQfgARw0AIAUtAAFB7QBHDQAgBS0AAkHsAEcNACAFLQADIggEQCAIQe4ARw0BIAUtAARB8wBHDQEgBS0ABQ0BQScPC0EBIQpBACELQSYhBwtBASEIQQEhDEEAIQUCQANAIAZB/wFxIgkEQAJAIAhB/wFxRSAFQSRLckUEQCAJIAVBsJEGai0AAEYNAQtBACEICwJAIAsgDHFFDQAgBUEdTQRAIAkgBUHgkQZqLQAARg0BC0EAIQwLAkAgAC0A9AFFDQAgCSAALQDgA0cNAEECIQYgCUEhaw5eAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAAMLIAMgBUEBaiIFai0AACEGDAELCyAHIQYgCiAFQSRGIAhB/wFxQQBHcUcNACAMRSAFQR1HckUEQEEoDwsgBSAALQDgA0EAR2ohBwJAIAAoAoADIgUEQCAFKAIYIAdIBEBBASEGIAdB5////wdLDQMgBSgCECAHQRhqIgggACgCEBEAACIJRQ0DIAUgCDYCGCAFIAk2AhALIAAgBSgCBDYCgAMgBSgCECEIDAELQQEhBkEcIAAoAgwRAgAiBUUgB0Hn////B0tyDQEgBSAHQRhqIgYgACgCDBECACIINgIQIAhFBEAgBSAAKAIUEQEAQQEPCyAFIAY2AhgLIAUgBzYCFCAIIAMgBxAgGiAALQDgAyIGBEAgBSgCECAHakEBayAGOgAACyAFIAI2AgwgBSABNgIAIAUgASgCBDYCCCABAn8CQCADLQAADQAgACgC7AJBmAFqIAFHDQBBAAwBCyAFCzYCBCAFIAQoAgA2AgQgBCAFNgIAQQAhBiACRQ0AIAAoAnAiAkUNACAAKAIEIAEoAgAgA0EAIAEoAgQbIAIRBQALIAYLbgEDfyMAQRBrIgEkAAJAIAAQnwQiAgRAQeSUC0EANgIAIAFBADYCDCACIAFBDGpBChCcBCEAAkBB5JQLKAIADQAgAiABKAIMIgNGDQAgAy0AAEUNAgtB5JQLQQA2AgALQQAhAAsgAUEQaiQAIAALPgEEfyAAKAIAIQEgACgCBCEDA0AgASADRgRAQQAPCyAAIAFBBGoiBDYCACABKAIAIQIgBCEBIAJFDQALIAILYgEDfyAAIAFGBEBBAQ8LIAAoAhAoAsgBIQNBACEAA0ACQCADIABBAnRqKAIAIgJBAEchBCACRQ0AIABBAWohACACQVBBACACKAIAQQNxQQJHG2ooAiggARDVB0UNAQsLIAQLsgEBBn8jAEEQayICJAACQCAAIAJBDGoQlg0iBARAIAIoAgwiA0EYED8hBSABIAM2AgAgBSEAAkADQCADIAZLBEAgACAEIAJBCGoiBxDWATkDACAEIAIoAggiA0YNAiAAIAMgBxDWATkDCCADIAIoAggiBEYNAiAAQgA3AxAgBkEBaiEGIABBGGohACABKAIAIQMMAQsLIAEgBTYCBAwCCyAFEBcLQQAhBAsgAkEQaiQAIAQLfQEDfyMAQTBrIgIkACAAEB4hAyAAECshBAJAAkAgAwRAQX8hACAEIAEgAxDzAkF/Rw0BDAILIAIgACkDCDcDACACQRBqIgNBHkGtywEgAhClARpBfyEAIAEgAyAEKAJMKAIEKAIEEQAAQX9GDQELQQAhAAsgAkEwaiQAIAALxAEBBn8CQCAAEB4iAQRAIAEtAABBJUcNAQsCQCAAEOYBIgRFDQAgACgCRBDmASIFRQ0AQQAhASAAEDQQ5gEoAggQhwEiAkEAIAJBAEobIQIDQCABIAJGDQECQCABQQJ0IgMgBCgCDGooAgAiBkUNACAFKAIMIANqKAIAIgNFDQAgBiADEEMNAwsgAUEBaiEBDAALAAsgAEEAELICIgBFBEBBAQ8LIAAoAggQhwFBAEwEfyAAKAIMEIcBQQBMBUEACw8LQQAL9QMBBX8gBEUEQCADQQAQ8AIhBwsgA0EAQYABIAMoAgARAwAhBgJAAkACQAJAA0AgBgRAAkACQCAGKAIMIgUEQCAFLQAADQELIAYtABYNACAHRQ0BIAcgBkEEIAcoAgARAwAiBUUNBCAFKAIMIgkEQCAJLQAADQELIAUtABYNAQsCQCAIRQRAQX8hBSAAIAEQ9AJBf0YNCCABIAIgACgCTCgCBCgCBBEAAEF/Rg0IIAFBiMUBIAAoAkwoAgQoAgQRAABBf0YNCEHQlAtB0JQLKAIAQQFqNgIADAELQX8hBSABQfbfBCAAKAJMKAIEKAIEEQAAQX9GDQcgACABEPQCQX9GDQcLIAAgASAGKAIIEPMCQX9GDQYgAUHT2gEgACgCTCgCBCgCBBEAAEF/Rg0GIAAgASAGKAIMEPMCQX9GDQYgCEEBaiEICyADIAZBCCADKAIAEQMAIQYMAQsLIAhBAEwNAUF/IQVB0JQLQdCUCygCAEEBazYCACAIQQFHBEAgAUHi9AQgACgCTCgCBCgCBBEAAEF/Rg0EIAAgARD0AkF/Rg0EC0F/QQAgAUGsygQgACgCTCgCBCgCBBEAAEF/RiIAGyEFIAANAwwCC0Gb6wBB/rsBQa8CQY4jEAAAC0EAIQULIAQNACADIAcQ8AIaQQAhBQsgBQvIAQEDfyMAQRBrIgQkACAAEDgiAiABaiIBIAJBAXRBgAggAhsiAyABIANLGyEBIAAQISEDAkACQAJAIAAtAA9B/wFGBEAgAkF/Rg0CIAAoAgAgAiABELENIQIMAQtBACABIAFBARBGIgIbDQIgAiAAIAMQIBogACADNgIECyAAQf8BOgAPIAAgATYCCCAAIAI2AgAgBEEQaiQADwtBkbQDQd79AEHNAEGTswEQAAALIAQgATYCAEHo+gYoAgBBqd0DIAQQHRoQJgAL4gEBBn9BhJQLKAIAQYiUCygCAEECdGooAgAoAhxBgJQLKAIAaiEAQYyUCygCACEDQZyUCygCACEBA0AgASADSQRAIAEtAAAiAgR/IAJB0IAGai0AAAVBAQshAiAAQQF0QdCCBmovAQAEQEGYlAsgATYCAEGUlAsgADYCAAsDQAJAA0AgACAAQQF0IgRBsIgGai4BACACakEBdCIFQZCEBmouAQBGDQEgBEGQigZqLgEAIgBB3QBIDQALIAJB8IsGai0AACECDAELCyABQQFqIQEgBUGwjAZqLgEAIQAMAQsLIAALWQECf0GolAtBhJQLKAIAQYiUCygCAEECdGoiASgCACIAKAIQNgIAQYyUCyAAKAIIIgA2AgBBnJQLIAA2AgBB5JMLIAEoAgAoAgA2AgBBkJQLIAAtAAA6AAALPAEDfyAAECshAiAAKAIQIgEEQANAIAEoAgQgAiABKAIAEIkBGiABEBciASAAKAIQRw0ACwsgAEEANgIQC1MBAX8gACABNgIQIABBBEEAIAIbIgMgACgCACICQXtxcjYCACACQQJxBEAgAEFQQTAgAkEDcUEDRhtqIgAgATYCECAAIAAoAgBBe3EgA3I2AgALCxEAIAAgASAAKAJMKAIoELoNCxEAIAAgASAAKAJMKAIoEL4NCyQAIAAoAggiAEUEQEHflQNBlL0BQZgDQakSEAAACyABpyAAcAskACAAIAEgAhDLDSAAKAJMIgAoAgggASACIAAoAgAoAgwRIQALCwBBACAAIAEQ0Q0LLAEBfyAAKAIEIgIEQCACIAE2AgwLIAAgATYCBCAAKAIARQRAIAAgATYCAAsL4QQBBn8jAEEgayIEJAACQCACRQRAIAEhAwwBCyAEQgA3AxggBEIANwMQIAQgATYCACAEIAI2AgQgBEEQaiEDIwBBEGsiBSQAIAUgBDYCBCAFIAQ2AgwgBSAENgIIAkACQAJAAkBBAEEAQY0zIAQQTiIIQQBIDQAgCEEBaiEGIAggAxA4IAMQIWsiB08EQCADIAYgB2sQ0w0LIAMQISEHIAggAxAlBH8gAyAHagUgAygCACAHagsgBkGNMyAFKAIMEE4iBkcgBkEATnENASAGQQBMDQAgAxAlBEAgBkGAAk8NAyADIAMtAA8gBmo6AA8gAxAhQRBJDQFBv64DQY/9AEHEAUHZHRAAAAsgAyADKAIEIAZqNgIECyAFQRBqJAAMAgtBzZYDQY/9AEG/AUHZHRAAAAtB0skBQY/9AEHCAUHZHRAAAAtBpJMLKAIAIAMQISADEDhPBEAgA0EBENMNCyAEQRBqIgMQISEFAkAgAxAlBEAgAyAFakEAOgAAIAQgBC0AH0EBajoAHyADECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgBCgCECAFakEAOgAAIAQgBCgCFEEBajYCFAsCQCAEQRBqECUEQCAEQQA6AB8MAQsgBEEANgIUCyAEQRBqIgMQJSEFIAMgBCgCECAFGxCqASEDQaSTCygCACABEIkBGkGkkwsoAgAgAhCJARogBC0AH0H/AUcNACAEKAIQEBcLQYMCQayTCygCACgCACAAQQEQcyADEM4FIQFBrJMLKAIAQQhqIAEQ5AdBpJMLKAIAIAAQiQEaIARBIGokAAshACAARQRAQYXRAUG//ABBDEHHOxAAAAsgAEHBgAYQQ0ULsAEBBH9BrJMLKAIAQRhqIQEgAEECRyEDAkADQCABKAIAIgEEQCABKAIAQYsCRw0CIAEoAgQhAgJAIANFBEAgAhDmBw0BCyABQayTCygCACgCACAAIAJBABAfIgQ2AgQgBEUEQCABQayTCygCACgCACAAIAJB5fQEEB82AgQLIAFBigI2AgBBpJMLKAIAIAIQiQEaCyABQQxqIQEMAQsLDwtB7usAQe8QQZgCQZwpEAAAC0MBAX8gACABEOQBIgRFBEBBAA8LIAMEfyAAKAI0IARBIGoQ3g0FQQALIQEgAgR/IAAoAjQgBEEcahDeDSABagUgAQsLIwEBfiAAKAJMIAFBA3RqIgBBEGogACkDEEIBfCICNwMAIAILyAEBA38jAEEQayICJAAgAUFQQQAgASgCAEEDcUECRxtqIgFBUEEAIAEoAgBBA3EiA0ECRxtqKAIoIQQgAUEwQQAgA0EDRxtqKAIoIQMgAiABKQMINwMIIAIgASkDADcDAAJAIAAgAyAEIAIQ9wJFDQAgABA0IABGBEAgAC0AGEEgcQRAIAEQ4w0LIAAgARDfByABEN0HIABBAiABKQMIEOIHCyAAIAFB2QJBAEEAEOQDDQAgABA0IABGBEAgARAXCwsgAkEQaiQAC8cBAQZ/IwBBEGsiAyQAIAFBUEEAIAEoAgBBA3EiBEECRxtqIgUoAighBiABQTBBACAEQQNHG2oiBCgCKCEHA0ACQCAARQ0AIAMgASkDCDcDCCADIAEpAwA3AwAgACAHIAYgAxD3Ag0AIAAgBxDkASECIAAoAjQgAkEgaiAFENAFIAAoAjggAkEYaiAFENAFIAAgBhDkASECIAAoAjQgAkEcaiAEENAFIAAoAjggAkEUaiAEENAFIAAoAkQhAAwBCwsgA0EQaiQACzgBAX8gACAAECsgACgCAEEDcSABQQAQHyIDBH8gAwUgABArIAAoAgBBA3EgAUHl9AQQHwsgAhBoC4MBAQJ/IAEQhwFFBEAgAEEAQYABIAAoAgARAwAhBANAIAQEQCACIAQoAgggBCgCDCAEKAIQIAMQsQQiBSAELQAWOgAWIAUgBC0AFToAFSABIAVBASABKAIAEQMAGiAAIARBCCAAKAIAEQMAIQQMAQsLDwtBzpQDQZC5AUHjAEHeIhAAAAu4AQEDfyABEOYBIgQEQCACKAIQIgNBBE4EQCAEAn8gBCgCDCEBIANBAnQiAyEFQQAgA0EEaiIDRQ0AGgJAAkAgAQRAIAEgAxA9IgFFDQEgAyAFTQ0CIAEgBWpBACADIAVrEDMaIAEMAwsgAxDjASIBDQELQQAhAUHllAFBABAxCyABCzYCDAsgACACKAIMEKoBIQAgBCgCDCACKAIQQQJ0aiAANgIADwtBq88BQZC5AUHuAUG8NBAAAAsTACAAIAFBsiJBsApBmbgBEI8DCz0BAn8jAEEgayICJAAgAEEAEPACIQMgAiABNgIQIAAgAkEIakEEIAAoAgARAwAgACADEPACGiACQSBqJAALQAEBfyMAQSBrIgIkACAAEOYBIgAEfyAAKAIIIQAgAiABNgIQIAAgAkEIakEEIAAoAgARAwAFQQALIAJBIGokAAvsAgEEfyMAQYABayIHJAAgAkEAIAJBAEobIQICQANAIAIgCEYEQCAEIAMgAyAESBshBANAIAMgBEYiAg0DIAYgA0ECdGooAgAhCCAHIAApAwg3AzggByAAKQMANwMwIAcgASkDCDcDKCAHIAEpAwA3AyAgByAFIANBBHRqIgkpAwg3AxggByAJKQMANwMQIAcgBSAIQQR0aiIIKQMINwMIIAcgCCkDADcDACADQQFqIQMgB0EwaiAHQSBqIAdBEGogBxCzBEUNAAsMAgsgBiAIQQJ0aigCACEJIAcgACkDCDcDeCAHIAApAwA3A3AgByABKQMINwNoIAcgASkDADcDYCAHIAUgCEEEdGoiCikDCDcDWCAHIAopAwA3A1AgByAFIAlBBHRqIgkpAwg3A0ggByAJKQMANwNAIAhBAWohCCAHQfAAaiAHQeAAaiAHQdAAaiAHQUBrELMERQ0AC0EAIQILIAdBgAFqJAAgAgvjBAIFfAJ/AkACQAJAIAArAxgiAplESK+8mvLXej5jBEAgACsDECICmURIr7ya8td6PmMEQCAAKwMAIQQgACsDCCICmURIr7ya8td6PmNFDQIgBJlESK+8mvLXej5jQQJ0DwsgACsDCCACIAKgoyIEIASiIAArAwAgAqOhIgJEAAAAAAAAAABjDQMgAkQAAAAAAAAAAGQEQCABIAKfIAShIgI5AwAgASAERAAAAAAAAADAoiACoTkDCEECDwsgASAEmjkDAAwCCwJ/An8gACsDACACoyAAKwMQIAJEAAAAAAAACECioyIEIASgIAQgBKIiA6IgACsDCCACoyIFIASioaAiAiACoiIGIAVEAAAAAAAACECjIAOhIgMgAyADRAAAAAAAABBAoqKioCIDRAAAAAAAAAAAYwRAIAOanyACmhCnASECIAEgBiADoZ9EAAAAAAAA4D+iEL4HIgMgA6AiAyACRAAAAAAAAAhAoxBEojkDACABIAMgAkQYLURU+yEJQKBEGC1EVPshCUCgRAAAAAAAAAhAoxBEojkDCCADIAJEGC1EVPshCcCgRBgtRFT7IQnAoEQAAAAAAAAIQKMQRKIhAkEQDAELIAEgA58gAqFEAAAAAAAA4D+iIgUQvgcgApogBaEQvgegIgI5AwBBASADRAAAAAAAAAAAZA0BGiABIAJEAAAAAAAA4L+iIgI5AxBBCAsgAWogAjkDAEEDCyEHQQAhAANAIAAgB0YNAyABIABBA3RqIgggCCsDACAEoTkDACAAQQFqIQAMAAsACyABIASaIAKjOQMAC0EBIQcLIAcLegEDfyMAQRBrIgEkAAJAQeSSCygCACAATw0AQeCSCygCACAAQQR0ED0iA0UEQCABQYcqNgIIIAFBvwM2AgQgAUGPtwE2AgBB6PoGKAIAQc/0AyABEB0aQX8hAgwBC0HkkgsgADYCAEHgkgsgAzYCAAsgAUEQaiQAIAILkxwDCH8dfAF+IwBBgAJrIggkAEHIkgsoAgAhCQJ/AkAgA0HMkgsoAgBKBEAgCSADQShsED0iCUUNAUHMkgsgAzYCAEHIkgsgCTYCAAsgCUIANwMAQQEgAyADQQFMGyEKQQEhBgJAAkADQCAGIApGBEACQCAJIANBKGxqQShrIQdBASEGA0AgBiAKRgRAQQAhByADQQAgA0EAShshDCAFKwMIIRcgBSsDACEYIAQrAwghGSAEKwMAIRoDQCAHIAxGRQRAIAkgB0EobGoiBkQAAAAAAADwPyAGKwMAIg+hIhAgDyAPRAAAAAAAAAhAoiIPoqIiEiAXojkDICAGIBIgGKI5AxggBiAZIBAgDyAQoqIiD6I5AxAgBiAaIA+iOQMIIAdBAWohBwwBCwsgAiADQQR0aiIGQQhrIQogBkEQayELQQAhBkQAAAAAAAAAACEQRAAAAAAAAAAAIRIDQCAGIAxGRQRAIBMgCSAGQShsaiIHKwAYIg4gAiAGQQR0aiINKwAAIAsrAAAgBysDACIPIA+iRAAAAAAAAPA/IA+hIhNEAAAAAAAACECiIA+goiIVoiACKwAAIBMgE6IgD0QAAAAAAAAIQKIgE6CiIhOioKEiEaIgBysAICIPIA0rAAggAisACCAToiAVIAorAACioKEiHKKgoCETIBAgBysACCIVIBGiIAcrABAiESAcoqCgIRAgEiAVIA6iIBEgD6KgoCESIBQgDiAOoiAPIA+ioKAhFCAWIBUgFaIgESARoqCgIRYgBkEBaiEGDAELC0QAAAAAAAAAACEPRAAAAAAAAAAAIQ4gFiAUoiASIBKioSIVmSIRRI3ttaD3xrA+ZgRAIBYgE6IgECASmqKgIBWjIQ4gECAUoiASIBOioSAVoyEPCwJAIBFEje21oPfGsD5jIA9EAAAAAAAAAABlciAORAAAAAAAAAAAZXJFBEAgCisDACETIAsrAwAhFiACKwMIIRAgAisDACESDAELIAsrAAAiFiACKwAAIhKhIAorAAAiEyACKwAIIhChEE9EAAAAAAAACECjIg8hDgsgFyAOoiEcIBggDqIhHyAZIA+iISAgGiAPoiEhQQAhBkQAAAAAAAAQQCEPA0AgCCATOQN4IAggEyAcIA+iRAAAAAAAAAhAo6EiGTkDaCAIIBY5A3AgCCAWIB8gD6JEAAAAAAAACECjoSIaOQNgIAggEDkDSCAIIBAgICAPokQAAAAAAAAIQKOgIhQ5A1ggCCASOQNAIAggEiAhIA+iRAAAAAAAAAhAo6AiFTkDUCAGQQFxRQRAIAhBQGtBBBD4DSACIAMQ+A1E/Knx0k1iUL+gYw0ICyAURAAAAAAAABjAoiAQRAAAAAAAAAhAoiAZRAAAAAAAAAhAoiIOoKAhIiAURAAAAAAAAAhAoiAToCAOIBCgoSEjIBVEAAAAAAAAGMCiIBJEAAAAAAAACECiIBpEAAAAAAAACECiIg6goCEkIBVEAAAAAAAACECiIBagIA4gEqChISUgFCAQoUQAAAAAAAAIQKIhJiAVIBKhRAAAAAAAAAhAoiEnQQAhCgNAIAEgCkYEQEHAkgsoAgBBBGoQ9gdBAEgNCkHAkgsoAgAhB0HEkgsoAgAhAEEBIQYDQCAGQQRGDQkgACAHQQR0aiIBIAhBQGsgBkEEdGoiAisDADkDACABIAIrAwg5AwggBkEBaiEGIAdBAWohBwwACwALIAAgCkEFdGoiBisDGCIoIAYrAwgiF6EhEQJAAkACQAJAIAYrAxAiKSAGKwMAIhihIhtEAAAAAAAAAABhBEAgCCAkOQPwASAIICU5A/gBIAggJzkD6AEgCCASIBihOQPgASAIQeABaiIHIAhBwAFqEPMHIQYgEUQAAAAAAAAAAGEEQCAIICI5A/ABIAggIzkD+AEgCCAmOQPoASAIIBAgF6E5A+ABIAcgCEGgAWoQ8wchCSAGQQRGBEAgCUEERg0FQQAhByAJQQAgCUEAShshCUEAIQYDQCAGIAlGDQUgCEGgAWogBkEDdGorAwAiDkQAAAAAAAAAAGZFIA5EAAAAAAAA8D9lRXJFBEAgCEGAAWogB0EDdGogDjkDACAHQQFqIQcLIAZBAWohBgwACwALIAlBBEYNAkEAIQcgBkEAIAZBAEobIQsgCUEAIAlBAEobIQxBACEJA0AgCSALRg0EIAhBwAFqIAlBA3RqIQ1BACEGA0AgBiAMRkUEQCANKwMAIg4gCEGgAWogBkEDdGorAwBiIA5EAAAAAAAAAABmRXIgDkQAAAAAAADwP2VFckUEQCAIQYABaiAHQQN0aiAOOQMAIAdBAWohBwsgBkEBaiEGDAELCyAJQQFqIQkMAAsACyAGQQRGDQNBACEHIAZBACAGQQBKGyEJQQAhBgNAIAYgCUYNAwJAIAhBwAFqIAZBA3RqKwMAIg5EAAAAAAAAAABmRSAORAAAAAAAAPA/ZUVyDQAgDiAOIA4gI6IgIqCiICagoiAQoCAXoSARoyIbRAAAAAAAAAAAZkUgG0QAAAAAAADwP2VFcg0AIAhBgAFqIAdBA3RqIA45AwAgB0EBaiEHCyAGQQFqIQYMAAsACyAIIBEgG6MiDiAYoiAXoSAQIA4gEqKhIhGgOQPgASAIIBQgDiAVoqEiHSARoUQAAAAAAAAIQKI5A+gBIAggHUQAAAAAAAAYwKIgEUQAAAAAAAAIQKIgGSAOIBqioUQAAAAAAAAIQKIiHqCgOQPwASAIIB1EAAAAAAAACECiIBMgDiAWoqGgIB4gEaChOQP4ASAIQeABaiAIQcABahDzByIGQQRGDQJBACEHIAZBACAGQQBKGyEJQQAhBgNAIAYgCUYNAgJAIAhBwAFqIAZBA3RqKwMAIg5EAAAAAAAAAABmRSAORAAAAAAAAPA/ZUVyDQAgDiAOIA4gJaIgJKCiICegoiASoCAYoSAboyIRRAAAAAAAAAAAZkUgEUQAAAAAAADwP2VFcg0AIAhBgAFqIAdBA3RqIA45AwAgB0EBaiEHCyAGQQFqIQYMAAsAC0EAIQcgBkEAIAZBAEobIQlBACEGA0AgBiAJRg0BIAhBwAFqIAZBA3RqKwMAIg5EAAAAAAAAAABmRSAORAAAAAAAAPA/ZUVyRQRAIAhBgAFqIAdBA3RqIA45AwAgB0EBaiEHCyAGQQFqIQYMAAsACyAHQQRGDQBBACEGIAdBACAHQQBKGyEHA0AgBiAHRg0BAkAgCEGAAWogBkEDdGorAwAiDkSN7bWg98awPmMgDkTpCyHn/f/vP2RyDQAgDiAOIA6ioiIbIBaiRAAAAAAAAPA/IA6hIhEgDiAORAAAAAAAAAhAoiIOoqIiHSAaoiARIBEgEaKiIh4gEqIgFSARIA4gEaKiIg6ioKCgIhEgGKEiKiAqoiAbIBOiIB0gGaIgHiAQoiAUIA6ioKCgIg4gF6EiGyAboqBE/Knx0k1iUD9jDQAgESApoSIRIBGiIA4gKKEiDiAOoqBE/Knx0k1iUD9jRQ0DCyAGQQFqIQYMAAsACyAKQQFqIQoMAQsLIA9EexSuR+F6dD9jDQMgD0QAAAAAAADgP6JEAAAAAAAAAAAgD0R7FK5H4XqEP2QbIQ9BASEGDAALAAUgCSAGQShsaiILIAsrAwAgBysDAKM5AwAgBkEBaiEGDAELAAsACwUgCSAGQShsaiAPIAIgBkEEdGoiB0EQaysAACAHKwAAoSAHQQhrKwAAIAcrAAihEE+gIg85AwAgBkEBaiEGDAELCyADQQJHDQFBwJILKAIAQQRqEPYHQQBIDQJBwJILKAIAIQdBxJILKAIAIQBBASEGA0AgBkEERg0BIAAgB0EEdGoiASAIQUBrIAZBBHRqIgIrAwA5AwAgASACKwMIOQMIIAZBAWohBiAHQQFqIQcMAAsAC0HAkgsgBzYCAEEADAILIBMgHERVVVVVVVXVP6KhIRUgFiAfRFVVVVVVVdU/oqEhESAgRFVVVVVVVdU/oiAQoCEXICFEVVVVVVVV1T+iIBKgIRhBfyEHQQIgAyADQQJMG0EBayEJQciSCygCACEKRAAAAAAAAPC/IRRBASEGA0AgBiAJRkUEQCACIAZBBHRqIgsrAAAgCiAGQShsaisDACIPIA8gD6KiIhkgFqJEAAAAAAAA8D8gD6EiDiAPIA9EAAAAAAAACECiIg+ioiIaIBGiIA4gDiAOoqIiHCASoiAYIA4gDyAOoqIiD6KgoKChIAsrAAggGSAToiAaIBWiIBwgEKIgFyAPoqCgoKEQTyIPIBQgDyAUZCILGyEUIAYgByALGyEHIAZBAWohBgwBCwsgAiAHQQR0aiIGKwAAIhAgBkEQaysAAKEiDyAPoiAGKwAIIhIgBkEIaysAAKEiDiAOoqAiE0SN7bWg98awPmQEfCAOIBOfIhOjIQ4gDyATowUgDwsgAiAHQQFqIglBBHRqIgorAAAgEKEiFCAUoiAKKwAIIBKhIhIgEqKgIhBEje21oPfGsD5kBHwgEiAQnyIQoyESIBQgEKMFIBQLoCIPIA+iIA4gEqAiDiAOoqAiEESN7bWg98awPmQEQCAOIBCfIhCjIQ4gDyAQoyEPCyAIIA45A0ggCCAPOQNAIAggBCkDCDcDOCAEKQMAISsgCCAIKQNINwMoIAggKzcDMCAIIAgpA0A3AyAgACABIAIgCSAIQTBqIAhBIGoQ9QdBAEgNACAIIAgpA0g3AxggCCAIKQNANwMQIAggBSkDCDcDCCAIIAUpAwA3AwAgACABIAYgAyAHayAIQRBqIAgQ9QcMAQtBfwsgCEGAAmokAAs8AQF/IABB0JILKAIASwRAQcSSC0HEkgsoAgAgAEEEdBA9IgE2AgAgAUUEQEF/DwtB0JILIAA2AgALQQAL7wICA3wDfyMAQSBrIggkACACKAIEIgpBAE4EQCADKwAAIgUgBaIgAysACCIGIAaioCIHRI3ttaD3xrA+ZARAIAYgB58iB6MhBiAFIAejIQULIAIoAgAhAiADIAY5AwggAyAFOQMAIAMrABAiBSAFoiADKwAYIgYgBqKgIgdEje21oPfGsD5kBEAgBiAHnyIHoyEGIAUgB6MhBQsgAyAGOQMYIAMgBTkDEEHAkgtBADYCAAJ/QX9BBBD2B0EASA0AGkHAkgtBwJILKAIAIglBAWo2AgBBxJILKAIAIAlBBHRqIgkgAikDCDcDCCAJIAIpAwA3AwAgCCADKQMINwMYIAggAykDADcDECAIIANBEGopAwg3AwggCCADKQMQNwMAQX8gACABIAIgCiAIQRBqIAgQ9QdBf0YNABogBEHAkgsoAgA2AgQgBEHEkgsoAgA2AgBBAAsgCEEgaiQADwtB88YBQfa7AUHMAEGOlwEQAAAL2gIBBX8CQCABKAIQIgUoAugBDQBB1M4KKAIAIQYCQCACBEADQCAFKALIASAEQQJ0aigCACIHRQ0CIAcQ4A1FBEAgBiADQQJ0aiAHNgIAIAEoAhAhBSADQQFqIQMLIARBAWohBAwACwALA0AgBSgCwAEgBEECdGooAgAiB0UNASAHEOANRQRAIAYgA0ECdGogBzYCACABKAIQIQUgA0EBaiEDCyAEQQFqIQQMAAsACyADQQJIDQAgBiADQQJ0akEANgIAIAYgA0EEQQoQlAFBUEEwIAIbIQFBAkEDIAIbIQJBASEEA0AgBiAEQQJ0aiIFKAIAIgNFDQEgBUEEaygCACIFIAFBACAFKAIAQQNxIAJHG2ooAigiBSADIAFBACADKAIAQQNxIAJHG2ooAigiAxDaCA0BIAUgA0EAEP4FIgMoAhBBBDoAcCAAIAMQ9AUgBEEBaiEEDAALAAsLgQQBBH8CQCACKAIEIgIgA0HIAGwiB2oiBigCKCIIQQBMDQAgBigCLCIFQQBMDQAgBigCPCIAQQBKBEAgAiAHaiEBAkAgBigCQEEBRgRAIAIgBEHIAGxqIgYgBTYCKCABQX82AiwgBiAANgIsIAIgASgCKEHIAGxqIAM2AjAgAiAFQcgAbGogBDYCMAwBCyACIARByABsaiIFQX82AiwgBSABKAIsNgIoIAYgBigCKCIBNgIsIAYgADYCKCACIABByABsaiADNgIwIAIgAUHIAGxqIAM2AjAgBSgCKCEACyACIABByABsaiAENgIwIAIgA0HIAGxqQQA2AjwgAiAEQcgAbGpBADYCPA8LIAIgBEHIAGxqIgAgBTYCKCACIANByABsakF/NgIsIABBfzYCLCACIAVByABsaiAENgIwDwsCQCACIAhByABsaiIFKAIwIgdBAEwNACAFKAI0QQBMDQACQCACIAdByABsaigCBCIFQQBMDQAgBSABIABBEGoQtwQNACAGQX82AiggAiADQcgAbGpBfzYCLCACIARByABsaiIAQX82AiwgAiAAKAIoQcgAbGogBDYCNA8LIAIgBEHIAGxqQn83AyggAiADQcgAbGpBfzYCLCACIAYoAihByABsaiADNgIwDwsgAiAIQcgAbGoiACAENgI0IAAgAzYCMAtDAQJ8IAArAwgiAiABKwMIIgNESK+8mvLXej6gZARAQQEPCyADREivvJry13q+oCACZARAQQAPCyAAKwMAIAErAwBmC1UCAnwBfyABQQAgAUEAShshASAAtyIDIQIDQCABIARGRQRAIARBAWohBCACEMAHIQIMAQsLIAMgAqObIgKZRAAAAAAAAOBBYwRAIAKqDwtBgICAgHgLXgEBfyAAKwMIIAErAwhhBEACQCAAKwMQIAErAxBiDQAgACsDGCABKwMYYg0AIAAoAiAgASgCIEcNACAAKAIkIAEoAiRGIQILIAIPC0H5oQFB5LkBQakGQanvABAAAAvMTwMZfwp8AX4jAEHwAWsiCyQAIAAQsAJBCBAYIRhBqIsLLQAAQQFGBEAQ7AMhGQsgAEHevgEQIyECQaiSC0EANgIAAkAgAkUNACACLQAAIgpFDQADQAJAQaiSCwJ/AkACQAJAAkAgCkH/AXEiA0HtAGsOBwEFBQUFAgMAC0EIIANB4wBGDQMaIANB6QBHBEAgAw0FDAcLQRIMAwtBAQwCC0EEDAELQQILIARyIgQ2AgALIAJBAWoiAi0AACEKDAALAAsgAQRAQdbSBEEAECcLAn8jAEHQAmsiBSQAQQFBHBAYIhYgABA1Igk2AgQgFiAJQcgAEBgiATYCDET////////vfyEkRP///////+//ISAgABAaIQNE////////7/8hIkT////////vfyEjIAEhAgNAIAMEQCADKAIQIgQrAxAhHyAEKwNgISEgBCsDWCEdIAQrAxghHCAEKwNQIRsgAiACKAIAQQFyNgIAIAIgHCAbRAAAAAAAAOA/okQAAAAAAADwPxAkIhugIh45A0AgAiAcIBuhIhw5AzAgAiAfIB0gIaBE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Ai0AAEEEcUUEQANAAkAgAiIAKAIkKAIIIgJFDQAgAigCFCICRQ0AIAItAABBAXFFDQELC0EwEE0iCCAANgIoIAggACsDKDkDCCAAKAIAIQogACECA0ACQCACIgMgCkEEcjYCACACKAIkKAIAIgJFDQAgAigCGCICRQ0AIAIoAgAiCkEBcUUNAQsLIAggAysDODkDECAEIAggACsDMBCTDgsgAUEBaiEBDAELCyANIAQ2AhRBACEBQbTGCkHsyQooAgAQfyEEA0AgDSgCACABSgRAIA0oAgggAUHIAGxqIgItAABBAnFFBEADQAJAIAIiACgCJCgCDCICRQ0AIAIoAhQiAkUNACACLQAAQQFxRQ0BCwtBMBBNIgggADYCKCAIIAArAzA5AwggACgCACEKIAAhAgNAAkAgAiIDIApBAnI2AgAgAigCJCgCBCICRQ0AIAIoAhgiAkUNACACKAIAIgpBAXFFDQELCyAIIAMrA0A5AxAgBCAIIAArAygQkw4LIAFBAWohAQwBCwsgDSAENgIYQQAhAgNAIAIgF0cEQCAPIAJBA3RqIgAoAgQhCCAAKAIAIQNBACEEA0AgAyAERgRAIAJBAWohAgwDBSAIIARBOGxqIgYgDUEYQRQgBi0AABtqKAIAIAYQqAMiDigCHCIANgIoAkAgDigCICAARwRAIA4oAhghAQwBCwJAIAsgAEEBdEEBIAAbIgpB/////wNLBH9BxAAFIA4oAhggCkECdBA9IgENAUEwCxCjATYCsAEgBUG79AMgC0GwAWoQHRoQJgALIAEgDigCICIAQQJ0akEAIAogAGtBAnQQMxogDiAKNgIgIA4gATYCGCAOKAIcIQALIAEgAEECdGogBjYCACAOIABBAWo2AhwgBEEBaiEEDAELAAsACwsgDSgCFBCSDiANKAIYEJIOIA0oAhQQkQ4NACANKAIYEJEODQAgDSgCFCANEJAODQAgDSgCGCANEJAODQAgDSgCFBCODiANKAIYEI4OQQAhAkGokgstAABBBHEEQEHO8QQgBRCDARogC0KKgICAoAE3A6ABIAVBtqEEIAtBoAFqEB0aQfz4AyAFEIMBGgNAIA0oAgQgAkwEQEEAIQFE////////738hHUT////////v/yEgRP///////+//IR9E////////738hGwNAIAEgF0YEQAJAQeP4AyAF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BEAgASAIayAGIAgQjwEaCwUgACAEKAIANgIAIABBBGohACAEQQRqIQQMAQsLIAMgB0YNASAGIAMgByADaxCPARoMAQsgCUEMaiACIAAgAigCAGtBAnUgBGoQ8QQgBiACKAIAa0ECdSACQQhqELcGIgEoAggiACAEQQJ0aiEFA0AgACAFRwRAIAAgAygCADYCACADQQRqIQMgAEEEaiEADAELCyABIAA2AgggAigCACEFIAYhACABKAIEIQMDQCAAIAVHBEAgA0EEayIDIABBBGsiACgCADYCAAwBCwsgASADNgIEIAIoAgQiBCAGayEAIAEoAgghBSAEIAZHBEAgBSAGIAAQjwEaIAEoAgQhAwsgASAAIAVqNgIIIAIoAgAhACACIAM2AgAgASAANgIEIAIoAgQhACACIAEoAgg2AgQgASAANgIIIAIoAgghACACIAEoAgw2AgggASAANgIMIAEgASgCBDYCACABELYGCyAJQSBqJAAgAhCVCQtjAgJ/AXwgAigCBCIDKwMYIAIoAgAiBCsDGKEgAisDCKEhBSADKAIgIQMgBCgCICEEIAAoAgQgACgCAGsgASgCBCABKAIAa0kEQCADIAQgAiAFEOwEDwsgBCADIAIgBZoQ7AQL4gIBCX8gACgCACEFIAAoAgQhACMAQRBrIgMkACADQccANgIMAkAgACAFa0ECdSIGQQJIDQAgBkECa0EBdiEIA0AgCEEASA0BIAUgCEECdGohBAJAIAZBAkgNACAGQQJrQQF2IgkgBCAFayIAQQJ1SA0AIAUgAEEBdSIBQQFyIgJBAnRqIQAgBiABQQJqIgFKBEAgASACIAAoAgAgACgCBCADKAIMEQAAIgEbIQIgAEEEaiAAIAEbIQALIAAoAgAgBCgCACADKAIMEQAADQAgBCgCACEBA0ACQCAEIAAiBCgCADYCACACIAlKDQAgBSACQQF0IgdBAXIiAkECdGohACAGIAdBAmoiB0oEQCAHIAIgACgCACAAKAIEIAMoAgwRAAAiBxshAiAAQQRqIAAgBxshAAsgACgCACABIAMoAgwRAABFDQELCyAEIAE2AgALIAhBAWshCAwACwALIANBEGokAAtGAgF8An8gACgCBCEDIAAoAgAhAAN8IAAgA0YEfCABBSAAKAIAIgIrAwggAisDGKEgAisDEKIgAaAhASAAQQRqIQAMAQsLC2wCAX8CfCMAQRBrIgIkACACIAE2AgwgASAANgIgIAAgAkEMahC2ASAAIAIoAgwiASsDECIDIAArAxigIgQ5AxggACADIAErAwggASsDGKGiIAArAyCgIgM5AyAgACADIASjOQMQIAJBEGokAAu5AgEHfyMAQSBrIgYkACADIABrQRhtIQQCQCACQQJIDQAgAkECa0EBdiIKIARIDQAgACAEQQF0IghBAXIiBUEYbGohBCACIAhBAmoiCEoEQCAEQRhqIgcgBCAEIAcgASgCABEAACIHGyEEIAggBSAHGyEFCyAEIAMgASgCABEAAA0AIAYgAygCADYCCCAGIAMoAgQ2AgwgBiADKAIINgIQIANCADcCBCAGIAMrAxA5AxggBkEIakEEcgNAAkAgAyAEIgMQlgEgBSAKSg0AIAAgBUEBdCIHQQFyIgVBGGxqIQQgAiAHQQJqIgdKBEAgBEEYaiIJIAQgBCAJIAEoAgARAAAiCRshBCAHIAUgCRshBQsgBCAGQQhqIAEoAgARAABFDQELCyADIAZBCGoQlgEQxQELIAZBIGokAAvzAgEHfyMAQSBrIgQkAEEBIQcCQAJAAkACQAJAAkAgASAAa0EYbQ4GBQUAAQIDBAsgAUEYayIBIAAgAigCABEAAEUNBCAAIAEQrgEMBAsgACAAQRhqIAFBGGsgAhC2AgwDCyAAIABBGGogAEEwaiABQRhrIAIQtAYMAgsgACAAQRhqIABBMGogAEHIAGogAUEYayACEJoJDAELIAAgAEEYaiAAQTBqIgYgAhC2AiAAQcgAaiEFIARBCGpBBHIhCQNAIAUiAyABRg0BAkAgAyAGIAIoAgARAAAEQCAEIAMoAgA2AgggBCADKAIENgIMIAQgAygCCDYCECADQgA3AgQgBCADKwMQOQMYA0ACQCAFIAYiBRCWASAAIAVGDQAgBEEIaiAFQRhrIgYgAigCABEAAA0BCwsgBSAEQQhqEJYBIAkQxQEgCEEBaiIIQQhGDQELIANBGGohBSADIQYMAQsLIANBGGogAUYhBwsgBEEgaiQAIAcLagAgACABIAIgAyAFELQGAkAgBCADIAUoAgARAABFDQAgAyAEEK4BIAMgAiAFKAIAEQAARQ0AIAIgAxCuASACIAEgBSgCABEAAEUNACABIAIQrgEgASAAIAUoAgARAABFDQAgACABEK4BCwv6AwIGfwh8IwBBoAFrIgYkACACIANBAnRqIggoAgAoAhAiAisAQCABKAIQIgErABggAisAOCABKwAQoCEPIAIrABggACgCECIAKwAYoCESIAIrABAgACsAEKAhECAEQQJPBEAgACsDUCIRRAAAAAAAAOA/oiEMIBEgBEEBa7ijIRELoCETIBIgDKEhDCAPIA+gIBCgRAAAAAAAAAhAoyENIBAgEKAgD6BEAAAAAAAACECjIQ4gBkGYAWohAiAGQZABaiEJIAZBOGohACAGQTBqIQogBUF3cUECRyELQQAhAwNAIAMgBEZFBEAgCCADQQJ0aigCACEHIAYgEjkDCCAGIBA5AwACfyALRQRAIAYgDDkDKCAGIA05AyAgBiAMOQMYIAYgDjkDEEEEIQEgACEFIAoMAQsgBiATOQOIASAGIA85A4ABIAYgDDkDeCAGIA05A3AgBiAMOQNoIAYgDTkDYCAGIAw5A1ggBiANOQNQIAYgDDkDSCAGIA45A0AgBiAMOQM4IAYgDjkDMCAGIAw5AyggBiAOOQMgIAYgEjkDGCAGIBA5AxBBCiEBIAIhBSAJCyAPOQMAIAUgEzkDACAHIAdBUEEAIAcoAgBBA3FBAkcbaigCKCAGIAFBuPUHEJ0BIANBAWohAyARIAygIQwMAQsLIAZBoAFqJAALtRABCX8jAEEQayINJAADQCABQcgAayEJIAFBMGshCCABQRhrIQsCQANAAkACQAJAAkACQCABIABrIgZBGG0iBw4GBgYAAQIDBAsgAUEYayIBIAAgAigCABEAAEUNBSAAIAEQrgEMBQsgACAAQRhqIAFBGGsgAhC2AgwECyAAIABBGGogAEEwaiABQRhrIAIQtAYMAwsgACAAQRhqIABBMGogAEHIAGogAUEYayACEJoJDAILIAZBvwRMBEAgBEEBcQRAIAIhByMAQSBrIgUkAAJAIAAiBCABIgNGDQAgBUEIakEEciEGA0AgACIBQRhqIgAgA0YNASAAIAEgBygCABEAAEUNACAFIAEoAhg2AgggBSABKAIcNgIMIAUgASgCIDYCECABQgA3AhwgBSABKwMoOQMYIAAhAgNAAkAgAiABIgIQlgEgASAERg0AIAVBCGogAUEYayIBIAcoAgARAAANAQsLIAIgBUEIahCWASAGEMUBDAALAAsgBUEgaiQADAMLIAIhBCMAQSBrIgUkAAJAIAEiAyAARg0AIAVBCGpBBHIhBgNAIAAiAUEYaiIAIANGDQEgACABIAQoAgARAABFDQAgBSABKAIYNgIIIAUgASgCHDYCDCAFIAEoAiA2AhAgAUIANwIcIAUgASsDKDkDGCAAIQIDQCACIAEQlgEgBUEIaiIHIAEiAkEYayIBIAQoAgARAAANAAsgAiAHEJYBIAYQxQEMAAsACyAFQSBqJAAMAgsgA0UEQCAAIAFHBH8gACABRgR/IAEFIAEgAGsiA0EYbSEEAkAgA0EZSA0AIARBAmtBAXYhAwNAIANBAEgNASAAIAIgBCAAIANBGGxqEJgJIANBAWshAwwACwALIAEgAGtBGG0hBCABIQMDQCABIANHBEAgAyAAIAIoAgARAAAEQCADIAAQrgEgACACIAQgABCYCQsgA0EYaiEDDAELCyABIABrQRhtIQMDQCADQQFKBEAgASEEQQAhBiMAQSBrIgwkACADQQJOBEAgDCAAKAIANgIIIAwgACgCBDYCDCAMIAAoAgg2AhAgAEIANwIEIAwgACsDEDkDGCAMQQhqIgtBBHIgACEBIANBAmtBAm0hCgNAIAZBAXQiCEEBciEHIAEgBkEYbGoiBkEYaiEFIAMgCEECaiIITAR/IAcFIAZBMGoiBiAFIAUgBiACKAIAEQAAIgYbIQUgCCAHIAYbCyEGIAEgBRCWASAFIQEgBiAKTA0ACwJAIARBGGsiByABRgRAIAEgCxCWAQwBCyABIAcQlgEgByAMQQhqEJYBIAFBGGoiASEKIwBBIGsiCyQAAkAgASAAIgdrQRhtIgFBAkgNACAAIAFBAmtBAXYiCEEYbGoiASAKQRhrIgYgAigCABEAAEUNACALIAYoAgA2AgggCyAKQRRrIgUoAgA2AgwgCyAKQRBrKAIANgIQIAVCADcCACALIApBCGsrAwA5AxggC0EIakEEcgNAAkAgBiABIgYQlgEgCEUNACAHIAhBAWtBAXYiCEEYbGoiASALQQhqIAIoAgARAAANAQsLIAYgC0EIahCWARDFAQsgC0EgaiQACxDFAQsgDEEgaiQAIANBAWshAyAEQRhrIQEMAQsLQQALBSABCxoMAgsgACAHQQF2QRhsIgVqIQoCQCAGQYEYTwRAIAAgCiALIAIQtgIgAEEYaiIHIApBGGsiBiAIIAIQtgIgAEEwaiAFIAdqIgcgCSACELYCIAYgCiAHIAIQtgIgACAKEK4BDAELIAogACALIAIQtgILIANBAWshAwJAIARBAXEiCg0AIABBGGsgACACKAIAEQAADQBBACEEIwBBIGsiBSQAIAUgACgCADYCCCAFIAAoAgQ2AgwgBSAAKAIINgIQIABCADcCBCAFIAArAxA5AxgCQCAFQQhqIAEiBkEYayACKAIAEQAABEAgACEHA0AgBUEIaiAHQRhqIgcgAigCABEAAEUNAAsMAQsgACEHA0AgB0EYaiIHIAZPDQEgBUEIaiAHIAIoAgARAABFDQALCyAGIAdLBEADQCAFQQhqIAZBGGsiBiACKAIAEQAADQALCwNAIAYgB0sEQCAHIAYQrgEDQCAFQQhqIAdBGGoiByACKAIAEQAARQ0ACwNAIAVBCGogBkEYayIGIAIoAgARAAANAAsMAQsLIAAgB0EYayIGRwRAIAAgBhCWAQsgBiAFQQhqIgAQlgEgAEEEchDFASAFQSBqJAAgByEADAELCyABIQYjAEEgayIJJAAgCSAAKAIANgIIIAkgACgCBDYCDCAJIAAoAgg2AhAgAEIANwIEIAkgACsDEDkDGCAAIQcDQCAHIgVBGGoiByAJQQhqIAIoAgARAAANAAsCQCAAIAVGBEADQCAGIAdNDQIgBkEYayIGIAlBCGogAigCABEAAEUNAAwCCwALA0AgBkEYayIGIAlBCGogAigCABEAAEUNAAsLIAYhBSAHIQgDQCAFIAhLBEAgCCAFEK4BA0AgCEEYaiIIIAlBCGogAigCABEAAA0ACwNAIAVBGGsiBSAJQQhqIAIoAgARAABFDQALDAELCyAAIAhBGGsiCEcEQCAAIAgQlgELIAggCUEIaiIFEJYBIA0gBiAHTToADCANIAg2AgggBUEEchDFASAJQSBqJAAgDSgCCCEGAkAgDS0ADEEBRw0AIAAgBiACEJkJIQUgBkEYaiIHIAEgAhCZCQRAIAYhASAFRQ0DDAILIAVFDQAgByEADAILIAAgBiACIAMgChCcCSAGQRhqIQBBACEEDAELCyANQRBqJAALDQAgAEH8+Qc2AgAgAAt4AgJ/AnwCQCAAKAIEIgNFBEAgAEEEaiIAIQIMAQsgAigCACIEKwMIIQUDQCAFIAMiACgCECICKwMIIgZjRSACIARNIAUgBmRycUUEQCAAIQIgACgCACIDDQEMAgsgACgCBCIDDQALIABBBGohAgsgASAANgIAIAILdQEDfyAAIAAoAgQiAzYCCCADBEACQCADKAIIIgFFBEBBACEBDAELAkAgAyABKAIAIgJGBEAgAUEANgIAIAEoAgQiAg0BDAILIAFBADYCBCACRQ0BCwNAIAIiASgCACICDQAgASgCBCICDQALCyAAIAE2AgQLC58GAQZ/An8CQCABIgMoAgAiBQRAIAMoAgRFDQEgAxCXASIDKAIAIgUNAQsgAygCBCIFDQAgAygCCCEEQQAhBUEBDAELIAUgAygCCCIENgIIQQALIQYCQCADIAQoAgAiAkYEQCAEIAU2AgAgACADRgRAQQAhAiAFIQAMAgsgBCgCBCECDAELIAQgBTYCBAsgAy0ADCEHIAEgA0cEQCADIAEoAggiBDYCCCAEIAQoAgAgAUdBAnRqIAM2AgAgAyABKAIAIgQ2AgAgBCADNgIIIAMgASgCBCIENgIEIAQEQCAEIAM2AggLIAMgAS0ADDoADCADIAAgACABRhshAAsgAEUgB0EBcUVyRQRAIAYEQANAIAItAAwhAwJAIAIgAigCCCIBKAIARwRAIANBAXFFBEAgAkEBOgAMIAFBADoADCABEIQEIAIgACAAIAIoAgAiAUYbIQAgASgCBCECCwJAAkACQAJAIAIoAgAiAQRAIAEtAAxBAUcNAQsgAigCBCIDBEAgAy0ADEEBRw0CCyACQQA6AAwgACACKAIIIgJHBEAgAi0ADA0GCyACQQE6AAwPCyACKAIEIgNFDQELIAMtAAxBAUcNAQsgAUEBOgAMIAJBADoADCACEIMEIAIoAggiAigCBCEDCyACIAIoAggiAC0ADDoADCAAQQE6AAwgA0EBOgAMIAAQhAQPCyADQQFxRQRAIAJBAToADCABQQA6AAwgARCDBCACIAAgACACKAIEIgFGGyEAIAEoAgAhAgsCQAJAAkACQCACKAIAIgMEQCADLQAMIgFBAUcNAQsCQCACKAIEIgEEQCABLQAMQQFHDQELIAJBADoADCACKAIIIgItAAxBAUYgACACR3ENBSACQQE6AAwPCyADRQ0CIAMtAAxBAXENAQwDCyABRQ0CCyACKAIEIQELIAFBAToADCACQQA6AAwgAhCEBCACKAIIIgIoAgAhAwsgAiACKAIIIgAtAAw6AAwgAEEBOgAMIANBAToADCAAEIMEDwsgAigCCCIBIAEoAgAgAkZBAnRqKAIAIQIMAAsACyAFQQE6AAwLCxsBAX8gACgCACEBIABBADYCACABBEAgARAXCwtDAQJ/IAAoAgQhAgNAIAIgACgCCCIBRwRAIAAgAUEYazYCCCABQRRrEMUBDAELCyAAKAIAIgEEQCAAKAIMGiABEBcLC80CAQR/IAAoAgQhAyAAKAIAIQUgASgCBCEEIwBBIGsiAiQAIAIgBDYCHCACIAQ2AhggAkEAOgAUIAIgAEEIajYCCCACIAJBHGo2AhAgAiACQRhqNgIMA0AgAyAFRwRAIARBGGsiBCADQRhrIgMoAgA2AgAgBCADKAIENgIEIAQgAygCCDYCCCADQgA3AgQgBCADKwMQOQMQIAIgAigCHEEYayIENgIcDAELCyACQQE6ABQgAi0AFEUEQCACKAIIGiACKAIQKAIAIQMgAigCDCgCACEFA0AgAyAFRwRAIANBBGoQxQEgA0EYaiEDDAELCwsgAkEgaiQAIAEgBDYCBCAAKAIAIQIgACAENgIAIAEgAjYCBCAAKAIEIQIgACABKAIINgIEIAEgAjYCCCAAKAIIIQIgACABKAIMNgIIIAEgAjYCDCABIAEoAgQ2AgALXQEBfyAAIAM2AhAgAEEANgIMIAEEQCABQavVqtUATwRAELgGAAsgAUEYbBCCASEECyAAIAQ2AgAgACAEIAJBGGxqIgI2AgggACAEIAFBGGxqNgIMIAAgAjYCBCAAC6MBAgF/AXxBwAAQggEiBEIANwIEIARB/PkHNgIAIAEoAgAhASADKwMAIQUgBEIANwIsIAQgBTkDGCAEIAI2AhQgBCABNgIQIARCADcCOCAEIARBLGo2AiggBCAEQThqNgI0IARCADcDICACKwMIIAIrAwChRKVcw/EpYz1IY0UEQEG7iwNBztgAQTdB0J8BEAAACyAAIAQ2AgQgACAEQRBqNgIAC2sBA38jAEEQayICJAAgAiAANgIMIAIoAgwiASgCAARAIAEoAgAhAyABKAIEIQADQCAAIANHBEAgAEEUaxDFASAAQRhrIQAMAQsLIAEgAzYCBCACKAIMIgAoAgAgACgCCBoQFwsgAkEQaiQAC8wCAQV/IwBBEGsiAiQAAkAgACABRg0AIAFBBGohBSABKAIAIQECQCAAKAIIRQ0AIAIgADYCBCAAKAIAIQMgACAAQQRqNgIAIAAoAgRBADYCCCAAQgA3AgQgAiADKAIEIgQgAyAEGzYCCCACQQRqEJ8JA0AgAigCDCIDRSABIAVGckUEQCADIAEoAhA2AhAgACACIANBEGoQngkhBCAAIAIoAgAgBCADEO0EIAJBBGoQnwkgARCXASEBDAELCyADEIUEIAIoAggiA0UNAANAIAMiBCgCCCIDDQALIAQQhQQLIABBBGohBANAIAEgBUYNAUEUEIIBIQMgAiAENgIIIAMgASgCEDYCECACQQE6AAwgACACIANBEGoQngkhBiAAIAIoAgAgBiADEO0EIAJBADYCBCACQQRqEKEJIAEQlwEhAQwACwALIAJBEGokAAt6AQZ8IAErAxAiAiABKwMYIgQgAqFEAAAAAAAA4D+ioCEFIAArAxAiAyAAKwMYIgYgA6FEAAAAAAAA4D+ioCEHIAIgBmNFIAUgB2ZFckUEQCAGIAKhDwsgBCADoUQAAAAAAAAAACAFIAdlG0QAAAAAAAAAACADIARjGwuaAgEBfwJAIAENACAAQTBBACAAKAIAQQNxIgFBA0cbaigCKCICIABBUEEAIAFBAkcbaigCKCIBRgRAQQQhASAAKAIQIgItACwNAUEEQQggAi0AVBshAQwBC0ECQQEgAigCECgC9AEgASgCECgC9AFGGyEBC0EQIQICQAJAAkAgAUEBaw4CAAECC0EQQSAgAEEwQQAgACgCAEEDcSICQQNHG2ooAigoAhAoAvQBIABBUEEAIAJBAkcbaigCKCgCECgC9AFIGyECDAELQRBBICAAQTBBACAAKAIAQQNxIgJBA0cbaigCKCgCECgC+AEgAEFQQQAgAkECRxtqKAIoKAIQKAL4AUgbIQILIAAoAhAgAkGAAXIgAXI2AqQBC0EBAX8jAEEQayICJAAgAkHBADYCDCAAIAEgAkEMakE+IAEgAGtBGG1nQQF0a0EAIAAgAUcbQQEQnAkgAkEQaiQAC2MBAn8jAEEgayICJAACQCABIAAoAgggACgCACIDa0EYbUsEQCABQavVqtUATw0BIAAgAkEMaiABIAAoAgQgA2tBGG0gAEEIahCkCSIAEKMJIAAQogkLIAJBIGokAA8LEIYEAAsaACAAQYCAgIAETwRAELgGAAsgAEECdBCCAQuRAQEDfyABKAIEIQIgACgCACEEIAAoAgQhAwNAIAMgBEZFBEAgAkEEayICIANBBGsiAygCADYCAAwBCwsgASACNgIEIAAoAgAhAyAAIAI2AgAgASADNgIEIAAoAgQhAiAAIAEoAgg2AgQgASACNgIIIAAoAgghAiAAIAEoAgw2AgggASACNgIMIAEgASgCBDYCAAt0AQR8AkAgASsDACEFIAIrAwAhBiADKwMAIQcgACAEKwMAIgg5AxggACAHOQMQIAAgBjkDCCAAIAU5AwACQCAFIAZlBEAgByAIZUUNAQwCC0GaygFBztgAQSVBuZoBEAAAC0GfxQFBztgAQSZBuZoBEAAACwsJACAAIAE5AwgLJgAgAEUEQEHqNEHx2ABB0ABB0NcBEAAACyAAIAAoAgAoAgwRAQALDwAgACAAKAIAKAIAEQEACx0AIAAEQCAAQTRqEOwBGiAAQShqEOwBGgsgABAXC5UEAQV/IAACfyAAKAIEIgUgACgCCEkEQCAAKAIEIgYgASACIAMgBBCuCSAAIAZBIGo2AgQgBUEgagwBCyMAQSBrIgkkACAAKAIEIAAoAgBrQQV1QQFqIgVBgICAwABPBEAQhgQAC0H///8/IAAoAgggACgCAGsiBkEEdSIHIAUgBSAHSRsgBkHg////B08bIQYgACgCBCAAKAIAa0EFdSEIQQAhByAJQQxqIgUgAEEIajYCECAFQQA2AgwgBgRAIAZBgICAwABPBEAQuAYACyAGQQV0EIIBIQcLIAUgBzYCACAFIAcgCEEFdGoiCDYCCCAFIAcgBkEFdGo2AgwgBSAINgIEIAUoAgggASACIAMgBBCuCSAFIAUoAghBIGo2AgggBSgCBCEEIAAoAgAhASAAKAIEIQMDQCABIANHBEAgBEEgayIEIANBIGsiAykDADcDACAEIAMpAxg3AxggBCADKQMQNwMQIAQgAykDCDcDCAwBCwsgBSAENgIEIAAoAgAhASAAIAQ2AgAgBSABNgIEIAAoAgQhASAAIAUoAgg2AgQgBSABNgIIIAAoAgghASAAIAUoAgw2AgggBSABNgIMIAUgBSgCBDYCACAAKAIEIAUoAgQhAiAFKAIIIQADQCAAIAJHBEAgBSAAQSBrIgA2AggMAQsLIAUoAgAiAARAIAUoAgwaIAAQFwsgCUEgaiQACzYCBAv7AwEEf0EwEIIBIgVBvPoHNgIAIwBBEGsiByQAIAVBBGoiBiAANgIQIAYgATYCDCAGQgA3AgQgBiAGQQRqNgIAQdTtCkEANgIAA38gACAETAR/IAdBEGokACAGBSAHQcgAEIIBIAEgBEECdGooAgAQswY2AgwgBEEBaiEEIAdBBGogBiAHQQxqELoDIAYoAhAhAAwBCwsaIAUgAjYCHCAFIAM2AhggBUEANgIsIAVCADcCJCAFQaT6BzYCAAJAIAMgAkECdGoiASADa0ECdSIGIAVBJGoiACgCCCAAKAIAIgJrQQJ1TQRAIAYgACgCBCIEIAJrIgdBAnVLBEAgAiAERwRAIAIgAyAHEI8BGiAAKAIEIQQLIAEgAyAHaiICayEDIAEgAkcEQCAEIAIgAxCPARoLIAAgAyAEajYCBAwCCyABIANrIQQgASADRwRAIAIgAyAEEI8BGgsgACACIARqNgIEDAELIAAQigkgACAGEPEEIgJBgICAgARPBEAQhgQACyAAIAIQrAkiBDYCBCAAIAQ2AgAgACAEIAJBAnRqNgIIIAEgA2shAiAAKAIEIQQgASADRwRAIAQgAyACEI8BGgsgACACIARqNgIECyAFKAIoIQAgBSgCJCEBA38gACABRgR/IAUFIAEoAgBBADoAHCABQQRqIQEMAQsLCycAIAAgACgCGEUgACgCECABcnIiATYCECAAKAIUIAFxBEAQjgEACwtGAgJ/AXwgABAaIQEDQCABBEAgASgCECICKALgAQRAIAIrA4ACIQMgAiACKwNgOQOAAiACIAM5A2ALIAAgARAbIQEMAQsLCzEBA38gACgCBCIEIAFBBGoiAmshAyACIARHBEAgASACIAMQjwEaCyAAIAEgA2o2AgQLfgEDfyAAKAIAIgFBNGogASgCOCEDIAEoAjQhAQNAAkAgASADRg0AIAEoAgAgAEYNACABQQRqIQEMAQsLIAEQtwkgACgCBCIBQShqIAEoAiwhAyABKAIoIQEDQAJAIAEgA0YNACABKAIAIABGDQAgAUEEaiEBDAELCyABELcJC4J4AiV/DHwjAEGAAWsiHSQAIB1BGGogAkHYABAgGiAGQQA2AgACQCABRSAAQQBMcg0AIAEoAgQiIkEATA0AAn8CQCABQQAQuQIEQCABKAIQQQFGDQELIAEQ0AkMAQsgARDBBgshFwJAAkAgAigCUCINQQNHBEAgBEEATA0CIA1BBEYNAQwCCyAEQQBMDQELIBcoAgAgAGxBCBAYIRAgFygCGCERIBcoAhQhIiAXKAIAQQQQGCEZIBcoAgAiDUEAIA1BAEobIQwDQCAHIAxGBEAgBEEAIARBAEobIRJBACEHA0AgByASRgRAQQAhBwNAIAcgDEcEQCAZIAdBAnRqIgQoAgBBAEoEQCAEIAk2AgAgCUEBaiEJCyAHQQFqIQcMAQsLA0ACQCAKIAxHBEAgGSAKQQJ0IgRqKAIAQQBIDQEgBCAiaiIEKAIAIg0gBCgCBCIEIAQgDUgbIQQDQCAEIA1GDQICQCAZIBEgDUECdGooAgBBAnQiB2ooAgBBAE4EQCAIQQFqIQgMAQsgByAiaiILKAIAIgcgCygCBCILIAcgC0obIQsDQCAHIAtGDQEgCiARIAdBAnRqKAIAIg5HBEAgCCAZIA5BAnRqKAIAQX9zQR92aiEICyAHQQFqIQcMAAsACyANQQFqIQ0MAAsAC0EAIQtBACENIAhBAEoEQCAIQQQQGCELIAhBBBAYIQ0gFygCACIEQQAgBEEAShshDAtBACEIQQAhCgNAAkAgCiAMRwRAIBkgCkECdCIHaigCACIEQQBIDQEgByAiaiIHKAIAIg4gBygCBCIHIAcgDkgbIRMDQCAOIBNGDQICQCAZIBEgDkECdGooAgBBAnQiB2ooAgAiD0EATgRAIAsgCEECdCIHaiAENgIAIAcgDWogDzYCACAIQQFqIQgMAQsgByAiaiIPKAIAIgcgDygCBCIPIAcgD0obIQ8DQCAHIA9GDQECQCARIAdBAnRqKAIAIhUgCkYNACAZIBVBAnRqKAIAIhVBAEgNACALIAhBAnQiFmogBDYCACANIBZqIBU2AgAgCEEBaiEICyAHQQFqIQcMAAsACyAOQQFqIQ4MAAsAC0EAIQcgCCAJIAkgCyANQQBBCEEIEMEDIQkgCxAXIA0QFyAZEBcgACAJIAIgEEEAQQAgBhC5CSAGKAIARQRAIBcoAgBBBBAYIQYgFygCACINQQAgDUEAShshBANAIAQgB0YEQEEAIQdBACEMA0AgByASRgRAQQAhCEEAIQcDQCAEIAdGBEBBACENA0AgBCAIRwRAAkAgBiAIQQJ0aigCACIHQQBIDQAgAyAAIAhsQQN0aiEMIBAgACAHbEEDdGohGUEAIQcDQCAAIAdGDQEgDCAHQQN0IgtqIAsgGWorAwA5AwAgB0EBaiEHDAALAAsgCEEBaiEIDAELCwNAAkAgDSASRwRAIAUgDUECdGooAgAiB0ECdCIMIBcoAhRqIgQoAgQiCCAEKAIAIgRrIhlBAUoEQCAGIAxqKAIAQQBIBEAgGbchLCADIAAgB2xBA3RqIQxBACEHA0AgACAHRgRAIAQgCCAEIAhKGyEIA0BBACEHIAQgCEcEQANAIAAgB0cEQCAMIAdBA3QiGWoiCyADIBcoAhggBEECdGooAgAgAGxBA3RqIBlqKwMAIAsrAwCgOQMAIAdBAWohBwwBCwsgBEEBaiEEDAELCwNAIAAgB0YNBiAMIAdBA3RqIgQgBCsDACAsozkDACAHQQFqIQcMAAsABSAMIAdBA3RqQgA3AwAgB0EBaiEHDAELAAsAC0H1lgNBxroBQecHQaguEAAAC0GF6AJBxroBQeYHQaguEAAACyAGEBcgAigCNBogAisDQBogAigCUBogAi0AOBoQxAkgCRBkIBAQFyABIBdGDRIgFxBkDBILIA1BAWohDQwACwAFIAYgB0ECdGoiDSgCAEEATgRAIA0gDDYCACAMQQFqIQwLIAdBAWohBwwBCwALAAsgBSAHQQJ0aigCACIIQQBIIAggDU5yRQRAIAYgCEECdGpBfzYCAAsgB0EBaiEHDAALAAUgBiAHQQJ0akEBNgIAIAdBAWohBwwBCwALAAtBmp0DQca6AUHiCEHsgAEQAAALIApBAWohCgwACwALIApBAWohCgwACwAFIBkgBSAHQQJ0aigCAEECdGpBfzYCACAHQQFqIQcMAQsACwAFIBkgB0ECdGpBATYCACAHQQFqIQcMAQsACwALIAMhDSACKAIQIQQCfyAXQQAQuQIEQCAXIBcoAhBBAUYNARoLIBcQ0AkLIgUQwgkgBBDBCSEEIAUgF0cEQCAEQQE6ABwLIAQDQCAEIgkoAhQiBA0ACyAJKAIYBEAgCSgCBCAAbEEIEBghDQtBfyAXKAIAIgUgBUEASBtBAWohBCAXKAIYIREgFygCFCEKIAVBAWpBBBAYIQsDQCAEIAdHBEAgCyAHQQJ0akEANgIAIAdBAWohBwwBCwsgBUEAIAVBAEobIRADQCAMIBBHBEAgCiAMQQJ0aigCACIHIAogDEEBaiIEQQJ0aigCACIIIAcgCEobIRJBACEIA0AgByASRwRAIAggDCARIAdBAnRqKAIAR2ohCCAHQQFqIQcMAQsLIAsgCEECdGoiByAHKAIAQQFqIgc2AgAgDiAHIAcgDkgbIQ4gBCEMDAELC0QAAAAAAADwv0TNzMzMzMz8vyALKAIEtyIsIA64RJqZmZmZmek/omRFIAW3RDMzMzMzM9M/oiAsY0VyGyEsIAsQFyACKwMAROJt72SBAPC/YQRAIAIgLDkDAAtB6PoGKAIAISkCQANAAkACQAJAAkACQAJAAkAgAigCPA4EAAEDAgELIAIrAyAhLyACKAIYIRMgAisDCCEtIAIrAwAhLCAJKAIIIQ4gAi0ALCEEQc0TQSBBASApEEoaIA5FIBNBAExyDQUgDigCBCIRQQBMDQUgDigCACAAIBFsIg9BCBAYIRAgBkEANgIAIBFHBEAgBkGcfzYCAEEAIQwMBQsgDigCIEUEQCAOQQEQjAMiEigCGCEYIBIoAhQhFQJAIAItACxBAXFFDQAgAigCKBC3BUEAIQcDQCAHIA9GDQEgDSAHQQN0ahDAAzkDACAHQQFqIQcMAAsACyAtRAAAAAAAAAAAYwRAIAIgEiAAIA0Q9AQiLTkDCAsgBEECcSEeICxEAAAAAAAAAABmBEAgAkKAgICAgICA+L9/NwMARAAAAAAAAPC/ISwLRJqZmZmZmck/RAAAAAAAAABAICyhRAAAAAAAAAhAoxCpAZogLaMhMEEAIRZEAAAAAAAAAAAhLiAAQQgQGCEMIC1EAAAAAAAA8D8gLKEiMRCpASEyA0BBACEHA0ACQEEAIQQgByAPRgRAQQAhCwNAQQAhByALIBFGDQIDQCAAIAdGBEAgDSAAIAtsQQN0IghqIRRBACEKA0AgCiARRgRAAkAgCCAQaiEFQQAhBwNAIAAgB0YNASAFIAdBA3QiCGoiCiAIIAxqKwMAIAorAwCgOQMAIAdBAWohBwwACwALBQJAIAogC0YNACANIAAgCmxBA3RqIRxBACEHIA0gACALIAoQmQIgMRCpASEsA0AgACAHRg0BIAwgB0EDdCIFaiIgICArAwAgMiAFIBRqKwMAIAUgHGorAwChoiAso6A5AwAgB0EBaiEHDAALAAsgCkEBaiEKDAELCyALQQFqIQsMAgUgDCAHQQN0akIANwMAIAdBAWohBwwBCwALAAsABSAQIAdBA3RqQgA3AwAgB0EBaiEHDAILAAsLA0ACQEEAIQcgBCARRgRARAAAAAAAAAAAISwMAQsDQCAAIAdHBEAgDCAHQQN0akIANwMAIAdBAWohBwwBCwsgDSAAIARsQQN0IgtqIRQgFSAEQQFqIgVBAnRqIRwgFSAEQQJ0aigCACEKA0AgHCgCACAKTARAIAsgEGohBEEAIQcDQCAAIAdGBEAgBSEEDAUFIAQgB0EDdCIIaiILIAggDGorAwAgCysDAKA5AwAgB0EBaiEHDAELAAsABQJAIBggCkECdGoiICgCACIIIARGDQBBACEHIA0gACAEIAgQxgEhLANAIAAgB0YNASAMIAdBA3QiCGoiIyAwIAggFGorAwAgDSAgKAIAIABsQQN0aiAIaisDAKGiICyiICMrAwCgOQMAIAdBAWohBwwACwALIApBAWohCgwBCwALAAsLA0ACQCAHIBFHBEAgECAAIAdsQQN0IgVqIQtBACEIQQAhBANAIAAgBEYEQEQAAAAAAAAAACEtA0AgACAIRwRAIAwgCEEDdGorAwAiMyAzoiAtoCEtIAhBAWohCAwBCwtBACEIAkAgLZ8iLUQAAAAAAAAAAGRFDQADQCAAIAhGDQEgDCAIQQN0aiIEIAQrAwAgLaM5AwAgCEEBaiEIDAALAAsgLCAtoCEsIAUgDWohBEEAIQgDQCAAIAhGDQQgBCAIQQN0IgVqIgsgLyAFIAxqKwMAoiALKwMAoDkDACAIQQFqIQgMAAsABSAMIARBA3QiCmogCiALaisDADkDACAEQQFqIQQMAQsACwALAkAgHkUgLCAuZnJFBEAgLkRmZmZmZmbuP6IgLGMNASAvRK5H4XoUru8/okTNzMzMzMzsP6MhLwwBCyAvRM3MzMzMzOw/oiEvCyAvRPyp8dJNYlA/ZARAICwhLiAWQQFqIhYgE0gNAwsgAi0ALEEEcQRAIAAgEiANEPMECyAOIBJGDQggEhBkDAgLIAdBAWohBwwACwALAAtB+ssBQca6AUGlA0HNExAAAAsgCSgCCCEHDAILIAkoAggiBygCAEGRzgBIDQFBgIsLLQAARQ0AIB1BkM4ANgIQIClBvJ0BIB1BEGoQHRoLIAkoAgghC0EAIQhBACERRAAAAAAAAAAAIS4jAEGAAmsiDCQAAkAgC0UNACACKAIYIhVBAEwgAEEATHINACALKAIEIgpBAEwNACACLQAsIQUgAisDICEtIAIrAwghLyACKwMAITAgAigCFCEEIAsoAgAhByAMQShqQQBBuAEQMxogDCAENgIoIAZBADYCAAJAIAcgCkcEQCAGQZx/NgIAIAIgBDYCFAwBCyALKAIgRQRAIAtBARCMAyIOKAIYIRYgDigCFCESAkAgAi0ALEEBcUUNACACKAIoELcFIAAgCmwhBEEAIQcDQCAEIAdGDQEgDSAHQQN0ahDAAzkDACAHQQFqIQcMAAsACyAvRAAAAAAAAAAAYwRAIAIgDiAAIA0Q9AQiLzkDCAsgBUECcSEYIDBEAAAAAAAAAABmBEAgAkKAgICAgICA+L9/NwMARAAAAAAAAPC/ITALRJqZmZmZmck/RAAAAAAAAABAIDChRAAAAAAAAAhAoxCpAZogL6MhMkHo+gYoAgAhHiAAIApsQQgQGCEIIC9EAAAAAAAA8D8gMKEQqQEhMwNAIAxB4AFqIQRBACEHIAAgCiAMKAIoIhQgDRDABiITIgUoAhAhDyAFKAIAIRADQCAHQQRGBEBBACEHIA8gEGwiD0EAIA9BAEobIQ8DQCAHIA9HBEAgCCAHQQN0akIANwMAIAdBAWohBwwBCwsgBSAFIA0gCEQzMzMzMzPjPyAwIDMgBBC/AyAFIAggBBDKCSAQtyEsQQAhBwNAIAdBBEcEQCAEIAdBA3RqIgUgBSsDACAsozkDACAHQQFqIQcMAQsLBSAEIAdBA3RqQgA3AwAgB0EBaiEHDAELC0EAIQQDQAJAIAQgCkYEQEEAIQREAAAAAAAAAAAhLAwBCyANIAAgBGxBA3QiB2ohHCASIARBAWoiBUECdGohICAHIAhqISMgEiAEQQJ0aigCACEQA0AgICgCACAQTARAIAUhBAwDBQJAIBYgEEECdGoiGigCACIPIARGDQBBACEHIA0gACAEIA8QxgEhLANAIAAgB0YNASAjIAdBA3QiD2oiISAyIA8gHGorAwAgDSAaKAIAIABsQQN0aiAPaisDAKGiICyiICErAwCgOQMAIAdBAWohBwwACwALIBBBAWohEAwBCwALAAsLA0ACQCAEIApHBEAgCCAAIARsQQN0IhBqIQVEAAAAAAAAAAAhMUEAIQcDQCAAIAdHBEAgBSAHQQN0aisDACI0IDSiIDGgITEgB0EBaiEHDAELC0EAIQcCQCAxnyIxRAAAAAAAAAAAZEUNAANAIAAgB0YNASAFIAdBA3RqIg8gDysDACAxozkDACAHQQFqIQcMAAsACyAsIDGgISwgDSAQaiEQQQAhBwNAIAAgB0YNAiAQIAdBA3QiD2oiHCAtIAUgD2orAwCiIBwrAwCgOQMAIAdBAWohBwwACwALIBFBAWohEQJAIBMEQCATEPcEIAxBKGogDCsD8AFEZmZmZmZmCkCiIAwrA+gBRDMzMzMzM+s/oiAMKwPgAaCgELsJDAELQYCLCy0AAEUNACAOKAIIIQQgDCAvOQMgIAwgBDYCGCAMICw5AxAgDCAtOQMIIAwgETYCACAeQfa/AyAMEC0LAkAgGEUgLCAuZnJFBEAgLkRmZmZmZmbuP6IgLGMNASAtRK5H4XoUru8/okTNzMzMzMzsP6MhLQwBCyAtRM3MzMzMzOw/oiEtCyAtRPyp8dJNYlA/ZARAICwhLiARIBVIDQMLIAItACxBBHEEQCAAIA4gDRDzBAsgAiAUNgIUIAsgDkYNBCAOEGQMBAsgBEEBaiEEDAALAAsAC0H6ywFBxroBQZUCQeIZEAAACyAIEBcLIAxBgAJqJAAMAgtBACEOQQAhD0QAAAAAAAAAACEuIwBB4AFrIgokACACKwMgIS8gAigCGCEWIAIrAwghLCACKwMAIS0gAi0ALCEEIApBADYC3AEgCkEKNgLYASAKQQA2AtQBIApBADYC0AEgCkEANgLMASAKQgA3A8ABIAIoAhQhFSAKQQhqIgVBAEG4ARAzGgJAIAdFIBZBAExyIABBAExyDQAgBygCBCISQQBMDQAgBygCACERIBJBLU8EQCAFQQRyQQBBtAEQMxogCiAVNgIIIAogAEEKbEEIEBg2AtQBIApBCkEIEBg2AtABIApBCkEIEBg2AswBCyAGQQA2AgACQCARIBJHBEAgBkGcfzYCACAHIQwMAQsgBygCIEUEQCAHQQEQjAMiDCgCGCEcIAwoAhQhGAJAIAItACxBAXFFDQAgAigCKBC3BSAAIBFsIQVBACEIA0AgBSAIRg0BIA0gCEEDdGoQwAM5AwAgCEEBaiEIDAALAAsgLEQAAAAAAAAAAGMEQCACIAwgACANEPQEIiw5AwgLIARBAnEhICARQQAgEUEAShshIyAtRAAAAAAAAAAAZgRAIAJCgICAgICAgPi/fzcDAEQAAAAAAADwvyEtC0SamZmZmZnJP0QAAAAAAAAAQCAtoUQAAAAAAAAIQKMQqQGaICyjITUgEbghMiAAQQgQGCEOICxEAAAAAAAA8D8gLaEiMxCpASE0IBJBLUkhHgNAQQAhEyAeRQRAIAAgESAKKAIIIhUgDRDABiETCyAPQQFqIQ9BACEERAAAAAAAAAAAISxEAAAAAAAAAAAhMEQAAAAAAAAAACExA0BBACEIAkACQCAEICNHBEADQCAAIAhHBEAgDiAIQQN0akIANwMAIAhBAWohCAwBCwsgDSAAIARsQQN0aiEQIBggBEEBaiIFQQJ0aiEaIBggBEECdGooAgAhCwNAIBooAgAgC0oEQAJAIBwgC0ECdGoiISgCACIUIARGDQBBACEIIA0gACAEIBQQxgEhLQNAIAAgCEYNASAOIAhBA3QiFGoiJSA1IBAgFGorAwAgDSAhKAIAIABsQQN0aiAUaisDAKGiIC2iICUrAwCgOQMAIAhBAWohCAwACwALIAtBAWohCwwBCwtBACELIB5FBEAgEyAQIAQgCkHcAWogCkHYAWogCkHUAWogCkHQAWogCkHMAWogCkHAAWoQzQlBACEEIAooAtwBIghBACAIQQBKGyEUIAi3IS0gCigC1AEhGiAKKALQASEhIAooAswBISUgCisDwAEhNgNAIAQgFEYNAyAhIARBA3QiC2ohHyAaIAAgBGxBA3RqIRtBACEIIAsgJWorAwAiN0QWVueerwPSPCA3RBZW556vA9I8ZBsgMxCpASE3A0AgACAIRwRAIA4gCEEDdCILaiIkICQrAwAgNCAfKwMAoiALIBBqKwMAIAsgG2orAwChoiA3o6A5AwAgCEEBaiEIDAELCyAEQQFqIQQMAAsACwNAIAsgEUYNAwJAIAQgC0YNACANIAAgC2xBA3RqIRpBACEIIA0gACAEIAsQmQIgMxCpASEtA0AgACAIRg0BIA4gCEEDdCIUaiIhICErAwAgNCAQIBRqKwMAIBQgGmorAwChoiAto6A5AwAgCEEBaiEIDAALAAsgC0EBaiELDAALAAsgEwRAIBMQ9wQgCkEIaiAwIDKjRAAAAAAAABRAoiAxIDKjoBC7CQsCQCAgRSAsIC5mckUEQCAuRGZmZmZmZu4/oiAsYw0BIC9ErkfhehSu7z+iRM3MzMzMzOw/oyEvDAELIC9EzczMzMzM7D+iIS8LIC9E/Knx0k1iUD9kBEAgLCEuIA8gFkgNBAsgAi0ALEEEcUUNBSAAIAwgDRDzBAwFCyAwIC2gITAgMSA2oCExC0QAAAAAAAAAACEtQQAhCANAIAAgCEcEQCAOIAhBA3RqKwMAIjYgNqIgLaAhLSAIQQFqIQgMAQsLQQAhCAJAIC2fIi1EAAAAAAAAAABkRQ0AA0AgACAIRg0BIA4gCEEDdGoiBCAEKwMAIC2jOQMAIAhBAWohCAwACwALICwgLaAhLEEAIQgDQCAAIAhGBEAgBSEEDAIFIBAgCEEDdCIEaiILIC8gBCAOaisDAKIgCysDAKA5AwAgCEEBaiEIDAELAAsACwALAAtB+ssBQca6AUGuBEH3gAEQAAALIBJBLU8EQCACIBU2AhQLIAcgDEcEQCAMEGQLIA4QFyAKKALUARAXIAooAtABEBcgCigCzAEQFwsgCkHgAWokAAwBCyAMEBcgEBAXCyAJKAIYIgUEQCAGKAIABEAgDRAXDAMLIAkoAgwgAyEEIAUoAhgEQCAFKAIEIABsQQgQGCEECyACKwMIISwgBSgCECEOIAUoAgghByANIAQgABDTCSAHKAIYIRAgBygCFCERIABBCBAYIQlBACEIIAcoAgAiB0EAIAdBAEobIRIDQAJAQQAhByAIIgwgEkYNAANAIAAgB0cEQCAJIAdBA3RqQgA3AwAgB0EBaiEHDAELCyARIAxBAnRqKAIAIgogESAMQQFqIghBAnRqKAIAIgcgByAKSBshE0EAIQsDQCAKIBNHBEAgDCAQIApBAnRqKAIAIgdHBEAgBCAAIAdsQQN0aiEPQQAhBwNAIAAgB0cEQCAJIAdBA3QiFWoiFiAPIBVqKwMAIBYrAwCgOQMAIAdBAWohBwwBCwsgC0EBaiELCyAKQQFqIQoMAQsLIAtBAEwNAUQAAAAAAADgPyALuKMhLiAEIAAgDGxBA3RqIQxBACEHA0AgACAHRg0CIAwgB0EDdCILaiIKIAorAwBEAAAAAAAA4D+iIC4gCSALaisDAKKgOQMAIAdBAWohBwwACwALCyAJEBcgDigCACIMQQAgDEEAShshCyAsRPyp8dJNYlA/oiEsIA4oAhghCiAOKAIUIQkDQCAHIAtHBEAgCSAHQQFqIgxBAnRqIQ4gCSAHQQJ0aigCACEIA0AgCEEBaiIIIA4oAgBOBEAgDCEHDAMLIAogCEECdGohEUEAIQcDQCAAIAdGDQEQwAMhLiAEIBEoAgAgAGxBA3RqIAdBA3RqIhAgLCAuRAAAAAAAAOC/oKIgECsDAKA5AwAgB0EBaiEHDAALAAsACwsgDRAXIAJCmrPmzJmz5tw/NwMgIAIgAi0ALEH8AXE6ACwgAiACKwMIRAAAAAAAAOg/ojkDCCAEIQ0gBSEJDAELCyAXIQUgAyENQQAhBkEAIQlBACELRAAAAAAAAAAAIS1EAAAAAAAAAAAhLkQAAAAAAAAAACEvAkACQAJAAkACQAJAIAIoAjAiA0EBaw4GAwECBAAABQsgBSgCAEEDSA0EAn8gACEMIANBBkchCkEAIQMgBSgCGCEQIAUoAhQhByAFKAIAIQgCQAJAIAVBABC5AgRAIAhBACAIQQBKGyEOIAhBCBAYIREDQCADIA5HBEAgESADQQN0aiELIAcgA0EBaiIEQQJ0aiESIAcgA0ECdGooAgAhBkEAIQlEAAAAAAAAAAAhLANAIBIoAgAgBkoEQCAQIAZBAnRqKAIAIhMgA0cEQCALIA0gDCADIBMQxgEgLKAiLDkDACAJQQFqIQkLIAZBAWohBgwBCwsgCUEATA0DIAsgLCAJuKM5AwAgBCEDDAELC0E4EE0iCUL7qLi9lNyewj83AyggCUIANwIUIAlCgICAgICAgPg/NwMgIAkgBSgCALefnDkDMCAJIAhBCBAYIg82AgwgCSAFAn8gCEEDTgRAIAoEQEEAIQMjAEEQayIEJAAgBEKAgICAgICA+D83AwggCBDfASEGIAgQ3wEhByAEQQA2AgQgCEEAIAhBAEobIQsDQCADIAtHBEAgBiADQQN0IgVqIA0gA0EEdGoiCisDADkDACAFIAdqIAorAwg5AwAgA0EBaiEDDAELC0EAIQMgCEEDTgRAIwBBEGsiBSQAIAVBmcwDNgIAQYHzAyAFEDEgBUEQaiQACyAIIAhBAUEBQQEQmgIhBQNAIAQoAgQgA0oEQCAFIANBA3QiCigCACAKKAIEIARBCGoQiAQgA0EBaiEDDAELCyAIQQJGBEAgBUEAQQEgBEEIahCIBAtBACEDA0AgAyALRwRAIAUgAyADIARBCGoQiAQgA0EBaiEDDAELCyAFENQJIQMgBRBkIANBABCMAyADEGRBABAXIAYQFyAHEBcgBEEQaiQADAILQQAhBCMAQRBrIgUkACAFQoCAgICAgID4PzcDCCAIQQAgCEEAShshCiAIEN8BIRAgCBDfASESA0AgBCAKRwRAIBAgBEEDdCIDaiANIAQgDGxBA3RqIgYrAwA5AwAgAyASaiAGKwMIOQMAIARBAWohBAwBCwtBACEHIwBBEGsiBiQAAkACQAJAAkAgCEEBaw4CAQACC0EEQQQQzQIhBEECQQwQzQIiAyAENgIEIANBADYCCCADQQI2AgAgBEKAgICAEDcCACADQQA2AhQgAyAEQQhqNgIQIANBAjYCDCAEQgE3AggMAgtBAUEEEM0CIQRBAUEMEM0CIgMgBDYCBCADQQA2AgggA0EBNgIAIARBADYCAAwBCyAGQZnMAzYCAEHl8gMgBhAxQQAhAwsgBkEQaiQAIAggCEEBQQFBARCaAiELQQAhBgNAIAYgCkYEQANAIAcgCkcEQCALIAcgByAFQQhqEIgEIAdBAWohBwwBCwsFIAMgBkEMbGohE0EBIQQDQCATKAIAIARKBEAgCyAGIBMoAgQgBEECdGooAgAgBUEIahCIBCAEQQFqIQQMAQsLIAZBAWohBgwBCwsgCxDUCSIEQQAQjAMgBBBkIAsQZCAQEBcgEhAXIAMEQCADKAIEEBcgAygCCBAXIAMQFwsgBUEQaiQADAELIAUQiQQLIgQQwgYiAzYCBCAEEGQgCSADEIkEIgQ2AgggA0EAIAQbRQRAIAkQ9QRBAAwECyAEKAIcIQcgAygCHCEKIAMoAhghEiADKAIUIQtBACEDA0AgAyAORwRAIAsgA0EBaiIFQQJ0aiETIAsgA0ECdGooAgAhBkF/IQREAAAAAAAAAAAhLUQAAAAAAAAAACEsA0AgEygCACAGSgRAAkAgAyASIAZBAnRqKAIAIhBGBEAgBiEEDAELIAogBkEDdCIVakQAAAAAAADwPyANIAwgAyAQEJkCRDMzMzMzM+M/EKkBIjAgMKKjIjE5AwAgByAVaiIVIDAgMaIiMjkDACAyIA0gDCADIBAQxgGiIC6gIS4gLCAxoCEsIDAgFSsDACIwoiAvoCEvIC0gMKAhLQsgBkEBaiEGDAELCyAPIANBA3RqIgMgAysDACAsmqIiMDkDACAEQQBIDQQgCiAEQQN0IgNqIDAgLKE5AwAgAyAHaiAtmjkDACAFIQMMAQsLQQAhBiALIAhBAnRqKAIAIgNBACADQQBKGyEDIC4gL6MhLANAIAMgBkcEQCAHIAZBA3RqIgQgLCAEKwMAojkDACAGQQFqIQYMAQsLIAkgLDkDICAREBcgCQwDC0GingNBrbgBQawFQaAVEAAAC0HjjgNBrbgBQbgFQaAVEAAAC0GCkgNBrbgBQfoFQaAVEAAACyIDIAwgDRC/CSADEPUEDAQLQQEhBgwBC0ECIQYLAn8gACEHIAYhDEEAIQZBACEEIAUoAhghECAFKAIUIQ4gBSgCACEIIAVBABC5AgRAIAUgByANEMAJISRBOBBNIgpC+6i4vZTcnsI/NwMoIApCADcCFCAKQoCAgICAgID4PzcDICAKIAUoAgC3n5w5AzAgCiAIQQgQGCIgNgIMIAhBACAIQQBKGyETA0AgBiATRwRAICAgBkEDdGpEmpmZmZmZqT85AwAgBkEBaiEGDAELCyAIQQQQGCERIAhBCBAYIRJBACEDA0AgAyATRgRAA0AgBCATRgRAQQAhCUEAIQMDQCADIBNHBEAgESADQQJ0IgRqIAM2AgAgBCAOaigCACIEIA4gA0EBaiIFQQJ0aigCACIGIAQgBkobIQsgBCEGA0AgBiALRwRAIAMgESAQIAZBAnRqKAIAQQJ0aiIPKAIARwRAIA8gAzYCACAJQQFqIQkLIAZBAWohBgwBCwsDQCAEIAtGBEAgBSEDDAMFIA4gECAEQQJ0aigCAEECdGoiDygCACIGIA8oAgQiDyAGIA9KGyEPA0AgBiAPRwRAIAMgESAQIAZBAnRqKAIAQQJ0aiIVKAIARwRAIBUgAzYCACAJQQFqIQkLIAZBAWohBgwBCwsgBEEBaiEEDAELAAsACwsgCiAIIAggCCAJaiIDQQFBABCaAiIPNgIEIAogCCAIIANBAUEAEJoCIhU2AgggD0EAIBUbRQRAIAoQ9QRBAAwGCyAVKAIYIR4gFSgCHCEWIA8oAhwhFCAPKAIYIRwgDygCFCEjQQAhAyAVKAIUIiZBADYCACAjQQA2AgBBACEEA0AgBCATRwRAIBEgBEECdCIGaiAEIAhqIhg2AgAgEiAEQQN0IidqIRogDiAEQQFqIgVBAnQiIWohJSAGIA5qIgsoAgAhBkQAAAAAAAAAACEwRAAAAAAAAAAAIS4DQCAlKAIAIgkgBkoEQCAYIBEgECAGQQJ0aigCACIJQQJ0aiIfKAIARwRAIB8gGDYCACAcIANBAnQiH2ogCTYCAEQAAAAAAADwPyEsAkACQAJAAkAgDA4DAwIAAQsgDSAHIAQgCRCZAkSamZmZmZnZPxCpASEsDAILQfz+AEEdQQFB6PoGKAIAEEoaQZSXA0GtuAFBxgFB0hUQAAALIBorAwAgEiAJQQN0aisDAKBEAAAAAAAA4D+iISwLIBQgA0EDdCIbakQAAAAAAADwvyAsICyioyIxOQMAIB4gH2ogCTYCACAWIBtqIh8gLCAxoiIyOQMAIDIgDSAHIAQgCRDGAaIgL6AhLyAuIDGgIS4gMCAfKwMAIjGgITAgMSAsoiAtoCEtIANBAWohAwsgBkEBaiEGDAELCyALKAIAIQsDQCAJIAtKBEAgEiAQIAtBAnRqKAIAIh9BA3RqISggDiAfQQJ0aiIqKAIAIQYDQCAqKAIEIAZKBEAgGCARIBAgBkECdGoiGygCACIJQQJ0aiIrKAIARwRAICsgGDYCAEQAAAAAAAAAQCEsAkACQAJAAkAgDA4DAwIAAQsgDSAHIAQgCRCZAiAbKAIAIQlEmpmZmZmZ2T8QqQEhLAwCC0H8/gBBHUEBQej6BigCABBKGkGUlwNBrbgBQfABQdIVEAAACyAoKwMAIiwgLKAgGisDAKAgEiAJQQN0aisDAKBEAAAAAAAA4D+iISwLIBwgA0ECdCIraiAJNgIAIBQgA0EDdCIJakQAAAAAAADwvyAsICyioyIxOQMAIB4gK2ogGygCACIbNgIAIAkgFmoiCSAsIDGiIjI5AwAgMiANIAcgGyAfEMYBoiAvoCEvIC4gMaAhLiAwIAkrAwAiMaAhMCAxICyiIC2gIS0gA0EBaiEDCyAGQQFqIQYMAQsLIAtBAWohCyAlKAIAIQkMAQsLIBwgA0ECdCIGaiAENgIAICAgJ2oiCSAJKwMAIC6aoiIsOQMAIBQgA0EDdCIJaiAsIC6hOQMAIAYgHmogBDYCACAJIBZqIDCaOQMAICEgI2ogA0EBaiIDNgIAICEgJmogAzYCACAFIQQMAQsLQQAhBiADQQAgA0EAShshBCAvIC2jISwDQCAEIAZHBEAgFiAGQQN0aiIFICwgBSsDAKI5AwAgBkEBaiEGDAELCyAKICw5AyAgDyADNgIIIBUgAzYCCCAREBcgEhAXICQQZCAKDAUFIBEgBEECdGpBfzYCACAEQQFqIQQMAQsACwALIBIgA0EDdGohCyAOIANBAWoiBUECdGohDyAOIANBAnRqKAIAIQZBACEJRAAAAAAAAAAAISwDQCAPKAIAIAZKBEAgECAGQQJ0aigCACIVIANHBEAgCyANIAcgAyAVEMYBICygIiw5AwAgCUEBaiEJCyAGQQFqIQYMAQsLIAlBAEoEQCALICwgCbijOQMAIAUhAwwBCwtB444DQa24AUGJAUHSFRAAAAtBop4DQa24AUHwAEHSFRAAAAsiAyAHIA0QvwkgAxD1BAwBCwJ/IAAhDEEAIQMgBSgCGCEOIAUoAhQhCCAFKAIAIREgBUEAELkCBEAgBSAAIA0QwAkiHCgCHCEVIBFBACARQQBKGyESQQgQTSETIBFBBBAYIQogEUEIEBghEANAIAMgEkYEQEEAIQcDQCAHIBJGBEBBACEDA0AgAyASRwRAIAogA0ECdCIEaiADNgIAIAQgCGooAgAiBiAIIANBAWoiBEECdGooAgAiByAGIAdKGyEPIAYhBwNAIAcgD0cEQCADIAogDiAHQQJ0aigCAEECdGoiFigCAEcEQCAWIAM2AgAgCUEBaiEJCyAHQQFqIQcMAQsLA0AgBiAPRgRAIAQhAwwDBSAIIA4gBkECdGooAgBBAnRqIhYoAgAiByAWKAIEIhYgByAWShshFgNAIAcgFkcEQCADIAogDiAHQQJ0aigCAEECdGoiGCgCAEcEQCAYIAM2AgAgCUEBaiEJCyAHQQFqIQcMAQsLIAZBAWohBgwBCwALAAsLQQAhAyATIBEgESAJQQFBABCaAiIENgIAIARFBEAgExC+CUEADAYLIAQoAhwhFiAEKAIYIRggBCgCFCIgQQA2AgADQCALIBJHBEAgCiALQQJ0IgZqIAsgEWoiDzYCACAQIAtBA3RqIR4gCCALQQFqIgtBAnQiI2ohFCAGIAhqIgkoAgAhBwNAIBQoAgAiBiAHSgRAIA8gCiAOIAdBAnRqKAIAIgZBAnRqIhooAgBHBEAgGiAPNgIAIBggA0ECdGogBjYCACAWIANBA3RqIhogHisDACAQIAZBA3RqKwMAoEQAAAAAAADgP6I5AwAgGiAVIAdBA3RqKwMAOQMAIANBAWohAwsgB0EBaiEHDAELCyAJKAIAIQkDQCAGIAlKBEAgFSAJQQN0aiEGIBAgDiAJQQJ0aigCACIHQQN0aiEaIAggB0ECdGoiISgCACEHA0AgISgCBCAHSgRAIA8gCiAOIAdBAnRqIiUoAgAiH0ECdGoiGygCAEcEQCAbIA82AgAgGCADQQJ0aiAfNgIAIBYgA0EDdGoiHyAaKwMAIiwgLKAgHisDAKAgECAlKAIAQQN0aisDAKBEAAAAAAAA4D+iOQMAIB8gBisDACAVIAdBA3RqKwMAoDkDACADQQFqIQMLIAdBAWohBwwBCwsgCUEBaiEJIBQoAgAhBgwBCwsgICAjaiADNgIADAELCyAEIAM2AgggExC9CSIDNgIEIAMgAkHYABAgIgNBATYCECADQRQ2AhggAyADLQAsQf4BcToALCADIAMrAyBEAAAAAAAA4D+iOQMgIAoQFyAQEBcgHBBkIBMMBQUgCiAHQQJ0akF/NgIAIAdBAWohBwwBCwALAAsgECADQQN0aiEPIAggA0EBaiIEQQJ0aiEWIAggA0ECdGooAgAhB0EAIQZEAAAAAAAAAAAhLANAIBYoAgAgB0oEQCAOIAdBAnRqKAIAIhggA0cEQCAPIA0gDCADIBgQxgEgLKAiLDkDACAGQQFqIQYLIAdBAWohBwwBCwsgBkEASgRAIA8gLCAGuKM5AwAgBCEDDAELC0HjjgNBrbgBQasGQY0VEAAAC0GingNBrbgBQZkGQY0VEAAACyIcIQRBACELQQAhE0EAIQ8jAEEQayIQJAAgEEEANgIMIAQoAgAhAyAEKAIEIQojAEEgayIIJAAgCisDICEvIAooAhghFSAKKwMIIS0gCisDACEsIAotACwhCSAIQQA2AhwgCEEKNgIYIAhBADYCFCAIQQA2AhAgCEEANgIMIAhCADcDAAJAIAVFIBVBAExyIAxBAExyDQAgBSgCBCIEQQBMDQAgBSgCACEOIARBLU8EQCAIIAxBCmxBCBAYNgIUIAhBCkEIEBg2AhAgCEEKQQgQGDYCDAsgEEEANgIMAkAgBCAORwRAIBBBnH82AgwgBSEHDAELIAUoAiBFBEAgBUEBEIwDIgcoAhghICAHKAIUIRYgAygCHCEjIAMoAhghGiADKAIUIRgCQCAKLQAsQQFxRQ0AIAooAigQtwUgDCAObCEDQQAhBgNAIAMgBkYNASANIAZBA3RqEMADOQMAIAZBAWohBgwACwALIC1EAAAAAAAAAABjBEAgCiAHIAwgDRD0BCItOQMICyAMIA5sIgNBA3QhISAJQQJxISUgDkEAIA5BAEobIR8gLEQAAAAAAAAAAGYEQCAKQoCAgICAgID4v383AwBEAAAAAAAA8L8hLAtEmpmZmZmZyT9EAAAAAAAAAEAgLKFEAAAAAAAACECjEKkBIC2jIi5EmpmZmZmZyT+iITIgLpohMyAMQQgQGCELIANBCBAYIRMgLUQAAAAAAADwPyAsoSIwEKkBITEgBEEtSSEeRAAAAAAAAAAAIS4DQCATIA0gIRAgGkEAIRIgHkUEQCAMIA5BCiANEMAGIRILIA9BAWohD0EAIQNEAAAAAAAAAAAhLANAQQAhBgJAIAMgH0cEQANAIAYgDEcEQCALIAZBA3RqQgA3AwAgBkEBaiEGDAELCyANIAMgDGxBA3RqIREgFiADQQFqIgRBAnQiG2ohJCAWIANBAnQiJmooAgAhCQNAICQoAgAgCUoEQAJAICAgCUECdGoiJygCACIUIANGDQBBACEGIA0gDCADIBQQxgEhLQNAIAYgDEYNASALIAZBA3QiFGoiKCARIBRqKwMAIA0gJygCACAMbEEDdGogFGorAwChIDOiIC2iICgrAwCgOQMAIAZBAWohBgwACwALIAlBAWohCQwBCwsgGCAbaiEbIBggJmooAgAhCQNAIBsoAgAgCUoEQAJAIBogCUECdGoiJCgCACIUIANGDQAgIyAJQQN0aiEmQQAhBiANIAwgAyAUEJkCIS0DQCAGIAxGDQEgCyAGQQN0IhRqIicgJysDACAtICYrAwAiNKEiNSA1IDIgESAUaisDACANICQoAgAgDGxBA3RqIBRqKwMAoaKioiAtoyI1IDWaIC0gNGMboDkDACAGQQFqIQYMAAsACyAJQQFqIQkMAQsLQQAhCSAeRQRAIBIgESADIAhBHGogCEEYaiAIQRRqIAhBEGogCEEMaiAIEM0JIAgoAhwiA0EAIANBAEobIRQgCCgCFCEbIAgoAhAhJCAIKAIMISYDQCAJIBRGDQMgJCAJQQN0IgNqIScgGyAJIAxsQQN0aiEoQQAhBiADICZqKwMAIi1EFlbnnq8D0jwgLUQWVueerwPSPGQbIDAQqQEhLQNAIAYgDEcEQCALIAZBA3QiA2oiKiAqKwMAIDEgJysDAKIgAyARaisDACADIChqKwMAoaIgLaOgOQMAIAZBAWohBgwBCwsgCUEBaiEJDAALAAsDQCAJIA5GDQICQCADIAlGDQAgDSAJIAxsQQN0aiEbQQAhBiANIAwgAyAJEJkCIDAQqQEhLQNAIAYgDEYNASALIAZBA3QiFGoiJCAkKwMAIDEgESAUaisDACAUIBtqKwMAoaIgLaOgOQMAIAZBAWohBgwACwALIAlBAWohCQwACwALIBIEQCASEPcECwJAICVFICwgLmZyRQRAIC5EZmZmZmZm7j+iICxjDQEgL0SuR+F6FK7vP6JEzczMzMzM7D+jIS8MAQsgL0TNzMzMzMzsP6IhLwsgL0T8qfHSTWJQP2QEQCAsIS4gDyAVSA0DCyAKLQAsQQRxRQ0EIAwgByANEPMEDAQLRAAAAAAAAAAAIS1BACEGA0AgBiAMRwRAIAsgBkEDdGorAwAiNCA0oiAtoCEtIAZBAWohBgwBCwtBACEGAkAgLZ8iLUQAAAAAAAAAAGRFDQADQCAGIAxGDQEgCyAGQQN0aiIDIAMrAwAgLaM5AwAgBkEBaiEGDAALAAsgLCAtoCEsQQAhBgNAIAYgDEYEQCAEIQMMAgUgESAGQQN0IgNqIgkgLyADIAtqKwMAoiAJKwMAoDkDACAGQQFqIQYMAQsACwALAAsAC0H6ywFBxroBQdEFQZOBARAAAAsgExAXIAUgB0cEQCAHEGQLIAsQFyAIKAIUEBcgCCgCEBAXIAgoAgwQFwsgCEEgaiQAIBAoAgwEQEHNgwFBrbgBQYoHQeD2ABAAAAsgEEEQaiQAIBwQvgkLQYCLCy0AAARAIB0gAigCNDYCACApQeeyBCAdEB0aCwJAAkAgAEECRgRAQQAhAEEAIQQjAEEwayIDJAADQCAAQQRHBEAgA0EQaiAAQQN0akIANwMAIABBAWohAAwBCwsgA0IANwMIIANCADcDACAiQQAgIkEAShshBQNAIAQgBUcEQCAEQQF0IQZBACEAA0AgAEECRwRAIAMgAEEDdGoiByANIAAgBnJBA3RqKwMAIAcrAwCgOQMAIABBAWohAAwBCwsgBEEBaiEEDAELCyAityEsQQAhBEEAIQADQCAAQQJGBEACQAN/IAQgBUYEf0EABSAEQQF0IQZBACEAA0AgAEECRwRAIA0gACAGckEDdGoiByAHKwMAIAMgAEEDdGorAwChOQMAIABBAWohAAwBCwsgBEEBaiEEDAELCyEEA0ACQCAEIAVHBEAgBEEBdCEHQQAhBgNAIAZBAkYNAiAGQQF0IQwgDSAGIAdyQQN0aisDACEsQQAhAANAIABBAkcEQCADQRBqIAAgDHJBA3RqIgkgLCANIAAgB3JBA3RqKwMAoiAJKwMAoDkDACAAQQFqIQAMAQsLIAZBAWohBgwACwALRAAAAAAAAAAAISwgAysDGCIuRAAAAAAAAAAAYgRAIAMrAygiLCADKwMQIi2hICwgLKIgLUQAAAAAAAAAwKIgLKIgLSAtoiAuIC5EAAAAAAAAEECioqCgoJ+hmiAuIC6goyEsC0QAAAAAAADwPyAsICyiRAAAAAAAAPA/oJ8iLaMhLiAsIC2jISxBACEAA0AgACAFRwRAIA0gAEEEdGoiBCAsIAQrAwgiLaIgBCsDACIvIC6ioTkDCCAEIC8gLKIgLiAtoqA5AwAgAEEBaiEADAELCyADQTBqJAAMAgsgBEEBaiEEDAALAAsFIAMgAEEDdGoiBiAGKwMAICyjOQMAIABBAWohAAwBCwsgAisDSCIuRAAAAAAAAAAAYQ0CIB1CADcDeCAdQgA3A3BBACEHIB0rA3ghLSAdKwNwISwDQCAHICJGDQIgDSAHQQR0aiIAKwMAICygISwgACsDCCAtoCEtIAdBAWohBwwACwALIAIrA0hEAAAAAAAAAABhDQFBo+gCQca6AUGzB0HtkQEQAAALIB0gLTkDeCAdICw5A3AgIrghLEEAIQcDQCAHQQJGBEBBACEHIB0rA3ghLCAdKwNwIS0DQCAHICJHBEAgDSAHQQR0aiIAIAArAwAgLaE5AwAgACAAKwMIICyhOQMIIAdBAWohBwwBCwtBACEHIC5EcOINpUXfkb+iIi4QVyEsIC4QRCEuA0AgByAiRg0DIA0gB0EEdGoiACAuIAArAwgiLaIgACsDACIvICyioTkDCCAAIC8gLqIgLCAtoqA5AwAgB0EBaiEHDAALAAUgHUHwAGogB0EDdGoiACAAKwMAICyjOQMAIAdBAWohBwwBCwALAAsgAigCNBogAisDQBogAigCUBogAi0AOBoQxAkLIAIgHUEYakHYABAgGiABIBdHBEAgFxBkCxDDCQsgHUGAAWokAAtMAQF/IAEgACgCBCICSQRAIAJBIU8EfyAAKAIABSAACyABQQN2aiIAIAAtAABBASABQQdxdHI6AAAPC0GrqQNB5PoAQdEAQaIgEAAAC6oCAQN/AkACQCAAKAIAIgJBAE4EQCAAQQhqIgQgAkEDdGogATkDAAJAAkACQCAAKAKwAQ4CAAECCyACQRRGBEAgAEETNgIAIABBfzYCsAEPCyAAQQE2ArABIABBFCACQQFqIAJBFE8bNgIADwsgAkUNAiACQQFrIQMCQCACQRNLDQAgBCADQQN0aisDACABZEUNACAAIAJBAWo2AgAPCyAAQX82ArABIAAgAzYCAA8LIAJBFE8NAiACQQFqIQMCQCACRQ0AIAQgA0EDdGorAwAgAWRFDQAgACACQQFrNgIADwsgAEEBNgKwASAAIAM2AgAPC0HwkQNBxroBQfkAQbjkABAAAAtBtYYDQca6AUGEAUG45AAQAAALQdfSAUHGugFBjAFBuOQAEAAAC4qGAQNbfxF8An4jAEHgJWsiAiQAIAJB4AVqQQBB4AAQMxogACgCEC8BiAEgAiACQegIajYC4AZBDnEiEgRAAkACQCASQQRGBEAgABC2CSAAKAJIKAIQLQBxQQFxRQ0BQfvbA0EAECcMAQsgEkEIRw0AIAAQtgkCQAJAIAAoAkgoAhAtAHFBAXEEQCAAKAIQQcABaiELA0AgCygCACIBRQ0CAkAgASgCECILLQCsAUEBRw0AAkAgCygCgAEiAwRAIAMoAhAoAmAiBEUNBiAEIAspAxA3AzggBEFAayALKQMYNwMAIARBAToAUQwBCyALKAJ4IgRFDQEgARC6BgsgACAEEI4CIAEoAhAhCwsgC0G4AWohCwwACwALIABBABD9BwwDCyAAQQEQ/QcMAgtBx/IAQeW4AUHzAUGYKxAAAAsgABDxBkGUkQtBlJELKAIAIgNBAWo2AgACQCADQQBKDQBBnJELQQA2AgBBmJELQQA2AgBBgIsLLQAARQ0AQbiRCxCoAQsgAkIANwPABSACQgA3A7gFIAAoAhAoAvgBIQMgAkEANgLYBSACIAO3OQPQBSACIANBBG23OQPIBUGAAUEEEBghDyAAKAIQIgooAugBIQUDQAJAAkAgCigC7AEgBU4EQCAKKALEASIEIAVBBnQiCWoiAygCBCIHKAIAIggEQCACIAIrA7gFIl0gCCgCECIIKwMQIAgrA1ihIl4gXSBeYxs5A7gFCwJ8IAMoAgAiA0UEQCACKwPABQwBCyACKwPABSJdIAcgA0ECdGpBBGsoAgAiB0UNABogXSAHKAIQIgcrAxAgBysDYKAiXiBdIF5kGwshXSADIAZqIQYgAiBdRAAAAAAAADBAoDkDwAUgAiACKwO4BUQAAAAAAAAwwKA5A7gFQQAhCANAIAMgCEwNAwJAIAQgCWooAgQgCEECdGooAgAiBCgCECIDKAKAASIHBH8gBygCECgCYCIORQ0EIA4gAykDEDcDOCAOQUBrIAMpAxg3AwAgBygCECgCYEEBOgBRIAQoAhAFIAMLLQCsAQRAIARBvPUHKAIAEQIARQ0BC0EAIQMDQCAEKAIQIg4oAsgBIANBAnRqKAIAIgcEQAJAAkAgBygCECIOLQBwQQRrDgMBAAEACyAOQdEANgKkASAPIAtBAnRqIAc2AgAgC0EBaiIHQf8AcUUEQCAPIAcgC0GBAWpBBBBgIQ8LIAchCwsgA0EBaiEDDAELC0EAIQMCQCAOKALQASIMRQ0AA0AgDCADQQJ0aigCACIHRQ0BIAdBAhCpCSAPIAtBAnRqIAc2AgAgC0EBaiIHQf8AcUUEQCAPIAcgC0GBAWpBBBBgIQ8LIANBAWohAyAEKAIQIg4oAtABIQwgByELDAALAAsgDigC4AEiDEUNACAOLQCsAUUEQCAOKwOAAiFdIA4gDisDYDkDgAIgDiBdOQNgC0EAIQMDQCAMIANBAnRqKAIAIgdFDQEgB0EAEKkJIA8gC0ECdGogBzYCACALQQFqIgdB/wBxRQRAIA8gByALQYEBakEEEGAhDwsgA0EBaiEDIAQoAhAoAuABIQwgByELDAALAAsgCEEBaiEIIAAoAhAiCigCxAEiBCAJaigCACEDDAALAAsgDyALQQRBBBCUASACIAZB6AJqQSAQGDYCtAYgAiAFQSAQGDYC2AUCQCASQQJHIhoNACAAKAIQQcABaiEDA0AgAygCACIFRQ0BAkAgBSgCECIDLQCsAUEBRw0AIAMoAnhFDQAgBRC6BiAFKAIQIQMLIANBuAFqIQMMAAsACyASQQZGISkgAkHoB2ohNSACQcAHaiE2IAJB0CBqIRUgAkHAIGohICACQbAgaiEUIAJBoBtqIRYgAkHYIGohFyACQdgKaiEiIAJBkBBqIRsgAkHQGmohKiACQcAaaiErIAJBsBpqISEgAkGgGmohIyACQZAaaiEsIAJBgBpqIS0gAkHwF2ohNyACQcgXaiE4IAJB0BZqIS4gAkGAF2ohLyACQcAZaiE5IAJBsApqITogAkGIGWohMCACQbgZaiExIAJB6A9qITIgAkHoGWohMyACQZgaaiE0IAJByAZqITsgAkH4BmohPCASQQRHIT0gEkEKRyEcQQAhDgNAAkACQAJAAkAgCyAOIgdNBEAgACgCEEHAAWohCwNAIAsoAgAiBUUNAgJAIAUoAhAiAy0ArAFBAUcNACADKAJ4RQ0AIAUQugYgACAFKAIQKAJ4EI4CIAUoAhAhAwsgA0G4AWohCwwACwALIA8gB0ECdGoiESgCACIIELsDIQoCQCAIKAIQIgMtACwEQCAIIQQMAQsgCCAKIAMtAFQbIgQoAhAhAwsCQCADLQCkAUEgcUUEQCADIQYMAQsgAigC4AYiBiADQbgBECAhBSACQdAGaiIDIARBMBAgGiACIAU2AuAGQShB2AAgAigC0AZBA3EiCUEDRhsgA2ogBEFQQQAgBCgCAEEDcSIOQQJHG2ooAig2AgAgPCA7IAlBAkYbIARBMEEAIA5BA0cbaigCKDYCACAFQRBqIAQoAhBBOGpBKBAgGiAFQThqIAQoAhBBEGpBKBAgGiAFIAQ2AnggBUEBOgBwIAMhBAtBASEMIAchDgNAAkAgDkEBaiIOIAtPDQAgCiAPIA5BAnRqIhAoAgAiCRC7AyIFRw0AIAgoAhAtAHJFBEACQCAJKAIQIgMtACwEQCAJIQUMAQsgCSAFIAMtAFQbIgUoAhAhAwsgAy0ApAFBIHEEQCACQbAHaiINIANBuAEQIBogBSgCACEDIAIgBSgCKDYCyAYgAkHIBmogAkHABmogA0EDcSIDQQNGIgYbIAVBUEEAIANBAkcbaigCKDYCACACIAVBAEEwIAYbaigCKDYCyAYgNiAFKAIQIgNBOGpBKBAgGiA1IANBEGpBKBAgGiACIAU2AqgIIAJBAToAoAggBCgCECEGIA0hAwsgBi0ALCEFIAMtACxBAXEEfyAFQQFxRQ0CIAYrABAiXSADKwAQIl5kIF0gXmNyDQIgBisAGCJdIAMrABgiXmMNAiBdIF5kBSAFCw0BIAYtAFQhBSADLQBUQQFxBH8gBUEBcUUNAiAGKwA4Il0gAysAOCJeZCBdIF5jcg0CIAYrAEAiXSADKwBAIl5jDQIgXSBeZAUgBQsNASAIKAIQIgMoAqQBQQ9xQQJGBEAgAygCYCAJKAIQKAJgRw0CCyAQKAIAKAIQLQCkAUHAAHENAQsgDEEBaiEMDAELCyA9RQRAIAxBBBAYIgUgESgCABC7AzYCAEEBIQNBASAMIAxBAU0bIQYDQCADIAZGBEAgACAFIAwgEkG49QcQ2g4gBRAXDAcFIAUgA0ECdCIHaiAHIBFqKAIANgIAIANBAWohAwwBCwALAAsgCEEwQQAgCCgCAEEDcSIGQQNHG2ooAigiBCgCECIFKAL0ASEDIAhBUEEAIAZBAkcbaigCKCIGIARGBEAgDyAHIAwgAisD0AUCfCAAKAIQIgYoAuwBIANGBEAgA0EASgRAIAYoAsQBIANBBnRqQTxrKAIAKAIAKAIQKwMYIAUrAxihDAILIAUrA1AMAQsgBigC6AEgA0YEQCAFKwMYIAYoAsQBIANBBnRqKAJEKAIAKAIQKwMYoQwBCyAGKALEASADQQZ0aiIDQTxrKAIAKAIAKAIQKwMYIAUrAxgiXaEiXiBdIAMoAkQoAgAoAhArAxihIl0gXSBeZBsLRAAAAAAAAOA/okG49QcQjAhBACEDA0AgAyAMRg0GIA8gAyAHakECdGooAgAoAhAoAmAiBQRAIAAgBRCOAgsgA0EBaiEDDAALAAsgAyAGKAIQKAL0AUcNASACIAJBuBdqIgM2AugWIBEoAgAiBigCECIFLQByIQQgBS0ApAFBIHEEQCADIAVBuAEQIBogAkHYFmoiBSAGQTAQIBogAiADNgLoFkEoQdgAIAIoAtgWQQNxIghBA0YbIAVqIAZBUEEAIAYoAgBBA3FBAkcbaigCKDYCACAvIC4gCEECRhsgBkEwQQAgBigCAEEDcUEDRxtqKAIoNgIAIDggBigCEEE4akEoECAaIDcgBigCEEEQakEoECAaIAIgBjYCsBggAkEBOgCoGCAFIQYgAyEFC0EBIQNBASAMIAxBAU0bIQgCQANAIAMgCEcEQCADQQJ0IANBAWohAyARaigCACgCEC0AckUNAQwCCwsgBEUNAwsgBkEoQXggBigCAEEDcSIDQQJGG2ooAgAhCAJAIAZBKEHYACADQQNGG2ooAgAiBhD+AkECRwRAQQAhBUEAIQRBACEDIAgQ/gJBAkcNAQtBwM4KLQAADQVBwM4KQQE6AABBv9wDQQAQJyAGEB4hAyAAEPoBIQUgAiAIEB42AqgCIAJBxdoBQbqYAyAFGzYCpAIgAiADNgKgAkG95QMgAkGgAmoQfAwFCwNAIAMgDEYEQCAFBEAgAkGkyApBrMgKIAAQ+gEbKAIANgKEA0H3/QAgAkGEA2pBABDNASIHQewlQZgCQQEQLhogB0EAQY70AEHl9AQQHxpBAUHgABAYIQQgBygCECIDIAQ2AgggBCAAKAIQIgUoAggiCSsDADkDACAEIAkrAxg5AxggAyAFLQBzOgBzIAMgBSgCdEF/c0EBcTYCdCADIAUoAvgBNgL4ASADIAUoAvwBNgL8ASAAEDRBAUEAEMkCIQMDQCADRQ0HIAdBASADKAIIIAMoAgwQHxogABA0QQEgAxDJAiEDDAALAAsFIBEgA0ECdGooAgAoAhAiCSgCYEEARyENAkAgCS0ALEUEQCAJLQBUQQFHDQELQQEhBQsgBCANaiEEIANBAWohAwwBCwsgBEUEQCAGIAggDyAHIAwgEhCbCQwFCyARKAIAIQVBACEDIAxBBBAYIQcDQCADIAxGBEAgByAMQQRBBRCUASAGKAIQIgkrABAhXiAFKAIQIgYrABAhYCACQfAaaiIDIAYrABggCSsAGKAiXTkDACACIGAgXqAiXjkD6BogBisAOCFgIAgoAhAiCCsAECFfIAJB+BlqIgUgBisAQCAIKwAYoDkDACACIGAgX6AiXzkD8BkgCSsDYCFgIAgrA1ghYSAHKAIAIQYgAiADKQMAIm43A6ggIAIgAikD6BoibzcDoCAgFCBvNwMAIBQgbjcDCCAgIAUpAwA3AwggICACKQPwGTcDACAVIAUpAwA3AwggFSACKQPwGTcDACAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCACQaAgakEEQbj1BxCdASAGKAIQKAJgIgYgXiBgoCJgIF8gYaEiY6BEAAAAAAAA4D+iIl45AzhBASEKIAZBAToAUSAGIF0gBisDICJfRAAAAAAAABhAoEQAAAAAAADgP6KgOQNAIF4gBisDGEQAAAAAAADgP6IiYaAhZCBeIGGhIWcgXyBdRAAAAAAAAAhAoCJmoCFdRAAAAAAAAAAAIWFEAAAAAAAAAAAhYgJAA0ACQCAEIApGBEAgBCAMIAQgDEsbIQkgYyBjoCBgoEQAAAAAAAAIQKMhbCBgIGCgIGOgRAAAAAAAAAhAoyFtDAELIAcgCkECdGooAgAhBgJAIApBAXEEQCAGKAIQKAJgIQggCkEBRgRAIF4gCCsDGEQAAAAAAADgP6IiX6AhYiBeIF+hIWELIAgrAyAhXyACIAIpA+gaNwOgICACIAIrA+gaOQOwICACIAIrA/AZOQPAICACIAMpAwA3A6ggIAIgZiBfRAAAAAAAABhAoKEiZkQAAAAAAAAYwKAiXzkDuCAgAiBfOQPIICAVIAUpAwA3AwggFSACKQPwGTcDACACIGI5A+AgIAIgYTkDkCEgAiBmOQOIISACIGE5A4AhIAIgZjkD+CAgAiBiOQPwICACIAUrAwA5A+ggIAIgAysDADkDmCEgZiAGKAIQKAJgKwMgRAAAAAAAAOA/oqAhXwwBCyACIAIpA+gaNwOgICACIGc5A7AgIAIgZDkD4CAgAiBdOQPYICACIGQ5A9AgIAIgXTkDyCAgAiBnOQPAICACIAIrA/gZIl85A+ggIAIgAisD8BkiZTkDgCEgAiBfOQP4ICACIGU5A/AgIAIgXUQAAAAAAAAYQKAiXzkDiCEgAiADKQMANwOoICACIAMrAwA5A7ggIAIgXzkDmCEgAiACKwPoGjkDkCEgXSAGKAIQKAJgKwMgImVEAAAAAAAA4D+ioEQAAAAAAAAYQKAhXyBdIGVEAAAAAAAAGECgoCFdCyACQQg2ApQZIAIgAykDADcD+AIgAiAFKQMANwPoAiACIAIpA+gaNwPwAiACIAIpA/AZNwPgAiACIAJBoCBqNgKQGSACIAIpApAZNwPYAgJAIAJB8AJqIAJB4AJqIAJB2AJqIAJBmBZqICkQ3w4iCARAIAIoApgWIg0NAQsgCBAXDAMLIAYoAhAoAmAiCUEBOgBRIAkgXzkDQCAJIF45AzggBiAGQVBBACAGKAIAQQNxQQJHG2ooAiggCCANQbj1BxCdASAIEBcgCkEBaiEKDAELCwNAIAQgCUYNASAHIARBAnRqAkAgBEEBcQRAIAIgAikD6Bo3A6AgIAIgAisD6Bo5A7AgIAIgAisD8Bk5A8AgIAIgAykDADcDqCAgAiBmRAAAAAAAABjAoCJfRAAAAAAAABjAoCJlOQO4ICAVIAUpAwA3AwggFSACKQPwGTcDACADKwMAIWggBSsDACFpIGwgYiAEQQFGIggbIl4haiBtIGEgCBsiYyFrIGMhYSBeIWIgXyJgIWYMAQsgAiACKQPoGjcDoCAgAiBnOQOwICACIGQ5A9AgIAIgZzkDwCAgAiADKQMANwOoICACIAMrAwA5A7ggIAIgXTkD2CAgAisD6BohayBkIV4gAisD+BkiaSFfIAIrA/AZImohYyBdImVEAAAAAAAAGECgImAhaCBgIV0LKAIAIQYgAkEINgKUGSACIAMpAwA3A9ACIAIgBSkDADcDwAIgAiBoOQOYISACIGs5A5AhIAIgYDkDiCEgAiBjOQOAISACIF85A/ggIAIgajkD8CAgAiBpOQPoICACIF45A+AgIAIgZTkDyCAgAiACKQPoGjcDyAIgAiACKQPwGTcDuAIgAiACQaAgajYCkBkgAiACKQKQGTcDsAICQCACQcgCaiACQbgCaiACQbACaiACQZgWaiApEN8OIghFDQAgAigCmBYiDUUNACAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCAIIA1BuPUHEJ0BIAgQFyAEQQFqIQQMAQsLIAgQFwsgBxAXDAYFIAcgA0ECdCIJaiAJIBFqKAIANgIAIANBAWohAwwBCwALAAsgAUUNByAAEBohBCACQaggaiEFA0AgBEUNCCAAIAQQKSEDA0ACQCADBEAgA0G49QcoAgARAgBFDQEgAygCECgCCCIHRQ0BIAcoAgQiCUEBdiEBQQAhBkEAIQsDQCABIAtHBEAgAkGgIGoiCCAHKAIAIg4gC0EwbGoiDUEwECAaIA0gDiAJIAtBf3NqQTBsIg1qQTAQIBogBygCACANaiAIQTAQIBogC0EBaiELDAELCwNAIAYgCUYNAiAHKAIAIAZBMGxqIgEoAgQiDkEBdiENQQAhCwNAIAsgDUcEQCAFIAEoAgAiCiALQQR0aiIIKQMINwMAIAIgCCkDADcDoCAgCCAKIA4gC0F/c2pBBHQiDGoiCikDADcDACAIIAopAwg3AwggASgCACAMaiIIIAIpA6AgNwMAIAggBSkDADcDCCALQQFqIQsMAQsLIAEgASkDCEIgiTcDCCAFIAEpAxg3AwAgAiABKQMQNwOgICABIAEpAyA3AxAgASABKQMoNwMYIAEgAikDoCA3AyAgASAFKQMANwMoIAZBAWohBgwACwALIAAgBBAbIQQMAgsgACADECwhAwwACwALAAsgAkHQFmpBADYCACACQgA3A8gWIAJBwBZqQQA2AgAgAkIANwO4FiACIAJB2A9qIgc2AoAaIAIgAkGgCmoiBDYCoBkgAiACQbgXajYC6BYgESgCACIJKAIQIQUCQAJAIAkgCUEwaiIDIAkoAgAiCkEDcSIIQQNGGygCKCgCECgC9AEgCSAJQTBrIgYgCEECRhsoAigoAhAoAvQBayIIIAhBH3UiCHMgCGsiJEECTwRAIAcgBUG4ARAgGiACQfAZaiIIIAlBMBAgGiAjIANBMBAgGiACIAc2AoAaIAkoAhAiBSgCpAEhByAEIAVBuAEQIBogAkGQGWoiDSAJQTAQIBogAiAENgKgGSAJKAIAQQNxIQUCQCAHQSBxBEBBKEHYACACKAKQGUEDcSIHQQNGGyANaiAJIAYgBUECRhsoAig2AgAgMSAwIAdBAkYbIAkgAyAFQQNGGygCKDYCACA6IAkoAhBBOGpBKBAgGiAiIAkoAhBBEGpBKBAgGiACIAk2ApgLIAJBAToAkAtBKEHYACACKALwGSIKQQNxQQNGGyAIaiAJIAYgCSgCAEEDcUECRhsoAig2AgAgMiAJKAIQQThqQSgQIBoMAQsgAkHwGWpBKEHYACACKALwGSIKQQNxQQNGG2ogCSADIAVBA0YbKAIoNgIAIDkgA0EwECAaCyAJELsDIQMDQCADIgUoAhAoArABIgMNAAsgNCAzIApBA3FBAkYbIAVBUEEAIAUoAgBBA3FBAkcbaigCKDYCACACQQE6AMgQIAJBADoArBAgG0IANwMIIBtCADcDAAwBCyAFLQCkAUEgcUUNASACQdgPaiIHIAVBuAEQIBogAkHwGWoiBSAJQTAQIBogAiAHNgKAGiAFQShB2AAgAigC8BkiCkEDcSIHQQNGG2ogCSAGIAkoAgBBA3FBAkYbKAIoNgIAIDQgMyAHQQJGGyAJIAMgCSgCAEEDcUEDRhsoAig2AgAgMiAJKAIQQThqQSgQIBogGyAJKAIQQRBqQSgQIBogAkEBOgDIEAsgAiAJNgLQECACQfAZaiEJCwJAAkAgGg0AIAkhAwNAIAMoAhAiBS0AcARAIAUoAnghAwwBCwsCQAJAIANBKEF4IAMoAgBBA3EiBkECRhtqKAIAIgQoAhAoAvQBIANBKEHYACAGQQNGG2ooAgAiCCgCECgC9AFrIgZBH3UiB0F/cyAGIAdzag4CAgABCyAAKAJIKAIQLQBxQQFxDQELIAQgCCAJQShB2AAgCkEDcUEDRhtqKAIAIAhGIgcbIgYoAhAiDSsAECFgIAVBOEEQIAcbaisAACFfIA0rABghYSAFQcAAQRggBxtqKwAAIWIgCCAEIAcbKAIQIggrABAhXiAFQRBBOCAHG2orAAAhZCACIAVBGEHAACAHG2orAAAgCCsAGKAiXTkDoBYgAiBkIF6gIl45A5gWIAIgYiBhoCJhOQOIGSACIF8gYKAiYjkDgBkgAiAFKAJgIgUEfyAFKwMgIWAgBSsDGCFfIAQQKygCECgCdCEHIAJB+BhqIgUgAygCECgCYCIDQUBrKQMANwMAIAMpAzghbiACIAJBoBZqIgQpAwA3A5AEIAIgbjcD8BggBSAFKwMAImQgXyBgIAdBAXEiAxtEAAAAAAAA4D+iImOaIGMgYSBdoSACKwPwGCJhIF6hoiBiIF6hIGQgXaGioUQAAAAAAAAAAGQiBxugOQMAIAIgAikDmBY3A4gEIAIgYSBgIF8gAxtEAAAAAAAA4D+iIl0gXZogBxugOQPwGCACQcgWaiIDIAJBiARqEN4BIAIgBCkDADcDgAQgAiACKQOYFjcD+AMgAyACQfgDahDeASACIAUpAwA3A/ADIAIgAikD8Bg3A+gDIAMgAkHoA2oQ3gEgAkHwGGoFIAJBmBZqCyIDKQMINwPgAyACIAMpAwA3A9gDIAJByBZqIgUgAkHYA2oQ3gEgAiADKQMINwPQAyACIAMpAwA3A8gDIAUgAkHIA2oQ3gEgAiACQYgZaiIDKQMANwPAAyACIAIpA4AZNwO4AyAFIAJBuANqEN4BIAIgAykDADcDsAMgAiACKQOAGTcDqAMgBSACQagDahDeAQwBCyACQfgYakEANgIAIAJCADcD8BggCUEoQXggCkEDcSIDQQJGG2ooAgAhCCACQZgWaiAAIAJBuAVqIAlBKEHYACADQQNGG2ooAgAiBEEAIAkQiQMgAkG4IGoiJSACQbAWaiIdKQMANwMAIBQgAkGoFmoiHikDADcDACACQaggaiImIAJBoBZqIhgpAwA3AwAgAiACKQOYFjcDoCAgFCsDACFdIAIrA6AgIV4gAkHgBWogCUEBIAJBoCBqIAQQgQQQ5wUCQCBdIF5kRQ0AIAQoAhAiAysDGCAAKAIQKALEASADKAL0AUEGdGorAxChImAgAigC1CAiBUEFdCAXaiIDQRhrKwMAIl9jRQ0AIAIgBUEBajYC1CAgAyBfOQMYIAMgXTkDECADIGA5AwggAyBeOQMAC0EAIRBBfyEZQQAhEyAJIgchDQNAIAghBiAHIQUgEyEKIA0hAwNAAkACfwJAAkAgBigCEC0ArAFBAUcNACAGQbz1BygCABECAA0AIAJB+BVqIAJBuAVqIAAgBCgCECgC9AEQiAkgAiACQZAWaikDADcDsAUgAiACQYgWaikDADcDqAUgAiACQYAWaikDADcDoAUgAiACKQP4FTcDmAUgAkHwGGogAkGYBWoQgAQCQAJAIApBAXFFBEBBACEQIAYoAhAiCiEEA0ACQCAEKALIASgCACIHQVBBACAHKAIAQQNxQQJHG2ooAigoAhAiBC0ArAFBAUcNACAEKALMAUEBRw0AIAQoAsQBQQFHDQAgBCsDECAKKwMQYg0AIBBBAWohEAwBCwtBACETQQVBAyAAKAJIKAIQLQBxQQFxGyAQSwRAIAYhCCAFIQcMAgsgEEECayEQQQEhEyAGIQggBSEHQQEhGQwBCyAZQQBMDQEgBigCECEKIA0hAwsgAkHYFWogACACQbgFaiAIIAMgCigCyAEoAgAQiQMgAiACQfAVaikDADcDkAUgAiACQegVaikDADcDiAUgAiACQeAVaikDADcDgAUgAiACKQPYFTcD+AQgGUEBayEZIAJB8BhqIAJB+ARqEIAEIAYoAhAoAsgBKAIAIg1BUEEAIA0oAgBBA3EiA0ECRxtqKAIoIQggDUEwQQAgA0EDRxtqKAIoIQQMBgsgAkGYFmogACACQbgFaiAGIAMgBigCECgCyAEoAgAQiQMgAkGAG2ogHSkDADcDACACQfgaaiAeKQMANwMAIAJB8BpqIBgpAwA3AwAgAiACKQOYFjcD6BogAkHgBWogA0EBIAJB6BpqIANBKEF4IAMoAgBBA3FBAkYbaigCABCBBBDmBQJAIAIoApwbIh9BBXQgFmoiBEEgayIKKwMAIl0gCisDECJeY0UNACAKKwMYImAgBigCECIKKwMYIAAoAhAoAsQBIAooAvQBQQZ0aisDGKAiX2NFDQAgAiAfQQFqNgKcGyAEIF85AxggBCBeOQMQIAQgYDkDCCAEIF05AwALIAJBAToApQYgAkKY2pCitb/I/D83A5gGIAJB4AVqIgQgBSADIAJBoCBqIAJB6BpqIAJB8BhqEIMJIAJBADYC1BUgHEUEQCAEIAJB1BVqEMEEIQogAigC1BUhAwwCCyACQeAFaiACQdQVahC/BCEKIBogAigC1BUiA0EFSXINASAKIAopAwA3AxAgCiAKKQMINwMYIAogCiADQQR0akEQayIDKQMANwMgIAogAykDCDcDKCADKQMAIW4gCiADKQMINwM4IAogbjcDMCACQQQ2AtQVQQQMAgsgAkGwFWogAkG4BWoiByAAIAQoAhAoAvQBEIgJIAIgAkHIFWopAwA3A8AEIAIgAkHAFWopAwA3A7gEIAIgAkG4FWopAwA3A7AEIAIgAikDsBU3A6gEIAJB8BhqIAJBqARqEIAEIAJBmBZqIAAgByAGIANBABCJAyACQYAbaiAdKQMANwMAIAJB+BpqIgcgHikDADcDACACQfAaaiAYKQMANwMAIAIgAikDmBY3A+gaIAcrAwAhXSACKwPoGiFeIAJB4AVqIAJBkBlqIAMgJEEBSyIIG0EBIAJB6BpqIANBKGoiDSADQQhrIhAgAygCAEEDcUECRhsoAgAQgQQQ5gUCQCBdIF5kRQ0AIAIoApwbIgRBBXQgFmoiB0EIaysDACJgIAYoAhAiBisDGCAAKAIQKALEASAGKAL0AUEGdGorAxigIl9jRQ0AIAIgBEEBajYCnBsgByBfOQMYIAcgXTkDECAHIGA5AwggByBeOQMACyACQeAFaiIGIAUgAyACQaAgaiACQegaaiACQfAYaiIHEIMJIAcQ5gQgAkEANgKYFgJAAn8CQCAcRQRAIAYgAkGYFmoQwQQhBiACKAKYFiEEDAELIAJB4AVqIAJBmBZqEL8EIQYgGiACKAKYFiIEQQVJcg0AIAYgBikDADcDECAGIAYpAwg3AxggBiAGIARBBHRqQRBrIgcpAwA3AyAgBiAHKQMINwMoIAcpAwAhbiAGIAcpAwg3AzggBiBuNwMwIAJBBDYCmBZBBAwBCyAERQ0BIAQLIQpBACEEA0AgBCAKTwRAIAYQFyAFIAJB4AVqEP0IAn8gCARAIDEgMCACKAKQGUEDcUECRhsMAQsgDSAQIAMoAgBBA3FBAkYbCygCACEGDAgFIAIgBiAEQQR0aiIHKQMINwOgBCACIAcpAwA3A5gEIARBAWohBCACQcgWaiACQZgEahDeASACKAKYFiEKDAELAAsACyAGEBcgAkHIFmoQ0QIgAkG4FmoQ0QIMCAsgA0UNASADCyEEQQAhAwNAIAMgBE8EQCAKEBcgBigCECgCyAEoAgAhAyAQIQQDQCAEBEAgBEEBayEEIANBUEEAIAMoAgBBA3FBAkcbaigCKCgCECgCyAEoAgAhAwwBCwsgAigCzBYiBARAIAJBmBZqIgogAkHIFmoiBiAEQQFrEOQEIAIgGCkDADcD8AQgAiACKQOYFjcD6AQgBiACQegEahDeASACQYAZaiAGIAIoAswWQQFrEOQEIAIgAkGIGWopAwA3A+AEIAIgAikDgBk3A9gEIAYgAkHYBGoQ3gEgBSACQeAFaiIFEP0IIANBUEEAIAMoAgBBA3EiBEECRxtqKAIoIQYgA0EwQQAgBEEDRxtqKAIoIQQgAkEANgL0GCAKIAAgAkG4BWogBCAEKAIQKALAASgCACADEIkDICUgHSkDADcDACAUIB4pAwA3AwAgJiAYKQMANwMAIAIgAikDmBY3A6AgIAUgA0EBIAJBoCBqIAQQgQQQ5wUCQCACKALUICIfQQV0IBdqIgVBIGsiCisDACJdIAorAxAiXmNFDQAgBCgCECInKwMYIAAoAhAoAsQBICcoAvQBQQZ0aisDEKEiYCAKKwMIIl9jRQ0AIAIgH0EBajYC1CAgBSBfOQMYIAUgXjkDECAFIGA5AwggBSBdOQMACyACQQE6AP0FIAJCmNqQorW/yPy/fzcD8AVBACEKIAMhBQwEC0HBmQNB5bgBQb0QQaH4ABAAAAUgAiAKIANBBHRqIgQpAwg3A9AEIAIgBCkDADcDyAQgA0EBaiEDIAJByBZqIAJByARqEN4BIAIoAtQVIQQMAQsACwALCwsgChAXIAJB8BhqEOYEIAJByBZqENECIAJBuBZqENECDAMLIAxBAUYEQCAJIAYgAkHIFmoiAxCdBiACKALMFkG49QcQnQEgAxDRAiACQbgWahDRAgwDCyACKwPQBSJdIAxBAWu4okQAAAAAAADgP6IhXkEBIQMDQCADQQFqIgUgAigCzBYiBE8EQEEAIQMDQCADIARPBEAgCSAGIAJBuBZqEJ0GIAIoArwWQbj1BxCdAUEBIQZBASAMIAxBAU0bIQcDQCAGIAdGBEAgAkHIFmoQ0QIgAkG4FmoQ0QIMCAsgESAGQQJ0aigCACIMKAIQIgMtAKQBQSBxBEAgAigC6BYgA0G4ARAgIQUgAkHYFmoiAyAMQTAQIBogAiAFNgLoFkEoQdgAIAIoAtgWQQNxIgRBA0YbIANqIAxBUEEAIAwoAgBBA3FBAkcbaigCKDYCACAvIC4gBEECRhsgDEEwQQAgDCgCAEEDcUEDRxtqKAIoNgIAIAVBEGogDCgCEEE4akEoECAaIAIoAugWIgVBOGogDCgCEEEQakEoECAaIAUgDDYCeCAFQQE6AHAgAyEMC0EBIQMDQCADQQFqIgUgAigCzBYiBE8EQEEAIQMgAkEANgK8FgNAIAMgBE8EQCAMIAxBKEF4IAwoAgBBA3FBAkYbaigCACACQbgWahCdBiACKAK8FkG49QcQnQEgBkEBaiEGDAQFIAJBkBVqIAJByBZqIAMQ5AQgAiACQZgVaikDADcDoAMgAiACKQOQFTcDmAMgA0EBaiEDIAJBuBZqIAJBmANqEN4BIAIoAswWIQQMAQsACwAFIAJByBZqIAMQnAYiAyBdIAMrAwCgOQMAIAUhAwwBCwALAAsABSACQaAVaiACQcgWaiADEOQEIAIgAkGoFWopAwA3A5ADIAIgAikDoBU3A4gDIANBAWohAyACQbgWaiACQYgDahDeASACKALMFiEEDAELAAsABSACQcgWaiADEJwGIgMgAysDACBeoTkDACAFIQMMAQsACwALIAUoAmAiBARAIAZBKGoiCSAGQQhrIg0gBigCAEEDcSIDQQJGGygCACEIIAZBKEHYACADQQNGG2ooAgAhByAFKAKwASEDA0AgAyIFKAIQKAKwASIDDQALIAQgBUEwQQAgBSgCAEEDcUEDRxtqKAIoIgooAhAiAykDEDcDOCAEQUBrIAMpAxg3AwAgBigCECIDKAJgIgVBAToAUQJAAkAgGkUEQCADKwA4IV0gCCgCECIEKwAQIV4gAysAQCFgIAQrABghXyAFKwM4IWEgBSsDQCFiIAUrAyAhZCADKwAQIWMgBygCECIFKwAQIWUgAiADKwAYIAUrABigOQP4GSAtIAIpA/gZNwMIIAIgYyBloDkD8BkgLSACKQPwGTcDACACIGIgZEQAAAAAAADgv6KgOQO4GiACIGE5A7AaICMgISkDADcDACAjICEpAwg3AwggLCAhKQMANwMAICwgISkDCDcDCCACIGAgX6A5A9gaIAIgXSBeoDkD0BogKyAqKQMINwMIICsgKikDADcDAEEHIQQgAkEHNgKYFiACQfAZaiEDDAELIAAoAhAoAsQBIAcoAhAiBSgC9AFBBnRqIgMrAxghYCADKwMQIV8gCigCECIDKwNgIWEgAysDUCFiIAUrAxghZCADKwMYIV0gAysDWCFjIAMrAxAhXiAAIAJBuAVqIgUgAkHgBWoiBCAHIAYgAkGgIGpBARDjBEEAIQMgACAFIAQgCCAGIAJB6BpqQQAQ4wQgAiACKALUICIKQQV0IBdqQSBrIgUrAwAiZTkDkBkgAiAFKwMYOQOYGSACIF4gY6E5A6AZIAIgXSBiRAAAAAAAAOA/oqAiYkQAAAAAAAAUQCBgIF0gX6EgZKGgRAAAAAAAABhAoyJdIF1EAAAAAAAAFEBjG6EiXTkDqBkgAiBlOQOwGSACIF05A7gZIAIgAigCnBtBBXQgFmpBIGsiBSsDECJgOQPAGSACIF4gYaA5A9AZIAIgYjkDyBkgAiAFKwMYOQPYGSACIF05A+gZIAIgYDkD4BlBACEEA0AgBCAKSARAIAIgFyAEQQV0aiIFKQMYNwPYASACIAUpAxA3A9ABIAIgBSkDCDcDyAEgAiAFKQMANwPAASAEQQFqIQQgAkHgBWogAkHAAWoQ/AEgAigC1CAhCgwBCwsDQCADQQNHBEAgAiACQZAZaiADQQV0aiIFKQMINwOIAiACIAUpAxg3A5gCIAIgBSkDEDcDkAIgAiAFKQMANwOAAiADQQFqIQMgAkHgBWogAkGAAmoQ/AEMAQsLIAIoApwbIQQDQCAEQQBKBEAgAiAWIARBAWsiBEEFdGoiAykDGDcD+AEgAiADKQMQNwPwASACIAMpAwg3A+gBIAIgAykDADcD4AEgAkHgBWogAkHgAWoQ/AEMAQsLAn8gHEUEQCACQeAFaiACQZgWahDBBAwBCyACQeAFaiACQZgWahC/BAshAyACKAKYFiIERQ0BCyAGIAkgDSAGKAIAQQNxQQJGGygCACADIARBuPUHEJ0BIBJBAkYNAwsgAxAXDAILIBpFBEAgBkEoQdgAIAYoAgBBA3EiA0EDRhtqKAIAIAZBKEF4IANBAkYbaigCACAPIAcgDEECEJsJDAILAkACQCAFLQBZIgNBBEYgBS0AMSIFQQFHckUEQCAGKAIAIQQMAQsgBigCACEEIAVBBEYgA0EBR3INAQsgBkEoQXggBEEDcSIDQQJGG2ooAgAhBwJ8IAZBKEHYACADQQNGG2ooAgAiBSgCECIEKAL0ASIIIAAoAhAiAygC7AFIBEAgBCsDGCADKALEASAIQQZ0aiIDKwMgoSADKAJEKAIAKAIQKwMYIAMrA2igoQwBCyADKAL8AbcLIAIrA9AFIWAgACACQbgFaiIDIAJB4AVqIgQgBSAGIAJBoCBqQQEQ9ghBACEFIAAgAyAEIAcgBiACQegaakEAEPYIIAxBAWq4Il2jIV4gYCBdoyFgA0AgBSAMRg0DIBEgBUECdGooAgAhBiACKALUICIKQQV0IBdqQSBrIgMrAxAhXyADKwMAIV0gAiADKwMIImE5A4gaIAIgXTkD8BkgAiBdOQOQGiACIF8gBUEBaiIFuCJdIGCiIl+gOQOAGiACIGEgXSBeoqEiXTkDqBogAiBdOQP4GSACIAIoApwbQQV0IBZqQSBrIgMrAxAiYTkDoBogAiBdIF6hOQOYGiADKwMAIWIgAiADKwMIOQPIGiACIF05A7gaIAIgYTkDwBogAiBiIF+hOQOwGkEAIQNBACEEA0AgBCAKSARAIAIgFyAEQQV0aiIHKQMYNwMYIAIgBykDEDcDECACIAcpAwg3AwggAiAHKQMANwMAIARBAWohBCACQeAFaiACEPwBIAIoAtQgIQoMAQsLA0AgA0EDRwRAIAIgAkHwGWogA0EFdGoiBykDCDcDSCACIAcpAxg3A1ggAiAHKQMQNwNQIAIgBykDADcDQCADQQFqIQMgAkHgBWogAkFAaxD8AQwBCwsgAigCnBshBANAIARBAEoEQCACIBYgBEEBayIEQQV0aiIDKQMYNwM4IAIgAykDEDcDMCACIAMpAwg3AyggAiADKQMANwMgIAJB4AVqIAJBIGoQ/AEMAQsLIAJBADYCkBkCfyAcRQRAIAJB4AVqIAJBkBlqEMEEDAELIAJB4AVqIAJBkBlqEL8ECyEDIAIoApAZIgcEQCAGIAZBUEEAIAYoAgBBA3FBAkcbaigCKCADIAdBuPUHEJ0BIAMQFyACQQA2ArAGDAEFIAMQFwwECwALAAsgBkEoQXggBEEDcSIDQQJGG2ooAgAhBwJ8IAZBKEHYACADQQNGG2ooAgAiAygCECIFKAL0ASIEQQBKBEAgACgCECgCxAEgBEEGdGoiBEGAf0FAIAAoAkgoAhAtAHFBAXEbaiIIKAIEKAIAKAIQKwMYIAgrAxChIAUrAxihIAQrAxihDAELIAAoAhAoAvwBtwsgAisD0AUhYCAAIAJBuAVqIgQgAkHgBWoiCCADIAYgAkHYD2pBARDjBEEAIQUgACAEIAggByAGIAJBoApqQQAQ4wQgDEEBargiXaMhXiBgIF2jIWADQCAFIAxGDQIgESAFQQJ0aigCACEGIAIoAowQIgpBBXQgG2pBIGsiAysDECFfIAMrAxghXSACIAMrAwAiYTkDwCAgAiBdOQOoICACIGE5A6AgIAIgXSAFQQFqIgW4ImEgXqKgIl05A8ggIAIgXTkDuCAgAiBfIGEgYKIiX6A5A7AgIAIgAigC1ApBBXQgImpBIGsiAysDECJhOQPQICACIF4gXaA5A9ggIAMrAwAhYiACIAMrAxg5A+ggIAIgXTkD+CAgAiBhOQPwICACIGIgX6E5A+AgQQAhA0EAIQQDQCAEIApIBEAgAiAbIARBBXRqIgcpAxg3A3ggAiAHKQMQNwNwIAIgBykDCDcDaCACIAcpAwA3A2AgBEEBaiEEIAJB4AVqIAJB4ABqEPwBIAIoAowQIQoMAQsLA0AgA0EDRwRAIAIgAkGgIGogA0EFdGoiBykDCDcDqAEgAiAHKQMYNwO4ASACIAcpAxA3A7ABIAIgBykDADcDoAEgA0EBaiEDIAJB4AVqIAJBoAFqEPwBDAELCyACKALUCiEEA0AgBEEASgRAIAIgIiAEQQFrIgRBBXRqIgMpAxg3A5gBIAIgAykDEDcDkAEgAiADKQMINwOIASACIAMpAwA3A4ABIAJB4AVqIAJBgAFqEPwBDAELCyACQQA2AugaAn8gHEUEQCACQeAFaiACQegaahDBBAwBCyACQeAFaiACQegaahC/BAshAyACKALoGiIHBEAgBiAGQVBBACAGKAIAQQNxQQJHG2ooAiggAyAHQbj1BxCdASADEBcgAkEANgKwBgwBBSADEBcMAwsACwALIAAQNEECQQAQyQIhAwNAIAMEQCAHQQIgAygCCCADKAIMEB8aIAAQNEECIAMQyQIhAwwBCwsgB0ECQd0aQQAQH0UEQCAHQQJB3RpB5fQEEB8aCyAHQQJBoRpBABAfRQRAIAdBAkGhGkHl9AQQHxoLQfSLCygCACEYQcCLCygCACEZQYiNCygCACEdQdSMCygCACEeQfiMCygCACEkQfSMCygCACElQeyMCygCACEmQfCMCygCACEfQeSMCygCACEnQeCMCygCACE+QeiMCygCACE/QdyMCygCACFAQdCMCygCACFBQcyMCygCACFCQcSMCygCACFDQcCMCygCACFEQbyMCygCACFFQdiMCygCACFGQZCMCygCACFHQYyMCygCACFIQYiMCygCACFJQeCNCygCACFKQZyOCygCACFLQbSOCygCACFMQaCOCygCACFNQaSOCygCACFOQaiOCygCACFPQYSOCygCACFQQdyNCygCACFRQZiOCygCACFSQbiOCygCACFTQdCNCygCACFUQdSNCygCACFVQdiNCygCACFWQaSNCygCACFXQaCNCygCACFYQYyOCygCACFZQYiOCygCACFaQfiNCygCACFbQfiNC0EANgIAQYiOCyAHQQJBk7EBQQAQHzYCAEGMjgsgB0ECQb7uAEEAEB82AgBBoI0LIAdBAkHGH0EAEB8iAzYCACADRQRAQaCNCyAHQQJBxh9B5fQEEB82AgALQQAhBUHYjQtBADYCAEGkjQtBADYCAEHUjQsgB0ECQZSYAUEAEB82AgBB0I0LIAdBAkHNhwFBABAfNgIAQbiOCyAHQQJBm9oAQQAQHzYCAEGYjgtBADYCAEHcjQsgB0ECQarwAEEAEB82AgBBhI4LIAdBAkHpJEEAEB82AgBBqI4LQQA2AgBBpI4LIAdBAkGPmAFBABAfNgIAQaCOCyAHQQJByIcBQQAQHzYCAEG0jgsgB0ECQZLaAEEAEB82AgBBnI4LQQA2AgBB4I0LQQA2AgBBiIwLIAdBAUHOH0EAEB82AgBBjIwLIAdBAUHV9wBBABAfNgIAQZCMCyAHQQFBgpYBQQAQHzYCAEHYjAtBADYCAEG8jAsgB0EBQc2HAUEAEB82AgBBwIwLIAdBAUGUmAFBABAfNgIAQcSMC0EANgIAQcyMCyAHQQFBqvAAQQAQHzYCAEHQjAtBADYCAEHcjAtBADYCAEHojAsgB0EBQYCAAUEAEB82AgBB4IwLIAdBAUGbMUEAEB82AgBB5IwLIAdBAUHuL0EAEB82AgBB8IwLIAdBAUGAFkEAEB82AgBB7IwLIAdBAUHY4gBBABAfNgIAQfSMCyAHQQFB6+EAQQAQHzYCAEH4jAsgB0EBQcGpAUEAEB82AgBB1IwLQQA2AgBBiI0LQQA2AgBB9IsLIAdBAEGAgAFBABAfNgIAIAdBphFBARCQASIDQewlQZgCQQEQLhogA0GO9ABBoaABEOUBIAYoAhArAxAhXiAIKAIQKwMQIWAgAyAIIAYgACgCECgCdEEBcSIDGyINEPUIIQkgByAGIAggAxsiEBD1CCEIQQAhBgNAIAYgDEYEQCAFRQRAIAcgCSAIQQBBARBSIQULIAVBoI0LKAIAQceOAxBoIAAoAhAoApABIQMgBygCECIGIAc2ArwBIAYgAzYCkAEgByASEI0CIAcQkgogBxDPDCAHEIYPIAcQpA0gBygCEEHAAWohAyAJKAIQKwMQIAgoAhArAxCgRAAAAAAAAOA/oiFdIA0oAhAiBisDECAGKwNgoSAQKAIQIgYrAxCgIAYrA1igRAAAAAAAAOA/oiFfA0AgAygCACIDBEACQCADIAlGBEAgAygCECIEIF05AxAgBCBgOQMYDAELIAMoAhAhBCADIAhGBEAgBCBdOQMQIAQgXjkDGAwBCyAEIF85AxgLIARBuAFqIQMMAQsLIAcQkQwgB0EAELwJIAcQrQMgCSgCECEDIA0oAhAiBisDGCFdIAYrAxACfyAAKAIQLQB0QQFxBEAgXSADKwMQoCFdIANBGGoMAQsgXSADKwMYoSFdIANBEGoLKwMAoSFeQQAhCANAIAggDEYEQEGIjgsgWjYCAEH4jQsgWzYCAEGMjgsgWTYCAEGgjQsgWDYCAEGkjQsgVzYCAEHYjQsgVjYCAEHUjQsgVTYCAEHQjQsgVDYCAEG4jgsgUzYCAEGYjgsgUjYCAEHcjQsgUTYCAEGEjgsgUDYCAEGojgsgTzYCAEGkjgsgTjYCAEGgjgsgTTYCAEG0jgsgTDYCAEGcjgsgSzYCAEHgjQsgSjYCAEGIjAsgSTYCAEGMjAsgSDYCAEGQjAsgRzYCAEHYjAsgRjYCAEG8jAsgRTYCAEHAjAsgRDYCAEHEjAsgQzYCAEHMjAsgQjYCAEHQjAsgQTYCAEHcjAsgQDYCAEHojAsgPzYCAEHgjAsgPjYCAEHkjAsgJzYCAEHwjAsgHzYCAEHsjAsgJjYCAEH0jAsgJTYCAEH4jAsgJDYCAEHUjAsgHjYCAEGIjQsgHTYCAEH0iwsgGDYCAEHAiwsgGTYCACAHEIoKIAcQlQEMBAUgESAIQQJ0aiEDA0AgAygCACINKAIQIgZB+ABqIQMgBi0AcA0ACyAGKAJ8IhAoAhAhAwJAIAUgEEYEQCADKAJ8RQ0BCyANIAMoAggoAgAiAygCBBCOCCIGIAMoAgg2AgggBiBdIAMrABAiYJogAysAGCJfIAAoAhAoAnRBAXEiBBugOQMYIAYgXiBfIGAgBBugOQMQIAYgAygCDDYCDCAGIF4gAysAKCJgIAMrACAiXyAEG6A5AyAgBiBdIF+aIGAgBBugOQMoQQAhCgNAAkAgCiADKAIETw0AIApBBHQiEyAGKAIAaiIJIF4gAygCACATaiIEKwAIImAgBCsAACJfIAAoAhAiXCgCdEEBcSIEG6A5AwAgCSBdIF+aIGAgBBugOQMIIAIgCSkDADcDoCAgAiAJKQMINwOoICAKQQFqIgkgAygCBE8NACAJQQR0IiggBigCAGoiCSBeIAMoAgAgKGoiKCsACCJgICgrAAAiXyAEG6A5AwAgCSBdIF+aIGAgBBugOQMIIBQgCSkDADcDACAUIAkpAwg3AwggE0EgaiITIAYoAgBqIgkgXiADKAIAIBNqIhMrAAgiYCATKwAAIl8gBBugOQMAIAkgXSBfmiBgIAQboDkDCCAgIAkpAwA3AwAgICAJKQMINwMIIAIgXiADKAIAIApBA2oiCkEEdGoiCSsACCJgIAkrAAAiXyAEG6A5A9AgIAIgXSBfmiBgIAQboDkD2CAgXEEQaiACQaAgahD5BQwBCwsgDSgCECgCYCIDRQ0AIBAoAhAoAmAiBisAQCFgIAYrADghXyAAKAIQKAJ0IQYgA0EBOgBRIAMgXiBgIF8gBkEBcSIGG6A5AzggAyBdIF+aIGAgBhugOQNAIAAgAxCOAgsgCEEBaiEIDAELAAsABSARIAZBAnRqIQMDQCADKAIAIgQoAhAiCkH4AGohAyAKLQBwDQALAn8gDSAEQTBBACAEKAIAQQNxQQNHG2ooAihGBEAgByAJIAggBBD0CAwBCyAHIAggCSAEEPQICyEDIAQoAhAiCiADNgJ8AkAgBQ0AQQAhBSAKLQAsDQAgCi0AVA0AIAMoAhAgBDYCfCADIQULIAZBAWohBgwBCwALAAsAC0HGngNB5bgBQb8CQaTCARAAAAsgBUEBaiEFDAALAAsCQEGYjgsoAgBBnI4LKAIAckUNAEGwjgsoAgBBrI4LKAIAckUNACAAEBohCgNAIApFDQECQEGYjgsoAgBFDQAgACAKELECIQsDQCALRQ0BIAsgC0EwayIBIAsoAgBBA3FBAkYbIgMoAhAoAmQEQCADQQEQ5AUaIAAgCyABIAsoAgBBA3FBAkYbKAIQKAJkEI4CCyAAIAsQ+AIhCwwACwALAkBBnI4LKAIARQ0AIAAgChApIQsDQCALRQ0BAkAgCygCECgCaEUNACALQQAQ5AVFDQAgACALKAIQKAJoEI4CCyAAIAsQLCELDAALAAsgACAKEBshCgwACwALAkACQCASQQRrDgUBAAAAAQALIAIoAtgFEBcjAEEQayIAJABBlJELQZSRCygCACIBQQFrNgIAAkAgAUEBSg0AQYCLCy0AAEUNAEGYkQsoAgAhAUGckQsoAgAhAyAAEIoBOQMIIAAgAzYCBCAAIAE2AgBB6PoGKAIAQZO8BCAAEC0LIABBEGokAAsgDxAXIAIoArQGEBdBxIsLQQE2AgBBwIsLQQE2AgALIAJB4CVqJAALmwEBAX9BAUHYABAYIgBC4tu9p5aQgPi/fzcDACAAQQA2AlAgAEIANwNIIABCgICAgICAgIhANwNAIABBAzYCPCAAQQE6ADggAEIANwMwIABB+wA2AiggAEKas+bMmbPm3D83AyAgAEH0AzYCGCAAQoCAgICgATcDECAAQoCAgICAgID4v383AwggACAALQAsQfgBcUEDcjoALCAACygBAX8CQCAARQ0AIAAoAgAiAQRAIAEQZAsgACgCBCIARQ0AIAAQFwsLshkCJX8IfCAAKAIMIRsgACgCBCEPIAAoAggiAxCJBCEaAkACQCAPKAIAIg4gAWwiGEEIEEYiHEUNACAcIAIgGEEDdBAgISAgGEEIEEYiE0UNACAPKAIcISEgGigCHCEdIAMoAhwhIiADKAIYISMgAygCFCEeAkACQAJAAkACQCAAKAIYQQFGBEAgACgCFCIFKwMAISkgBSgCHCEHIAUoAhghCSAFKAIUIQYgBSgCECEUIAUoAgwhCCAFKAIgIgMoAhghCyADKAIUIRUCfyAFKAIIIgNBfXFBAUYEQAJAIAYEQCAIQQAgCEEAShshEAwBCyAHIAlyDQZBACEDIAhBACAIQQBKGyEQA0AgBCAQRwRAAn8gFSAUIARBAnRqKAIAQQJ0aiIHKAIEIAcoAgBrt0QAAAAAAADwP6AiKCAooiIomUQAAAAAAADgQWMEQCAoqgwBC0GAgICAeAsgA2ohAyAEQQFqIQQMAQsLIAUgA0EEEBgiBjYCFCAFIANBBBAYIgk2AhggBSADQQgQGCIHNgIcCyApmiEsQQAhBANAIAogEEcEQAJAIAsgFSAUIApBAnRqKAIAIghBAnRqIgUoAgBBAnRqIgMoAgAiDCADKAIEIgNGDQAgAiABIAwgAxCZAiEoIAUoAgQhAyAFKAIAIQwgBiAEQQJ0Ig1qIAg2AgAgCSANaiAINgIAIAcgBEEDdGogKSAoICiiIiijOQMAICwgKCADIAxrtyIqoqMhKyAFKAIAIQMDQCAEQQFqIQQgBSgCBCINIANKBEAgBiAEQQJ0IgxqIAg2AgAgCSAMaiALIANBAnRqKAIANgIAIAcgBEEDdGogKzkDACADQQFqIQMMAQsLICkgKCAqICqioqMhKCAFKAIAIQwDQCAMIA1ODQEgBiAEQQJ0IgNqIAsgDEECdGooAgAiFjYCACADIAlqIAg2AgAgByAEQQN0aiArOQMAIAUoAgAhAwNAIARBAWohBCAFKAIEIg0gA0oEQCALIANBAnRqKAIAIQ0gBiAEQQJ0IhFqIBY2AgAgCSARaiANNgIAIAcgBEEDdGogKDkDACADQQFqIQMMAQsLIAxBAWohDAwACwALIApBAWohCgwBCwtBACEMIAQgDiAOIAYgCSAHQQFBCBDBAwwBCwJAIANBAmsOAwAEAAQLIAZFBEAgByAJcg0GIAUgCEEEEBgiBjYCFCAFIAhBBBAYIgk2AhggBSAIQQgQGCIHNgIcCyAIQQAgCEEAShshCCABQQAgAUEAShshECAYQQgQGCEMA0AgCCAKRwRAIAIgASALIBUgFCAKQQJ0IgVqKAIAIgNBAnRqIgQoAgBBAnRqIg0oAgAgDSgCBBCZAiEoIAUgBmogAzYCACAFIAlqIAM2AgAgByAKQQN0aiApICijIig5AwAgBCgCACIFIAQoAgQiDSAFIA1KGyERIAwgASADbEEDdGohFiAFIQMDQCADIBFGBEACQCAoIA0gBWu3oyEoQQAhBANAIAQgEEYNASAWIARBA3RqIgMgKCADKwMAojkDACAEQQFqIQQMAAsACwUgAiALIANBAnRqKAIAIAFsQQN0aiEZQQAhBANAIAQgEEcEQCAWIARBA3QiEmoiFyASIBlqKwMAIBcrAwCgOQMAIARBAWohBAwBCwsgA0EBaiEDDAELCyAKQQFqIQoMAQsLIAggDiAOIAYgCSAHQQFBCBDBAwsiEA0BC0EAIRAMAQsgDyAQEMIGIQ8LIA5BACAOQQBKGyEUIAFBACABQQBKGyEVIBhBA3QhJEQAAAAAAADwPyEpA0AgKUT8qfHSTWJQP2RFIB9BMk5yDQUgH0EBaiEfQQAhAwNAIAMgFEcEQCAeIANBAWoiBUECdGohCiAeIANBAnRqKAIAIQdEAAAAAAAAAAAhKEF/IQkDQCAKKAIAIAdKBEACQCAjIAdBAnRqIgYoAgAiBCADRgRAIAchCQwBCyACIAEgAyAEEMYBISpEAAAAAAAAAAAhKSAiIAdBA3QiCGoiDisDACIrRAAAAAAAAAAAYgRAICpEAAAAAAAAAABhBHwgKyAIICFqKwMAoyEpQQAhBANAIAQgFUcEQBDAAyEqIAIgBigCACABbEEDdGogBEEDdGoiCyAqRC1DHOviNho/oEQtQxzr4jYaP6IgKaIgCysDAKA5AwAgBEEBaiEEDAELCyACIAEgAyAGKAIAEMYBISogDisDAAUgKwsgKqMhKQsgCCAdaiApOQMAICggKaAhKAsgB0EBaiEHDAELCyAJQQBIDQUgHSAJQQN0aiAomjkDACAFIQMMAQsLIBogAiATIAEQ0wlBACEDAkAgG0UNAANAIAMgFEYNASABIANsIQUgGyADQQN0aiEHQQAhBANAIAQgFUcEQCATIAQgBWpBA3QiCWoiBiAHKwMAIAkgIGorAwCiIAYrAwCgOQMAIARBAWohBAwBCwsgA0EBaiEDDAALAAtBACEDAkAgACgCGEEBRw0AA0AgAyAURg0BIAEgA2whBUEAIQQDQCAEIBVHBEAgEyAEIAVqQQN0IgdqIgkgByAMaisDACAJKwMAoDkDACAEQQFqIQQMAQsLIANBAWohAwwACwALIAArAyghLSAAKwMwIS5BACEDQQAhDkQAAAAAAAAAACErIwBBEGsiCCQAAkACQCAPKAIQQQFGBEAgDygCHCIJRQ0BIA8oAhghCiAPKAIUIQcgDygCACIGQQFqEN8BIg0gBrciLDkDACAGQQAgBkEAShshFiANQQhqIRkDQCADIBZHBEAgGSADQQN0aiILQoCAgICAgID4PzcDACAHIANBAnRqKAIAIgQgByADQQFqIgVBAnRqKAIAIhEgBCARShshEQNAIAQgEUYEQCAFIQMMAwUCQCADIAogBEECdGooAgBHDQAgCSAEQQN0aisDACIpRAAAAAAAAAAAZCApRAAAAAAAAAAAY3JFDQAgC0QAAAAAAADwPyApozkDAAsgBEEBaiEEDAELAAsACwsgAUEAIAFBAEobISUgBkEDdCEmIAYQ3wEhByAGEN8BIREDQEEAIQQgDiAlRwRAA0AgBCAWRwRAIAcgBEEDdCIDaiACIAEgBGwgDmpBA3QiBWorAwA5AwAgAyARaiAFIBNqKwMAOQMAIARBAWohBAwBCwsgBhDfASELIAggBhDfATYCDCAGEN8BIQogCCAGEN8BNgIIIA8gByAIQQxqENIJIAgoAgwhA0EAIQUgBkEAIAZBAEobIQkDQCAFIAlHBEAgAyAFQQN0IgRqIhIgBCARaisDACASKwMAoTkDACAFQQFqIQUMAQsLIAggAzYCDCAGIAMgAxCgAZ8gLKMiKiAtoiEvQQAhA0QAAAAAAADwPyEoIAchCQNAIAO4IC5jRSAqIC9kRXJFBEAgA0EBakEAIQQCfyANKwMAIimZRAAAAAAAAOBBYwRAICmqDAELQYCAgIB4CyISQQAgEkEAShshJyAIKAIMIRIDQCAEICdHBEAgCyAEQQN0IhdqIBIgF2orAwAgFyAZaisDAKI5AwAgBEEBaiEEDAELCyAGIBIgCxCgASEpAkAgAwRAICkgKKMhKEEAIQMgBkEAIAZBAEobIQQDQCADIARHBEAgCiADQQN0IhJqIhcgKCAXKwMAoiALIBJqKwMAoDkDACADQQFqIQMMAQsLDAELIAogCyAmECAaCyAPIAogCEEIahDSCSAGIAkgCiApIAYgCiAIKAIIEKABoyIoEM4JIQkgCCAGIAgoAgwgCCgCCCAomhDOCSIDNgIMIAYgAyADEKABnyAsoyEqICkhKCEDDAELCyALEBcgCCgCDBAXIAoQFyAIKAIIEBcgEyAOQQN0aiEDQQAhBANAIAQgFkcEQCADIAEgBGxBA3RqIAcgBEEDdGorAwA5AwAgBEEBaiEEDAELCyAOQQFqIQ4gKyAqoCErDAELCyAHEBcgERAXIA0QFyAIQRBqJAAMAgtB99EBQee7AUEjQbUVEAAAC0HvwQFB57sBQSVBtRUQAAALQQAhA0QAAAAAAAAAACEoA0AgAyAURwRAIAEgA2whBUEAIQREAAAAAAAAAAAhKQNAIAQgFUcEQCATIAQgBWpBA3QiB2orAwAgAiAHaisDAKEiKiAqoiApoCEpIARBAWohBAwBCwsgA0EBaiEDICggKZ+gISgMAQsLIBggAiACEKABISkgAiATICQQIBogKCApn6MhKQwACwALQdacA0GtuAFBuwNBzBEQAAALQdacA0GtuAFB5QNBzBEQAAALQY2SA0GtuAFB0wRBvvYAEAAAC0EAIRMLIBoQZCAQBEAgEBBkIA8QZAsgHBAXIBMQFyAMEBcLqgYCDX8DfAJAIABBABC5AgRAIAAQiQQiBSgCHCEKIAUoAhghCyAFKAIUIQYgBSgCEEEBRwRAIAoQFyAFQQE2AhAgBSAFKAIIQQgQGCIKNgIcCyAFKAIAQQQQGCEMIAUoAgAiB0EAIAdBAEobIQ1BACEAA0AgACANRgRAA0AgAyANRgRAQQAhBEQAAAAAAAAAACEQQQAhAwwFCyAGIANBAnQiDmooAgAhBCAGIANBAWoiCEECdGooAgAhACAMIA5qIAM2AgAgBCAAIAAgBEgbIQ4gACAEayEJIAQhAANAIAAgDkYEQCAJtyESA0AgBCAORgRAIAghAwwECwJAIAsgBEECdGooAgAiACADRwRAIAYgAEECdGoiCSgCACIAIAkoAgQiCSAAIAlKGyEPIBIgCSAAa7egIRADQCAAIA9GRQRAIBBEAAAAAAAA8L+gIBAgDCALIABBAnRqKAIAQQJ0aigCACADRhshECAAQQFqIQAMAQsLIAogBEEDdGogEDkDACAQRAAAAAAAAAAAZEUNAQsgBEEBaiEEDAELC0HOjwNBrbgBQccAQeIREAAACyALIABBAnRqKAIAIg8gA0cEQCAMIA9BAnRqIAM2AgALIABBAWohAAwACwALAAUgDCAAQQJ0akF/NgIAIABBAWohAAwBCwALAAtBop4DQa24AUEpQeIREAAACwNAAkAgAyAHSARAIAYgA0EBaiIIQQJ0aiEHIAYgA0ECdGooAgAhAANAIAAgBygCAE4NAiALIABBAnRqKAIAIg0gA0cEQCARIAIgASADIA0QxgGgIREgECAKIABBA3RqKwMAoCEQIARBAWohBAsgAEEBaiEADAALAAsgESAEtyIRoyAQIBGjoyEQQQAhAyAHQQAgB0EAShshAgNAIAIgA0cEQCAGIANBAnRqKAIAIgAgBiADQQFqIgFBAnRqKAIAIgggACAIShshCANAIAAgCEYEQCABIQMMAwsgCyAAQQJ0aigCACADRwRAIAogAEEDdGoiBCAQIAQrAwCiOQMACyAAQQFqIQAMAAsACwsgDBAXIAUPCyAFKAIAIQcgCCEDDAALAAvqHAIpfwN8IwBBEGsiESQAAkACQAJAAkACQAJAAkACQCAAKAIAIAFBAWtODQAgACgCCCIGKAIEt0QAAAAAAADoP6IhLAJAA0AgBigCACIKIAYoAgRHDQMgEUEANgIIIBFBADYCBCAGLQAkQQFxRQ0EQQAhAiAKQQAgCkEAShshECAGKAIYIRwgBigCFCEdIApBBBAYIRogCkEBakEEEBghFCAKQQQQGCEPA0AgAiAQRwRAIA8gAkECdGogAjYCACACQQFqIQIMAQsLIAZBABC5AkUNBSAGKAIQQQFHDQYgBigCBCICQQAgAkEAShshDSAGKAIAIQcgBigCGCESIAYoAhQhEyACQQQQPyEIIAJBAWpBBBA/IQUgAkEEED8hDiACQQQQPyEMQQAhAwNAIAMgDUcEQCAIIANBAnRqQQA2AgAgA0EBaiEDDAELCyAFIAI2AgQgBUEEaiELQQAhAwNAIAMgDUYEQEEAIQIgB0EAIAdBAEobIR5BASEEA0AgAiAeRwRAIBMgAkEBaiIHQQJ0aigCACEXIBMgAkECdGooAgAiAyEJA0AgCSAXSARAIAsgCCASIAlBAnRqKAIAQQJ0aigCAEECdGoiGCAYKAIAQQFrNgIAIAlBAWohCQwBCwsDQCADIBdOBEAgByECDAMFAkAgAiAOIAggEiADQQJ0aigCAEECdGoiGCgCACIfQQJ0IglqIhUoAgBKBEAgFSACNgIAIAkgC2oiFSgCAEUEQCAVQQE2AgAgCSAMaiAfNgIADAILIAkgDGogBDYCACALIARBAnRqQQE2AgAgGCAENgIAIARBAWohBAwBCyAYIAkgDGooAgAiCTYCACALIAlBAnRqIgkgCSgCAEEBajYCAAsgA0EBaiEDDAELAAsACwtBACEJIAVBADYCACAEQQAgBEEAShshAkEAIQMDQCACIANHBEAgBSADQQFqIgNBAnRqIgcgBygCACAJaiIJNgIADAELCyARIAw2AghBACEDA0AgAyANRgRAIAQhAwNAIANBAEoEQCAFIANBAnRqIgIgAkEEaygCADYCACADQQFrIQMMAQsLIAVBADYCACARIAU2AgQgESAENgIMIA4QFyAIEBcFIAUgCCADQQJ0aigCAEECdGoiAiACKAIAIgJBAWo2AgAgDCACQQJ0aiADNgIAIANBAWohAwwBCwsFIA4gA0ECdGpBfzYCACADQQFqIQMMAQsLQQAhCCAUQQA2AgAgESgCDCICQQAgAkEAShshDCAGKAIcIQ4gESgCCCELIBEoAgQhA0EAIQVBACEHA0AgBSAMRwRAIAVBAnQhAiADIAVBAWoiBUECdGooAgAiBCACIANqKAIAIgJrQQJIDQEgAiAEIAIgBEobIQQgFCAIQQJ0aigCACEJA0AgAiAERwRAIA8gCyACQQJ0aigCACINQQJ0akF/NgIAIBogB0ECdGogDTYCACAHQQFqIgcgCWtBBE4EQCAUIAhBAWoiCEECdGogBzYCACAHIQkLIAJBAWohAgwBCwsgByAJTA0BIBQgCEEBaiIIQQJ0aiAHNgIADAELC0QAAAAAAAAAACErQQAhBUEAIQNBACEEAkAgCiICQQBMDQAgAkEEEBghBANAIAIgA0YEQCAEQQRrIQMDQCACQQJIDQMgAkEBTARAQa+GA0G8ugFBHEGQpwEQAAAFEKYBIAJvIQkgAyACQQJ0aiIMKAIAIQsgDCAEIAlBAnRqIgkoAgA2AgAgCSALNgIAIAJBAWshAgwBCwALAAUgBCADQQJ0aiADNgIAIANBAWohAwwBCwALAAsgBCELQQAhDEEAIQMDQCAMIBBHBEACQCAPIAsgDEECdGooAgAiDUECdCICaiISKAIAQX9GDQAgAiAdaiIEKAIAIgIgBCgCBCIEIAIgBEobIRNBASEJA0AgAiATRwRAAkAgDSAcIAJBAnRqKAIAIgRGDQAgDyAEQQJ0aigCAEF/Rg0AIAlBAXFBACEJIA4gAkEDdGorAwAiLSArZHJFDQAgLSErIAQhAwsgAkEBaiECDAELCyAJQQFxDQAgDyADQQJ0akF/NgIAIBJBfzYCACAaIAdBAnRqIgIgAzYCBCACIA02AgAgFCAIQQFqIghBAnRqIAdBAmoiBzYCAAsgDEEBaiEMDAELCwNAIAUgEEcEQCAFIA8gBUECdGooAgBGBEAgGiAHQQJ0aiAFNgIAIBQgCEEBaiIIQQJ0aiAHQQFqIgc2AgALIAVBAWohBQwBCwsgCxAXIBEoAggQFyARKAIEEBcgDxAXIAggCkoNB0EAIQICQCAIIApGBEBBACEHQQAhBUEAIQ9BACEJQQAhDAwBC0EAIQdBACEFQQAhD0EAIQlBACEMIAhBBEgNACAKQQQQGCEPIApBBBAYIQkgCkEIEBghDANAIAcgCEcEQCAUIAdBAnRqKAIAIgUgFCAHQQFqIgRBAnRqKAIAIgMgAyAFSBsgAiAFa2ohAwNAIAIgA0YEQCADIQIgBCEHDAMFIA8gAkECdCILaiAaIAVBAnRqKAIANgIAIAkgC2ogBzYCACAMIAJBA3RqQoCAgICAgID4PzcDACAFQQFqIQUgAkEBaiECDAELAAsACwsgAiAKRw0JIAogCiAIIA8gCSAMQQFBCBDBAyIHEMMGIQVBACECQQAhDkEAIQpBACEDQQAhCwJAIAYoAiAgBSgCIHJFBEAgBSgCBCAGKAIARw0BIAYoAgQgBygCAEcNASAFKAIQIgQgBigCEEcNASAEIAcoAhBHDQEgBEEBRgRAIAcoAhghFyAHKAIUIRggBigCGCEcIAYoAhQhHSAFKAIYIR4gBSgCFCEQIAUoAgAhEiAHKAIEIhNBBBBGIg1FDQIgE0EAIBNBAEobIQMDQCACIANGBEACQCASQQAgEkEAShshH0EAIQIDQCACIB9HBEAgECACQQJ0aigCACIIIBAgAkEBaiIDQQJ0aigCACIEIAQgCEgbISBBfiACayEVA0AgCCAgRgRAIAMhAgwDBSAdIB4gCEECdGooAgBBAnRqIgIoAgAiBCACKAIEIgIgAiAESBshGQNAIAQgGUcEQCAYIBwgBEECdGooAgBBAnRqIhYoAgAiAiAWKAIEIhYgAiAWShshFgNAIAIgFkcEQCAVIA0gFyACQQJ0aigCAEECdGoiIigCAEcEQCAiIBU2AgAgDkEBaiEOCyACQQFqIQIMAQsLIARBAWohBAwBCwsgCEEBaiEIDAELAAsACwsgEiATIA5BAUEAEJoCIgMEQCADKAIcIQggBygCHCEOIAYoAhwhIiAFKAIcISQgAygCGCESIAMoAhQiE0EANgIAA0AgCyAfRwRAIBMgC0ECdCICaiElIBAgC0EBaiILQQJ0IiZqIScgAiAQaigCACEEA0AgJygCACAESgRAICQgBEEDdGohFSAdIB4gBEECdGooAgBBAnRqIigoAgAhBgNAICgoAgQgBkoEQCAiIAZBA3RqISAgGCAcIAZBAnRqKAIAQQJ0aiIpKAIAIQIDQCApKAIEIAJKBEACQCANIBcgAkECdGooAgAiGUECdGoiKigCACIWICUoAgBIBEAgKiAKNgIAIBIgCkECdGogGTYCACAIIApBA3RqIBUrAwAgICsDAKIgDiACQQN0aisDAKI5AwAgCkEBaiEKDAELIBIgFkECdGooAgAgGUcNCiAIIBZBA3RqIhkgFSsDACAgKwMAoiAOIAJBA3RqKwMAoiAZKwMAoDkDAAsgAkEBaiECDAELCyAGQQFqIQYMAQsLIARBAWohBAwBCwsgEyAmaiAKNgIADAELCyADIAo2AggLIA0QFwwFCwUgDSACQQJ0akF/NgIAIAJBAWohAgwBCwtB88IBQZq2AUGHCUH7rwIQAAALQfrRAUGatgFB0ghB+68CEAAAC0HgywFBmrYBQcQIQfuvAhAAAAsgAyIERQRAQQAhAgwBC0EAIQZBACEDAkAgBUUNACAFKAIUIQoCQAJAAkACQCAFKAIQQQFrDggAAQQCBAQEAwQLIAUoAgAiAkEAIAJBAEobIQggBSgCHCELA0AgAyAIRg0DIAogA0ECdGooAgAiBiAKIANBAWoiA0ECdGooAgAiAiACIAZIGyEQIAIgBmu3ISsDQCAGIBBGDQEgCyAGQQN0aiICIAIrAwAgK6M5AwAgBkEBaiEGDAALAAsACyAFKAIYIQsgBSgCACICQQAgAkEAShshECAFKAIcIQ0DQCADIBBGDQIgCiADQQJ0aigCACIGIAogA0EBaiICQQJ0aigCACIIIAYgCEobIQ4gCCAGa7chKwNAIAYgDkYEQCACIQMMAgsgAyALIAZBAnRqKAIARwRAIA0gBkEEdGoiCCAIKwMAICujOQMAIAggCCsDCCArozkDCAsgBkEBaiEGDAALAAsAC0GUlwNBmrYBQdkLQYmeARAAAAsgBSEGCyAGIQUgBCAEKAIkQQNyNgIkIAQQwQYhAgsgDxAXIAkQFyAMEBcgGhAXIBQQFyACBEAgAigCBCEEAn8gG0UEQCAHIRsgBQwBCyAhRQ0LIBsgBxDRCSAbEGQgBxBkIAUgIRDRCSEHICEQZCAFEGQhGyAHCyEhICMEQCAjEGQLIAIiIyEGICwgBLdjDQEMAgsLICMiAkUNAQsgACACEMIJIgM2AhQgAyAAKAIAQQFqNgIAIAIoAgAhAiADIBs2AgwgAyACNgIEIAAgITYCECADIAA2AhggAyABEMEJGgsgEUEQaiQAIAAPC0Gw6gBBr7oBQZcBQZrxABAAAAtByp8DQa+6AUE/Qa0YEAAAC0GingNBr7oBQcsAQa0YEAAAC0H30QFBr7oBQcwAQa0YEAAAC0GG6wBBr7oBQZ4BQZrxABAAAAtB9uoAQa+6AUGzAUGa8QAQAAALQfnMAUGvugFB2gFBjuUAEAAAC2UBAn8gAEUEQEEADwsgACgCACAAKAIERgRAQQFBIBAYIgFBADYCACAAKAIEIQIgAUIANwIMIAEgADYCCCABIAI2AgQgAUIANwIUIAFBADoAHCABDwtBsOoAQa+6AUEXQY8fEAAAC0UBAX8gAARAAkAgACgCCCIBRQ0AIAAoAgBFBEAgAC0AHEUNAQsgARBkCyAAKAIMEGQgACgCEBBkIAAoAhQQwwkgABAXCwseAEHQ7QotAABFBEBB0O0KQQE6AABBy8wDQQAQMQsLWAICfAF/AkACfyAALQAcIgQgAS0AHEUNABogBEUNASAAKwMAIgIgASsDACIDYw0BQQEgAiADZA0AGkF/IAArAwgiAiABKwMIIgNjDQAaIAIgA2QLDwtBfws4AQJ/A0AgAEEATEUEQCACIABBAWsiAEEDdCIEaisDACABIARqKwMAY0UgA0EBdHIhAwwBCwsgAwtoAQN/QRgQTSIEIAE5AwAgAEEIEBghBSAEIAM2AgwgBCAFNgIIQQAhAyAAQQAgAEEAShshAANAIAAgA0ZFBEAgBSADQQN0IgZqIAIgBmorAwA5AwAgA0EBaiEDDAELCyAEQQA2AhAgBAtoAgJ/AXwgACABIAIgAxDJCSIBKAIUIQVBACEDIABBACAAQQBKGyEAIAKaIQcDQCAAIANGRQRAIAUgA0EDdGoiBiAGKwMAIAIgByAEQQFxG6A5AwAgA0EBaiEDIARBAm0hBAwBCwsgAQumAQEEf0E4EE0iBEEANgIAIAQgADYCECAEIABBCBAYIgY2AhQgAEEAIABBAEobIQADQCAAIAVGRQRAIAYgBUEDdCIHaiABIAdqKwMAOQMAIAVBAWohBQwBCwsgAkQAAAAAAAAAAGRFBEBB748DQYm9AUHrAkHFFRAAAAsgBEEANgIwIAQgAzYCLCAEQQA2AiggBEIANwMgIARCADcDCCAEIAI5AxggBAudAwIKfwJ8IAArAwghDSAAKAIoIQMgACAAKAIQIgUQ+AQhCAJAIA1EAAAAAAAAAABkBEAgAiACKwMQRAAAAAAAAPA/oDkDEAJAIAMEQCAFQQAgBUEAShshAgNAIANFDQIgAygCECIARQRAIAMgASADKAIMIAVsQQN0aiIANgIQCyADKwMAIA2jIQ5BACEEA0AgAiAERkUEQCAAIARBA3QiBmoiByAOIAYgCGorAwCiIAcrAwCgOQMAIARBAWohBAwBCwsgAygCFCEDDAALAAtBASAFdCIDQQAgA0EAShshByAFQQAgBUEAShshCUEAIQMDQCADIAdGDQEgACgCJCADQQJ0aigCACIGBEAgBigCAEEATA0EIAYgBRD4BCEKIAYrAwggDaMhDkEAIQQDQCAEIAlGRQRAIAogBEEDdCILaiIMIA4gCCALaisDAKIgDCsDAKA5AwAgBEEBaiEEDAELCyAGIAEgAhDKCQsgA0EBaiEDDAALAAsPC0GBjwNBib0BQfwBQYmSARAAAAtB5I8DQYm9AUGOAkGJkgEQAAALYQEBfyABKAIAIgEgAigCACIGTgRAIAMgAygCACAAIAZsIAAgAUEKaiIAbBC+BjYCACAEIAQoAgAgAigCACAAEL4GNgIAIAUgBSgCACACKAIAIAAQvgY2AgAgAiAANgIACwvxAwIGfwF8IAkgCSsDAEQAAAAAAADwP6A5AwACQCAARQ0AIAAoAhAiC0EAIAtBAEobIQ0gAEEoaiEKA0AgCigCACIMBEAgCyAEIAUgBiAHIAgQywkgAyAMKAIMRwRAIAwoAgghDkEAIQoDQCAKIA1GRQRAIApBA3QiDyAGKAIAIAQoAgAgC2xBA3RqaiAOIA9qKwMAOQMAIApBAWohCgwBCwsgBygCACAEKAIAQQN0aiAMKwMAOQMAIAIgDiALEPkEIRAgCCgCACAEKAIAIgpBA3RqIBA5AwAgBCAKQQFqNgIACyAMQRRqIQoMAQsLIAAoAiRFDQAgACgCFCACIAsQ+QQhECAAKwMYIBAgAaJjRQRAQQAhCkEBIAt0IgtBACALQQBKGyELA0AgCiALRg0CIAAoAiQgCkECdGooAgAgASACIAMgBCAFIAYgByAIIAkQzAkgCkEBaiEKDAALAAsgCyAEIAUgBiAHIAgQywlBACEKA0AgCiANRkUEQCAKQQN0IgMgBigCACAEKAIAIAtsQQN0amogACgCICADaisDADkDACAKQQFqIQoMAQsLIAcoAgAgBCgCAEEDdGogACsDCDkDACAAKAIgIAIgCxD5BCEBIAgoAgAgBCgCACIAQQN0aiABOQMAIAQgAEEBajYCAAsLgwEBAX8gACgCECEJIAhCADcDACADQQA2AgAgBEEKNgIAIAUoAgBFBEAgBSAJQQpsQQgQGDYCAAsgBigCAEUEQCAGIAQoAgBBCBAYNgIACyAHKAIARQRAIAcgBCgCAEEIEBg2AgALIABEMzMzMzMz4z8gASACIAMgBCAFIAYgByAIEMwJC0cBA38gAEEAIABBAEobIQADQCAAIARGRQRAIAEgBEEDdCIFaiIGIAMgAiAFaisDAKIgBisDAKA5AwAgBEEBaiEEDAELCyABC/8GAQ1/IwBB0ABrIgQkACAEQQA2AkggBEEANgJEIwBBEGsiByQAAkAgAEUNACAAEDUhDSAAELACIQogABAaIQMDQCADBEAgAygCECAFNgKIASAFQQFqIQUgACADEBshAwwBBSAKQQQQGCEIIApBBBAYIQkgCkEIEBghCyAAQQJBxh9BABAfIQ4gABAaIQZBACEFA0AgBkUEQCAKIA0gDSAIIAkgC0EBQQgQwQMhAyAIEBcgCRAXIAsQFwwECyAGKAIQKAKIASEPIAAgBhApIQMDQCADBEAgCCAFQQJ0IgxqIA82AgAgCSAMaiADQVBBACADKAIAQQNxQQJHG2ooAigoAhAoAogBNgIAIAsgBUEDdGogDgR8IAMgDhA+IAcgB0EIajYCAEHnhAEgBxBJIQwgBysDCEQAAAAAAADwPyAMQQFGGwVEAAAAAAAA8D8LOQMAIAVBAWohBSAAIAMQLCEDDAEFIAAgBhAbIQYMAgsACwALAAsACwALIAdBEGokACADIQcCf0EAIAEoAjRBAEgNABogASgCUEEASgRAIAQgAikDCDcDKCAEIAIpAwA3AyAgACAEQSBqIARByABqIARBxABqELQKDAELIAQgAikDCDcDOCAEIAIpAwA3AzAgACAEQTBqQQBBABC0CgshCgJAQbyLCy8BACAAEDVsIgJBgICAgAJJBEBBACACIAJBCBBGIgUbDQECQCAAQQFBjitBABAfRQ0AIAAQGiEDA0AgA0UNAQJAIAMoAhAiBi0AhwFFDQBBACECIAVBvIsLLwEAIgggBigCiAFsQQN0aiEJA0AgAiAIRg0BIAkgAkEDdCILaiAGKAKUASALaisDADkDACACQQFqIQIMAAsACyAAIAMQGyEDDAALAAtBvIsLLwEAIAcgASAFIAQoAkggBCgCRCAEQcwAahC5CSAAEBohAwNAIAMEQEEAIQIgBUG8iwsvAQAiASADKAIQIgYoAogBbEEDdGohCANAIAEgAkcEQCACQQN0IgkgBigClAFqIAggCWorAwA5AwAgAkEBaiECDAELCyAAIAMQGyEDDAELCyAKEBcgBRAXIAcQZCAEKAJEEBcgBEHQAGokAA8LIARBCDYCBCAEIAI2AgBB6PoGKAIAQdrdAyAEEB0aECYACyAEIAJBA3Q2AhBB6PoGKAIAQandAyAEQRBqEB0aECYAC88BAQZ/AkAgAEUNACAAKAIEIgIgACgCAEcNACAAKAIYIQQgACgCFCEFIAIgAiAAKAIIIgZBCEEAEJoCIgEoAhQgBSACQQJ0QQRqECAaIAEoAhggBCAGQQJ0ECAaIAEgACgCCDYCCCABQQEQjAMgARBkEMEGIgEgASgCCEEIED8iADYCHCABKAIIIgJBACACQQBKGyECA0AgAiADRkUEQCAAIANBA3RqQoCAgICAgID4PzcDACADQQFqIQMMAQsLIAFBCDYCKCABQQE2AhALIAELnw4BF38CQAJAAkAgASgCICAAKAIgckUEQCAAKAIEIAEoAgBHDQMgACgCECIIIAEoAhBHDQMgASgCGCEVIAEoAhQhFiAAKAIYIRcgACgCFCEPIAAoAgAhBSABKAIEIgpBBBBGIhRFDQMgCkEAIApBAEobIQwCQAJAAkADQCACIAxGBEACQCAFQQAgBUEAShshGEEAIQIDQCACIBhHBEAgDyACQQJ0aigCACINIA8gAkEBaiIMQQJ0aigCACIHIAcgDUgbIRFBfiACayEEA0AgDSARRgRAIAwhAgwDBSAWIBcgDUECdGooAgBBAnRqIgcoAgAiAiAHKAIEIgcgAiAHShshEgNAIAIgEkZFBEAgBCAUIBUgAkECdGooAgBBAnRqIgcoAgBHBEAgByAENgIAIAZBAWohBgsgAkEBaiECDAELCyANQQFqIQ0MAQsACwALCyAFIAogBiAIQQAQmgIiDkUNByAOKAIYIRMgDigCFCELAkACQAJAAkACQAJAIAhBAWsOCAABBAIEBAQDBAsgDigCHCENIAEoAhwhBSAAKAIcIQRBACECIAtBADYCAANAIAkgGEYNBSALIAlBAnQiAGohESAPIAlBAWoiCUECdCISaiEHIAAgD2ooAgAhAQNAIAcoAgAgAUoEQCAEIAFBA3RqIQogFiAXIAFBAnRqKAIAQQJ0aiIMKAIAIQMDQCAMKAIEIANKBEACQCAUIBUgA0ECdGooAgAiBkECdGoiACgCACIIIBEoAgBIBEAgACACNgIAIBMgAkECdGogBjYCACANIAJBA3RqIAorAwAgBSADQQN0aisDAKI5AwAgAkEBaiECDAELIBMgCEECdGooAgAgBkcNCyANIAhBA3RqIgAgCisDACAFIANBA3RqKwMAoiAAKwMAoDkDAAsgA0EBaiEDDAELCyABQQFqIQEMAQsLIAsgEmogAjYCAAwACwALIA4oAhwhCiABKAIcIQYgACgCHCERQQAhAiALQQA2AgADQCAJIBhGDQQgCyAJQQJ0IgBqIRIgDyAJQQFqIglBAnQiB2ohDCAAIA9qKAIAIRADQCAMKAIAIBBKBEAgESAQQQR0aiEFIBYgFyAQQQJ0aigCAEECdGoiASgCACEDA0AgASgCBCADSgRAAkAgFCAVIANBAnRqKAIAIghBAnRqIgAoAgAiBCASKAIASARAIAAgAjYCACATIAJBAnRqIAg2AgAgCiACQQR0aiIAIAUrAwAgBiADQQR0aiIEKwMAoiAEKwMIIAUrAwiioTkDACAAIAUrAwAgBCsDCKIgBSsDCCAEKwMAoqA5AwggAkEBaiECDAELIBMgBEECdGooAgAgCEcNDSAKIARBBHRqIgQgBCsDACAFKwMAIAYgA0EEdGoiACsDAKIgACsDCCAFKwMIoqGgOQMAIAQgBCsDCCAFKwMAIAArAwiiIAUrAwggACsDAKKgoDkDCAsgA0EBaiEDDAELCyAQQQFqIRAMAQsLIAcgC2ogAjYCAAwACwALIA4oAhwhDSABKAIcIQUgACgCHCEEQQAhAiALQQA2AgADQCAJIBhGDQMgCyAJQQJ0IgBqIREgDyAJQQFqIglBAnQiEmohByAAIA9qKAIAIRADQCAHKAIAIBBKBEAgBCAQQQJ0IgBqIQogFiAAIBdqKAIAQQJ0aiIMKAIAIQMDQCAMKAIEIANKBEACQCAUIBUgA0ECdCIGaigCACIIQQJ0aiIBKAIAIgAgESgCAEgEQCABIAI2AgAgEyACQQJ0IgBqIAg2AgAgACANaiAFIAZqKAIAIAooAgBsNgIAIAJBAWohAgwBCyATIABBAnQiAGooAgAgCEcNDSAAIA1qIgAgACgCACAFIAZqKAIAIAooAgBsajYCAAsgA0EBaiEDDAELCyAQQQFqIRAMAQsLIAsgEmogAjYCAAwACwALQQAhAiALQQA2AgBBACEGA0AgBiAYRg0CIAsgBkECdCIAaiEEIA8gBkEBaiIGQQJ0IhFqIRIgACAPaigCACEAA0AgEigCACAASgRAIBYgFyAAQQJ0aigCAEECdGoiBygCACEDA0AgBygCBCADSgRAAkAgFCAVIANBAnRqKAIAIghBAnRqIgwoAgAiASAEKAIASARAIAwgAjYCACATIAJBAnRqIAg2AgAgAkEBaiECDAELIBMgAUECdGooAgAgCEcNDQsgA0EBaiEDDAELCyAAQQFqIQAMAQsLIAsgEWogAjYCAAwACwALIA4QZAwICyAOIAI2AggMCAsFIBQgAkECdGpBfzYCACACQQFqIQIMAQsLQYzDAUGatgFB3gdBlA0QAAALQYzDAUGatgFB+AdBlA0QAAALQYzDAUGatgFBkghBlA0QAAALQYzDAUGatgFBpghBlA0QAAALQeDLAUGatgFBoQdBlA0QAAALQQAhDgsgFBAXCyAOC7UGAgl/AXwgACgCIEUEQAJAAkAgACgCEEEBayIEDgQBAAABAAtBrcwBQZq2AUHgBkHBNRAAAAsgAigCACEFIAAoAgAhAyAAKAIYIQYgACgCFCEHAkACQAJAAkAgBA4EAAICAQILIAAoAhwhCSABBEAgBUUEQCADQQgQPyEFC0EAIQQgA0EAIANBAEobIQMDQCADIARGDQQgBSAEQQN0aiIKQgA3AwAgByAEQQJ0aigCACIAIAcgBEEBaiIEQQJ0aigCACIIIAAgCEobIQhEAAAAAAAAAAAhDANAIAAgCEYEQAwCBSAKIAkgAEEDdGorAwAgASAGIABBAnRqKAIAQQN0aisDAKIgDKAiDDkDACAAQQFqIQAMAQsACwALAAsgBUUEQCADQQgQPyEFC0EAIQEgA0EAIANBAEobIQQDQCABIARGDQMgBSABQQN0aiIDQgA3AwAgByABQQJ0aigCACIAIAcgAUEBaiIBQQJ0aigCACIGIAAgBkobIQZEAAAAAAAAAAAhDANAIAAgBkYEQAwCBSADIAkgAEEDdGorAwAgDKAiDDkDACAAQQFqIQAMAQsACwALAAsgACgCHCEJIAEEQCAFRQRAIANBCBA/IQULQQAhBCADQQAgA0EAShshAwNAIAMgBEYNAyAFIARBA3RqIgpCADcDACAHIARBAnRqKAIAIgAgByAEQQFqIgRBAnRqKAIAIgggACAIShshCEQAAAAAAAAAACEMA0AgACAIRgRADAIFIAogCSAAQQJ0IgtqKAIAtyABIAYgC2ooAgBBA3RqKwMAoiAMoCIMOQMAIABBAWohAAwBCwALAAsACyAFRQRAIANBCBA/IQULQQAhASADQQAgA0EAShshBANAIAEgBEYNAiAFIAFBA3RqIgNCADcDACAHIAFBAnRqKAIAIgAgByABQQFqIgFBAnRqKAIAIgYgACAGShshBkQAAAAAAAAAACEMA0AgACAGRgRADAIFIAMgDCAJIABBAnRqKAIAt6AiDDkDACAAQQFqIQAMAQsACwALAAtBlJcDQZq2AUGTB0HBNRAAAAsgAiAFNgIADwtB+ssBQZq2AUHfBkHBNRAAAAvGAgENfwJAIAAoAiBFBEAgACgCEEEBRw0BIANBACADQQBKGyEGIAAoAgAiBEEAIARBAEobIQkgACgCGCEKIAAoAhQhByAAKAIcIQsDQCAFIAlHBEAgAiADIAVsQQN0aiEIQQAhAANAIAAgBkZFBEAgCCAAQQN0akIANwMAIABBAWohAAwBCwsgByAFQQJ0aigCACIEIAcgBUEBaiIFQQJ0aigCACIAIAAgBEgbIQwDQCAEIAxGDQIgCiAEQQJ0aiENIAsgBEEDdGohDkEAIQADQCAAIAZGRQRAIAggAEEDdCIPaiIQIA4rAwAgASANKAIAIANsQQN0aiAPaisDAKIgECsDAKA5AwAgAEEBaiEADAELCyAEQQFqIQQMAAsACwsPC0H6ywFBmrYBQcoGQd6TARAAAAtB99EBQZq2AUHLBkHekwEQAAALSQAgACgCIEEBRwRAQcDWAUGatgFBnQRB9SQQAAALIAAoAgggACgCACAAKAIEIAAoAhQgACgCGCAAKAIcIAAoAhAgACgCKBDBAwsiACAAIAEgAyAEIAUQ1wkhACACQQBKBEAgACACENYJCyAAC2YBAn8gAEEANgIcIAAoAiAhAyABQQQQPyECAkACQCADQQFGBEAgACACNgIUIAAgAUEEED82AhggACgCKCECDAELIAAgAjYCGCAAKAIoIgJFDQELIAAgASACED82AhwLIAAgATYCDAtiAQF/QQFBLBA/IgUgAzYCKCAFIAI2AhAgBUIANwIIIAUgATYCBCAFIAA2AgBBACEDIARBAUcEQCAAQQFqQQQQPyEDCyAFQQA2AiQgBSAENgIgIAVCADcCGCAFIAM2AhQgBQt5AQJ8An9BACABKwMYQejYCisDACICoUHw2AorAwAgAqGjIAAoAgQiAbciA6IiAkQAAAAAAAAAAGMNABogAUEBayACIANmDQAaIAKZRAAAAAAAAOBBYwRAIAKqDAELQYCAgIB4CyIBIAAoAgxIBEAgACABNgIMCyABC5sGAgp/AnwjAEEQayIJJABBxO0KIAFBAWpBBBAYNgIAQYCLCy0AAARAQZa+A0EcQQFB6PoGKAIAEEoaQbiRCxCoAQsgABAaIQEDQCABBEBBACECQciLCysDACEMIAAoAhAoApgBIQMDQCADIAJBAnRqKAIAIgQEQCAEKAIQIAw5A5gBIAJBAWohAgwBCwtByO0KIAE2AgAgASgCECICQQA2ApABIAJCADcDmAEgARDbCQNAQQAhA0EAIQpBwO0KKAIAIgIEQEHE7QooAgAiBigCACEKQcDtCiACQQFrIgs2AgAgBiAGIAtBAnRqKAIAIgg2AgAgCCgCEEEANgKMAQJAIAJBA0gNAANAIANBAXQiAkEBciIFIAtODQECQAJ8IAsgAkECaiICTARAIAYgBUECdGooAgAiBCgCECsDmAEMAQsgBiACQQJ0aigCACIEKAIQKwOYASIMIAYgBUECdGooAgAiBygCECsDmAEiDWMNASAHIQQgDQshDCAFIQILIAgoAhArA5gBIAxlDQEgBiACQQJ0aiAINgIAIAgoAhAgAjYCjAEgBiADQQJ0aiAENgIAIAQoAhAgAzYCjAEgAiEDDAALAAsgCigCEEF/NgKMAQsgCiIDBEBByO0KKAIAIgIgA0cEQCAAKAIQKAKgASIEIAMoAhAiBSgCiAEiB0ECdGooAgAgAigCECgCiAEiAkEDdGogBSsDmAEiDDkDACAEIAJBAnRqKAIAIAdBA3RqIAw5AwALIAAgAxBvIQIDQCACRQ0CIAMgAkEwQQAgAigCAEEDcSIFQQNHG2ooAigiBEYEQCACQVBBACAFQQJHG2ooAighBAsCQCADKAIQIgcrA5gBIAIoAhArA4gBoCIMIAQoAhAiBSsDmAFjRQ0AIAUgDDkDmAEgBSgCjAFBAE4EQCAEENoJDAELIAUgBygCkAFBAWo2ApABIAQQ2wkLIAAgAiADEHQhAgwACwALCyAAIAEQGyEBDAELC0GAiwstAAAEQCAJEIoBOQMAQej6BigCAEGTvQQgCRAtC0HE7QooAgAQFyAJQRBqJAALfwEFf0HE7QooAgAhAiAAKAIQKAKMASEBA0ACQCABQQBMDQAgAiABQQFrQQF2IgNBAnRqIgUoAgAiBCgCECsDmAEgACgCECsDmAFlDQAgBSAANgIAIAAoAhAgAzYCjAEgAiABQQJ0aiAENgIAIAQoAhAgATYCjAEgAyEBDAELCwtiAQJ/IAAoAhAiAigCjAFBAEgEQEHA7QpBwO0KKAIAIgFBAWo2AgAgAiABNgKMAUHE7QooAgAgAUECdGogADYCACABQQBKBEAgABDaCQsPC0GClwNBxrsBQfQEQZuPARAAAAtRAgN/AnxBvIsLLwEAIQUDQCADIAVGRQRAIAIgA0EDdCIEaiAAIARqKwMAIAEgBGorAwChIgc5AwAgByAHoiAGoCEGIANBAWohAwwBCwsgBp8L3AECAX8BfEGAiwstAAAEQEG82gNBGkEBQej6BigCABBKGgsCQCAAIAFBAhD9CSICQQFGDQBBACEBAkAgAg0AQbDtCi0AAEEBcQ0AQYysBEEAECdBsO0KQQE6AAALA0AgACgCECgCmAEgAUECdGooAgAiAkUNASACKAIQLQCHAUUEQBDMASEDIAIoAhAoApQBIANEAAAAAAAA8D+iOQMAEMwBIQMgAigCECgClAEgA0QAAAAAAADwP6I5AwhBvIsLLwEAQQNPBEAgAkEBEMYGCwsgAUEBaiEBDAALAAsLrQEBBn8gACgCECgCmAEQF0GMiwsoAgBFBEAgACgCECgCoAEQ1QIgACgCECgCpAEQ1QIgACgCECgCqAEQ1QIgACgCECIBKAKsASIEBH8DQEEAIQEgBCACQQJ0aiIFKAIAIgMEQANAIAMgAUECdGooAgAiBgRAIAYQFyABQQFqIQEgBSgCACEDDAELCyADEBcgAkEBaiECDAELCyAEEBcgACgCEAUgAQtBADYCrAELC5EBAQV/IAAgARBvIQMDQCADRQRAIAUPCwJAIANBUEEAIAMoAgBBA3EiBEECRxtqKAIoIgcgA0EwQQAgBEEDRxtqKAIoIgRGDQAgBQRAQQEhBSABIARGIAYgB0ZxIAEgB0YgBCAGRnFyDQFBAg8LIAIgByAEIAEgBEYbIgY2AgBBASEFCyAAIAMgARB0IQMMAAsAC6oIAgp/AXwjAEEQayIFJABBgIsLLQAABEAgABAeIQMgBSAAEDU2AgQgBSADNgIAQej6BigCAEG+4gMgBRAdGgsCQEGBiwstAABBAUcNACAAEBohBANAIAQiA0UNASAAIAMQGyEEAkACQCAAIAMgBUEIahDfCQ4CAAECCyAAKAJIIAMQtAEMAQsgACgCSCADELQBIAUoAgghAwNAIAMiAkUNAUEAIQMCQAJAIAAgAiAFQQxqEN8JDgIAAQILIAIgBEYEQCAAIAIQGyEECyAAKAJIIAIQtAEMAQsgAiAERgRAIAAgAhAbIQQLIAAoAkggAhC0ASAFKAIMIQMMAAsACwALIAAQNSEEIAAQsAIhB0EAIQMgAEECQevlAEEAEB8hBgJAAkACQAJAIAEOBQACAgIBAgtBsIsLIAS3RC1DHOviNho/ojkDACAAELIIQdCLCyAAKAJIQZWAARAjIgIEfCACEKgCBUSuR+F6FK7vPws5AwAgBEEBakEEEBghAiAAKAIQIAI2ApgBIAAQGiECA0AgAkUNAyAAKAIQKAKYASADQQJ0aiACNgIAIAIoAhAiCEF/NgKMASAIIAM2AogBIAwgACACIAYQyAagIQwgA0EBaiEDIAAgAhAbIQIMAAsAC0GwiwtC+6i4vZTcnsI/NwMAIAAQsgggBEEBakEEEBghAiAAKAIQIAI2ApgBIAAQGiECA0AgAkUNAiAAKAIQKAKYASADQQJ0aiACNgIAIAIoAhAgAzYCiAEgDCAAIAIgBhDIBqAhDCADQQFqIQMgACACEBshAgwACwALQbCLC0KthvHYrtyNjT83AwAgABCyCCAAEBohAgNAIAJFDQEgAigCECADNgKIASAMIAAgAiAGEMgGoCEMIANBAWohAyAAIAIQGyECDAALAAtByIsLAnwCQCAAQZUZECMiA0UNACADLQAARQ0AQbCLCysDACADEKgCECQMAQsgDEEBIAcgB0EBTBu4oyAEt5+iRAAAAAAAAPA/oAsiDDkDAEGMiwsoAgAgAXJFBEAgBCAEIAwQ1gIhASAAKAIQIAE2AqABIAQgBEQAAAAAAADwPxDWAiEBIAAoAhAgATYCpAEgBEG8iwsvAQBEAAAAAAAA8D8Q1gIhASAAKAIQIAE2AqgBIARBACAEQQBKGyEBQbyLCy8BACEIIARBAWoiCkEEEBghB0EAIQMDQCABIANGRQRAIAcgA0ECdGogCkEEEBgiCTYCAEEAIQYDQCABIAZGRQRAIAkgBkECdGogCEEIEBgiCzYCAEEAIQIDQCACIAhGRQRAIAsgAkEDdGpCADcDACACQQFqIQIMAQsLIAZBAWohBgwBCwsgCSABQQJ0akEANgIAIANBAWohAwwBCwsgByABQQJ0akEANgIAIAAoAhAgBzYCrAELIAVBEGokACAEC7gDAgd/A3wgA0EAIANBAEobIQogAkEAIAJBAEobIQsCQCAEQQJGBEADQCAFIApGDQIgASAFQQR0aiIEKAIAIQZBACECA0AgAiAGRgRAIAVBAWohBQwCBSAFIAJBAnQiByAEKAIEaigCACIISARARAAAAAAAAAAAIQ1BACEDA0AgAyALRkUEQCAAIANBAnRqKAIAIgkgBUEDdGorAwAgCSAIQQN0aisDAKEiDiAOoiANoCENIANBAWohAwwBCwsgDCAEKAIIIAdqKAIAtyIMIA2foSINIA2iIAwgDKKjoCEMCyACQQFqIQIMAQsACwALAAsDQCAFIApGDQEgASAFQQR0aiIEKAIAIQZBACECA0AgAiAGRgRAIAVBAWohBQwCBSAFIAJBAnQiByAEKAIEaigCACIISARARAAAAAAAAAAAIQ1BACEDA0AgAyALRkUEQCAAIANBAnRqKAIAIgkgBUEDdGorAwAgCSAIQQN0aisDAKEiDiAOoiANoCENIANBAWohAwwBCwsgDCAEKAIIIAdqKAIAtyIMIA2foSINIA2iIAyjoCEMCyACQQFqIQIMAQsACwALAAsgDAuJAgEDfyMAQRBrIgIkACACIAE2AgQgAiABNgIMIAIgATYCCAJAAkACQEEAQQBBtbIBIAEQTiIEQQBIDQAgBEEBaiEBIAQgABA4IAAQIWsiA08EQCAAIAEgA2sQuAILIAAQISEDIAQgABAlBH8gACADagUgACgCACADagsgAUG1sgEgAigCDBBOIgFHIAFBAE5xDQEgAUEATA0AIAAQJQRAIAFBgAJPDQMgACAALQAPIAFqOgAPIAAQIUEQSQ0BQb+uA0GP/QBBxAFB2R0QAAALIAAgACgCBCABajYCBAsgAkEQaiQADwtBzZYDQY/9AEG/AUHZHRAAAAtB0skBQY/9AEHCAUHZHRAAAAu9AwIGfwJ8IwBBMGsiBCQAIAAoAgAhAgJAAkACQCAAAn8gACgCBCIFIAAoAghHBEAgBQwBCyAFQf////8ATw0BIAVBAXQiA0GAgICAAU8NAgJAIANFBEAgAhAXQQAhAgwBCyACIAVBBXQiBhA9IgJFDQQgBiAFQQR0IgdNDQAgAiAHakEAIAcQMxoLIAAgAzYCCCAAIAI2AgAgACgCBAtBAWo2AgQgAiAFQQR0aiIDIAEpAwg3AwggAyABKQMANwMAA0ACQCAFRQ0AIAAoAgAiAiAFQQR0IgNqKwMIIgggAiAFQQF2IgVBBHQiAWorAwgiCWNFBEAgCCAJYg0BEKYBQQFxRQ0BIAAoAgAhAgsgBCACIANqIgNBCGopAwA3AyggBCADKQMANwMgIAMgASACaiICKQMANwMAIAMgAikDCDcDCCAAKAIAIAFqIgEgBCkDIDcDACABIAQpAyg3AwgMAQsLIARBMGokAA8LQZG0A0He/QBBzQBBk7MBEAAACyAEQRA2AgQgBCADNgIAQej6BigCAEHa3QMgBBAdGhAmAAsgBCAGNgIQQej6BigCAEGp3QMgBEEQahAdGhAmAAubAgIEfwJ8IwBBEGsiBSQAA0AgAUEBdCICQQFyIQMCQAJAIAIgACgCBE8NACAAKAIAIgQgAkEEdGorAwgiBiAEIAFBBHRqKwMIIgdjDQEgBiAHYg0AEKYBQQFxDQELIAEhAgsCQCADIAAoAgRPDQAgACgCACIEIANBBHRqKwMIIgYgBCACQQR0aisDCCIHY0UEQCAGIAdiDQEQpgFBAXFFDQELIAMhAgsgASACRwRAIAUgACgCACIEIAJBBHRqIgNBCGopAwA3AwggBSADKQMANwMAIAMgBCABQQR0IgFqIgQpAwA3AwAgAyAEKQMINwMIIAAoAgAgAWoiASAFKQMANwMAIAEgBSkDCDcDCCACIQEMAQsLIAVBEGokAAsUAEGU7QpBGBCIBUGg7QpBADYCAAvMAQIDfwF8IABBAEEAIAJBABDTBiIEQwAAgD8gAUEAQQEgAhD/BCAEKAIkELkGIABBACAAQQBKGyEAA0AgACADRkUEQCADQQJ0IgUgBCgCEGooAgAQ8gQhBiABKAIAIAVqIAa2OAIAIANBAWohAwwBCwtBACEDIARDAACAPyABQQFBACACEP8EIAQoAiQQuQYDQCAAIANGRQRAIANBAnQiAiAEKAIQaigCABDyBCEGIAEoAgQgAmogBrY4AgAgA0EBaiEDDAELCyAEENIGC0sAIAAQNCAARwRAIABB7CVBmAJBARAuGgsgACABRgRAIAAQNCgCECABNgK8AQsgABByIQADQCAABEAgACABEOcJIAAQcSEADAELCwvICAILfwZ9IAAoAgggACgCBGohByAAKAIwIQogACgCLCELIAAoAighCAJAIAAoAhRBAEwEQCAHQQAgB0EAShshBgwBCyAHQQAgB0EAShshBgNAIAMgBkcEQCADQQJ0IgQgACgCEGooAgAgAiAEaioCALsQrwkgA0EBaiEDDAELCyAAKAIkELEJQQAhAwNAIAMgBkYNASACIANBAnQiBGogACgCECAEaigCABDyBLY4AgAgA0EBaiEDDAALAAtBACEDA0ACQCAMQegHTg0AQQAhBCADQQFxDQADfyAEIAZGBH9DAAAAACEQQwAAAAAhD0EABSALIARBAnQiBWogAiAFaioCADgCACAFIAhqIgkgASAFaioCACIOIA6SIg44AgBBACEDA0AgAyAHRwRAIAkgA0ECdCINIAAoAgAgBWooAgBqKgIAQwAAAMCUIAIgDWoqAgCUIA6SIg44AgAgA0EBaiEDDAELCyAEQQFqIQQMAQsLIQQDQAJAIAQgBkcEQCAIIARBAnQiBWoqAgAhEUMAAAAAIQ5BACEDA0AgAyAHRg0CIANBAnQiCSAAKAIAIAVqKAIAaioCACISIBKSIAggCWoqAgCUIA6SIQ4gA0EBaiEDDAALAAsgEIwgD5VDAACAvyAPQwAAAABcGyEOQQAhAwNAIAMgBkcEQCACIANBAnQiBGoiBSAOIAQgCGoqAgCUIAUqAgCSOAIAIANBAWohAwwBCwtBACEDAkAgACgCFEEATA0AA0AgAyAGRwRAIANBAnQiBCAAKAIQaigCACACIARqKgIAuxCvCSADQQFqIQMMAQsLIAAoAiQQsQlBACEDA0AgAyAGRg0BIAIgA0ECdCIEaiAAKAIQIARqKAIAEPIEtjgCACADQQFqIQMMAAsAC0EAIQRBACEDA30gAyAGRgR9QwAAAAAhD0MAAAAABSAKIANBAnQiBWogAiAFaioCACAFIAtqKgIAkzgCACADQQFqIQMMAQsLIRADQAJAIAQgBkcEQCAKIARBAnQiBWoqAgAhESAFIAhqKgIAIRJDAAAAACEOQQAhAwNAIAMgB0YNAiADQQJ0IgkgACgCACAFaigCAGoqAgAiEyATkiAJIApqKgIAlCAOkiEOIANBAWohAwwACwALQwAAAAAhDiAQIA+VQwAAgD8gD0MAAAAAXBsiD0MAAAAAXiAPQwAAgD9dcSEFQQAhAwNAIAMgBkcEQAJAIAVFBEAgAiADQQJ0aioCACEQDAELIAIgA0ECdCIEaiAPIAQgCmoqAgCUIAQgC2oqAgCSIhA4AgALIA4gECALIANBAnRqKgIAk4uSIQ4gA0EBaiEDDAELCyAMQQFqIQwgDrtELUMc6+I2Gj9kRSEDDAULIARBAWohBCAOIBGUIA+SIQ8gEiARlCAQkiEQDAALAAsgBEEBaiEEIA8gDiARlJMhDyARIBGUIBCSIRAMAAsACwsgDAvlAQIIfwF9IAFBBBAYIgQgASABbCIDQQQQGCIFNgIAIANDAAAAACAFEMIDQQEgASABQQFMGyEDQQEhAgN/IAIgA0YEfyABQQAgAUEAShshB0EAIQMDQCADIAdGRQRAIAQgA0ECdCIIaiEJIAMhAgNAIAEgAkZFBEAgAkECdCIFIAkoAgBqIAAgBkECdGoqAgAiCjgCACAEIAVqKAIAIAhqIAo4AgAgBkEBaiEGIAJBAWohAgwBCwsgA0EBaiEDDAELCyAEBSAEIAJBAnRqIAUgASACbEECdGo2AgAgAkEBaiECDAELCwvoAwIFfwR8QczZCigCACIERQRAQczZCkHA2QooAgAQnAIiBDYCAAsgAUEAIAFBAEobIQYgAisDCCEIIAIrAwAhCQNAIAMgBkYEQAJAIAFBAWshBUEAIQNEAAAAAAAAAAAhCANAIAMgBkcEQCADIAVqIAFvIQACQAJAIAQgA0EEdGoiAisDCCIJRAAAAAAAAAAAYg0AIAQgAEEEdGoiBysDCEQAAAAAAAAAAGINACACKwMAIAcrAwCiRAAAAAAAAAAAY0UNAQwECyAEIABBBHRqIgArAwgiCkQAAAAAAAAAAGUgCUQAAAAAAAAAAGZxRSAJRAAAAAAAAAAAZUUgCkQAAAAAAAAAAGZFcnENACACKwMAIAqiIAkgACsDAKKhIAogCaGjIgtEAAAAAAAAAABhDQMgC0QAAAAAAAAAAGRFDQAgCUQAAAAAAAAAAGIgCkQAAAAAAAAAAGJxRQRAIAhEAAAAAAAA4D+gIQgMAQsgCEQAAAAAAADwP6AhCAsgA0EBaiEDDAELCwJ/IAiZRAAAAAAAAOBBYwRAIAiqDAELQYCAgIB4C0GBgICAeHFBAUYPCwUgBCADQQR0IgJqIgUgACACaiICKwMAIAmhOQMAIAUgAisDCCAIoTkDCCADQQFqIQMMAQsLQQELjAECBnwBf0EBIAEgAUEBTRshCiAAKwMAIgQhBSAAKwMIIgYhB0EBIQEDQCABIApGBEAgAiAGOQMIIAIgBDkDACADIAc5AwggAyAFOQMABSABQQFqIQEgACsDECEIIAcgACsDGCIJECQhByAFIAgQJCEFIAYgCRAyIQYgBCAIEDIhBCAAQRBqIQAMAQsLC4ABAgF/AnwCQCABQQRHDQACfyAAKwMIIgQgACsDGCIDYQRAIAArAyggACsDOGINAiAAKwMAIAArAzBiDQIgACsDECEDIABBIGoMAQsgACsDACAAKwMQYg0BIAArAyAgACsDMGINASAEIAArAzhiDQEgAEEoagsrAwAgA2EhAgsgAgvSBgIMfwJ8IAFBACABQQBKGyEJIAFBCBAYIQogACgCCCELA0ACQCAFIAlHBEAgACgCEEUNAUEBIQRBASAAIAVBFGxqIgYoAgAiByAHQQFNGyEHRAAAAAAAAAAAIRADQCAEIAdGBEAgCiAFQQN0aiAQOQMADAMFIBAgBEECdCIIIAYoAghqKgIAIAYoAhAgCGoqAgCUu6AhECAEQQFqIQQMAQsACwALQQAhBCABQQAgAUEAShshBQNAIAQgBUcEQCACIARBA3RqEKYBQfQDb7c5AwAgBEEBaiEEDAELCyABIAIQvAJBACEEQQAhBQNAIAQgCUcEQCAAIARBFGxqKAIAIAVqIQUgBEEBaiEEDAELC0EAIQYgBUEEEBghBQNAIAYgCUcEQCAAIAZBFGxqIgQgBTYCCCAFIAQoAgAiB0EBa7OMOAIAQQEhBEEBIAcgB0EBTRshCANAIAQgCEYEQCAGQQFqIQYgBSAHQQJ0aiEFDAMFIAUgBEECdGpBgICA/AM2AgAgBEEBaiEEDAELAAsACwsCfyABQQgQGCEEIAFBCBAYIQUgAUEIEBghBiABQQgQGCEHIAFBCBAYIQggASAKIAFBCBAYIgwQhAIgASAMELwCIAEgAhC8AiAAIAEgAiAHEIcKIAEgDCAHIAQQhgUgASAEIAUQhAIgA0EAIANBAEobIQ4gA0EBayEPIAEgBCAEEKABIRBBACEDA0ACQAJAAkAgAyAORg0AIAEgBBCFCkT8qfHSTWJQP2RFDQAgACABIAUgBhCHCiABIAUgBhCgASIRRAAAAAAAAAAAYQ0AIAEgBSAQIBGjIhEgCBDgASABIAIgCCACEIUFIAMgD04NAiABIAYgESAGEOABIAEgBCAGIAQQhgUgASAEIAQQoAEhESAQRAAAAAAAAAAAYg0BQc32A0EAEDFBASENCyAEEBcgBRAXIAYQFyAHEBcgCBAXIAwQFyANDAMLIAEgBSARIBCjIAUQ4AEgASAEIAUgBRCFBSARIRALIANBAWohAwwACwALIAAoAggQF0EAIQQDQCAEIAlHBEAgACAEQRRsaiICIAs2AgggBEEBaiEEIAsgAigCAEECdGohCwwBCwsgChAXQR92DwsgBUEBaiEFDAALAAvYAQIDfwJ8IwBBEGsiBCQAIAAoAhAiAiACKwMgIAErAwAiBqE5AyAgASsDCCEFIAIgAisDECAGoTkDECACIAIrAyggBaE5AyggAiACKwMYIAWhOQMYAkAgAigCDCIDRQ0AIAMtAFFBAUcNACADIAMrAzggBqE5AzggAyADKwNAIAWhOQNAC0EBIQMDQCADIAIoArQBSkUEQCACKAK4ASADQQJ0aigCACAEIAEpAwg3AwggBCABKQMANwMAIAQQ7gkgA0EBaiEDIAAoAhAhAgwBCwsgBEEQaiQAC6ABAgN/AnwjAEEQayIDJABBASEEA0AgBCAAKAIQIgIoArQBSkUEQCACKAK4ASAEQQJ0aigCACADIAEpAwg3AwggAyABKQMANwMAIAMQ7wkgBEEBaiEEDAELCyACIAIrAyAgASsDACIGoTkDICABKwMIIQUgAiACKwMQIAahOQMQIAIgAisDKCAFoTkDKCACIAIrAxggBaE5AxggA0EQaiQAC6gBAQJ/IAAoAhAiAyADKwMgIAGiOQMgIAMgAysDKCACojkDKCADIAMrAxAgAaI5AxAgAyADKwMYIAKiOQMYAkAgAygCDCIERQ0AIAQtAFFBAUcNACAEIAQrAzggAaI5AzggBCAEKwNAIAKiOQNAC0EBIQQDQCAEIAMoArQBSkUEQCADKAK4ASAEQQJ0aigCACABIAIQ8AkgBEEBaiEEIAAoAhAhAwwBCwsLogUCCn8EfCMAQSBrIgMkACADIAAoAhAiASkDGDcDGCADIAEpAxA3AxAgAysDECILRAAAAAAAAFJAoyENIAMrAxgiDEQAAAAAAABSQKMhDiAAEBohAgNAIAIEQCACKAIQIgQoApQBIgEgASsDACANoTkDACABIAErAwggDqE5AwgCQCAEKAJ8IgFFDQAgAS0AUUEBRw0AIAEgASsDOCALoTkDOCABIAErA0AgDKE5A0ALIAAgAhAbIQIMAQsLIAAQGiEEA0AgBARAIAAgBBApIQUDQAJAIAUEQCAFKAIQIgYoAggiAUUNASABKAIEIQkgASgCACEBQQAhBwNAIAcgCUYEQAJAIAYoAmAiAUUNACABLQBRQQFHDQAgASABKwM4IAuhOQM4IAEgASsDQCAMoTkDQAsCQCAGKAJsIgFFDQAgAS0AUUEBRw0AIAEgASsDOCALoTkDOCABIAErA0AgDKE5A0ALAkAgBigCZCIBRQ0AIAEtAFFBAUcNACABIAErAzggC6E5AzggASABKwNAIAyhOQNACyAGKAJoIgFFDQMgAS0AUUEBRw0DIAEgASsDOCALoTkDOCABIAErA0AgDKE5A0AMAwsgASgCBCEKIAEoAgAhAkEAIQgDQCAIIApGBEAgASgCCARAIAEgASsDECALoTkDECABIAErAxggDKE5AxgLIAEoAgwEQCABIAErAyAgC6E5AyAgASABKwMoIAyhOQMoCyAHQQFqIQcgAUEwaiEBDAIFIAIgAisDACALoTkDACACIAIrAwggDKE5AwggCEEBaiEIIAJBEGohAgwBCwALAAsACyAAIAQQGyEEDAMLIAAgBRAsIQUMAAsACwsgAyADKQMYNwMIIAMgAykDEDcDACAAIAMQ7gkgA0EgaiQAC5ECAQR/IAFB7CVBmAJBARAuGiABKAIQIgIgACgCECIDKQMQNwMQIAIgAykDKDcDKCACIAMpAyA3AyAgAiADKQMYNwMYIAEoAhAiAiAAKAIQIgMtAJMCOgCTAiACQTBqIANBMGpBwAAQIBogASgCECAAKAIQKAK0ASICNgK0ASACQQFqQQQQGCEDIAEoAhAgAzYCuAEgAkEAIAJBAEobQQFqIQVBASECA0AgACgCECEDIAIgBUZFBEAgAkECdCIEIAMoArgBaigCABDYCCEDIAEoAhAoArgBIARqIAM2AgAgACgCECgCuAEgBGooAgAgAxDyCSACQQFqIQIMAQsLIAEoAhAgAygCDDYCDCADQQA2AgwL4wcCB38GfCMAQeAAayIGJAAgBkEIaiEDIwBBIGsiBSQAAkAgACIHQe3aABAjIgAEQCAAIANEAAAAAAAA8D9EAAAAAAAAAAAQjQUNAQsgB0Hu2gAQIyIABEAgACADRAAAAAAAAPQ/RJqZmZmZmQlAEI0FDQELIANBAToAECADQpqz5syZs+aEwAA3AwAgA0Kas+bMmbPmhMAANwMIC0GAiwstAAAEQCADLQAQIQAgAysDACEKIAUgAysDCDkDECAFIAo5AwggBSAANgIAQej6BigCAEHh5QQgBRAtCyAFQSBqJAAgBxAaIQUDQCAFBEAgByAFECkhBANAIAQEQCMAQTBrIgMkACAEKAIQIgAtAC9BAUYEQCADQQhqIgggBEEwQQAgBCgCAEEDcSIJQQNHG2ooAiggBEFQQQAgCUECRxtqKAIoIABBEGoiABDqBSAAIAhBKBAgGiAEKAIQIQALIAAtAFdBAUYEQCADQQhqIgggBEFQQQAgBCgCAEEDcSIJQQJHG2ooAiggBEEwQQAgCUEDRxtqKAIoIABBOGoiABDqBSAAIAhBKBAgGgsgA0EwaiQAIAcgBBAsIQQMAQsLIAcgBRAbIQUMAQsLQdD5B0HsyQooAgAQfyEJIAcQGiEIA0AgCARAIAcgCBApIQQDQAJAAkACQCAEBEACQEGMiwsoAgBBAkgNACAEKAIQIgAoAghFDQAgACAALwGoAUEBajsBqAEMBAsgBEEwQQAgBCgCAEEDcSIDQQNHG2ooAigiACAEQVBBACADQQJHG2ooAigiBUkEQCAEKAIQIgMrA0AhDSADKwM4IQ4gAysDGCEKIAMrAxAhCyAAIQMMAwsgBCgCECEDIAAgBUsEQCADKwNAIQogAysDOCELIAMrAxghDSADKwMQIQ4gBSEDIAAhBQwDCyADKwMYIQwgAysDQCEKIAMrAxAiDyADKwM4IgtjDQEgCyAPY0UEQCAKIAxkDQIgCiAMIAogDGMiAxshCiALIA8gAxshCwsgACIDIQUgDyEOIAwhDQwCCyAHIAgQGyEIDAULIAAiAyEFIAshDiAKIQ0gDyELIAwhCgsgBiANOQNQIAYgDjkDSCAGIAU2AkAgBiAKOQM4IAYgCzkDMCAGIAM2AiggBiAENgJYIAkgBkEgakEBIAkoAgARAwAoAjgiACAERg0AIAAoAhAiACAALwGoAUEBajsBqAEgBCgCECAAKAKwATYCsAEgACAENgKwAQsgByAEECwhBAwACwALCyAJEHkaQQEhBCAHIAZBCGogAiABEQMARQRAQcCLC0EBNgIAQQAhBAsgBkHgAGokACAEC/YGAg1/AX4jAEGgAWsiBCQAIAQgACgCECkDkAEiETcDmAEgBCARpyIFKQMINwNoIAQgBSkDADcDYCAEIAUgEUIgiKdBBHRqQRBrIgUpAwg3A1ggBCAFKQMANwNQAkAgA0UEQCACQQAgAkEAShshCEGpdyEFQal3IQYMAQtBACEDIAJBACACQQBKGyEIQal3IQVBqXchBgNAIAMgCEYNASAFQal3RgRAIAEgA0ECdGooAgApAgAhESAEQUBrIAQpA2g3AwAgBCARNwNIIAQgBCkDYDcDOCADQal3IARByABqIARBOGoQtgQbIQULIAZBqXdGBEAgASADQQJ0aigCACkCACERIAQgBCkDWDcDKCAEIBE3AzAgBCAEKQNQNwMgIANBqXcgBEEwaiAEQSBqELYEGyEGCyADQQFqIQMMAAsAC0EAIQMDQCADIAhHBEAgAyAFRiADIAZGckUEQCABIANBAnRqKAIAKAIEIAdqIQcLIANBAWohAwwBCwsgB0EgEBghCUEAIQIDQCACIAhHBEACQCACIAVGIAIgBkZyDQBBACEDIAEgAkECdGooAgAiDigCBCINQQAgDUEAShshDwNAIAMgD0YNASAJIApBBXRqIgsgDigCACIMIANBBHRqIhApAwA3AwAgCyAQKQMINwMIIAsgDCADQQFqIgNBACADIA1IG0EEdGoiDCkDADcDECALIAwpAwg3AxggCkEBaiEKDAALAAsgAkEBaiECDAELCyAHIApGBEAgBEIANwOIASAEQgA3A4ABIARCADcDeCAEQgA3A3AgBCAEKQOYATcDGAJAIAkgByAEQRhqIARB8ABqIARBkAFqEPcHQQBIBEAgAEEwQQAgACgCAEEDcUEDRxtqKAIoEB4hASAEIABBUEEAIAAoAgBBA3FBAkcbaigCKBAeNgIEIAQgATYCAEGT4QQgBBAxDAELQYCLCy0AAEECTwRAIABBMEEAIAAoAgBBA3FBA0cbaigCKBAeIQEgBCAAQVBBACAAKAIAQQNxQQJHG2ooAigQHjYCFCAEIAE2AhBB6PoGKAIAQevlAyAEQRBqEB0aCyAAIABBUEEAIAAoAgBBA3FBAkcbaigCKCAEKAKQASAEKAKUAUHo+QcQnQEgCRAXIAAQqwMLIARBoAFqJAAPC0H/6gBB8rgBQckAQcwpEAAAC/IOAhB/AnwjAEFAaiIFJAAgAUEwQQAgASgCAEEDcSIHQQNHG2ooAigoAhAiEisAECEVIAEoAhAiESsAECEUIAUgESsAGCASKwAYoDkDOCAFIBQgFaA5AzAgAUFQQQAgB0ECRxtqKAIoKAIQIhMrABAhFSARKwA4IRQgBSARKwBAIBMrABigOQMoIAUgFCAVoDkDIEGpdyEBQal3IQcgAwRAIBMoArACIQcgEigCsAIhAQsgBSAFKQM4NwMYIAUgBSkDKDcDCCAFIAUpAzA3AxAgBSAFKQMgNwMAIAAhESMAQeAAayIIJAAgCCAFKQMYNwNYIAggBSkDEDcDUCACIAEgCEHQAGoQ7w0hEiAIIAUpAwg3A0ggCCAFKQMANwNAIAIgByAIQUBrEO8NIRMgCCAFKQMYNwM4IAggBSkDEDcDMCAIIAUpAwg3AyggCCAFKQMANwMgIwBBIGsiCSQAIAIoAgQhDyAJIAgpAzg3AxggCSAIKQMwNwMQIAkgCCkDKDcDCCAJIAgpAyA3AwAjAEHAAWsiBCQAAn8CfwJAIAFBAEgEQEEAIAdBAEgNAxogAigCDCAHQQJ0aiENDAELIAdBAEgEQCACKAIMIAFBAnRqIQ0MAQsgAigCDCEAIAEgB00EQCAAIAdBAnRqIQ0gACABQQJ0aiIAKAIEIQsgACgCAAwCCyAAIAFBAnRqIQ0gACAHQQJ0aiIAKAIEIQsgACgCAAwBC0EACyEKIA0oAgQhBiANKAIACyEQIAIoAhAhDiACKAIIIQwgAigCBCEHQQAhDSAKQQAgCkEAShshAwJAA0ACQCADIA1GBEAgECALIAsgEEgbIQMDQCADIAtGBEAgBiAHIAYgB0obIQMDQCADIAZGIgoNBiAOIAZBAnRqKAIAIQEgBCAJKQMYNwM4IAQgCSkDEDcDMCAEIAkpAwg3AyggBCAJKQMANwMgIAQgDCAGQQR0aiIAKQMINwMYIAQgACkDADcDECAEIAwgAUEEdGoiACkDCDcDCCAEIAApAwA3AwAgBkEBaiEGIARBMGogBEEgaiAEQRBqIAQQswRFDQALDAULIA4gC0ECdGooAgAhASAEIAkpAxg3A3ggBCAJKQMQNwNwIAQgCSkDCDcDaCAEIAkpAwA3A2AgBCAMIAtBBHRqIgApAwg3A1ggBCAAKQMANwNQIAQgDCABQQR0aiIAKQMINwNIIAQgACkDADcDQCALQQFqIQsgBEHwAGogBEHgAGogBEHQAGogBEFAaxCzBEUNAAsMAQsgDiANQQJ0aigCACEBIAQgCSkDGDcDuAEgBCAJKQMQNwOwASAEIAkpAwg3A6gBIAQgCSkDADcDoAEgBCAMIA1BBHRqIgApAwg3A5gBIAQgACkDADcDkAEgBCAMIAFBBHRqIgApAwg3A4gBIAQgACkDADcDgAEgDUEBaiENIARBsAFqIARBoAFqIARBkAFqIARBgAFqELMERQ0BCwtBACEKCyAEQcABaiQAAkAgCgRAIA9BAmpBBBAYIgsgD0ECdGogD0EBaiIANgIAIAsgAEECdGpBfzYCAAwBCyACKAIYIgwgD0ECdGogEzYCACAMIA9BAWoiAUECdGogEjYCAEEAIQYgD0ECaiIAQQAgAEEAShshDiAAQQQQGCELIA9BA2pBCBAYIhBBCGohCgNAIAYgDkcEQCALIAZBAnRqQX82AgAgCiAGQQN0akKAgID+////70E3AwAgBkEBaiEGDAELCyAQQoCAgICAgIDwQTcDAANAIAEgD0cEQCAKIAFBA3RqIgdEAAAAAAAAAAAgBysDACIUmiAURAAAwP///9/BYRs5AwBBfyEAQQAhBgNAIAYgDkYEQCAAIQEMAwUgCiAGQQN0aiIDKwMAIhVEAAAAAAAAAABjBEACQCAMIAEgBiABIAZKG0ECdGooAgAgASAGIAEgBkgbQQN0aisDACIURAAAAAAAAAAAYQ0AIBUgFCAHKwMAoJoiFGNFDQAgAyAUOQMAIAsgBkECdGogATYCACAUIRULIAYgACAVIAogAEEDdGorAwBkGyEACyAGQQFqIQYMAQsACwALCyAQEBcLIAlBIGokACALIQwgAigCBCIBQQFqIRBBASEAIAEhBwNAIAAiA0EBaiEAIAwgB0ECdGooAgAiByAQRw0ACwJAAkACQCAAQYCAgIABSQRAQQAgACAAQRAQRiIOGw0BIA4gA0EEdGoiByAFKQMANwMAIAcgBSkDCDcDCANAIA4gA0EBayIDQQR0aiEKIBAgDCABQQJ0aigCACIBRwRAIAogAigCCCABQQR0aiIHKQMANwMAIAogBykDCDcDCAwBCwsgCiAFKQMQNwMAIAogBSkDGDcDCCADDQIgEhAXIBMQFyARIA42AgAgESAANgIEIAwQFyAIQeAAaiQADAMLIAhBEDYCBCAIIAA2AgBB6PoGKAIAQdrdAyAIEB0aECYACyAIIABBBHQ2AhBB6PoGKAIAQandAyAIQRBqEB0aECYAC0H+kwNB3bYBQfsAQfz3ABAAAAsgBUFAayQAC4IBAQF8AkAgACACKwMAIgNiBEAgAyABoiIBmiABIAIrAwhEAAAAAAAAAABmGyAAIACiIAMgA6KhnyAAoqMiAL1C////////////AINCgICAgICAgPj/AFoNASAADwtBxKcDQfK4AUGQAkHTlQEQAAALQcqyA0HyuAFBkwJB05UBEAAAC50OAgp8CX8jAEGgAWsiDSQAAkACQAJAAkACQCAAEP4CQQFrDgQAAQACBAtBCCEPQQgQTSEQIAAoAhAiDigCDCERAnwgAgRAAn8gES0AKUEIcQRAIA1BMGogERCwDiANIA0rA0giAzkDiAEgDSANKwMwIgY5A4ABIA0gAzkDeCANIA0rA0AiBTkDcCANIA0rAzgiAzkDaCANIAU5A2AgDSADOQNYIA0gBjkDUEEBIRMgDUHQAGohEkEEDAELIA4rA2ghBCAOKwNgIQYgDisDWCEHIA0gDisDcEQAAAAAAABSQKIiBUQAAAAAAADgP6IiAzkDiAEgDSADOQN4IA0gBUQAAAAAAADgv6IiAzkDaCANIAM5A1ggDSAHIAREAAAAAAAAUkCioiAHIAagoyIDOQNwIA0gAzkDYCANIAOaIgM5A4ABIA0gAzkDUEEBIRMgDUHQAGohEkEECyEPRAAAAAAAAAAAIQZEAAAAAAAAAAAMAQsgESgCCCICQQNJBEBEAAAAAAAAAAAMAQsgAEGYjQsoAgBEAAAAAAAA8D9EAAAAAAAAAAAQUyEDIBEoAiwgESgCBCIPIA9BAEcgA0QAAAAAAAAAAGRxaiIPQQFrIAJsQQAgDxtBBHRqIRIgASsDCCEGQQEhEyACIQ8gASsDAAshBSAQIA82AgQgECAPQRAQGCIUNgIAIA+4IQtBACECIA9BBEchFQNAIAIgD0YNBAJAIBMEQCABLQAQQQFGBEAgFUUEQCAFIQMgBiEEAkACQAJAAkACQCACDgQEAwABAgsgBpohBCAFmiEDDAMLIAaaIQQMAgsgDUGkAzYCBCANQfK4ATYCAEHo+gYoAgBB1rEEIA0QHRoQbgALIAWaIQMLIAQgEiACQQR0aiIOKwMIoCEEIAMgDisDAKAhAwwDCyASIAJBBHRqIg4rAwgiAyAGIA4rAwAiByADEE8iA6NEAAAAAAAA8D+goiEEIAcgBSADo0QAAAAAAADwP6CiIQMMAgsgBiASIAJBBHRqIg4rAwiiIQQgBSAOKwMAoiEDDAELIAAoAhAiDisDcEQAAAAAAABSQKIhCCAOKwNoRAAAAAAAAFJAoiEHRAAAAAAAAAAAIQZEAAAAAAAAAAAhBSABLQAQQQFGBEAgASsDCCEGIAErAwAhBQsgDSACuCIERAAAAAAAAOC/oEQYLURU+yEZQKIgC6MiAxBXIAggBqBEAAAAAAAA4D+iIgyiIgg5AzggDSADEEQgByAFoEQAAAAAAADgP6IiCaIiBzkDMCANIAREAAAAAAAA4D+gRBgtRFT7IRlAoiALoyIEEFcgDKIiAzkDmAEgDSANKQM4NwMoIA0gDSkDMDcDICANIAQQRCAJoiIEOQOQASAJIAwgDUEgahD2CSEKIA0gDSkDmAE3AxggDSANKQOQATcDECAKIAMgCiAHoiAIoSAJIAwgDUEQahD2CSIDIASioaAgCiADoaMiAyAHoaIgCKAhBAsgFCAPIAJBf3NqQQR0aiIRIAMgACgCECIOKwMQoDkDACARIAQgDisDGKA5AwggAkEBaiECDAALAAsgACgCECgCDCICKwMoIQcgAisDICEDIAIrAxghBCACKwMQIQZBCBBNIhBBBDYCBCAQQQRBEBAYIgI2AgAgASsDCCEJIAErAwAhCiAAKAIQIgArAxghCyAAKwMQIQggAS0AEEEBRgRAIAIgCCADIAqgoCIFOQMwIAIgCyAHIAmgoCIDOQMoIAIgBTkDICACIAM5AxggAiAIIAYgCqGgIgM5AxAgAiALIAQgCaGgIgQ5AwggAiADOQMADAILIAIgAyAKoiAIoCIFOQMwIAIgByAJoiALoCIDOQMoIAIgBTkDICACIAM5AxggAiAGIAqiIAigIgM5AxAgAiAEIAmiIAugIgQ5AwggAiADOQMADAELQQgQTSIQQQQ2AgQgEEEEQRAQGCICNgIAIAErAwghCCAAKAIQIgArAxghByAAKwMQIQQgACsDWJohBSABLQAQQQFGBEAgACsDUCEDIAIgBCAFIAErAwAiBaGgOQMAIAIgByADmiAIoaA5AwggACsDWCEDIAIgByAIIAArA1CgoDkDGCACIAQgA5ogBaGgOQMQIAArA2AhAyACIAcgCCAAKwNQoKA5AyggAiAEIAUgA6CgOQMgIAArA1AhAyACIAQgBSAAKwNgoKA5AzAgByADmiAIoaAhBAwBCyABKwMAIQYgAiAHIAArA1AgCKKhOQMIIAIgBSAGoiAEoDkDACAAKwNYIQMgAiAAKwNQIAiiIAegOQMYIAIgBCADIAaioTkDECAAKwNgIQMgAiAAKwNQIAiiIAegOQMoIAIgAyAGoiAEoDkDICAAKwNQIQMgAiAGIAArA2CiIASgOQMwIAcgAyAIoqEhBAsgAiAEOQM4CyANQaABaiQAIBAL0gICBH8BfCMAQRBrIgUkAAJAIAAoAhAuAagBIgJBAE4EQAJAIAJBAUcEQEGoiwstAABBAUcNAQsgBSAANgIMIAVBDGpBAEEBIAG3IgYgBkHo+QcQjAggACgCECgCYARAIABBMEEAIAAoAgBBA3FBA0cbaigCKBArIAAoAhAoAmAQjgILIAAQqwMMAgsgAkUNASACQQQQGCEEA0AgAiADRgRAIARBACACIAG3IgYgBkHo+QcQjAhBACEAA0AgACACRgRAIAQQFwwFCyAEIABBAnRqKAIAIgEoAhAoAmAEQCABQTBBACABKAIAQQNxQQNHG2ooAigQKyABKAIQKAJgEI4CCyABEKsDIABBAWohAAwACwAFIAQgA0ECdGogADYCACADQQFqIQMgACgCECgCsAEhAAwBCwALAAtBlpMDQfK4AUHbAUHKMRAAAAsgBUEQaiQAC68CAgd/AX0gAyABQQJ0aigCACIJKAIQIgVBAToAtAEgBUEBNgKwAUMAAIC/QwAAgD8gAkEDRhshCyAAIAFBFGxqIQhBASEFA0AgBSAIKAIAT0UEQAJAIAVBAnQiBCAIKAIQaiIGKgIAQwAAgD9bDQAgAyAIKAIEIARqKAIAIgdBAnRqKAIAKAIQIgQtALQBBEAgBiALOAIAQQEhBEEBIAAgB0EUbGoiBygCACIGIAZBAU0bIQYCQANAIAQgBkcEQCAEQQJ0IgogBygCBGooAgAgAUYNAiAEQQFqIQQMAQsLQYYwQdq3AUHcBUGhmwEQAAALIAcoAhAgCmpBgICA/Hs2AgAMAQsgBCgCsAENACAAIAcgAiADEPkJCyAFQQFqIQUMAQsLIAkoAhBBADoAtAEL/AkBIH8gABCwAkGAnApB7MkKKAIAEH8hEiAEQQJHBEAgAEECQevlAEEAEB9BAEchE0GgjQsoAgBBAEchDQsgAUEUEBghDiABQQQQGCEQQQF0IAFqIhFBBBAYIQggA0F+cSIYQQJGIBNyIhoEQCARQQQQGCEHCyANBEAgEUEEEBghCQsgGEECRyIbRQRAIBFBBBAYIQ8LQQRBACANGyEeQQRBACAaGyEfIBhBAkYiIEECdCEhIAAQGiEKAkACQANAIAoEQCASQQBBwAAgEigCABEDABogCigCECgCiAEgFEcNAiAQIBRBAnRqIAo2AgAgDiAUQRRsaiIWIA9BACAgGzYCECAWIAlBACANGyIiNgIMIBYgB0EAIBobIiM2AgggFiAINgIEIA8gIWohDyAJIB5qIQkgByAfaiEHIAhBBGohC0EBIRcgACAKEG8hBEEBIRkDQCAEBEACQCAEIARBMGsiHCAEKAIAQQNxIgZBAkYiFRsoAiggBCAEQTBqIiQgBkEDRiIGGygCKEYNACAEQQBBMCAGG2ooAigoAhAoAogBIgwgBEEAQVAgFRtqKAIoKAIQKAKIASIVIAwgFUgbISUjAEEgayIGJAAgBiAXNgIcIAYgDCAVIAwgFUobNgIYIAYgJTYCFCASIAZBDGpBASASKAIAEQMAKAIQIQwgBkEgaiQAIBcgDCIGRwRAIA0EQCAiIAZBAnRqIgwgBCgCECsDgAEgDCoCALugtjgCAAsgE0UNASAjIAZBAnRqIgYgBioCALsgBCgCECsDiAEQJLY4AgAMAQsgCyAKIAQgJCAEKAIAQQNxIgZBA0YbKAIoIgxGBH8gBCAcIAZBAkYbKAIoBSAMCygCECgCiAE2AgAgDQRAIAkgBCgCECsDgAG2OAIAIAlBBGohCQsCQAJAIBNFBEAgGw0CIAdBgICA/AM2AgAgB0EEaiEHDAELIAcgBCgCECsDiAG2OAIAIAdBBGohByAbDQELIA8CfSAEQZQ3ECMiBgRAQwAAAAAgBkGhlgEQugINARoLQwAAgD9DAACAvyAKIAQgHCAEKAIAQQNxQQJGGygCKEYbCzgCACAPQQRqIQ8LIAtBBGohCyAXQQFqIRcgHUEBaiEdIBlBAWohGQsgACAEIAoQdCEEDAELCyAWIBk2AgAgCCAUNgIAIBRBAWohFCAAIAoQGyEKIAshCAwBCwsgGEECRw0BQQAhBCABQQAgAUEAShshC0EAIQgDQCAIIAtGBEADQCAEIAtGDQQgECAEQQJ0aigCACgCECgCsAFFBEAgDiAEIAMgEBD5CQsgBEEBaiEEDAALAAUgECAIQQJ0aigCACgCECIKQQA6ALQBIApBADYCsAEgCEEBaiEIDAELAAsAC0Gv9gBB2rcBQbUGQaLAARAAAAsCQCAAELACIB1BAm0iA0YNACAOKAIEIBEgA0EBdCABaiIAQQQQYCEIIBMEQCAOKAIIIBEgAEEEEGAhBwsgDQRAIA4oAgwgESAAQQQQYCEJC0EAIQQgAUEAIAFBAEobIQsDQCAEIAtGDQEgDiAEQRRsaiIAIAg2AgQgACgCAEECdCEBIBMEQCAAIAc2AgggASAHaiEHCyANBEAgACAJNgIMIAEgCWohCQsgASAIaiEIIARBAWohBAwACwALIAIgAzYCAAJAIAUEQCAFIBA2AgAMAQsgEBAXCyASEN8CIA4LTAEDfyAAKAIQIgIgAigCtAEiBEEBaiIDNgK0ASACKAK4ASADIARBAmpBBBBgIQIgACgCECACNgK4ASACIANBAnRqIAE2AgAgARDHBAuXBwIIfwJ8IABBAhCNAiAAIABBAEHi5QBBABAfQQJBAhBQIQEgACAAQQBBouwAQQAQHyABQQIQUCEDIAAQNCgCECADOwGwASAAKAJIKAIQIghBCiAILwGwASIDIANBCk8bIgM7AbABQbyLCyADOwEAIAggASADIAEgA0gbOwGyASAAEDUhCEG02QogAEEBQY4rQQAQHzYCACAAQQFBnuQAQQAQHyEDIAAQGiEBA0AgAQRAIAEQjARBtNkKKAIAIQQjAEHQAGsiAiQAAkAgBEUNACABKAIQKAKUASEHIAEgBBA+IgUtAABFDQAgAkEAOgBPAkBBvIsLLwEAQQNJDQAgAiAHNgIwIAIgB0EQajYCOCACIAdBCGo2AjQgAiACQc8AajYCPCAFQfy9ASACQTBqEElBA0gNACABKAIQQQE6AIcBQbyLCy8BACEFAkBBkIsLKwMARAAAAAAAAAAAZEUNAEEAIQYDQCAFIAZGDQEgByAGQQN0aiIEIAQrAwBBkIsLKwMAozkDACAGQQFqIQYMAAsACyAFQQRPBEAgASAIQQMQxwYLIAItAE9BIUcEQCADRQ0CIAEgAxA+EGpFDQILIAEoAhBBAzoAhwEMAQsgAiAHNgIgIAIgB0EIajYCJCACIAJBzwBqNgIoIAVBgL4BIAJBIGoQSUECTgRAIAEoAhBBAToAhwFBvIsLLwEAIQUCQEGQiwsrAwBEAAAAAAAAAABkRQ0AQQAhBgNAIAUgBkYNASAHIAZBA3RqIgQgBCsDAEGQiwsrAwCjOQMAIAZBAWohBgwACwALAkAgBUEDSQ0AAkBBlI0LKAIAIgRFDQAgASAEED4iBEUNACACIAJBQGs2AgAgBEHnhAEgAhBJQQFHDQAgByACKwNAIgpBkIsLKwMAIgmjIAogCUQAAAAAAAAAAGQbOQMQIAEgCEEDEMcGDAELIAEgCBDGBgsgAi0AT0EhRwRAIANFDQIgASADED4QakUNAgsgASgCEEEDOgCHAQwBCyABEB4hBCACIAU2AhQgAiAENgIQQebeAyACQRBqEDELIAJB0ABqJAAgACABEBshAQwBCwsgABAaIQMDQCADBEAgACADECkhAQNAIAEEQCABQfklQbgBQQEQLhogARCpAyABQaCNCygCAEQAAAAAAADwP0QAAAAAAADwPxBTIQkgASgCECAJOQOAASAAIAEQLCEBDAELCyAAIAMQGyEDDAELCwvNAQIEfwR8IwBBEGsiAyQAIANBATYCDAJAIAAgAiADQQxqENsGIgRBAkYNAEG02QooAgBFDQBBw4AEQQAQJwsCQCAEQQFHDQBEGC1EVPshGUAgAbciCKMhCSAAEBohAgNAIAJFDQEgBxBXIQogAigCECIFKAKUASIGIAogCKI5AwggBiAHEEQgCKI5AwAgBUEBOgCHAUG8iwsvAQBBA08EQCACIAEQxgYLIAkgB6AhByAAIAIQGyECDAALAAsgAygCDBCxByADQRBqJAAgBAubAgICfwJ8IwBB0ABrIgQkAAJAAkAgABDOAUUNACAAIAMQPiAEIARByABqNgIMIAQgBEFAazYCCCAEIARBOGo2AgQgBCAEQTBqNgIAQcuEASAEEElBBEcNACAEKwM4IgYgBCsDSCIHZARAIAQgBjkDSCAEIAc5AzgLIAQgBCkDSDcDKCAEIARBQGspAwA3AyAgBCAEKQM4NwMYIAQgBCkDMDcDECAAQewlQZgCQQEQLhogACgCECIFIAQpAxA3AxAgBSAEKQMoNwMoIAUgBCkDIDcDICAFIAQpAxg3AxggASAAEPsJIAAgAiADEP8JDAELIAAQciEAA0AgAEUNASAAIAEgAiADEP4JIAAQcSEADAALAAsgBEHQAGokAAulAQICfwJ8IwBBIGsiBCQAAkAgAUUNACAAKAIQKAIMRQ0AIAAgARA+IAQgBEEQajYCBCAEIARBGGo2AgBB04QBIAQQSUECRw0AIAQrAxghBSAEKwMQIQYgACgCECgCDCIDQQE6AFEgAyAGOQNAIAMgBTkDOAsCQCACRQ0AIAAQciEDA0AgA0UNASADIAAgASACEP4JIAMQcSEDDAALAAsgBEEgaiQAC/YCAgd/AnwgA0EIEBghByADQQgQGCEIIANBCBAYIQkgA0EIEBghCiADQQgQGCELIAMgAiADQQgQGCICEIQCIAYEQCADIAIQvAIgAyABELwCCyAAIAMgASAKEIYKIAMgAiAKIAcQhgUgAyAHIAgQhAJBACEGIAVBACAFQQBKGyEMIAVBAWshDSADIAcgBxCgASEPQQAhBQNAAkACQAJAIAUgDEYNACADIAcQhQogBGRFDQAgACADIAggCRCGCiADIAggCRCgASIORAAAAAAAAAAAYQ0AIAMgCCAPIA6jIg4gCxDgASADIAEgCyABEIUFIAUgDU4NAiADIAkgDiAJEOABIAMgByAJIAcQhgUgAyAHIAcQoAEhDiAPRAAAAAAAAAAAYg0BQc32A0EAEDFBASEGCyAHEBcgCBAXIAkQFyAKEBcgCxAXIAIQFyAGDwsgAyAIIA4gD6MgCBDgASADIAcgCCAIEIUFIA4hDwsgBUEBaiEFDAALAAs6AQJ/IABBACAAQQBKGyEAA0AgACADRkUEQCACIANBAnQiBGogASAEaioCADgCACADQQFqIQMMAQsLC0MBAn8gAEEAIABBAEobIQUDQCAEIAVGRQRAIAMgBEECdCIAaiAAIAFqKgIAIAAgAmoqAgCSOAIAIARBAWohBAwBCwsLcwEBfyAAKAIQKALAARAXIAAoAhAoAsgBEBcgACgCECgC0AEQFyAAKAIQKALYARAXIAAoAhAoAuABEBcgACgCECgCeBC6ASAAKAIQKAJ8ELoBIAAoAhAoAggiAQRAIAAgASgCBCgCBBEBAAsgAEGGJhDZAQuJAQICfwF8IAFBACABQQBKGyEGIAJBACACQQBKGyECA0BEAAAAAAAAAAAhB0EAIQEgBSAGRkUEQANAIAEgAkZFBEAgACABQQJ0aigCACAFQQN0aisDACADIAFBA3RqKwMAoiAHoCEHIAFBAWohAQwBCwsgBCAFQQN0aiAHOQMAIAVBAWohBQwBCwsLRgIBfwF8IABBACAAQQBKGyEARJpkfsUOG1HKIQMDQCAAIAJGRQRAIAMgASACQQN0aisDAJkQJCEDIAJBAWohAgwBCwsgAwuCAQIEfwF8IAFBACABQQBKGyEGA0AgBCAGRkUEQCAAIARBAnRqIQdEAAAAAAAAAAAhCEEAIQUDQCABIAVGRQRAIAcoAgAgBUECdGoqAgC7IAIgBUEDdGorAwCiIAigIQggBUEBaiEFDAELCyADIARBA3RqIAg5AwAgBEEBaiEEDAELCwuTAQIFfwF8IAFBACABQQBKGyEGA0AgBCAGRwRAIAAgBEEUbGoiBSgCACEHQQAhAUQAAAAAAAAAACEJA0AgASAHRgRAIAMgBEEDdGogCTkDACAEQQFqIQQMAwUgAUECdCIIIAUoAghqKgIAuyACIAUoAgQgCGooAgBBA3RqKwMAoiAJoCEJIAFBAWohAQwBCwALAAsLC6YCAgp/AXwgAiADbEEUEBghBSAEIAJBBBAYIgY2AgBBACEEIAJBACACQQBKGyEHA0AgBCAHRgRAQQAhAiADQQAgA0EAShshBQNAIAIgB0ZFBEAgBiACQQJ0aiEIIAAgAkEUbGoiAygCACEJIAMoAgghCiADKAIEIQtBACEDA0AgAyAFRwRAIAEgA0ECdCIMaiENQQAhBEQAAAAAAAAAACEPA0AgBCAJRgRAIAgoAgAgDGogD7Y4AgAgA0EBaiEDDAMFIAogBEECdCIOaioCALsgDSgCACALIA5qKAIAQQN0aisDAKIgD6AhDyAEQQFqIQQMAQsACwALCyACQQFqIQIMAQsLBSAGIARBAnRqIAU2AgAgBEEBaiEEIAUgA0ECdGohBQwBCwsLjAECBH8BfCABQQAgAUEAShshBiACQQAgAkEAShshAgNAIAUgBkZFBEAgACAFQQJ0aiEHRAAAAAAAAAAAIQlBACEBA0AgASACRkUEQCABQQN0IgggBygCAGorAwAgAyAIaisDAKIgCaAhCSABQQFqIQEMAQsLIAQgBUEDdGogCTkDACAFQQFqIQUMAQsLC48CAQR/IAAoAhAoAsABIQQDQCAEIgEEQCABKAIQIgQoAsQBIQIgBCgCuAEhBANAIAIEQCABKAIQKALAASACQQFrIgJBAnRqKAIAIgMQ/gEgAygCEBAXIAMQFwwBBSABKAIQKALMASECA0AgAgRAIAEoAhAoAsgBIAJBAWsiAkECdGooAgAiAxD+ASADKAIQEBcgAxAXDAELCyABKAIQIgItAKwBQQFHDQMgAigCyAEQFyABKAIQKALAARAXIAEoAhAQFyABEBcMAwsACwALCyAAEBohAQNAIAEEQCAAIAEQKSECA0AgAgRAIAIQygIgACACECwhAgwBCwsgARCDCiAAIAEQGyEBDAELCyAAEN0GC8gGAgt/AnwgAiABIAEgAkobIgpBACAKQQBKGyEHIAFBACABQQBKGyEOIAFBAWshCSABQR5sIQ8gAUEIEBghDCABQQgQGCENAkADQCAHIAhGDQEgAyAIQQJ0aigCACEGQQAhBQNAQQAhAiAFIA5HBEAgBiAFQQN0ahCmAUHkAG+3OQMAIAVBAWohBQwBCwNAIAIgCEZFBEAgBiAJIAEgAyACQQJ0aigCACIFIAYQoAGaIAUQjwQgAkEBaiECDAELC0EAIQUgBiAJEI4DIhBEu73X2d982z1jDQALIAEgBkQAAAAAAADwPyAQoyAGEOABAkADQCABIAYgDRCEAiAAIAEgASAGIAwQiQogASAMIAYQhAJBACECA0AgAiAIRkUEQCAGIAkgASADIAJBAnRqKAIAIgsgBhCgAZogCxCPBCACQQFqIQIMAQsLIAVBAWohCyAFIA9OIAYgCRCOAyIQRLu919nffNs9Y3INASABIAZEAAAAAAAA8D8gEKMgBhDgASALIQUgASAGIA0QoAEiEZlEK4cW2c737z9jDQALIAQgCEEDdGogECARojkDACAIQQFqIQgMAQsLIAghBwsgByAKIAcgCkobIQgDfyAHIAhGBH9BASAKIApBAUwbQQFrIQZBACEIA0AgBiAIIgBHBEAgBCAAQQN0aiIHKwMAIRAgAEEBaiIIIQIgACEFA0AgAiAKTkUEQCAEIAJBA3RqKwMAIhEgECAQIBFjIgkbIRAgAiAFIAkbIQUgAkEBaiECDAELCyAAIAVGDQEgASADIABBAnRqKAIAIgAgDBCEAiABIAMgBUECdGoiAigCACAAEIQCIAEgDCACKAIAEIQCIAQgBUEDdGogBysDADkDACAHIBA5AwAMAQsLIAwQFyANEBcgCyAPTAUgAyAHQQJ0aigCACEAQQAhAkEAIQUDQCAFIA5GRQRAIAAgBUEDdGoQpgFB5ABvtzkDACAFQQFqIQUMAQsLA0AgAiAHRkUEQCAAIAkgASADIAJBAnRqKAIAIgUgABCgAZogBRCPBCACQQFqIQIMAQsLIAEgAEQAAAAAAADwPyAAIAkQjgOjIAAQ4AEgBCAHQQN0akIANwMAIAdBAWohBwwBCwsLhQwCEH8CfEGAiwstAAAEQEG17wBBGUEBQej6BigCABBKGgsgAEEAIABBAEobIQYDQCADIAZHBEAgASADQQJ0aiEFQQAhBEQAAAAAAAAAACETA0AgACAERwRAIAMgBEcEQCATIAUoAgAgBEEDdGorAwCgIRMLIARBAWohBAwBCwsgBSgCACADQQN0aiATmjkDACADQQFqIQMMAQsLIABBAWshA0EAIQRBACEFIwBBIGsiDCQAAkACf0Go2QooAgAiAARAIAAQ1QILQajZCiADIANEAAAAAAAAAAAQ1gI2AgBBrNkKKAIAEBdBrNkKIANBBBAYNgIAQbDZCigCABAXQbDZCiADQQgQGCIKNgIAIANBACADQQBKGyEIQazZCigCACEGQajZCigCACEJAkACQANAIAQgCEYNASAJIARBAnQiB2ohDSABIAdqIQtEAAAAAAAAAAAhE0EAIQADQCAAIANHBEAgAEEDdCIPIA0oAgBqIAsoAgAgD2orAwAiFDkDACAAQQFqIQAgEyAUmRAkIRMMAQsLIBNEAAAAAAAAAABkBEAgCiAEQQN0akQAAAAAAADwPyATozkDACAGIAdqIAQ2AgAgBEEBaiEEDAELCyAKIARBA3RqQgA3AwAMAQtBACEBIANBAWsiCEEAIAhBAEobIQ1BACEEA0AgASANRwRAIAMgASABIANIGyEHRAAAAAAAAAAAIRMgASEAA0AgACAHRwRAIAkgBiAAQQJ0aigCACILQQJ0aigCACABQQN0aisDAJkgCiALQQN0aisDAKIiFCATIBMgFGMiCxshEyAAIAQgCxshBCAAQQFqIQAMAQsLIBNEAAAAAAAAAABlDQIgASAERwRAIAYgAUECdGoiACgCACEHIAAgBiAEQQJ0aiIAKAIANgIAIAAgBzYCAAsgCSAGIAFBAnRqKAIAQQJ0aigCACILIAFBA3QiD2orAwAhEyABQQFqIgEhBwNAIAMgB0wNAiAJIAYgB0ECdGooAgBBAnRqKAIAIhAgD2oiACAAKwMAIBOjIhQ5AwAgFJohFCABIQADQCAAIANIBEAgECAAQQN0IhFqIhIgFCALIBFqKwMAoiASKwMAoDkDACAAQQFqIQAMAQsLIAdBAWohBwwACwALCyAJIAYgCEECdGooAgBBAnRqKAIAIAhBA3RqKwMARAAAAAAAAAAAYgwBC0EAC0UNAAJAIANBgICAgAJJBEBBACADIANBCBBGIgQbDQEDQEEAIQAgAyAFRwRAA0AgACADRwRAIAQgAEEDdGpCADcDACAAQQFqIQAMAQsLIAQgBUEDdGpCgICAgICAgPg/NwMAIAIgBUECdGooAgAhBkEAIQEgA0EAIANBAEobIQpBrNkKKAIAIQdBqNkKKAIAIQkDfyABIApGBH8gAwUgCSAHIAFBAnRqKAIAIghBAnRqIQ5EAAAAAAAAAAAhE0EAIQADQCAAIAFHBEAgAEEDdCINIA4oAgBqKwMAIAYgDWorAwCiIBOgIRMgAEEBaiEADAELCyAGIAFBA3RqIAQgCEEDdGorAwAgE6E5AwAgAUEBaiEBDAELCyEAA0ACQAJAIABBAEoEQCAHIABBAWsiAUECdGohCkQAAAAAAAAAACETA0AgACADTg0CIABBA3QiCCAJIAooAgBBAnRqKAIAaisDACAGIAhqKwMAoiAToCETIABBAWohAAwACwALDAELIAYgAUEDdCIAaiIIIAgrAwAgE6EgCSAKKAIAQQJ0aigCACAAaisDAKM5AwAgASEADAELCyAFQQFqIQUMAQsLIAQQF0EAIQVBASEOA0AgAyAFRg0DIAIgBUECdGohAUEAIQADQCAAIAVHBEAgASgCACAAQQN0aiIEKwMAIRMgBCACIABBAnRqKAIAIAVBA3RqIgQrAwA5AwAgBCATOQMAIABBAWohAAwBCwsgBUEBaiEFDAALAAsgDEEINgIEIAwgAzYCAEHo+gYoAgBB2t0DIAwQHRoQJgALIAwgA0EDdDYCEEHo+gYoAgBBqd0DIAxBEGoQHRoQJgALIAxBIGokACAOCyAAIAAEQCAAKAIEEBcgACgCCBAXIAAoAhAQFyAAEBcLCy0BAnxBfyACIAAoAgBBA3RqKwMAIgMgAiABKAIAQQN0aisDACIEZCADIARjGwtdAEGg2QooAgBBpNkKKAIAckUEQEGk2QogAzYCAEGg2QogAjYCACABQQJPBEAgACABQQRBNhCUAQtBpNkKQQA2AgBBoNkKQQA2AgAPC0HJpQNBufsAQSdBgxoQAAALXgICfwJ8IAFBACABQQBKGyEBIANBA3QhAyACQQN0IQIDQCABIARGRQRAIAAgBEECdGooAgAiBSACaisDACADIAVqKwMAoSIHIAeiIAagIQYgBEEBaiEEDAELCyAGnwt3AQV/IAFBACABQQBKGyEFIAEgAWwQtwEhBiABELcBIQQDfyADIAVGBH8DQCACIAVGRQRAIAIgACABIAQgAkECdGooAgAQkAQgAkEBaiECDAELCyAEBSAEIANBAnRqIAYgASADbEECdGo2AgAgA0EBaiEDDAELCwujBAEFfyAAEBohAQNAIAEEQCABQYYmQcACQQEQLhogARDgBSABIAEQKygCECgCdEEBcRC6BCABKAIQQQA2AsQBQQVBBBAYIQMgASgCECICQQA2AswBIAIgAzYCwAFBBUEEEBghAyABKAIQIgJBADYC3AEgAiADNgLIAUEDQQQQGCEDIAEoAhAiAkEANgLUASACIAM2AtgBQQNB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IAEgAEEBEL0CQX9HBEAgByEMIAYhDgwDCyANIAogASAAQQAQvQJBf0YiABshDiALIAggABshDAwCCyAJIQwgBSEOIAAgAUEBEL0CQX9GDQJBACEPIAshDCANIQ4gCCEHIAohBiABIABBABC9AkF/Rw0EDAILIAggC6EgBSAKoaIgCiANoSAJIAihomEEQCACIAk5AwAMAwsgAiAHOQMAIAYhBQwCCyAJIQcgBSEGCyACIAwgB6BEAAAAAAAA4D+iOQMAIA4gBqBEAAAAAAAA4D+iIQULIAMgBTkDAEEBIQ8LIA8L9gECCHwBfyAAKwMIIQMgACsDACEEIAErAwghBSABKwMAIQYCfyAAIAAoAhAiCygCBEYEQCALKAIADAELIABBGGoLIgsrAwghCCALKwMAIQcCfyABIAEoAhAiACgCBEYEQCAAKAIADAELIAFBGGoLIgArAwghCSAAKwMAIQogAkF/IAcgBKEiByAFIAOhoiAGIAShIAggA6EiBaKhIgZEAAAAAAAAAABkIAZEAAAAAAAAAABjGyIANgIAIAJBfyAHIAkgA6GiIAogBKEgBaKhIgNEAAAAAAAAAABkIANEAAAAAAAAAABjGyIBNgIEIAIgACABbDYCCAtNAQJ8An9BASAAKAIAIgArAwAiAiABKAIAIgErAwAiA2QNABpBfyACIANjDQAaQQEgACsDCCICIAErAwgiA2QNABpBf0EAIAIgA2MbCwvfDgMUfwp8AX4jAEHwAGsiAyQAIAFBACABQQBKGyESIAFBKBAYIQ8DQCACIBJGRQRAIAAgAkECdGooAgAoAgQgDGohDCACQQFqIQIMAQsLIAxBGBAYIhBBGGshBQNAIAggEkcEQCAPIAhBKGxqIgQgECAGQRhsajYCACAAIAhBAnRqKAIAIg0oAgQhCkEAIQJE////////738hFkT////////v/yEXRP///////+//IRlE////////738hGANAIAIgCkYEQCAEIBc5AyAgBCAZOQMYIAQgFjkDECAEIBg5AwggBCAFIAZBGGxqNgIEIAhBAWohCAwDBSANKAIAIAJBBHRqIgcrAwAhGiAHKwMIIRsgECAGQRhsaiIHQQA2AhQgByAENgIQIAcgGzkDCCAHIBo5AwAgAkEBaiECIAZBAWohBiAXIBsQJCEXIBkgGhAkIRkgFiAbEDIh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C0IBAnwgACABIAEoAhAoApQBIgErAwAgACgCECgClAEiACsDAKEiAiABKwMIIAArAwihIgMgAiACoiADIAOioBC8CgvyAQEGf0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEMEKIAFBAWohAQwBCwsgABAaIQIDQCACBEAgAigCECIBKALoAUUEQCABIAA2AugBCyAAIAIQKSEDA0AgAwRAAkAgAygCECgCsAEiAUUNAANAIAEgAUEwayIFIAEoAgBBA3EiBkECRhsoAigoAhAiBC0ArAFBAUcNASABIAUgBCgC6AEEfyAGBSAEIAA2AugBIAEoAgBBA3ELQQJGGygCKCgCECgCyAEoAgAiAQ0ACwsgACADECwhAwwBCwsgACACEBshAgwBCwsLNAECf0EBQRAQGCIBQQA2AgwgASAAQRQQGCICNgIAIAEgAjYCBCABIAIgAEEUbGo2AgggAQsNACAAKAIQKAKMARAXC0gBAn8gACgCECICKAKwASACLgGoASICIAJBAWoQ/wEiAyACQQJ0aiABNgIAIAAoAhAiACADNgKwASAAIAAvAagBQQFqOwGoAQsUACAAIAFBkqUBQZQCQeO2ARCFAgujAQICfwN8IAAoAhAiAigCjAEiASsDCCEDIAErAxAhBCABKwMYIQUgAiABKwMgRAAAAAAAAFJAojkDKCACIAVEAAAAAAAAUkCiOQMgIAIgBEQAAAAAAABSQKI5AxggAiADRAAAAAAAAFJAojkDEEEBIQEDQCABIAIoArQBSkUEQCACKAK4ASABQQJ0aigCABDGCiABQQFqIQEgACgCECECDAELCwvvAQIDfwJ8IAAoAhAoAowBIgIrAxAhBSACKwMIIQYCQCAAIAFGDQAgABAaIQIDQCACRQ0BIAAgAigCECIDKALoAUYEQCADKAKUASIDIAYgAysDAKA5AwAgAyAFIAMrAwigOQMICyAAIAIQGyECDAALAAtBASEDA0AgACgCECICKAK0ASADTgRAIAIoArgBIANBAnRqKAIAIQQgACABRwRAIAQoAhAoAowBIgIgBSACKwMgoDkDICACIAYgAisDGKA5AxggAiAFIAIrAxCgOQMQIAIgBiACKwMIoDkDCAsgBCABEMcKIANBAWohAwwBCwsLoUsDGH8OfAF+IwBBsAFrIggkAEGAiwstAAAEQCAIIAAQHjYCcEHo+gYoAgBBpOQDIAhB8ABqEB0aCyAAEBohAgNAIAIEQCACKAIQQQA2ArgBIAAgAhAbIQIMAQsLQYCLCy0AAEECTwRAIAEoAhAhAiAIIAAQHjYCZCAIIAI2AmBB6PoGKAIAQcHsAyAIQeAAahAdGgsgASABKAIQQQFqNgIQIAhBqMgKKAIANgJcQc6pASAIQdwAakEAEM0BIgpB7CVBmAJBARAuGkE4EE0hAiAKKAIQIAI2AowBIAAQNCECIAooAhAgAigCEC8BsAE7AbABIAAgCkGw3AAQ8AYgACAKQe7aABDwBiAAIApB09IBEPAGIAhBmAFqIQYgCEGQAWohDCAIQYgBaiEDQQEhEANAIAAoAhAiAigCtAEgEE4EQCACKAK4ASAQQQJ0aigCACILEMcEIAogCxAeEO8GIgQoAhAiAiARNgKIASACIAs2AugBAkACQCABKAIEIgJFBEBE////////738hHET////////v/yEbDAELRP///////+9/IRxE////////7/8hGyALIAIQPiIFLQAARQ0AIAsgASgCAEcEQCAFIAsoAkQgAhA+EENFDQELIAhBADoArAEgCCADNgJEIAggDDYCSCAIIAY2AkwgCCAIQawBajYCUCAIIAhBgAFqNgJAIAVB+L0BIAhBQGsQSUEETgRAIAgrA5gBIRsgCCsDkAEhHSAIKwOIASEcIAgrA4ABIRpBkIsLKwMAIh5EAAAAAAAAAABkBEAgGyAeoyEbIB0gHqMhHSAcIB6jIRwgGiAeoyEaCyAEKAIQQQNBAkEBIAgtAKwBIgJBP0YbIAJBIUYbOgCHAQwCCyALEB4hAiAIIAU2AjQgCCACNgIwQbveAyAIQTBqECcLRP///////+//IR1E////////738hGgsgEUEBaiERIAsQGiECA0AgAgRAIAIoAhAgBDYCuAEgCyACEBshAgwBCwsgBCgCECICLQCHAQRAIAIoApQBIgIgGyAcoEQAAAAAAADgP6I5AwggAiAdIBqgRAAAAAAAAOA/ojkDAAsgEEEBaiEQDAELCyAAEBohAgJ/AkADQCACBEACQCACKAIQIgwoArgBDQACQCAMKALoASIDRQ0AIAMgACgCECgCjAEoAjBGDQAgAhAeIQEgABAeIQAgCCACKAIQKALoARAeNgIoIAggADYCJCAIIAE2AiBB6O4EIAhBIGoQMQwECyAMIAA2AugBIAwtAIYBDQAgCiACEB4Q7wYhAyACKAIQIgUgAzYCuAEgAygCECIEIBE2AogBIAQgBSsDIDkDICAEIAUrAyg5AyggBCAFKwNYOQNYIAQgBSsDYDkDYCAEIAUrA1A5A1AgBCAFKAIINgIIIAQgBSgCDDYCDCAFLQCHASIGBEAgBCgClAEiDCAFKAKUASIDKwMAOQMAIAwgAysDCDkDCCAEIAY6AIcBCyARQQFqIREgBCgCgAEgAjYCCAsgACACEBshAgwBCwsgABAaIQ4DQCAOBEAgDigCECgCuAEhBCAAIA4QKSECA0AgAgRAIAQgAkFQQQAgAigCAEEDcUECRxtqKAIoKAIQKAK4ASIFRwRAAn8gBCAFSQRAIAogBCAFQQBBARBSDAELIAogBSAEQQBBARBSCyIGQfklQbgBQQEQLhogBigCECIMIAIoAhAiAysDiAE5A4gBIAwgAysDgAE5A4ABIAUoAhAoAoABIgUgBSgCBEEBajYCBCAEKAIQKAKAASIDIAMoAgRBAWo2AgQgDCgCsAFFBEAgBSAFKAIAQQFqNgIAIAMgAygCAEEBajYCAAsgBiACEMQKCyAAIAIQLCECDAELCyAAIA4QGyEODAELCwJAAkAgACgCECgCjAEiAygCACICBEAgAygCBEEBakEQEBghBiAKKAIQKAKMASAGNgIAQQAhDgNAIAIoAgAiDUUNAiACKAIEKAIQKAK4ASILBEAgDUFQQQAgDSgCAEEDcSIDQQJHG2ooAiggDUEwQQAgA0EDRxtqKAIoIAAQHiEFKAIQKAKIASEMKAIQKAKIASEDIAggDSgCAEEEdjYCHCAIIAM2AhggCCAMNgIUIAggBTYCEEGAzwpB6QdBixcgCEEQahClARogCkGAzwoQ7wYiDSgCECARNgKIASARQQFqIREgDkEBaiEOAn8gCyANSQRAIAogCyANQQBBARBSDAELIAogDSALQQBBARBSCyIEQfklQbgBQQEQLhogBCgCECIFIAIoAgAiDCgCECIDKwOIATkDiAEgBSADKwOAATkDgAEgBCAMEMQKIA0oAhAoAoABIgwgDCgCBEEBajYCBCALKAIQKAKAASIDIAMoAgRBAWo2AgQgDCAMKAIAQQFqNgIAIAMgAygCAEEBajYCACAGIA02AgQgAisDCCEaIAYgBDYCACAGIBo5AwggBkEQaiEGCyACQRBqIQIMAAsACyAKDQEMAgsgCigCECgCjAEgDjYCBAsCf0EAIQVBACEGIwBB0ABrIgQkACAEQgA3A0ggBEIANwNAAkAgChA1QQBOBEAgBCAKEDUiAjYCPCAEQQA2AjggAkEhTwRAIAQgAkEDdiACQQdxQQBHakEBEBg2AjgLIAooAhAoAowBKAIAIgdFDQEgBCAKEB42AjAgBEH0zgooAgA2AjQgBEFAayICQdAWIARBMGoQjAFBASEGIAogAhCbAkEBEJABIgVB7CVBmAJBARAuGhDzBiECIAUoAhAgAjYCjAEgAiAHNgIAIAIgCigCECgCjAEoAgQ2AgQDQCAHKAIEIgJFDQIgAigCECgCiAEhAiAEIAQpAjg3AyggBEEoaiACEL4CRQRAIAogBygCBCAFIARBOGoQkAULIAdBEGohBwwACwALQYWTA0HJuQFBxwBBotkAEAAACyAKEBohB0EAIQIDQCAHBEAgBygCECgCiAEhAyAEIAQpAjg3AyACQCAEQSBqIAMQvgINACAHKAIQLQCHAUEDRw0AIAVFBEAgBCAKEB42AhAgBEH0zgooAgAgBmo2AhQgBEFAayICQdAWIARBEGoQjAEgCiACEJsCQQEQkAEiBUHsJUGYAkEBEC4aEPMGIQIgBSgCECACNgKMASAGQQFqIQYLIAogByAFIARBOGoQkAVBASECCyAKIAcQGyEHDAELCyAFBEAgBUEAEKEDGgsgChAaIQcDQCAHBEAgBygCECgCiAEhAyAEIAQpAjg3AwggBEEIaiADEL4CRQRAIAQgChAeNgIAIARB9M4KKAIAIAZqNgIEIARBQGsiA0HZFiAEEIwBIAogAxCbAkEBEJABIgxB7CVBmAJBARAuGhDzBiEDIAwoAhAgAzYCjAEgCiAHIAwgBEE4ahCQBSAMQQAQoQMaIAZBAWohBgsgCiAHEBshBwwBCwsgBCgCPEEhTwRAIAQoAjgQFwsgBC0AT0H/AUYEQCAEKAJAEBcLQfTOCkH0zgooAgAgBmo2AgAgCEH8AGoEQCAIIAY2AnwLIAhBrAFqBEAgCCACNgKsAQsgBkEBakEEEBghAyAKEHIhByADIQIDQCAHBEAgAiAHNgIAIAZBAWshBiACQQRqIQIgBxBxIQcMAQsLIAZFBEAgAkEANgIAIARB0ABqJAAgAwwBC0HMkwNBybkBQYYBQaLZABAAAAsiDCEXAkADQCAXKAIAIglFDQEgF0EEaiEXRAAAAAAAAAAAIR1EAAAAAAAAAAAhG0QAAAAAAAAAACEfRAAAAAAAAAAAISAgCSgCECgCjAEoAgAhBgJAQbjXCisDACIeRAAAAAAAAPC/YgRAQbDXCisDACEcIB4hGgwBC0G41wogCRA1t59BqNcKKwMAQbDXCisDACIcoqJEAAAAAAAAFECjIho5AwALQZjXCigCACECQeDXCigCACEFIAggHDkDkAEgCCAaIAIgBWsiB7eiIAK3ozkDiAFBoNcKKwMAIRogCCAHNgKAASAIIBo5A5gBAkACQEGU1wooAgAiA0EATgRAIAMgBUwEQEEAIQdB5NcKIAM2AgAMAgsgAiADSA0CQeTXCiAFNgIAIAMgBWshBwwBC0Hk1wogBTYCAAsgCCAHNgKgAQsgCRA1IQsgCSgCECgCjAEoAgQhBEEAIQMgCRAaIQJEAAAAAAAAAAAhGgNAIAIEQCACKAIQIgUtAIcBBEAgBSgClAEiBSsDACEcAnwgAwRAIBwgGyAbIBxjGyEbIBwgHSAcIB1jGyEdIAUrAwgiHCAfIBwgH2QbIR8gHCAaIBogHGQbDAELIBwiGyEdIAUrAwgiHwshGiADQQFqIQMLIAkgAhAbIQIMAQsLQdjXCiALIARrt59EAAAAAAAA8D+gQbDXCisDAKJEAAAAAAAA4D+iRDMzMzMzM/M/oiIcOQMAQdDXCiAcOQMAAnwgA0EBRgRAIBohICAdDAELRAAAAAAAAAAAIANBAkgNABogHyAaoCAbIB2gISECQCAfIBqhRDMzMzMzM/M/oiIfIBsgHaFEMzMzMzMz8z+iIh2iIBwgHEQAAAAAAAAQQKKiIhujIhpEAAAAAAAA8D9mBEAgH0QAAAAAAADgP6IhGiAdRAAAAAAAAOA/oiEcDAELIBpEAAAAAAAAAABkBEAgHyAanyIaIBqgIhujIRogHSAboyEcDAELIB1EAAAAAAAAAABkBEAgHUQAAAAAAADgP6IhHCAbIB2jRAAAAAAAAOA/oiEaDAELIBwhGiAfRAAAAAAAAAAAZEUNACAfRAAAAAAAAOA/oiEaIBsgH6NEAAAAAAAA4D+iIRwLRAAAAAAAAOA/oiEgQdjXCiAaIBogHBCnASIaEFejOQMAQdDXCiAcIBoQRKM5AwAgIUQAAAAAAADgP6ILISICf0HA1wooAgBBAkYEQEGQ1wooAgAMAQsQygynQSpzCxCxBwJAIAYEQCAGIQIDQCACKAIABEBB0NcKKwMAIRsgAisDCBBEIRogAigCBCgCECIFKAKUASIDIBsgGqIgIqA5AwAgA0HY1worAwAgAisDCBBXoiAgoDkDCCAFQQE6AIcBIAJBEGohAgwBCwsgIESamZmZmZm5P6IhHyAiRJqZmZmZmbk/oiEdIAkQGiEHA0AgB0UNAgJAIAcoAhAiAigCgAEoAghFBEAgAigC6AFFDQELIAItAIcBBEAgAigClAEiAiACKwMAICKhOQMAIAIgAisDCCAgoTkDCAwBC0EAIQ9EAAAAAAAAAAAhGiAJIAcQbyECRAAAAAAAAAAAIRwDQCACBEACQCACQVBBACACKAIAQQNxIgNBAkcbaigCKCIFIAJBMEEAIANBA0cbaigCKCIDRg0AIAMgBSAFIAdGGygCECIDLQCHAUUNACAPBEAgHCAPtyIhoiADKAKUASIDKwMIoCAPQQFqIg+3IhujIRwgGiAhoiADKwMAoCAboyEaDAELIAMoApQBIgMrAwghHCADKwMAIRpBASEPCyAJIAIgBxB0IQIMAQsLAkAgD0ECTgRAIAcoAhAiAigClAEiAyAaOQMADAELIA9BAUYEQCAHKAIQIgIoApQBIgMgGkRcj8L1KFzvP6IgHaA5AwAgHETNzMzMzMzsP6IgH6AhHAwBCxDMARDMASEhQdDXCisDACEbRBgtRFT7IRlAoiIcEEQhGiAHKAIQIgIoApQBIgMgGiAbICFEzczMzMzM7D+iIhuiojkDAEHY1worAwAhGiAcEFcgGyAaoqIhHAsgAyAcOQMIIAJBAToAhwELIAkgBxAbIQcMAAsACyAJEBohAiADRQRAA0AgAkUNAkHQ1worAwAhGhDMASEbIAIoAhAoApQBIBogGyAboEQAAAAAAADwv6CiOQMAQdjXCisDACEaEMwBIRsgAigCECgClAEgGiAbIBugRAAAAAAAAPC/oKI5AwggCSACEBshAgwACwALA0AgAkUNAQJAIAIoAhAiAy0AhwEEQCADKAKUASIDIAMrAwAgIqE5AwAgAyADKwMIICChOQMIDAELQdDXCisDACEaEMwBIRsgAigCECgClAEgGiAbIBugRAAAAAAAAPC/oKI5AwBB2NcKKwMAIRoQzAEhGyACKAIQKAKUASAaIBsgG6BEAAAAAAAA8L+gojkDCAsgCSACEBshAgwACwALAkBBiNcKKAIARQRAQeTXCigCACEDQQAhBwNAIAMgB0wNAkG41worAwBBmNcKKAIAIgIgB2u3oiACt6MiGkQAAAAAAAAAAGVFBEAgCRAaIQIDQCACBEAgAigCECgCgAEiA0IANwMQIANCADcDGCAJIAIQGyECDAELCyAJEBohAwNAIAMiAgRAA0AgCSACEBsiAgRAIAMgAhDACgwBCwsgCSADECkhAgNAIAIEQCACQVBBACACKAIAQQNxQQJHG2ooAigiBSADRwRAIAMgBSACEL8KCyAJIAIQLCECDAELCyAJIAMQGyEDDAELCyAJIBogBhC+CkHk1wooAgAhAwsgB0EBaiEHDAALAAsgCRA1IQJB/NYKQgA3AgBB9NYKQgA3AgBB7NYKQgA3AgBB7NYKQYT5B0HsyQooAgAQfzYCAEHw1gogAhDCCjYCACAJEDUhAyADQfjWCigCACICSgRAQfzWCigCABAXIAJBAXQiAiADIAIgA0obIgNBCBAYIQJB+NYKIAM2AgBB/NYKIAI2AgALQeTXCigCACEDQQAhDwNAIAMgD0oEQEG41worAwBBmNcKKAIAIgIgD2u3oiACt6MiHEQAAAAAAAAAAGVFBEBB7NYKKAIAIgJBAEHAACACKAIAEQMAGkGA1wpB/NYKKAIANgIAQfTWCkHw1gooAgAiAjYCACACIAIoAgA2AgQgCRAaIQIDQCACBEAgAigCECIFKAKAASIDQgA3AxAgA0IANwMYAn8gBSgClAEiAysDCEHI1worAwAiG6OcIhqZRAAAAAAAAOBBYwRAIBqqDAELQYCAgIB4CyELAn8gAysDACAbo5wiGplEAAAAAAAA4EFjBEAgGqoMAQtBgICAgHgLIQQjAEEgayIOJAAgDiALNgIQIA4gBDYCDEHs1gooAgAiAyAOQQxqQQEgAygCABEDACIFKAIIIQNBgNcKQYDXCigCACINQQhqNgIAIA0gAzYCBCANIAI2AgAgBSANNgIIQYCLCy0AAEEDTwRAIA4gAhAeNgIIIA4gCzYCBCAOIAQ2AgBB6PoGKAIAQef0AyAOEB0aCyAOQSBqJAAgCSACEBshAgwBCwsgCRAaIQMDQCADBEAgCSADECkhAgNAIAIEQCACQVBBACACKAIAQQNxQQJHG2ooAigiBSADRwRAIAMgBSACEL8KCyAJIAIQLCECDAELCyAJIAMQGyEDDAELC0Hs1gooAgAiBEEAQYABIAQoAgARAwAhAgNAIAIEQCAEIAJBCCAEKAIAEQMAIAJB7NYKEL0KIQUhAiAFQQBODQELCyAJIBwgBhC+CkHk1wooAgAhAwsgD0EBaiEPDAELC0Hs1gooAgAQeRpB8NYKKAIAIQIDQCACBEAgAigCDCACKAIAEBcgAhAXIQIMAQsLQfzWCigCABAXCwJAICJEAAAAAAAAAABhICBEAAAAAAAAAABhcQ0AIAkQGiECA0AgAkUNASACKAIQKAKUASIDICIgAysDAKA5AwAgAyAgIAMrAwigOQMIIAkgAhAbIQIMAAsACyAeRAAAAAAAAPC/YQRAQbjXCkKAgICAgICA+L9/NwMACyAJEBohDwJAA0ACQAJAAkACQCAPIg0EQCAJIA0QGyEPIA0oAhAiAigCgAEhAyACKALoASIYRQ0BIAMoAgQiGUUNAyAZQQFqQRAQGCESQQAhAyANKAIQKAKAASgCACIFQQFqQRgQGCELIAkgDRBvIQIDQCACBEAgDSACQVBBACACKAIAQQNxIgRBAkcbaigCKCIGRgRAIAJBMEEAIARBA0cbaigCKCEGCyANKAIQKAKUASIEKwMIIR4gBigCECgClAEiBisDCCEcIAQrAwAhGyAGKwMAIRogCyADQRhsaiIGIAI2AgAgBiAcIB6hIhwgGiAboSIaEKcBOQMIIAYgGiAaoiAcIByioDkDECADQQFqIQMgCSACIA0QdCECDAELCyADIAVGBEAgCyAFQRhBJBCUASAFQQJIDQMgBUEBayEEQQAhBgNAIAYiAyAETg0EIAsgA0EYbGorAwghGiADQQFqIgYhAgNAAkAgAiAFRgRAIAUhAgwBCyALIAJBGGxqKwMIIBpiDQAgAkEBaiECDAELCyACIAZGDQAgAiADIAIgA0obIQZEAAAAAAAAAAAhHCACIAVHBHwgCyACQRhsaisDCAVEGC1EVPshCUALIBqhIAIgA2u3o0Q5nVKiRt+hPxAyIRoDQCADIAZGDQEgCyADQRhsaiICIBwgAisDCKA5AwggA0EBaiEDIBogHKAhHAwACwALAAtBj4MBQeO2AUHGBEHIGRAAAAsgCRA1QQJIDQMgACABKAIARgRAIAkQsgoaC0EAIQVBACEPIwBBIGsiEiQAIAlBsNwAECMhB0GAiwstAAAEQEHeugNBCEEBQej6BigCABBKGgsCQCAHBEAgBy0AAA0BC0Hb6wAhBwsCQCAHQToQkwEiA0UNACADIAdHBEAgBywAAEEwa0EJSw0BCyAHEIoCIgJBACACQQBKGyEPIANBAWohBwtBgIsLLQAABEAgEiAHNgIEIBIgDzYCAEHo+gYoAgBBgvIDIBIQHRoLAkAgDwRAIAkQNSEEIAkQsAIgEkEIaiAJEN0CQfjXCiASKQMYIig3AwBB8NcKIBIpAxA3AwBB6NcKIBIpAwg3AwAgKKdBAXEEQEHo1wpB6NcKKwMARAAAAAAAAFJAozkDAEHw1wpB8NcKKwMARAAAAAAAAFJAozkDAAsgCRAaIQMDQCADBEAgAyECA0AgCSACEBsiAgRAIAMgAhDuBiAFaiEFDAELCyAJIAMQGyEDDAELCyAFRQ0BIARBAWsgBGy3ISK3IR8gCCgCoAEhBiAIKwOYASEmIAgrA4gBIScgCCgCgAEhFiAEt58hHSAIKwOQASIhISBBACEQA0AgBUUgDyAQTXJFBEBBoPkHIBY2AgBBqPkHICA5AwBBgNgKICc5AwBBiNgKIAY2AgAgJkQAAAAAAAAAAGQEQEGw+QcgJjkDAAsgJ0QAAAAAAAAAAGEEQEGA2AogHSAgokQAAAAAAAAUQKM5AwALQQAhEUGQ2AogICAgokGw+QcrAwCiIho5AwBBmNgKIBogH6IiGiAaoCAiozkDACAGIQIDQAJAAkAgAiARTA0AQYDYCisDAEGg+QcoAgAiAiARa7eiIAK3oyIkRAAAAAAAAAAAZQ0AIAkQGiECA0AgAgRAIAIoAhAoAoABIgNCADcDECADQgA3AxggCSACEBshAgwBCwtBACEFIAkQGiEDA0AgAwRAIAkgAxAbIQIDQCACBEAgAigCECgClAEiCysDACADKAIQKAKUASIEKwMAoSIaIBqiIAsrAwggBCsDCKEiHCAcoqAhGwNAIBtEAAAAAAAAAABhBEBBBRCmAUEKb2u3IhogGqJBBRCmAUEKb2u3IhwgHKKgIRsMAQsLIAIoAhAoAoABIgsgGkGQ2ApBmNgKIAMgAhDuBiIEGysDACAboyIaoiIbIAsrAxCgOQMQIAsgHCAaoiIaIAsrAxigOQMYIAMoAhAoAoABIgsgCysDECAboTkDECALIAsrAxggGqE5AxggBCAFaiEFIAkgAhAbIQIMAQsLIAkgAxApIQIDQCACBEAgAyACQVBBACACKAIAQQNxQQJHG2ooAigiFBDuBkUEQCAUKAIQIhMoApQBIg4rAwAgAygCECILKAKUASIEKwMAoSEaIBMoAoABIhMgEysDECAaIBogDisDCCAEKwMIoSIeEE8iHCADELsKIBQQuwqgIhuhIhogGqIgHEGo+QcrAwAgG6CioyIaoiIboTkDECATIBMrAxggHiAaoiIaoTkDGCALKAKAASIEIBsgBCsDEKA5AxAgBCAaIAQrAxigOQMYCyAJIAIQLCECDAELCyAJIAMQGyEDDAELCyAFDQFBACEFCyAhICCgISAgEEEBaiEQDAMLICQgJKIhHCAJEBohAgNAIAIEQCACKAIQIgQtAIcBQQNHBEACQCAcIAQoAoABIgMrAxAiHiAeoiADKwMYIhsgG6KgIhpkBEAgBCgClAEiAyAeIAMrAwCgOQMADAELIAQoApQBIgMgJCAeoiAanyIaoyADKwMAoDkDACAkIBuiIBqjIRsLIAMgGyADKwMIoDkDCAsgCSACEBshAgwBCwsgEUEBaiERQYjYCigCACECDAALAAsLIAVFDQELIAkgBxCsChoLIBJBIGokAAwDCyADKAIIDQMgCSANELQBDAMLIAsoAgAhAkEAIQ4gCyERA0AgAgRAAnwgESgCGCIEBEAgESsDIAwBCyALKwMIRBgtRFT7IRlAoAsgAigCECIFLgGoASEVIA0gAkFQQQAgAigCAEEDcSIGQQJHG2ooAigiA0YEQCACQTBBACAGQQNHG2ooAighAwtBASEUIBErAwgiHKEgFbejRDmdUqJG36E/EDIhGwJAIAMgDUsEQCAOIQYMAQtBfyEUIBVBAWsiAiAOaiEGIBsgAreiIBygIRwgG5ohGwsgEUEYaiERQQAhAyAVQQAgFUEAShshEyAFKAKwASEQA0AgAyATRwRAIBIgBkEEdGoiFiAQKAIAIgc2AgAgDSAHQTBBACAHKAIAQQNxIgJBA0cbaigCKCIFKAIQKAK4AUcEQCAHQVBBACACQQJHG2ooAighBQsgFiAcOQMIIBYgBTYCBCAQQQRqIRAgA0EBaiEDIBsgHKAhHCAGIBRqIQYMAQsLIA4gFWohDiAEIQIMAQsLIA4gGUcNAyAYKAIQKAKMASICIBk2AgQgAiASNgIAIAsQFwsgGCABEMgKDQAgDSgCECIDIBgoAhAoAowBIgIrAxgiGjkDICACKwMgIRsgAyAaRAAAAAAAAFJAokQAAAAAAADgP6IiGjkDYCADIBo5A1ggAyAbOQMoIAMgG0QAAAAAAABSQKI5A1AMAQsLIA0NAwwBCwtBzghB47YBQb0FQbw3EAAACwJ/AkACQCAIKAJ8IgJBAk8EQAJAIAgoAqwBRQRAQQAhAwwBCyACQQEQGCIDQQE6AAAgCCgCfCECCyABIAM2AiggAiAMQQAgAUEUahDVCCEFIAMQFwwBCyACQQFHBEAgASgCACAARiEQQQAhBQwCCyAMKAIAEMsCQQAhBQsgASgCACAARiEQIAgoAnwiAkUNACAMKAIAKAIQIgErAyghHyABKwMgIR0gASsDGCEjIAErAxAhG0EAIAJBAUYNARogHyAFKwMIIhygIR8gHSAFKwMAIhqgIR0gIyAcoCEjIBsgGqAhGyAMIQYgBSECA0AgBigCBCIBBEAgBkEEaiEGIAIrAxAhISABKAIQIgErAxAhICABKwMYIR4gASsDICEcIB8gASsDKCACKwMYIhqgECQhHyAdIBwgIaAQJCEdICMgHiAaoBAyISMgGyAgICGgEDIhGyACQRBqIQIMAQVBAAwDCwALAAsgASgCDCECIAAgASgCCEE2QQMQULchHSAAIAJBJEEDEFC3IR9EAAAAAAAAAAAhG0EBCyEDIAAoAhAiAigCDCIBBH8gHSABKwMYEDAgHSAboaEiHEQAAAAAAADgP6IiGqAgHSAcRAAAAAAAAAAAZCIBGyEdIBsgGqEgGyABGyEbQQAFIAMLIBByRQRAIABBhIwLKAIAQQhBABBQtyElIAAoAhAhAgsgJSAboSEeICUgI6EgAisDOKAhGiACKwNYISACQCADDQAgDCEQIAUhAgNAIBAoAgAiA0UNAQJ/IAJFBEAgGiEcIB4hG0EADAELIBogAisDCKAhHCAeIAIrAwCgIRsgAkEQagshASAQQQRqIRAgHEQAAAAAAABSQKMhHCAbRAAAAAAAAFJAoyEbIAMQGiECA0AgAgRAIAIoAhAoApQBIgYgGyAGKwMAoDkDACAGIBwgBisDCKA5AwggAyACEBshAgwBBSABIQIMAgsACwALAAsgCigCECgCjAEiAUIANwMIIAFCADcDECABIB0gJSAeoKBEAAAAAAAAUkCjOQMYIAEgHyAgICUgGqCgoEQAAAAAAABSQKM5AyAgBRAXIAoQGiECA0AgAgRAAkAgAigCECIGKALoASIBBEAgASgCECgCjAEiAyAGKAKUASIBKwMAIAYrAyAiHEQAAAAAAADgP6KhIhs5AwggASsDCCEaIAYrAyghHiADIBwgG6A5AxggAyAaIB5EAAAAAAAA4D+ioSIaOQMQIAMgHiAaoDkDIAwBCyAGKAKAASgCCCIBRQ0AIAEoAhAoApQBIgMgBigClAEiASsDADkDACADIAErAwg5AwgLIAogAhAbIQIMAQsLIAAoAhAoAowBIgIgCigCECgCjAEiASkDCDcDCCACIAEpAyA3AyAgAiABKQMYNwMYIAIgASkDEDcDECAMIQIDQCACKAIAIgEEQCABEMMKIAFB7CUQ2QEgAkEEaiECDAELCyAKKAIQKAKMASgCABAXIAoQwwogCkHsJRDZASAKEBohAwNAIAMEQCAKIAMQGyAKIAMQKSECA0AgAgRAIAIoAhAoArABEBcgAkH5JRDZASAKIAIQLCECDAELCyADKAIQKAKAARAXIAMoAhAoApQBEBcgA0GGJhDZASEDDAELCyAKEJUBIAwQF0EAQYCLCy0AAEUNARogCCAAEB42AgBB6PoGKAIAQYTwAyAIEB0aQQAMAQtBfwsgCEGwAWokAAsTACAAIAFB2KQBQSFBgbkBEIUCC7UDAQh/IwBBEGsiBCQAIAAQGiEBA38gAQR/IAEoAhAiBi0AtQFBB0YEfyABELoOIAEoAhAFIAYLQQA2AugBIAAgARAbIQEMAQVBAQsLIQUDQAJAIAAoAhAiASgCtAEgBU4EQCABKAK4ASAFQQJ0aigCACIDEBohAQNAIAFFDQIgAyABEBsCQCABKAIQLQC1AQRAIAEQHiECIAQgABAeNgIEIAQgAjYCAEGx5gMgBBAnIAMgARC0AQwBCyADKAIQKAKIAiECIAEQrQEgAUcEQEGxmQNByrgBQZMBQZ2YARAAAAsgASgCECIHIAI2AvABIAIoAhAiAiACKALsASAHKALsAWo2AuwBIAEoAhAiAkEHOgC1ASACIAM2AugBIAMgARApIQIDQCACRQ0BAkAgAigCECgCsAEiAUUNAANAIAEgAUEwayIHIAEoAgBBA3FBAkYbKAIoKAIQIggtAKwBQQFHDQEgCCADNgLoASABIAcgASgCAEEDcUECRhsoAigoAhAoAsgBKAIAIgENAAsLIAMgAhAsIQIMAAsACyEBDAALAAsgBEEQaiQADwsgBUEBaiEFDAALAAtIAQJ/IAQhBgNAIAEgA0xFBEAgACAGKAIAIgcgAkEAIAUQkQUgAUEBayEBIAcoAhAoAowBQTBqIQYgByECDAELCyAEIAI2AgALbgEDf0EBIQIDQAJAIAAoAhAiAygCuAEhASACIAMoArQBSg0AIAEgAkECdGooAgAiASgCECgCDBC6ASABKAIQKAKMASIDBEAgAygCABAXIAEoAhAoAowBEBcLIAEQzAogAkEBaiECDAELCyABEBcLTQEDf0EBIQEDQCAAKAIQIgMoArgBIQIgASADKAK0AUpFBEAgAiABQQJ0aigCACICKAIQKAIMELoBIAIQzQogAUEBaiEBDAELCyACEBcLEwAgACABQZKlAUEmQfa3ARCFAgvmAwIGfwZ8IwBB4ABrIgMkACAAKAIQIgIrAxghCSACKwMQIQpBgIsLLQAAQQJPBEAgARCdAiADIAAQHjYCUEHo+gYoAgBBx+kDIANB0ABqEB0aCwJAIAFFBEBB6PoGKAIAIQYMAQtB6PoGKAIAIQYgABAaIQIgA0FAayEFA0AgAkUNAQJAIAIoAhAiBCgCgAEgAEcNACAEIAogBCsDEKA5AxAgBCAJIAQrAxigOQMYQYCLCy0AAEECSQ0AIAEQnQIgAhAeIQQgAigCECIHKwMQIQggBSAHKwMYOQMAIAMgCDkDOCADIAQ2AjAgBkHPngQgA0EwahAtCyAAIAIQGyECDAALAAsgAUEBaiEHQQEhBANAIAAoAhAiAigCtAEgBE4EQCACKAK4ASAEQQJ0aigCACEFIAEEQCAJIAUoAhAiAisDKKAhCCAKIAIrAyCgIQsgCSACKwMYoCEMIAogAisDEKAhDUGAiwstAABBAk8EQCABEJ0CIAUQHiECIAMgCDkDICADIAs5AxggAyAMOQMQIAMgDTkDCCADIAI2AgAgBkG9ngQgAxAtIAUoAhAhAgsgAiAIOQMoIAIgCzkDICACIAw5AxggAiANOQMQCyAFIAcQzwogBEEBaiEEDAELCyADQeAAaiQAC9cTAw1/CnwBfiMAQcACayIEJAAgACgCSCEMQYCLCy0AAEECTwRAIAEQnQIgBCAAEB42ApACQej6BigCAEGk5AMgBEGQAmoQHRoLIAFBAWohBkEBIQIDQCAAKAIQIggoArQBIAJOBEAgCCgCuAEgAkECdGooAgAiCCAGENAKIAJBAWohAiAIEDUgA2ohAwwBCwsCQAJAAkAgABA1IANrIg0gACgCECIIKAK0AWoiBg0AIAgoAgwNACAIQgA3AxAgCEKAgICAgICAmcAANwMoIAhCgICAgICAgJnAADcDICAIQgA3AxgMAQsCQAJ/AkAgAEEEQQQgBEGgAmoQuANBAk0EQCAEQQM2ArACDAELQQAgBCgCsAJBBEcNARogBC0AvAJBAnFFDQIgDEEAQaYWQQAQHyIFIAxBAUGmFkEAEB8iB3IEQCAEIAZBBBAYNgK4AgwDCyAEIAAQHjYCgAJBzJcDIARBgAJqECcLQQALIQdBACEFCyAGQSAQGCEIIAZBBBAYIQxBACECQQEhAwNAIAAoAhAiCigCtAEgA04EQCAIIAJBBXRqIgkgCigCuAEgA0ECdGooAgAiCygCECIKKQMQNwMAIAkgCikDKDcDGCAJIAopAyA3AxAgCSAKKQMYNwMIIAQoArgCRSAFRXJFBEAgCyAFQQBBABBQIQkgBCgCuAIgAkECdGogCTYCAAsgDCACQQJ0aiALNgIAIANBAWohAyACQQFqIQIMAQsLAkAgDUEATA0AIAAQGiEDA0AgA0UNASADKAIQIgUoAoABRQRAIAUgADYCgAEgBSsDWCEQIAUrA2AhDyAFKwNQIREgCCACQQV0aiIFQgA3AwAgBSAROQMYIAUgECAPoDkDECAFQgA3AwggBCgCuAJFIAdFckUEQCADIAdBAEEAEFAhBSAEKAK4AiACQQJ0aiAFNgIACyAMIAJBAnRqIAM2AgAgAkEBaiECCyAAIAMQGyEDDAALAAsgBkEASA0BIARBoAJqIQdBACECQQAhBSMAQfAAayIDJAACQCAGRQ0AAkACQCAHKAIQQQNrDgIAAQILIAYgCCAHKAIIENMIIQlBgIsLLQAABEAgAyAJNgJQQej6BigCAEHtuQQgA0HQAGoQHRoLIAlBAEwNASAGQRAQGCEKA0AgAiAGRgRAQQAhAiAGQQQQGCELA0AgAiAGRgRAIAsgBkEEQdABEJQBQQAhAhDsAyENIAZBEBAYIQUDQCACIAZGBEAgCxAXQQAhAgNAIAIgBkYEQCAKEBcgDRDfAkEAIQJBgIsLLQAAQQJJDQlB6PoGKAIAIQcDQCACIAZGDQogBSACQQR0aiIJKwMAIRAgAyAJKwMIOQMQIAMgEDkDCCADIAI2AgAgB0GcmwQgAxAtIAJBAWohAgwACwAFIAogAkEEdGooAgQQFyACQQFqIQIMAQsACwAFIAIgCyACQQJ0aigCACIOIA0gBSAOKAIMQQR0aiAJIAcoAgggCBCGBiACQQFqIQIMAQsACwAFIAsgAkECdGogCiACQQR0ajYCACACQQFqIQIMAQsACwAFIAogAkEEdGoiCyACNgIMIAcoAgghDSADQgA3A2ggA0IANwNgIAMgCCACQQV0aiIFKQMINwM4IANBQGsgBSkDEDcDACADIAUpAxg3A0ggBSkDACEZIANCADcDKCADIBk3AzAgA0IANwMgIANBMGogCyAJIA0gA0EgakHl9AQQ0gggAkEBaiECDAELAAsACyAGIAggBxDRCCEFCyADQfAAaiQAIAUhCSAEKAK4AhAXQej6BigCACEHRAAAwP///9/BIRBEAADA////30EhEUQAAMD////fQSESRAAAwP///9/BIRVBACECA0AgAiAGRwRAIBUgCSACQQR0aiIFKwMIIhMgCCACQQV0aiIDKwMYoCIPZCEKIBAgBSsDACIUIAMrAxCgIhZkIQsgEiATIAMrAwigIhNjIQ0gESAUIAMrAwCgIhRjIQ4gDCACQQJ0aigCACIFKAIQIQMCQCAAKAIQKAK0ASACSgRAIAMgDzkDKCADIBY5AyAgAyATOQMYIAMgFDkDEEGAiwstAABBAkkNASABEJ0CIAUQHiEDIAQgDzkD0AEgBCAWOQPIASAEIBM5A8ABIAQgFDkDuAEgBCADNgKwASAHQb2eBCAEQbABahAtDAELIAMgEyAPoEQAAAAAAADgP6I5AxggAyAUIBagRAAAAAAAAOA/ojkDEEGAiwstAABBAkkNACABEJ0CIAUQHiEDIAUoAhAiBSsDECEXIAQgBSsDGDkD8AEgBCAXOQPoASAEIAM2AuABIAdBz54EIARB4AFqEC0LIBUgDyAKGyEVIBAgFiALGyEQIBIgEyANGyESIBEgFCAOGyERIAJBAWohAgwBCwsCQCAAKAIQIgIoAgwiA0UNACADKwMYIg8gBkUEQCADKwMgIRVEAAAAAAAAAAAhEUQAAAAAAAAAACESIA8hEAsgECARoaEiD0QAAAAAAAAAAGRFDQAgECAPRAAAAAAAAOA/oiIPoCEQIBEgD6EhEQsgECAEKAKoArhEAAAAAAAA4D+iRAAAAAAAAAAAIAFBAEobIg+gIRYgESAPoSEQIBUgAisDWCAPoKAhESASIAIrAzggD6ChIQ9BgIsLLQAAQQJPBEAgARCdAiAAEB4hAiAEIBE5A6ABIAQgFjkDmAEgBCAPOQOQASAEIBA5A4gBIAQgAjYCgAEgB0G9ngQgBEGAAWoQLQsgBEFAayEKQQAhAwNAIAMgBkcEQCAMIANBAnRqKAIAIgUoAhAhAgJAIAAoAhAoArQBIANKBEAgAiACKwMoIA+hIhI5AyggAiACKwMgIBChIhU5AyAgAiACKwMYIA+hIhM5AxggAiACKwMQIBChIhQ5AxBBgIsLLQAAQQJJDQEgARCdAiAFEB4hAiAEIBI5A1AgBCAVOQNIIAogEzkDACAEIBQ5AzggBCACNgIwIAdBvZ4EIARBMGoQLQwBCyACIAIrABggD6E5AxggAiACKwAQIBChOQMQQYCLCy0AAEECSQ0AIAEQnQIgBRAeIQIgBSgCECIFKwMQIRIgBCAFKwMYOQNwIAQgEjkDaCAEIAI2AmAgB0HPngQgBEHgAGoQLQsgA0EBaiEDDAELCyAAKAIQIgYgESAPoSIROQMoIAYgFiAQoSISOQMgIAYgDyAPoSIPOQMYIAYgECAQoSIQOQMQQYCLCy0AAEECTwRAIAEQnQIgABAeIQAgBCAROQMgIAQgEjkDGCAEIA85AxAgBCAQOQMIIAQgADYCACAHQb2eBCAEEC0LIAgQFyAMEBcgCRAXCyAEQcACaiQADwtBsJEDQfa3AUGNAUHcFxAAAAv2BgEJfyAAELgKIQQgARC4CiIFKAIQKAL0ASIHIAQoAhAoAvQBIgZKBEACQCAEIAIoAhAiCCgCsAEiA0EwQQAgAygCAEEDcSIJQQNHG2ooAihGBEAgA0FQQQAgCUECRxtqKAIoIAVGDQELQQVBAUEFIAEgBUYbIAAgBEcbIQkgAygCEC4BqAFBAk4EQCAIQQA2ArABAkAgByAGa0EBRw0AIAQgBRCEAyIARQ0AIAIgABCoBEUNACACIAAQgQMgBCgCEC0ArAENAiAFKAIQLQCsAQ0CIAIQ9AMPCyAEKAIQKAL0ASEBIAQhBwNAIAEgBSgCECgC9AEiBk4NAiAFIQAgBkEBayABSgRAIAQQXiIKIANBUEEAIAMoAgBBA3FBAkcbaigCKCIIKAIQIgAoAvQBIgsgACgC+AFBAhDTCiAKELUCIgAoAhAiBiAIKAIQIggrA1g5A1ggBiAIKwNgOQNgIAYgCCgC9AE2AvQBIAYgCCgC+AFBAWoiBjYC+AEgCigCECgCxAEgC0EGdGooAgQgBkECdGogADYCAAsgByAAIAIQ2wEoAhAgCToAcCADKAIQIgcgBy8BqAFBAWs7AagBIAFBAWohASADQVBBACADKAIAQQNxQQJHG2ooAigoAhAoAsgBKAIAIQMgACEHDAALAAsCQCAHIAZrQQFHDQACQCAEIAUQhAMiA0UNACACIAMQqARFDQAgAigCECADNgKwASADKAIQIgAgCToAcCAAIAAvAagBQQFqOwGoASAEKAIQLQCsAQ0BIAUoAhAtAKwBDQEgAhD0AwwBCyACKAIQQQA2ArABIAQgBSACENsBIgMoAhAgCToAcAsgBSgCECgC9AEiACAEKAIQKAL0AWtBAkgNAAJAIAQgA0EwQQAgAygCAEEDcUEDRxtqKAIoRgRAIAMhAQwBCyACKAIQQQA2ArABIAQgA0FQQQAgAygCAEEDcUECRxtqKAIoIAIQ2wEhASACKAIQIAE2ArABIAMQ/gEgBSgCECgC9AEhAAsDQCABQVBBACABKAIAQQNxIgdBAkcbaigCKCIDKAIQIgQoAvQBIABGRQRAIAQoAsgBKAIAIQEMAQsLIAMgBUYNACABQTBBACAHQQNHG2ooAiggBSACENsBKAIQIAk6AHAgARD+AQsPC0HgmwNBoLkBQdIAQa/4ABAAAAseAEEBQX9BACAAKAIAIgAgASgCACIBSRsgACABSxsL3wIBBX8gACgCECgCxAEiBCABQQZ0IghqIgUoAgQhBgJAIANBAEwEQCACIANrIQIDQCACQQFqIgcgBCAIaigCACIFTkUEQCAGIAdBAnRqKAIAIgQoAhAgAiADaiICNgL4ASAGIAJBAnRqIAQ2AgAgACgCECgCxAEhBCAHIQIMAQsLIANBAWsiByAFaiECIAFBBnQhAwNAIAIgBU4NAiAGIAJBAnRqQQA2AgAgAkEBaiECIAAoAhAoAsQBIgQgA2ooAgAhBQwACwALIANBAWshByAFKAIAIQQDfyACIARBAWsiBE4EfyACIANqIQMDQCACQQFqIgIgA05FBEAgBiACQQJ0akEANgIADAELCyAAKAIQKALEASIEIAFBBnRqKAIABSAGIARBAnRqKAIAIgUoAhAgBCAHaiIINgL4ASAGIAhBAnRqIAU2AgAMAQsLIQULIAQgAUEGdGogBSAHajYCAAtLAQN/IAAQGiEBA0AgAQRAIAEoAhAiAigCgAEoAgAoAhAoApQBIgMgAigClAEiAisDADkDACADIAIrAwg5AwggACABEBshAQwBCwsLjAcCC38BfCMAQUBqIgQkAAJAIAAQNUEBRgRAIAAQGigCECgClAEiAEIANwMAIABCADcDCAwBCyAEQQhqIgdBAEEoEDMaIAQgAigCADYCFCAAEBooAhAoAoABKAIAECsiA0EAQaEZQQAQHyEGIANBAUGsG0EAEB8hCSADQawbECMhBSAHEL0LIARBATYCECADIAZEAAAAAAAA8D9EAAAAAAAAAAAQUyEOIAQgBTYCJCAEIAk2AiAgBCAOOQMoAkAgAUGh9AAQIxBqBEAgBEIANwM4IARCADcDMCAEIAQoAhQiATYCACAEIAFBAWo2AhQgBEEwaiIBIAQQmQsgARAhIAEQOE8EQCABQQEQ0QELIARBMGoiARAhIQMCQCABECUEQCABIANqQQA6AAAgBCAELQA/QQFqOgA/IAEQIUEQSQ0BQb+uA0GP/QBBiAJBuLIBEAAACyAEKAIwIANqQQA6AAAgBCAEKAI0QQFqNgI0CwJAIARBMGoQJQRAIARBADoAPwwBCyAEQQA2AjQLIARBMGoiARAlIQMgACABIAQoAjAgAxtBARCQASAELQA/Qf8BRgRAIAQoAjAQFwsQtgshASAAEBohAwNAIANFDQIgASgCCCADQQEQexogAygCECgCgAEgATYCDCAAIAMQGyEDDAALAAsjAEEgayIFJAACQCAEQQhqIggoAhwiAQRAIAAgAUEAEHMiAw0BCwJAIAgoAhhFDQAgABAaIQMDQCADRQ0BIAMoAhAoAoABKAIAIAgoAhhBABC7Dg0CIAAgAxAbIQMMAAsACyAAEBohAwtBgIsLLQAABEAgBSADEB42AgBB6PoGKAIAQcPxAyAFEB0aCyAFQQA2AhggBUIANwMQIAAgAyAIQQEgBUEQahCmCyAFQQA2AhQgBSgCEBAXIAgoAgAiDCgCBCEBA0AgAQRAIAEoAggiChAaIgcoAhAoAoABIgMoAgghCyADKAIUIQYgCiAHEBshAwNAIAMEQCAGIAMoAhAoAoABIg0oAhQiCUoEQCANKAIIIQsgCSEGIAMhBwsgCiADEBshAwwBCwsgCygCECgCgAEiBiAGKAIEQQhyNgIEIAEgBzYCACABKAIEIAYoAgxBLGogARCxCyEBDAELCyAIEL0LIAVBIGokACAMIQELIAAgASAEQQhqIgArAyAgABDrCiABEKELIAIgBCgCFDYCAAsgBEFAayQACz8AIAAQpQYgABDoBCAAIAMEfwJAIANBfnFBAkYEQCAAIAMgASACEIUJDAELIAAQpAYLIAUFIAQLIAEgAhCECQtNAEEBIAEtAAIiAHQgAEEFdkEBcSABLQABIgBBAnZBD3EgAS0AAEEEdEHwAXFyIAJqLQAAQQN0IABBAXRBBnFyckECdEHQngZqKAIAcQtAAEEBIAEtAAEiAHQgAEEFdkEBcSABLQAAIgBBAnZBB3EgAmotAABBA3QgAEEBdEEGcXJyQQJ0QdCeBmooAgBxC0cBAX8gACgC8AIgASAAKALsAhEAACIAQf//A00EfyAAQQN2QRxxIABBCHYgAmotAABBBXRyQdCeBmooAgBBASAAdHEFQQALC6MBAQN/IwBBkAFrIgAkACAAQiU3A4gBIABBiAFqIgZBAXJBx/IAIAUgAigCBBCfBRBlIQcgACAENgIAIABB+wBqIgQgBEENIAcgBiAAENMBIARqIgcgAhCjAiEIIABBBGoiBiACEEsgBCAIIAcgAEEQaiIEIABBDGogAEEIaiAGENQLIAYQSCABIAQgACgCDCAAKAIIIAIgAxCVAyAAQZABaiQAC6MBAQR/IwBBgAJrIgAkACAAQiU3A/gBIABB+AFqIgdBAXJBhO4AIAUgAigCBBCfBRBlIQggACAENwMAIABB4AFqIgYgBkEYIAggByAAENMBIAZqIgggAhCjAiEJIABBFGoiByACEEsgBiAJIAggAEEgaiIGIABBHGogAEEYaiAHENQLIAcQSCABIAYgACgCHCAAKAIYIAIgAxCVAyAAQYACaiQAC54BAQN/IwBBQGoiACQAIABCJTcDOCAAQThqIgZBAXJBx/IAIAUgAigCBBCfBRBlIQcgACAENgIAIABBK2oiBCAEQQ0gByAGIAAQ0wEgBGoiByACEKMCIQggAEEEaiIGIAIQSyAEIAggByAAQRBqIgQgAEEMaiAAQQhqIAYQ2AsgBhBIIAEgBCAAKAIMIAAoAgggAiADEJYDIABBQGskAAuiAQEEfyMAQfAAayIAJAAgAEIlNwNoIABB6ABqIgdBAXJBhO4AIAUgAigCBBCfBRBlIQggACAENwMAIABB0ABqIgYgBkEYIAggByAAENMBIAZqIgggAhCjAiEJIABBFGoiByACEEsgBiAJIAggAEEgaiIGIABBHGogAEEYaiAHENgLIAcQSCABIAYgACgCHCAAKAIYIAIgAxCWAyAAQfAAaiQACz8AA0AgASACRwRAIAEgASgCACIAQf8ATQR/IAMoAgAgASgCAEECdGooAgAFIAALNgIAIAFBBGohAQwBCwsgAQs+AANAIAEgAkcEQCABIAEsAAAiAEEATgR/IAMoAgAgASwAAEECdGooAgAFIAALOgAAIAFBAWohAQwBCwsgAQtOAAJAIAEEQCABKAIEIAJNDQEgACABKAIAIAJBBHRqIgEpAwA3AwAgACABKQMINwMIDwtBg88BIAUgBCADEAAAC0H9qgMgBSAEIAMQAAALLwEBfyAAIAAoAgQgACgCACICIAJBAWogARBgNgIEIAAgACgCACIAQQFqNgIAIAALXQEDfyAAKAIQIQUgACgCPCEDIAFBOhCTASIEBEAgBEEAOgAACwJAIANFDQAgACgCRCABIAUgAmoiARDlCCADKAJcIgNFDQAgACABIAMRBAALIAQEQCAEQTo6AAALC1IBAnwgACAAKwMoIAArAyAgASsDECIDoiABKwMgIAArAxAiBKKgIAMgAiACoCAEoqKjRAAAAAAAAPA/ECQiAhAkOQMoIAEgASsDKCACECQ5AygLugEBAX8jAEEgayIHJAACQAJAIAEgBkkEQCACIAVPDQECQCACRQRAIAAQF0EAIQIMAQsgACACIAR0IgAQPSICRQ0DIAAgASAEdCIBTQ0AIAEgAmpBACAAIAFrEDMaCyAHQSBqJAAgAg8LQZG0A0He/QBBzQBBk7MBEAAACyAHIAM2AgQgByACNgIAQej6BigCAEHa3QMgBxAdGhAmAAsgByAANgIQQej6BigCAEGp3QMgB0EQahAdGhAmAAs8AQJ/IwBBEGsiASQAQQEgABBGIgJFBEAgASAANgIAQej6BigCAEGp3QMgARAdGhAmAAsgAUEQaiQAIAILqAEBAn8jAEGgAWsiBCQAIAQgATYCnAFBACEBIARBEGoiBUEAQYABEDMaIAQgBTYCDCAAIARBnAFqIAIgBEEMaiAEQY8BaiAAKAI4EQcAGgJAIAQoApwBIAJHDQAgBCgCDEEAOgAAIAVB4rIGEO0MBEAgACIBKAJAQQJGDQELQQAhASAEQRBqEO4MIgBBf0YNACAAQQJ0IANqKAIAIQELIARBoAFqJAAgAQtOAQF/QQEgACABQRRsaiIAKAIAIgEgAUEBTRshBEEBIQEDQCABIARHBEAgAiAAKAIEIAFBAnRqKAIAQQJ0aiADNgIAIAFBAWohAQwBCwsLnAEBAX9BCyEHAkACQAJAAkACQCABQQ9rDgQDAgIAAQsgBCACIANBiM8GIAQoAhgRBgAEQCAAIAY2AgBBCw8LIAQgAiADQY/PBiAEKAIYEQYARQ0BIAAgBTYCAEELDwsgAUEbRg0CCyABQRxGBEBBOyEHIAAoAhBFDQELIABBzgM2AgBBfyEHCyAHDwsgAEELNgIIIABB4wM2AgBBDAtKACAHIQIgBiEEIAUhAwJAAkACQCABQQ9rDgQCAAABAAtBfyECQc4DIQQgAUEcRw0AIAAoAhANAEE7DwsgACAENgIAIAIhAwsgAwtCAQF/IwBBEGsiBCQAAn8gAS0AAEEqRwRAIAQgATYCACADIAQQJ0EBDAELIAAgAC0AcCACcjoAcEEACyAEQRBqJAAL0TMDF38QfAF+IwBBIGsiECQAIAFBLGohBgNAIAYoAgAiBgRAIAAgBiACIAMQ6wogBkEEaiEGIBNBAWohEwwBCwsgEEEUaiEHIAAhBiACISAgAyEIRAAAAAAAAAAAIQIjAEHwAGsiBSQAIAEiDSgCCCILEBohAANAIAAEQCAGIAAQKSEEA0AgBARAIA0gBEFQQQAgBCgCAEEDcUECRxtqKAIoKAIQKAKAASgCDEYEQCALIARBARDIAhoLIAYgBBAsIQQMAQsLIAsgABAbIQAMAQsLIAVCADcDOCAFQgA3AzAgCCAIKAIQIgBBAWo2AhAgBSAANgIgIAVBMGoiAEHEsQEgBUEgahCMASALIAAQmwJBARCQASIPQewlQZgCQQEQLhogCCAIKAIQIgFBAWo2AhAgBSABNgIQIABBxLEBIAVBEGoQjAEgABCbAiAFIAsoAhg2AgwgBUEMakEAEM0BIQwgABBmIAsQGiEEA0AgBARAIA8gBEEBEHsaIAwgBBAeQQEQcyIAQYYmQcACQQEQLhogBCgCECgCgAEgADYCECALIAQQGyEEDAELCyALEBohBgNAIAYEQCAGKAIQKAKAASgCECEAIAsgBhApIQQDQCAEBEAgDyAEQQEQyAIaIAwgACAEQVBBACAEKAIAQQNxQQJHG2ooAigoAhAoAoABKAIQIgFBAEEBEFIiA0H5JUG4AUEBEC4aIAMoAhAgBDYCeCAAKAIQIgMgAygC+AFBAWo2AvgBIAEoAhAiASABKAL4AUEBajYC+AEgCyAEECwhBAwBCwsgCyAGEBshBgwBCwsgDBA1IQAgBUEANgI4IAVCADcDMCAMEBohBANAIAQEQCAFQTBqIAQQkQsgDCAEEBshBAwBCwtBAyAAIABBA0wbQQNrIRogBUEwahCPCwNAAkACQCAWIBpHBEACQCAFKAI0IgFFBEBBACEADAELIAUoAjAgAUECdGpBBGsoAgAhACAFIAFBAWs2AjQLIAwgABBvIQEDQCABRQ0CIAUgAUFQQQAgASgCAEEDcSIDQQJHG2ooAigiBiAARgR/IAFBMEEAIANBA0cbaigCKAUgBgs2AmBBACEEIAUoAjAhCiAFKAI0IQMDQAJAIAMgBEcEQCAKIARBAnRqIgYoAAAgBSgCYEcNASAGIAZBBGogAyAEQX9zakECdBCPARogBSAFKAI0QQFrNgI0CyAMIAEgABB0IQEMAgsgBEEBaiEEDAALAAsACyAMEJUBIAVBADYCNCAFKAIwEBcgBUIANwM4IAVCADcDMCAIIAgoAhQiAEEBajYCFCAFIAA2AgAgBUEwaiIAQaixASAFEIwBIA8gABCbAkEBEJABIQggABBmIAhB7CVBmAJBARAuGiAPEBohBANAIAQEQCAIIARBARB7GiAEKAIQKAKAAUEANgIcIAQoAhAoAoABQQA2AiAgBCgCECgCgAEiACAAKAIEQX5xNgIEIA8gBBAbIQQMAQsLIA8QGiEEA0AgBARAIAQoAhAoAoABIgAtAARBAXFFBEAgAEEANgIQIA8gBCAIEIoLCyAPIAQQGyEEDAELCwJAIAgQNUEBRgRAIAdCADcCACAHQQA2AgggByAIEBoiABCGAiAAKAIQKAKAASIAIAAoAgRBEHI2AgQMAQsgCBAaIQADQCAABEBBACEBIAggABBvIQQDQCAEBEAgAUEBaiEBIAggBCAAEHQhBAwBCwtBACEGIAAhBEEAIQoCQCABQQFHDQADQCAEKAIQKAKAASgCECIERQ0BIAZBAWohAwJAAkAgBCgCECgCgAEiASgCHCIJRQ0AIAYgCUgNASABKAIUIgYgCkYNAAJAIAEoAiAEQCABKAIYIApGDQELIAYhCgsgASAGNgIYIAQoAhAoAoABIgEgASgCHDYCICAEKAIQKAKAASEBCyABIAA2AhQgBCgCECgCgAEgAzYCHCADIQYMAQsLIAEoAiAgBkoNACABIAA2AhggBCgCECgCgAEgAzYCIAsgCCAAEBshAAwBCwtBACEBIAgQGiEEQQAhAANAIAQEQCAEKAIQKAKAASIDKAIgIAMoAhxqIgMgACAAIANIIgMbIQAgBCABIAMbIQEgCCAEEBshBAwBCwsgB0IANwIAIAdBADYCCCABKAIQKAKAAUEUaiEEA0AgASAEKAIAIgBHBEAgByAAEIYCIAAoAhAoAoABIgAgACgCBEEQcjYCBCAAQRBqIQQMAQsLIAcgARCGAiABKAIQKAKAASIAIAAoAgRBEHI2AgQgACgCIEUNACAFQQA2AjggBUIANwMwIABBGGohBANAIAEgBCgCACIARwRAIAVBMGogABCGAiAAKAIQKAKAASIAIAAoAgRBEHI2AgQgAEEQaiEEDAELC0EAIQNBACEAAkAgBUEwaiIBBEADQCABKAIEQQF2IANNBEADQCABEMcBIABLBEAgByABIAAQ4gEQhgIgAEEBaiEADAELCyABQQA2AgQgASgCABAXIAFBADYCCCABQgA3AgAMAwUgASADEOIBIQYgASADIAEgA0F/cyIEIAEoAgRqEOIBEPYGIAEgASgCBCAEaiAGEPYGIANBAWohAwwBCwALAAtBg88BQZv7AEEVQeySARAAAAsLIAsQGiEJA0AgCQRAIAkoAhAoAoABLQAEQRBxRQRAIAVBADYCOCAFQgA3AzAgCyAJECkhBANAIAQEQCAFQTBqIAQgBEEwayIAIAQoAgBBA3FBAkYbKAIoEIYCIAQgACAEKAIAQQNxQQJGGygCKCgCECgCgAEiACAAKAIEQSByNgIEIAsgBBAsIQQMAQsLIAsgCRCxAiEEA0AgBARAIAVBMGogBCAEQTBqIgAgBCgCAEEDcUEDRhsoAigQhgIgBCAAIAQoAgBBA3FBA0YbKAIoKAIQKAKAASIAIAAoAgRBIHI2AgQgCyAEEPgCIQQMAQsLQQAhBAJAIAUoAjQiAUECTwRAAkADQCAHEMcBIARNDQEgBxDHASEAIAcgBBDiASAEQQFqIQQoAhAoAoABLQAEQSBxRQ0AIAcgBCAAcBDiASgCECgCgAEtAARBIHFFDQALIAcgBCAJEPcGDAILIAUoAjQhAQtBACEEAkAgAUUNAANAIAcQxwEgBE0NASAHIAQQ4gEgBEEBaiIBIQQoAhAoAoABLQAEQSBxRQ0ACyAHIAEgCRD3BgwBCyAHIAkQhgILQQAhBANAIAUoAjQgBEsEQCAFQTBqIAQQ4gEoAhAoAoABIgAgACgCBEFfcTYCBCAEQQFqIQQMAQsLIAVBMGoQhAcLIAsgCRAbIQkMAQsLIAUgBygCCDYCSCAFIAcpAgA3A0ACQCAFQUBrIAsQ8woiA0UNAEEAIRIDQCASQQpGDQEgBSAFKAJINgJoIAUgBSkDQDcDYCALEBohCSADIQACQANAIAkEQCALIAkQbyEKA0AgCgRAIAkgCkEwQQAgCigCAEEDcSIBQQNHG2ooAigiBkYEQCAKQVBBACABQQJHG2ooAighBgtBACEEA0AgBEECRwRAIAUgBSgCaEEEEBgiATYCMCAFIAUoAmQiCDYCNCAFIAUoAmg2AjggASAFKAJgIAhBAnQQIBpBACEBIwBBEGsiDCQAIAwgCTYCDAJAIAVB4ABqIggEQCAIKAIEIQ4DQAJAIAEgDkcEQCAIKAIAIAFBAnRqIhEoAAAgDCgCDEcNASARIBFBBGogDiABQX9zakECdBCPARogCCAIKAIEQQFrNgIEC0EAIQEDQAJAIAgQxwEgAUsEQCAIIAEQ4gEgBkcNASAIIAEgBEEAR2ogCRD3BgsgDEEQaiQADAULIAFBAWohAQwACwALIAFBAWohAQwACwALQYPPAUGb+wBBFUG9iQEQAAALAkAgACAIIAsQ8woiAUoEQCAFQTBqEIQHIAENASAFIAUoAmg2AlggBSAFKQNgNwNQQQAhAAwICyAFQeAAahCEByAFIAUoAjg2AmggBSAFKQIwNwNgIAAhAQsgBEEBaiEEIAEhAAwBCwsgCyAKIAkQdCEKDAELCyALIAkQGyEJDAELCyAFIAUoAmg2AlggBSAFKQNgNwNQCyAFIAUoAlg2AkggBSAFKQNQNwNAIAAgA0YNASASQQFqIRIgACIDDQALCyAHIAUpA0A3AgAgByAFKAJINgIIQQAhBCAHEMcBIQADQCAHEMcBIARLBEAgByAEEOIBKAIQKAKAASgCACgCECIBKwMoIhsgASsDICIfIAIgAiAfYxsiAiACIBtjGyECIARBAWohBAwBCwsgAiAgoCAAuKJEGC1EVPshGUCjRAAAAAAAAAAAIABBAUcbIRtBACEEA0ACQAJAIAcQxwEgBEsEQCAHIAQQ4gEoAhAoAoABLQAEQQhxRQ0BAkACQAJAAkAgBxDHASAESwRAA0AgBEUNBSAHIAdBABDiARCGAiAHEMcBQQJ0QQRrIgEEQCAHRQ0DIAcoAgRFDQQgB0EAEJMEIAdBARCTBCABEI8BGgsgBxDHASEDIAdFDQQCQCAHKAIEIgEgA0EBayIDSQRAA0AgASADTw0CIAdBABCGAiAHKAIEIQEMAAsACyABIANNDQADQCABIANNDQEgByABQQFrIgE2AgQMAAsACyAEQQFrIQQMAAsAC0G8mgNBhLcBQSNB9hgQAAALQYPPAUGb+wBBFUGyHRAAAAtB8ZkDQZv7AEEVQbIdEAAAC0GDzwFBm/sAQRVB4YcBEAAACwtEGC1EVPshGUAgALijIR9BACEEA0AgBxDHASAETQ0CIAcgBBDiASIBKAIQKAKAASAENgIQIAEoAhAoAoABQgA3AxggHyAEuKIiHBBXIR0gASgCECgClAEiASAbIB2iOQMIIAEgGyAcEESiOQMAIARBAWohBAwACwALIARBAWohBAwBCwsgDUKAgICAgICA+L9/NwM4IA0gAkQAAAAAAADgP6IgGyAAQQFGGyICOQMYIA0gAjkDECAPEJUBIAVB8ABqJAAMAQtBACESIAAoAhAoAvgBIhlBBBAYIRcgGUEEEBghESAMIAAQbyEJQQAhDkEAIQMDQCAJBEAgACAJQVBBACAJKAIAQQNxIgFBAkcbaigCKCIGRgRAIAlBMEEAIAFBA0cbaigCKCEGC0EAIQogDCAAEG8hBANAIAQEQAJAIAQgCUYNACAAIARBUEEAIAQoAgBBA3EiFUECRxtqKAIoIgFGBEAgBEEwQQAgFUEDRxtqKAIoIQELIAwgBiABQQBBABBSIhVFDQBBASEKIAEgBk0NACADQQFqIQMgFSgCECgCeCIBRQ0AIA8gARC0ASAVKAIQQQA2AngLIAwgBCAAEHQhBAwBCwsCQCAKBEAgFyASQQJ0aiAGNgIAIBJBAWohEgwBCyARIA5BAnRqIAY2AgAgDkEBaiEOCyAMIAkgABB0IQkMAQsLAkAgGSADQX9zaiIEQQBMDQBBACEBAkAgBCAOSARAA0AgASAOTg0CIAFBAXIiAyAOTg0CIAwgESABQQJ0aigCACIGIBEgA0ECdGooAgAiA0EAQQEQUkH5JUG4AUEBEC4aIAYoAhAiBiAGKAL4AUEBajYC+AEgAygCECIDIAMoAvgBQQFqNgL4ASABQQJqIQEgBEEBayEEDAALAAsgBCAORw0BIBcoAgAhAUEAIQQDQCAEIA5GDQIgDCABIBEgBEECdGooAgAiA0EAQQEQUkH5JUG4AUEBEC4aIAEoAhAiBiAGKAL4AUEBajYC+AEgAygCECIDIAMoAvgBQQFqNgL4ASAEQQFqIQQMAAsAC0ECIQEDQCAEQQBMDQEgDCARKAIAIgMgESABQQJ0aigCACIGQQBBARBSQfklQbgBQQEQLhogAygCECIDIAMoAvgBQQFqNgL4ASAGKAIQIgMgAygC+AFBAWo2AvgBIARBAWshBCABQQFqIQEMAAsACyAREBcgFxAXIAwgABBvIQQDQCAEBEAgBEFQQQAgBCgCAEEDcSIDQQJHG2ooAigiASAARgRAIARBMEEAIANBA0cbaigCKCEBCyABKAIQIgMgAygC+AFBAWs2AvgBIAVBMGogARCRCyAMIAQgABB0IQQMAQsLIAVBMGoQjwsgDCAAELQBIBZBAWohFgwBCwsgDSAQKAIcNgIoIA0gECkCFDcCICAQKAIYIQUCQAJAIBMEfCATQaWSySRPDQEgE0E4EEYiBEUNAiANKwMQIiMgIKAhH0QYLURU+yEZQCAFuKMhHCANKAIAIQwgDSgCLCEBQQAhAyAQKAIUIQcCQAJAAkADQAJAIAUgAyIARgRAIBRBAWsOAgQBAwsgAEEBaiEDIAcgAEECdGooAgAiCCgCECgCgAEtAARBCHFFDQEgBCAUQThsaiIKIBwgALiiOQMIIAogCDYCAEEAIQBEAAAAAAAAAAAhISABIQZEAAAAAAAAAAAhGwNAIAYEQCAGKAIAIgkEfyAJKAIQKAKAASgCCAVBAAsgCEYEQCAGKwMQIgIgISACICFkGyEhIBsgAiACoCAgoKAhGyAAQQFqIQALIAYoAgQhBgwBCwsgCiAANgIwIAogGzkDICAKICE5AxggCiAfICGgOQMQIBRBAWohFAwBCwsgBCAEQThqRBgtRFT7IRlAIAQrA0AgBCsDCKEiAqEgAiACRBgtRFT7IQlAZBsQ4woMAgtBACEDIAQhBgNAIAMgFEYNAiAGAn8gFCADQQFqIgNGBEAgBCsDCCAGKwMIoUQYLURU+yEZQKAhAiAEDAELIAYrA0AgBisDCKEhAiAGQThqCyACEOMKIAZBOGohBgwACwALIARCgICAgICAgPg/NwMoC0QAAAAAAADwvyEkIAVBAUchB0QAAAAAAADwvyEfA0AgFCAYRwRAIAQgGEE4bGoiCCsDKCAIKwMQoiEdAnwCfCAHRQRARAAAAAAAAAAAIgIgHSAIKwMgIhtEGC1EVPshGUCjECQiHUQYLURU+yEZQKIgG6EiG0QAAAAAAAAAAGRFDQEaIBsgCCgCMLejICCgDAILIAgrAwggCCsDICAdIB2go6ELIQIgIAsgHaMiGyAbRAAAAAAAAOA/oiInIAVBAUYbISggCCgCMCIJQQFqQQJtIQ8gCCsDGCEpQQAhC0QAAAAAAAAAACElIAEhAwNAIAMEQAJAIAMoAgAiCgR/IAooAhAoAoABKAIIBUEACyAIKAIARw0AIAMoAiQiAEUNACADKwMQIB2jISYCQCAHRQRARBgtRFT7IQlAIAIgJqAgCUECRhsgAiACRAAAAAAAAAAAYhsiAiAkICREAAAAAAAAAABjGyEkIAIhHwwBCyAJQQFGBEAgCCsDCCECDAELIAIgJyAmoKAhAgsgHSACEFeiIR4gAyAdIAIQRKIiIiAeAnwgAysDOCIbRAAAAAAAAAAAZgRAIAJEGC1EVPshCUAgG6GgIhtEGC1EVPshGUCgIBsgG0QAAAAAAAAAAGMbDAELIAJEGC1EVPsh+b+gIABBAkYNABogIiAKKAIQKAKUASIAKwMAoCIbIBuiIB4gACsDCKAiGyAboqAhGyADKAIIIg4QGiEGIAohAANAIAYEQAJAIAYgCkYNACAiIAYoAhAoApQBIhIrAwCgIhwgHKIgHiASKwMIoCIcIByioCIcIBtjRQ0AIAYhACAcIRsLIA4gBhAbIQYMAQsLRAAAAAAAAAAAIAAgCkYNABogCigCECIGKAKUASIAKwMAIRsCQCADLQBAQQFxRQ0AIBsgAysDECADKwMYIiqhIhyaZEUNACAiIB4QTyEeIAJEGC1EVPsh+T8gACsDCCAcIBugEKcBIhuhAnwgGxBEIhsgHCAqIBujoSAeo6IiG70iK0IgiKdB/////wdxIgBBgIDA/wNPBEAgG0QYLURU+yH5P6JEAAAAAAAAcDigICunIABBgIDA/wNrckUNARpEAAAAAAAAAAAgGyAboaMMAQsCQCAAQf////4DTQRAIABBgIBAakGAgIDyA0kNASAbIBsgG6IQpgSiIBugDAILRAAAAAAAAPA/IBuZoUQAAAAAAADgP6IiHp8hGyAeEKYEISICfCAAQbPmvP8DTwRARBgtRFT7Ifk/IBsgIqIgG6AiGyAboEQHXBQzJqaRvKChDAELRBgtRFT7Iek/IBu9QoCAgIBwg78iHCAcoKEgGyAboCAiokQHXBQzJqaRPCAeIBwgHKKhIBsgHKCjIhsgG6ChoaFEGC1EVPsh6T+gCyIbmiAbICtCAFMbIRsLIBsLoaAMAQsgAkQYLURU+yEJQCAAKwMIIBsQpwGhIAYoAoABKwMYoaAiG0QYLURU+yEZwKAgGyAbRBgtRFT7IRlAZBsLEPgGICggJqAgAqAiAiAlIAtBAWoiCyAPRhshJQsgAygCBCEDDAELCwJAIAVBAkkNACAIKAIAIgAgDEcNACAAKAIQKAKAASAlOQMYCyAdICmgIgIgIyACICNkGyEjIBhBAWohGAwBCwsgBBAXIA0gE0EBRgR8IA0gIEQAAAAAAADgP6IgIaAiAppEAAAAAAAAAABEAAAAAAAAAAAQ+AYgDSANKAJAQQFyNgJAIAIgDSsDEKAFICMLOQMQICQgH6BEAAAAAAAA4D+iRBgtRFT7IQnAoAVEGC1EVPshCUALIQICQCAFQQFHDQAgDSgCACIARQ0AIAAoAhAoAoABKAIIRQ0AIA0gAjkDOCACRAAAAAAAAAAAY0UNACANIAJEGC1EVPshGUCgOQM4CyAQQSBqJAAPCyAQQTg2AgQgECATNgIAQej6BigCAEHa3QMgEBAdGhAmAAsgECATQThsNgIQQej6BigCAEGp3QMgEEEQahAdGhAmAAtaAEHwAyEEQSEhAwJ/AkACQAJAAkAgAUEVaw4EAAICAwELIAUhBAwCC0EhIAFBD0YNAhoLQX8hA0HOAyEEIAFBHEcNAEE7IAAoAhBFDQEaCyAAIAQ2AgAgAwsLMAEBfyAALQAAIgFBAWpB/wFxQRFPBEBB/bIDQY/9AEHIAEG4lwEQAAALIAFB/wFHC4UCAQN/IwBBEGsiAyQAIAMgATYCBCADIAE2AgwgAyABNgIIAkACQAJAQQBBACACIAEQTiIFQQBIDQAgBUEBaiEBIAUgABA4IAAQIWsiBE8EQCAAIAEgBGsQ0QELIAAQISEEIAUgABAlBH8gACAEagUgACgCACAEagsgASACIAMoAgwQTiIBRyABQQBOcQ0BIAFBAEwNACAAECUEQCABQYACTw0DIAAgAC0ADyABajoADyAAECFBEEkNAUG/rgNBj/0AQcQBQdkdEAAACyAAIAAoAgQgAWo2AgQLIANBEGokAA8LQc2WA0GP/QBBvwFB2R0QAAALQdLJAUGP/QBBwgFB2R0QAAALPwAgAhDuDCICQX9GBEBBAA8LIAAgATYCSCAAQYkDNgIwIAAgBDYCBCAAIAM2AgAgACACOgBFIAEgADYCAEEBCzIBAn8jAEEQayIDJAAgA0EEaiIEIAAgAhDIECAAIAFqIAQQxxAgBBDsARogA0EQaiQACwwAIAAQ8goaIAAQFwsrAQF/IABBxPMHNgIAAkAgACgCBEEMayIBQQhqEIwHQQBODQAgARAXCyAAC70DAQl/Qez4B0HsyQooAgAQfyEEIAEQGiEDA38gAwR/IAEgAxApIQIDQCACBEAgAigCECgCfEEANgIAIAEgAhAsIQIMAQsLIAEgAxAbIQMMAQVBAQsLIQYDQAJAIAAQxwEgB0sEQCABIAAgBxDiASIFEG8hAwNAIAMEQCADKAIQKAJ8KAIAQQBKBEAgBEEAQYABIAQoAgARAwAhAgNAIAIEQAJAIAIoAggiCCgCECgCfCgCACADKAIQKAJ8KAIATA0AIAhBUEEAIAgoAgBBA3EiCkECRxtqKAIoIAVGDQAgCSAIQTBBACAKQQNHG2ooAiggBUdqIQkLIAQgAkEIIAQoAgARAwAhAgwBCwsjAEEQayICJAAgAiADNgIMIAQgAkEEakECIAQoAgARAwAaIAJBEGokAAsgASADIAUQdCEDDAELCyABIAUQbyECA0AgAkUNAiACKAIQKAJ8IgMoAgBFBEAgAyAGNgIAIwBBEGsiAyQAIAMgAjYCDCAEIANBBGpBASAEKAIAEQMAGiADQRBqJAALIAEgAiAFEHQhAgwACwALIAQQ3wIgCQ8LIAdBAWohByAGQQFqIQYMAAsAC08BAX8CQCABRQ0AIAFBlO8HEOEBIgFFDQAgASgCCCAAKAIIQX9zcQ0AIAAoAgwgASgCDEEAEIsBRQ0AIAAoAhAgASgCEEEAEIsBIQILIAILgQEBA38gACgCBCIEQQFxIQUCfyABLQA3QQFGBEAgBEEIdSIGIAVFDQEaIAIoAgAgBhCDBwwBCyAEQQh1IAVFDQAaIAEgACgCACgCBDYCOCAAKAIEIQRBACECQQALIQUgACgCACIAIAEgAiAFaiADQQIgBEECcRsgACgCACgCHBEIAAucAgEDfyMAQRBrIggkACACIAFBf3NB9////wNqTQRAIAAQQCEJIAhBBGoiCiABQfP///8BSQR/IAggAUEBdDYCDCAIIAEgAmo2AgQgCiAIQQxqENQDKAIAEMcDQQFqBUH3////AwsQxgMgCCgCBCECIAgoAggaIAQEQCACIAkgBBDpAgsgBgRAIARBAnQgAmogByAGEOkCCyADIAQgBWoiCmshByADIApHBEAgBEECdCIDIAJqIAZBAnRqIAMgCWogBUECdGogBxDpAgsgAUEBRwRAIAkQlAQLIAAgAhDzASAAIAgoAggQ8gEgACAEIAZqIAdqIgAQuAEgCEEANgIMIAIgAEECdGogCEEMahDSASAIQRBqJAAPCxC/AQALjQEBAn8jAEEQayIDJAAgAUH3////B00EQAJAIAEQpQUEQCAAIAEQygEgACEEDAELIANBCGogARDTA0EBahDSAyADKAIMGiAAIAMoAggiBBDzASAAIAMoAgwQ8gEgACABELgBCyAEIAEgAhD4CiADQQA6AAcgASAEaiADQQdqEMkBIANBEGokAA8LEL8BAAs9AQF/IwBBEGsiAyQAIAMgAjoADwNAIAEEQCAAIAMtAA86AAAgAUEBayEBIABBAWohAAwBCwsgA0EQaiQAC4sCAQN/IwBBEGsiCCQAIAIgAUF/c0H3////B2pNBEAgABBAIQkgCEEEaiIKIAFB8////wNJBH8gCCABQQF0NgIMIAggASACajYCBCAKIAhBDGoQ1AMoAgAQ0wNBAWoFQff///8HCxDSAyAIKAIEIQIgCCgCCBogBARAIAIgCSAEEKYCCyAGBEAgAiAEaiAHIAYQpgILIAMgBCAFaiIKayEHIAMgCkcEQCACIARqIAZqIAQgCWogBWogBxCmAgsgAUEKRwRAIAkQpgULIAAgAhDzASAAIAgoAggQ8gEgACAEIAZqIAdqIgAQuAEgCEEAOgAMIAAgAmogCEEMahDJASAIQRBqJAAPCxC/AQALDQAgAEHU8gc2AgAgAAsWACAAIAEgAkKAgICAgICAgIB/ELQFCwkAIAAQZTYCAAsjAQJ/IAAhAQNAIAEiAkEEaiEBIAIoAgANAAsgAiAAa0ECdQsPACAAIAAoAgBBBGs2AgALCgAgACgCAEEEawstAQF/IwBBEGsiAiQAAkAgACABRgRAIABBADoAeAwBCyABEJQECyACQRBqJAALEwAgABCVBSgCACAAKAIAa0ECdQssAQF/IAAoAgQhAgNAIAEgAkcEQCAAEJADGiACQQRrIQIMAQsLIAAgATYCBAsJACAAQQA2AgALSQEBfyMAQRBrIgMkAAJAAkAgAkEeSw0AIAEtAHhBAXENACABQQE6AHgMAQsgAhCOCyEBCyADQRBqJAAgACACNgIEIAAgATYCAAtAAQF/IwBBEGsiASQAIAAQkAMaIAFB/////wM2AgwgAUH/////BzYCCCABQQxqIAFBCGoQiAwoAgAgAUEQaiQACwsAIABBADYCACAACzcBAX8jAEEQayIDJAAgAyABEIsLNgIMIAMgAhCLCzYCCCAAIANBDGogA0EIahCnBSADQRBqJAALJwEBfyAAKAIAIQEjAEEQayIAJAAgACABNgIMIAAoAgwgAEEQaiQACwcAIAAQiAsLnAEBA38gASgCECgCgAEiAyADKAIEQQFyNgIEIAAgARBvIQMDQCADBEAgASADQVBBACADKAIAQQNxIgVBAkcbaigCKCIERgRAIANBMEEAIAVBA0cbaigCKCEECyAEKAIQKAKAAS0ABEEBcUUEQCACIANBARDIAhogBCgCECgCgAEgATYCECAAIAQgAhCKCwsgACADIAEQdCEDDAELCwsHACAAEJEDC04BAX8jAEEQayIDJAAgAyABNgIIIAMgADYCDCADIAI2AgRBACEBIANBBGoiACADQQxqEKQFRQRAIAAgA0EIahCkBSEBCyADQRBqJAAgAQs0AQF/IwBBEGsiAyQAIAAQIhogACACEJMDIANBADoADyABIAJqIANBD2oQyQEgA0EQaiQACxwAIABB/////wNLBEAQjgEACyAAQQJ0QQQQ+gsLMwEBfyAABEAgACgCBCIBBEAgACgCACABQQRBHxCUAQsPC0GDzwFB+7oBQcgAQYsaEAAACwkAIAAQiQcQFwsUACAAIAFB66QBQcgAQfu6ARCFAgsVACAAQcDBBzYCACAAQRBqEC8aIAALFQAgAEGYwQc2AgAgAEEMahAvGiAAC8gDAQR/AkAgAyACIgBrQQNIQQFyDQAgAC0AAEHvAUcNACAALQABQbsBRw0AIABBA0EAIAAtAAJBvwFGG2ohAAsDQAJAIAQgB00gACADT3INACAALAAAIgFB/wFxIQUCf0EBIAFBAE4NABogAUFCSQ0BIAFBX00EQCADIABrQQJIDQIgAC0AAUHAAXFBgAFHDQJBAgwBCyABQW9NBEAgAyAAa0EDSA0CIAAtAAIgAC0AASEBAkACQCAFQe0BRwRAIAVB4AFHDQEgAUHgAXFBoAFGDQIMBQsgAUHgAXFBgAFHDQQMAQsgAUHAAXFBgAFHDQMLQcABcUGAAUcNAkEDDAELIAMgAGtBBEggAUF0S3INASAALQADIQYgAC0AAiEIIAAtAAEhAQJAAkACQAJAIAVB8AFrDgUAAgICAQILIAFB8ABqQf8BcUEwTw0EDAILIAFB8AFxQYABRw0DDAELIAFBwAFxQYABRw0CCyAIQcABcUGAAUcgBkHAAXFBgAFHciAGQT9xIAhBBnRBwB9xIAVBEnRBgIDwAHEgAUE/cUEMdHJyckH//8MAS3INAUEECyEBIAdBAWohByAAIAFqIQAMAQsLIAAgAmsL4gQBBH8jAEEQayIAJAAgACACNgIMIAAgBTYCCAJ/IAAgAjYCDCAAIAU2AggCQAJAA0ACQCAAKAIMIgEgA08NACAAKAIIIgogBk8NACABLAAAIgVB/wFxIQICfyAFQQBOBEAgAkH//8MASw0FQQEMAQsgBUFCSQ0EIAVBX00EQEEBIAMgAWtBAkgNBhpBAiEFIAEtAAEiCEHAAXFBgAFHDQQgCEE/cSACQQZ0QcAPcXIhAkECDAELIAVBb00EQEEBIQUgAyABayIJQQJIDQQgAS0AASEIAkACQCACQe0BRwRAIAJB4AFHDQEgCEHgAXFBoAFGDQIMCAsgCEHgAXFBgAFGDQEMBwsgCEHAAXFBgAFHDQYLIAlBAkYNBCABLQACIgVBwAFxQYABRw0FIAVBP3EgAkEMdEGA4ANxIAhBP3FBBnRyciECQQMMAQsgBUF0Sw0EQQEhBSADIAFrIglBAkgNAyABLQABIQgCQAJAAkACQCACQfABaw4FAAICAgECCyAIQfAAakH/AXFBME8NBwwCCyAIQfABcUGAAUcNBgwBCyAIQcABcUGAAUcNBQsgCUECRg0DIAEtAAIiC0HAAXFBgAFHDQQgCUEDRg0DIAEtAAMiCUHAAXFBgAFHDQRBAiEFIAlBP3EgC0EGdEHAH3EgAkESdEGAgPAAcSAIQT9xQQx0cnJyIgJB///DAEsNA0EECyEFIAogAjYCACAAIAEgBWo2AgwgACAAKAIIQQRqNgIIDAELCyABIANJIQULIAUMAQtBAgsgBCAAKAIMNgIAIAcgACgCCDYCACAAQRBqJAALigQAIwBBEGsiACQAIAAgAjYCDCAAIAU2AggCfyAAIAI2AgwgACAFNgIIIAAoAgwhAQJAA0ACQCABIANPBEBBACECDAELQQIhAiABKAIAIgFB///DAEsgAUGAcHFBgLADRnINAAJAIAFB/wBNBEBBASECIAYgACgCCCIFa0EATA0CIAAgBUEBajYCCCAFIAE6AAAMAQsgAUH/D00EQCAGIAAoAggiAmtBAkgNBCAAIAJBAWo2AgggAiABQQZ2QcABcjoAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAADAELIAYgACgCCCICayEFIAFB//8DTQRAIAVBA0gNBCAAIAJBAWo2AgggAiABQQx2QeABcjoAACAAIAAoAggiAkEBajYCCCACIAFBBnZBP3FBgAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUE/cUGAAXI6AAAMAQsgBUEESA0DIAAgAkEBajYCCCACIAFBEnZB8AFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUEMdkE/cUGAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQQZ2QT9xQYABcjoAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAACyAAIAAoAgxBBGoiATYCDAwBCwsgAgwBC0EBCyAEIAAoAgw2AgAgByAAKAIINgIAIABBEGokAAvaAwEEfwJAIAMgAiIAa0EDSEEBcg0AIAAtAABB7wFHDQAgAC0AAUG7AUcNACAAQQNBACAALQACQb8BRhtqIQALA0ACQCAEIAZNIAAgA09yDQACfyAAQQFqIAAtAAAiAcBBAE4NABogAUHCAUkNASABQd8BTQRAIAMgAGtBAkgNAiAALQABQcABcUGAAUcNAiAAQQJqDAELIAFB7wFNBEAgAyAAa0EDSA0CIAAtAAIgAC0AASEFAkACQCABQe0BRwRAIAFB4AFHDQEgBUHgAXFBoAFGDQIMBQsgBUHgAXFBgAFHDQQMAQsgBUHAAXFBgAFHDQMLQcABcUGAAUcNAiAAQQNqDAELIAMgAGtBBEggAUH0AUtyIAQgBmtBAklyDQEgAC0AAyEHIAAtAAIhCCAALQABIQUCQAJAAkACQCABQfABaw4FAAICAgECCyAFQfAAakH/AXFBME8NBAwCCyAFQfABcUGAAUcNAwwBCyAFQcABcUGAAUcNAgsgCEHAAXFBgAFHIAdBwAFxQYABR3IgB0E/cSAIQQZ0QcAfcSABQRJ0QYCA8ABxIAVBP3FBDHRycnJB///DAEtyDQEgBkEBaiEGIABBBGoLIQAgBkEBaiEGDAELCyAAIAJrC7cFAQR/IwBBEGsiACQAIAAgAjYCDCAAIAU2AggCfyAAIAI2AgwgACAFNgIIAkACQANAAkAgACgCDCIBIANPDQAgACgCCCIFIAZPDQBBAiEJIAACfyABLQAAIgLAQQBOBEAgBSACOwEAIAFBAWoMAQsgAkHCAUkNBCACQd8BTQRAQQEgAyABa0ECSA0GGiABLQABIghBwAFxQYABRw0EIAUgCEE/cSACQQZ0QcAPcXI7AQAgAUECagwBCyACQe8BTQRAQQEhCSADIAFrIgpBAkgNBCABLQABIQgCQAJAIAJB7QFHBEAgAkHgAUcNASAIQeABcUGgAUcNCAwCCyAIQeABcUGAAUcNBwwBCyAIQcABcUGAAUcNBgsgCkECRg0EIAEtAAIiCUHAAXFBgAFHDQUgBSAJQT9xIAhBP3FBBnQgAkEMdHJyOwEAIAFBA2oMAQsgAkH0AUsNBEEBIQkgAyABayIKQQJIDQMgAS0AASEIAkACQAJAAkAgAkHwAWsOBQACAgIBAgsgCEHwAGpB/wFxQTBPDQcMAgsgCEHwAXFBgAFHDQYMAQsgCEHAAXFBgAFHDQULIApBAkYNAyABLQACIgtBwAFxQYABRw0EIApBA0YNAyABLQADIgFBwAFxQYABRw0EIAYgBWtBA0gNA0ECIQkgAUE/cSIBIAtBBnQiCkHAH3EgCEEMdEGA4A9xIAJBB3EiAkESdHJyckH//8MASw0DIAUgC0EEdkEDcSAIQQJ0IglBwAFxIAJBCHRyIAlBPHFyckHA/wBqQYCwA3I7AQAgACAFQQJqNgIIIAUgASAKQcAHcXJBgLgDcjsBAiAAKAIMQQRqCzYCDCAAIAAoAghBAmo2AggMAQsLIAEgA0khCQsgCQwBC0ECCyAEIAAoAgw2AgAgByAAKAIINgIAIABBEGokAAsNACAAIAFBsbEBEO4KC+MFAQF/IwBBEGsiACQAIAAgAjYCDCAAIAU2AggCfyAAIAI2AgwgACAFNgIIIAAoAgwhAgJAAkADQCACIANPBEBBACEFDAILQQIhBQJAAkAgAi8BACIBQf8ATQRAQQEhBSAGIAAoAggiAmtBAEwNBCAAIAJBAWo2AgggAiABOgAADAELIAFB/w9NBEAgBiAAKAIIIgJrQQJIDQUgACACQQFqNgIIIAIgAUEGdkHAAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQT9xQYABcjoAAAwBCyABQf+vA00EQCAGIAAoAggiAmtBA0gNBSAAIAJBAWo2AgggAiABQQx2QeABcjoAACAAIAAoAggiAkEBajYCCCACIAFBBnZBP3FBgAFyOgAAIAAgACgCCCICQQFqNgIIIAIgAUE/cUGAAXI6AAAMAQsgAUH/twNNBEBBASEFIAMgAmtBA0gNBCACLwECIghBgPgDcUGAuANHDQIgBiAAKAIIa0EESA0EIAhB/wdxIAFBCnRBgPgDcSABQcAHcSIFQQp0cnJB//8/Sw0CIAAgAkECajYCDCAAIAAoAggiAkEBajYCCCACIAVBBnZBAWoiAkECdkHwAXI6AAAgACAAKAIIIgVBAWo2AgggBSACQQR0QTBxIAFBAnZBD3FyQYABcjoAACAAIAAoAggiAkEBajYCCCACIAhBBnZBD3EgAUEEdEEwcXJBgAFyOgAAIAAgACgCCCIBQQFqNgIIIAEgCEE/cUGAAXI6AAAMAQsgAUGAwANJDQMgBiAAKAIIIgJrQQNIDQQgACACQQFqNgIIIAIgAUEMdkHgAXI6AAAgACAAKAIIIgJBAWo2AgggAiABQQZ2Qb8BcToAACAAIAAoAggiAkEBajYCCCACIAFBP3FBgAFyOgAACyAAIAAoAgxBAmoiAjYCDAwBCwtBAgwCCyAFDAELQQELIAQgACgCDDYCACAHIAAoAgg2AgAgAEEQaiQACz4BAn8jAEEQayIBJAAgASAANgIMIAFBCGogAUEMahCIAkEEQQFBlJYLKAIAKAIAGyECEIcCIAFBEGokACACCzoBAX8jAEEQayIFJAAgBSAENgIMIAVBCGogBUEMahCIAiAAIAEgAiADELMFIQAQhwIgBUEQaiQAIAALEgAgBCACNgIAIAcgBTYCAEEDC5gCAQJ/IwBBIGsiAiQAIAJCADcDGCACQgA3AxAgASABKAIMIgFBAWo2AgwgAiABNgIAIAJBEGoiASACEJkLIAEQISABEDhPBEAgAUEBENEBCyACQRBqIgMQISEBAkAgAxAlBEAgASADakEAOgAAIAIgAi0AH0EBajoAHyADECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgAigCECABakEAOgAAIAIgAigCFEEBajYCFAsCQCACQRBqECUEQCACQQA6AB8MAQsgAkEANgIUCyACQRBqIgMQJSEBIAAgAyACKAIQIAEbQQEQkAEhACACLQAfQf8BRgRAIAIoAhAQFwsgAEHsJUGYAkEBEC4aIAAQtgsgAkEgaiQACyoBAX8gAEGsuAc2AgACQCAAKAIIIgFFDQAgAC0ADEEBRw0AIAEQFwsgAAsEACABCzkBAn8gACgCLCEBA0AgAQRAIAEoAgQgARChCyEBDAEFIAAEQCAAQQA2AiQgACgCIBAXIAAQFwsLCwsnAQF/IAAoAgAoAgAoAgBB1LALQdSwCygCAEEBaiIANgIAIAA2AgQLywoBCH9B0LALLQAARQRAIwBBEGsiBSQAQciwCy0AAEUEQCMAQRBrIgYkACAGQQE2AgxBqK8LIAYoAgwQbSIBQZi4BzYCACMAQRBrIgMkACABQQhqIgJCADcCACADQQA2AgwgAkEIahCGC0EAOgB8IANBBGogAhCeAigCABogA0EAOgAKIwBBEGsiBCQAIAIQhQtBHkkEQBC/AQALIARBCGogAhCQA0EeEIQLIAIgBCgCCCIHNgIEIAIgBzYCACAEKAIMIQggAhCVBSAHIAhBAnRqNgIAIARBEGokACACQR4QqgsgA0EBOgAKIANBEGokACABQZABakGG2AEQmgQgAhDAAhogAhCpC0G8ugtBARBtQbTMBzYCACABQby6C0GArgsQbBBwQcS6C0EBEG1B1MwHNgIAIAFBxLoLQYiuCxBsEHBBzLoLQQEQbSICQQA6AAwgAkEANgIIIAJBrLgHNgIAIAJB4LgHNgIIIAFBzLoLQeCwCxBsEHBB3LoLQQEQbUGYxAc2AgAgAUHcugtB2LALEGwQcEHkugtBARBtQazFBzYCACABQeS6C0HosAsQbBBwQey6C0EBEG0iAkHowAc2AgAgAhBlNgIIIAFB7LoLQfCwCxBsEHBB+LoLQQEQbUHAxgc2AgAgAUH4ugtB+LALEGwQcEGAuwtBARBtQajIBzYCACABQYC7C0GIsQsQbBBwQYi7C0EBEG1BtMcHNgIAIAFBiLsLQYCxCxBsEHBBkLsLQQEQbUGcyQc2AgAgAUGQuwtBkLELEGwQcEGYuwtBARBtIgJBrtgAOwEIIAJBmMEHNgIAIAJBDGoQTBogAUGYuwtBmLELEGwQcEGwuwtBARBtIgJCroCAgMAFNwIIIAJBwMEHNgIAIAJBEGoQTBogAUGwuwtBoLELEGwQcEHMuwtBARBtQfTMBzYCACABQcy7C0GQrgsQbBBwQdS7C0EBEG1B6M4HNgIAIAFB1LsLQZiuCxBsEHBB3LsLQQEQbUG80Ac2AgAgAUHcuwtBoK4LEGwQcEHkuwtBARBtQaTSBzYCACABQeS7C0GorgsQbBBwQey7C0EBEG1B/NkHNgIAIAFB7LsLQdCuCxBsEHBB9LsLQQEQbUGQ2wc2AgAgAUH0uwtB2K4LEGwQcEH8uwtBARBtQYTcBzYCACABQfy7C0HgrgsQbBBwQYS8C0EBEG1B+NwHNgIAIAFBhLwLQeiuCxBsEHBBjLwLQQEQbUHs3Qc2AgAgAUGMvAtB8K4LEGwQcEGUvAtBARBtQZDfBzYCACABQZS8C0H4rgsQbBBwQZy8C0EBEG1BtOAHNgIAIAFBnLwLQYCvCxBsEHBBpLwLQQEQbUHY4Qc2AgAgAUGkvAtBiK8LEGwQcEGsvAtBARBtIgJBwOsHNgIIIAJB7NMHNgIAIAJBnNQHNgIIIAFBrLwLQbCuCxBsEHBBuLwLQQEQbSICQeTrBzYCCCACQfTVBzYCACACQaTWBzYCCCABQbi8C0G4rgsQbBBwQcS8C0EBEG0iAkEIahD8CiACQeDXBzYCACABQcS8C0HArgsQbBBwQdC8C0EBEG0iAkEIahD8CiACQfzYBzYCACABQdC8C0HIrgsQbBBwQdy8C0EBEG1B/OIHNgIAIAFB3LwLQZCvCxBsEHBB5LwLQQEQbUH04wc2AgAgAUHkvAtBmK8LEGwQcCAGQRBqJAAgBUGorws2AghBxLALIAUoAggQngIaQciwC0EBOgAACyAFQRBqJABBzLALQcSwCxClC0HQsAtBAToAAAsgAEHMsAsoAgAiADYCACAAEKQLCxEAIABBqK8LRwRAIAAQqAsLCxMAIAAgASgCACIANgIAIAAQpAsLtwYBBn8jAEEQayIJJAAgAiACKAIIIgVBAWo2AgggASgCECgCgAEgBTYCFCABKAIQKAKAASAFNgIYIAAgARBvIQgCQANAIAhFBEACQCADRQ0AIAEoAhAoAoABKAIMDQAgACACEJ4LIgAgARCLByACIAAQqwsLIAlBEGokAA8LAkAgASAIQVBBACAIKAIAQQNxIgVBAkcbaigCKCIHRgRAIAhBMEEAIAVBA0cbaigCKCEHIAgoAhAoAnwiBSgCAA0BIAVBfzYCAAwBCyAIKAIQKAJ8IgUoAgANACAFQQE2AgALAkACQCAHKAIQKAKAASIGKAIUIgVFBEAgBiABNgIIIARFDQICQCAEKAIEIgYgBCgCCEcEQCAEKAIAIQUMAQsCQCAJIAZBAXRBASAGGyIGQf////8DSwR/QcQABSAEKAIAIAZBAnQQPSIFDQFBMAsQowE2AgBB6PoGKAIAQbv0AyAJEB0aECYACyAFIAQoAggiCkECdGpBACAGIAprQQJ0EDMaIAQgBjYCCCAEIAU2AgAgBCgCBCEGCyAFIAZBAnRqIAg2AgAgBCAGQQFqNgIEQQAhBSAAIAcgAkEAIAQQpgsgASgCECgCgAEiBiAGKAIYIgYgBygCECgCgAEoAhgiCiAGIApIGzYCGCAHKAIQKAKAASgCGCABKAIQKAKAASgCFEgNAQNAIAQoAgQiBkUNBSAEKAIAIAZBAnRqQQRrKAIAIQcgBCAGQQFrNgIEIAdBUEEwIAcoAhAoAnwoAgBBAUYiBhtBACAHKAIAQQNxQQJBAyAGG0cbaigCKCIGKAIQKAKAASgCDEUEQCAFRQRAIAAgAhCeCyEFCyAFIAYQiwcLIAcgCEcNAAsgBUUNAQJAIAEoAhAoAoABKAIMDQAgBSgCCBA1QQJIDQAgBSABEIsHCwJAIANFDQAgASgCECgCgAEoAgwgBUcNACACIAUQqwsMAgsgAiAFELELDAELIAcgASgCECgCgAEiBigCCEYNACAGIAYoAhgiByAFIAUgB0obNgIYCyAAIAggARB0IQgMAQsLQYPPAUH9vAFBKUG8pgEQAAALQfmPA0H9vAFBKUH59AAQAAALnQEBBH8gAEGYuAc2AgAgAEEIaiEBA0AgARDAAiACSwRAIAEgAhCSAygCAARAIAEgAhCSAygCABCZBQsgAkEBaiECDAELCyAAQZABahAvGiMAQRBrIgIkACACQQxqIAEQngIiASgCACIDKAIABEAgAxCpCyABKAIAGiABKAIAEJADIAEoAgAiASgCACABEIELGhCACwsgAkEQaiQAIAALDwAgACAAKAIEQQFqNgIECwwAIAAgACgCABCCCwt7AQN/IwBBEGsiBCQAIARBBGoiAiAANgIAIAIgACgCBCIDNgIEIAIgAyABQQJ0ajYCCCACIgMoAgQhASACKAIIIQIDQCABIAJGBEAgAygCACADKAIENgIEIARBEGokAAUgABCQAxogARCDCyADIAFBBGoiATYCBAwBCwsLIQEBfyABIAAgACgCACICGyACIAEgAhs2AgQgACABNgIACyAAIABB6MAHNgIAIAAoAggQZUcEQCAAKAIIEO8LCyAACwQAQX8LpgEBA38jAEEQayIEJAAjAEEgayIDJAAgA0EYaiAAIAEQhwsgA0EQaiADKAIYIAMoAhwgAhCDDCADKAIQIQUjAEEQayIBJAAgASAANgIMIAFBDGoiACAFIAAQiQtrQQJ1EI0HIQAgAUEQaiQAIAMgADYCDCADIAIgAygCFBCYAzYCCCAEQQhqIANBDGogA0EIahD0ASADQSBqJAAgBCgCDCAEQRBqJAALgQYBCn8jAEEQayITJAAgAiAANgIAQQRBACAHGyEVIANBgARxIRYDQCAUQQRGBEAgDRAiQQFLBEAgEyANENQBNgIMIAIgE0EMakEBEI0HIA0Q5AIgAigCABCuCzYCAAsgA0GwAXEiA0EQRwRAIAEgA0EgRgR/IAIoAgAFIAALNgIACyATQRBqJAAFAkACQAJAAkACQAJAIAggFGotAAAOBQABAwIEBQsgASACKAIANgIADAQLIAEgAigCADYCACAGQSAQyAEhByACIAIoAgAiD0EEajYCACAPIAc2AgAMAwsgDRDvAQ0CIA1BABCgBSgCACEHIAIgAigCACIPQQRqNgIAIA8gBzYCAAwCCyAMEO8BIBZFcg0BIAIgDBDUASAMEOQCIAIoAgAQrgs2AgAMAQsgAigCACAEIBVqIgQhBwNAAkAgBSAHTQ0AIAZBwAAgBygCABD1AUUNACAHQQRqIQcMAQsLIA5BAEoEQCACKAIAIQ8gDiEQA0AgEEUgBCAHT3JFBEAgEEEBayEQIAdBBGsiBygCACERIAIgD0EEaiISNgIAIA8gETYCACASIQ8MAQsLAkAgEEUEQEEAIREMAQsgBkEwEMgBIREgAigCACEPCwNAIA9BBGohEiAQQQBKBEAgDyARNgIAIBBBAWshECASIQ8MAQsLIAIgEjYCACAPIAk2AgALAkAgBCAHRgRAIAZBMBDIASEPIAIgAigCACIQQQRqIgc2AgAgECAPNgIADAELIAsQ7wEEf0F/BSALQQAQPCwAAAshEUEAIQ9BACESA0AgBCAHRwRAAkAgDyARRwRAIA8hEAwBCyACIAIoAgAiEEEEajYCACAQIAo2AgBBACEQIAsQIiASQQFqIhJNBEAgDyERDAELIAsgEhA8LQAAQf8ARgRAQX8hEQwBCyALIBIQPCwAACERCyAHQQRrIgcoAgAhDyACIAIoAgAiGEEEajYCACAYIA82AgAgEEEBaiEPDAELCyACKAIAIQcLIAcQnQULIBRBAWohFAwBCwsL2QIBAX8jAEEQayIKJAAgCQJ/IAAEQCACELcLIQACQCABBEAgCkEEaiIBIAAQ4gIgAyAKKAIENgAAIAEgABDhAgwBCyAKQQRqIgEgABCaBSADIAooAgQ2AAAgASAAEPABCyAIIAEQnwIgARB1GiAEIAAQ7gE2AgAgBSAAEL4BNgIAIApBBGoiASAAEL0BIAYgARCwASABEC8aIAEgABDxASAHIAEQnwIgARB1GiAAEOACDAELIAIQtQshAAJAIAEEQCAKQQRqIgEgABDiAiADIAooAgQ2AAAgASAAEOECDAELIApBBGoiASAAEJoFIAMgCigCBDYAACABIAAQ8AELIAggARCfAiABEHUaIAQgABDuATYCACAFIAAQvgE2AgAgCkEEaiIBIAAQvQEgBiABELABIAEQLxogASAAEPEBIAcgARCfAiABEHUaIAAQ4AILNgIAIApBEGokAAsmAQF/IAFBADYCBCAAKAIEIgJBBGogACACGyABNgIAIAAgATYCBAujAQEDfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAAgARCHCyADQRBqIAMoAhggAygCHCACEIUMIAMoAhAhBSMAQRBrIgEkACABIAA2AgwgAUEMaiIAIAUgABCJC2sQjwchACABQRBqJAAgAyAANgIMIAMgAiADKAIUEJgDNgIIIARBCGogA0EMaiADQQhqEPQBIANBIGokACAEKAIMIARBEGokAAvWBQEKfyMAQRBrIhQkACACIAA2AgAgA0GABHEhFgNAIBVBBEYEQCANECJBAUsEQCAUIA0Q1AE2AgwgAiAUQQxqQQEQjwcgDRDmAiACKAIAELILNgIACyADQbABcSIDQRBHBEAgASADQSBGBH8gAigCAAUgAAs2AgALIBRBEGokAAUCQAJAAkACQAJAAkAgCCAVai0AAA4FAAEDAgQFCyABIAIoAgA2AgAMBAsgASACKAIANgIAIAZBIBCZASEPIAIgAigCACIQQQFqNgIAIBAgDzoAAAwDCyANEO8BDQIgDUEAEDwtAAAhDyACIAIoAgAiEEEBajYCACAQIA86AAAMAgsgDBDvASAWRXINASACIAwQ1AEgDBDmAiACKAIAELILNgIADAELIAIoAgAgBCAHaiIEIREDQAJAIAUgEU0NACAGQcAAIBEsAAAQ9gFFDQAgEUEBaiERDAELCyAOIg9BAEoEQANAIA9FIAQgEU9yRQRAIA9BAWshDyARQQFrIhEtAAAhECACIAIoAgAiEkEBajYCACASIBA6AAAMAQsLIA8EfyAGQTAQmQEFQQALIRIDQCACIAIoAgAiEEEBajYCACAPQQBKBEAgECASOgAAIA9BAWshDwwBCwsgECAJOgAACwJAIAQg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BQRAIAZBDWogBkEOahDICwsgAiABIAEgAigCABD8CyAGQQxqIAMgACgCABDxCyABajYCACAGQRBqJAALQgAgASACIAMgBEEEEKACIQEgAy0AAEEEcUUEQCAAIAFB0A9qIAFB7A5qIAEgAUHkAEkbIAFBxQBIG0HsDms2AgALC0AAIAIgAyAAQQhqIAAoAggoAgQRAgAiACAAQaACaiAFIARBABChBSAAayIAQZ8CTARAIAEgAEEMbUEMbzYCAAsLQAAgAiADIABBCGogACgCCCgCABECACIAIABBqAFqIAUgBEEAEKEFIABrIgBBpwFMBEAgASAAQQxtQQdvNgIACws1AQF/IAAoAhAiAS0AtQFBB0cEQCAAEK0BDwsgASgC6AEoAhAoAowCIAEoAvQBQQJ0aigCAAtCACABIAIgAyAEQQQQoQIhASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASRsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBECACIAIABBoAJqIAUgBEEAEKMFIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQIAIgAgAEGoAWogBSAEQQAQowUgAGsiAEGnAUwEQCABIABBDG1BB282AgALCwQAQQIL3gEBBX8jAEEQayIHJAAjAEEQayIDJAAgACEEAkAgAUH3////A00EQAJAIAEQlgUEQCAEIAEQygEMAQsgA0EIaiABEMcDQQFqEMYDIAMoAgwaIAQgAygCCCIAEPMBIAQgAygCDBDyASAEIAEQuAELIwBBEGsiBSQAIAUgAjYCDCAAIQIgASEGA0AgBgRAIAIgBSgCDDYCACAGQQFrIQYgAkEEaiECDAELCyAFQRBqJAAgA0EANgIEIAAgAUECdGogA0EEahDSASADQRBqJAAMAQsQvwEACyAHQRBqJAAgBAvABQEOfyMAQRBrIgskACAGEMABIQogC0EEaiAGEM4DIg4QvQEgBSADNgIAAkACQCAAIgctAAAiBkEraw4DAAEAAQsgCiAGwBDIASEGIAUgBSgCACIIQQRqNgIAIAggBjYCACAAQQFqIQcLAkACQCACIAciBmtBAUwNACAGLQAAQTBHDQAgBi0AAUEgckH4AEcNACAKQTAQyAEhCCAFIAUoAgAi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IAAgAxsLDgBBACAAIABBfxDEAhsLsAEBA38CQCABIAIQ/QshBCMAQRBrIgMkACAEQff///8HTQRAAkAgBBClBQRAIAAgBBDKASAAIQUMAQsgA0EIaiAEENMDQQFqENIDIAMoAgwaIAAgAygCCCIFEPMBIAAgAygCDBDyASAAIAQQuAELA0AgASACRwRAIAUgARDJASAFQQFqIQUgAUEBaiEBDAELCyADQQA6AAcgBSADQQdqEMkBIANBEGokAAwBCxC/AQALCw8AIAAgACgCGCABajYCGAsXACAAIAI2AhwgACABNgIUIAAgATYCGAuHAQEDfwJAIABFIAFFcg0AIABBMEEAIAAoAgBBA3EiA0EDRxtqKAIoIAFBMEEAIAEoAgBBA3EiBEEDRxtqKAIoRw0AIABBUEEAIANBAkcbaigCKCABQVBBACAEQQJHG2ooAihHDQAgACgCECgCYCABKAIQKAJgRw0AIAAgARCoBEEARyECCyACC1cBAn8CQCAAKAIAIgJFDQACfyACKAIYIgMgAigCHEYEQCACIAEgAigCACgCNBEAAAwBCyACIANBBGo2AhggAyABNgIAIAELQX8QxAJFDQAgAEEANgIACwsxAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEEajYCDCABKAIACycBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASgCAAurBAEIfyMAQeAAayICJAAgAkEANgJYIAJCADcDUCACQQA2AkggAkIANwNAQYiOCyAAQQJBk7EBQQAQHzYCAEGMjgsgAEECQb7uAEEAEB8iATYCACABQYiOCygCAHIEQCACQSRqIQYgAkE0aiEHIAAQGiEEA0AgBARAIAAgBBBvIQEDQCABBEACQCABQVBBACABKAIAQQNxIgNBAkcbaigCKCIFIAEgAUEwaiIIIANBA0YbKAIoRg0AAkACQCAEIAVHDQBBiI4LKAIAIgVFDQAgASAFED4iAy0AAA0BIAEoAgBBA3EhAwsgASAIIANBA0YbKAIoIARHDQFBjI4LKAIAIgNFDQEgASADED4iAy0AAEUNASACQUBrIAEgAxCADAwBCyACQdAAaiABIAMQgAwLIAAgASAEEHQhAQwBBUEAIQEDQCACKAJUIAFNBEAgAkHQAGoQowdBACEBA0AgAigCRCABTQRAIAJBQGsQowcgACAEEBshBAwHCyACQUBrIgMgARChBygCCEECTwRAIAJBIGogAyABEKAHIAIgBigCCDYCGCACIAYpAgA3AxAgBCACQRBqEIYMCyABQQFqIQEMAAsACyACQdAAaiIDIAEQoQcoAghBAk8EQCACQTBqIAMgARCgByACIAcoAgg2AgggAiAHKQIANwMAIAQgAhCGDAsgAUEBaiEBDAALAAsACwALCyACQdAAahD7CyACQUBrEPsLCyACQeAAaiQACycBAX8CQCAAKAIAIgJFDQAgAiABEJcMQX8QxAJFDQAgAEEANgIACwtTAQN/AkBBfyAAKAJMEMQCRQRAIAAoAkwhAAwBCyAAIwBBEGsiASQAIAFBDGoiAiAAEEsgAhDBAUEgEJkBIQAgAhBIIAFBEGokACAANgJMCyAAwAsaACAAIAEgASgCAEEMaygCAGooAhg2AgAgAAsLACAAQaCuCxClAgsJACAAEKUHEBcLPQEBfyAAKAIYIgIgACgCHEYEQCAAIAEQmgMgACgCACgCNBEAAA8LIAAgAkEBajYCGCACIAE6AAAgARCaAws0AQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBECAA8LIAAgAUEBajYCDCABLAAAEJoDCyoBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIkEQIADwsgASwAABCaAwsPACAAIAAoAgAoAhgRAgALCAAgACgCEEULBABBfwsIACAAEJ0HGgu+DwIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQogAkL///////8/gyELIAIgBIVCgICAgICAgICAf4MhDCAEQjCIp0H//wFxIQgCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAIQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIg1CgICAgICAwP//AFQgDUKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEMDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQwgAyEBDAILIAEgDUKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACEMDAMLIAxCgICAgICAwP//AIQhDEIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASANhFAEQEKAgICAgIDg//8AIAwgAiADhFAbIQxCACEBDAILIAIgA4RQBEAgDEKAgICAgIDA//8AhCEMQgAhAQwCCyANQv///////z9YBEAgBUHAAmogASALIAEgCyALUCIGG3kgBkEGdK18pyIGQQ9rELEBQRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQsQEgBiAHakEQayEGIAUpA7gCIQogBSkDsAIhAwsgBUGgAmogCkKAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQmgEgBUGQAmpCACAFKQOoAn1CACAEQgAQmgEgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQmgEgBUHwAWogBEIAQgAgBSkDiAJ9QgAQmgEgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQmgEgBUHQAWogBEIAQgAgBSkD6AF9QgAQmgEgBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQmgEgBUGwAWogBEIAQgAgBSkDyAF9QgAQmgEgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQmgEgBUGQAWogA0IPhkIAIAJCABCaASAFQfAAaiACQgBCACAFKQOoASAFKQOgASINIAUpA5gBfCIEIA1UrXwgBEIBVq18fUIAEJoBIAVBgAFqQgEgBH1CACACQgAQmgEgBiAJIAhraiEGAn8gBSkDcCITQgGGIg4gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgC0KAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiINQiCIIgogECAUVq0gDiAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig4gEVStIA4gDiATQv////8PgyITIAFCP4giFyALQgGGhEL/////D4MiC358Ig5WrXwgBCAQfnwgBCATfiIRIAsgEH58Ig8gEVStQiCGIA9CIIiEfCAOIA4gD0IghnwiDlatfCAOIA4gFEL/////D4MiFCALfiIRIAIgCn58Ig8gEVStIA8gDyATIA1C/v///w+DIhF+fCIPVq18fCIOVq18IA4gBCAUfiIYIBAgEX58IgQgAiALfnwiCyAKIBN+fCIQQiCIIAsgEFatIAQgGFStIAQgC1atfHxCIIaEfCIEIA5UrXwgBCAPIAIgEX4iAiAKIBR+fCIKQiCIIAIgClatQiCGhHwiAiAPVK0gAiAQQiCGfCACVK18fCICIARUrXwiBEL/////////AFgEQCAWIBeEIRUgBUHQAGogAiAEIAMgEhCaASABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhCaASABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEJsDIAVBMGogDSAVIAZB8ABqELEBIAVBIGogAyASIAUpA0AiAiAFKQNIIgoQmgEgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIg1UrX0hASAEIA19CyEEIAVBEGogAyASQgNCABCaASAFIAMgEkIFQgAQmgEgCiACIAIgAyAEIAJCAYMiBHwiA1QgASADIARUrXwiASASViABIBJRG618IgJWrXwiBCACIAIgBEKAgICAgIDA//8AVCADIAUpAxBWIAEgBSkDGCIEViABIARRG3GtfCICVq18IgQgAiAEQoCAgICAgMD//wBUIAMgBSkDAFYgASAFKQMIIgNWIAEgA1Ebca18IgEgAlStfCAMhCEMCyAAIAE3AwAgACAMNwMIIAVB0AJqJAALwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCAB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aiQAIANBkAFqJAAgDgv7AQEFfyABEBohAwNAIAMEQCABIAMQGyEEIAMoAhAtALUBBEAgASADELQBIAQhAwwCBUEBIQIDQAJAIAAoAhAiBSgCtAEiBiACSgR/IAUoArgBIAJBAnRqKAIAIAMQqwFFDQEgACgCECgCtAEFIAYLIAJKBEAgASADELQBCyADKAIQQQA2AugBIAQhAwwECyACQQFqIQIMAAsACwALCyABEBohAANAIAAEQCABEF4gABApIQIDQCACBEAgASACQVBBACACKAIAQQNxQQJHG2ooAigQqwEEQCABIAJBARDIAhoLIAEQXiACECwhAgwBCwsgASAAEBshAAwBCwsLQwACQCAARQ0AAkACQAJAAkAgAUECag4GAAECAgQDBAsgACACPAAADwsgACACPQEADwsgACACPgIADwsgACACNwMACwsPACAAIAEgAkEAQQAQrQcLvAIAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACAkKCAkBAgMECgkKCggJBQYHCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCyACIAIoAgAiAUEEajYCACAAIAEyAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEzAQA3AwAPCyACIAIoAgAiAUEEajYCACAAIAEwAAA3AwAPCyACIAIoAgAiAUEEajYCACAAIAExAAA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAErAwA5AwAPCyAAIAIgAxEEAAsPCyACIAIoAgAiAUEEajYCACAAIAE0AgA3AwAPCyACIAIoAgAiAUEEajYCACAAIAE1AgA3AwAPCyACIAIoAgBBB2pBeHEiAUEIajYCACAAIAEpAwA3AwALNwEBfyAAKAIEIQEDQCABQX9GBEAgAEEANgIEBSAAKAIAIAFBAnRqQQA2AgAgAUEBayEBDAELCwtvAQV/IAAoAgAiAywAAEEwayIBQQlLBEBBAA8LA0BBfyEEIAJBzJmz5gBNBEBBfyABIAJBCmwiBWogASAFQf////8Hc0sbIQQLIAAgA0EBaiIFNgIAIAMsAAEgBCECIAUhA0EwayIBQQpJDQALIAIL+RICEn8BfiMAQUBqIggkACAIIAE2AjwgCEEnaiEWIAhBKGohEQJAAkACQAJAA0BBACEHA0AgASENIAcgDkH/////B3NKDQIgByAOaiEOAkACQAJAAkAgASIHLQAAIgsEQANAAkACQCALQf8BcSIBRQRAIAchAQwBCyABQSVHDQEgByELA0AgCy0AAUElRwRAIAshAQwCCyAHQQFqIQcgCy0AAiALQQJqIgEhC0ElRg0ACwsgByANayIHIA5B/////wdzIhdKDQkgAARAIAAgDSAHEKIBCyAHDQcgCCABNgI8IAFBAWohB0F/IRACQCABLAABQTBrIgpBCUsNACABLQACQSRHDQAgAUEDaiEHQQEhEiAKIRALIAggBzYCPEEAIQwCQCAHLAAAIgtBIGsiAUEfSwRAIAchCgwBCyAHIQpBASABdCIBQYnRBHFFDQADQCAIIAdBAWoiCjYCPCABIAxyIQwgBywAASILQSBrIgFBIE8NASAKIQdBASABdCIBQYnRBHENAAsLAkAgC0EqRgRAAn8CQCAKLAABQTBrIgFBCUsNACAKLQACQSRHDQACfyAARQRAIAQgAUECdGpBCjYCAEEADAELIAMgAUEDdGooAgALIQ8gCkEDaiEBQQEMAQsgEg0GIApBAWohASAARQRAIAggATYCPEEAIRJBACEPDAMLIAIgAigCACIHQQRqNgIAIAcoAgAhD0EACyESIAggATYCPCAPQQBODQFBACAPayEPIAxBgMAAciEMDAELIAhBPGoQqQwiD0EASA0KIAgoAjwhAQtBACEHQX8hCQJ/QQAgAS0AAEEuRw0AGiABLQABQSpGBEACfwJAIAEsAAJBMGsiCkEJSw0AIAEtAANBJEcNACABQQRqIQECfyAARQRAIAQgCkECdGpBCjYCAEEADAELIAMgCkEDdGooAgALDAELIBINBiABQQJqIQFBACAARQ0AGiACIAIoAgAiCkEEajYCACAKKAIACyEJIAggATYCPCAJQQBODAELIAggAUEBajYCPCAIQTxqEKkMIQkgCCgCPCEBQQELIRMDQCAHIRRBHCEKIAEiGCwAACIHQfsAa0FGSQ0LIAFBAWohASAHIBRBOmxqQb+MB2otAAAiB0EBa0EISQ0ACyAIIAE2AjwCQCAHQRtHBEAgB0UNDCAQQQBOBEAgAEUEQCAEIBBBAnRqIAc2AgAMDAsgCCADIBBBA3RqKQMANwMwDAILIABFDQggCEEwaiAHIAIgBhCnDAwBCyAQQQBODQtBACEHIABFDQgLIAAtAABBIHENCyAMQf//e3EiCyAMIAxBgMAAcRshDEEAIRBB9RIhFSARIQoCQAJAAn8CQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIBgsAAAiB0FTcSAHIAdBD3FBA0YbIAcgFBsiB0HYAGsOIQQWFhYWFhYWFhAWCQYQEBAWBhYWFhYCBQMWFgoWARYWBAALAkAgB0HBAGsOBxAWCxYQEBAACyAHQdMARg0LDBULIAgpAzAhGUH1EgwFC0EAIQcCQAJAAkACQAJAAkACQCAUQf8BcQ4IAAECAwQcBQYcCyAIKAIwIA42AgAMGwsgCCgCMCAONgIADBoLIAgoAjAgDqw3AwAMGQsgCCgCMCAOOwEADBgLIAgoAjAgDjoAAAwXCyAIKAIwIA42AgAMFgsgCCgCMCAOrDcDAAwVC0EIIAkgCUEITRshCSAMQQhyIQxB+AAhBwsgESEBIAdBIHEhCyAIKQMwIhlQRQRAA0AgAUEBayIBIBmnQQ9xQdCQB2otAAAgC3I6AAAgGUIPViAZQgSIIRkNAAsLIAEhDSAMQQhxRSAIKQMwUHINAyAHQQR2QfUSaiEVQQIhEAwDCyARIQEgCCkDMCIZUEUEQANAIAFBAWsiASAZp0EHcUEwcjoAACAZQgdWIBlCA4ghGQ0ACwsgASENIAxBCHFFDQIgCSARIAFrIgFBAWogASAJSBshCQwCCyAIKQMwIhlCAFMEQCAIQgAgGX0iGTcDMEEBIRBB9RIMAQsgDEGAEHEEQEEBIRBB9hIMAQtB9xJB9RIgDEEBcSIQGwshFSAZIBEQ2AMhDQsgEyAJQQBIcQ0RIAxB//97cSAMIBMbIQwgCCkDMCIZQgBSIAlyRQRAIBEhDUEAIQkMDgsgCSAZUCARIA1raiIBIAEgCUgbIQkMDQsgCCkDMCEZDAsLIAgoAjAiAUHPnAMgARsiDUH/////ByAJIAlB/////wdPGxC2DCIBIA1qIQogCUEATgRAIAshDCABIQkMDAsgCyEMIAEhCSAKLQAADQ8MCwsgCCkDMCIZUEUNAUIAIRkMCQsgCQRAIAgoAjAMAgtBACEHIABBICAPQQAgDBCzAQwCCyAIQQA2AgwgCCAZPgIIIAggCEEIaiIHNgIwQX8hCSAHCyELQQAhBwNAAkAgCygCACINRQ0AIAhBBGogDRCiDCINQQBIDQ8gDSAJIAdrSw0AIAtBBGohCyAHIA1qIgcgCUkNAQsLQT0hCiAHQQBIDQwgAEEgIA8gByAMELMBIAdFBEBBACEHDAELQQAhCiAIKAIwIQsDQCALKAIAIg1FDQEgCEEEaiIJIA0QogwiDSAKaiIKIAdLDQEgACAJIA0QogEgC0EEaiELIAcgCksNAAsLIABBICAPIAcgDEGAwABzELMBIA8gByAHIA9IGyEHDAgLIBMgCUEASHENCUE9IQogACAIKwMwIA8gCSAMIAcgBRFEACIHQQBODQcMCgsgBy0AASELIAdBAWohBwwACwALIAANCSASRQ0DQQEhBwNAIAQgB0ECdGooAgAiAARAIAMgB0EDdGogACACIAYQpwxBASEOIAdBAWoiB0EKRw0BDAsLCyAHQQpPBEBBASEODAoLA0AgBCAHQQJ0aigCAA0BQQEhDiAHQQFqIgdBCkcNAAsMCQtBHCEKDAYLIAggGTwAJ0EBIQkgFiENIAshDAsgCSAKIA1rIgsgCSALShsiASAQQf////8Hc0oNA0E9IQogDyABIBBqIgkgCSAPSBsiByAXSg0EIABBICAHIAkgDBCzASAAIBUgEBCiASAAQTAgByAJIAxBgIAEcxCzASAAQTAgASALQQAQswEgACANIAsQogEgAEEgIAcgCSAMQYDAAHMQswEgCCgCPCEBDAELCwtBACEODAMLQT0hCgtB5JQLIAo2AgALQX8hDgsgCEFAayQAIA4LfwIBfwF+IAC9IgNCNIinQf8PcSICQf8PRwR8IAJFBEAgASAARAAAAAAAAAAAYQR/QQAFIABEAAAAAAAA8EOiIAEQqwwhACABKAIAQUBqCzYCACAADwsgASACQf4HazYCACADQv////////+HgH+DQoCAgICAgIDwP4S/BSAACwuEAQECfyMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAgPIDSQ0BIABEAAAAAAAAAABBABCtDCEADAELIAJBgIDA/wdPBEAgACAAoSEADAELIAAgARC9ByECIAErAwAgASsDCCACQQFxEK0MIQALIAFBEGokACAAC58DAwJ8AX4CfyAAvSIFQoCAgICA/////wCDQoGAgIDwhOXyP1QiBkUEQEQYLURU+yHpPyAAmaFEB1wUMyamgTwgASABmiAFQgBZ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ACAFQTBqIAEgAkIAQgAQZyAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ggBkEBayEGIARCAYYhBCAJQgGGhCIJQoCAgICAgMAAVA0ACwsgCEGAgAJxIQcgBkEATARAIAVBQGsgBCAJQv///////z+DIAZB+ABqIAdyrUIwhoRCAEKAgICAgIDAwz8QZyAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQZyAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABBnQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORBnIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORBnQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhBnIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAtqAQJ/IAAoAhAiASABKAKIAigCECgC9AEiAiABKALoAWo2AugBIAEgAiABKALsAWo2AuwBQQEhAgNAIAIgASgCtAFKRQRAIAEoArgBIAJBAnRqKAIAELQMIAJBAWohAiAAKAIQIQEMAQsLCzwAIAAgATcDACAAIAJC////////P4MgAkKAgICAgIDA//8Ag0IwiKcgA0IwiKdBgIACcXKtQjCGhDcDCAsXAQF/IABBACABEKADIgIgAGsgASACGwvfAgEEfyABEHIhAwNAIAMEQEEHIQQCQAJAIAMQzgFFBEAgA0GO9AAQI0HQ9QdB8PUHEIgIIQQgAygCECAEOgCSAiAERQ0BCwJAIARBB0cNAEGkiwsoAgBB5ABHDQAgACADEK4MDAILIAMQGiICRQ0BIAQhBSACIQEDQCABKAIQIAU6ALUBIAMgARAbIgEEQCACIAEQ4gUaIAIoAhAtALUBIQUMAQsLAkACQAJA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QQAgASgCAEEDcUEDRxtqKAIoIgIQrQEgAkYEQCABEMEHIAMoAhAhAQwBCwtB2KEDQe26AUHUAkGaMBAAAAsgAEEAEK8IQQAhAgNAIAAoAhAiASgC3AEgAksEQCABIAEoAtgBIAJBAnRqKAIAIgE2AsABIAEhAwNAIAMEQCADKAIQIgNBADYCsAEgAygCuAEhAwwBCwsDQCABBEAgARDUDCABKAIQKAK4ASEBDAELCyACQQFqIQIMAQsLAkAgACgCECIBKALkAUUEQCABKALgAUUNAQsgABAaIQFBACEDA0AgAQRAAkAgARCtASABRw0AAkAgASgCECICKALMAQ0AIAAoAhAoAuQBIgRFIAEgBEZyDQAgASAEQQAQ2wEiAygCECICQQA2ApwBIAIgCjYCrAEgASgCECECCyACKALEAQ0AIAAoAhAoAuABIgJFIAEgAkZyDQAgAiABQQAQ2wEiAygCECICQQA2ApwBIAIgCzYCrAELIAAgARAbIQEMAQsLIANFDQAgAEEAEK8ICyAAQf3oAhAjIgEEfyAAEDUgARCoAhDRDAVB/////wcLIQJBACEBA0AgASAAKAIQIgMoAtwBSQRAIAMgAygC2AEgAUECdGooAgA2AsABIAAgAygCtAFFIAIQrwMaIAFBAWohAQwBCwsgABAaIQEgACgCECEDAkAgAQRAIANC/////3c3A+gBA0AgAQRAAkAgASABEK0BIgJGBEAgASgCECIDKAL0ASECDAELIAEoAhAiAyADKAL0ASACKAIQKAL0AWoiAjYC9AELIAIgACgCECIEKALsAUoEQCAEIAI2AuwBCyACIAQoAugBSARAIAQgAjYC6AELIAMtALUBIgNFIANBBkZyRQRAIAEQug4LIAAgARAbIQEMAQsLIAAQXiAARw0BQaSLCygCAEHkAEYEQEEBIQEDQCABIAAoAhAiAygCtAFKDQMgAygCuAEgAUECdGooAgAQtAwgAUEBaiEBDAALAAsgABBeEHIhAQNAIAFFDQIgASgCEC0AkgJBB0YEQCAAIAEQrgwLIAEQcSEBDAALAAsgA0IANwPoAQtBACECA38gACgCECIBKALcASACTQR/IAAQGgUgASABKALYASACQQJ0aigCACIBNgLAAQNAIAEEQCABKAIQQcABahCoDCABKAIQQcgBahCoDCABKAIQIgFBADYC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LQACIQACfyABLAADIgFFBEAgACAGai0AAAwBCyABIADAECgLQf8BcSIAQR5LQQEgAHRBgJzAgQRxRXINAUEbDwsgBCABNgIAC0EADwsgAUECaiECDAELC0F+C3IBAX8Cf0EAIAEoAhAiAS0ArAFBAUcNABogASgCkAIoAgAhAgNAIAIiASgCECgCeCICDQALQQAgACABQTBBACABKAIAQQNxQQNHG2ooAigQqwENABogACABQVBBACABKAIAQQNxQQJHG2ooAigQqwFFCwsEAEEAC4EBAQJ/IAJBCzYCAEEBIQMCQCABIABrQQNHDQAgAC0AACIBQfgARgR/QQAFIAFB2ABHDQFBAQshASAALQABIgRB7QBHBEAgBEHNAEcNAUEBIQELIAAtAAIiAEHsAEcEQCAAQcwARw0BQQAPC0EAIQMgAQ0AIAJBDDYCAEEBIQMLIAML5AMBBX9BASEEAkAgAiABayIFQQBMDQACQAJAAkACQAJAAkACQAJAIABByABqIgggAS0AAGotAAAiB0EFaw4UAgMEBgEBBgYGBgYGBgYGBgEFBgUACyAHQR5HDQULQRYhBgwECyAFQQFGDQQgACABIAAoAuACEQAADQMgACABIAAoAtQCEQAARQ0DQQIhBAwCCyAFQQNJDQMgACABIAAoAuQCEQAADQIgACABIAAoAtgCEQAARQ0CQQMhBAwBCyAFQQRJDQIgACABIAAoAugCEQAADQEgACABIAAoAtwCEQAARQ0BQQQhBAsgASAEaiEBA0AgAiABayIFQQBMDQNBASEEAkACQAJAIAggAS0AAGotAAAiB0ESaw4KAgQEBAEEAQEBAQALAkACQAJAIAdBBWsOAwABAgYLIAVBAUYNBiAAIAEgACgC4AIRAAANBSAAIAEgACgCyAIRAABFDQVBAiEEDAILIAVBA0kNBSAAIAEgACgC5AIRAAANBCAAIAEgACgCzAIRAABFDQRBAyEEDAELIAVBBEkNBCAAIAEgACgC6AIRAAANAyAAIAEgACgC0AIRAABFDQNBBCEECyABIARqIQEMAQsLIAFBAWohAUEcIQYLIAMgATYCACAGDwtBfg8LQX8LtAYBB38jAEEQayIHJABBASEFQX8hCAJAIAIgAWsiBEEATA0AAkACQAJAAkACQAJAAkACQCAAQcgAaiIKIAEtAABqLQAAIgZB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ECIDKAK0AUpFBEAgAygCuAEgBEECdGooAgAgASACEO8MIARBAWohBAwBCwsgAyADKwMQIAGiOQMQIAMgAysDGCACojkDGCADIAMrAyAgAaI5AyAgAyADKwMoIAKiOQMoCzsBAX9BASEEAkAgAEEBIAAoApwBIAEgAiADIAAtAOwDRUEBEKsEIgFFBEAgABDIB0UNAQsgASEECyAEC+IEAgh/BHxBASECA0AgAiAAKAIQIgMoArQBSkUEQCADKAK4ASACQQJ0aigCACABEPEMIAJBAWohAgwBCwsgABBeIQIgACgCECEDAkAgACACRgRAIAMoAuwBIQVEAADA////38EhCkQAAMD////fQSELIAMoAugBIgghBANAIAQgBUoEQCADKAK0ASIAQQAgAEEAShtBAWohAEEBIQIDQCAAIAJGDQQgCiADKAK4ASACQQJ0aigCACgCECIEKwMgRAAAAAAAACBAoCIMIAogDGQbIQogCyAEKwMQRAAAAAAAACDAoCIMIAsgDGMbIQsgAkEBaiECDAALAAUCQCADKALEASAEQQZ0aiIAKAIAIgZFDQBBASECIAAoAgQiBygCACIARQ0AA0AgACgCECIALQCsASIJRSACIAZOckUEQCAHIAJBAnRqKAIAIQAgAkEBaiECDAELCyAJDQAgBkECayECIAArAxAgACsDWKEhDCAHIAZBAnRqQQRrIQADQCAAKAIAKAIQIgAtAKwBBEAgByACQQJ0aiEAIAJBAWshAgwBCwsgCiAAKwMQIAArA2CgIg0gCiANZBshCiALIAwgCyAMYxshCwsgBEEBaiEEDAELAAsACyADKALoASEIIAMoAuwBIQUgAygChAIoAhAoAvQBtyEKIAMoAoACKAIQKAL0AbchCwsgASgCECgCxAEiACAFQQZ0aigCBCgCACgCECsDGCEMIAAgCEEGdGooAgQoAgAoAhArAxghDSADIAo5AyAgAyALOQMQIAMgDSADKwOAAaA5AyggAyAMIAMrA3ihOQMYC6UFAQZ/IwBBEGsiByQAIAcgAigCACIINgIMAn8gASAAKAKcAUYEQCAAIAg2AqgCIABBqAJqIQogAEGsAmoMAQsgACgCtAIiCkEEagshDCAKIAg2AgAgAkEANgIAAkACQANAIAcgBygCDCIINgIIIAAgASAIIAMgB0EIaiABKAIIEQYA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eCADIAApAwA3A3AgAyABKQMINwNoIAMgASkDADcDYCADQeABaiADQfAAaiADQeAAahC2AwJAIAUgAysD4AFmRQ0AIAMgACkDCDcDWCADIAApAwA3A1AgAyABKQMINwNIIAMgASkDADcDQCADQcABaiADQdAAaiADQUBrELYDIAMrA9ABIAIrAwBmRQ0AIAIrAxggAyAAKQMINwM4IAMgACkDADcDMCADIAEpAwg3AyggAyABKQMANwMgIANBoAFqIANBMGogA0EgahC2AyADKwOoAWZFDQAgAyAAKQMINwMYIAMgACkDADcDECADIAEpAwg3AwggAyABKQMANwMAIANBgAFqIANBEGogAxC2AyADKwOYASACKwMIZiEECyADQYACaiQAIAQLagICfAF/AkAgASsDECAAKwA4IgIgACsDGEQAAAAAAADgP6IiA6FmRQ0AIAErAwAgAyACoGVFDQAgASsDGCAAKwBAIgIgACsDIEQAAAAAAADgP6IiA6FmRQ0AIAErAwggAyACoGUhBAsgBAv7AgEGfyMAQRBrIgYkAAJAAkACQCAAKAIAIgMtAABBI0YEQCADLQABIgJB3wFxQdgARgRAQQIhAQNAIAFBCEYNAwJAIAEgA2otAAAiAkHBAGtB/wFxQQZJBEBBSSEFDAELIAJB4QBrQf8BcUEGSQRAQal/IQUMAQtBUCEFIAJBMGtB/wFxQQlLDQULIAIgBWoiAiAEQQR0aiEEIAFBAWohAQwACwALQQEhAQNAIAFBCEYNAiABIANqLQAAIgJBMGtB/wFxQQlLDQMgAUEBaiEBIARBCmwgAmpBMGshBAwACwALIAYgAzYCCANAIAYgATYCDCABQQhGDQMgASADaiIFLQAAIgJFBEAgAiEEDAQLIAJBO0YEQCAGQQhqQbDqBUH8AUEIQcQCEOEDIgJFDQQgBUEBaiEDIAIoAgQhBAwEBSABQQFqIQEMAQsACwALQQghAQsgAkE7RwRAQQAhBAwBCyABIANqQQFqIQMLIAAgAzYCACAGQRBqJAAgBAtjAQN/IwBBEGsiAiQAIAJBADoADyACIAA6AA4gAkEOahC7BCIEEDchACAEIQMDQCAAQQJJRQRAIAEgAywAABCeASADQQFqIQMgAEEBayEADAELCyADLQAAIAQQFyACQRBqJAALlAQBBn8jAEHwAGsiAiQA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BEQAAAAAAADgv6KgDAELIAErAxggASsDKKBEAAAAAAAA4D+iCyEEIAJBAToAUSACIAQ5A0AgAiAFOQM4C0EBIQEDQCABIAAoAhAiAigCtAFKRQRAIAIoArgBIAFBAnRqKAIAEOUOIAFBAWohAQwBCwsLogMCA38EfCMAQbABayICJAAgAkGgAWogACgCECIDKwMoIQYgAysDICEHIAMrAxghBSADKwMQIQgCfyABQQFrQQFNBEAgAiAGOQOIASACIAIpA4gBNwMoIAIgCDkDgAEgAiACKQOAATcDICACQZABaiACQSBqEOgBIAIgBzkDcCACQfAAagwBCyACIAU5A2ggAiACKQNoNwM4IAIgCDkDYCACIAIpA2A3AzAgAkGQAWogAkEwahDoASACIAc5A1AgBiEFIAJB0ABqCyIDQQhqIAU5AwAgAiADKQMINwMYIAIgAykDADcDECACQRBqEOgBIAAoAhAiAyACKQOQATcDECADIAIpA6gBNwMoIAMgAikDoAE3AyAgAyACKQOYATcDGCAAKAIQKAIMIgMEQCACIANBQGsiBCkDADcDCCACIAMpAzg3AwAgAkFAayACEOgBIAQgAikDSDcDACADIAIpA0A3AzgLQQEhAwNAIAMgACgCECIEKAK0AUpFBEAgBCgCuAEgA0ECdGooAgAgARDmDiADQQFqIQMMAQsLIAJBsAFqJAALSAECfyAAEIcBQRAQGCECIAAQiAEhACACIQEDQCAABEAgASAAKQMINwMAIAEgACkDEDcDCCABQRBqIQEgACgCACEADAELCyACCzQBAX9BGBBNIgIgASkDCDcDECACIAEpAwA3AwggACACQQEgACgCABEDACACRwRAIAIQFwsLIwEBfyMAQRBrIgEkACAAIAFBDmogAUEPahDsDiABQRBqJAALsQMCA38EfCMAQeAAayIFJAAgBUIANwNYIAVCADcDUCAAKAIQIgYrAxAhCgJ8QdiLCy0AAEEBRgRAQciQCysDACIJIAYrAyihIQggCSAGKwMYoQwBCyAGKwMoIQggBisDGAshCSAGKwMgIQsgBSAIOQNIIAVBQGsgCzkDACAFIAk5AzggBSAKOQMwIAVB0ABqIgdB1oMBIAVBMGoQVCAAIAEgBxCfARBoAkAgACgCECgCDCIGRQ0AIAYoAgAtAABFDQAgBisDQCEIIAUg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DAELIAIgA8AQngEgAiAELAABIgMQngEgA0UNASAEQQJqCyIELQAAIQMMAQsLIAIQIQRAIAAgASACELIDQe4AEKsICyACLQAPQf8BRgRAIAIoAgAQFwsgASABQRhqIgApAwA3AyggASAAKQMINwMwCyACQRBqJAALogIBBX8gACgCECgCwAEhAwNAIAMiASgCECgCuAEiAwRAIAAgASADQQBBABBSDQEgACABIANBAEEBEFIiBEH5JUG4AUEBEC4aIAQoAhBBADYCrAEgASgCECICKALIASACKALMASICQQFqIAJBAmpBBBBgIQUgASgCECICIAU2AsgBIAIgAigCzAEiAkEBajYCzAEgBSACQQJ0aiAENgIAIAEoAhAiASgCyAEgASgCzAFBAnRqQQA2AgAgAygCECIBKALAASABKALEASIBQQFqIAFBAmpBBBBgIQIgAygCECIBIAI2AsABIAEgASgCxAEiAUEBajYCxAEgAiABQQJ0aiAENgIAIAMoAhAiASgCwAEgASgCxAFBAnRqQQA2AgAMAQsLC9oCAQJ/IANEAADA////30FkIQVB/////wcCf0QAAAAAAADgwSADIANEAAAAAAAA4MFlGyIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsgBRshBCAAIAEgAkEAQQAQUiIFBEAgBSgCECIAIAAoAqwBIgAgBCAAIARKGzYCrAEPCyAAIAEgAkEAQQEQUiIAQfklQbgBQQEQLhogACgCECAENgKsASABKAIQIgQoAsgBIAQoAswBIgRBAWogBEECakEEEGAhBCABKAIQIgEgBDYCyAEgASABKALMASIBQQFqIgU2AswBIAQgAUECdGogADYCACAEIAVBAnRqQQA2AgAgAigCECIBKALAASABKALEASIBQQFqIAFBAmpBBBBgIQEgAigCECICIAE2AsABIAIgAigCxAEiAkEBaiIENgLEASABIAJBAnRqIAA2AgAgASAEQQJ0akEANgIAC/AHAgl/CXwjAEHwAGsiAyQAIANCADcDMCADQgA3AyggA0IANwMgIANCADcDGCABKAIEIQREAAAAAAAA8L8hDQNAAkAgBCAHRg0AIAEoAgAgB0EFdGoiBigCBEEBSw0AAkACQCAGKAIAKAIEIgYEQCAGLQAYQf8AcQ0DIAYrAxAiDEQAAAAAAAAAAGRFBEAgAisDICEMCyADIAw5AyggBigCACIGRQ0BDAILIAMgAisDICIMOQMoCyACKAIQIQYLIAMgBjYCGAJAIAdFBEAgDCENDAELIAwgDWINAQsCQCAFRQRAIAYhBQwBCyAGIAUQQw0BCyAHQQFqIQcMAQsLIAEgBCAHTSIKOgAIQQAhBkQAAAAAAAAAACENA0AgBCAGTUUEQCABKAIAIQVBACEHRAAAAAAAAAAAIQwgBkEFdCEIRAAAAAAAAAAAIQ9EAAAAAAAAAAAhEEQAAAAAAAAAACENAkACQANAIAUgCGoiBCgCBCAHTQRAAkAgBCAPOQMQIApFDQMgBg0AIAUgDDkDGCANIQwMBAsFIAMgB0E4bCIJIAQoAgBqKAIAIAIoAjAQgAE2AjgCQCABKAIAIAhqIgQoAgAgCWooAgQiBQRAIAMgBSgCGEH/AHEiBQR/IAUFIAIoAihB/wBxCyADKAIwQYB/cXI2AjAgAyAEKAIAIAlqKAIEIgQrAxAiDkQAAAAAAAAAAGQEfCAOBSACKwMgCzkDKCADIAQoAgAiBQR/IAUFIAIoAhALNgIYIAQoAgQiBQRAIAMgBTYCHAwCCyADIAIoAhQ2AhwMAQsgAyACKwMgOQMoIAMgAigCEDYCGCADIAIoAhQ2AhwgAyADKAIwQYB/cSACKAIoQf8AcXI2AjALIAMgACgCiAEiBSADQRhqQQEgBSgCABEDADYCPCADQQhqIAAgA0E4ahCLCCADKwMQIQ4gAysDCCEUIAEoAgAgCGooAgAgCWooAgAQFyADKAI4IQsgASgCACIFIAhqKAIAIAlqIgQgFDkDICAEIAs2AgAgBCADKwNIOQMQIAQgAysDUDkDGCAEIAMoAjw2AgQgBCADKAJANgIIIAQgAygCRDYCDCAOIA0gDSAOYxshDSADKwNQIg4gECAOIBBkGyEQIAMrAygiDiAMIAwgDmMbIQwgB0EBaiEHIA8gFKAhDwwBCwsgBCANOQMYIA0hDAwBCyAGRQRAIAUgDCAQoTkDGAwBCyAEIBEgDKAgE6EgEKE5AxgLIA8gEiAPIBJkGyESIAZBAWohBiARIAygIREgEyAEKwMYoCETIAEoAgQhBAwBCwsgASASOQMgIAEgDSARIARBAUYbOQMoIANB8ABqJAAL1gMBA39BASEEA0AgBCAAKAIQIgUoArQBSkUEQCAFKAK4ASAEQQJ0aigCACABIAIgAxD/DiEDIARBAWohBAwBCwsCQCAAEF4gAEYNACABQQAgAkECdBAzIQUgABAaIQIDQCACBEAgBSACKAIQKAL0AUECdGpBATYCACAAIAIQKSEBA0AgAQRAIAFBKGohBiACKAIQKAL0ASEEA0AgBCAGQVBBACABKAIAQQNxQQJHG2ooAgAoAhAoAvQBTkUEQCAFIARBAWoiBEECdGpBATYCAAwBCwsgACABECwhAQwBCwsgACACEBshAgwBCwsgACgCECIBKALoASEEA0AgBCABKALsAUoNASAFIARBAnRqKAIARQRAIANFBEAgABBeQejzAEEBEJABIQMLIANBAEEBEHMiAkGGJkHAAkEBEC4aIAIoAhAiAUKAgICAgICA8D83A2AgASAENgL0ASABQoCAgICAgIDwPzcDWCABQQE2AuwBIAFCgICAgICAgPg/NwNQIAFBADYCxAFBBUEEEBghASACKAIQIgZBADYCzAEgBiABNgLAAUEFQQQQGCEBIAIoAhAgATYCyAEgACACQQEQexogACgCECEBCyAEQQFqIQQMAAsACyADC+oPAgh/B3wjAEFAaiIEJAAgACgCVCEJAkAgACgCUCIDRQ0AIAMoAhgiA0UNACAAKAIYDQAgACADEGE2AhgLIAAvASQhAyABKwMAIQ4gASsDECENIAArA0AhCyABKwMYIg8gASsDCCIQoSAAKwNIIhGhRAAAAAAAAAAAECQhDCANIA6hIAuhRAAAAAAAAAAAECQhCwJAIANBAXFFDQAgC0QAAAAAAAAAAGQEQAJAAkACQAJAIANBBnFBAmsOAwECAAILIAEgDiARoDkDEAwCCyABIA4gC6AiDjkDACABIA0gC6A5AxAMAQsgASANIAtEAAAAAAAA4D+iIguhOQMQIAEgDiALoCIOOQMAC0QAAAAAAAAAACELCyAMRAAAAAAAAAAAZEUNACABAnwCQCADQRhxIgNBCEcEQCADQRBHDQEgESAQoAwCCyABIBAgDKAiDDkDCCARIAygDAELIAEgECAMRAAAAAAAAOA/oiIMoDkDCCAPIAyhCyIPOQMYRAAAAAAAAAAAIQwLAn8gCyALIAAoAmgiA7giC6MiDSALoqEiC0QAAAAAAADgP0QAAAAAAADgvyALRAAAAAAAAAAAZhugIguZRAAAAAAA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iAEhAANAIABFDQIgAyACQThsaiAAQQhqQTgQIBogAkEBaiECIAAoAgAhAAwACwALQTgQTSEAIAFBATYCDCABIAA2AghB5fQEEKQBIgJFDQEgACACNgIAIABBnI8LKAIAKAIANgIECyAFQQBBwAAgBSgCABEDABpBlI8LKAIAIgAgAUEBIAAoAgARAwAaIARBEGokAA8LIARBATYCAEHo+gYoAgBBqd0DIAQQHRoQJgAL0QIBBX8jAEEQayIEJAACQAJAIAAQISAAEDhPBEAgABA4IgNBAWoiASADQQF0QYAIIAMbIgIgASACSxshASAAECEhBQJAIAAtAA9B/wFGBEAgA0F/Rg0DIAAoAgAhAiABRQRAIAIQF0EAIQIMAgsgAiABED0iAkUNBCABIANNDQEgAiADakEAIAEgA2sQMxoMAQsgAUEBEBgiAiAAIAUQIBogACAFNgIECyAAQf8BOgAPIAAgATYCCCAAIAI2AgALIAAQISEBAkAgABAlBEAgACABakEAOgAAIAAgAC0AD0EBajoADyAAECFBEEkNAUG/rgNBj/0AQYgCQbiyARAAAAsgACgCACABakEAOgAAIAAgACgCBEEBajYCBAsgBEEQaiQADwtBkbQDQd79AEHNAEGTswEQAAALIAQgATYCAEHo+gYoAgBBqd0DIAQQHRoQJgALuwEBBn9BlI8LKAIAIQFBMBBNIQJBkI8LKAIAEIcBBEBBABCRDwsgAiABEIcBIgA2AgQCQCAARQ0AIAIgAEEgEBgiBTYCACABQQBBgAEgASgCABEDACEAA0AgAEUNASAFIANBBXRqIgQgACkDCDcDACAEIAApAyA3AxggBCAAKQMYNwMQIAQgACkDEDcDCCADQQFqIQMgASAAQQggASgCABEDACEADAALAAsgAUEAQcAAIAEoAgARAwAaIAILGAEBf0EIEE0iAiAANgIAIAIgAToABCACC+oBAQR/IwBBEGsiBCQAIAEoAhBBxM4KKAIAQQFqNgKwASAABEACQCAAKAIEIgIgACgCCEcEQCAAKAIAIQMMAQsCQCAEIAJBAXRBASACGyICQf////8DSwR/QcQABSAAKAIAIAJBAnQQPSIDDQFBMAsQowE2AgBB6PoGKAIAQbv0AyAEEB0aECYACyADIAAoAggiBUECdGpBACACIAVrQQJ0EDMaIAAgAjYC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ajYCHAsCQAJAAkACQCAJQQFxBEAgABCXBiABEBohAgNAIAIEQCAAIAIQ7QMgASACEBshAgwBCwsgABCWBiAAEJUGIAEQGiEDA0AgA0UNAiABIAMQKSECA0AgAgRAIAAgAhDKBCABIAIQLCECDAELCyABIAMQGyEDDAALAAsgCUEQcQRAIAAQlQYgARAaIQMDQCADBEAgASADECkhAgNAIAIEQCAAIAIQygQgASACECwhAgwBCwsgASADEBshAwwBCwsgABDpCCAAEJcGIAEQGiECA0AgAkUNBCAAIAIQ7QMgASACEBshAgwACwALIAlBCHFFDQEgABCXBiABEBohBQNAQQEhAiAFBEACQANAIAEoAhAiAygCtAEgAk4EQCACQQJ0IAJBAWohAiADKAK4AWooAgAgBRCrAUUNAQwCCwsgACAFEO0DCyABIAUQGyEFDAELCyAAEJYGIAAQlQYgARAaIQYDQCAGRQ0BIAEgBhApIQUDQEEBIQIgBQRAAkADQCABKAIQIgMoArQBIAJOBEAgAkECdCACQQFqIQIgAygCuAFqKAIAIAUQqwFFDQEMAgsLIAAgBRDKBAsgASAFECwhBQwBCwsgASAGEBshBgwACwALIAAQ6QgMAgsgARAaIQMDQCADRQ0CIAAgAxDtAyABIAMQKSECA0AgAgRAIAAgAkFQQQAgAigCAEEDcUECRxtqKAIoEO0DIAAgAhDKBCABIAIQLCECDAELCyABIAMQGyEDDAALAAsgABCWBgsgEARAIAAgASAJEPgFCwJAIAAoAjwiAkUNACACKAIcIgJFDQAgACACEQEACyALBEAgByALNgLcAQsgBEGgAWoQZiAPEM4CEBcgDxAXIAAgACgAxAEgACgAvAFqIgKtIAAoAMgBIAAoAMABaiIDrUIghoQ3AsQBIAAQqA8NAAJAIAAoArgBIgUEQCAAKAKsASECDAELIAAoArABIQMLIAAgACgAtAEgAmoiAq0gAyAFaq1CIIaENwLEAQwACwALCwJAIAAoAjwiAUUNACABKAIMIgFFDQAgACABEQEACwJAIAAoAkwiAUUNACABKAIEIgFFDQAgACABEQEACyAAEJkGGiAAEPEDIARB4AFqJAALywECAX8CfCMAQeAAayIBJAAgASAAKQMINwNYIAEgACkDADcDUCABIAApAzg3A0ggASAAKQMw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IABBm9AEIANB8ABqEBwgA0KAgICAgICA+D83A2AgAyAIOQNYIAMgBTkDUCAAQZPGBCADQdAAahAcIANBQGsgACgC6AKyuzkDACADQgA3AzggA0IANwMwIABB78UEIANBMGoQHCADQdiHCygCADYCICADIAY5AxAgAyAHOQMYIABBjscEIANBEGoQHCADIAE2AgAgAEHjwAMgAxAcIAEQFwsgA0HgAmoQZiADQfACaiQAC+gDAgN/BnwjAEHQAWsiAyQAIAIoAgAhBCACKAIEIgUrAxAhBiADIAUoAgA2ArABIAMgBjkDqAEgAyAENgKgASAAQc7xAyADQaABahAcQdiHC0HUhwsoAgBBCWs2AgACfCABKwMAIgYgAi0AMCIEQewARg0AGiAEQfIARgRAIAYgAisDIKEMAQsgBiACKwMgRAAAAAAAAOC/oqALIQYgACsD8AMhByAAKwOABCEIIAErAwghCSAAKwPoAyEKIAArA/gDIQsgA0H4AGoiASAAKAIQQRBqQSgQIBogAUMAAAAAEIYDIQEgA0IANwPIASADQgA3A8ABIAIoAgQoAgAhBCACKAIAIQUgA0IANwNwIANCgICAgICAgOg/NwNoIAMgBTYCZCADIAQ2AmAgA0HAAWoiBEGNzwMgA0HgAGoQVCADIAIoAgQrAxAgACsD6AOiOQNQIARBxpgEIANB0ABqEFQgA0FAayAAKALoArK7OQMAIANCADcDOCADQgA3AzAgBEHvxQQgA0EwahBUIANB2IcLKAIANgIgIAMgCiAGIAugojkDECADIAcgCSAIoKI5AxggBEGOxwQgA0EQahBUIAMgATYCACAEQePAAyADEFQgACAEEOAEEBkaIAQQZiABEBcgA0HQAWokAAscACAAQeOkBBAZGkHUhwtB1IcLKAIAQQVqNgIACxwAIABB0aQEEBkaQdSHC0HUhwsoAgBBBWs2AgALCQAgACABELUNCwsAIABB/KYEEBkaCy0BAX8jAEEQayIBJAAgASAAKAIQKAIIEB42AgAgAEGl9AMgARAcIAFBEGokAAsLACAAQc36AxAZGgscACAAQbj6AxAZGkHUhwtB1IcLKAIAQQJrNgIACwsAIABBsqYEEBkaCwsAIABBoKYEEBkaCwsAIABBxfkDEBkaCz8BAX8jAEEQayIEJAAgBCADNgIIIAQgATYCACAE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AGtBGUsNAEEAIQEgBEGhlgEQKkUNACAEQfqTARAqRQ0AQQEhASAEQdnxABAqRQ0AIARB34oBECpFDQAgBEGKLhAqRQ0AQQFBAiAEQf4ZECobIQELIAIgATYCPCAAQdENECMQaiEBIAIgAi0ALEH7AXFBBEEAIAEbcjoALCACIABB/vIAECNBARCKCDoAOCACIAAgAEEAQc/iAEEAEB9EAAAAAAAAAABE////////7/8QUzkDSCACIAAgAEEAQf2XAUEAEB9BAEEAEFAiATYCUCABQQVOBEAgAyABNgIgQfyJBCADQSBqECcgAkEANgJQCyAAIANB6ABqELEKIANCnI7H4/G4nNY/NwNgIANCnI7H4/G4nNY/NwNYAkAgAygCaEESRyAFQQJHckUEQCACIAMoAnA2AjQgAiADKwN4OQNAIANBMGogABDdAkEBIQYgAy0AQEEBcUUNASADKwMwIQggAyADKwM4RAAAAAAAAFJAozkDYCADIAhEAAAAAAAAUkCjOQNYDAELIAJBfzYCNCAFQQJHIQYLQYCLCy0AAARAIwBB4AFrIgEkAEGMzARBG0EBQej6BigCACIEEEoaIAEgAisDADkD0AEgBEHtlwQgAUHQAWoQLSACLQAsIQUgASACKAIoNgLEASABIAVBAXE2AsABIARBm7gEIAFBwAFqEB0aIAIrAwghCCABQpqz5syZs+bkPzcDuAEgASAIOQOwASAEQYqYBCABQbABahAtIAEgAigCEDYCoAEgBEGntAQgAUGgAWoQHRogASACKAIUNgKUASABQS02ApABIARBk7UEIAFBkAFqEB0aIAEgAigCGDYCgAEgAUL808aX3cmYqD83A3ggAUKz5syZs+bM8T83A3AgBEHAtAQgAUHwAGoQLSACKwMgIQggASACLQAsQQF2QQFxNgJgIAEgCDkDWCABQs2Zs+bMmbP2PzcDUCAEQdi2BCABQdAAahAtIAItACwhBSABIAIrA0g5A0ggAUEANgJEIAEgBUECdkEBcTYCQCAEQbiXBCABQUBrEC0gAigCMCEFIAIoAjQhByACKwNAIQggASACLQA4NgIwIAEgCDkDKCABIAc2AiQgASAFQQJ0QYD3BGooAgA2AiAgBEGXtgQgAUEgahAtIAEgAigCPEECdEGg9wRqKAIANgIQIARBgu4DIAFBEGoQHRogASAC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KAIsIgZKDQBBASECIAAoAigiByABKAIgIghIDQAgACgCDCABKAIMayABKAIoIAcgCCAAKAIgamtqQQJtaiAEIAZqIAMgBWprQQJtIAEoAhAiASAAKAIQIgBrIAAgAWsgACABShtqTCECCyACCyABAX8gACgCICABKAIoTAR/IAEoAiAgACgCKEwFQQALCyABAX8gACgCJCABKAIsTAR/IAEoAiQgACgCLEwFQQALC0gBAnwCf0F/IAAoAgAiACsDCCICIAEoAgAiASsDCCIDYw0AGkEBIAIgA2QNABpBfyAAKwMAIgIgASsDACIDYw0AGiACIANkCwtOAQJ/IAAQGiIBBEADQCABBEAgACABECkhAgNAIAIEQCACEMoCIAAgAhAsIQIMAQsLIAEQ/AIgACABEBshAQwBCwsgACgCECgCmAEQFwsL1wYCCX8BfCMAQdAAayICJAAgABA1BEAgACIBQQIQjQIgABA0KAIQQQI7AbABQbyLC0ECOwEAIAAQNSIAQTgQGCEFIABBAWpBBBAYIQAgASgCECAANgKYASABEBohAANAIAAEQCAAEIwEIAAoAhAgBSADQThsajYCgAEgASgCECgCmAEgA0ECdGogADYCACADQQFqIQMgASAAEBshAAwBCwsgARAaIQMDQCADBEAgASADECkhAANAIAAEQCAAQfklQbgBQQEQLhogABCpAyAAQaCNCygCAEQAAAAAAADwP0QAAAAAAAAAABBTIQogACgCECAKOQOAASABIAAQLCEADAELCyABIAMQGyEDDAELCwJ/QQEgAUGsGxAjIgBFDQAaIAAtAAAEQEEBIAEgAEEAEHMiBA0BGiACIAA2AhBBpJcDIAJBEGoQJ0GMpwRBABB8C0EAIQRBAAshCCABQQFBrBtBABAfIQMCQCABQeqbARAjIgBFDQAgAC0AAEUNACACIAJByABqNgIEIAIgAkFAazYCACAAQdOEASACEElBAUcNACACIAIrA0A5A0gLIAEQNQRAIAEgAkE8ahCIBiEHAkAgAigCPEEBRgRAAkAgBCIADQAgAwRAIAEgAxC1CiIADQELQQAhAAsgBCABIAAQugoiBSAEGyEGIANFIAByRQRAIAUgA0HuiAMQaAsgBCAGIAgbIQQgARAaIgAoAhAoAoABEBcgACgCEEEANgKAASABEJIEGgwBCyABQQJB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IQgLA0AgCSIFIAgiBkcEQCADQdAAaiIIIAVBACACIAEQkQUgCCAGIARBACABEJEFIAYoAhAoAowBKAIwIQggBSgCECgCjAEoAjAhCSAFIQIgBiEEDAELCyADQdAAaiIFIAYgBCACIAEQkQUgAygCVEEASA0BAkACQCAFEPQGIAMoAlQQnQoEQCAHIQIgBRD0BiADKAJUEPoNIgsNAkEAIQtB1t8DQQAQJwwBCyAMDQAgA0E4aiAAEN0CIABBCEEIENIEIQJB+OADQQAQJyABKwMAIg0gArciDmYgDiABKwMIIg9lcgRAIAMgDzkDMCADIA05AyggAyACNgIgQaDjBCADQSBqEHwMAQsgAysDOCIQIA1lIAMrA0AiDiAPZXJFDQAgAyAPOQMYIAMgDTkDECADIA45AwggAyAQOQMAQdLjBCADEHwLQQEhDAwECwNAIAJFDQQgAigCECADQThqIAIgC0EAEPUJIAMpAzg3A5ABIAMoAlRBAEgNAyACIANB0ABqEPQGIAMoAlRBABD0CSACKAIQKAKwASECDAALAAsgACAKEBshCgwGC0HbyAFBgbkBQeEBQcowEAAAC0HbyAFBgbkBQYECQcowEAAACyADQdAAaiICRQRAQYPPAUGBuQFBIUGrngEQAAALIAJBADYCBCACKAIAEBcgAkEANgIIIAJCADcCAAsgACAHECwhBwwACwALCyALBEAgCxD5DQsgA0HgAGokACAMC1sBAn8gABAaIQEDQCABBEAgACABECkhAgNAIAIEQCACEMoCIAAgAhAsIQIMAQsLIAEQ/AIgACABEBshAQwBCwsgABDMCiAAKAIQKAKYARAXIAAoAhAoAowBEBcLSAECfyAAEBohAQNAIAEEQCAAIAEQKSECA0AgAgRAIAIQygIgACACECwhAgwBBSABEPwCIAAgARAbIQEMAwsACwALCyAAEM0KC5YCAQN/IABBAhCNAiAAKAIQQQI7AbABQbyLC0ECOwEAIAAQGiEBA0AgAQRAIAEQjAQgACABEBshAQwBCwsgABAaIQIDQCACBEAgACACECkhAQNAIAEEQCABQfklQbgBQQEQLhogARCpAyAAIAEQLCEBDAELCyAAIAIQGyECDAELCyAAQQAQ9QYgAEEAENAKIABBABDPCgJAIAAoAhAiASgCCCgCVARAIAAQGiEBA0AgAQRA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BH9BAEF/IAArAwggASsDCGYbBUEACwtSAQN/IAAoAiQhAgNAIAIoAgQhAyACKAIAIAFNBEAgAxAXIAIQFwUgAyABQQxsaigCCBB5GiABQQFqIQEMAQsLIABBADYCHCAAKAIYEBcgABAXCyABAnxBAUF/QQAgACsDACICIAErAwAiA2MbIAIgA2QbCw4AIAAoAhAQeRogABAXCx4AQQFBf0EAIAAoAgAiACABKAIAIgFIGyAAIAFKGwtaAgF8AX9BfyAAKwMIIAErAwihIgJESK+8mvLXej5kIAJESK+8mvLXer5jGyIDBH8gAwVBfyAAKwMAIAErAwChIgJESK+8mvLXej5kIAJESK+8mvLXer5jGwsLWgIBfAF/QX8gACsDACABKwMAoSICREivvJry13o+ZCACREivvJry13q+YxsiAwR/IAMFQX8gACsDCCABKwMIoSICREivvJry13o+ZCACREivvJry13q+YxsLCz4BAn8Cf0F/IAAoAgAiAiABKAIAIgNJDQAaQQEgAiADSw0AGkF/IAAoAgQiACABKAIEIgFJDQAaIAAgAUsLCzAAQRgQTSIBIAAoAgg2AgggASAAKAIMNgIMIAEgACgCEDYCECABIAAoAhQ2AhQgAQtjAQN/IwBBEGsiAiQAIAJBCGogASgCAEEAEMQBAkAgACgAACACKAIIIAAoAAQiASACKAIMIgMgASADSSIEGxDXASIADQBBASEAIAEgA0sNAEF/QQAgBBshAAsgAkEQaiQAIAALDQAgAEEAIAEgAhAfGguEAQECfyMAQRBrIgIkAEEBQSAQRiIBBEAgACgCACIDBEAgASADEGE2AgALIAAoAgQiAwRAIAEgAxBhNgIECyABIAAoAhhB/wBxNgIYIAEgACsDEDkDECABIAAoAgg2AgggAkEQaiQAIAEPCyACQSA2AgBB6PoGKAIAQandAyACEB0aECYACxQAIAAoAgAQFyAAKAIEEBcgABAXC6gBAgN/AnwgASgCACECAkACQAJAAkAgACgCACIDRQRAIAJFDQEMBAsgAkUNAiADIAIQQyICDQELIAEoAgQhAgJAIAAoAgQiA0UEQCACDQQMAQsgAkUNAiADIAIQQyICDQELQX8hAiAAKAIYQf8AcSIDIAEoAhhB/wBxIgRJDQAgAyAESw0BIAArAxAiBSABKwMQIgZjDQAg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CxcAIAAoAgBBB0YEQCAAKAJwQQEQ+A4LCwoAIAAgAUEBEHMLCwBB2IsLIAA2AgALC8KGCqMDAEGACAvl7AT/2P/gAMXQ08YAfgB7JXN9ACAtdGFncyB7JWQlcyVwfQAgJS4wZn0AJXMgeyAlcyB9AHxlZGdlbGFiZWx8ACAtZm9udCB7AHF1YXJ0egBpZHggPT0gc3oAY250ID09IHN6AGxvegBncmFwaHZpegBndndyaXRlX25vX3oAcG9ydGhveHkAc2NhbGV4eQAvc3ZnL25hdnkAaW52ZW1wdHkAbm9kZV9zZXRfaXNfZW1wdHkAbm9kZV9zdGFja19pc19lbXB0eQByZWZlcmVuY2UgdG8gYmluYXJ5IGVudGl0eQBhc3luY2hyb25vdXMgZW50aXR5AGluY29tcGxldGUgbWFya3VwIGluIHBhcmFtZXRlciBlbnRpdHkAZW50aXR5IGRlY2xhcmVkIGluIHBhcmFtZXRlciBlbnRpdHkAY2Fubm90IHN1c3BlbmQgaW4gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0eQBYTUwgb3IgdGV4dCBkZWNsYXJhdGlvbiBub3QgYXQgc3RhcnQgb2YgZW50aXR5AHVuZGVmaW5lZCBlbnRpdHkAaW5maW5pdHkAZmFudGFzeQBTcGFyc2VNYXRyaXhfY29vcmRpbmF0ZV9mb3JtX2FkZF9lbnRyeQAvc3ZnL2l2b3J5AG91dCBvZiBtZW1vcnkARmVicnVhcnkASmFudWFyeQBndnBsdWdpbl9kb3RfbGF5b3V0X0xUWF9saWJyYXJ5AGd2cGx1Z2luX25lYXRvX2xheW91dF9MVFhfbGlicmFyeQBndnBsdWdpbl9jb3JlX0xUWF9saWJyYXJ5AGdhdGhlcl90aW1lX2VudHJvcHkAbm9kZXNfY29weQBhbGJhbnkASnVseQBTcGFyc2VNYXRyaXhfbXVsdGlwbHkAZXF1YWxseQBhc3NlbWJseQBzdW1tZXJza3kAc2h5AHNhdGlzZnkAYmVhdXRpZnkAbm9qdXN0aWZ5AENsYXNzaWZ5AC9zdmcvbGlnaHRncmV5AC9zdmcvZGltZ3JleQAvc3ZnL2RhcmtncmV5AC9zdmcvbGlnaHRzbGF0ZWdyZXkAL3N2Zy9kYXJrc2xhdGVncmV5AC9zdmcvc2xhdGVncmV5AHdlYmdyZXkAeDExZ3JleQAvc3ZnL2dyZXkAbW92ZSB0byBmcm9udCBsb2NrIGluY29uc2lzdGVuY3kAZXh0cmFjdF9hZGphY2VuY3kAbWVyZ2Vfb25ld2F5AGFycmF5AGFsbG9jQXJyYXkAL3N2Zy9saWdodGdyYXkAL3N2Zy9kaW1ncmF5AC9zdmcvZGFya2dyYXkAL3N2Zy9saWdodHNsYXRlZ3JheQAvc3ZnL2RhcmtzbGF0ZWdyYXkAL3N2Zy9zbGF0ZWdyYXkAd2ViZ3JheQB4MTFncmF5AC9zdmcvZ3JheQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkALi4vLi4vbGliL2NncmFwaC9ncmFtbWFyLnkAJW0vJWQvJXkAcG9ydGhveXgAcG9ydGhvX3l4AHh4eABib3gAdmlld0JveABjaGtCb3VuZEJveAAvTWVkaWFCb3gAZ2V0X2VkZ2VfbGFiZWxfbWF0cml4AGlkZWFsX2Rpc3RhbmNlX21hdHJpeABtdXN0IG5vdCB1bmRlY2xhcmUgcHJlZml4AHVuYm91bmQgcHJlZml4AGh0bWxsZXgAbm9kZV9zZXRfaW5kZXgAbWF4ACMlMDJ4JTAyeCUwMnglMDJ4ACMlMDJ4JTAyeCUwMngAIyUyeCUyeCUyeCUyeAAjJTF4JTF4JTF4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAcmFycm93AGxhcnJvdwBIZWx2ZXRpY2EtTmFycm93AGFycm93X2xlbmd0aF9jcm93AC9zdmcvc25vdwBzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfc2xvdwAvc3ZnL2xpZ2h0eWVsbG93AC9zdmcvZ3JlZW55ZWxsb3cAL3N2Zy9saWdodGdvbGRlbnJvZHllbGxvdwAvc3ZnL3llbGxvdwBmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93AGZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3cAY291cmllcm5ldwBTcHJpbmdTbW9vdGhlcl9uZXcAVHJpYW5nbGVTbW9vdGhlcl9uZXcAZGlhZ19wcmVjb25fbmV3AFF1YWRUcmVlX25ldwBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcjJfbmV3AHIgJiYgbiAmJiBuZXcAc2tldwBzdHJ2aWV3AC9zdmcvaG9uZXlkZXcAIC1hbmNob3IgdwBzb3J0dgBwb3Y6cG92AE5vdgBpbnYAZXF1aXYAcGl2AG5vbmFtZS5ndgBjYyVzXyV6dQBjYyVzKyV6dQAvc3ZnL3BlcnUAbnUAbXUAJWMlbGx1AFRodQB0YXUAVGF1AE51AE11AF9wb3J0XyVzXyglZClfKCVkKV8ldQBwbGFpbnRleHQAPHRleHQAc3RyZXNzd3QAaW5wdXQAdGV4dGxheW91dABkb3RfbGF5b3V0AG5lYXRvX2xheW91dABpbml0TGF5b3V0AGNsdXN0AG1hcENsdXN0AGxhYmVsanVzdABzY0FkanVzdABBdWd1c3QAZWRnZXNmaXJzdABub2Rlc2ZpcnN0AG1heGltYWxfaW5kZXBlbmRlbnRfZWRnZV9zZXRfaGVhdmVzdF9lZGdlX3Blcm5vZGVfc3VwZXJub2Rlc19maXJzdABleGlzdAByZWFsaWduTm9kZWxpc3QAYXBwZW5kTm9kZWxpc3QAZGVmYXVsdGRpc3QAbWluZGlzdABwb3dlcl9kaXN0AGdyYXBoX2Rpc3QAYXZnX2Rpc3QAZ2V0RWRnZUxpc3QAaXF1ZXN0AGxvd2FzdABzcHJpbmdfZWxlY3RyaWNhbF9lbWJlZGRpbmdfZmFzdABndl9zb3J0AGRlZ2xpc3Rfc29ydAB2aWV3cG9ydAB0YWlscG9ydAB1bmV4cGVjdGVkIHBhcnNlciBzdGF0ZSAtIHBsZWFzZSBzZW5kIGEgYnVnIHJlcG9ydABoZWFkcG9ydABpbnNlcnQAUlRyZWVJbnNlcnQAZmluZFNWZXJ0AHN0YXJ0AHBhcnQAZXN0aW1hdGVfdGV4dF93aWR0aF8xcHQAcXVvdAB/cm9vdABub3QAZW1pdF94ZG90AHhkb3Q6eGRvdABlcHM6eGRvdABzdmc6eGRvdABqcGc6eGRvdABwbmc6eGRvdABqcGVnOnhkb3QAZ2lmOnhkb3QAanBlOnhkb3QAeGRvdDEuNDp4ZG90AHhkb3QxLjI6eGRvdABzZG90AG1pZGRvdABndjpkb3QAcGxhaW4tZXh0OmRvdABkb3Q6ZG90AGVwczpkb3QAY2Fub246ZG90AHBsYWluOmRvdABzdmc6ZG90AGpwZzpkb3QAcG5nOmRvdABqcGVnOmRvdABnaWY6ZG90AGpwZTpkb3QAf2JvdABkb0RvdABvYmpsaXN0X2Zyb250AG5vZGVsaXN0X2Zyb250AHBvaW50c19mcm9udABzcGFuLT5mb250AHZhZ3hicHJpbnQAbG9jYXRlX2VuZHBvaW50AGRlY2lkZV9wb2ludABVbnNhdGlzZmllZCBjb25zdHJhaW50AHRyYW5zcGFyZW50AGNvbXBvbmVudABpbnZhbGlkIGFyZ3VtZW50AGNvbW1lbnQAanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50AGNlbnQAaSA9PSBlY250AGFyaWFsbXQAbHQAY2lyY3VpdABwb2x5X2luaXQATXVsdGlsZXZlbF9pbml0AG5zbGltaXQAbWNsaW1pdABQb3J0cmFpdABsaWdodAB2aXJ0dWFsX3dlaWdodABsaGVpZ2h0AEtQX1JpZ2h0AEJvb2ttYW4tTGlnaHQAZ3QAS1BfTGVmdABhZ3hzZXQAY2hhcnNldABpbnNldABiaXRhcnJheV9yZXNldABzdWJzZXQAYml0YXJyYXlfc2V0AG5vZGVsaXN0X3NldABpbnRzX3NldABub2Rlc19zZXQAc2NhcmxldAAvc3ZnL2Rhcmt2aW9sZXQAL3N2Zy9ibHVldmlvbGV0AC9zdmcvdmlvbGV0AFRyZWJ1Y2hldABhZ3hnZXQAdGFpbHRhcmdldABsYWJlbHRhcmdldABlZGdldGFyZ2V0AGhlYWR0YXJnZXQAYml0YXJyYXlfZ2V0AG5vZGVsaXN0X2dldABzZWdfbGlzdF9nZXQAc2FtZV9saXN0X2dldABlZGdlX2xpc3RfZ2V0AHBvaW50c19nZXQAYm94ZXNfZ2V0AHRyaWFuZ2xlc19nZXQAY3ljbGVzX2dldABub2Rlc19nZXQAYmV6aWVyX3BhdGhfZ2V0AHN0eWxlc2hlZXQAc3RyaWN0AGFnY29weWRpY3QAYWdtYWtlZGF0YWRpY3QAcmVjLT5kaWN0ID09IGRhdGFkaWN0AHdyaXRlX2RpY3QAc2VjdABlbmNvZGluZyBzcGVjaWZpZWQgaW4gWE1MIGRlY2xhcmF0aW9uIGlzIGluY29ycmVjdABhc3BlY3QAbGF5ZXJzZWxlY3QAQ29tYmluZVJlY3QAS1BfU3VidHJhY3QAUXVhZFRyZWVfcmVwdWxzaXZlX2ZvcmNlX2ludGVyYWN0AGNvbXBhY3QAT2N0AHJlcXVlc3RlZCBmZWF0dXJlIHJlcXVpcmVzIFhNTF9EVEQgc3VwcG9ydCBpbiBFeHBhdABsYWJlbGZsb2F0AGxhYmVsX2Zsb2F0AFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfZm9ybWF0AC9zdmcvd2hlYXQAb2JqbGlzdF9hdABub2RlbGlzdF9hdABzYW1lX2xpc3RfYXQAcG9pbnRzX2F0AHRyaWFuZ2xlc19hdABub2Rlc19hdABTYXQAQWdyYXBoaW5mb190AEFnZWRnZWluZm9fdABBZ25vZGVpbmZvX3QAXHQAZmxhdGluZGV4KGFnaGVhZChlKSkgPCBNLT5ucm93cwBtaW51cwBvcGx1cwBoZWFydHMAc2FtcGxlcG9pbnRzAGRpcmVkZ2Vjb25zdHJhaW50cwBsZXZlbCBhc3NpZ25tZW50IGNvbnN0cmFpbnRzAHh5IHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHl4IHBzZXVkby1vcnRob2dvbmFsIGNvbnN0cmFpbnRzAHh5IG9ydGhvZ29uYWwgY29uc3RyYWludHMAeXggb3J0aG9nb25hbCBjb25zdHJhaW50cwBsaW5lIHNlZ21lbnRzAHJlY3RzAGFjY291bnRpbmdSZXBvcnRTdGF0cwBlbnRpdHlUcmFja2luZ1JlcG9ydFN0YXRzAFphcGZEaW5nYmF0cwByZW1pbmNyb3NzAGNvbXByZXNzAGd2dXNlcnNoYXBlX2ZpbGVfYWNjZXNzAGJyYXNzAGNsYXNzAGFwcGx5YXR0cnMAYWdtYWtlYXR0cnMAYmluZGF0dHJzAHBhcnNlX2xheWVycwBta0NsdXN0ZXJzAHJvdW5kX2Nvcm5lcnMAbWFrZV9iYXJyaWVycwBjZGF0YS5udG9wbGV2ZWwgPT0gYWdubm9kZXMoZykgLSBjZGF0YS5udmFycwBjYW5ub3QgcmVhbGxvYyBvcHMAY2Fubm90IHJlYWxsb2MgcG5scHMAZXBzAGNvcmVfbG9hZGltYWdlX3BzAGVwczpwcwBwczI6cHMAKGxpYik6cHMAZ3ZfdHJpbV96ZXJvcwBhZ3hidWZfdHJpbV96ZXJvcwB0ZXhneXJlaGVyb3MAaW1hZ2Vwb3MAdGlub3MAc2V0RWRnZUxhYmVsUG9zAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMAeGxpbnRlcnNlY3Rpb25zAGNvbHVtbnMAbm9kZXNfY29udGFpbnMAZGVqYXZ1c2FucwBuaW1idXNzYW5zAGxpYmVyYXRpb25zYW5zAGZyZWVzYW5zAE9wZW5TYW5zAG9mZnNldCA9PSBuX3Rlcm1zAGRpdGVtcwBkaWFtcwBmbGF0aW5kZXgoYWd0YWlsKGUpKSA8IE0tPm5jb2xzAGNhbm5vdCByZWFsbG9jIGRxLnBubHMAY2Fubm90IHJlYWxsb2MgcG5scwBsZXZlbHMAZm9yY2VsYWJlbHMAZGlhZ29uYWxzAG1lcmdlX3JhbmtzAGJ1aWxkX3JhbmtzAG9ianBscG1rcwBzcGxpdEJsb2NrcwBpbnZpcwBjYW5ub3QgcmVhbGxvYyB0cmlzAENhbGN1bGF0aW5nIHNob3J0ZXN0IHBhdGhzAHllcwBzaG93Ym94ZXMAYmVhdXRpZnlfbGVhdmVzAGF0dGFjaF9lZGdlX2xhYmVsX2Nvb3JkaW5hdGVzAHBvbHlsaW5lcwBzcGxpbmVzAG9ydGhvZ29uYWwgbGluZXMAdGV4Z3lyZXRlcm1lcwBvdGltZXMAVGltZXMAZm9udG5hbWVzAHByZWZpeCBtdXN0IG5vdCBiZSBib3VuZCB0byBvbmUgb2YgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBuYW1lcwBTcGFyc2VNYXRyaXhfc3VtX3JlcGVhdF9lbnRyaWVzAHBlcmlwaGVyaWVzAEdldEJyYW5jaGVzAGYgPCBncmFwaFtqXS5uZWRnZXMAbWlubWF4X2VkZ2VzAG1ha2VTdHJhaWdodEVkZ2VzAHVuZG9DbHVzdGVyRWRnZXMAY29tcG91bmRFZGdlcwBtZXJnZV90cmVlcwBfX2NsdXN0ZXJub2RlcwBhZ25ub2RlcwBORF9pZChucCkgPT0gbl9ub2RlcwBMb2FkTm9kZXMAc2lkZXMAc3BhZGVzAHZlcnRpY2VzAGNvb3JkcwBzZXRib3VuZHMAbWRzAGNkcwBtYWtlU2VsZkFyY3MAZW1pdF9lZGdlX2dyYXBoaWNzAGNsdWJzAGNvbnNvbGFzACVsZiUycwAKU3RyaW5nIHN0YXJ0aW5nOjwlLjgwcwAKU3RyaW5nIHN0YXJ0aW5nOiIlLjgwcwAgJS4qcwAlLipzJXMlcwBleHBhdDogQWNjb3VudGluZyglcCk6IERpcmVjdCAlMTBsbHUsIGluZGlyZWN0ICUxMGxsdSwgYW1wbGlmaWNhdGlvbiAlOC4yZiVzACAlczolcwBfXyVkOiVzAC8lcy8lcwAlcy0lcwAsJXMAIGZvbnQtZmFtaWx5PSIlcwAiIHN0cm9rZS1kYXNoYXJyYXk9IiVzACIgY2xhc3M9IiVzAHBvbHkgJXMAKCglZiwlZiksKCVmLCVmKSkgJXMgJXMAY29sb3IgJXMAIFRpdGxlOiAlcwAic3RyaWN0IjogJXMAciAmJiBzAGNvdXIAdXRyAGFwcGVuZGF0dHIAYWRkYXR0cgBiZWdpbnN0cgBzdHJ2aWV3X3N0cgBwb3ZfY29sb3JfYXNfc3RyAHZwc2MhPW51bGxwdHIAYmVuZFRvU3RyAHVhcnIAY3JhcnIAbGFycgBoYXJyAGRhcnIAdUFycgByQXJyAGxBcnIAaEFycgBkQXJyAHIgJiYgcnIAQXByAFNwYXJzZU1hdHJpeF9tdWx0aXBseV92ZWN0b3IAdGVybWluYXRvcgBpbnN1bGF0b3IAdGV4Z3lyZWN1cnNvcgBzeW50YXggZXJyb3IAbW9uZXlfZ2V0IGVycm9yAEVycm9yAHJmbG9vcgBsZmxvb3IAbGFiZWxmb250Y29sb3IAcGVuY29sb3IAZmlsbGNvbG9yAGJnY29sb3IAcm93IG1ham9yAGNvbHVtbiBtYWpvcgBuZWlnaGJvcgBzdHlsZV9vcgBtcgByYW5rZGlyAHBhZ2VkaXIAbGF5ZXIATm9kZUNvdmVyAC9zdmcvc2lsdmVyAGNsdXN0ZXIAZXhwYW5kQ2x1c3RlcgBycHJvbW90ZXIAbHByb21vdGVyAGNlbnRlcgBtYXhpdGVyAHBhcnRpYWwgY2hhcmFjdGVyACEgcm9vdFBhcnNlci0+bV9wYXJlbnRQYXJzZXIAZGtncmVlbmNvcHBlcgBjb29sY29wcGVyAGd2X3NvcnRfY29tcGFyX3dyYXBwZXIAdGFwZXIAb3ZlcmxhcF9iZXppZXIAZmlnX2JlemllcgBjb3VyaWVyAENvdXJpZXIAaGllcgBkYWdnZXIARGFnZ2VyAG91dHB1dG9yZGVyAHBvc3RvcmRlcgBmbGF0X3Jlb3JkZXIAY2VsbGJvcmRlcgBmaXhMYWJlbE9yZGVyAGN5bGluZGVyAC9zdmcvbGF2ZW5kZXIAcmVuZGVyAGZvbGRlcgBjbHVzdGVyX2xlYWRlcgBORF9VRl9zaXplKG4pIDw9IDEgfHwgbiA9PSBsZWFkZXIAT2N0b2JlcgByZWZlcmVuY2UgdG8gaW52YWxpZCBjaGFyYWN0ZXIgbnVtYmVyAE5vdmVtYmVyAFNlcHRlbWJlcgBEZWNlbWJlcgBtYWNyAGJyAHN0YXIAZmVsZHNwYXIAcmVndWxhcgBzYW1lX2xpc3RfY2xlYXIAaW9zX2Jhc2U6OmNsZWFyAGJydmJhcgBNYXIAXHIATkRfcmFuayh2KSA9PSByAHN0cmVxAHN0cnZpZXdfZXEAc3Rydmlld19zdHJfZXEAc3Rydmlld19jYXNlX3N0cl9lcQBzdHJ2aWV3X2Nhc2VfZXEAdnAAJSVCZWdpblByb2xvZwovRG90RGljdCAyMDAgZGljdCBkZWYKRG90RGljdCBiZWdpbgoKL3NldHVwTGF0aW4xIHsKbWFyawovRW5jb2RpbmdWZWN0b3IgMjU2IGFycmF5IGRlZgogRW5jb2RpbmdWZWN0b3IgMAoKSVNPTGF0aW4xRW5jb2RpbmcgMCAyNTUgZ2V0aW50ZXJ2YWwgcHV0aW50ZXJ2YWwKRW5jb2RpbmdWZWN0b3IgNDUgL2h5cGhlbiBwdXQKCiUgU2V0IHVwIElTTyBMYXRpbiAxIGNoYXJhY3RlciBlbmNvZGluZwovc3Rhcm5ldElTTyB7CiAgICAgICAgZHVwIGR1cCBmaW5kZm9udCBkdXAgbGVuZ3RoIGRpY3QgYmVnaW4KICAgICAgICB7IDEgaW5kZXggL0ZJRCBuZSB7IGRlZiB9eyBwb3AgcG9wIH0gaWZlbHNlCiAgICAgICAgfSBmb3JhbGwKICAgICAgICAvRW5jb2RpbmcgRW5jb2RpbmdWZWN0b3IgZGVmCiAgICAgICAgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQKfSBkZWYKL1RpbWVzLVJvbWFuIHN0YXJuZXRJU08gZGVmCi9UaW1lcy1JdGFsaWMgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGQgc3Rhcm5ldElTTyBkZWYKL1RpbWVzLUJvbGRJdGFsaWMgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYSBzdGFybmV0SVNPIGRlZgovSGVsdmV0aWNhLU9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0hlbHZldGljYS1Cb2xkIHN0YXJuZXRJU08gZGVmCi9IZWx2ZXRpY2EtQm9sZE9ibGlxdWUgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXIgc3Rhcm5ldElTTyBkZWYKL0NvdXJpZXItT2JsaXF1ZSBzdGFybmV0SVNPIGRlZgovQ291cmllci1Cb2xkIHN0YXJuZXRJU08gZGVmCi9Db3VyaWVyLUJvbGRPYmxpcXVlIHN0YXJuZXRJU08gZGVmCmNsZWFydG9tYXJrCn0gYmluZCBkZWYKCiUlQmVnaW5SZXNvdXJjZTogcHJvY3NldCBncmFwaHZpeiAwIDAKL2Nvb3JkLWZvbnQtZmFtaWx5IC9UaW1lcy1Sb21hbiBkZWYKL2RlZmF1bHQtZm9udC1mYW1pbHkgL1RpbWVzLVJvbWFuIGRlZgovY29vcmRmb250IGNvb3JkLWZvbnQtZmFtaWx5IGZpbmRmb250IDggc2NhbGVmb250IGRlZgoKL0ludlNjYWxlRmFjdG9yIDEuMCBkZWYKL3NldF9zY2FsZSB7CiAgICAgICBkdXAgMSBleGNoIGRpdiAvSW52U2NhbGVGYWN0b3IgZXhjaCBkZWYKICAgICAgIHNjYWxlCn0gYmluZCBkZWYKCiUgc3R5bGVzCi9zb2xpZCB7IFtdIDAgc2V0ZGFzaCB9IGJpbmQgZGVmCi9kYXNoZWQgeyBbOSBJbnZTY2FsZUZhY3RvciBtdWwgZHVwIF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2RvdHRlZCB7IFsxIEludlNjYWxlRmFjdG9yIG11bCA2IEludlNjYWxlRmFjdG9yIG11bF0gMCBzZXRkYXNoIH0gYmluZCBkZWYKL2ludmlzIHsvZmlsbCB7bmV3cGF0aH0gZGVmIC9zdHJva2Uge25ld3BhdGh9IGRlZiAvc2hvdyB7cG9wIG5ld3BhdGh9IGRlZn0gYmluZCBkZWYKL2JvbGQgeyAyIHNldGxpbmV3aWR0aCB9IGJpbmQgZGVmCi9maWxsZWQgeyB9IGJpbmQgZGVmCi91bmZpbGxlZCB7IH0gYmluZCBkZWYKL3JvdW5kZWQgeyB9IGJpbmQgZGVmCi9kaWFnb25hbHMgeyB9IGJpbmQgZGVmCi90YXBlcmVkIHsgfSBiaW5kIGRlZgoKJSBob29rcyBmb3Igc2V0dGluZyBjb2xvciAKL25vZGVjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2VkZ2Vjb2xvciB7IHNldGhzYmNvbG9yIH0gYmluZCBkZWYKL2dyYXBoY29sb3IgeyBzZXRoc2Jjb2xvciB9IGJpbmQgZGVmCi9ub3Bjb2xvciB7cG9wIHBvcCBwb3B9IGJpbmQgZGVmCgovYmVnaW5wYWdlIHsJJSBpIGogbnBhZ2VzCgkvbnBhZ2VzIGV4Y2ggZGVmCgkvaiBleGNoIGRlZgoJL2kgZXhjaCBkZWYKCS9zdHIgMTAgc3RyaW5nIGRlZgoJbnBhZ2VzIDEgZ3QgewoJCWdzYXZlCgkJCWNvb3JkZm9udCBzZXRmb250CgkJCTAgMCBtb3ZldG8KCQkJKFwoKSBzaG93IGkgc3RyIGN2cyBzaG93ICgsKSBzaG93IGogc3RyIGN2cyBzaG93IChcKSkgc2hvdwoJCWdyZXN0b3JlCgl9IGlmCn0gYmluZCBkZWYKCi9zZXRfZm9udCB7CglmaW5kZm9udCBleGNoCglzY2FsZWZvbnQgc2V0Zm9udAp9IGRlZgoKJSBkcmF3IHRleHQgZml0dGVkIHRvIGl0cyBleHBlY3RlZCB3aWR0aAovYWxpZ25lZHRleHQgewkJCSUgd2lkdGggdGV4dAoJL3RleHQgZXhjaCBkZWYKCS93aWR0aCBleGNoIGRlZgoJZ3NhdmUKCQl3aWR0aCAwIGd0IHsKCQkJW10gMCBzZXRkYXNoCgkJCXRleHQgc3RyaW5nd2lkdGggcG9wIHdpZHRoIGV4Y2ggc3ViIHRleHQgbGVuZ3RoIGRpdiAwIHRleHQgYXNob3cKCQl9IGlmCglncmVzdG9yZQp9IGRlZgoKL2JveHByaW0gewkJCQklIHhjb3JuZXIgeWNvcm5lciB4c2l6ZSB5c2l6ZQoJCTQgMiByb2xsCgkJbW92ZXRvCgkJMiBjb3B5CgkJZXhjaCAwIHJsaW5ldG8KCQkwIGV4Y2ggcmxpbmV0bwoJCXBvcCBuZWcgMCBybGluZXRvCgkJY2xvc2VwYXRoCn0gYmluZCBkZWYKCi9lbGxpcHNlX3BhdGggewoJL3J5IGV4Y2ggZGVmCgkvcnggZXhjaCBkZWYKCS95IGV4Y2ggZGVmCgkveCBleGNoIGRlZgoJbWF0cml4IGN1cnJlbnRtYXRyaXgKCW5ld3BhdGgKCXggeSB0cmFuc2xhdGUKCXJ4IHJ5IHNjYWxlCgkwIDAgMSAwIDM2MCBhcmMKCXNldG1hdHJpeAp9IGJpbmQgZGVmCgovZW5kcGFnZSB7IHNob3dwYWdlIH0gYmluZCBkZWYKL3Nob3dwYWdlIHsgfSBkZWYKCi9sYXllcmNvbG9yc2VxCglbCSUgbGF5ZXIgY29sb3Igc2VxdWVuY2UgLSBkYXJrZXN0IHRvIGxpZ2h0ZXN0CgkJWzAgMCAwXQoJCVsuMiAuOCAuOF0KCQlbLjQgLjggLjhdCgkJWy42IC44IC44XQoJCVsuOCAuOCAuOF0KCV0KZGVmCgovbGF5ZXJsZW4gbGF5ZXJjb2xvcnNlcSBsZW5ndGggZGVmCgovc2V0bGF5ZXIgey9tYXhsYXllciBleGNoIGRlZiAvY3VybGF5ZXIgZXhjaCBkZWYKCWxheWVyY29sb3JzZXEgY3VybGF5ZXIgMSBzdWIgbGF5ZXJsZW4gbW9kIGdldAoJYWxvYWQgcG9wIHNldGhzYmNvbG9yCgkvbm9kZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZWRnZWNvbG9yIHtub3Bjb2xvcn0gZGVmCgkvZ3JhcGhjb2xvciB7bm9wY29sb3J9IGRlZgp9IGJpbmQgZGVmCgovb25sYXllciB7IGN1cmxheWVyIG5lIHtpbnZpc30gaWYgfSBkZWYKCi9vbmxheWVycyB7CgkvbXl1cHBlciBleGNoIGRlZgoJL215bG93ZXIgZXhjaCBkZWYKCWN1cmxheWVyIG15bG93ZXIgbHQKCWN1cmxheWVyIG15dXBwZXIgZ3QKCW9yCgl7aW52aXN9IGlmCn0gZGVmCgovY3VybGF5ZXIgMCBkZWYKCiUlRW5kUmVzb3VyY2UKJSVFbmRQcm9sb2cKJSVCZWdpblNldHVwCjE0IGRlZmF1bHQtZm9udC1mYW1pbHkgc2V0X2ZvbnQKJSAvYXJyb3dsZW5ndGggMTAgZGVmCiUgL2Fycm93d2lkdGggNSBkZWYKCiUgbWFrZSBzdXJlIHBkZm1hcmsgaXMgaGFybWxlc3MgZm9yIFBTLWludGVycHJldGVycyBvdGhlciB0aGFuIERpc3RpbGxlcgovcGRmbWFyayB3aGVyZSB7cG9wfSB7dXNlcmRpY3QgL3BkZm1hcmsgL2NsZWFydG9tYXJrIGxvYWQgcHV0fSBpZmVsc2UKJSBtYWtlICc8PCcgYW5kICc+Picgc2FmZSBvbiBQUyBMZXZlbCAxIGRldmljZXMKL2xhbmd1YWdlbGV2ZWwgd2hlcmUge3BvcCBsYW5ndWFnZWxldmVsfXsxfSBpZmVsc2UKMiBsdCB7CiAgICB1c2VyZGljdCAoPDwpIGN2biAoWykgY3ZuIGxvYWQgcHV0CiAgICB1c2VyZGljdCAoPj4pIGN2biAoWykgY3ZuIGxvYWQgcHV0Cn0gaWYKCiUlRW5kU2V0dXAAc3VwAGdyb3VwAGN1cAB0aGluc3AAZW5zcABlbXNwAG5ic3AAcGVycAB3ZWllcnAAZ2VuZXJhdGUtY29uc3RyYWludHMuY3BwAGJsb2NrLmNwcABjc29sdmVfVlBTQy5jcHAAf3RvcABwcm9wAGFneGJwb3AAbm9wAGFzeW1wAGNvbXAAZmluZENDb21wAGJtcABzY2FsZV9jbGFtcAB4bHAAbHAgIT0gY2xwAHRhaWxfbHAAaGVhZF9scAB0YWlsdG9vbHRpcABsYWJlbHRvb2x0aXAAZWRnZXRvb2x0aXAAaGVhZHRvb2x0aXAAaGVsbGlwAHRhaWxjbGlwAGhlYWRjbGlwAC9zdmcvcGFwYXlhd2hpcABocAB0cmFuc3Bvc2Vfc3RlcABsYXllcmxpc3RzZXAAbGF5ZXJzZXAAaXBzZXAAcmFua3NlcABub2Rlc2VwAHN1YmdyYXBocyBuZXN0ZWQgbW9yZSB0aGFuICVkIGRlZXAAU2VwAHNmZHAAY3AAd2VicABpZG1hcABjbHVzdGVyX21hcABjbWFweDptYXAAZXBzOm1hcABjbWFweF9ucDptYXAAaW1hcF9ucDptYXAAaXNtYXA6bWFwAGltYXA6bWFwAGNtYXA6bWFwAHN2ZzptYXAAanBnOm1hcABwbmc6bWFwAGpwZWc6bWFwAGdpZjptYXAAanBlOm1hcABvdmVybGFwAE92ZXJsYXAAbGV2ZWxzZ2FwAGNhcABLUF9VcAAlSTolTTolUyAlcABzdGFydCA8PSBwAHJzcXVvAGxzcXVvAHJkcXVvAGxkcXVvAGJkcXVvAHNicXVvAHJzYXF1bwBsc2FxdW8AcmFxdW8AbGFxdW8AYXV0bwBOdW5pdG8AL3N2Zy90b21hdG8AbmVhdG8AZXVybwAvc3ZnL2dhaW5zYm9ybwBNZXRob2RaZXJvAG1pY3JvAG5pbWJ1c21vbm8AbGliZXJhdGlvbm1vbm8AZnJlZW1vbm8AYXJpbW8AcmF0aW8AcG9ydGhvAHJobwBSaG8AL3N2Zy9pbmRpZ28AcGluZm8AY2NncmFwaGluZm8AY2Nnbm9kZWluZm8AY2xfZWRnZV9pbmZvAGdldFBhY2tJbmZvAG1ha2VJbmZvAHBhcnNlUGFja01vZGVJbmZvAGNpcmNvAGljbwBcJTAzbwAvc3ZnL3Jvc3licm93bgAvc3ZnL3NhbmR5YnJvd24AdmVyeWRhcmticm93bgAvc3ZnL3NhZGRsZWJyb3duAC9zdmcvYnJvd24AS1BfRG93bgBjYW5ub3QgY2hhbmdlIHNldHRpbmcgb25jZSBwYXJzaW5nIGhhcyBiZWd1bgBTdW4ASnVuAHRob3JuAC9zdmcvY3JpbXNvbgB4ZG90X2pzb24AeGRvdF9qc29uOmpzb24AanNvbjA6anNvbgBvbWljcm9uAE9taWNyb24Ac2Nhcm9uAFNjYXJvbgB3ZWJtYXJvb24AeDExbWFyb29uAC9zdmcvbWFyb29uAC9zdmcvbGlnaHRzYWxtb24AL3N2Zy9kYXJrc2FsbW9uAC9zdmcvc2FsbW9uAHVwc2lsb24AZXBzaWxvbgBVcHNpbG9uAEVwc2lsb24AcmVzb2x1dGlvbgBkaXN0b3J0aW9uAHN0ZDo6ZXhjZXB0aW9uAGRvdF9wb3NpdGlvbgBTZXR0aW5nIHVwIHN0cmVzcyBmdW5jdGlvbgB1bmNsb3NlZCBDREFUQSBzZWN0aW9uAHBvc3RhY3Rpb24Acm90YXRpb24Ab3JpZW50YXRpb24AYWJvbWluYXRpb24AYWNjb3VudGluZ0dldEN1cnJlbnRBbXBsaWZpY2F0aW9uAHhkb3R2ZXJzaW9uAFNUc2V0VW5pb24APHBvbHlnb24AaGV4YWdvbgBzZXB0YWdvbgBwZW50YWdvbgB0cmlwbGVvY3RhZ29uAGRvdWJsZW9jdGFnb24AL3N2Zy9sZW1vbmNoaWZmb24ATW9uAHBsdXNtbgBub3RpbgBpc2luAC9zdmcvbW9jY2FzaW4AcGluAG1pbgB2b3JvX21hcmdpbgBpbmZpbgBvbmVkX29wdGltaXplcl90cmFpbgBwbGFpbgBtYWtlX2NoYWluAG1lcmdlX2NoYWluAGRlbGV0ZU1pbgBmaW5kTWluAHZhbGlnbgBiYWxpZ24AeWVuAE11bHRpbGV2ZWxfY29hcnNlbgBjdXJyZW4AUG9ic29wZW4AZ3Z1c2Vyc2hhcGVfb3BlbgBlbnRpdHlUcmFja2luZ09uT3BlbgAvc3ZnL2xpbmVuAGRpbWVuAG1pbmxlbgBzdHlsZV90b2tlbgB1bmNsb3NlZCB0b2tlbgAvc3ZnL3llbGxvd2dyZWVuAG1lZGl1bWZvcmVzdGdyZWVuAC9zdmcvZm9yZXN0Z3JlZW4AL3N2Zy9saWdodGdyZWVuAGh1bnRlcnNncmVlbgAvc3ZnL2xhd25ncmVlbgAvc3ZnL2RhcmtncmVlbgAvc3ZnL21lZGl1bXNwcmluZ2dyZWVuAC9zdmcvc3ByaW5nZ3JlZW4AL3N2Zy9kYXJrb2xpdmVncmVlbgAvc3ZnL2xpbWVncmVlbgAvc3ZnL3BhbGVncmVlbgB3ZWJncmVlbgAvc3ZnL2xpZ2h0c2VhZ3JlZW4AL3N2Zy9tZWRpdW1zZWFncmVlbgAvc3ZnL2RhcmtzZWFncmVlbgAvc3ZnL3NlYWdyZWVuAHgxMWdyZWVuAC9zdmcvZ3JlZW4AR3JlZW4AL3N2Zy9saWdodGN5YW4AL3N2Zy9kYXJrY3lhbgAvc3ZnL2N5YW4AbmV3dGFuAGRhcmt0YW4AL3N2Zy90YW4Acm93c3BhbgBjb2xzcGFuAG5hbgB0aW1lc25ld3JvbWFuAG5pbWJ1c3JvbWFuAHRpbWVzcm9tYW4AVGltZXMtUm9tYW4AUGFsYXRpbm8tUm9tYW4ATmV3Q2VudHVyeVNjaGxiay1Sb21hbgBKYW4AR0RfcmFuayhnKVtyXS5uIDw9IEdEX3JhbmsoZylbcl0uYW4AYWd4YnB1dF9uAFxuAG5fbm9kZXMgPT0gZ3JhcGgtPm4AQS0+bSA9PSBBLT5uAGpvYi0+b2JqLT51Lm4AcywlbGYsJWxmJW4AIGUsJWxmLCVsZiVuACVkICUxWyJdJW4AdiA9PSBuAG56YyA9PSBuAGIgPT0gbgBuY2x1c3RlciA8PSBuAHIgJiYgbgBwc3ltAGFsZWZzeW0AdGhldGFzeW0AcXVhbnR1bQBzdW0AL3N2Zy9wbHVtAGludnRyYXBleml1bQBtZWRpdW0AOTpwcmlzbQBscm0AY3VzdG9tAGFwdHItPnRhZyA9PSBUX2F0b20AL2Rldi91cmFuZG9tAHJsbQBzaW0ASU1EU19naXZlbl9kaW0Ab3JkbQBwYXJhbGxlbG9ncmFtAC9zdmcvbWludGNyZWFtAEp1bAB0bABmcmFzbABTeW1ib2wAZmluZENvbAA8P3htbAB5dW1sAHV1bWwAb3VtbABpdW1sAGV1bWwAYXVtbABZdW1sAFV1bWwAT3VtbABJdW1sAEV1bWwAQXVtbABjb3JlX2xvYWRpbWFnZV92cm1sAGpwZzp2cm1sAHBuZzp2cm1sAGpwZWc6dnJtbABnaWY6dnJtbABqcGU6dnJtbABidWxsAGZpbGwAL3N2Zy9zZWFzaGVsbABmb3JhbGwAQXByaWwAcGVybWlsAHJjZWlsAGxjZWlsAGNjZWRpbABDY2VkaWwAYXJyb3d0YWlsAGx0YWlsAHNhbWV0YWlsAGxldmVsID49IDAgJiYgbGV2ZWwgPD0gbi0+bGV2ZWwAbGV2ZWwgPj0gMCAmJiBsZXZlbCA8PSAoKm4pLT5sZXZlbABzdHJlc3NfbWFqb3JpemF0aW9uX2tEX21rZXJuZWwAaXNfcGFyYWxsZWwAQ2FsY3VsYXRpbmcgY2lyY3VpdCBtb2RlbABDYWxjdWxhdGluZyBzdWJzZXQgbW9kZWwAQ2FsY3VsYXRpbmcgTURTIG1vZGVsAHhsYWJlbAB0YWlsbGFiZWwAaGVhZGxhYmVsAG1ha2VfbGFiZWwAZ3JhcGggbGFiZWwAaWV4Y2wAb2JqcC0+bGJsAG92YWwAbWVyZ2V2aXJ0dWFsAC9zdmcvbGlnaHRjb3JhbAAvc3ZnL2NvcmFsAFNwYXJzZU1hdHJpeF9mcm9tX2Nvb3JkaW5hdGVfYXJyYXlzX2ludGVybmFsAE11bHRpbGV2ZWxfY29hcnNlbl9pbnRlcm5hbABRdWFkVHJlZV9hZGRfaW50ZXJuYWwAYXJyb3dfbGVuZ3RoX25vcm1hbABhcmlhbAByYWRpYWwAL3N2Zy90ZWFsAHJlYWwAbG9jYWwAZXN0aW1hdGVfY2hhcmFjdGVyX3dpZHRoX2Nhbm9uaWNhbABnbG9iYWwAcS0+bAAuLi8uLi9saWIvY2dyYXBoL3NjYW4ubAB0azp0awBnaWY6dGsAcGF0Y2h3b3JrAHRvawBib29rAEF2YW50R2FyZGUtQm9vawBzaW5rAG92ZXJsYXBfc2hyaW5rAHNwaWN5cGluawAvc3ZnL2hvdHBpbmsAL3N2Zy9saWdodHBpbmsAL3N2Zy9kZWVwcGluawBuZW9ucGluawAvc3ZnL3BpbmsAbmV3cmFuawBjbHVzdGVycmFuawBfbmV3X3JhbmsAaW5zdGFsbF9pbl9yYW5rAHJlbW92ZV9mcm9tX3JhbmsAL3N2Zy9jb3Juc2lsawBvbmVibG9jawB2LT5sZWZ0LT5ibG9jayA9PSB2LT5yaWdodC0+YmxvY2sAL3N2Zy9maXJlYnJpY2sAUFFjaGVjawBwYWNrAC9zdmcvYmxhY2sAQmxhY2sAZXN0YWNrX3BvcF9iYWNrAHp3agB6d25qAGpvYi0+b2JqAGdldGludHJzeGkAcHNpAFBzaQBDYWxpYnJpAEZyaQB0d29waQBkcGkAdm9yb25vaQBWb3Jvbm9pAGNoYW5pAGRlbWkAQm9va21hbi1EZW1pAEF2YW50R2FyZGUtRGVtaQAvc3ZnL2RhcmtraGFraQAvc3ZnL2toYWtpAHBoaQBjaGkAUGhpAENoaQBkaQBYaQBQaQBORF9pZChucCkgPT0gaQBTdHJlc3NNYWpvcml6YXRpb25TbW9vdGhlcl9zbW9vdGgAU3ByaW5nU21vb3RoZXJfc21vb3RoAGJvdGgAc3RhcnRzd2l0aABsaW5lbGVuZ3RoAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGF2ZXJhZ2VfZWRnZV9sZW5ndGgAZXRoAHBlbndpZHRoAGx3aWR0aABzZXRsaW5ld2lkdGgAUHNob3J0ZXN0cGF0aABzaG9ydHBhdGgAZm9udHBhdGgAUG9ic3BhdGgAYmVnaW5wYXRoAGltYWdlcGF0aABlbmRwYXRoAHN0cmFpZ2h0X3BhdGgAbWFwX3BhdGgAPHBhdGgAY2Fubm90IGZpbmQgdHJpYW5nbGUgcGF0aABxdWV1ZV9wdXNoAC9zdmcvbGF2ZW5kZXJibHVzaABmbGVzaABvc2xhc2gAT3NsYXNoAGR0c3RyaGFzaABuZGFzaABtZGFzaABkaWdyYXBoAHN1YmdyYXBoAGNvbnN0cnVjdF9ncmFwaABjaGtTZ3JhcGgAY2xvc2VzdF9wYWlyczJncmFwaABhZ2RlbGV0ZSBvbiB3cm9uZyBncmFwaABjb25uZWN0R3JhcGgAdXBzaWgAJXNsaW5lLXRocm91Z2gAZmxhdF9zZWFyY2gAY2hhblNlYXJjaABSVHJlZVNlYXJjaABNYXJjaABEaXNjb25CcmFuY2gAUGlja0JyYW5jaABBZGRCcmFuY2gALi4vLi4vbGliL2NncmFwaC9iaXRhcnJheS5oAC4uLy4uL2xpYi9jZ3JhcGgvc3Rydmlldy5oAC4uLy4uL2xpYi9jaXJjb2dlbi9ub2RlbGlzdC5oAC4uLy4uL2xpYi9jZ3JhcGgvc29ydC5oAC4uLy4uL2xpYi9jZ3JhcGgvbm9kZV9zZXQuaAAuLi8uLi9saWIvY29tbW9uL2JveGVzLmgALi4vLi4vbGliL29ydGhvL3N0cnVjdHVyZXMuaAAuLi8uLi9saWIvZG90Z2VuL2RvdHByb2NzLmgALi4vLi4vbGliL3V0aWwvc3RyZXEuaAAuLi8uLi9saWIvY2dyYXBoL3N0YXJ0c3dpdGguaAAuLi8uLi9saWIvY2dyYXBoL2d2X21hdGguaAAuLi8uLi9saWIvY2dyYXBoL2FneGJ1Zi5oAC4uLy4uL2xpYi9jZ3JhcGgvdG9rZW5pemUuaAAuLi8uLi9saWIvY2dyYXBoL3F1ZXVlLmgALi4vLi4vbGliL2NncmFwaC9hbGxvYy5oAGF1eGcAcm93ZwBjb3JlX2xvYWRpbWFnZV9zdmcAc3ZnOnN2ZwBqcGc6c3ZnAHBuZzpzdmcAanBlZzpzdmcAZ2lmOnN2ZwBqcGU6c3ZnAHN2Z19pbmxpbmU6c3ZnAEF1ZwBkb1Byb2xvZwBwb3dlcl9pdGVyYXRpb25fb3J0aG9nAHBuZwBpZGVhbF9kaXN0X3NjaGVtZSB2YWx1ZSB3cm9uZwB4ZG90IHZlcnNpb24gIiVzIiB0b28gbG9uZwBjb25nAGxibGVuY2xvc2luZwBiYXNpY19zdHJpbmcAZmFpbHVyZSBtYWxsb2MnaW5nIGZvciByZXN1bHQgc3RyaW5nAHNwcmluZwBvcmRlcmluZwBhcmluZwBBcmluZwBEYW1waW5nAFdhcm5pbmcAb3ZlcmxhcF9zY2FsaW5nAHggYW5kIHkgc2NhbGluZwBvbGQgc2NhbGluZwBzbW9vdGhpbmcAdW5rbm93biBlbmNvZGluZwBtdWx0aWxldmVsX3NwcmluZ19lbGVjdHJpY2FsX2VtYmVkZGluZwBzcHJpbmdfZWxlY3RyaWNhbF9zcHJpbmdfZW1iZWRkaW5nAGNlbGxwYWRkaW5nAGNlbGxzcGFjaW5nAHJhbmcAbGFuZwBmaXZlcG92ZXJoYW5nAHRocmVlcG92ZXJoYW5nAG5vdmVyaGFuZwBlbWl0X2h0bWxfaW1nAGNvbGcAb3JpZwBzemxpZwBvZWxpZwBhZWxpZwBPRWxpZwBBRWxpZwBjb3JlX2xvYWRpbWFnZV9maWcAanBnOmZpZwBwbmc6ZmlnAGZpZzpmaWcAanBlZzpmaWcAZ2lmOmZpZwBqcGU6ZmlnAGVnZwBuZXh0X3NlZwByZWcAanBlZwBpID09IGRlZwBkZwBjZwBjbG9zZXN1YmcAbWlzbWF0Y2hlZCB0YWcAYmV6LT5zZmxhZwBiZXotPmVmbGFnACFmbGFnADxnACUuNWcsJS41ZywlLjVnLCUuNWcAJS41ZyAlLjVnACVnICVnAGJveEludGVyc2VjdGYAZXBzZgBhZ2VkZ2VzZXFjbXBmAGNjd3JvdGF0ZXBmAGZub2YAaW5mAHNlbGYAaGFsZgAlbGYlbGYlbGYlbGYAJWxmLCVsZiwlbGYsJWxmLCVsZgAlbGYgJWxmICVsZiAlbGYAbGliZXJhdGlvbnNlcmlmAGZyZWVzZXJpZgBzYW5zLVNlcmlmAGdpZgAvc3ZnL3BlYWNocHVmZgByaWZmAGFjY291bnRpbmdSZXBvcnREaWZmAHRhaWxocmVmAGxhYmVsaHJlZgBlZGdlaHJlZgBoZWFkaHJlZgBvcmRmAHBkZgBzaWdtYWYAXGYAJS4wTGYAJUxmAHVzLT5mACUuMDNmACVzIHRyYW5zbWl0ICUuM2YAcmdiPCU5LjNmLCAlOS4zZiwgJTkuM2Y+IHRyYW5zbWl0ICUuM2YAJS4wMmYAJS4yZgAlLjBmLCUuMGYsJS4wZiwlLjBmACAlLjBmLCUuMGYAJS4wZiAlLjBmICUuMGYgJS4wZgAiIGZpbGwtb3BhY2l0eT0iJWYAIiBzdHJva2Utb3BhY2l0eT0iJWYACmZpbmFsIGUgPSAlZgBicm9uemUAYXJyb3dzaXplAGxhYmVsZm9udHNpemUAc2VhcmNoc2l6ZQBub2RlbGlzdF9yZXNpemUAZml4ZWRzaXplAG9iamxpc3Rfc2l6ZQBub2RlbGlzdF9zaXplAHNhbWVfbGlzdF9zaXplAG5vZGVfc2V0X3NpemUAYm94ZXNfc2l6ZQBjeWNsZXNfc2l6ZQBub2Rlc19zaXplAHRleHRzcGFuX3NpemUAYmV6aWVyX3BhdGhfc2l6ZQBzdmdfc2l6ZQBzZWxmLT5jYXBhY2l0eSA+IHNlbGYtPnNpemUAYnouc2l6ZQBwb2ludC1zaXplAG5vcm1hbGl6ZQBpY3VydmUAbm9kZWxpc3RfcmVtb3ZlAG5vZGVfc2V0X3JlbW92ZQBzb2x2ZQAhdi0+YWN0aXZlAC1hY3RpdmUAZm9udF9pbl9saXN0X3Blcm1pc3NpdmUAL3N2Zy9vbGl2ZQB1Z3JhdmUAb2dyYXZlAGlncmF2ZQBlZ3JhdmUAYWdyYXZlAFVncmF2ZQBPZ3JhdmUASWdyYXZlAEVncmF2ZQBBZ3JhdmUAdHJ1ZQAvc3ZnL2Jpc3F1ZQBvYmxpcXVlAEF2YW50R2FyZGUtQm9va09ibGlxdWUAQXZhbnRHYXJkZS1EZW1pT2JsaXF1ZQBIZWx2ZXRpY2EtTmFycm93LUJvbGRPYmxpcXVlAENvdXJpZXItQm9sZE9ibGlxdWUASGVsdmV0aWNhLUJvbGRPYmxpcXVlAEhlbHZldGljYS1OYXJyb3ctT2JsaXF1ZQBDb3VyaWVyLU9ibGlxdWUASGVsdmV0aWNhLU9ibGlxdWUAbmF2eWJsdWUAL3N2Zy9saWdodHNreWJsdWUAL3N2Zy9kZWVwc2t5Ymx1ZQAvc3ZnL3NreWJsdWUAbmV3bWlkbmlnaHRibHVlAC9zdmcvbWlkbmlnaHRibHVlAC9zdmcvbGlnaHRibHVlAC9zdmcvY2FkZXRibHVlAC9zdmcvY29ybmZsb3dlcmJsdWUAL3N2Zy9kb2RnZXJibHVlAC9zdmcvcG93ZGVyYmx1ZQBuZW9uYmx1ZQAvc3ZnL21lZGl1bWJsdWUAL3N2Zy9saWdodHN0ZWVsYmx1ZQAvc3ZnL3N0ZWVsYmx1ZQAvc3ZnL3JveWFsYmx1ZQAvc3ZnL2RhcmtibHVlAHJpY2hibHVlAGxpZ2h0c2xhdGVibHVlAC9zdmcvbWVkaXVtc2xhdGVibHVlAC9zdmcvZGFya3NsYXRlYmx1ZQAvc3ZnL3NsYXRlYmx1ZQAvc3ZnL2FsaWNlYmx1ZQAvc3ZnL2JsdWUAQmx1ZQBuZWF0b19lbnF1ZXVlAFR1ZQBjb252ZXJ0U1B0b1JvdXRlAHlhY3V0ZQB1YWN1dGUAb2FjdXRlAGlhY3V0ZQBlYWN1dGUAYWFjdXRlAFlhY3V0ZQBVYWN1dGUAT2FjdXRlAElhY3V0ZQBFYWN1dGUAQWFjdXRlAHJlZmVyZW5jZSB0byBleHRlcm5hbCBlbnRpdHkgaW4gYXR0cmlidXRlAGR1cGxpY2F0ZSBhdHRyaWJ1dGUAbm90ZQBwcmltZXJzaXRlAHJpYm9zaXRlAHJlc3RyaWN0aW9uc2l0ZQBwcm90ZWFzZXNpdGUAL3N2Zy9naG9zdHdoaXRlAC9zdmcvbmF2YWpvd2hpdGUAL3N2Zy9mbG9yYWx3aGl0ZQAvc3ZnL2FudGlxdWV3aGl0ZQAvc3ZnL3doaXRlAFdoaXRlAHBvcF9vYmpfc3RhdGUAcGNwX3JvdGF0ZQBjb25jZW50cmF0ZQBkZWNvcmF0ZQBRdWFkVHJlZV9yZXB1bHNpdmVfZm9yY2VfYWNjdW11bGF0ZQBub3RyYW5zbGF0ZQAvc3ZnL2Nob2NvbGF0ZQBnZW9tVXBkYXRlAGludmhvdXNlAC9zdmcvY2hhcnRyZXVzZQBub2RlbGlzdF9yZXZlcnNlAFhNTF9QYXJzZQA8ZWxsaXBzZQBkdXN0eXJvc2UAL3N2Zy9taXN0eXJvc2UAU3BhcnNlTWF0cml4X3RyYW5zcG9zZQBhZ2Nsb3NlAGVudGl0eVRyYWNraW5nT25DbG9zZQBTcGFyc2VNYXRyaXhfbXVsdGlwbHlfZGVuc2UAZmFsc2UAL3N2Zy9tZWRpdW10dXJxdW9pc2UAL3N2Zy9kYXJrdHVycXVvaXNlAC9zdmcvcGFsZXR1cnF1b2lzZQAvc3ZnL3R1cnF1b2lzZQBwaGFzZQAvc3ZnL2F6dXJlAHNpZ25hdHVyZQBtZW1vcnkgcmUtYWxsb2NhdGlvbiBmYWlsdXJlAG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUAY29yZQBNc3F1YXJlAFBhbGF0aW5vIExpbm90eXBlAEEtPnR5cGUgPT0gQi0+dHlwZQBzdXBlAGVsbGlwc2VfdGFuZ2VudF9zbG9wZQBndnJlbmRlcl91c2Vyc2hhcGUAbWl0ZXJfc2hhcGUAbGFuZHNjYXBlAExhbmRzY2FwZQBKdW5lAG5vbmUAZG9jdW1lbnQgaXMgbm90IHN0YW5kYWxvbmUAY291c2luZQAvc3ZnL21lZGl1bWFxdWFtYXJpbmUAL3N2Zy9hcXVhbWFyaW5lADxwb2x5bGluZQAlc292ZXJsaW5lAHVuZGVybGluZQBQcm91dGVzcGxpbmUAbGluZWFyX3NwbGluZQBiX3NwbGluZQBvbGluZQBhZ3hidWZfaXNfaW5saW5lAHN2Z19pbmxpbmUAcmVmaW5lAHByaW1lAFByaW1lAC9zdmcvbGltZQBjb2xvcnNjaGVtZQBsYWJlbF9zY2hlbWUAc2FtZQBsYWJlbGZvbnRuYW1lAFVGX3NldG5hbWUAZm9udF9uYW1lAGZvbnQtPm5hbWUAdXMtPm5hbWUAcmVzZXJ2ZWQgcHJlZml4ICh4bWwpIG11c3Qgbm90IGJlIHVuZGVjbGFyZWQgb3IgYm91bmQgdG8gYW5vdGhlciBuYW1lc3BhY2UgbmFtZQBzdHlsZQAvc3ZnL3RoaXN0bGUAdGl0bGUAL3N2Zy9tZWRpdW1wdXJwbGUAZGFya3B1cnBsZQB3ZWJwdXJwbGUAcmViZWNjYXB1cnBsZQB2ZXJ5X2xpZ2h0X3B1cnBsZQBtZWRfcHVycGxlAHgxMXB1cnBsZQAvc3ZnL3B1cnBsZQBzaGFwZWZpbGUAZ3JhZGllbnRhbmdsZQByZWN0YW5nbGUAUmVjdGFuZ2xlAGxhYmVsYW5nbGUAaW52dHJpYW5nbGUAZGVzdGluYXRpb24gcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBzb3VyY2UgcG9pbnQgbm90IGluIGFueSB0cmlhbmdsZQBkZnNDeWNsZQBkb3VibGVjaXJjbGUATWNpcmNsZQBpbnZpc2libGUAdGhvcm5kYWxlAGlucHV0c2NhbGUAb3NjYWxlAGltYWdlc2NhbGUAL3N2Zy93aGl0ZXNtb2tlAG1hbmRhcmlub3JhbmdlAC9zdmcvZGFya29yYW5nZQAvc3ZnL29yYW5nZQAvc3ZnL2JlaWdlAG5ld2VkZ2UAZGVsZXRlX2Zhc3RfZWRnZQBkZWxldGVfZmxhdF9lZGdlAGFkZF90cmVlX2VkZ2UAbWFrZVN0cmFpZ2h0RWRnZQBtYWtlU2VsZkVkZ2UAbWFrZUNvbXBvdW5kRWRnZQBvc2FnZQBwYWdlAGd2bG9hZGltYWdlAHZlZQB0ZWUAUVVBRF9UUkVFX0hZQlJJRCwgc2l6ZSBsYXJnZXIgdGhhbiAlZCwgc3dpdGNoIHRvIGZhc3QgcXVhZHRyZWUAZmVhc2libGVfdHJlZQBTcGFyc2VNYXRyaXhfZGl2aWRlX3Jvd19ieV9kZWdyZWUAb2JqbGlzdF9mcmVlAG5vZGVsaXN0X2ZyZWUAc2FtZV9saXN0X2ZyZWUAbm9kZV9zZXRfZnJlZQBwb2ludHNfZnJlZQBib3hlc19mcmVlAGN5Y2xlc19mcmVlAG5vZGVfc3RhY2tfZnJlZQBuZXdub2RlAGluc3RhbGxub2RlAGFnbm9kZQBkZWxldGVfZmFzdF9ub2RlAHBhY2ttb2RlAFNwbGl0Tm9kZQBvdGlsZGUAbnRpbGRlAGF0aWxkZQBPdGlsZGUATnRpbGRlAEF0aWxkZQBkaXZpZGUAdHJhZGUAZ3JhcGh2aXpfbm9kZV9pbmR1Y2UAc291cmNlAHJlcHVsc2l2ZWZvcmNlAGlsbGVnYWwgcGFyYW1ldGVyIGVudGl0eSByZWZlcmVuY2UAZXJyb3IgaW4gcHJvY2Vzc2luZyBleHRlcm5hbCBlbnRpdHkgcmVmZXJlbmNlAHJlY3Vyc2l2ZSBlbnRpdHkgcmVmZXJlbmNlAGxhYmVsZGlzdGFuY2UAVEJfYmFsYW5jZQBUQmJhbGFuY2UAZGV2aWNlAG1vbm9zcGFjZQAvc3ZnL29sZGxhY2UAZmFjZQBzdWJlACAtYW5jaG9yIGUAczEtPmNvbW1fY29vcmQ9PXMyLT5jb21tX2Nvb3JkAE1yZWNvcmQAZm9yd2FyZABwcm9kAGxpZ2h0Z29sZGVucm9kAG1lZGl1bWdvbGRlbnJvZAAvc3ZnL2Rhcmtnb2xkZW5yb2QAL3N2Zy9wYWxlZ29sZGVucm9kAC9zdmcvZ29sZGVucm9kAC9zdmcvYnVybHl3b29kAGxpZ2h0d29vZABtZWRpdW13b29kAGRhcmt3b29kAF9iYWNrZ3JvdW5kAGNvbXBvdW5kAG5vIGVsZW1lbnQgZm91bmQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQAL3N2Zy9ibGFuY2hlZGFsbW9uZABhcnJvd19sZW5ndGhfZGlhbW9uZABNZGlhbW9uZABub2RlX3NldF9maW5kAGd2dXNlcnNoYXBlX2ZpbmQAb2JqbGlzdF90cnlfYXBwZW5kAGRlZ2xpc3RfdHJ5X2FwcGVuZABub2RlbGlzdF90cnlfYXBwZW5kAGNsaXN0X3RyeV9hcHBlbmQAc2FtZV9saXN0X3RyeV9hcHBlbmQAZWRnZV9saXN0X3RyeV9hcHBlbmQAcG9pbnRzX3RyeV9hcHBlbmQAYm94ZXNfdHJ5X2FwcGVuZABsYXllcl9uYW1lc190cnlfYXBwZW5kAGN5Y2xlc190cnlfYXBwZW5kAG5vZGVzX3RyeV9hcHBlbmQAdmFyYXJyX3RyeV9hcHBlbmQAZXN0YWNrX3RyeV9hcHBlbmQAaW50X3N0YWNrX3RyeV9hcHBlbmQAbm9kZV9zdGFja190cnlfYXBwZW5kAGJlemllcl9wYXRoX3RyeV9hcHBlbmQAaXJhbmQAZXhwYW5kAGN1bWJlcmxhbmQAYnJpZ2h0Z29sZABvbGRnb2xkAC9zdmcvZ29sZABib2xkAEhlbHZldGljYS1OYXJyb3ctQm9sZABUaW1lcy1Cb2xkAENvdXJpZXItQm9sZABQYWxhdGluby1Cb2xkAE5ld0NlbnR1cnlTY2hsYmstQm9sZABIZWx2ZXRpY2EtQm9sZAAlMCpsbGQAJSpsbGQAKyVsbGQAbi0+YnJhbmNoW2ldLmNoaWxkACUrLjRsZAAlcyVsZABzb2xpZAAvc3ZnL21lZGl1bW9yY2hpZAAvc3ZnL2RhcmtvcmNoaWQAL3N2Zy9vcmNoaWQAaWxsZWdhbCBjaGFyYWN0ZXIocykgaW4gcHVibGljIGlkAGRpamtzdHJhX3NnZABmaXhlZABjdXJ2ZWQAZGVyaXZlZABkb3R0ZWQAbWVtb3J5IGV4aGF1c3RlZABsb2NhbGUgbm90IHN1cHBvcnRlZABwYXJzaW5nIGFib3J0ZWQAYXR0cmlidXRlIG1hY3JvcyBub3QgaW1wbGVtZW50ZWQAYWNjb3VudGluZ0RpZmZUb2xlcmF0ZWQAZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZABjb25kZW5zZWQAL3N2Zy9tZWRpdW12aW9sZXRyZWQAL3N2Zy9wYWxldmlvbGV0cmVkAEltcHJvcGVyICVzIHZhbHVlICVzIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA8ICVkIC0gdG9vIHNtYWxsIC0gaWdub3JlZAAlcyB2YWx1ZSAlcyA+ICVkIC0gdG9vIGxhcmdlIC0gaWdub3JlZAAvc3ZnL2luZGlhbnJlZAAvc3ZnL2RhcmtyZWQAYSBzdWNjZXNzZnVsIHByaW9yIGNhbGwgdG8gZnVuY3Rpb24gWE1MX0dldEJ1ZmZlciBpcyByZXF1aXJlZAB0YXBlcmVkAC9zdmcvb3JhbmdlcmVkAHJlc2VydmVkIHByZWZpeCAoeG1sbnMpIG11c3Qgbm90IGJlIGRlY2xhcmVkIG9yIHVuZGVjbGFyZWQAL3N2Zy9yZWQAc3RyaXBlZABpbGwtY29uZGl0aW9uZWQAdW5kZWZpbmVkAG5vdCBjb25zdHJhaW5lZABsYWJlbGFsaWduZWQAdGV4dCBkZWNsYXJhdGlvbiBub3Qgd2VsbC1mb3JtZWQAWE1MIGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZAB1bmZpbGxlZABpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkAHRyaWFuZ3VsYXRpb24gZmFpbGVkAHBhcnNpbmcgZmluaXNoZWQAZGFzaGVkAGxpbWl0IG9uIGlucHV0IGFtcGxpZmljYXRpb24gZmFjdG9yIChmcm9tIERURCBhbmQgZW50aXRpZXMpIGJyZWFjaGVkAHdlZGdlZABzaXplPT1mcmVlZAByb3VuZGVkAHBhcnNlciBub3Qgc3VzcGVuZGVkAHBhcnNlciBzdXNwZW5kZWQAV2VkAFJlZABTcGFyc2VNYXRyaXhfYWRkAG5vZGVfc2V0X2FkZABkZCAhPSBwYXJlbnRfZGQAS1BfQWRkAHBhZAB4bGhkeHVubG9hZAByZWFkAGFycm93aGVhZABsaGVhZABzYW1laGVhZABib3gzZAAlc18lZABfc3Bhbl8lZABfYmxvY2tfJWQAX3dlYWtfJWQAX2Nsb25lXyVkAC4lZAAlWS0lbS0lZAAlbGYsJWQAJXMgaW4gbGluZSAlZAAlJSUlQm91bmRpbmdCb3g6ICVkICVkICVkICVkACJfc3ViZ3JhcGhfY250IjogJWQAIl9ndmlkIjogJWQAImhlYWQiOiAlZABhZ3hicHV0YwB2cHNjAGNwLT5zcmMAdWNpcmMAb2NpcmMAaWNpcmMAZWNpcmMAYWNpcmMAVWNpcmMAT2NpcmMASWNpcmMARWNpcmMAQWNpcmMAbGFiZWxsb2MAZ3ZfcmVjYWxsb2MAc3RkOjpiYWRfYWxsb2MAYmFrZXJzY2hvYwBzZW1pU3dlZXRDaG9jAG1jAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMAcGljOnBpYwBpdGFsaWMAQm9va21hbi1MaWdodEl0YWxpYwBaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljAEJvb2ttYW4tRGVtaUl0YWxpYwBUaW1lcy1Cb2xkSXRhbGljAFBhbGF0aW5vLUJvbGRJdGFsaWMATmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljAFRpbWVzLUl0YWxpYwBQYWxhdGluby1JdGFsaWMATmV3Q2VudHVyeVNjaGxiay1JdGFsaWMAcmFkaWMAI2ZjZmNmYwA6ICUuMmYgc2VjAGxpc3RkZWxyZWMAbGV2ZWwgZ3JhcGggcmVjAGxldmVsIGVkZ2UgcmVjAGxldmVsIG5vZGUgcmVjAERlYwBfbmVhdG9fY2MAYmMAdmlzaWJpbGl0eS5jAFNwYXJzZU1hdHJpeC5jAGh0bWxsZXguYwBpbmRleC5jAHNtYXJ0X2luaV94LmMAZ3ZyZW5kZXJfY29yZV9wb3YuYwBjdnQuYwBsYXlvdXQuYwB0ZXh0c3Bhbl9sdXQuYwBhZGp1c3QuYwBub2RlbGlzdC5jAHNob3J0ZXN0LmMAY2xvc2VzdC5jAHNhbWVwb3J0LmMAZ3ZyZW5kZXJfY29yZV9kb3QuYwBjb25zdHJhaW50LmMAZG90aW5pdC5jAG5lYXRvaW5pdC5jAHBhdGNod29ya2luaXQuYwBvc2FnZWluaXQuYwBlbWl0LmMAZmxhdC5jAGFycm93cy5jAG1pbmNyb3NzLmMAc3RyZXNzLmMAcG9zdF9wcm9jZXNzLmMAY2NvbXBzLmMAbnMuYwB1dGlscy5jAHhsYWJlbHMuYwBzaGFwZXMuYwBkb3RzcGxpbmVzLmMAbmVhdG9zcGxpbmVzLmMAY2x1c3RlcmVkZ2VzLmMAYXR0ci5jAGZhc3Rnci5jAGNsdXN0ZXIuYwB0YXBlci5jAGd2cmVuZGVyLmMAc3BsaXQucS5jAGRlY29tcC5jAGd2cmVuZGVyX2NvcmVfbWFwLmMAb3J0aG8uYwBndnJlbmRlcl9jb3JlX2pzb24uYwBwb3NpdGlvbi5jAHRleHRzcGFuLmMAZ2VvbS5jAHJvdXRlc3BsLmMAeG1sLmMATXVsdGlsZXZlbC5jAGdlbmVyYWwuYwBzcHJpbmdfZWxlY3RyaWNhbC5jAGd2cmVuZGVyX2NvcmVfdGsuYwByYW5rLmMAcGFjay5jAGJsb2NrcGF0aC5jAGR0c3RyaGFzaC5jAHJhd2dyYXBoLmMAZ3ZyZW5kZXJfY29yZV9zdmcuYwBndnJlbmRlcl9jb3JlX2ZpZy5jAHN0dWZmLmMAbWF6ZS5jAHF1YWRfcHJvZ19zb2x2ZS5jAHNwYXJzZV9zb2x2ZS5jAHJvdXRlLmMAd3JpdGUuYwBjb2x4bGF0ZS5jAHhtbHBhcnNlLmMAZWxsaXBzZS5jAGd2bG9hZGltYWdlX2NvcmUuYwBndnVzZXJzaGFwZS5jAHJlY3RhbmdsZS5jAGNpcmNsZS5jAGh0bWx0YWJsZS5jAGVkZ2UuYwBndmxvYWRpbWFnZS5jAGJsb2NrdHJlZS5jAFF1YWRUcmVlLmMAbm9kZS5jAG5vZGVfaW5kdWNlLmMAZ3ZkZXZpY2UuYwBjb21wb3VuZC5jAHRyYXBlem9pZC5jAHNnZC5jAGNvbmMuYwByZWMuYwBkaWprc3RyYS5jAGZQUS5jAGNsYXNzMi5jACVsZiwlbGYsJWxmLCVsZiVjACVsZiwlbGYsJWxmLCVbXixdJWMAXCVjACRjAG5zdWIAc2V0aHNiAHJiAHByb3RlY3RfcnNxYgBqb2IAY29yZV9sb2FkaW1hZ2VfcHNsaWIARmViAG9kYgBpbml0X3NwbGluZXNfYmIAYmV6aWVyX2JiAHByb3RlaW5zdGFiAHJuYXN0YWIAL3N2Zy9vbGl2ZWRyYWIAXGIAcndhAC9zdmcvYXF1YQBpb3RhAElvdGEAL3N2Zy9kYXJrbWFnZW50YQAvc3ZnL21hZ2VudGEAZGVsdGEARGVsdGEAemV0YQB0aGV0YQBUaGV0YQBiZXRhAFpldGEAQmV0YQBfQUdfc3RyZGF0YQBwcmV2ICE9IG9iai0+ZGF0YQBtYWtlR3JhcGhEYXRhAEV0YQBuaW1idXNzYW5zYQBwYXJhAGthcHBhAEthcHBhAC9zdmcvc2llbm5hAFZlcmRhbmEAZ2FtbWEAR2FtbWEAc2lnbWEAU2lnbWEAY29uc29sYQBuYWJsYQAvc3ZnL2Z1Y2hzaWEAR2VvcmdpYQBhbHBoYQBBbHBoYQBvbWVnYQBPbWVnYQBhcmVhAFJlY3RBcmVhAGxhbWJkYQBMYW1iZGEAaGVsdmV0aWNhAEhlbHZldGljYQBtaWNhAD48YQBgAF90ZHJhd18AX3RsZHJhd18AX2hsZHJhd18AX2xkcmF3XwBfaGRyYXdfAF9kcmF3XwBkb3Rfc3BsaW5lc18AJXNfAHBhZ2UlZCwlZF8AX2NjXwAgaWQ9ImFfAF4Abl9lZGdlcyA9PSBncmFwaC0+c291cmNlc1tncmFwaC0+bl0AamRbbWFza1tqY1trXV1dID09IGpjW2tdAGpjW21hc2tbamJba11dXSA9PSBqYltrXQBqYVttYXNrW2phW2pdXV0gPT0gamFbal0AcS0+cXRzW2lpXQAhcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnRha2VuW2ldAHItPmJvdW5kYXJ5W2ldIDw9IHItPmJvdW5kYXJ5W05VTURJTVMgKyBpXQBbJS4wM2YsJS4wM2ZdAFtpbnRlcm5hbCBoYXJkLWNvZGVkXQBucC0+Y2VsbHNbMV0AbnAtPmNlbGxzWzBdAHVzLT5uYW1lWzBdAGNwLT5zcmNbMF0AWy4uXQBcXAAicG9pbnRzIjogWwAic3RvcHMiOiBbAAlbAFoAY29tcHV0ZVNjYWxlWFkAeTw9WQAlYSAlYiAlZCAlSDolTTolUyAlWQBQT1NJWAB0YXJnZXQgPD0gKHNpemVfdClJTlRfTUFYAHcgPj0gMCAmJiB3IDw9IElOVF9NQVgAZV9jbnQgPD0gSU5UX01BWABwYWlyLnJpZ2h0IDw9IElOVF9NQVgAcGFpci5sZWZ0IDw9IElOVF9NQVgAbl9lZGdlcyA8PSBJTlRfTUFYAHN0cC5udmVydGljZXMgPD0gSU5UX01BWABvYnNbcG9seV9pXS0+cG4gPD0gSU5UX01BWABpbnB1dF9yb3V0ZS5wbiA8PSBJTlRfTUFYAGdyYXBoLT5uIDw9IElOVF9NQVgAcG5sbCA8PSBJTlRfTUFYAGggPj0gMCAmJiBoIDw9IElOVF9NQVgAVHJlZV9lZGdlLnNpemUgPD0gSU5UX01BWABlX2NudCAtIDEgPD0gSU5UX01BWABjbGlzdF9zaXplKCZsaXN0KSAtIDEgPD0gSU5UX01BWABsYXllcl9uYW1lc19zaXplKCZsYXllcklEcykgLSAxIDw9IElOVF9NQVgAc3RybGVuKGFyZ3MpIDw9IElOVF9NQVgAb2JqbGlzdF9zaXplKCZvYmpsKSA8PSBJTlRfTUFYAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPD0gSU5UX01BWAByZWN0LmJvdW5kYXJ5WzNdIDwgSU5UX01BWAByZWN0LmJvdW5kYXJ5WzJdIDwgSU5UX01BWAByZXN1bHQgPD0gKGludClVQ0hBUl9NQVgAc3N6IDw9IFVDSEFSX01BWABjb2wgPj0gMCAmJiBjb2wgPD0gVUlOVDE2X01BWAB4PD1YAFcAVgBVAFxUAFRFWFQAU1RSRVNTX01BSk9SSVpBVElPTl9QT1dFUl9ESVNUAFNUUkVTU19NQUpPUklaQVRJT05fR1JBUEhfRElTVABTVFJFU1NfTUFKT1JJWkFUSU9OX0FWR19ESVNUAEZBU1QARk9OVABiID09IEJfUklHSFQASEVJR0hUAEJfTEVGVABfJWxsdV9TVVNQRUNUAEJUAFRyZWJ1Y2hldCBNUwBJTlZJUwAlSDolTTolUwBWUgBUUgBBLT5mb3JtYXQgPT0gQi0+Zm9ybWF0ICYmIEEtPmZvcm1hdCA9PSBGT1JNQVRfQ1NSAExSAERJUgBIUgBDRU5URVIAJSVUUkFJTEVSAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTCB8fCBBLT50eXBlID09IE1BVFJJWF9UWVBFX0lOVEVHRVIAQ0VMTEJPUkRFUgBCUgAqUgBRAEVYUABCX1VQAFNVUABUT1AATwBtYXBOAFxOAEJfRE9XTgBUSE9STgAlJUJFR0lOAFJPV1NQQU4AQ09MU1BBTgBOQU4AUE0AQk9UVE9NAEJNAEFNACVIOiVNAFxMAHRhaWxVUkwAbGFiZWxVUkwAZWRnZVVSTABoZWFkVVJMAEhUTUwAeCE9TlVMTABxdWV1ZV9wb3AoJnEpID09IE5VTEwARURfdG9fdmlydChvcmlnKSA9PSBOVUxMAEVEX3RvX3ZpcnQoZSkgPT0gTlVMTABwcmVmaXggIT0gTlVMTABkdGQtPnNjYWZmSW5kZXggIT0gTlVMTABpbnB1dCAhPSBOVUxMAGxpc3QgIT0gTlVMTAByZWZlcmVudCAhPSBOVUxMAHMgIT0gTlVMTABhdHRyICE9IE5VTEwAbGVhZGVyICE9IE5VTEwAcSAhPSBOVUxMAGl0ZW0gIT0gTlVMTABoYXlzdGFjayAhPSBOVUxMAHNjcmF0Y2ggIT0gTlVMTABvcnRob2cgIT0gTlVMTABzZWxmICE9IE5VTEwAdmFsdWUgIT0gTlVMTABqb2ItPm91dHB1dF9maWxlICE9IE5VTEwAc291cmNlICE9IE5VTEwAam9iICE9IE5VTEwAc291cmNlLmRhdGEgIT0gTlVMTABiLmRhdGEgIT0gTlVMTABhLmRhdGEgIT0gTlVMTABsaXN0ICYmIGxpc3RbMF0gIT0gTlVMTABBRiAhPSBOVUxMAEVEX3RvX3ZpcnQob3JpZykgIT0gTlVMTABMQ19BTEwAQkwAYmVzdGNvc3QgPCBIVUdFX1ZBTABOT1JNQUwAUkFESUFMAEEtPnR5cGUgPT0gTUFUUklYX1RZUEVfUkVBTABVUlcgQ2hhbmNlcnkgTABVUlcgQm9va21hbiBMAENlbnR1cnkgU2Nob29sYm9vayBMAFVSVyBHb3RoaWMgTABLSwBKAGkgPCBNQVhfSQBQLT5lbmQudGhldGEgPCAyICogTV9QSQBBU0NJSQBcSABFVEgAV0lEVEgARE9URk9OVFBBVEgAR0RGT05UUEFUSABta05Db25zdHJhaW50RwBcRwBFWFBBVF9FTlRJVFlfREVCVUcARVhQQVRfRU5UUk9QWV9ERUJVRwBFWFBBVF9BQ0NPVU5USU5HX0RFQlVHAFJORwBTUFJJTkcAQ0VMTFBBRERJTkcAQ0VMTFNQQUNJTkcATEFORwBJTUcAXHhGACUlRU9GAElORgBceEZGAFJJRkYAZGVsdGEgPD0gMHhGRkZGAFx4RUYAXHhERgBceENGAFx4QkYAXHhBRgBceDlGAFx4OEYAXHg3RgBceDFGAFx4RQBcRQBQT0lOVC1TSVpFAFRSVUUAQ0xPU0UARkFMU0UAa2luZCA9PSBMVF9OT05FAEdSQURJRU5UQU5HTEUAVFJJQU5HTEUATUlERExFAElOVklTSUJMRQBUQUJMRQBBR1RZUEUob2JqKSA9PSBBR0lORURHRSB8fCBBR1RZUEUob2JqKSA9PSBBR09VVEVER0UAXHhGRQBceEVFAFx4REUAQl9OT0RFAFx4Q0UAXHhCRQBceEFFAFx4OUUAXHg4RQBceDFFAFREAEEtPmZvcm1hdCA9PSBGT1JNQVRfQ09PUkQAbiAmJiBpID49IDAgJiYgaSA8IE5PREVDQVJEACUlRU5EAEhZQlJJRABTT0xJRABceEZEAFx4RUQARE9UVEVEAERBU0hFRABST1VOREVEAFx4REQAXHhDRABceEJEAFx4QUQAXHg5RABceDhEAFx4MUQAXHhDAGRlbGV0ZVZQU0MAXHhGQwBceEVDAFx4REMAXHhDQwBceEJDAFx4QUMAXHg5QwBceDhDAFx4MUMAXHhCAFNVQgBceEZCAFx4RUIAXHhEQgBceENCAFx4QkIAXHhBQgBceDlCAFx4OEIAXHgxQgBBICYmIEIAXHhGQQBceEVBAFx4REEAXHhDQQBceEJBAFx4QUEAXHg5QQBceDhBAFx4MUEAQAA/ADwlcz4APG5pbD4APC90c3Bhbj48L3RleHRQYXRoPgAKICAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPgA+Cjx0aXRsZT4APEZPTlQ+ADxCUj4APEhUTUw+ADwvSFRNTD4APElNRz4AU3ludGF4IGVycm9yOiBub24tc3BhY2Ugc3RyaW5nIHVzZWQgYmVmb3JlIDxUQUJMRT4AU3ludGF4IGVycm9yOiBub24tc3BhY2Ugc3RyaW5nIHVzZWQgYWZ0ZXIgPC9UQUJMRT4APFREPgAtPgAiPgAJW2tleT0APD0APAAmI3gleDsAJnF1b3Q7ACZsdDsAJmd0OwAmYW1wOwAjJWQ7ACYjMzk7ACYjNDU7ACYjOTM7ACYjMTM7ACYjMTYwOwAmIzEwOwA7c3RvcC1vcGFjaXR5OgAlJUJvdW5kaW5nQm94OgBjYWxjdWxhdGluZyBzaG9ydGVzdCBwYXRocyBhbmQgc2V0dGluZyB1cCBzdHJlc3MgdGVybXM6ADxzdG9wIG9mZnNldD0iJS4wM2YiIHN0eWxlPSJzdG9wLWNvbG9yOgA8c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOgA8c3RvcCBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOgBzb2x2aW5nIG1vZGVsOgAvXDoAZ3JleTkAZ3JheTkAXHhGOQBceEU5AFx4RDkAXHhDOQBceEI5AFx4QTkAZ3JleTk5AGdyYXk5OQBceDk5AGdyZXk4OQBncmF5ODkAXHg4OQAwMTIzNDU2Nzg5AGdyZXk3OQBncmF5NzkAZ3JleTY5AGdyYXk2OQBncmV5NTkAZ3JheTU5AGdyZXk0OQBncmF5NDkAZ3JleTM5AGdyYXkzOQBncmV5MjkAZ3JheTI5AGdyZXkxOQBncmF5MTkAXHgxOQAvcmRneTkvOQAvYnVwdTkvOQAvcmRwdTkvOQAvcHVidTkvOQAveWxnbmJ1OS85AC9nbmJ1OS85AC9yZHlsYnU5LzkAL3JkYnU5LzkAL2dyZXlzOS85AC9ncmVlbnM5LzkAL2JsdWVzOS85AC9wdXJwbGVzOS85AC9vcmFuZ2VzOS85AC9yZWRzOS85AC9wdW9yOS85AC95bG9yYnI5LzkAL3B1YnVnbjkvOQAvYnVnbjkvOQAvcHJnbjkvOQAvcmR5bGduOS85AC95bGduOS85AC9zcGVjdHJhbDkvOQAvcGl5ZzkvOQAvYnJiZzkvOQAvcHVyZDkvOQAveWxvcnJkOS85AC9vcnJkOS85AC9wYWlyZWQ5LzkAL3NldDM5LzkAL3NldDE5LzkAL3Bhc3RlbDE5LzkAL3BhaXJlZDEyLzkAL3NldDMxMi85AC9yZGd5MTEvOQAvcmR5bGJ1MTEvOQAvcmRidTExLzkAL3B1b3IxMS85AC9wcmduMTEvOQAvcmR5bGduMTEvOQAvc3BlY3RyYWwxMS85AC9waXlnMTEvOQAvYnJiZzExLzkAL3BhaXJlZDExLzkAL3NldDMxMS85AC9yZGd5MTAvOQAvcmR5bGJ1MTAvOQAvcmRidTEwLzkAL3B1b3IxMC85AC9wcmduMTAvOQAvcmR5bGduMTAvOQAvc3BlY3RyYWwxMC85AC9waXlnMTAvOQAvYnJiZzEwLzkAL3BhaXJlZDEwLzkAL3NldDMxMC85AGdyZXk4AGdyYXk4AFx4OAB1dGY4ACNmOGY4ZjgAI2U4ZThlOABceEY4AEdJRjgAXHhFOABceEQ4AFx4QzgAXHhCOABceEE4AGdyZXk5OABncmF5OTgAXHg5OABncmV5ODgAZ3JheTg4AFx4ODgAZ3JleTc4AGdyYXk3OABncmV5NjgAZ3JheTY4AGdyZXk1OABncmF5NTgAZ3JleTQ4AGdyYXk0OABncmV5MzgAZ3JheTM4AGdyZXkyOABncmF5MjgAZ3JleTE4AGdyYXkxOABceDE4AC9yZGd5OS84AC9idXB1OS84AC9yZHB1OS84AC9wdWJ1OS84AC95bGduYnU5LzgAL2duYnU5LzgAL3JkeWxidTkvOAAvcmRidTkvOAAvZ3JleXM5LzgAL2dyZWVuczkvOAAvYmx1ZXM5LzgAL3B1cnBsZXM5LzgAL29yYW5nZXM5LzgAL3JlZHM5LzgAL3B1b3I5LzgAL3lsb3JicjkvOAAvcHVidWduOS84AC9idWduOS84AC9wcmduOS84AC9yZHlsZ245LzgAL3lsZ245LzgAL3NwZWN0cmFsOS84AC9waXlnOS84AC9icmJnOS84AC9wdXJkOS84AC95bG9ycmQ5LzgAL29ycmQ5LzgAL3BhaXJlZDkvOAAvc2V0MzkvOAAvc2V0MTkvOAAvcGFzdGVsMTkvOAAvcmRneTgvOAAvYnVwdTgvOAAvcmRwdTgvOAAvcHVidTgvOAAveWxnbmJ1OC84AC9nbmJ1OC84AC9yZHlsYnU4LzgAL3JkYnU4LzgAL2FjY2VudDgvOAAvZ3JleXM4LzgAL2dyZWVuczgvOAAvYmx1ZXM4LzgAL3B1cnBsZXM4LzgAL29yYW5nZXM4LzgAL3JlZHM4LzgAL3B1b3I4LzgAL3lsb3JicjgvOAAvcHVidWduOC84AC9idWduOC84AC9wcmduOC84AC9yZHlsZ244LzgAL3lsZ244LzgAL3NwZWN0cmFsOC84AC9waXlnOC84AC9icmJnOC84AC9wdXJkOC84AC95bG9ycmQ4LzgAL29ycmQ4LzgAL3BhaXJlZDgvOAAvc2V0MzgvOAAvc2V0MjgvOAAvcGFzdGVsMjgvOAAvZGFyazI4LzgAL3NldDE4LzgAL3Bhc3RlbDE4LzgAL3BhaXJlZDEyLzgAL3NldDMxMi84AC9yZGd5MTEvOAAvcmR5bGJ1MTEvOAAvcmRidTExLzgAL3B1b3IxMS84AC9wcmduMTEvOAAvcmR5bGduMTEvOAAvc3BlY3RyYWwxMS84AC9waXlnMTEvOAAvYnJiZzExLzgAL3BhaXJlZDExLzgAL3NldDMxMS84AC9yZGd5MTAvOAAvcmR5bGJ1MTAvOAAvcmRidTEwLzgAL3B1b3IxMC84AC9wcmduMTAvOAAvcmR5bGduMTAvOAAvc3BlY3RyYWwxMC84AC9waXlnMTAvOAAvYnJiZzEwLzgAL3BhaXJlZDEwLzgAL3NldDMxMC84AHV0Zi04AEMuVVRGLTgAZ3JleTcAZ3JheTcAXHg3AFx4RjcAXHhFNwBceEQ3AFx4QzcAXHhCNwBceEE3AGdyZXk5NwBncmF5OTcAXHg5NwBncmV5ODcAZ3JheTg3AFx4ODcAZ3JleTc3AGdyYXk3NwBncmV5NjcAZ3JheTY3AGdyZXk1NwBncmF5NTcAZ3JleTQ3AGdyYXk0NwBncmV5MzcAZ3JheTM3AGdyZXkyNwBncmF5MjcAZ3JleTE3AGdyYXkxNwBceDE3AC9yZGd5OS83AC9idXB1OS83AC9yZHB1OS83AC9wdWJ1OS83AC95bGduYnU5LzcAL2duYnU5LzcAL3JkeWxidTkvNwAvcmRidTkvNwAvZ3JleXM5LzcAL2dyZWVuczkvNwAvYmx1ZXM5LzcAL3B1cnBsZXM5LzcAL29yYW5nZXM5LzcAL3JlZHM5LzcAL3B1b3I5LzcAL3lsb3JicjkvNwAvcHVidWduOS83AC9idWduOS83AC9wcmduOS83AC9yZHlsZ245LzcAL3lsZ245LzcAL3NwZWN0cmFsOS83AC9waXlnOS83AC9icmJnOS83AC9wdXJkOS83AC95bG9ycmQ5LzcAL29ycmQ5LzcAL3BhaXJlZDkvNwAvc2V0MzkvNwAvc2V0MTkvNwAvcGFzdGVsMTkvNwAvcmRneTgvNwAvYnVwdTgvNwAvcmRwdTgvNwAvcHVidTgvNwAveWxnbmJ1OC83AC9nbmJ1OC83AC9yZHlsYnU4LzcAL3JkYnU4LzcAL2FjY2VudDgvNwAvZ3JleXM4LzcAL2dyZWVuczgvNwAvYmx1ZXM4LzcAL3B1cnBsZXM4LzcAL29yYW5nZXM4LzcAL3JlZHM4LzcAL3B1b3I4LzcAL3lsb3JicjgvNwAvcHVidWduOC83AC9idWduOC83AC9wcmduOC83AC9yZHlsZ244LzcAL3lsZ244LzcAL3NwZWN0cmFsOC83AC9waXlnOC83AC9icmJnOC83AC9wdXJkOC83AC95bG9ycmQ4LzcAL29ycmQ4LzcAL3BhaXJlZDgvNwAvc2V0MzgvNwAvc2V0MjgvNwAvcGFzdGVsMjgvNwAvZGFyazI4LzcAL3NldDE4LzcAL3Bhc3RlbDE4LzcAL3JkZ3k3LzcAL2J1cHU3LzcAL3JkcHU3LzcAL3B1YnU3LzcAL3lsZ25idTcvNwAvZ25idTcvNwAvcmR5bGJ1Ny83AC9yZGJ1Ny83AC9hY2NlbnQ3LzcAL2dyZXlzNy83AC9ncmVlbnM3LzcAL2JsdWVzNy83AC9wdXJwbGVzNy83AC9vcmFuZ2VzNy83AC9yZWRzNy83AC9wdW9yNy83AC95bG9yYnI3LzcAL3B1YnVnbjcvNwAvYnVnbjcvNwAvcHJnbjcvNwAvcmR5bGduNy83AC95bGduNy83AC9zcGVjdHJhbDcvNwAvcGl5ZzcvNwAvYnJiZzcvNwAvcHVyZDcvNwAveWxvcnJkNy83AC9vcnJkNy83AC9wYWlyZWQ3LzcAL3NldDM3LzcAL3NldDI3LzcAL3Bhc3RlbDI3LzcAL2RhcmsyNy83AC9zZXQxNy83AC9wYXN0ZWwxNy83AC9wYWlyZWQxMi83AC9zZXQzMTIvNwAvcmRneTExLzcAL3JkeWxidTExLzcAL3JkYnUxMS83AC9wdW9yMTEvNwAvcHJnbjExLzcAL3JkeWxnbjExLzcAL3NwZWN0cmFsMTEvNwAvcGl5ZzExLzcAL2JyYmcxMS83AC9wYWlyZWQxMS83AC9zZXQzMTEvNwAvcmRneTEwLzcAL3JkeWxidTEwLzcAL3JkYnUxMC83AC9wdW9yMTAvNwAvcHJnbjEwLzcAL3JkeWxnbjEwLzcAL3NwZWN0cmFsMTAvNwAvcGl5ZzEwLzcAL2JyYmcxMC83AC9wYWlyZWQxMC83AC9zZXQzMTAvNwAxLjcAZ3JleTYAZ3JheTYAXHg2AFx4RjYAXHhFNgBceEQ2AFx4QzYAXHhCNgBceEE2AGdyZXk5NgBncmF5OTYAXHg5NgBncmV5ODYAZ3JheTg2AFx4ODYAZ3JleTc2AGdyYXk3NgBncmV5NjYAZ3JheTY2AGdyZXk1NgBncmF5NTYAZ3JleTQ2AGdyYXk0NgBncmV5MzYAZ3JheTM2AGdyZXkyNgBncmF5MjYAZ3JleTE2AGdyYXkxNgBceDE2AC9yZGd5OS82AC9idXB1OS82AC9yZHB1OS82AC9wdWJ1OS82AC95bGduYnU5LzYAL2duYnU5LzYAL3JkeWxidTkvNgAvcmRidTkvNgAvZ3JleXM5LzYAL2dyZWVuczkvNgAvYmx1ZXM5LzYAL3B1cnBsZXM5LzYAL29yYW5nZXM5LzYAL3JlZHM5LzYAL3B1b3I5LzYAL3lsb3JicjkvNgAvcHVidWduOS82AC9idWduOS82AC9wcmduOS82AC9yZHlsZ245LzYAL3lsZ245LzYAL3NwZWN0cmFsOS82AC9waXlnOS82AC9icmJnOS82AC9wdXJkOS82AC95bG9ycmQ5LzYAL29ycmQ5LzYAL3BhaXJlZDkvNgAvc2V0MzkvNgAvc2V0MTkvNgAvcGFzdGVsMTkvNgAvcmRneTgvNgAvYnVwdTgvNgAvcmRwdTgvNgAvcHVidTgvNgAveWxnbmJ1OC82AC9nbmJ1OC82AC9yZHlsYnU4LzYAL3JkYnU4LzYAL2FjY2VudDgvNgAvZ3JleXM4LzYAL2dyZWVuczgvNgAvYmx1ZXM4LzYAL3B1cnBsZXM4LzYAL29yYW5nZXM4LzYAL3JlZHM4LzYAL3B1b3I4LzYAL3lsb3JicjgvNgAvcHVidWduOC82AC9idWduOC82AC9wcmduOC82AC9yZHlsZ244LzYAL3lsZ244LzYAL3NwZWN0cmFsOC82AC9waXlnOC82AC9icmJnOC82AC9wdXJkOC82AC95bG9ycmQ4LzYAL29ycmQ4LzYAL3BhaXJlZDgvNgAvc2V0MzgvNgAvc2V0MjgvNgAvcGFzdGVsMjgvNgAvZGFyazI4LzYAL3NldDE4LzYAL3Bhc3RlbDE4LzYAL3JkZ3k3LzYAL2J1cHU3LzYAL3JkcHU3LzYAL3B1YnU3LzYAL3lsZ25idTcvNgAvZ25idTcvNgAvcmR5bGJ1Ny82AC9yZGJ1Ny82AC9hY2NlbnQ3LzYAL2dyZXlzNy82AC9ncmVlbnM3LzYAL2JsdWVzNy82AC9wdXJwbGVzNy82AC9vcmFuZ2VzNy82AC9yZWRzNy82AC9wdW9yNy82AC95bG9yYnI3LzYAL3B1YnVnbjcvNgAvYnVnbjcvNgAvcHJnbjcvNgAvcmR5bGduNy82AC95bGduNy82AC9zcGVjdHJhbDcvNgAvcGl5ZzcvNgAvYnJiZzcvNgAvcHVyZDcvNgAveWxvcnJkNy82AC9vcnJkNy82AC9wYWlyZWQ3LzYAL3NldDM3LzYAL3NldDI3LzYAL3Bhc3RlbDI3LzYAL2RhcmsyNy82AC9zZXQxNy82AC9wYXN0ZWwxNy82AC9yZGd5Ni82AC9idXB1Ni82AC9yZHB1Ni82AC9wdWJ1Ni82AC95bGduYnU2LzYAL2duYnU2LzYAL3JkeWxidTYvNgAvcmRidTYvNgAvYWNjZW50Ni82AC9ncmV5czYvNgAvZ3JlZW5zNi82AC9ibHVlczYvNgAvcHVycGxlczYvNgAvb3JhbmdlczYvNgAvcmVkczYvNgAvcHVvcjYvNgAveWxvcmJyNi82AC9wdWJ1Z242LzYAL2J1Z242LzYAL3ByZ242LzYAL3JkeWxnbjYvNgAveWxnbjYvNgAvc3BlY3RyYWw2LzYAL3BpeWc2LzYAL2JyYmc2LzYAL3B1cmQ2LzYAL3lsb3JyZDYvNgAvb3JyZDYvNgAvcGFpcmVkNi82AC9zZXQzNi82AC9zZXQyNi82AC9wYXN0ZWwyNi82AC9kYXJrMjYvNgAvc2V0MTYvNgAvcGFzdGVsMTYvNgAvcGFpcmVkMTIvNgAvc2V0MzEyLzYAL3JkZ3kxMS82AC9yZHlsYnUxMS82AC9yZGJ1MTEvNgAvcHVvcjExLzYAL3ByZ24xMS82AC9yZHlsZ24xMS82AC9zcGVjdHJhbDExLzYAL3BpeWcxMS82AC9icmJnMTEvNgAvcGFpcmVkMTEvNgAvc2V0MzExLzYAL3JkZ3kxMC82AC9yZHlsYnUxMC82AC9yZGJ1MTAvNgAvcHVvcjEwLzYAL3ByZ24xMC82AC9yZHlsZ24xMC82AC9zcGVjdHJhbDEwLzYAL3BpeWcxMC82AC9icmJnMTAvNgAvcGFpcmVkMTAvNgAvc2V0MzEwLzYAZ3JleTUAZ3JheTUAXHg1AGJpZzUAXHhGNQBceEU1AFx4RDUAXHhDNQBceEI1AFx4QTUAZ3JleTk1AGdyYXk5NQBceDk1AGdyZXk4NQBncmF5ODUAXHg4NQBncmV5NzUAZ3JheTc1AGdyZXk2NQBncmF5NjUAZ3JleTU1AGdyYXk1NQBncmV5NDUAZ3JheTQ1AGdyZXkzNQBncmF5MzUAZ3JleTI1AGdyYXkyNQBncmV5MTUAZ3JheTE1AFx4MTUAZ3JheTA1AC9yZGd5OS81AC9idXB1OS81AC9yZHB1OS81AC9wdWJ1OS81AC95bGduYnU5LzUAL2duYnU5LzUAL3JkeWxidTkvNQAvcmRidTkvNQAvZ3JleXM5LzUAL2dyZWVuczkvNQAvYmx1ZXM5LzUAL3B1cnBsZXM5LzUAL29yYW5nZXM5LzUAL3JlZHM5LzUAL3B1b3I5LzUAL3lsb3JicjkvNQAvcHVidWduOS81AC9idWduOS81AC9wcmduOS81AC9yZHlsZ245LzUAL3lsZ245LzUAL3NwZWN0cmFsOS81AC9waXlnOS81AC9icmJnOS81AC9wdXJkOS81AC95bG9ycmQ5LzUAL29ycmQ5LzUAL3BhaXJlZDkvNQAvc2V0MzkvNQAvc2V0MTkvNQAvcGFzdGVsMTkvNQAvcmRneTgvNQAvYnVwdTgvNQAvcmRwdTgvNQAvcHVidTgvNQAveWxnbmJ1OC81AC9nbmJ1OC81AC9yZHlsYnU4LzUAL3JkYnU4LzUAL2FjY2VudDgvNQAvZ3JleXM4LzUAL2dyZWVuczgvNQAvYmx1ZXM4LzUAL3B1cnBsZXM4LzUAL29yYW5nZXM4LzUAL3JlZHM4LzUAL3B1b3I4LzUAL3lsb3JicjgvNQAvcHVidWduOC81AC9idWduOC81AC9wcmduOC81AC9yZHlsZ244LzUAL3lsZ244LzUAL3NwZWN0cmFsOC81AC9waXlnOC81AC9icmJnOC81AC9wdXJkOC81AC95bG9ycmQ4LzUAL29ycmQ4LzUAL3BhaXJlZDgvNQAvc2V0MzgvNQAvc2V0MjgvNQAvcGFzdGVsMjgvNQAvZGFyazI4LzUAL3NldDE4LzUAL3Bhc3RlbDE4LzUAL3JkZ3k3LzUAL2J1cHU3LzUAL3JkcHU3LzUAL3B1YnU3LzUAL3lsZ25idTcvNQAvZ25idTcvNQAvcmR5bGJ1Ny81AC9yZGJ1Ny81AC9hY2NlbnQ3LzUAL2dyZXlzNy81AC9ncmVlbnM3LzUAL2JsdWVzNy81AC9wdXJwbGVzNy81AC9vcmFuZ2VzNy81AC9yZWRzNy81AC9wdW9yNy81AC95bG9yYnI3LzUAL3B1YnVnbjcvNQAvYnVnbjcvNQAvcHJnbjcvNQAvcmR5bGduNy81AC95bGduNy81AC9zcGVjdHJhbDcvNQAvcGl5ZzcvNQAvYnJiZzcvNQAvcHVyZDcvNQAveWxvcnJkNy81AC9vcnJkNy81AC9wYWlyZWQ3LzUAL3NldDM3LzUAL3NldDI3LzUAL3Bhc3RlbDI3LzUAL2RhcmsyNy81AC9zZXQxNy81AC9wYXN0ZWwxNy81AC9yZGd5Ni81AC9idXB1Ni81AC9yZHB1Ni81AC9wdWJ1Ni81AC95bGduYnU2LzUAL2duYnU2LzUAL3JkeWxidTYvNQAvcmRidTYvNQAvYWNjZW50Ni81AC9ncmV5czYvNQAvZ3JlZW5zNi81AC9ibHVlczYvNQAvcHVycGxlczYvNQAvb3JhbmdlczYvNQAvcmVkczYvNQAvcHVvcjYvNQAveWxvcmJyNi81AC9wdWJ1Z242LzUAL2J1Z242LzUAL3ByZ242LzUAL3JkeWxnbjYvNQAveWxnbjYvNQAvc3BlY3RyYWw2LzUAL3BpeWc2LzUAL2JyYmc2LzUAL3B1cmQ2LzUAL3lsb3JyZDYvNQAvb3JyZDYvNQAvcGFpcmVkNi81AC9zZXQzNi81AC9zZXQyNi81AC9wYXN0ZWwyNi81AC9kYXJrMjYvNQAvc2V0MTYvNQAvcGFzdGVsMTYvNQAvcmRneTUvNQAvYnVwdTUvNQAvcmRwdTUvNQAvcHVidTUvNQAveWxnbmJ1NS81AC9nbmJ1NS81AC9yZHlsYnU1LzUAL3JkYnU1LzUAL2FjY2VudDUvNQAvZ3JleXM1LzUAL2dyZWVuczUvNQAvYmx1ZXM1LzUAL3B1cnBsZXM1LzUAL29yYW5nZXM1LzUAL3JlZHM1LzUAL3B1b3I1LzUAL3lsb3JicjUvNQAvcHVidWduNS81AC9idWduNS81AC9wcmduNS81AC9yZHlsZ241LzUAL3lsZ241LzUAL3NwZWN0cmFsNS81AC9waXlnNS81AC9icmJnNS81AC9wdXJkNS81AC95bG9ycmQ1LzUAL29ycmQ1LzUAL3BhaXJlZDUvNQAvc2V0MzUvNQAvc2V0MjUvNQAvcGFzdGVsMjUvNQAvZGFyazI1LzUAL3NldDE1LzUAL3Bhc3RlbDE1LzUAL3BhaXJlZDEyLzUAL3NldDMxMi81AC9yZGd5MTEvNQAvcmR5bGJ1MTEvNQAvcmRidTExLzUAL3B1b3IxMS81AC9wcmduMTEvNQAvcmR5bGduMTEvNQAvc3BlY3RyYWwxMS81AC9waXlnMTEvNQAvYnJiZzExLzUAL3BhaXJlZDExLzUAL3NldDMxMS81AC9yZGd5MTAvNQAvcmR5bGJ1MTAvNQAvcmRidTEwLzUAL3B1b3IxMC81AC9wcmduMTAvNQAvcmR5bGduMTAvNQAvc3BlY3RyYWwxMC81AC9waXlnMTAvNQAvYnJiZzEwLzUAL3BhaXJlZDEwLzUAL3NldDMxMC81AGJpZy01AEJJRy01ACAtZGFzaCA1AGl2b3J5NABncmV5NABkYXJrc2xhdGVncmF5NABceDQAc25vdzQAbGlnaHR5ZWxsb3c0AGhvbmV5ZGV3NAB3aGVhdDQAdG9tYXRvNAByb3N5YnJvd240AG1hcm9vbjQAbGlnaHRzYWxtb240AGxlbW9uY2hpZmZvbjQAc3ByaW5nZ3JlZW40AGRhcmtvbGl2ZWdyZWVuNABwYWxlZ3JlZW40AGRhcmtzZWFncmVlbjQAbGlnaHRjeWFuNAB0YW40AHBsdW00AHNlYXNoZWxsNABjb3JhbDQAaG90cGluazQAbGlnaHRwaW5rNABkZWVwcGluazQAY29ybnNpbGs0AGZpcmVicmljazQAa2hha2k0AGxhdmVuZGVyYmx1c2g0AHBlYWNocHVmZjQAYmlzcXVlNABsaWdodHNreWJsdWU0AGRlZXBza3libHVlNABsaWdodGJsdWU0AGNhZGV0Ymx1ZTQAZG9kZ2VyYmx1ZTQAbGlnaHRzdGVlbGJsdWU0AHJveWFsYmx1ZTQAc2xhdGVibHVlNABuYXZham93aGl0ZTQAYW50aXF1ZXdoaXRlNABjaG9jb2xhdGU0AGNoYXJ0cmV1c2U0AG1pc3R5cm9zZTQAcGFsZXR1cnF1b2lzZTQAYXp1cmU0AHRoZXJlNABhcXVhbWFyaW5lNAB0aGlzdGxlNABtZWRpdW1wdXJwbGU0AGRhcmtvcmFuZ2U0AGxpZ2h0Z29sZGVucm9kNABkYXJrZ29sZGVucm9kNABidXJseXdvb2Q0AGdvbGQ0AG1lZGl1bW9yY2hpZDQAZGFya29yY2hpZDQAcGFsZXZpb2xldHJlZDQAaW5kaWFucmVkNABvcmFuZ2VyZWQ0AG9saXZlZHJhYjQAbWFnZW50YTQAc2llbm5hNABceEY0AFx4RTQAXHhENABceEM0AFx4QjQAXHhBNABncmV5OTQAZ3JheTk0AFx4OTQAZ3JleTg0AGdyYXk4NABceDg0AGdyZXk3NABncmF5NzQAZ3JleTY0AGdyYXk2NABncmV5NTQAZ3JheTU0AGdyZXk0NABncmF5NDQAZ3JleTM0AGdyYXkzNABmcmFjMzQAZ3JleTI0AGdyYXkyNABncmV5MTQAZ3JheTE0AFx4MTQAZnJhYzE0AC9yZGd5OS80AC9idXB1OS80AC9yZHB1OS80AC9wdWJ1OS80AC95bGduYnU5LzQAL2duYnU5LzQAL3JkeWxidTkvNAAvcmRidTkvNAAvZ3JleXM5LzQAL2dyZWVuczkvNAAvYmx1ZXM5LzQAL3B1cnBsZXM5LzQAL29yYW5nZXM5LzQAL3JlZHM5LzQAL3B1b3I5LzQAL3lsb3JicjkvNAAvcHVidWduOS80AC9idWduOS80AC9wcmduOS80AC9yZHlsZ245LzQAL3lsZ245LzQAL3NwZWN0cmFsOS80AC9waXlnOS80AC9icmJnOS80AC9wdXJkOS80AC95bG9ycmQ5LzQAL29ycmQ5LzQAL3BhaXJlZDkvNAAvc2V0MzkvNAAvc2V0MTkvNAAvcGFzdGVsMTkvNAAvcmRneTgvNAAvYnVwdTgvNAAvcmRwdTgvNAAvcHVidTgvNAAveWxnbmJ1OC80AC9nbmJ1OC80AC9yZHlsYnU4LzQAL3JkYnU4LzQAL2FjY2VudDgvNAAvZ3JleXM4LzQAL2dyZWVuczgvNAAvYmx1ZXM4LzQAL3B1cnBsZXM4LzQAL29yYW5nZXM4LzQAL3JlZHM4LzQAL3B1b3I4LzQAL3lsb3JicjgvNAAvcHVidWduOC80AC9idWduOC80AC9wcmduOC80AC9yZHlsZ244LzQAL3lsZ244LzQAL3NwZWN0cmFsOC80AC9waXlnOC80AC9icmJnOC80AC9wdXJkOC80AC95bG9ycmQ4LzQAL29ycmQ4LzQAL3BhaXJlZDgvNAAvc2V0MzgvNAAvc2V0MjgvNAAvcGFzdGVsMjgvNAAvZGFyazI4LzQAL3NldDE4LzQAL3Bhc3RlbDE4LzQAL3JkZ3k3LzQAL2J1cHU3LzQAL3JkcHU3LzQAL3B1YnU3LzQAL3lsZ25idTcvNAAvZ25idTcvNAAvcmR5bGJ1Ny80AC9yZGJ1Ny80AC9hY2NlbnQ3LzQAL2dyZXlzNy80AC9ncmVlbnM3LzQAL2JsdWVzNy80AC9wdXJwbGVzNy80AC9vcmFuZ2VzNy80AC9yZWRzNy80AC9wdW9yNy80AC95bG9yYnI3LzQAL3B1YnVnbjcvNAAvYnVnbjcvNAAvcHJnbjcvNAAvcmR5bGduNy80AC95bGduNy80AC9zcGVjdHJhbDcvNAAvcGl5ZzcvNAAvYnJiZzcvNAAvcHVyZDcvNAAveWxvcnJkNy80AC9vcnJkNy80AC9wYWlyZWQ3LzQAL3NldDM3LzQAL3NldDI3LzQAL3Bhc3RlbDI3LzQAL2RhcmsyNy80AC9zZXQxNy80AC9wYXN0ZWwxNy80AC9yZGd5Ni80AC9idXB1Ni80AC9yZHB1Ni80AC9wdWJ1Ni80AC95bGduYnU2LzQAL2duYnU2LzQAL3JkeWxidTYvNAAvcmRidTYvNAAvYWNjZW50Ni80AC9ncmV5czYvNAAvZ3JlZW5zNi80AC9ibHVlczYvNAAvcHVycGxlczYvNAAvb3JhbmdlczYvNAAvcmVkczYvNAAvcHVvcjYvNAAveWxvcmJyNi80AC9wdWJ1Z242LzQAL2J1Z242LzQAL3ByZ242LzQAL3JkeWxnbjYvNAAveWxnbjYvNAAvc3BlY3RyYWw2LzQAL3BpeWc2LzQAL2JyYmc2LzQAL3B1cmQ2LzQAL3lsb3JyZDYvNAAvb3JyZDYvNAAvcGFpcmVkNi80AC9zZXQzNi80AC9zZXQyNi80AC9wYXN0ZWwyNi80AC9kYXJrMjYvNAAvc2V0MTYvNAAvcGFzdGVsMTYvNAAvcmRneTUvNAAvYnVwdTUvNAAvcmRwdTUvNAAvcHVidTUvNAAveWxnbmJ1NS80AC9nbmJ1NS80AC9yZHlsYnU1LzQAL3JkYnU1LzQAL2FjY2VudDUvNAAvZ3JleXM1LzQAL2dyZWVuczUvNAAvYmx1ZXM1LzQAL3B1cnBsZXM1LzQAL29yYW5nZXM1LzQAL3JlZHM1LzQAL3B1b3I1LzQAL3lsb3JicjUvNAAvcHVidWduNS80AC9idWduNS80AC9wcmduNS80AC9yZHlsZ241LzQAL3lsZ241LzQAL3NwZWN0cmFsNS80AC9waXlnNS80AC9icmJnNS80AC9wdXJkNS80AC95bG9ycmQ1LzQAL29ycmQ1LzQAL3BhaXJlZDUvNAAvc2V0MzUvNAAvc2V0MjUvNAAvcGFzdGVsMjUvNAAvZGFyazI1LzQAL3NldDE1LzQAL3Bhc3RlbDE1LzQAL3JkZ3k0LzQAL2J1cHU0LzQAL3JkcHU0LzQAL3B1YnU0LzQAL3lsZ25idTQvNAAvZ25idTQvNAAvcmR5bGJ1NC80AC9yZGJ1NC80AC9hY2NlbnQ0LzQAL2dyZXlzNC80AC9ncmVlbnM0LzQAL2JsdWVzNC80AC9wdXJwbGVzNC80AC9vcmFuZ2VzNC80AC9yZWRzNC80AC9wdW9yNC80AC95bG9yYnI0LzQAL3B1YnVnbjQvNAAvYnVnbjQvNAAvcHJnbjQvNAAvcmR5bGduNC80AC95bGduNC80AC9zcGVjdHJhbDQvNAAvcGl5ZzQvNAAvYnJiZzQvNAAvcHVyZDQvNAAveWxvcnJkNC80AC9vcnJkNC80AC9wYWlyZWQ0LzQAL3NldDM0LzQAL3NldDI0LzQAL3Bhc3RlbDI0LzQAL2RhcmsyNC80AC9zZXQxNC80AC9wYXN0ZWwxNC80AC9wYWlyZWQxMi80AC9zZXQzMTIvNAAvcmRneTExLzQAL3JkeWxidTExLzQAL3JkYnUxMS80AC9wdW9yMTEvNAAvcHJnbjExLzQAL3JkeWxnbjExLzQAL3NwZWN0cmFsMTEvNAAvcGl5ZzExLzQAL2JyYmcxMS80AC9wYWlyZWQxMS80AC9zZXQzMTEvNAAvcmRneTEwLzQAL3JkeWxidTEwLzQAL3JkYnUxMC80AC9wdW9yMTAvNAAvcHJnbjEwLzQAL3JkeWxnbjEwLzQAL3NwZWN0cmFsMTAvNAAvcGl5ZzEwLzQAL2JyYmcxMC80AC9wYWlyZWQxMC80AC9zZXQzMTAvNAAxLjQAbiA+PSA0AHNpZGVzID09IDQAaXZvcnkzAFNwYXJzZU1hdHJpeF9tdWx0aXBseTMAZ3JleTMAZGFya3NsYXRlZ3JheTMAXHgzAHNub3czAGxpZ2h0eWVsbG93MwBob25leWRldzMAd2hlYXQzAHN1cDMAdG9tYXRvMwByb3N5YnJvd24zAG1hcm9vbjMAbGlnaHRzYWxtb24zAGxlbW9uY2hpZmZvbjMAc3ByaW5nZ3JlZW4zAGRhcmtvbGl2ZWdyZWVuMwBwYWxlZ3JlZW4zAGRhcmtzZWFncmVlbjMAbGlnaHRjeWFuMwB0YW4zAHBsdW0zAHNlYXNoZWxsMwBjb3JhbDMAaG90cGluazMAbGlnaHRwaW5rMwBkZWVwcGluazMAY29ybnNpbGszAGZpcmVicmljazMAa2hha2kzAGxhdmVuZGVyYmx1c2gzAHBlYWNocHVmZjMAYmlzcXVlMwBsaWdodHNreWJsdWUzAGRlZXBza3libHVlMwBsaWdodGJsdWUzAGNhZGV0Ymx1ZTMAZG9kZ2VyYmx1ZTMAbGlnaHRzdGVlbGJsdWUzAHJveWFsYmx1ZTMAc2xhdGVibHVlMwBuYXZham93aGl0ZTMAYW50aXF1ZXdoaXRlMwBjaG9jb2xhdGUzAGNoYXJ0cmV1c2UzAG1pc3R5cm9zZTMAcGFsZXR1cnF1b2lzZTMAYXp1cmUzAGFxdWFtYXJpbmUzAHRoaXN0bGUzAG1lZGl1bXB1cnBsZTMAZGFya29yYW5nZTMAbGlnaHRnb2xkZW5yb2QzAGRhcmtnb2xkZW5yb2QzAGJ1cmx5d29vZDMAZ29sZDMAbWVkaXVtb3JjaGlkMwBkYXJrb3JjaGlkMwBwYWxldmlvbGV0cmVkMwBpbmRpYW5yZWQzAG9yYW5nZXJlZDMAb2xpdmVkcmFiMwBtYWdlbnRhMwBzaWVubmEzAFx4RjMAXHhFMwBceEQzAFx4QzMAXHhCMwBceEEzAGdyZXk5MwBncmF5OTMAXHg5MwBncmV5ODMAZ3JheTgzAFx4ODMAZ3JleTczAGdyYXk3MwBncmV5NjMAZ3JheTYzAGdyZXk1MwBncmF5NTMAZ3JleTQzAGdyYXk0MwBncmV5MzMAZ3JheTMzADIwMjQwODExLjIyMzMAZ3JleTIzAGdyYXkyMwBncmV5MTMAZ3JheTEzAFx4MTMAL3JkZ3k5LzMAL2J1cHU5LzMAL3JkcHU5LzMAL3B1YnU5LzMAL3lsZ25idTkvMwAvZ25idTkvMwAvcmR5bGJ1OS8zAC9yZGJ1OS8zAC9ncmV5czkvMwAvZ3JlZW5zOS8zAC9ibHVlczkvMwAvcHVycGxlczkvMwAvb3JhbmdlczkvMwAvcmVkczkvMwAvcHVvcjkvMwAveWxvcmJyOS8zAC9wdWJ1Z245LzMAL2J1Z245LzMAL3ByZ245LzMAL3JkeWxnbjkvMwAveWxnbjkvMwAvc3BlY3RyYWw5LzMAL3BpeWc5LzMAL2JyYmc5LzMAL3B1cmQ5LzMAL3lsb3JyZDkvMwAvb3JyZDkvMwAvcGFpcmVkOS8zAC9zZXQzOS8zAC9zZXQxOS8zAC9wYXN0ZWwxOS8zAC9yZGd5OC8zAC9idXB1OC8zAC9yZHB1OC8zAC9wdWJ1OC8zAC95bGduYnU4LzMAL2duYnU4LzMAL3JkeWxidTgvMwAvcmRidTgvMwAvYWNjZW50OC8zAC9ncmV5czgvMwAvZ3JlZW5zOC8zAC9ibHVlczgvMwAvcHVycGxlczgvMwAvb3JhbmdlczgvMwAvcmVkczgvMwAvcHVvcjgvMwAveWxvcmJyOC8zAC9wdWJ1Z244LzMAL2J1Z244LzMAL3ByZ244LzMAL3JkeWxnbjgvMwAveWxnbjgvMwAvc3BlY3RyYWw4LzMAL3BpeWc4LzMAL2JyYmc4LzMAL3B1cmQ4LzMAL3lsb3JyZDgvMwAvb3JyZDgvMwAvcGFpcmVkOC8zAC9zZXQzOC8zAC9zZXQyOC8zAC9wYXN0ZWwyOC8zAC9kYXJrMjgvMwAvc2V0MTgvMwAvcGFzdGVsMTgvMwAvcmRneTcvMwAvYnVwdTcvMwAvcmRwdTcvMwAvcHVidTcvMwAveWxnbmJ1Ny8zAC9nbmJ1Ny8zAC9yZHlsYnU3LzMAL3JkYnU3LzMAL2FjY2VudDcvMwAvZ3JleXM3LzMAL2dyZWVuczcvMwAvYmx1ZXM3LzMAL3B1cnBsZXM3LzMAL29yYW5nZXM3LzMAL3JlZHM3LzMAL3B1b3I3LzMAL3lsb3JicjcvMwAvcHVidWduNy8zAC9idWduNy8zAC9wcmduNy8zAC9yZHlsZ243LzMAL3lsZ243LzMAL3NwZWN0cmFsNy8zAC9waXlnNy8zAC9icmJnNy8zAC9wdXJkNy8zAC95bG9ycmQ3LzMAL29ycmQ3LzMAL3BhaXJlZDcvMwAvc2V0MzcvMwAvc2V0MjcvMwAvcGFzdGVsMjcvMwAvZGFyazI3LzMAL3NldDE3LzMAL3Bhc3RlbDE3LzMAL3JkZ3k2LzMAL2J1cHU2LzMAL3JkcHU2LzMAL3B1YnU2LzMAL3lsZ25idTYvMwAvZ25idTYvMwAvcmR5bGJ1Ni8zAC9yZGJ1Ni8zAC9hY2NlbnQ2LzMAL2dyZXlzNi8zAC9ncmVlbnM2LzMAL2JsdWVzNi8zAC9wdXJwbGVzNi8zAC9vcmFuZ2VzNi8zAC9yZWRzNi8zAC9wdW9yNi8zAC95bG9yYnI2LzMAL3B1YnVnbjYvMwAvYnVnbjYvMwAvcHJnbjYvMwAvcmR5bGduNi8zAC95bGduNi8zAC9zcGVjdHJhbDYvMwAvcGl5ZzYvMwAvYnJiZzYvMwAvcHVyZDYvMwAveWxvcnJkNi8zAC9vcnJkNi8zAC9wYWlyZWQ2LzMAL3NldDM2LzMAL3NldDI2LzMAL3Bhc3RlbDI2LzMAL2RhcmsyNi8zAC9zZXQxNi8zAC9wYXN0ZWwxNi8zAC9yZGd5NS8zAC9idXB1NS8zAC9yZHB1NS8zAC9wdWJ1NS8zAC95bGduYnU1LzMAL2duYnU1LzMAL3JkeWxidTUvMwAvcmRidTUvMwAvYWNjZW50NS8zAC9ncmV5czUvMwAvZ3JlZW5zNS8zAC9ibHVlczUvMwAvcHVycGxlczUvMwAvb3JhbmdlczUvMwAvcmVkczUvMwAvcHVvcjUvMwAveWxvcmJyNS8zAC9wdWJ1Z241LzMAL2J1Z241LzMAL3ByZ241LzMAL3JkeWxnbjUvMwAveWxnbjUvMwAvc3BlY3RyYWw1LzMAL3BpeWc1LzMAL2JyYmc1LzMAL3B1cmQ1LzMAL3lsb3JyZDUvMwAvb3JyZDUvMwAvcGFpcmVkNS8zAC9zZXQzNS8zAC9zZXQyNS8zAC9wYXN0ZWwyNS8zAC9kYXJrMjUvMwAvc2V0MTUvMwAvcGFzdGVsMTUvMwAvcmRneTQvMwAvYnVwdTQvMwAvcmRwdTQvMwAvcHVidTQvMwAveWxnbmJ1NC8zAC9nbmJ1NC8zAC9yZHlsYnU0LzMAL3JkYnU0LzMAL2FjY2VudDQvMwAvZ3JleXM0LzMAL2dyZWVuczQvMwAvYmx1ZXM0LzMAL3B1cnBsZXM0LzMAL29yYW5nZXM0LzMAL3JlZHM0LzMAL3B1b3I0LzMAL3lsb3JicjQvMwAvcHVidWduNC8zAC9idWduNC8zAC9wcmduNC8zAC9yZHlsZ240LzMAL3lsZ240LzMAL3NwZWN0cmFsNC8zAC9waXlnNC8zAC9icmJnNC8zAC9wdXJkNC8zAC95bG9ycmQ0LzMAL29ycmQ0LzMAL3BhaXJlZDQvMwAvc2V0MzQvMwAvc2V0MjQvMwAvcGFzdGVsMjQvMwAvZGFyazI0LzMAL3NldDE0LzMAL3Bhc3RlbDE0LzMAL3JkZ3kzLzMAL2J1cHUzLzMAL3JkcHUzLzMAL3B1YnUzLzMAL3lsZ25idTMvMwAvZ25idTMvMwAvcmR5bGJ1My8zAC9yZGJ1My8zAC9hY2NlbnQzLzMAL2dyZXlzMy8zAC9ncmVlbnMzLzMAL2JsdWVzMy8zAC9wdXJwbGVzMy8zAC9vcmFuZ2VzMy8zAC9yZWRzMy8zAC9wdW9yMy8zAC95bG9yYnIzLzMAL3B1YnVnbjMvMwAvYnVnbjMvMwAvcHJnbjMvMwAvcmR5bGduMy8zAC95bGduMy8zAC9zcGVjdHJhbDMvMwAvcGl5ZzMvMwAvYnJiZzMvMwAvcHVyZDMvMwAveWxvcnJkMy8zAC9vcnJkMy8zAC9wYWlyZWQzLzMAL3NldDMzLzMAL3NldDIzLzMAL3Bhc3RlbDIzLzMAL2RhcmsyMy8zAC9zZXQxMy8zAC9wYXN0ZWwxMy8zAC9wYWlyZWQxMi8zAC9zZXQzMTIvMwAvcmRneTExLzMAL3JkeWxidTExLzMAL3JkYnUxMS8zAC9wdW9yMTEvMwAvcHJnbjExLzMAL3JkeWxnbjExLzMAL3NwZWN0cmFsMTEvMwAvcGl5ZzExLzMAL2JyYmcxMS8zAC9wYWlyZWQxMS8zAC9zZXQzMTEvMwAvcmRneTEwLzMAL3JkeWxidTEwLzMAL3JkYnUxMC8zAC9wdW9yMTAvMwAvcHJnbjEwLzMAL3JkeWxnbjEwLzMAL3NwZWN0cmFsMTAvMwAvcGl5ZzEwLzMAL2JyYmcxMC8zAC9wYWlyZWQxMC8zAC9zZXQzMTAvMwBpdm9yeTIAZ3JleTIAZGFya3NsYXRlZ3JheTIAXHgyAHNub3cyAGxpZ2h0eWVsbG93MgBob25leWRldzIAUlRyZWVJbnNlcnQyAHdoZWF0MgBzdXAyAG5vcDIAdG9tYXRvMgByb3N5YnJvd24yAG1hcm9vbjIAbGlnaHRzYWxtb24yAGxlbW9uY2hpZmZvbjIAc3ByaW5nZ3JlZW4yAGRhcmtvbGl2ZWdyZWVuMgBwYWxlZ3JlZW4yAGRhcmtzZWFncmVlbjIAbGlnaHRjeWFuMgB0YW4yAHBsdW0yAHNlYXNoZWxsMgBjb3JhbDIAaG90cGluazIAbGlnaHRwaW5rMgBkZWVwcGluazIAY29ybnNpbGsyAGZpcmVicmljazIAa2hha2kyAGxhdmVuZGVyYmx1c2gyAHBlYWNocHVmZjIAYnJvbnplMgBiaXNxdWUyAGxpZ2h0c2t5Ymx1ZTIAZGVlcHNreWJsdWUyAGxpZ2h0Ymx1ZTIAY2FkZXRibHVlMgBkb2RnZXJibHVlMgBsaWdodHN0ZWVsYmx1ZTIAcm95YWxibHVlMgBzbGF0ZWJsdWUyAG5hdmFqb3doaXRlMgBhbnRpcXVld2hpdGUyAGNob2NvbGF0ZTIAY2hhcnRyZXVzZTIAbWlzdHlyb3NlMgBwYWxldHVycXVvaXNlMgBhenVyZTIAYXF1YW1hcmluZTIAdGhpc3RsZTIAbWVkaXVtcHVycGxlMgBkYXJrb3JhbmdlMgBsaWdodGdvbGRlbnJvZDIAZGFya2dvbGRlbnJvZDIAYnVybHl3b29kMgBnb2xkMgBtZWRpdW1vcmNoaWQyAGRhcmtvcmNoaWQyAHBhbGV2aW9sZXRyZWQyAGluZGlhbnJlZDIAb3JhbmdlcmVkMgBvbGl2ZWRyYWIyAG1hZ2VudGEyAHNpZW5uYTIAXHhGMgBceEUyAFx4RDIAXHhDMgBceEIyAFx4QTIAZ3JleTkyAGdyYXk5MgBceDkyAGdyZXk4MgBncmF5ODIAXHg4MgBncmV5NzIAZ3JheTcyAGdyZXk2MgBncmF5NjIAZ3JleTUyAGdyYXk1MgBncmV5NDIAZ3JheTQyAGdyZXkzMgBncmF5MzIAZ3JleTIyAGdyYXkyMgBncmV5MTIAZ3JheTEyAFx4MTIAZnJhYzEyAC9wYWlyZWQxMi8xMgAvc2V0MzEyLzEyAC9yZGd5OS8yAC9idXB1OS8yAC9yZHB1OS8yAC9wdWJ1OS8yAC95bGduYnU5LzIAL2duYnU5LzIAL3JkeWxidTkvMgAvcmRidTkvMgAvZ3JleXM5LzIAL2dyZWVuczkvMgAvYmx1ZXM5LzIAL3B1cnBsZXM5LzIAL29yYW5nZXM5LzIAL3JlZHM5LzIAL3B1b3I5LzIAL3lsb3JicjkvMgAvcHVidWduOS8yAC9idWduOS8yAC9wcmduOS8yAC9yZHlsZ245LzIAL3lsZ245LzIAL3NwZWN0cmFsOS8yAC9waXlnOS8yAC9icmJnOS8yAC9wdXJkOS8yAC95bG9ycmQ5LzIAL29ycmQ5LzIAL3BhaXJlZDkvMgAvc2V0MzkvMgAvc2V0MTkvMgAvcGFzdGVsMTkvMgAvcmRneTgvMgAvYnVwdTgvMgAvcmRwdTgvMgAvcHVidTgvMgAveWxnbmJ1OC8yAC9nbmJ1OC8yAC9yZHlsYnU4LzIAL3JkYnU4LzIAL2FjY2VudDgvMgAvZ3JleXM4LzIAL2dyZWVuczgvMgAvYmx1ZXM4LzIAL3B1cnBsZXM4LzIAL29yYW5nZXM4LzIAL3JlZHM4LzIAL3B1b3I4LzIAL3lsb3JicjgvMgAvcHVidWduOC8yAC9idWduOC8yAC9wcmduOC8yAC9yZHlsZ244LzIAL3lsZ244LzIAL3NwZWN0cmFsOC8yAC9waXlnOC8yAC9icmJnOC8yAC9wdXJkOC8yAC95bG9ycmQ4LzIAL29ycmQ4LzIAL3BhaXJlZDgvMgAvc2V0MzgvMgAvc2V0MjgvMgAvcGFzdGVsMjgvMgAvZGFyazI4LzIAL3NldDE4LzIAL3Bhc3RlbDE4LzIAL3JkZ3k3LzIAL2J1cHU3LzIAL3JkcHU3LzIAL3B1YnU3LzIAL3lsZ25idTcvMgAvZ25idTcvMgAvcmR5bGJ1Ny8yAC9yZGJ1Ny8yAC9hY2NlbnQ3LzIAL2dyZXlzNy8yAC9ncmVlbnM3LzIAL2JsdWVzNy8yAC9wdXJwbGVzNy8yAC9vcmFuZ2VzNy8yAC9yZWRzNy8yAC9wdW9yNy8yAC95bG9yYnI3LzIAL3B1YnVnbjcvMgAvYnVnbjcvMgAvcHJnbjcvMgAvcmR5bGduNy8yAC95bGduNy8yAC9zcGVjdHJhbDcvMgAvcGl5ZzcvMgAvYnJiZzcvMgAvcHVyZDcvMgAveWxvcnJkNy8yAC9vcnJkNy8yAC9wYWlyZWQ3LzIAL3NldDM3LzIAL3NldDI3LzIAL3Bhc3RlbDI3LzIAL2RhcmsyNy8yAC9zZXQxNy8yAC9wYXN0ZWwxNy8yAC9yZGd5Ni8yAC9idXB1Ni8yAC9yZHB1Ni8yAC9wdWJ1Ni8yAC95bGduYnU2LzIAL2duYnU2LzIAL3JkeWxidTYvMgAvcmRidTYvMgAvYWNjZW50Ni8yAC9ncmV5czYvMgAvZ3JlZW5zNi8yAC9ibHVlczYvMgAvcHVycGxlczYvMgAvb3JhbmdlczYvMgAvcmVkczYvMgAvcHVvcjYvMgAveWxvcmJyNi8yAC9wdWJ1Z242LzIAL2J1Z242LzIAL3ByZ242LzIAL3JkeWxnbjYvMgAveWxnbjYvMgAvc3BlY3RyYWw2LzIAL3BpeWc2LzIAL2JyYmc2LzIAL3B1cmQ2LzIAL3lsb3JyZDYvMgAvb3JyZDYvMgAvcGFpcmVkNi8yAC9zZXQzNi8yAC9zZXQyNi8yAC9wYXN0ZWwyNi8yAC9kYXJrMjYvMgAvc2V0MTYvMgAvcGFzdGVsMTYvMgAvcmRneTUvMgAvYnVwdTUvMgAvcmRwdTUvMgAvcHVidTUvMgAveWxnbmJ1NS8yAC9nbmJ1NS8yAC9yZHlsYnU1LzIAL3JkYnU1LzIAL2FjY2VudDUvMgAvZ3JleXM1LzIAL2dyZWVuczUvMgAvYmx1ZXM1LzIAL3B1cnBsZXM1LzIAL29yYW5nZXM1LzIAL3JlZHM1LzIAL3B1b3I1LzIAL3lsb3JicjUvMgAvcHVidWduNS8yAC9idWduNS8yAC9wcmduNS8yAC9yZHlsZ241LzIAL3lsZ241LzIAL3NwZWN0cmFsNS8yAC9waXlnNS8yAC9icmJnNS8yAC9wdXJkNS8yAC95bG9ycmQ1LzIAL29ycmQ1LzIAL3BhaXJlZDUvMgAvc2V0MzUvMgAvc2V0MjUvMgAvcGFzdGVsMjUvMgAvZGFyazI1LzIAL3NldDE1LzIAL3Bhc3RlbDE1LzIAL3JkZ3k0LzIAL2J1cHU0LzIAL3JkcHU0LzIAL3B1YnU0LzIAL3lsZ25idTQvMgAvZ25idTQvMgAvcmR5bGJ1NC8yAC9yZGJ1NC8yAC9hY2NlbnQ0LzIAL2dyZXlzNC8yAC9ncmVlbnM0LzIAL2JsdWVzNC8yAC9wdXJwbGVzNC8yAC9vcmFuZ2VzNC8yAC9yZWRzNC8yAC9wdW9yNC8yAC95bG9yYnI0LzIAL3B1YnVnbjQvMgAvYnVnbjQvMgAvcHJnbjQvMgAvcmR5bGduNC8yAC95bGduNC8yAC9zcGVjdHJhbDQvMgAvcGl5ZzQvMgAvYnJiZzQvMgAvcHVyZDQvMgAveWxvcnJkNC8yAC9vcnJkNC8yAC9wYWlyZWQ0LzIAL3NldDM0LzIAL3NldDI0LzIAL3Bhc3RlbDI0LzIAL2RhcmsyNC8yAC9zZXQxNC8yAC9wYXN0ZWwxNC8yAC9yZGd5My8yAC9idXB1My8yAC9yZHB1My8yAC9wdWJ1My8yAC95bGduYnUzLzIAL2duYnUzLzIAL3JkeWxidTMvMgAvcmRidTMvMgAvYWNjZW50My8yAC9ncmV5czMvMgAvZ3JlZW5zMy8yAC9ibHVlczMvMgAvcHVycGxlczMvMgAvb3JhbmdlczMvMgAvcmVkczMvMgAvcHVvcjMvMgAveWxvcmJyMy8yAC9wdWJ1Z24zLzIAL2J1Z24zLzIAL3ByZ24zLzIAL3JkeWxnbjMvMgAveWxnbjMvMgAvc3BlY3RyYWwzLzIAL3BpeWczLzIAL2JyYmczLzIAL3B1cmQzLzIAL3lsb3JyZDMvMgAvb3JyZDMvMgAvcGFpcmVkMy8yAC9zZXQzMy8yAC9zZXQyMy8yAC9wYXN0ZWwyMy8yAC9kYXJrMjMvMgAvc2V0MTMvMgAvcGFzdGVsMTMvMgAvcGFpcmVkMTIvMgAvc2V0MzEyLzIAL3JkZ3kxMS8yAC9yZHlsYnUxMS8yAC9yZGJ1MTEvMgAvcHVvcjExLzIAL3ByZ24xMS8yAC9yZHlsZ24xMS8yAC9zcGVjdHJhbDExLzIAL3BpeWcxMS8yAC9icmJnMTEvMgAvcGFpcmVkMTEvMgAvc2V0MzExLzIAL3JkZ3kxMC8yAC9yZHlsYnUxMC8yAC9yZGJ1MTAvMgAvcHVvcjEwLzIAL3ByZ24xMC8yAC9yZHlsZ24xMC8yAC9zcGVjdHJhbDEwLzIAL3BpeWcxMC8yAC9icmJnMTAvMgAvcGFpcmVkMTAvMgAvc2V0MzEwLzIAMS4yACAtZGFzaCAyAHN6ID49IDIAbGVuID49IDIAZXhwID09IDEgfHwgZXhwID09IDIAZGltID09IDIATkRfb3V0KHYpLnNpemUgPT0gMgBpdm9yeTEAZ3JleTEAZGFya3NsYXRlZ3JheTEAXHgxAHNub3cxAGxpZ2h0eWVsbG93MQBob25leWRldzEAbnNsaW1pdDEAd2hlYXQxAHN1cDEAbm9wMQB0b21hdG8xAHJvc3licm93bjEAbWFyb29uMQBsaWdodHNhbG1vbjEAbGVtb25jaGlmZm9uMQBsYXRpbjEAYWdvcGVuMQBzcHJpbmdncmVlbjEAZGFya29saXZlZ3JlZW4xAHBhbGVncmVlbjEAZGFya3NlYWdyZWVuMQBsaWdodGN5YW4xAHRhbjEAcGx1bTEAc2Vhc2hlbGwxAGNvcmFsMQBob3RwaW5rMQBsaWdodHBpbmsxAGRlZXBwaW5rMQBjb3Juc2lsazEAZmlyZWJyaWNrMQBqMCA8PSBpMSAmJiBpMSA8PSBqMQBraGFraTEAbGF2ZW5kZXJibHVzaDEAcGVhY2hwdWZmMQBiaXNxdWUxAGxpZ2h0c2t5Ymx1ZTEAZGVlcHNreWJsdWUxAGxpZ2h0Ymx1ZTEAY2FkZXRibHVlMQBkb2RnZXJibHVlMQBsaWdodHN0ZWVsYmx1ZTEAcm95YWxibHVlMQBzbGF0ZWJsdWUxAG5hdmFqb3doaXRlMQBhbnRpcXVld2hpdGUxAGNob2NvbGF0ZTEAY2hhcnRyZXVzZTEAbWlzdHlyb3NlMQBwYWxldHVycXVvaXNlMQBhenVyZTEAYXF1YW1hcmluZTEAdGhpc3RsZTEAbWVkaXVtcHVycGxlMQBkYXJrb3JhbmdlMQBhcmdfZTAgJiYgYXJnX2UxAGxpZ2h0Z29sZGVucm9kMQBkYXJrZ29sZGVucm9kMQBidXJseXdvb2QxAGdvbGQxAG1lZGl1bW9yY2hpZDEAZGFya29yY2hpZDEAcGFsZXZpb2xldHJlZDEAaW5kaWFucmVkMQBvcmFuZ2VyZWQxAG9saXZlZHJhYjEAbWFnZW50YTEAc2llbm5hMQBceEYxAFx4RTEAXHhEMQBceEMxAFx4QjEAXHhBMQBncmV5OTEAZ3JheTkxAFx4OTEAZ3JleTgxAGdyYXk4MQBceDgxAGdyZXk3MQBncmF5NzEAZ3JleTYxAGdyYXk2MQBncmV5NTEAZ3JheTUxAGdyZXk0MQBncmF5NDEAZ3JleTMxAGdyYXkzMQBncmV5MjEAZ3JheTIxAGdyZXkxMQBncmF5MTEAXHgxMQAvcGFpcmVkMTIvMTEAL3NldDMxMi8xMQAvcmRneTExLzExAC9yZHlsYnUxMS8xMQAvcmRidTExLzExAC9wdW9yMTEvMTEAL3ByZ24xMS8xMQAvcmR5bGduMTEvMTEAL3NwZWN0cmFsMTEvMTEAL3BpeWcxMS8xMQAvYnJiZzExLzExAC9wYWlyZWQxMS8xMQAvc2V0MzExLzExAGNzW2ldLT5zbGFjaygpPi0wLjAwMDAwMDEAL3JkZ3k5LzEAL2J1cHU5LzEAL3JkcHU5LzEAL3B1YnU5LzEAL3lsZ25idTkvMQAvZ25idTkvMQAvcmR5bGJ1OS8xAC9yZGJ1OS8xAC9ncmV5czkvMQAvZ3JlZW5zOS8xAC9ibHVlczkvMQAvcHVycGxlczkvMQAvb3JhbmdlczkvMQAvcmVkczkvMQAvcHVvcjkvMQAveWxvcmJyOS8xAC9wdWJ1Z245LzEAL2J1Z245LzEAL3ByZ245LzEAL3JkeWxnbjkvMQAveWxnbjkvMQAvc3BlY3RyYWw5LzEAL3BpeWc5LzEAL2JyYmc5LzEAL3B1cmQ5LzEAL3lsb3JyZDkvMQAvb3JyZDkvMQAvcGFpcmVkOS8xAC9zZXQzOS8xAC9zZXQxOS8xAC9wYXN0ZWwxOS8xAC9yZGd5OC8xAC9idXB1OC8xAC9yZHB1OC8xAC9wdWJ1OC8xAC95bGduYnU4LzEAL2duYnU4LzEAL3JkeWxidTgvMQAvcmRidTgvMQAvYWNjZW50OC8xAC9ncmV5czgvMQAvZ3JlZW5zOC8xAC9ibHVlczgvMQAvcHVycGxlczgvMQAvb3JhbmdlczgvMQAvcmVkczgvMQAvcHVvcjgvMQAveWxvcmJyOC8xAC9wdWJ1Z244LzEAL2J1Z244LzEAL3ByZ244LzEAL3JkeWxnbjgvMQAveWxnbjgvMQAvc3BlY3RyYWw4LzEAL3BpeWc4LzEAL2JyYmc4LzEAL3B1cmQ4LzEAL3lsb3JyZDgvMQAvb3JyZDgvMQAvcGFpcmVkOC8xAC9zZXQzOC8xAC9zZXQyOC8xAC9wYXN0ZWwyOC8xAC9kYXJrMjgvMQAvc2V0MTgvMQAvcGFzdGVsMTgvMQAvcmRneTcvMQAvYnVwdTcvMQAvcmRwdTcvMQAvcHVidTcvMQAveWxnbmJ1Ny8xAC9nbmJ1Ny8xAC9yZHlsYnU3LzEAL3JkYnU3LzEAL2FjY2VudDcvMQAvZ3JleXM3LzEAL2dyZWVuczcvMQAvYmx1ZXM3LzEAL3B1cnBsZXM3LzEAL29yYW5nZXM3LzEAL3JlZHM3LzEAL3B1b3I3LzEAL3lsb3JicjcvMQAvcHVidWduNy8xAC9idWduNy8xAC9wcmduNy8xAC9yZHlsZ243LzEAL3lsZ243LzEAL3NwZWN0cmFsNy8xAC9waXlnNy8xAC9icmJnNy8xAC9wdXJkNy8xAC95bG9ycmQ3LzEAL29ycmQ3LzEAL3BhaXJlZDcvMQAvc2V0MzcvMQAvc2V0MjcvMQAvcGFzdGVsMjcvMQAvZGFyazI3LzEAL3NldDE3LzEAL3Bhc3RlbDE3LzEAL3JkZ3k2LzEAL2J1cHU2LzEAL3JkcHU2LzEAL3B1YnU2LzEAL3lsZ25idTYvMQAvZ25idTYvMQAvcmR5bGJ1Ni8xAC9yZGJ1Ni8xAC9hY2NlbnQ2LzEAL2dyZXlzNi8xAC9ncmVlbnM2LzEAL2JsdWVzNi8xAC9wdXJwbGVzNi8xAC9vcmFuZ2VzNi8xAC9yZWRzNi8xAC9wdW9yNi8xAC95bG9yYnI2LzEAL3B1YnVnbjYvMQAvYnVnbjYvMQAvcHJnbjYvMQAvcmR5bGduNi8xAC95bGduNi8xAC9zcGVjdHJhbDYvMQAvcGl5ZzYvMQAvYnJiZzYvMQAvcHVyZDYvMQAveWxvcnJkNi8xAC9vcnJkNi8xAC9wYWlyZWQ2LzEAL3NldDM2LzEAL3NldDI2LzEAL3Bhc3RlbDI2LzEAL2RhcmsyNi8xAC9zZXQxNi8xAC9wYXN0ZWwxNi8xAC9yZGd5NS8xAC9idXB1NS8xAC9yZHB1NS8xAC9wdWJ1NS8xAC95bGduYnU1LzEAL2duYnU1LzEAL3JkeWxidTUvMQAvcmRidTUvMQAvYWNjZW50NS8xAC9ncmV5czUvMQAvZ3JlZW5zNS8xAC9ibHVlczUvMQAvcHVycGxlczUvMQAvb3JhbmdlczUvMQAvcmVkczUvMQAvcHVvcjUvMQAveWxvcmJyNS8xAC9wdWJ1Z241LzEAL2J1Z241LzEAL3ByZ241LzEAL3JkeWxnbjUvMQAveWxnbjUvMQAvc3BlY3RyYWw1LzEAL3BpeWc1LzEAL2JyYmc1LzEAL3B1cmQ1LzEAL3lsb3JyZDUvMQAvb3JyZDUvMQAvcGFpcmVkNS8xAC9zZXQzNS8xAC9zZXQyNS8xAC9wYXN0ZWwyNS8xAC9kYXJrMjUvMQAvc2V0MTUvMQAvcGFzdGVsMTUvMQAvcmRneTQvMQAvYnVwdTQvMQAvcmRwdTQvMQAvcHVidTQvMQAveWxnbmJ1NC8xAC9nbmJ1NC8xAC9yZHlsYnU0LzEAL3JkYnU0LzEAL2FjY2VudDQvMQAvZ3JleXM0LzEAL2dyZWVuczQvMQAvYmx1ZXM0LzEAL3B1cnBsZXM0LzEAL29yYW5nZXM0LzEAL3JlZHM0LzEAL3B1b3I0LzEAL3lsb3JicjQvMQAvcHVidWduNC8xAC9idWduNC8xAC9wcmduNC8xAC9yZHlsZ240LzEAL3lsZ240LzEAL3NwZWN0cmFsNC8xAC9waXlnNC8xAC9icmJnNC8xAC9wdXJkNC8xAC95bG9ycmQ0LzEAL29ycmQ0LzEAL3BhaXJlZDQvMQAvc2V0MzQvMQAvc2V0MjQvMQAvcGFzdGVsMjQvMQAvZGFyazI0LzEAL3NldDE0LzEAL3Bhc3RlbDE0LzEAL3JkZ3kzLzEAL2J1cHUzLzEAL3JkcHUzLzEAL3B1YnUzLzEAL3lsZ25idTMvMQAvZ25idTMvMQAvcmR5bGJ1My8xAC9yZGJ1My8xAC9hY2NlbnQzLzEAL2dyZXlzMy8xAC9ncmVlbnMzLzEAL2JsdWVzMy8xAC9wdXJwbGVzMy8xAC9vcmFuZ2VzMy8xAC9yZWRzMy8xAC9wdW9yMy8xAC95bG9yYnIzLzEAL3B1YnVnbjMvMQAvYnVnbjMvMQAvcHJnbjMvMQAvcmR5bGduMy8xAC95bGduMy8xAC9zcGVjdHJhbDMvMQAvcGl5ZzMvMQAvYnJiZzMvMQAvcHVyZDMvMQAveWxvcnJkMy8xAC9vcnJkMy8xAC9wYWlyZWQzLzEAL3NldDMzLzEAL3NldDIzLzEAL3Bhc3RlbDIzLzEAL2RhcmsyMy8xAC9zZXQxMy8xAC9wYXN0ZWwxMy8xAC9wYWlyZWQxMi8xAC9zZXQzMTIvMQAvcmRneTExLzEAL3JkeWxidTExLzEAL3JkYnUxMS8xAC9wdW9yMTEvMQAvcHJnbjExLzEAL3JkeWxnbjExLzEAL3NwZWN0cmFsMTEvMQAvcGl5ZzExLzEAL2JyYmcxMS8xAC9wYWlyZWQxMS8xAC9zZXQzMTEvMQAvcmRneTEwLzEAL3JkeWxidTEwLzEAL3JkYnUxMC8xAC9wdW9yMTAvMQAvcHJnbjEwLzEAL3JkeWxnbjEwLzEAL3NwZWN0cmFsMTAvMQAvcGl5ZzEwLzEAL2JyYmcxMC8xAC9wYWlyZWQxMC8xAC9zZXQzMTAvMQBsYXRpbi0xAElTT184ODU5LTEASVNPODg1OS0xAElTTy04ODU5LTEAbiA+IDEAaSA+PSAxAHEtPm4gPT0gMQBydHAtPnNwbGl0LlBhcnRpdGlvbnNbMF0ucGFydGl0aW9uW2ldID09IDAgfHwgcnRwLT5zcGxpdC5QYXJ0aXRpb25zWzBdLnBhcnRpdGlvbltpXSA9PSAxAGJ6LnNpemUgJSAzID09IDEAVHJlZV9lZGdlLnNpemUgPT0gTl9ub2RlcyAtIDEAbm9kZV9zZXRfc2l6ZShnLT5uX2lkKSA9PSBvc2l6ZSArIDEAbi0+Y291bnQgKyAoKm5uKS0+Y291bnQgPT0gTk9ERUNBUkQgKyAxAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSArIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA9PSBOT0RFQ0FSRCArIDEAZ3JleTAAZ3JheTAAanNvbjAAI2YwZjBmMAAjZTBlMGUwAHhiLT51LnMubG9jYXRlZCA+IEFHWEJVRl9JTkxJTkVfU0laRV8wAFwwAFQwAFx4RjAAXHhFMABceEQwAFx4QzAAXHhCMABceEEwAGdyZXk5MABncmF5OTAAXHg5MABncmV5ODAAZ3JheTgwAFx4ODAAIzgwODA4MABncmV5NzAAZ3JheTcwAGNjd3JvdCA9PSAwIHx8IGNjd3JvdCA9PSA5MCB8fCBjY3dyb3QgPT0gMTgwIHx8IGNjd3JvdCA9PSAyNzAAY3dyb3QgPT0gMCB8fCBjd3JvdCA9PSA5MCB8fCBjd3JvdCA9PSAxODAgfHwgY3dyb3QgPT0gMjcwAGdyZXk2MABncmF5NjAAZ3JleTUwAGdyYXk1MABncmV5NDAAZ3JheTQwAHIud2lkdGgoKTwxZTQwAGdyZXkzMABncmF5MzAAIzMwMzAzMABncmV5MjAAZ3JheTIwAGdyZXkxMABncmF5MTAAXHgxMAAjMTAxMDEwAC9wYWlyZWQxMi8xMAAvc2V0MzEyLzEwAC9yZGd5MTEvMTAAL3JkeWxidTExLzEwAC9yZGJ1MTEvMTAAL3B1b3IxMS8xMAAvcHJnbjExLzEwAC9yZHlsZ24xMS8xMAAvc3BlY3RyYWwxMS8xMAAvcGl5ZzExLzEwAC9icmJnMTEvMTAAL3BhaXJlZDExLzEwAC9zZXQzMTEvMTAAL3JkZ3kxMC8xMAAvcmR5bGJ1MTAvMTAAL3JkYnUxMC8xMAAvcHVvcjEwLzEwAC9wcmduMTAvMTAAL3JkeWxnbjEwLzEwAC9zcGVjdHJhbDEwLzEwAC9waXlnMTAvMTAAL2JyYmcxMC8xMAAvcGFpcmVkMTAvMTAAL3NldDMxMC8xMAAxMjAwAGdyZXkxMDAAZ3JheTEwMABJU08tSVItMTAwADEwMDAwACUhUFMtQWRvYmUtMy4wADEyLjEuMABueiA+IDAAZGlzdCA+IDAAcGF0aGNvdW50ID4gMAB3Z3QgPiAwAG5zaXRlcyA+IDAAc2lkZXMgPiAwAChydiA9PSAwKSB8fCAoTkRfb3JkZXIocnYpLU5EX29yZGVyKHYpKSpkaXIgPiAwAGxlbiA+IDAAcXQxLT5uID4gMCAmJiBxdDItPm4gPiAwAHdpZHRoID4gMABsaXN0LT5zaXplID4gMABzcGwtPnNpemUgPiAwAHNlbGYtPnNpemUgPiAwAGJ6LnNpemUgPiAwAGdyYXBoLT53ZWlnaHRzW3hdID4gMABncmFwaC0+d2VpZ2h0c1tuX2VkZ2VzXSA+IDAAbSA+IDAgJiYgbiA+IDAgJiYgbnogPj0gMAB0ID49IDAAbm5vZGVzID49IDAAbl9vYnMgPj0gMABuID49IDAAbi0+bGV2ZWwgPj0gMAB0b3RhbCA+PSAwAG9yaWdpbmFsID49IDAATWF4cmFuayA+PSAwAFBhY2sgPj0gMABpaSA8IDE8PGRpbSAmJiBpaSA+PSAwAHdpZHRoID49IDAAamRpYWcgPj0gMABpZGlhZyA+PSAwAHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFswXSA+PSAwICYmIHJ0cC0+c3BsaXQuUGFydGl0aW9uc1swXS5jb3VudFsxXSA+PSAwAFYgPj0gMABhZ25ub2RlcyhncmFwaCkgPj0gMABhZ25ub2RlcyhnKSA+PSAwAEVEX2NvdW50KGUpID49IDAAb2JqcDEtPnN6LnggPT0gMCAmJiBvYmpwMS0+c3oueSA9PSAwAGNfY250ID09IDAAcmFua19yZXN1bHQgPT0gMABnZXR0aW1lb2ZkYXlfcmVzID09IDAAaiA9PSAwAE5EX2luKHJpZ2h0KS5zaXplICsgTkRfb3V0KHJpZ2h0KS5zaXplID09IDAAYS5zaGFwZSA9PSAwIHx8IGIuc2hhcGUgPT0gMABkdHNpemUoZGVzdCkgPT0gMABkdHNpemUoZy0+bl9zZXEpID09IDAAZHRzaXplKGctPmdfc2VxKSA9PSAwAGR0c2l6ZShnLT5lX3NlcSkgPT0gMABHRF9taW5yYW5rKGcpID09IDAAZHRzaXplKGctPmdfaWQpID09IDAAZHRzaXplKGctPmVfaWQpID09IDAAc2VsZi0+Y2FwYWNpdHkgIT0gMABjb3N4ICE9IDAgfHwgc2lueCAhPSAwAG1lbWNtcCgmc3R5bGUsICYoZ3JhcGh2aXpfcG9seWdvbl9zdHlsZV90KXswfSwgc2l6ZW9mKHN0eWxlKSkgIT0gMAByZXN1bHQgPT0gKGludCkoc2l6ZSAtIDEpIHx8IHJlc3VsdCA8IDAAbWFza1tpaV0gPCAwAE5EX2hlYXBpbmRleCh2KSA8IDAAXC8AWDExLwAlLipzLgBzcGVjaWZpZWQgcm9vdCBub2RlICIlcyIgd2FzIG5vdCBmb3VuZC4AR3JhcGggJXMgaGFzIGFycmF5IHBhY2tpbmcgd2l0aCB1c2VyIHZhbHVlcyBidXQgbm8gInNvcnR2IiBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLgAxLgAtMC4AJSFQUy1BZG9iZS0AJVBERi0APCEtLQAgLAArACoAc3RyZXEoYXB0ci0+dS5uYW1lLEtleSkAIWlzX2V4YWN0bHlfZXF1YWwoUi54LCBRLngpIHx8ICFpc19leGFjdGx5X2VxdWFsKFIueSwgUS55KQBORF9vcmRlcih2KSA8IE5EX29yZGVyKHcpAHUgPT0gVUZfZmluZCh1KQAhcG9pbnRzX2lzX2VtcHR5KHBsaXN0KQAhb2JqbGlzdF9pc19lbXB0eShsaXN0KQAhbm9kZWxpc3RfaXNfZW1wdHkobGlzdCkAIXBvaW50c19pc19lbXB0eShsaXN0KQBvbmUgPD0gbm9kZWxpc3Rfc2l6ZShsaXN0KQBucCA8IG5vZGVsaXN0X3NpemUobGlzdCkAc3RkOjppc19oZWFwKGhlYXAuYmVnaW4oKSwgaGVhcC5lbmQoKSwgZ3QpACEocS0+cXRzKQAhaW50c19pc19lbXB0eSgmbGVhdmVzKQBvbl9oZWFwKHIpAG5vZGVfc2V0X3NpemUoZy0+bl9pZCkgPT0gKHNpemVfdClkdHNpemUoZy0+bl9zZXEpAE5EX3JhbmsoZnJvbSkgPCBORF9yYW5rKHRvKQBub3Qgd2VsbC1mb3JtZWQgKGludmFsaWQgdG9rZW4pAGFnc3VicmVwKGcsbikAbiAhPSBORF9uZXh0KG4pAGZpbmRfZmFzdF9ub2RlKGcsIG4pAChudWxsKQAoIWpjbikgJiYgKCF2YWwpACEocS0+bCkAc3ltLT5pZCA+PSAwICYmIHN5bS0+aWQgPCB0b3BkaWN0c2l6ZShvYmopACEoKmZsYWcpAG1vdmUgdG8gKCUuMGYsICUuMGYpADsgc3BsaW5lIHRvICglLjBmLCAlLjBmKQA7IGxpbmUgdG8gKCUuMGYsICUuMGYpAFNwYXJzZU1hdHJpeF9pc19zeW1tZXRyaWMoQSwgdHJ1ZSkAdmFsdWUgJiYgc3RybGVuKHZhbHVlKQBTcGFyc2VNYXRyaXhfaXNfc3ltbWV0cmljKEEsIGZhbHNlKQBFRF9sYWJlbChmZSkAIVRSRUVfRURHRShlKQAhY29uc3RyYWluaW5nX2ZsYXRfZWRnZShnLCBlKQBub2RlX3NldF9pc19lbXB0eShnLT5uX2lkKQByXyVkKQBsXyVkKQAobGliKQAhU3BhcnNlTWF0cml4X2hhc19kaWFnb25hbChBKQBTcGFyc2VNYXRyaXhfa25vd25fc3RydWN1cmFsX3N5bW1ldHJpYyhBKQAgc2Nhbm5pbmcgYSBIVE1MIHN0cmluZyAobWlzc2luZyAnPic/IGJhZCBuZXN0aW5nPyBsb25nZXIgdGhhbiAlZD8pACBzY2FubmluZyBhIHF1b3RlZCBzdHJpbmcgKG1pc3NpbmcgZW5kcXVvdGU/IGxvbmdlciB0aGFuICVkPykAIHNjYW5uaW5nIGEgLyouLi4qLyBjb21tZW50IChtaXNzaW5nICcqLz8gbG9uZ2VyIHRoYW4gJWQ/KQBmYWxsYmFjayg0KQBvbl9oZWFwKHIwKSB8fCBvbl9oZWFwKHIxKQBhZ3RhaWwoZSkgPT0gVUZfZmluZChhZ3RhaWwoZSkpAGFnaGVhZChlKSA9PSBVRl9maW5kKGFnaGVhZChlKSkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpAG91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkAb3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpAHNldGxpbmV3aWR0aCgAKSByb3RhdGUoJWQpIHRyYW5zbGF0ZSgAIHRyYW5zZm9ybT0ic2NhbGUoAE5PVEFUSU9OKAAgKAAgbmVhciAnJXMnACVsZiwlbGYsJWxmLCclW14nXScAaXNkaWdpdCgoaW50KWRvdHBbMV0pICYmIGlzZGlnaXQoKGludClkb3RwWzJdKSAmJiBkb3RwWzNdID09ICdcMCcAJgAlACQAdXJsKCMAPHRleHRQYXRoIHhsaW5rOmhyZWY9IiMAPGFyZWEgc2hhcGU9InBvbHkiACBmaWxsPSIjJTAyeCUwMnglMDJ4IgAoc2VxICYgU0VRX01BU0spID09IHNlcSAmJiAic2VxdWVuY2UgSUQgb3ZlcmZsb3ciAGd2X3NvcnRfY29tcGFyID09IE5VTEwgJiYgZ3Zfc29ydF9hcmcgPT0gTlVMTCAmJiAidW5zdXBwb3J0ZWQgcmVjdXJzaXZlIGNhbGwgdG8gZ3Zfc29ydCIAZ3Zfc29ydF9jb21wYXIgIT0gTlVMTCAmJiAibm8gY29tcGFyYXRvciBzZXQgaW4gZ3Zfc29ydCIAb3AtPm9wLnUucG9seWdvbi5jbnQgPD0gSU5UX01BWCAmJiAicG9seWdvbiBjb3VudCBleGNlZWRzIGd2cmVuZGVyX3BvbHlnb24gc3VwcG9ydCIAIHRleHQtYW5jaG9yPSJzdGFydCIAcC54ICE9IGEgJiYgImNhbm5vdCBoYW5kbGUgZWxsaXBzZSB0YW5nZW50IHNsb3BlIGluIGhvcml6b250YWwgZXh0cmVtZSBwb2ludCIAZnVsbF9sZW5ndGhfd2l0aG91dF9zaGFmdCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCB3aXRob3V0IHNoYWZ0IgA8YXJlYSBzaGFwZT0icmVjdCIAc2l6ZSA+IDAgJiYgImF0dGVtcHQgdG8gYWxsb2NhdGUgYXJyYXkgb2YgMC1zaXplZCBlbGVtZW50cyIAaW5kZXggPCBzZWxmLT5zaXplX2JpdHMgJiYgIm91dCBvZiBib3VuZHMgYWNjZXNzIgBpbmRleCA8IHNlbGYuc2l6ZV9iaXRzICYmICJvdXQgb2YgYm91bmRzIGFjY2VzcyIAKnMxICE9ICpzMiAmJiAiZHVwbGljYXRlIHNlcGFyYXRvciBjaGFyYWN0ZXJzIgBHRF9taW5yYW5rKHN1YmcpIDw9IEdEX21heHJhbmsoc3ViZykgJiYgImNvcnJ1cHRlZCByYW5rIGJvdW5kcyIAaW5kZXggPCBsaXN0LT5zaXplICYmICJpbmRleCBvdXQgb2YgYm91bmRzIgBpbmRleCA8IG5vZGVsaXN0X3NpemUobGlzdCkgJiYgImluZGV4IG91dCBvZiBib3VuZHMiAGluZGV4IDwgaW50c19zaXplKGxpc3QpICYmICJpbmRleCBvdXQgb2YgYm91bmRzIgBpbmRleCA8IG5vZGVzX3NpemUobGlzdCkgJiYgImluZGV4IG91dCBvZiBib3VuZHMiACh1aW50cHRyX3QpcyAlIDIgPT0gMCAmJiAiaGVhcCBwb2ludGVyIHdpdGggbG93IGJpdCBzZXQgd2lsbCBjb2xsaWRlIHdpdGggYW5vbnltb3VzIElEcyIAICgrJTZkIGJ5dGVzICVzfCVkLCB4bWxwYXJzZS5jOiVkKSAlKnMiACBmb250LWZhbWlseT0iJXMiACBmb250LXdlaWdodD0iJXMiACBmaWxsPSIlcyIAIGZvbnQtc3RyZXRjaD0iJXMiACBmb250LXN0eWxlPSIlcyIAYmFkIGVkZ2UgbGVuICIlcyIAIGJhc2VsaW5lLXNoaWZ0PSJzdXBlciIAYWd4Ymxlbih4YikgPD0gc2l6ZW9mKHhiLT51LnN0b3JlKSAmJiAiYWd4YnVmIGNvcnJ1cHRpb24iACB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgBmdWxsX2xlbmd0aCA+IDAgJiYgIm5vbi1wb3NpdGl2ZSBmdWxsIGxlbmd0aCIAZnVsbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIGZ1bGwgYmFzZSB3aWR0aCIAbm9taW5hbF9iYXNlX3dpZHRoID4gMCAmJiAibm9uLXBvc2l0aXZlIG5vbWluYWwgYmFzZSB3aWR0aCIAIiB3aWR0aD0iJWdweCIgaGVpZ2h0PSIlZ3B4IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0IiB4PSIlZyIgeT0iJWciACIgd2lkdGg9IiVncHgiIGhlaWdodD0iJWdweCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgeD0iJWciIHk9IiVnIgAgZm9udC1zaXplPSIlLjJmIgAgdmlld0JveD0iJS4yZiAlLjJmICUuMmYgJS4yZiIAIGZpbGwtb3BhY2l0eT0iJWYiAGlzZmluaXRlKG0pICYmICJlbGxpcHNlIHRhbmdlbnQgc2xvcGUgaXMgaW5maW5pdGUiACh4Yi0+dS5zLmxvY2F0ZWQgPT0gQUdYQlVGX09OX0hFQVAgfHwgeGItPnUucy5sb2NhdGVkIDw9IHNpemVvZih4Yi0+dS5zdG9yZSkpICYmICJjb3JydXB0ZWQgYWd4YnVmIHR5cGUiACB0ZXh0LWFuY2hvcj0ibWlkZGxlIgA8YXJlYSBzaGFwZT0iY2lyY2xlIgBvbGRfbm1lbWIgPCBTSVpFX01BWCAvIHNpemUgJiYgImNsYWltZWQgcHJldmlvdXMgZXh0ZW50IGlzIHRvbyBsYXJnZSIAdGhldGEgPj0gMCAmJiB0aGV0YSA8PSBNX1BJICYmICJ0aGV0YSBvdXQgb2YgcmFuZ2UiACB0ZXh0LWFuY2hvcj0iZW5kIgAgZm9udC13ZWlnaHQ9ImJvbGQiACBmb250LXN0eWxlPSJpdGFsaWMiACBiYXNlbGluZS1zaGlmdD0ic3ViIgBcIgBsbGVuIDw9IChzaXplX3QpSU5UX01BWCAmJiAiWE1MIHRva2VuIHRvbyBsb25nIGZvciBleHBhdCBBUEkiACIgcnk9IgBfcCIgc3RhcnRPZmZzZXQ9IjUwJSI+PHRzcGFuIHg9IjAiIGR5PSIAIiBjeT0iACIgeT0iACIgcng9IgAgY3g9IgAgeD0iACB0YXJnZXQ9IgAgcG9pbnRzPSIAIGNvb3Jkcz0iACB0ZXh0LWRlY29yYXRpb249IgAgZmlsbD0iACIgc3Ryb2tlLXdpZHRoPSIAPGltYWdlIHhsaW5rOmhyZWY9IgA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IgAiIG5hbWU9IgAgeGxpbms6dGl0bGU9IgAgdGl0bGU9IgAiIHN0cm9rZT0iADxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9IgA8ZGVmcz4KPHJhZGlhbEdyYWRpZW50IGlkPSIAPG1hcCBpZD0iADxnIGlkPSIAIGQ9IgAiIHkyPSIAIiB4Mj0iACIgeTE9IgB4MT0iACB0cmFuc2Zvcm09InJvdGF0ZSglZCAlZyAlZykiAGFneGJsZW4oJlNidWYpID09IDAgJiYgInBlbmRpbmcgc3RyaW5nIGRhdGEgdGhhdCB3YXMgbm90IGNvbnN1bWVkIChtaXNzaW5nICIgImVuZHN0cigpL2VuZGh0bWxzdHIoKT8pIgAgYWx0PSIiAEN5Y2xlIEVycm9yIQBQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkIQA8IS0tIEdlbmVyYXRlZCBieSAAJWMgJXp1IAB0ICV1IAAgY3JlYXRlIHRleHQgAHhMYXlvdXQgAGRlZmF1bHQgAHN0cmljdCAAJXMlenUgLSVzIAAgLXNtb290aCBiZXppZXIgACBtb3ZldG8gACB2ZXJzaW9uIAAgY3JlYXRlIHBvbHlnb24gACAtdGV4dCB7JXN9IC1maWxsIAAgY3JlYXRlIG92YWwgACAtd2lkdGggAG5ld3BhdGggAGdyYXBoIABzLCUuNWcsJS41ZyAAJS41ZywlLjVnLCUuNWcsJS41ZyAAZSwlLjVnLCUuNWcgACVnICVnIAAlLjAzbGYgACUuM2YgACVkICVkICVkICVkICVkICVkICUuMWYgJS40ZiAlZCAlLjFmICUuMWYgJS4wZiAlLjBmIAAgLW91dGxpbmUgACBjcmVhdGUgbGluZSAAbm9kZSAAJWQgAFRvdGFsIHNpemUgPiAxIGluICIlcyIgY29sb3Igc3BlYyAAWyAvUmVjdCBbIABUIABTIABPUEVOIABJIABGIABFIABDIAAgLT4gAFJhbmsgc2VwYXJhdGlvbiA9IABuZXR3b3JrIHNpbXBsZXg6IABVbnNhdGlzZmllZCBjb25zdHJhaW50OiAAQ2FsY3VsYXRpbmcgc2hvcnRlc3QgcGF0aHM6IAAlczogAFNvbHZpbmcgbW9kZWw6IABTZXR0aW5nIHVwIHNwcmluZyBtb2RlbDogAGNvbnZlcnQgZ3JhcGg6IAAgVGl0bGU6IAAidGV4dCI6IAB7ImZyYWMiOiAlLjAzZiwgImNvbG9yIjogACJuYW1lIjogACJzdHlsZSI6IAAiZmFjZSI6IAAyIAA8IS0tIAAgLS0gACUgAF9wIiAAbF8lZCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIAANICAgICAgICAgICAgICAgIGl0ZXIgPSAlZCwgc3RlcCA9ICVmIEZub3JtID0gJWYgbnogPSAlZCAgSyA9ICVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAKICAgIAA6CSAAICAgICVzfQoAdHJ5aW5nIHRvIGFkZCB0byByZWN0IHslZiArLy0gJWYsICVmICsvLSAlZn0KACNkZWZhdWx0IHsgZmluaXNoIHsgYW1iaWVudCAwLjEgZGlmZnVzZSAwLjkgfSB9CgBwaWdtZW50IHsgY29sb3IgJXMgfQoAbGlnaHRfc291cmNlIHsgPDE1MDAsMzAwMCwtMjUwMD4gY29sb3IgV2hpdGUgfQoAZ2xvYmFsX3NldHRpbmdzIHsgYXNzdW1lZF9nYW1tYSAxLjAgfQoAICAgIHRleHR1cmUgSW1hZ2VUZXh0dXJlIHsgdXJsICIlcyIgfQoAICAgIH0KAC8vc2t5CnBsYW5lIHsgPDAsIDEsIDA+LCAxIGhvbGxvdwogICAgdGV4dHVyZSB7CiAgICAgICAgcGlnbWVudCB7IGJvem8gdHVyYnVsZW5jZSAwLjk1CiAgICAgICAgICAgIGNvbG9yX21hcCB7CiAgICAgICAgICAgICAgICBbMC4wMCByZ2IgPDAuMDUsIDAuMjAsIDAuNTA+XQogICAgICAgICAgICAgICAgWzAuNTAgcmdiIDwwLjA1LCAwLjIwLCAwLjUwPl0KICAgICAgICAgICAgICAgIFswLjc1IHJnYiA8MS4wMCwgMS4wMCwgMS4wMD5dCiAgICAgICAgICAgICAgICBbMC43NSByZ2IgPDAuMjUsIDAuMjUsIDAuMjU+XQogICAgICAgICAgICAgICAgWzEuMDAgcmdiIDwwLjUwLCAwLjUwLCAwLjUwPl0KICAgICAgICAgICAgfQogICAgICAgICAgICBzY2FsZSA8MS4wMCwgMS4wMCwgMS41MD4gKiAyLjUwCiAgICAgICAgICAgIHRyYW5zbGF0ZSA8MC4wMCwgMC4wMCwgMC4wMD4KICAgICAgICB9CiAgICAgICAgZmluaXNoIHsgYW1iaWVudCAxIGRpZmZ1c2UgMCB9CiAgICB9CiAgICBzY2FsZSAxMDAwMAp9Ci8vbWlzdApmb2cgeyBmb2dfdHlwZSAyCiAgICBkaXN0YW5jZSA1MAogICAgY29sb3IgcmdiIDwxLjAwLCAxLjAwLCAxLjAwPiAqIDAuNzUKICAgIGZvZ19vZmZzZXQgMC4xMAogICAgZm9nX2FsdCAxLjUwCiAgICB0dXJidWxlbmNlIDEuNzUKfQovL2duZApwbGFuZSB7IDwwLjAwLCAxLjAwLCAwLjAwPiwgMAogICAgdGV4dHVyZSB7CiAgICAgICAgcGlnbWVudHsgY29sb3IgcmdiIDwwLjI1LCAwLjQ1LCAwLjAwPiB9CiAgICAgICAgbm9ybWFsIHsgYnVtcHMgMC43NSBzY2FsZSAwLjAxIH0KICAgICAgICBmaW5pc2ggeyBwaG9uZyAwLjEwIH0KICAgIH0KfQoAY2FtZXJhIHsgbG9jYXRpb24gPCUuM2YgLCAlLjNmICwgLTUwMC4wMDA+CiAgICAgICAgIGxvb2tfYXQgIDwlLjNmICwgJS4zZiAsIDAuMDAwPgogICAgICAgICByaWdodCB4ICogaW1hZ2Vfd2lkdGggLyBpbWFnZV9oZWlnaHQKICAgICAgICAgYW5nbGUgJS4zZgp9CgAgICAgbWF0ZXJpYWwgTWF0ZXJpYWwgewoAU2hhcGUgewoAICBhcHBlYXJhbmNlIEFwcGVhcmFuY2UgewoAL3VzZXJfc2hhcGVfJWQgewoAZ3JhcGggRyB7CgBhcnJvd2hlYWQgPSA3ICVzIG5vdCB1c2VkIGJ5IGdyYXBodml6CgBib3hyYWQgPSAwICVzIG5vIHJvdW5kZWQgY29ybmVycyBpbiBncmFwaHZpegoAb3V0IG9mIG1lbW9yeQoAJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkKAEdyYXBodml6IGJ1aWx0IHdpdGhvdXQgYW55IHRyaWFuZ3VsYXRpb24gbGlicmFyeQoAcmVtb3ZlX292ZXJsYXA6IEdyYXBodml6IG5vdCBidWlsdCB3aXRoIHRyaWFuZ3VsYXRpb24gbGlicmFyeQoAJXMgZmlsbCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgZ3BpYyBjYW4gdXNlIGZpbGwgb3IgZmlsbGVkLCAxMHRoIEVkaXRpb24gdXNlcyBmaWxsIG9ubHkKAGJveHJhZD0yLjAgJXMgd2lsbCBiZSByZXNldCB0byAwLjAgYnkgZ3BpYyBvbmx5CgBpbiBjaGVja3BhdGgsIHN0YXJ0IHBvcnQgbm90IGluIGZpcnN0IGJveAoAaW4gY2hlY2twYXRoLCBlbmQgcG9ydCBub3QgaW4gbGFzdCBib3gKACVkICVkICMlMDJ4JTAyeCUwMngKAEhlYXAgb3ZlcmZsb3cKAHRleHQgewogICAgdHRmICIlcyIsCiAgICAiJXMiLCAlLjNmLCAlLjNmCiAgICAgICAgbm9fc2hhZG93CgAlZCAlZCAlZCAlLjBmICVkICVkICVkICVkICVkICUuMWYgJWQgJWQgJWQgJWQgJWQgJXp1CgB0b3RhbCBhZGRlZCBzbyBmYXIgPSAlenUKAHJvb3QgPSAlcyBtYXggc3RlcHMgdG8gcm9vdCA9ICVsbHUKAC5wcyAlLjBmKlxuKFNGdS8lLjBmdQoAICBtYXJnaW4gJXUKAE51bWJlciBvZiBpdGVyYXRpb25zID0gJXUKAE51bWJlciBvZiBpbmNyZWFzZXMgPSAldQoAb3ZlcmxhcCBbJXVdIDogJXUKACAlcyBhbGlnbmVkdGV4dAoAbGF5ZXJzIG5vdCBzdXBwb3J0ZWQgaW4gJXMgb3V0cHV0CgBhZGRfdHJlZV9lZGdlOiBlbXB0eSBvdXRlZGdlIGxpc3QKAGFkZF90cmVlX2VkZ2U6IGVtcHR5IGluZWRnZSBsaXN0CgBObyBsaWJ6IHN1cHBvcnQKACVzIC5QUyB3L28gYXJncyBjYXVzZXMgR05VIHBpYyB0byBzY2FsZSBkcmF3aW5nIHRvIGZpdCA4LjV4MTEgcGFwZXI7IERXQiBkb2VzIG5vdAoAJXMgR05VIHBpYyBzdXBwb3J0cyBhIGxpbmV0aGljayB2YXJpYWJsZSB0byBzZXQgbGluZSB0aGlja25lc3M7IERXQiBhbmQgMTB0aCBFZC4gZG8gbm90CgAlcyBHTlUgcGljIHN1cHBvcnRzIGEgYm94cmFkIHZhcmlhYmxlIHRvIGRyYXcgYm94ZXMgd2l0aCByb3VuZGVkIGNvcm5lcnM7IERXQiBhbmQgMTB0aCBFZC4gZG8gbm90CgAgLyVzIHNldF9mb250CgAlcyUuKnMgaXMgbm90IGEgdHJvZmYgZm9udAoAdW5leHBlY3RlZCBjYXNlIGluIGxvY2F0ZV9lbmRwb2ludAoAY2VsbCBzaXplIHRvbyBzbWFsbCBmb3IgY29udGVudAoAdGFibGUgc2l6ZSB0b28gc21hbGwgZm9yIGNvbnRlbnQKACUlRW5kRG9jdW1lbnQKAFVuY2xvc2VkIGNvbW1lbnQKAExhYmVsIGNsb3NlZCBiZWZvcmUgZW5kIG9mIEhUTUwgZWxlbWVudAoAUG9ydHJhaXQKAGZpeGVkIGNlbGwgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoAZml4ZWQgdGFibGUgc2l6ZSB3aXRoIHVuc3BlY2lmaWVkIHdpZHRoIG9yIGhlaWdodAoAcG9zIGF0dHJpYnV0ZSBmb3IgZWRnZSAoJXMsJXMpIGRvZXNuJ3QgaGF2ZSAzbisxIHBvaW50cwoAICBnZW5lcmF0ZWQgJWQgY29uc3RyYWludHMKAHNwbGluZXMgYW5kIGNsdXN0ZXIgZWRnZXMgbm90IHN1cHBvcnRlZCAtIHVzaW5nIGxpbmUgc2VnbWVudHMKAG9iamVjdHMKAFdhcm5pbmc6IG5vZGUgJXMsIHBvc2l0aW9uICVzLCBleHBlY3RlZCB0d28gZmxvYXRzCgBmb250IG5hbWUgJXMgY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IG1heSBub3QgYmUgYWNjZXB0ZWQgYnkgc29tZSBQUyB2aWV3ZXJzCgBmb250IG5hbWUgJXMgaXMgbG9uZ2VyIHRoYW4gMjkgY2hhcmFjdGVycyB3aGljaCBtYXkgYmUgcmVqZWN0ZWQgYnkgc29tZSBQUyB2aWV3ZXJzCgBjYW5ub3QgYWxsb2NhdGUgcHMKAHNjYWxlPTEuMCAlcyByZXF1aXJlZCBmb3IgY29tcGFyaXNvbnMKAFNldHRpbmcgaW5pdGlhbCBwb3NpdGlvbnMKACVzIERXQiAyIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMKAGFycmF5IHBhY2tpbmc6ICVzICV6dSByb3dzICV6dSBjb2x1bW5zCgBzeW50YXggYW1iaWd1aXR5IC0gYmFkbHkgZGVsaW1pdGVkIG51bWJlciAnJXMnIGluIGxpbmUgJWQgb2YgJXMgc3BsaXRzIGludG8gdHdvIHRva2VucwoAZWRnZSBsYWJlbHMgd2l0aCBzcGxpbmVzPWN1cnZlZCBub3Qgc3VwcG9ydGVkIGluIGRvdCAtIHVzZSB4bGFiZWxzCgBmbGF0IGVkZ2UgYmV0d2VlbiBhZGphY2VudCBub2RlcyBvbmUgb2Ygd2hpY2ggaGFzIGEgcmVjb3JkIHNoYXBlIC0gcmVwbGFjZSByZWNvcmRzIHdpdGggSFRNTC1saWtlIGxhYmVscwoAb3V0IG9mIG1lbW9yeSB3aGVuIHRyeWluZyB0byBhbGxvY2F0ZSAlenUgYnl0ZXMKAGludGVnZXIgb3ZlcmZsb3cgd2hlbiB0cnlpbmcgdG8gYWxsb2NhdGUgJXp1ICogJXp1IGJ5dGVzCgB1cGRhdGU6IG1pc21hdGNoZWQgbGNhIGluIHRyZWV1cGRhdGVzCgBncmFwaCAlcywgY29vcmQgJXMsIGV4cGVjdGVkIGZvdXIgZG91YmxlcwoAbm9kZSAlcywgcG9zaXRpb24gJXMsIGV4cGVjdGVkIHR3byBkb3VibGVzCgBGb3VuZCAlZCBEaUctQ29MYSBib3VuZGFyaWVzCgBJbmNoZXMKACglNHp1KSAlN3p1IG5vZGVzICU3enUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IGNvdWxkIG5vdCBjb25zdHJ1Y3Qgb2JzdGFjbGVzIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHRoZSBib3VuZGluZyBib3hlcyBvZiBzb21lIG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAGNvbXBvdW5kRWRnZXM6IG5vZGVzIHRvdWNoIC0gZmFsbGluZyBiYWNrIHRvIHN0cmFpZ2h0IGxpbmUgZWRnZXMKAHNvbWUgbm9kZXMgd2l0aCBtYXJnaW4gKCUuMDJmLCUuMDJmKSB0b3VjaCAtIGZhbGxpbmcgYmFjayB0byBzdHJhaWdodCBsaW5lIGVkZ2VzCgBtZXJnZTI6IGdyYXBoICVzLCByYW5rICVkIGhhcyBvbmx5ICVkIDwgJWQgbm9kZXMKAFNjYW5uaW5nIGdyYXBoICVzLCAlZCBub2RlcwoAV2FybmluZzogbm8gaGFyZC1jb2RlZCBtZXRyaWNzIGZvciAnJXMnLiAgRmFsbGluZyBiYWNrIHRvICdUaW1lcycgbWV0cmljcwoAaW4gZWRnZSAlcyVzJXMKAFVzaW5nICVzOiAlczolcwoARm9ybWF0OiAiJXMiIG5vdCByZWNvZ25pemVkLiBVc2Ugb25lIG9mOiVzCgBMYXlvdXQgdHlwZTogIiVzIiBub3QgcmVjb2duaXplZC4gVXNlIG9uZSBvZjolcwoAbGF5b3V0ICVzCgAuZnQgJXMKAGJhZCBsYWJlbCBmb3JtYXQgJXMKAGluIHJvdXRlc3BsaW5lcywgZWRnZSBpcyBhIGxvb3AgYXQgJXMKACAgICAgICAlN2Qgbm9kZXMgJTdkIGVkZ2VzICU3enUgY29tcG9uZW50cyAlcwoAaW4gbGFiZWwgb2YgZWRnZSAlcyAlcyAlcwoAICBFZGdlICVzICVzICVzCgBvcnRobyAlcyAlcwoAcG9seWxpbmUgJXMgJXMKAHNwbGluZSAlcyAlcwoAcmVjdGFuZ2xlICglLjBmLCUuMGYpICglLjBmLCUuMGYpICVzICVzCgBpbiBjbHVzdGVyICVzCgAlcyB3YXMgYWxyZWFkeSBpbiBhIHJhbmtzZXQsIGRlbGV0ZWQgZnJvbSBjbHVzdGVyICVzCgAlcyAtPiAlczogdGFpbCBub3QgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAJXMgLT4gJXM6IGhlYWQgaXMgaW5zaWRlIHRhaWwgY2x1c3RlciAlcwoAaGVhZCBjbHVzdGVyICVzIGluc2lkZSB0YWlsIGNsdXN0ZXIgJXMKAGhlYWQgbm9kZSAlcyBpbnNpZGUgdGFpbCBjbHVzdGVyICVzCgAlcyAtPiAlczogaGVhZCBub3QgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAJXMgLT4gJXM6IHRhaWwgaXMgaW5zaWRlIGhlYWQgY2x1c3RlciAlcwoAdGFpbCBjbHVzdGVyICVzIGluc2lkZSBoZWFkIGNsdXN0ZXIgJXMKAHRhaWwgbm9kZSAlcyBpbnNpZGUgaGVhZCBjbHVzdGVyICVzCgBVbmhhbmRsZWQgYWRqdXN0IG9wdGlvbiAlcwoAcmVwb3NpdGlvbiAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCB4bGFiZWwgJXMKAG5vIHBvc2l0aW9uIGZvciBlZGdlIHdpdGggdGFpbCBsYWJlbCAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCBsYWJlbCAlcwoAbm8gcG9zaXRpb24gZm9yIGVkZ2Ugd2l0aCBoZWFkIGxhYmVsICVzCgAvLyoqKiBiZWdpbl9ncmFwaCAlcwoATWF4LiBpdGVyYXRpb25zICglZCkgcmVhY2hlZCBvbiBncmFwaCAlcwoAQ291bGQgbm90IHBhcnNlICJfYmFja2dyb3VuZCIgYXR0cmlidXRlIGluIGdyYXBoICVzCgBpbiBsYWJlbCBvZiBncmFwaCAlcwoAQ3JlYXRpbmcgZWRnZXMgdXNpbmcgJXMKAEFkanVzdGluZyAlcyB1c2luZyAlcwoAJXMgd2hpbGUgb3BlbmluZyAlcwoAZGVyaXZlIGdyYXBoIF9kZ18lZCBvZiAlcwoAIF0gICV6dSB0cnVlICVzCgBdICAlZCB0cnVlICVzCgAgXSAgJXp1IGZhbHNlICVzCgBdICAlZCBmYWxzZSAlcwoAbWFrZVBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAbWFrZUFkZFBvbHk6IHVua25vd24gc2hhcGUgdHlwZSAlcwoAdXNpbmcgJXMgZm9yIHVua25vd24gc2hhcGUgJXMKACAgb2N0cmVlIHNjaGVtZSAlcwoAY2FuJ3Qgb3BlbiBsaWJyYXJ5IGZpbGUgJXMKAGNhbid0IGZpbmQgbGlicmFyeSBmaWxlICVzCgBCb3VuZGluZ0JveCBub3QgZm91bmQgaW4gZXBzZiBmaWxlICVzCgBjb3VsZG4ndCBvcGVuIGVwc2YgZmlsZSAlcwoAY291bGRuJ3QgcmVhZCBmcm9tIGVwc2YgZmlsZSAlcwoAaW4gbm9kZSAlcwoAc2hhcGVmaWxlIG5vdCBzZXQgb3Igbm90IGZvdW5kIGZvciBlcHNmIG5vZGUgJXMKAGluIGxhYmVsIG9mIG5vZGUgJXMKAGVuZCAlcwoAcmFua2luZzogZmFpbHVyZSB0byBjcmVhdGUgc3Ryb25nIGNvbnN0cmFpbnQgZWRnZSBiZXR3ZWVuIG5vZGVzICVzIGFuZCAlcwoAb29wcywgaW50ZXJuYWwgZXJyb3I6IHVuaGFuZGxlZCBjb2xvciB0eXBlPSVkICVzCgAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkICVkICVkCiAlZCAlcwoAcm9vdCA9ICVzCgAvLyoqKiB0ZXh0c3BhbjogJXMsIGZvbnRzaXplID0gJS4zZiwgZm9udG5hbWUgPSAlcwoAdHJpZXMgPSAlZCwgbW9kZSA9ICVzCgAvLyoqKiBjb21tZW50OiAlcwoAZm9udG5hbWU6ICIlcyIgcmVzb2x2ZWQgdG86ICVzCgAlJSUlUGFnZU9yaWVudGF0aW9uOiAlcwoAZGVsYXVuYXlfdHJpYW5ndWxhdGlvbjogJXMKAGRlbGF1bmF5X3RyaTogJXMKAGd2cHJpbnRmOiAlcwoAbmVzdGluZyBub3QgYWxsb3dlZCBpbiBzdHlsZTogJXMKAHVubWF0Y2hlZCAnKScgaW4gc3R5bGU6ICVzCgB1bm1hdGNoZWQgJygnIGluIHN0eWxlOiAlcwoAJSUlJVRpdGxlOiAlcwoAJXMgVGl0bGU6ICVzCgAjIFRpdGxlOiAlcwoALy8qKiogYmVnaW5fbm9kZTogJXMKAHJlYWxsb2MgZmFpbGVkOiAlcwoAbGliL3BhdGhwbGFuLyVzOiVkOiAlcwoAZ3JpZCglZCwlZCk6ICVzCgBDb3VsZCBub3Qgb3BlbiAiJXMiIGZvciB3cml0aW5nIDogJXMKAHN0YXJ0IHBvcnQ6ICglLjVnLCAlLjVnKSwgdGFuZ2VudCBhbmdsZTogJS41ZywgJXMKAGVuZCBwb3J0OiAoJS41ZywgJS41ZyksIHRhbmdlbnQgYW5nbGU6ICUuNWcsICVzCgAgWyV6dV0gJXAgc2V0ICVkICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcwoAJSUgJXMKACMgJXMKACAgbW9kZSAgICVzCgBjb25qdWdhdGVfZ3JhZGllbnQ6IHVuZXhwZWN0ZWQgbGVuZ3RoIDAgdmVjdG9yCgAlcyB0byBjaGFuZ2UgZHJhd2luZyBzaXplLCBtdWx0aXBseSB0aGUgd2lkdGggYW5kIGhlaWdodCBvbiB0aGUgLlBTIGxpbmUgYWJvdmUgYW5kIHRoZSBudW1iZXIgb24gdGhlIHR3byBsaW5lcyBiZWxvdyAocm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyKSBieSBhIHNjYWxlIGZhY3RvcgoAYWRkX3NlZ21lbnQ6IGVycm9yCgAlLjVnICUuNWcgJS41ZyAlc2NvbG9yCgAwIDAgMCBlZGdlY29sb3IKADAuOCAwLjggMC44IHNldHJnYmNvbG9yCgAwIDAgMSBzZXRyZ2Jjb2xvcgoAMSAwIDAgc2V0cmdiY29sb3IKADAgMCAwIHNldHJnYmNvbG9yCgAlZCAlZCBzZXRsYXllcgoALy8qKiogZW5kX2xheWVyCgBVVEYtOCBpbnB1dCB1c2VzIG5vbi1MYXRpbjEgY2hhcmFjdGVycyB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIFBvc3RTY3JpcHQgZHJpdmVyCgBMZXR0ZXIKAC8vKioqIGJlZ2luX2NsdXN0ZXIKAC8vKioqIGVuZF9jbHVzdGVyCgByZW1vdmluZyBlbXB0eSBjbHVzdGVyCgBDZW50ZXIKAFdhcm5pbmc6IG5vIHZhbHVlIGZvciB3aWR0aCBvZiBub24tQVNDSUkgY2hhcmFjdGVyICV1LiBGYWxsaW5nIGJhY2sgdG8gd2lkdGggb2Ygc3BhY2UgY2hhcmFjdGVyCgBiYXNlIHJlZmVyZXIKACUlUGFnZVRyYWlsZXIKACUlVHJhaWxlcgoALy8qKiogYmV6aWVyCgAiJXMiIHdhcyBub3QgZm91bmQgYXMgYSBmaWxlIG9yIGFzIGEgc2hhcGUgbGlicmFyeSBtZW1iZXIKAHN0b3AKACBjdXJ2ZXRvCgBuZXdwYXRoICUuMGYgJS4wZiBtb3ZldG8KACUuMGYgJS4wZiBsaW5ldG8KACBsYXlvdXQ9bmVhdG8KAG5vZGUgJXMgaW4gZ3JhcGggJXMgaGFzIG5vIHBvc2l0aW9uCgAlcyBtYXhwc2h0IGFuZCBtYXhwc3dpZCBoYXZlIG5vIG1lYW5pbmcgaW4gRFdCIDIuMCwgc2V0IHBhZ2UgYm91bmRhcmllcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIGFycm93aGVhZCBoYXMgbm8gbWVhbmluZyBpbiBEV0IgMiwgYXJyb3doZWFkID0gNyBtYWtlcyBmaWxsZWQgYXJyb3doZWFkcyBpbiBncGljIGFuZCBpbiAxMHRoIEVkaXRpb24KACVzIGFycm93aGVhZCBpcyB1bmRlZmluZWQgaW4gRFdCIDIsIGluaXRpYWxseSAxIGluIGdwaWMsIDIgaW4gMTB0aCBFZGl0aW9uCgBtYWpvcml6YXRpb24KAC8vKioqIHBvbHlnb24KAG92ZXJmbG93IHdoZW4gY29tcHV0aW5nIGVkZ2Ugd2VpZ2h0IHN1bQoAc2ZkcCBvbmx5IHN1cHBvcnRzIHN0YXJ0PXJhbmRvbQoAbm9kZSBwb3NpdGlvbnMgYXJlIGlnbm9yZWQgdW5sZXNzIHN0YXJ0PXJhbmRvbQoAY2xvc2VwYXRoIGZpbGwKACBlbGxpcHNlX3BhdGggZmlsbAoAICAlLjBmICUuMGYgY2VsbAoAJWYgJWYgJWYgJWYgY2VsbAoAZ3JhcGggJXMgaXMgZGlzY29ubmVjdGVkLiBIZW5jZSwgdGhlIGNpcmN1aXQgbW9kZWwKAGdyYXBoIGlzIGRpc2Nvbm5lY3RlZC4gSGVuY2UsIHRoZSBjaXJjdWl0IG1vZGVsCgBlZGdlcyBpbiBncmFwaCAlcyBoYXZlIG5vIGxlbiBhdHRyaWJ1dGUuIEhlbmNlLCB0aGUgbWRzIG1vZGVsCgBjaXJjdWl0IG1vZGVsIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdtb2RlPXNnZCwgcmV2ZXJ0aW5nIHRvIHNob3J0cGF0aCBtb2RlbAoAbWRzIG1vZGVsIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdtb2RlPXNnZCwgcmV2ZXJ0aW5nIHRvIHNob3J0cGF0aCBtb2RlbAoAbm9kZSAnJXMnLCBncmFwaCAnJXMnIHNpemUgdG9vIHNtYWxsIGZvciBsYWJlbAoAJXMgRFdCIDIgZG9lc24ndCB1c2UgZmlsbCBhbmQgZG9lc24ndCBkZWZpbmUgZmlsbHZhbAoAWyB7Q2F0YWxvZ30gPDwgL1VSSSA8PCAvQmFzZSAlcyA+PiA+PgovUFVUIHBkZm1hcmsKAFsgL0Nyb3BCb3ggWyVkICVkICVkICVkXSAvUEFHRVMgcGRmbWFyawoAICAvQm9yZGVyIFsgMCAwIDAgXQogIC9BY3Rpb24gPDwgL1N1YnR5cGUgL1VSSSAvVVJJICVzID4+CiAgL1N1YnR5cGUgL0xpbmsKL0FOTiBwZGZtYXJrCgB0cm91YmxlIGluIGluaXRfcmFuawoAbGluZXRoaWNrID0gMDsgb2xkbGluZXRoaWNrID0gbGluZXRoaWNrCgAgc2V0bGluZXdpZHRoCgBnc2F2ZQolZCAlZCAlZCAlZCBib3hwcmltIGNsaXAgbmV3cGF0aAoAZ3NhdmUgJWcgJWcgdHJhbnNsYXRlIG5ld3BhdGgKAC8vKioqIGVuZF9ncmFwaAoAbGF5b3V0IGF0dHJpYnV0ZSBpcyBpbnZhbGlkIGV4Y2VwdCBvbiB0aGUgcm9vdCBncmFwaAoAaW4gY2hlY2twYXRoLCBib3hlcyAlenUgYW5kICV6dSBkb24ndCB0b3VjaAoAbWVyZ2Vfb25ld2F5IGdsaXRjaAoAJXMgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSBpbiB0aGlzIGRyYXdpbmcKAE5vZGUgbm90IGFkamFjZW50IHRvIGNlbGwgLS0gQWJvcnRpbmcKAGluY29tcGFyYWJsZSBzZWdtZW50cyAhISAtLSBBYm9ydGluZwoAQWx0ZXJuYXRpdmVseSwgY29uc2lkZXIgcnVubmluZyBuZWF0byB1c2luZyAtR3BhY2s9dHJ1ZSBvciBkZWNvbXBvc2luZwoAbGFiZWxfc2NoZW1lID0gJWQgPiA0IDogaWdub3JpbmcKAGd2cmVuZGVyX3NldF9zdHlsZTogdW5zdXBwb3J0ZWQgc3R5bGUgJXMgLSBpZ25vcmluZwoAQXJyb3cgdHlwZSAiJXMiIHVua25vd24gLSBpZ25vcmluZwoAZmRwIGRvZXMgbm90IHN1cHBvcnQgc3RhcnQ9c2VsZiAtIGlnbm9yaW5nCgAlcyBhdHRyaWJ1dGUgdmFsdWUgbXVzdCBiZSAxIG9yIDIgLSBpZ25vcmluZwoATW9yZSB0aGFuIDIgY29sb3JzIHNwZWNpZmllZCBmb3IgYSBncmFkaWVudCAtIGlnbm9yaW5nIHJlbWFpbmluZwoAYXMgcmVxdWlyZWQgYnkgdGhlIC1uIGZsYWcKAGJiWyVzXSAlLjVnICUuNWcgJS41ZyAlLjVnCgAvcGF0aGJveCB7CiAgICAvWSBleGNoICUuNWcgc3ViIGRlZgogICAgL1ggZXhjaCAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoICUuNWcgc3ViIGRlZgogICAgbmV3cGF0aCB4IHkgbW92ZXRvCiAgICBYIHkgbGluZXRvCiAgICBYIFkgbGluZXRvCiAgICB4IFkgbGluZXRvCiAgICBjbG9zZXBhdGggc3Ryb2tlCiB9IGRlZgovZGJnc3RhcnQgeyBnc2F2ZSAlLjVnICUuNWcgdHJhbnNsYXRlIH0gZGVmCi9hcnJvd2xlbmd0aCAxMCBkZWYKL2Fycm93d2lkdGggYXJyb3dsZW5ndGggMiBkaXYgZGVmCi9hcnJvd2hlYWQgewogICAgZ3NhdmUKICAgIHJvdGF0ZQogICAgY3VycmVudHBvaW50CiAgICBuZXdwYXRoCiAgICBtb3ZldG8KICAgIGFycm93bGVuZ3RoIGFycm93d2lkdGggMiBkaXYgcmxpbmV0bwogICAgMCBhcnJvd3dpZHRoIG5lZyBybGluZXRvCiAgICBjbG9zZXBhdGggZmlsbAogICAgZ3Jlc3RvcmUKfSBiaW5kIGRlZgovbWFrZWFycm93IHsKICAgIGN1cnJlbnRwb2ludCBleGNoIHBvcCBzdWIgZXhjaCBjdXJyZW50cG9pbnQgcG9wIHN1YiBhdGFuCiAgICBhcnJvd2hlYWQKfSBiaW5kIGRlZgovcG9pbnQgeyAgICBuZXdwYXRoICAgIDIgMCAzNjAgYXJjIGZpbGx9IGRlZi9tYWtldmVjIHsKICAgIC9ZIGV4Y2ggZGVmCiAgICAvWCBleGNoIGRlZgogICAgL3kgZXhjaCBkZWYKICAgIC94IGV4Y2ggZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggWSBsaW5ldG8gc3Ryb2tlCiAgICBYIFkgbW92ZXRvCiAgICB4IHkgbWFrZWFycm93Cn0gZGVmCgAvcGF0aGJveCB7CiAgICAvWCBleGNoIG5lZyAlLjVnIHN1YiBkZWYKICAgIC9ZIGV4Y2ggJS41ZyBzdWIgZGVmCiAgICAveCBleGNoIG5lZyAlLjVnIHN1YiBkZWYKICAgIC95IGV4Y2ggJS41ZyBzdWIgZGVmCiAgICBuZXdwYXRoIHggeSBtb3ZldG8KICAgIFggeSBsaW5ldG8KICAgIFggWSBsaW5ldG8KICAgIHggWSBsaW5ldG8KICAgIGNsb3NlcGF0aCBzdHJva2UKfSBkZWYKACUhUFMtQWRvYmUtMi4wCi9ub2RlIHsKICAvWSBleGNoIGRlZgogIC9YIGV4Y2ggZGVmCiAgL3kgZXhjaCBkZWYKICAveCBleGNoIGRlZgogIG5ld3BhdGgKICB4IHkgbW92ZXRvCiAgeCBZIGxpbmV0bwogIFggWSBsaW5ldG8KICBYIHkgbGluZXRvCiAgY2xvc2VwYXRoIGZpbGwKfSBkZWYKL2NlbGwgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICAveSBleGNoIGRlZgogIC94IGV4Y2ggZGVmCiAgbmV3cGF0aAogIHggeSBtb3ZldG8KICB4IFkgbGluZXRvCiAgWCBZIGxpbmV0bwogIFggeSBsaW5ldG8KICBjbG9zZXBhdGggc3Ryb2tlCn0gZGVmCgB9IGJpbmQgZGVmCgAuUFMgJS41ZiAlLjVmCgBvdmVybGFwOiAlcyB2YWx1ZSAlZCBzY2FsaW5nICUuMDRmCgAgIGJlYXV0aWZ5X2xlYXZlcyAlZCBub2RlIHdlaWdodHMgJWQgcm90YXRpb24gJS4wM2YKACAgcmVwdWxzaXZlIGV4cG9uZW50OiAlLjAzZgoAICBLIDogJS4wM2YgQyA6ICUuMDNmCgAlcyAlLjNmCgAKaW50ZXJzZWN0aW9uIGF0ICUuM2YgJS4zZgoAICAgIHNjYWxlICUuM2YKAHRvcnVzIHsgJS4zZiwgJS4zZgoAICAgIDwlOS4zZiwgJTkuM2YsICU5LjNmPiwgJS4zZgoAIGluICVzIC0gc2V0dGluZyB0byAlLjAyZgoAY2lyY2xlICVzICUuMGYsJS4wZiwlLjBmCgByZWN0ICVzICUuMGYsJS4wZiAlLjBmLCUuMGYKACVkICVkICVkICUuMGYgJWQgJWQgJWQgJWQgJWQgJS4zZiAlZCAlLjRmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZgoAICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYgJS4wZiAlLjBmICUuMGYKACUlJSVQYWdlOiAxIDEKJSUlJVBhZ2VCb3VuZGluZ0JveDogJS4wZiAlLjBmICUuMGYgJS4wZgoAcG9zWyV6dV0gJS4wZiAlLjBmCgAubnIgU0YgJS4wZgpzY2FsZXRoaWNrbmVzcyA9ICUuMGYKACVzIHNhdmUgcG9pbnQgc2l6ZSBhbmQgZm9udAoubnIgLlMgXG4oLnMKLm5yIERGIFxuKC5mCgBzaG93cGFnZQolJSUlVHJhaWxlcgolJSUlQm91bmRpbmdCb3g6ICUuZiAlLmYgJS5mICUuZgoAYWRkaW5nICV6dSBpdGVtcywgdG90YWwgYXJlYSA9ICVmLCB3ID0gJWYsIGFyZWEvdz0lZgoAZ2FwPSVmLCVmCgAgIGFzcGVjdCAlZgoAYSAlZiBiICVmIGMgJWYgZCAlZiByICVmCgBtb2RlbCAlZCBzbWFydF9pbml0ICVkIHN0cmVzc3d0ICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgBTb2x2aW5nIG1vZGVsICVkIGl0ZXJhdGlvbnMgJWQgdG9sICVmCgAlcyBjb29yZCAlLjVnICUuNWcgaHQgJWYgd2lkdGggJWYKAHJlYyAlZiAlZiAlZiAlZgoAJXMgOiAlZiAlZiAlZiAlZgoAJXMgOiAlZiAlZgoAbWF4cHNodCA9ICVmCm1heHBzd2lkID0gJWYKAG1kc01vZGVsOiBkZWx0YSA9ICVmCgAgcjEgJWYgcjIgJWYKAFBhY2tpbmc6IGNvbXB1dGUgZ3JpZCBzaXplCgBnc2F2ZQoAJSVFbmRDb21tZW50cwpzYXZlCgBVbnJlY29nbml6ZWQgY2hhcmFjdGVyICclYycgKCVkKSBpbiBzaWRlcyBhdHRyaWJ1dGUKAEltYWdlcyB1bnN1cHBvcnRlZCBpbiAiYmFja2dyb3VuZCIgYXR0cmlidXRlCgAlcyBHTlUgcGljIHZzLiAxMHRoIEVkaXRpb24gZFwoZSd0ZW50ZQoAcmVzZXQgJXMgc2V0IHRvIGtub3duIHN0YXRlCgAlZyAlZyBzZXRfc2NhbGUgJWQgcm90YXRlICVnICVnIHRyYW5zbGF0ZQoAJWYgJWYgdHJhbnNsYXRlCgAlZCAlZCB0cmFuc2xhdGUKAC8vKioqIGVsbGlwc2UKAFVucmVjb2duaXplZCBvdmVybGFwIHZhbHVlICIlcyIgLSB1c2luZyBmYWxzZQoAbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQoAJXM6IHZzbnByaW50ZiBmYWlsdXJlCgBlbmRwYWdlCnNob3dwYWdlCmdyZXN0b3JlCgBlbmQKcmVzdG9yZQoAbGF5b3V0IHdhcyBub3QgZG9uZQoATGF5b3V0IHdhcyBub3QgZG9uZQoALy8qKiogcG9seWxpbmUKAHRyeWluZyB0byBkZWxldGUgYSBub24tbGluZQoAIyBlbmQgb2YgRklHIGZpbGUKAFNpbmdsZQoAcmVuZGVyZXIgZm9yICVzIGlzIHVuYXZhaWxhYmxlCgBkeW5hbWljIGxvYWRpbmcgbm90IGF2YWlsYWJsZQoAJS4wZiAlLjBmIGxpbmV0byBzdHJva2UKAGNsb3NlcGF0aCBzdHJva2UKACBlbGxpcHNlX3BhdGggc3Ryb2tlCgAvLyoqKiBiZWdpbl9lZGdlCgAvLyoqKiBlbmRfZWRnZQoAbG9zdCAlcyAlcyBlZGdlCgBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIHZpcnR1YWwgd2VpZ2h0IG9mIGVkZ2UKAGFkZF90cmVlX2VkZ2U6IG1pc3NpbmcgdHJlZSBlZGdlCgBpbiByb3V0ZXNwbGluZXMsIGNhbm5vdCBmaW5kIE5PUk1BTCBlZGdlCgBzaG93cGFnZQoAJWQgJWQgJWQgYmVnaW5wYWdlCgAvLyoqKiBiZWdpbl9wYWdlCgAvLyoqKiBlbmRfcGFnZQoARmlsZW5hbWUgIiVzIiBpcyB1bnNhZmUKAGxhYmVsOiBhcmVhIHRvbyBsYXJnZSBmb3IgcnRyZWUKAC8vKioqIGVuZF9ub2RlCgBVc2luZyBkZWZhdWx0IGNhbGN1bGF0aW9uIGZvciByb290IG5vZGUKAGNvbnRhaW5fbm9kZXMgY2x1c3QgJXMgcmFuayAlZCBtaXNzaW5nIG5vZGUKACVmICVmICVmICVmIG5vZGUKADw8IC9QYWdlU2l6ZSBbJWQgJWRdID4+IHNldHBhZ2VkZXZpY2UKAGluIGNoZWNrcGF0aCwgYm94ICV6dSBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAaW4gY2hlY2twYXRoLCBib3ggMCBoYXMgTEwgY29vcmQgPiBVUiBjb29yZAoAY2x1c3RlciBuYW1lZCAlcyBub3QgZm91bmQKAG5vZGUgJXMsIHBvcnQgJXMgdW5yZWNvZ25pemVkCgAlcyVzIHVuc3VwcG9ydGVkCgBjbHVzdGVyIGN5Y2xlICVzIC0tICVzIG5vdCBzdXBwb3J0ZWQKACVzIC0+ICVzOiBzcGxpbmUgc2l6ZSA+IDEgbm90IHN1cHBvcnRlZAoAbGF5b3V0IGFib3J0ZWQKAHBhZ2VkaXI9JXMgaWdub3JlZAoAVHdvIGNsdXN0ZXJzIG5hbWVkICVzIC0gdGhlIHNlY29uZCB3aWxsIGJlIGlnbm9yZWQKAElsbGVnYWwgYXR0cmlidXRlICVzIGluICVzIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgYXR0cmlidXRlICJtb2RlbCIgaW4gZ3JhcGggJXMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBhdHRyaWJ1dGUgIm1vZGUiIGluIGdyYXBoICVzIC0gaWdub3JlZAoAc3RhcnQ9MCBub3Qgc3VwcG9ydGVkIHdpdGggbW9kZT1zZWxmIC0gaWdub3JlZAoAT3ZlcmxhcCB2YWx1ZSAiJXMiIHVuc3VwcG9ydGVkIC0gaWdub3JlZAoAVW5rbm93biB2YWx1ZSAlcyBmb3IgUk9XUyAtIGlnbm9yZWQKAFVua25vd24gdmFsdWUgJXMgZm9yIENPTFVNTlMgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBWQUxJR04gLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJXMgZm9yIEZJWEVEU0laRSAtIGlnbm9yZWQKAElsbGVnYWwgdmFsdWUgJS4qcyBmb3IgU1RZTEUgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBCQUxJR04gaW4gVEQgLSBpZ25vcmVkCgBJbGxlZ2FsIHZhbHVlICVzIGZvciBBTElHTiBpbiBURCAtIGlnbm9yZWQKAFJPV1NQQU4gdmFsdWUgY2Fubm90IGJlIDAgLSBpZ25vcmVkCgBDT0xTUEFOIHZhbHVlIGNhbm5vdCBiZSAwIC0gaWdub3JlZAoAbm9kZSAlcywgcG9ydCAlcywgdW5yZWNvZ25pemVkIGNvbXBhc3MgcG9pbnQgJyVzJyAtIGlnbm9yZWQKAFVua25vd24gInNwbGluZXMiIHZhbHVlOiAiJXMiIC0gaWdub3JlZAoAaW4gcm91dGVzcGxpbmVzLCBQc2hvcnRlc3RwYXRoIGZhaWxlZAoAaW4gcm91dGVzcGxpbmVzLCBQcm91dGVzcGxpbmUgZmFpbGVkCgAjIHBsdWdpbiBsb2FkaW5nIG9mIGRlcGVuZGVuY3kgIiUuKnMiIGZhaWxlZAoAJXM6JWQ6IGNsYWltZWQgdW5yZWFjaGFibGUgY29kZSB3YXMgcmVhY2hlZAoAIyB1bnN1Y2Nlc3NmdWwgcGx1Z2luIGxvYWQKACUuNWcgJS41ZyB0cmFuc2xhdGUgbmV3cGF0aCB1c2VyX3NoYXBlXyVkCgBuc2l6ZXNjYWxlPSVmLGl0ZXJhdGlvbnM9JWQKAGN0cmwtPm92ZXJsYXA9JWQKACVzICVkIG5vZGVzICVkIGVkZ2VzIG1heGl0ZXI9JWQgYmFsYW5jZT0lZAoALy8qKiogYmVnaW5fbGF5ZXI6ICVzLCAlZC8lZAoAZGVnZW5lcmF0ZSBjb25jZW50cmF0ZWQgcmFuayAlcywlZAoAbWluY3Jvc3M6IHBhc3MgJWQgaXRlciAlZCB0cnlpbmcgJWQgY3VyX2Nyb3NzICVkIGJlc3RfY3Jvc3MgJWQKACAgbWF4IGxldmVscyAlZAoACSVzICVkCgAgIEJhcm5lcy1IdXR0IGNvbnN0YW50ICUuMDNmIHRvbGVyYW5jZSAgJS4wM2YgbWF4aXRlciAlZAoAZ3Z3cml0ZV9ub196IHByb2JsZW0gJWQKACAgcXVhZHRyZWUgc2l6ZSAlZCBtYXhfbGV2ZWwgJWQKAHJlYnVpbGRfdmxpc3RzOiBsZWFkIGlzIG51bGwgZm9yIHJhbmsgJWQKAHJlYnVpbGRfdmxpc3RzOiByYW5rIGxlYWQgJXMgbm90IGluIG9yZGVyICVkIG9mIHJhbmsgJWQKACAgc21vb3RoaW5nICVzIG92ZXJsYXAgJWQgaW5pdGlhbF9zY2FsaW5nICUuMDNmIGRvX3Nocmlua2luZyAlZAoAICBjb29saW5nICUuMDNmIHN0ZXAgc2l6ZSAgJS4wM2YgYWRhcHRpdmUgJWQKAFVuc3VwcG9ydGVkIGNoYXJzZXQgdmFsdWUgJWQKAGluIHJvdXRlc3BsaW5lcywgaWxsZWdhbCB2YWx1ZXMgb2YgcHJldiAlZCBhbmQgbmV4dCAlZCwgbGluZSAlZAoAICBlZGdlX2xhYmVsaW5nX3NjaGVtZSAlZAoAYWdkaWN0b2Y6IHVua25vd24ga2luZCAlZAoAICByYW5kb20gc3RhcnQgJWQgc2VlZCAlZAoAJWQgJWQgJWQgJS4wZiAlZCAlZCAlZCAlZCAlZCAlLjFmICVkICVkICVkICVkCgAlJSUlUGFnZUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJSUlJUJvdW5kaW5nQm94OiAlZCAlZCAlZCAlZAoAJSUlJVBhZ2U6ICVkICVkCgAlcyBuby4gY2VsbHMgJWQgVyAlZCBIICVkCgBNYXhyYW5rID0gJWQsIG1pbnJhbmsgPSAlZAoAc3RlcCBzaXplID0gJWQKACUlJSVQYWdlczogJWQKACMgUGFnZXM6ICVkCgAlJSUlRW5kUGFnZTogJWQKACJmb250Y2hhciI6ICVkCgAgIGZsYWdzICAlZAoAICBzaXplICAgJWQKACVzIGRhc2h3aWQgaXMgMC4xIGluIDEwdGggRWRpdGlvbiwgMC4wNSBpbiBEV0IgMiBhbmQgaW4gZ3BpYwoAJXMgbWF4cHNodCBhbmQgbWF4cHN3aWQgYXJlIHByZWRlZmluZWQgdG8gMTEuMCBhbmQgOC41IGluIGdwaWMKACAlZCVzIGl0ZXJhdGlvbnMgJS4yZiBzZWMKAApmaW5hbCBlID0gJWYgJWQgaXRlcmF0aW9ucyAlLjJmIHNlYwoAcm91dGVzcGxpbmVzOiAlZCBlZGdlcywgJXp1IGJveGVzICUuMmYgc2VjCgAlZCBub2RlcyAlLjJmIHNlYwoAJXMlenUgbm9kZXMgJXp1IGVkZ2VzICVkIGl0ZXIgJS4yZiBzZWMKAApmaW5pc2hlZCBpbiAlLjJmIHNlYwoAOiAlLjJmIHNlYwoAIG5vZGVbc2hhcGU9cG9pbnRdCgAicmVjdCI6IFslLjAzZiwlLjAzZiwlLjAzZiwlLjAzZl0KAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogTkRfb3JkZXIoJXMpIFslZF0gPiBHRF9yYW5rKFJvb3QpWyVkXS5hbiBbJWRdCgBpbnN0YWxsX2luX3JhbmssIGxpbmUgJWQ6IEdEX3JhbmsoZylbJWRdLnYgKyBORF9vcmRlciglcykgWyVkXSA+IEdEX3JhbmsoZylbJWRdLmF2ICsgR0RfcmFuayhSb290KVslZF0uYW4gWyVkXQoAaW5zdGFsbF9pbl9yYW5rLCBsaW5lICVkOiByYW5rICVkIG5vdCBpbiByYW5rIHJhbmdlIFslZCwlZF0KAGZhaWxlZCBhdCBub2RlICVkWzFdCgBmYWlsZWQgYXQgbm9kZSAlZFswXQoAICAlZCAtLSAlZFtsYWJlbD0iJWYiXQoAICAlZCBbcG9zPSIlLjBmLCUuMGYhIl0KACBdCgBEb3Q6IFsKACJvYmplY3RzIjogWwoAInN1YmdyYXBocyI6IFsKACJlZGdlcyI6IFsKACJub2RlcyI6IFsKAFggZWxzZSBaCglkZWZpbmUgc2V0ZmlsbHZhbCBZIGZpbGx2YWwgPSBZOwoJZGVmaW5lIGJvbGQgWSBZOwoJZGVmaW5lIGZpbGxlZCBZIGZpbGwgWTsKWgoAaWYgYm94cmFkID4gMS4wICYmIGRhc2h3aWQgPCAwLjA3NSB0aGVuIFgKCWZpbGx2YWwgPSAxOwoJZGVmaW5lIGZpbGwgWSBZOwoJZGVmaW5lIHNvbGlkIFkgWTsKCWRlZmluZSByZXNldCBZIHNjYWxlPTEuMCBZOwpYCgAgQUJPUlRJTkcKACUlRU9GCgAlcyByZXN0b3JlIHBvaW50IHNpemUgYW5kIGZvbnQKLnBzIFxuKC5TCi5mdCBcbihERgoAXQouUEUKAGludmFsaWRhdGVfcGF0aDogc2tpcHBlZCBvdmVyIExDQQoASW52YWxpZCAlZC1ieXRlIFVURjggZm91bmQgaW4gaW5wdXQgb2YgZ3JhcGggJXMgLSB0cmVhdGVkIGFzIExhdGluLTEuIFBlcmhhcHMgIi1HY2hhcnNldD1sYXRpbjEiIGlzIG5lZWRlZD8KAFVURjggY29kZXMgPiA0IGJ5dGVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCAoZ3JhcGggJXMpIC0gdHJlYXRlZCBhcyBMYXRpbi0xLiBQZXJoYXBzICItR2NoYXJzZXQ9bGF0aW4xIiBpcyBuZWVkZWQ/CgA8L3RleHQ+CgA8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+CgA8L3JhZGlhbEdyYWRpZW50Pgo8L2RlZnM+CgA8L21hcD4KADwvc3ZnPgoAPC9hPgo8L2c+CgAgICAgcm90YXRlICAgPCU5LjNmLCAlOS4zZiwgJTkuM2Y+CgAgICAgc2NhbGUgICAgPCU5LjNmLCAlOS4zZiwgJTkuM2Y+CgA8L3RpdGxlPgoAIiB0eXBlPSJ0ZXh0L2NzcyI/PgoAPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CgAgICAgdHJhbnNsYXRlPCU5LjNmLCAlOS4zZiwgJWQuMDAwPgoAOyIvPgoAIFBhZ2VzOiAlZCAtLT4KACkKIC0tPgoAIC0+CgA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iCiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KACkiPgoAcl8lZCIgY3g9IjUwJSUiIGN5PSI1MCUlIiByPSI3NSUlIiBmeD0iJS4wZiUlIiBmeT0iJS4wZiUlIj4KACIgPgoAI2RlY2xhcmUgJXMgPSAlczsKAAklcwlzb3JyeSwgdGhlIGdyb2ZmIGZvbGtzIGNoYW5nZWQgZ3BpYzsgc2VuZCBhbnkgY29tcGxhaW50IHRvIHRoZW07CgAJJXMJaW5zdGFsbCBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgZ3BpYyBvciBzd2l0Y2ggdG8gRFdCIG9yIDEwdGggRWRpdGlvbiBwaWM7CgBdOwoAaWYgZmlsbHZhbCA+IDAuNCB0aGVuIFgKCWRlZmluZSBzZXRmaWxsdmFsIFkgZmlsbHZhbCA9IDEgLSBZOwoJZGVmaW5lIGJvbGQgWSB0aGlja25lc3MgMiBZOwoAI3ZlcnNpb24gMy42OwoAZWxsaXBzZSBhdHRyczAgJXN3aWQgJS41ZiBodCAlLjVmIGF0ICglLjVmLCUuNWYpOwoAIiBhdCAoJS41ZiwlLjVmKTsKACUlQmVnaW5Eb2N1bWVudDoKACV6dSBib3hlczoKAHBhY2sgaW5mbzoKAHNwcmluZ19lbGVjdHJpY2FsX2NvbnRyb2w6CgBVbnN1cHBvcnRlZCBjaGFyc2V0ICIlcyIgLSBhc3N1bWluZyB1dGYtOAoAICAgICAgYW1iaWVudEludGVuc2l0eSAwLjMzCgAjRklHIDMuMgoALTIKACVzIG5vbi1mYXRhbCBydW4tdGltZSBwaWMgdmVyc2lvbiBkZXRlcm1pbmF0aW9uLCB2ZXJzaW9uIDIKACVzIGZpbGx2YWwgaXMgMC4zIGluIDEwdGggRWRpdGlvbiAoZmlsbCAwIG1lYW5zIGJsYWNrKSwgMC41IGluIGdwaWMgKGZpbGwgMCBtZWFucyB3aGl0ZSksIHVuZGVmaW5lZCBpbiBEV0IgMgoAJXMgcmVzZXQgd29ya3MgaW4gZ3BpYyBhbmQgMTB0aCBlZGl0aW9uLCBidXQgaXNuJ3QgZGVmaW5lZCBpbiBEV0IgMgoAc2V0dXBMYXRpbjEKAFwwMDEKACVzICAgICAgICB0b2xlcmFuY2UgMC4wMQoAICAgIHRvbGVyYW5jZSAwLjEKACUlUGFnZXM6IDEKACAgICAgICAgZGlmZnVzZUNvbG9yIDEgMSAxCgAxMDAuMDAKACBFUFNGLTMuMAoAJXMgYm94cmFkIGlzIG5vdyAwLjAgaW4gZ3BpYywgZWxzZSBpdCByZW1haW5zIDIuMAoAc3BoZXJlIHs8JTkuM2YsICU5LjNmLCAlOS4zZj4sIDEuMAoAV2FybmluZzogbm8gdmFsdWUgZm9yIHdpZHRoIG9mIEFTQ0lJIGNoYXJhY3RlciAldS4gRmFsbGluZyBiYWNrIHRvIDAKAGluc3RhbGxfaW5fcmFuaywgbGluZSAlZDogJXMgJXMgcmFuayAlZCBpID0gJWQgYW4gPSAwCgBjb25jZW50cmF0ZT10cnVlIG1heSBub3Qgd29yayBjb3JyZWN0bHkuCgBObyBsaWJ6IHN1cHBvcnQuCgB0d29waTogdXNlIG9mIHdlaWdodD0wIGNyZWF0ZXMgZGlzY29ubmVjdGVkIGNvbXBvbmVudC4KAHRoZSBncmFwaCBpbnRvIGNvbm5lY3RlZCBjb21wb25lbnRzLgoAT3J0aG9nb25hbCBlZGdlcyBkbyBub3QgY3VycmVudGx5IGhhbmRsZSBlZGdlIGxhYmVscy4gVHJ5IHVzaW5nIHhsYWJlbHMuCgBndlJlbmRlckpvYnMgJXM6ICUuMmYgc2Vjcy4KAG1pbmNyb3NzICVzOiAlZCBjcm9zc2luZ3MsICUuMmYgc2Vjcy4KACVzIGlzIG5vdCBhIGtub3duIGNvbG9yLgoAaXMgaW5hcHByb3ByaWF0ZS4gUmV2ZXJ0aW5nIHRvIHRoZSBzaG9ydGVzdCBwYXRoIG1vZGVsLgoAaXMgdW5kZWZpbmVkLiBSZXZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHBhdGggbW9kZWwuCgBVbmFibGUgdG8gcmVjbGFpbSBib3ggc3BhY2UgaW4gc3BsaW5lIHJvdXRpbmcgZm9yIGVkZ2UgIiVzIiAtPiAiJXMiLiBTb21ldGhpbmcgaXMgcHJvYmFibHkgc2VyaW91c2x5IHdyb25nLgoARXJyb3IgZHVyaW5nIGNvbnZlcnNpb24gdG8gIlVURi04Ii4gUXVpdGluZy4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQuCgBncmFkaWVudCBwZW4gY29sb3JzIG5vdCB5ZXQgc3VwcG9ydGVkLgoAICBpbml0Q01halZQU0MgZG9uZTogJWQgZ2xvYmFsIGNvbnN0cmFpbnRzIGdlbmVyYXRlZC4KAFRoZSBjaGFyYWN0ZXIgJyVjJyBhcHBlYXJzIGluIGJvdGggdGhlIGxheWVyc2VwIGFuZCBsYXllcmxpc3RzZXAgYXR0cmlidXRlcyAtIGxheWVybGlzdHNlcCBpZ25vcmVkLgoAdGhlIGFzcGVjdCBhdHRyaWJ1dGUgaGFzIGJlZW4gZGlzYWJsZWQgZHVlIHRvIGltcGxlbWVudGF0aW9uIGZsYXdzIC0gYXR0cmlidXRlIGlnbm9yZWQuCgBUaGUgbGF5ZXJzZWxlY3QgYXR0cmlidXRlICIlcyIgZG9lcyBub3QgbWF0Y2ggYW55IGxheWVyIHNwZWNpZmVkIGJ5IHRoZSBsYXllcnMgYXR0cmlidXRlIC0gaWdub3JlZC4KACV6dSBvdXQgb2YgJXp1IGxhYmVscyBwb3NpdGlvbmVkLgoAJXp1IG91dCBvZiAlenUgZXh0ZXJpb3IgbGFiZWxzIHBvc2l0aW9uZWQuCgAgIGdlbmVyYXRlIGVkZ2UgY29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgTm9uLW92ZXJsYXAgQ29uc3RyYWludHMuLi4KAEdlbmVyYXRpbmcgRWRnZSBDb25zdHJhaW50cy4uLgoAR2VuZXJhdGluZyBEaUctQ29MYSBFZGdlIENvbnN0cmFpbnRzLi4uCgBSZW1vdmluZyBvdmVybGFwcyBhcyBwb3N0cHJvY2Vzcy4uLgoALi4uICUuKnMlLipzIC4uLgoARWRnZSBsZW5ndGggJWYgbGFyZ2VyIHRoYW4gbWF4aW11bSAlZCBhbGxvd2VkLgpDaGVjayBmb3Igb3ZlcndpZGUgbm9kZShzKS4KAG9yZGVyaW5nICclcycgbm90IHJlY29nbml6ZWQgZm9yIG5vZGUgJyVzJy4KAHBvbHlnb24geyAlenUsCgBzcGhlcmVfc3dlZXAgewogICAgJXMKICAgICV6dSwKACJkaXJlY3RlZCI6ICVzLAoAIndpZHRoIjogJS4wM2YsCgAic2l6ZSI6ICUuMDNm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ICUuMmYgJS4yZiAtaW1hZ2UgInBob3RvXyVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2UgZmlsZT0iJXMiCgBmaWxlIGxvYWRpbmcgaXMgZGlzYWJsZWQgYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgY29udGFpbnMgU0VSVkVSX05BTUU9IiVzIgoAQ291bGQgbm90IHBhcnNlIHhkb3QgIiVzIgoATm8gbG9hZGltYWdlIHBsdWdpbiBmb3IgIiVzIgoAIFslenVdICglLjAyZiwlLjAyZikgKCUuMDJmLCUuMDJmKSAlcCAiJXMiCgBmb250bmFtZTogdW5hYmxlIHRvIHJlc29sdmUgIiVzIgoARHVwbGljYXRlIGNsdXN0ZXIgbmFtZSAiJXMiCgB1bnJlY29nbml6ZWQgYXBpIG5hbWUgIiVzIgoAaW1hZ2UgY3JlYXRlIHBob3RvICJwaG90b18lcyIgLWZpbGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgc2hhcGVmaWxlPSIlcyIgZm9yIG5vZGUgIiVzIgoATm8gb3IgaW1wcm9wZXIgaW1hZ2U9IiVzIiBmb3Igbm9kZSAiJXMiCgBub2RlICIlcyIgaXMgY29udGFpbmVkIGluIHR3byBub24tY29tcGFyYWJsZSBjbHVzdGVycyAiJXMiIGFuZCAiJXMiCgBFcnJvcjogbm9kZSAiJXMiIGJlbG9uZ3MgdG8gdHdvIG5vbi1uZXN0ZWQgY2x1c3RlcnMgIiVzIiBhbmQgIiVzIgoAICAiJXMiCgAjaW5jbHVkZSAiY29sb3JzLmluYyIKI2luY2x1ZGUgInRleHR1cmVzLmluYyIKI2luY2x1ZGUgInNoYXBlcy5pbmMiCgBVbmtub3duIEhUTUwgZWxlbWVudCA8JXM+IG9uIGxpbmUgJWx1IAoAJXMgaW4gbGluZSAlbHUgCgBzY2FsZSBieSAlZywlZyAKAGNvbXByZXNzICVnIAoATGF5b3V0IHdhcyBub3QgZG9uZS4gIE1pc3NpbmcgbGF5b3V0IHBsdWdpbnM/IAoAiVBORw0KGgoAJSUhUFMtQWRvYmUtMi4wCiUlJSVCb3VuZGluZ0JveDogKGF0ZW5kKQovcG9pbnQgewogIC9ZIGV4Y2ggZGVmCiAgL1ggZXhjaCBkZWYKICBuZXdw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BgAAAAAAAACamZmZmZnpP98AAADgAAAABwBBzoEFCwvwP+EAAADiAAAACABB5oEFC6IC4D/jAAAA5AAAAA4AAABsbnJzb2xpZAAAc2V0bGluZXdpZHRoADEAAAAA73UAACTDAABQiwAAAAAAAAgArv/RAAoArv+u/wsArv+u/67/rv+u/67/rv+u/wUA0QCu/9EA0QDRANEA0QDRANEA0QCu//v/rv8OAOz/rv+u/67/rv/RANEA0QDRANEADQAlAAwAQgAQAFAAEwBtAHsAFACYAA8ApgDDAK7/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/67/rv+u/xcArv93AK7/BwAuAK7/JgCu/xcAEQAjAK7/DQCu/67/rv+u/zoArv+u/zUArv+u/67/KACu/wcArv87AEUArv9IAK7/rv+u/67/rv8AQZGEBQvBBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygAAAAAAAAAAAICAgICAhAMWQEAH1AIAwcSExRXFhcIC2kMHwoFDA4pESsPLRAvMCAyBjQ1GxwdHgsMISIjJCUmJygMGBkXBAobHBogKgohIiMkJSYnKAwKDlMKLFgxWFhYWFhYDBscDy5YMyEiIyQlJicoGxz/U///ISIjJCUmJygM//8F////CRT//////wwbHP8QFRYhIiMkJSYnKBsc/////yEiIyQlJicoDP8SExQRFhf///////8MGxz///8SISIjJCUmJygbHP////8hIiMkJSYnKAz///////8T////////DBsc/////yEiIyQlJicoGxz/////ISIjJCUmJygSExQVFhcYGf///////////yMkJSYnGxITFBYXIjZoAR84ViEgAhsbG14bGzc5cDbSwk8EPCJHIj8iRCIiWCJlIiIFBl9gOQQHCAkKCwwNDgRmZ11qbQUGb1g7cQcICQoLDA0OBHI8W3M+YUYbEhMUFhcEBQY/QWJJBwgJCgsMDQ4FBgBcAAAHCAkKCwwNDgQAAE8AAABTQgAAAAAABAUGAERUVQcICQoLDA0OBQYAAAAABwgJCgsMDQ4EACosLkcxMwAAAAAAAAQFBgAAAEoHCAkKCwwNDgUGAAAAAAcICQoLDA0OBAAAAAAAAEwAAAAAAAAEBQYAAAAABwgJCgsMDQ4FBgAAAAAHCAkKCwwNDikrLS8wMjQ1AEHbigULLikrLTAyAAQvACQjABIUFhocHiAYAAUHLy8vAC8vAAAJCCgAAAEiAgYAAAAAAAgAQZaLBQs+JQMmEwopFQsqFw4tGREbDCsdDSwfDyEQADMAMAAvQwAxAC8ANS4nQjJBADo4ADw0RQA2AEAAAD8ARDc7OT0AQeGLBQtFAgMDAQECAQEBAwMDAwMDAwMBAQEBAQEBAQEBAQEBAQEBAgEBAgAGAQMDAwMDAQABAgMABAECAwAEAAQABAADAgECAQIBAEGxjAULRSkqKiorLCwtLS0tLS0tLS0tLi8wMTIzNDU2Nzg5Ojs8PT4+Pz9BQEJCQkJCQkNDRERERkVHR0dJSEpIS0hMSE1NTk5PTwBBgI0FC40Brv+u//z/6AD2////GgAAACcAAQAyAK7/rv8CACQAAwAvAK7/rv+u/67/rv/+/5QArv8JABsArv+8/67/rv+v/67/rv+u/67/rv+u/67/AAD/Aw8QESM6JD0lQBVDJkUnSBhLGU0aKBxOHR5QUVJZWmxrbmNkV2kASAAAACgAAAAYAAAAOAAAABgAAAAIAEGmjgULCfC/AAAAAAAAAQBBuI4FCw1pbnZpcwAAZmlsbGVkAEHQjgULswImGgAA91AAAJk1AAAkCwAADAAAAAQAAAAGAAAAAgAAAAMAAAABAAAACQAAAAgAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAPQAAAD4AAAA/AAAAQAAAAEEAAABCAAAAQwAAAEQAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAA3KECAEGOkQULhQigQP////////////////////////////////////////////////////////////////////////////////////8AAqoCRAMABAAEqgY5BnEBqgKqAgAEgwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEOQI5AoMEgwSDBI0DXgfHBVYFVgXHBeMEcwTHBccFqgIdA8cF4wQdB8cFxwVzBMcFVgVzBOMExwXHBY0HxwXHBeMEqgI5AqoCwQMABKoCjQMABI0DAASNA6oCAAQABDkCOQIABDkCOQYABAAEAAQABKoCHQM5AgAEAATHBQAEAASNA9cDmgHXA1QE////////////////////////////////////////////////////////////////////////////////////////AAKqAnEEAAQABAAIqgY5AqoCqgIABI8EAAKqAgACOQIABAAEAAQABAAEAAQABAAEAAQABKoCqgKPBI8EjwQABHEHxwVWBccFxwVWBeMEOQY5Bh0DAAQ5BlYFjQfHBTkG4wQ5BscFcwRWBccFxwUACMcFxwVWBaoCOQKqAqYEAASqAgAEcwSNA3MEjQOqAgAEcwQ5AqoCcwQ5AqoGcwQABHMEcwSNAx0DqgJzBAAExwUABAAEjQMnA8MBJwMpBP///////////////////////////////////////////////////////////////////////////////////////wACqgJcAwAEAASqBjkGtgGqAqoCAARmBQACqgIAAjkCAAQABAAEAAQABAAEAAQABAAEAASqAqoCZgVmBWYFAARcB+ME4wRWBccF4wTjBMcFxwWqAo0DVgVzBKoGVgXHBeMExwXjBAAEcwTHBeMEqgbjBHMEcwQdAzkCHQNgAwAEqgIABAAEjQMABI0DOQIABAAEOQI5Ao0DOQLHBQAEAAQABAAEHQMdAzkCAASNA1YFjQONAx0DMwMzAjMDVAT///////////////////////////////////////////////////////////////////////////////////////8AAh0DcQQABAAEqgY5BjkCqgKqAgAEjwQAAqoCAAI5AgAEAAQABAAEAAQABAAEAAQABAAEqgKqAo8EjwSPBAAEqAZWBVYFVgXHBVYFVgXHBTkGHQMABFYF4wQdB8cFxwXjBMcFVgVzBOMExwVWBR0HVgXjBOMEqgI5AqoCjwQABKoCAAQABI0DAASNA6oCAARzBDkCOQIABDkCOQZzBAAEAAQABB0DHQM5AnMEjQNWBQAEjQMdA8kCwwHJAo8E//8EogIAQZ6ZBQuFCKBA/////////////////////////////////////////////////////////////////////////////////////zkCOQLXAnMEcwQdB1YFhwGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwQ5AjkCrASsBKwEcwQfCFYFVgXHBccFVgXjBDkGxwU5AgAEVgVzBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wQ5AjkCOQLBA3MEqgJzBHMEAARzBHMEOQJzBHMExwHHAQAExwGqBnMEcwRzBHMEqgIABDkCcwQABMcFAAQABAAErAIUAqwCrAT///////////////////////////////////////////////////////////////////////////////////////85AqoCywNzBHMEHQfHBecBqgKqAh0DrAQ5AqoCOQI5AnMEcwRzBHMEcwRzBHMEcwRzBHMEqgKqAqwErASsBOMEzQfHBccFxwXHBVYF4wQ5BscFOQJzBMcF4wSqBscFOQZWBTkGxwVWBeMExwVWBY0HVgVWBeMEqgI5AqoCrARzBKoCcwTjBHME4wRzBKoC4wTjBDkCOQJzBDkCHQfjBOME4wTjBB0DcwSqAuMEcwQ5BnMEcwQABB0DPQIdA6wE////////////////////////////////////////////////////////////////////////////////////////OQI5AtcCcwRzBB0HVgWHAaoCqgIdA6wEOQKqAjkCOQJzBHMEcwRzBHMEcwRzBHMEcwRzBDkCOQKsBKwErARzBB8IVgVWBccFxwVWBeMEOQbHBTkCAARWBXMEqgbHBTkGVgU5BscFVgXjBMcFVgWNB1YFVgXjBDkCOQI5AsEDcwSqAnMEcwQABHMEcwQ5AnMEcwTHAccBAATHAaoGcwRzBHMEcwSqAgAEOQJzBAAExwUABAAEAASsAhQCrAKsBP///////////////////////////////////////////////////////////////////////////////////////zkCqgLLA3MEcwQdB8cF5wGqAqoCHQOsBDkCqgI5AjkCcwRzBHMEcwRzBHMEcwRzBHMEcwSqAqoCrASsBKwE4wTNB8cFxwXHBccFVgXjBDkGxwU5AnMExwXjBKoGxwU5BlYFOQbHBVYF4wTHBVYFjQdWBVYF4wSqAjkCqgKsBHMEqgJzBOMEcwTjBHMEqgLjBOMEOQI5AnMEOQIdB+ME4wTjBOMEHQNzBKoC4wRzBDkGcwRzBAAEHQM9Ah0DrAT//ziiAgBBrqEFC4UIoED/////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP///////////////////////////////////////////////////////////////////////////////////////80EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQT////////////////////////////////////////////////////////////////////////////////////////NBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0E////////////////////////////////////////////////////////////////////////////////////////zQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBM0EzQTNBP//YKICAEG9qQULhghAj0AAAP///////////////////////////////wIB////////////////////////////////////////////////AgHkAIgBWAJYAqIDtQLdAD0BPQHCAVgC5ACoAeQAGwFYAlgCWAJYAlgCWAJYAlgCWAJYAuQA5ABYAlgCWAK7AbID2QKkAqEC5gJHAiQC1gL5AgEBRAFxAh8CVwPkAv8CeQL/Ap0CZwJaAtgCsQJNBIoCVAJNAjsBGwE7AVgC9AH0ARICRwLPAUcCFAJNAUoCOALoAOwA9AEoAVgDOAIsAkcCRwJmAeEBXgExAgMCSQMNAgICzwFgAQkBYAFYAv//AAD///////////////////////////////8PAf///////////////////////////////////////////////w8B+ADAAVgCWAKxA9YC8wBmAWYBxQFYAvgAsgH4ADkBWAJYAlgCWAJYAlgCWAJYAlgCWAL4APgAWAJYAlgCywG2A+gCsAKoAvoCVQIyAuACBQMaAWIBmQIyAmQD7AIRA4wCEQOuAncCbQLiAskCWQSgAmoCXQJiATkBYgFYAvQB9AEjAlgC2AFYAh4CbAFcAkkC/wADARgCPwFtA0kCQAJYAlgCiAHoAYABQwIPAlUDIgIOAtoBhwEgAYcBWAL//wAA////////////////////////////////AgH///////////////////////////////////////////////8CAeQAiAFYAlgCogO1At0APQE9AcIBWALkAKgB5AAbAVgCWAJYAlgCWAJYAlgCWAJYAlgC5ADkAFgCWAJYArsBsgPZAqQCoQLmAkcCJALWAvkCAQFEAXECHwJYA+MC/wJ5Av8CnQJnAloC2AKwAk0EigJUAk0COwEbATsBWAL0AfQBEgJHAs8BRwIUAk0BSgI4AugA7AD0ASgBWAM4AiwCRwJHAmYB4QFeATECAwJJAw0CAgLPAWABCQFgAVgC//8AAP///////////////////////////////w8B////////////////////////////////////////////////DwH4AMABWAJYArED1gLzAGYBZgHFAVgC+ACyAfgAOQFYAlgCWAJYAlgCWAJYAlgCWAJYAvgA+ABYAlgCWALLAbYD6AKwAqgC+gJVAjIC4AIFAxoBYgGYAjICZQPrAhEDjAIRA64CdwJtAuICyQJZBKACagJdAmIBOQFiAVgC9AH0ASMCWALYAVgCHgJsAVwCSQL/AAMBGAI/AW0DSQJAAlgCWAKIAegBgAFDAg8CVQMiAg4C2gGHASABhwFYAv//aKICAEHOsQULhQigQP////////////////////////////////////////////////////////////////////////////////////+LAjUDrgO0BhcFmgc9BjMCHwMfAwAEtAaLAuMCiwKyAhcFFwUXBRcFFwUXBRcFFwUXBRcFsgKyArQGtAa0Bj8EAAh5BX0FlgUpBg4FmgQzBgQGXAJcAj8FdQTnBvwFTAbTBEwGjwUUBeME2wV5BekHewXjBHsFHwOyAh8DtAYABAAE5wQUBWYEFAXsBNECFAUSBTkCOQKiBDkCywcSBeUEFAUUBUoDKwQjAxIFvASLBrwEvAQzBBcFsgIXBbQG////////////////////////////////////////////////////////////////////////////////////////yQKmAysEtAaRBQQI+gZzAqgDqAMvBLQGCgNSAwoD7AKRBZEFkQWRBZEFkQWRBZEFkQWRBTMDMwO0BrQGtAakBAAIMQYZBt8FpAZ3BXcFkQayBvoC+gIzBhkF9geyBs0G3QXNBikGwwV1BX8GMQbTCCsGywXNBagD7AKoA7QGAAQABGYFugW+BLoFbQV7A7oFsgW+Ar4CUgW+AlYIsgV/BboFugXyA8ME0wOyBTcFZAcpBTcFqASyBewCsgW0Bv///////////////////////////////////////////////////////////////////////////////////////4sCNQOuA7QGFwWaBz0GMwIfAx8DAAS0BosC4wKLArICFwUXBRcFFwUXBRcFFwUXBRcFFwWyArICtAa0BrQGPwQACHkFfQWWBSkGDgWaBDMGBAZcAlwCPwV1BOcG/AVMBtMETAaPBRQF4wTbBXkF6Qd7BeMEewUfA7ICHwO0BgAEAATnBBQFZgQUBewE0QIUBRIFOQI5AqIEOQLLBxIF5QQUBRQFSgMrBCMDEgW8BIsGvAS8BDMEFwWyAhcFtAb////////////////////////////////////////////////////////////////////////////////////////JAqYDKwSRBZEFBAj6BnMCqAOoAy8EtAYKA1IDCgPsApEFkQWRBZEFkQWRBZEFkQWRBZEFMwMzA7QGtAa0BqQEAAgxBhkG3wWkBncFdwWRBrIG+gL6AjMGGQX2B7IGzQbdBc0GKQbDBXUFfwYxBtMIKwbLBc0FqAPsAqgDtAYABAAEZgW6Bb4EugVtBXsDugWyBb4CvgJSBb4CVgiyBX8FugW6BfIDwwTTA7IFNwVkBykFNwWoBLIF7AKyBbQG//9wogIAQd65BQuFCKBAZgT///////////////////////////////8AAP///////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//2YE////////////////////////////////AAD///////////////////////////////////////////////9mBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYE//9mBP///////////////////////////////wAA////////////////////////////////////////////////ZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBP///////////////////////////////////////////////////////////////////////////////////////2YEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgRmBGYEZgT//3yiAgBB7sEFC4UIoED/////////////////////////////////////////////////////////////////////////////////////aQLwApkCMgQyBM0EpgVHAfAC8ALwAjIE8ALwAvACMgQyBDIEMgQyBDIEMgQyBDIEMgQyBPAC8AIyBDIEMgTwAioGuASHBMkE6ARJBDMEaQU8BToC0AObBA0ErQUbBWQFdgRoBagE2QOlBDAFswTRBnQEkARnBPAC2ALwAjIEMgQyBDQEdQT2A3UEXQT1AgQEXwRIAu8CCQRcAqQGXwRLBHUEdQQcAz0DLANfBOsD9AUCBPIDzAPwAjIE8AIyBP///////////////////////////////////////////////////////////////////////////////////////2kC8ALvArAEsAR5BaYF1gHwAvACdQOwBPAC8ALwAh8DsASwBLAEsASwBLAEsASwBLAEsATwAvACsASwBLAEgQMqBhEFwwTlBCQFjQSrBF8FeAU6AkME8ARsBPYFVwWgBbIErAXjBBcE5QRsBfkEEgfOBOgEewQ3A9gCNwOwBLAEsARDBKcEGASlBJkE9QIEBL4EYwLvAmIEXALgBrkEhwSpBKwEawNyAywDugQ4BEUGawRFBDoEeAOwBHgDsAT///////////////////////////////////////////////////////////////////////////////////////9pAvACmQIyBNkDzQSmBUcB8ALwAvACMgTwAvAC8AIyBDIEMgQyBDIEMgQyBDIEMgQyBDIE8ALwAjIEMgQyBPACKgbjBIcEyQToBEkEMwRpBTwFOgLQA5sEDQQXBhsFZAVZBGQFqATZA6UEMAWzBNEGdASQBGcE8ALYAvACMgQyBDIENAR1BK4DdQRMBDYDBAR1BHQC7wIJBJACpAZfBEsEdQR1BFUDPQNcA3QE6wP0BQIE8gPMA/ACMgTwAjIE////////////////////////////////////////////////////////////////////////////////////////aQLwAiADsASwBNwFpgVpAvAC8AJ1A7AE8ALwAvACLQOwBLAEsASwBLAEsASwBLAEsASwBPAC8AKwBLAEsAQtAyoG6QS4BOcEDwW/BK8EaQVtBToC/QMzBToESgZIBZ4FqwQoBv0EAwR7BUsFdwVpB0EFeAXkBOID0gPiA7AEsASwBL4EvwTxA78EagRIA0gEfwSdAhoDUQSPAqQGfwSPBMoEygSTA6wDgQN1BGsEMAabBIMEQwTiA7AE4gOwBP//iKICAEH+yQULhQigQP/////////////////////////////////////////////////////////////////////////////////////QAiYDrAOMBhYFnAjQBSYCogOiAxYFjAbpAqID6QKiAxYFFgUWBRYFFgUWBRYFFgUWBRYFogOiA4wGjAaMBl0EAAh4BXwFlgUqBg8FmQQ0BgMGXgOjA4sFdAS+BvwFTAbTBEwGkAV4Be4E2wV4BekHewXsBHsFogOiA6IDjAYWBRYFzgT8BCsE/ATEBNAC/AQQBTICwQK8BDICyAcQBdsE/AT8BGoDKwQnAxAFvASMBrwEvAQ0BBQFogMUBYwG////////////////////////////////////////////////////////////////////////////////////////vAI4A7ME8AawBS0K5gaoAlkEWQSwBfAG5ALXA+QChAWwBbAFsAWwBbAFsAWwBbAFsAWwBTgDOAPwBvAG8AbvBLYHNgYYBsoFpAZ3BTQFfQazBl4EcQQrBhkFlQfGBs0G3QXNBkIGrwV0BX8GHAYHCRwG5QWJBVkEhAVZBPAGsAWwBVgFmAW1BJgFUAVhA5gFswW8AjkDXgW8AncIswV+BZgFmAX6A78EpQOzBTMF1gdaBTUFxgSwBVkEsAXwBv///////////////////////////////////////////////////////////////////////////////////////9ACJgOsA4wGFgWcCNAFJgKiA6IDFgWMBukCogPpAqIDFgUWBRYFFgUWBRYFFgUWBRYFFgWiA6IDjAaMBowGXQQACHYFfAWWBSAGDwWZBDQGAwZeA6MDiwV0BL4G/AVMBtMETAaQBXgF7gTbBXYF7Ad7BewEewWiA6IDogOMBhYFFgXOBPwEKwT8BMQE0AL5BBAFMgLBArIEMgLJBxAF2wT8BPwEagMrBCcDEAW6BIwGvAS6BDQEFAWiAxQFjAb///////////////////////////////////////////////////////////////////////////////////////+8AjgDswTwBrAFLQrmBqgCWQRZBLAF8AbkAtcD5AKEBbAFsAWwBbAFsAWwBbAFsAWwBbAFOAM4A/AG8AbwBu8Etgc2BhgGygWkBncFNAV9BrMGXgRxBCsGGQWVB8YGzQbdBc0GQgavBXQFfwYcBgcJHAblBYkFWQSEBVkE8AawBbAFWAWYBbUEmAVQBWEDmAWzBbwCOQNeBbwCdwizBXwFmAWYBfoDvwSlA7MFMQXWB1oFNQXGBLAFWQSwBfAG//+QogIAQY7SBQuFCKBA/////////////////////////////////////////////////////////////////////////////////////xQCIwI1AysFkwSWBtcFxQFeAl4CagSTBPYBkwIhAvACkwSTBJMEkwSTBJMEkwSTBJMEkwQhAiECkwSTBJMEbwMxBxAFLwUMBdUFcwQhBNMF5wU7AiMC6QQnBDkHCAY7BtEEOwbyBGQEbQTTBcMEaAeeBHsEkQSiAvACogJWBJYDngRzBOcEzwPnBH0EtgJiBOkEBgIGAjMEBgJxB+kE1QTnBOcERAPRA9MC6QQCBDkGMQQIBL4DCANoBAgDkwT///////////////////////////////////////////////////////////////////////////////////////8UAkoCxwMrBZEENQcABiECtgK2AlwEkQRSApMCSAJOA5EEkQSRBJEEkQSRBJEEkQSRBJEESAJSApEEkQSRBNEDLQeFBWAFGQXsBXsEZATLBR8GpgKmAlAFhQSLB4EGXgYGBV4GSAVoBKIEDAYzBbwHVgX+BKIEpgJOA6YCQgRKA9sE1QQQBR0EEAW6BBkDhQRCBXECcQL2BHEC2wdCBfQEEAUQBaID+gN5A0IFjQTZBqAEjQTnAycDaAQnA5EE////////////////////////////////////////////////////////////////////////////////////////FAISAhcDKwVoBFgGXAW8AUgCSAJqBGgE7AF/AgYCzQJoBGgEaARoBGgEaARoBGgEaARoBAYCBgJoBGgEaARqA8cGcQTJBK4EVAUXBMcDagVtBS8CIwJ1BMsDsgaeBcMFhwTDBY0EBAT8A2gFYgTRBicEBgQ/BEoCzQJKAiMEJwNvBIUEngSaA54E8gOBAgIEngQIAggC5wMIAvoGngR9BJ4EngQrA20DmAKeBLIDvAXTA7IDjQPLAmgEywJoBP///////////////////////////////////////////////////////////////////////////////////////xQCSgKgAysFaATZBqoFCgK2ArYCXARoBDkCkwJIAl4DaARoBGgEaARoBGgEaARoBGgEaARIAkgCaARoBGgErAPZBgYF9gTlBGoFVgQ/BIUFmgWTAqYC5wQlBAoHCgbXBaQE1wXfBD0EPwSHBbgEJwfZBIMESgSmAl4DpgI5BDMDbwTBBMME3QPBBHUE/AJUBNUEYAJgAosEYAI9B9UErgTDBMEEXgPJA0gD1QQZBE4GPwQnBKQD1wJoBNcCaAT//5iiAgBBntoFC4UIoED/////////////////////////////////////////////////////////////////////////////////////7gGmAksDJQXhBIoGrwW5AQADAAPHAyUFKAL+AigCwAPpBHADeARqBIUEOgSHBAUExQSHBIACgAIlBSUFJQXUA24HXgU7BSMF/gU6BcsEzQWFBh4DJASOBdQEawcjBvQF4QT0BZ0FfQTzBA0GVQXOB68F7ATQBAADwAMAAyUFJQUABAgEewSiA5gE3gOaAhMEqARYAlYCSQRKAgwHugRQBJIEegRHA3UDwwKaBPkD5gUKBPADjQNxAwADcQMlBf///////////////////////////////////////////////////////////////////////////////////////wgCAwMUBKAFIAUJB2UGJwKTA5MD2wOgBaACCAOgAsYDnAXrAwMF/wQyBcsELwVvBGkFLwXwAvACoAWgBaAFYwS8BxEGDwa5BawGxQVfBXUGTgeRA8MEiQZ8BTAItwaPBpwFjwZhBjEFeQWrBhkGAwl4BtsFhAWTA8YDkwOgBaAFAATEBCoFQAROBZMEJQOdBHAF1ALFAg4FwQIgCIUFFgVDBTAFKQQaBC4DagWJBOgGtAR/BDQEAAQaAwAEoAX////////////////////////////////////////////////////////////////////////////////////////uAaYCSwMlBeEEigavBbkBAAMAA8cDJQUoAv4CKALAA+kEcAN4BGoEhQQ6BIcE+QPFBIcEEgMSAyUFJQUlBdQDbgdeBTsFIwX+BToFywTNBYUGHgMkBI4F1ARrByMG2AXhBNgFnQV9BPMEDQZVBc4HrwXsBNAEAAPAAwADJQUlBQAElQRuBKEDmgTGA6EClQSABGECVAI5BEgCCQe4BEwEoARxBLEDcwPHApoETgSUBgIEegSNA3EDAANxAyUF////////////////////////////////////////////////////////////////////////////////////////CAIDAxQEoAUgBQkHZQYnApMDkwPbA6AFoAIIA6ACxgOcBesDAwX/BDIFywQvBYgEaQUvBfAC8AKgBaAFoAVjBLwHEQYTBrkFrAbFBV8FdQZOB5sDwwSJBnwFRAijBo8GpgWPBmEGOQV5BasGGQYDCWsG2wWEBZMDxgOTA6AFoAUABEgFMQVJBE0FdQQMAzIFZwXtAusCIQXWAgQIhQUWBU0FMwVFBCMEVgN7BeYEeAerBFsFIwQABBoDAASgBf//oKICAEGu4gULhBigQP/////////////////////////////////////////////////////////////////////////////////////PAZsCNQP8Aw4EuAV1BcQBbQJtAvwD/AP/AXMCBQIXAw4EDgQOBA4EDgQOBA4EDgQOBA4EJAIkAvwD/AP8A7UDJwehBFoERATsBOgDrQMMBfwEBAKNAigEXQPXBioFTAUiBGIFWAStA+YDIgWKBB4HJwTmA78DdAIXA3QC/AP8A1QC1QM0BGIDNAT7A3ECxAM0BNYB6gGjA9YBZAY0BDgENAQ0BMoCIQOuAjQEnQO4BXcDnwMpA4QCrwOEAvwD//8AAP///////////////////////////////wAA////////////////////////////////////////////////zwGbAoID/AMOBNUFowXeAX4CfgL8A/wDEAJzAiMCcAMOBA4EDgQOBA4EDgQOBA4EDgQOBDUCNQL8A/wD/AO1AzAH2QR8BDwECwXnA6wDGQUMBSICpgJgBGID/gZFBWkFQgR9BYEEyAP2AzkFuwRAB2gEKATTA5kCcAOZAvwD/ANnAvMDSwRZA0sEBwSIAssDSwT3AQsC1wP3AYIGSwRNBEsESwTYAjEDxgJLBMkD9gWtA8oDLgPAAs0DwAL8A////////////////////////////////////////////////////////////////////////////////////////88BmwI1A/wDDgS4BXUFxAFtAm0C/AP8A/8BcwIFAhoDDgQOBA4EDgQOBA4EDgQOBA4EDgQkAiQC/AP8A/wDtQMnB6EEWgQuBOwE6AOtAwwF/AQEAo0CKARdA9cGKAU8BSIEUAVYBJ4D5gMiBYoEHwcnBOYDvwN0AhMDdAL8A/wDVAIdBB0EVAMdBNIDcQIdBB0E1gHqAaMD1gFUBh0EGwQdBB0EvgIdA64CHQSRA7gFdwOUAykDhAKvA4QC/AP////////////////////////////////////////////////////////////////////////////////////////PAZsCggP8Aw4E1QWjBd4BfgJ+AvwD/AMQAnMCIwJ5Aw4EDgQOBA4EDgQOBA4EDgQOBA4ENQI1AvwD/AP8A7UDMAfZBHwEJgQLBecDrAMZBQwFIgKmAmAEYgP+BkAFWQVCBGsFgQS5A/YDOQW7BEEHaAQoBNMDmQJmA5kC/AP8A2cCOQQ5BEsDOQTuA4gCOQQ4BPcBCwLXA/cBbgY4BDgEOQQ5BNECJwPGAjgEwQP2Ba0DwwMuA8ACzQPAAvwD//8vQQAAxgAAAAtIAADBAAAAhFkAAMIAAABYRQAAwAAAAKZgAACRAwAAD0AAAMUAAAD4TwAAwwAAAKE2AADEAAAA/18AAJIDAAAnNwAAxwAAACI7AACnAwAAiBwAACEgAADeXwAAlAMAAIJpAADQAAAABEgAAMkAAAB+WQAAygAAAFFFAADIAAAA2DAA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AMUDAABvNgAA/AAAAEcsAAAYIQAAozoAAL4DAAC+RwAA/QAAAIoyAAClAAAAajYAAP8AAADkXwAAtgMAAIk6AAANIAAAjToAAAwgAAAYawAAgmYAAKZlAACZZgAAl2UAAFMBAABUAQAAVQEAAFUBAEHA+gUL0QUR7u4TCAPu/u7u7gHu7u4B7u4J/u4SFRfuEgHu7u7uCg3u7u7u7u7u7u4B7u4WCAEBGQ4Y7u4bGBru7h3u7u7uARX77u7u7hAe7u7uAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWEQICAgICAgICAgICAgISEAITAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIUAhUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4CDwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAgMEBQYHCAkKCwwNAAAACwMEBQ8HAwwNBgwNDgwNGhUAAQADBw4GDwgMDRITCSoQERAWLzANMhETLjIUEhQSQRMsE0JAKkIZ//8sAAAAACIMDQ4jDwkQEQoQEcwQES1F/AEG9g8H9iQCEBEvMCg2SUomMTs8PTYqOTo+Py/YQEQwNyVHQzVIKwAAOAAAAAAAAwkAAAABDgILDAgjJCUzODoADRASGxYcEicvIhcwHjkGBzIFDxEUGCkAEykAAAAAADQVKB0eACEmMR8uOxksABsAIBoqKzcANTYtAAAAAAACAgEAAwMBAAEAAQEBAAIBAQACAgMBAQAABQABAwEDBQMBAQEBAgABAAQCAAIDAQADAgEAAQEAAQEBAwAAAAAAFxgYGBkaGxscHB0dHh4fHyAgISEiIyMlJiQkJycoKCgpKSoqKisrLCwtLi4vMDEzMjQ0NDU1NTY2NzcAAAAA7u787u7u7u7uHyDu+e/u7u4M7u7uBg/u7vLu7u7u7vXuAEGggAYLJP8DCAQhBQsSEycUFRYpMkEXGBkaLDM0QkYbHB0uHksfIGtleQBB0YAGC7YDAQEBAQEBAQECAwEBAgEBAQEBAQEBAQEBAQEBAQEBAQIBBAUBAQEBAQEGAQEHCAkKCgoKCgoKCgoKAQELAQwBDQ4PEBESExQVFhMTExMXGBkTGhscHRMTExMTAR4BARMBHyAhIiMTJCUmExMTEycoKRMqKywtExMTExMBAQEBARMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTLhMTEy8TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEzATExMTExMTExMTExMTExMTAAAAAAAABAAEABwAHAAhACEAJAAiAAoAAgAWAAkAIgAiACIAFQAdAAEAFAAUABQAFAAUABQAFAAIAAQABQAcABsAFwAcACEAIAAfAB4ACQATAAAAFQASABUAAwAHABUAFQAUABQAFAAUABQAFAAUABQACAAEAAUABQAGABwAGgAYABkAIQAHABUAFAAUABQAFAAUABQACwAUAA0AFAAMABQAFAAUAA4AFAAUABQAEAAUAA8AFAARAEGShAYLlQQBAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADAAQABwADAAQABQAFAAYABgAIAAcABwARABYAEgARABIACAAIAA8ADwAXAA8AGAAPABkAGgAaAB4AFgA0AB4ABQAyAAYAIgAiADMAFwAYADUAGQAaABoAKgA2ACoANAA3ADIARQA7ADwAMwA7ADwARgA1AEcASABMADYAIgBJAEoANwBFAE4AUABiAFEAUgBUAEYARwBVAEgATABWAEkASgBYAFoATgBEAFAAUQBSAFQAOAAvACwAVQApAFYAGwAQAFgAWgBdAF0AXQBdAF0AXQBdAF4AXgBeAF4AXgBeAF4AXwBfAF8AXwBfAF8AXwBgAAkAYABgAGAAYABgAGEAYQBjAAIAYwBjAGMAYwBjAGQAAABkAAAAZABkAGQAZQAAAGUAZQBlAGUAZQBmAAAAAABmAGYAZgBmAGcAAABnAGcAZwBnAGgAAABoAGgAaABoAGgAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABBtIgGC80BrgAuAC8AMwA1ADAANwCqANsA2wDbANsAAAA9AIcANwA3ANsA2wAAACgANQAuADIALwBiAAAAAABHAAAA2wDbAFEAAADbANsA2wAAANsAhABVANsAggDbAAAAgQDbAAAAPgBCAEEASABEAFIAWwAAAAAAXgBfANsAAADbANsA2wAAAAAAewBJAFcAUgBaAFoAXQAAAF8AAABfAAAAZQBdAF8AAABdAG4AagAAAGkAAABuAAAA2wCTAJoAoQCoAKsAcACxALgAvwDGAM0A0wBBkooGC88BXAABAF0AXQBeAF4AXwBfAFwAXABcAFwAXABgAFwAXABcAGEAXABcAGIAYgBiAGIAYgBiAGIAYwBkAGUAZgBcAFwAXABnAFwAXABcAGAAXABcAGEAXABhAFwAaABhAFwAYgBiAGIAYgBiAGIAYgBiAGMAZABlAGUAXABmAFwAXABcAGcAaABhAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgAAAFwAXABcAFwAXABcAFwAXABcAFwAXABcAEHxiwYLMAEBAgMBBAEFAQYHBwEGBgYGBgYGBgYGBgYGBgYGAwYGBgYGBgYGBgYGBgYGBgYGBgBBsowGC5UECgALAAwADQAOAAoADwAQABEAEgATAAoAFAAVABUAFQAWABcAFQAYABUAFQAZABUAFQAVABoAFQAVAAoAFQAVABUAFgAXABgAFQAVABkAFQAVABUAGgAVABUAFQAVABsADAAMACQAHgAeACAAIQAgACEAJAAlACYALQAyAC8ALgAqACUAJgAoACkAMwAqADQAKwA1ADYANwA8ADIARwA9ACIARQAiAD8AQABGADMANABIADUANgA3AC8ASQAqAEcASgBFAEwAXAA8AEYAXAA9AE0ASABOAE8AUgBJAEEAUABRAEoATABTAFQAMQBVAFYAVwBNAE4AWABPAFIAWQBQAFEAWgBbAFMARABUAFUAVgBXAEsARAAsAFgALABZADgALABaAFsAHQAdAB0AHQAdAB0AHQAfAB8AHwAfAB8AHwAfACMAIwAjACMAIwAjACMAJwBc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HBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBYcHBwcHBwcHBwcFhwaHBwWHBwcHBwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhwWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWHBYWFhYWFhYWAEHwngYLef//////////////////////////////////////////AAAAAAAAAAT+//+H/v//BwAAAAAAAAAA//9/////f//////////zf/79//////9///////////8P4P////8x/P///wAAAAAAAAD//////////////wEA+AMAQYCgBgtBQNf///v/////f39U/f8PAP7f///////////+3/////8DAP///////58Z////zz8DAAAAAAAA/v///38C/v///38AQcqgBguzAf///wcHAAAAAAD+//8H/gcAAAAA/v//////////fP9/LwBgAAAA4P///////yMAAAD/AwAAAOCf+f///cUDAAAAsAMAAwDgh/n///1tAwAAAF4AABwA4K/7///97SMAAAAAAQAAAOCf+f///c0jAAAAsAMAAADgxz3WGMe/AwAAAAAAAAAA4N/9///97wMAAAAAAwAAAODf/f///e8DAAAAQAMAAADg3/3///3/AwAAAAADAEGQogYLGf7/////fw0APwAAAAAAAACWJfD+rmwNIB8AQbiiBgsG//7///8DAEHkogYLcv////8/AP////9/AO3aBwAAAABQAVAxgqtiLAAAAABAAMmA9QcAAAAACAEC/////////////////////////w///////////////wP//z8//////z8//6r///8/////////31/cH88P/x/cHwAAAABATABB4KMGCwEHAEHwowYLJoAAAAD+AwAA/v///////////x8A/v////////////8H4P////8fAEGwpAYLFf//////////////////////////PwBB0KQGCxX//////////////////////////w8AQfWkBgvJAmD/B/7//4f+//8HAAAAAAAAgAD//3////9//////wAAAAAAAAD//////////////wEA+AMAAwAAAAAA//////////8/AAAAAwAAAMDX///7/////39/VP3/DwD+3////////////t//////ewD///////+fGf///88/AwAAAAAAAP7///9/Av7///9/AP7/+///uxYA////BwcAAAAAAP7//wf//wcA/wP///////////98/3/v//89/wPu////////8/8/Hv/P/wAA7p/5///9xdOfOYCwz/8DAOSH+f///W3ThzkAXsD/HwDur/v///3t8787AADB/wAA7p/5///9zfOPOcCww/8AAOzHPdYYx7/Dxz2AAID/AADu3/3///3vw989YADD/wAA7N/9///978PfPWBAw/8AAOzf/f///f/Dzz2AAMP/AEHQpwYLOP7/////f/8H/3//AwAAAACWJfD+rmz/O18//wMAAAAAAAAAA/8DoML//v///wP+/98Pv/7/P/4CAEGqqAYLa/8fAgAAAKAAAAD+/z4A/v///////////x9m/v////////////93kAEAAJEBAACSAQAAkwEAAJQBAACVAQAAlgEAAJcBAACYAQAAmQEAAJoBAACbAQAAnAEAAJ0BAACgAQAAoQEAAAEAAAABAEGhqQYLBRUKAAAVAEG4qQYL1QEVEAwTHB4DDR8gISIjGxoRGRkZGRkZGRkZGRYSAg4LDxwYGBgYGBgWFhYWFhYWFhYWFhYWFhYWFhYWFhQcBBwWHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWHCQcHBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUGBgYGBgYGBgYGBgYGBgYGBwcHBwcAQZarBgtrAQGiAQAAowEAAKQBAAClAQAApgEAAKQBAACnAQAAqAEAAKkBAACQAQAAkQEAAJIBAACTAQAAlAEAAJUBAACWAQAAlwEAAJgBAACZAQAAmgEAAJsBAACcAQAAnQEAAKABAAChAQAAAQAAAAEAQY2sBgsFFQoAABUAQaSsBgvVARUQDBMcHgMNHyAhIiMbGhEZGRkZGRkZGRkZFxICDgsPHBgYGBgYGBYWFhYWFhYWFhYWFhYWFhYWFhYWFBwEHBYcGBgYGBgYFhYWFhYWFhYWFhYWFhYWFhYWFhYcJBwcHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI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TExBVEUAAExDX01PTkVUQVJZAExDX01FU1NBR0VTAEHQ+gYLB0MuVVRGLTgAQej6BgugEBilAgCwpQIAQKYCAE5vIGVycm9yIGluZm9ybWF0aW9uAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE11bHRpaG9wIGF0dGVtcHRlZABSZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZQBLZXkgaGFzIGV4cGlyZWQAS2V5IGhhcyBiZWVuIHJldm9rZWQAS2V5IHdhcyByZWplY3RlZCBieSBzZXJ2aWNlAAAAAAClAlsA8AG1BYwFJQGDBh0DlAT/AMcDMQMLBrwBjwF/A8oEKwDaBq8AQgNOA9wBDgQVAKEGDQGUAgsCOAZkArwC/wJdA+cECwfPAssF7wXbBeECHgZFAoUAggJsA28E8QDzAxgF2QDaA0wGVAJ7AZ0DvQQAAFEAFQK7ALMDbQD/AYUELwX5BDgAZQFGAZ8AtwaoAXMCUwEAQbiLBwsMIQQAAAAAAAAAAC8CAEHYiwcLBjUERwRWBABB7osHCwKgBABBgowHCyJGBWAFbgVhBgAAzwEAAAAAAAAAAMkG6Qb5Bh4HOQdJB14HAEGwjAcLkQHRdJ4AV529KoBwUg///z4nCgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUYAAAANQAAAHEAAABr////zvv//5K///8AAAAAAAAAABkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRjQcLIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi44HCwEMAEGXjgcLFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxY4HCwEQAEHRjgcLFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/44HCwESAEGLjwcLHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwo8HCw4aAAAAGhoaAAAAAAAACQBB848HCwEUAEH/jwcLFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrZAHCwEWAEG5kAcLJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBBhJEHCwIGAgBBrJEHCwj//////////wBB8JEHC/cI/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAA6MsBAAgCAAAJAgAACgIAAAsCAAAMAgAADQIAAA4CAAAPAgAAEAIAABECAAASAgAAEwIAABQCAAAVAgAABAAAAAAAAAAgzAEAFgIAABcCAAD8/////P///yDMAQAYAgAAGQIAABjLAQAsywEAAAAAAHzMAQAaAgAAGwIAAAoCAAALAgAAHAIAAB0CAAAOAgAADwIAABACAAAeAgAAEgIAAB8CAAAUAgAAIAIAAE5TdDNfXzI5YmFzaWNfaW9zSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAWPgBAHzLAQBgzQEATlN0M19fMjE1YmFzaWNfc3RyZWFtYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAAADD4AQC0ywEATlN0M19fMjEzYmFzaWNfb3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAtPgBAPDLAQAAAAAAAQAAAKjLAQAD9P//TlN0M19fMjE1YmFzaWNfc3RyaW5nYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAABY+AEAOMwBAOjLAQA4AAAAAAAAADDNAQAh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\";function M(){const A=atob(G),I=new Uint8Array(A.length);for(let g=0;gnew o(A)))}export{y as engines,F as formats,R as graphvizVersion,s as instance};\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending(value, maxValue) > 0\n : ascending(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof = number) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export default x => () => x;\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","function responseBlob(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.blob();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n","function responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.arrayBuffer();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n","export {default as blob} from \"./blob.js\";\nexport {default as buffer} from \"./buffer.js\";\nexport {default as dsv, csv, tsv} from \"./dsv.js\";\nexport {default as image} from \"./image.js\";\nexport {default as json} from \"./json.js\";\nexport {default as text} from \"./text.js\";\nexport {default as xml, html, svg} from \"./xml.js\";\n","function responseJson(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseJson);\n}\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import text from \"./text.js\";\n\nfunction parser(type) {\n return (input, init) => text(input, init)\n .then(text => (new DOMParser).parseFromString(text, type));\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export {default as cluster} from \"./cluster.js\";\nexport {default as hierarchy, Node} from \"./hierarchy/index.js\";\nexport {default as pack} from \"./pack/index.js\";\nexport {default as packSiblings} from \"./pack/siblings.js\";\nexport {default as packEnclose} from \"./pack/enclose.js\";\nexport {default as partition} from \"./partition.js\";\nexport {default as stratify} from \"./stratify.js\";\nexport {default as tree} from \"./tree.js\";\nexport {default as treemap} from \"./treemap/index.js\";\nexport {default as treemapBinary} from \"./treemap/binary.js\";\nexport {default as treemapDice} from \"./treemap/dice.js\";\nexport {default as treemapSlice} from \"./treemap/slice.js\";\nexport {default as treemapSliceDice} from \"./treemap/sliceDice.js\";\nexport {default as treemapSquarify} from \"./treemap/squarify.js\";\nexport {default as treemapResquarify} from \"./treemap/resquarify.js\";\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packSiblingsRandom(circles, lcg());\n return circles;\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","export default x => () => x;\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","export {default as schemeCategory10} from \"./categorical/category10.js\";\nexport {default as schemeAccent} from \"./categorical/Accent.js\";\nexport {default as schemeDark2} from \"./categorical/Dark2.js\";\nexport {default as schemeObservable10} from \"./categorical/observable10.js\";\nexport {default as schemePaired} from \"./categorical/Paired.js\";\nexport {default as schemePastel1} from \"./categorical/Pastel1.js\";\nexport {default as schemePastel2} from \"./categorical/Pastel2.js\";\nexport {default as schemeSet1} from \"./categorical/Set1.js\";\nexport {default as schemeSet2} from \"./categorical/Set2.js\";\nexport {default as schemeSet3} from \"./categorical/Set3.js\";\nexport {default as schemeTableau10} from \"./categorical/Tableau10.js\";\nexport {default as interpolateBrBG, scheme as schemeBrBG} from \"./diverging/BrBG.js\";\nexport {default as interpolatePRGn, scheme as schemePRGn} from \"./diverging/PRGn.js\";\nexport {default as interpolatePiYG, scheme as schemePiYG} from \"./diverging/PiYG.js\";\nexport {default as interpolatePuOr, scheme as schemePuOr} from \"./diverging/PuOr.js\";\nexport {default as interpolateRdBu, scheme as schemeRdBu} from \"./diverging/RdBu.js\";\nexport {default as interpolateRdGy, scheme as schemeRdGy} from \"./diverging/RdGy.js\";\nexport {default as interpolateRdYlBu, scheme as schemeRdYlBu} from \"./diverging/RdYlBu.js\";\nexport {default as interpolateRdYlGn, scheme as schemeRdYlGn} from \"./diverging/RdYlGn.js\";\nexport {default as interpolateSpectral, scheme as schemeSpectral} from \"./diverging/Spectral.js\";\nexport {default as interpolateBuGn, scheme as schemeBuGn} from \"./sequential-multi/BuGn.js\";\nexport {default as interpolateBuPu, scheme as schemeBuPu} from \"./sequential-multi/BuPu.js\";\nexport {default as interpolateGnBu, scheme as schemeGnBu} from \"./sequential-multi/GnBu.js\";\nexport {default as interpolateOrRd, scheme as schemeOrRd} from \"./sequential-multi/OrRd.js\";\nexport {default as interpolatePuBuGn, scheme as schemePuBuGn} from \"./sequential-multi/PuBuGn.js\";\nexport {default as interpolatePuBu, scheme as schemePuBu} from \"./sequential-multi/PuBu.js\";\nexport {default as interpolatePuRd, scheme as schemePuRd} from \"./sequential-multi/PuRd.js\";\nexport {default as interpolateRdPu, scheme as schemeRdPu} from \"./sequential-multi/RdPu.js\";\nexport {default as interpolateYlGnBu, scheme as schemeYlGnBu} from \"./sequential-multi/YlGnBu.js\";\nexport {default as interpolateYlGn, scheme as schemeYlGn} from \"./sequential-multi/YlGn.js\";\nexport {default as interpolateYlOrBr, scheme as schemeYlOrBr} from \"./sequential-multi/YlOrBr.js\";\nexport {default as interpolateYlOrRd, scheme as schemeYlOrRd} from \"./sequential-multi/YlOrRd.js\";\nexport {default as interpolateBlues, scheme as schemeBlues} from \"./sequential-single/Blues.js\";\nexport {default as interpolateGreens, scheme as schemeGreens} from \"./sequential-single/Greens.js\";\nexport {default as interpolateGreys, scheme as schemeGreys} from \"./sequential-single/Greys.js\";\nexport {default as interpolatePurples, scheme as schemePurples} from \"./sequential-single/Purples.js\";\nexport {default as interpolateReds, scheme as schemeReds} from \"./sequential-single/Reds.js\";\nexport {default as interpolateOranges, scheme as schemeOranges} from \"./sequential-single/Oranges.js\";\nexport {default as interpolateCividis} from \"./sequential-multi/cividis.js\";\nexport {default as interpolateCubehelixDefault} from \"./sequential-multi/cubehelix.js\";\nexport {default as interpolateRainbow, warm as interpolateWarm, cool as interpolateCool} from \"./sequential-multi/rainbow.js\";\nexport {default as interpolateSinebow} from \"./sequential-multi/sinebow.js\";\nexport {default as interpolateTurbo} from \"./sequential-multi/turbo.js\";\nexport {default as interpolateViridis, magma as interpolateMagma, inferno as interpolateInferno, plasma as interpolatePlasma} from \"./sequential-multi/viridis.js\";\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export {\n default as scaleBand,\n point as scalePoint\n} from \"./band.js\";\n\nexport {\n default as scaleIdentity\n} from \"./identity.js\";\n\nexport {\n default as scaleLinear\n} from \"./linear.js\";\n\nexport {\n default as scaleLog\n} from \"./log.js\";\n\nexport {\n default as scaleSymlog\n} from \"./symlog.js\";\n\nexport {\n default as scaleOrdinal,\n implicit as scaleImplicit\n} from \"./ordinal.js\";\n\nexport {\n default as scalePow,\n sqrt as scaleSqrt\n} from \"./pow.js\";\n\nexport {\n default as scaleRadial\n} from \"./radial.js\";\n\nexport {\n default as scaleQuantile\n} from \"./quantile.js\";\n\nexport {\n default as scaleQuantize\n} from \"./quantize.js\";\n\nexport {\n default as scaleThreshold\n} from \"./threshold.js\";\n\nexport {\n default as scaleTime\n} from \"./time.js\";\n\nexport {\n default as scaleUtc\n} from \"./utcTime.js\";\n\nexport {\n default as scaleSequential,\n sequentialLog as scaleSequentialLog,\n sequentialPow as scaleSequentialPow,\n sequentialSqrt as scaleSequentialSqrt,\n sequentialSymlog as scaleSequentialSymlog\n} from \"./sequential.js\";\n\nexport {\n default as scaleSequentialQuantile\n} from \"./sequentialQuantile.js\";\n\nexport {\n default as scaleDiverging,\n divergingLog as scaleDivergingLog,\n divergingPow as scaleDivergingPow,\n divergingSqrt as scaleDivergingSqrt,\n divergingSymlog as scaleDivergingSymlog\n} from \"./diverging.js\";\n\nexport {\n default as tickFormat\n} from \"./tickFormat.js\";\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","export default function number(x) {\n return +x;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n var squared = continuous(),\n range = [0, 1],\n round = false,\n unknown;\n\n function scale(x) {\n var y = unsquare(squared(x));\n return isNaN(y) ? unknown : round ? Math.round(y) : y;\n }\n\n scale.invert = function(y) {\n return squared.invert(square(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (squared.domain(_), scale) : squared.domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return scale.range(_).round(true);\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, scale) : round;\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return radial(squared.domain(), range)\n .round(round)\n .clamp(squared.clamp())\n .unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n var domain = [],\n interpolator = identity;\n\n function scale(x) {\n if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.range = function() {\n return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n };\n\n scale.quantiles = function(n) {\n return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import creator from \"./creator.js\";\nimport select from \"./select.js\";\n\nexport default function(name) {\n return select(creator(name).call(document.documentElement));\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","export {default as create} from \"./create.js\";\nexport {default as creator} from \"./creator.js\";\nexport {default as local} from \"./local.js\";\nexport {default as matcher} from \"./matcher.js\";\nexport {default as namespace} from \"./namespace.js\";\nexport {default as namespaces} from \"./namespaces.js\";\nexport {default as pointer} from \"./pointer.js\";\nexport {default as pointers} from \"./pointers.js\";\nexport {default as select} from \"./select.js\";\nexport {default as selectAll} from \"./selectAll.js\";\nexport {default as selection} from \"./selection/index.js\";\nexport {default as selector} from \"./selector.js\";\nexport {default as selectorAll} from \"./selectorAll.js\";\nexport {styleValue as style} from \"./selection/style.js\";\nexport {default as window} from \"./window.js\";\n","var nextId = 0;\n\nexport default function local() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","import pointer from \"./pointer.js\";\nimport sourceEvent from \"./sourceEvent.js\";\n\nexport default function(events, node) {\n if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n events = sourceEvent(events);\n if (node === undefined) node = events.currentTarget;\n events = events.touches || [events];\n }\n return Array.from(events, event => pointer(event, node));\n}\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([array(selector)], root);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","export default function() {\n return !this.node();\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n return Array.from(this);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Transition} from \"./transition/index.js\";\nimport {SCHEDULED} from \"./transition/schedule.js\";\n\nvar root = [null];\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n","import \"./selection/index.js\";\nexport {default as transition} from \"./transition/index.js\";\nexport {default as active} from \"./active.js\";\nexport {default as interrupt} from \"./interrupt.js\";\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export {default as zoom} from \"./zoom.js\";\nexport {default as zoomTransform, identity as zoomIdentity, Transform as ZoomTransform} from \"./transform.js\";\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"main\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// no jsonp function","__webpack_require__.nc = undefined;","import '../style/index.css';\n\nimport {Widget} from '@lumino/widgets';\n\nimport {NowVisPanel} from './nowpanel';\nimport {ConfigWidget} from './config_widget';\nimport {ProjectWidget} from './project_widget';\nimport {GroupWidget} from './group_widget';\nimport {HistoryWidget} from './graph/history_graph';\nimport { AnnontationWidget } from './annotation_widget';\nimport {DatabaseWidget} from './database_widget';\n//import { json } from '@noworkflow/utils';\n\n\nfunction main(): void {\n // ToDo: parse URL to open specific graphs\n var experimentsIn = (document.getElementById(\"experimentsIn\")).value;\n var selectedExp = (document.getElementById(\"selectedExperiment\")).value;\n var server = (document.getElementById(\"server\")).value;\n var experiments=[];\n\n if(experimentsIn)\n experiments=JSON.parse(experimentsIn);\n\n var mainpanel = new NowVisPanel();\n mainpanel.id = 'main';\n if(server==\"True\"){\n var projectWidget = new ProjectWidget(experiments);\n var groupWidget = new GroupWidget();\n var databaseWidget = new DatabaseWidget(mainpanel);\n\n mainpanel.addMainWidget(projectWidget);\n mainpanel.addMainWidget(groupWidget);\n mainpanel.addMainWidget(databaseWidget);\n }\n else{\n var config = new ConfigWidget();\n var annotationn = new AnnontationWidget(selectedExp);\n var history = new HistoryWidget(config, \"History\", \"History\", selectedExp,annotationn);\n var databaseWidget = new DatabaseWidget(mainpanel);\n\n mainpanel.addMainWidget(history);\n mainpanel.addMainWidget(config);\n mainpanel.addMainWidget(annotationn);\n mainpanel.addMainWidget(databaseWidget);\n history.load();\n } \n \n Widget.attach(mainpanel, document.body);\n window.onresize = () => { mainpanel.update() };\n}\n\nwindow.onload = main;"],"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","arguments","apply","_next","_throw","_classCallCheck","_defineProperties","_toPropertyKey","key","_createClass","_toPrimitive","toPrimitive","String","Number","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","_assertThisInitialized","ReferenceError","Boolean","valueOf","bind","_inherits","_setPrototypeOf","Widget","select","d3_select","AnnontationWidget","_Widget","expId","_this","node","createNode","d3node","addClass","title","label","closable","caption","setNode","setAnnotationLevelToExperiment","onBeforeHide","msg","trialId","fetchUrl","annotationLevel","anntTitle","text","setAnnotations","setAnnotationLevelToTrial","activeAnnotation","parentDock","parent","activateWidget","_fillAnnotations","_callee","_thiss","response","obj","_callee$","_context","annotations","Array","fetch","headers","status","json","item","annt","id","provenanceType","annotationFormat","description","relatedTrial","relatedExperiment","showNode","errorFeedback","fillAnnotations","addAnntRow","tBody","append","attr","actions","addMemberButton","classed","on","window","open","_setAnnotations","_callee2","header","_callee2$","_context2","table","html","addFormInput","form","fieldId","fieldLabel","fieldType","grp","divIn","inp","addFeedBackinfo","baseNode","cls","txt","desc","feedbackNode","hideNode","getValueFromSelect","defaultVale","option","options","selectedIndex","createAddGroupForm","projectsDiv","inputsDiv","descIn","annotationIn","annotationFormatIn","provenanceTypeIn","confimButton","addAnntButton","successFeedback","newAnnotation","annotation","property","body","JSON","stringify","content","document","createElement","BaseActivationGraphWidget","ConfigWidget","showTrial","showInfo","graphType","useCache","historydiv","showGraph","trialdiv","graphTypeForm","useCacheForm","_defineProperty","_createForOfIteratorHelper","isArray","_unsupportedIterableToArray","_n","F","_arrayLikeToArray","toString","from","test","forceSimulation","forceLink","forceManyBody","forceCenter","forceCollide","scaleOrdinal","schemeTableau10","drag","QueryWidget","QueryResultWidget","DatabaseTabWidget","TableInfoWidget","_DatabaseTabWidget","tableName","details","concat","style","display","flexDirection","height","overflow","contentContainer","error","columnsTable","columnsThead","_i","_arr","columnsTbody","columns","col","row","notnull","pk","foreign_keys","fkTable","fkThead","_i2","_arr2","fkTbody","_iterator","_step","fk","to","err","referenced_by","columnReferences","ref","referenced_column","refTable","refThead","_i3","_arr3","refTbody","_iterator2","_step2","referencing_table","referencing_column","DatabaseWidget","_Widget2","panel","_this2","nodes","links","Set","container","headerContainer","controlsContainer","tablesDropdown","dropdownButton","openNewQueryTab","clearSelection","color","dropdown","getElementById","isVisible","event","button","contains","target","showLoadingMessage","onAfterShow","fetchAndRenderTables","querySelector","selectAll","remove","_fetchAndRenderTables","dropdownMenu","data","console","showLoadingState","ok","renderTableList","tables","buildGraphDataFromTablesResponse","initializeGraph","renderGraph","dataLoaded","t0","showErrorMessage","message","_this3","graphData","map","sourceTable","tableForeignKeys","existingLink","find","link","source","sourceColumn","targetColumn","createArrowMarker","svg","createSimulation","width","isInitial","undefined","simulation","linkDistance","chargeStrength","chargeDistanceMax","collisionRadius","force","distance","strength","distanceMax","radius","alphaDecay","velocityDecay","rect","getBoundingClientRect","Math","max","_this4","svgNode","centerX","centerY","nodesCount","min","index","angle","PI","x","sin","cos","enter","selection","handleNodeClick","isValidNumber","boundedX","boundedY","widget","isSelected","selectedNodes","has","linkData","sourceId","targetId","nodeData","isConnected","some","isNodeSelected","updateSelection","active","alphaTarget","restart","fx","fy","isFinite","toggleSelection","nodeId","add","clear","each","nodeElement","newQueryBtn","clearBtn","size","innerHTML","ctrlKey","metaKey","preventDefault","stopPropagation","openTableInfoTab","getSelectedTables","selectTables","tableNames","_this5","_this6","d3menu","setAttribute","_openTableInfoTab","refWidget","_iterator3","_step3","w","encodeURIComponent","widgets","addInfoWidget","mode","_x","onResize","getInitialQuery","selectedTables","initialQuery","usedTables","joins","currentTable","joinFound","_iterator4","_step4","log","targetTable","join","_openNewQueryTab","_callee4","columnNames","_ref2","columnPromises","columnArrays","queryWidget","_callee4$","_context4","_ref","_callee3","_callee3$","_context3","_x2","all","_toConsumableArray","warn","TrialGraph","setGraph","config","showDiffFunction","nowVisPanel","sub","getElementsByClassName","graph","load","t1","t2","graphDefinition","selectedGraph","genDataflow","customForm","selectorDiv","typeOptions","useCacheDiv","selectorToggle","graphId","visible","selectorToggleI","selectorLabel","optionsNode","customLoadTooltip","div","trialid","aid","url","createResponse","activationId","div2","activationStorage","updateTooltipDiv","queryTooltip","configureGraph","updateWindow","fn","selectorReload","DiffGraphWidget","_BaseActivationGraphW","createForm","trial1","trial2","cache","functionDiffWindow","functionDiffJson","windowIdAndTitle","alert","functionDiffWidget","addGraphWidget","addHideShowButton","elementToAppendTo","buttonId","spanId","crypto","randomUUID","spanToHideOrShow","thisButton","filterVariablesArray","array","opVariables","defaultVariables","filteredArray","filter","arrayElement","includes","writeHTMLDiffVariables","spanVariables","trial1VariablesThatChanged","trial2VariablesAdded","trial1VariablesRemoved","variablesChangedTitle","spanVariablesChanged","diffVar","variablesLines","match","differentAttributes","findDifferenceBetweenVariables","colorJsonAttributesHTML","variablesAddedTitle","spanVariablesAdded","varAdded","variablesRemovedTitle","spanVariablesRemoved","varRemoved","variable1","variable2","jsonVariable1","parse","replace","jsonVariable2","jsonAsString","attributesArray","coloredJsonAsString","regex","regexMatches","RegExp","raw","_templateObject","_taggedTemplateLiteral","colorArrayElementsHTML","symDifference","coloredArray","argument","indexOf","writeFileAccess","fileAccessArray","file","buffering","content_hash_before","downloadFileContent","content_hash_after","timestamp","stack","didntChange","changeText","textChangeTitle","spanProperty","buttonDiv","lower","trial1ChangedVariablesFiltered","trial2AddedVariablesFiltered","trial1RemovedVariablesFiltered","fileAccessAddedTitle","spanFileAccessAdded","fileAccessRemovedTitle","spanFileAccessRemoved","fileAccessReplacedTitle","spanFileAccessReplaced","content_hash_before_first_trial","content_hash_before_second_trial","content_hash_after_first_trial","content_hash_after_second_trial","timestamp_first_trial","timestamp_second_trial","checkpoint_first_trial","checkpoint_second_trial","fileHash","fileName","download","href","location","origin","appendChild","click","removeChild","HistoryGraph","makeid","TrialGraphWidget","TrialInfoWidget","DiffInfoWidget","fs","instance","pl","require","svgPanZoom","HistoryWidget","annontationWidget","rightClickMenu","buildModal","buildRightClickMenu","script","execution","summarize","customCtrlClick","redTrial","state","selectedNode","greenTrial","diffGraphWidget","diffInfoWidget","customWindowTabCommand","trialIdSimplified","windowId","command","trialExportWidget","customSelectNode","trialGraphWidget","trialInfoWidget","filterDiv","scriptOptions","currentScript","scripts","filterToggle","filterToggleI","filterLabel","buildPushCommand","modal","modalBody","buildPullCommand","buildAddRemote","buildEditRemote","buildDeleteRemote","modalContent","modalHeader","cleanModalBodyAndClose","buildRestoreTrialCommand","buildRestoreFileCommand","buildProvCommand","buildExportPrologCommand","buildDataflowCommand","buildTrialFunctionDiffCommand","self","_parent$getAttribute","parentNode","getAttribute","buildTrialFunctionDiffModal","_parent$getAttribute2","buildDataflowModal","exportUrl","exportWindowId","buildExportPrologModal","provWindowId","provUrl","provWindow","prov_lines","prov","split","line","trialFiles","_submitButton","files","changeTitle","submitButton","showModal","createFormSelectInput","createFormTextInput","fileToRestore","selectedOptions","fileIdentifier","getTextInputFormByID","targetPath","restoreUrl","getRestoreOrCollabCommand","addAlert","_submitButton2","createFormCheckInput","skipScript","checked","skipModules","skipFileAccess","_submitButton3","textContent","remoteURL","remoteName","addRemoteURL","terminal_text","executeCollabCommand","remotes","_ref3","_x3","_this7","_ref4","_x4","serverUrlId","_submitButton4","server_url","remoteURLText","serverUrl","collabCommandUrl","d3content","filterInternal","executionOptions","filterReload","secondTrialId","firstTrialSelectActivation","activation","substring","secondTrialSelect","trial","tag","secondTrialSelectActivation","getSecondTrialFunctionActivations","firstTrialFunctionId","secondTrialFunctionId","_submitButton5","inferenceRules","hideTimestamps","buildExportPrologTab","exportWindow","prologSession","answerCallback","answer","answerString","answerCardTextId","answerCardText","answerWindow","format_answer","prologProgram","userQuery","consult","success","query","scrollableModal","modalDialog","overflowY","maxHeight","getDataflow","dataflowWindowId","dataflowUrl","dataflow","viz","dataflowWindow","dataflowButtons","selectedEdge","svgElement","renderSVGElement","preventMouseEventsDefault","dblClickZoomEnabled","_loop","nodeIndex","presentNode","children","tagName","toLowerCase","presentNodeSelection","shiftKey","deletePriorNodes","checkboxOpenDataflowExcludeProvenanceNewWindow","dataflowWindowD3Select","checkboxID","excludePriorProvenanceHint","chooseDataflowExcludedProvenanceWindowId","presentWindowId","newWindowId","lastIndexOf","selectedNodeEvaluationTitle","presentNodeOrderEvaluationTitle","firstEvaluationOrder","lastEvaluationOrder","dataflowUrlLastEvaluation","dataflowUrlFirstEvaluation","excludingProvenanceWindow","getDataflowWindowExcludeSomeProvenance","responseLastEvaluation","jsonLastEvaluation","dataflowLastEvaluation","responseFirstEvaluation","jsonFirstEvaluation","dataflowFirstEvaluation","dataflowAMinusDataflowB","excludingProvenanceWindowId","dataflowA","dataflowB","selectedEvaluationOrder","lastEvaluationId","linesDataflowA","linesDataflowB","newDataflow","removesLinesInDataflowFirstEvaluationFromDataflowLastEvaluation","dataflowIsAligned","addsDeletedNodeSettingsAndChecksIfDataflowIsAligned","removesDeletedEvaluationsFromAligment","newDataflowString","addsOptionToDeletePriorNodesToDeletedPriorNodesDataflow","_loop2","selectedNodeSelection","deletePriorNodesAfterDeletingPriorNodes","_excludingProvenanceW","selectedNodeOrderEvaluationTitle","dataflowUrlPresentEvaluation","selectedEvaluationDataflow","evaluations","lineIndex","trim","alignedEvaluations","alignedEvalIndex","alignedEval","_loop3","indexOfDataflowLineToRemove","lineToRemove","findIndex","dataflowLine","splice","tempArray","isAligned","evaluationWithoutSettings","lineToAdd","string","evaluationList","selectedEvaluation","dataflowTextInputEvaluation","createFormNumberInput","dataflowEvaluationInput","addsAutocompleteToDataflowWDF","dataFlowShowType","dataFlowHideTimestamps","dataFlowHideInternals","dataFlowHideNotCode","dataFlowActivationNames","dataFlowHideFunc","dataflowFileAccesses","dataflowEvaluation","dataflowGroup","dataflowMode","dataflowDepth","dataflowValueLength","dataflowName","input","autocompleteSuggestionsResults","evaluationInputHint","suggestions","opacity","border","padding","marginTop","evaluation","_loop4","evaluationSuggestionId","evaluation_id","first_char_line","downloadDataflowAsSVG","dataflowDOT","appendDiv","saveAs","Blob","outerHTML","downloadDataflowAsDOT","excludeProvenanceHint","commandTitle","trialIdTitle","hideModal","alertType","feedbackAlert","checkInputId","checkDiv","textInputId","helpId","helpText","textDiv","textInput","selectId","selectText","minOptionNumber","maxOptionNumber","defaultOption","optionsLabels","selectDiv","selectInput","optionNumber","inputLabel","minValue","defaultValue","numberDiv","formTextInput","result","_superPropGet","assign","GroupWidget","onBeforeShow","groups","setGroups","setUsers","_setUsers","userIn","users","login","userLogin","resfreshGroups","_setGroups","group","members","user","addGrpRow","_deleteGrp","grpId","deleteGrp","membersText","addMemberForm","currentGroup","deleteGroupButton","confirm","nameIn","addGrpButton","newGrp","createAddMemberForm","userId","ModulesInfoWidget","EnvironmentInfoWidget","FileAccessesInfoWidget","display1","display2","createMain","loadModules","loadEnvironment","loadFileAccess","main","h1","code_hash","info","start","duration_text","filter_trial","filterfn","select_trial","filterdiv","newfilter","on_change","modules_url","modules","modules_added","modules_removed","modules_replaced","fold","createFold","foldable","createFilter","ul","strial","element","valid","t1_path","mod_li","t2_path","elements","rem","li","version","path","createFilterFold","environment_url","environment","env_added","env_removed","env_replaced","env_li","_iterator5","_step5","_iterator6","_step6","env_cli","accesses_url","accesses","fa_added","fa_removed","fa_replaced","_iterator7","_step7","fa_li","_iterator8","_step8","_iterator9","_step9","fa_cfield","value1","value2","attr1","attr2","mod","env_field","env","fa_field","fa","v1","v2","trialDisplay","default_local","createItem","createFilterDiv","text_filter","select_local","stext","slocal","check_text","check_local","createList","list","trial_path","mode_filter","select_hash","local","smode","shash","check_mode","check_hash","startsWith","pos","select_version","sversion","check_version","file_accesses","idAttr","scriptAttr","startAttr","str_start","finishAttr","str_finish","durationAttr","argumentsAttr","anntButton","foldI","spanI","foldA","foldAI","DockPanel","findInLayout","area","splitconfig","every","child","tabconfig","tabwidget","temp","NowVisPanel","_DockPanel","addMainWidget","nowVis","wnow","addWidget","operation","layout","saveLayout","sublayout","sizes","restoreLayout","ProjectWidget","experiments","addExpRow","exp","expTBody","cloneCommandText","navigator","clipboard","writeText","divCopied","setTimeout","addExpButton","newExp","rows","count","renderTable","csv","blob","URL","createObjectURL","revokeObjectURL","paginationContainer","startIndex","currentPage","endIndex","paginationButtons","totalPages","ceil","tableContainer","thead","tbody","startRow","endRow","currentPageRows","tr","editorId","createQueryInterface","_createQueryInterface","headerRow","queryContainer","executeQuery","aceEditor","ace","edit","setTheme","session","setMode","setOptions","fontSize","minLines","showPrintMargin","enableBasicAutocompletion","enableLiveAutocompletion","commands","addCommand","bindKey","win","mac","exec","langTools","tableCompleter","getCompletions","editor","prefix","callback","completions","meta","addCompleter","setValue","focus","_executeQuery","statusArea","sql","getValue","displayQueryResults","_displayQueryResults","resultWidget","editorElement","availableHeight","minHeight","resize","experimentsIn","selectedExp","server","mainpanel","projectWidget","groupWidget","databaseWidget","annotationn","history","attach","onresize","update","onload"],"sourceRoot":""} \ No newline at end of file